From c5cadce268f5ec5c8a149c6023c1ad365d5f44d3 Mon Sep 17 00:00:00 2001 From: rowa-hooge Date: Thu, 2 Jan 2025 11:56:00 +0100 Subject: [PATCH 01/36] Fix deprecated warning in main.cpp --- src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 4dff162..6daaa51 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -917,7 +917,7 @@ void setup() { logger.flush(); NMEA2000.SetMode(tNMEA2000::N2km_ListenAndNode, NodeAddress); NMEA2000.SetForwardOwnMessages(false); - NMEA2000.SetHeartbeatInterval(NMEA2000_HEARTBEAT_INTERVAL); + NMEA2000.SetHeartbeatIntervalAndOffset(NMEA2000_HEARTBEAT_INTERVAL); if (sendOutN2k){ // Set the information for other bus devices, which messages we support unsigned long *pgns=toN2KConverter->handledPgns(); From b640d1addab9c6c105c5f1d2692fbe1f52af0251 Mon Sep 17 00:00:00 2001 From: rowa-hooge Date: Thu, 2 Jan 2025 10:59:57 +0100 Subject: [PATCH 02/36] Fix warning GwSpiSensor.h --- lib/spitask/GwSpiSensor.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/spitask/GwSpiSensor.h b/lib/spitask/GwSpiSensor.h index 3491641..c12a410 100644 --- a/lib/spitask/GwSpiSensor.h +++ b/lib/spitask/GwSpiSensor.h @@ -112,7 +112,7 @@ class SSISensor : public SensorTemplate{ .flags = SPI_TRANS_USE_RXDATA, .cmd = 0, .addr = 0, - .length = bits+1, + .length = (size_t)bits+1, .rxlength = 0}; esp_err_t ret = spi_device_queue_trans(device->device(), &ta, portMAX_DELAY); if (ret != ESP_OK) return ret; @@ -138,4 +138,4 @@ class SSISensor : public SensorTemplate{ using SpiSensorList=SensorList; #define GWSPI1_HOST SPI2_HOST #define GWSPI2_HOST SPI3_HOST -#endif \ No newline at end of file +#endif From 756064a362b169210cfb1e3ad448b1f5fc97e1c9 Mon Sep 17 00:00:00 2001 From: rowa-hooge Date: Thu, 2 Jan 2025 10:57:05 +0100 Subject: [PATCH 03/36] Fix warning NMEA0183DataToN2K.cpp Also switch to more readable function names --- lib/nmea0183ton2k/NMEA0183DataToN2K.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/nmea0183ton2k/NMEA0183DataToN2K.cpp b/lib/nmea0183ton2k/NMEA0183DataToN2K.cpp index cf335df..8fd2d7d 100644 --- a/lib/nmea0183ton2k/NMEA0183DataToN2K.cpp +++ b/lib/nmea0183ton2k/NMEA0183DataToN2K.cpp @@ -351,8 +351,8 @@ private: rmb.vmg ); send(n2kMsg,msg.sourceId); - SetN2kPGN129285(n2kMsg,sourceId,1,1,true,true,"default"); - AppendN2kPGN129285(n2kMsg,destinationId,rmb.destID,rmb.latitude,rmb.longitude); + SetN2kRouteWPInfo(n2kMsg,sourceId,1,1,N2kdir_forward,"default"); + AppendN2kRouteWPInfo(n2kMsg,destinationId,rmb.destID,rmb.latitude,rmb.longitude); send(n2kMsg,msg.sourceId); } } From a1f00dde82ae90ed926add1974e420ae19d76fb0 Mon Sep 17 00:00:00 2001 From: rowa-hooge Date: Thu, 2 Jan 2025 10:53:35 +0100 Subject: [PATCH 04/36] Fix warning extra_script.py --- extra_script.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extra_script.py b/extra_script.py index ed62c64..90470d0 100644 --- a/extra_script.py +++ b/extra_script.py @@ -274,9 +274,9 @@ class Grove: def _ss(self,z=False): if z: return self.name - return self.name if self.name is not 'Z' else '' + return self.name if self.name != 'Z' else '' def _suffix(self): - return '_'+self.name if self.name is not 'Z' else '' + return '_'+self.name if self.name != 'Z' else '' def replace(self,line): if line is None: return line From 036add6feb0d4879bce1d1bf10f7ce1ff1fa188d Mon Sep 17 00:00:00 2001 From: wellenvogel Date: Wed, 5 Mar 2025 19:49:46 +0100 Subject: [PATCH 05/36] #100: introduce extra_config, extra_js, extra_css as options in the environment --- extra_script.py | 55 ++++++++++++++----- lib/exampletask/{index.css => example.css} | 0 lib/exampletask/{index.js => example.js} | 0 .../{config.json => exampleConfig.json} | 0 lib/exampletask/platformio.ini | 3 + 5 files changed, 45 insertions(+), 13 deletions(-) rename lib/exampletask/{index.css => example.css} (100%) rename lib/exampletask/{index.js => example.js} (100%) rename lib/exampletask/{config.json => exampleConfig.json} (100%) diff --git a/extra_script.py b/extra_script.py index 90470d0..941909b 100644 --- a/extra_script.py +++ b/extra_script.py @@ -104,8 +104,7 @@ def writeFileIfChanged(fileName,data): return True def mergeConfig(base,other): - for bdir in other: - cname=os.path.join(bdir,"config.json") + for cname in other: if os.path.exists(cname): print("merge config %s"%cname) with open(cname,'rb') as ah: @@ -151,13 +150,25 @@ def expandConfig(config): rt.append(replaceTexts(c,replace)) return rt -def generateMergedConfig(inFile,outFile,addDirs=[]): +def createUserItemList(dirs,itemName,files): + rt=[] + for d in dirs: + iname=os.path.join(d,itemName) + if os.path.exists(iname): + rt.append(iname) + for f in files: + if not os.path.exists(f): + raise Exception("user item %s not found"%f) + rt.append(f) + return rt + +def generateMergedConfig(inFile,outFile,addFiles=[]): if not os.path.exists(inFile): raise Exception("unable to read cfg file %s"%inFile) data="" with open(inFile,'rb') as ch: config=json.load(ch) - config=mergeConfig(config,addDirs) + config=mergeConfig(config,addFiles) config=expandConfig(config) data=json.dumps(config,indent=2) writeFileIfChanged(outFile,data) @@ -377,12 +388,7 @@ def getLibs(): -def joinFiles(target,pattern,dirlist): - flist=[] - for dir in dirlist: - fn=os.path.join(dir,pattern) - if os.path.exists(fn): - flist.append(fn) +def joinFiles(target,flist): current=False if os.path.exists(target): current=True @@ -453,7 +459,26 @@ def handleDeps(env): ) env.AddBuildMiddleware(injectIncludes) +def getOption(env,name,toArray=True): + try: + opt=env.GetProjectOption(name) + if toArray: + if opt is None: + return [] + return opt.split(',') + return opt + except: + pass + if toArray: + return [] +def getFileList(files): + base=basePath() + rt=[] + for f in files: + if f is not None and f != "": + rt.append(os.path.join(base,f)) + return rt def prebuild(env): global userTaskDirs print("#prebuild running") @@ -463,14 +488,18 @@ def prebuild(env): if ldf_mode == 'off': print("##ldf off - own dependency handling") handleDeps(env) + extraConfigs=getOption(env,'extra_config',toArray=True) + extraJs=getOption(env,'extra_js',toArray=True) + extraCss=getOption(env,'extra_css',toArray=True) + userTaskDirs=getUserTaskDirs() mergedConfig=os.path.join(outPath(),os.path.basename(CFG_FILE)) - generateMergedConfig(os.path.join(basePath(),CFG_FILE),mergedConfig,userTaskDirs) + generateMergedConfig(os.path.join(basePath(),CFG_FILE),mergedConfig,createUserItemList(userTaskDirs,"config.json", getFileList(extraConfigs))) compressFile(mergedConfig,mergedConfig+".gz") generateCfg(mergedConfig,os.path.join(outPath(),CFG_INCLUDE),False) generateCfg(mergedConfig,os.path.join(outPath(),CFG_INCLUDE_IMPL),True) - joinFiles(os.path.join(outPath(),INDEXJS+".gz"),INDEXJS,["web"]+userTaskDirs) - joinFiles(os.path.join(outPath(),INDEXCSS+".gz"),INDEXCSS,["web"]+userTaskDirs) + joinFiles(os.path.join(outPath(),INDEXJS+".gz"),createUserItemList(["web"]+userTaskDirs,INDEXJS,getFileList(extraJs))) + joinFiles(os.path.join(outPath(),INDEXCSS+".gz"),createUserItemList(["web"]+userTaskDirs,INDEXCSS,getFileList(extraCss))) embedded=getEmbeddedFiles(env) filedefs=[] for ef in embedded: diff --git a/lib/exampletask/index.css b/lib/exampletask/example.css similarity index 100% rename from lib/exampletask/index.css rename to lib/exampletask/example.css diff --git a/lib/exampletask/index.js b/lib/exampletask/example.js similarity index 100% rename from lib/exampletask/index.js rename to lib/exampletask/example.js diff --git a/lib/exampletask/config.json b/lib/exampletask/exampleConfig.json similarity index 100% rename from lib/exampletask/config.json rename to lib/exampletask/exampleConfig.json diff --git a/lib/exampletask/platformio.ini b/lib/exampletask/platformio.ini index 096a7cd..d63dda8 100644 --- a/lib/exampletask/platformio.ini +++ b/lib/exampletask/platformio.ini @@ -10,5 +10,8 @@ lib_deps = build_flags= -D BOARD_TEST ${env.build_flags} +extra_config=lib/exampletask/exampleConfig.json, +extra_js=lib/exampletask/example.js +extra_css=lib/exampletask/example.css upload_port = /dev/esp32 upload_protocol = esptool \ No newline at end of file From 8c035c4ba18ba9e612ead5a94a8277d513620776 Mon Sep 17 00:00:00 2001 From: wellenvogel Date: Wed, 5 Mar 2025 20:48:29 +0100 Subject: [PATCH 06/36] #100: allow to set custom_config, custom_js, custom_css --- extra_script.py | 10 ++++++---- lib/exampletask/Readme.md | 18 ++++++++++++------ lib/exampletask/platformio.ini | 7 ++++--- 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/extra_script.py b/extra_script.py index 941909b..218782f 100644 --- a/extra_script.py +++ b/extra_script.py @@ -465,7 +465,9 @@ def getOption(env,name,toArray=True): if toArray: if opt is None: return [] - return opt.split(',') + if isinstance(opt,list): + return opt + return opt.split("\n" if "\n" in opt else ",") return opt except: pass @@ -488,9 +490,9 @@ def prebuild(env): if ldf_mode == 'off': print("##ldf off - own dependency handling") handleDeps(env) - extraConfigs=getOption(env,'extra_config',toArray=True) - extraJs=getOption(env,'extra_js',toArray=True) - extraCss=getOption(env,'extra_css',toArray=True) + extraConfigs=getOption(env,'custom_config',toArray=True) + extraJs=getOption(env,'custom_js',toArray=True) + extraCss=getOption(env,'custom_css',toArray=True) userTaskDirs=getUserTaskDirs() mergedConfig=os.path.join(outPath(),os.path.basename(CFG_FILE)) diff --git a/lib/exampletask/Readme.md b/lib/exampletask/Readme.md index 4c51d92..f8aea49 100644 --- a/lib/exampletask/Readme.md +++ b/lib/exampletask/Readme.md @@ -14,7 +14,7 @@ Files * [platformio.ini](platformio.ini)
This file is completely optional. You only need this if you want to - extend the base configuration - we add a dummy library here and define one additional build environment (board) + extend the base configuration - we add a dummy library here and define additional build environments (boards) * [GwExampleTask.h](GwExampleTask.h) the name of this include must match the name of the directory (ignoring case) with a "gw" in front. This file includes our special hardware definitions and registers our task at the core.
This registration can be done statically using [DECLARE_USERTASK](https://github.com/wellenvogel/esp32-nmea2000/blob/9b955d135d74937a60f2926e8bfb9395585ff8cd/lib/api/GwApi.h#L202) in the header file.
As an alternative we just only register an [initialization function](https://github.com/wellenvogel/esp32-nmea2000/blob/9b955d135d74937a60f2926e8bfb9395585ff8cd/lib/exampletask/GwExampleTask.h#L19) using DECLARE_INITFUNCTION and later on register the task function itself via the [API](https://github.com/wellenvogel/esp32-nmea2000/blob/9b955d135d74937a60f2926e8bfb9395585ff8cd/lib/exampletask/GwExampleTask.cpp#L32).
@@ -28,11 +28,13 @@ Files * [GwExampleTaks.cpp](GwExampleTask.cpp) includes the implementation of our task. This tasks runs in an own thread - see the comments in the code. We can have as many cpp (and header files) as we need to structure our code. - * [config.json](config.json)
+ * [config.json](exampleConfig.json)
This file allows to add some config definitions that are needed for our task. For the possible options have a look at the global [config.json](../../web/config.json). Be careful not to overwrite config defitions from the global file. A good practice wood be to prefix the names of definitions with parts of the library name. Always put them in a separate category so that they do not interfere with the system ones. - The defined config items can later be accessed in the code (see the example in [GwExampleTask.cpp](GwExampleTask.cpp)). + The defined config items can later be accessed in the code (see the example in [GwExampleTask.cpp](GwExampleTask.cpp)).
+ + Starting from Version 202503xx you should normally not use this file name any more as those configs would be added for all build environments. Instead define a parameter _custom_config_ in your [platformio.ini](platformio.ini) for the environments you would like to add some configurations for. This parameter accepts a list of file names (relative to the project root, separated by ,). - * [index.js](index.js)
+ * [index.js](example.js)
You can add javascript code that will contribute to the UI of the system. The WebUI provides a small API that allows you to "hook" into some functions to include your own parts of the UI. This includes adding new tabs, modifying/replacing the data display items, modifying the status display or accessing the config items. For the API refer to [../../web/index.js](../../web/index.js#L2001). To start interacting just register for some events like api.EVENTS.init. You can check the capabilities you have defined to see if your task is active. @@ -46,10 +48,14 @@ Files tools/testServer.py nnn http://x.x.x.x/api ``` with nnn being the local port and x.x.x.x the address of a running system. Open `http://localhost:nnn` in your browser.
- After a change just start the compilation and reload the page. + After a change just start the compilation and reload the page.
+ + Starting from Version 202503xx you should normally not use this file name any more as those js code would be added for all build environments. Instead define a parameter _custom_js_ in your [platformio.ini](platformio.ini) for the environments you would like to add the js code for. This parameter accepts a list of file names (relative to the project root, separated by ,). This will also allow you to skip the check for capabilities in your code. * [index.css](index.css)
- You can add own css to influence the styling of the display. + You can add own css to influence the styling of the display.
+ + Starting from Version 202503xx you should normally not use this file name any more as those styles would be added for all build environments. Instead define a parameter _custom_css_ in your [platformio.ini](platformio.ini) for the environments you would like to add some styles for. This parameter accepts a list of file names (relative to the project root, separated by , or as multi line entry) Interfaces diff --git a/lib/exampletask/platformio.ini b/lib/exampletask/platformio.ini index d63dda8..348b36c 100644 --- a/lib/exampletask/platformio.ini +++ b/lib/exampletask/platformio.ini @@ -10,8 +10,9 @@ lib_deps = build_flags= -D BOARD_TEST ${env.build_flags} -extra_config=lib/exampletask/exampleConfig.json, -extra_js=lib/exampletask/example.js -extra_css=lib/exampletask/example.css +custom_config= + lib/exampletask/exampleConfig.json +custom_js=lib/exampletask/example.js +custom_css=lib/exampletask/example.css upload_port = /dev/esp32 upload_protocol = esptool \ No newline at end of file From 52a376c43a9caf67d3fecd2a439bee9b60d2fa14 Mon Sep 17 00:00:00 2001 From: wellenvogel Date: Wed, 5 Mar 2025 20:56:51 +0100 Subject: [PATCH 07/36] release docs for 20250305 --- Readme.md | 6 ++++++ doc/Conversions.odt | Bin 26103 -> 33335 bytes doc/Conversions.pdf | Bin 38259 -> 38307 bytes lib/exampletask/Readme.md | 6 +++--- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Readme.md b/Readme.md index 4a05c6d..ecf9abc 100644 --- a/Readme.md +++ b/Readme.md @@ -170,6 +170,12 @@ For details refer to the [example description](lib/exampletask/Readme.md). Changelog --------- +[20250305](../../releases/tag/20250305) +********* +* better handling for reconnect to a raspberry pi after reset [#102](../../issues/102) +* introduce _custom_config_, _custom_js_, _custom_css_, refer to [extending the core](lib/exampletask/Readme.md) [#100](../../pull/100) +* create VWR [#103](../../issues/103) + [20241128](../../releases/tag/20241128) ********* * additional correction for: USB connection on S3 stops [#81](../../issues/81) diff --git a/doc/Conversions.odt b/doc/Conversions.odt index 9ca2adbc44e5f7c038bb02cadeb73559c7fe439b..793362d6295eb58427288770777b94530c4041bb 100644 GIT binary patch delta 31361 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 z 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
-|{!JWwAqPx2Ny{F|G&g%~- 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 diff --git a/doc/Conversions.pdf b/doc/Conversions.pdf index 3de736be458ce876b404e60dad7c020d55feb8b1..f5abdaa31e23e39b98628e1dd2f019470da1413b 100644 GIT binary patch delta 4032 zcmah~XH-+$x&=Zgp-UB_lmkc+Nl3Dj&>;yZ7^UbD=|~qsZz{5p4g%7fbdjov^dczI z6(pci1(Yg9M3AoVxaW;G-n)3mc>B-VYwr22`OW#QG4@6&-J>$PiYH8<)2tR}OaC(} z-tuvoaDpJiy@i^Jx(NXfCj1;!7v62YzHNAQLas*Z@u1(Z!1$x=l7(x}%8_#D!&3*8 zi`K^0;gaptF;#SMxX;(z-My|a3&I&7dzk8g|AD%�meM5%rBZ&c<36vRVkAsk1pp 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 RPC&%zI#EC|F}#5$@Lz#cv4sEt diff --git a/lib/exampletask/Readme.md b/lib/exampletask/Readme.md index f8aea49..7637ecf 100644 --- a/lib/exampletask/Readme.md +++ b/lib/exampletask/Readme.md @@ -32,7 +32,7 @@ Files This file allows to add some config definitions that are needed for our task. For the possible options have a look at the global [config.json](../../web/config.json). Be careful not to overwrite config defitions from the global file. A good practice wood be to prefix the names of definitions with parts of the library name. Always put them in a separate category so that they do not interfere with the system ones. The defined config items can later be accessed in the code (see the example in [GwExampleTask.cpp](GwExampleTask.cpp)).
- Starting from Version 202503xx you should normally not use this file name any more as those configs would be added for all build environments. Instead define a parameter _custom_config_ in your [platformio.ini](platformio.ini) for the environments you would like to add some configurations for. This parameter accepts a list of file names (relative to the project root, separated by ,). + Starting from Version 20250305 you should normally not use this file name any more as those configs would be added for all build environments. Instead define a parameter _custom_config_ in your [platformio.ini](platformio.ini) for the environments you would like to add some configurations for. This parameter accepts a list of file names (relative to the project root, separated by ,). * [index.js](example.js)
You can add javascript code that will contribute to the UI of the system. The WebUI provides a small API that allows you to "hook" into some functions to include your own parts of the UI. This includes adding new tabs, modifying/replacing the data display items, modifying the status display or accessing the config items. @@ -50,12 +50,12 @@ Files with nnn being the local port and x.x.x.x the address of a running system. Open `http://localhost:nnn` in your browser.
After a change just start the compilation and reload the page.
- Starting from Version 202503xx you should normally not use this file name any more as those js code would be added for all build environments. Instead define a parameter _custom_js_ in your [platformio.ini](platformio.ini) for the environments you would like to add the js code for. This parameter accepts a list of file names (relative to the project root, separated by ,). This will also allow you to skip the check for capabilities in your code. + Starting from Version 20250305 you should normally not use this file name any more as those js code would be added for all build environments. Instead define a parameter _custom_js_ in your [platformio.ini](platformio.ini) for the environments you would like to add the js code for. This parameter accepts a list of file names (relative to the project root, separated by ,). This will also allow you to skip the check for capabilities in your code. * [index.css](index.css)
You can add own css to influence the styling of the display.
- Starting from Version 202503xx you should normally not use this file name any more as those styles would be added for all build environments. Instead define a parameter _custom_css_ in your [platformio.ini](platformio.ini) for the environments you would like to add some styles for. This parameter accepts a list of file names (relative to the project root, separated by , or as multi line entry) + Starting from Version 20250305 you should normally not use this file name any more as those styles would be added for all build environments. Instead define a parameter _custom_css_ in your [platformio.ini](platformio.ini) for the environments you would like to add some styles for. This parameter accepts a list of file names (relative to the project root, separated by , or as multi line entry) Interfaces From 38d370dcfb072f17b01fc9bf2d4c6c45a0c336e5 Mon Sep 17 00:00:00 2001 From: andreas Date: Tue, 22 Apr 2025 19:35:57 +0200 Subject: [PATCH 08/36] #107: correctly handle DBT,DBS,DBK --- doc/Conversions.odt | Bin 26103 -> 26267 bytes doc/Conversions.pdf | Bin 38259 -> 38348 bytes lib/nmea0183ton2k/NMEA0183DataToN2K.cpp | 13 +++++----- lib/nmea2kto0183/N2kDataToNMEA0183.cpp | 32 +++++++++++++++--------- 4 files changed, 27 insertions(+), 18 deletions(-) diff --git a/doc/Conversions.odt b/doc/Conversions.odt index 9ca2adbc44e5f7c038bb02cadeb73559c7fe439b..d6c662c23ea119fbb79102c2384a36f4d44909f2 100644 GIT binary patch delta 22680 zcmZ6y1ymeO)GZ3Z3GNQTg1fszAUF)}5Zr?X=-|QKJp`S>HMj(K!a#7h!68V{$M@fR z*L(N%T3s#Gr@OkVPVIfpUVS?TpECiErJ;g=NB{?i3I{hBlWv%V^#SpJwn;Q8=N9M~ z|5sfS&;Qh=xWdz<1XyDH|0-!xsNwPc*98=BXj0Ivu>P+LUak24U-Mk6|Jyue9bWkV z*b4m5P6OzTC_M0ATj2gb%WE^?oNYc^aQHeq#c8W1EYlEl-0I1lnmYG*KL%6O80zX` z8#QTZSG0VCJDL_Thc_*I>AFL3^%jg&mgwQS+M7VoyUp-y_uE=RW$=NIHm}`GW?{5$ zcpG#o87c2()(xK9E-s|tm4D#P5D@bOR0PymFkSepPB?@NmM!2SEWSn1Yqi01hoRZQ z(WQr}hhU$D%5z8iNY^lcexZgk2z!RI4^(c?8g1Bek98FZC zD)xSfC>)dy9gz$&$(@efqHggGEYr)7h6%IKRQ6!X4=~-#I-~yPioY%Yh4zaneiSl1 z$`>k+Bs;E#cZ zX@p8aGqKo(_65$_dPFf9;qf6aNi`cUS1a}g?c7FzY$D)lLdiJL;Mdj$Qsbtwsh&eY zJPQhqETOw_XSGNu<2RDt4ja9a{`|B`Y z-_wjtD(q27NQj73ed;zV@a}G=)R#~ZtbKeS|DCJj0`k^Zec59vP`Pm*X8&cK6Z*)* z++Mwrc*IGuR|5h&`JXNLbZuV+BMWGKu<-(hIPg2@QgcBr91;cj#-_UKF^i_3Q5e08 zkBdD#3Vf|?$&m^u@~AQ>{)(R;I$hN|62IRkZvQ|%ITrwjdr!(|`%$eIVo$=#@O5M~ z4$6F7TFg#vIDz?D7g2up{m0Cz0qQ|E;T@h3B)PM=rp1vJ(SvjUpLrw8GfNtA(A-!+ z^*Ny9L5t{q&Hbbt)b|qIw|n{c*Tc3hA_3`G(lA$_^Wuaa8yz9M@4O@RIHDdjkW+kq zu=D-KPw-GOHCmC$adrQb^0HR#oP|o-QYoH2+k&iUhAAs+XVKi%n&m^Mi6L8~GI4C+ zLZW@nJ5*G5IrcbWF^ng2DIW85R_uBJfpqKf9a(SR4VR{Rn2dQ=z1z>wdQ9T=5Sy73 z3P4cu>%X8c5s4;B{G=++Xu1b9Lv@EFG7UYmzquWo!egL>ct)VT zbrx*%ZkdmIcw=ico9UM4S zbNenZEX^*zo=0o3=j~LmyO6S3r_eLW_s!W2Of#l^9X{P$RDBHD3H*nm($&B|W^@eO z+3svC+MAcc()R~amlR9pEaS;=(2h@+?(?;g64*r ziG*4lSD3x9-JBmgkOV7BC@s`vA3kU&2OjlT8Zk+Q0O)Id?J0{RTY+#r`;4;E{9kp! zEBU+!Hu%+97OD`{Kl4*` zqtut*FhW2~Dtc2H!bJObIK%&k@xT(|W-;XR(+`>^2eo#1^_9ssB}eh#g}v~_m7mov zhjoR_we|_947QYAA)vchb=%0y=|ohmD2)&Xt6|6Nurl)!;wB#mR_$ z7%A6L4K7{l#V68_qQ+4?Xf@i%R$>%UQt3$T6&4fLxmOio(R5rcfx9YnvFOvn*oe>aIk6BTBaa7&|4;?YUpZ+@A$11&oLddl!t z?d){xVQGFe=3qH#arE)l&pcLV58-~kX_xdePc<@eS*;W5nK)Iz)qE!MNr71n-bBt? zQGuB3*S`uQ0(@T7SFpI3@M)KsefD;JvkJ_6=}n{31jy?1MD$w>D@Jr-#h)Mo%YW*V zGbwgrjkzegCRbs*%;678biv;hzL^KnqOG#I<%AhXCzxI=H3~Q{ZVs-mvE?mltOp%c3ZmF0E7DvAEEYGFJuYCRfO z6ZFivd=siUl!4x2aZ}`zw#Y!&j@k3|NCkP`Av8ENMqSlf@?S4BtaAj>%fA96Pf|OE zGf@*+K#1-#iV@#}C4exRa^O3BI!HO%B)-O}NkcVV<0uah*ut$-RZlj$GblMLWXH}r z?=Vd82nOT#VNavKom-zPEg?gu6o}9h*?<3nN>VPImw5@Fomr2fkL$$J>rhs<-!vtf zZjNPrDh#qnMhza)emnfTLo1degJ6FVcYCmYmjMT$YIyhS$I4^7CpSa8`g#NYvG^jv z=-sy)j)n#RdCzEcq#EmyNlLla$g<&^c_}u@`7G_{ygWaP7MVgKH@}q8_=N2Fk|@$V zgGbNJ@JLMX*>j-=`~A`21n?igt~XS$^Ps@NJ#zmafc-zTaKT_9WQ7k7?!T4fm4fNm zc{y9USlByxa(@2byD3tb3J7v?aw$=mDyZkktpDKP__$M6Fv;OdQ|>U&;C)gKumk}~ z2x#qLjkEf*LM|w*E%)t@%C_@6PvH!=5nQVf|4w8-pQ4RNEOqIul*!rE)$|yVG2hT< z1GR!t2LhT5+)IByZ+p$JD=WsvAUN-!n1aL0(*6>j{j@@F+ubFa@{Fa9(mwJvfzWm0a^iy1}9`R%8b0%zCjh?c{rwO zK72-yY>{(Mo611DeyJ1ryB68a)k(>LJmT>E&<~>5vTNxaNHd2sIfdpB=>2vW7K5aI z=$rAwQ*dF}K2mtvapqn7`?+pg{*s*DNzLR|RZz;k_ZM$(Qs@nS@Y_h3|x7sZ+4$0xWtn8yF>5j=o zYosR=ZN87yM#xH$#Civ;y@8cxJ$j;i|M|tE#g(m%01Z%mJrBD|Fyf^K6BaM!GLvD?54IBF2Oc%9PF1u|~@nxu1}F>ujAN=29UN ztc4Pxh1_Mw8KLl2I&|U7vH~Q!0im&hc9MvM*fz1$Z8H7DrTgRzN&kg*vCPR6PK_5Rl0UW05E2aaam z!wGa(WPI1deYpmy^{UO-j8#KV5Kr$kqAkSNE6{%P#?6z%{)NBp<4W#O5a@1V09DX7 z%8Z(KcWks!_?s%-i0ZYbrn*mbVM2`4 zLO09O9=@yb#?&Lgqda5zM8!DHe{aH1&DOxwN_W){YhSgX%-bdVeR+-0K}?VjuTYg> zwiC)0jq5k)n3p+Tkwkl2hm4>5rdZtX>IIb6*`Cv5Bo9fzgiIfM8Cuz4IA$O=h1jG& z3vJtL7#jm4d3KOzV4af4yfx=UnHw96LEOIY1H3`Jw3eii2(c>8sLA@1m*ESxK9TK} zoJqHO`;pbv_dglZX;Jq)?vAc<>ZQdw2A?U$yEK4Q-?p0jK12kVsn|3o4O-h#l`I@)g!kyzFb1~= zFw#R zdwR3{96meU|05O!A-|Lq#v|Xu&s)fQ z;JoeG67khbR$tuT08;hn{(Q>a&hgqb{w+X*1KD!mriy4$EN>T>{{;)U#?8R%a}yy{ zUxxd{)gipPXstUX;a}1|@HX{W&%qcHvA6nppKINvgVb@D+fTR)Z_X`JqdkaghX66+ zCo5QwLCLBen*CGXu}yT%y{208`A9 z>2VGuL@X1vG6XR(?yyt@2`&=gb$HJtr!?|Hx{nPvpVGiv(b};6qmVkhz z+L13}6U(<7L7+UQE@!)e^NrW^T0(U)<;J`3TwYA?I_0G;tcKtDr_v818AXopsSLJP zlfTJ5p@FwdS|8-o{s@0xbXbX>AAv_JltNq`^MN@Lu7ZexHyU{*dTnuQwI`JAjUyRG z9-B=>_jXBSRjRE=bj|LV)KlzS{%ZTaY&~b&kI}t?SES+80xZ6))ET(_@9rQa;wcBIbMs#ZkX z@DqR|a_wIvzCOZZ+5UXW(TGo-+H`)w3c?}B$)38ITLBA1gW0QlC4nmj^=E$dYg9cA z>9R@+g7T`~syTCcqrG}|hN5{5RxhY?d}~A>OD~!=&S?1@;2nI@k$EDjEI45_5fF-I z1zK&A+Cd!coKYBt3(AUYm8!g}gq)Nc6FT54&|k6P%bKKUMqtwuc`z%V6Gkm{q+0cY z1s)lSp8VU2y^Kw1u&Sqz!yJ}PcGH25t>L*cIXJY2W0V1g;|gyn&LJ{|-kh|dlFt!2 zwV!ru`W=eS$?6;`UX}Vd;H17_%)uimUIdXqs;A6NG}oG{9e5EeF^u|62_$;9JON&b z2ik$`-1U3STt^8IetVJh0dr!_jYHD!RsWR07COwl&<4%cx`;W|5~8j&^0S<((m$3B zPj5_PZnSUoWi=mF)e{XQ$#cG9PhGMjM5>R?fq|5JY|5&qf1`^B3F=2?lbX+b7L0TF zuq?(ovp2A8ALYZhwvE_xECYehcYxYIdR*_(ZzsC^Gd{uof@k&ZHr7M7Y%^tHO95i# zx0YVSXdgW}2p3ZT>469gb4LO=1ESNqQfqw6NiKrVj$h7i=&>-*XjC7yif zW}lA*{3St0Hu{b0^OKc;=D_hRMe6dKh-|Q3A;Cm7WoaX!*wPlIujHZoE`X`;%Gd2! z{!CkLb!0QA$!eNY`aNylD01lwSPpSzH6?%-6dDr}5qcQpQ_dOM2EnS|X5ebYgf~nj z#j(N0AlpZJBdPk;jT}py9CzUilM_JmN>(0gWOTSo6R38N8vml1^?SaZrhfeLMBjNc zz4Y^55W`ALp?9k0q)&AXD$o=;r(wAwODXe9F`^|!pPfR+1S2kKhZCQM+lVagC;vKQ z&WQjBq?=}wA+Z^Kq1s6bj-;?6jp5nldPB{b1VuQ-(LNh1T2naFlv$tK*tLr!i^CKc z)h;}({ZY45u5WXKR7{8Kuv2$4_>(`X3q*83o8E;;%E~In!l`Xz3Up9{?Pu9lBPq89 zJ0WEtr?GDyq?x4bM)+%mCH*5mtp-HcjY2MHLF@ZG2b6V$MZc@7lo|usmVHGHp03k6 ztJbYx(1PBuEQmyrT+{ADZDMhw^W_o|PW`%y=sm0?LBQZ?7B776EPL^*+}o-@^yEvL zvPQF_%ZBY9I4}`oAP*8`5k*24>hrJ5jc;Ixo{20OX_i(uJPgLZ#HIQX)LkoQSJfQa zO-zXF6+kY1i|ODVM#dh^xTOE`0kqs@7KI~?5Q)6QI_Q;c4RS7K)+PsE55h1iFHw!= zl>r}*6!YNJzc~7e>24Om+tlBO;bkGC1RTZ@E>RB8E=Wp0$>M2)Bvopt1hWc}L1_|= z6Nk80cFd!bFgU31zIel+MOCZx_P+bn2K?D<3u;0NwCoUCN{K8T1ebN<4hqAUIyEh4 zRp8H-*ub%FBMzl5V<{w(coXW13rLnhBu2Qf;TxI9moa$YYW$@}MUd#;PCV+!6OyK} zfN$e|=3=$Se~1x%%>Km|K4@Kf0zKZE~Dr)niq8 zDD>Cg3{wu8m;8s7F3X2a({B=OcLZt(m4JYH&#s2NN8h`3+eYPkp$AfA0MwJ)?W(2A z3?~^$r0r>T1+*u(hE89^Aeg*M`*lOnC!p_L+EF)_UaS(t`zn7+bW>AW8%fUb^5=u} zXQxD|(pL*zhG93$V`8>`U+@2VQlVccYv`rt{%-!$3Tl{li~LzOrZaJ(&J?!wJPgZ_ z{Tz0mr~ia{advlx;)T=Y3y`ytDL2&`5|4{}nnH`n(sB)W^+X(Y=b7GCKb2ZKaKc-5 zRl{9~u`xKB{5HH2EI-MMi-d(4ynTjx@sE%7H9p1NHx@(I$YHkV2@7Fu=WTZ|n{pLt z9b5;3MNrLdVk_^`U9`rPM$+$b80UlGqxiFE7m=pFoK;Lwp@)b(5MJ}k{B5=MFN4}p z?GLuQ(O7LHc?E0>2y>i7^S6*7cZqh?#Ae>P>lZ2-3mcIrS#3~vk?9k>(al=5?jE1b z*_?N9!RJD1dc&N_bu}jSF155FOc5`{g&!zM$&Ky&D*tqU5nR(fzK#e~9Q%tn+t3y@ zVn-Ov=~95cO3Rr|zZkuB$J*o|`_e?MwN>uM`?; zW&k-Uwds;VUtrMAG#T>CVYjt@kl{3KLFpWj26em8!8)7ssK)#4E|;0Um}Nt|>yqQM z6@IRNJdFDb;}rW;BMwz~klc7_oM8m3FMxML2fZJ8B!iEyIOoSW-P8>N@xW&q4PTr{ zUD#)v0~&}_Y=F{x>+2B>>K|MyoLctrz~H+DfA=*dhF|Z-Mt>VM2M5>~1h(^k;M65G zC5l<{644)v7NB4lbC_|$zP@EYeD$&7pHU+C8KZPDY^Y&m&gqGM`V_L|tA+*E*H%4c zrh&9`r%n|YD|@VIoYkWq_)}?}7@u&DCRUv%DnXz%ov#5lo!Md&zuzx~Ryl*00m&1e zQm96JJ9XJZ!P$bl%_yveb;|m>Aem3$_jl^9>*6Xi@0Wm{+w0JO*N|>QqE2;*hcvq< z^UxruDQVU-sS4kd9`M1S%CyGP>KNgAeXalL6DB?82sl6YWQpjEodlg{B^Gd4s&ya# za%HWs)BtJJ)o1Xd2$qcXsn8|>Fb?y39Xfif^p|9RB~NnST8C08P*^cX!7r5_U?85k z@gvuCWei^xb$x;FPJrWWGy|uoxm@(D6F5Ld;K)fa&f4{*=cOB_azoQq*xC6_jmRp@ z`$D!hoBrmyN&dJODmDdi;f91*B$!5{T{QoU*7!#XF%?nGAmMX-V@M$j#Ll_(QX2>c z=W2y&S2Okn^&DW-Vhjlg2!=}3lne;00dEg?f-RVLKYbt~c zjS?%QdYJW-Su~k(`Y5?HFwFD*Jr%-=K5dbb4R$Ztp&m|^JvMfobGh7Z_Pnoc9>Zd4 zRK8^e#XV8iQ~ap#S~3)|spf8Ec@NFBkv&~6bkf`_(Ra^T)hlOOFg}4-^11HpIidMy z4N-|&7;O(?(**b6K7NuknRi%Q!8i<=XM+$M?JNNm&o}KZGm*(07@k5JOnxeFA)iA) z9}&KEnL0=JjWM~yYI0{%L+-D%*vuh|btq-pOAGD_!J_S80RJ{TVX2n~k()pSpJ-~o z&RAwuDZ=44BSqus67 z8v0q+gClY?J>J6rht4Ldg6leZbPsAjz3?q$DHAPG)PNQyw>7>K2sGTh`?{WsE$w)yI>YN36{(J&$z}#^*i;)D77>ra`*;!@nf z(|2~(UyFWDXTdi}xlOeCYAM{nSyb6Y6kmHB@Th|%k@)?hd;+gn)2ylOFpAp}A}*pg zv~kvd7lMG9Xn&MBbPwVQvq8S+(R#8XDi^1jG~@6$EY4VwU#0^fsu4Y33sRFD1qrL{ zQbozI!fvgvr<`dj{W&}wG+NKs+AS(dL>|(?cBB5#IiYvO7XBnG{EDYPe+ph-v)p9y zCsyda;yP)!*`jg_i<13O@UV3nfZQtk9Oca-Mr2nZJK8!!ckPr}B1%$6r0FR+$7kpy4rOzUNT$)s*tWh#+l?yMGMb7Q z8~w#!KN@r3L@?u4oDw6S(~7i)1am95#LoMtR8{X3@lC+dbpDlA*m_~{Af<_-aDT+< zDF!xok_pQNXMzo9qBY^`O3JN1d)i4bZ@K>72+(eS4_4>CY<8!_5b<$7SppYzen{SL zBJU^T6P_L|s#eUe_@b$h&EmY+T){4Z!dLD*3j6P6{bA4)Xw8U&&Lxjju{#r~!neAF z%U;$S1A{7s4$?xor1H(+;qvx>Vg^s>0Hhi{`SS!SS!JWQMO-*XDI^F9^uE#Zaw}Q` zt;pqj;h^CB2u#o1OS%#4rfbd566Zj!a`tGYcbrmB#@>^#aHf%lUQBN$s!whBhLL%=h<>O)kKV=2 z))yu|wz>3%TLTUR^d&v?^B^C}i!$gBOR{f+aASVu1wU*OKFWp((Io{Sa+(`CtJK!B z=zjmeQa{PFFey5(g>=?)fa6EZ{H={U9r+14s~2%Uc9xIf24{=1HFV7l0I(u`L;rk? zofXcmgbfIMs%1=%g34{b3n@j54X_Kv&aEs6g(C8+w(#kbVlR8V zn0j&RpPbrBkhkWZWaDafr9Z@Wv{1xGf9)tH9T+1)A(8#n&#OujfG(rbSIx&c8>6I6 z=vP@mEl|F#(3s8;7LrQ@EU}$>*0$ACg|Q3E3=GW@%;2kbv9Z#d)<%pAQR!JXjkCDP z;?F{)r8mcy^ea2q6+zg>E;*M!AlltKtw-C_UYZk&Fc_~8fzBLL)vj_%9%i4Tj0HPN zA#T0-%EnUZkLaXk3tY#6NN@l$sAcI(Ro*AWg(VFQY80+(5yNmGo(KO$bD`?T*LDKC za_g$;bClEtuLn^X6Zaw-k)4CUucw*&%^HIz!jM7QUT#sLYAXv76WsXlA9jevUeOF( zg)UbFGS3*0AhpqFAMKYLPqYiY_woPZ^O2W@TQ|IlTcRK*CyEjteirh?X5l4wyt!MY zf`VDYRBp*s7?AVXcc>aZ73vq9D2M+6gFIC+?>9rX{FYSn)Hsax8^@Zf1b(^`+vs+r z`Ow*~BKA}MN~v$h8*9b)A4;66DMxKT@yGRqTBGP;rr9>mk<4FGw!25k#>UE^V(EJ8 z4lWR5E;Qy*zhq4WoEj zc&(2OAAAUC)+4IBQy?5HUzk15f4;2%H}n^4gjVLj3bLToYE9WEQ02bPxY4Kxgird6;M;v1M=-})gO)sezE`?z`S76i^(lqS zYW}S?Q2)*1q$9I8a>KsT0Zl?+2D2dbQa=!yfbIWp5NNH zY?>1-={F^1hxMn~)%%aaI;#e1=)ou&>XMkOe+F@;VFK2WHNCdtY{Ca>-tR@2t@U}L zrhP@yMU_EMMFb?9ei|+Jl5~HxmK|==Az0=VTFLUHpw4Rz;zXhtjr5K+GlVqGjOW~$ zcaGS!DXwr2c;%j!n^Bv}x{|R2VuY{&!JxBE)-e1B4IiooMGj2ypL`Vg!OIbKT>9-b z)%QKw_{{%Eo>AOXt=@Hpi_XoZptId{UR5Io+wg+1F} z6;l~hFJpGo%=>XoH?9p1f(E$virkis9@&y(dm{+ykyT#|KUY+|nemxPW$ShK;J&hD zuD8-hF$ql+_F3KQ9P+SjoN9CW3ecL(Y$R9 zU$cppP}p9d4Zcj$55ypq9InI2%noIxB}&0HCO$cSA7OJ__^TmB0hHxY-B3%^*VO zn|8P2Pi@~)B~NM^j&)w96vla%G4Bg0>6RV05OFVxfoZ8FmSp{)s~Z;+ZJ-fZp~X!;8@ zv7B6!Fbb*jE_5O~jGQxiK_|=&Y!pdC%&Py?N%pV07U%U?r|ZXL3!+-#Mg zC4@t!EIz^U;tbKG_rR~zu{J7rChnAMlzozuE%n=4(^^_(o3yr&q_(>uc(n@mn%(fc8B>XU}dfO6Fu zY|%h85+j^gFyYmsXxY{Kh1$q(`(Bzyr@^mZ?&fpLM8{+weo>_*H-R8t#w)$h3rH9utmP%s|Qoun6A)BXomq31mKodF2Zs`W)Wgq zRF!^NK57@FntBgfPtxycNrW@0W3Q>cp=Im^WEpR2!$qSF#MGH^P^n-Qr%szex8mKzZ8C5D+l@+`J8lo3EELOhpKK|eaSFKz0-C>t;nwXf+P;u z6T*)e-8L)B#10795!{#3AF$sTYkY+;Krt$$D&156wrQL(f$KQ90UFQ?^UPh=|6r*0 zA(Y)`SaJ8t6zPd|N+ksfa3n}HY-_oY-@5aDd^(`Ghs=L(=x3k~L30q|)o+A8Xh5&B zZ(oV4<_*!hC(aD^3<7LAbcMf;F(wv>i&UpVI^Hjp0X!_2Vc)NC> zH9KT#WPh*nrIzBp5%L^Bk?nt-`buP}L!h1k|BZH=*F#Po3p^d_9wzZZ5bV=>+B}9d4m8AdA+qgjWLl%yczc+%^q4-b)p`lC?qBt8EFt>Ux3<@T z>y{rjoIhuWa?Q2)qS~;57#lzanO3?_1?mPNBBPDc&KYWJG0e>Hh+anc*jp0@n1|^r zM{ic*MCoT9T7t#?vMaD+0tZIcO@V0}q8R$dh(~GNkxLY0(k6b% z_k2g5`&|Q48VUXS-@hjGz{>mPTS!VQRM&3V>(#p2{B~SOU^=n&@sembA40*see51N z{u9PEZ_EG44Wd)u8#TOk_`wJ7Bc-o9KDPYV?1O&a_AczsJ_!mVGwN&ax zWU;;cM3$Z5^-r#qzQ7UJ1)vCyextv(xsgkZ^Of9+6z$a|I{vWH*<)_i1f2~z2nliH z)j+Nry$x)19gVZKTuva>LyJ>B<*o@G-tpe_#3%d)on?@Dbm%>TMAJO^(W4#k%AO#m zc5s!|cI`UzHW{i_2-AFWiKIF|`6(0o8L8=ICXn~Hb&-avA>MmHPAT=uCz;OoU{O|7 z$mn+zx|lvm%8z6`mEU?q_0o%XnHsdbE{aBec->Rf8)|;!hEN~u_3D$^k-yGSfRd!$ z^P^SA*$aGUTN(E?tj4M@zyc)ryK7>C`6k8fprPKsi1_b}R*~Ky>T4Lr04DZ8s@Ihr;=Cbsp#jbSMgTAAK9Mtd`=v=?~E+@7YS z3eWSOt8}xg3nX@)%GAP3DBAWU%65)F$y%tNo5^4T7oW)muR#}Ld;k*+QAs97SU!b ziII@P#770ZkbhFO(yPKi^uje@{P#}ZStEPqeAou!><1X+r90>)2@a8Rka3P!@SIBc znxr@TmeylHs{pslOl4@Hu%tXad{20=iZG;4q;1ag_bbTdr)-=kD0;(ev|K?1Rjp zKi^}3bUvy+cmLm_;F`8gNcV&8F5CZ z_BADm;!u#YnI`+!F~fwv3DM`+V#j=-1t*Hf_Jp}h3Y9gG5WFN}bA44vg~QK@VXdEI zR}U!TI^r*Z8mD9nl^ERg@X16XwRC4_tN*6OLB!IS!37tF<2&;$&=tk1rpA>~qDRyg zh0`WD2dMaO>3(U>Dhh1YIefHr1Zq{#nMS@VF*`p1;?;(SJ#-Wz5# z&Tv+b`nbNUUYZyE%ZEiH-AwoE_@CAnvUQ=xP@{StocuQPmB6lqhTS*6^JP%jXdDf zr#W!JfWv-US=Rs_)jbj6H9PGiO+073OyFlO6C=&yl6AdO&EB~PP? zeg?s0aMMhx%s;7f*C1=`>3R6bk0e)J%yR=YbAca0faG@50Xhb8^cnO4&w;6Elfx_! z);08XPT`6%OznpLnJi{VR(YH|^+x>f)+;!0PTiFjV5F3qieJN~dK}WU9 z{w^T?9|bp6oxqB-{Hh=WA8WIW@@8NDSK#G{*hy;AA9mD@0_~@(cd0XIk$H(plz|1Y z=W)QgH_MEv#sVdtF61;>17WdBF0cmg1j(zOpUebtKkF(n7A(I_7{XPl@bcTsK6{}X z`PyaF^x9EX_ot3db4h)lw%7*YrJ;e;KO<%KpR-?4jlqtS2HVI>2dybVuXp=cYe4)^jdO7fN>!N_q-!kvqZMc;+{NkCT#4?X6a3fps&tf}EZAHl^B0xd zg&o%GkitByn`|{N#_I{v_v=YS3Y8|J`D7GG<+a#O#$Y#TNJ=p(b+Or38aSdAV&H#? zMsbleal~v@7HJVBj7lM6g>T-*>?%7pec$nJdV=%%vUo`&Wtu%DKIa^XcY^9QE({E+ z!W4GwSO_BFyWIhKq^@5fOEy2&j4b(2#|fB=ezeJd%&Zw8X8v-rxjjR*edHSdh~@R= z-#YR&7NFSaADL@P3|oi4H!5sd*m7EY(Dti$e?Fs{QCxR!KF;fdiRv&>Z7(RnwUpsJ zJy-fF^StIBNn!K>NweJc#mP}%c|ZdBmOg2AuW&u3kdZE&xqoa_J2AKPeLfR}I>_FW z>EVNh9@!fMJoS%$jyMiqDj_b|tSQj0JZRGYichgSh$^1qk|J#js~%#Ud;B>B5a7P)*vM*dc`X1TKn<7W~} zsR!=n8}+1SZo2Kr!+8;G&7bGEg;-=C-!3g`mbAQ1w&TIZSz1=_w)!I-@-I&@9A4dx z6_uBIdDyIjo1n5a0U1UNlrO&{xTLcGs0p0md+EV@d^2)8`DM0)@3o(Jf$32?oW`2D z6Y%G&?D8Oeo^D#ysw_J*m0xsUyIB$Pm_R{!;0RckTITCc4oX3}TI?$skXF6o#9$te z4K9_6K`;<^;N~!BWJtnOEFXFoHfd}i8}!DZpXZf?B$;-XT8oha4&dX!;XD4T+YG4J zNq$Z;E*)`PTzw83+^9%xDxa#94He1gQ9DI3DxnSu+f6~fA|&DTq?uXlryQ2!GaSU* zZzYYU9_xfF^^4DI?nlu%^s>110uxO&?8M8+zEhCkPb2Y(JITp`LrvT~5YZN|S&Y1d&p=Wy(oAOxJwKsv3Ssr)4 zDNUT~z2qD4lZdtF%7`J+`}K9hq1(NFGiD4;10VaS013}ZDO`d+n(uMh7I=PO3 zzb)Z}3YE4BUHaLl{oc>@M8)IOC75A{GV_*35*p;FYnRgzE%{4Q^hh}eDDRb7clec# zdeAvVQaWw0kx#rkD05}9gv`42#@W}m`q=sc5kay)N!OR8{(>cJ%VbqkZZQ8!JJYay za6qu9Kwki|bWNI+npjrw&#^G{gTEwbY~%N|6DAm1&D_YBr?6FaIK=cxRH)O-*K@K#oKaRs+sg2Vj@+GN0d)(UoS*@Nz%(ESXp${Gn z!p%Qz(Oq5*!52G*>`?r!W5>Gq7H0(e?urfVRng+0_ytQHoX+E=qfeg&WP)iGt)O?* zI#$uXXi3tis_|yoQc5)v1k(nF8}QEZjZ-IPdTig}Q-eGku*DDItuwY!W%S8)vs&Vp zL{q0mU|ohupBbLmtLFVQGx^sdf5d5j=p5P}t&`i38$6=!(#3CbKqS${21$Nb62){_ z%t&m*pry$OyGqN|6P#NJK|i4^JRNrU^*bGUG(r3rIBgFzz)vxfRG0OWB*yKa=2xHLJiQbsW4(CvrIXW=&mR_+$nUjgYE-^?Ezani*bZ)FCp&kA2 z`1IXV+8+K&oEODX5_Bw)0N6U!)sOSqq>h3{=?%&AtflJSZH+6D8)?J8H5j2y`6~+| zi;5fiyg9TLn1bqfFAb`hETWky%LoYQkP;g-PK3m1%Q4z%cW3*ZAK;F)P0 zMf|NP3_eh<$yKikK9{te1MItAywvX&_!9TasD>n=$UKpXK|COGj81J!GeNp8Y_RRp z`;;hYz7%FGV!)NL;in%pIu4o zAx~leSJECS8Zx0kGx!6Kn#0Ipyi%gch$X`}O9$P=+{!dHz4Dh zq<>i_+>u}kZz0)2*5 zc3NjEPvvW?M!;m&G@x|011;5ml+(v{e`$yxDPZVcmiu-9xZ)gQ)DL=9e_G6B3ESsH z(KG!7#LV{=H5(JJ-QJV!xp`~uI3sXeIJ?_iEl;jVScnG8 zNKv3xVIfUM75oiS#8aF0t#l(T{en8|s$*x2f4C=)~NIR)Jjy`OpSsk)ibeVf#qRzv? zSn$>E`S#E%C7FksjCS~oPJ;HxXfJfygIYH}Z&I|=h80DtI0=FN58wU_O1G>F;&D8A z@~luXvmW)@GGck8;tlykTZ{zHFyr>`8Dg!k2<9p007Q5@vi)G{2LX(eT|$&3E?$lf z=qN#IMNw{B;w_06QZCg#??*@)|8-^EYER?AJ1k&LVV+AM%xr3%`-fZno;8pLX|XRi zXxlJ$vehdgIR66`xlYF;NgP^ zos~RNpwrs+0F>-8G&_9NcGemeB2)6oZSdCsGy8xbdJZRX?ZYEiciT@!y&2TE>;x2( zj-w||KR>+F7qo0b(X3-?8kv##b$3!)PC4>R0@;xeda-T7NBMq))Ql zg|wA!G69zLg__chiMc`J$_P~W6vfzRsrN0v15mqyzs6C4<$^V~$lDonV(%{7ioOM* zPbS$(a1*58N%&BL#1gz=MM{{ScJ86r@y2S%Q0vV;hZ~W~wI)U#ZLvOZ0mI2YX1|E& z0ll@LRSuV)cQu-bAI!@%W=3~ppAJ>{8H35r`e)!|jY*?ZVW>;AzMYI z98h*16k={BT7^1B(ctL>caja6w%Ld6Z z4;~ec;QaRYzfD<*NfLtSH)$V-^u`vwQaXKk`yMCd6>vkH6Wd&w&lNugbD>snhMWwi z^1X+At2^B2zv2rRQ$AT@o9}%`9Ok90Oi1vo!aHpm5#m2#PZD%9*h+-wiM~xJKnI{o zV2yH?Tdr$i(N)d8DAr{(TL7XLT&+K=NcA^5G`Ovs$R|h3d^8fn%wl6<@$W*@FqX+Daa~qV+9D9Vb&0U>%1Y+a zZ=87<#|~+=q2B{yz!ce_)VUui7PKfDqjfOdbvsd(bx zqYE2DPuD)t=M+nSI1G&RRCgUeW6jDtBGG@!Rpq}87c5keI`eRde@5chCCQkxzQs3K zO=GS-OV6bUF(wP&$*_hEeE5?Cj4dxtKk_QZQ`#(3(wik4cavlNRuqaht_PlZ!@m^| z!&d+V)eW}cN4qm3B$;0Zap2F@$*gcL}TSLOY!_J?G*_x^)RKL}5sb^Pg>ZHn{H5T>27fNaV(cMakuAc1|Tf zmIe(3A~?>7mwr8T@k#$;O%62q1r>AzHLFBat>p2!pM1FePC3N%)4H=N^tiCUT+%Z} zIY-z1{ws0l&cMSCm;w|z-z>bA`t)bb8RFR6@H{KvYEpf|rhb~gtdp0&$RC;od@vrL z92z(VD2N;MzQz2zyhVR2W+2YXHl7;O|K0W`+~UILgV`=52R~eu>KITH#&XL#k^9Vd zeKaX+a9Z3{!&Z+^sZy<7DzHSEZ0c%m?s1UQ7lgMT zWVnC3gbZ^n%9)HMr|<)bo3V}T=lcsBb?ij%moZ!r_bt^Md;@E5QO`BtbjzHjPC~6| z^c#X|Ke?JW^<>|M@&gE9qHS382CZ;qO&A3wk9ZTk$PWhSXycGf9Q>E< zZg4XW(b!x=VgO<>HDv^ZGV&8Uh*HVF2Y9g*MAwbj#=S#wQweFt6>sr(twkOlaJN(@ zn-Xb$cwPWkQ*~-Yy)CIkiAk)j;0<^7d%o_=Sl9Fhn={%xA~?+<8J>WFqZRfa>0yTl zjVT`Ot(`E(lH6IGT9@cXMge-q@rz|54y#TVDqRwq=4AfcgU`_~UhYB*QzB80-^o%- zw--;o*U{{xK<{zRe{#$+|36)vWn5I>*2n1@MnRBHX(Xh(LsFz$a)5yWM7kWhOF9Ik zVSu4QL2yuHq>+Z9Te^{c@OuBxz0b4XoORaPXRpuRZ_YaFe16~jrin)2WwC5DVj=|a z9jeQ^5-#8|neF8E+brJwXo@06d4_5WF>mmDxmzb2S?mHUEWusC8S{|Loo5|TyHRI0 z!o*67Fa(DQTA(p`Nf+6Q@p?IG()&I~S`gIW?YDf52I zc<==;Gf)WY?DQlT<7+wEqka7xo_u5Xm%An=Y;#cZv!yS8gn(o^I!&a2)JTTQz2T3cb z+gN4Aj!o((P&x`KcAm?v3=EnJj13HHmq<)zo5oR5O|^|KR*7EC)P4MvnOYX}_wXDV z)uzSUz+CWV)=PDvlSG!o(3kRx^wcphEt&L=1ZhK)5{tIGvsk{Ya+?wDxHf zXe;mwp3b%b^2U*(8#$8VoRjM~{w#X0OWC$jEre%U?!2 zr$5~iqxougE5uLjv66o*)tmInQCNtxnXf@l-vSxOtNfkm9F8upHuE(L@?w(E!B;Zr zG%#<20B;XTCWFY&*ryC)F*@A&k#S|NFz``qOT$%$Zl%btNXR z=63jM_6v0-q^+UORU6=`Mp=U4%&aK`dZFbZ#e&}~5S}=)gAJ`g1d*^<(Pz3+><@o8JPzujR%+kj-U^4Iy~n$9Vy5vSD|hs26s&2^OpXzDA61EN9Tn!Z4> zD$g%`C=U57BGw^|UT$LeBTam^&iH#!0_g(RY3sE?$lCcEBAY8PQWTd#{Z;l=lQyPHcXegx7uN3yv^~td|9Gso2AW?~E?db0SWUadNNf!zSwOPSQAj z7Wm5{OnG6TYVAyzR0Q0&TW@U>9$^oxe;>9SPaI*HKqXLxv>x=)aUNqDGD7OAG~|2& z$|rt`nvT^zUO)-B_d!`3M4P_wK|)v1%&(EI4nB1$ZJJ-ZK348ww4KvQ2z%63Cp?wR zUt?c{PHypA8^`n=NuHTsw5fd0=VXmymv>GxqC1R*Ju@EtJ?zj|NZ|9vlYC-~BW{GU zRJWExtfk{?sOZJ(Gge+pEQdjj1p7>B7wZ>i?B?Xu9TPgm^ z_M%$Orck4_q6WV+FLJ|f#Zh6gaKpFKY|6;47zu0=X}mY;*4Le==b@Zo27>%`7a6T! zroLf4>>JI+yK6nYTxs+ym(8xb8R7oL#>5C`0qkp5^VJs;ChE*xi&?2l@R@)t$fRxY zx|}W2CAuYt5eRkTqE)4#m+Mx2{s`HbT|}HaE>FWN!Hrrr@@rW(;_N!CXIZ7?mW$7b zj|dV$$%9I_uD_8O>#2}YX<$UG+tdoFX=og#S|5WC(O=b;yuN+urVDhgdYZ}kl&+_8 z*WUG$&b+amVX$g51{Z;~Le)D}EV7mvb}KRw3iWi~3nJ*cnD}i{m<-SC4erxjld*au z0KQf&yHdH*jje1po{(5MKvdIbox04rgQdBS6!BS|B=2Iq=a8h3?A_t0xG}k9h?AT- z0{m5ALAo3eWH^DD7{RaAhEez$wvLQ9sisA=tCIv@**u+jY@euDj_WoAe)1a1Pka5l zoZTAjoCm6jwf9ixtLbcwsIiC&Jx3?hfUc+OLl{WvwEDPIf8`tLS#Z$}yO5}gF;a)} zc|~{6m>0!fT7({x_D2~NSNeGW68*%nv$B!NEQ1XvB>bfkZc&sG3l*F4(!^ zbP9qyKw*}RH%njKWaIf&8|KD&3Vh#`#?XK&iH0Hq`L`sn&UYsi2{T)K1&QxheN6wg zT_RW2tCxwkG~%HEbAoPYsNm}=#(-4E_iqVyw@|j8^&Uwt67=JvU%FxqMBcAGE~+9% z&tKm842IiZER~Jtl#Kgp)ktBPeO$$6S9}>ZcQ0A13o1lF<-9`woJR`y6^IKjo?#Cv zrumyYeHSRZ$aG2N@f)K>#J!M=0%%@Ty%%j_*(LPxXF4}Y6C$e5u88}X$uXFiZKsIa ziSgdpm@49Kr@IfeIyIIAGm)`Jd(KAjKWOm)jbSj&s1@y|Ew{5=&O5?haGsF}z5kW+ zbW}S1_XAfjTbh&z38JCrVflP-lw61Cl_eI-~}Pw!l_q|E(JgPB7o+ATa+ zP}{^PTF2T9%m(n}`usByP&4nmZ@!P2Q_f9qBo>v=^M*^OE)G96rmXnuQ*2%1ZP2KTD z)eG9K-paZ7yVcSIl$Rlvzy`H2kf@zdq?cHIPD`QI-}N$ouz2C~PX1?_fnA#ES4xH$ z)jE&cIkSuwSTVUr(#ZNTl%OI{KAqp$mBUnB4K+DEt@c)E$?JyakG4yAT+!u-IAt_; z^QSSVOpmA~cb#a;mG}EJae?^Fc9}CE+f9fhV-?sznG1kZ8a{^qL>#jsM2|Ke7+Cm1 zg!9^9{n4`v%A?DPHU$BS{FnX!ZGJ}5X`IW_;g0j8ZyJXnWV_6T1$2nSV{U07uw{Z` zFQchAuWjXp<2wD;+Tc)y?}UJ5xFR7r<7gVput(IR7q?sa z4-t$?u`weyh~qqG}a>KAhl+f=(;j>L!DTLd9FLC60e0^yEY$s^z`% zM0XbQ%DBgIEb%a@!S0Nu_f;-gE;obFJCU-A1a`W+=&5d?P-Ej2aM)c~l-B~tJF<>N zwNOHNO`Hrd$Ol?t){lAe~8&O*0;G1lOTK1b5`WJX@CG#*!WO@F^W4(=Ct zW}hl7!?9%;fuLbjRrH=>O~R!T6Lgr}EQsujW?tI$hbm{|9f$LZg_t-w#oO}EE3%d~ zV1H~(R~S(=eyVj;HQ`vGb$S1Okw%bqOj+io%5`PILOQYuqFPV1$J(ib(yu4l)N|5E zwOPi|3~tG$)bW86au>v&O$Jxoq-X20B?+T@p5UT2zz&G^g)?P5`$Tn?W8E$a60#+= z)vdt`HUB7~7L?!0Q0T6Y^hk&hZl(py9s0+_0!yt!!TGZl0M8R+cf^}kyBEwAu@o0` zPkAOVN&$XyPHA+YM;j^d3@MDT&CcTk8 zw`arqHFP8E7}>w#oIea5&`3R6HG)UZo8J{eFD zzz#bdeE!T=ls^5urgNNP%@uSX!r+sk4eJMfx0aaC$ zx795tH>ph4oV`~gz(9K(j%Z}IFiqNWur%U4M(drGhX@CZf6VqwAEcSB8~QNor0Hl6 zl^^m-a(RZ7UjJG%aMLWC@Ony?yd`53S5g3~{0-IDAIv9K#EJhbVrx-;#<`#>p2s!f zTgeXvDacA=TbgRC`lL|Hd&~TF17CO-r6A6?3&p^-AY4q^`o4!Vwv=4;d=norMO$+< zxRTFcd;W9yKQc05v{olz&?36?-`p~JlF5ex72}Z zIkAG|_TeR^wCCRDI`K|eW*gCqB=d`K+=G+6F1xeg4GrQ%? zWbb=+7fF)ir{^IY7m-CHU1z=vJ@4N&F+@%hp~yz@&pCZn+d{?q_eR$XjlA)~8I6gk zfL+eyT{~E{77=063U+JXquaMepp6_wPUH1Ivw+4jUn{v(8r!_3mijv$*rGXg;6HPr zX?W-_^2JIT>t&dp$ia@WO>Fq}@QW8^!OPzmFeNguNzdi#j8Q-(AFM+%Eaf&d8}x2P z1UmqD@&V&PL+t@h)GwKn-txQG7Ru)j_x)adnoS^djMOMlB^_qFF)oQ1ghTVcW$!EM z%;Xwxyg;GBe=7LiNfA};UJ<*P_>rrG*#X=$7SFdS2Zy=s$mZT8-IcC(E-V}kmtEoB z|E9z&r673wI#N7`s{z%e{O~%YKb!q?$2#8XBdT{)%03;NN9M=Vgffv8|fpPb=-tN zB>G_=y6X8E`~hRR1fG)lRWz8(mXP1^LHw5|jwI&j&K{Ac;Dn%_bw6zJV@{Iofr({t zg||=0%_#&%hmGHNH2S|2lYakY`s#jLH%0k_8)D2hiAV!R3QJbMBqnSB3oP~e8Y zb$_mOfIwma6X*#&^?e+q#Kjcts$Kk6PCTb(4aA#M0N+)Z^9^prD_5|tL^Ex~r2a}Z zl^$Ud+{#|AekbTmHwM;RHImSM9E&}A^lA6b$BtS==CKhVSV)ztmMpHx&UD@AO1yPZ zSS4{z$sF-CY}#ODmxb(JP#0c5GlLa8$6K1Ve_)8Q9?Jff`KfncZ76TV-Q|~XX;4RaxS4;^8V)pb#?lL-Nj!oydrQh0 zq(w?_K#SLLypI)dE7I2RDh~wjE~1P&@|!wQBHa3Nd;Eorctk-I88xDO;8MdEIKaLe zC&iN{EN6_DQtv@bFvfqzhV91%34Is}n%~e!yGCg0g z)mF}##P|ef+7gg6D%tFjATeLpA|&O7baKsl8BU(%b9SBe*Y>l?kMr@jE8HtkDchgz zr9%33Vp$T0nHGhaOldV$)3xchH_x($pJVD`&rv{|2`+pe>>_^M-V|Y&P=-#hXRTzq z6?lgDhY+ab;^{nWCp?*Sga7Jdi#P)9N!i*oG5H_-O2~_ni>|IG0?j7dSTPbc52sQk zz{48R4c~p5c55W|#AA1Jl(~sxSg31odt>8jkbrI0AeuD3qnJ|3(yVU zSiA9GBLEG!wC|D1KQ_luf|{|CS_ebDXP&yS@t?Ux?970@reD@&E8Phq9wF?m#3w69 za9u`n=~T7Y@qDezZCYTO)0Uw_Uu&HK)?pJF-U`zXwoCPI^C*K~7NuUzMM29-|K z0Fo=UdGCHvEr6Hmcl3mw?uroB4HD><80q?C7V-Lkc$BuQwV$(Xr$SATwgW|ceXYu5 zpv`V=lBTbj>SyRj8%BZ#zKel*9O%r`7)h7q+rgd(>B%w4*@&5?yx~ShT8>$?=Cdc6 z&UGCbuI(4xOxrWl?K#X++HC9g@Al6L-v>DGQ#iXwW)LS%F@(wu1^k?P>LCHmGGeZf zNIk-@mNd3jou{Ruwpg+m#Ih&lk5jQ!re=KND}^rRQVy+ zs>}RZbtP@$YJmyh0j~EGVMMXRDED_t`;{<4l;C}-H?e(ydZVQnlYDM^{1$ZEKH=#9 zrALt`26L{Pap~sT6$5EIoOJrzZoyFN{xjb~ilckV3R%c$9Udi}ihDrr z4?^_+M;&dTvUEZJ3$2Z_`ZpT)tCjp;51#eEjThF6e?95{cxJ7Y|9W0nQ>Dn-aQ?k< zvHADBW}CkV-jvz{~wFz^oy_kSU%DM_{*CVxEtO>HCmr#JhrYY8?QnmfqD z1MFh&{-;CxQXL(G6zzU5|Azhkf2!Mm9wr8+JOxsvaDxa9|D^cuelWp*X5Cv%^7kn` rd?BF!li;6j@qeG)pKkGg#$ZYki0bdo;2*Dj1pDNra2Zsg+x8|Cior}o-&Ej{Qdj?MV~;KL;?Rlgh`|blu1?QSpSRQtrgGz-(14te>YFsgctmuucQck z|IO3`5rpAE|6u{{|9RfHgLANSH)Zp7u#eH~ja{R}>$qj6Zqp&DArqF2)v2tgh^W*r zFJCZ_3G%QetKl#%1(`(0@V944(^7m*_qjR<9)BEf)e}XZSFH4e8%BeCH_KGkKJS@+ zKD0(W1A7$*`X{S=sL}%wjLBJHDcV2Hz+ zJw^-U=n>w$#`>=`xT4WG(wtCpAUQjMa*{ea+c(ZFWC>|ofO*colXb4+ zdoW+?JGRR9yU5$2rHZay^~b&O8@mg0PoI8oMhlSM=eBo6I{%3BMj8Qq<&EX!d$W;F zVj?U%JZw9AXOa~!u6K>2*dU*#HfmD+A`r$m)1PNzH+9<@Tv;MZB$|(cE!U`n>lIfx zhojLOuz1sT~^=BKC1;PAU*(Gp5TK|jOEl?$>`2iK6jEbho zlR3H%4+nRT2nY8+l8T0g_FqZ;f20HM{aeA!(%s$0(aP;VBGPHF>9!;AKCrvHu-`9D zYUSnY>KT%L({Cx$AjiX-Ng4!ykCW(Ayt{LC*Zj5OU*ov`>S6H;2`m8*H0?Sj1hpUm zUwDU>#HHe~(xf?@5rC|rTD5Xq(c*>d(fFi^jxE5p_`yTy{LDKErxdmxj zdQu97MhNq_mU3l+(DJpKD%|+vVVKi-m9XVXO4!!reH%|bUwPX2)&0}_)4!y-dDs2R z%es?5qs@wB-_8UJE2jg;s@&{_u@%tmQu}(dk%_%!v0p9pkiSZhbsh3t!}oe%YpHy5 zm~Id`$}bNd|8>&#z1k48%>laBw^?)R7P}%l$L6U?P*OTJIpOLx`JOmGr&{Uh;_0Ft z$o|c1mMnd_vQGWyXuwWFjsw2G?-#H!!N)*sf1$OP)s(3DD^Vk^?DBg!>Sz$R^;CLx z$jS@{Pzf%nm;|i3tS)cB*N{o_rvmNrmwGyfaFlqgp6i4q5=P{Pu$^Cgs};xAwJU#G zb5V>AFVM}EZ_v%-wRj??b8OJ3QQ~R8c>J&)Hn`GdhDm`T;NK)rYkaw;NWMq+u6Wyr zY6a7>@@MlqapB5E+eh@*0xgh;ltva6zve1|R56x8#R6Z7f_ZDk3iDA);T(yQCe_or32Q1_n~tq*Xg53!;rQ)Kr%RatnJ_LkgLI;S_G1j<^c@|-;`u(eq2XzO6wv0AV9^rcS%Z8FXs66 zuoCgJU7&V+t(JQ`SN`h*NQE2Q*Ri$W`%8IgBY4O|UwVp> zC!R9(F@$Q)kFKeH#ns>#r9h&!`2O~}eI<>ZlV=YW54UdNxeH}a2Dve1GN~c4gcltA zcm~YBaBkxvhjSm9sG{OLf&lYLX7`auqf4tF5VyFr%UhFh77P3}A#*)Wd z$2zO5u=sD9<4QK?kp+Hzj)^=(H9%``n8u7ip&zX#aQm>oT7er%oc54PHNX*?A|9I& z-Si$Zv(+gKPh&cr!FjJblv`gx`4dePs4V)W%G@F3?<}wld2xJ;+S~L~6p|WSmwl3SiT%L`JT6kBDy&{>0N&cBR&Y3`_g!q=GjnG1> zeqv7P4{6blpz^W>)!>qq-j95`KPW!P|7kJU%2c2eQc&(_=w6xo`#d(vsnfF|F3j3H&QP)v6ICO@-ZSw40R;`(&mNJ_2+ayqy()0<*Zj zyew=x@2a%ZrH))o*FxL;tulHzcKtneCLZ20K3bmPe zxxa3k>Bt~^DCb5}a7sRr(!@5^ae89^?inHIG&}g9WIlsUyh-h5aeCvlX!!LLcfz>f z&zQmw;~fGFJ@%CXx4_^!|75eg*1wL1 zJNj5RLnY%c@ARwXS|A7P?#njcgjjSHb-Tr0GYI~Zv)gEoz5|Dg^My_1NvT*%ZVi7% zz8ZT@L6jBo1v1xI4+?8xx-}P0NuN&9vIYzBSG(e0%ZGPkY8X%p^q38s&*V63|7gO( z^0XhYRxjhxr@_|@ge^i;PjHnrlFzD6`qp1(OwGNE-2!28LBW~xKNuIXYtJg4*tsZqv0GNit|6x%v{h2PtOmt-nO3)jsj3vaCe-^rZVwoVkZw{TGU=Q@b(pbzvK0H%RK}3e{AnaQD_@CDjeJ+=l`|6|JO?drZ0@- z^T5I7Coy1tMU z)tIG>rjWmA8+kvqW-GVsMRH1Z8i#iDUq=~;AX}=5MMbo;5_+Uwpgh-Si={vrB-lRh zU0+4|I`cAVT4zTY*y-pIs7M_`TpV#!>of z@ZLvAS@xwykj5i;zDo_3i~oPf0BNMb{$Q|7T%_H7-(42PLdCG zs7ow%8(;AW4ITM6IHfDLt7P-E{a_~BF%2ya@4p^|b2+Ng0kJtciU}{k5OAQao5n^} z{f2CW&CmKl!qwx~jR+ndpI!DH%a|i|meL3uvH1@ZZ%jUp4@~-;ScPpGMmxKu-d%Ho zG`k@0GefaC=>hK|OkG)L zpo>MjMLSF%;oG|2H2^KM+Q>e1Pu=GQLURtCH~#t99+vooJp2sp`s2kPI`3OF>Pd-p z8Lr!Dh)Rb8s|SxWCleA*%?q6R1_XhaF;Aw9DR1YCgRg6hD#yT$*@IUqfGAp{N;|Rk zjt+f};dYm!tyroCxEoiA&W;WRjw<#iD=Xg5)Tu54JuM62lt1=aOuPd;y;{HzxIQ3{ zz(25xJOeYvkgseJ-D2I0Bn!J=sKA7yY}`@-DXt|)NaL;tRJ(2nI=1aj3~C^*!dP(H z5?O^**)&PFXryZ{TZ?W2lNb$=zqH-VbfRtJO}MadL8WBsL=l0G;Ca#1>CrH%t@-;Us3fhUk>= zt}ZSv(ody|zE+2Xgtdm-SX+dID3?u2(iBbi$Y?oYpUa^8lw}uxq8c~~OSsuo+FM(g zo*#Bj=I+M9%9>T|Ys>T1zD^0RC(Cz^$Byj5GlN}& z#he(b3rDcj+n(q@1`s&P!3TfE*NM8|=n$1!Z>*&Q9)jaql0Ssc zmwT_GaD;A89!=4KeQ#!&*IAA8ExNz#n(^|Smk3APd+tu^O2>|lU!>%R3x8j|4y7uk ztvE7UJGy@-TM`4@3Y(Sr`Jt_q}7(9jUjWd&vn}N0Tf){lkM1&JQ8y262t7c zl_9-d+SJ$jL1|Cy+v&~@zHnXJXi5B5V^k{S#4Iv_mEuXcRtO`6cn34yS>-D(;#Vz8 zoI+)Sygf>}SsHa5+hH3R$|X@j74cE#{T&J~;?Rr&JA^R2hW}`&X_6ve?Lz>XJz82_ zEsmT1@aHmZNl-(#q*3%bXSKSVw8m1LN`o55Dq$@$BZ{Gm6a!`VnhDHutiks(8aXAAgmir^fD+yX~; z{_7tLM(!svc2WCckt9ujRudGM)vueA4N;23fLU5?zE=><0x01DV{JEfGUOxdf5`y| z-Gj9;Kqp(?p^|{7iQ@EG(#LNM?ZM`dp|gnVH*RHLE#X}=k;JE0qy@>;2)Z`UC68+5 zMc?1}3Aq5bJZsylBNG2j7SglN_j<*P7`8gCzV_c+O2;T4#o;}8iYyxvcw_XUL8v^{ zL_KqaGiW+B*qDBv3?!M?YB77r#QSJ<%2V2=Kd+1oKG}I@rQNt#jdmT5`uf35>tj(7 zt>f{o@H%|)VnQ`3usL;~ihceJnD;i|$QW9a>Wm^;uxqd9iRZM(^wU7)wAioV#m(po z;tfw<)dE^M3vZFzIxzWOQ6Yp#gEV^TiPVsX4St9`6fz)+$)vHZ(mcWGJJ~*a>8gqW z-Ajf8mIMEwd6<|={`z2RyL`nYA~ESAOhVx&ZEsYC(1W)T>!|Ooz1Dn8Z4WT0Ic>WN zKP)~6U~3dpOlEDAO9EcF0jPMSgO8>)ZDOGwdOk~86-L;R|7GnCE($a~d3O?pXXhGt zEbmfvud8|zj#5x6(X|SeRr5Mly;+atamSjH+a4nR!k?ml2XyRkYRWW=n!LgAW?fZZ zF~^j>;1`wr_H1vDASN>2{GL>dRkQj<7AEfAaC69PRU|G}2@;gQpZ}imKXw{~US_w! zSj?V1D+U1L-QI(Ch4+(WmKi@c=|E*Rkzwl{<7cS}WO=nRdAPP$7x^1eP$L?S$yO~3 z^%rD(60V?14LA$Emf_4q)kwj9z)a<7?^==oj}~!V@||nh0weJnf$8bHKmWQC?fmzlK36{9ij~pQ;KTqVi)a(=_BO zy&W=t0`;B9Y|krkah$!>FDG>|+1?Rjl{~J0F+uUrBeNJ*{_0GE(7?b=IY$18X9@!; zFcWT@kJOisx@wce_yre6lagwqy6~6T!EhHh)*K*^3Z`+k zfIj@)EMIOQw%`yKf#sN~x0o?C81*+*$wr!VXUs;?_pb8Z@mVZhViNo0Qi*j_Me|XO z+Obs(IeF@Z5%bd+H#^*bN|t}ctO4j;K%lplamg5{!&?|QZ>W=rCES!ksAVslH-w2j zX8)W208{^=>6NB63jesl{ss`w4cm&w&wtM3Gv${+jsHZV)VC#p~{ z#6g*4E)NQDa-jE8Qu*XitQ{3nU*H%lEd^ATvpC0bvLI1n{A^=!t?2o@ynFC^1z{7j zXYVLbRRD&1q7(+zN&UlCHCcZFLpC&lZVb3hFR@J47TiZP3uN`OiO~fEXZmo2^kA2 zVB_a+{Gd7^BvhU@+VAf;^Ccv6`gfUN)Z3;D=1)5RX|!0m319f$5<-QtAgw#BO(A+_ zvB|bjf>IZOf}keEQMT-&UGW>VAYyJ=`L4rSITDW!d65z9#bFBPcQ~k_>T4dgs_1n_p}39(yQt`iUc=M}U?ztt>dn-p5U~Q8K~P#&iDv6n*(GNs zg$IJjY325XR#*f|@+j=1k_9p8-(r5CwO78Y$t%(|wxWvOGfSuMZ;KFO-IRwJzEb&# zqGASNFrwCO&g}$oMB@%hOy00)C~AlDCbftfFt0=>%kvY`J-kKjaP2!axK_V{s!ves zhaldIT6PRa_9s#$Cci@0>6s#jkX_*s}5cVywqVQ+5QVR5O z$WRTXd5y{Y601wKApJj_-|sQnk#3oOnE>ScJ_CVR)%2dJEzju(*={B|w>Y8hq`sZi zD1|UJ#gmkT3E|W-k;Ctod$yIf6hQFS?Y+71{>PThdYNgEP?%WkIQHSiI^Fzf;?4L- z^tw`mdcut#Ym+GXVmQ(1)w21ZC$q+8xr|?J8-8BY745?u)0m>6{(En9bvtpEqeC+6 zaYq2Zg~#K*Wp2HQM8Ja}c9=J98ME?~je)%(SkJDd|M$FQ#la0do|Fs7;(DA)Na|S) z68Qbj>**F0Duiaz5rdCetgl;%agZxm4Fkj|O+hl4$r@ell987JH8>m7;5bcmg1pI7 z6C0~+Dv1h=(QW;#b_;||7ehcEMwnN191frYu~P={ZTLe*-!5+fTL)X0FA?m^2k2*T zrSUkGi&et~+RK=F)eaU*-rWh7}YZGIoTA--R2>+LDN4)r+M@o0GyU z^vBFSu+9)0(5It5tT6qV>3bH|M+fdoo-J|H%obQ*ytY{oX&^Rgdg zKKFg*ywNReJbF5Po9bgNpWpdwtGTYco3e6qXNxTRuhb=F6x(?aG1(x6C?^q;4v#in z&96FE_54&eDYoWB+C8-N$J8%>qU$R3HM1M}3Kw%?z^`y%uTUWhLnSQy)`6cU7t(^j zC7QyrYrqwmChw!P-b}X3n5K*d58KD6Ip%NJ`xNoeM_zu;*by!(W^TDRQ=LRa!3YYE zhol_#)N#sPC0ft|nTJz&*<7kSK;^yHReNoKB)$hSe`4_Kg8uoxGN|*{n7z# zbNZdWIy9*B^fZ__G>pRLuWj%1YstDN)FU6B#EMCXPpQx?MS)y!K&*01EJ41bw&ZF|Y1o@b5SWWMS-8_r)D4!U%>G8GJj z%A>05J$vqFKwdNxhphGg_20&U)Y-%-RK|OsV1KOGqBiLB-qd+ujbyiNb+pQBG;QV! zxce6bSgljbc@zBLbiN%}kCGU^r>#Ea=@4~G@E)1SaZ#MtVOijy(}(NxsUC2Z36dxh z+e0zbzQFh{+ZOz|+?uTB#Cb8Kz$0GxxSJ4%RG3vsBx#DWPg*U2Q~wd`2PBQIjM-yeCEraD`|x& zX~mavAL=GXe+s$UWf8*sV(6@o`2eX;s<8crEHBs%HFQOdTt5+Fm;^ z%id+xQw2Q!%{xW!*;)5)zY{t8NzMZtYs;2Zvw zr!IqHvy1}^Cby5FZ+~^@zS?kkP7ZoS2B*l=wcC#TVDu`i zS~NJm(4$Z;1X125cxf{@!Y$A?hW22M0Vdms#~Js(G~~!FeH>9RuxM_bEzs*gWAH>+=2HvVR#P&usu;YuQdj zTjbU#&;h$SG00Lc27t}q^hc>m3OZnY>`g-YmfTaNMqJdAkP>XCdRg?-m@D? zWJPXNHZdMs$E~A1D|DsVP*!shTrz}CggM_2C>L~{p6o1t+mh3eV3kf^7}O*K`rMq= z4Q!+bt21E#I6N0#j^iDiZ2DCYr)sudIQ0yA9*aYanVeMxv0?LWkAIS*re7`ptD9ep z#keaMw@`1IdiHfdUuN>{)Wo{>TB{yHq!glH6q^L4Po^(aau6k9WB#}_!o*%!uOZVP zqsB(yutVTYSk_NAJy}$bkxu;Ax$a4sb}q#f57wQ3IR`5gS2; z_(ce2${NFe4rctn3~ZM4-j{f)1M|%G9Cn31xu31BHtIl)$H9A)A#A%Gx8y5!;p})CZJ-TsoKkrc*eZxFUN-k)5y`*__lLb;aEb!)UNSlEtw{~f_0Vp&A6(-!bl!Ex!pw;)$Y|dC zt3Qbv!NK@qo19H1t{>V3)^ACt7V!w_4oQ1Dxg*dA{lkvsq4$deT(z0j zA~G{P!3o$7e}grz-D)!POVA@x>~>AzCN&Ywt{M82O&Z=U43B`>P{8YClU9gn^+w#( zV@s}i3Ad@C8aVM@JVo9_yKv@_-rgnXq3V*>ip#uTYda!&v=d4*A524q9A)hEq!>nQ z3MO~NP{GW{lFOjP&szR0syL#vd*gLdJIHn;(Yr3Pz;OryKM&O;F&^F&B&K+5&DG+% zXTOP2eN5>0AF-vnbVq7hJC8i8-9!yYUurObV`@pv&`8`Nr%P!=3=rAG3Cq0@>huePww zKsKru*Z}7>tX$_6K(6&W@Ib+T_-9N^kyeSECE^^Pys%ox1NqUFrhXLHLByAUB&_pg z-k>@mcF>1JYw91Sp_gTDZ8G%=q$4*OdPYdIgO8I|eTgx$K2IM`?s5bg20P{O(Gtjh z`)P@nCr>s?-%mhFaJ=JBwkirPqf?3d^}EdZ*<2zMG|+kr#?F3TS(jN6myYILHw1_P zZ}C0;d|tql%PDa?x;%q8#){O`1S@6#nI(w7eg@@lr~(OX$6XjCe%kOI#Ukvj&0KpW zLS-%4EwRMBs60G8z42@T9-7bG^$-2!!217cwLGXnl4Kqv5MS@vdhH=5jm@@H$Oy!^#3Y3|i1v5CgKDH~B*4 z%QqwgTZ74sL};+IQXNBoMKd`Jh%je{GnTmYXqSJvKbOZXWN|8Kaf$iW1i?d%MTFC^ z92QZVUMiJyK2$C0ALeXE0h=30 zU?3)8GHJcrjKm39B}3r}Kuxk^(gX$4%klxiaOf1S%H{ z>Bs_tKXHmu=AZQV)XBYt?APZDl~wU0yP`@g&|{OLGQ^b=$ohr;5PzR&mByJ%(j+;o zRgk^i`@20hMdbS}X_D&Yrm>8x%n?!S24Lw24~`hZ2uq-xhugFb9#Z{uSOnsoEP%7w zmw`811Gs#oq~e3f@~4|ze(g9NqC5Xra~9`jR3aW(A3R$W%2H%JnXsKQ`%SVTi|aFd={5I17dT4)!g%AW-xwTlwxOt$sdsXD7jKi^ z-6FCJs=V+}0d~JzxPLel)v@d%$V2r2;jvZ5?}kz}t=QwmipcfQf*kUAj_s~W=A>8) zVknjV1jpv*A_cq__4Xqp12;a5|0LDl!j7mSL>pf;ts$ew@Wxd4Mp{pS8m7bzz|2SP zBx5am7Dz2{3`TG@?7xg%%z6J%k`+3cdPIc$fRsM6%Vkv zap&*+1L)<>9m;ht=utSNt*$hGLmQZub&;Uk8K!(}(9!_N4~``P7yQO|T8)IrezRXY z8wo~hZ5XOI3(Y48<(JevC$HBZdmr}N1G8LqHMqxyU>!8-iQ4Z`{DA(@8J1PT7i7r3 z`gUg?FDx>}l&5B08!P%B?w>{xm0Ua4q&Y@(uDzliT>u|E

0M`NQNpJNSgwC>+%LI5@7H&qsj` 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 diff --git a/doc/Conversions.pdf b/doc/Conversions.pdf index 3de736be458ce876b404e60dad7c020d55feb8b1..06bf6f2d21a7fb9cae8383cf291c3a0ddac1f1a9 100644 GIT binary patch delta 4969 zcmai0XEa^iqD_txy+;W_3elZj2;peaMF{zV99`5TdOgBHbaC`9dY1^%YxLgb(_6G~ z^bo>zzc=2v+2dkuiEcz zpXbUJYkPuMCgZ%0D6=GcM2+n(UW8LkuL#zPyw-n0+YJB^Rk@Sd@L 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 diff --git a/lib/nmea0183ton2k/NMEA0183DataToN2K.cpp b/lib/nmea0183ton2k/NMEA0183DataToN2K.cpp index cf335df..0560375 100644 --- a/lib/nmea0183ton2k/NMEA0183DataToN2K.cpp +++ b/lib/nmea0183ton2k/NMEA0183DataToN2K.cpp @@ -638,8 +638,8 @@ private: for (int i=0;i< 3;i++){ if (msg.FieldLen(0)>0){ Depth=atof(msg.Field(0)); - char dt=msg.Field(i+1)[0]; - switch(dt){ + char du=msg.Field(i+1)[0]; + switch(du){ case 'f': Depth=Depth/mToFeet; break; @@ -662,8 +662,9 @@ private: //we can only send if we have a valid depth beloww tranducer //to compute the offset if (! boatData->DBT->isValid()) return; - double offset=Depth-boatData->DBT->getData(); - if (offset >= 0 && dt == DBT){ + double dbs=boatData->DBT->getData(); + double offset=Depth-dbs; + if (offset >= 0 && dt == DBK){ logger->logDebug(GwLog::DEBUG, "strange DBK - more depth then transducer %s", msg.line); return; } @@ -675,8 +676,8 @@ private: if (! boatData->DBS->update(Depth,msg.sourceId)) return; } tN2kMsg n2kMsg; - SetN2kWaterDepth(n2kMsg,1,Depth,offset); - send(n2kMsg,msg.sourceId,(n2kMsg.PGN)+String((offset != N2kDoubleNA)?1:0)); + SetN2kWaterDepth(n2kMsg,1,dbs,offset); //on the N2K side we always have depth below transducer + send(n2kMsg,msg.sourceId,(n2kMsg.PGN)+String((offset >=0)?1:0)); } } } diff --git a/lib/nmea2kto0183/N2kDataToNMEA0183.cpp b/lib/nmea2kto0183/N2kDataToNMEA0183.cpp index afafcd6..dbf6af5 100644 --- a/lib/nmea2kto0183/N2kDataToNMEA0183.cpp +++ b/lib/nmea2kto0183/N2kDataToNMEA0183.cpp @@ -267,21 +267,29 @@ private: double DepthBelowTransducer; double Offset; double Range; - double WaterDepth; if (ParseN2kWaterDepth(N2kMsg, SID, DepthBelowTransducer, Offset, Range)) { - - WaterDepth = DepthBelowTransducer + Offset; - updateDouble(boatData->DBS, WaterDepth); - updateDouble(boatData->DBT,DepthBelowTransducer); - tNMEA0183Msg NMEA0183Msg; - if (NMEA0183SetDPT(NMEA0183Msg, DepthBelowTransducer, Offset,talkerId)) + if (updateDouble(boatData->DBT, DepthBelowTransducer)) { - SendMessage(NMEA0183Msg); - } - if (NMEA0183SetDBx(NMEA0183Msg, DepthBelowTransducer, Offset,talkerId)) - { - SendMessage(NMEA0183Msg); + tNMEA0183Msg NMEA0183Msg; + bool offsetValid=true; + if (N2kIsNA(Offset)) { + Offset=NMEA0183DoubleNA; + offsetValid=false; + } + if (NMEA0183SetDPT(NMEA0183Msg, DepthBelowTransducer, Offset, talkerId)) + { + SendMessage(NMEA0183Msg); + } + if (offsetValid) + { + double WaterDepth = DepthBelowTransducer + Offset; + updateDouble(boatData->DBS, WaterDepth); + } + if (NMEA0183SetDBx(NMEA0183Msg, DepthBelowTransducer, Offset, talkerId)) + { + SendMessage(NMEA0183Msg); + } } } } From c02122f253ae09b0554be14acd488ff6e8baf33b Mon Sep 17 00:00:00 2001 From: andreas Date: Tue, 22 Apr 2025 19:43:23 +0200 Subject: [PATCH 09/36] #107: update doc --- doc/Conversions.odt | Bin 26267 -> 26253 bytes doc/Conversions.pdf | Bin 38348 -> 38386 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/Conversions.odt b/doc/Conversions.odt index d6c662c23ea119fbb79102c2384a36f4d44909f2..a44672b0fb4ff6cb0e502ef7d9ca216e493636a9 100644 GIT binary patch delta 10493 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 z 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 delta 10485 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 K;mFPY8vh?N-~6Ef diff --git a/doc/Conversions.pdf b/doc/Conversions.pdf index 06bf6f2d21a7fb9cae8383cf291c3a0ddac1f1a9..3ed26e12f99dc9cde4f31bbe9916a6eb3ae92375 100644 GIT binary patch delta 5877 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 delta 5843 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 BQhWda From 44c9e998c9c81eabde9bc8f0c6619f0cfc56f83e Mon Sep 17 00:00:00 2001 From: andreas Date: Mon, 28 Apr 2025 18:42:16 +0200 Subject: [PATCH 10/36] rename dbs to dbt in convertDBKx for more code clearity --- lib/nmea0183ton2k/NMEA0183DataToN2K.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/nmea0183ton2k/NMEA0183DataToN2K.cpp b/lib/nmea0183ton2k/NMEA0183DataToN2K.cpp index 7b2d902..ef17866 100644 --- a/lib/nmea0183ton2k/NMEA0183DataToN2K.cpp +++ b/lib/nmea0183ton2k/NMEA0183DataToN2K.cpp @@ -662,8 +662,8 @@ private: //we can only send if we have a valid depth beloww tranducer //to compute the offset if (! boatData->DBT->isValid()) return; - double dbs=boatData->DBT->getData(); - double offset=Depth-dbs; + double dbt=boatData->DBT->getData(); + double offset=Depth-dbt; if (offset >= 0 && dt == DBK){ logger->logDebug(GwLog::DEBUG, "strange DBK - more depth then transducer %s", msg.line); return; @@ -676,7 +676,7 @@ private: if (! boatData->DBS->update(Depth,msg.sourceId)) return; } tN2kMsg n2kMsg; - SetN2kWaterDepth(n2kMsg,1,dbs,offset); //on the N2K side we always have depth below transducer + SetN2kWaterDepth(n2kMsg,1,dbt,offset); //on the N2K side we always have depth below transducer send(n2kMsg,msg.sourceId,(n2kMsg.PGN)+String((offset >=0)?1:0)); } } From 417fe3db081c5964654c82cebc71c37d48057f8a Mon Sep 17 00:00:00 2001 From: wellenvogel Date: Fri, 2 May 2025 17:57:26 +0200 Subject: [PATCH 11/36] update link to the newer version of the web installer --- Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index ecf9abc..36010dc 100644 --- a/Readme.md +++ b/Readme.md @@ -68,7 +68,7 @@ Initial Flash __Browser__ If you run a system with a modern Chrome or Edge Browser you can directly flash your device from within the browser. -Just go to the [Flash Page](https://wellenvogel.github.io/esp32-nmea2000/install.html) and select the "Initial" flash for your Hardware. This will install the most current software to your device. +Just go to the [Flash Page](https://wellenvogel.de/software/esp32/install.html) and select the "Initial" flash for your Hardware. This will install the most current software to your device. If you are using a forked project (like OBP60) refer to the documentation of the fork. You can just install any flash binary from your local computer with the browser based installation using the "upload" button.
If you are on Windows you will need to have the correct driver installed before (see below at [windows users](#windows) - only install the driver, not the flashtool). You can also install an update from the flash page but normally it is easier to do this from the Web Gui of the device (see [below](#update)). From d228f3846186bbc910eece82db5955881f5bf091 Mon Sep 17 00:00:00 2001 From: wellenvogel Date: Fri, 2 May 2025 17:58:26 +0200 Subject: [PATCH 12/36] update link to the newer version of the web installer --- Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index 36010dc..a9a305f 100644 --- a/Readme.md +++ b/Readme.md @@ -73,7 +73,7 @@ If you are on Windows you will need to have the correct driver installed before You can also install an update from the flash page but normally it is easier to do this from the Web Gui of the device (see [below](#update)). -The [Flash Page](https://wellenvogel.github.io/esp32-nmea2000/install.html) will also allow you to open a console window to your ESP32. +The [Flash Page](https://wellenvogel.de/software/esp32/install.html) will also allow you to open a console window to your ESP32. __Tool based__ From 214c10ff9317ee759880c44080b9f270df9c286c Mon Sep 17 00:00:00 2001 From: Ulrich Meine Date: Wed, 21 May 2025 21:47:21 +0200 Subject: [PATCH 13/36] removed static definition of methods --- lib/obp60task/BoatDataCalibration.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/obp60task/BoatDataCalibration.h b/lib/obp60task/BoatDataCalibration.h index 43a4623..934484c 100644 --- a/lib/obp60task/BoatDataCalibration.h +++ b/lib/obp60task/BoatDataCalibration.h @@ -21,9 +21,9 @@ class CalibrationDataList { public: CalibData list[maxCalibrationData]; // list of calibration data instances - static void readConfig(GwConfigHandler* config, GwLog* logger); - static int getInstanceListNo(String instance); - static void calibrateInstance(String instance, GwApi::BoatValue* boatDataValue, GwLog* logger); + void readConfig(GwConfigHandler* config, GwLog* logger); + int getInstanceListNo(String instance); + void calibrateInstance(String instance, GwApi::BoatValue* boatDataValue, GwLog* logger); void smoothInstance(String instance, double &dataValue, GwLog* logger); private: From bf59cfbae82314ed46a50fdca989cad00841c4b9 Mon Sep 17 00:00:00 2001 From: Ulrich Meine Date: Thu, 22 May 2025 21:48:32 +0200 Subject: [PATCH 14/36] tiny code adjustments --- lib/obp60task/BoatDataCalibration.cpp | 29 ++++++++++++--------------- lib/obp60task/config.json | 6 +++--- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/lib/obp60task/BoatDataCalibration.cpp b/lib/obp60task/BoatDataCalibration.cpp index cb2c853..3fc4447 100644 --- a/lib/obp60task/BoatDataCalibration.cpp +++ b/lib/obp60task/BoatDataCalibration.cpp @@ -9,13 +9,21 @@ CalibrationDataList calibrationData; void CalibrationDataList::readConfig(GwConfigHandler* config, GwLog* logger) // Initial load of calibration data into internal list -// This method is called once at init phase of to read the configuration values +// This method is called once at init phase of to read the configuration values { String instance; double offset; double slope; double smooth; + // Approximate mid-range values in m/s for Beaufort scale 0–12 + // hier geht's weiter mit den Bft-Werten: was muss ich bei welcher Windstärke addieren bzw. wie ist der Multiplikator? +/* static const std::array, 12> mps = {{ + {0.2, 1.3}, {1.5, 1.8}, {3.3, 2.1}, {5.4, 2.5}, + {7.9, 2.8}, {10.7, 3.1}, {13.8, 3.3}, {17.1, 3.6}, + {20.7, 3.7}, {24.4, 4.0}, {28.4, 4.2}, {32.6, 4.2} + }}; */ + String calInstance = ""; String calOffset = ""; String calSlope = ""; @@ -43,7 +51,7 @@ void CalibrationDataList::readConfig(GwConfigHandler* config, GwLog* logger) } offset = (config->getString(calOffset, "")).toFloat(); slope = (config->getString(calSlope, "")).toFloat(); - smooth = (config->getString(calSmooth, "")).toInt(); + smooth = (config->getString(calSmooth, "")).toInt(); // user input is int; further math is done with double // Convert calibration values to internal standard formats if (instance == "AWS" || instance == "TWS") { @@ -54,7 +62,7 @@ void CalibrationDataList::readConfig(GwConfigHandler* config, GwLog* logger) } else if (windspeedFormat == "kn") { offset /= 1.94384; // Convert kn to m/s } else if (windspeedFormat == "bft") { - offset *= 0.5; // Convert Bft to m/s (approx) -> to be improved + offset *= 2 + (offset / 2); // Convert Bft to m/s (approx) -> to be improved } } else if (instance == "AWA" || instance == "TWA" || instance == "TWD" || instance == "HDM" || instance == "PRPOS" || instance == "RPOS") { @@ -92,7 +100,6 @@ void CalibrationDataList::readConfig(GwConfigHandler* config, GwLog* logger) if (smooth > 10) { smooth = 10; } - // calibrationData.list[i].smooth = 1 - (smooth / 10.0); // smooth factor is between 0 and 1 smooth = 0.3 + ((smooth - 0.01) * (0.95 - 0.3) / (10 - 0.01)); } smooth = 1 - smooth; @@ -120,17 +127,6 @@ int CalibrationDataList::getInstanceListNo(String instance) return -1; // instance not found } -/* void CalibrationDataList::updateBoatDataValidity(String instance) -{ - for (int i = 0; i < maxCalibrationData; i++) { - if (calibrationData.list[i].instance == instance) { - // test for boat data value validity - to be implemented - calibrationData.list[i].isValid = true; - return; - } - } -} */ - void CalibrationDataList::calibrateInstance(String instance, GwApi::BoatValue* boatDataValue, GwLog* logger) // Method to calibrate the boat data value { @@ -147,6 +143,7 @@ void CalibrationDataList::calibrateInstance(String instance, GwApi::BoatValue* b slope = calibrationData.list[listNo].slope; if (!boatDataValue->valid) { // no valid boat data value, so we don't want to apply calibration data + calibrationData.list[listNo].isCalibrated = false; return; } else { dataValue = boatDataValue->value; @@ -161,7 +158,7 @@ void CalibrationDataList::calibrateInstance(String instance, GwApi::BoatValue* b dataValue += (2 * M_PI); } } else if (boatDataValue->getFormat() == "formatCourse") { // instance is of type direction - dataValue = (dataValue * slope) + offset; + dataValue = (dataValue * slope) + offset; dataValue = fmod(dataValue, 2 * M_PI); if (dataValue < 0) { dataValue += (2 * M_PI); diff --git a/lib/obp60task/config.json b/lib/obp60task/config.json index c1801af..0a2e981 100644 --- a/lib/obp60task/config.json +++ b/lib/obp60task/config.json @@ -741,7 +741,7 @@ "check": "checkMinMax", "min": 0, "max": 10, - "description": "Smoothing factor for data instance 1", + "description": "Smoothing factor [0..10]; 0 = no smoothing", "category": "OBP60 Calibrations", "capabilities": { "obp60":"true" @@ -802,7 +802,7 @@ "check": "checkMinMax", "min": 0, "max": 10, - "description": "Smoothing factor for data instance 2", + "description": "Smoothing factor [0..10]; 0 = no smoothing", "category": "OBP60 Calibrations", "capabilities": { "obp60":"true" @@ -863,7 +863,7 @@ "check": "checkMinMax", "min": 0, "max": 10, - "description": "Smoothing factor for data instance 3", + "description": "Smoothing factor [0..10]; 0 = no smoothing", "category": "OBP60 Calibrations", "capabilities": { "obp60":"true" From f9cf73ae04bc09ceb4e4c48c76aa805a711b43a1 Mon Sep 17 00:00:00 2001 From: Ulrich Meine Date: Thu, 22 May 2025 22:45:20 +0200 Subject: [PATCH 15/36] adjust code position of calibration method call, where not applied yet --- lib/obp60task/PageFourValues.cpp | 8 ++++---- lib/obp60task/PageFourValues2.cpp | 8 ++++---- lib/obp60task/PageSixValues.cpp | 2 +- lib/obp60task/PageThreeValues.cpp | 6 +++--- lib/obp60task/PageTwoValues.cpp | 4 ++-- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/lib/obp60task/PageFourValues.cpp b/lib/obp60task/PageFourValues.cpp index 5343de6..9e76988 100644 --- a/lib/obp60task/PageFourValues.cpp +++ b/lib/obp60task/PageFourValues.cpp @@ -46,9 +46,9 @@ class PageFourValues : public Page GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue) String name1 = xdrDelete(bvalue1->getName()); // Value name name1 = name1.substring(0, 6); // String length limit for value name + calibrationData.calibrateInstance(name1, bvalue1, logger); // Check if boat data value is to be calibrated double value1 = bvalue1->value; // Value as double in SI unit bool valid1 = bvalue1->valid; // Valid information - calibrationData.calibrateInstance(name1, bvalue1, logger); // Check if boat data value is to be calibrated String svalue1 = formatValue(bvalue1, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places String unit1 = formatValue(bvalue1, *commonData).unit; // Unit of value @@ -56,9 +56,9 @@ class PageFourValues : public Page GwApi::BoatValue *bvalue2 = pageData.values[1]; // Second element in list (only one value by PageOneValue) String name2 = xdrDelete(bvalue2->getName()); // Value name name2 = name2.substring(0, 6); // String length limit for value name + calibrationData.calibrateInstance(name2, bvalue2, logger); // Check if boat data value is to be calibrated double value2 = bvalue2->value; // Value as double in SI unit bool valid2 = bvalue2->valid; // Valid information - calibrationData.calibrateInstance(name2, bvalue2, logger); // Check if boat data value is to be calibrated String svalue2 = formatValue(bvalue2, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places String unit2 = formatValue(bvalue2, *commonData).unit; // Unit of value @@ -66,9 +66,9 @@ class PageFourValues : public Page GwApi::BoatValue *bvalue3 = pageData.values[2]; // Second element in list (only one value by PageOneValue) String name3 = xdrDelete(bvalue3->getName()); // Value name name3 = name3.substring(0, 6); // String length limit for value name + calibrationData.calibrateInstance(name3, bvalue3, logger); // Check if boat data value is to be calibrated double value3 = bvalue3->value; // Value as double in SI unit bool valid3 = bvalue3->valid; // Valid information - calibrationData.calibrateInstance(name3, bvalue3, logger); // Check if boat data value is to be calibrated String svalue3 = formatValue(bvalue3, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places String unit3 = formatValue(bvalue3, *commonData).unit; // Unit of value @@ -76,9 +76,9 @@ class PageFourValues : public Page GwApi::BoatValue *bvalue4 = pageData.values[3]; // Second element in list (only one value by PageOneValue) String name4 = xdrDelete(bvalue4->getName()); // Value name name4 = name4.substring(0, 6); // String length limit for value name + calibrationData.calibrateInstance(name4, bvalue4, logger); // Check if boat data value is to be calibrated double value4 = bvalue4->value; // Value as double in SI unit bool valid4 = bvalue4->valid; // Valid information - calibrationData.calibrateInstance(name4, bvalue4, logger); // Check if boat data value is to be calibrated String svalue4 = formatValue(bvalue4, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places String unit4 = formatValue(bvalue4, *commonData).unit; // Unit of value diff --git a/lib/obp60task/PageFourValues2.cpp b/lib/obp60task/PageFourValues2.cpp index 24b3fce..9f94e08 100644 --- a/lib/obp60task/PageFourValues2.cpp +++ b/lib/obp60task/PageFourValues2.cpp @@ -46,9 +46,9 @@ class PageFourValues2 : public Page GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue) String name1 = xdrDelete(bvalue1->getName()); // Value name name1 = name1.substring(0, 6); // String length limit for value name + calibrationData.calibrateInstance(name1, bvalue1, logger); // Check if boat data value is to be calibrated double value1 = bvalue1->value; // Value as double in SI unit bool valid1 = bvalue1->valid; // Valid information - calibrationData.calibrateInstance(name1, bvalue1, logger); // Check if boat data value is to be calibrated String svalue1 = formatValue(bvalue1, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places String unit1 = formatValue(bvalue1, *commonData).unit; // Unit of value @@ -56,9 +56,9 @@ class PageFourValues2 : public Page GwApi::BoatValue *bvalue2 = pageData.values[1]; // Second element in list (only one value by PageOneValue) String name2 = xdrDelete(bvalue2->getName()); // Value name name2 = name2.substring(0, 6); // String length limit for value name + calibrationData.calibrateInstance(name2, bvalue2, logger); // Check if boat data value is to be calibrated double value2 = bvalue2->value; // Value as double in SI unit bool valid2 = bvalue2->valid; // Valid information - calibrationData.calibrateInstance(name2, bvalue2, logger); // Check if boat data value is to be calibrated String svalue2 = formatValue(bvalue2, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places String unit2 = formatValue(bvalue2, *commonData).unit; // Unit of value @@ -66,9 +66,9 @@ class PageFourValues2 : public Page GwApi::BoatValue *bvalue3 = pageData.values[2]; // Second element in list (only one value by PageOneValue) String name3 = xdrDelete(bvalue3->getName()); // Value name name3 = name3.substring(0, 6); // String length limit for value name + calibrationData.calibrateInstance(name3, bvalue3, logger); // Check if boat data value is to be calibrated double value3 = bvalue3->value; // Value as double in SI unit bool valid3 = bvalue3->valid; // Valid information - calibrationData.calibrateInstance(name3, bvalue3, logger); // Check if boat data value is to be calibrated String svalue3 = formatValue(bvalue3, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places String unit3 = formatValue(bvalue3, *commonData).unit; // Unit of value @@ -76,9 +76,9 @@ class PageFourValues2 : public Page GwApi::BoatValue *bvalue4 = pageData.values[3]; // Second element in list (only one value by PageOneValue) String name4 = xdrDelete(bvalue4->getName()); // Value name name4 = name4.substring(0, 6); // String length limit for value name + calibrationData.calibrateInstance(name4, bvalue4, logger); // Check if boat data value is to be calibrated double value4 = bvalue4->value; // Value as double in SI unit bool valid4 = bvalue4->valid; // Valid information - calibrationData.calibrateInstance(name4, bvalue4, logger); // Check if boat data value is to be calibrated String svalue4 = formatValue(bvalue4, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places String unit4 = formatValue(bvalue4, *commonData).unit; // Unit of value diff --git a/lib/obp60task/PageSixValues.cpp b/lib/obp60task/PageSixValues.cpp index b3bdeee..bf55d98 100644 --- a/lib/obp60task/PageSixValues.cpp +++ b/lib/obp60task/PageSixValues.cpp @@ -61,8 +61,8 @@ class PageSixValues : public Page bvalue = pageData.values[i]; DataName[i] = xdrDelete(bvalue->getName()); DataName[i] = DataName[i].substring(0, 6); // String length limit for value name - DataValue[i] = bvalue->value; // Value as double in SI unit calibrationData.calibrateInstance(DataName[i], bvalue, logger); // Check if boat data value is to be calibrated + DataValue[i] = bvalue->value; // Value as double in SI unit DataValid[i] = bvalue->valid; DataText[i] = formatValue(bvalue, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places DataUnits[i] = formatValue(bvalue, *commonData).unit; diff --git a/lib/obp60task/PageThreeValues.cpp b/lib/obp60task/PageThreeValues.cpp index a90d636..c918ce4 100644 --- a/lib/obp60task/PageThreeValues.cpp +++ b/lib/obp60task/PageThreeValues.cpp @@ -44,9 +44,9 @@ class PageThreeValues : public Page GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue) String name1 = xdrDelete(bvalue1->getName()); // Value name name1 = name1.substring(0, 6); // String length limit for value name + calibrationData.calibrateInstance(name1, bvalue1, logger); // Check if boat data value is to be calibrated double value1 = bvalue1->value; // Value as double in SI unit bool valid1 = bvalue1->valid; // Valid information - calibrationData.calibrateInstance(name1, bvalue1, logger); // Check if boat data value is to be calibrated String svalue1 = formatValue(bvalue1, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places String unit1 = formatValue(bvalue1, *commonData).unit; // Unit of value @@ -54,9 +54,9 @@ class PageThreeValues : public Page GwApi::BoatValue *bvalue2 = pageData.values[1]; // Second element in list (only one value by PageOneValue) String name2 = xdrDelete(bvalue2->getName()); // Value name name2 = name2.substring(0, 6); // String length limit for value name + calibrationData.calibrateInstance(name2, bvalue2, logger); // Check if boat data value is to be calibrated double value2 = bvalue2->value; // Value as double in SI unit bool valid2 = bvalue2->valid; // Valid information - calibrationData.calibrateInstance(name2, bvalue2, logger); // Check if boat data value is to be calibrated String svalue2 = formatValue(bvalue2, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places String unit2 = formatValue(bvalue2, *commonData).unit; // Unit of value @@ -64,9 +64,9 @@ class PageThreeValues : public Page GwApi::BoatValue *bvalue3 = pageData.values[2]; // Second element in list (only one value by PageOneValue) String name3 = xdrDelete(bvalue3->getName()); // Value name name3 = name3.substring(0, 6); // String length limit for value name + calibrationData.calibrateInstance(name3, bvalue3, logger); // Check if boat data value is to be calibrated double value3 = bvalue3->value; // Value as double in SI unit bool valid3 = bvalue3->valid; // Valid information - calibrationData.calibrateInstance(name3, bvalue3, logger); // Check if boat data value is to be calibrated String svalue3 = formatValue(bvalue3, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places String unit3 = formatValue(bvalue3, *commonData).unit; // Unit of value diff --git a/lib/obp60task/PageTwoValues.cpp b/lib/obp60task/PageTwoValues.cpp index 68dcfa9..c4e510c 100644 --- a/lib/obp60task/PageTwoValues.cpp +++ b/lib/obp60task/PageTwoValues.cpp @@ -42,9 +42,9 @@ class PageTwoValues : public Page GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue) String name1 = xdrDelete(bvalue1->getName()); // Value name name1 = name1.substring(0, 6); // String length limit for value name + calibrationData.calibrateInstance(name1, bvalue1, logger); // Check if boat data value is to be calibrated double value1 = bvalue1->value; // Value as double in SI unit bool valid1 = bvalue1->valid; // Valid information - calibrationData.calibrateInstance(name1, bvalue1, logger); // Check if boat data value is to be calibrated String svalue1 = formatValue(bvalue1, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places String unit1 = formatValue(bvalue1, *commonData).unit; // Unit of value @@ -52,9 +52,9 @@ class PageTwoValues : public Page GwApi::BoatValue *bvalue2 = pageData.values[1]; // Second element in list (only one value by PageOneValue) String name2 = xdrDelete(bvalue2->getName()); // Value name name2 = name2.substring(0, 6); // String length limit for value name + calibrationData.calibrateInstance(name2, bvalue2, logger); // Check if boat data value is to be calibrated double value2 = bvalue2->value; // Value as double in SI unit bool valid2 = bvalue2->valid; // Valid information - calibrationData.calibrateInstance(name2, bvalue2, logger); // Check if boat data value is to be calibrated String svalue2 = formatValue(bvalue2, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places String unit2 = formatValue(bvalue2, *commonData).unit; // Unit of value From 4e6d52d197d2fdcbd5c0bfbc1149e09cf5d642de Mon Sep 17 00:00:00 2001 From: Ulrich Meine Date: Thu, 22 May 2025 23:28:33 +0200 Subject: [PATCH 16/36] added "condition" to calibration settings in config.json --- lib/obp60task/config.json | 126 +++++++++++++++++++++++++++++++++++--- 1 file changed, 117 insertions(+), 9 deletions(-) diff --git a/lib/obp60task/config.json b/lib/obp60task/config.json index 0a2e981..7c9fadb 100644 --- a/lib/obp60task/config.json +++ b/lib/obp60task/config.json @@ -720,7 +720,19 @@ "category": "OBP60 Calibrations", "capabilities": { "obp60":"true" - } + }, + "condition": [ + { "calInstance1": "AWA" }, + { "calInstance1": "AWS" }, + { "calInstance1": "DBT" }, + { "calInstance1": "HDM" }, + { "calInstance1": "PRPOS" }, + { "calInstance1": "RPOS" }, + { "calInstance1": "STW" }, + { "calInstance1": "TWA" }, + { "calInstance1": "TWS" }, + { "calInstance1": "TWD" }, + { "calInstance1": "WTemp" } ] }, { "name": "calSlope1", @@ -731,7 +743,19 @@ "category": "OBP60 Calibrations", "capabilities": { "obp60":"true" - } + }, + "condition": [ + { "calInstance1": "AWA" }, + { "calInstance1": "AWS" }, + { "calInstance1": "DBT" }, + { "calInstance1": "HDM" }, + { "calInstance1": "PRPOS" }, + { "calInstance1": "RPOS" }, + { "calInstance1": "STW" }, + { "calInstance1": "TWA" }, + { "calInstance1": "TWS" }, + { "calInstance1": "TWD" }, + { "calInstance1": "WTemp" } ] }, { "name": "calSmooth1", @@ -745,7 +769,19 @@ "category": "OBP60 Calibrations", "capabilities": { "obp60":"true" - } + }, + "condition": [ + { "calInstance1": "AWA" }, + { "calInstance1": "AWS" }, + { "calInstance1": "DBT" }, + { "calInstance1": "HDM" }, + { "calInstance1": "PRPOS" }, + { "calInstance1": "RPOS" }, + { "calInstance1": "STW" }, + { "calInstance1": "TWA" }, + { "calInstance1": "TWS" }, + { "calInstance1": "TWD" }, + { "calInstance1": "WTemp" } ] }, { "name": "calInstance2", @@ -781,7 +817,19 @@ "category": "OBP60 Calibrations", "capabilities": { "obp60":"true" - } + }, + "condition": [ + { "calInstance2": "AWA" }, + { "calInstance2": "AWS" }, + { "calInstance2": "DBT" }, + { "calInstance2": "HDM" }, + { "calInstance2": "PRPOS" }, + { "calInstance2": "RPOS" }, + { "calInstance2": "STW" }, + { "calInstance2": "TWA" }, + { "calInstance2": "TWS" }, + { "calInstance2": "TWD" }, + { "calInstance2": "WTemp" } ] }, { "name": "calSlope2", @@ -792,7 +840,19 @@ "category": "OBP60 Calibrations", "capabilities": { "obp60":"true" - } + }, + "condition": [ + { "calInstance2": "AWA" }, + { "calInstance2": "AWS" }, + { "calInstance2": "DBT" }, + { "calInstance2": "HDM" }, + { "calInstance2": "PRPOS" }, + { "calInstance2": "RPOS" }, + { "calInstance2": "STW" }, + { "calInstance2": "TWA" }, + { "calInstance2": "TWS" }, + { "calInstance2": "TWD" }, + { "calInstance2": "WTemp" } ] }, { "name": "calSmooth2", @@ -806,7 +866,19 @@ "category": "OBP60 Calibrations", "capabilities": { "obp60":"true" - } + }, + "condition": [ + { "calInstance2": "AWA" }, + { "calInstance2": "AWS" }, + { "calInstance2": "DBT" }, + { "calInstance2": "HDM" }, + { "calInstance2": "PRPOS" }, + { "calInstance2": "RPOS" }, + { "calInstance2": "STW" }, + { "calInstance2": "TWA" }, + { "calInstance2": "TWS" }, + { "calInstance2": "TWD" }, + { "calInstance2": "WTemp" } ] }, { "name": "calInstance3", @@ -842,7 +914,19 @@ "category": "OBP60 Calibrations", "capabilities": { "obp60":"true" - } + }, + "condition": [ + { "calInstance3": "AWA" }, + { "calInstance3": "AWS" }, + { "calInstance3": "DBT" }, + { "calInstance3": "HDM" }, + { "calInstance3": "PRPOS" }, + { "calInstance3": "RPOS" }, + { "calInstance3": "STW" }, + { "calInstance3": "TWA" }, + { "calInstance3": "TWS" }, + { "calInstance3": "TWD" }, + { "calInstance3": "WTemp" } ] }, { "name": "calSlope3", @@ -853,7 +937,19 @@ "category": "OBP60 Calibrations", "capabilities": { "obp60":"true" - } + }, + "condition": [ + { "calInstance3": "AWA" }, + { "calInstance3": "AWS" }, + { "calInstance3": "DBT" }, + { "calInstance3": "HDM" }, + { "calInstance3": "PRPOS" }, + { "calInstance3": "RPOS" }, + { "calInstance3": "STW" }, + { "calInstance3": "TWA" }, + { "calInstance3": "TWS" }, + { "calInstance3": "TWD" }, + { "calInstance3": "WTemp" } ] }, { "name": "calSmooth3", @@ -867,7 +963,19 @@ "category": "OBP60 Calibrations", "capabilities": { "obp60":"true" - } + }, + "condition": [ + { "calInstance3": "AWA" }, + { "calInstance3": "AWS" }, + { "calInstance3": "DBT" }, + { "calInstance3": "HDM" }, + { "calInstance3": "PRPOS" }, + { "calInstance3": "RPOS" }, + { "calInstance3": "STW" }, + { "calInstance3": "TWA" }, + { "calInstance3": "TWS" }, + { "calInstance3": "TWD" }, + { "calInstance3": "WTemp" } ] }, { "name": "display", From 0c4fce0e25f03fd0b6d12451e2c5b0c0101def15 Mon Sep 17 00:00:00 2001 From: Ulrich Meine Date: Sat, 24 May 2025 00:40:10 +0200 Subject: [PATCH 17/36] No smoothing when boatDataValue is invalid --- lib/obp60task/BoatDataCalibration.cpp | 42 +++++++++++++++++---------- lib/obp60task/BoatDataCalibration.h | 3 +- 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/lib/obp60task/BoatDataCalibration.cpp b/lib/obp60task/BoatDataCalibration.cpp index 3fc4447..cf8d432 100644 --- a/lib/obp60task/BoatDataCalibration.cpp +++ b/lib/obp60task/BoatDataCalibration.cpp @@ -18,11 +18,11 @@ void CalibrationDataList::readConfig(GwConfigHandler* config, GwLog* logger) // Approximate mid-range values in m/s for Beaufort scale 0–12 // hier geht's weiter mit den Bft-Werten: was muss ich bei welcher Windstärke addieren bzw. wie ist der Multiplikator? -/* static const std::array, 12> mps = {{ - {0.2, 1.3}, {1.5, 1.8}, {3.3, 2.1}, {5.4, 2.5}, - {7.9, 2.8}, {10.7, 3.1}, {13.8, 3.3}, {17.1, 3.6}, - {20.7, 3.7}, {24.4, 4.0}, {28.4, 4.2}, {32.6, 4.2} - }}; */ + /* static const std::array, 12> mps = {{ + {0.2, 1.3}, {1.5, 1.8}, {3.3, 2.1}, {5.4, 2.5}, + {7.9, 2.8}, {10.7, 3.1}, {13.8, 3.3}, {17.1, 3.6}, + {20.7, 3.7}, {24.4, 4.0}, {28.4, 4.2}, {32.6, 4.2} + }}; */ String calInstance = ""; String calOffset = ""; @@ -158,7 +158,7 @@ void CalibrationDataList::calibrateInstance(String instance, GwApi::BoatValue* b dataValue += (2 * M_PI); } } else if (boatDataValue->getFormat() == "formatCourse") { // instance is of type direction - dataValue = (dataValue * slope) + offset; + dataValue = (dataValue * slope) + offset; dataValue = fmod(dataValue, 2 * M_PI); if (dataValue < 0) { dataValue += (2 * M_PI); @@ -169,32 +169,42 @@ void CalibrationDataList::calibrateInstance(String instance, GwApi::BoatValue* b dataValue = (dataValue * slope) + offset; } - calibrationData.smoothInstance(instance, dataValue, logger); // smooth the boat data value - calibrationData.list[listNo].value = dataValue; calibrationData.list[listNo].isCalibrated = true; boatDataValue->value = dataValue; + + calibrationData.smoothInstance(instance, boatDataValue, logger); // smooth the boat data value + calibrationData.list[listNo].value = boatDataValue->value; // store the calibrated + smoothed value in the list + LOG_DEBUG(GwLog::DEBUG, "BoatDataCalibration: %s: Offset: %f, Slope: %f, Result: %f", instance.c_str(), offset, slope, boatDataValue->value); } } } -void CalibrationDataList::smoothInstance(String instance, double& dataValue, GwLog* logger) +void CalibrationDataList::smoothInstance(String instance, GwApi::BoatValue* boatDataValue, GwLog* logger) // Method to smoothen the boat data value { // array for last values of smoothed boat data values static std::unordered_map lastValue; double oldValue = 0; - double smoothFactor = calibrationData.list[getInstanceListNo(instance)].smooth; + double dataValue = boatDataValue->value; - if (lastValue.find(instance.c_str()) != lastValue.end()) { - oldValue = lastValue[instance.c_str()]; + if (!boatDataValue->valid) { // no valid boat data value, so we don't want to smoothen value + return; + } else { - dataValue = oldValue + (smoothFactor * (dataValue - oldValue)); // exponential smoothing algorithm + double smoothFactor = calibrationData.list[getInstanceListNo(instance)].smooth; + + if (lastValue.find(instance.c_str()) != lastValue.end()) { + oldValue = lastValue[instance.c_str()]; + + dataValue = oldValue + (smoothFactor * (dataValue - oldValue)); // exponential smoothing algorithm + } + lastValue[instance.c_str()] = dataValue; // store the new value for next cycle; first time, store only the current value and return + boatDataValue->value = dataValue; // set the smoothed value to the boat data value + + LOG_DEBUG(GwLog::DEBUG, "BoatDataCalibration: %s: Smoothing factor: %f, Smoothed value: %f", instance.c_str(), smoothFactor, dataValue); } - lastValue[instance.c_str()] = dataValue; // store the new value for next cycle; first time, store only the current value and return - - LOG_DEBUG(GwLog::DEBUG, "BoatDataCalibration: %s: Smoothing factor: %f, Smoothed value: %f", instance.c_str(), smoothFactor, dataValue); } #endif \ No newline at end of file diff --git a/lib/obp60task/BoatDataCalibration.h b/lib/obp60task/BoatDataCalibration.h index 934484c..b28d371 100644 --- a/lib/obp60task/BoatDataCalibration.h +++ b/lib/obp60task/BoatDataCalibration.h @@ -24,7 +24,8 @@ public: void readConfig(GwConfigHandler* config, GwLog* logger); int getInstanceListNo(String instance); void calibrateInstance(String instance, GwApi::BoatValue* boatDataValue, GwLog* logger); - void smoothInstance(String instance, double &dataValue, GwLog* logger); +// void smoothInstance(String instance, double &dataValue, GwLog* logger); + void smoothInstance(String instance, GwApi::BoatValue* boatDataValue, GwLog* logger); private: }; From 02712263d3bc74c36b26ae8a42d78b6986fc40a6 Mon Sep 17 00:00:00 2001 From: Ulrich Meine Date: Sun, 25 May 2025 13:53:50 +0200 Subject: [PATCH 18/36] Changed array for calibration data into a hash map; reduced unnecessary method parameters --- lib/obp60task/BoatDataCalibration.cpp | 137 +++++++++++++++----------- lib/obp60task/BoatDataCalibration.h | 21 ++-- lib/obp60task/PageFourValues.cpp | 8 +- lib/obp60task/PageFourValues2.cpp | 8 +- lib/obp60task/PageOneValue.cpp | 2 +- lib/obp60task/PageRudderPosition.cpp | 2 +- lib/obp60task/PageSixValues.cpp | 2 +- lib/obp60task/PageThreeValues.cpp | 6 +- lib/obp60task/PageTwoValues.cpp | 4 +- lib/obp60task/PageWind.cpp | 4 +- lib/obp60task/PageWindRose.cpp | 12 +-- lib/obp60task/PageWindRoseFlex.cpp | 12 +-- 12 files changed, 119 insertions(+), 99 deletions(-) diff --git a/lib/obp60task/BoatDataCalibration.cpp b/lib/obp60task/BoatDataCalibration.cpp index cf8d432..a9c5b5c 100644 --- a/lib/obp60task/BoatDataCalibration.cpp +++ b/lib/obp60task/BoatDataCalibration.cpp @@ -6,12 +6,13 @@ #include CalibrationDataList calibrationData; +std::unordered_map CalibrationDataList::calibMap; // list of calibration data instances void CalibrationDataList::readConfig(GwConfigHandler* config, GwLog* logger) // Initial load of calibration data into internal list // This method is called once at init phase of to read the configuration values { - String instance; + std::string instance; double offset; double slope; double smooth; @@ -37,18 +38,18 @@ void CalibrationDataList::readConfig(GwConfigHandler* config, GwLog* logger) String tempFormat = config->getString(config->tempFormat); // [K|C|F] // Read calibration settings for data instances - for (int i = 0; i < maxCalibrationData; i++) { + for (int i = 0; i < MAX_CALIBRATION_DATA; i++) { calInstance = "calInstance" + String(i + 1); calOffset = "calOffset" + String(i + 1); calSlope = "calSlope" + String(i + 1); calSmooth = "calSmooth" + String(i + 1); - calibrationData.list[i] = { "---", 0.0f, 1.0f, 1, 0.0f, false }; - instance = config->getString(calInstance, "---"); + instance = std::string(config->getString(calInstance, "---").c_str()); if (instance == "---") { LOG_DEBUG(GwLog::LOG, "no calibration data for instance no. %d", i + 1); continue; } + calibMap[instance] = { 0.0f, 1.0f, 1.0f, 0.0f, false }; offset = (config->getString(calOffset, "")).toFloat(); slope = (config->getString(calSlope, "")).toFloat(); smooth = (config->getString(calSmooth, "")).toInt(); // user input is int; further math is done with double @@ -104,21 +105,37 @@ void CalibrationDataList::readConfig(GwConfigHandler* config, GwLog* logger) } smooth = 1 - smooth; - calibrationData.list[i].instance = instance; - calibrationData.list[i].offset = offset; - calibrationData.list[i].slope = slope; - calibrationData.list[i].smooth = smooth; - calibrationData.list[i].isCalibrated = false; - LOG_DEBUG(GwLog::LOG, "stored calibration data: %s, offset: %f, slope: %f, smoothing: %f", calibrationData.list[i].instance.c_str(), - calibrationData.list[i].offset, calibrationData.list[i].slope, calibrationData.list[i].smooth); + calibMap[instance].offset = offset; + calibMap[instance].slope = slope; + calibMap[instance].smooth = smooth; + calibMap[instance].isCalibrated = false; + LOG_DEBUG(GwLog::LOG, "stored calibration data: %s, offset: %f, slope: %f, smoothing: %f", instance.c_str(), + calibMap[instance].offset, calibMap[instance].slope, calibMap[instance].smooth); } LOG_DEBUG(GwLog::LOG, "all calibration data read"); } -int CalibrationDataList::getInstanceListNo(String instance) +/* +int CalibrationDataList::getInstanceListNo(std::string instance) // Method to get the index of the requested instance in the list { // Check if instance is in the list + auto it = calibrationData.list.begin(); + std::advance(it, 1); // Move iterator to the second element + if (it != calibrationData.list.end()) { + std::string secondKey = it->first; // Get the key of the second value pair + LOG_DEBUG(GwLog::DEBUG, "Second key in calibration data list: %s", secondKey.c_str()); + } else { + LOG_DEBUG(GwLog::DEBUG, "Calibration data list has less than two elements."); + } + + // Iterate through the map and retrieve keys + for (const auto& pair : list) { + std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl; + } + + + for (int i = 0; i < maxCalibrationData; i++) { if (calibrationData.list[i].instance == instance) { return i; @@ -126,81 +143,83 @@ int CalibrationDataList::getInstanceListNo(String instance) } return -1; // instance not found } +*/ -void CalibrationDataList::calibrateInstance(String instance, GwApi::BoatValue* boatDataValue, GwLog* logger) +void CalibrationDataList::calibrateInstance(GwApi::BoatValue* boatDataValue, GwLog* logger) // Method to calibrate the boat data value { + std::string instance = boatDataValue->getName().c_str(); double offset = 0; double slope = 1.0; double dataValue = 0; + std::string format = ""; - int listNo = getInstanceListNo(instance); - if (listNo < 0) { + if (calibMap.find(instance) == calibMap.end()) { LOG_DEBUG(GwLog::DEBUG, "BoatDataCalibration: %s not found in calibration data list", instance.c_str()); return; + } else if (!boatDataValue->valid) { // no valid boat data value, so we don't want to apply calibration data + calibMap[instance].isCalibrated = false; + return; } else { - offset = calibrationData.list[listNo].offset; - slope = calibrationData.list[listNo].slope; + offset = calibMap[instance].offset; + slope = calibMap[instance].slope; + dataValue = boatDataValue->value; + format = boatDataValue->getFormat().c_str(); + LOG_DEBUG(GwLog::DEBUG, "BoatDataCalibration: %s: value: %f, format: %s", instance.c_str(), dataValue, format.c_str()); - if (!boatDataValue->valid) { // no valid boat data value, so we don't want to apply calibration data - calibrationData.list[listNo].isCalibrated = false; - return; - } else { - dataValue = boatDataValue->value; - LOG_DEBUG(GwLog::DEBUG, "BoatDataCalibration: %s: value: %f, format: %s", boatDataValue->getName().c_str(), boatDataValue->value, boatDataValue->getFormat().c_str()); - - if (boatDataValue->getFormat() == "formatWind") { // instance is of type angle - dataValue = (dataValue * slope) + offset; - dataValue = fmod(dataValue, 2 * M_PI); - if (dataValue > (M_PI)) { - dataValue -= (2 * M_PI); - } else if (dataValue < (M_PI * -1)) { - dataValue += (2 * M_PI); - } - } else if (boatDataValue->getFormat() == "formatCourse") { // instance is of type direction - dataValue = (dataValue * slope) + offset; - dataValue = fmod(dataValue, 2 * M_PI); - if (dataValue < 0) { - dataValue += (2 * M_PI); - } - } else if (boatDataValue->getFormat() == "kelvinToC") { // instance is of type temperature - dataValue = ((dataValue - 273.15) * slope) + offset + 273.15; - } else { - dataValue = (dataValue * slope) + offset; + if (format == "formatWind") { // instance is of type angle + dataValue = (dataValue * slope) + offset; + dataValue = fmod(dataValue, 2 * M_PI); + if (dataValue > (M_PI)) { + dataValue -= (2 * M_PI); + } else if (dataValue < (M_PI * -1)) { + dataValue += (2 * M_PI); } - - calibrationData.list[listNo].isCalibrated = true; - boatDataValue->value = dataValue; - - calibrationData.smoothInstance(instance, boatDataValue, logger); // smooth the boat data value - calibrationData.list[listNo].value = boatDataValue->value; // store the calibrated + smoothed value in the list - - LOG_DEBUG(GwLog::DEBUG, "BoatDataCalibration: %s: Offset: %f, Slope: %f, Result: %f", instance.c_str(), offset, slope, boatDataValue->value); + } else if (format == "formatCourse") { // instance is of type direction + dataValue = (dataValue * slope) + offset; + dataValue = fmod(dataValue, 2 * M_PI); + if (dataValue < 0) { + dataValue += (2 * M_PI); + } + } else if (format == "kelvinToC") { // instance is of type temperature + dataValue = ((dataValue - 273.15) * slope) + offset + 273.15; + } else { + dataValue = (dataValue * slope) + offset; } + + calibMap[instance].isCalibrated = true; + boatDataValue->value = dataValue; + + calibrationData.smoothInstance(boatDataValue, logger); // smooth the boat data value + calibMap[instance].value = boatDataValue->value; // store the calibrated + smoothed value in the list + + LOG_DEBUG(GwLog::DEBUG, "BoatDataCalibration: %s: Offset: %f, Slope: %f, Result: %f", instance.c_str(), offset, slope, calibMap[instance].value); } } -void CalibrationDataList::smoothInstance(String instance, GwApi::BoatValue* boatDataValue, GwLog* logger) +void CalibrationDataList::smoothInstance(GwApi::BoatValue* boatDataValue, GwLog* logger) // Method to smoothen the boat data value { - // array for last values of smoothed boat data values - static std::unordered_map lastValue; + static std::unordered_map lastValue; // array for last values of smoothed boat data values + std::string instance = boatDataValue->getName().c_str(); double oldValue = 0; double dataValue = boatDataValue->value; + double smoothFactor = 0; if (!boatDataValue->valid) { // no valid boat data value, so we don't want to smoothen value return; + } else if (calibMap.find(instance) == calibMap.end()) { + LOG_DEBUG(GwLog::DEBUG, "BoatDataCalibration: smooth factor for %s not found in calibration data list", instance.c_str()); + return; } else { + smoothFactor = calibMap[instance].smooth; - double smoothFactor = calibrationData.list[getInstanceListNo(instance)].smooth; - - if (lastValue.find(instance.c_str()) != lastValue.end()) { - oldValue = lastValue[instance.c_str()]; - + if (lastValue.find(instance) != lastValue.end()) { + oldValue = lastValue[instance]; dataValue = oldValue + (smoothFactor * (dataValue - oldValue)); // exponential smoothing algorithm } - lastValue[instance.c_str()] = dataValue; // store the new value for next cycle; first time, store only the current value and return + lastValue[instance] = dataValue; // store the new value for next cycle; first time, store only the current value and return boatDataValue->value = dataValue; // set the smoothed value to the boat data value LOG_DEBUG(GwLog::DEBUG, "BoatDataCalibration: %s: Smoothing factor: %f, Smoothed value: %f", instance.c_str(), smoothFactor, dataValue); diff --git a/lib/obp60task/BoatDataCalibration.h b/lib/obp60task/BoatDataCalibration.h index b28d371..b0624d4 100644 --- a/lib/obp60task/BoatDataCalibration.h +++ b/lib/obp60task/BoatDataCalibration.h @@ -4,28 +4,29 @@ #define _BOATDATACALIBRATION_H #include "Pagedata.h" -#include "WString.h" +#include +#include + +#define MAX_CALIBRATION_DATA 3 // maximum number of calibration data instances typedef struct { - String instance; // data type/instance to be calibrated +// String instance; // data type/instance to be calibrated double offset; // calibration offset double slope; // calibration slope double smooth; // smoothing factor double value; // calibrated data value bool isCalibrated; // is data instance value calibrated? -} CalibData; - -const int maxCalibrationData = 3; // maximum number of calibration data instances +} TypeCalibData; class CalibrationDataList { public: - CalibData list[maxCalibrationData]; // list of calibration data instances +// CalibData list[maxCalibrationData]; // list of calibration data instances + static std::unordered_map calibMap; // list of calibration data instances void readConfig(GwConfigHandler* config, GwLog* logger); - int getInstanceListNo(String instance); - void calibrateInstance(String instance, GwApi::BoatValue* boatDataValue, GwLog* logger); -// void smoothInstance(String instance, double &dataValue, GwLog* logger); - void smoothInstance(String instance, GwApi::BoatValue* boatDataValue, GwLog* logger); +// int getInstanceListNo(std::string instance); + void calibrateInstance(GwApi::BoatValue* boatDataValue, GwLog* logger); + void smoothInstance(GwApi::BoatValue* boatDataValue, GwLog* logger); private: }; diff --git a/lib/obp60task/PageFourValues.cpp b/lib/obp60task/PageFourValues.cpp index 9e76988..964ae0d 100644 --- a/lib/obp60task/PageFourValues.cpp +++ b/lib/obp60task/PageFourValues.cpp @@ -46,7 +46,7 @@ class PageFourValues : public Page GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue) String name1 = xdrDelete(bvalue1->getName()); // Value name name1 = name1.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name1, bvalue1, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue1, logger); // Check if boat data value is to be calibrated double value1 = bvalue1->value; // Value as double in SI unit bool valid1 = bvalue1->valid; // Valid information String svalue1 = formatValue(bvalue1, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places @@ -56,7 +56,7 @@ class PageFourValues : public Page GwApi::BoatValue *bvalue2 = pageData.values[1]; // Second element in list (only one value by PageOneValue) String name2 = xdrDelete(bvalue2->getName()); // Value name name2 = name2.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name2, bvalue2, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue2, logger); // Check if boat data value is to be calibrated double value2 = bvalue2->value; // Value as double in SI unit bool valid2 = bvalue2->valid; // Valid information String svalue2 = formatValue(bvalue2, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places @@ -66,7 +66,7 @@ class PageFourValues : public Page GwApi::BoatValue *bvalue3 = pageData.values[2]; // Second element in list (only one value by PageOneValue) String name3 = xdrDelete(bvalue3->getName()); // Value name name3 = name3.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name3, bvalue3, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue3, logger); // Check if boat data value is to be calibrated double value3 = bvalue3->value; // Value as double in SI unit bool valid3 = bvalue3->valid; // Valid information String svalue3 = formatValue(bvalue3, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places @@ -76,7 +76,7 @@ class PageFourValues : public Page GwApi::BoatValue *bvalue4 = pageData.values[3]; // Second element in list (only one value by PageOneValue) String name4 = xdrDelete(bvalue4->getName()); // Value name name4 = name4.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name4, bvalue4, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue4, logger); // Check if boat data value is to be calibrated double value4 = bvalue4->value; // Value as double in SI unit bool valid4 = bvalue4->valid; // Valid information String svalue4 = formatValue(bvalue4, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places diff --git a/lib/obp60task/PageFourValues2.cpp b/lib/obp60task/PageFourValues2.cpp index 9f94e08..dbaba22 100644 --- a/lib/obp60task/PageFourValues2.cpp +++ b/lib/obp60task/PageFourValues2.cpp @@ -46,7 +46,7 @@ class PageFourValues2 : public Page GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue) String name1 = xdrDelete(bvalue1->getName()); // Value name name1 = name1.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name1, bvalue1, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue1, logger); // Check if boat data value is to be calibrated double value1 = bvalue1->value; // Value as double in SI unit bool valid1 = bvalue1->valid; // Valid information String svalue1 = formatValue(bvalue1, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places @@ -56,7 +56,7 @@ class PageFourValues2 : public Page GwApi::BoatValue *bvalue2 = pageData.values[1]; // Second element in list (only one value by PageOneValue) String name2 = xdrDelete(bvalue2->getName()); // Value name name2 = name2.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name2, bvalue2, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue2, logger); // Check if boat data value is to be calibrated double value2 = bvalue2->value; // Value as double in SI unit bool valid2 = bvalue2->valid; // Valid information String svalue2 = formatValue(bvalue2, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places @@ -66,7 +66,7 @@ class PageFourValues2 : public Page GwApi::BoatValue *bvalue3 = pageData.values[2]; // Second element in list (only one value by PageOneValue) String name3 = xdrDelete(bvalue3->getName()); // Value name name3 = name3.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name3, bvalue3, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue3, logger); // Check if boat data value is to be calibrated double value3 = bvalue3->value; // Value as double in SI unit bool valid3 = bvalue3->valid; // Valid information String svalue3 = formatValue(bvalue3, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places @@ -76,7 +76,7 @@ class PageFourValues2 : public Page GwApi::BoatValue *bvalue4 = pageData.values[3]; // Second element in list (only one value by PageOneValue) String name4 = xdrDelete(bvalue4->getName()); // Value name name4 = name4.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name4, bvalue4, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue4, logger); // Check if boat data value is to be calibrated double value4 = bvalue4->value; // Value as double in SI unit bool valid4 = bvalue4->valid; // Valid information String svalue4 = formatValue(bvalue4, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places diff --git a/lib/obp60task/PageOneValue.cpp b/lib/obp60task/PageOneValue.cpp index eac6cf2..e955719 100644 --- a/lib/obp60task/PageOneValue.cpp +++ b/lib/obp60task/PageOneValue.cpp @@ -40,7 +40,7 @@ class PageOneValue : public Page GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue) String name1 = xdrDelete(bvalue1->getName()); // Value name name1 = name1.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name1, bvalue1, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue1, logger); // Check if boat data value is to be calibrated double value1 = bvalue1->value; // Value as double in SI unit bool valid1 = bvalue1->valid; // Valid information String svalue1 = formatValue(bvalue1, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places diff --git a/lib/obp60task/PageRudderPosition.cpp b/lib/obp60task/PageRudderPosition.cpp index 290a9a6..be8fca5 100644 --- a/lib/obp60task/PageRudderPosition.cpp +++ b/lib/obp60task/PageRudderPosition.cpp @@ -41,7 +41,7 @@ public: GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list String name1 = bvalue1->getName().c_str(); // Value name name1 = name1.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name1, bvalue1, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue1, logger); // Check if boat data value is to be calibrated value1 = bvalue1->value; // Raw value without unit convertion bool valid1 = bvalue1->valid; // Valid information String svalue1 = formatValue(bvalue1, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places diff --git a/lib/obp60task/PageSixValues.cpp b/lib/obp60task/PageSixValues.cpp index bf55d98..04ad3ba 100644 --- a/lib/obp60task/PageSixValues.cpp +++ b/lib/obp60task/PageSixValues.cpp @@ -61,7 +61,7 @@ class PageSixValues : public Page bvalue = pageData.values[i]; DataName[i] = xdrDelete(bvalue->getName()); DataName[i] = DataName[i].substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(DataName[i], bvalue, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue, logger); // Check if boat data value is to be calibrated DataValue[i] = bvalue->value; // Value as double in SI unit DataValid[i] = bvalue->valid; DataText[i] = formatValue(bvalue, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places diff --git a/lib/obp60task/PageThreeValues.cpp b/lib/obp60task/PageThreeValues.cpp index c918ce4..b51229b 100644 --- a/lib/obp60task/PageThreeValues.cpp +++ b/lib/obp60task/PageThreeValues.cpp @@ -44,7 +44,7 @@ class PageThreeValues : public Page GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue) String name1 = xdrDelete(bvalue1->getName()); // Value name name1 = name1.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name1, bvalue1, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue1, logger); // Check if boat data value is to be calibrated double value1 = bvalue1->value; // Value as double in SI unit bool valid1 = bvalue1->valid; // Valid information String svalue1 = formatValue(bvalue1, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places @@ -54,7 +54,7 @@ class PageThreeValues : public Page GwApi::BoatValue *bvalue2 = pageData.values[1]; // Second element in list (only one value by PageOneValue) String name2 = xdrDelete(bvalue2->getName()); // Value name name2 = name2.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name2, bvalue2, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue2, logger); // Check if boat data value is to be calibrated double value2 = bvalue2->value; // Value as double in SI unit bool valid2 = bvalue2->valid; // Valid information String svalue2 = formatValue(bvalue2, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places @@ -64,7 +64,7 @@ class PageThreeValues : public Page GwApi::BoatValue *bvalue3 = pageData.values[2]; // Second element in list (only one value by PageOneValue) String name3 = xdrDelete(bvalue3->getName()); // Value name name3 = name3.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name3, bvalue3, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue3, logger); // Check if boat data value is to be calibrated double value3 = bvalue3->value; // Value as double in SI unit bool valid3 = bvalue3->valid; // Valid information String svalue3 = formatValue(bvalue3, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places diff --git a/lib/obp60task/PageTwoValues.cpp b/lib/obp60task/PageTwoValues.cpp index c4e510c..5334af8 100644 --- a/lib/obp60task/PageTwoValues.cpp +++ b/lib/obp60task/PageTwoValues.cpp @@ -42,7 +42,7 @@ class PageTwoValues : public Page GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue) String name1 = xdrDelete(bvalue1->getName()); // Value name name1 = name1.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name1, bvalue1, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue1, logger); // Check if boat data value is to be calibrated double value1 = bvalue1->value; // Value as double in SI unit bool valid1 = bvalue1->valid; // Valid information String svalue1 = formatValue(bvalue1, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places @@ -52,7 +52,7 @@ class PageTwoValues : public Page GwApi::BoatValue *bvalue2 = pageData.values[1]; // Second element in list (only one value by PageOneValue) String name2 = xdrDelete(bvalue2->getName()); // Value name name2 = name2.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name2, bvalue2, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue2, logger); // Check if boat data value is to be calibrated double value2 = bvalue2->value; // Value as double in SI unit bool valid2 = bvalue2->valid; // Valid information String svalue2 = formatValue(bvalue2, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places diff --git a/lib/obp60task/PageWind.cpp b/lib/obp60task/PageWind.cpp index 272478b..c40d61c 100644 --- a/lib/obp60task/PageWind.cpp +++ b/lib/obp60task/PageWind.cpp @@ -324,7 +324,7 @@ public: } String name1 = bvalue1->getName().c_str(); // Value name name1 = name1.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name1, bvalue1, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue1, logger); // Check if boat data value is to be calibrated double value1 = bvalue1->value; // Value as double in SI unit // bool valid1 = bvalue1->valid; // Valid information String svalue1 = formatValue(bvalue1, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places @@ -338,7 +338,7 @@ public: } String name2 = bvalue2->getName().c_str(); // Value name name2 = name2.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name2, bvalue2, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue2, logger); // Check if boat data value is to be calibrated double value2 = bvalue2->value; // Value as double in SI unit // bool valid2 = bvalue2->valid; // Valid information if (simulation) { diff --git a/lib/obp60task/PageWindRose.cpp b/lib/obp60task/PageWindRose.cpp index dba50d1..268d555 100644 --- a/lib/obp60task/PageWindRose.cpp +++ b/lib/obp60task/PageWindRose.cpp @@ -52,7 +52,7 @@ public: GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue) String name1 = xdrDelete(bvalue1->getName()); // Value name name1 = name1.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name1, bvalue1, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue1, logger); // Check if boat data value is to be calibrated double value1 = bvalue1->value; // Value as double in SI unit bool valid1 = bvalue1->valid; // Valid information value1 = formatValue(bvalue1, *commonData).value;// Format only nesaccery for simulation data for pointer @@ -67,7 +67,7 @@ public: GwApi::BoatValue *bvalue2 = pageData.values[1]; // First element in list (only one value by PageOneValue) String name2 = xdrDelete(bvalue2->getName()); // Value name name2 = name2.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name2, bvalue2, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue2, logger); // Check if boat data value is to be calibrated double value2 = bvalue2->value; // Value as double in SI unit bool valid2 = bvalue2->valid; // Valid information String svalue2 = formatValue(bvalue2, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places @@ -81,7 +81,7 @@ public: GwApi::BoatValue *bvalue3 = pageData.values[2]; // Second element in list (only one value by PageOneValue) String name3 = xdrDelete(bvalue3->getName()); // Value name name3 = name3.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name3, bvalue3, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue3, logger); // Check if boat data value is to be calibrated double value3 = bvalue3->value; // Value as double in SI unit bool valid3 = bvalue3->valid; // Valid information String svalue3 = formatValue(bvalue3, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places @@ -95,7 +95,7 @@ public: GwApi::BoatValue *bvalue4 = pageData.values[3]; // Second element in list (only one value by PageOneValue) String name4 = xdrDelete(bvalue4->getName()); // Value name name4 = name4.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name4, bvalue4, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue4, logger); // Check if boat data value is to be calibrated double value4 = bvalue4->value; // Value as double in SI unit bool valid4 = bvalue4->valid; // Valid information String svalue4 = formatValue(bvalue4, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places @@ -109,7 +109,7 @@ public: GwApi::BoatValue *bvalue5 = pageData.values[4]; // Second element in list (only one value by PageOneValue) String name5 = xdrDelete(bvalue5->getName()); // Value name name5 = name5.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name5, bvalue5, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue5, logger); // Check if boat data value is to be calibrated double value5 = bvalue5->value; // Value as double in SI unit bool valid5 = bvalue5->valid; // Valid information String svalue5 = formatValue(bvalue5, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places @@ -123,7 +123,7 @@ public: GwApi::BoatValue *bvalue6 = pageData.values[5]; // Second element in list (only one value by PageOneValue) String name6 = xdrDelete(bvalue6->getName()); // Value name name6 = name6.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name6, bvalue6, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue6, logger); // Check if boat data value is to be calibrated double value6 = bvalue6->value; // Value as double in SI unit bool valid6 = bvalue6->valid; // Valid information String svalue6 = formatValue(bvalue6, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places diff --git a/lib/obp60task/PageWindRoseFlex.cpp b/lib/obp60task/PageWindRoseFlex.cpp index b946342..f107d9e 100644 --- a/lib/obp60task/PageWindRoseFlex.cpp +++ b/lib/obp60task/PageWindRoseFlex.cpp @@ -52,7 +52,7 @@ public: GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue) String name1 = xdrDelete(bvalue1->getName()); // Value name name1 = name1.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name1, bvalue1, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue1, logger); // Check if boat data value is to be calibrated double value1 = bvalue1->value; // Value as double in SI unit bool valid1 = bvalue1->valid; // Valid information value1 = formatValue(bvalue1, *commonData).value;// Format only nesaccery for simulation data for pointer @@ -67,7 +67,7 @@ public: GwApi::BoatValue *bvalue2 = pageData.values[1]; // First element in list (only one value by PageOneValue) String name2 = xdrDelete(bvalue2->getName()); // Value name name2 = name2.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name2, bvalue2, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue2, logger); // Check if boat data value is to be calibrated double value2 = bvalue2->value; // Value as double in SI unit bool valid2 = bvalue2->valid; // Valid information String svalue2 = formatValue(bvalue2, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places @@ -81,7 +81,7 @@ public: GwApi::BoatValue *bvalue3 = pageData.values[2]; // Second element in list (only one value by PageOneValue) String name3 = xdrDelete(bvalue3->getName()); // Value name name3 = name3.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name3, bvalue3, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue3, logger); // Check if boat data value is to be calibrated double value3 = bvalue3->value; // Value as double in SI unit bool valid3 = bvalue3->valid; // Valid information String svalue3 = formatValue(bvalue3, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places @@ -95,7 +95,7 @@ public: GwApi::BoatValue *bvalue4 = pageData.values[3]; // Second element in list (only one value by PageOneValue) String name4 = xdrDelete(bvalue4->getName()); // Value name name4 = name4.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name4, bvalue4, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue4, logger); // Check if boat data value is to be calibrated double value4 = bvalue4->value; // Value as double in SI unit bool valid4 = bvalue4->valid; // Valid information String svalue4 = formatValue(bvalue4, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places @@ -109,7 +109,7 @@ public: GwApi::BoatValue *bvalue5 = pageData.values[4]; // Second element in list (only one value by PageOneValue) String name5 = xdrDelete(bvalue5->getName()); // Value name name5 = name5.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name5, bvalue5, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue5, logger); // Check if boat data value is to be calibrated double value5 = bvalue5->value; // Value as double in SI unit bool valid5 = bvalue5->valid; // Valid information String svalue5 = formatValue(bvalue5, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places @@ -123,7 +123,7 @@ public: GwApi::BoatValue *bvalue6 = pageData.values[5]; // Second element in list (only one value by PageOneValue) String name6 = xdrDelete(bvalue6->getName()); // Value name name6 = name6.substring(0, 6); // String length limit for value name - calibrationData.calibrateInstance(name6, bvalue6, logger); // Check if boat data value is to be calibrated + calibrationData.calibrateInstance(bvalue6, logger); // Check if boat data value is to be calibrated double value6 = bvalue6->value; // Value as double in SI unit bool valid6 = bvalue6->valid; // Valid information String svalue6 = formatValue(bvalue6, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places From d6e3c7ad4816f9db259cc874d1ea42088c6909bb Mon Sep 17 00:00:00 2001 From: Ulrich Meine Date: Sun, 25 May 2025 17:42:50 +0200 Subject: [PATCH 19/36] Calibration for data types COG, SOG added --- lib/obp60task/BoatDataCalibration.cpp | 43 ++------------------------- lib/obp60task/BoatDataCalibration.h | 3 -- lib/obp60task/config.json | 24 +++++++++++++++ 3 files changed, 27 insertions(+), 43 deletions(-) diff --git a/lib/obp60task/BoatDataCalibration.cpp b/lib/obp60task/BoatDataCalibration.cpp index a9c5b5c..dcfd8ba 100644 --- a/lib/obp60task/BoatDataCalibration.cpp +++ b/lib/obp60task/BoatDataCalibration.cpp @@ -17,14 +17,6 @@ void CalibrationDataList::readConfig(GwConfigHandler* config, GwLog* logger) double slope; double smooth; - // Approximate mid-range values in m/s for Beaufort scale 0–12 - // hier geht's weiter mit den Bft-Werten: was muss ich bei welcher Windstärke addieren bzw. wie ist der Multiplikator? - /* static const std::array, 12> mps = {{ - {0.2, 1.3}, {1.5, 1.8}, {3.3, 2.1}, {5.4, 2.5}, - {7.9, 2.8}, {10.7, 3.1}, {13.8, 3.3}, {17.1, 3.6}, - {20.7, 3.7}, {24.4, 4.0}, {28.4, 4.2}, {32.6, 4.2} - }}; */ - String calInstance = ""; String calOffset = ""; String calSlope = ""; @@ -66,7 +58,7 @@ void CalibrationDataList::readConfig(GwConfigHandler* config, GwLog* logger) offset *= 2 + (offset / 2); // Convert Bft to m/s (approx) -> to be improved } - } else if (instance == "AWA" || instance == "TWA" || instance == "TWD" || instance == "HDM" || instance == "PRPOS" || instance == "RPOS") { + } else if (instance == "AWA" || instance == "COG" || instance == "TWA" || instance == "TWD" || instance == "HDM" || instance == "PRPOS" || instance == "RPOS") { offset *= M_PI / 180; // Convert deg to rad } else if (instance == "DBT") { @@ -76,7 +68,7 @@ void CalibrationDataList::readConfig(GwConfigHandler* config, GwLog* logger) offset /= 3.28084; // Convert ft to m } - } else if (instance == "STW") { + } else if (instance == "SOG" || instance == "STW") { if (speedFormat == "m/s") { // No conversion needed } else if (speedFormat == "km/h") { @@ -115,36 +107,6 @@ void CalibrationDataList::readConfig(GwConfigHandler* config, GwLog* logger) LOG_DEBUG(GwLog::LOG, "all calibration data read"); } -/* -int CalibrationDataList::getInstanceListNo(std::string instance) -// Method to get the index of the requested instance in the list -{ - // Check if instance is in the list - auto it = calibrationData.list.begin(); - std::advance(it, 1); // Move iterator to the second element - if (it != calibrationData.list.end()) { - std::string secondKey = it->first; // Get the key of the second value pair - LOG_DEBUG(GwLog::DEBUG, "Second key in calibration data list: %s", secondKey.c_str()); - } else { - LOG_DEBUG(GwLog::DEBUG, "Calibration data list has less than two elements."); - } - - // Iterate through the map and retrieve keys - for (const auto& pair : list) { - std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl; - } - - - - for (int i = 0; i < maxCalibrationData; i++) { - if (calibrationData.list[i].instance == instance) { - return i; - } - } - return -1; // instance not found -} -*/ - void CalibrationDataList::calibrateInstance(GwApi::BoatValue* boatDataValue, GwLog* logger) // Method to calibrate the boat data value { @@ -184,6 +146,7 @@ void CalibrationDataList::calibrateInstance(GwApi::BoatValue* boatDataValue, GwL } else if (format == "kelvinToC") { // instance is of type temperature dataValue = ((dataValue - 273.15) * slope) + offset + 273.15; } else { + dataValue = (dataValue * slope) + offset; } diff --git a/lib/obp60task/BoatDataCalibration.h b/lib/obp60task/BoatDataCalibration.h index b0624d4..5a0606b 100644 --- a/lib/obp60task/BoatDataCalibration.h +++ b/lib/obp60task/BoatDataCalibration.h @@ -10,7 +10,6 @@ #define MAX_CALIBRATION_DATA 3 // maximum number of calibration data instances typedef struct { -// String instance; // data type/instance to be calibrated double offset; // calibration offset double slope; // calibration slope double smooth; // smoothing factor @@ -20,11 +19,9 @@ typedef struct { class CalibrationDataList { public: -// CalibData list[maxCalibrationData]; // list of calibration data instances static std::unordered_map calibMap; // list of calibration data instances void readConfig(GwConfigHandler* config, GwLog* logger); -// int getInstanceListNo(std::string instance); void calibrateInstance(GwApi::BoatValue* boatDataValue, GwLog* logger); void smoothInstance(GwApi::BoatValue* boatDataValue, GwLog* logger); diff --git a/lib/obp60task/config.json b/lib/obp60task/config.json index 7c9fadb..23df2f9 100644 --- a/lib/obp60task/config.json +++ b/lib/obp60task/config.json @@ -696,10 +696,12 @@ "---", "AWA", "AWS", + "COG", "DBT", "HDM", "PRPOS", "RPOS", + "SOG", "STW", "TWA", "TWS", @@ -724,10 +726,12 @@ "condition": [ { "calInstance1": "AWA" }, { "calInstance1": "AWS" }, + { "calInstance2": "COG" }, { "calInstance1": "DBT" }, { "calInstance1": "HDM" }, { "calInstance1": "PRPOS" }, { "calInstance1": "RPOS" }, + { "calInstance1": "SOG" }, { "calInstance1": "STW" }, { "calInstance1": "TWA" }, { "calInstance1": "TWS" }, @@ -747,10 +751,12 @@ "condition": [ { "calInstance1": "AWA" }, { "calInstance1": "AWS" }, + { "calInstance2": "COG" }, { "calInstance1": "DBT" }, { "calInstance1": "HDM" }, { "calInstance1": "PRPOS" }, { "calInstance1": "RPOS" }, + { "calInstance1": "SOG" }, { "calInstance1": "STW" }, { "calInstance1": "TWA" }, { "calInstance1": "TWS" }, @@ -773,10 +779,12 @@ "condition": [ { "calInstance1": "AWA" }, { "calInstance1": "AWS" }, + { "calInstance2": "COG" }, { "calInstance1": "DBT" }, { "calInstance1": "HDM" }, { "calInstance1": "PRPOS" }, { "calInstance1": "RPOS" }, + { "calInstance1": "SOG" }, { "calInstance1": "STW" }, { "calInstance1": "TWA" }, { "calInstance1": "TWS" }, @@ -793,10 +801,12 @@ "---", "AWA", "AWS", + "COG", "DBT", "HDM", "PRPOS", "RPOS", + "SOG", "STW", "TWA", "TWS", @@ -821,10 +831,12 @@ "condition": [ { "calInstance2": "AWA" }, { "calInstance2": "AWS" }, + { "calInstance2": "COG" }, { "calInstance2": "DBT" }, { "calInstance2": "HDM" }, { "calInstance2": "PRPOS" }, { "calInstance2": "RPOS" }, + { "calInstance2": "SOG" }, { "calInstance2": "STW" }, { "calInstance2": "TWA" }, { "calInstance2": "TWS" }, @@ -844,10 +856,12 @@ "condition": [ { "calInstance2": "AWA" }, { "calInstance2": "AWS" }, + { "calInstance2": "COG" }, { "calInstance2": "DBT" }, { "calInstance2": "HDM" }, { "calInstance2": "PRPOS" }, { "calInstance2": "RPOS" }, + { "calInstance2": "SOG" }, { "calInstance2": "STW" }, { "calInstance2": "TWA" }, { "calInstance2": "TWS" }, @@ -870,10 +884,12 @@ "condition": [ { "calInstance2": "AWA" }, { "calInstance2": "AWS" }, + { "calInstance2": "COG" }, { "calInstance2": "DBT" }, { "calInstance2": "HDM" }, { "calInstance2": "PRPOS" }, { "calInstance2": "RPOS" }, + { "calInstance2": "SOG" }, { "calInstance2": "STW" }, { "calInstance2": "TWA" }, { "calInstance2": "TWS" }, @@ -890,10 +906,12 @@ "---", "AWA", "AWS", + "COG", "DBT", "HDM", "PRPOS", "RPOS", + "SOG", "STW", "TWA", "TWS", @@ -918,10 +936,12 @@ "condition": [ { "calInstance3": "AWA" }, { "calInstance3": "AWS" }, + { "calInstance3": "COG" }, { "calInstance3": "DBT" }, { "calInstance3": "HDM" }, { "calInstance3": "PRPOS" }, { "calInstance3": "RPOS" }, + { "calInstance3": "SOG" }, { "calInstance3": "STW" }, { "calInstance3": "TWA" }, { "calInstance3": "TWS" }, @@ -941,10 +961,12 @@ "condition": [ { "calInstance3": "AWA" }, { "calInstance3": "AWS" }, + { "calInstance3": "COG" }, { "calInstance3": "DBT" }, { "calInstance3": "HDM" }, { "calInstance3": "PRPOS" }, { "calInstance3": "RPOS" }, + { "calInstance3": "SOG" }, { "calInstance3": "STW" }, { "calInstance3": "TWA" }, { "calInstance3": "TWS" }, @@ -967,10 +989,12 @@ "condition": [ { "calInstance3": "AWA" }, { "calInstance3": "AWS" }, + { "calInstance3": "COG" }, { "calInstance3": "DBT" }, { "calInstance3": "HDM" }, { "calInstance3": "PRPOS" }, { "calInstance3": "RPOS" }, + { "calInstance3": "SOG" }, { "calInstance3": "STW" }, { "calInstance3": "TWA" }, { "calInstance3": "TWS" }, From 29706df6cd736baaa989c418c0b3925641d876d0 Mon Sep 17 00:00:00 2001 From: Ulrich Meine Date: Sun, 25 May 2025 20:18:09 +0200 Subject: [PATCH 20/36] Drop top and bottom line to adjust to standard page design --- lib/obp60task/PageSixValues.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/obp60task/PageSixValues.cpp b/lib/obp60task/PageSixValues.cpp index b3bdeee..e59620f 100644 --- a/lib/obp60task/PageSixValues.cpp +++ b/lib/obp60task/PageSixValues.cpp @@ -85,9 +85,10 @@ class PageSixValues : public Page getdisplay().setTextColor(commonData->fgcolor); for (int i = 0; i < ( HowManyValues / 2 ); i++){ - // Horizontal line 3 pix - getdisplay().fillRect(0, SixValues_y1+i*SixValues_DeltaY, 400, 3, commonData->fgcolor); - + if (i < (HowManyValues / 2) - 1) { // Don't draw horizontal line after last line of values -> standard design + // Horizontal line 3 pix + getdisplay().fillRect(0, SixValues_y1+(i+1)*SixValues_DeltaY, 400, 3, commonData->fgcolor); + } for (int j = 0; j < 2; j++){ int ValueIndex = i * 2 + j; int x0 = SixValues_x1 + j * SixValues_DeltaX; @@ -151,7 +152,6 @@ class PageSixValues : public Page // Vertical line 3 pix getdisplay().fillRect(SixValues_x1+SixValues_DeltaX-8, SixValues_y1+i*SixValues_DeltaY, 3, SixValues_DeltaY, commonData->fgcolor); } - getdisplay().fillRect(0, SixValues_y1+3*SixValues_DeltaY, 400, 3, commonData->fgcolor); // Update display getdisplay().nextPage(); // Partial update (fast) From ebf6e62389501cd607e49b3d04149395eb444c78 Mon Sep 17 00:00:00 2001 From: Manfred Radmacher <99966818+ManfredRad@users.noreply.github.com> Date: Thu, 5 Jun 2025 15:57:06 +0200 Subject: [PATCH 21/36] PageCompass A new page to show heading data or course over ground in a layout inspoired by an analog compass. The compass signal shown can be altered by the left key. In addition a second signal can be shown as well from the following choice: HDM, HDT, COG, STW, SOG, DBS. This signal can also be changed by the second key. --- lib/obp60task/PageCompass.cpp | 262 ++++++++++++++++++++++++++++++++++ lib/obp60task/config.json | 194 ++----------------------- lib/obp60task/gen_set.py | 3 +- 3 files changed, 275 insertions(+), 184 deletions(-) create mode 100644 lib/obp60task/PageCompass.cpp diff --git a/lib/obp60task/PageCompass.cpp b/lib/obp60task/PageCompass.cpp new file mode 100644 index 0000000..003577c --- /dev/null +++ b/lib/obp60task/PageCompass.cpp @@ -0,0 +1,262 @@ +#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3 + +#include "Pagedata.h" +#include "OBP60Extensions.h" + +// these constants have to match the declaration below in : +// PageDescription registerPageCompass( +// {"COG","HDT", "HDM"}, // Bus values we need in the page +const int HowManyValues = 6; + +const int AverageValues = 4; + +const int ShowHDM = 0; +const int ShowHDT = 1; +const int ShowCOG = 2; +const int ShowSTW = 3; +const int ShowSOG = 4; +const int ShowDBS = 5; + +const int Compass_X0 = 200; // center point of compass band +const int Compass_Y0 = 220; // position of compass lines +const int Compass_LineLength = 22; // length of compass lines +const float Compass_LineDelta = 8.0; // compass band: 1deg = 5 Pixels, 10deg = 50 Pixels + +class PageCompass : public Page +{ + int WhichDataCompass = ShowHDM; + int WhichDataDisplay = ShowHDM; + + public: + PageCompass(CommonData &common){ + commonData = &common; + common.logger->logDebug(GwLog::LOG,"Instantiate PageCompass"); + } + + virtual void setupKeys(){ + Page::setupKeys(); + commonData->keydata[0].label = "CMP"; + commonData->keydata[1].label = "SRC"; + } + + virtual int handleKey(int key){ + // Code for keylock + + if ( key == 1 ) { + WhichDataCompass += 1; + if ( WhichDataCompass > ShowCOG) + WhichDataCompass = ShowHDM; + return 0; + } + if ( key == 2 ) { + WhichDataDisplay += 1; + if ( WhichDataDisplay > ShowDBS) + WhichDataDisplay = ShowHDM; + } + + if(key == 11){ + commonData->keylock = !commonData->keylock; + return 0; // Commit the key + } + return key; + } + + virtual void displayPage(PageData &pageData){ + GwConfigHandler *config = commonData->config; + GwLog *logger = commonData->logger; + + + // Old values for hold function + static String OldDataText[HowManyValues] = {"", "", "","", "", ""}; + static String OldDataUnits[HowManyValues] = {"", "", "","", "", ""}; + + // Get config data + String lengthformat = config->getString(config->lengthFormat); + // bool simulation = config->getBool(config->useSimuData); + bool holdvalues = config->getBool(config->holdvalues); + String flashLED = config->getString(config->flashLED); + String backlightMode = config->getString(config->backlight); + + GwApi::BoatValue *bvalue; + String DataName[HowManyValues]; + double DataValue[HowManyValues]; + bool DataValid[HowManyValues]; + String DataText[HowManyValues]; + String DataUnits[HowManyValues]; + String DataFormat[HowManyValues]; + FormatedData TheFormattedData; + + for (int i = 0; i < HowManyValues; i++){ + bvalue = pageData.values[i]; + TheFormattedData = formatValue(bvalue, *commonData); + DataName[i] = xdrDelete(bvalue->getName()); + DataName[i] = DataName[i].substring(0, 6); // String length limit for value name + DataUnits[i] = formatValue(bvalue, *commonData).unit; + DataText[i] = TheFormattedData.svalue; // Formatted value as string including unit conversion and switching decimal places + DataValue[i] = TheFormattedData.value; // Value as double in SI unit + DataValid[i] = bvalue->valid; + DataFormat[i] = bvalue->getFormat(); // Unit of value + LOG_DEBUG(GwLog::LOG,"Drawing at PageCompass: %d %s %f %s %s", i, DataName[i], DataValue[i], DataFormat[i], DataText[i] ); + } + + // Optical warning by limit violation (unused) + if(String(flashLED) == "Limit Violation"){ + setBlinkingLED(false); + setFlashLED(false); + } + + if (bvalue == NULL) return; + + //*********************************************************** + + // Set display in partial refresh mode + getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update + getdisplay().setTextColor(commonData->fgcolor); + + // Horizontal line 3 pix top & bottom + // print Data on top half + getdisplay().fillRect(0, 23, 400, 3, commonData->fgcolor); + getdisplay().setFont(&Ubuntu_Bold20pt7b); + getdisplay().setCursor(10, 70); + getdisplay().print(DataName[WhichDataDisplay]); // Page name + // Show unit + getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setCursor(10, 120); + getdisplay().print(DataUnits[WhichDataDisplay]); + getdisplay().setCursor(200, 120); + getdisplay().setFont(&DSEG7Classic_BoldItalic42pt7b); + + if(holdvalues == false){ + getdisplay().print(DataText[WhichDataDisplay]); // Real value as formated string + } + else{ + getdisplay().print(OldDataText[WhichDataDisplay]); // Old value as formated string + } + if(DataValid[WhichDataDisplay] == true){ + OldDataText[WhichDataDisplay] = DataText[WhichDataDisplay]; // Save the old value + OldDataUnits[WhichDataDisplay] = DataUnits[WhichDataDisplay]; // Save the old unit + } + // now draw compass band + // get the data + double TheAngle = DataValue[WhichDataCompass]; + static double AvgAngle = 0; + AvgAngle = ( AvgAngle * AverageValues + TheAngle ) / (AverageValues + 1 ); + + int TheTrend = round( ( TheAngle - AvgAngle) * 180.0 / M_PI ); + + static const int bsize = 30; + char buffer[bsize+1]; + buffer[0]=0; + + getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setCursor(10, Compass_Y0-60); + getdisplay().print(DataName[WhichDataCompass]); // Page name + + + // draw compass base line and pointer + getdisplay().fillRect(0, Compass_Y0, 400, 3, commonData->fgcolor); + getdisplay().fillTriangle(Compass_X0,Compass_Y0-40,Compass_X0-10,Compass_Y0-80,Compass_X0+10,Compass_Y0-80,commonData->fgcolor); +// draw trendlines + for ( int i = 1; i < abs(TheTrend) / 2; i++){ + int x1; + if ( TheTrend < 0 ) + x1 = Compass_X0 + 20 * i; + else + x1 = Compass_X0 - 20 * ( i + 1 ); + + getdisplay().fillRect(x1, Compass_Y0 -60, 10, 6, commonData->fgcolor); + } +// central line + satellite lines + double NextSector = round(TheAngle / ( M_PI / 9 )) * ( M_PI / 9 ); // get the next 20degree value + double Offset = - ( NextSector - TheAngle); // offest of the center line compared to TheAngle in Radian + + int Delta_X = int ( Offset * 180.0 / M_PI * Compass_LineDelta ); + for ( int i = 0; i <=4; i++ ) + { + int x0; + x0 = Compass_X0 + Delta_X + 2 * i * 5 * Compass_LineDelta; + getdisplay().fillRect(x0-1, Compass_Y0 - 2 * Compass_LineLength,3, 2 * Compass_LineLength, commonData->fgcolor); + x0 = Compass_X0 + Delta_X + ( 2 * i + 1 ) * 5 * Compass_LineDelta; + getdisplay().fillRect(x0-1, Compass_Y0 - Compass_LineLength,3, Compass_LineLength, commonData->fgcolor); + + x0 = Compass_X0 + Delta_X - 2 * i * 5 * Compass_LineDelta; + getdisplay().fillRect(x0-1, Compass_Y0 - 2 * Compass_LineLength,3, 2 * Compass_LineLength, commonData->fgcolor); + x0 = Compass_X0 + Delta_X - ( 2 * i + 1 ) * 5 * Compass_LineDelta; + getdisplay().fillRect(x0-1, Compass_Y0 - Compass_LineLength,3, Compass_LineLength, commonData->fgcolor); + } + + getdisplay().fillRect(0, Compass_Y0, 400, 3, commonData->fgcolor); + // add the numbers to the compass band + int x0; + float AngleToDisplay = NextSector * 180.0 / M_PI; + + x0 = Compass_X0 + Delta_X; + getdisplay().setFont(&DSEG7Classic_BoldItalic16pt7b); + + do { + getdisplay().setCursor(x0 - 40, Compass_Y0 + 40); + snprintf(buffer,bsize,"%03.0f", AngleToDisplay); + getdisplay().print(buffer); + AngleToDisplay += 20; + if ( AngleToDisplay >= 360.0 ) + AngleToDisplay -= 360.0; + x0 -= 4 * 5 * Compass_LineDelta; + } while ( x0 >= 0 - 60 ); + + AngleToDisplay = NextSector * 180.0 / M_PI - 20; + if ( AngleToDisplay < 0 ) + AngleToDisplay += 360.0; + + x0 = Compass_X0 + Delta_X + 4 * 5 * Compass_LineDelta; + do { + getdisplay().setCursor(x0 - 40, Compass_Y0 + 40); + snprintf(buffer,bsize,"%03.0f", AngleToDisplay); + // quick and dirty way to prevent wrapping text in next line + if ( ( x0 - 40 ) > 380 ) + buffer[0] = 0; + else if ( ( x0 - 40 ) > 355 ) + buffer[1] = 0; + else if ( ( x0 - 40 ) > 325 ) + buffer[2] = 0; + + getdisplay().print(buffer); + + AngleToDisplay -= 20; + if ( AngleToDisplay < 0 ) + AngleToDisplay += 360.0; + x0 += 4 * 5 * Compass_LineDelta; + } while (x0 < ( 400 - 20 -40 ) ); + + // static int x_test = 320; + // x_test += 2; + + // snprintf(buffer,bsize,"%03d", x_test); + // getdisplay().setCursor(x_test, Compass_Y0 - 60); + // getdisplay().print(buffer); + // if ( x_test > 390) + // x_test = 320; + + // Update display + getdisplay().nextPage(); // Partial update (fast) + + }; + + }; +static Page *createPage(CommonData &common){ + return new PageCompass(common); +}/** + * with the code below we make this page known to the PageTask + * we give it a type (name) that can be selected in the config + * we define which function is to be called + * and we provide the number of user parameters we expect + * this will be number of BoatValue pointers in pageData.values + */ +PageDescription registerPageCompass( + "Compass", // Page name + createPage, // Action + 0, // Number of bus values depends on selection in Web configuration + {"HDM","HDT", "COG", "STW", "SOG", "DBS"}, // Bus values we need in the page + true // Show display header on/off +); + +#endif diff --git a/lib/obp60task/config.json b/lib/obp60task/config.json index c1801af..6bd401a 100644 --- a/lib/obp60task/config.json +++ b/lib/obp60task/config.json @@ -686,189 +686,6 @@ "obp60":"true" } }, - { - "name": "calInstance1", - "label": "Calibration Data Instance 1", - "type": "list", - "default": "---", - "description": "Data instance for calibration", - "list": [ - "---", - "AWA", - "AWS", - "DBT", - "HDM", - "PRPOS", - "RPOS", - "STW", - "TWA", - "TWS", - "TWD", - "WTemp" - ], - "category": "OBP60 Calibrations", - "capabilities": { - "obp60":"true" - } - }, - { - "name": "calOffset1", - "label": "Data Instance 1 Calibration Offset", - "type": "number", - "default": "0.00", - "description": "Offset for data instance 1", - "category": "OBP60 Calibrations", - "capabilities": { - "obp60":"true" - } - }, - { - "name": "calSlope1", - "label": "Data Instance 1 Calibration Slope", - "type": "number", - "default": "1.00", - "description": "Slope for data instance 1", - "category": "OBP60 Calibrations", - "capabilities": { - "obp60":"true" - } - }, - { - "name": "calSmooth1", - "label": "Data Instance 1 Smoothing", - "type": "number", - "default": "0", - "check": "checkMinMax", - "min": 0, - "max": 10, - "description": "Smoothing factor for data instance 1", - "category": "OBP60 Calibrations", - "capabilities": { - "obp60":"true" - } - }, - { - "name": "calInstance2", - "label": "Calibration Data Instance 2", - "type": "list", - "default": "---", - "description": "Data instance for calibration", - "list": [ - "---", - "AWA", - "AWS", - "DBT", - "HDM", - "PRPOS", - "RPOS", - "STW", - "TWA", - "TWS", - "TWD", - "WTemp" - ], - "category": "OBP60 Calibrations", - "capabilities": { - "obp60":"true" - } - }, - { - "name": "calOffset2", - "label": "Data Instance 2 Calibration Offset", - "type": "number", - "default": "0.00", - "description": "Offset for data instance 2", - "category": "OBP60 Calibrations", - "capabilities": { - "obp60":"true" - } - }, - { - "name": "calSlope2", - "label": "Data Instance 2 Calibration Slope", - "type": "number", - "default": "1.00", - "description": "Slope for data instance 2", - "category": "OBP60 Calibrations", - "capabilities": { - "obp60":"true" - } - }, - { - "name": "calSmooth2", - "label": "Data Instance 2 Smoothing", - "type": "number", - "default": "0", - "check": "checkMinMax", - "min": 0, - "max": 10, - "description": "Smoothing factor for data instance 2", - "category": "OBP60 Calibrations", - "capabilities": { - "obp60":"true" - } - }, - { - "name": "calInstance3", - "label": "Calibration Data Instance 3", - "type": "list", - "default": "---", - "description": "Data instance for calibration", - "list": [ - "---", - "AWA", - "AWS", - "DBT", - "HDM", - "PRPOS", - "RPOS", - "STW", - "TWA", - "TWS", - "TWD", - "WTemp" - ], - "category": "OBP60 Calibrations", - "capabilities": { - "obp60":"true" - } - }, - { - "name": "calOffset3", - "label": "Data Instance 3 Calibration Offset", - "type": "number", - "default": "0.00", - "description": "Offset for data instance 3", - "category": "OBP60 Calibrations", - "capabilities": { - "obp60":"true" - } - }, - { - "name": "calSlope3", - "label": "Data Instance 3 Calibration Slope", - "type": "number", - "default": "1.00", - "description": "Slope for data instance 3", - "category": "OBP60 Calibrations", - "capabilities": { - "obp60":"true" - } - }, - { - "name": "calSmooth3", - "label": "Data Instance 3 Smoothing", - "type": "number", - "default": "0", - "check": "checkMinMax", - "min": 0, - "max": 10, - "description": "Smoothing factor for data instance 3", - "category": "OBP60 Calibrations", - "capabilities": { - "obp60":"true" - } - }, { "name": "display", "label": "Display Mode", @@ -1152,6 +969,7 @@ } }, + { "name": "page1type", "label": "Type", @@ -1163,6 +981,7 @@ "Battery", "Battery2", "Clock", + "Compass", "DST810", "Fluid", "FourValues", @@ -1442,6 +1261,7 @@ "Battery", "Battery2", "Clock", + "Compass", "DST810", "Fluid", "FourValues", @@ -1718,6 +1538,7 @@ "Battery", "Battery2", "Clock", + "Compass", "DST810", "Fluid", "FourValues", @@ -1991,6 +1812,7 @@ "Battery", "Battery2", "Clock", + "Compass", "DST810", "Fluid", "FourValues", @@ -2261,6 +2083,7 @@ "Battery", "Battery2", "Clock", + "Compass", "DST810", "Fluid", "FourValues", @@ -2528,6 +2351,7 @@ "Battery", "Battery2", "Clock", + "Compass", "DST810", "Fluid", "FourValues", @@ -2792,6 +2616,7 @@ "Battery", "Battery2", "Clock", + "Compass", "DST810", "Fluid", "FourValues", @@ -3053,6 +2878,7 @@ "Battery", "Battery2", "Clock", + "Compass", "DST810", "Fluid", "FourValues", @@ -3311,6 +3137,7 @@ "Battery", "Battery2", "Clock", + "Compass", "DST810", "Fluid", "FourValues", @@ -3566,6 +3393,7 @@ "Battery", "Battery2", "Clock", + "Compass", "DST810", "Fluid", "FourValues", diff --git a/lib/obp60task/gen_set.py b/lib/obp60task/gen_set.py index 69809fa..71485fa 100755 --- a/lib/obp60task/gen_set.py +++ b/lib/obp60task/gen_set.py @@ -15,6 +15,7 @@ no_of_fields_per_page = { "Battery": 0, "BME280": 0, "Clock": 0, + "Compass" : 0, "DST810": 0, "Fluid": 1, "FourValues2": 4, @@ -24,6 +25,7 @@ no_of_fields_per_page = { "OneValue": 1, "RollPitch": 2, "RudderPosition": 0, + "SixValues" : 6, "Solar": 0, "ThreeValues": 3, "TwoValues": 2, @@ -31,7 +33,6 @@ no_of_fields_per_page = { "WhitePage": 0, "WindRose": 0, "WindRoseFlex": 6, - "SixValues" : 6, } # No changes needed beyond this point From 4b5aa7ff4be24a80e7e629d69839ca5854c47df3 Mon Sep 17 00:00:00 2001 From: Manfred Radmacher <99966818+ManfredRad@users.noreply.github.com> Date: Thu, 5 Jun 2025 16:05:33 +0200 Subject: [PATCH 22/36] Pagecompass update obp60rtask.cpp updated to handle pagecompass --- obp60task.cpp | 853 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 853 insertions(+) create mode 100644 obp60task.cpp diff --git a/obp60task.cpp b/obp60task.cpp new file mode 100644 index 0000000..a364dc8 --- /dev/null +++ b/obp60task.cpp @@ -0,0 +1,853 @@ +#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3 +#include "obp60task.h" +#include "Pagedata.h" // Data exchange for pages +#include "OBP60Hardware.h" // PIN definitions +#include // I2C connections +#include // MCP23017 extension Port +#include // NMEA2000 +#include +#include // NMEA0183 +#include +#include +#include // GxEPD2 lib for b/w E-Ink displays +#include "OBP60Extensions.h" // Functions lib for extension board +#include "OBP60Keypad.h" // Functions for keypad + +#ifdef BOARD_OBP40S3 +#include "driver/rtc_io.h" // Needs for weakup from deep sleep +#include // SD-Card access +#include +#include +#endif + +// True type character sets includes +// See OBP60ExtensionPort.cpp + +// Pictures +//#include GxEPD_BitmapExamples // Example picture +#include "MFD_OBP60_400x300_sw.h" // MFD with logo +#include "Logo_OBP_400x300_sw.h" // OBP Logo +#include "images/unknown.xbm" // unknown page indicator +#include "OBP60QRWiFi.h" // Functions lib for WiFi QR code +#include "OBPSensorTask.h" // Functions lib for sensor data + + +// Global vars +bool initComplete = false; // Initialization complete +int taskRunCounter = 0; // Task couter for loop section + +// Hardware initialization before start all services +//#################################################################################### +void OBP60Init(GwApi *api){ + + GwLog *logger = api->getLogger(); + GwConfigHandler *config = api->getConfig(); + + // Set a new device name and hidden the original name in the main config + String devicename = api->getConfig()->getConfigItem(api->getConfig()->deviceName,true)->asString(); + api->getConfig()->setValue(GwConfigDefinitions::systemName, devicename, GwConfigInterface::ConfigType::HIDDEN); + + api->getLogger()->logDebug(GwLog::LOG,"obp60init running"); + + // Check I2C devices + + + // Init hardware + hardwareInit(api); + + // Init power rail 5.0V + String powermode = api->getConfig()->getConfigItem(api->getConfig()->powerMode,true)->asString(); + api->getLogger()->logDebug(GwLog::DEBUG,"Power Mode is: %s", powermode.c_str()); + if(powermode == "Max Power" || powermode == "Only 5.0V"){ + #ifdef HARDWARE_V21 + setPortPin(OBP_POWER_50, true); // Power on 5.0V rail + #endif + #ifdef BOARD_OBP40S3 + setPortPin(OBP_POWER_EPD, true);// Power on ePaper display + setPortPin(OBP_POWER_SD, true); // Power on SD card + #endif + } + else{ + #ifdef HARDWARE_V21 + setPortPin(OBP_POWER_50, false); // Power off 5.0V rail + #endif + #ifdef BOARD_OBP40S3 + setPortPin(OBP_POWER_EPD, false);// Power off ePaper display + setPortPin(OBP_POWER_SD, false); // Power off SD card + #endif + } + + #ifdef BOARD_OBP40S3 + String sdcard = config->getConfigItem(config->useSDCard, true)->asString(); + if (sdcard == "on") { + SPIClass SD_SPI = SPIClass(HSPI); + SD_SPI.begin(SD_SPI_CLK, SD_SPI_MISO, SD_SPI_MOSI); + if (SD.begin(SD_SPI_CS, SD_SPI, 80000000)) { + String sdtype = "unknown"; + uint8_t cardType = SD.cardType(); + switch (cardType) { + case CARD_MMC: + sdtype = "MMC"; + break; + case CARD_SD: + sdtype = "SDSC"; + break; + case CARD_SDHC: + sdtype = "SDHC"; + break; + } + uint64_t cardSize = SD.cardSize() / (1024 * 1024); + LOG_DEBUG(GwLog::LOG,"SD card type %s of size %d MB detected", sdtype, cardSize); + } + } + + // Deep sleep wakeup configuration + esp_sleep_enable_ext0_wakeup(OBP_WAKEWUP_PIN, 0); // 1 = High, 0 = Low + rtc_gpio_pullup_en(OBP_WAKEWUP_PIN); // Activate pullup resistor + rtc_gpio_pulldown_dis(OBP_WAKEWUP_PIN); // Disable pulldown resistor +#endif + + // Settings for e-paper display + String fastrefresh = api->getConfig()->getConfigItem(api->getConfig()->fastRefresh,true)->asString(); + api->getLogger()->logDebug(GwLog::DEBUG,"Fast Refresh Mode is: %s", fastrefresh.c_str()); + #ifdef DISPLAY_GDEY042T81 + if(fastrefresh == "true"){ + static const bool useFastFullUpdate = true; // Enable fast full display update only for GDEY042T81 + } + #endif + + #ifdef BOARD_OBP60S3 + touchSleepWakeUpEnable(TP1, 45); // TODO sensitivity should be configurable via web interface + touchSleepWakeUpEnable(TP2, 45); + touchSleepWakeUpEnable(TP3, 45); + touchSleepWakeUpEnable(TP4, 45); + touchSleepWakeUpEnable(TP5, 45); + touchSleepWakeUpEnable(TP6, 45); + esp_sleep_enable_touchpad_wakeup(); + #endif + + // Get CPU speed + int freq = getCpuFrequencyMhz(); + api->getLogger()->logDebug(GwLog::LOG,"CPU speed at boot: %i MHz", freq); + + // Settings for backlight + String backlightMode = api->getConfig()->getConfigItem(api->getConfig()->backlight,true)->asString(); + api->getLogger()->logDebug(GwLog::DEBUG,"Backlight Mode is: %s", backlightMode.c_str()); + uint brightness = uint(api->getConfig()->getConfigItem(api->getConfig()->blBrightness,true)->asInt()); + String backlightColor = api->getConfig()->getConfigItem(api->getConfig()->blColor,true)->asString(); + if(String(backlightMode) == "On"){ + setBacklightLED(brightness, colorMapping(backlightColor)); + } + else if(String(backlightMode) == "Off"){ + setBacklightLED(0, COLOR_BLACK); // Backlight LEDs off (blue without britghness) + } + else if(String(backlightMode) == "Control by Key"){ + setBacklightLED(0, COLOR_BLUE); // Backlight LEDs off (blue without britghness) + } + + // Settings flash LED mode + String ledMode = api->getConfig()->getConfigItem(api->getConfig()->flashLED,true)->asString(); + api->getLogger()->logDebug(GwLog::DEBUG,"LED Mode is: %s", ledMode.c_str()); + if(String(ledMode) == "Off"){ + setBlinkingLED(false); + } + + // Marker for init complete + // Used in OBP60Task() + initComplete = true; + + // Buzzer tone for initialization finish + setBuzzerPower(uint(api->getConfig()->getConfigItem(api->getConfig()->buzzerPower,true)->asInt())); + buzzer(TONE4, 500); + +} + +typedef struct { + int page0=0; + QueueHandle_t queue; + GwLog* logger = NULL; +// GwApi* api = NULL; + uint sensitivity = 100; + bool use_syspage = true; + } MyData; + +// Keyboard Task +void keyboardTask(void *param){ + MyData *data=(MyData *)param; + + int keycode = 0; + data->logger->logDebug(GwLog::LOG,"Start keyboard task"); + + // Loop for keyboard task + while (true){ + keycode = readKeypad(data->logger, data->sensitivity, data->use_syspage); + //send a key event + if(keycode != 0){ + xQueueSend(data->queue, &keycode, 0); + data->logger->logDebug(GwLog::LOG,"Send keycode: %d", keycode); + } + delay(20); // 50Hz update rate (20ms) + } + vTaskDelete(NULL); +} + +class BoatValueList{ + public: + static const int MAXVALUES=100; + //we create a list containing all our BoatValues + //this is the list we later use to let the api fill all the values + //additionally we put the necessary values into the paga data - see below + GwApi::BoatValue *allBoatValues[MAXVALUES]; + int numValues=0; + + bool addValueToList(GwApi::BoatValue *v){ + for (int i=0;i= MAXVALUES) return false; + allBoatValues[numValues]=v; + numValues++; + return true; + } + //helper to ensure that each BoatValue is only queried once + GwApi::BoatValue *findValueOrCreate(String name){ + for (int i=0;igetName() == name) { + return allBoatValues[i]; + } + } + GwApi::BoatValue *rt=new GwApi::BoatValue(name); + addValueToList(rt); + return rt; + } +}; + +//we want to have a list that has all our page definitions +//this way each page can easily be added here +//needs some minor tricks for the safe static initialization +typedef std::vector Pages; +//the page list class +class PageList{ + public: + Pages pages; + void add(PageDescription *p){ + pages.push_back(p); + } + PageDescription *find(String name){ + for (auto it=pages.begin();it != pages.end();it++){ + if ((*it)->pageName == name){ + return *it; + } + } + return NULL; + } +}; + +/** + * this function will add all the pages we know to the pagelist + * each page should have defined a registerXXXPage variable of type + * PageData that describes what it needs + */ +void registerAllPages(PageList &list){ + //the next line says that this variable is defined somewhere else + //in our case in a separate C++ source file + //this way this separate source file can be compiled by it's own + //and has no access to any of our data except the one that we + //give as a parameter to the page function + extern PageDescription registerPageSystem; + //we add the variable to our list + list.add(®isterPageSystem); + extern PageDescription registerPageOneValue; + list.add(®isterPageOneValue); + extern PageDescription registerPageTwoValues; + list.add(®isterPageTwoValues); + extern PageDescription registerPageThreeValues; + list.add(®isterPageThreeValues); + extern PageDescription registerPageSixValues; + list.add(®isterPageSixValues); + extern PageDescription registerPageFourValues; + list.add(®isterPageFourValues); + extern PageDescription registerPageFourValues2; + list.add(®isterPageFourValues2); + extern PageDescription registerPageWind; + list.add(®isterPageWind); + extern PageDescription registerPageWindRose; + list.add(®isterPageWindRose); + extern PageDescription registerPageWindRoseFlex; + list.add(®isterPageWindRoseFlex); // + extern PageDescription registerPageVoltage; + list.add(®isterPageVoltage); + extern PageDescription registerPageDST810; + list.add(®isterPageDST810); + extern PageDescription registerPageClock; + list.add(®isterPageClock); + extern PageDescription registerPageWhite; + list.add(®isterPageWhite); + extern PageDescription registerPageBME280; + list.add(®isterPageBME280); + extern PageDescription registerPageRudderPosition; + list.add(®isterPageRudderPosition); + extern PageDescription registerPageKeelPosition; + list.add(®isterPageKeelPosition); + extern PageDescription registerPageBattery; + list.add(®isterPageBattery); + extern PageDescription registerPageBattery2; + list.add(®isterPageBattery2); + extern PageDescription registerPageRollPitch; + list.add(®isterPageRollPitch); + extern PageDescription registerPageSolar; + list.add(®isterPageSolar); + extern PageDescription registerPageGenerator; + list.add(®isterPageGenerator); + extern PageDescription registerPageXTETrack; + list.add(®isterPageXTETrack); + extern PageDescription registerPageFluid; + list.add(®isterPageFluid); + extern PageDescription registerPageCompass; + list.add(®isterPageCompass); +} + +// Undervoltage detection for shutdown display +void underVoltageDetection(GwApi *api, CommonData &common){ + // Read settings + double voffset = (api->getConfig()->getConfigItem(api->getConfig()->vOffset,true)->asString()).toFloat(); + double vslope = (api->getConfig()->getConfigItem(api->getConfig()->vSlope,true)->asString()).toFloat(); + // Read supply voltage + #if defined VOLTAGE_SENSOR && defined LIPO_ACCU_1200 + float actVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.53) * 2; // Vin = 1/2 for OBP40 + float minVoltage = 3.65; // Absolut minimum volatge for 3,7V LiPo accu + #else + float actVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.17) * 20; // Vin = 1/20 for OBP60 + float minVoltage = MIN_VOLTAGE; + #endif + double calVoltage = actVoltage * vslope + voffset; // Calibration + if(calVoltage < minVoltage){ + #if defined VOLTAGE_SENSOR && defined LIPO_ACCU_1200 + // Switch off all power lines + setPortPin(OBP_BACKLIGHT_LED, false); // Backlight Off + setFlashLED(false); // Flash LED Off + buzzer(TONE4, 20); // Buzzer tone 4kHz 20ms + // Shutdown EInk display + getdisplay().setFullWindow(); // Set full Refresh + //getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update + getdisplay().fillScreen(common.bgcolor);// Clear screen + getdisplay().setTextColor(common.fgcolor); + getdisplay().setFont(&Ubuntu_Bold20pt7b); + getdisplay().setCursor(65, 150); + getdisplay().print("Undervoltage"); + getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setCursor(65, 175); + getdisplay().print("Charge battery and restart system"); + getdisplay().nextPage(); // Partial update + getdisplay().powerOff(); // Display power off + setPortPin(OBP_POWER_EPD, false); // Power off ePaper display + setPortPin(OBP_POWER_SD, false); // Power off SD card + #else + // Switch off all power lines + setPortPin(OBP_BACKLIGHT_LED, false); // Backlight Off + setFlashLED(false); // Flash LED Off + buzzer(TONE4, 20); // Buzzer tone 4kHz 20ms + setPortPin(OBP_POWER_50, false); // Power rail 5.0V Off + // Shutdown EInk display + getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update + getdisplay().fillScreen(common.bgcolor);// Clear screen + getdisplay().setTextColor(common.fgcolor); + getdisplay().setFont(&Ubuntu_Bold20pt7b); + getdisplay().setCursor(65, 150); + getdisplay().print("Undervoltage"); + getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setCursor(65, 175); + getdisplay().print("To wake up repower system"); + getdisplay().nextPage(); // Partial update + getdisplay().powerOff(); // Display power off + #endif + // Stop system + while(true){ + esp_deep_sleep_start(); // Deep Sleep without weakup. Weakup only after power cycle (restart). + } + } +} + +// OBP60 Task +//#################################################################################### +void OBP60Task(GwApi *api){ +// vTaskDelete(NULL); +// return; + GwLog *logger=api->getLogger(); + GwConfigHandler *config=api->getConfig(); +#ifdef HARDWARE_V21 + startLedTask(api); +#endif + PageList allPages; + registerAllPages(allPages); + CommonData commonData; + commonData.logger=logger; + commonData.config=config; + +#ifdef HARDWARE_V21 + // Keyboard coordinates for page footer + initKeys(commonData); +#endif + + tN2kMsg N2kMsg; + + LOG_DEBUG(GwLog::LOG,"obp60task started"); + for (auto it=allPages.pages.begin();it != allPages.pages.end();it++){ + LOG_DEBUG(GwLog::LOG,"found registered page %s",(*it)->pageName.c_str()); + } + + // Init E-Ink display + String displaymode = api->getConfig()->getConfigItem(api->getConfig()->display,true)->asString(); + String displaycolor = api->getConfig()->getConfigItem(api->getConfig()->displaycolor,true)->asString(); + if (displaycolor == "Normal") { + commonData.fgcolor = GxEPD_BLACK; + commonData.bgcolor = GxEPD_WHITE; + } + else{ + commonData.fgcolor = GxEPD_WHITE; + commonData.bgcolor = GxEPD_BLACK; + } + String systemname = api->getConfig()->getConfigItem(api->getConfig()->systemName,true)->asString(); + String wifipass = api->getConfig()->getConfigItem(api->getConfig()->apPassword,true)->asString(); + bool refreshmode = api->getConfig()->getConfigItem(api->getConfig()->refresh,true)->asBoolean(); + String fastrefresh = api->getConfig()->getConfigItem(api->getConfig()->fastRefresh,true)->asString(); + uint fullrefreshtime = uint(api->getConfig()->getConfigItem(api->getConfig()->fullRefreshTime,true)->asInt()); + #ifdef BOARD_OBP40S3 + bool syspage_enabled = config->getBool(config->systemPage); + #endif + + #ifdef DISPLAY_GDEY042T81 + getdisplay().init(115200, true, 2, false); // Use this for Waveshare boards with "clever" reset circuit, 2ms reset pulse + #else + getdisplay().init(115200); // Init for normal displays + #endif + + getdisplay().setRotation(0); // Set display orientation (horizontal) + getdisplay().setFullWindow(); // Set full Refresh + getdisplay().firstPage(); // set first page + getdisplay().fillScreen(commonData.bgcolor); + getdisplay().setTextColor(commonData.fgcolor); + getdisplay().nextPage(); // Full Refresh + getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update + getdisplay().fillScreen(commonData.bgcolor); + getdisplay().nextPage(); // Fast Refresh + getdisplay().nextPage(); // Fast Refresh + if(String(displaymode) == "Logo + QR Code" || String(displaymode) == "Logo"){ + getdisplay().fillScreen(commonData.bgcolor); + getdisplay().drawBitmap(0, 0, gImage_Logo_OBP_400x300_sw, getdisplay().width(), getdisplay().height(), commonData.fgcolor); // Draw start logo + getdisplay().nextPage(); // Fast Refresh + getdisplay().nextPage(); // Fast Refresh + delay(SHOW_TIME); // Logo show time + if(String(displaymode) == "Logo + QR Code"){ + getdisplay().fillScreen(commonData.bgcolor); + qrWiFi(systemname, wifipass, commonData.fgcolor, commonData.bgcolor); // Show QR code for WiFi connection + getdisplay().nextPage(); // Fast Refresh + getdisplay().nextPage(); // Fast Refresh + delay(SHOW_TIME); // QR code show time + } + getdisplay().fillScreen(commonData.bgcolor); + getdisplay().nextPage(); // Fast Refresh + getdisplay().nextPage(); // Fast Refresh + } + + // Init pages + int numPages=1; + PageStruct pages[MAX_PAGE_NUMBER]; + // Set start page + int pageNumber = int(api->getConfig()->getConfigItem(api->getConfig()->startPage,true)->asInt()) - 1; + + LOG_DEBUG(GwLog::LOG,"Checking wakeup..."); +#ifdef BOARD_OBP60S3 + if (esp_sleep_get_wakeup_cause() == ESP_SLEEP_WAKEUP_TOUCHPAD) { + LOG_DEBUG(GwLog::LOG,"Wake up by touch pad %d",esp_sleep_get_touchpad_wakeup_status()); + pageNumber = getLastPage(); + } else { + LOG_DEBUG(GwLog::LOG,"Other wakeup reason"); + } +#endif +#ifdef BOARD_OBP40S3 + if (esp_sleep_get_wakeup_cause() == ESP_SLEEP_WAKEUP_EXT0) { + LOG_DEBUG(GwLog::LOG,"Wake up by key"); + pageNumber = getLastPage(); + } else { + LOG_DEBUG(GwLog::LOG,"Other wakeup reason"); + } +#endif + LOG_DEBUG(GwLog::LOG,"...done"); + + int lastPage=pageNumber; + + BoatValueList boatValues; //all the boat values for the api query + //commonData.distanceformat=config->getString(xxx); + //add all necessary data to common data + + //fill the page data from config + numPages=config->getInt(config->visiblePages,1); + if (numPages < 1) numPages=1; + if (numPages >= MAX_PAGE_NUMBER) numPages=MAX_PAGE_NUMBER; + LOG_DEBUG(GwLog::LOG,"Number of pages %d",numPages); + String configPrefix="page"; + for (int i=0;i< numPages;i++){ + String prefix=configPrefix+String(i+1); //e.g. page1 + String configName=prefix+String("type"); + LOG_DEBUG(GwLog::DEBUG,"asking for page config %s",configName.c_str()); + String pageType=config->getString(configName,""); + PageDescription *description=allPages.find(pageType); + if (description == NULL){ + LOG_DEBUG(GwLog::ERROR,"page description for %s not found",pageType.c_str()); + continue; + } + pages[i].description=description; + pages[i].page=description->creator(commonData); + pages[i].parameters.pageName=pageType; + pages[i].parameters.pageNumber = i + 1; + LOG_DEBUG(GwLog::DEBUG,"found page %s for number %d",pageType.c_str(),i); + //fill in all the user defined parameters + for (int uid=0;uiduserParam;uid++){ + String cfgName=prefix+String("value")+String(uid+1); + GwApi::BoatValue *value=boatValues.findValueOrCreate(config->getString(cfgName,"")); + LOG_DEBUG(GwLog::DEBUG,"add user input cfg=%s,value=%s for page %d", + cfgName.c_str(), + value->getName().c_str(), + i + ); + pages[i].parameters.values.push_back(value); + } + //now add the predefined values + for (auto it=description->fixedParam.begin();it != description->fixedParam.end();it++){ + GwApi::BoatValue *value=boatValues.findValueOrCreate(*it); + LOG_DEBUG(GwLog::DEBUG,"added fixed value %s to page %d",value->getName().c_str(),i); + pages[i].parameters.values.push_back(value); + } + } + // add out of band system page (always available) + Page *syspage = allPages.pages[0]->creator(commonData); + + // Display screenshot handler for HTTP request + // http://192.168.15.1/api/user/OBP60Task/screenshot + api->registerRequestHandler("screenshot", [api, &pageNumber, pages](AsyncWebServerRequest *request) { + doImageRequest(api, &pageNumber, pages, request); + }); + + //now we have prepared the page data + //we start a separate task that will fetch our keys... + MyData allParameters; + allParameters.logger=api->getLogger(); + allParameters.page0=3; + allParameters.queue=xQueueCreate(10,sizeof(int)); + allParameters.sensitivity= api->getConfig()->getInt(GwConfigDefinitions::tSensitivity); + #ifdef BOARD_OBP40S3 + allParameters.use_syspage = syspage_enabled; + #endif + xTaskCreate(keyboardTask,"keyboard",2000,&allParameters,configMAX_PRIORITIES-1,NULL); + SharedData *shared=new SharedData(api); + createSensorTask(shared); + + // Task Loop + //#################################################################################### + + // Configuration values for main loop + String gpsFix = api->getConfig()->getConfigItem(api->getConfig()->flashLED,true)->asString(); + String gpsOn=api->getConfig()->getConfigItem(api->getConfig()->useGPS,true)->asString(); + float tz = api->getConfig()->getConfigItem(api->getConfig()->timeZone,true)->asFloat(); + + commonData.backlight.mode = backlightMapping(config->getConfigItem(config->backlight,true)->asString()); + commonData.backlight.color = colorMapping(config->getConfigItem(config->blColor,true)->asString()); + commonData.backlight.brightness = 2.55 * uint(config->getConfigItem(config->blBrightness,true)->asInt()); + commonData.powermode = api->getConfig()->getConfigItem(api->getConfig()->powerMode,true)->asString(); + + bool uvoltage = api->getConfig()->getConfigItem(api->getConfig()->underVoltage,true)->asBoolean(); + String cpuspeed = api->getConfig()->getConfigItem(api->getConfig()->cpuSpeed,true)->asString(); + uint hdopAccuracy = uint(api->getConfig()->getConfigItem(api->getConfig()->hdopAccuracy,true)->asInt()); + + double homelat = commonData.config->getString(commonData.config->homeLAT).toDouble(); + double homelon = commonData.config->getString(commonData.config->homeLON).toDouble(); + bool homevalid = homelat >= -180.0 and homelat <= 180 and homelon >= -90.0 and homelon <= 90.0; + if (homevalid) { + LOG_DEBUG(GwLog::LOG, "Home location set to %f : %f", homelat, homelon); + } else { + LOG_DEBUG(GwLog::LOG, "No valid home location found"); + } + + // refreshmode defined in init section + + // Boat values for main loop + GwApi::BoatValue *date = boatValues.findValueOrCreate("GPSD"); // Load GpsDate + GwApi::BoatValue *time = boatValues.findValueOrCreate("GPST"); // Load GpsTime + GwApi::BoatValue *lat = boatValues.findValueOrCreate("LAT"); // Load GpsLatitude + GwApi::BoatValue *lon = boatValues.findValueOrCreate("LON"); // Load GpsLongitude + GwApi::BoatValue *hdop = boatValues.findValueOrCreate("HDOP"); // Load GpsHDOP + + LOG_DEBUG(GwLog::LOG,"obp60task: start mainloop"); + + commonData.time = boatValues.findValueOrCreate("GPST"); // Load GpsTime + commonData.date = boatValues.findValueOrCreate("GPSD"); // Load GpsTime + bool delayedDisplayUpdate = false; // If select a new pages then make a delayed full display update + bool cpuspeedsetted = false; // Marker for change CPU speed + long firststart = millis(); // First start + long starttime0 = millis(); // Mainloop + long starttime1 = millis(); // Full display refresh for the first 5 min (more often as normal) + long starttime2 = millis(); // Full display refresh after 5 min + long starttime3 = millis(); // Display update all 1s + long starttime4 = millis(); // Delayed display update after 4s when select a new page + long starttime5 = millis(); // Calculate sunrise and sunset all 1s + + pages[pageNumber].page->setupKeys(); // Initialize keys for first page + + // Main loop runs with 100ms + //#################################################################################### + + bool systemPage = false; + Page *currentPage; + while (true){ + delay(100); // Delay 100ms (loop time) + bool keypressed = false; + + // Undervoltage detection + if(uvoltage == true){ + underVoltageDetection(api, commonData); + } + + // Set CPU speed after boot after 1min + if(millis() > firststart + (1 * 60 * 1000) && cpuspeedsetted == false){ + if(String(cpuspeed) == "80"){ + setCpuFrequencyMhz(80); + } + if(String(cpuspeed) == "160"){ + setCpuFrequencyMhz(160); + } + if(String(cpuspeed) == "240"){ + setCpuFrequencyMhz(240); + } + int freq = getCpuFrequencyMhz(); + api->getLogger()->logDebug(GwLog::LOG,"CPU speed: %i MHz", freq); + cpuspeedsetted = true; + } + + if(millis() > starttime0 + 100){ + starttime0 = millis(); + commonData.data=shared->getSensorData(); + commonData.data.actpage = pageNumber + 1; + commonData.data.maxpage = numPages; + + // If GPS fix then LED off (HDOP) + if(String(gpsFix) == "GPS Fix Lost" && hdop->value <= hdopAccuracy && hdop->valid == true){ + setFlashLED(false); + } + // If missing GPS fix then LED on + if((String(gpsFix) == "GPS Fix Lost" && hdop->value > hdopAccuracy && hdop->valid == true) || (String(gpsFix) == "GPS Fix Lost" && hdop->valid == false)){ + setFlashLED(true); + } + + // Check the keyboard message + int keyboardMessage=0; + while (xQueueReceive(allParameters.queue,&keyboardMessage,0)){ + LOG_DEBUG(GwLog::LOG,"new key from keyboard %d",keyboardMessage); + keypressed = true; + + if (keyboardMessage == 12 and !systemPage) { + LOG_DEBUG(GwLog::LOG, "Calling system page"); + systemPage = true; // System page is out of band + syspage->setupKeys(); + keyboardMessage = 0; + } + else { + currentPage = pages[pageNumber].page; + if (systemPage && keyboardMessage == 1) { + // exit system mode with exit key number 1 + systemPage = false; + currentPage->setupKeys(); + keyboardMessage = 0; + } + } + if (systemPage) { + keyboardMessage = syspage->handleKey(keyboardMessage); + } else if (currentPage) { + keyboardMessage = currentPage->handleKey(keyboardMessage); + } + if (keyboardMessage > 0) // not handled by page + { + // Decoding all key codes + // #6 Backlight on if key controled + if (commonData.backlight.mode == BacklightMode::KEY) { + // if(String(backlight) == "Control by Key"){ + if(keyboardMessage == 6){ + LOG_DEBUG(GwLog::LOG,"Toggle Backlight LED"); + toggleBacklightLED(commonData.backlight.brightness, commonData.backlight.color); + } + } + #ifdef BOARD_OBP40S3 + // #3 Deep sleep mode for OBP40 + if ((keyboardMessage == 3) and !syspage_enabled){ + deepSleep(commonData); + } + #endif + // #9 Swipe right or #4 key right + if ((keyboardMessage == 9) or (keyboardMessage == 4)) + { + pageNumber++; + if (pageNumber >= numPages){ + pageNumber = 0; + } + commonData.data.actpage = pageNumber + 1; + commonData.data.maxpage = numPages; + } + // #10 Swipe left or #3 key left + if ((keyboardMessage == 10) or (keyboardMessage == 3)) + { + pageNumber--; + if (pageNumber < 0){ + pageNumber = numPages - 1; + } + commonData.data.actpage = pageNumber + 1; + commonData.data.maxpage = numPages; + } + + // #9 or #10 Refresh display after a new page after 4s waiting time and if refresh is disabled + if(refreshmode == true && (keyboardMessage == 9 || keyboardMessage == 10)){ + starttime4 = millis(); + starttime2 = millis(); // Reset the timer for full display update + delayedDisplayUpdate = true; + } + } + LOG_DEBUG(GwLog::LOG,"set pagenumber to %d",pageNumber); + } + + // Calculate sunrise, sunset and backlight control with sun status all 1s + if(millis() > starttime5 + 1000){ + starttime5 = millis(); + if(time->valid == true && date->valid == true && lat->valid == true && lon->valid == true){ + // Provide sundata to all pages + commonData.sundata = calcSunsetSunrise(time->value , date->value, lat->value, lon->value, tz); + // Backlight with sun control + if (commonData.backlight.mode == BacklightMode::SUN) { + // if(String(backlight) == "Control by Sun"){ + if(commonData.sundata.sunDown == true){ + setBacklightLED(commonData.backlight.brightness, commonData.backlight.color); + } + else{ + setBacklightLED(0, COLOR_BLUE); // Backlight LEDs off (blue without britghness) + } + } + } else if (homevalid and commonData.data.rtcValid) { + // No gps fix but valid home location and time configured + commonData.sundata = calcSunsetSunriseRTC(&commonData.data.rtcTime, homelat, homelon, tz); + } + } + + // Full display update afer a new selected page and 4s wait time + if(millis() > starttime4 + 4000 && delayedDisplayUpdate == true){ + starttime1 = millis(); + starttime2 = millis(); + getdisplay().setFullWindow(); // Set full update + getdisplay().nextPage(); + if(fastrefresh == "false"){ + getdisplay().fillScreen(commonData.fgcolor); // Clear display + getdisplay().nextPage(); // Full update + getdisplay().fillScreen(commonData.bgcolor); // Clear display + getdisplay().nextPage(); // Full update + } + delayedDisplayUpdate = false; + } + + // Subtask E-Ink full refresh all 1 min for the first 5 min after power on or restart + // This needs for a better display contrast after power on in cold or warm environments + if(millis() < firststart + (5 * 60 * 1000) && millis() > starttime1 + (60 * 1000)){ + starttime1 = millis(); + starttime2 = millis(); + LOG_DEBUG(GwLog::DEBUG,"E-Ink full refresh first 5 min"); + getdisplay().setFullWindow(); // Set full update + getdisplay().nextPage(); + if(fastrefresh == "false"){ + getdisplay().fillScreen(commonData.fgcolor); // Clear display + getdisplay().nextPage(); // Full update + getdisplay().fillScreen(commonData.bgcolor); // Clear display + getdisplay().nextPage(); // Full update + } + } + + // Subtask E-Ink full refresh + if(millis() > starttime2 + fullrefreshtime * 60 * 1000){ + starttime2 = millis(); + LOG_DEBUG(GwLog::DEBUG,"E-Ink full refresh"); + getdisplay().setFullWindow(); // Set full update + getdisplay().nextPage(); + if(fastrefresh == "false"){ + getdisplay().fillScreen(commonData.fgcolor); // Clear display + getdisplay().nextPage(); // Full update + getdisplay().fillScreen(commonData.bgcolor); // Clear display + getdisplay().nextPage(); // Full update + } + } + + // Refresh display data, default all 1s + currentPage = pages[pageNumber].page; + int pagetime = 1000; + if ((lastPage == pageNumber) and (!keypressed)) { + // same page we use page defined time + pagetime = currentPage->refreshtime; + } + if(millis() > starttime3 + pagetime){ + LOG_DEBUG(GwLog::DEBUG,"Page with refreshtime=%d", pagetime); + starttime3 = millis(); + + //refresh data from api + api->getBoatDataValues(boatValues.numValues,boatValues.allBoatValues); + api->getStatus(commonData.status); + + // Clear display + // getdisplay().fillRect(0, 0, getdisplay().width(), getdisplay().height(), commonData.bgcolor); + getdisplay().fillScreen(commonData.bgcolor); // Clear display + + // Show header if enabled + if (pages[pageNumber].description && pages[pageNumber].description->header or systemPage){ + // build header using commonData + displayHeader(commonData, date, time, hdop); // Show page header + } + + // Call the particular page + if (systemPage) { + displayFooter(commonData); + PageData sysparams; // empty + syspage->displayPage(sysparams); + } + else { + if (currentPage == NULL){ + LOG_DEBUG(GwLog::ERROR,"page number %d not found", pageNumber); + // Error handling for missing page + getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update + getdisplay().fillScreen(commonData.bgcolor); // Clear display + getdisplay().drawXBitmap(200 - unknown_width / 2, 150 - unknown_height / 2, unknown_bits, unknown_width, unknown_height, commonData.fgcolor); + getdisplay().setCursor(140, 250); + getdisplay().setFont(&Atari16px); + getdisplay().print("Here be dragons!"); + getdisplay().nextPage(); // Partial update (fast) + } + else{ + if (lastPage != pageNumber){ + if (hasFRAM) fram.write(FRAM_PAGE_NO, pageNumber); // remember page for device restart + currentPage->setupKeys(); + currentPage->displayNew(pages[pageNumber].parameters); + lastPage=pageNumber; + } + //call the page code + LOG_DEBUG(GwLog::DEBUG,"calling page %d",pageNumber); + // Show footer if enabled (together with header) + if (pages[pageNumber].description && pages[pageNumber].description->header){ + displayFooter(commonData); + } + currentPage->displayPage(pages[pageNumber].parameters); + } + + } + } // refresh display all 1s + } + } + vTaskDelete(NULL); + +} + +#endif From c7eafbf9b84010ca35f8d96baa01ba610755efa5 Mon Sep 17 00:00:00 2001 From: Thomas Hooge Date: Thu, 12 Jun 2025 11:43:21 +0200 Subject: [PATCH 23/36] Apply new OBP60 settings also to the OBP40 --- lib/obp60task/config_obp40.json | 434 +++++++++++++++++++++++++++++--- 1 file changed, 403 insertions(+), 31 deletions(-) diff --git a/lib/obp60task/config_obp40.json b/lib/obp60task/config_obp40.json index e24e9e9..2c8b0f3 100644 --- a/lib/obp60task/config_obp40.json +++ b/lib/obp60task/config_obp40.json @@ -701,6 +701,189 @@ "obp40": "true" } }, + { + "name": "calInstance1", + "label": "Calibration Data Instance 1", + "type": "list", + "default": "---", + "description": "Data instance for calibration", + "list": [ + "---", + "AWA", + "AWS", + "DBT", + "HDM", + "PRPOS", + "RPOS", + "STW", + "TWA", + "TWS", + "TWD", + "WTemp" + ], + "category": "OBP40 Calibrations", + "capabilities": { + "obp40": "true" + } + }, + { + "name": "calOffset1", + "label": "Data Instance 1 Calibration Offset", + "type": "number", + "default": "0.00", + "description": "Offset for data instance 1", + "category": "OBP40 Calibrations", + "capabilities": { + "obp40": "true" + } + }, + { + "name": "calSlope1", + "label": "Data Instance 1 Calibration Slope", + "type": "number", + "default": "1.00", + "description": "Slope for data instance 1", + "category": "OBP40 Calibrations", + "capabilities": { + "obp40": "true" + } + }, + { + "name": "calSmooth1", + "label": "Data Instance 1 Smoothing", + "type": "number", + "default": "0", + "check": "checkMinMax", + "min": 0, + "max": 10, + "description": "Smoothing factor for data instance 1", + "category": "OBP40 Calibrations", + "capabilities": { + "obp40": "true" + } + }, + { + "name": "calInstance2", + "label": "Calibration Data Instance 2", + "type": "list", + "default": "---", + "description": "Data instance for calibration", + "list": [ + "---", + "AWA", + "AWS", + "DBT", + "HDM", + "PRPOS", + "RPOS", + "STW", + "TWA", + "TWS", + "TWD", + "WTemp" + ], + "category": "OBP40 Calibrations", + "capabilities": { + "obp40": "true" + } + }, + { + "name": "calOffset2", + "label": "Data Instance 2 Calibration Offset", + "type": "number", + "default": "0.00", + "description": "Offset for data instance 2", + "category": "OBP40 Calibrations", + "capabilities": { + "obp40": "true" + } + }, + { + "name": "calSlope2", + "label": "Data Instance 2 Calibration Slope", + "type": "number", + "default": "1.00", + "description": "Slope for data instance 2", + "category": "OBP40 Calibrations", + "capabilities": { + "obp40": "true" + } + }, + { + "name": "calSmooth2", + "label": "Data Instance 2 Smoothing", + "type": "number", + "default": "0", + "check": "checkMinMax", + "min": 0, + "max": 10, + "description": "Smoothing factor for data instance 2", + "category": "OBP40 Calibrations", + "capabilities": { + "obp40": "true" + } + }, + { + "name": "calInstance3", + "label": "Calibration Data Instance 3", + "type": "list", + "default": "---", + "description": "Data instance for calibration", + "list": [ + "---", + "AWA", + "AWS", + "DBT", + "HDM", + "PRPOS", + "RPOS", + "STW", + "TWA", + "TWS", + "TWD", + "WTemp" + ], + "category": "OBP40 Calibrations", + "capabilities": { + "obp40": "true" + } + }, + { + "name": "calOffset3", + "label": "Data Instance 3 Calibration Offset", + "type": "number", + "default": "0.00", + "description": "Offset for data instance 3", + "category": "OBP40 Calibrations", + "capabilities": { + "obp40": "true" + } + }, + { + "name": "calSlope3", + "label": "Data Instance 3 Calibration Slope", + "type": "number", + "default": "1.00", + "description": "Slope for data instance 3", + "category": "OBP40 Calibrations", + "capabilities": { + "obp40": "true" + } + }, + { + "name": "calSmooth3", + "label": "Data Instance 3 Smoothing", + "type": "number", + "default": "0", + "check": "checkMinMax", + "min": 0, + "max": 10, + "description": "Smoothing factor for data instance 3", + "category": "OBP40 Calibrations", + "capabilities": { + "obp40": "true" + } + }, { "name": "display", "label": "Display Mode", @@ -1015,6 +1198,7 @@ "OneValue", "RollPitch", "RudderPosition", + "SixValues", "Solar", "ThreeValues", "TwoValues", @@ -1073,6 +1257,9 @@ "obp40": "true" }, "condition": [ + { + "page1type": "Fluid" + }, { "page1type": "FourValues" }, @@ -1085,6 +1272,9 @@ { "page1type": "RollPitch" }, + { + "page1type": "SixValues" + }, { "page1type": "ThreeValues" }, @@ -1093,9 +1283,6 @@ }, { "page1type": "WindRoseFlex" - }, - { - "page1type": "Fluid" } ] }, @@ -1119,6 +1306,9 @@ { "page1type": "RollPitch" }, + { + "page1type": "SixValues" + }, { "page1type": "ThreeValues" }, @@ -1147,6 +1337,9 @@ { "page1type": "FourValues2" }, + { + "page1type": "SixValues" + }, { "page1type": "ThreeValues" }, @@ -1172,6 +1365,9 @@ { "page1type": "FourValues2" }, + { + "page1type": "SixValues" + }, { "page1type": "WindRoseFlex" } @@ -1188,6 +1384,9 @@ "obp40": "true" }, "condition": [ + { + "page1type": "SixValues" + }, { "page1type": "WindRoseFlex" } @@ -1204,6 +1403,9 @@ "obp40": "true" }, "condition": [ + { + "page1type": "SixValues" + }, { "page1type": "WindRoseFlex" } @@ -1275,6 +1477,7 @@ "OneValue", "RollPitch", "RudderPosition", + "SixValues", "Solar", "ThreeValues", "TwoValues", @@ -1330,6 +1533,9 @@ "obp40": "true" }, "condition": [ + { + "page2type": "Fluid" + }, { "page2type": "FourValues" }, @@ -1342,6 +1548,9 @@ { "page2type": "RollPitch" }, + { + "page2type": "SixValues" + }, { "page2type": "ThreeValues" }, @@ -1350,11 +1559,7 @@ }, { "page2type": "WindRoseFlex" - }, - { - "page2type": "Fluid" } - ] }, { @@ -1377,6 +1582,9 @@ { "page2type": "RollPitch" }, + { + "page2type": "SixValues" + }, { "page2type": "ThreeValues" }, @@ -1405,6 +1613,9 @@ { "page2type": "FourValues2" }, + { + "page2type": "SixValues" + }, { "page2type": "ThreeValues" }, @@ -1430,6 +1641,9 @@ { "page2type": "FourValues2" }, + { + "page2type": "SixValues" + }, { "page2type": "WindRoseFlex" } @@ -1446,6 +1660,9 @@ "obp40": "true" }, "condition": [ + { + "page2type": "SixValues" + }, { "page2type": "WindRoseFlex" } @@ -1462,6 +1679,9 @@ "obp40": "true" }, "condition": [ + { + "page2type": "SixValues" + }, { "page2type": "WindRoseFlex" } @@ -1533,6 +1753,7 @@ "OneValue", "RollPitch", "RudderPosition", + "SixValues", "Solar", "ThreeValues", "TwoValues", @@ -1585,6 +1806,9 @@ "obp40": "true" }, "condition": [ + { + "page3type": "Fluid" + }, { "page3type": "FourValues" }, @@ -1597,6 +1821,9 @@ { "page3type": "RollPitch" }, + { + "page3type": "SixValues" + }, { "page3type": "ThreeValues" }, @@ -1605,9 +1832,6 @@ }, { "page3type": "WindRoseFlex" - }, - { - "page3type": "Fluid" } ] }, @@ -1631,6 +1855,9 @@ { "page3type": "RollPitch" }, + { + "page3type": "SixValues" + }, { "page3type": "ThreeValues" }, @@ -1659,6 +1886,9 @@ { "page3type": "FourValues2" }, + { + "page3type": "SixValues" + }, { "page3type": "ThreeValues" }, @@ -1684,6 +1914,9 @@ { "page3type": "FourValues2" }, + { + "page3type": "SixValues" + }, { "page3type": "WindRoseFlex" } @@ -1700,6 +1933,9 @@ "obp40": "true" }, "condition": [ + { + "page3type": "SixValues" + }, { "page3type": "WindRoseFlex" } @@ -1716,6 +1952,9 @@ "obp40": "true" }, "condition": [ + { + "page3type": "SixValues" + }, { "page3type": "WindRoseFlex" } @@ -1787,6 +2026,7 @@ "OneValue", "RollPitch", "RudderPosition", + "SixValues", "Solar", "ThreeValues", "TwoValues", @@ -1836,6 +2076,9 @@ "obp40": "true" }, "condition": [ + { + "page4type": "Fluid" + }, { "page4type": "FourValues" }, @@ -1848,6 +2091,9 @@ { "page4type": "RollPitch" }, + { + "page4type": "SixValues" + }, { "page4type": "ThreeValues" }, @@ -1856,9 +2102,6 @@ }, { "page4type": "WindRoseFlex" - }, - { - "page4type": "Fluid" } ] }, @@ -1882,6 +2125,9 @@ { "page4type": "RollPitch" }, + { + "page4type": "SixValues" + }, { "page4type": "ThreeValues" }, @@ -1910,6 +2156,9 @@ { "page4type": "FourValues2" }, + { + "page4type": "SixValues" + }, { "page4type": "ThreeValues" }, @@ -1935,6 +2184,9 @@ { "page4type": "FourValues2" }, + { + "page4type": "SixValues" + }, { "page4type": "WindRoseFlex" } @@ -1951,6 +2203,9 @@ "obp40": "true" }, "condition": [ + { + "page4type": "SixValues" + }, { "page4type": "WindRoseFlex" } @@ -1967,6 +2222,9 @@ "obp40": "true" }, "condition": [ + { + "page4type": "SixValues" + }, { "page4type": "WindRoseFlex" } @@ -2038,6 +2296,7 @@ "OneValue", "RollPitch", "RudderPosition", + "SixValues", "Solar", "ThreeValues", "TwoValues", @@ -2084,6 +2343,9 @@ "obp40": "true" }, "condition": [ + { + "page5type": "Fluid" + }, { "page5type": "FourValues" }, @@ -2096,6 +2358,9 @@ { "page5type": "RollPitch" }, + { + "page5type": "SixValues" + }, { "page5type": "ThreeValues" }, @@ -2104,9 +2369,6 @@ }, { "page5type": "WindRoseFlex" - }, - { - "page5type": "Fluid" } ] }, @@ -2130,6 +2392,9 @@ { "page5type": "RollPitch" }, + { + "page5type": "SixValues" + }, { "page5type": "ThreeValues" }, @@ -2158,6 +2423,9 @@ { "page5type": "FourValues2" }, + { + "page5type": "SixValues" + }, { "page5type": "ThreeValues" }, @@ -2183,6 +2451,9 @@ { "page5type": "FourValues2" }, + { + "page5type": "SixValues" + }, { "page5type": "WindRoseFlex" } @@ -2199,6 +2470,9 @@ "obp40": "true" }, "condition": [ + { + "page5type": "SixValues" + }, { "page5type": "WindRoseFlex" } @@ -2215,6 +2489,9 @@ "obp40": "true" }, "condition": [ + { + "page5type": "SixValues" + }, { "page5type": "WindRoseFlex" } @@ -2286,6 +2563,7 @@ "OneValue", "RollPitch", "RudderPosition", + "SixValues", "Solar", "ThreeValues", "TwoValues", @@ -2329,6 +2607,9 @@ "obp40": "true" }, "condition": [ + { + "page6type": "Fluid" + }, { "page6type": "FourValues" }, @@ -2341,6 +2622,9 @@ { "page6type": "RollPitch" }, + { + "page6type": "SixValues" + }, { "page6type": "ThreeValues" }, @@ -2349,9 +2633,6 @@ }, { "page6type": "WindRoseFlex" - }, - { - "page6type": "Fluid" } ] }, @@ -2375,6 +2656,9 @@ { "page6type": "RollPitch" }, + { + "page6type": "SixValues" + }, { "page6type": "ThreeValues" }, @@ -2403,6 +2687,9 @@ { "page6type": "FourValues2" }, + { + "page6type": "SixValues" + }, { "page6type": "ThreeValues" }, @@ -2428,6 +2715,9 @@ { "page6type": "FourValues2" }, + { + "page6type": "SixValues" + }, { "page6type": "WindRoseFlex" } @@ -2444,6 +2734,9 @@ "obp40": "true" }, "condition": [ + { + "page6type": "SixValues" + }, { "page6type": "WindRoseFlex" } @@ -2460,6 +2753,9 @@ "obp40": "true" }, "condition": [ + { + "page6type": "SixValues" + }, { "page6type": "WindRoseFlex" } @@ -2531,6 +2827,7 @@ "OneValue", "RollPitch", "RudderPosition", + "SixValues", "Solar", "ThreeValues", "TwoValues", @@ -2571,6 +2868,9 @@ "obp40": "true" }, "condition": [ + { + "page7type": "Fluid" + }, { "page7type": "FourValues" }, @@ -2583,6 +2883,9 @@ { "page7type": "RollPitch" }, + { + "page7type": "SixValues" + }, { "page7type": "ThreeValues" }, @@ -2591,9 +2894,6 @@ }, { "page7type": "WindRoseFlex" - }, - { - "page7type": "Fluid" } ] }, @@ -2617,6 +2917,9 @@ { "page7type": "RollPitch" }, + { + "page7type": "SixValues" + }, { "page7type": "ThreeValues" }, @@ -2645,6 +2948,9 @@ { "page7type": "FourValues2" }, + { + "page7type": "SixValues" + }, { "page7type": "ThreeValues" }, @@ -2670,6 +2976,9 @@ { "page7type": "FourValues2" }, + { + "page7type": "SixValues" + }, { "page7type": "WindRoseFlex" } @@ -2686,6 +2995,9 @@ "obp40": "true" }, "condition": [ + { + "page7type": "SixValues" + }, { "page7type": "WindRoseFlex" } @@ -2702,6 +3014,9 @@ "obp40": "true" }, "condition": [ + { + "page7type": "SixValues" + }, { "page7type": "WindRoseFlex" } @@ -2773,6 +3088,7 @@ "OneValue", "RollPitch", "RudderPosition", + "SixValues", "Solar", "ThreeValues", "TwoValues", @@ -2810,6 +3126,9 @@ "obp40": "true" }, "condition": [ + { + "page8type": "Fluid" + }, { "page8type": "FourValues" }, @@ -2822,6 +3141,9 @@ { "page8type": "RollPitch" }, + { + "page8type": "SixValues" + }, { "page8type": "ThreeValues" }, @@ -2830,9 +3152,6 @@ }, { "page8type": "WindRoseFlex" - }, - { - "page8type": "Fluid" } ] }, @@ -2856,6 +3175,9 @@ { "page8type": "RollPitch" }, + { + "page8type": "SixValues" + }, { "page8type": "ThreeValues" }, @@ -2884,6 +3206,9 @@ { "page8type": "FourValues2" }, + { + "page8type": "SixValues" + }, { "page8type": "ThreeValues" }, @@ -2909,6 +3234,9 @@ { "page8type": "FourValues2" }, + { + "page8type": "SixValues" + }, { "page8type": "WindRoseFlex" } @@ -2925,6 +3253,9 @@ "obp40": "true" }, "condition": [ + { + "page8type": "SixValues" + }, { "page8type": "WindRoseFlex" } @@ -2941,6 +3272,9 @@ "obp40": "true" }, "condition": [ + { + "page8type": "SixValues" + }, { "page8type": "WindRoseFlex" } @@ -3012,6 +3346,7 @@ "OneValue", "RollPitch", "RudderPosition", + "SixValues", "Solar", "ThreeValues", "TwoValues", @@ -3046,6 +3381,9 @@ "obp40": "true" }, "condition": [ + { + "page9type": "Fluid" + }, { "page9type": "FourValues" }, @@ -3058,6 +3396,9 @@ { "page9type": "RollPitch" }, + { + "page9type": "SixValues" + }, { "page9type": "ThreeValues" }, @@ -3066,9 +3407,6 @@ }, { "page9type": "WindRoseFlex" - }, - { - "page9type": "Fluid" } ] }, @@ -3092,6 +3430,9 @@ { "page9type": "RollPitch" }, + { + "page9type": "SixValues" + }, { "page9type": "ThreeValues" }, @@ -3120,6 +3461,9 @@ { "page9type": "FourValues2" }, + { + "page9type": "SixValues" + }, { "page9type": "ThreeValues" }, @@ -3145,6 +3489,9 @@ { "page9type": "FourValues2" }, + { + "page9type": "SixValues" + }, { "page9type": "WindRoseFlex" } @@ -3161,6 +3508,9 @@ "obp40": "true" }, "condition": [ + { + "page9type": "SixValues" + }, { "page9type": "WindRoseFlex" } @@ -3177,6 +3527,9 @@ "obp40": "true" }, "condition": [ + { + "page9type": "SixValues" + }, { "page9type": "WindRoseFlex" } @@ -3248,6 +3601,7 @@ "OneValue", "RollPitch", "RudderPosition", + "SixValues", "Solar", "ThreeValues", "TwoValues", @@ -3279,6 +3633,9 @@ "obp40": "true" }, "condition": [ + { + "page10type": "Fluid" + }, { "page10type": "FourValues" }, @@ -3291,6 +3648,9 @@ { "page10type": "RollPitch" }, + { + "page10type": "SixValues" + }, { "page10type": "ThreeValues" }, @@ -3299,9 +3659,6 @@ }, { "page10type": "WindRoseFlex" - }, - { - "page10type": "Fluid" } ] }, @@ -3325,6 +3682,9 @@ { "page10type": "RollPitch" }, + { + "page10type": "SixValues" + }, { "page10type": "ThreeValues" }, @@ -3353,6 +3713,9 @@ { "page10type": "FourValues2" }, + { + "page10type": "SixValues" + }, { "page10type": "ThreeValues" }, @@ -3378,6 +3741,9 @@ { "page10type": "FourValues2" }, + { + "page10type": "SixValues" + }, { "page10type": "WindRoseFlex" } @@ -3394,6 +3760,9 @@ "obp40": "true" }, "condition": [ + { + "page10type": "SixValues" + }, { "page10type": "WindRoseFlex" } @@ -3410,6 +3779,9 @@ "obp40": "true" }, "condition": [ + { + "page10type": "SixValues" + }, { "page10type": "WindRoseFlex" } From 1bac5d8b1698ba6db7dbb296767893114abfb425 Mon Sep 17 00:00:00 2001 From: Thomas Hooge Date: Thu, 12 Jun 2025 15:23:21 +0200 Subject: [PATCH 24/36] System page improvements --- extra_script.py.new | 7 +- lib/obp60task/PageSystem.cpp | 160 +++++++++++++++++++++++++---------- 2 files changed, 122 insertions(+), 45 deletions(-) diff --git a/extra_script.py.new b/extra_script.py.new index b185a93..63f7f31 100644 --- a/extra_script.py.new +++ b/extra_script.py.new @@ -520,9 +520,14 @@ prebuild(env) board="PLATFORM_BOARD_%s"%env["BOARD"].replace("-","_").upper() print("Board=#%s#"%board) print("BuildFlags=%s"%(" ".join(env["BUILD_FLAGS"]))) +res=[x for x in env["BUILD_FLAGS"] if x.startswith("-D DISPLAY_")] +if res: + epdtype = res[0].split('_')[1] +else: + epdtype = 'unknown' env.Append( LINKFLAGS=[ "-u", "custom_app_desc" ], - CPPDEFINES=[(board,"1")] + CPPDEFINES=[(board,"1"), ("BOARD", env["BOARD"]), ("EPDTYPE", epdtype)] ) #script does not run on clean yet - maybe in the future env.AddPostAction("clean",cleangenerated) diff --git a/lib/obp60task/PageSystem.cpp b/lib/obp60task/PageSystem.cpp index 7f601a1..5f7e7a6 100644 --- a/lib/obp60task/PageSystem.cpp +++ b/lib/obp60task/PageSystem.cpp @@ -9,16 +9,23 @@ #define STRINGIZE_IMPL(x) #x #define STRINGIZE(x) STRINGIZE_IMPL(x) #define VERSINFO STRINGIZE(GWDEVVERSION) +#define BOARDINFO STRINGIZE(BOARD) +#define DISPLAYINFO STRINGIZE(EPDTYPE) /* * Special system page, called directly with fast key sequence 5,4 * Out of normal page order. + * Consists of some sub-pages with following content: + * 1. Hard and software information + * 2. System settings + * 3. NMEA2000 device list */ class PageSystem : public Page { uint64_t chipid; bool simulation; +bool sdcard; String buzzer_mode; uint8_t buzzer_power; String cpuspeed; @@ -26,7 +33,12 @@ String rtc_module; String gps_module; String env_module; -char mode = 'N'; // (N)ormal, (D)evice list +String batt_sensor; +String solar_sensor; +String gen_sensor; +String rot_sensor; + +char mode = 'N'; // (N)ormal, (S)ettings, (D)evice list public: PageSystem(CommonData &common){ @@ -37,12 +49,18 @@ public: } chipid = ESP.getEfuseMac(); simulation = common.config->getBool(common.config->useSimuData); + sdcard = common.config->getBool(common.config->useSDCard); buzzer_mode = common.config->getString(common.config->buzzerMode); + buzzer_mode.toLowerCase(); buzzer_power = common.config->getInt(common.config->buzzerPower); cpuspeed = common.config->getString(common.config->cpuSpeed); env_module = common.config->getString(common.config->useEnvSensor); rtc_module = common.config->getString(common.config->useRTC); gps_module = common.config->getString(common.config->useGPS); + batt_sensor = common.config->getString(common.config->usePowSensor1); + solar_sensor = common.config->getString(common.config->usePowSensor2); + gen_sensor = common.config->getString(common.config->usePowSensor3); + gen_sensor = common.config->getString(common.config->useRotSensor); } virtual void setupKeys(){ @@ -60,6 +78,8 @@ public: commonData->logger->logDebug(GwLog::LOG, "System keyboard handler"); if (key == 2) { if (mode == 'N') { + mode = 'S'; + } else if (mode == 'S') { mode = 'D'; } else { mode = 'N'; @@ -144,19 +164,22 @@ public: // Draw page //*********************************************************** - const uint16_t y0 = 120; // data table starts here + uint16_t x0 = 8; // left column + uint16_t y0 = 48; // data table starts here // Set display in partial refresh mode getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update if (mode == 'N') { + getdisplay().setFont(&Ubuntu_Bold12pt7b); - getdisplay().setCursor(8, 50); + getdisplay().setCursor(8, 48); getdisplay().print("System Information"); getdisplay().drawXBitmap(320, 25, logo64_bits, logo64_width, logo64_height, commonData->fgcolor); getdisplay().setFont(&Ubuntu_Bold8pt7b); + y0 = 120; char ssid[13]; snprintf(ssid, 13, "%04X%08X", (uint16_t)(chipid >> 32), (uint32_t)chipid); @@ -164,10 +187,21 @@ public: getdisplay().setCursor(8, 70); getdisplay().print(String("MUDEVICE-") + String(ssid)); - getdisplay().setCursor(8, 90); + getdisplay().setCursor(8, 100); getdisplay().print("Firmware Version: "); + getdisplay().setCursor(160, 100); getdisplay().print(VERSINFO); + getdisplay().setCursor(8, 120); + getdisplay().print("Board version: "); + getdisplay().setCursor(160, 120); + getdisplay().print(BOARDINFO); + + getdisplay().setCursor(8, 140); + getdisplay().print("Display version: "); + getdisplay().setCursor(160, 140); + getdisplay().print(DISPLAYINFO); + getdisplay().setCursor(8, 265); #ifdef BOARD_OBP60S3 getdisplay().print("Press STBY to enter deep sleep mode"); @@ -176,69 +210,107 @@ public: getdisplay().print("Press wheel to enter deep sleep mode"); #endif - getdisplay().setCursor(2, y0); - getdisplay().print("Simulation:"); - getdisplay().setCursor(120, y0); - getdisplay().print(simulation ? "on" : "off"); - - getdisplay().setCursor(2, y0 + 16); - getdisplay().print("Environment:"); - getdisplay().setCursor(120, y0 + 16); - getdisplay().print(env_module); - // total RAM free int Heap_free = esp_get_free_heap_size(); - getdisplay().setCursor(202, y0); + getdisplay().setCursor(8, y0 + 64); getdisplay().print("Total free:"); - getdisplay().setCursor(300, y0); + getdisplay().setCursor(120, y0 + 64); getdisplay().print(String(Heap_free)); - getdisplay().setCursor(2, y0 + 32); - getdisplay().print("Buzzer:"); - getdisplay().setCursor(120, y0 + 32); - getdisplay().print(buzzer_mode); - - // RAM free for task - int RAM_free = uxTaskGetStackHighWaterMark(NULL); - getdisplay().setCursor(202, y0 + 16); - getdisplay().print("Task free:"); - getdisplay().setCursor(300, y0 + 16); - getdisplay().print(String(RAM_free)); - - // FRAM available / status - getdisplay().setCursor(202, y0 + 32); - getdisplay().print("FRAM:"); - getdisplay().setCursor(300, y0 + 32); - getdisplay().print(hasFRAM ? "available" : "not found"); - - getdisplay().setCursor(202, y0 + 64); + // CPU speed config / active + getdisplay().setCursor(8, y0 + 48); getdisplay().print("CPU speed:"); - getdisplay().setCursor(300, y0 + 64); + getdisplay().setCursor(120, y0 + 48); getdisplay().print(cpuspeed); getdisplay().print(" / "); int cpu_freq = esp_clk_cpu_freq() / 1000000; getdisplay().print(String(cpu_freq)); - getdisplay().setCursor(2, y0 + 64); + // RAM free for task + int RAM_free = uxTaskGetStackHighWaterMark(NULL); + getdisplay().setCursor(8, y0 + 80); + getdisplay().print("Task free:"); + getdisplay().setCursor(120, y0 + 80); + getdisplay().print(String(RAM_free)); + + // FRAM available / status + getdisplay().setCursor(8, y0 + 96); + getdisplay().print("FRAM:"); + getdisplay().setCursor(120, y0 + 96); + getdisplay().print(hasFRAM ? "available" : "not found"); + + + } else if (mode == 'S') { + // Settings + + getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setCursor(x0, 48); + getdisplay().print("System settings"); + + getdisplay().setFont(&Ubuntu_Bold8pt7b); + x0 = 8; + y0 = 72; + + // left column + getdisplay().setCursor(x0, y0); + getdisplay().print("Simulation:"); + getdisplay().setCursor(140, y0); + getdisplay().print(simulation ? "on" : "off"); + + getdisplay().setCursor(x0, y0 + 16); + getdisplay().print("Environment:"); + getdisplay().setCursor(140, y0 + 16); + getdisplay().print(env_module); + + getdisplay().setCursor(x0, y0 + 32); + getdisplay().print("Buzzer:"); + getdisplay().setCursor(140, y0 + 32); + getdisplay().print(buzzer_mode); + + getdisplay().setCursor(x0, y0 + 64); getdisplay().print("GPS:"); - getdisplay().setCursor(120, y0 + 64); + getdisplay().setCursor(140, y0 + 64); getdisplay().print(gps_module); - getdisplay().setCursor(2, y0 + 80); + getdisplay().setCursor(x0, y0 + 80); getdisplay().print("RTC:"); - getdisplay().setCursor(120, y0 + 80); + getdisplay().setCursor(140, y0 + 80); getdisplay().print(rtc_module); - getdisplay().setCursor(2, y0 + 96); + getdisplay().setCursor(x0, y0 + 96); getdisplay().print("Wifi:"); - getdisplay().setCursor(120, y0 + 96); - getdisplay().print(commonData->status.wifiApOn ? "On" : "Off"); + getdisplay().setCursor(140, y0 + 96); + getdisplay().print(commonData->status.wifiApOn ? "on" : "off"); + // right column + getdisplay().setCursor(202, y0); + getdisplay().print("Batt. sensor:"); + getdisplay().setCursor(320, y0); + getdisplay().print(batt_sensor); + + // Solar sensor + getdisplay().setCursor(202, y0 + 16); + getdisplay().print("Solar sensor:"); + getdisplay().setCursor(320, y0 + 16); + getdisplay().print(solar_sensor); + + // Generator sensor + getdisplay().setCursor(202, y0 + 32); + getdisplay().print("Gen. sensor:"); + getdisplay().setCursor(320, y0 + 32); + getdisplay().print(gen_sensor); + + // Gyro sensor + // SD-Card + getdisplay().setCursor(202, y0 + 64); + getdisplay().print("SD-Card:"); + getdisplay().setCursor(320, y0 + 64); + getdisplay().print(sdcard ? "on" : "off"); } else { // NMEA2000 device list getdisplay().setFont(&Ubuntu_Bold12pt7b); - getdisplay().setCursor(20, 50); + getdisplay().setCursor(8, 48); getdisplay().print("NMEA2000 device list"); getdisplay().setFont(&Ubuntu_Bold8pt7b); From 77c05de4fcefe03d4763e07bebbf5a42a014a8fc Mon Sep 17 00:00:00 2001 From: Thomas Hooge Date: Fri, 13 Jun 2025 09:21:41 +0200 Subject: [PATCH 25/36] More work on system page --- extra_script.py.new | 17 ++++--- lib/obp60task/PageSystem.cpp | 98 ++++++++++++++++++++++-------------- lib/obp60task/platformio.ini | 3 +- 3 files changed, 73 insertions(+), 45 deletions(-) diff --git a/extra_script.py.new b/extra_script.py.new index 63f7f31..31ae608 100644 --- a/extra_script.py.new +++ b/extra_script.py.new @@ -520,14 +520,19 @@ prebuild(env) board="PLATFORM_BOARD_%s"%env["BOARD"].replace("-","_").upper() print("Board=#%s#"%board) print("BuildFlags=%s"%(" ".join(env["BUILD_FLAGS"]))) -res=[x for x in env["BUILD_FLAGS"] if x.startswith("-D DISPLAY_")] -if res: - epdtype = res[0].split('_')[1] -else: - epdtype = 'unknown' + +epdtype = "unknown" +pcbvers = "unknown" +for x in env["BUILD_FLAGS"]: + if x.startswith("-D HARDWARE_"): + pcbvers = x.split('_')[1] + if x.startswith("-D DISPLAY_"): + epdtype = x.split('_')[1] + env.Append( LINKFLAGS=[ "-u", "custom_app_desc" ], - CPPDEFINES=[(board,"1"), ("BOARD", env["BOARD"]), ("EPDTYPE", epdtype)] + CPPDEFINES=[(board,"1"), ("BOARD", env["BOARD"]), ("EPDTYPE", epdtype), + ("PCBVERS", pcbvers)] ) #script does not run on clean yet - maybe in the future env.AddPostAction("clean",cleangenerated) diff --git a/lib/obp60task/PageSystem.cpp b/lib/obp60task/PageSystem.cpp index 5f7e7a6..5af82b6 100644 --- a/lib/obp60task/PageSystem.cpp +++ b/lib/obp60task/PageSystem.cpp @@ -10,6 +10,7 @@ #define STRINGIZE(x) STRINGIZE_IMPL(x) #define VERSINFO STRINGIZE(GWDEVVERSION) #define BOARDINFO STRINGIZE(BOARD) +#define PCBINFO STRINGIZE(PCBVERS) #define DISPLAYINFO STRINGIZE(EPDTYPE) /* @@ -49,7 +50,9 @@ public: } chipid = ESP.getEfuseMac(); simulation = common.config->getBool(common.config->useSimuData); +#ifdef BOARD_OBP40S3 sdcard = common.config->getBool(common.config->useSDCard); +#endif buzzer_mode = common.config->getString(common.config->buzzerMode); buzzer_mode.toLowerCase(); buzzer_power = common.config->getInt(common.config->buzzerPower); @@ -125,12 +128,12 @@ public: // s is pixel size of a single box QRCode qrcode; uint8_t qrcodeData[qrcode_getBufferSize(4)]; - #ifdef BOARD_OBP40S3 +#ifdef BOARD_OBP40S3 String prefix = "OBP40:SN:"; - #endif - #ifdef BOARD_OBP60S3 +#endif +#ifdef BOARD_OBP60S3 String prefix = "OBP60:SN:"; - #endif +#endif qrcode_initText(&qrcode, qrcodeData, 4, 0, (prefix + serialno).c_str()); int16_t x0 = x; for (uint8_t j = 0; j < qrcode.size; j++) { @@ -179,66 +182,89 @@ public: getdisplay().drawXBitmap(320, 25, logo64_bits, logo64_width, logo64_height, commonData->fgcolor); getdisplay().setFont(&Ubuntu_Bold8pt7b); - y0 = 120; + y0 = 155; char ssid[13]; snprintf(ssid, 13, "%04X%08X", (uint16_t)(chipid >> 32), (uint32_t)chipid); displayBarcode(String(ssid), 320, 200, 2); getdisplay().setCursor(8, 70); - getdisplay().print(String("MUDEVICE-") + String(ssid)); + getdisplay().print(String("MCUDEVICE-") + String(ssid)); - getdisplay().setCursor(8, 100); - getdisplay().print("Firmware Version: "); - getdisplay().setCursor(160, 100); + getdisplay().setCursor(8, 95); + getdisplay().print("Firmware version: "); + getdisplay().setCursor(160, 95); getdisplay().print(VERSINFO); - getdisplay().setCursor(8, 120); + getdisplay().setCursor(8, 113); getdisplay().print("Board version: "); - getdisplay().setCursor(160, 120); + getdisplay().setCursor(160, 113); getdisplay().print(BOARDINFO); + getdisplay().print(String(" HW ") + String(PCBINFO)); - getdisplay().setCursor(8, 140); + getdisplay().setCursor(8, 131); getdisplay().print("Display version: "); - getdisplay().setCursor(160, 140); + getdisplay().setCursor(160, 131); getdisplay().print(DISPLAYINFO); getdisplay().setCursor(8, 265); - #ifdef BOARD_OBP60S3 +#ifdef BOARD_OBP60S3 getdisplay().print("Press STBY to enter deep sleep mode"); - #endif - #ifdef BOARD_OBP40S3 +#endif +#ifdef BOARD_OBP40S3 getdisplay().print("Press wheel to enter deep sleep mode"); - #endif +#endif - // total RAM free - int Heap_free = esp_get_free_heap_size(); - getdisplay().setCursor(8, y0 + 64); - getdisplay().print("Total free:"); - getdisplay().setCursor(120, y0 + 64); - getdisplay().print(String(Heap_free)); + // Flash memory size + uint32_t flash_size = ESP.getFlashChipSize(); + getdisplay().setCursor(8, y0); + getdisplay().print("FLASH:"); + getdisplay().setCursor(90, y0); + getdisplay().print(String(flash_size / 1024) + String(" kB")); + + // PSRAM memory size + uint32_t psram_size = ESP.getPsramSize(); + getdisplay().setCursor(8, y0 + 16); + getdisplay().print("PSRAM:"); + getdisplay().setCursor(90, y0 + 16); + getdisplay().print(String(psram_size / 1024) + String(" kB")); + + // FRAM available / status + getdisplay().setCursor(8, y0 + 32); + getdisplay().print("FRAM:"); + getdisplay().setCursor(90, y0 + 32); + getdisplay().print(hasFRAM ? "available" : "not found"); + +#ifdef BOARD_OBP40S3 + // SD-Card + getdisplay().setCursor(8, y0 + 48); + getdisplay().print("SD-Card:"); + getdisplay().setCursor(90, y0 + 48); + getdisplay().print(sdcard ? "on" : "off"); +#endif // CPU speed config / active - getdisplay().setCursor(8, y0 + 48); + getdisplay().setCursor(202, y0); getdisplay().print("CPU speed:"); - getdisplay().setCursor(120, y0 + 48); + getdisplay().setCursor(300, y0); getdisplay().print(cpuspeed); getdisplay().print(" / "); int cpu_freq = esp_clk_cpu_freq() / 1000000; getdisplay().print(String(cpu_freq)); + // total RAM free + int Heap_free = esp_get_free_heap_size(); + getdisplay().setCursor(202, y0 + 16); + getdisplay().print("Total free:"); + getdisplay().setCursor(300, y0 + 16); + getdisplay().print(String(Heap_free)); + // RAM free for task int RAM_free = uxTaskGetStackHighWaterMark(NULL); - getdisplay().setCursor(8, y0 + 80); + getdisplay().setCursor(202, y0 + 32); getdisplay().print("Task free:"); - getdisplay().setCursor(120, y0 + 80); + getdisplay().setCursor(300, y0 + 32); getdisplay().print(String(RAM_free)); - // FRAM available / status - getdisplay().setCursor(8, y0 + 96); - getdisplay().print("FRAM:"); - getdisplay().setCursor(120, y0 + 96); - getdisplay().print(hasFRAM ? "available" : "not found"); - } else if (mode == 'S') { // Settings @@ -301,11 +327,7 @@ public: getdisplay().print(gen_sensor); // Gyro sensor - // SD-Card - getdisplay().setCursor(202, y0 + 64); - getdisplay().print("SD-Card:"); - getdisplay().setCursor(320, y0 + 64); - getdisplay().print(sdcard ? "on" : "off"); + } else { // NMEA2000 device list diff --git a/lib/obp60task/platformio.ini b/lib/obp60task/platformio.ini index 4acd552..f8c26ae 100644 --- a/lib/obp60task/platformio.ini +++ b/lib/obp60task/platformio.ini @@ -94,7 +94,8 @@ lib_deps = adafruit/Adafruit FRAM I2C@^2.0.3 build_flags= -D DISABLE_DIAGNOSTIC_OUTPUT #Disable diagnostic output for GxEPD2 lib - -D BOARD_OBP40S3 #Board OBP40 V1.0 with ESP32S3 SKU:DIE07300S (CrowPanel 4.2) + -D BOARD_OBP40S3 #Board OBP40 with ESP32S3 + -D HARDWARE_V10 #OBP40 hardware revision V1.0 SKU:DIE7300S v1.1 (CrowPanel 4.2) -D DISPLAY_GDEY042T81 #new E-Ink display from Waveshare, R10 2.2 ohm #-D LIPO_ACCU_1200 #Hardware extension, LiPo accu 3,7V 1200mAh #-D VOLTAGE_SENSOR #Hardware extension, LiPo voltage sensor with two resistors From f5cf2928047ee97876b7e1e1d1f55a6890924f59 Mon Sep 17 00:00:00 2001 From: Thomas Hooge Date: Fri, 13 Jun 2025 10:32:18 +0200 Subject: [PATCH 26/36] Typo in platformio.ini fixed --- lib/obp60task/platformio.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/obp60task/platformio.ini b/lib/obp60task/platformio.ini index f8c26ae..21d56a5 100644 --- a/lib/obp60task/platformio.ini +++ b/lib/obp60task/platformio.ini @@ -95,7 +95,7 @@ lib_deps = build_flags= -D DISABLE_DIAGNOSTIC_OUTPUT #Disable diagnostic output for GxEPD2 lib -D BOARD_OBP40S3 #Board OBP40 with ESP32S3 - -D HARDWARE_V10 #OBP40 hardware revision V1.0 SKU:DIE7300S v1.1 (CrowPanel 4.2) + -D HARDWARE_V10 #OBP40 hardware revision V1.0 SKU:DIE07300S V1.1 (CrowPanel 4.2) -D DISPLAY_GDEY042T81 #new E-Ink display from Waveshare, R10 2.2 ohm #-D LIPO_ACCU_1200 #Hardware extension, LiPo accu 3,7V 1200mAh #-D VOLTAGE_SENSOR #Hardware extension, LiPo voltage sensor with two resistors From 99c3470a22667a7d5fecad3f6df0a028b1dbfce3 Mon Sep 17 00:00:00 2001 From: Thomas Hooge Date: Sat, 14 Jun 2025 10:09:48 +0200 Subject: [PATCH 27/36] Some work on system page and SD-card integration --- lib/obp60task/PageSystem.cpp | 36 +++++++++++++++++++++++++++++---- lib/obp60task/config_obp40.json | 6 +----- lib/obp60task/obp60task.cpp | 4 ++-- 3 files changed, 35 insertions(+), 11 deletions(-) diff --git a/lib/obp60task/PageSystem.cpp b/lib/obp60task/PageSystem.cpp index 5af82b6..519bee1 100644 --- a/lib/obp60task/PageSystem.cpp +++ b/lib/obp60task/PageSystem.cpp @@ -6,6 +6,11 @@ #include #include "qrcode.h" +#ifdef BOARD_OBP40S3 +#include +#include +#endif + #define STRINGIZE_IMPL(x) #x #define STRINGIZE(x) STRINGIZE_IMPL(x) #define VERSINFO STRINGIZE(GWDEVVERSION) @@ -39,7 +44,7 @@ String solar_sensor; String gen_sensor; String rot_sensor; -char mode = 'N'; // (N)ormal, (S)ettings, (D)evice list +char mode = 'N'; // (N)ormal, (S)ettings, (D)evice list, (C)ard public: PageSystem(CommonData &common){ @@ -63,7 +68,7 @@ public: batt_sensor = common.config->getString(common.config->usePowSensor1); solar_sensor = common.config->getString(common.config->usePowSensor2); gen_sensor = common.config->getString(common.config->usePowSensor3); - gen_sensor = common.config->getString(common.config->useRotSensor); + rot_sensor = common.config->getString(common.config->useRotSensor); } virtual void setupKeys(){ @@ -84,6 +89,12 @@ public: mode = 'S'; } else if (mode == 'S') { mode = 'D'; + } else if (mode == 'D') { + if (sdcard) { + mode = 'C'; + } else { + mode = 'N'; + } } else { mode = 'N'; } @@ -239,7 +250,12 @@ public: getdisplay().setCursor(8, y0 + 48); getdisplay().print("SD-Card:"); getdisplay().setCursor(90, y0 + 48); - getdisplay().print(sdcard ? "on" : "off"); + if (sdcard) { + uint64_t cardsize = SD.cardSize() / (1024 * 1024); + getdisplay().print(String(cardsize) + String(" MB")); + } else { + getdisplay().print("off"); + } #endif // CPU speed config / active @@ -265,7 +281,6 @@ public: getdisplay().setCursor(300, y0 + 32); getdisplay().print(String(RAM_free)); - } else if (mode == 'S') { // Settings @@ -328,6 +343,19 @@ public: // Gyro sensor + } else if (mode == 'C') { + // Card info + getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setCursor(8, 48); + getdisplay().print("SD Card info"); + + getdisplay().setFont(&Ubuntu_Bold8pt7b); + + x0 = 20; + y0 = 72; + getdisplay().setCursor(x0, y0); + getdisplay().print("Work in progress..."); + } else { // NMEA2000 device list diff --git a/lib/obp60task/config_obp40.json b/lib/obp60task/config_obp40.json index 2c8b0f3..c41e95c 100644 --- a/lib/obp60task/config_obp40.json +++ b/lib/obp60task/config_obp40.json @@ -616,12 +616,8 @@ "name": "useSDCard", "label": "SD Card", "type": "boolean", - "default": "off", + "default": "false", "description": "Use internal SD card interface [off|on]", - "list": [ - "off", - "on" - ], "category": "OBP40 Hardware", "capabilities": { "obp40": "true" diff --git a/lib/obp60task/obp60task.cpp b/lib/obp60task/obp60task.cpp index bdc28e0..fb3ef6f 100644 --- a/lib/obp60task/obp60task.cpp +++ b/lib/obp60task/obp60task.cpp @@ -79,8 +79,8 @@ void OBP60Init(GwApi *api){ } #ifdef BOARD_OBP40S3 - String sdcard = config->getConfigItem(config->useSDCard, true)->asString(); - if (sdcard == "on") { + bool sdcard = config->getBool(config->useSDCard); + if (sdcard) { SPIClass SD_SPI = SPIClass(HSPI); SD_SPI.begin(SD_SPI_CLK, SD_SPI_MISO, SD_SPI_MOSI); if (SD.begin(SD_SPI_CS, SD_SPI, 80000000)) { From c5a1244519d4724e4854e96c369b5af2dd1e49ec Mon Sep 17 00:00:00 2001 From: Thomas Hooge Date: Sun, 15 Jun 2025 10:19:59 +0200 Subject: [PATCH 28/36] Some config.json improvements --- lib/obp60task/config.json | 4 +++- lib/obp60task/config_obp40.json | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/obp60task/config.json b/lib/obp60task/config.json index c1801af..5b73a1d 100644 --- a/lib/obp60task/config.json +++ b/lib/obp60task/config.json @@ -16,7 +16,7 @@ "description": "NTP time server. Use only one hostname or IP address", "category": "wifi client", "capabilities": { - "obp40": "true" + "obp60": "true" } }, { @@ -1117,6 +1117,7 @@ "min": 1, "max": 10, "default":"10", + "description": "Number of visible data pages [1...10]", "category":"OBP60 Pages", "capabilities": { "obp60":"true" @@ -1130,6 +1131,7 @@ "min": 1, "max": 10, "default":"1", + "description": "First page number to display after device startup", "category":"OBP60 Pages", "capabilities": { "obp60":"true" diff --git a/lib/obp60task/config_obp40.json b/lib/obp60task/config_obp40.json index c41e95c..a03b359 100644 --- a/lib/obp60task/config_obp40.json +++ b/lib/obp60task/config_obp40.json @@ -1129,6 +1129,7 @@ "min": 1, "max": 10, "default":"10", + "description": "Number of visible data pages [1...10]", "category":"OBP40 Pages", "capabilities": { "obp40": "true" @@ -1142,6 +1143,7 @@ "min": 1, "max": 10, "default":"1", + "description": "First page number to display after device startup", "category":"OBP40 Pages", "capabilities": { "obp40": "true" From b82e94d71636f510931edb4762aa71b202141e06 Mon Sep 17 00:00:00 2001 From: norbert-walter Date: Thu, 3 Jul 2025 19:36:47 +0200 Subject: [PATCH 29/36] Change back to old extra_script.py for sync with wellenvogel --- extra_script.py | 16 +- lib/obp60task/extra_script.py | 528 ++++++++++++++++++ .../obp60task/extra_script.py.new | 0 .../obp60task/extra_script.py.old | 0 4 files changed, 531 insertions(+), 13 deletions(-) create mode 100644 lib/obp60task/extra_script.py rename extra_script.py.new => lib/obp60task/extra_script.py.new (100%) rename extra_script.py.old => lib/obp60task/extra_script.py.old (100%) diff --git a/extra_script.py b/extra_script.py index b185a93..ed62c64 100644 --- a/extra_script.py +++ b/extra_script.py @@ -10,7 +10,7 @@ from datetime import datetime import re import pprint from platformio.project.config import ProjectConfig -from platformio.project.exception import InvalidProjectConfError + Import("env") #print(env.Dump()) @@ -104,17 +104,7 @@ def writeFileIfChanged(fileName,data): return True def mergeConfig(base,other): - try: - customconfig = env.GetProjectOption("custom_config") - except InvalidProjectConfError: - customconfig = None for bdir in other: - if customconfig and os.path.exists(os.path.join(bdir,customconfig)): - cname=os.path.join(bdir,customconfig) - print("merge custom config {}".format(cname)) - with open(cname,'rb') as ah: - base += json.load(ah) - continue cname=os.path.join(bdir,"config.json") if os.path.exists(cname): print("merge config %s"%cname) @@ -284,9 +274,9 @@ class Grove: def _ss(self,z=False): if z: return self.name - return self.name if self.name != 'Z' else '' + return self.name if self.name is not 'Z' else '' def _suffix(self): - return '_'+self.name if self.name != 'Z' else '' + return '_'+self.name if self.name is not 'Z' else '' def replace(self,line): if line is None: return line diff --git a/lib/obp60task/extra_script.py b/lib/obp60task/extra_script.py new file mode 100644 index 0000000..b185a93 --- /dev/null +++ b/lib/obp60task/extra_script.py @@ -0,0 +1,528 @@ +print("running extra...") +import gzip +import shutil +import os +import sys +import inspect +import json +import glob +from datetime import datetime +import re +import pprint +from platformio.project.config import ProjectConfig +from platformio.project.exception import InvalidProjectConfError + +Import("env") +#print(env.Dump()) +OWN_FILE="extra_script.py" +GEN_DIR='lib/generated' +CFG_FILE='web/config.json' +XDR_FILE='web/xdrconfig.json' +INDEXJS="index.js" +INDEXCSS="index.css" +CFG_INCLUDE='GwConfigDefinitions.h' +CFG_INCLUDE_IMPL='GwConfigDefImpl.h' +XDR_INCLUDE='GwXdrTypeMappings.h' +TASK_INCLUDE='GwUserTasks.h' +GROVE_CONFIG="GwM5GroveGen.h" +GROVE_CONFIG_IN="lib/hardware/GwM5Grove.in" +EMBEDDED_INCLUDE="GwEmbeddedFiles.h" + +def getEmbeddedFiles(env): + rt=[] + efiles=env.GetProjectOption("board_build.embed_files") + for f in efiles.split("\n"): + if f == '': + continue + rt.append(f) + return rt + +def basePath(): + #see: https://stackoverflow.com/questions/16771894/python-nameerror-global-name-file-is-not-defined + return os.path.dirname(inspect.getfile(lambda: None)) + +def outPath(): + return os.path.join(basePath(),GEN_DIR) +def checkDir(): + dn=outPath() + if not os.path.exists(dn): + os.makedirs(dn) + if not os.path.isdir(dn): + print("unable to create %s"%dn) + return False + return True + +def isCurrent(infile,outfile): + if os.path.exists(outfile): + otime=os.path.getmtime(outfile) + itime=os.path.getmtime(infile) + if (otime >= itime): + own=os.path.join(basePath(),OWN_FILE) + if os.path.exists(own): + owntime=os.path.getmtime(own) + if owntime > otime: + return False + print("%s is newer then %s, no need to recreate"%(outfile,infile)) + return True + return False +def compressFile(inFile,outfile): + if isCurrent(inFile,outfile): + return + print("compressing %s"%inFile) + with open(inFile, 'rb') as f_in: + with gzip.open(outfile, 'wb') as f_out: + shutil.copyfileobj(f_in, f_out) + +def generateFile(infile,outfile,callback,inMode='rb',outMode='w'): + if isCurrent(infile,outfile): + return + print("creating %s"%outfile) + oh=None + with open(infile,inMode) as ch: + with open(outfile,outMode) as oh: + try: + callback(ch,oh,inFile=infile) + oh.close() + except Exception as e: + try: + oh.close() + except: + pass + os.unlink(outfile) + raise + +def writeFileIfChanged(fileName,data): + if os.path.exists(fileName): + with open(fileName,"r") as ih: + old=ih.read() + ih.close() + if old == data: + return False + print("#generating %s"%fileName) + with open(fileName,"w") as oh: + oh.write(data) + return True + +def mergeConfig(base,other): + try: + customconfig = env.GetProjectOption("custom_config") + except InvalidProjectConfError: + customconfig = None + for bdir in other: + if customconfig and os.path.exists(os.path.join(bdir,customconfig)): + cname=os.path.join(bdir,customconfig) + print("merge custom config {}".format(cname)) + with open(cname,'rb') as ah: + base += json.load(ah) + continue + cname=os.path.join(bdir,"config.json") + if os.path.exists(cname): + print("merge config %s"%cname) + with open(cname,'rb') as ah: + merge=json.load(ah) + base=base+merge + return base + +def replaceTexts(data,replacements): + if replacements is None: + return data + if isinstance(data,str): + for k,v in replacements.items(): + data=data.replace("$"+k,str(v)) + return data + if isinstance(data,list): + rt=[] + for e in data: + rt.append(replaceTexts(e,replacements)) + return rt + if isinstance(data,dict): + rt={} + for k,v in data.items(): + rt[replaceTexts(k,replacements)]=replaceTexts(v,replacements) + return rt + return data +def expandConfig(config): + rt=[] + for item in config: + type=item.get('type') + if type != 'array': + rt.append(item) + continue + replacements=item.get('replace') + children=item.get('children') + name=item.get('name') + if name is None: + name="#unknown#" + if not isinstance(replacements,list): + raise Exception("missing replacements at array %s"%name) + for replace in replacements: + if children is not None: + for c in children: + rt.append(replaceTexts(c,replace)) + return rt + +def generateMergedConfig(inFile,outFile,addDirs=[]): + if not os.path.exists(inFile): + raise Exception("unable to read cfg file %s"%inFile) + data="" + with open(inFile,'rb') as ch: + config=json.load(ch) + config=mergeConfig(config,addDirs) + config=expandConfig(config) + data=json.dumps(config,indent=2) + writeFileIfChanged(outFile,data) + +def generateCfg(inFile,outFile,impl): + if not os.path.exists(inFile): + raise Exception("unable to read cfg file %s"%inFile) + data="" + with open(inFile,'rb') as ch: + config=json.load(ch) + data+="//generated from %s\n"%inFile + l=len(config) + idx=0 + if not impl: + data+='#include "GwConfigItem.h"\n' + data+='class GwConfigDefinitions{\n' + data+=' public:\n' + data+=' int getNumConfig() const{return %d;}\n'%(l) + for item in config: + n=item.get('name') + if n is None: + continue + if len(n) > 15: + raise Exception("%s: config names must be max 15 caracters"%n) + data+=' static constexpr const char* %s="%s";\n'%(n,n) + data+="};\n" + else: + data+='void GwConfigHandler::populateConfigs(GwConfigInterface **config){\n' + for item in config: + name=item.get('name') + if name is None: + continue + data+=' configs[%d]='%(idx) + idx+=1 + secret="false"; + if item.get('type') == 'password': + secret="true" + data+=" new GwConfigInterface(%s,\"%s\",%s);\n"%(name,item.get('default'),secret) + data+='}\n' + writeFileIfChanged(outFile,data) + +def labelFilter(label): + return re.sub("[^a-zA-Z0-9]","",re.sub("\([0-9]*\)","",label)) +def generateXdrMappings(fp,oh,inFile=''): + jdoc=json.load(fp) + oh.write("static GwXDRTypeMapping* typeMappings[]={\n") + first=True + for cat in jdoc: + item=jdoc[cat] + cid=item.get('id') + if cid is None: + continue + tc=item.get('type') + if tc is not None: + if first: + first=False + else: + oh.write(",\n") + oh.write(" new GwXDRTypeMapping(%d,0,%d) /*%s*/"%(cid,tc,cat)) + fields=item.get('fields') + if fields is None: + continue + idx=0 + for fe in fields: + if not isinstance(fe,dict): + continue + tc=fe.get('t') + id=fe.get('v') + if id is None: + id=idx + idx+=1 + l=fe.get('l') or '' + if tc is None or id is None: + continue + if first: + first=False + else: + oh.write(",\n") + oh.write(" new GwXDRTypeMapping(%d,%d,%d) /*%s:%s*/"%(cid,id,tc,cat,l)) + oh.write("\n") + oh.write("};\n") + for cat in jdoc: + item=jdoc[cat] + cid=item.get('id') + if cid is None: + continue + selectors=item.get('selector') + if selectors is not None: + for selector in selectors: + label=selector.get('l') + value=selector.get('v') + if label is not None and value is not None: + label=labelFilter(label) + define=("GWXDRSEL_%s_%s"%(cat,label)).upper() + oh.write(" #define %s %s\n"%(define,value)) + fields=item.get('fields') + if fields is not None: + idx=0 + for field in fields: + v=field.get('v') + if v is None: + v=idx + else: + v=int(v) + label=field.get('l') + if v is not None and label is not None: + define=("GWXDRFIELD_%s_%s"%(cat,labelFilter(label))).upper(); + oh.write(" #define %s %s\n"%(define,str(v))) + idx+=1 + +class Grove: + def __init__(self,name) -> None: + self.name=name + def _ss(self,z=False): + if z: + return self.name + return self.name if self.name != 'Z' else '' + def _suffix(self): + return '_'+self.name if self.name != 'Z' else '' + def replace(self,line): + if line is None: + return line + return line.replace('$G$',self._ss()).replace('$Z$',self._ss(True)).replace('$GS$',self._suffix()) +def generateGroveDefs(inh,outh,inFile=''): + GROVES=[Grove('Z'),Grove('A'),Grove('B'),Grove('C')] + definition=[] + started=False + def writeConfig(): + for grove in GROVES: + for cl in definition: + outh.write(grove.replace(cl)) + + for line in inh: + if re.match(" *#GROVE",line): + started=True + if len(definition) > 0: + writeConfig() + definition=[] + continue + if started: + definition.append(line) + if len(definition) > 0: + writeConfig() + + + +userTaskDirs=[] + +def getUserTaskDirs(): + rt=[] + taskdirs=glob.glob(os.path.join( basePath(),'lib','*task*')) + for task in taskdirs: + rt.append(task) + return rt + +def checkAndAdd(file,names,ilist): + if not file.endswith('.h'): + return + match=False + for cmp in names: + #print("##check %s<->%s"%(f.lower(),cmp)) + if file.lower() == cmp: + match=True + if not match: + return + ilist.append(file) +def genereateUserTasks(outfile): + includes=[] + for task in userTaskDirs: + #print("##taskdir=%s"%task) + base=os.path.basename(task) + includeNames=[base.lower()+".h",'gw'+base.lower()+'.h'] + for f in os.listdir(task): + checkAndAdd(f,includeNames,includes) + includeData="" + for i in includes: + print("#task include %s"%i) + includeData+="#include <%s>\n"%i + writeFileIfChanged(outfile,includeData) + +def generateEmbedded(elist,outFile): + content="" + for entry in elist: + content+="EMBED_GZ_FILE(\"%s\",%s,\"%s\");\n"%entry + writeFileIfChanged(outFile,content) + +def getContentType(fn): + if (fn.endswith('.gz')): + fn=fn[0:-3] + if (fn.endswith('html')): + return "text/html" + if (fn.endswith('json')): + return "application/json" + if (fn.endswith('js')): + return "text/javascript" + if (fn.endswith('css')): + return "text/css" + return "application/octet-stream" + + +def getLibs(): + base=os.path.join(basePath(),"lib") + rt=[] + for sd in os.listdir(base): + if sd == '..': + continue + if sd == '.': + continue + fn=os.path.join(base,sd) + if os.path.isdir(fn): + rt.append(sd) + EXTRAS=['generated'] + for e in EXTRAS: + if not e in rt: + rt.append(e) + return rt + + + +def joinFiles(target,pattern,dirlist): + flist=[] + for dir in dirlist: + fn=os.path.join(dir,pattern) + if os.path.exists(fn): + flist.append(fn) + current=False + if os.path.exists(target): + current=True + for f in flist: + if not isCurrent(f,target): + current=False + break + if current: + print("%s is up to date"%target) + return + print("creating %s"%target) + with gzip.open(target,"wb") as oh: + for fn in flist: + print("adding %s to %s"%(fn,target)) + with open(fn,"rb") as rh: + shutil.copyfileobj(rh,oh) + + +OWNLIBS=getLibs()+["FS","WiFi"] +GLOBAL_INCLUDES=[] + +def handleDeps(env): + #overwrite the GetProjectConfig + #to inject all our libs + oldGetProjectConfig=env.GetProjectConfig + def GetProjectConfigX(env): + rt=oldGetProjectConfig() + cenv="env:"+env['PIOENV'] + libs=[] + for section,options in rt.as_tuple(): + if section == cenv: + for key,values in options: + if key == 'lib_deps': + libs=values + + mustUpdate=False + for lib in OWNLIBS: + if not lib in libs: + libs.append(lib) + mustUpdate=True + if mustUpdate: + update=[(cenv,[('lib_deps',libs)])] + rt.update(update) + return rt + env.AddMethod(GetProjectConfigX,"GetProjectConfig") + #store the list of all includes after we resolved + #the dependencies for our main project + #we will use them for all compilations afterwards + oldLibBuilder=env.ConfigureProjectLibBuilder + def ConfigureProjectLibBuilderX(env): + global GLOBAL_INCLUDES + project=oldLibBuilder() + #print("##ConfigureProjectLibBuilderX") + #pprint.pprint(project) + if project.depbuilders: + #print("##depbuilders %s"%",".join(map(lambda x: x.path,project.depbuilders))) + for db in project.depbuilders: + idirs=db.get_include_dirs() + for id in idirs: + if not id in GLOBAL_INCLUDES: + GLOBAL_INCLUDES.append(id) + return project + env.AddMethod(ConfigureProjectLibBuilderX,"ConfigureProjectLibBuilder") + def injectIncludes(env,node): + return env.Object( + node, + CPPPATH=env["CPPPATH"]+GLOBAL_INCLUDES + ) + env.AddBuildMiddleware(injectIncludes) + + +def prebuild(env): + global userTaskDirs + print("#prebuild running") + if not checkDir(): + sys.exit(1) + ldf_mode=env.GetProjectOption("lib_ldf_mode") + if ldf_mode == 'off': + print("##ldf off - own dependency handling") + handleDeps(env) + userTaskDirs=getUserTaskDirs() + mergedConfig=os.path.join(outPath(),os.path.basename(CFG_FILE)) + generateMergedConfig(os.path.join(basePath(),CFG_FILE),mergedConfig,userTaskDirs) + compressFile(mergedConfig,mergedConfig+".gz") + generateCfg(mergedConfig,os.path.join(outPath(),CFG_INCLUDE),False) + generateCfg(mergedConfig,os.path.join(outPath(),CFG_INCLUDE_IMPL),True) + joinFiles(os.path.join(outPath(),INDEXJS+".gz"),INDEXJS,["web"]+userTaskDirs) + joinFiles(os.path.join(outPath(),INDEXCSS+".gz"),INDEXCSS,["web"]+userTaskDirs) + embedded=getEmbeddedFiles(env) + filedefs=[] + for ef in embedded: + print("#checking embedded file %s"%ef) + (dn,fn)=os.path.split(ef) + pureName=fn + if pureName.endswith('.gz'): + pureName=pureName[0:-3] + ct=getContentType(pureName) + usname=ef.replace('/','_').replace('.','_') + filedefs.append((pureName,usname,ct)) + inFile=os.path.join(basePath(),"web",pureName) + if os.path.exists(inFile): + compressFile(inFile,ef) + else: + print("#WARNING: infile %s for %s not found"%(inFile,ef)) + generateEmbedded(filedefs,os.path.join(outPath(),EMBEDDED_INCLUDE)) + genereateUserTasks(os.path.join(outPath(), TASK_INCLUDE)) + generateFile(os.path.join(basePath(),XDR_FILE),os.path.join(outPath(),XDR_INCLUDE),generateXdrMappings) + generateFile(os.path.join(basePath(),GROVE_CONFIG_IN),os.path.join(outPath(),GROVE_CONFIG),generateGroveDefs,inMode='r') + version="dev"+datetime.now().strftime("%Y%m%d") + env.Append(CPPDEFINES=[('GWDEVVERSION',version)]) + +def cleangenerated(source, target, env): + od=outPath() + if os.path.isdir(od): + print("#cleaning up %s"%od) + for f in os.listdir(od): + if f == "." or f == "..": + continue + fn=os.path.join(od,f) + os.unlink(f) + + +print("#prescript...") +prebuild(env) +board="PLATFORM_BOARD_%s"%env["BOARD"].replace("-","_").upper() +print("Board=#%s#"%board) +print("BuildFlags=%s"%(" ".join(env["BUILD_FLAGS"]))) +env.Append( + LINKFLAGS=[ "-u", "custom_app_desc" ], + CPPDEFINES=[(board,"1")] +) +#script does not run on clean yet - maybe in the future +env.AddPostAction("clean",cleangenerated) diff --git a/extra_script.py.new b/lib/obp60task/extra_script.py.new similarity index 100% rename from extra_script.py.new rename to lib/obp60task/extra_script.py.new diff --git a/extra_script.py.old b/lib/obp60task/extra_script.py.old similarity index 100% rename from extra_script.py.old rename to lib/obp60task/extra_script.py.old From c614cae4727306f4808f3bbcbf98d2346fea8ac2 Mon Sep 17 00:00:00 2001 From: norbert-walter Date: Thu, 3 Jul 2025 19:41:27 +0200 Subject: [PATCH 30/36] Change to actual extra_script.py --- extra_script.py | 69 +-- ...extra_script.py.new => extra_script.py.new | 0 ...extra_script.py.old => extra_script.py.old | 0 lib/obp60task/extra_script.py | 528 ------------------ 4 files changed, 24 insertions(+), 573 deletions(-) rename lib/obp60task/extra_script.py.new => extra_script.py.new (100%) rename lib/obp60task/extra_script.py.old => extra_script.py.old (100%) delete mode 100644 lib/obp60task/extra_script.py diff --git a/extra_script.py b/extra_script.py index 218782f..b185a93 100644 --- a/extra_script.py +++ b/extra_script.py @@ -10,7 +10,7 @@ from datetime import datetime import re import pprint from platformio.project.config import ProjectConfig - +from platformio.project.exception import InvalidProjectConfError Import("env") #print(env.Dump()) @@ -104,7 +104,18 @@ def writeFileIfChanged(fileName,data): return True def mergeConfig(base,other): - for cname in other: + try: + customconfig = env.GetProjectOption("custom_config") + except InvalidProjectConfError: + customconfig = None + for bdir in other: + if customconfig and os.path.exists(os.path.join(bdir,customconfig)): + cname=os.path.join(bdir,customconfig) + print("merge custom config {}".format(cname)) + with open(cname,'rb') as ah: + base += json.load(ah) + continue + cname=os.path.join(bdir,"config.json") if os.path.exists(cname): print("merge config %s"%cname) with open(cname,'rb') as ah: @@ -150,25 +161,13 @@ def expandConfig(config): rt.append(replaceTexts(c,replace)) return rt -def createUserItemList(dirs,itemName,files): - rt=[] - for d in dirs: - iname=os.path.join(d,itemName) - if os.path.exists(iname): - rt.append(iname) - for f in files: - if not os.path.exists(f): - raise Exception("user item %s not found"%f) - rt.append(f) - return rt - -def generateMergedConfig(inFile,outFile,addFiles=[]): +def generateMergedConfig(inFile,outFile,addDirs=[]): if not os.path.exists(inFile): raise Exception("unable to read cfg file %s"%inFile) data="" with open(inFile,'rb') as ch: config=json.load(ch) - config=mergeConfig(config,addFiles) + config=mergeConfig(config,addDirs) config=expandConfig(config) data=json.dumps(config,indent=2) writeFileIfChanged(outFile,data) @@ -388,7 +387,12 @@ def getLibs(): -def joinFiles(target,flist): +def joinFiles(target,pattern,dirlist): + flist=[] + for dir in dirlist: + fn=os.path.join(dir,pattern) + if os.path.exists(fn): + flist.append(fn) current=False if os.path.exists(target): current=True @@ -459,28 +463,7 @@ def handleDeps(env): ) env.AddBuildMiddleware(injectIncludes) -def getOption(env,name,toArray=True): - try: - opt=env.GetProjectOption(name) - if toArray: - if opt is None: - return [] - if isinstance(opt,list): - return opt - return opt.split("\n" if "\n" in opt else ",") - return opt - except: - pass - if toArray: - return [] -def getFileList(files): - base=basePath() - rt=[] - for f in files: - if f is not None and f != "": - rt.append(os.path.join(base,f)) - return rt def prebuild(env): global userTaskDirs print("#prebuild running") @@ -490,18 +473,14 @@ def prebuild(env): if ldf_mode == 'off': print("##ldf off - own dependency handling") handleDeps(env) - extraConfigs=getOption(env,'custom_config',toArray=True) - extraJs=getOption(env,'custom_js',toArray=True) - extraCss=getOption(env,'custom_css',toArray=True) - userTaskDirs=getUserTaskDirs() mergedConfig=os.path.join(outPath(),os.path.basename(CFG_FILE)) - generateMergedConfig(os.path.join(basePath(),CFG_FILE),mergedConfig,createUserItemList(userTaskDirs,"config.json", getFileList(extraConfigs))) + generateMergedConfig(os.path.join(basePath(),CFG_FILE),mergedConfig,userTaskDirs) compressFile(mergedConfig,mergedConfig+".gz") generateCfg(mergedConfig,os.path.join(outPath(),CFG_INCLUDE),False) generateCfg(mergedConfig,os.path.join(outPath(),CFG_INCLUDE_IMPL),True) - joinFiles(os.path.join(outPath(),INDEXJS+".gz"),createUserItemList(["web"]+userTaskDirs,INDEXJS,getFileList(extraJs))) - joinFiles(os.path.join(outPath(),INDEXCSS+".gz"),createUserItemList(["web"]+userTaskDirs,INDEXCSS,getFileList(extraCss))) + joinFiles(os.path.join(outPath(),INDEXJS+".gz"),INDEXJS,["web"]+userTaskDirs) + joinFiles(os.path.join(outPath(),INDEXCSS+".gz"),INDEXCSS,["web"]+userTaskDirs) embedded=getEmbeddedFiles(env) filedefs=[] for ef in embedded: diff --git a/lib/obp60task/extra_script.py.new b/extra_script.py.new similarity index 100% rename from lib/obp60task/extra_script.py.new rename to extra_script.py.new diff --git a/lib/obp60task/extra_script.py.old b/extra_script.py.old similarity index 100% rename from lib/obp60task/extra_script.py.old rename to extra_script.py.old diff --git a/lib/obp60task/extra_script.py b/lib/obp60task/extra_script.py deleted file mode 100644 index b185a93..0000000 --- a/lib/obp60task/extra_script.py +++ /dev/null @@ -1,528 +0,0 @@ -print("running extra...") -import gzip -import shutil -import os -import sys -import inspect -import json -import glob -from datetime import datetime -import re -import pprint -from platformio.project.config import ProjectConfig -from platformio.project.exception import InvalidProjectConfError - -Import("env") -#print(env.Dump()) -OWN_FILE="extra_script.py" -GEN_DIR='lib/generated' -CFG_FILE='web/config.json' -XDR_FILE='web/xdrconfig.json' -INDEXJS="index.js" -INDEXCSS="index.css" -CFG_INCLUDE='GwConfigDefinitions.h' -CFG_INCLUDE_IMPL='GwConfigDefImpl.h' -XDR_INCLUDE='GwXdrTypeMappings.h' -TASK_INCLUDE='GwUserTasks.h' -GROVE_CONFIG="GwM5GroveGen.h" -GROVE_CONFIG_IN="lib/hardware/GwM5Grove.in" -EMBEDDED_INCLUDE="GwEmbeddedFiles.h" - -def getEmbeddedFiles(env): - rt=[] - efiles=env.GetProjectOption("board_build.embed_files") - for f in efiles.split("\n"): - if f == '': - continue - rt.append(f) - return rt - -def basePath(): - #see: https://stackoverflow.com/questions/16771894/python-nameerror-global-name-file-is-not-defined - return os.path.dirname(inspect.getfile(lambda: None)) - -def outPath(): - return os.path.join(basePath(),GEN_DIR) -def checkDir(): - dn=outPath() - if not os.path.exists(dn): - os.makedirs(dn) - if not os.path.isdir(dn): - print("unable to create %s"%dn) - return False - return True - -def isCurrent(infile,outfile): - if os.path.exists(outfile): - otime=os.path.getmtime(outfile) - itime=os.path.getmtime(infile) - if (otime >= itime): - own=os.path.join(basePath(),OWN_FILE) - if os.path.exists(own): - owntime=os.path.getmtime(own) - if owntime > otime: - return False - print("%s is newer then %s, no need to recreate"%(outfile,infile)) - return True - return False -def compressFile(inFile,outfile): - if isCurrent(inFile,outfile): - return - print("compressing %s"%inFile) - with open(inFile, 'rb') as f_in: - with gzip.open(outfile, 'wb') as f_out: - shutil.copyfileobj(f_in, f_out) - -def generateFile(infile,outfile,callback,inMode='rb',outMode='w'): - if isCurrent(infile,outfile): - return - print("creating %s"%outfile) - oh=None - with open(infile,inMode) as ch: - with open(outfile,outMode) as oh: - try: - callback(ch,oh,inFile=infile) - oh.close() - except Exception as e: - try: - oh.close() - except: - pass - os.unlink(outfile) - raise - -def writeFileIfChanged(fileName,data): - if os.path.exists(fileName): - with open(fileName,"r") as ih: - old=ih.read() - ih.close() - if old == data: - return False - print("#generating %s"%fileName) - with open(fileName,"w") as oh: - oh.write(data) - return True - -def mergeConfig(base,other): - try: - customconfig = env.GetProjectOption("custom_config") - except InvalidProjectConfError: - customconfig = None - for bdir in other: - if customconfig and os.path.exists(os.path.join(bdir,customconfig)): - cname=os.path.join(bdir,customconfig) - print("merge custom config {}".format(cname)) - with open(cname,'rb') as ah: - base += json.load(ah) - continue - cname=os.path.join(bdir,"config.json") - if os.path.exists(cname): - print("merge config %s"%cname) - with open(cname,'rb') as ah: - merge=json.load(ah) - base=base+merge - return base - -def replaceTexts(data,replacements): - if replacements is None: - return data - if isinstance(data,str): - for k,v in replacements.items(): - data=data.replace("$"+k,str(v)) - return data - if isinstance(data,list): - rt=[] - for e in data: - rt.append(replaceTexts(e,replacements)) - return rt - if isinstance(data,dict): - rt={} - for k,v in data.items(): - rt[replaceTexts(k,replacements)]=replaceTexts(v,replacements) - return rt - return data -def expandConfig(config): - rt=[] - for item in config: - type=item.get('type') - if type != 'array': - rt.append(item) - continue - replacements=item.get('replace') - children=item.get('children') - name=item.get('name') - if name is None: - name="#unknown#" - if not isinstance(replacements,list): - raise Exception("missing replacements at array %s"%name) - for replace in replacements: - if children is not None: - for c in children: - rt.append(replaceTexts(c,replace)) - return rt - -def generateMergedConfig(inFile,outFile,addDirs=[]): - if not os.path.exists(inFile): - raise Exception("unable to read cfg file %s"%inFile) - data="" - with open(inFile,'rb') as ch: - config=json.load(ch) - config=mergeConfig(config,addDirs) - config=expandConfig(config) - data=json.dumps(config,indent=2) - writeFileIfChanged(outFile,data) - -def generateCfg(inFile,outFile,impl): - if not os.path.exists(inFile): - raise Exception("unable to read cfg file %s"%inFile) - data="" - with open(inFile,'rb') as ch: - config=json.load(ch) - data+="//generated from %s\n"%inFile - l=len(config) - idx=0 - if not impl: - data+='#include "GwConfigItem.h"\n' - data+='class GwConfigDefinitions{\n' - data+=' public:\n' - data+=' int getNumConfig() const{return %d;}\n'%(l) - for item in config: - n=item.get('name') - if n is None: - continue - if len(n) > 15: - raise Exception("%s: config names must be max 15 caracters"%n) - data+=' static constexpr const char* %s="%s";\n'%(n,n) - data+="};\n" - else: - data+='void GwConfigHandler::populateConfigs(GwConfigInterface **config){\n' - for item in config: - name=item.get('name') - if name is None: - continue - data+=' configs[%d]='%(idx) - idx+=1 - secret="false"; - if item.get('type') == 'password': - secret="true" - data+=" new GwConfigInterface(%s,\"%s\",%s);\n"%(name,item.get('default'),secret) - data+='}\n' - writeFileIfChanged(outFile,data) - -def labelFilter(label): - return re.sub("[^a-zA-Z0-9]","",re.sub("\([0-9]*\)","",label)) -def generateXdrMappings(fp,oh,inFile=''): - jdoc=json.load(fp) - oh.write("static GwXDRTypeMapping* typeMappings[]={\n") - first=True - for cat in jdoc: - item=jdoc[cat] - cid=item.get('id') - if cid is None: - continue - tc=item.get('type') - if tc is not None: - if first: - first=False - else: - oh.write(",\n") - oh.write(" new GwXDRTypeMapping(%d,0,%d) /*%s*/"%(cid,tc,cat)) - fields=item.get('fields') - if fields is None: - continue - idx=0 - for fe in fields: - if not isinstance(fe,dict): - continue - tc=fe.get('t') - id=fe.get('v') - if id is None: - id=idx - idx+=1 - l=fe.get('l') or '' - if tc is None or id is None: - continue - if first: - first=False - else: - oh.write(",\n") - oh.write(" new GwXDRTypeMapping(%d,%d,%d) /*%s:%s*/"%(cid,id,tc,cat,l)) - oh.write("\n") - oh.write("};\n") - for cat in jdoc: - item=jdoc[cat] - cid=item.get('id') - if cid is None: - continue - selectors=item.get('selector') - if selectors is not None: - for selector in selectors: - label=selector.get('l') - value=selector.get('v') - if label is not None and value is not None: - label=labelFilter(label) - define=("GWXDRSEL_%s_%s"%(cat,label)).upper() - oh.write(" #define %s %s\n"%(define,value)) - fields=item.get('fields') - if fields is not None: - idx=0 - for field in fields: - v=field.get('v') - if v is None: - v=idx - else: - v=int(v) - label=field.get('l') - if v is not None and label is not None: - define=("GWXDRFIELD_%s_%s"%(cat,labelFilter(label))).upper(); - oh.write(" #define %s %s\n"%(define,str(v))) - idx+=1 - -class Grove: - def __init__(self,name) -> None: - self.name=name - def _ss(self,z=False): - if z: - return self.name - return self.name if self.name != 'Z' else '' - def _suffix(self): - return '_'+self.name if self.name != 'Z' else '' - def replace(self,line): - if line is None: - return line - return line.replace('$G$',self._ss()).replace('$Z$',self._ss(True)).replace('$GS$',self._suffix()) -def generateGroveDefs(inh,outh,inFile=''): - GROVES=[Grove('Z'),Grove('A'),Grove('B'),Grove('C')] - definition=[] - started=False - def writeConfig(): - for grove in GROVES: - for cl in definition: - outh.write(grove.replace(cl)) - - for line in inh: - if re.match(" *#GROVE",line): - started=True - if len(definition) > 0: - writeConfig() - definition=[] - continue - if started: - definition.append(line) - if len(definition) > 0: - writeConfig() - - - -userTaskDirs=[] - -def getUserTaskDirs(): - rt=[] - taskdirs=glob.glob(os.path.join( basePath(),'lib','*task*')) - for task in taskdirs: - rt.append(task) - return rt - -def checkAndAdd(file,names,ilist): - if not file.endswith('.h'): - return - match=False - for cmp in names: - #print("##check %s<->%s"%(f.lower(),cmp)) - if file.lower() == cmp: - match=True - if not match: - return - ilist.append(file) -def genereateUserTasks(outfile): - includes=[] - for task in userTaskDirs: - #print("##taskdir=%s"%task) - base=os.path.basename(task) - includeNames=[base.lower()+".h",'gw'+base.lower()+'.h'] - for f in os.listdir(task): - checkAndAdd(f,includeNames,includes) - includeData="" - for i in includes: - print("#task include %s"%i) - includeData+="#include <%s>\n"%i - writeFileIfChanged(outfile,includeData) - -def generateEmbedded(elist,outFile): - content="" - for entry in elist: - content+="EMBED_GZ_FILE(\"%s\",%s,\"%s\");\n"%entry - writeFileIfChanged(outFile,content) - -def getContentType(fn): - if (fn.endswith('.gz')): - fn=fn[0:-3] - if (fn.endswith('html')): - return "text/html" - if (fn.endswith('json')): - return "application/json" - if (fn.endswith('js')): - return "text/javascript" - if (fn.endswith('css')): - return "text/css" - return "application/octet-stream" - - -def getLibs(): - base=os.path.join(basePath(),"lib") - rt=[] - for sd in os.listdir(base): - if sd == '..': - continue - if sd == '.': - continue - fn=os.path.join(base,sd) - if os.path.isdir(fn): - rt.append(sd) - EXTRAS=['generated'] - for e in EXTRAS: - if not e in rt: - rt.append(e) - return rt - - - -def joinFiles(target,pattern,dirlist): - flist=[] - for dir in dirlist: - fn=os.path.join(dir,pattern) - if os.path.exists(fn): - flist.append(fn) - current=False - if os.path.exists(target): - current=True - for f in flist: - if not isCurrent(f,target): - current=False - break - if current: - print("%s is up to date"%target) - return - print("creating %s"%target) - with gzip.open(target,"wb") as oh: - for fn in flist: - print("adding %s to %s"%(fn,target)) - with open(fn,"rb") as rh: - shutil.copyfileobj(rh,oh) - - -OWNLIBS=getLibs()+["FS","WiFi"] -GLOBAL_INCLUDES=[] - -def handleDeps(env): - #overwrite the GetProjectConfig - #to inject all our libs - oldGetProjectConfig=env.GetProjectConfig - def GetProjectConfigX(env): - rt=oldGetProjectConfig() - cenv="env:"+env['PIOENV'] - libs=[] - for section,options in rt.as_tuple(): - if section == cenv: - for key,values in options: - if key == 'lib_deps': - libs=values - - mustUpdate=False - for lib in OWNLIBS: - if not lib in libs: - libs.append(lib) - mustUpdate=True - if mustUpdate: - update=[(cenv,[('lib_deps',libs)])] - rt.update(update) - return rt - env.AddMethod(GetProjectConfigX,"GetProjectConfig") - #store the list of all includes after we resolved - #the dependencies for our main project - #we will use them for all compilations afterwards - oldLibBuilder=env.ConfigureProjectLibBuilder - def ConfigureProjectLibBuilderX(env): - global GLOBAL_INCLUDES - project=oldLibBuilder() - #print("##ConfigureProjectLibBuilderX") - #pprint.pprint(project) - if project.depbuilders: - #print("##depbuilders %s"%",".join(map(lambda x: x.path,project.depbuilders))) - for db in project.depbuilders: - idirs=db.get_include_dirs() - for id in idirs: - if not id in GLOBAL_INCLUDES: - GLOBAL_INCLUDES.append(id) - return project - env.AddMethod(ConfigureProjectLibBuilderX,"ConfigureProjectLibBuilder") - def injectIncludes(env,node): - return env.Object( - node, - CPPPATH=env["CPPPATH"]+GLOBAL_INCLUDES - ) - env.AddBuildMiddleware(injectIncludes) - - -def prebuild(env): - global userTaskDirs - print("#prebuild running") - if not checkDir(): - sys.exit(1) - ldf_mode=env.GetProjectOption("lib_ldf_mode") - if ldf_mode == 'off': - print("##ldf off - own dependency handling") - handleDeps(env) - userTaskDirs=getUserTaskDirs() - mergedConfig=os.path.join(outPath(),os.path.basename(CFG_FILE)) - generateMergedConfig(os.path.join(basePath(),CFG_FILE),mergedConfig,userTaskDirs) - compressFile(mergedConfig,mergedConfig+".gz") - generateCfg(mergedConfig,os.path.join(outPath(),CFG_INCLUDE),False) - generateCfg(mergedConfig,os.path.join(outPath(),CFG_INCLUDE_IMPL),True) - joinFiles(os.path.join(outPath(),INDEXJS+".gz"),INDEXJS,["web"]+userTaskDirs) - joinFiles(os.path.join(outPath(),INDEXCSS+".gz"),INDEXCSS,["web"]+userTaskDirs) - embedded=getEmbeddedFiles(env) - filedefs=[] - for ef in embedded: - print("#checking embedded file %s"%ef) - (dn,fn)=os.path.split(ef) - pureName=fn - if pureName.endswith('.gz'): - pureName=pureName[0:-3] - ct=getContentType(pureName) - usname=ef.replace('/','_').replace('.','_') - filedefs.append((pureName,usname,ct)) - inFile=os.path.join(basePath(),"web",pureName) - if os.path.exists(inFile): - compressFile(inFile,ef) - else: - print("#WARNING: infile %s for %s not found"%(inFile,ef)) - generateEmbedded(filedefs,os.path.join(outPath(),EMBEDDED_INCLUDE)) - genereateUserTasks(os.path.join(outPath(), TASK_INCLUDE)) - generateFile(os.path.join(basePath(),XDR_FILE),os.path.join(outPath(),XDR_INCLUDE),generateXdrMappings) - generateFile(os.path.join(basePath(),GROVE_CONFIG_IN),os.path.join(outPath(),GROVE_CONFIG),generateGroveDefs,inMode='r') - version="dev"+datetime.now().strftime("%Y%m%d") - env.Append(CPPDEFINES=[('GWDEVVERSION',version)]) - -def cleangenerated(source, target, env): - od=outPath() - if os.path.isdir(od): - print("#cleaning up %s"%od) - for f in os.listdir(od): - if f == "." or f == "..": - continue - fn=os.path.join(od,f) - os.unlink(f) - - -print("#prescript...") -prebuild(env) -board="PLATFORM_BOARD_%s"%env["BOARD"].replace("-","_").upper() -print("Board=#%s#"%board) -print("BuildFlags=%s"%(" ".join(env["BUILD_FLAGS"]))) -env.Append( - LINKFLAGS=[ "-u", "custom_app_desc" ], - CPPDEFINES=[(board,"1")] -) -#script does not run on clean yet - maybe in the future -env.AddPostAction("clean",cleangenerated) From 07a1b2388ee8fa1dc773d323c54873ca97e7be07 Mon Sep 17 00:00:00 2001 From: norbert-walter Date: Thu, 3 Jul 2025 22:41:12 +0200 Subject: [PATCH 31/36] Fix for voltage sensor OBP40 --- lib/obp60task/OBPSensorTask.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/obp60task/OBPSensorTask.cpp b/lib/obp60task/OBPSensorTask.cpp index 500389e..0215811 100644 --- a/lib/obp60task/OBPSensorTask.cpp +++ b/lib/obp60task/OBPSensorTask.cpp @@ -498,10 +498,12 @@ void sensorTask(void *param){ // Send supply voltage value all 1s if(millis() > starttime5 + 1000 && String(powsensor1) == "off"){ starttime5 = millis(); - #ifdef VOLTAGE_SENSOR - float rawVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.53) * 2; // Vin = 1/2 for OBP40 - #else - float rawVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.17) * 20; // Vin = 1/20 for OBP60 + float rawVoltage = 0; + #ifdef BOARD_OBP40S3 && VOLTAGE_SENSOR + rawVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.53) * 2; // Vin = 1/2 for OBP40 + #endif + #ifdef BOARD_OBP60S3 + rawVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.17) * 20; // Vin = 1/20 for OBP60 #endif sensors.batteryVoltage = rawVoltage * vslope + voffset; // Calibration // Save new data in average array @@ -510,7 +512,7 @@ void sensorTask(void *param){ sensors.batteryVoltage10 = batV.getAvg(10) / 100.0; sensors.batteryVoltage60 = batV.getAvg(60) / 100.0; sensors.batteryVoltage300 = batV.getAvg(300) / 100.0; - #if defined LIPO_ACCU_1200 && defined VOLTAGE_SENSOR + #if BOARD_OBP40S3 && defined LIPO_ACCU_1200 && defined VOLTAGE_SENSOR // Polynomfit for LiPo capacity calculation for 3,7V LiPo accus, 0...100% sensors.batteryLevelLiPo = sensors.batteryVoltage60 * 203.8312 -738.1635; // Limiter From d1c620a85839b2f104f99ae5a7cb74adf3d99081 Mon Sep 17 00:00:00 2001 From: norbert-walter Date: Fri, 4 Jul 2025 14:11:22 +0200 Subject: [PATCH 32/36] Fix for compass page --- lib/obp60task/PageCompass.cpp | 311 ++++++++++++++++---------------- lib/obp60task/config_obp40.json | 10 + lib/obp60task/obp60task.cpp | 2 + 3 files changed, 167 insertions(+), 156 deletions(-) diff --git a/lib/obp60task/PageCompass.cpp b/lib/obp60task/PageCompass.cpp index 003577c..691cf8f 100644 --- a/lib/obp60task/PageCompass.cpp +++ b/lib/obp60task/PageCompass.cpp @@ -19,8 +19,8 @@ const int ShowDBS = 5; const int Compass_X0 = 200; // center point of compass band const int Compass_Y0 = 220; // position of compass lines -const int Compass_LineLength = 22; // length of compass lines -const float Compass_LineDelta = 8.0; // compass band: 1deg = 5 Pixels, 10deg = 50 Pixels +const int Compass_LineLength = 22; // length of compass lines +const float Compass_LineDelta = 8.0;// compass band: 1deg = 5 Pixels, 10deg = 50 Pixels class PageCompass : public Page { @@ -64,180 +64,179 @@ class PageCompass : public Page virtual void displayPage(PageData &pageData){ GwConfigHandler *config = commonData->config; GwLog *logger = commonData->logger; + + // Old values for hold function + static String OldDataText[HowManyValues] = {"", "", "","", "", ""}; + static String OldDataUnits[HowManyValues] = {"", "", "","", "", ""}; - - // Old values for hold function - static String OldDataText[HowManyValues] = {"", "", "","", "", ""}; - static String OldDataUnits[HowManyValues] = {"", "", "","", "", ""}; - - // Get config data - String lengthformat = config->getString(config->lengthFormat); - // bool simulation = config->getBool(config->useSimuData); - bool holdvalues = config->getBool(config->holdvalues); - String flashLED = config->getString(config->flashLED); - String backlightMode = config->getString(config->backlight); - - GwApi::BoatValue *bvalue; - String DataName[HowManyValues]; - double DataValue[HowManyValues]; - bool DataValid[HowManyValues]; - String DataText[HowManyValues]; - String DataUnits[HowManyValues]; - String DataFormat[HowManyValues]; - FormatedData TheFormattedData; - - for (int i = 0; i < HowManyValues; i++){ - bvalue = pageData.values[i]; - TheFormattedData = formatValue(bvalue, *commonData); - DataName[i] = xdrDelete(bvalue->getName()); - DataName[i] = DataName[i].substring(0, 6); // String length limit for value name - DataUnits[i] = formatValue(bvalue, *commonData).unit; - DataText[i] = TheFormattedData.svalue; // Formatted value as string including unit conversion and switching decimal places - DataValue[i] = TheFormattedData.value; // Value as double in SI unit - DataValid[i] = bvalue->valid; - DataFormat[i] = bvalue->getFormat(); // Unit of value - LOG_DEBUG(GwLog::LOG,"Drawing at PageCompass: %d %s %f %s %s", i, DataName[i], DataValue[i], DataFormat[i], DataText[i] ); - } + // Get config data + String lengthformat = config->getString(config->lengthFormat); + // bool simulation = config->getBool(config->useSimuData); + bool holdvalues = config->getBool(config->holdvalues); + String flashLED = config->getString(config->flashLED); + String backlightMode = config->getString(config->backlight); + + GwApi::BoatValue *bvalue; + String DataName[HowManyValues]; + double DataValue[HowManyValues]; + bool DataValid[HowManyValues]; + String DataText[HowManyValues]; + String DataUnits[HowManyValues]; + String DataFormat[HowManyValues]; + FormatedData TheFormattedData; - // Optical warning by limit violation (unused) - if(String(flashLED) == "Limit Violation"){ - setBlinkingLED(false); - setFlashLED(false); - } - - if (bvalue == NULL) return; - - //*********************************************************** - - // Set display in partial refresh mode - getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update - getdisplay().setTextColor(commonData->fgcolor); + for (int i = 0; i < HowManyValues; i++){ + bvalue = pageData.values[i]; + TheFormattedData = formatValue(bvalue, *commonData); + DataName[i] = xdrDelete(bvalue->getName()); + DataName[i] = DataName[i].substring(0, 6); // String length limit for value name + DataUnits[i] = formatValue(bvalue, *commonData).unit; + DataText[i] = TheFormattedData.svalue; // Formatted value as string including unit conversion and switching decimal places + DataValue[i] = TheFormattedData.value; // Value as double in SI unit + DataValid[i] = bvalue->valid; + DataFormat[i] = bvalue->getFormat(); // Unit of value + LOG_DEBUG(GwLog::LOG,"Drawing at PageCompass: %d %s %f %s %s", i, DataName[i], DataValue[i], DataFormat[i], DataText[i] ); + } - // Horizontal line 3 pix top & bottom - // print Data on top half - getdisplay().fillRect(0, 23, 400, 3, commonData->fgcolor); - getdisplay().setFont(&Ubuntu_Bold20pt7b); - getdisplay().setCursor(10, 70); - getdisplay().print(DataName[WhichDataDisplay]); // Page name - // Show unit - getdisplay().setFont(&Ubuntu_Bold12pt7b); - getdisplay().setCursor(10, 120); - getdisplay().print(DataUnits[WhichDataDisplay]); - getdisplay().setCursor(200, 120); - getdisplay().setFont(&DSEG7Classic_BoldItalic42pt7b); + // Optical warning by limit violation (unused) + if(String(flashLED) == "Limit Violation"){ + setBlinkingLED(false); + setFlashLED(false); + } + + if (bvalue == NULL) return; + + //*********************************************************** + + // Set display in partial refresh mode + getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update + getdisplay().setTextColor(commonData->fgcolor); + + // Horizontal line 2 pix top & bottom + // Print data on top half + getdisplay().fillRect(0, 130, 400, 2, commonData->fgcolor); + getdisplay().setFont(&Ubuntu_Bold20pt7b); + getdisplay().setCursor(10, 70); + getdisplay().print(DataName[WhichDataDisplay]); // Page name + // Show unit + getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setCursor(10, 120); + getdisplay().print(DataUnits[WhichDataDisplay]); + getdisplay().setCursor(190, 120); + getdisplay().setFont(&DSEG7Classic_BoldItalic42pt7b); - if(holdvalues == false){ - getdisplay().print(DataText[WhichDataDisplay]); // Real value as formated string + if(holdvalues == false){ + getdisplay().print(DataText[WhichDataDisplay]); // Real value as formated string } else{ - getdisplay().print(OldDataText[WhichDataDisplay]); // Old value as formated string + getdisplay().print(OldDataText[WhichDataDisplay]); // Old value as formated string } if(DataValid[WhichDataDisplay] == true){ - OldDataText[WhichDataDisplay] = DataText[WhichDataDisplay]; // Save the old value - OldDataUnits[WhichDataDisplay] = DataUnits[WhichDataDisplay]; // Save the old unit - } - // now draw compass band - // get the data - double TheAngle = DataValue[WhichDataCompass]; - static double AvgAngle = 0; - AvgAngle = ( AvgAngle * AverageValues + TheAngle ) / (AverageValues + 1 ); + OldDataText[WhichDataDisplay] = DataText[WhichDataDisplay]; // Save the old value + OldDataUnits[WhichDataDisplay] = DataUnits[WhichDataDisplay]; // Save the old unit + } - int TheTrend = round( ( TheAngle - AvgAngle) * 180.0 / M_PI ); - - static const int bsize = 30; - char buffer[bsize+1]; - buffer[0]=0; - - getdisplay().setFont(&Ubuntu_Bold16pt7b); - getdisplay().setCursor(10, Compass_Y0-60); - getdisplay().print(DataName[WhichDataCompass]); // Page name + // Now draw compass band + // Get the data + double TheAngle = DataValue[WhichDataCompass]; + static double AvgAngle = 0; + AvgAngle = ( AvgAngle * AverageValues + TheAngle ) / (AverageValues + 1 ); + + int TheTrend = round( ( TheAngle - AvgAngle) * 180.0 / M_PI ); + + static const int bsize = 30; + char buffer[bsize+1]; + buffer[0]=0; + + getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setCursor(10, Compass_Y0-60); + getdisplay().print(DataName[WhichDataCompass]); // Page name - // draw compass base line and pointer - getdisplay().fillRect(0, Compass_Y0, 400, 3, commonData->fgcolor); - getdisplay().fillTriangle(Compass_X0,Compass_Y0-40,Compass_X0-10,Compass_Y0-80,Compass_X0+10,Compass_Y0-80,commonData->fgcolor); -// draw trendlines - for ( int i = 1; i < abs(TheTrend) / 2; i++){ - int x1; - if ( TheTrend < 0 ) - x1 = Compass_X0 + 20 * i; - else - x1 = Compass_X0 - 20 * ( i + 1 ); + // Draw compass base line and pointer + getdisplay().fillRect(0, Compass_Y0, 400, 3, commonData->fgcolor); + getdisplay().fillTriangle(Compass_X0,Compass_Y0-40,Compass_X0-10,Compass_Y0-80,Compass_X0+10,Compass_Y0-80,commonData->fgcolor); + // Draw trendlines + for ( int i = 1; i < abs(TheTrend) / 2; i++){ + int x1; + if ( TheTrend < 0 ) + x1 = Compass_X0 + 20 * i; + else + x1 = Compass_X0 - 20 * ( i + 1 ); - getdisplay().fillRect(x1, Compass_Y0 -60, 10, 6, commonData->fgcolor); - } -// central line + satellite lines - double NextSector = round(TheAngle / ( M_PI / 9 )) * ( M_PI / 9 ); // get the next 20degree value - double Offset = - ( NextSector - TheAngle); // offest of the center line compared to TheAngle in Radian - - int Delta_X = int ( Offset * 180.0 / M_PI * Compass_LineDelta ); - for ( int i = 0; i <=4; i++ ) - { - int x0; - x0 = Compass_X0 + Delta_X + 2 * i * 5 * Compass_LineDelta; - getdisplay().fillRect(x0-1, Compass_Y0 - 2 * Compass_LineLength,3, 2 * Compass_LineLength, commonData->fgcolor); - x0 = Compass_X0 + Delta_X + ( 2 * i + 1 ) * 5 * Compass_LineDelta; - getdisplay().fillRect(x0-1, Compass_Y0 - Compass_LineLength,3, Compass_LineLength, commonData->fgcolor); + getdisplay().fillRect(x1, Compass_Y0 -55, 10, 6, commonData->fgcolor); + } + // Central line + satellite lines + double NextSector = round(TheAngle / ( M_PI / 9 )) * ( M_PI / 9 ); // Get the next 20degree value + double Offset = - ( NextSector - TheAngle); // Offest of the center line compared to TheAngle in Radian + + int Delta_X = int ( Offset * 180.0 / M_PI * Compass_LineDelta ); + for ( int i = 0; i <=4; i++ ){ + int x0; + x0 = Compass_X0 + Delta_X + 2 * i * 5 * Compass_LineDelta; + getdisplay().fillRect(x0-2, Compass_Y0 - 2 * Compass_LineLength, 5, 2 * Compass_LineLength, commonData->fgcolor); + x0 = Compass_X0 + Delta_X + ( 2 * i + 1 ) * 5 * Compass_LineDelta; + getdisplay().fillRect(x0-1, Compass_Y0 - Compass_LineLength, 3, Compass_LineLength, commonData->fgcolor); - x0 = Compass_X0 + Delta_X - 2 * i * 5 * Compass_LineDelta; - getdisplay().fillRect(x0-1, Compass_Y0 - 2 * Compass_LineLength,3, 2 * Compass_LineLength, commonData->fgcolor); - x0 = Compass_X0 + Delta_X - ( 2 * i + 1 ) * 5 * Compass_LineDelta; - getdisplay().fillRect(x0-1, Compass_Y0 - Compass_LineLength,3, Compass_LineLength, commonData->fgcolor); - } + x0 = Compass_X0 + Delta_X - 2 * i * 5 * Compass_LineDelta; + getdisplay().fillRect(x0-2, Compass_Y0 - 2 * Compass_LineLength, 5, 2 * Compass_LineLength, commonData->fgcolor); + x0 = Compass_X0 + Delta_X - ( 2 * i + 1 ) * 5 * Compass_LineDelta; + getdisplay().fillRect(x0-1, Compass_Y0 - Compass_LineLength, 3, Compass_LineLength, commonData->fgcolor); + } - getdisplay().fillRect(0, Compass_Y0, 400, 3, commonData->fgcolor); - // add the numbers to the compass band - int x0; - float AngleToDisplay = NextSector * 180.0 / M_PI; + getdisplay().fillRect(0, Compass_Y0, 400, 3, commonData->fgcolor); + // Add the numbers to the compass band + int x0; + float AngleToDisplay = NextSector * 180.0 / M_PI; - x0 = Compass_X0 + Delta_X; - getdisplay().setFont(&DSEG7Classic_BoldItalic16pt7b); + x0 = Compass_X0 + Delta_X; + getdisplay().setFont(&DSEG7Classic_BoldItalic16pt7b); - do { - getdisplay().setCursor(x0 - 40, Compass_Y0 + 40); - snprintf(buffer,bsize,"%03.0f", AngleToDisplay); - getdisplay().print(buffer); - AngleToDisplay += 20; - if ( AngleToDisplay >= 360.0 ) - AngleToDisplay -= 360.0; - x0 -= 4 * 5 * Compass_LineDelta; - } while ( x0 >= 0 - 60 ); - - AngleToDisplay = NextSector * 180.0 / M_PI - 20; + do { + getdisplay().setCursor(x0 - 40, Compass_Y0 + 40); + snprintf(buffer,bsize,"%03.0f", AngleToDisplay); + getdisplay().print(buffer); + AngleToDisplay += 20; + if ( AngleToDisplay >= 360.0 ) + AngleToDisplay -= 360.0; + x0 -= 4 * 5 * Compass_LineDelta; + } while ( x0 >= 0 - 60 ); + + AngleToDisplay = NextSector * 180.0 / M_PI - 20; + if ( AngleToDisplay < 0 ) + AngleToDisplay += 360.0; + + x0 = Compass_X0 + Delta_X + 4 * 5 * Compass_LineDelta; + do { + getdisplay().setCursor(x0 - 40, Compass_Y0 + 40); + snprintf(buffer,bsize,"%03.0f", AngleToDisplay); + // Quick and dirty way to prevent wrapping text in next line + if ( ( x0 - 40 ) > 380 ) + buffer[0] = 0; + else if ( ( x0 - 40 ) > 355 ) + buffer[1] = 0; + else if ( ( x0 - 40 ) > 325 ) + buffer[2] = 0; + + getdisplay().print(buffer); + + AngleToDisplay -= 20; if ( AngleToDisplay < 0 ) AngleToDisplay += 360.0; - - x0 = Compass_X0 + Delta_X + 4 * 5 * Compass_LineDelta; - do { - getdisplay().setCursor(x0 - 40, Compass_Y0 + 40); - snprintf(buffer,bsize,"%03.0f", AngleToDisplay); - // quick and dirty way to prevent wrapping text in next line - if ( ( x0 - 40 ) > 380 ) - buffer[0] = 0; - else if ( ( x0 - 40 ) > 355 ) - buffer[1] = 0; - else if ( ( x0 - 40 ) > 325 ) - buffer[2] = 0; - - getdisplay().print(buffer); - - AngleToDisplay -= 20; - if ( AngleToDisplay < 0 ) - AngleToDisplay += 360.0; - x0 += 4 * 5 * Compass_LineDelta; - } while (x0 < ( 400 - 20 -40 ) ); - - // static int x_test = 320; - // x_test += 2; + x0 += 4 * 5 * Compass_LineDelta; + } while (x0 < ( 400 - 20 -40 ) ); - // snprintf(buffer,bsize,"%03d", x_test); - // getdisplay().setCursor(x_test, Compass_Y0 - 60); - // getdisplay().print(buffer); - // if ( x_test > 390) - // x_test = 320; + // static int x_test = 320; + // x_test += 2; - // Update display - getdisplay().nextPage(); // Partial update (fast) + // snprintf(buffer,bsize,"%03d", x_test); + // getdisplay().setCursor(x_test, Compass_Y0 - 60); + // getdisplay().print(buffer); + // if ( x_test > 390) + // x_test = 320; + + // Update display + getdisplay().nextPage(); // Partial update (fast) }; diff --git a/lib/obp60task/config_obp40.json b/lib/obp60task/config_obp40.json index a03b359..1817e64 100644 --- a/lib/obp60task/config_obp40.json +++ b/lib/obp60task/config_obp40.json @@ -1187,6 +1187,7 @@ "Battery", "Battery2", "Clock", + "Compass", "DST810", "Fluid", "FourValues", @@ -1466,6 +1467,7 @@ "Battery", "Battery2", "Clock", + "Compass", "DST810", "Fluid", "FourValues", @@ -1742,6 +1744,7 @@ "Battery", "Battery2", "Clock", + "Compass", "DST810", "Fluid", "FourValues", @@ -2015,6 +2018,7 @@ "Battery", "Battery2", "Clock", + "Compass", "DST810", "Fluid", "FourValues", @@ -2285,6 +2289,7 @@ "Battery", "Battery2", "Clock", + "Compass", "DST810", "Fluid", "FourValues", @@ -2552,6 +2557,7 @@ "Battery", "Battery2", "Clock", + "Compass", "DST810", "Fluid", "FourValues", @@ -2816,6 +2822,7 @@ "Battery", "Battery2", "Clock", + "Compass", "DST810", "Fluid", "FourValues", @@ -3077,6 +3084,7 @@ "Battery", "Battery2", "Clock", + "Compass", "DST810", "Fluid", "FourValues", @@ -3335,6 +3343,7 @@ "Battery", "Battery2", "Clock", + "Compass", "DST810", "Fluid", "FourValues", @@ -3590,6 +3599,7 @@ "Battery", "Battery2", "Clock", + "Compass", "DST810", "Fluid", "FourValues", diff --git a/lib/obp60task/obp60task.cpp b/lib/obp60task/obp60task.cpp index fb3ef6f..7d25ab6 100644 --- a/lib/obp60task/obp60task.cpp +++ b/lib/obp60task/obp60task.cpp @@ -285,6 +285,8 @@ void registerAllPages(PageList &list){ list.add(®isterPageDST810); extern PageDescription registerPageClock; list.add(®isterPageClock); + extern PageDescription registerPageCompass; + list.add(®isterPageCompass); extern PageDescription registerPageWhite; list.add(®isterPageWhite); extern PageDescription registerPageBME280; From d0e2fc1eac75dce84f73db4ff50a5ae1fd1c0c9b Mon Sep 17 00:00:00 2001 From: TobiasE-github Date: Sun, 6 Jul 2025 15:41:18 +0200 Subject: [PATCH 33/36] Fix error message in lib/obp60task/OBPSensorTask.cpp --- lib/obp60task/OBPSensorTask.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/obp60task/OBPSensorTask.cpp b/lib/obp60task/OBPSensorTask.cpp index 0215811..311da1c 100644 --- a/lib/obp60task/OBPSensorTask.cpp +++ b/lib/obp60task/OBPSensorTask.cpp @@ -499,7 +499,7 @@ void sensorTask(void *param){ if(millis() > starttime5 + 1000 && String(powsensor1) == "off"){ starttime5 = millis(); float rawVoltage = 0; - #ifdef BOARD_OBP40S3 && VOLTAGE_SENSOR + #if defined(BOARD_OBP40S3) && defined(VOLTAGE_SENSOR) rawVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.53) * 2; // Vin = 1/2 for OBP40 #endif #ifdef BOARD_OBP60S3 From 2095efbb013516467486e3f7fb9b3a1f8c128ead Mon Sep 17 00:00:00 2001 From: norbert-walter Date: Mon, 7 Jul 2025 15:04:02 +0200 Subject: [PATCH 34/36] Delete obp60task.cpp in root --- obp60task.cpp | 853 -------------------------------------------------- 1 file changed, 853 deletions(-) delete mode 100644 obp60task.cpp diff --git a/obp60task.cpp b/obp60task.cpp deleted file mode 100644 index a364dc8..0000000 --- a/obp60task.cpp +++ /dev/null @@ -1,853 +0,0 @@ -#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3 -#include "obp60task.h" -#include "Pagedata.h" // Data exchange for pages -#include "OBP60Hardware.h" // PIN definitions -#include // I2C connections -#include // MCP23017 extension Port -#include // NMEA2000 -#include -#include // NMEA0183 -#include -#include -#include // GxEPD2 lib for b/w E-Ink displays -#include "OBP60Extensions.h" // Functions lib for extension board -#include "OBP60Keypad.h" // Functions for keypad - -#ifdef BOARD_OBP40S3 -#include "driver/rtc_io.h" // Needs for weakup from deep sleep -#include // SD-Card access -#include -#include -#endif - -// True type character sets includes -// See OBP60ExtensionPort.cpp - -// Pictures -//#include GxEPD_BitmapExamples // Example picture -#include "MFD_OBP60_400x300_sw.h" // MFD with logo -#include "Logo_OBP_400x300_sw.h" // OBP Logo -#include "images/unknown.xbm" // unknown page indicator -#include "OBP60QRWiFi.h" // Functions lib for WiFi QR code -#include "OBPSensorTask.h" // Functions lib for sensor data - - -// Global vars -bool initComplete = false; // Initialization complete -int taskRunCounter = 0; // Task couter for loop section - -// Hardware initialization before start all services -//#################################################################################### -void OBP60Init(GwApi *api){ - - GwLog *logger = api->getLogger(); - GwConfigHandler *config = api->getConfig(); - - // Set a new device name and hidden the original name in the main config - String devicename = api->getConfig()->getConfigItem(api->getConfig()->deviceName,true)->asString(); - api->getConfig()->setValue(GwConfigDefinitions::systemName, devicename, GwConfigInterface::ConfigType::HIDDEN); - - api->getLogger()->logDebug(GwLog::LOG,"obp60init running"); - - // Check I2C devices - - - // Init hardware - hardwareInit(api); - - // Init power rail 5.0V - String powermode = api->getConfig()->getConfigItem(api->getConfig()->powerMode,true)->asString(); - api->getLogger()->logDebug(GwLog::DEBUG,"Power Mode is: %s", powermode.c_str()); - if(powermode == "Max Power" || powermode == "Only 5.0V"){ - #ifdef HARDWARE_V21 - setPortPin(OBP_POWER_50, true); // Power on 5.0V rail - #endif - #ifdef BOARD_OBP40S3 - setPortPin(OBP_POWER_EPD, true);// Power on ePaper display - setPortPin(OBP_POWER_SD, true); // Power on SD card - #endif - } - else{ - #ifdef HARDWARE_V21 - setPortPin(OBP_POWER_50, false); // Power off 5.0V rail - #endif - #ifdef BOARD_OBP40S3 - setPortPin(OBP_POWER_EPD, false);// Power off ePaper display - setPortPin(OBP_POWER_SD, false); // Power off SD card - #endif - } - - #ifdef BOARD_OBP40S3 - String sdcard = config->getConfigItem(config->useSDCard, true)->asString(); - if (sdcard == "on") { - SPIClass SD_SPI = SPIClass(HSPI); - SD_SPI.begin(SD_SPI_CLK, SD_SPI_MISO, SD_SPI_MOSI); - if (SD.begin(SD_SPI_CS, SD_SPI, 80000000)) { - String sdtype = "unknown"; - uint8_t cardType = SD.cardType(); - switch (cardType) { - case CARD_MMC: - sdtype = "MMC"; - break; - case CARD_SD: - sdtype = "SDSC"; - break; - case CARD_SDHC: - sdtype = "SDHC"; - break; - } - uint64_t cardSize = SD.cardSize() / (1024 * 1024); - LOG_DEBUG(GwLog::LOG,"SD card type %s of size %d MB detected", sdtype, cardSize); - } - } - - // Deep sleep wakeup configuration - esp_sleep_enable_ext0_wakeup(OBP_WAKEWUP_PIN, 0); // 1 = High, 0 = Low - rtc_gpio_pullup_en(OBP_WAKEWUP_PIN); // Activate pullup resistor - rtc_gpio_pulldown_dis(OBP_WAKEWUP_PIN); // Disable pulldown resistor -#endif - - // Settings for e-paper display - String fastrefresh = api->getConfig()->getConfigItem(api->getConfig()->fastRefresh,true)->asString(); - api->getLogger()->logDebug(GwLog::DEBUG,"Fast Refresh Mode is: %s", fastrefresh.c_str()); - #ifdef DISPLAY_GDEY042T81 - if(fastrefresh == "true"){ - static const bool useFastFullUpdate = true; // Enable fast full display update only for GDEY042T81 - } - #endif - - #ifdef BOARD_OBP60S3 - touchSleepWakeUpEnable(TP1, 45); // TODO sensitivity should be configurable via web interface - touchSleepWakeUpEnable(TP2, 45); - touchSleepWakeUpEnable(TP3, 45); - touchSleepWakeUpEnable(TP4, 45); - touchSleepWakeUpEnable(TP5, 45); - touchSleepWakeUpEnable(TP6, 45); - esp_sleep_enable_touchpad_wakeup(); - #endif - - // Get CPU speed - int freq = getCpuFrequencyMhz(); - api->getLogger()->logDebug(GwLog::LOG,"CPU speed at boot: %i MHz", freq); - - // Settings for backlight - String backlightMode = api->getConfig()->getConfigItem(api->getConfig()->backlight,true)->asString(); - api->getLogger()->logDebug(GwLog::DEBUG,"Backlight Mode is: %s", backlightMode.c_str()); - uint brightness = uint(api->getConfig()->getConfigItem(api->getConfig()->blBrightness,true)->asInt()); - String backlightColor = api->getConfig()->getConfigItem(api->getConfig()->blColor,true)->asString(); - if(String(backlightMode) == "On"){ - setBacklightLED(brightness, colorMapping(backlightColor)); - } - else if(String(backlightMode) == "Off"){ - setBacklightLED(0, COLOR_BLACK); // Backlight LEDs off (blue without britghness) - } - else if(String(backlightMode) == "Control by Key"){ - setBacklightLED(0, COLOR_BLUE); // Backlight LEDs off (blue without britghness) - } - - // Settings flash LED mode - String ledMode = api->getConfig()->getConfigItem(api->getConfig()->flashLED,true)->asString(); - api->getLogger()->logDebug(GwLog::DEBUG,"LED Mode is: %s", ledMode.c_str()); - if(String(ledMode) == "Off"){ - setBlinkingLED(false); - } - - // Marker for init complete - // Used in OBP60Task() - initComplete = true; - - // Buzzer tone for initialization finish - setBuzzerPower(uint(api->getConfig()->getConfigItem(api->getConfig()->buzzerPower,true)->asInt())); - buzzer(TONE4, 500); - -} - -typedef struct { - int page0=0; - QueueHandle_t queue; - GwLog* logger = NULL; -// GwApi* api = NULL; - uint sensitivity = 100; - bool use_syspage = true; - } MyData; - -// Keyboard Task -void keyboardTask(void *param){ - MyData *data=(MyData *)param; - - int keycode = 0; - data->logger->logDebug(GwLog::LOG,"Start keyboard task"); - - // Loop for keyboard task - while (true){ - keycode = readKeypad(data->logger, data->sensitivity, data->use_syspage); - //send a key event - if(keycode != 0){ - xQueueSend(data->queue, &keycode, 0); - data->logger->logDebug(GwLog::LOG,"Send keycode: %d", keycode); - } - delay(20); // 50Hz update rate (20ms) - } - vTaskDelete(NULL); -} - -class BoatValueList{ - public: - static const int MAXVALUES=100; - //we create a list containing all our BoatValues - //this is the list we later use to let the api fill all the values - //additionally we put the necessary values into the paga data - see below - GwApi::BoatValue *allBoatValues[MAXVALUES]; - int numValues=0; - - bool addValueToList(GwApi::BoatValue *v){ - for (int i=0;i= MAXVALUES) return false; - allBoatValues[numValues]=v; - numValues++; - return true; - } - //helper to ensure that each BoatValue is only queried once - GwApi::BoatValue *findValueOrCreate(String name){ - for (int i=0;igetName() == name) { - return allBoatValues[i]; - } - } - GwApi::BoatValue *rt=new GwApi::BoatValue(name); - addValueToList(rt); - return rt; - } -}; - -//we want to have a list that has all our page definitions -//this way each page can easily be added here -//needs some minor tricks for the safe static initialization -typedef std::vector Pages; -//the page list class -class PageList{ - public: - Pages pages; - void add(PageDescription *p){ - pages.push_back(p); - } - PageDescription *find(String name){ - for (auto it=pages.begin();it != pages.end();it++){ - if ((*it)->pageName == name){ - return *it; - } - } - return NULL; - } -}; - -/** - * this function will add all the pages we know to the pagelist - * each page should have defined a registerXXXPage variable of type - * PageData that describes what it needs - */ -void registerAllPages(PageList &list){ - //the next line says that this variable is defined somewhere else - //in our case in a separate C++ source file - //this way this separate source file can be compiled by it's own - //and has no access to any of our data except the one that we - //give as a parameter to the page function - extern PageDescription registerPageSystem; - //we add the variable to our list - list.add(®isterPageSystem); - extern PageDescription registerPageOneValue; - list.add(®isterPageOneValue); - extern PageDescription registerPageTwoValues; - list.add(®isterPageTwoValues); - extern PageDescription registerPageThreeValues; - list.add(®isterPageThreeValues); - extern PageDescription registerPageSixValues; - list.add(®isterPageSixValues); - extern PageDescription registerPageFourValues; - list.add(®isterPageFourValues); - extern PageDescription registerPageFourValues2; - list.add(®isterPageFourValues2); - extern PageDescription registerPageWind; - list.add(®isterPageWind); - extern PageDescription registerPageWindRose; - list.add(®isterPageWindRose); - extern PageDescription registerPageWindRoseFlex; - list.add(®isterPageWindRoseFlex); // - extern PageDescription registerPageVoltage; - list.add(®isterPageVoltage); - extern PageDescription registerPageDST810; - list.add(®isterPageDST810); - extern PageDescription registerPageClock; - list.add(®isterPageClock); - extern PageDescription registerPageWhite; - list.add(®isterPageWhite); - extern PageDescription registerPageBME280; - list.add(®isterPageBME280); - extern PageDescription registerPageRudderPosition; - list.add(®isterPageRudderPosition); - extern PageDescription registerPageKeelPosition; - list.add(®isterPageKeelPosition); - extern PageDescription registerPageBattery; - list.add(®isterPageBattery); - extern PageDescription registerPageBattery2; - list.add(®isterPageBattery2); - extern PageDescription registerPageRollPitch; - list.add(®isterPageRollPitch); - extern PageDescription registerPageSolar; - list.add(®isterPageSolar); - extern PageDescription registerPageGenerator; - list.add(®isterPageGenerator); - extern PageDescription registerPageXTETrack; - list.add(®isterPageXTETrack); - extern PageDescription registerPageFluid; - list.add(®isterPageFluid); - extern PageDescription registerPageCompass; - list.add(®isterPageCompass); -} - -// Undervoltage detection for shutdown display -void underVoltageDetection(GwApi *api, CommonData &common){ - // Read settings - double voffset = (api->getConfig()->getConfigItem(api->getConfig()->vOffset,true)->asString()).toFloat(); - double vslope = (api->getConfig()->getConfigItem(api->getConfig()->vSlope,true)->asString()).toFloat(); - // Read supply voltage - #if defined VOLTAGE_SENSOR && defined LIPO_ACCU_1200 - float actVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.53) * 2; // Vin = 1/2 for OBP40 - float minVoltage = 3.65; // Absolut minimum volatge for 3,7V LiPo accu - #else - float actVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.17) * 20; // Vin = 1/20 for OBP60 - float minVoltage = MIN_VOLTAGE; - #endif - double calVoltage = actVoltage * vslope + voffset; // Calibration - if(calVoltage < minVoltage){ - #if defined VOLTAGE_SENSOR && defined LIPO_ACCU_1200 - // Switch off all power lines - setPortPin(OBP_BACKLIGHT_LED, false); // Backlight Off - setFlashLED(false); // Flash LED Off - buzzer(TONE4, 20); // Buzzer tone 4kHz 20ms - // Shutdown EInk display - getdisplay().setFullWindow(); // Set full Refresh - //getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update - getdisplay().fillScreen(common.bgcolor);// Clear screen - getdisplay().setTextColor(common.fgcolor); - getdisplay().setFont(&Ubuntu_Bold20pt7b); - getdisplay().setCursor(65, 150); - getdisplay().print("Undervoltage"); - getdisplay().setFont(&Ubuntu_Bold8pt7b); - getdisplay().setCursor(65, 175); - getdisplay().print("Charge battery and restart system"); - getdisplay().nextPage(); // Partial update - getdisplay().powerOff(); // Display power off - setPortPin(OBP_POWER_EPD, false); // Power off ePaper display - setPortPin(OBP_POWER_SD, false); // Power off SD card - #else - // Switch off all power lines - setPortPin(OBP_BACKLIGHT_LED, false); // Backlight Off - setFlashLED(false); // Flash LED Off - buzzer(TONE4, 20); // Buzzer tone 4kHz 20ms - setPortPin(OBP_POWER_50, false); // Power rail 5.0V Off - // Shutdown EInk display - getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update - getdisplay().fillScreen(common.bgcolor);// Clear screen - getdisplay().setTextColor(common.fgcolor); - getdisplay().setFont(&Ubuntu_Bold20pt7b); - getdisplay().setCursor(65, 150); - getdisplay().print("Undervoltage"); - getdisplay().setFont(&Ubuntu_Bold8pt7b); - getdisplay().setCursor(65, 175); - getdisplay().print("To wake up repower system"); - getdisplay().nextPage(); // Partial update - getdisplay().powerOff(); // Display power off - #endif - // Stop system - while(true){ - esp_deep_sleep_start(); // Deep Sleep without weakup. Weakup only after power cycle (restart). - } - } -} - -// OBP60 Task -//#################################################################################### -void OBP60Task(GwApi *api){ -// vTaskDelete(NULL); -// return; - GwLog *logger=api->getLogger(); - GwConfigHandler *config=api->getConfig(); -#ifdef HARDWARE_V21 - startLedTask(api); -#endif - PageList allPages; - registerAllPages(allPages); - CommonData commonData; - commonData.logger=logger; - commonData.config=config; - -#ifdef HARDWARE_V21 - // Keyboard coordinates for page footer - initKeys(commonData); -#endif - - tN2kMsg N2kMsg; - - LOG_DEBUG(GwLog::LOG,"obp60task started"); - for (auto it=allPages.pages.begin();it != allPages.pages.end();it++){ - LOG_DEBUG(GwLog::LOG,"found registered page %s",(*it)->pageName.c_str()); - } - - // Init E-Ink display - String displaymode = api->getConfig()->getConfigItem(api->getConfig()->display,true)->asString(); - String displaycolor = api->getConfig()->getConfigItem(api->getConfig()->displaycolor,true)->asString(); - if (displaycolor == "Normal") { - commonData.fgcolor = GxEPD_BLACK; - commonData.bgcolor = GxEPD_WHITE; - } - else{ - commonData.fgcolor = GxEPD_WHITE; - commonData.bgcolor = GxEPD_BLACK; - } - String systemname = api->getConfig()->getConfigItem(api->getConfig()->systemName,true)->asString(); - String wifipass = api->getConfig()->getConfigItem(api->getConfig()->apPassword,true)->asString(); - bool refreshmode = api->getConfig()->getConfigItem(api->getConfig()->refresh,true)->asBoolean(); - String fastrefresh = api->getConfig()->getConfigItem(api->getConfig()->fastRefresh,true)->asString(); - uint fullrefreshtime = uint(api->getConfig()->getConfigItem(api->getConfig()->fullRefreshTime,true)->asInt()); - #ifdef BOARD_OBP40S3 - bool syspage_enabled = config->getBool(config->systemPage); - #endif - - #ifdef DISPLAY_GDEY042T81 - getdisplay().init(115200, true, 2, false); // Use this for Waveshare boards with "clever" reset circuit, 2ms reset pulse - #else - getdisplay().init(115200); // Init for normal displays - #endif - - getdisplay().setRotation(0); // Set display orientation (horizontal) - getdisplay().setFullWindow(); // Set full Refresh - getdisplay().firstPage(); // set first page - getdisplay().fillScreen(commonData.bgcolor); - getdisplay().setTextColor(commonData.fgcolor); - getdisplay().nextPage(); // Full Refresh - getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update - getdisplay().fillScreen(commonData.bgcolor); - getdisplay().nextPage(); // Fast Refresh - getdisplay().nextPage(); // Fast Refresh - if(String(displaymode) == "Logo + QR Code" || String(displaymode) == "Logo"){ - getdisplay().fillScreen(commonData.bgcolor); - getdisplay().drawBitmap(0, 0, gImage_Logo_OBP_400x300_sw, getdisplay().width(), getdisplay().height(), commonData.fgcolor); // Draw start logo - getdisplay().nextPage(); // Fast Refresh - getdisplay().nextPage(); // Fast Refresh - delay(SHOW_TIME); // Logo show time - if(String(displaymode) == "Logo + QR Code"){ - getdisplay().fillScreen(commonData.bgcolor); - qrWiFi(systemname, wifipass, commonData.fgcolor, commonData.bgcolor); // Show QR code for WiFi connection - getdisplay().nextPage(); // Fast Refresh - getdisplay().nextPage(); // Fast Refresh - delay(SHOW_TIME); // QR code show time - } - getdisplay().fillScreen(commonData.bgcolor); - getdisplay().nextPage(); // Fast Refresh - getdisplay().nextPage(); // Fast Refresh - } - - // Init pages - int numPages=1; - PageStruct pages[MAX_PAGE_NUMBER]; - // Set start page - int pageNumber = int(api->getConfig()->getConfigItem(api->getConfig()->startPage,true)->asInt()) - 1; - - LOG_DEBUG(GwLog::LOG,"Checking wakeup..."); -#ifdef BOARD_OBP60S3 - if (esp_sleep_get_wakeup_cause() == ESP_SLEEP_WAKEUP_TOUCHPAD) { - LOG_DEBUG(GwLog::LOG,"Wake up by touch pad %d",esp_sleep_get_touchpad_wakeup_status()); - pageNumber = getLastPage(); - } else { - LOG_DEBUG(GwLog::LOG,"Other wakeup reason"); - } -#endif -#ifdef BOARD_OBP40S3 - if (esp_sleep_get_wakeup_cause() == ESP_SLEEP_WAKEUP_EXT0) { - LOG_DEBUG(GwLog::LOG,"Wake up by key"); - pageNumber = getLastPage(); - } else { - LOG_DEBUG(GwLog::LOG,"Other wakeup reason"); - } -#endif - LOG_DEBUG(GwLog::LOG,"...done"); - - int lastPage=pageNumber; - - BoatValueList boatValues; //all the boat values for the api query - //commonData.distanceformat=config->getString(xxx); - //add all necessary data to common data - - //fill the page data from config - numPages=config->getInt(config->visiblePages,1); - if (numPages < 1) numPages=1; - if (numPages >= MAX_PAGE_NUMBER) numPages=MAX_PAGE_NUMBER; - LOG_DEBUG(GwLog::LOG,"Number of pages %d",numPages); - String configPrefix="page"; - for (int i=0;i< numPages;i++){ - String prefix=configPrefix+String(i+1); //e.g. page1 - String configName=prefix+String("type"); - LOG_DEBUG(GwLog::DEBUG,"asking for page config %s",configName.c_str()); - String pageType=config->getString(configName,""); - PageDescription *description=allPages.find(pageType); - if (description == NULL){ - LOG_DEBUG(GwLog::ERROR,"page description for %s not found",pageType.c_str()); - continue; - } - pages[i].description=description; - pages[i].page=description->creator(commonData); - pages[i].parameters.pageName=pageType; - pages[i].parameters.pageNumber = i + 1; - LOG_DEBUG(GwLog::DEBUG,"found page %s for number %d",pageType.c_str(),i); - //fill in all the user defined parameters - for (int uid=0;uiduserParam;uid++){ - String cfgName=prefix+String("value")+String(uid+1); - GwApi::BoatValue *value=boatValues.findValueOrCreate(config->getString(cfgName,"")); - LOG_DEBUG(GwLog::DEBUG,"add user input cfg=%s,value=%s for page %d", - cfgName.c_str(), - value->getName().c_str(), - i - ); - pages[i].parameters.values.push_back(value); - } - //now add the predefined values - for (auto it=description->fixedParam.begin();it != description->fixedParam.end();it++){ - GwApi::BoatValue *value=boatValues.findValueOrCreate(*it); - LOG_DEBUG(GwLog::DEBUG,"added fixed value %s to page %d",value->getName().c_str(),i); - pages[i].parameters.values.push_back(value); - } - } - // add out of band system page (always available) - Page *syspage = allPages.pages[0]->creator(commonData); - - // Display screenshot handler for HTTP request - // http://192.168.15.1/api/user/OBP60Task/screenshot - api->registerRequestHandler("screenshot", [api, &pageNumber, pages](AsyncWebServerRequest *request) { - doImageRequest(api, &pageNumber, pages, request); - }); - - //now we have prepared the page data - //we start a separate task that will fetch our keys... - MyData allParameters; - allParameters.logger=api->getLogger(); - allParameters.page0=3; - allParameters.queue=xQueueCreate(10,sizeof(int)); - allParameters.sensitivity= api->getConfig()->getInt(GwConfigDefinitions::tSensitivity); - #ifdef BOARD_OBP40S3 - allParameters.use_syspage = syspage_enabled; - #endif - xTaskCreate(keyboardTask,"keyboard",2000,&allParameters,configMAX_PRIORITIES-1,NULL); - SharedData *shared=new SharedData(api); - createSensorTask(shared); - - // Task Loop - //#################################################################################### - - // Configuration values for main loop - String gpsFix = api->getConfig()->getConfigItem(api->getConfig()->flashLED,true)->asString(); - String gpsOn=api->getConfig()->getConfigItem(api->getConfig()->useGPS,true)->asString(); - float tz = api->getConfig()->getConfigItem(api->getConfig()->timeZone,true)->asFloat(); - - commonData.backlight.mode = backlightMapping(config->getConfigItem(config->backlight,true)->asString()); - commonData.backlight.color = colorMapping(config->getConfigItem(config->blColor,true)->asString()); - commonData.backlight.brightness = 2.55 * uint(config->getConfigItem(config->blBrightness,true)->asInt()); - commonData.powermode = api->getConfig()->getConfigItem(api->getConfig()->powerMode,true)->asString(); - - bool uvoltage = api->getConfig()->getConfigItem(api->getConfig()->underVoltage,true)->asBoolean(); - String cpuspeed = api->getConfig()->getConfigItem(api->getConfig()->cpuSpeed,true)->asString(); - uint hdopAccuracy = uint(api->getConfig()->getConfigItem(api->getConfig()->hdopAccuracy,true)->asInt()); - - double homelat = commonData.config->getString(commonData.config->homeLAT).toDouble(); - double homelon = commonData.config->getString(commonData.config->homeLON).toDouble(); - bool homevalid = homelat >= -180.0 and homelat <= 180 and homelon >= -90.0 and homelon <= 90.0; - if (homevalid) { - LOG_DEBUG(GwLog::LOG, "Home location set to %f : %f", homelat, homelon); - } else { - LOG_DEBUG(GwLog::LOG, "No valid home location found"); - } - - // refreshmode defined in init section - - // Boat values for main loop - GwApi::BoatValue *date = boatValues.findValueOrCreate("GPSD"); // Load GpsDate - GwApi::BoatValue *time = boatValues.findValueOrCreate("GPST"); // Load GpsTime - GwApi::BoatValue *lat = boatValues.findValueOrCreate("LAT"); // Load GpsLatitude - GwApi::BoatValue *lon = boatValues.findValueOrCreate("LON"); // Load GpsLongitude - GwApi::BoatValue *hdop = boatValues.findValueOrCreate("HDOP"); // Load GpsHDOP - - LOG_DEBUG(GwLog::LOG,"obp60task: start mainloop"); - - commonData.time = boatValues.findValueOrCreate("GPST"); // Load GpsTime - commonData.date = boatValues.findValueOrCreate("GPSD"); // Load GpsTime - bool delayedDisplayUpdate = false; // If select a new pages then make a delayed full display update - bool cpuspeedsetted = false; // Marker for change CPU speed - long firststart = millis(); // First start - long starttime0 = millis(); // Mainloop - long starttime1 = millis(); // Full display refresh for the first 5 min (more often as normal) - long starttime2 = millis(); // Full display refresh after 5 min - long starttime3 = millis(); // Display update all 1s - long starttime4 = millis(); // Delayed display update after 4s when select a new page - long starttime5 = millis(); // Calculate sunrise and sunset all 1s - - pages[pageNumber].page->setupKeys(); // Initialize keys for first page - - // Main loop runs with 100ms - //#################################################################################### - - bool systemPage = false; - Page *currentPage; - while (true){ - delay(100); // Delay 100ms (loop time) - bool keypressed = false; - - // Undervoltage detection - if(uvoltage == true){ - underVoltageDetection(api, commonData); - } - - // Set CPU speed after boot after 1min - if(millis() > firststart + (1 * 60 * 1000) && cpuspeedsetted == false){ - if(String(cpuspeed) == "80"){ - setCpuFrequencyMhz(80); - } - if(String(cpuspeed) == "160"){ - setCpuFrequencyMhz(160); - } - if(String(cpuspeed) == "240"){ - setCpuFrequencyMhz(240); - } - int freq = getCpuFrequencyMhz(); - api->getLogger()->logDebug(GwLog::LOG,"CPU speed: %i MHz", freq); - cpuspeedsetted = true; - } - - if(millis() > starttime0 + 100){ - starttime0 = millis(); - commonData.data=shared->getSensorData(); - commonData.data.actpage = pageNumber + 1; - commonData.data.maxpage = numPages; - - // If GPS fix then LED off (HDOP) - if(String(gpsFix) == "GPS Fix Lost" && hdop->value <= hdopAccuracy && hdop->valid == true){ - setFlashLED(false); - } - // If missing GPS fix then LED on - if((String(gpsFix) == "GPS Fix Lost" && hdop->value > hdopAccuracy && hdop->valid == true) || (String(gpsFix) == "GPS Fix Lost" && hdop->valid == false)){ - setFlashLED(true); - } - - // Check the keyboard message - int keyboardMessage=0; - while (xQueueReceive(allParameters.queue,&keyboardMessage,0)){ - LOG_DEBUG(GwLog::LOG,"new key from keyboard %d",keyboardMessage); - keypressed = true; - - if (keyboardMessage == 12 and !systemPage) { - LOG_DEBUG(GwLog::LOG, "Calling system page"); - systemPage = true; // System page is out of band - syspage->setupKeys(); - keyboardMessage = 0; - } - else { - currentPage = pages[pageNumber].page; - if (systemPage && keyboardMessage == 1) { - // exit system mode with exit key number 1 - systemPage = false; - currentPage->setupKeys(); - keyboardMessage = 0; - } - } - if (systemPage) { - keyboardMessage = syspage->handleKey(keyboardMessage); - } else if (currentPage) { - keyboardMessage = currentPage->handleKey(keyboardMessage); - } - if (keyboardMessage > 0) // not handled by page - { - // Decoding all key codes - // #6 Backlight on if key controled - if (commonData.backlight.mode == BacklightMode::KEY) { - // if(String(backlight) == "Control by Key"){ - if(keyboardMessage == 6){ - LOG_DEBUG(GwLog::LOG,"Toggle Backlight LED"); - toggleBacklightLED(commonData.backlight.brightness, commonData.backlight.color); - } - } - #ifdef BOARD_OBP40S3 - // #3 Deep sleep mode for OBP40 - if ((keyboardMessage == 3) and !syspage_enabled){ - deepSleep(commonData); - } - #endif - // #9 Swipe right or #4 key right - if ((keyboardMessage == 9) or (keyboardMessage == 4)) - { - pageNumber++; - if (pageNumber >= numPages){ - pageNumber = 0; - } - commonData.data.actpage = pageNumber + 1; - commonData.data.maxpage = numPages; - } - // #10 Swipe left or #3 key left - if ((keyboardMessage == 10) or (keyboardMessage == 3)) - { - pageNumber--; - if (pageNumber < 0){ - pageNumber = numPages - 1; - } - commonData.data.actpage = pageNumber + 1; - commonData.data.maxpage = numPages; - } - - // #9 or #10 Refresh display after a new page after 4s waiting time and if refresh is disabled - if(refreshmode == true && (keyboardMessage == 9 || keyboardMessage == 10)){ - starttime4 = millis(); - starttime2 = millis(); // Reset the timer for full display update - delayedDisplayUpdate = true; - } - } - LOG_DEBUG(GwLog::LOG,"set pagenumber to %d",pageNumber); - } - - // Calculate sunrise, sunset and backlight control with sun status all 1s - if(millis() > starttime5 + 1000){ - starttime5 = millis(); - if(time->valid == true && date->valid == true && lat->valid == true && lon->valid == true){ - // Provide sundata to all pages - commonData.sundata = calcSunsetSunrise(time->value , date->value, lat->value, lon->value, tz); - // Backlight with sun control - if (commonData.backlight.mode == BacklightMode::SUN) { - // if(String(backlight) == "Control by Sun"){ - if(commonData.sundata.sunDown == true){ - setBacklightLED(commonData.backlight.brightness, commonData.backlight.color); - } - else{ - setBacklightLED(0, COLOR_BLUE); // Backlight LEDs off (blue without britghness) - } - } - } else if (homevalid and commonData.data.rtcValid) { - // No gps fix but valid home location and time configured - commonData.sundata = calcSunsetSunriseRTC(&commonData.data.rtcTime, homelat, homelon, tz); - } - } - - // Full display update afer a new selected page and 4s wait time - if(millis() > starttime4 + 4000 && delayedDisplayUpdate == true){ - starttime1 = millis(); - starttime2 = millis(); - getdisplay().setFullWindow(); // Set full update - getdisplay().nextPage(); - if(fastrefresh == "false"){ - getdisplay().fillScreen(commonData.fgcolor); // Clear display - getdisplay().nextPage(); // Full update - getdisplay().fillScreen(commonData.bgcolor); // Clear display - getdisplay().nextPage(); // Full update - } - delayedDisplayUpdate = false; - } - - // Subtask E-Ink full refresh all 1 min for the first 5 min after power on or restart - // This needs for a better display contrast after power on in cold or warm environments - if(millis() < firststart + (5 * 60 * 1000) && millis() > starttime1 + (60 * 1000)){ - starttime1 = millis(); - starttime2 = millis(); - LOG_DEBUG(GwLog::DEBUG,"E-Ink full refresh first 5 min"); - getdisplay().setFullWindow(); // Set full update - getdisplay().nextPage(); - if(fastrefresh == "false"){ - getdisplay().fillScreen(commonData.fgcolor); // Clear display - getdisplay().nextPage(); // Full update - getdisplay().fillScreen(commonData.bgcolor); // Clear display - getdisplay().nextPage(); // Full update - } - } - - // Subtask E-Ink full refresh - if(millis() > starttime2 + fullrefreshtime * 60 * 1000){ - starttime2 = millis(); - LOG_DEBUG(GwLog::DEBUG,"E-Ink full refresh"); - getdisplay().setFullWindow(); // Set full update - getdisplay().nextPage(); - if(fastrefresh == "false"){ - getdisplay().fillScreen(commonData.fgcolor); // Clear display - getdisplay().nextPage(); // Full update - getdisplay().fillScreen(commonData.bgcolor); // Clear display - getdisplay().nextPage(); // Full update - } - } - - // Refresh display data, default all 1s - currentPage = pages[pageNumber].page; - int pagetime = 1000; - if ((lastPage == pageNumber) and (!keypressed)) { - // same page we use page defined time - pagetime = currentPage->refreshtime; - } - if(millis() > starttime3 + pagetime){ - LOG_DEBUG(GwLog::DEBUG,"Page with refreshtime=%d", pagetime); - starttime3 = millis(); - - //refresh data from api - api->getBoatDataValues(boatValues.numValues,boatValues.allBoatValues); - api->getStatus(commonData.status); - - // Clear display - // getdisplay().fillRect(0, 0, getdisplay().width(), getdisplay().height(), commonData.bgcolor); - getdisplay().fillScreen(commonData.bgcolor); // Clear display - - // Show header if enabled - if (pages[pageNumber].description && pages[pageNumber].description->header or systemPage){ - // build header using commonData - displayHeader(commonData, date, time, hdop); // Show page header - } - - // Call the particular page - if (systemPage) { - displayFooter(commonData); - PageData sysparams; // empty - syspage->displayPage(sysparams); - } - else { - if (currentPage == NULL){ - LOG_DEBUG(GwLog::ERROR,"page number %d not found", pageNumber); - // Error handling for missing page - getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update - getdisplay().fillScreen(commonData.bgcolor); // Clear display - getdisplay().drawXBitmap(200 - unknown_width / 2, 150 - unknown_height / 2, unknown_bits, unknown_width, unknown_height, commonData.fgcolor); - getdisplay().setCursor(140, 250); - getdisplay().setFont(&Atari16px); - getdisplay().print("Here be dragons!"); - getdisplay().nextPage(); // Partial update (fast) - } - else{ - if (lastPage != pageNumber){ - if (hasFRAM) fram.write(FRAM_PAGE_NO, pageNumber); // remember page for device restart - currentPage->setupKeys(); - currentPage->displayNew(pages[pageNumber].parameters); - lastPage=pageNumber; - } - //call the page code - LOG_DEBUG(GwLog::DEBUG,"calling page %d",pageNumber); - // Show footer if enabled (together with header) - if (pages[pageNumber].description && pages[pageNumber].description->header){ - displayFooter(commonData); - } - currentPage->displayPage(pages[pageNumber].parameters); - } - - } - } // refresh display all 1s - } - } - vTaskDelete(NULL); - -} - -#endif From fa4b563ff077aa6e628fe8795a954431e56f720a Mon Sep 17 00:00:00 2001 From: Thomas Hooge Date: Tue, 8 Jul 2025 15:19:07 +0200 Subject: [PATCH 35/36] Reorganized fonts and changed Ubuntu-font to 8bit version --- lib/obp60task/OBP60Extensions.cpp | 43 +- lib/obp60task/OBP60Extensions.h | 14 +- lib/obp60task/OBP60QRWiFi.h | 2 +- lib/obp60task/PageBME280.cpp | 12 +- lib/obp60task/PageBattery.cpp | 14 +- lib/obp60task/PageBattery2.cpp | 24 +- lib/obp60task/PageClock.cpp | 22 +- lib/obp60task/PageCompass.cpp | 6 +- lib/obp60task/PageDST810.cpp | 16 +- lib/obp60task/PageFluid.cpp | 6 +- lib/obp60task/PageFourValues.cpp | 32 +- lib/obp60task/PageFourValues2.cpp | 28 +- lib/obp60task/PageGenerator.cpp | 22 +- lib/obp60task/PageKeelPosition.cpp | 8 +- lib/obp60task/PageOneValue.cpp | 4 +- lib/obp60task/PageRollPitch.cpp | 16 +- lib/obp60task/PageRudderPosition.cpp | 10 +- lib/obp60task/PageSixValues.cpp | 12 +- lib/obp60task/PageSolar.cpp | 20 +- lib/obp60task/PageSystem.cpp | 16 +- lib/obp60task/PageThreeValues.cpp | 6 +- lib/obp60task/PageTwoValues.cpp | 4 +- lib/obp60task/PageVoltage.cpp | 16 +- lib/obp60task/PageWind.cpp | 20 +- lib/obp60task/PageWindRose.cpp | 22 +- lib/obp60task/PageWindRoseFlex.cpp | 22 +- lib/obp60task/PageXTETrack.cpp | 4 +- lib/obp60task/Ubuntu_Bold10pt7b.h | 232 -- lib/obp60task/Ubuntu_Bold12pt7b.h | 290 -- lib/obp60task/Ubuntu_Bold16pt7b.h | 402 --- lib/obp60task/Ubuntu_Bold20pt7b.h | 578 ---- lib/obp60task/Ubuntu_Bold32pt7b.h | 1340 -------- lib/obp60task/Ubuntu_Bold8pt7b.h | 182 - lib/obp60task/{ => fonts}/Atari16px8b.h | 0 .../{ => fonts}/DSEG7Classic-BoldItalic.zip | Bin .../DSEG7Classic-BoldItalic16pt7b.h | 0 .../DSEG7Classic-BoldItalic20pt7b.h | 0 .../DSEG7Classic-BoldItalic26pt7b.h | 0 .../DSEG7Classic-BoldItalic30pt7b.h | 0 .../DSEG7Classic-BoldItalic42pt7b.h | 0 .../DSEG7Classic-BoldItalic60pt7b.h | 0 lib/obp60task/{ => fonts}/Seven_Segment.zip | Bin lib/obp60task/{ => fonts}/Ubuntu_Bold.zip | Bin lib/obp60task/fonts/Ubuntu_Bold10pt8b.h | 485 +++ lib/obp60task/fonts/Ubuntu_Bold12pt8b.h | 611 ++++ lib/obp60task/fonts/Ubuntu_Bold16pt8b.h | 866 +++++ lib/obp60task/{ => fonts}/Ubuntu_Bold20pt8b.h | 0 lib/obp60task/fonts/Ubuntu_Bold32pt8b.h | 2955 +++++++++++++++++ lib/obp60task/fonts/Ubuntu_Bold8pt8b.h | 377 +++ lib/obp60task/obp60task.cpp | 8 +- 50 files changed, 5506 insertions(+), 3241 deletions(-) delete mode 100644 lib/obp60task/Ubuntu_Bold10pt7b.h delete mode 100644 lib/obp60task/Ubuntu_Bold12pt7b.h delete mode 100644 lib/obp60task/Ubuntu_Bold16pt7b.h delete mode 100644 lib/obp60task/Ubuntu_Bold20pt7b.h delete mode 100644 lib/obp60task/Ubuntu_Bold32pt7b.h delete mode 100644 lib/obp60task/Ubuntu_Bold8pt7b.h rename lib/obp60task/{ => fonts}/Atari16px8b.h (100%) rename lib/obp60task/{ => fonts}/DSEG7Classic-BoldItalic.zip (100%) rename lib/obp60task/{ => fonts}/DSEG7Classic-BoldItalic16pt7b.h (100%) rename lib/obp60task/{ => fonts}/DSEG7Classic-BoldItalic20pt7b.h (100%) rename lib/obp60task/{ => fonts}/DSEG7Classic-BoldItalic26pt7b.h (100%) rename lib/obp60task/{ => fonts}/DSEG7Classic-BoldItalic30pt7b.h (100%) rename lib/obp60task/{ => fonts}/DSEG7Classic-BoldItalic42pt7b.h (100%) rename lib/obp60task/{ => fonts}/DSEG7Classic-BoldItalic60pt7b.h (100%) rename lib/obp60task/{ => fonts}/Seven_Segment.zip (100%) rename lib/obp60task/{ => fonts}/Ubuntu_Bold.zip (100%) create mode 100644 lib/obp60task/fonts/Ubuntu_Bold10pt8b.h create mode 100644 lib/obp60task/fonts/Ubuntu_Bold12pt8b.h create mode 100644 lib/obp60task/fonts/Ubuntu_Bold16pt8b.h rename lib/obp60task/{ => fonts}/Ubuntu_Bold20pt8b.h (100%) create mode 100644 lib/obp60task/fonts/Ubuntu_Bold32pt8b.h create mode 100644 lib/obp60task/fonts/Ubuntu_Bold8pt8b.h diff --git a/lib/obp60task/OBP60Extensions.cpp b/lib/obp60task/OBP60Extensions.cpp index 364d74d..9b86292 100644 --- a/lib/obp60task/OBP60Extensions.cpp +++ b/lib/obp60task/OBP60Extensions.cpp @@ -11,20 +11,19 @@ #include "imglib.h" // Character sets -#include "Ubuntu_Bold8pt7b.h" -#include "Ubuntu_Bold10pt7b.h" -#include "Ubuntu_Bold12pt7b.h" -#include "Ubuntu_Bold16pt7b.h" -#include "Ubuntu_Bold20pt7b.h" -#include "Ubuntu_Bold32pt7b.h" -#include "DSEG7Classic-BoldItalic16pt7b.h" -#include "DSEG7Classic-BoldItalic20pt7b.h" -#include "DSEG7Classic-BoldItalic30pt7b.h" -#include "DSEG7Classic-BoldItalic42pt7b.h" -#include "DSEG7Classic-BoldItalic60pt7b.h" -#include "Atari16px8b.h" // Key label font - -#include "Ubuntu_Bold20pt8b.h" +#include "fonts/DSEG7Classic-BoldItalic16pt7b.h" +#include "fonts/DSEG7Classic-BoldItalic20pt7b.h" +#include "fonts/DSEG7Classic-BoldItalic26pt7b.h" +#include "fonts/DSEG7Classic-BoldItalic30pt7b.h" +#include "fonts/DSEG7Classic-BoldItalic42pt7b.h" +#include "fonts/DSEG7Classic-BoldItalic60pt7b.h" +#include "fonts/Ubuntu_Bold8pt8b.h" +#include "fonts/Ubuntu_Bold10pt8b.h" +#include "fonts/Ubuntu_Bold12pt8b.h" +#include "fonts/Ubuntu_Bold16pt8b.h" +#include "fonts/Ubuntu_Bold20pt8b.h" +#include "fonts/Ubuntu_Bold32pt8b.h" +#include "fonts/Atari16px8b.h" // Key label font // E-Ink Display #define GxEPD_WIDTH 400 // Display width @@ -138,10 +137,10 @@ void deepSleep(CommonData &common){ getdisplay().setFullWindow(); // Set full Refresh getdisplay().fillScreen(common.bgcolor); // Clear screen getdisplay().setTextColor(common.fgcolor); - getdisplay().setFont(&Ubuntu_Bold20pt7b); + getdisplay().setFont(&Ubuntu_Bold20pt8b); getdisplay().setCursor(85, 150); getdisplay().print("Sleep Mode"); - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(65, 175); getdisplay().print("To wake up press key and wait 5s"); getdisplay().nextPage(); // Update display contents @@ -163,10 +162,10 @@ void deepSleep(CommonData &common){ //getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update getdisplay().fillScreen(common.bgcolor); // Clear screen getdisplay().setTextColor(common.fgcolor); - getdisplay().setFont(&Ubuntu_Bold20pt7b); + getdisplay().setFont(&Ubuntu_Bold20pt8b); getdisplay().setCursor(85, 150); getdisplay().print("Sleep Mode"); - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(65, 175); getdisplay().print("To wake up press wheel and wait 5s"); getdisplay().nextPage(); // Partial update @@ -348,7 +347,7 @@ void displayHeader(CommonData &commonData, GwApi::BoatValue *date, GwApi::BoatVa // Show status info getdisplay().setTextColor(commonData.fgcolor); - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(0, 15); if(commonData.status.wifiApOn){ getdisplay().print(" AP "); @@ -418,7 +417,7 @@ void displayHeader(CommonData &commonData, GwApi::BoatValue *date, GwApi::BoatVa getdisplay().setTextColor(commonData.fgcolor); getdisplay().drawRect(201, 0, 23, 19, commonData.fgcolor); } - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); drawTextCenter(211, 9, String(commonData.data.actpage)); heartbeat = !heartbeat; @@ -427,7 +426,7 @@ void displayHeader(CommonData &commonData, GwApi::BoatValue *date, GwApi::BoatVa String timesource = commonData.config->getString(commonData.config->timeSource); double tz = commonData.config->getString(commonData.config->timeZone).toDouble(); getdisplay().setTextColor(commonData.fgcolor); - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(230, 15); if (timesource == "RTC" or timesource == "iRTC") { // TODO take DST into account @@ -681,7 +680,7 @@ void generatorGraphic(uint x, uint y, int pcolor, int bcolor){ getdisplay().fillCircle(xb, yb, 41, bcolor); // Insert G getdisplay().setTextColor(pcolor); - getdisplay().setFont(&Ubuntu_Bold32pt7b); + getdisplay().setFont(&Ubuntu_Bold32pt8b); getdisplay().setCursor(xb-22, yb+20); getdisplay().print("G"); } diff --git a/lib/obp60task/OBP60Extensions.h b/lib/obp60task/OBP60Extensions.h index 6ea10b9..94e7935 100644 --- a/lib/obp60task/OBP60Extensions.h +++ b/lib/obp60task/OBP60Extensions.h @@ -26,18 +26,18 @@ extern Adafruit_FRAM_I2C fram; extern bool hasFRAM; // Fonts declarations for display (#includes see OBP60Extensions.cpp) -extern const GFXfont Ubuntu_Bold8pt7b; -extern const GFXfont Ubuntu_Bold10pt7b; -extern const GFXfont Ubuntu_Bold12pt7b; -extern const GFXfont Ubuntu_Bold16pt7b; -extern const GFXfont Ubuntu_Bold20pt7b; -extern const GFXfont Ubuntu_Bold20pt8b; -extern const GFXfont Ubuntu_Bold32pt7b; extern const GFXfont DSEG7Classic_BoldItalic16pt7b; extern const GFXfont DSEG7Classic_BoldItalic20pt7b; +extern const GFXfont DSEG7Classic_BoldItalic26pt7b; extern const GFXfont DSEG7Classic_BoldItalic30pt7b; extern const GFXfont DSEG7Classic_BoldItalic42pt7b; extern const GFXfont DSEG7Classic_BoldItalic60pt7b; +extern const GFXfont Ubuntu_Bold8pt8b; +extern const GFXfont Ubuntu_Bold10pt8b; +extern const GFXfont Ubuntu_Bold12pt8b; +extern const GFXfont Ubuntu_Bold16pt8b; +extern const GFXfont Ubuntu_Bold20pt8b; +extern const GFXfont Ubuntu_Bold32pt8b; extern const GFXfont Atari16px; // Global functions diff --git a/lib/obp60task/OBP60QRWiFi.h b/lib/obp60task/OBP60QRWiFi.h index 3bd7646..d3f5248 100644 --- a/lib/obp60task/OBP60QRWiFi.h +++ b/lib/obp60task/OBP60QRWiFi.h @@ -35,7 +35,7 @@ void qrWiFi(String ssid, String passwd, uint16_t fgcolor, uint16_t bgcolor){ box_y = box_y + box_s; box_x = init_x; } - getdisplay().setFont(&Ubuntu_Bold32pt7b); + getdisplay().setFont(&Ubuntu_Bold32pt8b); getdisplay().setTextColor(fgcolor); getdisplay().setCursor(140, 285); getdisplay().print("WiFi"); diff --git a/lib/obp60task/PageBME280.cpp b/lib/obp60task/PageBME280.cpp index 9bf0df2..84fa030 100644 --- a/lib/obp60task/PageBME280.cpp +++ b/lib/obp60task/PageBME280.cpp @@ -112,12 +112,12 @@ class PageBME280 : public Page // ############### Value 1 ################ // Show name - getdisplay().setFont(&Ubuntu_Bold20pt7b); + getdisplay().setFont(&Ubuntu_Bold20pt8b); getdisplay().setCursor(20, 55); getdisplay().print(name1); // Page name // Show unit - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(20, 90); getdisplay().print(unit1); // Unit @@ -136,12 +136,12 @@ class PageBME280 : public Page // ############### Value 2 ################ // Show name - getdisplay().setFont(&Ubuntu_Bold20pt7b); + getdisplay().setFont(&Ubuntu_Bold20pt8b); getdisplay().setCursor(20, 145); getdisplay().print(name2); // Page name // Show unit - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(20, 180); getdisplay().print(unit2); // Unit @@ -160,12 +160,12 @@ class PageBME280 : public Page // ############### Value 3 ################ // Show name - getdisplay().setFont(&Ubuntu_Bold20pt7b); + getdisplay().setFont(&Ubuntu_Bold20pt8b); getdisplay().setCursor(20, 235); getdisplay().print(name3); // Page name // Show unit - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(20, 270); getdisplay().print(unit3); // Unit diff --git a/lib/obp60task/PageBattery.cpp b/lib/obp60task/PageBattery.cpp index cb9e054..e3304b5 100644 --- a/lib/obp60task/PageBattery.cpp +++ b/lib/obp60task/PageBattery.cpp @@ -162,7 +162,7 @@ class PageBattery : public Page // Show average settings getdisplay().setTextColor(commonData->fgcolor); - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); switch (average) { case 0: getdisplay().setCursor(60, 90); @@ -209,12 +209,12 @@ class PageBattery : public Page // ############### Value 1 ################ // Show name - getdisplay().setFont(&Ubuntu_Bold20pt7b); + getdisplay().setFont(&Ubuntu_Bold20pt8b); getdisplay().setCursor(20, 55); getdisplay().print(name1); // Value name // Show unit - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(20, 90); getdisplay().print(unit1); // Unit @@ -238,12 +238,12 @@ class PageBattery : public Page // ############### Value 2 ################ // Show name - getdisplay().setFont(&Ubuntu_Bold20pt7b); + getdisplay().setFont(&Ubuntu_Bold20pt8b); getdisplay().setCursor(20, 145); getdisplay().print(name2); // Value name // Show unit - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(20, 180); getdisplay().print(unit2); // Unit @@ -267,12 +267,12 @@ class PageBattery : public Page // ############### Value 3 ################ // Show name - getdisplay().setFont(&Ubuntu_Bold20pt7b); + getdisplay().setFont(&Ubuntu_Bold20pt8b); getdisplay().setCursor(20, 235); getdisplay().print(name3); // Value name // Show unit - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(20, 270); getdisplay().print(unit3); // Unit diff --git a/lib/obp60task/PageBattery2.cpp b/lib/obp60task/PageBattery2.cpp index 7bf25b3..c4497ef 100644 --- a/lib/obp60task/PageBattery2.cpp +++ b/lib/obp60task/PageBattery2.cpp @@ -189,12 +189,12 @@ public: getdisplay().setTextColor(commonData->fgcolor); // Show name - getdisplay().setFont(&Ubuntu_Bold20pt7b); + getdisplay().setFont(&Ubuntu_Bold20pt8b); getdisplay().setCursor(10, 65); getdisplay().print("Bat."); // Show battery type - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(90, 65); getdisplay().print(batType); @@ -205,7 +205,7 @@ public: if(String(batVoltage) == "12V") bvoltage = 12; else bvoltage = 24; getdisplay().print(bvoltage); - getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setFont(&Ubuntu_Bold16pt8b); getdisplay().print("V"); // Show battery capacity @@ -213,12 +213,12 @@ public: getdisplay().setCursor(10, 200); if(batCapacity <= 999) getdisplay().print(batCapacity, 0); if(batCapacity > 999) getdisplay().print(float(batCapacity/1000.0), 1); - getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setFont(&Ubuntu_Bold16pt8b); if(batCapacity <= 999) getdisplay().print("Ah"); if(batCapacity > 999) getdisplay().print("kAh"); // Show info - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(10, 235); getdisplay().print("Installed"); getdisplay().setCursor(10, 255); @@ -228,7 +228,7 @@ public: batteryGraphic(150, 45, batPercentage, commonData->fgcolor, commonData->bgcolor); // Show average settings - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(150, 145); switch (average) { case 0: @@ -252,7 +252,7 @@ public: getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b); getdisplay().setCursor(150, 200); getdisplay().print(batPercentage); - getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setFont(&Ubuntu_Bold16pt8b); getdisplay().print("%"); // Show time to full discharge @@ -263,12 +263,12 @@ public: else getdisplay().print(batRange, 0); } else getdisplay().print("--"); - getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setFont(&Ubuntu_Bold16pt8b); getdisplay().print("h"); // Show sensor type info String i2cAddr = ""; - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(270, 60); if(powerSensor == "off") getdisplay().print("Internal"); if(powerSensor == "INA219"){ @@ -307,7 +307,7 @@ public: getdisplay().print("---"); // Missing bus data } } - getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setFont(&Ubuntu_Bold16pt8b); getdisplay().print("V"); // Show actual current in A @@ -319,7 +319,7 @@ public: if(value2 > 99.9) getdisplay().print(value2, 0); } else getdisplay().print("---"); - getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setFont(&Ubuntu_Bold16pt8b); getdisplay().print("A"); // Show actual consumption in W @@ -331,7 +331,7 @@ public: if(value3 > 99.9) getdisplay().print(value3, 0); } else getdisplay().print("---"); - getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setFont(&Ubuntu_Bold16pt8b); getdisplay().print("W"); // Update display diff --git a/lib/obp60task/PageClock.cpp b/lib/obp60task/PageClock.cpp index b3cea6b..7a293b2 100644 --- a/lib/obp60task/PageClock.cpp +++ b/lib/obp60task/PageClock.cpp @@ -177,7 +177,7 @@ bool homevalid = false; // homelat and homelon are valid struct tm *local_tm = localtime(&tv); // Show values GPS date - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(10, 65); if (holdvalues == false) { if (source == 'G') { @@ -197,7 +197,7 @@ bool homevalid = false; // homelat and homelon are valid } else { getdisplay().print(svalue2old); } - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(10, 95); getdisplay().print("Date"); // Name @@ -205,7 +205,7 @@ bool homevalid = false; // homelat and homelon are valid getdisplay().fillRect(0, 149, 60, 3, commonData->fgcolor); // Show values GPS time - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(10, 250); if (holdvalues == false) { if (source == 'G') { @@ -225,7 +225,7 @@ bool homevalid = false; // homelat and homelon are valid else { getdisplay().print(svalue1old); } - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(10, 220); getdisplay().print("Time"); // Name @@ -238,11 +238,11 @@ bool homevalid = false; // homelat and homelon are valid sunrise = String("06:42"); } - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(335, 65); if(holdvalues == false) getdisplay().print(sunrise); // Value else getdisplay().print(svalue5old); - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(335, 95); getdisplay().print("SunR"); // Name @@ -258,11 +258,11 @@ bool homevalid = false; // homelat and homelon are valid sunset = String("21:03"); } - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(335, 250); if(holdvalues == false) getdisplay().print(sunset); // Value else getdisplay().print(svalue6old); - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(335, 220); getdisplay().print("SunS"); // Name @@ -304,7 +304,7 @@ bool homevalid = false; // homelat and homelon are valid getdisplay().getTextBounds(ii, int(x), int(y), &x1, &y1, &w, &h); // Calc width of new string getdisplay().setCursor(x-w/2, y+h/2); if(i % 30 == 0){ - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().print(ii); } @@ -336,7 +336,7 @@ bool homevalid = false; // homelat and homelon are valid } // Print Unit in clock - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(175, 110); if(holdvalues == false){ getdisplay().print(tz == 'L' ? "LOT" : "UTC"); @@ -345,7 +345,7 @@ bool homevalid = false; // homelat and homelon are valid getdisplay().print(unit2old); // date unit } - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(185, 190); if (source == 'G') { getdisplay().print("GPS"); diff --git a/lib/obp60task/PageCompass.cpp b/lib/obp60task/PageCompass.cpp index 691cf8f..202d8d9 100644 --- a/lib/obp60task/PageCompass.cpp +++ b/lib/obp60task/PageCompass.cpp @@ -115,11 +115,11 @@ class PageCompass : public Page // Horizontal line 2 pix top & bottom // Print data on top half getdisplay().fillRect(0, 130, 400, 2, commonData->fgcolor); - getdisplay().setFont(&Ubuntu_Bold20pt7b); + getdisplay().setFont(&Ubuntu_Bold20pt8b); getdisplay().setCursor(10, 70); getdisplay().print(DataName[WhichDataDisplay]); // Page name // Show unit - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(10, 120); getdisplay().print(DataUnits[WhichDataDisplay]); getdisplay().setCursor(190, 120); @@ -148,7 +148,7 @@ class PageCompass : public Page char buffer[bsize+1]; buffer[0]=0; - getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setFont(&Ubuntu_Bold16pt8b); getdisplay().setCursor(10, Compass_Y0-60); getdisplay().print(DataName[WhichDataCompass]); // Page name diff --git a/lib/obp60task/PageDST810.cpp b/lib/obp60task/PageDST810.cpp index dc9de1b..5eb1452 100644 --- a/lib/obp60task/PageDST810.cpp +++ b/lib/obp60task/PageDST810.cpp @@ -98,12 +98,12 @@ public: // ############### Value 1 ################ // Show name - getdisplay().setFont(&Ubuntu_Bold20pt7b); + getdisplay().setFont(&Ubuntu_Bold20pt8b); getdisplay().setCursor(20, 55); getdisplay().print("Depth"); // Page name // Show unit - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(20, 90); if(holdvalues == false){ getdisplay().print(unit1); // Unit @@ -136,12 +136,12 @@ public: // ############### Value 2 ################ // Show name - getdisplay().setFont(&Ubuntu_Bold20pt7b); + getdisplay().setFont(&Ubuntu_Bold20pt8b); getdisplay().setCursor(20, 145); getdisplay().print("Speed"); // Page name // Show unit - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(20, 180); if(holdvalues == false){ getdisplay().print(unit2); // Unit @@ -174,12 +174,12 @@ public: // ############### Value 3 ################ // Show name - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(20, 220); getdisplay().print("Log"); // Page name // Show unit - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(20, 240); if(holdvalues == false){ getdisplay().print(unit3); // Unit @@ -212,12 +212,12 @@ public: // ############### Value 4 ################ // Show name - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(220, 220); getdisplay().print("Temp"); // Page name // Show unit - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(220, 240); if(holdvalues == false){ getdisplay().print(unit4); // Unit diff --git a/lib/obp60task/PageFluid.cpp b/lib/obp60task/PageFluid.cpp index 2d6375d..51ce120 100644 --- a/lib/obp60task/PageFluid.cpp +++ b/lib/obp60task/PageFluid.cpp @@ -143,7 +143,7 @@ class PageFluid : public Page getdisplay().setTextColor(commonData->fgcolor); // descriptions - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(20, 60); getdisplay().print("Fluid"); @@ -201,7 +201,7 @@ class PageFluid : public Page Point p, pr; // scale texts - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); p = {c.x, c.y - r + 30}; drawTextCenter(p.x, p.y, "1/2"); pr = rotatePoint(c, p, -60); @@ -210,7 +210,7 @@ class PageFluid : public Page drawTextCenter(pr.x, pr.y, "3/4"); // empty and full - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); p = rotatePoint(c, {c.x, c.y - r + 30}, -130); drawTextCenter(p.x, p.y, "E"); p = rotatePoint(c, {c.x, c.y - r + 30}, 130); diff --git a/lib/obp60task/PageFourValues.cpp b/lib/obp60task/PageFourValues.cpp index 964ae0d..d931f20 100644 --- a/lib/obp60task/PageFourValues.cpp +++ b/lib/obp60task/PageFourValues.cpp @@ -103,12 +103,12 @@ class PageFourValues : public Page // ############### Value 1 ################ // Show name - getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setFont(&Ubuntu_Bold16pt8b); getdisplay().setCursor(20, 45); getdisplay().print(name1); // Page name // Show unit - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(20, 65); if(holdvalues == false){ getdisplay().print(unit1); // Unit @@ -119,11 +119,11 @@ class PageFourValues : public Page // Switch font if format for any values if(bvalue1->getFormat() == "formatLatitude" || bvalue1->getFormat() == "formatLongitude"){ - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(120, 55); } else if(bvalue1->getFormat() == "formatTime" || bvalue1->getFormat() == "formatDate"){ - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(150, 58); } else{ @@ -151,12 +151,12 @@ class PageFourValues : public Page // ############### Value 2 ################ // Show name - getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setFont(&Ubuntu_Bold16pt8b); getdisplay().setCursor(20, 113); getdisplay().print(name2); // Page name // Show unit - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(20, 133); if(holdvalues == false){ getdisplay().print(unit2); // Unit @@ -167,11 +167,11 @@ class PageFourValues : public Page // Switch font if format for any values if(bvalue2->getFormat() == "formatLatitude" || bvalue2->getFormat() == "formatLongitude"){ - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(120, 123); } else if(bvalue2->getFormat() == "formatTime" || bvalue2->getFormat() == "formatDate"){ - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(150, 123); } else{ @@ -199,12 +199,12 @@ class PageFourValues : public Page // ############### Value 3 ################ // Show name - getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setFont(&Ubuntu_Bold16pt8b); getdisplay().setCursor(20, 181); getdisplay().print(name3); // Page name // Show unit - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(20, 201); if(holdvalues == false){ getdisplay().print(unit3); // Unit @@ -215,11 +215,11 @@ class PageFourValues : public Page // Switch font if format for any values if(bvalue3->getFormat() == "formatLatitude" || bvalue3->getFormat() == "formatLongitude"){ - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(120, 191); } else if(bvalue3->getFormat() == "formatTime" || bvalue3->getFormat() == "formatDate"){ - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(150, 191); } else{ @@ -247,12 +247,12 @@ class PageFourValues : public Page // ############### Value 4 ################ // Show name - getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setFont(&Ubuntu_Bold16pt8b); getdisplay().setCursor(20, 249); getdisplay().print(name4); // Page name // Show unit - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(20, 269); if(holdvalues == false){ getdisplay().print(unit4); // Unit @@ -263,11 +263,11 @@ class PageFourValues : public Page // Switch font if format for any values if(bvalue4->getFormat() == "formatLatitude" || bvalue4->getFormat() == "formatLongitude"){ - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(120, 259); } else if(bvalue4->getFormat() == "formatTime" || bvalue4->getFormat() == "formatDate"){ - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(150, 259); } else{ diff --git a/lib/obp60task/PageFourValues2.cpp b/lib/obp60task/PageFourValues2.cpp index dbaba22..db1fba0 100644 --- a/lib/obp60task/PageFourValues2.cpp +++ b/lib/obp60task/PageFourValues2.cpp @@ -108,7 +108,7 @@ class PageFourValues2 : public Page getdisplay().print(name1); // Page name // Show unit - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(20, 90); if(holdvalues == false){ getdisplay().print(unit1); // Unit @@ -119,11 +119,11 @@ class PageFourValues2 : public Page // Switch font if format for any values if(bvalue1->getFormat() == "formatLatitude" || bvalue1->getFormat() == "formatLongitude"){ - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(100, 90); } else if(bvalue1->getFormat() == "formatTime" || bvalue1->getFormat() == "formatDate"){ - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(180, 77); } else{ @@ -156,7 +156,7 @@ class PageFourValues2 : public Page getdisplay().print(name2); // Page name // Show unit - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(20, 180); if(holdvalues == false){ getdisplay().print(unit2); // Unit @@ -167,11 +167,11 @@ class PageFourValues2 : public Page // Switch font if format for any values if(bvalue2->getFormat() == "formatLatitude" || bvalue2->getFormat() == "formatLongitude"){ - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(100, 180); } else if(bvalue2->getFormat() == "formatTime" || bvalue2->getFormat() == "formatDate"){ - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(180, 158); } else{ @@ -199,12 +199,12 @@ class PageFourValues2 : public Page // ############### Value 3 ################ // Show name - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(20, 220); getdisplay().print(name3); // Page name // Show unit - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(20, 240); if(holdvalues == false){ getdisplay().print(unit3); // Unit @@ -215,11 +215,11 @@ class PageFourValues2 : public Page // Switch font if format for any values if(bvalue3->getFormat() == "formatLatitude" || bvalue3->getFormat() == "formatLongitude"){ - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(50, 240); } else if(bvalue3->getFormat() == "formatTime" || bvalue3->getFormat() == "formatDate"){ - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(100, 240); } else{ @@ -247,12 +247,12 @@ class PageFourValues2 : public Page // ############### Value 4 ################ // Show name - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(220, 220); getdisplay().print(name4); // Page name // Show unit - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(220, 240); if(holdvalues == false){ getdisplay().print(unit4); // Unit @@ -263,11 +263,11 @@ class PageFourValues2 : public Page // Switch font if format for any values if(bvalue4->getFormat() == "formatLatitude" || bvalue4->getFormat() == "formatLongitude"){ - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(250, 240); } else if(bvalue4->getFormat() == "formatTime" || bvalue4->getFormat() == "formatDate"){ - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(300, 240); } else{ diff --git a/lib/obp60task/PageGenerator.cpp b/lib/obp60task/PageGenerator.cpp index 30b8b54..276e4b0 100644 --- a/lib/obp60task/PageGenerator.cpp +++ b/lib/obp60task/PageGenerator.cpp @@ -88,10 +88,10 @@ public: getdisplay().setTextColor(commonData->fgcolor); // Show name - getdisplay().setFont(&Ubuntu_Bold20pt7b); + getdisplay().setFont(&Ubuntu_Bold20pt8b); getdisplay().setCursor(10, 65); getdisplay().print("Power"); - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(12, 82); getdisplay().print("Generator"); @@ -102,7 +102,7 @@ public: if(String(batVoltage) == "12V") bvoltage = 12; else bvoltage = 24; getdisplay().print(bvoltage); - getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setFont(&Ubuntu_Bold16pt8b); getdisplay().print("V"); // Show solar power @@ -110,12 +110,12 @@ public: getdisplay().setCursor(10, 200); if(genPower <= 999) getdisplay().print(genPower, 0); if(genPower > 999) getdisplay().print(float(genPower/1000.0), 1); - getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setFont(&Ubuntu_Bold16pt8b); if(genPower <= 999) getdisplay().print("W"); if(genPower > 999) getdisplay().print("kW"); // Show info - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(10, 235); getdisplay().print("Installed"); getdisplay().setCursor(10, 255); @@ -128,15 +128,15 @@ public: getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b); getdisplay().setCursor(150, 200); getdisplay().print(genPercentage); - getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setFont(&Ubuntu_Bold16pt8b); getdisplay().print("%"); - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(150, 235); getdisplay().print("Load"); // Show sensor type info String i2cAddr = ""; - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(270, 60); if(powerSensor == "off") getdisplay().print("Internal"); if(powerSensor == "INA219"){ @@ -176,7 +176,7 @@ public: getdisplay().print("---"); // Missing bus data } } - getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setFont(&Ubuntu_Bold16pt8b); getdisplay().print("V"); // Show actual current in A @@ -188,7 +188,7 @@ public: if(value2 > 99.9) getdisplay().print(value2, 0); } else getdisplay().print("---"); - getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setFont(&Ubuntu_Bold16pt8b); getdisplay().print("A"); // Show actual consumption in W @@ -200,7 +200,7 @@ public: if(value3 > 99.9) getdisplay().print(value3, 0); } else getdisplay().print("---"); - getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setFont(&Ubuntu_Bold16pt8b); getdisplay().print("W"); // Update display diff --git a/lib/obp60task/PageKeelPosition.cpp b/lib/obp60task/PageKeelPosition.cpp index 71a8547..5a25866 100644 --- a/lib/obp60task/PageKeelPosition.cpp +++ b/lib/obp60task/PageKeelPosition.cpp @@ -109,7 +109,7 @@ public: getdisplay().getTextBounds(ii, int(x), int(y), &x1, &y1, &w, &h); // Calc width of new string getdisplay().setCursor(x-w/2, y+h/2); if(i % 30 == 0){ - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().print(ii); } @@ -189,19 +189,19 @@ public: getdisplay().fillRect(150, 150, 100, 4, commonData->fgcolor); // Water line // Print label - getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setFont(&Ubuntu_Bold16pt8b); getdisplay().setCursor(100, 70); getdisplay().print("Keel Position"); // Label if((rotsensor == "AS5600" && rotfunction == "Keel" && (valid1 == true || holdvalues == true)) || simulation == true){ // Print Unit of keel position - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(175, 110); getdisplay().print(unit1); // Unit } else{ // Print Unit of keel position - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(145, 110); getdisplay().print("No sensor data"); // Info missing sensor } diff --git a/lib/obp60task/PageOneValue.cpp b/lib/obp60task/PageOneValue.cpp index e955719..ebdb96e 100644 --- a/lib/obp60task/PageOneValue.cpp +++ b/lib/obp60task/PageOneValue.cpp @@ -64,7 +64,7 @@ class PageOneValue : public Page // Show name getdisplay().setTextColor(commonData->fgcolor); - getdisplay().setFont(&Ubuntu_Bold32pt7b); + getdisplay().setFont(&Ubuntu_Bold32pt8b); getdisplay().setCursor(20, 100); getdisplay().print(name1); // Page name @@ -84,7 +84,7 @@ class PageOneValue : public Page getdisplay().setCursor(20, 180); } else if(bvalue1->getFormat() == "formatTime" || bvalue1->getFormat() == "formatDate"){ - getdisplay().setFont(&Ubuntu_Bold32pt7b); + getdisplay().setFont(&Ubuntu_Bold32pt8b); getdisplay().setCursor(20, 200); } else{ diff --git a/lib/obp60task/PageRollPitch.cpp b/lib/obp60task/PageRollPitch.cpp index 3a4041b..488056d 100644 --- a/lib/obp60task/PageRollPitch.cpp +++ b/lib/obp60task/PageRollPitch.cpp @@ -126,10 +126,10 @@ public: getdisplay().print(rolllimit); // Value //getdisplay().print(svalue1); // Value - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(10, 95); getdisplay().print("Limit"); // Name - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(10, 115); getdisplay().print("DEG"); @@ -141,10 +141,10 @@ public: getdisplay().setCursor(10, 270); if(holdvalues == false) getdisplay().print(svalue1); // Value else getdisplay().print(svalue1old); - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(10, 220); getdisplay().print(name1); // Name - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(10, 190); getdisplay().print("Deg"); @@ -156,10 +156,10 @@ public: getdisplay().setCursor(295, 270); if(holdvalues == false) getdisplay().print(svalue2); // Value else getdisplay().print(svalue2old); - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(335, 220); getdisplay().print(name2); // Name - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(335, 190); getdisplay().print("Deg"); @@ -198,7 +198,7 @@ public: getdisplay().getTextBounds(ii, int(x), int(y), &x1, &y1, &w, &h); // Calc width of new string getdisplay().setCursor(x-w/2, y+h/2); if(i % 20 == 0){ - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().print(ii); } @@ -300,7 +300,7 @@ public: } else{ // Print sensor info - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(145, 200); getdisplay().print("No sensor data"); // Info missing sensor } diff --git a/lib/obp60task/PageRudderPosition.cpp b/lib/obp60task/PageRudderPosition.cpp index be8fca5..a11f917 100644 --- a/lib/obp60task/PageRudderPosition.cpp +++ b/lib/obp60task/PageRudderPosition.cpp @@ -115,7 +115,7 @@ public: getdisplay().getTextBounds(ii, int(x), int(y), &x1, &y1, &w, &h); // Calc width of new string getdisplay().setCursor(x-w/2, y+h/2); if(i % 30 == 0){ - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().print(ii); } @@ -144,26 +144,26 @@ public: } // Print label - getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setFont(&Ubuntu_Bold16pt8b); getdisplay().setCursor(80, 70); getdisplay().print("Rudder Position"); // Label // Print Unit in RudderPosition if(valid1 == true || simulation == true){ if(holdvalues == false){ - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(175, 110); getdisplay().print(unit1); // Unit } else{ - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(175, 110); getdisplay().print(unit1old); // Unit } } else{ // Print Unit of keel position - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(145, 110); getdisplay().print("No sensor data"); // Info missing sensor } diff --git a/lib/obp60task/PageSixValues.cpp b/lib/obp60task/PageSixValues.cpp index 6d93319..fc42ad9 100644 --- a/lib/obp60task/PageSixValues.cpp +++ b/lib/obp60task/PageSixValues.cpp @@ -4,10 +4,6 @@ #include "OBP60Extensions.h" #include "BoatDataCalibration.h" -#include "DSEG7Classic-BoldItalic26pt7b.h" - -extern const GFXfont DSEG7Classic_BoldItalic30pt7b; - const int SixValues_x1 = 5; const int SixValues_DeltaX = 200; @@ -96,12 +92,12 @@ class PageSixValues : public Page LOG_DEBUG(GwLog::LOG,"Drawing at PageSixValue: %d %s %f %s", ValueIndex, DataName[ValueIndex], DataValue[ValueIndex], DataFormat[ValueIndex] ); // Show name - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(x0, y0+25); getdisplay().print(DataName[ValueIndex]); // Page name // Show unit - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(x0, y0+72); if(holdvalues == false){ getdisplay().print(DataUnits[ValueIndex]); // Unit @@ -112,11 +108,11 @@ class PageSixValues : public Page // Switch font if format for any values if(DataFormat[ValueIndex] == "formatLatitude" || DataFormat[ValueIndex] == "formatLongitude"){ - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(x0+10, y0+60); } else if(DataFormat[ValueIndex] == "formatTime" || DataFormat[ValueIndex] == "formatDate"){ - getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setFont(&Ubuntu_Bold16pt8b); getdisplay().setCursor(x0+20,y0+55); } // pressure in hPa diff --git a/lib/obp60task/PageSolar.cpp b/lib/obp60task/PageSolar.cpp index eb25aba..1962b66 100644 --- a/lib/obp60task/PageSolar.cpp +++ b/lib/obp60task/PageSolar.cpp @@ -87,7 +87,7 @@ public: getdisplay().setTextColor(commonData->fgcolor); // Show name - getdisplay().setFont(&Ubuntu_Bold20pt7b); + getdisplay().setFont(&Ubuntu_Bold20pt8b); getdisplay().setCursor(10, 65); getdisplay().print("Solar"); @@ -98,7 +98,7 @@ public: if(String(batVoltage) == "12V") bvoltage = 12; else bvoltage = 24; getdisplay().print(bvoltage); - getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setFont(&Ubuntu_Bold16pt8b); getdisplay().print("V"); // Show solar power @@ -106,12 +106,12 @@ public: getdisplay().setCursor(10, 200); if(solPower <= 999) getdisplay().print(solPower, 0); if(solPower > 999) getdisplay().print(float(solPower/1000.0), 1); - getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setFont(&Ubuntu_Bold16pt8b); if(solPower <= 999) getdisplay().print("W"); if(solPower > 999) getdisplay().print("kW"); // Show info - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(10, 235); getdisplay().print("Installed"); getdisplay().setCursor(10, 255); @@ -124,15 +124,15 @@ public: getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b); getdisplay().setCursor(150, 200); getdisplay().print(solPercentage); - getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setFont(&Ubuntu_Bold16pt8b); getdisplay().print("%"); - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(150, 235); getdisplay().print("Load"); // Show sensor type info String i2cAddr = ""; - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(270, 60); if(powerSensor == "off") getdisplay().print("Internal"); if(powerSensor == "INA219"){ @@ -172,7 +172,7 @@ public: getdisplay().print("---"); // Missing bus data } } - getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setFont(&Ubuntu_Bold16pt8b); getdisplay().print("V"); // Show actual current in A @@ -184,7 +184,7 @@ public: if(value2 > 99.9) getdisplay().print(value2, 0); } else getdisplay().print("---"); - getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setFont(&Ubuntu_Bold16pt8b); getdisplay().print("A"); // Show actual consumption in W @@ -196,7 +196,7 @@ public: if(value3 > 99.9) getdisplay().print(value3, 0); } else getdisplay().print("---"); - getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setFont(&Ubuntu_Bold16pt8b); getdisplay().print("W"); // Update display diff --git a/lib/obp60task/PageSystem.cpp b/lib/obp60task/PageSystem.cpp index 519bee1..18852cb 100644 --- a/lib/obp60task/PageSystem.cpp +++ b/lib/obp60task/PageSystem.cpp @@ -186,13 +186,13 @@ public: if (mode == 'N') { - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(8, 48); getdisplay().print("System Information"); getdisplay().drawXBitmap(320, 25, logo64_bits, logo64_width, logo64_height, commonData->fgcolor); - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); y0 = 155; char ssid[13]; @@ -284,11 +284,11 @@ public: } else if (mode == 'S') { // Settings - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(x0, 48); getdisplay().print("System settings"); - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); x0 = 8; y0 = 72; @@ -345,11 +345,11 @@ public: } else if (mode == 'C') { // Card info - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(8, 48); getdisplay().print("SD Card info"); - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); x0 = 20; y0 = 72; @@ -359,11 +359,11 @@ public: } else { // NMEA2000 device list - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(8, 48); getdisplay().print("NMEA2000 device list"); - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(20, 80); getdisplay().print("RxD: "); getdisplay().print(String(commonData->status.n2kRx)); diff --git a/lib/obp60task/PageThreeValues.cpp b/lib/obp60task/PageThreeValues.cpp index b51229b..d2131b7 100644 --- a/lib/obp60task/PageThreeValues.cpp +++ b/lib/obp60task/PageThreeValues.cpp @@ -95,7 +95,7 @@ class PageThreeValues : public Page getdisplay().print(name1); // Page name // Show unit - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(20, 90); if(holdvalues == false){ getdisplay().print(unit1); // Unit @@ -143,7 +143,7 @@ class PageThreeValues : public Page getdisplay().print(name2); // Page name // Show unit - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(20, 180); if(holdvalues == false){ getdisplay().print(unit2); // Unit @@ -191,7 +191,7 @@ class PageThreeValues : public Page getdisplay().print(name3); // Page name // Show unit - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(20, 270); if(holdvalues == false){ getdisplay().print(unit3); // Unit diff --git a/lib/obp60task/PageTwoValues.cpp b/lib/obp60task/PageTwoValues.cpp index 5334af8..2859fd2 100644 --- a/lib/obp60task/PageTwoValues.cpp +++ b/lib/obp60task/PageTwoValues.cpp @@ -83,7 +83,7 @@ class PageTwoValues : public Page getdisplay().print(name1); // Page name // Show unit - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(20, 130); if(holdvalues == false){ getdisplay().print(unit1); // Unit @@ -131,7 +131,7 @@ class PageTwoValues : public Page getdisplay().print(name2); // Page name // Show unit - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(20, 240); if(holdvalues == false){ getdisplay().print(unit2); // Unit diff --git a/lib/obp60task/PageVoltage.cpp b/lib/obp60task/PageVoltage.cpp index c98bc96..2aab416 100644 --- a/lib/obp60task/PageVoltage.cpp +++ b/lib/obp60task/PageVoltage.cpp @@ -66,7 +66,7 @@ public: } void printAvg(int avg, uint16_t x, uint16_t y, bool prefix) { - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(x, y); if (prefix) { getdisplay().print("Avg: "); @@ -91,7 +91,7 @@ public: } void printVoltageSymbol(uint16_t x, uint16_t y, uint16_t color) { - getdisplay().setFont(&Ubuntu_Bold16pt7b); + getdisplay().setFont(&Ubuntu_Bold16pt8b); getdisplay().setCursor(x, y); getdisplay().print("V"); getdisplay().fillRect(x, y + 6, 22, 3, color); @@ -201,13 +201,13 @@ public: // Show name getdisplay().setTextColor(commonData->fgcolor); - getdisplay().setFont(&Ubuntu_Bold32pt7b); + getdisplay().setFont(&Ubuntu_Bold32pt8b); getdisplay().setCursor(20, 100); getdisplay().print(name1); // Value name #if defined BOARD_OBP40S3 && defined LIPO_ACCU_1200 && defined VOLTAGE_SENSOR // Show charge status - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(185, 100); if(commonData->data.BatteryChargeStatus == true){ getdisplay().print("Charge"); @@ -218,12 +218,12 @@ public: #endif // Show unit - getdisplay().setFont(&Ubuntu_Bold20pt7b); + getdisplay().setFont(&Ubuntu_Bold20pt8b); getdisplay().setCursor(270, 100); getdisplay().print("V"); // Show battery type - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(295, 100); #ifdef BOARD_OBP60S3 getdisplay().print(batType); @@ -305,7 +305,7 @@ public: {c.x - r + 12, c.y + 1}, {c.x - r, c.y + 1} }; - getdisplay().setFont(&Ubuntu_Bold10pt7b); + getdisplay().setFont(&Ubuntu_Bold10pt8b); for (int angle = 3; angle < 90; angle += 3) { if (angle % 15 == 0) { fillPoly4(rotatePoints(c, pts, angle), commonData->fgcolor); @@ -362,7 +362,7 @@ public: printVoltageSymbol(40, 60, commonData->fgcolor); // Additional information at right side - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(300, 60); getdisplay().print("Source:"); getdisplay().setCursor(300, 80); diff --git a/lib/obp60task/PageWind.cpp b/lib/obp60task/PageWind.cpp index c40d61c..0a94857 100644 --- a/lib/obp60task/PageWind.cpp +++ b/lib/obp60task/PageWind.cpp @@ -370,7 +370,7 @@ public: // Original example code with scaling circle // Show values AWS/TWS - getdisplay().setFont(&Ubuntu_Bold20pt7b); + getdisplay().setFont(&Ubuntu_Bold20pt8b); getdisplay().setCursor(20, 50); getdisplay().print(name1); // Value name getdisplay().print(": "); @@ -386,7 +386,7 @@ public: } // Show values AWD/TWD - getdisplay().setFont(&Ubuntu_Bold20pt7b); + getdisplay().setFont(&Ubuntu_Bold20pt8b); getdisplay().setCursor(20, 260); getdisplay().print(name2); // Value name getdisplay().print(": "); @@ -420,7 +420,7 @@ public: }; fillPoly4(rotatePoints(c, pts, RadToDeg(value2)), commonData->fgcolor); } else { - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); drawTextCenter(c.x, c.y, "no data"); } @@ -438,7 +438,7 @@ public: }; int angle; - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); // starbord // text with line @@ -475,7 +475,7 @@ public: } // data source - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(8, 50); if (source == 'A') { getdisplay().print("APP"); @@ -510,7 +510,7 @@ public: fillPoly4(rotatePoints(c, pts, alpha), commonData->fgcolor); getdisplay().fillCircle(c.x, c.y, 6, commonData->bgcolor); } else { - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); drawTextCenter(c.x, c.y, "no data"); } @@ -523,7 +523,7 @@ public: getdisplay().print(svalue1old); } // unit - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(220, 265); getdisplay().print("kts"); } @@ -531,7 +531,7 @@ public: // Normal mode // data source - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(8, 50); if (source == 'A') { getdisplay().print("APP"); @@ -595,7 +595,7 @@ public: getdisplay().print(svalue1old); } // unit - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(220, 265); getdisplay().print("kts"); @@ -612,7 +612,7 @@ public: fillPoly4(rotatePoints(c, pts, alpha), commonData->fgcolor); getdisplay().fillCircle(c.x, c.y, 6, commonData->bgcolor); } else { - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); drawTextCenter(c.x, c.y, "no data"); } diff --git a/lib/obp60task/PageWindRose.cpp b/lib/obp60task/PageWindRose.cpp index 268d555..9b1c203 100644 --- a/lib/obp60task/PageWindRose.cpp +++ b/lib/obp60task/PageWindRose.cpp @@ -155,10 +155,10 @@ public: getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b); getdisplay().setCursor(10, 65); getdisplay().print(svalue1); // Value - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(10, 95); getdisplay().print(name1); // Name - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(10, 115); getdisplay().print(" "); if(holdvalues == false){ @@ -175,10 +175,10 @@ public: getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b); getdisplay().setCursor(10, 270); getdisplay().print(svalue2); // Value - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(10, 220); getdisplay().print(name2); // Name - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(10, 190); getdisplay().print(" "); if(holdvalues == false){ @@ -197,10 +197,10 @@ public: else{ getdisplay().print("---"); // Value } - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(335, 95); getdisplay().print(name3); // Name - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(335, 115); getdisplay().print(" "); if(holdvalues == false){ @@ -217,10 +217,10 @@ public: getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b); getdisplay().setCursor(295, 270); getdisplay().print(svalue4); // Value - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(335, 220); getdisplay().print(name4); // Name - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(335, 190); getdisplay().print(" "); if(holdvalues == false){ @@ -270,7 +270,7 @@ public: getdisplay().getTextBounds(ii, int(x), int(y), &x1, &y1, &w, &h); // Calc width of new string getdisplay().setCursor(x-w/2, y+h/2); if(i % 30 == 0){ - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().print(ii); } @@ -333,7 +333,7 @@ public: getdisplay().setFont(&DSEG7Classic_BoldItalic16pt7b); getdisplay().setCursor(160, 200); getdisplay().print(svalue5); // Value - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(190, 215); getdisplay().print(" "); if(holdvalues == false){ @@ -347,7 +347,7 @@ public: getdisplay().setFont(&DSEG7Classic_BoldItalic16pt7b); getdisplay().setCursor(160, 130); getdisplay().print(svalue6); // Value - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(190, 90); getdisplay().print(" "); if(holdvalues == false){ diff --git a/lib/obp60task/PageWindRoseFlex.cpp b/lib/obp60task/PageWindRoseFlex.cpp index f107d9e..bee86fe 100644 --- a/lib/obp60task/PageWindRoseFlex.cpp +++ b/lib/obp60task/PageWindRoseFlex.cpp @@ -155,10 +155,10 @@ public: getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b); getdisplay().setCursor(10, 65); getdisplay().print(svalue2); // Value - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(10, 95); getdisplay().print(name2); // Name - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(10, 115); getdisplay().print(" "); if(holdvalues == false){ @@ -175,10 +175,10 @@ public: getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b); getdisplay().setCursor(10, 270); getdisplay().print(svalue3); // Value - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(10, 220); getdisplay().print(name3); // Name - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(10, 190); getdisplay().print(" "); if(holdvalues == false){ @@ -198,10 +198,10 @@ public: else{ getdisplay().print("---"); // Value } - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(335, 95); getdisplay().print(name4); // Name - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(335, 115); getdisplay().print(" "); if(holdvalues == false){ @@ -218,10 +218,10 @@ public: getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b); getdisplay().setCursor(295, 270); getdisplay().print(svalue5); // Value - getdisplay().setFont(&Ubuntu_Bold12pt7b); + getdisplay().setFont(&Ubuntu_Bold12pt8b); getdisplay().setCursor(335, 220); getdisplay().print(name5); // Name - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(335, 190); getdisplay().print(" "); if(holdvalues == false){ @@ -272,7 +272,7 @@ public: getdisplay().getTextBounds(ii, int(x), int(y), &x1, &y1, &w, &h); // Calc width of new string getdisplay().setCursor(x-w/2, y+h/2); if(i % 30 == 0){ - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().print(ii); } @@ -336,7 +336,7 @@ if ( cos(value1) > 0){ getdisplay().setFont(&DSEG7Classic_BoldItalic16pt7b); getdisplay().setCursor(160, 200); getdisplay().print(svalue6); // Value - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(190, 215); getdisplay().print(" "); if(holdvalues == false){ @@ -350,7 +350,7 @@ if ( cos(value1) > 0){ getdisplay().setFont(&DSEG7Classic_BoldItalic16pt7b); getdisplay().setCursor(160, 130); getdisplay().print(svalue6); // Value - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(190, 90); getdisplay().print(" "); if(holdvalues == false){ diff --git a/lib/obp60task/PageXTETrack.cpp b/lib/obp60task/PageXTETrack.cpp index cbb1a2a..5b0bdbb 100644 --- a/lib/obp60task/PageXTETrack.cpp +++ b/lib/obp60task/PageXTETrack.cpp @@ -94,7 +94,7 @@ class PageXTETrack : public Page getdisplay().setTextColor(commonData->fgcolor); // descriptions - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(50, 188); getdisplay().print("Cross-track error"); getdisplay().setCursor(270, 188); @@ -148,7 +148,7 @@ class PageXTETrack : public Page sval_wpname = "Tonne 122"; } - getdisplay().setFont(&Ubuntu_Bold10pt7b); + getdisplay().setFont(&Ubuntu_Bold10pt8b); getdisplay().getTextBounds(sval_wpname, 0, 150, &x, &y, &w, &h); // TODO if text don't fix use smaller font size. // if smallest size does not fit use 2 lines diff --git a/lib/obp60task/Ubuntu_Bold10pt7b.h b/lib/obp60task/Ubuntu_Bold10pt7b.h deleted file mode 100644 index 92924ac..0000000 --- a/lib/obp60task/Ubuntu_Bold10pt7b.h +++ /dev/null @@ -1,232 +0,0 @@ -const uint8_t Ubuntu_Bold10pt7bBitmaps[] PROGMEM = { - 0xFF, 0xFF, 0xFF, 0xE3, 0xFF, 0xC0, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, 0xC0, - 0x0E, 0xE0, 0xEE, 0x1D, 0xCF, 0xFF, 0xFF, 0xF1, 0xDC, 0x1D, 0xC3, 0xB8, - 0xFF, 0xFF, 0xFF, 0x3B, 0x83, 0xB8, 0x77, 0x07, 0x70, 0x1C, 0x0E, 0x0F, - 0xCF, 0xEE, 0x07, 0x03, 0x81, 0xFC, 0x7F, 0x0F, 0xC0, 0xE0, 0x74, 0x3F, - 0xF9, 0xF8, 0x38, 0x1C, 0x00, 0x38, 0x38, 0x7C, 0x70, 0xC6, 0x70, 0xC6, - 0xE0, 0xC6, 0xE0, 0xC7, 0xC0, 0x7D, 0xDC, 0x3B, 0xBE, 0x03, 0xE3, 0x07, - 0x63, 0x07, 0x63, 0x0E, 0x63, 0x0E, 0x3E, 0x1C, 0x1C, 0x1E, 0x01, 0xF8, - 0x1F, 0xE0, 0xE7, 0x07, 0x38, 0x1F, 0x80, 0xF8, 0x0F, 0xCE, 0xEF, 0x77, - 0x3F, 0x38, 0xF9, 0xFF, 0xC7, 0xFF, 0x1F, 0xBC, 0xFF, 0xFF, 0xC0, 0x08, - 0x73, 0x8E, 0x71, 0xCE, 0x38, 0xE3, 0x8E, 0x38, 0xE3, 0x87, 0x1C, 0x38, - 0xE1, 0xC2, 0x43, 0x87, 0x1C, 0x38, 0xE1, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, - 0x73, 0x8E, 0x71, 0xCE, 0x10, 0x1C, 0x0E, 0x17, 0x5F, 0xFF, 0xF9, 0xB1, - 0xDC, 0x6C, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x0F, 0xFF, 0xFF, 0xFF, 0xF8, - 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x00, 0x77, 0x77, 0xEE, 0xFF, 0xFF, 0xC0, - 0x6F, 0xF6, 0x01, 0xC0, 0xE0, 0x38, 0x0E, 0x07, 0x01, 0xC0, 0x70, 0x38, - 0x0E, 0x03, 0x81, 0xC0, 0x70, 0x1C, 0x0E, 0x03, 0x80, 0xE0, 0x70, 0x1C, - 0x07, 0x03, 0x80, 0x1C, 0x3F, 0x9F, 0xDE, 0xFE, 0x3F, 0x1F, 0x8F, 0xC7, - 0xE3, 0xF1, 0xFD, 0xEF, 0xE7, 0xF0, 0xE0, 0x0E, 0x3D, 0xFF, 0xF6, 0xE1, - 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC0, 0x3E, 0x7F, 0xBF, 0xEC, - 0x70, 0x38, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1F, 0xFF, 0xFF, 0xFC, - 0x3C, 0x7F, 0x3F, 0xC8, 0xE0, 0x70, 0x30, 0xF0, 0x7E, 0x07, 0x81, 0xE0, - 0xFF, 0xFF, 0xF3, 0xF0, 0x07, 0x07, 0x87, 0xC3, 0xE3, 0xF3, 0xB9, 0x9D, - 0xCE, 0xFF, 0xFF, 0xFF, 0xE0, 0xE0, 0x70, 0x38, 0x3F, 0x1F, 0x8F, 0xC7, - 0x03, 0x83, 0xF1, 0xFC, 0xFF, 0x07, 0x81, 0xC0, 0xFF, 0xFF, 0xF3, 0xE0, - 0x07, 0x0F, 0x8F, 0xCF, 0x07, 0x07, 0xF3, 0xFD, 0xFF, 0xE3, 0xF1, 0xF8, - 0xEF, 0xF7, 0xF1, 0xF0, 0xFF, 0xFF, 0xFF, 0xE0, 0xE0, 0xE0, 0x70, 0x70, - 0x38, 0x38, 0x1C, 0x0E, 0x0E, 0x07, 0x03, 0x80, 0x3E, 0x3F, 0xBF, 0xFC, - 0x7E, 0x3F, 0xB9, 0xF8, 0xFE, 0xE7, 0xF1, 0xF8, 0xFF, 0xF7, 0xF1, 0xF0, - 0x3E, 0x3F, 0xBF, 0xDC, 0x7E, 0x3F, 0x1F, 0xFE, 0xFF, 0x3F, 0x83, 0xC3, - 0xCF, 0xC7, 0xC3, 0x80, 0x6F, 0xF6, 0x00, 0x06, 0xFF, 0x60, 0x33, 0xDE, - 0x60, 0x00, 0x00, 0x73, 0x9C, 0xEE, 0x70, 0x01, 0x87, 0xEF, 0xFF, 0xF8, - 0xE0, 0x3F, 0x8F, 0xFC, 0x7E, 0x01, 0x80, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, - 0x07, 0xFF, 0xFF, 0xFF, 0x60, 0x3E, 0x3F, 0xE3, 0xF0, 0x38, 0xFF, 0xFE, - 0xF8, 0x60, 0x00, 0x7C, 0xFE, 0xFF, 0x07, 0x07, 0x07, 0x0E, 0x1E, 0x3C, - 0x38, 0x38, 0x00, 0x30, 0x78, 0x78, 0x30, 0x03, 0xF0, 0x07, 0xFE, 0x0F, - 0x03, 0x86, 0x00, 0xE6, 0x1F, 0xB7, 0x3F, 0xCF, 0x3C, 0xE7, 0x9C, 0x73, - 0xCE, 0x39, 0xE7, 0x1C, 0xF3, 0xCE, 0x5C, 0xFF, 0xE6, 0x3F, 0xE3, 0x80, - 0x00, 0xF0, 0x00, 0x3F, 0xE0, 0x07, 0xF8, 0x00, 0x03, 0x80, 0x0F, 0x80, - 0x1F, 0x00, 0x77, 0x00, 0xEE, 0x03, 0xDE, 0x07, 0x1C, 0x1E, 0x3C, 0x3F, - 0xF8, 0x7F, 0xF1, 0xFF, 0xF3, 0x80, 0xE7, 0x01, 0xDC, 0x01, 0xC0, 0xFE, - 0x3F, 0xCF, 0xFB, 0x8E, 0xE3, 0xBF, 0xCF, 0xF3, 0xFE, 0xE1, 0xF8, 0x7E, - 0x1F, 0xFF, 0xFF, 0xBF, 0x80, 0x0F, 0xC7, 0xFD, 0xFF, 0xBC, 0x2F, 0x01, - 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1E, 0x01, 0xE0, 0x3F, 0xF3, 0xFE, 0x1F, - 0x80, 0xFF, 0x0F, 0xFC, 0xFF, 0xEE, 0x1E, 0xE0, 0xFE, 0x07, 0xE0, 0x7E, - 0x07, 0xE0, 0x7E, 0x0F, 0xE1, 0xEF, 0xFE, 0xFF, 0xCF, 0xF0, 0xFF, 0xFF, - 0xFF, 0xFC, 0x0E, 0x07, 0xFB, 0xFD, 0xFE, 0xE0, 0x70, 0x38, 0x1F, 0xFF, - 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xE0, 0xE0, 0xFE, 0xFE, 0xFE, 0xE0, 0xE0, - 0xE0, 0xE0, 0xE0, 0xE0, 0x0F, 0xC7, 0xFD, 0xFF, 0xBC, 0x2F, 0x01, 0xC0, - 0x38, 0x07, 0x07, 0xE0, 0xFE, 0x1D, 0xE3, 0xBF, 0xF3, 0xFE, 0x1F, 0x80, - 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, - 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xC0, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, - 0x81, 0xD1, 0xEF, 0xFF, 0xF3, 0xF0, 0xE0, 0xFE, 0x1E, 0xE3, 0xCE, 0x78, - 0xEF, 0x0F, 0xE0, 0xFC, 0x0F, 0xC0, 0xEE, 0x0E, 0x70, 0xE7, 0x8E, 0x3C, - 0xE1, 0xEE, 0x0F, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, - 0xE0, 0x70, 0x38, 0x1F, 0xFF, 0xFF, 0xFC, 0x70, 0x1C, 0xF0, 0x79, 0xE0, - 0xF3, 0xE3, 0xE7, 0xC7, 0xDD, 0x8D, 0xFB, 0xBB, 0xF3, 0x67, 0xE7, 0xCF, - 0xCF, 0x9F, 0x8E, 0x3F, 0x1C, 0x7E, 0x00, 0xFC, 0x01, 0xC0, 0xE0, 0xFE, - 0x1F, 0xC3, 0xFC, 0x7F, 0xCF, 0xD9, 0xFB, 0xBF, 0x3F, 0xE7, 0xFC, 0x7F, - 0x87, 0xF0, 0xFE, 0x0F, 0xC1, 0xC0, 0x0F, 0xC0, 0xFF, 0xC7, 0xFF, 0x9E, - 0x1E, 0xF0, 0x3F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0xC0, 0xF7, - 0x87, 0x9F, 0xFE, 0x3F, 0xF0, 0x3F, 0x00, 0xFE, 0x3F, 0xEF, 0xFF, 0x87, - 0xE1, 0xF8, 0x7F, 0xFF, 0xFE, 0xFE, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, - 0x00, 0x0F, 0xC0, 0xFF, 0xC7, 0xFF, 0x9E, 0x1E, 0xF0, 0x3F, 0x80, 0x7E, - 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0xC0, 0xF7, 0x87, 0x9F, 0xFE, 0x3F, 0xF0, - 0x3F, 0x00, 0x3C, 0x00, 0x7E, 0x00, 0x78, 0xFE, 0x1F, 0xF3, 0xFF, 0x70, - 0xEE, 0x1D, 0xC3, 0xBF, 0xF7, 0xFC, 0xFF, 0x1C, 0xF3, 0x8E, 0x70, 0xEE, - 0x1D, 0xC1, 0xC0, 0x3F, 0x1F, 0xEF, 0xFB, 0x80, 0xE0, 0x3E, 0x07, 0xF0, - 0x7E, 0x03, 0xC0, 0x74, 0x1F, 0xFF, 0xFF, 0x9F, 0xC0, 0xFF, 0xFF, 0xFF, - 0xFF, 0x87, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, - 0x07, 0x00, 0xE0, 0x1C, 0x00, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, - 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0xC7, 0xBF, 0xE7, 0xFC, 0x3E, - 0x00, 0xE0, 0x0E, 0xE0, 0x39, 0xC0, 0x71, 0xC1, 0xC3, 0x83, 0x87, 0x07, - 0x07, 0x1C, 0x0E, 0x38, 0x0E, 0xE0, 0x1D, 0xC0, 0x1F, 0x00, 0x3E, 0x00, - 0x7C, 0x00, 0x70, 0x00, 0xE0, 0x00, 0xFC, 0x1C, 0x1D, 0xC3, 0x87, 0x38, - 0x78, 0xE7, 0x1F, 0x1C, 0xE3, 0x63, 0x8E, 0x6C, 0xE1, 0xDD, 0xDC, 0x3B, - 0xBB, 0x83, 0x63, 0x60, 0x7C, 0x7C, 0x0F, 0x8F, 0x81, 0xE0, 0xF0, 0x1C, - 0x1C, 0x00, 0xF0, 0x3D, 0xE1, 0xE3, 0x87, 0x07, 0x38, 0x1F, 0xE0, 0x3F, - 0x00, 0x78, 0x01, 0xE0, 0x0F, 0xC0, 0x7F, 0x81, 0xCE, 0x0E, 0x1C, 0x78, - 0x7B, 0xC0, 0xF0, 0xE0, 0x3B, 0x83, 0x9C, 0x1C, 0x71, 0xC3, 0xDE, 0x0E, - 0xE0, 0x3E, 0x01, 0xF0, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x70, - 0x03, 0x80, 0xFF, 0xFF, 0xFF, 0xFC, 0x0E, 0x07, 0x03, 0x80, 0xE0, 0x70, - 0x38, 0x1E, 0x07, 0x03, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xCE, 0x73, - 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0xFF, 0xF0, 0xE0, 0x1C, 0x07, - 0x01, 0xC0, 0x38, 0x0E, 0x03, 0x80, 0x70, 0x1C, 0x07, 0x00, 0xE0, 0x38, - 0x0E, 0x01, 0xC0, 0x70, 0x1C, 0x03, 0x80, 0xE0, 0x38, 0x07, 0xFF, 0xFE, - 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0x3F, 0xFF, 0xF0, 0x0E, - 0x03, 0xE0, 0x7C, 0x1D, 0xC7, 0xBC, 0xE3, 0xB8, 0x3B, 0x06, 0xFF, 0xFF, - 0xF0, 0x47, 0x1E, 0x20, 0x7E, 0x3F, 0x9F, 0xE0, 0x73, 0xFB, 0xFF, 0x8F, - 0xC7, 0xFF, 0xBF, 0xCF, 0xE0, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x3F, - 0xCF, 0xFB, 0xFE, 0xE3, 0xF8, 0x7E, 0x1F, 0x87, 0xE3, 0xFF, 0xEF, 0xFB, - 0xF8, 0x1F, 0x3F, 0x7F, 0xF0, 0xE0, 0xE0, 0xE0, 0xF0, 0x7F, 0x7F, 0x1F, - 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC7, 0xF7, 0xFD, 0xFF, 0xF1, 0xF8, - 0x7E, 0x1F, 0x87, 0xF1, 0xDF, 0xF7, 0xFC, 0x7F, 0x1F, 0x1F, 0xE7, 0xFF, - 0x87, 0xFF, 0xFF, 0xFE, 0x03, 0xC0, 0x7F, 0x9F, 0xE1, 0xF8, 0x3F, 0x7E, - 0xFE, 0xE0, 0xE0, 0xFE, 0xFE, 0xFE, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, - 0xE0, 0xE0, 0x1F, 0xDF, 0xF7, 0xFF, 0xC7, 0xE1, 0xF8, 0x7F, 0x1F, 0xFF, - 0x7F, 0xCF, 0xF0, 0x1C, 0x0F, 0x7F, 0x9F, 0xE7, 0xE0, 0xE0, 0x38, 0x0E, - 0x03, 0x80, 0xE0, 0x3F, 0xCF, 0xFB, 0xFF, 0xE3, 0xF8, 0x7E, 0x1F, 0x87, - 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1C, - 0x71, 0xC7, 0x00, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1F, - 0xFF, 0xBC, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC3, 0xB8, 0xE7, - 0x38, 0xEE, 0x1F, 0x83, 0xF8, 0x77, 0x8E, 0x79, 0xC7, 0x38, 0x77, 0x07, - 0xE7, 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x7F, 0xE7, 0xFE, 0xF9, - 0xFF, 0xFB, 0xFF, 0xFF, 0x1C, 0x7E, 0x38, 0xFC, 0x71, 0xF8, 0xE3, 0xF1, - 0xC7, 0xE3, 0x8F, 0xC7, 0x1F, 0x8E, 0x38, 0xFF, 0x3F, 0xEF, 0xFF, 0x8F, - 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1C, 0x1E, 0x1F, 0xE7, - 0xFB, 0xCF, 0xE1, 0xF8, 0x7E, 0x1F, 0xCF, 0x7F, 0x9F, 0xE1, 0xE0, 0xFE, - 0x3F, 0xEF, 0xFB, 0x8F, 0xE1, 0xF8, 0x7E, 0x1F, 0x8F, 0xFF, 0xBF, 0xEF, - 0xF3, 0x80, 0xE0, 0x38, 0x0E, 0x00, 0x1F, 0xDF, 0xF7, 0xFF, 0xC7, 0xE1, - 0xF8, 0x7E, 0x1F, 0xC7, 0x7F, 0xDF, 0xF3, 0xFC, 0x07, 0x01, 0xC0, 0x70, - 0x1C, 0x7F, 0xFF, 0xFF, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x80, 0x3E, - 0xFE, 0xE0, 0xE0, 0xF8, 0x7E, 0x1F, 0x07, 0x87, 0xFF, 0xFC, 0xE1, 0xC3, - 0x87, 0xFF, 0xFF, 0xF8, 0x70, 0xE1, 0xC3, 0x87, 0xF7, 0xE7, 0xC0, 0xE1, - 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0xC7, 0xFF, 0xDF, 0xF3, - 0xFC, 0xE0, 0xFE, 0x1D, 0xC7, 0x38, 0xE7, 0xBC, 0x77, 0x0E, 0xE1, 0xFC, - 0x1F, 0x03, 0xE0, 0x38, 0x00, 0xE3, 0x8F, 0xC7, 0x1D, 0x8E, 0x33, 0x9E, - 0xE7, 0x7D, 0xCE, 0xDB, 0x8D, 0xB6, 0x1F, 0x7C, 0x3C, 0x78, 0x38, 0xE0, - 0x71, 0xC0, 0xF1, 0xEF, 0x78, 0xEE, 0x1F, 0xC1, 0xF0, 0x1C, 0x07, 0xC1, - 0xFC, 0x3B, 0x8F, 0x7B, 0xC7, 0x80, 0xE0, 0xFC, 0x1D, 0xC7, 0x38, 0xE7, - 0x1C, 0x77, 0x0E, 0xE1, 0xFC, 0x1F, 0x03, 0xE0, 0x7C, 0x0F, 0x0F, 0xE1, - 0xF8, 0x3E, 0x00, 0xFF, 0xFF, 0xFF, 0x0E, 0x1C, 0x38, 0x38, 0x70, 0xFF, - 0xFF, 0xFF, 0x0E, 0x3C, 0xF9, 0xC3, 0x87, 0x0E, 0x1C, 0x79, 0xE3, 0xC7, - 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x7C, 0xF8, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xF0, 0xE1, 0xE3, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x3C, - 0x3C, 0x79, 0xF3, 0x87, 0x0E, 0x1C, 0x39, 0xF3, 0xE7, 0x00, 0x30, 0x9F, - 0x3F, 0xFF, 0x3E, 0x43, 0x00 }; - -const GFXglyph Ubuntu_Bold10pt7bGlyphs[] PROGMEM = { - { 0, 0, 0, 5, 0, 1 }, // 0x20 ' ' - { 0, 3, 14, 5, 1, -13 }, // 0x21 '!' - { 6, 7, 6, 9, 1, -14 }, // 0x22 '"' - { 12, 12, 14, 14, 1, -13 }, // 0x23 '#' - { 33, 9, 17, 11, 1, -14 }, // 0x24 '$' - { 53, 16, 14, 18, 1, -13 }, // 0x25 '%' - { 81, 13, 14, 14, 1, -13 }, // 0x26 '&' - { 104, 3, 6, 5, 1, -14 }, // 0x27 ''' - { 107, 6, 20, 7, 1, -15 }, // 0x28 '(' - { 122, 6, 20, 7, 0, -15 }, // 0x29 ')' - { 137, 9, 8, 10, 1, -13 }, // 0x2A '*' - { 146, 11, 11, 13, 1, -11 }, // 0x2B '+' - { 162, 4, 6, 5, 0, -2 }, // 0x2C ',' - { 165, 6, 3, 8, 1, -7 }, // 0x2D '-' - { 168, 4, 4, 6, 1, -3 }, // 0x2E '.' - { 170, 10, 20, 9, -1, -15 }, // 0x2F '/' - { 195, 9, 14, 11, 1, -13 }, // 0x30 '0' - { 211, 7, 14, 11, 1, -13 }, // 0x31 '1' - { 224, 9, 14, 11, 1, -13 }, // 0x32 '2' - { 240, 9, 14, 11, 1, -13 }, // 0x33 '3' - { 256, 9, 14, 11, 1, -13 }, // 0x34 '4' - { 272, 9, 14, 11, 1, -13 }, // 0x35 '5' - { 288, 9, 14, 11, 1, -13 }, // 0x36 '6' - { 304, 9, 14, 11, 1, -13 }, // 0x37 '7' - { 320, 9, 14, 11, 1, -13 }, // 0x38 '8' - { 336, 9, 14, 11, 1, -13 }, // 0x39 '9' - { 352, 4, 11, 6, 1, -10 }, // 0x3A ':' - { 358, 5, 14, 6, 0, -10 }, // 0x3B ';' - { 367, 10, 9, 11, 1, -9 }, // 0x3C '<' - { 379, 9, 8, 11, 1, -9 }, // 0x3D '=' - { 388, 9, 9, 11, 1, -9 }, // 0x3E '>' - { 399, 8, 16, 9, 0, -15 }, // 0x3F '?' - { 415, 17, 17, 19, 1, -13 }, // 0x40 '@' - { 452, 15, 14, 15, 0, -13 }, // 0x41 'A' - { 479, 10, 14, 13, 2, -13 }, // 0x42 'B' - { 497, 11, 14, 13, 1, -13 }, // 0x43 'C' - { 517, 12, 14, 15, 2, -13 }, // 0x44 'D' - { 538, 9, 14, 12, 2, -13 }, // 0x45 'E' - { 554, 8, 14, 11, 2, -13 }, // 0x46 'F' - { 568, 11, 14, 14, 1, -13 }, // 0x47 'G' - { 588, 11, 14, 15, 2, -13 }, // 0x48 'H' - { 608, 3, 14, 7, 2, -13 }, // 0x49 'I' - { 614, 9, 14, 11, 0, -13 }, // 0x4A 'J' - { 630, 12, 14, 14, 2, -13 }, // 0x4B 'K' - { 651, 9, 14, 11, 2, -13 }, // 0x4C 'L' - { 667, 15, 14, 17, 1, -13 }, // 0x4D 'M' - { 694, 11, 14, 15, 2, -13 }, // 0x4E 'N' - { 714, 14, 14, 16, 1, -13 }, // 0x4F 'O' - { 739, 10, 14, 13, 2, -13 }, // 0x50 'P' - { 757, 14, 17, 16, 1, -13 }, // 0x51 'Q' - { 787, 11, 14, 13, 2, -13 }, // 0x52 'R' - { 807, 10, 14, 12, 1, -13 }, // 0x53 'S' - { 825, 11, 14, 11, 0, -13 }, // 0x54 'T' - { 845, 11, 14, 15, 2, -13 }, // 0x55 'U' - { 865, 15, 14, 15, 0, -13 }, // 0x56 'V' - { 892, 19, 14, 19, 0, -13 }, // 0x57 'W' - { 926, 14, 14, 14, 0, -13 }, // 0x58 'X' - { 951, 13, 14, 13, 0, -13 }, // 0x59 'Y' - { 974, 10, 14, 12, 1, -13 }, // 0x5A 'Z' - { 992, 5, 20, 7, 2, -15 }, // 0x5B '[' - { 1005, 10, 20, 9, -1, -15 }, // 0x5C '\' - { 1030, 5, 20, 7, 0, -15 }, // 0x5D ']' - { 1043, 11, 8, 11, 0, -13 }, // 0x5E '^' - { 1054, 10, 2, 10, 0, 3 }, // 0x5F '_' - { 1057, 5, 4, 6, 1, -15 }, // 0x60 '`' - { 1060, 9, 11, 11, 1, -10 }, // 0x61 'a' - { 1073, 10, 16, 12, 1, -15 }, // 0x62 'b' - { 1093, 8, 11, 10, 1, -10 }, // 0x63 'c' - { 1104, 10, 16, 12, 1, -15 }, // 0x64 'd' - { 1124, 10, 11, 12, 1, -10 }, // 0x65 'e' - { 1138, 8, 16, 8, 1, -15 }, // 0x66 'f' - { 1154, 10, 15, 12, 1, -10 }, // 0x67 'g' - { 1173, 10, 16, 12, 1, -15 }, // 0x68 'h' - { 1193, 3, 16, 5, 1, -15 }, // 0x69 'i' - { 1199, 6, 20, 5, -2, -15 }, // 0x6A 'j' - { 1214, 11, 16, 12, 1, -15 }, // 0x6B 'k' - { 1236, 5, 16, 6, 1, -15 }, // 0x6C 'l' - { 1246, 15, 11, 17, 1, -10 }, // 0x6D 'm' - { 1267, 10, 11, 12, 1, -10 }, // 0x6E 'n' - { 1281, 10, 11, 12, 1, -10 }, // 0x6F 'o' - { 1295, 10, 15, 12, 1, -10 }, // 0x70 'p' - { 1314, 10, 15, 12, 1, -10 }, // 0x71 'q' - { 1333, 7, 11, 8, 1, -10 }, // 0x72 'r' - { 1343, 8, 11, 10, 1, -10 }, // 0x73 's' - { 1354, 7, 14, 9, 1, -13 }, // 0x74 't' - { 1367, 10, 11, 12, 1, -10 }, // 0x75 'u' - { 1381, 11, 11, 11, 0, -10 }, // 0x76 'v' - { 1397, 15, 11, 15, 0, -10 }, // 0x77 'w' - { 1418, 11, 11, 11, 0, -10 }, // 0x78 'x' - { 1434, 11, 15, 11, 0, -10 }, // 0x79 'y' - { 1455, 8, 11, 10, 1, -10 }, // 0x7A 'z' - { 1466, 7, 20, 8, 1, -15 }, // 0x7B '{' - { 1484, 3, 20, 7, 2, -15 }, // 0x7C '|' - { 1492, 7, 20, 8, 0, -15 }, // 0x7D '}' - { 1510, 10, 5, 11, 1, -8 } }; // 0x7E '~' - -const GFXfont Ubuntu_Bold10pt7b PROGMEM = { - (uint8_t *)Ubuntu_Bold10pt7bBitmaps, - (GFXglyph *)Ubuntu_Bold10pt7bGlyphs, - 0x20, 0x7E, 23 }; - -// Approx. 2189 bytes diff --git a/lib/obp60task/Ubuntu_Bold12pt7b.h b/lib/obp60task/Ubuntu_Bold12pt7b.h deleted file mode 100644 index 019b656..0000000 --- a/lib/obp60task/Ubuntu_Bold12pt7b.h +++ /dev/null @@ -1,290 +0,0 @@ -const uint8_t Ubuntu_Bold12pt7bBitmaps[] PROGMEM = { - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0xFF, 0x60, 0xF7, 0xFB, 0xFD, - 0xFE, 0xFF, 0x7F, 0xBF, 0x9C, 0x0F, 0x3C, 0x1E, 0x78, 0x3C, 0xF0, 0xF3, - 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x3C, 0x3E, 0xF8, 0x79, 0xE3, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x9E, 0x1E, 0x78, 0x3C, 0xF0, 0x79, - 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x01, 0xFC, 0x7F, 0xE7, 0xFE, 0xF0, 0x4F, - 0x00, 0xF0, 0x0F, 0xF0, 0x7F, 0xC3, 0xFE, 0x07, 0xF0, 0x1F, 0x00, 0xF6, - 0x0F, 0xFF, 0xEF, 0xFC, 0x3F, 0x80, 0xE0, 0x0E, 0x00, 0xE0, 0x3E, 0x0F, - 0x07, 0xF0, 0xE0, 0xF7, 0x9E, 0x0E, 0x39, 0xC0, 0xE3, 0xBC, 0x0E, 0x3B, - 0x80, 0xF7, 0xF8, 0x07, 0xF7, 0x00, 0x3E, 0xF7, 0xC0, 0x0E, 0xFE, 0x01, - 0xFE, 0xF0, 0x1D, 0xC7, 0x03, 0xDC, 0x70, 0x39, 0xC7, 0x07, 0x9E, 0xF0, - 0x70, 0xFE, 0x0F, 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0xC0, 0x3F, 0xE0, 0x38, - 0xE0, 0x38, 0xE0, 0x3D, 0xE0, 0x1F, 0xC0, 0x1F, 0x80, 0x3F, 0x9E, 0x7F, - 0x9E, 0xF3, 0xDC, 0xF1, 0xFC, 0xF0, 0xF8, 0xF8, 0xF8, 0xFF, 0xFC, 0x7F, - 0xFE, 0x1F, 0x9F, 0xFF, 0xFF, 0xFF, 0xE0, 0x08, 0x3C, 0xF1, 0xE7, 0x8F, - 0x1E, 0x78, 0xF1, 0xE3, 0xC7, 0x8F, 0x1E, 0x3C, 0x78, 0x78, 0xF1, 0xE1, - 0xE3, 0xC3, 0xC2, 0x00, 0x21, 0xE1, 0xE3, 0xC3, 0xC7, 0x8F, 0x0F, 0x1E, - 0x3C, 0x78, 0xF1, 0xE3, 0xC7, 0x8F, 0x3C, 0x78, 0xF3, 0xC7, 0x9E, 0x08, - 0x00, 0x0E, 0x01, 0xC1, 0x39, 0x7A, 0xFF, 0xFE, 0x1C, 0x06, 0xC1, 0xDC, - 0x7B, 0xC2, 0x20, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x0F, 0xFF, 0xFF, 0xFF, - 0xF8, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x00, 0x7B, 0xDE, 0xF7, 0xBB, 0xCC, - 0xFF, 0xFF, 0xF8, 0x6F, 0xF6, 0x00, 0xF0, 0x1F, 0x01, 0xE0, 0x1E, 0x03, - 0xC0, 0x3C, 0x03, 0xC0, 0x78, 0x07, 0x80, 0x78, 0x0F, 0x00, 0xF0, 0x0F, - 0x01, 0xE0, 0x1E, 0x01, 0xE0, 0x3C, 0x03, 0xC0, 0x3C, 0x07, 0x80, 0x78, - 0x0F, 0x80, 0xF0, 0x00, 0x0F, 0x03, 0xFC, 0x7F, 0xE7, 0x9E, 0x70, 0xEF, - 0x0F, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0xF0, 0xE7, - 0x9E, 0x7F, 0xE3, 0xFC, 0x0F, 0x00, 0x07, 0x1F, 0x7F, 0xFF, 0xEF, 0x4F, - 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x1F, - 0x07, 0xFC, 0xFF, 0xE6, 0x3E, 0x01, 0xE0, 0x1E, 0x03, 0xE0, 0x3C, 0x07, - 0x80, 0xF8, 0x3F, 0x03, 0xE0, 0x7C, 0x0F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF0, 0x3E, 0x1F, 0xF3, 0xFF, 0x21, 0xE0, 0x3C, 0x07, 0x87, 0xE0, 0xF8, - 0x1F, 0xC0, 0x78, 0x07, 0x80, 0xF0, 0x1E, 0x07, 0xFF, 0xF7, 0xFC, 0x7F, - 0x00, 0x03, 0xC0, 0x7C, 0x0F, 0xC0, 0xFC, 0x1F, 0xC3, 0xBC, 0x3B, 0xC7, - 0x3C, 0x73, 0xCF, 0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x3C, 0x03, 0xC0, - 0x3C, 0x03, 0xC0, 0x3F, 0xE3, 0xFE, 0x3F, 0xE3, 0x80, 0x38, 0x07, 0x80, - 0x7F, 0x07, 0xFC, 0x7F, 0xE0, 0x3F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x1F, - 0xFF, 0xEF, 0xFC, 0x7F, 0x00, 0x01, 0xE0, 0xFE, 0x1F, 0xE3, 0xF0, 0x7C, - 0x07, 0x80, 0xFF, 0x8F, 0xFE, 0xFF, 0xEF, 0x1F, 0xF0, 0xFF, 0x0F, 0xF0, - 0xF7, 0x9F, 0x7F, 0xE3, 0xFC, 0x1F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, - 0x1E, 0x03, 0xE0, 0x7C, 0x07, 0x80, 0x78, 0x0F, 0x00, 0xF0, 0x1F, 0x01, - 0xE0, 0x1E, 0x01, 0xE0, 0x3C, 0x03, 0xC0, 0x3C, 0x00, 0x1F, 0x83, 0xFE, - 0x7F, 0xEF, 0x9F, 0xF0, 0xFF, 0x0F, 0xF9, 0xF7, 0xFE, 0x3F, 0xC7, 0xFE, - 0xF9, 0xFF, 0x0F, 0xF0, 0xFF, 0x8F, 0xFF, 0xE7, 0xFE, 0x1F, 0x80, 0x1F, - 0x03, 0xFC, 0x7F, 0xEF, 0x9E, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x8F, 0x7F, - 0xF7, 0xFF, 0x1F, 0xF0, 0x1E, 0x03, 0xE0, 0x7C, 0x7F, 0x87, 0xF0, 0x78, - 0x00, 0x6F, 0xF6, 0x00, 0x00, 0x06, 0xFF, 0x60, 0x33, 0xDE, 0x60, 0x00, - 0x00, 0x03, 0xDE, 0xF7, 0xBD, 0xDE, 0x60, 0x00, 0x60, 0x3E, 0x1F, 0xFF, - 0xFF, 0xFF, 0x8F, 0x00, 0xFF, 0x8F, 0xFF, 0x1F, 0xF0, 0x3E, 0x00, 0x60, - 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x60, - 0x07, 0xC0, 0xFF, 0x8F, 0xFF, 0x1F, 0xF0, 0x0F, 0x1F, 0xFF, 0xFF, 0xFF, - 0x87, 0xC0, 0x60, 0x00, 0x3E, 0x3F, 0xEF, 0xF9, 0x0F, 0x03, 0xC0, 0xF0, - 0x7C, 0x1E, 0x0F, 0x83, 0xC1, 0xE0, 0x78, 0x1C, 0x07, 0x00, 0x00, 0x30, - 0x1E, 0x07, 0x80, 0xC0, 0x01, 0xFC, 0x00, 0x3F, 0xFC, 0x03, 0xFF, 0xF0, - 0x7E, 0x07, 0xC3, 0xC0, 0x0F, 0x3C, 0x7E, 0x39, 0xC7, 0xF8, 0xFE, 0x7F, - 0xC7, 0xE7, 0x8E, 0x3F, 0x38, 0x71, 0xF9, 0xC3, 0x8F, 0xCE, 0x1C, 0x7E, - 0x78, 0xE7, 0x71, 0xFF, 0xF9, 0xCF, 0xFF, 0x8F, 0x1F, 0xF8, 0x3C, 0x00, - 0x01, 0xF8, 0x00, 0x07, 0xFF, 0x80, 0x0F, 0xFE, 0x00, 0x1F, 0xE0, 0x00, - 0x03, 0xE0, 0x01, 0xF0, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x77, 0x00, 0x7B, - 0xC0, 0x3D, 0xE0, 0x3C, 0x78, 0x1E, 0x3C, 0x0F, 0x1E, 0x0F, 0xFF, 0x87, - 0xFF, 0xC3, 0xFF, 0xE3, 0xC0, 0x79, 0xE0, 0x3D, 0xF0, 0x1E, 0xF0, 0x07, - 0x80, 0xFF, 0x87, 0xFF, 0x3F, 0xF9, 0xE3, 0xEF, 0x0F, 0x78, 0x7B, 0xC7, - 0xDF, 0xFC, 0xFF, 0xE7, 0xFF, 0xBC, 0x3F, 0xE0, 0xFF, 0x07, 0xF8, 0x7F, - 0xFF, 0xDF, 0xFC, 0xFF, 0x80, 0x07, 0xF0, 0x7F, 0xF3, 0xFF, 0xDF, 0x82, - 0x78, 0x03, 0xE0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, - 0x3E, 0x00, 0x78, 0x01, 0xF0, 0x23, 0xFF, 0xC7, 0xFF, 0x07, 0xF0, 0xFF, - 0x81, 0xFF, 0xE3, 0xFF, 0xE7, 0x87, 0xEF, 0x03, 0xDE, 0x07, 0xFC, 0x07, - 0xF8, 0x0F, 0xF0, 0x1F, 0xE0, 0x3F, 0xC0, 0x7F, 0x81, 0xFF, 0x03, 0xDE, - 0x1F, 0xBF, 0xFE, 0x7F, 0xF8, 0xFF, 0x80, 0xFF, 0xEF, 0xFE, 0xFF, 0xEF, - 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0xFE, 0xFF, 0xEF, 0xFE, 0xF0, 0x0F, - 0x00, 0xF0, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, - 0xFF, 0xF8, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0xFE, 0xFF, 0xDF, 0xFB, 0xC0, - 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x00, 0x07, 0xF0, 0x7F, - 0xF3, 0xFF, 0xDF, 0x02, 0x78, 0x03, 0xE0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, - 0x3F, 0xC0, 0xFF, 0x03, 0xFE, 0x0F, 0x78, 0x3D, 0xF0, 0xF3, 0xFF, 0xC7, - 0xFF, 0x07, 0xF8, 0xF0, 0x3F, 0xC0, 0xFF, 0x03, 0xFC, 0x0F, 0xF0, 0x3F, - 0xC0, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFC, 0x0F, - 0xF0, 0x3F, 0xC0, 0xFF, 0x03, 0xFC, 0x0F, 0xF0, 0x3C, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, - 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, - 0x87, 0xDF, 0xF7, 0xFE, 0x3F, 0x00, 0xF0, 0xFF, 0xC7, 0xEF, 0x1F, 0x3C, - 0xF8, 0xF7, 0xC3, 0xFE, 0x0F, 0xF0, 0x3F, 0x80, 0xFF, 0x03, 0xFC, 0x0F, - 0x78, 0x3D, 0xF0, 0xF3, 0xE3, 0xC7, 0x8F, 0x1F, 0x3C, 0x3E, 0xF0, 0x7C, - 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, - 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, - 0xFF, 0xF0, 0x78, 0x03, 0xCF, 0x80, 0xF9, 0xF0, 0x1F, 0x3F, 0x07, 0xE7, - 0xE0, 0xFC, 0xFE, 0x3F, 0xBD, 0xC7, 0xFF, 0xBC, 0xEF, 0xF3, 0xB9, 0xFE, - 0x77, 0x3F, 0xCF, 0xE7, 0xF8, 0xF8, 0xFF, 0x1F, 0x1F, 0xE1, 0xC3, 0xFC, - 0x38, 0x7F, 0x80, 0x0F, 0xF0, 0x01, 0xE0, 0xF0, 0x3F, 0xE0, 0xFF, 0x83, - 0xFF, 0x0F, 0xFE, 0x3F, 0xF8, 0xFF, 0x73, 0xFD, 0xCF, 0xF3, 0xBF, 0xCF, - 0xFF, 0x1F, 0xFC, 0x3F, 0xF0, 0xFF, 0xC1, 0xFF, 0x07, 0xFC, 0x0F, 0xF0, - 0x3C, 0x07, 0xF0, 0x0F, 0xFE, 0x0F, 0xFF, 0x8F, 0x83, 0xE7, 0x80, 0xF7, - 0xC0, 0x7F, 0xC0, 0x1F, 0xE0, 0x0F, 0xF0, 0x07, 0xF8, 0x03, 0xFC, 0x01, - 0xFF, 0x01, 0xF7, 0x80, 0xF3, 0xE0, 0xF8, 0xFF, 0xF8, 0x3F, 0xF8, 0x07, - 0xF0, 0x00, 0xFF, 0x0F, 0xFC, 0xFF, 0xEF, 0x1F, 0xF0, 0xFF, 0x0F, 0xF0, - 0xFF, 0x1F, 0xFF, 0xEF, 0xFC, 0xFF, 0x8F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, - 0x0F, 0x00, 0xF0, 0x00, 0x07, 0xF0, 0x0F, 0xFE, 0x0F, 0xFF, 0x8F, 0x83, - 0xE7, 0x80, 0xF7, 0xC0, 0x7F, 0xC0, 0x1F, 0xE0, 0x0F, 0xF0, 0x07, 0xF8, - 0x03, 0xFC, 0x01, 0xFF, 0x01, 0xF7, 0x80, 0xF3, 0xE0, 0xF8, 0xFF, 0xF8, - 0x3F, 0xF8, 0x07, 0xF0, 0x00, 0xF0, 0x00, 0x3E, 0x00, 0x1F, 0xE0, 0x07, - 0xF0, 0x00, 0x70, 0xFF, 0x83, 0xFF, 0x8F, 0xFF, 0x3C, 0x3E, 0xF0, 0x7B, - 0xC1, 0xEF, 0x07, 0xBC, 0x3E, 0xFF, 0xF3, 0xFF, 0x8F, 0xFC, 0x3C, 0xF8, - 0xF1, 0xF3, 0xC3, 0xCF, 0x0F, 0xBC, 0x1E, 0xF0, 0x7C, 0x1F, 0x87, 0xFE, - 0x7F, 0xCF, 0x04, 0xF0, 0x0F, 0x00, 0xFC, 0x07, 0xF8, 0x3F, 0xC0, 0xFE, - 0x01, 0xF0, 0x0F, 0x00, 0xF4, 0x1F, 0xFF, 0xEF, 0xFE, 0x3F, 0x80, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xC1, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x01, - 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x01, 0xE0, 0x07, 0x80, 0x1E, 0x00, - 0x78, 0x01, 0xE0, 0x07, 0x80, 0xF0, 0x7F, 0x83, 0xFC, 0x1F, 0xE0, 0xFF, - 0x07, 0xF8, 0x3F, 0xC1, 0xFE, 0x0F, 0xF0, 0x7F, 0x83, 0xFC, 0x1F, 0xE0, - 0xFF, 0x07, 0xBC, 0x79, 0xFF, 0xC7, 0xFC, 0x0F, 0x80, 0xF0, 0x07, 0xFC, - 0x07, 0x9E, 0x03, 0xCF, 0x01, 0xE7, 0xC1, 0xE1, 0xE0, 0xF0, 0xF0, 0x78, - 0x3C, 0x78, 0x1E, 0x3C, 0x0F, 0x1E, 0x03, 0xDE, 0x01, 0xEF, 0x00, 0xF7, - 0x80, 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x03, 0xE0, 0x00, 0xF0, 0x00, - 0x1F, 0xE0, 0x00, 0x3F, 0xE0, 0xE0, 0xFB, 0xC3, 0xE1, 0xE7, 0x87, 0xC3, - 0xCF, 0x0F, 0x87, 0x9E, 0x1F, 0x8F, 0x3C, 0x77, 0x3E, 0x7C, 0xEE, 0x7C, - 0x7B, 0xDE, 0xF0, 0xF7, 0x1D, 0xE1, 0xEE, 0x3B, 0xC3, 0xFC, 0x7F, 0x83, - 0xF0, 0x7E, 0x07, 0xE0, 0xFC, 0x0F, 0xC1, 0xF8, 0x1F, 0x01, 0xF0, 0xF8, - 0x1F, 0x7C, 0x3E, 0x3C, 0x3C, 0x3E, 0x7C, 0x1F, 0xF8, 0x0F, 0xF0, 0x0F, - 0xF0, 0x07, 0xE0, 0x03, 0xC0, 0x07, 0xE0, 0x0F, 0xF0, 0x0F, 0xF0, 0x1F, - 0xF8, 0x3E, 0x7C, 0x3C, 0x3C, 0x7C, 0x3E, 0xF8, 0x1F, 0xF8, 0x1F, 0x78, - 0x1E, 0x7C, 0x3E, 0x3C, 0x3C, 0x3E, 0x7C, 0x1E, 0xF8, 0x0F, 0xF0, 0x0F, - 0xF0, 0x07, 0xE0, 0x07, 0xE0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, - 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, - 0x03, 0xE0, 0x1E, 0x01, 0xF0, 0x1F, 0x00, 0xF0, 0x0F, 0x80, 0xF8, 0x07, - 0x80, 0x7C, 0x07, 0xC0, 0x3E, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, - 0xFF, 0xFF, 0x8F, 0x1E, 0x3C, 0x78, 0xF1, 0xE3, 0xC7, 0x8F, 0x1E, 0x3C, - 0x78, 0xF1, 0xE3, 0xC7, 0x8F, 0xFF, 0xFF, 0x80, 0xF0, 0x07, 0x80, 0x78, - 0x07, 0x80, 0x3C, 0x03, 0xC0, 0x3C, 0x01, 0xE0, 0x1E, 0x01, 0xE0, 0x0F, - 0x00, 0xF0, 0x0F, 0x00, 0x78, 0x07, 0x80, 0x78, 0x03, 0xC0, 0x3C, 0x03, - 0xC0, 0x1E, 0x01, 0xE0, 0x1E, 0x00, 0xF0, 0xFF, 0xFF, 0xF8, 0xF1, 0xE3, - 0xC7, 0x8F, 0x1E, 0x3C, 0x78, 0xF1, 0xE3, 0xC7, 0x8F, 0x1E, 0x3C, 0x78, - 0xFF, 0xFF, 0xFF, 0x80, 0x07, 0x00, 0x7C, 0x03, 0xE0, 0x3F, 0x83, 0xDE, - 0x1E, 0xF1, 0xE3, 0xCE, 0x0E, 0xF0, 0x79, 0x01, 0x00, 0xFF, 0xFF, 0xFF, - 0xFF, 0xF0, 0x23, 0xC7, 0x8F, 0x08, 0x7F, 0x1F, 0xE7, 0xFC, 0x0F, 0x03, - 0xCF, 0xF7, 0xFF, 0xCF, 0xF3, 0xFC, 0xFF, 0xFD, 0xFF, 0x3F, 0x80, 0x70, - 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xFF, 0x8F, 0xFC, 0xFF, - 0xEF, 0x1F, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x1E, 0xFF, - 0xEF, 0xFC, 0x7F, 0x00, 0x0F, 0x8F, 0xF7, 0xFD, 0xE0, 0xF0, 0x3C, 0x0F, - 0x03, 0xC0, 0xF0, 0x1E, 0x17, 0xFC, 0xFF, 0x0F, 0x80, 0x00, 0x70, 0x0F, - 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x1F, 0xF3, 0xFF, 0x7F, 0xFF, 0x8F, - 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0xF0, 0xF7, 0x8F, 0x7F, 0xF3, 0xFF, - 0x0F, 0xE0, 0x0F, 0x83, 0xFC, 0x7F, 0xE7, 0x9E, 0xF0, 0xFF, 0x0F, 0xFF, - 0xFF, 0xFF, 0xF0, 0x07, 0x82, 0x7F, 0xE3, 0xFE, 0x0F, 0xC0, 0x1F, 0x3F, - 0x9F, 0xDF, 0x0F, 0x07, 0x83, 0xFD, 0xFE, 0xFF, 0x78, 0x3C, 0x1E, 0x0F, - 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x00, 0x1F, 0xC7, 0xFD, 0xFF, - 0xFC, 0xFF, 0x1F, 0xE3, 0xFC, 0x7F, 0x8F, 0xF9, 0xEF, 0xFD, 0xFF, 0x9F, - 0xF0, 0x1E, 0x87, 0xDF, 0xF3, 0xFE, 0x7F, 0x00, 0x70, 0x1E, 0x03, 0xC0, - 0x78, 0x0F, 0x01, 0xE0, 0x3F, 0xE7, 0xFE, 0xFF, 0xDE, 0x7F, 0xC7, 0xF8, - 0xFF, 0x1F, 0xE3, 0xFC, 0x7F, 0x8F, 0xF1, 0xFE, 0x3F, 0xC7, 0x80, 0xFF, - 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x1E, 0x3C, 0x78, - 0xF0, 0x00, 0x07, 0x8F, 0x1E, 0x3C, 0x78, 0xF1, 0xE3, 0xC7, 0x8F, 0x1E, - 0x3C, 0x78, 0xFF, 0xFF, 0xBE, 0x00, 0x70, 0x0F, 0x00, 0xF0, 0x0F, 0x00, - 0xF0, 0x0F, 0x00, 0xF1, 0xFF, 0x3E, 0xF7, 0xCF, 0xF8, 0xFF, 0x0F, 0xE0, - 0xFF, 0x0F, 0xF8, 0xF7, 0x8F, 0x7C, 0xF3, 0xEF, 0x1E, 0xF1, 0xF0, 0x73, - 0xCF, 0x3C, 0xF3, 0xCF, 0x3C, 0xF3, 0xCF, 0x3C, 0xF3, 0xCF, 0x3E, 0xFD, - 0xF3, 0xC0, 0x7F, 0x3F, 0x3F, 0xFF, 0xEF, 0xFF, 0xFB, 0xCF, 0x9F, 0xF1, - 0xE3, 0xFC, 0x78, 0xFF, 0x1E, 0x3F, 0xC7, 0x8F, 0xF1, 0xE3, 0xFC, 0x78, - 0xFF, 0x1E, 0x3F, 0xC7, 0x8F, 0xF1, 0xE3, 0xC0, 0x7F, 0x1F, 0xFB, 0xFF, - 0x79, 0xFF, 0x1F, 0xE3, 0xFC, 0x7F, 0x8F, 0xF1, 0xFE, 0x3F, 0xC7, 0xF8, - 0xFF, 0x1E, 0x0F, 0x81, 0xFF, 0x1F, 0xFC, 0xF1, 0xEF, 0x07, 0xF8, 0x3F, - 0xC1, 0xFE, 0x0F, 0xF0, 0x7B, 0xC7, 0x9F, 0xFC, 0x7F, 0xC0, 0xF8, 0x00, - 0x7F, 0x0F, 0xFC, 0xFF, 0xEF, 0x1E, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, - 0xF0, 0xFF, 0x1F, 0xFF, 0xEF, 0xFC, 0xFF, 0x8F, 0x00, 0xF0, 0x0F, 0x00, - 0xF0, 0x00, 0x0F, 0xF1, 0xFF, 0xDF, 0xFE, 0xF0, 0xFF, 0x07, 0xF8, 0x3F, - 0xC1, 0xFE, 0x0F, 0xF0, 0x7F, 0xC3, 0xDF, 0xFE, 0x7F, 0xF1, 0xFF, 0x80, - 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x3F, 0xFF, 0xFF, 0xFE, 0x0F, 0x07, - 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x00, 0x1F, 0x9F, 0xEF, - 0xFB, 0xC0, 0xF0, 0x3F, 0xE7, 0xFC, 0xFF, 0x03, 0xE0, 0xFF, 0xFF, 0xFE, - 0x7E, 0x00, 0x70, 0x78, 0x3C, 0x1E, 0x0F, 0xF7, 0xFB, 0xFD, 0xE0, 0xF0, - 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xFC, 0xFE, 0x3F, 0x00, 0xF1, 0xFE, - 0x3F, 0xC7, 0xF8, 0xFF, 0x1F, 0xE3, 0xFC, 0x7F, 0x8F, 0xF1, 0xFF, 0x3D, - 0xFF, 0xBF, 0xF1, 0xFC, 0xF0, 0x7F, 0xC7, 0xDE, 0x3C, 0xF1, 0xE7, 0x8F, - 0x1C, 0xF0, 0xF7, 0x87, 0xBC, 0x3D, 0xC0, 0xFE, 0x07, 0xF0, 0x1F, 0x00, - 0xF8, 0x00, 0xF0, 0xE1, 0xFE, 0x1C, 0x3D, 0xC7, 0xC7, 0x3C, 0xF9, 0xE7, - 0x9F, 0x3C, 0xF7, 0xE7, 0x8E, 0xEE, 0xE1, 0xDD, 0xDC, 0x3F, 0x3F, 0x83, - 0xE3, 0xE0, 0x7C, 0x7C, 0x0F, 0x07, 0x80, 0xE0, 0xE0, 0xF8, 0xFB, 0xC7, - 0x8F, 0x78, 0x7B, 0xC1, 0xFC, 0x07, 0xC0, 0x1C, 0x01, 0xF0, 0x1F, 0xC1, - 0xEF, 0x0F, 0x78, 0xFB, 0xEF, 0x8F, 0x80, 0xF0, 0x7F, 0xC7, 0xDE, 0x3C, - 0xF1, 0xE7, 0x8F, 0x1E, 0xF0, 0xF7, 0x87, 0xBC, 0x1D, 0xC0, 0xFE, 0x07, - 0xF0, 0x1F, 0x00, 0xF8, 0x0F, 0x83, 0xFC, 0x1F, 0xC0, 0xFC, 0x00, 0xFF, - 0xFF, 0xFF, 0xFC, 0x3E, 0x0F, 0x87, 0xC3, 0xE0, 0xF8, 0x7C, 0x1F, 0x0F, - 0xFF, 0xFF, 0xFF, 0xC0, 0x0F, 0x1F, 0x3F, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, - 0x3C, 0x7C, 0xF8, 0xF0, 0xF8, 0x7C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, - 0x3F, 0x1F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, - 0xF0, 0xF8, 0xFC, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3E, 0x1F, 0x0F, - 0x1F, 0x3E, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0xFC, 0xF8, 0xF0, 0x38, - 0x27, 0xE7, 0xFF, 0xFE, 0x7E, 0x41, 0xC0 }; - -const GFXglyph Ubuntu_Bold12pt7bGlyphs[] PROGMEM = { - { 0, 0, 0, 6, 0, 1 }, // 0x20 ' ' - { 0, 4, 17, 8, 2, -16 }, // 0x21 '!' - { 9, 9, 7, 11, 1, -17 }, // 0x22 '"' - { 17, 15, 17, 17, 1, -16 }, // 0x23 '#' - { 49, 12, 22, 14, 1, -18 }, // 0x24 '$' - { 82, 20, 17, 22, 1, -16 }, // 0x25 '%' - { 125, 16, 17, 17, 1, -16 }, // 0x26 '&' - { 159, 4, 7, 6, 1, -17 }, // 0x27 ''' - { 163, 7, 23, 9, 2, -18 }, // 0x28 '(' - { 184, 7, 23, 9, 0, -18 }, // 0x29 ')' - { 205, 11, 10, 12, 1, -16 }, // 0x2A '*' - { 219, 11, 11, 13, 1, -12 }, // 0x2B '+' - { 235, 5, 8, 6, 0, -3 }, // 0x2C ',' - { 240, 7, 3, 9, 1, -8 }, // 0x2D '-' - { 243, 4, 4, 6, 1, -3 }, // 0x2E '.' - { 245, 12, 23, 10, -1, -18 }, // 0x2F '/' - { 280, 12, 17, 14, 1, -16 }, // 0x30 '0' - { 306, 8, 17, 14, 2, -16 }, // 0x31 '1' - { 323, 12, 17, 14, 1, -16 }, // 0x32 '2' - { 349, 11, 17, 14, 1, -16 }, // 0x33 '3' - { 373, 12, 17, 14, 1, -16 }, // 0x34 '4' - { 399, 12, 17, 14, 1, -16 }, // 0x35 '5' - { 425, 12, 17, 14, 1, -16 }, // 0x36 '6' - { 451, 12, 17, 14, 1, -16 }, // 0x37 '7' - { 477, 12, 17, 14, 1, -16 }, // 0x38 '8' - { 503, 12, 17, 14, 1, -16 }, // 0x39 '9' - { 529, 4, 13, 6, 1, -12 }, // 0x3A ':' - { 536, 5, 17, 6, 0, -12 }, // 0x3B ';' - { 547, 12, 11, 14, 1, -12 }, // 0x3C '<' - { 564, 11, 8, 14, 2, -10 }, // 0x3D '=' - { 575, 12, 11, 14, 1, -12 }, // 0x3E '>' - { 592, 10, 19, 11, 0, -18 }, // 0x3F '?' - { 616, 21, 21, 23, 1, -16 }, // 0x40 '@' - { 672, 17, 17, 17, 0, -16 }, // 0x41 'A' - { 709, 13, 17, 16, 2, -16 }, // 0x42 'B' - { 737, 14, 17, 16, 1, -16 }, // 0x43 'C' - { 767, 15, 17, 18, 2, -16 }, // 0x44 'D' - { 799, 12, 17, 15, 2, -16 }, // 0x45 'E' - { 825, 11, 17, 14, 2, -16 }, // 0x46 'F' - { 849, 14, 17, 17, 1, -16 }, // 0x47 'G' - { 879, 14, 17, 18, 2, -16 }, // 0x48 'H' - { 909, 4, 17, 8, 2, -16 }, // 0x49 'I' - { 918, 11, 17, 13, 0, -16 }, // 0x4A 'J' - { 942, 14, 17, 16, 2, -16 }, // 0x4B 'K' - { 972, 12, 17, 14, 2, -16 }, // 0x4C 'L' - { 998, 19, 17, 21, 1, -16 }, // 0x4D 'M' - { 1039, 14, 17, 18, 2, -16 }, // 0x4E 'N' - { 1069, 17, 17, 19, 1, -16 }, // 0x4F 'O' - { 1106, 12, 17, 15, 2, -16 }, // 0x50 'P' - { 1132, 17, 22, 19, 1, -16 }, // 0x51 'Q' - { 1179, 14, 17, 16, 2, -16 }, // 0x52 'R' - { 1209, 12, 17, 14, 1, -16 }, // 0x53 'S' - { 1235, 14, 17, 14, 0, -16 }, // 0x54 'T' - { 1265, 13, 17, 17, 2, -16 }, // 0x55 'U' - { 1293, 17, 17, 17, 0, -16 }, // 0x56 'V' - { 1330, 23, 17, 23, 0, -16 }, // 0x57 'W' - { 1379, 16, 17, 16, 0, -16 }, // 0x58 'X' - { 1413, 16, 17, 16, 0, -16 }, // 0x59 'Y' - { 1447, 13, 17, 15, 1, -16 }, // 0x5A 'Z' - { 1475, 7, 23, 9, 2, -18 }, // 0x5B '[' - { 1496, 12, 23, 10, -1, -18 }, // 0x5C '\' - { 1531, 7, 23, 9, 0, -18 }, // 0x5D ']' - { 1552, 13, 10, 13, 0, -16 }, // 0x5E '^' - { 1569, 12, 3, 12, 0, 2 }, // 0x5F '_' - { 1574, 6, 5, 7, 1, -18 }, // 0x60 '`' - { 1578, 10, 13, 13, 1, -12 }, // 0x61 'a' - { 1595, 12, 19, 15, 2, -18 }, // 0x62 'b' - { 1624, 10, 13, 12, 1, -12 }, // 0x63 'c' - { 1641, 12, 19, 15, 1, -18 }, // 0x64 'd' - { 1670, 12, 13, 14, 1, -12 }, // 0x65 'e' - { 1690, 9, 19, 10, 2, -18 }, // 0x66 'f' - { 1712, 11, 17, 14, 1, -12 }, // 0x67 'g' - { 1736, 11, 19, 15, 2, -18 }, // 0x68 'h' - { 1763, 4, 19, 8, 2, -18 }, // 0x69 'i' - { 1773, 7, 23, 6, -2, -18 }, // 0x6A 'j' - { 1794, 12, 19, 14, 2, -18 }, // 0x6B 'k' - { 1823, 6, 19, 8, 2, -18 }, // 0x6C 'l' - { 1838, 18, 13, 22, 2, -12 }, // 0x6D 'm' - { 1868, 11, 13, 15, 2, -12 }, // 0x6E 'n' - { 1886, 13, 13, 15, 1, -12 }, // 0x6F 'o' - { 1908, 12, 17, 15, 2, -12 }, // 0x70 'p' - { 1934, 13, 17, 15, 1, -12 }, // 0x71 'q' - { 1962, 9, 13, 11, 2, -12 }, // 0x72 'r' - { 1977, 10, 13, 12, 1, -12 }, // 0x73 's' - { 1994, 9, 17, 11, 2, -16 }, // 0x74 't' - { 2014, 11, 13, 15, 2, -12 }, // 0x75 'u' - { 2032, 13, 13, 13, 0, -12 }, // 0x76 'v' - { 2054, 19, 13, 19, 0, -12 }, // 0x77 'w' - { 2085, 13, 13, 13, 0, -12 }, // 0x78 'x' - { 2107, 13, 17, 13, 0, -12 }, // 0x79 'y' - { 2135, 10, 13, 12, 1, -12 }, // 0x7A 'z' - { 2152, 8, 23, 9, 1, -18 }, // 0x7B '{' - { 2175, 3, 23, 7, 2, -18 }, // 0x7C '|' - { 2184, 8, 23, 9, 0, -18 }, // 0x7D '}' - { 2207, 12, 5, 14, 1, -9 } }; // 0x7E '~' - -const GFXfont Ubuntu_Bold12pt7b PROGMEM = { - (uint8_t *)Ubuntu_Bold12pt7bBitmaps, - (GFXglyph *)Ubuntu_Bold12pt7bGlyphs, - 0x20, 0x7E, 28 }; - -// Approx. 2887 bytes diff --git a/lib/obp60task/Ubuntu_Bold16pt7b.h b/lib/obp60task/Ubuntu_Bold16pt7b.h deleted file mode 100644 index 1490a69..0000000 --- a/lib/obp60task/Ubuntu_Bold16pt7b.h +++ /dev/null @@ -1,402 +0,0 @@ -const uint8_t Ubuntu_Bold16pt7bBitmaps[] PROGMEM = { - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x00, 0x0E, 0xFF, 0xFF, - 0xF7, 0x00, 0xF9, 0xFF, 0x9F, 0xF9, 0xFF, 0x9F, 0xF9, 0xFF, 0x9F, 0xF9, - 0xFF, 0x1E, 0x70, 0xE0, 0x07, 0xCF, 0x81, 0xF3, 0xE0, 0x7D, 0xF8, 0x3E, - 0x7C, 0x0F, 0x9F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC7, 0xCF, 0x81, 0xF3, 0xE0, 0x7C, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x3E, 0x7C, 0x0F, 0x9F, 0x07, 0xEF, 0x81, 0xF3, - 0xE0, 0x7C, 0xF8, 0x00, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x07, 0xF8, - 0x1F, 0xFE, 0x3F, 0xFE, 0x3F, 0xFC, 0x7E, 0x0C, 0x7C, 0x00, 0x7C, 0x00, - 0x7E, 0x00, 0x7F, 0xE0, 0x3F, 0xF8, 0x1F, 0xFC, 0x0F, 0xFE, 0x01, 0xFF, - 0x00, 0x3F, 0x00, 0x1F, 0x00, 0x1F, 0x70, 0x3F, 0x7F, 0xFE, 0xFF, 0xFE, - 0xFF, 0xFC, 0x1F, 0xF0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, - 0x1F, 0x80, 0xF8, 0x0F, 0xF0, 0x3C, 0x07, 0xFE, 0x1F, 0x03, 0xE7, 0xC7, - 0x80, 0xF0, 0xF3, 0xE0, 0x3C, 0x3C, 0xF0, 0x0F, 0x0F, 0x78, 0x03, 0xC3, - 0xFE, 0x00, 0xF9, 0xFF, 0x00, 0x1F, 0xFF, 0xDF, 0x83, 0xFD, 0xEF, 0xF0, - 0x7E, 0xFF, 0xFE, 0x00, 0x3F, 0xE7, 0xC0, 0x1F, 0xF0, 0xF0, 0x07, 0xBC, - 0x3C, 0x03, 0xCF, 0x0F, 0x01, 0xF3, 0xC3, 0xC0, 0x78, 0xF9, 0xF0, 0x3E, - 0x1F, 0xF8, 0x0F, 0x03, 0xFC, 0x07, 0xC0, 0x7E, 0x00, 0x07, 0xF0, 0x00, - 0x7F, 0xE0, 0x07, 0xFF, 0x00, 0x7F, 0xFC, 0x03, 0xE3, 0xE0, 0x1F, 0x1F, - 0x00, 0xFD, 0xF0, 0x03, 0xFF, 0x80, 0x1F, 0xF8, 0x00, 0xFF, 0x00, 0x0F, - 0xFC, 0xF8, 0xFF, 0xF7, 0xC7, 0xDF, 0xBE, 0x7C, 0x7F, 0xE3, 0xE1, 0xFF, - 0x1F, 0x07, 0xF0, 0xFC, 0x1F, 0x87, 0xFF, 0xFE, 0x1F, 0xFF, 0xF8, 0x7F, - 0xFF, 0xE0, 0xFE, 0x3F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x70, 0x04, - 0x07, 0x87, 0xE3, 0xE3, 0xF1, 0xF1, 0xF8, 0xF8, 0x7C, 0x3E, 0x3E, 0x1F, - 0x0F, 0x87, 0xC3, 0xE1, 0xF0, 0xF8, 0x7C, 0x3E, 0x1F, 0x07, 0xC3, 0xE1, - 0xF0, 0xFC, 0x3E, 0x1F, 0x87, 0xC3, 0xF0, 0xF0, 0x20, 0x10, 0x3C, 0x3F, - 0x0F, 0x87, 0xE1, 0xF0, 0xFC, 0x3E, 0x1F, 0x0F, 0x83, 0xE1, 0xF0, 0xF8, - 0x7C, 0x3E, 0x1F, 0x0F, 0x87, 0xC3, 0xE1, 0xF1, 0xF0, 0xF8, 0x7C, 0x7E, - 0x3E, 0x3F, 0x1F, 0x1F, 0x87, 0x80, 0x80, 0x0F, 0x80, 0x7C, 0x1B, 0xCC, - 0xEE, 0xEF, 0xFF, 0xFF, 0xFC, 0x1C, 0x03, 0xF8, 0x3D, 0xE3, 0xEF, 0x8E, - 0x38, 0x11, 0x00, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x01, 0xE0, 0x07, 0x83, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x1E, 0x00, 0x78, 0x01, 0xE0, - 0x07, 0x80, 0x1E, 0x00, 0x7D, 0xF7, 0xDF, 0x7D, 0xE7, 0xBE, 0xF0, 0xC0, - 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x7B, 0xFF, 0xFF, 0xFD, 0xE0, 0x00, 0x3E, - 0x00, 0xFC, 0x01, 0xF0, 0x03, 0xE0, 0x0F, 0xC0, 0x1F, 0x00, 0x3E, 0x00, - 0xFC, 0x01, 0xF0, 0x03, 0xE0, 0x0F, 0xC0, 0x1F, 0x00, 0x3E, 0x00, 0xFC, - 0x01, 0xF0, 0x03, 0xE0, 0x0F, 0xC0, 0x1F, 0x00, 0x3E, 0x00, 0xFC, 0x01, - 0xF0, 0x03, 0xE0, 0x0F, 0xC0, 0x1F, 0x00, 0x3E, 0x00, 0xFC, 0x01, 0xF0, - 0x03, 0xE0, 0x0F, 0xC0, 0x1F, 0x00, 0x00, 0x07, 0xE0, 0x1F, 0xF8, 0x3F, - 0xFC, 0x3F, 0xFC, 0x7E, 0x7E, 0x7C, 0x3E, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, - 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, - 0x1F, 0x7C, 0x3E, 0x7E, 0x7E, 0x3F, 0xFC, 0x3F, 0xFC, 0x1F, 0xF8, 0x07, - 0xE0, 0x03, 0xC1, 0xF1, 0xFD, 0xFF, 0xFF, 0xFF, 0xF7, 0x7D, 0x1F, 0x07, - 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0, - 0x7C, 0x1F, 0x07, 0xC0, 0x0F, 0xC0, 0x7F, 0xE3, 0xFF, 0xE7, 0xFF, 0xE7, - 0x8F, 0xC4, 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0xF8, 0x03, 0xF0, 0x0F, - 0xC0, 0x3F, 0x00, 0xFE, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x3E, 0x00, - 0xFF, 0xFD, 0xFF, 0xFB, 0xFF, 0xF7, 0xFF, 0xE0, 0x1F, 0xC0, 0xFF, 0xE3, - 0xFF, 0xE3, 0xFF, 0xE6, 0x0F, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x7C, 0x1F, - 0xF8, 0x3F, 0xC0, 0x7F, 0xE0, 0xFF, 0xE0, 0x0F, 0xE0, 0x07, 0xC0, 0x0F, - 0x80, 0x1F, 0x60, 0x7F, 0xFF, 0xFB, 0xFF, 0xF7, 0xFF, 0xC3, 0xFC, 0x00, - 0x00, 0x7C, 0x00, 0xFC, 0x01, 0xFC, 0x03, 0xFC, 0x07, 0xFC, 0x0F, 0xFC, - 0x0F, 0x7C, 0x1F, 0x7C, 0x3E, 0x7C, 0x3C, 0x7C, 0x78, 0x7C, 0xF8, 0x7C, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7C, 0x00, 0x7C, - 0x00, 0x7C, 0x00, 0x7C, 0x00, 0x7C, 0x3F, 0xFC, 0x7F, 0xF8, 0xFF, 0xF1, - 0xFF, 0xE3, 0xC0, 0x07, 0x80, 0x1F, 0x00, 0x3F, 0xC0, 0x7F, 0xF0, 0xFF, - 0xF1, 0xFF, 0xF0, 0x0F, 0xF0, 0x07, 0xE0, 0x07, 0xC0, 0x0F, 0x80, 0x1F, - 0x40, 0x7F, 0xFF, 0xFB, 0xFF, 0xE7, 0xFF, 0x83, 0xFC, 0x00, 0x00, 0x3E, - 0x01, 0xFE, 0x07, 0xFE, 0x0F, 0xFE, 0x1F, 0xE0, 0x3F, 0x00, 0x7E, 0x00, - 0x7C, 0x00, 0xFF, 0xF0, 0xFF, 0xFC, 0xFF, 0xFE, 0xFF, 0xFE, 0xF8, 0x3F, - 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0x7C, 0x3F, 0x7F, 0xFE, 0x3F, 0xFC, - 0x1F, 0xF8, 0x07, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xFC, 0x00, 0xF8, 0x01, 0xF8, 0x01, 0xF0, - 0x01, 0xF0, 0x03, 0xE0, 0x03, 0xE0, 0x03, 0xE0, 0x07, 0xC0, 0x07, 0xC0, - 0x07, 0xC0, 0x0F, 0x80, 0x0F, 0x80, 0x0F, 0x80, 0x0F, 0x80, 0x0F, 0xE0, - 0x3F, 0xF8, 0x7F, 0xFC, 0x7F, 0xFE, 0xFC, 0x7E, 0xF8, 0x3E, 0xF8, 0x3E, - 0xFC, 0x7C, 0x7F, 0xFC, 0x3F, 0xF0, 0x3F, 0xFC, 0x7F, 0xFE, 0xFC, 0x3E, - 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xFC, 0x3F, 0x7F, 0xFE, 0x7F, 0xFE, - 0x3F, 0xFC, 0x07, 0xF0, 0x07, 0xE0, 0x1F, 0xF8, 0x3F, 0xFC, 0x7F, 0xFE, - 0xFC, 0x3E, 0xF8, 0x3F, 0xF8, 0x1F, 0xF8, 0x1F, 0xFC, 0x1F, 0x7F, 0xFF, - 0x7F, 0xFF, 0x3F, 0xFF, 0x0F, 0xDF, 0x00, 0x3E, 0x00, 0x7E, 0x00, 0xFE, - 0x03, 0xFC, 0x3F, 0xF8, 0x3F, 0xF0, 0x3F, 0xC0, 0x3E, 0x00, 0x7B, 0xFF, - 0xFF, 0xFD, 0xE0, 0x00, 0x00, 0x00, 0x1E, 0xFF, 0xFF, 0xFF, 0x78, 0x7B, - 0xFF, 0xFF, 0xFD, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xF7, 0xDF, 0x7D, - 0xE7, 0xBE, 0xF0, 0xC0, 0x00, 0x0C, 0x01, 0xF8, 0x3F, 0xFB, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0x3F, 0xE0, 0x7C, 0x00, 0xFF, 0x81, 0xFF, 0xF3, 0xFF, - 0xFB, 0xFF, 0xF0, 0xFF, 0xE0, 0x1F, 0x80, 0x03, 0x00, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x60, 0x01, 0xF0, 0x0F, 0xFC, 0x3F, - 0xFE, 0xFF, 0xFC, 0xFF, 0xF0, 0x3F, 0xC0, 0x1F, 0x03, 0xFC, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFE, 0xFF, 0xC1, 0xF0, 0x06, 0x00, 0x00, 0x3F, 0x8F, 0xFC, - 0xFF, 0xE7, 0xFF, 0x63, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x03, 0xE0, 0x7E, - 0x0F, 0xC0, 0xF8, 0x1F, 0x01, 0xE0, 0x1E, 0x01, 0xE0, 0x00, 0x00, 0x00, - 0x1E, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x01, 0xE0, 0x00, 0x7F, 0x80, - 0x00, 0x7F, 0xFC, 0x00, 0x7F, 0xFF, 0xC0, 0x3F, 0x03, 0xF8, 0x1F, 0x00, - 0x3F, 0x0F, 0x80, 0x03, 0xC3, 0xC1, 0xF8, 0x79, 0xE1, 0xFF, 0x1E, 0x78, - 0xFF, 0xC7, 0xFE, 0x3C, 0xF0, 0xFF, 0x1E, 0x3C, 0x3F, 0xC7, 0x8F, 0x0F, - 0xF1, 0xE3, 0xC3, 0xFC, 0x78, 0xF0, 0xFF, 0x1E, 0x3C, 0x3F, 0xC7, 0x8F, - 0x0F, 0xF1, 0xE3, 0xC7, 0xBE, 0x3C, 0xF1, 0xE7, 0x8F, 0xFF, 0xF1, 0xE1, - 0xFF, 0xF8, 0x3C, 0x3E, 0xF8, 0x0F, 0x80, 0x00, 0x01, 0xF0, 0x00, 0x00, - 0x3F, 0x80, 0x40, 0x07, 0xFF, 0xF0, 0x00, 0x7F, 0xFC, 0x00, 0x03, 0xFE, - 0x00, 0x00, 0xFC, 0x00, 0x0F, 0xF0, 0x00, 0x7F, 0x80, 0x07, 0xFC, 0x00, - 0x3F, 0xF0, 0x03, 0xEF, 0x80, 0x1F, 0x7C, 0x00, 0xFB, 0xF0, 0x0F, 0x8F, - 0x80, 0x7C, 0x7E, 0x03, 0xE3, 0xF0, 0x3E, 0x0F, 0x81, 0xFF, 0xFC, 0x1F, - 0xFF, 0xF0, 0xFF, 0xFF, 0x87, 0xFF, 0xFC, 0x7E, 0x03, 0xF3, 0xE0, 0x0F, - 0x9F, 0x00, 0x7D, 0xF8, 0x03, 0xFF, 0x80, 0x0F, 0x80, 0xFF, 0xE0, 0x7F, - 0xFE, 0x3F, 0xFF, 0x9F, 0xFF, 0xEF, 0x83, 0xF7, 0xC0, 0xFB, 0xE0, 0x7D, - 0xF0, 0x7E, 0xFF, 0xFE, 0x7F, 0xFE, 0x3F, 0xFF, 0x9F, 0xFF, 0xEF, 0x81, - 0xFF, 0xC0, 0x7F, 0xE0, 0x3F, 0xF0, 0x1F, 0xF8, 0x1F, 0xFF, 0xFF, 0xBF, - 0xFF, 0xDF, 0xFF, 0x87, 0xFF, 0x00, 0x01, 0xFC, 0x03, 0xFF, 0xC7, 0xFF, - 0xE7, 0xFF, 0xE3, 0xF0, 0x33, 0xF0, 0x01, 0xF0, 0x01, 0xF0, 0x00, 0xF8, - 0x00, 0x7C, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, - 0xF0, 0x00, 0xFC, 0x00, 0x7F, 0x03, 0x1F, 0xFF, 0x87, 0xFF, 0xE1, 0xFF, - 0xF0, 0x3F, 0xC0, 0xFF, 0xE0, 0x1F, 0xFF, 0x83, 0xFF, 0xFC, 0x7F, 0xFF, - 0xCF, 0x83, 0xF9, 0xF0, 0x1F, 0xBE, 0x01, 0xF7, 0xC0, 0x3F, 0xF8, 0x03, - 0xFF, 0x00, 0x7F, 0xE0, 0x0F, 0xFC, 0x01, 0xFF, 0x80, 0x3F, 0xF0, 0x0F, - 0xFE, 0x01, 0xF7, 0xC0, 0x7E, 0xF8, 0x3F, 0x9F, 0xFF, 0xF3, 0xFF, 0xFC, - 0x7F, 0xFE, 0x0F, 0xFE, 0x00, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, - 0xFE, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xFF, 0xFC, 0xFF, - 0xFC, 0xFF, 0xFC, 0xFF, 0xFC, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, - 0x00, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x1F, 0x00, 0x3E, 0x00, - 0x7C, 0x00, 0xFF, 0xFD, 0xFF, 0xFB, 0xFF, 0xF7, 0xFF, 0xEF, 0x80, 0x1F, - 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x01, 0xF0, 0x03, 0xE0, 0x07, 0xC0, - 0x0F, 0x80, 0x00, 0x01, 0xFE, 0x01, 0xFF, 0xF1, 0xFF, 0xFC, 0xFF, 0xFE, - 0x3F, 0x01, 0x9F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x00, 0xF8, 0x00, 0x3E, - 0x00, 0x0F, 0x80, 0x7F, 0xE0, 0x1F, 0xF8, 0x07, 0xFE, 0x01, 0xF7, 0xC0, - 0x7D, 0xF8, 0x1F, 0x7F, 0x07, 0xCF, 0xFF, 0xF1, 0xFF, 0xFC, 0x3F, 0xFF, - 0x01, 0xFF, 0x00, 0xF8, 0x03, 0xFF, 0x00, 0x7F, 0xE0, 0x0F, 0xFC, 0x01, - 0xFF, 0x80, 0x3F, 0xF0, 0x07, 0xFE, 0x00, 0xFF, 0xC0, 0x1F, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x3F, 0xF0, 0x07, - 0xFE, 0x00, 0xFF, 0xC0, 0x1F, 0xF8, 0x03, 0xFF, 0x00, 0x7F, 0xE0, 0x0F, - 0xFC, 0x01, 0xFF, 0x80, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x7C, 0x01, 0xF0, 0x07, - 0xC0, 0x1F, 0x00, 0x7C, 0x01, 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0x7C, 0x01, - 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0x7C, 0x01, 0xF0, 0x07, 0xC0, 0x1F, 0x60, - 0xFD, 0xFF, 0xEF, 0xFF, 0xBF, 0xFC, 0x1F, 0xC0, 0xF8, 0x1F, 0xDF, 0x07, - 0xF3, 0xE1, 0xFC, 0x7C, 0x7F, 0x0F, 0x9F, 0xC1, 0xF7, 0xF0, 0x3F, 0xFC, - 0x07, 0xFF, 0x00, 0xFF, 0xC0, 0x1F, 0xF0, 0x03, 0xFF, 0x00, 0x7F, 0xF0, - 0x0F, 0xFF, 0x01, 0xF7, 0xE0, 0x3E, 0x7E, 0x07, 0xC7, 0xE0, 0xF8, 0x7E, - 0x1F, 0x07, 0xE3, 0xE0, 0x7E, 0x7C, 0x0F, 0xEF, 0x80, 0xFE, 0xF8, 0x03, - 0xE0, 0x0F, 0x80, 0x3E, 0x00, 0xF8, 0x03, 0xE0, 0x0F, 0x80, 0x3E, 0x00, - 0xF8, 0x03, 0xE0, 0x0F, 0x80, 0x3E, 0x00, 0xF8, 0x03, 0xE0, 0x0F, 0x80, - 0x3E, 0x00, 0xF8, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x3E, - 0x00, 0x7C, 0x3E, 0x00, 0x7C, 0x3F, 0x00, 0xFC, 0x7F, 0x00, 0xFE, 0x7F, - 0x80, 0xFE, 0x7F, 0x81, 0xFE, 0x7F, 0xC1, 0xFE, 0x7F, 0xC3, 0xFE, 0x7F, - 0xE3, 0xFE, 0x7D, 0xE7, 0xBE, 0x79, 0xF7, 0x9E, 0x78, 0xF7, 0x9E, 0x78, - 0xFF, 0x1E, 0xF8, 0x7F, 0x1E, 0xF8, 0x7E, 0x1F, 0xF8, 0x3E, 0x1F, 0xF8, - 0x3E, 0x1F, 0xF8, 0x3C, 0x1F, 0xF8, 0x00, 0x1F, 0xF8, 0x00, 0x1F, 0xF8, - 0x00, 0x1F, 0xF8, 0x03, 0xFF, 0x80, 0x7F, 0xF8, 0x0F, 0xFF, 0x01, 0xFF, - 0xF0, 0x3F, 0xFF, 0x07, 0xFF, 0xF0, 0xFF, 0xFF, 0x1F, 0xFB, 0xE3, 0xFF, - 0x3E, 0x7F, 0xE3, 0xEF, 0xFC, 0x7D, 0xFF, 0x87, 0xFF, 0xF0, 0x7F, 0xFE, - 0x07, 0xFF, 0xC0, 0xFF, 0xF8, 0x0F, 0xFF, 0x00, 0xFF, 0xE0, 0x1F, 0xFC, - 0x01, 0xFF, 0x80, 0x3E, 0x01, 0xF8, 0x00, 0xFF, 0xF0, 0x1F, 0xFF, 0x83, - 0xFF, 0xFC, 0x3F, 0x0F, 0xC7, 0xE0, 0x7E, 0x7C, 0x03, 0xEF, 0x80, 0x1F, - 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, - 0xFF, 0x80, 0x1F, 0x7C, 0x03, 0xE7, 0xE0, 0x7E, 0x7F, 0x0F, 0xE3, 0xFF, - 0xFC, 0x1F, 0xFF, 0x80, 0xFF, 0xF0, 0x01, 0xF8, 0x00, 0xFF, 0xE0, 0x7F, - 0xFE, 0x3F, 0xFF, 0x9F, 0xFF, 0xEF, 0x83, 0xFF, 0xC0, 0x7F, 0xE0, 0x3F, - 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x1F, 0xFF, 0xFF, 0xDF, 0xFF, 0xCF, 0xFF, - 0xC7, 0xFF, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x7C, 0x00, 0x3E, - 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0xFF, 0xF0, 0x1F, - 0xFF, 0x83, 0xFF, 0xFC, 0x3F, 0x0F, 0xC7, 0xE0, 0x7E, 0x7C, 0x03, 0xEF, - 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, - 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0x7C, 0x03, 0xF7, 0xE0, 0x7E, 0x3F, 0x0F, - 0xE3, 0xFF, 0xFC, 0x1F, 0xFF, 0xC0, 0xFF, 0xF0, 0x01, 0xFE, 0x00, 0x07, - 0xC0, 0x00, 0x7F, 0x00, 0x03, 0xFE, 0x00, 0x1F, 0xE0, 0x00, 0xFC, 0x00, - 0x03, 0xC0, 0xFF, 0xE0, 0x3F, 0xFF, 0x0F, 0xFF, 0xE3, 0xFF, 0xFC, 0xF8, - 0x3F, 0xBE, 0x03, 0xEF, 0x80, 0xFB, 0xE0, 0x3E, 0xF8, 0x0F, 0xBE, 0x0F, - 0xEF, 0xFF, 0xF3, 0xFF, 0xF8, 0xFF, 0xFC, 0x3F, 0xFE, 0x0F, 0x9F, 0xC3, - 0xE3, 0xF0, 0xF8, 0x7E, 0x3E, 0x0F, 0xCF, 0x83, 0xF3, 0xE0, 0x7E, 0xF8, - 0x0F, 0xC0, 0x07, 0xF0, 0x3F, 0xFE, 0x7F, 0xFE, 0x7F, 0xFC, 0xFC, 0x0C, - 0xF8, 0x00, 0xF8, 0x00, 0xFC, 0x00, 0x7F, 0x80, 0x7F, 0xF0, 0x1F, 0xFC, - 0x07, 0xFE, 0x00, 0xFF, 0x00, 0x3F, 0x00, 0x1F, 0x00, 0x1F, 0x70, 0x3F, - 0x7F, 0xFF, 0xFF, 0xFE, 0xFF, 0xFC, 0x1F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07, - 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x7C, 0x00, 0x3E, 0x00, - 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8, - 0x00, 0x7C, 0x00, 0x3E, 0x00, 0xF8, 0x07, 0xFE, 0x01, 0xFF, 0x80, 0x7F, - 0xE0, 0x1F, 0xF8, 0x07, 0xFE, 0x01, 0xFF, 0x80, 0x7F, 0xE0, 0x1F, 0xF8, - 0x07, 0xFE, 0x01, 0xFF, 0x80, 0x7F, 0xE0, 0x1F, 0xF8, 0x07, 0xFE, 0x01, - 0xFF, 0x80, 0x7F, 0xF0, 0x3F, 0x7E, 0x1F, 0x9F, 0xFF, 0xE3, 0xFF, 0xF0, - 0x7F, 0xF8, 0x07, 0xF8, 0x00, 0xF8, 0x00, 0xFF, 0xE0, 0x0F, 0x9F, 0x00, - 0x7C, 0xF8, 0x03, 0xE7, 0xE0, 0x3E, 0x1F, 0x01, 0xF0, 0xF8, 0x1F, 0x87, - 0xE0, 0xF8, 0x1F, 0x07, 0xC0, 0xF8, 0x7E, 0x07, 0xE3, 0xE0, 0x1F, 0x1F, - 0x00, 0xFD, 0xF8, 0x07, 0xEF, 0x80, 0x1F, 0x7C, 0x00, 0xFF, 0xE0, 0x03, - 0xFE, 0x00, 0x1F, 0xF0, 0x00, 0xFF, 0x80, 0x03, 0xF8, 0x00, 0x1F, 0xC0, - 0x00, 0xF8, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x0F, 0xDF, 0x03, 0xE0, 0x7C, - 0xF8, 0x1F, 0x03, 0xE7, 0xC1, 0xFC, 0x1F, 0x3E, 0x0F, 0xE0, 0xF8, 0xF0, - 0x7F, 0x0F, 0x87, 0xC3, 0xF8, 0x7C, 0x3E, 0x3D, 0xE3, 0xE1, 0xF1, 0xEF, - 0x1F, 0x07, 0x8F, 0x78, 0xF0, 0x3E, 0xFB, 0xEF, 0x81, 0xF7, 0x8F, 0x7C, - 0x0F, 0xBC, 0x7B, 0xE0, 0x3D, 0xE3, 0xFE, 0x01, 0xFF, 0x1F, 0xF0, 0x0F, - 0xF0, 0x7F, 0x80, 0x3F, 0x83, 0xF8, 0x01, 0xFC, 0x1F, 0xC0, 0x0F, 0xC0, - 0x7E, 0x00, 0x3E, 0x03, 0xE0, 0x00, 0xFC, 0x01, 0xFB, 0xF0, 0x1F, 0x8F, - 0xC1, 0xF8, 0x3E, 0x0F, 0x81, 0xF8, 0xFC, 0x07, 0xEF, 0xC0, 0x1F, 0xFC, - 0x00, 0xFF, 0xE0, 0x03, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0x3E, 0x00, 0x03, - 0xF8, 0x00, 0x3F, 0xE0, 0x03, 0xFF, 0x80, 0x1F, 0xFC, 0x01, 0xFB, 0xF0, - 0x1F, 0x8F, 0xC1, 0xF8, 0x3E, 0x0F, 0xC1, 0xF8, 0xFC, 0x07, 0xEF, 0xC0, - 0x1F, 0x80, 0xFC, 0x01, 0xFB, 0xE0, 0x1F, 0x9F, 0x80, 0xFC, 0x7E, 0x0F, - 0xC1, 0xF0, 0x7C, 0x0F, 0xC7, 0xE0, 0x3F, 0x7E, 0x01, 0xFB, 0xF0, 0x07, - 0xFF, 0x00, 0x1F, 0xF0, 0x00, 0xFF, 0x80, 0x03, 0xF8, 0x00, 0x0F, 0x80, - 0x00, 0x7C, 0x00, 0x03, 0xE0, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x07, - 0xC0, 0x00, 0x3E, 0x00, 0x01, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0x7F, 0xFF, - 0xBF, 0xFF, 0xDF, 0xFF, 0xEF, 0xFF, 0xF0, 0x03, 0xF0, 0x03, 0xF0, 0x03, - 0xF0, 0x03, 0xF8, 0x01, 0xF8, 0x01, 0xF8, 0x01, 0xF8, 0x01, 0xFC, 0x00, - 0xFC, 0x00, 0xFC, 0x00, 0xFE, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x7F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF8, 0x3E, 0x0F, 0x83, 0xE0, 0xF8, 0x3E, 0x0F, 0x83, 0xE0, 0xF8, 0x3E, - 0x0F, 0x83, 0xE0, 0xF8, 0x3E, 0x0F, 0x83, 0xE0, 0xF8, 0x3E, 0x0F, 0x83, - 0xE0, 0xF8, 0x3E, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF8, 0x01, 0xF8, - 0x01, 0xF0, 0x03, 0xE0, 0x07, 0xE0, 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x80, - 0x1F, 0x00, 0x3E, 0x00, 0x7E, 0x00, 0x7C, 0x00, 0xF8, 0x01, 0xF8, 0x01, - 0xF0, 0x03, 0xE0, 0x07, 0xE0, 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x80, 0x1F, - 0x00, 0x3E, 0x00, 0x7E, 0x00, 0x7C, 0x00, 0xF8, 0x01, 0xF8, 0x01, 0xF0, - 0x03, 0xE0, 0x07, 0xE0, 0x07, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, - 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0, - 0x7C, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x1F, - 0x07, 0xC1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x01, 0xC0, 0x01, 0xF0, - 0x01, 0xFC, 0x00, 0xFE, 0x00, 0xFF, 0x80, 0x7B, 0xC0, 0x7D, 0xF0, 0x7C, - 0x7C, 0x3C, 0x1E, 0x3E, 0x0F, 0xBE, 0x03, 0xEF, 0x01, 0xE1, 0x00, 0x40, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x20, 0xE3, 0xE3, 0xE3, - 0xE3, 0x82, 0x00, 0x1F, 0xE0, 0xFF, 0xC3, 0xFF, 0x8F, 0xFF, 0x00, 0xFC, - 0x01, 0xF1, 0xFF, 0xDF, 0xFF, 0x7F, 0xFF, 0xF1, 0xFF, 0x87, 0xFE, 0x1F, - 0xFF, 0xFD, 0xFF, 0xF7, 0xFF, 0xC7, 0xFC, 0x38, 0x00, 0xF8, 0x00, 0xF8, - 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xFB, - 0xE0, 0xFF, 0xF8, 0xFF, 0xFC, 0xFF, 0xFE, 0xF8, 0x3E, 0xF8, 0x3F, 0xF8, - 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x3F, 0xF8, 0x7E, 0xFF, - 0xFE, 0xFF, 0xFC, 0xFF, 0xF8, 0x3F, 0xE0, 0x03, 0xF8, 0x3F, 0xF3, 0xFF, - 0xDF, 0xFE, 0x7E, 0x03, 0xF0, 0x0F, 0x80, 0x3E, 0x00, 0xF8, 0x03, 0xE0, - 0x0F, 0xC0, 0x1F, 0x80, 0x7F, 0xFC, 0xFF, 0xF1, 0xFF, 0xC1, 0xFE, 0x00, - 0x07, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, - 0x1F, 0x00, 0x1F, 0x07, 0xDF, 0x1F, 0xFF, 0x3F, 0xFF, 0x7F, 0xFF, 0x7C, - 0x1F, 0xFC, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xFC, - 0x1F, 0x7E, 0x1F, 0x7F, 0xFF, 0x3F, 0xFF, 0x1F, 0xFF, 0x07, 0xFC, 0x07, - 0xE0, 0x1F, 0xF8, 0x3F, 0xFC, 0x7F, 0xFE, 0x7C, 0x3F, 0xF8, 0x1F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0xFC, 0x00, 0x7E, 0x04, 0x7F, - 0xFE, 0x3F, 0xFE, 0x1F, 0xFE, 0x07, 0xF8, 0x0F, 0xE3, 0xFF, 0x7F, 0xE7, - 0xFE, 0xFC, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xFF, 0xEF, 0xFE, 0xFF, 0xEF, - 0xFE, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, - 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0x07, 0xF8, 0x3F, 0xFC, 0xFF, - 0xFB, 0xFF, 0xF7, 0xC3, 0xFF, 0x87, 0xFE, 0x0F, 0xFC, 0x1F, 0xF8, 0x3F, - 0xF0, 0x7F, 0xF0, 0xFB, 0xFF, 0xF7, 0xFF, 0xE7, 0xFF, 0xC3, 0xFF, 0x80, - 0x1F, 0x00, 0x3E, 0x40, 0xFD, 0xFF, 0xF3, 0xFF, 0xE7, 0xFF, 0x03, 0xF8, - 0x00, 0x38, 0x03, 0xE0, 0x0F, 0x80, 0x3E, 0x00, 0xF8, 0x03, 0xE0, 0x0F, - 0x80, 0x3E, 0x00, 0xFF, 0xE3, 0xFF, 0xCF, 0xFF, 0xBF, 0xFE, 0xF8, 0xFF, - 0xE1, 0xFF, 0x87, 0xFE, 0x1F, 0xF8, 0x7F, 0xE1, 0xFF, 0x87, 0xFE, 0x1F, - 0xF8, 0x7F, 0xE1, 0xFF, 0x87, 0xFE, 0x1F, 0x77, 0xFF, 0xF7, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x07, - 0xC3, 0xE1, 0xF0, 0x70, 0x00, 0x00, 0x00, 0x0F, 0x87, 0xC3, 0xE1, 0xF0, - 0xF8, 0x7C, 0x3E, 0x1F, 0x0F, 0x87, 0xC3, 0xE1, 0xF0, 0xF8, 0x7C, 0x3E, - 0x1F, 0x0F, 0x8F, 0xFF, 0xFF, 0xEF, 0xE7, 0xE0, 0x38, 0x01, 0xF0, 0x03, - 0xE0, 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8, - 0xFF, 0xF1, 0xFB, 0xE7, 0xE7, 0xDF, 0x8F, 0xFF, 0x1F, 0xFC, 0x3F, 0xF0, - 0x7F, 0xC0, 0xFF, 0xC1, 0xFF, 0xC3, 0xFF, 0xC7, 0xDF, 0x8F, 0x9F, 0x9F, - 0x1F, 0xBE, 0x3F, 0x7C, 0x3F, 0x38, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, - 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, - 0xFC, 0xFF, 0x7F, 0x7F, 0x1E, 0x3F, 0xC3, 0xF1, 0xFF, 0xFF, 0xF3, 0xFF, - 0xFF, 0xF7, 0xFF, 0xFF, 0xEF, 0x8F, 0xC7, 0xFF, 0x0F, 0x87, 0xFE, 0x1F, - 0x0F, 0xFC, 0x3E, 0x1F, 0xF8, 0x7C, 0x3F, 0xF0, 0xF8, 0x7F, 0xE1, 0xF0, - 0xFF, 0xC3, 0xE1, 0xFF, 0x87, 0xC3, 0xFF, 0x0F, 0x87, 0xFE, 0x1F, 0x0F, - 0xFC, 0x3E, 0x1F, 0x3F, 0xC3, 0xFF, 0xCF, 0xFF, 0xBF, 0xFE, 0xF8, 0xFF, - 0xE1, 0xFF, 0x87, 0xFE, 0x1F, 0xF8, 0x7F, 0xE1, 0xFF, 0x87, 0xFE, 0x1F, - 0xF8, 0x7F, 0xE1, 0xFF, 0x87, 0xFE, 0x1F, 0x07, 0xF0, 0x0F, 0xFE, 0x0F, - 0xFF, 0x8F, 0xFF, 0xE7, 0xE3, 0xF7, 0xE0, 0xFF, 0xE0, 0x3F, 0xF0, 0x1F, - 0xF8, 0x0F, 0xFC, 0x07, 0xFF, 0x07, 0xEF, 0xC7, 0xE7, 0xFF, 0xF1, 0xFF, - 0xF0, 0x7F, 0xF0, 0x0F, 0xE0, 0x3F, 0xC0, 0xFF, 0xF8, 0xFF, 0xFC, 0xFF, - 0xFE, 0xF8, 0x7E, 0xF8, 0x3F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, - 0x1F, 0xF8, 0x3F, 0xF8, 0x3E, 0xFF, 0xFE, 0xFF, 0xFC, 0xFF, 0xF8, 0xFB, - 0xF0, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, - 0x00, 0x03, 0xFE, 0x0F, 0xFF, 0xCF, 0xFF, 0xEF, 0xFF, 0xF7, 0xE0, 0xFF, - 0xE0, 0x7F, 0xE0, 0x3F, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x07, 0xFF, 0x03, - 0xEF, 0xC1, 0xF7, 0xFF, 0xF9, 0xFF, 0xFC, 0x7F, 0xFE, 0x0F, 0xDF, 0x00, - 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x7C, - 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x81, 0xF0, 0x3E, 0x07, 0xC0, 0xF8, - 0x1F, 0x03, 0xE0, 0x7C, 0x0F, 0x81, 0xF0, 0x3E, 0x07, 0xC0, 0x0F, 0xE1, - 0xFF, 0x9F, 0xFD, 0xFF, 0xEF, 0x81, 0x7C, 0x03, 0xFF, 0xDF, 0xFE, 0x7F, - 0xF9, 0xFF, 0xC0, 0x3F, 0x81, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0x8F, 0xF0, - 0x38, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0xFE, 0xFF, 0xEF, 0xFE, - 0xFF, 0xEF, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, - 0xFC, 0x0F, 0xFE, 0x7F, 0xE3, 0xFF, 0x0F, 0xE0, 0xF8, 0x7F, 0xE1, 0xFF, - 0x87, 0xFE, 0x1F, 0xF8, 0x7F, 0xE1, 0xFF, 0x87, 0xFE, 0x1F, 0xF8, 0x7F, - 0xE1, 0xFF, 0x87, 0xFF, 0x1F, 0x7F, 0xFD, 0xFF, 0xF3, 0xFF, 0xC3, 0xFC, - 0xF8, 0x0F, 0xFE, 0x0F, 0xDF, 0x07, 0xCF, 0x83, 0xE7, 0xE3, 0xF1, 0xF1, - 0xF0, 0xF8, 0xF8, 0x7E, 0xFC, 0x1F, 0x7C, 0x0F, 0xBE, 0x03, 0xFE, 0x01, - 0xFF, 0x00, 0xFF, 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x07, 0xC0, 0xF8, 0x38, - 0x1F, 0xF8, 0x3C, 0x1F, 0x7C, 0x7C, 0x3E, 0x7C, 0x7C, 0x3E, 0x7C, 0x7E, - 0x3E, 0x3C, 0x7E, 0x3C, 0x3C, 0xFE, 0x3C, 0x3E, 0xEE, 0x7C, 0x1E, 0xEF, - 0x78, 0x1E, 0xEF, 0x78, 0x1F, 0xE7, 0xF8, 0x0F, 0xC7, 0xF0, 0x0F, 0xC3, - 0xF0, 0x0F, 0xC3, 0xF0, 0x07, 0x83, 0xE0, 0x07, 0x81, 0xE0, 0xFC, 0x1F, - 0xBF, 0x1F, 0x8F, 0xDF, 0x87, 0xEF, 0xC1, 0xFF, 0xC0, 0x7F, 0xC0, 0x3F, - 0xE0, 0x0F, 0xE0, 0x07, 0xF0, 0x07, 0xF8, 0x03, 0xFE, 0x03, 0xFF, 0x83, - 0xF7, 0xE1, 0xFB, 0xF1, 0xF8, 0xFD, 0xF8, 0x3F, 0xF8, 0x0F, 0xFE, 0x0F, - 0xDF, 0x07, 0xCF, 0x83, 0xE7, 0xC3, 0xF1, 0xF1, 0xF0, 0xF8, 0xF8, 0x7C, - 0x78, 0x1F, 0x7C, 0x0F, 0xBE, 0x03, 0xDE, 0x01, 0xFF, 0x00, 0x7F, 0x00, - 0x3F, 0x80, 0x0F, 0xC0, 0x07, 0xC0, 0x03, 0xE0, 0x03, 0xE0, 0x1F, 0xF0, - 0x1F, 0xF0, 0x0F, 0xF0, 0x03, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x03, 0xF8, 0x0F, 0xC0, 0x7E, 0x03, 0xF8, 0x1F, 0xC0, 0xFE, - 0x03, 0xF0, 0x1F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, - 0xE1, 0xFC, 0x3F, 0x8F, 0xF1, 0xF8, 0x3E, 0x07, 0xC0, 0xF8, 0x1F, 0x03, - 0xE0, 0x7C, 0x0F, 0x83, 0xF1, 0xFC, 0x3F, 0x87, 0xE0, 0xFE, 0x07, 0xE0, - 0x7C, 0x0F, 0x81, 0xF0, 0x3E, 0x07, 0xC0, 0xF8, 0x1F, 0x03, 0xF0, 0x7F, - 0x87, 0xF0, 0x7E, 0x07, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x1F, 0x83, 0xF8, - 0x7F, 0x83, 0xF0, 0x3E, 0x07, 0xC0, 0xF8, 0x1F, 0x03, 0xE0, 0x7C, 0x0F, - 0x81, 0xF8, 0x1F, 0xC3, 0xF8, 0x7F, 0x0F, 0xE3, 0xF0, 0x7C, 0x0F, 0x81, - 0xF0, 0x3E, 0x07, 0xC0, 0xF8, 0x1F, 0x07, 0xE3, 0xFC, 0x7F, 0x0F, 0xE1, - 0xF0, 0x00, 0x1E, 0x06, 0x3F, 0x8F, 0x7F, 0xFF, 0xFF, 0xFE, 0xF1, 0xFC, - 0x60, 0x78 }; - -const GFXglyph Ubuntu_Bold16pt7bGlyphs[] PROGMEM = { - { 0, 0, 0, 7, 0, 1 }, // 0x20 ' ' - { 0, 5, 21, 9, 2, -20 }, // 0x21 '!' - { 14, 12, 9, 14, 2, -23 }, // 0x22 '"' - { 28, 18, 21, 22, 2, -20 }, // 0x23 '#' - { 76, 16, 28, 18, 1, -23 }, // 0x24 '$' - { 132, 26, 21, 28, 1, -20 }, // 0x25 '%' - { 201, 21, 21, 22, 1, -20 }, // 0x26 '&' - { 257, 5, 9, 9, 2, -23 }, // 0x27 ''' - { 263, 9, 30, 11, 2, -23 }, // 0x28 '(' - { 297, 9, 30, 11, 0, -23 }, // 0x29 ')' - { 331, 13, 12, 16, 2, -20 }, // 0x2A '*' - { 351, 14, 14, 18, 2, -15 }, // 0x2B '+' - { 376, 6, 10, 8, 1, -4 }, // 0x2C ',' - { 384, 9, 4, 11, 1, -10 }, // 0x2D '-' - { 389, 6, 6, 8, 1, -5 }, // 0x2E '.' - { 394, 15, 30, 14, -1, -23 }, // 0x2F '/' - { 451, 16, 21, 18, 1, -20 }, // 0x30 '0' - { 493, 10, 21, 18, 3, -20 }, // 0x31 '1' - { 520, 15, 21, 18, 1, -20 }, // 0x32 '2' - { 560, 15, 21, 18, 1, -20 }, // 0x33 '3' - { 600, 16, 21, 18, 1, -20 }, // 0x34 '4' - { 642, 15, 21, 18, 1, -20 }, // 0x35 '5' - { 682, 16, 21, 18, 1, -20 }, // 0x36 '6' - { 724, 16, 21, 18, 1, -20 }, // 0x37 '7' - { 766, 16, 21, 18, 1, -20 }, // 0x38 '8' - { 808, 16, 21, 18, 1, -20 }, // 0x39 '9' - { 850, 6, 17, 8, 1, -16 }, // 0x3A ':' - { 863, 6, 22, 8, 1, -16 }, // 0x3B ';' - { 880, 15, 15, 18, 1, -16 }, // 0x3C '<' - { 909, 15, 11, 18, 1, -14 }, // 0x3D '=' - { 930, 14, 15, 18, 2, -16 }, // 0x3E '>' - { 957, 12, 24, 14, 1, -23 }, // 0x3F '?' - { 993, 26, 27, 30, 2, -21 }, // 0x40 '@' - { 1081, 21, 21, 21, 0, -20 }, // 0x41 'A' - { 1137, 17, 21, 21, 2, -20 }, // 0x42 'B' - { 1182, 17, 21, 20, 2, -20 }, // 0x43 'C' - { 1227, 19, 21, 23, 2, -20 }, // 0x44 'D' - { 1277, 16, 21, 19, 2, -20 }, // 0x45 'E' - { 1319, 15, 21, 18, 2, -20 }, // 0x46 'F' - { 1359, 18, 21, 22, 2, -20 }, // 0x47 'G' - { 1407, 19, 21, 23, 2, -20 }, // 0x48 'H' - { 1457, 5, 21, 9, 2, -20 }, // 0x49 'I' - { 1471, 14, 21, 16, 0, -20 }, // 0x4A 'J' - { 1508, 19, 21, 21, 2, -20 }, // 0x4B 'K' - { 1558, 14, 21, 17, 2, -20 }, // 0x4C 'L' - { 1595, 24, 21, 28, 2, -20 }, // 0x4D 'M' - { 1658, 19, 21, 23, 2, -20 }, // 0x4E 'N' - { 1708, 20, 21, 24, 2, -20 }, // 0x4F 'O' - { 1761, 17, 21, 20, 2, -20 }, // 0x50 'P' - { 1806, 20, 27, 24, 2, -20 }, // 0x51 'Q' - { 1874, 18, 21, 21, 2, -20 }, // 0x52 'R' - { 1922, 16, 21, 18, 1, -20 }, // 0x53 'S' - { 1964, 17, 21, 19, 1, -20 }, // 0x54 'T' - { 2009, 18, 21, 22, 2, -20 }, // 0x55 'U' - { 2057, 21, 21, 21, 0, -20 }, // 0x56 'V' - { 2113, 29, 21, 31, 1, -20 }, // 0x57 'W' - { 2190, 21, 21, 21, 0, -20 }, // 0x58 'X' - { 2246, 21, 21, 21, 0, -20 }, // 0x59 'Y' - { 2302, 17, 21, 19, 1, -20 }, // 0x5A 'Z' - { 2347, 10, 30, 12, 2, -23 }, // 0x5B '[' - { 2385, 15, 30, 14, -1, -23 }, // 0x5C '\' - { 2442, 10, 30, 12, 0, -23 }, // 0x5D ']' - { 2480, 17, 13, 19, 1, -21 }, // 0x5E '^' - { 2508, 16, 4, 16, 0, 3 }, // 0x5F '_' - { 2516, 7, 7, 9, 1, -24 }, // 0x60 '`' - { 2523, 14, 16, 17, 1, -15 }, // 0x61 'a' - { 2551, 16, 24, 19, 2, -23 }, // 0x62 'b' - { 2599, 14, 16, 16, 1, -15 }, // 0x63 'c' - { 2627, 16, 24, 19, 1, -23 }, // 0x64 'd' - { 2675, 16, 16, 18, 1, -15 }, // 0x65 'e' - { 2707, 12, 24, 14, 2, -23 }, // 0x66 'f' - { 2743, 15, 22, 18, 1, -15 }, // 0x67 'g' - { 2785, 14, 24, 18, 2, -23 }, // 0x68 'h' - { 2827, 5, 24, 9, 2, -23 }, // 0x69 'i' - { 2842, 9, 30, 9, -2, -23 }, // 0x6A 'j' - { 2876, 15, 24, 18, 2, -23 }, // 0x6B 'k' - { 2921, 8, 24, 10, 2, -23 }, // 0x6C 'l' - { 2945, 23, 16, 27, 2, -15 }, // 0x6D 'm' - { 2991, 14, 16, 18, 2, -15 }, // 0x6E 'n' - { 3019, 17, 16, 19, 1, -15 }, // 0x6F 'o' - { 3053, 16, 22, 19, 2, -15 }, // 0x70 'p' - { 3097, 17, 22, 19, 1, -15 }, // 0x71 'q' - { 3144, 11, 16, 13, 2, -15 }, // 0x72 'r' - { 3166, 13, 16, 15, 1, -15 }, // 0x73 's' - { 3192, 12, 21, 15, 2, -20 }, // 0x74 't' - { 3224, 14, 16, 18, 2, -15 }, // 0x75 'u' - { 3252, 17, 16, 17, 0, -15 }, // 0x76 'v' - { 3286, 24, 16, 24, 0, -15 }, // 0x77 'w' - { 3334, 17, 16, 17, 0, -15 }, // 0x78 'x' - { 3368, 17, 22, 17, 0, -15 }, // 0x79 'y' - { 3415, 14, 16, 16, 1, -15 }, // 0x7A 'z' - { 3443, 11, 30, 12, 1, -23 }, // 0x7B '{' - { 3485, 4, 30, 10, 3, -23 }, // 0x7C '|' - { 3500, 11, 30, 12, 0, -23 }, // 0x7D '}' - { 3542, 16, 6, 18, 1, -11 } }; // 0x7E '~' - -const GFXfont Ubuntu_Bold16pt7b PROGMEM = { - (uint8_t *)Ubuntu_Bold16pt7bBitmaps, - (GFXglyph *)Ubuntu_Bold16pt7bGlyphs, - 0x20, 0x7E, 36 }; - -// Approx. 4226 bytes diff --git a/lib/obp60task/Ubuntu_Bold20pt7b.h b/lib/obp60task/Ubuntu_Bold20pt7b.h deleted file mode 100644 index 9017ebb..0000000 --- a/lib/obp60task/Ubuntu_Bold20pt7b.h +++ /dev/null @@ -1,578 +0,0 @@ -const uint8_t Ubuntu_Bold20pt7bBitmaps[] PROGMEM = { - 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, - 0x7E, 0x7E, 0x7E, 0x3C, 0x3C, 0x3C, 0x00, 0x00, 0x3C, 0x7E, 0xFF, 0xFF, - 0xFF, 0x7E, 0x3C, 0xFC, 0x7F, 0xF8, 0xFF, 0xF1, 0xFF, 0xE3, 0xFF, 0xC7, - 0xFF, 0x8F, 0xFF, 0x1F, 0xFE, 0x3F, 0xF8, 0x7C, 0xF0, 0x79, 0xE0, 0xF0, - 0x01, 0xF9, 0xF8, 0x03, 0xF3, 0xF0, 0x07, 0xEF, 0xE0, 0x1F, 0x9F, 0x80, - 0x3F, 0x3F, 0x00, 0x7E, 0x7E, 0x00, 0xFC, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x3F, 0x3F, 0x00, 0x7E, - 0x7E, 0x01, 0xFD, 0xFC, 0x03, 0xF3, 0xF0, 0x07, 0xE7, 0xE0, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0xF9, 0xF8, - 0x03, 0xF3, 0xF0, 0x07, 0xE7, 0xE0, 0x0F, 0xCF, 0xC0, 0x3F, 0xBF, 0x00, - 0x7E, 0x7E, 0x00, 0xFC, 0xFC, 0x00, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x03, - 0xE0, 0x00, 0x7C, 0x00, 0x1F, 0xF0, 0x1F, 0xFF, 0x87, 0xFF, 0xF1, 0xFF, - 0xFE, 0x3F, 0xFF, 0x8F, 0xE0, 0x71, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xF0, - 0x00, 0xFF, 0x80, 0x1F, 0xFE, 0x01, 0xFF, 0xF0, 0x1F, 0xFF, 0x81, 0xFF, - 0xF8, 0x0F, 0xFF, 0x00, 0x3F, 0xF0, 0x00, 0xFE, 0x00, 0x0F, 0xC0, 0x01, - 0xF8, 0x00, 0x3F, 0x78, 0x0F, 0xEF, 0xFF, 0xF9, 0xFF, 0xFF, 0x7F, 0xFF, - 0xC7, 0xFF, 0xF0, 0x1F, 0xF8, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0xF8, - 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x0F, 0x80, 0x03, 0xF0, 0x0F, 0xF8, - 0x01, 0xF8, 0x07, 0xFF, 0x00, 0x7E, 0x01, 0xFF, 0xC0, 0x3F, 0x00, 0xF8, - 0xF8, 0x0F, 0x80, 0x3C, 0x1E, 0x07, 0xE0, 0x0F, 0x07, 0x83, 0xF0, 0x03, - 0xC1, 0xE0, 0xF8, 0x00, 0xF0, 0x78, 0x7E, 0x00, 0x3C, 0x1E, 0x1F, 0x00, - 0x0F, 0x07, 0x8F, 0xC0, 0x03, 0xE3, 0xE7, 0xE1, 0xF0, 0x7F, 0xF1, 0xF1, - 0xFF, 0x1F, 0xFC, 0xFC, 0xFF, 0xE3, 0xFE, 0x3E, 0x3F, 0xF8, 0x3E, 0x1F, - 0x9F, 0x1F, 0x00, 0x0F, 0xC7, 0x83, 0xC0, 0x03, 0xE1, 0xE0, 0xF0, 0x01, - 0xF8, 0x78, 0x3C, 0x00, 0x7C, 0x1E, 0x0F, 0x00, 0x3F, 0x07, 0x83, 0xC0, - 0x1F, 0x81, 0xE0, 0xF0, 0x07, 0xC0, 0x7C, 0x7C, 0x03, 0xF0, 0x0F, 0xFE, - 0x01, 0xF8, 0x03, 0xFF, 0x80, 0x7E, 0x00, 0x7F, 0xC0, 0x3F, 0x00, 0x07, - 0xC0, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x3F, 0xFF, 0x00, 0x07, - 0xFF, 0xF0, 0x01, 0xFF, 0xFE, 0x00, 0x3F, 0x8F, 0xC0, 0x07, 0xE1, 0xF8, - 0x00, 0xFC, 0x3F, 0x00, 0x1F, 0xCF, 0xC0, 0x01, 0xFF, 0xF8, 0x00, 0x3F, - 0xFE, 0x00, 0x03, 0xFF, 0x80, 0x00, 0xFF, 0xC0, 0x00, 0x3F, 0xFC, 0x3E, - 0x0F, 0xFF, 0xC7, 0xE3, 0xFB, 0xFC, 0xFC, 0x7E, 0x3F, 0xFF, 0x1F, 0x83, - 0xFF, 0xE3, 0xF0, 0x3F, 0xF8, 0x7E, 0x07, 0xFF, 0x0F, 0xC0, 0x7F, 0xC1, - 0xFE, 0x07, 0xFC, 0x1F, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, - 0xFF, 0x83, 0xFF, 0xF7, 0xF8, 0x0F, 0xF0, 0x7F, 0x80, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xF9, 0xE7, 0x80, 0x01, 0x00, 0x70, 0x1F, 0x87, 0xE0, - 0xFC, 0x3F, 0x07, 0xE1, 0xF8, 0x3F, 0x07, 0xE1, 0xF8, 0x3F, 0x07, 0xE1, - 0xFC, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, - 0x3F, 0x07, 0xE0, 0xFC, 0x0F, 0xC1, 0xF8, 0x3F, 0x03, 0xF0, 0x7E, 0x0F, - 0xC0, 0xFC, 0x1F, 0x81, 0xF8, 0x3F, 0x03, 0xF0, 0x38, 0x02, 0x00, 0x10, - 0x07, 0x03, 0xF0, 0x3F, 0x07, 0xE0, 0x7E, 0x0F, 0xC0, 0xFC, 0x1F, 0x83, - 0xF0, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x81, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, - 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x0F, 0xE1, 0xF8, 0x3F, - 0x07, 0xE1, 0xF8, 0x3F, 0x07, 0xE1, 0xF8, 0x3F, 0x0F, 0xC1, 0xF8, 0x7E, - 0x03, 0x80, 0x20, 0x00, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x0C, 0x7C, - 0x67, 0x9C, 0xF3, 0xEE, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFC, 0x03, - 0xF8, 0x03, 0xDE, 0x03, 0xEF, 0x83, 0xF7, 0xE0, 0xF1, 0xE0, 0x38, 0xE0, - 0x08, 0x20, 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, - 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x1F, 0x00, 0x03, 0xE0, 0x00, - 0x7C, 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, - 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x7E, 0x7E, 0x7E, 0x7C, 0xFC, 0x18, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x38, 0xFB, 0xFF, 0xFF, 0xEF, - 0x8E, 0x00, 0x00, 0x07, 0xE0, 0x01, 0xFC, 0x00, 0x3F, 0x00, 0x07, 0xE0, - 0x01, 0xFC, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x01, 0xFC, 0x00, 0x3F, 0x00, - 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x01, 0xF8, 0x00, - 0x3F, 0x00, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x01, - 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, - 0xE0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x3F, - 0x00, 0x0F, 0xE0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x0F, 0xE0, 0x01, 0xF8, - 0x00, 0x3F, 0x00, 0x0F, 0xE0, 0x01, 0xF8, 0x00, 0x00, 0x01, 0xF8, 0x00, - 0x7F, 0xE0, 0x0F, 0xFF, 0x01, 0xFF, 0xF8, 0x3F, 0xFF, 0xC3, 0xF0, 0xFE, - 0x7E, 0x07, 0xE7, 0xE0, 0x7E, 0xFE, 0x07, 0xEF, 0xC0, 0x3F, 0xFC, 0x03, - 0xFF, 0xC0, 0x3F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xFC, 0x03, 0xFF, 0xC0, - 0x3F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xFC, 0x07, 0xF7, 0xE0, 0x7E, 0x7E, - 0x07, 0xE7, 0xF0, 0xFE, 0x3F, 0xFF, 0xC1, 0xFF, 0xF8, 0x1F, 0xFF, 0x00, - 0x7F, 0xE0, 0x01, 0xF8, 0x00, 0x00, 0xF8, 0x0F, 0xC0, 0xFE, 0x0F, 0xF1, - 0xFF, 0xBF, 0xFF, 0xFF, 0xEF, 0xBF, 0x79, 0xF9, 0x0F, 0xC0, 0x7E, 0x03, - 0xF0, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, 0x7E, - 0x03, 0xF0, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, - 0x7E, 0x07, 0xF8, 0x03, 0xFF, 0xC1, 0xFF, 0xFC, 0x7F, 0xFF, 0xC7, 0xFF, - 0xFC, 0xF8, 0x3F, 0x8C, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, - 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0xC0, 0x07, 0xF0, 0x01, 0xFE, 0x00, 0x7F, - 0x80, 0x1F, 0xE0, 0x07, 0xF8, 0x01, 0xFE, 0x00, 0x7F, 0x80, 0x0F, 0xE0, - 0x03, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0xFF, 0xFB, 0xFF, 0xFF, 0x7F, 0xFF, - 0xEF, 0xFF, 0xFD, 0xFF, 0xFF, 0x80, 0x07, 0xF0, 0x07, 0xFF, 0xC3, 0xFF, - 0xFC, 0x3F, 0xFF, 0xC7, 0xFF, 0xF8, 0x70, 0x3F, 0x88, 0x03, 0xF0, 0x00, - 0x7E, 0x00, 0x0F, 0xC0, 0x07, 0xF8, 0x3F, 0xFE, 0x07, 0xFF, 0x80, 0xFF, - 0xE0, 0x1F, 0xFE, 0x03, 0xFF, 0xF0, 0x01, 0xFE, 0x00, 0x0F, 0xE0, 0x00, - 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0xFE, 0xE0, 0x3F, 0xDF, 0xFF, - 0xF7, 0xFF, 0xFE, 0xFF, 0xFF, 0x9F, 0xFF, 0xC0, 0x3F, 0xC0, 0x00, 0x00, - 0x1F, 0x80, 0x03, 0xF8, 0x00, 0x7F, 0x80, 0x0F, 0xF8, 0x01, 0xFF, 0x80, - 0x1F, 0xF8, 0x03, 0xFF, 0x80, 0x7F, 0xF8, 0x07, 0xDF, 0x80, 0xF9, 0xF8, - 0x1F, 0x9F, 0x81, 0xF1, 0xF8, 0x3E, 0x1F, 0x83, 0xE1, 0xF8, 0x7C, 0x1F, - 0x8F, 0xC1, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xF0, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, - 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x1F, 0xFF, 0xC3, 0xFF, 0xF8, - 0x7F, 0xFF, 0x0F, 0xFF, 0xE1, 0xFF, 0xFC, 0x3E, 0x00, 0x07, 0xC0, 0x00, - 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x00, 0xFF, 0x80, 0x1F, 0xFE, 0x03, - 0xFF, 0xF0, 0x7F, 0xFF, 0x0F, 0xFF, 0xF0, 0x03, 0xFE, 0x00, 0x0F, 0xE0, - 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0xFE, 0xC0, 0x3F, 0xDF, - 0xFF, 0xF7, 0xFF, 0xFC, 0xFF, 0xFF, 0x1F, 0xFF, 0xC0, 0x7F, 0xC0, 0x00, - 0x00, 0x07, 0xC0, 0x07, 0xFC, 0x01, 0xFF, 0xC0, 0x3F, 0xFC, 0x0F, 0xFF, - 0xC1, 0xFF, 0xC0, 0x1F, 0xE0, 0x03, 0xF8, 0x00, 0x7F, 0x00, 0x07, 0xE0, - 0x00, 0x7F, 0xFC, 0x0F, 0xFF, 0xF8, 0xFF, 0xFF, 0xCF, 0xFF, 0xFE, 0xFF, - 0xFF, 0xEF, 0xC0, 0xFF, 0xFC, 0x07, 0xFF, 0xC0, 0x3F, 0xFC, 0x03, 0xFF, - 0xC0, 0x3F, 0x7E, 0x07, 0xF7, 0xF0, 0xFE, 0x3F, 0xFF, 0xE3, 0xFF, 0xFC, - 0x1F, 0xFF, 0x80, 0xFF, 0xF0, 0x01, 0xFC, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x07, 0xE0, 0x03, 0xF0, - 0x01, 0xFC, 0x00, 0x7E, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x07, 0xE0, 0x01, - 0xF8, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x07, 0xE0, 0x01, 0xF8, - 0x00, 0x7E, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, - 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x03, 0xF8, 0x01, - 0xFF, 0xC0, 0x7F, 0xFC, 0x1F, 0xFF, 0xC3, 0xFF, 0xFC, 0xFE, 0x3F, 0x9F, - 0x83, 0xF3, 0xF0, 0x7E, 0x7E, 0x0F, 0xCF, 0xE3, 0xF0, 0xFE, 0x7E, 0x0F, - 0xFF, 0x80, 0xFF, 0xE0, 0x1F, 0xFE, 0x07, 0xFF, 0xE1, 0xF9, 0xFE, 0x7E, - 0x0F, 0xDF, 0x80, 0xFF, 0xF0, 0x1F, 0xFE, 0x03, 0xFF, 0xC0, 0x7F, 0xFC, - 0x1F, 0xDF, 0xFF, 0xF3, 0xFF, 0xFE, 0x3F, 0xFF, 0x83, 0xFF, 0xE0, 0x0F, - 0xE0, 0x00, 0x03, 0xF8, 0x01, 0xFF, 0xC0, 0x7F, 0xFC, 0x1F, 0xFF, 0xC7, - 0xFF, 0xF8, 0xFE, 0x3F, 0xBF, 0x83, 0xF7, 0xE0, 0x3F, 0xFC, 0x07, 0xFF, - 0x80, 0xFF, 0xF0, 0x1F, 0xFF, 0x03, 0xF7, 0xFF, 0xFE, 0xFF, 0xFF, 0xCF, - 0xFF, 0xF8, 0xFF, 0xFF, 0x07, 0xFF, 0xE0, 0x01, 0xF8, 0x00, 0x7F, 0x00, - 0x0F, 0xC0, 0x07, 0xF8, 0x07, 0xFE, 0x0F, 0xFF, 0x81, 0xFF, 0xE0, 0x3F, - 0xF8, 0x07, 0xFC, 0x00, 0xF8, 0x00, 0x00, 0x38, 0xFB, 0xFF, 0xFF, 0xEF, - 0x8E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x3E, 0xFF, 0xFF, 0xFB, - 0xE3, 0x80, 0x1C, 0x3E, 0x7F, 0x7F, 0x7F, 0x3E, 0x1C, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x7E, 0x7E, - 0x7E, 0x7C, 0xFC, 0x18, 0x00, 0x01, 0x80, 0x01, 0xF0, 0x01, 0xFF, 0x03, - 0xFF, 0xE3, 0xFF, 0xFD, 0xFF, 0xFF, 0xBF, 0xFF, 0xC7, 0xFF, 0xC0, 0xFF, - 0x80, 0x1F, 0x80, 0x03, 0xFE, 0x00, 0x7F, 0xFC, 0x0F, 0xFF, 0xF1, 0xFF, - 0xFF, 0x8F, 0xFF, 0xF0, 0x3F, 0xFE, 0x00, 0x7F, 0xC0, 0x01, 0xF0, 0x00, - 0x06, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x30, 0x00, - 0x07, 0xC0, 0x01, 0xFF, 0x00, 0x3F, 0xFE, 0x07, 0xFF, 0xF8, 0xFF, 0xFF, - 0xC7, 0xFF, 0xF8, 0x1F, 0xFF, 0x00, 0x3F, 0xE0, 0x00, 0xFC, 0x00, 0xFF, - 0x81, 0xFF, 0xF1, 0xFF, 0xFE, 0xFF, 0xFF, 0xDF, 0xFF, 0xE3, 0xFF, 0xE0, - 0x7F, 0xC0, 0x07, 0xC0, 0x00, 0xC0, 0x00, 0x00, 0x0F, 0xE0, 0x7F, 0xF8, - 0xFF, 0xFC, 0x7F, 0xFE, 0x7F, 0xFF, 0x70, 0x7F, 0x00, 0x3F, 0x00, 0x3F, - 0x00, 0x3F, 0x00, 0x7E, 0x00, 0xFE, 0x01, 0xFC, 0x01, 0xF8, 0x03, 0xF8, - 0x03, 0xF0, 0x07, 0xE0, 0x07, 0xC0, 0x07, 0xC0, 0x07, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x03, 0x80, 0x07, 0xC0, 0x0F, 0xE0, 0x0F, 0xE0, 0x0F, 0xE0, - 0x07, 0xC0, 0x03, 0x80, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xFF, 0xE0, - 0x00, 0x0F, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xFF, 0xE0, 0x07, 0xFC, 0x07, - 0xFC, 0x03, 0xF8, 0x00, 0x3F, 0x81, 0xFC, 0x00, 0x07, 0xF0, 0x7C, 0x00, - 0x00, 0xFC, 0x3F, 0x01, 0xFC, 0x1F, 0x8F, 0x81, 0xFF, 0xC3, 0xE7, 0xC1, - 0xFF, 0xF0, 0xF9, 0xF0, 0x7F, 0xFC, 0x1F, 0xFC, 0x3F, 0x1F, 0x07, 0xFE, - 0x0F, 0x87, 0xC1, 0xFF, 0x87, 0xC1, 0xF0, 0x7F, 0xE1, 0xF0, 0x7C, 0x1F, - 0xF8, 0x7C, 0x1F, 0x07, 0xFE, 0x1F, 0x07, 0xC1, 0xFF, 0x87, 0xC1, 0xF0, - 0x7F, 0xE1, 0xF0, 0x7C, 0x3E, 0xF8, 0x7E, 0x1F, 0x0F, 0xBF, 0x0F, 0xC7, - 0xC7, 0xE7, 0xC3, 0xFF, 0xFF, 0xF1, 0xF0, 0x7F, 0xFF, 0xF8, 0x7E, 0x0F, - 0xFF, 0xFC, 0x0F, 0x80, 0xF8, 0xFC, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x20, 0x00, - 0x3F, 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x00, 0x3F, 0xFF, 0xC0, - 0x00, 0x01, 0xFF, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x00, - 0x01, 0xFF, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x0F, 0xFE, 0x00, 0x01, 0xFF, - 0xC0, 0x00, 0x7E, 0xF8, 0x00, 0x0F, 0xDF, 0x80, 0x01, 0xFB, 0xF0, 0x00, - 0x7E, 0x3F, 0x00, 0x0F, 0xC7, 0xE0, 0x03, 0xF8, 0xFC, 0x00, 0x7E, 0x0F, - 0xC0, 0x0F, 0xC1, 0xF8, 0x03, 0xF8, 0x3F, 0x80, 0x7E, 0x03, 0xF0, 0x0F, - 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, - 0x83, 0xFF, 0xFF, 0xF8, 0x7E, 0x00, 0x3F, 0x1F, 0xC0, 0x07, 0xE3, 0xF8, - 0x00, 0xFE, 0x7E, 0x00, 0x0F, 0xDF, 0xC0, 0x01, 0xFB, 0xF8, 0x00, 0x3F, - 0x80, 0x7F, 0xFC, 0x07, 0xFF, 0xFC, 0x3F, 0xFF, 0xF1, 0xFF, 0xFF, 0xCF, - 0xFF, 0xFF, 0x7E, 0x03, 0xFB, 0xF0, 0x0F, 0xDF, 0x80, 0x7E, 0xFC, 0x03, - 0xF7, 0xE0, 0x7F, 0x3F, 0xFF, 0xF9, 0xFF, 0xFF, 0x8F, 0xFF, 0xFC, 0x7F, - 0xFF, 0xF3, 0xFF, 0xFF, 0xDF, 0x80, 0xFF, 0xFC, 0x03, 0xFF, 0xE0, 0x0F, - 0xFF, 0x00, 0x7F, 0xF8, 0x03, 0xFF, 0xC0, 0x3F, 0xFE, 0x03, 0xFF, 0xFF, - 0xFF, 0xDF, 0xFF, 0xFC, 0xFF, 0xFF, 0xC7, 0xFF, 0xFC, 0x0F, 0xFF, 0x00, - 0x00, 0x3F, 0xC0, 0x07, 0xFF, 0xE0, 0x7F, 0xFF, 0xC3, 0xFF, 0xFE, 0x1F, - 0xFF, 0xF8, 0xFF, 0x81, 0xE3, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0x7E, 0x00, - 0x03, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03, - 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF8, - 0x00, 0x07, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x7F, 0x80, 0x00, 0xFF, 0x00, - 0xE1, 0xFF, 0xFF, 0x87, 0xFF, 0xFE, 0x0F, 0xFF, 0xFC, 0x0F, 0xFF, 0xE0, - 0x07, 0xFC, 0x00, 0x7F, 0xFC, 0x00, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xE0, - 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xF8, 0xFC, 0x07, 0xFC, 0xFC, 0x01, 0xFC, - 0xFC, 0x00, 0xFE, 0xFC, 0x00, 0x7E, 0xFC, 0x00, 0x7F, 0xFC, 0x00, 0x3F, - 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x3F, - 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x7F, 0xFC, 0x00, 0x7E, - 0xFC, 0x00, 0xFE, 0xFC, 0x01, 0xFC, 0xFC, 0x0F, 0xFC, 0xFF, 0xFF, 0xF8, - 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0x80, 0x7F, 0xF8, 0x00, - 0xFF, 0xFF, 0xEF, 0xFF, 0xFE, 0xFF, 0xFF, 0xEF, 0xFF, 0xFE, 0xFF, 0xFF, - 0xEF, 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, - 0x00, 0xFF, 0xFF, 0xCF, 0xFF, 0xFC, 0xFF, 0xFF, 0xCF, 0xFF, 0xFC, 0xFF, - 0xFF, 0xCF, 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x0F, - 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x0F, 0xC0, 0x03, - 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xFF, 0xFE, 0xFF, - 0xFF, 0xBF, 0xFF, 0xEF, 0xFF, 0xFB, 0xFF, 0xFE, 0xFC, 0x00, 0x3F, 0x00, - 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, - 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x7F, 0xC0, - 0x07, 0xFF, 0xE0, 0x7F, 0xFF, 0xC3, 0xFF, 0xFE, 0x1F, 0xFF, 0xF8, 0xFF, - 0x81, 0xE3, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0x7E, 0x00, 0x03, 0xF8, 0x00, - 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x03, 0xFF, - 0xC0, 0x0F, 0xFF, 0x00, 0x3F, 0xFC, 0x00, 0xFF, 0xF8, 0x03, 0xF7, 0xE0, - 0x0F, 0xDF, 0xC0, 0x3F, 0x7F, 0x80, 0xFC, 0xFF, 0x03, 0xF1, 0xFF, 0xFF, - 0xC3, 0xFF, 0xFF, 0x07, 0xFF, 0xFC, 0x0F, 0xFF, 0xF0, 0x07, 0xFE, 0x00, - 0xFC, 0x00, 0x7F, 0xF8, 0x00, 0xFF, 0xF0, 0x01, 0xFF, 0xE0, 0x03, 0xFF, - 0xC0, 0x07, 0xFF, 0x80, 0x0F, 0xFF, 0x00, 0x1F, 0xFE, 0x00, 0x3F, 0xFC, - 0x00, 0x7F, 0xF8, 0x00, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, - 0x7F, 0xF8, 0x00, 0xFF, 0xF0, 0x01, 0xFF, 0xE0, 0x03, 0xFF, 0xC0, 0x07, - 0xFF, 0x80, 0x0F, 0xFF, 0x00, 0x1F, 0xFE, 0x00, 0x3F, 0xFC, 0x00, 0x7F, - 0xF8, 0x00, 0xFF, 0xF0, 0x01, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, - 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, - 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, - 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, - 0x00, 0x1F, 0xDE, 0x0F, 0xE7, 0xFF, 0xF9, 0xFF, 0xFE, 0xFF, 0xFF, 0x1F, - 0xFF, 0x00, 0xFF, 0x00, 0xFC, 0x01, 0xFE, 0xFC, 0x03, 0xFC, 0xFC, 0x07, - 0xF8, 0xFC, 0x0F, 0xF0, 0xFC, 0x1F, 0xE0, 0xFC, 0x3F, 0xC0, 0xFC, 0x7F, - 0x80, 0xFC, 0xFF, 0x00, 0xFD, 0xFE, 0x00, 0xFF, 0xFC, 0x00, 0xFF, 0xF8, - 0x00, 0xFF, 0xF0, 0x00, 0xFF, 0xE0, 0x00, 0xFF, 0xF0, 0x00, 0xFF, 0xF8, - 0x00, 0xFF, 0xFC, 0x00, 0xFD, 0xFE, 0x00, 0xFC, 0xFE, 0x00, 0xFC, 0x7F, - 0x00, 0xFC, 0x3F, 0x80, 0xFC, 0x3F, 0xC0, 0xFC, 0x1F, 0xE0, 0xFC, 0x0F, - 0xF0, 0xFC, 0x07, 0xF8, 0xFC, 0x03, 0xFC, 0xFC, 0x01, 0xFE, 0xFC, 0x00, - 0xFF, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, - 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, - 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, - 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, - 0x3F, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFC, 0x3F, 0x00, 0x01, 0xF8, 0x7F, 0x00, 0x07, 0xF0, 0xFE, 0x00, - 0x0F, 0xE1, 0xFE, 0x00, 0x3F, 0xC7, 0xFC, 0x00, 0x7F, 0xCF, 0xFC, 0x01, - 0xFF, 0x9F, 0xF8, 0x03, 0xFF, 0x3F, 0xF8, 0x07, 0xFE, 0x7F, 0xF0, 0x1F, - 0xFC, 0xFF, 0xE0, 0x3F, 0xF9, 0xFF, 0xE0, 0xFB, 0xF3, 0xF7, 0xC1, 0xF7, - 0xE7, 0xEF, 0xC7, 0xEF, 0xCF, 0xCF, 0x8F, 0x9F, 0x9F, 0x9F, 0x1F, 0x3F, - 0x3E, 0x1F, 0x7C, 0x3E, 0x7C, 0x3E, 0xF8, 0x7D, 0xF8, 0x7F, 0xE0, 0xFB, - 0xF0, 0x7F, 0xC1, 0xFF, 0xE0, 0xFF, 0x03, 0xFF, 0xC0, 0xFE, 0x07, 0xFF, - 0x81, 0xFC, 0x0F, 0xFF, 0x01, 0xF0, 0x1F, 0xFE, 0x03, 0xE0, 0x3F, 0xFC, - 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x01, 0xF8, 0xF8, - 0x00, 0x7F, 0xF8, 0x00, 0xFF, 0xF8, 0x01, 0xFF, 0xF8, 0x03, 0xFF, 0xF8, - 0x07, 0xFF, 0xF8, 0x0F, 0xFF, 0xF0, 0x1F, 0xFF, 0xF0, 0x3F, 0xFF, 0xF0, - 0x7F, 0xFF, 0xF0, 0xFF, 0xF7, 0xE1, 0xFF, 0xE7, 0xE3, 0xFF, 0xCF, 0xE7, - 0xFF, 0x8F, 0xCF, 0xFF, 0x0F, 0xDF, 0xFE, 0x0F, 0xFF, 0xFC, 0x1F, 0xFF, - 0xF8, 0x1F, 0xFF, 0xF0, 0x1F, 0xFF, 0xE0, 0x3F, 0xFF, 0xC0, 0x3F, 0xFF, - 0x80, 0x3F, 0xFF, 0x00, 0x7F, 0xFE, 0x00, 0x7F, 0xFC, 0x00, 0xFF, 0xF8, - 0x00, 0xFF, 0xF0, 0x00, 0xF8, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0xFE, 0x00, - 0x1F, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xF0, 0x7F, 0xC1, - 0xFF, 0x0F, 0xE0, 0x0F, 0xE3, 0xF8, 0x00, 0xFE, 0x7E, 0x00, 0x0F, 0xDF, - 0xC0, 0x01, 0xFF, 0xF0, 0x00, 0x1F, 0xFE, 0x00, 0x03, 0xFF, 0xC0, 0x00, - 0x7F, 0xF8, 0x00, 0x0F, 0xFF, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x3F, 0xFC, - 0x00, 0x07, 0xFF, 0xC0, 0x01, 0xFD, 0xF8, 0x00, 0x3F, 0x3F, 0x80, 0x0F, - 0xE3, 0xF8, 0x03, 0xF8, 0x7F, 0xC1, 0xFF, 0x07, 0xFF, 0xFF, 0xC0, 0x7F, - 0xFF, 0xF0, 0x07, 0xFF, 0xFC, 0x00, 0x3F, 0xFE, 0x00, 0x01, 0xFF, 0x00, - 0x00, 0x7F, 0xF8, 0x0F, 0xFF, 0xF0, 0xFF, 0xFF, 0x8F, 0xFF, 0xFC, 0xFF, - 0xFF, 0xEF, 0xC0, 0xFE, 0xFC, 0x07, 0xFF, 0xC0, 0x3F, 0xFC, 0x03, 0xFF, - 0xC0, 0x3F, 0xFC, 0x03, 0xFF, 0xC0, 0x7F, 0xFC, 0x0F, 0xEF, 0xFF, 0xFE, - 0xFF, 0xFF, 0xCF, 0xFF, 0xF8, 0xFF, 0xFF, 0x0F, 0xFF, 0x80, 0xFC, 0x00, - 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, - 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x80, - 0x00, 0x3F, 0xFE, 0x00, 0x1F, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0x01, 0xFF, - 0xFF, 0xF0, 0x7F, 0xC1, 0xFF, 0x0F, 0xE0, 0x0F, 0xE3, 0xF8, 0x00, 0xFE, - 0x7E, 0x00, 0x0F, 0xDF, 0xC0, 0x01, 0xFB, 0xF0, 0x00, 0x1F, 0xFE, 0x00, - 0x03, 0xFF, 0xC0, 0x00, 0x7F, 0xF8, 0x00, 0x0F, 0xFF, 0x00, 0x01, 0xFF, - 0xE0, 0x00, 0x3F, 0xFC, 0x00, 0x07, 0xFF, 0xC0, 0x01, 0xFD, 0xF8, 0x00, - 0x3F, 0x3F, 0x80, 0x0F, 0xE7, 0xF8, 0x03, 0xF8, 0x7F, 0xC1, 0xFF, 0x07, - 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xF0, 0x07, 0xFF, 0xFC, 0x00, 0x7F, 0xFE, - 0x00, 0x01, 0xFF, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0x1F, 0xF0, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0xFF, - 0x00, 0x00, 0x03, 0xE0, 0x7F, 0xF8, 0x01, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, - 0x07, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0x1F, 0x81, 0xFE, 0x3F, 0x00, 0xFE, - 0x7E, 0x00, 0xFC, 0xFC, 0x01, 0xF9, 0xF8, 0x03, 0xF3, 0xF0, 0x0F, 0xE7, - 0xE0, 0x3F, 0x8F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFC, 0x3F, 0xFF, 0xF0, 0x7F, - 0xFF, 0x80, 0xFF, 0xFF, 0x01, 0xF8, 0xFF, 0x03, 0xF0, 0xFE, 0x07, 0xE0, - 0xFE, 0x0F, 0xC0, 0xFE, 0x1F, 0x81, 0xFE, 0x3F, 0x01, 0xFC, 0x7E, 0x01, - 0xFC, 0xFC, 0x03, 0xFD, 0xF8, 0x03, 0xFB, 0xF0, 0x03, 0xF8, 0x03, 0xFE, - 0x00, 0xFF, 0xFC, 0x3F, 0xFF, 0xE7, 0xFF, 0xFC, 0x7F, 0xFF, 0xCF, 0xE0, - 0x1C, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x0F, 0xF0, 0x00, 0x7F, - 0xC0, 0x07, 0xFF, 0x80, 0x3F, 0xFF, 0x01, 0xFF, 0xF8, 0x07, 0xFF, 0xC0, - 0x0F, 0xFE, 0x00, 0x1F, 0xF0, 0x00, 0x7F, 0x00, 0x03, 0xF0, 0x00, 0x3F, - 0x00, 0x03, 0xF7, 0x80, 0x7F, 0x7F, 0xFF, 0xE7, 0xFF, 0xFE, 0xFF, 0xFF, - 0xC7, 0xFF, 0xF8, 0x0F, 0xFC, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x03, 0xF0, 0x00, 0x0F, - 0xC0, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, - 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, - 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, - 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, - 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0xFF, - 0xF0, 0x03, 0xFF, 0xC0, 0x0F, 0xFF, 0x00, 0x3F, 0xFC, 0x00, 0xFF, 0xF0, - 0x03, 0xFF, 0xC0, 0x0F, 0xFF, 0x00, 0x3F, 0xFC, 0x00, 0xFF, 0xF0, 0x03, - 0xFF, 0xC0, 0x0F, 0xFF, 0x00, 0x3F, 0xFC, 0x00, 0xFF, 0xF0, 0x03, 0xFF, - 0xC0, 0x0F, 0xFF, 0x00, 0x3F, 0xFC, 0x00, 0xFF, 0xF0, 0x03, 0xFF, 0xC0, - 0x0F, 0xFF, 0x80, 0x7F, 0x7E, 0x01, 0xF9, 0xFE, 0x1F, 0xE7, 0xFF, 0xFF, - 0x8F, 0xFF, 0xFC, 0x1F, 0xFF, 0xE0, 0x3F, 0xFF, 0x00, 0x1F, 0xE0, 0x00, - 0xFE, 0x00, 0x0F, 0xEF, 0xC0, 0x01, 0xF9, 0xF8, 0x00, 0x3F, 0x3F, 0x80, - 0x0F, 0xE3, 0xF0, 0x01, 0xF8, 0x7E, 0x00, 0x3F, 0x07, 0xE0, 0x0F, 0xC0, - 0xFC, 0x01, 0xF8, 0x1F, 0x80, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, 0x3F, 0x01, - 0xF8, 0x07, 0xE0, 0x7E, 0x00, 0x7E, 0x0F, 0xC0, 0x0F, 0xC1, 0xF8, 0x00, - 0xFC, 0x7E, 0x00, 0x1F, 0x8F, 0xC0, 0x03, 0xF1, 0xF8, 0x00, 0x3F, 0x7E, - 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x7D, 0xF0, 0x00, 0x0F, 0xFE, 0x00, 0x01, - 0xFF, 0x80, 0x00, 0x1F, 0xF0, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x3F, 0x80, - 0x00, 0x07, 0xF0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x03, - 0xFF, 0xC0, 0x00, 0x00, 0x7F, 0x7E, 0x00, 0x00, 0x07, 0xE7, 0xE0, 0x1F, - 0x00, 0x7E, 0x7E, 0x03, 0xF8, 0x07, 0xE7, 0xE0, 0x3F, 0x80, 0x7E, 0x7E, - 0x03, 0xF8, 0x0F, 0xE3, 0xF0, 0x3F, 0xC0, 0xFC, 0x3F, 0x07, 0xFC, 0x0F, - 0xC3, 0xF0, 0x7F, 0xC0, 0xFC, 0x3F, 0x07, 0xFE, 0x0F, 0xC1, 0xF8, 0x7B, - 0xE1, 0xF8, 0x1F, 0x8F, 0xBE, 0x1F, 0x81, 0xF8, 0xFB, 0xF1, 0xF8, 0x1F, - 0x8F, 0x9F, 0x1F, 0x80, 0xFC, 0xF1, 0xF3, 0xF0, 0x0F, 0xDF, 0x1F, 0xBF, - 0x00, 0xFD, 0xF0, 0xFB, 0xF0, 0x07, 0xDF, 0x0F, 0xBE, 0x00, 0x7F, 0xE0, - 0xFF, 0xE0, 0x07, 0xFE, 0x07, 0xFE, 0x00, 0x7F, 0xE0, 0x7F, 0xE0, 0x03, - 0xFC, 0x07, 0xFC, 0x00, 0x3F, 0xC0, 0x3F, 0xC0, 0x03, 0xFC, 0x03, 0xFC, - 0x00, 0x1F, 0xC0, 0x3F, 0x80, 0x01, 0xF8, 0x01, 0xF8, 0x00, 0xFE, 0x00, - 0x1F, 0xDF, 0xC0, 0x0F, 0xE3, 0xF8, 0x07, 0xF0, 0xFF, 0x03, 0xFC, 0x1F, - 0xC0, 0xFE, 0x03, 0xF8, 0x7F, 0x00, 0x7F, 0x3F, 0x80, 0x1F, 0xCF, 0xE0, - 0x03, 0xFF, 0xF0, 0x00, 0x7F, 0xF8, 0x00, 0x1F, 0xFE, 0x00, 0x03, 0xFF, - 0x00, 0x00, 0x7F, 0x80, 0x00, 0x1F, 0xE0, 0x00, 0x07, 0xF8, 0x00, 0x03, - 0xFF, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x7F, 0xF8, 0x00, 0x3F, 0xFF, 0x00, - 0x1F, 0xCF, 0xE0, 0x0F, 0xE3, 0xF8, 0x03, 0xF8, 0x7F, 0x01, 0xFC, 0x0F, - 0xE0, 0xFE, 0x01, 0xFC, 0x3F, 0x80, 0x7F, 0x1F, 0xC0, 0x0F, 0xEF, 0xE0, - 0x01, 0xFC, 0xFE, 0x00, 0x1F, 0xDF, 0xC0, 0x0F, 0xE7, 0xF0, 0x03, 0xF8, - 0xFE, 0x01, 0xFC, 0x3F, 0x80, 0x7F, 0x07, 0xF0, 0x3F, 0x80, 0xFC, 0x1F, - 0xC0, 0x3F, 0x87, 0xF0, 0x07, 0xF3, 0xF8, 0x01, 0xFC, 0xFE, 0x00, 0x3F, - 0xFF, 0x00, 0x07, 0xFF, 0x80, 0x01, 0xFF, 0xE0, 0x00, 0x3F, 0xF0, 0x00, - 0x0F, 0xF8, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x0F, 0xC0, - 0x00, 0x03, 0xF0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x00, - 0x0F, 0xC0, 0x00, 0x03, 0xF0, 0x00, 0x7F, 0xFF, 0xFD, 0xFF, 0xFF, 0xF7, - 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFC, 0x00, 0x1F, 0xE0, 0x00, - 0x7F, 0x00, 0x03, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0xFE, 0x00, 0x07, 0xF8, - 0x00, 0x3F, 0xC0, 0x00, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x3F, 0xC0, 0x01, - 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x3F, 0x80, 0x01, 0xFE, 0x00, 0x07, 0xF0, - 0x00, 0x3F, 0x80, 0x01, 0xFE, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, - 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, - 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, - 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xC0, 0xFC, 0x00, 0x1F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x03, - 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, - 0xF0, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x01, - 0xF8, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x00, - 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x00, - 0xFC, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, - 0x7E, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, - 0x3F, 0x00, 0x07, 0xE0, 0x00, 0xFE, 0x00, 0x0F, 0xC0, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, - 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x83, - 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, - 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xC0, 0x00, 0xF8, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x00, 0x07, 0xFC, - 0x00, 0x7F, 0xF0, 0x03, 0xFF, 0x80, 0x3F, 0x7E, 0x01, 0xFB, 0xF0, 0x1F, - 0x8F, 0xC1, 0xFC, 0x7F, 0x0F, 0xC1, 0xF8, 0xFC, 0x07, 0xE7, 0xE0, 0x3F, - 0x7E, 0x00, 0xFC, 0xF0, 0x07, 0x81, 0x00, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x10, 0x1C, 0x1E, - 0x1F, 0x83, 0xE0, 0xF8, 0x3E, 0x0E, 0x02, 0x00, 0x0F, 0xF0, 0x1F, 0xFE, - 0x0F, 0xFF, 0x87, 0xFF, 0xE1, 0xFF, 0xF0, 0x81, 0xFC, 0x00, 0x7E, 0x00, - 0x3F, 0x0F, 0xFF, 0x9F, 0xFF, 0xDF, 0xFF, 0xEF, 0xFF, 0xFF, 0xE1, 0xFF, - 0xE0, 0xFF, 0xF0, 0x7F, 0xFC, 0x3F, 0xFF, 0xFF, 0xBF, 0xFF, 0xDF, 0xFF, - 0xE7, 0xFF, 0xF0, 0xFF, 0xC0, 0x1C, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, - 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x00, - 0xFC, 0x00, 0x1F, 0xBF, 0x03, 0xFF, 0xF8, 0x7F, 0xFF, 0x8F, 0xFF, 0xF9, - 0xFF, 0xFF, 0xBF, 0x87, 0xF7, 0xE0, 0x7F, 0xFC, 0x07, 0xFF, 0x80, 0xFF, - 0xF0, 0x1F, 0xFE, 0x03, 0xFF, 0xC0, 0x7F, 0xF8, 0x0F, 0xFF, 0x03, 0xFF, - 0xE0, 0x7E, 0xFC, 0x1F, 0xDF, 0xFF, 0xF3, 0xFF, 0xFE, 0x7F, 0xFF, 0x8F, - 0xFF, 0xC0, 0x3F, 0xE0, 0x00, 0x01, 0xFE, 0x03, 0xFF, 0xC3, 0xFF, 0xE3, - 0xFF, 0xE3, 0xFF, 0xF3, 0xFC, 0x09, 0xF8, 0x01, 0xFC, 0x00, 0xFC, 0x00, - 0x7E, 0x00, 0x3F, 0x00, 0x1F, 0x80, 0x0F, 0xC0, 0x07, 0xF0, 0x01, 0xF8, - 0x00, 0xFF, 0x02, 0x7F, 0xFF, 0x1F, 0xFF, 0xC7, 0xFF, 0xE1, 0xFF, 0xF0, - 0x1F, 0xE0, 0x00, 0x00, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, - 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, - 0x7E, 0xFC, 0x3F, 0xFF, 0x8F, 0xFF, 0xF3, 0xFF, 0xFE, 0xFF, 0xFF, 0xDF, - 0xC3, 0xFB, 0xF0, 0x3F, 0xFC, 0x07, 0xFF, 0x80, 0xFF, 0xF0, 0x1F, 0xFE, - 0x03, 0xFF, 0xC0, 0x7F, 0xF8, 0x0F, 0xFF, 0x81, 0xFB, 0xF0, 0x3F, 0x7F, - 0x07, 0xEF, 0xFF, 0xFC, 0xFF, 0xFF, 0x8F, 0xFF, 0xF0, 0xFF, 0xFE, 0x03, - 0xFE, 0x00, 0x01, 0xF8, 0x01, 0xFF, 0xC0, 0x7F, 0xFC, 0x1F, 0xFF, 0xC3, - 0xFF, 0xFC, 0xFE, 0x1F, 0x9F, 0x81, 0xFF, 0xE0, 0x3F, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x01, 0xF8, 0x00, 0x1F, - 0x80, 0x03, 0xFC, 0x04, 0x7F, 0xFF, 0x87, 0xFF, 0xF8, 0x7F, 0xFF, 0x07, - 0xFF, 0xE0, 0x1F, 0xE0, 0x07, 0xF0, 0x7F, 0xF3, 0xFF, 0xDF, 0xFE, 0x7F, - 0xFB, 0xF8, 0x2F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xFF, 0xEF, 0xFF, 0xBF, - 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, - 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, - 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x00, 0x03, 0xFE, 0x03, - 0xFF, 0xF1, 0xFF, 0xFC, 0xFF, 0xFF, 0x7F, 0xFF, 0xDF, 0xC3, 0xFF, 0xE0, - 0xFF, 0xF0, 0x3F, 0xFC, 0x0F, 0xFF, 0x03, 0xFF, 0xC0, 0xFF, 0xF0, 0x3F, - 0xFE, 0x0F, 0xFF, 0x87, 0xF7, 0xFF, 0xFD, 0xFF, 0xFF, 0x3F, 0xFF, 0xC7, - 0xFF, 0xF0, 0x7E, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x07, 0xF3, 0x03, - 0xF8, 0xFF, 0xFE, 0x7F, 0xFF, 0x1F, 0xFF, 0xC7, 0xFF, 0xC0, 0x3F, 0xC0, - 0x1C, 0x00, 0x7E, 0x00, 0x3F, 0x00, 0x1F, 0x80, 0x0F, 0xC0, 0x07, 0xE0, - 0x03, 0xF0, 0x01, 0xF8, 0x00, 0xFC, 0x00, 0x7F, 0xF8, 0x3F, 0xFF, 0x1F, - 0xFF, 0xCF, 0xFF, 0xF7, 0xFF, 0xFB, 0xF0, 0xFF, 0xF8, 0x3F, 0xFC, 0x1F, - 0xFE, 0x0F, 0xFF, 0x07, 0xFF, 0x83, 0xFF, 0xC1, 0xFF, 0xE0, 0xFF, 0xF0, - 0x7F, 0xF8, 0x3F, 0xFC, 0x1F, 0xFE, 0x0F, 0xFF, 0x07, 0xFF, 0x83, 0xFF, - 0xC1, 0xFF, 0xE0, 0xFC, 0x3C, 0x7E, 0x7E, 0xFF, 0x7E, 0x7E, 0x3C, 0x00, - 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, - 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x01, 0xE0, - 0x1F, 0x80, 0xFC, 0x0F, 0xF0, 0x3F, 0x01, 0xF8, 0x07, 0x80, 0x00, 0x00, - 0x00, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, 0x7E, - 0x03, 0xF0, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, - 0x7E, 0x03, 0xF0, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, - 0xC0, 0xFE, 0x7F, 0xE3, 0xFF, 0x3F, 0xF1, 0xFF, 0x0F, 0xE0, 0x00, 0x1C, - 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, - 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x83, 0xFF, 0xF0, - 0xFF, 0x7E, 0x3F, 0xCF, 0xC7, 0xF1, 0xF9, 0xFC, 0x3F, 0x7F, 0x87, 0xFF, - 0xE0, 0xFF, 0xF8, 0x1F, 0xFE, 0x03, 0xFF, 0x80, 0x7F, 0xF8, 0x0F, 0xFF, - 0x81, 0xFF, 0xF8, 0x3F, 0x7F, 0x07, 0xE7, 0xF0, 0xFC, 0x7F, 0x1F, 0x8F, - 0xE3, 0xF0, 0xFE, 0x7E, 0x1F, 0xEF, 0xC1, 0xFD, 0xF8, 0x1F, 0xC0, 0x1C, - 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, 0x7E, 0x3F, 0x1F, - 0x8F, 0xC7, 0xE3, 0xF1, 0xF8, 0xFC, 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, - 0xF1, 0xF8, 0xFE, 0x7F, 0xDF, 0xEF, 0xF3, 0xF0, 0x78, 0x1F, 0xF0, 0x7E, - 0x0F, 0xFF, 0xDF, 0xF8, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xFE, 0xFF, - 0xFF, 0xFF, 0xEF, 0xC3, 0xF8, 0x7F, 0xFC, 0x3F, 0x87, 0xFF, 0xC1, 0xF8, - 0x3F, 0xFC, 0x1F, 0x83, 0xFF, 0xC1, 0xF8, 0x3F, 0xFC, 0x1F, 0x83, 0xFF, - 0xC1, 0xF8, 0x3F, 0xFC, 0x1F, 0x83, 0xFF, 0xC1, 0xF8, 0x3F, 0xFC, 0x1F, - 0x83, 0xFF, 0xC1, 0xF8, 0x3F, 0xFC, 0x1F, 0x83, 0xFF, 0xC1, 0xF8, 0x3F, - 0xFC, 0x1F, 0x83, 0xFF, 0xC1, 0xF8, 0x3F, 0xFC, 0x1F, 0x83, 0xF0, 0x1F, - 0xF0, 0x7F, 0xFE, 0x3F, 0xFF, 0x9F, 0xFF, 0xEF, 0xFF, 0xF7, 0xE1, 0xFF, - 0xF0, 0x7F, 0xF8, 0x3F, 0xFC, 0x1F, 0xFE, 0x0F, 0xFF, 0x07, 0xFF, 0x83, - 0xFF, 0xC1, 0xFF, 0xE0, 0xFF, 0xF0, 0x7F, 0xF8, 0x3F, 0xFC, 0x1F, 0xFE, - 0x0F, 0xFF, 0x07, 0xFF, 0x83, 0xFF, 0xC1, 0xF8, 0x01, 0xF8, 0x00, 0x7F, - 0xE0, 0x1F, 0xFF, 0x83, 0xFF, 0xFC, 0x3F, 0xFF, 0xC7, 0xF0, 0xFE, 0x7E, - 0x07, 0xEF, 0xE0, 0x7F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xFC, 0x03, 0xFF, - 0xC0, 0x3F, 0xFC, 0x03, 0xFF, 0xC0, 0x7F, 0x7E, 0x07, 0xE7, 0xF0, 0xFE, - 0x3F, 0xFF, 0xE3, 0xFF, 0xFC, 0x1F, 0xFF, 0x80, 0xFF, 0xF0, 0x01, 0xF8, - 0x00, 0x1F, 0xF0, 0x1F, 0xFF, 0x83, 0xFF, 0xFC, 0x7F, 0xFF, 0xCF, 0xFF, - 0xF9, 0xF8, 0x3F, 0xBF, 0x03, 0xF7, 0xE0, 0x7F, 0xFC, 0x07, 0xFF, 0x80, - 0xFF, 0xF0, 0x1F, 0xFE, 0x03, 0xFF, 0xC0, 0x7F, 0xF8, 0x0F, 0xFF, 0x03, - 0xFF, 0xF0, 0xFE, 0xFF, 0xFF, 0xDF, 0xFF, 0xF3, 0xFF, 0xFC, 0x7F, 0xFF, - 0x0F, 0xDF, 0x81, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x00, 0xFC, 0x00, - 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x7F, - 0xFF, 0x1F, 0xFF, 0xF3, 0xFF, 0xFF, 0x3F, 0xFF, 0xF7, 0xF8, 0x3F, 0x7E, - 0x03, 0xFF, 0xE0, 0x3F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xFC, 0x03, 0xFF, - 0xC0, 0x3F, 0xFC, 0x03, 0xFF, 0xC0, 0x3F, 0xFE, 0x03, 0xF7, 0xF0, 0x7F, - 0x7F, 0xFF, 0xF3, 0xFF, 0xFF, 0x1F, 0xFF, 0xF0, 0xFF, 0xFF, 0x03, 0xFB, - 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, - 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x0F, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFE, 0xFF, 0xFB, 0xF0, 0x2F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, - 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, - 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x00, 0x07, 0xF8, 0x0F, 0xFE, 0x3F, - 0xFE, 0x3F, 0xFE, 0x7F, 0xFC, 0x7E, 0x04, 0x7E, 0x00, 0x7F, 0x00, 0x7F, - 0xF8, 0x7F, 0xFE, 0x3F, 0xFE, 0x1F, 0xFF, 0x07, 0xFF, 0x00, 0x7F, 0x00, - 0x3F, 0x70, 0x3F, 0x7F, 0xFF, 0x7F, 0xFE, 0x7F, 0xFE, 0xFF, 0xF8, 0x1F, - 0xE0, 0x1C, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, - 0xFF, 0xBF, 0xFE, 0xFF, 0xFB, 0xFF, 0xEF, 0xFF, 0xBF, 0x00, 0xFC, 0x03, - 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, - 0xFC, 0x03, 0xF8, 0x27, 0xFF, 0x9F, 0xFE, 0x3F, 0xFC, 0x7F, 0xF0, 0x7F, - 0x00, 0xFC, 0x1F, 0xFE, 0x0F, 0xFF, 0x07, 0xFF, 0x83, 0xFF, 0xC1, 0xFF, - 0xE0, 0xFF, 0xF0, 0x7F, 0xF8, 0x3F, 0xFC, 0x1F, 0xFE, 0x0F, 0xFF, 0x07, - 0xFF, 0x83, 0xFF, 0xC1, 0xFF, 0xE0, 0xFF, 0xF0, 0x7F, 0xFC, 0x3F, 0x7F, - 0xFF, 0xBF, 0xFF, 0xCF, 0xFF, 0xE3, 0xFF, 0xF0, 0x7F, 0xC0, 0xFC, 0x01, - 0xFF, 0xF0, 0x1F, 0xDF, 0x80, 0xFC, 0xFC, 0x07, 0xE7, 0xF0, 0x7F, 0x1F, - 0x83, 0xF0, 0xFC, 0x1F, 0x87, 0xE0, 0xFC, 0x3F, 0x8F, 0xC0, 0xFC, 0x7E, - 0x07, 0xE3, 0xF0, 0x3F, 0xBF, 0x00, 0xFD, 0xF8, 0x07, 0xEF, 0xC0, 0x1F, - 0xFC, 0x00, 0xFF, 0xE0, 0x07, 0xFF, 0x00, 0x1F, 0xF0, 0x00, 0xFF, 0x80, - 0x03, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0xFC, 0x0F, 0x80, 0xFF, 0xF0, 0x3E, - 0x03, 0xF7, 0xE0, 0xF8, 0x1F, 0x9F, 0x83, 0xF0, 0x7E, 0x7E, 0x0F, 0xC1, - 0xF8, 0xF8, 0x7F, 0x07, 0xC3, 0xF1, 0xFC, 0x3F, 0x0F, 0xC7, 0xF8, 0xFC, - 0x1F, 0x1F, 0xE3, 0xE0, 0x7C, 0xF7, 0x8F, 0x81, 0xFB, 0xDF, 0x7E, 0x07, - 0xEF, 0x7D, 0xF0, 0x0F, 0xBC, 0xF7, 0xC0, 0x3E, 0xE3, 0xDF, 0x00, 0xFF, - 0x8F, 0xF8, 0x01, 0xFE, 0x1F, 0xE0, 0x07, 0xF8, 0x7F, 0x80, 0x0F, 0xC1, - 0xFC, 0x00, 0x3F, 0x03, 0xF0, 0x00, 0xFC, 0x0F, 0xC0, 0x01, 0xF0, 0x3E, - 0x00, 0xFF, 0x03, 0xFD, 0xFC, 0x0F, 0xE3, 0xF8, 0x7F, 0x0F, 0xF3, 0xFC, - 0x1F, 0xCF, 0xE0, 0x3F, 0xFF, 0x00, 0x7F, 0xF8, 0x01, 0xFF, 0xE0, 0x03, - 0xFF, 0x00, 0x07, 0xF8, 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0x80, 0x03, 0xFF, - 0x00, 0x1F, 0xFE, 0x00, 0x7F, 0xF8, 0x03, 0xFF, 0xF0, 0x1F, 0xCF, 0xE0, - 0xFF, 0x3F, 0x83, 0xF8, 0x7F, 0x1F, 0xC0, 0xFE, 0xFF, 0x03, 0xFC, 0xFC, - 0x01, 0xFF, 0xF0, 0x1F, 0xDF, 0x80, 0xFC, 0xFC, 0x07, 0xE7, 0xF0, 0x7F, - 0x1F, 0x83, 0xF0, 0xFC, 0x1F, 0x87, 0xE0, 0xFC, 0x3F, 0x8F, 0xC0, 0xFC, - 0x7E, 0x07, 0xE3, 0xF0, 0x1F, 0xBF, 0x00, 0xFD, 0xF8, 0x07, 0xEF, 0xC0, - 0x1F, 0xFC, 0x00, 0xFF, 0xE0, 0x07, 0xFE, 0x00, 0x1F, 0xF0, 0x00, 0xFF, - 0x80, 0x03, 0xF8, 0x00, 0x1F, 0xC0, 0x01, 0xFC, 0x00, 0x1F, 0xE0, 0x0F, - 0xFE, 0x00, 0x7F, 0xF0, 0x07, 0xFF, 0x00, 0x3F, 0xF0, 0x00, 0xFE, 0x00, - 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC0, 0x1F, 0xE0, 0x0F, 0xF0, 0x07, 0xF8, 0x01, 0xFC, 0x00, 0xFF, 0x00, - 0x7F, 0x80, 0x3F, 0xC0, 0x1F, 0xE0, 0x07, 0xF8, 0x03, 0xFC, 0x01, 0xFE, - 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC0, 0x00, 0xF8, 0x3F, 0xC3, 0xFE, 0x1F, 0xF1, 0xFF, 0x8F, 0xE0, 0x7E, - 0x03, 0xF0, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, - 0x7E, 0x03, 0xF0, 0x3F, 0x87, 0xF8, 0x3F, 0x81, 0xFC, 0x0F, 0xF0, 0x7F, - 0x80, 0xFE, 0x03, 0xF0, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, - 0x0F, 0xC0, 0x7E, 0x03, 0xF0, 0x1F, 0xC0, 0xFF, 0xC3, 0xFE, 0x1F, 0xF0, - 0x7F, 0x80, 0x7C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF8, 0x07, 0xF8, 0x3F, - 0xE1, 0xFF, 0x0F, 0xFC, 0x0F, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, 0x7E, - 0x03, 0xF0, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xE0, - 0x3F, 0xC0, 0xFE, 0x07, 0xF0, 0x7F, 0x87, 0xFC, 0x3F, 0x81, 0xF8, 0x0F, - 0xC0, 0x7E, 0x03, 0xF0, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, - 0x1F, 0xC7, 0xFE, 0x3F, 0xE1, 0xFF, 0x0F, 0xF0, 0x7C, 0x00, 0x0F, 0x00, - 0xC3, 0xFC, 0x0F, 0x3F, 0xF1, 0xF7, 0xFF, 0xFE, 0x7F, 0xFF, 0xEF, 0x8F, - 0xFC, 0xF0, 0x3F, 0xC3, 0x00, 0xF0 }; - -const GFXglyph Ubuntu_Bold20pt7bGlyphs[] PROGMEM = { - { 0, 0, 0, 9, 0, 1 }, // 0x20 ' ' - { 0, 8, 27, 11, 2, -26 }, // 0x21 '!' - { 27, 15, 11, 18, 2, -29 }, // 0x22 '"' - { 48, 23, 27, 27, 2, -26 }, // 0x23 '#' - { 126, 19, 35, 22, 1, -29 }, // 0x24 '$' - { 210, 34, 27, 36, 1, -26 }, // 0x25 '%' - { 325, 27, 27, 28, 1, -26 }, // 0x26 '&' - { 417, 6, 11, 10, 2, -29 }, // 0x27 ''' - { 426, 11, 38, 14, 3, -30 }, // 0x28 '(' - { 479, 11, 38, 14, 0, -30 }, // 0x29 ')' - { 532, 17, 16, 20, 2, -26 }, // 0x2A '*' - { 566, 19, 19, 23, 2, -20 }, // 0x2B '+' - { 612, 8, 12, 9, 0, -5 }, // 0x2C ',' - { 624, 11, 5, 13, 1, -13 }, // 0x2D '-' - { 631, 7, 7, 9, 1, -5 }, // 0x2E '.' - { 638, 19, 38, 17, -1, -30 }, // 0x2F '/' - { 729, 20, 27, 22, 1, -26 }, // 0x30 '0' - { 797, 13, 27, 22, 3, -26 }, // 0x31 '1' - { 841, 19, 27, 22, 1, -26 }, // 0x32 '2' - { 906, 19, 27, 22, 1, -26 }, // 0x33 '3' - { 971, 20, 27, 22, 1, -26 }, // 0x34 '4' - { 1039, 19, 27, 22, 1, -26 }, // 0x35 '5' - { 1104, 20, 27, 22, 1, -26 }, // 0x36 '6' - { 1172, 18, 27, 22, 2, -26 }, // 0x37 '7' - { 1233, 19, 27, 22, 2, -26 }, // 0x38 '8' - { 1298, 19, 27, 22, 1, -26 }, // 0x39 '9' - { 1363, 7, 21, 9, 1, -19 }, // 0x3A ':' - { 1382, 8, 26, 9, 0, -19 }, // 0x3B ';' - { 1408, 19, 19, 22, 2, -20 }, // 0x3C '<' - { 1454, 18, 14, 22, 2, -17 }, // 0x3D '=' - { 1486, 19, 19, 22, 1, -20 }, // 0x3E '>' - { 1532, 16, 28, 18, 1, -27 }, // 0x3F '?' - { 1588, 34, 34, 38, 2, -27 }, // 0x40 '@' - { 1733, 27, 27, 27, 0, -26 }, // 0x41 'A' - { 1825, 21, 27, 26, 3, -26 }, // 0x42 'B' - { 1896, 22, 27, 25, 2, -26 }, // 0x43 'C' - { 1971, 24, 27, 29, 3, -26 }, // 0x44 'D' - { 2052, 20, 27, 24, 3, -26 }, // 0x45 'E' - { 2120, 18, 27, 22, 3, -26 }, // 0x46 'F' - { 2181, 22, 27, 27, 2, -26 }, // 0x47 'G' - { 2256, 23, 27, 29, 3, -26 }, // 0x48 'H' - { 2334, 6, 27, 12, 3, -26 }, // 0x49 'I' - { 2355, 18, 27, 21, 0, -26 }, // 0x4A 'J' - { 2416, 24, 27, 27, 3, -26 }, // 0x4B 'K' - { 2497, 18, 27, 22, 3, -26 }, // 0x4C 'L' - { 2558, 31, 27, 35, 2, -26 }, // 0x4D 'M' - { 2663, 23, 27, 29, 3, -26 }, // 0x4E 'N' - { 2741, 27, 27, 31, 2, -26 }, // 0x4F 'O' - { 2833, 20, 27, 25, 3, -26 }, // 0x50 'P' - { 2901, 27, 34, 31, 2, -26 }, // 0x51 'Q' - { 3016, 23, 27, 26, 3, -26 }, // 0x52 'R' - { 3094, 20, 27, 23, 1, -26 }, // 0x53 'S' - { 3162, 22, 27, 24, 1, -26 }, // 0x54 'T' - { 3237, 22, 27, 28, 3, -26 }, // 0x55 'U' - { 3312, 27, 27, 27, 0, -26 }, // 0x56 'V' - { 3404, 36, 27, 38, 1, -26 }, // 0x57 'W' - { 3526, 26, 27, 26, 0, -26 }, // 0x58 'X' - { 3614, 26, 27, 26, 0, -26 }, // 0x59 'Y' - { 3702, 22, 27, 24, 1, -26 }, // 0x5A 'Z' - { 3777, 11, 38, 14, 3, -30 }, // 0x5B '[' - { 3830, 19, 38, 17, -1, -30 }, // 0x5C '\' - { 3921, 11, 38, 14, 0, -30 }, // 0x5D ']' - { 3974, 21, 16, 23, 1, -26 }, // 0x5E '^' - { 4016, 20, 5, 20, 0, 3 }, // 0x5F '_' - { 4029, 9, 9, 11, 1, -30 }, // 0x60 '`' - { 4040, 17, 21, 22, 2, -20 }, // 0x61 'a' - { 4085, 19, 30, 24, 3, -29 }, // 0x62 'b' - { 4157, 17, 21, 20, 2, -20 }, // 0x63 'c' - { 4202, 19, 30, 24, 2, -29 }, // 0x64 'd' - { 4274, 19, 21, 23, 2, -20 }, // 0x65 'e' - { 4324, 14, 30, 17, 3, -29 }, // 0x66 'f' - { 4377, 18, 28, 23, 2, -20 }, // 0x67 'g' - { 4440, 17, 30, 23, 3, -29 }, // 0x68 'h' - { 4504, 8, 30, 12, 2, -29 }, // 0x69 'i' - { 4534, 13, 37, 10, -4, -29 }, // 0x6A 'j' - { 4595, 19, 30, 23, 3, -29 }, // 0x6B 'k' - { 4667, 9, 30, 13, 3, -29 }, // 0x6C 'l' - { 4701, 28, 21, 34, 3, -20 }, // 0x6D 'm' - { 4775, 17, 21, 23, 3, -20 }, // 0x6E 'n' - { 4820, 20, 21, 24, 2, -20 }, // 0x6F 'o' - { 4873, 19, 28, 24, 3, -20 }, // 0x70 'p' - { 4940, 20, 28, 24, 2, -20 }, // 0x71 'q' - { 5010, 14, 21, 17, 3, -20 }, // 0x72 'r' - { 5047, 16, 21, 19, 1, -20 }, // 0x73 's' - { 5089, 14, 27, 18, 3, -26 }, // 0x74 't' - { 5137, 17, 21, 23, 3, -20 }, // 0x75 'u' - { 5182, 21, 21, 21, 0, -20 }, // 0x76 'v' - { 5238, 30, 21, 30, 0, -20 }, // 0x77 'w' - { 5317, 22, 21, 22, 0, -20 }, // 0x78 'x' - { 5375, 21, 28, 21, 0, -20 }, // 0x79 'y' - { 5449, 18, 21, 20, 1, -20 }, // 0x7A 'z' - { 5497, 13, 38, 14, 1, -30 }, // 0x7B '{' - { 5559, 6, 38, 14, 4, -30 }, // 0x7C '|' - { 5588, 13, 38, 14, 0, -30 }, // 0x7D '}' - { 5650, 20, 8, 22, 1, -15 } }; // 0x7E '~' - -const GFXfont Ubuntu_Bold20pt7b PROGMEM = { - (uint8_t *)Ubuntu_Bold20pt7bBitmaps, - (GFXglyph *)Ubuntu_Bold20pt7bGlyphs, - 0x20, 0x7E, 45 }; - -// Approx. 6342 bytes diff --git a/lib/obp60task/Ubuntu_Bold32pt7b.h b/lib/obp60task/Ubuntu_Bold32pt7b.h deleted file mode 100644 index cda30db..0000000 --- a/lib/obp60task/Ubuntu_Bold32pt7b.h +++ /dev/null @@ -1,1340 +0,0 @@ -const uint8_t Ubuntu_Bold32pt7bBitmaps[] PROGMEM = { - 0x7F, 0xCF, 0xF9, 0xFF, 0x3F, 0xE7, 0xFC, 0xFF, 0x9F, 0xF3, 0xFE, 0x7F, - 0xCF, 0xF9, 0xFF, 0x3F, 0xE7, 0xFC, 0xFF, 0x9F, 0xF3, 0xFE, 0x7F, 0xCF, - 0xF9, 0xFF, 0x3F, 0xE7, 0xFC, 0x7F, 0x8F, 0xE1, 0xFC, 0x3F, 0x87, 0xF0, - 0xFE, 0x1F, 0xC3, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x07, 0xF1, 0xFF, - 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xF8, 0xFE, 0x0F, - 0x80, 0xFF, 0x83, 0xFF, 0xFF, 0x07, 0xFF, 0xFE, 0x0F, 0xFF, 0xFC, 0x1F, - 0xFF, 0xF8, 0x3F, 0xFF, 0xF0, 0x7F, 0xFF, 0xE0, 0xFF, 0xFF, 0xC1, 0xFF, - 0xFF, 0x83, 0xFF, 0xFF, 0x07, 0xFF, 0xFE, 0x0F, 0xFF, 0xFC, 0x1F, 0xFF, - 0xF0, 0x3F, 0xCF, 0xE0, 0x3F, 0x9F, 0xC0, 0x7F, 0x3F, 0x80, 0xFE, 0x7F, - 0x01, 0xFC, 0xFE, 0x03, 0xF9, 0xFC, 0x07, 0xF0, 0x00, 0x1F, 0xF0, 0x3F, - 0xE0, 0x00, 0x7F, 0xC0, 0xFF, 0x80, 0x01, 0xFF, 0x07, 0xFE, 0x00, 0x0F, - 0xF8, 0x1F, 0xF0, 0x00, 0x3F, 0xE0, 0x7F, 0xC0, 0x00, 0xFF, 0x81, 0xFF, - 0x00, 0x03, 0xFE, 0x07, 0xFC, 0x00, 0x0F, 0xF8, 0x3F, 0xF0, 0x00, 0x7F, - 0xE0, 0xFF, 0x80, 0x01, 0xFF, 0x03, 0xFE, 0x00, 0x07, 0xFC, 0x0F, 0xF8, - 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, 0xF8, - 0x1F, 0xF0, 0x00, 0x7F, 0xE0, 0xFF, 0x80, 0x01, 0xFF, 0x03, 0xFE, 0x00, - 0x07, 0xFC, 0x0F, 0xF8, 0x00, 0x1F, 0xF0, 0x3F, 0xE0, 0x00, 0x7F, 0xC0, - 0xFF, 0x80, 0x01, 0xFF, 0x07, 0xFE, 0x00, 0x0F, 0xF8, 0x1F, 0xF0, 0x0F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x1F, 0xF0, 0x3F, - 0xE0, 0x00, 0x7F, 0xC0, 0xFF, 0x80, 0x01, 0xFF, 0x07, 0xFE, 0x00, 0x0F, - 0xF8, 0x1F, 0xF0, 0x00, 0x3F, 0xE0, 0x7F, 0xC0, 0x00, 0xFF, 0x81, 0xFF, - 0x00, 0x03, 0xFE, 0x07, 0xFC, 0x00, 0x0F, 0xF8, 0x3F, 0xF0, 0x00, 0x7F, - 0xE0, 0xFF, 0x80, 0x01, 0xFF, 0x03, 0xFE, 0x00, 0x07, 0xFC, 0x0F, 0xF8, - 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x7F, 0x80, - 0x00, 0x00, 0xFF, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x03, 0xFC, 0x00, - 0x00, 0x07, 0xF8, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0xE0, - 0x0F, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x83, - 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0xFC, 0x3F, - 0xF8, 0x03, 0xF0, 0x7F, 0xE0, 0x00, 0x60, 0xFF, 0x80, 0x00, 0x01, 0xFF, - 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x07, 0xFF, - 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, - 0xE0, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x07, 0xFF, - 0xFC, 0x00, 0x03, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xFC, 0x00, 0x00, 0xFF, - 0xFC, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x1F, - 0xF8, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, - 0xE0, 0x00, 0x00, 0x7F, 0xCF, 0x00, 0x01, 0xFF, 0x9F, 0xE0, 0x07, 0xFF, - 0x3F, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xE7, - 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF8, 0x03, - 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, - 0x3F, 0xC0, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x01, - 0xFE, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x0F, - 0xF0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, - 0x00, 0x7F, 0xC0, 0x00, 0xFF, 0xFC, 0x00, 0x03, 0xFE, 0x00, 0x07, 0xFF, - 0xF8, 0x00, 0x0F, 0xF8, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x7F, 0xC0, 0x01, - 0xFF, 0xFF, 0xE0, 0x03, 0xFE, 0x00, 0x07, 0xF8, 0x7F, 0x80, 0x0F, 0xF8, - 0x00, 0x1F, 0xC0, 0xFE, 0x00, 0x7F, 0xC0, 0x00, 0xFF, 0x03, 0xFC, 0x01, - 0xFF, 0x00, 0x03, 0xF8, 0x07, 0xF0, 0x0F, 0xF8, 0x00, 0x0F, 0xE0, 0x1F, - 0xC0, 0x3F, 0xE0, 0x00, 0x3F, 0x80, 0x7F, 0x01, 0xFF, 0x00, 0x00, 0xFE, - 0x01, 0xFC, 0x0F, 0xF8, 0x00, 0x03, 0xF8, 0x07, 0xF0, 0x3F, 0xE0, 0x00, - 0x0F, 0xE0, 0x1F, 0xC1, 0xFF, 0x00, 0x00, 0x3F, 0xC0, 0xFF, 0x07, 0xFC, - 0x00, 0x00, 0x7F, 0x03, 0xF8, 0x3F, 0xE0, 0x00, 0x01, 0xFE, 0x1F, 0xE0, - 0xFF, 0x80, 0x00, 0x07, 0xFF, 0xFF, 0x87, 0xFC, 0x00, 0x00, 0x0F, 0xFF, - 0xFC, 0x3F, 0xF0, 0x00, 0x00, 0x1F, 0xFF, 0xE0, 0xFF, 0x80, 0x00, 0x00, - 0x3F, 0xFF, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x1F, 0xF0, 0x1F, - 0xE0, 0x00, 0x7F, 0x80, 0xFF, 0x81, 0xFF, 0xE0, 0x00, 0x00, 0x03, 0xFE, - 0x0F, 0xFF, 0xC0, 0x00, 0x00, 0x1F, 0xF0, 0x7F, 0xFF, 0x80, 0x00, 0x00, - 0xFF, 0xC3, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0xFE, 0x1F, 0xFF, 0xFE, 0x00, - 0x00, 0x1F, 0xF0, 0x7F, 0x87, 0xF8, 0x00, 0x00, 0x7F, 0xC1, 0xFC, 0x0F, - 0xE0, 0x00, 0x03, 0xFE, 0x0F, 0xF0, 0x3F, 0xC0, 0x00, 0x0F, 0xF8, 0x3F, - 0x80, 0x7F, 0x00, 0x00, 0x7F, 0xC0, 0xFE, 0x01, 0xFC, 0x00, 0x01, 0xFF, - 0x03, 0xF8, 0x07, 0xF0, 0x00, 0x0F, 0xF8, 0x0F, 0xE0, 0x1F, 0xC0, 0x00, - 0x7F, 0xC0, 0x3F, 0x80, 0x7F, 0x00, 0x01, 0xFF, 0x00, 0xFE, 0x01, 0xFC, - 0x00, 0x0F, 0xF8, 0x03, 0xFC, 0x0F, 0xF0, 0x00, 0x3F, 0xE0, 0x07, 0xF0, - 0x3F, 0x80, 0x01, 0xFF, 0x00, 0x1F, 0xE1, 0xFE, 0x00, 0x07, 0xFC, 0x00, - 0x7F, 0xFF, 0xF8, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, - 0x00, 0x01, 0xFF, 0xFE, 0x00, 0x07, 0xFC, 0x00, 0x03, 0xFF, 0xF0, 0x00, - 0x3F, 0xE0, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF8, - 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, - 0x1F, 0xFF, 0xE0, 0x00, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x00, 0x1F, 0xFF, - 0xFC, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0x80, - 0x00, 0x07, 0xFF, 0xFF, 0xE0, 0x00, 0x07, 0xFE, 0x3F, 0xF0, 0x00, 0x03, - 0xFE, 0x0F, 0xF8, 0x00, 0x01, 0xFF, 0x07, 0xFC, 0x00, 0x00, 0xFF, 0x83, - 0xFE, 0x00, 0x00, 0x7F, 0xC1, 0xFF, 0x00, 0x00, 0x3F, 0xE0, 0xFF, 0x80, - 0x00, 0x1F, 0xF8, 0xFF, 0x80, 0x00, 0x07, 0xFE, 0x7F, 0xC0, 0x00, 0x03, - 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x7F, 0xFF, - 0xE0, 0x00, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, - 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x1F, - 0xFF, 0xFC, 0x1F, 0x00, 0x1F, 0xFF, 0xFF, 0x0F, 0xF8, 0x0F, 0xFF, 0xFF, - 0xC7, 0xFC, 0x0F, 0xFC, 0xFF, 0xF3, 0xFE, 0x0F, 0xFC, 0x3F, 0xFC, 0xFE, - 0x07, 0xFC, 0x1F, 0xFF, 0x7F, 0x03, 0xFE, 0x07, 0xFF, 0xFF, 0x83, 0xFE, - 0x01, 0xFF, 0xFF, 0xC1, 0xFF, 0x00, 0x7F, 0xFF, 0xC0, 0xFF, 0x80, 0x1F, - 0xFF, 0xE0, 0x7F, 0xC0, 0x07, 0xFF, 0xF0, 0x3F, 0xE0, 0x03, 0xFF, 0xF0, - 0x1F, 0xF8, 0x00, 0xFF, 0xF8, 0x0F, 0xFE, 0x00, 0x3F, 0xFE, 0x03, 0xFF, - 0x80, 0x7F, 0xFF, 0x81, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, - 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, - 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xF1, 0xFF, 0xE0, 0x1F, - 0xFF, 0xE0, 0x7F, 0xF8, 0x01, 0xFF, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, - 0xF9, 0xFC, 0xFE, 0x7F, 0x3F, 0x9F, 0xC0, 0x00, 0x10, 0x00, 0x1C, 0x00, - 0x1F, 0x80, 0x1F, 0xE0, 0x0F, 0xF8, 0x0F, 0xF8, 0x0F, 0xFC, 0x07, 0xFC, - 0x07, 0xFC, 0x03, 0xFE, 0x03, 0xFF, 0x01, 0xFF, 0x01, 0xFF, 0x80, 0xFF, - 0x80, 0x7F, 0xC0, 0x7F, 0xC0, 0x3F, 0xE0, 0x1F, 0xF0, 0x1F, 0xF8, 0x0F, - 0xF8, 0x07, 0xFC, 0x03, 0xFE, 0x01, 0xFF, 0x01, 0xFF, 0x80, 0xFF, 0x80, - 0x7F, 0xC0, 0x3F, 0xE0, 0x1F, 0xF0, 0x0F, 0xF8, 0x07, 0xFC, 0x03, 0xFE, - 0x01, 0xFF, 0x00, 0xFF, 0x80, 0x7F, 0xC0, 0x3F, 0xE0, 0x1F, 0xF0, 0x0F, - 0xF8, 0x07, 0xFC, 0x01, 0xFF, 0x00, 0xFF, 0x80, 0x7F, 0xC0, 0x3F, 0xE0, - 0x1F, 0xF8, 0x07, 0xFC, 0x03, 0xFE, 0x01, 0xFF, 0x00, 0x7F, 0xC0, 0x3F, - 0xE0, 0x1F, 0xF8, 0x07, 0xFC, 0x03, 0xFE, 0x00, 0xFF, 0x80, 0x7F, 0xC0, - 0x1F, 0xF0, 0x0F, 0xFC, 0x03, 0xFE, 0x00, 0xFF, 0x80, 0x7F, 0x80, 0x1F, - 0x80, 0x07, 0x00, 0x01, 0x00, 0x04, 0x00, 0x07, 0x00, 0x0F, 0xC0, 0x0F, - 0xF0, 0x0F, 0xF8, 0x03, 0xFE, 0x01, 0xFF, 0x80, 0x7F, 0xC0, 0x3F, 0xF0, - 0x0F, 0xF8, 0x07, 0xFE, 0x01, 0xFF, 0x00, 0xFF, 0xC0, 0x3F, 0xE0, 0x1F, - 0xF0, 0x0F, 0xFC, 0x03, 0xFE, 0x01, 0xFF, 0x00, 0xFF, 0xC0, 0x3F, 0xE0, - 0x1F, 0xF0, 0x0F, 0xF8, 0x07, 0xFC, 0x03, 0xFE, 0x00, 0xFF, 0x80, 0x7F, - 0xC0, 0x3F, 0xE0, 0x1F, 0xF0, 0x0F, 0xF8, 0x07, 0xFC, 0x03, 0xFE, 0x01, - 0xFF, 0x00, 0xFF, 0x80, 0x7F, 0xC0, 0x3F, 0xE0, 0x1F, 0xF0, 0x0F, 0xF8, - 0x0F, 0xFC, 0x07, 0xFC, 0x03, 0xFE, 0x01, 0xFF, 0x00, 0xFF, 0x80, 0xFF, - 0xC0, 0x7F, 0xC0, 0x3F, 0xE0, 0x3F, 0xF0, 0x1F, 0xF0, 0x0F, 0xF8, 0x0F, - 0xFC, 0x07, 0xFC, 0x07, 0xFE, 0x03, 0xFE, 0x01, 0xFF, 0x01, 0xFF, 0x01, - 0xFF, 0x80, 0xFF, 0x80, 0xFF, 0x80, 0x3F, 0xC0, 0x0F, 0xC0, 0x01, 0xC0, - 0x00, 0x40, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x0F, 0xF8, 0x00, 0x01, 0xFF, - 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x07, 0xF8, 0x00, 0x60, 0x7F, 0x03, 0x0F, - 0x0F, 0xE1, 0xE1, 0xF9, 0xF8, 0xFC, 0x7F, 0x9F, 0x7F, 0xCF, 0xFF, 0xFF, - 0xF9, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, - 0xFF, 0xFE, 0x00, 0x1F, 0xF0, 0x00, 0x07, 0xFF, 0x00, 0x01, 0xFB, 0xF0, - 0x00, 0xFF, 0x7F, 0x80, 0x3F, 0xEF, 0xF8, 0x07, 0xFD, 0xFF, 0x01, 0xFF, - 0x1F, 0xF0, 0x0F, 0xE3, 0xF8, 0x00, 0xF8, 0x3E, 0x00, 0x07, 0x07, 0x00, - 0x00, 0x40, 0x40, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, - 0x00, 0x7F, 0xC0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0x00, 0x00, - 0x03, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, - 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x07, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0x80, 0x00, 0x01, 0xFF, - 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xF8, - 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, - 0x00, 0x00, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x03, 0xFE, 0x00, - 0x00, 0x1F, 0xF1, 0xFF, 0x1F, 0xF1, 0xFF, 0x1F, 0xF1, 0xFF, 0x1F, 0xF1, - 0xFF, 0x1F, 0xE3, 0xFE, 0x3F, 0xE3, 0xFE, 0x3F, 0xC3, 0xFC, 0x7F, 0xC7, - 0xF8, 0x7F, 0x8F, 0xF0, 0x7F, 0x00, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xC0, 0x0F, 0x03, 0xFC, 0x7F, 0xEF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFE, 0x3F, 0xC0, 0xF0, 0x00, 0x00, - 0x07, 0xFE, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, - 0x7F, 0xE0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x07, - 0xFE, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x7F, - 0xE0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x07, 0xFE, - 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x7F, 0xE0, - 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x07, 0xFC, 0x00, - 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x7F, 0xC0, 0x00, - 0x00, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, - 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x01, - 0xFF, 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x1F, - 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x01, 0xFF, - 0x80, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x1F, 0xF8, - 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x01, 0xFF, 0x80, - 0x00, 0x03, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x1F, 0xF8, 0x00, - 0x00, 0x3F, 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0x80, 0x00, - 0x03, 0xFE, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, - 0x3F, 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x03, - 0xFE, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, - 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x03, 0xFE, - 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, - 0x7F, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0xC0, 0x03, - 0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xF0, 0x1F, - 0xFF, 0xFF, 0xF8, 0x1F, 0xFC, 0x3F, 0xF8, 0x3F, 0xF0, 0x0F, 0xFC, 0x3F, - 0xE0, 0x07, 0xFC, 0x3F, 0xE0, 0x07, 0xFC, 0x7F, 0xC0, 0x03, 0xFE, 0x7F, - 0xC0, 0x03, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, 0xFF, - 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, - 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, - 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, - 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, - 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0x7F, 0xC0, 0x03, 0xFE, 0x7F, - 0xC0, 0x03, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, 0x3F, - 0xE0, 0x07, 0xFC, 0x3F, 0xE0, 0x07, 0xFC, 0x3F, 0xF0, 0x0F, 0xFC, 0x1F, - 0xFC, 0x3F, 0xF8, 0x1F, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xF0, 0x07, - 0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0xC0, 0x00, - 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, - 0x03, 0xF8, 0x00, 0x3F, 0xC0, 0x03, 0xFE, 0x00, 0x3F, 0xF0, 0x07, 0xFF, - 0x80, 0xFF, 0xFC, 0x1F, 0xFF, 0xE3, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, - 0xFF, 0xDF, 0xFF, 0xFE, 0xFF, 0xFF, 0xF7, 0xFE, 0xFF, 0x9F, 0xC7, 0xFC, - 0xF8, 0x3F, 0xE2, 0x01, 0xFF, 0x00, 0x0F, 0xF8, 0x00, 0x7F, 0xC0, 0x03, - 0xFE, 0x00, 0x1F, 0xF0, 0x00, 0xFF, 0x80, 0x07, 0xFC, 0x00, 0x3F, 0xE0, - 0x01, 0xFF, 0x00, 0x0F, 0xF8, 0x00, 0x7F, 0xC0, 0x03, 0xFE, 0x00, 0x1F, - 0xF0, 0x00, 0xFF, 0x80, 0x07, 0xFC, 0x00, 0x3F, 0xE0, 0x01, 0xFF, 0x00, - 0x0F, 0xF8, 0x00, 0x7F, 0xC0, 0x03, 0xFE, 0x00, 0x1F, 0xF0, 0x00, 0xFF, - 0x80, 0x07, 0xFC, 0x00, 0x3F, 0xE0, 0x01, 0xFF, 0x00, 0x0F, 0xF8, 0x00, - 0x7F, 0xC0, 0x03, 0xFE, 0x00, 0x1F, 0xF0, 0x00, 0x3F, 0xF0, 0x00, 0x03, - 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, - 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, - 0xFF, 0xFC, 0x3F, 0xF0, 0x3F, 0xF8, 0x3F, 0x00, 0x1F, 0xF8, 0x78, 0x00, - 0x3F, 0xF0, 0x60, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, - 0xFF, 0x80, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x0F, - 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x03, 0xFF, - 0x80, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0xFF, 0xF0, - 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x3F, 0xFC, 0x00, - 0x01, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x1F, 0xFF, 0x00, 0x00, - 0x7F, 0xFC, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x0F, - 0xFF, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x01, 0xFF, - 0xC0, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, - 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, - 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, - 0xFF, 0xE0, 0x00, 0x7F, 0xC0, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, - 0xE0, 0x0F, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, - 0x03, 0xFF, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, 0xF8, 0x1F, 0xC0, 0xFF, 0xE0, - 0x38, 0x00, 0xFF, 0xC0, 0x80, 0x03, 0xFF, 0x00, 0x00, 0x07, 0xFC, 0x00, - 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x01, 0xFF, 0x00, 0x00, - 0x0F, 0xFC, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x03, 0xFF, 0x80, 0x0F, 0xFF, - 0xFC, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0x00, 0x03, 0xFF, 0xF8, - 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xE0, - 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x07, 0xFE, 0x00, - 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x7F, 0xC0, 0x00, - 0x01, 0xFF, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, - 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0x30, 0x00, 0x1F, 0xF9, 0xF8, 0x01, 0xFF, - 0xE7, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xE3, - 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0xC0, 0x1F, - 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF0, 0x00, - 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x1F, 0xFE, 0x00, - 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x1F, 0xFF, 0xC0, - 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x0F, 0xFF, 0xF8, - 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x07, 0xFD, 0xFF, - 0x00, 0x07, 0xFC, 0xFF, 0x80, 0x07, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, 0x3F, - 0xE0, 0x03, 0xFE, 0x1F, 0xF0, 0x03, 0xFE, 0x0F, 0xF8, 0x01, 0xFF, 0x07, - 0xFC, 0x01, 0xFF, 0x03, 0xFE, 0x00, 0xFF, 0x01, 0xFF, 0x00, 0xFF, 0x00, - 0xFF, 0x80, 0xFF, 0x80, 0x7F, 0xC0, 0x7F, 0x80, 0x3F, 0xE0, 0x7F, 0xC0, - 0x1F, 0xF0, 0x3F, 0xC0, 0x0F, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x03, 0xFE, 0x00, - 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xC0, - 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x0F, 0xF8, - 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x07, 0xFF, 0xFF, - 0xF0, 0x1F, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFC, - 0x07, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0x01, - 0xFF, 0xFF, 0xFC, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0xFF, - 0x80, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xE0, - 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x0F, 0xFF, 0x00, - 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0xE0, - 0x1F, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xFF, 0x07, - 0xFF, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0xE0, 0x00, - 0x03, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, - 0x1F, 0xF0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x07, - 0xFC, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0xFF, 0xC8, 0x00, 0x07, 0xFE, - 0x7E, 0x00, 0x7F, 0xF9, 0xFF, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0xFF, 0x1F, - 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, - 0xFF, 0xE0, 0x0F, 0xFF, 0xFE, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x00, - 0x03, 0xF8, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x07, - 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0xFF, - 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xF8, 0x03, 0xFF, 0xFE, 0x00, 0x07, 0xFF, - 0xE0, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x1F, 0xF8, - 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, - 0x00, 0x00, 0x7F, 0xCF, 0xF8, 0x00, 0x7F, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, - 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, - 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xC0, - 0x1F, 0xFE, 0xFF, 0x80, 0x07, 0xFE, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0x80, - 0x03, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, - 0x01, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0x7F, 0xC0, 0x01, 0xFF, 0x7F, 0xC0, - 0x03, 0xFF, 0x7F, 0xE0, 0x03, 0xFE, 0x3F, 0xF0, 0x07, 0xFE, 0x3F, 0xF8, - 0x1F, 0xFE, 0x3F, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, - 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xE0, 0x01, 0xFF, - 0xFF, 0x80, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0xFF, 0xC0, - 0x00, 0x07, 0xFE, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0xFF, 0xC0, 0x00, - 0x03, 0xFE, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x03, - 0xFE, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x01, 0xFF, - 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x01, 0xFF, 0x80, - 0x00, 0x07, 0xFC, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0xFF, 0x80, 0x00, - 0x03, 0xFE, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x01, - 0xFF, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0xFF, - 0x80, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x7F, 0xC0, - 0x00, 0x01, 0xFF, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x1F, 0xF0, 0x00, - 0x00, 0x7F, 0xC0, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, - 0x3F, 0xE0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, - 0x7F, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0xE0, 0x0F, - 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xFC, 0x3F, - 0xFF, 0xFF, 0xFC, 0x3F, 0xF8, 0x1F, 0xFC, 0x7F, 0xE0, 0x07, 0xFE, 0x7F, - 0xE0, 0x07, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, 0x7F, - 0xC0, 0x03, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, 0x7F, 0xE0, 0x07, 0xFC, 0x3F, - 0xF0, 0x07, 0xFC, 0x3F, 0xFC, 0x1F, 0xF8, 0x1F, 0xFF, 0x3F, 0xF8, 0x1F, - 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0x80, 0x03, - 0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xF8, 0x1F, - 0xFF, 0xFF, 0xFC, 0x3F, 0xF0, 0x7F, 0xFC, 0x3F, 0xE0, 0x1F, 0xFE, 0x7F, - 0xC0, 0x07, 0xFE, 0x7F, 0xC0, 0x03, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, - 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, - 0x80, 0x01, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xE0, 0x07, 0xFE, 0x7F, - 0xF8, 0x1F, 0xFE, 0x7F, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xFC, 0x3F, - 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xF0, 0x03, - 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, - 0x1F, 0xE0, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0x3F, - 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF, - 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xF8, 0x7F, 0xF8, 0x3F, 0xF8, 0xFF, 0xC0, - 0x3F, 0xF1, 0xFF, 0x00, 0x3F, 0xF7, 0xFE, 0x00, 0x3F, 0xEF, 0xF8, 0x00, - 0x7F, 0xDF, 0xF0, 0x00, 0xFF, 0xBF, 0xE0, 0x00, 0xFF, 0xFF, 0xC0, 0x01, - 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0xFF, 0x00, 0x0F, - 0xFF, 0xFF, 0x00, 0x1F, 0xF7, 0xFF, 0x80, 0x7F, 0xEF, 0xFF, 0xFF, 0xFF, - 0xCF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFE, - 0x1F, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xE0, - 0x03, 0xFE, 0x7F, 0xC0, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x03, 0xFE, 0x00, - 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0xFF, 0xE0, 0x00, - 0x03, 0xFF, 0xC0, 0x00, 0x1F, 0xFF, 0x00, 0x03, 0xFF, 0xFC, 0x01, 0xFF, - 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, - 0xFC, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x7F, 0xF0, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x0F, 0x03, 0xFC, 0x7F, 0xEF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFE, 0x3F, 0xC0, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0F, 0x03, 0xFC, 0x7F, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFE, 0x3F, 0xC0, 0xF0, 0x07, 0x80, 0xFF, - 0x0F, 0xFC, 0xFF, 0xF7, 0xFF, 0xBF, 0xFD, 0xFF, 0xEF, 0xFF, 0x7F, 0xF9, - 0xFF, 0x87, 0xF8, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFE, - 0x1F, 0xF0, 0xFF, 0x87, 0xFC, 0x3F, 0xE1, 0xFF, 0x0F, 0xF8, 0x7F, 0xC3, - 0xFC, 0x3F, 0xE1, 0xFF, 0x0F, 0xF8, 0x7F, 0x83, 0xFC, 0x3F, 0xE1, 0xFE, - 0x0F, 0xF0, 0xFF, 0x03, 0xF8, 0x01, 0x80, 0x00, 0x00, 0x00, 0x20, 0x00, - 0x00, 0x0F, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x3F, - 0xFF, 0x00, 0x0F, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, - 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xC1, 0xFF, - 0xFF, 0xF0, 0x0F, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0x80, 0x03, 0xFF, 0xE0, - 0x00, 0x1F, 0xF8, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x07, 0xFF, 0xF8, 0x00, - 0x3F, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xF0, 0x7F, - 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0x00, 0x7F, - 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFC, 0x00, 0x00, 0xFF, - 0xE0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x80, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x20, - 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0xFF, 0xE0, - 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0xC0, - 0x1F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0xFF, 0xC1, - 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0x80, 0x03, - 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0x00, 0x00, 0xFF, - 0xF8, 0x00, 0x3F, 0xFF, 0xC0, 0x0F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xF0, - 0x7F, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, - 0xFF, 0xC0, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0x80, - 0x00, 0xFF, 0xE0, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, - 0x80, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x03, 0xFF, 0xFC, 0x07, 0xFF, - 0xFF, 0xC3, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xE7, - 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFE, 0x3F, 0x01, 0xFF, 0xCE, 0x00, 0x3F, - 0xF0, 0x00, 0x07, 0xFC, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x7F, 0xC0, 0x00, - 0x1F, 0xF0, 0x00, 0x0F, 0xF8, 0x00, 0x07, 0xFE, 0x00, 0x03, 0xFF, 0x00, - 0x01, 0xFF, 0xC0, 0x00, 0xFF, 0xE0, 0x00, 0x7F, 0xF0, 0x00, 0x3F, 0xF8, - 0x00, 0x1F, 0xFC, 0x00, 0x07, 0xFE, 0x00, 0x03, 0xFF, 0x00, 0x00, 0xFF, - 0x80, 0x00, 0x7F, 0xC0, 0x00, 0x1F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x01, - 0xFE, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x07, 0xF8, - 0x00, 0x03, 0xFF, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x7F, 0xF8, 0x00, 0x1F, - 0xFE, 0x00, 0x07, 0xFF, 0x80, 0x01, 0xFF, 0xE0, 0x00, 0x7F, 0xF8, 0x00, - 0x0F, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x00, - 0x00, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x07, 0xFF, 0xFF, - 0xFF, 0xFF, 0x80, 0x00, 0x1F, 0xFF, 0x80, 0x1F, 0xFF, 0x80, 0x00, 0x7F, - 0xF8, 0x00, 0x03, 0xFF, 0xC0, 0x01, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0x80, - 0x07, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x1F, 0xF0, 0x00, 0x00, 0x00, - 0xFF, 0x80, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0xFF, 0x80, 0xFF, 0x00, 0x0F, - 0xFC, 0x00, 0xFF, 0x03, 0xFC, 0x00, 0xFF, 0xFF, 0x80, 0xFF, 0x07, 0xF8, - 0x03, 0xFF, 0xFF, 0xC0, 0xFE, 0x1F, 0xE0, 0x1F, 0xFF, 0xFF, 0x81, 0xFE, - 0x3F, 0xC0, 0x7F, 0xFF, 0xFF, 0x01, 0xFC, 0x7F, 0x01, 0xFF, 0xFF, 0xFE, - 0x03, 0xF9, 0xFE, 0x07, 0xFF, 0xFF, 0xFC, 0x07, 0xF3, 0xF8, 0x0F, 0xFE, - 0x07, 0xF8, 0x07, 0xF7, 0xF0, 0x3F, 0xF8, 0x0F, 0xF0, 0x0F, 0xEF, 0xE0, - 0x7F, 0xE0, 0x1F, 0xE0, 0x1F, 0xFF, 0x80, 0xFF, 0x80, 0x3F, 0xC0, 0x3F, - 0xFF, 0x03, 0xFF, 0x00, 0x7F, 0x80, 0x7F, 0xFE, 0x07, 0xFC, 0x00, 0xFF, - 0x00, 0xFF, 0xFC, 0x0F, 0xF8, 0x01, 0xFE, 0x01, 0xFF, 0xF8, 0x1F, 0xF0, - 0x03, 0xFC, 0x03, 0xFF, 0xF0, 0x3F, 0xE0, 0x07, 0xF8, 0x07, 0xFF, 0xE0, - 0x7F, 0xC0, 0x0F, 0xF0, 0x0F, 0xFF, 0xC0, 0xFF, 0x80, 0x1F, 0xE0, 0x1F, - 0xFF, 0x81, 0xFF, 0x00, 0x3F, 0xC0, 0x7F, 0x7F, 0x03, 0xFE, 0x00, 0x7F, - 0x80, 0xFE, 0xFE, 0x03, 0xFE, 0x00, 0xFF, 0x01, 0xFD, 0xFC, 0x07, 0xFC, - 0x01, 0xFE, 0x07, 0xF9, 0xFC, 0x0F, 0xFC, 0x03, 0xFC, 0x0F, 0xE3, 0xF8, - 0x0F, 0xFE, 0x07, 0xF8, 0x3F, 0xC7, 0xF0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, - 0x0F, 0xF0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0xE0, 0x3F, 0xFF, 0xFF, - 0xFF, 0xF8, 0x1F, 0xE0, 0x3F, 0xFF, 0xFF, 0xFF, 0xE0, 0x3F, 0xC0, 0x1F, - 0xFF, 0xFF, 0xFF, 0x80, 0x3F, 0xC0, 0x1F, 0xFF, 0xBF, 0xFC, 0x00, 0x7F, - 0xC0, 0x07, 0xF8, 0x1F, 0xE0, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFE, 0x00, 0x1E, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFC, 0x00, - 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, - 0xF0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x00, - 0x07, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x0F, - 0xFE, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xFF, - 0x00, 0x00, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x80, - 0x00, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xC0, 0x00, - 0x00, 0x07, 0xFB, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0xBF, 0xE0, 0x00, 0x00, - 0x0F, 0xFB, 0xFE, 0x00, 0x00, 0x01, 0xFF, 0x1F, 0xF0, 0x00, 0x00, 0x1F, - 0xF1, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xE0, - 0xFF, 0x80, 0x00, 0x03, 0xFE, 0x0F, 0xF8, 0x00, 0x00, 0x7F, 0xC0, 0x7F, - 0xC0, 0x00, 0x07, 0xFC, 0x07, 0xFC, 0x00, 0x00, 0x7F, 0xC0, 0x3F, 0xE0, - 0x00, 0x0F, 0xF8, 0x03, 0xFE, 0x00, 0x00, 0xFF, 0x80, 0x3F, 0xF0, 0x00, - 0x1F, 0xF8, 0x01, 0xFF, 0x00, 0x01, 0xFF, 0x00, 0x1F, 0xF0, 0x00, 0x1F, - 0xF0, 0x01, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, - 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xFF, - 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0xE0, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, - 0x1F, 0xF8, 0x00, 0x01, 0xFF, 0x01, 0xFF, 0x80, 0x00, 0x1F, 0xF8, 0x1F, - 0xF0, 0x00, 0x00, 0xFF, 0x83, 0xFF, 0x00, 0x00, 0x0F, 0xFC, 0x3F, 0xE0, - 0x00, 0x00, 0xFF, 0xC3, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x7F, 0xE0, 0x00, - 0x00, 0x7F, 0xE7, 0xFC, 0x00, 0x00, 0x07, 0xFE, 0x7F, 0xC0, 0x00, 0x00, - 0x3F, 0xEF, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0x07, 0xFF, 0xF0, 0x00, 0x3F, - 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xFF, 0xC0, - 0xFF, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, - 0xE3, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xC0, 0x1F, 0xFF, 0x3F, 0xF0, 0x01, - 0xFF, 0xCF, 0xFC, 0x00, 0x3F, 0xF3, 0xFF, 0x00, 0x0F, 0xFC, 0xFF, 0xC0, - 0x03, 0xFF, 0x3F, 0xF0, 0x00, 0xFF, 0xCF, 0xFC, 0x00, 0x3F, 0xF3, 0xFF, - 0x00, 0x1F, 0xF8, 0xFF, 0xC0, 0x1F, 0xFE, 0x3F, 0xFF, 0xFF, 0xFF, 0x0F, - 0xFF, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0xF0, - 0x3F, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, - 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xF0, 0x03, 0xFF, 0xEF, 0xFC, 0x00, - 0x3F, 0xFB, 0xFF, 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xF0, - 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x03, 0xFF, 0xFF, - 0xC0, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x1F, 0xFF, - 0xFF, 0x00, 0x0F, 0xFE, 0xFF, 0xC0, 0x1F, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, - 0xEF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, - 0xFC, 0x3F, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, - 0xFE, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF0, 0x00, - 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x07, 0xFF, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, - 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, - 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xE0, 0x1F, - 0xC0, 0x7F, 0xF8, 0x00, 0x0E, 0x07, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xF8, - 0x00, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x01, - 0xFF, 0xC0, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, - 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x01, 0xFF, - 0x80, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, - 0x03, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0xFF, 0xC0, - 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x01, - 0xFF, 0x80, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, - 0x00, 0x01, 0xFF, 0x80, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x7F, - 0xF0, 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, - 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x0E, 0x07, 0xFF, - 0xF0, 0x07, 0xF0, 0x3F, 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFE, - 0x03, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, - 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xF8, 0x00, - 0x00, 0x7F, 0xFC, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xFF, 0xFC, - 0x00, 0x0F, 0xFF, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, - 0xFF, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xFF, - 0xF8, 0x3F, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xC0, 0x1F, 0xFF, 0xC3, 0xFF, - 0x00, 0x0F, 0xFF, 0x8F, 0xFC, 0x00, 0x1F, 0xFE, 0x3F, 0xF0, 0x00, 0x3F, - 0xFC, 0xFF, 0xC0, 0x00, 0x7F, 0xF3, 0xFF, 0x00, 0x00, 0xFF, 0xEF, 0xFC, - 0x00, 0x03, 0xFF, 0xBF, 0xF0, 0x00, 0x07, 0xFE, 0xFF, 0xC0, 0x00, 0x1F, - 0xFB, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x00, 0xFF, 0xFF, 0xF0, - 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x00, 0x3F, - 0xFF, 0xFC, 0x00, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xFF, 0xC0, - 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0xFF, - 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x00, 0x1F, 0xFB, 0xFF, 0x00, - 0x00, 0x7F, 0xEF, 0xFC, 0x00, 0x03, 0xFF, 0xBF, 0xF0, 0x00, 0x0F, 0xFE, - 0xFF, 0xC0, 0x00, 0x7F, 0xF3, 0xFF, 0x00, 0x03, 0xFF, 0xCF, 0xFC, 0x00, - 0x1F, 0xFE, 0x3F, 0xF0, 0x01, 0xFF, 0xF8, 0xFF, 0xC0, 0x1F, 0xFF, 0xC3, - 0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, - 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xFF, 0xC0, 0x0F, - 0xFF, 0xFF, 0xFC, 0x00, 0x3F, 0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0xE0, - 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, - 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, - 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFE, 0xFF, 0xC0, 0x00, - 0x01, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, - 0x0F, 0xFC, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, - 0x7F, 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xC3, - 0xFF, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFE, 0x1F, - 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, 0xF0, 0xFF, - 0xFF, 0xFF, 0xE1, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x07, 0xFE, - 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, - 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0x80, - 0x00, 0x03, 0xFF, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, - 0x00, 0x07, 0xFE, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x01, 0xFF, 0x80, 0x00, - 0x0F, 0xFC, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x1F, - 0xF8, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x3F, 0xFF, - 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, - 0xF3, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xE7, - 0xFF, 0xFF, 0xFF, 0x3F, 0xF0, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x0F, 0xFC, - 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x1F, 0xF8, 0x00, - 0x00, 0xFF, 0xC0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x01, - 0xFF, 0x80, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x03, 0xFF, - 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x07, 0xFE, 0x00, - 0x00, 0x3F, 0xF0, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0xFF, - 0xE0, 0x00, 0x00, 0x7F, 0xFF, 0xE0, 0x00, 0x1F, 0xFF, 0xFF, 0x80, 0x07, - 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xFF, 0xFC, - 0x03, 0xFF, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xC0, - 0x1F, 0x81, 0xFF, 0xF0, 0x00, 0x38, 0x1F, 0xFC, 0x00, 0x00, 0x03, 0xFF, - 0x80, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, - 0x7F, 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, - 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x0F, 0xFC, - 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x00, - 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, - 0x3F, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFC, - 0x00, 0x03, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, 0xF7, 0xFE, 0x00, 0x03, 0xFF, - 0x7F, 0xE0, 0x00, 0x3F, 0xF7, 0xFF, 0x00, 0x03, 0xFF, 0x7F, 0xF0, 0x00, - 0x3F, 0xF3, 0xFF, 0x80, 0x03, 0xFF, 0x3F, 0xF8, 0x00, 0x3F, 0xF1, 0xFF, - 0xC0, 0x03, 0xFF, 0x1F, 0xFF, 0x00, 0x3F, 0xF0, 0xFF, 0xFC, 0x03, 0xFF, - 0x0F, 0xFF, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, - 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xF0, 0x03, - 0xFF, 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0x80, - 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, - 0x3F, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFC, - 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x03, 0xFF, - 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, - 0x3F, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFC, - 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x03, 0xFF, - 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, - 0x3F, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFC, - 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x03, 0xFF, - 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, - 0x3F, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFC, - 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x03, 0xFF, - 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, - 0x3F, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x0F, 0xFC, 0x00, 0x01, 0xFF, 0x80, - 0x00, 0x3F, 0xF0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x1F, - 0xF8, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x0F, 0xFC, 0x00, - 0x01, 0xFF, 0x80, 0x00, 0x3F, 0xF0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0xFF, - 0xC0, 0x00, 0x1F, 0xF8, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x7F, 0xE0, 0x00, - 0x0F, 0xFC, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x3F, 0xF0, 0x00, 0x07, 0xFE, - 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x1F, 0xF8, 0x00, 0x03, 0xFF, 0x00, 0x00, - 0x7F, 0xE0, 0x00, 0x0F, 0xFC, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x3F, 0xF0, - 0x00, 0x07, 0xFE, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x1F, 0xF8, 0x00, 0x03, - 0xFF, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x1F, 0xFC, 0x40, 0x03, 0xFF, 0x8C, - 0x00, 0xFF, 0xE3, 0xF0, 0x3F, 0xFC, 0x7F, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, - 0xE3, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xC1, 0xFF, - 0xFF, 0xF0, 0x07, 0xFF, 0xF8, 0x00, 0x1F, 0xF8, 0x00, 0xFF, 0xC0, 0x00, - 0xFF, 0xF7, 0xFE, 0x00, 0x0F, 0xFF, 0x3F, 0xF0, 0x00, 0xFF, 0xF1, 0xFF, - 0x80, 0x0F, 0xFF, 0x0F, 0xFC, 0x00, 0xFF, 0xF0, 0x7F, 0xE0, 0x07, 0xFF, - 0x03, 0xFF, 0x00, 0x7F, 0xF0, 0x1F, 0xF8, 0x07, 0xFF, 0x00, 0xFF, 0xC0, - 0x7F, 0xF8, 0x07, 0xFE, 0x07, 0xFF, 0x80, 0x3F, 0xF0, 0x7F, 0xF8, 0x01, - 0xFF, 0x87, 0xFF, 0x80, 0x0F, 0xFC, 0x7F, 0xF8, 0x00, 0x7F, 0xE7, 0xFF, - 0x80, 0x03, 0xFF, 0x3F, 0xF8, 0x00, 0x1F, 0xFB, 0xFF, 0xC0, 0x00, 0xFF, - 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, - 0x01, 0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0x00, 0x7F, 0xFF, - 0xF0, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x1F, 0xFF, 0xFF, 0x00, 0x00, - 0xFF, 0xFF, 0xFC, 0x00, 0x07, 0xFE, 0xFF, 0xF0, 0x00, 0x3F, 0xF3, 0xFF, - 0xC0, 0x01, 0xFF, 0x8F, 0xFF, 0x00, 0x0F, 0xFC, 0x3F, 0xFC, 0x00, 0x7F, - 0xE0, 0xFF, 0xF0, 0x03, 0xFF, 0x03, 0xFF, 0x80, 0x1F, 0xF8, 0x0F, 0xFE, - 0x00, 0xFF, 0xC0, 0x7F, 0xF8, 0x07, 0xFE, 0x01, 0xFF, 0xE0, 0x3F, 0xF0, - 0x07, 0xFF, 0x01, 0xFF, 0x80, 0x3F, 0xFC, 0x0F, 0xFC, 0x00, 0xFF, 0xF0, - 0x7F, 0xE0, 0x03, 0xFF, 0xC3, 0xFF, 0x00, 0x1F, 0xFE, 0x1F, 0xF8, 0x00, - 0x7F, 0xF8, 0xFF, 0xC0, 0x01, 0xFF, 0xE7, 0xFE, 0x00, 0x07, 0xFF, 0x3F, - 0xF0, 0x00, 0x1F, 0xFD, 0xFF, 0x80, 0x00, 0xFF, 0xF0, 0xFF, 0xC0, 0x00, - 0x07, 0xFE, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x0F, - 0xFC, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x1F, 0xF8, - 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x3F, 0xF0, 0x00, - 0x01, 0xFF, 0x80, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x03, - 0xFF, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x07, 0xFE, - 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x0F, 0xFC, 0x00, - 0x00, 0x7F, 0xE0, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, - 0xFF, 0xC0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x01, 0xFF, - 0x80, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x03, 0xFF, 0x00, - 0x00, 0x1F, 0xF8, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x07, 0xFE, 0x00, 0x00, - 0x3F, 0xF0, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF0, 0x1F, 0xFC, 0x00, 0x00, 0x0F, 0xFC, 0x0F, 0xFE, 0x00, 0x00, 0x0F, - 0xFE, 0x07, 0xFF, 0x80, 0x00, 0x07, 0xFF, 0x03, 0xFF, 0xC0, 0x00, 0x07, - 0xFF, 0x83, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xC1, 0xFF, 0xF8, 0x00, 0x03, - 0xFF, 0xF0, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xF8, 0x7F, 0xFF, 0x00, 0x01, - 0xFF, 0xFC, 0x3F, 0xFF, 0x80, 0x00, 0xFF, 0xFE, 0x1F, 0xFF, 0xE0, 0x00, - 0x7F, 0xFF, 0x0F, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0x87, 0xFF, 0xFC, 0x00, - 0x3F, 0xFF, 0xC3, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xE1, 0xFF, 0xFF, 0x00, - 0x1F, 0xFF, 0xF0, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0xF8, 0x7F, 0xDF, 0xE0, - 0x0F, 0xF7, 0xFC, 0x7F, 0xEF, 0xF8, 0x0F, 0xFB, 0xFF, 0x3F, 0xF3, 0xFC, - 0x07, 0xF9, 0xFF, 0x9F, 0xF9, 0xFE, 0x03, 0xFC, 0xFF, 0xCF, 0xFC, 0xFF, - 0x83, 0xFE, 0x7F, 0xE7, 0xFE, 0x3F, 0xC1, 0xFE, 0x3F, 0xF3, 0xFF, 0x1F, - 0xF1, 0xFF, 0x1F, 0xF9, 0xFF, 0x87, 0xF8, 0xFF, 0x0F, 0xFC, 0xFF, 0xC3, - 0xFC, 0x7F, 0x87, 0xFE, 0x7F, 0xE1, 0xFF, 0x7F, 0x83, 0xFF, 0x3F, 0xF0, - 0x7F, 0xBF, 0xC1, 0xFF, 0x9F, 0xF8, 0x3F, 0xFF, 0xE0, 0xFF, 0xCF, 0xFC, - 0x0F, 0xFF, 0xE0, 0x7F, 0xE7, 0xFE, 0x07, 0xFF, 0xF0, 0x3F, 0xF3, 0xFF, - 0x03, 0xFF, 0xF0, 0x1F, 0xF9, 0xFF, 0x00, 0xFF, 0xF8, 0x0F, 0xFC, 0xFF, - 0x80, 0x7F, 0xF8, 0x03, 0xFE, 0x7F, 0xC0, 0x1F, 0xFC, 0x01, 0xFF, 0x7F, - 0xE0, 0x0F, 0xFE, 0x00, 0xFF, 0xFF, 0xF0, 0x07, 0xFE, 0x00, 0x7F, 0xFF, - 0xF8, 0x01, 0xFF, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0xFF, 0x00, 0x1F, 0xFF, - 0xFE, 0x00, 0x3F, 0x80, 0x0F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x07, 0xFF, - 0xFF, 0x80, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x01, 0xFF, - 0xFF, 0xE0, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x7F, - 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0xFF, 0x80, 0x00, 0x0F, 0xFF, - 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xF8, 0x00, - 0x03, 0xFF, 0xFF, 0xF0, 0x00, 0x0F, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, - 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xFF, 0x00, - 0x0F, 0xFF, 0xFF, 0xFC, 0x00, 0x3F, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, - 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xFF, 0x80, - 0x3F, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, - 0xDF, 0xF8, 0x0F, 0xFF, 0xFF, 0x3F, 0xF0, 0x3F, 0xFF, 0xFC, 0x7F, 0xE0, - 0xFF, 0xFF, 0xF0, 0xFF, 0xC3, 0xFF, 0xFF, 0xC3, 0xFF, 0x0F, 0xFF, 0xFF, - 0x07, 0xFE, 0x3F, 0xFF, 0xFC, 0x0F, 0xFC, 0xFF, 0xFF, 0xF0, 0x1F, 0xF3, - 0xFF, 0xFF, 0xC0, 0x7F, 0xEF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFC, - 0x01, 0xFF, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, - 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xFF, 0xF0, - 0x00, 0xFF, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0xFF, 0x00, 0x07, 0xFF, - 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x00, 0x3F, 0xFF, 0xFF, 0xC0, - 0x00, 0x7F, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFC, 0x00, 0x03, 0xFF, - 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x00, 0x1F, 0xFF, 0xFF, 0x00, - 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0x01, 0xFF, - 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x00, - 0x1F, 0xFF, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0xFF, - 0xFF, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, - 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xE0, 0x7F, - 0xFF, 0x00, 0xFF, 0xF0, 0x00, 0xFF, 0xF0, 0x1F, 0xFE, 0x00, 0x07, 0xFF, - 0x83, 0xFF, 0xC0, 0x00, 0x3F, 0xFC, 0x3F, 0xF8, 0x00, 0x01, 0xFF, 0xC3, - 0xFF, 0x00, 0x00, 0x0F, 0xFC, 0x7F, 0xF0, 0x00, 0x00, 0xFF, 0xE7, 0xFE, - 0x00, 0x00, 0x07, 0xFE, 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xEF, 0xFE, 0x00, - 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, - 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x03, - 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xFF, - 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFF, - 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xE0, - 0x00, 0x00, 0x7F, 0xF7, 0xFE, 0x00, 0x00, 0x07, 0xFE, 0x7F, 0xE0, 0x00, - 0x00, 0x7F, 0xE7, 0xFF, 0x00, 0x00, 0x0F, 0xFE, 0x3F, 0xF0, 0x00, 0x00, - 0xFF, 0xC3, 0xFF, 0x80, 0x00, 0x1F, 0xFC, 0x3F, 0xFC, 0x00, 0x03, 0xFF, - 0xC1, 0xFF, 0xE0, 0x00, 0x7F, 0xF8, 0x1F, 0xFF, 0x00, 0x0F, 0xFF, 0x80, - 0xFF, 0xFC, 0x03, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x3F, - 0xFF, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, - 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0x00, 0x01, 0xFF, 0xFF, - 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x07, 0xFE, 0x00, - 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x3F, 0xFF, 0xFF, - 0xF0, 0x1F, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, - 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xC0, - 0x3F, 0xFF, 0x7F, 0xE0, 0x03, 0xFF, 0xBF, 0xF0, 0x00, 0xFF, 0xFF, 0xF8, - 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xFF, - 0x00, 0x07, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, - 0xE0, 0x01, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xEF, - 0xFC, 0x03, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0xF9, - 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, 0xF8, - 0x3F, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0x00, - 0x07, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x00, - 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x3F, 0xF0, 0x00, - 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x07, 0xFE, 0x00, - 0x00, 0x03, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x00, 0xFF, 0xC0, - 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x1F, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0xFF, - 0xE0, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0xFF, 0xFE, - 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0x80, - 0x03, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xE0, 0x0F, - 0xFF, 0xE0, 0x7F, 0xFF, 0x00, 0xFF, 0xF0, 0x00, 0xFF, 0xF0, 0x1F, 0xFE, - 0x00, 0x07, 0xFF, 0x81, 0xFF, 0xC0, 0x00, 0x3F, 0xFC, 0x3F, 0xF8, 0x00, - 0x01, 0xFF, 0xC3, 0xFF, 0x00, 0x00, 0x0F, 0xFC, 0x7F, 0xF0, 0x00, 0x00, - 0xFF, 0xE7, 0xFE, 0x00, 0x00, 0x07, 0xFE, 0x7F, 0xE0, 0x00, 0x00, 0x7F, - 0xEF, 0xFE, 0x00, 0x00, 0x07, 0xFE, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, - 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFC, - 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, - 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, - 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x03, - 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x7F, 0xF7, 0xFE, 0x00, 0x00, 0x07, 0xFE, - 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xE7, 0xFF, 0x00, 0x00, 0x0F, 0xFE, 0x7F, - 0xF0, 0x00, 0x00, 0xFF, 0xE3, 0xFF, 0x80, 0x00, 0x1F, 0xFC, 0x3F, 0xFC, - 0x00, 0x03, 0xFF, 0xC1, 0xFF, 0xE0, 0x00, 0x7F, 0xF8, 0x1F, 0xFF, 0x00, - 0x0F, 0xFF, 0x80, 0xFF, 0xFC, 0x03, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xFF, - 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xFF, 0xF8, - 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0x00, - 0x03, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x0F, 0xFF, 0xFE, 0x00, 0x00, 0x00, - 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x01, - 0xFF, 0x80, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x00, 0x01, 0xFF, - 0xFF, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xFF, - 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xF0, - 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x7E, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xFF, - 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, - 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0xFE, - 0x0F, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xC0, 0x3F, 0xFF, 0x0F, 0xFC, 0x00, - 0x7F, 0xF0, 0xFF, 0xC0, 0x03, 0xFF, 0x8F, 0xFC, 0x00, 0x1F, 0xF8, 0xFF, - 0xC0, 0x01, 0xFF, 0x8F, 0xFC, 0x00, 0x1F, 0xF8, 0xFF, 0xC0, 0x01, 0xFF, - 0x8F, 0xFC, 0x00, 0x1F, 0xF8, 0xFF, 0xC0, 0x01, 0xFF, 0x8F, 0xFC, 0x00, - 0x3F, 0xF8, 0xFF, 0xC0, 0x07, 0xFF, 0x0F, 0xFC, 0x03, 0xFF, 0xF0, 0xFF, - 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0xFC, - 0x0F, 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, - 0xFC, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, - 0xC1, 0xFF, 0xC0, 0x0F, 0xFC, 0x0F, 0xFE, 0x00, 0xFF, 0xC0, 0x7F, 0xF0, - 0x0F, 0xFC, 0x03, 0xFF, 0x00, 0xFF, 0xC0, 0x3F, 0xF8, 0x0F, 0xFC, 0x01, - 0xFF, 0xC0, 0xFF, 0xC0, 0x0F, 0xFC, 0x0F, 0xFC, 0x00, 0xFF, 0xE0, 0xFF, - 0xC0, 0x07, 0xFF, 0x0F, 0xFC, 0x00, 0x3F, 0xF0, 0xFF, 0xC0, 0x03, 0xFF, - 0x8F, 0xFC, 0x00, 0x1F, 0xFC, 0xFF, 0xC0, 0x01, 0xFF, 0xCF, 0xFC, 0x00, - 0x0F, 0xFE, 0xFF, 0xC0, 0x00, 0x7F, 0xEF, 0xFC, 0x00, 0x07, 0xFF, 0x00, - 0x0F, 0xFE, 0x00, 0x00, 0x7F, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0xF8, 0x07, - 0xFF, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xF8, 0x1F, - 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0xF0, 0x3F, 0xFC, 0x03, 0xF0, 0x7F, - 0xF0, 0x00, 0x70, 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x7F, - 0xE0, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x7F, - 0xF8, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x3F, 0xFF, 0x80, 0x00, 0x3F, - 0xFF, 0xE0, 0x00, 0x1F, 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0xFF, 0x00, 0x0F, - 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xF8, 0x00, - 0xFF, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFE, 0x00, - 0x00, 0xFF, 0xFE, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0x00, - 0x00, 0x07, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0x00, - 0x00, 0x03, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0x3C, - 0x00, 0x07, 0xFF, 0x3F, 0x80, 0x1F, 0xFE, 0x3F, 0xFF, 0xFF, 0xFE, 0x7F, - 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, - 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFF, 0x00, 0x00, - 0x7F, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, - 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x07, 0xFE, - 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, - 0x7F, 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, - 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x07, 0xFE, - 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, - 0x7F, 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, - 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x07, 0xFE, - 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, - 0x7F, 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, - 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x07, 0xFE, - 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, - 0x7F, 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, - 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0xFF, 0xC0, 0x00, - 0x7F, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0xE0, - 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, - 0xF0, 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x7F, - 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, - 0x3F, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xF0, - 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, - 0xF8, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, - 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xF0, 0x00, - 0x1F, 0xFF, 0xFE, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0xF8, - 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, - 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x1F, - 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0xFF, 0xE0, 0x00, 0xFF, 0xCF, 0xFC, 0x00, - 0x1F, 0xF9, 0xFF, 0xC0, 0x07, 0xFF, 0x3F, 0xFC, 0x01, 0xFF, 0xE3, 0xFF, - 0xC0, 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xC0, - 0x7F, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xFF, - 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x00, 0xFF, - 0xE0, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xF7, 0xFC, 0x00, 0x00, 0x03, - 0xFE, 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xE7, 0xFE, 0x00, 0x00, 0x07, 0xFE, - 0x3F, 0xE0, 0x00, 0x00, 0x7F, 0xC3, 0xFF, 0x00, 0x00, 0x0F, 0xFC, 0x1F, - 0xF0, 0x00, 0x00, 0xFF, 0x81, 0xFF, 0x80, 0x00, 0x0F, 0xF8, 0x0F, 0xF8, - 0x00, 0x01, 0xFF, 0x80, 0xFF, 0x80, 0x00, 0x1F, 0xF0, 0x0F, 0xFC, 0x00, - 0x01, 0xFF, 0x00, 0x7F, 0xC0, 0x00, 0x3F, 0xE0, 0x07, 0xFE, 0x00, 0x03, - 0xFE, 0x00, 0x3F, 0xE0, 0x00, 0x7F, 0xE0, 0x03, 0xFE, 0x00, 0x07, 0xFC, - 0x00, 0x3F, 0xF0, 0x00, 0x7F, 0xC0, 0x01, 0xFF, 0x00, 0x0F, 0xFC, 0x00, - 0x1F, 0xF8, 0x00, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0x0F, 0xF8, 0x00, 0x0F, - 0xF8, 0x01, 0xFF, 0x00, 0x00, 0x7F, 0xC0, 0x1F, 0xF0, 0x00, 0x07, 0xFC, - 0x03, 0xFF, 0x00, 0x00, 0x7F, 0xE0, 0x3F, 0xE0, 0x00, 0x03, 0xFE, 0x03, - 0xFE, 0x00, 0x00, 0x3F, 0xE0, 0x7F, 0xE0, 0x00, 0x01, 0xFF, 0x07, 0xFC, - 0x00, 0x00, 0x1F, 0xF0, 0x7F, 0xC0, 0x00, 0x01, 0xFF, 0x8F, 0xF8, 0x00, - 0x00, 0x0F, 0xF8, 0xFF, 0x80, 0x00, 0x00, 0xFF, 0x8F, 0xF8, 0x00, 0x00, - 0x07, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0xDF, 0xF0, 0x00, 0x00, 0x03, - 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x00, 0x03, 0xFF, - 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xC0, 0x00, 0x00, 0x01, 0xFF, 0xFC, - 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0xFF, 0xF8, 0x00, - 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, - 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x00, - 0x03, 0xFE, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, - 0xF0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF7, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0xF9, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFE, 0x7F, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0x9F, 0xF0, 0x00, 0x1F, 0xF0, 0x00, 0x3F, 0xE3, - 0xFE, 0x00, 0x07, 0xFC, 0x00, 0x1F, 0xF8, 0xFF, 0x80, 0x01, 0xFF, 0x80, - 0x07, 0xFC, 0x3F, 0xE0, 0x00, 0x7F, 0xE0, 0x01, 0xFF, 0x0F, 0xF8, 0x00, - 0x3F, 0xF8, 0x00, 0x7F, 0xC1, 0xFF, 0x00, 0x0F, 0xFE, 0x00, 0x3F, 0xF0, - 0x7F, 0xC0, 0x03, 0xFF, 0xC0, 0x0F, 0xF8, 0x1F, 0xF0, 0x01, 0xFF, 0xF0, - 0x03, 0xFE, 0x03, 0xFC, 0x00, 0x7F, 0xFC, 0x00, 0xFF, 0x80, 0xFF, 0x80, - 0x1F, 0xFF, 0x80, 0x3F, 0xE0, 0x3F, 0xE0, 0x07, 0xFF, 0xE0, 0x1F, 0xF0, - 0x0F, 0xF8, 0x03, 0xFF, 0xF8, 0x07, 0xFC, 0x01, 0xFE, 0x00, 0xFF, 0xFE, - 0x01, 0xFF, 0x00, 0x7F, 0xC0, 0x3F, 0xBF, 0xC0, 0x7F, 0xC0, 0x1F, 0xF0, - 0x1F, 0xEF, 0xF0, 0x1F, 0xE0, 0x03, 0xFC, 0x07, 0xFB, 0xFC, 0x0F, 0xF8, - 0x00, 0xFF, 0x81, 0xFC, 0xFF, 0x83, 0xFE, 0x00, 0x3F, 0xE0, 0xFF, 0x1F, - 0xE0, 0xFF, 0x00, 0x07, 0xF8, 0x3F, 0xC7, 0xF8, 0x3F, 0xC0, 0x01, 0xFE, - 0x0F, 0xF1, 0xFF, 0x1F, 0xF0, 0x00, 0x7F, 0xC7, 0xF8, 0x3F, 0xC7, 0xFC, - 0x00, 0x1F, 0xF1, 0xFE, 0x0F, 0xF1, 0xFE, 0x00, 0x03, 0xFC, 0x7F, 0x83, - 0xFC, 0xFF, 0x80, 0x00, 0xFF, 0xBF, 0xC0, 0xFF, 0xBF, 0xE0, 0x00, 0x3F, - 0xEF, 0xF0, 0x1F, 0xEF, 0xF0, 0x00, 0x07, 0xFB, 0xFC, 0x07, 0xFB, 0xFC, - 0x00, 0x01, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0x80, - 0x3F, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xE0, 0x0F, 0xFF, 0xE0, 0x00, 0x03, - 0xFF, 0xF8, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0xFF, 0xFE, - 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x07, 0xFF, 0xC0, - 0x07, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xE0, 0x01, 0xFF, 0xF0, 0x00, 0x00, - 0x3F, 0xF8, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x0F, 0xFE, - 0x00, 0x00, 0x01, 0xFF, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xC0, - 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x1F, 0xF0, 0x00, 0x7F, - 0xF0, 0x00, 0x07, 0xFF, 0x1F, 0xF8, 0x00, 0x07, 0xFF, 0x07, 0xFE, 0x00, - 0x03, 0xFF, 0x03, 0xFF, 0x80, 0x03, 0xFF, 0x80, 0xFF, 0xC0, 0x03, 0xFF, - 0x80, 0x3F, 0xF0, 0x01, 0xFF, 0x80, 0x1F, 0xFC, 0x01, 0xFF, 0xC0, 0x07, - 0xFE, 0x01, 0xFF, 0xC0, 0x01, 0xFF, 0x80, 0xFF, 0xC0, 0x00, 0xFF, 0xE0, - 0xFF, 0xE0, 0x00, 0x3F, 0xF8, 0xFF, 0xE0, 0x00, 0x0F, 0xFC, 0x7F, 0xE0, - 0x00, 0x07, 0xFF, 0x7F, 0xF0, 0x00, 0x01, 0xFF, 0xFF, 0xF0, 0x00, 0x00, - 0x7F, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x00, 0x0F, 0xFF, - 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x01, 0xFF, 0xFC, 0x00, - 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, - 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, - 0xC0, 0x00, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0x00, 0x07, 0xFF, 0xFC, 0x00, - 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x80, 0x00, 0x03, - 0xFF, 0xFF, 0xE0, 0x00, 0x01, 0xFF, 0xBF, 0xF0, 0x00, 0x01, 0xFF, 0x8F, - 0xFC, 0x00, 0x01, 0xFF, 0xC3, 0xFF, 0x00, 0x00, 0xFF, 0xC0, 0xFF, 0x80, - 0x00, 0xFF, 0xC0, 0x7F, 0xE0, 0x00, 0xFF, 0xE0, 0x1F, 0xF8, 0x00, 0x7F, - 0xE0, 0x07, 0xFC, 0x00, 0x7F, 0xE0, 0x03, 0xFF, 0x00, 0x7F, 0xF0, 0x00, - 0xFF, 0xC0, 0x3F, 0xF0, 0x00, 0x7F, 0xE0, 0x3F, 0xF8, 0x00, 0x1F, 0xF8, - 0x3F, 0xF8, 0x00, 0x07, 0xFE, 0x1F, 0xF8, 0x00, 0x03, 0xFF, 0x1F, 0xFC, - 0x00, 0x00, 0xFF, 0xDF, 0xFC, 0x00, 0x00, 0x7F, 0xF0, 0xFF, 0xC0, 0x00, - 0x01, 0xFF, 0xDF, 0xF8, 0x00, 0x00, 0x7F, 0xE7, 0xFF, 0x00, 0x00, 0x3F, - 0xF8, 0xFF, 0xC0, 0x00, 0x0F, 0xFC, 0x3F, 0xF8, 0x00, 0x07, 0xFF, 0x07, - 0xFE, 0x00, 0x01, 0xFF, 0x81, 0xFF, 0xC0, 0x00, 0xFF, 0xE0, 0x3F, 0xF0, - 0x00, 0x3F, 0xF0, 0x07, 0xFE, 0x00, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x0F, - 0xFE, 0x00, 0x3F, 0xF0, 0x03, 0xFF, 0x00, 0x0F, 0xFE, 0x01, 0xFF, 0xC0, - 0x01, 0xFF, 0x80, 0x7F, 0xE0, 0x00, 0x7F, 0xF0, 0x3F, 0xF8, 0x00, 0x0F, - 0xFC, 0x1F, 0xFC, 0x00, 0x01, 0xFF, 0x87, 0xFE, 0x00, 0x00, 0x7F, 0xF3, - 0xFF, 0x80, 0x00, 0x0F, 0xFD, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0xFF, 0xF0, - 0x00, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0x00, - 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0x00, 0x0F, - 0xFF, 0xC0, 0x00, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x7F, 0xF8, - 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, - 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x00, - 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, - 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x0F, 0xFC, 0x00, - 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, - 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x03, - 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xF0, - 0x00, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, - 0x7F, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, - 0xF9, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, - 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, - 0x07, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, - 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x1F, 0xF8, 0x00, - 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0x80, - 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x3F, 0xF0, - 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x03, 0xFF, - 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x3F, - 0xF0, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x03, - 0xFF, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, - 0x3F, 0xF0, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, - 0x03, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x7F, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x80, 0x7F, 0xC0, 0x3F, 0xE0, 0x1F, 0xF0, 0x0F, 0xF8, 0x07, 0xFC, - 0x03, 0xFE, 0x01, 0xFF, 0x00, 0xFF, 0x80, 0x7F, 0xC0, 0x3F, 0xE0, 0x1F, - 0xF0, 0x0F, 0xF8, 0x07, 0xFC, 0x03, 0xFE, 0x01, 0xFF, 0x00, 0xFF, 0x80, - 0x7F, 0xC0, 0x3F, 0xE0, 0x1F, 0xF0, 0x0F, 0xF8, 0x07, 0xFC, 0x03, 0xFE, - 0x01, 0xFF, 0x00, 0xFF, 0x80, 0x7F, 0xC0, 0x3F, 0xE0, 0x1F, 0xF0, 0x0F, - 0xF8, 0x07, 0xFC, 0x03, 0xFE, 0x01, 0xFF, 0x00, 0xFF, 0x80, 0x7F, 0xC0, - 0x3F, 0xE0, 0x1F, 0xF0, 0x0F, 0xF8, 0x07, 0xFC, 0x03, 0xFE, 0x01, 0xFF, - 0x00, 0xFF, 0x80, 0x7F, 0xC0, 0x3F, 0xE0, 0x1F, 0xF0, 0x0F, 0xF8, 0x07, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0x80, 0x00, - 0x01, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, - 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, - 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, - 0x7F, 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x01, - 0xFF, 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x07, - 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, - 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x7F, - 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x01, 0xFF, - 0x80, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x07, 0xFE, - 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x1F, 0xF8, - 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, - 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0x80, - 0x00, 0x01, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x03, 0xFE, 0x00, - 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, - 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, - 0x00, 0x7F, 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0x80, 0x00, - 0x01, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, - 0x07, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, - 0x1F, 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, - 0x7F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x80, 0x7F, 0xC0, - 0x3F, 0xE0, 0x1F, 0xF0, 0x0F, 0xF8, 0x07, 0xFC, 0x03, 0xFE, 0x01, 0xFF, - 0x00, 0xFF, 0x80, 0x7F, 0xC0, 0x3F, 0xE0, 0x1F, 0xF0, 0x0F, 0xF8, 0x07, - 0xFC, 0x03, 0xFE, 0x01, 0xFF, 0x00, 0xFF, 0x80, 0x7F, 0xC0, 0x3F, 0xE0, - 0x1F, 0xF0, 0x0F, 0xF8, 0x07, 0xFC, 0x03, 0xFE, 0x01, 0xFF, 0x00, 0xFF, - 0x80, 0x7F, 0xC0, 0x3F, 0xE0, 0x1F, 0xF0, 0x0F, 0xF8, 0x07, 0xFC, 0x03, - 0xFE, 0x01, 0xFF, 0x00, 0xFF, 0x80, 0x7F, 0xC0, 0x3F, 0xE0, 0x1F, 0xF0, - 0x0F, 0xF8, 0x07, 0xFC, 0x03, 0xFE, 0x01, 0xFF, 0x00, 0xFF, 0x80, 0x7F, - 0xC0, 0x3F, 0xE0, 0x1F, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, - 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x03, 0xFE, 0x00, - 0x00, 0x03, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x01, 0xFF, 0xF0, - 0x00, 0x01, 0xFF, 0xFC, 0x00, 0x00, 0xFF, 0xFE, 0x00, 0x00, 0xFF, 0xFF, - 0x80, 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xDF, 0xF0, 0x00, 0x7F, 0xEF, - 0xFC, 0x00, 0x3F, 0xE3, 0xFE, 0x00, 0x3F, 0xF1, 0xFF, 0x80, 0x3F, 0xF0, - 0x7F, 0xE0, 0x1F, 0xF8, 0x3F, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x0F, 0xF8, - 0x03, 0xFE, 0x0F, 0xFC, 0x01, 0xFF, 0x87, 0xFC, 0x00, 0x7F, 0xC7, 0xFE, - 0x00, 0x3F, 0xF7, 0xFE, 0x00, 0x0F, 0xFD, 0xFF, 0x00, 0x07, 0xFC, 0x3F, - 0x00, 0x01, 0xF8, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x80, 0x00, 0x20, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0x1C, 0x00, - 0x7C, 0x01, 0xFC, 0x0F, 0xFC, 0x0F, 0xFC, 0x0F, 0xFC, 0x0F, 0xFC, 0x0F, - 0xFC, 0x0F, 0xFC, 0x0F, 0xF0, 0x07, 0xC0, 0x07, 0x00, 0x04, 0x00, 0x00, - 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, - 0xF8, 0x1F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xE0, - 0xFF, 0xFF, 0xFE, 0x0E, 0x00, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0x00, 0x00, - 0x3F, 0xF0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x01, 0xFF, - 0x00, 0x7F, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF1, 0xFF, - 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0x7F, 0xE0, 0x1F, - 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, - 0x80, 0x1F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xFF, 0xFF, - 0xFF, 0x7F, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xF3, - 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFE, 0x00, 0x7F, - 0xFC, 0x00, 0x03, 0x80, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x03, 0xFE, 0x00, - 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, - 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0xFF, 0x80, 0x00, - 0x01, 0xFF, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, - 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, - 0x7F, 0xC7, 0xF8, 0x00, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFF, 0x03, - 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0x1F, - 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xFE, 0x7F, 0xF0, 0x1F, 0xFC, 0xFF, - 0x80, 0x1F, 0xFD, 0xFF, 0x00, 0x1F, 0xFB, 0xFE, 0x00, 0x1F, 0xF7, 0xFC, - 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xE0, - 0x00, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0x00, - 0x07, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0xF8, 0x00, - 0x7F, 0xFF, 0xF0, 0x00, 0xFF, 0xBF, 0xE0, 0x03, 0xFF, 0x7F, 0xC0, 0x07, - 0xFE, 0xFF, 0x80, 0x1F, 0xFD, 0xFF, 0x00, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, - 0xE7, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0xF8, - 0x3F, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xFC, 0x00, - 0x03, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x07, 0xFF, 0xF0, 0x03, - 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, - 0x07, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFC, 0x3F, 0xFC, 0x03, 0x07, 0xFE, - 0x00, 0x01, 0xFF, 0x80, 0x00, 0x3F, 0xE0, 0x00, 0x07, 0xFC, 0x00, 0x01, - 0xFF, 0x80, 0x00, 0x3F, 0xE0, 0x00, 0x07, 0xFC, 0x00, 0x00, 0xFF, 0x80, - 0x00, 0x1F, 0xF0, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x0F, - 0xF8, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x03, 0xFE, 0x00, - 0x00, 0x7F, 0xE0, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0xFF, 0xF0, 0x07, 0x1F, - 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, - 0xF8, 0x1F, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFC, 0x00, - 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x07, 0xFC, 0x00, - 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, - 0x00, 0x7F, 0xC0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0x00, 0x00, - 0x03, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, - 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, - 0xFF, 0x80, 0x0F, 0xF1, 0xFF, 0x00, 0xFF, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, - 0xFC, 0x1F, 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, - 0xE3, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFC, 0x07, 0xFF, - 0x7F, 0xF0, 0x03, 0xFE, 0xFF, 0xC0, 0x07, 0xFD, 0xFF, 0x00, 0x0F, 0xFF, - 0xFE, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, - 0xE0, 0x00, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, - 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0xFC, - 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x7F, 0xDF, 0xF8, 0x00, 0xFF, 0xBF, 0xF0, - 0x01, 0xFF, 0x7F, 0xF0, 0x03, 0xFE, 0x7F, 0xF8, 0x07, 0xFC, 0xFF, 0xFF, - 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, - 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, - 0xFC, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0xFF, 0xFC, - 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFE, - 0x01, 0xFF, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xFC, - 0x3F, 0xF8, 0x3F, 0xF8, 0x7F, 0xC0, 0x1F, 0xF9, 0xFF, 0x80, 0x1F, 0xF3, - 0xFE, 0x00, 0x3F, 0xE7, 0xFC, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, - 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x3F, 0xE0, - 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x20, 0xFF, 0xF0, - 0x03, 0xC1, 0xFF, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, - 0xFE, 0x01, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, - 0xF8, 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x3F, 0xE0, - 0x03, 0xFF, 0xF8, 0x1F, 0xFF, 0xF0, 0x7F, 0xFF, 0xE1, 0xFF, 0xFF, 0xC7, - 0xFF, 0xFF, 0x8F, 0xFF, 0xFE, 0x3F, 0xFF, 0xFC, 0x7F, 0xF0, 0x18, 0xFF, - 0xC0, 0x03, 0xFF, 0x00, 0x07, 0xFC, 0x00, 0x0F, 0xF8, 0x00, 0x1F, 0xF0, - 0x00, 0x3F, 0xE0, 0x00, 0x7F, 0xC0, 0x00, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, - 0xF3, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, - 0x3F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFC, 0xFF, 0x80, 0x01, 0xFF, 0x00, 0x03, - 0xFE, 0x00, 0x07, 0xFC, 0x00, 0x0F, 0xF8, 0x00, 0x1F, 0xF0, 0x00, 0x3F, - 0xE0, 0x00, 0x7F, 0xC0, 0x00, 0xFF, 0x80, 0x01, 0xFF, 0x00, 0x03, 0xFE, - 0x00, 0x07, 0xFC, 0x00, 0x0F, 0xF8, 0x00, 0x1F, 0xF0, 0x00, 0x3F, 0xE0, - 0x00, 0x7F, 0xC0, 0x00, 0xFF, 0x80, 0x01, 0xFF, 0x00, 0x03, 0xFE, 0x00, - 0x07, 0xFC, 0x00, 0x0F, 0xF8, 0x00, 0x1F, 0xF0, 0x00, 0x3F, 0xE0, 0x00, - 0x7F, 0xC0, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x01, 0xFF, - 0xFF, 0xE0, 0x1F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, - 0xFC, 0x3F, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, - 0x3F, 0xFC, 0x07, 0xFD, 0xFF, 0xC0, 0x1F, 0xF7, 0xFE, 0x00, 0x7F, 0xDF, - 0xF0, 0x01, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xF8, - 0x00, 0x7F, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0x80, 0x07, 0xFF, 0xFE, 0x00, - 0x1F, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xC0, 0x07, - 0xFD, 0xFF, 0x00, 0x1F, 0xF7, 0xFE, 0x00, 0x7F, 0xDF, 0xFE, 0x07, 0xFF, - 0x7F, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0xC7, - 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xF0, 0x1F, - 0xFF, 0xFF, 0xC0, 0x0F, 0xF1, 0xFF, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, - 0x1F, 0xF0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x03, 0xFE, 0x10, 0x00, 0x1F, - 0xF8, 0x7C, 0x01, 0xFF, 0xE1, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFC, - 0x3F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xF8, 0x0F, - 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x03, - 0x80, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x01, 0xFF, 0x00, - 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x03, 0xFE, 0x00, 0x00, - 0x1F, 0xF0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x3F, - 0xE0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x7F, 0xC0, - 0x00, 0x03, 0xFE, 0x00, 0x00, 0x1F, 0xF7, 0xFC, 0x00, 0xFF, 0xFF, 0xFC, - 0x07, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xFF, 0x8F, - 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0xDF, 0xF8, - 0x0F, 0xFE, 0xFF, 0x80, 0x3F, 0xF7, 0xFC, 0x00, 0xFF, 0xFF, 0xE0, 0x07, - 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, - 0xFE, 0x00, 0x3F, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFC, - 0x00, 0x7F, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF8, 0x00, - 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xF0, 0x01, 0xFF, - 0xFF, 0x80, 0x0F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, - 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFE, 0x00, - 0x3F, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0x80, 0x0F, 0xF8, 0x1F, 0x07, 0xF1, - 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xC7, 0xF0, 0x7C, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xCF, 0xF9, 0xFF, 0x3F, - 0xE7, 0xFC, 0xFF, 0x9F, 0xF3, 0xFE, 0x7F, 0xCF, 0xF9, 0xFF, 0x3F, 0xE7, - 0xFC, 0xFF, 0x9F, 0xF3, 0xFE, 0x7F, 0xCF, 0xF9, 0xFF, 0x3F, 0xE7, 0xFC, - 0xFF, 0x9F, 0xF3, 0xFE, 0x7F, 0xCF, 0xF9, 0xFF, 0x3F, 0xE7, 0xFC, 0xFF, - 0x9F, 0xF3, 0xFE, 0x7F, 0xC0, 0x00, 0x1F, 0x00, 0x07, 0xF0, 0x01, 0xFF, - 0x00, 0x7F, 0xF0, 0x0F, 0xFE, 0x01, 0xFF, 0xC0, 0x3F, 0xF8, 0x07, 0xFF, - 0x00, 0x7F, 0xC0, 0x07, 0xF0, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x0F, 0xF8, - 0x01, 0xFF, 0x00, 0x3F, 0xE0, 0x07, 0xFC, 0x00, 0xFF, 0x80, 0x1F, 0xF0, - 0x03, 0xFE, 0x00, 0x7F, 0xC0, 0x0F, 0xF8, 0x01, 0xFF, 0x00, 0x3F, 0xE0, - 0x07, 0xFC, 0x00, 0xFF, 0x80, 0x1F, 0xF0, 0x03, 0xFE, 0x00, 0x7F, 0xC0, - 0x0F, 0xF8, 0x01, 0xFF, 0x00, 0x3F, 0xE0, 0x07, 0xFC, 0x00, 0xFF, 0x80, - 0x1F, 0xF0, 0x03, 0xFE, 0x00, 0x7F, 0xC0, 0x0F, 0xF8, 0x01, 0xFF, 0x00, - 0x3F, 0xE0, 0x07, 0xFC, 0x00, 0xFF, 0x80, 0x1F, 0xF0, 0x03, 0xFE, 0x00, - 0x7F, 0xC0, 0x0F, 0xF8, 0x01, 0xFF, 0x00, 0x7F, 0xE4, 0x1F, 0xFC, 0xFF, - 0xFF, 0x1F, 0xFF, 0xE3, 0xFF, 0xFC, 0x7F, 0xFF, 0x1F, 0xFF, 0xC3, 0xFF, - 0xF0, 0x7F, 0xFC, 0x07, 0xFC, 0x00, 0x03, 0x80, 0x00, 0x01, 0xFF, 0x00, - 0x00, 0x03, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, - 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x00, - 0x00, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, - 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, - 0x3F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0xFF, 0x80, 0x3F, 0xFF, - 0xFF, 0x00, 0xFF, 0xFB, 0xFE, 0x01, 0xFF, 0xE7, 0xFC, 0x07, 0xFF, 0x8F, - 0xF8, 0x1F, 0xFE, 0x1F, 0xF0, 0x7F, 0xF8, 0x3F, 0xE1, 0xFF, 0xE0, 0x7F, - 0xC7, 0xFF, 0x80, 0xFF, 0x9F, 0xFE, 0x01, 0xFF, 0x7F, 0xF8, 0x03, 0xFF, - 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, - 0xF8, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, - 0xE0, 0x01, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0xE0, 0x07, 0xFD, 0xFF, - 0xE0, 0x0F, 0xF9, 0xFF, 0xE0, 0x1F, 0xF1, 0xFF, 0xC0, 0x3F, 0xE1, 0xFF, - 0xC0, 0x7F, 0xC1, 0xFF, 0xC0, 0xFF, 0x83, 0xFF, 0xC1, 0xFF, 0x03, 0xFF, - 0x83, 0xFE, 0x03, 0xFF, 0x87, 0xFC, 0x07, 0xFF, 0x8F, 0xF8, 0x07, 0xFF, - 0x1F, 0xF0, 0x07, 0xFF, 0x3F, 0xE0, 0x0F, 0xFF, 0x7F, 0xC0, 0x0F, 0xFE, - 0xFF, 0x80, 0x0F, 0xFE, 0x03, 0x83, 0xFE, 0x0F, 0xF8, 0x3F, 0xE0, 0xFF, - 0x83, 0xFE, 0x0F, 0xF8, 0x3F, 0xE0, 0xFF, 0x83, 0xFE, 0x0F, 0xF8, 0x3F, - 0xE0, 0xFF, 0x83, 0xFE, 0x0F, 0xF8, 0x3F, 0xE0, 0xFF, 0x83, 0xFE, 0x0F, - 0xF8, 0x3F, 0xE0, 0xFF, 0x83, 0xFE, 0x0F, 0xF8, 0x3F, 0xE0, 0xFF, 0x83, - 0xFE, 0x0F, 0xF8, 0x3F, 0xE0, 0xFF, 0x83, 0xFE, 0x0F, 0xF8, 0x3F, 0xE0, - 0xFF, 0x83, 0xFE, 0x0F, 0xF8, 0x3F, 0xE0, 0xFF, 0x83, 0xFE, 0x0F, 0xF8, - 0x3F, 0xE0, 0xFF, 0xC3, 0xFF, 0xCF, 0xFF, 0xDF, 0xFF, 0x7F, 0xFD, 0xFF, - 0xE3, 0xFF, 0x87, 0xFE, 0x07, 0xF8, 0x03, 0xE0, 0x01, 0xFF, 0xC0, 0x0F, - 0xF0, 0x01, 0xFF, 0xFF, 0x83, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0x3F, 0xFF, - 0xE1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, - 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0x81, 0xFF, 0xF0, 0x7F, 0xF7, 0xFC, - 0x03, 0xFE, 0x00, 0xFF, 0xFF, 0xE0, 0x1F, 0xF8, 0x07, 0xFF, 0xFF, 0x00, - 0xFF, 0xC0, 0x3F, 0xFF, 0xF8, 0x03, 0xFE, 0x00, 0xFF, 0xFF, 0xC0, 0x1F, - 0xF0, 0x07, 0xFF, 0xFE, 0x00, 0xFF, 0x80, 0x3F, 0xFF, 0xF0, 0x07, 0xFC, - 0x01, 0xFF, 0xFF, 0x80, 0x3F, 0xE0, 0x0F, 0xFF, 0xFC, 0x01, 0xFF, 0x00, - 0x7F, 0xFF, 0xE0, 0x0F, 0xF8, 0x03, 0xFF, 0xFF, 0x00, 0x7F, 0xC0, 0x1F, - 0xFF, 0xF8, 0x03, 0xFE, 0x00, 0xFF, 0xFF, 0xC0, 0x1F, 0xF0, 0x07, 0xFF, - 0xFE, 0x00, 0xFF, 0x80, 0x3F, 0xFF, 0xF0, 0x07, 0xFC, 0x01, 0xFF, 0xFF, - 0x80, 0x3F, 0xE0, 0x0F, 0xFF, 0xFC, 0x01, 0xFF, 0x00, 0x7F, 0xFF, 0xE0, - 0x0F, 0xF8, 0x03, 0xFF, 0xFF, 0x00, 0x7F, 0xC0, 0x1F, 0xFF, 0xF8, 0x03, - 0xFE, 0x00, 0xFF, 0xFF, 0xC0, 0x1F, 0xF0, 0x07, 0xFF, 0xFE, 0x00, 0xFF, - 0x80, 0x3F, 0xFF, 0xF0, 0x07, 0xFC, 0x01, 0xFF, 0xFF, 0x80, 0x3F, 0xE0, - 0x0F, 0xFF, 0xFC, 0x01, 0xFF, 0x00, 0x7F, 0xC0, 0x01, 0xFF, 0xE0, 0x01, - 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, - 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, - 0xFE, 0xFF, 0x80, 0x7F, 0xF7, 0xFC, 0x01, 0xFF, 0xBF, 0xE0, 0x07, 0xFF, - 0xFF, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFE, - 0x00, 0x3F, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFC, 0x00, - 0x7F, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0xFF, - 0xFF, 0xC0, 0x07, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, - 0x80, 0x0F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0x00, - 0x1F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFE, 0x00, 0x3F, - 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFC, 0x00, 0x7F, 0xC0, - 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x01, 0xFF, 0xFF, 0x80, - 0x03, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xF0, - 0x1F, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xF8, 0x3F, 0xF8, 0x1F, 0xFC, - 0x7F, 0xF0, 0x0F, 0xFC, 0x7F, 0xE0, 0x07, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, - 0x7F, 0xC0, 0x03, 0xFE, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, - 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, - 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, - 0xFF, 0x80, 0x03, 0xFF, 0x7F, 0xC0, 0x03, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, - 0x7F, 0xE0, 0x07, 0xFE, 0x7F, 0xF0, 0x0F, 0xFE, 0x3F, 0xF8, 0x1F, 0xFC, - 0x3F, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xF0, - 0x07, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x80, - 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x01, 0xFF, 0xC0, 0x00, - 0xFF, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0xFC, 0x07, 0xFF, 0xFF, 0xFC, 0x0F, - 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0xFC, 0x7F, - 0xFF, 0xFF, 0xF8, 0xFF, 0x80, 0x7F, 0xF9, 0xFF, 0x00, 0x3F, 0xFB, 0xFE, - 0x00, 0x3F, 0xF7, 0xFC, 0x00, 0x7F, 0xEF, 0xF8, 0x00, 0x7F, 0xDF, 0xF0, - 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x80, - 0x03, 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xFC, 0x00, - 0x1F, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xE0, 0x01, - 0xFF, 0xFF, 0xC0, 0x03, 0xFE, 0xFF, 0x80, 0x0F, 0xFD, 0xFF, 0x00, 0x3F, - 0xFB, 0xFF, 0x80, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, - 0x1F, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, 0xE0, - 0xFF, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xFC, 0x03, 0xFE, 0x3F, 0xC0, 0x07, - 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, - 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x01, 0xFF, - 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xF8, - 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00, - 0x3F, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0x07, - 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0x1F, - 0xFF, 0xFF, 0xFF, 0x3F, 0xFE, 0x01, 0xFF, 0x3F, 0xF8, 0x01, 0xFF, 0x7F, - 0xE0, 0x01, 0xFF, 0x7F, 0xE0, 0x01, 0xFF, 0x7F, 0xC0, 0x01, 0xFF, 0xFF, - 0xC0, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, - 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, - 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, - 0xC0, 0x01, 0xFF, 0x7F, 0xC0, 0x01, 0xFF, 0x7F, 0xE0, 0x01, 0xFF, 0x7F, - 0xF0, 0x01, 0xFF, 0x3F, 0xFC, 0x07, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x1F, - 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0x07, - 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, - 0x1F, 0xF1, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0x00, - 0x00, 0x01, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0x00, - 0x00, 0x01, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0x00, - 0x00, 0x01, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0x01, - 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x7F, 0xFF, 0xFB, 0xFF, 0xFF, 0xDF, 0xFF, 0xFE, 0xFF, 0x80, 0x77, 0xFC, - 0x00, 0x3F, 0xE0, 0x01, 0xFF, 0x00, 0x0F, 0xF8, 0x00, 0x7F, 0xC0, 0x03, - 0xFE, 0x00, 0x1F, 0xF0, 0x00, 0xFF, 0x80, 0x07, 0xFC, 0x00, 0x3F, 0xE0, - 0x01, 0xFF, 0x00, 0x0F, 0xF8, 0x00, 0x7F, 0xC0, 0x03, 0xFE, 0x00, 0x1F, - 0xF0, 0x00, 0xFF, 0x80, 0x07, 0xFC, 0x00, 0x3F, 0xE0, 0x01, 0xFF, 0x00, - 0x0F, 0xF8, 0x00, 0x7F, 0xC0, 0x03, 0xFE, 0x00, 0x1F, 0xF0, 0x00, 0xFF, - 0x80, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x7F, 0xFF, 0xC0, - 0x7F, 0xFF, 0xF0, 0x3F, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, - 0xC3, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xF8, 0x7F, 0xE0, 0x1E, 0x1F, 0xF0, - 0x00, 0x07, 0xFC, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x1F, - 0xFF, 0x80, 0x03, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFE, - 0x07, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFE, 0x00, 0xFF, - 0xFF, 0xC0, 0x03, 0xFF, 0xF0, 0x00, 0x1F, 0xFC, 0x00, 0x03, 0xFF, 0x00, - 0x00, 0x7F, 0xC8, 0x00, 0x1F, 0xF7, 0xE0, 0x0F, 0xFD, 0xFF, 0xFF, 0xFF, - 0x7F, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, - 0xF8, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF, 0xFC, 0x00, 0x7F, 0xF8, 0x00, 0x03, - 0x80, 0x07, 0xFC, 0x00, 0x3F, 0xE0, 0x01, 0xFF, 0x00, 0x0F, 0xF8, 0x00, - 0x7F, 0xC0, 0x03, 0xFE, 0x00, 0x1F, 0xF0, 0x00, 0xFF, 0x80, 0x07, 0xFC, - 0x00, 0x3F, 0xFF, 0xFD, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFB, - 0xFF, 0xFF, 0xDF, 0xFF, 0xFE, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xBF, 0xE0, - 0x01, 0xFF, 0x00, 0x0F, 0xF8, 0x00, 0x7F, 0xC0, 0x03, 0xFE, 0x00, 0x1F, - 0xF0, 0x00, 0xFF, 0x80, 0x07, 0xFC, 0x00, 0x3F, 0xE0, 0x01, 0xFF, 0x00, - 0x0F, 0xF8, 0x00, 0x7F, 0xC0, 0x03, 0xFE, 0x00, 0x1F, 0xF0, 0x00, 0xFF, - 0x80, 0x07, 0xFE, 0x00, 0x3F, 0xF0, 0x00, 0xFF, 0xC0, 0x67, 0xFF, 0xFF, - 0x3F, 0xFF, 0xF8, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0x1F, 0xFF, 0xF8, 0x7F, - 0xFF, 0xC0, 0xFF, 0xFE, 0x01, 0xFF, 0x80, 0xFF, 0x80, 0x0F, 0xFF, 0xFC, - 0x00, 0x7F, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF8, 0x00, - 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xF0, 0x01, 0xFF, - 0xFF, 0x80, 0x0F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, - 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFE, 0x00, - 0x3F, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFC, 0x00, 0x7F, - 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, - 0xC0, 0x07, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xF8, 0x01, 0xFF, 0x7F, 0xE0, - 0x0F, 0xFB, 0xFF, 0x80, 0x7F, 0xDF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, - 0xF3, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0xE0, - 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xE0, 0x01, 0xFF, 0xE0, 0x00, 0xFF, - 0xC0, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0xFF, 0xDF, 0xF0, 0x00, 0x7F, 0xCF, - 0xF8, 0x00, 0x7F, 0xE7, 0xFE, 0x00, 0x3F, 0xF1, 0xFF, 0x00, 0x1F, 0xF0, - 0xFF, 0x80, 0x0F, 0xF8, 0x7F, 0xE0, 0x0F, 0xFC, 0x1F, 0xF0, 0x07, 0xFC, - 0x0F, 0xF8, 0x03, 0xFE, 0x07, 0xFE, 0x03, 0xFF, 0x01, 0xFF, 0x01, 0xFF, - 0x00, 0xFF, 0x80, 0xFF, 0x80, 0x7F, 0xE0, 0xFF, 0xC0, 0x1F, 0xF0, 0x7F, - 0xC0, 0x0F, 0xF8, 0x3F, 0xE0, 0x07, 0xFE, 0x3F, 0xF0, 0x01, 0xFF, 0x1F, - 0xF0, 0x00, 0xFF, 0x8F, 0xF8, 0x00, 0x3F, 0xEF, 0xF8, 0x00, 0x1F, 0xF7, - 0xFC, 0x00, 0x0F, 0xFB, 0xFE, 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x01, 0xFF, - 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0x80, 0x00, 0x1F, - 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, - 0xFF, 0xE0, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, - 0x0F, 0xF8, 0x00, 0x00, 0xFF, 0x80, 0x07, 0xF0, 0x00, 0xFF, 0xFF, 0xC0, - 0x03, 0xF8, 0x00, 0x7F, 0xDF, 0xF0, 0x01, 0xFE, 0x00, 0x7F, 0xCF, 0xF8, - 0x01, 0xFF, 0x00, 0x3F, 0xE7, 0xFC, 0x00, 0xFF, 0x80, 0x1F, 0xF1, 0xFF, - 0x00, 0x7F, 0xC0, 0x1F, 0xF0, 0xFF, 0x80, 0x3F, 0xF0, 0x0F, 0xF8, 0x7F, - 0xC0, 0x3F, 0xF8, 0x07, 0xFC, 0x1F, 0xE0, 0x1F, 0xFC, 0x03, 0xFC, 0x0F, - 0xF8, 0x0F, 0xFE, 0x03, 0xFE, 0x07, 0xFC, 0x07, 0xFF, 0x81, 0xFF, 0x01, - 0xFE, 0x07, 0xFF, 0xC0, 0xFF, 0x00, 0xFF, 0x83, 0xFF, 0xE0, 0xFF, 0x80, - 0x7F, 0xC1, 0xFF, 0xF0, 0x7F, 0xC0, 0x1F, 0xE0, 0xFD, 0xFC, 0x3F, 0xC0, - 0x0F, 0xF0, 0xFE, 0xFE, 0x1F, 0xE0, 0x07, 0xFC, 0x7F, 0x7F, 0x1F, 0xF0, - 0x01, 0xFE, 0x3F, 0xBF, 0x8F, 0xF0, 0x00, 0xFF, 0x3F, 0x8F, 0xE7, 0xF8, - 0x00, 0x7F, 0xDF, 0xC7, 0xF7, 0xFC, 0x00, 0x1F, 0xEF, 0xE3, 0xFB, 0xFC, - 0x00, 0x0F, 0xF7, 0xE0, 0xFD, 0xFE, 0x00, 0x07, 0xFF, 0xF0, 0x7F, 0xFF, - 0x00, 0x01, 0xFF, 0xF8, 0x3F, 0xFF, 0x00, 0x00, 0xFF, 0xF8, 0x1F, 0xFF, - 0x80, 0x00, 0x7F, 0xFC, 0x07, 0xFF, 0xC0, 0x00, 0x1F, 0xFE, 0x03, 0xFF, - 0xC0, 0x00, 0x0F, 0xFE, 0x01, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x00, 0x7F, - 0xE0, 0x00, 0x01, 0xFF, 0x80, 0x3F, 0xF0, 0x00, 0x00, 0xFF, 0xC0, 0x1F, - 0xF8, 0x00, 0x00, 0x3F, 0xC0, 0x07, 0xF8, 0x00, 0x00, 0x1F, 0xE0, 0x03, - 0xFC, 0x00, 0x00, 0xFF, 0xE0, 0x03, 0xFF, 0xBF, 0xF8, 0x03, 0xFF, 0x8F, - 0xFC, 0x03, 0xFF, 0x87, 0xFF, 0x01, 0xFF, 0xC1, 0xFF, 0xC1, 0xFF, 0xC0, - 0x7F, 0xE1, 0xFF, 0xC0, 0x3F, 0xF8, 0xFF, 0xE0, 0x0F, 0xFE, 0xFF, 0xE0, - 0x03, 0xFF, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xF0, - 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0xF8, - 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x1F, 0xFC, - 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x0F, 0xFF, - 0xE0, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x07, 0xFF, 0xFC, 0x00, 0x07, 0xFF, - 0xFF, 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, - 0xBF, 0xF8, 0x03, 0xFF, 0x8F, 0xFE, 0x01, 0xFF, 0xC3, 0xFF, 0x01, 0xFF, - 0xC1, 0xFF, 0xC1, 0xFF, 0xC0, 0x7F, 0xF0, 0xFF, 0xE0, 0x1F, 0xF8, 0xFF, - 0xE0, 0x0F, 0xFE, 0xFF, 0xE0, 0x03, 0xFF, 0x80, 0xFF, 0xC0, 0x00, 0xFF, - 0xFF, 0xF0, 0x00, 0x3F, 0xF7, 0xFC, 0x00, 0x0F, 0xF9, 0xFF, 0x80, 0x07, - 0xFE, 0x7F, 0xE0, 0x01, 0xFF, 0x8F, 0xF8, 0x00, 0x7F, 0xC3, 0xFF, 0x00, - 0x1F, 0xF0, 0x7F, 0xC0, 0x0F, 0xFC, 0x1F, 0xF0, 0x03, 0xFE, 0x07, 0xFE, - 0x00, 0xFF, 0x80, 0xFF, 0x80, 0x7F, 0xE0, 0x3F, 0xE0, 0x1F, 0xF0, 0x0F, - 0xFC, 0x07, 0xFC, 0x01, 0xFF, 0x03, 0xFF, 0x00, 0x7F, 0xC0, 0xFF, 0x80, - 0x0F, 0xF8, 0x3F, 0xE0, 0x03, 0xFE, 0x1F, 0xF8, 0x00, 0x7F, 0xC7, 0xFC, - 0x00, 0x1F, 0xF1, 0xFF, 0x00, 0x07, 0xFC, 0xFF, 0x80, 0x00, 0xFF, 0xBF, - 0xE0, 0x00, 0x3F, 0xEF, 0xF8, 0x00, 0x07, 0xFF, 0xFC, 0x00, 0x01, 0xFF, - 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x01, - 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, - 0x03, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x1F, 0xF0, 0x00, - 0x00, 0x07, 0xFC, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x80, - 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x20, 0x3F, 0xF0, 0x00, 0x1F, 0xFF, 0xFC, - 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x01, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, - 0xC0, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x03, 0xFF, - 0xF0, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xF7, - 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, - 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFE, - 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x3F, 0xF8, 0x00, 0x07, 0xFF, 0x00, 0x00, - 0xFF, 0xE0, 0x00, 0x1F, 0xFE, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x3F, 0xF8, - 0x00, 0x07, 0xFF, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x1F, 0xFC, 0x00, 0x03, - 0xFF, 0x80, 0x00, 0x7F, 0xF0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0xFF, 0xE0, - 0x00, 0x1F, 0xFC, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x3F, 0xF8, 0x00, 0x07, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x07, 0xF0, 0x03, 0xFF, 0x00, 0x7F, 0xF0, - 0x1F, 0xFF, 0x01, 0xFF, 0xF0, 0x3F, 0xFF, 0x03, 0xFF, 0xF0, 0x7F, 0xFF, - 0x07, 0xFF, 0x00, 0x7F, 0xE0, 0x07, 0xFC, 0x00, 0x7F, 0xC0, 0x07, 0xFC, - 0x00, 0x7F, 0xC0, 0x07, 0xFC, 0x00, 0x7F, 0xC0, 0x07, 0xFC, 0x00, 0x7F, - 0xC0, 0x07, 0xFC, 0x00, 0x7F, 0xC0, 0x07, 0xFC, 0x00, 0x7F, 0xC0, 0x07, - 0xFC, 0x00, 0x7F, 0xC0, 0x0F, 0xFC, 0x00, 0xFF, 0xC0, 0x3F, 0xF8, 0x0F, - 0xFF, 0x80, 0xFF, 0xF0, 0x0F, 0xFE, 0x00, 0xFF, 0xC0, 0x0F, 0xFE, 0x00, - 0xFF, 0xF0, 0x0F, 0xFF, 0x80, 0xFF, 0xF8, 0x03, 0xFF, 0x80, 0x0F, 0xFC, - 0x00, 0xFF, 0xC0, 0x07, 0xFC, 0x00, 0x7F, 0xC0, 0x07, 0xFC, 0x00, 0x7F, - 0xC0, 0x07, 0xFC, 0x00, 0x7F, 0xC0, 0x07, 0xFC, 0x00, 0x7F, 0xC0, 0x07, - 0xFC, 0x00, 0x7F, 0xC0, 0x07, 0xFC, 0x00, 0x7F, 0xC0, 0x07, 0xFC, 0x00, - 0x7F, 0xE0, 0x07, 0xFF, 0x00, 0x7F, 0xFF, 0x03, 0xFF, 0xF0, 0x3F, 0xFF, - 0x01, 0xFF, 0xF0, 0x1F, 0xFF, 0x00, 0xFF, 0xF0, 0x03, 0xFF, 0x00, 0x07, - 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFE, 0x00, - 0x0F, 0xFC, 0x00, 0xFF, 0xE0, 0x0F, 0xFF, 0x80, 0xFF, 0xF8, 0x0F, 0xFF, - 0xC0, 0xFF, 0xFC, 0x0F, 0xFF, 0xE0, 0x0F, 0xFE, 0x00, 0x7F, 0xE0, 0x03, - 0xFE, 0x00, 0x3F, 0xE0, 0x03, 0xFE, 0x00, 0x3F, 0xE0, 0x03, 0xFE, 0x00, - 0x3F, 0xE0, 0x03, 0xFE, 0x00, 0x3F, 0xE0, 0x03, 0xFE, 0x00, 0x3F, 0xE0, - 0x03, 0xFE, 0x00, 0x3F, 0xE0, 0x03, 0xFE, 0x00, 0x3F, 0xE0, 0x03, 0xFF, - 0x00, 0x3F, 0xF0, 0x01, 0xFF, 0xC0, 0x1F, 0xFF, 0x00, 0xFF, 0xF0, 0x07, - 0xFF, 0x00, 0x3F, 0xF0, 0x07, 0xFF, 0x00, 0xFF, 0xF0, 0x1F, 0xFF, 0x01, - 0xFF, 0xF0, 0x3F, 0xFC, 0x03, 0xFF, 0x00, 0x3F, 0xF0, 0x03, 0xFE, 0x00, - 0x3F, 0xE0, 0x03, 0xFE, 0x00, 0x3F, 0xE0, 0x03, 0xFE, 0x00, 0x3F, 0xE0, - 0x03, 0xFE, 0x00, 0x3F, 0xE0, 0x03, 0xFE, 0x00, 0x3F, 0xE0, 0x03, 0xFE, - 0x00, 0x3F, 0xE0, 0x03, 0xFE, 0x00, 0x7F, 0xE0, 0x0F, 0xFE, 0x0F, 0xFF, - 0xE0, 0xFF, 0xFC, 0x0F, 0xFF, 0xC0, 0xFF, 0xF8, 0x0F, 0xFF, 0x80, 0xFF, - 0xF0, 0x0F, 0xFC, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x18, 0x01, - 0xFF, 0x80, 0x07, 0xE0, 0xFF, 0xF8, 0x01, 0xFC, 0x7F, 0xFF, 0x80, 0xFF, - 0x3F, 0xFF, 0xF8, 0x7F, 0x8F, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, - 0xF9, 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, 0x87, 0xFF, 0xFE, 0x3F, 0xC0, 0x7F, - 0xFF, 0x8F, 0xE0, 0x07, 0xFF, 0xC1, 0xF8, 0x00, 0xFF, 0xE0, 0x06, 0x00, - 0x07, 0xE0, 0x00 }; - -const GFXglyph Ubuntu_Bold32pt7bGlyphs[] PROGMEM = { - { 0, 0, 0, 15, 0, 1 }, // 0x20 ' ' - { 0, 11, 44, 17, 3, -43 }, // 0x21 '!' - { 61, 23, 19, 29, 3, -47 }, // 0x22 '"' - { 116, 38, 44, 44, 3, -43 }, // 0x23 '#' - { 325, 31, 56, 36, 2, -48 }, // 0x24 '$' - { 542, 54, 46, 58, 2, -44 }, // 0x25 '%' - { 853, 41, 46, 44, 2, -44 }, // 0x26 '&' - { 1089, 9, 19, 15, 3, -47 }, // 0x27 ''' - { 1111, 17, 61, 22, 4, -48 }, // 0x28 '(' - { 1241, 17, 61, 22, 1, -48 }, // 0x29 ')' - { 1371, 27, 25, 32, 3, -43 }, // 0x2A '*' - { 1456, 31, 30, 37, 3, -33 }, // 0x2B '+' - { 1573, 12, 20, 15, 1, -9 }, // 0x2C ',' - { 1603, 18, 9, 22, 2, -23 }, // 0x2D '-' - { 1624, 12, 12, 16, 2, -10 }, // 0x2E '.' - { 1642, 31, 61, 28, -2, -48 }, // 0x2F '/' - { 1879, 32, 46, 36, 2, -44 }, // 0x30 '0' - { 2063, 21, 44, 36, 5, -43 }, // 0x31 '1' - { 2179, 31, 45, 36, 2, -44 }, // 0x32 '2' - { 2354, 30, 46, 36, 2, -44 }, // 0x33 '3' - { 2527, 33, 44, 36, 1, -43 }, // 0x34 '4' - { 2709, 30, 45, 36, 2, -43 }, // 0x35 '5' - { 2878, 32, 45, 36, 2, -43 }, // 0x36 '6' - { 3058, 30, 44, 36, 3, -43 }, // 0x37 '7' - { 3223, 32, 46, 36, 2, -44 }, // 0x38 '8' - { 3407, 31, 45, 36, 2, -44 }, // 0x39 '9' - { 3582, 12, 34, 16, 2, -32 }, // 0x3A ':' - { 3633, 13, 43, 16, 1, -32 }, // 0x3B ';' - { 3703, 29, 31, 36, 3, -33 }, // 0x3C '<' - { 3816, 30, 22, 36, 3, -29 }, // 0x3D '=' - { 3899, 29, 31, 36, 4, -33 }, // 0x3E '>' - { 4012, 26, 46, 29, 1, -44 }, // 0x3F '?' - { 4162, 55, 55, 61, 3, -44 }, // 0x40 '@' - { 4541, 44, 44, 46, 1, -43 }, // 0x41 'A' - { 4783, 34, 45, 42, 5, -43 }, // 0x42 'B' - { 4975, 37, 46, 41, 3, -44 }, // 0x43 'C' - { 5188, 38, 45, 46, 5, -43 }, // 0x44 'D' - { 5402, 31, 44, 38, 5, -43 }, // 0x45 'E' - { 5573, 29, 44, 36, 5, -43 }, // 0x46 'F' - { 5733, 36, 46, 44, 3, -44 }, // 0x47 'G' - { 5940, 36, 44, 46, 5, -43 }, // 0x48 'H' - { 6138, 10, 44, 20, 5, -43 }, // 0x49 'I' - { 6193, 27, 45, 33, 1, -43 }, // 0x4A 'J' - { 6345, 37, 44, 43, 5, -43 }, // 0x4B 'K' - { 6549, 29, 44, 35, 5, -43 }, // 0x4C 'L' - { 6709, 49, 44, 57, 4, -43 }, // 0x4D 'M' - { 6979, 38, 44, 48, 5, -43 }, // 0x4E 'N' - { 7188, 44, 46, 50, 3, -44 }, // 0x4F 'O' - { 7441, 33, 44, 41, 5, -43 }, // 0x50 'P' - { 7623, 44, 57, 50, 3, -44 }, // 0x51 'Q' - { 7937, 36, 44, 42, 5, -43 }, // 0x52 'R' - { 8135, 32, 46, 37, 2, -44 }, // 0x53 'S' - { 8319, 36, 44, 38, 1, -43 }, // 0x54 'T' - { 8517, 35, 45, 45, 5, -43 }, // 0x55 'U' - { 8714, 44, 44, 46, 1, -43 }, // 0x56 'V' - { 8956, 58, 44, 60, 1, -43 }, // 0x57 'W' - { 9275, 41, 44, 43, 1, -43 }, // 0x58 'X' - { 9501, 42, 44, 42, 0, -43 }, // 0x59 'Y' - { 9732, 34, 44, 38, 2, -43 }, // 0x5A 'Z' - { 9919, 17, 61, 23, 5, -48 }, // 0x5B '[' - { 10049, 31, 61, 28, -2, -48 }, // 0x5C '\' - { 10286, 17, 61, 23, 1, -48 }, // 0x5D ']' - { 10416, 33, 26, 35, 1, -43 }, // 0x5E '^' - { 10524, 32, 8, 32, 0, 5 }, // 0x5F '_' - { 10556, 15, 14, 18, 1, -49 }, // 0x60 '`' - { 10583, 28, 35, 35, 3, -33 }, // 0x61 'a' - { 10706, 31, 50, 38, 4, -48 }, // 0x62 'b' - { 10900, 27, 35, 32, 3, -33 }, // 0x63 'c' - { 11019, 31, 50, 38, 3, -48 }, // 0x64 'd' - { 11213, 31, 35, 37, 3, -33 }, // 0x65 'e' - { 11349, 23, 49, 26, 4, -48 }, // 0x66 'f' - { 11490, 30, 46, 37, 3, -33 }, // 0x67 'g' - { 11663, 29, 49, 37, 4, -48 }, // 0x68 'h' - { 11841, 11, 49, 17, 3, -48 }, // 0x69 'i' - { 11909, 19, 61, 15, -6, -48 }, // 0x6A 'j' - { 12054, 31, 49, 36, 4, -48 }, // 0x6B 'k' - { 12244, 14, 50, 19, 4, -48 }, // 0x6C 'l' - { 12332, 45, 34, 53, 4, -33 }, // 0x6D 'm' - { 12524, 29, 34, 37, 4, -33 }, // 0x6E 'n' - { 12648, 32, 35, 38, 3, -33 }, // 0x6F 'o' - { 12788, 31, 46, 38, 4, -33 }, // 0x70 'p' - { 12967, 32, 46, 38, 3, -33 }, // 0x71 'q' - { 13151, 21, 34, 26, 4, -33 }, // 0x72 'r' - { 13241, 26, 35, 31, 2, -33 }, // 0x73 's' - { 13355, 21, 44, 27, 4, -42 }, // 0x74 't' - { 13471, 29, 34, 37, 4, -32 }, // 0x75 'u' - { 13595, 33, 33, 35, 1, -32 }, // 0x76 'v' - { 13732, 49, 33, 51, 1, -32 }, // 0x77 'w' - { 13935, 33, 33, 35, 1, -32 }, // 0x78 'x' - { 14072, 34, 45, 36, 1, -32 }, // 0x79 'y' - { 14264, 28, 33, 32, 2, -32 }, // 0x7A 'z' - { 14380, 20, 61, 23, 2, -48 }, // 0x7B '{' - { 14533, 9, 61, 21, 6, -48 }, // 0x7C '|' - { 14602, 20, 61, 23, 1, -48 }, // 0x7D '}' - { 14755, 34, 13, 36, 1, -24 } }; // 0x7E '~' - -const GFXfont Ubuntu_Bold32pt7b PROGMEM = { - (uint8_t *)Ubuntu_Bold32pt7bBitmaps, - (GFXglyph *)Ubuntu_Bold32pt7bGlyphs, - 0x20, 0x7E, 72 }; - -// Approx. 15483 bytes diff --git a/lib/obp60task/Ubuntu_Bold8pt7b.h b/lib/obp60task/Ubuntu_Bold8pt7b.h deleted file mode 100644 index e9425ba..0000000 --- a/lib/obp60task/Ubuntu_Bold8pt7b.h +++ /dev/null @@ -1,182 +0,0 @@ -const uint8_t Ubuntu_Bold8pt7bBitmaps[] PROGMEM = { - 0xFF, 0xFC, 0xFC, 0xDE, 0xF7, 0xBD, 0x80, 0x1B, 0x0D, 0x87, 0xDF, 0xFF, - 0xF9, 0xB3, 0xFF, 0xFF, 0x6C, 0x36, 0x1B, 0x00, 0x18, 0x30, 0xFF, 0xFC, - 0x38, 0x1C, 0x1E, 0x0E, 0x0C, 0x1F, 0xF7, 0xC3, 0x06, 0x00, 0x78, 0x63, - 0xF3, 0x0C, 0xCC, 0x33, 0x60, 0xCF, 0xFB, 0xFF, 0xF7, 0xFC, 0xC1, 0xB3, - 0x0C, 0xCC, 0x33, 0xF1, 0x87, 0x80, 0x3C, 0x1F, 0x86, 0x61, 0x98, 0x3C, - 0x1E, 0x6C, 0xDB, 0x1C, 0xC7, 0x3F, 0xE7, 0xDC, 0xFF, 0xC0, 0x13, 0x66, - 0xCC, 0xCC, 0xCC, 0xCC, 0x66, 0x31, 0x8C, 0x66, 0x33, 0x33, 0x33, 0x33, - 0x66, 0xC8, 0x39, 0xFF, 0xF8, 0x86, 0xDD, 0xD1, 0x00, 0x18, 0x18, 0x18, - 0xFF, 0xFF, 0x18, 0x18, 0x18, 0x6D, 0xEC, 0xFF, 0xC0, 0xFF, 0x80, 0x06, - 0x1C, 0x30, 0x60, 0xC3, 0x06, 0x0C, 0x30, 0x60, 0xC3, 0x06, 0x0C, 0x38, - 0x60, 0x38, 0xFB, 0xBE, 0x3C, 0x78, 0xF1, 0xE3, 0xEE, 0xF8, 0xE0, 0x1B, - 0xFE, 0xB1, 0x8C, 0x63, 0x18, 0xC6, 0x7D, 0xFD, 0x18, 0x30, 0xE3, 0x8E, - 0x38, 0xE1, 0xFF, 0xF8, 0x7D, 0xFC, 0x18, 0x33, 0xE7, 0x81, 0x83, 0x87, - 0xFF, 0xE0, 0x06, 0x0E, 0x1E, 0x3E, 0x36, 0x66, 0xE6, 0xFF, 0xFF, 0x06, - 0x06, 0x7E, 0xFD, 0x83, 0x0F, 0x9F, 0x83, 0x83, 0x07, 0xFB, 0xE0, 0x1C, - 0x79, 0xC7, 0x0F, 0xDF, 0xF1, 0xE3, 0xC6, 0xF8, 0xE0, 0xFF, 0xFC, 0x30, - 0xE1, 0x87, 0x0C, 0x18, 0x60, 0xC1, 0x80, 0x3C, 0xFF, 0x1E, 0x3E, 0xEF, - 0xBF, 0xE3, 0xC7, 0xFD, 0xF0, 0x38, 0xFB, 0x1E, 0x3C, 0x7F, 0xDF, 0x87, - 0x1C, 0xF1, 0xC0, 0xFF, 0x80, 0x3F, 0xE0, 0x77, 0x70, 0x00, 0x06, 0x66, - 0xCC, 0x06, 0x3E, 0xF8, 0xC0, 0xF8, 0x3F, 0x06, 0xFF, 0xFF, 0x00, 0x00, - 0xFF, 0xFF, 0x60, 0x7C, 0x1F, 0x03, 0x1F, 0xFC, 0x60, 0x7D, 0xFC, 0x18, - 0x30, 0xC3, 0x0C, 0x18, 0x00, 0x70, 0xE1, 0xC0, 0x0F, 0xC0, 0x7F, 0xC3, - 0x83, 0x98, 0x06, 0xE7, 0xCF, 0x3F, 0x3D, 0x8C, 0xF6, 0x33, 0xD8, 0xCF, - 0xBF, 0xE6, 0x7F, 0x1E, 0x00, 0x3F, 0xC0, 0x3F, 0x00, 0x0E, 0x01, 0xC0, - 0x7C, 0x0D, 0x83, 0xB8, 0x63, 0x0C, 0x63, 0xFE, 0x7F, 0xCC, 0x1B, 0x01, - 0x80, 0xFC, 0x7F, 0xB0, 0xD8, 0x6F, 0xE7, 0xFB, 0x07, 0x83, 0xC3, 0xFF, - 0xBF, 0x80, 0x1F, 0x1F, 0xD8, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0x60, - 0x3F, 0xC7, 0xC0, 0xFE, 0x3F, 0xCC, 0x3B, 0x07, 0xC0, 0xF0, 0x3C, 0x0F, - 0x07, 0xC3, 0xBF, 0xCF, 0xE0, 0xFF, 0xFF, 0xC0, 0xC0, 0xFE, 0xFE, 0xC0, - 0xC0, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xC0, 0xFE, 0xFE, 0xC0, 0xC0, - 0xC0, 0xC0, 0xC0, 0x1F, 0x1F, 0xD8, 0x18, 0x0C, 0x06, 0x0F, 0x07, 0x83, - 0x71, 0xBF, 0xC7, 0xE0, 0xC1, 0xE0, 0xF0, 0x78, 0x3F, 0xFF, 0xFF, 0x07, - 0x83, 0xC1, 0xE0, 0xF0, 0x60, 0xFF, 0xFF, 0xFC, 0x06, 0x0C, 0x18, 0x30, - 0x60, 0xC1, 0x83, 0x07, 0xF9, 0xE0, 0xC1, 0xB0, 0xCC, 0x63, 0x30, 0xF8, - 0x3C, 0x0D, 0x83, 0x30, 0xC6, 0x30, 0xCC, 0x18, 0xC0, 0xC0, 0xC0, 0xC0, - 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0x60, 0x33, 0x83, 0x9C, 0x1C, - 0xF1, 0xED, 0x8D, 0xEE, 0xEF, 0x36, 0x79, 0xF3, 0xC7, 0x1E, 0x38, 0xF0, - 0x06, 0xC0, 0xF8, 0x3F, 0x0F, 0xE3, 0xDC, 0xF3, 0xBC, 0x7F, 0x0F, 0xC1, - 0xF0, 0x7C, 0x0C, 0x1F, 0x07, 0xF1, 0xC7, 0x70, 0x7C, 0x07, 0x80, 0xF0, - 0x1F, 0x07, 0x71, 0xCF, 0xF8, 0x7C, 0x00, 0xFC, 0xFE, 0xC3, 0xC3, 0xC3, - 0xFE, 0xFC, 0xC0, 0xC0, 0xC0, 0xC0, 0x1F, 0x07, 0xF1, 0xC7, 0x70, 0x7C, - 0x07, 0x80, 0xF0, 0x1F, 0x07, 0x71, 0xCF, 0xF0, 0xF8, 0x07, 0x00, 0x7C, - 0x07, 0x80, 0xFC, 0x7F, 0x30, 0xD8, 0x6C, 0x37, 0xF3, 0xE1, 0x98, 0xC6, - 0x63, 0xB0, 0xE0, 0x3D, 0xFF, 0x06, 0x0F, 0x0F, 0x87, 0x83, 0x07, 0xFD, - 0xF0, 0xFF, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xE3, 0xBF, 0x8F, - 0x80, 0xC0, 0x6C, 0x19, 0x83, 0x38, 0xE3, 0x18, 0x63, 0x06, 0xC0, 0xD8, - 0x0E, 0x01, 0xC0, 0x38, 0x00, 0xC0, 0x07, 0x87, 0x0D, 0x8E, 0x33, 0x1C, - 0x66, 0x6C, 0xC6, 0xDB, 0x0D, 0xB6, 0x1B, 0x6C, 0x1C, 0x70, 0x38, 0xE0, - 0x71, 0xC0, 0xE0, 0xEC, 0x18, 0xC6, 0x0D, 0x80, 0xE0, 0x1C, 0x03, 0x80, - 0xD8, 0x31, 0x8C, 0x1B, 0x83, 0x80, 0xC0, 0xD8, 0x67, 0x38, 0xCC, 0x1E, - 0x07, 0x80, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0xFF, 0xFF, 0x06, 0x0C, - 0x1C, 0x18, 0x30, 0x70, 0x60, 0xFF, 0xFF, 0xFF, 0xF1, 0x8C, 0x63, 0x18, - 0xC6, 0x31, 0x8C, 0x63, 0xFF, 0xC1, 0xC1, 0x83, 0x06, 0x06, 0x0C, 0x18, - 0x18, 0x30, 0x60, 0x60, 0xC1, 0x83, 0x83, 0xFF, 0xC6, 0x31, 0x8C, 0x63, - 0x18, 0xC6, 0x31, 0x8F, 0xFF, 0x08, 0x0E, 0x0F, 0x86, 0xC7, 0x77, 0x1D, - 0x04, 0xFF, 0xFF, 0x4E, 0x72, 0x7C, 0xFC, 0x1B, 0xFF, 0xF8, 0xFF, 0xBF, - 0xC1, 0x83, 0x06, 0x0F, 0x9F, 0xB3, 0xE3, 0xC7, 0x9F, 0xF7, 0xC0, 0x3D, - 0xFE, 0x30, 0xC3, 0x87, 0xCF, 0x06, 0x0C, 0x18, 0x33, 0xEF, 0xF9, 0xE3, - 0xC7, 0xCD, 0xF9, 0xF0, 0x38, 0xFB, 0x1F, 0xFF, 0xF8, 0x1F, 0x1E, 0x7F, - 0xF1, 0x8F, 0xFF, 0x18, 0xC6, 0x31, 0x80, 0x3E, 0xFF, 0x9E, 0x3C, 0x7C, - 0xDF, 0x9F, 0x06, 0xFB, 0xE0, 0xC1, 0x83, 0x06, 0x0F, 0xDF, 0xF1, 0xE3, - 0xC7, 0x8F, 0x1E, 0x30, 0xFC, 0xFF, 0xFF, 0x33, 0x30, 0x33, 0x33, 0x33, - 0x33, 0x3F, 0xE0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC6, 0xCC, 0xD8, 0xF0, 0xD8, - 0xCC, 0xC6, 0xC7, 0xDB, 0x6D, 0xB6, 0xDB, 0xB0, 0xFD, 0xEF, 0xFF, 0xC6, - 0x3C, 0x63, 0xC6, 0x3C, 0x63, 0xC6, 0x3C, 0x63, 0xFD, 0xFF, 0x1E, 0x3C, - 0x78, 0xF1, 0xE3, 0x3C, 0x7E, 0xE7, 0xC3, 0xC3, 0xE7, 0x7E, 0x3C, 0xF9, - 0xFB, 0x3E, 0x3C, 0x79, 0xFF, 0x7C, 0xC1, 0x83, 0x00, 0x3E, 0xFF, 0x9E, - 0x3C, 0x7C, 0xDF, 0xBF, 0x06, 0x0C, 0x18, 0xFF, 0xF1, 0x8C, 0x63, 0x18, - 0x7F, 0xEC, 0x3E, 0x7C, 0x3F, 0xFE, 0xC6, 0x3F, 0xFC, 0x63, 0x18, 0xFB, - 0xC0, 0xC7, 0x8F, 0x1E, 0x3C, 0x78, 0xFF, 0xBF, 0xC1, 0xB1, 0x98, 0xCE, - 0xE3, 0x61, 0xF0, 0x70, 0x38, 0xC6, 0x79, 0xCD, 0xBB, 0x35, 0x66, 0xAC, - 0x77, 0x0E, 0xE1, 0x8C, 0xE3, 0xBB, 0x8D, 0x83, 0x81, 0xC1, 0xB1, 0xDD, - 0xC7, 0xE3, 0xB1, 0x98, 0xCE, 0xE3, 0x61, 0xF0, 0x70, 0x38, 0x18, 0x7C, - 0x3C, 0x00, 0xFF, 0xF1, 0x8E, 0x71, 0x8F, 0xFF, 0x3B, 0xD8, 0xC6, 0x31, - 0x98, 0xC3, 0x18, 0xC6, 0x31, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x8C, - 0x63, 0x18, 0xC3, 0x19, 0x8C, 0x63, 0x1B, 0xDC, 0x73, 0xFF, 0xCE }; - -const GFXglyph Ubuntu_Bold8pt7bGlyphs[] PROGMEM = { - { 0, 0, 0, 4, 0, 1 }, // 0x20 ' ' - { 0, 2, 11, 4, 1, -10 }, // 0x21 '!' - { 3, 5, 5, 7, 1, -11 }, // 0x22 '"' - { 7, 9, 11, 11, 1, -10 }, // 0x23 '#' - { 20, 7, 15, 9, 1, -12 }, // 0x24 '$' - { 34, 14, 11, 16, 1, -10 }, // 0x25 '%' - { 54, 10, 11, 11, 1, -10 }, // 0x26 '&' - { 68, 2, 5, 4, 1, -11 }, // 0x27 ''' - { 70, 4, 16, 6, 1, -12 }, // 0x28 '(' - { 78, 4, 16, 6, 1, -12 }, // 0x29 ')' - { 86, 7, 7, 8, 1, -10 }, // 0x2A '*' - { 93, 8, 8, 10, 1, -8 }, // 0x2B '+' - { 101, 3, 5, 4, 0, -1 }, // 0x2C ',' - { 103, 5, 2, 7, 1, -5 }, // 0x2D '-' - { 105, 3, 3, 5, 1, -2 }, // 0x2E '.' - { 107, 7, 16, 7, 0, -12 }, // 0x2F '/' - { 121, 7, 11, 9, 1, -10 }, // 0x30 '0' - { 131, 5, 11, 9, 1, -10 }, // 0x31 '1' - { 138, 7, 11, 9, 1, -10 }, // 0x32 '2' - { 148, 7, 11, 9, 1, -10 }, // 0x33 '3' - { 158, 8, 11, 9, 1, -10 }, // 0x34 '4' - { 169, 7, 11, 9, 1, -10 }, // 0x35 '5' - { 179, 7, 11, 9, 1, -10 }, // 0x36 '6' - { 189, 7, 11, 9, 1, -10 }, // 0x37 '7' - { 199, 7, 11, 9, 1, -10 }, // 0x38 '8' - { 209, 7, 11, 9, 1, -10 }, // 0x39 '9' - { 219, 3, 9, 5, 1, -8 }, // 0x3A ':' - { 223, 4, 12, 5, 0, -8 }, // 0x3B ';' - { 229, 8, 7, 9, 1, -7 }, // 0x3C '<' - { 236, 8, 6, 10, 1, -7 }, // 0x3D '=' - { 242, 8, 7, 9, 0, -7 }, // 0x3E '>' - { 249, 7, 12, 7, 0, -11 }, // 0x3F '?' - { 260, 14, 14, 16, 1, -10 }, // 0x40 '@' - { 285, 11, 11, 11, 0, -10 }, // 0x41 'A' - { 301, 9, 11, 11, 1, -10 }, // 0x42 'B' - { 314, 9, 11, 11, 1, -10 }, // 0x43 'C' - { 327, 10, 11, 12, 1, -10 }, // 0x44 'D' - { 341, 8, 11, 10, 1, -10 }, // 0x45 'E' - { 352, 8, 11, 9, 1, -10 }, // 0x46 'F' - { 363, 9, 11, 11, 1, -10 }, // 0x47 'G' - { 376, 9, 11, 11, 1, -10 }, // 0x48 'H' - { 389, 2, 11, 4, 1, -10 }, // 0x49 'I' - { 392, 7, 11, 8, 0, -10 }, // 0x4A 'J' - { 402, 10, 11, 11, 1, -10 }, // 0x4B 'K' - { 416, 8, 11, 9, 1, -10 }, // 0x4C 'L' - { 427, 13, 11, 15, 1, -10 }, // 0x4D 'M' - { 445, 10, 11, 12, 1, -10 }, // 0x4E 'N' - { 459, 11, 11, 13, 1, -10 }, // 0x4F 'O' - { 475, 8, 11, 10, 1, -10 }, // 0x50 'P' - { 486, 11, 14, 13, 1, -10 }, // 0x51 'Q' - { 506, 9, 11, 10, 1, -10 }, // 0x52 'R' - { 519, 7, 11, 9, 1, -10 }, // 0x53 'S' - { 529, 8, 11, 8, 0, -10 }, // 0x54 'T' - { 540, 9, 11, 11, 1, -10 }, // 0x55 'U' - { 553, 11, 11, 11, 0, -10 }, // 0x56 'V' - { 569, 15, 11, 15, 0, -10 }, // 0x57 'W' - { 590, 11, 11, 11, 0, -10 }, // 0x58 'X' - { 606, 10, 11, 10, 0, -10 }, // 0x59 'Y' - { 620, 8, 11, 10, 1, -10 }, // 0x5A 'Z' - { 631, 5, 16, 6, 1, -12 }, // 0x5B '[' - { 641, 7, 16, 7, 0, -12 }, // 0x5C '\' - { 655, 5, 16, 6, 0, -12 }, // 0x5D ']' - { 665, 9, 7, 9, 0, -10 }, // 0x5E '^' - { 673, 8, 2, 8, 0, 2 }, // 0x5F '_' - { 675, 4, 4, 5, 1, -12 }, // 0x60 '`' - { 677, 7, 8, 9, 1, -7 }, // 0x61 'a' - { 684, 7, 12, 9, 1, -11 }, // 0x62 'b' - { 695, 6, 8, 8, 1, -7 }, // 0x63 'c' - { 701, 7, 12, 9, 1, -11 }, // 0x64 'd' - { 712, 7, 8, 9, 1, -7 }, // 0x65 'e' - { 719, 5, 12, 6, 1, -11 }, // 0x66 'f' - { 727, 7, 11, 9, 1, -7 }, // 0x67 'g' - { 737, 7, 12, 9, 1, -11 }, // 0x68 'h' - { 748, 2, 12, 4, 1, -11 }, // 0x69 'i' - { 751, 4, 15, 4, -1, -11 }, // 0x6A 'j' - { 759, 8, 12, 9, 1, -11 }, // 0x6B 'k' - { 771, 3, 12, 4, 1, -11 }, // 0x6C 'l' - { 776, 12, 8, 14, 1, -7 }, // 0x6D 'm' - { 788, 7, 8, 9, 1, -7 }, // 0x6E 'n' - { 795, 8, 8, 10, 1, -7 }, // 0x6F 'o' - { 803, 7, 11, 9, 1, -7 }, // 0x70 'p' - { 813, 7, 11, 9, 1, -7 }, // 0x71 'q' - { 823, 5, 8, 6, 1, -7 }, // 0x72 'r' - { 828, 6, 8, 8, 1, -7 }, // 0x73 's' - { 834, 5, 10, 7, 1, -9 }, // 0x74 't' - { 841, 7, 8, 9, 1, -7 }, // 0x75 'u' - { 848, 9, 8, 9, 0, -7 }, // 0x76 'v' - { 857, 11, 8, 11, 0, -7 }, // 0x77 'w' - { 868, 9, 8, 9, 0, -7 }, // 0x78 'x' - { 877, 9, 11, 9, 0, -7 }, // 0x79 'y' - { 890, 6, 8, 8, 1, -7 }, // 0x7A 'z' - { 896, 5, 16, 5, 0, -12 }, // 0x7B '{' - { 906, 2, 16, 4, 1, -12 }, // 0x7C '|' - { 910, 5, 16, 5, 0, -12 }, // 0x7D '}' - { 920, 8, 3, 9, 1, -5 } }; // 0x7E '~' - -const GFXfont Ubuntu_Bold8pt7b PROGMEM = { - (uint8_t *)Ubuntu_Bold8pt7bBitmaps, - (GFXglyph *)Ubuntu_Bold8pt7bGlyphs, - 0x20, 0x7E, 18 }; - -// Approx. 1595 bytes diff --git a/lib/obp60task/Atari16px8b.h b/lib/obp60task/fonts/Atari16px8b.h similarity index 100% rename from lib/obp60task/Atari16px8b.h rename to lib/obp60task/fonts/Atari16px8b.h diff --git a/lib/obp60task/DSEG7Classic-BoldItalic.zip b/lib/obp60task/fonts/DSEG7Classic-BoldItalic.zip similarity index 100% rename from lib/obp60task/DSEG7Classic-BoldItalic.zip rename to lib/obp60task/fonts/DSEG7Classic-BoldItalic.zip diff --git a/lib/obp60task/DSEG7Classic-BoldItalic16pt7b.h b/lib/obp60task/fonts/DSEG7Classic-BoldItalic16pt7b.h similarity index 100% rename from lib/obp60task/DSEG7Classic-BoldItalic16pt7b.h rename to lib/obp60task/fonts/DSEG7Classic-BoldItalic16pt7b.h diff --git a/lib/obp60task/DSEG7Classic-BoldItalic20pt7b.h b/lib/obp60task/fonts/DSEG7Classic-BoldItalic20pt7b.h similarity index 100% rename from lib/obp60task/DSEG7Classic-BoldItalic20pt7b.h rename to lib/obp60task/fonts/DSEG7Classic-BoldItalic20pt7b.h diff --git a/lib/obp60task/DSEG7Classic-BoldItalic26pt7b.h b/lib/obp60task/fonts/DSEG7Classic-BoldItalic26pt7b.h similarity index 100% rename from lib/obp60task/DSEG7Classic-BoldItalic26pt7b.h rename to lib/obp60task/fonts/DSEG7Classic-BoldItalic26pt7b.h diff --git a/lib/obp60task/DSEG7Classic-BoldItalic30pt7b.h b/lib/obp60task/fonts/DSEG7Classic-BoldItalic30pt7b.h similarity index 100% rename from lib/obp60task/DSEG7Classic-BoldItalic30pt7b.h rename to lib/obp60task/fonts/DSEG7Classic-BoldItalic30pt7b.h diff --git a/lib/obp60task/DSEG7Classic-BoldItalic42pt7b.h b/lib/obp60task/fonts/DSEG7Classic-BoldItalic42pt7b.h similarity index 100% rename from lib/obp60task/DSEG7Classic-BoldItalic42pt7b.h rename to lib/obp60task/fonts/DSEG7Classic-BoldItalic42pt7b.h diff --git a/lib/obp60task/DSEG7Classic-BoldItalic60pt7b.h b/lib/obp60task/fonts/DSEG7Classic-BoldItalic60pt7b.h similarity index 100% rename from lib/obp60task/DSEG7Classic-BoldItalic60pt7b.h rename to lib/obp60task/fonts/DSEG7Classic-BoldItalic60pt7b.h diff --git a/lib/obp60task/Seven_Segment.zip b/lib/obp60task/fonts/Seven_Segment.zip similarity index 100% rename from lib/obp60task/Seven_Segment.zip rename to lib/obp60task/fonts/Seven_Segment.zip diff --git a/lib/obp60task/Ubuntu_Bold.zip b/lib/obp60task/fonts/Ubuntu_Bold.zip similarity index 100% rename from lib/obp60task/Ubuntu_Bold.zip rename to lib/obp60task/fonts/Ubuntu_Bold.zip diff --git a/lib/obp60task/fonts/Ubuntu_Bold10pt8b.h b/lib/obp60task/fonts/Ubuntu_Bold10pt8b.h new file mode 100644 index 0000000..915dac0 --- /dev/null +++ b/lib/obp60task/fonts/Ubuntu_Bold10pt8b.h @@ -0,0 +1,485 @@ +const uint8_t Ubuntu_Bold10pt8bBitmaps[] PROGMEM = { + 0x00, 0xFF, 0xFF, 0xFF, 0xE3, 0xFF, 0xC0, 0xEF, 0xDF, 0xBF, 0x7E, 0xFD, + 0xC0, 0x0E, 0xE0, 0xEE, 0x1D, 0xCF, 0xFF, 0xFF, 0xF1, 0xDC, 0x1D, 0xC3, + 0xB8, 0xFF, 0xFF, 0xFF, 0x3B, 0x83, 0xB8, 0x77, 0x07, 0x70, 0x1C, 0x0E, + 0x0F, 0xCF, 0xEE, 0x07, 0x03, 0x81, 0xFC, 0x7F, 0x0F, 0xC0, 0xE0, 0x74, + 0x3F, 0xF9, 0xF8, 0x38, 0x1C, 0x00, 0x38, 0x38, 0x7C, 0x70, 0xC6, 0x70, + 0xC6, 0xE0, 0xC6, 0xE0, 0xC7, 0xC0, 0x7D, 0xDC, 0x3B, 0xBE, 0x03, 0xE3, + 0x07, 0x63, 0x07, 0x63, 0x0E, 0x63, 0x0E, 0x3E, 0x1C, 0x1C, 0x1E, 0x01, + 0xF8, 0x1F, 0xE0, 0xE7, 0x07, 0x38, 0x1F, 0x80, 0xF8, 0x0F, 0xCE, 0xEF, + 0x77, 0x3F, 0x38, 0xF9, 0xFF, 0xC7, 0xFF, 0x1F, 0xBC, 0xFF, 0xFF, 0xC0, + 0x08, 0x73, 0x8E, 0x71, 0xCE, 0x38, 0xE3, 0x8E, 0x38, 0xE3, 0x87, 0x1C, + 0x38, 0xE1, 0xC2, 0x43, 0x87, 0x1C, 0x38, 0xE1, 0xC7, 0x1C, 0x71, 0xC7, + 0x1C, 0x73, 0x8E, 0x71, 0xCE, 0x10, 0x1C, 0x0E, 0x17, 0x5F, 0xFF, 0xF9, + 0xB1, 0xDC, 0x6C, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x0F, 0xFF, 0xFF, 0xFF, + 0xF8, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x00, 0x77, 0x77, 0xEE, 0xFF, 0xFF, + 0xC0, 0x6F, 0xF6, 0x01, 0xC0, 0xE0, 0x38, 0x0E, 0x07, 0x01, 0xC0, 0x70, + 0x38, 0x0E, 0x03, 0x81, 0xC0, 0x70, 0x1C, 0x0E, 0x03, 0x80, 0xE0, 0x70, + 0x1C, 0x07, 0x03, 0x80, 0x1C, 0x3F, 0x9F, 0xDE, 0xFE, 0x3F, 0x1F, 0x8F, + 0xC7, 0xE3, 0xF1, 0xFD, 0xEF, 0xE7, 0xF0, 0xE0, 0x0E, 0x3D, 0xFF, 0xF6, + 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC0, 0x3E, 0x7F, 0xBF, + 0xEC, 0x70, 0x38, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1F, 0xFF, 0xFF, + 0xFC, 0x3C, 0x7F, 0x3F, 0xC8, 0xE0, 0x70, 0x30, 0xF0, 0x7E, 0x07, 0x81, + 0xE0, 0xFF, 0xFF, 0xF3, 0xF0, 0x07, 0x07, 0x87, 0xC3, 0xE3, 0xF3, 0xB9, + 0x9D, 0xCE, 0xFF, 0xFF, 0xFF, 0xE0, 0xE0, 0x70, 0x38, 0x3F, 0x1F, 0x8F, + 0xC7, 0x03, 0x83, 0xF1, 0xFC, 0xFF, 0x07, 0x81, 0xC0, 0xFF, 0xFF, 0xF3, + 0xE0, 0x07, 0x0F, 0x8F, 0xCF, 0x07, 0x07, 0xF3, 0xFD, 0xFF, 0xE3, 0xF1, + 0xF8, 0xEF, 0xF7, 0xF1, 0xF0, 0xFF, 0xFF, 0xFF, 0xE0, 0xE0, 0xE0, 0x70, + 0x70, 0x38, 0x38, 0x1C, 0x0E, 0x0E, 0x07, 0x03, 0x80, 0x3E, 0x3F, 0xBF, + 0xFC, 0x7E, 0x3F, 0xB9, 0xF8, 0xFE, 0xE7, 0xF1, 0xF8, 0xFF, 0xF7, 0xF1, + 0xF0, 0x3E, 0x3F, 0xBF, 0xDC, 0x7E, 0x3F, 0x1F, 0xFE, 0xFF, 0x3F, 0x83, + 0xC3, 0xCF, 0xC7, 0xC3, 0x80, 0x6F, 0xF6, 0x00, 0x06, 0xFF, 0x60, 0x33, + 0xDE, 0x60, 0x00, 0x00, 0x73, 0x9C, 0xEE, 0x70, 0x01, 0x87, 0xEF, 0xFF, + 0xF8, 0xE0, 0x3F, 0x8F, 0xFC, 0x7E, 0x01, 0x80, 0xFF, 0xFF, 0xFF, 0xE0, + 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0x60, 0x3E, 0x3F, 0xE3, 0xF0, 0x38, 0xFF, + 0xFE, 0xF8, 0x60, 0x00, 0x7C, 0xFE, 0xFF, 0x07, 0x07, 0x07, 0x0E, 0x1E, + 0x3C, 0x38, 0x38, 0x00, 0x30, 0x78, 0x78, 0x30, 0x03, 0xF0, 0x07, 0xFE, + 0x0F, 0x03, 0x86, 0x00, 0xE6, 0x1F, 0xB7, 0x3F, 0xCF, 0x3C, 0xE7, 0x9C, + 0x73, 0xCE, 0x39, 0xE7, 0x1C, 0xF3, 0xCE, 0x5C, 0xFF, 0xE6, 0x3F, 0xE3, + 0x80, 0x00, 0xF0, 0x00, 0x3F, 0xE0, 0x07, 0xF8, 0x00, 0x03, 0x80, 0x0F, + 0x80, 0x1F, 0x00, 0x77, 0x00, 0xEE, 0x03, 0xDE, 0x07, 0x1C, 0x1E, 0x3C, + 0x3F, 0xF8, 0x7F, 0xF1, 0xFF, 0xF3, 0x80, 0xE7, 0x01, 0xDC, 0x01, 0xC0, + 0xFE, 0x3F, 0xCF, 0xFB, 0x8E, 0xE3, 0xBF, 0xCF, 0xF3, 0xFE, 0xE1, 0xF8, + 0x7E, 0x1F, 0xFF, 0xFF, 0xBF, 0x80, 0x0F, 0xC7, 0xFD, 0xFF, 0xBC, 0x2F, + 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1E, 0x01, 0xE0, 0x3F, 0xF3, 0xFE, + 0x1F, 0x80, 0xFF, 0x0F, 0xFC, 0xFF, 0xEE, 0x1E, 0xE0, 0xFE, 0x07, 0xE0, + 0x7E, 0x07, 0xE0, 0x7E, 0x0F, 0xE1, 0xEF, 0xFE, 0xFF, 0xCF, 0xF0, 0xFF, + 0xFF, 0xFF, 0xFC, 0x0E, 0x07, 0xFB, 0xFD, 0xFE, 0xE0, 0x70, 0x38, 0x1F, + 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xE0, 0xE0, 0xFE, 0xFE, 0xFE, 0xE0, + 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x0F, 0xC7, 0xFD, 0xFF, 0xBC, 0x2F, 0x01, + 0xC0, 0x38, 0x07, 0x07, 0xE0, 0xFE, 0x1D, 0xE3, 0xBF, 0xF3, 0xFE, 0x1F, + 0x80, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xC0, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xC0, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, + 0x03, 0x81, 0xD1, 0xEF, 0xFF, 0xF3, 0xF0, 0xE0, 0xFE, 0x1E, 0xE3, 0xCE, + 0x78, 0xEF, 0x0F, 0xE0, 0xFC, 0x0F, 0xC0, 0xEE, 0x0E, 0x70, 0xE7, 0x8E, + 0x3C, 0xE1, 0xEE, 0x0F, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, + 0xC0, 0xE0, 0x70, 0x38, 0x1F, 0xFF, 0xFF, 0xFC, 0x70, 0x1C, 0xF0, 0x79, + 0xE0, 0xF3, 0xE3, 0xE7, 0xC7, 0xDD, 0x8D, 0xFB, 0xBB, 0xF3, 0x67, 0xE7, + 0xCF, 0xCF, 0x9F, 0x8E, 0x3F, 0x1C, 0x7E, 0x00, 0xFC, 0x01, 0xC0, 0xE0, + 0xFE, 0x1F, 0xC3, 0xFC, 0x7F, 0xCF, 0xD9, 0xFB, 0xBF, 0x3F, 0xE7, 0xFC, + 0x7F, 0x87, 0xF0, 0xFE, 0x0F, 0xC1, 0xC0, 0x0F, 0xC0, 0xFF, 0xC7, 0xFF, + 0x9E, 0x1E, 0xF0, 0x3F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0xC0, + 0xF7, 0x87, 0x9F, 0xFE, 0x3F, 0xF0, 0x3F, 0x00, 0xFE, 0x3F, 0xEF, 0xFF, + 0x87, 0xE1, 0xF8, 0x7F, 0xFF, 0xFE, 0xFE, 0x38, 0x0E, 0x03, 0x80, 0xE0, + 0x38, 0x00, 0x0F, 0xC0, 0xFF, 0xC7, 0xFF, 0x9E, 0x1E, 0xF0, 0x3F, 0x80, + 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0xC0, 0xF7, 0x87, 0x9F, 0xFE, 0x3F, + 0xF0, 0x3F, 0x00, 0x3C, 0x00, 0x7E, 0x00, 0x78, 0xFE, 0x1F, 0xF3, 0xFF, + 0x70, 0xEE, 0x1D, 0xC3, 0xBF, 0xF7, 0xFC, 0xFF, 0x1C, 0xF3, 0x8E, 0x70, + 0xEE, 0x1D, 0xC1, 0xC0, 0x3F, 0x1F, 0xEF, 0xFB, 0x80, 0xE0, 0x3E, 0x07, + 0xF0, 0x7E, 0x03, 0xC0, 0x74, 0x1F, 0xFF, 0xFF, 0x9F, 0xC0, 0xFF, 0xFF, + 0xFF, 0xFF, 0x87, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, + 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x00, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, + 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0xC7, 0xBF, 0xE7, 0xFC, + 0x3E, 0x00, 0xE0, 0x0E, 0xE0, 0x39, 0xC0, 0x71, 0xC1, 0xC3, 0x83, 0x87, + 0x07, 0x07, 0x1C, 0x0E, 0x38, 0x0E, 0xE0, 0x1D, 0xC0, 0x1F, 0x00, 0x3E, + 0x00, 0x7C, 0x00, 0x70, 0x00, 0xE0, 0x00, 0xFC, 0x1C, 0x1D, 0xC3, 0x87, + 0x38, 0x78, 0xE7, 0x1F, 0x1C, 0xE3, 0x63, 0x8E, 0x6C, 0xE1, 0xDD, 0xDC, + 0x3B, 0xBB, 0x83, 0x63, 0x60, 0x7C, 0x7C, 0x0F, 0x8F, 0x81, 0xE0, 0xF0, + 0x1C, 0x1C, 0x00, 0xF0, 0x3D, 0xE1, 0xE3, 0x87, 0x07, 0x38, 0x1F, 0xE0, + 0x3F, 0x00, 0x78, 0x01, 0xE0, 0x0F, 0xC0, 0x7F, 0x81, 0xCE, 0x0E, 0x1C, + 0x78, 0x7B, 0xC0, 0xF0, 0xE0, 0x3B, 0x83, 0x9C, 0x1C, 0x71, 0xC3, 0xDE, + 0x0E, 0xE0, 0x3E, 0x01, 0xF0, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, + 0x70, 0x03, 0x80, 0xFF, 0xFF, 0xFF, 0xFC, 0x0E, 0x07, 0x03, 0x80, 0xE0, + 0x70, 0x38, 0x1E, 0x07, 0x03, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xCE, + 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0xFF, 0xF0, 0xE0, 0x1C, + 0x07, 0x01, 0xC0, 0x38, 0x0E, 0x03, 0x80, 0x70, 0x1C, 0x07, 0x00, 0xE0, + 0x38, 0x0E, 0x01, 0xC0, 0x70, 0x1C, 0x03, 0x80, 0xE0, 0x38, 0x07, 0xFF, + 0xFE, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0x3F, 0xFF, 0xF0, + 0x0E, 0x03, 0xE0, 0x7C, 0x1D, 0xC7, 0xBC, 0xE3, 0xB8, 0x3B, 0x06, 0xFF, + 0xFF, 0xF0, 0x47, 0x1E, 0x20, 0x7E, 0x3F, 0x9F, 0xE0, 0x73, 0xFB, 0xFF, + 0x8F, 0xC7, 0xFF, 0xBF, 0xCF, 0xE0, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, + 0x3F, 0xCF, 0xFB, 0xFE, 0xE3, 0xF8, 0x7E, 0x1F, 0x87, 0xE3, 0xFF, 0xEF, + 0xFB, 0xF8, 0x1F, 0x3F, 0x7F, 0xF0, 0xE0, 0xE0, 0xE0, 0xF0, 0x7F, 0x7F, + 0x1F, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC7, 0xF7, 0xFD, 0xFF, 0xF1, + 0xF8, 0x7E, 0x1F, 0x87, 0xF1, 0xDF, 0xF7, 0xFC, 0x7F, 0x1F, 0x1F, 0xE7, + 0xFF, 0x87, 0xFF, 0xFF, 0xFE, 0x03, 0xC0, 0x7F, 0x9F, 0xE1, 0xF8, 0x3F, + 0x7E, 0xFE, 0xE0, 0xE0, 0xFE, 0xFE, 0xFE, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, + 0xE0, 0xE0, 0xE0, 0x1F, 0xDF, 0xF7, 0xFF, 0xC7, 0xE1, 0xF8, 0x7F, 0x1F, + 0xFF, 0x7F, 0xCF, 0xF0, 0x1C, 0x0F, 0x7F, 0x9F, 0xE7, 0xE0, 0xE0, 0x38, + 0x0E, 0x03, 0x80, 0xE0, 0x3F, 0xCF, 0xFB, 0xFF, 0xE3, 0xF8, 0x7E, 0x1F, + 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, + 0x1C, 0x71, 0xC7, 0x00, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, + 0x1F, 0xFF, 0xBC, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC3, 0xB8, + 0xE7, 0x38, 0xEE, 0x1F, 0x83, 0xF8, 0x77, 0x8E, 0x79, 0xC7, 0x38, 0x77, + 0x07, 0xE7, 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x7F, 0xE7, 0xFE, + 0xF9, 0xFF, 0xFB, 0xFF, 0xFF, 0x1C, 0x7E, 0x38, 0xFC, 0x71, 0xF8, 0xE3, + 0xF1, 0xC7, 0xE3, 0x8F, 0xC7, 0x1F, 0x8E, 0x38, 0xFF, 0x3F, 0xEF, 0xFF, + 0x8F, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1C, 0x1E, 0x1F, + 0xE7, 0xFB, 0xCF, 0xE1, 0xF8, 0x7E, 0x1F, 0xCF, 0x7F, 0x9F, 0xE1, 0xE0, + 0xFE, 0x3F, 0xEF, 0xFB, 0x8F, 0xE1, 0xF8, 0x7E, 0x1F, 0x8F, 0xFF, 0xBF, + 0xEF, 0xF3, 0x80, 0xE0, 0x38, 0x0E, 0x00, 0x1F, 0xDF, 0xF7, 0xFF, 0xC7, + 0xE1, 0xF8, 0x7E, 0x1F, 0xC7, 0x7F, 0xDF, 0xF3, 0xFC, 0x07, 0x01, 0xC0, + 0x70, 0x1C, 0x7F, 0xFF, 0xFF, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x80, + 0x3E, 0xFE, 0xE0, 0xE0, 0xF8, 0x7E, 0x1F, 0x07, 0x87, 0xFF, 0xFC, 0xE1, + 0xC3, 0x87, 0xFF, 0xFF, 0xF8, 0x70, 0xE1, 0xC3, 0x87, 0xF7, 0xE7, 0xC0, + 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0xC7, 0xFF, 0xDF, + 0xF3, 0xFC, 0xE0, 0xFE, 0x1D, 0xC7, 0x38, 0xE7, 0xBC, 0x77, 0x0E, 0xE1, + 0xFC, 0x1F, 0x03, 0xE0, 0x38, 0x00, 0xE3, 0x8F, 0xC7, 0x1D, 0x8E, 0x33, + 0x9E, 0xE7, 0x7D, 0xCE, 0xDB, 0x8D, 0xB6, 0x1F, 0x7C, 0x3C, 0x78, 0x38, + 0xE0, 0x71, 0xC0, 0xF1, 0xEF, 0x78, 0xEE, 0x1F, 0xC1, 0xF0, 0x1C, 0x07, + 0xC1, 0xFC, 0x3B, 0x8F, 0x7B, 0xC7, 0x80, 0xE0, 0xFC, 0x1D, 0xC7, 0x38, + 0xE7, 0x1C, 0x77, 0x0E, 0xE1, 0xFC, 0x1F, 0x03, 0xE0, 0x7C, 0x0F, 0x0F, + 0xE1, 0xF8, 0x3E, 0x00, 0xFF, 0xFF, 0xFF, 0x0E, 0x1C, 0x38, 0x38, 0x70, + 0xFF, 0xFF, 0xFF, 0x0E, 0x3C, 0xF9, 0xC3, 0x87, 0x0E, 0x1C, 0x79, 0xE3, + 0xC7, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x7C, 0xF8, 0x70, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xE1, 0xE3, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, + 0x3C, 0x3C, 0x79, 0xF3, 0x87, 0x0E, 0x1C, 0x39, 0xF3, 0xE7, 0x00, 0x30, + 0x9F, 0x3F, 0xFF, 0x3E, 0x43, 0x00, 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, + 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF, 0x00, 0xFF, 0xF1, + 0xFF, 0xFF, 0xFF, 0xF8, 0x1C, 0x1C, 0x1C, 0x3F, 0x7F, 0x7F, 0xF0, 0xE0, + 0xE0, 0xF0, 0xFF, 0x7F, 0x3F, 0x1C, 0x1C, 0x1C, 0x0F, 0x87, 0xF3, 0xFC, + 0xF0, 0x38, 0x0E, 0x0F, 0xF3, 0xFC, 0xFF, 0x0E, 0x03, 0x80, 0xFF, 0x3F, + 0xDF, 0xF0, 0x40, 0xBF, 0xF7, 0xF9, 0xCE, 0x61, 0x98, 0x67, 0x39, 0xFE, + 0xFF, 0xD0, 0x20, 0xE0, 0xEE, 0x39, 0xC7, 0x1D, 0xC3, 0xB8, 0x3E, 0x1F, + 0xF3, 0xFE, 0x0E, 0x01, 0xC1, 0xFF, 0x3F, 0xE0, 0xE0, 0x1C, 0x00, 0xFF, + 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x3E, 0x7F, 0xFF, 0xE0, 0xE0, + 0x7C, 0xFE, 0xEF, 0xE7, 0xE7, 0xF7, 0x7E, 0x1E, 0x07, 0x07, 0xFF, 0xFF, + 0x7C, 0xEF, 0xDF, 0xB8, 0x0F, 0xC0, 0x7F, 0x83, 0x87, 0x18, 0x06, 0xE7, + 0xDF, 0x3F, 0x3C, 0xC0, 0xF3, 0x03, 0xCF, 0xCF, 0x9F, 0x76, 0x01, 0x8E, + 0x1C, 0x1F, 0xE0, 0x3F, 0x00, 0x7C, 0xFC, 0x19, 0xFF, 0xF8, 0xFF, 0xBF, + 0x10, 0x8E, 0x77, 0xBD, 0xCE, 0xF7, 0x9C, 0xE7, 0xBC, 0xE7, 0x10, 0x80, + 0xFF, 0xFF, 0xFF, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0xFF, 0xFF, 0xC0, + 0x0F, 0xC0, 0x7F, 0x83, 0x87, 0x18, 0x06, 0xEF, 0x9F, 0x33, 0x3C, 0xFC, + 0xF3, 0xE3, 0xCD, 0xCF, 0xB3, 0x76, 0x01, 0x8E, 0x1C, 0x1F, 0xE0, 0x3F, + 0x00, 0xFF, 0xF0, 0x7B, 0xFC, 0xF3, 0xFD, 0xE0, 0x0E, 0x01, 0xC0, 0x38, + 0x07, 0x0F, 0xFF, 0xFF, 0xFF, 0xF8, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x00, + 0x0F, 0xFF, 0xFF, 0xFF, 0xF8, 0x7B, 0xF0, 0xC7, 0x31, 0x8F, 0xFF, 0x7B, + 0xF0, 0xCF, 0x3C, 0x3F, 0xFE, 0x11, 0xFC, 0x80, 0xE1, 0xF8, 0x7E, 0x1F, + 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xE0, + 0x38, 0x0E, 0x00, 0x1F, 0xF7, 0xFF, 0xFE, 0x7F, 0xE7, 0xFE, 0x7F, 0xE7, + 0xFE, 0x77, 0xE7, 0x1E, 0x70, 0xE7, 0x0E, 0x70, 0xE7, 0x0E, 0x70, 0xE7, + 0x0E, 0x70, 0xE7, 0x0E, 0x70, 0xE7, 0x6F, 0xF6, 0x63, 0xBF, 0x37, 0xFB, + 0x33, 0x33, 0x3C, 0x7E, 0xE7, 0xC3, 0xC3, 0xE7, 0x7E, 0x3C, 0x42, 0x39, + 0xCF, 0x79, 0xCE, 0x7B, 0xDC, 0xEF, 0x7B, 0x9C, 0x42, 0x00, 0x30, 0x30, + 0x70, 0x70, 0xF0, 0x60, 0xB0, 0xE0, 0x31, 0xC0, 0x31, 0xC0, 0x33, 0x8E, + 0x33, 0x9E, 0x07, 0x36, 0x07, 0x26, 0x0E, 0x7F, 0x0E, 0x7F, 0x1C, 0x06, + 0x1C, 0x06, 0x30, 0x30, 0xE0, 0xE3, 0xC1, 0x85, 0x87, 0x03, 0x1C, 0x06, + 0x38, 0x0C, 0xEF, 0x19, 0xFF, 0x07, 0x06, 0x0E, 0x1C, 0x38, 0x60, 0x71, + 0x81, 0xC7, 0xE3, 0x8F, 0xC0, 0x78, 0x0C, 0x7E, 0x0E, 0x03, 0x06, 0x07, + 0x87, 0x03, 0xC7, 0x00, 0x63, 0x83, 0xF3, 0x9D, 0xF1, 0xDE, 0x01, 0xDB, + 0x00, 0xE9, 0x80, 0xEF, 0xE0, 0x77, 0xF0, 0x70, 0x30, 0x38, 0x18, 0x0C, + 0x1E, 0x1E, 0x0C, 0x00, 0x1C, 0x1C, 0x3C, 0x78, 0x70, 0xE0, 0xE0, 0xFF, + 0x7F, 0x3E, 0x02, 0x00, 0x0E, 0x00, 0x0F, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x70, 0x01, 0xF0, 0x03, 0xE0, 0x0E, 0xE0, 0x1D, 0xC0, 0x7B, 0xC0, 0xE3, + 0x83, 0xC7, 0x87, 0xFF, 0x0F, 0xFE, 0x3F, 0xFE, 0x70, 0x1C, 0xE0, 0x3B, + 0x80, 0x38, 0x00, 0x80, 0x03, 0x80, 0x1E, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x70, 0x01, 0xF0, 0x03, 0xE0, 0x0E, 0xE0, 0x1D, 0xC0, 0x7B, 0xC0, 0xE3, + 0x83, 0xC7, 0x87, 0xFF, 0x0F, 0xFE, 0x3F, 0xFE, 0x70, 0x1C, 0xE0, 0x3B, + 0x80, 0x38, 0x01, 0x00, 0x07, 0x00, 0x1F, 0x00, 0x77, 0x00, 0x44, 0x00, + 0x00, 0x00, 0xE0, 0x03, 0xE0, 0x07, 0xC0, 0x1D, 0xC0, 0x3B, 0x80, 0xF7, + 0x81, 0xC7, 0x07, 0x8F, 0x0F, 0xFE, 0x1F, 0xFC, 0x7F, 0xFC, 0xE0, 0x39, + 0xC0, 0x77, 0x00, 0x70, 0x06, 0x40, 0x1F, 0xC0, 0x13, 0x00, 0x00, 0x00, + 0x38, 0x00, 0xF8, 0x01, 0xF0, 0x07, 0x70, 0x0E, 0xE0, 0x3D, 0xE0, 0x71, + 0xC1, 0xE3, 0xC3, 0xFF, 0x87, 0xFF, 0x1F, 0xFF, 0x38, 0x0E, 0x70, 0x1D, + 0xC0, 0x1C, 0x0E, 0xE0, 0x1D, 0xC0, 0x3B, 0x80, 0x00, 0x00, 0x38, 0x00, + 0xF8, 0x01, 0xF0, 0x07, 0x70, 0x0E, 0xE0, 0x3D, 0xE0, 0x71, 0xC1, 0xE3, + 0xC3, 0xFF, 0x87, 0xFF, 0x1F, 0xFF, 0x38, 0x0E, 0x70, 0x1D, 0xC0, 0x1C, + 0x03, 0x80, 0x0D, 0x80, 0x1B, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x03, + 0xF8, 0x07, 0x70, 0x0E, 0xE0, 0x38, 0xE0, 0x71, 0xC1, 0xE3, 0xC3, 0xFF, + 0x87, 0xFF, 0x1F, 0xFF, 0x38, 0x0E, 0x70, 0x1D, 0xC0, 0x1C, 0x00, 0x7F, + 0xE0, 0x1F, 0xFC, 0x07, 0xFF, 0x80, 0xFC, 0x00, 0x3B, 0x80, 0x0E, 0x7F, + 0x81, 0xCF, 0xF0, 0x71, 0xFE, 0x1F, 0xF8, 0x03, 0xFF, 0x00, 0xFF, 0xE0, + 0x1C, 0x1F, 0xF7, 0x03, 0xFF, 0xC0, 0x7F, 0xC0, 0x0F, 0xC7, 0xFD, 0xFF, + 0xBC, 0x2F, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1E, 0x01, 0xE0, 0x3F, + 0xF3, 0xFE, 0x1F, 0x81, 0x80, 0x18, 0x0F, 0x01, 0xC0, 0x10, 0x1C, 0x07, + 0x80, 0x80, 0x07, 0xFF, 0xFF, 0xFF, 0xE0, 0x70, 0x3F, 0xDF, 0xEF, 0xF7, + 0x03, 0x81, 0xC0, 0xFF, 0xFF, 0xFF, 0xE0, 0x04, 0x07, 0x0F, 0x02, 0x00, + 0x07, 0xFF, 0xFF, 0xFF, 0xE0, 0x70, 0x3F, 0xDF, 0xEF, 0xF7, 0x03, 0x81, + 0xC0, 0xFF, 0xFF, 0xFF, 0xE0, 0x08, 0x0E, 0x0F, 0x8E, 0xE2, 0x20, 0x03, + 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0x1F, 0xEF, 0xF7, 0xFB, 0x81, 0xC0, 0xE0, + 0x7F, 0xFF, 0xFF, 0xF0, 0x77, 0x3B, 0x9D, 0xC0, 0x0F, 0xFF, 0xFF, 0xFF, + 0xC0, 0xE0, 0x7F, 0xBF, 0xDF, 0xEE, 0x07, 0x03, 0x81, 0xFF, 0xFF, 0xFF, + 0xC0, 0x47, 0x1E, 0x20, 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x73, + 0x9C, 0x11, 0xFC, 0x80, 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x73, + 0x9C, 0x10, 0x71, 0xF7, 0x74, 0x40, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, + 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC0, 0xEF, 0xDF, 0xB8, 0x03, 0x87, + 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0x3F, + 0xC0, 0xFF, 0xC3, 0xFF, 0x8E, 0x1E, 0x38, 0x3C, 0xE0, 0x7F, 0xF1, 0xFF, + 0xC7, 0x38, 0x1C, 0xE0, 0xF3, 0x87, 0x8F, 0xFE, 0x3F, 0xF0, 0xFF, 0x00, + 0x19, 0x07, 0xF0, 0x4C, 0x00, 0x0E, 0x0F, 0xE1, 0xFC, 0x3F, 0xC7, 0xFC, + 0xFD, 0x9F, 0xBB, 0xF3, 0xFE, 0x7F, 0xC7, 0xF8, 0x7F, 0x0F, 0xE0, 0xFC, + 0x1C, 0x04, 0x00, 0x38, 0x00, 0x78, 0x00, 0x40, 0x00, 0x00, 0x3F, 0x03, + 0xFF, 0x1F, 0xFE, 0x78, 0x7B, 0xC0, 0xFE, 0x01, 0xF8, 0x07, 0xE0, 0x1F, + 0x80, 0x7F, 0x03, 0xDE, 0x1E, 0x7F, 0xF8, 0xFF, 0xC0, 0xFC, 0x00, 0x00, + 0x80, 0x07, 0x00, 0x78, 0x00, 0x80, 0x00, 0x00, 0x3F, 0x03, 0xFF, 0x1F, + 0xFE, 0x78, 0x7B, 0xC0, 0xFE, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7F, + 0x03, 0xDE, 0x1E, 0x7F, 0xF8, 0xFF, 0xC0, 0xFC, 0x00, 0x01, 0x00, 0x0E, + 0x00, 0x7C, 0x03, 0xB8, 0x04, 0x40, 0x00, 0x00, 0xFC, 0x0F, 0xFC, 0x7F, + 0xF9, 0xE1, 0xEF, 0x03, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xFC, + 0x0F, 0x78, 0x79, 0xFF, 0xE3, 0xFF, 0x03, 0xF0, 0x06, 0x40, 0x3F, 0x80, + 0x4C, 0x00, 0x00, 0x0F, 0xC0, 0xFF, 0xC7, 0xFF, 0x9E, 0x1E, 0xF0, 0x3F, + 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0xC0, 0xF7, 0x87, 0x9F, 0xFE, + 0x3F, 0xF0, 0x3F, 0x00, 0x1D, 0xC0, 0x77, 0x01, 0xDC, 0x00, 0x00, 0x0F, + 0xC0, 0xFF, 0xC7, 0xFF, 0x9E, 0x1E, 0xF0, 0x3F, 0x80, 0x7E, 0x01, 0xF8, + 0x07, 0xE0, 0x1F, 0xC0, 0xF7, 0x87, 0x9F, 0xFE, 0x3F, 0xF0, 0x3F, 0x00, + 0x41, 0x71, 0xDD, 0xC7, 0xC1, 0xC1, 0xF1, 0xDD, 0xC7, 0x41, 0x00, 0x00, + 0x00, 0x3F, 0x63, 0xFF, 0x9F, 0xFE, 0x78, 0xFB, 0xC3, 0xFE, 0x1D, 0xF8, + 0xE7, 0xE7, 0x1F, 0xB8, 0x7F, 0xC3, 0xDE, 0x1E, 0x7F, 0xF9, 0xFF, 0xC6, + 0xFC, 0x00, 0x00, 0x10, 0x07, 0x00, 0x78, 0x02, 0x00, 0x01, 0xC1, 0xF8, + 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, + 0x8F, 0x7F, 0xCF, 0xF8, 0x7C, 0x00, 0x02, 0x00, 0xE0, 0x78, 0x04, 0x00, + 0x01, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, + 0xC1, 0xF8, 0x3F, 0x8F, 0x7F, 0xCF, 0xF8, 0x7C, 0x00, 0x04, 0x01, 0xC0, + 0x7C, 0x1D, 0xC1, 0x10, 0x00, 0x38, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x83, + 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xF1, 0xEF, 0xF9, 0xFF, 0x0F, + 0x80, 0x3B, 0x87, 0x70, 0xEE, 0x00, 0x0E, 0x0F, 0xC1, 0xF8, 0x3F, 0x07, + 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xFC, 0x7B, 0xFE, 0x7F, + 0xC3, 0xE0, 0x01, 0x00, 0x1C, 0x03, 0xC0, 0x08, 0x00, 0x00, 0x70, 0x1D, + 0xC1, 0xCE, 0x0E, 0x38, 0xE1, 0xEF, 0x07, 0x70, 0x1F, 0x00, 0xF8, 0x03, + 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x01, 0xC0, 0xE0, 0x38, 0x0F, + 0xE3, 0xFE, 0xFF, 0xF8, 0x7E, 0x1F, 0x87, 0xFF, 0xFF, 0xEF, 0xE3, 0x80, + 0xE0, 0x38, 0x00, 0x3E, 0x0F, 0xE3, 0xFE, 0x71, 0xCE, 0x39, 0xCF, 0x39, + 0xC7, 0x70, 0xEF, 0x1D, 0xF3, 0x8F, 0x70, 0x7E, 0x0F, 0xDF, 0xFB, 0xF7, + 0x7C, 0x10, 0x1C, 0x07, 0x80, 0x80, 0x03, 0xF1, 0xFC, 0xFF, 0x03, 0x9F, + 0xDF, 0xFC, 0x7E, 0x3F, 0xFD, 0xFE, 0x7F, 0x04, 0x07, 0x0F, 0x02, 0x00, + 0x03, 0xF1, 0xFC, 0xFF, 0x03, 0x9F, 0xDF, 0xFC, 0x7E, 0x3F, 0xFD, 0xFE, + 0x7F, 0x08, 0x0E, 0x0F, 0x8E, 0xE2, 0x20, 0x01, 0xF8, 0xFE, 0x7F, 0x81, + 0xCF, 0xEF, 0xFE, 0x3F, 0x1F, 0xFE, 0xFF, 0x3F, 0x80, 0x32, 0x3F, 0x89, + 0x80, 0x07, 0xE3, 0xF9, 0xFE, 0x07, 0x3F, 0xBF, 0xF8, 0xFC, 0x7F, 0xFB, + 0xFC, 0xFE, 0x77, 0x3B, 0x9D, 0xC0, 0x07, 0xE3, 0xF9, 0xFE, 0x07, 0x3F, + 0xBF, 0xF8, 0xFC, 0x7F, 0xFB, 0xFC, 0xFE, 0x1E, 0x1F, 0x8C, 0xC6, 0x63, + 0xF0, 0xF1, 0xF8, 0xFE, 0x7F, 0x81, 0xCF, 0xEF, 0xFE, 0x3F, 0x1F, 0xFE, + 0xFF, 0x3F, 0x80, 0x7E, 0x78, 0xFF, 0xF9, 0xFF, 0xF8, 0x1C, 0x73, 0xFF, + 0xEF, 0xFF, 0xF8, 0xE0, 0x71, 0xE0, 0xFF, 0xFC, 0xFF, 0xF8, 0xF9, 0xF0, + 0x1E, 0x7F, 0x7E, 0xF0, 0xE0, 0xE0, 0xE0, 0xF0, 0x7F, 0x3F, 0x0F, 0x0C, + 0x0C, 0x3C, 0x38, 0x10, 0x0E, 0x01, 0xE0, 0x10, 0x00, 0x07, 0xC7, 0xF9, + 0xFF, 0xE1, 0xFF, 0xFF, 0xFF, 0x80, 0xF0, 0x1F, 0xE7, 0xF8, 0x7E, 0x02, + 0x01, 0xC1, 0xE0, 0x20, 0x00, 0x07, 0xC7, 0xF9, 0xFF, 0xE1, 0xFF, 0xFF, + 0xFF, 0x80, 0xF0, 0x1F, 0xE7, 0xF8, 0x7E, 0x08, 0x07, 0x03, 0xE1, 0xDC, + 0x22, 0x00, 0x01, 0xF1, 0xFE, 0x7F, 0xF8, 0x7F, 0xFF, 0xFF, 0xE0, 0x3C, + 0x07, 0xF9, 0xFE, 0x1F, 0x80, 0x3B, 0x8E, 0xE3, 0xB8, 0x00, 0x1F, 0x1F, + 0xE7, 0xFF, 0x87, 0xFF, 0xFF, 0xFE, 0x03, 0xC0, 0x7F, 0x9F, 0xE1, 0xF8, + 0x47, 0x1E, 0x20, 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x11, 0xFC, + 0x80, 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x10, 0x71, 0xF7, 0x74, + 0x40, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0xEF, + 0xDF, 0xB8, 0x03, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, + 0x00, 0x0C, 0x07, 0xB0, 0x7C, 0x7E, 0x0B, 0x80, 0x73, 0xFD, 0xFF, 0xFF, + 0xFC, 0x7E, 0x1F, 0x87, 0xE3, 0x9F, 0xE7, 0xF0, 0x78, 0x19, 0x0F, 0xE1, + 0x30, 0x00, 0xFF, 0x3F, 0xEF, 0xFF, 0x8F, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, + 0xE1, 0xF8, 0x7E, 0x1C, 0x10, 0x0E, 0x01, 0xE0, 0x10, 0x00, 0x07, 0x87, + 0xF9, 0xFE, 0xF3, 0xF8, 0x7E, 0x1F, 0x87, 0xF3, 0xDF, 0xE7, 0xF8, 0x78, + 0x02, 0x01, 0xC1, 0xE0, 0x20, 0x00, 0x07, 0x87, 0xF9, 0xFE, 0xF3, 0xF8, + 0x7E, 0x1F, 0x87, 0xF3, 0xDF, 0xE7, 0xF8, 0x78, 0x08, 0x07, 0x03, 0xE1, + 0xDC, 0x22, 0x00, 0x01, 0xE1, 0xFE, 0x7F, 0xBC, 0xFE, 0x1F, 0x87, 0xE1, + 0xFC, 0xF7, 0xF9, 0xFE, 0x1E, 0x00, 0x19, 0x0F, 0xE1, 0x30, 0x00, 0x1E, + 0x1F, 0xE7, 0xFB, 0xCF, 0xE1, 0xF8, 0x7E, 0x1F, 0xCF, 0x7F, 0x9F, 0xE1, + 0xE0, 0x77, 0x1D, 0xC7, 0x70, 0x00, 0x1E, 0x1F, 0xE7, 0xFB, 0xCF, 0xE1, + 0xF8, 0x7E, 0x1F, 0xCF, 0x7F, 0x9F, 0xE1, 0xE0, 0x1C, 0x0E, 0x07, 0x00, + 0x0F, 0xFF, 0xFF, 0xFE, 0x00, 0x1C, 0x0E, 0x07, 0x00, 0x00, 0x07, 0xB7, + 0xF9, 0xFE, 0xF7, 0xF9, 0xFE, 0xDF, 0xE7, 0xFB, 0xDF, 0xE7, 0xFB, 0x78, + 0x00, 0x00, 0x10, 0x0E, 0x01, 0xE0, 0x10, 0x00, 0x38, 0x7E, 0x1F, 0x87, + 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xF1, 0xFF, 0xF7, 0xFC, 0xFF, 0x02, 0x01, + 0xC1, 0xE0, 0x20, 0x00, 0x38, 0x7E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, + 0x87, 0xF1, 0xFF, 0xF7, 0xFC, 0xFF, 0x04, 0x03, 0x81, 0xF0, 0xEE, 0x11, + 0x00, 0x0E, 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0x87, 0xE1, 0xFC, 0x7F, + 0xFD, 0xFF, 0x3F, 0xC0, 0x77, 0x1D, 0xC7, 0x70, 0x00, 0xE1, 0xF8, 0x7E, + 0x1F, 0x87, 0xE1, 0xF8, 0x7E, 0x1F, 0xC7, 0xFF, 0xDF, 0xF3, 0xFC, 0x01, + 0x00, 0x70, 0x3C, 0x02, 0x00, 0x01, 0xC1, 0xF8, 0x3B, 0x8E, 0x71, 0xCE, + 0x38, 0xEE, 0x1D, 0xC3, 0xF8, 0x3E, 0x07, 0xC0, 0xF8, 0x1E, 0x1F, 0xC3, + 0xF0, 0x7C, 0x00, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x3F, 0x8F, 0xFB, + 0xFE, 0xE3, 0xF8, 0x7E, 0x1F, 0x87, 0xE3, 0xFF, 0xEF, 0xFB, 0xFC, 0xE0, + 0x38, 0x0E, 0x03, 0x80, 0x3B, 0x87, 0x70, 0xEE, 0x00, 0x0E, 0x0F, 0xC1, + 0xDC, 0x73, 0x8E, 0x71, 0xC7, 0x70, 0xEE, 0x1F, 0xC1, 0xF0, 0x3E, 0x07, + 0xC0, 0xF0, 0xFE, 0x1F, 0x83, 0xE0, 0x00 }; + +const GFXglyph Ubuntu_Bold10pt8bGlyphs[] PROGMEM = { + { 0, 1, 1, 5, 0, 0 }, // 0x20 ' ' U+0020 + { 1, 3, 14, 5, 1, -13 }, // 0x21 '!' U+0021 + { 7, 7, 6, 9, 1, -14 }, // 0x22 '"' U+0022 + { 13, 12, 14, 14, 1, -13 }, // 0x23 '#' U+0023 + { 34, 9, 17, 11, 1, -14 }, // 0x24 '$' U+0024 + { 54, 16, 14, 18, 1, -13 }, // 0x25 '%' U+0025 + { 82, 13, 14, 14, 1, -13 }, // 0x26 '&' U+0026 + { 105, 3, 6, 5, 1, -14 }, // 0x27 ''' U+0027 + { 108, 6, 20, 7, 1, -15 }, // 0x28 '(' U+0028 + { 123, 6, 20, 7, 0, -15 }, // 0x29 ')' U+0029 + { 138, 9, 8, 10, 1, -13 }, // 0x2a '*' U+002A + { 147, 11, 11, 13, 1, -11 }, // 0x2b '+' U+002B + { 163, 4, 6, 5, 0, -2 }, // 0x2c ',' U+002C + { 166, 6, 3, 8, 1, -7 }, // 0x2d '-' U+002D + { 169, 4, 4, 6, 1, -3 }, // 0x2e '.' U+002E + { 171, 10, 20, 9, -1, -15 }, // 0x2f '/' U+002F + { 196, 9, 14, 11, 1, -13 }, // 0x30 '0' U+0030 + { 212, 7, 14, 11, 1, -13 }, // 0x31 '1' U+0031 + { 225, 9, 14, 11, 1, -13 }, // 0x32 '2' U+0032 + { 241, 9, 14, 11, 1, -13 }, // 0x33 '3' U+0033 + { 257, 9, 14, 11, 1, -13 }, // 0x34 '4' U+0034 + { 273, 9, 14, 11, 1, -13 }, // 0x35 '5' U+0035 + { 289, 9, 14, 11, 1, -13 }, // 0x36 '6' U+0036 + { 305, 9, 14, 11, 1, -13 }, // 0x37 '7' U+0037 + { 321, 9, 14, 11, 1, -13 }, // 0x38 '8' U+0038 + { 337, 9, 14, 11, 1, -13 }, // 0x39 '9' U+0039 + { 353, 4, 11, 6, 1, -10 }, // 0x3a ':' U+003A + { 359, 5, 14, 6, 0, -10 }, // 0x3b ';' U+003B + { 368, 10, 9, 11, 1, -9 }, // 0x3c '<' U+003C + { 380, 9, 8, 11, 1, -9 }, // 0x3d '=' U+003D + { 389, 9, 9, 11, 1, -9 }, // 0x3e '>' U+003E + { 400, 8, 16, 9, 0, -15 }, // 0x3f '?' U+003F + { 416, 17, 17, 19, 1, -13 }, // 0x40 '@' U+0040 + { 453, 15, 14, 15, 0, -13 }, // 0x41 'A' U+0041 + { 480, 10, 14, 13, 2, -13 }, // 0x42 'B' U+0042 + { 498, 11, 14, 13, 1, -13 }, // 0x43 'C' U+0043 + { 518, 12, 14, 15, 2, -13 }, // 0x44 'D' U+0044 + { 539, 9, 14, 12, 2, -13 }, // 0x45 'E' U+0045 + { 555, 8, 14, 11, 2, -13 }, // 0x46 'F' U+0046 + { 569, 11, 14, 14, 1, -13 }, // 0x47 'G' U+0047 + { 589, 11, 14, 15, 2, -13 }, // 0x48 'H' U+0048 + { 609, 3, 14, 7, 2, -13 }, // 0x49 'I' U+0049 + { 615, 9, 14, 11, 0, -13 }, // 0x4a 'J' U+004A + { 631, 12, 14, 14, 2, -13 }, // 0x4b 'K' U+004B + { 652, 9, 14, 11, 2, -13 }, // 0x4c 'L' U+004C + { 668, 15, 14, 17, 1, -13 }, // 0x4d 'M' U+004D + { 695, 11, 14, 15, 2, -13 }, // 0x4e 'N' U+004E + { 715, 14, 14, 16, 1, -13 }, // 0x4f 'O' U+004F + { 740, 10, 14, 13, 2, -13 }, // 0x50 'P' U+0050 + { 758, 14, 17, 16, 1, -13 }, // 0x51 'Q' U+0051 + { 788, 11, 14, 13, 2, -13 }, // 0x52 'R' U+0052 + { 808, 10, 14, 12, 1, -13 }, // 0x53 'S' U+0053 + { 826, 11, 14, 11, 0, -13 }, // 0x54 'T' U+0054 + { 846, 11, 14, 15, 2, -13 }, // 0x55 'U' U+0055 + { 866, 15, 14, 15, 0, -13 }, // 0x56 'V' U+0056 + { 893, 19, 14, 19, 0, -13 }, // 0x57 'W' U+0057 + { 927, 14, 14, 14, 0, -13 }, // 0x58 'X' U+0058 + { 952, 13, 14, 13, 0, -13 }, // 0x59 'Y' U+0059 + { 975, 10, 14, 12, 1, -13 }, // 0x5a 'Z' U+005A + { 993, 5, 20, 7, 2, -15 }, // 0x5b '[' U+005B + { 1006, 10, 20, 9, -1, -15 }, // 0x5c '\' U+005C + { 1031, 5, 20, 7, 0, -15 }, // 0x5d ']' U+005D + { 1044, 11, 8, 11, 0, -13 }, // 0x5e '^' U+005E + { 1055, 10, 2, 10, 0, 3 }, // 0x5f '_' U+005F + { 1058, 5, 4, 6, 1, -15 }, // 0x60 '`' U+0060 + { 1061, 9, 11, 11, 1, -10 }, // 0x61 'a' U+0061 + { 1074, 10, 16, 12, 1, -15 }, // 0x62 'b' U+0062 + { 1094, 8, 11, 10, 1, -10 }, // 0x63 'c' U+0063 + { 1105, 10, 16, 12, 1, -15 }, // 0x64 'd' U+0064 + { 1125, 10, 11, 12, 1, -10 }, // 0x65 'e' U+0065 + { 1139, 8, 16, 8, 1, -15 }, // 0x66 'f' U+0066 + { 1155, 10, 15, 12, 1, -10 }, // 0x67 'g' U+0067 + { 1174, 10, 16, 12, 1, -15 }, // 0x68 'h' U+0068 + { 1194, 3, 16, 5, 1, -15 }, // 0x69 'i' U+0069 + { 1200, 6, 20, 5, -2, -15 }, // 0x6a 'j' U+006A + { 1215, 11, 16, 12, 1, -15 }, // 0x6b 'k' U+006B + { 1237, 5, 16, 6, 1, -15 }, // 0x6c 'l' U+006C + { 1247, 15, 11, 17, 1, -10 }, // 0x6d 'm' U+006D + { 1268, 10, 11, 12, 1, -10 }, // 0x6e 'n' U+006E + { 1282, 10, 11, 12, 1, -10 }, // 0x6f 'o' U+006F + { 1296, 10, 15, 12, 1, -10 }, // 0x70 'p' U+0070 + { 1315, 10, 15, 12, 1, -10 }, // 0x71 'q' U+0071 + { 1334, 7, 11, 8, 1, -10 }, // 0x72 'r' U+0072 + { 1344, 8, 11, 10, 1, -10 }, // 0x73 's' U+0073 + { 1355, 7, 14, 9, 1, -13 }, // 0x74 't' U+0074 + { 1368, 10, 11, 12, 1, -10 }, // 0x75 'u' U+0075 + { 1382, 11, 11, 11, 0, -10 }, // 0x76 'v' U+0076 + { 1398, 15, 11, 15, 0, -10 }, // 0x77 'w' U+0077 + { 1419, 11, 11, 11, 0, -10 }, // 0x78 'x' U+0078 + { 1435, 11, 15, 11, 0, -10 }, // 0x79 'y' U+0079 + { 1456, 8, 11, 10, 1, -10 }, // 0x7a 'z' U+007A + { 1467, 7, 20, 8, 1, -15 }, // 0x7b '{' U+007B + { 1485, 3, 20, 7, 2, -15 }, // 0x7c '|' U+007C + { 1493, 7, 20, 8, 0, -15 }, // 0x7d '}' U+007D + { 1511, 10, 5, 11, 1, -8 }, // 0x7e '~' U+007E + { 1518, 8, 15, 10, 1, -14 }, // 0x7f 'REPLACEMENT CHARACTER *' U+2370 + { 1533, 1, 1, 5, 0, 0 }, // 0x80 'NO-BREAK SPACE' U+00A0 + { 1534, 3, 15, 5, 1, -10 }, // 0x81 'INVERTED EXCLAMATION MARK' U+00A1 + { 1540, 8, 16, 11, 1, -13 }, // 0x82 'CENT SIGN' U+00A2 + { 1556, 10, 14, 11, 0, -13 }, // 0x83 'POUND SIGN' U+00A3 + { 1574, 10, 10, 11, 1, -11 }, // 0x84 'CURRENCY SIGN' U+00A4 + { 1587, 11, 14, 11, 0, -13 }, // 0x85 'YEN SIGN' U+00A5 + { 1607, 3, 20, 6, 2, -15 }, // 0x86 'BROKEN BAR' U+00A6 + { 1615, 8, 18, 10, 1, -13 }, // 0x87 'SECTION SIGN' U+00A7 + { 1633, 7, 3, 11, 2, -14 }, // 0x88 'DIAERESIS' U+00A8 + { 1636, 14, 14, 16, 1, -13 }, // 0x89 'COPYRIGHT SIGN' U+00A9 + { 1661, 7, 8, 8, 0, -13 }, // 0x8a 'FEMININE ORDINAL INDICATOR' U+00AA + { 1668, 10, 9, 12, 0, -9 }, // 0x8b 'LEFT-POINTING DOUBLE ANGLE QUOTATION MARK' U+00AB + { 1680, 9, 8, 11, 1, -8 }, // 0x8c 'NOT SIGN' U+00AC + { 1689, 6, 3, 8, 1, -7 }, // 0x8d 'SOFT HYPHEN' U+00AD + { 1692, 14, 14, 16, 1, -13 }, // 0x8e 'REGISTERED SIGN' U+00AE + { 1717, 6, 2, 8, 1, -13 }, // 0x8f 'MACRON' U+00AF + { 1719, 6, 6, 6, 0, -15 }, // 0x90 'DEGREE SIGN' U+00B0 + { 1724, 11, 15, 13, 1, -14 }, // 0x91 'PLUS-MINUS SIGN' U+00B1 + { 1745, 6, 8, 7, 0, -13 }, // 0x92 'SUPERSCRIPT TWO' U+00B2 + { 1751, 6, 8, 7, 0, -13 }, // 0x93 'SUPERSCRIPT THREE' U+00B3 + { 1757, 5, 4, 6, 0, -15 }, // 0x94 'ACUTE ACCENT' U+00B4 + { 1760, 10, 15, 12, 1, -10 }, // 0x95 'MICRO SIGN' U+00B5 + { 1779, 12, 18, 14, 1, -13 }, // 0x96 'PILCROW SIGN' U+00B6 + { 1806, 4, 4, 6, 1, -7 }, // 0x97 'MIDDLE DOT' U+00B7 + { 1808, 4, 4, 7, 1, 1 }, // 0x98 'CEDILLA' U+00B8 + { 1810, 4, 8, 7, 1, -13 }, // 0x99 'SUPERSCRIPT ONE' U+00B9 + { 1814, 8, 8, 10, 1, -13 }, // 0x9a 'MASCULINE ORDINAL INDICATOR' U+00BA + { 1822, 10, 9, 12, 2, -9 }, // 0x9b 'RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK' U+00BB + { 1834, 16, 14, 18, 1, -13 }, // 0x9c 'VULGAR FRACTION ONE QUARTER' U+00BC + { 1862, 15, 14, 18, 1, -13 }, // 0x9d 'VULGAR FRACTION ONE HALF' U+00BD + { 1889, 17, 14, 18, 0, -13 }, // 0x9e 'VULGAR FRACTION THREE QUARTERS' U+00BE + { 1919, 8, 15, 9, 1, -10 }, // 0x9f 'INVERTED QUESTION MARK' U+00BF + { 1934, 15, 19, 15, 0, -18 }, // 0xa0 'LATIN CAPITAL LETTER A WITH GRAVE' U+00C0 + { 1970, 15, 19, 15, 0, -18 }, // 0xa1 'LATIN CAPITAL LETTER A WITH ACUTE' U+00C1 + { 2006, 15, 20, 15, 0, -19 }, // 0xa2 'LATIN CAPITAL LETTER A WITH CIRCUMFLEX' U+00C2 + { 2044, 15, 18, 15, 0, -17 }, // 0xa3 'LATIN CAPITAL LETTER A WITH TILDE' U+00C3 + { 2078, 15, 18, 15, 0, -17 }, // 0xa4 'LATIN CAPITAL LETTER A WITH DIAERESIS' U+00C4 + { 2112, 15, 18, 15, 0, -17 }, // 0xa5 'LATIN CAPITAL LETTER A WITH RING ABOVE' U+00C5 + { 2146, 19, 14, 20, 0, -13 }, // 0xa6 'LATIN CAPITAL LETTER AE' U+00C6 + { 2180, 11, 18, 13, 1, -13 }, // 0xa7 'LATIN CAPITAL LETTER C WITH CEDILLA' U+00C7 + { 2205, 9, 19, 12, 2, -18 }, // 0xa8 'LATIN CAPITAL LETTER E WITH GRAVE' U+00C8 + { 2227, 9, 19, 12, 2, -18 }, // 0xa9 'LATIN CAPITAL LETTER E WITH ACUTE' U+00C9 + { 2249, 9, 20, 12, 2, -19 }, // 0xaa 'LATIN CAPITAL LETTER E WITH CIRCUMFLEX' U+00CA + { 2272, 9, 18, 12, 2, -17 }, // 0xab 'LATIN CAPITAL LETTER E WITH DIAERESIS' U+00CB + { 2293, 5, 19, 7, 1, -18 }, // 0xac 'LATIN CAPITAL LETTER I WITH GRAVE' U+00CC + { 2305, 5, 19, 7, 1, -18 }, // 0xad 'LATIN CAPITAL LETTER I WITH ACUTE' U+00CD + { 2317, 7, 20, 7, 0, -19 }, // 0xae 'LATIN CAPITAL LETTER I WITH CIRCUMFLEX' U+00CE + { 2335, 7, 18, 7, 0, -17 }, // 0xaf 'LATIN CAPITAL LETTER I WITH DIAERESIS' U+00CF + { 2351, 14, 14, 15, 0, -13 }, // 0xb0 'LATIN CAPITAL LETTER ETH' U+00D0 + { 2376, 11, 18, 15, 2, -17 }, // 0xb1 'LATIN CAPITAL LETTER N WITH TILDE' U+00D1 + { 2401, 14, 19, 16, 1, -18 }, // 0xb2 'LATIN CAPITAL LETTER O WITH GRAVE' U+00D2 + { 2435, 14, 19, 16, 1, -18 }, // 0xb3 'LATIN CAPITAL LETTER O WITH ACUTE' U+00D3 + { 2469, 14, 20, 16, 1, -19 }, // 0xb4 'LATIN CAPITAL LETTER O WITH CIRCUMFLEX' U+00D4 + { 2504, 14, 18, 16, 1, -17 }, // 0xb5 'LATIN CAPITAL LETTER O WITH TILDE' U+00D5 + { 2536, 14, 18, 16, 1, -17 }, // 0xb6 'LATIN CAPITAL LETTER O WITH DIAERESIS' U+00D6 + { 2568, 9, 9, 11, 1, -10 }, // 0xb7 'MULTIPLICATION SIGN' U+00D7 + { 2579, 14, 16, 16, 1, -14 }, // 0xb8 'LATIN CAPITAL LETTER O WITH STROKE' U+00D8 + { 2607, 11, 19, 15, 2, -18 }, // 0xb9 'LATIN CAPITAL LETTER U WITH GRAVE' U+00D9 + { 2634, 11, 19, 15, 2, -18 }, // 0xba 'LATIN CAPITAL LETTER U WITH ACUTE' U+00DA + { 2661, 11, 20, 15, 2, -19 }, // 0xbb 'LATIN CAPITAL LETTER U WITH CIRCUMFLEX' U+00DB + { 2689, 11, 18, 15, 2, -17 }, // 0xbc 'LATIN CAPITAL LETTER U WITH DIAERESIS' U+00DC + { 2714, 13, 19, 13, 0, -18 }, // 0xbd 'LATIN CAPITAL LETTER Y WITH ACUTE' U+00DD + { 2745, 10, 14, 13, 2, -13 }, // 0xbe 'LATIN CAPITAL LETTER THORN' U+00DE + { 2763, 11, 16, 13, 1, -15 }, // 0xbf 'LATIN SMALL LETTER SHARP S' U+00DF + { 2785, 9, 16, 11, 1, -15 }, // 0xc0 'LATIN SMALL LETTER A WITH GRAVE' U+00E0 + { 2803, 9, 16, 11, 1, -15 }, // 0xc1 'LATIN SMALL LETTER A WITH ACUTE' U+00E1 + { 2821, 9, 17, 11, 1, -16 }, // 0xc2 'LATIN SMALL LETTER A WITH CIRCUMFLEX' U+00E2 + { 2841, 9, 15, 11, 1, -14 }, // 0xc3 'LATIN SMALL LETTER A WITH TILDE' U+00E3 + { 2858, 9, 15, 11, 1, -14 }, // 0xc4 'LATIN SMALL LETTER A WITH DIAERESIS' U+00E4 + { 2875, 9, 17, 11, 1, -16 }, // 0xc5 'LATIN SMALL LETTER A WITH RING ABOVE' U+00E5 + { 2895, 15, 11, 17, 1, -10 }, // 0xc6 'LATIN SMALL LETTER AE' U+00E6 + { 2916, 8, 15, 10, 1, -10 }, // 0xc7 'LATIN SMALL LETTER C WITH CEDILLA' U+00E7 + { 2931, 10, 16, 12, 1, -15 }, // 0xc8 'LATIN SMALL LETTER E WITH GRAVE' U+00E8 + { 2951, 10, 16, 12, 1, -15 }, // 0xc9 'LATIN SMALL LETTER E WITH ACUTE' U+00E9 + { 2971, 10, 17, 12, 1, -16 }, // 0xca 'LATIN SMALL LETTER E WITH CIRCUMFLEX' U+00EA + { 2993, 10, 15, 12, 1, -14 }, // 0xcb 'LATIN SMALL LETTER E WITH DIAERESIS' U+00EB + { 3012, 5, 16, 5, 0, -15 }, // 0xcc 'LATIN SMALL LETTER I WITH GRAVE' U+00EC + { 3022, 5, 16, 5, 0, -15 }, // 0xcd 'LATIN SMALL LETTER I WITH ACUTE' U+00ED + { 3032, 7, 17, 5, -1, -16 }, // 0xce 'LATIN SMALL LETTER I WITH CIRCUMFLEX' U+00EE + { 3047, 7, 15, 5, -1, -14 }, // 0xcf 'LATIN SMALL LETTER I WITH DIAERESIS' U+00EF + { 3061, 10, 16, 12, 1, -15 }, // 0xd0 'LATIN SMALL LETTER ETH' U+00F0 + { 3081, 10, 15, 12, 1, -14 }, // 0xd1 'LATIN SMALL LETTER N WITH TILDE' U+00F1 + { 3100, 10, 16, 12, 1, -15 }, // 0xd2 'LATIN SMALL LETTER O WITH GRAVE' U+00F2 + { 3120, 10, 16, 12, 1, -15 }, // 0xd3 'LATIN SMALL LETTER O WITH ACUTE' U+00F3 + { 3140, 10, 17, 12, 1, -16 }, // 0xd4 'LATIN SMALL LETTER O WITH CIRCUMFLEX' U+00F4 + { 3162, 10, 15, 12, 1, -14 }, // 0xd5 'LATIN SMALL LETTER O WITH TILDE' U+00F5 + { 3181, 10, 15, 12, 1, -14 }, // 0xd6 'LATIN SMALL LETTER O WITH DIAERESIS' U+00F6 + { 3200, 9, 11, 11, 1, -10 }, // 0xd7 'DIVISION SIGN' U+00F7 + { 3213, 10, 13, 12, 1, -11 }, // 0xd8 'LATIN SMALL LETTER O WITH STROKE' U+00F8 + { 3230, 10, 16, 12, 1, -15 }, // 0xd9 'LATIN SMALL LETTER U WITH GRAVE' U+00F9 + { 3250, 10, 16, 12, 1, -15 }, // 0xda 'LATIN SMALL LETTER U WITH ACUTE' U+00FA + { 3270, 10, 17, 12, 1, -16 }, // 0xdb 'LATIN SMALL LETTER U WITH CIRCUMFLEX' U+00FB + { 3292, 10, 15, 12, 1, -14 }, // 0xdc 'LATIN SMALL LETTER U WITH DIAERESIS' U+00FC + { 3311, 11, 20, 11, 0, -15 }, // 0xdd 'LATIN SMALL LETTER Y WITH ACUTE' U+00FD + { 3339, 10, 20, 12, 1, -15 }, // 0xde 'LATIN SMALL LETTER THORN' U+00FE + { 3364, 11, 19, 11, 0, -14 } }; // 0xdf 'LATIN SMALL LETTER Y WITH DIAERESIS' U+000FF + +const GFXfont Ubuntu_Bold10pt8b PROGMEM = { + (uint8_t *)Ubuntu_Bold10pt8bBitmaps, + (GFXglyph *)Ubuntu_Bold10pt8bGlyphs, + 0x20, 0xDF, 23 }; + +// Approx. 4742 bytes diff --git a/lib/obp60task/fonts/Ubuntu_Bold12pt8b.h b/lib/obp60task/fonts/Ubuntu_Bold12pt8b.h new file mode 100644 index 0000000..24521f4 --- /dev/null +++ b/lib/obp60task/fonts/Ubuntu_Bold12pt8b.h @@ -0,0 +1,611 @@ +const uint8_t Ubuntu_Bold12pt8bBitmaps[] PROGMEM = { + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0xFF, 0x60, 0xF7, 0xFB, + 0xFD, 0xFE, 0xFF, 0x7F, 0xBF, 0xDE, 0x0F, 0x3C, 0x1E, 0x78, 0x3C, 0xF0, + 0xF3, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x3C, 0x3E, 0xF8, 0x79, + 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x9E, 0x1E, 0x78, 0x3C, 0xF0, + 0x79, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x01, 0xFC, 0x7F, 0xE7, 0xFE, 0xF0, + 0x4F, 0x00, 0xF0, 0x0F, 0xF0, 0x7F, 0xC3, 0xFE, 0x07, 0xF0, 0x1F, 0x00, + 0xF6, 0x0F, 0xFF, 0xEF, 0xFC, 0x7F, 0x80, 0xE0, 0x0E, 0x00, 0xE0, 0x3E, + 0x0F, 0x07, 0xF0, 0xE0, 0xF7, 0x9E, 0x0E, 0x39, 0xC0, 0xE3, 0xBC, 0x0E, + 0x3B, 0x80, 0xF7, 0xF8, 0x07, 0xF7, 0x00, 0x3E, 0xF7, 0xC0, 0x0E, 0xFE, + 0x01, 0xFE, 0xF0, 0x1D, 0xC7, 0x03, 0xDC, 0x70, 0x39, 0xC7, 0x07, 0x9E, + 0xF0, 0x70, 0xFE, 0x0F, 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0xC0, 0x3F, 0xE0, + 0x38, 0xE0, 0x38, 0xE0, 0x3D, 0xE0, 0x1F, 0xC0, 0x1F, 0x80, 0x3F, 0x9E, + 0x7F, 0x9E, 0xF3, 0xDC, 0xF1, 0xFC, 0xF0, 0xF8, 0xF8, 0xF8, 0xFF, 0xFC, + 0x7F, 0xFE, 0x1F, 0x9F, 0xFF, 0xFF, 0xFF, 0xF0, 0x08, 0x3C, 0xF1, 0xE7, + 0x8F, 0x1E, 0x78, 0xF1, 0xE3, 0xC7, 0x8F, 0x1E, 0x3C, 0x78, 0x78, 0xF1, + 0xE1, 0xE3, 0xC3, 0xC2, 0x00, 0x21, 0xE1, 0xE3, 0xC3, 0xC7, 0x8F, 0x0F, + 0x1E, 0x3C, 0x78, 0xF1, 0xE3, 0xC7, 0x8F, 0x3C, 0x78, 0xF3, 0xC7, 0x9E, + 0x08, 0x00, 0x0E, 0x01, 0xC1, 0x39, 0x7A, 0xFF, 0xFE, 0x1C, 0x06, 0xC1, + 0xDC, 0x7B, 0xC2, 0x20, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x0F, 0xFF, 0xFF, + 0xFF, 0xF8, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x00, 0x7B, 0xDE, 0xF7, 0xFB, + 0xCC, 0xFF, 0xFF, 0xF8, 0x6F, 0xF6, 0x00, 0xF0, 0x1F, 0x01, 0xE0, 0x1E, + 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x78, 0x07, 0x80, 0x78, 0x0F, 0x00, 0xF0, + 0x0F, 0x01, 0xE0, 0x1E, 0x01, 0xE0, 0x3C, 0x03, 0xC0, 0x3C, 0x07, 0x80, + 0x78, 0x0F, 0x80, 0xF0, 0x00, 0x0F, 0x03, 0xFC, 0x7F, 0xE7, 0x9E, 0x70, + 0xEF, 0x0F, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0xF0, + 0xE7, 0x9E, 0x7F, 0xE3, 0xFC, 0x0F, 0x00, 0x07, 0x1F, 0x7F, 0xFF, 0xEF, + 0x4F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, + 0x1F, 0x07, 0xFC, 0xFF, 0xE6, 0x3E, 0x01, 0xE0, 0x1E, 0x03, 0xE0, 0x3C, + 0x07, 0x80, 0xF8, 0x3F, 0x03, 0xE0, 0x7C, 0x0F, 0x80, 0xFF, 0xFF, 0xFF, + 0xFF, 0xF0, 0x3E, 0x1F, 0xF3, 0xFF, 0x21, 0xE0, 0x3C, 0x07, 0x87, 0xE0, + 0xF8, 0x1F, 0xC0, 0x78, 0x07, 0x80, 0xF0, 0x1E, 0x07, 0xFF, 0xF7, 0xFC, + 0x7F, 0x00, 0x03, 0xC0, 0x7C, 0x0F, 0xC0, 0xFC, 0x1F, 0xC3, 0xBC, 0x3B, + 0xC7, 0x3C, 0x73, 0xCF, 0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x3C, 0x03, + 0xC0, 0x3C, 0x03, 0xC0, 0x3F, 0xE3, 0xFE, 0x3F, 0xE3, 0x80, 0x38, 0x07, + 0x80, 0x7F, 0x07, 0xFC, 0x7F, 0xE0, 0x3F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, + 0x1F, 0xFF, 0xEF, 0xFC, 0x7F, 0x00, 0x01, 0xE0, 0xFE, 0x1F, 0xE3, 0xF0, + 0x7C, 0x07, 0x80, 0xFF, 0x8F, 0xFE, 0xFF, 0xEF, 0x1F, 0xF0, 0xFF, 0x0F, + 0xF0, 0xF7, 0x9F, 0x7F, 0xE3, 0xFC, 0x1F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, + 0xF0, 0x1E, 0x03, 0xE0, 0x7C, 0x07, 0x80, 0x78, 0x0F, 0x00, 0xF0, 0x1F, + 0x01, 0xE0, 0x1E, 0x01, 0xE0, 0x3C, 0x03, 0xC0, 0x3C, 0x00, 0x1F, 0x83, + 0xFE, 0x7F, 0xEF, 0x9F, 0xF0, 0xFF, 0x0F, 0xF9, 0xF7, 0xFE, 0x3F, 0xC7, + 0xFE, 0xF9, 0xFF, 0x0F, 0xF0, 0xFF, 0x8F, 0xFF, 0xE7, 0xFE, 0x1F, 0x80, + 0x1F, 0x83, 0xFC, 0x7F, 0xEF, 0x9E, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x8F, + 0x7F, 0xF7, 0xFF, 0x1F, 0xF0, 0x1E, 0x03, 0xE0, 0x7C, 0x7F, 0x87, 0xF0, + 0x78, 0x00, 0x6F, 0xF6, 0x00, 0x00, 0x06, 0xFF, 0x60, 0x33, 0xDE, 0x60, + 0x00, 0x00, 0x03, 0xDE, 0xF7, 0xBF, 0xDE, 0x60, 0x00, 0x60, 0x3E, 0x1F, + 0xFF, 0xFF, 0xFF, 0x8F, 0x00, 0xFF, 0x8F, 0xFF, 0x1F, 0xF0, 0x3E, 0x00, + 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, + 0x60, 0x07, 0xC0, 0xFF, 0x8F, 0xFF, 0x1F, 0xF0, 0x0F, 0x1F, 0xFF, 0xFF, + 0xFF, 0x87, 0xC0, 0x60, 0x00, 0x3E, 0x3F, 0xEF, 0xF9, 0x0F, 0x03, 0xC0, + 0xF0, 0x7C, 0x1E, 0x0F, 0x83, 0xC1, 0xE0, 0x78, 0x1C, 0x07, 0x00, 0x00, + 0x30, 0x1E, 0x07, 0x80, 0xC0, 0x01, 0xFC, 0x00, 0x3F, 0xFC, 0x03, 0xFF, + 0xF0, 0x7E, 0x07, 0xC3, 0xC0, 0x0F, 0x3C, 0x7E, 0x39, 0xC7, 0xF8, 0xFE, + 0x7F, 0xC7, 0xE7, 0x8E, 0x3F, 0x38, 0x71, 0xF9, 0xC3, 0x8F, 0xCE, 0x1C, + 0x7E, 0x78, 0xE7, 0x71, 0xFF, 0xF9, 0xCF, 0xFF, 0x8F, 0x1F, 0xF8, 0x3C, + 0x00, 0x01, 0xF8, 0x00, 0x07, 0xFF, 0x80, 0x0F, 0xFE, 0x00, 0x1F, 0xE0, + 0x00, 0x03, 0xE0, 0x01, 0xF0, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x77, 0x00, + 0x7B, 0xC0, 0x3D, 0xE0, 0x3C, 0x78, 0x1E, 0x3C, 0x0F, 0x1E, 0x0F, 0xFF, + 0x87, 0xFF, 0xC3, 0xFF, 0xE3, 0xC0, 0x79, 0xE0, 0x3D, 0xF0, 0x1E, 0xF0, + 0x07, 0x80, 0xFF, 0x87, 0xFF, 0x3F, 0xF9, 0xE3, 0xEF, 0x0F, 0x78, 0x7B, + 0xC7, 0xDF, 0xFC, 0xFF, 0xE7, 0xFF, 0xBC, 0x3F, 0xE0, 0xFF, 0x07, 0xF8, + 0x7F, 0xFF, 0xDF, 0xFC, 0xFF, 0xC0, 0x07, 0xF0, 0x7F, 0xF3, 0xFF, 0xDF, + 0x82, 0x78, 0x03, 0xE0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, + 0x00, 0x3E, 0x00, 0x78, 0x01, 0xF0, 0x23, 0xFF, 0xC7, 0xFF, 0x07, 0xF0, + 0xFF, 0x81, 0xFF, 0xE3, 0xFF, 0xE7, 0x87, 0xEF, 0x03, 0xDE, 0x07, 0xFC, + 0x07, 0xF8, 0x0F, 0xF0, 0x1F, 0xE0, 0x3F, 0xC0, 0x7F, 0x81, 0xFF, 0x03, + 0xDE, 0x1F, 0xBF, 0xFE, 0x7F, 0xF0, 0xFF, 0x80, 0xFF, 0xEF, 0xFE, 0xFF, + 0xEF, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0xFE, 0xFF, 0xEF, 0xFE, 0xF0, + 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, + 0xFF, 0xFF, 0xF8, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0xFE, 0xFF, 0xDF, 0xFB, + 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x00, 0x07, 0xF0, + 0x7F, 0xF3, 0xFF, 0xDF, 0x02, 0x78, 0x03, 0xE0, 0x0F, 0x00, 0x3C, 0x00, + 0xF0, 0x3F, 0xC0, 0xFF, 0x03, 0xFE, 0x0F, 0x78, 0x3D, 0xF0, 0xF3, 0xFF, + 0xC7, 0xFF, 0x07, 0xF8, 0xF0, 0x3F, 0xC0, 0xFF, 0x03, 0xFC, 0x0F, 0xF0, + 0x3F, 0xC0, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFC, + 0x0F, 0xF0, 0x3F, 0xC0, 0xFF, 0x03, 0xFC, 0x0F, 0xF0, 0x3C, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x01, 0xE0, 0x3C, 0x07, 0x80, + 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, + 0x1E, 0x87, 0xDF, 0xF7, 0xFE, 0x3F, 0x00, 0xF0, 0xFF, 0xC7, 0xEF, 0x1F, + 0x3C, 0xF8, 0xF7, 0xC3, 0xFE, 0x0F, 0xF0, 0x3F, 0x80, 0xFF, 0x03, 0xFC, + 0x0F, 0x78, 0x3D, 0xF0, 0xF3, 0xE3, 0xC7, 0x8F, 0x1F, 0x3C, 0x3E, 0xF0, + 0x7C, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, + 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xF0, 0x7C, 0x03, 0xCF, 0x80, 0xF9, 0xF0, 0x1F, 0x3F, 0x07, + 0xE7, 0xE0, 0xFC, 0xFE, 0x3F, 0xBD, 0xC7, 0x7F, 0xBD, 0xEF, 0xF3, 0xB9, + 0xFE, 0x77, 0x3F, 0xCF, 0xE7, 0xF8, 0xF8, 0xFF, 0x1F, 0x1F, 0xE1, 0xC3, + 0xFC, 0x38, 0x7F, 0x80, 0x0F, 0xF0, 0x01, 0xE0, 0xF0, 0x3F, 0xE0, 0xFF, + 0x83, 0xFF, 0x0F, 0xFE, 0x3F, 0xF8, 0xFF, 0x73, 0xFD, 0xCF, 0xF3, 0xBF, + 0xCF, 0xFF, 0x1F, 0xFC, 0x3F, 0xF0, 0xFF, 0xC1, 0xFF, 0x07, 0xFC, 0x0F, + 0xF0, 0x3C, 0x07, 0xF0, 0x0F, 0xFE, 0x0F, 0xFF, 0x8F, 0x83, 0xE7, 0x80, + 0xF7, 0xC0, 0x7F, 0xC0, 0x1F, 0xE0, 0x0F, 0xF0, 0x07, 0xF8, 0x03, 0xFC, + 0x01, 0xFF, 0x01, 0xF7, 0x80, 0xF3, 0xE0, 0xF8, 0xFF, 0xF8, 0x3F, 0xF8, + 0x07, 0xF0, 0x00, 0xFF, 0x0F, 0xFC, 0xFF, 0xEF, 0x1F, 0xF0, 0xFF, 0x0F, + 0xF0, 0xFF, 0x1F, 0xFF, 0xEF, 0xFC, 0xFF, 0x8F, 0x00, 0xF0, 0x0F, 0x00, + 0xF0, 0x0F, 0x00, 0xF0, 0x00, 0x07, 0xF0, 0x0F, 0xFE, 0x0F, 0xFF, 0x8F, + 0x83, 0xE7, 0x80, 0xF7, 0xC0, 0x7F, 0xC0, 0x1F, 0xE0, 0x0F, 0xF0, 0x07, + 0xF8, 0x03, 0xFC, 0x01, 0xFF, 0x01, 0xF7, 0x80, 0xF3, 0xE0, 0xF8, 0xFF, + 0xF8, 0x3F, 0xF8, 0x07, 0xF0, 0x00, 0xF0, 0x00, 0x3E, 0x00, 0x1F, 0xE0, + 0x07, 0xF0, 0x00, 0xF0, 0xFF, 0x83, 0xFF, 0x8F, 0xFF, 0x3C, 0x3E, 0xF0, + 0x7B, 0xC1, 0xEF, 0x07, 0xBC, 0x3E, 0xFF, 0xF3, 0xFF, 0x8F, 0xFC, 0x3C, + 0xF8, 0xF1, 0xF3, 0xC3, 0xCF, 0x0F, 0xBC, 0x1E, 0xF0, 0x7C, 0x1F, 0x87, + 0xFE, 0x7F, 0xCF, 0x04, 0xF0, 0x0F, 0x00, 0xFC, 0x07, 0xF8, 0x3F, 0xC0, + 0xFE, 0x01, 0xF0, 0x0F, 0x00, 0xF4, 0x1F, 0xFF, 0xEF, 0xFE, 0x3F, 0x80, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC1, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x78, + 0x01, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x01, 0xE0, 0x07, 0x80, 0x1E, + 0x00, 0x78, 0x01, 0xE0, 0x07, 0x80, 0xF0, 0x7F, 0x83, 0xFC, 0x1F, 0xE0, + 0xFF, 0x07, 0xF8, 0x3F, 0xC1, 0xFE, 0x0F, 0xF0, 0x7F, 0x83, 0xFC, 0x1F, + 0xE0, 0xFF, 0x07, 0xBC, 0x79, 0xFF, 0xC7, 0xFC, 0x0F, 0x80, 0xF0, 0x07, + 0xFC, 0x07, 0x9E, 0x03, 0xCF, 0x01, 0xE3, 0xC1, 0xE1, 0xE0, 0xF0, 0xF0, + 0x78, 0x3C, 0x78, 0x1E, 0x3C, 0x0F, 0x1E, 0x03, 0xDE, 0x01, 0xEF, 0x00, + 0xF7, 0x80, 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x03, 0xE0, 0x00, 0xF0, + 0x00, 0x1F, 0xE0, 0x00, 0x3F, 0xE0, 0xE0, 0xFB, 0xC3, 0xE1, 0xE7, 0x87, + 0xC3, 0xCF, 0x0F, 0x87, 0x9E, 0x1F, 0x8F, 0x3C, 0x77, 0x3E, 0x7C, 0xEE, + 0x7C, 0x7B, 0xDE, 0xF0, 0xF7, 0x1D, 0xE1, 0xEE, 0x3B, 0xC3, 0xFC, 0x7F, + 0x83, 0xF0, 0x7E, 0x07, 0xE0, 0xFC, 0x0F, 0xC1, 0xF8, 0x1F, 0x01, 0xF0, + 0xF8, 0x1F, 0x7C, 0x3E, 0x3C, 0x3C, 0x3E, 0x7C, 0x1F, 0xF8, 0x0F, 0xF0, + 0x0F, 0xF0, 0x07, 0xE0, 0x03, 0xC0, 0x07, 0xE0, 0x0F, 0xF0, 0x0F, 0xF0, + 0x1F, 0xF8, 0x3E, 0x7C, 0x3C, 0x3C, 0x7C, 0x3E, 0xF8, 0x1F, 0xF8, 0x1F, + 0x78, 0x1E, 0x7C, 0x3E, 0x3C, 0x3C, 0x3E, 0x7C, 0x1F, 0xF8, 0x0F, 0xF0, + 0x0F, 0xF0, 0x07, 0xE0, 0x07, 0xE0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, + 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFE, 0x03, 0xE0, 0x1E, 0x01, 0xF0, 0x1F, 0x00, 0xF0, 0x0F, 0x80, 0xF8, + 0x07, 0x80, 0x7C, 0x07, 0xC0, 0x3E, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, + 0xFF, 0xFF, 0xFF, 0x8F, 0x1E, 0x3C, 0x78, 0xF1, 0xE3, 0xC7, 0x8F, 0x1E, + 0x3C, 0x78, 0xF1, 0xE3, 0xC7, 0x8F, 0xFF, 0xFF, 0x80, 0xF0, 0x07, 0x80, + 0x78, 0x07, 0x80, 0x3C, 0x03, 0xC0, 0x3C, 0x01, 0xE0, 0x1E, 0x01, 0xE0, + 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0x78, 0x07, 0x80, 0x78, 0x03, 0xC0, 0x3C, + 0x03, 0xC0, 0x1E, 0x01, 0xE0, 0x1E, 0x00, 0xF0, 0xFF, 0xFF, 0xF8, 0xF1, + 0xE3, 0xC7, 0x8F, 0x1E, 0x3C, 0x78, 0xF1, 0xE3, 0xC7, 0x8F, 0x1E, 0x3C, + 0x78, 0xFF, 0xFF, 0xFF, 0x80, 0x07, 0x00, 0x7C, 0x03, 0xE0, 0x3F, 0x83, + 0xDE, 0x1E, 0xF1, 0xE3, 0xCE, 0x0E, 0xF0, 0x79, 0x01, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xF0, 0x23, 0xC7, 0x8F, 0x08, 0x7F, 0x1F, 0xE7, 0xFC, 0x0F, + 0x03, 0xCF, 0xF7, 0xFF, 0xCF, 0xF3, 0xFC, 0xFF, 0xFD, 0xFF, 0x3F, 0x80, + 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xFF, 0x8F, 0xFC, + 0xFF, 0xEF, 0x1F, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x1E, + 0xFF, 0xEF, 0xFC, 0x7F, 0x00, 0x0F, 0xCF, 0xF7, 0xFD, 0xE0, 0xF0, 0x3C, + 0x0F, 0x03, 0xC0, 0xF0, 0x1E, 0x17, 0xFC, 0xFF, 0x1F, 0x80, 0x00, 0xF0, + 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x1F, 0xF3, 0xFF, 0x7F, 0xFF, + 0x8F, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0xF0, 0xF7, 0x8F, 0x7F, 0xF3, + 0xFF, 0x0F, 0xE0, 0x0F, 0x83, 0xFC, 0x7F, 0xE7, 0x9E, 0xF0, 0xFF, 0x0F, + 0xFF, 0xFF, 0xFF, 0xF0, 0x07, 0x82, 0x7F, 0xE3, 0xFE, 0x0F, 0xC0, 0x1F, + 0x3F, 0x9F, 0xDF, 0x0F, 0x07, 0x83, 0xFD, 0xFE, 0xFF, 0x78, 0x3C, 0x1E, + 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x00, 0x1F, 0xC7, 0xFD, + 0xFF, 0xFC, 0xFF, 0x1F, 0xE3, 0xFC, 0x7F, 0x8F, 0xF9, 0xEF, 0xFD, 0xFF, + 0x8F, 0xF0, 0x1E, 0x87, 0xDF, 0xF3, 0xFE, 0x7F, 0x00, 0xF0, 0x1E, 0x03, + 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3F, 0xE7, 0xFE, 0xFF, 0xDE, 0x7F, 0xC7, + 0xF8, 0xFF, 0x1F, 0xE3, 0xFC, 0x7F, 0x8F, 0xF1, 0xFE, 0x3F, 0xC7, 0x80, + 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x1E, 0x3C, + 0x78, 0xF0, 0x00, 0x07, 0x8F, 0x1E, 0x3C, 0x78, 0xF1, 0xE3, 0xC7, 0x8F, + 0x1E, 0x3C, 0x78, 0xFF, 0xFF, 0xBE, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, + 0x00, 0xF0, 0x0F, 0x00, 0xF1, 0xFF, 0x3E, 0xF7, 0xCF, 0xF8, 0xFF, 0x0F, + 0xE0, 0xFF, 0x0F, 0xF8, 0xF7, 0x8F, 0x7C, 0xF3, 0xEF, 0x1E, 0xF1, 0xF0, + 0xF3, 0xCF, 0x3C, 0xF3, 0xCF, 0x3C, 0xF3, 0xCF, 0x3C, 0xF3, 0xCF, 0x3E, + 0xFD, 0xF3, 0xC0, 0x7F, 0x3F, 0x3F, 0xFF, 0xEF, 0xFF, 0xFB, 0xCF, 0x9F, + 0xF1, 0xE3, 0xFC, 0x78, 0xFF, 0x1E, 0x3F, 0xC7, 0x8F, 0xF1, 0xE3, 0xFC, + 0x78, 0xFF, 0x1E, 0x3F, 0xC7, 0x8F, 0xF1, 0xE3, 0xC0, 0x7F, 0x1F, 0xFB, + 0xFF, 0x79, 0xFF, 0x1F, 0xE3, 0xFC, 0x7F, 0x8F, 0xF1, 0xFE, 0x3F, 0xC7, + 0xF8, 0xFF, 0x1E, 0x0F, 0x81, 0xFF, 0x1F, 0xFC, 0xF1, 0xEF, 0x07, 0xF8, + 0x3F, 0xC1, 0xFE, 0x0F, 0xF0, 0x7B, 0xC7, 0x9F, 0xFC, 0x7F, 0xC0, 0xF8, + 0x00, 0x7F, 0x0F, 0xFC, 0xFF, 0xEF, 0x1E, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, + 0x0F, 0xF0, 0xFF, 0x1F, 0xFF, 0xEF, 0xFC, 0xFF, 0x8F, 0x00, 0xF0, 0x0F, + 0x00, 0xF0, 0x00, 0x0F, 0xF1, 0xFF, 0xDF, 0xFE, 0xF0, 0xFF, 0x87, 0xF8, + 0x3F, 0xC1, 0xFE, 0x0F, 0xF0, 0x7F, 0xC3, 0xDF, 0xFE, 0x7F, 0xF1, 0xFF, + 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x3F, 0xFF, 0xFF, 0xFE, 0x0F, + 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x00, 0x1F, 0x9F, + 0xEF, 0xFB, 0xC0, 0xF0, 0x3F, 0xE7, 0xFC, 0xFF, 0x03, 0xE0, 0xFF, 0xFF, + 0xFE, 0xFE, 0x00, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0xF7, 0xFB, 0xFD, 0xE0, + 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0xC3, 0xFC, 0xFE, 0x3F, 0x00, 0xF1, + 0xFE, 0x3F, 0xC7, 0xF8, 0xFF, 0x1F, 0xE3, 0xFC, 0x7F, 0x8F, 0xF1, 0xFF, + 0x3D, 0xFF, 0xBF, 0xF1, 0xFC, 0xF0, 0x7F, 0xC7, 0xDE, 0x3C, 0xF1, 0xE7, + 0x8F, 0x1E, 0xF0, 0xF7, 0x87, 0xBC, 0x1D, 0xC0, 0xFE, 0x07, 0xF0, 0x1F, + 0x00, 0xF8, 0x00, 0xF0, 0xE1, 0xFE, 0x1C, 0x3D, 0xC7, 0xC7, 0x3C, 0xF9, + 0xE7, 0x9F, 0x3C, 0xF7, 0xE7, 0x0E, 0xEE, 0xE1, 0xDD, 0xDC, 0x3F, 0x3F, + 0x83, 0xE3, 0xE0, 0x7C, 0x7C, 0x0F, 0x07, 0x80, 0xE0, 0xE0, 0xF8, 0xFB, + 0xC7, 0x8F, 0x78, 0x7B, 0xC1, 0xFC, 0x07, 0xC0, 0x1C, 0x01, 0xF0, 0x1F, + 0xC1, 0xEF, 0x0F, 0x78, 0xFB, 0xEF, 0x8F, 0x80, 0xF0, 0x7F, 0xC7, 0xDE, + 0x3C, 0xF1, 0xE7, 0x8F, 0x1E, 0xF0, 0xF7, 0x87, 0xBC, 0x1D, 0xC0, 0xFE, + 0x07, 0xF0, 0x1F, 0x00, 0xF8, 0x0F, 0x83, 0xFC, 0x1F, 0xC0, 0xFC, 0x00, + 0xFF, 0xFF, 0xFF, 0xFC, 0x3E, 0x0F, 0x87, 0xC3, 0xE0, 0xF8, 0x7C, 0x1F, + 0x0F, 0xFF, 0xFF, 0xFF, 0xC0, 0x0F, 0x1F, 0x3F, 0x3C, 0x3C, 0x3C, 0x3C, + 0x3C, 0x3C, 0x7C, 0xF8, 0xF0, 0xF8, 0x7C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, + 0x3C, 0x3F, 0x1F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xF8, 0xF0, 0xF8, 0xFC, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3E, 0x1F, + 0x0F, 0x1F, 0x3E, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0xFC, 0xF8, 0xF0, + 0x38, 0x27, 0xE7, 0xFF, 0xEE, 0x7E, 0x41, 0xC0, 0xFF, 0xE0, 0x18, 0x06, + 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, 0x60, 0x18, 0x06, 0x01, 0x80, + 0x60, 0x18, 0x06, 0x01, 0x80, 0x7F, 0xF0, 0x00, 0x6F, 0xF6, 0x0F, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x07, 0x00, 0xE0, 0x1C, 0x07, 0xF3, 0xFE, + 0xFF, 0x9E, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x3C, 0x17, 0xFE, 0x7F, + 0xC3, 0xF8, 0x38, 0x07, 0x00, 0xE0, 0x07, 0xC3, 0xFC, 0x7F, 0x1F, 0x03, + 0xC0, 0x78, 0x0F, 0x07, 0xFC, 0xFF, 0x9F, 0xF0, 0xF0, 0x1E, 0x03, 0xC0, + 0x78, 0x0F, 0xFB, 0xFF, 0x7F, 0xE0, 0x60, 0xDF, 0xFF, 0xFF, 0xBF, 0xE7, + 0x1C, 0xE3, 0x9C, 0x73, 0xFE, 0xFF, 0xEF, 0xF9, 0x83, 0x00, 0xF8, 0x7D, + 0xE1, 0xE7, 0x87, 0x8F, 0x3C, 0x3C, 0xF0, 0x7F, 0x81, 0xFE, 0x03, 0xF0, + 0x7F, 0xF9, 0xFF, 0xE0, 0x78, 0x01, 0xE0, 0x7F, 0xF9, 0xFF, 0xE0, 0x78, + 0x01, 0xE0, 0x07, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF0, 0x1F, 0x9F, 0xFF, 0xFF, 0xC2, 0xF0, 0x3F, 0x07, + 0xF1, 0xFE, 0xF7, 0xFC, 0xFF, 0x3F, 0xCF, 0xFB, 0xDF, 0xE3, 0xF8, 0x3F, + 0x03, 0xD0, 0xFF, 0xFF, 0xFE, 0x7F, 0x00, 0x61, 0xBC, 0xFF, 0x3D, 0x86, + 0x07, 0xF0, 0x0F, 0xFC, 0x0F, 0x07, 0x8E, 0x00, 0xE6, 0x3E, 0x37, 0x3F, + 0x9F, 0x3C, 0x07, 0x9C, 0x03, 0xCE, 0x01, 0xE7, 0x00, 0xF3, 0xC0, 0x7C, + 0xFE, 0x76, 0x3E, 0x33, 0x80, 0x38, 0xF0, 0x78, 0x3F, 0xF0, 0x03, 0xF0, + 0x00, 0x7E, 0x7F, 0x07, 0x1F, 0x7F, 0xF7, 0xE7, 0xFF, 0x7F, 0x18, 0x61, + 0xC7, 0x38, 0xE7, 0x9E, 0x71, 0xCF, 0x3C, 0x71, 0xC7, 0x9E, 0x38, 0xE1, + 0xC7, 0x18, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x07, 0x00, 0x70, 0x07, + 0x00, 0x70, 0x07, 0x00, 0x70, 0xFF, 0xFF, 0xF8, 0x07, 0xF0, 0x0F, 0xFC, + 0x0F, 0x07, 0x8E, 0x00, 0xE6, 0x7E, 0x37, 0x3F, 0xDF, 0x18, 0x67, 0x8C, + 0x33, 0xC7, 0xF9, 0xE3, 0xF8, 0xF1, 0x8C, 0x7C, 0xC3, 0x76, 0x61, 0xB3, + 0x80, 0x38, 0xF0, 0x78, 0x3F, 0xF0, 0x03, 0xF0, 0x00, 0xFF, 0xFF, 0x38, + 0xFB, 0x1E, 0x3C, 0x6F, 0x8E, 0x00, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x0F, + 0xFF, 0xFF, 0xFF, 0xF8, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x00, 0x0F, 0xFF, + 0xFF, 0xFF, 0xF8, 0x3E, 0xFF, 0x47, 0x07, 0x0F, 0x3E, 0x78, 0xF0, 0xFF, + 0xFF, 0x7C, 0xFE, 0x0E, 0x0E, 0x3C, 0x3F, 0x07, 0x07, 0xFF, 0xFC, 0x10, + 0xF7, 0xBC, 0x40, 0xF1, 0xFE, 0x3F, 0xC7, 0xF8, 0xFF, 0x1F, 0xE3, 0xFC, + 0x7F, 0x8F, 0xF1, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFD, 0xE0, 0x3C, 0x07, + 0x80, 0xF0, 0x00, 0x07, 0xF0, 0xFF, 0xF7, 0xFF, 0xFF, 0xE7, 0xFF, 0x9F, + 0xFE, 0x7F, 0xF9, 0xFF, 0xE7, 0x7F, 0x9C, 0xFE, 0x70, 0xF9, 0xC1, 0xE7, + 0x07, 0x9C, 0x1E, 0x70, 0x79, 0xC1, 0xE7, 0x07, 0x9C, 0x1E, 0x70, 0x79, + 0xC1, 0xE7, 0x07, 0x9C, 0x6F, 0xF6, 0x30, 0xE1, 0xBE, 0xF8, 0x1D, 0xFF, + 0xD7, 0x1C, 0x71, 0xC7, 0x1C, 0x70, 0x3E, 0x3F, 0xBD, 0xDC, 0x7E, 0x3F, + 0x1F, 0x8F, 0xEF, 0x7F, 0x1F, 0x00, 0x61, 0x8F, 0x3C, 0x71, 0xC7, 0x9E, + 0x38, 0xE3, 0xCF, 0x38, 0xE7, 0x9E, 0x71, 0xCF, 0x3C, 0x61, 0x80, 0x1C, + 0x0F, 0x07, 0xC0, 0xE0, 0xFC, 0x1E, 0x05, 0xC1, 0xC0, 0x1C, 0x3C, 0x01, + 0xC3, 0x80, 0x1C, 0x78, 0x01, 0xC7, 0x1E, 0x1C, 0xF3, 0xE1, 0xCE, 0x3E, + 0x01, 0xE7, 0xE0, 0x1C, 0xEE, 0x03, 0xDC, 0xE0, 0x39, 0xFF, 0x07, 0x9F, + 0xF0, 0x70, 0x0E, 0x0F, 0x00, 0xE0, 0x1C, 0x1E, 0x0F, 0x83, 0x83, 0xF0, + 0xF0, 0x2E, 0x1C, 0x01, 0xC7, 0x80, 0x38, 0xE0, 0x07, 0x3C, 0x00, 0xE7, + 0x3E, 0x1D, 0xFF, 0xE3, 0xB9, 0x1C, 0x0F, 0x03, 0x81, 0xC0, 0xF0, 0x78, + 0x7C, 0x0E, 0x1E, 0x03, 0xC7, 0x80, 0x70, 0xFF, 0x1E, 0x1F, 0xE0, 0x7C, + 0x07, 0x87, 0xF0, 0x38, 0x03, 0x83, 0xC0, 0x1C, 0x1C, 0x03, 0xC1, 0xE0, + 0x1F, 0x8E, 0x00, 0x1C, 0xF0, 0x00, 0xE7, 0x1E, 0xFF, 0x79, 0xF7, 0xE3, + 0x8F, 0x80, 0x3C, 0xFC, 0x01, 0xCE, 0xE0, 0x1E, 0xE7, 0x00, 0xE7, 0xFC, + 0x0F, 0x3F, 0xE0, 0x70, 0x0E, 0x07, 0x80, 0x70, 0x0C, 0x07, 0x81, 0xE0, + 0x30, 0x00, 0x03, 0x80, 0xE0, 0x78, 0x3C, 0x1F, 0x07, 0x83, 0xC0, 0xF0, + 0x3C, 0x2F, 0xFD, 0xFF, 0x3F, 0x00, 0x01, 0x00, 0x03, 0xC0, 0x00, 0xF0, + 0x00, 0x3C, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x07, + 0xF0, 0x03, 0xF8, 0x01, 0xDC, 0x01, 0xEF, 0x00, 0xF7, 0x80, 0xF1, 0xE0, + 0x78, 0xF0, 0x3C, 0x78, 0x3F, 0xFE, 0x1F, 0xFF, 0x0F, 0xFF, 0x8F, 0x01, + 0xE7, 0x80, 0xF7, 0xC0, 0x7B, 0xC0, 0x1E, 0x00, 0x80, 0x00, 0xF0, 0x00, + 0xF0, 0x00, 0xF0, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x07, 0xC0, + 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xDC, 0x01, 0xEF, 0x00, 0xF7, 0x80, 0xF1, + 0xE0, 0x78, 0xF0, 0x3C, 0x78, 0x3F, 0xFE, 0x1F, 0xFF, 0x0F, 0xFF, 0x8F, + 0x01, 0xE7, 0x80, 0xF7, 0xC0, 0x7B, 0xC0, 0x1E, 0x00, 0x80, 0x00, 0xE0, + 0x00, 0xF8, 0x00, 0xEE, 0x00, 0x22, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x07, + 0xC0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xDC, 0x01, 0xEF, 0x00, 0xF7, 0x80, + 0xF1, 0xE0, 0x78, 0xF0, 0x3C, 0x78, 0x3F, 0xFE, 0x1F, 0xFF, 0x0F, 0xFF, + 0x8F, 0x01, 0xE7, 0x80, 0xF7, 0xC0, 0x7B, 0xC0, 0x1E, 0x03, 0x10, 0x03, + 0xFC, 0x03, 0xFC, 0x00, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, + 0x07, 0xC0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xDC, 0x01, 0xEF, 0x00, 0xF7, + 0x80, 0xF1, 0xE0, 0x78, 0xF0, 0x3C, 0x78, 0x3F, 0xFE, 0x1F, 0xFF, 0x0F, + 0xFF, 0x8F, 0x01, 0xE7, 0x80, 0xF7, 0xC0, 0x7B, 0xC0, 0x1E, 0x0C, 0x30, + 0x0F, 0x3C, 0x07, 0x9E, 0x01, 0x86, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x0F, + 0x80, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xB8, 0x03, 0xDE, 0x01, 0xEF, 0x01, + 0xE3, 0xC0, 0xF1, 0xE0, 0x78, 0xF0, 0x7F, 0xFC, 0x3F, 0xFE, 0x1F, 0xFF, + 0x1E, 0x03, 0xCF, 0x01, 0xEF, 0x80, 0xF7, 0x80, 0x3C, 0x03, 0xE0, 0x03, + 0xF8, 0x01, 0x8C, 0x00, 0xC6, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, + 0x0F, 0xE0, 0x07, 0x70, 0x07, 0xB8, 0x03, 0xDE, 0x01, 0xEF, 0x01, 0xE3, + 0xC0, 0xF1, 0xE0, 0x78, 0xF0, 0x7F, 0xFC, 0x3F, 0xFE, 0x3F, 0xFF, 0x1E, + 0x03, 0xCF, 0x01, 0xEF, 0x80, 0xF7, 0x80, 0x3C, 0x00, 0x7F, 0xFC, 0x01, + 0xFF, 0xF8, 0x03, 0xFF, 0xF0, 0x0F, 0xF8, 0x00, 0x1E, 0xF0, 0x00, 0x7D, + 0xE0, 0x00, 0xF3, 0xC0, 0x03, 0xE7, 0xFE, 0x07, 0x8F, 0xFC, 0x1F, 0x1F, + 0xF8, 0x7F, 0xFC, 0x00, 0xFF, 0xF8, 0x03, 0xFF, 0xF0, 0x07, 0x81, 0xE0, + 0x1F, 0x03, 0xFF, 0xBC, 0x07, 0xFF, 0xF8, 0x0F, 0xFE, 0x07, 0xF0, 0x7F, + 0xF3, 0xFF, 0xDF, 0x82, 0x78, 0x03, 0xE0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, + 0x03, 0xC0, 0x0F, 0x00, 0x3E, 0x00, 0x78, 0x01, 0xF0, 0x23, 0xFF, 0xC7, + 0xFF, 0x03, 0xF8, 0x07, 0x00, 0x1E, 0x00, 0x38, 0x03, 0xE0, 0x0F, 0x00, + 0x04, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x01, 0x00, 0x00, 0xFF, 0xEF, 0xFE, + 0xFF, 0xEF, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0xFE, 0xFF, 0xEF, 0xFE, + 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x02, + 0x00, 0x78, 0x0F, 0x01, 0xE0, 0x08, 0x00, 0x00, 0xFF, 0xEF, 0xFE, 0xFF, + 0xEF, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0xFE, 0xFF, 0xEF, 0xFE, 0xF0, + 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x04, 0x00, + 0xE0, 0x1F, 0x03, 0xB8, 0x11, 0x00, 0x00, 0xFF, 0xEF, 0xFE, 0xFF, 0xEF, + 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0xFE, 0xFF, 0xEF, 0xFE, 0xF0, 0x0F, + 0x00, 0xF0, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x30, 0xC7, 0x9E, + 0x79, 0xE3, 0x0C, 0x00, 0x0F, 0xFE, 0xFF, 0xEF, 0xFE, 0xF0, 0x0F, 0x00, + 0xF0, 0x0F, 0x00, 0xFF, 0xEF, 0xFE, 0xFF, 0xEF, 0x00, 0xF0, 0x0F, 0x00, + 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x23, 0xC7, 0x8F, 0x08, 0x07, 0x9E, + 0x79, 0xE7, 0x9E, 0x79, 0xE7, 0x9E, 0x79, 0xE7, 0x9E, 0x79, 0xE7, 0x80, + 0x10, 0xF7, 0xBC, 0x40, 0x07, 0x9E, 0x79, 0xE7, 0x9E, 0x79, 0xE7, 0x9E, + 0x79, 0xE7, 0x9E, 0x79, 0xE7, 0x80, 0x10, 0x71, 0xF7, 0x74, 0x40, 0x1E, + 0x3C, 0x78, 0xF1, 0xE3, 0xC7, 0x8F, 0x1E, 0x3C, 0x78, 0xF1, 0xE3, 0xC7, + 0x8F, 0x1E, 0x00, 0x61, 0xBC, 0xFF, 0x3D, 0x86, 0x00, 0x07, 0x81, 0xE0, + 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, + 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x80, 0x3F, 0xE0, 0x1F, 0xFE, 0x0F, + 0xFF, 0x87, 0x87, 0xE3, 0xC0, 0xF1, 0xE0, 0x7C, 0xF0, 0x1F, 0xFF, 0x0F, + 0xFF, 0x87, 0xFF, 0xC3, 0xCF, 0x01, 0xE7, 0x81, 0xF3, 0xC0, 0xF1, 0xE1, + 0xF8, 0xFF, 0xF8, 0x7F, 0xF0, 0x3F, 0xE0, 0x00, 0x06, 0x20, 0x3F, 0xC1, + 0xFE, 0x02, 0x30, 0x00, 0x00, 0x00, 0x0F, 0x03, 0xFE, 0x0F, 0xF8, 0x3F, + 0xF0, 0xFF, 0xE3, 0xFF, 0x8F, 0xF7, 0x3F, 0xDC, 0xFF, 0x3B, 0xFC, 0xFF, + 0xF1, 0xFF, 0xC3, 0xFF, 0x0F, 0xFC, 0x1F, 0xF0, 0x7F, 0xC0, 0xFF, 0x03, + 0xC0, 0x01, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x1F, 0xC0, 0x3F, 0xF8, 0x3F, 0xFE, 0x3E, 0x0F, 0x9E, 0x03, + 0xDF, 0x01, 0xFF, 0x00, 0x7F, 0x80, 0x3F, 0xC0, 0x1F, 0xE0, 0x0F, 0xF0, + 0x07, 0xFC, 0x07, 0xDE, 0x03, 0xCF, 0x83, 0xE3, 0xFF, 0xE0, 0xFF, 0xE0, + 0x1F, 0xC0, 0x00, 0x40, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, 0x10, + 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x3F, 0xF8, 0x3F, 0xFE, 0x3E, 0x0F, 0x9E, + 0x03, 0xDF, 0x01, 0xFF, 0x00, 0x7F, 0x80, 0x3F, 0xC0, 0x1F, 0xE0, 0x0F, + 0xF0, 0x07, 0xFC, 0x07, 0xDE, 0x03, 0xCF, 0x83, 0xE3, 0xFF, 0xE0, 0xFF, + 0xE0, 0x1F, 0xC0, 0x00, 0x80, 0x00, 0xE0, 0x00, 0xF8, 0x00, 0xEE, 0x00, + 0x22, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x3F, 0xF8, 0x3F, 0xFE, 0x3E, 0x0F, + 0x9E, 0x03, 0xDF, 0x01, 0xFF, 0x00, 0x7F, 0x80, 0x3F, 0xC0, 0x1F, 0xE0, + 0x0F, 0xF0, 0x07, 0xFC, 0x07, 0xDE, 0x03, 0xCF, 0x83, 0xE3, 0xFF, 0xE0, + 0xFF, 0xE0, 0x1F, 0xC0, 0x03, 0x10, 0x03, 0xFC, 0x03, 0xFC, 0x00, 0x8C, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x3F, 0xF8, 0x3F, 0xFE, 0x3E, + 0x0F, 0x9E, 0x03, 0xDF, 0x01, 0xFF, 0x00, 0x7F, 0x80, 0x3F, 0xC0, 0x1F, + 0xE0, 0x0F, 0xF0, 0x07, 0xFC, 0x07, 0xDE, 0x03, 0xCF, 0x83, 0xE3, 0xFF, + 0xE0, 0xFF, 0xE0, 0x1F, 0xC0, 0x0C, 0x30, 0x0F, 0x3C, 0x07, 0x9E, 0x01, + 0x86, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x7F, 0xF0, 0x7F, 0xFC, 0x7C, 0x1F, + 0x3C, 0x07, 0xBE, 0x03, 0xFE, 0x00, 0xFF, 0x00, 0x7F, 0x80, 0x3F, 0xC0, + 0x1F, 0xE0, 0x0F, 0xF8, 0x0F, 0xBC, 0x07, 0x9F, 0x07, 0xC7, 0xFF, 0xC1, + 0xFF, 0xC0, 0x3F, 0x80, 0x20, 0x47, 0x0E, 0xF9, 0xF7, 0xFE, 0x1F, 0x80, + 0xF0, 0x1F, 0x83, 0xFC, 0xF9, 0xF7, 0x0E, 0x20, 0x40, 0x00, 0x02, 0x03, + 0xFB, 0x87, 0xFF, 0xC7, 0xFF, 0xC7, 0xC3, 0xF3, 0xC1, 0xFB, 0xE1, 0xFF, + 0xE1, 0xEF, 0xF0, 0xE7, 0xF8, 0xE3, 0xFC, 0xE1, 0xFE, 0xF0, 0xFF, 0xF0, + 0xFB, 0xF0, 0x79, 0xF8, 0x7C, 0x7F, 0xFC, 0x7F, 0xFC, 0x3B, 0xF8, 0x08, + 0x00, 0x00, 0x04, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x10, 0x00, 0x03, + 0xC1, 0xFE, 0x0F, 0xF0, 0x7F, 0x83, 0xFC, 0x1F, 0xE0, 0xFF, 0x07, 0xF8, + 0x3F, 0xC1, 0xFE, 0x0F, 0xF0, 0x7F, 0x83, 0xFC, 0x1E, 0xF1, 0xE7, 0xFF, + 0x1F, 0xF0, 0x3E, 0x00, 0x01, 0x00, 0x1E, 0x01, 0xE0, 0x1E, 0x00, 0x40, + 0x00, 0x03, 0xC1, 0xFE, 0x0F, 0xF0, 0x7F, 0x83, 0xFC, 0x1F, 0xE0, 0xFF, + 0x07, 0xF8, 0x3F, 0xC1, 0xFE, 0x0F, 0xF0, 0x7F, 0x83, 0xFC, 0x1E, 0xF1, + 0xE7, 0xFF, 0x1F, 0xF0, 0x3E, 0x00, 0x02, 0x00, 0x38, 0x03, 0xE0, 0x3B, + 0x80, 0x88, 0x00, 0x03, 0xC1, 0xFE, 0x0F, 0xF0, 0x7F, 0x83, 0xFC, 0x1F, + 0xE0, 0xFF, 0x07, 0xF8, 0x3F, 0xC1, 0xFE, 0x0F, 0xF0, 0x7F, 0x83, 0xFC, + 0x1E, 0xF1, 0xE7, 0xFF, 0x1F, 0xF0, 0x3E, 0x00, 0x30, 0xC3, 0xCF, 0x1E, + 0x78, 0x61, 0x80, 0x00, 0x78, 0x3F, 0xC1, 0xFE, 0x0F, 0xF0, 0x7F, 0x83, + 0xFC, 0x1F, 0xE0, 0xFF, 0x07, 0xF8, 0x3F, 0xC1, 0xFE, 0x0F, 0xF0, 0x7F, + 0x83, 0xDE, 0x3C, 0xFF, 0xE3, 0xFE, 0x07, 0xC0, 0x00, 0x40, 0x00, 0xF0, + 0x01, 0xE0, 0x03, 0xC0, 0x01, 0x00, 0x00, 0x00, 0xF8, 0x1F, 0x78, 0x1E, + 0x7C, 0x3E, 0x3C, 0x3C, 0x3E, 0x7C, 0x1F, 0xF8, 0x0F, 0xF0, 0x0F, 0xF0, + 0x07, 0xE0, 0x07, 0xE0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, + 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0xF0, 0x0F, 0x00, 0xFF, 0x8F, 0xFC, + 0xFF, 0xEF, 0x1F, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0xF1, 0xFF, 0xFE, + 0xFF, 0xCF, 0xF0, 0xF0, 0x0F, 0x00, 0xF0, 0x00, 0x1F, 0x03, 0xFC, 0x1F, + 0xF1, 0xE7, 0x8F, 0x3C, 0x79, 0xE3, 0xCF, 0x1E, 0xF0, 0xF7, 0x87, 0xBC, + 0x3D, 0xF1, 0xEF, 0xCF, 0x1F, 0x78, 0x7F, 0xC1, 0xFE, 0x8F, 0xF7, 0xFF, + 0xBF, 0xBD, 0xF8, 0x08, 0x0F, 0x01, 0xE0, 0x3C, 0x02, 0x00, 0x07, 0xF1, + 0xFE, 0x7F, 0xC0, 0xF0, 0x3C, 0xFF, 0x7F, 0xFC, 0xFF, 0x3F, 0xCF, 0xFF, + 0xDF, 0xF3, 0xF8, 0x04, 0x03, 0xC1, 0xE0, 0xF0, 0x10, 0x00, 0x07, 0xF1, + 0xFE, 0x7F, 0xC0, 0xF0, 0x3C, 0xFF, 0x7F, 0xFC, 0xFF, 0x3F, 0xCF, 0xFF, + 0xDF, 0xF3, 0xF8, 0x08, 0x07, 0x03, 0xE1, 0xDC, 0x22, 0x00, 0x07, 0xF1, + 0xFE, 0x7F, 0xC0, 0xF0, 0x3C, 0xFF, 0x7F, 0xFC, 0xFF, 0x3F, 0xCF, 0xFF, + 0xDF, 0xF3, 0xF8, 0x18, 0x8F, 0xF7, 0xF8, 0x8C, 0x00, 0x00, 0x07, 0xF1, + 0xFE, 0x7F, 0xC0, 0xF0, 0x3C, 0xFF, 0x7F, 0xFC, 0xFF, 0x3F, 0xCF, 0xFF, + 0xDF, 0xF3, 0xF8, 0x61, 0xBC, 0xFF, 0x3D, 0x86, 0x00, 0x1F, 0xC7, 0xF9, + 0xFF, 0x03, 0xC0, 0xF3, 0xFD, 0xFF, 0xF3, 0xFC, 0xFF, 0x3F, 0xFF, 0x7F, + 0xCF, 0xE0, 0x1E, 0x0F, 0xC3, 0x30, 0xCC, 0x3F, 0x07, 0x80, 0x01, 0xFC, + 0x7F, 0x9F, 0xF0, 0x3C, 0x0F, 0x3F, 0xDF, 0xFF, 0x3F, 0xCF, 0xF3, 0xFF, + 0xF7, 0xFC, 0xFE, 0x3F, 0x8F, 0x0F, 0xFF, 0xF0, 0xFF, 0xFF, 0x00, 0xFD, + 0xF0, 0x0F, 0x1E, 0x3F, 0xE3, 0xDF, 0xFF, 0xFF, 0xC7, 0xFF, 0xF0, 0xF0, + 0x1E, 0x0F, 0x0B, 0xFF, 0xFF, 0x3F, 0xFF, 0xE3, 0xF9, 0xF8, 0x0F, 0x8F, + 0xF7, 0xF9, 0xE0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x1E, 0x17, 0xFC, + 0xFF, 0x07, 0xC1, 0x80, 0x70, 0x1C, 0x1F, 0x07, 0x80, 0x04, 0x01, 0xE0, + 0x0F, 0x00, 0x78, 0x01, 0x00, 0x00, 0x0F, 0x83, 0xFC, 0x7F, 0xE7, 0x9E, + 0xF0, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xF0, 0x07, 0x82, 0x7F, 0xE3, 0xFE, + 0x0F, 0xC0, 0x02, 0x00, 0x78, 0x0F, 0x01, 0xE0, 0x08, 0x00, 0x00, 0x0F, + 0x83, 0xFC, 0x7F, 0xE7, 0x9E, 0xF0, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xF0, + 0x07, 0x82, 0x7F, 0xE3, 0xFE, 0x0F, 0xC0, 0x04, 0x00, 0xE0, 0x1F, 0x03, + 0xB8, 0x11, 0x00, 0x00, 0x0F, 0x83, 0xFC, 0x7F, 0xE7, 0x9E, 0xF0, 0xFF, + 0x0F, 0xFF, 0xFF, 0xFF, 0xF0, 0x07, 0x82, 0x7F, 0xE3, 0xFE, 0x0F, 0xC0, + 0x30, 0xC7, 0x9E, 0x79, 0xE3, 0x0C, 0x00, 0x00, 0xF8, 0x3F, 0xC7, 0xFE, + 0x79, 0xEF, 0x0F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x78, 0x27, 0xFE, + 0x3F, 0xE0, 0xFC, 0x23, 0xC7, 0x8F, 0x08, 0x07, 0x9E, 0x79, 0xE7, 0x9E, + 0x79, 0xE7, 0x9E, 0x79, 0xE7, 0x80, 0x10, 0xF7, 0xBC, 0x40, 0x07, 0x9E, + 0x79, 0xE7, 0x9E, 0x79, 0xE7, 0x9E, 0x79, 0xE7, 0x80, 0x10, 0x71, 0xF7, + 0x74, 0x40, 0x1E, 0x3C, 0x78, 0xF1, 0xE3, 0xC7, 0x8F, 0x1E, 0x3C, 0x78, + 0xF1, 0xE0, 0x61, 0xBC, 0xFF, 0x3D, 0x86, 0x00, 0x07, 0x81, 0xE0, 0x78, + 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x81, 0xE0, 0x78, 0x1E, 0x07, + 0x80, 0x02, 0x00, 0xF1, 0x07, 0xF0, 0x7F, 0x0F, 0xE0, 0x5E, 0x00, 0xE1, + 0xFF, 0x3F, 0xF7, 0xFF, 0xF8, 0xFF, 0x0F, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, + 0x9E, 0x7F, 0xE3, 0xFC, 0x1F, 0x00, 0x18, 0x87, 0xF9, 0xFE, 0x11, 0x80, + 0x00, 0x00, 0x1F, 0xC7, 0xFE, 0xFF, 0xDE, 0x7F, 0xC7, 0xF8, 0xFF, 0x1F, + 0xE3, 0xFC, 0x7F, 0x8F, 0xF1, 0xFE, 0x3F, 0xC7, 0x80, 0x04, 0x00, 0xF0, + 0x03, 0xC0, 0x0F, 0x00, 0x10, 0x00, 0x00, 0x3E, 0x07, 0xFC, 0x7F, 0xF3, + 0xC7, 0xBC, 0x1F, 0xE0, 0xFF, 0x07, 0xF8, 0x3F, 0xC1, 0xEF, 0x1E, 0x7F, + 0xF1, 0xFF, 0x03, 0xE0, 0x01, 0x00, 0x1E, 0x01, 0xE0, 0x1E, 0x00, 0x40, + 0x00, 0x00, 0x3E, 0x07, 0xFC, 0x7F, 0xF3, 0xC7, 0xBC, 0x1F, 0xE0, 0xFF, + 0x07, 0xF8, 0x3F, 0xC1, 0xEF, 0x1E, 0x7F, 0xF1, 0xFF, 0x03, 0xE0, 0x02, + 0x00, 0x38, 0x03, 0xE0, 0x3B, 0x80, 0x88, 0x00, 0x00, 0x3E, 0x07, 0xFC, + 0x7F, 0xF3, 0xC7, 0xBC, 0x1F, 0xE0, 0xFF, 0x07, 0xF8, 0x3F, 0xC1, 0xEF, + 0x1E, 0x7F, 0xF1, 0xFF, 0x03, 0xE0, 0x0C, 0x40, 0xFF, 0x0F, 0xF0, 0x23, + 0x00, 0x00, 0x00, 0x00, 0x3E, 0x07, 0xFC, 0x7F, 0xF3, 0xC7, 0xBC, 0x1F, + 0xE0, 0xFF, 0x07, 0xF8, 0x3F, 0xC1, 0xEF, 0x1E, 0x7F, 0xF1, 0xFF, 0x03, + 0xE0, 0x30, 0xC3, 0xCF, 0x1E, 0x78, 0x61, 0x80, 0x00, 0x07, 0xC0, 0xFF, + 0x8F, 0xFE, 0x78, 0xF7, 0x83, 0xFC, 0x1F, 0xE0, 0xFF, 0x07, 0xF8, 0x3D, + 0xE3, 0xCF, 0xFE, 0x3F, 0xE0, 0x7C, 0x00, 0x06, 0x00, 0xF0, 0x0F, 0x00, + 0x60, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x60, 0x0F, 0x00, + 0xF0, 0x06, 0x00, 0x00, 0x00, 0x7D, 0xCF, 0xFC, 0xFF, 0xE7, 0x8F, 0x78, + 0xFF, 0xCF, 0xFE, 0xEF, 0xFE, 0x7F, 0xE3, 0xDE, 0x3C, 0xFF, 0xE7, 0xFE, + 0x77, 0xC0, 0x00, 0x00, 0x08, 0x07, 0x80, 0x78, 0x07, 0x80, 0x20, 0x00, + 0x3C, 0x7F, 0x8F, 0xF1, 0xFE, 0x3F, 0xC7, 0xF8, 0xFF, 0x1F, 0xE3, 0xFC, + 0x7F, 0xCF, 0x7F, 0xEF, 0xFC, 0x7F, 0x00, 0x02, 0x00, 0xF0, 0x3C, 0x0F, + 0x00, 0x80, 0x00, 0x3C, 0x7F, 0x8F, 0xF1, 0xFE, 0x3F, 0xC7, 0xF8, 0xFF, + 0x1F, 0xE3, 0xFC, 0x7F, 0xCF, 0x7F, 0xEF, 0xFC, 0x7F, 0x00, 0x04, 0x01, + 0xC0, 0x7C, 0x1D, 0xC1, 0x10, 0x00, 0x3C, 0x7F, 0x8F, 0xF1, 0xFE, 0x3F, + 0xC7, 0xF8, 0xFF, 0x1F, 0xE3, 0xFC, 0x7F, 0xCF, 0x7F, 0xEF, 0xFC, 0x7F, + 0x00, 0x61, 0x9E, 0x7B, 0xCF, 0x30, 0xC0, 0x01, 0xE3, 0xFC, 0x7F, 0x8F, + 0xF1, 0xFE, 0x3F, 0xC7, 0xF8, 0xFF, 0x1F, 0xE3, 0xFE, 0x7B, 0xFF, 0x7F, + 0xE3, 0xF8, 0x00, 0x80, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0x20, 0x00, 0x03, + 0xC1, 0xFF, 0x1F, 0x78, 0xF3, 0xC7, 0x9E, 0x3C, 0x7B, 0xC3, 0xDE, 0x1E, + 0xF0, 0x77, 0x03, 0xF8, 0x1F, 0xC0, 0x7C, 0x03, 0xE0, 0x3E, 0x0F, 0xF0, + 0x7F, 0x03, 0xF0, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, + 0x00, 0xFF, 0x0F, 0xFC, 0xFF, 0xEF, 0x1E, 0xF0, 0xFF, 0x0F, 0xF0, 0xFF, + 0x0F, 0xF0, 0xFF, 0x1F, 0xFF, 0xEF, 0xFC, 0xFF, 0x8F, 0x00, 0xF0, 0x0F, + 0x00, 0xF0, 0x00, 0x18, 0x61, 0xE7, 0x8F, 0x3C, 0x30, 0xC0, 0x00, 0x78, + 0x3F, 0xE3, 0xEF, 0x1E, 0x78, 0xF3, 0xC7, 0x8F, 0x78, 0x7B, 0xC3, 0xDE, + 0x0E, 0xE0, 0x7F, 0x03, 0xF8, 0x0F, 0x80, 0x7C, 0x07, 0xC1, 0xFE, 0x0F, + 0xE0, 0x7E, 0x00 }; + +const GFXglyph Ubuntu_Bold12pt8bGlyphs[] PROGMEM = { + { 0, 1, 1, 6, 0, 0 }, // 0x20 ' ' U+0020 + { 1, 4, 17, 8, 2, -16 }, // 0x21 '!' U+0021 + { 10, 9, 7, 11, 1, -17 }, // 0x22 '"' U+0022 + { 18, 15, 17, 17, 1, -16 }, // 0x23 '#' U+0023 + { 50, 12, 22, 14, 1, -18 }, // 0x24 '$' U+0024 + { 83, 20, 17, 22, 1, -16 }, // 0x25 '%' U+0025 + { 126, 16, 17, 17, 1, -16 }, // 0x26 '&' U+0026 + { 160, 4, 7, 6, 1, -17 }, // 0x27 ''' U+0027 + { 164, 7, 23, 9, 2, -18 }, // 0x28 '(' U+0028 + { 185, 7, 23, 9, 0, -18 }, // 0x29 ')' U+0029 + { 206, 11, 10, 12, 1, -16 }, // 0x2a '*' U+002A + { 220, 11, 11, 13, 1, -12 }, // 0x2b '+' U+002B + { 236, 5, 8, 6, 0, -3 }, // 0x2c ',' U+002C + { 241, 7, 3, 9, 1, -8 }, // 0x2d '-' U+002D + { 244, 4, 4, 6, 1, -3 }, // 0x2e '.' U+002E + { 246, 12, 23, 10, -1, -18 }, // 0x2f '/' U+002F + { 281, 12, 17, 14, 1, -16 }, // 0x30 '0' U+0030 + { 307, 8, 17, 14, 2, -16 }, // 0x31 '1' U+0031 + { 324, 12, 17, 14, 1, -16 }, // 0x32 '2' U+0032 + { 350, 11, 17, 14, 1, -16 }, // 0x33 '3' U+0033 + { 374, 12, 17, 14, 1, -16 }, // 0x34 '4' U+0034 + { 400, 12, 17, 14, 1, -16 }, // 0x35 '5' U+0035 + { 426, 12, 17, 14, 1, -16 }, // 0x36 '6' U+0036 + { 452, 12, 17, 14, 1, -16 }, // 0x37 '7' U+0037 + { 478, 12, 17, 14, 1, -16 }, // 0x38 '8' U+0038 + { 504, 12, 17, 14, 1, -16 }, // 0x39 '9' U+0039 + { 530, 4, 13, 6, 1, -12 }, // 0x3a ':' U+003A + { 537, 5, 17, 6, 0, -12 }, // 0x3b ';' U+003B + { 548, 12, 11, 14, 1, -12 }, // 0x3c '<' U+003C + { 565, 11, 8, 14, 2, -10 }, // 0x3d '=' U+003D + { 576, 12, 11, 14, 1, -12 }, // 0x3e '>' U+003E + { 593, 10, 19, 11, 0, -18 }, // 0x3f '?' U+003F + { 617, 21, 21, 23, 1, -16 }, // 0x40 '@' U+0040 + { 673, 17, 17, 17, 0, -16 }, // 0x41 'A' U+0041 + { 710, 13, 17, 16, 2, -16 }, // 0x42 'B' U+0042 + { 738, 14, 17, 16, 1, -16 }, // 0x43 'C' U+0043 + { 768, 15, 17, 18, 2, -16 }, // 0x44 'D' U+0044 + { 800, 12, 17, 15, 2, -16 }, // 0x45 'E' U+0045 + { 826, 11, 17, 14, 2, -16 }, // 0x46 'F' U+0046 + { 850, 14, 17, 17, 1, -16 }, // 0x47 'G' U+0047 + { 880, 14, 17, 18, 2, -16 }, // 0x48 'H' U+0048 + { 910, 4, 17, 8, 2, -16 }, // 0x49 'I' U+0049 + { 919, 11, 17, 13, 0, -16 }, // 0x4a 'J' U+004A + { 943, 14, 17, 16, 2, -16 }, // 0x4b 'K' U+004B + { 973, 12, 17, 14, 2, -16 }, // 0x4c 'L' U+004C + { 999, 19, 17, 21, 1, -16 }, // 0x4d 'M' U+004D + { 1040, 14, 17, 18, 2, -16 }, // 0x4e 'N' U+004E + { 1070, 17, 17, 19, 1, -16 }, // 0x4f 'O' U+004F + { 1107, 12, 17, 15, 2, -16 }, // 0x50 'P' U+0050 + { 1133, 17, 22, 19, 1, -16 }, // 0x51 'Q' U+0051 + { 1180, 14, 17, 16, 2, -16 }, // 0x52 'R' U+0052 + { 1210, 12, 17, 14, 1, -16 }, // 0x53 'S' U+0053 + { 1236, 14, 17, 14, 0, -16 }, // 0x54 'T' U+0054 + { 1266, 13, 17, 17, 2, -16 }, // 0x55 'U' U+0055 + { 1294, 17, 17, 17, 0, -16 }, // 0x56 'V' U+0056 + { 1331, 23, 17, 23, 0, -16 }, // 0x57 'W' U+0057 + { 1380, 16, 17, 16, 0, -16 }, // 0x58 'X' U+0058 + { 1414, 16, 17, 16, 0, -16 }, // 0x59 'Y' U+0059 + { 1448, 13, 17, 15, 1, -16 }, // 0x5a 'Z' U+005A + { 1476, 7, 23, 9, 2, -18 }, // 0x5b '[' U+005B + { 1497, 12, 23, 10, -1, -18 }, // 0x5c '\' U+005C + { 1532, 7, 23, 9, 0, -18 }, // 0x5d ']' U+005D + { 1553, 13, 10, 13, 0, -16 }, // 0x5e '^' U+005E + { 1570, 12, 3, 12, 0, 2 }, // 0x5f '_' U+005F + { 1575, 6, 5, 7, 1, -18 }, // 0x60 '`' U+0060 + { 1579, 10, 13, 13, 1, -12 }, // 0x61 'a' U+0061 + { 1596, 12, 19, 15, 2, -18 }, // 0x62 'b' U+0062 + { 1625, 10, 13, 12, 1, -12 }, // 0x63 'c' U+0063 + { 1642, 12, 19, 15, 1, -18 }, // 0x64 'd' U+0064 + { 1671, 12, 13, 14, 1, -12 }, // 0x65 'e' U+0065 + { 1691, 9, 19, 10, 2, -18 }, // 0x66 'f' U+0066 + { 1713, 11, 17, 14, 1, -12 }, // 0x67 'g' U+0067 + { 1737, 11, 19, 15, 2, -18 }, // 0x68 'h' U+0068 + { 1764, 4, 19, 8, 2, -18 }, // 0x69 'i' U+0069 + { 1774, 7, 23, 6, -2, -18 }, // 0x6a 'j' U+006A + { 1795, 12, 19, 14, 2, -18 }, // 0x6b 'k' U+006B + { 1824, 6, 19, 8, 2, -18 }, // 0x6c 'l' U+006C + { 1839, 18, 13, 22, 2, -12 }, // 0x6d 'm' U+006D + { 1869, 11, 13, 15, 2, -12 }, // 0x6e 'n' U+006E + { 1887, 13, 13, 15, 1, -12 }, // 0x6f 'o' U+006F + { 1909, 12, 17, 15, 2, -12 }, // 0x70 'p' U+0070 + { 1935, 13, 17, 15, 1, -12 }, // 0x71 'q' U+0071 + { 1963, 9, 13, 11, 2, -12 }, // 0x72 'r' U+0072 + { 1978, 10, 13, 12, 1, -12 }, // 0x73 's' U+0073 + { 1995, 9, 17, 11, 2, -16 }, // 0x74 't' U+0074 + { 2015, 11, 13, 15, 2, -12 }, // 0x75 'u' U+0075 + { 2033, 13, 13, 13, 0, -12 }, // 0x76 'v' U+0076 + { 2055, 19, 13, 19, 0, -12 }, // 0x77 'w' U+0077 + { 2086, 13, 13, 13, 0, -12 }, // 0x78 'x' U+0078 + { 2108, 13, 17, 13, 0, -12 }, // 0x79 'y' U+0079 + { 2136, 10, 13, 12, 1, -12 }, // 0x7a 'z' U+007A + { 2153, 8, 23, 9, 1, -18 }, // 0x7b '{' U+007B + { 2176, 3, 23, 7, 2, -18 }, // 0x7c '|' U+007C + { 2185, 8, 23, 9, 0, -18 }, // 0x7d '}' U+007D + { 2208, 12, 5, 14, 1, -9 }, // 0x7e '~' U+007E + { 2216, 10, 18, 12, 1, -17 }, // 0x7f 'REPLACEMENT CHARACTER *' U+2370 + { 2239, 1, 1, 6, 0, 0 }, // 0x80 'NO-BREAK SPACE' U+00A0 + { 2240, 4, 17, 8, 2, -12 }, // 0x81 'INVERTED EXCLAMATION MARK' U+00A1 + { 2249, 11, 18, 14, 1, -15 }, // 0x82 'CENT SIGN' U+00A2 + { 2274, 11, 17, 14, 1, -16 }, // 0x83 'POUND SIGN' U+00A3 + { 2298, 11, 11, 14, 1, -13 }, // 0x84 'CURRENCY SIGN' U+00A4 + { 2314, 14, 17, 14, 0, -16 }, // 0x85 'YEN SIGN' U+00A5 + { 2344, 4, 23, 7, 2, -18 }, // 0x86 'BROKEN BAR' U+00A6 + { 2356, 10, 21, 12, 1, -16 }, // 0x87 'SECTION SIGN' U+00A7 + { 2383, 10, 4, 13, 2, -17 }, // 0x88 'DIAERESIS' U+00A8 + { 2388, 17, 17, 19, 1, -16 }, // 0x89 'COPYRIGHT SIGN' U+00A9 + { 2425, 8, 9, 10, 1, -16 }, // 0x8a 'FEMININE ORDINAL INDICATOR' U+00AA + { 2434, 12, 11, 14, 1, -11 }, // 0x8b 'LEFT-POINTING DOUBLE ANGLE QUOTATION MARK' U+00AB + { 2451, 12, 9, 14, 1, -9 }, // 0x8c 'NOT SIGN' U+00AC + { 2465, 7, 3, 9, 1, -8 }, // 0x8d 'SOFT HYPHEN' U+00AD + { 2468, 17, 17, 19, 1, -16 }, // 0x8e 'REGISTERED SIGN' U+00AE + { 2505, 8, 2, 9, 1, -16 }, // 0x8f 'MACRON' U+00AF + { 2507, 7, 7, 8, 0, -17 }, // 0x90 'DEGREE SIGN' U+00B0 + { 2514, 11, 15, 13, 1, -14 }, // 0x91 'PLUS-MINUS SIGN' U+00B1 + { 2535, 8, 10, 9, 0, -16 }, // 0x92 'SUPERSCRIPT TWO' U+00B2 + { 2545, 8, 10, 9, 0, -16 }, // 0x93 'SUPERSCRIPT THREE' U+00B3 + { 2555, 6, 5, 7, 0, -18 }, // 0x94 'ACUTE ACCENT' U+00B4 + { 2559, 11, 17, 15, 2, -12 }, // 0x95 'MICRO SIGN' U+00B5 + { 2583, 14, 21, 17, 1, -16 }, // 0x96 'PILCROW SIGN' U+00B6 + { 2620, 4, 4, 6, 1, -8 }, // 0x97 'MIDDLE DOT' U+00B7 + { 2622, 6, 5, 8, 1, 1 }, // 0x98 'CEDILLA' U+00B8 + { 2626, 6, 10, 9, 1, -16 }, // 0x99 'SUPERSCRIPT ONE' U+00B9 + { 2634, 9, 10, 11, 1, -16 }, // 0x9a 'MASCULINE ORDINAL INDICATOR' U+00BA + { 2646, 12, 11, 14, 1, -11 }, // 0x9b 'RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK' U+00BB + { 2663, 20, 17, 21, 1, -16 }, // 0x9c 'VULGAR FRACTION ONE QUARTER' U+00BC + { 2706, 19, 17, 21, 1, -16 }, // 0x9d 'VULGAR FRACTION ONE HALF' U+00BD + { 2747, 21, 17, 21, 0, -16 }, // 0x9e 'VULGAR FRACTION THREE QUARTERS' U+00BE + { 2792, 10, 17, 11, 1, -12 }, // 0x9f 'INVERTED QUESTION MARK' U+00BF + { 2814, 17, 23, 17, 0, -22 }, // 0xa0 'LATIN CAPITAL LETTER A WITH GRAVE' U+00C0 + { 2863, 17, 23, 17, 0, -22 }, // 0xa1 'LATIN CAPITAL LETTER A WITH ACUTE' U+00C1 + { 2912, 17, 23, 17, 0, -22 }, // 0xa2 'LATIN CAPITAL LETTER A WITH CIRCUMFLEX' U+00C2 + { 2961, 17, 23, 17, 0, -22 }, // 0xa3 'LATIN CAPITAL LETTER A WITH TILDE' U+00C3 + { 3010, 17, 22, 17, 0, -21 }, // 0xa4 'LATIN CAPITAL LETTER A WITH DIAERESIS' U+00C4 + { 3057, 17, 22, 17, 0, -21 }, // 0xa5 'LATIN CAPITAL LETTER A WITH RING ABOVE' U+00C5 + { 3104, 23, 17, 24, 0, -16 }, // 0xa6 'LATIN CAPITAL LETTER AE' U+00C6 + { 3153, 14, 22, 16, 1, -16 }, // 0xa7 'LATIN CAPITAL LETTER C WITH CEDILLA' U+00C7 + { 3192, 12, 23, 15, 2, -22 }, // 0xa8 'LATIN CAPITAL LETTER E WITH GRAVE' U+00C8 + { 3227, 12, 23, 15, 2, -22 }, // 0xa9 'LATIN CAPITAL LETTER E WITH ACUTE' U+00C9 + { 3262, 12, 23, 15, 2, -22 }, // 0xaa 'LATIN CAPITAL LETTER E WITH CIRCUMFLEX' U+00CA + { 3297, 12, 22, 15, 2, -21 }, // 0xab 'LATIN CAPITAL LETTER E WITH DIAERESIS' U+00CB + { 3330, 6, 23, 8, 1, -22 }, // 0xac 'LATIN CAPITAL LETTER I WITH GRAVE' U+00CC + { 3348, 6, 23, 8, 1, -22 }, // 0xad 'LATIN CAPITAL LETTER I WITH ACUTE' U+00CD + { 3366, 7, 23, 8, 1, -22 }, // 0xae 'LATIN CAPITAL LETTER I WITH CIRCUMFLEX' U+00CE + { 3387, 10, 22, 8, -1, -21 }, // 0xaf 'LATIN CAPITAL LETTER I WITH DIAERESIS' U+00CF + { 3415, 17, 17, 18, 0, -16 }, // 0xb0 'LATIN CAPITAL LETTER ETH' U+00D0 + { 3452, 14, 23, 18, 2, -22 }, // 0xb1 'LATIN CAPITAL LETTER N WITH TILDE' U+00D1 + { 3493, 17, 23, 19, 1, -22 }, // 0xb2 'LATIN CAPITAL LETTER O WITH GRAVE' U+00D2 + { 3542, 17, 23, 19, 1, -22 }, // 0xb3 'LATIN CAPITAL LETTER O WITH ACUTE' U+00D3 + { 3591, 17, 23, 19, 1, -22 }, // 0xb4 'LATIN CAPITAL LETTER O WITH CIRCUMFLEX' U+00D4 + { 3640, 17, 23, 19, 1, -22 }, // 0xb5 'LATIN CAPITAL LETTER O WITH TILDE' U+00D5 + { 3689, 17, 22, 19, 1, -21 }, // 0xb6 'LATIN CAPITAL LETTER O WITH DIAERESIS' U+00D6 + { 3736, 12, 11, 14, 1, -12 }, // 0xb7 'MULTIPLICATION SIGN' U+00D7 + { 3753, 17, 19, 19, 1, -17 }, // 0xb8 'LATIN CAPITAL LETTER O WITH STROKE' U+00D8 + { 3794, 13, 23, 17, 2, -22 }, // 0xb9 'LATIN CAPITAL LETTER U WITH GRAVE' U+00D9 + { 3832, 13, 23, 17, 2, -22 }, // 0xba 'LATIN CAPITAL LETTER U WITH ACUTE' U+00DA + { 3870, 13, 23, 17, 2, -22 }, // 0xbb 'LATIN CAPITAL LETTER U WITH CIRCUMFLEX' U+00DB + { 3908, 13, 22, 17, 2, -21 }, // 0xbc 'LATIN CAPITAL LETTER U WITH DIAERESIS' U+00DC + { 3944, 16, 23, 16, 0, -22 }, // 0xbd 'LATIN CAPITAL LETTER Y WITH ACUTE' U+00DD + { 3990, 12, 17, 15, 2, -16 }, // 0xbe 'LATIN CAPITAL LETTER THORN' U+00DE + { 4016, 13, 19, 16, 2, -18 }, // 0xbf 'LATIN SMALL LETTER SHARP S' U+00DF + { 4047, 10, 19, 13, 1, -18 }, // 0xc0 'LATIN SMALL LETTER A WITH GRAVE' U+00E0 + { 4071, 10, 19, 13, 1, -18 }, // 0xc1 'LATIN SMALL LETTER A WITH ACUTE' U+00E1 + { 4095, 10, 19, 13, 1, -18 }, // 0xc2 'LATIN SMALL LETTER A WITH CIRCUMFLEX' U+00E2 + { 4119, 10, 19, 13, 1, -18 }, // 0xc3 'LATIN SMALL LETTER A WITH TILDE' U+00E3 + { 4143, 10, 18, 13, 1, -17 }, // 0xc4 'LATIN SMALL LETTER A WITH DIAERESIS' U+00E4 + { 4166, 10, 20, 13, 1, -19 }, // 0xc5 'LATIN SMALL LETTER A WITH RING ABOVE' U+00E5 + { 4191, 19, 13, 21, 1, -12 }, // 0xc6 'LATIN SMALL LETTER AE' U+00E6 + { 4222, 10, 18, 12, 1, -12 }, // 0xc7 'LATIN SMALL LETTER C WITH CEDILLA' U+00E7 + { 4245, 12, 19, 14, 1, -18 }, // 0xc8 'LATIN SMALL LETTER E WITH GRAVE' U+00E8 + { 4274, 12, 19, 14, 1, -18 }, // 0xc9 'LATIN SMALL LETTER E WITH ACUTE' U+00E9 + { 4303, 12, 19, 14, 1, -18 }, // 0xca 'LATIN SMALL LETTER E WITH CIRCUMFLEX' U+00EA + { 4332, 12, 18, 14, 1, -17 }, // 0xcb 'LATIN SMALL LETTER E WITH DIAERESIS' U+00EB + { 4359, 6, 19, 8, 1, -18 }, // 0xcc 'LATIN SMALL LETTER I WITH GRAVE' U+00EC + { 4374, 6, 19, 8, 1, -18 }, // 0xcd 'LATIN SMALL LETTER I WITH ACUTE' U+00ED + { 4389, 7, 19, 8, 1, -18 }, // 0xce 'LATIN SMALL LETTER I WITH CIRCUMFLEX' U+00EE + { 4406, 10, 18, 8, -1, -17 }, // 0xcf 'LATIN SMALL LETTER I WITH DIAERESIS' U+00EF + { 4429, 12, 19, 14, 1, -18 }, // 0xd0 'LATIN SMALL LETTER ETH' U+00F0 + { 4458, 11, 19, 15, 2, -18 }, // 0xd1 'LATIN SMALL LETTER N WITH TILDE' U+00F1 + { 4485, 13, 19, 15, 1, -18 }, // 0xd2 'LATIN SMALL LETTER O WITH GRAVE' U+00F2 + { 4516, 13, 19, 15, 1, -18 }, // 0xd3 'LATIN SMALL LETTER O WITH ACUTE' U+00F3 + { 4547, 13, 19, 15, 1, -18 }, // 0xd4 'LATIN SMALL LETTER O WITH CIRCUMFLEX' U+00F4 + { 4578, 13, 19, 15, 1, -18 }, // 0xd5 'LATIN SMALL LETTER O WITH TILDE' U+00F5 + { 4609, 13, 18, 15, 1, -17 }, // 0xd6 'LATIN SMALL LETTER O WITH DIAERESIS' U+00F6 + { 4639, 12, 13, 14, 1, -12 }, // 0xd7 'DIVISION SIGN' U+00F7 + { 4659, 13, 15, 15, 1, -13 }, // 0xd8 'LATIN SMALL LETTER O WITH STROKE' U+00F8 + { 4684, 11, 19, 15, 2, -18 }, // 0xd9 'LATIN SMALL LETTER U WITH GRAVE' U+00F9 + { 4711, 11, 19, 15, 2, -18 }, // 0xda 'LATIN SMALL LETTER U WITH ACUTE' U+00FA + { 4738, 11, 19, 15, 2, -18 }, // 0xdb 'LATIN SMALL LETTER U WITH CIRCUMFLEX' U+00FB + { 4765, 11, 18, 15, 2, -17 }, // 0xdc 'LATIN SMALL LETTER U WITH DIAERESIS' U+00FC + { 4790, 13, 23, 13, 0, -18 }, // 0xdd 'LATIN SMALL LETTER Y WITH ACUTE' U+00FD + { 4828, 12, 23, 15, 2, -18 }, // 0xde 'LATIN SMALL LETTER THORN' U+00FE + { 4863, 13, 22, 13, 0, -17 } }; // 0xdf 'LATIN SMALL LETTER Y WITH DIAERESIS' U+000FF + +const GFXfont Ubuntu_Bold12pt8b PROGMEM = { + (uint8_t *)Ubuntu_Bold12pt8bBitmaps, + (GFXglyph *)Ubuntu_Bold12pt8bGlyphs, + 0x20, 0xDF, 27 }; + +// Approx. 6250 bytes diff --git a/lib/obp60task/fonts/Ubuntu_Bold16pt8b.h b/lib/obp60task/fonts/Ubuntu_Bold16pt8b.h new file mode 100644 index 0000000..cb0c69d --- /dev/null +++ b/lib/obp60task/fonts/Ubuntu_Bold16pt8b.h @@ -0,0 +1,866 @@ +const uint8_t Ubuntu_Bold16pt8bBitmaps[] PROGMEM = { + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x00, 0x0E, 0xFF, + 0xFF, 0xF7, 0x00, 0xF9, 0xFF, 0x9F, 0xF9, 0xFF, 0x9F, 0xF9, 0xFF, 0x9F, + 0xF9, 0xFF, 0x1E, 0x70, 0xE0, 0x07, 0xCF, 0x81, 0xF3, 0xE0, 0x7D, 0xF8, + 0x3E, 0x7C, 0x0F, 0x9F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xC7, 0xCF, 0x81, 0xF3, 0xE0, 0x7C, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3E, 0x7C, 0x0F, 0x9F, 0x07, 0xEF, 0x81, + 0xF3, 0xE0, 0x7C, 0xF8, 0x00, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x07, + 0xF8, 0x1F, 0xFE, 0x3F, 0xFE, 0x3F, 0xFC, 0x7E, 0x0C, 0x7C, 0x00, 0x7C, + 0x00, 0x7E, 0x00, 0x7F, 0xE0, 0x3F, 0xF8, 0x1F, 0xFC, 0x0F, 0xFE, 0x01, + 0xFF, 0x00, 0x3F, 0x00, 0x1F, 0x00, 0x1F, 0x70, 0x3F, 0x7F, 0xFE, 0xFF, + 0xFE, 0xFF, 0xFC, 0x1F, 0xF0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, + 0xC0, 0x1F, 0x80, 0xF8, 0x0F, 0xF0, 0x3C, 0x07, 0xFE, 0x1F, 0x03, 0xE7, + 0xC7, 0x80, 0xF0, 0xF3, 0xE0, 0x3C, 0x3C, 0xF0, 0x0F, 0x0F, 0x78, 0x03, + 0xC3, 0xFE, 0x00, 0xF9, 0xFF, 0x00, 0x1F, 0xFF, 0xDF, 0x83, 0xFD, 0xEF, + 0xF0, 0x7E, 0xFF, 0xFE, 0x00, 0x3F, 0xE7, 0xC0, 0x1F, 0xF0, 0xF0, 0x07, + 0xBC, 0x3C, 0x03, 0xCF, 0x0F, 0x01, 0xF3, 0xC3, 0xC0, 0x78, 0xF9, 0xF0, + 0x3E, 0x1F, 0xF8, 0x0F, 0x03, 0xFC, 0x07, 0xC0, 0x7E, 0x00, 0x07, 0xF0, + 0x00, 0x7F, 0xE0, 0x07, 0xFF, 0x80, 0x7F, 0xFC, 0x03, 0xE3, 0xE0, 0x1F, + 0x1F, 0x00, 0xFD, 0xF0, 0x03, 0xFF, 0x80, 0x1F, 0xF8, 0x00, 0xFF, 0x00, + 0x0F, 0xFC, 0xF8, 0xFF, 0xF7, 0xC7, 0xDF, 0xBE, 0x7C, 0x7F, 0xE3, 0xE1, + 0xFF, 0x1F, 0x07, 0xF0, 0xFC, 0x1F, 0x87, 0xFF, 0xFE, 0x1F, 0xFF, 0xF8, + 0x7F, 0xFF, 0xE0, 0xFE, 0x3F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x70, + 0x04, 0x07, 0x87, 0xE3, 0xE3, 0xF1, 0xF1, 0xF8, 0xF8, 0x7C, 0x3E, 0x3E, + 0x1F, 0x0F, 0x87, 0xC3, 0xE1, 0xF0, 0xF8, 0x7C, 0x3E, 0x1F, 0x07, 0xC3, + 0xE1, 0xF0, 0xFC, 0x3E, 0x1F, 0x87, 0xC3, 0xF0, 0xF0, 0x20, 0x10, 0x3C, + 0x3F, 0x0F, 0x87, 0xE1, 0xF0, 0xFC, 0x3E, 0x1F, 0x0F, 0x83, 0xE1, 0xF0, + 0xF8, 0x7C, 0x3E, 0x1F, 0x0F, 0x87, 0xC3, 0xE1, 0xF1, 0xF0, 0xF8, 0x7C, + 0x7E, 0x3E, 0x3F, 0x1F, 0x1F, 0x87, 0x80, 0x80, 0x0F, 0x80, 0x7C, 0x1B, + 0xCC, 0xEE, 0xEF, 0xFF, 0xFF, 0xFC, 0x1C, 0x03, 0xF8, 0x3D, 0xE3, 0xEF, + 0x8E, 0x38, 0x11, 0x00, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x01, 0xE0, 0x07, + 0x83, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x1E, 0x00, 0x78, 0x01, + 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x7D, 0xF7, 0xDF, 0x7D, 0xE7, 0xBE, 0xF1, + 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x7B, 0xFF, 0xFF, 0xFD, 0xE0, 0x00, + 0x3E, 0x00, 0xFC, 0x01, 0xF0, 0x03, 0xE0, 0x0F, 0xC0, 0x1F, 0x00, 0x3E, + 0x00, 0xFC, 0x01, 0xF0, 0x03, 0xE0, 0x0F, 0xC0, 0x1F, 0x00, 0x3E, 0x00, + 0xFC, 0x01, 0xF0, 0x03, 0xE0, 0x0F, 0xC0, 0x1F, 0x00, 0x3E, 0x00, 0xFC, + 0x01, 0xF0, 0x03, 0xE0, 0x0F, 0xC0, 0x1F, 0x00, 0x3E, 0x00, 0xFC, 0x01, + 0xF0, 0x03, 0xE0, 0x0F, 0xC0, 0x1F, 0x00, 0x00, 0x07, 0xE0, 0x1F, 0xF8, + 0x3F, 0xFC, 0x3F, 0xFC, 0x7E, 0x7E, 0x7C, 0x3E, 0xF8, 0x1F, 0xF8, 0x1F, + 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, + 0xF8, 0x1F, 0x7C, 0x3E, 0x7E, 0x7E, 0x3F, 0xFC, 0x3F, 0xFC, 0x1F, 0xF8, + 0x07, 0xE0, 0x03, 0xC1, 0xF1, 0xFD, 0xFF, 0xFF, 0xFF, 0xF7, 0x7D, 0x1F, + 0x07, 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, + 0xF0, 0x7C, 0x1F, 0x07, 0xC0, 0x0F, 0xC0, 0x7F, 0xE3, 0xFF, 0xE7, 0xFF, + 0xE7, 0x8F, 0xC4, 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0xF8, 0x03, 0xF0, + 0x0F, 0xC0, 0x3F, 0x00, 0xFE, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x3E, + 0x00, 0xFF, 0xFD, 0xFF, 0xFB, 0xFF, 0xF7, 0xFF, 0xE0, 0x1F, 0xC0, 0xFF, + 0xE3, 0xFF, 0xE3, 0xFF, 0xE6, 0x0F, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x7C, + 0x1F, 0xF8, 0x3F, 0xC0, 0x7F, 0xE0, 0xFF, 0xE0, 0x0F, 0xE0, 0x07, 0xC0, + 0x0F, 0x80, 0x1F, 0x60, 0x7F, 0xFF, 0xFB, 0xFF, 0xF7, 0xFF, 0xC3, 0xFC, + 0x00, 0x00, 0x7C, 0x00, 0xFC, 0x01, 0xFC, 0x03, 0xFC, 0x07, 0xFC, 0x0F, + 0xFC, 0x0F, 0x7C, 0x1E, 0x7C, 0x3E, 0x7C, 0x3C, 0x7C, 0x78, 0x7C, 0xF8, + 0x7C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7C, 0x00, + 0x7C, 0x00, 0x7C, 0x00, 0x7C, 0x00, 0x7C, 0x3F, 0xFC, 0x7F, 0xF8, 0xFF, + 0xF1, 0xFF, 0xE3, 0xC0, 0x07, 0x80, 0x1F, 0x00, 0x3F, 0xC0, 0x7F, 0xF0, + 0xFF, 0xF1, 0xFF, 0xF0, 0x0F, 0xF0, 0x07, 0xE0, 0x07, 0xC0, 0x0F, 0x80, + 0x1F, 0x40, 0x7F, 0xFF, 0xFB, 0xFF, 0xE7, 0xFF, 0x83, 0xFC, 0x00, 0x00, + 0x3E, 0x01, 0xFE, 0x07, 0xFE, 0x0F, 0xFE, 0x1F, 0xE0, 0x3F, 0x00, 0x7E, + 0x00, 0x7C, 0x00, 0xFF, 0xF0, 0xFF, 0xFC, 0xFF, 0xFE, 0xFF, 0xFE, 0xF8, + 0x3F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0x7C, 0x3F, 0x7F, 0xFE, 0x3F, + 0xFC, 0x1F, 0xF8, 0x07, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xFC, 0x00, 0xF8, 0x01, 0xF8, 0x01, + 0xF0, 0x01, 0xF0, 0x03, 0xE0, 0x03, 0xE0, 0x03, 0xE0, 0x07, 0xC0, 0x07, + 0xC0, 0x07, 0xC0, 0x0F, 0x80, 0x0F, 0x80, 0x0F, 0x80, 0x0F, 0x80, 0x0F, + 0xE0, 0x3F, 0xF8, 0x7F, 0xFC, 0xFF, 0xFE, 0xFC, 0x7E, 0xF8, 0x3E, 0xF8, + 0x3E, 0xFC, 0x7C, 0x7F, 0xFC, 0x3F, 0xF0, 0x3F, 0xFC, 0x7F, 0xFE, 0xFC, + 0x3E, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xFC, 0x3F, 0x7F, 0xFE, 0x7F, + 0xFE, 0x3F, 0xFC, 0x07, 0xF0, 0x07, 0xE0, 0x1F, 0xF8, 0x3F, 0xFC, 0x7F, + 0xFE, 0xFC, 0x3E, 0xF8, 0x3F, 0xF8, 0x1F, 0xF8, 0x1F, 0xFC, 0x1F, 0x7F, + 0xFF, 0x7F, 0xFF, 0x3F, 0xFF, 0x0F, 0xDF, 0x00, 0x3E, 0x00, 0x7E, 0x00, + 0xFE, 0x03, 0xFC, 0x3F, 0xF8, 0x3F, 0xF0, 0x3F, 0xC0, 0x3E, 0x00, 0x7B, + 0xFF, 0xFF, 0xFD, 0xE0, 0x00, 0x00, 0x00, 0x1E, 0xFF, 0xFF, 0xFF, 0x78, + 0x7B, 0xFF, 0xFF, 0xFD, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xF7, 0xDF, + 0x7D, 0xE7, 0xBE, 0xF1, 0xC0, 0x00, 0x0C, 0x01, 0xF8, 0x3F, 0xFB, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xE0, 0x7C, 0x00, 0xFF, 0x81, 0xFF, 0xF3, + 0xFF, 0xFB, 0xFF, 0xF0, 0xFF, 0xE0, 0x1F, 0x80, 0x03, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x60, 0x01, 0xF0, 0x0F, 0xFC, + 0x3F, 0xFE, 0xFF, 0xFC, 0xFF, 0xF0, 0x7F, 0xC0, 0x1F, 0x03, 0xFC, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xC1, 0xF0, 0x06, 0x00, 0x00, 0x3F, 0x8F, + 0xFC, 0xFF, 0xE7, 0xFF, 0x63, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x03, 0xE0, + 0x7E, 0x0F, 0xC0, 0xF8, 0x1F, 0x01, 0xE0, 0x1E, 0x01, 0xE0, 0x00, 0x00, + 0x00, 0x1E, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x01, 0xE0, 0x00, 0x7F, + 0x80, 0x00, 0x7F, 0xFC, 0x00, 0x7F, 0xFF, 0xC0, 0x3F, 0x03, 0xF8, 0x1F, + 0x00, 0x1F, 0x0F, 0x80, 0x03, 0xC3, 0xC1, 0xF8, 0x79, 0xE1, 0xFF, 0x1E, + 0x78, 0xFF, 0xC7, 0xFE, 0x3C, 0xF0, 0xFF, 0x1E, 0x3C, 0x3F, 0xC7, 0x8F, + 0x0F, 0xF1, 0xE3, 0xC3, 0xFC, 0x78, 0xF0, 0xFF, 0x1E, 0x3C, 0x3F, 0xC7, + 0x8F, 0x0F, 0xF1, 0xE3, 0xC7, 0xBE, 0x3C, 0xF1, 0xE7, 0x8F, 0xFF, 0xF1, + 0xE1, 0xFF, 0xF8, 0x3C, 0x3E, 0xF8, 0x0F, 0x80, 0x00, 0x01, 0xF0, 0x00, + 0x00, 0x3F, 0x80, 0x40, 0x07, 0xFF, 0xF0, 0x00, 0x7F, 0xFC, 0x00, 0x03, + 0xFE, 0x00, 0x00, 0xFC, 0x00, 0x0F, 0xF0, 0x00, 0x7F, 0x80, 0x07, 0xFC, + 0x00, 0x3F, 0xF0, 0x03, 0xEF, 0x80, 0x1F, 0x7E, 0x00, 0xFB, 0xF0, 0x0F, + 0x8F, 0x80, 0x7C, 0x7E, 0x03, 0xE3, 0xF0, 0x3E, 0x0F, 0x81, 0xFF, 0xFC, + 0x1F, 0xFF, 0xF0, 0xFF, 0xFF, 0x87, 0xFF, 0xFC, 0x7E, 0x03, 0xF3, 0xE0, + 0x0F, 0x9F, 0x00, 0x7D, 0xF8, 0x03, 0xFF, 0x80, 0x0F, 0x80, 0xFF, 0xE0, + 0x7F, 0xFE, 0x3F, 0xFF, 0x9F, 0xFF, 0xEF, 0x83, 0xF7, 0xC0, 0xFB, 0xE0, + 0x7D, 0xF0, 0x7E, 0xFF, 0xFE, 0x7F, 0xFE, 0x3F, 0xFF, 0x9F, 0xFF, 0xEF, + 0x81, 0xFF, 0xC0, 0x7F, 0xE0, 0x3F, 0xF0, 0x1F, 0xF8, 0x1F, 0xFF, 0xFF, + 0xBF, 0xFF, 0xDF, 0xFF, 0x87, 0xFF, 0x00, 0x01, 0xFC, 0x03, 0xFF, 0xC7, + 0xFF, 0xE7, 0xFF, 0xE3, 0xF0, 0x33, 0xF0, 0x01, 0xF0, 0x01, 0xF0, 0x00, + 0xF8, 0x00, 0x7C, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0, + 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x7F, 0x03, 0x1F, 0xFF, 0x87, 0xFF, 0xE1, + 0xFF, 0xF0, 0x3F, 0xC0, 0xFF, 0xE0, 0x1F, 0xFF, 0x83, 0xFF, 0xFC, 0x7F, + 0xFF, 0xCF, 0x83, 0xF9, 0xF0, 0x1F, 0xBE, 0x01, 0xF7, 0xC0, 0x1F, 0xF8, + 0x03, 0xFF, 0x00, 0x7F, 0xE0, 0x0F, 0xFC, 0x01, 0xFF, 0x80, 0x3F, 0xF0, + 0x0F, 0xFE, 0x01, 0xF7, 0xC0, 0x7E, 0xF8, 0x3F, 0x9F, 0xFF, 0xF3, 0xFF, + 0xFC, 0x7F, 0xFE, 0x0F, 0xFE, 0x00, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, + 0xFF, 0xFE, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xFF, 0xFC, + 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, + 0xF8, 0x00, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x1F, 0x00, 0x3E, + 0x00, 0x7C, 0x00, 0xFF, 0xFD, 0xFF, 0xFB, 0xFF, 0xF7, 0xFF, 0xEF, 0x80, + 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x01, 0xF0, 0x03, 0xE0, 0x07, + 0xC0, 0x0F, 0x80, 0x00, 0x01, 0xFE, 0x01, 0xFF, 0xF1, 0xFF, 0xFC, 0xFF, + 0xFE, 0x3F, 0x01, 0x9F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x00, 0xF8, 0x00, + 0x3E, 0x00, 0x0F, 0x80, 0x7F, 0xE0, 0x1F, 0xF8, 0x07, 0xFE, 0x01, 0xF7, + 0xC0, 0x7D, 0xF8, 0x1F, 0x7F, 0x07, 0xCF, 0xFF, 0xF1, 0xFF, 0xFC, 0x3F, + 0xFF, 0x01, 0xFF, 0x00, 0xF8, 0x03, 0xFF, 0x00, 0x7F, 0xE0, 0x0F, 0xFC, + 0x01, 0xFF, 0x80, 0x3F, 0xF0, 0x07, 0xFE, 0x00, 0xFF, 0xC0, 0x1F, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x3F, 0xF0, + 0x07, 0xFE, 0x00, 0xFF, 0xC0, 0x1F, 0xF8, 0x03, 0xFF, 0x00, 0x7F, 0xE0, + 0x0F, 0xFC, 0x01, 0xFF, 0x80, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x7C, 0x01, 0xF0, + 0x07, 0xC0, 0x1F, 0x00, 0x7C, 0x01, 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0x7C, + 0x01, 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0x7C, 0x01, 0xF0, 0x07, 0xC0, 0x1F, + 0x60, 0xFD, 0xFF, 0xEF, 0xFF, 0xBF, 0xFC, 0x3F, 0xC0, 0xF8, 0x1F, 0xDF, + 0x07, 0xF3, 0xE1, 0xFC, 0x7C, 0x7F, 0x0F, 0x9F, 0xC1, 0xF7, 0xF0, 0x3F, + 0xFC, 0x07, 0xFF, 0x00, 0xFF, 0xC0, 0x1F, 0xF0, 0x03, 0xFF, 0x00, 0x7F, + 0xF0, 0x0F, 0xFF, 0x01, 0xF7, 0xE0, 0x3E, 0x7E, 0x07, 0xC7, 0xE0, 0xF8, + 0x7E, 0x1F, 0x07, 0xE3, 0xE0, 0x7E, 0x7C, 0x0F, 0xEF, 0x80, 0xFE, 0xF8, + 0x03, 0xE0, 0x0F, 0x80, 0x3E, 0x00, 0xF8, 0x03, 0xE0, 0x0F, 0x80, 0x3E, + 0x00, 0xF8, 0x03, 0xE0, 0x0F, 0x80, 0x3E, 0x00, 0xF8, 0x03, 0xE0, 0x0F, + 0x80, 0x3E, 0x00, 0xF8, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, + 0x3E, 0x00, 0x7C, 0x3E, 0x00, 0x7C, 0x3F, 0x00, 0xFC, 0x7F, 0x00, 0xFE, + 0x7F, 0x80, 0xFE, 0x7F, 0x81, 0xFE, 0x7F, 0xC1, 0xFE, 0x7F, 0xC3, 0xFE, + 0x7F, 0xE3, 0xFE, 0x7D, 0xE7, 0xBE, 0x79, 0xF7, 0x9E, 0x78, 0xF7, 0x9E, + 0x78, 0xFF, 0x1E, 0xF8, 0x7F, 0x1E, 0xF8, 0x7E, 0x1F, 0xF8, 0x3E, 0x1F, + 0xF8, 0x3E, 0x1F, 0xF8, 0x3C, 0x1F, 0xF8, 0x00, 0x1F, 0xF8, 0x00, 0x1F, + 0xF8, 0x00, 0x1F, 0xF8, 0x03, 0xFF, 0x80, 0x7F, 0xF8, 0x0F, 0xFF, 0x01, + 0xFF, 0xF0, 0x3F, 0xFF, 0x07, 0xFF, 0xF0, 0xFF, 0xFF, 0x1F, 0xFB, 0xE3, + 0xFF, 0x3E, 0x7F, 0xE3, 0xEF, 0xFC, 0x7F, 0xFF, 0x87, 0xFF, 0xF0, 0x7F, + 0xFE, 0x07, 0xFF, 0xC0, 0xFF, 0xF8, 0x0F, 0xFF, 0x00, 0xFF, 0xE0, 0x1F, + 0xFC, 0x01, 0xFF, 0x80, 0x3E, 0x01, 0xF8, 0x00, 0xFF, 0xF0, 0x1F, 0xFF, + 0x83, 0xFF, 0xFC, 0x3F, 0x0F, 0xC7, 0xE0, 0x7E, 0x7C, 0x03, 0xEF, 0x80, + 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, + 0x01, 0xFF, 0x80, 0x1F, 0x7C, 0x03, 0xE7, 0xE0, 0x7E, 0x7F, 0x0F, 0xE3, + 0xFF, 0xFC, 0x1F, 0xFF, 0x80, 0xFF, 0xF0, 0x01, 0xFC, 0x00, 0xFF, 0xE0, + 0x7F, 0xFE, 0x3F, 0xFF, 0x9F, 0xFF, 0xEF, 0x83, 0xFF, 0xC0, 0x7F, 0xE0, + 0x3F, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x1F, 0xFF, 0xFF, 0xDF, 0xFF, 0xCF, + 0xFF, 0xC7, 0xFF, 0x83, 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x7C, 0x00, + 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0xFF, 0xF0, + 0x1F, 0xFF, 0x83, 0xFF, 0xFC, 0x3F, 0x0F, 0xC7, 0xE0, 0x7E, 0x7C, 0x03, + 0xEF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, + 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0x7C, 0x03, 0xF7, 0xE0, 0x7E, 0x3F, + 0x0F, 0xE3, 0xFF, 0xFC, 0x1F, 0xFF, 0xC0, 0xFF, 0xF0, 0x01, 0xFE, 0x00, + 0x07, 0xC0, 0x00, 0x7F, 0x00, 0x03, 0xFE, 0x00, 0x1F, 0xE0, 0x00, 0xFC, + 0x00, 0x03, 0xC0, 0xFF, 0xE0, 0x3F, 0xFF, 0x0F, 0xFF, 0xE3, 0xFF, 0xFC, + 0xF8, 0x3F, 0xBE, 0x03, 0xEF, 0x80, 0xFB, 0xE0, 0x3E, 0xF8, 0x0F, 0xBE, + 0x0F, 0xEF, 0xFF, 0xF3, 0xFF, 0xF8, 0xFF, 0xFC, 0x3F, 0xFE, 0x0F, 0x9F, + 0xC3, 0xE3, 0xF0, 0xF8, 0x7E, 0x3E, 0x0F, 0xCF, 0x83, 0xFB, 0xE0, 0x7E, + 0xF8, 0x0F, 0xC0, 0x07, 0xF0, 0x3F, 0xFE, 0x7F, 0xFE, 0x7F, 0xFC, 0xFC, + 0x0C, 0xF8, 0x00, 0xF8, 0x00, 0xFC, 0x00, 0x7F, 0x80, 0x7F, 0xF0, 0x1F, + 0xFC, 0x07, 0xFE, 0x00, 0xFF, 0x00, 0x3F, 0x00, 0x1F, 0x00, 0x1F, 0x70, + 0x3F, 0x7F, 0xFF, 0xFF, 0xFE, 0xFF, 0xFC, 0x1F, 0xE0, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, + 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x7C, 0x00, 0x3E, + 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, + 0xF8, 0x00, 0x7C, 0x00, 0x3E, 0x00, 0xF8, 0x07, 0xFE, 0x01, 0xFF, 0x80, + 0x7F, 0xE0, 0x1F, 0xF8, 0x07, 0xFE, 0x01, 0xFF, 0x80, 0x7F, 0xE0, 0x1F, + 0xF8, 0x07, 0xFE, 0x01, 0xFF, 0x80, 0x7F, 0xE0, 0x1F, 0xF8, 0x07, 0xFE, + 0x01, 0xFF, 0x80, 0x7F, 0xF0, 0x3F, 0x7E, 0x1F, 0x9F, 0xFF, 0xE3, 0xFF, + 0xF0, 0x7F, 0xF8, 0x07, 0xF8, 0x00, 0xF8, 0x00, 0xFF, 0xE0, 0x0F, 0x9F, + 0x00, 0x7C, 0xFC, 0x03, 0xE3, 0xE0, 0x3E, 0x1F, 0x01, 0xF0, 0xFC, 0x1F, + 0x83, 0xE0, 0xF8, 0x1F, 0x07, 0xC0, 0xFC, 0x7E, 0x07, 0xE3, 0xE0, 0x1F, + 0x1F, 0x00, 0xFD, 0xF8, 0x07, 0xEF, 0x80, 0x1F, 0x7C, 0x00, 0xFF, 0xE0, + 0x03, 0xFE, 0x00, 0x1F, 0xF0, 0x00, 0xFF, 0x80, 0x03, 0xF8, 0x00, 0x1F, + 0xC0, 0x00, 0xF8, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x0F, 0xDF, 0x03, 0xE0, + 0x7C, 0xF8, 0x1F, 0x03, 0xE7, 0xC1, 0xFC, 0x1F, 0x3E, 0x0F, 0xE0, 0xF8, + 0xF0, 0x7F, 0x0F, 0x87, 0xC3, 0xF8, 0x7C, 0x3E, 0x3D, 0xE3, 0xE1, 0xF1, + 0xEF, 0x1F, 0x07, 0x8F, 0x78, 0xF0, 0x3E, 0xFB, 0xEF, 0x81, 0xF7, 0x8F, + 0x7C, 0x0F, 0xBC, 0x7B, 0xE0, 0x3D, 0xE3, 0xFE, 0x01, 0xFF, 0x1F, 0xF0, + 0x0F, 0xF0, 0x7F, 0x80, 0x3F, 0x83, 0xF8, 0x01, 0xFC, 0x1F, 0xC0, 0x0F, + 0xC0, 0x7E, 0x00, 0x3E, 0x03, 0xE0, 0x00, 0xFC, 0x01, 0xFB, 0xF0, 0x1F, + 0x8F, 0xC1, 0xF8, 0x3E, 0x0F, 0x81, 0xF8, 0xFC, 0x07, 0xEF, 0xC0, 0x1F, + 0xFC, 0x00, 0xFF, 0xE0, 0x03, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0x3E, 0x00, + 0x03, 0xF8, 0x00, 0x3F, 0xE0, 0x03, 0xFF, 0x80, 0x1F, 0xFC, 0x01, 0xFB, + 0xF0, 0x1F, 0x8F, 0xC1, 0xF8, 0x3E, 0x0F, 0xC1, 0xF8, 0xFC, 0x07, 0xEF, + 0xC0, 0x1F, 0x80, 0xFC, 0x01, 0xFB, 0xE0, 0x1F, 0x9F, 0x80, 0xFC, 0x7E, + 0x0F, 0xC1, 0xF0, 0x7C, 0x0F, 0xC7, 0xE0, 0x3F, 0x7E, 0x01, 0xFB, 0xF0, + 0x07, 0xFF, 0x00, 0x1F, 0xF0, 0x00, 0xFF, 0x80, 0x03, 0xF8, 0x00, 0x0F, + 0x80, 0x00, 0x7C, 0x00, 0x03, 0xE0, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, + 0x07, 0xC0, 0x00, 0x3E, 0x00, 0x01, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0x7F, + 0xFF, 0xBF, 0xFF, 0xDF, 0xFF, 0xEF, 0xFF, 0xF0, 0x03, 0xF0, 0x03, 0xF0, + 0x03, 0xF0, 0x03, 0xF8, 0x01, 0xF8, 0x01, 0xF8, 0x01, 0xF8, 0x01, 0xFC, + 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFE, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x7F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xF8, 0x3E, 0x0F, 0x83, 0xE0, 0xF8, 0x3E, 0x0F, 0x83, 0xE0, 0xF8, + 0x3E, 0x0F, 0x83, 0xE0, 0xF8, 0x3E, 0x0F, 0x83, 0xE0, 0xF8, 0x3E, 0x0F, + 0x83, 0xE0, 0xF8, 0x3E, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF8, 0x01, + 0xF8, 0x01, 0xF0, 0x03, 0xE0, 0x07, 0xE0, 0x07, 0xC0, 0x0F, 0x80, 0x1F, + 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7E, 0x00, 0x7C, 0x00, 0xF8, 0x01, 0xF8, + 0x01, 0xF0, 0x03, 0xE0, 0x07, 0xE0, 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x80, + 0x1F, 0x00, 0x3E, 0x00, 0x7E, 0x00, 0x7C, 0x00, 0xF8, 0x01, 0xF8, 0x01, + 0xF0, 0x03, 0xE0, 0x07, 0xE0, 0x07, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x07, 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, + 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, + 0x1F, 0x07, 0xC1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x01, 0xC0, 0x01, + 0xF0, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0xFF, 0x80, 0x7B, 0xC0, 0x7D, 0xF0, + 0x7C, 0x7C, 0x3C, 0x1E, 0x3E, 0x0F, 0xBE, 0x03, 0xEF, 0x01, 0xE1, 0x00, + 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x20, 0xE3, 0xE3, + 0xE3, 0xE3, 0x82, 0x00, 0x1F, 0xE0, 0xFF, 0xC3, 0xFF, 0x8F, 0xFF, 0x00, + 0xFC, 0x01, 0xF1, 0xFF, 0xDF, 0xFF, 0x7F, 0xFF, 0xF1, 0xFF, 0x87, 0xFE, + 0x1F, 0xFF, 0xFD, 0xFF, 0xF7, 0xFF, 0xC7, 0xFE, 0x38, 0x00, 0xF8, 0x00, + 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, + 0xFB, 0xE0, 0xFF, 0xF8, 0xFF, 0xFC, 0xFF, 0xFE, 0xF8, 0x3E, 0xF8, 0x3F, + 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x3F, 0xF8, 0x7E, + 0xFF, 0xFE, 0xFF, 0xFC, 0xFF, 0xF8, 0x3F, 0xE0, 0x03, 0xF8, 0x3F, 0xF3, + 0xFF, 0xDF, 0xFE, 0x7E, 0x03, 0xF0, 0x0F, 0x80, 0x3E, 0x00, 0xF8, 0x03, + 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x7F, 0xFC, 0xFF, 0xF1, 0xFF, 0xC1, 0xFE, + 0x00, 0x07, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, + 0x00, 0x1F, 0x00, 0x1F, 0x07, 0xFF, 0x1F, 0xFF, 0x3F, 0xFF, 0x7F, 0xFF, + 0x7C, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, + 0xFC, 0x1F, 0x7E, 0x1F, 0x7F, 0xFF, 0x3F, 0xFF, 0x1F, 0xFF, 0x07, 0xFC, + 0x07, 0xE0, 0x1F, 0xF8, 0x3F, 0xFC, 0x7F, 0xFE, 0x7C, 0x3F, 0xF8, 0x1F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0xFC, 0x00, 0x7E, 0x04, + 0x7F, 0xFE, 0x3F, 0xFE, 0x1F, 0xFE, 0x07, 0xF8, 0x0F, 0xE3, 0xFF, 0x7F, + 0xE7, 0xFE, 0xFC, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xFF, 0xEF, 0xFE, 0xFF, + 0xEF, 0xFE, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, + 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0x07, 0xF8, 0x3F, 0xFC, + 0xFF, 0xFB, 0xFF, 0xF7, 0xC3, 0xFF, 0x87, 0xFE, 0x0F, 0xFC, 0x1F, 0xF8, + 0x3F, 0xF0, 0x7F, 0xF0, 0xFB, 0xFF, 0xF7, 0xFF, 0xE7, 0xFF, 0xC3, 0xFF, + 0x80, 0x1F, 0x00, 0x3E, 0x40, 0xFD, 0xFF, 0xF3, 0xFF, 0xE7, 0xFF, 0x07, + 0xF8, 0x00, 0x38, 0x03, 0xE0, 0x0F, 0x80, 0x3E, 0x00, 0xF8, 0x03, 0xE0, + 0x0F, 0x80, 0x3E, 0x00, 0xFF, 0xE3, 0xFF, 0xCF, 0xFF, 0xBF, 0xFE, 0xF8, + 0xFF, 0xE1, 0xFF, 0x87, 0xFE, 0x1F, 0xF8, 0x7F, 0xE1, 0xFF, 0x87, 0xFE, + 0x1F, 0xF8, 0x7F, 0xE1, 0xFF, 0x87, 0xFE, 0x1F, 0x77, 0xFF, 0xF7, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, + 0x07, 0xC3, 0xE1, 0xF0, 0x70, 0x00, 0x00, 0x00, 0x0F, 0x87, 0xC3, 0xE1, + 0xF0, 0xF8, 0x7C, 0x3E, 0x1F, 0x0F, 0x87, 0xC3, 0xE1, 0xF0, 0xF8, 0x7C, + 0x3E, 0x1F, 0x0F, 0x8F, 0xFF, 0xFF, 0xEF, 0xE7, 0xE0, 0x38, 0x01, 0xF0, + 0x03, 0xE0, 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x00, + 0xF8, 0x7F, 0xF1, 0xFB, 0xE7, 0xE7, 0xDF, 0x8F, 0xFF, 0x1F, 0xFC, 0x3F, + 0xF0, 0x7F, 0xC0, 0xFF, 0xC1, 0xFF, 0xC3, 0xFF, 0xC7, 0xDF, 0x8F, 0x9F, + 0x9F, 0x1F, 0xBE, 0x3F, 0x7C, 0x3F, 0x38, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, + 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, + 0xF8, 0xFC, 0xFF, 0x7F, 0x7F, 0x1E, 0x3F, 0xC3, 0xF1, 0xFF, 0xFF, 0xF3, + 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0x8F, 0xC7, 0xFF, 0x0F, 0x87, 0xFE, + 0x1F, 0x0F, 0xFC, 0x3E, 0x1F, 0xF8, 0x7C, 0x3F, 0xF0, 0xF8, 0x7F, 0xE1, + 0xF0, 0xFF, 0xC3, 0xE1, 0xFF, 0x87, 0xC3, 0xFF, 0x0F, 0x87, 0xFE, 0x1F, + 0x0F, 0xFC, 0x3E, 0x1F, 0x3F, 0xC3, 0xFF, 0xCF, 0xFF, 0xBF, 0xFE, 0xF8, + 0xFF, 0xE1, 0xFF, 0x87, 0xFE, 0x1F, 0xF8, 0x7F, 0xE1, 0xFF, 0x87, 0xFE, + 0x1F, 0xF8, 0x7F, 0xE1, 0xFF, 0x87, 0xFE, 0x1F, 0x07, 0xF0, 0x0F, 0xFE, + 0x0F, 0xFF, 0x8F, 0xFF, 0xE7, 0xE3, 0xF7, 0xE0, 0xFF, 0xE0, 0x3F, 0xF0, + 0x1F, 0xF8, 0x0F, 0xFC, 0x07, 0xFF, 0x07, 0xEF, 0xC7, 0xE7, 0xFF, 0xF1, + 0xFF, 0xF0, 0x7F, 0xF0, 0x0F, 0xE0, 0x3F, 0xE0, 0xFF, 0xF8, 0xFF, 0xFC, + 0xFF, 0xFE, 0xF8, 0x7E, 0xF8, 0x3F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, + 0xF8, 0x1F, 0xF8, 0x3F, 0xF8, 0x3E, 0xFF, 0xFE, 0xFF, 0xFC, 0xFF, 0xF8, + 0xFB, 0xF0, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, + 0xF8, 0x00, 0x03, 0xFE, 0x0F, 0xFF, 0xCF, 0xFF, 0xEF, 0xFF, 0xF7, 0xE0, + 0xFF, 0xE0, 0x7F, 0xE0, 0x3F, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x07, 0xFF, + 0x03, 0xEF, 0xC1, 0xF7, 0xFF, 0xF9, 0xFF, 0xFC, 0x7F, 0xFE, 0x0F, 0xDF, + 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00, + 0x7C, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x81, 0xF0, 0x3E, 0x07, 0xC0, + 0xF8, 0x1F, 0x03, 0xE0, 0x7C, 0x0F, 0x81, 0xF0, 0x3E, 0x07, 0xC0, 0x0F, + 0xE1, 0xFF, 0x9F, 0xFD, 0xFF, 0xEF, 0x81, 0x7C, 0x03, 0xFF, 0xDF, 0xFE, + 0x7F, 0xF9, 0xFF, 0xC0, 0x3F, 0x81, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0x8F, + 0xF0, 0x38, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0xFE, 0xFF, 0xEF, + 0xFE, 0xFF, 0xEF, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, + 0x80, 0xFC, 0x0F, 0xFE, 0x7F, 0xE3, 0xFF, 0x0F, 0xE0, 0xF8, 0x7F, 0xE1, + 0xFF, 0x87, 0xFE, 0x1F, 0xF8, 0x7F, 0xE1, 0xFF, 0x87, 0xFE, 0x1F, 0xF8, + 0x7F, 0xE1, 0xFF, 0x87, 0xFF, 0x1F, 0x7F, 0xFD, 0xFF, 0xF3, 0xFF, 0xC3, + 0xFC, 0xF8, 0x0F, 0xFE, 0x0F, 0xDF, 0x07, 0xCF, 0x83, 0xE7, 0xE3, 0xF1, + 0xF1, 0xF0, 0xF8, 0xF8, 0x7E, 0xFC, 0x1F, 0x7C, 0x0F, 0xBE, 0x03, 0xFE, + 0x01, 0xFF, 0x00, 0xFF, 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x07, 0xC0, 0xF8, + 0x38, 0x1F, 0xF8, 0x3C, 0x1F, 0x7C, 0x7C, 0x3E, 0x7C, 0x7C, 0x3E, 0x7C, + 0x7E, 0x3E, 0x3C, 0x7E, 0x3C, 0x3C, 0xFE, 0x3C, 0x3E, 0xEF, 0x7C, 0x1E, + 0xEF, 0x78, 0x1E, 0xEF, 0x78, 0x1F, 0xE7, 0xF8, 0x0F, 0xC7, 0xF0, 0x0F, + 0xC3, 0xF0, 0x0F, 0xC3, 0xF0, 0x07, 0x83, 0xE0, 0x07, 0x81, 0xE0, 0xFC, + 0x1F, 0xBF, 0x1F, 0x8F, 0xDF, 0x87, 0xEF, 0xC1, 0xFF, 0xC0, 0x7F, 0xC0, + 0x3F, 0xE0, 0x0F, 0xE0, 0x07, 0xF0, 0x07, 0xFC, 0x03, 0xFE, 0x03, 0xFF, + 0x83, 0xF7, 0xE1, 0xFB, 0xF1, 0xF8, 0xFD, 0xF8, 0x3F, 0xF8, 0x0F, 0xFE, + 0x0F, 0xDF, 0x07, 0xCF, 0x83, 0xE7, 0xE3, 0xF1, 0xF1, 0xF0, 0xF8, 0xF8, + 0x7C, 0x78, 0x1F, 0x7C, 0x0F, 0xBE, 0x03, 0xDE, 0x01, 0xFF, 0x00, 0x7F, + 0x00, 0x3F, 0x80, 0x0F, 0xC0, 0x07, 0xC0, 0x03, 0xE0, 0x03, 0xE0, 0x1F, + 0xF0, 0x1F, 0xF0, 0x0F, 0xF0, 0x03, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x03, 0xF8, 0x0F, 0xC0, 0x7E, 0x03, 0xF8, 0x1F, 0xC0, + 0xFE, 0x03, 0xF0, 0x1F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x03, 0xE1, 0xFC, 0x3F, 0x8F, 0xF1, 0xF8, 0x3E, 0x07, 0xC0, 0xF8, 0x1F, + 0x03, 0xE0, 0x7C, 0x0F, 0x83, 0xF1, 0xFC, 0x3F, 0x87, 0xF0, 0xFE, 0x07, + 0xE0, 0x7C, 0x0F, 0x81, 0xF0, 0x3E, 0x07, 0xC0, 0xF8, 0x1F, 0x03, 0xF0, + 0x7F, 0x87, 0xF0, 0xFE, 0x07, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x1F, 0x83, + 0xF8, 0x7F, 0x83, 0xF0, 0x3E, 0x07, 0xC0, 0xF8, 0x1F, 0x03, 0xE0, 0x7C, + 0x0F, 0x81, 0xF8, 0x1F, 0xC3, 0xF8, 0x7F, 0x0F, 0xE3, 0xF0, 0x7C, 0x0F, + 0x81, 0xF0, 0x3E, 0x07, 0xC0, 0xF8, 0x1F, 0x07, 0xE3, 0xFC, 0x7F, 0x0F, + 0xE1, 0xF0, 0x00, 0x1E, 0x06, 0x3F, 0x8F, 0x7F, 0xFF, 0xFF, 0xFE, 0xF1, + 0xFC, 0x60, 0x78, 0xFF, 0xFF, 0xFF, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, + 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, + 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3F, 0xFF, + 0xFF, 0xF0, 0x00, 0x77, 0xFF, 0xFF, 0xB8, 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x01, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x78, + 0x03, 0xF8, 0x3F, 0xF3, 0xFF, 0xDF, 0xFE, 0x7E, 0x03, 0xF0, 0x0F, 0x80, + 0x3E, 0x00, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x1F, 0xFF, 0x3F, 0xFC, 0x7F, + 0xF0, 0x3F, 0x80, 0x78, 0x01, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x01, 0xFC, + 0x0F, 0xFC, 0x3F, 0xF8, 0x7F, 0xE1, 0xF8, 0x43, 0xE0, 0x07, 0xC0, 0x0F, + 0x80, 0x1F, 0x01, 0xFF, 0xE3, 0xFF, 0xC7, 0xFF, 0x8F, 0xFF, 0x03, 0xE0, + 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x3F, 0xFC, 0xFF, 0xF9, 0xFF, 0xF3, + 0xFF, 0xE0, 0x10, 0x04, 0x3C, 0x03, 0xBE, 0xFB, 0xEF, 0xFF, 0xE3, 0xFF, + 0xE1, 0xF1, 0xF0, 0xF0, 0x78, 0x78, 0x3C, 0x3C, 0x1E, 0x1E, 0x0F, 0x0F, + 0x8F, 0x87, 0xFF, 0xC7, 0xFF, 0xF7, 0xDF, 0x7D, 0xC0, 0x3C, 0x20, 0x08, + 0xFC, 0x07, 0xEF, 0x80, 0xF9, 0xF8, 0x3F, 0x1F, 0x07, 0xC3, 0xF1, 0xF8, + 0x3E, 0x7E, 0x07, 0xEF, 0x80, 0x7F, 0xF0, 0x07, 0xFC, 0x00, 0xFF, 0x80, + 0xFF, 0xFE, 0x1F, 0xFF, 0xC3, 0xFF, 0xF8, 0x03, 0xE0, 0x00, 0x7C, 0x01, + 0xFF, 0xFC, 0x3F, 0xFF, 0x87, 0xFF, 0xF0, 0x07, 0xC0, 0x00, 0xF8, 0x00, + 0x1F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xF0, 0x7F, 0xF3, 0xFF, 0xDF, 0xFE, + 0x7C, 0x09, 0xF0, 0x07, 0xE0, 0x0F, 0xE0, 0x3F, 0xE0, 0xFF, 0xE7, 0xFF, + 0xBE, 0x7F, 0xF8, 0xFF, 0xE1, 0xFF, 0xC7, 0xFF, 0x9E, 0x7F, 0xF0, 0xFF, + 0xC1, 0xFF, 0x01, 0xFE, 0x01, 0xF8, 0x03, 0xE6, 0x0F, 0x9F, 0xFE, 0xFF, + 0xF3, 0xFF, 0xC3, 0xFC, 0x00, 0x70, 0xEF, 0x9F, 0xF9, 0xFF, 0x9F, 0x70, + 0xE0, 0x01, 0xFC, 0x00, 0x3F, 0xF8, 0x03, 0xFF, 0xE0, 0x3E, 0x0F, 0x83, + 0xC0, 0x1E, 0x3C, 0x7E, 0x79, 0xC7, 0xF9, 0xDE, 0x7F, 0x8F, 0xE7, 0xC0, + 0x3F, 0x3C, 0x01, 0xF9, 0xE0, 0x0F, 0xCF, 0x00, 0x7E, 0x78, 0x03, 0xF3, + 0xE0, 0x1F, 0xCF, 0xF1, 0xEE, 0x3F, 0xCE, 0x78, 0xFC, 0xF1, 0xE0, 0x0F, + 0x07, 0xC1, 0xF0, 0x1F, 0xFF, 0x00, 0x7F, 0xF0, 0x00, 0xFE, 0x00, 0x7F, + 0x1F, 0xE7, 0xFC, 0x0F, 0x01, 0xCF, 0xF7, 0xFF, 0xC7, 0xE1, 0xF8, 0x7F, + 0xFD, 0xFF, 0x3F, 0x80, 0x00, 0x00, 0x0E, 0x0E, 0x1F, 0x1F, 0x1E, 0x1E, + 0x3E, 0x3E, 0x7C, 0x7C, 0x7C, 0x7C, 0xF8, 0xF8, 0x7C, 0x7C, 0x7C, 0x7C, + 0x3E, 0x3E, 0x1E, 0x1E, 0x1F, 0x1F, 0x0E, 0x0E, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x01, 0xE0, 0x03, 0xC0, 0x07, 0x80, + 0x0F, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, + 0x01, 0xFC, 0x00, 0x3F, 0xF8, 0x03, 0xFF, 0xE0, 0x3E, 0x0F, 0x83, 0xC0, + 0x1E, 0x3C, 0x00, 0x79, 0xC7, 0xE1, 0xDE, 0x3F, 0xCF, 0xE1, 0xCE, 0x3F, + 0x0E, 0x71, 0xF8, 0x73, 0x8F, 0xC3, 0xF8, 0x7E, 0x1F, 0xC3, 0xF0, 0xEE, + 0x1F, 0xC7, 0x39, 0xEE, 0x39, 0xCE, 0x78, 0x00, 0xF1, 0xE0, 0x0F, 0x07, + 0xC1, 0xF0, 0x1F, 0xFF, 0x00, 0x7F, 0xF0, 0x00, 0xFE, 0x00, 0xFF, 0xFF, + 0xFF, 0xFC, 0x3E, 0x3F, 0xBF, 0xFC, 0x7E, 0x3F, 0x1F, 0xFE, 0xFE, 0x3E, + 0x00, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x01, 0xE0, 0x07, 0x83, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x1E, 0x00, 0x78, 0x01, 0xE0, 0x07, 0x80, + 0x1E, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x3F, + 0x3F, 0xEF, 0xFD, 0x87, 0x01, 0xC0, 0xF0, 0x78, 0x38, 0x1C, 0x0E, 0x07, + 0xFD, 0xFF, 0x7F, 0xC0, 0x3C, 0x7F, 0x1F, 0xC8, 0xE0, 0x70, 0xF8, 0x7C, + 0x3F, 0x03, 0x81, 0xFF, 0xFF, 0xE7, 0xE0, 0x08, 0x38, 0xFB, 0xEF, 0x8E, + 0x08, 0x00, 0xF8, 0x7F, 0xE1, 0xFF, 0x87, 0xFE, 0x1F, 0xF8, 0x7F, 0xE1, + 0xFF, 0x87, 0xFE, 0x1F, 0xF8, 0x7F, 0xE1, 0xFF, 0x87, 0xFF, 0x1F, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xF8, 0x03, 0xE0, 0x0F, 0x80, 0x3E, + 0x00, 0xF8, 0x03, 0xE0, 0x00, 0x00, 0xFE, 0x01, 0xFF, 0xFC, 0xFF, 0xFF, + 0xBF, 0xFF, 0xF7, 0xFE, 0x3F, 0xFF, 0xC7, 0xFF, 0xF8, 0xFF, 0xFF, 0x1F, + 0xFF, 0xE3, 0xFF, 0xFC, 0x7D, 0xFF, 0x8F, 0xBF, 0xF1, 0xF1, 0xFE, 0x3E, + 0x0F, 0xC7, 0xC0, 0x78, 0xF8, 0x0F, 0x1F, 0x01, 0xE3, 0xE0, 0x3C, 0x7C, + 0x07, 0x8F, 0x80, 0xF1, 0xF0, 0x1E, 0x3E, 0x03, 0xC7, 0xC0, 0x78, 0xF8, + 0x0F, 0x1F, 0x01, 0xE3, 0xE0, 0x3C, 0x7C, 0x07, 0x8F, 0x80, 0xF1, 0xF0, + 0x7B, 0xFF, 0xFF, 0xFD, 0xE0, 0x1E, 0x38, 0xF0, 0xF0, 0xEF, 0xDF, 0xBC, + 0x0E, 0x3D, 0xFF, 0xF7, 0xE9, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE0, + 0x1F, 0x83, 0xFC, 0x7F, 0xE7, 0x0E, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, + 0xE0, 0x77, 0x0E, 0x7F, 0xE3, 0xFC, 0x1F, 0x80, 0x00, 0x00, 0x78, 0x78, + 0xF8, 0xF8, 0x7C, 0x7C, 0x7C, 0x7C, 0x3E, 0x3E, 0x3E, 0x3E, 0x1F, 0x1F, + 0x3E, 0x3E, 0x3E, 0x3E, 0x7C, 0x7C, 0x7C, 0x7C, 0xF8, 0xF8, 0x78, 0x78, + 0x00, 0x00, 0x0E, 0x00, 0x00, 0x07, 0x80, 0x3E, 0x07, 0xE0, 0x0F, 0x03, + 0xF8, 0x07, 0xC0, 0x7E, 0x01, 0xE0, 0x13, 0x80, 0xF0, 0x00, 0xE0, 0x3C, + 0x00, 0x38, 0x1E, 0x00, 0x0E, 0x07, 0x80, 0x03, 0x83, 0xC1, 0xE0, 0xE0, + 0xF0, 0xF8, 0x38, 0x78, 0x3E, 0x0E, 0x1E, 0x1F, 0x80, 0x0F, 0x0E, 0xE0, + 0x03, 0xC3, 0x38, 0x01, 0xE1, 0xFF, 0x00, 0x78, 0x7F, 0xC0, 0x3C, 0x1F, + 0xF0, 0x0F, 0x00, 0x38, 0x07, 0x80, 0x0E, 0x03, 0xE0, 0x03, 0x80, 0xF0, + 0x00, 0x00, 0x0E, 0x00, 0x00, 0x07, 0x80, 0x7C, 0x07, 0xE0, 0x1E, 0x03, + 0xF8, 0x0F, 0x80, 0x7E, 0x03, 0xC0, 0x13, 0x81, 0xE0, 0x00, 0xE0, 0x78, + 0x00, 0x38, 0x3C, 0x00, 0x0E, 0x0F, 0x00, 0x03, 0x87, 0x8F, 0xC0, 0xE1, + 0xEF, 0xF8, 0x38, 0xF3, 0xFF, 0x0E, 0x3C, 0x61, 0xC0, 0x1E, 0x00, 0x70, + 0x07, 0x80, 0x3C, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x0E, 0x00, 0x78, 0x07, + 0x00, 0x1E, 0x03, 0x80, 0x0F, 0x01, 0xFF, 0x07, 0xC0, 0x7F, 0xC1, 0xE0, + 0x1F, 0xF0, 0x3C, 0x00, 0x00, 0x7F, 0x00, 0x7C, 0x1F, 0xC0, 0x3C, 0x08, + 0xE0, 0x3E, 0x00, 0x70, 0x1E, 0x00, 0xF8, 0x1E, 0x00, 0x7C, 0x0F, 0x00, + 0x3F, 0x0F, 0x00, 0x03, 0x87, 0x80, 0x01, 0xC7, 0x87, 0xBF, 0xE3, 0xC7, + 0xDF, 0xE3, 0xC3, 0xE7, 0xE1, 0xE3, 0xF0, 0x01, 0xE3, 0xB8, 0x00, 0xF1, + 0x9C, 0x00, 0xF1, 0xFF, 0x00, 0x78, 0xFF, 0x80, 0x78, 0x7F, 0xC0, 0x3C, + 0x01, 0xC0, 0x3C, 0x00, 0xE0, 0x3E, 0x00, 0x70, 0x1E, 0x00, 0x00, 0x07, + 0x80, 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0x78, 0x00, 0x00, 0x00, 0x07, + 0x80, 0x78, 0x0F, 0x81, 0xF0, 0x3F, 0x07, 0xE0, 0x7C, 0x0F, 0x80, 0xF8, + 0x0F, 0x86, 0xFF, 0xE7, 0xFF, 0x7F, 0xF1, 0xFC, 0x00, 0x40, 0x00, 0x07, + 0x00, 0x00, 0x7C, 0x00, 0x01, 0xF0, 0x00, 0x07, 0xC0, 0x00, 0x1C, 0x00, + 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x7F, + 0x80, 0x03, 0xFC, 0x00, 0x3F, 0xE0, 0x01, 0xFF, 0x80, 0x1F, 0x7C, 0x00, + 0xFB, 0xF0, 0x07, 0xDF, 0x80, 0x7C, 0x7C, 0x03, 0xE3, 0xF0, 0x1F, 0x1F, + 0x81, 0xF0, 0x7C, 0x0F, 0xFF, 0xE0, 0xFF, 0xFF, 0x87, 0xFF, 0xFC, 0x3F, + 0xFF, 0xE3, 0xF0, 0x1F, 0x9F, 0x00, 0x7C, 0xF8, 0x03, 0xEF, 0xC0, 0x1F, + 0xFC, 0x00, 0x7C, 0x00, 0x10, 0x00, 0x01, 0xC0, 0x00, 0x1F, 0x00, 0x01, + 0xF0, 0x00, 0x1F, 0x00, 0x00, 0x70, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x7F, 0x80, 0x03, 0xFC, 0x00, 0x3F, + 0xE0, 0x01, 0xFF, 0x80, 0x1F, 0x7C, 0x00, 0xFB, 0xF0, 0x07, 0xDF, 0x80, + 0x7C, 0x7C, 0x03, 0xE3, 0xF0, 0x1F, 0x1F, 0x81, 0xF0, 0x7C, 0x0F, 0xFF, + 0xE0, 0xFF, 0xFF, 0x87, 0xFF, 0xFC, 0x3F, 0xFF, 0xE3, 0xF0, 0x1F, 0x9F, + 0x00, 0x7C, 0xF8, 0x03, 0xEF, 0xC0, 0x1F, 0xFC, 0x00, 0x7C, 0x00, 0x20, + 0x00, 0x03, 0x80, 0x00, 0x3E, 0x00, 0x03, 0xF8, 0x00, 0x3D, 0xE0, 0x00, + 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x0F, 0xF0, + 0x00, 0x7F, 0x80, 0x07, 0xFC, 0x00, 0x3F, 0xF0, 0x03, 0xEF, 0x80, 0x1F, + 0x7E, 0x00, 0xFB, 0xF0, 0x0F, 0x8F, 0x80, 0x7C, 0x7E, 0x03, 0xE3, 0xF0, + 0x3E, 0x0F, 0x81, 0xFF, 0xFC, 0x1F, 0xFF, 0xF0, 0xFF, 0xFF, 0x87, 0xFF, + 0xFC, 0x7E, 0x03, 0xF3, 0xE0, 0x0F, 0x9F, 0x00, 0x7D, 0xF8, 0x03, 0xFF, + 0x80, 0x0F, 0x80, 0x01, 0xC6, 0x00, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x06, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, + 0x01, 0xFE, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x80, 0x07, 0xFE, 0x00, 0x7D, + 0xF0, 0x03, 0xEF, 0xC0, 0x1F, 0x7E, 0x01, 0xF1, 0xF0, 0x0F, 0x8F, 0xC0, + 0x7C, 0x7E, 0x07, 0xC1, 0xF0, 0x3F, 0xFF, 0x83, 0xFF, 0xFE, 0x1F, 0xFF, + 0xF0, 0xFF, 0xFF, 0x8F, 0xC0, 0x7E, 0x7C, 0x01, 0xF3, 0xE0, 0x0F, 0xBF, + 0x00, 0x7F, 0xF0, 0x01, 0xF0, 0x07, 0x0E, 0x00, 0x7C, 0xF8, 0x03, 0xE7, + 0xC0, 0x1F, 0x3E, 0x00, 0x70, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFC, 0x00, 0x0F, 0xF0, 0x00, 0x7F, 0x80, 0x07, 0xFC, + 0x00, 0x3F, 0xF0, 0x03, 0xEF, 0x80, 0x1F, 0x7E, 0x00, 0xFB, 0xF0, 0x0F, + 0x8F, 0x80, 0x7C, 0x7E, 0x03, 0xE3, 0xF0, 0x3E, 0x0F, 0x81, 0xFF, 0xFC, + 0x1F, 0xFF, 0xF0, 0xFF, 0xFF, 0x87, 0xFF, 0xFC, 0x7E, 0x03, 0xF3, 0xE0, + 0x0F, 0x9F, 0x00, 0x7D, 0xF8, 0x03, 0xFF, 0x80, 0x0F, 0x80, 0x00, 0x70, + 0x00, 0x07, 0xC0, 0x00, 0x63, 0x00, 0x03, 0x18, 0x00, 0x18, 0xC0, 0x00, + 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x3F, 0xC0, 0x01, 0xFE, 0x00, 0x1F, 0xF8, + 0x00, 0xFF, 0xC0, 0x0F, 0xBE, 0x00, 0x7D, 0xF8, 0x03, 0xEF, 0xC0, 0x3E, + 0x3E, 0x01, 0xF1, 0xF8, 0x1F, 0x8F, 0xC0, 0xF8, 0x3E, 0x07, 0xFF, 0xF8, + 0x7F, 0xFF, 0xC3, 0xFF, 0xFE, 0x1F, 0xFF, 0xF1, 0xF8, 0x0F, 0xCF, 0x80, + 0x3E, 0x7C, 0x01, 0xF7, 0xE0, 0x0F, 0xFE, 0x00, 0x3E, 0x00, 0x0F, 0xFF, + 0xF8, 0x00, 0x7F, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFE, + 0x00, 0x3F, 0xF0, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x0F, 0xDF, 0x00, 0x00, + 0x3F, 0x7C, 0x00, 0x01, 0xF9, 0xFF, 0xF0, 0x07, 0xC7, 0xFF, 0xC0, 0x3F, + 0x1F, 0xFF, 0x01, 0xF8, 0x7F, 0xFC, 0x07, 0xFF, 0xF0, 0x00, 0x3F, 0xFF, + 0xC0, 0x00, 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0xFC, 0x00, 0x1F, 0x01, 0xF0, + 0x00, 0xFC, 0x07, 0xFF, 0xF7, 0xE0, 0x1F, 0xFF, 0xDF, 0x80, 0x7F, 0xFF, + 0xFC, 0x01, 0xFF, 0xFC, 0x01, 0xFC, 0x03, 0xFF, 0xC7, 0xFF, 0xE7, 0xFF, + 0xE3, 0xF0, 0x33, 0xF0, 0x01, 0xF0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x7C, + 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xF0, 0x00, + 0xFC, 0x00, 0x7F, 0x03, 0x1F, 0xFF, 0x87, 0xFF, 0xE1, 0xFF, 0xF0, 0x1F, + 0xC0, 0x0F, 0x00, 0x07, 0x80, 0x00, 0xE0, 0x00, 0x70, 0x01, 0xF8, 0x00, + 0xF8, 0x00, 0xF8, 0x00, 0x02, 0x00, 0x07, 0x00, 0x0F, 0x80, 0x07, 0xC0, + 0x03, 0xE0, 0x01, 0xC0, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFE, + 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, + 0xF8, 0x00, 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC, 0xF8, 0x00, + 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x80, 0x01, 0xC0, 0x03, 0xE0, 0x07, 0xC0, + 0x0F, 0x80, 0x07, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFE, + 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, + 0xF8, 0x00, 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC, 0xF8, 0x00, + 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x03, 0x80, 0x07, 0xC0, 0x0F, 0xE0, + 0x1E, 0xF0, 0x08, 0x20, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFE, 0xFF, 0xFE, + 0xFF, 0xFE, 0xFF, 0xFE, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, + 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC, 0xF8, 0x00, 0xF8, 0x00, + 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x1C, 0x38, 0x3E, 0x7C, 0x3E, 0x7C, 0x3E, 0x7C, 0x1C, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, + 0xFF, 0xFE, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xFF, 0xFC, + 0xFF, 0xFC, 0xFF, 0xFC, 0xFF, 0xFC, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, + 0xF8, 0x00, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x20, 0xE3, 0xE3, 0xE3, 0xE3, 0x82, 0x00, 0x00, 0xF9, 0xF3, 0xE7, 0xCF, + 0x9F, 0x3E, 0x7C, 0xF9, 0xF3, 0xE7, 0xCF, 0x9F, 0x3E, 0x7C, 0xF9, 0xF3, + 0xE7, 0xCF, 0x80, 0x08, 0x38, 0xFB, 0xEF, 0x8E, 0x08, 0x00, 0x00, 0xF9, + 0xF3, 0xE7, 0xCF, 0x9F, 0x3E, 0x7C, 0xF9, 0xF3, 0xE7, 0xCF, 0x9F, 0x3E, + 0x7C, 0xF9, 0xF3, 0xE7, 0xCF, 0x80, 0x08, 0x0E, 0x0F, 0x8F, 0xEF, 0x7A, + 0x08, 0x00, 0x00, 0x3E, 0x1F, 0x0F, 0x87, 0xC3, 0xE1, 0xF0, 0xF8, 0x7C, + 0x3E, 0x1F, 0x0F, 0x87, 0xC3, 0xE1, 0xF0, 0xF8, 0x7C, 0x3E, 0x1F, 0x0F, + 0x87, 0xC3, 0xE0, 0x70, 0xEF, 0x9F, 0xF9, 0xFF, 0x9F, 0x70, 0xE0, 0x00, + 0x00, 0x00, 0x00, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, + 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, + 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x00, 0x1F, + 0xFC, 0x00, 0x7F, 0xFE, 0x01, 0xFF, 0xFE, 0x07, 0xFF, 0xFC, 0x1F, 0x07, + 0xF0, 0x7C, 0x07, 0xE1, 0xF0, 0x0F, 0x87, 0xC0, 0x1F, 0xFF, 0xF0, 0x7F, + 0xFF, 0xC1, 0xFF, 0xFF, 0x07, 0xFF, 0xFC, 0x1F, 0x1F, 0x00, 0x7C, 0x7C, + 0x03, 0xF1, 0xF0, 0x0F, 0x87, 0xC0, 0x7E, 0x1F, 0x07, 0xF0, 0x7F, 0xFF, + 0xC1, 0xFF, 0xFE, 0x07, 0xFF, 0xE0, 0x1F, 0xFC, 0x00, 0x03, 0x8C, 0x00, + 0xFF, 0xC0, 0x3F, 0xF0, 0x03, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x07, 0xC0, 0x1F, 0xFC, 0x03, 0xFF, 0xC0, 0x7F, 0xF8, 0x0F, 0xFF, + 0x81, 0xFF, 0xF8, 0x3F, 0xFF, 0x87, 0xFF, 0xF8, 0xFF, 0xDF, 0x1F, 0xF9, + 0xF3, 0xFF, 0x1F, 0x7F, 0xE3, 0xFF, 0xFC, 0x3F, 0xFF, 0x83, 0xFF, 0xF0, + 0x3F, 0xFE, 0x07, 0xFF, 0xC0, 0x7F, 0xF8, 0x07, 0xFF, 0x00, 0xFF, 0xE0, + 0x0F, 0xFC, 0x01, 0xF0, 0x00, 0x80, 0x00, 0x1C, 0x00, 0x03, 0xE0, 0x00, + 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x07, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1F, 0x80, 0x0F, 0xFF, 0x01, 0xFF, 0xF8, 0x3F, 0xFF, + 0xC3, 0xF0, 0xFC, 0x7E, 0x07, 0xE7, 0xC0, 0x3E, 0xF8, 0x01, 0xFF, 0x80, + 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, + 0x01, 0xF7, 0xC0, 0x3E, 0x7E, 0x07, 0xE7, 0xF0, 0xFE, 0x3F, 0xFF, 0xC1, + 0xFF, 0xF8, 0x0F, 0xFF, 0x00, 0x1F, 0xC0, 0x00, 0x10, 0x00, 0x03, 0x80, + 0x00, 0x7C, 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, 0x0E, 0x00, 0x00, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x0F, 0xFF, 0x01, 0xFF, + 0xF8, 0x3F, 0xFF, 0xC3, 0xF0, 0xFC, 0x7E, 0x07, 0xE7, 0xC0, 0x3E, 0xF8, + 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, + 0x80, 0x1F, 0xF8, 0x01, 0xF7, 0xC0, 0x3E, 0x7E, 0x07, 0xE7, 0xF0, 0xFE, + 0x3F, 0xFF, 0xC1, 0xFF, 0xF8, 0x0F, 0xFF, 0x00, 0x1F, 0xC0, 0x00, 0x40, + 0x00, 0x0E, 0x00, 0x01, 0xF0, 0x00, 0x3F, 0x80, 0x07, 0xBC, 0x00, 0x20, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0xFF, 0xF0, 0x1F, + 0xFF, 0x83, 0xFF, 0xFC, 0x3F, 0x0F, 0xC7, 0xE0, 0x7E, 0x7C, 0x03, 0xEF, + 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, + 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0x7C, 0x03, 0xE7, 0xE0, 0x7E, 0x7F, 0x0F, + 0xE3, 0xFF, 0xFC, 0x1F, 0xFF, 0x80, 0xFF, 0xF0, 0x01, 0xFC, 0x00, 0x01, + 0xC6, 0x00, 0x3F, 0xF0, 0x07, 0xFE, 0x00, 0x31, 0xC0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x0F, 0xFF, 0x01, 0xFF, 0xF8, + 0x3F, 0xFF, 0xC3, 0xF0, 0xFC, 0x7E, 0x07, 0xE7, 0xC0, 0x3E, 0xF8, 0x01, + 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, + 0x1F, 0xF8, 0x01, 0xF7, 0xC0, 0x3E, 0x7E, 0x07, 0xE7, 0xF0, 0xFE, 0x3F, + 0xFF, 0xC1, 0xFF, 0xF8, 0x0F, 0xFF, 0x00, 0x1F, 0xC0, 0x07, 0x0E, 0x00, + 0xF9, 0xF0, 0x0F, 0x9F, 0x00, 0xF9, 0xF0, 0x07, 0x0E, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0xFF, 0xF0, 0x1F, 0xFF, + 0x83, 0xFF, 0xFC, 0x3F, 0x0F, 0xC7, 0xE0, 0x7E, 0x7C, 0x03, 0xEF, 0x80, + 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x01, 0xFF, 0x80, 0x1F, 0xF8, + 0x01, 0xFF, 0x80, 0x1F, 0x7C, 0x03, 0xE7, 0xE0, 0x7E, 0x7F, 0x0F, 0xE3, + 0xFF, 0xFC, 0x1F, 0xFF, 0x80, 0xFF, 0xF0, 0x01, 0xFC, 0x00, 0x20, 0x11, + 0xC0, 0xEF, 0x87, 0xDF, 0x3E, 0x3F, 0xF0, 0x7F, 0x80, 0xFC, 0x03, 0xF0, + 0x1F, 0xE0, 0xFF, 0xC7, 0xCF, 0xBE, 0x1F, 0x70, 0x38, 0x80, 0x40, 0x00, + 0x00, 0x80, 0x1F, 0x8C, 0x0F, 0xFF, 0xE1, 0xFF, 0xFC, 0x3F, 0xFF, 0xC3, + 0xF0, 0xFC, 0x7E, 0x0F, 0xE7, 0xC1, 0xFE, 0xF8, 0x3D, 0xFF, 0x83, 0x9F, + 0xF8, 0x79, 0xFF, 0x8F, 0x1F, 0xF9, 0xE1, 0xFF, 0xBC, 0x1F, 0xFB, 0xC1, + 0xF7, 0xF8, 0x3E, 0x7F, 0x07, 0xE7, 0xF0, 0xFE, 0x3F, 0xFF, 0xC3, 0xFF, + 0xF8, 0x7F, 0xFF, 0x07, 0x1F, 0xC0, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, + 0xE0, 0x00, 0x7C, 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, 0x38, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x01, 0xFF, 0x80, 0x7F, 0xE0, 0x1F, + 0xF8, 0x07, 0xFE, 0x01, 0xFF, 0x80, 0x7F, 0xE0, 0x1F, 0xF8, 0x07, 0xFE, + 0x01, 0xFF, 0x80, 0x7F, 0xE0, 0x1F, 0xF8, 0x07, 0xFE, 0x01, 0xFF, 0x80, + 0x7F, 0xE0, 0x1F, 0xFC, 0x0F, 0xDF, 0x87, 0xE7, 0xFF, 0xF8, 0xFF, 0xFC, + 0x1F, 0xFE, 0x01, 0xFE, 0x00, 0x00, 0x20, 0x00, 0x1C, 0x00, 0x0F, 0x80, + 0x07, 0xC0, 0x03, 0xE0, 0x00, 0x70, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3E, 0x01, 0xFF, 0x80, 0x7F, 0xE0, 0x1F, 0xF8, 0x07, 0xFE, 0x01, + 0xFF, 0x80, 0x7F, 0xE0, 0x1F, 0xF8, 0x07, 0xFE, 0x01, 0xFF, 0x80, 0x7F, + 0xE0, 0x1F, 0xF8, 0x07, 0xFE, 0x01, 0xFF, 0x80, 0x7F, 0xE0, 0x1F, 0xFC, + 0x0F, 0xDF, 0x87, 0xE7, 0xFF, 0xF8, 0xFF, 0xFC, 0x1F, 0xFE, 0x01, 0xFE, + 0x00, 0x00, 0x80, 0x00, 0x70, 0x00, 0x3E, 0x00, 0x1F, 0xC0, 0x0F, 0x78, + 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x07, 0xFE, 0x01, 0xFF, + 0x80, 0x7F, 0xE0, 0x1F, 0xF8, 0x07, 0xFE, 0x01, 0xFF, 0x80, 0x7F, 0xE0, + 0x1F, 0xF8, 0x07, 0xFE, 0x01, 0xFF, 0x80, 0x7F, 0xE0, 0x1F, 0xF8, 0x07, + 0xFE, 0x01, 0xFF, 0x80, 0x7F, 0xF0, 0x3F, 0x7E, 0x1F, 0x9F, 0xFF, 0xE3, + 0xFF, 0xF0, 0x7F, 0xF8, 0x07, 0xF8, 0x00, 0x0E, 0x1C, 0x07, 0xCF, 0x81, + 0xF3, 0xE0, 0x7C, 0xF8, 0x0E, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xF8, 0x07, 0xFE, 0x01, 0xFF, 0x80, 0x7F, 0xE0, 0x1F, 0xF8, 0x07, + 0xFE, 0x01, 0xFF, 0x80, 0x7F, 0xE0, 0x1F, 0xF8, 0x07, 0xFE, 0x01, 0xFF, + 0x80, 0x7F, 0xE0, 0x1F, 0xF8, 0x07, 0xFE, 0x01, 0xFF, 0x80, 0x7F, 0xF0, + 0x3F, 0x7E, 0x1F, 0x9F, 0xFF, 0xE3, 0xFF, 0xF0, 0x7F, 0xF8, 0x07, 0xF8, + 0x00, 0x00, 0x08, 0x00, 0x00, 0xE0, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, + 0x0F, 0x80, 0x00, 0x38, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0xE0, 0x0F, 0xDF, 0x00, 0xFC, 0xFC, 0x07, 0xE3, 0xF0, 0x7E, 0x0F, + 0x83, 0xE0, 0x7E, 0x3F, 0x01, 0xFB, 0xF0, 0x0F, 0xDF, 0x80, 0x3F, 0xF8, + 0x00, 0xFF, 0x80, 0x07, 0xFC, 0x00, 0x1F, 0xC0, 0x00, 0x7C, 0x00, 0x03, + 0xE0, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x07, 0xC0, 0x00, 0x3E, 0x00, + 0x01, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0x7C, 0x00, 0xF8, 0x00, 0x7C, 0x00, + 0x3E, 0x00, 0x1F, 0xFE, 0x0F, 0xFF, 0xC7, 0xFF, 0xF3, 0xFF, 0xFD, 0xF0, + 0x7F, 0xF8, 0x0F, 0xFC, 0x07, 0xFE, 0x03, 0xFF, 0x01, 0xFF, 0x83, 0xFF, + 0xFF, 0xFB, 0xFF, 0xF9, 0xFF, 0xF8, 0xFF, 0xF0, 0x7C, 0x00, 0x3E, 0x00, + 0x1F, 0x00, 0x0F, 0x80, 0x00, 0x0F, 0xE0, 0x1F, 0xF8, 0x1F, 0xFE, 0x0F, + 0xFF, 0x8F, 0xC7, 0xC7, 0xC3, 0xE3, 0xE1, 0xF1, 0xF0, 0xF8, 0xF8, 0xF8, + 0x7C, 0x7C, 0x3E, 0x7C, 0x1F, 0x3E, 0x0F, 0x9F, 0x07, 0xCF, 0xE3, 0xE3, + 0xF9, 0xF0, 0xFE, 0xF8, 0x1F, 0xFC, 0x07, 0xFE, 0x03, 0xFF, 0x21, 0xFF, + 0x9F, 0xFF, 0xCF, 0xFB, 0xE7, 0xFD, 0xF3, 0xF8, 0x04, 0x00, 0x38, 0x01, + 0xF0, 0x03, 0xE0, 0x07, 0xC0, 0x0E, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0x83, 0xFF, 0x0F, 0xFE, 0x3F, 0xFC, 0x03, 0xF0, 0x07, 0xC7, 0xFF, + 0x7F, 0xFD, 0xFF, 0xFF, 0xC7, 0xFE, 0x1F, 0xF8, 0x7F, 0xFF, 0xF7, 0xFF, + 0xDF, 0xFF, 0x1F, 0xF8, 0x00, 0x80, 0x07, 0x00, 0x3E, 0x01, 0xF0, 0x0F, + 0x80, 0x1C, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x83, 0xFF, 0x0F, + 0xFE, 0x3F, 0xFC, 0x03, 0xF0, 0x07, 0xC7, 0xFF, 0x7F, 0xFD, 0xFF, 0xFF, + 0xC7, 0xFE, 0x1F, 0xF8, 0x7F, 0xFF, 0xF7, 0xFF, 0xDF, 0xFF, 0x1F, 0xF8, + 0x02, 0x00, 0x1C, 0x00, 0xF8, 0x07, 0xF0, 0x3D, 0xE0, 0x41, 0x00, 0x00, + 0x00, 0x00, 0x1F, 0xE0, 0xFF, 0xC3, 0xFF, 0x8F, 0xFF, 0x00, 0xFC, 0x01, + 0xF1, 0xFF, 0xDF, 0xFF, 0x7F, 0xFF, 0xF1, 0xFF, 0x87, 0xFE, 0x1F, 0xFF, + 0xFD, 0xFF, 0xF7, 0xFF, 0xC7, 0xFE, 0x0E, 0x30, 0x7F, 0xE3, 0xFF, 0x06, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x3F, 0xF0, 0xFF, 0xE3, + 0xFF, 0xC0, 0x3F, 0x00, 0x7C, 0x7F, 0xF7, 0xFF, 0xDF, 0xFF, 0xFC, 0x7F, + 0xE1, 0xFF, 0x87, 0xFF, 0xFF, 0x7F, 0xFD, 0xFF, 0xF1, 0xFF, 0x80, 0x38, + 0x71, 0xF3, 0xE7, 0xCF, 0x9F, 0x3E, 0x38, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1F, 0xE0, 0xFF, 0xC3, 0xFF, 0x8F, 0xFF, 0x00, 0xFC, 0x01, 0xF1, + 0xFF, 0xDF, 0xFF, 0x7F, 0xFF, 0xF1, 0xFF, 0x87, 0xFE, 0x1F, 0xFF, 0xFD, + 0xFF, 0xF7, 0xFF, 0xC7, 0xFE, 0x03, 0x80, 0x1F, 0x00, 0xC6, 0x03, 0x18, + 0x0C, 0x60, 0x1F, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x83, 0xFF, + 0x0F, 0xFE, 0x3F, 0xFC, 0x03, 0xF0, 0x07, 0xC7, 0xFF, 0x7F, 0xFD, 0xFF, + 0xFF, 0xC7, 0xFE, 0x1F, 0xF8, 0x7F, 0xFF, 0xF7, 0xFF, 0xDF, 0xFF, 0x1F, + 0xF8, 0x1F, 0xE1, 0xF8, 0x1F, 0xFB, 0xFF, 0x0F, 0xFF, 0xFF, 0xC7, 0xFF, + 0xFF, 0xE2, 0x07, 0xF1, 0xF8, 0x01, 0xF0, 0x7C, 0x3F, 0xFF, 0xFE, 0x7F, + 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFE, 0x1F, 0x00, 0x3E, 0x0F, 0xC0, 0x1F, + 0x83, 0xF0, 0x0F, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFC, + 0x1F, 0xC3, 0xF8, 0x03, 0xF8, 0x7F, 0xF3, 0xFF, 0x9F, 0xFE, 0x7E, 0x0B, + 0xF0, 0x0F, 0x80, 0x3E, 0x00, 0xF8, 0x03, 0xE0, 0x0F, 0xC0, 0x1F, 0x80, + 0x3F, 0xFC, 0x7F, 0xF0, 0xFF, 0xC0, 0x7E, 0x03, 0xC0, 0x03, 0x80, 0x0E, + 0x03, 0xF8, 0x0F, 0xC0, 0x3E, 0x00, 0x02, 0x00, 0x07, 0x00, 0x0F, 0x80, + 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xC0, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x07, 0xE0, 0x1F, 0xF8, 0x3F, 0xFC, 0x7F, 0xFE, 0x7C, 0x3F, 0xF8, 0x1F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0xFC, 0x00, 0x7E, 0x04, + 0x7F, 0xFE, 0x3F, 0xFE, 0x1F, 0xFE, 0x07, 0xF8, 0x00, 0x40, 0x00, 0xE0, + 0x01, 0xF0, 0x03, 0xE0, 0x07, 0xC0, 0x03, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x07, 0xE0, 0x1F, 0xF8, 0x3F, 0xFC, 0x7F, 0xFE, 0x7C, 0x3F, + 0xF8, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0xFC, 0x00, + 0x7E, 0x04, 0x7F, 0xFE, 0x3F, 0xFE, 0x1F, 0xFE, 0x07, 0xF8, 0x01, 0x00, + 0x03, 0x80, 0x07, 0xC0, 0x0F, 0xE0, 0x1E, 0xF0, 0x08, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x07, 0xE0, 0x1F, 0xF8, 0x3F, 0xFC, 0x7F, 0xFE, 0x7C, 0x3F, + 0xF8, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0xFC, 0x00, + 0x7E, 0x04, 0x7F, 0xFE, 0x3F, 0xFE, 0x1F, 0xFE, 0x07, 0xF8, 0x1C, 0x38, + 0x3E, 0x7C, 0x3E, 0x7C, 0x3E, 0x7C, 0x1C, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x07, 0xE0, 0x1F, 0xF8, 0x3F, 0xFC, 0x7F, 0xFE, 0x7C, 0x3F, + 0xF8, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0xFC, 0x00, + 0x7E, 0x04, 0x7F, 0xFE, 0x3F, 0xFE, 0x1F, 0xFE, 0x07, 0xF8, 0x20, 0xE3, + 0xE3, 0xE3, 0xE3, 0x82, 0x00, 0x00, 0xF9, 0xF3, 0xE7, 0xCF, 0x9F, 0x3E, + 0x7C, 0xF9, 0xF3, 0xE7, 0xCF, 0x9F, 0x3E, 0x7C, 0x08, 0x38, 0xFB, 0xEF, + 0x8E, 0x08, 0x00, 0x00, 0xF9, 0xF3, 0xE7, 0xCF, 0x9F, 0x3E, 0x7C, 0xF9, + 0xF3, 0xE7, 0xCF, 0x9F, 0x3E, 0x7C, 0x08, 0x0E, 0x0F, 0x8F, 0xEF, 0x7A, + 0x08, 0x00, 0x00, 0x3E, 0x1F, 0x0F, 0x87, 0xC3, 0xE1, 0xF0, 0xF8, 0x7C, + 0x3E, 0x1F, 0x0F, 0x87, 0xC3, 0xE1, 0xF0, 0xF8, 0x7C, 0x70, 0xEF, 0x9F, + 0xF9, 0xFF, 0x9F, 0x70, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0xF8, + 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, + 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x00, 0x80, 0x00, + 0xF0, 0x00, 0xFC, 0x60, 0x3F, 0xF0, 0x0F, 0xF8, 0x1F, 0xF0, 0x0F, 0xF8, + 0x07, 0x3E, 0x00, 0x1F, 0x03, 0xF7, 0x87, 0xFF, 0xE7, 0xFF, 0xF7, 0xFF, + 0xFF, 0xE0, 0xFF, 0xE0, 0x3F, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x07, 0xFE, + 0x07, 0xCF, 0x87, 0xE7, 0xFF, 0xE1, 0xFF, 0xF0, 0x7F, 0xF0, 0x0F, 0xE0, + 0x0E, 0x30, 0x7F, 0xE3, 0xFF, 0x06, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0F, 0xF0, 0xFF, 0xF3, 0xFF, 0xEF, 0xFF, 0xBE, 0x3F, 0xF8, 0x7F, 0xE1, + 0xFF, 0x87, 0xFE, 0x1F, 0xF8, 0x7F, 0xE1, 0xFF, 0x87, 0xFE, 0x1F, 0xF8, + 0x7F, 0xE1, 0xFF, 0x87, 0xC0, 0x01, 0x00, 0x01, 0xC0, 0x01, 0xF0, 0x00, + 0x7C, 0x00, 0x1F, 0x00, 0x07, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0xF8, 0x07, 0xFF, 0x07, 0xFF, 0xC7, 0xFF, 0xF3, 0xF1, 0xFB, 0xF0, + 0x7F, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x07, 0xFE, 0x03, 0xFF, 0x83, 0xF7, + 0xE3, 0xF3, 0xFF, 0xF8, 0xFF, 0xF8, 0x3F, 0xF8, 0x07, 0xF0, 0x00, 0x00, + 0x40, 0x00, 0x70, 0x00, 0x7C, 0x00, 0x7C, 0x00, 0x7C, 0x00, 0x1C, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x07, 0xFF, 0x07, 0xFF, + 0xC7, 0xFF, 0xF3, 0xF1, 0xFB, 0xF0, 0x7F, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, + 0x07, 0xFE, 0x03, 0xFF, 0x83, 0xF7, 0xE3, 0xF3, 0xFF, 0xF8, 0xFF, 0xF8, + 0x3F, 0xF8, 0x07, 0xF0, 0x00, 0x00, 0x80, 0x00, 0xE0, 0x00, 0xF8, 0x00, + 0xFE, 0x00, 0xF7, 0x80, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, + 0x0F, 0xFE, 0x0F, 0xFF, 0x8F, 0xFF, 0xE7, 0xE3, 0xF7, 0xE0, 0xFF, 0xE0, + 0x3F, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x07, 0xFF, 0x07, 0xEF, 0xC7, 0xE7, + 0xFF, 0xF1, 0xFF, 0xF0, 0x7F, 0xF0, 0x0F, 0xE0, 0x07, 0x18, 0x07, 0xFE, + 0x07, 0xFE, 0x01, 0x8E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, + 0xE0, 0x1F, 0xFC, 0x1F, 0xFF, 0x1F, 0xFF, 0xCF, 0xC7, 0xEF, 0xC1, 0xFF, + 0xC0, 0x7F, 0xE0, 0x3F, 0xF0, 0x1F, 0xF8, 0x0F, 0xFE, 0x0F, 0xDF, 0x8F, + 0xCF, 0xFF, 0xE3, 0xFF, 0xE0, 0xFF, 0xE0, 0x1F, 0xC0, 0x0E, 0x1C, 0x0F, + 0x9F, 0x07, 0xCF, 0x83, 0xE7, 0xC0, 0xE1, 0xC0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x07, 0xF0, 0x0F, 0xFE, 0x0F, 0xFF, 0x8F, 0xFF, 0xE7, 0xE3, + 0xF7, 0xE0, 0xFF, 0xE0, 0x3F, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x07, 0xFF, + 0x07, 0xEF, 0xC7, 0xE7, 0xFF, 0xF1, 0xFF, 0xF0, 0x7F, 0xF0, 0x0F, 0xE0, + 0x03, 0x80, 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, + 0x00, 0x70, 0x01, 0xF0, 0x03, 0xE0, 0x07, 0xC0, 0x07, 0x00, 0x00, 0x02, + 0x03, 0xFB, 0x87, 0xFF, 0xC7, 0xFF, 0xC7, 0xFF, 0xF3, 0xF1, 0xFB, 0xF1, + 0xFF, 0xF1, 0xFF, 0xF9, 0xEF, 0xFD, 0xE7, 0xFF, 0xE3, 0xFF, 0xE3, 0xF7, + 0xE3, 0xF3, 0xFF, 0xF8, 0xFF, 0xF8, 0xFF, 0xF8, 0x77, 0xF0, 0x10, 0x00, + 0x00, 0x04, 0x00, 0x38, 0x01, 0xF0, 0x03, 0xE0, 0x07, 0xC0, 0x0E, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x03, 0xE1, 0xFF, 0x87, 0xFE, 0x1F, 0xF8, 0x7F, + 0xE1, 0xFF, 0x87, 0xFE, 0x1F, 0xF8, 0x7F, 0xE1, 0xFF, 0x87, 0xFE, 0x1F, + 0xFC, 0x7D, 0xFF, 0xF7, 0xFF, 0xCF, 0xFF, 0x0F, 0xF0, 0x00, 0x80, 0x07, + 0x00, 0x3E, 0x01, 0xF0, 0x0F, 0x80, 0x1C, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x03, 0xE1, 0xFF, 0x87, 0xFE, 0x1F, 0xF8, 0x7F, 0xE1, 0xFF, 0x87, 0xFE, + 0x1F, 0xF8, 0x7F, 0xE1, 0xFF, 0x87, 0xFE, 0x1F, 0xFC, 0x7D, 0xFF, 0xF7, + 0xFF, 0xCF, 0xFF, 0x0F, 0xF0, 0x01, 0x00, 0x0E, 0x00, 0x7C, 0x03, 0xF8, + 0x1E, 0xF0, 0x20, 0x80, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0xE1, 0xFF, 0x87, + 0xFE, 0x1F, 0xF8, 0x7F, 0xE1, 0xFF, 0x87, 0xFE, 0x1F, 0xF8, 0x7F, 0xE1, + 0xFF, 0x87, 0xFF, 0x1F, 0x7F, 0xFD, 0xFF, 0xF3, 0xFF, 0xC3, 0xFC, 0x38, + 0x71, 0xF3, 0xE7, 0xCF, 0x9F, 0x3E, 0x38, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xF8, 0x7F, 0xE1, 0xFF, 0x87, 0xFE, 0x1F, 0xF8, 0x7F, 0xE1, 0xFF, + 0x87, 0xFE, 0x1F, 0xF8, 0x7F, 0xE1, 0xFF, 0x87, 0xFF, 0x1F, 0x7F, 0xFD, + 0xFF, 0xF3, 0xFF, 0xC3, 0xFC, 0x00, 0x20, 0x00, 0x38, 0x00, 0x3E, 0x00, + 0x3E, 0x00, 0x3E, 0x00, 0x0E, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7C, 0x07, 0xFF, 0x07, 0xEF, 0x83, 0xE7, 0xC1, 0xF3, 0xF1, 0xF8, 0xF8, + 0xF8, 0x7C, 0x7C, 0x3E, 0x3C, 0x0F, 0xBE, 0x07, 0xDF, 0x01, 0xEF, 0x00, + 0xFF, 0x80, 0x3F, 0x80, 0x1F, 0xC0, 0x07, 0xE0, 0x03, 0xE0, 0x01, 0xF0, + 0x01, 0xF0, 0x0F, 0xF8, 0x0F, 0xF8, 0x07, 0xF8, 0x01, 0xF0, 0x00, 0x38, + 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, + 0x00, 0xF8, 0x00, 0xFF, 0xE0, 0xFF, 0xF8, 0xFF, 0xFC, 0xFF, 0xFE, 0xF8, + 0x7E, 0xF8, 0x3F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, + 0x3F, 0xF8, 0x3E, 0xFF, 0xFE, 0xFF, 0xFC, 0xFF, 0xF8, 0xFB, 0xF0, 0xF8, + 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0x0E, + 0x1C, 0x0F, 0x9F, 0x07, 0xCF, 0x83, 0xE7, 0xC0, 0xE1, 0xC0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0xFE, 0x0F, 0xDF, 0x07, 0xCF, 0x83, + 0xE7, 0xE3, 0xF1, 0xF1, 0xF0, 0xF8, 0xF8, 0x7C, 0x78, 0x1F, 0x7C, 0x0F, + 0xBE, 0x03, 0xDE, 0x01, 0xFF, 0x00, 0x7F, 0x00, 0x3F, 0x80, 0x0F, 0xC0, + 0x07, 0xC0, 0x03, 0xE0, 0x03, 0xE0, 0x1F, 0xF0, 0x1F, 0xF0, 0x0F, 0xF0, + 0x03, 0xE0, 0x00 }; + +const GFXglyph Ubuntu_Bold16pt8bGlyphs[] PROGMEM = { + { 0, 1, 1, 7, 0, 0 }, // 0x20 ' ' U+0020 + { 1, 5, 21, 9, 2, -20 }, // 0x21 '!' U+0021 + { 15, 12, 9, 14, 2, -23 }, // 0x22 '"' U+0022 + { 29, 18, 21, 22, 2, -20 }, // 0x23 '#' U+0023 + { 77, 16, 28, 18, 1, -23 }, // 0x24 '$' U+0024 + { 133, 26, 21, 28, 1, -20 }, // 0x25 '%' U+0025 + { 202, 21, 21, 22, 1, -20 }, // 0x26 '&' U+0026 + { 258, 5, 9, 9, 2, -23 }, // 0x27 ''' U+0027 + { 264, 9, 30, 11, 2, -23 }, // 0x28 '(' U+0028 + { 298, 9, 30, 11, 0, -23 }, // 0x29 ')' U+0029 + { 332, 13, 12, 16, 2, -20 }, // 0x2a '*' U+002A + { 352, 14, 14, 18, 2, -15 }, // 0x2b '+' U+002B + { 377, 6, 10, 8, 1, -4 }, // 0x2c ',' U+002C + { 385, 9, 4, 11, 1, -10 }, // 0x2d '-' U+002D + { 390, 6, 6, 8, 1, -5 }, // 0x2e '.' U+002E + { 395, 15, 30, 14, -1, -23 }, // 0x2f '/' U+002F + { 452, 16, 21, 18, 1, -20 }, // 0x30 '0' U+0030 + { 494, 10, 21, 18, 3, -20 }, // 0x31 '1' U+0031 + { 521, 15, 21, 18, 1, -20 }, // 0x32 '2' U+0032 + { 561, 15, 21, 18, 1, -20 }, // 0x33 '3' U+0033 + { 601, 16, 21, 18, 1, -20 }, // 0x34 '4' U+0034 + { 643, 15, 21, 18, 1, -20 }, // 0x35 '5' U+0035 + { 683, 16, 21, 18, 1, -20 }, // 0x36 '6' U+0036 + { 725, 16, 21, 18, 1, -20 }, // 0x37 '7' U+0037 + { 767, 16, 21, 18, 1, -20 }, // 0x38 '8' U+0038 + { 809, 16, 21, 18, 1, -20 }, // 0x39 '9' U+0039 + { 851, 6, 17, 8, 1, -16 }, // 0x3a ':' U+003A + { 864, 6, 22, 8, 1, -16 }, // 0x3b ';' U+003B + { 881, 15, 15, 18, 1, -16 }, // 0x3c '<' U+003C + { 910, 15, 11, 18, 1, -14 }, // 0x3d '=' U+003D + { 931, 14, 15, 18, 2, -16 }, // 0x3e '>' U+003E + { 958, 12, 24, 14, 1, -23 }, // 0x3f '?' U+003F + { 994, 26, 27, 30, 2, -21 }, // 0x40 '@' U+0040 + { 1082, 21, 21, 21, 0, -20 }, // 0x41 'A' U+0041 + { 1138, 17, 21, 21, 2, -20 }, // 0x42 'B' U+0042 + { 1183, 17, 21, 20, 2, -20 }, // 0x43 'C' U+0043 + { 1228, 19, 21, 23, 2, -20 }, // 0x44 'D' U+0044 + { 1278, 16, 21, 19, 2, -20 }, // 0x45 'E' U+0045 + { 1320, 15, 21, 18, 2, -20 }, // 0x46 'F' U+0046 + { 1360, 18, 21, 22, 2, -20 }, // 0x47 'G' U+0047 + { 1408, 19, 21, 23, 2, -20 }, // 0x48 'H' U+0048 + { 1458, 5, 21, 9, 2, -20 }, // 0x49 'I' U+0049 + { 1472, 14, 21, 16, 0, -20 }, // 0x4a 'J' U+004A + { 1509, 19, 21, 21, 2, -20 }, // 0x4b 'K' U+004B + { 1559, 14, 21, 17, 2, -20 }, // 0x4c 'L' U+004C + { 1596, 24, 21, 28, 2, -20 }, // 0x4d 'M' U+004D + { 1659, 19, 21, 23, 2, -20 }, // 0x4e 'N' U+004E + { 1709, 20, 21, 24, 2, -20 }, // 0x4f 'O' U+004F + { 1762, 17, 21, 20, 2, -20 }, // 0x50 'P' U+0050 + { 1807, 20, 27, 24, 2, -20 }, // 0x51 'Q' U+0051 + { 1875, 18, 21, 21, 2, -20 }, // 0x52 'R' U+0052 + { 1923, 16, 21, 18, 1, -20 }, // 0x53 'S' U+0053 + { 1965, 17, 21, 19, 1, -20 }, // 0x54 'T' U+0054 + { 2010, 18, 21, 22, 2, -20 }, // 0x55 'U' U+0055 + { 2058, 21, 21, 21, 0, -20 }, // 0x56 'V' U+0056 + { 2114, 29, 21, 31, 1, -20 }, // 0x57 'W' U+0057 + { 2191, 21, 21, 21, 0, -20 }, // 0x58 'X' U+0058 + { 2247, 21, 21, 21, 0, -20 }, // 0x59 'Y' U+0059 + { 2303, 17, 21, 19, 1, -20 }, // 0x5a 'Z' U+005A + { 2348, 10, 30, 12, 2, -23 }, // 0x5b '[' U+005B + { 2386, 15, 30, 14, -1, -23 }, // 0x5c '\' U+005C + { 2443, 10, 30, 12, 0, -23 }, // 0x5d ']' U+005D + { 2481, 17, 13, 19, 1, -21 }, // 0x5e '^' U+005E + { 2509, 16, 4, 16, 0, 3 }, // 0x5f '_' U+005F + { 2517, 7, 7, 9, 1, -24 }, // 0x60 '`' U+0060 + { 2524, 14, 16, 17, 1, -15 }, // 0x61 'a' U+0061 + { 2552, 16, 24, 19, 2, -23 }, // 0x62 'b' U+0062 + { 2600, 14, 16, 16, 1, -15 }, // 0x63 'c' U+0063 + { 2628, 16, 24, 19, 1, -23 }, // 0x64 'd' U+0064 + { 2676, 16, 16, 18, 1, -15 }, // 0x65 'e' U+0065 + { 2708, 12, 24, 14, 2, -23 }, // 0x66 'f' U+0066 + { 2744, 15, 22, 18, 1, -15 }, // 0x67 'g' U+0067 + { 2786, 14, 24, 18, 2, -23 }, // 0x68 'h' U+0068 + { 2828, 5, 24, 9, 2, -23 }, // 0x69 'i' U+0069 + { 2843, 9, 30, 9, -2, -23 }, // 0x6a 'j' U+006A + { 2877, 15, 24, 18, 2, -23 }, // 0x6b 'k' U+006B + { 2922, 8, 24, 10, 2, -23 }, // 0x6c 'l' U+006C + { 2946, 23, 16, 27, 2, -15 }, // 0x6d 'm' U+006D + { 2992, 14, 16, 18, 2, -15 }, // 0x6e 'n' U+006E + { 3020, 17, 16, 19, 1, -15 }, // 0x6f 'o' U+006F + { 3054, 16, 22, 19, 2, -15 }, // 0x70 'p' U+0070 + { 3098, 17, 22, 19, 1, -15 }, // 0x71 'q' U+0071 + { 3145, 11, 16, 13, 2, -15 }, // 0x72 'r' U+0072 + { 3167, 13, 16, 15, 1, -15 }, // 0x73 's' U+0073 + { 3193, 12, 21, 15, 2, -20 }, // 0x74 't' U+0074 + { 3225, 14, 16, 18, 2, -15 }, // 0x75 'u' U+0075 + { 3253, 17, 16, 17, 0, -15 }, // 0x76 'v' U+0076 + { 3287, 24, 16, 24, 0, -15 }, // 0x77 'w' U+0077 + { 3335, 17, 16, 17, 0, -15 }, // 0x78 'x' U+0078 + { 3369, 17, 22, 17, 0, -15 }, // 0x79 'y' U+0079 + { 3416, 14, 16, 16, 1, -15 }, // 0x7a 'z' U+007A + { 3444, 11, 30, 12, 1, -23 }, // 0x7b '{' U+007B + { 3486, 4, 30, 10, 3, -23 }, // 0x7c '|' U+007C + { 3501, 11, 30, 12, 0, -23 }, // 0x7d '}' U+007D + { 3543, 16, 6, 18, 1, -11 }, // 0x7e '~' U+007E + { 3555, 12, 23, 16, 2, -22 }, // 0x7f 'REPLACEMENT CHARACTER *' U+2370 + { 3590, 1, 1, 7, 0, 0 }, // 0x80 'NO-BREAK SPACE' U+00A0 + { 3591, 5, 22, 9, 2, -15 }, // 0x81 'INVERTED EXCLAMATION MARK' U+00A1 + { 3605, 14, 23, 18, 1, -19 }, // 0x82 'CENT SIGN' U+00A2 + { 3646, 15, 21, 18, 1, -20 }, // 0x83 'POUND SIGN' U+00A3 + { 3686, 17, 16, 18, 0, -18 }, // 0x84 'CURRENCY SIGN' U+00A4 + { 3720, 19, 21, 19, 0, -20 }, // 0x85 'YEN SIGN' U+00A5 + { 3770, 4, 30, 9, 2, -23 }, // 0x86 'BROKEN BAR' U+00A6 + { 3785, 14, 27, 16, 1, -20 }, // 0x87 'SECTION SIGN' U+00A7 + { 3833, 12, 5, 17, 2, -23 }, // 0x88 'DIAERESIS' U+00A8 + { 3841, 21, 22, 25, 2, -21 }, // 0x89 'COPYRIGHT SIGN' U+00A9 + { 3899, 10, 13, 12, 1, -21 }, // 0x8a 'FEMININE ORDINAL INDICATOR' U+00AA + { 3916, 16, 15, 19, 1, -15 }, // 0x8b 'LEFT-POINTING DOUBLE ANGLE QUOTATION MARK' U+00AB + { 3946, 15, 11, 18, 2, -12 }, // 0x8c 'NOT SIGN' U+00AC + { 3967, 9, 4, 11, 1, -10 }, // 0x8d 'SOFT HYPHEN' U+00AD + { 3972, 21, 22, 25, 2, -21 }, // 0x8e 'REGISTERED SIGN' U+00AE + { 4030, 10, 3, 12, 1, -21 }, // 0x8f 'MACRON' U+00AF + { 4034, 9, 9, 11, 1, -23 }, // 0x90 'DEGREE SIGN' U+00B0 + { 4045, 14, 19, 18, 2, -18 }, // 0x91 'PLUS-MINUS SIGN' U+00B1 + { 4079, 10, 13, 11, 0, -21 }, // 0x92 'SUPERSCRIPT TWO' U+00B2 + { 4096, 9, 13, 11, 1, -21 }, // 0x93 'SUPERSCRIPT THREE' U+00B3 + { 4111, 7, 7, 9, 1, -24 }, // 0x94 'ACUTE ACCENT' U+00B4 + { 4118, 14, 22, 18, 2, -15 }, // 0x95 'MICRO SIGN' U+00B5 + { 4157, 19, 28, 22, 1, -21 }, // 0x96 'PILCROW SIGN' U+00B6 + { 4224, 6, 6, 8, 1, -12 }, // 0x97 'MIDDLE DOT' U+00B7 + { 4229, 7, 8, 10, 1, 0 }, // 0x98 'CEDILLA' U+00B8 + { 4236, 7, 13, 11, 1, -21 }, // 0x99 'SUPERSCRIPT ONE' U+00B9 + { 4248, 12, 13, 14, 1, -21 }, // 0x9a 'MASCULINE ORDINAL INDICATOR' U+00BA + { 4268, 16, 15, 19, 1, -15 }, // 0x9b 'RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK' U+00BB + { 4298, 26, 22, 27, 0, -21 }, // 0x9c 'VULGAR FRACTION ONE QUARTER' U+00BC + { 4370, 26, 22, 27, 0, -21 }, // 0x9d 'VULGAR FRACTION ONE HALF' U+00BD + { 4442, 25, 22, 27, 1, -21 }, // 0x9e 'VULGAR FRACTION THREE QUARTERS' U+00BE + { 4511, 12, 22, 14, 1, -15 }, // 0x9f 'INVERTED QUESTION MARK' U+00BF + { 4544, 21, 30, 21, 0, -29 }, // 0xa0 'LATIN CAPITAL LETTER A WITH GRAVE' U+00C0 + { 4623, 21, 30, 21, 0, -29 }, // 0xa1 'LATIN CAPITAL LETTER A WITH ACUTE' U+00C1 + { 4702, 21, 29, 21, 0, -28 }, // 0xa2 'LATIN CAPITAL LETTER A WITH CIRCUMFLEX' U+00C2 + { 4779, 21, 28, 21, 0, -27 }, // 0xa3 'LATIN CAPITAL LETTER A WITH TILDE' U+00C3 + { 4853, 21, 29, 21, 0, -28 }, // 0xa4 'LATIN CAPITAL LETTER A WITH DIAERESIS' U+00C4 + { 4930, 21, 27, 21, 0, -26 }, // 0xa5 'LATIN CAPITAL LETTER A WITH RING ABOVE' U+00C5 + { 5001, 30, 21, 31, 0, -20 }, // 0xa6 'LATIN CAPITAL LETTER AE' U+00C6 + { 5080, 17, 28, 20, 2, -20 }, // 0xa7 'LATIN CAPITAL LETTER C WITH CEDILLA' U+00C7 + { 5140, 16, 30, 19, 2, -29 }, // 0xa8 'LATIN CAPITAL LETTER E WITH GRAVE' U+00C8 + { 5200, 16, 30, 19, 2, -29 }, // 0xa9 'LATIN CAPITAL LETTER E WITH ACUTE' U+00C9 + { 5260, 16, 29, 19, 2, -28 }, // 0xaa 'LATIN CAPITAL LETTER E WITH CIRCUMFLEX' U+00CA + { 5318, 16, 29, 19, 2, -28 }, // 0xab 'LATIN CAPITAL LETTER E WITH DIAERESIS' U+00CB + { 5376, 7, 30, 9, 1, -29 }, // 0xac 'LATIN CAPITAL LETTER I WITH GRAVE' U+00CC + { 5403, 7, 30, 9, 1, -29 }, // 0xad 'LATIN CAPITAL LETTER I WITH ACUTE' U+00CD + { 5430, 9, 29, 9, 0, -28 }, // 0xae 'LATIN CAPITAL LETTER I WITH CIRCUMFLEX' U+00CE + { 5463, 12, 29, 9, -1, -28 }, // 0xaf 'LATIN CAPITAL LETTER I WITH DIAERESIS' U+00CF + { 5507, 22, 21, 23, -1, -20 }, // 0xb0 'LATIN CAPITAL LETTER ETH' U+00D0 + { 5565, 19, 28, 23, 2, -27 }, // 0xb1 'LATIN CAPITAL LETTER N WITH TILDE' U+00D1 + { 5632, 20, 30, 24, 2, -29 }, // 0xb2 'LATIN CAPITAL LETTER O WITH GRAVE' U+00D2 + { 5707, 20, 30, 24, 2, -29 }, // 0xb3 'LATIN CAPITAL LETTER O WITH ACUTE' U+00D3 + { 5782, 20, 29, 24, 2, -28 }, // 0xb4 'LATIN CAPITAL LETTER O WITH CIRCUMFLEX' U+00D4 + { 5855, 20, 28, 24, 2, -27 }, // 0xb5 'LATIN CAPITAL LETTER O WITH TILDE' U+00D5 + { 5925, 20, 29, 24, 2, -28 }, // 0xb6 'LATIN CAPITAL LETTER O WITH DIAERESIS' U+00D6 + { 5998, 14, 14, 18, 2, -15 }, // 0xb7 'MULTIPLICATION SIGN' U+00D7 + { 6023, 20, 23, 24, 2, -21 }, // 0xb8 'LATIN CAPITAL LETTER O WITH STROKE' U+00D8 + { 6081, 18, 30, 22, 2, -29 }, // 0xb9 'LATIN CAPITAL LETTER U WITH GRAVE' U+00D9 + { 6149, 18, 30, 22, 2, -29 }, // 0xba 'LATIN CAPITAL LETTER U WITH ACUTE' U+00DA + { 6217, 18, 29, 22, 2, -28 }, // 0xbb 'LATIN CAPITAL LETTER U WITH CIRCUMFLEX' U+00DB + { 6283, 18, 29, 22, 2, -28 }, // 0xbc 'LATIN CAPITAL LETTER U WITH DIAERESIS' U+00DC + { 6349, 21, 30, 21, 0, -29 }, // 0xbd 'LATIN CAPITAL LETTER Y WITH ACUTE' U+00DD + { 6428, 17, 21, 20, 2, -20 }, // 0xbe 'LATIN CAPITAL LETTER THORN' U+00DE + { 6473, 17, 24, 20, 2, -23 }, // 0xbf 'LATIN SMALL LETTER SHARP S' U+00DF + { 6524, 14, 25, 17, 1, -24 }, // 0xc0 'LATIN SMALL LETTER A WITH GRAVE' U+00E0 + { 6568, 14, 25, 17, 1, -24 }, // 0xc1 'LATIN SMALL LETTER A WITH ACUTE' U+00E1 + { 6612, 14, 24, 17, 1, -23 }, // 0xc2 'LATIN SMALL LETTER A WITH CIRCUMFLEX' U+00E2 + { 6654, 14, 23, 17, 1, -22 }, // 0xc3 'LATIN SMALL LETTER A WITH TILDE' U+00E3 + { 6695, 14, 24, 17, 1, -23 }, // 0xc4 'LATIN SMALL LETTER A WITH DIAERESIS' U+00E4 + { 6737, 14, 25, 17, 1, -24 }, // 0xc5 'LATIN SMALL LETTER A WITH RING ABOVE' U+00E5 + { 6781, 25, 16, 27, 1, -15 }, // 0xc6 'LATIN SMALL LETTER AE' U+00E6 + { 6831, 14, 22, 16, 1, -15 }, // 0xc7 'LATIN SMALL LETTER C WITH CEDILLA' U+00E7 + { 6870, 16, 25, 18, 1, -24 }, // 0xc8 'LATIN SMALL LETTER E WITH GRAVE' U+00E8 + { 6920, 16, 25, 18, 1, -24 }, // 0xc9 'LATIN SMALL LETTER E WITH ACUTE' U+00E9 + { 6970, 16, 24, 18, 1, -23 }, // 0xca 'LATIN SMALL LETTER E WITH CIRCUMFLEX' U+00EA + { 7018, 16, 24, 18, 1, -23 }, // 0xcb 'LATIN SMALL LETTER E WITH DIAERESIS' U+00EB + { 7066, 7, 25, 9, 1, -24 }, // 0xcc 'LATIN SMALL LETTER I WITH GRAVE' U+00EC + { 7088, 7, 25, 9, 1, -24 }, // 0xcd 'LATIN SMALL LETTER I WITH ACUTE' U+00ED + { 7110, 9, 24, 9, 0, -23 }, // 0xce 'LATIN SMALL LETTER I WITH CIRCUMFLEX' U+00EE + { 7137, 12, 24, 9, -2, -23 }, // 0xcf 'LATIN SMALL LETTER I WITH DIAERESIS' U+00EF + { 7173, 17, 24, 19, 1, -23 }, // 0xd0 'LATIN SMALL LETTER ETH' U+00F0 + { 7224, 14, 23, 18, 2, -22 }, // 0xd1 'LATIN SMALL LETTER N WITH TILDE' U+00F1 + { 7265, 17, 25, 19, 1, -24 }, // 0xd2 'LATIN SMALL LETTER O WITH GRAVE' U+00F2 + { 7319, 17, 25, 19, 1, -24 }, // 0xd3 'LATIN SMALL LETTER O WITH ACUTE' U+00F3 + { 7373, 17, 24, 19, 1, -23 }, // 0xd4 'LATIN SMALL LETTER O WITH CIRCUMFLEX' U+00F4 + { 7424, 17, 23, 19, 1, -22 }, // 0xd5 'LATIN SMALL LETTER O WITH TILDE' U+00F5 + { 7473, 17, 24, 19, 1, -23 }, // 0xd6 'LATIN SMALL LETTER O WITH DIAERESIS' U+00F6 + { 7524, 15, 18, 19, 2, -17 }, // 0xd7 'DIVISION SIGN' U+00F7 + { 7558, 17, 18, 19, 1, -16 }, // 0xd8 'LATIN SMALL LETTER O WITH STROKE' U+00F8 + { 7597, 14, 25, 18, 2, -24 }, // 0xd9 'LATIN SMALL LETTER U WITH GRAVE' U+00F9 + { 7641, 14, 25, 18, 2, -24 }, // 0xda 'LATIN SMALL LETTER U WITH ACUTE' U+00FA + { 7685, 14, 24, 18, 2, -23 }, // 0xdb 'LATIN SMALL LETTER U WITH CIRCUMFLEX' U+00FB + { 7727, 14, 24, 18, 2, -23 }, // 0xdc 'LATIN SMALL LETTER U WITH DIAERESIS' U+00FC + { 7769, 17, 31, 17, 0, -24 }, // 0xdd 'LATIN SMALL LETTER Y WITH ACUTE' U+00FD + { 7835, 16, 30, 19, 2, -23 }, // 0xde 'LATIN SMALL LETTER THORN' U+00FE + { 7895, 17, 30, 17, 0, -23 } }; // 0xdf 'LATIN SMALL LETTER Y WITH DIAERESIS' U+000FF + +const GFXfont Ubuntu_Bold16pt8b PROGMEM = { + (uint8_t *)Ubuntu_Bold16pt8bBitmaps, + (GFXglyph *)Ubuntu_Bold16pt8bGlyphs, + 0x20, 0xDF, 36 }; + +// Approx. 9310 bytes diff --git a/lib/obp60task/Ubuntu_Bold20pt8b.h b/lib/obp60task/fonts/Ubuntu_Bold20pt8b.h similarity index 100% rename from lib/obp60task/Ubuntu_Bold20pt8b.h rename to lib/obp60task/fonts/Ubuntu_Bold20pt8b.h diff --git a/lib/obp60task/fonts/Ubuntu_Bold32pt8b.h b/lib/obp60task/fonts/Ubuntu_Bold32pt8b.h new file mode 100644 index 0000000..d901dc1 --- /dev/null +++ b/lib/obp60task/fonts/Ubuntu_Bold32pt8b.h @@ -0,0 +1,2955 @@ +const uint8_t Ubuntu_Bold32pt8bBitmaps[] PROGMEM = { + 0x00, 0x7F, 0xCF, 0xF9, 0xFF, 0x3F, 0xE7, 0xFC, 0xFF, 0x9F, 0xF3, 0xFE, + 0x7F, 0xCF, 0xF9, 0xFF, 0x3F, 0xE7, 0xFC, 0xFF, 0x9F, 0xF3, 0xFE, 0x7F, + 0xCF, 0xF9, 0xFF, 0x3F, 0xE7, 0xFC, 0x7F, 0x0F, 0xE1, 0xFC, 0x3F, 0x87, + 0xF0, 0xFE, 0x1F, 0xC3, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x07, 0xF1, + 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xF8, 0xFE, + 0x0F, 0x80, 0xFF, 0x83, 0xFF, 0xFF, 0x07, 0xFF, 0xFE, 0x0F, 0xFF, 0xFC, + 0x1F, 0xFF, 0xF8, 0x3F, 0xFF, 0xF0, 0x7F, 0xFF, 0xE0, 0xFF, 0xFF, 0xC1, + 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0x07, 0xFF, 0xFE, 0x0F, 0xFF, 0xFC, 0x1F, + 0xFF, 0xF0, 0x3F, 0xCF, 0xE0, 0x3F, 0x9F, 0xC0, 0x7F, 0x3F, 0x80, 0xFE, + 0x7F, 0x01, 0xFC, 0xFE, 0x03, 0xF9, 0xFC, 0x07, 0xF0, 0x00, 0x1F, 0xF0, + 0x3F, 0xE0, 0x00, 0x7F, 0xC0, 0xFF, 0x80, 0x01, 0xFF, 0x07, 0xFE, 0x00, + 0x0F, 0xF8, 0x1F, 0xF0, 0x00, 0x3F, 0xE0, 0x7F, 0xC0, 0x00, 0xFF, 0x81, + 0xFF, 0x00, 0x03, 0xFE, 0x07, 0xFC, 0x00, 0x0F, 0xF8, 0x3F, 0xF0, 0x00, + 0x7F, 0xE0, 0xFF, 0x80, 0x01, 0xFF, 0x03, 0xFE, 0x00, 0x07, 0xFC, 0x0F, + 0xF8, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, + 0xF8, 0x1F, 0xF0, 0x00, 0x7F, 0xE0, 0xFF, 0x80, 0x01, 0xFF, 0x03, 0xFE, + 0x00, 0x07, 0xFC, 0x0F, 0xF8, 0x00, 0x1F, 0xF0, 0x3F, 0xE0, 0x00, 0x7F, + 0xC0, 0xFF, 0x80, 0x01, 0xFF, 0x07, 0xFE, 0x00, 0x0F, 0xF8, 0x1F, 0xF0, + 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x1F, 0xF0, + 0x3F, 0xE0, 0x00, 0x7F, 0xC0, 0xFF, 0x80, 0x01, 0xFF, 0x07, 0xFE, 0x00, + 0x0F, 0xF8, 0x1F, 0xF0, 0x00, 0x3F, 0xE0, 0x7F, 0xC0, 0x00, 0xFF, 0x81, + 0xFF, 0x00, 0x03, 0xFE, 0x07, 0xFC, 0x00, 0x0F, 0xF8, 0x3F, 0xF0, 0x00, + 0x7F, 0xE0, 0xFF, 0x80, 0x01, 0xFF, 0x03, 0xFE, 0x00, 0x07, 0xFC, 0x0F, + 0xF8, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x7F, + 0x80, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x03, 0xFC, + 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x01, 0xFF, 0xFF, + 0xE0, 0x0F, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, + 0x83, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0xFC, + 0x3F, 0xF8, 0x03, 0xF0, 0x7F, 0xE0, 0x00, 0x60, 0xFF, 0x80, 0x00, 0x01, + 0xFF, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x07, + 0xFF, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x0F, + 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x07, + 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xFC, 0x00, 0x00, + 0xFF, 0xFC, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, + 0x1F, 0xF8, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, + 0x3F, 0xE2, 0x00, 0x00, 0x7F, 0xCF, 0x00, 0x01, 0xFF, 0x9F, 0xE0, 0x0F, + 0xFF, 0x3F, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, + 0xE7, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF8, + 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xE0, 0x00, + 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x01, 0xFE, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, + 0x0F, 0xF0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE, + 0x00, 0x00, 0x7F, 0xC0, 0x00, 0xFF, 0xFC, 0x00, 0x03, 0xFE, 0x00, 0x07, + 0xFF, 0xF8, 0x00, 0x0F, 0xF8, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x7F, 0xC0, + 0x01, 0xFF, 0xFF, 0xE0, 0x03, 0xFE, 0x00, 0x07, 0xF8, 0x7F, 0x80, 0x0F, + 0xF8, 0x00, 0x1F, 0xC0, 0xFE, 0x00, 0x7F, 0xC0, 0x00, 0xFF, 0x03, 0xFC, + 0x01, 0xFF, 0x00, 0x03, 0xF8, 0x07, 0xF0, 0x0F, 0xF8, 0x00, 0x0F, 0xE0, + 0x1F, 0xC0, 0x3F, 0xE0, 0x00, 0x3F, 0x80, 0x7F, 0x01, 0xFF, 0x00, 0x00, + 0xFE, 0x01, 0xFC, 0x0F, 0xF8, 0x00, 0x03, 0xF8, 0x07, 0xF0, 0x3F, 0xE0, + 0x00, 0x0F, 0xE0, 0x1F, 0xC1, 0xFF, 0x00, 0x00, 0x3F, 0xC0, 0xFF, 0x07, + 0xFC, 0x00, 0x00, 0x7F, 0x03, 0xF8, 0x3F, 0xE0, 0x00, 0x01, 0xFE, 0x1F, + 0xE0, 0xFF, 0x80, 0x00, 0x07, 0xFF, 0xFF, 0x87, 0xFC, 0x00, 0x00, 0x0F, + 0xFF, 0xFC, 0x3F, 0xF0, 0x00, 0x00, 0x1F, 0xFF, 0xE0, 0xFF, 0x80, 0x00, + 0x00, 0x3F, 0xFF, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x1F, 0xF0, + 0x1F, 0xE0, 0x00, 0x7F, 0x80, 0xFF, 0x81, 0xFF, 0xE0, 0x00, 0x00, 0x03, + 0xFE, 0x0F, 0xFF, 0xC0, 0x00, 0x00, 0x1F, 0xF0, 0x7F, 0xFF, 0x80, 0x00, + 0x00, 0xFF, 0xC3, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0xFE, 0x1F, 0xFF, 0xFE, + 0x00, 0x00, 0x1F, 0xF0, 0x7F, 0x87, 0xF8, 0x00, 0x00, 0x7F, 0xC1, 0xFC, + 0x0F, 0xE0, 0x00, 0x03, 0xFE, 0x0F, 0xF0, 0x3F, 0xC0, 0x00, 0x0F, 0xF8, + 0x3F, 0x80, 0x7F, 0x00, 0x00, 0x7F, 0xC0, 0xFE, 0x01, 0xFC, 0x00, 0x01, + 0xFF, 0x03, 0xF8, 0x07, 0xF0, 0x00, 0x0F, 0xF8, 0x0F, 0xE0, 0x1F, 0xC0, + 0x00, 0x7F, 0xC0, 0x3F, 0x80, 0x7F, 0x00, 0x01, 0xFF, 0x00, 0xFE, 0x01, + 0xFC, 0x00, 0x0F, 0xF8, 0x03, 0xFC, 0x0F, 0xF0, 0x00, 0x3F, 0xE0, 0x07, + 0xF0, 0x3F, 0x80, 0x01, 0xFF, 0x00, 0x1F, 0xE1, 0xFE, 0x00, 0x07, 0xFC, + 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0xFF, 0xC0, 0x01, + 0xFF, 0x00, 0x01, 0xFF, 0xFE, 0x00, 0x07, 0xFC, 0x00, 0x03, 0xFF, 0xF0, + 0x00, 0x3F, 0xE0, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x07, + 0xF8, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, + 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x00, 0x1F, + 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0x00, 0x00, 0x0F, 0xFF, 0xFF, + 0x80, 0x00, 0x07, 0xFF, 0xFF, 0xE0, 0x00, 0x07, 0xFE, 0x3F, 0xF0, 0x00, + 0x03, 0xFE, 0x0F, 0xF8, 0x00, 0x01, 0xFF, 0x07, 0xFC, 0x00, 0x00, 0xFF, + 0x83, 0xFE, 0x00, 0x00, 0x7F, 0xC1, 0xFF, 0x00, 0x00, 0x3F, 0xE0, 0xFF, + 0x80, 0x00, 0x1F, 0xF8, 0xFF, 0x80, 0x00, 0x07, 0xFE, 0x7F, 0xC0, 0x00, + 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x7F, + 0xFF, 0xE0, 0x00, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xFF, 0xE0, + 0x00, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x00, + 0x1F, 0xFF, 0xFC, 0x1F, 0x00, 0x1F, 0xFF, 0xFF, 0x0F, 0xF8, 0x0F, 0xFF, + 0xFF, 0xC7, 0xFC, 0x0F, 0xFC, 0xFF, 0xF3, 0xFE, 0x0F, 0xFC, 0x3F, 0xFC, + 0xFE, 0x07, 0xFC, 0x1F, 0xFF, 0x7F, 0x03, 0xFE, 0x07, 0xFF, 0xFF, 0x83, + 0xFE, 0x01, 0xFF, 0xFF, 0xC1, 0xFF, 0x00, 0x7F, 0xFF, 0xC0, 0xFF, 0x80, + 0x1F, 0xFF, 0xE0, 0x7F, 0xC0, 0x07, 0xFF, 0xF0, 0x3F, 0xE0, 0x03, 0xFF, + 0xF0, 0x1F, 0xF8, 0x00, 0xFF, 0xF8, 0x0F, 0xFE, 0x00, 0x3F, 0xFE, 0x03, + 0xFF, 0x80, 0x7F, 0xFF, 0x81, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, + 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, + 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xF1, 0xFF, 0xE0, + 0x1F, 0xFF, 0xE0, 0x7F, 0xF8, 0x03, 0xFF, 0x80, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xF3, 0xF9, 0xFC, 0xFE, 0x7F, 0x3F, 0x9F, 0xC0, 0x00, 0x10, 0x00, 0x1C, + 0x00, 0x1F, 0x80, 0x1F, 0xE0, 0x0F, 0xF8, 0x0F, 0xF8, 0x0F, 0xFC, 0x07, + 0xFC, 0x07, 0xFC, 0x03, 0xFE, 0x03, 0xFE, 0x01, 0xFF, 0x01, 0xFF, 0x80, + 0xFF, 0x80, 0x7F, 0xC0, 0x7F, 0xE0, 0x3F, 0xE0, 0x1F, 0xF0, 0x1F, 0xF8, + 0x0F, 0xF8, 0x07, 0xFC, 0x03, 0xFE, 0x01, 0xFF, 0x01, 0xFF, 0x80, 0xFF, + 0x80, 0x7F, 0xC0, 0x3F, 0xE0, 0x1F, 0xF0, 0x0F, 0xF8, 0x07, 0xFC, 0x03, + 0xFE, 0x01, 0xFF, 0x00, 0xFF, 0x80, 0x7F, 0xC0, 0x3F, 0xE0, 0x1F, 0xF0, + 0x0F, 0xF8, 0x07, 0xFE, 0x01, 0xFF, 0x00, 0xFF, 0x80, 0x7F, 0xC0, 0x3F, + 0xE0, 0x1F, 0xF8, 0x07, 0xFC, 0x03, 0xFE, 0x01, 0xFF, 0x00, 0x7F, 0xC0, + 0x3F, 0xE0, 0x1F, 0xF8, 0x07, 0xFC, 0x03, 0xFE, 0x00, 0xFF, 0x80, 0x7F, + 0xC0, 0x1F, 0xF0, 0x0F, 0xFC, 0x03, 0xFE, 0x00, 0xFF, 0x80, 0x7F, 0x80, + 0x1F, 0x80, 0x07, 0x00, 0x01, 0x00, 0x04, 0x00, 0x07, 0x00, 0x0F, 0xC0, + 0x0F, 0xF0, 0x0F, 0xF8, 0x03, 0xFE, 0x01, 0xFF, 0x80, 0x7F, 0xC0, 0x3F, + 0xF0, 0x0F, 0xF8, 0x07, 0xFE, 0x01, 0xFF, 0x00, 0xFF, 0xC0, 0x3F, 0xE0, + 0x1F, 0xF0, 0x0F, 0xFC, 0x03, 0xFE, 0x01, 0xFF, 0x00, 0xFF, 0xC0, 0x3F, + 0xE0, 0x1F, 0xF0, 0x0F, 0xF8, 0x07, 0xFC, 0x03, 0xFF, 0x00, 0xFF, 0x80, + 0x7F, 0xC0, 0x3F, 0xE0, 0x1F, 0xF0, 0x0F, 0xF8, 0x07, 0xFC, 0x03, 0xFE, + 0x01, 0xFF, 0x00, 0xFF, 0x80, 0x7F, 0xC0, 0x3F, 0xE0, 0x1F, 0xF0, 0x0F, + 0xF8, 0x0F, 0xFC, 0x07, 0xFC, 0x03, 0xFE, 0x01, 0xFF, 0x00, 0xFF, 0x80, + 0xFF, 0xC0, 0x7F, 0xC0, 0x3F, 0xE0, 0x3F, 0xF0, 0x1F, 0xF0, 0x0F, 0xF8, + 0x0F, 0xFC, 0x07, 0xFC, 0x07, 0xFE, 0x03, 0xFE, 0x03, 0xFF, 0x01, 0xFF, + 0x01, 0xFF, 0x80, 0xFF, 0x80, 0xFF, 0x80, 0x3F, 0xC0, 0x0F, 0xC0, 0x01, + 0xC0, 0x00, 0x40, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x0F, 0xF8, 0x00, 0x01, + 0xFF, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x03, 0xF8, 0x00, 0x60, 0x7F, 0x03, + 0x0F, 0x0F, 0xE1, 0xE1, 0xF9, 0xF8, 0xFC, 0x7F, 0xDF, 0x7F, 0xCF, 0xFF, + 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, + 0x3F, 0xFF, 0xFE, 0x00, 0x1F, 0xF0, 0x00, 0x07, 0xFF, 0x00, 0x01, 0xFB, + 0xF0, 0x00, 0xFF, 0x7F, 0x80, 0x3F, 0xEF, 0xF8, 0x07, 0xFD, 0xFF, 0x01, + 0xFF, 0x1F, 0xF0, 0x0F, 0xE3, 0xF8, 0x00, 0xF8, 0x3E, 0x00, 0x07, 0x07, + 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, + 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0x00, + 0x00, 0x03, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, + 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x07, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0x80, 0x00, 0x01, + 0xFF, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, + 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x7F, + 0xC0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x03, 0xFE, + 0x00, 0x00, 0x1F, 0xF1, 0xFF, 0x1F, 0xF1, 0xFF, 0x1F, 0xF1, 0xFF, 0x1F, + 0xF1, 0xFF, 0x1F, 0xE3, 0xFE, 0x3F, 0xE3, 0xFE, 0x3F, 0xC3, 0xFC, 0x7F, + 0xC7, 0xF8, 0x7F, 0x8F, 0xF0, 0x7F, 0x00, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x0F, 0x03, 0xFC, 0x7F, 0xEF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFE, 0x3F, 0xC0, 0xF0, 0x00, + 0x00, 0x07, 0xFE, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, + 0x00, 0x7F, 0xE0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0x00, 0x00, + 0x07, 0xFE, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, + 0x7F, 0xE0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x07, + 0xFE, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x7F, + 0xE0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x07, 0xFC, + 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x7F, 0xC0, + 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x07, 0xFC, 0x00, + 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x7F, 0xC0, 0x00, + 0x01, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, + 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x01, + 0xFF, 0x80, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x1F, + 0xF8, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x01, 0xFF, + 0x80, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x1F, 0xF8, + 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0x80, + 0x00, 0x03, 0xFE, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x1F, 0xF8, 0x00, + 0x00, 0x3F, 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0x80, 0x00, + 0x03, 0xFE, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, + 0x3F, 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x03, + 0xFE, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, + 0x00, 0x7F, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0xC0, + 0x03, 0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xF0, + 0x1F, 0xFF, 0xFF, 0xF8, 0x1F, 0xFC, 0x3F, 0xF8, 0x3F, 0xF0, 0x0F, 0xFC, + 0x3F, 0xE0, 0x07, 0xFC, 0x3F, 0xE0, 0x07, 0xFC, 0x7F, 0xC0, 0x03, 0xFE, + 0x7F, 0xC0, 0x03, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, + 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, + 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, + 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, + 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, + 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0x7F, 0xC0, 0x03, 0xFE, + 0x7F, 0xC0, 0x03, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, + 0x3F, 0xE0, 0x07, 0xFC, 0x3F, 0xE0, 0x07, 0xFC, 0x3F, 0xF0, 0x0F, 0xFC, + 0x1F, 0xFC, 0x3F, 0xF8, 0x1F, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xF0, + 0x07, 0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0xC0, + 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x0F, 0xF0, 0x00, + 0x00, 0x03, 0xF8, 0x00, 0x3F, 0xC0, 0x03, 0xFE, 0x00, 0x3F, 0xF0, 0x07, + 0xFF, 0x80, 0xFF, 0xFC, 0x1F, 0xFF, 0xE3, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, + 0xFF, 0xFF, 0xDF, 0xFF, 0xFE, 0xFF, 0xFF, 0xF7, 0xFE, 0xFF, 0x9F, 0xC7, + 0xFC, 0xF8, 0x3F, 0xE3, 0x01, 0xFF, 0x00, 0x0F, 0xF8, 0x00, 0x7F, 0xC0, + 0x03, 0xFE, 0x00, 0x1F, 0xF0, 0x00, 0xFF, 0x80, 0x07, 0xFC, 0x00, 0x3F, + 0xE0, 0x01, 0xFF, 0x00, 0x0F, 0xF8, 0x00, 0x7F, 0xC0, 0x03, 0xFE, 0x00, + 0x1F, 0xF0, 0x00, 0xFF, 0x80, 0x07, 0xFC, 0x00, 0x3F, 0xE0, 0x01, 0xFF, + 0x00, 0x0F, 0xF8, 0x00, 0x7F, 0xC0, 0x03, 0xFE, 0x00, 0x1F, 0xF0, 0x00, + 0xFF, 0x80, 0x07, 0xFC, 0x00, 0x3F, 0xE0, 0x01, 0xFF, 0x00, 0x0F, 0xF8, + 0x00, 0x7F, 0xC0, 0x03, 0xFE, 0x00, 0x1F, 0xF0, 0x00, 0x3F, 0xF0, 0x00, + 0x03, 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0x03, + 0xFF, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xFE, 0x3F, + 0xFF, 0xFF, 0xFC, 0x3F, 0xF0, 0x3F, 0xFC, 0x3F, 0x00, 0x1F, 0xF8, 0x78, + 0x00, 0x3F, 0xF0, 0x60, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x00, + 0x00, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, + 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x03, + 0xFF, 0x80, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0xFF, + 0xF0, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x3F, 0xFC, + 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x1F, 0xFF, 0x00, + 0x00, 0x7F, 0xFC, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0x80, 0x00, + 0x0F, 0xFF, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x01, + 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xDF, + 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFE, 0xFF, + 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, + 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xC0, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0xFF, + 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, + 0xFF, 0x03, 0xFF, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, 0xF8, 0x1F, 0xC0, 0xFF, + 0xE0, 0x38, 0x00, 0xFF, 0xC0, 0x80, 0x03, 0xFF, 0x00, 0x00, 0x07, 0xFC, + 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x01, 0xFF, 0x00, + 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x03, 0xFF, 0x80, 0x0F, + 0xFF, 0xFC, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0x00, 0x03, 0xFF, + 0xF8, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, + 0xE0, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x07, 0xFE, + 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x7F, 0xC0, + 0x00, 0x01, 0xFF, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x1F, 0xF0, 0x00, + 0x00, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0x30, 0x00, 0x1F, 0xF9, 0xF8, 0x01, + 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, + 0xE3, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0xC0, + 0x1F, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF0, + 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x1F, 0xFE, + 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x1F, 0xFF, + 0xC0, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x0F, 0xFF, + 0xF8, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x07, 0xFD, + 0xFF, 0x00, 0x07, 0xFC, 0xFF, 0x80, 0x07, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, + 0x3F, 0xE0, 0x03, 0xFE, 0x1F, 0xF0, 0x03, 0xFE, 0x0F, 0xF8, 0x01, 0xFF, + 0x07, 0xFC, 0x01, 0xFF, 0x03, 0xFE, 0x00, 0xFF, 0x01, 0xFF, 0x00, 0xFF, + 0x00, 0xFF, 0x80, 0xFF, 0x80, 0x7F, 0xC0, 0x7F, 0x80, 0x3F, 0xE0, 0x7F, + 0xC0, 0x1F, 0xF0, 0x3F, 0xC0, 0x0F, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x03, 0xFE, + 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x7F, + 0xC0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x0F, + 0xF8, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x07, 0xFF, + 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, + 0xFC, 0x07, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, + 0x01, 0xFF, 0xFF, 0xFC, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, + 0xFF, 0x80, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, + 0xE0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x0F, 0xFF, + 0x80, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, + 0xE0, 0x1F, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xFF, + 0x07, 0xFF, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0xE0, + 0x00, 0x03, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x0F, 0xFC, 0x00, + 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x01, 0xFF, 0x00, 0x00, + 0x07, 0xFC, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0xFF, 0xC8, 0x00, 0x07, + 0xFE, 0x7E, 0x00, 0x7F, 0xF9, 0xFF, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0xFF, + 0x1F, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xFE, 0x0F, + 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFE, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00, + 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x01, 0xFF, 0xF8, 0x00, + 0x07, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, 0xF8, 0x00, + 0xFF, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xF8, 0x03, 0xFF, 0xFE, 0x00, 0x07, + 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x1F, + 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x3F, + 0xE0, 0x00, 0x00, 0x7F, 0xCF, 0xF8, 0x00, 0x7F, 0xFF, 0xFF, 0x00, 0x7F, + 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, + 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, + 0xC0, 0x1F, 0xFE, 0xFF, 0x80, 0x07, 0xFE, 0xFF, 0x80, 0x03, 0xFF, 0xFF, + 0x80, 0x03, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, + 0x80, 0x01, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0x7F, 0xC0, 0x01, 0xFF, 0x7F, + 0xC0, 0x03, 0xFF, 0x7F, 0xE0, 0x03, 0xFE, 0x3F, 0xF0, 0x07, 0xFE, 0x3F, + 0xF8, 0x1F, 0xFE, 0x3F, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xF8, 0x0F, + 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xE0, 0x01, + 0xFF, 0xFF, 0x80, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0xFF, + 0xC0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0xFF, 0xC0, + 0x00, 0x03, 0xFE, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x7F, 0xC0, 0x00, + 0x03, 0xFE, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x01, + 0xFF, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x01, 0xFF, + 0x80, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0xFF, 0x80, + 0x00, 0x03, 0xFE, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x7F, 0xC0, 0x00, + 0x01, 0xFF, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, + 0xFF, 0x80, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x7F, + 0xC0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x1F, 0xF0, + 0x00, 0x00, 0x7F, 0x80, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x0F, 0xF8, 0x00, + 0x00, 0x3F, 0xE0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x0F, 0xF8, 0x00, + 0x00, 0x7F, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0xE0, + 0x0F, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xFC, + 0x3F, 0xFF, 0xFF, 0xFC, 0x3F, 0xF8, 0x1F, 0xFC, 0x7F, 0xE0, 0x07, 0xFE, + 0x7F, 0xE0, 0x07, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, + 0x7F, 0xC0, 0x03, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, 0x7F, 0xE0, 0x07, 0xFC, + 0x3F, 0xF0, 0x07, 0xFC, 0x3F, 0xFC, 0x1F, 0xF8, 0x1F, 0xFF, 0x3F, 0xF8, + 0x1F, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0x80, + 0x03, 0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xF8, + 0x1F, 0xFF, 0xFF, 0xFC, 0x3F, 0xF0, 0x7F, 0xFC, 0x3F, 0xE0, 0x1F, 0xFE, + 0x7F, 0xC0, 0x07, 0xFE, 0x7F, 0xC0, 0x03, 0xFF, 0xFF, 0x80, 0x03, 0xFF, + 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, + 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xE0, 0x07, 0xFE, + 0x7F, 0xF8, 0x1F, 0xFE, 0x7F, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xFC, + 0x3F, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xF0, + 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x1F, 0xF8, 0x00, + 0x00, 0x1F, 0xE0, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFC, 0x00, + 0x3F, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xFC, 0x0F, + 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xFC, 0x7F, 0xF8, 0x3F, 0xF8, 0xFF, + 0xC0, 0x3F, 0xF1, 0xFF, 0x00, 0x3F, 0xF7, 0xFE, 0x00, 0x3F, 0xEF, 0xF8, + 0x00, 0x7F, 0xDF, 0xF0, 0x00, 0xFF, 0xBF, 0xE0, 0x00, 0xFF, 0xFF, 0xC0, + 0x01, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0xFF, 0x00, + 0x0F, 0xFF, 0xFF, 0x00, 0x1F, 0xF7, 0xFF, 0x80, 0x7F, 0xEF, 0xFF, 0xFF, + 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, + 0xFE, 0x1F, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, + 0xE0, 0x03, 0xFE, 0x7F, 0xC0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xFE, + 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0xFF, 0xE0, + 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x1F, 0xFF, 0x00, 0x03, 0xFF, 0xFC, 0x01, + 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0x00, 0x0F, + 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x7F, + 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x0F, 0x03, 0xFC, 0x7F, 0xEF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFE, 0x3F, 0xC0, + 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0F, 0x03, 0xFC, 0x7F, 0xEF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFE, 0x3F, 0xC0, 0xF0, 0x07, 0x80, + 0xFF, 0x0F, 0xFC, 0xFF, 0xF7, 0xFF, 0xBF, 0xFD, 0xFF, 0xEF, 0xFF, 0x7F, + 0xF9, 0xFF, 0x87, 0xF8, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0xFE, 0x1F, 0xF0, 0xFF, 0x87, 0xFC, 0x3F, 0xE1, 0xFF, 0x0F, 0xF8, 0x7F, + 0xC3, 0xFC, 0x3F, 0xE1, 0xFF, 0x0F, 0xF8, 0x7F, 0x83, 0xFC, 0x3F, 0xE1, + 0xFE, 0x0F, 0xF0, 0xFF, 0x03, 0xF8, 0x01, 0x80, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x0F, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, 0xE0, 0x00, + 0x3F, 0xFF, 0x00, 0x0F, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, + 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xC1, + 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0x80, 0x03, 0xFF, + 0xE0, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x07, 0xFF, 0xF8, + 0x00, 0x3F, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xF0, + 0x7F, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0x00, + 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFC, 0x00, 0x00, + 0xFF, 0xE0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, + 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, + 0x20, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0xFF, + 0xE0, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, + 0xC0, 0x1F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0xFF, + 0xC1, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0x80, + 0x03, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0x00, 0x00, + 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xC0, 0x0F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, + 0xF0, 0x7F, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, + 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, + 0x80, 0x00, 0xFF, 0xE0, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x1E, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x03, 0xFF, 0xFC, 0x07, + 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, + 0xE7, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFE, 0x3F, 0x01, 0xFF, 0xCE, 0x00, + 0x3F, 0xF0, 0x00, 0x07, 0xFC, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x7F, 0xC0, + 0x00, 0x1F, 0xF0, 0x00, 0x0F, 0xF8, 0x00, 0x07, 0xFE, 0x00, 0x03, 0xFF, + 0x00, 0x01, 0xFF, 0xC0, 0x00, 0xFF, 0xE0, 0x00, 0x7F, 0xF0, 0x00, 0x3F, + 0xF8, 0x00, 0x1F, 0xFC, 0x00, 0x07, 0xFE, 0x00, 0x03, 0xFF, 0x00, 0x00, + 0xFF, 0x80, 0x00, 0x7F, 0xC0, 0x00, 0x1F, 0xF0, 0x00, 0x07, 0xF8, 0x00, + 0x01, 0xFE, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x07, + 0xF8, 0x00, 0x03, 0xFF, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x7F, 0xF8, 0x00, + 0x1F, 0xFE, 0x00, 0x07, 0xFF, 0x80, 0x01, 0xFF, 0xE0, 0x00, 0x7F, 0xF8, + 0x00, 0x0F, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xF8, 0x00, + 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x07, 0xFF, + 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x1F, 0xFF, 0x80, 0x1F, 0xFF, 0xC0, 0x00, + 0x7F, 0xF8, 0x00, 0x03, 0xFF, 0xC0, 0x01, 0xFF, 0x80, 0x00, 0x01, 0xFF, + 0xC0, 0x07, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x1F, 0xF0, 0x00, 0x00, + 0x00, 0xFF, 0x80, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0xFF, 0x80, 0xFF, 0x00, + 0x0F, 0xFC, 0x00, 0xFF, 0x03, 0xFC, 0x00, 0xFF, 0xFF, 0x80, 0xFF, 0x07, + 0xF8, 0x03, 0xFF, 0xFF, 0xC0, 0xFE, 0x1F, 0xE0, 0x1F, 0xFF, 0xFF, 0x81, + 0xFE, 0x3F, 0xC0, 0x7F, 0xFF, 0xFF, 0x01, 0xFC, 0x7F, 0x01, 0xFF, 0xFF, + 0xFE, 0x03, 0xF9, 0xFE, 0x07, 0xFF, 0xFF, 0xFC, 0x07, 0xF3, 0xF8, 0x0F, + 0xFE, 0x07, 0xF8, 0x07, 0xF7, 0xF0, 0x3F, 0xF8, 0x0F, 0xF0, 0x0F, 0xEF, + 0xE0, 0x7F, 0xE0, 0x1F, 0xE0, 0x1F, 0xFF, 0x80, 0xFF, 0x80, 0x3F, 0xC0, + 0x3F, 0xFF, 0x03, 0xFF, 0x00, 0x7F, 0x80, 0x7F, 0xFE, 0x07, 0xFC, 0x00, + 0xFF, 0x00, 0xFF, 0xFC, 0x0F, 0xF8, 0x01, 0xFE, 0x01, 0xFF, 0xF8, 0x1F, + 0xF0, 0x03, 0xFC, 0x03, 0xFF, 0xF0, 0x3F, 0xE0, 0x07, 0xF8, 0x07, 0xFF, + 0xE0, 0x7F, 0xC0, 0x0F, 0xF0, 0x0F, 0xFF, 0xC0, 0xFF, 0x80, 0x1F, 0xE0, + 0x1F, 0xFF, 0x81, 0xFF, 0x00, 0x3F, 0xC0, 0x7F, 0x7F, 0x03, 0xFF, 0x00, + 0x7F, 0x80, 0xFE, 0xFE, 0x03, 0xFE, 0x00, 0xFF, 0x01, 0xFD, 0xFE, 0x07, + 0xFC, 0x01, 0xFE, 0x07, 0xF9, 0xFC, 0x0F, 0xFC, 0x03, 0xFC, 0x0F, 0xE3, + 0xF8, 0x0F, 0xFE, 0x07, 0xF8, 0x3F, 0xC7, 0xF0, 0x1F, 0xFF, 0xFF, 0xFF, + 0xFF, 0x0F, 0xF0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0xE0, 0x3F, 0xFF, + 0xFF, 0xFF, 0xF8, 0x1F, 0xE0, 0x3F, 0xFF, 0xFF, 0xFF, 0xE0, 0x3F, 0xC0, + 0x1F, 0xFF, 0xFF, 0xFF, 0x80, 0x3F, 0xC0, 0x1F, 0xFF, 0xBF, 0xFC, 0x00, + 0x7F, 0xC0, 0x07, 0xF8, 0x1F, 0xE0, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFE, 0x00, 0x1E, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFC, + 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0xFF, + 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, + 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x00, + 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x1F, + 0xFF, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x3F, 0xFF, + 0x80, 0x00, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xC0, + 0x00, 0x00, 0x07, 0xFB, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0xBF, 0xE0, 0x00, + 0x00, 0x0F, 0xFB, 0xFE, 0x00, 0x00, 0x01, 0xFF, 0x1F, 0xF0, 0x00, 0x00, + 0x1F, 0xF1, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0x0F, 0xF8, 0x00, 0x00, 0x3F, + 0xE0, 0xFF, 0x80, 0x00, 0x03, 0xFE, 0x0F, 0xF8, 0x00, 0x00, 0x7F, 0xC0, + 0x7F, 0xC0, 0x00, 0x07, 0xFC, 0x07, 0xFC, 0x00, 0x00, 0x7F, 0xC0, 0x3F, + 0xE0, 0x00, 0x0F, 0xF8, 0x03, 0xFE, 0x00, 0x00, 0xFF, 0x80, 0x3F, 0xF0, + 0x00, 0x1F, 0xF8, 0x01, 0xFF, 0x00, 0x01, 0xFF, 0x00, 0x1F, 0xF0, 0x00, + 0x1F, 0xF0, 0x01, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x3F, + 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, + 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, + 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xF0, 0x1F, 0xF8, 0x00, 0x01, 0xFF, 0x01, 0xFF, 0x80, 0x00, 0x1F, 0xF8, + 0x1F, 0xF0, 0x00, 0x00, 0xFF, 0x83, 0xFF, 0x00, 0x00, 0x0F, 0xFC, 0x3F, + 0xE0, 0x00, 0x00, 0xFF, 0xC3, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x7F, 0xE0, + 0x00, 0x00, 0x7F, 0xE7, 0xFC, 0x00, 0x00, 0x07, 0xFE, 0x7F, 0xC0, 0x00, + 0x00, 0x3F, 0xEF, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0x07, 0xFF, 0xF0, 0x00, + 0x3F, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xFF, + 0xC0, 0xFF, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, + 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xC0, 0x1F, 0xFF, 0x3F, 0xF0, + 0x01, 0xFF, 0xCF, 0xFC, 0x00, 0x3F, 0xF3, 0xFF, 0x00, 0x0F, 0xFC, 0xFF, + 0xC0, 0x03, 0xFF, 0x3F, 0xF0, 0x00, 0xFF, 0xCF, 0xFC, 0x00, 0x3F, 0xF3, + 0xFF, 0x00, 0x1F, 0xF8, 0xFF, 0xC0, 0x1F, 0xFE, 0x3F, 0xFF, 0xFF, 0xFF, + 0x0F, 0xFF, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, + 0xF0, 0x3F, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, + 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xF0, 0x03, 0xFF, 0xEF, 0xFC, + 0x00, 0x3F, 0xFB, 0xFF, 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, + 0xF0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x03, 0xFF, + 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x1F, + 0xFF, 0xFF, 0x00, 0x0F, 0xFE, 0xFF, 0xC0, 0x1F, 0xFF, 0xBF, 0xFF, 0xFF, + 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, + 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, + 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF0, + 0x00, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x07, 0xFF, 0xFF, 0xF0, 0x00, 0x7F, + 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, + 0x0F, 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xE0, + 0x1F, 0xC0, 0x7F, 0xF8, 0x00, 0x0E, 0x07, 0xFF, 0x80, 0x00, 0x00, 0x7F, + 0xF8, 0x00, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, + 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xE0, + 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x01, + 0xFF, 0x80, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, + 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0xFF, + 0xC0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, + 0x01, 0xFF, 0x80, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0xF0, + 0x00, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, + 0x7F, 0xF0, 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x0F, 0xFF, 0x00, + 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x0E, 0x07, + 0xFF, 0xF0, 0x07, 0xF0, 0x3F, 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, + 0xFE, 0x03, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0xC0, 0x1F, + 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0xF8, + 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xFF, + 0xFC, 0x00, 0x0F, 0xFF, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xFF, 0xFE, 0x00, + 0xFF, 0xFF, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, + 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xC0, 0x1F, 0xFF, 0xC3, + 0xFF, 0x00, 0x0F, 0xFF, 0x8F, 0xFC, 0x00, 0x1F, 0xFE, 0x3F, 0xF0, 0x00, + 0x3F, 0xFC, 0xFF, 0xC0, 0x00, 0x7F, 0xF3, 0xFF, 0x00, 0x00, 0xFF, 0xEF, + 0xFC, 0x00, 0x03, 0xFF, 0xBF, 0xF0, 0x00, 0x07, 0xFE, 0xFF, 0xC0, 0x00, + 0x1F, 0xFB, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x00, 0xFF, 0xFF, + 0xF0, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x00, + 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xFF, + 0xC0, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, + 0xFF, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x00, 0x1F, 0xFB, 0xFF, + 0x00, 0x00, 0x7F, 0xEF, 0xFC, 0x00, 0x03, 0xFF, 0xBF, 0xF0, 0x00, 0x0F, + 0xFE, 0xFF, 0xC0, 0x00, 0x7F, 0xF3, 0xFF, 0x00, 0x03, 0xFF, 0xCF, 0xFC, + 0x00, 0x1F, 0xFE, 0x3F, 0xF0, 0x01, 0xFF, 0xF8, 0xFF, 0xC0, 0x3F, 0xFF, + 0xC3, 0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, + 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xFF, 0xC0, + 0x0F, 0xFF, 0xFF, 0xFC, 0x00, 0x3F, 0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, + 0xE0, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, + 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, + 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFE, 0xFF, 0xC0, + 0x00, 0x01, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x07, 0xFE, 0x00, + 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, + 0x00, 0x7F, 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xFF, 0xFF, + 0xC3, 0xFF, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFE, + 0x1F, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, 0xF0, + 0xFF, 0xFF, 0xFF, 0xE1, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x07, + 0xFE, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, + 0xF0, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x01, 0xFF, + 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x0F, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xC0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x01, 0xFF, 0x80, + 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x03, 0xFF, 0x00, 0x00, + 0x1F, 0xF8, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x3F, + 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, + 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, + 0xE7, 0xFF, 0xFF, 0xFF, 0x3F, 0xF0, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x0F, + 0xFC, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x1F, 0xF8, + 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x3F, 0xF0, 0x00, + 0x01, 0xFF, 0x80, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x03, + 0xFF, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x07, 0xFE, + 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xE0, 0x00, 0x00, 0x7F, 0xFF, 0xE0, 0x00, 0x1F, 0xFF, 0xFF, 0x80, + 0x07, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xFF, + 0xFC, 0x03, 0xFF, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, + 0xC0, 0x1F, 0x81, 0xFF, 0xF0, 0x00, 0x38, 0x1F, 0xFC, 0x00, 0x00, 0x03, + 0xFF, 0x80, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, + 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, + 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x0F, + 0xFC, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, + 0x00, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xC0, + 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, + 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, 0xF7, 0xFE, 0x00, 0x03, + 0xFF, 0x7F, 0xE0, 0x00, 0x3F, 0xF7, 0xFF, 0x00, 0x03, 0xFF, 0x7F, 0xF0, + 0x00, 0x3F, 0xF3, 0xFF, 0x80, 0x03, 0xFF, 0x3F, 0xF8, 0x00, 0x3F, 0xF1, + 0xFF, 0xC0, 0x03, 0xFF, 0x1F, 0xFF, 0x00, 0x3F, 0xF0, 0xFF, 0xFC, 0x03, + 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, + 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xF0, + 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, + 0x80, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xC0, + 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, + 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x03, + 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xC0, + 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, + 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x03, + 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xC0, + 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, + 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x03, + 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xC0, + 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, + 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x03, + 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xC0, + 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x0F, 0xFC, 0x00, 0x01, 0xFF, + 0x80, 0x00, 0x3F, 0xF0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0xFF, 0xC0, 0x00, + 0x1F, 0xF8, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x0F, 0xFC, + 0x00, 0x01, 0xFF, 0x80, 0x00, 0x3F, 0xF0, 0x00, 0x07, 0xFE, 0x00, 0x00, + 0xFF, 0xC0, 0x00, 0x1F, 0xF8, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x7F, 0xE0, + 0x00, 0x0F, 0xFC, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x3F, 0xF0, 0x00, 0x07, + 0xFE, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x1F, 0xF8, 0x00, 0x03, 0xFF, 0x00, + 0x00, 0x7F, 0xE0, 0x00, 0x0F, 0xFC, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x3F, + 0xF0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x1F, 0xF8, 0x00, + 0x03, 0xFF, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x1F, 0xFC, 0x40, 0x03, 0xFF, + 0x0C, 0x00, 0xFF, 0xE3, 0xF0, 0x3F, 0xFC, 0x7F, 0xFF, 0xFF, 0x9F, 0xFF, + 0xFF, 0xE3, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xC1, + 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xF8, 0x00, 0x1F, 0xF8, 0x00, 0xFF, 0xC0, + 0x00, 0xFF, 0xF7, 0xFE, 0x00, 0x0F, 0xFF, 0x3F, 0xF0, 0x00, 0xFF, 0xF1, + 0xFF, 0x80, 0x0F, 0xFF, 0x0F, 0xFC, 0x00, 0xFF, 0xF0, 0x7F, 0xE0, 0x07, + 0xFF, 0x03, 0xFF, 0x00, 0x7F, 0xF0, 0x1F, 0xF8, 0x07, 0xFF, 0x00, 0xFF, + 0xC0, 0x7F, 0xF8, 0x07, 0xFE, 0x07, 0xFF, 0x80, 0x3F, 0xF0, 0x7F, 0xF8, + 0x01, 0xFF, 0x87, 0xFF, 0x80, 0x0F, 0xFC, 0x7F, 0xF8, 0x00, 0x7F, 0xE7, + 0xFF, 0x80, 0x03, 0xFF, 0x3F, 0xF8, 0x00, 0x1F, 0xFB, 0xFF, 0xC0, 0x00, + 0xFF, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFC, + 0x00, 0x01, 0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0x00, 0x7F, + 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x1F, 0xFF, 0xFF, 0x00, + 0x00, 0xFF, 0xFF, 0xFC, 0x00, 0x07, 0xFE, 0xFF, 0xF0, 0x00, 0x3F, 0xF3, + 0xFF, 0xC0, 0x01, 0xFF, 0x8F, 0xFF, 0x00, 0x0F, 0xFC, 0x3F, 0xFC, 0x00, + 0x7F, 0xE0, 0xFF, 0xF0, 0x03, 0xFF, 0x03, 0xFF, 0x80, 0x1F, 0xF8, 0x0F, + 0xFE, 0x00, 0xFF, 0xC0, 0x7F, 0xF8, 0x07, 0xFE, 0x01, 0xFF, 0xE0, 0x3F, + 0xF0, 0x07, 0xFF, 0x01, 0xFF, 0x80, 0x3F, 0xFC, 0x0F, 0xFC, 0x00, 0xFF, + 0xF0, 0x7F, 0xE0, 0x03, 0xFF, 0xC3, 0xFF, 0x00, 0x1F, 0xFE, 0x1F, 0xF8, + 0x00, 0x7F, 0xF8, 0xFF, 0xC0, 0x01, 0xFF, 0xE7, 0xFE, 0x00, 0x07, 0xFF, + 0x3F, 0xF0, 0x00, 0x1F, 0xFD, 0xFF, 0x80, 0x00, 0xFF, 0xF0, 0xFF, 0xC0, + 0x00, 0x07, 0xFE, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x01, 0xFF, 0x80, 0x00, + 0x0F, 0xFC, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x1F, + 0xF8, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x3F, 0xF0, + 0x00, 0x01, 0xFF, 0x80, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x7F, 0xE0, 0x00, + 0x03, 0xFF, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x07, + 0xFE, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x0F, 0xFC, + 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x1F, 0xF8, 0x00, + 0x00, 0xFF, 0xC0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x01, + 0xFF, 0x80, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x03, 0xFF, + 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x07, 0xFE, 0x00, + 0x00, 0x3F, 0xF0, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xF0, 0x1F, 0xFC, 0x00, 0x00, 0x0F, 0xFC, 0x0F, 0xFE, 0x00, 0x00, + 0x0F, 0xFE, 0x07, 0xFF, 0x80, 0x00, 0x07, 0xFF, 0x03, 0xFF, 0xC0, 0x00, + 0x07, 0xFF, 0x83, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xE1, 0xFF, 0xF8, 0x00, + 0x03, 0xFF, 0xF0, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xF8, 0x7F, 0xFF, 0x00, + 0x01, 0xFF, 0xFC, 0x3F, 0xFF, 0x80, 0x00, 0xFF, 0xFE, 0x1F, 0xFF, 0xE0, + 0x00, 0x7F, 0xFF, 0x0F, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0x87, 0xFF, 0xFC, + 0x00, 0x3F, 0xFF, 0xC3, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xE1, 0xFF, 0xFF, + 0x00, 0x1F, 0xFF, 0xF0, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0xF8, 0x7F, 0xDF, + 0xE0, 0x0F, 0xF7, 0xFC, 0x7F, 0xEF, 0xF8, 0x0F, 0xFB, 0xFF, 0x3F, 0xF3, + 0xFC, 0x07, 0xF9, 0xFF, 0x9F, 0xF9, 0xFE, 0x03, 0xFC, 0xFF, 0xCF, 0xFC, + 0xFF, 0x83, 0xFE, 0x7F, 0xE7, 0xFE, 0x3F, 0xC1, 0xFE, 0x3F, 0xF3, 0xFF, + 0x1F, 0xF1, 0xFF, 0x1F, 0xF9, 0xFF, 0x87, 0xF8, 0xFF, 0x0F, 0xFC, 0xFF, + 0xC3, 0xFC, 0x7F, 0x87, 0xFE, 0x7F, 0xE1, 0xFF, 0x7F, 0x83, 0xFF, 0x3F, + 0xF0, 0x7F, 0xBF, 0xC1, 0xFF, 0x9F, 0xF8, 0x3F, 0xFF, 0xE0, 0xFF, 0xCF, + 0xFC, 0x0F, 0xFF, 0xE0, 0x7F, 0xE7, 0xFE, 0x07, 0xFF, 0xF0, 0x3F, 0xF3, + 0xFF, 0x03, 0xFF, 0xF0, 0x1F, 0xF9, 0xFF, 0x00, 0xFF, 0xF8, 0x07, 0xFC, + 0xFF, 0x80, 0x7F, 0xF8, 0x03, 0xFE, 0x7F, 0xC0, 0x1F, 0xFC, 0x01, 0xFF, + 0x7F, 0xE0, 0x0F, 0xFE, 0x00, 0xFF, 0xFF, 0xF0, 0x07, 0xFE, 0x00, 0x7F, + 0xFF, 0xF8, 0x01, 0xFF, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0xFF, 0x00, 0x1F, + 0xFF, 0xFE, 0x00, 0x3F, 0x80, 0x0F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x07, + 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x01, + 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, + 0x7F, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0xFF, 0x80, 0x00, 0x0F, + 0xFF, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xF8, + 0x00, 0x03, 0xFF, 0xFF, 0xF0, 0x00, 0x0F, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, + 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xFF, + 0x00, 0x0F, 0xFF, 0xFF, 0xFC, 0x00, 0x3F, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, + 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xFF, + 0x80, 0x3F, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, + 0xFF, 0xDF, 0xF8, 0x0F, 0xFF, 0xFF, 0x3F, 0xF0, 0x3F, 0xFF, 0xFC, 0x7F, + 0xE0, 0xFF, 0xFF, 0xF0, 0xFF, 0xC3, 0xFF, 0xFF, 0xC3, 0xFF, 0x0F, 0xFF, + 0xFF, 0x07, 0xFE, 0x3F, 0xFF, 0xFC, 0x0F, 0xFC, 0xFF, 0xFF, 0xF0, 0x1F, + 0xF3, 0xFF, 0xFF, 0xC0, 0x7F, 0xEF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xFC, 0x01, 0xFF, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xFF, 0xC0, 0x0F, + 0xFF, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xFF, + 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0xFF, 0x00, 0x07, + 0xFF, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xFF, + 0xC0, 0x00, 0x7F, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFC, 0x00, 0x03, + 0xFF, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x00, 0x1F, 0xFF, 0xFF, + 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0x01, + 0xFF, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xE0, 0x00, + 0x00, 0x1F, 0xFF, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0xFF, + 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xE0, + 0x7F, 0xFF, 0x00, 0xFF, 0xF0, 0x00, 0xFF, 0xF0, 0x1F, 0xFE, 0x00, 0x07, + 0xFF, 0x83, 0xFF, 0xC0, 0x00, 0x3F, 0xFC, 0x3F, 0xF8, 0x00, 0x01, 0xFF, + 0xC3, 0xFF, 0x00, 0x00, 0x0F, 0xFC, 0x7F, 0xF0, 0x00, 0x00, 0xFF, 0xE7, + 0xFE, 0x00, 0x00, 0x07, 0xFE, 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xEF, 0xFE, + 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, + 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, + 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x03, + 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xFF, + 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFF, + 0xE0, 0x00, 0x00, 0x7F, 0xF7, 0xFE, 0x00, 0x00, 0x07, 0xFE, 0x7F, 0xE0, + 0x00, 0x00, 0x7F, 0xE7, 0xFF, 0x00, 0x00, 0x0F, 0xFE, 0x3F, 0xF0, 0x00, + 0x00, 0xFF, 0xC3, 0xFF, 0x80, 0x00, 0x1F, 0xFC, 0x3F, 0xFC, 0x00, 0x03, + 0xFF, 0xC1, 0xFF, 0xE0, 0x00, 0x7F, 0xF8, 0x1F, 0xFF, 0x00, 0x0F, 0xFF, + 0x80, 0xFF, 0xFC, 0x03, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, + 0x3F, 0xFF, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x0F, + 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0x00, 0x01, 0xFF, + 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x07, 0xFE, + 0x00, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x3F, 0xFF, + 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xFF, 0x87, 0xFF, + 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, + 0xC0, 0x3F, 0xFF, 0x7F, 0xE0, 0x03, 0xFF, 0xBF, 0xF0, 0x00, 0xFF, 0xFF, + 0xF8, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, + 0xFF, 0x00, 0x07, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, + 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, + 0xEF, 0xFC, 0x03, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, + 0xF9, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, + 0xF8, 0x3F, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, + 0x00, 0x07, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0x80, + 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x3F, 0xF0, + 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x07, 0xFE, + 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x00, 0xFF, + 0xC0, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x1F, + 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x3F, + 0xFF, 0xE0, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0xFF, + 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, + 0x80, 0x03, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xE0, + 0x0F, 0xFF, 0xE0, 0x7F, 0xFF, 0x00, 0xFF, 0xF0, 0x00, 0xFF, 0xF0, 0x1F, + 0xFE, 0x00, 0x07, 0xFF, 0x81, 0xFF, 0xC0, 0x00, 0x3F, 0xFC, 0x3F, 0xF8, + 0x00, 0x01, 0xFF, 0xC3, 0xFF, 0x00, 0x00, 0x0F, 0xFC, 0x7F, 0xF0, 0x00, + 0x00, 0xFF, 0xE7, 0xFE, 0x00, 0x00, 0x07, 0xFE, 0x7F, 0xE0, 0x00, 0x00, + 0x7F, 0xEF, 0xFE, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, + 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, + 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFC, + 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, + 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, + 0x03, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x7F, 0xF7, 0xFE, 0x00, 0x00, 0x07, + 0xFE, 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xE7, 0xFF, 0x00, 0x00, 0x0F, 0xFE, + 0x7F, 0xF0, 0x00, 0x00, 0xFF, 0xE3, 0xFF, 0x80, 0x00, 0x1F, 0xFC, 0x3F, + 0xFC, 0x00, 0x03, 0xFF, 0xC1, 0xFF, 0xE0, 0x00, 0x7F, 0xF8, 0x1F, 0xFF, + 0x00, 0x0F, 0xFF, 0x80, 0xFF, 0xFC, 0x03, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, + 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xFF, + 0xF8, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xE0, + 0x00, 0x03, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x0F, 0xFF, 0xFE, 0x00, 0x00, + 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x00, + 0x01, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x00, 0x01, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x7F, + 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xFF, + 0xF0, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE0, + 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x0F, 0xFF, + 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, + 0xFE, 0x0F, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xC0, 0x3F, 0xFF, 0x0F, 0xFC, + 0x00, 0x7F, 0xF0, 0xFF, 0xC0, 0x03, 0xFF, 0x8F, 0xFC, 0x00, 0x1F, 0xF8, + 0xFF, 0xC0, 0x01, 0xFF, 0x8F, 0xFC, 0x00, 0x1F, 0xF8, 0xFF, 0xC0, 0x01, + 0xFF, 0x8F, 0xFC, 0x00, 0x1F, 0xF8, 0xFF, 0xC0, 0x01, 0xFF, 0x8F, 0xFC, + 0x00, 0x3F, 0xF8, 0xFF, 0xC0, 0x07, 0xFF, 0x0F, 0xFC, 0x03, 0xFF, 0xF0, + 0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, + 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, + 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFF, 0xF8, 0x00, + 0xFF, 0xC1, 0xFF, 0xC0, 0x0F, 0xFC, 0x0F, 0xFE, 0x00, 0xFF, 0xC0, 0x7F, + 0xF0, 0x0F, 0xFC, 0x03, 0xFF, 0x00, 0xFF, 0xC0, 0x3F, 0xF8, 0x0F, 0xFC, + 0x01, 0xFF, 0xC0, 0xFF, 0xC0, 0x0F, 0xFC, 0x0F, 0xFC, 0x00, 0xFF, 0xE0, + 0xFF, 0xC0, 0x07, 0xFF, 0x0F, 0xFC, 0x00, 0x3F, 0xF0, 0xFF, 0xC0, 0x03, + 0xFF, 0x8F, 0xFC, 0x00, 0x1F, 0xFC, 0xFF, 0xC0, 0x01, 0xFF, 0xCF, 0xFC, + 0x00, 0x0F, 0xFE, 0xFF, 0xC0, 0x00, 0x7F, 0xEF, 0xFC, 0x00, 0x07, 0xFF, + 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x7F, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0xF8, + 0x07, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xF8, + 0x1F, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0xF0, 0x3F, 0xFC, 0x03, 0xF0, + 0x7F, 0xF0, 0x00, 0x70, 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, + 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, + 0x7F, 0xF8, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x3F, 0xFF, 0x80, 0x00, + 0x3F, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0xFF, 0x00, + 0x0F, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xF8, + 0x00, 0xFF, 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFE, + 0x00, 0x00, 0xFF, 0xFE, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x0F, 0xFF, + 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x03, 0xFF, + 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x07, 0xFF, + 0x3C, 0x00, 0x07, 0xFF, 0x3F, 0x80, 0x1F, 0xFE, 0x3F, 0xFF, 0xFF, 0xFE, + 0x7F, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xF8, + 0xFF, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFF, 0x00, + 0x00, 0x7F, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, + 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x07, + 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, + 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, + 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x07, + 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, + 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, + 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x07, + 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, + 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, + 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x07, + 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, + 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, + 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0xFF, 0xC0, + 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFF, + 0xE0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0x80, 0x00, 0xFF, + 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, + 0x7F, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0xE0, + 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, + 0xF0, 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x7F, + 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, + 0x3F, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xF0, + 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, + 0xF8, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, + 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xF0, 0x00, + 0x1F, 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0xFF, 0xE0, 0x00, 0xFF, 0xCF, 0xFC, + 0x00, 0x1F, 0xF9, 0xFF, 0xC0, 0x07, 0xFF, 0x3F, 0xFC, 0x01, 0xFF, 0xE3, + 0xFF, 0xE0, 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, + 0xC0, 0x7F, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, + 0xFF, 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x00, + 0xFF, 0xC0, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xF7, 0xFC, 0x00, 0x00, + 0x03, 0xFE, 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xE7, 0xFE, 0x00, 0x00, 0x07, + 0xFE, 0x3F, 0xE0, 0x00, 0x00, 0x7F, 0xC3, 0xFF, 0x00, 0x00, 0x0F, 0xFC, + 0x1F, 0xF0, 0x00, 0x00, 0xFF, 0x81, 0xFF, 0x80, 0x00, 0x0F, 0xF8, 0x0F, + 0xF8, 0x00, 0x01, 0xFF, 0x80, 0xFF, 0x80, 0x00, 0x1F, 0xF0, 0x0F, 0xFC, + 0x00, 0x01, 0xFF, 0x00, 0x7F, 0xC0, 0x00, 0x3F, 0xE0, 0x07, 0xFE, 0x00, + 0x03, 0xFE, 0x00, 0x3F, 0xE0, 0x00, 0x7F, 0xE0, 0x03, 0xFE, 0x00, 0x07, + 0xFC, 0x00, 0x1F, 0xF0, 0x00, 0x7F, 0xC0, 0x01, 0xFF, 0x00, 0x0F, 0xFC, + 0x00, 0x1F, 0xF8, 0x00, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0x0F, 0xF8, 0x00, + 0x0F, 0xF8, 0x01, 0xFF, 0x00, 0x00, 0x7F, 0xC0, 0x1F, 0xF0, 0x00, 0x07, + 0xFC, 0x03, 0xFF, 0x00, 0x00, 0x7F, 0xE0, 0x3F, 0xE0, 0x00, 0x03, 0xFE, + 0x03, 0xFE, 0x00, 0x00, 0x3F, 0xE0, 0x7F, 0xE0, 0x00, 0x01, 0xFF, 0x07, + 0xFC, 0x00, 0x00, 0x1F, 0xF0, 0x7F, 0xC0, 0x00, 0x01, 0xFF, 0x8F, 0xF8, + 0x00, 0x00, 0x0F, 0xF8, 0xFF, 0x80, 0x00, 0x00, 0xFF, 0x8F, 0xF8, 0x00, + 0x00, 0x07, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0xDF, 0xF0, 0x00, 0x00, + 0x03, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x00, 0x01, + 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xC0, 0x00, 0x00, 0x01, 0xFF, + 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0xFF, 0xF8, + 0x00, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x7F, 0xF0, 0x00, + 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, + 0x00, 0x03, 0xFE, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, + 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF7, 0xFC, 0x00, 0x00, 0x00, + 0x00, 0x0F, 0xF9, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFE, 0x7F, 0xC0, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x9F, 0xF0, 0x00, 0x1F, 0xF0, 0x00, 0x3F, + 0xE3, 0xFE, 0x00, 0x07, 0xFC, 0x00, 0x1F, 0xF8, 0xFF, 0x80, 0x01, 0xFF, + 0x80, 0x07, 0xFC, 0x3F, 0xE0, 0x00, 0x7F, 0xE0, 0x01, 0xFF, 0x0F, 0xF8, + 0x00, 0x3F, 0xF8, 0x00, 0x7F, 0xC1, 0xFF, 0x00, 0x0F, 0xFE, 0x00, 0x1F, + 0xF0, 0x7F, 0xC0, 0x03, 0xFF, 0xC0, 0x0F, 0xF8, 0x1F, 0xF0, 0x01, 0xFF, + 0xF0, 0x03, 0xFE, 0x03, 0xFC, 0x00, 0x7F, 0xFC, 0x00, 0xFF, 0x80, 0xFF, + 0x80, 0x1F, 0xFF, 0x80, 0x3F, 0xE0, 0x3F, 0xE0, 0x07, 0xFF, 0xE0, 0x1F, + 0xF0, 0x0F, 0xF8, 0x03, 0xFF, 0xF8, 0x07, 0xFC, 0x01, 0xFF, 0x00, 0xFF, + 0xFE, 0x01, 0xFF, 0x00, 0x7F, 0xC0, 0x3F, 0xBF, 0xC0, 0x7F, 0xC0, 0x1F, + 0xF0, 0x1F, 0xEF, 0xF0, 0x1F, 0xE0, 0x03, 0xFC, 0x07, 0xFB, 0xFC, 0x0F, + 0xF8, 0x00, 0xFF, 0x81, 0xFC, 0xFF, 0x83, 0xFE, 0x00, 0x3F, 0xE0, 0xFF, + 0x1F, 0xE0, 0xFF, 0x00, 0x07, 0xF8, 0x3F, 0xC7, 0xF8, 0x3F, 0xC0, 0x01, + 0xFE, 0x0F, 0xF1, 0xFF, 0x1F, 0xF0, 0x00, 0x7F, 0xC7, 0xF8, 0x3F, 0xC7, + 0xFC, 0x00, 0x1F, 0xF1, 0xFE, 0x0F, 0xF1, 0xFE, 0x00, 0x03, 0xFC, 0x7F, + 0x83, 0xFC, 0xFF, 0x80, 0x00, 0xFF, 0xBF, 0xC0, 0xFF, 0xBF, 0xE0, 0x00, + 0x3F, 0xEF, 0xF0, 0x1F, 0xEF, 0xF0, 0x00, 0x07, 0xFB, 0xFC, 0x07, 0xFB, + 0xFC, 0x00, 0x01, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, + 0x80, 0x3F, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xE0, 0x0F, 0xFF, 0xE0, 0x00, + 0x03, 0xFF, 0xF8, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0xFF, + 0xFE, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x07, 0xFF, + 0xC0, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xE0, 0x01, 0xFF, 0xF0, 0x00, + 0x00, 0x3F, 0xF8, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x0F, + 0xFE, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x00, 0x7F, + 0xC0, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x1F, 0xF0, 0x00, + 0x7F, 0xF0, 0x00, 0x07, 0xFF, 0x1F, 0xF8, 0x00, 0x07, 0xFF, 0x07, 0xFE, + 0x00, 0x03, 0xFF, 0x03, 0xFF, 0x80, 0x03, 0xFF, 0x80, 0xFF, 0xC0, 0x03, + 0xFF, 0x80, 0x3F, 0xF0, 0x01, 0xFF, 0x80, 0x1F, 0xFC, 0x01, 0xFF, 0xC0, + 0x07, 0xFE, 0x01, 0xFF, 0xC0, 0x01, 0xFF, 0x80, 0xFF, 0xC0, 0x00, 0xFF, + 0xE0, 0xFF, 0xE0, 0x00, 0x3F, 0xF8, 0xFF, 0xE0, 0x00, 0x0F, 0xFC, 0x7F, + 0xE0, 0x00, 0x07, 0xFF, 0x7F, 0xF0, 0x00, 0x01, 0xFF, 0xFF, 0xF0, 0x00, + 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x00, 0x0F, + 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x01, 0xFF, 0xFC, + 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, + 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x07, + 0xFF, 0xC0, 0x00, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0x00, 0x07, 0xFF, 0xFC, + 0x00, 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x80, 0x00, + 0x03, 0xFF, 0xFF, 0xE0, 0x00, 0x01, 0xFF, 0xBF, 0xF0, 0x00, 0x01, 0xFF, + 0x8F, 0xFC, 0x00, 0x01, 0xFF, 0xC3, 0xFF, 0x00, 0x00, 0xFF, 0xC0, 0xFF, + 0x80, 0x00, 0xFF, 0xC0, 0x7F, 0xE0, 0x00, 0xFF, 0xE0, 0x1F, 0xF8, 0x00, + 0x7F, 0xE0, 0x07, 0xFC, 0x00, 0x7F, 0xE0, 0x03, 0xFF, 0x00, 0x7F, 0xF0, + 0x00, 0xFF, 0xC0, 0x3F, 0xF0, 0x00, 0x7F, 0xE0, 0x3F, 0xF8, 0x00, 0x1F, + 0xF8, 0x3F, 0xF8, 0x00, 0x07, 0xFE, 0x1F, 0xF8, 0x00, 0x03, 0xFF, 0x1F, + 0xFC, 0x00, 0x00, 0xFF, 0xDF, 0xFC, 0x00, 0x00, 0x7F, 0xF0, 0xFF, 0xE0, + 0x00, 0x01, 0xFF, 0xDF, 0xF8, 0x00, 0x00, 0x7F, 0xE7, 0xFF, 0x00, 0x00, + 0x3F, 0xF8, 0xFF, 0xC0, 0x00, 0x0F, 0xFC, 0x3F, 0xF8, 0x00, 0x07, 0xFF, + 0x07, 0xFE, 0x00, 0x01, 0xFF, 0x81, 0xFF, 0xC0, 0x00, 0xFF, 0xE0, 0x3F, + 0xF0, 0x00, 0x3F, 0xF0, 0x07, 0xFE, 0x00, 0x1F, 0xF8, 0x01, 0xFF, 0x80, + 0x0F, 0xFE, 0x00, 0x3F, 0xF0, 0x03, 0xFF, 0x00, 0x0F, 0xFE, 0x01, 0xFF, + 0xC0, 0x01, 0xFF, 0x80, 0x7F, 0xE0, 0x00, 0x7F, 0xF0, 0x3F, 0xF8, 0x00, + 0x0F, 0xFE, 0x1F, 0xFC, 0x00, 0x01, 0xFF, 0x87, 0xFE, 0x00, 0x00, 0x7F, + 0xF3, 0xFF, 0x80, 0x00, 0x0F, 0xFD, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0xFF, + 0xE0, 0x00, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x00, 0x0F, 0xFF, 0xFC, 0x00, + 0x00, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0x00, + 0x0F, 0xFF, 0xC0, 0x00, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x7F, + 0xF8, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, + 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x0F, 0xFC, + 0x00, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, + 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x00, + 0x03, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x3F, + 0xF0, 0x00, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x00, + 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, + 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, + 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, + 0x00, 0x07, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0xC0, + 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x1F, 0xF8, + 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x03, 0xFF, + 0x80, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x3F, + 0xF0, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x03, + 0xFF, 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, + 0x3F, 0xF0, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, + 0x03, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xE0, 0x00, + 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x07, 0xFE, 0x00, + 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x7F, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x80, 0x7F, 0xC0, 0x3F, 0xE0, 0x1F, 0xF0, 0x0F, 0xF8, 0x07, + 0xFC, 0x03, 0xFE, 0x01, 0xFF, 0x00, 0xFF, 0x80, 0x7F, 0xC0, 0x3F, 0xE0, + 0x1F, 0xF0, 0x0F, 0xF8, 0x07, 0xFC, 0x03, 0xFE, 0x01, 0xFF, 0x00, 0xFF, + 0x80, 0x7F, 0xC0, 0x3F, 0xE0, 0x1F, 0xF0, 0x0F, 0xF8, 0x07, 0xFC, 0x03, + 0xFE, 0x01, 0xFF, 0x00, 0xFF, 0x80, 0x7F, 0xC0, 0x3F, 0xE0, 0x1F, 0xF0, + 0x0F, 0xF8, 0x07, 0xFC, 0x03, 0xFE, 0x01, 0xFF, 0x00, 0xFF, 0x80, 0x7F, + 0xC0, 0x3F, 0xE0, 0x1F, 0xF0, 0x0F, 0xF8, 0x07, 0xFC, 0x03, 0xFE, 0x01, + 0xFF, 0x00, 0xFF, 0x80, 0x7F, 0xC0, 0x3F, 0xE0, 0x1F, 0xF0, 0x0F, 0xF8, + 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0x80, + 0x00, 0x01, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x03, 0xFE, 0x00, + 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, + 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, + 0x00, 0x7F, 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0x80, 0x00, + 0x01, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, + 0x07, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, + 0x1F, 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, + 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x01, + 0xFF, 0x80, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x07, + 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x1F, + 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x3F, + 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0xFF, + 0x80, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x03, 0xFE, + 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x0F, 0xF8, + 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, + 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0x80, + 0x00, 0x01, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x03, 0xFE, 0x00, + 0x00, 0x07, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, + 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, + 0x00, 0x7F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x80, 0x7F, + 0xC0, 0x3F, 0xE0, 0x1F, 0xF0, 0x0F, 0xF8, 0x07, 0xFC, 0x03, 0xFE, 0x01, + 0xFF, 0x00, 0xFF, 0x80, 0x7F, 0xC0, 0x3F, 0xE0, 0x1F, 0xF0, 0x0F, 0xF8, + 0x07, 0xFC, 0x03, 0xFE, 0x01, 0xFF, 0x00, 0xFF, 0x80, 0x7F, 0xC0, 0x3F, + 0xE0, 0x1F, 0xF0, 0x0F, 0xF8, 0x07, 0xFC, 0x03, 0xFE, 0x01, 0xFF, 0x00, + 0xFF, 0x80, 0x7F, 0xC0, 0x3F, 0xE0, 0x1F, 0xF0, 0x0F, 0xF8, 0x07, 0xFC, + 0x03, 0xFE, 0x01, 0xFF, 0x00, 0xFF, 0x80, 0x7F, 0xC0, 0x3F, 0xE0, 0x1F, + 0xF0, 0x0F, 0xF8, 0x07, 0xFC, 0x03, 0xFE, 0x01, 0xFF, 0x00, 0xFF, 0x80, + 0x7F, 0xC0, 0x3F, 0xE0, 0x1F, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x03, 0xFE, + 0x00, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x01, 0xFF, + 0xF0, 0x00, 0x01, 0xFF, 0xFC, 0x00, 0x00, 0xFF, 0xFE, 0x00, 0x00, 0xFF, + 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xDF, 0xF0, 0x00, 0x7F, + 0xEF, 0xFC, 0x00, 0x3F, 0xE3, 0xFE, 0x00, 0x3F, 0xF1, 0xFF, 0x80, 0x3F, + 0xF0, 0x7F, 0xE0, 0x1F, 0xF8, 0x3F, 0xF0, 0x1F, 0xF8, 0x0F, 0xFC, 0x0F, + 0xF8, 0x03, 0xFE, 0x0F, 0xFC, 0x01, 0xFF, 0x87, 0xFC, 0x00, 0x7F, 0xC7, + 0xFE, 0x00, 0x3F, 0xF7, 0xFE, 0x00, 0x0F, 0xFD, 0xFF, 0x00, 0x07, 0xFC, + 0x3F, 0x00, 0x01, 0xF8, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x80, 0x00, 0x20, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0x1C, + 0x00, 0x7C, 0x01, 0xFC, 0x0F, 0xFC, 0x0F, 0xFC, 0x0F, 0xFC, 0x0F, 0xFC, + 0x0F, 0xFC, 0x0F, 0xFC, 0x0F, 0xF0, 0x07, 0xC0, 0x07, 0x00, 0x04, 0x00, + 0x00, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0xFF, 0x01, 0xFF, + 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, + 0xE0, 0xFF, 0xFF, 0xFE, 0x0E, 0x00, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0x00, + 0x00, 0x3F, 0xF0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x01, + 0xFF, 0x00, 0x7F, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF1, + 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0x7F, 0xE0, + 0x1F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xF8, 0x01, 0xFF, + 0xFF, 0x80, 0x1F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xFF, + 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, + 0xF1, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0x00, + 0xFF, 0xFC, 0x00, 0x03, 0x80, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x03, 0xFE, + 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xF0, + 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0xFF, 0x80, + 0x00, 0x01, 0xFF, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, + 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, + 0x00, 0x7F, 0xC7, 0xF8, 0x00, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFF, + 0x03, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, + 0x1F, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xFE, 0x7F, 0xF0, 0x1F, 0xFC, + 0xFF, 0x80, 0x1F, 0xFD, 0xFF, 0x00, 0x1F, 0xFB, 0xFE, 0x00, 0x1F, 0xF7, + 0xFC, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, + 0xE0, 0x00, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, + 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0xF8, + 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0xFF, 0xBF, 0xE0, 0x03, 0xFF, 0x7F, 0xC0, + 0x07, 0xFE, 0xFF, 0x80, 0x1F, 0xFD, 0xFF, 0x00, 0xFF, 0xF3, 0xFF, 0xFF, + 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, + 0xF8, 0x3F, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xFC, + 0x00, 0x03, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x07, 0xFF, 0xF0, + 0x03, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xF8, 0x1F, 0xFF, + 0xFF, 0x07, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFC, 0x3F, 0xFC, 0x07, 0x07, + 0xFE, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x3F, 0xF0, 0x00, 0x07, 0xFC, 0x00, + 0x01, 0xFF, 0x80, 0x00, 0x3F, 0xE0, 0x00, 0x07, 0xFC, 0x00, 0x00, 0xFF, + 0x80, 0x00, 0x1F, 0xF0, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x7F, 0xC0, 0x00, + 0x0F, 0xF8, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x03, 0xFE, + 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0xFF, 0xF0, 0x07, + 0x1F, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0x81, 0xFF, + 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFC, + 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x07, 0xFC, + 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, + 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0x00, + 0x00, 0x03, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, + 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x00, + 0x00, 0xFF, 0x80, 0x0F, 0xF1, 0xFF, 0x00, 0xFF, 0xFF, 0xFE, 0x07, 0xFF, + 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, + 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFC, 0x07, + 0xFF, 0x7F, 0xF0, 0x03, 0xFE, 0xFF, 0xC0, 0x07, 0xFD, 0xFF, 0x00, 0x0F, + 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x7F, + 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x80, 0x03, 0xFF, + 0xFF, 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0x1F, 0xFF, + 0xFC, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x7F, 0xDF, 0xF8, 0x00, 0xFF, 0xBF, + 0xF0, 0x01, 0xFF, 0x7F, 0xF0, 0x03, 0xFE, 0x7F, 0xF8, 0x07, 0xFC, 0xFF, + 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, + 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, + 0xFF, 0xFC, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0xFF, + 0xFC, 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, + 0xFE, 0x01, 0xFF, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, + 0xFC, 0x3F, 0xF8, 0x3F, 0xF8, 0x7F, 0xE0, 0x1F, 0xF9, 0xFF, 0x80, 0x1F, + 0xF3, 0xFE, 0x00, 0x3F, 0xE7, 0xFC, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x7F, + 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x3F, + 0xE0, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x20, 0xFF, + 0xF0, 0x03, 0xC1, 0xFF, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, + 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFC, 0x01, 0xFF, + 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x3F, + 0xE0, 0x03, 0xFF, 0xF8, 0x1F, 0xFF, 0xF0, 0x7F, 0xFF, 0xE1, 0xFF, 0xFF, + 0xC7, 0xFF, 0xFF, 0x8F, 0xFF, 0xFE, 0x3F, 0xFF, 0xFC, 0x7F, 0xF0, 0x18, + 0xFF, 0xC0, 0x03, 0xFF, 0x00, 0x07, 0xFC, 0x00, 0x0F, 0xF8, 0x00, 0x1F, + 0xF0, 0x00, 0x3F, 0xE0, 0x00, 0x7F, 0xC0, 0x00, 0xFF, 0xFF, 0xF9, 0xFF, + 0xFF, 0xF3, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0x9F, 0xFF, + 0xFF, 0x3F, 0xFF, 0xFE, 0x7F, 0xFF, 0xFC, 0xFF, 0x80, 0x01, 0xFF, 0x00, + 0x03, 0xFE, 0x00, 0x07, 0xFC, 0x00, 0x0F, 0xF8, 0x00, 0x1F, 0xF0, 0x00, + 0x3F, 0xE0, 0x00, 0x7F, 0xC0, 0x00, 0xFF, 0x80, 0x01, 0xFF, 0x00, 0x03, + 0xFE, 0x00, 0x07, 0xFC, 0x00, 0x0F, 0xF8, 0x00, 0x1F, 0xF0, 0x00, 0x3F, + 0xE0, 0x00, 0x7F, 0xC0, 0x00, 0xFF, 0x80, 0x01, 0xFF, 0x00, 0x03, 0xFE, + 0x00, 0x07, 0xFC, 0x00, 0x0F, 0xF8, 0x00, 0x1F, 0xF0, 0x00, 0x3F, 0xE0, + 0x00, 0x7F, 0xC0, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x01, + 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, + 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, + 0xFF, 0x3F, 0xFC, 0x07, 0xFD, 0xFF, 0xC0, 0x1F, 0xF7, 0xFE, 0x00, 0x7F, + 0xDF, 0xF0, 0x01, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, + 0xF8, 0x00, 0x7F, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0x80, 0x07, 0xFF, 0xFE, + 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xC0, + 0x07, 0xFF, 0xFF, 0x00, 0x1F, 0xF7, 0xFE, 0x00, 0x7F, 0xDF, 0xFE, 0x07, + 0xFF, 0x7F, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, + 0xC7, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xF0, + 0x1F, 0xFF, 0xFF, 0xC0, 0x0F, 0xF9, 0xFF, 0x00, 0x00, 0x07, 0xFC, 0x00, + 0x00, 0x1F, 0xF0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x03, 0xFE, 0x10, 0x00, + 0x1F, 0xF8, 0x7C, 0x01, 0xFF, 0xE1, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, + 0xFC, 0x3F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xF8, + 0x0F, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0x80, 0x00, + 0x03, 0x80, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x01, 0xFF, + 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x03, 0xFE, 0x00, + 0x00, 0x1F, 0xF0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x07, 0xFC, 0x00, 0x00, + 0x3F, 0xE0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x7F, + 0xC0, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x1F, 0xF7, 0xFC, 0x00, 0xFF, 0xFF, + 0xFC, 0x07, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xFF, + 0x8F, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0xDF, + 0xF8, 0x0F, 0xFE, 0xFF, 0x80, 0x3F, 0xF7, 0xFC, 0x00, 0xFF, 0xFF, 0xE0, + 0x07, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xC0, 0x07, + 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, + 0xFC, 0x00, 0x7F, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF8, + 0x00, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xF0, 0x01, + 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xE0, 0x03, 0xFF, + 0xFF, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFE, + 0x00, 0x3F, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0x80, 0x0F, 0xF8, 0x1F, 0x07, + 0xF1, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xC7, 0xF0, + 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xCF, 0xF9, 0xFF, + 0x3F, 0xE7, 0xFC, 0xFF, 0x9F, 0xF3, 0xFE, 0x7F, 0xCF, 0xF9, 0xFF, 0x3F, + 0xE7, 0xFC, 0xFF, 0x9F, 0xF3, 0xFE, 0x7F, 0xCF, 0xF9, 0xFF, 0x3F, 0xE7, + 0xFC, 0xFF, 0x9F, 0xF3, 0xFE, 0x7F, 0xCF, 0xF9, 0xFF, 0x3F, 0xE7, 0xFC, + 0xFF, 0x9F, 0xF3, 0xFE, 0x7F, 0xC0, 0x00, 0x1F, 0x00, 0x07, 0xF0, 0x01, + 0xFF, 0x00, 0x7F, 0xF0, 0x0F, 0xFE, 0x01, 0xFF, 0xC0, 0x3F, 0xF8, 0x07, + 0xFF, 0x00, 0x7F, 0xC0, 0x07, 0xF0, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x0F, + 0xF8, 0x01, 0xFF, 0x00, 0x3F, 0xE0, 0x07, 0xFC, 0x00, 0xFF, 0x80, 0x1F, + 0xF0, 0x03, 0xFE, 0x00, 0x7F, 0xC0, 0x0F, 0xF8, 0x01, 0xFF, 0x00, 0x3F, + 0xE0, 0x07, 0xFC, 0x00, 0xFF, 0x80, 0x1F, 0xF0, 0x03, 0xFE, 0x00, 0x7F, + 0xC0, 0x0F, 0xF8, 0x01, 0xFF, 0x00, 0x3F, 0xE0, 0x07, 0xFC, 0x00, 0xFF, + 0x80, 0x1F, 0xF0, 0x03, 0xFE, 0x00, 0x7F, 0xC0, 0x0F, 0xF8, 0x01, 0xFF, + 0x00, 0x3F, 0xE0, 0x07, 0xFC, 0x00, 0xFF, 0x80, 0x1F, 0xF0, 0x03, 0xFE, + 0x00, 0x7F, 0xC0, 0x0F, 0xF8, 0x01, 0xFF, 0x00, 0x7F, 0xE4, 0x1F, 0xFC, + 0xFF, 0xFF, 0x1F, 0xFF, 0xE3, 0xFF, 0xFC, 0x7F, 0xFF, 0x1F, 0xFF, 0xC3, + 0xFF, 0xF0, 0x7F, 0xFC, 0x07, 0xFC, 0x00, 0x03, 0x80, 0x00, 0x01, 0xFF, + 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xF8, + 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, + 0x00, 0x00, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x03, 0xFE, 0x00, + 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, + 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0xFF, 0x80, 0x3F, + 0xFF, 0xFF, 0x00, 0xFF, 0xFB, 0xFE, 0x01, 0xFF, 0xE7, 0xFC, 0x07, 0xFF, + 0x8F, 0xF8, 0x1F, 0xFE, 0x1F, 0xF0, 0x7F, 0xF8, 0x3F, 0xE1, 0xFF, 0xE0, + 0x7F, 0xC7, 0xFF, 0x80, 0xFF, 0x9F, 0xFE, 0x01, 0xFF, 0x7F, 0xF8, 0x03, + 0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFE, 0x00, 0x1F, + 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xE0, 0x00, 0xFF, + 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0xE0, 0x07, 0xFD, + 0xFF, 0xE0, 0x0F, 0xF9, 0xFF, 0xE0, 0x1F, 0xF1, 0xFF, 0xC0, 0x3F, 0xE1, + 0xFF, 0xC0, 0x7F, 0xC1, 0xFF, 0xC0, 0xFF, 0x83, 0xFF, 0xC1, 0xFF, 0x03, + 0xFF, 0x83, 0xFE, 0x03, 0xFF, 0x87, 0xFC, 0x07, 0xFF, 0x8F, 0xF8, 0x07, + 0xFF, 0x1F, 0xF0, 0x07, 0xFF, 0x3F, 0xE0, 0x0F, 0xFF, 0x7F, 0xC0, 0x0F, + 0xFE, 0xFF, 0x80, 0x0F, 0xFE, 0x03, 0x83, 0xFE, 0x0F, 0xF8, 0x3F, 0xE0, + 0xFF, 0x83, 0xFE, 0x0F, 0xF8, 0x3F, 0xE0, 0xFF, 0x83, 0xFE, 0x0F, 0xF8, + 0x3F, 0xE0, 0xFF, 0x83, 0xFE, 0x0F, 0xF8, 0x3F, 0xE0, 0xFF, 0x83, 0xFE, + 0x0F, 0xF8, 0x3F, 0xE0, 0xFF, 0x83, 0xFE, 0x0F, 0xF8, 0x3F, 0xE0, 0xFF, + 0x83, 0xFE, 0x0F, 0xF8, 0x3F, 0xE0, 0xFF, 0x83, 0xFE, 0x0F, 0xF8, 0x3F, + 0xE0, 0xFF, 0x83, 0xFE, 0x0F, 0xF8, 0x3F, 0xE0, 0xFF, 0x83, 0xFE, 0x0F, + 0xF8, 0x3F, 0xE0, 0xFF, 0xC3, 0xFF, 0xCF, 0xFF, 0xDF, 0xFF, 0x7F, 0xFD, + 0xFF, 0xE3, 0xFF, 0x87, 0xFE, 0x07, 0xF8, 0x03, 0xE0, 0x01, 0xFF, 0xC0, + 0x0F, 0xF8, 0x01, 0xFF, 0xFF, 0x83, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0x3F, + 0xFF, 0xE1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0x81, 0xFF, 0xF0, 0x7F, 0xF7, + 0xFC, 0x03, 0xFE, 0x00, 0xFF, 0xFF, 0xE0, 0x1F, 0xF8, 0x07, 0xFF, 0xFF, + 0x00, 0xFF, 0xC0, 0x3F, 0xFF, 0xF8, 0x03, 0xFE, 0x00, 0xFF, 0xFF, 0xC0, + 0x1F, 0xF0, 0x07, 0xFF, 0xFE, 0x00, 0xFF, 0x80, 0x3F, 0xFF, 0xF0, 0x07, + 0xFC, 0x01, 0xFF, 0xFF, 0x80, 0x3F, 0xE0, 0x0F, 0xFF, 0xFC, 0x01, 0xFF, + 0x00, 0x7F, 0xFF, 0xE0, 0x0F, 0xF8, 0x03, 0xFF, 0xFF, 0x00, 0x7F, 0xC0, + 0x1F, 0xFF, 0xF8, 0x03, 0xFE, 0x00, 0xFF, 0xFF, 0xC0, 0x1F, 0xF0, 0x07, + 0xFF, 0xFE, 0x00, 0xFF, 0x80, 0x3F, 0xFF, 0xF0, 0x07, 0xFC, 0x01, 0xFF, + 0xFF, 0x80, 0x3F, 0xE0, 0x0F, 0xFF, 0xFC, 0x01, 0xFF, 0x00, 0x7F, 0xFF, + 0xE0, 0x0F, 0xF8, 0x03, 0xFF, 0xFF, 0x00, 0x7F, 0xC0, 0x1F, 0xFF, 0xF8, + 0x03, 0xFE, 0x00, 0xFF, 0xFF, 0xC0, 0x1F, 0xF0, 0x07, 0xFF, 0xFE, 0x00, + 0xFF, 0x80, 0x3F, 0xFF, 0xF0, 0x07, 0xFC, 0x01, 0xFF, 0xFF, 0x80, 0x3F, + 0xE0, 0x0F, 0xFF, 0xFC, 0x01, 0xFF, 0x00, 0x7F, 0xC0, 0x01, 0xFF, 0xE0, + 0x01, 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0xFF, 0x0F, + 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, + 0xFF, 0xFE, 0xFF, 0x80, 0x7F, 0xF7, 0xFC, 0x01, 0xFF, 0xBF, 0xE0, 0x07, + 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, + 0xFE, 0x00, 0x3F, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFC, + 0x00, 0x7F, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF8, 0x00, + 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xF0, 0x01, 0xFF, + 0xFF, 0x80, 0x0F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, + 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFE, 0x00, + 0x3F, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFC, 0x00, 0x7F, + 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x01, 0xFF, 0xFF, + 0x80, 0x03, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, + 0xF0, 0x1F, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xFC, 0x3F, 0xF8, 0x1F, + 0xFC, 0x3F, 0xF0, 0x0F, 0xFE, 0x7F, 0xE0, 0x07, 0xFE, 0x7F, 0xC0, 0x03, + 0xFE, 0x7F, 0xC0, 0x03, 0xFE, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, + 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, + 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, + 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0x7F, 0xC0, 0x03, 0xFE, 0x7F, 0xC0, 0x03, + 0xFE, 0x7F, 0xE0, 0x07, 0xFE, 0x3F, 0xF0, 0x0F, 0xFE, 0x3F, 0xFC, 0x1F, + 0xFC, 0x1F, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, + 0xF0, 0x07, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, + 0x80, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x01, 0xFF, 0xC0, + 0x00, 0xFF, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0xFC, 0x07, 0xFF, 0xFF, 0xFC, + 0x0F, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0xFC, + 0x7F, 0xFF, 0xFF, 0xFC, 0xFF, 0x80, 0x7F, 0xF9, 0xFF, 0x00, 0x3F, 0xFB, + 0xFE, 0x00, 0x3F, 0xF7, 0xFC, 0x00, 0x7F, 0xEF, 0xF8, 0x00, 0x7F, 0xDF, + 0xF0, 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, + 0x80, 0x03, 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xFC, + 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xE0, + 0x01, 0xFF, 0xFF, 0xC0, 0x03, 0xFE, 0xFF, 0x80, 0x0F, 0xFD, 0xFF, 0x00, + 0x3F, 0xFB, 0xFF, 0x80, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, + 0xFF, 0x1F, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, + 0xE0, 0xFF, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xFC, 0x03, 0xFE, 0x3F, 0xC0, + 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, + 0x3F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x01, + 0xFF, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, + 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x80, + 0x00, 0x3F, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, + 0x07, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, + 0x1F, 0xFF, 0xFF, 0xFF, 0x3F, 0xFE, 0x01, 0xFF, 0x3F, 0xF8, 0x01, 0xFF, + 0x7F, 0xE0, 0x01, 0xFF, 0x7F, 0xE0, 0x01, 0xFF, 0x7F, 0xC0, 0x01, 0xFF, + 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, + 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, + 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, + 0xFF, 0xC0, 0x01, 0xFF, 0x7F, 0xC0, 0x01, 0xFF, 0x7F, 0xE0, 0x01, 0xFF, + 0x7F, 0xF0, 0x01, 0xFF, 0x3F, 0xFC, 0x07, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, + 0x1F, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, + 0x07, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x00, 0x1F, 0xF1, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x01, 0xFF, + 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x01, 0xFF, + 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x01, 0xFF, + 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x01, 0xFF, + 0x01, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x7F, 0xFF, 0xFB, 0xFF, 0xFF, 0xDF, 0xFF, 0xFE, 0xFF, 0x80, 0x77, + 0xFC, 0x00, 0x3F, 0xE0, 0x01, 0xFF, 0x00, 0x0F, 0xF8, 0x00, 0x7F, 0xC0, + 0x03, 0xFE, 0x00, 0x1F, 0xF0, 0x00, 0xFF, 0x80, 0x07, 0xFC, 0x00, 0x3F, + 0xE0, 0x01, 0xFF, 0x00, 0x0F, 0xF8, 0x00, 0x7F, 0xC0, 0x03, 0xFE, 0x00, + 0x1F, 0xF0, 0x00, 0xFF, 0x80, 0x07, 0xFC, 0x00, 0x3F, 0xE0, 0x01, 0xFF, + 0x00, 0x0F, 0xF8, 0x00, 0x7F, 0xC0, 0x03, 0xFE, 0x00, 0x1F, 0xF0, 0x00, + 0xFF, 0x80, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x7F, 0xFF, + 0xC0, 0x7F, 0xFF, 0xF0, 0x3F, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0x0F, 0xFF, + 0xFF, 0xC3, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xF8, 0x7F, 0xE0, 0x1E, 0x1F, + 0xF0, 0x00, 0x07, 0xFC, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x7F, 0xF0, 0x00, + 0x1F, 0xFF, 0x80, 0x03, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, + 0xFE, 0x07, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFE, 0x00, + 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xF0, 0x00, 0x1F, 0xFC, 0x00, 0x03, 0xFF, + 0x00, 0x00, 0x7F, 0xC8, 0x00, 0x1F, 0xF7, 0xE0, 0x0F, 0xFD, 0xFF, 0xFF, + 0xFF, 0x7F, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xF3, 0xFF, + 0xFF, 0xF8, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFC, 0x00, 0x7F, 0xF8, 0x00, + 0x03, 0x80, 0x07, 0xFC, 0x00, 0x3F, 0xE0, 0x01, 0xFF, 0x00, 0x0F, 0xF8, + 0x00, 0x7F, 0xC0, 0x03, 0xFE, 0x00, 0x1F, 0xF0, 0x00, 0xFF, 0x80, 0x07, + 0xFC, 0x00, 0x3F, 0xFF, 0xFD, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0x7F, 0xFF, + 0xFB, 0xFF, 0xFF, 0xDF, 0xFF, 0xFE, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xBF, + 0xE0, 0x01, 0xFF, 0x00, 0x0F, 0xF8, 0x00, 0x7F, 0xC0, 0x03, 0xFE, 0x00, + 0x1F, 0xF0, 0x00, 0xFF, 0x80, 0x07, 0xFC, 0x00, 0x3F, 0xE0, 0x01, 0xFF, + 0x00, 0x0F, 0xF8, 0x00, 0x7F, 0xC0, 0x03, 0xFE, 0x00, 0x1F, 0xF0, 0x00, + 0xFF, 0x80, 0x07, 0xFE, 0x00, 0x3F, 0xF0, 0x00, 0xFF, 0xC0, 0x67, 0xFF, + 0xFF, 0x3F, 0xFF, 0xF8, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0x1F, 0xFF, 0xF8, + 0x7F, 0xFF, 0xC0, 0xFF, 0xFE, 0x01, 0xFF, 0x80, 0xFF, 0x80, 0x0F, 0xFF, + 0xFC, 0x00, 0x7F, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF8, + 0x00, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xF0, 0x01, + 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xE0, 0x03, 0xFF, + 0xFF, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFE, + 0x00, 0x3F, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFC, 0x00, + 0x7F, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0xFF, + 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xF8, 0x01, 0xFF, 0x7F, + 0xE0, 0x0F, 0xFB, 0xFF, 0x80, 0x7F, 0xDF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, + 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, + 0xE0, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xE0, 0x00, + 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0xFF, 0xDF, 0xF0, 0x00, 0x7F, + 0xCF, 0xF8, 0x00, 0x7F, 0xE7, 0xFE, 0x00, 0x3F, 0xF1, 0xFF, 0x00, 0x1F, + 0xF0, 0xFF, 0x80, 0x0F, 0xF8, 0x7F, 0xE0, 0x0F, 0xFC, 0x1F, 0xF0, 0x07, + 0xFC, 0x0F, 0xF8, 0x03, 0xFE, 0x07, 0xFE, 0x03, 0xFF, 0x01, 0xFF, 0x01, + 0xFF, 0x00, 0xFF, 0x80, 0xFF, 0x80, 0x7F, 0xE0, 0xFF, 0xC0, 0x1F, 0xF0, + 0x7F, 0xC0, 0x0F, 0xF8, 0x3F, 0xE0, 0x07, 0xFE, 0x3F, 0xF0, 0x01, 0xFF, + 0x1F, 0xF0, 0x00, 0xFF, 0x8F, 0xF8, 0x00, 0x3F, 0xEF, 0xF8, 0x00, 0x1F, + 0xF7, 0xFC, 0x00, 0x0F, 0xFB, 0xFE, 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x01, + 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0x80, 0x00, + 0x1F, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0xE0, 0x00, + 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x1F, 0xF0, 0x00, + 0x00, 0x0F, 0xF8, 0x00, 0x00, 0xFF, 0x80, 0x07, 0xF0, 0x00, 0xFF, 0xFF, + 0xC0, 0x03, 0xF8, 0x00, 0x7F, 0xDF, 0xF0, 0x01, 0xFE, 0x00, 0x7F, 0xCF, + 0xF8, 0x01, 0xFF, 0x00, 0x3F, 0xE7, 0xFC, 0x00, 0xFF, 0x80, 0x1F, 0xF1, + 0xFF, 0x00, 0x7F, 0xC0, 0x1F, 0xF0, 0xFF, 0x80, 0x3F, 0xF0, 0x0F, 0xF8, + 0x7F, 0xC0, 0x3F, 0xF8, 0x07, 0xFC, 0x1F, 0xE0, 0x1F, 0xFC, 0x03, 0xFC, + 0x0F, 0xF8, 0x0F, 0xFE, 0x03, 0xFE, 0x07, 0xFC, 0x07, 0xFF, 0x81, 0xFF, + 0x01, 0xFE, 0x07, 0xFF, 0xC0, 0xFF, 0x00, 0xFF, 0x83, 0xFF, 0xE0, 0xFF, + 0x80, 0x7F, 0xC1, 0xFF, 0xF0, 0x7F, 0xC0, 0x1F, 0xE0, 0xFD, 0xFC, 0x3F, + 0xC0, 0x0F, 0xF0, 0xFE, 0xFE, 0x1F, 0xE0, 0x07, 0xFC, 0x7F, 0x7F, 0x1F, + 0xF0, 0x01, 0xFE, 0x3F, 0xBF, 0x8F, 0xF0, 0x00, 0xFF, 0x3F, 0x8F, 0xE7, + 0xF8, 0x00, 0x7F, 0xDF, 0xC7, 0xF7, 0xFC, 0x00, 0x1F, 0xEF, 0xE3, 0xFB, + 0xFC, 0x00, 0x0F, 0xF7, 0xE0, 0xFD, 0xFE, 0x00, 0x07, 0xFF, 0xF0, 0x7F, + 0xFF, 0x00, 0x01, 0xFF, 0xF8, 0x3F, 0xFF, 0x00, 0x00, 0xFF, 0xF8, 0x1F, + 0xFF, 0x80, 0x00, 0x7F, 0xFC, 0x07, 0xFF, 0xC0, 0x00, 0x1F, 0xFE, 0x03, + 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0x01, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x00, + 0x7F, 0xE0, 0x00, 0x01, 0xFF, 0x80, 0x3F, 0xF0, 0x00, 0x00, 0xFF, 0xC0, + 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xC0, 0x07, 0xF8, 0x00, 0x00, 0x1F, 0xE0, + 0x03, 0xFC, 0x00, 0x00, 0xFF, 0xE0, 0x03, 0xFF, 0xBF, 0xF8, 0x03, 0xFF, + 0x8F, 0xFC, 0x03, 0xFF, 0x87, 0xFF, 0x01, 0xFF, 0xC1, 0xFF, 0xC1, 0xFF, + 0xC0, 0x7F, 0xF1, 0xFF, 0xC0, 0x3F, 0xF8, 0xFF, 0xE0, 0x0F, 0xFE, 0xFF, + 0xE0, 0x03, 0xFF, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, + 0xF0, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x03, 0xFF, + 0xF8, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x1F, + 0xFC, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x0F, + 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x07, 0xFF, 0xFC, 0x00, 0x07, + 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xE0, 0x03, + 0xFF, 0xBF, 0xF8, 0x03, 0xFF, 0x8F, 0xFE, 0x01, 0xFF, 0xC3, 0xFF, 0x01, + 0xFF, 0xC1, 0xFF, 0xC1, 0xFF, 0xC0, 0x7F, 0xF0, 0xFF, 0xE0, 0x1F, 0xF8, + 0xFF, 0xE0, 0x0F, 0xFE, 0xFF, 0xE0, 0x03, 0xFF, 0x80, 0xFF, 0xC0, 0x00, + 0xFF, 0xFF, 0xF0, 0x00, 0x3F, 0xF7, 0xFC, 0x00, 0x0F, 0xF9, 0xFF, 0x80, + 0x07, 0xFE, 0x7F, 0xE0, 0x01, 0xFF, 0x8F, 0xF8, 0x00, 0x7F, 0xC3, 0xFF, + 0x00, 0x1F, 0xF0, 0x7F, 0xC0, 0x0F, 0xFC, 0x1F, 0xF0, 0x03, 0xFE, 0x07, + 0xFE, 0x00, 0xFF, 0x80, 0xFF, 0x80, 0x7F, 0xE0, 0x3F, 0xE0, 0x1F, 0xF0, + 0x0F, 0xFC, 0x07, 0xFC, 0x01, 0xFF, 0x03, 0xFF, 0x00, 0x7F, 0xC0, 0xFF, + 0x80, 0x0F, 0xF8, 0x3F, 0xE0, 0x03, 0xFE, 0x1F, 0xF8, 0x00, 0x7F, 0xC7, + 0xFC, 0x00, 0x1F, 0xF1, 0xFF, 0x00, 0x07, 0xFC, 0xFF, 0x80, 0x00, 0xFF, + 0xBF, 0xE0, 0x00, 0x3F, 0xEF, 0xF8, 0x00, 0x07, 0xFF, 0xFC, 0x00, 0x01, + 0xFF, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0xE0, 0x00, + 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x0F, 0xFF, 0x00, + 0x00, 0x03, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x1F, 0xF8, + 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00, 0xFF, + 0x80, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x20, 0x3F, 0xF0, 0x00, 0x1F, 0xFF, + 0xFC, 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x01, 0xFF, 0xFF, 0x00, 0x00, 0x7F, + 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x03, + 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, + 0xF7, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0x7F, + 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, + 0xFE, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x3F, 0xF8, 0x00, 0x07, 0xFF, 0x00, + 0x00, 0xFF, 0xE0, 0x00, 0x1F, 0xFE, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x3F, + 0xF8, 0x00, 0x07, 0xFF, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x1F, 0xFC, 0x00, + 0x03, 0xFF, 0x80, 0x00, 0x7F, 0xF0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0xFF, + 0xE0, 0x00, 0x1F, 0xFC, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x3F, 0xF8, 0x00, + 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x07, 0xF0, 0x03, 0xFF, 0x00, 0x7F, + 0xF0, 0x1F, 0xFF, 0x01, 0xFF, 0xF0, 0x3F, 0xFF, 0x03, 0xFF, 0xF0, 0x7F, + 0xFF, 0x07, 0xFF, 0x00, 0x7F, 0xE0, 0x07, 0xFC, 0x00, 0x7F, 0xC0, 0x07, + 0xFC, 0x00, 0x7F, 0xC0, 0x07, 0xFC, 0x00, 0x7F, 0xC0, 0x07, 0xFC, 0x00, + 0x7F, 0xC0, 0x07, 0xFC, 0x00, 0x7F, 0xC0, 0x07, 0xFC, 0x00, 0x7F, 0xC0, + 0x07, 0xFC, 0x00, 0x7F, 0xC0, 0x0F, 0xFC, 0x00, 0xFF, 0x80, 0x3F, 0xF8, + 0x0F, 0xFF, 0x80, 0xFF, 0xF0, 0x0F, 0xFE, 0x00, 0xFF, 0xC0, 0x0F, 0xFE, + 0x00, 0xFF, 0xF0, 0x0F, 0xFF, 0x80, 0xFF, 0xF8, 0x03, 0xFF, 0x80, 0x0F, + 0xFC, 0x00, 0xFF, 0xC0, 0x07, 0xFC, 0x00, 0x7F, 0xC0, 0x07, 0xFC, 0x00, + 0x7F, 0xC0, 0x07, 0xFC, 0x00, 0x7F, 0xC0, 0x07, 0xFC, 0x00, 0x7F, 0xC0, + 0x07, 0xFC, 0x00, 0x7F, 0xC0, 0x07, 0xFC, 0x00, 0x7F, 0xC0, 0x07, 0xFC, + 0x00, 0x7F, 0xE0, 0x07, 0xFF, 0x00, 0x7F, 0xFF, 0x03, 0xFF, 0xF0, 0x3F, + 0xFF, 0x01, 0xFF, 0xF0, 0x1F, 0xFF, 0x00, 0xFF, 0xF0, 0x03, 0xFF, 0x00, + 0x07, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFE, + 0x00, 0x0F, 0xFC, 0x00, 0xFF, 0xE0, 0x0F, 0xFF, 0x80, 0xFF, 0xF8, 0x0F, + 0xFF, 0xC0, 0xFF, 0xFC, 0x0F, 0xFF, 0xE0, 0x0F, 0xFE, 0x00, 0x7F, 0xE0, + 0x03, 0xFE, 0x00, 0x3F, 0xE0, 0x03, 0xFE, 0x00, 0x3F, 0xE0, 0x03, 0xFE, + 0x00, 0x3F, 0xE0, 0x03, 0xFE, 0x00, 0x3F, 0xE0, 0x03, 0xFE, 0x00, 0x3F, + 0xE0, 0x03, 0xFE, 0x00, 0x3F, 0xE0, 0x03, 0xFE, 0x00, 0x3F, 0xE0, 0x03, + 0xFF, 0x00, 0x3F, 0xF0, 0x01, 0xFF, 0xC0, 0x1F, 0xFF, 0x00, 0xFF, 0xF0, + 0x07, 0xFF, 0x00, 0x3F, 0xF0, 0x07, 0xFF, 0x00, 0xFF, 0xF0, 0x1F, 0xFF, + 0x01, 0xFF, 0xF0, 0x3F, 0xF8, 0x03, 0xFF, 0x00, 0x3F, 0xF0, 0x03, 0xFE, + 0x00, 0x3F, 0xE0, 0x03, 0xFE, 0x00, 0x3F, 0xE0, 0x03, 0xFE, 0x00, 0x3F, + 0xE0, 0x03, 0xFE, 0x00, 0x3F, 0xE0, 0x03, 0xFE, 0x00, 0x3F, 0xE0, 0x03, + 0xFE, 0x00, 0x3F, 0xE0, 0x03, 0xFE, 0x00, 0x7F, 0xE0, 0x0F, 0xFE, 0x0F, + 0xFF, 0xE0, 0xFF, 0xFC, 0x0F, 0xFF, 0xC0, 0xFF, 0xF8, 0x0F, 0xFF, 0x80, + 0xFF, 0xF0, 0x0F, 0xFC, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x18, + 0x01, 0xFF, 0xC0, 0x07, 0xE0, 0xFF, 0xF8, 0x01, 0xFC, 0x7F, 0xFF, 0x80, + 0xFF, 0x3F, 0xFF, 0xF8, 0x7F, 0x8F, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, + 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, 0x87, 0xFF, 0xFE, 0x3F, 0xC0, + 0x7F, 0xFF, 0x8F, 0xE0, 0x07, 0xFF, 0xC1, 0xF8, 0x00, 0xFF, 0xE0, 0x06, + 0x00, 0x07, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x80, 0x00, 0x07, 0xE0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x7E, + 0x00, 0x00, 0x1F, 0x80, 0x00, 0x07, 0xE0, 0x00, 0x01, 0xF8, 0x00, 0x00, + 0x7E, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x07, 0xE0, 0x00, 0x01, 0xF8, 0x00, + 0x00, 0x7E, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x07, 0xE0, 0x00, 0x01, 0xF8, + 0x00, 0x00, 0x7E, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x07, 0xE0, 0x00, 0x01, + 0xF8, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x07, 0xE0, 0x00, + 0x01, 0xF8, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x07, 0xE0, + 0x00, 0x01, 0xF8, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x07, + 0xE0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x1F, 0x80, 0x00, + 0x07, 0xE0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x1F, 0x80, + 0x00, 0x07, 0xE0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x1F, + 0x80, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFC, 0x00, 0x1F, 0x07, 0xF1, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xEF, 0xF8, 0xFE, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x01, 0xFC, + 0x3F, 0x87, 0xF0, 0xFE, 0x1F, 0xC3, 0xF8, 0x7F, 0x0F, 0xE3, 0xFE, 0x7F, + 0xCF, 0xF9, 0xFF, 0x3F, 0xE7, 0xFC, 0xFF, 0x9F, 0xF3, 0xFE, 0x7F, 0xCF, + 0xF9, 0xFF, 0x3F, 0xE7, 0xFC, 0xFF, 0x9F, 0xF3, 0xFE, 0x7F, 0xCF, 0xF9, + 0xFF, 0x3F, 0xE7, 0xFC, 0x00, 0x1F, 0xF0, 0x00, 0x03, 0xFE, 0x00, 0x00, + 0x7F, 0xC0, 0x00, 0x0F, 0xF8, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x3F, 0xE0, + 0x00, 0x07, 0xFC, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x1F, 0xF0, 0x00, 0x03, + 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xFC, + 0x0F, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, + 0xFF, 0x07, 0xFF, 0x80, 0xE1, 0xFF, 0xC0, 0x00, 0x3F, 0xF0, 0x00, 0x07, + 0xFC, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x3F, 0xE0, 0x00, 0x07, 0xFC, 0x00, + 0x00, 0xFF, 0x80, 0x00, 0x1F, 0xF0, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x7F, + 0xC0, 0x00, 0x0F, 0xFC, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x1F, 0xF8, 0x00, + 0x03, 0xFF, 0x80, 0x00, 0x7F, 0xFC, 0x01, 0xC7, 0xFF, 0xFF, 0xF8, 0xFF, + 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, + 0xC0, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0x00, 0x1F, 0xFE, 0x00, 0x03, + 0xFE, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x0F, 0xF8, 0x00, 0x01, 0xFF, 0x00, + 0x00, 0x3F, 0xE0, 0x00, 0x07, 0xFC, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x1F, + 0xF0, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x1F, 0xFF, + 0xF0, 0x00, 0x7F, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, + 0x80, 0x1F, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xF8, + 0x03, 0xFF, 0xC0, 0x70, 0x07, 0xFE, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, + 0x3F, 0xF0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x01, + 0xFF, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, + 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x0F, 0xFF, + 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, + 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, + 0xFF, 0x07, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0xFF, 0x80, + 0x00, 0x01, 0xFF, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, + 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x7F, 0xC0, 0x00, + 0x00, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xFF, + 0x87, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0xFC, + 0x7F, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0xE0, + 0x04, 0x00, 0x00, 0x20, 0x0F, 0x00, 0x00, 0x70, 0x1F, 0x80, 0x01, 0xF8, + 0x3F, 0xCF, 0xF3, 0xFC, 0x7F, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, + 0x7F, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xF8, + 0x0F, 0xFF, 0xFF, 0xF0, 0x0F, 0xFC, 0x3F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, + 0x1F, 0xF0, 0x0F, 0xF8, 0x1F, 0xE0, 0x07, 0xF8, 0x1F, 0xE0, 0x07, 0xF8, + 0x1F, 0xE0, 0x07, 0xF8, 0x1F, 0xE0, 0x07, 0xF8, 0x1F, 0xE0, 0x07, 0xF8, + 0x1F, 0xF0, 0x0F, 0xF8, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xFC, 0x3F, 0xF0, + 0x0F, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0xFC, + 0x7F, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFE, + 0x3F, 0xCF, 0xF3, 0xFC, 0x1F, 0x80, 0x01, 0xF8, 0x0E, 0x00, 0x00, 0x70, + 0x04, 0x00, 0x00, 0x20, 0xFF, 0xC0, 0x00, 0x3F, 0xF7, 0xFE, 0x00, 0x07, + 0xFE, 0x7F, 0xE0, 0x00, 0x7F, 0xE3, 0xFE, 0x00, 0x0F, 0xFC, 0x3F, 0xF0, + 0x00, 0xFF, 0xC1, 0xFF, 0x00, 0x0F, 0xF8, 0x1F, 0xF8, 0x01, 0xFF, 0x81, + 0xFF, 0x80, 0x1F, 0xF0, 0x0F, 0xF8, 0x03, 0xFF, 0x00, 0xFF, 0xC0, 0x3F, + 0xE0, 0x07, 0xFC, 0x03, 0xFE, 0x00, 0x7F, 0xE0, 0x7F, 0xC0, 0x03, 0xFE, + 0x07, 0xFC, 0x00, 0x1F, 0xF0, 0xFF, 0x80, 0x01, 0xFF, 0x0F, 0xF8, 0x00, + 0x0F, 0xF1, 0xFF, 0x00, 0x00, 0xFF, 0x9F, 0xF0, 0x00, 0x07, 0xFB, 0xFE, + 0x00, 0x00, 0x7F, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xF0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x07, + 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, + 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, + 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x0F, 0xFC, 0x00, 0x03, + 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFC, 0x07, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, + 0xFE, 0x07, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xF8, + 0x1F, 0xF8, 0x07, 0xC0, 0xFF, 0x80, 0x02, 0x07, 0xFC, 0x00, 0x00, 0x3F, + 0xE0, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x3F, 0xFF, + 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xFC, + 0x03, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xFF, 0x1F, + 0xF1, 0xFF, 0xF9, 0xFF, 0x81, 0xFF, 0xEF, 0xF8, 0x07, 0xFF, 0x7F, 0xC0, + 0x1F, 0xFB, 0xFE, 0x00, 0x7F, 0xDF, 0xF0, 0x03, 0xFE, 0xFF, 0xC0, 0x1F, + 0xF7, 0xFF, 0x00, 0xFF, 0x9F, 0xFE, 0x0F, 0xF8, 0xFF, 0xFC, 0x7F, 0xC3, + 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFC, 0x00, 0xFF, + 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFE, 0x00, 0x03, 0xFF, + 0xF0, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x1F, 0xF0, + 0x00, 0x00, 0xFF, 0x8E, 0x00, 0x07, 0xFC, 0x7F, 0x00, 0x7F, 0xE7, 0xFF, + 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, + 0xF8, 0xFF, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0x80, + 0x03, 0xFF, 0xC0, 0x00, 0x1E, 0x00, 0x78, 0x7F, 0x81, 0xFE, 0x7F, 0x81, + 0xFE, 0xFF, 0xC3, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xC3, + 0xFF, 0x7F, 0x81, 0xFE, 0x7F, 0x81, 0xFE, 0x1E, 0x00, 0x78, 0x00, 0x00, + 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x00, 0x1F, 0xFF, + 0xFF, 0x80, 0x00, 0x03, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0xFF, 0xFF, 0xFF, + 0xF0, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xC0, 0x3F, 0xFC, + 0x00, 0x7F, 0xE0, 0x00, 0x7F, 0xE0, 0x0F, 0xF8, 0x00, 0x01, 0xFF, 0x00, + 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x00, 0x00, 0x3F, 0x83, 0xF8, + 0x01, 0xFE, 0x01, 0xFC, 0x3F, 0x80, 0xFF, 0xFC, 0x1F, 0xC7, 0xF0, 0x1F, + 0xFF, 0xC0, 0xFE, 0x7F, 0x03, 0xFF, 0xFC, 0x0F, 0xE7, 0xE0, 0x7F, 0xFF, + 0xC0, 0x7E, 0x7E, 0x0F, 0xFF, 0xF8, 0x07, 0xEF, 0xE0, 0xFF, 0x81, 0x80, + 0x7F, 0xFC, 0x1F, 0xE0, 0x00, 0x03, 0xFF, 0xC1, 0xFC, 0x00, 0x00, 0x3F, + 0xFC, 0x1F, 0xC0, 0x00, 0x03, 0xFF, 0xC1, 0xFC, 0x00, 0x00, 0x3F, 0xFC, + 0x1F, 0xC0, 0x00, 0x03, 0xFF, 0xC1, 0xFC, 0x00, 0x00, 0x3F, 0xFC, 0x1F, + 0xC0, 0x00, 0x03, 0xFF, 0xC1, 0xFE, 0x00, 0x00, 0x3F, 0xFE, 0x0F, 0xF0, + 0x18, 0x07, 0xF7, 0xE0, 0xFF, 0xFF, 0xC0, 0x7E, 0x7E, 0x07, 0xFF, 0xFC, + 0x07, 0xE7, 0xF0, 0x7F, 0xFF, 0xC0, 0xFE, 0x7F, 0x03, 0xFF, 0xFE, 0x0F, + 0xE3, 0xF8, 0x0F, 0xFF, 0xC1, 0xFC, 0x3F, 0x80, 0x1F, 0xE0, 0x1F, 0xC1, + 0xFC, 0x00, 0x00, 0x03, 0xF8, 0x0F, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0xFF, + 0x80, 0x00, 0x1F, 0xF0, 0x07, 0xFE, 0x00, 0x07, 0xFE, 0x00, 0x3F, 0xFC, + 0x03, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xFF, 0xF8, + 0x00, 0x00, 0x03, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, + 0x07, 0xFE, 0x01, 0xFF, 0xFC, 0x07, 0xFF, 0xF8, 0x3F, 0xFF, 0xE1, 0xFF, + 0xFF, 0x0C, 0x07, 0xFC, 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0x00, 0x03, 0xF8, + 0x3F, 0xFF, 0xC7, 0xFF, 0xFE, 0x7F, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFC, 0x0F, 0xFF, 0xC0, 0x7F, 0xFE, 0x03, 0xFF, 0xF0, 0x1F, 0xFF, + 0xC0, 0xFE, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0x9F, 0xFF, 0xFC, 0x7F, 0xFF, + 0xE0, 0x7F, 0xF0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1F, 0x00, 0x0F, 0x80, + 0x0F, 0xF0, 0x07, 0xF8, 0x07, 0xFE, 0x03, 0xFF, 0x01, 0xFF, 0x00, 0xFF, + 0x80, 0xFF, 0xC0, 0x7F, 0xE0, 0x7F, 0xE0, 0x3F, 0xF0, 0x1F, 0xF8, 0x0F, + 0xFC, 0x0F, 0xFC, 0x07, 0xFE, 0x07, 0xFF, 0x03, 0xFF, 0x81, 0xFF, 0x80, + 0xFF, 0xC0, 0xFF, 0xE0, 0x7F, 0xF0, 0x7F, 0xF0, 0x3F, 0xF8, 0x1F, 0xFC, + 0x0F, 0xFE, 0x0F, 0xFE, 0x07, 0xFF, 0x01, 0xFF, 0xC0, 0xFF, 0xE0, 0x7F, + 0xF0, 0x3F, 0xF8, 0x0F, 0xFE, 0x07, 0xFF, 0x01, 0xFF, 0x80, 0xFF, 0xC0, + 0x7F, 0xF0, 0x3F, 0xF8, 0x0F, 0xFC, 0x07, 0xFE, 0x01, 0xFF, 0x80, 0xFF, + 0xC0, 0x7F, 0xE0, 0x3F, 0xF0, 0x0F, 0xFC, 0x07, 0xFE, 0x01, 0xFF, 0x00, + 0xFF, 0x80, 0x7F, 0xE0, 0x3F, 0xF0, 0x0F, 0xF0, 0x07, 0xF8, 0x01, 0xF0, + 0x00, 0xF8, 0x00, 0x70, 0x00, 0x38, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x7F, + 0xC0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x1F, 0xF0, + 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x07, 0xFC, 0x00, + 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x01, 0xFF, 0x00, 0x00, + 0x07, 0xFC, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x7F, 0xC0, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x7F, 0xE0, 0x00, + 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0x80, 0x00, + 0x03, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x1F, + 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xC0, 0x3F, 0xFC, 0x00, 0x7F, 0xE0, + 0x00, 0x7F, 0xE0, 0x0F, 0xF8, 0x00, 0x01, 0xFF, 0x00, 0xFE, 0x00, 0x00, + 0x07, 0xF0, 0x1F, 0xC0, 0x00, 0x00, 0x3F, 0x83, 0xF8, 0x0F, 0xFC, 0x01, + 0xFC, 0x3F, 0x87, 0xFF, 0xF8, 0x1F, 0xC7, 0xF0, 0x7F, 0xFF, 0xC0, 0xFE, + 0x7F, 0x07, 0xFF, 0xFE, 0x0F, 0xE7, 0xE0, 0x7F, 0xFF, 0xF0, 0x7E, 0x7E, + 0x07, 0xE0, 0x7F, 0x07, 0xEF, 0xE0, 0x7E, 0x03, 0xF0, 0x7F, 0xFC, 0x07, + 0xE0, 0x3F, 0x03, 0xFF, 0xC0, 0x7E, 0x07, 0xF0, 0x3F, 0xFC, 0x07, 0xFF, + 0xFF, 0x03, 0xFF, 0xC0, 0x7F, 0xFF, 0xE0, 0x3F, 0xFC, 0x07, 0xFF, 0xFC, + 0x03, 0xFF, 0xC0, 0x7F, 0xFF, 0x80, 0x3F, 0xFC, 0x07, 0xFF, 0xF8, 0x03, + 0xFF, 0xC0, 0x7E, 0x0F, 0xC0, 0x3F, 0xFE, 0x07, 0xE0, 0xFC, 0x07, 0xF7, + 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x7E, 0x07, 0xE0, 0x7F, 0x07, 0xE7, 0xF0, + 0x7E, 0x03, 0xF0, 0xFE, 0x7F, 0x07, 0xE0, 0x3F, 0x0F, 0xE3, 0xF8, 0x7E, + 0x01, 0xF9, 0xFC, 0x3F, 0x80, 0x00, 0x00, 0x1F, 0xC1, 0xFC, 0x00, 0x00, + 0x03, 0xF8, 0x0F, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0xFF, 0x80, 0x00, 0x1F, + 0xF0, 0x07, 0xFE, 0x00, 0x07, 0xFE, 0x00, 0x3F, 0xFC, 0x03, 0xFF, 0xC0, + 0x01, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x3F, 0xFF, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x03, + 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x01, 0xFC, 0x00, 0x3F, 0xF8, 0x07, 0xFF, 0xF0, 0x7F, 0xFF, 0xC7, 0xFF, + 0xFF, 0x3F, 0xFF, 0xFB, 0xFE, 0x3F, 0xFF, 0xE0, 0xFF, 0xFE, 0x03, 0xFF, + 0xF0, 0x1F, 0xFF, 0x80, 0xFF, 0xFE, 0x0F, 0xFF, 0xF8, 0xFF, 0xBF, 0xFF, + 0xF9, 0xFF, 0xFF, 0xC7, 0xFF, 0xFC, 0x1F, 0xFF, 0xC0, 0x3F, 0xF8, 0x00, + 0x7F, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x7F, + 0xC0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x03, 0xFE, + 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xF0, + 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x07, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0x00, 0x00, + 0x03, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, + 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, + 0xFF, 0x80, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x03, 0xF8, 0x03, 0xFF, 0xC0, 0xFF, 0xFC, 0x7F, 0xFF, 0xC7, 0xFF, + 0xFC, 0x78, 0x7F, 0x84, 0x07, 0xF0, 0x00, 0xFE, 0x00, 0x1F, 0xC0, 0x07, + 0xF8, 0x01, 0xFE, 0x00, 0x7F, 0xC0, 0x1F, 0xF0, 0x07, 0xFC, 0x01, 0xFE, + 0x00, 0x7F, 0x80, 0x1F, 0xE0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x1F, 0xFF, + 0xF7, 0xFF, 0xFE, 0xFF, 0xFF, 0xDF, 0xFF, 0xFB, 0xFF, 0xFF, 0x7F, 0xFF, + 0xE0, 0x07, 0xF8, 0x07, 0xFF, 0xC3, 0xFF, 0xFC, 0x3F, 0xFF, 0xC3, 0xFF, + 0xFC, 0x70, 0x7F, 0x80, 0x07, 0xF0, 0x00, 0xFE, 0x00, 0x1F, 0xC0, 0x03, + 0xF0, 0x00, 0xFE, 0x03, 0xFF, 0x80, 0x7F, 0xF0, 0x0F, 0xFF, 0x01, 0xFF, + 0xF0, 0x3F, 0xFF, 0x00, 0x3F, 0xE0, 0x01, 0xFC, 0x00, 0x3F, 0x80, 0x07, + 0xF7, 0x01, 0xFE, 0xFF, 0xFF, 0x9F, 0xFF, 0xF7, 0xFF, 0xFC, 0xFF, 0xFE, + 0x01, 0xFF, 0x00, 0x00, 0x40, 0x01, 0xC0, 0x07, 0xC0, 0x1F, 0xC0, 0x7F, + 0xE1, 0xFF, 0x87, 0xFE, 0x1F, 0xF8, 0x7F, 0xE1, 0xFF, 0x81, 0xFE, 0x01, + 0xF0, 0x01, 0xC0, 0x01, 0x00, 0x00, 0xFF, 0x80, 0x0F, 0xFF, 0xFC, 0x00, + 0x7F, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0xFF, + 0xFF, 0xC0, 0x07, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, + 0x80, 0x0F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0x00, + 0x1F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFE, 0x00, 0x3F, + 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, + 0xE0, 0x03, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xC0, + 0x07, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xE0, 0x0F, + 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFC, 0xFF, 0xF0, 0x3F, 0xE0, 0x00, + 0x01, 0xFF, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x03, + 0xFE, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x07, 0xFC, + 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x0F, 0xF8, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xC0, + 0x7F, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, + 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0xE0, 0x7F, + 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xFF, + 0xC0, 0xFF, 0xFF, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, + 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0xE0, + 0x7F, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xF8, 0x1F, 0xF7, 0xFF, + 0xFF, 0xC0, 0xFF, 0xBF, 0xFF, 0xFE, 0x07, 0xFC, 0xFF, 0xFF, 0xF0, 0x3F, + 0xE3, 0xFF, 0xFF, 0x81, 0xFF, 0x0F, 0xFF, 0xFC, 0x0F, 0xF8, 0x1F, 0xFF, + 0xE0, 0x7F, 0xC0, 0x3F, 0xFF, 0x03, 0xFE, 0x00, 0x1F, 0xF8, 0x1F, 0xF0, + 0x00, 0x7F, 0xC0, 0xFF, 0x80, 0x03, 0xFE, 0x07, 0xFC, 0x00, 0x1F, 0xF0, + 0x3F, 0xE0, 0x00, 0xFF, 0x81, 0xFF, 0x00, 0x07, 0xFC, 0x0F, 0xF8, 0x00, + 0x3F, 0xE0, 0x7F, 0xC0, 0x01, 0xFF, 0x03, 0xFE, 0x00, 0x0F, 0xF8, 0x1F, + 0xF0, 0x00, 0x7F, 0xC0, 0xFF, 0x80, 0x03, 0xFE, 0x07, 0xFC, 0x00, 0x1F, + 0xF0, 0x3F, 0xE0, 0x00, 0xFF, 0x81, 0xFF, 0x00, 0x07, 0xFC, 0x0F, 0xF8, + 0x00, 0x3F, 0xE0, 0x7F, 0xC0, 0x01, 0xFF, 0x03, 0xFE, 0x00, 0x0F, 0xF8, + 0x1F, 0xF0, 0x00, 0x7F, 0xC0, 0xFF, 0x80, 0x03, 0xFE, 0x07, 0xFC, 0x00, + 0x1F, 0xF0, 0x3F, 0xE0, 0x00, 0xFF, 0x81, 0xFF, 0x00, 0x07, 0xFC, 0x0F, + 0xF8, 0x00, 0x3F, 0xE0, 0x7F, 0xC0, 0x01, 0xFF, 0x03, 0xFE, 0x00, 0x0F, + 0xF8, 0x1F, 0xF0, 0x00, 0x7F, 0xC0, 0xFF, 0x80, 0x03, 0xFE, 0x07, 0xFC, + 0x00, 0x1F, 0xF0, 0x3F, 0xE0, 0x00, 0xFF, 0x81, 0xFF, 0x0F, 0x03, 0xFC, + 0x7F, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFE, + 0x3F, 0xC0, 0xF0, 0x03, 0xF0, 0x1F, 0x80, 0x7E, 0x03, 0xF8, 0x0F, 0xF0, + 0x1F, 0xE0, 0x1F, 0xC0, 0x7F, 0x01, 0xFD, 0xFF, 0xF7, 0xFF, 0xFF, 0xFE, + 0xFF, 0xFB, 0xFF, 0x87, 0xF8, 0x00, 0x00, 0x7E, 0x03, 0xFC, 0x0F, 0xF8, + 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xBF, 0xFF, 0x7C, 0xFE, 0x41, + 0xFC, 0x03, 0xF8, 0x07, 0xF0, 0x0F, 0xE0, 0x1F, 0xC0, 0x3F, 0x80, 0x7F, + 0x00, 0xFE, 0x01, 0xFC, 0x03, 0xF8, 0x07, 0xF0, 0x0F, 0xE0, 0x1F, 0xC0, + 0x3F, 0x80, 0x7F, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x01, 0xFF, 0xF0, 0x01, + 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xE1, 0xFE, 0x0F, 0xF1, + 0xFE, 0x03, 0xFC, 0xFE, 0x00, 0xFE, 0xFF, 0x00, 0x7F, 0x7F, 0x00, 0x1F, + 0xFF, 0x80, 0x0F, 0xFF, 0xC0, 0x07, 0xFF, 0xE0, 0x03, 0xFF, 0xF0, 0x01, + 0xFF, 0xF8, 0x00, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0x00, 0x7F, 0xBF, 0x80, + 0x3F, 0x9F, 0xE0, 0x3F, 0xC7, 0xF8, 0x3F, 0xC3, 0xFF, 0xFF, 0xE0, 0xFF, + 0xFF, 0xE0, 0x3F, 0xFF, 0xE0, 0x07, 0xFF, 0xC0, 0x00, 0xFF, 0x80, 0x00, + 0x07, 0x00, 0x03, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x07, 0xF8, 0x03, 0xFC, + 0x03, 0xFF, 0x01, 0xFF, 0x80, 0x7F, 0xC0, 0x3F, 0xE0, 0x1F, 0xF8, 0x0F, + 0xFC, 0x03, 0xFF, 0x01, 0xFF, 0x80, 0xFF, 0xC0, 0x7F, 0xE0, 0x1F, 0xF8, + 0x0F, 0xFC, 0x07, 0xFF, 0x03, 0xFF, 0x80, 0xFF, 0xC0, 0x7F, 0xE0, 0x3F, + 0xF8, 0x1F, 0xFC, 0x07, 0xFF, 0x03, 0xFF, 0x81, 0xFF, 0xC0, 0xFF, 0xE0, + 0x3F, 0xF8, 0x1F, 0xFC, 0x1F, 0xFC, 0x0F, 0xFE, 0x07, 0xFF, 0x03, 0xFF, + 0x83, 0xFF, 0x81, 0xFF, 0xC0, 0xFF, 0xC0, 0x7F, 0xE0, 0x7F, 0xF0, 0x3F, + 0xF8, 0x1F, 0xF8, 0x0F, 0xFC, 0x0F, 0xFC, 0x07, 0xFE, 0x03, 0xFF, 0x01, + 0xFF, 0x81, 0xFF, 0x80, 0xFF, 0xC0, 0x7F, 0xC0, 0x3F, 0xE0, 0x3F, 0xF0, + 0x1F, 0xF8, 0x07, 0xF8, 0x03, 0xFC, 0x00, 0x7C, 0x00, 0x3E, 0x00, 0x07, + 0x00, 0x03, 0x80, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x0F, + 0xF0, 0x00, 0x07, 0xFC, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x3F, 0xC0, 0x00, + 0x3F, 0xFC, 0x00, 0x03, 0xFE, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x1F, 0xE0, + 0x00, 0x7F, 0xFF, 0x00, 0x01, 0xFF, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x0F, + 0xF0, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0xFF, 0x80, 0x00, 0x7C, 0xFE, 0x00, + 0x07, 0xF8, 0x00, 0x01, 0x07, 0xF0, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x3F, + 0x80, 0x03, 0xFC, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x3F, 0xE0, 0x00, 0x00, + 0x0F, 0xE0, 0x03, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x1F, 0xF0, 0x00, + 0x00, 0x03, 0xF8, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x0F, 0xF8, + 0x00, 0x00, 0x00, 0xFE, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xF0, 0x07, + 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x7F, 0xC0, 0x00, 0x00, 0x01, 0xFC, + 0x03, 0xFE, 0x00, 0x7F, 0x80, 0x0F, 0xE0, 0x3F, 0xE0, 0x07, 0xFC, 0x00, + 0x7F, 0x01, 0xFF, 0x00, 0x3F, 0xE0, 0x03, 0xF8, 0x1F, 0xF0, 0x03, 0xFF, + 0x00, 0x1F, 0xC0, 0xFF, 0x80, 0x3F, 0xF8, 0x00, 0xFE, 0x0F, 0xF8, 0x03, + 0xFF, 0xC0, 0x00, 0x00, 0x7F, 0x80, 0x1F, 0xFE, 0x00, 0x00, 0x07, 0xFC, + 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xC0, 0x1F, 0xBF, 0x80, 0x00, 0x03, + 0xFE, 0x00, 0xFD, 0xFC, 0x00, 0x00, 0x1F, 0xE0, 0x0F, 0xCF, 0xE0, 0x00, + 0x01, 0xFF, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0x0F, 0xF0, 0x07, 0xE3, 0xF8, + 0x00, 0x00, 0xFF, 0x80, 0x7F, 0x1F, 0xC0, 0x00, 0x07, 0xF8, 0x03, 0xF0, + 0xFE, 0x00, 0x00, 0x7F, 0xC0, 0x3F, 0xFF, 0xFE, 0x00, 0x03, 0xFC, 0x01, + 0xFF, 0xFF, 0xF0, 0x00, 0x3F, 0xE0, 0x0F, 0xFF, 0xFF, 0x80, 0x01, 0xFE, + 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x1F, 0xF0, 0x03, 0xFF, 0xFF, 0xE0, 0x00, + 0xFF, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xC0, + 0x00, 0x7F, 0x80, 0x00, 0x00, 0xFE, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x07, + 0xF0, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x7E, 0x00, 0x00, + 0xFF, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x3F, 0xE0, 0x00, 0x0F, 0xF8, 0x00, + 0x07, 0xF8, 0x00, 0x0F, 0xFF, 0x00, 0x01, 0xFF, 0x00, 0x07, 0xFF, 0xE0, + 0x00, 0x3F, 0xC0, 0x01, 0xFF, 0xFC, 0x00, 0x0F, 0xF8, 0x00, 0x1F, 0xFF, + 0x80, 0x01, 0xFE, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x7F, 0xC0, 0x00, 0x7C, + 0xFE, 0x00, 0x0F, 0xF0, 0x00, 0x04, 0x1F, 0xC0, 0x03, 0xFE, 0x00, 0x00, + 0x03, 0xF8, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x7F, 0x00, 0x1F, 0xF0, 0x00, + 0x00, 0x0F, 0xE0, 0x07, 0xFC, 0x00, 0x00, 0x01, 0xFC, 0x00, 0xFF, 0x80, + 0x00, 0x00, 0x3F, 0x80, 0x3F, 0xE0, 0x00, 0x00, 0x07, 0xF0, 0x07, 0xFC, + 0x00, 0x00, 0x00, 0xFE, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x3F, + 0xE0, 0x00, 0x00, 0x03, 0xF8, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0x01, + 0xFF, 0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x7F, 0xC1, 0xFF, 0xE0, 0x01, 0xFC, + 0x0F, 0xF8, 0x7F, 0xFE, 0x00, 0x3F, 0x83, 0xFE, 0x3F, 0xFF, 0xE0, 0x07, + 0xF0, 0x7F, 0xC3, 0xFF, 0xFE, 0x00, 0xFE, 0x1F, 0xF0, 0x3C, 0x3F, 0xC0, + 0x00, 0x03, 0xFC, 0x02, 0x03, 0xF8, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x7F, + 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x0F, 0xE0, 0x00, 0x07, 0xFC, 0x00, 0x03, + 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x3F, 0xE0, 0x00, + 0x3F, 0xE0, 0x00, 0x07, 0xF8, 0x00, 0x0F, 0xF8, 0x00, 0x01, 0xFF, 0x00, + 0x03, 0xFE, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0xFF, 0x00, 0x00, 0x0F, 0xF8, + 0x00, 0x3F, 0xC0, 0x00, 0x01, 0xFE, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x7F, + 0xC0, 0x01, 0xF8, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x7E, 0x00, 0x00, 0x03, + 0xFE, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x7F, 0x80, 0x03, 0xFF, 0xFF, 0x00, + 0x1F, 0xF0, 0x00, 0x7F, 0xFF, 0xE0, 0x03, 0xFC, 0x00, 0x0F, 0xFF, 0xFC, + 0x00, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x1F, 0xE0, 0x00, 0x3F, 0xFF, + 0xF0, 0x07, 0xF8, 0x00, 0x00, 0x1F, 0xE0, 0x01, 0xFF, 0xF0, 0x00, 0x01, + 0xFF, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0xFF, 0x00, + 0x00, 0xFF, 0x80, 0x03, 0xFF, 0xFC, 0x00, 0x07, 0xF8, 0x00, 0x1C, 0x1F, + 0xE0, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x7F, 0x00, 0x03, 0xFC, 0x00, 0x00, + 0x03, 0xF8, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x1F, 0xC0, 0x01, 0xFE, 0x00, + 0x00, 0x00, 0xFC, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0xFF, + 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x00, + 0xFF, 0x80, 0x00, 0x03, 0xFF, 0xC0, 0x07, 0xFC, 0x00, 0x00, 0x1F, 0xFF, + 0x00, 0x7F, 0xC0, 0x00, 0x00, 0xFF, 0xFC, 0x03, 0xFE, 0x00, 0x00, 0x00, + 0x3F, 0xE0, 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x7F, 0x01, 0xFF, 0x00, 0x00, + 0x00, 0x03, 0xF8, 0x1F, 0xF0, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0xFF, 0x80, + 0x7F, 0x87, 0x01, 0xFE, 0x0F, 0xF8, 0x07, 0xFC, 0x3F, 0xFF, 0xE0, 0x7F, + 0xC0, 0x3F, 0xE1, 0xFF, 0xFF, 0x07, 0xFC, 0x03, 0xFF, 0x1F, 0xFF, 0xF0, + 0x3F, 0xE0, 0x3F, 0xF8, 0xFF, 0xFE, 0x03, 0xFE, 0x03, 0xFF, 0xC0, 0x7F, + 0xC0, 0x1F, 0xE0, 0x1F, 0xFE, 0x00, 0x00, 0x01, 0xFF, 0x01, 0xFF, 0xF0, + 0x00, 0x00, 0x0F, 0xF0, 0x1F, 0xBF, 0x80, 0x00, 0x00, 0xFF, 0x80, 0xFD, + 0xFC, 0x00, 0x00, 0x07, 0xF8, 0x0F, 0xCF, 0xE0, 0x00, 0x00, 0x7F, 0xC0, + 0xFE, 0x7F, 0x00, 0x00, 0x03, 0xFC, 0x07, 0xE3, 0xF8, 0x00, 0x00, 0x3F, + 0xE0, 0x7F, 0x1F, 0xC0, 0x00, 0x01, 0xFE, 0x03, 0xF0, 0xFE, 0x00, 0x00, + 0x1F, 0xF0, 0x3F, 0xFF, 0xFE, 0x00, 0x00, 0xFF, 0x01, 0xFF, 0xFF, 0xF0, + 0x00, 0x0F, 0xF8, 0x0F, 0xFF, 0xFF, 0x80, 0x00, 0x7F, 0x80, 0x7F, 0xFF, + 0xFC, 0x00, 0x07, 0xFC, 0x03, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, 0xC0, 0x00, + 0x03, 0xF8, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x1F, 0xE0, + 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x0F, + 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0x80, 0x00, 0x07, 0xF8, 0x00, + 0x03, 0xFF, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x7F, 0xF8, 0x00, 0x1F, 0xFE, + 0x00, 0x07, 0xFF, 0x80, 0x01, 0xFF, 0xE0, 0x00, 0x7F, 0xF8, 0x00, 0x0F, + 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x1F, 0xE0, + 0x00, 0x07, 0xF8, 0x00, 0x01, 0xFE, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x7F, + 0xE0, 0x00, 0x1F, 0xF0, 0x00, 0x0F, 0xFC, 0x00, 0x07, 0xFE, 0x00, 0x07, + 0xFF, 0x00, 0x03, 0xFF, 0x80, 0x01, 0xFF, 0xC0, 0x00, 0x7F, 0xE0, 0x00, + 0x3F, 0xF0, 0x00, 0x1F, 0xF8, 0x00, 0x07, 0xFC, 0x00, 0x03, 0xFF, 0x00, + 0x00, 0xFF, 0x80, 0x00, 0x3F, 0xE0, 0x00, 0x0F, 0xF8, 0x00, 0x03, 0xFF, + 0x00, 0x1C, 0xFF, 0xE0, 0x3F, 0x3F, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0xF9, + 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, + 0xF8, 0x0F, 0xFF, 0xF0, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, + 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x00, + 0x07, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x01, + 0xFF, 0x80, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x3E, + 0x00, 0x00, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x01, + 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x03, 0xFF, + 0xF0, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x80, 0x00, 0x00, 0x03, 0xFF, 0xF8, + 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xC0, 0x00, 0x00, 0x07, 0xFB, 0xFC, 0x00, + 0x00, 0x00, 0xFF, 0xBF, 0xE0, 0x00, 0x00, 0x0F, 0xFB, 0xFE, 0x00, 0x00, + 0x01, 0xFF, 0x1F, 0xF0, 0x00, 0x00, 0x1F, 0xF1, 0xFF, 0x00, 0x00, 0x01, + 0xFF, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xE0, 0xFF, 0x80, 0x00, 0x03, 0xFE, + 0x0F, 0xF8, 0x00, 0x00, 0x7F, 0xC0, 0x7F, 0xC0, 0x00, 0x07, 0xFC, 0x07, + 0xFC, 0x00, 0x00, 0x7F, 0xC0, 0x3F, 0xE0, 0x00, 0x0F, 0xF8, 0x03, 0xFE, + 0x00, 0x00, 0xFF, 0x80, 0x3F, 0xF0, 0x00, 0x1F, 0xF8, 0x01, 0xFF, 0x00, + 0x01, 0xFF, 0x00, 0x1F, 0xF0, 0x00, 0x1F, 0xF0, 0x01, 0xFF, 0x80, 0x03, + 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, + 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, + 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x1F, 0xF8, 0x00, 0x01, 0xFF, + 0x01, 0xFF, 0x80, 0x00, 0x1F, 0xF8, 0x1F, 0xF0, 0x00, 0x00, 0xFF, 0x83, + 0xFF, 0x00, 0x00, 0x0F, 0xFC, 0x3F, 0xE0, 0x00, 0x00, 0xFF, 0xC3, 0xFE, + 0x00, 0x00, 0x07, 0xFC, 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xE7, 0xFC, 0x00, + 0x00, 0x07, 0xFE, 0x7F, 0xC0, 0x00, 0x00, 0x3F, 0xEF, 0xFC, 0x00, 0x00, + 0x03, 0xFF, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, + 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x01, + 0xFF, 0x80, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFE, + 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, + 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x00, + 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x1F, + 0xFF, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x3F, 0xFF, + 0x80, 0x00, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xC0, + 0x00, 0x00, 0x07, 0xFB, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0xBF, 0xE0, 0x00, + 0x00, 0x0F, 0xFB, 0xFE, 0x00, 0x00, 0x01, 0xFF, 0x1F, 0xF0, 0x00, 0x00, + 0x1F, 0xF1, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0x0F, 0xF8, 0x00, 0x00, 0x3F, + 0xE0, 0xFF, 0x80, 0x00, 0x03, 0xFE, 0x0F, 0xF8, 0x00, 0x00, 0x7F, 0xC0, + 0x7F, 0xC0, 0x00, 0x07, 0xFC, 0x07, 0xFC, 0x00, 0x00, 0x7F, 0xC0, 0x3F, + 0xE0, 0x00, 0x0F, 0xF8, 0x03, 0xFE, 0x00, 0x00, 0xFF, 0x80, 0x3F, 0xF0, + 0x00, 0x1F, 0xF8, 0x01, 0xFF, 0x00, 0x01, 0xFF, 0x00, 0x1F, 0xF0, 0x00, + 0x1F, 0xF0, 0x01, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x3F, + 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, + 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, + 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xF0, 0x1F, 0xF8, 0x00, 0x01, 0xFF, 0x01, 0xFF, 0x80, 0x00, 0x1F, 0xF8, + 0x1F, 0xF0, 0x00, 0x00, 0xFF, 0x83, 0xFF, 0x00, 0x00, 0x0F, 0xFC, 0x3F, + 0xE0, 0x00, 0x00, 0xFF, 0xC3, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x7F, 0xE0, + 0x00, 0x00, 0x7F, 0xE7, 0xFC, 0x00, 0x00, 0x07, 0xFE, 0x7F, 0xC0, 0x00, + 0x00, 0x3F, 0xEF, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, + 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, + 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x00, + 0x7F, 0xFF, 0xC0, 0x00, 0x00, 0x0F, 0xFB, 0xFE, 0x00, 0x00, 0x00, 0x7F, + 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xC0, 0x7C, 0x00, 0x00, 0x00, 0x38, 0x03, + 0x80, 0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, + 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x00, 0x01, + 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x00, 0x03, 0xFF, + 0xF8, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xFC, + 0x00, 0x00, 0x00, 0x7F, 0xBF, 0xC0, 0x00, 0x00, 0x0F, 0xFB, 0xFE, 0x00, + 0x00, 0x00, 0xFF, 0xBF, 0xE0, 0x00, 0x00, 0x1F, 0xF1, 0xFF, 0x00, 0x00, + 0x01, 0xFF, 0x1F, 0xF0, 0x00, 0x00, 0x1F, 0xF0, 0xFF, 0x80, 0x00, 0x03, + 0xFE, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xE0, 0xFF, 0x80, 0x00, 0x07, 0xFC, + 0x07, 0xFC, 0x00, 0x00, 0x7F, 0xC0, 0x7F, 0xC0, 0x00, 0x07, 0xFC, 0x03, + 0xFE, 0x00, 0x00, 0xFF, 0x80, 0x3F, 0xE0, 0x00, 0x0F, 0xF8, 0x03, 0xFF, + 0x00, 0x01, 0xFF, 0x80, 0x1F, 0xF0, 0x00, 0x1F, 0xF0, 0x01, 0xFF, 0x00, + 0x01, 0xFF, 0x00, 0x1F, 0xF8, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0x80, 0x03, + 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, + 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, + 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, + 0xFF, 0x01, 0xFF, 0x80, 0x00, 0x1F, 0xF0, 0x1F, 0xF8, 0x00, 0x01, 0xFF, + 0x81, 0xFF, 0x00, 0x00, 0x0F, 0xF8, 0x3F, 0xF0, 0x00, 0x00, 0xFF, 0xC3, + 0xFE, 0x00, 0x00, 0x0F, 0xFC, 0x3F, 0xE0, 0x00, 0x00, 0x7F, 0xC7, 0xFE, + 0x00, 0x00, 0x07, 0xFE, 0x7F, 0xC0, 0x00, 0x00, 0x7F, 0xE7, 0xFC, 0x00, + 0x00, 0x03, 0xFE, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x70, 0x00, 0x00, 0x03, 0xFF, 0x0F, + 0x80, 0x00, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0x80, + 0x00, 0x00, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0x87, 0xFC, 0x00, 0x00, 0x00, + 0x10, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, + 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, + 0x03, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x80, 0x00, 0x00, 0x03, + 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xC0, 0x00, 0x00, 0x07, 0xFB, + 0xFC, 0x00, 0x00, 0x00, 0xFF, 0xBF, 0xE0, 0x00, 0x00, 0x0F, 0xFB, 0xFE, + 0x00, 0x00, 0x01, 0xFF, 0x1F, 0xF0, 0x00, 0x00, 0x1F, 0xF1, 0xFF, 0x00, + 0x00, 0x01, 0xFF, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xE0, 0xFF, 0x80, 0x00, + 0x03, 0xFE, 0x0F, 0xF8, 0x00, 0x00, 0x7F, 0xC0, 0x7F, 0xC0, 0x00, 0x07, + 0xFC, 0x07, 0xFC, 0x00, 0x00, 0x7F, 0xC0, 0x3F, 0xE0, 0x00, 0x0F, 0xF8, + 0x03, 0xFE, 0x00, 0x00, 0xFF, 0x80, 0x3F, 0xF0, 0x00, 0x1F, 0xF8, 0x01, + 0xFF, 0x00, 0x01, 0xFF, 0x00, 0x1F, 0xF0, 0x00, 0x1F, 0xF0, 0x01, 0xFF, + 0x80, 0x03, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xC0, + 0x03, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xC0, 0x07, + 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x1F, 0xF8, 0x00, + 0x01, 0xFF, 0x01, 0xFF, 0x80, 0x00, 0x1F, 0xF8, 0x1F, 0xF0, 0x00, 0x00, + 0xFF, 0x83, 0xFF, 0x00, 0x00, 0x0F, 0xFC, 0x3F, 0xE0, 0x00, 0x00, 0xFF, + 0xC3, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xE7, + 0xFC, 0x00, 0x00, 0x07, 0xFE, 0x7F, 0xC0, 0x00, 0x00, 0x3F, 0xEF, 0xFC, + 0x00, 0x00, 0x03, 0xFF, 0x00, 0x07, 0x80, 0x1E, 0x00, 0x00, 0x01, 0xFE, + 0x07, 0xF8, 0x00, 0x00, 0x1F, 0xE0, 0x7F, 0x80, 0x00, 0x03, 0xFF, 0x0F, + 0xFC, 0x00, 0x00, 0x3F, 0xF0, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0x0F, 0xFC, + 0x00, 0x00, 0x3F, 0xF0, 0xFF, 0xC0, 0x00, 0x01, 0xFE, 0x07, 0xF8, 0x00, + 0x00, 0x1F, 0xE0, 0x7F, 0x80, 0x00, 0x00, 0x78, 0x01, 0xE0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, + 0x80, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC0, + 0x00, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xE0, 0x00, + 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x00, + 0x00, 0x3F, 0xFF, 0x80, 0x00, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x00, + 0x7F, 0xFF, 0xC0, 0x00, 0x00, 0x07, 0xFB, 0xFC, 0x00, 0x00, 0x00, 0xFF, + 0xBF, 0xE0, 0x00, 0x00, 0x0F, 0xFB, 0xFE, 0x00, 0x00, 0x01, 0xFF, 0x1F, + 0xF0, 0x00, 0x00, 0x1F, 0xF1, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0x0F, 0xF8, + 0x00, 0x00, 0x3F, 0xE0, 0xFF, 0x80, 0x00, 0x03, 0xFE, 0x0F, 0xF8, 0x00, + 0x00, 0x7F, 0xC0, 0x7F, 0xC0, 0x00, 0x07, 0xFC, 0x07, 0xFC, 0x00, 0x00, + 0x7F, 0xC0, 0x3F, 0xE0, 0x00, 0x0F, 0xF8, 0x03, 0xFE, 0x00, 0x00, 0xFF, + 0x80, 0x3F, 0xF0, 0x00, 0x1F, 0xF8, 0x01, 0xFF, 0x00, 0x01, 0xFF, 0x00, + 0x1F, 0xF0, 0x00, 0x1F, 0xF0, 0x01, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xFF, + 0xF8, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xFF, 0xFC, + 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF0, 0x1F, 0xF8, 0x00, 0x01, 0xFF, 0x01, 0xFF, 0x80, + 0x00, 0x1F, 0xF8, 0x1F, 0xF0, 0x00, 0x00, 0xFF, 0x83, 0xFF, 0x00, 0x00, + 0x0F, 0xFC, 0x3F, 0xE0, 0x00, 0x00, 0xFF, 0xC3, 0xFE, 0x00, 0x00, 0x07, + 0xFC, 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xE7, 0xFC, 0x00, 0x00, 0x07, 0xFE, + 0x7F, 0xC0, 0x00, 0x00, 0x3F, 0xEF, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0x00, + 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x03, 0xF1, + 0xF0, 0x00, 0x00, 0x00, 0x3E, 0x0F, 0x80, 0x00, 0x00, 0x03, 0xE0, 0xF8, + 0x00, 0x00, 0x00, 0x3E, 0x0F, 0x80, 0x00, 0x00, 0x03, 0xE0, 0xF8, 0x00, + 0x00, 0x00, 0x3F, 0x1F, 0x80, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, + 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x00, + 0x07, 0xFE, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x0F, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x1F, 0xFF, + 0x80, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xC0, + 0x00, 0x00, 0x03, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xC0, 0x00, + 0x00, 0x07, 0xFB, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0xBF, 0xE0, 0x00, 0x00, + 0x0F, 0xFB, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x1F, 0xF0, 0x00, 0x00, 0x1F, + 0xF1, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xE0, + 0xFF, 0x80, 0x00, 0x03, 0xFE, 0x0F, 0xFC, 0x00, 0x00, 0x3F, 0xE0, 0x7F, + 0xC0, 0x00, 0x07, 0xFC, 0x07, 0xFE, 0x00, 0x00, 0x7F, 0xC0, 0x7F, 0xE0, + 0x00, 0x0F, 0xFC, 0x03, 0xFE, 0x00, 0x00, 0xFF, 0x80, 0x3F, 0xF0, 0x00, + 0x0F, 0xF8, 0x01, 0xFF, 0x00, 0x01, 0xFF, 0x80, 0x1F, 0xF8, 0x00, 0x1F, + 0xF0, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x00, 0x0F, 0xF8, 0x00, 0x3F, 0xFF, + 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xFF, + 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, + 0xE0, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, + 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0x80, 0x00, 0x1F, 0xF8, 0x1F, + 0xF0, 0x00, 0x01, 0xFF, 0x81, 0xFF, 0x00, 0x00, 0x0F, 0xF8, 0x3F, 0xF0, + 0x00, 0x00, 0xFF, 0xC3, 0xFE, 0x00, 0x00, 0x0F, 0xFC, 0x3F, 0xE0, 0x00, + 0x00, 0x7F, 0xC7, 0xFE, 0x00, 0x00, 0x07, 0xFE, 0x7F, 0xC0, 0x00, 0x00, + 0x7F, 0xEF, 0xFC, 0x00, 0x00, 0x03, 0xFE, 0xFF, 0xC0, 0x00, 0x00, 0x3F, + 0xF0, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x07, + 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, + 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x01, 0xFF, 0xFF, + 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, + 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, + 0xFE, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFB, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0x01, 0xFF, 0xBF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF3, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x03, 0xFE, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0xE3, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x3F, 0xF0, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xC3, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF8, + 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0x01, 0xFF, 0x83, 0xFF, 0xFF, 0xFF, 0x00, + 0x00, 0x3F, 0xF0, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0x03, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xE0, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0x07, + 0xFC, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xC0, 0x3F, 0xFF, 0xFF, + 0xF0, 0x00, 0x1F, 0xF8, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0x80, + 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, + 0x03, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, + 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, + 0xFF, 0xF0, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, + 0x7F, 0xE0, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x03, 0xFF, + 0xFF, 0xFF, 0xF0, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0x1F, 0xF8, + 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xF1, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xFF, + 0xFF, 0x3F, 0xF0, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0x00, 0x00, + 0x3F, 0xFF, 0xFF, 0xFF, 0x7F, 0xE0, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFE, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xF0, 0x00, + 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x07, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, + 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, + 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xE0, 0x1F, + 0xC0, 0x7F, 0xF8, 0x00, 0x0E, 0x07, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xF8, + 0x00, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x01, + 0xFF, 0xC0, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, + 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x01, 0xFF, + 0x80, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, + 0x03, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0xFF, 0xC0, + 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x01, + 0xFF, 0x80, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, + 0x00, 0x01, 0xFF, 0x80, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x7F, + 0xF0, 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, + 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x0E, 0x07, 0xFF, + 0xF0, 0x07, 0xF0, 0x3F, 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFE, + 0x03, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, + 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xF8, 0x00, + 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xE0, + 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x00, + 0x07, 0xF0, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0xFE, 0x00, + 0x00, 0x01, 0x0F, 0xF0, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x7F, + 0xFC, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, + 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x03, 0xF8, 0x00, + 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x1F, 0xF8, 0x00, + 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x1F, 0xF8, 0x00, + 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x0E, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, + 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, + 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFE, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0x80, + 0x00, 0x03, 0xFF, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x0F, 0xFC, 0x00, + 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x7F, 0xE0, 0x00, + 0x00, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xFF, + 0x87, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0xFC, + 0x3F, 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xE1, + 0xFF, 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x0F, + 0xFC, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x7F, + 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x03, 0xFF, + 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xF0, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x07, + 0xC0, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x01, 0xFF, + 0x80, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x7F, 0xE0, + 0x00, 0x01, 0xFF, 0x80, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x01, 0xF0, 0x00, + 0x00, 0x01, 0xC0, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFB, + 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xDF, + 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFE, 0xFF, + 0xC0, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x07, 0xFE, + 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, + 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xFF, + 0xFF, 0xC3, 0xFF, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, + 0xFE, 0x1F, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, + 0xF0, 0xFF, 0xFF, 0xFF, 0xE1, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, + 0x07, 0xFE, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, + 0x3F, 0xF0, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x01, + 0xFF, 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x0F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0E, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x03, + 0xFE, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x01, 0xFF, + 0xFF, 0x00, 0x07, 0xFD, 0xFF, 0x00, 0x07, 0xF1, 0xFC, 0x00, 0x0F, 0x80, + 0xF8, 0x00, 0x0E, 0x00, 0xE0, 0x00, 0x08, 0x00, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, + 0xFD, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, + 0xEF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, + 0x7F, 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x03, + 0xFF, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x1F, + 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0xFF, + 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xFF, 0x87, 0xFF, + 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, + 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, 0xF0, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0x80, + 0x00, 0x03, 0xFF, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x0F, 0xFC, 0x00, + 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x7F, 0xE0, 0x00, + 0x00, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, + 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x03, 0xC0, 0x0F, 0x00, + 0x1F, 0xE0, 0x7F, 0x80, 0x3F, 0xC0, 0xFF, 0x00, 0xFF, 0xC3, 0xFF, 0x01, + 0xFF, 0x87, 0xFE, 0x03, 0xFF, 0x0F, 0xFC, 0x07, 0xFE, 0x1F, 0xF8, 0x07, + 0xF8, 0x1F, 0xE0, 0x0F, 0xF0, 0x3F, 0xC0, 0x07, 0x80, 0x1E, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, + 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, + 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xBF, 0xF0, 0x00, + 0x00, 0x7F, 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0x80, 0x00, + 0x03, 0xFF, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, + 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xF0, + 0xFF, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xFF, 0x87, + 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0xFC, 0x3F, + 0xFF, 0xFF, 0xF8, 0x7F, 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x01, 0xFF, + 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x0F, 0xFC, + 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x7F, 0xE0, + 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x04, 0x00, 0x1C, 0x00, 0x7C, 0x01, 0xFC, + 0x0F, 0xFC, 0x0F, 0xFC, 0x0F, 0xFC, 0x0F, 0xFC, 0x0F, 0xFC, 0x0F, 0xFC, + 0x0F, 0xF0, 0x07, 0xC0, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x1F, + 0xF8, 0x3F, 0xF0, 0x7F, 0xE0, 0xFF, 0xC1, 0xFF, 0x83, 0xFF, 0x07, 0xFE, + 0x0F, 0xFC, 0x1F, 0xF8, 0x3F, 0xF0, 0x7F, 0xE0, 0xFF, 0xC1, 0xFF, 0x83, + 0xFF, 0x07, 0xFE, 0x0F, 0xFC, 0x1F, 0xF8, 0x3F, 0xF0, 0x7F, 0xE0, 0xFF, + 0xC1, 0xFF, 0x83, 0xFF, 0x07, 0xFE, 0x0F, 0xFC, 0x1F, 0xF8, 0x3F, 0xF0, + 0x7F, 0xE0, 0xFF, 0xC1, 0xFF, 0x83, 0xFF, 0x07, 0xFE, 0x0F, 0xFC, 0x1F, + 0xF8, 0x3F, 0xF0, 0x7F, 0xE0, 0xFF, 0xC1, 0xFF, 0x83, 0xFF, 0x07, 0xFE, + 0x0F, 0xFC, 0x1F, 0xF8, 0x3F, 0xF0, 0x7F, 0xE0, 0xFF, 0xC0, 0x00, 0x40, + 0x01, 0xC0, 0x07, 0xC0, 0x1F, 0xC0, 0x7F, 0xE1, 0xFF, 0x87, 0xFE, 0x1F, + 0xF8, 0x7F, 0xE1, 0xFF, 0x81, 0xFE, 0x01, 0xF0, 0x01, 0xC0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x7F, 0xE0, 0xFF, 0xC1, 0xFF, 0x83, + 0xFF, 0x07, 0xFE, 0x0F, 0xFC, 0x1F, 0xF8, 0x3F, 0xF0, 0x7F, 0xE0, 0xFF, + 0xC1, 0xFF, 0x83, 0xFF, 0x07, 0xFE, 0x0F, 0xFC, 0x1F, 0xF8, 0x3F, 0xF0, + 0x7F, 0xE0, 0xFF, 0xC1, 0xFF, 0x83, 0xFF, 0x07, 0xFE, 0x0F, 0xFC, 0x1F, + 0xF8, 0x3F, 0xF0, 0x7F, 0xE0, 0xFF, 0xC1, 0xFF, 0x83, 0xFF, 0x07, 0xFE, + 0x0F, 0xFC, 0x1F, 0xF8, 0x3F, 0xF0, 0x7F, 0xE0, 0xFF, 0xC1, 0xFF, 0x83, + 0xFF, 0x07, 0xFE, 0x0F, 0xFC, 0x1F, 0xF8, 0x3F, 0xF0, 0x7F, 0xE0, 0xFF, + 0xC1, 0xFF, 0x80, 0x00, 0x40, 0x00, 0x1C, 0x00, 0x07, 0xC0, 0x01, 0xFC, + 0x00, 0x7F, 0xC0, 0x1F, 0xFC, 0x0F, 0xFF, 0xE3, 0xFF, 0xFE, 0xFF, 0xBF, + 0xEF, 0xE3, 0xF9, 0xF0, 0x1F, 0x1C, 0x01, 0xC1, 0x00, 0x10, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x0F, 0xFC, 0x01, 0xFF, 0x80, 0x3F, 0xF0, + 0x07, 0xFE, 0x00, 0xFF, 0xC0, 0x1F, 0xF8, 0x03, 0xFF, 0x00, 0x7F, 0xE0, + 0x0F, 0xFC, 0x01, 0xFF, 0x80, 0x3F, 0xF0, 0x07, 0xFE, 0x00, 0xFF, 0xC0, + 0x1F, 0xF8, 0x03, 0xFF, 0x00, 0x7F, 0xE0, 0x0F, 0xFC, 0x01, 0xFF, 0x80, + 0x3F, 0xF0, 0x07, 0xFE, 0x00, 0xFF, 0xC0, 0x1F, 0xF8, 0x03, 0xFF, 0x00, + 0x7F, 0xE0, 0x0F, 0xFC, 0x01, 0xFF, 0x80, 0x3F, 0xF0, 0x07, 0xFE, 0x00, + 0xFF, 0xC0, 0x1F, 0xF8, 0x03, 0xFF, 0x00, 0x7F, 0xE0, 0x0F, 0xFC, 0x01, + 0xFF, 0x80, 0x3F, 0xF0, 0x07, 0xFE, 0x00, 0xFF, 0xC0, 0x1F, 0xF8, 0x03, + 0xFF, 0x00, 0x7F, 0xE0, 0x0F, 0xFC, 0x01, 0xFF, 0x80, 0x3F, 0xF0, 0x00, + 0x1E, 0x00, 0x78, 0x7F, 0x81, 0xFE, 0x7F, 0x81, 0xFE, 0xFF, 0xC3, 0xFF, + 0xFF, 0xC3, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xC3, 0xFF, 0x7F, 0x81, 0xFE, + 0x7F, 0x81, 0xFE, 0x1E, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, + 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, + 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, + 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, + 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, + 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, + 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, + 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, + 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, + 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, + 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, + 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0x00, + 0x7F, 0xFF, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x7F, + 0xFF, 0xFF, 0xFE, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, + 0xFF, 0xFF, 0x80, 0x07, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xFF, + 0xFF, 0xE0, 0x07, 0xFE, 0x00, 0xFF, 0xFF, 0x00, 0x7F, 0xE0, 0x01, 0xFF, + 0xF8, 0x07, 0xFE, 0x00, 0x07, 0xFF, 0x80, 0x7F, 0xE0, 0x00, 0x3F, 0xFC, + 0x07, 0xFE, 0x00, 0x01, 0xFF, 0xC0, 0x7F, 0xE0, 0x00, 0x0F, 0xFE, 0x07, + 0xFE, 0x00, 0x00, 0xFF, 0xE0, 0x7F, 0xE0, 0x00, 0x07, 0xFE, 0x07, 0xFE, + 0x00, 0x00, 0x7F, 0xE0, 0x7F, 0xE0, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, + 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, + 0x3F, 0xFF, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x3F, + 0xFF, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x3F, 0xF0, + 0x7F, 0xE0, 0x00, 0x03, 0xFF, 0x07, 0xFE, 0x00, 0x00, 0x3F, 0xF0, 0x7F, + 0xE0, 0x00, 0x07, 0xFF, 0x07, 0xFE, 0x00, 0x00, 0x7F, 0xE0, 0x7F, 0xE0, + 0x00, 0x07, 0xFE, 0x07, 0xFE, 0x00, 0x00, 0xFF, 0xE0, 0x7F, 0xE0, 0x00, + 0x0F, 0xFE, 0x07, 0xFE, 0x00, 0x01, 0xFF, 0xC0, 0x7F, 0xE0, 0x00, 0x3F, + 0xFC, 0x07, 0xFE, 0x00, 0x07, 0xFF, 0x80, 0x7F, 0xE0, 0x01, 0xFF, 0xF8, + 0x07, 0xFE, 0x00, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xE0, 0x07, + 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x80, 0x07, 0xFF, + 0xFF, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xFF, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1F, 0x00, 0xE0, 0x00, + 0x01, 0xFF, 0x87, 0xC0, 0x00, 0x0F, 0xFF, 0xFF, 0x80, 0x00, 0x7F, 0xFF, + 0xFC, 0x00, 0x01, 0xFF, 0xFF, 0xF0, 0x00, 0x0F, 0xFF, 0xFF, 0x80, 0x00, + 0x1F, 0xFF, 0xFC, 0x00, 0x00, 0x3C, 0x3F, 0xE0, 0x00, 0x00, 0x20, 0x1F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, + 0xFF, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xFF, + 0x80, 0x00, 0x3F, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0x03, + 0xFF, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xFF, + 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xFF, 0x80, 0x0F, + 0xFF, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, + 0xF8, 0x03, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0xE0, 0x3F, + 0xFF, 0xFD, 0xFF, 0x80, 0xFF, 0xFF, 0xF3, 0xFF, 0x03, 0xFF, 0xFF, 0xC7, + 0xFE, 0x0F, 0xFF, 0xFF, 0x0F, 0xFC, 0x3F, 0xFF, 0xFC, 0x3F, 0xF0, 0xFF, + 0xFF, 0xF0, 0x7F, 0xE3, 0xFF, 0xFF, 0xC0, 0xFF, 0xCF, 0xFF, 0xFF, 0x01, + 0xFF, 0x3F, 0xFF, 0xFC, 0x07, 0xFE, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, + 0xFF, 0xC0, 0x1F, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xFC, 0x00, + 0xFF, 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, + 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0xFF, 0xF0, 0x00, + 0x7F, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFF, + 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0xF0, 0x00, 0x0F, 0xFF, 0xFF, 0xC0, 0x00, + 0x3F, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xFF, + 0xF0, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xFF, 0x00, 0x00, + 0x1F, 0xF0, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, + 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x00, + 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x0F, + 0xF0, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x01, 0xC0, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x00, + 0x01, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0x0F, + 0xFF, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, + 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFE, 0x07, + 0xFF, 0xF0, 0x0F, 0xFF, 0x00, 0x0F, 0xFF, 0x01, 0xFF, 0xE0, 0x00, 0x7F, + 0xF8, 0x3F, 0xFC, 0x00, 0x03, 0xFF, 0xC3, 0xFF, 0x80, 0x00, 0x1F, 0xFC, + 0x3F, 0xF0, 0x00, 0x00, 0xFF, 0xC7, 0xFF, 0x00, 0x00, 0x0F, 0xFE, 0x7F, + 0xE0, 0x00, 0x00, 0x7F, 0xE7, 0xFE, 0x00, 0x00, 0x07, 0xFE, 0xFF, 0xE0, + 0x00, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, + 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, + 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, + 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, + 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFE, + 0x00, 0x00, 0x07, 0xFF, 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xE7, 0xFE, 0x00, + 0x00, 0x07, 0xFE, 0x7F, 0xF0, 0x00, 0x00, 0xFF, 0xE3, 0xFF, 0x00, 0x00, + 0x0F, 0xFC, 0x3F, 0xF8, 0x00, 0x01, 0xFF, 0xC3, 0xFF, 0xC0, 0x00, 0x3F, + 0xFC, 0x1F, 0xFE, 0x00, 0x07, 0xFF, 0x81, 0xFF, 0xF0, 0x00, 0xFF, 0xF8, + 0x0F, 0xFF, 0xC0, 0x3F, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xE0, 0x03, + 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0xFF, + 0xFF, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x1F, 0xFF, + 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x7F, 0xE0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, + 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, + 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x00, + 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x00, + 0x01, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0x0F, + 0xFF, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, + 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFE, 0x07, + 0xFF, 0xF0, 0x0F, 0xFF, 0x00, 0x0F, 0xFF, 0x01, 0xFF, 0xE0, 0x00, 0x7F, + 0xF8, 0x3F, 0xFC, 0x00, 0x03, 0xFF, 0xC3, 0xFF, 0x80, 0x00, 0x1F, 0xFC, + 0x3F, 0xF0, 0x00, 0x00, 0xFF, 0xC7, 0xFF, 0x00, 0x00, 0x0F, 0xFE, 0x7F, + 0xE0, 0x00, 0x00, 0x7F, 0xE7, 0xFE, 0x00, 0x00, 0x07, 0xFE, 0xFF, 0xE0, + 0x00, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, + 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, + 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, + 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, + 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFE, + 0x00, 0x00, 0x07, 0xFF, 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xE7, 0xFE, 0x00, + 0x00, 0x07, 0xFE, 0x7F, 0xF0, 0x00, 0x00, 0xFF, 0xE3, 0xFF, 0x00, 0x00, + 0x0F, 0xFC, 0x3F, 0xF8, 0x00, 0x01, 0xFF, 0xC3, 0xFF, 0xC0, 0x00, 0x3F, + 0xFC, 0x1F, 0xFE, 0x00, 0x07, 0xFF, 0x81, 0xFF, 0xF0, 0x00, 0xFF, 0xF8, + 0x0F, 0xFF, 0xC0, 0x3F, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xE0, 0x03, + 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0xFF, + 0xFF, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x1F, 0xFF, + 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x7F, 0xE0, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, + 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, + 0x01, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x00, 0x07, + 0xFD, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0x8F, 0xE0, 0x00, 0x00, 0x03, 0xE0, + 0x3E, 0x00, 0x00, 0x00, 0x1C, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x80, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, + 0x00, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0x80, 0x00, + 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x1F, + 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, + 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xE0, 0x7F, 0xFF, 0x00, 0xFF, 0xF0, 0x00, + 0xFF, 0xF0, 0x1F, 0xFE, 0x00, 0x07, 0xFF, 0x83, 0xFF, 0xC0, 0x00, 0x3F, + 0xFC, 0x3F, 0xF8, 0x00, 0x01, 0xFF, 0xC3, 0xFF, 0x00, 0x00, 0x0F, 0xFC, + 0x7F, 0xF0, 0x00, 0x00, 0xFF, 0xE7, 0xFE, 0x00, 0x00, 0x07, 0xFE, 0x7F, + 0xE0, 0x00, 0x00, 0x7F, 0xEF, 0xFE, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xC0, + 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, + 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, + 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, + 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, + 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x7F, 0xF7, 0xFE, + 0x00, 0x00, 0x07, 0xFE, 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xE7, 0xFF, 0x00, + 0x00, 0x0F, 0xFE, 0x3F, 0xF0, 0x00, 0x00, 0xFF, 0xC3, 0xFF, 0x80, 0x00, + 0x1F, 0xFC, 0x3F, 0xFC, 0x00, 0x03, 0xFF, 0xC1, 0xFF, 0xE0, 0x00, 0x7F, + 0xF8, 0x1F, 0xFF, 0x00, 0x0F, 0xFF, 0x80, 0xFF, 0xFC, 0x03, 0xFF, 0xF0, + 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xC0, 0x01, + 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7F, + 0xFF, 0xFF, 0xE0, 0x00, 0x01, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, + 0xFE, 0x00, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x0F, 0x80, 0x70, 0x00, 0x00, 0x03, 0xFF, 0x0F, 0x80, + 0x00, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0x80, 0x00, + 0x00, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0x87, 0xFC, 0x00, 0x00, 0x00, 0x10, + 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFE, 0x00, + 0x00, 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xF8, 0x00, + 0x00, 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0x00, 0x01, + 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, + 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFE, 0x07, 0xFF, 0xF0, 0x0F, 0xFF, 0x00, + 0x0F, 0xFF, 0x01, 0xFF, 0xE0, 0x00, 0x7F, 0xF8, 0x3F, 0xFC, 0x00, 0x03, + 0xFF, 0xC3, 0xFF, 0x80, 0x00, 0x1F, 0xFC, 0x3F, 0xF0, 0x00, 0x00, 0xFF, + 0xC7, 0xFF, 0x00, 0x00, 0x0F, 0xFE, 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xE7, + 0xFE, 0x00, 0x00, 0x07, 0xFE, 0xFF, 0xE0, 0x00, 0x00, 0x7F, 0xFF, 0xFC, + 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, + 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, + 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x03, + 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xFF, + 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFE, 0x00, 0x00, 0x07, 0xFF, 0x7F, + 0xE0, 0x00, 0x00, 0x7F, 0xE7, 0xFE, 0x00, 0x00, 0x07, 0xFE, 0x7F, 0xF0, + 0x00, 0x00, 0xFF, 0xE3, 0xFF, 0x00, 0x00, 0x0F, 0xFC, 0x3F, 0xF8, 0x00, + 0x01, 0xFF, 0xC3, 0xFF, 0xC0, 0x00, 0x3F, 0xFC, 0x1F, 0xFE, 0x00, 0x07, + 0xFF, 0x81, 0xFF, 0xF0, 0x00, 0xFF, 0xF8, 0x0F, 0xFF, 0xC0, 0x3F, 0xFF, + 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, + 0x1F, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x07, + 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x7F, + 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x07, 0x80, + 0x1E, 0x00, 0x00, 0x01, 0xFE, 0x07, 0xF8, 0x00, 0x00, 0x1F, 0xE0, 0x7F, + 0x80, 0x00, 0x03, 0xFF, 0x0F, 0xFC, 0x00, 0x00, 0x3F, 0xF0, 0xFF, 0xC0, + 0x00, 0x03, 0xFF, 0x0F, 0xFC, 0x00, 0x00, 0x3F, 0xF0, 0xFF, 0xC0, 0x00, + 0x01, 0xFE, 0x07, 0xF8, 0x00, 0x00, 0x1F, 0xE0, 0x7F, 0x80, 0x00, 0x00, + 0x78, 0x01, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFE, + 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xF8, + 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0x00, + 0x01, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xC0, 0x07, + 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFE, 0x07, 0xFF, 0xF0, 0x0F, 0xFF, + 0x00, 0x0F, 0xFF, 0x01, 0xFF, 0xE0, 0x00, 0x7F, 0xF8, 0x3F, 0xFC, 0x00, + 0x03, 0xFF, 0xC3, 0xFF, 0x80, 0x00, 0x1F, 0xFC, 0x3F, 0xF0, 0x00, 0x00, + 0xFF, 0xC7, 0xFF, 0x00, 0x00, 0x0F, 0xFE, 0x7F, 0xE0, 0x00, 0x00, 0x7F, + 0xE7, 0xFE, 0x00, 0x00, 0x07, 0xFE, 0xFF, 0xE0, 0x00, 0x00, 0x7F, 0xFF, + 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFC, + 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, + 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, + 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x03, + 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFE, 0x00, 0x00, 0x07, 0xFF, + 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xE7, 0xFE, 0x00, 0x00, 0x07, 0xFE, 0x7F, + 0xF0, 0x00, 0x00, 0xFF, 0xE3, 0xFF, 0x00, 0x00, 0x0F, 0xFC, 0x3F, 0xF8, + 0x00, 0x01, 0xFF, 0xC3, 0xFF, 0xC0, 0x00, 0x3F, 0xFC, 0x1F, 0xFE, 0x00, + 0x07, 0xFF, 0x81, 0xFF, 0xF0, 0x00, 0xFF, 0xF8, 0x0F, 0xFF, 0xC0, 0x3F, + 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0xFF, 0xFC, + 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, + 0x07, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0x80, 0x00, 0x00, + 0x7F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x04, 0x00, + 0x02, 0x00, 0xE0, 0x00, 0x70, 0x1F, 0x00, 0x0F, 0x83, 0xF8, 0x01, 0xFC, + 0x7F, 0xC0, 0x3F, 0xEF, 0xFE, 0x07, 0xFF, 0x7F, 0xF0, 0xFF, 0xE3, 0xFF, + 0x9F, 0xFC, 0x1F, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFE, + 0x00, 0x3F, 0xFF, 0xC0, 0x01, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0x00, 0x00, + 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0x80, 0x03, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, + 0xE0, 0x0F, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xF8, 0x3F, 0xF9, 0xFF, 0xC7, + 0xFF, 0x0F, 0xFE, 0xFF, 0xE0, 0x7F, 0xF7, 0xFC, 0x03, 0xFE, 0x3F, 0x80, + 0x1F, 0xC1, 0xF0, 0x00, 0xF8, 0x0E, 0x00, 0x07, 0x00, 0x40, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, + 0x00, 0x7F, 0xE0, 0x1F, 0x00, 0x00, 0x3F, 0xFF, 0xE3, 0xFC, 0x00, 0x1F, + 0xFF, 0xFF, 0xBF, 0xC0, 0x03, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xFF, + 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xC0, 0x7F, 0xFF, + 0x00, 0xFF, 0xF0, 0x01, 0xFF, 0xF0, 0x1F, 0xFE, 0x00, 0x1F, 0xFF, 0x83, + 0xFF, 0xC0, 0x01, 0xFF, 0xFC, 0x3F, 0xF8, 0x00, 0x3F, 0xFF, 0xC3, 0xFF, + 0x00, 0x07, 0xFF, 0xFC, 0x7F, 0xF0, 0x00, 0xFF, 0xFF, 0xE7, 0xFE, 0x00, + 0x1F, 0xFF, 0xFE, 0x7F, 0xE0, 0x01, 0xFE, 0x7F, 0xEF, 0xFE, 0x00, 0x3F, + 0xC7, 0xFF, 0xFF, 0xC0, 0x07, 0xFC, 0x7F, 0xFF, 0xFC, 0x00, 0xFF, 0x83, + 0xFF, 0xFF, 0xC0, 0x0F, 0xF0, 0x3F, 0xFF, 0xFC, 0x01, 0xFE, 0x03, 0xFF, + 0xFF, 0xC0, 0x3F, 0xE0, 0x3F, 0xFF, 0xFC, 0x07, 0xFC, 0x03, 0xFF, 0xFF, + 0xC0, 0x7F, 0x80, 0x3F, 0xFF, 0xFC, 0x0F, 0xF0, 0x03, 0xFF, 0xFF, 0xC1, + 0xFE, 0x00, 0x3F, 0xFF, 0xFE, 0x3F, 0xE0, 0x03, 0xFF, 0xFF, 0xE7, 0xFC, + 0x00, 0x7F, 0xF7, 0xFE, 0x7F, 0x80, 0x07, 0xFE, 0x7F, 0xFF, 0xF0, 0x00, + 0x7F, 0xE7, 0xFF, 0xFF, 0x00, 0x0F, 0xFE, 0x3F, 0xFF, 0xE0, 0x00, 0xFF, + 0xC3, 0xFF, 0xFC, 0x00, 0x1F, 0xFC, 0x3F, 0xFF, 0x80, 0x03, 0xFF, 0xC1, + 0xFF, 0xF8, 0x00, 0x7F, 0xF8, 0x1F, 0xFF, 0x80, 0x0F, 0xFF, 0x80, 0xFF, + 0xFE, 0x03, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, + 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFF, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xE0, 0x03, 0xFD, 0xFF, 0xFF, 0xF8, + 0x00, 0x3F, 0xC7, 0xFF, 0xFE, 0x00, 0x01, 0xF8, 0x07, 0xFE, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, + 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0xC0, + 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x0F, + 0xFC, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, + 0x00, 0x7C, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, + 0x7F, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0xE0, + 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, + 0xF0, 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x7F, + 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, + 0x3F, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xF0, + 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, + 0xF8, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, + 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xF0, 0x00, + 0x1F, 0xFF, 0xFE, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0xF8, + 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, + 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x1F, + 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0xFF, 0xE0, 0x00, 0xFF, 0xCF, 0xFC, 0x00, + 0x1F, 0xF9, 0xFF, 0xC0, 0x07, 0xFF, 0x3F, 0xFC, 0x01, 0xFF, 0xE3, 0xFF, + 0xE0, 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xC0, + 0x7F, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xFF, + 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x00, 0xFF, + 0xC0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, + 0x00, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x0F, 0xFC, 0x00, + 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xF0, + 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x3F, + 0xC0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x01, + 0xFF, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0x80, + 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x03, 0xFF, 0xFF, + 0xC0, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x01, 0xFF, + 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0x80, 0x00, + 0xFF, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x03, 0xFF, 0xFF, 0xC0, + 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFF, + 0xE0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0x80, 0x00, 0xFF, + 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, + 0x7F, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0xE0, + 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, + 0xF0, 0x00, 0x1F, 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0xFF, 0xE0, 0x00, 0xFF, + 0xCF, 0xFC, 0x00, 0x1F, 0xF9, 0xFF, 0xC0, 0x07, 0xFF, 0x3F, 0xFC, 0x01, + 0xFF, 0xE3, 0xFF, 0xE0, 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, + 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xFC, 0x00, + 0x7F, 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xE0, + 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x1C, + 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, + 0x7F, 0xC0, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x0F, 0xFF, 0xE0, 0x00, + 0x03, 0xFF, 0xFE, 0x00, 0x00, 0xFF, 0xBF, 0xE0, 0x00, 0x0F, 0xE3, 0xF8, + 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x1C, 0x01, 0xC0, 0x00, 0x01, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFE, + 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, + 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x07, + 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xFE, 0x00, + 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFF, + 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x07, 0xFF, + 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x03, + 0xFF, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFF, 0x00, + 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, + 0x80, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x03, 0xFF, + 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x01, + 0xFF, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0x80, + 0x00, 0xFF, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xFF, 0x00, 0x07, 0xFE, 0x7F, + 0xE0, 0x00, 0xFF, 0xCF, 0xFE, 0x00, 0x3F, 0xF9, 0xFF, 0xE0, 0x0F, 0xFF, + 0x1F, 0xFF, 0x07, 0xFF, 0xC3, 0xFF, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, + 0xFE, 0x03, 0xFF, 0xFF, 0xFF, 0x80, 0x3F, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, + 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xFE, 0x00, 0x01, 0xFF, 0xFF, 0x00, 0x00, + 0x07, 0xFE, 0x00, 0x00, 0x00, 0x78, 0x01, 0xE0, 0x00, 0x3F, 0xC0, 0xFF, + 0x00, 0x07, 0xF8, 0x1F, 0xE0, 0x01, 0xFF, 0x87, 0xFE, 0x00, 0x3F, 0xF0, + 0xFF, 0xC0, 0x07, 0xFE, 0x1F, 0xF8, 0x00, 0xFF, 0xC3, 0xFF, 0x00, 0x0F, + 0xF0, 0x3F, 0xC0, 0x01, 0xFE, 0x07, 0xF8, 0x00, 0x0F, 0x00, 0x3C, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x1F, 0xFF, 0xFE, 0x00, + 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFF, + 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x07, 0xFF, + 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x03, + 0xFF, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFF, 0x00, + 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, + 0x80, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x03, 0xFF, + 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x01, + 0xFF, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0x80, + 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x03, 0xFF, 0xFF, + 0xC0, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x01, 0xFF, + 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x01, + 0xFF, 0xFF, 0xF8, 0x00, 0x3F, 0xF3, 0xFF, 0x00, 0x07, 0xFE, 0x7F, 0xF0, + 0x01, 0xFF, 0xCF, 0xFF, 0x00, 0x7F, 0xF8, 0xFF, 0xF8, 0x3F, 0xFE, 0x1F, + 0xFF, 0xFF, 0xFF, 0xC1, 0xFF, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xFC, + 0x01, 0xFF, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, + 0xF0, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x3E, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x0F, 0xFC, + 0x00, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, + 0x00, 0x01, 0xFF, 0x80, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x00, + 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xF0, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xE0, 0x00, 0x01, 0xFF, 0xDF, 0xF8, 0x00, 0x00, 0x7F, 0xE7, 0xFF, 0x00, + 0x00, 0x3F, 0xF8, 0xFF, 0xC0, 0x00, 0x0F, 0xFC, 0x3F, 0xF8, 0x00, 0x07, + 0xFF, 0x07, 0xFE, 0x00, 0x01, 0xFF, 0x81, 0xFF, 0xC0, 0x00, 0xFF, 0xE0, + 0x3F, 0xF0, 0x00, 0x3F, 0xF0, 0x07, 0xFE, 0x00, 0x1F, 0xF8, 0x01, 0xFF, + 0x80, 0x0F, 0xFE, 0x00, 0x3F, 0xF0, 0x03, 0xFF, 0x00, 0x0F, 0xFE, 0x01, + 0xFF, 0xC0, 0x01, 0xFF, 0x80, 0x7F, 0xE0, 0x00, 0x7F, 0xF0, 0x3F, 0xF8, + 0x00, 0x0F, 0xFE, 0x1F, 0xFC, 0x00, 0x01, 0xFF, 0x87, 0xFE, 0x00, 0x00, + 0x7F, 0xF3, 0xFF, 0x80, 0x00, 0x0F, 0xFD, 0xFF, 0xC0, 0x00, 0x03, 0xFF, + 0xFF, 0xE0, 0x00, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x00, 0x0F, 0xFF, 0xFC, + 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00, + 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x00, 0x00, + 0x7F, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x03, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, + 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x0F, + 0xFC, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC0, + 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, + 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x00, + 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x03, 0xFF, + 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x0F, 0xFC, + 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x3F, + 0xF0, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xFE, 0x00, + 0xFF, 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xFF, + 0xC3, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, + 0xFF, 0xCF, 0xFC, 0x01, 0xFF, 0xFB, 0xFF, 0x00, 0x1F, 0xFE, 0xFF, 0xC0, + 0x01, 0xFF, 0xBF, 0xF0, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0xFF, + 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x3F, 0xFF, + 0xFC, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, + 0xFF, 0xF0, 0x00, 0x7F, 0xEF, 0xFC, 0x00, 0x7F, 0xFB, 0xFF, 0x00, 0xFF, + 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, + 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, + 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, + 0xC0, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x03, + 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, + 0x0F, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, + 0x00, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x7F, + 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xFF, 0x80, + 0x3F, 0xFF, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0xFF, 0xC0, 0x7F, 0xF8, 0x1F, + 0xFC, 0x07, 0xFE, 0x00, 0xFF, 0xC0, 0x7F, 0xC0, 0x07, 0xFC, 0x0F, 0xFC, + 0x00, 0x7F, 0xC0, 0xFF, 0x80, 0x07, 0xFC, 0x0F, 0xF8, 0x00, 0x7F, 0xC0, + 0xFF, 0x80, 0x0F, 0xF8, 0x0F, 0xF8, 0x00, 0xFF, 0x80, 0xFF, 0x80, 0x1F, + 0xF0, 0x0F, 0xF8, 0x03, 0xFF, 0x00, 0xFF, 0x80, 0x7F, 0xE0, 0x0F, 0xF8, + 0x0F, 0xFC, 0x00, 0xFF, 0x80, 0xFF, 0x80, 0x0F, 0xF8, 0x1F, 0xF0, 0x00, + 0xFF, 0x83, 0xFE, 0x00, 0x0F, 0xF8, 0x3F, 0xE0, 0x00, 0xFF, 0x83, 0xFE, + 0x00, 0x0F, 0xF8, 0x3F, 0xE0, 0x00, 0xFF, 0x83, 0xFF, 0x00, 0x0F, 0xF8, + 0x3F, 0xFC, 0x00, 0xFF, 0x81, 0xFF, 0xF0, 0x0F, 0xF8, 0x1F, 0xFF, 0xC0, + 0xFF, 0x80, 0xFF, 0xFE, 0x0F, 0xF8, 0x07, 0xFF, 0xF8, 0xFF, 0x80, 0x1F, + 0xFF, 0xCF, 0xF8, 0x00, 0x7F, 0xFE, 0xFF, 0x80, 0x01, 0xFF, 0xEF, 0xF8, + 0x00, 0x07, 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x01, 0xFF, + 0xFF, 0x80, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x01, 0xFF, 0xFF, 0x82, 0x00, + 0x3F, 0xFF, 0xF8, 0x3C, 0x07, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xEF, 0xF8, + 0x7F, 0xFF, 0xFE, 0xFF, 0x87, 0xFF, 0xFF, 0xEF, 0xF8, 0x7F, 0xFF, 0xFC, + 0xFF, 0x87, 0xFF, 0xFF, 0x8F, 0xF8, 0x7F, 0xFF, 0xF0, 0xFF, 0x87, 0xFF, + 0xFC, 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x10, 0x00, 0x00, 0x03, 0x80, + 0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x03, 0xFF, 0x00, 0x00, + 0x1F, 0xF8, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x3F, + 0xF0, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x3E, 0x00, + 0x00, 0x01, 0xC0, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0xFF, + 0x01, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFC, 0x0F, + 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFE, 0x0E, 0x00, 0xFF, 0xE0, 0x00, 0x03, + 0xFF, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x1F, 0xF0, + 0x00, 0x01, 0xFF, 0x00, 0x7F, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0x0F, 0xFF, + 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, + 0x7F, 0xE0, 0x1F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xF8, + 0x01, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xE0, 0x1F, + 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0x3F, + 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, + 0xFF, 0x00, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x0E, 0x00, + 0x00, 0x01, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xFE, 0x00, 0x00, + 0xFF, 0xC0, 0x00, 0x1F, 0xF8, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x7F, 0xE0, + 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x03, 0xE0, 0x00, 0x00, + 0x1C, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0xFF, 0x01, + 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF, + 0xFF, 0xE0, 0xFF, 0xFF, 0xFE, 0x0E, 0x00, 0xFF, 0xE0, 0x00, 0x03, 0xFF, + 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x1F, 0xF0, 0x00, + 0x01, 0xFF, 0x00, 0x7F, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, + 0xF1, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0x7F, + 0xE0, 0x1F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xF8, 0x01, + 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, + 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, + 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, + 0x00, 0xFF, 0xFC, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, + 0x1F, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x0F, 0xFE, + 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, 0xC0, 0x0F, 0xFB, 0xFE, 0x00, + 0x7F, 0x1F, 0xC0, 0x07, 0xC0, 0x7C, 0x00, 0x38, 0x03, 0x80, 0x01, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFE, 0x00, + 0x1F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0x81, 0xFF, + 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, + 0xE0, 0xE0, 0x0F, 0xFE, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x03, 0xFF, 0x00, + 0x00, 0x1F, 0xF0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x1F, 0xF0, 0x07, 0xFF, + 0xFF, 0x03, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xF3, + 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xF7, 0xFE, 0x01, 0xFF, 0xFF, 0xC0, + 0x1F, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xF8, 0x01, 0xFF, + 0xFF, 0xC0, 0x1F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, + 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, + 0xF0, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xC0, 0x00, + 0x00, 0x04, 0x00, 0x0F, 0x80, 0x70, 0x03, 0xFF, 0x0F, 0x80, 0x7F, 0xFF, + 0xFC, 0x0F, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0x00, + 0xFF, 0xFF, 0xE0, 0x07, 0x87, 0xFC, 0x00, 0x10, 0x0F, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0xFF, 0x01, 0xFF, + 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, + 0xE0, 0xFF, 0xFF, 0xFE, 0x0E, 0x00, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0x00, + 0x00, 0x3F, 0xF0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x01, + 0xFF, 0x00, 0x7F, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF1, + 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0x7F, 0xE0, + 0x1F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xF8, 0x01, 0xFF, + 0xFF, 0x80, 0x1F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xFF, + 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, + 0xF1, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0x00, + 0xFF, 0xFC, 0x00, 0x07, 0x80, 0x1E, 0x01, 0xFE, 0x07, 0xF8, 0x1F, 0xE0, + 0x7F, 0x83, 0xFF, 0x0F, 0xFC, 0x3F, 0xF0, 0xFF, 0xC3, 0xFF, 0x0F, 0xFC, + 0x3F, 0xF0, 0xFF, 0xC1, 0xFE, 0x07, 0xF8, 0x1F, 0xE0, 0x7F, 0x80, 0x78, + 0x01, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xC0, 0x1F, + 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, + 0xFC, 0x0F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFE, 0x0E, 0x00, 0xFF, 0xE0, + 0x00, 0x03, 0xFF, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x01, 0xFF, 0x00, 0x00, + 0x1F, 0xF0, 0x00, 0x01, 0xFF, 0x00, 0x7F, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, + 0x0F, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xF7, 0xFF, + 0xFF, 0xFF, 0x7F, 0xE0, 0x1F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0x80, 0x1F, + 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, + 0xE0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, + 0xFF, 0x3F, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xF0, + 0x7F, 0xFF, 0xFF, 0x00, 0xFF, 0xFC, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x03, + 0xFF, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x07, 0xFF, 0x80, 0x00, 0xF8, 0x7C, + 0x00, 0x0F, 0x03, 0xC0, 0x00, 0xF0, 0x3C, 0x00, 0x0F, 0x03, 0xC0, 0x00, + 0xF0, 0x3C, 0x00, 0x0F, 0x87, 0xC0, 0x00, 0x7F, 0xF8, 0x00, 0x07, 0xFF, + 0x80, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x1F, 0xFF, + 0xFC, 0x01, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xFC, + 0x0F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xE0, 0xE0, + 0x0F, 0xFE, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x1F, + 0xF0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x1F, 0xF0, 0x07, 0xFF, 0xFF, 0x03, + 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, + 0xFF, 0x7F, 0xFF, 0xFF, 0xF7, 0xFE, 0x01, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, + 0xF8, 0x01, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xC0, + 0x1F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, + 0x7F, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xF0, 0xFF, + 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xC0, 0x00, 0xFF, 0xC0, + 0x01, 0xFE, 0x00, 0x0F, 0xFF, 0xFC, 0x07, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, + 0x0F, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0xCF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x0E, 0x00, + 0xFF, 0xFF, 0x0F, 0xFE, 0x00, 0x00, 0x3F, 0xFE, 0x01, 0xFF, 0x80, 0x00, + 0x0F, 0xFE, 0x00, 0x7F, 0xC0, 0x00, 0x03, 0xFF, 0x00, 0x3F, 0xE0, 0x00, + 0x01, 0xFF, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0xFF, 0x80, 0x07, 0xFC, 0x01, + 0xFF, 0xFF, 0xC0, 0x03, 0xFE, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, + 0xFE, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0x80, 0x00, 0x03, + 0xFE, 0x00, 0x7F, 0xC0, 0x00, 0x01, 0xFF, 0x00, 0x1F, 0xF0, 0x00, 0x00, + 0xFF, 0x80, 0x0F, 0xFC, 0x00, 0x00, 0x7F, 0xE0, 0x07, 0xFF, 0x00, 0x02, + 0x3F, 0xF8, 0x07, 0xFF, 0xE0, 0x0F, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFC, 0x0F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFE, 0x03, 0xFF, 0xFE, 0x0F, 0xFF, + 0xFE, 0x00, 0x1F, 0xF8, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xFC, 0x00, + 0x07, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, + 0xFC, 0x1F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFC, 0x3F, + 0xFC, 0x03, 0x8F, 0xFE, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x3F, 0xF0, 0x00, + 0x0F, 0xFC, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x3F, 0xE0, 0x00, 0x07, 0xFC, + 0x00, 0x00, 0xFF, 0x80, 0x00, 0x1F, 0xF0, 0x00, 0x03, 0xFE, 0x00, 0x00, + 0x7F, 0xC0, 0x00, 0x0F, 0xF8, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x1F, 0xF0, + 0x00, 0x03, 0xFE, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x07, 0xFE, 0x00, 0x00, + 0xFF, 0xF0, 0x07, 0x0F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF, + 0xFF, 0x80, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xE0, + 0x00, 0xFF, 0xFC, 0x00, 0x3F, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFF, + 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x0F, 0xE0, 0x00, + 0x01, 0xFC, 0x00, 0x00, 0x7F, 0x80, 0x03, 0xFF, 0xF0, 0x00, 0x7F, 0xFE, + 0x00, 0x0F, 0xFF, 0x80, 0x01, 0xFF, 0xE0, 0x00, 0x7F, 0xF8, 0x00, 0x03, + 0xFC, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x7C, + 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x0F, 0xFC, + 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x0F, 0xFC, + 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x07, 0xC0, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0xFF, 0xFC, 0x00, + 0x07, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFE, 0x01, + 0xFF, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xFC, 0x3F, + 0xF8, 0x3F, 0xF8, 0x7F, 0xE0, 0x1F, 0xF9, 0xFF, 0x80, 0x1F, 0xF3, 0xFE, + 0x00, 0x3F, 0xE7, 0xFC, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xE0, + 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x3F, 0xE0, 0x00, + 0x00, 0x7F, 0xE0, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x20, 0xFF, 0xF0, 0x03, + 0xC1, 0xFF, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFE, + 0x01, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xF8, + 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x20, 0x00, + 0x00, 0x00, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x0F, 0xE0, 0x00, + 0x00, 0x3F, 0xF0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0x00, 0x00, + 0x0F, 0xFC, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, + 0xF0, 0x00, 0x00, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, + 0xFE, 0x00, 0x7F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, + 0xFC, 0x0F, 0xFF, 0xFF, 0xFC, 0x3F, 0xF8, 0x3F, 0xF8, 0x7F, 0xE0, 0x1F, + 0xF9, 0xFF, 0x80, 0x1F, 0xF3, 0xFE, 0x00, 0x3F, 0xE7, 0xFC, 0x00, 0x3F, + 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x3F, + 0xE0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0xFF, + 0xE0, 0x00, 0x20, 0xFF, 0xF0, 0x03, 0xC1, 0xFF, 0xFF, 0xFF, 0x81, 0xFF, + 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, + 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, + 0xF8, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1F, + 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x07, 0xFF, + 0x00, 0x00, 0x3F, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0x80, 0x03, 0xFE, 0xFF, + 0x80, 0x03, 0xF8, 0xFE, 0x00, 0x07, 0xC0, 0x7C, 0x00, 0x07, 0x00, 0x70, + 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x07, 0xF8, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x03, 0xFF, 0xFF, 0x00, + 0x0F, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x03, + 0xFF, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, 0xFE, 0x1F, 0xFC, 0x1F, 0xFC, 0x3F, + 0xF0, 0x0F, 0xFC, 0xFF, 0xC0, 0x0F, 0xF9, 0xFF, 0x00, 0x1F, 0xF3, 0xFE, + 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, + 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xF0, 0x00, + 0x00, 0x7F, 0xF0, 0x00, 0x10, 0x7F, 0xF8, 0x01, 0xE0, 0xFF, 0xFF, 0xFF, + 0xC0, 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, + 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xF0, + 0x00, 0x1F, 0xFC, 0x00, 0x01, 0xE0, 0x07, 0x80, 0x0F, 0xF0, 0x3F, 0xC0, + 0x1F, 0xE0, 0x7F, 0x80, 0x7F, 0xE1, 0xFF, 0x80, 0xFF, 0xC3, 0xFF, 0x01, + 0xFF, 0x87, 0xFE, 0x03, 0xFF, 0x0F, 0xFC, 0x03, 0xFC, 0x0F, 0xF0, 0x07, + 0xF8, 0x1F, 0xE0, 0x03, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0xFC, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x07, 0xFF, + 0xFF, 0x80, 0x1F, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xFF, 0x81, 0xFF, 0xFF, + 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0x0F, 0xFE, 0x0F, 0xFE, 0x1F, 0xF8, 0x07, + 0xFE, 0x7F, 0xE0, 0x07, 0xFC, 0xFF, 0x80, 0x0F, 0xF9, 0xFF, 0x00, 0x0F, + 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x0F, + 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, + 0xF8, 0x00, 0x08, 0x3F, 0xFC, 0x00, 0xF0, 0x7F, 0xFF, 0xFF, 0xE0, 0x7F, + 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xFF, 0x80, 0x7F, + 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x0F, + 0xFE, 0x00, 0x04, 0x00, 0x1C, 0x00, 0x7C, 0x01, 0xFC, 0x0F, 0xFC, 0x0F, + 0xFC, 0x0F, 0xFC, 0x0F, 0xFC, 0x0F, 0xFC, 0x0F, 0xFC, 0x0F, 0xF0, 0x07, + 0xC0, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xE0, + 0x7F, 0xC0, 0xFF, 0x81, 0xFF, 0x03, 0xFE, 0x07, 0xFC, 0x0F, 0xF8, 0x1F, + 0xF0, 0x3F, 0xE0, 0x7F, 0xC0, 0xFF, 0x81, 0xFF, 0x03, 0xFE, 0x07, 0xFC, + 0x0F, 0xF8, 0x1F, 0xF0, 0x3F, 0xE0, 0x7F, 0xC0, 0xFF, 0x81, 0xFF, 0x03, + 0xFE, 0x07, 0xFC, 0x0F, 0xF8, 0x1F, 0xF0, 0x3F, 0xE0, 0x7F, 0xC0, 0xFF, + 0x81, 0xFF, 0x03, 0xFE, 0x07, 0xFC, 0x0F, 0xF8, 0x1F, 0xF0, 0x3F, 0xE0, + 0x00, 0x40, 0x01, 0xC0, 0x07, 0xC0, 0x1F, 0xC0, 0x7F, 0xE1, 0xFF, 0x87, + 0xFE, 0x1F, 0xF8, 0x7F, 0xE1, 0xFF, 0x81, 0xFE, 0x01, 0xF0, 0x01, 0xC0, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0xFF, 0x81, + 0xFF, 0x03, 0xFE, 0x07, 0xFC, 0x0F, 0xF8, 0x1F, 0xF0, 0x3F, 0xE0, 0x7F, + 0xC0, 0xFF, 0x81, 0xFF, 0x03, 0xFE, 0x07, 0xFC, 0x0F, 0xF8, 0x1F, 0xF0, + 0x3F, 0xE0, 0x7F, 0xC0, 0xFF, 0x81, 0xFF, 0x03, 0xFE, 0x07, 0xFC, 0x0F, + 0xF8, 0x1F, 0xF0, 0x3F, 0xE0, 0x7F, 0xC0, 0xFF, 0x81, 0xFF, 0x03, 0xFE, + 0x07, 0xFC, 0x0F, 0xF8, 0x1F, 0xF0, 0x3F, 0xE0, 0x7F, 0xC0, 0x00, 0x40, + 0x00, 0x1C, 0x00, 0x07, 0xC0, 0x01, 0xFC, 0x00, 0x7F, 0xC0, 0x1F, 0xFC, + 0x0F, 0xFF, 0xE3, 0xFF, 0xFE, 0xFF, 0xBF, 0xEF, 0xE3, 0xF9, 0xF0, 0x1F, + 0x1C, 0x01, 0xC1, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0xFC, 0x00, 0xFF, 0x80, 0x1F, 0xF0, 0x03, 0xFE, 0x00, 0x7F, 0xC0, + 0x0F, 0xF8, 0x01, 0xFF, 0x00, 0x3F, 0xE0, 0x07, 0xFC, 0x00, 0xFF, 0x80, + 0x1F, 0xF0, 0x03, 0xFE, 0x00, 0x7F, 0xC0, 0x0F, 0xF8, 0x01, 0xFF, 0x00, + 0x3F, 0xE0, 0x07, 0xFC, 0x00, 0xFF, 0x80, 0x1F, 0xF0, 0x03, 0xFE, 0x00, + 0x7F, 0xC0, 0x0F, 0xF8, 0x01, 0xFF, 0x00, 0x3F, 0xE0, 0x07, 0xFC, 0x00, + 0xFF, 0x80, 0x1F, 0xF0, 0x03, 0xFE, 0x00, 0x7F, 0xC0, 0x0F, 0xF8, 0x01, + 0xFF, 0x00, 0x3F, 0xE0, 0x07, 0xFC, 0x00, 0x1E, 0x00, 0x78, 0x7F, 0x81, + 0xFE, 0x7F, 0x81, 0xFE, 0xFF, 0xC3, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xC3, + 0xFF, 0xFF, 0xC3, 0xFF, 0x7F, 0x81, 0xFE, 0x7F, 0x81, 0xFE, 0x1E, 0x00, + 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0x00, 0xFF, + 0x80, 0x00, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0x00, 0xFF, + 0x80, 0x00, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0x00, 0xFF, + 0x80, 0x00, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0x00, 0xFF, + 0x80, 0x00, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0x00, 0xFF, + 0x80, 0x00, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0x00, 0xFF, + 0x80, 0x00, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0x00, 0xFF, + 0x80, 0x00, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0x00, 0xFF, + 0x80, 0x00, 0xFF, 0x80, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0xE0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0xFF, 0xC0, 0x20, 0x00, 0xFF, 0xF0, 0xF8, 0x00, 0x3F, 0xFF, 0xFC, + 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, + 0x80, 0x03, 0xFF, 0xFF, 0x00, 0x03, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xFF, + 0x00, 0x00, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0x3F, 0xE0, 0x00, 0x1C, 0x1F, + 0xF0, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x00, + 0xFF, 0x00, 0x03, 0xFE, 0x7F, 0xC0, 0x0F, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, + 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xFE, 0x1F, 0xFF, + 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, + 0x01, 0xFF, 0xE7, 0xFE, 0x00, 0x3F, 0xF3, 0xFE, 0x00, 0x0F, 0xFB, 0xFF, + 0x00, 0x07, 0xFD, 0xFF, 0x00, 0x03, 0xFE, 0xFF, 0x80, 0x01, 0xFF, 0x7F, + 0xC0, 0x00, 0xFF, 0xBF, 0xE0, 0x00, 0x7F, 0xDF, 0xF0, 0x00, 0x3F, 0xCF, + 0xF8, 0x00, 0x3F, 0xE7, 0xFC, 0x00, 0x1F, 0xF3, 0xFF, 0x00, 0x1F, 0xF8, + 0xFF, 0x80, 0x0F, 0xF8, 0x7F, 0xE0, 0x0F, 0xFC, 0x3F, 0xFC, 0x1F, 0xFE, + 0x0F, 0xFF, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFF, + 0x00, 0x7F, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0xFF, + 0x00, 0x00, 0xFF, 0xFE, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x07, 0xC0, 0x38, 0x00, 0xFF, 0xC3, 0xE0, 0x0F, 0xFF, 0xFF, + 0x80, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFC, 0x01, + 0xFF, 0xFF, 0xC0, 0x07, 0x87, 0xFC, 0x00, 0x08, 0x07, 0xC0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x07, 0xFF, 0x80, 0x07, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0x07, + 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, + 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFB, 0xFE, 0x01, 0xFF, 0xDF, 0xF0, 0x07, + 0xFE, 0xFF, 0x80, 0x1F, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, + 0xFF, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFE, + 0x00, 0x3F, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFC, 0x00, + 0x7F, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0xFF, + 0xFF, 0xC0, 0x07, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, + 0x80, 0x0F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0x00, + 0x1F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFE, 0x00, 0x3F, + 0xFF, 0xF0, 0x01, 0xFF, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, + 0x00, 0x1F, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xFF, 0xC0, 0x00, + 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x1F, 0xF8, 0x00, + 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x03, 0xFC, 0x00, + 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, + 0x00, 0x7F, 0xFE, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xC0, + 0x07, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xF8, + 0x1F, 0xFF, 0xFF, 0xFC, 0x3F, 0xF8, 0x1F, 0xFC, 0x3F, 0xF0, 0x0F, 0xFE, + 0x7F, 0xE0, 0x07, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, + 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, + 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, + 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x03, 0xFF, + 0x7F, 0xC0, 0x03, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, 0x7F, 0xE0, 0x07, 0xFE, + 0x3F, 0xF0, 0x0F, 0xFE, 0x3F, 0xFC, 0x1F, 0xFC, 0x1F, 0xFF, 0xFF, 0xFC, + 0x1F, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xE0, + 0x03, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x7F, 0xFE, 0x00, + 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0xF8, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0x00, + 0x00, 0x07, 0xFE, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x1F, 0xF8, 0x00, + 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x3F, 0xC0, 0x00, + 0x00, 0x1F, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, + 0x00, 0x7F, 0xFE, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xC0, + 0x07, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xF8, + 0x1F, 0xFF, 0xFF, 0xFC, 0x3F, 0xF8, 0x1F, 0xFC, 0x3F, 0xF0, 0x0F, 0xFE, + 0x7F, 0xE0, 0x07, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, + 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, + 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, + 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x03, 0xFF, + 0x7F, 0xC0, 0x03, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, 0x7F, 0xE0, 0x07, 0xFE, + 0x3F, 0xF0, 0x0F, 0xFE, 0x3F, 0xFC, 0x1F, 0xFC, 0x1F, 0xFF, 0xFF, 0xFC, + 0x1F, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xE0, + 0x03, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x7F, 0xFE, 0x00, + 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, + 0x00, 0x07, 0xC0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x1F, 0xF0, 0x00, + 0x00, 0x3F, 0xF8, 0x00, 0x00, 0xFF, 0xFE, 0x00, 0x01, 0xFF, 0xFF, 0x00, + 0x03, 0xFE, 0xFF, 0x80, 0x01, 0xFC, 0x7F, 0x00, 0x01, 0xF0, 0x1F, 0x00, + 0x00, 0xE0, 0x0E, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x7F, 0xFE, 0x00, + 0x01, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0xE0, + 0x0F, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xFC, + 0x3F, 0xF8, 0x1F, 0xFC, 0x3F, 0xF0, 0x0F, 0xFE, 0x7F, 0xE0, 0x07, 0xFE, + 0x7F, 0xC0, 0x03, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, 0xFF, 0x80, 0x01, 0xFF, + 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, + 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, + 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0x7F, 0xC0, 0x03, 0xFE, + 0x7F, 0xC0, 0x03, 0xFE, 0x7F, 0xE0, 0x07, 0xFE, 0x3F, 0xF0, 0x0F, 0xFE, + 0x3F, 0xFC, 0x1F, 0xFC, 0x1F, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xF8, + 0x0F, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0xC0, + 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x0F, 0xF0, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x3E, 0x01, 0xC0, 0x00, 0xFF, 0xC3, 0xE0, + 0x01, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0xE0, + 0x07, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0x80, 0x01, 0xE1, 0xFF, 0x00, + 0x00, 0x40, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, + 0x00, 0x7F, 0xFE, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xC0, + 0x07, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xF8, + 0x1F, 0xFF, 0xFF, 0xFC, 0x3F, 0xF8, 0x1F, 0xFC, 0x3F, 0xF0, 0x0F, 0xFE, + 0x7F, 0xE0, 0x07, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, + 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, + 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, + 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x03, 0xFF, + 0x7F, 0xC0, 0x03, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, 0x7F, 0xE0, 0x07, 0xFE, + 0x3F, 0xF0, 0x0F, 0xFE, 0x3F, 0xFC, 0x1F, 0xFC, 0x1F, 0xFF, 0xFF, 0xFC, + 0x1F, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xE0, + 0x03, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x7F, 0xFE, 0x00, + 0x00, 0x0F, 0xF0, 0x00, 0x01, 0xE0, 0x07, 0x80, 0x07, 0xF8, 0x1F, 0xE0, + 0x07, 0xF8, 0x1F, 0xE0, 0x0F, 0xFC, 0x3F, 0xF0, 0x0F, 0xFC, 0x3F, 0xF0, + 0x0F, 0xFC, 0x3F, 0xF0, 0x0F, 0xFC, 0x3F, 0xF0, 0x07, 0xF8, 0x1F, 0xE0, + 0x07, 0xF8, 0x1F, 0xE0, 0x01, 0xE0, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x01, 0xFF, 0xFF, 0x80, + 0x03, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xF0, + 0x1F, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xFC, 0x3F, 0xF8, 0x1F, 0xFC, + 0x3F, 0xF0, 0x0F, 0xFE, 0x7F, 0xE0, 0x07, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, + 0x7F, 0xC0, 0x03, 0xFE, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, + 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, + 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, + 0xFF, 0x80, 0x03, 0xFF, 0x7F, 0xC0, 0x03, 0xFE, 0x7F, 0xC0, 0x03, 0xFE, + 0x7F, 0xE0, 0x07, 0xFE, 0x3F, 0xF0, 0x0F, 0xFE, 0x3F, 0xFC, 0x1F, 0xFC, + 0x1F, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xF0, + 0x07, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x80, + 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x07, 0xC0, 0x00, + 0x00, 0x3F, 0x80, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, + 0x3F, 0xF8, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x0F, + 0xFE, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x7C, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, + 0x00, 0x03, 0xFF, 0x80, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x3F, 0xF8, 0x00, + 0x00, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x07, 0xFC, 0x00, 0x00, + 0x0F, 0xE0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x30, 0x00, 0x0F, 0xF0, 0x7C, 0x00, 0x7F, 0xFE, 0x7E, 0x01, + 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xFC, 0x07, 0xFF, 0xFF, 0xF8, 0x0F, + 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xFC, 0x3F, + 0xF8, 0x1F, 0xFC, 0x3F, 0xF0, 0x1F, 0xFE, 0x7F, 0xE0, 0x3F, 0xFE, 0x7F, + 0xC0, 0x7F, 0xFE, 0x7F, 0xC0, 0xFF, 0xFE, 0xFF, 0x81, 0xFD, 0xFF, 0xFF, + 0x81, 0xFD, 0xFF, 0xFF, 0x83, 0xF9, 0xFF, 0xFF, 0x87, 0xF1, 0xFF, 0xFF, + 0x8F, 0xE1, 0xFF, 0xFF, 0x8F, 0xE1, 0xFF, 0xFF, 0x9F, 0xC1, 0xFF, 0xFF, + 0xBF, 0x81, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0x7F, 0xFF, 0x03, 0xFE, 0x7F, + 0xFE, 0x03, 0xFE, 0x7F, 0xFC, 0x07, 0xFE, 0x7F, 0xF8, 0x0F, 0xFE, 0x3F, + 0xF8, 0x1F, 0xFC, 0x3F, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xF8, 0x1F, + 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xFF, 0xC0, 0x7F, + 0xFF, 0xFF, 0x80, 0x7E, 0x7F, 0xFE, 0x00, 0x3E, 0x0F, 0xF0, 0x00, 0x0C, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x03, + 0x80, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x7F, 0xE0, + 0x00, 0x01, 0xFF, 0x80, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x1F, 0xF8, 0x00, + 0x00, 0x7F, 0xE0, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x07, 0xF8, 0x00, 0x00, + 0x0F, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x7F, + 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, + 0xC0, 0x07, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0x80, + 0x0F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0x00, 0x1F, + 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, + 0xF0, 0x01, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xE0, + 0x03, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xC0, 0x07, + 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xC0, 0x0F, 0xFB, + 0xFF, 0x00, 0x7F, 0xDF, 0xFC, 0x03, 0xFE, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, + 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, + 0xFF, 0x07, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0x00, + 0x00, 0x00, 0x40, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, + 0x07, 0xF0, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x7F, + 0xE0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x07, 0xFE, 0x00, + 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x07, 0xFC, 0x00, 0x7F, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0x00, 0x1F, + 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, + 0xF0, 0x01, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xE0, + 0x03, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xC0, 0x07, + 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, + 0xFC, 0x00, 0x7F, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF8, + 0x00, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xF8, 0x01, + 0xFF, 0xFF, 0xC0, 0x0F, 0xFB, 0xFF, 0x00, 0x7F, 0xDF, 0xFC, 0x03, 0xFE, + 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xFC, 0x7F, + 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, + 0xFF, 0x80, 0x0F, 0xFF, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x38, 0x00, + 0x00, 0x03, 0xE0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xFE, 0x00, 0x00, + 0x3F, 0xF8, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xC0, 0x07, 0xFD, + 0xFF, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0xF8, 0x0F, 0x80, 0x03, 0x80, 0x38, + 0x00, 0x08, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x80, 0x0F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xE0, + 0x03, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xC0, 0x07, + 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, + 0xFC, 0x00, 0x7F, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF8, + 0x00, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xF0, 0x01, + 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xE0, 0x03, 0xFF, + 0xFF, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, + 0x00, 0x3F, 0xFF, 0xF8, 0x01, 0xFF, 0x7F, 0xE0, 0x0F, 0xFB, 0xFF, 0x80, + 0x7F, 0xDF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, + 0x8F, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x01, + 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xE0, 0x00, 0x07, 0x80, 0x1E, 0x00, 0xFF, + 0x03, 0xFC, 0x07, 0xF8, 0x1F, 0xE0, 0x7F, 0xE1, 0xFF, 0x83, 0xFF, 0x0F, + 0xFC, 0x1F, 0xF8, 0x7F, 0xE0, 0xFF, 0xC3, 0xFF, 0x03, 0xFC, 0x0F, 0xF0, + 0x1F, 0xE0, 0x7F, 0x80, 0x3C, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1F, 0xF0, 0x01, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFC, 0x00, 0x7F, + 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, + 0xC0, 0x07, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0x80, + 0x0F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0x00, 0x1F, + 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, + 0xF0, 0x01, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xE0, + 0x03, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xE0, 0x07, + 0xFF, 0xFF, 0x00, 0x3F, 0xEF, 0xFC, 0x01, 0xFF, 0x7F, 0xF0, 0x0F, 0xFB, + 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xF1, 0xFF, + 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, + 0xFE, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, + 0x80, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, + 0x7F, 0xE0, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, + 0x0F, 0xFC, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, + 0x00, 0x7F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x01, 0xC0, 0x00, + 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, + 0x0F, 0xFD, 0xFF, 0x00, 0x03, 0xFE, 0x7F, 0xE0, 0x01, 0xFF, 0x9F, 0xF8, + 0x00, 0x7F, 0xE3, 0xFE, 0x00, 0x1F, 0xF0, 0xFF, 0xC0, 0x07, 0xFC, 0x1F, + 0xF0, 0x03, 0xFF, 0x07, 0xFC, 0x00, 0xFF, 0x81, 0xFF, 0x80, 0x3F, 0xE0, + 0x3F, 0xE0, 0x1F, 0xF8, 0x0F, 0xF8, 0x07, 0xFC, 0x03, 0xFF, 0x01, 0xFF, + 0x00, 0x7F, 0xC0, 0xFF, 0xC0, 0x1F, 0xF0, 0x3F, 0xE0, 0x03, 0xFE, 0x0F, + 0xF8, 0x00, 0xFF, 0x87, 0xFE, 0x00, 0x1F, 0xF1, 0xFF, 0x00, 0x07, 0xFC, + 0x7F, 0xC0, 0x01, 0xFF, 0x3F, 0xE0, 0x00, 0x3F, 0xEF, 0xF8, 0x00, 0x0F, + 0xFB, 0xFE, 0x00, 0x01, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xC0, 0x00, + 0x0F, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xFE, 0x00, + 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xE0, + 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x01, 0xFF, + 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x1F, + 0xF8, 0x00, 0x08, 0x0F, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0x00, 0x01, 0xFF, + 0xFF, 0x80, 0x00, 0x7F, 0xFF, 0xC0, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x0F, + 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0xFC, 0x00, 0x00, 0xFF, 0xFC, 0x00, 0x00, + 0x07, 0xF8, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x01, 0xFF, 0x00, 0x00, + 0x03, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, + 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, + 0xFF, 0x80, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x07, + 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, + 0xE0, 0x00, 0x00, 0x7F, 0xDF, 0xF0, 0x00, 0xFF, 0xFF, 0xFC, 0x01, 0xFF, + 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, + 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xFC, 0x7F, 0xC0, + 0x3F, 0xFC, 0xFF, 0x80, 0x1F, 0xF9, 0xFF, 0x00, 0x1F, 0xFB, 0xFE, 0x00, + 0x3F, 0xF7, 0xFC, 0x00, 0x3F, 0xEF, 0xF8, 0x00, 0x7F, 0xFF, 0xF0, 0x00, + 0x7F, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x80, 0x03, + 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0x1F, + 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xE0, 0x01, 0xFF, + 0x7F, 0xC0, 0x07, 0xFE, 0xFF, 0x80, 0x1F, 0xFD, 0xFF, 0xC0, 0x7F, 0xF3, + 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, 0x1F, + 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0xC0, 0xFF, + 0xFF, 0xFE, 0x01, 0xFF, 0x1F, 0xE0, 0x03, 0xFE, 0x00, 0x00, 0x07, 0xFC, + 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, + 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0x00, + 0x00, 0x03, 0xFE, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, + 0x00, 0x00, 0x00, 0xF0, 0x03, 0xC0, 0x00, 0xFF, 0x03, 0xFC, 0x00, 0x3F, + 0xC0, 0xFF, 0x00, 0x1F, 0xF8, 0x7F, 0xE0, 0x07, 0xFE, 0x1F, 0xF8, 0x01, + 0xFF, 0x87, 0xFE, 0x00, 0x7F, 0xE1, 0xFF, 0x80, 0x0F, 0xF0, 0x3F, 0xC0, + 0x03, 0xFC, 0x0F, 0xF0, 0x00, 0x3C, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x03, 0xFF, 0xFF, 0xC0, + 0x00, 0xFF, 0xDF, 0xF0, 0x00, 0x3F, 0xE7, 0xFE, 0x00, 0x1F, 0xF9, 0xFF, + 0x80, 0x07, 0xFE, 0x3F, 0xE0, 0x01, 0xFF, 0x0F, 0xFC, 0x00, 0x7F, 0xC1, + 0xFF, 0x00, 0x3F, 0xF0, 0x7F, 0xC0, 0x0F, 0xF8, 0x1F, 0xF8, 0x03, 0xFE, + 0x03, 0xFE, 0x01, 0xFF, 0x80, 0xFF, 0x80, 0x7F, 0xC0, 0x3F, 0xF0, 0x1F, + 0xF0, 0x07, 0xFC, 0x0F, 0xFC, 0x01, 0xFF, 0x03, 0xFE, 0x00, 0x3F, 0xE0, + 0xFF, 0x80, 0x0F, 0xF8, 0x7F, 0xE0, 0x01, 0xFF, 0x1F, 0xF0, 0x00, 0x7F, + 0xC7, 0xFC, 0x00, 0x1F, 0xF3, 0xFE, 0x00, 0x03, 0xFE, 0xFF, 0x80, 0x00, + 0xFF, 0xBF, 0xE0, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xFC, 0x00, + 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0x80, 0x00, 0x07, 0xFF, 0xE0, + 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x0F, 0xFE, + 0x00, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x1F, + 0xF0, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x01, + 0xFF, 0x80, 0x00, 0x80, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0x1F, + 0xFF, 0xF8, 0x00, 0x07, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xFF, 0x00, 0x00, + 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0xC0, 0x00, + 0x00, 0x7F, 0x80, 0x00, 0x00 }; + +const GFXglyph Ubuntu_Bold32pt8bGlyphs[] PROGMEM = { + { 0, 1, 1, 15, 0, 0 }, // 0x20 ' ' U+0020 + { 1, 11, 44, 17, 3, -43 }, // 0x21 '!' U+0021 + { 62, 23, 19, 29, 3, -47 }, // 0x22 '"' U+0022 + { 117, 38, 44, 44, 3, -43 }, // 0x23 '#' U+0023 + { 326, 31, 56, 36, 2, -48 }, // 0x24 '$' U+0024 + { 543, 54, 46, 58, 2, -44 }, // 0x25 '%' U+0025 + { 854, 41, 46, 44, 2, -44 }, // 0x26 '&' U+0026 + { 1090, 9, 19, 15, 3, -47 }, // 0x27 ''' U+0027 + { 1112, 17, 61, 22, 4, -48 }, // 0x28 '(' U+0028 + { 1242, 17, 61, 22, 1, -48 }, // 0x29 ')' U+0029 + { 1372, 27, 25, 32, 3, -43 }, // 0x2a '*' U+002A + { 1457, 31, 30, 37, 3, -33 }, // 0x2b '+' U+002B + { 1574, 12, 20, 15, 1, -9 }, // 0x2c ',' U+002C + { 1604, 18, 9, 22, 2, -23 }, // 0x2d '-' U+002D + { 1625, 12, 12, 16, 2, -10 }, // 0x2e '.' U+002E + { 1643, 31, 61, 28, -2, -48 }, // 0x2f '/' U+002F + { 1880, 32, 46, 36, 2, -44 }, // 0x30 '0' U+0030 + { 2064, 21, 44, 36, 5, -43 }, // 0x31 '1' U+0031 + { 2180, 31, 45, 36, 2, -44 }, // 0x32 '2' U+0032 + { 2355, 30, 46, 36, 2, -44 }, // 0x33 '3' U+0033 + { 2528, 33, 44, 36, 1, -43 }, // 0x34 '4' U+0034 + { 2710, 30, 45, 36, 2, -43 }, // 0x35 '5' U+0035 + { 2879, 32, 45, 36, 2, -43 }, // 0x36 '6' U+0036 + { 3059, 30, 44, 36, 3, -43 }, // 0x37 '7' U+0037 + { 3224, 32, 46, 36, 2, -44 }, // 0x38 '8' U+0038 + { 3408, 31, 45, 36, 2, -44 }, // 0x39 '9' U+0039 + { 3583, 12, 34, 16, 2, -32 }, // 0x3a ':' U+003A + { 3634, 13, 43, 16, 1, -32 }, // 0x3b ';' U+003B + { 3704, 29, 31, 36, 3, -33 }, // 0x3c '<' U+003C + { 3817, 30, 22, 36, 3, -29 }, // 0x3d '=' U+003D + { 3900, 29, 31, 36, 4, -33 }, // 0x3e '>' U+003E + { 4013, 26, 46, 29, 1, -44 }, // 0x3f '?' U+003F + { 4163, 55, 55, 61, 3, -44 }, // 0x40 '@' U+0040 + { 4542, 44, 44, 46, 1, -43 }, // 0x41 'A' U+0041 + { 4784, 34, 45, 42, 5, -43 }, // 0x42 'B' U+0042 + { 4976, 37, 46, 41, 3, -44 }, // 0x43 'C' U+0043 + { 5189, 38, 45, 46, 5, -43 }, // 0x44 'D' U+0044 + { 5403, 31, 44, 38, 5, -43 }, // 0x45 'E' U+0045 + { 5574, 29, 44, 36, 5, -43 }, // 0x46 'F' U+0046 + { 5734, 36, 46, 44, 3, -44 }, // 0x47 'G' U+0047 + { 5941, 36, 44, 46, 5, -43 }, // 0x48 'H' U+0048 + { 6139, 10, 44, 20, 5, -43 }, // 0x49 'I' U+0049 + { 6194, 27, 45, 33, 1, -43 }, // 0x4a 'J' U+004A + { 6346, 37, 44, 43, 5, -43 }, // 0x4b 'K' U+004B + { 6550, 29, 44, 35, 5, -43 }, // 0x4c 'L' U+004C + { 6710, 49, 44, 57, 4, -43 }, // 0x4d 'M' U+004D + { 6980, 38, 44, 48, 5, -43 }, // 0x4e 'N' U+004E + { 7189, 44, 46, 50, 3, -44 }, // 0x4f 'O' U+004F + { 7442, 33, 44, 41, 5, -43 }, // 0x50 'P' U+0050 + { 7624, 44, 57, 50, 3, -44 }, // 0x51 'Q' U+0051 + { 7938, 36, 44, 42, 5, -43 }, // 0x52 'R' U+0052 + { 8136, 32, 46, 37, 2, -44 }, // 0x53 'S' U+0053 + { 8320, 36, 44, 38, 1, -43 }, // 0x54 'T' U+0054 + { 8518, 35, 45, 45, 5, -43 }, // 0x55 'U' U+0055 + { 8715, 44, 44, 46, 1, -43 }, // 0x56 'V' U+0056 + { 8957, 58, 44, 60, 1, -43 }, // 0x57 'W' U+0057 + { 9276, 41, 44, 43, 1, -43 }, // 0x58 'X' U+0058 + { 9502, 42, 44, 42, 0, -43 }, // 0x59 'Y' U+0059 + { 9733, 34, 44, 38, 2, -43 }, // 0x5a 'Z' U+005A + { 9920, 17, 61, 23, 5, -48 }, // 0x5b '[' U+005B + { 10050, 31, 61, 28, -2, -48 }, // 0x5c '\' U+005C + { 10287, 17, 61, 23, 1, -48 }, // 0x5d ']' U+005D + { 10417, 33, 26, 35, 1, -43 }, // 0x5e '^' U+005E + { 10525, 32, 8, 32, 0, 5 }, // 0x5f '_' U+005F + { 10557, 15, 14, 18, 1, -49 }, // 0x60 '`' U+0060 + { 10584, 28, 35, 35, 3, -33 }, // 0x61 'a' U+0061 + { 10707, 31, 50, 38, 4, -48 }, // 0x62 'b' U+0062 + { 10901, 27, 35, 32, 3, -33 }, // 0x63 'c' U+0063 + { 11020, 31, 50, 38, 3, -48 }, // 0x64 'd' U+0064 + { 11214, 31, 35, 37, 3, -33 }, // 0x65 'e' U+0065 + { 11350, 23, 49, 26, 4, -48 }, // 0x66 'f' U+0066 + { 11491, 30, 46, 37, 3, -33 }, // 0x67 'g' U+0067 + { 11664, 29, 49, 37, 4, -48 }, // 0x68 'h' U+0068 + { 11842, 11, 49, 17, 3, -48 }, // 0x69 'i' U+0069 + { 11910, 19, 61, 15, -6, -48 }, // 0x6a 'j' U+006A + { 12055, 31, 49, 36, 4, -48 }, // 0x6b 'k' U+006B + { 12245, 14, 50, 19, 4, -48 }, // 0x6c 'l' U+006C + { 12333, 45, 34, 53, 4, -33 }, // 0x6d 'm' U+006D + { 12525, 29, 34, 37, 4, -33 }, // 0x6e 'n' U+006E + { 12649, 32, 35, 38, 3, -33 }, // 0x6f 'o' U+006F + { 12789, 31, 46, 38, 4, -33 }, // 0x70 'p' U+0070 + { 12968, 32, 46, 38, 3, -33 }, // 0x71 'q' U+0071 + { 13152, 21, 34, 26, 4, -33 }, // 0x72 'r' U+0072 + { 13242, 26, 35, 31, 2, -33 }, // 0x73 's' U+0073 + { 13356, 21, 44, 27, 4, -42 }, // 0x74 't' U+0074 + { 13472, 29, 34, 37, 4, -32 }, // 0x75 'u' U+0075 + { 13596, 33, 33, 35, 1, -32 }, // 0x76 'v' U+0076 + { 13733, 49, 33, 51, 1, -32 }, // 0x77 'w' U+0077 + { 13936, 33, 33, 35, 1, -32 }, // 0x78 'x' U+0078 + { 14073, 34, 45, 36, 1, -32 }, // 0x79 'y' U+0079 + { 14265, 28, 33, 32, 2, -32 }, // 0x7a 'z' U+007A + { 14381, 20, 61, 23, 2, -48 }, // 0x7b '{' U+007B + { 14534, 9, 61, 21, 6, -48 }, // 0x7c '|' U+007C + { 14603, 20, 61, 23, 1, -48 }, // 0x7d '}' U+007D + { 14756, 34, 13, 36, 1, -24 }, // 0x7e '~' U+007E + { 14812, 26, 47, 32, 3, -46 }, // 0x7f 'REPLACEMENT CHARACTER *' U+2370 + { 14965, 1, 1, 15, 0, 0 }, // 0x80 'NO-BREAK SPACE' U+00A0 + { 14966, 11, 45, 17, 3, -32 }, // 0x81 'INVERTED EXCLAMATION MARK' U+00A1 + { 15028, 27, 50, 36, 3, -42 }, // 0x82 'CENT SIGN' U+00A2 + { 15197, 31, 45, 36, 1, -44 }, // 0x83 'POUND SIGN' U+00A3 + { 15372, 32, 31, 36, 2, -36 }, // 0x84 'CURRENCY SIGN' U+00A4 + { 15496, 36, 44, 36, 0, -43 }, // 0x85 'YEN SIGN' U+00A5 + { 15694, 9, 61, 19, 5, -48 }, // 0x86 'BROKEN BAR' U+00A6 + { 15763, 29, 52, 32, 1, -44 }, // 0x87 'SECTION SIGN' U+00A7 + { 15952, 24, 10, 34, 5, -47 }, // 0x88 'DIAERESIS' U+00A8 + { 15982, 44, 44, 50, 3, -43 }, // 0x89 'COPYRIGHT SIGN' U+00A9 + { 16224, 21, 24, 25, 2, -43 }, // 0x8a 'FEMININE ORDINAL INDICATOR' U+00AA + { 16287, 34, 29, 38, 1, -31 }, // 0x8b 'LEFT-POINTING DOUBLE ANGLE QUOTATION MARK' U+00AB + { 16411, 30, 23, 36, 3, -25 }, // 0x8c 'NOT SIGN' U+00AC + { 16498, 18, 9, 22, 2, -23 }, // 0x8d 'SOFT HYPHEN' U+00AD + { 16519, 44, 44, 50, 3, -43 }, // 0x8e 'REGISTERED SIGN' U+00AE + { 16761, 20, 6, 24, 2, -44 }, // 0x8f 'MACRON' U+00AF + { 16776, 21, 19, 23, 1, -48 }, // 0x90 'DEGREE SIGN' U+00B0 + { 16826, 31, 40, 37, 3, -39 }, // 0x91 'PLUS-MINUS SIGN' U+00B1 + { 16981, 19, 25, 23, 1, -43 }, // 0x92 'SUPERSCRIPT TWO' U+00B2 + { 17041, 19, 26, 23, 1, -43 }, // 0x93 'SUPERSCRIPT THREE' U+00B3 + { 17103, 15, 14, 18, 1, -49 }, // 0x94 'ACUTE ACCENT' U+00B4 + { 17130, 29, 45, 37, 4, -32 }, // 0x95 'MICRO SIGN' U+00B5 + { 17294, 37, 56, 45, 3, -43 }, // 0x96 'PILCROW SIGN' U+00B6 + { 17553, 12, 12, 16, 2, -24 }, // 0x97 'MIDDLE DOT' U+00B7 + { 17571, 14, 15, 21, 3, 0 }, // 0x98 'CEDILLA' U+00B8 + { 17598, 15, 25, 23, 2, -43 }, // 0x99 'SUPERSCRIPT ONE' U+00B9 + { 17645, 25, 25, 29, 2, -43 }, // 0x9a 'MASCULINE ORDINAL INDICATOR' U+00BA + { 17724, 34, 29, 38, 3, -31 }, // 0x9b 'RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK' U+00BB + { 17848, 53, 44, 55, 1, -43 }, // 0x9c 'VULGAR FRACTION ONE QUARTER' U+00BC + { 18140, 51, 44, 55, 1, -43 }, // 0x9d 'VULGAR FRACTION ONE HALF' U+00BD + { 18421, 53, 44, 55, 1, -43 }, // 0x9e 'VULGAR FRACTION THREE QUARTERS' U+00BE + { 18713, 26, 45, 29, 2, -32 }, // 0x9f 'INVERTED QUESTION MARK' U+00BF + { 18860, 44, 60, 46, 1, -59 }, // 0xa0 'LATIN CAPITAL LETTER A WITH GRAVE' U+00C0 + { 19190, 44, 60, 46, 1, -59 }, // 0xa1 'LATIN CAPITAL LETTER A WITH ACUTE' U+00C1 + { 19520, 44, 59, 46, 1, -58 }, // 0xa2 'LATIN CAPITAL LETTER A WITH CIRCUMFLEX' U+00C2 + { 19845, 44, 58, 46, 1, -57 }, // 0xa3 'LATIN CAPITAL LETTER A WITH TILDE' U+00C3 + { 20164, 44, 58, 46, 1, -57 }, // 0xa4 'LATIN CAPITAL LETTER A WITH DIAERESIS' U+00C4 + { 20483, 44, 57, 46, 1, -56 }, // 0xa5 'LATIN CAPITAL LETTER A WITH RING ABOVE' U+00C5 + { 20797, 60, 44, 63, 1, -43 }, // 0xa6 'LATIN CAPITAL LETTER AE' U+00C6 + { 21127, 37, 60, 41, 3, -44 }, // 0xa7 'LATIN CAPITAL LETTER C WITH CEDILLA' U+00C7 + { 21405, 31, 60, 38, 5, -59 }, // 0xa8 'LATIN CAPITAL LETTER E WITH GRAVE' U+00C8 + { 21638, 31, 60, 38, 5, -59 }, // 0xa9 'LATIN CAPITAL LETTER E WITH ACUTE' U+00C9 + { 21871, 31, 59, 38, 5, -58 }, // 0xaa 'LATIN CAPITAL LETTER E WITH CIRCUMFLEX' U+00CA + { 22100, 31, 58, 38, 5, -57 }, // 0xab 'LATIN CAPITAL LETTER E WITH DIAERESIS' U+00CB + { 22325, 15, 60, 20, 2, -59 }, // 0xac 'LATIN CAPITAL LETTER I WITH GRAVE' U+00CC + { 22438, 15, 60, 20, 3, -59 }, // 0xad 'LATIN CAPITAL LETTER I WITH ACUTE' U+00CD + { 22551, 19, 59, 20, 1, -58 }, // 0xae 'LATIN CAPITAL LETTER I WITH CIRCUMFLEX' U+00CE + { 22692, 24, 58, 20, -2, -57 }, // 0xaf 'LATIN CAPITAL LETTER I WITH DIAERESIS' U+00CF + { 22866, 44, 45, 47, 0, -43 }, // 0xb0 'LATIN CAPITAL LETTER ETH' U+00D0 + { 23114, 38, 58, 48, 5, -57 }, // 0xb1 'LATIN CAPITAL LETTER N WITH TILDE' U+00D1 + { 23390, 44, 61, 50, 3, -59 }, // 0xb2 'LATIN CAPITAL LETTER O WITH GRAVE' U+00D2 + { 23726, 44, 61, 50, 3, -59 }, // 0xb3 'LATIN CAPITAL LETTER O WITH ACUTE' U+00D3 + { 24062, 44, 60, 50, 3, -58 }, // 0xb4 'LATIN CAPITAL LETTER O WITH CIRCUMFLEX' U+00D4 + { 24392, 44, 59, 50, 3, -57 }, // 0xb5 'LATIN CAPITAL LETTER O WITH TILDE' U+00D5 + { 24717, 44, 59, 50, 3, -57 }, // 0xb6 'LATIN CAPITAL LETTER O WITH DIAERESIS' U+00D6 + { 25042, 28, 28, 36, 4, -32 }, // 0xb7 'MULTIPLICATION SIGN' U+00D7 + { 25140, 44, 50, 50, 3, -46 }, // 0xb8 'LATIN CAPITAL LETTER O WITH STROKE' U+00D8 + { 25415, 35, 61, 45, 5, -59 }, // 0xb9 'LATIN CAPITAL LETTER U WITH GRAVE' U+00D9 + { 25682, 35, 61, 45, 5, -59 }, // 0xba 'LATIN CAPITAL LETTER U WITH ACUTE' U+00DA + { 25949, 35, 60, 45, 5, -58 }, // 0xbb 'LATIN CAPITAL LETTER U WITH CIRCUMFLEX' U+00DB + { 26212, 35, 59, 45, 5, -57 }, // 0xbc 'LATIN CAPITAL LETTER U WITH DIAERESIS' U+00DC + { 26471, 42, 60, 42, 0, -59 }, // 0xbd 'LATIN CAPITAL LETTER Y WITH ACUTE' U+00DD + { 26786, 34, 44, 41, 5, -43 }, // 0xbe 'LATIN CAPITAL LETTER THORN' U+00DE + { 26973, 36, 50, 42, 4, -48 }, // 0xbf 'LATIN SMALL LETTER SHARP S' U+00DF + { 27198, 28, 51, 35, 3, -49 }, // 0xc0 'LATIN SMALL LETTER A WITH GRAVE' U+00E0 + { 27377, 28, 51, 35, 3, -49 }, // 0xc1 'LATIN SMALL LETTER A WITH ACUTE' U+00E1 + { 27556, 28, 50, 35, 3, -48 }, // 0xc2 'LATIN SMALL LETTER A WITH CIRCUMFLEX' U+00E2 + { 27731, 28, 49, 35, 3, -47 }, // 0xc3 'LATIN SMALL LETTER A WITH TILDE' U+00E3 + { 27903, 28, 49, 35, 3, -47 }, // 0xc4 'LATIN SMALL LETTER A WITH DIAERESIS' U+00E4 + { 28075, 28, 52, 35, 3, -50 }, // 0xc5 'LATIN SMALL LETTER A WITH RING ABOVE' U+00E5 + { 28257, 49, 35, 55, 3, -33 }, // 0xc6 'LATIN SMALL LETTER AE' U+00E6 + { 28472, 27, 48, 32, 3, -33 }, // 0xc7 'LATIN SMALL LETTER C WITH CEDILLA' U+00E7 + { 28634, 31, 51, 37, 3, -49 }, // 0xc8 'LATIN SMALL LETTER E WITH GRAVE' U+00E8 + { 28832, 31, 51, 37, 3, -49 }, // 0xc9 'LATIN SMALL LETTER E WITH ACUTE' U+00E9 + { 29030, 31, 50, 37, 3, -48 }, // 0xca 'LATIN SMALL LETTER E WITH CIRCUMFLEX' U+00EA + { 29224, 31, 49, 37, 3, -47 }, // 0xcb 'LATIN SMALL LETTER E WITH DIAERESIS' U+00EB + { 29414, 15, 50, 17, 1, -49 }, // 0xcc 'LATIN SMALL LETTER I WITH GRAVE' U+00EC + { 29508, 15, 50, 17, 2, -49 }, // 0xcd 'LATIN SMALL LETTER I WITH ACUTE' U+00ED + { 29602, 19, 49, 17, -1, -48 }, // 0xce 'LATIN SMALL LETTER I WITH CIRCUMFLEX' U+00EE + { 29719, 24, 48, 17, -4, -47 }, // 0xcf 'LATIN SMALL LETTER I WITH DIAERESIS' U+00EF + { 29863, 33, 50, 38, 3, -48 }, // 0xd0 'LATIN SMALL LETTER ETH' U+00F0 + { 30070, 29, 48, 37, 4, -47 }, // 0xd1 'LATIN SMALL LETTER N WITH TILDE' U+00F1 + { 30244, 32, 51, 38, 3, -49 }, // 0xd2 'LATIN SMALL LETTER O WITH GRAVE' U+00F2 + { 30448, 32, 51, 38, 3, -49 }, // 0xd3 'LATIN SMALL LETTER O WITH ACUTE' U+00F3 + { 30652, 32, 50, 38, 3, -48 }, // 0xd4 'LATIN SMALL LETTER O WITH CIRCUMFLEX' U+00F4 + { 30852, 32, 49, 38, 3, -47 }, // 0xd5 'LATIN SMALL LETTER O WITH TILDE' U+00F5 + { 31048, 32, 49, 38, 3, -47 }, // 0xd6 'LATIN SMALL LETTER O WITH DIAERESIS' U+00F6 + { 31244, 30, 38, 36, 3, -38 }, // 0xd7 'DIVISION SIGN' U+00F7 + { 31387, 32, 39, 38, 3, -35 }, // 0xd8 'LATIN SMALL LETTER O WITH STROKE' U+00F8 + { 31543, 29, 51, 37, 4, -49 }, // 0xd9 'LATIN SMALL LETTER U WITH GRAVE' U+00F9 + { 31728, 29, 51, 37, 4, -49 }, // 0xda 'LATIN SMALL LETTER U WITH ACUTE' U+00FA + { 31913, 29, 50, 37, 4, -48 }, // 0xdb 'LATIN SMALL LETTER U WITH CIRCUMFLEX' U+00FB + { 32095, 29, 49, 37, 4, -47 }, // 0xdc 'LATIN SMALL LETTER U WITH DIAERESIS' U+00FC + { 32273, 34, 62, 36, 1, -49 }, // 0xdd 'LATIN SMALL LETTER Y WITH ACUTE' U+00FD + { 32537, 31, 61, 38, 4, -48 }, // 0xde 'LATIN SMALL LETTER THORN' U+00FE + { 32774, 34, 60, 36, 1, -47 } }; // 0xdf 'LATIN SMALL LETTER Y WITH DIAERESIS' U+000FF + +const GFXfont Ubuntu_Bold32pt8b PROGMEM = { + (uint8_t *)Ubuntu_Bold32pt8bBitmaps, + (GFXglyph *)Ubuntu_Bold32pt8bGlyphs, + 0x20, 0xDF, 72 }; + +// Approx. 34380 bytes diff --git a/lib/obp60task/fonts/Ubuntu_Bold8pt8b.h b/lib/obp60task/fonts/Ubuntu_Bold8pt8b.h new file mode 100644 index 0000000..dd69b1c --- /dev/null +++ b/lib/obp60task/fonts/Ubuntu_Bold8pt8b.h @@ -0,0 +1,377 @@ +const uint8_t Ubuntu_Bold8pt8bBitmaps[] PROGMEM = { + 0x00, 0xFF, 0xFC, 0xFC, 0xDE, 0xF7, 0xBD, 0x80, 0x1B, 0x0D, 0x87, 0xDF, + 0xFF, 0xF9, 0xB3, 0xFF, 0xFF, 0x6C, 0x36, 0x1B, 0x00, 0x18, 0x30, 0xFF, + 0xFC, 0x38, 0x1C, 0x1E, 0x0E, 0x0C, 0x1F, 0xF7, 0xC3, 0x06, 0x00, 0x78, + 0x63, 0xF3, 0x0C, 0xCC, 0x33, 0x60, 0xCF, 0xFB, 0xFF, 0xF7, 0xFC, 0xC1, + 0xB3, 0x0C, 0xCC, 0x33, 0xF1, 0x87, 0x80, 0x3C, 0x1F, 0x86, 0x61, 0x98, + 0x3C, 0x1E, 0x6C, 0xDB, 0x1C, 0xC7, 0x3F, 0xE7, 0xDC, 0xFF, 0xC0, 0x13, + 0x66, 0xCC, 0xCC, 0xCC, 0xCC, 0x66, 0x31, 0x8C, 0x66, 0x33, 0x33, 0x33, + 0x33, 0x66, 0xC8, 0x39, 0xFF, 0xF8, 0x86, 0xDD, 0xD1, 0x00, 0x18, 0x18, + 0x18, 0xFF, 0xFF, 0x18, 0x18, 0x18, 0x6D, 0xEC, 0xFF, 0xC0, 0xFF, 0x80, + 0x06, 0x1C, 0x30, 0x60, 0xC3, 0x06, 0x0C, 0x30, 0x60, 0xC3, 0x06, 0x0C, + 0x38, 0x60, 0x38, 0xFB, 0xBE, 0x3C, 0x78, 0xF1, 0xE3, 0xEE, 0xF8, 0xE0, + 0x1B, 0xFE, 0xB1, 0x8C, 0x63, 0x18, 0xC6, 0x7D, 0xFD, 0x18, 0x30, 0xE3, + 0x8E, 0x38, 0xE1, 0xFF, 0xF8, 0x7D, 0xFC, 0x18, 0x33, 0xE7, 0x81, 0x83, + 0x87, 0xFF, 0xE0, 0x06, 0x0E, 0x1E, 0x3E, 0x36, 0x66, 0xE6, 0xFF, 0xFF, + 0x06, 0x06, 0x7E, 0xFD, 0x83, 0x0F, 0x9F, 0x83, 0x83, 0x07, 0xFB, 0xE0, + 0x1C, 0x79, 0xC7, 0x0F, 0xDF, 0xF1, 0xE3, 0xC6, 0xF8, 0xE0, 0xFF, 0xFC, + 0x30, 0xE1, 0x87, 0x0C, 0x18, 0x60, 0xC1, 0x80, 0x3C, 0xFF, 0x1E, 0x3E, + 0xEF, 0xBF, 0xE3, 0xC7, 0xFD, 0xF0, 0x38, 0xFB, 0x1E, 0x3C, 0x7F, 0xDF, + 0x87, 0x1C, 0xF1, 0xC0, 0xFF, 0x80, 0x3F, 0xE0, 0x77, 0x70, 0x00, 0x06, + 0x66, 0xCC, 0x06, 0x3E, 0xF8, 0xC0, 0xF8, 0x3F, 0x06, 0xFF, 0xFF, 0x00, + 0x00, 0xFF, 0xFF, 0x60, 0x7C, 0x1F, 0x03, 0x1F, 0xFC, 0x60, 0x7D, 0xFC, + 0x18, 0x30, 0xC3, 0x0C, 0x18, 0x00, 0x70, 0xE1, 0xC0, 0x0F, 0xC0, 0x7F, + 0xC3, 0x83, 0x98, 0x06, 0xE7, 0xCF, 0x3F, 0x3D, 0x8C, 0xF6, 0x33, 0xD8, + 0xCF, 0xBF, 0xE6, 0x7F, 0x1E, 0x00, 0x3F, 0xC0, 0x3F, 0x00, 0x0E, 0x01, + 0xC0, 0x7C, 0x0D, 0x83, 0xB8, 0x63, 0x0C, 0x63, 0xFE, 0x7F, 0xCC, 0x1B, + 0x01, 0x80, 0xFC, 0x7F, 0xB0, 0xD8, 0x6F, 0xE7, 0xFB, 0x07, 0x83, 0xC3, + 0xFF, 0xBF, 0x80, 0x1F, 0x1F, 0xD8, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, + 0x60, 0x3F, 0xC7, 0xC0, 0xFE, 0x3F, 0xCC, 0x3B, 0x07, 0xC0, 0xF0, 0x3C, + 0x0F, 0x07, 0xC3, 0xBF, 0xCF, 0xE0, 0xFF, 0xFF, 0xC0, 0xC0, 0xFE, 0xFE, + 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xC0, 0xFE, 0xFE, 0xC0, + 0xC0, 0xC0, 0xC0, 0xC0, 0x1F, 0x1F, 0xD8, 0x18, 0x0C, 0x06, 0x0F, 0x07, + 0x83, 0x71, 0xBF, 0xC7, 0xE0, 0xC1, 0xE0, 0xF0, 0x78, 0x3F, 0xFF, 0xFF, + 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x60, 0xFF, 0xFF, 0xFC, 0x06, 0x0C, 0x18, + 0x30, 0x60, 0xC1, 0x83, 0x07, 0xF9, 0xE0, 0xC1, 0xB0, 0xCC, 0x63, 0x30, + 0xF8, 0x3C, 0x0D, 0x83, 0x30, 0xC6, 0x30, 0xCC, 0x18, 0xC0, 0xC0, 0xC0, + 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0x60, 0x33, 0x83, 0x9C, + 0x1C, 0xF1, 0xED, 0x8D, 0xEE, 0xEF, 0x36, 0x79, 0xF3, 0xC7, 0x1E, 0x38, + 0xF0, 0x06, 0xC0, 0xF8, 0x3F, 0x0F, 0xE3, 0xDC, 0xF3, 0xBC, 0x7F, 0x0F, + 0xC1, 0xF0, 0x7C, 0x0C, 0x1F, 0x07, 0xF1, 0xC7, 0x70, 0x7C, 0x07, 0x80, + 0xF0, 0x1F, 0x07, 0x71, 0xCF, 0xF8, 0x7C, 0x00, 0xFC, 0xFE, 0xC3, 0xC3, + 0xC3, 0xFE, 0xFC, 0xC0, 0xC0, 0xC0, 0xC0, 0x1F, 0x07, 0xF1, 0xC7, 0x70, + 0x7C, 0x07, 0x80, 0xF0, 0x1F, 0x07, 0x71, 0xCF, 0xF0, 0xF8, 0x07, 0x00, + 0x7C, 0x07, 0x80, 0xFC, 0x7F, 0x30, 0xD8, 0x6C, 0x37, 0xF3, 0xE1, 0x98, + 0xC6, 0x63, 0xB0, 0xE0, 0x3D, 0xFF, 0x06, 0x0F, 0x0F, 0x87, 0x83, 0x07, + 0xFD, 0xF0, 0xFF, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xE3, 0xBF, + 0x8F, 0x80, 0xC0, 0x6C, 0x19, 0x83, 0x38, 0xE3, 0x18, 0x63, 0x06, 0xC0, + 0xD8, 0x0E, 0x01, 0xC0, 0x38, 0x00, 0xC0, 0x07, 0x87, 0x0D, 0x8E, 0x33, + 0x1C, 0x66, 0x6C, 0xC6, 0xDB, 0x0D, 0xB6, 0x1B, 0x6C, 0x1C, 0x70, 0x38, + 0xE0, 0x71, 0xC0, 0xE0, 0xEC, 0x18, 0xC6, 0x0D, 0x80, 0xE0, 0x1C, 0x03, + 0x80, 0xD8, 0x31, 0x8C, 0x1B, 0x83, 0x80, 0xC0, 0xD8, 0x67, 0x38, 0xCC, + 0x1E, 0x07, 0x80, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0xFF, 0xFF, 0x06, + 0x0C, 0x1C, 0x18, 0x30, 0x70, 0x60, 0xFF, 0xFF, 0xFF, 0xF1, 0x8C, 0x63, + 0x18, 0xC6, 0x31, 0x8C, 0x63, 0xFF, 0xC1, 0xC1, 0x83, 0x06, 0x06, 0x0C, + 0x18, 0x18, 0x30, 0x60, 0x60, 0xC1, 0x83, 0x83, 0xFF, 0xC6, 0x31, 0x8C, + 0x63, 0x18, 0xC6, 0x31, 0x8F, 0xFF, 0x08, 0x0E, 0x0F, 0x86, 0xC7, 0x77, + 0x1D, 0x04, 0xFF, 0xFF, 0x4E, 0x72, 0x7C, 0xFC, 0x1B, 0xFF, 0xF8, 0xFF, + 0xBF, 0xC1, 0x83, 0x06, 0x0F, 0x9F, 0xB3, 0xE3, 0xC7, 0x9F, 0xF7, 0xC0, + 0x3D, 0xFE, 0x30, 0xC3, 0x87, 0xCF, 0x06, 0x0C, 0x18, 0x33, 0xEF, 0xF9, + 0xE3, 0xC7, 0xCD, 0xF9, 0xF0, 0x38, 0xFB, 0x1F, 0xFF, 0xF8, 0x1F, 0x1E, + 0x7F, 0xF1, 0x8F, 0xFF, 0x18, 0xC6, 0x31, 0x80, 0x3E, 0xFF, 0x9E, 0x3C, + 0x7C, 0xDF, 0x9F, 0x06, 0xFB, 0xE0, 0xC1, 0x83, 0x06, 0x0F, 0xDF, 0xF1, + 0xE3, 0xC7, 0x8F, 0x1E, 0x30, 0xFC, 0xFF, 0xFF, 0x33, 0x30, 0x33, 0x33, + 0x33, 0x33, 0x3F, 0xE0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC6, 0xCC, 0xD8, 0xF0, + 0xD8, 0xCC, 0xC6, 0xC7, 0xDB, 0x6D, 0xB6, 0xDB, 0xB0, 0xFD, 0xEF, 0xFF, + 0xC6, 0x3C, 0x63, 0xC6, 0x3C, 0x63, 0xC6, 0x3C, 0x63, 0xFD, 0xFF, 0x1E, + 0x3C, 0x78, 0xF1, 0xE3, 0x3C, 0x7E, 0xE7, 0xC3, 0xC3, 0xE7, 0x7E, 0x3C, + 0xF9, 0xFB, 0x3E, 0x3C, 0x79, 0xFF, 0x7C, 0xC1, 0x83, 0x00, 0x3E, 0xFF, + 0x9E, 0x3C, 0x7C, 0xDF, 0xBF, 0x06, 0x0C, 0x18, 0xFF, 0xF1, 0x8C, 0x63, + 0x18, 0x7F, 0xEC, 0x3E, 0x7C, 0x3F, 0xFE, 0xC6, 0x3F, 0xFC, 0x63, 0x18, + 0xFB, 0xC0, 0xC7, 0x8F, 0x1E, 0x3C, 0x78, 0xFF, 0xBF, 0xC1, 0xB1, 0x98, + 0xCE, 0xE3, 0x61, 0xF0, 0x70, 0x38, 0xC6, 0x79, 0xCD, 0xBB, 0x35, 0x66, + 0xAC, 0x77, 0x0E, 0xE1, 0x8C, 0xE3, 0xBB, 0x8D, 0x83, 0x81, 0xC1, 0xB1, + 0xDD, 0xC7, 0xE3, 0xB1, 0x98, 0xCE, 0xE3, 0x61, 0xF0, 0x70, 0x38, 0x18, + 0x7C, 0x3C, 0x00, 0xFF, 0xF1, 0x8E, 0x71, 0x8F, 0xFF, 0x3B, 0xD8, 0xC6, + 0x31, 0x98, 0xC3, 0x18, 0xC6, 0x31, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, + 0x8C, 0x63, 0x18, 0xC3, 0x19, 0x8C, 0x63, 0x1B, 0xDC, 0x73, 0xFF, 0xCE, + 0xFE, 0x18, 0x61, 0x86, 0x18, 0x61, 0x86, 0x18, 0x7F, 0x00, 0xFC, 0xFF, + 0xFC, 0x18, 0x63, 0xDF, 0xE3, 0x0C, 0x30, 0x7C, 0xF1, 0x86, 0x1F, 0x3F, + 0x70, 0x60, 0x60, 0xFE, 0xFE, 0x60, 0x60, 0x7F, 0x7F, 0x42, 0xFF, 0x7E, + 0x66, 0x66, 0x7E, 0xFF, 0x42, 0xC3, 0x66, 0x66, 0x3C, 0x3C, 0x7E, 0x7E, + 0x18, 0x7E, 0x7E, 0x18, 0xFF, 0xF0, 0x0F, 0xFF, 0x7F, 0xFC, 0x38, 0x7B, + 0xFC, 0xF3, 0xFD, 0xE1, 0xC3, 0xFF, 0xE0, 0xDE, 0xC0, 0x1F, 0x07, 0xF1, + 0xC7, 0x77, 0x7D, 0xE7, 0xB0, 0xF7, 0x9F, 0x77, 0x71, 0xC7, 0xF0, 0x7C, + 0x00, 0x70, 0xDF, 0xFD, 0xBC, 0x11, 0x1D, 0xDD, 0xDD, 0xC7, 0x71, 0xDC, + 0x44, 0xFF, 0xFC, 0x18, 0x30, 0x60, 0xC0, 0xFF, 0xC0, 0x1F, 0x07, 0xF1, + 0xC7, 0x7F, 0x7D, 0xB7, 0xBE, 0xF6, 0xDF, 0xDF, 0x71, 0xC7, 0xF0, 0x7C, + 0x00, 0xFF, 0xC0, 0x7B, 0xFC, 0xF3, 0xFD, 0xE0, 0x18, 0x18, 0x18, 0xFF, + 0xFF, 0x18, 0x18, 0x18, 0x00, 0xFF, 0xFF, 0xF0, 0xCE, 0xEE, 0x7C, 0xF8, + 0xDC, 0x31, 0x8F, 0xC0, 0x27, 0xE4, 0xC7, 0x8F, 0x1E, 0x3C, 0x78, 0xFF, + 0xFF, 0xC1, 0x83, 0x00, 0x7F, 0xFF, 0xFE, 0x7F, 0x3F, 0x9F, 0xCC, 0xE6, + 0x33, 0x19, 0x8C, 0xC6, 0x63, 0x31, 0x98, 0xCC, 0xFF, 0x80, 0x47, 0xA0, + 0x7F, 0x33, 0x33, 0x7B, 0x3C, 0xF3, 0xCD, 0xE0, 0x44, 0x77, 0x1D, 0xC7, + 0x77, 0x77, 0x71, 0x10, 0x70, 0xC7, 0x8C, 0x0C, 0x60, 0x66, 0x03, 0x30, + 0x1B, 0x38, 0x19, 0xC1, 0x9E, 0x0D, 0xB0, 0xCF, 0xC6, 0x0C, 0x71, 0x8F, + 0x30, 0x33, 0x03, 0x60, 0x36, 0x03, 0xDE, 0x0C, 0x31, 0x87, 0x18, 0xE3, + 0x1C, 0x31, 0xF0, 0xF8, 0x60, 0x63, 0x07, 0x0C, 0x06, 0x60, 0x19, 0x80, + 0x6C, 0xEF, 0x33, 0x81, 0x9E, 0x06, 0xD8, 0x33, 0xF0, 0xC1, 0x80, 0x38, + 0x70, 0xE0, 0x01, 0x87, 0x1C, 0x60, 0xC1, 0xFD, 0xF0, 0x08, 0x03, 0x80, + 0x38, 0x02, 0x00, 0x00, 0x1C, 0x03, 0x80, 0xF8, 0x1B, 0x07, 0x70, 0xC6, + 0x18, 0xC7, 0xFC, 0xFF, 0x98, 0x36, 0x03, 0x04, 0x01, 0xC0, 0x70, 0x04, + 0x00, 0x00, 0x1C, 0x03, 0x80, 0xF8, 0x1B, 0x07, 0x70, 0xC6, 0x18, 0xC7, + 0xFC, 0xFF, 0x98, 0x36, 0x03, 0x04, 0x01, 0xC0, 0x6C, 0x00, 0x00, 0xE0, + 0x1C, 0x07, 0xC0, 0xD8, 0x3B, 0x86, 0x30, 0xC6, 0x3F, 0xE7, 0xFC, 0xC1, + 0xB0, 0x18, 0x0C, 0x83, 0xF0, 0x4C, 0x00, 0x00, 0x00, 0x1C, 0x03, 0x80, + 0xF8, 0x1B, 0x07, 0x70, 0xC6, 0x18, 0xC7, 0xFC, 0xFF, 0x98, 0x36, 0x03, + 0x1B, 0x03, 0x60, 0x00, 0x00, 0x00, 0xE0, 0x1C, 0x07, 0xC0, 0xD8, 0x3B, + 0x86, 0x30, 0xC6, 0x3F, 0xE7, 0xFC, 0xC1, 0xB0, 0x18, 0x0E, 0x03, 0x60, + 0x6C, 0x07, 0x00, 0xE0, 0x1C, 0x06, 0xC0, 0xD8, 0x3B, 0x86, 0x30, 0xC6, + 0x3F, 0xE7, 0xFC, 0xC1, 0xB0, 0x18, 0x01, 0xFE, 0x07, 0xFC, 0x1F, 0x00, + 0x36, 0x00, 0xCF, 0xC1, 0x9F, 0x87, 0xF0, 0x1F, 0xE0, 0x30, 0xC0, 0xC1, + 0xFF, 0x83, 0xF8, 0x1F, 0x1F, 0xD8, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, + 0x60, 0x3F, 0xC7, 0xC1, 0x80, 0x60, 0xE0, 0x10, 0x38, 0x1C, 0x08, 0x00, + 0xFF, 0xFF, 0xC0, 0xC0, 0xFE, 0xFE, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0x08, + 0x1C, 0x38, 0x10, 0x00, 0xFF, 0xFF, 0xC0, 0xC0, 0xFE, 0xFE, 0xC0, 0xC0, + 0xC0, 0xFF, 0xFF, 0x10, 0x38, 0x6C, 0x00, 0xFF, 0xFF, 0xC0, 0xC0, 0xFE, + 0xFE, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0x6C, 0x6C, 0x00, 0x00, 0xFF, 0xFF, + 0xC0, 0xC0, 0xFE, 0xFE, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0x4E, 0x72, 0x06, + 0x66, 0x66, 0x66, 0x66, 0x66, 0x27, 0xE4, 0x06, 0x66, 0x66, 0x66, 0x66, + 0x66, 0x23, 0xB6, 0x06, 0x31, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0x80, 0xDE, + 0xC0, 0x06, 0x31, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0x80, 0x7F, 0x0F, 0xF1, + 0x87, 0x30, 0x7F, 0x87, 0xF0, 0xD8, 0x1B, 0x07, 0x61, 0xCF, 0xF1, 0xFC, + 0x00, 0x19, 0x0F, 0xC2, 0x60, 0x00, 0x00, 0x30, 0x3E, 0x0F, 0xC3, 0xF8, + 0xF7, 0x3C, 0xEF, 0x1F, 0xC3, 0xF0, 0x7C, 0x1F, 0x03, 0x08, 0x03, 0x80, + 0x38, 0x02, 0x00, 0x00, 0x3E, 0x0F, 0xE3, 0x8E, 0xE0, 0xF8, 0x0F, 0x01, + 0xE0, 0x3E, 0x0E, 0xE3, 0x9F, 0xF0, 0xF8, 0x02, 0x00, 0xE0, 0x38, 0x02, + 0x00, 0x00, 0x3E, 0x0F, 0xE3, 0x8E, 0xE0, 0xF8, 0x0F, 0x01, 0xE0, 0x3E, + 0x0E, 0xE3, 0x9F, 0xF0, 0xF8, 0x04, 0x01, 0xC0, 0x6C, 0x00, 0x01, 0xF0, + 0x7F, 0x1C, 0x77, 0x07, 0xC0, 0x78, 0x0F, 0x01, 0xF0, 0x77, 0x1C, 0xFF, + 0x87, 0xC0, 0x0C, 0x83, 0xF0, 0x4C, 0x00, 0x00, 0x00, 0x3E, 0x0F, 0xE3, + 0x8E, 0xE0, 0xF8, 0x0F, 0x01, 0xE0, 0x3E, 0x0E, 0xE3, 0x9F, 0xF0, 0xF8, + 0x1B, 0x03, 0x60, 0x00, 0x00, 0x01, 0xF0, 0x7F, 0x1C, 0x77, 0x07, 0xC0, + 0x78, 0x0F, 0x01, 0xF0, 0x77, 0x1C, 0xFF, 0x87, 0xC0, 0x45, 0xDD, 0xF1, + 0xC7, 0xDD, 0xD1, 0x00, 0x1F, 0xE7, 0xF9, 0x87, 0x61, 0xFC, 0x67, 0x9C, + 0xF3, 0x1F, 0xC3, 0x70, 0xCF, 0xFB, 0x7C, 0x00, 0x00, 0x10, 0x1C, 0x07, + 0x01, 0x00, 0x06, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1F, + 0x1D, 0xFC, 0x7C, 0x04, 0x07, 0x07, 0x01, 0x00, 0x06, 0x0F, 0x07, 0x83, + 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1F, 0x1D, 0xFC, 0x7C, 0x08, 0x0E, 0x0D, + 0x80, 0x0C, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3E, 0x3B, + 0xF8, 0xF8, 0x36, 0x1B, 0x00, 0x00, 0x0C, 0x1E, 0x0F, 0x07, 0x83, 0xC1, + 0xE0, 0xF0, 0x78, 0x3E, 0x3B, 0xF8, 0xF8, 0x04, 0x03, 0x81, 0xC0, 0x20, + 0x00, 0x30, 0x36, 0x19, 0xCE, 0x33, 0x07, 0x81, 0xE0, 0x30, 0x0C, 0x03, + 0x00, 0xC0, 0x30, 0xC0, 0xC0, 0xFC, 0xFE, 0xC3, 0xC3, 0xC3, 0xFE, 0xFC, + 0xC0, 0xC0, 0x3E, 0x3F, 0xB8, 0xD8, 0x6C, 0x66, 0x63, 0x39, 0x8E, 0xC1, + 0xE0, 0xF3, 0xFB, 0xE0, 0x20, 0xE0, 0xE0, 0x80, 0x0F, 0x9F, 0x83, 0x7F, + 0xFF, 0x1F, 0xF7, 0xE0, 0x08, 0x38, 0xE0, 0x80, 0x0F, 0x9F, 0x83, 0x7F, + 0xFF, 0x1F, 0xF7, 0xE0, 0x10, 0x71, 0xB0, 0x07, 0xCF, 0xC1, 0xBF, 0xFF, + 0x8F, 0xFB, 0xF0, 0x32, 0xFD, 0x30, 0x00, 0x0F, 0x9F, 0x83, 0x7F, 0xFF, + 0x1F, 0xF7, 0xE0, 0x6C, 0xD8, 0x00, 0x07, 0xCF, 0xC1, 0xBF, 0xFF, 0x8F, + 0xFB, 0xF0, 0x38, 0xD9, 0xB1, 0xC0, 0x0F, 0x9F, 0x83, 0x7F, 0xFF, 0x1F, + 0xF7, 0xE0, 0x7D, 0xC7, 0xFE, 0x06, 0x37, 0xFF, 0xFF, 0xFC, 0x60, 0xFF, + 0xE7, 0xDF, 0x3E, 0xFF, 0x86, 0x0C, 0x1C, 0x1F, 0x9F, 0x1C, 0x18, 0xE0, + 0x20, 0xE0, 0xE0, 0x80, 0x07, 0x1F, 0x63, 0xFF, 0xFF, 0x03, 0xE3, 0xC0, + 0x08, 0x38, 0xE0, 0x80, 0x07, 0x1F, 0x63, 0xFF, 0xFF, 0x03, 0xE3, 0xC0, + 0x10, 0x71, 0xB0, 0x03, 0x8F, 0xB1, 0xFF, 0xFF, 0x81, 0xF1, 0xE0, 0x6C, + 0xD8, 0x00, 0x03, 0x8F, 0xB1, 0xFF, 0xFF, 0x81, 0xF1, 0xE0, 0x4E, 0x72, + 0x06, 0x66, 0x66, 0x66, 0x60, 0x27, 0xE4, 0x06, 0x66, 0x66, 0x66, 0x60, + 0x23, 0xB6, 0x06, 0x31, 0x8C, 0x63, 0x18, 0xC0, 0xDE, 0xC0, 0x03, 0x18, + 0xC6, 0x31, 0x8C, 0x60, 0x18, 0x1F, 0x1E, 0x06, 0x03, 0x3F, 0x7F, 0xC3, + 0xC3, 0xC7, 0x7E, 0x3C, 0x65, 0xFA, 0x60, 0x00, 0x1F, 0xBF, 0xE3, 0xC7, + 0x8F, 0x1E, 0x3C, 0x60, 0x10, 0x38, 0x1C, 0x08, 0x00, 0x3C, 0x7E, 0xE7, + 0xC3, 0xC3, 0xE7, 0x7E, 0x3C, 0x08, 0x1C, 0x38, 0x10, 0x00, 0x3C, 0x7E, + 0xE7, 0xC3, 0xC3, 0xE7, 0x7E, 0x3C, 0x10, 0x38, 0x6C, 0x00, 0x3C, 0x7E, + 0xE7, 0xC3, 0xC3, 0xE7, 0x7E, 0x3C, 0x32, 0x7E, 0x4C, 0x00, 0x00, 0x3C, + 0x7E, 0xE7, 0xC3, 0xC3, 0xE7, 0x7E, 0x3C, 0x6C, 0x6C, 0x00, 0x00, 0x3C, + 0x7E, 0xE7, 0xC3, 0xC3, 0xE7, 0x7E, 0x3C, 0x38, 0x70, 0xE0, 0x0F, 0xFF, + 0xC0, 0x1C, 0x38, 0x70, 0x3F, 0x7E, 0xEF, 0xCB, 0xD3, 0xF7, 0x7E, 0xFC, + 0x20, 0xE0, 0xE0, 0x80, 0x18, 0xF1, 0xE3, 0xC7, 0x8F, 0x1F, 0xF7, 0xE0, + 0x08, 0x38, 0xE0, 0x80, 0x18, 0xF1, 0xE3, 0xC7, 0x8F, 0x1F, 0xF7, 0xE0, + 0x10, 0x71, 0xB0, 0x0C, 0x78, 0xF1, 0xE3, 0xC7, 0x8F, 0xFB, 0xF0, 0x6C, + 0xD8, 0x00, 0x0C, 0x78, 0xF1, 0xE3, 0xC7, 0x8F, 0xFB, 0xF0, 0x04, 0x07, + 0x07, 0x01, 0x00, 0x07, 0x1D, 0x8C, 0xC6, 0x77, 0x1B, 0x0F, 0x83, 0x81, + 0xC0, 0xC3, 0xE1, 0xE0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFC, 0xFE, 0xC7, 0xC3, + 0xC3, 0xC7, 0xFE, 0xFC, 0xC0, 0xC0, 0xC0, 0x36, 0x1B, 0x00, 0x00, 0x0E, + 0x3B, 0x19, 0x8C, 0xEE, 0x36, 0x1F, 0x07, 0x03, 0x81, 0x87, 0xC3, 0xC0 }; + +const GFXglyph Ubuntu_Bold8pt8bGlyphs[] PROGMEM = { + { 0, 1, 1, 4, 0, 0 }, // 0x20 ' ' U+0020 + { 1, 2, 11, 4, 1, -10 }, // 0x21 '!' U+0021 + { 4, 5, 5, 7, 1, -11 }, // 0x22 '"' U+0022 + { 8, 9, 11, 11, 1, -10 }, // 0x23 '#' U+0023 + { 21, 7, 15, 9, 1, -12 }, // 0x24 '$' U+0024 + { 35, 14, 11, 16, 1, -10 }, // 0x25 '%' U+0025 + { 55, 10, 11, 11, 1, -10 }, // 0x26 '&' U+0026 + { 69, 2, 5, 4, 1, -11 }, // 0x27 ''' U+0027 + { 71, 4, 16, 6, 1, -12 }, // 0x28 '(' U+0028 + { 79, 4, 16, 6, 1, -12 }, // 0x29 ')' U+0029 + { 87, 7, 7, 8, 1, -10 }, // 0x2a '*' U+002A + { 94, 8, 8, 10, 1, -8 }, // 0x2b '+' U+002B + { 102, 3, 5, 4, 0, -1 }, // 0x2c ',' U+002C + { 104, 5, 2, 7, 1, -5 }, // 0x2d '-' U+002D + { 106, 3, 3, 5, 1, -2 }, // 0x2e '.' U+002E + { 108, 7, 16, 7, 0, -12 }, // 0x2f '/' U+002F + { 122, 7, 11, 9, 1, -10 }, // 0x30 '0' U+0030 + { 132, 5, 11, 9, 1, -10 }, // 0x31 '1' U+0031 + { 139, 7, 11, 9, 1, -10 }, // 0x32 '2' U+0032 + { 149, 7, 11, 9, 1, -10 }, // 0x33 '3' U+0033 + { 159, 8, 11, 9, 1, -10 }, // 0x34 '4' U+0034 + { 170, 7, 11, 9, 1, -10 }, // 0x35 '5' U+0035 + { 180, 7, 11, 9, 1, -10 }, // 0x36 '6' U+0036 + { 190, 7, 11, 9, 1, -10 }, // 0x37 '7' U+0037 + { 200, 7, 11, 9, 1, -10 }, // 0x38 '8' U+0038 + { 210, 7, 11, 9, 1, -10 }, // 0x39 '9' U+0039 + { 220, 3, 9, 5, 1, -8 }, // 0x3a ':' U+003A + { 224, 4, 12, 5, 0, -8 }, // 0x3b ';' U+003B + { 230, 8, 7, 9, 1, -7 }, // 0x3c '<' U+003C + { 237, 8, 6, 10, 1, -7 }, // 0x3d '=' U+003D + { 243, 8, 7, 9, 0, -7 }, // 0x3e '>' U+003E + { 250, 7, 12, 7, 0, -11 }, // 0x3f '?' U+003F + { 261, 14, 14, 16, 1, -10 }, // 0x40 '@' U+0040 + { 286, 11, 11, 11, 0, -10 }, // 0x41 'A' U+0041 + { 302, 9, 11, 11, 1, -10 }, // 0x42 'B' U+0042 + { 315, 9, 11, 11, 1, -10 }, // 0x43 'C' U+0043 + { 328, 10, 11, 12, 1, -10 }, // 0x44 'D' U+0044 + { 342, 8, 11, 10, 1, -10 }, // 0x45 'E' U+0045 + { 353, 8, 11, 9, 1, -10 }, // 0x46 'F' U+0046 + { 364, 9, 11, 11, 1, -10 }, // 0x47 'G' U+0047 + { 377, 9, 11, 11, 1, -10 }, // 0x48 'H' U+0048 + { 390, 2, 11, 4, 1, -10 }, // 0x49 'I' U+0049 + { 393, 7, 11, 8, 0, -10 }, // 0x4a 'J' U+004A + { 403, 10, 11, 11, 1, -10 }, // 0x4b 'K' U+004B + { 417, 8, 11, 9, 1, -10 }, // 0x4c 'L' U+004C + { 428, 13, 11, 15, 1, -10 }, // 0x4d 'M' U+004D + { 446, 10, 11, 12, 1, -10 }, // 0x4e 'N' U+004E + { 460, 11, 11, 13, 1, -10 }, // 0x4f 'O' U+004F + { 476, 8, 11, 10, 1, -10 }, // 0x50 'P' U+0050 + { 487, 11, 14, 13, 1, -10 }, // 0x51 'Q' U+0051 + { 507, 9, 11, 10, 1, -10 }, // 0x52 'R' U+0052 + { 520, 7, 11, 9, 1, -10 }, // 0x53 'S' U+0053 + { 530, 8, 11, 8, 0, -10 }, // 0x54 'T' U+0054 + { 541, 9, 11, 11, 1, -10 }, // 0x55 'U' U+0055 + { 554, 11, 11, 11, 0, -10 }, // 0x56 'V' U+0056 + { 570, 15, 11, 15, 0, -10 }, // 0x57 'W' U+0057 + { 591, 11, 11, 11, 0, -10 }, // 0x58 'X' U+0058 + { 607, 10, 11, 10, 0, -10 }, // 0x59 'Y' U+0059 + { 621, 8, 11, 10, 1, -10 }, // 0x5a 'Z' U+005A + { 632, 5, 16, 6, 1, -12 }, // 0x5b '[' U+005B + { 642, 7, 16, 7, 0, -12 }, // 0x5c '\' U+005C + { 656, 5, 16, 6, 0, -12 }, // 0x5d ']' U+005D + { 666, 9, 7, 9, 0, -10 }, // 0x5e '^' U+005E + { 674, 8, 2, 8, 0, 2 }, // 0x5f '_' U+005F + { 676, 4, 4, 5, 1, -12 }, // 0x60 '`' U+0060 + { 678, 7, 8, 9, 1, -7 }, // 0x61 'a' U+0061 + { 685, 7, 12, 9, 1, -11 }, // 0x62 'b' U+0062 + { 696, 6, 8, 8, 1, -7 }, // 0x63 'c' U+0063 + { 702, 7, 12, 9, 1, -11 }, // 0x64 'd' U+0064 + { 713, 7, 8, 9, 1, -7 }, // 0x65 'e' U+0065 + { 720, 5, 12, 6, 1, -11 }, // 0x66 'f' U+0066 + { 728, 7, 11, 9, 1, -7 }, // 0x67 'g' U+0067 + { 738, 7, 12, 9, 1, -11 }, // 0x68 'h' U+0068 + { 749, 2, 12, 4, 1, -11 }, // 0x69 'i' U+0069 + { 752, 4, 15, 4, -1, -11 }, // 0x6a 'j' U+006A + { 760, 8, 12, 9, 1, -11 }, // 0x6b 'k' U+006B + { 772, 3, 12, 4, 1, -11 }, // 0x6c 'l' U+006C + { 777, 12, 8, 14, 1, -7 }, // 0x6d 'm' U+006D + { 789, 7, 8, 9, 1, -7 }, // 0x6e 'n' U+006E + { 796, 8, 8, 10, 1, -7 }, // 0x6f 'o' U+006F + { 804, 7, 11, 9, 1, -7 }, // 0x70 'p' U+0070 + { 814, 7, 11, 9, 1, -7 }, // 0x71 'q' U+0071 + { 824, 5, 8, 6, 1, -7 }, // 0x72 'r' U+0072 + { 829, 6, 8, 8, 1, -7 }, // 0x73 's' U+0073 + { 835, 5, 10, 7, 1, -9 }, // 0x74 't' U+0074 + { 842, 7, 8, 9, 1, -7 }, // 0x75 'u' U+0075 + { 849, 9, 8, 9, 0, -7 }, // 0x76 'v' U+0076 + { 858, 11, 8, 11, 0, -7 }, // 0x77 'w' U+0077 + { 869, 9, 8, 9, 0, -7 }, // 0x78 'x' U+0078 + { 878, 9, 11, 9, 0, -7 }, // 0x79 'y' U+0079 + { 891, 6, 8, 8, 1, -7 }, // 0x7a 'z' U+007A + { 897, 5, 16, 5, 0, -12 }, // 0x7b '{' U+007B + { 907, 2, 16, 4, 1, -12 }, // 0x7c '|' U+007C + { 911, 5, 16, 5, 0, -12 }, // 0x7d '}' U+007D + { 921, 8, 3, 9, 1, -5 }, // 0x7e '~' U+007E + { 924, 6, 12, 8, 1, -11 }, // 0x7f 'REPLACEMENT CHARACTER *' U+2370 + { 933, 1, 1, 4, 0, 0 }, // 0x80 'NO-BREAK SPACE' U+00A0 + { 934, 2, 11, 4, 1, -7 }, // 0x81 'INVERTED EXCLAMATION MARK' U+00A1 + { 937, 6, 12, 9, 1, -9 }, // 0x82 'CENT SIGN' U+00A2 + { 946, 8, 11, 9, 0, -10 }, // 0x83 'POUND SIGN' U+00A3 + { 957, 8, 8, 9, 0, -8 }, // 0x84 'CURRENCY SIGN' U+00A4 + { 965, 8, 11, 8, 0, -10 }, // 0x85 'YEN SIGN' U+00A5 + { 976, 2, 16, 5, 1, -12 }, // 0x86 'BROKEN BAR' U+00A6 + { 980, 6, 14, 8, 1, -10 }, // 0x87 'SECTION SIGN' U+00A7 + { 991, 5, 2, 9, 2, -11 }, // 0x88 'DIAERESIS' U+00A8 + { 993, 11, 11, 13, 1, -10 }, // 0x89 'COPYRIGHT SIGN' U+00A9 + { 1009, 5, 6, 6, 0, -10 }, // 0x8a 'FEMININE ORDINAL INDICATOR' U+00AA + { 1013, 9, 7, 10, 0, -7 }, // 0x8b 'LEFT-POINTING DOUBLE ANGLE QUOTATION MARK' U+00AB + { 1021, 7, 6, 9, 1, -6 }, // 0x8c 'NOT SIGN' U+00AC + { 1027, 5, 2, 7, 1, -5 }, // 0x8d 'SOFT HYPHEN' U+00AD + { 1029, 11, 11, 13, 1, -10 }, // 0x8e 'REGISTERED SIGN' U+00AE + { 1045, 5, 2, 6, 0, -11 }, // 0x8f 'MACRON' U+00AF + { 1047, 6, 6, 6, 0, -12 }, // 0x90 'DEGREE SIGN' U+00B0 + { 1052, 8, 11, 10, 1, -10 }, // 0x91 'PLUS-MINUS SIGN' U+00B1 + { 1063, 5, 6, 6, 0, -10 }, // 0x92 'SUPERSCRIPT TWO' U+00B2 + { 1067, 5, 7, 6, 0, -10 }, // 0x93 'SUPERSCRIPT THREE' U+00B3 + { 1072, 4, 4, 5, 0, -12 }, // 0x94 'ACUTE ACCENT' U+00B4 + { 1074, 7, 11, 9, 1, -7 }, // 0x95 'MICRO SIGN' U+00B5 + { 1084, 9, 14, 11, 1, -10 }, // 0x96 'PILCROW SIGN' U+00B6 + { 1100, 3, 3, 5, 1, -5 }, // 0x97 'MIDDLE DOT' U+00B7 + { 1102, 3, 4, 5, 1, 1 }, // 0x98 'CEDILLA' U+00B8 + { 1104, 4, 6, 6, 1, -10 }, // 0x99 'SUPERSCRIPT ONE' U+00B9 + { 1107, 6, 6, 8, 1, -10 }, // 0x9a 'MASCULINE ORDINAL INDICATOR' U+00BA + { 1112, 9, 7, 10, 0, -7 }, // 0x9b 'RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK' U+00BB + { 1120, 13, 11, 14, 1, -10 }, // 0x9c 'VULGAR FRACTION ONE QUARTER' U+00BC + { 1138, 12, 11, 14, 1, -10 }, // 0x9d 'VULGAR FRACTION ONE HALF' U+00BD + { 1155, 14, 11, 14, 0, -10 }, // 0x9e 'VULGAR FRACTION THREE QUARTERS' U+00BE + { 1175, 7, 11, 7, 0, -7 }, // 0x9f 'INVERTED QUESTION MARK' U+00BF + { 1185, 11, 16, 11, 0, -15 }, // 0xa0 'LATIN CAPITAL LETTER A WITH GRAVE' U+00C0 + { 1207, 11, 16, 11, 0, -15 }, // 0xa1 'LATIN CAPITAL LETTER A WITH ACUTE' U+00C1 + { 1229, 11, 15, 11, 0, -14 }, // 0xa2 'LATIN CAPITAL LETTER A WITH CIRCUMFLEX' U+00C2 + { 1250, 11, 16, 11, 0, -15 }, // 0xa3 'LATIN CAPITAL LETTER A WITH TILDE' U+00C3 + { 1272, 11, 15, 11, 0, -14 }, // 0xa4 'LATIN CAPITAL LETTER A WITH DIAERESIS' U+00C4 + { 1293, 11, 15, 11, 0, -14 }, // 0xa5 'LATIN CAPITAL LETTER A WITH RING ABOVE' U+00C5 + { 1314, 15, 11, 16, 0, -10 }, // 0xa6 'LATIN CAPITAL LETTER AE' U+00C6 + { 1335, 9, 14, 11, 1, -10 }, // 0xa7 'LATIN CAPITAL LETTER C WITH CEDILLA' U+00C7 + { 1351, 8, 16, 10, 1, -15 }, // 0xa8 'LATIN CAPITAL LETTER E WITH GRAVE' U+00C8 + { 1367, 8, 16, 10, 1, -15 }, // 0xa9 'LATIN CAPITAL LETTER E WITH ACUTE' U+00C9 + { 1383, 8, 15, 10, 1, -14 }, // 0xaa 'LATIN CAPITAL LETTER E WITH CIRCUMFLEX' U+00CA + { 1398, 8, 15, 10, 1, -14 }, // 0xab 'LATIN CAPITAL LETTER E WITH DIAERESIS' U+00CB + { 1413, 4, 16, 4, 0, -15 }, // 0xac 'LATIN CAPITAL LETTER I WITH GRAVE' U+00CC + { 1421, 4, 16, 4, 0, -15 }, // 0xad 'LATIN CAPITAL LETTER I WITH ACUTE' U+00CD + { 1429, 5, 15, 4, 0, -14 }, // 0xae 'LATIN CAPITAL LETTER I WITH CIRCUMFLEX' U+00CE + { 1439, 5, 15, 4, 0, -14 }, // 0xaf 'LATIN CAPITAL LETTER I WITH DIAERESIS' U+00CF + { 1449, 11, 11, 12, 0, -10 }, // 0xb0 'LATIN CAPITAL LETTER ETH' U+00D0 + { 1465, 10, 16, 12, 1, -15 }, // 0xb1 'LATIN CAPITAL LETTER N WITH TILDE' U+00D1 + { 1485, 11, 16, 13, 1, -15 }, // 0xb2 'LATIN CAPITAL LETTER O WITH GRAVE' U+00D2 + { 1507, 11, 16, 13, 1, -15 }, // 0xb3 'LATIN CAPITAL LETTER O WITH ACUTE' U+00D3 + { 1529, 11, 15, 13, 1, -14 }, // 0xb4 'LATIN CAPITAL LETTER O WITH CIRCUMFLEX' U+00D4 + { 1550, 11, 16, 13, 1, -15 }, // 0xb5 'LATIN CAPITAL LETTER O WITH TILDE' U+00D5 + { 1572, 11, 15, 13, 1, -14 }, // 0xb6 'LATIN CAPITAL LETTER O WITH DIAERESIS' U+00D6 + { 1593, 7, 7, 9, 1, -7 }, // 0xb7 'MULTIPLICATION SIGN' U+00D7 + { 1600, 11, 12, 13, 1, -10 }, // 0xb8 'LATIN CAPITAL LETTER O WITH STROKE' U+00D8 + { 1617, 9, 16, 11, 1, -15 }, // 0xb9 'LATIN CAPITAL LETTER U WITH GRAVE' U+00D9 + { 1635, 9, 16, 11, 1, -15 }, // 0xba 'LATIN CAPITAL LETTER U WITH ACUTE' U+00DA + { 1653, 9, 15, 11, 1, -14 }, // 0xbb 'LATIN CAPITAL LETTER U WITH CIRCUMFLEX' U+00DB + { 1670, 9, 15, 11, 1, -14 }, // 0xbc 'LATIN CAPITAL LETTER U WITH DIAERESIS' U+00DC + { 1687, 10, 16, 10, 0, -15 }, // 0xbd 'LATIN CAPITAL LETTER Y WITH ACUTE' U+00DD + { 1707, 8, 11, 10, 1, -10 }, // 0xbe 'LATIN CAPITAL LETTER THORN' U+00DE + { 1718, 9, 12, 11, 1, -11 }, // 0xbf 'LATIN SMALL LETTER SHARP S' U+00DF + { 1732, 7, 13, 9, 1, -12 }, // 0xc0 'LATIN SMALL LETTER A WITH GRAVE' U+00E0 + { 1744, 7, 13, 9, 1, -12 }, // 0xc1 'LATIN SMALL LETTER A WITH ACUTE' U+00E1 + { 1756, 7, 12, 9, 1, -11 }, // 0xc2 'LATIN SMALL LETTER A WITH CIRCUMFLEX' U+00E2 + { 1767, 7, 13, 9, 1, -12 }, // 0xc3 'LATIN SMALL LETTER A WITH TILDE' U+00E3 + { 1779, 7, 12, 9, 1, -11 }, // 0xc4 'LATIN SMALL LETTER A WITH DIAERESIS' U+00E4 + { 1790, 7, 13, 9, 1, -12 }, // 0xc5 'LATIN SMALL LETTER A WITH RING ABOVE' U+00E5 + { 1802, 12, 8, 14, 1, -7 }, // 0xc6 'LATIN SMALL LETTER AE' U+00E6 + { 1814, 7, 11, 8, 1, -7 }, // 0xc7 'LATIN SMALL LETTER C WITH CEDILLA' U+00E7 + { 1824, 7, 13, 9, 1, -12 }, // 0xc8 'LATIN SMALL LETTER E WITH GRAVE' U+00E8 + { 1836, 7, 13, 9, 1, -12 }, // 0xc9 'LATIN SMALL LETTER E WITH ACUTE' U+00E9 + { 1848, 7, 12, 9, 1, -11 }, // 0xca 'LATIN SMALL LETTER E WITH CIRCUMFLEX' U+00EA + { 1859, 7, 12, 9, 1, -11 }, // 0xcb 'LATIN SMALL LETTER E WITH DIAERESIS' U+00EB + { 1870, 4, 13, 4, 0, -12 }, // 0xcc 'LATIN SMALL LETTER I WITH GRAVE' U+00EC + { 1877, 4, 13, 4, 0, -12 }, // 0xcd 'LATIN SMALL LETTER I WITH ACUTE' U+00ED + { 1884, 5, 12, 4, 0, -11 }, // 0xce 'LATIN SMALL LETTER I WITH CIRCUMFLEX' U+00EE + { 1892, 5, 12, 4, -1, -11 }, // 0xcf 'LATIN SMALL LETTER I WITH DIAERESIS' U+00EF + { 1900, 8, 12, 10, 1, -11 }, // 0xd0 'LATIN SMALL LETTER ETH' U+00F0 + { 1912, 7, 13, 9, 1, -12 }, // 0xd1 'LATIN SMALL LETTER N WITH TILDE' U+00F1 + { 1924, 8, 13, 10, 1, -12 }, // 0xd2 'LATIN SMALL LETTER O WITH GRAVE' U+00F2 + { 1937, 8, 13, 10, 1, -12 }, // 0xd3 'LATIN SMALL LETTER O WITH ACUTE' U+00F3 + { 1950, 8, 12, 10, 1, -11 }, // 0xd4 'LATIN SMALL LETTER O WITH CIRCUMFLEX' U+00F4 + { 1962, 8, 13, 10, 1, -12 }, // 0xd5 'LATIN SMALL LETTER O WITH TILDE' U+00F5 + { 1975, 8, 12, 10, 1, -11 }, // 0xd6 'LATIN SMALL LETTER O WITH DIAERESIS' U+00F6 + { 1987, 7, 10, 9, 1, -9 }, // 0xd7 'DIVISION SIGN' U+00F7 + { 1996, 8, 8, 10, 1, -7 }, // 0xd8 'LATIN SMALL LETTER O WITH STROKE' U+00F8 + { 2004, 7, 13, 9, 1, -12 }, // 0xd9 'LATIN SMALL LETTER U WITH GRAVE' U+00F9 + { 2016, 7, 13, 9, 1, -12 }, // 0xda 'LATIN SMALL LETTER U WITH ACUTE' U+00FA + { 2028, 7, 12, 9, 1, -11 }, // 0xdb 'LATIN SMALL LETTER U WITH CIRCUMFLEX' U+00FB + { 2039, 7, 12, 9, 1, -11 }, // 0xdc 'LATIN SMALL LETTER U WITH DIAERESIS' U+00FC + { 2050, 9, 16, 9, 0, -12 }, // 0xdd 'LATIN SMALL LETTER Y WITH ACUTE' U+00FD + { 2068, 8, 15, 10, 1, -11 }, // 0xde 'LATIN SMALL LETTER THORN' U+00FE + { 2083, 9, 15, 9, 0, -11 } }; // 0xdf 'LATIN SMALL LETTER Y WITH DIAERESIS' U+000FF + +const GFXfont Ubuntu_Bold8pt8b PROGMEM = { + (uint8_t *)Ubuntu_Bold8pt8bBitmaps, + (GFXglyph *)Ubuntu_Bold8pt8bGlyphs, + 0x20, 0xDF, 18 }; + +// Approx. 3451 bytes diff --git a/lib/obp60task/obp60task.cpp b/lib/obp60task/obp60task.cpp index 7d25ab6..5043b64 100644 --- a/lib/obp60task/obp60task.cpp +++ b/lib/obp60task/obp60task.cpp @@ -336,10 +336,10 @@ void underVoltageDetection(GwApi *api, CommonData &common){ //getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update getdisplay().fillScreen(common.bgcolor);// Clear screen getdisplay().setTextColor(common.fgcolor); - getdisplay().setFont(&Ubuntu_Bold20pt7b); + getdisplay().setFont(&Ubuntu_Bold20pt8b); getdisplay().setCursor(65, 150); getdisplay().print("Undervoltage"); - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(65, 175); getdisplay().print("Charge battery and restart system"); getdisplay().nextPage(); // Partial update @@ -356,10 +356,10 @@ void underVoltageDetection(GwApi *api, CommonData &common){ getdisplay().setPartialWindow(0, 0, getdisplay().width(), getdisplay().height()); // Set partial update getdisplay().fillScreen(common.bgcolor);// Clear screen getdisplay().setTextColor(common.fgcolor); - getdisplay().setFont(&Ubuntu_Bold20pt7b); + getdisplay().setFont(&Ubuntu_Bold20pt8b); getdisplay().setCursor(65, 150); getdisplay().print("Undervoltage"); - getdisplay().setFont(&Ubuntu_Bold8pt7b); + getdisplay().setFont(&Ubuntu_Bold8pt8b); getdisplay().setCursor(65, 175); getdisplay().print("To wake up repower system"); getdisplay().nextPage(); // Partial update From 7f954e702d35fd3bb12a2bf85cddda4f011206f3 Mon Sep 17 00:00:00 2001 From: norbert-walter Date: Fri, 11 Jul 2025 18:37:12 +0200 Subject: [PATCH 36/36] Add debugging info --- lib/obp60task/debugging.txt | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 lib/obp60task/debugging.txt diff --git a/lib/obp60task/debugging.txt b/lib/obp60task/debugging.txt new file mode 100644 index 0000000..c0a22e0 --- /dev/null +++ b/lib/obp60task/debugging.txt @@ -0,0 +1,6 @@ +Debugging tool +############## + +log.txt = text file with error messages from terminal console + +tools/decoder.py -p ESP32S3 -t ~/.platformio/packages/toolchain-xtensa-esp32s3/ -e .pio/build/obp60_s3/firmware.elf log.txt \ No newline at end of file