From b9707bb04d0ba9fba324783d26ea225d38ca196f Mon Sep 17 00:00:00 2001 From: wildfire070 Date: Sat, 25 Apr 2026 21:35:45 -0400 Subject: [PATCH 1/9] Capy Logo, FW name/version change, added MakeFile - Changed FW name in translations/english.yaml - Changed FW name in scripts/git_branch.py - Changed logo size in scr/activities/boot_sleep/BootActivity.cpp and SleepActivity.cpp - Added logo png and logo120.h to src/images - Added MakeFile --- Makefile | 163 +++++++++++++++ lib/I18n/translations/english.yaml | 2 +- scripts/git_branch.py | 8 +- src/activities/boot_sleep/BootActivity.cpp | 2 +- src/activities/boot_sleep/SleepActivity.cpp | 2 +- src/images/Logo120.h | 207 +++++++++++--------- src/images/crossink.png | Bin 163058 -> 90225 bytes 7 files changed, 280 insertions(+), 104 deletions(-) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000..02a4c8c6e9 --- /dev/null +++ b/Makefile @@ -0,0 +1,163 @@ +# Makefile for Capy Reader firmware +# Wraps PlatformIO commands for convenience + +.PHONY: all build build-release release upload upload-release flash flash-release \ + clean format check monitor size erase build-fs upload-fs sleep-screen gh-release changelog help \ + test test-build test-run test-clean fontconvert-bin reader-test + +# Default target +all: help + +# Build targets +build: ## Build firmware (default environment) + pio run + +build-release: ## Build release firmware + pio run -e gh_release + +release: build-release ## Alias for build-release + +# Upload targets +upload: ## Build and flash to device + pio run --target upload + +upload-release: ## Build and flash release firmware + pio run -e gh_release --target upload + +# Aliases +flash: upload ## Alias for upload + +flash-release: upload-release ## Alias for upload-release + +# Clean +clean: ## Clean build artifacts + pio run --target clean + +# Code quality +format: ## Format code with clang-format + ./bin/clang-format-fix + +check: ## Run static analysis (cppcheck) + pio check + +# Device/debug +monitor: ## Open serial monitor + pio device monitor + +size: ## Show firmware size + pio run --target size + +erase: ## Erase device flash + pio run --target erase + +# Filesystem +build-fs: ## Build filesystem image + pio run --target buildfs + +upload-fs: ## Upload filesystem to device + pio run --target uploadfs + +# Release +tag: ## Create and push a version tag (triggers GitHub release) + @read -p "Enter tag version (e.g., 1.0.0): " TAG; \ + if [[ $$TAG =~ ^[0-9]+\.[0-9]+\.[0-9]+$$ ]]; then \ + git tag -a v$$TAG -m "v$$TAG"; \ + git push origin v$$TAG; \ + echo "Tag v$$TAG created and pushed successfully."; \ + else \ + echo "Invalid tag format. Please use X.Y.Z (e.g., 1.0.0)"; \ + exit 1; \ + fi + +gh-release: build-release ## Create GitHub release with firmware +ifndef VERSION + $(error VERSION is required. Usage: make gh-release VERSION=0.1.1 [NOTES="..."]) +endif +ifdef NOTES + gh release create v$(VERSION) .pio/build/gh_release/firmware.bin \ + --repo wildfire070/CapInk \ + --title "Capy v$(VERSION)" \ + --notes "$(NOTES)" +else + gh release create v$(VERSION) .pio/build/gh_release/firmware.bin \ + --repo wildfire070/CapInk \ + --title "Capy v$(VERSION)" \ + --generate-notes +endif + +changelog: ## Generate CHANGELOG.md from git history + @echo "Generating CHANGELOG.md..." + @echo "" > CHANGELOG.md; \ + previous_tag=0; \ + for current_tag in $$(git tag --sort=-creatordate); do \ + if [ "$$previous_tag" != 0 ]; then \ + tag_date=$$(git log -1 --pretty=format:'%ad' --date=short $${previous_tag}); \ + printf "\n## $${previous_tag} ($${tag_date})\n\n" >> CHANGELOG.md; \ + git log $${current_tag}...$${previous_tag} --pretty=format:'* %s [[%an](mailto:%ae)]' --reverse | grep -v Merge >> CHANGELOG.md; \ + printf "\n" >> CHANGELOG.md; \ + fi; \ + previous_tag=$${current_tag}; \ + done; \ + if [ "$$previous_tag" != 0 ]; then \ + tag_date=$$(git log -1 --pretty=format:'%ad' --date=short $${previous_tag}); \ + printf "\n## $${previous_tag} ($${tag_date})\n\n" >> CHANGELOG.md; \ + git log $${previous_tag} --pretty=format:'* %s [[%an](mailto:%ae)]' --reverse | grep -v Merge >> CHANGELOG.md; \ + printf "\n" >> CHANGELOG.md; \ + fi + @echo "CHANGELOG.md generated successfully." + +# Image conversion +sleep-screen: ## Convert image to sleep screen BMP +ifdef INPUT +ifdef OUTPUT + cd scripts && node create-sleep-screen.mjs ../$(INPUT) ../$(OUTPUT) $(ARGS) +else + @echo "Usage: make sleep-screen INPUT= OUTPUT= [ARGS='--dither --bits 8']" +endif +else + @echo "Usage: make sleep-screen INPUT= OUTPUT= [ARGS='--dither --bits 8']" + @echo "Example: make sleep-screen INPUT=photo.jpg OUTPUT=sleep.bmp" +endif + +## Unit Tests: + +test: test-build test-run ## Build and run all unit tests + +test-build: ## Build unit tests + @mkdir -p test/build + @cd test/build && cmake .. -DCMAKE_BUILD_TYPE=Debug && cmake --build . --parallel + +test-run: ## Run unit tests (build first if needed) + @if [ ! -d test/build/bin ]; then $(MAKE) test-build; fi + @test/scripts/run_tests.sh + +test-clean: ## Clean test build artifacts + @rm -rf test/build + +## Tools: + +fontconvert-bin: ## Build Go fontconvert-bin tool (CJK .bin font converter) + $(MAKE) -C tools/fontconvert-bin build + +reader-test: ## Build desktop reader-test tool (process books without flashing) + @mkdir -p tools/reader-test/build + @cd tools/reader-test/build && cmake .. && cmake --build . --parallel + @echo "Built: tools/reader-test/build/reader-test" +ifdef FILE + @tools/reader-test/build/reader-test $(FILE) $(OUTPUT) +endif + +## Help: + +help: ## Show this help + @echo "Capy - Build System" + @echo "" + @echo "Usage: make [target]" + @echo "" + @awk 'BEGIN {FS = ":.*##"; section=""} \ + /^##/ { section=substr($$0, 4); next } \ + /^[a-zA-Z_-]+:.*##/ { \ + if (section != "") { printf "\n\033[1m%s\033[0m\n", section; section="" } \ + printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 \ + }' $(MAKEFILE_LIST) + @echo "" \ No newline at end of file diff --git a/lib/I18n/translations/english.yaml b/lib/I18n/translations/english.yaml index 2a9ef6647c..55ca80df96 100644 --- a/lib/I18n/translations/english.yaml +++ b/lib/I18n/translations/english.yaml @@ -3,7 +3,7 @@ _language_code: "EN" _order: "0" STR_CROSSPOINT: "CrossPoint" -STR_CROSSINK: "CrossInk" +STR_CROSSINK: "CapInkFusion" STR_BOOTING: "BOOTING" STR_SLEEPING: "SLEEPING" STR_ENTERING_SLEEP: "Going to sleep" diff --git a/scripts/git_branch.py b/scripts/git_branch.py index 0327de7843..15fc072033 100644 --- a/scripts/git_branch.py +++ b/scripts/git_branch.py @@ -46,13 +46,13 @@ def get_git_branch(project_dir): return ''.join(c for c in branch if c not in '"\\') except FileNotFoundError: warn('git not found on PATH; branch suffix will be "unknown"') - return 'unknown' + return 'Capy' except subprocess.CalledProcessError as e: warn(f'git command failed (exit {e.returncode}): {e.stderr.strip()}; branch suffix will be "unknown"') - return 'unknown' + return 'Capy' except Exception as e: warn(f'Unexpected error reading git branch: {e}; branch suffix will be "unknown"') - return 'unknown' + return 'Capy' def _read_ini(project_dir): @@ -88,7 +88,7 @@ def inject_version(env): if pioenv == 'default': base_version = get_base_version(project_dir) branch = get_git_branch(project_dir) - version_string = f'{base_version}-dev+{branch}' + version_string = f'{base_version}-Capy+{branch}' env.Append(CPPDEFINES=[('CROSSPOINT_VERSION', f'\\"{version_string}\\"')]) print(f'CrossPoint build version: {version_string}') diff --git a/src/activities/boot_sleep/BootActivity.cpp b/src/activities/boot_sleep/BootActivity.cpp index 5ab0941a44..6084836b4f 100644 --- a/src/activities/boot_sleep/BootActivity.cpp +++ b/src/activities/boot_sleep/BootActivity.cpp @@ -14,7 +14,7 @@ void BootActivity::onEnter() { const auto pageHeight = renderer.getScreenHeight(); renderer.clearScreen(); - renderer.drawImage(Logo120, (pageWidth - 120) / 2, (pageHeight - 120) / 2, 120, 120); + renderer.drawImage(Logo120, (pageWidth - 128) / 2, (pageHeight - 128) / 2, 128, 128); renderer.drawCenteredText(UI_10_FONT_ID, pageHeight / 2 + 70, tr(STR_CROSSINK), true, EpdFontFamily::BOLD); renderer.drawCenteredText(SMALL_FONT_ID, pageHeight / 2 + 95, tr(STR_BOOTING)); renderer.drawCenteredText(SMALL_FONT_ID, pageHeight - 30, CROSSINK_VERSION); diff --git a/src/activities/boot_sleep/SleepActivity.cpp b/src/activities/boot_sleep/SleepActivity.cpp index 3d892c57f9..82499c4e0e 100644 --- a/src/activities/boot_sleep/SleepActivity.cpp +++ b/src/activities/boot_sleep/SleepActivity.cpp @@ -129,7 +129,7 @@ void SleepActivity::renderDefaultSleepScreen() const { const auto pageHeight = renderer.getScreenHeight(); renderer.clearScreen(); - renderer.drawImage(Logo120, (pageWidth - 120) / 2, (pageHeight - 120) / 2, 120, 120); + renderer.drawImage(Logo120, (pageWidth - 128) / 2, (pageHeight - 128) / 2, 128, 128); renderer.drawCenteredText(UI_10_FONT_ID, pageHeight / 2 + 70, tr(STR_CROSSPOINT), true, EpdFontFamily::BOLD); renderer.drawCenteredText(SMALL_FONT_ID, pageHeight / 2 + 95, tr(STR_SLEEPING)); diff --git a/src/images/Logo120.h b/src/images/Logo120.h index 2bb437481d..572db224e6 100644 --- a/src/images/Logo120.h +++ b/src/images/Logo120.h @@ -1,101 +1,114 @@ #pragma once #include -// 'crossink', 120x120px +// Image dimensions: 120x120 static const uint8_t Logo120[] = { - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x1f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xf8, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, - 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x03, 0x80, 0x00, 0x00, - 0xfe, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x01, 0xf8, 0x00, 0x03, 0xfe, 0x00, 0x03, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x7f, 0x80, 0x1f, 0xff, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xc0, 0x00, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, - 0x0f, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x07, 0xff, 0xff, 0xfe, - 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x01, 0xff, 0xff, 0xfc, 0x00, 0x1f, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x7f, 0xff, 0xf8, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x80, 0x00, 0x1f, 0xff, 0xf0, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, - 0x03, 0xff, 0xc0, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x3c, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, - 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x3f, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xf0, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; -static_assert(sizeof(Logo120) == 1800, "Logo120 must be exactly 120x120 / 8 bytes"); \ No newline at end of file + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, + 0xC3, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xF1, 0xFF, 0xF1, + 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFC, 0xFF, 0xE7, 0xFC, 0x3F, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xBE, 0x7F, 0xCF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xDE, 0x7F, 0x9F, 0x87, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF7, 0xEF, 0x3F, 0x9F, 0x00, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xF3, 0xE7, 0x3F, 0x3E, 0x00, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xF3, 0xBF, + 0x3E, 0x38, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xF9, 0xBF, 0x3C, 0x7E, 0x0C, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xF9, 0xBF, 0x3E, 0x7F, 0x0E, 0x7F, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFC, 0xBF, 0x3E, 0x7F, 0x8E, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7C, 0x3F, 0x3E, 0x7F, 0x87, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, + 0x00, 0x1F, 0x1E, 0x3F, 0x3E, 0x3F, 0xC3, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFE, 0x07, 0x86, + 0x7F, 0x9F, 0x3F, 0xE3, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xE0, 0xE0, 0x7F, 0x90, 0x3F, + 0xE3, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFC, 0x7C, 0xFC, 0x00, 0x1F, 0xF1, 0xCF, 0x87, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0x3F, 0xF0, 0x00, 0x03, 0xF1, 0xCE, 0x01, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0x9F, 0xE7, 0x1F, 0x80, 0x70, 0xCC, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFD, 0xF7, 0xFF, 0xCF, 0xC8, 0x98, 0xFC, 0x00, 0x40, 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF8, 0xFF, + 0xEF, 0x80, 0x48, 0x07, 0x80, 0x00, 0x7C, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0x1F, 0xEF, 0x80, 0x0C, + 0x00, 0x70, 0x00, 0x3E, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0x81, 0xEF, 0x00, 0x04, 0x00, 0x1C, 0x00, + 0x1E, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xE0, 0x0F, 0x00, 0x06, 0x00, 0x06, 0x00, 0x1F, 0x1F, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFE, 0x0E, 0x00, 0x06, 0x00, 0x01, 0x80, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x8F, 0xFF, 0x9E, 0x00, 0xF3, 0x00, 0x00, 0xC0, 0x0F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, + 0xFF, 0x1C, 0x07, 0xF3, 0x00, 0x00, 0x30, 0x0F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xFE, 0x3C, 0x3F, + 0xF3, 0x00, 0x00, 0x18, 0x07, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x30, 0xF8, 0x7F, 0xF9, 0x00, 0x00, + 0x08, 0x07, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x03, 0xF1, 0xFF, 0x19, 0x80, 0x00, 0x04, 0x03, 0xC7, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xFE, 0x79, 0xFE, 0x00, 0x02, 0x03, 0xE3, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xF9, 0xFF, 0xC0, 0x03, 0x01, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x9F, 0x9F, 0xF9, 0xFF, 0xF0, 0x01, 0x01, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, + 0x3F, 0xF9, 0xFF, 0xFC, 0x01, 0x81, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0x7E, 0x3D, 0xFF, + 0xFF, 0x00, 0x80, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFC, 0xFD, 0xFF, 0xFF, 0x80, 0xC0, + 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xF9, 0xFC, 0xFF, 0xFF, 0xC0, 0x40, 0xF1, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x07, 0xC1, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xE0, 0x40, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, + 0x63, 0x8F, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xF0, 0x20, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xF8, 0x3F, 0xFF, + 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xF8, 0x20, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xBC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, + 0xFF, 0xFF, 0xFC, 0x20, 0x79, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFE, + 0x20, 0x39, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xBE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFE, 0x20, 0x38, 0xFF, + 0xFF, 0xFF, 0xFF, 0xE3, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0x84, 0xFF, 0xFF, 0xFF, 0x20, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, + 0xC9, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x30, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x90, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xF8, 0xFF, 0xFF, 0xFF, 0x90, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, + 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xF0, 0xDF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, + 0xFF, 0xFF, 0xF8, 0xE7, 0xDF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFE, + 0x0F, 0xDF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x7F, + 0xF1, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xF8, 0xFF, 0xFF, + 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, + 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xF0, 0x5E, 0x7F, 0xFE, 0xFF, 0xFF, 0xFE, 0x7E, 0x3F, 0xFF, 0xFF, 0xF0, + 0x38, 0xFF, 0xFF, 0xFD, 0xE7, 0xDE, 0x7F, 0xFE, 0xFF, 0xFF, 0xFE, 0x7F, 0x0F, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, + 0xFC, 0x4F, 0xDE, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0x7F, 0xCF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0x1F, 0xDE, + 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0x3F, 0xC7, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xF3, 0xFF, + 0xFF, 0xFF, 0x3F, 0xE7, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, + 0xE7, 0xFF, 0xFF, 0xE0, 0x39, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xCF, 0x07, 0xFF, 0xFF, + 0xE0, 0x39, 0xFF, 0xFF, 0xFF, 0xFF, 0xEC, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xC7, 0xC7, 0xFF, 0xFF, 0xE0, 0x31, 0xFF, + 0xFF, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xE3, 0xCF, 0xFF, 0xFF, 0xE0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, + 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0x3F, 0xF8, 0x0F, 0xFF, 0xFF, 0xE0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0x3F, 0xFF, + 0xFF, 0xFF, 0x3F, 0xFC, 0x3F, 0xFF, 0xFF, 0xC0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x3F, 0xFF, 0xFF, 0xFF, 0x3F, + 0xFC, 0xFF, 0xFF, 0xFF, 0xC0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xBF, 0xFF, 0xFF, 0xFF, 0x3F, 0xC0, 0xFF, 0xFF, + 0xFF, 0xC0, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0x9F, 0xFF, 0xFF, 0xFF, 0x3F, 0x80, 0xFF, 0xFF, 0xFF, 0xC0, 0xF3, + 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFE, 0xFF, 0x3F, 0x3C, 0xFF, 0xFF, 0xFF, 0x80, 0xE3, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFE, 0x4F, 0xFF, 0xFE, 0x1F, 0x3E, 0x7D, 0xFF, 0xFF, 0xFF, 0x81, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, + 0xFF, 0xFE, 0x0F, 0x3E, 0xFD, 0xFF, 0xFF, 0xFF, 0x01, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xE7, + 0x3C, 0xF8, 0xFF, 0xFF, 0xFF, 0x03, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0x7F, 0xE7, 0x3C, 0xF8, 0x7F, + 0xFF, 0xFE, 0x03, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFE, 0x3F, 0xE7, 0x04, 0xFE, 0x3F, 0xFF, 0xFC, 0x07, + 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFE, 0x3F, 0xE7, 0x00, 0xFF, 0x3F, 0xFF, 0xFC, 0x0F, 0xCF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0x3F, 0xE6, 0x00, 0xFF, 0x1F, 0xFF, 0xF0, 0x1F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFE, 0xFF, 0xFF, 0xCE, 0x00, 0x7F, 0xBF, 0xFF, 0xE0, 0x3F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xEF, + 0x9E, 0x00, 0x7C, 0x3F, 0xFF, 0xC3, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xE0, 0x0C, 0x20, 0x3E, + 0x3F, 0xFF, 0x83, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x7F, 0xCC, 0x80, 0x0E, 0x3F, 0xFE, 0x13, + 0xFE, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xC1, 0x90, 0x00, 0x7F, 0xF8, 0x39, 0xFE, 0x3F, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0xFF, 0xC3, 0xC8, 0x47, 0xFF, 0xE0, 0xF8, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xE3, 0xFF, 0x9F, 0xC4, 0xCF, 0xFF, 0x03, 0xFC, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, + 0x7F, 0x1F, 0xE7, 0x8F, 0xFC, 0x0F, 0xFE, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xF0, + 0x1F, 0xC0, 0x7F, 0xFF, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x03, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF + }; diff --git a/src/images/crossink.png b/src/images/crossink.png index 2b0980b11e3a83aced3d2fcfb1ed196b57dc913d..6efac975daaa6c9672feef61a2f1465d311df23b 100644 GIT binary patch literal 90225 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 A)&Kwi literal 163058 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�@`uY+2Qr2D@S-Zd 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
5bWOv*L)+O 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 P4b07qEwP10_=x`jLhgr< From 1e48da7304a3d3b53ed7ebf7efa378201a101c36 Mon Sep 17 00:00:00 2001 From: wildfire070 Date: Sat, 25 Apr 2026 23:28:09 -0400 Subject: [PATCH 2/9] Added BookFusion Sync - BF files added to lib/BookFusionSync, src/activities/reader, and src/activities/settings - Added STR_BF... to lib/l18n/translations/english.yaml - Edited src/activities/reader/epubreaderactivity.cpp, src/activities/settings/settingsactivity.cpp and settings.h, src/jsonsettingsio.cpp and .h, and src/main.cpp --- lib/BookFusionSync/BookFusionBookIdStore.cpp | 69 +++ lib/BookFusionSync/BookFusionBookIdStore.h | 24 ++ lib/BookFusionSync/BookFusionSyncClient.cpp | 395 +++++++++++++++++ lib/BookFusionSync/BookFusionSyncClient.h | 103 +++++ lib/BookFusionSync/BookFusionTokenStore.cpp | 45 ++ lib/BookFusionSync/BookFusionTokenStore.h | 42 ++ lib/I18n/translations/english.yaml | 28 ++ src/JsonSettingsIO.cpp | 31 ++ src/JsonSettingsIO.h | 5 + .../reader/BookFusionSyncActivity.cpp | 333 +++++++++++++++ .../reader/BookFusionSyncActivity.h | 79 ++++ src/activities/reader/EpubReaderActivity.cpp | 51 ++- .../settings/BookFusionAuthActivity.cpp | 278 ++++++++++++ .../settings/BookFusionAuthActivity.h | 54 +++ .../settings/BookFusionBrowserActivity.cpp | 397 ++++++++++++++++++ .../settings/BookFusionBrowserActivity.h | 56 +++ .../settings/BookFusionSettingsActivity.cpp | 97 +++++ .../settings/BookFusionSettingsActivity.h | 27 ++ src/activities/settings/SettingsActivity.cpp | 5 + src/activities/settings/SettingsActivity.h | 1 + src/main.cpp | 2 + 21 files changed, 2096 insertions(+), 26 deletions(-) create mode 100644 lib/BookFusionSync/BookFusionBookIdStore.cpp create mode 100644 lib/BookFusionSync/BookFusionBookIdStore.h create mode 100644 lib/BookFusionSync/BookFusionSyncClient.cpp create mode 100644 lib/BookFusionSync/BookFusionSyncClient.h create mode 100644 lib/BookFusionSync/BookFusionTokenStore.cpp create mode 100644 lib/BookFusionSync/BookFusionTokenStore.h create mode 100644 src/activities/reader/BookFusionSyncActivity.cpp create mode 100644 src/activities/reader/BookFusionSyncActivity.h create mode 100644 src/activities/settings/BookFusionAuthActivity.cpp create mode 100644 src/activities/settings/BookFusionAuthActivity.h create mode 100644 src/activities/settings/BookFusionBrowserActivity.cpp create mode 100644 src/activities/settings/BookFusionBrowserActivity.h create mode 100644 src/activities/settings/BookFusionSettingsActivity.cpp create mode 100644 src/activities/settings/BookFusionSettingsActivity.h diff --git a/lib/BookFusionSync/BookFusionBookIdStore.cpp b/lib/BookFusionSync/BookFusionBookIdStore.cpp new file mode 100644 index 0000000000..c4252423b4 --- /dev/null +++ b/lib/BookFusionSync/BookFusionBookIdStore.cpp @@ -0,0 +1,69 @@ +#include "BookFusionBookIdStore.h" + +#include +#include +#include +#include + +#include +#include + +void BookFusionBookIdStore::buildSidecarPath(const char* epubPath, char* outPath, size_t maxLen) { + MD5Builder md5; + md5.begin(); + md5.add(epubPath); + md5.calculate(); + + // Result: /.crosspoint/bookfusion_<32hexchars>.json (55 chars total) + snprintf(outPath, maxLen, "/.crosspoint/bookfusion_%s.json", md5.toString().c_str()); +} + +uint32_t BookFusionBookIdStore::loadBookId(const char* epubPath) { + char sidecarPath[64]; + buildSidecarPath(epubPath, sidecarPath, sizeof(sidecarPath)); + + if (!Storage.exists(sidecarPath)) { + return 0; + } + + String json = Storage.readFile(sidecarPath); + if (json.isEmpty()) { + return 0; + } + + JsonDocument doc; + if (deserializeJson(doc, json) != DeserializationError::Ok) { + LOG_ERR("BFS", "Sidecar JSON parse error: %s", sidecarPath); + return 0; + } + + const uint32_t bookId = doc["book_id"] | (uint32_t)0; + LOG_DBG("BFS", "Loaded book_id=%lu for %s", (unsigned long)bookId, epubPath); + return bookId; +} + +bool BookFusionBookIdStore::saveBookId(const char* epubPath, uint32_t bookId) { + if (bookId == 0) { + LOG_ERR("BFS", "Refusing to save book_id=0 for %s", epubPath); + return false; + } + + char sidecarPath[64]; + buildSidecarPath(epubPath, sidecarPath, sizeof(sidecarPath)); + + Storage.mkdir("/.crosspoint"); + + JsonDocument doc; + doc["book_id"] = bookId; + + String json; + serializeJson(doc, json); + + const bool ok = Storage.writeFile(sidecarPath, json); + if (ok) { + LOG_DBG("BFS", "Saved book_id=%lu for %s", (unsigned long)bookId, epubPath); + } else { + LOG_ERR("BFS", "Failed to save sidecar: %s", sidecarPath); + } + return ok; +} diff --git a/lib/BookFusionSync/BookFusionBookIdStore.h b/lib/BookFusionSync/BookFusionBookIdStore.h new file mode 100644 index 0000000000..ece9082d42 --- /dev/null +++ b/lib/BookFusionSync/BookFusionBookIdStore.h @@ -0,0 +1,24 @@ +#pragma once +#include +#include + +/** + * Per-book sidecar for BookFusion book IDs. + * + * Each EPUB that was downloaded from BookFusion has an associated sidecar file + * at /.crosspoint/bookfusion_.json containing its numeric book_id. + * + * Returns 0 from loadBookId() when no sidecar exists — 0 is never a valid BookFusion ID. + */ +class BookFusionBookIdStore { + public: + // Load book_id for the given epub path. Returns 0 if not a BookFusion book. + static uint32_t loadBookId(const char* epubPath); + + // Save book_id for an epub path. Returns false on I/O error or if id == 0. + static bool saveBookId(const char* epubPath, uint32_t bookId); + + private: + // Derives /.crosspoint/bookfusion_<32hexchars>.json from the epub path. + static void buildSidecarPath(const char* epubPath, char* outPath, size_t maxLen); +}; diff --git a/lib/BookFusionSync/BookFusionSyncClient.cpp b/lib/BookFusionSync/BookFusionSyncClient.cpp new file mode 100644 index 0000000000..8cc2709cca --- /dev/null +++ b/lib/BookFusionSync/BookFusionSyncClient.cpp @@ -0,0 +1,395 @@ +#include "BookFusionSyncClient.h" + +#include +#include +#include +#include + +#include +#include + +#include "BookFusionTokenStore.h" + +namespace { +// Add auth and accept headers to an authenticated request. +void addAuthHeaders(HTTPClient& http) { + const std::string bearer = "Bearer " + BF_TOKEN_STORE.getToken(); + http.addHeader("Authorization", bearer.c_str()); + http.addHeader("Accept", BookFusionSyncClient::API_ACCEPT); +} +} // namespace + +// --- Device Code Auth --- + +BookFusionSyncClient::Error BookFusionSyncClient::requestDeviceCode(BookFusionDeviceCodeResponse& out) { + char url[128]; + snprintf(url, sizeof(url), "%s/api/user/auth/device", BASE_URL); + LOG_DBG("BFS", "Requesting device code: %s", url); + + WiFiClientSecure secureClient; + secureClient.setInsecure(); + HTTPClient http; + http.begin(secureClient, url); + http.addHeader("Accept", API_ACCEPT); + http.addHeader("Content-Type", "application/json"); + + JsonDocument body; + body["client_id"] = CLIENT_ID; + String bodyStr; + serializeJson(body, bodyStr); + + const int httpCode = http.POST(bodyStr); + String responseBody = http.getString(); + http.end(); + + LOG_DBG("BFS", "requestDeviceCode response: %d", httpCode); + + if (httpCode < 0) { + return NETWORK_ERROR; + } + if (httpCode != 200) { + return SERVER_ERROR; + } + + JsonDocument doc; + if (deserializeJson(doc, responseBody) != DeserializationError::Ok) { + LOG_ERR("BFS", "requestDeviceCode JSON parse error"); + return JSON_ERROR; + } + + strlcpy(out.deviceCode, doc["device_code"] | "", sizeof(out.deviceCode)); + strlcpy(out.userCode, doc["user_code"] | "", sizeof(out.userCode)); + strlcpy(out.verificationUri, doc["verification_uri"] | "", sizeof(out.verificationUri)); + out.interval = doc["interval"] | 5; + out.expiresIn = doc["expires_in"] | 600; + + LOG_DBG("BFS", "Device code received: user_code=%s, interval=%ds, expires_in=%ds", out.userCode, out.interval, + out.expiresIn); + return OK; +} + +BookFusionSyncClient::Error BookFusionSyncClient::pollForToken(const char* deviceCode, char* outToken, + size_t tokenMaxLen) { + char url[128]; + snprintf(url, sizeof(url), "%s/api/user/auth/token", BASE_URL); + + WiFiClientSecure secureClient; + secureClient.setInsecure(); + HTTPClient http; + http.begin(secureClient, url); + http.addHeader("Accept", API_ACCEPT); + http.addHeader("Content-Type", "application/json"); + + JsonDocument body; + body["grant_type"] = DEVICE_CODE_GRANT_TYPE; + body["client_id"] = CLIENT_ID; + body["device_code"] = deviceCode; + String bodyStr; + serializeJson(body, bodyStr); + + const int httpCode = http.POST(bodyStr); + String responseBody = http.getString(); + http.end(); + + LOG_DBG("BFS", "pollForToken response: %d", httpCode); + + if (httpCode < 0) { + return NETWORK_ERROR; + } + + JsonDocument doc; + if (deserializeJson(doc, responseBody) != DeserializationError::Ok) { + LOG_ERR("BFS", "pollForToken JSON parse error"); + return JSON_ERROR; + } + + if (httpCode == 200) { + const char* token = doc["access_token"] | ""; + if (token[0] == '\0') { + return JSON_ERROR; + } + strlcpy(outToken, token, tokenMaxLen); + LOG_DBG("BFS", "Token received"); + return OK; + } + + // Map OAuth error codes + const char* errCode = doc["error"] | ""; + LOG_DBG("BFS", "pollForToken error: %s", errCode); + + if (strcmp(errCode, "authorization_pending") == 0) return PENDING; + if (strcmp(errCode, "slow_down") == 0) return SLOW_DOWN; + if (strcmp(errCode, "expired_token") == 0) return EXPIRED; + if (strcmp(errCode, "access_denied") == 0) return DENIED; + // BookFusion returns "invalid_grant" (HTTP 400) while authorization is still + // pending — non-standard, but the official Lua plugin keeps polling on any + // unrecognised error, so we do the same. + if (strcmp(errCode, "invalid_grant") == 0) return PENDING; + + return SERVER_ERROR; +} + +// --- Progress --- + +BookFusionSyncClient::Error BookFusionSyncClient::getProgress(uint32_t bookId, BookFusionPosition& out) { + if (!BF_TOKEN_STORE.hasToken()) { + return NO_TOKEN; + } + + char url[128]; + snprintf(url, sizeof(url), "%s/api/user/books/%lu/reading_position", BASE_URL, (unsigned long)bookId); + LOG_DBG("BFS", "getProgress: %s", url); + + WiFiClientSecure secureClient; + secureClient.setInsecure(); + HTTPClient http; + http.begin(secureClient, url); + addAuthHeaders(http); + + const int httpCode = http.GET(); + + if (httpCode == 200) { + String responseBody = http.getString(); + http.end(); + + JsonDocument doc; + if (deserializeJson(doc, responseBody) != DeserializationError::Ok) { + LOG_ERR("BFS", "getProgress JSON parse error"); + return JSON_ERROR; + } + + out.percentage = doc["percentage"] | 0.0f; + out.chapterIndex = doc["chapter_index"] | 0; + out.pagePositionInBook = doc["page_position_in_book"] | 0.0f; + + LOG_DBG("BFS", "Remote progress: %.2f%%, chapter %d", out.percentage, out.chapterIndex); + return OK; + } + + http.end(); + LOG_DBG("BFS", "getProgress response: %d", httpCode); + + if (httpCode == 404) return NOT_FOUND; + if (httpCode == 401) return AUTH_FAILED; + if (httpCode < 0) return NETWORK_ERROR; + return SERVER_ERROR; +} + +BookFusionSyncClient::Error BookFusionSyncClient::setProgress(uint32_t bookId, const BookFusionPosition& pos) { + if (!BF_TOKEN_STORE.hasToken()) { + return NO_TOKEN; + } + + char url[128]; + snprintf(url, sizeof(url), "%s/api/user/books/%lu/reading_position", BASE_URL, (unsigned long)bookId); + LOG_DBG("BFS", "setProgress: %s (%.2f%%)", url, pos.percentage); + + WiFiClientSecure secureClient; + secureClient.setInsecure(); + HTTPClient http; + http.begin(secureClient, url); + addAuthHeaders(http); + http.addHeader("Content-Type", "application/json"); + + JsonDocument body; + body["percentage"] = pos.percentage; + body["chapter_index"] = pos.chapterIndex; + body["page_position_in_book"] = pos.pagePositionInBook; + String bodyStr; + serializeJson(body, bodyStr); + + const int httpCode = http.POST(bodyStr); + http.end(); + + LOG_DBG("BFS", "setProgress response: %d", httpCode); + + if (httpCode == 200 || httpCode == 201) return OK; + if (httpCode == 401) return AUTH_FAILED; + if (httpCode < 0) return NETWORK_ERROR; + return SERVER_ERROR; +} + +// --- Library Browse & Download --- + +BookFusionSyncClient::Error BookFusionSyncClient::searchBooks(int page, BookFusionSearchResult& out, const char* list, + const char* sort) { + if (!BF_TOKEN_STORE.hasToken()) return NO_TOKEN; + + char url[128]; + snprintf(url, sizeof(url), "%s/api/user/books/search", BASE_URL); + + WiFiClientSecure secureClient; + secureClient.setInsecure(); + HTTPClient http; + http.begin(secureClient, url); + addAuthHeaders(http); + http.addHeader("Content-Type", "application/json"); + + // 8 books per display page keeps the raw response under ~20 KB. + // Arduino String grows by doubling: a 53 KB response (21 books) needs a + // ~64 KB buffer during the final realloc, pushing peak heap above 113 KB. + // With 8 books the response is ~20 KB → peak ~40 KB, well within budget. + // Request 9 to detect hasMore without needing response headers. + static constexpr int BOOKS_PER_PAGE = 8; + + JsonDocument reqBody; + reqBody["page"] = page; + reqBody["per_page"] = BOOKS_PER_PAGE + 1; + reqBody["sort"] = (sort != nullptr) ? sort : "added_at-desc"; + if (list != nullptr) { + reqBody["list"] = list; + } + String bodyStr; + serializeJson(reqBody, bodyStr); + + const int httpCode = http.POST(bodyStr); + LOG_DBG("BFS", "searchBooks page=%d response: %d", page, httpCode); + + if (httpCode < 0) { + http.end(); + return NETWORK_ERROR; + } + if (httpCode == 401) { + http.end(); + return AUTH_FAILED; + } + if (httpCode != 200) { + http.end(); + return SERVER_ERROR; + } + + // Read the full response body before parsing. Streaming from WiFiClientSecure + // causes IncompleteInput errors because TLS chunks arrive after ArduinoJson + // has already read past the end of what was buffered. + String responseBody = http.getString(); + http.end(); + + // Build a filter that discards every field except the four we need. + // BookFusion books carry ~20 fields (cover URLs, descriptions, etc.); keeping + // only what we display reduces JsonDocument heap from ~30 KB to ~5 KB. + JsonDocument filter; + filter[0]["id"] = true; + filter[0]["title"] = true; + filter[0]["format"] = true; + filter[0]["authors"][0]["name"] = true; + + JsonDocument doc; + const auto parseErr = deserializeJson(doc, responseBody, DeserializationOption::Filter(filter)); + + if (parseErr != DeserializationError::Ok) { + LOG_ERR("BFS", "searchBooks JSON parse error: %s", parseErr.c_str()); + return JSON_ERROR; + } + + if (!doc.is()) { + LOG_ERR("BFS", "searchBooks: expected JSON array"); + return JSON_ERROR; + } + + JsonArray arr = doc.as(); + out.count = 0; + out.currentPage = page; + out.hasMore = false; + + for (JsonObject book : arr) { + if (out.count >= BOOKS_PER_PAGE) { + out.hasMore = true; + break; + } + + BookFusionBook& b = out.books[out.count]; + b.id = book["id"] | static_cast(0); + if (b.id == 0) continue; + + strlcpy(b.title, book["title"] | "Untitled", sizeof(b.title)); + strlcpy(b.format, book["format"] | "epub", sizeof(b.format)); + + // Concatenate author names from the authors array. + b.authors[0] = '\0'; + JsonArray authors = book["authors"].as(); + bool first = true; + for (JsonObject author : authors) { + const char* name = author["name"] | ""; + if (name[0] != '\0') { + if (!first) strlcat(b.authors, ", ", sizeof(b.authors)); + strlcat(b.authors, name, sizeof(b.authors)); + first = false; + } + } + + out.count++; + } + + LOG_DBG("BFS", "searchBooks: %d books on page %d, hasMore=%d", out.count, page, out.hasMore); + return OK; +} + +BookFusionSyncClient::Error BookFusionSyncClient::getDownloadUrl(uint32_t bookId, char* outUrl, size_t maxLen) { + if (!BF_TOKEN_STORE.hasToken()) return NO_TOKEN; + + char url[128]; + snprintf(url, sizeof(url), "%s/api/user/books/%lu/download", BASE_URL, static_cast(bookId)); + + WiFiClientSecure secureClient; + secureClient.setInsecure(); + HTTPClient http; + http.begin(secureClient, url); + addAuthHeaders(http); + http.addHeader("Content-Type", "application/json"); + + const int httpCode = http.POST("{}"); + String responseBody = http.getString(); + http.end(); + + LOG_DBG("BFS", "getDownloadUrl book=%lu response: %d", static_cast(bookId), httpCode); + + if (httpCode < 0) return NETWORK_ERROR; + if (httpCode == 401) return AUTH_FAILED; + if (httpCode == 403 || httpCode == 404) return NOT_FOUND; + if (httpCode != 200) return SERVER_ERROR; + + JsonDocument doc; + if (deserializeJson(doc, responseBody) != DeserializationError::Ok) { + LOG_ERR("BFS", "getDownloadUrl JSON parse error"); + return JSON_ERROR; + } + + const char* dlUrl = doc["url"] | ""; + if (dlUrl[0] == '\0') { + LOG_ERR("BFS", "getDownloadUrl: missing url field"); + return JSON_ERROR; + } + + strlcpy(outUrl, dlUrl, maxLen); + LOG_DBG("BFS", "getDownloadUrl: ok"); + return OK; +} + +const char* BookFusionSyncClient::errorString(Error error) { + switch (error) { + case OK: + return "Success"; + case NO_TOKEN: + return "Not logged in to BookFusion"; + case NETWORK_ERROR: + return "Network error"; + case AUTH_FAILED: + return "Authentication failed"; + case SERVER_ERROR: + return "Server error (try again later)"; + case JSON_ERROR: + return "JSON parse error"; + case NOT_FOUND: + return "No progress found"; + case PENDING: + return "Authorization pending"; + case SLOW_DOWN: + return "Slow down polling"; + case EXPIRED: + return "Device code expired"; + case DENIED: + return "Authorization denied"; + default: + return "Unknown error"; + } +} diff --git a/lib/BookFusionSync/BookFusionSyncClient.h b/lib/BookFusionSync/BookFusionSyncClient.h new file mode 100644 index 0000000000..fad69db96a --- /dev/null +++ b/lib/BookFusionSync/BookFusionSyncClient.h @@ -0,0 +1,103 @@ +#pragma once +#include +#include + +/** + * BookFusion reading position (EPUB). + * + * percentage: 0–100 (note: BookFusion uses 0-100, unlike KOReader's 0.0-1.0) + * chapterIndex: spine index, 0-based + * pagePositionInBook: (chapterIndex + fractional_position_in_chapter) / total_spine_count + */ +struct BookFusionPosition { + float percentage = 0.0f; // 0–100 + float pagePositionInBook = 0.0f; // fractional book position + int chapterIndex = 0; // spine index, 0-based +}; + +/** + * Response from the device-code auth endpoint. + */ +struct BookFusionDeviceCodeResponse { + char deviceCode[256] = {}; + char userCode[16] = {}; + char verificationUri[128] = {}; + int interval = 5; // seconds between polls + int expiresIn = 600; // seconds until code expires +}; + +/** + * A single book from the user's BookFusion library. + */ +struct BookFusionBook { + uint32_t id = 0; + char title[64] = {}; + char authors[48] = {}; + char format[8] = {}; // "EPUB", "PDF", etc. +}; + +/** + * Paginated result from the book search endpoint. + * Request one extra item (MAX_BOOKS + 1) to detect whether more pages exist. + */ +struct BookFusionSearchResult { + static constexpr int MAX_BOOKS = 20; + BookFusionBook books[MAX_BOOKS]; + int count = 0; + int currentPage = 0; + bool hasMore = false; +}; + +/** + * HTTP client for the BookFusion API. + * + * Base URL: https://www.bookfusion.com + * All authenticated requests use: Authorization: Bearer + * Accept: application/json; api_version=10 + * + * Authentication uses the OAuth 2.0 Device Code flow: + * 1. requestDeviceCode() → display verificationUri + userCode to user + * 2. pollForToken() every interval seconds → returns OK + token when authorised + * + * Progress API: + * getProgress(bookId, out) → GET /api/user/books/{id}/reading_position + * setProgress(bookId, pos) → POST /api/user/books/{id}/reading_position + */ +class BookFusionSyncClient { + public: + enum Error { + OK = 0, + NO_TOKEN, // BF_TOKEN_STORE has no token + NETWORK_ERROR, // HTTP/TLS failure + AUTH_FAILED, // 401 Unauthorized + SERVER_ERROR, // 5xx or unexpected code + JSON_ERROR, // Failed to parse response + NOT_FOUND, // 404 — no progress exists yet + PENDING, // authorization_pending — keep polling + SLOW_DOWN, // slow_down — increase poll interval + EXPIRED, // expired_token + DENIED, // access_denied by user + }; + + // --- Device Code Auth (unauthenticated) --- + static Error requestDeviceCode(BookFusionDeviceCodeResponse& out); + static Error pollForToken(const char* deviceCode, char* outToken, size_t tokenMaxLen); + + // --- Progress --- + static Error getProgress(uint32_t bookId, BookFusionPosition& out); + static Error setProgress(uint32_t bookId, const BookFusionPosition& pos); + + // --- Library Browse & Download --- + static Error searchBooks(int page, BookFusionSearchResult& out, const char* list = nullptr, + const char* sort = nullptr); + static Error getDownloadUrl(uint32_t bookId, char* outUrl, size_t maxLen); + + static const char* errorString(Error error); + + static constexpr char API_ACCEPT[] = "application/json; api_version=10"; + + private: + static constexpr char BASE_URL[] = "https://www.bookfusion.com"; + static constexpr char CLIENT_ID[] = "koreader"; + static constexpr char DEVICE_CODE_GRANT_TYPE[] = "urn:ietf:params:oauth:grant-type:device_code"; +}; diff --git a/lib/BookFusionSync/BookFusionTokenStore.cpp b/lib/BookFusionSync/BookFusionTokenStore.cpp new file mode 100644 index 0000000000..4856d208f9 --- /dev/null +++ b/lib/BookFusionSync/BookFusionTokenStore.cpp @@ -0,0 +1,45 @@ +#include "BookFusionTokenStore.h" + +#include +#include +#include + +#include "../../src/JsonSettingsIO.h" + +// Initialise static singleton instance +BookFusionTokenStore BookFusionTokenStore::instance; + +namespace { +constexpr char BF_FILE_JSON[] = "/.crosspoint/bookfusion.json"; +} // namespace + +bool BookFusionTokenStore::saveToFile() const { + Storage.mkdir("/.crosspoint"); + return JsonSettingsIO::saveBookFusion(*this, BF_FILE_JSON); +} + +bool BookFusionTokenStore::loadFromFile() { + if (!Storage.exists(BF_FILE_JSON)) { + LOG_DBG("BFS", "No BookFusion token file found"); + return false; + } + + String json = Storage.readFile(BF_FILE_JSON); + if (json.isEmpty()) { + LOG_DBG("BFS", "BookFusion token file is empty"); + return false; + } + + return JsonSettingsIO::loadBookFusion(*this, json.c_str()); +} + +void BookFusionTokenStore::setToken(const std::string& token) { + accessToken = token; + LOG_DBG("BFS", "BookFusion token set (%zu chars)", token.size()); +} + +void BookFusionTokenStore::clearToken() { + accessToken.clear(); + saveToFile(); + LOG_DBG("BFS", "BookFusion token cleared"); +} diff --git a/lib/BookFusionSync/BookFusionTokenStore.h b/lib/BookFusionSync/BookFusionTokenStore.h new file mode 100644 index 0000000000..e746d846f0 --- /dev/null +++ b/lib/BookFusionSync/BookFusionTokenStore.h @@ -0,0 +1,42 @@ +#pragma once +#include + +class BookFusionTokenStore; +namespace JsonSettingsIO { +bool saveBookFusion(const BookFusionTokenStore& store, const char* path); +bool loadBookFusion(BookFusionTokenStore& store, const char* json); +} // namespace JsonSettingsIO + +/** + * Singleton for storing the BookFusion OAuth Bearer token on the SD card. + * Token is XOR-obfuscated with the device's hardware MAC address and base64-encoded + * before writing to JSON (not cryptographically secure, but device-tied). + * + * File: /.crosspoint/bookfusion.json + */ +class BookFusionTokenStore { + public: + static BookFusionTokenStore& getInstance() { return instance; } + + BookFusionTokenStore(const BookFusionTokenStore&) = delete; + BookFusionTokenStore& operator=(const BookFusionTokenStore&) = delete; + + bool saveToFile() const; + bool loadFromFile(); + + void setToken(const std::string& token); + const std::string& getToken() const { return accessToken; } + bool hasToken() const { return !accessToken.empty(); } + void clearToken(); + + friend bool JsonSettingsIO::saveBookFusion(const BookFusionTokenStore&, const char*); + friend bool JsonSettingsIO::loadBookFusion(BookFusionTokenStore&, const char*); + + private: + static BookFusionTokenStore instance; + BookFusionTokenStore() = default; + + std::string accessToken; +}; + +#define BF_TOKEN_STORE BookFusionTokenStore::getInstance() diff --git a/lib/I18n/translations/english.yaml b/lib/I18n/translations/english.yaml index 55ca80df96..deec7a479c 100644 --- a/lib/I18n/translations/english.yaml +++ b/lib/I18n/translations/english.yaml @@ -357,3 +357,31 @@ STR_KB_HINT_SECONDARY_CHAR: "Hold SELECT for secondary char" STR_KB_HINT_UPPER_SECONDARY: "Hold SELECT for UPPERCASE or secondary char" STR_KB_HINT_LOWER_SECONDARY: "Hold SELECT for lowercase or secondary char" STR_KB_HINT_URL_SNIPPETS: "Press URL for snippets" +STR_BF_SYNC: "BookFusion Sync" +STR_BF_LINK_ACCOUNT: "Link Account" +STR_BF_UNLINK: "Unlink Account" +STR_BF_LINKED: "Linked" +STR_BF_NOT_LINKED: "Not linked" +STR_BF_VISIT_URL: "Visit this URL:" +STR_BF_OR_SCAN_QR: "or scan the QR code below" +STR_BF_ENTER_CODE: "Then enter this code:" +STR_BF_LINK_SUCCESS: "Account linked successfully!" +STR_BF_CODE_EXPIRED: "Code expired. Try again." +STR_BF_AUTH_DENIED: "Authorization was denied." +STR_BF_AUTH_FAILED: "Linking failed. Check WiFi." +STR_BF_WAITING: "Waiting for authorization..." +STR_BF_TIME_REMAINING: "Expires in: %ds" +STR_BF_NOT_A_BF_BOOK: "This book was not downloaded from BookFusion" +STR_BF_NO_TOKEN_MSG: "Account not linked" +STR_BF_SETUP_HINT: "Link your BookFusion account in Settings" +STR_BF_AUTH: "BookFusion Auth" +STR_BF_BROWSE_LIBRARY: "Browse Library" +STR_BF_CURRENTLY_READING: "Currently Reading" +STR_BF_FAVORITES: "Favorites" +STR_BF_PLAN_TO_READ: "Plan to Read" +STR_BF_COMPLETED: "Completed" +STR_BF_ALL_BOOKS: "All Books" +STR_BF_NO_BOOKS: "No books found in library" +STR_BF_NEXT_PAGE: "Load next page..." +STR_BF_DOWNLOAD_COMPLETE: "Download complete!" +STR_BF_BOOK_UNAVAILABLE: "Book not available for download" diff --git a/src/JsonSettingsIO.cpp b/src/JsonSettingsIO.cpp index 20acda7ee9..1c58057b9b 100644 --- a/src/JsonSettingsIO.cpp +++ b/src/JsonSettingsIO.cpp @@ -11,6 +11,7 @@ #include #include +#include "BookFusionTokenStore.h" #include "CrossPointSettings.h" #include "CrossPointState.h" #include "KOReaderCredentialStore.h" @@ -287,6 +288,36 @@ bool JsonSettingsIO::loadKOReader(KOReaderCredentialStore& store, const char* js return true; } +// ---- BookFusionTokenStore ---- + +bool JsonSettingsIO::saveBookFusion(const BookFusionTokenStore& store, const char* path) { + JsonDocument doc; + doc["token_obf"] = obfuscation::obfuscateToBase64(store.accessToken); + + String json; + serializeJson(doc, json); + return Storage.writeFile(path, json); +} + +bool JsonSettingsIO::loadBookFusion(BookFusionTokenStore& store, const char* json) { + JsonDocument doc; + auto error = deserializeJson(doc, json); + if (error) { + LOG_ERR("BFS", "JSON parse error loading BookFusion token: %s", error.c_str()); + return false; + } + + bool ok = false; + store.accessToken = obfuscation::deobfuscateFromBase64(doc["token_obf"] | "", &ok); + if (!ok) { + store.accessToken.clear(); + return false; + } + + LOG_DBG("BFS", "Loaded BookFusion token (%zu chars)", store.accessToken.size()); + return true; +} + // ---- WifiCredentialStore ---- bool JsonSettingsIO::saveWifi(const WifiCredentialStore& store, const char* path) { diff --git a/src/JsonSettingsIO.h b/src/JsonSettingsIO.h index 40d6c4d2d9..e0f495f804 100644 --- a/src/JsonSettingsIO.h +++ b/src/JsonSettingsIO.h @@ -4,6 +4,7 @@ class CrossPointSettings; class CrossPointState; class WifiCredentialStore; class KOReaderCredentialStore; +class BookFusionTokenStore; class RecentBooksStore; class OpdsServerStore; @@ -25,6 +26,10 @@ bool loadWifi(WifiCredentialStore& store, const char* json, bool* needsResave = bool saveKOReader(const KOReaderCredentialStore& store, const char* path); bool loadKOReader(KOReaderCredentialStore& store, const char* json, bool* needsResave = nullptr); +// BookFusionTokenStore +bool saveBookFusion(const BookFusionTokenStore& store, const char* path); +bool loadBookFusion(BookFusionTokenStore& store, const char* json); + // RecentBooksStore bool saveRecentBooks(const RecentBooksStore& store, const char* path); bool loadRecentBooks(RecentBooksStore& store, const char* json); diff --git a/src/activities/reader/BookFusionSyncActivity.cpp b/src/activities/reader/BookFusionSyncActivity.cpp new file mode 100644 index 0000000000..9cfa4be3bc --- /dev/null +++ b/src/activities/reader/BookFusionSyncActivity.cpp @@ -0,0 +1,333 @@ +#include "BookFusionSyncActivity.h" + +#include +#include +#include +#include + +#include + +#include "BookFusionBookIdStore.h" +#include "BookFusionSyncClient.h" +#include "BookFusionTokenStore.h" +#include "MappedInputManager.h" +#include "activities/network/WifiSelectionActivity.h" +#include "components/UITheme.h" +#include "fontIds.h" + +namespace { +void wifiOff() { + WiFi.disconnect(false); + delay(100); + WiFi.mode(WIFI_OFF); + delay(100); +} + +// Convert a BookFusion position (0-100 percentage) to CrossPoint using the KOReader +// percentage mapper. This avoids duplicating the spine-lookup logic. +CrossPointPosition bfToCrossPoint(const std::shared_ptr& epub, const BookFusionPosition& bf, + int currentSpineIndex, int totalPagesInCurrentSpine) { + KOReaderPosition koPos; + koPos.percentage = bf.percentage / 100.0f; + koPos.xpath = ""; + return ProgressMapper::toCrossPoint(epub, koPos, currentSpineIndex, totalPagesInCurrentSpine); +} + +// Convert CrossPoint position to BookFusion format. +BookFusionPosition crossPointToBf(const std::shared_ptr& epub, const CrossPointPosition& pos) { + const KOReaderPosition koPos = ProgressMapper::toKOReader(epub, pos); + const int spineCount = epub->getSpineItemsCount(); + + BookFusionPosition bf; + bf.percentage = koPos.percentage * 100.0f; + bf.chapterIndex = pos.spineIndex; + const float intraSpine = (pos.totalPages > 0) ? static_cast(pos.pageNumber) / pos.totalPages : 0.0f; + bf.pagePositionInBook = (spineCount > 0) ? (pos.spineIndex + intraSpine) / static_cast(spineCount) : 0.0f; + return bf; +} +} // namespace + +void BookFusionSyncActivity::onWifiSelectionComplete(const bool success) { + if (!success) { + LOG_DBG("BFSync", "WiFi connection failed"); + ActivityResult result; + result.isCancelled = true; + setResult(std::move(result)); + finish(); + return; + } + + LOG_DBG("BFSync", "WiFi connected, starting sync"); + + { + RenderLock lock(*this); + state = SYNCING; + statusMessage = tr(STR_FETCH_PROGRESS); + } + requestUpdateAndWait(); + + performSync(); +} + +void BookFusionSyncActivity::performSync() { + const auto result = BookFusionSyncClient::getProgress(bookId, remotePosition); + + if (result == BookFusionSyncClient::NOT_FOUND) { + { + RenderLock lock(*this); + state = NO_REMOTE_PROGRESS; + hasRemoteProgress = false; + } + requestUpdate(true); + return; + } + + if (result != BookFusionSyncClient::OK) { + { + RenderLock lock(*this); + state = SYNC_FAILED; + statusMessage = BookFusionSyncClient::errorString(result); + } + requestUpdate(true); + return; + } + + // Convert remote BF position → CrossPoint + hasRemoteProgress = true; + remoteCrossPoint = bfToCrossPoint(epub, remotePosition, currentSpineIndex, totalPagesInSpine); + + // Compute local position in BF format for display + CrossPointPosition localPos = {currentSpineIndex, currentPage, totalPagesInSpine}; + localPosition = crossPointToBf(epub, localPos); + + { + RenderLock lock(*this); + state = SHOWING_RESULT; + // Default to whichever side is further ahead + selectedOption = (localPosition.percentage > remotePosition.percentage) ? 1 : 0; + } + requestUpdate(true); +} + +void BookFusionSyncActivity::performUpload() { + { + RenderLock lock(*this); + state = UPLOADING; + statusMessage = tr(STR_UPLOAD_PROGRESS); + } + requestUpdateAndWait(); + + CrossPointPosition localPos = {currentSpineIndex, currentPage, totalPagesInSpine}; + const BookFusionPosition bf = crossPointToBf(epub, localPos); + + const auto result = BookFusionSyncClient::setProgress(bookId, bf); + + if (result != BookFusionSyncClient::OK) { + wifiOff(); + { + RenderLock lock(*this); + state = SYNC_FAILED; + statusMessage = BookFusionSyncClient::errorString(result); + } + requestUpdate(); + return; + } + + wifiOff(); + { + RenderLock lock(*this); + state = UPLOAD_COMPLETE; + } + requestUpdate(true); +} + +void BookFusionSyncActivity::onEnter() { + Activity::onEnter(); + + if (!BF_TOKEN_STORE.hasToken()) { + state = NO_TOKEN; + requestUpdate(); + return; + } + + bookId = BookFusionBookIdStore::loadBookId(epubPath.c_str()); + if (bookId == 0) { + state = NOT_A_BF_BOOK; + requestUpdate(); + return; + } + + if (WiFi.status() == WL_CONNECTED) { + onWifiSelectionComplete(true); + return; + } + + startActivityForResult(std::make_unique(renderer, mappedInput), + [this](const ActivityResult& result) { onWifiSelectionComplete(!result.isCancelled); }); +} + +void BookFusionSyncActivity::onExit() { + Activity::onExit(); + wifiOff(); +} + +void BookFusionSyncActivity::render(RenderLock&&) { + const auto pageWidth = renderer.getScreenWidth(); + const auto pageHeight = renderer.getScreenHeight(); + + renderer.clearScreen(); + renderer.drawCenteredText(UI_12_FONT_ID, 15, tr(STR_BF_SYNC), true, EpdFontFamily::BOLD); + + if (state == NO_TOKEN) { + renderer.drawCenteredText(UI_10_FONT_ID, (pageHeight / 2) - 20, tr(STR_BF_NO_TOKEN_MSG), true, EpdFontFamily::BOLD); + renderer.drawCenteredText(UI_10_FONT_ID, (pageHeight / 2) + 10, tr(STR_BF_SETUP_HINT)); + const auto labels = mappedInput.mapLabels(tr(STR_BACK), "", "", ""); + GUI.drawButtonHints(renderer, labels.btn1, labels.btn2, labels.btn3, labels.btn4); + renderer.displayBuffer(); + return; + } + + if (state == NOT_A_BF_BOOK) { + renderer.drawCenteredText(UI_10_FONT_ID, (pageHeight / 2) - 10, tr(STR_BF_NOT_A_BF_BOOK), true, + EpdFontFamily::BOLD); + const auto labels = mappedInput.mapLabels(tr(STR_BACK), "", "", ""); + GUI.drawButtonHints(renderer, labels.btn1, labels.btn2, labels.btn3, labels.btn4); + renderer.displayBuffer(); + return; + } + + if (state == SYNCING || state == UPLOADING) { + renderer.drawCenteredText(UI_10_FONT_ID, (pageHeight - renderer.getLineHeight(UI_10_FONT_ID)) / 2, + statusMessage.c_str(), true, EpdFontFamily::BOLD); + renderer.displayBuffer(); + return; + } + + if (state == SHOWING_RESULT) { + renderer.drawCenteredText(UI_10_FONT_ID, 120, tr(STR_PROGRESS_FOUND), true, EpdFontFamily::BOLD); + + const int remoteTocIndex = epub->getTocIndexForSpineIndex(remoteCrossPoint.spineIndex); + const int localTocIndex = epub->getTocIndexForSpineIndex(currentSpineIndex); + const std::string remoteChapter = + (remoteTocIndex >= 0) ? epub->getTocItem(remoteTocIndex).title + : (std::string(tr(STR_SECTION_PREFIX)) + std::to_string(remoteCrossPoint.spineIndex + 1)); + const std::string localChapter = + (localTocIndex >= 0) ? epub->getTocItem(localTocIndex).title + : (std::string(tr(STR_SECTION_PREFIX)) + std::to_string(currentSpineIndex + 1)); + + renderer.drawText(UI_10_FONT_ID, 20, 160, tr(STR_REMOTE_LABEL), true); + char remoteChapterStr[128]; + snprintf(remoteChapterStr, sizeof(remoteChapterStr), " %s", remoteChapter.c_str()); + renderer.drawText(UI_10_FONT_ID, 20, 185, remoteChapterStr); + char remotePageStr[64]; + snprintf(remotePageStr, sizeof(remotePageStr), tr(STR_PAGE_OVERALL_FORMAT), remoteCrossPoint.pageNumber + 1, + remotePosition.percentage); + renderer.drawText(UI_10_FONT_ID, 20, 210, remotePageStr); + + renderer.drawText(UI_10_FONT_ID, 20, 270, tr(STR_LOCAL_LABEL), true); + char localChapterStr[128]; + snprintf(localChapterStr, sizeof(localChapterStr), " %s", localChapter.c_str()); + renderer.drawText(UI_10_FONT_ID, 20, 295, localChapterStr); + char localPageStr[64]; + snprintf(localPageStr, sizeof(localPageStr), tr(STR_PAGE_TOTAL_OVERALL_FORMAT), currentPage + 1, totalPagesInSpine, + localPosition.percentage); + renderer.drawText(UI_10_FONT_ID, 20, 320, localPageStr); + + const int optionY = 350; + const int optionHeight = 30; + + if (selectedOption == 0) { + renderer.fillRect(0, optionY - 2, pageWidth - 1, optionHeight); + } + renderer.drawText(UI_10_FONT_ID, 20, optionY, tr(STR_APPLY_REMOTE), selectedOption != 0); + + if (selectedOption == 1) { + renderer.fillRect(0, optionY + optionHeight - 2, pageWidth - 1, optionHeight); + } + renderer.drawText(UI_10_FONT_ID, 20, optionY + optionHeight, tr(STR_UPLOAD_LOCAL), selectedOption != 1); + + const auto labels = mappedInput.mapLabels(tr(STR_BACK), tr(STR_SELECT), tr(STR_DIR_UP), tr(STR_DIR_DOWN)); + GUI.drawButtonHints(renderer, labels.btn1, labels.btn2, labels.btn3, labels.btn4); + renderer.displayBuffer(); + return; + } + + if (state == NO_REMOTE_PROGRESS) { + renderer.drawCenteredText(UI_10_FONT_ID, (pageHeight / 2) - 20, tr(STR_NO_REMOTE_MSG), true, EpdFontFamily::BOLD); + renderer.drawCenteredText(UI_10_FONT_ID, (pageHeight / 2) + 10, tr(STR_UPLOAD_PROMPT)); + const auto labels = mappedInput.mapLabels(tr(STR_BACK), tr(STR_UPLOAD), "", ""); + GUI.drawButtonHints(renderer, labels.btn1, labels.btn2, labels.btn3, labels.btn4); + renderer.displayBuffer(); + return; + } + + if (state == UPLOAD_COMPLETE) { + renderer.drawCenteredText(UI_10_FONT_ID, (pageHeight - renderer.getLineHeight(UI_10_FONT_ID)) / 2, + tr(STR_UPLOAD_SUCCESS), true, EpdFontFamily::BOLD); + const auto labels = mappedInput.mapLabels(tr(STR_BACK), "", "", ""); + GUI.drawButtonHints(renderer, labels.btn1, labels.btn2, labels.btn3, labels.btn4); + renderer.displayBuffer(); + return; + } + + if (state == SYNC_FAILED) { + renderer.drawCenteredText(UI_10_FONT_ID, (pageHeight / 2) - 20, tr(STR_SYNC_FAILED_MSG), true, EpdFontFamily::BOLD); + renderer.drawCenteredText(UI_10_FONT_ID, (pageHeight / 2) + 10, statusMessage.c_str()); + const auto labels = mappedInput.mapLabels(tr(STR_BACK), "", "", ""); + GUI.drawButtonHints(renderer, labels.btn1, labels.btn2, labels.btn3, labels.btn4); + renderer.displayBuffer(); + return; + } +} + +void BookFusionSyncActivity::loop() { + if (state == NO_TOKEN || state == NOT_A_BF_BOOK || state == SYNC_FAILED || state == UPLOAD_COMPLETE) { + if (mappedInput.wasReleased(MappedInputManager::Button::Back)) { + ActivityResult result; + result.isCancelled = true; + setResult(std::move(result)); + finish(); + } + return; + } + + if (state == SHOWING_RESULT) { + if (mappedInput.wasReleased(MappedInputManager::Button::Up) || + mappedInput.wasReleased(MappedInputManager::Button::Left) || + mappedInput.wasReleased(MappedInputManager::Button::Down) || + mappedInput.wasReleased(MappedInputManager::Button::Right)) { + selectedOption = (selectedOption + 1) % 2; + requestUpdate(); + } + + if (mappedInput.wasReleased(MappedInputManager::Button::Confirm)) { + if (selectedOption == 0) { + setResult(SyncResult{remoteCrossPoint.spineIndex, remoteCrossPoint.pageNumber}); + finish(); + } else { + performUpload(); + } + } + + if (mappedInput.wasReleased(MappedInputManager::Button::Back)) { + ActivityResult result; + result.isCancelled = true; + setResult(std::move(result)); + finish(); + } + return; + } + + if (state == NO_REMOTE_PROGRESS) { + if (mappedInput.wasReleased(MappedInputManager::Button::Confirm)) { + performUpload(); + } + if (mappedInput.wasReleased(MappedInputManager::Button::Back)) { + ActivityResult result; + result.isCancelled = true; + setResult(std::move(result)); + finish(); + } + return; + } +} diff --git a/src/activities/reader/BookFusionSyncActivity.h b/src/activities/reader/BookFusionSyncActivity.h new file mode 100644 index 0000000000..27d153d662 --- /dev/null +++ b/src/activities/reader/BookFusionSyncActivity.h @@ -0,0 +1,79 @@ +#pragma once +#include + +#include +#include + +#include "BookFusionSyncClient.h" +#include "ProgressMapper.h" +#include "activities/Activity.h" + +/** + * Syncs reading progress with BookFusion. + * + * Only works for books that have a BookFusion book_id sidecar + * (i.e., books downloaded from BookFusion). Shows NOT_A_BF_BOOK otherwise. + * + * Flow: + * 1. Verify token + book_id exist (early-out if not) + * 2. Connect WiFi + * 3. Fetch remote position + * 4. Show comparison + options (Apply / Upload) + * 5. Apply or upload + */ +class BookFusionSyncActivity final : public Activity { + public: + explicit BookFusionSyncActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, + const std::shared_ptr& epub, const std::string& epubPath, int currentSpineIndex, + int currentPage, int totalPagesInSpine) + : Activity("BookFusionSync", renderer, mappedInput), + epub(epub), + epubPath(epubPath), + currentSpineIndex(currentSpineIndex), + currentPage(currentPage), + totalPagesInSpine(totalPagesInSpine) {} + + void onEnter() override; + void onExit() override; + void loop() override; + void render(RenderLock&&) override; + bool preventAutoSleep() override { return state == CONNECTING || state == SYNCING || state == UPLOADING; } + + private: + enum State { + WIFI_SELECTION, + CONNECTING, + SYNCING, + SHOWING_RESULT, + UPLOADING, + UPLOAD_COMPLETE, + NO_REMOTE_PROGRESS, + SYNC_FAILED, + NO_TOKEN, + NOT_A_BF_BOOK, + }; + + std::shared_ptr epub; + std::string epubPath; + int currentSpineIndex; + int currentPage; + int totalPagesInSpine; + + State state = WIFI_SELECTION; + std::string statusMessage; + uint32_t bookId = 0; + + // Remote progress + BookFusionPosition remotePosition; + CrossPointPosition remoteCrossPoint{}; + + // Local progress in BF format (for display) + BookFusionPosition localPosition; + + bool hasRemoteProgress = false; + int selectedOption = 0; // 0 = Apply remote, 1 = Upload local + + void onWifiSelectionComplete(bool success); + void performSync(); + void performUpload(); +}; diff --git a/src/activities/reader/EpubReaderActivity.cpp b/src/activities/reader/EpubReaderActivity.cpp index 34e1a23433..a34cd27843 100644 --- a/src/activities/reader/EpubReaderActivity.cpp +++ b/src/activities/reader/EpubReaderActivity.cpp @@ -15,6 +15,9 @@ #include #include "BookStatsActivity.h" +#include "BookFusionBookIdStore.h" +#include "BookFusionSyncActivity.h" +#include "BookFusionTokenStore.h" #include "CrossPointSettings.h" #include "CrossPointState.h" #include "EpubReaderBookmarkListActivity.h" @@ -638,34 +641,30 @@ void EpubReaderActivity::onReaderMenuConfirm(EpubReaderMenuActivity::MenuAction break; } case EpubReaderMenuActivity::MenuAction::SYNC: { - if (KOREADER_STORE.hasCredentials()) { - const int currentPage = section ? section->currentPage : nextPageNumber; - const int totalPages = section ? section->pageCount : cachedChapterTotalPageCount; - std::optional paragraphIndex; - if (section && currentPage >= 0 && currentPage < section->pageCount) { - const uint16_t paragraphPage = - currentPage > 0 ? static_cast(currentPage - 1) : static_cast(currentPage); - if (const auto pIdx = section->getParagraphIndexForPage(paragraphPage)) { - paragraphIndex = *pIdx; + const int currentPage = section ? section->currentPage : 0; + const int totalPages = section ? section->pageCount : 0; + + auto applySyncResult = [this](const ActivityResult& result) { + if (!result.isCancelled) { + const auto& sync = std::get(result.data); + if (currentSpineIndex != sync.spineIndex || (section && section->currentPage != sync.page)) { + RenderLock lock(*this); + currentSpineIndex = sync.spineIndex; + nextPageNumber = sync.page; + section.reset(); } } - startActivityForResult( - std::make_unique(renderer, mappedInput, epub, epub->getPath(), currentSpineIndex, - currentPage, totalPages, paragraphIndex), - [this](const ActivityResult& result) { - if (!result.isCancelled) { - const auto& sync = std::get(result.data); - if (currentSpineIndex != sync.spineIndex || (section && section->currentPage != sync.page)) { - RenderLock lock(*this); - currentSpineIndex = sync.spineIndex; - nextPageNumber = sync.page; - cachedChapterTotalPageCount = 0; // Prevent rescaling sync page - pendingPageJump.reset(); - saveProgress(currentSpineIndex, nextPageNumber, 0); - section.reset(); - } - } - }); + }; + + // BookFusion takes priority when the book has a BookFusion sidecar. + if (BF_TOKEN_STORE.hasToken() && BookFusionBookIdStore::loadBookId(epub->getPath().c_str()) != 0) { + startActivityForResult(std::make_unique(renderer, mappedInput, epub, epub->getPath(), + currentSpineIndex, currentPage, totalPages), + applySyncResult); + } else if (KOREADER_STORE.hasCredentials()) { + startActivityForResult(std::make_unique(renderer, mappedInput, epub, epub->getPath(), + currentSpineIndex, currentPage, totalPages), + applySyncResult); } break; } diff --git a/src/activities/settings/BookFusionAuthActivity.cpp b/src/activities/settings/BookFusionAuthActivity.cpp new file mode 100644 index 0000000000..18d2a5b3be --- /dev/null +++ b/src/activities/settings/BookFusionAuthActivity.cpp @@ -0,0 +1,278 @@ +#include "BookFusionAuthActivity.h" + +#include +#include +#include +#include +#include + +#include + +#include "BookFusionSyncClient.h" +#include "BookFusionTokenStore.h" +#include "MappedInputManager.h" +#include "activities/network/WifiSelectionActivity.h" +#include "components/UITheme.h" +#include "fontIds.h" +#include "util/QrUtils.h" + +namespace { +constexpr int MAX_NETWORK_RETRIES = 3; +// Only re-render the countdown every 10 s to limit E-ink refreshes. +constexpr unsigned long TIMER_REFRESH_INTERVAL_MS = 10000; +constexpr int QR_CODE_SIZE = 198; +// User-facing activation URL. The OAuth response may return a different +// verification_uri; always display the short, memorable URL instead. +constexpr const char* DEVICE_ACTIVATION_URL = "https://bookfusion.com/device"; +} // namespace + +void BookFusionAuthActivity::onWifiSelectionComplete(const bool success) { + if (!success) { + { + RenderLock lock(*this); + state = FAILED; + } + requestUpdate(true); + return; + } + + { + RenderLock lock(*this); + state = REQUESTING_CODE; + } + requestUpdate(true); + + requestCode(); +} + +void BookFusionAuthActivity::requestCode() { + BookFusionDeviceCodeResponse resp; + const auto result = BookFusionSyncClient::requestDeviceCode(resp); + + if (result != BookFusionSyncClient::OK) { + LOG_ERR("BFAuth", "requestDeviceCode failed: %s", BookFusionSyncClient::errorString(result)); + RenderLock lock(*this); + state = FAILED; + requestUpdate(true); + return; + } + + strlcpy(deviceCode, resp.deviceCode, sizeof(deviceCode)); + strlcpy(userCode, resp.userCode, sizeof(userCode)); + strlcpy(verificationUri, resp.verificationUri, sizeof(verificationUri)); + pollIntervalSec = resp.interval; + + const unsigned long now = millis(); + pollExpireAt = now + static_cast(resp.expiresIn) * 1000UL; + nextPollAt = now + static_cast(pollIntervalSec) * 1000UL; + lastTimerRefresh = now; + networkRetries = 0; + + { + RenderLock lock(*this); + state = WAITING_FOR_USER; + } + requestUpdate(true); +} + +void BookFusionAuthActivity::doPoll() { + { + RenderLock lock(*this); + state = POLLING; + } + + char tokenBuf[512] = {}; + const auto result = BookFusionSyncClient::pollForToken(deviceCode, tokenBuf, sizeof(tokenBuf)); + + switch (result) { + case BookFusionSyncClient::OK: + BF_TOKEN_STORE.setToken(tokenBuf); + BF_TOKEN_STORE.saveToFile(); + { + RenderLock lock(*this); + state = SUCCESS; + } + requestUpdate(true); + return; + + case BookFusionSyncClient::PENDING: + nextPollAt = millis() + static_cast(pollIntervalSec) * 1000UL; + { + RenderLock lock(*this); + state = WAITING_FOR_USER; + } + return; + + case BookFusionSyncClient::SLOW_DOWN: + pollIntervalSec += 5; + nextPollAt = millis() + static_cast(pollIntervalSec) * 1000UL; + { + RenderLock lock(*this); + state = WAITING_FOR_USER; + } + return; + + case BookFusionSyncClient::EXPIRED: { + RenderLock lock(*this); + state = EXPIRED; + } + requestUpdate(true); + return; + + case BookFusionSyncClient::DENIED: { + RenderLock lock(*this); + state = DENIED; + } + requestUpdate(true); + return; + + case BookFusionSyncClient::NETWORK_ERROR: + networkRetries++; + if (networkRetries > MAX_NETWORK_RETRIES) { + RenderLock lock(*this); + state = FAILED; + requestUpdate(true); + } else { + nextPollAt = millis() + static_cast(pollIntervalSec) * 1000UL; + RenderLock lock(*this); + state = WAITING_FOR_USER; + } + return; + + default: { + RenderLock lock(*this); + state = FAILED; + } + requestUpdate(true); + return; + } +} + +void BookFusionAuthActivity::onEnter() { + Activity::onEnter(); + + if (WiFi.status() == WL_CONNECTED) { + onWifiSelectionComplete(true); + return; + } + + startActivityForResult(std::make_unique(renderer, mappedInput), + [this](const ActivityResult& result) { onWifiSelectionComplete(!result.isCancelled); }); +} + +void BookFusionAuthActivity::onExit() { + Activity::onExit(); + // Leave WiFi on — BookFusionSettingsActivity called from settings which may need it. + // The caller (SettingsActivity) doesn't do network ops, so we let the main flow handle WiFi. +} + +void BookFusionAuthActivity::loop() { + if (state == SUCCESS || state == EXPIRED || state == DENIED || state == FAILED) { + if (mappedInput.wasPressed(MappedInputManager::Button::Back) || + mappedInput.wasPressed(MappedInputManager::Button::Confirm)) { + finish(); + } + return; + } + + if (state == WAITING_FOR_USER) { + if (mappedInput.wasPressed(MappedInputManager::Button::Back)) { + finish(); + return; + } + + const unsigned long now = millis(); + + // Check expiry + if (now - pollExpireAt < 0x80000000UL && now >= pollExpireAt) { + { + RenderLock lock(*this); + state = EXPIRED; + } + requestUpdate(true); + return; + } + + // Refresh countdown display every TIMER_REFRESH_INTERVAL_MS + if (now - lastTimerRefresh >= TIMER_REFRESH_INTERVAL_MS) { + lastTimerRefresh = now; + requestUpdate(); + } + + // Time to poll? + if (now >= nextPollAt) { + doPoll(); + } + } +} + +void BookFusionAuthActivity::render(RenderLock&&) { + renderer.clearScreen(); + + const auto& metrics = UITheme::getInstance().getMetrics(); + const auto pageWidth = renderer.getScreenWidth(); + const auto pageHeight = renderer.getScreenHeight(); + + GUI.drawHeader(renderer, Rect{0, metrics.topPadding, pageWidth, metrics.headerHeight}, tr(STR_BF_AUTH)); + + const int lineH = renderer.getLineHeight(UI_10_FONT_ID); + const int contentTop = metrics.topPadding + metrics.headerHeight + metrics.verticalSpacing; + + if (state == REQUESTING_CODE || state == CONNECTING) { + renderer.drawCenteredText(UI_10_FONT_ID, (pageHeight - lineH) / 2, tr(STR_BF_WAITING)); + renderer.displayBuffer(); + return; + } + + if (state == WAITING_FOR_USER || state == POLLING) { + int y = contentTop; + + renderer.drawCenteredText(UI_10_FONT_ID, y, tr(STR_BF_VISIT_URL), true, EpdFontFamily::BOLD); + y += lineH + 4; + + renderer.drawCenteredText(UI_12_FONT_ID, y, DEVICE_ACTIVATION_URL, true, EpdFontFamily::REGULAR); + y += renderer.getLineHeight(UI_12_FONT_ID) + 4; + + renderer.drawCenteredText(UI_10_FONT_ID, y, tr(STR_BF_OR_SCAN_QR), true, EpdFontFamily::REGULAR); + y += lineH + 8; + + const Rect qrBounds((pageWidth - QR_CODE_SIZE) / 2, y, QR_CODE_SIZE, QR_CODE_SIZE); + QrUtils::drawQrCode(renderer, qrBounds, DEVICE_ACTIVATION_URL); + y += QR_CODE_SIZE + 12; + + renderer.drawCenteredText(UI_10_FONT_ID, y, tr(STR_BF_ENTER_CODE), true, EpdFontFamily::BOLD); + y += lineH + 8; + + renderer.drawCenteredText(UI_12_FONT_ID, y, userCode, true, EpdFontFamily::BOLD); + y += renderer.getLineHeight(UI_12_FONT_ID) + 12; + + const unsigned long now = millis(); + const int secsLeft = (pollExpireAt > now) ? static_cast((pollExpireAt - now) / 1000UL) : 0; + char countdown[32]; + snprintf(countdown, sizeof(countdown), tr(STR_BF_TIME_REMAINING), secsLeft); + renderer.drawCenteredText(UI_10_FONT_ID, y, countdown); + + const auto labels = mappedInput.mapLabels(tr(STR_BACK), "", "", ""); + GUI.drawButtonHints(renderer, labels.btn1, labels.btn2, labels.btn3, labels.btn4); + renderer.displayBuffer(); + return; + } + + if (state == SUCCESS) { + renderer.drawCenteredText(UI_10_FONT_ID, (pageHeight - lineH) / 2, tr(STR_BF_LINK_SUCCESS), true, + EpdFontFamily::BOLD); + const auto labels = mappedInput.mapLabels(tr(STR_BACK), "", "", ""); + GUI.drawButtonHints(renderer, labels.btn1, labels.btn2, labels.btn3, labels.btn4); + renderer.displayBuffer(); + return; + } + + // Error states: EXPIRED, DENIED, FAILED + const char* msg = tr(STR_BF_AUTH_FAILED); + if (state == EXPIRED) msg = tr(STR_BF_CODE_EXPIRED); + if (state == DENIED) msg = tr(STR_BF_AUTH_DENIED); + renderer.drawCenteredText(UI_10_FONT_ID, (pageHeight - lineH) / 2, msg, true, EpdFontFamily::BOLD); + const auto labels = mappedInput.mapLabels(tr(STR_BACK), "", "", ""); + GUI.drawButtonHints(renderer, labels.btn1, labels.btn2, labels.btn3, labels.btn4); + renderer.displayBuffer(); +} diff --git a/src/activities/settings/BookFusionAuthActivity.h b/src/activities/settings/BookFusionAuthActivity.h new file mode 100644 index 0000000000..a0e05568ea --- /dev/null +++ b/src/activities/settings/BookFusionAuthActivity.h @@ -0,0 +1,54 @@ +#pragma once + +#include "activities/Activity.h" + +/** + * BookFusion account linking via OAuth 2.0 Device Code Flow. + * + * Displays a short code and URL on the E-ink screen. + * The user visits the URL on their phone and enters the code. + * The activity polls the BookFusion server in loop() via millis() until + * authorised, expired, or cancelled — no FreeRTOS task needed. + */ +class BookFusionAuthActivity final : public Activity { + public: + explicit BookFusionAuthActivity(GfxRenderer& renderer, MappedInputManager& mappedInput) + : Activity("BookFusionAuth", renderer, mappedInput) {} + + void onEnter() override; + void onExit() override; + void loop() override; + void render(RenderLock&&) override; + bool preventAutoSleep() override { + return state == CONNECTING || state == REQUESTING_CODE || state == WAITING_FOR_USER || state == POLLING; + } + + private: + enum State { + WIFI_SELECTION, + CONNECTING, + REQUESTING_CODE, + WAITING_FOR_USER, + POLLING, + SUCCESS, + EXPIRED, + DENIED, + FAILED + }; + + State state = WIFI_SELECTION; + + // Device code response data (fixed-size buffers — no heap allocation) + char deviceCode[256] = {}; + char userCode[16] = {}; + char verificationUri[128] = {}; + int pollIntervalSec = 5; + unsigned long pollExpireAt = 0; // millis() deadline + unsigned long nextPollAt = 0; // millis() of next poll attempt + unsigned long lastTimerRefresh = 0; + int networkRetries = 0; + + void onWifiSelectionComplete(bool success); + void requestCode(); + void doPoll(); +}; diff --git a/src/activities/settings/BookFusionBrowserActivity.cpp b/src/activities/settings/BookFusionBrowserActivity.cpp new file mode 100644 index 0000000000..ac068b1349 --- /dev/null +++ b/src/activities/settings/BookFusionBrowserActivity.cpp @@ -0,0 +1,397 @@ +#include "BookFusionBrowserActivity.h" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "BookFusionBookIdStore.h" +#include "BookFusionTokenStore.h" +#include "MappedInputManager.h" +#include "activities/network/WifiSelectionActivity.h" +#include "components/UITheme.h" +#include "fontIds.h" +#include "network/HttpDownloader.h" +#include "util/StringUtils.h" + +namespace { +constexpr int PAGE_ITEMS = 21; // 20 books + optional "Next page" sentinel + +struct Category { + StrId nameId; + const char* list; + const char* sort; +}; + +constexpr Category CATEGORIES[] = { + {StrId::STR_BF_CURRENTLY_READING, "currently_reading", "last_read_at-desc"}, + {StrId::STR_BF_FAVORITES, "favorites", nullptr}, + {StrId::STR_BF_PLAN_TO_READ, "planned_to_read", nullptr}, + {StrId::STR_BF_COMPLETED, "completed", nullptr}, + {StrId::STR_BF_ALL_BOOKS, nullptr, nullptr}, +}; +constexpr int NUM_CATEGORIES = sizeof(CATEGORIES) / sizeof(CATEGORIES[0]); +} // namespace + +void BookFusionBrowserActivity::onEnter() { + Activity::onEnter(); + + if (!BF_TOKEN_STORE.hasToken()) { + state = ERROR; + strlcpy(errorMsg, tr(STR_BF_NO_TOKEN_MSG), sizeof(errorMsg)); + requestUpdate(); + return; + } + + state = CATEGORY_SELECTION; + requestUpdate(); +} + +void BookFusionBrowserActivity::handleCategorySelection() { + currentCategory = selectedCategory; + currentPage = 1; + + if (WiFi.status() == WL_CONNECTED) { + loadPage(1); + return; + } + + state = WIFI_SELECTION; + startActivityForResult(std::make_unique(renderer, mappedInput), + [this](const ActivityResult& result) { onWifiSelectionComplete(!result.isCancelled); }); +} + +void BookFusionBrowserActivity::onExit() { + Activity::onExit(); + WiFi.mode(WIFI_OFF); +} + +void BookFusionBrowserActivity::onWifiSelectionComplete(bool success) { + if (!success) { + state = ERROR; + strlcpy(errorMsg, tr(STR_WIFI_CONN_FAILED), sizeof(errorMsg)); + requestUpdate(); + return; + } + currentPage = 1; + loadPage(1); +} + +void BookFusionBrowserActivity::loadPage(int page) { + { + RenderLock lock(*this); + state = LOADING; + selectedIndex = 0; + } + requestUpdate(true); + + const auto& cat = CATEGORIES[currentCategory]; + const auto err = BookFusionSyncClient::searchBooks(page, searchResult, cat.list, cat.sort); + + if (err != BookFusionSyncClient::OK) { + { + RenderLock lock(*this); + state = ERROR; + strlcpy(errorMsg, BookFusionSyncClient::errorString(err), sizeof(errorMsg)); + } + requestUpdate(); + return; + } + + if (searchResult.count == 0) { + { + RenderLock lock(*this); + state = ERROR; + strlcpy(errorMsg, tr(STR_BF_NO_BOOKS), sizeof(errorMsg)); + } + requestUpdate(); + return; + } + + { + RenderLock lock(*this); + state = BROWSING; + currentPage = page; + } + requestUpdate(); +} + +void BookFusionBrowserActivity::startDownload(int bookIndex) { + const auto& book = searchResult.books[bookIndex]; + + { + RenderLock lock(*this); + state = DOWNLOADING; + downloadProgress = 0; + downloadTotal = 0; + strlcpy(downloadTitle, book.title, sizeof(downloadTitle)); + } + requestUpdateAndWait(); + + // Fetch the pre-signed download URL from BookFusion. + const auto urlErr = BookFusionSyncClient::getDownloadUrl(book.id, downloadUrl, sizeof(downloadUrl)); + if (urlErr != BookFusionSyncClient::OK) { + { + RenderLock lock(*this); + state = ERROR; + if (urlErr == BookFusionSyncClient::NOT_FOUND) { + strlcpy(errorMsg, tr(STR_BF_BOOK_UNAVAILABLE), sizeof(errorMsg)); + } else { + strlcpy(errorMsg, BookFusionSyncClient::errorString(urlErr), sizeof(errorMsg)); + } + } + requestUpdate(); + return; + } + + // Build destination path: "/Title - Author.ext" (sanitized). + std::string baseName = book.title; + if (book.authors[0] != '\0') { + baseName += " - "; + baseName += book.authors; + } + + char ext[8] = "epub"; + if (book.format[0] != '\0') { + size_t i = 0; + for (; i < sizeof(ext) - 1 && book.format[i] != '\0'; i++) { + ext[i] = static_cast(tolower(static_cast(book.format[i]))); + } + ext[i] = '\0'; + } + + const std::string filename = "/" + StringUtils::sanitizeFilename(baseName) + "." + ext; + LOG_DBG("BFB", "Downloading book_id=%lu -> %s", static_cast(book.id), filename.c_str()); + + const auto dlResult = + HttpDownloader::downloadToFile(downloadUrl, filename, [this](const size_t downloaded, const size_t total) { + downloadProgress = downloaded; + downloadTotal = total; + requestUpdate(true); + }); + + if (dlResult != HttpDownloader::OK) { + { + RenderLock lock(*this); + state = ERROR; + strlcpy(errorMsg, tr(STR_DOWNLOAD_FAILED), sizeof(errorMsg)); + } + requestUpdate(); + return; + } + + // Save sidecar so BookFusionSyncActivity can find the book_id for this file. + BookFusionBookIdStore::saveBookId(filename.c_str(), book.id); + + // Invalidate any stale EPUB cache for this path. + Epub epub(filename, "/.crosspoint"); + epub.clearCache(); + + LOG_DBG("BFB", "Download complete, sidecar saved for book_id=%lu", static_cast(book.id)); + + { + RenderLock lock(*this); + state = DOWNLOAD_COMPLETE; + } + requestUpdate(true); +} + +void BookFusionBrowserActivity::loop() { + if (state == WIFI_SELECTION || state == LOADING || state == DOWNLOADING) { + return; + } + + if (state == CATEGORY_SELECTION) { + if (mappedInput.wasPressed(MappedInputManager::Button::Back)) { + finish(); + return; + } + if (mappedInput.wasPressed(MappedInputManager::Button::Confirm)) { + handleCategorySelection(); + return; + } + buttonNavigator.onNextRelease([this] { + selectedCategory = ButtonNavigator::nextIndex(selectedCategory, NUM_CATEGORIES); + requestUpdate(); + }); + buttonNavigator.onPreviousRelease([this] { + selectedCategory = ButtonNavigator::previousIndex(selectedCategory, NUM_CATEGORIES); + requestUpdate(); + }); + return; + } + + if (state == ERROR) { + if (mappedInput.wasReleased(MappedInputManager::Button::Back)) { + if (BF_TOKEN_STORE.hasToken()) { + { + RenderLock lock(*this); + state = CATEGORY_SELECTION; + } + requestUpdate(); + } else { + finish(); + } + } + return; + } + + if (state == DOWNLOAD_COMPLETE) { + if (mappedInput.wasReleased(MappedInputManager::Button::Back) || + mappedInput.wasReleased(MappedInputManager::Button::Confirm)) { + { + RenderLock lock(*this); + state = BROWSING; + } + requestUpdate(); + } + return; + } + + if (state == BROWSING) { + const int totalItems = searchResult.count + (searchResult.hasMore ? 1 : 0); + + if (mappedInput.wasReleased(MappedInputManager::Button::Back)) { + if (currentPage > 1) { + loadPage(currentPage - 1); + } else { + { + RenderLock lock(*this); + state = CATEGORY_SELECTION; + } + requestUpdate(); + } + return; + } + + if (mappedInput.wasPressed(MappedInputManager::Button::Confirm)) { + if (selectedIndex < searchResult.count) { + startDownload(selectedIndex); + } else if (searchResult.hasMore) { + loadPage(currentPage + 1); + } + return; + } + + buttonNavigator.onNextRelease([this, totalItems] { + selectedIndex = ButtonNavigator::nextIndex(selectedIndex, totalItems); + requestUpdate(); + }); + + buttonNavigator.onPreviousRelease([this, totalItems] { + selectedIndex = ButtonNavigator::previousIndex(selectedIndex, totalItems); + requestUpdate(); + }); + + buttonNavigator.onNextContinuous([this, totalItems] { + selectedIndex = ButtonNavigator::nextPageIndex(selectedIndex, totalItems, PAGE_ITEMS); + requestUpdate(); + }); + + buttonNavigator.onPreviousContinuous([this, totalItems] { + selectedIndex = ButtonNavigator::previousPageIndex(selectedIndex, totalItems, PAGE_ITEMS); + requestUpdate(); + }); + } +} + +void BookFusionBrowserActivity::render(RenderLock&&) { + renderer.clearScreen(); + + const auto pageWidth = renderer.getScreenWidth(); + const auto pageHeight = renderer.getScreenHeight(); + const auto& metrics = UITheme::getInstance().getMetrics(); + + const char* headerTitle = + (state == CATEGORY_SELECTION) ? tr(STR_BF_BROWSE_LIBRARY) : I18N.get(CATEGORIES[currentCategory].nameId); + GUI.drawHeader(renderer, Rect{0, metrics.topPadding, pageWidth, metrics.headerHeight}, headerTitle); + + if (state == CATEGORY_SELECTION) { + const int contentTop = metrics.topPadding + metrics.headerHeight + metrics.verticalSpacing; + const int contentHeight = pageHeight - contentTop - metrics.buttonHintsHeight - metrics.verticalSpacing; + + GUI.drawList( + renderer, Rect{0, contentTop, pageWidth, contentHeight}, NUM_CATEGORIES, selectedCategory, + [](int index) -> std::string { return std::string(I18N.get(CATEGORIES[index].nameId)); }, nullptr, nullptr, + nullptr, true); + + const auto labels = mappedInput.mapLabels(tr(STR_BACK), tr(STR_OPEN), tr(STR_DIR_UP), tr(STR_DIR_DOWN)); + GUI.drawButtonHints(renderer, labels.btn1, labels.btn2, labels.btn3, labels.btn4); + renderer.displayBuffer(); + return; + } + + if (state == WIFI_SELECTION || state == LOADING) { + renderer.drawCenteredText(UI_10_FONT_ID, pageHeight / 2, tr(STR_LOADING)); + const auto labels = mappedInput.mapLabels(tr(STR_BACK), "", "", ""); + GUI.drawButtonHints(renderer, labels.btn1, labels.btn2, labels.btn3, labels.btn4); + renderer.displayBuffer(); + return; + } + + if (state == ERROR) { + renderer.drawCenteredText(UI_10_FONT_ID, pageHeight / 2, errorMsg, true, EpdFontFamily::BOLD); + const auto labels = mappedInput.mapLabels(tr(STR_BACK), "", "", ""); + GUI.drawButtonHints(renderer, labels.btn1, labels.btn2, labels.btn3, labels.btn4); + renderer.displayBuffer(); + return; + } + + if (state == DOWNLOADING) { + renderer.drawCenteredText(UI_10_FONT_ID, pageHeight / 2 - 40, tr(STR_DOWNLOADING)); + const int maxWidth = pageWidth - 40; + auto title = renderer.truncatedText(UI_10_FONT_ID, downloadTitle, maxWidth); + renderer.drawCenteredText(UI_10_FONT_ID, pageHeight / 2 - 10, title.c_str()); + if (downloadTotal > 0) { + constexpr int barX = 50; + constexpr int barHeight = 20; + const int barWidth = pageWidth - 100; + const int barY = pageHeight / 2 + 20; + GUI.drawProgressBar(renderer, Rect{barX, barY, barWidth, barHeight}, downloadProgress, downloadTotal); + } + renderer.displayBuffer(); + return; + } + + if (state == DOWNLOAD_COMPLETE) { + renderer.drawCenteredText(UI_10_FONT_ID, pageHeight / 2 - 15, tr(STR_BF_DOWNLOAD_COMPLETE), true, + EpdFontFamily::BOLD); + const int maxWidth = pageWidth - 40; + auto title = renderer.truncatedText(UI_10_FONT_ID, downloadTitle, maxWidth); + renderer.drawCenteredText(UI_10_FONT_ID, pageHeight / 2 + 15, title.c_str()); + const auto labels = mappedInput.mapLabels(tr(STR_BACK), "", "", ""); + GUI.drawButtonHints(renderer, labels.btn1, labels.btn2, labels.btn3, labels.btn4); + renderer.displayBuffer(); + return; + } + + // BROWSING state — draw paginated book list via UITheme. + const int totalItems = searchResult.count + (searchResult.hasMore ? 1 : 0); + const int contentTop = metrics.topPadding + metrics.headerHeight + metrics.verticalSpacing; + const int contentHeight = pageHeight - contentTop - metrics.buttonHintsHeight - metrics.verticalSpacing; + + GUI.drawList( + renderer, Rect{0, contentTop, pageWidth, contentHeight}, totalItems, selectedIndex, + [this](int index) -> std::string { + if (index >= searchResult.count) return std::string(tr(STR_BF_NEXT_PAGE)); + const auto& book = searchResult.books[index]; + std::string text = book.title; + if (book.authors[0] != '\0') { + text += " \xe2\x80\x94 "; // UTF-8 em-dash + text += book.authors; + } + return text; + }, + nullptr, nullptr, nullptr, true); + + const char* confirmLabel = (selectedIndex >= searchResult.count) ? tr(STR_OPEN) : tr(STR_DOWNLOAD); + const auto labels = mappedInput.mapLabels(tr(STR_BACK), confirmLabel, tr(STR_DIR_UP), tr(STR_DIR_DOWN)); + GUI.drawButtonHints(renderer, labels.btn1, labels.btn2, labels.btn3, labels.btn4); + renderer.displayBuffer(); +} diff --git a/src/activities/settings/BookFusionBrowserActivity.h b/src/activities/settings/BookFusionBrowserActivity.h new file mode 100644 index 0000000000..1f91dec73b --- /dev/null +++ b/src/activities/settings/BookFusionBrowserActivity.h @@ -0,0 +1,56 @@ +#pragma once + +#include + +#include "BookFusionSyncClient.h" +#include "activities/Activity.h" +#include "util/ButtonNavigator.h" + +/** + * Browse and download books from the user's BookFusion library. + * + * Shows the user's library 20 books at a time (paginated). + * Selecting a book fetches a pre-signed download URL, streams the EPUB + * to the SD card, and writes a BookFusion sidecar via BookFusionBookIdStore + * so that progress sync works immediately after download. + * + * Requires a linked BookFusion account (token in BF_TOKEN_STORE). + */ +class BookFusionBrowserActivity final : public Activity { + public: + explicit BookFusionBrowserActivity(GfxRenderer& renderer, MappedInputManager& mappedInput) + : Activity("BookFusionBrowser", renderer, mappedInput) {} + + void onEnter() override; + void onExit() override; + void loop() override; + void render(RenderLock&&) override; + bool preventAutoSleep() override { return true; } + + private: + enum State { CATEGORY_SELECTION, WIFI_SELECTION, LOADING, BROWSING, DOWNLOADING, DOWNLOAD_COMPLETE, ERROR }; + + State state = CATEGORY_SELECTION; + ButtonNavigator buttonNavigator; + + BookFusionSearchResult searchResult; // Current page of 20 books (~2.5 KB on heap) + int selectedIndex = 0; + int currentPage = 1; + + // Category menu: which item is highlighted, and which one we're browsing. + int selectedCategory = 0; + int currentCategory = 0; + + // Large enough for pre-signed S3 URLs (typically 500–900 chars). + char downloadUrl[1024] = {}; + char downloadTitle[64] = {}; + size_t downloadProgress = 0; + size_t downloadTotal = 0; + + char errorMsg[128] = {}; + + void onWifiSelectionComplete(bool success); + void handleCategorySelection(); + void loadPage(int page); + void startDownload(int bookIndex); +}; diff --git a/src/activities/settings/BookFusionSettingsActivity.cpp b/src/activities/settings/BookFusionSettingsActivity.cpp new file mode 100644 index 0000000000..798a69da4b --- /dev/null +++ b/src/activities/settings/BookFusionSettingsActivity.cpp @@ -0,0 +1,97 @@ +#include "BookFusionSettingsActivity.h" + +#include +#include + +#include "BookFusionAuthActivity.h" +#include "BookFusionBrowserActivity.h" +#include "BookFusionTokenStore.h" +#include "MappedInputManager.h" +#include "components/UITheme.h" +#include "fontIds.h" + +namespace { +constexpr int LINK_INDEX = 0; +constexpr int UNLINK_INDEX = 1; +constexpr int BROWSE_INDEX = 2; + +const StrId menuNames[BookFusionSettingsActivity::MENU_ITEMS] = {StrId::STR_BF_LINK_ACCOUNT, StrId::STR_BF_UNLINK, + StrId::STR_BF_BROWSE_LIBRARY}; +} // namespace + +void BookFusionSettingsActivity::onEnter() { + Activity::onEnter(); + selectedIndex = 0; + requestUpdate(); +} + +void BookFusionSettingsActivity::onExit() { Activity::onExit(); } + +void BookFusionSettingsActivity::loop() { + if (mappedInput.wasPressed(MappedInputManager::Button::Back)) { + finish(); + return; + } + + if (mappedInput.wasPressed(MappedInputManager::Button::Confirm)) { + handleSelection(); + return; + } + + buttonNavigator.onNext([this] { + selectedIndex = (selectedIndex + 1) % MENU_ITEMS; + requestUpdate(); + }); + + buttonNavigator.onPrevious([this] { + selectedIndex = (selectedIndex + MENU_ITEMS - 1) % MENU_ITEMS; + requestUpdate(); + }); +} + +void BookFusionSettingsActivity::handleSelection() { + if (selectedIndex == LINK_INDEX) { + startActivityForResult(std::make_unique(renderer, mappedInput), + [this](const ActivityResult&) { requestUpdate(); }); + } else if (selectedIndex == UNLINK_INDEX) { + BF_TOKEN_STORE.clearToken(); + requestUpdate(); + } else if (selectedIndex == BROWSE_INDEX) { + if (BF_TOKEN_STORE.hasToken()) { + startActivityForResult(std::make_unique(renderer, mappedInput), + [this](const ActivityResult&) { requestUpdate(); }); + } + } +} + +void BookFusionSettingsActivity::render(RenderLock&&) { + renderer.clearScreen(); + + const auto& metrics = UITheme::getInstance().getMetrics(); + const auto pageWidth = renderer.getScreenWidth(); + const auto pageHeight = renderer.getScreenHeight(); + + GUI.drawHeader(renderer, Rect{0, metrics.topPadding, pageWidth, metrics.headerHeight}, tr(STR_BF_SYNC)); + + const int contentTop = metrics.topPadding + metrics.headerHeight + metrics.verticalSpacing; + const int contentHeight = pageHeight - contentTop - metrics.buttonHintsHeight - metrics.verticalSpacing * 2; + + GUI.drawList( + renderer, Rect{0, contentTop, pageWidth, contentHeight}, MENU_ITEMS, static_cast(selectedIndex), + [](int index) { return std::string(I18N.get(menuNames[index])); }, nullptr, nullptr, + [](int index) -> std::string { + if (index == LINK_INDEX) { + return BF_TOKEN_STORE.hasToken() ? std::string(tr(STR_BF_LINKED)) : std::string(tr(STR_BF_NOT_LINKED)); + } + if (index == BROWSE_INDEX && !BF_TOKEN_STORE.hasToken()) { + return std::string(tr(STR_BF_NOT_LINKED)); + } + return ""; + }, + true); + + const auto labels = mappedInput.mapLabels(tr(STR_BACK), tr(STR_SELECT), tr(STR_DIR_UP), tr(STR_DIR_DOWN)); + GUI.drawButtonHints(renderer, labels.btn1, labels.btn2, labels.btn3, labels.btn4); + + renderer.displayBuffer(); +} diff --git a/src/activities/settings/BookFusionSettingsActivity.h b/src/activities/settings/BookFusionSettingsActivity.h new file mode 100644 index 0000000000..cde15c81e8 --- /dev/null +++ b/src/activities/settings/BookFusionSettingsActivity.h @@ -0,0 +1,27 @@ +#pragma once + +#include "activities/Activity.h" +#include "util/ButtonNavigator.h" + +/** + * Settings submenu for BookFusion Sync. + * Shows "Link Account" and "Unlink Account" options with linked/not-linked status. + */ +class BookFusionSettingsActivity final : public Activity { + public: + explicit BookFusionSettingsActivity(GfxRenderer& renderer, MappedInputManager& mappedInput) + : Activity("BookFusionSettings", renderer, mappedInput) {} + + void onEnter() override; + void onExit() override; + void loop() override; + void render(RenderLock&&) override; + + static constexpr int MENU_ITEMS = 3; + + private: + ButtonNavigator buttonNavigator; + size_t selectedIndex = 0; + + void handleSelection(); +}; diff --git a/src/activities/settings/SettingsActivity.cpp b/src/activities/settings/SettingsActivity.cpp index 51cfe1229e..3ad7099b13 100644 --- a/src/activities/settings/SettingsActivity.cpp +++ b/src/activities/settings/SettingsActivity.cpp @@ -4,6 +4,7 @@ #include #include "AppVersion.h" +#include "BookFusionSettingsActivity.h" #include "ButtonRemapActivity.h" #include "ClearCacheActivity.h" #include "CrossPointSettings.h" @@ -51,6 +52,7 @@ void SettingsActivity::onEnter() { SettingInfo::Action(StrId::STR_REMAP_FRONT_BUTTONS, SettingAction::RemapFrontButtons)); systemSettings.push_back(SettingInfo::Action(StrId::STR_WIFI_NETWORKS, SettingAction::Network)); systemSettings.push_back(SettingInfo::Action(StrId::STR_KOREADER_SYNC, SettingAction::KOReaderSync)); + systemSettings.push_back(SettingInfo::Action(StrId::STR_BF_SYNC, SettingAction::BookFusionSync)); systemSettings.push_back(SettingInfo::Action(StrId::STR_OPDS_SERVERS, SettingAction::OPDSBrowser)); systemSettings.push_back(SettingInfo::Action(StrId::STR_CLEAR_READING_CACHE, SettingAction::ClearCache)); systemSettings.push_back(SettingInfo::Action(StrId::STR_CHECK_UPDATES, SettingAction::CheckForUpdates)); @@ -183,6 +185,9 @@ void SettingsActivity::toggleCurrentSetting() { case SettingAction::KOReaderSync: startActivityForResult(std::make_unique(renderer, mappedInput), resultHandler); break; + case SettingAction::BookFusionSync: + startActivityForResult(std::make_unique(renderer, mappedInput), resultHandler); + break; case SettingAction::OPDSBrowser: startActivityForResult(std::make_unique(renderer, mappedInput), resultHandler); break; diff --git a/src/activities/settings/SettingsActivity.h b/src/activities/settings/SettingsActivity.h index 71b9597ebf..225ecb09ba 100644 --- a/src/activities/settings/SettingsActivity.h +++ b/src/activities/settings/SettingsActivity.h @@ -17,6 +17,7 @@ enum class SettingAction { RemapFrontButtonsReader, CustomiseStatusBar, KOReaderSync, + BookFusionSync, OPDSBrowser, Network, ClearCache, diff --git a/src/main.cpp b/src/main.cpp index ab02248bbb..742281345d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -16,6 +16,7 @@ #include #include "AppVersion.h" +#include "BookFusionTokenStore.h" #include "CrossPointSettings.h" #include "CrossPointState.h" #include "KOReaderCredentialStore.h" @@ -309,6 +310,7 @@ void setup() { SETTINGS.loadFromFile(); I18N.loadSettings(); KOREADER_STORE.loadFromFile(); + BF_TOKEN_STORE.loadFromFile(); OPDS_STORE.loadFromFile(); UITheme::getInstance().reload(); ButtonNavigator::setMappedInputManager(mappedInputManager); From 24c400b7ad99d09d846f19bf2ecf4d16e0f08d86 Mon Sep 17 00:00:00 2001 From: wildfire070 Date: Wed, 29 Apr 2026 10:03:29 -0400 Subject: [PATCH 3/9] Updated Logo120.h Updated Logo120.h --- src/images/Logo120.h | 218 +++++++++++++++++++++---------------------- 1 file changed, 109 insertions(+), 109 deletions(-) diff --git a/src/images/Logo120.h b/src/images/Logo120.h index 572db224e6..7910b4581b 100644 --- a/src/images/Logo120.h +++ b/src/images/Logo120.h @@ -1,114 +1,114 @@ #pragma once #include -// Image dimensions: 120x120 +// 'crossink', 120x120px static const uint8_t Logo120[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, - 0xC3, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xF1, 0xFF, 0xF1, - 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFC, 0xFF, 0xE7, 0xFC, 0x3F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xBE, 0x7F, 0xCF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xDE, 0x7F, 0x9F, 0x87, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xF7, 0xEF, 0x3F, 0x9F, 0x00, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF3, 0xE7, 0x3F, 0x3E, 0x00, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xF3, 0xBF, - 0x3E, 0x38, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xF9, 0xBF, 0x3C, 0x7E, 0x0C, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xF9, 0xBF, 0x3E, 0x7F, 0x0E, 0x7F, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFC, 0xBF, 0x3E, 0x7F, 0x8E, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7C, 0x3F, 0x3E, 0x7F, 0x87, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, - 0x00, 0x1F, 0x1E, 0x3F, 0x3E, 0x3F, 0xC3, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFE, 0x07, 0x86, - 0x7F, 0x9F, 0x3F, 0xE3, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xE0, 0xE0, 0x7F, 0x90, 0x3F, - 0xE3, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFC, 0x7C, 0xFC, 0x00, 0x1F, 0xF1, 0xCF, 0x87, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0x3F, 0xF0, 0x00, 0x03, 0xF1, 0xCE, 0x01, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0x9F, 0xE7, 0x1F, 0x80, 0x70, 0xCC, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFD, 0xF7, 0xFF, 0xCF, 0xC8, 0x98, 0xFC, 0x00, 0x40, 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF8, 0xFF, - 0xEF, 0x80, 0x48, 0x07, 0x80, 0x00, 0x7C, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0x1F, 0xEF, 0x80, 0x0C, - 0x00, 0x70, 0x00, 0x3E, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0x81, 0xEF, 0x00, 0x04, 0x00, 0x1C, 0x00, - 0x1E, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xE0, 0x0F, 0x00, 0x06, 0x00, 0x06, 0x00, 0x1F, 0x1F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFE, 0x0E, 0x00, 0x06, 0x00, 0x01, 0x80, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x8F, 0xFF, 0x9E, 0x00, 0xF3, 0x00, 0x00, 0xC0, 0x0F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, - 0xFF, 0x1C, 0x07, 0xF3, 0x00, 0x00, 0x30, 0x0F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xFE, 0x3C, 0x3F, - 0xF3, 0x00, 0x00, 0x18, 0x07, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x30, 0xF8, 0x7F, 0xF9, 0x00, 0x00, - 0x08, 0x07, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x03, 0xF1, 0xFF, 0x19, 0x80, 0x00, 0x04, 0x03, 0xC7, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xFE, 0x79, 0xFE, 0x00, 0x02, 0x03, 0xE3, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xF9, 0xFF, 0xC0, 0x03, 0x01, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x9F, 0x9F, 0xF9, 0xFF, 0xF0, 0x01, 0x01, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, - 0x3F, 0xF9, 0xFF, 0xFC, 0x01, 0x81, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0x7E, 0x3D, 0xFF, - 0xFF, 0x00, 0x80, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFC, 0xFD, 0xFF, 0xFF, 0x80, 0xC0, - 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xF9, 0xFC, 0xFF, 0xFF, 0xC0, 0x40, 0xF1, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0x07, 0xC1, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xE0, 0x40, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, - 0x63, 0x8F, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xF0, 0x20, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xF8, 0x3F, 0xFF, - 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xF8, 0x20, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xBC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, - 0xFF, 0xFF, 0xFC, 0x20, 0x79, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFE, - 0x20, 0x39, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xBE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFE, 0x20, 0x38, 0xFF, - 0xFF, 0xFF, 0xFF, 0xE3, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0x84, 0xFF, 0xFF, 0xFF, 0x20, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC9, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x30, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x90, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF8, 0xFF, 0xFF, 0xFF, 0x90, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, - 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xF0, 0xDF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, - 0xFF, 0xFF, 0xF8, 0xE7, 0xDF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFE, - 0x0F, 0xDF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x7F, - 0xF1, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xF8, 0xFF, 0xFF, - 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, - 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xF0, 0x5E, 0x7F, 0xFE, 0xFF, 0xFF, 0xFE, 0x7E, 0x3F, 0xFF, 0xFF, 0xF0, - 0x38, 0xFF, 0xFF, 0xFD, 0xE7, 0xDE, 0x7F, 0xFE, 0xFF, 0xFF, 0xFE, 0x7F, 0x0F, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, - 0xFC, 0x4F, 0xDE, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0x7F, 0xCF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0x1F, 0xDE, - 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0x3F, 0xC7, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xF3, 0xFF, - 0xFF, 0xFF, 0x3F, 0xE7, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, - 0xE7, 0xFF, 0xFF, 0xE0, 0x39, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xCF, 0x07, 0xFF, 0xFF, - 0xE0, 0x39, 0xFF, 0xFF, 0xFF, 0xFF, 0xEC, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xC7, 0xC7, 0xFF, 0xFF, 0xE0, 0x31, 0xFF, - 0xFF, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xE3, 0xCF, 0xFF, 0xFF, 0xE0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0x3F, 0xF8, 0x0F, 0xFF, 0xFF, 0xE0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0x3F, 0xFF, - 0xFF, 0xFF, 0x3F, 0xFC, 0x3F, 0xFF, 0xFF, 0xC0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x3F, 0xFF, 0xFF, 0xFF, 0x3F, - 0xFC, 0xFF, 0xFF, 0xFF, 0xC0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xBF, 0xFF, 0xFF, 0xFF, 0x3F, 0xC0, 0xFF, 0xFF, - 0xFF, 0xC0, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0x9F, 0xFF, 0xFF, 0xFF, 0x3F, 0x80, 0xFF, 0xFF, 0xFF, 0xC0, 0xF3, - 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFE, 0xFF, 0x3F, 0x3C, 0xFF, 0xFF, 0xFF, 0x80, 0xE3, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFE, 0x4F, 0xFF, 0xFE, 0x1F, 0x3E, 0x7D, 0xFF, 0xFF, 0xFF, 0x81, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, - 0xFF, 0xFE, 0x0F, 0x3E, 0xFD, 0xFF, 0xFF, 0xFF, 0x01, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xE7, - 0x3C, 0xF8, 0xFF, 0xFF, 0xFF, 0x03, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0x7F, 0xE7, 0x3C, 0xF8, 0x7F, - 0xFF, 0xFE, 0x03, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFE, 0x3F, 0xE7, 0x04, 0xFE, 0x3F, 0xFF, 0xFC, 0x07, - 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFE, 0x3F, 0xE7, 0x00, 0xFF, 0x3F, 0xFF, 0xFC, 0x0F, 0xCF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0x3F, 0xE6, 0x00, 0xFF, 0x1F, 0xFF, 0xF0, 0x1F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFE, 0xFF, 0xFF, 0xCE, 0x00, 0x7F, 0xBF, 0xFF, 0xE0, 0x3F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xEF, - 0x9E, 0x00, 0x7C, 0x3F, 0xFF, 0xC3, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xE0, 0x0C, 0x20, 0x3E, - 0x3F, 0xFF, 0x83, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x7F, 0xCC, 0x80, 0x0E, 0x3F, 0xFE, 0x13, - 0xFE, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xC1, 0x90, 0x00, 0x7F, 0xF8, 0x39, 0xFE, 0x3F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0xFF, 0xC3, 0xC8, 0x47, 0xFF, 0xE0, 0xF8, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xE3, 0xFF, 0x9F, 0xC4, 0xCF, 0xFF, 0x03, 0xFC, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, - 0x7F, 0x1F, 0xE7, 0x8F, 0xFC, 0x0F, 0xFE, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xF0, - 0x1F, 0xC0, 0x7F, 0xFF, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x03, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF - }; + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, + 0xC3, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xF1, 0xFF, 0xF1, + 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFC, 0xFF, 0xE7, 0xFC, 0x3F, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xBE, 0x7F, 0xCF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xDE, 0x7F, 0x9F, 0x87, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF7, 0xEF, 0x3F, 0x9F, 0x00, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xF3, 0xE7, 0x3F, 0x3E, 0x00, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xF3, 0xBF, + 0x3E, 0x38, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xF9, 0xBF, 0x3C, 0x7E, 0x0C, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xF9, 0xBF, 0x3E, 0x7F, 0x0E, 0x7F, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFC, 0xBF, 0x3E, 0x7F, 0x8E, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7C, 0x3F, 0x3E, 0x7F, 0x87, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, + 0x00, 0x1F, 0x1E, 0x3F, 0x3E, 0x3F, 0xC3, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFE, 0x07, 0x86, + 0x7F, 0x9F, 0x3F, 0xE3, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xE0, 0xE0, 0x7F, 0x90, 0x3F, + 0xE3, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFC, 0x7C, 0xFC, 0x00, 0x1F, 0xF1, 0xCF, 0x87, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0x3F, 0xF0, 0x00, 0x03, 0xF1, 0xCE, 0x01, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0x9F, 0xE7, 0x1F, 0x80, 0x70, 0xCC, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFD, 0xF7, 0xFF, 0xCF, 0xC8, 0x98, 0xFC, 0x00, 0x40, 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF8, 0xFF, + 0xEF, 0x80, 0x48, 0x07, 0x80, 0x00, 0x7C, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0x1F, 0xEF, 0x80, 0x0C, + 0x00, 0x70, 0x00, 0x3E, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0x81, 0xEF, 0x00, 0x04, 0x00, 0x1C, 0x00, + 0x1E, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xE0, 0x0F, 0x00, 0x06, 0x00, 0x06, 0x00, 0x1F, 0x1F, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFE, 0x0E, 0x00, 0x06, 0x00, 0x01, 0x80, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x8F, 0xFF, 0x9E, 0x00, 0xF3, 0x00, 0x00, 0xC0, 0x0F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, + 0xFF, 0x1C, 0x07, 0xF3, 0x00, 0x00, 0x30, 0x0F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xFE, 0x3C, 0x3F, + 0xF3, 0x00, 0x00, 0x18, 0x07, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x30, 0xF8, 0x7F, 0xF9, 0x00, 0x00, + 0x08, 0x07, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x03, 0xF1, 0xFF, 0x19, 0x80, 0x00, 0x04, 0x03, 0xC7, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xFE, 0x79, 0xFE, 0x00, 0x02, 0x03, 0xE3, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xF9, 0xFF, 0xC0, 0x03, 0x01, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x9F, 0x9F, 0xF9, 0xFF, 0xF0, 0x01, 0x01, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, + 0x3F, 0xF9, 0xFF, 0xFC, 0x01, 0x81, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0x7E, 0x3D, 0xFF, + 0xFF, 0x00, 0x80, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFC, 0xFD, 0xFF, 0xFF, 0x80, 0xC0, + 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xF9, 0xFC, 0xFF, 0xFF, 0xC0, 0x40, 0xF1, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x07, 0xC1, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xE0, 0x40, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, + 0x63, 0x8F, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xF0, 0x20, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xF8, 0x3F, 0xFF, + 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xF8, 0x20, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xBC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, + 0xFF, 0xFF, 0xFC, 0x20, 0x79, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFE, + 0x20, 0x39, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xBE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFE, 0x20, 0x38, 0xFF, + 0xFF, 0xFF, 0xFF, 0xE3, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0x84, 0xFF, 0xFF, 0xFF, 0x20, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, + 0xC9, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x30, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x90, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xF8, 0xFF, 0xFF, 0xFF, 0x90, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, + 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xF0, 0xDF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, + 0xFF, 0xFF, 0xF8, 0xE7, 0xDF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFE, + 0x0F, 0xDF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x7F, + 0xF1, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xF8, 0xFF, 0xFF, + 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, + 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xF0, 0x5E, 0x7F, 0xFE, 0xFF, 0xFF, 0xFE, 0x7E, 0x3F, 0xFF, 0xFF, 0xF0, + 0x38, 0xFF, 0xFF, 0xFD, 0xE7, 0xDE, 0x7F, 0xFE, 0xFF, 0xFF, 0xFE, 0x7F, 0x0F, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, + 0xFC, 0x4F, 0xDE, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0x7F, 0xCF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0x1F, 0xDE, + 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0x3F, 0xC7, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xF3, 0xFF, + 0xFF, 0xFF, 0x3F, 0xE7, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, + 0xE7, 0xFF, 0xFF, 0xE0, 0x39, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xCF, 0x07, 0xFF, 0xFF, + 0xE0, 0x39, 0xFF, 0xFF, 0xFF, 0xFF, 0xEC, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xC7, 0xC7, 0xFF, 0xFF, 0xE0, 0x31, 0xFF, + 0xFF, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xE3, 0xCF, 0xFF, 0xFF, 0xE0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, + 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0x3F, 0xF8, 0x0F, 0xFF, 0xFF, 0xE0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0x3F, 0xFF, + 0xFF, 0xFF, 0x3F, 0xFC, 0x3F, 0xFF, 0xFF, 0xC0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x3F, 0xFF, 0xFF, 0xFF, 0x3F, + 0xFC, 0xFF, 0xFF, 0xFF, 0xC0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xBF, 0xFF, 0xFF, 0xFF, 0x3F, 0xC0, 0xFF, 0xFF, + 0xFF, 0xC0, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0x9F, 0xFF, 0xFF, 0xFF, 0x3F, 0x80, 0xFF, 0xFF, 0xFF, 0xC0, 0xF3, + 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFE, 0xFF, 0x3F, 0x3C, 0xFF, 0xFF, 0xFF, 0x80, 0xE3, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFE, 0x4F, 0xFF, 0xFE, 0x1F, 0x3E, 0x7D, 0xFF, 0xFF, 0xFF, 0x81, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, + 0xFF, 0xFE, 0x0F, 0x3E, 0xFD, 0xFF, 0xFF, 0xFF, 0x01, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xE7, + 0x3C, 0xF8, 0xFF, 0xFF, 0xFF, 0x03, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0x7F, 0xE7, 0x3C, 0xF8, 0x7F, + 0xFF, 0xFE, 0x03, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFE, 0x3F, 0xE7, 0x04, 0xFE, 0x3F, 0xFF, 0xFC, 0x07, + 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFE, 0x3F, 0xE7, 0x00, 0xFF, 0x3F, 0xFF, 0xFC, 0x0F, 0xCF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0x3F, 0xE6, 0x00, 0xFF, 0x1F, 0xFF, 0xF0, 0x1F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFE, 0xFF, 0xFF, 0xCE, 0x00, 0x7F, 0xBF, 0xFF, 0xE0, 0x3F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xEF, + 0x9E, 0x00, 0x7C, 0x3F, 0xFF, 0xC3, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xE0, 0x0C, 0x20, 0x3E, + 0x3F, 0xFF, 0x83, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x7F, 0xCC, 0x80, 0x0E, 0x3F, 0xFE, 0x13, + 0xFE, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xC1, 0x90, 0x00, 0x7F, 0xF8, 0x39, 0xFE, 0x3F, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0xFF, 0xC3, 0xC8, 0x47, 0xFF, 0xE0, 0xF8, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xE3, 0xFF, 0x9F, 0xC4, 0xCF, 0xFF, 0x03, 0xFC, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, + 0x7F, 0x1F, 0xE7, 0x8F, 0xFC, 0x0F, 0xFE, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xF0, + 0x1F, 0xC0, 0x7F, 0xFF, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x03, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; +static_assert(sizeof(Logo120) == 1800, "Logo120 must be exactly 120x120 / 8 bytes"); From b26cdfaa1c18ab9d7a757e27fcf7885661c3e665 Mon Sep 17 00:00:00 2001 From: wildfire070 Date: Wed, 29 Apr 2026 10:35:29 -0400 Subject: [PATCH 4/9] Update Logo120.h Update Logo120.h --- src/images/Logo120.h | 206 ++++++++++++++++++++----------------------- 1 file changed, 96 insertions(+), 110 deletions(-) diff --git a/src/images/Logo120.h b/src/images/Logo120.h index 7910b4581b..2cc1a28cfb 100644 --- a/src/images/Logo120.h +++ b/src/images/Logo120.h @@ -1,114 +1,100 @@ #pragma once #include -// 'crossink', 120x120px +// Image dimensions: 120x120 static const uint8_t Logo120[] = { - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, - 0xC3, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xF1, 0xFF, 0xF1, - 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFC, 0xFF, 0xE7, 0xFC, 0x3F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xBE, 0x7F, 0xCF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xDE, 0x7F, 0x9F, 0x87, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xF7, 0xEF, 0x3F, 0x9F, 0x00, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF3, 0xE7, 0x3F, 0x3E, 0x00, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xF3, 0xBF, - 0x3E, 0x38, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xF9, 0xBF, 0x3C, 0x7E, 0x0C, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xF9, 0xBF, 0x3E, 0x7F, 0x0E, 0x7F, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFC, 0xBF, 0x3E, 0x7F, 0x8E, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7C, 0x3F, 0x3E, 0x7F, 0x87, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, - 0x00, 0x1F, 0x1E, 0x3F, 0x3E, 0x3F, 0xC3, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFE, 0x07, 0x86, - 0x7F, 0x9F, 0x3F, 0xE3, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xE0, 0xE0, 0x7F, 0x90, 0x3F, - 0xE3, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFC, 0x7C, 0xFC, 0x00, 0x1F, 0xF1, 0xCF, 0x87, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0x3F, 0xF0, 0x00, 0x03, 0xF1, 0xCE, 0x01, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0x9F, 0xE7, 0x1F, 0x80, 0x70, 0xCC, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFD, 0xF7, 0xFF, 0xCF, 0xC8, 0x98, 0xFC, 0x00, 0x40, 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF8, 0xFF, - 0xEF, 0x80, 0x48, 0x07, 0x80, 0x00, 0x7C, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0x1F, 0xEF, 0x80, 0x0C, - 0x00, 0x70, 0x00, 0x3E, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0x81, 0xEF, 0x00, 0x04, 0x00, 0x1C, 0x00, - 0x1E, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xE0, 0x0F, 0x00, 0x06, 0x00, 0x06, 0x00, 0x1F, 0x1F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFE, 0x0E, 0x00, 0x06, 0x00, 0x01, 0x80, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x8F, 0xFF, 0x9E, 0x00, 0xF3, 0x00, 0x00, 0xC0, 0x0F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, - 0xFF, 0x1C, 0x07, 0xF3, 0x00, 0x00, 0x30, 0x0F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xFE, 0x3C, 0x3F, - 0xF3, 0x00, 0x00, 0x18, 0x07, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x30, 0xF8, 0x7F, 0xF9, 0x00, 0x00, - 0x08, 0x07, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x03, 0xF1, 0xFF, 0x19, 0x80, 0x00, 0x04, 0x03, 0xC7, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xFE, 0x79, 0xFE, 0x00, 0x02, 0x03, 0xE3, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xF9, 0xFF, 0xC0, 0x03, 0x01, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x9F, 0x9F, 0xF9, 0xFF, 0xF0, 0x01, 0x01, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, - 0x3F, 0xF9, 0xFF, 0xFC, 0x01, 0x81, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0x7E, 0x3D, 0xFF, - 0xFF, 0x00, 0x80, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFC, 0xFD, 0xFF, 0xFF, 0x80, 0xC0, - 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xF9, 0xFC, 0xFF, 0xFF, 0xC0, 0x40, 0xF1, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0x07, 0xC1, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xE0, 0x40, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, - 0x63, 0x8F, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xF0, 0x20, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xF8, 0x3F, 0xFF, - 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xF8, 0x20, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xBC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, - 0xFF, 0xFF, 0xFC, 0x20, 0x79, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFE, - 0x20, 0x39, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xBE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFE, 0x20, 0x38, 0xFF, - 0xFF, 0xFF, 0xFF, 0xE3, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0x84, 0xFF, 0xFF, 0xFF, 0x20, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC9, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x30, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x90, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF8, 0xFF, 0xFF, 0xFF, 0x90, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, - 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xF0, 0xDF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, - 0xFF, 0xFF, 0xF8, 0xE7, 0xDF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFE, - 0x0F, 0xDF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x7F, - 0xF1, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xF8, 0xFF, 0xFF, - 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, - 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xF0, 0x5E, 0x7F, 0xFE, 0xFF, 0xFF, 0xFE, 0x7E, 0x3F, 0xFF, 0xFF, 0xF0, - 0x38, 0xFF, 0xFF, 0xFD, 0xE7, 0xDE, 0x7F, 0xFE, 0xFF, 0xFF, 0xFE, 0x7F, 0x0F, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, - 0xFC, 0x4F, 0xDE, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0x7F, 0xCF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0x1F, 0xDE, - 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0x3F, 0xC7, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xF3, 0xFF, - 0xFF, 0xFF, 0x3F, 0xE7, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, - 0xE7, 0xFF, 0xFF, 0xE0, 0x39, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xCF, 0x07, 0xFF, 0xFF, - 0xE0, 0x39, 0xFF, 0xFF, 0xFF, 0xFF, 0xEC, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xC7, 0xC7, 0xFF, 0xFF, 0xE0, 0x31, 0xFF, - 0xFF, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xE3, 0xCF, 0xFF, 0xFF, 0xE0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0x3F, 0xF8, 0x0F, 0xFF, 0xFF, 0xE0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0x3F, 0xFF, - 0xFF, 0xFF, 0x3F, 0xFC, 0x3F, 0xFF, 0xFF, 0xC0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x3F, 0xFF, 0xFF, 0xFF, 0x3F, - 0xFC, 0xFF, 0xFF, 0xFF, 0xC0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xBF, 0xFF, 0xFF, 0xFF, 0x3F, 0xC0, 0xFF, 0xFF, - 0xFF, 0xC0, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0x9F, 0xFF, 0xFF, 0xFF, 0x3F, 0x80, 0xFF, 0xFF, 0xFF, 0xC0, 0xF3, - 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFE, 0xFF, 0x3F, 0x3C, 0xFF, 0xFF, 0xFF, 0x80, 0xE3, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFE, 0x4F, 0xFF, 0xFE, 0x1F, 0x3E, 0x7D, 0xFF, 0xFF, 0xFF, 0x81, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, - 0xFF, 0xFE, 0x0F, 0x3E, 0xFD, 0xFF, 0xFF, 0xFF, 0x01, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xE7, - 0x3C, 0xF8, 0xFF, 0xFF, 0xFF, 0x03, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0x7F, 0xE7, 0x3C, 0xF8, 0x7F, - 0xFF, 0xFE, 0x03, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFE, 0x3F, 0xE7, 0x04, 0xFE, 0x3F, 0xFF, 0xFC, 0x07, - 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFE, 0x3F, 0xE7, 0x00, 0xFF, 0x3F, 0xFF, 0xFC, 0x0F, 0xCF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0x3F, 0xE6, 0x00, 0xFF, 0x1F, 0xFF, 0xF0, 0x1F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFE, 0xFF, 0xFF, 0xCE, 0x00, 0x7F, 0xBF, 0xFF, 0xE0, 0x3F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xEF, - 0x9E, 0x00, 0x7C, 0x3F, 0xFF, 0xC3, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xE0, 0x0C, 0x20, 0x3E, - 0x3F, 0xFF, 0x83, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x7F, 0xCC, 0x80, 0x0E, 0x3F, 0xFE, 0x13, - 0xFE, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xC1, 0x90, 0x00, 0x7F, 0xF8, 0x39, 0xFE, 0x3F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0xFF, 0xC3, 0xC8, 0x47, 0xFF, 0xE0, 0xF8, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xE3, 0xFF, 0x9F, 0xC4, 0xCF, 0xFF, 0x03, 0xFC, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, - 0x7F, 0x1F, 0xE7, 0x8F, 0xFC, 0x0F, 0xFE, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xF0, - 0x1F, 0xC0, 0x7F, 0xFF, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x03, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; -static_assert(sizeof(Logo120) == 1800, "Logo120 must be exactly 120x120 / 8 bytes"); + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, + 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x01, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, + 0xff, 0xf0, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x07, 0xe0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xc0, 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0xff, 0xff, 0xff, 0xc0, 0x1f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, + 0x80, 0x1f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0x00, 0x3f, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xfe, 0x00, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, + 0xff, 0xff, 0xfe, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xfc, 0x00, + 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xf8, 0x01, 0xff, 0xff, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xf8, 0x03, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xf0, 0x07, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe0, 0x07, 0xff, + 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x0f, 0xff, 0xff, 0xf0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3f, 0xff, 0x80, 0x1f, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, + 0x80, 0x3f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x3f, 0xff, 0xff, + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x7f, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x00, 0x7f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x07, 0xfc, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfc, 0x01, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf8, 0x03, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xe0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x0f, 0xff, + 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, + 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x7f, + 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, + 0xf8, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x03, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x0f, 0xff, + 0xff, 0xff, 0xff, 0xe0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xc0, + 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfc, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0x80, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, + 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0x80, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x01, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x7f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xfe, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xe0, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xfc, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x3f, 0xff, 0xff, 0xfc, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, + 0xf8, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xf0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xe0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, + 0x07, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xc0, + 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x80, 0x1f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x80, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x7f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfc, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfc, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3f, 0xf8, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, + 0xf8, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x03, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x07, 0xc0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x1f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xc0, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, + 0xfc, 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, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; From 6b1e0812f479a7f9b21b97ee68f73b768785dd68 Mon Sep 17 00:00:00 2001 From: wildfire070 Date: Wed, 29 Apr 2026 10:53:09 -0400 Subject: [PATCH 5/9] Delete src/images/Logo120.h --- src/images/Logo120.h | 100 ------------------------------------------- 1 file changed, 100 deletions(-) delete mode 100644 src/images/Logo120.h diff --git a/src/images/Logo120.h b/src/images/Logo120.h deleted file mode 100644 index 2cc1a28cfb..0000000000 --- a/src/images/Logo120.h +++ /dev/null @@ -1,100 +0,0 @@ -#pragma once -#include - -// Image dimensions: 120x120 -static const uint8_t Logo120[] = { - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, - 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x01, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, - 0xff, 0xf0, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x07, 0xe0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xc0, 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3f, 0xff, 0xff, 0xff, 0xc0, 0x1f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, - 0x80, 0x1f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0x00, 0x3f, 0xfc, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xfe, 0x00, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xff, 0xff, 0xfe, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xfc, 0x00, - 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xf8, 0x01, 0xff, 0xff, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xf8, 0x03, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, - 0xff, 0xf0, 0x07, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe0, 0x07, 0xff, - 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x0f, 0xff, 0xff, 0xf0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3f, 0xff, 0x80, 0x1f, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, - 0x80, 0x3f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x3f, 0xff, 0xff, - 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x7f, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x00, 0x7f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0xfc, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfc, 0x01, - 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf8, 0x03, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xe0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x0f, 0xff, - 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, - 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x7f, - 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, - 0xf8, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x03, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x0f, 0xff, - 0xff, 0xff, 0xff, 0xe0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xc0, - 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xfc, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0x80, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, - 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0x80, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x01, 0xff, 0xff, - 0xff, 0xff, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x7f, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xfe, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xe0, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xfc, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, - 0x00, 0x3f, 0xff, 0xff, 0xfc, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, - 0xf8, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xf0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xe0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xc0, - 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x80, 0x1f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x80, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x7f, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfc, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfc, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3f, 0xf8, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, - 0xf8, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x03, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xc0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, - 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x1f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xc0, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, - 0xfc, 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, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; From d88e4caa637b3719aa67d55a2a563ad99d899bbc Mon Sep 17 00:00:00 2001 From: wildfire070 Date: Wed, 29 Apr 2026 10:59:31 -0400 Subject: [PATCH 6/9] Added Logo120.h --- src/images/Logo120.h | 114 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 src/images/Logo120.h diff --git a/src/images/Logo120.h b/src/images/Logo120.h new file mode 100644 index 0000000000..572db224e6 --- /dev/null +++ b/src/images/Logo120.h @@ -0,0 +1,114 @@ +#pragma once +#include + +// Image dimensions: 120x120 +static const uint8_t Logo120[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, + 0xC3, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xF1, 0xFF, 0xF1, + 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFC, 0xFF, 0xE7, 0xFC, 0x3F, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xBE, 0x7F, 0xCF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xDE, 0x7F, 0x9F, 0x87, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF7, 0xEF, 0x3F, 0x9F, 0x00, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xF3, 0xE7, 0x3F, 0x3E, 0x00, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xF3, 0xBF, + 0x3E, 0x38, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xF9, 0xBF, 0x3C, 0x7E, 0x0C, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xF9, 0xBF, 0x3E, 0x7F, 0x0E, 0x7F, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFC, 0xBF, 0x3E, 0x7F, 0x8E, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7C, 0x3F, 0x3E, 0x7F, 0x87, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, + 0x00, 0x1F, 0x1E, 0x3F, 0x3E, 0x3F, 0xC3, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFE, 0x07, 0x86, + 0x7F, 0x9F, 0x3F, 0xE3, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xE0, 0xE0, 0x7F, 0x90, 0x3F, + 0xE3, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFC, 0x7C, 0xFC, 0x00, 0x1F, 0xF1, 0xCF, 0x87, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0x3F, 0xF0, 0x00, 0x03, 0xF1, 0xCE, 0x01, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0x9F, 0xE7, 0x1F, 0x80, 0x70, 0xCC, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFD, 0xF7, 0xFF, 0xCF, 0xC8, 0x98, 0xFC, 0x00, 0x40, 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF8, 0xFF, + 0xEF, 0x80, 0x48, 0x07, 0x80, 0x00, 0x7C, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0x1F, 0xEF, 0x80, 0x0C, + 0x00, 0x70, 0x00, 0x3E, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0x81, 0xEF, 0x00, 0x04, 0x00, 0x1C, 0x00, + 0x1E, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xE0, 0x0F, 0x00, 0x06, 0x00, 0x06, 0x00, 0x1F, 0x1F, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFE, 0x0E, 0x00, 0x06, 0x00, 0x01, 0x80, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x8F, 0xFF, 0x9E, 0x00, 0xF3, 0x00, 0x00, 0xC0, 0x0F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, + 0xFF, 0x1C, 0x07, 0xF3, 0x00, 0x00, 0x30, 0x0F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xFE, 0x3C, 0x3F, + 0xF3, 0x00, 0x00, 0x18, 0x07, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x30, 0xF8, 0x7F, 0xF9, 0x00, 0x00, + 0x08, 0x07, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x03, 0xF1, 0xFF, 0x19, 0x80, 0x00, 0x04, 0x03, 0xC7, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xFE, 0x79, 0xFE, 0x00, 0x02, 0x03, 0xE3, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xF9, 0xFF, 0xC0, 0x03, 0x01, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x9F, 0x9F, 0xF9, 0xFF, 0xF0, 0x01, 0x01, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, + 0x3F, 0xF9, 0xFF, 0xFC, 0x01, 0x81, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0x7E, 0x3D, 0xFF, + 0xFF, 0x00, 0x80, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFC, 0xFD, 0xFF, 0xFF, 0x80, 0xC0, + 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xF9, 0xFC, 0xFF, 0xFF, 0xC0, 0x40, 0xF1, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x07, 0xC1, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xE0, 0x40, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, + 0x63, 0x8F, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xF0, 0x20, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xF8, 0x3F, 0xFF, + 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xF8, 0x20, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xBC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, + 0xFF, 0xFF, 0xFC, 0x20, 0x79, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFE, + 0x20, 0x39, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xBE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFE, 0x20, 0x38, 0xFF, + 0xFF, 0xFF, 0xFF, 0xE3, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0x84, 0xFF, 0xFF, 0xFF, 0x20, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, + 0xC9, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x30, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x90, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xF8, 0xFF, 0xFF, 0xFF, 0x90, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, + 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xF0, 0xDF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, + 0xFF, 0xFF, 0xF8, 0xE7, 0xDF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFE, + 0x0F, 0xDF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x7F, + 0xF1, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xF8, 0xFF, 0xFF, + 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, + 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xF0, 0x5E, 0x7F, 0xFE, 0xFF, 0xFF, 0xFE, 0x7E, 0x3F, 0xFF, 0xFF, 0xF0, + 0x38, 0xFF, 0xFF, 0xFD, 0xE7, 0xDE, 0x7F, 0xFE, 0xFF, 0xFF, 0xFE, 0x7F, 0x0F, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, + 0xFC, 0x4F, 0xDE, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0x7F, 0xCF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0x1F, 0xDE, + 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0x3F, 0xC7, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xF3, 0xFF, + 0xFF, 0xFF, 0x3F, 0xE7, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, + 0xE7, 0xFF, 0xFF, 0xE0, 0x39, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xCF, 0x07, 0xFF, 0xFF, + 0xE0, 0x39, 0xFF, 0xFF, 0xFF, 0xFF, 0xEC, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xC7, 0xC7, 0xFF, 0xFF, 0xE0, 0x31, 0xFF, + 0xFF, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xE3, 0xCF, 0xFF, 0xFF, 0xE0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, + 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0x3F, 0xF8, 0x0F, 0xFF, 0xFF, 0xE0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0x3F, 0xFF, + 0xFF, 0xFF, 0x3F, 0xFC, 0x3F, 0xFF, 0xFF, 0xC0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x3F, 0xFF, 0xFF, 0xFF, 0x3F, + 0xFC, 0xFF, 0xFF, 0xFF, 0xC0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xBF, 0xFF, 0xFF, 0xFF, 0x3F, 0xC0, 0xFF, 0xFF, + 0xFF, 0xC0, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0x9F, 0xFF, 0xFF, 0xFF, 0x3F, 0x80, 0xFF, 0xFF, 0xFF, 0xC0, 0xF3, + 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFE, 0xFF, 0x3F, 0x3C, 0xFF, 0xFF, 0xFF, 0x80, 0xE3, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFE, 0x4F, 0xFF, 0xFE, 0x1F, 0x3E, 0x7D, 0xFF, 0xFF, 0xFF, 0x81, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, + 0xFF, 0xFE, 0x0F, 0x3E, 0xFD, 0xFF, 0xFF, 0xFF, 0x01, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xE7, + 0x3C, 0xF8, 0xFF, 0xFF, 0xFF, 0x03, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0x7F, 0xE7, 0x3C, 0xF8, 0x7F, + 0xFF, 0xFE, 0x03, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFE, 0x3F, 0xE7, 0x04, 0xFE, 0x3F, 0xFF, 0xFC, 0x07, + 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFE, 0x3F, 0xE7, 0x00, 0xFF, 0x3F, 0xFF, 0xFC, 0x0F, 0xCF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0x3F, 0xE6, 0x00, 0xFF, 0x1F, 0xFF, 0xF0, 0x1F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFE, 0xFF, 0xFF, 0xCE, 0x00, 0x7F, 0xBF, 0xFF, 0xE0, 0x3F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xEF, + 0x9E, 0x00, 0x7C, 0x3F, 0xFF, 0xC3, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xE0, 0x0C, 0x20, 0x3E, + 0x3F, 0xFF, 0x83, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x7F, 0xCC, 0x80, 0x0E, 0x3F, 0xFE, 0x13, + 0xFE, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xC1, 0x90, 0x00, 0x7F, 0xF8, 0x39, 0xFE, 0x3F, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0xFF, 0xC3, 0xC8, 0x47, 0xFF, 0xE0, 0xF8, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xE3, 0xFF, 0x9F, 0xC4, 0xCF, 0xFF, 0x03, 0xFC, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, + 0x7F, 0x1F, 0xE7, 0x8F, 0xFC, 0x0F, 0xFE, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xF0, + 0x1F, 0xC0, 0x7F, 0xFF, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x03, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF + }; From 57410a456ec5d98dd43314155b027efb576cf1cc Mon Sep 17 00:00:00 2001 From: wildfire070 Date: Wed, 29 Apr 2026 11:11:38 -0400 Subject: [PATCH 7/9] Ran clang-format-fix --- src/activities/reader/EpubReaderActivity.cpp | 2 +- src/images/Logo120.h | 218 +++++++++---------- 2 files changed, 110 insertions(+), 110 deletions(-) diff --git a/src/activities/reader/EpubReaderActivity.cpp b/src/activities/reader/EpubReaderActivity.cpp index 0088357da9..d60ce9c635 100644 --- a/src/activities/reader/EpubReaderActivity.cpp +++ b/src/activities/reader/EpubReaderActivity.cpp @@ -16,10 +16,10 @@ #include #include "../settings/KOReaderSettingsActivity.h" -#include "BookStatsActivity.h" #include "BookFusionBookIdStore.h" #include "BookFusionSyncActivity.h" #include "BookFusionTokenStore.h" +#include "BookStatsActivity.h" #include "CrossPointSettings.h" #include "CrossPointState.h" #include "EpubReaderBookmarkListActivity.h" diff --git a/src/images/Logo120.h b/src/images/Logo120.h index 572db224e6..7910b4581b 100644 --- a/src/images/Logo120.h +++ b/src/images/Logo120.h @@ -1,114 +1,114 @@ #pragma once #include -// Image dimensions: 120x120 +// 'crossink', 120x120px static const uint8_t Logo120[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, - 0xC3, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xF1, 0xFF, 0xF1, - 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFC, 0xFF, 0xE7, 0xFC, 0x3F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xBE, 0x7F, 0xCF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xDE, 0x7F, 0x9F, 0x87, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xF7, 0xEF, 0x3F, 0x9F, 0x00, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF3, 0xE7, 0x3F, 0x3E, 0x00, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xF3, 0xBF, - 0x3E, 0x38, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xF9, 0xBF, 0x3C, 0x7E, 0x0C, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xF9, 0xBF, 0x3E, 0x7F, 0x0E, 0x7F, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFC, 0xBF, 0x3E, 0x7F, 0x8E, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7C, 0x3F, 0x3E, 0x7F, 0x87, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, - 0x00, 0x1F, 0x1E, 0x3F, 0x3E, 0x3F, 0xC3, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFE, 0x07, 0x86, - 0x7F, 0x9F, 0x3F, 0xE3, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xE0, 0xE0, 0x7F, 0x90, 0x3F, - 0xE3, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFC, 0x7C, 0xFC, 0x00, 0x1F, 0xF1, 0xCF, 0x87, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0x3F, 0xF0, 0x00, 0x03, 0xF1, 0xCE, 0x01, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0x9F, 0xE7, 0x1F, 0x80, 0x70, 0xCC, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFD, 0xF7, 0xFF, 0xCF, 0xC8, 0x98, 0xFC, 0x00, 0x40, 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF8, 0xFF, - 0xEF, 0x80, 0x48, 0x07, 0x80, 0x00, 0x7C, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0x1F, 0xEF, 0x80, 0x0C, - 0x00, 0x70, 0x00, 0x3E, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0x81, 0xEF, 0x00, 0x04, 0x00, 0x1C, 0x00, - 0x1E, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xE0, 0x0F, 0x00, 0x06, 0x00, 0x06, 0x00, 0x1F, 0x1F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFE, 0x0E, 0x00, 0x06, 0x00, 0x01, 0x80, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x8F, 0xFF, 0x9E, 0x00, 0xF3, 0x00, 0x00, 0xC0, 0x0F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, - 0xFF, 0x1C, 0x07, 0xF3, 0x00, 0x00, 0x30, 0x0F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xFE, 0x3C, 0x3F, - 0xF3, 0x00, 0x00, 0x18, 0x07, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x30, 0xF8, 0x7F, 0xF9, 0x00, 0x00, - 0x08, 0x07, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x03, 0xF1, 0xFF, 0x19, 0x80, 0x00, 0x04, 0x03, 0xC7, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xFE, 0x79, 0xFE, 0x00, 0x02, 0x03, 0xE3, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xF9, 0xFF, 0xC0, 0x03, 0x01, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x9F, 0x9F, 0xF9, 0xFF, 0xF0, 0x01, 0x01, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, - 0x3F, 0xF9, 0xFF, 0xFC, 0x01, 0x81, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0x7E, 0x3D, 0xFF, - 0xFF, 0x00, 0x80, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFC, 0xFD, 0xFF, 0xFF, 0x80, 0xC0, - 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xF9, 0xFC, 0xFF, 0xFF, 0xC0, 0x40, 0xF1, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0x07, 0xC1, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xE0, 0x40, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, - 0x63, 0x8F, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xF0, 0x20, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xF8, 0x3F, 0xFF, - 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xF8, 0x20, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xBC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, - 0xFF, 0xFF, 0xFC, 0x20, 0x79, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFE, - 0x20, 0x39, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xBE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFE, 0x20, 0x38, 0xFF, - 0xFF, 0xFF, 0xFF, 0xE3, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0x84, 0xFF, 0xFF, 0xFF, 0x20, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC9, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x30, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x90, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF8, 0xFF, 0xFF, 0xFF, 0x90, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, - 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xF0, 0xDF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, - 0xFF, 0xFF, 0xF8, 0xE7, 0xDF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFE, - 0x0F, 0xDF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x7F, - 0xF1, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xF8, 0xFF, 0xFF, - 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, - 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xF0, 0x5E, 0x7F, 0xFE, 0xFF, 0xFF, 0xFE, 0x7E, 0x3F, 0xFF, 0xFF, 0xF0, - 0x38, 0xFF, 0xFF, 0xFD, 0xE7, 0xDE, 0x7F, 0xFE, 0xFF, 0xFF, 0xFE, 0x7F, 0x0F, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, - 0xFC, 0x4F, 0xDE, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0x7F, 0xCF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0x1F, 0xDE, - 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0x3F, 0xC7, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xF3, 0xFF, - 0xFF, 0xFF, 0x3F, 0xE7, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, - 0xE7, 0xFF, 0xFF, 0xE0, 0x39, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xCF, 0x07, 0xFF, 0xFF, - 0xE0, 0x39, 0xFF, 0xFF, 0xFF, 0xFF, 0xEC, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xC7, 0xC7, 0xFF, 0xFF, 0xE0, 0x31, 0xFF, - 0xFF, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xE3, 0xCF, 0xFF, 0xFF, 0xE0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0x3F, 0xF8, 0x0F, 0xFF, 0xFF, 0xE0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0x3F, 0xFF, - 0xFF, 0xFF, 0x3F, 0xFC, 0x3F, 0xFF, 0xFF, 0xC0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x3F, 0xFF, 0xFF, 0xFF, 0x3F, - 0xFC, 0xFF, 0xFF, 0xFF, 0xC0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xBF, 0xFF, 0xFF, 0xFF, 0x3F, 0xC0, 0xFF, 0xFF, - 0xFF, 0xC0, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0x9F, 0xFF, 0xFF, 0xFF, 0x3F, 0x80, 0xFF, 0xFF, 0xFF, 0xC0, 0xF3, - 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFE, 0xFF, 0x3F, 0x3C, 0xFF, 0xFF, 0xFF, 0x80, 0xE3, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFE, 0x4F, 0xFF, 0xFE, 0x1F, 0x3E, 0x7D, 0xFF, 0xFF, 0xFF, 0x81, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, - 0xFF, 0xFE, 0x0F, 0x3E, 0xFD, 0xFF, 0xFF, 0xFF, 0x01, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xE7, - 0x3C, 0xF8, 0xFF, 0xFF, 0xFF, 0x03, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0x7F, 0xE7, 0x3C, 0xF8, 0x7F, - 0xFF, 0xFE, 0x03, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFE, 0x3F, 0xE7, 0x04, 0xFE, 0x3F, 0xFF, 0xFC, 0x07, - 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFE, 0x3F, 0xE7, 0x00, 0xFF, 0x3F, 0xFF, 0xFC, 0x0F, 0xCF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0x3F, 0xE6, 0x00, 0xFF, 0x1F, 0xFF, 0xF0, 0x1F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFE, 0xFF, 0xFF, 0xCE, 0x00, 0x7F, 0xBF, 0xFF, 0xE0, 0x3F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xEF, - 0x9E, 0x00, 0x7C, 0x3F, 0xFF, 0xC3, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xE0, 0x0C, 0x20, 0x3E, - 0x3F, 0xFF, 0x83, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x7F, 0xCC, 0x80, 0x0E, 0x3F, 0xFE, 0x13, - 0xFE, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xC1, 0x90, 0x00, 0x7F, 0xF8, 0x39, 0xFE, 0x3F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0xFF, 0xC3, 0xC8, 0x47, 0xFF, 0xE0, 0xF8, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xE3, 0xFF, 0x9F, 0xC4, 0xCF, 0xFF, 0x03, 0xFC, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, - 0x7F, 0x1F, 0xE7, 0x8F, 0xFC, 0x0F, 0xFE, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xF0, - 0x1F, 0xC0, 0x7F, 0xFF, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x03, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF - }; + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, + 0xC3, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xF1, 0xFF, 0xF1, + 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFC, 0xFF, 0xE7, 0xFC, 0x3F, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xBE, 0x7F, 0xCF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xDE, 0x7F, 0x9F, 0x87, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF7, 0xEF, 0x3F, 0x9F, 0x00, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xF3, 0xE7, 0x3F, 0x3E, 0x00, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xF3, 0xBF, + 0x3E, 0x38, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xF9, 0xBF, 0x3C, 0x7E, 0x0C, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xF9, 0xBF, 0x3E, 0x7F, 0x0E, 0x7F, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFC, 0xBF, 0x3E, 0x7F, 0x8E, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7C, 0x3F, 0x3E, 0x7F, 0x87, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, + 0x00, 0x1F, 0x1E, 0x3F, 0x3E, 0x3F, 0xC3, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFE, 0x07, 0x86, + 0x7F, 0x9F, 0x3F, 0xE3, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xE0, 0xE0, 0x7F, 0x90, 0x3F, + 0xE3, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFC, 0x7C, 0xFC, 0x00, 0x1F, 0xF1, 0xCF, 0x87, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0x3F, 0xF0, 0x00, 0x03, 0xF1, 0xCE, 0x01, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0x9F, 0xE7, 0x1F, 0x80, 0x70, 0xCC, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFD, 0xF7, 0xFF, 0xCF, 0xC8, 0x98, 0xFC, 0x00, 0x40, 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF8, 0xFF, + 0xEF, 0x80, 0x48, 0x07, 0x80, 0x00, 0x7C, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0x1F, 0xEF, 0x80, 0x0C, + 0x00, 0x70, 0x00, 0x3E, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0x81, 0xEF, 0x00, 0x04, 0x00, 0x1C, 0x00, + 0x1E, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xE0, 0x0F, 0x00, 0x06, 0x00, 0x06, 0x00, 0x1F, 0x1F, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFE, 0x0E, 0x00, 0x06, 0x00, 0x01, 0x80, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x8F, 0xFF, 0x9E, 0x00, 0xF3, 0x00, 0x00, 0xC0, 0x0F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, + 0xFF, 0x1C, 0x07, 0xF3, 0x00, 0x00, 0x30, 0x0F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xFE, 0x3C, 0x3F, + 0xF3, 0x00, 0x00, 0x18, 0x07, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x30, 0xF8, 0x7F, 0xF9, 0x00, 0x00, + 0x08, 0x07, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x03, 0xF1, 0xFF, 0x19, 0x80, 0x00, 0x04, 0x03, 0xC7, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xFE, 0x79, 0xFE, 0x00, 0x02, 0x03, 0xE3, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xF9, 0xFF, 0xC0, 0x03, 0x01, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x9F, 0x9F, 0xF9, 0xFF, 0xF0, 0x01, 0x01, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, + 0x3F, 0xF9, 0xFF, 0xFC, 0x01, 0x81, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0x7E, 0x3D, 0xFF, + 0xFF, 0x00, 0x80, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFC, 0xFD, 0xFF, 0xFF, 0x80, 0xC0, + 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xF9, 0xFC, 0xFF, 0xFF, 0xC0, 0x40, 0xF1, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x07, 0xC1, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xE0, 0x40, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, + 0x63, 0x8F, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xF0, 0x20, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xF8, 0x3F, 0xFF, + 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xF8, 0x20, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xBC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, + 0xFF, 0xFF, 0xFC, 0x20, 0x79, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFE, + 0x20, 0x39, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xBE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFE, 0x20, 0x38, 0xFF, + 0xFF, 0xFF, 0xFF, 0xE3, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0x84, 0xFF, 0xFF, 0xFF, 0x20, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, + 0xC9, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x30, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x90, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xF8, 0xFF, 0xFF, 0xFF, 0x90, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, + 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xF0, 0xDF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, + 0xFF, 0xFF, 0xF8, 0xE7, 0xDF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFE, + 0x0F, 0xDF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x7F, + 0xF1, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xF8, 0xFF, 0xFF, + 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, + 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xF0, 0x5E, 0x7F, 0xFE, 0xFF, 0xFF, 0xFE, 0x7E, 0x3F, 0xFF, 0xFF, 0xF0, + 0x38, 0xFF, 0xFF, 0xFD, 0xE7, 0xDE, 0x7F, 0xFE, 0xFF, 0xFF, 0xFE, 0x7F, 0x0F, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, + 0xFC, 0x4F, 0xDE, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0x7F, 0xCF, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0x1F, 0xDE, + 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0x3F, 0xC7, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xF3, 0xFF, + 0xFF, 0xFF, 0x3F, 0xE7, 0xFF, 0xFF, 0xF0, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, + 0xE7, 0xFF, 0xFF, 0xE0, 0x39, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0x7F, 0xFF, 0xFF, 0xFE, 0x7F, 0xCF, 0x07, 0xFF, 0xFF, + 0xE0, 0x39, 0xFF, 0xFF, 0xFF, 0xFF, 0xEC, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xC7, 0xC7, 0xFF, 0xFF, 0xE0, 0x31, 0xFF, + 0xFF, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xE3, 0xCF, 0xFF, 0xFF, 0xE0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, + 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0x3F, 0xF8, 0x0F, 0xFF, 0xFF, 0xE0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0x3F, 0xFF, + 0xFF, 0xFF, 0x3F, 0xFC, 0x3F, 0xFF, 0xFF, 0xC0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x3F, 0xFF, 0xFF, 0xFF, 0x3F, + 0xFC, 0xFF, 0xFF, 0xFF, 0xC0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xBF, 0xFF, 0xFF, 0xFF, 0x3F, 0xC0, 0xFF, 0xFF, + 0xFF, 0xC0, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0x9F, 0xFF, 0xFF, 0xFF, 0x3F, 0x80, 0xFF, 0xFF, 0xFF, 0xC0, 0xF3, + 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFE, 0xFF, 0x3F, 0x3C, 0xFF, 0xFF, 0xFF, 0x80, 0xE3, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFE, 0x4F, 0xFF, 0xFE, 0x1F, 0x3E, 0x7D, 0xFF, 0xFF, 0xFF, 0x81, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, + 0xFF, 0xFE, 0x0F, 0x3E, 0xFD, 0xFF, 0xFF, 0xFF, 0x01, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xE7, + 0x3C, 0xF8, 0xFF, 0xFF, 0xFF, 0x03, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0x7F, 0xE7, 0x3C, 0xF8, 0x7F, + 0xFF, 0xFE, 0x03, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFE, 0x3F, 0xE7, 0x04, 0xFE, 0x3F, 0xFF, 0xFC, 0x07, + 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFE, 0x3F, 0xE7, 0x00, 0xFF, 0x3F, 0xFF, 0xFC, 0x0F, 0xCF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0x3F, 0xE6, 0x00, 0xFF, 0x1F, 0xFF, 0xF0, 0x1F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFE, 0xFF, 0xFF, 0xCE, 0x00, 0x7F, 0xBF, 0xFF, 0xE0, 0x3F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xEF, + 0x9E, 0x00, 0x7C, 0x3F, 0xFF, 0xC3, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xE0, 0x0C, 0x20, 0x3E, + 0x3F, 0xFF, 0x83, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x7F, 0xCC, 0x80, 0x0E, 0x3F, 0xFE, 0x13, + 0xFE, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x7F, 0xC1, 0x90, 0x00, 0x7F, 0xF8, 0x39, 0xFE, 0x3F, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0xFF, 0xC3, 0xC8, 0x47, 0xFF, 0xE0, 0xF8, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xE3, 0xFF, 0x9F, 0xC4, 0xCF, 0xFF, 0x03, 0xFC, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, + 0x7F, 0x1F, 0xE7, 0x8F, 0xFC, 0x0F, 0xFE, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xF0, + 0x1F, 0xC0, 0x7F, 0xFF, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x03, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; +static_assert(sizeof(Logo120) == 1800, "Logo120 must be exactly 120x120 / 8 bytes"); From fb61b68e4ba7e38441b1b89a6727340c8ef22527 Mon Sep 17 00:00:00 2001 From: wildfire070 Date: Wed, 29 Apr 2026 11:21:46 -0400 Subject: [PATCH 8/9] Update Logo120.h --- src/images/Logo120.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/images/Logo120.h b/src/images/Logo120.h index 7910b4581b..1502b10c39 100644 --- a/src/images/Logo120.h +++ b/src/images/Logo120.h @@ -111,4 +111,4 @@ static const uint8_t Logo120[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; -static_assert(sizeof(Logo120) == 1800, "Logo120 must be exactly 120x120 / 8 bytes"); +static_assert(sizeof(Logo120) == 2048, "Logo120 must be exactly 2048 bytes"); From 1570e12707e5993de77bf888e0a656e116eabd03 Mon Sep 17 00:00:00 2001 From: wildfire070 Date: Thu, 7 May 2026 20:33:08 -0400 Subject: [PATCH 9/9] Fix WebDAVHandler.cpp - Add #include to line 10 - Line 232-237: // Skip hidden/protected items bool shouldHide = (name[0] == '.'); if (!shouldHide) { shouldHide = std::any_of(std::begin(HIDDEN_ITEMS), std::end(HIDDEN_ITEMS), [name](const char* item) { return strcmp(name, item) == 0; }); } --- src/network/WebDAVHandler.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/network/WebDAVHandler.cpp b/src/network/WebDAVHandler.cpp index a07e33ebbd..6e1b648766 100644 --- a/src/network/WebDAVHandler.cpp +++ b/src/network/WebDAVHandler.cpp @@ -7,8 +7,11 @@ #include #include +#include + namespace { -constexpr const char* HIDDEN_ITEMS[] = {"System Volume Information", "XTCache"}; +const char* HIDDEN_ITEMS[] = {"System Volume Information", "XTCache"}; +constexpr size_t HIDDEN_ITEMS_COUNT = sizeof(HIDDEN_ITEMS) / sizeof(HIDDEN_ITEMS[0]); // RFC 1123 date format helper: "Sun, 06 Nov 1994 08:49:37 GMT" // ESP32 doesn't have real-time clock set by default, so we use a fixed epoch date @@ -229,12 +232,8 @@ void WebDAVHandler::handlePropfind(WebServer& s) { // Skip hidden/protected items bool shouldHide = (name[0] == '.'); if (!shouldHide) { - for (const auto* item : HIDDEN_ITEMS) { - if (strcmp(name, item) == 0) { - shouldHide = true; - break; - } - } + shouldHide = std::any_of(std::begin(HIDDEN_ITEMS), std::end(HIDDEN_ITEMS), + [name](const char* item) { return strcmp(name, item) == 0; }); } if (!shouldHide) { @@ -773,8 +772,8 @@ bool WebDAVHandler::isProtectedPath(const String& path) const { if (segment.startsWith(".")) return true; - for (const auto* item : HIDDEN_ITEMS) { - if (segment.equals(item)) return true; + for (size_t i = 0; i < HIDDEN_ITEMS_COUNT; i++) { + if (segment.equals(HIDDEN_ITEMS[i])) return true; } start = end + 1;