From f3b1475ede9b4d6240c492d708af4d317381a55c Mon Sep 17 00:00:00 2001 From: hedger Date: Sun, 26 Jun 2022 15:00:03 +0300 Subject: [PATCH] [FL-2052] New build system based on scons (#1269) --- .github/workflows/build.yml | 24 +- .github/workflows/lint_c.yml | 2 +- .gitignore | 8 + .gitmodules | 3 + Brewfile | 2 - CODING_STYLE.md | 2 +- Makefile | 178 +--- ReadMe.md | 28 +- SConstruct | 150 ++++ applications/ReadMe.md | 3 - applications/about/about.c | 12 +- applications/about/application.fam | 13 + applications/accessor/application.fam | 10 + applications/applications.c | 549 ------------ applications/applications.mk | 353 -------- applications/archive/application.fam | 11 + applications/bad_usb/application.fam | 14 + applications/bt/application.fam | 66 ++ applications/cli/application.fam | 9 + applications/crypto/application.fam | 6 + applications/debug_tools/application.fam | 115 +++ applications/desktop/application.fam | 30 + .../desktop/views/desktop_view_debug.c | 10 +- applications/dialogs/application.fam | 10 + applications/dolphin/application.fam | 23 + applications/extapps.scons | 57 ++ applications/gpio/application.fam | 11 + applications/gui/application.fam | 13 + applications/ibutton/application.fam | 23 + applications/infrared/application.fam | 23 + applications/input/application.fam | 9 + applications/lfrfid/application.fam | 26 + applications/lfrfid_debug/application.fam | 12 + applications/loader/application.fam | 10 + applications/meta/application.fam | 41 + applications/music_player/application.fam | 22 + applications/nfc/application.fam | 23 + applications/notification/application.fam | 21 + applications/power/application.fam | 53 ++ applications/rpc/application.fam | 12 + applications/rpc/rpc_storage.c | 40 +- applications/snake_game/application.fam | 11 + applications/storage/application.fam | 19 + applications/storage_settings/application.fam | 9 + applications/subghz/application.fam | 24 + .../subghz/scenes/subghz_scene_save_success.c | 2 +- applications/system/application.fam | 9 + applications/u2f/application.fam | 14 + applications/unit_tests/application.fam | 18 + applications/unit_tests/rpc/rpc_test.c | 21 +- applications/unit_tests/test_index.c | 2 +- applications/updater/application.fam | 39 + assets/Makefile | 48 - assets/ReadMe.md | 9 +- assets/SConscript | 113 +++ assets/assets.mk | 32 - assets/compiled/application.pb.c | 18 - assets/compiled/application.pb.h | 79 -- assets/compiled/assets_dolphin_blocking.c | 330 ------- assets/compiled/assets_dolphin_blocking.h | 7 - assets/compiled/assets_dolphin_internal.c | 330 ------- assets/compiled/assets_dolphin_internal.h | 7 - assets/compiled/assets_icons.c | 829 ------------------ assets/compiled/assets_icons.h | 178 ---- assets/compiled/flipper.pb.c | 19 - assets/compiled/flipper.pb.h | 302 ------- assets/compiled/gui.pb.c | 29 - assets/compiled/gui.pb.h | 152 ---- assets/compiled/protobuf_version.h | 3 - assets/compiled/storage.pb.c | 61 -- assets/compiled/storage.pb.h | 328 ------- assets/compiled/system.pb.c | 62 -- assets/compiled/system.pb.h | 342 -------- assets/copro.mk | 14 - assets/icons/About/Certification1_103x23.png | Bin 2105 -> 0 bytes assets/icons/About/Certification1_103x56.png | Bin 0 -> 3038 bytes assets/icons/About/Certification2_119x30.png | Bin 2437 -> 0 bytes assets/icons/About/Certification2_98x33.png | Bin 0 -> 2495 bytes assets/icons/Archive/back_10px.png | Bin 154 -> 154 bytes assets/icons/Common/Loading_24/frame_01.png | Bin 233 -> 194 bytes assets/icons/Common/Loading_24/frame_02.png | Bin 245 -> 194 bytes assets/icons/Common/Loading_24/frame_03.png | Bin 239 -> 192 bytes assets/icons/Common/Loading_24/frame_04.png | Bin 234 -> 190 bytes assets/icons/Common/Loading_24/frame_05.png | Bin 246 -> 203 bytes assets/icons/Common/Loading_24/frame_06.png | Bin 234 -> 184 bytes assets/icons/Common/Loading_24/frame_07.png | Bin 249 -> 203 bytes .../Dolphin/DolphinFirstStart5_54x49.png | Bin 1856 -> 1721 bytes assets/splash.mk | 3 - core/SConscript | 13 + core/core.mk | 8 - docker/Dockerfile | 7 +- documentation/AppManifests.md | 3 + documentation/OTA.md | 6 +- documentation/fbt.md | 77 ++ fbt | 12 + fbt.cmd | 8 + fbt_options.py | 72 ++ firmware.scons | 227 +++++ firmware/Makefile | 27 - firmware/ReadMe.md | 35 +- firmware/SConscript | 14 + firmware/targets/f7/application-ext.ld | 37 + firmware/targets/f7/ble_glue/ble_glue.c | 33 +- firmware/targets/f7/ble_glue/ble_glue.h | 2 + .../targets/f7/ble_glue/dev_info_service.c | 31 +- .../targets/f7/ble_glue/dev_info_service.h | 6 - firmware/targets/f7/ble_glue/tl_dbg_conf.h | 1 - firmware/targets/f7/target.mk | 162 ---- lib/SConscript | 78 ++ lib/ST25RFAL002/SConscript | 19 + lib/STM32CubeWB.scons | 66 ++ lib/appframe.scons | 26 + lib/drivers/SConscript | 17 + lib/fatfs/SConscript | 13 + lib/flipper_format/SConscript | 25 + lib/freertos.scons | 28 + lib/infrared/SConscript | 18 + lib/lib.mk | 138 --- lib/libusb_stm32.scons | 24 + lib/littlefs.scons | 20 + lib/microtar.scons | 21 + lib/misc.scons | 46 + lib/nanopb | 2 +- lib/one_wire/ibutton/ibutton_worker_i.h | 6 +- lib/one_wire/one_wire_slave.c | 3 +- lib/scons | 1 + lib/subghz/SConscript | 16 + lib/toolbox/.gitignore | 1 + lib/toolbox/SConscript | 47 + lib/toolbox/path.c | 29 + lib/toolbox/path.h | 9 + lib/toolbox/version.c | 3 + make/base.mk | 11 - make/defaults.mk | 2 - make/freertos-heap.mk | 1 - make/git.mk | 32 - make/rules.mk | 185 ---- make/toolchain.mk | 41 - scripts/assets.py | 43 +- scripts/bin2dfu.py | 3 +- scripts/compile_db.py | 77 -- scripts/flipper/assets/copro.py | 3 +- scripts/flipper/assets/dolphin.py | 18 +- scripts/flipper/assets/icon.py | 69 +- scripts/flipper/assets/manifest.py | 35 +- scripts/flipper/storage.py | 46 +- scripts/flipper/utils/__init__.py | 14 +- scripts/flipper/utils/fff.py | 2 +- scripts/lint.py | 1 + scripts/ob.py | 8 +- scripts/otp.py | 26 +- scripts/requirements.txt | 7 + scripts/{dist.py => sconsdist.py} | 69 +- scripts/storage.py | 3 +- scripts/version.py | 131 +++ site_scons/cc.scons | 47 + site_scons/commandline.scons | 202 +++++ site_scons/environ.scons | 82 ++ site_scons/fbt/__init__.py | 0 site_scons/fbt/appmanifest.py | 243 +++++ site_scons/fbt/util.py | 19 + site_scons/fbt/version.py | 23 + site_scons/firmwareopts.scons | 50 ++ site_scons/site_init.py | 40 + site_scons/site_tools/ccache.py | 14 + site_scons/site_tools/crosscc.py | 72 ++ site_scons/site_tools/fbt_apps.py | 61 ++ site_scons/site_tools/fbt_assets.py | 151 ++++ site_scons/site_tools/fbt_dist.py | 104 +++ site_scons/site_tools/fbt_extapps.py | 30 + site_scons/site_tools/fbt_version.py | 29 + site_scons/site_tools/fwbin.py | 52 ++ site_scons/site_tools/gdb.py | 33 + site_scons/site_tools/objdump.py | 26 + site_scons/site_tools/openocd.py | 48 + site_scons/site_tools/python3.py | 13 + site_scons/site_tools/sconsmodular.py | 38 + site_scons/site_tools/sconsrecursiveglob.py | 25 + site_scons/site_tools/strip.py | 26 + 179 files changed, 3986 insertions(+), 5196 deletions(-) create mode 100644 SConstruct create mode 100644 applications/about/application.fam create mode 100644 applications/accessor/application.fam delete mode 100644 applications/applications.c delete mode 100644 applications/applications.mk create mode 100644 applications/archive/application.fam create mode 100644 applications/bad_usb/application.fam create mode 100644 applications/bt/application.fam create mode 100644 applications/cli/application.fam create mode 100644 applications/crypto/application.fam create mode 100644 applications/debug_tools/application.fam create mode 100644 applications/desktop/application.fam create mode 100644 applications/dialogs/application.fam create mode 100644 applications/dolphin/application.fam create mode 100644 applications/extapps.scons create mode 100644 applications/gpio/application.fam create mode 100644 applications/gui/application.fam create mode 100644 applications/ibutton/application.fam create mode 100644 applications/infrared/application.fam create mode 100644 applications/input/application.fam create mode 100644 applications/lfrfid/application.fam create mode 100644 applications/lfrfid_debug/application.fam create mode 100644 applications/loader/application.fam create mode 100644 applications/meta/application.fam create mode 100644 applications/music_player/application.fam create mode 100644 applications/nfc/application.fam create mode 100644 applications/notification/application.fam create mode 100644 applications/power/application.fam create mode 100644 applications/rpc/application.fam create mode 100644 applications/snake_game/application.fam create mode 100644 applications/storage/application.fam create mode 100644 applications/storage_settings/application.fam create mode 100644 applications/subghz/application.fam create mode 100644 applications/system/application.fam create mode 100644 applications/u2f/application.fam create mode 100644 applications/unit_tests/application.fam create mode 100644 applications/updater/application.fam delete mode 100644 assets/Makefile create mode 100644 assets/SConscript delete mode 100644 assets/assets.mk delete mode 100644 assets/compiled/application.pb.c delete mode 100644 assets/compiled/application.pb.h delete mode 100644 assets/compiled/assets_dolphin_blocking.c delete mode 100644 assets/compiled/assets_dolphin_blocking.h delete mode 100644 assets/compiled/assets_dolphin_internal.c delete mode 100644 assets/compiled/assets_dolphin_internal.h delete mode 100644 assets/compiled/assets_icons.c delete mode 100644 assets/compiled/assets_icons.h delete mode 100644 assets/compiled/flipper.pb.c delete mode 100644 assets/compiled/flipper.pb.h delete mode 100644 assets/compiled/gui.pb.c delete mode 100644 assets/compiled/gui.pb.h delete mode 100644 assets/compiled/protobuf_version.h delete mode 100644 assets/compiled/storage.pb.c delete mode 100644 assets/compiled/storage.pb.h delete mode 100644 assets/compiled/system.pb.c delete mode 100644 assets/compiled/system.pb.h delete mode 100644 assets/copro.mk delete mode 100644 assets/icons/About/Certification1_103x23.png create mode 100644 assets/icons/About/Certification1_103x56.png delete mode 100644 assets/icons/About/Certification2_119x30.png create mode 100644 assets/icons/About/Certification2_98x33.png delete mode 100644 assets/splash.mk create mode 100644 core/SConscript delete mode 100644 core/core.mk create mode 100644 documentation/AppManifests.md create mode 100644 documentation/fbt.md create mode 100755 fbt create mode 100644 fbt.cmd create mode 100644 fbt_options.py create mode 100644 firmware.scons delete mode 100644 firmware/Makefile create mode 100644 firmware/SConscript create mode 100644 firmware/targets/f7/application-ext.ld delete mode 100644 firmware/targets/f7/target.mk create mode 100644 lib/SConscript create mode 100644 lib/ST25RFAL002/SConscript create mode 100644 lib/STM32CubeWB.scons create mode 100644 lib/appframe.scons create mode 100644 lib/drivers/SConscript create mode 100644 lib/fatfs/SConscript create mode 100644 lib/flipper_format/SConscript create mode 100644 lib/freertos.scons create mode 100644 lib/infrared/SConscript delete mode 100644 lib/lib.mk create mode 100644 lib/libusb_stm32.scons create mode 100644 lib/littlefs.scons create mode 100644 lib/microtar.scons create mode 100644 lib/misc.scons create mode 160000 lib/scons create mode 100644 lib/subghz/SConscript create mode 100644 lib/toolbox/.gitignore create mode 100644 lib/toolbox/SConscript delete mode 100644 make/base.mk delete mode 100644 make/defaults.mk delete mode 100644 make/freertos-heap.mk delete mode 100644 make/git.mk delete mode 100644 make/rules.mk delete mode 100644 make/toolchain.mk delete mode 100755 scripts/compile_db.py create mode 100644 scripts/requirements.txt rename scripts/{dist.py => sconsdist.py} (55%) mode change 100755 => 100644 create mode 100644 scripts/version.py create mode 100644 site_scons/cc.scons create mode 100644 site_scons/commandline.scons create mode 100644 site_scons/environ.scons create mode 100644 site_scons/fbt/__init__.py create mode 100644 site_scons/fbt/appmanifest.py create mode 100644 site_scons/fbt/util.py create mode 100644 site_scons/fbt/version.py create mode 100644 site_scons/firmwareopts.scons create mode 100644 site_scons/site_init.py create mode 100644 site_scons/site_tools/ccache.py create mode 100644 site_scons/site_tools/crosscc.py create mode 100644 site_scons/site_tools/fbt_apps.py create mode 100644 site_scons/site_tools/fbt_assets.py create mode 100644 site_scons/site_tools/fbt_dist.py create mode 100644 site_scons/site_tools/fbt_extapps.py create mode 100644 site_scons/site_tools/fbt_version.py create mode 100644 site_scons/site_tools/fwbin.py create mode 100644 site_scons/site_tools/gdb.py create mode 100644 site_scons/site_tools/objdump.py create mode 100644 site_scons/site_tools/openocd.py create mode 100644 site_scons/site_tools/python3.py create mode 100644 site_scons/site_tools/sconsmodular.py create mode 100644 site_scons/site_tools/sconsrecursiveglob.py create mode 100644 site_scons/site_tools/strip.py diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 45a977468..15b7f7864 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -71,14 +71,6 @@ jobs: run: | tar czpf artifacts/flipper-z-any-scripts-${{steps.names.outputs.suffix}}.tgz scripts - - name: 'Rebuild Assets' - uses: ./.github/actions/docker - with: - run: | - set -e - make assets_rebuild assets_manifest - git diff --quiet || ( echo "Assets recompilation required."; exit 255 ) - - name: 'Build the firmware in docker' uses: ./.github/actions/docker with: @@ -86,7 +78,7 @@ jobs: set -e for TARGET in ${TARGETS} do - make updater_package TARGET=${TARGET} ${{ startsWith(github.ref, 'refs/tags') && 'DEBUG=0 COMPACT=1' || '' }} + ./fbt TARGET_HW=`echo ${TARGET} | sed 's/f//'` --with-updater updater_package ${{ startsWith(github.ref, 'refs/tags') && 'DEBUG=0 COMPACT=1' || '' }} done - name: 'Move upload files' @@ -97,7 +89,7 @@ jobs: set -e for TARGET in ${TARGETS} do - mv dist/${TARGET}/* artifacts/ + mv dist/${TARGET}-*/* artifacts/ done - name: 'Bundle self-update package' @@ -124,7 +116,7 @@ jobs: uses: ./.github/actions/docker with: run: | - make -C assets copro_bundle + ./fbt copro_dist tar czpf artifacts/flipper-z-any-core2_firmware-${{steps.names.outputs.suffix}}.tgz -C assets core2_firmware - name: 'Upload artifacts to update server' @@ -208,14 +200,6 @@ jobs: echo "WORKFLOW_BRANCH_OR_TAG=${BRANCH_OR_TAG}" >> $GITHUB_ENV echo "DIST_SUFFIX=${SUFFIX}" >> $GITHUB_ENV - - name: 'Rebuild Assets' - uses: ./.github/actions/docker - with: - run: | - set -e - make assets_rebuild assets_manifest - git diff --quiet || ( echo "Assets recompilation required."; exit 255 ) - - name: 'Build the firmware in docker' uses: ./.github/actions/docker with: @@ -223,5 +207,5 @@ jobs: set -e for TARGET in ${TARGETS} do - make TARGET=${TARGET} DEBUG=0 COMPACT=1 + ./fbt TARGET_HW=`echo ${TARGET} | sed 's/f//'` --with-updater updater_package DEBUG=0 COMPACT=1 done diff --git a/.github/workflows/lint_c.yml b/.github/workflows/lint_c.yml index 97ef9fb90..f834586d3 100644 --- a/.github/workflows/lint_c.yml +++ b/.github/workflows/lint_c.yml @@ -47,7 +47,7 @@ jobs: id: syntax_check uses: ./.github/actions/docker with: - run: SET_GH_OUTPUT=1 make lint + run: SET_GH_OUTPUT=1 ./fbt lint - name: Report code formatting errors if: failure() && steps.syntax_check.outputs.errors && github.event.pull_request diff --git a/.gitignore b/.gitignore index 6577101d6..2d66413bb 100644 --- a/.gitignore +++ b/.gitignore @@ -39,3 +39,11 @@ dist # kde .directory + +# SCons +.sconsign.dblite +# SCons build dir +build/ + +# Toolchain +toolchain*/ \ No newline at end of file diff --git a/.gitmodules b/.gitmodules index c4649fdca..5846b7059 100644 --- a/.gitmodules +++ b/.gitmodules @@ -22,3 +22,6 @@ [submodule "lib/microtar"] path = lib/microtar url = https://github.com/amachronic/microtar.git +[submodule "lib/scons"] + path = lib/scons + url = https://github.com/SCons/scons.git diff --git a/Brewfile b/Brewfile index 963a687c5..d9ba70e0a 100644 --- a/Brewfile +++ b/Brewfile @@ -1,8 +1,6 @@ cask "gcc-arm-embedded" brew "protobuf" brew "gdb" -brew "heatshrink" brew "open-ocd" brew "clang-format" brew "dfu-util" -brew "imagemagick" diff --git a/CODING_STYLE.md b/CODING_STYLE.md index ccadbe8ed..31426b941 100644 --- a/CODING_STYLE.md +++ b/CODING_STYLE.md @@ -48,7 +48,7 @@ Almost everything in flipper firmware is built around this concept. # C coding style - Tab is 4 spaces -- Use `make format` to reformat source code and check style guide before commit +- Use `fbt format` to reformat source code and check style guide before commit ## Naming diff --git a/Makefile b/Makefile index a48ed6135..ff701a42c 100644 --- a/Makefile +++ b/Makefile @@ -1,157 +1,21 @@ -PROJECT_ROOT := $(abspath $(dir $(abspath $(firstword $(MAKEFILE_LIST))))) - -include $(PROJECT_ROOT)/make/git.mk -include $(PROJECT_ROOT)/assets/copro.mk -include $(PROJECT_ROOT)/assets/splash.mk - -PROJECT_SOURCE_DIRECTORIES := \ - $(PROJECT_ROOT)/applications \ - $(PROJECT_ROOT)/core \ - $(PROJECT_ROOT)/firmware/targets \ - $(PROJECT_ROOT)/lib/app-template \ - $(PROJECT_ROOT)/lib/app-scened-template \ - $(PROJECT_ROOT)/lib/common-api \ - $(PROJECT_ROOT)/lib/drivers \ - $(PROJECT_ROOT)/lib/flipper_file \ - $(PROJECT_ROOT)/lib/infrared \ - $(PROJECT_ROOT)/lib/nfc_protocols \ - $(PROJECT_ROOT)/lib/ST25RFAL002 \ - $(PROJECT_ROOT)/lib/onewire \ - $(PROJECT_ROOT)/lib/qrcode \ - $(PROJECT_ROOT)/lib/subghz \ - $(PROJECT_ROOT)/lib/toolbox \ - $(PROJECT_ROOT)/lib/u8g2 - -NPROCS := 3 -OS := $(shell uname -s) - -ifeq ($(OS), Linux) -NPROCS := $(shell grep -c ^processor /proc/cpuinfo) -else ifeq ($(OS), Darwin) -NPROCS := $(shell sysctl -n hw.ncpu) -endif - -include $(PROJECT_ROOT)/make/defaults.mk - -.PHONY: all -all: firmware_all - @$(PROJECT_ROOT)/scripts/dist.py copy -t $(TARGET) -p firmware -s $(DIST_SUFFIX) - -.PHONY: whole -whole: flash_radio firmware_flash - -.PHONY: clean -clean: firmware_clean updater_clean - @rm -rf $(PROJECT_ROOT)/dist/$(TARGET) - -.PHONY: flash -flash: firmware_flash - -.PHONY: debug -debug: - @$(MAKE) -C firmware -j$(NPROCS) debug - -.PHONY: debug_other -debug_other: - @$(MAKE) -C firmware -j$(NPROCS) debug_other - -.PHONY: blackmagic -blackmagic: - @$(MAKE) -C firmware -j$(NPROCS) blackmagic - -.PHONY: wipe -wipe: - @$(PROJECT_ROOT)/scripts/flash.py wipe - @$(PROJECT_ROOT)/scripts/ob.py set - -.PHONY: firmware_all -firmware_all: - @$(MAKE) -C $(PROJECT_ROOT)/firmware -j$(NPROCS) all - -.PHONY: firmware_clean -firmware_clean: - @$(MAKE) -C $(PROJECT_ROOT)/firmware -j$(NPROCS) clean - -.PHONY: firmware_flash -firmware_flash: -ifeq ($(FORCE), 1) - @rm $(PROJECT_ROOT)/firmware/.obj/f*-firmware/flash || true -endif - @$(MAKE) -C $(PROJECT_ROOT)/firmware -j$(NPROCS) flash - -.PHONY: updater -updater: - @$(MAKE) -C $(PROJECT_ROOT)/firmware -j$(NPROCS) RAM_EXEC=1 all - -.PHONY: updater_clean -updater_clean: - @$(MAKE) -C $(PROJECT_ROOT)/firmware -j$(NPROCS) RAM_EXEC=1 clean - -.PHONY: updater_debug -updater_debug: - @$(MAKE) -C $(PROJECT_ROOT)/firmware -j$(NPROCS) RAM_EXEC=1 debug - -.PHONY: updater_package_bin -updater_package_bin: firmware_all updater - @$(PROJECT_ROOT)/scripts/dist.py copy -t $(TARGET) -p firmware updater -s $(DIST_SUFFIX) --bundlever "$(VERSION_STRING)" - -.PHONY: updater_package -updater_package: firmware_all updater assets_manifest - @$(PROJECT_ROOT)/scripts/dist.py copy \ - -t $(TARGET) -p firmware updater \ - -s $(DIST_SUFFIX) -r $(PROJECT_ROOT)/assets/resources \ - --bundlever "$(VERSION_STRING)" \ - --radio $(COPRO_STACK_BIN_PATH) \ - --radiotype $(COPRO_STACK_TYPE) \ - $(COPRO_DISCLAIMER) \ - --obdata $(PROJECT_ROOT)/scripts/$(COPRO_OB_DATA) \ - --splash $(UPDATER_SPLASH_DIR) - -.PHONY: assets_manifest -assets_manifest: - @$(MAKE) -C $(PROJECT_ROOT)/assets manifest - -.PHONY: assets_rebuild -assets_rebuild: - @$(MAKE) -C $(PROJECT_ROOT)/assets clean all - -.PHONY: flash_radio -flash_radio: - @$(PROJECT_ROOT)/scripts/flash.py core2radio $(COPRO_STACK_BIN_PATH) --addr=$(COPRO_STACK_ADDR) - @$(PROJECT_ROOT)/scripts/ob.py set - -.PHONY: flash_radio_fus -flash_radio_fus: - @echo - @echo "================ DON'T DO IT ================" - @echo "= Flashing FUS is going to erase secure enclave =" - @echo "= You will lose ability to use encrypted assets =" - @echo "= type 'find / -exec rm -rf {} \;' =" - @echo "= In case if you still want to continue =" - @echo "================ JUST DON'T ================" - @echo - -.PHONY: flash_radio_fus_please_i_m_not_going_to_complain -flash_radio_fus_please_i_m_not_going_to_complain: - @$(PROJECT_ROOT)/scripts/flash.py core2fus 0x080EC000 --statement=AGREE_TO_LOSE_FLIPPER_FEATURES_THAT_USE_CRYPTO_ENCLAVE $(COPRO_FIRMWARE_DIR)/stm32wb5x_FUS_fw_for_fus_0_5_3.bin - @$(PROJECT_ROOT)/scripts/flash.py core2fus 0x080EC000 --statement=AGREE_TO_LOSE_FLIPPER_FEATURES_THAT_USE_CRYPTO_ENCLAVE $(COPRO_FIRMWARE_DIR)/stm32wb5x_FUS_fw.bin - @$(PROJECT_ROOT)/scripts/ob.py set - -.PHONY: lint -lint: - @echo "Checking source code formatting" - @$(PROJECT_ROOT)/scripts/lint.py check $(PROJECT_SOURCE_DIRECTORIES) - -.PHONY: format -format: - @echo "Reformating sources code" - @$(PROJECT_ROOT)/scripts/lint.py format $(PROJECT_SOURCE_DIRECTORIES) - -.PHONY: guruguru -guruguru: - @echo "ぐるぐる回る" - @$(PROJECT_ROOT)/scripts/guruguru.py $(PROJECT_ROOT) - -.PHONY: generate_compile_db -generate_compile_db: - @$(MAKE) -C $(PROJECT_ROOT)/firmware -j$(NPROCS) generate_compile_db \ No newline at end of file +$(info +-------------------------------------------------+) +$(info | |) +$(info | Hello, this is Flipper team speaking! |) +$(info | |) +$(info | We've migrated to new build system |) +$(info | It's nice and based on scons |) +$(info | |) +$(info | Crash course: |) +$(info | |) +$(info | `./fbt` |) +$(info | `./fbt flash` |) +$(info | `./fbt debug` |) +$(info | |) +$(info | More details in documentation/fbt.md |) +$(info | |) +$(info | Also Please leave your feedback here: |) +$(info | https://flipp.dev/4RDu |) +$(info | or |) +$(info | https://flipp.dev/2XM8 |) +$(info | |) +$(info +-------------------------------------------------+) \ No newline at end of file diff --git a/ReadMe.md b/ReadMe.md index 9e34148fc..6a3eed377 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -25,6 +25,12 @@ Flipper Zero's firmware consists of two components: They both must be flashed in order described. +## With offline update package + +`./fbt --with-updater updater_package` + +Copy the resulting directory to Flipper's SD card and navigate to `update.fuf` file in Archive app. + ## With STLink ### Core1 Firmware @@ -36,17 +42,7 @@ Prerequisites: - [arm-gcc-none-eabi](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads) - openocd -One liner: `make flash` - -### Core2 flashing procedures - -Prerequisites: - -- Linux / macOS -- Terminal -- STM32_Programmer_CLI (v2.5.0) added to $PATH - -One liner: `make flash_radio` +One liner: `./fbt firmware_flash` ## With USB DFU @@ -56,7 +52,6 @@ One liner: `make flash_radio` - Press and hold `← Left` + `↩ Back` for reset - Release `↩ Back` and keep holding `← Left` until blue LED lights up - Release `← Left` - 3. Run `dfu-util -D full.dfu -a 0` @@ -74,7 +69,7 @@ One liner: `make flash_radio` ## Compile everything ```sh -docker-compose exec dev make +docker-compose exec dev ./fbt ``` Check `dist/` for build outputs. @@ -85,6 +80,8 @@ If compilation fails, make sure all submodules are all initialized. Either clone # Build on Linux/macOS +Check out `documentation/fbt.md` for details on building and flashing firmware. + ## macOS Prerequisites Make sure you have [brew](https://brew.sh) and install all the dependencies: @@ -127,7 +124,7 @@ heatshrink has to be compiled [from sources](https://github.com/atomicobject/hea ## Compile everything ```sh -make +./fbt ``` Check `dist/` for build outputs. @@ -138,7 +135,7 @@ Use **`flipper-z-{target}-full-{suffix}.dfu`** to flash your device. Connect your device via ST-Link and run: ```sh -make whole +./fbt firmware_flash ``` # Links @@ -158,7 +155,6 @@ make whole - `documentation` - Documentation generation system configs and input files - `firmware` - Firmware source code - `lib` - Our and 3rd party libraries, drivers and etc... -- `make` - Make helpers - `scripts` - Supplementary scripts and python libraries home Also pay attention to `ReadMe.md` files inside of those directories. diff --git a/SConstruct b/SConstruct new file mode 100644 index 000000000..a31811aef --- /dev/null +++ b/SConstruct @@ -0,0 +1,150 @@ +# +# Main Fipper Build System entry point +# +# This file is evaluated by scons (the build system) every time fbt is invoked. +# Scons constructs all referenced environments & their targets' dependency +# trees on startup. So, to keep startup time as low as possible, we're hiding +# construction of certain targets behind command-line options. + +import os + +DefaultEnvironment(tools=[]) +# Progress(["OwO\r", "owo\r", "uwu\r", "owo\r"], interval=15) + + +# This environment is created only for loading options & validating file/dir existance +fbt_variables = SConscript("site_scons/commandline.scons") +cmd_environment = Environment(tools=[], variables=fbt_variables) +Help(fbt_variables.GenerateHelpText(cmd_environment)) + + +# Building basic environment - tools, utility methods, cross-compilation +# settings, gcc flags for Cortex-M4, basic builders and more +coreenv = SConscript( + "site_scons/environ.scons", + exports={"VAR_ENV": cmd_environment}, +) +SConscript("site_scons/cc.scons", exports={"ENV": coreenv}) + +# Store root dir in environment for certain tools +coreenv["ROOT_DIR"] = Dir(".") + +# Create a separate "dist" environment and add construction envs to it +distenv = coreenv.Clone( + tools=["fbt_dist", "openocd"], + GDBOPTS="-ex 'target extended-remote | ${OPENOCD} -c \"gdb_port pipe\" ${OPENOCD_OPTS}' " + '-ex "set confirm off" ', + ENV=os.environ, +) + +firmware_out = distenv.AddFwProject( + base_env=coreenv, + fw_type="firmware", + fw_env_key="FW_ENV", +) + + +# If enabled, initialize updater-related targets +if GetOption("fullenv"): + updater_out = distenv.AddFwProject( + base_env=coreenv, + fw_type="updater", + fw_env_key="UPD_ENV", + ) + + # Target for self-update package + dist_arguments = [ + "-r", + '"${ROOT_DIR.abspath}/assets/resources"', + "--bundlever", + '"${UPDATE_VERSION_STRING}"', + "--radio", + '"${ROOT_DIR.abspath}/${COPRO_STACK_BIN_DIR}/${COPRO_STACK_BIN}"', + "--radiotype", + "${COPRO_STACK_TYPE}", + "${COPRO_DISCLAIMER}", + "--obdata", + '"${ROOT_DIR.abspath}/${COPRO_OB_DATA}"', + ] + if distenv["UPDATE_SPLASH"]: + dist_arguments += [ + "--splash", + distenv.subst("assets/slideshow/$UPDATE_SPLASH"), + ] + selfupdate_dist = distenv.DistBuilder( + "selfupdate.pseudo", + (distenv["DIST_DEPENDS"], firmware_out["FW_RESOURCES"]), + DIST_EXTRA=dist_arguments, + ) + distenv.Pseudo("selfupdate.pseudo") + AlwaysBuild(selfupdate_dist) + Alias("updater_package", selfupdate_dist) + + # Updater debug + debug_updater_elf = distenv.AddDebugTarget(updater_out, False) + Alias("updater_debug", debug_updater_elf) + + +# Target for copying & renaming binaries to dist folder +basic_dist = distenv.DistBuilder("dist.pseudo", distenv["DIST_DEPENDS"]) +distenv.Pseudo("dist.pseudo") +AlwaysBuild(basic_dist) +Alias("fw_dist", basic_dist) +Default(basic_dist) + +# Target for bundling core2 package for qFlipper +copro_dist = distenv.CoproBuilder( + Dir("assets/core2_firmware"), + [], +) +AlwaysBuild(copro_dist) +Alias("copro_dist", copro_dist) + + +# Debugging firmware + +debug_fw_elf = distenv.AddDebugTarget(firmware_out) +Alias("debug", debug_fw_elf) + + +# Debug alien elf +debug_other = distenv.GDBPy( + "debugother.pseudo", + None, + GDBPYOPTS= + # '-ex "source ${ROOT_DIR.abspath}/debug/FreeRTOS/FreeRTOS.py" ' + '-ex "source debug/PyCortexMDebug/PyCortexMDebug.py" ' +) +distenv.Pseudo("debugother.pseudo") +AlwaysBuild(debug_other) +Alias("debug_other", debug_other) + + +# Just start OpenOCD +openocd = distenv.OOCDCommand("openocd.pseudo", []) +distenv.Pseudo("openocd.pseudo") +AlwaysBuild(openocd) +Alias("openocd", openocd) + + +# Linter +lint_check = distenv.Command( + "lint.check.pseudo", + [], + "${PYTHON3} scripts/lint.py check $LINT_SOURCES", + LINT_SOURCES=firmware_out["LINT_SOURCES"], +) +distenv.Pseudo("lint.check.pseudo") +AlwaysBuild(lint_check) +Alias("lint", lint_check) + + +lint_format = distenv.Command( + "lint.format.pseudo", + [], + "${PYTHON3} scripts/lint.py format $LINT_SOURCES", + LINT_SOURCES=firmware_out["LINT_SOURCES"], +) +distenv.Pseudo("lint.format.pseudo") +AlwaysBuild(lint_format) +Alias("format", lint_format) diff --git a/applications/ReadMe.md b/applications/ReadMe.md index 2c78dfa26..cb2f5628d 100644 --- a/applications/ReadMe.md +++ b/applications/ReadMe.md @@ -16,7 +16,6 @@ - `ibutton` - iButton application, onewire keys and more - `input` - Input service - `infrared` - Infrared application, controls your IR devices -- `infrared_monitor` - Infrared debug tool - `lfrfid` - LF RFID application - `lfrfid_debug` - LF RFID debug tool - `loader` - Application loader service @@ -36,6 +35,4 @@ - `u2f` - U2F Application - `updater` - Update service & application -- `application.c` - Firmware application list source - `application.h` - Firmware application list header -- `application.mk` - Makefile helper diff --git a/applications/about/about.c b/applications/about/about.c index 7c8a4c697..6f8ebdf34 100644 --- a/applications/about/about.c +++ b/applications/about/about.c @@ -5,6 +5,7 @@ #include #include #include +#include typedef DialogMessageButton (*AboutDialogScreen)(DialogsApp* dialogs, DialogMessage* message); @@ -57,7 +58,7 @@ static DialogMessageButton compliance_screen(DialogsApp* dialogs, DialogMessage* static DialogMessageButton icon1_screen(DialogsApp* dialogs, DialogMessage* message) { DialogMessageButton result; - dialog_message_set_icon(message, &I_Certification1_103x23, 12, 12); + dialog_message_set_icon(message, &I_Certification1_103x56, 13, 0); result = dialog_message_show(dialogs, message); dialog_message_set_icon(message, NULL, 0, 0); @@ -67,7 +68,7 @@ static DialogMessageButton icon1_screen(DialogsApp* dialogs, DialogMessage* mess static DialogMessageButton icon2_screen(DialogsApp* dialogs, DialogMessage* message) { DialogMessageButton result; - dialog_message_set_icon(message, &I_Certification2_119x30, 4, 9); + dialog_message_set_icon(message, &I_Certification2_98x33, 15, 10); result = dialog_message_show(dialogs, message); dialog_message_set_icon(message, NULL, 0, 0); @@ -111,18 +112,23 @@ static DialogMessageButton fw_version_screen(DialogsApp* dialogs, DialogMessage* string_t buffer; string_init(buffer); const Version* ver = furi_hal_version_get_firmware_version(); + const BleGlueC2Info* c2_ver = NULL; +#ifdef SRV_BT + c2_ver = ble_glue_get_c2_info(); +#endif if(!ver) { string_cat_printf(buffer, "No info\n"); } else { string_cat_printf( buffer, - "%s [%s]\n%s%s [%s]\n[%d] %s", + "%s [%s]\n%s%s [%s] %s\n[%d] %s", version_get_version(ver), version_get_builddate(ver), version_get_dirty_flag(ver) ? "[!] " : "", version_get_githash(ver), version_get_gitbranchnum(ver), + c2_ver ? c2_ver->StackTypeString : "", version_get_target(ver), version_get_gitbranch(ver)); } diff --git a/applications/about/application.fam b/applications/about/application.fam new file mode 100644 index 000000000..d97817b43 --- /dev/null +++ b/applications/about/application.fam @@ -0,0 +1,13 @@ +App( + appid="about", + name="About", + apptype=FlipperAppType.SETTINGS, + entry_point="about_settings_app", + cdefines=["APP_ABOUT"], + requires=[ + "gui", + "dialogs", + ], + stack_size=1 * 1024, + order=1000, +) diff --git a/applications/accessor/application.fam b/applications/accessor/application.fam new file mode 100644 index 000000000..8a94049e1 --- /dev/null +++ b/applications/accessor/application.fam @@ -0,0 +1,10 @@ +App( + appid="accessor", + name="Accessor", + apptype=FlipperAppType.DEBUG, + entry_point="accessor_app", + cdefines=["APP_ACCESSOR"], + requires=["gui"], + stack_size=4 * 1024, + order=40, +) diff --git a/applications/applications.c b/applications/applications.c deleted file mode 100644 index 22f9520ec..000000000 --- a/applications/applications.c +++ /dev/null @@ -1,549 +0,0 @@ -#include "applications.h" -#include - -// Services -extern int32_t rpc_srv(void* p); -extern int32_t bt_srv(void* p); -extern int32_t cli_srv(void* p); -extern int32_t dialogs_srv(void* p); -extern int32_t dolphin_srv(void* p); -extern int32_t gui_srv(void* p); -extern int32_t input_srv(void* p); -extern int32_t loader_srv(void* p); -extern int32_t notification_srv(void* p); -extern int32_t power_srv(void* p); -extern int32_t storage_srv(void* p); -extern int32_t desktop_srv(void* p); -extern int32_t updater_srv(void* p); - -// Apps -extern int32_t accessor_app(void* p); -extern int32_t archive_app(void* p); -extern int32_t bad_usb_app(void* p); -extern int32_t u2f_app(void* p); -extern int32_t uart_echo_app(void* p); -extern int32_t blink_test_app(void* p); -extern int32_t bt_debug_app(void* p); -extern int32_t delay_test_app(void* p); -extern int32_t display_test_app(void* p); -extern int32_t gpio_app(void* p); -extern int32_t ibutton_app(void* p); -extern int32_t infrared_app(void* p); -extern int32_t keypad_test_app(void* p); -extern int32_t lfrfid_app(void* p); -extern int32_t lfrfid_debug_app(void* p); -extern int32_t nfc_app(void* p); -extern int32_t passport_app(void* p); -extern int32_t scened_app(void* p); -extern int32_t storage_test_app(void* p); -extern int32_t subghz_app(void* p); -extern int32_t usb_mouse_app(void* p); -extern int32_t usb_test_app(void* p); -extern int32_t vibro_test_app(void* p); -extern int32_t bt_hid_app(void* p); -extern int32_t battery_test_app(void* p); -extern int32_t text_box_test_app(void* p); -extern int32_t file_browser_app(void* p); - -// Plugins -extern int32_t music_player_app(void* p); -extern int32_t snake_game_app(void* p); - -// On system start hooks declaration -extern void bt_on_system_start(); -extern void crypto_on_system_start(); -extern void ibutton_on_system_start(); -extern void infrared_on_system_start(); -extern void lfrfid_on_system_start(); -extern void music_player_on_system_start(); -extern void nfc_on_system_start(); -extern void storage_on_system_start(); -extern void subghz_on_system_start(); -extern void power_on_system_start(); -extern void unit_tests_on_system_start(); -extern void updater_on_system_start(); - -// Settings -extern int32_t notification_settings_app(void* p); -extern int32_t storage_settings_app(void* p); -extern int32_t bt_settings_app(void* p); -extern int32_t desktop_settings_app(void* p); -extern int32_t about_settings_app(void* p); -extern int32_t power_settings_app(void* p); -extern int32_t system_settings_app(void* p); - -const FlipperApplication FLIPPER_SERVICES[] = { -/* Services */ -#ifdef SRV_RPC - {.app = rpc_srv, - .name = "RpcSrv", - .stack_size = 1024 * 4, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef SRV_BT - {.app = bt_srv, - .name = "BtSrv", - .stack_size = 1024, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef SRV_CLI - {.app = cli_srv, - .name = "CliSrv", - .stack_size = 4096, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef SRV_DIALOGS - {.app = dialogs_srv, - .name = "DialogsSrv", - .stack_size = 1024, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef SRV_DOLPHIN - {.app = dolphin_srv, - .name = "DolphinSrv", - .stack_size = 1024, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef SRV_DESKTOP -#ifdef SRV_UPDATER -#error SRV_UPDATER and SRV_DESKTOP are mutually exclusive! -#endif - {.app = desktop_srv, - .name = "DesktopSrv", - .stack_size = 2048, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef SRV_GUI - {.app = gui_srv, - .name = "GuiSrv", - .stack_size = 2048, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef SRV_INPUT - {.app = input_srv, - .name = "InputSrv", - .stack_size = 1024, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef SRV_LOADER - {.app = loader_srv, - .name = "LoaderSrv", - .stack_size = 1024, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef SRV_NOTIFICATION - {.app = notification_srv, - .name = "NotificationSrv", - .stack_size = 1536, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef SRV_POWER - {.app = power_srv, - .name = "PowerSrv", - .stack_size = 1024, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef SRV_STORAGE - {.app = storage_srv, - .name = "StorageSrv", - .stack_size = 3072, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef SRV_UPDATER -#ifdef SRV_DESKTOP -#error SRV_UPDATER and SRV_DESKTOP are mutually exclusive! -#endif - {.app = updater_srv, - .name = "UpdaterSrv", - .stack_size = 2048, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif -}; - -const size_t FLIPPER_SERVICES_COUNT = COUNT_OF(FLIPPER_SERVICES); - -const FlipperApplication FLIPPER_SYSTEM_APPS[] = { -#ifdef APP_UPDATER -#ifdef SRV_UPDATER -#error APP_UPDATER and SRV_UPDATER are mutually exclusive! -#endif - {.app = updater_srv, - .name = "UpdaterApp", - .stack_size = 2048, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif -}; - -const size_t FLIPPER_SYSTEM_APPS_COUNT = COUNT_OF(FLIPPER_SYSTEM_APPS); - -// Main menu APP -const FlipperApplication FLIPPER_APPS[] = { - -#ifdef APP_SUBGHZ - {.app = subghz_app, - .name = "Sub-GHz", - .stack_size = 2048, - .icon = &A_Sub1ghz_14, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef APP_LF_RFID - {.app = lfrfid_app, - .name = "125 kHz RFID", - .stack_size = 2048, - .icon = &A_125khz_14, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef APP_NFC - {.app = nfc_app, - .name = "NFC", - .stack_size = 4096, - .icon = &A_NFC_14, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef APP_INFRARED - {.app = infrared_app, - .name = "Infrared", - .stack_size = 1024 * 3, - .icon = &A_Infrared_14, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef APP_GPIO - {.app = gpio_app, - .name = "GPIO", - .stack_size = 1024, - .icon = &A_GPIO_14, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef APP_IBUTTON - {.app = ibutton_app, - .name = "iButton", - .stack_size = 2048, - .icon = &A_iButton_14, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef APP_BAD_USB - {.app = bad_usb_app, - .name = "Bad USB", - .stack_size = 2048, - .icon = &A_BadUsb_14, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef APP_U2F - {.app = u2f_app, - .name = "U2F", - .stack_size = 2048, - .icon = &A_U2F_14, - .flags = FlipperApplicationFlagDefault}, -#endif - -}; - -const size_t FLIPPER_APPS_COUNT = COUNT_OF(FLIPPER_APPS); - -// On system start hooks -const FlipperOnStartHook FLIPPER_ON_SYSTEM_START[] = { - crypto_on_system_start, - -#ifdef APP_INFRARED - infrared_on_system_start, -#endif - -#ifdef APP_MUSIC_PLAYER - music_player_on_system_start, -#endif - -#ifdef APP_NFC - nfc_on_system_start, -#endif - -#ifdef APP_SUBGHZ - subghz_on_system_start, -#endif - -#ifdef APP_LF_RFID - lfrfid_on_system_start, -#endif - -#ifdef APP_IBUTTON - ibutton_on_system_start, -#endif - -#ifdef SRV_BT - bt_on_system_start, -#endif - -#ifdef SRV_POWER - power_on_system_start, -#endif - -#ifdef SRV_STORAGE - storage_on_system_start, -#endif - -#ifdef APP_UNIT_TESTS - unit_tests_on_system_start, -#endif - -#ifdef APP_UPDATER - updater_on_system_start, -#endif -}; - -const size_t FLIPPER_ON_SYSTEM_START_COUNT = COUNT_OF(FLIPPER_ON_SYSTEM_START); - -// Plugin menu -const FlipperApplication FLIPPER_PLUGINS[] = { -#ifdef APP_BLE_HID - {.app = bt_hid_app, - .name = "Bluetooth Remote", - .stack_size = 1024, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef APP_MUSIC_PLAYER - {.app = music_player_app, - .name = "Music Player", - .stack_size = 2048, - .icon = &A_Plugins_14, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef APP_SNAKE_GAME - {.app = snake_game_app, - .name = "Snake Game", - .stack_size = 1024, - .icon = &A_Plugins_14, - .flags = FlipperApplicationFlagDefault}, -#endif -}; - -const size_t FLIPPER_PLUGINS_COUNT = COUNT_OF(FLIPPER_PLUGINS); - -// Plugin menu -const FlipperApplication FLIPPER_DEBUG_APPS[] = { -#ifdef APP_BLINK - {.app = blink_test_app, - .name = "Blink Test", - .stack_size = 1024, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef APP_VIBRO_TEST - {.app = vibro_test_app, - .name = "Vibro Test", - .stack_size = 1024, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef APP_KEYPAD_TEST - {.app = keypad_test_app, - .name = "Keypad Test", - .stack_size = 1024, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef APP_ACCESSOR - {.app = accessor_app, - .name = "Accessor", - .stack_size = 4096, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef APP_USB_TEST - {.app = usb_test_app, - .name = "USB Test", - .stack_size = 1024, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef APP_USB_MOUSE - {.app = usb_mouse_app, - .name = "USB Mouse Demo", - .stack_size = 1024, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef APP_UART_ECHO - {.app = uart_echo_app, - .name = "Uart Echo", - .stack_size = 2048, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef APP_LF_RFID - {.app = lfrfid_debug_app, - .name = "LF-RFID Debug", - .stack_size = 1024, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef SRV_BT - {.app = bt_debug_app, - .name = "Bluetooth Debug", - .stack_size = 1024, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef APP_UNIT_TESTS - {.app = delay_test_app, - .name = "Delay Test", - .stack_size = 1024, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef APP_DISPLAY_TEST - {.app = display_test_app, - .name = "Display Test", - .stack_size = 1024, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef APP_FILE_BROWSER_TEST - {.app = file_browser_app, - .name = "File Browser test", - .stack_size = 2048, - .icon = &A_BadUsb_14, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef APP_BATTERY_TEST - {.app = battery_test_app, - .name = "Battery Test", - .stack_size = 1024, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef APP_TEXT_BOX_TEST - {.app = text_box_test_app, - .name = "Text Box Test", - .stack_size = 1024, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif -}; - -const size_t FLIPPER_DEBUG_APPS_COUNT = COUNT_OF(FLIPPER_DEBUG_APPS); - -#ifdef APP_ARCHIVE -const FlipperApplication FLIPPER_ARCHIVE = { - .app = archive_app, - .name = "Archive", - .stack_size = 4096, - .icon = &A_FileManager_14, - .flags = FlipperApplicationFlagDefault}; -#endif - -// Settings menu -const FlipperApplication FLIPPER_SETTINGS_APPS[] = { -#ifdef SRV_BT - {.app = bt_settings_app, - .name = "Bluetooth", - .stack_size = 1024, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef SRV_NOTIFICATION - {.app = notification_settings_app, - .name = "LCD and Notifications", - .stack_size = 1024, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef SRV_STORAGE - {.app = storage_settings_app, - .name = "Storage", - .stack_size = 2048, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef SRV_POWER - {.app = power_settings_app, - .name = "Power", - .stack_size = 1024, - .icon = NULL, - .flags = FlipperApplicationFlagInsomniaSafe}, -#endif - -#ifdef SRV_DESKTOP - {.app = desktop_settings_app, - .name = "Desktop", - .stack_size = 1024, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef APP_PASSPORT - {.app = passport_app, - .name = "Passport", - .stack_size = 1024, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef SRV_GUI - {.app = system_settings_app, - .name = "System", - .stack_size = 1024, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif - -#ifdef APP_ABOUT - {.app = about_settings_app, - .name = "About", - .stack_size = 1024, - .icon = NULL, - .flags = FlipperApplicationFlagDefault}, -#endif -}; - -const size_t FLIPPER_SETTINGS_APPS_COUNT = COUNT_OF(FLIPPER_SETTINGS_APPS); diff --git a/applications/applications.mk b/applications/applications.mk deleted file mode 100644 index d2272efb1..000000000 --- a/applications/applications.mk +++ /dev/null @@ -1,353 +0,0 @@ -APP_DIR = $(PROJECT_ROOT)/applications -LIB_DIR = $(PROJECT_ROOT)/lib - -CFLAGS += -I$(APP_DIR) -C_SOURCES += $(shell find $(APP_DIR) -name "*.c") -CPP_SOURCES += $(shell find $(APP_DIR) -name "*.cpp") - -RAM_EXEC ?= 0 -ifeq ($(RAM_EXEC), 1) -APP_RELEASE = 0 -SRV_GUI = 1 -SRV_INPUT = 1 -SRV_NOTIFICATION = 1 -SRV_STORAGE = 1 -SRV_UPDATER = 1 -APP_UPDATER = 0 -endif - -APP_RELEASE ?= 1 -ifeq ($(APP_RELEASE), 1) -# Services -SRV_BT = 1 -SRV_CLI = 1 -SRV_DIALOGS = 1 -SRV_DOLPHIN = 1 -SRV_GUI = 1 -SRV_INPUT = 1 -SRV_LOADER = 1 -SRV_NOTIFICATION = 1 -SRV_POWER = 1 -SRV_RPC = 1 -SRV_STORAGE = 1 - -# Apps -SRV_DESKTOP = 1 -APP_ARCHIVE = 1 -APP_GPIO = 1 -APP_IBUTTON = 1 -APP_INFRARED = 1 -APP_LF_RFID = 1 -APP_NFC = 1 -APP_SUBGHZ = 1 -APP_ABOUT = 1 -APP_PASSPORT = 1 -APP_UPDATER = 1 - -# Plugins -APP_MUSIC_PLAYER = 1 -APP_SNAKE_GAME = 1 - -# Debug -APP_ACCESSOR = 1 -APP_BLINK = 1 -APP_KEYPAD_TEST = 1 -APP_SD_TEST = 1 -APP_VIBRO_TEST = 1 -APP_USB_TEST = 1 -APP_DISPLAY_TEST = 1 -APP_BLE_HID = 1 -APP_USB_MOUSE = 1 -APP_BAD_USB = 1 -APP_U2F = 1 -APP_UART_ECHO = 1 -APP_FILE_BROWSER_TEST = 1 -endif - - -# Applications -# that will be shown in menu -# Prefix with APP_* - -APP_UNIT_TESTS ?= 0 -ifeq ($(APP_UNIT_TESTS), 1) -CFLAGS += -DAPP_UNIT_TESTS -endif - - -APP_ARCHIVE ?= 0 -ifeq ($(APP_ARCHIVE), 1) -CFLAGS += -DAPP_ARCHIVE -SRV_GUI = 1 -endif - - -APP_BLINK ?= 0 -ifeq ($(APP_BLINK), 1) -CFLAGS += -DAPP_BLINK -SRV_GUI = 1 -endif - - -APP_SUBGHZ ?= 0 -ifeq ($(APP_SUBGHZ), 1) -CFLAGS += -DAPP_SUBGHZ -SRV_GUI = 1 -SRV_CLI = 1 -endif - - -APP_ABOUT ?= 0 -ifeq ($(APP_ABOUT), 1) -CFLAGS += -DAPP_ABOUT -SRV_GUI = 1 -endif - - -APP_PASSPORT ?= 0 -ifeq ($(APP_PASSPORT), 1) -CFLAGS += -DAPP_PASSPORT -SRV_GUI = 1 -endif - - -APP_LF_RFID ?= 0 -ifeq ($(APP_LF_RFID), 1) -CFLAGS += -DAPP_LF_RFID -SRV_GUI = 1 -endif - - -APP_NFC ?= 0 -ifeq ($(APP_NFC), 1) -CFLAGS += -DAPP_NFC -SRV_GUI = 1 -endif - - -APP_INFRARED ?= 0 -ifeq ($(APP_INFRARED), 1) -CFLAGS += -DAPP_INFRARED -SRV_GUI = 1 -endif - - -APP_VIBRO_TEST ?= 0 -ifeq ($(APP_VIBRO_TEST), 1) -CFLAGS += -DAPP_VIBRO_TEST -SRV_GUI = 1 -endif - - -APP_USB_TEST ?= 0 -ifeq ($(APP_USB_TEST), 1) -CFLAGS += -DAPP_USB_TEST -SRV_GUI = 1 -endif - -APP_UART_ECHO ?= 0 -ifeq ($(APP_UART_ECHO), 1) -CFLAGS += -DAPP_UART_ECHO -SRV_GUI = 1 -endif - -APP_DISPLAY_TEST ?= 0 -ifeq ($(APP_DISPLAY_TEST), 1) -CFLAGS += -DAPP_DISPLAY_TEST -SRV_GUI = 1 -endif - -APP_TEXT_BOX_TEST ?= 0 -ifeq ($(APP_TEXT_BOX_TEST), 1) -CFLAGS += -DAPP_TEXT_BOX_TEST -SRV_GUI = 1 -endif - -APP_BATTERY_TEST ?= 0 -ifeq ($(APP_BATTERY_TEST), 1) -CFLAGS += -DAPP_BATTERY_TEST -SRV_GUI = 1 -endif - -APP_USB_MOUSE ?= 0 -ifeq ($(APP_USB_MOUSE), 1) -CFLAGS += -DAPP_USB_MOUSE -SRV_GUI = 1 -endif - -APP_BAD_USB ?= 0 -ifeq ($(APP_BAD_USB), 1) -CFLAGS += -DAPP_BAD_USB -SRV_GUI = 1 -endif - -APP_U2F ?= 0 -ifeq ($(APP_U2F), 1) -CFLAGS += -DAPP_U2F -SRV_GUI = 1 -endif - -APP_BLE_HID ?=0 -ifeq ($(APP_BLE_HID), 1) -CFLAGS += -DAPP_BLE_HID -SRV_GUI = 1 -endif - -APP_KEYPAD_TEST ?= 0 -ifeq ($(APP_KEYPAD_TEST), 1) -CFLAGS += -DAPP_KEYPAD_TEST -SRV_GUI = 1 -endif - -APP_FILE_BROWSER_TEST ?= 0 -ifeq ($(APP_FILE_BROWSER_TEST), 1) -CFLAGS += -DAPP_FILE_BROWSER_TEST -SRV_GUI = 1 -endif - -APP_ACCESSOR ?= 0 -ifeq ($(APP_ACCESSOR), 1) -CFLAGS += -DAPP_ACCESSOR -SRV_GUI = 1 -endif - - -APP_GPIO ?= 0 -ifeq ($(APP_GPIO), 1) -CFLAGS += -DAPP_GPIO -SRV_GUI = 1 -endif - - -APP_MUSIC_PLAYER ?= 0 -ifeq ($(APP_MUSIC_PLAYER), 1) -CFLAGS += -DAPP_MUSIC_PLAYER -SRV_GUI = 1 -endif - -APP_SNAKE_GAME ?= 0 -ifeq ($(APP_SNAKE_GAME), 1) -CFLAGS += -DAPP_SNAKE_GAME -SRV_GUI = 1 -endif - -APP_IBUTTON ?= 0 -ifeq ($(APP_IBUTTON), 1) -CFLAGS += -DAPP_IBUTTON -SRV_GUI = 1 -endif - -APP_UPDATER ?= 0 -ifeq ($(APP_UPDATER), 1) -CFLAGS += -DAPP_UPDATER -SRV_GUI = 1 -SRV_STORAGE = 1 -SRV_NOTIFICATION = 1 -SRV_INPUT = 1 -endif - -# Services -# that will start with OS -# Prefix with SRV_* - - -SRV_BT ?= 0 -ifeq ($(SRV_BT), 1) -CFLAGS += -DSRV_BT -SRV_CLI = 1 -endif - - -SRV_DESKTOP ?= 0 -ifeq ($(SRV_DESKTOP), 1) -CFLAGS += -DSRV_DESKTOP -SRV_DOLPHIN = 1 -SRV_STORAGE = 1 -SRV_GUI = 1 -endif - - -SRV_UPDATER ?= 0 -ifeq ($(SRV_UPDATER), 1) -CFLAGS += -DSRV_UPDATER -SRV_STORAGE = 1 -SRV_GUI = 1 -endif - - -SRV_DOLPHIN ?= 0 -ifeq ($(SRV_DOLPHIN), 1) -CFLAGS += -DSRV_DOLPHIN -SRV_DOLPHIN_STATE_DEBUG ?= 0 -ifeq ($(SRV_DOLPHIN_STATE_DEBUG), 1) -CFLAGS += -DSRV_DOLPHIN_STATE_DEBUG -endif -endif - - -SRV_POWER ?= 0 -ifeq ($(SRV_POWER), 1) -CFLAGS += -DSRV_POWER -SRV_GUI = 1 -SRV_CLI = 1 -endif - -SRV_RPC ?= 0 -ifeq ($(SRV_RPC), 1) -CFLAGS += -DSRV_RPC -ifeq ($(SRV_RPC_DEBUG), 1) -CFLAGS += -DSRV_RPC_DEBUG -endif -SRV_CLI = 1 -endif - -SRV_LOADER ?= 0 -ifeq ($(SRV_LOADER), 1) -CFLAGS += -DSRV_LOADER -SRV_GUI = 1 -# Loader autostart hook -LOADER_AUTOSTART ?= "" -ifneq ($(strip $(LOADER_AUTOSTART)), "") -CFLAGS += -DLOADER_AUTOSTART="\"$(LOADER_AUTOSTART)\"" -endif -# Loader autostart hook END -endif - - -SRV_DIALOGS ?= 0 -ifeq ($(SRV_DIALOGS), 1) -CFLAGS += -DSRV_DIALOGS -SRV_GUI = 1 -endif - - -SRV_GUI ?= 0 -ifeq ($(SRV_GUI), 1) -CFLAGS += -DSRV_GUI -SRV_INPUT = 1 -SRV_NOTIFICATION = 1 -endif - - -SRV_INPUT ?= 0 -ifeq ($(SRV_INPUT), 1) -CFLAGS += -DSRV_INPUT -endif - - -SRV_CLI ?= 0 -ifeq ($(SRV_CLI), 1) -CFLAGS += -DSRV_CLI -endif - - -SRV_NOTIFICATION ?= 0 -ifeq ($(SRV_NOTIFICATION), 1) -CFLAGS += -DSRV_NOTIFICATION -endif - - -SRV_STORAGE ?= 0 -ifeq ($(SRV_STORAGE), 1) -CFLAGS += -DSRV_STORAGE -endif diff --git a/applications/archive/application.fam b/applications/archive/application.fam new file mode 100644 index 000000000..f0a980ab0 --- /dev/null +++ b/applications/archive/application.fam @@ -0,0 +1,11 @@ +App( + appid="archive", + name="Archive", + apptype=FlipperAppType.ARCHIVE, + entry_point="archive_app", + cdefines=["APP_ARCHIVE"], + requires=["gui"], + stack_size=4 * 1024, + icon="A_FileManager_14", + order=0, +) diff --git a/applications/bad_usb/application.fam b/applications/bad_usb/application.fam new file mode 100644 index 000000000..4da34f0de --- /dev/null +++ b/applications/bad_usb/application.fam @@ -0,0 +1,14 @@ +App( + appid="bad_usb", + name="Bad USB", + apptype=FlipperAppType.APP, + entry_point="bad_usb_app", + cdefines=["APP_BAD_USB"], + requires=[ + "gui", + "dialogs", + ], + stack_size=2 * 1024, + icon="A_BadUsb_14", + order=70, +) diff --git a/applications/bt/application.fam b/applications/bt/application.fam new file mode 100644 index 000000000..248386ff3 --- /dev/null +++ b/applications/bt/application.fam @@ -0,0 +1,66 @@ +App( + appid="bt", + name="BtSrv", + apptype=FlipperAppType.SERVICE, + entry_point="bt_srv", + cdefines=["SRV_BT"], + requires=[ + "cli", + "dialogs", + ], + provides=[ + "bt_start", + "bt_settings", + "bt_debug", + ], + stack_size=1 * 1024, + order=20, +) + +App( + appid="bt_start", + apptype=FlipperAppType.STARTUP, + entry_point="bt_on_system_start", + order=70, +) + +App( + appid="bt_settings", + name="Bluetooth", + apptype=FlipperAppType.SETTINGS, + entry_point="bt_settings_app", + stack_size=1 * 1024, + requires=[ + "bt", + "gui", + ], + order=10, +) + +App( + appid="bt_debug", + name="Bluetooth Debug", + apptype=FlipperAppType.DEBUG, + entry_point="bt_debug_app", + stack_size=1 * 1024, + requires=[ + "bt", + "gui", + "dialogs", + ], + order=110, +) + +App( + appid="bt_hid", + name="Bluetooth Remote", + apptype=FlipperAppType.PLUGIN, + entry_point="bt_hid_app", + stack_size=1 * 1024, + cdefines=["APP_BLE_HID"], + requires=[ + "bt", + "gui", + ], + order=10, +) diff --git a/applications/cli/application.fam b/applications/cli/application.fam new file mode 100644 index 000000000..73c70aa44 --- /dev/null +++ b/applications/cli/application.fam @@ -0,0 +1,9 @@ +App( + appid="cli", + name="CliSrv", + apptype=FlipperAppType.SERVICE, + entry_point="cli_srv", + cdefines=["SRV_CLI"], + stack_size=4 * 1024, + order=30, +) diff --git a/applications/crypto/application.fam b/applications/crypto/application.fam new file mode 100644 index 000000000..7771c5ed2 --- /dev/null +++ b/applications/crypto/application.fam @@ -0,0 +1,6 @@ +App( + appid="crypto_start", + apptype=FlipperAppType.STARTUP, + entry_point="crypto_on_system_start", + order=10, +) diff --git a/applications/debug_tools/application.fam b/applications/debug_tools/application.fam new file mode 100644 index 000000000..8cb495b0c --- /dev/null +++ b/applications/debug_tools/application.fam @@ -0,0 +1,115 @@ +App( + appid="debug_apps", + name="Basic debug apps bundle", + apptype=FlipperAppType.METAPACKAGE, + provides=[ + "blink_test", + "vibro_test", + "keypad_test", + "usb_test", + "usb_mouse", + "uart_echo", + "display_test", + "text_box_test", + "file_browser_test", + ], +) + +App( + appid="blink_test", + name="Blink Test", + apptype=FlipperAppType.DEBUG, + entry_point="blink_test_app", + cdefines=["APP_BLINK"], + requires=["gui"], + stack_size=1 * 1024, + order=10, +) + +App( + appid="vibro_test", + name="Vibro Test", + apptype=FlipperAppType.DEBUG, + entry_point="vibro_test_app", + cdefines=["APP_VIBRO_TEST"], + requires=["gui"], + stack_size=1 * 1024, + order=20, +) + +App( + appid="keypad_test", + name="Keypad Test", + apptype=FlipperAppType.DEBUG, + entry_point="keypad_test_app", + cdefines=["APP_KEYPAD_TEST"], + requires=["gui"], + stack_size=1 * 1024, + order=30, +) + +App( + appid="usb_test", + name="USB Test", + apptype=FlipperAppType.DEBUG, + entry_point="usb_test_app", + cdefines=["APP_USB_TEST"], + requires=["gui"], + stack_size=1 * 1024, + order=50, +) + +App( + appid="usb_mouse", + name="USB Mouse Demo", + apptype=FlipperAppType.DEBUG, + entry_point="usb_mouse_app", + cdefines=["APP_USB_MOUSE"], + requires=["gui"], + stack_size=1 * 1024, + order=60, +) + +App( + appid="uart_echo", + name="UART Echo", + apptype=FlipperAppType.DEBUG, + entry_point="uart_echo_app", + cdefines=["APP_UART_ECHO"], + requires=["gui"], + stack_size=2 * 1024, + order=70, +) + +App( + appid="display_test", + name="Display Test", + apptype=FlipperAppType.DEBUG, + entry_point="display_test_app", + cdefines=["APP_DISPLAY_TEST"], + requires=["gui"], + stack_size=1 * 1024, + order=120, +) + +App( + appid="text_box_test", + name="Text Box Test", + apptype=FlipperAppType.DEBUG, + entry_point="text_box_test_app", + cdefines=["APP_TEXT_BOX_TEST"], + requires=["gui"], + stack_size=1 * 1024, + order=140, +) + +App( + appid="file_browser_test", + name="File Browser Test", + apptype=FlipperAppType.DEBUG, + entry_point="file_browser_app", + cdefines=["APP_FILE_BROWSER_TEST"], + requires=["gui"], + stack_size=2 * 1024, + order=150, +) diff --git a/applications/desktop/application.fam b/applications/desktop/application.fam new file mode 100644 index 000000000..5f3dcdfda --- /dev/null +++ b/applications/desktop/application.fam @@ -0,0 +1,30 @@ +App( + appid="desktop", + name="DesktopSrv", + apptype=FlipperAppType.SERVICE, + entry_point="desktop_srv", + cdefines=["SRV_DESKTOP"], + requires=[ + "gui", + "dolphin", + "storage", + "input", + ], + provides=["desktop_settings"], + conflicts=["updater"], + stack_size=2 * 1024, + order=60, +) + +App( + appid="desktop_settings", + name="Desktop", + apptype=FlipperAppType.SETTINGS, + entry_point="desktop_settings_app", + requires=[ + "desktop", + "gui", + ], + stack_size=1 * 1024, + order=50, +) diff --git a/applications/desktop/views/desktop_view_debug.c b/applications/desktop/views/desktop_view_debug.c index 6ac62b49b..3a6c87f13 100644 --- a/applications/desktop/views/desktop_view_debug.c +++ b/applications/desktop/views/desktop_view_debug.c @@ -46,7 +46,10 @@ void desktop_debug_render(Canvas* canvas, void* model) { canvas_draw_str(canvas, 5, 19 + STATUS_BAR_Y_SHIFT, buffer); ver = furi_hal_version_get_firmware_version(); - + const BleGlueC2Info* c2_ver = NULL; +#ifdef SRV_BT + c2_ver = ble_glue_get_c2_info(); +#endif if(!ver) { canvas_draw_str(canvas, 5, 29 + STATUS_BAR_Y_SHIFT, "No info"); return; @@ -63,10 +66,11 @@ void desktop_debug_render(Canvas* canvas, void* model) { snprintf( buffer, sizeof(buffer), - "%s%s [%s]", + "%s%s [%s] %s", version_get_dirty_flag(ver) ? "[!] " : "", version_get_githash(ver), - version_get_gitbranchnum(ver)); + version_get_gitbranchnum(ver), + c2_ver ? c2_ver->StackTypeString : ""); canvas_draw_str(canvas, 5, 39 + STATUS_BAR_Y_SHIFT, buffer); snprintf( diff --git a/applications/dialogs/application.fam b/applications/dialogs/application.fam new file mode 100644 index 000000000..0a18c79a3 --- /dev/null +++ b/applications/dialogs/application.fam @@ -0,0 +1,10 @@ +App( + appid="dialogs", + name="DialogsSrv", + apptype=FlipperAppType.SERVICE, + entry_point="dialogs_srv", + cdefines=["SRV_DIALOGS"], + requires=["gui"], + stack_size=1 * 1024, + order=40, +) diff --git a/applications/dolphin/application.fam b/applications/dolphin/application.fam new file mode 100644 index 000000000..1ee0e3cfe --- /dev/null +++ b/applications/dolphin/application.fam @@ -0,0 +1,23 @@ +App( + appid="dolphin", + name="DolphinSrv", + apptype=FlipperAppType.SERVICE, + entry_point="dolphin_srv", + cdefines=["SRV_DOLPHIN"], + stack_size=1 * 1024, + order=50, +) + +App( + appid="passport", + name="Passport", + apptype=FlipperAppType.SETTINGS, + entry_point="passport_app", + cdefines=["APP_PASSPORT"], + requires=[ + "gui", + "dolphin", + ], + stack_size=1 * 1024, + order=60, +) diff --git a/applications/extapps.scons b/applications/extapps.scons new file mode 100644 index 000000000..7b1cae7d2 --- /dev/null +++ b/applications/extapps.scons @@ -0,0 +1,57 @@ +Import("ENV") + + +from fbt.appmanifest import FlipperAppType + + +appenv = ENV.Clone(tools=["fbt_extapps"]) + +appenv.Replace( + LINKER_SCRIPT="application-ext", + STRIPFLAGS=[ + "--strip-debug", + "--strip-unneeded", + "-d", + "-g", + "-S", + ], +) + +appenv.AppendUnique( + CCFLAGS=[ + "-Os", + "-ggdb3", + "-mword-relocations", + "-mlong-calls", + "-fno-common", + "-nostdlib", + "-fvisibility=hidden", + ], + LINKFLAGS=[ + "-r", + "-s", + # "-Bsymbolic", + "-nostartfiles", + "-mlong-calls", + "-fno-common", + "-nostdlib", + "-Wl,--gc-sections", + "-Wl,--no-export-dynamic", + "-fvisibility=hidden", + "-Wl,-e${APP_ENTRY}", + ], +) + + +extapps = [] +for apptype in (FlipperAppType.PLUGIN, FlipperAppType.EXTERNAL): + for app in appenv["APPBUILD"].get_apps_of_type(apptype): + extapps.append(appenv.BuildAppElf(app)) + +# Ugly access to global option +if extra_app_list := GetOption("extra_ext_apps"): + for extra_app in extra_app_list.split(","): + extapps.append(appenv.BuildAppElf(appenv["APPMGR"].get(extra_app))) + +Alias(appenv["FIRMWARE_BUILD_CFG"] + "_extapps", extapps) +Return("extapps") diff --git a/applications/gpio/application.fam b/applications/gpio/application.fam new file mode 100644 index 000000000..64f8db5b0 --- /dev/null +++ b/applications/gpio/application.fam @@ -0,0 +1,11 @@ +App( + appid="gpio", + name="GPIO", + apptype=FlipperAppType.APP, + entry_point="gpio_app", + cdefines=["APP_GPIO"], + requires=["gui"], + stack_size=1 * 1024, + icon="A_GPIO_14", + order=50, +) diff --git a/applications/gui/application.fam b/applications/gui/application.fam new file mode 100644 index 000000000..0116f5b88 --- /dev/null +++ b/applications/gui/application.fam @@ -0,0 +1,13 @@ +App( + appid="gui", + name="GuiSrv", + apptype=FlipperAppType.SERVICE, + entry_point="gui_srv", + cdefines=["SRV_GUI"], + requires=[ + "input", + "notification", + ], + stack_size=2 * 1024, + order=70, +) diff --git a/applications/ibutton/application.fam b/applications/ibutton/application.fam new file mode 100644 index 000000000..0bc6f8a9b --- /dev/null +++ b/applications/ibutton/application.fam @@ -0,0 +1,23 @@ +App( + appid="ibutton", + name="iButton", + apptype=FlipperAppType.APP, + entry_point="ibutton_app", + cdefines=["APP_IBUTTON"], + requires=[ + "gui", + "dialogs", + ], + provides=["ibutton_start"], + icon="A_iButton_14", + stack_size=2 * 1024, + order=60, +) + +App( + appid="ibutton_start", + apptype=FlipperAppType.STARTUP, + entry_point="ibutton_on_system_start", + requires=["ibutton"], + order=60, +) diff --git a/applications/infrared/application.fam b/applications/infrared/application.fam new file mode 100644 index 000000000..6f76ed429 --- /dev/null +++ b/applications/infrared/application.fam @@ -0,0 +1,23 @@ +App( + appid="infrared", + name="Infrared", + apptype=FlipperAppType.APP, + entry_point="infrared_app", + cdefines=["APP_INFRARED"], + requires=[ + "gui", + "dialogs", + ], + provides=["infrared_start"], + icon="A_Infrared_14", + stack_size=3 * 1024, + order=40, +) + +App( + appid="infrared_start", + apptype=FlipperAppType.STARTUP, + entry_point="infrared_on_system_start", + requires=["infrared"], + order=20, +) diff --git a/applications/input/application.fam b/applications/input/application.fam new file mode 100644 index 000000000..545630e6e --- /dev/null +++ b/applications/input/application.fam @@ -0,0 +1,9 @@ +App( + appid="input", + name="InputSrv", + apptype=FlipperAppType.SERVICE, + entry_point="input_srv", + cdefines=["SRV_INPUT"], + stack_size=1 * 1024, + order=80, +) diff --git a/applications/lfrfid/application.fam b/applications/lfrfid/application.fam new file mode 100644 index 000000000..8722bb4f8 --- /dev/null +++ b/applications/lfrfid/application.fam @@ -0,0 +1,26 @@ +App( + appid="lfrfid", + name="125 kHz RFID", + apptype=FlipperAppType.APP, + entry_point="lfrfid_app", + cdefines=["APP_LF_RFID"], + requires=[ + "gui", + "dialogs", + ], + provides=[ + "lfrfid_start", + "lfrfid_debug", + ], + icon="A_125khz_14", + stack_size=2 * 1024, + order=20, +) + +App( + appid="lfrfid_start", + apptype=FlipperAppType.STARTUP, + entry_point="lfrfid_on_system_start", + requires=["lfrfid"], + order=50, +) diff --git a/applications/lfrfid_debug/application.fam b/applications/lfrfid_debug/application.fam new file mode 100644 index 000000000..910f65cf3 --- /dev/null +++ b/applications/lfrfid_debug/application.fam @@ -0,0 +1,12 @@ +App( + appid="lfrfid_debug", + name="LF-RFID Debug", + apptype=FlipperAppType.DEBUG, + entry_point="lfrfid_debug_app", + requires=[ + "gui", + "lfrfid", + ], + stack_size=1 * 1024, + order=100, +) diff --git a/applications/loader/application.fam b/applications/loader/application.fam new file mode 100644 index 000000000..16351f8d1 --- /dev/null +++ b/applications/loader/application.fam @@ -0,0 +1,10 @@ +App( + appid="loader", + name="LoaderSrv", + apptype=FlipperAppType.SERVICE, + entry_point="loader_srv", + cdefines=["SRV_LOADER"], + requires=["gui"], + stack_size=1 * 1024, + order=90, +) diff --git a/applications/meta/application.fam b/applications/meta/application.fam new file mode 100644 index 000000000..a447b94ae --- /dev/null +++ b/applications/meta/application.fam @@ -0,0 +1,41 @@ +App( + appid="basic_services", + name="Basic services", + apptype=FlipperAppType.METAPACKAGE, + provides=[ + "rpc", + "bt", + "desktop", + "loader", + "power", + ], +) + + +App( + appid="basic_apps", + name="Basic applications for main menu", + apptype=FlipperAppType.METAPACKAGE, + provides=[ + "gpio", + "ibutton", + "infrared", + "lfrfid", + "nfc", + "subghz", + "bad_usb", + "u2f", + ], +) + + +App( + appid="basic_plugins", + name="Basic applications for plug-in menu", + apptype=FlipperAppType.METAPACKAGE, + provides=[ + "music_player", + "snake_game", + "bt_hid", + ], +) diff --git a/applications/music_player/application.fam b/applications/music_player/application.fam new file mode 100644 index 000000000..70e297432 --- /dev/null +++ b/applications/music_player/application.fam @@ -0,0 +1,22 @@ +App( + appid="music_player", + name="Music Player", + apptype=FlipperAppType.PLUGIN, + entry_point="music_player_app", + cdefines=["APP_MUSIC_PLAYER"], + requires=[ + "gui", + "dialogs", + ], + provides=["music_player_start"], + stack_size=2 * 1024, + order=20, +) + +App( + appid="music_player_start", + apptype=FlipperAppType.STARTUP, + entry_point="music_player_on_system_start", + requires=["music_player"], + order=30, +) diff --git a/applications/nfc/application.fam b/applications/nfc/application.fam new file mode 100644 index 000000000..f43ed3144 --- /dev/null +++ b/applications/nfc/application.fam @@ -0,0 +1,23 @@ +App( + appid="nfc", + name="NFC", + apptype=FlipperAppType.APP, + entry_point="nfc_app", + cdefines=["APP_NFC"], + requires=[ + "gui", + "dialogs", + ], + provides=["nfc_start"], + icon="A_NFC_14", + stack_size=4 * 1024, + order=30, +) + +App( + appid="nfc_start", + apptype=FlipperAppType.STARTUP, + entry_point="nfc_on_system_start", + requires=["nfc"], + order=30, +) diff --git a/applications/notification/application.fam b/applications/notification/application.fam new file mode 100644 index 000000000..be730d510 --- /dev/null +++ b/applications/notification/application.fam @@ -0,0 +1,21 @@ +App( + appid="notification", + name="NotificationSrv", + apptype=FlipperAppType.SERVICE, + entry_point="notification_srv", + cdefines=["SRV_NOTIFICATION"], + requires=["input"], + provides=["notification_settings"], + stack_size=int(1.5 * 1024), + order=100, +) + +App( + appid="notification_settings", + name="LCD and Notifications", + apptype=FlipperAppType.SETTINGS, + entry_point="notification_settings_app", + requires=["notification"], + stack_size=1 * 1024, + order=20, +) diff --git a/applications/power/application.fam b/applications/power/application.fam new file mode 100644 index 000000000..1e503749a --- /dev/null +++ b/applications/power/application.fam @@ -0,0 +1,53 @@ +App( + appid="power", + name="PowerSrv", + apptype=FlipperAppType.SERVICE, + entry_point="power_srv", + cdefines=["SRV_POWER"], + requires=[ + "gui", + "cli", + ], + provides=[ + "power_settings", + "power_start", + ], + stack_size=1 * 1024, + order=110, +) + +App( + appid="power_settings", + name="Power", + apptype=FlipperAppType.SETTINGS, + entry_point="power_settings_app", + requires=[ + "gui", + "power", + ], + flags=["InsomniaSafe"], + stack_size=1 * 1024, + order=40, +) + +App( + appid="power_start", + apptype=FlipperAppType.STARTUP, + entry_point="power_on_system_start", + requires=["power"], + order=80, +) + +App( + appid="battery_test", + name="Battery Test", + apptype=FlipperAppType.DEBUG, + entry_point="battery_test_app", + cdefines=["APP_BATTERY_TEST"], + requires=[ + "gui", + "power", + ], + stack_size=1 * 1024, + order=130, +) diff --git a/applications/rpc/application.fam b/applications/rpc/application.fam new file mode 100644 index 000000000..683396e32 --- /dev/null +++ b/applications/rpc/application.fam @@ -0,0 +1,12 @@ +App( + appid="rpc", + name="RpcSrv", + apptype=FlipperAppType.SERVICE, + entry_point="rpc_srv", + cdefines=["SRV_RPC"], + requires=[ + "cli", + ], + stack_size=4 * 1024, + order=10, +) diff --git a/applications/rpc/rpc_storage.c b/applications/rpc/rpc_storage.c index 624d7c7b8..336346b5e 100644 --- a/applications/rpc/rpc_storage.c +++ b/applications/rpc/rpc_storage.c @@ -10,6 +10,7 @@ #include "storage/storage.h" #include #include +#include #include #define TAG "RpcStorage" @@ -100,35 +101,6 @@ static PB_CommandStatus rpc_system_storage_get_file_error(File* file) { return rpc_system_storage_get_error(storage_file_get_error(file)); } -static bool rpc_system_storage_is_filename_correct(const char* path) { - const char* name_pos = strrchr(path, '/'); - if(name_pos == NULL) { - name_pos = path; - } else { - name_pos++; - } - - while(*name_pos != '\0') { - if((*name_pos >= '0') && (*name_pos <= '9')) { - name_pos++; - continue; - } else if((*name_pos >= 'A') && (*name_pos <= 'Z')) { - name_pos++; - continue; - } else if((*name_pos >= 'a') && (*name_pos <= 'z')) { - name_pos++; - continue; - } else if(strchr(".!#\\$%&'()-@^_`{}~", *name_pos) != NULL) { - name_pos++; - continue; - } - - return false; - } - - return true; -} - static void rpc_system_storage_info_process(const PB_Main* request, void* context) { furi_assert(request); furi_assert(context); @@ -274,7 +246,7 @@ static void rpc_system_storage_list_process(const PB_Main* request, void* contex FileInfo fileinfo; char* name = malloc(MAX_NAME_LENGTH + 1); if(storage_dir_read(dir, &fileinfo, name, MAX_NAME_LENGTH)) { - if(rpc_system_storage_is_filename_correct(name)) { + if(path_contains_only_ascii(name)) { if(i == COUNT_OF(list->file)) { list->file_count = i; response.has_next = true; @@ -379,7 +351,7 @@ static void rpc_system_storage_write_process(const PB_Main* request, void* conte bool result = true; - if(!rpc_system_storage_is_filename_correct(request->content.storage_write_request.path)) { + if(!path_contains_only_ascii(request->content.storage_write_request.path)) { rpc_storage->current_command_id = request->command_id; rpc_send_and_release_empty( session, rpc_storage->current_command_id, PB_CommandStatus_ERROR_STORAGE_INVALID_NAME); @@ -433,7 +405,7 @@ static bool rpc_system_storage_is_dir_is_empty(Storage* fs_api, const char* path if(storage_dir_open(dir, path)) { char* name = malloc(MAX_NAME_LENGTH); while(storage_dir_read(dir, &fileinfo, name, MAX_NAME_LENGTH)) { - if(rpc_system_storage_is_filename_correct(name)) { + if(path_contains_only_ascii(name)) { is_dir_is_empty = false; break; } @@ -505,7 +477,7 @@ static void rpc_system_storage_mkdir_process(const PB_Main* request, void* conte Storage* fs_api = furi_record_open("storage"); char* path = request->content.storage_mkdir_request.path; if(path) { - if(rpc_system_storage_is_filename_correct(path)) { + if(path_contains_only_ascii(path)) { FS_Error error = storage_common_mkdir(fs_api, path); status = rpc_system_storage_get_error(error); } else { @@ -602,7 +574,7 @@ static void rpc_system_storage_rename_process(const PB_Main* request, void* cont Storage* fs_api = furi_record_open("storage"); - if(rpc_system_storage_is_filename_correct(request->content.storage_rename_request.new_path)) { + if(path_contains_only_ascii(request->content.storage_rename_request.new_path)) { FS_Error error = storage_common_rename( fs_api, request->content.storage_rename_request.old_path, diff --git a/applications/snake_game/application.fam b/applications/snake_game/application.fam new file mode 100644 index 000000000..5d6ad5276 --- /dev/null +++ b/applications/snake_game/application.fam @@ -0,0 +1,11 @@ +App( + appid="snake_game", + name="Snake Game", + apptype=FlipperAppType.PLUGIN, + entry_point="snake_game_app", + cdefines=["APP_SNAKE_GAME"], + requires=["gui"], + stack_size=1 * 1024, + icon="A_Plugins_14", + order=30, +) diff --git a/applications/storage/application.fam b/applications/storage/application.fam new file mode 100644 index 000000000..21089635b --- /dev/null +++ b/applications/storage/application.fam @@ -0,0 +1,19 @@ +App( + appid="storage", + name="StorageSrv", + apptype=FlipperAppType.SERVICE, + entry_point="storage_srv", + cdefines=["SRV_STORAGE"], + requires=["storage_settings"], + provides=["storage_start"], + stack_size=3 * 1024, + order=120, +) + +App( + appid="storage_start", + apptype=FlipperAppType.STARTUP, + entry_point="storage_on_system_start", + requires=["storage"], + order=90, +) diff --git a/applications/storage_settings/application.fam b/applications/storage_settings/application.fam new file mode 100644 index 000000000..1ba0ccd44 --- /dev/null +++ b/applications/storage_settings/application.fam @@ -0,0 +1,9 @@ +App( + appid="storage_settings", + name="Storage", + apptype=FlipperAppType.SETTINGS, + entry_point="storage_settings_app", + requires=["storage"], + stack_size=2 * 1024, + order=30, +) diff --git a/applications/subghz/application.fam b/applications/subghz/application.fam new file mode 100644 index 000000000..7d31ecae5 --- /dev/null +++ b/applications/subghz/application.fam @@ -0,0 +1,24 @@ +App( + appid="subghz", + name="Sub-GHz", + apptype=FlipperAppType.APP, + entry_point="subghz_app", + cdefines=["APP_SUBGHZ"], + requires=[ + "gui", + "cli", + "dialogs", + ], + provides=["subghz_start"], + icon="A_Sub1ghz_14", + stack_size=2 * 1024, + order=10, +) + +App( + appid="subghz_start", + apptype=FlipperAppType.STARTUP, + entry_point="subghz_on_system_start", + requires=["subghz"], + order=40, +) diff --git a/applications/subghz/scenes/subghz_scene_save_success.c b/applications/subghz/scenes/subghz_scene_save_success.c index 53cd93ce1..3d5c16ca3 100644 --- a/applications/subghz/scenes/subghz_scene_save_success.c +++ b/applications/subghz/scenes/subghz_scene_save_success.c @@ -1,6 +1,6 @@ #include "../subghz_i.h" #include "../helpers/subghz_custom_event.h" -#include "dolphin/helpers/dolphin_deed.h" +#include #include void subghz_scene_save_success_popup_callback(void* context) { diff --git a/applications/system/application.fam b/applications/system/application.fam new file mode 100644 index 000000000..0fc456b2f --- /dev/null +++ b/applications/system/application.fam @@ -0,0 +1,9 @@ +App( + appid="system_settings", + name="System", + apptype=FlipperAppType.SETTINGS, + entry_point="system_settings_app", + requires=["gui"], + stack_size=1 * 1024, + order=70, +) diff --git a/applications/u2f/application.fam b/applications/u2f/application.fam new file mode 100644 index 000000000..6b32e0225 --- /dev/null +++ b/applications/u2f/application.fam @@ -0,0 +1,14 @@ +App( + appid="u2f", + name="U2F", + apptype=FlipperAppType.APP, + entry_point="u2f_app", + cdefines=["APP_U2F"], + requires=[ + "gui", + "dialogs", + ], + stack_size=2 * 1024, + icon="A_U2F_14", + order=80, +) diff --git a/applications/unit_tests/application.fam b/applications/unit_tests/application.fam new file mode 100644 index 000000000..54e6feaee --- /dev/null +++ b/applications/unit_tests/application.fam @@ -0,0 +1,18 @@ +App( + appid="unit_tests", + apptype=FlipperAppType.STARTUP, + entry_point="unit_tests_on_system_start", + cdefines=["APP_UNIT_TESTS"], + provides=["delay_test"], + order=100, +) + +App( + appid="delay_test", + name="Delay Test", + apptype=FlipperAppType.DEBUG, + entry_point="delay_test_app", + stack_size=1 * 1024, + requires=["unit_tests"], + order=110, +) diff --git a/applications/unit_tests/rpc/rpc_test.c b/applications/unit_tests/rpc/rpc_test.c index 2f97343e9..ca894cb45 100644 --- a/applications/unit_tests/rpc/rpc_test.c +++ b/applications/unit_tests/rpc/rpc_test.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -495,7 +496,7 @@ static void test_rpc_compare_messages(PB_Main* result, PB_Main* expected) { case PB_Main_storage_list_response_tag: { size_t expected_msg_files = expected->content.storage_list_response.file_count; size_t result_msg_files = result->content.storage_list_response.file_count; - mu_check(result_msg_files == expected_msg_files); + mu_assert_int_eq(expected_msg_files, result_msg_files); for(size_t i = 0; i < expected_msg_files; ++i) { PB_Storage_File* result_msg_file = &result->content.storage_list_response.file[i]; PB_Storage_File* expected_msg_file = &expected->content.storage_list_response.file[i]; @@ -603,13 +604,17 @@ static void test_rpc_storage_list_create_expected_list( MsgList_push_back(msg_list, response); i = 0; } - list->file[i].type = (fileinfo.flags & FSF_DIRECTORY) ? PB_Storage_File_FileType_DIR : - PB_Storage_File_FileType_FILE; - list->file[i].size = fileinfo.size; - list->file[i].data = NULL; - /* memory free inside rpc_encode_and_send() -> pb_release() */ - list->file[i].name = name; - ++i; + + if(path_contains_only_ascii(name)) { + list->file[i].type = (fileinfo.flags & FSF_DIRECTORY) ? + PB_Storage_File_FileType_DIR : + PB_Storage_File_FileType_FILE; + list->file[i].size = fileinfo.size; + list->file[i].data = NULL; + /* memory free inside rpc_encode_and_send() -> pb_release() */ + list->file[i].name = name; + ++i; + } } else { finish = true; free(name); diff --git a/applications/unit_tests/test_index.c b/applications/unit_tests/test_index.c index a1acbed41..d8a8174c4 100644 --- a/applications/unit_tests/test_index.c +++ b/applications/unit_tests/test_index.c @@ -32,7 +32,7 @@ void minunit_print_progress(void) { } void minunit_print_fail(const char* str) { - printf(FURI_LOG_CLR_E "%s\n" FURI_LOG_CLR_RESET, str); + printf(FURI_LOG_CLR_E "%s\r\n" FURI_LOG_CLR_RESET, str); } void unit_tests_cli(Cli* cli, string_t args, void* context) { diff --git a/applications/updater/application.fam b/applications/updater/application.fam new file mode 100644 index 000000000..a693fa6f5 --- /dev/null +++ b/applications/updater/application.fam @@ -0,0 +1,39 @@ +App( + appid="updater", + name="UpdaterSrv", + apptype=FlipperAppType.SERVICE, + cdefines=["SRV_UPDATER"], + requires=[ + "gui", + "storage", + ], + conflicts=["desktop"], + entry_point="updater_srv", + stack_size=2 * 1024, + order=130, +) + +App( + appid="updater_app", + name="UpdaterApp", + apptype=FlipperAppType.SYSTEM, + cdefines=["APP_UPDATER"], + requires=[ + "gui", + "storage", + "bt", + ], + conflicts=["updater"], + provides=["updater_start"], + entry_point="updater_srv", + stack_size=2 * 1024, + order=10, +) + +App( + appid="updater_start", + apptype=FlipperAppType.STARTUP, + entry_point="updater_on_system_start", + requires=["updater_app"], + order=110, +) diff --git a/assets/Makefile b/assets/Makefile deleted file mode 100644 index 2c743601c..000000000 --- a/assets/Makefile +++ /dev/null @@ -1,48 +0,0 @@ -PROJECT_ROOT = $(abspath $(dir $(abspath $(firstword $(MAKEFILE_LIST))))..) - -include $(PROJECT_ROOT)/assets/assets.mk -include $(PROJECT_ROOT)/assets/copro.mk - -.PHONY: all -all: icons protobuf dolphin manifest - -$(ASSETS): $(ASSETS_SOURCES) $(ASSETS_COMPILER) - @echo "\tASSETS\t\t" $@ - @$(ASSETS_COMPILER) icons "$(ASSETS_SOURCE_DIR)" "$(ASSETS_COMPILED_DIR)" - -.PHONY: icons -icons: $(ASSETS) - -$(PROTOBUF) &: $(PROTOBUF_SOURCES) $(PROTOBUF_COMPILER) - @echo "\tPROTOBUF\t" $(PROTOBUF_FILENAMES) - @$(PROTOBUF_COMPILER) -q -I$(PROTOBUF_SOURCE_DIR) -D$(PROTOBUF_COMPILED_DIR) $(PROTOBUF_SOURCES) - @printf "#pragma once\n#define PROTOBUF_MAJOR_VERSION $(PROTOBUF_MAJOR_VERSION)\n#define PROTOBUF_MINOR_VERSION $(PROTOBUF_MINOR_VERSION)\n" > $(PROTOBUF_COMPILED_DIR)/protobuf_version.h - -.PHONY: protobuf -protobuf: $(PROTOBUF) - -$(DOLPHIN_EXTERNAL_OUTPUT_DIR): $(DOLPHIN_SOURCE_DIR) - @echo "\tDOLPHIN blocking" - @$(ASSETS_COMPILER) dolphin -s dolphin_blocking "$(DOLPHIN_SOURCE_DIR)/blocking" "$(DOLPHIN_INTERNAL_OUTPUT_DIR)" - @echo "\tDOLPHIN internal" - @$(ASSETS_COMPILER) dolphin -s dolphin_internal "$(DOLPHIN_SOURCE_DIR)/internal" "$(DOLPHIN_INTERNAL_OUTPUT_DIR)" - @echo "\tDOLPHIN external" - @$(ASSETS_COMPILER) dolphin "$(DOLPHIN_SOURCE_DIR)/external" "$(DOLPHIN_EXTERNAL_OUTPUT_DIR)" - -.PHONY: manifest -manifest: - $(ASSETS_COMPILER) manifest $(RESOURCES_DIR) - -.PHONY: dolphin -dolphin: $(DOLPHIN_EXTERNAL_OUTPUT_DIR) - -.PHONY: copro_bundle -copro_bundle: - @mkdir -p $(COPRO_BUNDLE_DIR) - @$(ASSETS_COMPILER) copro $(COPRO_CUBE_DIR) $(COPRO_BUNDLE_DIR) $(COPRO_MCU_FAMILY) --cube_ver=$(COPRO_CUBE_VERSION) --stack_type=$(COPRO_STACK_TYPE) --stack_file=$(COPRO_STACK_BIN) --stack_addr=$(COPRO_STACK_ADDR) - -clean: - @echo "\tCLEAN\t" - @$(RM) $(ASSETS_COMPILED_DIR)/* - @$(RM) -rf $(COPRO_BUNDLE_DIR) - @$(RM) -rf $(DOLPHIN_EXTERNAL_OUTPUT_DIR) diff --git a/assets/ReadMe.md b/assets/ReadMe.md index 0e5b0bdb5..09ec4cff5 100644 --- a/assets/ReadMe.md +++ b/assets/ReadMe.md @@ -1,20 +1,18 @@ # Requirements - Python3 -- ImageMagic -- Make +- Python3 packages: Pillow & heatshrink2 # Compiling ```bash -make all +./fbt icons proto dolphin_internal dolphin_blocking dolphin_ext resources ``` # Compiling with Docker-Compose ```bash -docker-compose exec dev make -C assets clean -docker-compose exec dev make -C assets all +docker-compose exec dev ./fbt icons proto dolphin_internal dolphin_blocking dolphin_ext resources ``` # Asset naming rules @@ -46,3 +44,4 @@ Don't include assets that you are not using, compiler is not going to strip unus - `icons` - Icons sources. Goes to `compiled` folder. - `protobuf` - Protobuf sources. Goes to `compiled` folder. - `resources` - Assets that is going to be provisioned to SD card. +- `slideshow` - One-time slideshows for desktop diff --git a/assets/SConscript b/assets/SConscript new file mode 100644 index 000000000..e70208ab9 --- /dev/null +++ b/assets/SConscript @@ -0,0 +1,113 @@ +Import("env") + +# HACHHACK +# Currently injected to CPPPATH by libs - since they are built earlier and depend on assets +# env.Append( +# CPPPATH=[ +# Dir("./compiled"), +# ] +# ) + +assetsenv = env.Clone( + tools=["fbt_assets"], + FW_LIB_NAME="assets", +) +assetsenv.ApplyLibFlags() + +if not assetsenv["VERBOSE"]: + assetsenv.SetDefault( + ICONSCOMSTR="\tICONS\t${TARGET}", + PROTOCOMSTR="\tPROTO\t${SOURCE}", + DOLPHINCOMSTR="\tDOLPHIN\t${DOLPHIN_RES_TYPE}", + RESMANIFESTCOMSTR="\tMANIFEST\t${TARGET}", + PBVERCOMSTR="\tPBVER\t${TARGET}", + ) + +# Gathering icons sources +icons_src = assetsenv.GlobRecursive("*.png", "icons") +icons_src += assetsenv.GlobRecursive("frame_rate", "icons") + +icons = assetsenv.IconBuilder(Dir("compiled"), Dir("#/assets/icons")) +Depends(icons, icons_src) +Alias("icons", icons) + + +# Protobuf .proto -> .c + .h + +proto_src = Glob("protobuf/*.proto", source=True) +proto_options = Glob("protobuf/*.options", source=True) +proto = assetsenv.ProtoBuilder(Dir("compiled"), proto_src) +Depends(proto, proto_options) +# Precious(proto) +Alias("proto", proto) + + +# Internal animations + +dolphin_internal = assetsenv.DolphinSymBuilder( + Dir("compiled"), + Dir("#/assets/dolphin"), + DOLPHIN_RES_TYPE="internal", +) +Alias("dolphin_internal", dolphin_internal) + + +# Blocking animations + +dolphin_blocking = assetsenv.DolphinSymBuilder( + Dir("compiled"), + Dir("#/assets/dolphin"), + DOLPHIN_RES_TYPE="blocking", +) +Alias("dolphin_blocking", dolphin_blocking) + + +# Protobuf version meta +proto_ver = assetsenv.ProtoVerBuilder( + "compiled/protobuf_version.h", + "#/assets/protobuf/Changelog", +) +Depends(proto_ver, proto) +Alias("proto_ver", proto_ver) + +# Gather everything into a static lib +assets_parts = (icons, proto, dolphin_blocking, dolphin_internal, proto_ver) + +assetslib = assetsenv.Library("${FW_LIB_NAME}", assets_parts) +assetsenv.Install("${LIB_DIST_DIR}", assetslib) + + +# Resources for SD card + +if assetsenv["IS_BASE_FIRMWARE"]: + # External dolphin animations + dolphin_external = assetsenv.DolphinExtBuilder( + Dir("#/assets/resources/dolphin"), + Dir("#/assets/dolphin"), + DOLPHIN_RES_TYPE="external", + ) + NoClean(dolphin_external) + if assetsenv["FORCE"]: + AlwaysBuild(dolphin_external) + Alias("dolphin_ext", dolphin_external) + + # Resources manifest + + resources = assetsenv.Command( + "#/assets/resources/Manifest", + assetsenv.GlobRecursive("*", "resources", exclude="Manifest"), + action=Action( + '${PYTHON3} ${ASSETS_COMPILER} manifest "${TARGET.dir.posix}"', + "${RESMANIFESTCOMSTR}", + ), + ) + Precious(resources) + NoClean(resources) + if assetsenv["FORCE"]: + AlwaysBuild(resources) + + # Exporting resources node to external environment + env["FW_RESOURCES"] = resources + Alias("resources", resources) + +Return("assetslib") diff --git a/assets/assets.mk b/assets/assets.mk deleted file mode 100644 index 18e0a244c..000000000 --- a/assets/assets.mk +++ /dev/null @@ -1,32 +0,0 @@ -ASSETS_DIR := $(PROJECT_ROOT)/assets -ASSETS_COMPILER := $(PROJECT_ROOT)/scripts/assets.py -ASSETS_COMPILED_DIR := $(ASSETS_DIR)/compiled -ASSETS_SOURCE_DIR := $(ASSETS_DIR)/icons - -ASSETS_SOURCES += $(shell find $(ASSETS_SOURCE_DIR) -type f -iname '*.png' -or -iname 'frame_rate') -ASSETS += $(ASSETS_COMPILED_DIR)/assets_icons.c - -RESOURCES_DIR := $(ASSETS_DIR)/resources -RESOURCES_MANIFEST := $(RESOURCES_DIR)/Manifest -RESOURCES_FILES := $(shell find $(RESOURCES_DIR) ! -name Manifest -type f) - -DOLPHIN_SOURCE_DIR := $(ASSETS_DIR)/dolphin -DOLPHIN_INTERNAL_OUTPUT_DIR := $(ASSETS_COMPILED_DIR) -DOLPHIN_EXTERNAL_OUTPUT_DIR := $(ASSETS_DIR)/resources/dolphin - -PROTOBUF_SOURCE_DIR := $(ASSETS_DIR)/protobuf -PROTOBUF_COMPILER := $(PROJECT_ROOT)/lib/nanopb/generator/nanopb_generator.py -PROTOBUF_COMPILED_DIR := $(ASSETS_COMPILED_DIR) -PROTOBUF_SOURCES := $(shell find $(PROTOBUF_SOURCE_DIR) -type f -iname '*.proto') -PROTOBUF_FILENAMES := $(notdir $(addsuffix .pb.c,$(basename $(PROTOBUF_SOURCES)))) -PROTOBUF := $(addprefix $(PROTOBUF_COMPILED_DIR)/,$(PROTOBUF_FILENAMES)) $(PROTOBUF_COMPILED_DIR)/protobuf_version.h -PROTOBUF_VERSION := $(shell git -C $(PROTOBUF_SOURCE_DIR) fetch --tags 2>/dev/null ; git -C $(PROTOBUF_SOURCE_DIR) describe --tags --abbrev=0 2>/dev/null || echo 'unknown') -PROTOBUF_MAJOR_VERSION := $(word 1,$(subst ., ,$(PROTOBUF_VERSION))) -PROTOBUF_MINOR_VERSION := $(word 2,$(subst ., ,$(PROTOBUF_VERSION))) -$(if $(PROTOBUF_MAJOR_VERSION),,$(error "Protobuf major version is not specified, $$PROTOBUF_VERSION=$(PROTOBUF_VERSION), please perform git fetch in assets/protobuf directory")) -$(if $(PROTOBUF_MINOR_VERSION),,$(error "Protobuf minor version is not specified, $$PROTOBUF_VERSION=$(PROTOBUF_VERSION), please perform git fetch in assets/protobuf directory")) - -PROTOBUF_CFLAGS += -DPB_ENABLE_MALLOC - -CFLAGS += -I$(ASSETS_COMPILED_DIR) $(PROTOBUF_CFLAGS) -C_SOURCES += $(wildcard $(ASSETS_COMPILED_DIR)/*.c) diff --git a/assets/compiled/application.pb.c b/assets/compiled/application.pb.c deleted file mode 100644 index a50850b20..000000000 --- a/assets/compiled/application.pb.c +++ /dev/null @@ -1,18 +0,0 @@ -/* Automatically generated nanopb constant definitions */ -/* Generated by nanopb-0.4.5 */ - -#include "application.pb.h" -#if PB_PROTO_HEADER_VERSION != 40 -#error Regenerate this file with the current version of nanopb generator. -#endif - -PB_BIND(PB_App_StartRequest, PB_App_StartRequest, AUTO) - - -PB_BIND(PB_App_LockStatusRequest, PB_App_LockStatusRequest, AUTO) - - -PB_BIND(PB_App_LockStatusResponse, PB_App_LockStatusResponse, AUTO) - - - diff --git a/assets/compiled/application.pb.h b/assets/compiled/application.pb.h deleted file mode 100644 index 4b05c46b7..000000000 --- a/assets/compiled/application.pb.h +++ /dev/null @@ -1,79 +0,0 @@ -/* Automatically generated nanopb header */ -/* Generated by nanopb-0.4.5 */ - -#ifndef PB_PB_APP_APPLICATION_PB_H_INCLUDED -#define PB_PB_APP_APPLICATION_PB_H_INCLUDED -#include - -#if PB_PROTO_HEADER_VERSION != 40 -#error Regenerate this file with the current version of nanopb generator. -#endif - -/* Struct definitions */ -typedef struct _PB_App_LockStatusRequest { - char dummy_field; -} PB_App_LockStatusRequest; - -typedef struct _PB_App_StartRequest { - char *name; - char *args; -} PB_App_StartRequest; - -typedef struct _PB_App_LockStatusResponse { - bool locked; -} PB_App_LockStatusResponse; - - -#ifdef __cplusplus -extern "C" { -#endif - -/* Initializer values for message structs */ -#define PB_App_StartRequest_init_default {NULL, NULL} -#define PB_App_LockStatusRequest_init_default {0} -#define PB_App_LockStatusResponse_init_default {0} -#define PB_App_StartRequest_init_zero {NULL, NULL} -#define PB_App_LockStatusRequest_init_zero {0} -#define PB_App_LockStatusResponse_init_zero {0} - -/* Field tags (for use in manual encoding/decoding) */ -#define PB_App_StartRequest_name_tag 1 -#define PB_App_StartRequest_args_tag 2 -#define PB_App_LockStatusResponse_locked_tag 1 - -/* Struct field encoding specification for nanopb */ -#define PB_App_StartRequest_FIELDLIST(X, a) \ -X(a, POINTER, SINGULAR, STRING, name, 1) \ -X(a, POINTER, SINGULAR, STRING, args, 2) -#define PB_App_StartRequest_CALLBACK NULL -#define PB_App_StartRequest_DEFAULT NULL - -#define PB_App_LockStatusRequest_FIELDLIST(X, a) \ - -#define PB_App_LockStatusRequest_CALLBACK NULL -#define PB_App_LockStatusRequest_DEFAULT NULL - -#define PB_App_LockStatusResponse_FIELDLIST(X, a) \ -X(a, STATIC, SINGULAR, BOOL, locked, 1) -#define PB_App_LockStatusResponse_CALLBACK NULL -#define PB_App_LockStatusResponse_DEFAULT NULL - -extern const pb_msgdesc_t PB_App_StartRequest_msg; -extern const pb_msgdesc_t PB_App_LockStatusRequest_msg; -extern const pb_msgdesc_t PB_App_LockStatusResponse_msg; - -/* Defines for backwards compatibility with code written before nanopb-0.4.0 */ -#define PB_App_StartRequest_fields &PB_App_StartRequest_msg -#define PB_App_LockStatusRequest_fields &PB_App_LockStatusRequest_msg -#define PB_App_LockStatusResponse_fields &PB_App_LockStatusResponse_msg - -/* Maximum encoded size of messages (where known) */ -/* PB_App_StartRequest_size depends on runtime parameters */ -#define PB_App_LockStatusRequest_size 0 -#define PB_App_LockStatusResponse_size 2 - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif diff --git a/assets/compiled/assets_dolphin_blocking.c b/assets/compiled/assets_dolphin_blocking.c deleted file mode 100644 index a1ec14b42..000000000 --- a/assets/compiled/assets_dolphin_blocking.c +++ /dev/null @@ -1,330 +0,0 @@ -#include -#include -#include -#include - - - -const uint8_t _A_L0_NoDb_128x51_0[] = { - 0x1,0x0,0x43,0x1,0x0,0x78,0x3,0xc0,0x1e,0x0,0xf8,0x7,0xfc,0x0,0x33,0xf0,0x75,0x60,0x1,0xe5,0x7f,0x7,0xde,0x4e,0x49,0x49,0xb9,0x3,0xff,0x11,0x0,0x88,0x0,0x4,0x16,0x34,0x0,0x10,0xc1,0x1,0xf7,0x20,0x7,0xbe,0x62,0x19,0x9c,0x9d,0xdd,0xf3,0x91,0x99,0x1c,0x9a,0x3b,0x7,0x27,0xa6,0xa2,0x25,0x52,0xc9,0x65,0x2a,0x5a,0x4b,0x4,0xa7,0x4a,0x1f,0x10,0x79,0xf2,0x1,0xe7,0x92,0x9e,0x48,0x41,0xef,0x88,0x7,0x9c,0x4a,0xb,0x22,0x7,0xc0,0xfc,0x62,0x77,0x7e,0xe6,0x62,0x43,0xc6,0x92,0x8f,0xd5,0x3f,0xe0,0xff,0x7,0xf8,0x3f,0xc1,0xf9,0x7,0x7,0xbd,0xc2,0x3c,0xaf,0x2a,0x7,0xff,0xf3,0xfc,0x7,0xb6,0x22,0x44,0xf,0x2d,0x7,0xff,0x1d,0xfb,0x7,0xa6,0x2,0x73,0x8,0x91,0x63,0x27,0x70,0x7e,0x85,0xff,0xf7,0xf7,0x7,0xa5,0x2,0x95,0x70,0x91,0x54,0xb1,0x50,0x4f,0x86,0xff,0xfb,0xef,0x7,0xb6,0x2,0x45,0x42,0x7,0x9f,0xfc,0x1e,0xe3,0xf1,0xf,0x9f,0x7e,0x3f,0xdf,0x1f,0xad,0x24,0xbe,0x38,0xc8,0x5c,0x1c,0x1e,0x3e,0xfe,0xf1,0xfe,0xc1,0xe3,0xff,0x7,0xe7,0x0,0x5a,0x22,0xf5,0x7,0xc6,0xfc,0x1f,0xa5,0xf7,0x7,0xc6,0xfc,0x1e,0xff,0xe6,0xd1,0x40,0x68,0x17,0xff,0xff,0x9c,0x1e,0xb8,0x8,0x8,0x10,0xa0,0x4b,0xf1,0xff,0x70,0xc1,0xeb,0xc0,0x2,0x1c,0x13,0xa0,0xdf,0x1c,0x0,0x3e,0xfe,0xf,0xf1,0x83,0x83,0xda,0x11,0x2,0x80,0x42,0x1,0xe5,0xff,0x87,0xdf,0x81,0xeb,0x18,0x81,0xc0,0x23,0x0,0xf3,0x8f,0xdf,0x1,0xeb,0xa8,0x99,0x59,0xe7,0x0,0xf3,0x9f,0xde,0x1,0xeb,0x48,0xa5,0x64,0x6f,0x0,0xf3,0xbf,0x83,0xda,0x11,0x4a,0xf8,0x87,0xd3,0xfe,0xf,0x88,0x88,0xfd,0x4,0x2,0xf,0x69,0x95,0x84,0xbe,0x80,0xf7,0x3f,0xb0,0x3f,0xc1,0xf0,0xbf,0x40,0x7c,0xe0,0x1,0x24,0xdf,0x1f,0x0,0x10,0xa7,0xee,0xf5,0x7,0x98,0x25,0x40,0x1e,0x0,0xf0,0x7,0x80,0x28 -}; - -const uint8_t _A_L0_NoDb_128x51_1[] = { - 0x1,0x0,0x45,0x1,0x0,0x78,0x3,0xc0,0x1e,0x0,0xf8,0x7,0xfc,0x0,0x33,0xf0,0x75,0x60,0x1,0xe5,0x7f,0x7,0xde,0x4e,0x49,0x49,0xb9,0x3,0xff,0x11,0x0,0x88,0x0,0x4,0x16,0x34,0x0,0x10,0xc1,0x1,0xf7,0x20,0x7,0xbe,0x62,0x19,0x9c,0x9d,0xdd,0xf3,0x91,0x99,0x1c,0x9a,0x3b,0x7,0x27,0xa6,0xa2,0x25,0x52,0xc9,0x65,0x2a,0x5a,0x4b,0x4,0xa7,0x4a,0x1f,0x10,0x79,0xf2,0x1,0xe7,0x92,0x9e,0x48,0x41,0xef,0x88,0x7,0x9c,0x4a,0xb,0x22,0x7,0xc0,0xfc,0x62,0x77,0x7e,0xe6,0x62,0x43,0xc6,0x92,0x8f,0xd5,0x3f,0xe0,0xff,0x7,0xf8,0x3f,0xc1,0xf9,0x1f,0xfe,0x3,0xda,0xe1,0x1e,0x57,0x95,0x3,0xff,0xe7,0xf9,0x83,0xdb,0x11,0x22,0x7,0x96,0x83,0xff,0x3b,0xf7,0x3,0xd3,0x1,0x39,0x84,0x48,0xb1,0x93,0xb8,0x3f,0x43,0xff,0xed,0xef,0x83,0xd2,0x81,0x4a,0xb8,0x48,0xaa,0x58,0xa8,0x27,0xc3,0xff,0xf6,0xdf,0x83,0xdb,0x1,0x22,0xa1,0x3,0xcf,0xfc,0xf,0x71,0xf8,0x87,0xce,0xff,0x1f,0xbf,0x8f,0xd6,0x92,0x5f,0x1c,0x64,0x2e,0xe,0xf,0x1f,0x7d,0xf8,0xff,0x60,0xf1,0xff,0x83,0xf3,0x80,0x2d,0x11,0x7a,0x83,0xe0,0x9c,0x20,0xfc,0x2f,0xb8,0x3e,0x37,0xc0,0xf7,0xff,0x36,0x8a,0x2,0xbf,0x1f,0xee,0x7c,0x1e,0xb8,0x8,0x8,0x10,0xa0,0x4b,0xf1,0xfd,0xc3,0xc1,0xeb,0xc0,0x2,0x1c,0x11,0x7e,0x3e,0x78,0x1d,0xf8,0x1f,0x4a,0xf1,0x8f,0xc7,0x2f,0x80,0xf5,0x84,0x40,0xa0,0x10,0x80,0x79,0x7f,0xe7,0xf7,0x80,0x7a,0xc6,0x20,0x70,0x8,0xc0,0x3c,0xef,0xf7,0x0,0x7a,0xea,0x26,0x56,0x79,0xc0,0x3c,0xff,0xf6,0x0,0x7a,0xd2,0x29,0x59,0x1b,0xc0,0x3d,0x2c,0x23,0xf6,0xa5,0x7c,0x43,0xeb,0x63,0x7,0xbc,0x44,0x7e,0x84,0x1,0x7,0xb4,0xca,0xc2,0x5f,0x40,0x7b,0x9f,0xd8,0x1f,0xe0,0xf8,0x5f,0xa0,0x3e,0x70,0x0,0x92,0x6f,0x8f,0x80,0x8,0x53,0xf7,0x7a,0x83,0xcc,0x12,0xa0,0xf,0x0,0x78,0x3,0xc0,0x14 -}; - -const uint8_t _A_L0_NoDb_128x51_2[] = { - 0x1,0x0,0x43,0x1,0x0,0x78,0x3,0xc0,0x1e,0x0,0xf8,0x7,0xfc,0x0,0x33,0xf0,0x75,0x60,0x1,0xe5,0x7f,0x7,0xde,0x4e,0x49,0x49,0xb9,0x3,0xff,0x11,0x0,0x88,0x0,0x4,0x16,0x34,0x0,0x10,0xc1,0x1,0xf7,0x20,0x7,0xbe,0x62,0x19,0x9c,0x9d,0xdd,0xf3,0x91,0x99,0x1c,0x9a,0x3b,0x7,0x27,0xa6,0xa2,0x25,0x52,0xc9,0x65,0x2a,0x5a,0x4b,0x4,0xa7,0x4a,0x1f,0x10,0x79,0xf2,0x1,0xe7,0x92,0x9e,0x48,0x41,0xef,0x88,0x7,0x9c,0x4a,0xb,0x22,0x7,0xc0,0xfc,0x62,0x77,0x7e,0xe6,0x62,0x43,0xc6,0x92,0x8f,0xd5,0x3f,0xe0,0xff,0x7,0xf8,0x3f,0xc1,0xfe,0xa,0x5b,0x84,0x79,0x5e,0x54,0x0,0x7c,0xe2,0x24,0x40,0xf2,0xd0,0x7f,0xe3,0xff,0xc0,0x7a,0x60,0x27,0x30,0x89,0x16,0x32,0x77,0x7,0xe8,0x7f,0xfc,0xff,0x30,0x7a,0x50,0x29,0x57,0x9,0x15,0x4b,0x15,0x4,0xf8,0x7f,0xe7,0x7e,0xe0,0x7b,0x60,0x24,0x54,0x20,0x79,0xfb,0x7b,0xe0,0xf6,0x1f,0x88,0x7d,0x22,0xdb,0xf1,0xfa,0xd2,0x4b,0xe3,0x8c,0x85,0xc1,0xc1,0xe3,0xee,0xdf,0x1f,0xef,0xe1,0x7f,0xff,0xdf,0x81,0xf7,0xc0,0xbf,0x80,0x8,0x1f,0x83,0xe1,0x7,0xea,0x78,0x43,0xfe,0xf,0x6f,0xf2,0xe8,0xa0,0x2b,0xf1,0xff,0x1b,0xd4,0xe0,0x30,0x10,0x21,0x40,0x97,0xe2,0xf,0x7e,0x0,0x10,0xe0,0x8b,0xf1,0xfe,0xe7,0xc1,0xf6,0x8f,0x1f,0xdc,0x3c,0x1e,0xd0,0x88,0x14,0x2,0x10,0xf,0x2f,0x3c,0xe,0xfc,0xf,0x58,0xc4,0xe,0x1,0x18,0x7,0x94,0x7e,0x39,0x7c,0x7,0xae,0xa2,0x65,0x67,0x9c,0x3,0xcb,0xff,0x3f,0xbc,0x3,0xd6,0x91,0x4a,0xc8,0xde,0x1,0xe7,0x7f,0xb8,0xf,0xda,0x95,0xf1,0xf,0xa7,0xfe,0xc0,0xf,0x78,0x88,0xfc,0xc0,0x3,0x61,0x7,0xb4,0xca,0xc2,0x5f,0x30,0x0,0xd8,0xcf,0xf8,0x40,0x20,0x7f,0x83,0xd5,0x7e,0x80,0xf9,0xc0,0x2,0x49,0xbe,0x3e,0x0,0x21,0x4f,0xdd,0xea,0xf,0x30,0x4a,0x80,0x3c,0x1,0xe0,0xf,0x0,0x50 -}; - -const uint8_t _A_L0_NoDb_128x51_3[] = { - 0x1,0x0,0x43,0x1,0x0,0x78,0x3,0xc0,0x1e,0x0,0xf8,0x7,0xfc,0x0,0x33,0xf0,0x75,0x60,0x1,0xe5,0x7f,0x7,0xde,0x4e,0x49,0x49,0xb9,0x3,0xff,0x11,0x0,0x88,0x0,0x4,0x16,0x34,0x0,0x10,0xc1,0x1,0xf7,0x20,0x7,0xbe,0x62,0x19,0x9c,0x9d,0xdd,0xf3,0x91,0x99,0x1c,0x9a,0x3b,0x7,0x27,0xa6,0xa2,0x25,0x52,0xc9,0x65,0x2a,0x5a,0x4b,0x4,0xa7,0x4a,0x1f,0x10,0x79,0xf2,0x1,0xe7,0x92,0x9e,0x48,0x41,0xef,0x88,0x7,0x9c,0x4a,0xb,0x22,0x7,0xc0,0xfc,0x62,0x77,0x7e,0xe6,0x62,0x43,0xc6,0x92,0x8f,0xd5,0x3f,0xe0,0xff,0x7,0xf8,0x3f,0xc1,0xfe,0xa,0x5b,0x84,0x79,0x5e,0x54,0x0,0x7c,0xe2,0x24,0x40,0xf2,0xd0,0x7f,0xe0,0xe0,0xf5,0xc0,0x4e,0x61,0x12,0x2c,0x64,0xee,0xf,0xd0,0xff,0xfe,0x7f,0x80,0xf4,0xa0,0x52,0xae,0x12,0x2a,0x96,0x2a,0x9,0xf0,0xff,0xe3,0xbf,0x60,0xf6,0xc0,0x48,0xa8,0x40,0xf2,0xbf,0xfe,0xfe,0xe0,0xf6,0x1f,0x88,0x7c,0xf7,0xf1,0xdf,0x78,0xfd,0x69,0x25,0xf1,0xc6,0x42,0xe0,0xe0,0xf1,0xf7,0xfb,0x8f,0xf7,0xf0,0xef,0xff,0xfb,0xc0,0xfb,0xe0,0x77,0xef,0xe0,0x11,0x7,0xe6,0xfc,0x1f,0xdf,0xf0,0xff,0x83,0xdf,0xfc,0xba,0x28,0xd,0x3,0x7f,0xff,0x37,0xa9,0xc0,0x60,0x20,0x42,0x81,0x68,0x1,0xf1,0xc0,0x2,0x1c,0x13,0xa1,0x7f,0xff,0xf9,0xc1,0xf6,0xbf,0x1f,0xf7,0xc,0x1e,0xd0,0x88,0x14,0x2,0x10,0xf,0x2f,0xce,0x0,0x1e,0xd1,0x88,0x1c,0x2,0x30,0xf,0x28,0x3c,0x1c,0x1e,0xda,0x89,0x95,0x9e,0x70,0xf,0x2f,0xfc,0x3e,0xfc,0xf,0x5a,0x45,0x2b,0x23,0x78,0x7,0x9c,0x7e,0xf8,0x3f,0x6a,0x57,0xc4,0x3e,0x93,0xfb,0xc0,0x3d,0xe2,0x23,0xf3,0xff,0xdf,0xc1,0xef,0x32,0xb0,0x97,0xcc,0x0,0x20,0xf6,0x3f,0xb0,0x80,0x81,0xfe,0xf,0x55,0xfa,0x3,0xe7,0x0,0x9,0x26,0xf8,0xf8,0x0,0x85,0x3f,0x77,0xa8,0x3c,0xc1,0x2a,0x0,0xf0,0x7,0x80,0x3c,0x1,0x40 -}; - - -const uint8_t * const _A_L0_NoDb_128x51[] = { - - _A_L0_NoDb_128x51_0, - - _A_L0_NoDb_128x51_1, - - _A_L0_NoDb_128x51_2, - - _A_L0_NoDb_128x51_3, - -}; - - - -const uint8_t L0_NoDb_128x51_frame_order[] = { 0, 1, 2, 3 }; - -const BubbleAnimation BA_L0_NoDb_128x51 = { - .icon_animation = { - .width = 128, - .height = 51, - .frame_count = 4, - .frame_rate = 2, - .frames = _A_L0_NoDb_128x51 - }, - .frame_order = L0_NoDb_128x51_frame_order, - .passive_frames = 4, - .active_frames = 0, - .active_cooldown = 0, - .active_cycles = 0, - .duration = 0, - - .frame_bubble_sequences = NULL, - .frame_bubble_sequences_count = 0, - -}; - - -const uint8_t _A_L0_SdBad_128x51_0[] = { - 0x1,0x0,0x1,0x1,0x0,0x78,0x3,0xc0,0x1e,0x0,0xf8,0x7,0xfc,0x0,0x33,0xf0,0x75,0x60,0x1,0xe5,0x7f,0x7,0xde,0x4e,0x49,0x49,0xb9,0x3,0xfe,0x1,0x82,0x4,0xc,0x4a,0x1,0x70,0x8f,0x1,0x46,0x8,0xf,0x5e,0x30,0x24,0x60,0x50,0xc,0x44,0x88,0x1f,0x1a,0xaa,0x64,0xeb,0xaf,0x71,0x84,0x48,0xb1,0x93,0xb8,0x39,0x3d,0x72,0x55,0x2a,0x50,0x4,0x6e,0x12,0x2a,0x96,0x28,0x3e,0x20,0xf4,0xc1,0x3,0xcf,0x1,0x22,0xa1,0x3,0xf0,0x7e,0x21,0xf9,0xc6,0x52,0xea,0x57,0x22,0xf8,0xe3,0x21,0x63,0xf6,0x0,0x1d,0x1,0x3f,0xd3,0x5,0x7f,0x83,0xfc,0x1f,0xe0,0xf5,0xcf,0xfc,0xee,0x77,0xe0,0x5b,0x7e,0x28,0x10,0x18,0x25,0x2,0x7f,0xf9,0x93,0x87,0xde,0x11,0x0,0x7,0x8e,0x82,0xff,0xfc,0xc7,0x83,0xe2,0xb9,0x19,0x83,0xf4,0x1,0xf5,0x78,0xa9,0x69,0x60,0x9f,0x1,0x7d,0xd4,0xb7,0xa0,0xf1,0x27,0xd0,0x3c,0x70,0xa0,0xf1,0x37,0xd0,0xfc,0xc1,0xf6,0x0,0x30,0x7f,0xf0,0x1,0xff,0xff,0x83,0xfe,0x1,0xfb,0xf9,0xf0,0x83,0xf6,0x19,0xc6,0x7,0xb0,0xe8,0xe0,0x34,0xf,0xfc,0x1b,0x90,0xf,0x69,0x80,0xc,0xa0,0x5a,0xf,0xfc,0xd8,0x1e,0xf1,0x80,0x19,0x41,0x3a,0x5,0xd1,0xfe,0x3,0xec,0xff,0x51,0x8b,0x84,0x8a,0x4,0xf,0xcc,0x44,0x4a,0xc,0xf,0xd8,0x54,0x38,0x1f,0xb0,0x68,0xf0,0x7f,0xc7,0xfe,0x5f,0xf0,0x7e,0x1f,0xfc,0x1f,0xd3,0x85,0xf9,0x83,0xe8,0x14,0x70,0x1f,0x0,0x10,0xa7,0xe0,0xf5,0x5,0x18,0x25,0x40,0x1e,0x0,0xf0,0x7,0x80,0x28 -}; - -const uint8_t _A_L0_SdBad_128x51_1[] = { - 0x1,0x0,0x12,0x1,0x0,0x78,0x3,0xc0,0x1e,0x0,0xf8,0x7,0xfc,0x0,0x33,0xf0,0x75,0x60,0x1,0xe5,0x7f,0x7,0xde,0x4e,0x49,0x49,0xb9,0x3,0xfe,0x1,0x82,0x4,0xc,0x4a,0x1,0x70,0x8f,0x1,0x46,0x8,0xf,0x5e,0x30,0x24,0x60,0x50,0xc,0x44,0x88,0x1f,0x1a,0xaa,0x64,0xeb,0xaf,0x71,0x84,0x48,0xb1,0x93,0xb8,0x39,0x3d,0x72,0x55,0x2a,0x50,0x4,0x6e,0x12,0x2a,0x96,0x28,0x3e,0x20,0xf4,0xc1,0x3,0xcf,0x1,0x22,0xa1,0x3,0xf0,0x7e,0x21,0xf9,0xc6,0x52,0xea,0x57,0x22,0xf8,0xe3,0x21,0x63,0xf6,0x0,0x1d,0x1,0x3f,0xd3,0x5,0x7f,0x83,0xfc,0x1f,0xe0,0xf5,0xcf,0xfc,0xee,0x77,0xe0,0x5b,0x7e,0x28,0x10,0x18,0x25,0x2,0x7f,0xf9,0x93,0x87,0xde,0x11,0x0,0x7,0x8e,0x82,0xff,0xfc,0xc7,0x83,0xe2,0xb9,0x19,0x83,0xf4,0x1,0xf5,0x78,0xa9,0x69,0x60,0x9f,0x1,0x7d,0xd4,0xb7,0xa0,0xf1,0x27,0xd0,0x3c,0x70,0xa0,0xf1,0x37,0xd0,0xfc,0xc1,0xf6,0x0,0x30,0x7f,0xf0,0x1,0xff,0xff,0x81,0xfc,0x1,0xfb,0xf8,0xe0,0x83,0xf2,0xff,0x4c,0xc3,0x3,0xd8,0x74,0x70,0x15,0xf8,0xe1,0xa1,0x0,0xf6,0x98,0x0,0xca,0x5,0xa0,0x9f,0xc5,0xa1,0x20,0xf6,0x8c,0x0,0xca,0x9,0xd0,0xbb,0xcf,0xb3,0x17,0xb0,0x7d,0x7c,0x3e,0xf3,0xff,0xc0,0x3d,0xee,0x12,0x28,0x10,0x3c,0x7d,0xee,0x1,0xbe,0x83,0xdb,0x11,0x12,0x83,0x2f,0xec,0x1e,0x30,0xa8,0x70,0x3f,0x60,0xd1,0xe0,0xff,0x83,0xf4,0x7f,0xc5,0xf4,0x7,0xd1,0xfd,0x1,0xfe,0xf,0x99,0xc2,0xfc,0xc1,0xf4,0xa,0x38,0xf,0x80,0x8,0x53,0xf0,0x7a,0x82,0x8c,0x12,0xa0,0xf,0x0,0x78,0x3,0xc0,0x14 -}; - - -const uint8_t * const _A_L0_SdBad_128x51[] = { - - _A_L0_SdBad_128x51_0, - - _A_L0_SdBad_128x51_1, - -}; - - - -const uint8_t L0_SdBad_128x51_frame_order[] = { 0, 1 }; - -const BubbleAnimation BA_L0_SdBad_128x51 = { - .icon_animation = { - .width = 128, - .height = 51, - .frame_count = 2, - .frame_rate = 2, - .frames = _A_L0_SdBad_128x51 - }, - .frame_order = L0_SdBad_128x51_frame_order, - .passive_frames = 2, - .active_frames = 0, - .active_cooldown = 0, - .active_cycles = 0, - .duration = 0, - - .frame_bubble_sequences = NULL, - .frame_bubble_sequences_count = 0, - -}; - - -const uint8_t _A_L0_SdOk_128x51_0[] = { - 0x1,0x0,0x19,0x1,0x0,0x78,0x3,0xc0,0x1e,0x0,0xf8,0x7,0xfc,0x0,0x33,0xf0,0x75,0x60,0x1,0xe5,0x7f,0x7,0xde,0x4e,0x49,0x49,0xb9,0x3,0xfc,0xe,0x54,0xec,0xe,0x0,0x8,0x35,0x48,0x20,0x3e,0x2a,0x20,0xf3,0xa8,0x3,0xeb,0xc3,0xdc,0x9c,0xc9,0x2a,0xb1,0xc8,0x19,0x3d,0xeb,0xf9,0x1c,0x94,0x90,0x1e,0x3a,0x48,0x20,0x3d,0xea,0x20,0xf5,0x83,0x83,0xf8,0xff,0x3,0xf1,0xce,0x4e,0x3b,0x15,0x41,0xfc,0xa7,0xfc,0x1f,0xe0,0xff,0x7,0xcc,0x1f,0xf8,0xf,0xdf,0xcf,0xcc,0x1e,0x8a,0xa1,0xb8,0x47,0x80,0xa5,0x40,0xff,0xff,0xbd,0xe0,0xf6,0xc4,0x48,0x80,0xa5,0xa0,0xbf,0xff,0xfb,0xe0,0xf1,0xb0,0x4b,0xa3,0x38,0x79,0xcc,0x22,0x45,0x8c,0x9d,0xc1,0xfa,0x1b,0xff,0xfe,0xfc,0x1e,0x31,0x9,0x4e,0x96,0x89,0x4a,0xb8,0x48,0xaa,0x58,0xa8,0x27,0xc0,0x1e,0x92,0x9,0x4e,0xf4,0x1e,0x38,0x9,0x15,0x8,0x1e,0x5d,0xf3,0x70,0x83,0xc6,0x81,0x29,0xc2,0x83,0xc4,0x7e,0x21,0xf3,0x7,0xa4,0xc3,0x9d,0x18,0xc3,0xd2,0x4b,0xe3,0x8c,0x85,0xc1,0xc1,0xea,0x0,0x90,0x78,0x9f,0x84,0x1f,0x7c,0x0,0x7f,0xf7,0xfe,0xe0,0xfe,0x1f,0xef,0x0,0xfe,0x80,0xa5,0x75,0x14,0x6,0x80,0xf,0x99,0x80,0xc,0xa0,0x4b,0xf5,0x0,0x24,0x61,0xaa,0x7d,0x6,0xfb,0x83,0xdb,0xe0,0xff,0x70,0x79,0x34,0x6,0x4,0xf,0x28,0x3f,0xf0,0x1e,0xf8,0x88,0x94,0x18,0x1e,0x40,0x1,0x7,0xc4,0x2a,0x1c,0xf,0xd8,0x34,0x78,0x3f,0xe0,0xfd,0x1f,0xf1,0x7d,0x41,0xf2,0x7f,0x50,0x7f,0x83,0xe2,0x70,0xbf,0x30,0x7d,0x2,0x8e,0x3,0xe0,0x2,0x14,0xfc,0x1e,0xa0,0xa3,0x4,0xa8,0x3,0xc0,0x1e,0x0,0xf0,0x5,0x0 -}; - -const uint8_t _A_L0_SdOk_128x51_1[] = { - 0x1,0x0,0x1e,0x1,0x0,0x78,0x3,0xc0,0x1e,0x0,0xf8,0x7,0xfc,0x0,0x33,0xf0,0x75,0x60,0x1,0xe5,0x7f,0x7,0xde,0x4e,0x49,0x49,0xb9,0x3,0xfc,0xe,0x54,0xec,0xe,0x0,0x8,0x35,0x48,0x20,0x3e,0x2a,0x20,0xf3,0xa8,0x3,0xeb,0xc3,0xdc,0x9c,0xc9,0x2a,0xb1,0xc8,0x19,0x3d,0xeb,0xf9,0x1c,0x94,0x90,0x1e,0x3a,0x48,0x20,0x3d,0xea,0x20,0xf5,0x83,0x83,0xf8,0xff,0x3,0xf1,0xce,0x4e,0x3b,0x15,0x41,0xfc,0xa7,0xfc,0x1f,0xe0,0xff,0x7,0xcc,0x1f,0xf8,0xf,0xdf,0xcf,0xcc,0x1e,0x8a,0xa1,0xb8,0x47,0x80,0xa5,0x40,0xff,0xff,0xbd,0xe0,0xf6,0xc4,0x48,0x80,0xa5,0xa0,0xbf,0xff,0xfb,0xe0,0xf1,0xb0,0x4b,0xa3,0x38,0x79,0xcc,0x22,0x45,0x8c,0x9d,0xc1,0xfa,0x1b,0xff,0xfe,0xfc,0x1e,0x31,0x9,0x4e,0x96,0x89,0x4a,0xb8,0x48,0xaa,0x58,0xa8,0x27,0xc0,0x1e,0x92,0x9,0x4e,0xf4,0x1e,0x38,0x9,0x15,0x8,0x1e,0x5d,0xf3,0x70,0x83,0xc6,0x81,0x29,0xc2,0x83,0xc4,0x7e,0x21,0xf3,0x7,0xa4,0xc3,0x9d,0x18,0xc3,0xd2,0x4b,0xe3,0x8c,0x85,0xc1,0xc1,0xea,0x0,0x90,0x78,0x9f,0x84,0x1f,0x7c,0xe,0xff,0x8c,0x1f,0xd8,0x70,0x7f,0x63,0xc1,0xfb,0xbf,0xcf,0x9f,0xc8,0x14,0xae,0xa2,0x80,0xd0,0x11,0xe8,0x0,0x49,0x80,0xc,0xa0,0x4b,0xf5,0x0,0x24,0x61,0xaa,0x7d,0x6,0xfb,0x83,0xdb,0xe0,0xff,0x70,0x79,0x34,0x6,0x4,0xf,0x28,0x3f,0xf0,0x1e,0xf8,0x88,0x94,0x18,0x1e,0x40,0x1,0x7,0xc4,0x2a,0x1c,0xf,0xd8,0x34,0x78,0x3f,0xe0,0xfd,0x1f,0xf1,0x7d,0x41,0xf2,0x7f,0x50,0x7f,0x83,0xe2,0x70,0xbf,0x30,0x7d,0x2,0x8e,0x3,0xe0,0x2,0x14,0xfc,0x1e,0xa0,0xa3,0x4,0xa8,0x3,0xc0,0x1e,0x0,0xf0,0x5,0x0 -}; - -const uint8_t _A_L0_SdOk_128x51_2[] = { - 0x1,0x0,0x22,0x1,0x0,0x78,0x3,0xc0,0x1e,0x0,0xf8,0x7,0xfc,0x0,0x33,0xf0,0x75,0x60,0x1,0xe5,0x7f,0x7,0xde,0x4e,0x49,0x49,0xb9,0x3,0xfc,0xe,0x54,0xec,0xe,0x0,0x8,0x35,0x48,0x20,0x3e,0x2a,0x20,0xf3,0xa8,0x3,0xeb,0xc3,0xdc,0x9c,0xc9,0x2a,0xb1,0xc8,0x19,0x3d,0xeb,0xf9,0x1c,0x94,0x90,0x1e,0x3a,0x48,0x20,0x3d,0xea,0x20,0xf5,0x83,0x83,0xf8,0xff,0x3,0xf1,0xce,0x4e,0x3b,0x15,0x41,0xfc,0xa7,0xfc,0x1f,0xe0,0xff,0x7,0xcc,0x1f,0xf8,0xf,0xdf,0xcf,0xcc,0x1e,0x8a,0xa1,0xb8,0x47,0x80,0xa5,0x40,0xff,0xff,0xbd,0xe0,0xf6,0xc4,0x48,0x80,0xa5,0xa0,0xbf,0xff,0xfb,0xe0,0xf1,0xb0,0x4b,0xa3,0x38,0x79,0xcc,0x22,0x45,0x8c,0x9d,0xc1,0xfa,0x1b,0xff,0xfe,0xfc,0x1e,0x31,0x9,0x4e,0x96,0x89,0x4a,0xb8,0x48,0xaa,0x58,0xa8,0x27,0xc0,0x1e,0x92,0x9,0x4e,0xf4,0x1e,0x38,0x9,0x15,0x8,0x1e,0x5d,0xf3,0x70,0x83,0xc6,0x81,0x29,0xc2,0x83,0xc4,0x7e,0x21,0xf3,0x7,0xa4,0xc3,0x9d,0x18,0xc3,0xd2,0x4b,0xe3,0x8c,0x85,0xc1,0xc1,0xe5,0x7d,0x3f,0xd8,0x3c,0x7e,0x77,0xc0,0x7d,0xf0,0x3b,0xf6,0x30,0x7f,0x41,0xef,0xc0,0xfd,0x87,0x93,0xc8,0x1f,0x5b,0xfc,0xf9,0xfc,0x81,0x4a,0xea,0x28,0xd,0x1,0x1e,0x80,0x4,0x98,0x0,0xca,0x4,0xbf,0x50,0x2,0x46,0x1a,0xa7,0xd0,0x6f,0xb8,0x3d,0xbe,0xf,0xf7,0x7,0x93,0x40,0x60,0x40,0xf2,0x83,0xff,0x1,0xef,0x88,0x89,0x41,0x81,0xe4,0x0,0x10,0x7c,0x42,0xa1,0xc0,0xfd,0x83,0x47,0x83,0xfe,0xf,0xd1,0xff,0x17,0xd4,0x1f,0x27,0xf5,0x7,0xf8,0x3e,0x27,0xb,0xf3,0x7,0xd0,0x28,0xe0,0x3e,0x0,0x21,0x4f,0xc1,0xea,0xa,0x30,0x4a,0x80,0x3c,0x1,0xe0,0xf,0x0,0x50 -}; - -const uint8_t _A_L0_SdOk_128x51_3[] = { - 0x1,0x0,0x26,0x1,0x0,0x78,0x3,0xc0,0x1e,0x0,0xf8,0x7,0xfc,0x0,0x33,0xf0,0x75,0x60,0x1,0xe5,0x7f,0x7,0xde,0x4e,0x49,0x49,0xb9,0x3,0xfc,0xe,0x54,0xec,0xe,0x0,0x8,0x35,0x48,0x20,0x3e,0x2a,0x20,0xf3,0xa8,0x3,0xeb,0xc3,0xdc,0x9c,0xc9,0x2a,0xb1,0xc8,0x19,0x3d,0xeb,0xf9,0x1c,0x94,0x90,0x1e,0x3a,0x48,0x20,0x3d,0xea,0x20,0xf5,0x83,0x83,0xf8,0xff,0x3,0xf1,0xce,0x4e,0x3b,0x15,0x41,0xfc,0xa7,0xfc,0x1f,0xe0,0xff,0x7,0xcc,0x1f,0xf8,0xf,0xdf,0xcf,0xcc,0x1e,0x8a,0xa1,0xb8,0x47,0x80,0xa5,0x40,0xff,0xff,0xbd,0xe0,0xf6,0xc4,0x48,0x80,0xa5,0xa0,0xbf,0xff,0xfb,0xe0,0xf1,0xb0,0x4b,0xa3,0x38,0x79,0xcc,0x22,0x45,0x8c,0x9d,0xc1,0xfa,0x1b,0xff,0xfe,0xfc,0x1e,0x31,0x9,0x4e,0x96,0x89,0x4a,0xb8,0x48,0xaa,0x58,0xa8,0x27,0xc0,0x1e,0x92,0x9,0x4e,0xf4,0x1e,0x38,0x9,0x15,0x8,0x1e,0x5d,0xf3,0x70,0x83,0xc6,0x81,0x29,0xc2,0x83,0xc4,0x7e,0x21,0xf3,0x7,0x8d,0xcc,0x1e,0x33,0xe,0x74,0x63,0xf,0x49,0x2f,0x8e,0x32,0x17,0x7,0x7,0x95,0xc4,0xff,0x60,0xf1,0xf9,0xde,0x1,0xf7,0xc0,0xef,0xd8,0xef,0x80,0xfd,0x83,0xdf,0x81,0xfb,0xf,0x2f,0x90,0x3e,0xb7,0xf9,0xf3,0xf9,0x2,0x95,0xd4,0x50,0x1a,0x2,0x3d,0x0,0x9,0x30,0x1,0x94,0x9,0x7e,0xa0,0x4,0x8c,0x35,0x4f,0xa0,0xdf,0x70,0x7b,0x7c,0x1f,0xee,0xf,0x26,0x80,0xc0,0x81,0xe5,0x7,0xfe,0x3,0xdf,0x11,0x12,0x83,0x3,0xc8,0x0,0x20,0xf8,0x85,0x43,0x81,0xfb,0x6,0x8f,0x7,0xfc,0x1f,0xa3,0xfe,0x2f,0xa8,0x3e,0x4f,0xea,0xf,0xf0,0x7c,0x4e,0x17,0xe6,0xf,0xa0,0x51,0xc0,0x7c,0x0,0x42,0x9f,0x83,0xd4,0x14,0x60,0x95,0x0,0x78,0x3,0xc0,0x1e,0x0,0xa0 -}; - - -const uint8_t * const _A_L0_SdOk_128x51[] = { - - _A_L0_SdOk_128x51_0, - - _A_L0_SdOk_128x51_1, - - _A_L0_SdOk_128x51_2, - - _A_L0_SdOk_128x51_3, - -}; - - - -const uint8_t L0_SdOk_128x51_frame_order[] = { 0, 1, 2, 3 }; - -const BubbleAnimation BA_L0_SdOk_128x51 = { - .icon_animation = { - .width = 128, - .height = 51, - .frame_count = 4, - .frame_rate = 2, - .frames = _A_L0_SdOk_128x51 - }, - .frame_order = L0_SdOk_128x51_frame_order, - .passive_frames = 4, - .active_frames = 0, - .active_cooldown = 0, - .active_cycles = 0, - .duration = 0, - - .frame_bubble_sequences = NULL, - .frame_bubble_sequences_count = 0, - -}; - - -const uint8_t _A_L0_Url_128x51_0[] = { - 0x1,0x0,0x2d,0x1,0x0,0x78,0x3,0xc0,0x1e,0x0,0xf8,0x7,0xfc,0x0,0x33,0xf0,0x75,0x60,0x1,0xe5,0x7f,0x7,0xde,0x4e,0x49,0x49,0xb9,0x3,0xfc,0x16,0xf0,0x38,0x80,0x3f,0x28,0x10,0x40,0x7f,0x58,0x27,0x10,0x32,0x7d,0xd0,0x32,0xd9,0x8,0x20,0x3f,0x32,0x80,0xff,0x7,0xee,0x2,0xc7,0x10,0x1f,0xe2,0x7f,0xc1,0xfe,0xf,0xf0,0x7d,0x7e,0x1,0x89,0x4,0x7,0x9c,0x1c,0x1e,0x71,0xca,0xc,0x16,0x1,0x8,0x7,0x94,0xa,0x81,0xff,0xfc,0xff,0x1,0xe5,0xba,0x91,0x40,0x41,0xe5,0x2,0x0,0x8e,0x83,0xff,0x8e,0xfd,0x83,0xcb,0xe5,0x22,0xba,0xc3,0xb9,0xd2,0x4c,0x96,0x3a,0x7,0xd0,0xbf,0xfe,0xfe,0xe0,0xf2,0x9f,0x58,0xb2,0xb1,0x29,0x4c,0x97,0x23,0x52,0x81,0x7c,0x37,0xff,0xdf,0x78,0x3c,0xaf,0x52,0x20,0x78,0xfa,0x41,0xeb,0xff,0x7,0xa4,0x8c,0x3e,0x5a,0x4c,0x80,0x3c,0xbb,0xf1,0xfe,0xf8,0x3c,0xbf,0x92,0x1b,0xad,0x3b,0x9d,0x98,0xf0,0xf,0xc4,0x1e,0x3e,0xfe,0xf1,0xfd,0x22,0x5,0xc1,0x0,0x8,0xc,0x41,0xe3,0xff,0x7,0x98,0x0,0x41,0xed,0xc0,0x16,0x88,0xbc,0xc0,0x10,0xf,0x1d,0xf8,0x3f,0x4b,0xea,0xf,0xad,0xf8,0x3e,0x3f,0xd,0xa1,0x80,0xd0,0x2f,0xff,0xff,0x38,0x3d,0xe0,0xc5,0x2,0x5f,0x8f,0xfb,0x86,0xf,0x78,0x1b,0xc4,0xba,0xd,0xf1,0xc0,0x3,0xef,0xe0,0xff,0x18,0x38,0x3d,0xf8,0x78,0x98,0x40,0x3c,0xbf,0xf0,0xfb,0xf0,0x3d,0xa4,0x74,0xa8,0xc0,0x3c,0xe3,0xf7,0xc0,0x7b,0xca,0xa7,0x0,0xf3,0x9f,0xde,0x1,0xef,0x1a,0xbc,0x3,0xce,0xfe,0xf,0x80,0xfa,0xff,0xc1,0xf0,0x3f,0x51,0x0,0x97,0xf4,0x1f,0x7,0xf5,0x7,0xf8,0x3e,0x60,0xeb,0xf2,0x7,0xdf,0xf9,0xbe,0x5e,0x0,0x79,0x4f,0xc1,0xed,0xfc,0x5,0x8,0x25,0x80,0x1e,0x0,0xf0,0x7,0x80,0x24 -}; - -const uint8_t _A_L0_Url_128x51_1[] = { - 0x1,0x0,0x2d,0x1,0x0,0x78,0x3,0xc0,0x1e,0x0,0xf8,0x7,0xfc,0x0,0x33,0xf0,0x75,0x60,0x1,0xe5,0x7f,0x7,0xde,0x4e,0x49,0x49,0xb9,0x3,0xfc,0x16,0xf0,0x38,0x80,0x3f,0x28,0x10,0x40,0x7f,0x58,0x27,0x10,0x32,0x7d,0xd0,0x32,0xd9,0x8,0x20,0x3f,0x32,0x80,0xff,0x7,0xee,0x2,0xc7,0x10,0x1f,0xe2,0x7f,0xc1,0xfe,0xf,0xf0,0x7d,0x7e,0x1,0x89,0x4,0x7,0x9c,0x7f,0xf8,0xf,0x28,0xe5,0x6,0xb,0x0,0x84,0x3,0xca,0x5,0x40,0xff,0xf9,0xfe,0x60,0xf2,0xdd,0x48,0xa0,0x20,0xf2,0x81,0x0,0x47,0x41,0xff,0x9d,0xfb,0x81,0xe5,0xf2,0x91,0x5d,0x61,0xdc,0xe9,0x26,0x4b,0x1d,0x3,0xe8,0x7f,0xfd,0xbd,0xf0,0x79,0x4f,0xac,0x59,0x58,0x94,0xa6,0x4b,0x91,0xa9,0x40,0xbe,0x1f,0xff,0xb6,0xfc,0x1e,0x57,0xa9,0x10,0x3c,0x7d,0x20,0xf5,0xff,0x3,0xd2,0x46,0x1f,0x2d,0x26,0x40,0x1e,0x57,0xf8,0xfd,0xfc,0x1e,0x5f,0xc9,0xd,0xd6,0x9d,0xce,0xcc,0x78,0x7,0xe2,0xf,0x1f,0x7d,0xf8,0xfe,0x91,0x2,0xe0,0x80,0x4,0x6,0x20,0xf1,0xff,0x83,0xcc,0x0,0x20,0xf6,0xe0,0xb,0x44,0x5e,0x60,0x8,0x7,0x89,0x38,0x41,0xf8,0x5f,0x50,0x7d,0x6f,0x81,0xf1,0xf8,0x6d,0xc,0x5,0x7e,0x3f,0xdc,0xf8,0x3d,0xe0,0xc5,0x2,0x5f,0x8f,0xee,0x1e,0xf,0x78,0x1b,0xc4,0x97,0xe3,0xe7,0x81,0xdf,0x81,0xf4,0xaf,0x18,0xfc,0x72,0xf8,0xf,0x6e,0x1e,0x26,0x10,0xf,0x2f,0xfc,0xfe,0xf0,0xf,0x69,0x1d,0x2a,0x30,0xf,0x3b,0xfd,0xc0,0x1e,0xf2,0xa9,0xc0,0x3c,0xff,0xf6,0x0,0x7b,0xc6,0xaf,0x0,0xf4,0xb0,0x87,0xfa,0xc6,0x3f,0xd2,0x0,0x97,0xf4,0x1f,0x7,0xf5,0x7,0xf8,0x3e,0x60,0xeb,0xf2,0x7,0xdf,0xf9,0xbe,0x5e,0x0,0x79,0x4f,0xc1,0xed,0xfc,0x5,0x8,0x25,0x80,0x1e,0x0,0xf0,0x7,0x80,0x24 -}; - -const uint8_t _A_L0_Url_128x51_2[] = { - 0x1,0x0,0x29,0x1,0x0,0x78,0x3,0xc0,0x1e,0x0,0xf8,0x7,0xfc,0x0,0x33,0xf0,0x75,0x60,0x1,0xe5,0x7f,0x7,0xde,0x4e,0x49,0x49,0xb9,0x3,0xfc,0x16,0xf0,0x38,0x80,0x3f,0x28,0x10,0x40,0x7f,0x58,0x27,0x10,0x32,0x7d,0xd0,0x32,0xd9,0x8,0x20,0x3f,0x32,0x80,0xff,0x7,0xee,0x2,0xc7,0x10,0x1f,0xe2,0x7f,0xc1,0xfe,0xf,0xf0,0x7d,0x7e,0x1,0x89,0x4,0x7,0xc4,0x72,0x83,0x5,0x80,0x42,0x1,0xe5,0x2,0xa0,0x3,0xd7,0x75,0x22,0x80,0x83,0xca,0x4,0x1,0x1d,0x7,0xfe,0x3f,0xfc,0x7,0x97,0xca,0x45,0x75,0x87,0x73,0xa4,0x99,0x2c,0x74,0xf,0xa1,0xff,0xf3,0xfc,0xc1,0xe5,0x3e,0xb1,0x65,0x62,0x52,0x99,0x2e,0x46,0xa5,0x2,0xf8,0x7f,0xe7,0x7e,0xe0,0x79,0x5e,0xa4,0x40,0xf1,0xf4,0x83,0xd7,0xdb,0xdf,0x7,0x9c,0x8c,0x3e,0x5a,0x4c,0x80,0x3c,0xe2,0xdb,0xf0,0x79,0x7f,0x24,0x37,0x5a,0x77,0x3b,0x31,0xe0,0x1f,0x88,0x3c,0x7d,0xdb,0xe3,0xfa,0x44,0xb,0x82,0x0,0x10,0x18,0xfc,0x2f,0xff,0xfb,0xf2,0x7d,0x1,0xed,0xc0,0xbf,0x80,0x9,0x5f,0x40,0xf1,0x1f,0x8,0x3f,0x53,0xc2,0x1f,0xf0,0x7b,0xfe,0x17,0x43,0x1,0x5f,0x8f,0xf8,0xde,0x60,0x4,0x83,0x14,0x9,0x7e,0x20,0xf9,0x81,0xbc,0x49,0x7e,0x3f,0xdc,0xf8,0x3e,0xd1,0xe3,0xfb,0x87,0x83,0xdf,0x87,0x89,0x84,0x3,0xcb,0xcf,0x3,0xbf,0x3,0xda,0x47,0x4a,0x8c,0x3,0xca,0x3f,0x1c,0xbe,0x3,0xde,0x55,0x38,0x7,0x97,0xfe,0x7f,0x78,0x7,0xbc,0x6a,0xf0,0xf,0x3b,0xfd,0xc0,0x3f,0xbf,0xfb,0x0,0xff,0x0,0x3,0x61,0x2f,0xe0,0x0,0x6c,0x67,0xfc,0x20,0x10,0x3f,0xc1,0xed,0x7,0x5f,0x90,0x3e,0xff,0xcd,0xf2,0xf0,0x3,0xca,0x7e,0xf,0x6f,0xe0,0x28,0x41,0x2c,0x0,0xf0,0x7,0x80,0x3c,0x1,0x20 -}; - -const uint8_t _A_L0_Url_128x51_3[] = { - 0x1,0x0,0x2a,0x1,0x0,0x78,0x3,0xc0,0x1e,0x0,0xf8,0x7,0xfc,0x0,0x33,0xf0,0x75,0x60,0x1,0xe5,0x7f,0x7,0xde,0x4e,0x49,0x49,0xb9,0x3,0xfc,0x16,0xf0,0x38,0x80,0x3f,0x28,0x10,0x40,0x7f,0x58,0x27,0x10,0x32,0x7d,0xd0,0x32,0xd9,0x8,0x20,0x3f,0x32,0x80,0xff,0x7,0xee,0x2,0xc7,0x10,0x1f,0xe2,0x7f,0xc1,0xfe,0xf,0xf0,0x7d,0x7e,0x1,0x89,0x4,0x7,0xc4,0x72,0x83,0x5,0x80,0x42,0x1,0xe5,0x2,0xa0,0x3,0xd7,0x75,0x22,0x80,0x83,0xca,0x4,0x1,0x1d,0x7,0xfe,0xe,0xf,0x3f,0x94,0x8a,0xeb,0xe,0xe7,0x49,0x32,0x58,0xe8,0x1f,0x43,0xff,0xf9,0xfe,0x3,0xca,0x7d,0x62,0xca,0xc4,0xa5,0x32,0x5c,0x8d,0x4a,0x5,0xf0,0xff,0xe3,0xbf,0x60,0xf2,0xbd,0x48,0x81,0xe3,0xe9,0x7,0xa5,0xff,0xf7,0xf7,0x7,0x9c,0x8c,0x3e,0x5a,0x4c,0x80,0x3c,0xb7,0xf1,0xdf,0x78,0x3c,0xbf,0x92,0x1b,0xad,0x3b,0x9d,0x98,0xf0,0xf,0xc4,0x1e,0x3e,0xff,0x71,0xfd,0x22,0x5,0xc1,0x0,0x8,0xc,0x7e,0x1d,0xff,0xff,0x79,0x3e,0x80,0xf6,0xe0,0x77,0xef,0xe0,0x11,0x57,0xd0,0x3c,0x77,0xe0,0xfe,0xff,0x87,0xfc,0x1f,0x1f,0x85,0xd0,0xc0,0x68,0x1b,0xff,0xf9,0xbc,0xc0,0x9,0x6,0x28,0x16,0x80,0x1f,0x50,0x37,0x89,0x74,0x2f,0xff,0xff,0x38,0x3e,0xd7,0xe3,0xfe,0xe1,0x83,0xdf,0x87,0x89,0x84,0x3,0xcb,0xf3,0x80,0x7,0xbc,0x8e,0x95,0x18,0x7,0x94,0x1e,0xe,0xf,0x89,0x54,0xe0,0x1e,0x5f,0xf8,0x7d,0xf8,0x1e,0xf1,0xab,0xc0,0x3c,0xe3,0xf7,0xc0,0xfe,0xcf,0xef,0x3,0xfc,0xff,0xdf,0xc1,0xee,0x5f,0x50,0x0,0x83,0xdc,0xfe,0xa2,0x2,0x7,0xf8,0x3d,0xa0,0xeb,0xf2,0x7,0xdf,0xf9,0xbe,0x5e,0x0,0x79,0x4f,0xc1,0xed,0xfc,0x5,0x8,0x25,0x80,0x1e,0x0,0xf0,0x7,0x80,0x24 -}; - - -const uint8_t * const _A_L0_Url_128x51[] = { - - _A_L0_Url_128x51_0, - - _A_L0_Url_128x51_1, - - _A_L0_Url_128x51_2, - - _A_L0_Url_128x51_3, - -}; - - - -const uint8_t L0_Url_128x51_frame_order[] = { 0, 1, 2, 3 }; - -const BubbleAnimation BA_L0_Url_128x51 = { - .icon_animation = { - .width = 128, - .height = 51, - .frame_count = 4, - .frame_rate = 2, - .frames = _A_L0_Url_128x51 - }, - .frame_order = L0_Url_128x51_frame_order, - .passive_frames = 4, - .active_frames = 0, - .active_cooldown = 0, - .active_cycles = 0, - .duration = 0, - - .frame_bubble_sequences = NULL, - .frame_bubble_sequences_count = 0, - -}; - - -const uint8_t _A_L0_NewMail_128x51_0[] = { - 0x1,0x0,0x50,0x1,0x0,0x78,0x3,0xc0,0x1e,0x0,0xf0,0x7,0x80,0x3c,0x1,0xe0,0x6,0xf8,0x40,0x40,0x63,0x30,0xfb,0x73,0x61,0x80,0xf7,0xfe,0x41,0xc0,0x63,0x70,0x9b,0x73,0x1,0xf1,0xfe,0x87,0x83,0xf7,0xff,0x1f,0x1,0x8e,0xc3,0xed,0xd9,0x83,0x3,0xdf,0x7e,0xf,0x39,0xb7,0x60,0x1e,0xf8,0xc,0xfc,0xfc,0x9e,0x53,0x7f,0xc1,0x14,0x81,0xeb,0xbf,0x7,0xa4,0xc2,0x6,0xa,0x2f,0xf8,0x0,0xc1,0xe9,0xf6,0x98,0x83,0xcb,0x80,0x1f,0x80,0x2,0xd0,0x11,0x24,0xf,0xc8,0x10,0x14,0xe1,0xf1,0xe0,0x7c,0x41,0xf,0xef,0xc,0xe3,0x6c,0x6c,0x20,0xf2,0x84,0x27,0xde,0x39,0xc7,0x7,0xa4,0x40,0x1e,0x7f,0xd3,0xc9,0x47,0x2c,0xfb,0x30,0x79,0xc8,0x9,0xe6,0xdf,0x3d,0xe0,0x3d,0x68,0x4,0x43,0x2,0x1e,0xb3,0xcd,0xb3,0x90,0x82,0x8b,0x0,0xa,0x29,0x0,0x3c,0xfd,0x93,0x6d,0xb0,0x3c,0xe0,0x2,0xa2,0x88,0x3,0xce,0x98,0xf,0x10,0x51,0x2,0x45,0x0,0x50,0x80,0x7b,0x5b,0xc1,0xe6,0x80,0x28,0x20,0x3c,0xd1,0xec,0x1c,0x10,0x20,0xc0,0x81,0xf6,0x80,0x28,0x8,0x3e,0xe6,0x7,0xe1,0x7,0xe5,0x21,0xa6,0x40,0xfb,0xc2,0x1f,0x84,0x9e,0x9f,0xef,0xf8,0x0,0x4e,0x2,0x6f,0x28,0xc,0x40,0xde,0x63,0x41,0x9,0x91,0xec,0x51,0xe5,0x2,0x84,0x23,0xcf,0x80,0x2d,0x33,0xd8,0xab,0xca,0x9,0x4,0x57,0x98,0x3d,0xc1,0x43,0xf8,0x81,0xb3,0xcf,0x81,0x8,0x16,0xc,0x20,0x1e,0x4e,0xf4,0x7,0x9c,0x62,0x7,0x0,0x8c,0x3,0xc9,0x1c,0x40,0x1,0xa0,0x83,0xcb,0x51,0x32,0xb3,0xce,0x1,0xe4,0xae,0x20,0x0,0xd0,0x81,0xe5,0x48,0xa5,0x64,0x6f,0x0,0xf2,0x67,0x10,0x0,0x68,0x83,0xf3,0xa5,0x7c,0x43,0xe6,0xee,0x20,0x0,0xa8,0xc4,0x1e,0x71,0x11,0xf9,0xa1,0x8e,0x1,0x50,0x7,0x9c,0xca,0xc2,0x5f,0x23,0xb2,0x40,0x2c,0x7,0xf8,0xc0,0x2d,0x48,0x0,0x33,0xf0,0x7c,0x0,0x23,0x80,0xbf,0x50,0x4,0xa,0x10,0x98,0x80,0x6,0x7,0x98,0x3a,0x80,0x1e,0x0,0xf0,0x7,0x80,0x14 -}; - -const uint8_t _A_L0_NewMail_128x51_1[] = { - 0x1,0x0,0x5d,0x1,0x0,0x78,0x3,0xc0,0x1e,0x0,0xf0,0x7,0x80,0x3c,0x1,0xe0,0xa,0x98,0x7d,0xb9,0xb0,0xc0,0x7d,0xdc,0x26,0xdc,0xc0,0x7f,0x83,0xe3,0xe1,0x1,0x1,0x8e,0xc3,0xed,0xd9,0x83,0x3,0x13,0xfd,0xf,0x80,0x7f,0x20,0xe0,0xf2,0x9b,0x76,0x1,0xe9,0xc0,0x80,0xdc,0x2,0x46,0x4f,0x19,0xbf,0xe0,0x2a,0x40,0x1,0x9c,0x7f,0xb1,0xf0,0x3f,0xfc,0x7c,0x1e,0x73,0x8,0x18,0x38,0xb0,0x1c,0x7f,0xfd,0xfe,0x79,0xbf,0x7,0x9f,0xda,0x62,0xf,0x3b,0x87,0xf3,0xff,0xff,0xe3,0xe7,0xe7,0xe6,0x68,0xe7,0x3,0x84,0x0,0x3b,0xf0,0x7c,0x60,0x1,0xc6,0xf,0xae,0x0,0x3e,0x21,0x9c,0x6d,0x8d,0x84,0xa,0x34,0x0,0x7c,0x47,0x38,0xe0,0xf4,0x41,0xa4,0x3e,0x3c,0xf,0x2b,0x3e,0xcc,0x1e,0x70,0x40,0x79,0x9f,0xcf,0x78,0xf,0x58,0x42,0xc9,0xa0,0x1a,0xcf,0x36,0xce,0x42,0xf,0x28,0x80,0x3c,0xff,0xaa,0x92,0xf6,0x4d,0xb6,0xc0,0xf3,0xd0,0x13,0x8d,0xbe,0x74,0xc0,0x78,0x81,0x4a,0x81,0x40,0xf,0x10,0x11,0x1,0xe5,0x6f,0x5,0x16,0x0,0x14,0x52,0x0,0x79,0x80,0x14,0x12,0x22,0x42,0x88,0x3,0xef,0xfc,0x3f,0x18,0x78,0x3e,0xf0,0x82,0xe1,0x82,0x3,0xee,0x90,0x3,0x18,0x10,0x3e,0xe6,0xe,0x31,0x80,0x83,0xcc,0x6e,0x5f,0xf2,0x58,0x82,0x45,0x20,0x40,0xf3,0xa,0x8,0x4c,0xa0,0x40,0xf2,0x58,0x10,0xbc,0xf8,0x2,0xd3,0x66,0x8,0x24,0x5a,0x4,0x4f,0x30,0x7c,0x8,0xc4,0x44,0x20,0xf3,0x84,0x2,0x6,0x10,0xf,0x34,0x7b,0x70,0x23,0x10,0x38,0x4,0x60,0x1e,0x4a,0xf7,0xe0,0x6a,0x26,0x56,0x79,0xc0,0x3c,0x99,0xef,0xc0,0xa4,0x52,0xb2,0x37,0x80,0x79,0x48,0x1,0xe5,0x80,0x1f,0xa5,0x2b,0xe2,0x1f,0x33,0xf1,0x0,0x6,0x82,0xf,0x48,0x88,0xfc,0xcf,0xc4,0x0,0x1a,0x10,0x3c,0xe6,0x56,0x12,0xf9,0x9f,0x88,0x0,0x34,0x43,0xfc,0x9f,0x88,0x0,0x2d,0x31,0x7,0xc2,0xd8,0xe0,0x15,0x0,0x79,0x2f,0xd4,0x2c,0x90,0xb,0x1,0x8c,0x9b,0xc4,0xdf,0x20,0x32,0x7f,0xe7,0xe1,0x32,0x3,0x98,0x71,0x0,0x1e,0x0,0xf0,0x7,0x80,0x2c -}; - -const uint8_t _A_L0_NewMail_128x51_2[] = { - 0x1,0x0,0x79,0x1,0x0,0x78,0x3,0xc0,0x1e,0x0,0xf0,0x1,0xfc,0x20,0x20,0xfd,0x84,0x40,0x81,0xfb,0xf6,0x86,0x83,0xf7,0xf3,0x13,0x3,0x24,0xc3,0xed,0xcd,0x86,0x1,0xcf,0x81,0xfe,0xb7,0x83,0xd2,0xe1,0x36,0xe6,0x3,0xd2,0x41,0xff,0xcf,0x83,0xf3,0xb1,0xff,0xbf,0xc0,0xc0,0xe7,0xb0,0xfb,0x76,0x60,0xc0,0x73,0xf2,0x7f,0xff,0xf0,0x40,0x7a,0x4d,0xbb,0x0,0xf4,0xfd,0x83,0xc6,0x36,0x82,0x39,0x84,0xdf,0xf1,0x7,0x7,0x16,0x3,0xf8,0xf,0x19,0x3f,0xf0,0x12,0x40,0xf1,0x98,0xd,0xcc,0x1c,0x40,0x2,0x87,0x9b,0xce,0x62,0xf,0x31,0xda,0x7f,0xe3,0xe8,0xd8,0x7,0xa6,0xfc,0x1f,0x25,0x33,0xc0,0x67,0xe7,0xe0,0xf8,0x82,0x83,0xcf,0x7e,0xf,0x28,0x67,0x1b,0x63,0x61,0x5,0x16,0x1c,0x9a,0x5b,0xf0,0x79,0xc7,0x38,0xe0,0xf3,0xe0,0x1c,0xd0,0x1e,0x96,0x7d,0x98,0x3c,0xa8,0x0,0xf8,0xde,0x3,0xd5,0x46,0x90,0xf8,0xf0,0xc,0x75,0x9e,0x6d,0x9c,0x84,0x1e,0x58,0x41,0xf9,0x4f,0xcf,0xe7,0xec,0x9b,0x6d,0x81,0xe7,0x8,0xf,0x9f,0xf9,0x3e,0x54,0xc0,0x78,0xb1,0x4a,0x81,0x10,0x7,0x9f,0xf4,0x8a,0x40,0xf2,0xb7,0x83,0xca,0x40,0x4f,0x36,0xf9,0x80,0x16,0x81,0xc0,0x1f,0x95,0xfe,0x80,0x9e,0x8a,0x6,0x0,0x8,0x52,0x0,0x7d,0x40,0x5,0x45,0x10,0x7,0xdc,0x8,0xd8,0x30,0x80,0x7d,0xff,0x20,0x1e,0x8,0x38,0x3c,0xff,0xc4,0x82,0x15,0x88,0x24,0x69,0x0,0x31,0x81,0x3,0xcb,0x0,0x62,0x38,0x10,0x3c,0xa6,0x0,0xa2,0x7,0x97,0x0,0x5a,0x70,0x40,0x79,0x24,0x8,0x1f,0x8b,0x2,0x17,0x9f,0x2,0x10,0x2c,0x18,0x40,0x3c,0xc0,0x62,0x2,0x10,0x79,0xc6,0x20,0x70,0x8,0xc0,0x3c,0xc2,0xc2,0x17,0x10,0x79,0xea,0x26,0x56,0x79,0xc0,0x3c,0xd1,0xed,0xc0,0xa4,0x52,0xb2,0x37,0x80,0x79,0x2b,0xdc,0x7e,0x34,0xaf,0x88,0x7c,0xd1,0x46,0x4,0x30,0x79,0x44,0x47,0xe6,0xef,0x40,0x7a,0x4c,0xac,0x25,0xf3,0x3f,0x10,0x0,0x68,0x27,0xf9,0x3f,0x10,0x0,0x68,0x40,0xf9,0x3f,0x10,0x0,0x68,0x80,0xf2,0x5f,0xb1,0xf8,0x80,0x2,0xd3,0x12,0x18,0xb7,0x89,0xbe,0x61,0x63,0x80,0x54,0x0,0x64,0xf,0x31,0xb3,0x40,0x2c,0x0,0x54,0x0,0x18,0x99,0x3f,0xf3,0xf0,0x7c,0x0,0x3c,0x1,0xc0 -}; - -const uint8_t _A_L0_NewMail_128x51_3[] = { - 0x1,0x0,0x77,0x1,0x0,0x1f,0xe2,0x6,0xf,0xd8,0x24,0x10,0x1f,0xbf,0xa8,0x58,0x3f,0x7f,0xb1,0x70,0x76,0x60,0x3f,0xd2,0xf0,0x7e,0x50,0x3f,0xf5,0xf0,0x7e,0x68,0x3f,0xfb,0xf0,0x7e,0x74,0x3f,0xf7,0xf8,0x8,0x1c,0xe6,0x1f,0x6e,0x6c,0x30,0xc,0x5f,0xcf,0xf8,0x0,0xa0,0xe0,0x82,0xb8,0x4d,0xb9,0x80,0xf3,0x3e,0x20,0x10,0xc1,0xff,0xb0,0xfb,0x76,0x60,0xc0,0xfc,0x9b,0x76,0x1,0xf9,0x30,0x9b,0xfe,0x8,0xc7,0x84,0x27,0x14,0xff,0xe8,0x61,0x20,0x78,0xcc,0x1b,0x6,0x1f,0x4f,0xe0,0x64,0x8d,0xe3,0x31,0x7,0xc7,0xfa,0x1e,0xed,0x90,0x21,0xff,0xe3,0xe0,0xf8,0x1f,0xa6,0xfc,0x1f,0x26,0x33,0xc0,0x67,0xe7,0xe0,0x41,0x86,0x71,0xb6,0x36,0x10,0x59,0x41,0x41,0xe7,0xbf,0x7,0x94,0x73,0x8e,0xf,0x3c,0x0,0x7d,0x1,0xe9,0x67,0xd9,0x83,0xcb,0x81,0x87,0x1f,0x96,0xfc,0x1e,0x7b,0xc0,0x7a,0x50,0x12,0x66,0x1f,0x4d,0x67,0x9b,0x67,0x21,0x7,0x90,0xbc,0xe0,0x10,0xf8,0xf0,0xc,0x7d,0x93,0x6d,0xb0,0x3c,0xcf,0xf1,0x4c,0x7,0x8a,0xd4,0xa8,0x18,0x83,0xf9,0xa7,0xcc,0x1e,0x56,0xf0,0x79,0x44,0x3,0xe7,0xfd,0x22,0x98,0x1,0x28,0x12,0x2,0x79,0xfc,0x5,0x24,0xf,0x6a,0x0,0x11,0xc1,0xed,0x80,0x1f,0x98,0x3e,0xa0,0x2,0xa2,0x88,0x3,0xee,0x4,0x6c,0x18,0x40,0x3c,0xff,0xc2,0x82,0xd,0x88,0x24,0x70,0x90,0x9,0x4,0x10,0x1e,0x58,0x2,0x91,0xc0,0x81,0xe5,0x48,0x1,0x8c,0x8,0x1e,0x5c,0x1,0x69,0xa7,0x4,0x12,0x33,0x0,0xd1,0x3,0xed,0x20,0x40,0xf4,0x84,0xb,0x6,0x10,0xf,0x38,0x40,0xd8,0x81,0xe7,0x18,0x81,0xc0,0x23,0x0,0xf3,0x68,0x11,0x3c,0xf8,0x1a,0x89,0x95,0x9e,0x70,0xf,0x31,0x30,0x88,0x84,0x1e,0x74,0x8a,0x56,0x46,0xf0,0xf,0x34,0x7b,0xf,0xc6,0x95,0xf1,0xf,0x9e,0x0,0xac,0x52,0x0,0x7a,0xc4,0x47,0xe6,0xcf,0x70,0x78,0xcc,0xac,0x25,0xf3,0x77,0xa1,0xfe,0x8f,0xc4,0x0,0x1a,0x8,0x3e,0x4f,0xc4,0x0,0x1a,0x10,0x3c,0x97,0xec,0x7e,0x20,0x0,0xd1,0x6,0x64,0xde,0x26,0xf9,0x9f,0x88,0x0,0x2d,0x31,0x0,0x8,0x3c,0xcb,0x44,0x26,0x38,0x5,0x40,0x8,0x60,0x4,0x23,0x24,0x2,0xc0,0xf,0x81,0xb2,0x7f,0xe7,0xe0,0xf8,0x0,0x70 -}; - - -const uint8_t * const _A_L0_NewMail_128x51[] = { - - _A_L0_NewMail_128x51_0, - - _A_L0_NewMail_128x51_1, - - _A_L0_NewMail_128x51_2, - - _A_L0_NewMail_128x51_3, - -}; - - - -const uint8_t L0_NewMail_128x51_frame_order[] = { 0, 1, 2, 3, 2, 1 }; - -const BubbleAnimation BA_L0_NewMail_128x51 = { - .icon_animation = { - .width = 128, - .height = 51, - .frame_count = 4, - .frame_rate = 2, - .frames = _A_L0_NewMail_128x51 - }, - .frame_order = L0_NewMail_128x51_frame_order, - .passive_frames = 6, - .active_frames = 0, - .active_cooldown = 0, - .active_cycles = 0, - .duration = 0, - - .frame_bubble_sequences = NULL, - .frame_bubble_sequences_count = 0, - -}; - - -const StorageAnimation dolphin_blocking[] = { - - { - .animation = &BA_L0_NoDb_128x51, - .manifest_info = { - .name = "L0_NoDb_128x51", - .min_butthurt = 0, - .max_butthurt = 0, - .min_level = 0, - .max_level = 0, - .weight = 0, - } - }, - - { - .animation = &BA_L0_SdBad_128x51, - .manifest_info = { - .name = "L0_SdBad_128x51", - .min_butthurt = 0, - .max_butthurt = 0, - .min_level = 0, - .max_level = 0, - .weight = 0, - } - }, - - { - .animation = &BA_L0_SdOk_128x51, - .manifest_info = { - .name = "L0_SdOk_128x51", - .min_butthurt = 0, - .max_butthurt = 0, - .min_level = 0, - .max_level = 0, - .weight = 0, - } - }, - - { - .animation = &BA_L0_Url_128x51, - .manifest_info = { - .name = "L0_Url_128x51", - .min_butthurt = 0, - .max_butthurt = 0, - .min_level = 0, - .max_level = 0, - .weight = 0, - } - }, - - { - .animation = &BA_L0_NewMail_128x51, - .manifest_info = { - .name = "L0_NewMail_128x51", - .min_butthurt = 0, - .max_butthurt = 0, - .min_level = 0, - .max_level = 0, - .weight = 0, - } - }, - -}; - -const size_t dolphin_blocking_size = COUNT_OF(dolphin_blocking); diff --git a/assets/compiled/assets_dolphin_blocking.h b/assets/compiled/assets_dolphin_blocking.h deleted file mode 100644 index ba3996ca1..000000000 --- a/assets/compiled/assets_dolphin_blocking.h +++ /dev/null @@ -1,7 +0,0 @@ -#pragma once - -#include -#include - -extern const StorageAnimation dolphin_blocking[]; -extern const size_t dolphin_blocking_size; diff --git a/assets/compiled/assets_dolphin_internal.c b/assets/compiled/assets_dolphin_internal.c deleted file mode 100644 index 8400052c1..000000000 --- a/assets/compiled/assets_dolphin_internal.c +++ /dev/null @@ -1,330 +0,0 @@ -#include -#include -#include -#include - - - -const uint8_t _A_L1_Tv_128x47_0[] = { - 0x1,0x0,0xca,0x1,0x84,0x0,0x86,0x4,0xb,0x7f,0x84,0x1c,0x1f,0xb0,0xe9,0xc0,0xc,0x62,0x0,0x21,0x80,0x83,0x9b,0x1,0x1,0xe0,0x3,0xf2,0x80,0xa,0x39,0x0,0x58,0x41,0x66,0x33,0x30,0x50,0x81,0x88,0x1e,0xd0,0x50,0x19,0xa,0x8a,0x8,0x24,0x21,0x31,0x40,0x38,0x0,0x81,0x2d,0x20,0x8,0x41,0xeb,0x38,0x7,0xc0,0xb4,0x46,0xc4,0x78,0x10,0x79,0x80,0xc8,0x64,0x20,0xf4,0x86,0x2,0xcc,0x1e,0xa6,0x21,0xe8,0x40,0x21,0xe5,0x61,0x82,0x60,0x2f,0xe0,0xf7,0xa8,0x78,0x66,0x7,0x61,0x81,0x58,0x11,0xa3,0x2,0xc0,0x43,0xce,0x47,0x48,0x8f,0x25,0x8a,0x5,0x30,0x80,0x41,0x90,0x64,0xf,0x43,0xf9,0xc0,0x7f,0x5,0xb1,0x81,0x78,0x27,0xe0,0xf1,0xff,0xff,0xc7,0x2,0xba,0x20,0x30,0xc0,0x7e,0x10,0x3f,0x4,0x9f,0xc1,0x1f,0x22,0x8e,0x10,0x1e,0x56,0x1,0x39,0x2,0xc6,0xc1,0x26,0xf0,0x48,0xc4,0xc3,0x82,0x7,0x94,0x78,0x1e,0x5c,0x8,0x1f,0x2,0x27,0xc0,0xa0,0x8d,0x8a,0x7,0x0,0xf0,0x38,0x8a,0x8,0x55,0x12,0xf8,0xf0,0x11,0xc3,0x10,0x80,0xa3,0x44,0xec,0x41,0x71,0x30,0x8b,0x1c,0x81,0xe7,0xf0,0x9f,0xae,0x48,0x1e,0x20,0x43,0x7,0x96,0x80,0xa,0x34,0x0,0x51,0xc4,0x16,0x46,0xf,0xa9,0x7,0xd0,0x1e,0xbf,0x2,0x58,0x83,0xd6,0x18,0x5f,0x10,0x79,0xff,0x20,0xe0,0xf1,0x27,0x9d,0x2,0x9,0x7c,0x63,0x88,0x3c,0xbf,0xd0,0xf0,0x7a,0xe0,0x21,0x6,0xe1,0x16,0xe,0xf,0xff,0xfd,0xfb,0xaa,0xc7,0xfe,0xa6,0x10,0x78,0x9b,0xce,0x19,0x9c,0xff,0xa3,0x4,0x1e,0x51,0xd0,0x59,0x70,0x52,0xe2,0xa4,0x1d,0xc0,0x30,0x80,0x3,0x3f,0xf,0x97,0xe0,0x54,0x22,0xf1,0x45,0x88,0x3d,0x39,0xe0,0xf1,0xc0,0x15,0x87,0xff,0x3,0x26,0x8f,0x81,0xf8,0x64,0x61,0x7,0x8d,0xc0,0xa,0x3f,0xc0,0xa0,0x8f,0x10,0x0,0x3f,0x30,0x78,0xc3,0x82,0xe7,0x40,0x7,0xb7,0xd2,0x7f,0xf0,0xe0,0x83,0xd7,0xf8,0xe,0x3b,0xff,0xdf,0xbf,0xf,0xd3,0x18,0x8c,0x1e,0x3c,0x30,0x79,0xe7,0xfe,0xf1,0xfd,0x85,0xe6,0xfc,0xb3,0x3c,0x6,0x0,0x1e,0x7e,0xf0,0x78,0xd3,0xe9,0x39,0x26,0x38,0x83,0xc6,0x80,0xf,0x4f,0x9f,0xdf,0x3e,0x5,0x23,0xe8,0x83,0xc4,0x40,0x24,0x63,0xfe,0x3,0xc4,0xa,0x51,0x80,0x7a,0x7,0xcd,0x84,0x31,0xf1,0x61,0x47,0x1,0xe5,0x10,0x7,0xbc,0x8,0x18,0x31,0xe0,0x10,0xd8,0x1,0xf1,0x4,0x6,0x8,0xfc,0xae,0xf,0x31,0xf3,0x83,0xd4,0x78,0x3c,0x6,0x99,0x6f,0x1,0xe3,0xc3,0xb,0xf,0xe0,0x1e,0x56,0x6,0x18,0xdf,0xc1,0xe3,0x3f,0x83,0x83,0xc7,0x5f,0x32,0xfd,0x83,0xc5,0x6a,0x8f,0x72,0x68,0x8f,0x9c,0x3e,0xae,0x64,0x80,0x4e,0x1,0xe2,0x4f,0x60,0x7a,0xc8,0x1,0xfe,0x2f,0x20,0x7f,0x0 -}; - -const uint8_t _A_L1_Tv_128x47_1[] = { - 0x1,0x0,0xcc,0x1,0x84,0x0,0x86,0x4,0xb,0x7f,0x84,0x1c,0x1f,0xb0,0xe9,0xc0,0xc,0x62,0x0,0x21,0x80,0x83,0x9b,0x1,0x1,0xe0,0x3,0xf2,0x80,0xa,0x39,0x0,0x58,0x41,0x45,0x6,0x7,0x98,0x28,0x47,0x44,0xf,0x58,0x48,0x3c,0xc5,0x45,0x4,0x12,0x10,0x98,0x81,0xea,0x5a,0x20,0x10,0x83,0xd3,0x80,0xa,0x20,0x7b,0xb,0x44,0x6c,0x53,0x80,0x7a,0xb,0x4,0x64,0x40,0xf4,0x83,0x83,0xe4,0xc4,0x20,0x31,0x3b,0x8,0x9c,0xaf,0xe0,0xf9,0x10,0x88,0x28,0x6c,0x8,0xd1,0x81,0x60,0x21,0xe7,0x23,0xd,0x88,0x44,0x41,0xe3,0x30,0x41,0x8a,0xdc,0x81,0xea,0x1,0x10,0x50,0xfe,0x0,0xa3,0x2,0xf0,0x4f,0xc1,0xe3,0xff,0x0,0x14,0x3e,0x1,0xfe,0x2,0xc,0x7,0xe1,0x3,0xf0,0x49,0xfc,0x11,0xf1,0x50,0xc1,0x3c,0xe,0x61,0x8,0x88,0x88,0x41,0x63,0x20,0x7,0x8c,0xfc,0x4c,0x30,0x68,0xe1,0x70,0x60,0x60,0xf2,0xe0,0x40,0xf8,0x11,0x3e,0x5,0x1c,0x1e,0x31,0xa0,0x60,0xf8,0xf,0xa6,0x75,0x12,0xf8,0xf0,0x30,0x65,0xc1,0xf2,0x82,0xc6,0xf0,0xad,0x33,0x8,0xae,0x8,0x1e,0x50,0x50,0x30,0xc7,0x81,0xe6,0xa3,0x30,0x79,0x68,0x12,0xc4,0x50,0x14,0xd1,0x1,0xc8,0x1e,0x81,0x72,0x27,0x12,0x28,0x7e,0x80,0xf5,0xf8,0x44,0x60,0x10,0xe0,0xf9,0xc8,0x21,0x85,0xf1,0x7,0x9f,0xf3,0xcf,0xc0,0x84,0xc1,0x81,0xe5,0x40,0x82,0x5f,0x26,0x10,0x10,0x79,0x7f,0xa1,0xf3,0xf8,0x80,0x3c,0xf0,0x10,0x83,0x70,0x8b,0x7,0x3f,0xff,0xfe,0xfd,0xd6,0x24,0xa6,0x10,0x78,0x9b,0xce,0x19,0xbc,0xff,0xa3,0x4,0x1e,0x51,0xd0,0x59,0x70,0x54,0x87,0xf8,0x67,0x9f,0xfe,0x7e,0x1f,0x2f,0xc6,0xc,0x4a,0x4d,0x41,0x7,0xa7,0x3c,0x12,0x38,0x3,0x18,0xff,0xe0,0xf8,0x5,0xca,0x0,0x7,0xe0,0xf,0x1b,0x80,0x14,0x7f,0x90,0x10,0x79,0x7,0xd3,0xe6,0xf,0x18,0x70,0x5c,0xe8,0x0,0xf6,0xfa,0x4f,0xfe,0x1c,0x10,0x7a,0xff,0x1,0xc7,0x7f,0xfb,0xf7,0xe1,0xfa,0x63,0x11,0x83,0xc4,0x3c,0x99,0xff,0xbc,0x7f,0x61,0x79,0xbf,0x2c,0xcf,0x1,0x87,0x7,0x9f,0xbc,0x1e,0x34,0xfa,0x4e,0x4a,0x2,0xf,0x2e,0x6,0x4,0x9c,0x9f,0x75,0x30,0x80,0x8,0x1e,0x5e,0x3,0x8,0x80,0xb,0xf8,0xf,0x10,0x29,0x7e,0x1,0xe5,0x60,0xc0,0x6,0xd,0x84,0x31,0xf1,0x61,0x7f,0x1,0xe5,0x30,0x7,0xbc,0x8,0x18,0x25,0x2,0xb0,0x3,0xe2,0x8,0xc,0x1b,0xf8,0x8,0x6e,0x11,0x8c,0x7,0x9c,0x1e,0xb1,0x88,0x7,0x0,0x9e,0x5b,0xc0,0x78,0xf0,0xe1,0xe4,0x81,0x7,0x95,0x81,0x86,0x3f,0xf7,0x78,0xcf,0xe1,0xe0,0xf1,0xd7,0xcc,0xbf,0x60,0xf1,0x4b,0x23,0xdc,0x9c,0xc3,0xe7,0xf,0xab,0x99,0x20,0x13,0x80,0x78,0x93,0xd8,0x1e,0xb2,0x0,0x7f,0x8b,0xc8,0x1f,0xc0 -}; - -const uint8_t _A_L1_Tv_128x47_2[] = { - 0x1,0x0,0xc1,0x1,0x84,0x0,0x86,0x4,0xb,0x7f,0x84,0x1c,0x1f,0xb0,0xe9,0xc0,0xc,0x62,0x0,0x21,0x80,0x83,0x9b,0x1,0x1,0xe0,0x3,0xf2,0x80,0xa,0x39,0x0,0x58,0x41,0x66,0x33,0x30,0x50,0x81,0x88,0x1e,0xd0,0x50,0x19,0xa,0x8a,0x8,0x24,0x21,0x31,0x40,0x38,0x0,0x81,0x2d,0x20,0x8,0x41,0xeb,0x38,0x7,0xc0,0xb4,0x46,0xc4,0x78,0x10,0x79,0x80,0xc8,0x64,0x20,0xf4,0x86,0x2,0xcc,0x1e,0xa6,0x21,0xe8,0x40,0x21,0xe5,0x61,0x7,0xd5,0x43,0xc3,0x30,0x3b,0x9,0xbc,0xe0,0x58,0x8,0x79,0xc8,0xe9,0x11,0xe4,0xb1,0x3,0xd1,0x4,0xb4,0x83,0xf9,0xa8,0xce,0x5,0xe0,0x9f,0x83,0xc7,0xff,0xff,0xbf,0xae,0x8c,0xc,0x20,0x1,0x81,0xf8,0x24,0xfe,0x8,0xf9,0x14,0x70,0x80,0xf2,0xb0,0x8,0xce,0x3d,0x60,0x93,0x78,0x24,0x68,0x21,0xc1,0x2,0x8c,0x1e,0x70,0x3e,0x4,0x4f,0x81,0x41,0x7,0x8c,0xa,0x7,0x0,0xf0,0xf,0x8c,0xaa,0x25,0xf1,0xe0,0x23,0x86,0x21,0x1,0x46,0x89,0xd8,0x80,0x3,0x30,0x9,0x98,0x3c,0xfe,0x13,0xf5,0xc9,0x40,0x3f,0x10,0x90,0x7a,0xe8,0x0,0xa3,0x40,0x7,0x9c,0x1e,0xc,0xf,0xc1,0xe8,0xfd,0x1,0xeb,0xf0,0x25,0x88,0x3c,0xd1,0x23,0xfc,0x2f,0x88,0x3c,0xff,0x90,0x70,0x78,0x93,0xc8,0x4,0x3e,0xb,0xfb,0x1c,0x41,0xe5,0xfe,0x87,0x83,0xdb,0x81,0xe1,0x4,0x8f,0xc3,0x7,0xff,0xfe,0xfd,0xd5,0x44,0xa6,0x11,0x90,0xce,0x3e,0x1,0x51,0x86,0x67,0x3f,0xe2,0x71,0x7,0x94,0x74,0x1e,0x30,0x8f,0xe0,0x78,0x5a,0x43,0xb8,0x64,0x1f,0xfe,0x7e,0x1f,0x2f,0xc4,0x4e,0x1,0xe,0x73,0xf,0xc0,0x1e,0x9c,0xf0,0x79,0x44,0x3c,0x1c,0x8,0x19,0x34,0x7c,0xa,0x93,0x23,0x8,0x3c,0xdf,0x42,0xf,0x30,0xfa,0x7c,0xc1,0xe3,0x1e,0x40,0x9,0x3c,0x68,0x0,0xf6,0xfa,0x4f,0xfe,0x13,0x99,0x30,0x9c,0x81,0xe3,0xfc,0x7,0x1d,0xff,0xef,0xdf,0x87,0xfd,0xa7,0xe0,0xf4,0xe1,0x83,0xcf,0x3f,0xf7,0x8f,0xec,0x2f,0x37,0xe0,0x79,0x48,0x30,0x18,0x0,0x79,0xfb,0xc1,0xe3,0x4f,0xa4,0xe6,0x98,0xe2,0xf,0x1a,0x0,0x3d,0x3e,0x7f,0x7c,0xf8,0x14,0x91,0xc5,0x20,0x10,0x9,0xb8,0xff,0x80,0xf1,0x2,0x94,0x60,0x1e,0x81,0xf3,0x61,0xc,0x7c,0x58,0x51,0xc0,0x79,0x44,0x1,0xef,0x2,0x6,0xc,0x78,0x4,0x36,0x0,0x7c,0x41,0x1,0x82,0x3f,0x2b,0x84,0x23,0x1,0xe7,0x7,0xa8,0xf0,0x78,0xa,0x31,0x80,0x6f,0x1,0xe3,0xc3,0xb,0xf,0xe0,0x1e,0x56,0x5,0x68,0xdf,0xc1,0xe3,0x3f,0x83,0x83,0xc7,0x5f,0x32,0xfd,0x83,0xc5,0x6a,0x8f,0x72,0x80,0xb,0xc4,0x3e,0xae,0x64,0x80,0x4e,0x1,0xe2,0x4f,0x60,0x7a,0xb8,0xc4,0x1f,0xe5,0xf7,0x7,0xc0 -}; - -const uint8_t _A_L1_Tv_128x47_3[] = { - 0x1,0x0,0xc0,0x1,0x84,0x0,0x86,0x4,0xb,0x7f,0x84,0x1c,0x1f,0xb0,0xe9,0xc0,0xc,0x62,0x0,0x21,0x80,0x83,0x9b,0x1,0x1,0xe0,0x3,0xf2,0x80,0xa,0x39,0x0,0x58,0x41,0x45,0x6,0x7,0x98,0x28,0x47,0x44,0xf,0x58,0x48,0x3c,0xc5,0x45,0x4,0x12,0x10,0x98,0x81,0xea,0x5a,0x20,0x10,0x83,0xd3,0x80,0xa,0x20,0x7b,0xb,0x44,0x6c,0x53,0x80,0x7a,0xb,0x4,0x64,0x40,0xf4,0x83,0x83,0xe4,0xc4,0x20,0x31,0x3b,0x8,0x3f,0x44,0x22,0xa,0x23,0x61,0x60,0x21,0xe7,0x23,0xd,0x88,0x44,0x41,0xea,0x82,0x50,0x78,0x80,0x45,0x84,0x90,0x2f,0x4,0xfc,0x1e,0x3f,0xf0,0x1,0x43,0xe0,0x1f,0xe0,0x31,0xc0,0xfc,0x12,0x7f,0x4,0x7c,0x54,0x30,0x4f,0x3,0x98,0x42,0x22,0x0,0x28,0xf4,0x80,0x1e,0x33,0xf1,0x60,0xc1,0xa3,0x87,0x41,0x81,0x83,0xce,0x7,0xc0,0x89,0xf0,0x28,0xe0,0xf1,0x8d,0x3,0x7,0xc0,0xe,0x33,0xa8,0x97,0xc7,0x81,0x83,0x2e,0xf,0x94,0x14,0x37,0x80,0x79,0xcc,0x2,0x66,0xf,0x28,0x28,0xe4,0x97,0xcc,0xf,0x3d,0x1,0xec,0x8a,0x2,0x9e,0x43,0x68,0x83,0xcc,0x2e,0x44,0xe4,0xf2,0x2e,0x4c,0x1e,0x3f,0x8,0x8c,0x2,0x1c,0x1f,0x39,0xe5,0xf2,0xd,0x18,0x7,0x9f,0xf3,0xcf,0xc0,0x84,0xc1,0x81,0xe5,0xc2,0x87,0xf3,0x11,0x82,0xf,0x2f,0xf4,0x3e,0x7f,0x10,0x7,0x9c,0x4,0x42,0x22,0xf1,0xf8,0x67,0xff,0xff,0xdf,0xba,0xa8,0x83,0x23,0x80,0x8,0x8c,0x38,0x9e,0x30,0xcd,0xe7,0xfd,0x18,0x20,0xf2,0x8e,0x83,0xcc,0x8a,0x50,0x2f,0xc3,0x20,0xff,0xf3,0xf0,0xf9,0xe0,0x4,0xa5,0x1,0xf8,0x3,0xd3,0x9e,0xf,0x31,0x38,0xc1,0xc0,0x84,0x79,0x32,0x30,0x83,0xc6,0xe1,0x1,0xfe,0x7f,0x20,0x21,0x43,0x0,0x1f,0xcc,0x1e,0x30,0xef,0xf3,0xa8,0x60,0x14,0x0,0x7b,0x7d,0x27,0xff,0xe,0x8,0x9c,0xc1,0xe3,0xfc,0x7,0x1d,0xff,0xef,0xdf,0x87,0xe9,0x8c,0x42,0xf,0x30,0xf2,0x67,0xfe,0xf1,0xfd,0x85,0xe6,0xfc,0xf,0x29,0x6,0x3,0xe,0xf,0x3f,0x78,0x3c,0x69,0xf4,0x9c,0x92,0x80,0x41,0xe3,0xc0,0xc0,0x93,0x93,0xee,0xa6,0x10,0x1,0x3,0xcb,0xc0,0x96,0x20,0x0,0xff,0x1,0xe2,0x5,0x2f,0xc0,0x3c,0xac,0x9,0x41,0x0,0x13,0x8,0x63,0xe2,0xc2,0xfe,0x3,0xca,0x60,0xf,0x78,0x10,0x30,0x4a,0x5,0x60,0x7,0xc4,0x10,0x18,0x37,0xf0,0x10,0xdc,0x23,0x18,0xf,0x38,0x3d,0x63,0x10,0xe,0x1,0x3c,0xb7,0x80,0xf1,0xe1,0xc3,0xc9,0x2,0xf,0x2b,0x3,0xc,0x7f,0xf0,0x38,0x4,0xfe,0x1e,0xf,0x1d,0x7c,0xcb,0xf6,0xf,0x14,0xb2,0x3d,0xc9,0xcc,0x3e,0x70,0xfa,0xb9,0x92,0x1,0x38,0x7,0x89,0x3d,0x81,0xeb,0x20,0x7,0xf8,0xbc,0x81,0xfc -}; - -const uint8_t _A_L1_Tv_128x47_4[] = { - 0x1,0x0,0xcb,0x1,0x84,0x0,0x86,0x4,0xb,0x7f,0x84,0x1c,0x1f,0xb0,0xe9,0xc0,0xc,0x62,0x0,0x21,0x80,0x83,0x9b,0x1,0x1,0xe0,0x3,0xf2,0x80,0xa,0x39,0x0,0x58,0x41,0x45,0x6,0x7,0x98,0x28,0x47,0x44,0xf,0x58,0x48,0x3c,0xc5,0x45,0x4,0x12,0x10,0x98,0x81,0xea,0x5a,0x20,0x10,0x83,0xd3,0x80,0xa,0x20,0x7b,0xb,0x44,0x6c,0x53,0x80,0x7a,0xb,0x4,0x64,0x40,0xf4,0x83,0x83,0xe4,0xc4,0x20,0x31,0x3b,0x8,0x9c,0xaf,0xe0,0xf9,0x10,0x88,0x28,0x6c,0x8,0xd1,0x81,0x60,0x21,0xe7,0x23,0xd,0x88,0x44,0x41,0xe3,0x30,0x41,0x8a,0xdc,0x81,0xea,0x1,0x10,0x50,0xfe,0x0,0xa3,0x2,0xf0,0x4f,0xc1,0xe3,0xff,0x0,0x14,0x3e,0x1,0xfe,0x2,0xc,0x7,0xe1,0x3,0xf0,0x49,0xfc,0x11,0xf1,0x50,0xc1,0x3c,0xe,0x61,0x61,0x10,0x74,0x63,0xf6,0x9,0x37,0x82,0x46,0x26,0x18,0x34,0x71,0x64,0x90,0x2e,0x4,0xf,0x81,0x13,0xe0,0x50,0x41,0xe3,0x1a,0x81,0x97,0x4,0xfa,0x67,0x51,0x2f,0x8f,0x0,0x32,0x31,0xf,0x28,0x2c,0x63,0xa,0xd3,0x30,0x8a,0xe0,0x81,0xe5,0x5,0x77,0x2c,0x20,0xca,0x25,0xd1,0x7,0x96,0x81,0x2c,0x44,0xe2,0xb,0x88,0x1c,0x55,0x24,0xf,0x25,0xd9,0x3,0xce,0x41,0xf4,0x1b,0x10,0x3c,0xbe,0x11,0x18,0x4,0x38,0x1e,0x90,0xc8,0x7c,0x58,0x1e,0x7f,0xcf,0x3f,0x2,0x12,0xa9,0x28,0x5,0x2,0x8,0x19,0x20,0x79,0x7f,0xa1,0xf3,0xf8,0x80,0x3c,0xf0,0x4,0xf3,0xf8,0x60,0xff,0xff,0xdf,0xba,0xc4,0x94,0xc2,0xf,0x13,0x79,0xc3,0x33,0x9f,0xf8,0x7,0x80,0x1e,0x51,0xd0,0x59,0x70,0x52,0xe2,0xa4,0x1d,0xc3,0x3c,0xff,0xf3,0xf0,0xf9,0x7e,0x5,0x42,0xd7,0x16,0xa0,0x83,0xd3,0x9e,0xf,0x1c,0x3,0x50,0x7f,0xf0,0x32,0x68,0xf8,0x5,0x4,0x0,0x1f,0x80,0x3c,0x6e,0x0,0x51,0xfe,0x40,0x41,0xe4,0x1f,0x4f,0x98,0x3c,0x61,0xc1,0x73,0xa0,0x3,0xdb,0xe9,0x3f,0xf8,0x70,0x41,0xeb,0xfc,0x7,0x1d,0xff,0xef,0xdf,0x87,0xe9,0x8c,0x46,0xf,0x1e,0x18,0x3c,0xf3,0xff,0x78,0xfe,0xc2,0xf3,0x7e,0x59,0x9e,0x3,0x0,0xf,0x3f,0x78,0x3c,0x69,0xf4,0x9c,0x93,0x10,0xa4,0x14,0x0,0x7a,0x7c,0xfe,0xf9,0xf0,0x29,0x1f,0x44,0x1e,0x22,0x1,0x23,0x1f,0xf0,0x1e,0x20,0x52,0x76,0x88,0x3c,0xc3,0xe6,0xc2,0x18,0xf8,0xb0,0xa3,0x80,0xf2,0x88,0x3,0xdd,0xc2,0x51,0xe0,0x10,0xd8,0x1,0xf1,0x4,0x6,0x8,0xfc,0xae,0x10,0x8c,0x7,0x9c,0x1e,0xa3,0xc1,0xe0,0x34,0xcb,0x78,0xf,0x1e,0x18,0x58,0x7f,0x0,0xf2,0xb0,0x30,0xc6,0xfe,0xf,0x19,0xfc,0x1c,0x1e,0x3a,0xf9,0x97,0xec,0x1e,0x2b,0x54,0x7b,0x93,0x98,0x7c,0xe1,0xf5,0x73,0x24,0x2,0x70,0xf,0x12,0x7b,0x3,0xd6,0x40,0xf,0xf1,0x79,0x3,0xf8 -}; - -const uint8_t _A_L1_Tv_128x47_5[] = { - 0x1,0x0,0xd1,0x1,0x84,0x0,0x86,0x4,0xb,0x7f,0x84,0x1c,0x1f,0xb0,0xe9,0xc0,0xc,0x62,0x0,0x21,0x80,0x83,0x9b,0x1,0x1,0xe0,0x3,0xf2,0x80,0xa,0x39,0x0,0x58,0x41,0x45,0x6,0x7,0x98,0x28,0x47,0x44,0xf,0x58,0x48,0x3c,0xc5,0x45,0x4,0x12,0x10,0x98,0x81,0xea,0x5a,0x20,0x10,0x83,0xd3,0x80,0xa,0x20,0x7b,0xb,0x44,0x6c,0x53,0x80,0x7a,0xb,0x4,0x64,0x40,0xf4,0x83,0x83,0xe4,0xc4,0x20,0x31,0x3b,0x8,0x9c,0xaf,0xe0,0xf9,0x10,0x88,0x28,0x6c,0x8,0xd1,0x81,0x60,0x21,0xe7,0x23,0xd,0x88,0x44,0x41,0xe3,0x30,0x41,0x8a,0xdc,0x81,0xea,0x1,0x10,0x50,0xfe,0x0,0xa3,0x2,0xf0,0x4f,0xc1,0xe3,0xff,0x0,0x14,0x3e,0x1,0xfe,0x2,0xc,0x7,0xe1,0x3,0xf0,0x49,0xfc,0x11,0xf1,0x50,0xc1,0x3c,0xe,0x61,0x8,0x88,0x88,0x41,0x63,0x20,0x7,0x8c,0xfc,0x4c,0x30,0x68,0xe1,0x70,0x60,0x60,0xf2,0xe0,0x40,0xf8,0x11,0x3e,0x5,0x1c,0x1e,0x31,0xa0,0x60,0xf8,0xf,0xa6,0x75,0x12,0xf8,0xf0,0x30,0x65,0xc1,0xf2,0x82,0xc6,0xf0,0xad,0x33,0x8,0xae,0x8,0x1e,0x50,0x50,0x30,0xc7,0x81,0xe6,0xa3,0x30,0x79,0x68,0x12,0xc4,0x50,0x14,0xd1,0x1,0xc8,0x1e,0x81,0x72,0x27,0x12,0x28,0x7e,0x9f,0x3,0xe8,0x83,0xcb,0xe1,0x11,0x80,0x43,0x83,0xe7,0x20,0x86,0x43,0xe2,0x60,0xf3,0xfe,0x79,0xf8,0x10,0x98,0x30,0x3c,0xa8,0x2,0xf1,0x3c,0x8,0x3c,0xbf,0xd0,0xf9,0xfc,0x40,0x1e,0x78,0x6,0x39,0xfc,0x33,0xff,0xff,0xef,0xdd,0x62,0x4a,0x61,0x7,0x89,0xbc,0x41,0xe3,0xc,0xde,0x7f,0xd1,0x82,0xf,0x28,0xe8,0x80,0xb8,0x30,0x32,0x78,0xc0,0xbf,0xc,0xf3,0xff,0xcf,0xc3,0xe5,0xf8,0xc1,0x89,0x49,0xa8,0x20,0xf4,0xe7,0x82,0x47,0x0,0x63,0x1f,0xfc,0x1f,0x0,0xb9,0x40,0x0,0xfc,0x1,0xe3,0x70,0x2,0x8f,0xf2,0x2,0xf,0x20,0xfa,0x7c,0xc1,0xe3,0xe,0xb,0x9d,0x0,0x1e,0xdf,0x49,0xff,0xc3,0x82,0xf,0x5f,0xe0,0x38,0xef,0xff,0x7e,0xfc,0x3f,0x4c,0x62,0x30,0x78,0x87,0x93,0x3f,0xf7,0x8f,0xec,0x2f,0x37,0xe5,0x99,0xe0,0x30,0xe0,0xf3,0xf7,0x83,0xc6,0x9f,0x49,0xc9,0x40,0x41,0xe5,0xc0,0xc0,0x93,0x93,0xee,0xa6,0x10,0x1,0x3,0xcb,0xc0,0x61,0x10,0x1,0x7f,0x1,0xe2,0x5,0x2f,0xc0,0x3c,0xac,0x18,0x0,0xc1,0xb0,0x86,0x3e,0x2c,0x2f,0xe0,0x3c,0xa6,0x0,0xf7,0x81,0x3,0x4,0xa0,0x56,0x0,0x7c,0x3f,0x6,0x1,0x7f,0x1,0xd,0xc2,0x31,0x80,0xf3,0x83,0xd6,0x31,0x0,0xe0,0x13,0xcb,0x78,0xf,0x1e,0x1c,0x3c,0x90,0x20,0xf2,0xb0,0x30,0xc7,0xff,0x3,0x80,0x4f,0xe1,0xe0,0xf1,0xd7,0xcc,0xbf,0x60,0xf1,0x4b,0x23,0xdc,0x9c,0xc3,0xe7,0xf,0xab,0x99,0x20,0x13,0x80,0x78,0x93,0xd8,0x1e,0xb2,0x0,0x7f,0x8b,0xc8,0x1f,0xc0 -}; - -const uint8_t _A_L1_Tv_128x47_6[] = { - 0x1,0x0,0xc1,0x1,0x84,0x0,0x86,0x4,0xb,0x7f,0x84,0x1c,0x1f,0xb0,0xe9,0xc0,0xc,0x62,0x0,0x21,0x80,0x83,0x9b,0x1,0x1,0xe0,0x3,0xf2,0x80,0xa,0x39,0x0,0x58,0x41,0x45,0x6,0x7,0x98,0x28,0x47,0x44,0xf,0x58,0x48,0x3c,0xc5,0x45,0x4,0x12,0x10,0x98,0x81,0xea,0x5a,0x20,0x10,0x83,0xd3,0x80,0xa,0x20,0x7b,0xb,0x44,0x6c,0x53,0x80,0x7a,0xb,0x4,0x64,0x40,0xf4,0x83,0x83,0xe4,0xc4,0x20,0x31,0x3b,0x8,0x3f,0x44,0x22,0xa,0x23,0x61,0x60,0x21,0xe7,0x23,0xd,0x88,0x44,0x41,0xea,0x82,0x50,0x78,0x80,0x45,0x84,0x90,0x2f,0x4,0xfc,0x1e,0x3f,0xf0,0x1,0x43,0xe0,0x1f,0xe0,0x31,0xc0,0xfc,0x12,0x7f,0x4,0x7c,0x54,0x30,0x4f,0x3,0x98,0x58,0x49,0x1e,0xb0,0x49,0xbc,0x12,0x31,0x60,0xc1,0xa3,0x8b,0x24,0x0,0xc,0xf,0x81,0x13,0xe0,0x50,0x41,0xe3,0x1a,0x81,0xc0,0x2c,0x0,0xe3,0x3a,0x89,0x7c,0x78,0x1,0x91,0x88,0x79,0x41,0x43,0x18,0x7,0x9c,0xc0,0x26,0x60,0xf2,0x82,0xbb,0x8f,0xf0,0x41,0x14,0x99,0x83,0xcb,0x40,0x7b,0x20,0x60,0xc1,0x2f,0xc8,0x34,0x7,0x98,0x5c,0x81,0xe5,0x80,0x8f,0xfd,0x1,0xeb,0xf0,0x88,0xc0,0x21,0xc2,0xc3,0xf0,0x43,0xcf,0x62,0xf,0x3f,0xe7,0x9f,0x81,0x9,0x4f,0xb,0x20,0x90,0xe2,0x10,0x10,0x79,0x7f,0xa1,0xf3,0xf8,0x80,0x3c,0x57,0x4,0x22,0x10,0x20,0xfc,0x30,0x7f,0xff,0xef,0xdd,0x54,0x51,0xf3,0xe0,0x9b,0xd2,0x19,0x9c,0xff,0x8e,0x4,0x1e,0x51,0xd8,0x2,0xcc,0x78,0x9,0x71,0x69,0xe,0xe1,0x90,0x7f,0xf9,0xf8,0xe4,0x6f,0x1f,0x81,0x50,0xb5,0xc6,0x3,0xf0,0x7,0xa7,0x3c,0x1e,0x38,0x1,0x0,0xb8,0x4,0x9a,0x3e,0x6,0x4a,0x7c,0x1,0xe3,0x70,0x2,0x8f,0xf1,0xae,0x43,0xc3,0x0,0xf,0xcc,0x1e,0x30,0xe0,0xb9,0xd0,0x1,0xed,0xf4,0x9f,0xfc,0x38,0x20,0xf5,0xfe,0x3,0x8e,0xff,0xf7,0xef,0xc3,0xf4,0xc6,0x21,0x7,0x9f,0xc,0x1e,0x79,0xff,0xbc,0x7f,0x61,0x79,0x68,0x8,0x0,0x64,0x18,0xc,0x0,0x3c,0xfd,0xe0,0xf1,0xa7,0xd2,0x72,0x4c,0x41,0x7,0x8d,0x0,0x1e,0x9f,0x3f,0xbe,0x7c,0xa,0x47,0xd1,0x7,0x88,0x80,0x48,0xc7,0xfc,0x7,0x88,0x14,0xa3,0x0,0xf4,0xf,0x9b,0x8,0x63,0xe2,0xc2,0x8e,0x3,0xca,0x20,0xf,0x77,0x8,0xc0,0x23,0xc0,0x21,0xb0,0x3,0xe2,0x8,0xc,0x11,0xf9,0x5c,0x21,0x18,0xf,0x38,0x3d,0x47,0x83,0xc0,0x51,0x8c,0x3,0x78,0xf,0x1e,0x18,0x58,0x7f,0x0,0xf2,0xb0,0x30,0xc6,0xfe,0xf,0x19,0xfc,0x1c,0x1e,0x3a,0xf9,0x97,0xec,0x1e,0x2b,0x54,0x7b,0x93,0x44,0x7c,0xe1,0xf5,0x73,0x24,0x2,0x70,0xf,0x12,0x7b,0x3,0xd6,0x40,0xf,0xf1,0x79,0x3,0xf8 -}; - -const uint8_t _A_L1_Tv_128x47_7[] = { - 0x1,0x0,0xcd,0x1,0x84,0x0,0x86,0x4,0xb,0x7f,0x84,0x1c,0x1f,0xb0,0xe9,0xc0,0xc,0x62,0x0,0x21,0x80,0x83,0x9b,0x1,0x1,0xe0,0x3,0xf2,0x80,0xa,0x39,0x0,0x58,0x41,0x45,0x6,0x7,0x98,0x28,0x47,0x44,0xf,0x58,0x48,0x3c,0xc5,0x45,0x4,0x12,0x10,0x98,0x81,0xea,0x5a,0x20,0x10,0x83,0xd3,0x80,0xa,0x20,0x7b,0xb,0x44,0x6c,0x53,0x80,0x7a,0xb,0x4,0x64,0x40,0xf4,0x83,0x83,0xe4,0xc4,0x20,0x31,0x3b,0x8,0x3f,0x44,0x22,0xa,0x23,0x61,0x60,0x21,0xe7,0x23,0xd,0x88,0x44,0x41,0xea,0x82,0x50,0x78,0x80,0x45,0x84,0x7f,0x8,0x1f,0x82,0x7e,0xf,0x1f,0xf8,0x0,0xa1,0xf0,0xf,0xf0,0x14,0xe1,0xde,0x9,0x3f,0x82,0x3e,0x2a,0x18,0x27,0x81,0xcc,0x21,0x11,0x27,0x14,0xc2,0x40,0xf,0x19,0xf8,0xb0,0x60,0xd1,0xc3,0xa0,0xc0,0xc1,0xe5,0x74,0xe0,0x70,0x22,0x7c,0xa,0x38,0x3c,0x63,0x40,0xc1,0xf0,0x13,0x8f,0xf9,0x1,0x2f,0x8f,0x3,0x6,0x5c,0x1f,0x28,0x28,0x6f,0x0,0xf3,0xfc,0xd,0x85,0x12,0x20,0xf2,0x82,0x81,0x86,0x3c,0xc,0x17,0xc8,0x92,0xc8,0x1e,0x7a,0x3,0xd9,0x6,0x46,0x9,0x7e,0x22,0xd,0xfc,0x1e,0xaa,0xb2,0x20,0x8c,0x13,0x0,0x1d,0x1c,0x38,0x18,0x41,0xe5,0xf0,0x88,0xc0,0x21,0xc1,0xf1,0xa,0xf,0x83,0x1f,0x1,0x9,0x8,0x3c,0xbf,0x9e,0x7e,0x4,0x26,0xc,0xc8,0x3f,0xc7,0xfd,0x3a,0x20,0xf2,0xff,0x43,0xe7,0xf1,0x0,0x78,0xae,0x9,0xc6,0x7f,0xc,0xff,0xff,0xfb,0xf7,0x55,0x94,0x7d,0xe4,0x20,0xf4,0x86,0x6f,0x3f,0xe3,0x81,0x7,0x94,0x74,0xc4,0x53,0x7,0x11,0x8d,0x4,0x0,0x73,0xf2,0x48,0xde,0x3f,0x1c,0x31,0x28,0xc0,0x20,0x3f,0x0,0x7a,0x73,0xc1,0x23,0x80,0x83,0xe0,0x3f,0xe0,0x21,0x5c,0xa9,0x18,0x41,0xe3,0x70,0x2,0x8f,0xf9,0x80,0x23,0xc4,0x0,0xf,0xcc,0x1e,0x30,0xe0,0xb9,0xd0,0x1,0xed,0xf4,0x9f,0xfc,0x38,0x20,0xf5,0xfe,0x3,0x8e,0xff,0xf7,0xef,0xc3,0xf4,0xc6,0x21,0x7,0x98,0x79,0x33,0xff,0x78,0xfe,0xc2,0xf2,0xd0,0x10,0x0,0xc8,0x30,0x18,0x70,0x79,0xfb,0xc1,0xe3,0x4f,0xa4,0xe4,0x9e,0x22,0xf,0x1e,0x6,0x4,0x9c,0x9f,0x75,0x30,0x80,0x8,0x1e,0x5e,0x3,0x8,0x80,0xb,0xf8,0xf,0x10,0x29,0x7e,0x1,0xe5,0x60,0x42,0x8,0x0,0x98,0x43,0x1f,0x16,0x17,0xf0,0x1e,0x53,0x0,0x7b,0xc0,0x81,0x82,0x50,0x2b,0x0,0x3e,0x20,0x80,0xc1,0xbf,0x80,0x86,0xe1,0x18,0xc0,0x79,0xc1,0xeb,0x18,0x80,0x70,0x9,0xe5,0xbc,0x7,0x8f,0xe,0x1e,0x48,0x10,0x79,0x58,0x18,0x63,0xff,0x81,0xc0,0x27,0xf0,0xf0,0x78,0xeb,0xe6,0x5f,0xb0,0x78,0xa5,0x91,0xee,0x4e,0x61,0xf3,0x87,0xd5,0xcc,0x90,0x9,0xc0,0x3c,0x49,0xec,0xf,0x59,0x0,0x3f,0xc5,0xe4,0xf,0xe0 -}; - - -const uint8_t * const _A_L1_Tv_128x47[] = { - - _A_L1_Tv_128x47_0, - - _A_L1_Tv_128x47_1, - - _A_L1_Tv_128x47_2, - - _A_L1_Tv_128x47_3, - - _A_L1_Tv_128x47_4, - - _A_L1_Tv_128x47_5, - - _A_L1_Tv_128x47_6, - - _A_L1_Tv_128x47_7, - -}; - - - -const FrameBubble L1_Tv_128x47_bubble_0_0; - -const FrameBubble L1_Tv_128x47_bubble_1_0; - - -const FrameBubble* const L1_Tv_128x47_bubble_sequences[] = { - - &L1_Tv_128x47_bubble_0_0, - - &L1_Tv_128x47_bubble_1_0, - -}; - - - -const FrameBubble L1_Tv_128x47_bubble_0_0 = { - .bubble = { - .x = 1, - .y = 23, - .text = "Take the red pill", - .align_h = AlignRight, - .align_v = AlignBottom, - }, - .start_frame = 7, - .end_frame = 9, - .next_bubble = NULL, -}; - - -const FrameBubble L1_Tv_128x47_bubble_1_0 = { - .bubble = { - .x = 1, - .y = 23, - .text = "I can joke better", - .align_h = AlignRight, - .align_v = AlignBottom, - }, - .start_frame = 7, - .end_frame = 9, - .next_bubble = NULL, -}; - - - -const uint8_t L1_Tv_128x47_frame_order[] = { 0, 1, 2, 3, 4, 5, 6, 7 }; - -const BubbleAnimation BA_L1_Tv_128x47 = { - .icon_animation = { - .width = 128, - .height = 47, - .frame_count = 8, - .frame_rate = 2, - .frames = _A_L1_Tv_128x47 - }, - .frame_order = L1_Tv_128x47_frame_order, - .passive_frames = 6, - .active_frames = 2, - .active_cooldown = 5, - .active_cycles = 2, - .duration = 3600, - - .frame_bubble_sequences = L1_Tv_128x47_bubble_sequences, - .frame_bubble_sequences_count = COUNT_OF(L1_Tv_128x47_bubble_sequences), - -}; - - -const uint8_t _A_L1_BadBattery_128x47_0[] = { - 0x1,0x0,0xb,0x1,0x0,0x47,0xfb,0xfe,0x0,0x2b,0x38,0x3e,0x60,0x40,0x43,0xbf,0x3,0xe7,0xa5,0xf3,0xff,0xf9,0x2f,0xf5,0x60,0xff,0x5a,0x81,0xf3,0xa,0x2,0x18,0x7e,0x81,0xe9,0xea,0x87,0x8b,0xf7,0xad,0x1d,0x7,0xef,0xaa,0x30,0x2f,0xd0,0xfd,0x62,0xa6,0x30,0x9,0x84,0x18,0x7f,0x50,0xa8,0xdc,0x2,0xc1,0x3,0x2f,0xdc,0x3a,0x1,0xc0,0x80,0x9f,0xec,0x1e,0x61,0xfb,0x17,0x98,0x7e,0x89,0xe8,0x9f,0xf5,0xff,0x87,0xfc,0xff,0x69,0xf4,0x8f,0x83,0xe3,0xc5,0x1,0xff,0x40,0xd7,0xf7,0xfa,0x83,0xfc,0x60,0xe1,0xfb,0x7,0x8f,0xfc,0x1e,0x23,0xfa,0xff,0x2,0x8c,0xbf,0x40,0xf4,0x3f,0xd0,0x7f,0xfe,0x5c,0xff,0xff,0xd2,0xa2,0x1f,0xaf,0x9,0x34,0x40,0x3,0x7e,0x7,0x46,0x3,0x8f,0xff,0x0,0x15,0x9c,0x1f,0x1c,0xe,0x7c,0x4,0x57,0x20,0x2,0xa0,0x4b,0xc1,0xd9,0x0,0x90,0x47,0x81,0xfb,0x10,0x87,0x3,0xf6,0x10,0x5e,0x30,0x5,0x61,0x20,0xa0,0xfd,0xa1,0x3,0xfa,0x4c,0xf,0x64,0x29,0x80,0xe,0x3e,0xf,0xe0,0x7,0x97,0x9f,0x8f,0x18,0xb3,0x62,0xe6,0xd6,0xed,0xc,0x6c,0x1e,0xfb,0x7e,0xb5,0x6f,0xbb,0xd4,0xa7,0xef,0x7d,0x70,0x78,0x84,0xe6,0x71,0xe6,0xf7,0x53,0xa0,0x21,0xf1,0xa1,0x77,0xaa,0x52,0xed,0xe,0x6a,0xf,0xb0,0x82,0xd2,0x29,0x32,0x4a,0x94,0x7,0x6f,0xda,0xf,0x8f,0x5a,0xdd,0xbd,0xbd,0x41,0xea,0x11,0x99,0xc5,0x3f,0xc9,0x8e,0x1f,0x8c,0x5a,0xb4,0x3f,0x1b,0x7d,0x87,0x1a,0x2f,0x19,0x8,0x7c,0xb1,0x46,0xf8,0x7,0x8e,0x76,0x71,0x49,0xf2,0x64,0x81,0xf2,0x5f,0x60,0x7f,0x80 -}; - -const uint8_t _A_L1_BadBattery_128x47_1[] = { - 0x1,0x0,0x11,0x1,0x0,0x47,0xfb,0xfe,0x0,0x2b,0x38,0x3e,0x60,0x40,0x43,0xbf,0x3,0xe7,0xa5,0xf3,0xff,0xf9,0x2f,0xf5,0x60,0xff,0x5a,0x81,0xf3,0xa,0x2,0x18,0x7e,0x81,0xe9,0xea,0x87,0x8b,0xf7,0xad,0x1d,0x7,0xef,0xaa,0x30,0x2f,0xd0,0xfd,0x62,0xa6,0x30,0x9,0x84,0x18,0x7f,0x50,0xa8,0xdc,0x2,0xc1,0x3,0x2f,0xdc,0x3a,0x1,0xc0,0x80,0x9f,0xec,0x1e,0x61,0xfb,0x17,0x98,0x7e,0x89,0xe8,0x9f,0xf5,0xff,0x87,0xfc,0xff,0x70,0xf,0xe4,0x5,0x3e,0x31,0xf0,0x7c,0x78,0xa0,0x3c,0x28,0x1a,0xfe,0xff,0x50,0x7f,0x8c,0x1c,0x3f,0x60,0xf1,0xfc,0x83,0xc4,0x7f,0x5f,0xe8,0x7f,0xfc,0x1e,0x25,0xfa,0x7,0x89,0xff,0x41,0xe8,0x1f,0xaf,0x97,0x3f,0xff,0xf4,0xa8,0x87,0xeb,0xc2,0x3d,0x10,0x0,0xdf,0x81,0xd1,0x80,0xe3,0xff,0xc0,0x5,0x67,0x7,0xc7,0x3,0x9e,0x9d,0x10,0x5,0xd0,0x25,0xe0,0xec,0x80,0x48,0x23,0xc0,0xfd,0x88,0x43,0x81,0xfb,0x8,0x2f,0x18,0x2,0xb0,0x90,0x50,0x7e,0xd0,0x81,0xfd,0x26,0x7,0xb2,0x14,0xc0,0x7,0x1f,0x7,0xf0,0x3,0xcb,0xcf,0xc7,0x8c,0x59,0xb1,0x73,0x6b,0x76,0x86,0x36,0xf,0x7d,0xbf,0x5a,0xb7,0xdd,0xea,0x53,0xf7,0xbe,0xb8,0x3c,0x42,0x73,0x38,0xf3,0x7b,0xa9,0xd0,0x10,0xf8,0xd0,0xbb,0xd5,0x29,0x76,0x87,0x35,0x7,0xd8,0x41,0x69,0x14,0x99,0x25,0x4a,0x3,0xb7,0xed,0x7,0xc7,0xad,0x6e,0xde,0xde,0xa0,0xf5,0x8,0xcc,0xe2,0x9f,0xe4,0xc7,0xf,0xc6,0x2d,0x5a,0x1f,0x8d,0xbe,0xc3,0x8d,0x17,0x8c,0x84,0x3e,0x58,0xa3,0x7c,0x3,0xc7,0x3b,0x38,0xa4,0xf9,0x32,0x40,0xf9,0x2f,0xb0,0x3f,0xc0 -}; - - -const uint8_t * const _A_L1_BadBattery_128x47[] = { - - _A_L1_BadBattery_128x47_0, - - _A_L1_BadBattery_128x47_1, - -}; - - - -const FrameBubble L1_BadBattery_128x47_bubble_0_0; - - -const FrameBubble* const L1_BadBattery_128x47_bubble_sequences[] = { - - &L1_BadBattery_128x47_bubble_0_0, - -}; - - - -const FrameBubble L1_BadBattery_128x47_bubble_0_0 = { - .bubble = { - .x = 4, - .y = 21, - .text = "I feel so sick!\nI'm dying...", - .align_h = AlignRight, - .align_v = AlignCenter, - }, - .start_frame = 0, - .end_frame = 1, - .next_bubble = NULL, -}; - - - -const uint8_t L1_BadBattery_128x47_frame_order[] = { 0, 1 }; - -const BubbleAnimation BA_L1_BadBattery_128x47 = { - .icon_animation = { - .width = 128, - .height = 47, - .frame_count = 2, - .frame_rate = 2, - .frames = _A_L1_BadBattery_128x47 - }, - .frame_order = L1_BadBattery_128x47_frame_order, - .passive_frames = 2, - .active_frames = 0, - .active_cooldown = 0, - .active_cycles = 0, - .duration = 3600, - - .frame_bubble_sequences = L1_BadBattery_128x47_bubble_sequences, - .frame_bubble_sequences_count = COUNT_OF(L1_BadBattery_128x47_bubble_sequences), - -}; - - -const uint8_t _A_L1_NoSd_128x49_0[] = { - 0x1,0x0,0x49,0x1,0x0,0x5e,0x3,0xff,0x7,0x7,0xe5,0xc2,0x1,0x38,0x7,0xe4,0x32,0x1,0xc0,0x7,0xe4,0xc,0x4,0x5c,0xf,0xf8,0x0,0x40,0xe4,0x3e,0x40,0x19,0x41,0x3c,0x0,0xf2,0x22,0xb5,0x0,0x6,0x50,0x8b,0x6,0x4a,0x49,0x49,0x83,0x3,0xd6,0x40,0x3,0x28,0x80,0x3e,0xa2,0x1,0x33,0x7,0xd4,0x20,0x1f,0xe4,0x33,0x7,0xd4,0x10,0x1e,0x65,0xfa,0x7,0x9e,0x0,0x1f,0x50,0x20,0x7f,0x81,0xc,0x1f,0xe0,0xfa,0x80,0x80,0x86,0x1e,0xf,0xde,0x4,0xf0,0x1f,0xb6,0xb,0xc0,0x3f,0xc1,0xfb,0x70,0xfc,0x40,0x3a,0x0,0xfc,0xec,0x40,0x3d,0x0,0xfb,0xf8,0x7f,0x20,0x1f,0x40,0x7d,0xec,0x35,0xf0,0xf,0xe7,0x26,0x4d,0xe7,0xf,0xce,0xf4,0x1e,0x38,0xd,0xdf,0x68,0x1f,0x1e,0xa,0xe8,0x3c,0x72,0x9b,0xae,0xd8,0x3d,0xa0,0xb0,0x9,0x5,0x1c,0x1e,0x5a,0x61,0x7b,0xc0,0xd3,0xe3,0x30,0x7,0x92,0xff,0x7e,0x19,0x48,0x1f,0x44,0x1e,0xb8,0x0,0x1a,0x3,0xc7,0xf3,0x2f,0x7,0xad,0x0,0x6,0x54,0x88,0x17,0xc3,0xff,0xc0,0x8f,0x83,0xd6,0x40,0x3,0x29,0x24,0x4,0x1e,0x38,0x18,0x78,0x3d,0x62,0x0,0x32,0xc9,0x2f,0xcb,0x1f,0x0,0x7,0xac,0x20,0x6,0x54,0x95,0xf8,0xdf,0xf0,0x18,0x8,0x3f,0x80,0x22,0x70,0x40,0x10,0xc1,0x80,0x43,0xf4,0x7,0x8f,0x2,0xf,0x10,0xec,0x4,0x8,0x1e,0x38,0x3,0x89,0x7f,0x19,0xe7,0x10,0x90,0xb,0x8,0x1e,0x37,0x81,0x29,0x3,0xd8,0x98,0x40,0xf1,0x1a,0x98,0x3d,0x2c,0x0,0xf3,0xf2,0x78,0x16,0x24,0xf,0x5c,0x4,0xff,0xc0,0x3a,0x18,0xc4,0x7c,0x8,0x40,0xf6,0x45,0x8c,0xf8,0xfe,0x5f,0xc0,0x7b,0xd0,0x28,0x10,0x4e,0x4,0x3e,0xc1,0x80,0xff,0x8f,0xdc,0x1e,0x4c,0x81,0x3,0x8c,0xfc,0x1f,0x1c,0x2,0x49,0x40,0x3f,0xce,0xd1,0x7,0xc2,0xc0,0xff,0xc1,0x43,0x7,0xd4,0x8,0x8,0x60,0xff,0xfc,0x3,0xca,0x7,0x80,0xb0,0x2,0x8c,0xda,0x40,0x7,0xb0,0x83,0xfb,0xfc,0xb,0x30,0x7a,0x0 -}; - -const uint8_t _A_L1_NoSd_128x49_1[] = { - 0x1,0x0,0x42,0x1,0x0,0x5e,0x3,0xff,0x7,0x7,0xe5,0xc2,0x1,0x38,0x7,0xe4,0x32,0x1,0xc0,0x7,0xe4,0xc,0x4,0x5c,0xf,0xf8,0x0,0x40,0xe4,0x3e,0x40,0x19,0x41,0x3c,0x0,0xf2,0x22,0xb5,0x0,0x6,0x50,0x8b,0x6,0x4a,0x49,0x49,0x83,0x3,0xd6,0x40,0x3,0x28,0x80,0x3e,0xa2,0x1,0x33,0x7,0xd4,0x20,0x1f,0xe4,0x33,0x7,0xd4,0x10,0x1e,0x65,0xfa,0x7,0x9e,0x0,0x1f,0x50,0x20,0x7f,0x81,0xc,0x1f,0xe0,0xfa,0x80,0x80,0x86,0x1e,0xf,0xde,0x4,0xf0,0x1f,0xb6,0xb,0xc0,0x3f,0xc1,0xfb,0x70,0xfc,0x40,0x3a,0x0,0xfc,0xec,0x40,0x3d,0x0,0xfb,0xf8,0x7f,0x20,0x1f,0x40,0x7d,0xec,0x35,0xf0,0xf,0xe7,0x26,0x4d,0xe7,0xf,0xce,0xf4,0x1e,0x38,0xd,0xdf,0x68,0x1f,0x1e,0xa,0xe8,0x3c,0x72,0x9b,0xae,0xd8,0x3d,0xa0,0xb0,0x9,0x5,0x1c,0x1e,0x5a,0x61,0x7b,0xc0,0xd3,0xe3,0x30,0x7,0x92,0xff,0x7e,0x19,0x48,0x1f,0x44,0x1e,0xb8,0x0,0x1a,0x3,0xc7,0xf3,0x2f,0x7,0xad,0x0,0x6,0x54,0x88,0x17,0xc3,0xff,0xc0,0x8f,0x83,0xd6,0x40,0x3,0x29,0x24,0x4,0x1e,0x38,0x18,0x78,0x3d,0x62,0x0,0x32,0xc9,0x2f,0xcb,0x1f,0x0,0x7,0xac,0x20,0x6,0x54,0x95,0xf8,0xdf,0xf0,0x18,0x0,0x7a,0xc1,0x0,0x43,0x6,0x1,0xf,0xd0,0x1e,0x3c,0x0,0x78,0xf8,0x2,0x44,0xf,0x1c,0x1,0xc4,0xbf,0x8c,0xf4,0x88,0x76,0x0,0x62,0xf,0x1b,0xc0,0x94,0x81,0xed,0x20,0x1e,0x88,0x3c,0x46,0xe6,0xf,0x72,0xe8,0xf9,0x3c,0xb,0x12,0x7,0xb5,0x80,0x1e,0x51,0x88,0xff,0x80,0x7f,0x18,0x9,0xf8,0x2c,0x42,0x23,0xfc,0x7,0xca,0x70,0x67,0xd6,0xc,0x7,0xfc,0x7f,0x14,0xa,0x4,0x13,0x81,0x8f,0xff,0xcf,0xc1,0xf6,0xd9,0x1f,0xfb,0xb4,0x41,0xf1,0xc0,0x2d,0x17,0xf8,0x6,0x40,0xf8,0x5,0x14,0x9,0x6a,0x60,0xff,0xfc,0x3,0xc8,0x4e,0x20,0xf4,0x36,0x90,0x1,0xf0,0x16,0x0,0x7e,0xc0,0x2c,0x20,0xf7 -}; - -const uint8_t _A_L1_NoSd_128x49_2[] = { - 0x1,0x0,0x41,0x1,0x0,0x5e,0x3,0xff,0x7,0x7,0xe5,0xc2,0x1,0x38,0x7,0xe4,0x32,0x1,0xc0,0x7,0xe4,0xc,0x4,0x5c,0xf,0xf8,0x0,0x40,0xe4,0x3e,0x40,0x19,0x41,0x3c,0x0,0xf2,0x22,0xb5,0x0,0x6,0x50,0x8b,0x6,0x4a,0x49,0x49,0x83,0x3,0xd6,0x40,0x3,0x28,0x80,0x3e,0xa2,0x1,0x33,0x7,0xd4,0x20,0x1f,0xe4,0x33,0x7,0xd4,0x10,0x1e,0x65,0xfa,0x7,0x9e,0x0,0x1f,0x50,0x20,0x7f,0x81,0xc,0x1f,0xe0,0xfa,0x80,0x83,0xfc,0x1f,0xe0,0xff,0x2e,0x8c,0xfc,0x1f,0xbe,0xb,0xc4,0x3,0xa0,0xf,0xbb,0x6,0xe2,0x1,0xe8,0x7,0xdf,0xc3,0xf9,0x0,0xfa,0x3,0xef,0x61,0xdf,0x80,0x7f,0x39,0x32,0x6f,0x38,0x7e,0x77,0x20,0xf1,0xc0,0x6e,0xfb,0x44,0xf9,0xac,0x83,0xc7,0x29,0xba,0xed,0x83,0xda,0xb,0x0,0xe0,0x1b,0xc4,0x1e,0x3a,0x61,0x7b,0xc0,0xc0,0x86,0xf,0x14,0xfd,0xe4,0x8,0x43,0x94,0x81,0xf4,0x41,0xeb,0x80,0x1,0x95,0x22,0x4,0xf,0x1f,0xcc,0xbc,0x1e,0xb4,0x0,0x91,0x49,0x20,0x3f,0xf,0xff,0x2,0x3e,0xf,0x59,0x0,0x48,0xb2,0x50,0x40,0x78,0xe0,0x61,0xe0,0xf5,0x88,0x4,0x8a,0x93,0x2,0x5f,0x8e,0x3e,0x0,0xf,0x58,0x40,0x8c,0xe1,0x3e,0x8b,0xfe,0x3,0x0,0xf,0x58,0x20,0x8,0x60,0xd8,0x8,0x27,0xd0,0x1e,0x3c,0x0,0x7b,0xe0,0xe,0x25,0xfc,0x67,0xc0,0x3c,0x5f,0xa2,0xf,0x7f,0xc0,0x64,0x81,0xe3,0x1f,0x7,0xc4,0x13,0xec,0x10,0x1f,0x27,0x80,0x4e,0x60,0xf6,0x84,0x40,0xa0,0x1d,0x8f,0xf8,0x90,0x81,0xf0,0x2d,0x1f,0x7,0xc5,0x62,0x60,0xf5,0x8c,0x3,0xce,0x3f,0x70,0x7,0xc7,0x82,0x1e,0x5b,0x15,0x78,0xcf,0x1,0xf1,0x20,0x84,0x60,0x21,0xe0,0xf1,0x2f,0xcc,0x42,0x20,0xd8,0x1a,0x1f,0x2,0x1e,0xf,0xb0,0x49,0x1b,0xe6,0x21,0xf0,0x5,0x17,0xf8,0xde,0x7f,0x80,0x79,0x40,0xc1,0xe3,0x30,0x5,0x15,0xf5,0x6c,0x8f,0xb5,0x7,0x98,0x78,0xc1,0xff,0x0 -}; - -const uint8_t _A_L1_NoSd_128x49_3[] = { - 0x1,0x0,0x45,0x1,0x0,0x5e,0x3,0xff,0x7,0x7,0xe5,0xc2,0x1,0x38,0x7,0xe4,0x32,0x1,0xc0,0x7,0xe4,0xc,0x4,0x5c,0xf,0xf8,0x0,0x40,0xe4,0x3e,0x40,0x19,0x41,0x3c,0x0,0xf2,0x22,0xb5,0x0,0x6,0x50,0x8b,0x6,0x4a,0x49,0x49,0x83,0x3,0xd6,0x40,0x3,0x28,0x80,0x3e,0xa2,0x1,0x33,0x7,0xd4,0x20,0x1f,0xe4,0x33,0x7,0xd4,0x10,0x1e,0x65,0xfa,0x7,0x9e,0x0,0x1f,0x50,0x20,0x7f,0x81,0xc,0x1f,0xe0,0xfa,0x80,0x83,0xfc,0x1f,0xe0,0xff,0x2e,0x8c,0xfc,0x1f,0xbe,0xb,0xc4,0x3,0xa0,0xf,0xbb,0x6,0xe2,0x1,0xe8,0x7,0xdf,0xc3,0xf9,0x0,0xfa,0x3,0xef,0x61,0xdf,0x80,0x7f,0x39,0x32,0x6f,0x38,0x7e,0x77,0x20,0xf1,0xc0,0x6e,0xfb,0x44,0xf9,0xac,0x83,0xc7,0x29,0xba,0xed,0x83,0xda,0xb,0x0,0xe0,0x1b,0xc4,0x1e,0x3a,0x61,0x7b,0xc0,0xc0,0x86,0xf,0x14,0xfd,0xe4,0x8,0x43,0x94,0x81,0xf4,0x41,0xeb,0x80,0x1,0x95,0x22,0x4,0xf,0x1f,0xcc,0xbc,0x1e,0xb4,0x0,0x91,0x49,0x20,0x3f,0xf,0xff,0x2,0x3e,0xf,0x59,0x0,0x48,0xb2,0x50,0x40,0x78,0xe0,0x61,0xe0,0xf5,0x88,0x4,0x8a,0x93,0x2,0x5f,0x8e,0x3e,0x0,0xf,0x58,0x40,0x8c,0xe1,0x3e,0x8b,0xfe,0x3,0x0,0xf,0x58,0x20,0x8,0x60,0xd8,0x8,0x27,0xd0,0x1e,0x3c,0x0,0x7b,0xe0,0xe,0x25,0xfc,0x67,0xc0,0x3c,0x5f,0xa2,0xf,0x7f,0xc0,0x64,0x81,0xe2,0x17,0x30,0x7a,0xc1,0x3e,0xc1,0x1,0xf2,0x78,0x16,0x26,0xf,0x68,0x44,0xa,0x1,0x18,0x8f,0xf8,0x7,0xf0,0xf,0x11,0x68,0x9f,0xc7,0xf8,0xf,0x88,0xc0,0x3c,0xac,0x18,0xf,0xf8,0xfe,0x3c,0x10,0xf2,0xd8,0x83,0x85,0xfa,0x20,0xf7,0x90,0x42,0x30,0x10,0xf8,0x7,0xf8,0x4,0x20,0xf7,0x88,0x44,0x1b,0x3,0x3,0xff,0x17,0x88,0x1f,0x20,0x91,0x8f,0xa5,0x4c,0x1e,0xdf,0x0,0x51,0x1c,0x84,0x0,0x5f,0x80,0x79,0x9,0xc6,0x21,0x30,0x5,0x11,0xb4,0x80,0xe,0xf,0xf0,0x7c,0x80 -}; - -const uint8_t _A_L1_NoSd_128x49_4[] = { - 0x1,0x0,0x3d,0x1,0x0,0x5e,0x3,0xff,0x7,0x7,0xe5,0xc2,0x1,0x38,0x7,0xe4,0x32,0x1,0xc0,0x7,0xe4,0xc,0x4,0x5c,0xf,0xf8,0x0,0x40,0xe4,0x3e,0x40,0x19,0x41,0x3c,0x0,0xf2,0x22,0xb5,0x0,0x6,0x50,0x8b,0x6,0x4a,0x49,0x49,0x83,0x3,0xd6,0x40,0x3,0x28,0x80,0x3e,0xa2,0x1,0x33,0x7,0xd4,0x20,0x1f,0xe4,0x33,0x7,0xd4,0x10,0x1e,0x65,0xfa,0x7,0x9e,0x0,0x1f,0x50,0x20,0x7f,0x81,0xc,0x1f,0xe0,0xfa,0x80,0x83,0xfc,0x1f,0xe0,0xff,0x7,0xf8,0x10,0xfa,0x0,0xfc,0xe0,0x40,0x3d,0x0,0xfc,0xf0,0x40,0x3e,0x80,0xfb,0x98,0x7c,0x20,0x1f,0xce,0x4c,0x9b,0xce,0xf,0x8f,0x85,0xfc,0x1e,0x38,0xd,0xdf,0x68,0x1f,0x1e,0x9,0xf8,0x3c,0x72,0x9b,0xae,0xd8,0x3d,0xa0,0xa4,0xe1,0x8f,0x83,0xcb,0x4c,0x2f,0x78,0x18,0x10,0xc1,0xe2,0x5f,0xbc,0x81,0x8,0x72,0x90,0x3e,0x88,0x3d,0x70,0x0,0x32,0xa4,0x40,0x81,0xe3,0xf9,0x97,0x83,0xd6,0x80,0x12,0x29,0x24,0x7,0xe1,0xff,0x22,0x8,0x3d,0x64,0x1,0x22,0xc9,0x41,0x1,0xe3,0x81,0x87,0x83,0xd6,0x20,0x12,0x2a,0x4c,0x9,0x7e,0x38,0xf8,0x0,0x3d,0x61,0x2,0x33,0x84,0xfa,0x2f,0xf8,0xc,0x0,0x3d,0x60,0x80,0x21,0x83,0x60,0x20,0x9f,0x40,0x78,0xf0,0x1,0xef,0x80,0x38,0x97,0xf1,0x9f,0x0,0xf1,0xbc,0x23,0xcc,0x1e,0x9f,0x80,0xc9,0x3,0xc5,0x5a,0x20,0xf7,0x82,0x7d,0x82,0x3,0xe4,0xf0,0x9,0xcc,0x1e,0xd0,0x88,0x14,0x3,0xb1,0xff,0x12,0x10,0x3e,0x5,0xa3,0xe0,0xf8,0xac,0x4c,0x1e,0xb1,0x80,0x79,0xc7,0xee,0x0,0xf8,0xf0,0x43,0xcb,0x62,0xaf,0x19,0xe0,0x3e,0x24,0x10,0x8c,0x4,0x3c,0x1e,0x25,0xf9,0x88,0x44,0x1b,0x3,0x43,0xe0,0x43,0xc1,0xf6,0x9,0x23,0x7c,0xc4,0x3e,0x0,0xa2,0xff,0x1b,0xcf,0xf0,0xf,0x28,0x18,0x3c,0x66,0x0,0xa2,0xbe,0xad,0x91,0xf6,0xa0,0xf3,0xf,0x18,0x3f,0xe0,0x0 -}; - -const uint8_t _A_L1_NoSd_128x49_5[] = { - 0x1,0x0,0x43,0x1,0x0,0x5e,0x3,0xff,0x7,0x7,0xe5,0xc2,0x1,0x38,0x7,0xe4,0x32,0x1,0xc0,0x7,0xe4,0xc,0x4,0x5c,0xf,0xf8,0x0,0x40,0xe4,0x3e,0x40,0x19,0x41,0x3c,0x0,0xf2,0x22,0xb5,0x0,0x6,0x50,0x8b,0x6,0x4a,0x49,0x49,0x83,0x3,0xd6,0x40,0x3,0x28,0x80,0x3e,0xa2,0x1,0x33,0x7,0xd4,0x20,0x1f,0xe4,0x33,0x7,0xd4,0x10,0x1e,0x65,0xfa,0x7,0x9e,0x0,0x1f,0x50,0x20,0x7f,0x81,0xc,0x1f,0xe0,0xfa,0x80,0x80,0x86,0x1e,0xf,0xde,0x4,0xf0,0x1f,0xb6,0xb,0xc0,0x3f,0xc1,0xfb,0x70,0xfc,0x40,0x3a,0x0,0xfc,0xec,0x40,0x3d,0x0,0xfb,0xf8,0x7f,0x20,0x1f,0x40,0x7d,0xec,0x35,0xf0,0xf,0xe7,0x26,0x4d,0xe7,0xf,0xce,0xf4,0x1e,0x38,0xd,0xdf,0x68,0x1f,0x1e,0xa,0xe8,0x3c,0x72,0x9b,0xae,0xd8,0x3d,0xa0,0xb0,0x9,0x5,0x1c,0x1e,0x5a,0x61,0x7b,0xc0,0xd3,0xe3,0x30,0x7,0x92,0xff,0x7e,0x19,0x48,0x1f,0x44,0x1e,0xb8,0x0,0x1a,0x3,0xc7,0xf3,0x2f,0x7,0xad,0x0,0x6,0x54,0x88,0x17,0xc3,0xff,0xc0,0x8f,0x83,0xd6,0x40,0x3,0x29,0x24,0x4,0x1e,0x38,0x18,0x78,0x3d,0x62,0x0,0x32,0xc9,0x2f,0xcb,0x1f,0x0,0x7,0xac,0x20,0x6,0x54,0x95,0xf8,0xdf,0xf0,0x18,0x0,0x7a,0xc1,0x0,0x43,0x6,0x1,0xf,0xd0,0x1e,0x3c,0x0,0x7b,0xe0,0xe,0x25,0xfc,0x67,0xc0,0x3c,0x6f,0x0,0x52,0x7,0xaf,0xe0,0x32,0x40,0xf1,0x8f,0x83,0xe2,0x9,0xf6,0x8,0xf,0x93,0xc0,0x27,0x30,0x7b,0x42,0x20,0x50,0xe,0xc7,0xfc,0x48,0x40,0xf8,0x16,0x8f,0x83,0xe2,0xb1,0x30,0x7a,0xc6,0x1,0xe7,0x1f,0xb8,0x3,0xe3,0xc1,0xf,0x2d,0x8a,0xbc,0x67,0x80,0xf8,0x90,0x42,0x30,0x10,0xf0,0x78,0x97,0xe6,0x21,0x10,0x64,0xd,0xf,0x80,0xfd,0x10,0x7d,0x2,0x48,0xdf,0x31,0xf,0x80,0x28,0xbf,0xc6,0xf3,0xfc,0x3,0xca,0x6,0xf,0x19,0x80,0x28,0xaf,0xab,0x64,0x7d,0xa8,0x3c,0xc3,0xc6,0xf,0xf8,0x0 -}; - - -const uint8_t * const _A_L1_NoSd_128x49[] = { - - _A_L1_NoSd_128x49_0, - - _A_L1_NoSd_128x49_1, - - _A_L1_NoSd_128x49_2, - - _A_L1_NoSd_128x49_3, - - _A_L1_NoSd_128x49_4, - - _A_L1_NoSd_128x49_5, - -}; - - - -const FrameBubble L1_NoSd_128x49_bubble_0_0; - - -const FrameBubble* const L1_NoSd_128x49_bubble_sequences[] = { - - &L1_NoSd_128x49_bubble_0_0, - -}; - - - -const FrameBubble L1_NoSd_128x49_bubble_0_0 = { - .bubble = { - .x = 40, - .y = 18, - .text = "Need an\nSD card", - .align_h = AlignRight, - .align_v = AlignBottom, - }, - .start_frame = 0, - .end_frame = 9, - .next_bubble = NULL, -}; - - - -const uint8_t L1_NoSd_128x49_frame_order[] = { 0, 1, 0, 1, 0, 2, 3, 4, 3, 5 }; - -const BubbleAnimation BA_L1_NoSd_128x49 = { - .icon_animation = { - .width = 128, - .height = 49, - .frame_count = 6, - .frame_rate = 2, - .frames = _A_L1_NoSd_128x49 - }, - .frame_order = L1_NoSd_128x49_frame_order, - .passive_frames = 10, - .active_frames = 0, - .active_cooldown = 0, - .active_cycles = 0, - .duration = 3600, - - .frame_bubble_sequences = L1_NoSd_128x49_bubble_sequences, - .frame_bubble_sequences_count = COUNT_OF(L1_NoSd_128x49_bubble_sequences), - -}; - - -const StorageAnimation dolphin_internal[] = { - - { - .animation = &BA_L1_Tv_128x47, - .manifest_info = { - .name = "L1_Tv_128x47", - .min_butthurt = 0, - .max_butthurt = 14, - .min_level = 1, - .max_level = 3, - .weight = 3, - } - }, - - { - .animation = &BA_L1_BadBattery_128x47, - .manifest_info = { - .name = "L1_BadBattery_128x47", - .min_butthurt = 0, - .max_butthurt = 14, - .min_level = 1, - .max_level = 3, - .weight = 3, - } - }, - - { - .animation = &BA_L1_NoSd_128x49, - .manifest_info = { - .name = "L1_NoSd_128x49", - .min_butthurt = 0, - .max_butthurt = 14, - .min_level = 1, - .max_level = 3, - .weight = 6, - } - }, - -}; - -const size_t dolphin_internal_size = COUNT_OF(dolphin_internal); diff --git a/assets/compiled/assets_dolphin_internal.h b/assets/compiled/assets_dolphin_internal.h deleted file mode 100644 index f4f415fa7..000000000 --- a/assets/compiled/assets_dolphin_internal.h +++ /dev/null @@ -1,7 +0,0 @@ -#pragma once - -#include -#include - -extern const StorageAnimation dolphin_internal[]; -extern const size_t dolphin_internal_size; diff --git a/assets/compiled/assets_icons.c b/assets/compiled/assets_icons.c deleted file mode 100644 index fb125095a..000000000 --- a/assets/compiled/assets_icons.c +++ /dev/null @@ -1,829 +0,0 @@ -#include "assets_icons.h" - -#include - -const uint8_t _I_Certification1_103x23_0[] = {0x01,0x00,0x98,0x00,0x9f,0xff,0xbe,0x30,0x38,0x04,0xf2,0x01,0xe0,0x80,0x82,0x87,0xf9,0x01,0x06,0x24,0xfe,0x01,0xf8,0x80,0xfe,0x21,0xff,0xf8,0x3c,0xff,0x9c,0x0c,0x1e,0x00,0x30,0x7f,0xc0,0xc1,0xe3,0xc0,0xe3,0xd0,0x7e,0x75,0xc4,0x46,0x30,0x70,0xd9,0x46,0x3c,0x10,0x09,0xc0,0x30,0xfe,0x10,0x1c,0x04,0x3c,0x18,0x37,0x08,0x05,0xc0,0x18,0x77,0x88,0x07,0x00,0x6e,0x31,0x89,0x87,0xe2,0x00,0x0c,0x39,0xc0,0x30,0x49,0x83,0x18,0x8c,0x7f,0xa0,0x60,0xc3,0x2c,0xa0,0x30,0x60,0xe0,0x01,0x06,0x14,0x70,0x18,0x26,0x51,0x8c,0x43,0x20,0x70,0x20,0x64,0xe3,0x03,0xa2,0x74,0x10,0x62,0x5f,0xce,0xc3,0x8f,0x06,0x78,0x31,0xc4,0xc6,0x33,0xc2,0x6f,0x99,0xf5,0x03,0x89,0xb7,0xb0,0x2d,0x7d,0x9f,0x2e,0x98,0x8c,0x0a,0x86,0x3c,0x0c,0x30,0xb9,0x7e,0x20,0x30,0x88,0x07,0xfe,0x0e,0x0c,0x42,0xda,0x40,0x3f,0x90,0x10,}; -const uint8_t* const _I_Certification1_103x23[] = {_I_Certification1_103x23_0}; - -const uint8_t _I_Certification2_119x30_0[] = {0x01,0x00,0x3c,0x01,0x00,0x5c,0x06,0x01,0x40,0x07,0x5e,0x0b,0xff,0x20,0x07,0x5d,0x92,0x01,0x13,0x03,0xa4,0x70,0x06,0x5f,0xe0,0x10,0xc6,0x20,0x10,0xc8,0x1c,0xce,0x70,0x07,0x19,0xf0,0x08,0x70,0x10,0x18,0x1c,0x03,0xe1,0xff,0x83,0x83,0x84,0x34,0x57,0xf0,0x10,0xd8,0x03,0x23,0x00,0x1c,0x8c,0x08,0x1c,0x30,0xf0,0xc8,0xf8,0xc1,0xc3,0x10,0x00,0x90,0x48,0x60,0x70,0x3d,0x98,0x90,0x70,0x1c,0x10,0x70,0xc2,0x03,0x65,0xa0,0xc0,0x07,0x47,0xe6,0x6d,0x1e,0x07,0x04,0x06,0x20,0xe3,0x90,0x5f,0x41,0xc9,0xe0,0xc0,0x08,0x46,0x09,0x18,0x41,0x0c,0x82,0x44,0x0e,0x11,0x61,0x5c,0x27,0xd0,0x70,0x70,0xc5,0xc1,0xc3,0x40,0x8a,0x17,0x84,0x94,0x53,0x0a,0x0c,0x1a,0x01,0xe2,0x88,0x7e,0x01,0xc3,0x08,0x80,0xff,0xcd,0x05,0xb8,0x80,0x43,0xa0,0x11,0xe8,0x80,0x84,0x43,0xa5,0xfe,0x98,0xa1,0x86,0xb9,0x00,0x8e,0x9c,0x47,0xe0,0x5d,0x1a,0x04,0x88,0x8e,0x20,0x02,0x97,0x60,0x27,0x40,0xe1,0x03,0x95,0x02,0x82,0x0e,0x49,0x35,0x0a,0x65,0x00,0xe1,0x28,0x04,0xfe,0x38,0x05,0xc8,0xf8,0xe3,0xf0,0x09,0x3c,0x8a,0xe4,0x0e,0x4e,0x02,0xe0,0x7f,0xff,0x39,0xfe,0x02,0x47,0x14,0xf1,0x0b,0x13,0x41,0xc0,0x52,0x0c,0xc2,0x61,0xc0,0x90,0xc3,0x38,0x50,0x1e,0x27,0xfe,0x8f,0x00,0xc8,0x48,0x20,0xc0,0xe3,0x40,0x0e,0x04,0x1c,0x98,0x8d,0x04,0x28,0x1c,0x4a,0x31,0x00,0x0c,0x0e,0x11,0x38,0x59,0x8c,0x12,0x7f,0x12,0x81,0xfc,0x27,0xf7,0x08,0x05,0x06,0x01,0x07,0x07,0x1c,0x08,0x6c,0x20,0xe2,0x98,0x40,0x27,0xd0,0x08,0x34,0x42,0x70,0xef,0x13,0xa8,0xd0,0x05,0x84,0x1d,0x10,0x00,0xc1,0xdf,0x43,0x0c,0x41,0x1a,0xcc,0x47,0x63,0xff,0x00,0x0c,0x0c,0xe4,0x2d,0x91,0x00,0x17,0xf8,0x1c,0x3c,0x00,0x71,0x09,0xc7,0xfc,0x0d,0x30,0x06,0x7f,0x3f,0xea,0x11,0x07,0x78,0x3b,0xc1,0xd6,}; -const uint8_t* const _I_Certification2_119x30[] = {_I_Certification2_119x30_0}; - -const uint8_t _A_Levelup1_128x64_0[] = {0x01,0x00,0x22,0x01,0xff,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x07,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x78,0x03,0xc0,0x1e,0x00,0x38,0x1f,0xe0,0x1d,0x97,0xff,0xe7,0x1c,0x1f,0x99,0xf8,0x1c,0xe0,0x1f,0x96,0x78,0x07,0x03,0xf8,0x0f,0xb8,0xdc,0x02,0x01,0xfb,0x07,0xdc,0x14,0x1e,0x3f,0x40,0x7d,0xc0,0x81,0xe3,0xe8,0x2f,0x5c,0x04,0x1e,0x3d,0x00,0x7d,0x6f,0xc1,0xc3,0x00,0xd0,0x03,0xea,0xbe,0x0f,0xf0,0x79,0x50,0x01,0xf5,0x2f,0x07,0xf8,0x38,0x63,0xf8,0x0f,0xf1,0x7a,0x62,0x10,0x0c,0x04,0x80,0x1f,0x59,0xf8,0xf8,0xb4,0x6f,0x80,0xfa,0xb7,0xcc,0x20,0x12,0x0f,0x34,0x03,0xfa,0x0f,0x88,0xbd,0x00,0x1e,0x3e,0x30,0x7d,0x42,0xf0,0x10,0x18,0x87,0x9c,0x1f,0x70,0x08,0x16,0x43,0xfe,0x0f,0xaf,0x5c,0x02,0x18,0x0f,0xc8,0xdc,0x0e,0x20,0x0f,0xc8,0x5c,0x31,0x7a,0x37,0xf0,0x7d,0xa3,0xc6,0x81,0x3f,0x37,0xdc,0x82,0x01,0xc0,0x49,0x09,0xff,0x61,0x00,0xfa,0x97,0x9f,0xc6,0x00,0x32,0x10,0x7d,0x40,0x20,0xc0,0xfc,0xaf,0xc0,0x23,0x0f,0x01,0x07,0xd6,0xfe,0x01,0xe0,0x07,0xe5,0xfc,0x7c,0x30,0xf0,0x7d,0xff,0xe0,0x41,0xe2,0x07,0xdc,0x14,0x1f,0xd0,0xd0,0x7f,0x45,0x45,0xfe,0x0f,0xf0,0x7f,0x17,0xd3,0xf4,0x7f,0x98,0x18,0x3f,0xc1,0xe7,0xf4,0x57,0xc8,0xbd,0x01,0xff,0xe8,0x6f,0xc8,0x3d,0x3a,0x0f,0xf9,0x67,0x88,0x00,0xb4,0x00,0xf8,0x8b,0x83,0xd2,0x80,0x0f,0x88,0x48,0x3d,0x30,0x1f,0xc0,0x6a,0xe3,0xef,0xf0,0x60,0x7a,0x40,0x3e,0x60,0xf5,0xbb,0xe0,0x20,0x20,0xf4,0x80,0xf3,0x01,0xeb,0x8b,0xbf,0x82,0x84,0x1e,0x93,0x0c,0x00,0x3d,0x21,0x60,0xa2,0x07,0xa7,0x02,0xfe,0x0f,0xd2,0x88,0xff,0x81,0xe6,}; -const uint8_t _A_Levelup1_128x64_1[] = {0x01,0x00,0x02,0x02,0xff,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x07,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x2f,0xf8,0x17,0x59,0xfe,0xf8,0x6b,0x37,0xf9,0xf0,0x32,0x7e,0xc1,0xac,0x02,0x19,0xff,0xfe,0x03,0xfc,0x11,0x5c,0xfe,0x7f,0xfe,0xf1,0x8c,0x2e,0x3d,0xce,0x80,0xe7,0x3e,0xff,0x90,0x7c,0xc3,0xe6,0x10,0x0b,0x07,0xfb,0xf0,0x61,0x8c,0x7c,0x3e,0x19,0x00,0xc0,0x43,0x6f,0xc1,0xe8,0xbf,0xe3,0xa0,0x50,0x08,0x04,0x0a,0xfe,0x83,0x7f,0xdf,0xf6,0x09,0x01,0x07,0x8e,0x11,0x25,0x1f,0x7f,0x7e,0x00,0x1c,0x30,0x09,0x41,0xfd,0xc0,0x03,0x1f,0xa0,0x03,0xca,0x21,0xfe,0x30,0x45,0xfe,0x90,0x0f,0x3f,0xe7,0xf4,0x1e,0xff,0x79,0x00,0x3c,0xa4,0x1b,0xc4,0xf4,0xca,0x01,0xe5,0xa0,0xfc,0x03,0xe6,0x20,0x0f,0x2a,0x00,0x3c,0x7c,0xef,0x96,0xbf,0xcc,0x81,0xc3,0xf8,0x07,0x93,0x0d,0xaf,0xbf,0xf5,0x70,0xc0,0x20,0x94,0x1d,0xc4,0x3f,0xf9,0xef,0x08,0x2f,0xf0,0x7e,0x5e,0x2c,0x17,0xf3,0xee,0x6f,0x89,0xc0,0x3c,0xb0,0x7f,0xc7,0x93,0x83,0x87,0xf1,0x07,0x80,0x79,0x70,0xbf,0x80,0x7b,0xc9,0xe0,0x13,0x86,0xf8,0xff,0x70,0xbc,0x0f,0x80,0x3d,0xb0,0xfa,0x18,0xe1,0x40,0x7f,0xb0,0x58,0x4f,0xf3,0xff,0xdf,0x08,0x2c,0x0e,0x18,0xc0,0x10,0x78,0xc0,0x7f,0xdb,0xfd,0xf8,0x3d,0x74,0x70,0x4c,0x04,0x07,0xfb,0x03,0x84,0xe3,0xfe,0xe0,0xf6,0x87,0xf9,0x20,0x10,0x6f,0xd4,0x0b,0x03,0xe7,0xf9,0xf7,0xce,0x47,0x7b,0xbf,0x67,0xe2,0x90,0x38,0x05,0xfe,0x03,0xc9,0xff,0xfe,0xfd,0xee,0x23,0x9f,0xff,0x27,0xd0,0xc2,0xf8,0xfc,0x20,0x18,0x16,0x6b,0xff,0xf3,0xf0,0xe6,0x81,0xca,0x7c,0x00,0xf5,0x22,0x0c,0x02,0x15,0x20,0x07,0x94,0x04,0x1e,0xd7,0xf8,0xfe,0x82,0x14,0x6f,0x10,0x00,0xea,0x51,0xe3,0xf3,0x08,0x26,0x7a,0x03,0x12,0x37,0x88,0x7c,0x91,0xe3,0xe7,0x3f,0xb4,0x48,0xde,0x21,0xf2,0xff,0x7f,0xf9,0xe7,0xf6,0x91,0x40,0x2f,0x01,0xf2,0x07,0xba,0x58,0x68,0x43,0xe2,0x0f,0x88,0xbc,0x7d,0xff,0xb0,0x79,0xf3,0xe1,0x78,0x20,0x79,0xc0,0x47,0xc2,0x8f,0x43,0xf0,0xe8,0xe0,0x44,0xe2,0x0f,0x8f,0xdf,0xc6,0xae,0x35,0x28,0xb7,0xc6,0x05,0x02,0x07,0x97,0x07,0xff,0xf1,0x17,0x20,0x10,0x74,0xe0,0xe3,0x80,0x72,0x67,0xff,0x82,0xf2,0xfc,0xe1,0xec,0xe1,0x00,0x15,0x0a,0x1e,0x60,0x12,0x72,0x70,0xe5,0xe0,0xf4,0x85,0x41,0x83,0xcb,0x37,0x83,0xe1,0xc5,0xe9,0x04,0x81,0x07,0xc7,0xde,0x0f,0x2a,0x5c,0x3b,0x40,0x0f,0x4d,0x24,0x83,0x3d,0xbf,0x30,0x1e,0x2e,0x39,0x40,0x07,0xa4,0x22,0x01,0x67,0xcf,0x8b,0xce,0x17,0x83,0x91,0x03,0xd2,0x61,0x2a,0xcc,0xf3,0x81,0xe9,0x1c,0x8c,0x03,0xd3,0x81,0x00,0xc3,0x18,0x12,0x2f,0xe0,0x83,0x83,0xd2,0x01,0xff,0xc0,0x83,0xd4,0x12,0x20,0xf5,0x80,0x60,0x01,0xe2,0x50,0x29,0x78,0x3d,0x98,0x63,0x40,0x48,0xa0,0x3e,0xac,0xc0,0xf3,0xa0,0x83,0xe2,0x41,0xc0,0x3f,0x9e,0x04,0x1f,0x3e,0x0f,0xc8,0x80,0xa0,0x60,0x81,0x07,0xb6,0x42,0x85,0xfc,0x0f,0x90,}; -const uint8_t _A_Levelup1_128x64_2[] = {0x01,0x00,0xc1,0x02,0xff,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x3f,0xe4,0x1f,0xdf,0x40,0x43,0xf3,0xc0,0xa9,0x7f,0xfb,0x03,0xdf,0x66,0x05,0x4d,0xff,0xbc,0x1e,0xf3,0xbf,0xf0,0x14,0xe3,0xf7,0x8f,0xf7,0xc4,0x1e,0xb1,0x3f,0xe0,0x14,0xe1,0xf9,0x02,0x0b,0xc5,0xc1,0xeb,0xcc,0xff,0x03,0xda,0x1e,0x0f,0x48,0x3f,0xbf,0xfd,0xf8,0x07,0xad,0xfc,0x1e,0x57,0xff,0xf4,0x0f,0xe7,0xff,0x07,0xaf,0x8e,0xff,0xf8,0xed,0xc7,0xee,0x1f,0xc8,0x18,0x34,0x41,0xeb,0xc3,0x9f,0xfc,0x3f,0x70,0xfe,0x07,0xfe,0x01,0x9c,0x0b,0x88,0x88,0x41,0xe7,0x1f,0xc8,0x5f,0xe0,0x7c,0x08,0x7c,0x03,0xf9,0x7f,0x9e,0x07,0xd3,0x8f,0x17,0x80,0x7e,0xe0,0x2f,0x71,0x85,0x7f,0xa7,0xf1,0xe0,0x7a,0x63,0xe7,0xf0,0x09,0x99,0x34,0x42,0x03,0xfb,0x9f,0xa5,0xd3,0xf1,0x3f,0xbf,0xc1,0x38,0x10,0x1c,0xe6,0xaa,0x04,0x1f,0x10,0xf2,0x7e,0x26,0xff,0x88,0x74,0xc2,0x01,0x60,0x0f,0x8d,0xfc,0x5c,0x2c,0x23,0xff,0x4c,0xed,0x18,0xe8,0x64,0x03,0x01,0xa9,0xc1,0x5e,0xf3,0xc1,0xf4,0x9f,0xcc,0xf8,0x10,0x48,0x10,0x74,0x60,0x58,0x0b,0xfe,0x32,0xfe,0xbe,0x50,0x78,0x97,0x8b,0x49,0xc0,0xf7,0xe0,0x14,0xc4,0xbe,0x3c,0x06,0x00,0x1c,0x30,0x08,0x46,0x02,0x78,0x0f,0x20,0x01,0xdf,0xb0,0x14,0x00,0x79,0x64,0x21,0x41,0x11,0x07,0x23,0x30,0x60,0x00,0xf3,0x88,0x00,0x87,0x81,0xbf,0x07,0x9e,0x73,0xdf,0x01,0x90,0x03,0xcb,0x40,0x53,0x19,0x02,0x3d,0x23,0x3f,0xf0,0x7a,0x00,0xc8,0x1e,0x5c,0x70,0x78,0xc6,0xb9,0xd0,0x11,0x59,0x0c,0xc7,0x51,0x0a,0x80,0x03,0x07,0x16,0x02,0x13,0xc0,0x83,0xd4,0x04,0x38,0xef,0xff,0x8f,0xfa,0x0f,0x18,0x3a,0x6c,0x43,0x22,0x00,0x1c,0x06,0xaa,0x14,0xd9,0x1f,0x38,0xfc,0xa1,0xa4,0x81,0x84,0x03,0xcc,0x02,0x3f,0xf0,0x71,0x80,0x06,0x02,0x1f,0x5d,0x14,0x2b,0xf0,0x0f,0x51,0x80,0xc1,0x01,0xe5,0x00,0x0b,0x0f,0xe7,0xf6,0x0f,0x5c,0x50,0x3d,0x35,0x3e,0x07,0x59,0x03,0x8a,0xff,0x0f,0x80,0x51,0x13,0xe7,0x01,0xf8,0x7b,0xff,0xa0,0xf2,0x87,0xff,0xe3,0xd2,0x8e,0x20,0x3c,0xa3,0x1a,0x9f,0x87,0x1e,0xff,0xde,0xc7,0x8b,0x47,0xd2,0x1f,0x10,0x7a,0x07,0xc7,0x8f,0x3f,0xff,0x61,0xff,0xff,0x7e,0xfc,0x1f,0x40,0x1f,0x5f,0x07,0x9d,0xfa,0x3e,0x37,0xf9,0x87,0xc6,0x02,0x0f,0x18,0xe4,0x07,0x80,0x0c,0x24,0xf9,0x14,0x04,0x3e,0x31,0xf7,0x58,0xc7,0xf5,0x38,0x0f,0x1b,0xbd,0x00,0x03,0x00,0xc2,0x03,0xca,0x1e,0x23,0x1f,0x80,0x28,0x73,0xe0,0x21,0xf9,0xff,0x70,0x30,0x41,0x90,0xe0,0x20,0xfa,0x98,0x17,0xf3,0xee,0x0f,0x2f,0xe7,0x83,0xdf,0x01,0x4f,0xac,0x03,0xfc,0x0f,0x10,0xe8,0xa4,0xc9,0x5e,0xba,0x96,0xf8,0x87,0x87,0xcf,0xf1,0xff,0xf1,0xe7,0x80,0xf1,0x88,0x3f,0x88,0x3e,0x3f,0xfe,0x7f,0x7f,0xcf,0xf9,0xff,0xc0,0xa3,0x1a,0x08,0x24,0x82,0x00,0x01,0x1d,0x4e,0x0b,0x3f,0xc7,0xf3,0xfc,0xff,0x9f,0xf9,0x08,0xa8,0x41,0xe8,0xdf,0x18,0x7f,0x07,0xcf,0x78,0x1e,0x8d,0xfe,0x00,0x1f,0x5c,0x0c,0x2a,0x0f,0xe0,0xbb,0xc7,0x0f,0xc7,0x00,0x83,0x0f,0x44,0x82,0x30,0x30,0x38,0xf8,0x22,0x78,0x00,0x70,0xf3,0xf0,0x1a,0xa0,0x7a,0x60,0xe1,0x50,0xaf,0x84,0x07,0xc0,0x0f,0x1d,0xb8,0x5c,0x60,0xbc,0x06,0x70,0x81,0x06,0x01,0x60,0xf0,0x28,0x85,0x64,0x34,0xad,0x46,0x2a,0x09,0x80,0xfc,0xc3,0x20,0x18,0x9d,0x56,0x48,0x32,0x3f,0x80,0xf8,0xe2,0xa0,0x36,0x00,0x78,0xc1,0xd6,0x23,0x31,0x80,0x63,0x01,0xe3,0xb8,0xfd,0xff,0xe1,0x10,0xe8,0xc2,0x7c,0x56,0x45,0xc1,0xc0,0x60,0xe0,0x52,0xae,0x41,0xb8,0x61,0x1f,0x08,0x38,0x30,0x60,0xc5,0xd1,0x80,0xdf,0xf0,0x06,0x12,0x17,0x89,0x64,0x57,0xe5,0xf8,0x60,0x9d,0x03,0x44,0x61,0x10,0x7b,0x00,0x10,0xea,0x25,0xf1,0x07,0x8a,0xbc,0xc1,0xeb,0xa0,0xd5,0x42,0x97,0xc3,0xff,0x54,0x88,0x3d,0xc1,0x25,0xfe,0x5f,0x88,0x94,0x80,0x0d,0x90,0xd5,0x4a,0x81,0xc3,0xfe,0xce,0x03,0xe2,0x10,0x1f,0x2f,0xff,0xe2,0x7f,0x01,0x06,0xa8,0x18,0x74,0x83,0xf1,0xfb,0x7f,0xff,0x33,0xf8,0x30,0xfd,0x41,0xe2,0xe1,0x25,0x79,0x41,0xcf,0x62,0x0f,0x5f,0xc6,0xa3,0x55,0x8a,0x07,0x90,}; -const uint8_t _A_Levelup1_128x64_3[] = {0x01,0x00,0x0a,0x03,0x8f,0xc0,0xb8,0x1f,0xfb,0xfd,0xe2,0x7f,0xf8,0x02,0x0f,0xff,0xff,0x03,0xff,0x00,0xc6,0xff,0x36,0xe0,0x47,0xfd,0xff,0x08,0xff,0xf3,0xff,0x3f,0x05,0x8f,0xf0,0x1e,0x5f,0xf8,0xfe,0x02,0xfb,0xff,0xf8,0x43,0xff,0x99,0xfd,0xf8,0x44,0x81,0xe7,0x17,0x88,0x7d,0x37,0xe0,0xf2,0x87,0xe7,0xff,0xe0,0x11,0xfe,0x83,0xca,0x1f,0x20,0xf8,0x0f,0x46,0x0f,0xfe,0x83,0xf6,0xff,0xfc,0xf0,0xfa,0x47,0xec,0x1e,0x08,0xf8,0x3c,0xa0,0x7c,0x3f,0xff,0x9c,0x1e,0x93,0xf8,0x06,0x02,0x1f,0xf8,0x2c,0x8c,0x07,0xc1,0xff,0xfd,0x83,0xdb,0xc1,0x07,0xfc,0x40,0x6f,0xda,0x0d,0x47,0xff,0xf2,0x0f,0x4b,0xf8,0x7c,0x60,0xda,0x88,0x0c,0x72,0x01,0xb0,0xff,0xe0,0x01,0xe9,0xff,0x80,0x68,0x21,0xff,0xa9,0x06,0x02,0x01,0xf2,0xbf,0x40,0x12,0x44,0x1f,0x2b,0x82,0xa1,0x7d,0x11,0xf8,0x05,0xf8,0x1e,0x74,0x7f,0x80,0xc0,0x75,0x50,0xa8,0x04,0x83,0xf0,0x0f,0x1b,0xe1,0x48,0x6f,0xfb,0x78,0x38,0x3c,0x40,0x09,0xfc,0x81,0x83,0xcb,0xfb,0xbf,0xbf,0xcb,0xbe,0x1a,0x8d,0x56,0xaa,0x55,0x80,0x85,0x18,0xc4,0x5e,0xb3,0xce,0x00,0x7d,0x7b,0x80,0x21,0xdf,0xcf,0xef,0xee,0x72,0x2f,0x8e,0xaa,0x01,0xa8,0xd1,0x62,0xa7,0xfa,0x0c,0x06,0x7d,0x82,0x33,0x8f,0x3d,0xfe,0x04,0x18,0x15,0x68,0xc0,0x1e,0xa2,0x02,0x1f,0x0f,0xff,0xbf,0x3f,0xe3,0xcf,0xc7,0x63,0xca,0xd5,0xe7,0xb5,0x58,0xa8,0x3e,0xa3,0x80,0x8e,0x29,0xfe,0x3c,0x2e,0x30,0x0b,0x85,0x56,0xea,0x73,0x11,0x10,0xd8,0x01,0xe5,0xcf,0x9f,0xcf,0xf5,0x50,0x2d,0x61,0x80,0x75,0x38,0xa2,0x28,0xda,0x09,0x63,0x9f,0x1f,0x0c,0xf8,0x3e,0x35,0x6a,0xad,0x54,0x3a,0x20,0x01,0xba,0x7f,0xf7,0xf9,0xff,0xbc,0xfe,0x7c,0x9c,0x1d,0x58,0x7c,0x74,0xd0,0xad,0x16,0xab,0x71,0xbf,0xef,0xfb,0xc1,0xe3,0x0c,0x1d,0x08,0x78,0x6a,0xb0,0xd0,0xf9,0x66,0x3f,0xbf,0xff,0x3f,0x9c,0x9c,0x3a,0x8e,0x50,0x78,0x75,0x59,0xa8,0x50,0x0c,0x7c,0x9f,0xff,0xcf,0x9f,0xe3,0x07,0x0b,0x8d,0x00,0x3e,0x51,0x50,0xf9,0x7c,0x3e,0x7f,0x99,0x3f,0xe2,0x0f,0x2a,0x5f,0x10,0x00,0xb1,0x4c,0x31,0xf8,0x7c,0x77,0x10,0x3f,0xe4,0x3c,0x2e,0x36,0x00,0xf9,0x4d,0x43,0xe5,0xe0,0x9c,0xfb,0xa0,0x7e,0x88,0x78,0x68,0x76,0x41,0xe2,0xb5,0x17,0x86,0x05,0xf8,0xcc,0x7f,0xe0,0x3f,0xc8,0x30,0x5c,0x6a,0x01,0xf2,0xaa,0x87,0xcb,0xf1,0xc2,0xff,0xc0,0x00,0x22,0x3e,0x50,0x01,0x42,0xaf,0x1d,0x09,0xfe,0x00,0x1e,0x20,0x01,0xac,0x07,0x8b,0xaa,0x07,0x29,0xe7,0x0a,0x1e,0x0f,0x20,0xfc,0x4a,0xa7,0x9e,0x85,0xa8,0xf0,0xc2,0xe5,0x54,0x1f,0x9c,0x04,0x3e,0x5e,0x00,0x18,0xf1,0xe0,0x3a,0x06,0xf1,0xb8,0x08,0x7e,0x33,0x8a,0x04,0x02,0x51,0xe3,0x4f,0x90,0x7d,0xc0,0x07,0xfa,0x80,0x68,0xe1,0x5e,0xc0,0xf1,0x6e,0x83,0xe4,0x0e,0x28,0x57,0xe3,0xce,0x18,0x1e,0xa0,0x78,0xab,0xa1,0xf6,0xfc,0x7f,0xf0,0x72,0xa0,0xfa,0xca,0xa5,0x50,0x08,0x46,0x01,0x46,0x3f,0xf3,0x18,0x87,0xf3,0xbf,0x00,0xd5,0x7b,0x37,0xfa,0xaf,0x56,0xff,0x53,0x82,0x0f,0x8c,0x83,0x51,0x02,0xff,0x5f,0xc2,0x63,0xd4,0xaf,0xa7,0x86,0xbe,0x1f,0x6d,0xf5,0xff,0x51,0x2a,0xd6,0x6b,0xc7,0xe3,0xaf,0xd4,0xe0,0x03,0xe2,0x06,0x18,0x17,0xf2,0xf6,0x7f,0xd2,0x78,0xea,0x21,0x49,0xf4,0x80,0xe0,0x35,0x40,0x11,0x0f,0x97,0xfc,0x30,0x21,0xfb,0xbf,0x43,0xc3,0xed,0x81,0x0e,0x90,0x7c,0xa7,0xd1,0xf1,0xf9,0x5d,0x6a,0xa0,0x11,0x0f,0xb4,0xf2,0x7c,0x57,0x16,0xfa,0xe2,0x80,0xa7,0x00,0x9c,0x07,0xca,0xac,0x3f,0x35,0x30,0x80,0x19,0x6e,0x3a,0xef,0x52,0xf8,0x75,0x5a,0xbd,0x10,0x80,0x90,0x43,0xe0,0x98,0x04,0x45,0x3a,0x2b,0xe1,0xaa,0xc1,0x60,0x16,0x00,0xe9,0xfd,0x2d,0x1a,0xac,0x56,0xbb,0x55,0xfb,0x01,0x0e,0x2f,0x45,0xb2,0x0f,0x8c,0x2a,0x01,0xfc,0xec,0x40,0x6c,0x01,0xf1,0xab,0xb0,0x46,0x6b,0x00,0xee,0x27,0xd3,0x51,0x0e,0xdc,0x07,0x07,0x56,0x02,0x1f,0x5e,0x03,0x56,0x1f,0x1d,0x04,0x2b,0xfd,0x59,0xfa,0xd5,0xcb,0x83,0x57,0x01,0x95,0xff,0xaa,0x1f,0x3f,0xfe,0xdc,0x2a,0x21,0xc1,0xfd,0x1e,0xce,0xd5,0x0a,0x85,0x10,0x06,0x7b,0x53,0x3e,0x18,0x01,0x43,0xe7,0xc0,0x7d,0x90,0x7c,0x40,0x09,0x2a,0x94,0x4a,0x17,0xe3,0xe3,0xb5,0x87,0xa0,0xc2,0x20,0x01,0xc0,0x78,0x7b,0xe1,0xc5,0x00,0x16,0x68,0x42,0x3a,0xae,0x17,0xc7,0x3e,0x1f,0x88,0x68,0xf8,0xfe,0x10,0x13,0xb1,0x00,0x0c,0x0c,0x3a,0x65,0x48,0x8f,0xc7,0xf0,0xdd,0x57,0x0c,0x7f,0x14,0x22,0x5f,0x5d,0x5f,0xeb,0x51,0xaa,0xd1,0x07,0xc7,0xf8,}; -const uint8_t _A_Levelup1_128x64_4[] = {0x01,0x00,0x7e,0x02,0xff,0x80,0x3c,0x01,0xf1,0xff,0xe0,0x3f,0x7d,0xff,0xd1,0x0f,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x2d,0xff,0xee,0x0f,0xef,0x47,0xff,0xfc,0x06,0x2d,0xf8,0x3d,0xe0,0x3e,0x49,0x3f,0xc0,0xfc,0x7f,0x8f,0xfc,0xed,0x02,0x37,0xff,0xc5,0xbe,0x01,0xf0,0xaf,0xe0,0xc1,0xe7,0xe0,0xff,0xc0,0xc2,0xe3,0x1f,0xf8,0x4f,0xe0,0x17,0x0b,0xf5,0x81,0x34,0x40,0xf1,0xb8,0xc1,0x38,0x1f,0xd8,0x3f,0xe2,0x73,0x00,0xf7,0xc7,0xe4,0x02,0xb1,0xff,0xcf,0xf0,0x02,0x81,0xc0,0x77,0xe0,0x37,0xf8,0x47,0x82,0xff,0x0e,0x6e,0x1c,0x1d,0xc4,0x3e,0x08,0x0d,0xfb,0x80,0x2e,0x1f,0x00,0x08,0x60,0x06,0x02,0xc3,0xc0,0x41,0x23,0x81,0x04,0x89,0x38,0x6c,0x11,0xfc,0x04,0x3c,0x1e,0x3f,0x78,0x3c,0x0e,0x01,0xc0,0x83,0xff,0xa0,0x60,0x52,0x8c,0x88,0x45,0x00,0x63,0x02,0xe2,0x6a,0xe3,0xc0,0x41,0x00,0x09,0xf8,0xd2,0x63,0x4f,0x04,0x1d,0xfc,0x1e,0x65,0xd2,0x01,0x09,0xc8,0x60,0xd0,0x0d,0x66,0xab,0x54,0x45,0x10,0x00,0xfb,0x3f,0xff,0x3f,0x8f,0xcf,0xd9,0xf9,0x87,0xd4,0x06,0xc5,0x03,0x8a,0x03,0xc7,0xf9,0xcf,0xf3,0xdf,0xfc,0xfc,0x4f,0xfc,0x2e,0x01,0xab,0x0f,0x88,0x90,0x45,0xe5,0x87,0x1f,0x94,0x02,0x9f,0x08,0xca,0x01,0x8a,0x9f,0x15,0x07,0x8d,0xe3,0x80,0x0f,0x30,0xc8,0xf0,0x03,0xc3,0xaa,0x8d,0x14,0x13,0x9f,0xfb,0x07,0x8c,0x02,0x21,0xd0,0x0b,0x15,0x7e,0x2a,0x51,0x1b,0x07,0xfb,0xcd,0xff,0xe1,0x9f,0x8b,0x40,0x1f,0x29,0x50,0x78,0xa7,0x93,0x9c,0x87,0xfe,0x03,0x1f,0x5f,0x90,0x7c,0xa7,0xf5,0x5a,0x84,0x07,0x7c,0x95,0x1f,0xbb,0x48,0x41,0xe3,0xb0,0x0f,0x95,0xa8,0x3e,0x51,0xe7,0x00,0xdf,0xe6,0x0a,0xf1,0x82,0x29,0xce,0xff,0x55,0xaa,0xc0,0x60,0x90,0x0c,0x04,0x7f,0xfd,0xfd,0x20,0x0e,0xa0,0x3e,0x5a,0xa2,0xf9,0x9a,0x47,0x8e,0x19,0x14,0xf0,0xfe,0x58,0xe7,0x54,0xaa,0x84,0x13,0xdf,0xfb,0x12,0x88,0x7e,0x4b,0x43,0xe3,0xb7,0xc0,0x2a,0x9f,0xd0,0xf9,0x8f,0xc5,0xe4,0x9c,0x38,0x18,0x10,0x5b,0xc4,0xe0,0x50,0x79,0x60,0x40,0x63,0x40,0x0f,0xbd,0x50,0x26,0xaf,0x71,0x0f,0x16,0xe8,0x16,0xd1,0xfb,0x85,0xc2,0x00,0x1f,0x50,0x80,0xd5,0x22,0x20,0xf1,0xff,0x7e,0x3f,0x01,0xfb,0xec,0x7f,0xef,0x12,0x08,0x07,0xf0,0x3e,0x71,0x58,0x24,0x16,0x28,0x1e,0x20,0x40,0xf8,0xe0,0x3e,0xcd,0xfe,0xab,0xd5,0xbf,0x0f,0xad,0x6d,0x3e,0x41,0xf5,0xa8,0xd5,0x60,0xa0,0x11,0x67,0x8e,0xfa,0xfe,0x0f,0x1d,0x66,0xbc,0x7e,0x3a,0xf0,0xfa,0xff,0xe3,0xe0,0x11,0x0f,0xad,0x56,0x8b,0x41,0xaa,0xc5,0x60,0x1f,0xb8,0x4e,0x5c,0x1e,0x29,0xf9,0xe0,0x7f,0xe1,0xb1,0xf8,0x7a,0xfd,0xc3,0xe3,0x05,0xb0,0x43,0xf8,0x17,0xf6,0xf8,0x87,0xe6,0x61,0x04,0xf0,0x46,0x20,0x15,0x50,0xfc,0x04,0xca,0xe4,0x15,0x26,0xfd,0x40,0x22,0x00,0x21,0xa8,0xa5,0x08,0x00,0x35,0x3a,0xad,0x50,0xbc,0x20,0x01,0xb0,0x00,0xcb,0x5d,0xea,0x5f,0x0e,0xaa,0x06,0x1f,0x5f,0xc4,0xc2,0x01,0x15,0x0f,0x1f,0xfe,0xaf,0x55,0xb2,0x9f,0xc8,0x1e,0x36,0x88,0x06,0x03,0x5d,0xaa,0xfd,0x80,0x86,0x17,0x00,0xd8,0x07,0xcf,0xdd,0xf9,0xa8,0xf9,0x43,0xe9,0x3f,0xaa,0xff,0x08,0x02,0x61,0x1f,0xf6,0xae,0x1d,0xb8,0x0e,0x0e,0xac,0x04,0x3e,0xbc,0x06,0xac,0x3c,0x58,0x0f,0xff,0xec,0x3a,0x80,0x04,0xaa,0x20,0xc7,0xc1,0x4f,0xd9,0x9e,0x84,0x38,0x3f,0xa4,0x09,0xda,0x87,0xe7,0x08,0xfb,0x87,0xa2,0xff,0x55,0xa8,0x18,0x0b,0x4e,0x1f,0x30,0x02,0x4a,0x90,0x09,0xef,0x0f,0xc1,0x84,0x60,0xb4,0x16,0xe0,0xf7,0x43,0x8a,0x00,0x28,0xd0,0x7d,0x0c,0x22,0x00,0x7a,0x79,0x78,0x55,0x62,0x10,0x1d,0x58,0x75,0x40,0xc3,0x06,0x60,0xab,0x75,0x1c,0x2b,0x55,0xa0,0xb0,0x4c,0xbe,0xba,0xbf,0xd0,0x79,0x40,}; -const uint8_t _A_Levelup1_128x64_5[] = {0x01,0x00,0x79,0x02,0xff,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x07,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x78,0x03,0xc0,0x1f,0xff,0xfb,0xcf,0xc0,0xc9,0xf0,0xf1,0x84,0x1e,0xff,0xfe,0x80,0xff,0x3f,0xb7,0xbf,0xe7,0x3c,0x1c,0xdb,0xff,0xfc,0xff,0xfc,0x1b,0x80,0x02,0x73,0xf5,0xf9,0xf8,0xff,0xff,0x8f,0x9f,0xfc,0x0b,0xde,0xe5,0xdd,0xba,0xf3,0xbe,0x3c,0x78,0x08,0xf5,0xe6,0x3a,0xcd,0x56,0xaa,0xc3,0xf0,0xa7,0xe0,0x3f,0xff,0xe1,0xf2,0x5f,0x20,0x15,0x6a,0xad,0x57,0x07,0xf3,0x87,0xf8,0x3f,0xfe,0x11,0x02,0x4d,0xe0,0x1a,0xbd,0x76,0xaf,0x0d,0xff,0x80,0x7c,0x3f,0xbc,0x70,0x7a,0x4f,0xf0,0x41,0xe1,0xaa,0xfb,0x67,0xf0,0x02,0x70,0x9c,0x4c,0x7c,0x33,0xfe,0x3e,0xa8,0x3e,0x31,0xa8,0x78,0x3c,0x89,0xc9,0xd0,0xff,0xd1,0xea,0xb5,0x7a,0xbc,0x56,0x01,0x00,0xfe,0x03,0xd4,0x2c,0x3a,0xf2,0xf0,0xea,0xa5,0x40,0xf1,0x9c,0x1f,0xdb,0x1f,0x67,0x0f,0x94,0xd6,0x01,0x04,0x80,0x18,0x07,0x7f,0xef,0x07,0x94,0x3f,0x64,0x1f,0x2b,0x50,0x7c,0x46,0x25,0xfd,0xef,0xb7,0x47,0x3f,0x0c,0xa8,0x07,0xc8,0xc2,0x30,0x10,0x78,0xfc,0x08,0x09,0x18,0xd4,0x6a,0x90,0x03,0xaa,0x06,0x8c,0x70,0x60,0x47,0xd2,0xff,0xcc,0xfb,0x01,0xd2,0xef,0xd5,0x20,0x37,0xf0,0x78,0xfe,0xc2,0x05,0xc7,0x83,0xfa,0x35,0x46,0x21,0xdd,0x40,0x30,0x10,0xfc,0x63,0xd4,0x5f,0x03,0xef,0x07,0x8d,0xd7,0xab,0x55,0xae,0xdd,0x6a,0xb8,0x58,0x7e,0xff,0xce,0x1d,0x12,0x10,0xfc,0xe0,0xfa,0xcf,0xd6,0xa8,0x02,0x24,0xe1,0x81,0xb7,0x84,0xdc,0x57,0xf9,0x7c,0x02,0xab,0x75,0x00,0x0d,0x56,0x82,0x10,0x10,0x78,0xc3,0xde,0x25,0x06,0x3b,0x0e,0xeb,0x55,0xea,0xfd,0x1b,0x8a,0xff,0x7f,0xbf,0x2c,0xc7,0xe7,0x0e,0x80,0x75,0x2a,0xb7,0x7a,0xbd,0x76,0x8b,0x05,0x80,0x06,0xc6,0xf8,0xb2,0x1b,0x1a,0x58,0x83,0xec,0x6e,0x41,0x70,0xd5,0x0b,0xc2,0x00,0x10,0xf9,0x08,0x04,0x7a,0x5f,0xf8,0x60,0x7c,0xb7,0xe1,0xf1,0xff,0x87,0xca,0x01,0xfd,0x07,0x96,0x26,0x07,0x40,0xfa,0xb1,0x47,0xbf,0x7f,0xa2,0xb0,0x0b,0xf1,0x7f,0x10,0x8f,0x82,0x0f,0x00,0xd6,0x7b,0xcf,0xe3,0xaf,0x0f,0x96,0x03,0xff,0x39,0xff,0x63,0x7f,0xf1,0xf3,0xf9,0x00,0x4a,0x82,0x01,0x1c,0x07,0x7c,0xc4,0x38,0x71,0x88,0xc0,0x75,0x83,0xf2,0x0f,0x9c,0x02,0x0c,0x21,0x17,0x01,0x41,0xea,0x85,0xf2,0x00,0x12,0x84,0xb0,0x0d,0x11,0xff,0xcf,0xa0,0xba,0xcd,0x50,0x00,0x83,0xe7,0x00,0xe0,0x7c,0x57,0xe3,0x78,0x9c,0x55,0x07,0xe7,0x55,0x8a,0xd0,0x02,0x43,0xe0,0xfe,0x7d,0xff,0xfe,0x9b,0xc0,0x7e,0x60,0x13,0x07,0x01,0x5e,0x2a,0xc3,0xd3,0x43,0x0a,0x04,0x42,0x05,0x8c,0xc1,0xc7,0xfe,0x1a,0xef,0x56,0xa9,0x82,0x30,0x30,0xfa,0x08,0x4a,0x1d,0x40,0xaa,0xb0,0x06,0xbb,0x55,0x82,0xd4,0x2c,0xa4,0x21,0x80,0x7c,0x20,0x76,0x83,0x20,0xeb,0xb5,0x5f,0xb0,0x10,0xc2,0xe0,0x1b,0x00,0xe9,0x2c,0x47,0xb1,0x01,0x0b,0x8f,0x56,0xaf,0x5f,0xaa,0xcd,0x6a,0x9d,0xca,0xa3,0x84,0xf5,0x10,0xed,0xc0,0x70,0x75,0x60,0x21,0xf5,0xe0,0x35,0x6c,0x13,0xbf,0x56,0xfe,0xb5,0x72,0xe0,0xd5,0xc0,0x65,0x7f,0xea,0xd1,0x20,0x14,0x0f,0x84,0xff,0x6e,0x7a,0x10,0xe0,0xfe,0x90,0x27,0x6a,0x1f,0x97,0x82,0x7e,0x19,0x20,0x03,0x8f,0x86,0x01,0xe7,0xbf,0xeb,0x43,0xe6,0x00,0x49,0x50,0x38,0x7f,0x9c,0xff,0xfd,0xbc,0x3d,0x13,0x5a,0xa9,0x38,0x78,0xf9,0xce,0xf0,0x71,0x40,0x05,0x1a,0x2f,0x0f,0x7f,0xff,0xf9,0xd8,0x07,0xe2,0x9b,0x50,0x80,0x33,0x47,0xc7,0x00,0xd5,0x87,0x54,0x0c,0x30,0x61,0xf8,0xdf,0xfe,0xc0,0xf1,0x6e,0xa3,0x85,0x0c,0x03,0x1c,0x10,0x0a,0xc8,0x4b,0xeb,0xab,0xfd,0x37,0x4e,0x77,0xfe,}; -const uint8_t _A_Levelup1_128x64_6[] = {0x01,0x00,0x38,0x02,0xff,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x07,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x78,0x03,0xc0,0x1e,0x00,0x5f,0x78,0x37,0x20,0x3f,0xc0,0x7e,0x4f,0xff,0xde,0x3e,0x38,0xae,0xf9,0xf0,0x5c,0xe8,0x7e,0xf8,0xf3,0x3c,0x45,0x83,0xdc,0x1f,0xb8,0x6e,0x23,0x01,0xfd,0x1f,0xdc,0x0a,0x09,0x01,0xfd,0x03,0xaa,0xff,0x01,0x07,0x8f,0xd0,0x1f,0x5b,0xf8,0x00,0x3c,0x7d,0x00,0xfa,0xaf,0x83,0xcb,0xa0,0x0e,0x9f,0xb8,0x3c,0x60,0x50,0x20,0x7d,0xcb,0xc1,0xe5,0xa0,0xdb,0x83,0xe3,0xc6,0x0f,0x4d,0xff,0xdc,0x3f,0x11,0x70,0x79,0x50,0x23,0xe0,0xe7,0xfe,0x83,0xd7,0x7e,0x2f,0x8f,0xe4,0x2e,0x00,0x80,0x1c,0x06,0xf9,0x1b,0x1f,0xcc,0x5c,0x1c,0x1e,0x38,0xfd,0xf6,0x0f,0xbe,0xb3,0x5b,0xfd,0xf2,0x97,0x08,0xff,0xe1,0xf2,0x1e,0xec,0x38,0xfd,0xff,0x12,0x5c,0x84,0x06,0x99,0x20,0xfa,0xff,0x81,0xed,0xfb,0xfd,0xc9,0x6a,0x10,0x0a,0x84,0x80,0x58,0x9e,0xf3,0x7a,0x55,0x66,0x12,0x0b,0x05,0x40,0x1e,0x5f,0x11,0x0b,0x75,0x66,0x12,0x2b,0x15,0x63,0x7a,0x07,0x1f,0x80,0xf4,0xca,0x05,0xd5,0x88,0x48,0xa8,0x55,0x80,0x40,0xdf,0x3e,0x1f,0x30,0x60,0xff,0xb0,0xfe,0x3f,0xf0,0x3d,0x6e,0xf1,0xef,0xc7,0xec,0x40,0x58,0x7e,0x1f,0xbf,0xab,0x11,0x80,0x50,0x2b,0x81,0xf1,0x87,0xff,0x0c,0x49,0x07,0xc1,0xf5,0x63,0xf0,0x0e,0x05,0x7c,0x7e,0x30,0x70,0x71,0x35,0x0a,0x7f,0x02,0xd2,0xe7,0xff,0xfc,0xf9,0x78,0x7c,0x7c,0x7f,0xf8,0xf8,0x44,0xaf,0xb7,0xeb,0x14,0x92,0x9f,0x00,0xe8,0x49,0xf9,0xb3,0xdf,0x01,0x64,0x40,0x42,0x1e,0x1f,0xe5,0xda,0x89,0x30,0x80,0x58,0x22,0x1f,0x58,0xff,0xe2,0xf7,0xfc,0xf0,0x83,0xca,0x01,0x78,0xc2,0x0f,0xca,0x1f,0xfd,0x87,0xff,0xaf,0xbf,0xc1,0x90,0xff,0xe3,0xb0,0x0f,0x84,0x12,0x20,0x5f,0x18,0x07,0xf5,0x56,0x5f,0xcf,0xfe,0xff,0xbf,0x18,0x07,0x94,0x82,0x00,0x01,0x1f,0xe8,0x30,0x7f,0xbe,0xcf,0xf5,0xef,0xfd,0x38,0x83,0x70,0xa0,0xa0,0xf3,0x80,0xfe,0x38,0x56,0xf0,0x90,0xff,0xff,0x31,0x08,0x7c,0x10,0x3e,0x80,0xf1,0xa1,0x9b,0x87,0xef,0xfd,0xf9,0xc0,0x20,0xf1,0x88,0x30,0xf4,0x48,0x23,0x03,0xbf,0x79,0xe0,0x7f,0xe2,0x18,0xfc,0xf8,0x10,0x3f,0x80,0x3d,0x67,0x90,0x18,0x04,0x73,0xf8,0x10,0x1d,0x9c,0x0e,0xe1,0x05,0xe0,0x40,0x0a,0xa3,0x05,0x41,0x8c,0x00,0x04,0x2f,0x21,0xa5,0xc3,0xb2,0x10,0x4c,0x07,0xe6,0x19,0x00,0x84,0xc0,0x32,0x00,0xf1,0x80,0x78,0x3d,0xf8,0xb8,0x0d,0x80,0x1e,0x30,0x78,0x7c,0x02,0x63,0x00,0xc6,0x29,0x87,0xe0,0xb0,0x18,0x5c,0x3a,0x31,0x04,0x2e,0x08,0x08,0x78,0x38,0x0c,0x1e,0xe2,0x01,0xfe,0xf8,0x83,0xc7,0xe1,0x07,0x06,0x0c,0x1a,0x06,0x12,0x1b,0xfe,0x03,0x01,0x0f,0xf7,0x7f,0xfd,0x91,0x71,0xa0,0x83,0xc7,0xf0,0x3a,0x25,0x98,0xf0,0x21,0x69,0x01,0xe0,0x83,0xd0,0x00,0x80,0xf1,0x88,0xf6,0x3f,0x18,0x79,0x78,0x3e,0x14,0x62,0x6e,0x1b,0xc4,0x7e,0x4e,0x0f,0xaf,0x85,0xc7,0xf1,0x3f,0xa1,0x83,0x14,0x00,0x4a,0x31,0xf0,0x40,0xc1,0xe3,0x87,0x07,0xc7,0x20,0x04,0x30,0xee,0x7c,0xbe,0x06,0xb6,0x10,0x02,0x01,0x87,0xe9,0xc3,0x87,0xfe,0x23,0x77,0xc8,0x2c,0x18,0x7e,0xa0,0xf1,0xfd,0xf9,0xe3,0xf7,0x0b,0xdf,0xf0,0xf6,0x40,0xf5,0xfc,0x5c,0x27,0x93,0xc5,0x70,0xff,0xc0,}; -const uint8_t _A_Levelup1_128x64_7[] = {0x01,0x00,0xd0,0x01,0xff,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x07,0x80,0x3c,0x01,0xe0,0x05,0xfd,0x83,0xfb,0xbe,0x20,0xf0,0xff,0x83,0x72,0x01,0xfe,0x07,0xdf,0xf6,0x3f,0xff,0xf8,0x83,0xf3,0xcf,0x03,0xe7,0x40,0xff,0xc0,0xf9,0xfc,0x46,0x61,0x93,0x00,0xfe,0x41,0xa2,0x1c,0x0e,0xf0,0x3e,0xaf,0xb0,0x19,0x06,0x03,0xba,0x0f,0xad,0xfc,0x02,0x81,0x00,0xed,0x83,0xea,0xbe,0x0f,0x2f,0xa8,0x3e,0xa5,0xf0,0x0c,0x04,0x03,0xd4,0x0f,0xdf,0xc7,0xad,0xb5,0x51,0x70,0x78,0xc1,0xfa,0xdb,0xf0,0x84,0xc5,0xff,0xdc,0x08,0x07,0x60,0x3f,0x50,0xb8,0x0c,0x86,0x81,0xb0,0x0f,0xcf,0xef,0x17,0x7c,0x89,0x50,0x37,0x00,0xfa,0xa5,0xe0,0xa1,0x98,0x20,0x7d,0x78,0x28,0xb1,0xd8,0x2e,0x0a,0xa0,0xe3,0x10,0xfc,0x49,0x63,0xf0,0x9c,0x25,0xc2,0x17,0xfa,0x07,0xc6,0x97,0x3d,0x0a,0x82,0x5f,0xc3,0xf3,0xff,0xd2,0xff,0xa1,0x5c,0x0b,0x81,0x3e,0xb4,0x40,0xf1,0x98,0x78,0x37,0xc1,0xf9,0x07,0x94,0x23,0x81,0xbe,0xff,0x03,0xe2,0x85,0xff,0x85,0x41,0xb0,0x00,0xe1,0xfe,0x83,0x56,0x7e,0x0f,0x1b,0xef,0x36,0x03,0x9c,0x17,0xc5,0xff,0xdd,0x82,0xfd,0x4f,0xe0,0x1a,0x3e,0xf0,0xfe,0x70,0x51,0xc8,0x07,0x03,0x80,0x3e,0x9f,0xfc,0x0a,0x17,0x00,0x90,0x70,0x3f,0xbf,0x70,0x7c,0xc1,0x20,0x11,0x0a,0x01,0x34,0x7d,0xe3,0xe5,0x03,0x88,0x3c,0xa1,0x00,0xf2,0xf1,0x87,0xe6,0x03,0x06,0x90,0x03,0xc7,0xf7,0xe7,0x07,0xbc,0x03,0x0d,0x01,0x07,0x90,0x81,0x7f,0x00,0xf3,0xbc,0x10,0x04,0x1e,0x5f,0x10,0x79,0xfc,0x11,0xe2,0x0f,0x10,0x00,0xc2,0x01,0xe3,0x7f,0x50,0x27,0x82,0x7f,0xdc,0x07,0x9c,0x10,0x18,0x84,0x12,0x07,0x8f,0xf0,0x1e,0x70,0x2f,0xec,0xfd,0x22,0x5e,0x00,0x10,0xf0,0x7f,0x82,0xf4,0x80,0xef,0x63,0xe0,0xf1,0xdf,0x94,0x4a,0x0f,0xf0,0x07,0xa4,0x03,0xfb,0xc7,0xff,0xfd,0xe1,0xe2,0x22,0x8f,0xf2,0x2f,0xf0,0x10,0x79,0xfe,0xc7,0xc5,0x71,0xe0,0x28,0x0c,0x1e,0xfc,0xf0,0x58,0xe0,0x4a,0x87,0xbe,0x07,0x1c,0x03,0xeb,0xff,0xdb,0x8f,0x08,0xc4,0x7b,0xf0,0x7b,0x52,0xc1,0x83,0x0f,0xff,0xfc,0xf3,0x7f,0xfa,0x78,0x3d,0x3d,0x3f,0xfa,0x20,0x3c,0x71,0xea,0x31,0xb2,0xff,0xa6,0x60,0xf4,0xc8,0xc7,0xe8,0x7d,0x01,0xe9,0xe1,0x60,0x30,0xc0,0x7a,0x58,0x7c,0x14,0x0f,0x07,0x84,0xc8,0x50,0x5f,0xf4,0x0c,0x1e,0x98,0x18,0xfc,0x82,0x00,0x6e,0x38,0x28,0x35,0x14,0x05,0x00,0x90,0x7c,0x20,0x7f,0xe4,0x80,0xc2,0xd7,0x64,0x0f,0x58,0x87,0xc1,0x64,0x39,0xff,0xfc,0x20,0x1f,0x31,0x8b,0xf6,0x78,0xe0,0x31,0x70,0x7c,0x5a,0x26,0x1f,0x8c,0x7a,0x40,0x41,0xf3,0xf4,0xf0,0x40,0x70,0x04,0xf1,0x97,0x83,0xe3,0xf5,0xe1,0x83,0x98,0x08,}; -const uint8_t _A_Levelup1_128x64_8[] = {0x01,0x00,0xe6,0x01,0xff,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x07,0x80,0x3c,0x00,0xbf,0xb0,0x7f,0x88,0x3c,0x3f,0xe1,0x0f,0x00,0x5c,0x3f,0xc0,0x1f,0xdf,0x8c,0x7c,0x1f,0x97,0xfb,0xf7,0x83,0xf8,0x21,0x10,0x04,0xe7,0xf0,0x30,0x7f,0x98,0x7e,0xed,0xf0,0x08,0x47,0xb0,0x1e,0x7c,0xf8,0x4c,0xcb,0xe6,0x0f,0x38,0xbc,0x02,0x21,0xd0,0x03,0x9e,0x3f,0x93,0x33,0x07,0xa4,0x2e,0x01,0x20,0xdc,0x07,0xcc,0x1e,0xf0,0x50,0x78,0xd1,0x80,0xe7,0x4f,0x84,0xc9,0xbf,0x20,0x62,0xff,0x40,0xa0,0x14,0x0c,0x0f,0xfb,0xde,0x0f,0x2e,0x4c,0x9c,0x1e,0xdc,0x08,0x07,0xf4,0x1e,0x5c,0xfe,0x44,0x1f,0xf0,0x7e,0x38,0x0f,0xfa,0x81,0x10,0xfe,0xf1,0xc1,0xe7,0xcf,0xfe,0x03,0xca,0xfd,0x01,0x80,0xc8,0x64,0x1f,0xa0,0xf9,0xc2,0x79,0xc0,0xf2,0xbf,0xff,0x30,0x17,0xc8,0x95,0x00,0x1e,0x60,0x06,0xdf,0x50,0x30,0x51,0x4a,0x0c,0x11,0x3d,0x3b,0xe9,0x04,0x7e,0x13,0x42,0xfe,0x0e,0x4c,0x00,0xb5,0xfd,0x04,0xce,0x15,0x04,0x83,0x24,0x07,0x9f,0x83,0xce,0x48,0x29,0xff,0x20,0x78,0xd7,0xb4,0x16,0x38,0x94,0x12,0x03,0xf4,0x07,0x8f,0xcf,0x39,0x3c,0x07,0x98,0x7c,0x6e,0x71,0x44,0x00,0xfa,0x01,0xe5,0xc9,0x07,0xb7,0xfe,0x29,0x20,0x07,0x9e,0x0f,0x92,0x2f,0x40,0x79,0xc6,0x30,0x1e,0xb0,0xfa,0x5b,0xda,0xe4,0x0f,0x38,0x3d,0x83,0xd8,0x0f,0x2f,0x18,0x3d,0x64,0x1f,0xfe,0x94,0x02,0x30,0x3f,0x30,0x78,0x9b,0xd2,0x81,0xfe,0x9d,0xc0,0x20,0x80,0xf1,0x87,0xe0,0xbe,0xf2,0x0a,0x40,0xfc,0xf0,0x11,0xc8,0x64,0x02,0x04,0x6f,0x14,0x7c,0x40,0x20,0xb0,0x88,0x01,0xfc,0x81,0xf3,0x02,0x80,0x1f,0xc7,0xf4,0x0f,0xc9,0x80,0x3f,0x30,0x10,0x02,0x00,0xff,0x41,0xf5,0x00,0xc1,0xc0,0xf0,0x1f,0xe0,0x7d,0xdf,0x20,0x14,0x00,0x41,0x43,0xc1,0x03,0x80,0x07,0xa8,0x00,0x54,0x62,0x00,0x1f,0x98,0x08,0x6f,0xe0,0xf7,0xe8,0x02,0x0a,0x1a,0x1f,0x21,0xb1,0x03,0xd3,0xb0,0x0f,0x28,0x30,0x1c,0x8a,0xc4,0x0f,0x4e,0xa0,0x3f,0x85,0xe7,0x06,0xce,0x62,0x01,0xe7,0x4f,0x07,0xc6,0x8b,0x09,0x01,0x07,0x8e,0xfe,0x5e,0x5f,0x70,0x78,0xe0,0xa0,0x61,0xf2,0x07,0xa5,0x80,0x1e,0x98,0x18,0x38,0x3c,0xa2,0xe0,0xf4,0xef,0xef,0xc3,0xee,0x0f,0x4d,0x01,0xe0,0x7f,0xc3,0xf5,0xff,0xc2,0xc1,0xed,0xfc,0x2f,0xaf,0x7e,0x0a,0x0f,0x39,0x00,0x60,0x8f,0xe9,0xf7,0xf8,0xbf,0x44,0x00,0x54,0x0f,0xd0,0x40,0x51,0xeb,0x78,0x80,0x83,0xd3,0xe8,0x1f,0x18,0x72,0xfd,0x33,0xe0,0xe3,0x07,0x8f,0x20,0x1e,0x23,0x22,0x6f,0x95,0x9c,0x1e,0xb3,0x0f,0xff,0xe3,0xf6,0x0c,0x13,0xa0,0xff,0xe3,0x34,0x00,0x7a,0x70,0x20,0x1f,0x78,0x38,0x18,0x78,0x1f,0xf8,0x0c,0x18,0x1e,0xb0,0x0f,0xff,0xa1,0x44,0x40,0x01,0xff,0x40,0x41,0xed,0x00,0xf4,0x7f,0x7b,0xe0,0xf2,0x2e,0x88,0x3e,0x3c,0x61,0xf3,}; -const uint8_t _A_Levelup1_128x64_9[] = {0x01,0x00,0xd6,0x01,0xff,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x07,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x78,0x01,0x3d,0xe0,0xff,0x06,0xe4,0x0f,0xf0,0x0f,0xab,0xf8,0x04,0x7f,0x9c,0x7c,0x18,0x7a,0xf3,0xf0,0xf9,0xc0,0x7f,0x2c,0xff,0x0e,0x07,0xb8,0x1f,0x71,0xb8,0x04,0x0f,0xda,0x09,0x3e,0x7c,0x26,0x65,0xf3,0x07,0x9c,0x16,0x01,0x0c,0xfd,0x03,0xcf,0x1f,0xc9,0x99,0x83,0xd2,0x05,0x00,0x88,0x71,0x0e,0x26,0x0f,0x59,0x7d,0xea,0x03,0x00,0x90,0x6f,0x81,0xe7,0x4f,0x84,0xc9,0xbf,0x21,0xf2,0xdf,0xc0,0x20,0x14,0x0a,0x08,0x3d,0x39,0x32,0x70,0x7b,0x60,0x30,0x1f,0xee,0x39,0x3c,0xb9,0x10,0x7f,0xc0,0x3c,0xab,0xf0,0x09,0xfd,0x03,0x21,0xfe,0x80,0x83,0xcf,0x9f,0xfc,0x2b,0x15,0x7f,0x81,0xc0,0x90,0x48,0x3f,0xa1,0xf3,0x84,0xf3,0x81,0xe5,0x7f,0x97,0xc8,0x23,0xd1,0x10,0x78,0xa8,0x66,0x5f,0x90,0xb0,0xc2,0xa4,0x3c,0x20,0x7d,0x54,0x33,0xf0,0x68,0x14,0xe8,0x1f,0x31,0x7e,0x46,0xce,0x09,0x02,0xe3,0x7f,0x87,0xc3,0x83,0xce,0x48,0x29,0xff,0x20,0x79,0x7a,0x2c,0x70,0x5c,0x14,0x07,0xfa,0x0f,0x1f,0x9e,0x72,0x78,0x0f,0x5b,0x9c,0x16,0x81,0x00,0x60,0x88,0x3c,0x79,0x20,0xf6,0xbf,0xc1,0x66,0x00,0xf3,0xc1,0xf2,0x45,0xec,0x0f,0x18,0x67,0x03,0xf6,0x1f,0x4b,0x78,0x18,0x7f,0xf0,0xbe,0x47,0xfe,0x09,0x03,0xf8,0x03,0xcf,0xc6,0x0f,0x5e,0x87,0xff,0x85,0x00,0xfc,0x5f,0x41,0xe8,0x6f,0x38,0x5e,0x42,0x1f,0x3f,0x80,0x7f,0x27,0xdf,0xe8,0x7e,0x0b,0xef,0x20,0xa4,0x0f,0xca,0x17,0x20,0x81,0x41,0x20,0x17,0xfb,0xfa,0x3e,0x21,0x7c,0x08,0x0b,0xc0,0x77,0xe0,0xe8,0x07,0x8c,0x00,0x1e,0x3e,0x0e,0xf8,0x3a,0x3e,0xe0,0xf3,0xfc,0x2f,0xa4,0x1e,0x49,0xd1,0xe7,0x40,0xd7,0xe2,0x00,0x6f,0x18,0x3c,0x70,0x1c,0x18,0x1f,0xfd,0x7e,0x21,0xf9,0x80,0x7f,0xa0,0x28,0xf2,0xff,0xc3,0xc1,0x03,0x80,0x07,0xa8,0x40,0x61,0xeb,0xf1,0xff,0xfc,0xc0,0x42,0x75,0x30,0x79,0x80,0x04,0x1e,0x50,0xd0,0xf9,0x11,0x88,0x1e,0xa2,0xf2,0x83,0x01,0x88,0x8c,0x40,0xf4,0xe0,0x7f,0x01,0xfb,0x30,0x1c,0x14,0x1b,0x39,0x88,0x07,0xc7,0x38,0x1e,0x7a,0x2c,0x24,0x04,0x1e,0xdc,0x01,0xf1,0x03,0xcb,0x05,0x03,0x07,0xb7,0xf0,0x1e,0xb8,0x18,0x38,0x3c,0xa0,0xa0,0xf2,0xfc,0x07,0xe8,0x1e,0x7e,0x0f,0xa8,0xfe,0x41,0xe7,0x00,0xfa,0x17,0xe6,0x04,0x0f,0x3f,0x60,0x3c,0xcf,0xea,0x0f,0xeb,0xfc,0x04,0x1e,0x7d,0x80,0x79,0x43,0x97,0xe8,0x0f,0x91,0x59,0x37,0xcb,0x7e,0xce,0x4d,0x40,0x3c,0x8e,0x65,0xbf,0x07,0x9d,0x00,0x1e,0xd0,0x75,0x39,0x01,0x46,0xbe,0x0f,0x4a,0x40,0x3c,0x80,0x0b,0x2f,0x80,0x48,0x01,0xe5,0x88,0x24,0x08,0x01,0xa2,0xe0,0xf4,0x84,0x13,0x08,0x00,0x80,}; -const uint8_t _A_Levelup1_128x64_10[] = {0x01,0x00,0xde,0x01,0xff,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x07,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x78,0x03,0xc0,0x09,0xef,0x06,0xe4,0x0f,0xf0,0x0f,0xcb,0xff,0xf3,0x8f,0xc7,0x07,0xde,0x7e,0x1f,0x38,0x0f,0xe5,0x9f,0xe1,0xc0,0xf7,0x03,0xee,0x37,0x00,0x81,0xff,0x4a,0x27,0xcf,0x84,0xcc,0xbe,0x63,0xd2,0xff,0xc1,0x60,0x10,0xcf,0xd0,0x5c,0xf1,0xfc,0x99,0x98,0x3d,0x20,0x50,0x08,0x87,0x10,0x3e,0x60,0xf5,0x9f,0xdf,0xa0,0x30,0x09,0x06,0xf8,0x1e,0x74,0xf8,0x4c,0x9b,0xf2,0x1f,0x2d,0xfc,0x02,0x01,0x40,0xa0,0xff,0xce,0x25,0x4f,0xe4,0xc9,0xc1,0xed,0x80,0xc0,0x7f,0xb5,0x64,0xf2,0xe4,0x41,0xff,0x04,0x62,0xaf,0xc0,0x27,0xf4,0x0c,0x85,0xfa,0x22,0x62,0x10,0x78,0xf3,0xff,0x80,0xf3,0xe0,0x70,0x24,0x12,0x0f,0xe8,0x7c,0xe1,0x3c,0xe0,0x79,0xcb,0xe4,0x11,0xe8,0x88,0x3c,0x56,0x33,0x2f,0xc8,0x58,0x61,0x52,0x1e,0x12,0xc6,0x3f,0xd2,0xfa,0x86,0x7e,0x0d,0x02,0x9d,0x2b,0xa6,0x2f,0xc8,0xd9,0xc1,0x20,0x5c,0x66,0x08,0xf3,0xf0,0x79,0xc9,0x05,0x3f,0xe4,0x1f,0x18,0xbf,0xa2,0xc7,0x05,0xc1,0x40,0x4b,0xc5,0xf3,0xce,0x4f,0x01,0xeb,0x73,0x82,0xd0,0x20,0x0c,0x11,0x07,0x8f,0x24,0x1e,0xd7,0xf8,0x2c,0xc0,0x1e,0x78,0x3e,0x48,0xbc,0xab,0xff,0x40,0x79,0xc3,0x38,0x1f,0xb0,0xfa,0x5b,0xc0,0xc3,0xfe,0x85,0xf2,0x3f,0xf0,0x48,0x1f,0xc0,0x1e,0x7e,0x30,0x7a,0xf4,0x3f,0xfc,0x28,0x07,0xe0,0x9e,0x60,0xf1,0x37,0x9c,0x2f,0x21,0x0f,0x9f,0xc0,0x3f,0x9f,0xef,0xfc,0x3f,0x05,0xf7,0x90,0x52,0x09,0xe5,0x0b,0x90,0x40,0xa0,0x90,0x0b,0xfa,0x3e,0x61,0x7c,0x08,0x0b,0xc0,0x77,0xe0,0xfa,0x80,0x03,0xc7,0xc1,0xdf,0x07,0xef,0xe1,0x9d,0x00,0xf3,0x4e,0x8f,0x3a,0x06,0x4f,0x10,0x03,0x7d,0xc1,0xe3,0x80,0xe0,0xc0,0xff,0xe6,0xf1,0x0f,0xcc,0x03,0xfd,0x01,0x47,0x91,0xc0,0x41,0x03,0x80,0x07,0xa8,0x40,0x61,0xeb,0xf1,0xff,0xfc,0xc0,0x42,0x76,0x30,0x79,0x80,0x04,0x1e,0x50,0xd0,0xf9,0x11,0x88,0x1e,0xa2,0xf2,0x83,0x01,0x88,0x8c,0x40,0xf4,0xe0,0x7f,0x01,0xfb,0x30,0x1c,0x94,0x1b,0x39,0x88,0x07,0xc7,0x38,0x1e,0x7a,0x2c,0x24,0x04,0x1e,0xdc,0x0f,0xdc,0xfc,0x92,0x20,0xf1,0xc1,0x40,0xc1,0xed,0xfc,0xfd,0x87,0xd3,0x03,0x07,0x07,0x94,0x14,0x1e,0x5f,0x80,0x7a,0x87,0xd0,0x1e,0x7e,0x0f,0xaa,0x20,0x87,0xec,0x0f,0x38,0x07,0xd0,0x1e,0x65,0xf5,0x81,0x03,0xcf,0xd8,0x0f,0x33,0xfa,0x83,0xfa,0xff,0x01,0x07,0x9f,0x60,0x1e,0x50,0xe5,0xfa,0x03,0xe4,0x56,0x46,0x52,0xdf,0xb3,0x93,0x50,0x0f,0x26,0x91,0x6f,0xc1,0xe7,0x40,0x07,0xb4,0x1d,0x4e,0x40,0x51,0xaf,0x83,0xd2,0x90,0x0f,0x20,0x02,0xcb,0xe0,0x12,0x00,0x79,0x62,0x09,0x02,0x00,0x68,0xb8,0x3d,0x21,0x04,0xc2,0x00,0x20,}; -const uint8_t* const _A_Levelup1_128x64[] = {_A_Levelup1_128x64_0,_A_Levelup1_128x64_1,_A_Levelup1_128x64_2,_A_Levelup1_128x64_3,_A_Levelup1_128x64_4,_A_Levelup1_128x64_5,_A_Levelup1_128x64_6,_A_Levelup1_128x64_7,_A_Levelup1_128x64_8,_A_Levelup1_128x64_9,_A_Levelup1_128x64_10}; - -const uint8_t _A_Levelup2_128x64_0[] = {0x01,0x00,0x34,0x01,0xff,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x07,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x78,0x03,0xc0,0x1e,0x00,0x38,0x1f,0xe0,0x1d,0x97,0xff,0xe7,0x1c,0x1f,0x99,0xf8,0x1c,0xfc,0x1f,0x96,0x7f,0x87,0x03,0xf8,0x0f,0xb8,0xdc,0x22,0x01,0xfb,0x07,0xdc,0x16,0x09,0x00,0xfa,0x03,0xee,0x1d,0x02,0x80,0x7a,0x0b,0xd7,0x31,0x07,0x8f,0x40,0x1f,0x5b,0xfa,0x04,0x06,0x01,0xa0,0x07,0xd5,0x7f,0x00,0x0f,0xe8,0x26,0x06,0x7f,0x40,0x07,0xd4,0xbe,0x05,0x42,0xa0,0x03,0xf2,0x03,0x24,0xcf,0xe0,0x3f,0xc5,0xe9,0x88,0x50,0x72,0x92,0x0c,0x08,0x3e,0x73,0xf1,0xf9,0x0d,0x22,0xf9,0x82,0x07,0xcd,0xbe,0x61,0x10,0x94,0x79,0xa0,0x5f,0xd0,0x7c,0x45,0xe8,0x11,0x09,0x27,0x8c,0x1f,0x50,0xb3,0xf0,0xc5,0x3c,0xe0,0xfb,0x80,0x40,0xb2,0x9f,0xf0,0x7d,0x7a,0xe0,0x10,0xc0,0x7e,0x46,0xe0,0x77,0x00,0x7e,0x42,0xe1,0x98,0x0d,0x2d,0xfc,0x1f,0x71,0x08,0x05,0x3a,0x7f,0x01,0x37,0xd4,0x81,0xfa,0x39,0xf8,0x01,0xfe,0xe0,0x12,0x0a,0x40,0x3e,0xa5,0xef,0xe2,0x98,0x03,0xee,0x01,0x06,0x80,0x10,0x84,0x1f,0x35,0xf8,0x04,0x62,0x00,0x00,0x10,0x7c,0xef,0xe0,0x1e,0x00,0x7e,0x5f,0xc7,0xc3,0x0f,0x07,0xda,0x6c,0x43,0xc4,0x0f,0xb8,0x28,0x3f,0xa1,0xa0,0xfe,0x8a,0x8b,0xfc,0x1f,0xe0,0xfe,0x2f,0xa7,0xe8,0xff,0x30,0x30,0x7f,0x83,0xcf,0xe8,0xaf,0x91,0x7a,0x03,0xff,0xd0,0xdf,0x90,0x7a,0x74,0x1f,0xf2,0xcf,0x10,0x01,0x68,0x01,0xf1,0x17,0x07,0xa5,0x00,0x1f,0x10,0x90,0x7a,0x60,0x3f,0x80,0xd5,0xc7,0xdf,0xe0,0xc0,0xf4,0x80,0x7c,0xc1,0xeb,0x77,0xc0,0x40,0x41,0xe9,0x01,0xe6,0x03,0xd7,0x17,0x7f,0x05,0x08,0x3d,0x26,0x18,0x00,0x7a,0x42,0xc1,0x44,0x0f,0x4e,0x05,0xfc,0x1f,0xa5,0x11,0xff,0x03,0xcc,}; -const uint8_t _A_Levelup2_128x64_1[] = {0x01,0x00,0x17,0x02,0xff,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x07,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x2f,0xf8,0x17,0x59,0xfe,0xf8,0x6b,0x37,0xf9,0xf0,0x32,0x7e,0xc1,0xac,0x02,0x19,0xff,0xfe,0x03,0xfc,0x11,0x5c,0xfe,0x7f,0xfe,0xf1,0x8c,0x2e,0x3d,0xce,0x80,0xe7,0xbe,0xff,0x90,0x7c,0xc3,0xe6,0x18,0x0b,0x0f,0xfb,0xf0,0x61,0x8c,0x7c,0x3e,0x19,0x40,0xc0,0x43,0x6f,0xc1,0xe8,0xbf,0xe3,0xa1,0x52,0x08,0x04,0x0a,0xfe,0x83,0x7f,0xdf,0xf6,0x09,0x05,0x88,0x40,0x30,0x89,0x28,0xfb,0xfb,0xf0,0x10,0x40,0x78,0xca,0x0f,0xee,0x00,0x18,0xfd,0x02,0x05,0x08,0x80,0x44,0x3f,0xc6,0x08,0xbf,0xd2,0x3f,0xc0,0xf2,0xfe,0x7f,0x41,0xef,0xf7,0x90,0x40,0xe1,0xf0,0x09,0x06,0xf1,0x3d,0x3a,0x88,0x04,0x63,0xf1,0xa3,0xfc,0x03,0xe6,0xa1,0x10,0x90,0x41,0x28,0x80,0xf1,0xf3,0xbe,0x5a,0xff,0xb2,0x88,0x50,0x3f,0x54,0x80,0x78,0xb0,0xda,0xfb,0xff,0xd8,0x42,0x30,0x50,0x5a,0x8e,0xe2,0x1f,0xfc,0xf7,0x84,0x17,0xf9,0x68,0x84,0x40,0xbc,0x79,0x2f,0xe7,0xdc,0xdf,0x17,0x88,0x46,0x07,0xc5,0xa3,0xfe,0x3c,0x9e,0xff,0x38,0xfc,0x41,0xf0,0x3e,0x5d,0x2f,0xe0,0x1e,0xf2,0x78,0x04,0xe2,0x19,0x80,0xfe,0xe9,0x78,0x1f,0x00,0x7b,0x61,0xf4,0x31,0xc7,0xf8,0xff,0x64,0xb0,0x9f,0xe7,0xff,0xbe,0x10,0x58,0x1b,0xf8,0x81,0xe3,0x01,0xff,0x6f,0xf7,0xe0,0xf5,0xd1,0xc1,0x30,0x18,0x1f,0xec,0x4e,0x13,0x8f,0xfb,0x83,0xda,0x1f,0xe4,0x80,0x65,0xbf,0x71,0x2c,0x0f,0x9f,0xe7,0xdf,0x39,0x1d,0xee,0xfd,0x9f,0x8a,0x40,0xfc,0x17,0xf8,0x4f,0x27,0xff,0xfb,0xf7,0xb8,0x8e,0x7f,0xfc,0x9f,0x43,0x21,0x90,0x0f,0x82,0x08,0x59,0xaf,0xff,0xcf,0xc3,0xa2,0x10,0x0c,0x04,0x1a,0x53,0xe0,0x07,0xa9,0x10,0x60,0x10,0xa9,0x04,0x02,0x01,0x01,0x80,0x83,0xda,0xff,0x1f,0xd0,0x42,0xa8,0x00,0xf1,0x80,0x6a,0x51,0xe3,0xf3,0x08,0x26,0x7a,0x03,0x12,0xc0,0x40,0x44,0x04,0x8f,0x1f,0x39,0xfd,0xa2,0x50,0x08,0x30,0x7c,0xbf,0xdf,0xfe,0x79,0xfd,0xa4,0x50,0x0b,0xc0,0x7c,0x81,0xee,0x96,0x1a,0x10,0xf8,0x83,0xe2,0x2f,0x1f,0x7f,0xec,0x1e,0x7c,0xf8,0x5e,0x08,0x1e,0x70,0x11,0xf0,0xa3,0xd0,0xfc,0x3a,0x38,0x11,0x38,0x83,0xe3,0xf7,0xf1,0xab,0x8d,0x4a,0x2d,0xf1,0x81,0x40,0x81,0xe5,0xc1,0xff,0xfc,0x45,0xc8,0x04,0x1d,0x38,0x38,0xe0,0x1c,0x99,0xff,0xe0,0xbc,0xbf,0x38,0x7c,0x0c,0x1e,0x74,0x28,0x79,0x80,0x49,0xc9,0xc3,0x97,0x83,0xd2,0x15,0x06,0x0f,0x2c,0xde,0x0f,0x87,0x17,0xa4,0x12,0x04,0x1f,0x1f,0x78,0x3c,0xa9,0x70,0xed,0x00,0x3d,0x34,0x92,0x0c,0xf6,0xfc,0xc0,0x78,0xb8,0xe5,0x00,0x1e,0x90,0x88,0x05,0x9f,0x3e,0x2f,0x38,0x5e,0x0e,0x44,0x0f,0x49,0x84,0xab,0x33,0xce,0x07,0xa4,0x72,0x30,0x0f,0x4e,0x04,0x03,0x0c,0x60,0x48,0xbf,0x82,0x0e,0x0f,0x48,0x07,0xff,0x02,0x0f,0x50,0x48,0x83,0xd6,0x01,0x80,0x07,0x89,0x40,0xa5,0xe0,0xf6,0x61,0x8d,0x01,0x22,0x80,0xfa,0xb3,0x03,0xce,0x82,0x0f,0x89,0x07,0x00,0xfe,0x78,0x10,0x7c,0xf8,0x3f,0x22,0x02,0x81,0x82,0x04,0x1e,0xd9,0x0a,0x17,0xf0,0x3e,0x40,}; -const uint8_t _A_Levelup2_128x64_2[] = {0x01,0x00,0xed,0x02,0xff,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x3f,0xe4,0x1f,0xdf,0x40,0x43,0xf3,0xc0,0xa9,0x7f,0xfb,0x03,0xdf,0x66,0x05,0x4d,0xff,0xbc,0x1e,0xf3,0xbf,0xf0,0x14,0xe3,0xf7,0x8f,0xf7,0xc4,0x1e,0xb1,0x3f,0xe0,0x14,0xe1,0xf9,0x02,0x0b,0xc5,0xc1,0xeb,0xcc,0xff,0x03,0xda,0x1e,0x0f,0x48,0x3f,0xbf,0xfd,0xf8,0x07,0xad,0xfc,0x1e,0x57,0xff,0xf4,0x0f,0xe7,0xff,0x07,0xaf,0x8e,0xff,0xf8,0xed,0xc7,0xee,0x1f,0xc8,0x18,0x34,0x41,0xeb,0xc3,0x9f,0xfc,0x3f,0x70,0xfe,0x07,0xfe,0x01,0x9c,0x0b,0x88,0x88,0x41,0xe7,0x1f,0xc8,0x5f,0xe0,0x7c,0x08,0x7c,0x03,0xf9,0x7f,0x9e,0x07,0xd3,0x8f,0x17,0x80,0x5e,0xde,0xe5,0x0a,0xff,0x4f,0xe3,0xc0,0xf4,0xc7,0xcf,0xe0,0x11,0x32,0x68,0x84,0x07,0xf7,0x3f,0x4b,0xa7,0xe2,0x7f,0x7f,0x82,0x70,0x20,0xb9,0xdd,0x54,0x08,0x3e,0x21,0xe4,0xfc,0x4d,0xff,0x10,0xe9,0x86,0x22,0xc0,0x1f,0x1b,0xf8,0xb8,0x58,0x47,0xfe,0x99,0xda,0x31,0xd0,0xcc,0x46,0x03,0x53,0x82,0xbd,0xe7,0x83,0xe9,0x3f,0x99,0xf0,0x20,0x90,0x28,0x24,0x06,0x05,0x80,0xbf,0xe3,0x2f,0xeb,0xe5,0x07,0x8c,0x04,0x02,0x3a,0x4e,0x07,0xbf,0x00,0xa6,0x25,0xf1,0xe0,0x30,0x10,0x00,0x78,0xc2,0x30,0x13,0xc0,0x79,0x00,0x0e,0xfd,0x80,0xa0,0x03,0xcb,0x21,0x0a,0x08,0x88,0x39,0x19,0x83,0x00,0x07,0x8c,0x0a,0x05,0x10,0x30,0x0f,0x03,0x7e,0x0f,0x3c,0xe7,0xbe,0x03,0x20,0x07,0x96,0x82,0x05,0x00,0x90,0x23,0xd2,0x33,0xff,0x07,0xa0,0x0c,0x41,0xe7,0xc7,0x07,0x8c,0x6b,0x9d,0x01,0x15,0x88,0x3c,0x68,0x1a,0x88,0x54,0x00,0x18,0x38,0xb0,0x10,0x9e,0x04,0x1e,0xa1,0xf1,0xc7,0x7f,0xfc,0x7f,0xd0,0x78,0xc1,0xe0,0x18,0x00,0xc8,0xa0,0x07,0x01,0xaa,0x85,0x36,0x47,0xce,0x3f,0x28,0x69,0x20,0x71,0x10,0x70,0x78,0xe3,0xc2,0xc3,0xff,0x07,0x18,0x00,0x60,0x38,0x0a,0x54,0x23,0xff,0x87,0xc8,0x68,0xa1,0x5f,0x80,0x7a,0x8c,0x06,0x49,0x90,0x80,0xd3,0x24,0x01,0x61,0xfc,0xfe,0xc1,0xeb,0x8a,0x92,0x54,0x20,0x15,0x09,0x06,0xa7,0xc0,0xeb,0x20,0x71,0x5f,0xe1,0xf0,0x0a,0xa4,0xc2,0x41,0x60,0xa8,0x40,0x7e,0x1e,0xff,0xe8,0x3c,0xa1,0xff,0xf8,0xf4,0xa3,0xa9,0x30,0x91,0x58,0xab,0x1a,0x9f,0x87,0x1e,0xff,0xde,0xc7,0x8b,0x47,0xd2,0x1f,0x1e,0xa4,0x42,0x45,0x42,0xac,0x07,0xc7,0x8f,0x3f,0xff,0x61,0xff,0xff,0x7e,0xfc,0x1f,0x40,0x0f,0x41,0xf8,0xf9,0xdf,0xa3,0xe3,0x7f,0x98,0x7c,0x62,0x2e,0x21,0xae,0x40,0x78,0x00,0xc2,0x4f,0x91,0x40,0x43,0xe3,0x1f,0x75,0x8d,0x7f,0x53,0x80,0xf1,0xbb,0xd0,0x00,0x30,0x0d,0x26,0x7f,0xff,0xcf,0x97,0xc0,0x60,0x1f,0x00,0x50,0x82,0x07,0xff,0xf3,0xfe,0xe0,0x64,0x94,0xf8,0x07,0x42,0x4f,0xa9,0x81,0x7f,0x3e,0xe0,0xf2,0xfe,0x78,0x3d,0xf0,0x1a,0x24,0xc2,0x01,0x60,0x88,0x07,0xc7,0xfc,0x0f,0x10,0xe8,0xa4,0xca,0x01,0x84,0x1f,0x94,0x3f,0x52,0xdf,0x10,0xf0,0xf9,0xfe,0x3f,0xfe,0x3c,0xf2,0x01,0x04,0x88,0x17,0xc5,0xe4,0x30,0x02,0x20,0xf7,0xfc,0xff,0x9f,0xfc,0x0a,0x31,0xa0,0x82,0x48,0x20,0x00,0x11,0xd4,0xe0,0xb3,0xfc,0x7f,0x3f,0xcf,0xf9,0xff,0x90,0xc0,0x03,0xe2,0x0f,0x36,0xf8,0xc3,0xf8,0x3e,0x7b,0xc0,0xf4,0x6f,0xf0,0x00,0xfa,0xe0,0x61,0x50,0x7f,0x05,0xde,0x38,0x7e,0x38,0x04,0x18,0x7a,0x24,0x11,0x81,0x81,0xc7,0xc1,0x13,0xc0,0x03,0x87,0x9f,0x80,0xd5,0x03,0xd3,0x07,0x0a,0x85,0x7c,0x20,0x3e,0x00,0x78,0xed,0xc2,0xe3,0x05,0xe0,0x40,0x23,0x00,0x41,0x41,0x8f,0x81,0x44,0x2b,0x21,0xa5,0x6a,0x31,0x50,0x4c,0x07,0xe6,0x19,0x00,0xc4,0xea,0xb2,0x41,0x91,0xfc,0x07,0xc7,0x15,0x01,0xb0,0x03,0xc6,0x0e,0xe4,0x19,0x8c,0x03,0x18,0x0f,0x1d,0xc7,0xef,0xff,0x08,0x87,0x46,0x20,0x86,0xc1,0x01,0x0f,0x07,0x01,0x83,0x81,0x4a,0xb9,0x06,0xe1,0x84,0x7c,0x20,0xe0,0xc1,0x83,0x17,0x46,0x03,0x7f,0xc0,0x18,0x48,0x5e,0x25,0x91,0x47,0x88,0xdc,0x40,0x82,0x00,0x1a,0x06,0x88,0xc2,0x20,0xf6,0x00,0x21,0xd4,0x4b,0xe2,0x0f,0x15,0x79,0x83,0xd7,0x41,0xaa,0x85,0x2f,0x87,0xfe,0xa9,0x10,0x7b,0x82,0x4b,0xfc,0xbf,0x11,0x29,0x00,0x1b,0x21,0xaa,0x95,0x03,0x87,0xfd,0x94,0x07,0xc4,0x20,0x3e,0x5f,0xff,0xc4,0x2e,0x02,0x0d,0x50,0x30,0xe9,0x07,0xe3,0xf6,0xff,0xfe,0x61,0x70,0x61,0xfa,0x83,0xc5,0xc2,0x4a,0xf2,0x81,0x9e,0xc4,0x1e,0xbf,0x8d,0x46,0xab,0x14,0x0f,0x20,}; -const uint8_t _A_Levelup2_128x64_3[] = {0x01,0x00,0x2d,0x03,0x8f,0xc0,0xb8,0x1f,0xfb,0xfd,0xe2,0x7f,0xf8,0x02,0x0f,0xff,0xff,0x03,0xff,0x00,0xc6,0xff,0x36,0xe0,0x47,0xfd,0xff,0x08,0xff,0xf3,0xff,0x3f,0x05,0x8f,0xf0,0x1e,0x5f,0xf8,0xfe,0x02,0xfb,0xff,0xf8,0x43,0xff,0x99,0xfd,0xf8,0x44,0x81,0xe7,0x17,0x88,0x7d,0x37,0xe0,0xf2,0x87,0xe7,0xff,0xe0,0x11,0xfe,0x83,0xca,0x1f,0x20,0xf8,0x0f,0x46,0x0f,0xfe,0x83,0xf6,0xff,0xfc,0xf0,0xfa,0x47,0xec,0x1e,0x08,0xf8,0x3c,0xa0,0x7c,0x3f,0xff,0x9c,0x1e,0x93,0xf8,0x06,0x02,0x1f,0xf8,0x2c,0x8c,0x07,0xc1,0xff,0xfd,0x83,0xdb,0xc1,0x07,0xfc,0x40,0x6f,0xda,0x0d,0x47,0xff,0xf2,0x0f,0x4b,0xf8,0x7c,0x60,0xda,0x88,0x0c,0x72,0x01,0xb0,0xff,0xe0,0x01,0xe9,0xff,0x80,0x68,0x21,0xff,0xa9,0x06,0x02,0x01,0xf2,0xbf,0x40,0x12,0x44,0x1f,0x2b,0x82,0xa1,0x7d,0x11,0xf8,0x05,0xf8,0x1e,0x74,0x7f,0x80,0xc0,0x75,0x50,0xa8,0x04,0x83,0xf0,0x0f,0x1b,0xe1,0x48,0x6f,0xfb,0x78,0x38,0x3c,0x40,0x09,0xfc,0x81,0x83,0xcb,0xfb,0xbf,0xbf,0xcb,0xbe,0x1a,0x8d,0x56,0xaa,0x55,0x80,0x85,0x18,0xc4,0x5e,0xb3,0xce,0x00,0x7d,0x7b,0x80,0x21,0xdf,0xcf,0xef,0xee,0x72,0x2f,0x8e,0xaa,0x01,0xa8,0xd1,0x62,0xa7,0xfa,0x0c,0x06,0x7d,0x82,0x33,0x8f,0x3d,0xfe,0x04,0x18,0x15,0x68,0xc0,0x1e,0xa2,0x02,0x1f,0x0f,0xff,0xbf,0x3f,0xe3,0xcf,0xc7,0x63,0xca,0xd7,0xe7,0xf5,0x58,0xa8,0x3e,0xa3,0x80,0x8e,0x29,0xfe,0x3c,0x2e,0x30,0x0b,0x87,0x76,0xea,0x73,0x11,0x10,0xd8,0x01,0xe5,0xcf,0x9f,0xcf,0xf5,0x50,0x2d,0x61,0x80,0x75,0x38,0xa2,0x28,0xda,0x09,0x63,0x9f,0x1f,0x0c,0xf8,0x3e,0x35,0x6a,0xad,0x54,0x3a,0x20,0x01,0xba,0x7f,0xf7,0xf9,0xff,0xbc,0xfe,0x7c,0x9c,0x1d,0x5e,0xbb,0x57,0xa6,0x85,0x68,0xb5,0x5b,0x8d,0xff,0x7f,0xde,0x0f,0x18,0x60,0xe8,0x43,0xc3,0x55,0x86,0x87,0xcb,0x31,0xfd,0xff,0xf9,0xfc,0xe4,0xe1,0xd4,0x72,0xb5,0x41,0xf1,0xcd,0x42,0x88,0x63,0xe4,0xff,0xfe,0x7c,0xff,0x18,0x38,0x5c,0x68,0x15,0x5a,0xbd,0x5e,0x2a,0x1f,0x2f,0x87,0xcf,0xf3,0x27,0xfc,0x41,0xe5,0x4b,0xe2,0x00,0x16,0x29,0x86,0x3f,0x0f,0x8e,0xe2,0x07,0xfc,0x87,0x85,0xc6,0xc0,0x1f,0x29,0xa8,0x7c,0xbc,0x13,0x9f,0x74,0x0f,0xd1,0x0f,0x0d,0x0e,0xc8,0x3c,0x56,0xa2,0xf0,0xc0,0xbf,0x19,0x8f,0xfc,0x07,0xf9,0x06,0x0b,0x8d,0x40,0x3e,0x55,0x50,0xf9,0x7e,0x38,0x5f,0xf8,0x00,0x04,0x47,0xc6,0x80,0x10,0x21,0x42,0xaf,0x1d,0x09,0xfe,0x00,0x1e,0x20,0x01,0xec,0x07,0x46,0xab,0xdf,0x03,0x94,0xf3,0x85,0x0f,0x07,0x90,0x7c,0x7d,0x5a,0xaf,0xfe,0xbf,0x74,0x1f,0x19,0x54,0xf3,0xd0,0xb5,0x1e,0x1a,0xdc,0xfa,0xb5,0x5a,0xed,0xd6,0x02,0x1f,0x2f,0x00,0x0c,0x78,0xf0,0x1d,0x03,0x78,0x7f,0x5a,0xa0,0x08,0xea,0x47,0xe3,0x38,0xa0,0x40,0x25,0x1e,0x34,0xf9,0x55,0x2e,0xa0,0x01,0xaa,0x87,0xc8,0x00,0x7f,0xa8,0x06,0x8e,0x15,0xfc,0x1e,0x0f,0xab,0xf4,0x1f,0x20,0x71,0x42,0xbf,0x1e,0x70,0xc0,0xf5,0x2a,0xb7,0x7a,0xbd,0x74,0x3e,0xdf,0x8f,0xfe,0x0e,0x54,0x1f,0x59,0x54,0xaa,0x01,0x08,0xc0,0x28,0xc7,0xfe,0x63,0x10,0xf8,0x80,0x04,0x3f,0x08,0x81,0xd5,0x7f,0x37,0xe1,0xf1,0xff,0xea,0x70,0x41,0xf1,0x90,0x6a,0x20,0x5f,0xeb,0xf8,0x4c,0x7e,0x9d,0xff,0xff,0x7e,0xfe,0x1f,0x6d,0xf5,0xff,0x51,0x2a,0xd6,0x7b,0xcf,0xe3,0xaf,0xd4,0xe0,0x03,0xe2,0xa3,0x18,0x17,0xf2,0xf6,0x7f,0x3a,0xa9,0xfe,0x09,0xe3,0xa8,0x85,0x6b,0x07,0xe5,0xaf,0x80,0xe0,0x35,0x40,0x11,0x0f,0x97,0xfc,0x30,0x35,0x42,0xf9,0x07,0xde,0xfd,0x0f,0x0f,0x93,0xf0,0xb5,0x58,0x10,0xe9,0x07,0xca,0x7d,0x1f,0x1f,0xec,0xf2,0x7c,0x57,0x10,0xfa,0x6a,0x71,0x40,0x53,0x80,0x4e,0x03,0xe5,0x56,0x1f,0x9a,0x98,0x40,0x0c,0xb7,0x1d,0x77,0xab,0x54,0xc1,0x1d,0x5e,0x88,0x40,0x48,0x21,0xf0,0x4c,0x02,0x23,0x55,0xea,0xaf,0x86,0xab,0x05,0x80,0x58,0x03,0xa7,0xf4,0xb4,0x6a,0xb1,0x5a,0xed,0x57,0xec,0x04,0x38,0xbd,0x16,0xc8,0x3e,0x30,0xa8,0x07,0xf3,0xb1,0x01,0xb0,0x07,0xc6,0xaf,0x5f,0xaa,0xcd,0x60,0x1d,0xc4,0xfa,0x6a,0x21,0xdb,0x80,0xe0,0xea,0xc0,0x43,0xeb,0xc0,0x6a,0xc3,0xe3,0xa0,0x85,0x7f,0xab,0x3f,0x5a,0xb9,0x70,0x6a,0xe0,0x32,0xbf,0xf5,0x43,0xe7,0xff,0xdb,0x85,0x44,0x38,0x3f,0xa3,0xd9,0xda,0xa1,0x50,0xa2,0x00,0xcf,0x6a,0x67,0xc3,0x00,0x28,0x7c,0xf8,0x1a,0xf0,0xf9,0x80,0x12,0x55,0x28,0x94,0x2f,0xc7,0xc7,0x6b,0x0f,0x41,0x84,0x40,0x03,0x80,0xf0,0xf7,0xc3,0x8a,0x00,0x2c,0xd0,0x84,0x75,0x5c,0x2f,0x8e,0x7c,0x3f,0x10,0xd1,0xf1,0xfc,0x20,0x27,0x62,0x00,0x18,0x18,0x74,0xca,0x91,0x1f,0x8f,0xe1,0xba,0xae,0x18,0xfe,0x28,0x44,0xbe,0xba,0xbf,0xd6,0xa3,0x55,0xa2,0x0f,0x8f,0xf0,}; -const uint8_t _A_Levelup2_128x64_4[] = {0x01,0x00,0x90,0x02,0xff,0x80,0x3c,0x01,0xf1,0xff,0xe0,0x3f,0x7d,0xff,0xd1,0x0f,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x2d,0xff,0xee,0x0f,0xef,0x47,0xff,0xfc,0x06,0x2d,0xf8,0x3d,0xe0,0x3e,0x49,0x3f,0xc0,0xfc,0x7f,0x8f,0xfc,0xed,0x02,0x37,0xff,0xc5,0xbe,0x01,0xf0,0xaf,0xe0,0xc1,0xe7,0xe0,0xff,0xc0,0xc2,0xe3,0x1f,0xf8,0x4f,0xe0,0x17,0x0b,0xf5,0x81,0x34,0x40,0xf1,0xb8,0xc1,0x38,0x1f,0xd8,0x3f,0xe2,0x73,0x00,0xf7,0xc7,0xe4,0x02,0xb1,0xff,0xcf,0xf0,0x02,0x81,0xc0,0x77,0xe0,0x37,0xf8,0x47,0x82,0xff,0x0e,0x6e,0x1c,0x1d,0xc4,0x3e,0x08,0x0c,0x0b,0x80,0x2e,0x1f,0x00,0x08,0x60,0x06,0x02,0xc3,0xc0,0x41,0xe4,0x09,0x12,0x70,0xd8,0x23,0xf8,0x08,0x78,0x3c,0x7e,0xf0,0x78,0x1c,0x03,0x81,0x07,0xff,0x40,0xc0,0xa5,0x19,0x10,0x8a,0x00,0xc6,0x05,0xc4,0xd7,0xc7,0xc0,0x82,0x00,0x13,0xf1,0xa4,0xc6,0x9e,0x08,0x3b,0xf8,0x3c,0xcb,0xa4,0x02,0x13,0x90,0xc1,0xa0,0x1a,0xcd,0x56,0xa8,0x84,0x50,0x0f,0x67,0xff,0xe7,0xf1,0xf9,0xfb,0x3f,0x30,0xfa,0x80,0xd8,0xa0,0x71,0x40,0x78,0xff,0x39,0xfe,0x7b,0xff,0x9f,0x89,0xff,0x85,0xc0,0x35,0x7a,0xed,0x58,0x90,0x45,0xe5,0x87,0x1f,0x94,0x02,0x9f,0x08,0xca,0x01,0x8a,0x9f,0x15,0x07,0x8d,0xe3,0x80,0x0f,0x30,0xc8,0xf0,0x35,0x41,0xf1,0x8d,0x14,0x13,0x9f,0xfb,0x07,0x8c,0x02,0x21,0xd0,0x0b,0x15,0x7e,0x2a,0x51,0x1b,0x07,0xfb,0xcd,0xff,0xe1,0x9f,0x8b,0x40,0x5e,0x1d,0x54,0xa8,0x3c,0x53,0xc9,0xce,0x43,0xff,0x01,0x44,0x93,0xc4,0x5a,0xc5,0x55,0xa8,0x40,0x77,0xd1,0xe8,0x07,0xdd,0xa4,0x20,0xf1,0xd8,0x07,0xca,0xd4,0x1f,0x28,0xf3,0x80,0x6f,0xf3,0x05,0x78,0xc1,0x14,0xe7,0x7f,0xaa,0xd5,0x60,0x30,0x48,0x06,0x02,0x3f,0xfe,0xfe,0x90,0x07,0x51,0xaa,0x40,0x0e,0xa8,0xbe,0x66,0x91,0xe3,0x86,0x45,0x3c,0x3f,0x96,0x39,0xd5,0x2a,0xa1,0x04,0xf7,0xfe,0xc4,0xa3,0xe8,0xd5,0x7f,0xf5,0xfb,0xa0,0xfa,0x16,0x87,0xc7,0x6f,0x80,0x55,0x3f,0xa1,0xf3,0x1f,0x8b,0xc9,0x38,0x70,0x30,0x20,0xeb,0x3f,0x5a,0xa0,0x08,0xb8,0x0c,0x1e,0x58,0x10,0x18,0xd0,0x03,0xef,0x54,0x09,0xab,0x9c,0x77,0x5a,0xaf,0x57,0xe8,0x16,0xd1,0xfb,0x85,0xc2,0x00,0x1f,0x50,0x80,0xd5,0x22,0x20,0xf1,0xff,0x7e,0x3f,0x01,0xfb,0xec,0x7f,0xef,0x12,0x00,0x78,0x87,0xce,0x2b,0x04,0x82,0xc5,0x03,0xc4,0x08,0x1f,0x1c,0x07,0xf9,0xbf,0x0f,0x8b,0x60,0x43,0xe9,0x5b,0x4f,0x90,0x7d,0x6a,0x35,0x58,0x28,0x04,0x59,0xe3,0xbe,0xbf,0x83,0xc7,0x59,0xef,0x3f,0x8e,0xbc,0x3e,0xbf,0xf8,0xf8,0x04,0x43,0xeb,0x55,0xa2,0xd0,0x6a,0xb1,0x58,0x07,0xee,0x13,0x97,0x07,0x8e,0xb0,0x7e,0x41,0xf5,0xe0,0x7f,0xe1,0xb1,0xf8,0x7a,0xfd,0xc3,0xe3,0x05,0xb0,0x43,0xf8,0x17,0xf6,0xf8,0xeb,0x35,0x40,0x02,0x0f,0xa4,0xc2,0x09,0xe0,0x8c,0x40,0x2a,0xa1,0xf8,0x09,0x95,0xc8,0x2a,0x41,0xf9,0x00,0x0c,0x40,0x04,0x35,0x14,0xa1,0x00,0x06,0xa7,0x55,0xaa,0x17,0x84,0x00,0x36,0x00,0x19,0x6b,0xbd,0x5a,0xa6,0x08,0xc0,0xc3,0xeb,0xf8,0x98,0x40,0x22,0xa1,0xe3,0xff,0xd5,0xea,0xb6,0x53,0xf9,0x03,0xc6,0xd1,0x00,0xc0,0x6b,0xb5,0x5f,0xb0,0x10,0xc2,0xe0,0x1b,0x00,0xf9,0xfb,0xbf,0x35,0x1f,0x28,0x7d,0x27,0xf5,0x5f,0xe1,0x00,0x4c,0x23,0xfe,0xd5,0xc3,0xb7,0x01,0xc1,0xd5,0x80,0x87,0xd7,0x80,0xd5,0x87,0x8b,0x01,0xff,0xfd,0x87,0x50,0x00,0x95,0x44,0x18,0xf8,0x29,0xfb,0x33,0xd0,0x87,0x07,0xf4,0x81,0x3b,0x50,0xfc,0xe1,0x1f,0x70,0xf4,0x5f,0xea,0xb5,0x03,0x01,0x69,0xc3,0xe6,0x00,0x49,0x52,0x01,0x3d,0xe1,0xf8,0x30,0x8c,0x16,0x82,0xdc,0x1e,0x68,0x71,0x40,0x05,0x1a,0x0f,0xa1,0x84,0x40,0x0f,0x4f,0x2f,0x0a,0xac,0x42,0x03,0xab,0x0e,0xa8,0x18,0x60,0xcc,0x15,0x6e,0xa3,0x85,0x6a,0xb4,0x16,0x09,0x97,0xd7,0x57,0xfa,0x0f,0x28,}; -const uint8_t _A_Levelup2_128x64_5[] = {0x01,0x00,0x9c,0x02,0xff,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x07,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x78,0x03,0xc0,0x1f,0xff,0xfb,0xcf,0xff,0xf0,0x3f,0xc0,0x18,0x7e,0x1e,0x30,0x83,0xdf,0xef,0xd0,0x0e,0x27,0xf6,0xf7,0xfc,0xe7,0x83,0x9b,0x7f,0xff,0x8f,0xff,0xa4,0x63,0x1c,0xe3,0xea,0xf3,0xd1,0xc0,0x20,0xe7,0xc6,0x84,0x2f,0x5b,0x97,0xfe,0xef,0xca,0xf8,0xf1,0xe0,0x20,0xd6,0xff,0x4c,0x7d,0x9a,0xad,0xd5,0x87,0xe1,0x4f,0xc0,0x7f,0xff,0xc3,0xe4,0xbe,0x40,0x2e,0xd5,0x5b,0xae,0x0f,0xe7,0x0f,0xf0,0x7f,0xfc,0x22,0x04,0x9b,0xc0,0x35,0x7a,0xad,0x56,0x1b,0xff,0x00,0xf8,0x7f,0x78,0xe0,0xf4,0x9f,0xe0,0xaa,0xa0,0x01,0xd6,0xcf,0xe0,0x04,0xe1,0x38,0x98,0xf8,0x67,0xfc,0x70,0xf0,0xea,0xa3,0x50,0xf0,0x79,0x13,0x93,0xa1,0xff,0xa3,0xd5,0xc3,0xe3,0x17,0x80,0x40,0x3f,0x80,0xf5,0x0b,0x0e,0xbf,0x56,0x02,0x19,0x70,0x3c,0x67,0x07,0xf6,0xc7,0xd9,0xee,0xa5,0xf1,0x9a,0xc0,0x20,0x90,0x03,0x00,0xef,0xfd,0xe0,0xf2,0x87,0xec,0x37,0x5a,0xaf,0x55,0xa8,0x3e,0x23,0x12,0xfe,0xf7,0xdb,0xa3,0x9f,0x86,0x74,0x2b,0xb5,0x5e,0xa8,0x08,0x60,0x20,0xf1,0xf8,0x10,0x12,0x11,0xa8,0xd7,0x17,0xc7,0x56,0x0d,0x18,0xe0,0xc0,0x8f,0xa5,0xff,0x89,0xf6,0x0b,0xe5,0xdf,0xaa,0x40,0x6f,0xe0,0xf1,0xfd,0xb7,0x0e,0x07,0xe8,0xd5,0x7f,0xb5,0x7b,0xa8,0x06,0x02,0x1f,0x8c,0xf1,0xb0,0x47,0xc7,0xef,0x07,0x8f,0xd7,0xaf,0x57,0xaf,0xdf,0xea,0xb8,0x58,0x7e,0xff,0xce,0x1d,0x12,0x10,0xfc,0xe0,0x7e,0xcf,0xd6,0xab,0xf5,0xba,0x27,0x0c,0x0d,0xbc,0x26,0xe2,0xbf,0xcb,0xe0,0x15,0x5b,0xed,0x5f,0xef,0x55,0xa0,0x84,0x04,0x1e,0x30,0xf7,0x89,0x41,0x8e,0xc2,0x7f,0x2f,0xd1,0xb8,0xaf,0xf7,0xfb,0xf2,0xcc,0x7e,0x70,0xe8,0x07,0x52,0xab,0x57,0xab,0xd7,0x68,0xb0,0x58,0x00,0x6c,0x6f,0x8b,0x21,0xb1,0xa5,0x88,0x3e,0xc6,0xe4,0x17,0x0d,0x53,0xaa,0x1f,0x51,0x00,0x8f,0x4b,0xff,0x0c,0x0f,0x96,0xfc,0x3e,0x3f,0xf0,0xf9,0x40,0x3f,0xa0,0xf2,0xc4,0xc0,0xe8,0x1f,0x5e,0xef,0xff,0xbf,0x7d,0xa2,0xb0,0x0b,0xf1,0x7f,0x10,0x8f,0x82,0x0f,0x00,0xd7,0x7f,0xf5,0x7f,0xed,0x7c,0x0c,0x3c,0x38,0x0f,0xfc,0xe7,0xfd,0x8d,0xff,0xc7,0xcf,0xe2,0xff,0x2a,0xa8,0x7c,0x68,0x38,0x0e,0xf9,0x88,0x70,0xe3,0x11,0x80,0xeb,0xf7,0xfa,0xbf,0x76,0xbc,0x4c,0x20,0x01,0x83,0x08,0x45,0xc0,0x50,0x76,0xe8,0x80,0x11,0x42,0x58,0x06,0x88,0xff,0xe7,0xd0,0x5d,0x5b,0xf8,0x40,0x02,0x77,0x10,0x01,0x70,0x3e,0x2b,0xf1,0xbc,0x4e,0x2b,0xb7,0x5a,0xbd,0xdd,0x06,0x31,0x5a,0x00,0x7c,0x7c,0x1f,0xcf,0xbf,0xff,0xd3,0x78,0xdd,0x87,0x8b,0xd4,0x1f,0x48,0x04,0xc1,0xc0,0x57,0x81,0xd0,0xa7,0xc6,0xab,0x05,0xa0,0x18,0x44,0x20,0x58,0xcc,0x1c,0x7f,0xe1,0xab,0xf5,0x6b,0x84,0x42,0x1f,0x51,0x09,0x43,0xa8,0x17,0x51,0xe0,0x90,0x86,0x0b,0x50,0xb2,0x90,0x86,0x01,0xf0,0x81,0xda,0x0c,0x82,0x5f,0x1f,0xfe,0xbf,0x54,0xf6,0x1d,0x80,0x74,0x96,0x23,0xd8,0x80,0x85,0xc7,0xab,0x57,0xaf,0xd5,0x66,0xb5,0x4e,0xe5,0x51,0xc2,0x7a,0x88,0x76,0xe0,0x78,0x3a,0xbd,0x77,0xab,0xdc,0x26,0x16,0x09,0xdf,0xab,0x7f,0x52,0xd8,0x97,0xce,0xab,0x7f,0xea,0xd1,0x20,0x14,0x0f,0x84,0xff,0x6e,0x7b,0x11,0xf8,0xfe,0x80,0x83,0xae,0xd5,0x5a,0x87,0xe5,0xe0,0x9f,0xd5,0xdb,0x43,0x5d,0x5e,0x11,0x88,0x40,0xe2,0x3e,0x18,0x07,0x9e,0xff,0xad,0x5e,0x18,0x00,0x83,0xe3,0x2a,0x07,0x0f,0xf3,0x9f,0xff,0xb7,0x85,0xc4,0xb8,0x21,0xf2,0x13,0x8c,0xd6,0xaa,0x4e,0x1e,0x3e,0x73,0x9d,0xba,0x10,0x37,0xaa,0x34,0x5e,0x1e,0xff,0xff,0xf3,0xb0,0x1e,0x88,0x7d,0x7a,0xb4,0xda,0x84,0x01,0x9a,0x3e,0x38,0x02,0x68,0x40,0x0d,0x07,0x1f,0x8d,0xff,0xec,0x0f,0x1a,0xb0,0x7d,0xaa,0xb0,0x33,0x00,0xc7,0x04,0x02,0xb2,0x10,0xf3,0x7e,0x9b,0xa7,0x3b,0xff,0x00,}; -const uint8_t _A_Levelup2_128x64_6[] = {0x01,0x00,0x54,0x02,0xff,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x07,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x78,0x03,0xc0,0x1e,0x00,0x5f,0x78,0x37,0x20,0x3f,0xc0,0x7e,0x4f,0xff,0xde,0x3e,0x38,0xae,0xf9,0xf0,0x1c,0xe0,0x7e,0xf8,0xf3,0x3f,0xfd,0x9f,0xdc,0x1f,0xbe,0x6c,0x03,0x31,0xfd,0x1f,0xdc,0xca,0x01,0x60,0xfd,0x03,0xaa,0xff,0x09,0x80,0x60,0x3e,0x80,0xfa,0xdf,0xc1,0x20,0x10,0x0f,0x48,0x3e,0xab,0xf0,0x20,0x78,0xf4,0x81,0xd3,0xf7,0x07,0xfc,0xbf,0x03,0xff,0x87,0xe9,0x36,0xe0,0xf8,0xf1,0xcb,0xec,0x30,0x09,0x86,0x93,0x7f,0xf7,0x0f,0xc6,0x5e,0x21,0x00,0xa0,0x52,0x23,0xe0,0xe7,0xfe,0x83,0xc6,0x10,0x6f,0x1a,0x46,0xfc,0x5f,0x1f,0xcc,0x59,0xbc,0xb1,0x3b,0xe4,0x6c,0x03,0xc6,0x0e,0x0f,0x1c,0x7e,0xfb,0x07,0xdf,0x59,0xad,0xfe,0xf9,0x4b,0x84,0x7f,0xb0,0x79,0x0f,0x76,0x1c,0x7e,0xff,0x8d,0x2e,0x5e,0x07,0x4e,0x97,0xfd,0x7f,0xc0,0xf6,0xfd,0xfe,0xec,0xb5,0x88,0x17,0x4a,0x60,0x2c,0x4f,0x79,0xbd,0x2a,0xb3,0x88,0x17,0x8a,0xa0,0x0f,0x2f,0x88,0x85,0xaa,0xb3,0x08,0x15,0x8a,0xa1,0xbd,0x03,0x8f,0xc0,0x7a,0x65,0x02,0xea,0xc4,0x20,0x54,0x2a,0xc0,0x20,0x6f,0x9f,0x0f,0x98,0x30,0x7f,0xd8,0x7f,0x1f,0xf8,0x1e,0xb7,0x78,0xf7,0xe3,0xf6,0x20,0x2c,0x3f,0x0f,0xdf,0xd5,0x88,0x83,0xc6,0xb8,0x1f,0x18,0x7f,0xf0,0xc4,0x90,0x7c,0x1d,0x56,0x3f,0x02,0xe1,0x55,0xc7,0xe3,0x07,0x07,0x13,0x50,0xa7,0xf0,0x2d,0x2e,0x63,0xff,0xcf,0x94,0x07,0xc7,0xc7,0xff,0x8f,0x84,0x4a,0xfb,0x7e,0xb1,0x49,0xab,0xf0,0x1e,0xa4,0x9f,0x97,0x3d,0xf0,0x16,0x44,0x04,0x21,0xe1,0xfe,0x5d,0xa8,0xb3,0x08,0x0d,0x92,0x21,0xf5,0x8f,0xfe,0x2f,0x7f,0xcf,0x08,0x3c,0xa0,0x17,0x8c,0x2c,0x7e,0x03,0xc4,0x87,0xfd,0x61,0xff,0xeb,0xef,0xf0,0x64,0x3f,0xf8,0xec,0x02,0xe1,0x05,0x88,0x40,0x68,0x90,0x0f,0xaa,0xac,0xbf,0x9f,0xfd,0xff,0x7e,0x30,0x0f,0x18,0x4c,0x82,0x05,0x22,0xc0,0x7d,0x01,0x83,0xfd,0xf6,0x7f,0xaf,0x7f,0xe9,0xc4,0x1a,0x84,0x0f,0x48,0x27,0xe3,0x85,0x6f,0x09,0x0f,0xff,0xf3,0x10,0x87,0xc1,0x22,0x20,0xf2,0xa0,0x03,0xc6,0x86,0x6e,0x1f,0xbf,0xf7,0xe7,0x00,0x83,0xc6,0x22,0x34,0x08,0x14,0x48,0x1e,0x37,0xef,0x3c,0x0f,0xfc,0x43,0x1f,0x9f,0x02,0x07,0xf0,0x90,0x83,0x04,0x44,0x30,0x49,0xe4,0x06,0x01,0x1c,0xfe,0x04,0x07,0x67,0x03,0xb8,0x48,0x78,0x10,0x48,0xc8,0x3c,0x60,0x16,0x08,0x00,0x08,0x5e,0x43,0x4b,0x87,0x64,0x24,0x38,0x0f,0xec,0x36,0x41,0x0c,0x80,0x64,0x01,0xe3,0x00,0xf0,0x7b,0xf1,0x70,0x1b,0x04,0x47,0x01,0x07,0x87,0xd0,0x26,0x90,0x0c,0x64,0xc2,0x01,0xf0,0x58,0x0c,0x2e,0x1c,0x4f,0x18,0x04,0x06,0x09,0x40,0xe2,0x60,0x30,0x7b,0x88,0x07,0xfb,0xe2,0x0f,0x1f,0x84,0x1c,0x1e,0x30,0x68,0x19,0x48,0x6f,0xf8,0x0c,0x04,0x3f,0xdd,0xff,0xf6,0x45,0xe4,0x10,0x08,0x4c,0x03,0xf1,0x00,0x47,0x8c,0x82,0x81,0xc0,0x85,0xa4,0x07,0x82,0x0f,0x40,0x00,0x83,0xd2,0x23,0xd8,0xfc,0x61,0xe5,0xe0,0xf1,0x85,0x03,0xd4,0x10,0x26,0xe1,0xbc,0x47,0xe4,0xe0,0xf6,0x81,0x03,0xcb,0xe1,0x71,0xfc,0x4f,0xe8,0x71,0x00,0x7b,0x50,0x01,0x03,0xe0,0x81,0x83,0xc7,0x0f,0x08,0x07,0xb6,0x03,0x90,0x05,0x18,0x77,0x3e,0x5f,0x03,0x83,0x83,0xda,0x01,0xf7,0xe1,0xc3,0xff,0x11,0xbb,0xe4,0x16,0x0c,0x0f,0x7f,0xdf,0x9e,0x3f,0x70,0xbd,0xff,0x0f,0x64,0x0f,0x5f,0xc5,0xc2,0x79,0x3c,0x57,0x0f,0xfc,}; -const uint8_t _A_Levelup2_128x64_7[] = {0x01,0x00,0xf7,0x01,0xff,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x07,0x80,0x3c,0x01,0xe0,0x05,0xfd,0x83,0xfb,0xbe,0x20,0xf0,0xff,0x83,0x72,0x01,0xfe,0x07,0xdf,0xf6,0x3f,0xff,0xf8,0x83,0xf3,0xcf,0xf8,0xe7,0xc0,0xff,0xc0,0xf9,0xfc,0x46,0x60,0xd3,0x00,0xfe,0x41,0xa0,0x3c,0x0e,0xf0,0x3e,0xaf,0xb8,0x18,0x06,0x03,0xba,0x0f,0xad,0xfd,0x06,0x01,0x00,0xed,0x9e,0xee,0x80,0x0f,0x1f,0xa8,0x3e,0xb5,0xf2,0x00,0x78,0xfa,0x81,0xfb,0xf8,0xf5,0xb6,0xab,0x2e,0x0f,0x18,0x3f,0x5b,0x7e,0x10,0x9c,0xbf,0xfb,0x01,0x00,0xec,0x07,0xeb,0x17,0x01,0xa0,0xc0,0x76,0x01,0xf9,0x07,0x8d,0xf2,0x45,0x02,0x07,0xdd,0x2f,0x05,0x14,0x82,0x68,0x01,0xf3,0xe0,0xa2,0xe0,0xe1,0xb0,0x4b,0x03,0x8c,0x43,0xf1,0x25,0xa1,0xc2,0x61,0x16,0x08,0x5f,0xe8,0x1f,0x1a,0x59,0xe4,0x2b,0x11,0x6f,0x0f,0xcf,0xff,0x4b,0x24,0x85,0x5a,0x2e,0x04,0xfa,0xd1,0x03,0xc6,0x31,0xa0,0xdf,0x07,0xe7,0x44,0x2f,0x18,0x67,0x03,0x7d,0xfe,0x07,0xc5,0x0a,0x87,0x0a,0x89,0x60,0x01,0xc3,0xfd,0x06,0xac,0xff,0xff,0x46,0xc1,0xf3,0x64,0xf9,0xc1,0x7c,0x5f,0xfd,0xd8,0x6f,0x14,0xfe,0x51,0xa3,0xef,0x0f,0xe7,0x15,0x1c,0x80,0x7a,0x38,0x03,0xe9,0xff,0xc2,0xa1,0x70,0x09,0x47,0x03,0xfb,0xf7,0x07,0xc4,0x4a,0x09,0x00,0x8c,0x50,0x09,0xa3,0xef,0x1f,0x28,0x1c,0x41,0xe5,0x08,0x07,0x97,0x8c,0x3f,0x30,0x18,0x34,0x80,0x1e,0x3f,0xbf,0x38,0x3d,0xe0,0x18,0x68,0x08,0x3c,0x84,0x0b,0xf8,0x18,0x89,0x38,0x6f,0x10,0x08,0x80,0x3c,0xbe,0x20,0xf3,0xf8,0x4f,0xf7,0xf0,0x68,0x00,0x00,0x61,0x00,0xf1,0xbf,0xa8,0x13,0xc1,0x3f,0xce,0x40,0x81,0xe5,0x04,0x06,0x21,0x04,0x81,0xe3,0xbc,0x2f,0x08,0x00,0x60,0x5f,0x99,0xfa,0x44,0xbc,0x00,0x21,0xe0,0xff,0x37,0xf1,0x80,0x79,0x40,0x76,0xf1,0xf0,0x78,0xef,0xca,0x25,0x07,0xf8,0x6f,0xec,0x00,0xf2,0x80,0x7a,0x78,0xff,0xff,0xbc,0x3c,0x44,0x51,0xfe,0x46,0xff,0x81,0x01,0x07,0x98,0xf8,0xae,0x3c,0x05,0x01,0xef,0xe8,0x05,0x03,0x07,0x8f,0x3c,0x16,0x38,0x12,0xa1,0xef,0x81,0xed,0xb7,0x1e,0x11,0x88,0xc3,0xeb,0xed,0xff,0xd2,0xc1,0x83,0x0f,0xff,0xfc,0xf3,0x7f,0xfa,0x7c,0x84,0x7e,0x60,0xf1,0xa2,0x03,0xc7,0x1e,0xa3,0x1b,0x2f,0xfa,0x66,0x0f,0x4c,0xac,0x7e,0x87,0xd0,0x1e,0x9e,0x16,0x03,0x0c,0xd0,0x9b,0xce,0xc7,0xe0,0xa0,0x78,0x3c,0x3f,0xb0,0x78,0xc1,0x7f,0xd0,0x3c,0x88,0x3c,0xf0,0x71,0xf9,0x04,0x00,0xdc,0x70,0x58,0x44,0x02,0xa2,0x0f,0x38,0x1c,0x22,0x41,0xf0,0x81,0xff,0x92,0x03,0x0b,0x07,0x8d,0x28,0x1e,0x70,0x18,0x44,0x43,0xe0,0xb2,0x1c,0xff,0xfe,0x10,0x0f,0x19,0x50,0x3d,0x22,0x11,0x08,0xc5,0xfb,0x3c,0x70,0x18,0xbb,0x74,0x64,0xc0,0xf5,0xb4,0x4c,0x3f,0x18,0xf4,0x80,0x83,0xca,0x2c,0x0f,0x49,0x07,0xd3,0xc1,0x01,0xc0,0x13,0xc6,0x5e,0x9c,0x10,0x7a,0xd0,0x3f,0x5e,0x18,0x39,0x80,0x80,}; -const uint8_t _A_Levelup2_128x64_8[] = {0x01,0x00,0x02,0x02,0xff,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x07,0x80,0x3c,0x00,0xbf,0xb0,0x7f,0x88,0x3c,0x3f,0xe1,0x0f,0x00,0x5c,0x3f,0xc0,0x1f,0xdf,0x8c,0x7c,0x1f,0x97,0xf8,0x77,0xf3,0xf8,0x21,0x10,0x04,0xe7,0xe0,0x30,0x2f,0x98,0x7e,0xed,0xf0,0x18,0x0f,0xb0,0x1e,0x7c,0xf8,0x4c,0xcb,0xe6,0x0f,0x38,0xb8,0x3c,0x7a,0x00,0x73,0xc7,0xf2,0x66,0x60,0xf4,0x85,0xe0,0x60,0x1a,0x00,0xf9,0x83,0xde,0x0b,0x82,0x80,0x50,0x00,0xe7,0x4f,0x84,0xc9,0xbf,0x20,0x62,0xff,0x40,0xa8,0x50,0x0f,0xc7,0xfb,0xde,0x0f,0x2e,0x4c,0x9c,0x1e,0xf0,0x6f,0xe8,0x3c,0xb9,0xfc,0x88,0x3f,0xe0,0xfc,0x70,0x1f,0xf4,0x02,0x03,0xfd,0xe3,0x83,0xcf,0x9f,0xfc,0x07,0x95,0xf8,0xbc,0x25,0x01,0xfd,0x07,0xce,0x13,0xce,0x07,0x95,0xff,0xf9,0x80,0xbe,0x0c,0x04,0x1e,0x60,0x06,0xdf,0x50,0x30,0x52,0x48,0x04,0x11,0x3d,0x3b,0xe9,0x06,0x0e,0x53,0x00,0x60,0x88,0x3e,0x2b,0xfa,0x0a,0x14,0x68,0xc0,0x29,0x01,0xe7,0xe0,0xf3,0x92,0x0a,0x7f,0xc8,0x1e,0x35,0xed,0x04,0xf0,0x1e,0x30,0x1f,0xa0,0x3c,0x7e,0x79,0xc9,0xe0,0x3c,0xc3,0xe3,0x24,0x85,0x70,0x20,0x1e,0x80,0x79,0x72,0x41,0xf1,0x30,0x80,0x83,0xcb,0x07,0xc9,0x17,0xa7,0x7c,0x5e,0x30,0xaf,0xc6,0x0b,0xd6,0x1f,0x4b,0x7b,0x5c,0x81,0xe3,0xc2,0x85,0x43,0xac,0xbe,0xc0,0x79,0x78,0xc1,0xeb,0x20,0x81,0xe2,0xe0,0x31,0xa1,0xf9,0x83,0xc4,0xde,0x94,0x1f,0x15,0xed,0x1e,0x20,0xf1,0x87,0xe0,0xbe,0xf2,0x0a,0x41,0x3c,0xf0,0x31,0xc8,0x64,0x02,0x04,0x6f,0x14,0x7c,0x40,0xa0,0xb0,0x83,0xf9,0x83,0xe2,0x09,0x02,0x80,0x1f,0xc7,0xf4,0x0f,0x98,0x40,0x3c,0x66,0x00,0xfb,0x88,0x60,0x20,0x04,0x01,0xfe,0x83,0xe6,0x41,0x00,0xc1,0xc0,0xf0,0x1f,0xe0,0x7d,0xdf,0x20,0x14,0x00,0x41,0x43,0xe0,0x10,0x0c,0x00,0x18,0xad,0xe0,0xf1,0x00,0x0e,0x80,0x10,0x5f,0x30,0x10,0xdf,0xc0,0xc5,0x97,0x8c,0x03,0xcb,0xa0,0x08,0x28,0x68,0x7c,0x86,0xc5,0x17,0x83,0x83,0xcb,0x30,0x0f,0x28,0x30,0x1c,0x8a,0xc5,0x17,0x37,0x08,0x00,0x6e,0x80,0xfa,0x82,0x01,0xcb,0x20,0x28,0x28,0x36,0x73,0x10,0x0f,0x45,0x68,0x83,0xdb,0x45,0x84,0x80,0x83,0xc7,0x7f,0x17,0x4e,0x09,0x7c,0x81,0xe9,0x82,0x81,0x87,0xcd,0x78,0x20,0xf7,0xc0,0xc1,0xc1,0xe7,0x40,0x80,0x83,0xcb,0xbd,0xbf,0x0f,0xc5,0x00,0xc0,0x41,0xf2,0xff,0x0f,0xd7,0xff,0x1b,0x07,0xb7,0xf0,0xbe,0xbd,0xf9,0x28,0x3c,0xfc,0x01,0x82,0x3f,0xa7,0xdf,0xe3,0x22,0x07,0x9f,0x03,0xf4,0x10,0x14,0x7a,0xde,0x24,0x20,0xf4,0xfa,0x07,0xc6,0x1c,0xbf,0x4c,0xfc,0x82,0x40,0x5f,0x2e,0x07,0x20,0x1e,0x23,0x22,0x6f,0x95,0x9c,0x1e,0xb3,0x0f,0xff,0xe3,0xf6,0x0c,0x13,0xa0,0xff,0xe3,0x20,0xf5,0x4a,0x0f,0xdd,0xce,0x5c,0x0f,0xfc,0x06,0x0d,0x40,0xc8,0x11,0xca,0x81,0x00,0xff,0xfa,0x1c,0x44,0x00,0x1f,0xf4,0x24,0x1e,0xd0,0x4f,0x47,0xf7,0xbe,0x0f,0x28,0x0c,0x22,0x81,0x50,0x07,0xa4,0x0b,0xd1,0xe3,0x0f,0x98,}; -const uint8_t _A_Levelup2_128x64_9[] = {0x01,0x00,0xfb,0x01,0xff,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x07,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x78,0x01,0x3d,0xe0,0xff,0x06,0xe4,0x07,0xe0,0x0f,0xab,0xff,0xfe,0x7f,0xfe,0xe7,0xe0,0xc3,0xd7,0xdf,0x80,0xce,0x03,0xf9,0x67,0x80,0x71,0xbd,0xc0,0xfb,0xad,0xc0,0x20,0x3e,0xd0,0x49,0xf3,0xe1,0x33,0x2f,0x98,0x3c,0xe8,0xb8,0x08,0x07,0xe8,0x1e,0x78,0xfe,0x4c,0xcc,0x1e,0x98,0x2a,0x04,0x03,0x88,0x71,0x30,0x7a,0xcb,0xef,0x58,0x10,0x78,0xee,0x01,0xe7,0x4f,0x84,0xc9,0xbf,0x21,0xf2,0xdf,0xe0,0x24,0x10,0x0a,0x30,0x3d,0x39,0x32,0x70,0x7a,0x40,0x24,0x30,0x0c,0x0f,0xfb,0x8e,0x4f,0x2e,0x44,0x1f,0xf0,0x0f,0x2a,0xfc,0x02,0x7f,0x80,0xc0,0x7f,0xa0,0x20,0xf3,0xe7,0xff,0x0a,0xc5,0x5f,0xe0,0x00,0x06,0x01,0xfd,0x0f,0x9c,0x27,0x9c,0x0f,0x2b,0xfc,0xbe,0x41,0x1e,0x90,0xc0,0x7f,0xaa,0x19,0x97,0xe4,0x2c,0x31,0x28,0x17,0x08,0x1f,0x5d,0x0e,0x04,0x3a,0x05,0x3a,0x07,0xcc,0x5e,0x91,0xa1,0x86,0x41,0x38,0xdf,0xe1,0xf0,0xe0,0xf3,0x92,0x0a,0x7f,0xc8,0x1e,0x52,0x88,0xf4,0x17,0x08,0x40,0x10,0x78,0xfc,0xf3,0x93,0xc0,0x7a,0xc4,0xa0,0xb4,0x86,0x09,0x03,0xc7,0x92,0x0f,0x8f,0xc0,0x3c,0xf0,0x7c,0x91,0x7c,0x43,0x38,0x3f,0xb0,0xfa,0x5b,0xc0,0xc3,0xff,0x9d,0x93,0xc6,0x09,0x7f,0xf9,0x03,0xcf,0xc6,0x0f,0x4a,0x5f,0x43,0xe1,0xc2,0xc0,0x7f,0x2f,0xa0,0xf4,0x37,0x9e,0x2f,0x21,0x0d,0x9f,0xc0,0x3f,0xf3,0xef,0xf4,0x3f,0x05,0xf7,0x90,0x52,0x07,0xe5,0x0b,0x90,0xc0,0xa0,0x90,0x0b,0xfd,0xfd,0x1f,0x10,0xbe,0x14,0x06,0x01,0x80,0xdf,0x83,0xa0,0x1e,0x30,0x40,0x78,0xf8,0x3b,0xe0,0xe8,0xfb,0xc2,0xe1,0x00,0xf1,0xfc,0x2f,0xa4,0x1e,0x54,0x08,0x07,0x3a,0x06,0xbf,0x10,0x03,0x78,0xc1,0xe3,0x80,0xe0,0xc0,0xff,0xeb,0xf1,0x0f,0xbc,0x34,0xba,0x3f,0xe8,0x0f,0xc1,0x10,0x50,0xf8,0x01,0x5c,0x41,0xe5,0x12,0x81,0x01,0xc4,0xf8,0x2b,0xf1,0xff,0xfc,0xc0,0x42,0x75,0x39,0x11,0x38,0x40,0x04,0x0f,0x28,0x68,0x7c,0x88,0xc5,0xc2,0x07,0x1c,0x00,0x5e,0x50,0x60,0x31,0x11,0x8a,0x05,0x03,0x03,0x97,0x03,0xf8,0x0f,0x98,0x60,0x1c,0xa6,0x03,0x82,0x83,0x67,0x31,0x00,0xf4,0x98,0x03,0xcb,0x9c,0x0f,0x3d,0x16,0x12,0x02,0x0f,0x3e,0x00,0xb8,0x87,0xc4,0x0f,0x2c,0x14,0x0c,0x1e,0x70,0x02,0x00,0xff,0x01,0xeb,0x81,0x83,0x83,0xd2,0x1c,0xbf,0x10,0xfe,0x44,0x9b,0xe3,0xf5,0x1f,0xd0,0x3c,0xa0,0x1f,0x42,0xfc,0xce,0xa0,0x10,0x90,0x78,0xfb,0x01,0xe6,0x7f,0x5a,0x30,0x3f,0x6f,0xf8,0x18,0x04,0x14,0x0e,0x3d,0x80,0x79,0x15,0x85,0x7e,0x77,0xf8,0x0e,0x05,0xe0,0x20,0xf4,0x15,0x93,0x7c,0xb7,0xf0,0x0c,0x13,0xc0,0xb5,0x00,0xf2,0x39,0x96,0xfc,0x1e,0x74,0x40,0x7b,0x41,0xd4,0xe4,0x05,0x1a,0xf8,0x3c,0x60,0x20,0x81,0xa4,0x03,0xc8,0x00,0xb2,0xf8,0x04,0xa0,0x1e,0x58,0x82,0x40,0x80,0x1a,0x2e,0x2b,0x13,0x39,0x42,0x09,0x84,0x00,0x40,}; -const uint8_t _A_Levelup2_128x64_10[] = {0x01,0x00,0x06,0x02,0xff,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x07,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x78,0x03,0xc0,0x09,0xef,0x06,0xe4,0x07,0xe0,0x0f,0xc9,0xff,0xfb,0x9f,0xc7,0x07,0xdf,0x7e,0x03,0x38,0x0f,0xe5,0x9e,0x01,0xc6,0xf7,0x03,0xee,0xb7,0x00,0x80,0xff,0x4a,0x27,0xcf,0x84,0xcc,0xbe,0x60,0x51,0xbf,0xff,0xe8,0xb8,0x08,0x07,0xe8,0x2e,0x78,0xfe,0x4c,0xcc,0x1e,0x98,0x2a,0x04,0x03,0x88,0x1f,0x30,0x7a,0xcf,0xef,0xd8,0x10,0x78,0xee,0x01,0xe7,0x4f,0x84,0xc9,0xbf,0x21,0xf2,0xdf,0xe0,0x24,0x10,0x0a,0x37,0xfc,0xe2,0x54,0xfe,0x4c,0x9c,0x1e,0x90,0x09,0x0c,0x03,0x03,0xfe,0xd5,0x93,0xcb,0x91,0x07,0xfc,0x11,0x8a,0xbf,0x00,0x9f,0xe0,0x30,0x17,0xe8,0x89,0x88,0x41,0xe3,0xcf,0xfe,0x03,0xcf,0x80,0x00,0x18,0x07,0xf4,0x3e,0x70,0x9e,0x70,0x3c,0xe5,0xf2,0x08,0xf4,0x85,0x00,0x2b,0x19,0x97,0xe4,0x2c,0x31,0x28,0x17,0x09,0x63,0x1f,0xe9,0x7f,0x43,0x81,0x0e,0x81,0x4e,0x95,0xd3,0x17,0xa4,0x68,0x61,0x90,0x46,0x09,0x73,0xf0,0x79,0xc9,0x05,0x3f,0xe4,0x1f,0x18,0xbc,0xa2,0x3d,0x05,0xc2,0x30,0x4b,0x9f,0xf3,0xce,0x4f,0x01,0xeb,0x12,0x82,0xd2,0x18,0x24,0x0f,0x1e,0x48,0x3e,0x3f,0x00,0xf3,0xc1,0xf2,0x45,0xe5,0x5f,0xfa,0x0b,0xce,0x19,0xc1,0xfd,0x87,0xd2,0xde,0x06,0x1f,0xf4,0xec,0x9e,0x30,0x4b,0xff,0xc8,0x1e,0x7e,0x30,0x7a,0x52,0xfa,0x1f,0x0e,0x16,0x03,0xf8,0x4f,0x30,0x78,0x9b,0xcf,0x17,0x90,0x86,0xcf,0xe0,0x01,0x61,0xff,0xc3,0xf0,0x5f,0x79,0x05,0x20,0x9e,0x50,0xb9,0x0c,0x0a,0x09,0x00,0xbf,0xa3,0xe6,0x17,0xc2,0x80,0xc0,0x30,0x1b,0xf0,0x7d,0x41,0x01,0xe3,0xe0,0xef,0x83,0xea,0x10,0x0f,0x1f,0xc3,0x3a,0x01,0xe7,0x40,0x80,0x73,0xa0,0x64,0xf1,0x00,0x37,0xdc,0x1e,0x38,0x0e,0x0c,0x0f,0xfe,0x6f,0x10,0x03,0xc3,0x4b,0xa3,0xfe,0x80,0xfc,0x11,0x02,0x70,0x18,0x01,0x5c,0x41,0xe5,0x12,0x81,0x01,0xc7,0xfd,0x0f,0x5f,0x8f,0xff,0xe6,0x02,0x13,0xb1,0xc8,0x89,0xc2,0x00,0x20,0x79,0x43,0x43,0xe4,0x46,0x2e,0x10,0x38,0xe0,0x02,0xf2,0x83,0x01,0x88,0x8c,0x50,0x28,0x18,0x1c,0xb8,0x1f,0xc0,0x7c,0xc3,0x00,0xe5,0x30,0x1c,0x94,0x1b,0x39,0x88,0x07,0xa4,0xc0,0x1e,0x5c,0xe0,0x79,0xe8,0xb0,0x90,0x10,0x79,0xf0,0x05,0xc5,0xfb,0x9f,0x92,0x44,0x1e,0x38,0x28,0x18,0x3c,0xe0,0x04,0x01,0xfe,0x7e,0xc3,0xe9,0x81,0x83,0x83,0xd2,0x1c,0xbf,0x10,0x7a,0x87,0xda,0x24,0xdf,0x1f,0xaa,0x20,0x87,0xee,0x0f,0x28,0x07,0xd0,0x1e,0x65,0xf5,0x9d,0x40,0x21,0x20,0xf1,0xf6,0x03,0xcc,0xfe,0xb4,0x60,0x7e,0xdf,0xf0,0x30,0x08,0x28,0x1c,0x7b,0x00,0xf2,0x2b,0x0a,0xfc,0xef,0xf0,0x1c,0x0b,0xc0,0x41,0xe8,0x2b,0x23,0x29,0x6f,0xe0,0x18,0x27,0x81,0x6a,0x01,0xe4,0xd2,0x2d,0xf8,0x3c,0xe8,0x80,0xf6,0x83,0xa9,0xc8,0x0a,0x35,0xf0,0x78,0xc0,0x41,0x03,0x48,0x07,0x90,0x01,0x65,0xf0,0x09,0x40,0x3c,0xb1,0x04,0x81,0x00,0x34,0x5c,0x56,0x26,0x72,0x84,0x13,0x08,0x00,0x80,}; -const uint8_t* const _A_Levelup2_128x64[] = {_A_Levelup2_128x64_0,_A_Levelup2_128x64_1,_A_Levelup2_128x64_2,_A_Levelup2_128x64_3,_A_Levelup2_128x64_4,_A_Levelup2_128x64_5,_A_Levelup2_128x64_6,_A_Levelup2_128x64_7,_A_Levelup2_128x64_8,_A_Levelup2_128x64_9,_A_Levelup2_128x64_10}; - -const uint8_t _I_125_10px_0[] = {0x00,0xE0,0x00,0x00,0x01,0x0E,0x02,0x31,0x02,0x45,0x02,0x91,0x00,0xAA,0x00,0x92,0x00,0x44,0x00,0x38,0x00,}; -const uint8_t* const _I_125_10px[] = {_I_125_10px_0}; - -const uint8_t _I_Nfc_10px_0[] = {0x00,0x80,0x00,0x00,0x01,0x22,0x02,0x43,0x02,0x45,0x02,0x49,0x02,0x31,0x02,0x22,0x02,0x00,0x01,0x80,0x00,}; -const uint8_t* const _I_Nfc_10px[] = {_I_Nfc_10px_0}; - -const uint8_t _I_back_10px_0[] = {0x00,0x00,0x00,0x10,0x00,0x38,0x00,0x7C,0x00,0xFE,0x00,0x38,0x00,0x38,0x00,0xF8,0x01,0xF8,0x01,0x00,0x00,}; -const uint8_t* const _I_back_10px[] = {_I_back_10px_0}; - -const uint8_t _I_badusb_10px_0[] = {0x01,0x00,0x11,0x00,0x00,0x0f,0xe2,0x01,0xfc,0x80,0xdd,0x20,0x32,0x48,0x08,0x14,0x40,0x23,0xa8,0x08,0xa0,}; -const uint8_t* const _I_badusb_10px[] = {_I_badusb_10px_0}; - -const uint8_t _I_ble_10px_0[] = {0x00,0x04,0x00,0x8C,0x00,0x15,0x01,0x56,0x02,0x8C,0x02,0x8C,0x02,0x56,0x02,0x15,0x01,0x8C,0x00,0x04,0x00,}; -const uint8_t* const _I_ble_10px[] = {_I_ble_10px_0}; - -const uint8_t _I_dir_10px_0[] = {0x01,0x00,0x11,0x00,0x00,0x0c,0xfe,0x01,0x41,0x80,0x7f,0xe0,0x70,0x18,0x10,0x05,0x7f,0xd0,0x10,0x88,0x80,}; -const uint8_t* const _I_dir_10px[] = {_I_dir_10px_0}; - -const uint8_t _I_ibutt_10px_0[] = {0x00,0x80,0x03,0x40,0x02,0x20,0x02,0x10,0x01,0x8E,0x00,0x41,0x00,0x2D,0x00,0x2D,0x00,0x21,0x00,0x1E,0x00,}; -const uint8_t* const _I_ibutt_10px[] = {_I_ibutt_10px_0}; - -const uint8_t _I_ir_10px_0[] = {0x00,0xFC,0x00,0x02,0x01,0x79,0x02,0x84,0x00,0x30,0x00,0x00,0x00,0x30,0x00,0x58,0x00,0x78,0x00,0xFF,0x03,}; -const uint8_t* const _I_ir_10px[] = {_I_ir_10px_0}; - -const uint8_t _I_loading_10px_0[] = {0x00,0xFE,0x00,0x82,0x00,0xBA,0x00,0x54,0x00,0x28,0x00,0x28,0x00,0x44,0x00,0x92,0x00,0xBA,0x00,0xFE,0x00,}; -const uint8_t* const _I_loading_10px[] = {_I_loading_10px_0}; - -const uint8_t _I_music_10px_0[] = {0x01,0x00,0x10,0x00,0xf0,0x00,0x46,0x03,0x20,0x80,0x00,0x4e,0x7d,0x00,0x9f,0x80,0x4a,0x3c,0x13,0x20,}; -const uint8_t* const _I_music_10px[] = {_I_music_10px_0}; - -const uint8_t _I_sub1_10px_0[] = {0x01,0x00,0x12,0x00,0x81,0x40,0x69,0x30,0x2c,0x2c,0x0b,0x6a,0x01,0x28,0x0c,0x0a,0x65,0x01,0x98,0x40,0x00,0x26,}; -const uint8_t* const _I_sub1_10px[] = {_I_sub1_10px_0}; - -const uint8_t _I_u2f_10px_0[] = {0x00,0x00,0x00,0xFE,0x01,0x01,0x02,0x0C,0x00,0xF2,0x03,0x92,0x02,0x0C,0x00,0x01,0x02,0xFE,0x01,0x00,0x00,}; -const uint8_t* const _I_u2f_10px[] = {_I_u2f_10px_0}; - -const uint8_t _I_unknown_10px_0[] = {0x01,0x00,0x12,0x00,0xbc,0x40,0x39,0x90,0x0c,0x24,0x03,0x81,0x00,0xb0,0x40,0x26,0x00,0x12,0x00,0x08,0x14,0xc0,}; -const uint8_t* const _I_unknown_10px[] = {_I_unknown_10px_0}; - -const uint8_t _I_update_10px_0[] = {0x00,0xFE,0x01,0x01,0x02,0xFF,0x03,0x01,0x02,0x31,0x02,0x79,0x02,0xFD,0x02,0x31,0x02,0x31,0x02,0xFF,0x03,}; -const uint8_t* const _I_update_10px[] = {_I_update_10px_0}; - -const uint8_t _I_BLE_Pairing_128x64_0[] = {0x01,0x00,0xb7,0x01,0x00,0x6c,0x38,0x1f,0xd0,0x10,0x76,0xe0,0x03,0xdd,0x40,0x07,0xf4,0x82,0x01,0x08,0x07,0xf4,0xc0,0x1f,0x91,0x08,0x07,0x00,0x1f,0xc0,0x0d,0x1e,0xe8,0x3f,0xc0,0x03,0x58,0x80,0xcf,0x11,0xd9,0xaf,0x85,0x77,0x01,0xf7,0x60,0xf8,0x45,0xff,0x05,0xed,0x9e,0x7c,0x09,0xdb,0xe0,0x2f,0x78,0x03,0x3c,0x8e,0xee,0x8a,0x43,0x81,0xfb,0x0c,0x66,0xe8,0xfc,0x59,0xba,0x6f,0x28,0x1b,0xfb,0xa3,0x80,0xfc,0xa0,0x1f,0xc6,0x86,0xbf,0xc3,0x78,0xce,0x04,0x19,0x26,0x77,0xfa,0x43,0xbe,0x12,0xa0,0x7e,0xf8,0x2a,0xa2,0x02,0xff,0x89,0x27,0x01,0xbf,0x99,0x38,0x8a,0xfc,0x0f,0x8e,0x07,0xfe,0x0e,0x94,0x2c,0x07,0xfc,0x7f,0x1f,0xf5,0x00,0xc3,0x00,0xe4,0x31,0x13,0xd1,0x00,0x0a,0xb8,0x19,0x25,0x91,0xc0,0x81,0xe2,0xb9,0x4d,0x5d,0x78,0x64,0x2e,0x84,0x80,0x61,0x07,0x02,0x3e,0x2a,0xa4,0xa2,0x00,0xf2,0x40,0x20,0xe3,0x21,0xa0,0x62,0x9f,0x60,0x05,0x02,0x3e,0x36,0x41,0x66,0x23,0x20,0x51,0xfc,0x40,0x68,0x0f,0x15,0x90,0x60,0x20,0x1b,0x09,0x89,0x70,0x46,0x42,0x07,0x14,0x99,0x41,0xe8,0x1f,0x18,0x0c,0x07,0xc1,0x19,0xff,0xc3,0xce,0x6b,0x54,0x8f,0xe0,0x3f,0x90,0x78,0x17,0x02,0x1a,0x70,0x39,0x01,0xa0,0xb1,0x53,0xb5,0x88,0xc7,0xe0,0x98,0x08,0x3a,0xd5,0xe8,0x97,0xd0,0x78,0xcf,0xe1,0x07,0xf1,0x0d,0x08,0x00,0x74,0x10,0x80,0x18,0xe8,0x97,0xc3,0xf2,0xff,0xc4,0x03,0xe3,0x04,0x8c,0x19,0xcc,0x00,0x35,0x0c,0x3c,0x03,0xf9,0x3f,0xb0,0x8f,0xc6,0x31,0x0e,0x0f,0x90,0x90,0xb5,0x45,0xc1,0xf8,0x4f,0xf0,0xde,0x18,0xcc,0x82,0x08,0x1f,0x22,0x20,0xd0,0x3a,0xab,0xd1,0xe0,0x5f,0xa1,0x1b,0x19,0x8d,0x02,0x04,0x9a,0x1d,0x04,0x28,0x26,0x36,0xa8,0x05,0xf0,0xe0,0x3f,0x04,0xf8,0xd0,0x30,0x55,0xfa,0xad,0x54,0x3e,0x35,0x09,0xab,0xac,0xbf,0x2b,0xf2,0x0a,0x0e,0xfb,0x55,0xaa,0x0f,0x94,0x68,0x04,0x30,0x6f,0xd3,0x7c,0xb0,0x15,0x0f,0xfd,0x7f,0xeb,0x05,0x4f,0x0b,0x60,0xa3,0x1f,0x28,0x0b,0xfc,0xbc,0x30,0x1f,0xf7,0xfe,0x54,0x2c,0x18,0x30,0x3c,0x6f,0x00,0xf2,0x1c,0x8c,0xf8,0x10,0x3c,0x00,0xf8,0xd5,0x5c,0x05,0xb8,0xb0,0xaa,0xdb,0x01,0x2b,0x31,0x0a,0xdc,0xa7,0x00,0xe6,0x00,0x0c,0x56,0x00,0x7e,0x10,0x00,0xcc,0x01,0xf0,0x1f,0x1b,0x40,0x2e,0x00,0x07,0x16,0x10,0x90,0x02,0xe5,0x90,0x06,0x29,0x00,0x2a,0xa9,0x00,0x2f,0x10,0x02,0xa5,0x10,0x02,0xf1,0x00,0x2a,0xa0,0x0d,0xc0,0x00,0xec,0x01,0xfd,0x60,0x17,0x6a,0xc0,0x60,0x40,0xfd,0xc0,0x30,0x04,0x01,0xb0,0xb0,0x7f,0x45,0x80,}; -const uint8_t* const _I_BLE_Pairing_128x64[] = {_I_BLE_Pairing_128x64_0}; - -const uint8_t _I_Ble_connected_38x34_0[] = {0x01,0x00,0x60,0x00,0x80,0x7f,0xc0,0x65,0xc0,0xff,0xc0,0xc0,0x83,0xf0,0xff,0xc3,0xc0,0x83,0xf8,0xff,0xc7,0xc0,0x83,0xfc,0xff,0xcf,0xc0,0x8d,0xfe,0xf9,0xdf,0xe0,0x10,0x30,0x21,0xc1,0xff,0xfc,0x31,0x40,0xc3,0x80,0x87,0x0c,0xff,0xcc,0xc0,0x83,0x1c,0x02,0x1c,0x62,0x7f,0xf3,0xfe,0x4c,0x27,0x00,0x42,0xb8,0x4e,0x3f,0xf3,0x0f,0xff,0x80,0x04,0x20,0x11,0xe0,0x00,0x84,0x44,0x20,0x47,0x07,0x20,0x60,0xc4,0x48,0x2c,0x41,0xb2,0x10,0x14,0x94,0x85,0x43,0x2f,0x21,0xa1,0x0e,0xf2,0x86,0x44,0x82,0x26,0x91,0x48,0x80,}; -const uint8_t* const _I_Ble_connected_38x34[] = {_I_Ble_connected_38x34_0}; - -const uint8_t _I_Ble_disconnected_24x34_0[] = {0x01,0x00,0x3c,0x00,0x80,0x7f,0xe0,0x1c,0x08,0x04,0x0e,0x61,0x00,0x86,0x42,0x20,0x11,0x08,0x24,0x02,0x40,0x02,0x28,0x14,0x32,0x80,0x02,0x28,0x0c,0xf3,0x00,0x02,0x3e,0x60,0x08,0xf8,0x30,0xcc,0x18,0x08,0xa0,0x3c,0xf0,0x58,0x80,0x88,0x2e,0xa0,0xb4,0x0b,0xb0,0x8d,0x02,0xea,0x3b,0x52,0x3a,0x94,0x08,0xac,0x45,0xc2,0x31,0x10,}; -const uint8_t* const _I_Ble_disconnected_24x34[] = {_I_Ble_disconnected_24x34_0}; - -const uint8_t _I_Button_18x18_0[] = {0x01,0x00,0x19,0x00,0xfc,0x7f,0xe0,0x10,0x68,0x04,0x06,0x07,0x00,0x81,0x00,0xbc,0x05,0xe0,0x23,0x83,0xc0,0x20,0x7f,0xef,0xfc,0x07,0xf8,0x32,0x10,}; -const uint8_t* const _I_Button_18x18[] = {_I_Button_18x18_0}; - -const uint8_t _I_Circles_47x47_0[] = {0x01,0x00,0x7e,0x00,0x00,0x0f,0xe2,0x3e,0x04,0x2c,0x04,0x1f,0xc0,0x05,0x2b,0x00,0x08,0x60,0x60,0x21,0x8c,0x00,0x86,0x18,0x02,0x18,0x20,0x08,0x62,0x00,0xe4,0x0a,0x0e,0x00,0x40,0x70,0x0a,0x00,0xb0,0xe0,0x32,0x00,0x29,0xc0,0x80,0xaa,0x1f,0x21,0x39,0x42,0x00,0xa7,0x08,0x02,0xa8,0xd0,0x86,0xc4,0x05,0x1f,0x84,0x1c,0x0a,0x30,0x22,0x28,0x92,0x46,0x40,0x05,0x11,0x61,0x01,0x4a,0x02,0x3e,0x10,0x28,0x91,0x04,0x02,0x32,0x08,0x08,0x14,0xe8,0x00,0xf2,0x09,0x90,0x17,0xc0,0xbe,0x05,0x41,0x7a,0x0e,0xd4,0x8e,0xc5,0x36,0x2f,0x99,0xad,0x4e,0xea,0x89,0xb4,0xda,0xab,0x6d,0x7e,0xac,0xb5,0x6b,0xab,0x8d,0x9d,0xea,0xfb,0x5c,0x04,0x1f,0xe0,0x26,0x3f,0xc4,0x3c,0x06,0x20,}; -const uint8_t* const _I_Circles_47x47[] = {_I_Circles_47x47_0}; - -const uint8_t _I_Ok_btn_9x9_0[] = {0x01,0x00,0x0f,0x00,0xbe,0x40,0x30,0x50,0x09,0xcc,0x06,0xfa,0x01,0x40,0x38,0x82,0xc4,0x1e,0x20,}; -const uint8_t* const _I_Ok_btn_9x9[] = {_I_Ok_btn_9x9_0}; - -const uint8_t _I_Pressed_Button_13x13_0[] = {0x01,0x00,0x12,0x00,0xf8,0x40,0x7f,0x90,0x7f,0xf4,0x3c,0x02,0x3f,0xf8,0xf8,0x05,0xc1,0xa6,0x13,0x10,0xb8,0x80,}; -const uint8_t* const _I_Pressed_Button_13x13[] = {_I_Pressed_Button_13x13_0}; - -const uint8_t _I_Space_65x18_0[] = {0x01,0x00,0x26,0x00,0xfc,0x7f,0xc0,0x09,0x7f,0x80,0x41,0x81,0xeb,0x80,0x80,0x40,0xc3,0x2d,0x01,0x04,0x78,0x23,0xc1,0x1e,0x08,0xf0,0x47,0x82,0x3c,0x11,0x70,0x73,0xeb,0x40,0x7f,0xc8,0xf5,0xff,0xc0,0x3f,0x89,0x87,}; -const uint8_t* const _I_Space_65x18[] = {_I_Space_65x18_0}; - -const uint8_t _I_Voldwn_6x6_0[] = {0x00,0x08,0x0C,0x2F,0x2F,0x0C,0x08,}; -const uint8_t* const _I_Voldwn_6x6[] = {_I_Voldwn_6x6_0}; - -const uint8_t _I_Volup_8x6_0[] = {0x00,0x48,0x8C,0xAF,0xAF,0x8C,0x48,}; -const uint8_t* const _I_Volup_8x6[] = {_I_Volup_8x6_0}; - -const uint8_t _I_Clock_18x18_0[] = {0x01,0x00,0x31,0x00,0xe0,0x43,0xe0,0x1f,0x09,0xfc,0x03,0xf1,0x7f,0x80,0x47,0x3c,0x10,0x0d,0xf7,0xde,0x02,0x02,0x2d,0xff,0xde,0x07,0x7f,0xfd,0xc0,0xff,0xff,0xc0,0x11,0xdf,0xff,0x30,0x3d,0xff,0xca,0x07,0x3e,0xfa,0x85,0xc7,0xe5,0x01,0x10,0x10,0x98,0x85,0x84,0x32,0x20,}; -const uint8_t* const _I_Clock_18x18[] = {_I_Clock_18x18_0}; - -const uint8_t _I_Error_18x18_0[] = {0x01,0x00,0x2c,0x00,0xe0,0x43,0xe0,0x1f,0x09,0xfc,0x03,0xf1,0x7f,0x80,0x7f,0x3f,0xf0,0x0e,0x77,0x3e,0x03,0x8e,0xe3,0xc0,0x63,0xfe,0x38,0x1c,0xff,0xe1,0x03,0xbf,0xfe,0x00,0x46,0x08,0x20,0x71,0x05,0x08,0x34,0x42,0x02,0x13,0x10,0xb0,0x86,0x44,}; -const uint8_t* const _I_Error_18x18[] = {_I_Error_18x18_0}; - -const uint8_t _I_EviSmile1_18x21_0[] = {0x01,0x00,0x39,0x00,0x86,0x70,0x20,0x10,0x6c,0x04,0x06,0x0f,0x80,0x81,0xf3,0xf9,0xf0,0x3f,0xff,0xfc,0x04,0x7f,0xef,0xfc,0x04,0x04,0xbf,0x7d,0xfc,0x0f,0xcf,0x9f,0x81,0xf1,0xf1,0xf0,0x3c,0x3e,0x1e,0x07,0x8f,0xe3,0x86,0x9b,0xbd,0xef,0x80,0xef,0x3e,0x90,0x0b,0xc5,0xe2,0x01,0xf0,0x9f,0xc0,0x38,0x10,0xf8,0x00,}; -const uint8_t* const _I_EviSmile1_18x21[] = {_I_EviSmile1_18x21_0}; - -const uint8_t _I_EviSmile2_18x21_0[] = {0x01,0x00,0x37,0x00,0x00,0x14,0x3b,0x81,0x01,0x83,0xe0,0x20,0x7c,0xfe,0x7c,0x0f,0xff,0xff,0x01,0x1f,0xfb,0xff,0x01,0x01,0x2f,0x9f,0x3f,0x03,0xe3,0xe3,0xe0,0x78,0x7c,0x3c,0x0f,0x1f,0xc7,0x0d,0x37,0x3b,0x99,0x01,0xcf,0x79,0x20,0x33,0xcf,0x84,0x03,0xf1,0x7f,0x80,0x7c,0x27,0xf0,0x0e,0x04,0x3e,0x00,}; -const uint8_t* const _I_EviSmile2_18x21[] = {_I_EviSmile2_18x21_0}; - -const uint8_t _I_EviWaiting1_18x21_0[] = {0x01,0x00,0x34,0x00,0x86,0x70,0x20,0x10,0x6c,0x04,0x06,0x0f,0x80,0x81,0xf3,0xf9,0xf0,0x3f,0xff,0xfc,0x04,0x7f,0xef,0xfc,0x04,0x04,0xa0,0xb2,0xdb,0xeb,0xe0,0x7b,0xfd,0xfc,0x0f,0x3f,0x9f,0x81,0xf1,0xf8,0xe1,0xa9,0xfe,0x7f,0xe0,0x1f,0x8b,0xfc,0x03,0xe1,0x3f,0x80,0x70,0x21,0xf0,0x00,}; -const uint8_t* const _I_EviWaiting1_18x21[] = {_I_EviWaiting1_18x21_0}; - -const uint8_t _I_EviWaiting2_18x21_0[] = {0x01,0x00,0x31,0x00,0x86,0x70,0x20,0x10,0x6c,0x04,0x06,0x0f,0x80,0x81,0xf3,0xf9,0xf0,0x3f,0xff,0xfc,0x04,0x7f,0xef,0xfc,0x04,0x04,0xa0,0xb2,0xeb,0xed,0xe0,0x7f,0x7f,0xb8,0x08,0xf1,0xf8,0xf0,0xd4,0xff,0x3f,0xf0,0x0f,0xc5,0xfe,0x01,0xf0,0x9f,0xc0,0x38,0x10,0xf8,0x00,}; -const uint8_t* const _I_EviWaiting2_18x21[] = {_I_EviWaiting2_18x21_0}; - -const uint8_t _I_Percent_10x14_0[] = {0x00,0x0C,0x03,0x1E,0x03,0x33,0x03,0xB3,0x03,0xDE,0x01,0xEC,0x00,0x70,0x00,0x38,0x00,0xDC,0x00,0xEE,0x01,0x37,0x03,0x33,0x03,0xE3,0x01,0xC3,0x00,}; -const uint8_t* const _I_Percent_10x14[] = {_I_Percent_10x14_0}; - -const uint8_t _I_Smile_18x18_0[] = {0x01,0x00,0x2d,0x00,0xe0,0x43,0xe0,0x1f,0x09,0xfc,0x03,0xf1,0x7f,0x80,0x7f,0x3f,0xf0,0x0f,0xf7,0xfe,0x02,0x02,0x2f,0xff,0xfe,0x07,0xcf,0xe7,0xc0,0xf0,0xf8,0x70,0x11,0x82,0x08,0x1c,0x41,0x42,0xdf,0x7d,0xe0,0x37,0xcf,0xc0,0x98,0xc5,0x84,0x32,0x20,}; -const uint8_t* const _I_Smile_18x18[] = {_I_Smile_18x18_0}; - -const uint8_t _I_UsbTree_48x22_0[] = {0x01,0x00,0x3c,0x00,0x00,0x14,0x3c,0x08,0x78,0x08,0xf8,0x10,0xff,0xe0,0x59,0xb0,0x04,0x52,0xc0,0x1d,0x48,0xc0,0x9d,0x00,0xa7,0x02,0x80,0x41,0x80,0xa5,0x0e,0x02,0xa4,0xfb,0xfe,0x00,0xa1,0x49,0x04,0x48,0x0a,0x81,0xd1,0xc0,0x40,0x45,0x26,0x05,0x30,0x01,0x41,0xbe,0x10,0x30,0x2c,0x7e,0x3f,0xe0,0x59,0x80,0x04,0x50,0x0a,0x60,}; -const uint8_t* const _I_UsbTree_48x22[] = {_I_UsbTree_48x22_0}; - -const uint8_t _I_ButtonCenter_7x7_0[] = {0x00,0x1C,0x22,0x5D,0x5D,0x5D,0x22,0x1C,}; -const uint8_t* const _I_ButtonCenter_7x7[] = {_I_ButtonCenter_7x7_0}; - -const uint8_t _I_ButtonDown_7x4_0[] = {0x00,0x7F,0x3E,0x1C,0x08,}; -const uint8_t* const _I_ButtonDown_7x4[] = {_I_ButtonDown_7x4_0}; - -const uint8_t _I_ButtonLeftSmall_3x5_0[] = {0x00,0x04,0x06,0x07,0x06,0x04,}; -const uint8_t* const _I_ButtonLeftSmall_3x5[] = {_I_ButtonLeftSmall_3x5_0}; - -const uint8_t _I_ButtonLeft_4x7_0[] = {0x00,0x08,0x0C,0x0E,0x0F,0x0E,0x0C,0x08,}; -const uint8_t* const _I_ButtonLeft_4x7[] = {_I_ButtonLeft_4x7_0}; - -const uint8_t _I_ButtonRightSmall_3x5_0[] = {0x00,0x01,0x03,0x07,0x03,0x01,}; -const uint8_t* const _I_ButtonRightSmall_3x5[] = {_I_ButtonRightSmall_3x5_0}; - -const uint8_t _I_ButtonRight_4x7_0[] = {0x00,0x01,0x03,0x07,0x0F,0x07,0x03,0x01,}; -const uint8_t* const _I_ButtonRight_4x7[] = {_I_ButtonRight_4x7_0}; - -const uint8_t _I_ButtonUp_7x4_0[] = {0x00,0x08,0x1C,0x3E,0x7F,}; -const uint8_t* const _I_ButtonUp_7x4[] = {_I_ButtonUp_7x4_0}; - -const uint8_t _I_DFU_128x50_0[] = {0x01,0x00,0x2e,0x02,0x00,0x57,0xfe,0x0e,0x0e,0xcf,0x84,0x02,0x70,0x0f,0xc8,0x74,0x03,0x80,0x0e,0xbc,0x7c,0x04,0x06,0x30,0x30,0x74,0xe0,0x2f,0xe0,0x42,0x82,0x03,0xe7,0x81,0xff,0x02,0x14,0x20,0x1f,0x3e,0x00,0x79,0xc4,0x01,0xfd,0x20,0x07,0xd5,0xd4,0xe2,0x53,0xf2,0x74,0xff,0xe1,0x40,0x41,0x87,0xd8,0x01,0xf1,0x60,0xf0,0x43,0xca,0x43,0xe0,0xa7,0x83,0xe2,0x30,0x01,0x29,0x84,0x7b,0x20,0x0f,0x88,0x30,0x3c,0xb1,0x90,0x1d,0x00,0xfa,0x30,0x3f,0xf8,0xcc,0x02,0xc6,0x31,0x1f,0x83,0x49,0xa8,0x16,0x0a,0xf4,0x7f,0x00,0x21,0x1f,0x04,0x38,0x06,0x20,0x04,0x90,0x46,0x35,0xf0,0xfa,0x00,0xcc,0x7f,0x10,0x14,0x0b,0x46,0x20,0xd5,0x70,0x50,0xb4,0x06,0xf1,0x00,0x9f,0x03,0xd7,0x09,0x81,0xd7,0xc0,0x8b,0x85,0x38,0xc0,0x50,0x41,0xeb,0x63,0xc0,0x07,0xc6,0x90,0xbf,0x2b,0x05,0x01,0xb8,0xb1,0x0c,0x06,0xae,0x01,0x24,0x6f,0x94,0x42,0x80,0xb2,0x49,0xc4,0x33,0x80,0x1f,0x18,0x93,0xfc,0xa1,0x14,0x0e,0x02,0x9c,0x43,0xc3,0x07,0x81,0xfc,0x03,0xe2,0xc0,0x28,0x14,0x10,0x5e,0x3f,0x03,0xc0,0xcf,0xf8,0x10,0x0f,0xe5,0x56,0x03,0x05,0xf0,0x40,0x20,0x20,0xf2,0x42,0x0d,0xfd,0x72,0x30,0x0f,0xf8,0x7c,0x41,0xe3,0x80,0x10,0x0d,0x00,0x5c,0x4a,0xd1,0x87,0xf8,0x39,0xf5,0x5c,0x0c,0x0b,0xe0,0x1c,0x10,0x78,0xfc,0x02,0x04,0x20,0x1f,0xf7,0x0f,0x57,0x80,0x81,0x5e,0x13,0x83,0x01,0x1f,0x97,0xff,0xfe,0x03,0x2e,0x07,0x57,0x03,0x01,0xbf,0x1d,0x45,0x70,0x27,0xe4,0xff,0x8c,0x07,0xf5,0x83,0xe0,0xcf,0xe1,0x00,0xf6,0x10,0x8c,0x07,0xb1,0x07,0xc1,0xfc,0x63,0xe5,0xd2,0x07,0x8f,0x80,0x1a,0x21,0xe1,0xc0,0x71,0xe0,0x20,0xf1,0x24,0x88,0x34,0x62,0x00,0xe3,0x3f,0x8d,0xfe,0x81,0x80,0xc1,0xf8,0x5b,0xe2,0x0f,0x18,0xc7,0xf0,0x1e,0x50,0x35,0xa0,0xc8,0x3f,0x98,0x30,0x70,0x87,0x44,0x1e,0x21,0xe3,0xf8,0x02,0x4b,0xaf,0x01,0x81,0xb3,0xca,0x01,0x1c,0x25,0x94,0x01,0x04,0x58,0x8d,0x5c,0x0b,0xc6,0x08,0x10,0x78,0xc3,0x3f,0xf0,0x72,0x88,0x98,0x8b,0x89,0x55,0x82,0xc7,0x9b,0xe5,0x00,0x87,0x26,0xc4,0x46,0x20,0xf2,0xd1,0x87,0xc6,0x0c,0xdf,0x21,0x50,0x8a,0xc7,0x00,0x38,0x2e,0x04,0x42,0xaf,0x05,0x06,0x0a,0xb8,0x70,0x0f,0x91,0x80,0x5c,0x03,0xc5,0x30,0x84,0x6a,0xe1,0x40,0xf1,0x7b,0x0f,0x00,0x7a,0x24,0x21,0x07,0x94,0x33,0x09,0x57,0x8a,0x93,0x85,0xec,0x3e,0x00,0x79,0x0b,0x88,0x06,0x3c,0x3f,0xfc,0xa8,0x1e,0x21,0x91,0x76,0x90,0x90,0x40,0x03,0xe0,0xe0,0x78,0x3f,0xd5,0x58,0x0e,0x08,0x32,0x3f,0x88,0xa8,0x90,0x8c,0x25,0x30,0xbc,0x7f,0xb5,0x50,0x1b,0xe0,0x20,0x7f,0x92,0x33,0x88,0x97,0x4a,0x07,0x0c,0x9e,0x5f,0xeb,0xaa,0xf2,0x74,0x8d,0x17,0x80,0x06,0x29,0xf1,0xe0,0x71,0xfb,0xfd,0x71,0xd8,0xff,0xf8,0x21,0x71,0x04,0x87,0x01,0xc1,0xa1,0xff,0x83,0xe7,0xf0,0xff,0xc1,0x51,0xe4,0xdd,0x1b,0x07,0xc2,0x63,0xf6,0x0f,0x9f,0xeb,0x5f,0x02,0x77,0x8a,0xc4,0xa3,0x17,0xc8,0x44,0x8c,0x34,0x20,0x71,0xfe,0x99,0x04,0x88,0x40,0x01,0xc3,0x47,0xf0,0x93,0x0f,0xf4,0x28,0x0e,0x3a,0xad,0x50,0x39,0x30,0x1f,0x18,0x3d,0x0e,0x31,0xff,0x3d,0x0c,0x02,0xa8,0x03,0x20,0x01,0x7e,0x3f,0xf8,0x09,0x06,0x33,0xfe,0x1b,0x50,}; -const uint8_t* const _I_DFU_128x50[] = {_I_DFU_128x50_0}; - -const uint8_t _I_Warning_30x23_0[] = {0x01,0x00,0x47,0x00,0x80,0x70,0x00,0x65,0xe0,0x80,0x80,0xc7,0xe1,0x03,0x01,0xaf,0xe2,0x0e,0x03,0x19,0xe4,0x3c,0x06,0xb3,0xe8,0xf8,0x0c,0x67,0xf3,0xf0,0x1a,0x60,0x27,0xf7,0xf1,0x50,0xcf,0xff,0xe0,0x34,0xf0,0x00,0xc6,0x03,0xf0,0x01,0x8c,0x0c,0x06,0x7f,0x80,0x18,0xc1,0xff,0x9f,0xff,0xfc,0x3c,0x06,0x7f,0xe0,0x58,0xc7,0xff,0xe0,0x31,0x00,0x88,0x00,0x67,0xff,0xe0,0x18,0xc7,0xc0,}; -const uint8_t* const _I_Warning_30x23[] = {_I_Warning_30x23_0}; - -const uint8_t _A_Loading_24_0[] = {0x01,0x00,0x37,0x00,0x00,0x17,0x83,0xff,0x0f,0x90,0x40,0x21,0x1c,0x0f,0xfc,0x1f,0x01,0x00,0x81,0x60,0x35,0x40,0x21,0xaa,0x00,0x86,0x51,0x02,0x80,0x44,0x60,0x30,0x0c,0x10,0x6c,0x6a,0x80,0x21,0x94,0x00,0x92,0x88,0x02,0x1c,0x90,0x08,0x60,0x30,0x11,0x19,0x80,0x9c,0x64,0x43,0x82,0x1f,0x11,0x10,0x80,}; -const uint8_t _A_Loading_24_1[] = {0x01,0x00,0x38,0x00,0x00,0x17,0x83,0xff,0x0f,0x90,0x40,0x21,0x1c,0x0f,0xfc,0x1f,0x01,0x00,0x81,0x00,0x8e,0xa8,0x02,0x19,0x44,0x0a,0x01,0x11,0x80,0xc0,0x30,0x41,0xb1,0xa2,0x00,0x86,0x50,0x02,0x40,0x41,0x64,0x80,0x43,0x01,0x80,0xe0,0x22,0x02,0x34,0x01,0x16,0xaa,0x04,0x32,0x21,0xc1,0x0f,0x88,0x88,0x40,}; -const uint8_t _A_Loading_24_2[] = {0x01,0x00,0x36,0x00,0x00,0x17,0x83,0xff,0x0f,0x90,0x40,0x21,0x1c,0x0f,0xfc,0x1f,0x01,0x00,0x81,0x00,0x9a,0x51,0x02,0x80,0x44,0x60,0x30,0x0c,0x10,0x6c,0x68,0x80,0x21,0x94,0x00,0x92,0xa8,0x02,0x10,0x71,0x05,0x04,0x3a,0x70,0x80,0x10,0xd5,0x00,0x43,0xaa,0x81,0x0c,0x88,0x70,0x43,0xe2,0x22,0x10,}; -const uint8_t _A_Loading_24_3[] = {0x01,0x00,0x33,0x00,0x00,0x17,0x83,0xff,0x0f,0x90,0x40,0x21,0x1c,0x0f,0xfc,0x1f,0x01,0x00,0x81,0x00,0xa2,0x01,0x01,0x80,0xc0,0x30,0x41,0xb1,0xa2,0x00,0x86,0x50,0x02,0x40,0x41,0x64,0x80,0x43,0x29,0x80,0xe0,0x2a,0x81,0xd1,0xd5,0x00,0x84,0x0a,0x83,0x22,0x1c,0x10,0xf8,0x88,0x84,}; -const uint8_t _A_Loading_24_4[] = {0x01,0x00,0x42,0x00,0x80,0x40,0x80,0x43,0x07,0x80,0x60,0x00,0xa3,0x40,0x82,0xc0,0x34,0x10,0x88,0x05,0x42,0x21,0x00,0x94,0x00,0x86,0x28,0x02,0x18,0x50,0x08,0x60,0xe0,0x54,0x88,0x78,0x20,0xe0,0x11,0x0c,0x0c,0xa2,0xa1,0x00,0xa4,0x79,0x60,0x1a,0x8a,0x90,0x14,0x65,0x20,0x51,0x8a,0x01,0x46,0x14,0x18,0x11,0x81,0x0d,0x8a,0x03,0x00,0xf0,0x10,0x46,0x81,0x00,}; -const uint8_t _A_Loading_24_5[] = {0x01,0x00,0x2d,0x00,0x00,0x74,0x1a,0x01,0x60,0x85,0x40,0x2a,0x1f,0xa8,0x05,0x7e,0x15,0x81,0xa8,0x42,0xa8,0x40,0x21,0x92,0x00,0x86,0x31,0x5a,0x85,0x50,0x2a,0xb0,0xac,0xc0,0x14,0x64,0x80,0x51,0xa1,0x01,0x44,0x2e,0x21,0xd3,0x11,0x88,0xa4,0x87,0x16,}; -const uint8_t _A_Loading_24_6[] = {0x01,0x00,0x43,0x00,0x80,0x50,0x00,0x43,0xe0,0x02,0x94,0x06,0x01,0xa0,0x81,0x40,0x22,0x10,0x58,0x04,0x22,0x14,0x02,0x18,0xa4,0x02,0x91,0x29,0x80,0x6a,0x2a,0x40,0x51,0xf2,0x81,0x4b,0xc1,0x07,0x84,0x44,0x00,0x63,0x0a,0x88,0x40,0x20,0xe0,0x21,0x02,0x94,0x50,0x04,0x32,0x80,0x10,0xd4,0x00,0x43,0xa0,0x84,0x0d,0x04,0x5c,0x38,0x01,0xa0,0x86,0x04,0x04,0x20,0x51,}; -const uint8_t* const _A_Loading_24[] = {_A_Loading_24_0,_A_Loading_24_1,_A_Loading_24_2,_A_Loading_24_3,_A_Loading_24_4,_A_Loading_24_5,_A_Loading_24_6}; - -const uint8_t _I_DolphinFirstStart0_70x53_0[] = {0x01,0x00,0x5a,0x01,0x80,0x60,0x3f,0xf7,0xf0,0x42,0xf8,0x01,0x43,0x07,0x04,0x24,0x72,0x01,0xc0,0x9d,0x82,0x13,0xff,0xff,0xbd,0x70,0x20,0x20,0x72,0xe0,0x40,0x2a,0x11,0xdb,0x00,0x6c,0xec,0x10,0x0d,0x44,0x3a,0x71,0x0e,0x04,0x14,0x42,0x01,0x54,0x86,0xd3,0x27,0x02,0x44,0xd4,0x41,0xb0,0xf2,0x10,0x42,0x55,0x38,0x71,0x1b,0x10,0x18,0xa0,0x41,0x11,0xb1,0xc8,0x28,0x98,0x09,0xfc,0x00,0x72,0x35,0x49,0x8d,0x0b,0xc1,0x70,0xf0,0x10,0x4b,0x51,0x11,0xc2,0x6c,0x0a,0xa3,0x03,0x80,0x7f,0xbf,0xf3,0x08,0x46,0x60,0x90,0x30,0x60,0x50,0xd8,0x2c,0x11,0x0c,0x71,0x5c,0x60,0xf8,0x0f,0xcf,0x3f,0x81,0x80,0xa1,0x9e,0x86,0x0f,0xc0,0x82,0x64,0x30,0x3e,0x09,0x84,0x03,0xf1,0x03,0xa0,0x40,0xa4,0x18,0x39,0xfc,0x20,0x52,0x30,0x19,0x07,0xc6,0x8e,0x4a,0x18,0x22,0x74,0x60,0x1a,0x0f,0xc6,0x3c,0x60,0x5c,0x05,0x28,0xe4,0x3f,0x99,0xf8,0x22,0x28,0x7e,0x05,0x91,0xa8,0x7f,0x23,0xf0,0x59,0x00,0xac,0x63,0xe0,0x81,0xcf,0x4f,0xe0,0xb1,0x81,0x58,0xc3,0xc1,0x08,0x24,0x1f,0xf9,0x68,0x6a,0x1f,0xe9,0xff,0x16,0x02,0x34,0x13,0x50,0x82,0x0a,0xea,0x60,0x1f,0xf9,0xf0,0x41,0x05,0x1d,0x30,0x09,0x18,0x60,0x15,0xa3,0xe8,0x83,0x47,0xe0,0xec,0x2c,0xaf,0xf2,0x0e,0x08,0x1f,0xc1,0x18,0x60,0x1a,0xaf,0xc2,0x6c,0x89,0x62,0x03,0x19,0xad,0xe5,0x70,0x44,0x62,0x80,0x5a,0xa1,0x4f,0x63,0x23,0x0c,0x7a,0xaa,0x4d,0x11,0xe9,0x00,0x06,0x73,0xaa,0x25,0x0a,0x78,0xaf,0x90,0x09,0x25,0x54,0x56,0x5f,0x04,0x30,0xc0,0x64,0x7a,0xa1,0x11,0x7e,0x20,0x18,0x0f,0x3c,0x82,0xaa,0x04,0x18,0x0d,0xf8,0x16,0x33,0xe8,0x84,0xa8,0x08,0x3c,0x33,0x00,0xf0,0x20,0x71,0x08,0xa9,0x38,0x86,0x62,0x62,0x18,0x40,0x44,0x80,0x09,0x04,0x08,0x90,0x01,0x20,0x41,0x17,0x22,0x90,0x01,0x3e,0x00,0x76,0x80,0x1d,0x48,0x00,0x8d,0x91,0x00,0x34,0xf8,0x20,0xe2,0xa7,0x9c,0x06,0x5c,0x11,0x02,0x28,0x5d,0x91,0x35,0x48,0xaf,0xf8,0x04,0x3f,0xf9,0x88,0x20,0x01,}; -const uint8_t* const _I_DolphinFirstStart0_70x53[] = {_I_DolphinFirstStart0_70x53_0}; - -const uint8_t _I_DolphinFirstStart1_59x53_0[] = {0x01,0x00,0x1e,0x01,0x00,0x0e,0x03,0xfe,0x07,0x5b,0x84,0x02,0x06,0x07,0x48,0x64,0x02,0x08,0x07,0x48,0x14,0x02,0x10,0x07,0x48,0x0c,0x03,0x21,0x3f,0x13,0x18,0x84,0xa8,0x00,0x75,0x8c,0x00,0xca,0x00,0x0b,0x28,0x20,0x1d,0xa0,0x59,0xe0,0x39,0x48,0x07,0x03,0x81,0xd5,0x81,0xd6,0x81,0x55,0x8c,0x01,0xc6,0x21,0x00,0x87,0x68,0x25,0x52,0x40,0x39,0x7c,0x21,0xf5,0x08,0xa8,0x1d,0x20,0xfa,0x88,0x70,0x1c,0xfd,0x10,0x3a,0xa4,0x1f,0x88,0x54,0x18,0x85,0x52,0x09,0xbe,0x81,0xc1,0x0c,0x83,0x10,0x94,0x40,0x39,0xf0,0x19,0x21,0xc8,0x62,0x12,0x0c,0x04,0x0e,0x0c,0x07,0x38,0x07,0x86,0x07,0x18,0x03,0x94,0xc2,0x01,0x9e,0x81,0xca,0x38,0x89,0x21,0x0f,0x0c,0x03,0xf9,0x27,0x13,0x94,0xd0,0xb6,0x70,0x20,0x38,0xda,0x80,0xe5,0x10,0x03,0x95,0x59,0x54,0x70,0x10,0x38,0xda,0xc0,0xc3,0xfe,0xc1,0xab,0x0b,0xaa,0x2a,0x1c,0x05,0x81,0x58,0x38,0x09,0xd0,0x5c,0xa3,0xe0,0x72,0x86,0xae,0x8d,0x40,0x34,0x06,0xa1,0xc0,0xc0,0xe3,0xc0,0x65,0x1c,0x19,0x58,0x29,0xe1,0x00,0x14,0x28,0x0a,0x26,0x61,0x00,0x15,0x58,0x0a,0x2e,0x34,0xd6,0x42,0x9e,0x6b,0x54,0x82,0x92,0x08,0x1e,0x63,0x41,0x1d,0x0a,0x88,0x60,0x1d,0x42,0x11,0x5c,0x01,0xe5,0x3c,0x03,0x97,0x30,0x0e,0x42,0x42,0x80,0xd0,0x82,0xe4,0x07,0x28,0x17,0x10,0x1e,0xb0,0x4a,0x20,0x3d,0x61,0x1a,0x80,0x79,0x0f,0x0a,0x21,0x70,0x07,0x90,0x1c,0xa4,0x1a,0x00,0x7a,0xd0,0x0e,0x42,0x34,0x20,0x10,0xe0,0x00,0xed,0x00,0xa1,0x82,0xc8,0xc6,0x74,0x40,0xd9,0x01,0xce,0x84,0x07,0x69,0x10,0xcc,0x80,0xe7,0x5c,0x03,0xb4,0xa8,0x96,0x40,0x73,0x8a,0x96,0xc8,0x0c,0x40,}; -const uint8_t* const _I_DolphinFirstStart1_59x53[] = {_I_DolphinFirstStart1_59x53_0}; - -const uint8_t _I_DolphinFirstStart2_59x51_0[] = {0x01,0x00,0x2e,0x01,0x00,0x1f,0xfe,0x06,0x05,0x3f,0xc7,0xfe,0x01,0x1c,0x03,0x16,0x02,0xaf,0x0f,0x80,0x58,0x01,0xc7,0xaa,0x80,0x82,0xc4,0x0e,0x55,0x6b,0x28,0x10,0x81,0x45,0xab,0x8d,0x01,0xca,0x04,0x1a,0x1a,0xac,0x1c,0x0e,0x50,0x48,0x06,0xc0,0x3c,0x40,0x01,0x84,0x40,0x2b,0x15,0x51,0xd9,0xc4,0x20,0x1a,0xc9,0x50,0x1c,0xe4,0x02,0xe1,0x8a,0x81,0xd7,0x55,0x0a,0x03,0x9d,0x02,0x01,0x5c,0x82,0x81,0xd7,0xc0,0x3a,0x10,0x3a,0x12,0x88,0xc8,0x60,0x11,0x07,0xa0,0x1c,0x68,0x00,0xf6,0xe0,0x22,0x50,0x0e,0x36,0x00,0x7b,0x68,0x00,0x83,0xa0,0x11,0x08,0x1c,0x6a,0x03,0x42,0x44,0x1e,0xc0,0x28,0x50,0x61,0xf9,0x56,0x00,0xe3,0x60,0x40,0x88,0x1c,0x75,0x01,0x42,0x07,0x9d,0x50,0x5e,0x4b,0x01,0x37,0x8e,0xb0,0x0e,0x51,0xd8,0x04,0xc2,0x01,0xd4,0x5d,0x1c,0x02,0x30,0x7f,0x14,0x99,0x5c,0x20,0x11,0x48,0x07,0x58,0x0e,0x20,0x81,0xd0,0x23,0x04,0x1e,0x30,0x80,0x38,0xd4,0x11,0x82,0x0f,0x18,0x40,0xb0,0xb0,0x50,0x3d,0x58,0x1c,0x52,0x85,0xf1,0x83,0x75,0x58,0x64,0x49,0x1a,0xfc,0x17,0x57,0x01,0x88,0x25,0x0b,0x55,0x02,0xaa,0xc0,0x64,0x14,0x08,0x1e,0x02,0xaa,0x1f,0x18,0x0f,0x00,0xbe,0x20,0xf1,0x80,0x82,0x46,0x01,0x03,0x82,0xe0,0x04,0xa3,0xab,0x46,0x0e,0x32,0x15,0x80,0xb5,0x40,0x2a,0xa4,0x21,0x98,0x43,0x70,0x13,0x58,0x04,0xac,0xa4,0x3c,0x08,0xd6,0x02,0x35,0x00,0x8a,0xcd,0x06,0xa3,0x1d,0xa0,0x24,0x46,0x57,0xe8,0x26,0x8c,0xdb,0x80,0x84,0x18,0xad,0x42,0x07,0x5f,0xbf,0xb9,0x8a,0x17,0x80,0xff,0x6a,0xb0,0x46,0x91,0x07,0x88,0xc4,0x4a,0x43,0x1f,0x07,0x92,0xc4,0x49,0x82,0x9b,0x25,0x98,0xc0,0x28,0xa0,0x73,0x1f,0x0b,0x50,0x81,0xea,0x07,0x40,0x7b,0xac,0x44,0x0e,0xa0,}; -const uint8_t* const _I_DolphinFirstStart2_59x51[] = {_I_DolphinFirstStart2_59x51_0}; - -const uint8_t _I_DolphinFirstStart3_57x48_0[] = {0x01,0x00,0x12,0x01,0x00,0x16,0x03,0xff,0x07,0x03,0xa5,0x82,0x01,0x38,0x03,0xa4,0x62,0x01,0xc0,0x03,0xa4,0x10,0x04,0x30,0x10,0x39,0xc0,0x80,0x48,0x0c,0x40,0x91,0x7e,0x20,0x60,0x72,0x84,0x02,0x8b,0x78,0x12,0x28,0x80,0x68,0x85,0x87,0x20,0x11,0x18,0x5c,0x80,0xe8,0x01,0x19,0xc5,0x00,0x0e,0x62,0xc1,0x9f,0x01,0xcb,0xe9,0x03,0x84,0x60,0x20,0xf8,0x00,0x38,0xd7,0x21,0xb1,0x0f,0x04,0x04,0x0e,0x5a,0x89,0xd4,0x83,0xc0,0x4b,0x3a,0xc5,0x54,0xcc,0x20,0x51,0x00,0x8e,0xc3,0x54,0x80,0x13,0xf8,0x81,0xc6,0xc1,0x55,0x01,0x8c,0x78,0x0e,0x30,0xee,0x06,0xaa,0x05,0xe0,0xae,0x01,0xc6,0x23,0x80,0xaa,0xc1,0x60,0x1a,0x90,0x38,0xc8,0x60,0x1a,0xb8,0x54,0x02,0xad,0x07,0x80,0xd0,0x40,0x83,0x15,0x80,0x7b,0x21,0x10,0x1c,0x0c,0x03,0x7f,0x2a,0x80,0x4d,0x00,0xe3,0x01,0xf8,0xf0,0x2a,0xf0,0x08,0x60,0x1c,0x60,0x41,0xd1,0xdf,0x1a,0x44,0x0e,0x50,0x68,0x05,0xe3,0x07,0x02,0x82,0x01,0xc6,0x19,0x00,0xf8,0x5f,0xe0,0x20,0x72,0xfa,0x40,0x7f,0xc2,0xb1,0x03,0x88,0x68,0x7f,0xf6,0xb4,0x28,0xc0,0x80,0xe3,0x88,0xaa,0xc7,0x40,0xe9,0x50,0xd5,0x41,0x94,0xa2,0x07,0x29,0x87,0x52,0x02,0x07,0x12,0x30,0xc1,0x22,0x16,0x86,0x29,0x01,0xca,0x30,0xf6,0x10,0x39,0xc2,0x23,0x10,0x6c,0x00,0x1d,0x3d,0x10,0x1b,0x02,0xe0,0x41,0x03,0x08,0x75,0x0c,0x60,0x0e,0x4f,0x11,0x0a,0x0c,0x18,0x0e,0x96,0x06,0x28,0x81,0xd3,0x01,0x1f,0x01,0x90,0x1c,0xdc,0xc2,0x01,0x15,0xd0,0x81,0xdc,0x4c,0x30,0x30,0x3f,0x00,0xc4,0x0e,0x30,0x20,0x3c,0x8c,0xc8,0x0f,0x2b,0x41,}; -const uint8_t* const _I_DolphinFirstStart3_57x48[] = {_I_DolphinFirstStart3_57x48_0}; - -const uint8_t _I_DolphinFirstStart4_67x53_0[] = {0x01,0x00,0x1f,0x01,0x00,0x17,0xc3,0xfe,0x08,0x68,0x74,0x02,0x0e,0x07,0x4c,0x04,0x06,0x01,0x18,0x04,0x25,0x00,0x04,0x36,0x00,0x42,0x48,0x02,0x88,0x00,0x28,0x80,0x0c,0xa0,0x40,0x83,0x84,0x00,0xca,0x08,0x08,0x30,0x21,0x83,0x0c,0x2c,0x81,0xe3,0x04,0x20,0xc0,0x80,0x02,0x31,0x32,0x11,0x02,0x27,0x00,0x5d,0x40,0x45,0x87,0x90,0x3e,0x7c,0x00,0x43,0x84,0x4e,0x60,0x43,0x30,0x89,0x82,0x12,0x80,0x15,0x20,0x40,0x99,0xc8,0x22,0x7b,0x88,0x10,0x20,0x82,0x27,0x7c,0x82,0x9d,0x48,0x22,0x5f,0x0d,0xfc,0x08,0x10,0x41,0x12,0xf8,0x57,0xc2,0x28,0x30,0x1e,0x07,0x9e,0x06,0x87,0x25,0x79,0xc4,0x20,0x40,0x83,0x21,0x14,0x22,0x08,0x08,0x38,0x2a,0xb8,0xd9,0x47,0x0a,0x14,0x09,0xf0,0x54,0x47,0x1f,0x81,0x82,0x1a,0xde,0x8e,0x33,0xd1,0xc7,0x81,0x0f,0x0e,0x45,0x18,0x20,0xa1,0xe6,0xf2,0x10,0x89,0xa0,0x70,0x11,0x00,0x41,0x46,0x03,0x86,0x55,0x10,0x40,0xc1,0x82,0x25,0x20,0x04,0x11,0x94,0x80,0x43,0x10,0x84,0x01,0x46,0xc0,0xbd,0x38,0x40,0x20,0x8f,0x49,0x08,0xc4,0x1c,0xc8,0x22,0x50,0x38,0x20,0x20,0x86,0xe4,0x83,0x10,0x41,0x8b,0x87,0xf9,0x03,0x81,0xc0,0x81,0x05,0x81,0xc0,0x40,0xf3,0x90,0x60,0x41,0x70,0x2c,0x17,0x01,0xc0,0xc1,0x41,0x05,0x30,0x98,0x43,0x04,0x65,0x01,0x04,0x0c,0x32,0x38,0x91,0x18,0x04,0x14,0x10,0x38,0x18,0x1e,0xac,0x7c,0x41,0x11,0x88,0x5f,0xfc,0x17,0x55,0xa9,0x82,0x06,0x05,0xbc,0x85,0x02,0x08,0xc6,0x32,0x0f,0xe5,0x5e,0x1a,0x08,0x5c,0x06,0xaa,0x34,0x08,0x4a,0x06,0x02,0xab,0x75,0xf0,0x4f,0xc1,0x05,0x80,0x08,0x8e,0xab,0x7f,0xea,0x04,0x11,0x80,0x6a,0xa0,0x02,0x03,0x08,}; -const uint8_t* const _I_DolphinFirstStart4_67x53[] = {_I_DolphinFirstStart4_67x53_0}; - -const uint8_t _I_DolphinFirstStart5_54x49_0[] = {0x01,0x00,0x0b,0x01,0x00,0x0f,0xf2,0xfe,0x06,0x48,0x1e,0x02,0x06,0x05,0x2e,0x00,0x08,0x61,0x80,0x62,0x98,0x00,0x86,0x20,0x06,0x28,0x40,0x08,0x64,0x00,0x62,0x82,0x00,0x86,0x80,0x06,0x28,0x14,0x72,0x01,0x80,0x03,0x14,0x06,0x44,0x03,0x20,0x49,0x00,0xc4,0x0c,0x61,0x13,0x81,0x07,0x90,0x0c,0xff,0xa8,0x18,0xcc,0xe0,0x10,0x78,0x60,0x18,0xc9,0xe3,0x10,0x03,0x0e,0x02,0x02,0x4f,0x19,0x00,0x18,0x78,0x10,0x12,0x78,0xc8,0x0a,0xc3,0xf8,0x80,0xc1,0x80,0xc5,0xe0,0xff,0x8f,0x47,0xe1,0x27,0x03,0x0d,0xfc,0x80,0x3b,0xc9,0x74,0x43,0x81,0x0f,0xb0,0x40,0x2b,0xd2,0xd3,0x71,0x07,0x87,0x5f,0x16,0x84,0x54,0x23,0xe3,0x21,0xab,0xc5,0x61,0x1a,0x82,0xf0,0xf0,0x35,0x70,0xa8,0x45,0x50,0x2a,0x3e,0x0a,0xac,0x1e,0x11,0x28,0x03,0x0f,0xc3,0xfe,0x06,0x19,0xa0,0x18,0x6f,0x9f,0x08,0x7c,0x22,0x30,0x06,0x1d,0xfc,0x3e,0x21,0x08,0x00,0x8f,0x01,0x7a,0x31,0x08,0x24,0x42,0x21,0xf0,0x5e,0x08,0x18,0x44,0xe3,0x0f,0x59,0x92,0xb4,0x96,0x66,0x06,0x58,0x10,0x19,0x60,0x20,0x64,0x46,0x08,0x19,0x27,0x00,0x65,0x9f,0x81,0x93,0xd1,0x2b,0x03,0x17,0x82,0x3f,0x50,0x9a,0x81,0x87,0x51,0x1e,0xf0,0x68,0x69,0x40,0x61,0xea,0x9d,0x86,0x1d,0x45,0x80,0x61,0x2d,0x48,0xc2,0x67,0x8d,0x12,0x3a,0x06,0x19,0x02,0x88,0x74,0x4b,0x21,0x03,0x1d,0x08,0xca,0x21,0x41,0x06,0x93,0xe8,0xa1,0x85,0x31,0xe9,0x24,0x48,0x20,0x30,0x1b,0x10,0x18,0x77,0x8f,0xa1,0x80,0xcc,0x40,0xc3,0x56,0x0b,0x8c,0x0a,0x22,0xba,0x12,0x88,0x81,0x84,}; -const uint8_t* const _I_DolphinFirstStart5_54x49[] = {_I_DolphinFirstStart5_54x49_0}; - -const uint8_t _I_DolphinFirstStart6_58x54_0[] = {0x01,0x00,0x21,0x01,0x00,0x0f,0xf2,0x7e,0x06,0x4c,0x04,0x0f,0x81,0x03,0x03,0x9d,0x80,0x04,0x30,0xc0,0x39,0xc6,0x00,0x43,0x30,0x03,0x9c,0x10,0x04,0x34,0x00,0x39,0xc0,0x84,0x44,0x07,0x38,0x08,0x0d,0x41,0x68,0x13,0x70,0x39,0x08,0xd0,0x56,0xa1,0xd1,0x03,0x94,0x80,0x04,0x30,0x68,0x04,0x20,0x0e,0x84,0x91,0x03,0xa9,0x64,0x62,0x80,0x41,0x88,0x40,0x3f,0xc6,0xf1,0xfe,0x43,0xc0,0xe3,0x80,0xff,0xff,0xe0,0x3f,0xf8,0xf8,0x1c,0x78,0x18,0x1f,0xfe,0x0f,0x02,0x12,0x18,0x47,0x03,0x82,0x10,0x1e,0x08,0x1c,0xf5,0x60,0x71,0xd4,0x81,0xcf,0xab,0xff,0xd5,0xf5,0xc0,0xe3,0x04,0xe0,0x03,0x86,0xae,0x27,0x28,0x27,0x40,0x0e,0x21,0x91,0x03,0x96,0x80,0x0e,0x34,0x18,0x79,0x28,0x60,0x95,0x00,0x38,0xf8,0x20,0x27,0xd1,0x82,0x6a,0x03,0xc3,0x1c,0x39,0x94,0x0a,0xa1,0xc0,0xc5,0x2f,0xca,0x05,0x02,0x90,0x24,0x56,0x04,0x68,0x10,0x01,0x4f,0x80,0xea,0x5b,0x10,0x38,0x83,0x8d,0xa0,0x30,0x30,0x38,0xa3,0x09,0xc0,0x20,0xf2,0x03,0x90,0xc0,0x46,0xe2,0x91,0x2f,0x80,0xfc,0xe0,0x1e,0x08,0x02,0x54,0x47,0x62,0x27,0x2f,0xfb,0x14,0xdc,0xc6,0xb5,0x30,0x38,0x8b,0x05,0x6a,0x60,0x01,0x89,0x00,0xc8,0x16,0x50,0x29,0x10,0x1c,0x8d,0x25,0x05,0xa1,0x15,0xc9,0xfe,0x50,0xaa,0x08,0x10,0x67,0x01,0x22,0x8a,0xe0,0x60,0xe5,0xf2,0x07,0x8e,0xa8,0xb0,0x49,0xe1,0x00,0x0d,0xd4,0x68,0x5a,0x00,0x39,0x46,0x88,0x84,0x07,0x30,0xe8,0x81,0xc6,0x40,0x4d,0x11,0x91,0x17,0x06,0x40,0x65,0x11,0x51,0x01,0xc6,0x81,0x04,0x32,0x18,0x1e,0x92,0x64,0x00,0x11,0x68,0x81,0xd6,0xa0,0x07,0x16,0x22,0x6b,0x0a,0x82,0x07,0x3f,0x05,0x4d,0xdc,0x24,0x21,}; -const uint8_t* const _I_DolphinFirstStart6_58x54[] = {_I_DolphinFirstStart6_58x54_0}; - -const uint8_t _I_DolphinFirstStart7_61x51_0[] = {0x01,0x00,0x13,0x01,0x00,0x17,0x03,0xff,0x01,0x03,0xa4,0xe2,0x01,0x0e,0x03,0xa4,0x1a,0x01,0x30,0x03,0x1e,0x00,0x2a,0x3c,0x00,0x39,0xd0,0x00,0x65,0x03,0x01,0x94,0x80,0x06,0x50,0x40,0x19,0x44,0x00,0x65,0x08,0x01,0xb0,0x2c,0xe2,0x81,0xb6,0x86,0x0a,0xd8,0x7c,0x20,0x75,0x85,0x10,0xcc,0x06,0x50,0x50,0x3b,0x10,0xce,0x00,0x69,0x20,0x79,0x7c,0x20,0x20,0x71,0xc0,0x07,0xca,0xf1,0x02,0x81,0x01,0xc6,0x3a,0x07,0x1f,0xe4,0x10,0x0e,0x53,0xe0,0x38,0xe7,0xa0,0xa0,0x72,0xbb,0x81,0xca,0x12,0x68,0x1c,0x05,0x5c,0x0e,0x3f,0xe8,0xc8,0x1c,0xab,0xe0,0x72,0x94,0x81,0xda,0xb2,0x07,0x5f,0xe0,0x3d,0xbf,0x95,0x44,0x20,0x81,0xce,0xf1,0x2f,0x03,0x94,0xb8,0xae,0x51,0x00,0x39,0x47,0x60,0xd0,0x84,0x70,0x81,0xcb,0x44,0x9d,0x10,0x3a,0x58,0xce,0xe6,0x07,0x29,0x10,0x18,0xa0,0x50,0x88,0x76,0x02,0x22,0x07,0x49,0x8e,0x02,0x24,0x07,0x4e,0x0e,0x02,0x12,0x96,0x38,0x44,0x07,0x02,0x8f,0x1c,0x07,0x1c,0x4e,0x30,0x1c,0x10,0x3c,0x6c,0x13,0x80,0x38,0xc0,0xb0,0x80,0xf1,0x6e,0x90,0x1c,0x71,0x10,0xd7,0x49,0x81,0xc7,0x20,0x0f,0x17,0xe9,0x42,0x20,0x91,0x09,0xeb,0x24,0xe2,0x10,0x49,0x07,0x6f,0xff,0x80,0x56,0x88,0x1c,0xa2,0xae,0xd1,0x66,0x89,0xe0,0x68,0x11,0xb8,0x06,0xc0,0x2e,0x40,0x71,0x9a,0xc0,0x2b,0x00,0x73,0xc0,0x7a,0xe0,0x09,0x12,0x03,0x95,0x57,0xff,0x17,0x03,0x9c,0x03,0x57,0xaa,0x78,0x94,0x40,0xa6,0x35,0x5a,0xac,0x14,0x0e,0x9a,0xad,0x50,0xf8,0x41,0x05,0x00,0x83,0x55,0x14,0x06,0x07,0x18,0x54,0xa0,0x0e,0xb0,0x60,0x31,0xc0,0x00,}; -const uint8_t* const _I_DolphinFirstStart7_61x51[] = {_I_DolphinFirstStart7_61x51_0}; - -const uint8_t _I_DolphinFirstStart8_56x51_0[] = {0x01,0x00,0xfd,0x00,0x00,0x17,0x83,0xff,0x01,0x03,0x1c,0x72,0x01,0x06,0x03,0x1c,0x0e,0x01,0x18,0x02,0x96,0x00,0x04,0x36,0x00,0x31,0x50,0x01,0x24,0x1c,0x29,0x00,0x28,0xa0,0x40,0x21,0x88,0x01,0x8a,0x08,0x02,0x18,0x40,0x18,0x80,0x64,0x09,0x20,0x89,0x81,0x98,0x3c,0x42,0x63,0x03,0x30,0xcc,0x70,0x10,0x71,0xd9,0x01,0x86,0xc1,0x1c,0x03,0x24,0x42,0x7e,0x50,0x12,0x91,0x62,0x2f,0xf8,0x0e,0x00,0x18,0xb9,0x17,0x1c,0x04,0x83,0x02,0x06,0x1e,0x27,0xc4,0x54,0x20,0x62,0xf2,0x7c,0xe0,0x52,0x0c,0x10,0x88,0x7c,0x9f,0xf8,0x28,0x18,0x41,0xa5,0xff,0x85,0x48,0x30,0x80,0xd1,0xe4,0x5f,0xc1,0xa3,0x84,0x26,0x0f,0x23,0xfe,0x1b,0x18,0x44,0x16,0x01,0x90,0x81,0xc1,0x62,0x10,0x84,0xc0,0xf8,0x20,0x30,0x28,0x84,0x40,0x1a,0x25,0x11,0x82,0x42,0x22,0x11,0xf4,0xd9,0xc1,0x02,0x22,0xb2,0x38,0x14,0xc1,0x8e,0x90,0x14,0xc1,0xa2,0x86,0x02,0xc6,0x30,0x31,0x06,0x8c,0x0c,0x26,0x02,0x56,0x9d,0x04,0x0c,0x6a,0xa1,0x03,0x21,0x20,0x68,0x5f,0xe7,0xa9,0x00,0x86,0x85,0x01,0x8f,0xe0,0x08,0xe3,0x00,0xe1,0x02,0xc6,0xfe,0x16,0x23,0xe1,0x13,0x10,0xa4,0x82,0xb1,0x12,0x88,0x00,0xf0,0x91,0xe0,0x6a,0xfd,0x63,0xfc,0x08,0x78,0x18,0xb5,0x5e,0xad,0xfb,0x84,0xa0,0x95,0x48,0xad,0x54,0x4a,0x50,0x4d,0x44,0x6b,0x56,0x0d,0x28,0x45,0x42,0x6a,0x0d,0x38,0x46,0x02,0x55,0xaa,0x35,0x25,0x52,0xac,0x06,0x4b,0x04,0xa8,0x0c,0x94,0x03,0xa0,0x80,0x04,}; -const uint8_t* const _I_DolphinFirstStart8_56x51[] = {_I_DolphinFirstStart8_56x51_0}; - -const uint8_t _I_DolphinOkay_41x43_0[] = {0x01,0x00,0xa0,0x00,0x00,0x0f,0x82,0x3e,0x05,0x38,0xf7,0x80,0x08,0x58,0x08,0x0c,0x02,0x0e,0x05,0x1b,0x00,0x08,0x63,0x00,0x21,0x88,0x00,0x86,0x40,0x02,0x18,0x40,0x08,0x68,0x00,0x21,0x82,0x06,0x88,0x0a,0xf0,0x21,0x39,0x09,0x84,0x02,0x20,0x57,0x09,0x98,0x15,0x67,0xc0,0x54,0xbe,0x81,0x4f,0x01,0xfe,0x02,0x9d,0x03,0xc4,0x20,0x10,0x29,0x7c,0x80,0xa9,0xfe,0x02,0xac,0x14,0x0a,0x77,0xc8,0x58,0x8c,0xf0,0x11,0x51,0x79,0xff,0x61,0x44,0x93,0x81,0x02,0xc4,0x9e,0x60,0xb2,0xf0,0xa0,0x46,0x0c,0x17,0x14,0x99,0x1a,0x07,0x80,0x59,0x49,0x82,0x21,0xc0,0xa4,0x82,0x24,0xb9,0x20,0x88,0x1c,0x47,0xc2,0x07,0x11,0x54,0xa0,0x60,0x53,0xb8,0x0a,0x4b,0xf3,0x03,0x87,0x81,0x4a,0x0d,0xfc,0x1a,0x98,0x68,0xb8,0x01,0x51,0x13,0x15,0xe0,0x82,0x7f,0x8d,0x78,0x38,0xbf,0xff,0xfa,0xb8,0x60,0xbf,0x1b,0xf9,0x50,0x14,0xea,0xe7,0x02,0x02,0x8e,0xac,0x94,0x40,}; -const uint8_t* const _I_DolphinOkay_41x43[] = {_I_DolphinOkay_41x43_0}; - -const uint8_t _I_ArrowDownEmpty_14x15_0[] = {0x01,0x00,0x17,0x00,0xfc,0x41,0xe1,0x10,0x40,0x0c,0xc3,0xe7,0x90,0x19,0x04,0x0a,0x20,0x08,0x10,0x48,0xc4,0x20,0x52,0x08,0x0f,0x02,0x00,}; -const uint8_t* const _I_ArrowDownEmpty_14x15[] = {_I_ArrowDownEmpty_14x15_0}; - -const uint8_t _I_ArrowDownFilled_14x15_0[] = {0x00,0xF8,0x07,0x08,0x04,0xE8,0x05,0x68,0x05,0xA8,0x05,0x68,0x05,0xA8,0x05,0x6F,0x3D,0xA1,0x21,0xFA,0x17,0xF4,0x0B,0xE8,0x05,0xD0,0x02,0x20,0x01,0xC0,0x00,}; -const uint8_t* const _I_ArrowDownFilled_14x15[] = {_I_ArrowDownFilled_14x15_0}; - -const uint8_t _I_ArrowUpEmpty_14x15_0[] = {0x01,0x00,0x18,0x00,0xe0,0x40,0x24,0x10,0x18,0x84,0x0a,0x11,0x04,0x82,0x42,0x20,0x51,0x08,0x0c,0x82,0x1f,0x3c,0x04,0x88,0x06,0x7f,0x10,0x70,}; -const uint8_t* const _I_ArrowUpEmpty_14x15[] = {_I_ArrowUpEmpty_14x15_0}; - -const uint8_t _I_ArrowUpFilled_14x15_0[] = {0x00,0xC0,0x00,0x20,0x01,0xD0,0x02,0xE8,0x05,0xF4,0x0B,0xFA,0x17,0x61,0x21,0xAF,0x3D,0x68,0x05,0xA8,0x05,0x68,0x05,0xA8,0x05,0xE8,0x05,0x08,0x04,0xF8,0x07,}; -const uint8_t* const _I_ArrowUpFilled_14x15[] = {_I_ArrowUpFilled_14x15_0}; - -const uint8_t _I_DolphinReadingSuccess_59x63_0[] = {0x01,0x00,0x19,0x01,0x00,0x1d,0x00,0x0f,0xd2,0x00,0x21,0xe0,0x3f,0xf0,0xf9,0x00,0x40,0xee,0x00,0x11,0x88,0x04,0x0e,0x18,0x11,0x18,0x8c,0x40,0x0e,0x50,0x30,0x10,0xc0,0xa1,0x01,0xe2,0x05,0x14,0x12,0x08,0x33,0x58,0x44,0x08,0x66,0xa1,0xe3,0x01,0x9c,0x83,0x00,0x24,0x11,0x11,0x06,0xc4,0x76,0x20,0x75,0x15,0x99,0x48,0xc0,0xe9,0x0f,0x03,0x95,0xfc,0x86,0x3c,0x09,0x80,0x1c,0x7c,0x00,0x91,0x81,0x48,0x2f,0xc1,0x41,0x8c,0xc0,0x20,0x30,0x1c,0x87,0xfc,0x0e,0x30,0x70,0x70,0x81,0xc7,0xe6,0x07,0x18,0x08,0x1c,0xb9,0x1e,0x38,0x0f,0x02,0x01,0xf0,0x03,0xa0,0xa4,0x7f,0x90,0x30,0x38,0xff,0xe0,0x28,0x21,0xff,0x06,0x44,0x0e,0x46,0xe1,0x01,0x8c,0x03,0x34,0x2f,0x25,0x18,0x80,0xc7,0x2a,0x03,0x2e,0x01,0x3c,0x70,0x12,0xa2,0x39,0x78,0x27,0xe0,0x31,0xea,0x82,0xc4,0x6c,0x31,0xf0,0x78,0xea,0xb0,0x22,0x31,0xfc,0x1a,0xc6,0x01,0x55,0x25,0x88,0xf8,0x4b,0x02,0x1f,0x13,0xe1,0x7f,0x97,0x85,0x15,0x03,0x90,0xf8,0xa0,0x10,0xa1,0xb1,0x0e,0x88,0x00,0x7f,0x0f,0xc0,0x7c,0x57,0x27,0x3c,0xb0,0x7f,0x5f,0xa9,0x1f,0xc0,0x6a,0xc5,0x05,0xc0,0xf0,0x11,0x46,0xac,0x18,0x3f,0xf9,0x54,0x75,0x00,0x73,0x1f,0x0f,0xfe,0xfe,0xc6,0x30,0x01,0xbc,0x48,0x00,0x84,0x82,0x00,0x1b,0x64,0xc0,0x07,0x60,0x03,0xb4,0x70,0x0c,0xbf,0x82,0x31,0x01,0x8d,0x0c,0x40,0x02,0x37,0x08,0x1d,0x74,0x00,0x76,0xa0,0x01,0xdb,0x01,0xfe,0x85,0x8b,0x96,0xaa,0x9b,0x30,0x01,0x6a,0xa3,0x40,0x75,0xaa,0x03,0xdb,0x50,0xbb,0x30,0x01,0x54,0x24,0x25,0xe6,0x51,0x08,0x1f,0x68,0x00,0x7f,0x03,0xf2,0x79,0xc0,0xf4,}; -const uint8_t* const _I_DolphinReadingSuccess_59x63[] = {_I_DolphinReadingSuccess_59x63_0}; - -const uint8_t _I_Down_25x27_0[] = {0x01,0x00,0x46,0x00,0xfc,0x7f,0xe7,0xf0,0x08,0x24,0x02,0x81,0x00,0x81,0x40,0x30,0x10,0x08,0x08,0x38,0x60,0x20,0x3f,0x01,0x9f,0xc7,0xff,0x1f,0x01,0xa7,0x87,0xff,0x0f,0x80,0xf0,0x7f,0xf0,0x78,0x0e,0x07,0xff,0x03,0x0b,0x8f,0xfc,0x04,0x30,0x1f,0xf0,0x7c,0xaf,0x80,0x32,0x9c,0x00,0xca,0x20,0x37,0xf0,0x18,0xc0,0xca,0x63,0x01,0x83,0x40,0x38,0x10,0x0f,0xe7,0xfe,0xfe,0x67,0x40,}; -const uint8_t* const _I_Down_25x27[] = {_I_Down_25x27_0}; - -const uint8_t _I_Down_hvr_25x27_0[] = {0x01,0x00,0x3a,0x00,0xfc,0x7f,0xe7,0xf0,0x0f,0xe7,0xfe,0xff,0x00,0xff,0x7f,0xff,0xf0,0x00,0x10,0xff,0xe0,0x20,0x3f,0x01,0x9c,0x3e,0x01,0xe0,0x01,0xa4,0x7e,0x01,0xf0,0x80,0x8b,0x47,0xf1,0x01,0x16,0x8f,0xf0,0x2e,0x23,0x11,0x01,0x88,0x04,0xf0,0x60,0x32,0xe3,0x80,0xcb,0xde,0x37,0xf0,0x1a,0x95,0xcc,0xbe,0x66,0x73,}; -const uint8_t* const _I_Down_hvr_25x27[] = {_I_Down_hvr_25x27_0}; - -const uint8_t _I_InfraredArrowDown_4x8_0[] = {0x00,0xFF,0x7E,0x3C,0x18,}; -const uint8_t* const _I_InfraredArrowDown_4x8[] = {_I_InfraredArrowDown_4x8_0}; - -const uint8_t _I_InfraredArrowUp_4x8_0[] = {0x00,0x18,0x3C,0x7E,0xFF,}; -const uint8_t* const _I_InfraredArrowUp_4x8[] = {_I_InfraredArrowUp_4x8_0}; - -const uint8_t _I_InfraredLearnShort_128x31_0[] = {0x01,0x00,0x10,0x01,0x00,0x47,0xfb,0xfe,0x00,0x38,0x38,0x3e,0x20,0x20,0x54,0x84,0x03,0x9f,0xc0,0x06,0x58,0x80,0x3d,0xf2,0x00,0x65,0x90,0x03,0xde,0x90,0x06,0x5a,0x07,0xc0,0x8a,0x70,0x1a,0x04,0x02,0x51,0x80,0x03,0x94,0x02,0x3f,0x40,0x20,0x24,0x0b,0x01,0x00,0x92,0x70,0x35,0x40,0x01,0xe0,0xdf,0xf0,0x10,0x40,0x71,0x58,0x20,0x90,0x88,0x0c,0x4a,0x81,0x55,0x00,0x0f,0x87,0xf7,0x00,0x82,0x43,0x36,0x16,0xdc,0x9c,0x12,0x21,0x01,0x85,0x70,0x3f,0xc1,0xf1,0xf8,0xfc,0x60,0x20,0xf5,0x90,0x40,0xa1,0x34,0x08,0x18,0x7c,0x7e,0x24,0x91,0x07,0x8c,0xc0,0x5e,0x52,0x28,0x14,0x17,0x81,0x01,0x0f,0x8f,0xe7,0xe3,0x03,0x1f,0x8e,0x02,0xdb,0x03,0x8e,0x49,0x20,0x50,0x2e,0x04,0x72,0xbd,0x55,0xdc,0xeb,0xa0,0x7c,0x4f,0x68,0xbc,0x60,0x72,0x40,0x79,0x50,0x23,0x9a,0x6d,0x56,0x66,0x5c,0x0f,0x21,0x78,0x9b,0x04,0x1e,0x28,0x21,0x8e,0x5c,0x43,0xe6,0x2f,0x10,0xf9,0x0b,0xc7,0x04,0x99,0x18,0x06,0xe0,0x7e,0x56,0x32,0x78,0x8f,0xc4,0x08,0x32,0x20,0x79,0x48,0x2b,0x85,0xf2,0xf8,0x83,0xc4,0x5c,0x3f,0x03,0x78,0xd0,0x81,0xe3,0xc0,0xdf,0x9f,0xcb,0xf3,0x04,0xc6,0x7d,0xfb,0xdf,0x34,0x78,0xd0,0x45,0xe5,0x7e,0x4f,0x97,0xe2,0x09,0x80,0x07,0x88,0xbc,0x61,0x00,0xf3,0xd8,0x2f,0xcb,0xe0,0xcf,0x60,0x68,0xd0,0x30,0x15,0xfa,0xac,0x36,0x3f,0x60,0x77,0xb3,0x80,0x5d,0xe6,0x4b,0x20,0x03,0x03,0xc4,0x01,0xd0,0x10,0x7f,0x40,0x81,0xfc,0xa7,0x10,0x06,0x99,0xd0,0x01,0x51,0x00,0x7f,0x48,0x01,0xfd,0xc0,0x43,0x98,0x00,0x8e,0xfe,0x00,0xf0,}; -const uint8_t* const _I_InfraredLearnShort_128x31[] = {_I_InfraredLearnShort_128x31_0}; - -const uint8_t _I_InfraredLearn_128x64_0[] = {0x01,0x00,0xcc,0x01,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x07,0x80,0x3f,0x01,0x07,0x82,0x41,0x21,0x20,0x73,0x00,0x8e,0x82,0x0f,0x00,0xa0,0x01,0x46,0x11,0x00,0x07,0xc0,0x28,0x41,0xe5,0xc8,0xba,0x63,0xa7,0x70,0x6b,0x3d,0xbb,0x99,0x19,0xee,0x68,0x71,0x16,0x3f,0x70,0x3c,0x64,0xf9,0x58,0x25,0x26,0x13,0x91,0xc9,0x64,0xa4,0x99,0x2d,0x06,0x1f,0x29,0x42,0x07,0x8c,0x80,0x1e,0x50,0xff,0x88,0x3c,0x67,0x80,0xf1,0xc1,0x03,0xde,0x03,0x11,0x07,0x8c,0x10,0x1e,0x38,0x40,0x79,0xf0,0x32,0x80,0xf1,0x83,0x58,0x72,0x58,0xc8,0xc6,0x73,0x40,0x3f,0x10,0x78,0x9e,0xf1,0x17,0xe9,0xcf,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x02,0x44,0x18,0xa3,0x80,0x82,0x32,0x06,0x44,0x0f,0xf0,0x73,0x5d,0xe3,0x92,0x7e,0xcf,0x06,0x3b,0xc3,0xa4,0xdd,0xfc,0xc8,0x35,0xca,0x44,0xa5,0x34,0x5c,0x16,0x92,0x89,0x4a,0x91,0x4a,0x60,0x20,0xf7,0xa4,0x83,0xc6,0x8e,0x0f,0xba,0x88,0x3c,0x68,0x00,0xf7,0x80,0x65,0xe3,0x9c,0x7a,0x6e,0x0a,0x49,0xc3,0xb8,0xc8,0xa4,0xc0,0xf5,0x00,0x08,0x1d,0xc0,0x0e,0x0f,0xf0,0x07,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x2f,0xfb,0xfe,0x00,0x38,0x39,0x97,0xa1,0x00,0xe7,0xf0,0x3b,0x1c,0x00,0xd9,0x00,0x32,0xc8,0x01,0xef,0x48,0x03,0x2d,0x03,0xe0,0x45,0x38,0x0d,0x02,0x01,0x28,0xc0,0x01,0xca,0x01,0x1f,0xa0,0x10,0x12,0x05,0x80,0x80,0x49,0x38,0x1a,0xa0,0x00,0xf0,0x6f,0xf8,0x08,0x20,0x38,0xac,0x10,0x48,0x44,0x06,0x25,0x40,0xaa,0x80,0x07,0xc3,0xfb,0x80,0x41,0x21,0x9b,0x0b,0x6e,0x4e,0x09,0x10,0x80,0xc2,0xb8,0x1f,0xe0,0xf8,0xfc,0x7e,0x30,0x10,0x7a,0xc8,0x20,0x50,0x9a,0x04,0x0c,0x3e,0x3f,0x12,0x48,0x83,0xc6,0x60,0x2f,0x29,0x14,0x0a,0x0b,0xc0,0x80,0x87,0xc7,0xf3,0xf1,0x81,0x8f,0xc7,0x01,0x6d,0x81,0xc7,0x24,0x90,0x28,0x17,0x02,0x39,0x5e,0xaa,0xee,0x75,0xd0,0x3e,0x27,0xb4,0x5e,0x30,0x39,0x20,0x3c,0xa8,0x11,0xcd,0x36,0xab,0x33,0x2e,0x07,0x90,0xbc,0x4d,0x82,0x0f,0x14,0x10,0xc7,0x2e,0x21,0xf3,0x17,0x88,0x7c,0x85,0xe3,0x82,0x4c,0x8c,0x03,0x70,0x3f,0x2b,0x19,0x3c,0x47,0xe2,0x04,0x19,0x10,0x3c,0xa4,0x15,0xc2,0xf9,0x7c,0x41,0xe2,0x2e,0x1f,0x81,0xbc,0x68,0x40,0xf1,0xe0,0x6f,0xcf,0xe5,0xf9,0x82,0x63,0x3e,0xfd,0xef,0x9a,0x3c,0x68,0x22,0xf2,0xbf,0x27,0xcb,0xf1,0x04,0xc0,0x03,0xc4,0x5e,0x30,0x80,0x79,0xec,0x17,0xe5,0xf0,0x67,0xb0,0x34,0x68,0x18,0x0a,0xfd,0x56,0x1b,0x1f,0xb0,0x3b,0xd9,0xc0,0x2e,0xf3,0x25,0x90,0x01,0x81,0xe2,0x00,0xe8,0x08,0x3f,0xa0,0x40,0xfe,0x53,0x88,0x03,0x4c,0xe8,0x00,0xa8,0x80,0x3f,0xa4,0x00,0xfe,0xe0,0x21,0xcc,0x00,0x47,0x7f,0x00,0x78,}; -const uint8_t* const _I_InfraredLearn_128x64[] = {_I_InfraredLearn_128x64_0}; - -const uint8_t _I_InfraredSendShort_128x34_0[] = {0x01,0x00,0x42,0x01,0xfe,0x7f,0xc0,0x07,0x03,0x07,0xc4,0x10,0x0a,0x90,0x20,0x7f,0x83,0xfc,0x04,0x3c,0x01,0xc2,0x7f,0xf8,0x80,0x43,0x9f,0x83,0xca,0x40,0x1f,0x5e,0x27,0x7e,0xab,0x55,0xee,0x83,0xce,0x38,0x0f,0x6d,0x50,0x00,0xa5,0xc0,0xf2,0x89,0x03,0xda,0xfe,0x1f,0x1f,0xa8,0x7c,0x48,0xc3,0x09,0x07,0xb6,0xae,0x54,0x1f,0x19,0xd4,0x08,0x40,0x30,0x5f,0x81,0x1c,0x63,0xfe,0x08,0x1f,0x12,0xbe,0x3f,0x49,0x0e,0x02,0x09,0x58,0x04,0x0c,0xd7,0xf1,0x0f,0x1f,0x8e,0x2b,0x11,0xaa,0x95,0x40,0xa2,0x34,0x08,0x16,0xa0,0x4e,0x32,0xab,0xe4,0x7f,0x89,0x77,0x0b,0x0d,0xd6,0x7f,0x82,0x84,0x50,0x20,0x3d,0x81,0x48,0xcd,0x67,0xd3,0xe1,0xf8,0xc8,0xb4,0x43,0xf1,0xc1,0x62,0x24,0x10,0x1b,0x46,0x80,0x3e,0x3f,0xe9,0xf8,0xfc,0xfa,0xa1,0xf1,0xa4,0x68,0x20,0x13,0x8a,0x00,0x7c,0x67,0xf7,0xe3,0xfa,0x4a,0x81,0xe3,0x40,0x80,0x66,0x38,0x66,0xa1,0xeb,0xdd,0x47,0xec,0x0f,0x2c,0x47,0x0e,0xa9,0x35,0xe9,0xd9,0x47,0xe2,0x1f,0x21,0xf8,0xd2,0x17,0xc3,0x88,0x91,0xeb,0x83,0xe6,0xbf,0x42,0x78,0xc4,0x20,0x10,0x88,0x05,0x5c,0x7e,0x7a,0xe1,0xfa,0x42,0x01,0xe5,0x84,0x1f,0x89,0x7c,0xbf,0xf7,0x7b,0xaf,0xdd,0x3e,0x31,0x10,0xe8,0xc2,0x3f,0x01,0xf1,0x3f,0x98,0x7c,0xa7,0x6a,0xf1,0x07,0x97,0x03,0x5e,0x9f,0x36,0x28,0xf7,0x7f,0xa1,0xf1,0x81,0x03,0xca,0x01,0x56,0x5f,0x9f,0xb8,0x3c,0x3e,0xa7,0xf8,0xc1,0x01,0xe5,0xf0,0x15,0x0f,0x85,0xbe,0x21,0xf1,0x00,0x08,0x7c,0x60,0x04,0xf1,0x77,0x96,0x7e,0x02,0xff,0x10,0x7c,0x00,0x16,0x08,0x05,0x40,0x78,0xa3,0xc4,0x00,0xb2,0x40,0x7b,0x2b,0xc4,0x00,0xb5,0x48,0x78,0x3d,0x70,0x01,0xf7,0x07,0xb4,0x00,0x94,0x23,0xfc,0x01,0x18,0x00,0xff,0x85,0xf3,0xff,0xc0,0xc3,0x0f,0x00,0xf0,0x09,0xce,0xf0,0x03,0x2f,0xc0,0x61,0x3f,0xe0,0xf8,0x00,0x30,0x3f,0xc0,}; -const uint8_t* const _I_InfraredSendShort_128x34[] = {_I_InfraredSendShort_128x34_0}; - -const uint8_t _I_InfraredSend_128x64_0[] = {0x01,0x00,0xe2,0x01,0x00,0x78,0x03,0xc0,0x1e,0x00,0xfe,0x04,0x0e,0x05,0x82,0xd7,0x81,0xca,0x21,0x08,0x01,0x8c,0x10,0x0e,0x54,0x00,0x20,0xe0,0xa4,0x00,0xfb,0xb2,0x4e,0xb0,0xfa,0x0e,0x74,0xc7,0x0f,0x3b,0xce,0x4e,0xec,0xf0,0xe1,0x79,0xe4,0xe9,0x58,0x2d,0x3d,0x4a,0x95,0x41,0x89,0x52,0x31,0x59,0x40,0xfa,0x64,0x01,0xe3,0xa0,0xa9,0x5e,0x81,0xe7,0xf4,0x07,0xcc,0x28,0x1e,0x71,0x40,0x7a,0x58,0x01,0xe4,0x3f,0x1c,0x0c,0x4f,0x11,0x0b,0xb3,0x83,0xcc,0x00,0x94,0x20,0x2a,0x03,0xa0,0x1e,0xd0,0x34,0xdf,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x4c,0xf0,0x17,0x4c,0x81,0xa0,0x18,0x18,0x1f,0x39,0x90,0x6c,0x60,0x27,0x70,0xe9,0x3f,0x67,0x03,0x3c,0x80,0x83,0xde,0x81,0x4a,0x84,0xca,0x68,0xb8,0x2b,0xf0,0x3f,0x29,0x20,0xfe,0xa8,0xe0,0x85,0xf3,0x80,0xa5,0xc3,0xb8,0xf4,0xd8,0x11,0x3e,0x40,0x04,0x1b,0x23,0x7d,0x83,0xcd,0x1f,0x60,0x0f,0x00,0x78,0x03,0x7f,0x9f,0xf0,0x01,0xc0,0xc1,0xf1,0x04,0x02,0xa4,0x08,0x1f,0xe0,0xff,0x01,0x0f,0x00,0x70,0x9f,0xfe,0x20,0x10,0xe7,0xe0,0xf2,0x90,0x07,0xd7,0x89,0xdf,0xaa,0xd5,0x7b,0xa0,0xf3,0x8e,0x03,0xdb,0x54,0x00,0x29,0x70,0x3c,0xa2,0x40,0xf6,0xbf,0x87,0xc7,0xea,0x1f,0x12,0x30,0xc2,0x41,0xed,0xab,0x95,0x07,0xc6,0x75,0x02,0x10,0x0c,0x17,0xe0,0x47,0x18,0xff,0x82,0x07,0xc4,0xaf,0x8f,0xd2,0x43,0x80,0x82,0x56,0x01,0x03,0x35,0xfc,0x43,0xc7,0xe3,0x8a,0xc4,0x6a,0xa5,0x50,0x28,0x8d,0x02,0x05,0xa8,0x13,0x8c,0xaa,0xf9,0x1f,0xe2,0x5d,0xc2,0xc3,0x75,0x9f,0xe0,0xa1,0x14,0x08,0x0f,0x60,0x52,0x33,0x59,0xf4,0xf8,0x7e,0x32,0x2d,0x10,0xfc,0x70,0x58,0x89,0x04,0x06,0xd1,0xa0,0x0f,0x8f,0xfa,0x7e,0x3f,0x3e,0xa8,0x7c,0x69,0x1a,0x08,0x04,0xe2,0x80,0x1f,0x19,0xfd,0xf8,0xfe,0x92,0xa0,0x78,0xd0,0x20,0x19,0x8e,0x19,0xa8,0x7a,0xf7,0x51,0xfb,0x03,0xcb,0x11,0xc3,0xaa,0x4d,0x7a,0x76,0x51,0xf8,0x87,0xc8,0x7e,0x34,0x85,0xf0,0xe2,0x24,0x7a,0xe0,0xf9,0xaf,0xd0,0x9e,0x31,0x08,0x04,0x22,0x01,0x57,0x1f,0x9e,0xb8,0x7e,0x90,0x80,0x79,0x61,0x07,0xe2,0x5f,0x2f,0xfd,0xde,0xeb,0xf7,0x4f,0x8c,0x44,0x3a,0x30,0x8f,0xc0,0x7c,0x4f,0xe6,0x1f,0x29,0xda,0xbc,0x41,0xe5,0xc0,0xd7,0xa7,0xcd,0x8a,0x3d,0xdf,0xe8,0x7c,0x60,0x40,0xf2,0x80,0x55,0x97,0xe7,0xee,0x0f,0x0f,0xa9,0xfe,0x30,0x40,0x79,0x7c,0x05,0x43,0xe1,0x6f,0x88,0x7c,0x40,0x02,0x1f,0x18,0x01,0x3c,0x5d,0xe5,0x9f,0x80,0xbf,0xc4,0x1f,0x00,0x05,0x82,0x01,0x50,0x1e,0x28,0xf1,0x00,0x2c,0x90,0x1e,0xca,0xf1,0x00,0x2d,0x52,0x1e,0x0f,0x5c,0x00,0x7d,0xc1,0xed,0x00,0x25,0x08,0xff,0x00,0x46,0x00,0x3f,0xe1,0x7c,0xff,0xf0,0x30,0xc3,0xc0,0x3c,0x02,0x73,0xbc,0x00,0xcb,0xf0,0x18,0x4f,0xf8,0x3e,0x00,0x0c,0x0f,0xf0,}; -const uint8_t* const _I_InfraredSend_128x64[] = {_I_InfraredSend_128x64_0}; - -const uint8_t _I_Mute_25x27_0[] = {0x01,0x00,0x51,0x00,0xfc,0x7f,0xe7,0xf0,0x08,0x24,0x02,0x81,0x00,0x81,0x40,0x30,0x10,0x08,0x08,0x38,0x60,0x20,0x31,0x81,0xc0,0x64,0x38,0x08,0xa4,0x06,0x83,0x40,0x86,0x40,0x70,0x32,0x08,0x20,0x3c,0x63,0xf0,0x60,0x38,0xc0,0xa0,0xa0,0x31,0xc2,0x02,0xc7,0x03,0x48,0x01,0x94,0xc0,0x06,0xc0,0xb3,0x09,0x98,0x6c,0x84,0x68,0x2b,0x21,0x99,0x8e,0xcc,0x86,0x64,0xb3,0x81,0x94,0xc6,0x03,0x06,0x80,0x70,0x20,0x1f,0xcf,0xfd,0xfc,0xce,0x80,}; -const uint8_t* const _I_Mute_25x27[] = {_I_Mute_25x27_0}; - -const uint8_t _I_Mute_hvr_25x27_0[] = {0x01,0x00,0x4a,0x00,0xfc,0x7f,0xe7,0xf0,0x0f,0xe7,0xfe,0xff,0x00,0xff,0x7f,0xff,0xf0,0x00,0x10,0xff,0xe0,0x20,0x21,0xfe,0x40,0x7b,0xf7,0xff,0x5c,0x07,0x7f,0xbf,0xf9,0xc0,0x6f,0xfd,0xff,0xd8,0x3c,0x7c,0x1f,0x90,0x38,0xff,0x7f,0x40,0x31,0xbd,0x82,0xc6,0xff,0xb7,0x01,0x97,0x3c,0x06,0xc0,0xb3,0x09,0x98,0x6c,0x84,0x68,0x2b,0x21,0x99,0x8e,0xcc,0x86,0x64,0xb5,0x01,0x89,0x5c,0xcb,0xe6,0x67,0x30,}; -const uint8_t* const _I_Mute_hvr_25x27[] = {_I_Mute_hvr_25x27_0}; - -const uint8_t _I_Power_25x27_0[] = {0x01,0x00,0x54,0x00,0xfc,0x7f,0xe7,0xf0,0x08,0x24,0x02,0x81,0x00,0x81,0x40,0x30,0x10,0x08,0x08,0x38,0x60,0x30,0x18,0x80,0x0c,0xa7,0x00,0x35,0xc0,0xce,0x60,0x70,0x1e,0x0c,0xe6,0x0f,0x01,0xf0,0xce,0x21,0xd0,0x1b,0x0c,0xe2,0x18,0x03,0x58,0x80,0x0c,0xa0,0x00,0x39,0xf0,0xc0,0x03,0x63,0xc1,0x80,0x88,0xc7,0x03,0x83,0x15,0x8c,0x07,0xfe,0x02,0x18,0x0d,0xf0,0x76,0x44,0x73,0x01,0x94,0x0c,0xa6,0x30,0x18,0x34,0x03,0x81,0x00,0xfe,0x7f,0xef,0xe6,0x74,}; -const uint8_t* const _I_Power_25x27[] = {_I_Power_25x27_0}; - -const uint8_t _I_Power_hvr_25x27_0[] = {0x01,0x00,0x4b,0x00,0xfc,0x7f,0xe7,0xf0,0x0f,0xe7,0xfe,0xff,0x00,0xff,0x7f,0xff,0xf0,0x00,0x10,0xff,0xe0,0x3f,0xff,0x78,0x0c,0xb8,0xe0,0x35,0xbf,0xf1,0xbf,0x90,0x19,0xff,0x1b,0xf1,0x01,0x8f,0xf1,0xfe,0x30,0x1c,0xff,0x1f,0xe6,0x03,0x5f,0x78,0x0c,0xbf,0xe0,0x39,0x8f,0xff,0xc3,0x63,0x3f,0xff,0x08,0xc6,0xff,0x7c,0x15,0x89,0x04,0x7f,0xc0,0x31,0xc1,0x8e,0xc8,0x8e,0x60,0x36,0x2b,0x99,0x7c,0xcc,0xe6,}; -const uint8_t* const _I_Power_hvr_25x27[] = {_I_Power_hvr_25x27_0}; - -const uint8_t _I_Up_25x27_0[] = {0x01,0x00,0x44,0x00,0xfc,0x7f,0xe7,0xf0,0x08,0x24,0x02,0x81,0x00,0x81,0x40,0x30,0x10,0x08,0x08,0x38,0x60,0x20,0x3c,0x88,0x00,0xca,0x70,0x03,0x2b,0xe0,0x0c,0xbf,0xc0,0x32,0xff,0x80,0x87,0x03,0xff,0x81,0xc0,0x78,0x3f,0xf8,0x3c,0x07,0xc3,0xff,0x87,0xc0,0x7e,0x3f,0xf8,0xf8,0x0d,0x06,0xfe,0x03,0x78,0x19,0x4c,0x60,0x30,0x68,0x07,0x02,0x01,0xfc,0xff,0xdf,0xcc,0xe8,}; -const uint8_t* const _I_Up_25x27[] = {_I_Up_25x27_0}; - -const uint8_t _I_Up_hvr_25x27_0[] = {0x01,0x00,0x39,0x00,0xfc,0x7f,0xe7,0xf0,0x0f,0xe7,0xfe,0xff,0x00,0xff,0x7f,0xff,0xf0,0x00,0x10,0xff,0xe0,0x20,0x3c,0xf7,0x80,0xcb,0x8e,0x03,0x2c,0x18,0x0c,0x80,0x26,0x25,0x18,0x08,0xa4,0x7f,0x90,0x11,0x88,0xfe,0x20,0x31,0xf8,0x07,0xc2,0x03,0x0f,0x80,0x78,0x00,0x68,0x37,0xf0,0x1d,0x95,0xcc,0xbe,0x66,0x73,}; -const uint8_t* const _I_Up_hvr_25x27[] = {_I_Up_hvr_25x27_0}; - -const uint8_t _I_Vol_down_25x27_0[] = {0x01,0x00,0x2c,0x00,0xfc,0x7f,0xe7,0xf0,0x08,0x24,0x02,0x81,0x00,0x81,0x40,0x30,0x10,0x08,0x08,0x38,0x60,0x20,0x3f,0x01,0xff,0x07,0xff,0x07,0x01,0xa0,0x5f,0xc0,0x7e,0x03,0x38,0x19,0x4c,0x60,0x30,0x68,0x07,0x02,0x01,0xfc,0xff,0xdf,0xcc,0xe8,}; -const uint8_t* const _I_Vol_down_25x27[] = {_I_Vol_down_25x27_0}; - -const uint8_t _I_Vol_down_hvr_25x27_0[] = {0x01,0x00,0x23,0x00,0xfc,0x7f,0xe7,0xf0,0x0f,0xe7,0xfe,0xff,0x00,0xff,0x7f,0xff,0xf0,0x00,0x10,0xff,0xe0,0x20,0x3f,0x01,0xf8,0xb4,0x7f,0x00,0x34,0x0b,0xf8,0x0f,0xc0,0x6e,0x57,0x32,0xf9,0x99,0xcc,}; -const uint8_t* const _I_Vol_down_hvr_25x27[] = {_I_Vol_down_hvr_25x27_0}; - -const uint8_t _I_Vol_up_25x27_0[] = {0x01,0x00,0x2f,0x00,0xfc,0x7f,0xe7,0xf0,0x08,0x24,0x02,0x81,0x00,0x81,0x40,0x30,0x10,0x08,0x08,0x38,0x60,0x20,0x38,0x88,0x00,0xfc,0x06,0xbc,0x1f,0xfc,0x1c,0x06,0x81,0x7f,0x01,0xc1,0x0e,0xa0,0x65,0x31,0x80,0xc1,0xa0,0x1c,0x08,0x07,0xf3,0xff,0x7f,0x33,0xa0,}; -const uint8_t* const _I_Vol_up_25x27[] = {_I_Vol_up_25x27_0}; - -const uint8_t _I_Vol_up_hvr_25x27_0[] = {0x01,0x00,0x28,0x00,0xfc,0x7f,0xe7,0xf0,0x0f,0xe7,0xfe,0xff,0x00,0xff,0x7f,0xff,0xf0,0x00,0x10,0xff,0xe0,0x20,0x38,0xf7,0x80,0xfc,0x06,0xa2,0xd1,0xfc,0x00,0xd0,0x2f,0xe0,0x38,0x21,0xd8,0x0c,0x8a,0xe6,0x5f,0x33,0x39,0x80,}; -const uint8_t* const _I_Vol_up_hvr_25x27[] = {_I_Vol_up_hvr_25x27_0}; - -const uint8_t _I_DoorLeft_70x55_0[] = {0x01,0x00,0x19,0x01,0x00,0x2c,0x32,0x01,0x03,0x04,0x2c,0x18,0x10,0xf0,0x40,0x47,0x82,0x06,0x81,0x03,0xff,0x80,0x08,0x1a,0x20,0x82,0x15,0x28,0x21,0x87,0x82,0x08,0x6f,0xc0,0xb1,0xe6,0x10,0x10,0x8b,0x46,0x20,0x43,0x55,0x8f,0x82,0x10,0x32,0x73,0x0a,0x09,0x89,0x6c,0x1e,0x09,0x00,0x18,0x60,0xf0,0x0c,0x84,0x93,0x82,0x03,0x18,0x0c,0x02,0x1d,0x00,0x90,0x52,0x70,0x50,0x1e,0x00,0x58,0x63,0x90,0x0a,0x06,0x4a,0x09,0x03,0xb0,0x02,0x06,0x70,0x62,0x49,0xf8,0x0c,0x66,0x3f,0xf0,0x41,0x63,0x04,0x43,0x00,0x99,0x60,0x00,0x85,0xc8,0x06,0x14,0xd0,0x80,0x3f,0xc8,0x0d,0xb8,0x10,0x70,0xf8,0x34,0x13,0x03,0x39,0x04,0x1c,0x42,0x19,0xf8,0xa0,0xc2,0x01,0x07,0xef,0x02,0x8c,0x80,0x10,0x9d,0x00,0x43,0xec,0x00,0xa3,0x10,0x04,0x25,0xce,0x19,0xfc,0x88,0x82,0x12,0x0c,0x35,0x10,0x42,0x4c,0xa1,0x90,0x3f,0xc0,0x21,0x22,0x39,0x82,0xc8,0x88,0xd2,0x11,0xf0,0x01,0x88,0xd5,0x18,0xe2,0x08,0x68,0x10,0x0c,0xa8,0x00,0x83,0x81,0xcc,0xd5,0xc3,0x80,0x84,0x82,0x0e,0xcc,0xc0,0x15,0x79,0x02,0x0b,0x98,0xf8,0x11,0x88,0x82,0x0f,0x31,0x19,0x02,0x08,0x2c,0x9f,0x6a,0x1d,0x20,0x41,0x31,0x4c,0x10,0x8d,0x73,0x04,0x23,0xa4,0xc4,0x6c,0xde,0x20,0x42,0xcc,0x01,0x07,0x07,0xff,0x80,0x06,0x3e,0x08,0x38,0x70,0x20,0xa1,0xe0,0x83,0x8e,0x01,0x0c,0xf0,0x73,0x80,0x43,0x70,0x05,0x08,0x00,0x2c,0x04,0xc4,0x46,0x53,0x09,0x98,0x24,0x80,0x65,0x80,0xb0,0xd9,0x84,0x65,0x32,0x06,0x17,0x0f,0x98,0x23,0x63,0xe1,0x88,0xc4,0x08,0x5f,0xc1,0x30,0x9d,0x84,0x4e,0x66,0x94,0x11,0x98,0x75,0x26,0x00,}; -const uint8_t* const _I_DoorLeft_70x55[] = {_I_DoorLeft_70x55_0}; - -const uint8_t _I_DoorLocked_10x56_0[] = {0x01,0x00,0x4e,0x00,0x86,0x40,0x25,0xb0,0x0b,0x6c,0x03,0x9b,0x00,0xc6,0xc0,0x65,0x90,0x10,0x3a,0xc3,0x20,0x31,0xc8,0x04,0xe2,0x01,0x70,0x80,0x78,0x20,0x1c,0x48,0x07,0x22,0x01,0xd0,0x00,0xf0,0x44,0x68,0x90,0x09,0x04,0x02,0x21,0x00,0x84,0x40,0x25,0x80,0x12,0x1e,0x88,0x14,0xc0,0x2e,0x0d,0x11,0xca,0xf8,0x60,0x1c,0x38,0x07,0x1a,0x05,0xcc,0x80,0x72,0x60,0x5c,0x38,0x10,0x1c,0xf9,0x10,0x2e,0x00,0x05,0x60,0x00,0x11,}; -const uint8_t* const _I_DoorLocked_10x56[] = {_I_DoorLocked_10x56_0}; - -const uint8_t _I_DoorRight_70x55_0[] = {0x01,0x00,0x16,0x01,0x81,0xcc,0x01,0x0f,0x60,0x04,0x3f,0x00,0x10,0xf8,0x08,0x0c,0x02,0x05,0x01,0x84,0x02,0x06,0x26,0x0a,0x10,0x8a,0xcc,0xe0,0x1d,0x68,0xe0,0x18,0xab,0xd0,0x0b,0x18,0x10,0x46,0xe6,0x16,0x1e,0x18,0x10,0x46,0xe4,0x28,0x2c,0x98,0x14,0x68,0x00,0x21,0x1d,0x10,0x8c,0x40,0x02,0x0e,0x10,0xa1,0x08,0xc8,0x40,0x42,0x62,0x11,0x94,0x03,0xfd,0xff,0x00,0x0c,0xff,0x0c,0x08,0x28,0x60,0xe4,0xc0,0x85,0x00,0x83,0x00,0x87,0xf1,0x00,0x8c,0x02,0x0b,0x07,0x24,0x84,0xff,0x04,0xc7,0x80,0xa0,0xe4,0xa0,0x81,0x41,0x04,0x17,0x02,0x41,0x49,0x81,0x0e,0x10,0xb2,0xa0,0x82,0x0e,0x9f,0xfc,0x0a,0x62,0xf2,0xc0,0x03,0x92,0xf0,0x08,0x2d,0x78,0x20,0xff,0x02,0x01,0x08,0xae,0x60,0x64,0x38,0x0d,0xb0,0x8d,0x08,0x82,0x11,0x58,0xc4,0x13,0xc0,0x35,0x68,0x62,0x68,0x81,0x09,0x08,0x84,0x40,0x81,0x0d,0x18,0x69,0x10,0x47,0x44,0x66,0x5f,0x21,0xa9,0x29,0x94,0x10,0x2f,0x23,0x53,0x14,0x60,0x42,0x3c,0x08,0xfc,0x02,0x2c,0x62,0x23,0x58,0xd0,0x22,0x00,0x83,0x3e,0x98,0x44,0x43,0x46,0x22,0x30,0x89,0xce,0x01,0x0f,0x70,0x04,0x3f,0x81,0x8a,0x3c,0x21,0xaa,0x70,0x1a,0xe3,0x44,0x1a,0xa6,0x01,0xd2,0x38,0x90,0x8a,0x40,0x20,0xe5,0x96,0x80,0x43,0x81,0x06,0x6b,0x28,0x07,0xf3,0xfe,0x00,0x19,0xf9,0x34,0xc1,0x08,0x8f,0x20,0xf1,0x3e,0x16,0x00,0xa8,0x19,0x00,0x10,0x76,0x03,0xe2,0x3e,0x90,0x45,0x38,0x01,0x42,0x05,0x88,0x44,0x67,0x15,0x70,0x41,0x38,0x04,0x10,0x24,0x03,0x00,0x10,0x20,0x4a,0x46,0xe9,0x46,0xe1,0x04,0x50,0x66,0x40,0x85,0x19,0x98,0x00,0xc0,}; -const uint8_t* const _I_DoorRight_70x55[] = {_I_DoorRight_70x55_0}; - -const uint8_t _I_PassportBottom_128x17_0[] = {0x01,0x00,0x5e,0x00,0x96,0x01,0x97,0xe1,0xff,0x00,0x2e,0x3e,0x68,0x0f,0x5a,0xc5,0x54,0x00,0xb9,0x50,0xfb,0x6a,0x35,0x40,0x05,0xcd,0x4e,0x03,0xfd,0x30,0x0f,0xf8,0x7f,0xa0,0x81,0xfe,0xf9,0x1b,0xfb,0xf3,0x01,0x47,0x66,0x02,0x1b,0x03,0x07,0xe7,0x02,0x0b,0x02,0x07,0xe5,0x82,0x0b,0xf2,0x1c,0xb0,0x01,0x67,0xf0,0x5f,0xd0,0x3f,0x23,0xf0,0x9b,0xc9,0xe5,0x80,0x03,0xd5,0xc0,0x00,0x86,0x01,0xf3,0xe6,0x1e,0x58,0x00,0x36,0xa8,0x06,0xac,0x04,0x30,0x6c,0x30,0xee,0x60,0x1f,0xe0,0x10,0xff,0x0d,0xfb,0x00,}; -const uint8_t* const _I_PassportBottom_128x17[] = {_I_PassportBottom_128x17_0}; - -const uint8_t _I_PassportLeft_6x47_0[] = {0x01,0x00,0x1c,0x00,0x9e,0x40,0xa3,0x32,0x59,0x2c,0x66,0x03,0x01,0x82,0xc2,0x62,0x32,0x50,0x16,0xc8,0x60,0x30,0x28,0x24,0x32,0x39,0x3c,0x9e,0x4d,0x25,0x80,0x1a,}; -const uint8_t* const _I_PassportLeft_6x47[] = {_I_PassportLeft_6x47_0}; - -const uint8_t _I_WarningDolphin_45x42_0[] = {0x01,0x00,0xc6,0x00,0x00,0x1c,0x22,0x04,0x05,0x7f,0xfc,0x1e,0x20,0x05,0x1e,0x04,0x02,0x30,0x05,0x29,0x84,0x02,0xc1,0x20,0x02,0x8c,0x22,0x01,0x80,0x02,0x94,0x10,0x32,0x30,0x10,0x10,0x87,0xca,0x84,0x03,0x10,0x42,0x81,0x48,0x28,0x38,0x08,0x04,0x3e,0x01,0x84,0x83,0xe0,0x30,0x11,0x08,0x05,0xa2,0x11,0x40,0xa0,0x4b,0xc6,0xc5,0x40,0xd0,0x56,0xe0,0x10,0x60,0x29,0x54,0xf0,0x10,0x18,0xf0,0x14,0x6b,0xf6,0x0c,0x04,0x3e,0x40,0x05,0x12,0x80,0xc1,0xe4,0x01,0xd2,0xf8,0x40,0xe4,0x18,0x09,0xf4,0x03,0xf1,0x01,0x90,0x40,0x28,0x30,0x0f,0xe4,0x00,0x16,0x24,0x11,0xbf,0x01,0x44,0xee,0x53,0xf0,0x29,0xf0,0x3e,0x02,0x91,0x3b,0x8c,0xc3,0x81,0x13,0x90,0x48,0x20,0x3f,0xf9,0xfc,0x42,0x60,0x05,0x10,0x98,0x81,0x56,0x11,0x38,0x02,0x9c,0x1a,0x31,0x1e,0x02,0x8f,0x02,0x03,0x1c,0x90,0xc0,0x7c,0x02,0xf1,0xce,0x02,0x07,0x01,0x1f,0x80,0x63,0xa8,0x08,0x71,0x3c,0x8e,0x39,0x24,0x40,0x51,0xc7,0x81,0x53,0x0f,0x3c,0x02,0x9d,0x1e,0x38,0x29,0x10,0x29,0x17,0xc8,0x0a,0x32,0x3a,0x00,0x14,0x4b,0xa2,0x05,0x58,0x98,0x15,0x22,0x20,0x54,0x84,0x81,0x50,}; -const uint8_t* const _I_WarningDolphin_45x42[] = {_I_WarningDolphin_45x42_0}; - -const uint8_t _I_KeyBackspaceSelected_16x9_0[] = {0x00,0xFE,0x7F,0xFF,0xFF,0xEF,0xFF,0xE7,0xFF,0x03,0xC0,0xE7,0xFF,0xEF,0xFF,0xFF,0xFF,0xFE,0x7F,}; -const uint8_t* const _I_KeyBackspaceSelected_16x9[] = {_I_KeyBackspaceSelected_16x9_0}; - -const uint8_t _I_KeyBackspace_16x9_0[] = {0x00,0xFE,0x7F,0x01,0x80,0x11,0x80,0x19,0x80,0xFD,0xBF,0x19,0x80,0x11,0x80,0x01,0x80,0xFE,0x7F,}; -const uint8_t* const _I_KeyBackspace_16x9[] = {_I_KeyBackspace_16x9_0}; - -const uint8_t _I_KeySaveSelected_24x11_0[] = {0x01,0x00,0x1a,0x00,0xff,0x7f,0xc0,0x0d,0xcf,0xb4,0x7c,0xee,0xf6,0xbf,0x6d,0xbe,0xd7,0xe1,0xaf,0xda,0xff,0xbe,0x7c,0xc7,0xcc,0x28,0xa1,0xd1,0xbf,0x80,}; -const uint8_t* const _I_KeySaveSelected_24x11[] = {_I_KeySaveSelected_24x11_0}; - -const uint8_t _I_KeySave_24x11_0[] = {0x01,0x00,0x1e,0x00,0xff,0x7f,0xff,0xf0,0x18,0x06,0x00,0x04,0x53,0x1c,0xbe,0x33,0x13,0x94,0xc9,0x64,0x72,0x99,0xed,0x0e,0x53,0x05,0x19,0xb3,0xe3,0x02,0x8a,0x1d,0x1b,0xf8,}; -const uint8_t* const _I_KeySave_24x11[] = {_I_KeySave_24x11_0}; - -const uint8_t _A_125khz_14_0[] = {0x00,0x80,0x07,0x00,0x08,0x00,0x13,0x00,0x24,0x0E,0x28,0x71,0x28,0x85,0x21,0x01,0x02,0x62,0x02,0x92,0x02,0x92,0x02,0x64,0x02,0x04,0x01,0xF8,0x00,}; -const uint8_t _A_125khz_14_1[] = {0x00,0x80,0x07,0x00,0x08,0x00,0x10,0x00,0x20,0x0E,0x20,0x71,0x20,0x85,0x21,0x01,0x02,0x62,0x02,0x92,0x02,0x92,0x02,0x64,0x02,0x04,0x01,0xF8,0x00,}; -const uint8_t _A_125khz_14_2[] = {0x01,0x00,0x17,0x00,0x00,0x3c,0x3a,0x01,0x71,0x80,0x61,0x60,0x30,0x18,0x15,0x8a,0x05,0x92,0x00,0x95,0x92,0x05,0x04,0x80,0xfe,0x20,0x00,}; -const uint8_t _A_125khz_14_3[] = {0x01,0x00,0x1a,0x00,0x00,0x24,0x0e,0x01,0x04,0x87,0x42,0x2e,0x30,0x8c,0x2c,0x06,0x03,0x02,0xb1,0x40,0xb2,0x40,0x12,0xb2,0x40,0xa0,0x90,0x1f,0xc4,0x00,}; -const uint8_t* const _A_125khz_14[] = {_A_125khz_14_0,_A_125khz_14_1,_A_125khz_14_2,_A_125khz_14_3}; - -const uint8_t _A_BadUsb_14_0[] = {0x00,0xFF,0x1F,0x01,0x10,0x01,0x10,0xF1,0x11,0xF9,0x13,0xE9,0x12,0x49,0x12,0xF9,0x13,0xF1,0x11,0x51,0x11,0x01,0x10,0xFF,0x1F,0xFE,0x0F,0xFE,0x0F,}; -const uint8_t _A_BadUsb_14_1[] = {0x00,0x01,0x10,0x01,0x10,0xE1,0x13,0xFD,0x10,0xF9,0x13,0x01,0x17,0xF9,0x13,0x3D,0x10,0xF1,0x11,0x01,0x10,0xFF,0x1F,0x06,0x0C,0xFE,0x0F,0xFE,0x0F,}; -const uint8_t _A_BadUsb_14_2[] = {0x00,0x01,0x10,0xF1,0x11,0xF9,0x13,0x59,0x13,0xF9,0x13,0xE9,0x12,0x19,0x13,0xF1,0x11,0x01,0x10,0xFF,0x1F,0x04,0x04,0xB6,0x0D,0xFE,0x0F,0xFE,0x0F,}; -const uint8_t _A_BadUsb_14_3[] = {0x00,0xF1,0x11,0xF9,0x13,0x59,0x13,0xF9,0x13,0xE9,0x12,0x19,0x13,0xF1,0x11,0x01,0x10,0xFF,0x1F,0x04,0x04,0xB4,0x05,0x06,0x0C,0xFE,0x0F,0xFE,0x0F,}; -const uint8_t _A_BadUsb_14_4[] = {0x00,0xF9,0x13,0xE9,0x12,0x19,0x13,0xF1,0x11,0x01,0x10,0xFF,0x1F,0x04,0x04,0xB4,0x05,0x04,0x04,0xFC,0x07,0xFC,0x07,0xFE,0x0F,0xFE,0x0F,0x02,0x08,}; -const uint8_t _A_BadUsb_14_5[] = {0x00,0xF1,0x11,0x01,0x10,0xFF,0x1F,0x04,0x04,0xB4,0x05,0x04,0x04,0xFC,0x07,0xFC,0x07,0x04,0x04,0xFC,0x07,0x00,0x00,0xFE,0x0F,0xFE,0x0F,0x02,0x08,}; -const uint8_t _A_BadUsb_14_6[] = {0x00,0xF9,0x13,0xE9,0x12,0x19,0x13,0xF1,0x11,0x01,0x10,0xFF,0x1F,0x04,0x04,0xB4,0x05,0x04,0x04,0xFC,0x07,0xFC,0x07,0xFE,0x0F,0xFE,0x0F,0x02,0x08,}; -const uint8_t _A_BadUsb_14_7[] = {0x00,0xF1,0x11,0xF9,0x13,0x59,0x13,0xF9,0x13,0xE9,0x12,0x19,0x13,0xF1,0x11,0x01,0x10,0xFF,0x1F,0x04,0x04,0xB4,0x05,0x06,0x0C,0xFE,0x0F,0xFE,0x0F,}; -const uint8_t _A_BadUsb_14_8[] = {0x00,0x01,0x10,0xF1,0x11,0xF9,0x13,0x59,0x13,0xF9,0x13,0xE9,0x12,0x19,0x13,0xF1,0x11,0x01,0x10,0xFF,0x1F,0x04,0x04,0xB6,0x0D,0xFE,0x0F,0xFE,0x0F,}; -const uint8_t _A_BadUsb_14_9[] = {0x00,0x01,0x10,0x01,0x10,0xE1,0x13,0xFD,0x10,0xF9,0x13,0x01,0x17,0xF9,0x13,0x3D,0x10,0xF1,0x11,0x01,0x10,0xFF,0x1F,0x06,0x0C,0xFE,0x0F,0xFE,0x0F,}; -const uint8_t _A_BadUsb_14_10[] = {0x00,0xFF,0x1F,0x01,0x10,0x01,0x10,0xF1,0x11,0xF9,0x13,0xE9,0x12,0x49,0x12,0xF9,0x13,0xF1,0x11,0x51,0x11,0x01,0x10,0xFF,0x1F,0xFE,0x0F,0xFE,0x0F,}; -const uint8_t* const _A_BadUsb_14[] = {_A_BadUsb_14_0,_A_BadUsb_14_1,_A_BadUsb_14_2,_A_BadUsb_14_3,_A_BadUsb_14_4,_A_BadUsb_14_5,_A_BadUsb_14_6,_A_BadUsb_14_7,_A_BadUsb_14_8,_A_BadUsb_14_9,_A_BadUsb_14_10}; - -const uint8_t _A_Bluetooth_14_0[] = {0x00,0x10,0x00,0x30,0x00,0x51,0x08,0x92,0x10,0x94,0x24,0x58,0x28,0x30,0x29,0x30,0x29,0x58,0x28,0x94,0x24,0x92,0x10,0x51,0x08,0x30,0x00,0x10,0x00,}; -const uint8_t _A_Bluetooth_14_1[] = {0x01,0x00,0x1a,0x00,0x88,0x40,0x26,0x10,0x0a,0x8c,0x23,0x25,0x10,0xca,0x49,0x2b,0x12,0x89,0x80,0x04,0x80,0xa2,0x09,0x10,0x68,0x84,0x44,0x2a,0x21,0x91,}; -const uint8_t _A_Bluetooth_14_2[] = {0x01,0x00,0x1a,0x00,0x88,0x40,0x26,0x10,0x0a,0x8c,0x23,0x25,0x10,0xca,0x48,0x2b,0x12,0x09,0x80,0x04,0x80,0xa2,0x09,0x10,0x68,0x84,0x44,0x2a,0x21,0x91,}; -const uint8_t _A_Bluetooth_14_3[] = {0x01,0x00,0x1a,0x00,0x88,0x40,0x26,0x10,0x0a,0x8c,0x03,0x25,0x00,0xca,0x40,0x2b,0x00,0x92,0x00,0x88,0x14,0x41,0x22,0x0d,0x10,0x88,0x82,0x44,0x32,0x20,}; -const uint8_t _A_Bluetooth_14_4[] = {0x00,0x10,0x00,0x30,0x00,0x51,0x00,0x92,0x00,0x94,0x00,0x58,0x00,0x30,0x01,0x30,0x01,0x58,0x00,0x94,0x00,0x92,0x00,0x51,0x00,0x30,0x00,0x10,0x00,}; -const uint8_t _A_Bluetooth_14_5[] = {0x00,0x10,0x00,0x30,0x00,0x51,0x00,0x92,0x00,0x94,0x04,0x58,0x08,0x30,0x09,0x30,0x09,0x58,0x08,0x94,0x04,0x92,0x00,0x51,0x00,0x30,0x00,0x10,0x00,}; -const uint8_t* const _A_Bluetooth_14[] = {_A_Bluetooth_14_0,_A_Bluetooth_14_1,_A_Bluetooth_14_2,_A_Bluetooth_14_3,_A_Bluetooth_14_4,_A_Bluetooth_14_5}; - -const uint8_t _A_Debug_14_0[] = {0x00,0x20,0x01,0xC1,0x20,0x22,0x11,0x24,0x09,0xD9,0x26,0x16,0x1A,0xD8,0x06,0xD8,0x06,0xD6,0x1A,0x19,0x26,0xE4,0x09,0xC2,0x10,0x01,0x20,0x00,0x00,}; -const uint8_t _A_Debug_14_1[] = {0x00,0x20,0x01,0xC0,0x00,0x22,0x11,0x25,0x29,0xD8,0x06,0x16,0x1A,0xD9,0x26,0xD8,0x06,0xD4,0x0A,0x12,0x12,0xEA,0x15,0xC5,0x28,0x02,0x10,0x02,0x10,}; -const uint8_t _A_Debug_14_2[] = {0x00,0x20,0x01,0xC0,0x00,0x20,0x01,0x24,0x09,0xDA,0x16,0x11,0x22,0xDC,0x0E,0xDA,0x16,0xD9,0x26,0x14,0x0A,0xF2,0x13,0xD1,0x22,0x08,0x04,0x06,0x18,}; -const uint8_t _A_Debug_14_3[] = {0x00,0x22,0x11,0xC4,0x08,0x24,0x09,0x25,0x29,0xD9,0x26,0x12,0x12,0xDC,0x0E,0xD8,0x06,0xD8,0x06,0x14,0x0A,0xF4,0x0B,0xD2,0x12,0x19,0x26,0x06,0x18,}; -const uint8_t* const _A_Debug_14[] = {_A_Debug_14_0,_A_Debug_14_1,_A_Debug_14_2,_A_Debug_14_3}; - -const uint8_t _A_FileManager_14_0[] = {0x00,0xFC,0x07,0x04,0x04,0xF4,0x05,0x04,0x04,0xF7,0x05,0x05,0x04,0xF5,0x3F,0x15,0x20,0x0D,0x20,0x0D,0x10,0x05,0x10,0x05,0x08,0x03,0x08,0xFE,0x07,}; -const uint8_t _A_FileManager_14_1[] = {0x00,0x00,0x00,0x00,0x00,0xFC,0x07,0x04,0x04,0xF7,0x05,0x05,0x04,0xF5,0x3F,0x15,0x20,0x0D,0x20,0x0D,0x10,0x05,0x10,0x05,0x08,0x03,0x08,0xFE,0x07,}; -const uint8_t _A_FileManager_14_2[] = {0x01,0x00,0x17,0x00,0x00,0x3f,0xfe,0x0f,0x05,0x82,0x7d,0x67,0xf1,0x59,0x04,0x34,0x02,0x31,0x08,0x28,0x04,0x61,0x10,0x38,0x47,0xfa,0x0e,}; -const uint8_t _A_FileManager_14_3[] = {0x01,0x00,0x17,0x00,0x00,0x3c,0x3e,0x01,0x11,0x80,0x7f,0x67,0xf1,0x59,0x04,0x34,0x02,0x31,0x08,0x28,0x04,0x61,0x10,0x38,0x47,0xfa,0x0e,}; -const uint8_t _A_FileManager_14_4[] = {0x01,0x00,0x17,0x00,0x00,0x3c,0x3e,0x01,0x11,0x80,0x7c,0x67,0xf1,0x19,0x04,0x34,0x02,0x31,0x08,0x28,0x04,0x61,0x10,0x38,0x47,0xfa,0x0e,}; -const uint8_t _A_FileManager_14_5[] = {0x01,0x00,0x0f,0x00,0x00,0x3c,0x3e,0x01,0x11,0x80,0x7f,0xe0,0xf0,0x18,0x40,0x06,0x7f,0xd0,0x70,}; -const uint8_t _A_FileManager_14_6[] = {0x01,0x00,0x17,0x00,0x00,0x3c,0x3e,0x01,0x11,0x80,0x7c,0x67,0xf1,0x19,0x04,0x34,0x02,0x31,0x08,0x28,0x04,0x61,0x10,0x38,0x47,0xfa,0x0e,}; -const uint8_t _A_FileManager_14_7[] = {0x01,0x00,0x17,0x00,0x00,0x3c,0x3e,0x01,0x11,0x80,0x7f,0x67,0xf1,0x59,0x04,0x34,0x02,0x31,0x08,0x28,0x04,0x61,0x10,0x38,0x47,0xfa,0x0e,}; -const uint8_t _A_FileManager_14_8[] = {0x01,0x00,0x17,0x00,0x00,0x3f,0xfe,0x0f,0x05,0x82,0x7d,0x67,0xf1,0x59,0x04,0x34,0x02,0x31,0x08,0x28,0x04,0x61,0x10,0x38,0x47,0xfa,0x0e,}; -const uint8_t _A_FileManager_14_9[] = {0x00,0x00,0x00,0x00,0x00,0xFC,0x07,0x04,0x04,0xF7,0x05,0x05,0x04,0xF5,0x3F,0x15,0x20,0x0D,0x20,0x0D,0x10,0x05,0x10,0x05,0x08,0x03,0x08,0xFE,0x07,}; -const uint8_t* const _A_FileManager_14[] = {_A_FileManager_14_0,_A_FileManager_14_1,_A_FileManager_14_2,_A_FileManager_14_3,_A_FileManager_14_4,_A_FileManager_14_5,_A_FileManager_14_6,_A_FileManager_14_7,_A_FileManager_14_8,_A_FileManager_14_9}; - -const uint8_t _A_GPIO_14_0[] = {0x01,0x00,0x15,0x00,0xa2,0x41,0x00,0x23,0xee,0x87,0x00,0x54,0x16,0x60,0x11,0x09,0x8f,0xfe,0x3f,0x11,0x88,0xd5,0x62,0xa0,0x31,}; -const uint8_t _A_GPIO_14_1[] = {0x01,0x00,0x12,0x00,0xa2,0x41,0x00,0x27,0xee,0x87,0x00,0x54,0x1a,0xbf,0xf8,0xfc,0x46,0x23,0x55,0x8a,0x80,0xc4,}; -const uint8_t _A_GPIO_14_2[] = {0x01,0x00,0x12,0x00,0xa2,0x41,0x00,0x2f,0xee,0x87,0x00,0x54,0x12,0x3f,0xf8,0xfd,0x56,0x2a,0x01,0x18,0x8c,0x44,}; -const uint8_t _A_GPIO_14_3[] = {0x01,0x00,0x11,0x00,0xa2,0x41,0x00,0x37,0xee,0x87,0x00,0x4f,0xff,0x1f,0xaa,0xc5,0x40,0x23,0x11,0x88,0x80,}; -const uint8_t _A_GPIO_14_4[] = {0x01,0x00,0x0d,0x00,0xa2,0x41,0x00,0x3f,0xee,0x87,0x7f,0xe3,0xe0,0x13,0x88,0xc4,0x40,}; -const uint8_t _A_GPIO_14_5[] = {0x01,0x00,0x11,0x00,0xa2,0x41,0x00,0x3b,0xee,0x87,0x00,0x47,0xff,0x1f,0x00,0x8d,0x56,0x2b,0x11,0x88,0x80,}; -const uint8_t _A_GPIO_14_6[] = {0x01,0x00,0x11,0x00,0xa2,0x41,0x00,0x33,0xee,0x87,0x00,0x57,0xff,0x1f,0xaa,0xc5,0x40,0x23,0x11,0x88,0x80,}; -const uint8_t _A_GPIO_14_7[] = {0x01,0x00,0x12,0x00,0xa2,0x41,0x00,0x2b,0xee,0x87,0x00,0x54,0x16,0x7f,0xf8,0xfc,0x46,0x23,0x55,0x8a,0x80,0xc4,}; -const uint8_t* const _A_GPIO_14[] = {_A_GPIO_14_0,_A_GPIO_14_1,_A_GPIO_14_2,_A_GPIO_14_3,_A_GPIO_14_4,_A_GPIO_14_5,_A_GPIO_14_6,_A_GPIO_14_7}; - -const uint8_t _A_Games_14_0[] = {0x01,0x00,0x17,0x00,0x00,0x3c,0x62,0x0d,0xfc,0x87,0xc0,0xa2,0x10,0x99,0x24,0x76,0x54,0x03,0x1f,0x0c,0x86,0x23,0x22,0x02,0x8c,0x1a,0x30,}; -const uint8_t _A_Games_14_1[] = {0x01,0x00,0x1a,0x00,0x00,0x2c,0x62,0x0d,0xfc,0x87,0xc0,0xa2,0x10,0x99,0x24,0x76,0x54,0x03,0x1f,0x0c,0x87,0x23,0x22,0x02,0x8c,0x5a,0x35,0x01,0x90,0x00,}; -const uint8_t _A_Games_14_2[] = {0x00,0x00,0x00,0x00,0x00,0x18,0x06,0xFC,0x0F,0x02,0x10,0x09,0x24,0x1D,0x2A,0x09,0x24,0xE1,0x21,0x91,0x22,0x89,0x24,0x16,0x1A,0x11,0x22,0x01,0x20,}; -const uint8_t _A_Games_14_3[] = {0x00,0x00,0x00,0x18,0x06,0xFC,0x0F,0x02,0x10,0x09,0x24,0x1D,0x2A,0x09,0x24,0xE1,0x21,0x91,0x22,0x89,0x24,0x96,0x1A,0x11,0x22,0x11,0x22,0x01,0x20,}; -const uint8_t _A_Games_14_4[] = {0x00,0x18,0x06,0xFC,0x0F,0x02,0x10,0x09,0x24,0x1D,0x2A,0x09,0x24,0xE1,0x21,0x91,0x22,0x89,0x24,0x16,0x1A,0x11,0x22,0x01,0x20,0x00,0x00,0x00,0x00,}; -const uint8_t _A_Games_14_5[] = {0x00,0x84,0x08,0x18,0x06,0xFD,0x2F,0x02,0x10,0x09,0x24,0x1D,0x2A,0x09,0x24,0xE1,0x21,0x91,0x22,0x09,0x24,0x16,0x1A,0x01,0x20,0x00,0x00,0x00,0x00,}; -const uint8_t _A_Games_14_6[] = {0x00,0x84,0x08,0x84,0x08,0x19,0x26,0xFD,0x2F,0x02,0x10,0x09,0x24,0x1D,0x2A,0x09,0x24,0xE1,0x21,0x11,0x22,0x09,0x24,0x06,0x18,0x00,0x00,0x00,0x00,}; -const uint8_t _A_Games_14_7[] = {0x00,0x84,0x08,0x84,0x08,0x85,0x28,0x19,0x26,0xFD,0x2F,0x02,0x10,0x09,0x24,0x1D,0x2A,0x09,0x24,0xE1,0x21,0x11,0x22,0x09,0x24,0x06,0x18,0x00,0x00,}; -const uint8_t _A_Games_14_8[] = {0x00,0x00,0x00,0x00,0x00,0x84,0x08,0x84,0x08,0x19,0x26,0xFD,0x2F,0x02,0x10,0x09,0x24,0x1D,0x2A,0x09,0x24,0xE1,0x21,0x11,0x22,0x09,0x24,0x06,0x18,}; -const uint8_t* const _A_Games_14[] = {_A_Games_14_0,_A_Games_14_1,_A_Games_14_2,_A_Games_14_3,_A_Games_14_4,_A_Games_14_5,_A_Games_14_6,_A_Games_14_7,_A_Games_14_8}; - -const uint8_t _A_Infrared_14_0[] = {0x01,0x00,0x1a,0x00,0xfc,0x41,0xe0,0xd1,0x88,0x0c,0x83,0xe1,0x03,0x84,0x41,0x01,0x63,0xe0,0x80,0x84,0x4c,0x0a,0x20,0xd1,0x0a,0x88,0x04,0x7f,0xf3,0xf0,}; -const uint8_t _A_Infrared_14_1[] = {0x01,0x00,0x17,0x00,0xfc,0x41,0xe0,0xd1,0x88,0x0c,0x83,0xe1,0x03,0x84,0x41,0x02,0x2f,0xe0,0x80,0x83,0x44,0x2a,0x20,0x11,0xff,0xcf,0xc0,}; -const uint8_t _A_Infrared_14_2[] = {0x01,0x00,0x13,0x00,0xfc,0x41,0xe0,0xd1,0x88,0x0c,0x80,0x23,0x7e,0x08,0x0f,0xc2,0x06,0x15,0x10,0x08,0xff,0xe7,0xe0,}; -const uint8_t _A_Infrared_14_3[] = {0x01,0x00,0x0e,0x00,0x00,0x78,0x00,0x7c,0x10,0x1f,0x84,0x0f,0xf1,0x07,0x00,0x8f,0xfe,0x7e,}; -const uint8_t _A_Infrared_14_4[] = {0x01,0x00,0x0e,0x00,0x00,0x5f,0x82,0x02,0x05,0x5f,0x84,0x0f,0xf1,0x07,0x00,0x8f,0xfe,0x7e,}; -const uint8_t _A_Infrared_14_5[] = {0x01,0x00,0x15,0x00,0x00,0x2f,0xc2,0x07,0x08,0x82,0x01,0x47,0xc1,0x01,0x05,0x98,0x14,0x41,0xa3,0xf8,0x83,0x80,0x47,0xff,0x3f,}; -const uint8_t* const _A_Infrared_14[] = {_A_Infrared_14_0,_A_Infrared_14_1,_A_Infrared_14_2,_A_Infrared_14_3,_A_Infrared_14_4,_A_Infrared_14_5}; - -const uint8_t _A_NFC_14_0[] = {0x00,0x00,0x08,0x00,0x10,0x00,0x12,0x00,0x22,0x42,0x24,0x87,0x24,0x8D,0x24,0x99,0x24,0xF1,0x24,0x62,0x24,0x00,0x22,0x00,0x12,0x00,0x10,0x00,0x08,}; -const uint8_t _A_NFC_14_1[] = {0x01,0x00,0x1a,0x00,0x80,0x42,0x20,0x11,0x00,0x09,0x48,0x28,0x52,0x0c,0x3c,0x83,0x1b,0x20,0xcc,0xc8,0x3e,0x32,0x0b,0x14,0x80,0x1a,0x21,0x34,0x84,0x00,}; -const uint8_t _A_NFC_14_2[] = {0x01,0x00,0x10,0x00,0x00,0x3d,0x0a,0x01,0x87,0x80,0x63,0x60,0x19,0x98,0x07,0xc6,0x01,0x62,0x09,0xc0,}; -const uint8_t _A_NFC_14_3[] = {0x01,0x00,0x16,0x00,0x00,0x24,0x08,0x02,0x34,0x28,0x26,0x1e,0x09,0x8d,0x82,0x66,0x60,0x9f,0x18,0x25,0x8a,0x08,0x0f,0x30,0xb1,0x80,}; -const uint8_t* const _A_NFC_14[] = {_A_NFC_14_0,_A_NFC_14_1,_A_NFC_14_2,_A_NFC_14_3}; - -const uint8_t _A_Passport_14_0[] = {0x00,0xC0,0x00,0x20,0x01,0x20,0x01,0xFE,0x1F,0x01,0x20,0x39,0x2F,0x39,0x20,0x39,0x2F,0x11,0x20,0x39,0x2B,0x45,0x20,0x7D,0x25,0x01,0x20,0xFE,0x1F,}; -const uint8_t _A_Passport_14_1[] = {0x01,0x00,0x0e,0x00,0xe0,0x40,0x24,0x10,0x10,0x08,0xff,0xa3,0xe0,0x42,0x00,0xf0,0x4c,0x40,}; -const uint8_t _A_Passport_14_2[] = {0x01,0x00,0x13,0x00,0xe0,0x40,0x24,0x10,0x10,0x08,0xff,0xa3,0xe0,0x42,0x90,0x42,0x40,0x24,0x07,0x30,0x0a,0x84,0xc4,}; -const uint8_t _A_Passport_14_3[] = {0x01,0x00,0x14,0x00,0xe0,0x40,0x24,0x10,0x10,0x08,0xff,0xa3,0xe0,0x41,0x9c,0xc8,0x21,0x20,0x12,0x06,0x10,0x05,0x82,0x62,}; -const uint8_t _A_Passport_14_4[] = {0x01,0x00,0x13,0x00,0xe0,0x40,0x24,0x10,0x10,0x08,0xff,0xa3,0xe0,0x41,0x9c,0x80,0x52,0x22,0x0e,0x30,0x0a,0x04,0xc4,}; -const uint8_t _A_Passport_14_5[] = {0x01,0x00,0x18,0x00,0xe0,0x40,0x24,0x10,0x10,0x08,0xff,0xa3,0xe0,0x41,0x9c,0x80,0x52,0x23,0x20,0x84,0xc8,0x20,0xa0,0x12,0x07,0x88,0x4c,0x40,}; -const uint8_t _A_Passport_14_6[] = {0x01,0x00,0x18,0x00,0xe0,0x40,0x24,0x10,0x10,0x08,0xff,0xa3,0xe0,0x41,0x9c,0x80,0x52,0x23,0x20,0x84,0xc8,0x20,0xb2,0x0b,0xe8,0x50,0x82,0x62,}; -const uint8_t _A_Passport_14_7[] = {0x01,0x00,0x1a,0x00,0xe0,0x40,0x24,0x10,0x10,0x08,0xff,0xa3,0xe0,0x41,0x9c,0xc8,0xe7,0x20,0x31,0x90,0x44,0x40,0x65,0x45,0x90,0x5f,0x42,0x84,0x13,0x10,}; -const uint8_t _A_Passport_14_8[] = {0x00,0xC0,0x00,0x20,0x01,0x20,0x01,0xFE,0x1F,0x01,0x20,0x39,0x2F,0x39,0x20,0x39,0x23,0x11,0x20,0x39,0x20,0x45,0x20,0x7D,0x20,0x01,0x20,0xFE,0x1F,}; -const uint8_t _A_Passport_14_9[] = {0x01,0x00,0x1a,0x00,0xe0,0x40,0x24,0x10,0x10,0x08,0xff,0xa3,0xe0,0x41,0x9c,0xcb,0xe7,0x20,0x32,0x88,0x80,0xc6,0x47,0x45,0x90,0x5f,0x42,0x84,0x13,0x10,}; -const uint8_t* const _A_Passport_14[] = {_A_Passport_14_0,_A_Passport_14_1,_A_Passport_14_2,_A_Passport_14_3,_A_Passport_14_4,_A_Passport_14_5,_A_Passport_14_6,_A_Passport_14_7,_A_Passport_14_8,_A_Passport_14_9}; - -const uint8_t _A_Plugins_14_0[] = {0x00,0xE7,0x00,0xA5,0x00,0x99,0x01,0x01,0x02,0x01,0x02,0x81,0x01,0x81,0x0E,0xE7,0x08,0x24,0x18,0x58,0x20,0x40,0x20,0x30,0x18,0x10,0x08,0xF0,0x0F,}; -const uint8_t _A_Plugins_14_1[] = {0x00,0x70,0x0E,0x50,0x0A,0x90,0x19,0x10,0x20,0x10,0x20,0x18,0x18,0x1E,0x08,0x72,0x0E,0x46,0x02,0x88,0x05,0x08,0x04,0x06,0x03,0x02,0x01,0xFE,0x01,}; -const uint8_t _A_Plugins_14_2[] = {0x00,0x00,0x00,0x00,0x00,0x18,0x00,0xE4,0x1C,0xA7,0x14,0x21,0x33,0x23,0x00,0x24,0x00,0x24,0x30,0x23,0x10,0xE1,0x1C,0xFF,0x04,0x00,0x03,0x00,0x00,}; -const uint8_t _A_Plugins_14_3[] = {0x00,0x30,0x00,0x48,0x00,0xCE,0x01,0x02,0x01,0x3E,0x07,0x28,0x05,0xC8,0x0C,0x0E,0x10,0x0A,0x10,0x0E,0x0C,0x08,0x04,0x38,0x07,0x20,0x01,0xC0,0x00,}; -const uint8_t _A_Plugins_14_4[] = {0x00,0x40,0x02,0x70,0x0E,0x10,0x08,0x30,0x18,0xCE,0x21,0x4A,0x21,0x32,0x1B,0x02,0x0C,0x02,0x0C,0x02,0x03,0x02,0x01,0xCE,0x01,0x48,0x00,0x30,0x00,}; -const uint8_t _A_Plugins_14_5[] = {0x00,0x00,0x0C,0x00,0x12,0x80,0x33,0x80,0x00,0xB9,0x01,0x29,0x02,0x66,0x02,0x80,0x01,0x80,0x00,0x60,0x3F,0x20,0x00,0x39,0x00,0x09,0x00,0x06,0x00,}; -const uint8_t _A_Plugins_14_6[] = {0x00,0x00,0x00,0x00,0x06,0x00,0x09,0xF3,0x39,0x52,0x20,0xCC,0x20,0x00,0x01,0x00,0x01,0xC0,0x20,0x40,0x20,0xF3,0x3F,0x12,0x00,0x0C,0x00,0x00,0x00,}; -const uint8_t _A_Plugins_14_7[] = {0x00,0x00,0x00,0x00,0x0C,0x00,0x12,0xB9,0x33,0xA9,0x00,0x66,0x01,0x80,0x02,0x80,0x02,0x60,0x01,0xA0,0x00,0xB9,0x3F,0x09,0x00,0x06,0x00,0x00,0x00,}; -const uint8_t _A_Plugins_14_8[] = {0x00,0x00,0x00,0x39,0x00,0x29,0x00,0x66,0x06,0x80,0x09,0x80,0x39,0x60,0x20,0xE0,0x20,0x39,0x01,0x09,0x01,0xC6,0x20,0x40,0x20,0xC0,0x3F,0x00,0x00,}; -const uint8_t* const _A_Plugins_14[] = {_A_Plugins_14_0,_A_Plugins_14_1,_A_Plugins_14_2,_A_Plugins_14_3,_A_Plugins_14_4,_A_Plugins_14_5,_A_Plugins_14_6,_A_Plugins_14_7,_A_Plugins_14_8}; - -const uint8_t _A_Power_14_0[] = {0x01,0x00,0x17,0x00,0xa0,0x00,0x4a,0x99,0x06,0xa1,0x42,0x00,0x23,0x41,0x88,0x00,0x56,0x05,0x08,0x00,0x8c,0x32,0x0d,0xf0,0x80,0x86,0xc4,}; -const uint8_t* const _A_Power_14[] = {_A_Power_14_0}; - -const uint8_t _A_Settings_14_0[] = {0x00,0x03,0x07,0x87,0x04,0x8E,0x02,0x9C,0x32,0xF8,0x2C,0x50,0x20,0x30,0x1E,0x1E,0x03,0x81,0x04,0xCD,0x09,0x53,0x13,0x50,0x26,0x48,0x2C,0x38,0x18,}; -const uint8_t _A_Settings_14_1[] = {0x00,0x03,0x00,0x87,0x03,0x4E,0x02,0x7C,0x01,0x48,0x19,0x58,0x16,0x30,0x10,0x10,0x0F,0x8F,0x04,0xC0,0x09,0x26,0x13,0x29,0x16,0x28,0x0C,0x24,0x00,}; -const uint8_t _A_Settings_14_2[] = {0x00,0x03,0x00,0x07,0x00,0xDE,0x01,0x24,0x01,0xAC,0x00,0xB8,0x0C,0x30,0x0B,0x10,0x08,0x88,0x07,0xC7,0x09,0x20,0x0B,0x13,0x06,0x14,0x00,0x14,0x00,}; -const uint8_t _A_Settings_14_3[] = {0x00,0x04,0x0C,0x09,0x00,0x13,0x20,0x26,0x20,0x4C,0x00,0xB8,0x00,0xA4,0x00,0x74,0x00,0x94,0x01,0x64,0x01,0x02,0x01,0xF1,0x18,0x08,0x38,0x04,0x30,}; -const uint8_t _A_Settings_14_4[] = {0x00,0x04,0x0F,0x89,0x00,0x93,0x26,0xA6,0x29,0x2C,0x28,0x18,0x24,0x00,0x1C,0x0E,0x00,0x09,0x00,0x05,0x06,0x65,0x0E,0x59,0x1C,0x40,0x38,0x3C,0x30,}; -const uint8_t _A_Settings_14_5[] = {0x00,0x04,0x08,0x05,0x04,0xC3,0x23,0x20,0x10,0xA0,0x09,0x60,0x0A,0x00,0x0A,0x80,0x09,0x80,0x07,0x03,0x07,0x02,0x0E,0x01,0x3C,0x19,0x08,0x16,0x18,}; -const uint8_t _A_Settings_14_6[] = {0x00,0x00,0x14,0x00,0x24,0x00,0x02,0x18,0x31,0xF8,0x08,0x08,0x04,0x68,0x02,0xD8,0x02,0x80,0x06,0xC0,0x0A,0xC0,0x13,0x00,0x26,0x00,0x0C,0x00,0x18,}; -const uint8_t _A_Settings_14_7[] = {0x00,0x00,0x0A,0x00,0x0A,0x0C,0x32,0x1C,0x01,0xB8,0x38,0x78,0x04,0x04,0x02,0x34,0x03,0x4C,0x05,0x40,0x09,0x20,0x13,0xE0,0x26,0x00,0x0C,0x00,0x18,}; -const uint8_t _A_Settings_14_8[] = {0x00,0x00,0x09,0x06,0x05,0x0E,0x25,0x1C,0x19,0xB8,0x00,0x70,0x3C,0x3C,0x02,0x02,0x03,0x9A,0x04,0xA6,0x09,0xA0,0x13,0x90,0x26,0x70,0x0C,0x00,0x18,}; -const uint8_t _A_Settings_14_9[] = {0x00,0x03,0x07,0x87,0x04,0x8E,0x02,0x9C,0x32,0xF8,0x2C,0x50,0x20,0x30,0x1E,0x1E,0x03,0x81,0x04,0xCD,0x09,0x53,0x13,0x50,0x26,0x48,0x2C,0x38,0x18,}; -const uint8_t* const _A_Settings_14[] = {_A_Settings_14_0,_A_Settings_14_1,_A_Settings_14_2,_A_Settings_14_3,_A_Settings_14_4,_A_Settings_14_5,_A_Settings_14_6,_A_Settings_14_7,_A_Settings_14_8,_A_Settings_14_9}; - -const uint8_t _A_Sub1ghz_14_0[] = {0x01,0x00,0x1a,0x00,0x82,0x42,0x20,0x51,0x08,0x4c,0x92,0x0b,0x28,0xea,0xca,0x80,0x22,0x05,0x1e,0x4c,0x93,0x85,0x10,0xe2,0x42,0x38,0x10,0x00,0x0a,0x80,}; -const uint8_t _A_Sub1ghz_14_1[] = {0x01,0x00,0x18,0x00,0x82,0x42,0x20,0x51,0x08,0x4c,0x92,0x0b,0x28,0xe2,0x80,0x48,0x0a,0x3c,0x99,0x27,0x0a,0x21,0xc4,0x84,0x70,0x20,0x00,0x15,}; -const uint8_t _A_Sub1ghz_14_2[] = {0x01,0x00,0x16,0x00,0x82,0x42,0x20,0x51,0x08,0x0c,0x80,0x02,0x3c,0x10,0x09,0x01,0x4f,0x85,0x10,0xe2,0x42,0x38,0x10,0x00,0x0a,0x80,}; -const uint8_t _A_Sub1ghz_14_3[] = {0x01,0x00,0x08,0x00,0x00,0x3f,0x00,0x02,0x40,0x55,0x00,0xc8,}; -const uint8_t _A_Sub1ghz_14_4[] = {0x01,0x00,0x0a,0x00,0x00,0x3f,0x42,0x04,0x01,0x10,0x28,0xf0,0x00,0x38,}; -const uint8_t _A_Sub1ghz_14_5[] = {0x01,0x00,0x12,0x00,0x00,0x1c,0x22,0x09,0x04,0x84,0x75,0x21,0x40,0x11,0x02,0x8f,0x22,0x09,0xc0,0x80,0x00,0x64,}; -const uint8_t* const _A_Sub1ghz_14[] = {_A_Sub1ghz_14_0,_A_Sub1ghz_14_1,_A_Sub1ghz_14_2,_A_Sub1ghz_14_3,_A_Sub1ghz_14_4,_A_Sub1ghz_14_5}; - -const uint8_t _A_Tamagotchi_14_0[] = {0x00,0xF0,0x03,0x08,0x06,0x04,0x0C,0x04,0x0C,0xF2,0x19,0x2A,0x1A,0x19,0x33,0x89,0x32,0xF1,0x31,0x01,0x30,0x52,0x39,0x02,0x18,0x0C,0x0E,0xF0,0x07,}; -const uint8_t _A_Tamagotchi_14_1[] = {0x00,0xF0,0x03,0x08,0x06,0x04,0x0C,0x04,0x0C,0xF2,0x19,0x1A,0x1B,0xA9,0x32,0x19,0x33,0xF1,0x31,0x01,0x30,0x52,0x39,0x02,0x18,0x0C,0x0E,0xF0,0x07,}; -const uint8_t _A_Tamagotchi_14_2[] = {0x00,0xF0,0x03,0x08,0x06,0x04,0x0C,0x04,0x0C,0xF2,0x19,0x8A,0x1A,0x19,0x33,0x29,0x32,0xF1,0x31,0x01,0x30,0x52,0x39,0x02,0x18,0x0C,0x0E,0xF0,0x07,}; -const uint8_t _A_Tamagotchi_14_3[] = {0x00,0xF0,0x03,0x08,0x06,0x04,0x0C,0x04,0x0C,0xF2,0x19,0x4A,0x1B,0xA9,0x32,0x59,0x32,0xF1,0x31,0x01,0x30,0x52,0x39,0x02,0x18,0x0C,0x0E,0xF0,0x07,}; -const uint8_t _A_Tamagotchi_14_4[] = {0x00,0xF0,0x03,0x08,0x06,0x04,0x0C,0x04,0x0C,0xF2,0x19,0xAA,0x1A,0x49,0x32,0xA9,0x32,0xF1,0x31,0x01,0x30,0x52,0x39,0x02,0x18,0x0C,0x0E,0xF0,0x07,}; -const uint8_t _A_Tamagotchi_14_5[] = {0x00,0xF0,0x03,0x08,0x06,0x04,0x0C,0x04,0x0C,0xF2,0x19,0x5A,0x1A,0xA9,0x32,0x49,0x33,0xF1,0x31,0x01,0x30,0x52,0x39,0x02,0x18,0x0C,0x0E,0xF0,0x07,}; -const uint8_t* const _A_Tamagotchi_14[] = {_A_Tamagotchi_14_0,_A_Tamagotchi_14_1,_A_Tamagotchi_14_2,_A_Tamagotchi_14_3,_A_Tamagotchi_14_4,_A_Tamagotchi_14_5}; - -const uint8_t _A_U2F_14_0[] = {0x00,0x00,0x00,0x00,0x00,0xE0,0x01,0x10,0x02,0x08,0x04,0xFE,0x1F,0x01,0x20,0xD5,0x2D,0x55,0x25,0x15,0x2D,0x95,0x24,0xDD,0x25,0x01,0x20,0xFE,0x1F,}; -const uint8_t _A_U2F_14_1[] = {0x00,0x00,0x00,0xE0,0x01,0x10,0x02,0x08,0x04,0x08,0x04,0xFE,0x1F,0x01,0x20,0xD5,0x2D,0x55,0x25,0x15,0x2D,0x95,0x24,0xDD,0x25,0x01,0x20,0xFE,0x1F,}; -const uint8_t _A_U2F_14_2[] = {0x00,0xE0,0x01,0x10,0x02,0x08,0x04,0x08,0x04,0x08,0x00,0xFE,0x1F,0x01,0x20,0xD5,0x2D,0x55,0x25,0x15,0x2D,0x95,0x24,0xDD,0x25,0x01,0x20,0xFE,0x1F,}; -const uint8_t _A_U2F_14_3[] = {0x00,0x00,0x00,0xE0,0x01,0x10,0x02,0x08,0x04,0x08,0x04,0xFE,0x1F,0x01,0x20,0xD5,0x2D,0x55,0x25,0x15,0x2D,0x95,0x24,0xDD,0x25,0x01,0x20,0xFE,0x1F,}; -const uint8_t* const _A_U2F_14[] = {_A_U2F_14_0,_A_U2F_14_1,_A_U2F_14_2,_A_U2F_14_3}; - -const uint8_t _A_iButton_14_0[] = {0x00,0x00,0x1C,0x00,0x3E,0x00,0x35,0x80,0x3A,0x78,0x15,0x84,0x0A,0x32,0x05,0x49,0x02,0x85,0x02,0x85,0x02,0x49,0x02,0x32,0x01,0x84,0x00,0x78,0x00,}; -const uint8_t _A_iButton_14_1[] = {0x00,0x00,0x00,0x00,0x38,0x00,0x26,0x80,0x21,0xE0,0x10,0x38,0x0D,0x6C,0x03,0x56,0x01,0x2B,0x01,0x97,0x00,0x4D,0x00,0x21,0x00,0x1E,0x00,0x00,0x00,}; -const uint8_t _A_iButton_14_2[] = {0x01,0x00,0x1a,0x00,0x00,0x24,0xc2,0x01,0x2c,0x80,0x48,0xfb,0x11,0x89,0x64,0x1b,0x2d,0x01,0xa5,0xc0,0x24,0xb0,0x08,0x94,0x02,0x13,0x00,0x83,0x85,0x88,}; -const uint8_t _A_iButton_14_3[] = {0x00,0x00,0x00,0x00,0x38,0x00,0x26,0x80,0x21,0x60,0x18,0x98,0x06,0x04,0x01,0x02,0x01,0x01,0x01,0x81,0x00,0x41,0x00,0x21,0x00,0x1E,0x00,0x00,0x00,}; -const uint8_t _A_iButton_14_4[] = {0x01,0x00,0x1a,0x00,0x80,0x47,0x20,0x13,0xe8,0x04,0xd7,0x01,0x3a,0xbc,0x45,0x70,0x90,0xa8,0x14,0x16,0x03,0x02,0x00,0xa8,0x08,0x70,0x90,0x0b,0xc4,0x00,}; -const uint8_t _A_iButton_14_5[] = {0x01,0x00,0x1a,0x00,0x00,0x14,0xe2,0x01,0x24,0x80,0x48,0xb0,0x11,0x1f,0x04,0x22,0x31,0x05,0x83,0x40,0xa0,0x20,0x13,0x80,0xf0,0x60,0x13,0xe0,0xc1,0x00,}; -const uint8_t _A_iButton_14_6[] = {0x00,0x00,0x00,0x00,0x38,0x00,0x24,0x00,0x23,0x80,0x20,0xF0,0x10,0x0C,0x0D,0xE2,0x02,0x91,0x01,0x69,0x01,0x15,0x01,0x8D,0x00,0x4D,0x00,0x3E,0x00,}; -const uint8_t* const _A_iButton_14[] = {_A_iButton_14_0,_A_iButton_14_1,_A_iButton_14_2,_A_iButton_14_3,_A_iButton_14_4,_A_iButton_14_5,_A_iButton_14_6}; - -const uint8_t _I_Detailed_chip_17x13_0[] = {0x01,0x00,0x1e,0x00,0xfe,0x5f,0xe0,0x10,0x2c,0x04,0x02,0x23,0x11,0x80,0xe4,0x62,0x50,0x1a,0xff,0xc2,0x03,0x21,0x84,0x00,0x9a,0xbf,0xf4,0x08,0x98,0x5c,0x83,0xa4,0x23,0x20,}; -const uint8_t* const _I_Detailed_chip_17x13[] = {_I_Detailed_chip_17x13_0}; - -const uint8_t _I_Medium_chip_22x21_0[] = {0x01,0x00,0x35,0x00,0xfe,0x7f,0xe1,0xf0,0x28,0x04,0x43,0xf3,0xff,0x93,0xe1,0x6a,0x52,0x8e,0x2f,0xfe,0x51,0x25,0x80,0x4a,0x72,0xb6,0x79,0x55,0x76,0xc1,0x2e,0xaa,0xc0,0x25,0x51,0xdc,0x00,0x14,0x70,0x00,0x56,0xae,0x81,0x47,0x2b,0x7d,0x95,0x07,0x48,0x46,0x42,0x92,0x17,0x90,0xd4,0x87,0x64,}; -const uint8_t* const _I_Medium_chip_22x21[] = {_I_Medium_chip_22x21_0}; - -const uint8_t _I_Pin_arrow_down_7x9_0[] = {0x00,0x1C,0x1C,0x1C,0x1C,0x1C,0x7F,0x3E,0x1C,0x08,}; -const uint8_t* const _I_Pin_arrow_down_7x9[] = {_I_Pin_arrow_down_7x9_0}; - -const uint8_t _I_Pin_arrow_left_9x7_0[] = {0x00,0x08,0x00,0x0C,0x00,0xFE,0x01,0xFF,0x01,0xFE,0x01,0x0C,0x00,0x08,0x00,}; -const uint8_t* const _I_Pin_arrow_left_9x7[] = {_I_Pin_arrow_left_9x7_0}; - -const uint8_t _I_Pin_arrow_right_9x7_0[] = {0x00,0x20,0x00,0x60,0x00,0xFF,0x00,0xFF,0x01,0xFF,0x00,0x60,0x00,0x20,0x00,}; -const uint8_t* const _I_Pin_arrow_right_9x7[] = {_I_Pin_arrow_right_9x7_0}; - -const uint8_t _I_Pin_arrow_up7x9_0[] = {0x00,0x08,0x1C,0x3E,0x7F,0x1C,0x1C,0x1C,0x1C,0x1C,}; -const uint8_t* const _I_Pin_arrow_up7x9[] = {_I_Pin_arrow_up7x9_0}; - -const uint8_t _I_Pin_attention_dpad_29x29_0[] = {0x01,0x00,0x56,0x00,0x80,0x7f,0x20,0xe0,0x31,0x81,0xc6,0x20,0x1c,0x08,0x05,0x82,0x01,0x20,0xa0,0x60,0x20,0x11,0x0f,0x04,0x02,0x03,0x08,0xf8,0x40,0x60,0x50,0x4f,0xc4,0x0e,0x09,0x04,0x05,0x8c,0x12,0x04,0x03,0x18,0x44,0x08,0x42,0x30,0x88,0x08,0x0c,0x62,0x14,0x18,0x05,0x02,0x21,0x61,0x14,0x8c,0x43,0xe3,0x01,0xf8,0x44,0x7f,0x20,0x31,0x89,0x81,0xcc,0x1e,0x61,0x73,0x0f,0x98,0x9c,0xc5,0xe6,0x37,0x31,0xf9,0x91,0xcc,0x9e,0x65,0x73,0x2f,0x99,0x9c,0xcd,0xe6,}; -const uint8_t* const _I_Pin_attention_dpad_29x29[] = {_I_Pin_attention_dpad_29x29_0}; - -const uint8_t _I_Pin_back_arrow_10x8_0[] = {0x00,0x04,0x00,0x06,0x00,0xFF,0x00,0x06,0x01,0x04,0x02,0x00,0x02,0x00,0x01,0xF8,0x00,}; -const uint8_t* const _I_Pin_back_arrow_10x8[] = {_I_Pin_back_arrow_10x8_0}; - -const uint8_t _I_Pin_back_full_40x8_0[] = {0x01,0x00,0x26,0x00,0x82,0x01,0x0e,0x0c,0x02,0x18,0x14,0x03,0xfe,0x04,0x38,0x37,0xc6,0xc3,0x32,0xf7,0x41,0x20,0x59,0x0a,0x54,0xa6,0x01,0xf2,0x88,0xde,0x80,0x83,0x01,0xc8,0x42,0xa5,0x3f,0x88,0x05,0x82,0x65,0x2e,}; -const uint8_t* const _I_Pin_back_full_40x8[] = {_I_Pin_back_full_40x8_0}; - -const uint8_t _I_Pin_cell_13x13_0[] = {0x01,0x00,0x0a,0x00,0xff,0xc7,0xe0,0x31,0x00,0x0f,0x80,0x4c,0x2e,0x20,}; -const uint8_t* const _I_Pin_cell_13x13[] = {_I_Pin_cell_13x13_0}; - -const uint8_t _I_Pin_pointer_5x3_0[] = {0x00,0x04,0x0E,0x1F,}; -const uint8_t* const _I_Pin_pointer_5x3[] = {_I_Pin_pointer_5x3_0}; - -const uint8_t _I_Pin_star_7x7_0[] = {0x00,0x49,0x2A,0x1C,0x7F,0x1C,0x2A,0x49,}; -const uint8_t* const _I_Pin_star_7x7[] = {_I_Pin_star_7x7_0}; - -const uint8_t _I_passport_bad1_46x49_0[] = {0x01,0x00,0xd2,0x00,0xff,0x7f,0xc0,0x05,0x1f,0x02,0x1f,0xfe,0x7e,0x02,0x18,0x0f,0xe0,0x0a,0x57,0xff,0xf7,0x9c,0x0a,0x59,0xf8,0x0e,0x60,0x0a,0x56,0xf8,0x05,0x83,0xfc,0x05,0x18,0xbc,0x03,0x01,0xfd,0x02,0x8c,0x2c,0x5a,0x3f,0xa0,0x28,0xc1,0x40,0xa3,0xf4,0x02,0x8c,0x08,0x0a,0x77,0xf8,0x08,0x14,0x7d,0x13,0xfd,0xf9,0x14,0x80,0xab,0xd0,0x9f,0xd7,0xe0,0x10,0x60,0x2a,0x42,0x20,0x1a,0x09,0xfc,0xbe,0x01,0x10,0x02,0xa5,0x9c,0x0a,0x78,0x0e,0x74,0x04,0x0a,0x31,0x7a,0x06,0x7a,0x06,0x05,0x39,0xb0,0x44,0x80,0xa3,0x7e,0x02,0xa5,0xf0,0x0a,0x78,0x0a,0x00,0x14,0xf8,0x13,0xf0,0x29,0xc8,0x07,0x66,0x70,0x11,0xd8,0xea,0xa7,0xf1,0xb2,0x99,0x4c,0x00,0xa9,0xc0,0x9f,0x01,0x4e,0x01,0x3d,0x02,0x8c,0x38,0x0a,0x33,0xa8,0x6c,0x02,0x62,0x05,0x19,0xa0,0x14,0x78,0x00,0x51,0x94,0x01,0x46,0x01,0x03,0x02,0xa4,0x30,0x0a,0x2a,0x02,0x98,0x7c,0x25,0x60,0x52,0xe0,0x43,0xe5,0x80,0x51,0xc0,0x27,0x46,0x51,0x09,0x05,0x88,0xc0,0x66,0x80,0x52,0xfe,0x40,0x27,0x60,0x52,0xf8,0x7f,0xe7,0xa0,0x52,0xe0,0x5f,0xe7,0xc0,0x52,0x80,0x6f,0xe7,0xe0,0x53,0xde,0x01,0x50,0xe2,0x20,0x5f,0x02,0xbf,0xfb,0xfe,0x00,0x28,0xf8,}; -const uint8_t* const _I_passport_bad1_46x49[] = {_I_passport_bad1_46x49_0}; - -const uint8_t _I_passport_bad2_46x49_0[] = {0x01,0x00,0xee,0x00,0xff,0x7f,0xc0,0x05,0x1f,0x02,0x1f,0xfe,0x7e,0x02,0x18,0x0f,0xe0,0x0a,0x57,0xff,0xf7,0x9c,0x0a,0x59,0xf8,0x0e,0x60,0x0a,0x5e,0xf8,0xfd,0x83,0xfc,0x05,0x18,0xbd,0x83,0x01,0xfd,0x02,0x8c,0x2f,0x01,0x01,0xfd,0x01,0x46,0x0b,0x00,0x81,0x7d,0x00,0xa3,0x02,0x80,0x41,0x3d,0x13,0xfb,0xfc,0x04,0x0a,0x3d,0x09,0xfe,0xfc,0x88,0x30,0x80,0x2a,0xea,0xa7,0xf5,0xf8,0x04,0x7e,0xa1,0xb5,0x02,0x8f,0x02,0xc1,0xb8,0xbf,0x4f,0xe5,0xf2,0x0e,0x07,0x53,0x03,0x3e,0x02,0x8e,0x9e,0x75,0x80,0x02,0x8e,0x42,0x9d,0x05,0xd1,0x4f,0xa2,0xf5,0x08,0xf4,0x0c,0x0a,0x73,0x69,0x08,0x14,0xab,0x17,0xe0,0x29,0xd4,0x2f,0x80,0x53,0xcc,0x50,0x24,0x22,0x31,0x8b,0xfc,0x08,0x62,0x05,0x29,0x07,0x32,0x0f,0x40,0x9f,0xc5,0xe2,0x13,0x8f,0xc5,0xfe,0x7f,0x1b,0x4f,0x90,0x44,0x40,0xa7,0x00,0x9e,0x81,0x52,0x75,0x1d,0x80,0x43,0x80,0xa3,0x34,0x86,0xc0,0x26,0x20,0x54,0xe0,0x01,0x46,0x51,0x0b,0x01,0x8c,0x0c,0x0a,0x90,0xc0,0x2a,0x4c,0x3e,0x12,0xb0,0x28,0xcc,0x38,0x10,0xf9,0x64,0x24,0x3a,0x29,0xd1,0x94,0x01,0x47,0x00,0x30,0x19,0xa0,0x14,0x60,0x1f,0xd8,0x04,0xec,0x0a,0x5f,0xaf,0xfc,0xf4,0x0a,0x5f,0x4b,0xfc,0xf8,0x0a,0x5a,0x8d,0xfc,0xfc,0x0a,0x54,0x00,0x2a,0x60,0x37,0x40,0x53,0x80,0x2e,0x44,0x0a,0x7a,0x00,0x2e,0x7f,0xbf,0xe0,0x02,0x8f,0x80,}; -const uint8_t* const _I_passport_bad2_46x49[] = {_I_passport_bad2_46x49_0}; - -const uint8_t _I_passport_bad3_46x49_0[] = {0x01,0x00,0x07,0x01,0xff,0x7f,0xc0,0x05,0x1f,0x02,0x1f,0xfe,0x7e,0x02,0x18,0x0f,0xc0,0x0a,0x57,0xff,0xf7,0xbc,0x0a,0x59,0xf8,0x0f,0x40,0x0a,0x56,0xf8,0x04,0xe0,0x0a,0x51,0x78,0x07,0x1b,0xfc,0x05,0x18,0x5c,0x02,0x03,0xfd,0x02,0x8c,0x37,0x01,0x00,0xfd,0x01,0x46,0x15,0x40,0x80,0x7d,0x27,0xf7,0xf8,0x48,0x14,0xf7,0xf0,0x80,0x28,0xfa,0x00,0xa5,0x20,0x80,0x72,0x27,0xf5,0xf8,0x80,0x14,0x76,0x00,0x52,0x9f,0xc0,0x2f,0xd3,0xf9,0x7e,0x82,0x81,0xc0,0xc8,0xcf,0xa5,0xf6,0x0d,0x3c,0xe3,0x20,0x05,0x1d,0x05,0x32,0x4b,0xa0,0x9f,0x45,0xec,0x11,0xc9,0x18,0x14,0xe6,0x94,0x10,0x29,0xd7,0x00,0xa9,0x62,0x02,0x9f,0x02,0x83,0x41,0x11,0x88,0x14,0x77,0xf2,0x00,0x29,0x48,0x39,0x92,0x7a,0x84,0xfe,0x27,0x10,0x9c,0x7e,0x2f,0xf3,0xf8,0xea,0x78,0x68,0x18,0x09,0xf4,0x7c,0x0a,0x27,0x21,0x9e,0xc6,0xd5,0x65,0x01,0x9d,0x44,0xe0,0x10,0xe8,0x04,0x0a,0x69,0x63,0x80,0x4c,0x60,0x10,0x49,0xa6,0x0e,0x03,0xc0,0x80,0x42,0x25,0x10,0x38,0x34,0x02,0x06,0x05,0x28,0x44,0x02,0x19,0x10,0x02,0x8c,0x42,0x01,0x30,0xf8,0x4b,0xe0,0x71,0x48,0x07,0x02,0x3f,0x2c,0x05,0x8e,0x02,0x03,0x00,0x94,0x43,0xc2,0x22,0x30,0x19,0xa5,0xc4,0x0a,0x3f,0xc8,0x04,0xef,0x02,0x3c,0x16,0xe8,0xcf,0x60,0x31,0xc0,0xe8,0xdf,0xe7,0xd0,0x1b,0x01,0x34,0x77,0xf3,0xf8,0x08,0x88,0xb7,0x80,0x51,0x80,0x10,0x87,0x40,0x05,0x22,0x10,0xd8,0x00,0xa5,0x0a,0x05,0x88,0x74,0x41,0x64,0x05,0x7f,0xf7,0xfc,0x00,0x51,0xf0,}; -const uint8_t* const _I_passport_bad3_46x49[] = {_I_passport_bad3_46x49_0}; - -const uint8_t _I_passport_bottom_128x18_0[] = {0x01,0x00,0x54,0x00,0x99,0x01,0x97,0xf1,0xff,0x00,0x2e,0x1c,0x1e,0xdf,0xc0,0x7b,0x63,0xe6,0xc0,0xfe,0x9e,0x03,0xfa,0x70,0x0f,0xe9,0x80,0x7f,0xc1,0xfd,0x04,0x37,0xf7,0xc9,0x1d,0xb8,0x08,0x4c,0x04,0x1f,0xb0,0x58,0x10,0x3f,0x38,0x00,0xfe,0xb0,0x41,0x7e,0x44,0x96,0x00,0x2c,0xfe,0x0b,0xfa,0x07,0xe4,0x7e,0x13,0x79,0x1d,0xce,0x02,0x03,0xc0,0x80,0x7c,0xf9,0x83,0xb9,0x80,0x40,0xc0,0x43,0x06,0xc3,0x0e,0xe6,0x01,0xfe,0x01,0x0f,0xf2,0x06,0x90,0xd0,}; -const uint8_t* const _I_passport_bottom_128x18[] = {_I_passport_bottom_128x18_0}; - -const uint8_t _I_passport_happy1_46x49_0[] = {0x01,0x00,0x09,0x01,0xff,0x7f,0xc0,0x05,0x1f,0x02,0x1f,0xfe,0x7f,0xff,0x87,0xe0,0x00,0xa7,0xf1,0xbf,0x85,0x04,0x0a,0x30,0xec,0x07,0xe4,0x0a,0x37,0xf8,0x0c,0x03,0xec,0x05,0x1d,0xf8,0x98,0x7d,0x00,0x51,0xaf,0x81,0x47,0xa0,0x05,0x19,0x78,0x14,0xa0,0x73,0xf8,0xb8,0x14,0x74,0x1f,0xc9,0xf0,0x14,0xa4,0x10,0x39,0xec,0x2c,0x0a,0x3c,0x08,0x04,0xe8,0x0a,0x52,0x00,0x28,0xc1,0x7c,0x10,0x08,0x87,0x82,0x77,0x05,0xfc,0x40,0xe1,0x1f,0x80,0x28,0xff,0x20,0x70,0x4f,0xe4,0xf6,0x07,0xfe,0x80,0xc0,0xbf,0xd3,0xe8,0x1e,0x7a,0x0f,0x00,0xbf,0xcf,0xe0,0x74,0xe8,0x46,0x03,0x7e,0x05,0x19,0x70,0xbc,0x7b,0xe0,0x51,0x8a,0x40,0x3c,0x1e,0xf0,0x28,0xc4,0x20,0x1f,0x0f,0xb8,0x14,0xff,0x1f,0xb9,0xf9,0xa8,0x60,0x3f,0xcf,0xc8,0x14,0xff,0xde,0x70,0x29,0x61,0xb0,0xf9,0xf0,0x29,0x12,0x06,0xfd,0x3e,0x02,0x8f,0x82,0x0f,0xf8,0x9c,0x81,0x44,0x80,0x3e,0x09,0xb8,0x14,0x94,0x43,0x2b,0x80,0xcc,0x20,0xc0,0x71,0x94,0x40,0x69,0x10,0x90,0x29,0xe2,0x21,0x00,0x51,0x9b,0x01,0x4f,0xc0,0x23,0x1c,0x24,0x43,0xf5,0x1f,0x17,0x88,0x14,0x7e,0x1e,0x31,0xd8,0xe0,0xa4,0x18,0x02,0x99,0x01,0x46,0x01,0xfa,0x02,0x8e,0x06,0x80,0x05,0x6f,0xa4,0xff,0x03,0x80,0xc0,0x01,0x4a,0x82,0x04,0x18,0x08,0x14,0xb8,0x10,0x18,0x0f,0xa2,0x7f,0x21,0x02,0x8c,0x08,0x0a,0x31,0x10,0x28,0xc1,0x3a,0x13,0xf8,0x6f,0x82,0x07,0x18,0x02,0x8c,0x0c,0x0a,0x3e,0x0d,0x00,0xbc,0x7e,0x0b,0x31,0xb3,0xcf,0xff,0xdf,0xf0,0x01,0x47,0xc0,}; -const uint8_t* const _I_passport_happy1_46x49[] = {_I_passport_happy1_46x49_0}; - -const uint8_t _I_passport_happy2_46x49_0[] = {0x01,0x00,0x16,0x01,0xff,0x7f,0xc0,0x05,0x1f,0x02,0x1f,0xfe,0x7f,0xff,0x87,0xe0,0x00,0xa7,0xf1,0xbf,0x85,0x04,0x0a,0x30,0xec,0x07,0x84,0x0a,0x37,0xf8,0x0c,0x03,0xbe,0x05,0x1d,0xfc,0xfb,0x81,0xa0,0x02,0x8f,0x7f,0x83,0x21,0xa4,0x43,0xe7,0xf2,0xf8,0x06,0x4a,0xa1,0xf3,0x9f,0x45,0xe0,0x10,0xcc,0x8c,0x32,0x7b,0x17,0xb8,0x42,0x30,0x50,0x39,0xd4,0x2f,0x19,0x25,0xe1,0x40,0x26,0x90,0xb8,0x15,0x1a,0x40,0x05,0x18,0x2f,0x86,0x89,0x18,0xf0,0x4d,0xe0,0xbf,0x98,0x2c,0x13,0xf1,0x3b,0xc2,0xff,0x20,0xb0,0x2f,0xe4,0xf7,0x07,0xfe,0x82,0xc0,0x7f,0xd3,0xec,0x1e,0x7b,0x8f,0x00,0xbf,0xcf,0xf0,0x74,0xc9,0xc6,0x03,0x7f,0x3f,0x81,0xc8,0x60,0x1c,0x0e,0xf8,0x14,0x62,0xd0,0x0f,0x07,0xbc,0x0a,0x31,0x88,0x07,0xc3,0xee,0x05,0x18,0x84,0x03,0xf1,0xfb,0x9f,0x9a,0x86,0x03,0xfc,0xfc,0x81,0x4f,0xfd,0xe7,0x02,0x96,0x1b,0x0f,0x9f,0x02,0x97,0xe2,0x07,0x7e,0x9f,0x01,0x47,0xc1,0x07,0xfc,0x4c,0x40,0xa2,0x40,0x1f,0x04,0xbc,0x0a,0x4a,0x21,0x95,0xc0,0x66,0x10,0x60,0x38,0xca,0x20,0x34,0x88,0x48,0x14,0xf1,0x10,0x80,0x28,0xcd,0x80,0xa7,0xe0,0x9c,0xc0,0x70,0x91,0x0f,0xd4,0x7c,0x5e,0x20,0x51,0xf8,0x78,0xc7,0x63,0x82,0x90,0x60,0x0a,0x64,0x05,0x18,0x07,0xe8,0x0a,0x38,0x1a,0x00,0x15,0xbe,0x93,0xfc,0x0e,0x03,0x00,0x05,0x2a,0x08,0x10,0x60,0x20,0x52,0xe0,0x40,0x60,0x3e,0x89,0xfc,0x84,0x0a,0x30,0x20,0x28,0xc4,0x40,0xa3,0x04,0xe8,0x4f,0xe1,0xbe,0x04,0x88,0x81,0x46,0x06,0x05,0x1f,0x06,0x80,0x5e,0x3f,0x08,0x3c,0x02,0xcf,0x3f,0xff,0x7f,0xc0,0x05,0x1f,}; -const uint8_t* const _I_passport_happy2_46x49[] = {_I_passport_happy2_46x49_0}; - -const uint8_t _I_passport_happy3_46x49_0[] = {0x01,0x00,0x23,0x01,0xff,0x7f,0xc0,0x05,0x1f,0x02,0x1f,0xfe,0x7f,0xff,0x81,0xe0,0x00,0xa7,0xfc,0xbf,0xff,0x00,0xa3,0x7f,0x85,0xe0,0x3e,0x60,0x51,0xdf,0xc1,0x38,0x1e,0xc0,0x28,0xd7,0xe0,0x52,0x0e,0x98,0x14,0x65,0xf0,0x28,0x86,0x92,0x1f,0x3f,0x8b,0xc0,0xa1,0x14,0x8f,0x9c,0xfa,0x2f,0x04,0x84,0x64,0x21,0x93,0xd8,0x5f,0xf2,0x6b,0xa0,0x81,0xce,0xa1,0x70,0x2a,0x37,0x82,0x05,0x34,0x82,0xfe,0x70,0x92,0x08,0x24,0xd3,0x1b,0x04,0x82,0xc4,0x7d,0x13,0x7c,0xbf,0xca,0x0b,0x0d,0xfc,0x4e,0xf4,0x7f,0xa8,0x2c,0x0f,0xf9,0x3d,0xe1,0xe7,0xa0,0xf0,0x1f,0xf4,0xfb,0x07,0x8e,0xe3,0xc0,0x2f,0xf3,0xfc,0x0d,0xd2,0x71,0x80,0xdf,0x81,0x46,0x73,0x00,0xe0,0x77,0xe7,0xf0,0x18,0x9c,0x03,0xc1,0xef,0x02,0x8c,0x7a,0x01,0xf0,0xfb,0x81,0x46,0x21,0x00,0xfc,0x7e,0xe7,0xf0,0x38,0x04,0x07,0xf9,0xf9,0x9f,0xc1,0x40,0xa3,0xfe,0xf3,0xcf,0xe1,0x30,0x0c,0x36,0x1f,0x3f,0x3f,0x88,0x85,0x86,0x07,0x7e,0x9f,0x48,0x45,0x03,0x07,0xfc,0x4c,0x68,0x2a,0xa1,0xbf,0xf8,0x25,0xf4,0x30,0x28,0xa8,0x86,0x57,0x47,0x98,0x41,0x80,0xe3,0x28,0x96,0xd2,0x04,0xa2,0x05,0x18,0xce,0x22,0x10,0x05,0x19,0xb4,0xc4,0x0a,0x5e,0x09,0xcd,0x87,0x09,0x10,0xfd,0x47,0xe7,0xdc,0x10,0x28,0xfc,0x3c,0x66,0x51,0xc1,0x48,0x30,0x05,0x31,0x02,0x94,0x03,0xf4,0x05,0x1c,0x0d,0x00,0x0a,0xdf,0x40,0x28,0xe0,0x30,0x00,0x52,0xa0,0x81,0x06,0x02,0x05,0x2e,0x04,0x06,0x03,0xe8,0x9f,0xc8,0x40,0xa3,0x02,0x02,0x8c,0x44,0x0a,0x30,0x4e,0x84,0xfe,0x1b,0xe0,0x81,0xc6,0x00,0xa3,0x03,0x02,0x8f,0x83,0x40,0x95,0x1f,0x84,0x1e,0x01,0x67,0x9f,0xff,0xbf,0xe0,0x02,0x8f,0x80,}; -const uint8_t* const _I_passport_happy3_46x49[] = {_I_passport_happy3_46x49_0}; - -const uint8_t _I_passport_left_6x46_0[] = {0x01,0x00,0x1b,0x00,0x9e,0x40,0xa3,0x32,0x59,0x2c,0x66,0x03,0x01,0x82,0xc2,0x62,0x32,0x50,0x16,0xc8,0x60,0x30,0x28,0x34,0x3a,0x3d,0x3e,0x9d,0x4c,0x80,0x14,}; -const uint8_t* const _I_passport_left_6x46[] = {_I_passport_left_6x46_0}; - -const uint8_t _I_passport_okay1_46x49_0[] = {0x01,0x00,0xcc,0x00,0xff,0x7f,0xc0,0x05,0x1f,0x02,0x1f,0xfe,0x7e,0x02,0x1b,0xfc,0x00,0x0a,0x78,0xff,0xff,0xe0,0x0a,0x57,0x38,0x07,0x9c,0x0a,0x50,0xc8,0x06,0x60,0x0a,0x37,0xf8,0x1c,0x02,0xc0,0x05,0x1d,0xf8,0xb4,0x70,0x13,0xef,0xfd,0x7c,0x68,0x53,0xdf,0xfc,0xbc,0x0a,0x53,0xaf,0xfc,0x5c,0x0b,0x13,0x4f,0xfc,0x2c,0x0b,0x12,0x8f,0xfc,0x14,0x0a,0xdf,0x08,0x0c,0xc3,0xff,0x02,0x80,0x7a,0x20,0x60,0x53,0xfa,0x41,0xc0,0xa7,0x12,0x87,0xc8,0x00,0xa5,0x92,0x02,0xa7,0xc8,0x0b,0x5e,0x28,0x58,0x14,0xe0,0x90,0xc0,0x29,0xfa,0x20,0xe0,0x51,0x1d,0x8c,0x42,0x10,0x05,0x38,0x44,0x40,0x0a,0x38,0x58,0x78,0x30,0x40,0xa3,0x7d,0x29,0x94,0x82,0xff,0x06,0x02,0x9e,0x7e,0x02,0x88,0x10,0x28,0xdb,0xd1,0xc4,0x05,0x13,0xe1,0x50,0x00,0xa2,0x76,0x29,0x00,0x15,0x22,0x00,0x51,0x3e,0x14,0x38,0x0a,0x7c,0x01,0x28,0xc8,0x3c,0xb0,0xf9,0xe0,0x64,0xa3,0x7f,0x05,0xf8,0x8a,0x50,0x0a,0x4b,0x83,0x02,0x8f,0x7e,0x01,0xe0,0x2a,0x0c,0x81,0xbc,0x41,0x81,0x2c,0x8f,0x83,0xfe,0x11,0x2f,0xff,0xbe,0x3e,0x05,0x40,0xb0,0x81,0x4c,0x74,0x20,0x52,0x15,0x1c,0x83,0xfc,0x23,0x10,0x00,0xc7,0xc0,}; -const uint8_t* const _I_passport_okay1_46x49[] = {_I_passport_okay1_46x49_0}; - -const uint8_t _I_passport_okay2_46x49_0[] = {0x01,0x00,0xe5,0x00,0xff,0x7f,0xc0,0x05,0x1f,0x02,0x1f,0xfe,0x7e,0x02,0x1b,0xfe,0x00,0x0a,0x78,0x7b,0xff,0xf0,0x0a,0x57,0x9c,0x77,0x8c,0x0a,0x37,0xfc,0x34,0x07,0x38,0x05,0x1d,0xfd,0x06,0x01,0x60,0x02,0x8d,0x7e,0x41,0x00,0xc0,0x4f,0xbf,0xf2,0xf8,0x80,0xd0,0x67,0xbf,0xf8,0xb8,0x14,0xa7,0x40,0x51,0x84,0x01,0x4e,0x17,0x0c,0x02,0x8c,0xd3,0xff,0x05,0x82,0x01,0x5e,0x51,0xff,0x81,0x40,0xbf,0x10,0x30,0x29,0xc1,0x20,0x93,0x00,0x29,0x7c,0xa1,0x20,0x51,0xff,0x40,0xfd,0x31,0x39,0x85,0xfe,0x03,0x1c,0x8a,0xc4,0xe4,0x17,0xf8,0x2f,0x83,0x2b,0x17,0x90,0x6f,0xf0,0x90,0x0f,0xa8,0x16,0xbc,0xa0,0x52,0x84,0x40,0x61,0x51,0x20,0x29,0xfd,0xa3,0xe0,0x52,0x80,0x46,0xa1,0x02,0x91,0x80,0xf8,0x21,0x31,0x00,0x28,0xe0,0x63,0xf0,0x80,0x28,0xff,0xef,0xca,0xc2,0x90,0x4f,0xe0,0x68,0x21,0x02,0x8f,0x7c,0x12,0x20,0x52,0x97,0x81,0x52,0x2e,0x05,0x1a,0x00,0x14,0x61,0x61,0xb2,0x00,0x8c,0x14,0x0a,0x31,0x80,0x2a,0x41,0x80,0xa7,0xc0,0x80,0x81,0x47,0xcb,0x03,0x9e,0x06,0x4a,0x37,0xfc,0x1b,0x08,0xa5,0x00,0xa4,0x35,0x20,0x29,0x10,0x47,0xc1,0x0f,0x26,0x93,0x90,0x43,0x02,0x59,0x1f,0x07,0xfc,0x22,0x5f,0xff,0x7c,0x7c,0x0a,0x81,0x61,0x02,0x98,0xe8,0x40,0xa4,0x2a,0x39,0x07,0xf8,0x46,0x20,0x01,0x8f,0x80,}; -const uint8_t* const _I_passport_okay2_46x49[] = {_I_passport_okay2_46x49_0}; - -const uint8_t _I_passport_okay3_46x49_0[] = {0x01,0x00,0x06,0x01,0xff,0x7f,0xc0,0x05,0x1f,0x02,0x1f,0xfe,0x7e,0x02,0x2c,0x00,0x14,0xfb,0xf7,0xff,0xe0,0x14,0xa4,0xf8,0x0f,0x18,0x14,0xaf,0x30,0x0c,0xe0,0x14,0x6f,0xf8,0x68,0x05,0xa0,0x0a,0x3b,0xf8,0x0c,0x07,0x11,0x3e,0xff,0xd7,0xe0,0x10,0x28,0x44,0xf7,0xff,0x2f,0x02,0x8c,0x12,0x75,0xff,0x8b,0xc0,0x20,0x80,0x52,0x85,0x81,0x4a,0x68,0x05,0x28,0x44,0x08,0x0a,0x30,0x50,0x29,0x4a,0x00,0xa5,0xfc,0x81,0x81,0x4e,0x05,0x06,0x98,0x01,0x4b,0xf3,0x04,0x02,0x8f,0xfb,0x07,0x04,0x84,0xcc,0x2f,0xf0,0x1c,0xee,0x2a,0x15,0x28,0x02,0x8f,0x86,0xe4,0x05,0x1d,0xfe,0x03,0x01,0x52,0x02,0xa0,0x2c,0x64,0x80,0x52,0xc5,0x43,0x80,0xa7,0x07,0x87,0x81,0x4a,0x01,0xff,0x83,0xc8,0xb7,0xf0,0x08,0x0c,0x3a,0x09,0x22,0x14,0x94,0x16,0x11,0x21,0xbf,0xe0,0x6f,0xf0,0x40,0x28,0xff,0xef,0xd1,0x45,0x60,0xc8,0x67,0xf0,0x38,0x58,0x7c,0x64,0x5d,0xfe,0x04,0x18,0x0a,0x33,0xc9,0x7e,0x82,0x03,0x40,0x80,0x48,0x22,0xf5,0x08,0x00,0x14,0xa1,0x60,0x51,0x90,0x40,0x26,0x10,0x59,0x44,0x02,0x21,0x00,0x94,0x01,0x4a,0x1d,0x00,0x92,0x01,0x47,0x81,0x01,0x02,0x8f,0x96,0x57,0x3c,0x1a,0x8c,0x8a,0x36,0x8d,0x10,0x29,0x2b,0x04,0x00,0x52,0x15,0xc0,0x80,0x07,0x00,0x41,0x18,0x07,0x82,0x1f,0x80,0x92,0x37,0x88,0x30,0x32,0x9f,0xff,0x83,0xfe,0x12,0x19,0x97,0xff,0xdf,0x1f,0x02,0x8c,0x90,0x0a,0x30,0xf0,0x28,0xae,0x47,0xde,0x3a,0x12,0x68,0xb8,0xc8,0x00,0x32,0x0f,0xf0,0x8c,0x40,0x03,0x1f,}; -const uint8_t* const _I_passport_okay3_46x49[] = {_I_passport_okay3_46x49_0}; - -const uint8_t _I_BatteryBody_52x28_0[] = {0x01,0x00,0x45,0x00,0xe0,0x7f,0x3f,0xe0,0x02,0x87,0xf0,0x21,0xe0,0xc3,0x84,0x50,0x39,0xbf,0xff,0x27,0xfe,0xf3,0x09,0xe0,0x42,0x81,0xab,0x0d,0x03,0x1c,0x2b,0xfc,0x0d,0x48,0x55,0xdc,0x1a,0x90,0x8f,0x18,0x6d,0x41,0xaa,0x1b,0x71,0x4b,0x0d,0xd4,0x1b,0xe0,0xdf,0x1b,0xd5,0xfc,0x1a,0xa5,0x36,0x06,0xac,0x20,0xa7,0xe0,0xdc,0xa5,0x7c,0x7c,0xb7,0xff,0xb4,0x21,0x5c,0xcb,0xc6,}; -const uint8_t* const _I_BatteryBody_52x28[] = {_I_BatteryBody_52x28_0}; - -const uint8_t _I_Battery_16x16_0[] = {0x01,0x00,0x12,0x00,0x00,0x1e,0x02,0x03,0xc0,0x81,0xc8,0x20,0x80,0x11,0xd0,0x41,0x40,0x72,0x11,0x10,0xda,0x80,}; -const uint8_t* const _I_Battery_16x16[] = {_I_Battery_16x16_0}; - -const uint8_t _I_FaceCharging_29x14_0[] = {0x01,0x00,0x28,0x00,0xa0,0x00,0x86,0x05,0x60,0x01,0x8c,0x0e,0x61,0x00,0xc0,0x40,0x63,0x10,0x0e,0x04,0x03,0xf9,0x00,0xf0,0x41,0xc0,0x66,0x13,0xb8,0x40,0x94,0xc0,0x07,0x04,0x82,0x00,0xc6,0x11,0x02,0x01,0x8f,0xc2,0x03,0x00,}; -const uint8_t* const _I_FaceCharging_29x14[] = {_I_FaceCharging_29x14_0}; - -const uint8_t _I_FaceConfused_29x14_0[] = {0x01,0x00,0x30,0x00,0xc0,0x00,0x46,0x1f,0x38,0x80,0xd0,0x22,0x14,0x48,0x0c,0x82,0x0f,0x52,0x80,0xe8,0x21,0x14,0xa0,0x18,0xc2,0xa6,0x59,0x19,0x24,0x27,0x09,0x48,0xa1,0x41,0x2f,0x12,0x4c,0x0c,0x0c,0x51,0x1f,0xc8,0x78,0x0c,0x7f,0xd1,0xf0,0x18,0xc3,0xa3,0x00,0x74,}; -const uint8_t* const _I_FaceConfused_29x14[] = {_I_FaceConfused_29x14_0}; - -const uint8_t _I_FaceNopower_29x14_0[] = {0x01,0x00,0x24,0x00,0x00,0x1f,0x02,0x01,0x60,0x01,0xa7,0x80,0x02,0x57,0xe0,0x48,0xc3,0xe7,0xd0,0x0c,0x04,0x3c,0x39,0x1f,0x88,0x18,0x0c,0x61,0x90,0x60,0x18,0xff,0x82,0x44,0x03,0x38,0x74,0x38,0x2c,0x80,}; -const uint8_t* const _I_FaceNopower_29x14[] = {_I_FaceNopower_29x14_0}; - -const uint8_t _I_FaceNormal_29x14_0[] = {0x01,0x00,0x1e,0x00,0x00,0x1c,0xf2,0x01,0x80,0x83,0xd7,0xa0,0x1c,0x08,0x5d,0xf8,0x06,0x30,0xf0,0x1b,0x84,0xcc,0x41,0x10,0x88,0x10,0x0e,0x62,0x10,0x10,0x18,0xf8,0x00,0x42,}; -const uint8_t* const _I_FaceNormal_29x14[] = {_I_FaceNormal_29x14_0}; - -const uint8_t _I_Health_16x16_0[] = {0x01,0x00,0x12,0x00,0x00,0x2f,0x02,0x03,0x40,0x00,0x95,0xe2,0x1f,0x08,0x84,0x00,0xc4,0x12,0x60,0xf1,0x0c,0xb8,}; -const uint8_t* const _I_Health_16x16[] = {_I_Health_16x16_0}; - -const uint8_t _I_Temperature_16x16_0[] = {0x01,0x00,0x12,0x00,0x00,0x1e,0x02,0x01,0x40,0x80,0x80,0x66,0x41,0x02,0xf0,0x40,0xc0,0x23,0xc0,0x80,0x86,0xd4,}; -const uint8_t* const _I_Temperature_16x16[] = {_I_Temperature_16x16_0}; - -const uint8_t _I_Voltage_16x16_0[] = {0x01,0x00,0x1a,0x00,0x00,0x24,0x0a,0x01,0x03,0xc0,0x40,0x78,0x10,0x1f,0x04,0x03,0xe1,0x07,0xc0,0x40,0xc0,0xe3,0xc0,0x80,0x58,0x20,0x12,0x00,0xd3,0x00,}; -const uint8_t* const _I_Voltage_16x16[] = {_I_Voltage_16x16_0}; - -const uint8_t _I_RFIDBigChip_37x36_0[] = {0x01,0x00,0x6e,0x00,0x83,0x01,0x0f,0xcd,0xff,0x00,0x0c,0x1e,0x24,0x08,0x28,0x47,0x24,0x12,0x51,0x39,0x28,0x24,0xa2,0x91,0x5e,0x07,0xab,0xfe,0x04,0x1c,0x04,0xaa,0x01,0x15,0x02,0x28,0x4c,0x81,0x2c,0x04,0x4e,0x05,0xfc,0x08,0x35,0x59,0x06,0x02,0x81,0x15,0xca,0xe4,0x26,0xf2,0x10,0x70,0xd7,0x66,0x11,0x70,0x70,0xd4,0x20,0x14,0x10,0x70,0xc7,0x68,0x13,0x70,0x70,0xd4,0x28,0x10,0x10,0x4a,0x84,0xc6,0x80,0x13,0x10,0xe8,0xd0,0x03,0xa2,0x27,0x19,0xf0,0x9c,0x46,0x28,0x3b,0x42,0xcf,0x96,0x6a,0xd4,0x13,0x6f,0x2a,0x2c,0xa2,0x90,0x54,0x59,0xfe,0x52,0xa7,0x02,0x4f,0x9f,0xf1,0x52,0x60,}; -const uint8_t* const _I_RFIDBigChip_37x36[] = {_I_RFIDBigChip_37x36_0}; - -const uint8_t _I_RFIDDolphinReceive_97x61_0[] = {0x01,0x00,0x87,0x01,0x00,0x0f,0xfa,0x3e,0x04,0x28,0x08,0x2d,0x78,0x10,0x1f,0x00,0x24,0x70,0x01,0x86,0x98,0x00,0x86,0x0c,0x0c,0x88,0x60,0x08,0x63,0x10,0x0a,0x00,0x31,0xa0,0x40,0x21,0x90,0x03,0x04,0x1a,0x5a,0x08,0x50,0xe9,0x01,0x23,0x20,0x07,0x88,0x30,0xc5,0xa6,0x03,0x10,0x61,0xfc,0x0a,0xa2,0x2d,0x48,0x0c,0x82,0x20,0x04,0x18,0x40,0x40,0x42,0x44,0x37,0x28,0x80,0x30,0xbc,0x94,0xd0,0x62,0x4f,0x20,0x91,0x08,0x44,0x12,0x01,0x17,0xe6,0x40,0x42,0x45,0x00,0xa1,0x03,0x08,0xa8,0x31,0x41,0x88,0x83,0x0f,0x03,0x08,0x06,0x1c,0x1f,0xa1,0x01,0x84,0x1f,0x8a,0x31,0x09,0x0c,0xa5,0x40,0x86,0x30,0x98,0x46,0x02,0x48,0x0c,0x40,0xc9,0x61,0x00,0xe2,0x0c,0x18,0x88,0x65,0xb8,0x85,0x51,0x06,0x21,0x34,0x83,0x23,0x44,0x06,0x29,0x1c,0xb4,0x94,0xf8,0x05,0x19,0x12,0x20,0xc2,0x40,0xb4,0xa8,0x18,0xa9,0xb5,0x9b,0x48,0x28,0x05,0xa1,0x06,0x22,0xd4,0xa3,0x7e,0x05,0x98,0xe0,0x62,0x0c,0xf6,0x86,0xf8,0x16,0x63,0x42,0x06,0x0b,0xa1,0x60,0xfe,0x06,0xe8,0xcf,0x23,0x0d,0x53,0x00,0x14,0x0f,0xe0,0xea,0x28,0xa0,0x31,0xa0,0x3f,0x08,0x18,0x10,0x45,0xa2,0x11,0x20,0x01,0xf4,0x3f,0xe0,0x81,0x84,0x02,0x94,0x18,0xb0,0xc0,0x63,0xc6,0x3f,0xe0,0x31,0x87,0x03,0x1e,0x11,0x3c,0x80,0x47,0xc1,0x91,0x18,0x80,0x58,0x30,0x0e,0x01,0x00,0x30,0xbc,0x47,0xc3,0x05,0x06,0x3c,0x52,0x00,0xe4,0x20,0xcc,0x80,0x04,0x4d,0x00,0x83,0x73,0x08,0x01,0x8f,0xa2,0x0c,0xa1,0xe1,0xa0,0x62,0x16,0x0c,0xac,0x04,0x14,0xd0,0x30,0x08,0x80,0x31,0xb8,0x10,0x27,0x89,0x03,0x1e,0x81,0x05,0xe0,0x01,0x04,0x1e,0x40,0x04,0xd0,0x1c,0x85,0x6a,0x20,0xc7,0xa8,0x02,0x84,0xd2,0x34,0x00,0x63,0x6c,0x11,0xe2,0x4b,0x10,0x63,0xd6,0x20,0x16,0xa9,0x80,0x32,0x35,0x90,0x0e,0xa5,0x04,0x19,0x15,0x48,0x06,0xa3,0x07,0x01,0x06,0x3c,0xa8,0x84,0x30,0xf8,0x10,0x31,0xe2,0xa5,0xc1,0x8f,0x7f,0x2b,0xe9,0xa8,0xa0,0x5f,0x60,0x04,0x21,0x00,0x29,0x98,0x74,0x1f,0xa8,0x0a,0x39,0xc0,0x05,0xf5,0x83,0xb0,0xa0,0x00,0x3e,0xaf,0xfc,0x1c,0x19,0x3d,0x01,0xfb,0xaa,0xd3,0x3c,0x0c,0xaa,0x06,0x54,0x19,0x50,0x0c,0xd0,0x32,0xe2,0x05,0xf1,0x00,0x4c,0x20,0x19,0xe0,0xc9,0x7d,0x08,0x33,0xc0,0x04,}; -const uint8_t* const _I_RFIDDolphinReceive_97x61[] = {_I_RFIDDolphinReceive_97x61_0}; - -const uint8_t _I_RFIDDolphinSend_97x61_0[] = {0x01,0x00,0x8d,0x01,0x00,0x0f,0xfa,0x3e,0x04,0x2a,0x00,0x2d,0x78,0x10,0x1f,0x04,0x04,0x0a,0x38,0x00,0x62,0xcc,0x00,0x43,0x06,0x06,0x44,0x30,0x04,0x31,0x80,0x31,0x07,0x48,0x00,0x50,0x20,0x10,0xc8,0x01,0x64,0x0c,0x1d,0x04,0x28,0x24,0x83,0xd2,0x81,0x04,0xc4,0x18,0x42,0xc3,0x01,0x90,0x30,0xbe,0x05,0x51,0x29,0xa0,0x74,0x60,0x80,0xc1,0x84,0x0b,0x44,0x5e,0x43,0x73,0x82,0x41,0x20,0x1e,0x4a,0x68,0x31,0x27,0x90,0x48,0x84,0x20,0x18,0x31,0x7e,0x64,0x06,0x20,0x0c,0x2a,0x14,0x12,0x40,0x0c,0x28,0xa0,0xc4,0x41,0x87,0x81,0x17,0x08,0x30,0xa0,0xfd,0x08,0x0c,0x20,0xfc,0x38,0x08,0xc4,0x24,0x32,0x95,0x02,0x18,0xc2,0x61,0x18,0x09,0x20,0x31,0x03,0x25,0x84,0x1d,0x88,0x30,0x62,0x21,0x96,0xe2,0x44,0x22,0x00,0xc2,0x26,0xa0,0x64,0x68,0x80,0xc4,0x33,0x9e,0x92,0x9f,0x00,0xa3,0x48,0x24,0x00,0xc4,0x40,0xa4,0xa8,0x18,0xa9,0xb5,0x9b,0x48,0x28,0x05,0xa1,0x06,0x22,0xd4,0xa3,0x7e,0x05,0x98,0xe0,0x4f,0x22,0xcf,0x58,0x6f,0x80,0x10,0x34,0x24,0x31,0x3a,0x52,0x0f,0xe0,0x03,0x0c,0xf1,0xee,0x2d,0x63,0x00,0x0c,0x0f,0xe0,0x13,0x28,0xa0,0x31,0xa0,0x3f,0x08,0x18,0x10,0x45,0xa2,0xe3,0x40,0x00,0xf4,0x3f,0xe1,0xa1,0x84,0x02,0x94,0x18,0xb0,0xc0,0x63,0xc6,0x3f,0xe0,0x31,0x87,0x03,0x1e,0x11,0x3c,0x80,0x47,0xc1,0x90,0x56,0x1b,0x06,0x01,0xc0,0x20,0x06,0x17,0x88,0xf8,0x60,0xa0,0xc7,0x31,0x8a,0x58,0x60,0xe1,0x99,0x00,0x08,0x9a,0x01,0x06,0xd9,0x10,0x03,0x1f,0x44,0x19,0x43,0xc3,0x40,0xc4,0x2c,0x19,0x58,0x08,0x29,0xa0,0x60,0x0c,0xf2,0x00,0x27,0x02,0x05,0x20,0x06,0x4d,0x02,0x0b,0xc0,0x02,0x08,0x3c,0x80,0x09,0xa0,0x39,0x0a,0xd4,0x41,0x8f,0x50,0x05,0x09,0xa4,0x5b,0x4d,0x00,0xd8,0x23,0xc4,0x96,0x20,0xc7,0xac,0x40,0x2d,0x53,0x00,0x64,0x6b,0x20,0x1d,0x4a,0x08,0x32,0x2a,0x90,0x0d,0x46,0x0e,0x02,0x0c,0x79,0x51,0x08,0x61,0xf0,0x20,0x63,0xc5,0x4b,0x83,0x1e,0xfe,0x57,0xd3,0x51,0x40,0xbe,0xc0,0x08,0x42,0x00,0x53,0x30,0xe8,0x3f,0x50,0x14,0x73,0x80,0x0b,0xeb,0x07,0x61,0x40,0x00,0x7d,0x5f,0xf8,0x38,0x32,0x7a,0x03,0xf7,0x55,0xa6,0x78,0x19,0x54,0x0c,0xa8,0x32,0xa0,0x19,0xa0,0x65,0xc4,0x0b,0xe2,0x00,0x98,0x40,0x33,0xc1,0x92,0xfa,0x10,0x67,0x80,0x08,}; -const uint8_t* const _I_RFIDDolphinSend_97x61[] = {_I_RFIDDolphinSend_97x61_0}; - -const uint8_t _I_RFIDDolphinSuccess_108x57_0[] = {0x01,0x00,0xe7,0x01,0x00,0x0f,0x03,0xff,0x1f,0x06,0xd4,0xe2,0x01,0xe0,0x06,0xd4,0x18,0x04,0x30,0x30,0x64,0x60,0x20,0x20,0x31,0x86,0x03,0x62,0x80,0x03,0x28,0x80,0x36,0x24,0x00,0x36,0x00,0x28,0x5c,0xc3,0xe6,0x00,0x58,0x40,0xec,0xc1,0xb1,0x04,0x02,0x19,0x24,0x80,0x0b,0x02,0x02,0x40,0x37,0xc4,0x8c,0x2e,0x40,0x6f,0x93,0x8b,0x81,0x07,0x06,0xdc,0xc2,0x38,0x66,0x50,0x6a,0xe2,0x27,0xe0,0xd2,0xfc,0x08,0x09,0x0c,0x9c,0x4b,0x98,0x34,0xa0,0xe1,0xd5,0x06,0x8f,0x92,0xc2,0x05,0x1e,0x42,0xe1,0x81,0xa3,0xe2,0xf0,0xbc,0x4c,0x1a,0xff,0x2f,0x9b,0x80,0xd8,0xca,0x05,0x1f,0x97,0xfd,0xf8,0x60,0xd2,0x01,0x1e,0x00,0x1a,0x5c,0x00,0x08,0xc9,0xc1,0xab,0x40,0xf9,0x83,0x46,0x61,0x00,0xd8,0x4a,0x81,0xab,0xa0,0xf3,0x5f,0xc6,0x05,0x58,0x8a,0xa4,0x09,0x76,0x21,0xb1,0xf2,0x83,0x4f,0x5d,0x1a,0x01,0x8c,0x90,0x1a,0x31,0x0d,0x07,0xa9,0x16,0x50,0x0a,0xac,0x34,0xba,0x42,0xa1,0x88,0x50,0x23,0xaa,0x72,0xe0,0x6a,0xa1,0x4a,0x32,0x39,0x88,0x6c,0x60,0xc7,0x82,0xb0,0x55,0x60,0xa2,0x92,0x80,0xc0,0x43,0x63,0x03,0x25,0x96,0xe3,0x54,0x33,0x18,0xc4,0x90,0x22,0x21,0x81,0x81,0x03,0x4a,0xa9,0x55,0x7a,0x17,0xf3,0x82,0x9f,0x6d,0x5e,0xa9,0xb6,0x50,0x38,0x70,0x35,0x70,0x15,0x5a,0xa9,0xb8,0xa3,0x46,0x12,0x06,0x9f,0x83,0x54,0x8a,0x28,0x80,0x34,0xfc,0x08,0x93,0xaa,0xc7,0x40,0x83,0x83,0x81,0xd3,0xa1,0xd1,0x08,0x84,0x0c,0x24,0x3f,0xed,0x54,0x18,0x26,0x50,0x20,0xd9,0x42,0x21,0x90,0x4c,0x07,0xff,0xae,0x52,0x20,0x6a,0xc4,0x23,0x1f,0x88,0x3f,0xf0,0x1a,0x45,0x31,0xe7,0x03,0x4a,0x41,0xe0,0x69,0x0f,0xc2,0x1e,0x0d,0x19,0x80,0x48,0xa2,0x10,0xc5,0x68,0xdf,0x0a,0x82,0xb9,0x28,0x22,0x2c,0xe3,0x0a,0xd1,0x2b,0x0f,0x00,0x3c,0x22,0x91,0x53,0x9c,0x50,0x1a,0x30,0x08,0x39,0x1c,0x60,0x6d,0x12,0x3d,0x8c,0xc2,0x51,0x00,0x17,0x0c,0xe2,0x01,0xff,0x83,0x84,0xc6,0x40,0xb0,0x19,0x84,0xd0,0x1a,0x5c,0x08,0x1f,0xf8,0x8c,0x50,0x43,0x08,0xce,0x2d,0x06,0x71,0x5f,0x17,0xfe,0x12,0xdf,0x20,0x69,0x55,0x01,0xa6,0x00,0x18,0x40,0xa4,0x80,0x63,0x3c,0xb5,0x03,0x56,0x08,0x8b,0x20,0x10,0xcf,0x03,0x62,0x08,0x20,0x00,0x94,0xc6,0x01,0x70,0x01,0x0c,0xe8,0x36,0x20,0xd3,0xe0,0x00,0xcb,0x10,0x02,0x19,0xf3,0x9c,0x41,0xa3,0x15,0x31,0x90,0x00,0x70,0xc0,0x21,0xdd,0x86,0xc4,0x78,0x3e,0xa3,0x71,0xe0,0x30,0x20,0x31,0xbe,0x86,0xc4,0x1a,0x35,0x40,0x20,0x8d,0x89,0x28,0x5b,0xa0,0xd9,0xea,0x3d,0x44,0x42,0x87,0x83,0x48,0x36,0x49,0xe1,0xa0,0x75,0x67,0x8d,0x41,0x54,0x14,0x03,0xf5,0x2a,0x06,0x96,0x03,0x54,0xc4,0x14,0xd0,0x83,0x4a,0xfb,0x35,0x06,0x90,0x38,0x4e,0x46,0xb4,0x10,0xd9,0x81,0x49,0x72,0x40,0x01,0x0a,0x95,0xd4,0x36,0x20,0xd7,0x55,0x10,}; -const uint8_t* const _I_RFIDDolphinSuccess_108x57[] = {_I_RFIDDolphinSuccess_108x57_0}; - -const uint8_t _I_SDQuestion_35x43_0[] = {0x01,0x00,0x67,0x00,0xf8,0x7f,0xc0,0x03,0x03,0xfc,0x01,0x0a,0x0f,0x38,0xa4,0xe4,0xa4,0x80,0x4f,0x0c,0x20,0x13,0xc0,0x9f,0x80,0x02,0x15,0xfe,0x00,0x04,0x29,0xfc,0x03,0xfd,0x07,0xfa,0x47,0xe7,0xdf,0xc8,0x3f,0xea,0x1f,0x7f,0xfc,0x41,0xff,0xb8,0xff,0xf8,0x10,0x7f,0xe0,0x4e,0xef,0x86,0x08,0x68,0x33,0xf1,0x10,0xff,0x3f,0xf1,0xf1,0x60,0x81,0x06,0x1e,0x36,0x10,0x20,0xe1,0xc0,0x87,0xc7,0x02,0x0f,0xd3,0xff,0xe3,0x02,0x0f,0xe8,0x08,0x7f,0xd0,0x21,0x89,0xc4,0x08,0x9f,0x70,0x21,0x9a,0x08,0x08,0xc1,0x89,0x02,0x20,0x62,0x40,0x8f,0xfe,0x68,0x98,}; -const uint8_t* const _I_SDQuestion_35x43[] = {_I_SDQuestion_35x43_0}; - -const uint8_t _I_Cry_dolph_55x52_0[] = {0x01,0x00,0xe8,0x00,0x00,0x0f,0xe3,0xff,0x01,0x03,0x1f,0xfb,0xff,0x0f,0x02,0x96,0x02,0x0f,0x00,0x9f,0x01,0x8b,0xc0,0x12,0x1f,0x80,0x18,0xae,0x00,0x21,0xe0,0x07,0x0a,0x30,0x0a,0x28,0x18,0x08,0x61,0x80,0x62,0x83,0x00,0x90,0x14,0x61,0x02,0x0c,0x16,0x00,0x76,0x60,0x66,0x98,0x0b,0x04,0x90,0x60,0x66,0xb0,0x00,0x48,0x0d,0x21,0x21,0x03,0x30,0x74,0x40,0xd3,0x80,0x03,0x34,0x04,0xc0,0x52,0x00,0x32,0xc7,0xa0,0x18,0x80,0x31,0x80,0x07,0xe1,0x01,0x37,0x18,0x50,0x80,0xc2,0x92,0x10,0x31,0xe8,0x23,0xe9,0x63,0x86,0x54,0x3f,0xe0,0xe1,0x0d,0x96,0x83,0xfc,0x06,0x40,0x69,0x6c,0x3c,0x60,0xd2,0xfc,0xc0,0x60,0x58,0x48,0x0c,0x1b,0x81,0x08,0x14,0x9c,0x1a,0x81,0x04,0x03,0x46,0x80,0x0c,0x50,0x26,0x21,0xc1,0x94,0x26,0x14,0x27,0x8a,0x40,0xc0,0xc2,0xe7,0x26,0x40,0x81,0x86,0xc0,0x6b,0x28,0x64,0x0f,0x01,0x10,0x4e,0x14,0x60,0x0c,0x29,0x02,0x48,0x8b,0x5c,0x45,0x22,0x01,0x10,0x31,0x3a,0x4c,0x0c,0x34,0x06,0xf1,0xd8,0x00,0xc5,0x1a,0x64,0x94,0x0c,0xc0,0x37,0x52,0x20,0x81,0x84,0x26,0x3e,0x88,0x0c,0x38,0x28,0x54,0x0e,0xac,0x1f,0xe1,0x3f,0x06,0x96,0x82,0x7e,0x29,0x4a,0xaf,0xfd,0x76,0x30,0x3a,0x41,0x14,0x7f,0xd0,0xf8,0x78,0x18,0xaa,0x9f,0xd4,0xe0,0x83,0x4f,0xf5,0xf7,0x38,0x0b,0x9c,0x6a,0x1f,0x5b,0x5c,0x00,}; -const uint8_t* const _I_Cry_dolph_55x52[] = {_I_Cry_dolph_55x52_0}; - -const uint8_t _I_Attention_5x8_0[] = {0x00,0x0E,0x0A,0x0A,0x0A,0x0E,0x04,0x00,0x0E,}; -const uint8_t* const _I_Attention_5x8[] = {_I_Attention_5x8_0}; - -const uint8_t _I_Background_128x11_0[] = {0x01,0x00,0x70,0x00,0xff,0x40,0x40,0xc9,0xe0,0xff,0x80,0x06,0x1e,0x08,0x38,0x0c,0x0c,0x1e,0x93,0x00,0x19,0x46,0x01,0x07,0x7d,0x83,0x03,0xd2,0x31,0xff,0xdb,0xd5,0x66,0x20,0x83,0xc0,0xff,0x05,0x24,0x00,0x1c,0x78,0x28,0xbc,0x40,0x72,0xbf,0xcf,0x47,0xeb,0x40,0xdb,0x7a,0xbf,0xf0,0x40,0x39,0x60,0x28,0x3f,0xe0,0xa0,0xea,0x80,0x63,0x3f,0x0b,0x17,0xe4,0x3e,0x5a,0xbc,0xf9,0x99,0x70,0x1f,0x81,0x50,0xc0,0x80,0xe7,0x3e,0x1e,0x9d,0x57,0xfb,0x7f,0x23,0x15,0xb0,0x12,0x5b,0x5b,0x02,0x1d,0x8c,0xc3,0x80,0x24,0x9e,0x03,0x80,0x5e,0x40,0x00,0xa1,0x88,0x0e,0x98,0x00,0x7b,0x07,0x08,0xb2,0x44,0x41,}; -const uint8_t* const _I_Background_128x11[] = {_I_Background_128x11_0}; - -const uint8_t _I_BadUsb_9x8_0[] = {0x00,0x01,0x01,0xBB,0x01,0xFE,0x00,0xFE,0x00,0xD6,0x00,0xD6,0x00,0x7C,0x00,0x38,0x00,}; -const uint8_t* const _I_BadUsb_9x8[] = {_I_BadUsb_9x8_0}; - -const uint8_t _I_Battery_19x8_0[] = {0x01,0x00,0x0f,0x00,0xff,0x7f,0xe0,0x30,0x18,0x04,0x08,0x04,0x90,0x60,0x12,0x02,0xcc,0x28,0x40,}; -const uint8_t* const _I_Battery_19x8[] = {_I_Battery_19x8_0}; - -const uint8_t _I_Battery_26x8_0[] = {0x01,0x00,0x13,0x00,0xff,0x7f,0xef,0xf0,0x08,0x0c,0x03,0x00,0x03,0x38,0x18,0x0c,0xa0,0x40,0x36,0x05,0x98,0x6d,0x00,}; -const uint8_t* const _I_Battery_26x8[] = {_I_Battery_26x8_0}; - -const uint8_t _I_Bluetooth_Connected_16x8_0[] = {0x00,0x04,0x00,0x0D,0x00,0x16,0x60,0x4C,0x97,0x4C,0x97,0x16,0x60,0x0D,0x00,0x04,0x00,}; -const uint8_t* const _I_Bluetooth_Connected_16x8[] = {_I_Bluetooth_Connected_16x8_0}; - -const uint8_t _I_Bluetooth_Idle_5x8_0[] = {0x00,0x04,0x0D,0x16,0x0C,0x0C,0x16,0x0D,0x04,}; -const uint8_t* const _I_Bluetooth_Idle_5x8[] = {_I_Bluetooth_Idle_5x8_0}; - -const uint8_t _I_Charging_lightning_9x10_0[] = {0x00,0x40,0x01,0xA0,0x00,0x50,0x00,0xE8,0x01,0x84,0x00,0x42,0x00,0x2F,0x00,0x14,0x00,0x0A,0x00,0x05,0x00,}; -const uint8_t* const _I_Charging_lightning_9x10[] = {_I_Charging_lightning_9x10_0}; - -const uint8_t _I_Charging_lightning_mask_9x10_0[] = {0x00,0x80,0x00,0x40,0x00,0x20,0x00,0x10,0x00,0x78,0x00,0x3C,0x00,0x10,0x00,0x08,0x00,0x04,0x00,0x02,0x00,}; -const uint8_t* const _I_Charging_lightning_mask_9x10[] = {_I_Charging_lightning_mask_9x10_0}; - -const uint8_t _I_Lock_8x8_0[] = {0x00,0x3C,0x42,0x42,0xFF,0xFF,0xE7,0xFF,0xFF,}; -const uint8_t* const _I_Lock_8x8[] = {_I_Lock_8x8_0}; - -const uint8_t _I_PlaceholderL_11x13_0[] = {0x01,0x00,0x10,0x00,0xfe,0x40,0x60,0x50,0x28,0x0c,0x10,0x03,0xb0,0x38,0x37,0xfe,0x07,0xfe,0x80,0x80,}; -const uint8_t* const _I_PlaceholderL_11x13[] = {_I_PlaceholderL_11x13_0}; - -const uint8_t _I_PlaceholderR_30x13_0[] = {0x01,0x00,0x19,0x00,0xfe,0x7f,0xff,0xf0,0xf8,0x10,0x18,0x62,0x10,0x10,0x18,0xc8,0x00,0x7e,0x03,0xb8,0x18,0x0c,0x66,0x1f,0xe1,0x58,0xc7,0xc5,0xe6,}; -const uint8_t* const _I_PlaceholderR_30x13[] = {_I_PlaceholderR_30x13_0}; - -const uint8_t _I_SDcardFail_11x8_0[] = {0x00,0xFF,0x07,0xB7,0x07,0xFF,0x07,0x87,0x07,0x7B,0x07,0xFF,0x07,0xFF,0x07,0x67,0x00,}; -const uint8_t* const _I_SDcardFail_11x8[] = {_I_SDcardFail_11x8_0}; - -const uint8_t _I_SDcardMounted_11x8_0[] = {0x01,0x00,0x09,0x00,0xff,0xc1,0xff,0xf0,0x40,0x1c,0xd9,0xe0,0x00,}; -const uint8_t* const _I_SDcardMounted_11x8[] = {_I_SDcardMounted_11x8_0}; - -const uint8_t _I_Lock_7x8_0[] = {0x00,0x1C,0x22,0x22,0x7F,0x7F,0x77,0x7F,0x3E,}; -const uint8_t* const _I_Lock_7x8[] = {_I_Lock_7x8_0}; - -const uint8_t _I_MHz_25x11_0[] = {0x01,0x00,0x21,0x00,0xe1,0xe1,0xa0,0x30,0x0f,0x38,0x0c,0xbf,0xe0,0x34,0xfe,0xc0,0x7b,0x7f,0xe0,0x19,0xf0,0x60,0x1d,0xbc,0x35,0x84,0x36,0x53,0x10,0x19,0x46,0x40,0x64,0x13,0x10,0x19,0x80,}; -const uint8_t* const _I_MHz_25x11[] = {_I_MHz_25x11_0}; - -const uint8_t _I_Quest_7x8_0[] = {0x00,0x1E,0x33,0x33,0x30,0x18,0x0C,0x00,0x0C,}; -const uint8_t* const _I_Quest_7x8[] = {_I_Quest_7x8_0}; - -const uint8_t _I_Scanning_123x52_0[] = {0x01,0x00,0xd3,0x01,0x00,0x78,0x03,0xc0,0x1f,0x00,0xe0,0x7f,0xc1,0xfb,0xf0,0x80,0x41,0xc0,0xc7,0x03,0x07,0xbe,0xb2,0x07,0x18,0x07,0xc4,0x40,0x06,0x55,0x68,0x2d,0x80,0x0a,0x58,0x08,0x10,0x3c,0xe1,0x00,0x32,0xc0,0xc2,0xb0,0x00,0xf8,0x82,0x02,0x0a,0x01,0x15,0x80,0x40,0x40,0xc3,0x40,0x07,0xa0,0x10,0xa8,0x10,0x09,0xc0,0x19,0x01,0xe9,0x82,0x01,0x0c,0x82,0x01,0x74,0x13,0x1d,0x03,0x04,0x24,0x28,0x05,0x04,0x1e,0x76,0x80,0x79,0xc8,0x30,0x50,0x28,0x30,0x14,0x64,0x26,0x23,0xe8,0x78,0x21,0xe0,0xf4,0x85,0x43,0x30,0x12,0x03,0x00,0x83,0xc7,0x41,0x1c,0x3b,0x10,0x3c,0xe2,0x98,0x08,0x80,0xa4,0x61,0x1e,0x0e,0x9c,0x0c,0x1e,0x51,0x00,0x7a,0x95,0x46,0x11,0x90,0xd3,0xd0,0x24,0x80,0xfb,0xe4,0x5f,0xf0,0x92,0x80,0x79,0x61,0x01,0xe3,0xff,0x07,0x9e,0x22,0xcf,0x3e,0xc4,0x03,0xd3,0xf5,0xff,0x07,0xa5,0x12,0xc9,0x2e,0x07,0xa7,0xf3,0x5f,0xff,0x8a,0x93,0xce,0x89,0xe4,0x97,0xe2,0x25,0x40,0xf1,0x8c,0x75,0x3b,0xf1,0xf1,0xf8,0x9b,0xc8,0x1e,0x55,0x0f,0xfc,0x03,0xfd,0x1f,0xf6,0x4f,0xc9,0xe2,0x8f,0x3a,0x27,0x12,0x5f,0xea,0x68,0x0c,0x06,0x35,0xfc,0x2f,0x92,0xbc,0xf0,0x98,0x89,0x7c,0x75,0x8e,0x37,0xd8,0xf1,0x7c,0xa3,0x0c,0xf3,0xc3,0x47,0xf8,0xcb,0x81,0xc2,0x5f,0x62,0xc0,0xf2,0x77,0xa5,0x1b,0xeb,0xc3,0x6c,0x8d,0x12,0x03,0x22,0x07,0x8c,0x30,0x18,0x2d,0x82,0xc3,0xc2,0xaf,0x84,0x42,0x81,0xc8,0xb1,0x01,0xb2,0x4e,0x08,0x08,0x68,0xb0,0x50,0x20,0xdf,0xb4,0x90,0x3a,0x10,0x3d,0x19,0x05,0x86,0x1e,0x8f,0x03,0x03,0xa5,0x83,0xd0,0xa1,0x10,0x30,0x79,0x00,0x0a,0x0a,0x02,0x19,0x84,0x03,0xa5,0xff,0xc0,0x8a,0x88,0x00,0x81,0xe1,0x80,0x12,0x07,0xa5,0x1f,0xc0,0x03,0xde,0x0b,0x80,0x80,0x0a,0x47,0xa3,0x1f,0x80,0x42,0x43,0xf1,0xe1,0x80,0x60,0x3d,0x30,0xf8,0x04,0x48,0x3e,0xf0,0x08,0xf1,0x40,0x7d,0x00,0xf1,0x56,0x08,0xfe,0x20,0x17,0x0f,0x70,0x3c,0x55,0x82,0x00,0x58,0x38,0x0c,0xa7,0x9f,0x90,0x78,0x80,0x1c,0xec,0x5a,0xac,0xff,0xc0,0x1f,0x30,0x1a,0x05,0x57,0xfb,0x5f,0xf8,0x45,0xc3,0xf3,0x80,0xf5,0x7f,0xe7,0xfe,0x00,0x7c,0x87,0xc7,0xab,0xff,0x8f,0x83,0xea,0x05,0x80,0xd5,0x7f,0xe1,0xfe,0x08,0x98,0x7e,0x60,0x15,0x5a,0xac,0x0f,0xe1,0x15,0x0f,0xc9,0x78,0x75,0x50,0x0d,0x84,0x28,0x3f,0x55,0x4b,0xac,0x02,0xb1,0x0d,0x0f,0xd6,0xa0,0xf8,0x3a,0x85,0x29,0xaf,0xde,0xf8,0x04,0x1a,0xe2,0x54,0x83,0xf0,0x00,0x2d,0x70,0xd4,0x43,0xf2,0x00,0x2e,0xb8,0x3a,0x20,0x05,0x93,0xc0,0x5e,0xc1,0xf2,0x79,0x3e,0x04,0x7c,0x1f,0x32,0xa0,0x19,0x7c,0x1e,0x86,0x00,0x6a,0xa8,0x0c,0xbf,0x84,0xe9,0x4e,0x88,0x0c,0x85,0xd5,0x00,}; -const uint8_t* const _I_Scanning_123x52[] = {_I_Scanning_123x52_0}; - -const uint8_t _I_Unlock_7x8_0[] = {0x00,0x1C,0x22,0x02,0x4F,0x67,0x73,0x79,0x3C,}; -const uint8_t* const _I_Unlock_7x8[] = {_I_Unlock_7x8_0}; - -const uint8_t _I_Auth_62x31_0[] = {0x01,0x00,0xaf,0x00,0x00,0x47,0xc2,0xfe,0x07,0x58,0x66,0x02,0x02,0x07,0x48,0x1c,0x02,0x0c,0x06,0x3c,0x00,0x08,0x61,0x00,0x73,0xa0,0x00,0x86,0x20,0x02,0x1b,0x04,0x02,0x40,0x04,0x10,0x11,0x01,0xc4,0x18,0x40,0x72,0xf0,0x40,0x40,0xe4,0x1a,0x20,0x38,0xc2,0x3e,0x00,0x71,0xbc,0x05,0xca,0x11,0x08,0x80,0xe0,0x30,0xc0,0x72,0x82,0x7d,0x20,0x44,0x81,0x80,0x81,0xcb,0x75,0x05,0x02,0x08,0x1c,0xe7,0x50,0x58,0xc0,0x94,0x40,0xe5,0xfa,0x82,0xc1,0xbf,0x06,0xc1,0x80,0x40,0x80,0xe3,0x00,0xbe,0x40,0x3f,0x10,0x18,0x17,0xd0,0xd0,0x33,0xf3,0xa0,0xc0,0xe0,0x52,0x88,0x26,0x02,0x3e,0x1d,0x18,0x14,0x08,0xa0,0x3c,0x08,0x78,0x3c,0xc0,0xe3,0xe0,0x83,0x87,0xcd,0x32,0x42,0x11,0x17,0x90,0x04,0x61,0x9f,0xf8,0x06,0x20,0x0e,0x41,0xb1,0x9e,0x1b,0x44,0x2e,0x5f,0x0f,0xfc,0x0c,0x0e,0x80,0x02,0x80,0xc1,0x00,0xe8,0xab,0x11,0xf9,0x01,0xca,0xe0,0x07,0x68,0x60,0xb4,0x40,0xe7,0xfe,0x1f,0x88,0x1d,0x09,0x82,0x28,0x10,0xba,0x01,0xcc,}; -const uint8_t* const _I_Auth_62x31[] = {_I_Auth_62x31_0}; - -const uint8_t _I_Connect_me_62x31_0[] = {0x01,0x00,0xb7,0x00,0x00,0x47,0xc2,0xfe,0x07,0x58,0x66,0x02,0x02,0x07,0x48,0x1c,0x02,0x0c,0x06,0x3c,0x00,0x08,0x61,0x00,0x73,0xa0,0x00,0x86,0x20,0x02,0x1b,0xe4,0x02,0x40,0x04,0x10,0x11,0x51,0x01,0x86,0x07,0x2b,0x60,0x1c,0xc3,0x44,0x0f,0x18,0x47,0xc0,0x0e,0x37,0x80,0xf9,0x42,0x21,0x10,0x1c,0x06,0x1a,0x01,0x82,0x80,0x41,0x3e,0x90,0x22,0x40,0xc0,0x40,0xe5,0xba,0x82,0xd8,0x20,0x00,0x73,0x9d,0x41,0x63,0x1e,0x00,0x39,0xfe,0xa0,0xb0,0x6f,0xc0,0x7c,0xa0,0x40,0x71,0x16,0x90,0x1c,0xbe,0x86,0x81,0x9f,0x81,0xce,0x51,0x04,0xc0,0x47,0xe0,0x1f,0xe0,0x38,0x94,0x07,0x81,0x0f,0x80,0x4a,0x00,0xe7,0xe0,0x83,0x81,0xcd,0x32,0x42,0x11,0x03,0x9c,0x0a,0x19,0xff,0x80,0x4e,0x00,0xe5,0x0c,0x81,0xcf,0x20,0x21,0xc1,0x03,0x8f,0xc3,0xff,0x03,0x80,0x92,0x44,0x3e,0x40,0x01,0x80,0xc1,0x20,0x60,0x73,0x55,0x8c,0x0a,0x08,0x07,0x3b,0x80,0x1c,0x61,0x00,0x73,0x86,0x11,0x48,0x0e,0x5f,0xe1,0xf8,0xc3,0x00,0xe7,0xf8,0x6c,0x0c,0x42,0x40,0x17,0x30,0x38,0xcc,0x24,0x00,}; -const uint8_t* const _I_Connect_me_62x31[] = {_I_Connect_me_62x31_0}; - -const uint8_t _I_Connected_62x31_0[] = {0x01,0x00,0xaa,0x00,0x00,0x47,0xc2,0xfe,0x07,0x58,0x66,0x02,0x02,0x07,0x48,0x1c,0x02,0x0c,0x06,0x3c,0x00,0x08,0x61,0x00,0x73,0xa0,0x00,0x86,0x20,0x07,0x39,0x00,0x09,0x01,0x88,0x07,0x70,0xd1,0x09,0x0b,0xe0,0x07,0x1b,0xc0,0x1c,0xe1,0x10,0x1c,0x06,0x18,0x0e,0x50,0x4f,0xa4,0x08,0x90,0x24,0x92,0x82,0x6e,0xa0,0xb6,0x08,0x07,0x04,0x10,0x30,0x49,0xd4,0x16,0x31,0xe0,0xa0,0xfc,0x80,0xe3,0xfa,0x82,0xc1,0xbf,0x14,0x08,0x64,0x06,0x04,0x07,0x18,0x05,0xf2,0x81,0x04,0x81,0x40,0xbe,0x86,0x81,0x9f,0xe0,0x20,0x80,0x81,0x94,0x41,0x30,0x11,0xf0,0x39,0x94,0x07,0x81,0x0f,0x03,0xaf,0x82,0x0f,0x00,0x84,0x81,0xc5,0x32,0x42,0x11,0x98,0x89,0xc6,0x01,0x02,0x86,0x7f,0xc9,0x03,0x03,0x03,0x8c,0x32,0x07,0x3c,0x2c,0x08,0x3c,0xbe,0x1f,0xf8,0x18,0x1d,0x00,0x05,0x81,0x0e,0x08,0x1c,0xf0,0x0a,0xc1,0x03,0xa5,0xc0,0x0e,0xd0,0xc4,0xc8,0x81,0xcf,0xfd,0x03,0x03,0xaf,0xe2,0x02,0xb1,0x10,0xba,0x01,0xcc,}; -const uint8_t* const _I_Connected_62x31[] = {_I_Connected_62x31_0}; - -const uint8_t _I_Drive_112x35_0[] = {0x01,0x00,0x72,0x00,0xf0,0x7f,0xc0,0x0f,0x1f,0x06,0x94,0x40,0x2f,0x12,0x00,0x19,0x42,0x01,0xb1,0x40,0x01,0x94,0x10,0x1b,0x18,0x00,0x19,0x41,0x81,0xb9,0x07,0x06,0xc9,0x24,0x81,0xb4,0x02,0x20,0x6f,0x83,0x66,0x7c,0x0d,0xc9,0x10,0x6f,0xc1,0xbe,0x0d,0xf2,0x9f,0x83,0x7c,0x14,0x3f,0x8f,0xff,0xe4,0x1b,0x4c,0xe1,0xc4,0x83,0x6a,0x1f,0x00,0xc7,0x8d,0xfc,0xc3,0xe0,0xdf,0x06,0xfa,0xd7,0xc3,0x7e,0x99,0xf0,0x6d,0x7f,0xc0,0x02,0x0d,0xcb,0xf8,0x37,0x27,0xe3,0x7c,0x80,0x2a,0x84,0x00,0xf4,0x00,0x19,0x47,0xc1,0xb1,0x20,0x01,0x97,0xf8,0x92,0x40,0x05,0x0b,0x9f,0xf0,0x1b,0x03,0x33,0x7f,0x08,0x01,0xc9,0xe6,}; -const uint8_t* const _I_Drive_112x35[] = {_I_Drive_112x35_0}; - -const uint8_t _I_Error_62x31_0[] = {0x01,0x00,0x9e,0x00,0x00,0x47,0xc2,0xfe,0x07,0x58,0x66,0x02,0x02,0x07,0x48,0x1c,0x02,0x0c,0x06,0x3c,0x00,0x08,0x61,0x00,0x73,0xa0,0x00,0x86,0x20,0x07,0x39,0x00,0x09,0x01,0x88,0x07,0x70,0xd1,0x09,0x0b,0xe0,0x07,0x38,0x1c,0x62,0x11,0x08,0x80,0x8c,0x8a,0x0f,0x1c,0x82,0x7d,0x20,0x58,0x0b,0xe4,0x02,0x1d,0x0e,0x82,0x6e,0xa0,0xb8,0x0c,0x1c,0x02,0x39,0x07,0x82,0x4e,0xa0,0xb7,0x08,0x04,0x07,0x71,0x03,0x82,0x7e,0xa0,0xb0,0xe8,0x04,0x0b,0xe1,0x01,0x81,0x01,0xc6,0x01,0xc0,0x81,0xf8,0x01,0x42,0x27,0x18,0x04,0xc0,0x1e,0x63,0x71,0x3d,0x0c,0x08,0x3e,0x20,0xa1,0x22,0x94,0x08,0x5e,0x21,0x51,0x0f,0x08,0xbc,0x47,0xe2,0x07,0x29,0x81,0x40,0x49,0xe2,0x07,0x28,0x61,0x80,0x4b,0xe2,0x07,0x28,0x19,0xe0,0xc0,0xe2,0x0d,0x18,0xc0,0x1d,0x00,0x02,0xa8,0x30,0x39,0x2e,0x10,0x0e,0x5e,0x00,0x3b,0x7e,0x00,0xec,0x46,0x10,0x3f,0x80,0xc8,}; -const uint8_t* const _I_Error_62x31[] = {_I_Error_62x31_0}; - -const uint8_t _I_Updating_32x40_0[] = {0x01,0x00,0x56,0x00,0xc0,0x7f,0xc0,0x03,0xc0,0x01,0x97,0x82,0x07,0x00,0xe0,0x5c,0x00,0x65,0x38,0x01,0x94,0x70,0x06,0x50,0xe0,0x19,0x41,0xc0,0x65,0xff,0x01,0xb4,0x0c,0x02,0x7e,0x08,0x38,0x0c,0x7c,0xd6,0x70,0x18,0xfb,0xfe,0xfc,0x0c,0x18,0xc8,0x78,0x20,0x33,0x81,0x8f,0x8a,0x07,0x3e,0xbe,0x70,0x38,0x71,0xff,0xc7,0x0f,0xc7,0x0f,0xf8,0x71,0xc0,0x76,0x13,0x30,0xd9,0x88,0xcc,0x5f,0x03,0xb2,0x21,0xa1,0x2c,0xc0,0x26,0x82,0x10,0x1f,0x80,0xd1,0x24,0x40,0x04,}; -const uint8_t* const _I_Updating_32x40[] = {_I_Updating_32x40_0}; - -const uint8_t _I_DolphinMafia_115x62_0[] = {0x01,0x00,0x21,0x02,0x00,0x1e,0x02,0x06,0x0e,0xcb,0x04,0x10,0x1d,0x91,0x88,0x40,0x3b,0x20,0xc0,0xec,0xc0,0x40,0x62,0x03,0xac,0x80,0x03,0xb2,0x31,0x00,0x90,0x03,0xae,0x5e,0x0e,0xcf,0xc4,0x56,0x01,0x40,0x07,0x56,0xbe,0x14,0x0e,0x2f,0xf1,0x5e,0x2a,0xa1,0xd1,0xc0,0x7c,0x3f,0xf0,0x70,0x73,0x70,0x35,0x41,0xd1,0xc0,0x7f,0xff,0xf0,0xf0,0x73,0x50,0x03,0xa4,0x0d,0x10,0x74,0x07,0x46,0x55,0xe0,0x07,0x10,0xb1,0xc3,0xa3,0x55,0xfe,0x03,0x88,0x94,0xe1,0xd1,0xd5,0x03,0x4a,0x3e,0x59,0x9e,0xaf,0xfe,0xff,0x05,0x60,0x4e,0xab,0xf5,0xff,0x95,0xb4,0xa4,0x3a,0x3f,0xd0,0xe0,0xfa,0x20,0x20,0xf8,0xd5,0xff,0xb5,0xf0,0x0f,0x88,0x3a,0x6a,0xbf,0xf8,0xaf,0x82,0x6f,0x03,0x07,0x47,0xaf,0xff,0x0a,0xfe,0x5f,0xc1,0xd3,0xf6,0xbf,0xe0,0x7f,0xfe,0xf0,0x73,0x41,0x00,0x43,0xfa,0xd7,0xf8,0x27,0xfe,0xe0,0x73,0x40,0x80,0x43,0xfe,0xab,0xfe,0x21,0xfc,0xe5,0x9b,0x05,0x48,0xea,0x3f,0xc8,0xfa,0xc4,0x66,0x07,0x44,0x0e,0x8f,0x00,0xb0,0x2b,0x31,0x07,0x0f,0x00,0x1c,0x72,0x00,0x70,0xf8,0x37,0xe5,0x81,0xff,0x89,0x08,0xf2,0x71,0x80,0x20,0xfe,0x2b,0xf0,0x5f,0xc0,0x38,0xc8,0xa5,0x60,0xc3,0x00,0xc7,0xf9,0xaf,0x81,0x2d,0x04,0x34,0x40,0xe1,0x98,0x47,0x68,0x04,0x92,0xab,0xc0,0x7e,0xb7,0xf7,0x39,0x03,0x85,0x8e,0x24,0xf1,0xc0,0x7f,0xf5,0x78,0x0f,0x53,0xb4,0xbc,0x1f,0xb8,0x1a,0x0c,0x61,0xc5,0x82,0xab,0xc0,0x3e,0xa3,0xa2,0xfc,0x07,0x46,0x09,0x60,0x19,0x8f,0x80,0xec,0x38,0x08,0x52,0x6c,0xb8,0xdc,0x28,0x7c,0x10,0x2a,0x5f,0x0f,0xfc,0x5a,0x01,0x05,0x1a,0x8e,0x02,0x02,0x1d,0x1f,0x81,0xa8,0xbe,0x13,0xf8,0x52,0x2c,0x8c,0x62,0x77,0x42,0x11,0x40,0xe0,0xca,0x93,0x8e,0x03,0x8a,0x30,0x10,0x48,0x54,0x03,0x04,0xbb,0x2c,0x00,0x0c,0x64,0x80,0xe4,0x0e,0x88,0x38,0x7c,0x10,0x04,0x09,0x48,0x83,0xac,0x1b,0x18,0xf3,0x44,0xc1,0xca,0x1d,0x15,0x40,0x8e,0x05,0x02,0x20,0xe6,0x24,0x12,0x8c,0x8b,0x05,0x21,0x07,0x24,0x14,0x08,0x73,0x80,0x19,0x78,0x43,0xb2,0xff,0x15,0x30,0xc4,0x01,0x26,0x8f,0x14,0x61,0xa9,0x8a,0x09,0x10,0x02,0x12,0x1c,0x80,0x84,0xaf,0x10,0x71,0xaa,0xc4,0x00,0x3b,0x04,0xea,0x24,0x48,0x1c,0xbd,0x8f,0xf8,0x00,0x67,0xf0,0x09,0x40,0x20,0x61,0x00,0xe4,0xf6,0x07,0x4b,0xc1,0x1f,0x07,0x14,0x40,0x1c,0x9d,0x66,0x79,0x24,0xc6,0xa0,0x0e,0x32,0x51,0xfa,0xce,0xe7,0x50,0x07,0x1c,0x80,0x30,0x58,0x0e,0xa2,0xcc,0xa0,0x19,0x00,0x71,0x42,0x13,0x27,0x40,0xf5,0x45,0x41,0xc5,0x08,0xb0,0x80,0xc6,0x18,0xf2,0x28,0x04,0x83,0xe8,0x58,0x10,0x30,0xc2,0x2c,0x40,0x91,0x89,0x3c,0x88,0x62,0x21,0xd2,0xff,0x03,0x87,0xc8,0x12,0x19,0x08,0x39,0x3e,0x83,0xb2,0x4a,0x0e,0xa2,0x0d,0xc0,0xe0,0x50,0x06,0xa7,0xe8,0x2c,0x94,0xc2,0x09,0x50,0x8c,0xce,0x20,0x34,0x70,0x71,0x41,0x3e,0x85,0xe2,0xe0,0x41,0x38,0x1e,0x28,0x3c,0x19,0xc8,0x70,0x4f,0xc1,0xdc,0xe0,0x74,0x01,0xd8,0xc6,0x24,0x00,0x82,0x81,0x7c,0x12,0xa6,0x7e,0x10,0x28,0xd8,0x22,0x00,0xe3,0xfc,0x34,0x53,0x00,0x23,0x1c,0x04,0x44,0x0e,0x50,0x10,0xeb,0x17,0xca,0x1c,0x07,0x20,}; -const uint8_t* const _I_DolphinMafia_115x62[] = {_I_DolphinMafia_115x62_0}; - -const uint8_t _I_DolphinNice_96x59_0[] = {0x01,0x00,0x8a,0x01,0x00,0x37,0xfa,0x3e,0x0a,0x8f,0x04,0x04,0x02,0x20,0xb7,0x8c,0x00,0x86,0x1c,0x0b,0x78,0x20,0x08,0x66,0x00,0xb7,0x81,0x00,0x86,0x80,0x0b,0x71,0x61,0x60,0x01,0x4c,0x07,0x41,0xe3,0x07,0xd0,0x4e,0x40,0xb8,0x1f,0x90,0x00,0xe4,0x00,0xba,0x88,0x01,0x0e,0x10,0x0a,0x48,0xf9,0x6c,0xbe,0x10,0x70,0x82,0x78,0x3c,0x15,0x82,0x18,0xc2,0x21,0x00,0xb4,0x02,0x0e,0xbc,0x86,0x30,0x48,0x80,0xd1,0x05,0x03,0x78,0x82,0xc0,0x3e,0x52,0x32,0x63,0x70,0x20,0x70,0x09,0xd4,0x98,0xb0,0xf0,0x60,0x58,0xc9,0xce,0x12,0x0b,0xbf,0xd4,0x9d,0x28,0x9e,0x24,0xa9,0x82,0xda,0x24,0x2d,0x10,0x00,0xfd,0x2a,0x60,0xb4,0x85,0x4e,0x00,0x85,0xf8,0xd4,0x82,0xd2,0x09,0xc0,0x12,0x14,0x12,0xad,0x81,0x29,0xa8,0x90,0xf5,0x01,0x75,0x80,0x46,0x00,0xa5,0x50,0x0b,0x90,0x1c,0x41,0x63,0x60,0x05,0x96,0xc0,0x2e,0x52,0x44,0x79,0x60,0x06,0x05,0x50,0x05,0x94,0x89,0x88,0x63,0x02,0x98,0x02,0xc7,0xc1,0x21,0x6a,0x98,0xa0,0x62,0x11,0x00,0x58,0xc6,0x02,0xe2,0xb8,0x21,0x80,0xc3,0x05,0x02,0x38,0x11,0x78,0xa5,0x0b,0x01,0x81,0x5a,0x88,0x2c,0x60,0x40,0xb1,0xc0,0x27,0x0a,0xfc,0x0f,0x28,0x04,0x06,0x50,0x05,0x18,0xa9,0x94,0xc1,0x67,0x48,0x02,0x8c,0xb8,0x16,0xf8,0x80,0x28,0xd6,0x16,0x86,0x0b,0x38,0x40,0xd4,0x76,0x0c,0xd4,0x05,0x94,0x10,0x9a,0x34,0x01,0x82,0x1f,0x06,0x05,0x02,0x98,0x01,0x47,0x54,0x18,0x35,0xc8,0xff,0x20,0x3c,0x00,0x58,0xd5,0x6a,0xa0,0xb3,0x81,0xa3,0x0a,0x0f,0x80,0xd5,0xea,0x81,0x67,0x07,0x46,0x14,0xe3,0xe1,0x55,0x18,0x18,0x2c,0x51,0x85,0xc0,0xef,0x85,0x8c,0x0c,0x30,0xf4,0x61,0x40,0x2d,0x46,0xb4,0x05,0x8b,0x04,0xb0,0x15,0x40,0x5a,0x50,0x23,0xe6,0x01,0x02,0x8c,0xa8,0x2e,0xb1,0xe5,0x40,0x81,0x46,0x6a,0x17,0x59,0xeb,0xe4,0xa8,0x11,0xa0,0x5a,0x68,0x27,0x4e,0xd3,0x59,0xad,0x82,0xfa,0xed,0x2a,0x04,0x28,0x2e,0xb7,0xa7,0x69,0xc3,0x42,0xeb,0xf5,0x1f,0x09,0x4c,0x42,0xed,0xea,0x01,0x8c,0x06,0x41,0x05,0x0b,0xbc,0x02,0x0d,0x80,0x83,0x05,0xe2,0x11,0x40,0x0b,0xb7,0x14,0x06,0x33,0x0c,0x83,0x89,0x02,0xe3,0xca,0x3d,0x95,0x01,0xe2,0x21,0x74,0xc2,0x81,0x0b,0x0e,0x17,0x6c,0x10,0x10,0xaf,0x09,0xe2,0x0b,0xbb,0xd0,0x42,0xeb,0x02,}; -const uint8_t* const _I_DolphinNice_96x59[] = {_I_DolphinNice_96x59_0}; - -const uint8_t _I_DolphinWait_61x59_0[] = {0x01,0x00,0x56,0x01,0x00,0x17,0xfa,0x1e,0x06,0x4f,0x84,0x06,0xe0,0x07,0x48,0x64,0x03,0x01,0x01,0x03,0x9c,0x0c,0x04,0x30,0x60,0x31,0x70,0x00,0x65,0x08,0x01,0x94,0xc0,0x06,0x51,0x00,0x5b,0x48,0x00,0x65,0x04,0x01,0x95,0x00,0x82,0xd8,0x00,0x19,0x40,0x7e,0x00,0x75,0x1f,0x88,0xe0,0x88,0x02,0x1a,0x1f,0x94,0x14,0x0e,0xbf,0x98,0x58,0x5c,0x42,0x45,0x00,0x9e,0x99,0x87,0x01,0x02,0x11,0x94,0xf2,0x2e,0x03,0x18,0x39,0x28,0x70,0x1f,0xc0,0x3e,0x42,0x00,0xe5,0x80,0xff,0xdf,0xc0,0xe5,0xf8,0x85,0xd8,0x10,0x27,0x40,0xf9,0xc2,0x63,0x88,0x12,0x82,0x6a,0x20,0x50,0x41,0xe9,0x42,0x20,0x95,0x48,0x6e,0x0c,0xfa,0x9a,0xaf,0xf9,0x90,0xe2,0x10,0x2e,0xac,0xe0,0x0e,0x98,0x29,0x52,0x11,0x13,0x23,0x15,0x3e,0x20,0x3c,0x61,0x40,0x52,0xfc,0x4f,0xe2,0x10,0x38,0x68,0x1c,0xa0,0xfc,0x08,0xbe,0x04,0x1e,0x5e,0x01,0xb9,0x03,0xc5,0x60,0x24,0xf2,0x84,0x60,0x63,0x40,0x71,0x27,0x9c,0x0e,0x2b,0x04,0x6c,0xa4,0x06,0x15,0x08,0x6c,0x99,0x8c,0xa6,0x0f,0x81,0x00,0x0c,0x08,0xf0,0x3c,0x05,0x61,0xc0,0x40,0x86,0xd0,0x30,0x78,0x80,0x0c,0xc6,0x2b,0x92,0x00,0x0d,0x51,0xf0,0x2d,0x42,0x0a,0x8e,0xaa,0x34,0x0f,0x4a,0x85,0x55,0x6e,0x20,0xf3,0xd5,0x6a,0x84,0xa2,0x66,0x2a,0x05,0xf7,0xaa,0x07,0x18,0xaf,0xfb,0x7f,0xea,0xc1,0xef,0xc0,0xe3,0xea,0x80,0xf8,0x27,0xf0,0x0a,0xc0,0x1c,0x67,0xa2,0xd1,0xb1,0xc0,0x34,0x00,0x71,0x14,0x8f,0x00,0x98,0x34,0x02,0x69,0xd0,0x37,0x90,0x16,0xf1,0x00,0x06,0xe1,0x84,0x31,0x89,0x14,0xe9,0xdc,0x40,0x38,0xa4,0xc4,0x4c,0x3c,0x1f,0x88,0x8c,0x5b,0xc3,0x01,0xbc,0x40,0x3f,0xf0,0xf6,0x71,0x0c,0x0b,0xe0,0x07,0x3c,0x0a,0xf8,0xa3,0xf0,0x03,0xb8,0xd8,0x80,0xe8,0x87,0x1b,0xa8,0x1c,0x78,0x1f,0xf8,0x0e,0x7e,0x01,0x6a,0x03,0x94,0x0f,0xfd,0xa0,0x80,0x7d,0x49,0x04,0x4d,0x12,0xc0,0xfa,0x83,0x83,0xbe,0x26,0x8d,0x02,0x05,0xd5,0xff,0xff,0xeb,0xe9,0x31,0x90,0x40,0x80,}; -const uint8_t* const _I_DolphinWait_61x59[] = {_I_DolphinWait_61x59_0}; - -const uint8_t _I_iButtonDolphinVerySuccess_108x52_0[] = {0x01,0x00,0xc2,0x01,0x00,0x0f,0xe2,0xfe,0x0d,0xb8,0x3e,0x02,0x06,0x0c,0x9f,0x00,0x08,0x61,0x80,0xd9,0x8c,0x00,0x86,0x60,0x0d,0x98,0x30,0x08,0x6a,0x00,0xd9,0x80,0x80,0x87,0x40,0x0c,0x8c,0x00,0x0c,0xa8,0x01,0x12,0x00,0x2d,0x00,0x22,0x70,0x20,0x6b,0xc8,0x02,0x26,0x62,0x88,0x80,0x6c,0xc9,0x24,0x0d,0x9a,0x07,0x17,0xfe,0x1d,0x68,0x40,0x6c,0xe7,0x48,0x04,0x28,0x10,0x34,0xe8,0x10,0xd1,0x11,0xc4,0x01,0xa5,0x04,0x06,0x96,0xa0,0xa6,0x24,0xc2,0x88,0x17,0x88,0x1a,0x7d,0x43,0x78,0x82,0x4a,0x40,0x03,0x20,0xb0,0xff,0x20,0x16,0xa3,0xb2,0x48,0x03,0xe4,0x0d,0x1f,0xfc,0x06,0x3a,0x0d,0x4a,0x00,0x34,0xf8,0x00,0xd1,0x37,0x0f,0x82,0x9e,0x95,0x58,0x17,0x83,0xff,0x81,0x1b,0x0f,0xf1,0xfe,0x71,0xe0,0x69,0x7c,0x3f,0xe0,0x82,0xff,0xcf,0xc0,0x85,0x61,0x80,0x43,0xb0,0x5f,0xa8,0x79,0xdc,0x81,0xa5,0x70,0xc0,0x68,0x3c,0x10,0x1a,0x17,0xd5,0x28,0x42,0xd1,0x8f,0x84,0x46,0x83,0xb0,0x8e,0x40,0x34,0x5f,0xa8,0x38,0x34,0x45,0xa2,0x0d,0x18,0x04,0x9b,0x50,0x03,0x1a,0x14,0x35,0x36,0x5f,0x8f,0xf8,0xb8,0xa4,0x19,0x40,0x18,0xe8,0xa0,0xca,0x22,0xfe,0x7f,0xc4,0x05,0x20,0xa5,0x80,0xc6,0x82,0xcb,0x3f,0xf3,0x44,0xfc,0x12,0x40,0x18,0xe8,0x51,0x82,0x52,0x28,0xfc,0x38,0x0a,0x3e,0x48,0x98,0x6c,0x8f,0x43,0x00,0xe0,0x63,0xe0,0x62,0xe2,0x91,0x90,0x0a,0x02,0x0d,0x2f,0x82,0x50,0x41,0xa3,0x80,0x90,0x41,0x04,0xc3,0x01,0xc0,0x83,0x46,0x71,0x30,0x06,0x95,0x82,0x21,0x02,0x6e,0x88,0x6c,0x43,0x83,0x1f,0x2f,0x88,0x34,0x62,0x00,0xd1,0x15,0x08,0x2c,0x60,0xcc,0x51,0x0f,0x08,0xcc,0x81,0xa2,0x12,0x10,0x68,0xc6,0x3f,0x06,0xc2,0x06,0x8e,0x02,0x16,0x41,0x20,0x10,0xf8,0x01,0x85,0x00,0x19,0x0d,0x82,0x18,0x07,0x20,0x81,0x00,0x0c,0x9c,0x31,0x08,0x42,0x74,0x81,0xab,0x80,0x03,0x0c,0x32,0x11,0x0b,0x06,0xb9,0xc0,0x43,0xa3,0x10,0x8b,0x83,0x5c,0xe0,0x20,0x81,0xc8,0x26,0x49,0x4c,0x40,0x02,0x86,0x0a,0xc5,0x22,0x32,0x50,0x6b,0x93,0x86,0xc0,0x0d,0x19,0x18,0x35,0x8c,0x84,0x79,0x1a,0x84,0x84,0x1a,0xdf,0xc2,0xe0,0x8a,0xc7,0x51,0x22,0x06,0xb5,0x5e,0x3f,0x00,0x77,0x0d,0x60,0x36,0xfa,0xa9,0xd7,0x00,0x08,0x3a,0xc9,0x02,0x48,0xc0,0x05,0x54,0xba,0x98,0x8a,0xa8,0xf1,0x20,0x6a,0x6a,0x3d,0x43,0x61,0x80,0x4a,0x81,0xaf,0x40,0xea,0x8d,0x86,0x01,0x56,0x06,0x93,0x60,0x80,0x05,0xea,0x01,0x94,0xac,0x1b,0x11,0x80,0x19,0x45,0x41,0x44,0x0d,0x58,0x33,0x18,0xa1,0x4f,0xf3,0x06,0x1f,0x01,0x76,0x58,0x00,0xd9,0x83,0x52,0x7c,0x11,0x38,0x51,0x40,0x80,}; -const uint8_t* const _I_iButtonDolphinVerySuccess_108x52[] = {_I_iButtonDolphinVerySuccess_108x52_0}; - -const uint8_t _I_iButtonKey_49x44_0[] = {0x01,0x00,0xb4,0x00,0x00,0x24,0xfc,0x0a,0x9c,0x0e,0x00,0x19,0x26,0x18,0x00,0x32,0x43,0x20,0x10,0x10,0x31,0xc0,0x80,0xc9,0x80,0x02,0x08,0x18,0xec,0x00,0x21,0x03,0x1c,0x40,0x1e,0x22,0x15,0xa0,0x08,0x56,0x40,0x06,0x30,0xc0,0x85,0x84,0x86,0x40,0x21,0x84,0x10,0xcc,0x04,0x30,0x40,0x31,0x02,0x88,0x3a,0x20,0x01,0x83,0x0d,0x94,0x06,0x26,0x03,0xf8,0x43,0xc5,0xe9,0x0c,0x11,0x08,0xbc,0xe0,0x64,0x21,0x23,0x09,0x38,0x80,0x22,0x28,0x20,0x58,0x99,0xc4,0x50,0x41,0xe1,0xc0,0x60,0xcc,0xab,0x47,0x21,0xa6,0x02,0x9e,0x06,0x22,0x70,0xf0,0x00,0xcb,0x40,0x03,0x18,0xb0,0x78,0x14,0xe0,0x32,0x58,0x28,0xa5,0x84,0xd0,0x51,0x80,0xc9,0x30,0x06,0xae,0x62,0x84,0x06,0x48,0x64,0x88,0x0c,0x90,0x29,0x08,0x19,0x30,0x31,0x13,0x71,0xb8,0xc4,0xea,0x70,0x6b,0xc5,0x01,0x4a,0x7f,0xc8,0x7c,0x81,0x4a,0x77,0x8a,0xac,0x45,0x4a,0x7f,0x08,0x54,0x39,0x4a,0x7e,0x0e,0xa9,0xf0,0xcb,0xe3,0x7f,0x6e,0x22,0x5c,0x59,0x44,0x00,0x28,0x7a,0xd4,0x40,0x07,0xf0,0x02,0xa0,}; -const uint8_t* const _I_iButtonKey_49x44[] = {_I_iButtonKey_49x44_0}; - -const Icon I_Certification1_103x23 = {.width=103,.height=23,.frame_count=1,.frame_rate=0,.frames=_I_Certification1_103x23}; -const Icon I_Certification2_119x30 = {.width=119,.height=30,.frame_count=1,.frame_rate=0,.frames=_I_Certification2_119x30}; -const Icon A_Levelup1_128x64 = {.width=128,.height=64,.frame_count=11,.frame_rate=2,.frames=_A_Levelup1_128x64}; -const Icon A_Levelup2_128x64 = {.width=128,.height=64,.frame_count=11,.frame_rate=2,.frames=_A_Levelup2_128x64}; -const Icon I_125_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_125_10px}; -const Icon I_Nfc_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_Nfc_10px}; -const Icon I_back_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_back_10px}; -const Icon I_badusb_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_badusb_10px}; -const Icon I_ble_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_ble_10px}; -const Icon I_dir_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_dir_10px}; -const Icon I_ibutt_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_ibutt_10px}; -const Icon I_ir_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_ir_10px}; -const Icon I_loading_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_loading_10px}; -const Icon I_music_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_music_10px}; -const Icon I_sub1_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_sub1_10px}; -const Icon I_u2f_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_u2f_10px}; -const Icon I_unknown_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_unknown_10px}; -const Icon I_update_10px = {.width=10,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_update_10px}; -const Icon I_BLE_Pairing_128x64 = {.width=128,.height=64,.frame_count=1,.frame_rate=0,.frames=_I_BLE_Pairing_128x64}; -const Icon I_Ble_connected_38x34 = {.width=38,.height=34,.frame_count=1,.frame_rate=0,.frames=_I_Ble_connected_38x34}; -const Icon I_Ble_disconnected_24x34 = {.width=24,.height=34,.frame_count=1,.frame_rate=0,.frames=_I_Ble_disconnected_24x34}; -const Icon I_Button_18x18 = {.width=18,.height=18,.frame_count=1,.frame_rate=0,.frames=_I_Button_18x18}; -const Icon I_Circles_47x47 = {.width=47,.height=47,.frame_count=1,.frame_rate=0,.frames=_I_Circles_47x47}; -const Icon I_Ok_btn_9x9 = {.width=9,.height=9,.frame_count=1,.frame_rate=0,.frames=_I_Ok_btn_9x9}; -const Icon I_Pressed_Button_13x13 = {.width=13,.height=13,.frame_count=1,.frame_rate=0,.frames=_I_Pressed_Button_13x13}; -const Icon I_Space_65x18 = {.width=65,.height=18,.frame_count=1,.frame_rate=0,.frames=_I_Space_65x18}; -const Icon I_Voldwn_6x6 = {.width=6,.height=6,.frame_count=1,.frame_rate=0,.frames=_I_Voldwn_6x6}; -const Icon I_Volup_8x6 = {.width=8,.height=6,.frame_count=1,.frame_rate=0,.frames=_I_Volup_8x6}; -const Icon I_Clock_18x18 = {.width=18,.height=18,.frame_count=1,.frame_rate=0,.frames=_I_Clock_18x18}; -const Icon I_Error_18x18 = {.width=18,.height=18,.frame_count=1,.frame_rate=0,.frames=_I_Error_18x18}; -const Icon I_EviSmile1_18x21 = {.width=18,.height=21,.frame_count=1,.frame_rate=0,.frames=_I_EviSmile1_18x21}; -const Icon I_EviSmile2_18x21 = {.width=18,.height=21,.frame_count=1,.frame_rate=0,.frames=_I_EviSmile2_18x21}; -const Icon I_EviWaiting1_18x21 = {.width=18,.height=21,.frame_count=1,.frame_rate=0,.frames=_I_EviWaiting1_18x21}; -const Icon I_EviWaiting2_18x21 = {.width=18,.height=21,.frame_count=1,.frame_rate=0,.frames=_I_EviWaiting2_18x21}; -const Icon I_Percent_10x14 = {.width=10,.height=14,.frame_count=1,.frame_rate=0,.frames=_I_Percent_10x14}; -const Icon I_Smile_18x18 = {.width=18,.height=18,.frame_count=1,.frame_rate=0,.frames=_I_Smile_18x18}; -const Icon I_UsbTree_48x22 = {.width=48,.height=22,.frame_count=1,.frame_rate=0,.frames=_I_UsbTree_48x22}; -const Icon I_ButtonCenter_7x7 = {.width=7,.height=7,.frame_count=1,.frame_rate=0,.frames=_I_ButtonCenter_7x7}; -const Icon I_ButtonDown_7x4 = {.width=7,.height=4,.frame_count=1,.frame_rate=0,.frames=_I_ButtonDown_7x4}; -const Icon I_ButtonLeftSmall_3x5 = {.width=3,.height=5,.frame_count=1,.frame_rate=0,.frames=_I_ButtonLeftSmall_3x5}; -const Icon I_ButtonLeft_4x7 = {.width=4,.height=7,.frame_count=1,.frame_rate=0,.frames=_I_ButtonLeft_4x7}; -const Icon I_ButtonRightSmall_3x5 = {.width=3,.height=5,.frame_count=1,.frame_rate=0,.frames=_I_ButtonRightSmall_3x5}; -const Icon I_ButtonRight_4x7 = {.width=4,.height=7,.frame_count=1,.frame_rate=0,.frames=_I_ButtonRight_4x7}; -const Icon I_ButtonUp_7x4 = {.width=7,.height=4,.frame_count=1,.frame_rate=0,.frames=_I_ButtonUp_7x4}; -const Icon I_DFU_128x50 = {.width=128,.height=50,.frame_count=1,.frame_rate=0,.frames=_I_DFU_128x50}; -const Icon I_Warning_30x23 = {.width=30,.height=23,.frame_count=1,.frame_rate=0,.frames=_I_Warning_30x23}; -const Icon A_Loading_24 = {.width=24,.height=24,.frame_count=7,.frame_rate=5,.frames=_A_Loading_24}; -const Icon I_DolphinFirstStart0_70x53 = {.width=70,.height=53,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart0_70x53}; -const Icon I_DolphinFirstStart1_59x53 = {.width=59,.height=53,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart1_59x53}; -const Icon I_DolphinFirstStart2_59x51 = {.width=59,.height=51,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart2_59x51}; -const Icon I_DolphinFirstStart3_57x48 = {.width=57,.height=48,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart3_57x48}; -const Icon I_DolphinFirstStart4_67x53 = {.width=67,.height=53,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart4_67x53}; -const Icon I_DolphinFirstStart5_54x49 = {.width=54,.height=49,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart5_54x49}; -const Icon I_DolphinFirstStart6_58x54 = {.width=58,.height=54,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart6_58x54}; -const Icon I_DolphinFirstStart7_61x51 = {.width=61,.height=51,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart7_61x51}; -const Icon I_DolphinFirstStart8_56x51 = {.width=56,.height=51,.frame_count=1,.frame_rate=0,.frames=_I_DolphinFirstStart8_56x51}; -const Icon I_DolphinOkay_41x43 = {.width=41,.height=43,.frame_count=1,.frame_rate=0,.frames=_I_DolphinOkay_41x43}; -const Icon I_ArrowDownEmpty_14x15 = {.width=14,.height=15,.frame_count=1,.frame_rate=0,.frames=_I_ArrowDownEmpty_14x15}; -const Icon I_ArrowDownFilled_14x15 = {.width=14,.height=15,.frame_count=1,.frame_rate=0,.frames=_I_ArrowDownFilled_14x15}; -const Icon I_ArrowUpEmpty_14x15 = {.width=14,.height=15,.frame_count=1,.frame_rate=0,.frames=_I_ArrowUpEmpty_14x15}; -const Icon I_ArrowUpFilled_14x15 = {.width=14,.height=15,.frame_count=1,.frame_rate=0,.frames=_I_ArrowUpFilled_14x15}; -const Icon I_DolphinReadingSuccess_59x63 = {.width=59,.height=63,.frame_count=1,.frame_rate=0,.frames=_I_DolphinReadingSuccess_59x63}; -const Icon I_Down_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Down_25x27}; -const Icon I_Down_hvr_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Down_hvr_25x27}; -const Icon I_InfraredArrowDown_4x8 = {.width=8,.height=4,.frame_count=1,.frame_rate=0,.frames=_I_InfraredArrowDown_4x8}; -const Icon I_InfraredArrowUp_4x8 = {.width=8,.height=4,.frame_count=1,.frame_rate=0,.frames=_I_InfraredArrowUp_4x8}; -const Icon I_InfraredLearnShort_128x31 = {.width=128,.height=31,.frame_count=1,.frame_rate=0,.frames=_I_InfraredLearnShort_128x31}; -const Icon I_InfraredLearn_128x64 = {.width=128,.height=64,.frame_count=1,.frame_rate=0,.frames=_I_InfraredLearn_128x64}; -const Icon I_InfraredSendShort_128x34 = {.width=128,.height=34,.frame_count=1,.frame_rate=0,.frames=_I_InfraredSendShort_128x34}; -const Icon I_InfraredSend_128x64 = {.width=128,.height=64,.frame_count=1,.frame_rate=0,.frames=_I_InfraredSend_128x64}; -const Icon I_Mute_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Mute_25x27}; -const Icon I_Mute_hvr_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Mute_hvr_25x27}; -const Icon I_Power_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Power_25x27}; -const Icon I_Power_hvr_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Power_hvr_25x27}; -const Icon I_Up_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Up_25x27}; -const Icon I_Up_hvr_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Up_hvr_25x27}; -const Icon I_Vol_down_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Vol_down_25x27}; -const Icon I_Vol_down_hvr_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Vol_down_hvr_25x27}; -const Icon I_Vol_up_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Vol_up_25x27}; -const Icon I_Vol_up_hvr_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Vol_up_hvr_25x27}; -const Icon I_DoorLeft_70x55 = {.width=70,.height=55,.frame_count=1,.frame_rate=0,.frames=_I_DoorLeft_70x55}; -const Icon I_DoorLocked_10x56 = {.width=10,.height=56,.frame_count=1,.frame_rate=0,.frames=_I_DoorLocked_10x56}; -const Icon I_DoorRight_70x55 = {.width=70,.height=55,.frame_count=1,.frame_rate=0,.frames=_I_DoorRight_70x55}; -const Icon I_PassportBottom_128x17 = {.width=128,.height=17,.frame_count=1,.frame_rate=0,.frames=_I_PassportBottom_128x17}; -const Icon I_PassportLeft_6x47 = {.width=6,.height=47,.frame_count=1,.frame_rate=0,.frames=_I_PassportLeft_6x47}; -const Icon I_WarningDolphin_45x42 = {.width=45,.height=42,.frame_count=1,.frame_rate=0,.frames=_I_WarningDolphin_45x42}; -const Icon I_KeyBackspaceSelected_16x9 = {.width=16,.height=9,.frame_count=1,.frame_rate=0,.frames=_I_KeyBackspaceSelected_16x9}; -const Icon I_KeyBackspace_16x9 = {.width=16,.height=9,.frame_count=1,.frame_rate=0,.frames=_I_KeyBackspace_16x9}; -const Icon I_KeySaveSelected_24x11 = {.width=24,.height=11,.frame_count=1,.frame_rate=0,.frames=_I_KeySaveSelected_24x11}; -const Icon I_KeySave_24x11 = {.width=24,.height=11,.frame_count=1,.frame_rate=0,.frames=_I_KeySave_24x11}; -const Icon A_125khz_14 = {.width=14,.height=14,.frame_count=4,.frame_rate=3,.frames=_A_125khz_14}; -const Icon A_BadUsb_14 = {.width=14,.height=14,.frame_count=11,.frame_rate=3,.frames=_A_BadUsb_14}; -const Icon A_Bluetooth_14 = {.width=14,.height=14,.frame_count=6,.frame_rate=3,.frames=_A_Bluetooth_14}; -const Icon A_Debug_14 = {.width=14,.height=14,.frame_count=4,.frame_rate=3,.frames=_A_Debug_14}; -const Icon A_FileManager_14 = {.width=14,.height=14,.frame_count=10,.frame_rate=3,.frames=_A_FileManager_14}; -const Icon A_GPIO_14 = {.width=14,.height=14,.frame_count=8,.frame_rate=3,.frames=_A_GPIO_14}; -const Icon A_Games_14 = {.width=14,.height=14,.frame_count=9,.frame_rate=3,.frames=_A_Games_14}; -const Icon A_Infrared_14 = {.width=14,.height=14,.frame_count=6,.frame_rate=3,.frames=_A_Infrared_14}; -const Icon A_NFC_14 = {.width=14,.height=14,.frame_count=4,.frame_rate=3,.frames=_A_NFC_14}; -const Icon A_Passport_14 = {.width=14,.height=14,.frame_count=10,.frame_rate=3,.frames=_A_Passport_14}; -const Icon A_Plugins_14 = {.width=14,.height=14,.frame_count=9,.frame_rate=3,.frames=_A_Plugins_14}; -const Icon A_Power_14 = {.width=14,.height=14,.frame_count=1,.frame_rate=3,.frames=_A_Power_14}; -const Icon A_Settings_14 = {.width=14,.height=14,.frame_count=10,.frame_rate=3,.frames=_A_Settings_14}; -const Icon A_Sub1ghz_14 = {.width=14,.height=14,.frame_count=6,.frame_rate=3,.frames=_A_Sub1ghz_14}; -const Icon A_Tamagotchi_14 = {.width=14,.height=14,.frame_count=6,.frame_rate=3,.frames=_A_Tamagotchi_14}; -const Icon A_U2F_14 = {.width=14,.height=14,.frame_count=4,.frame_rate=3,.frames=_A_U2F_14}; -const Icon A_iButton_14 = {.width=14,.height=14,.frame_count=7,.frame_rate=3,.frames=_A_iButton_14}; -const Icon I_Detailed_chip_17x13 = {.width=17,.height=13,.frame_count=1,.frame_rate=0,.frames=_I_Detailed_chip_17x13}; -const Icon I_Medium_chip_22x21 = {.width=22,.height=21,.frame_count=1,.frame_rate=0,.frames=_I_Medium_chip_22x21}; -const Icon I_Pin_arrow_down_7x9 = {.width=7,.height=9,.frame_count=1,.frame_rate=0,.frames=_I_Pin_arrow_down_7x9}; -const Icon I_Pin_arrow_left_9x7 = {.width=9,.height=7,.frame_count=1,.frame_rate=0,.frames=_I_Pin_arrow_left_9x7}; -const Icon I_Pin_arrow_right_9x7 = {.width=9,.height=7,.frame_count=1,.frame_rate=0,.frames=_I_Pin_arrow_right_9x7}; -const Icon I_Pin_arrow_up7x9 = {.width=7,.height=9,.frame_count=1,.frame_rate=0,.frames=_I_Pin_arrow_up7x9}; -const Icon I_Pin_attention_dpad_29x29 = {.width=29,.height=29,.frame_count=1,.frame_rate=0,.frames=_I_Pin_attention_dpad_29x29}; -const Icon I_Pin_back_arrow_10x8 = {.width=10,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Pin_back_arrow_10x8}; -const Icon I_Pin_back_full_40x8 = {.width=40,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Pin_back_full_40x8}; -const Icon I_Pin_cell_13x13 = {.width=13,.height=13,.frame_count=1,.frame_rate=0,.frames=_I_Pin_cell_13x13}; -const Icon I_Pin_pointer_5x3 = {.width=5,.height=3,.frame_count=1,.frame_rate=0,.frames=_I_Pin_pointer_5x3}; -const Icon I_Pin_star_7x7 = {.width=7,.height=7,.frame_count=1,.frame_rate=0,.frames=_I_Pin_star_7x7}; -const Icon I_passport_bad1_46x49 = {.width=46,.height=49,.frame_count=1,.frame_rate=0,.frames=_I_passport_bad1_46x49}; -const Icon I_passport_bad2_46x49 = {.width=46,.height=49,.frame_count=1,.frame_rate=0,.frames=_I_passport_bad2_46x49}; -const Icon I_passport_bad3_46x49 = {.width=46,.height=49,.frame_count=1,.frame_rate=0,.frames=_I_passport_bad3_46x49}; -const Icon I_passport_bottom_128x18 = {.width=128,.height=18,.frame_count=1,.frame_rate=0,.frames=_I_passport_bottom_128x18}; -const Icon I_passport_happy1_46x49 = {.width=46,.height=49,.frame_count=1,.frame_rate=0,.frames=_I_passport_happy1_46x49}; -const Icon I_passport_happy2_46x49 = {.width=46,.height=49,.frame_count=1,.frame_rate=0,.frames=_I_passport_happy2_46x49}; -const Icon I_passport_happy3_46x49 = {.width=46,.height=49,.frame_count=1,.frame_rate=0,.frames=_I_passport_happy3_46x49}; -const Icon I_passport_left_6x46 = {.width=6,.height=46,.frame_count=1,.frame_rate=0,.frames=_I_passport_left_6x46}; -const Icon I_passport_okay1_46x49 = {.width=46,.height=49,.frame_count=1,.frame_rate=0,.frames=_I_passport_okay1_46x49}; -const Icon I_passport_okay2_46x49 = {.width=46,.height=49,.frame_count=1,.frame_rate=0,.frames=_I_passport_okay2_46x49}; -const Icon I_passport_okay3_46x49 = {.width=46,.height=49,.frame_count=1,.frame_rate=0,.frames=_I_passport_okay3_46x49}; -const Icon I_BatteryBody_52x28 = {.width=52,.height=28,.frame_count=1,.frame_rate=0,.frames=_I_BatteryBody_52x28}; -const Icon I_Battery_16x16 = {.width=16,.height=16,.frame_count=1,.frame_rate=0,.frames=_I_Battery_16x16}; -const Icon I_FaceCharging_29x14 = {.width=29,.height=14,.frame_count=1,.frame_rate=0,.frames=_I_FaceCharging_29x14}; -const Icon I_FaceConfused_29x14 = {.width=29,.height=14,.frame_count=1,.frame_rate=0,.frames=_I_FaceConfused_29x14}; -const Icon I_FaceNopower_29x14 = {.width=29,.height=14,.frame_count=1,.frame_rate=0,.frames=_I_FaceNopower_29x14}; -const Icon I_FaceNormal_29x14 = {.width=29,.height=14,.frame_count=1,.frame_rate=0,.frames=_I_FaceNormal_29x14}; -const Icon I_Health_16x16 = {.width=16,.height=16,.frame_count=1,.frame_rate=0,.frames=_I_Health_16x16}; -const Icon I_Temperature_16x16 = {.width=16,.height=16,.frame_count=1,.frame_rate=0,.frames=_I_Temperature_16x16}; -const Icon I_Voltage_16x16 = {.width=16,.height=16,.frame_count=1,.frame_rate=0,.frames=_I_Voltage_16x16}; -const Icon I_RFIDBigChip_37x36 = {.width=37,.height=36,.frame_count=1,.frame_rate=0,.frames=_I_RFIDBigChip_37x36}; -const Icon I_RFIDDolphinReceive_97x61 = {.width=97,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_RFIDDolphinReceive_97x61}; -const Icon I_RFIDDolphinSend_97x61 = {.width=97,.height=61,.frame_count=1,.frame_rate=0,.frames=_I_RFIDDolphinSend_97x61}; -const Icon I_RFIDDolphinSuccess_108x57 = {.width=108,.height=57,.frame_count=1,.frame_rate=0,.frames=_I_RFIDDolphinSuccess_108x57}; -const Icon I_SDQuestion_35x43 = {.width=35,.height=43,.frame_count=1,.frame_rate=0,.frames=_I_SDQuestion_35x43}; -const Icon I_Cry_dolph_55x52 = {.width=55,.height=52,.frame_count=1,.frame_rate=0,.frames=_I_Cry_dolph_55x52}; -const Icon I_Attention_5x8 = {.width=5,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Attention_5x8}; -const Icon I_Background_128x11 = {.width=128,.height=11,.frame_count=1,.frame_rate=0,.frames=_I_Background_128x11}; -const Icon I_BadUsb_9x8 = {.width=9,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_BadUsb_9x8}; -const Icon I_Battery_19x8 = {.width=19,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Battery_19x8}; -const Icon I_Battery_26x8 = {.width=26,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Battery_26x8}; -const Icon I_Bluetooth_Connected_16x8 = {.width=16,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Bluetooth_Connected_16x8}; -const Icon I_Bluetooth_Idle_5x8 = {.width=5,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Bluetooth_Idle_5x8}; -const Icon I_Charging_lightning_9x10 = {.width=9,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_Charging_lightning_9x10}; -const Icon I_Charging_lightning_mask_9x10 = {.width=9,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_Charging_lightning_mask_9x10}; -const Icon I_Lock_8x8 = {.width=8,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Lock_8x8}; -const Icon I_PlaceholderL_11x13 = {.width=11,.height=13,.frame_count=1,.frame_rate=0,.frames=_I_PlaceholderL_11x13}; -const Icon I_PlaceholderR_30x13 = {.width=30,.height=13,.frame_count=1,.frame_rate=0,.frames=_I_PlaceholderR_30x13}; -const Icon I_SDcardFail_11x8 = {.width=11,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_SDcardFail_11x8}; -const Icon I_SDcardMounted_11x8 = {.width=11,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_SDcardMounted_11x8}; -const Icon I_Lock_7x8 = {.width=7,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Lock_7x8}; -const Icon I_MHz_25x11 = {.width=25,.height=11,.frame_count=1,.frame_rate=0,.frames=_I_MHz_25x11}; -const Icon I_Quest_7x8 = {.width=7,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Quest_7x8}; -const Icon I_Scanning_123x52 = {.width=123,.height=52,.frame_count=1,.frame_rate=0,.frames=_I_Scanning_123x52}; -const Icon I_Unlock_7x8 = {.width=7,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Unlock_7x8}; -const Icon I_Auth_62x31 = {.width=62,.height=31,.frame_count=1,.frame_rate=0,.frames=_I_Auth_62x31}; -const Icon I_Connect_me_62x31 = {.width=62,.height=31,.frame_count=1,.frame_rate=0,.frames=_I_Connect_me_62x31}; -const Icon I_Connected_62x31 = {.width=62,.height=31,.frame_count=1,.frame_rate=0,.frames=_I_Connected_62x31}; -const Icon I_Drive_112x35 = {.width=112,.height=35,.frame_count=1,.frame_rate=0,.frames=_I_Drive_112x35}; -const Icon I_Error_62x31 = {.width=62,.height=31,.frame_count=1,.frame_rate=0,.frames=_I_Error_62x31}; -const Icon I_Updating_32x40 = {.width=32,.height=40,.frame_count=1,.frame_rate=0,.frames=_I_Updating_32x40}; -const Icon I_DolphinMafia_115x62 = {.width=115,.height=62,.frame_count=1,.frame_rate=0,.frames=_I_DolphinMafia_115x62}; -const Icon I_DolphinNice_96x59 = {.width=96,.height=59,.frame_count=1,.frame_rate=0,.frames=_I_DolphinNice_96x59}; -const Icon I_DolphinWait_61x59 = {.width=61,.height=59,.frame_count=1,.frame_rate=0,.frames=_I_DolphinWait_61x59}; -const Icon I_iButtonDolphinVerySuccess_108x52 = {.width=108,.height=52,.frame_count=1,.frame_rate=0,.frames=_I_iButtonDolphinVerySuccess_108x52}; -const Icon I_iButtonKey_49x44 = {.width=49,.height=44,.frame_count=1,.frame_rate=0,.frames=_I_iButtonKey_49x44}; - diff --git a/assets/compiled/assets_icons.h b/assets/compiled/assets_icons.h deleted file mode 100644 index 459478802..000000000 --- a/assets/compiled/assets_icons.h +++ /dev/null @@ -1,178 +0,0 @@ -#pragma once -#include - -extern const Icon I_Certification1_103x23; -extern const Icon I_Certification2_119x30; -extern const Icon A_Levelup1_128x64; -extern const Icon A_Levelup2_128x64; -extern const Icon I_125_10px; -extern const Icon I_Nfc_10px; -extern const Icon I_back_10px; -extern const Icon I_badusb_10px; -extern const Icon I_ble_10px; -extern const Icon I_dir_10px; -extern const Icon I_ibutt_10px; -extern const Icon I_ir_10px; -extern const Icon I_loading_10px; -extern const Icon I_music_10px; -extern const Icon I_sub1_10px; -extern const Icon I_u2f_10px; -extern const Icon I_unknown_10px; -extern const Icon I_update_10px; -extern const Icon I_BLE_Pairing_128x64; -extern const Icon I_Ble_connected_38x34; -extern const Icon I_Ble_disconnected_24x34; -extern const Icon I_Button_18x18; -extern const Icon I_Circles_47x47; -extern const Icon I_Ok_btn_9x9; -extern const Icon I_Pressed_Button_13x13; -extern const Icon I_Space_65x18; -extern const Icon I_Voldwn_6x6; -extern const Icon I_Volup_8x6; -extern const Icon I_Clock_18x18; -extern const Icon I_Error_18x18; -extern const Icon I_EviSmile1_18x21; -extern const Icon I_EviSmile2_18x21; -extern const Icon I_EviWaiting1_18x21; -extern const Icon I_EviWaiting2_18x21; -extern const Icon I_Percent_10x14; -extern const Icon I_Smile_18x18; -extern const Icon I_UsbTree_48x22; -extern const Icon I_ButtonCenter_7x7; -extern const Icon I_ButtonDown_7x4; -extern const Icon I_ButtonLeftSmall_3x5; -extern const Icon I_ButtonLeft_4x7; -extern const Icon I_ButtonRightSmall_3x5; -extern const Icon I_ButtonRight_4x7; -extern const Icon I_ButtonUp_7x4; -extern const Icon I_DFU_128x50; -extern const Icon I_Warning_30x23; -extern const Icon A_Loading_24; -extern const Icon I_DolphinFirstStart0_70x53; -extern const Icon I_DolphinFirstStart1_59x53; -extern const Icon I_DolphinFirstStart2_59x51; -extern const Icon I_DolphinFirstStart3_57x48; -extern const Icon I_DolphinFirstStart4_67x53; -extern const Icon I_DolphinFirstStart5_54x49; -extern const Icon I_DolphinFirstStart6_58x54; -extern const Icon I_DolphinFirstStart7_61x51; -extern const Icon I_DolphinFirstStart8_56x51; -extern const Icon I_DolphinOkay_41x43; -extern const Icon I_ArrowDownEmpty_14x15; -extern const Icon I_ArrowDownFilled_14x15; -extern const Icon I_ArrowUpEmpty_14x15; -extern const Icon I_ArrowUpFilled_14x15; -extern const Icon I_DolphinReadingSuccess_59x63; -extern const Icon I_Down_25x27; -extern const Icon I_Down_hvr_25x27; -extern const Icon I_InfraredArrowDown_4x8; -extern const Icon I_InfraredArrowUp_4x8; -extern const Icon I_InfraredLearnShort_128x31; -extern const Icon I_InfraredLearn_128x64; -extern const Icon I_InfraredSendShort_128x34; -extern const Icon I_InfraredSend_128x64; -extern const Icon I_Mute_25x27; -extern const Icon I_Mute_hvr_25x27; -extern const Icon I_Power_25x27; -extern const Icon I_Power_hvr_25x27; -extern const Icon I_Up_25x27; -extern const Icon I_Up_hvr_25x27; -extern const Icon I_Vol_down_25x27; -extern const Icon I_Vol_down_hvr_25x27; -extern const Icon I_Vol_up_25x27; -extern const Icon I_Vol_up_hvr_25x27; -extern const Icon I_DoorLeft_70x55; -extern const Icon I_DoorLocked_10x56; -extern const Icon I_DoorRight_70x55; -extern const Icon I_PassportBottom_128x17; -extern const Icon I_PassportLeft_6x47; -extern const Icon I_WarningDolphin_45x42; -extern const Icon I_KeyBackspaceSelected_16x9; -extern const Icon I_KeyBackspace_16x9; -extern const Icon I_KeySaveSelected_24x11; -extern const Icon I_KeySave_24x11; -extern const Icon A_125khz_14; -extern const Icon A_BadUsb_14; -extern const Icon A_Bluetooth_14; -extern const Icon A_Debug_14; -extern const Icon A_FileManager_14; -extern const Icon A_GPIO_14; -extern const Icon A_Games_14; -extern const Icon A_Infrared_14; -extern const Icon A_NFC_14; -extern const Icon A_Passport_14; -extern const Icon A_Plugins_14; -extern const Icon A_Power_14; -extern const Icon A_Settings_14; -extern const Icon A_Sub1ghz_14; -extern const Icon A_Tamagotchi_14; -extern const Icon A_U2F_14; -extern const Icon A_iButton_14; -extern const Icon I_Detailed_chip_17x13; -extern const Icon I_Medium_chip_22x21; -extern const Icon I_Pin_arrow_down_7x9; -extern const Icon I_Pin_arrow_left_9x7; -extern const Icon I_Pin_arrow_right_9x7; -extern const Icon I_Pin_arrow_up7x9; -extern const Icon I_Pin_attention_dpad_29x29; -extern const Icon I_Pin_back_arrow_10x8; -extern const Icon I_Pin_back_full_40x8; -extern const Icon I_Pin_cell_13x13; -extern const Icon I_Pin_pointer_5x3; -extern const Icon I_Pin_star_7x7; -extern const Icon I_passport_bad1_46x49; -extern const Icon I_passport_bad2_46x49; -extern const Icon I_passport_bad3_46x49; -extern const Icon I_passport_bottom_128x18; -extern const Icon I_passport_happy1_46x49; -extern const Icon I_passport_happy2_46x49; -extern const Icon I_passport_happy3_46x49; -extern const Icon I_passport_left_6x46; -extern const Icon I_passport_okay1_46x49; -extern const Icon I_passport_okay2_46x49; -extern const Icon I_passport_okay3_46x49; -extern const Icon I_BatteryBody_52x28; -extern const Icon I_Battery_16x16; -extern const Icon I_FaceCharging_29x14; -extern const Icon I_FaceConfused_29x14; -extern const Icon I_FaceNopower_29x14; -extern const Icon I_FaceNormal_29x14; -extern const Icon I_Health_16x16; -extern const Icon I_Temperature_16x16; -extern const Icon I_Voltage_16x16; -extern const Icon I_RFIDBigChip_37x36; -extern const Icon I_RFIDDolphinReceive_97x61; -extern const Icon I_RFIDDolphinSend_97x61; -extern const Icon I_RFIDDolphinSuccess_108x57; -extern const Icon I_SDQuestion_35x43; -extern const Icon I_Cry_dolph_55x52; -extern const Icon I_Attention_5x8; -extern const Icon I_Background_128x11; -extern const Icon I_BadUsb_9x8; -extern const Icon I_Battery_19x8; -extern const Icon I_Battery_26x8; -extern const Icon I_Bluetooth_Connected_16x8; -extern const Icon I_Bluetooth_Idle_5x8; -extern const Icon I_Charging_lightning_9x10; -extern const Icon I_Charging_lightning_mask_9x10; -extern const Icon I_Lock_8x8; -extern const Icon I_PlaceholderL_11x13; -extern const Icon I_PlaceholderR_30x13; -extern const Icon I_SDcardFail_11x8; -extern const Icon I_SDcardMounted_11x8; -extern const Icon I_Lock_7x8; -extern const Icon I_MHz_25x11; -extern const Icon I_Quest_7x8; -extern const Icon I_Scanning_123x52; -extern const Icon I_Unlock_7x8; -extern const Icon I_Auth_62x31; -extern const Icon I_Connect_me_62x31; -extern const Icon I_Connected_62x31; -extern const Icon I_Drive_112x35; -extern const Icon I_Error_62x31; -extern const Icon I_Updating_32x40; -extern const Icon I_DolphinMafia_115x62; -extern const Icon I_DolphinNice_96x59; -extern const Icon I_DolphinWait_61x59; -extern const Icon I_iButtonDolphinVerySuccess_108x52; -extern const Icon I_iButtonKey_49x44; diff --git a/assets/compiled/flipper.pb.c b/assets/compiled/flipper.pb.c deleted file mode 100644 index 684ffe8cd..000000000 --- a/assets/compiled/flipper.pb.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Automatically generated nanopb constant definitions */ -/* Generated by nanopb-0.4.5 */ - -#include "flipper.pb.h" -#if PB_PROTO_HEADER_VERSION != 40 -#error Regenerate this file with the current version of nanopb generator. -#endif - -PB_BIND(PB_Empty, PB_Empty, AUTO) - - -PB_BIND(PB_StopSession, PB_StopSession, AUTO) - - -PB_BIND(PB_Main, PB_Main, AUTO) - - - - diff --git a/assets/compiled/flipper.pb.h b/assets/compiled/flipper.pb.h deleted file mode 100644 index 3199090db..000000000 --- a/assets/compiled/flipper.pb.h +++ /dev/null @@ -1,302 +0,0 @@ -/* Automatically generated nanopb header */ -/* Generated by nanopb-0.4.5 */ - -#ifndef PB_PB_FLIPPER_PB_H_INCLUDED -#define PB_PB_FLIPPER_PB_H_INCLUDED -#include -#include "storage.pb.h" -#include "system.pb.h" -#include "application.pb.h" -#include "gui.pb.h" - -#if PB_PROTO_HEADER_VERSION != 40 -#error Regenerate this file with the current version of nanopb generator. -#endif - -/* Enum definitions */ -typedef enum _PB_CommandStatus { - PB_CommandStatus_OK = 0, - /* *< Common Errors */ - PB_CommandStatus_ERROR = 1, /* *< Unknown error */ - PB_CommandStatus_ERROR_DECODE = 2, /* *< Command can't be decoded successfully - command_id in response may be wrong! */ - PB_CommandStatus_ERROR_NOT_IMPLEMENTED = 3, /* *< Command succesfully decoded, but not implemented (deprecated or not yet implemented) */ - PB_CommandStatus_ERROR_BUSY = 4, /* *< Somebody took global lock, so not all commands are available */ - PB_CommandStatus_ERROR_CONTINUOUS_COMMAND_INTERRUPTED = 14, /* *< Not received has_next == 0 */ - PB_CommandStatus_ERROR_INVALID_PARAMETERS = 15, /* *< not provided (or provided invalid) crucial parameters to perform rpc */ - /* *< Storage Errors */ - PB_CommandStatus_ERROR_STORAGE_NOT_READY = 5, /* *< FS not ready */ - PB_CommandStatus_ERROR_STORAGE_EXIST = 6, /* *< File/Dir alrady exist */ - PB_CommandStatus_ERROR_STORAGE_NOT_EXIST = 7, /* *< File/Dir does not exist */ - PB_CommandStatus_ERROR_STORAGE_INVALID_PARAMETER = 8, /* *< Invalid API parameter */ - PB_CommandStatus_ERROR_STORAGE_DENIED = 9, /* *< Access denied */ - PB_CommandStatus_ERROR_STORAGE_INVALID_NAME = 10, /* *< Invalid name/path */ - PB_CommandStatus_ERROR_STORAGE_INTERNAL = 11, /* *< Internal error */ - PB_CommandStatus_ERROR_STORAGE_NOT_IMPLEMENTED = 12, /* *< Functon not implemented */ - PB_CommandStatus_ERROR_STORAGE_ALREADY_OPEN = 13, /* *< File/Dir already opened */ - PB_CommandStatus_ERROR_STORAGE_DIR_NOT_EMPTY = 18, /* *< Directory, you're going to remove is not empty */ - /* *< Application Errors */ - PB_CommandStatus_ERROR_APP_CANT_START = 16, /* *< Can't start app - internal error */ - PB_CommandStatus_ERROR_APP_SYSTEM_LOCKED = 17, /* *< Another app is running */ - /* *< Virtual Display Errors */ - PB_CommandStatus_ERROR_VIRTUAL_DISPLAY_ALREADY_STARTED = 19, /* *< Virtual Display session can't be started twice */ - PB_CommandStatus_ERROR_VIRTUAL_DISPLAY_NOT_STARTED = 20 /* *< Virtual Display session can't be stopped when it's not started */ -} PB_CommandStatus; - -/* Struct definitions */ -/* There are Server commands (e.g. Storage_write), which have no body message - in response. But 'oneof' obligate to have at least 1 encoded message - in scope. For this needs Empty message is implemented. */ -typedef struct _PB_Empty { - char dummy_field; -} PB_Empty; - -typedef struct _PB_StopSession { - char dummy_field; -} PB_StopSession; - -typedef struct _PB_Main { - uint32_t command_id; - PB_CommandStatus command_status; - bool has_next; - pb_callback_t cb_content; - pb_size_t which_content; - union { - PB_Empty empty; - PB_System_PingRequest system_ping_request; - PB_System_PingResponse system_ping_response; - PB_Storage_ListRequest storage_list_request; - PB_Storage_ListResponse storage_list_response; - PB_Storage_ReadRequest storage_read_request; - PB_Storage_ReadResponse storage_read_response; - PB_Storage_WriteRequest storage_write_request; - PB_Storage_DeleteRequest storage_delete_request; - PB_Storage_MkdirRequest storage_mkdir_request; - PB_Storage_Md5sumRequest storage_md5sum_request; - PB_Storage_Md5sumResponse storage_md5sum_response; - PB_App_StartRequest app_start_request; - PB_App_LockStatusRequest app_lock_status_request; - PB_App_LockStatusResponse app_lock_status_response; - PB_StopSession stop_session; - PB_Gui_StartScreenStreamRequest gui_start_screen_stream_request; - PB_Gui_StopScreenStreamRequest gui_stop_screen_stream_request; - PB_Gui_ScreenFrame gui_screen_frame; - PB_Gui_SendInputEventRequest gui_send_input_event_request; - PB_Storage_StatRequest storage_stat_request; - PB_Storage_StatResponse storage_stat_response; - PB_Gui_StartVirtualDisplayRequest gui_start_virtual_display_request; - PB_Gui_StopVirtualDisplayRequest gui_stop_virtual_display_request; - PB_Storage_InfoRequest storage_info_request; - PB_Storage_InfoResponse storage_info_response; - PB_Storage_RenameRequest storage_rename_request; - PB_System_RebootRequest system_reboot_request; - PB_System_DeviceInfoRequest system_device_info_request; - PB_System_DeviceInfoResponse system_device_info_response; - PB_System_FactoryResetRequest system_factory_reset_request; - PB_System_GetDateTimeRequest system_get_datetime_request; - PB_System_GetDateTimeResponse system_get_datetime_response; - PB_System_SetDateTimeRequest system_set_datetime_request; - PB_System_PlayAudiovisualAlertRequest system_play_audiovisual_alert_request; - PB_System_ProtobufVersionRequest system_protobuf_version_request; - PB_System_ProtobufVersionResponse system_protobuf_version_response; - PB_System_UpdateRequest system_update_request; - PB_Storage_BackupCreateRequest storage_backup_create_request; - PB_Storage_BackupRestoreRequest storage_backup_restore_request; - PB_System_PowerInfoRequest system_power_info_request; - PB_System_PowerInfoResponse system_power_info_response; - PB_System_UpdateResponse system_update_response; - } content; -} PB_Main; - - -/* Helper constants for enums */ -#define _PB_CommandStatus_MIN PB_CommandStatus_OK -#define _PB_CommandStatus_MAX PB_CommandStatus_ERROR_VIRTUAL_DISPLAY_NOT_STARTED -#define _PB_CommandStatus_ARRAYSIZE ((PB_CommandStatus)(PB_CommandStatus_ERROR_VIRTUAL_DISPLAY_NOT_STARTED+1)) - - -#ifdef __cplusplus -extern "C" { -#endif - -/* Initializer values for message structs */ -#define PB_Empty_init_default {0} -#define PB_StopSession_init_default {0} -#define PB_Main_init_default {0, _PB_CommandStatus_MIN, 0, {{NULL}, NULL}, 0, {PB_Empty_init_default}} -#define PB_Empty_init_zero {0} -#define PB_StopSession_init_zero {0} -#define PB_Main_init_zero {0, _PB_CommandStatus_MIN, 0, {{NULL}, NULL}, 0, {PB_Empty_init_zero}} - -/* Field tags (for use in manual encoding/decoding) */ -#define PB_Main_command_id_tag 1 -#define PB_Main_command_status_tag 2 -#define PB_Main_has_next_tag 3 -#define PB_Main_empty_tag 4 -#define PB_Main_system_ping_request_tag 5 -#define PB_Main_system_ping_response_tag 6 -#define PB_Main_storage_list_request_tag 7 -#define PB_Main_storage_list_response_tag 8 -#define PB_Main_storage_read_request_tag 9 -#define PB_Main_storage_read_response_tag 10 -#define PB_Main_storage_write_request_tag 11 -#define PB_Main_storage_delete_request_tag 12 -#define PB_Main_storage_mkdir_request_tag 13 -#define PB_Main_storage_md5sum_request_tag 14 -#define PB_Main_storage_md5sum_response_tag 15 -#define PB_Main_app_start_request_tag 16 -#define PB_Main_app_lock_status_request_tag 17 -#define PB_Main_app_lock_status_response_tag 18 -#define PB_Main_stop_session_tag 19 -#define PB_Main_gui_start_screen_stream_request_tag 20 -#define PB_Main_gui_stop_screen_stream_request_tag 21 -#define PB_Main_gui_screen_frame_tag 22 -#define PB_Main_gui_send_input_event_request_tag 23 -#define PB_Main_storage_stat_request_tag 24 -#define PB_Main_storage_stat_response_tag 25 -#define PB_Main_gui_start_virtual_display_request_tag 26 -#define PB_Main_gui_stop_virtual_display_request_tag 27 -#define PB_Main_storage_info_request_tag 28 -#define PB_Main_storage_info_response_tag 29 -#define PB_Main_storage_rename_request_tag 30 -#define PB_Main_system_reboot_request_tag 31 -#define PB_Main_system_device_info_request_tag 32 -#define PB_Main_system_device_info_response_tag 33 -#define PB_Main_system_factory_reset_request_tag 34 -#define PB_Main_system_get_datetime_request_tag 35 -#define PB_Main_system_get_datetime_response_tag 36 -#define PB_Main_system_set_datetime_request_tag 37 -#define PB_Main_system_play_audiovisual_alert_request_tag 38 -#define PB_Main_system_protobuf_version_request_tag 39 -#define PB_Main_system_protobuf_version_response_tag 40 -#define PB_Main_system_update_request_tag 41 -#define PB_Main_storage_backup_create_request_tag 42 -#define PB_Main_storage_backup_restore_request_tag 43 -#define PB_Main_system_power_info_request_tag 44 -#define PB_Main_system_power_info_response_tag 45 -#define PB_Main_system_update_response_tag 46 - -/* Struct field encoding specification for nanopb */ -#define PB_Empty_FIELDLIST(X, a) \ - -#define PB_Empty_CALLBACK NULL -#define PB_Empty_DEFAULT NULL - -#define PB_StopSession_FIELDLIST(X, a) \ - -#define PB_StopSession_CALLBACK NULL -#define PB_StopSession_DEFAULT NULL - -#define PB_Main_FIELDLIST(X, a) \ -X(a, STATIC, SINGULAR, UINT32, command_id, 1) \ -X(a, STATIC, SINGULAR, UENUM, command_status, 2) \ -X(a, STATIC, SINGULAR, BOOL, has_next, 3) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,empty,content.empty), 4) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,system_ping_request,content.system_ping_request), 5) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,system_ping_response,content.system_ping_response), 6) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,storage_list_request,content.storage_list_request), 7) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,storage_list_response,content.storage_list_response), 8) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,storage_read_request,content.storage_read_request), 9) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,storage_read_response,content.storage_read_response), 10) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,storage_write_request,content.storage_write_request), 11) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,storage_delete_request,content.storage_delete_request), 12) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,storage_mkdir_request,content.storage_mkdir_request), 13) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,storage_md5sum_request,content.storage_md5sum_request), 14) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,storage_md5sum_response,content.storage_md5sum_response), 15) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,app_start_request,content.app_start_request), 16) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,app_lock_status_request,content.app_lock_status_request), 17) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,app_lock_status_response,content.app_lock_status_response), 18) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,stop_session,content.stop_session), 19) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,gui_start_screen_stream_request,content.gui_start_screen_stream_request), 20) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,gui_stop_screen_stream_request,content.gui_stop_screen_stream_request), 21) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,gui_screen_frame,content.gui_screen_frame), 22) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,gui_send_input_event_request,content.gui_send_input_event_request), 23) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,storage_stat_request,content.storage_stat_request), 24) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,storage_stat_response,content.storage_stat_response), 25) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,gui_start_virtual_display_request,content.gui_start_virtual_display_request), 26) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,gui_stop_virtual_display_request,content.gui_stop_virtual_display_request), 27) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,storage_info_request,content.storage_info_request), 28) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,storage_info_response,content.storage_info_response), 29) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,storage_rename_request,content.storage_rename_request), 30) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,system_reboot_request,content.system_reboot_request), 31) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,system_device_info_request,content.system_device_info_request), 32) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,system_device_info_response,content.system_device_info_response), 33) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,system_factory_reset_request,content.system_factory_reset_request), 34) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,system_get_datetime_request,content.system_get_datetime_request), 35) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,system_get_datetime_response,content.system_get_datetime_response), 36) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,system_set_datetime_request,content.system_set_datetime_request), 37) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,system_play_audiovisual_alert_request,content.system_play_audiovisual_alert_request), 38) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,system_protobuf_version_request,content.system_protobuf_version_request), 39) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,system_protobuf_version_response,content.system_protobuf_version_response), 40) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,system_update_request,content.system_update_request), 41) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,storage_backup_create_request,content.storage_backup_create_request), 42) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,storage_backup_restore_request,content.storage_backup_restore_request), 43) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,system_power_info_request,content.system_power_info_request), 44) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,system_power_info_response,content.system_power_info_response), 45) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,system_update_response,content.system_update_response), 46) -#define PB_Main_CALLBACK NULL -#define PB_Main_DEFAULT NULL -#define PB_Main_content_empty_MSGTYPE PB_Empty -#define PB_Main_content_system_ping_request_MSGTYPE PB_System_PingRequest -#define PB_Main_content_system_ping_response_MSGTYPE PB_System_PingResponse -#define PB_Main_content_storage_list_request_MSGTYPE PB_Storage_ListRequest -#define PB_Main_content_storage_list_response_MSGTYPE PB_Storage_ListResponse -#define PB_Main_content_storage_read_request_MSGTYPE PB_Storage_ReadRequest -#define PB_Main_content_storage_read_response_MSGTYPE PB_Storage_ReadResponse -#define PB_Main_content_storage_write_request_MSGTYPE PB_Storage_WriteRequest -#define PB_Main_content_storage_delete_request_MSGTYPE PB_Storage_DeleteRequest -#define PB_Main_content_storage_mkdir_request_MSGTYPE PB_Storage_MkdirRequest -#define PB_Main_content_storage_md5sum_request_MSGTYPE PB_Storage_Md5sumRequest -#define PB_Main_content_storage_md5sum_response_MSGTYPE PB_Storage_Md5sumResponse -#define PB_Main_content_app_start_request_MSGTYPE PB_App_StartRequest -#define PB_Main_content_app_lock_status_request_MSGTYPE PB_App_LockStatusRequest -#define PB_Main_content_app_lock_status_response_MSGTYPE PB_App_LockStatusResponse -#define PB_Main_content_stop_session_MSGTYPE PB_StopSession -#define PB_Main_content_gui_start_screen_stream_request_MSGTYPE PB_Gui_StartScreenStreamRequest -#define PB_Main_content_gui_stop_screen_stream_request_MSGTYPE PB_Gui_StopScreenStreamRequest -#define PB_Main_content_gui_screen_frame_MSGTYPE PB_Gui_ScreenFrame -#define PB_Main_content_gui_send_input_event_request_MSGTYPE PB_Gui_SendInputEventRequest -#define PB_Main_content_storage_stat_request_MSGTYPE PB_Storage_StatRequest -#define PB_Main_content_storage_stat_response_MSGTYPE PB_Storage_StatResponse -#define PB_Main_content_gui_start_virtual_display_request_MSGTYPE PB_Gui_StartVirtualDisplayRequest -#define PB_Main_content_gui_stop_virtual_display_request_MSGTYPE PB_Gui_StopVirtualDisplayRequest -#define PB_Main_content_storage_info_request_MSGTYPE PB_Storage_InfoRequest -#define PB_Main_content_storage_info_response_MSGTYPE PB_Storage_InfoResponse -#define PB_Main_content_storage_rename_request_MSGTYPE PB_Storage_RenameRequest -#define PB_Main_content_system_reboot_request_MSGTYPE PB_System_RebootRequest -#define PB_Main_content_system_device_info_request_MSGTYPE PB_System_DeviceInfoRequest -#define PB_Main_content_system_device_info_response_MSGTYPE PB_System_DeviceInfoResponse -#define PB_Main_content_system_factory_reset_request_MSGTYPE PB_System_FactoryResetRequest -#define PB_Main_content_system_get_datetime_request_MSGTYPE PB_System_GetDateTimeRequest -#define PB_Main_content_system_get_datetime_response_MSGTYPE PB_System_GetDateTimeResponse -#define PB_Main_content_system_set_datetime_request_MSGTYPE PB_System_SetDateTimeRequest -#define PB_Main_content_system_play_audiovisual_alert_request_MSGTYPE PB_System_PlayAudiovisualAlertRequest -#define PB_Main_content_system_protobuf_version_request_MSGTYPE PB_System_ProtobufVersionRequest -#define PB_Main_content_system_protobuf_version_response_MSGTYPE PB_System_ProtobufVersionResponse -#define PB_Main_content_system_update_request_MSGTYPE PB_System_UpdateRequest -#define PB_Main_content_storage_backup_create_request_MSGTYPE PB_Storage_BackupCreateRequest -#define PB_Main_content_storage_backup_restore_request_MSGTYPE PB_Storage_BackupRestoreRequest -#define PB_Main_content_system_power_info_request_MSGTYPE PB_System_PowerInfoRequest -#define PB_Main_content_system_power_info_response_MSGTYPE PB_System_PowerInfoResponse -#define PB_Main_content_system_update_response_MSGTYPE PB_System_UpdateResponse - -extern const pb_msgdesc_t PB_Empty_msg; -extern const pb_msgdesc_t PB_StopSession_msg; -extern const pb_msgdesc_t PB_Main_msg; - -/* Defines for backwards compatibility with code written before nanopb-0.4.0 */ -#define PB_Empty_fields &PB_Empty_msg -#define PB_StopSession_fields &PB_StopSession_msg -#define PB_Main_fields &PB_Main_msg - -/* Maximum encoded size of messages (where known) */ -#define PB_Empty_size 0 -#define PB_StopSession_size 0 -#if defined(PB_System_PingRequest_size) && defined(PB_System_PingResponse_size) && defined(PB_Storage_ListRequest_size) && defined(PB_Storage_ListResponse_size) && defined(PB_Storage_ReadRequest_size) && defined(PB_Storage_ReadResponse_size) && defined(PB_Storage_WriteRequest_size) && defined(PB_Storage_DeleteRequest_size) && defined(PB_Storage_MkdirRequest_size) && defined(PB_Storage_Md5sumRequest_size) && defined(PB_App_StartRequest_size) && defined(PB_Gui_ScreenFrame_size) && defined(PB_Storage_StatRequest_size) && defined(PB_Storage_StatResponse_size) && defined(PB_Gui_StartVirtualDisplayRequest_size) && defined(PB_Storage_InfoRequest_size) && defined(PB_Storage_RenameRequest_size) && defined(PB_System_DeviceInfoResponse_size) && defined(PB_System_UpdateRequest_size) && defined(PB_Storage_BackupCreateRequest_size) && defined(PB_Storage_BackupRestoreRequest_size) && defined(PB_System_PowerInfoResponse_size) -#define PB_Main_size (10 + sizeof(union PB_Main_content_size_union)) -union PB_Main_content_size_union {char f5[(6 + PB_System_PingRequest_size)]; char f6[(6 + PB_System_PingResponse_size)]; char f7[(6 + PB_Storage_ListRequest_size)]; char f8[(6 + PB_Storage_ListResponse_size)]; char f9[(6 + PB_Storage_ReadRequest_size)]; char f10[(6 + PB_Storage_ReadResponse_size)]; char f11[(6 + PB_Storage_WriteRequest_size)]; char f12[(6 + PB_Storage_DeleteRequest_size)]; char f13[(6 + PB_Storage_MkdirRequest_size)]; char f14[(6 + PB_Storage_Md5sumRequest_size)]; char f16[(7 + PB_App_StartRequest_size)]; char f22[(7 + PB_Gui_ScreenFrame_size)]; char f24[(7 + PB_Storage_StatRequest_size)]; char f25[(7 + PB_Storage_StatResponse_size)]; char f26[(7 + PB_Gui_StartVirtualDisplayRequest_size)]; char f28[(7 + PB_Storage_InfoRequest_size)]; char f30[(7 + PB_Storage_RenameRequest_size)]; char f33[(7 + PB_System_DeviceInfoResponse_size)]; char f41[(7 + PB_System_UpdateRequest_size)]; char f42[(7 + PB_Storage_BackupCreateRequest_size)]; char f43[(7 + PB_Storage_BackupRestoreRequest_size)]; char f45[(7 + PB_System_PowerInfoResponse_size)]; char f0[36];}; -#endif - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif diff --git a/assets/compiled/gui.pb.c b/assets/compiled/gui.pb.c deleted file mode 100644 index 2c1d84900..000000000 --- a/assets/compiled/gui.pb.c +++ /dev/null @@ -1,29 +0,0 @@ -/* Automatically generated nanopb constant definitions */ -/* Generated by nanopb-0.4.5 */ - -#include "gui.pb.h" -#if PB_PROTO_HEADER_VERSION != 40 -#error Regenerate this file with the current version of nanopb generator. -#endif - -PB_BIND(PB_Gui_ScreenFrame, PB_Gui_ScreenFrame, AUTO) - - -PB_BIND(PB_Gui_StartScreenStreamRequest, PB_Gui_StartScreenStreamRequest, AUTO) - - -PB_BIND(PB_Gui_StopScreenStreamRequest, PB_Gui_StopScreenStreamRequest, AUTO) - - -PB_BIND(PB_Gui_SendInputEventRequest, PB_Gui_SendInputEventRequest, AUTO) - - -PB_BIND(PB_Gui_StartVirtualDisplayRequest, PB_Gui_StartVirtualDisplayRequest, AUTO) - - -PB_BIND(PB_Gui_StopVirtualDisplayRequest, PB_Gui_StopVirtualDisplayRequest, AUTO) - - - - - diff --git a/assets/compiled/gui.pb.h b/assets/compiled/gui.pb.h deleted file mode 100644 index 7ab8a97d3..000000000 --- a/assets/compiled/gui.pb.h +++ /dev/null @@ -1,152 +0,0 @@ -/* Automatically generated nanopb header */ -/* Generated by nanopb-0.4.5 */ - -#ifndef PB_PB_GUI_GUI_PB_H_INCLUDED -#define PB_PB_GUI_GUI_PB_H_INCLUDED -#include - -#if PB_PROTO_HEADER_VERSION != 40 -#error Regenerate this file with the current version of nanopb generator. -#endif - -/* Enum definitions */ -typedef enum _PB_Gui_InputKey { - PB_Gui_InputKey_UP = 0, - PB_Gui_InputKey_DOWN = 1, - PB_Gui_InputKey_RIGHT = 2, - PB_Gui_InputKey_LEFT = 3, - PB_Gui_InputKey_OK = 4, - PB_Gui_InputKey_BACK = 5 -} PB_Gui_InputKey; - -typedef enum _PB_Gui_InputType { - PB_Gui_InputType_PRESS = 0, /* *< Press event, emitted after debounce */ - PB_Gui_InputType_RELEASE = 1, /* *< Release event, emitted after debounce */ - PB_Gui_InputType_SHORT = 2, /* *< Short event, emitted after InputTypeRelease done withing INPUT_LONG_PRESS interval */ - PB_Gui_InputType_LONG = 3, /* *< Long event, emmited after INPUT_LONG_PRESS interval, asynchronouse to InputTypeRelease */ - PB_Gui_InputType_REPEAT = 4 /* *< Repeat event, emmited with INPUT_REPEATE_PRESS period after InputTypeLong event */ -} PB_Gui_InputType; - -/* Struct definitions */ -typedef struct _PB_Gui_ScreenFrame { - pb_bytes_array_t *data; -} PB_Gui_ScreenFrame; - -typedef struct _PB_Gui_StartScreenStreamRequest { - char dummy_field; -} PB_Gui_StartScreenStreamRequest; - -typedef struct _PB_Gui_StopScreenStreamRequest { - char dummy_field; -} PB_Gui_StopScreenStreamRequest; - -typedef struct _PB_Gui_StopVirtualDisplayRequest { - char dummy_field; -} PB_Gui_StopVirtualDisplayRequest; - -typedef struct _PB_Gui_SendInputEventRequest { - PB_Gui_InputKey key; - PB_Gui_InputType type; -} PB_Gui_SendInputEventRequest; - -typedef struct _PB_Gui_StartVirtualDisplayRequest { - bool has_first_frame; - PB_Gui_ScreenFrame first_frame; /* optional */ -} PB_Gui_StartVirtualDisplayRequest; - - -/* Helper constants for enums */ -#define _PB_Gui_InputKey_MIN PB_Gui_InputKey_UP -#define _PB_Gui_InputKey_MAX PB_Gui_InputKey_BACK -#define _PB_Gui_InputKey_ARRAYSIZE ((PB_Gui_InputKey)(PB_Gui_InputKey_BACK+1)) - -#define _PB_Gui_InputType_MIN PB_Gui_InputType_PRESS -#define _PB_Gui_InputType_MAX PB_Gui_InputType_REPEAT -#define _PB_Gui_InputType_ARRAYSIZE ((PB_Gui_InputType)(PB_Gui_InputType_REPEAT+1)) - - -#ifdef __cplusplus -extern "C" { -#endif - -/* Initializer values for message structs */ -#define PB_Gui_ScreenFrame_init_default {NULL} -#define PB_Gui_StartScreenStreamRequest_init_default {0} -#define PB_Gui_StopScreenStreamRequest_init_default {0} -#define PB_Gui_SendInputEventRequest_init_default {_PB_Gui_InputKey_MIN, _PB_Gui_InputType_MIN} -#define PB_Gui_StartVirtualDisplayRequest_init_default {false, PB_Gui_ScreenFrame_init_default} -#define PB_Gui_StopVirtualDisplayRequest_init_default {0} -#define PB_Gui_ScreenFrame_init_zero {NULL} -#define PB_Gui_StartScreenStreamRequest_init_zero {0} -#define PB_Gui_StopScreenStreamRequest_init_zero {0} -#define PB_Gui_SendInputEventRequest_init_zero {_PB_Gui_InputKey_MIN, _PB_Gui_InputType_MIN} -#define PB_Gui_StartVirtualDisplayRequest_init_zero {false, PB_Gui_ScreenFrame_init_zero} -#define PB_Gui_StopVirtualDisplayRequest_init_zero {0} - -/* Field tags (for use in manual encoding/decoding) */ -#define PB_Gui_ScreenFrame_data_tag 1 -#define PB_Gui_SendInputEventRequest_key_tag 1 -#define PB_Gui_SendInputEventRequest_type_tag 2 -#define PB_Gui_StartVirtualDisplayRequest_first_frame_tag 1 - -/* Struct field encoding specification for nanopb */ -#define PB_Gui_ScreenFrame_FIELDLIST(X, a) \ -X(a, POINTER, SINGULAR, BYTES, data, 1) -#define PB_Gui_ScreenFrame_CALLBACK NULL -#define PB_Gui_ScreenFrame_DEFAULT NULL - -#define PB_Gui_StartScreenStreamRequest_FIELDLIST(X, a) \ - -#define PB_Gui_StartScreenStreamRequest_CALLBACK NULL -#define PB_Gui_StartScreenStreamRequest_DEFAULT NULL - -#define PB_Gui_StopScreenStreamRequest_FIELDLIST(X, a) \ - -#define PB_Gui_StopScreenStreamRequest_CALLBACK NULL -#define PB_Gui_StopScreenStreamRequest_DEFAULT NULL - -#define PB_Gui_SendInputEventRequest_FIELDLIST(X, a) \ -X(a, STATIC, SINGULAR, UENUM, key, 1) \ -X(a, STATIC, SINGULAR, UENUM, type, 2) -#define PB_Gui_SendInputEventRequest_CALLBACK NULL -#define PB_Gui_SendInputEventRequest_DEFAULT NULL - -#define PB_Gui_StartVirtualDisplayRequest_FIELDLIST(X, a) \ -X(a, STATIC, OPTIONAL, MESSAGE, first_frame, 1) -#define PB_Gui_StartVirtualDisplayRequest_CALLBACK NULL -#define PB_Gui_StartVirtualDisplayRequest_DEFAULT NULL -#define PB_Gui_StartVirtualDisplayRequest_first_frame_MSGTYPE PB_Gui_ScreenFrame - -#define PB_Gui_StopVirtualDisplayRequest_FIELDLIST(X, a) \ - -#define PB_Gui_StopVirtualDisplayRequest_CALLBACK NULL -#define PB_Gui_StopVirtualDisplayRequest_DEFAULT NULL - -extern const pb_msgdesc_t PB_Gui_ScreenFrame_msg; -extern const pb_msgdesc_t PB_Gui_StartScreenStreamRequest_msg; -extern const pb_msgdesc_t PB_Gui_StopScreenStreamRequest_msg; -extern const pb_msgdesc_t PB_Gui_SendInputEventRequest_msg; -extern const pb_msgdesc_t PB_Gui_StartVirtualDisplayRequest_msg; -extern const pb_msgdesc_t PB_Gui_StopVirtualDisplayRequest_msg; - -/* Defines for backwards compatibility with code written before nanopb-0.4.0 */ -#define PB_Gui_ScreenFrame_fields &PB_Gui_ScreenFrame_msg -#define PB_Gui_StartScreenStreamRequest_fields &PB_Gui_StartScreenStreamRequest_msg -#define PB_Gui_StopScreenStreamRequest_fields &PB_Gui_StopScreenStreamRequest_msg -#define PB_Gui_SendInputEventRequest_fields &PB_Gui_SendInputEventRequest_msg -#define PB_Gui_StartVirtualDisplayRequest_fields &PB_Gui_StartVirtualDisplayRequest_msg -#define PB_Gui_StopVirtualDisplayRequest_fields &PB_Gui_StopVirtualDisplayRequest_msg - -/* Maximum encoded size of messages (where known) */ -/* PB_Gui_ScreenFrame_size depends on runtime parameters */ -/* PB_Gui_StartVirtualDisplayRequest_size depends on runtime parameters */ -#define PB_Gui_SendInputEventRequest_size 4 -#define PB_Gui_StartScreenStreamRequest_size 0 -#define PB_Gui_StopScreenStreamRequest_size 0 -#define PB_Gui_StopVirtualDisplayRequest_size 0 - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif diff --git a/assets/compiled/protobuf_version.h b/assets/compiled/protobuf_version.h deleted file mode 100644 index 6b4014116..000000000 --- a/assets/compiled/protobuf_version.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once -#define PROTOBUF_MAJOR_VERSION 0 -#define PROTOBUF_MINOR_VERSION 7 diff --git a/assets/compiled/storage.pb.c b/assets/compiled/storage.pb.c deleted file mode 100644 index 244b273d1..000000000 --- a/assets/compiled/storage.pb.c +++ /dev/null @@ -1,61 +0,0 @@ -/* Automatically generated nanopb constant definitions */ -/* Generated by nanopb-0.4.5 */ - -#include "storage.pb.h" -#if PB_PROTO_HEADER_VERSION != 40 -#error Regenerate this file with the current version of nanopb generator. -#endif - -PB_BIND(PB_Storage_File, PB_Storage_File, AUTO) - - -PB_BIND(PB_Storage_InfoRequest, PB_Storage_InfoRequest, AUTO) - - -PB_BIND(PB_Storage_InfoResponse, PB_Storage_InfoResponse, AUTO) - - -PB_BIND(PB_Storage_StatRequest, PB_Storage_StatRequest, AUTO) - - -PB_BIND(PB_Storage_StatResponse, PB_Storage_StatResponse, AUTO) - - -PB_BIND(PB_Storage_ListRequest, PB_Storage_ListRequest, AUTO) - - -PB_BIND(PB_Storage_ListResponse, PB_Storage_ListResponse, AUTO) - - -PB_BIND(PB_Storage_ReadRequest, PB_Storage_ReadRequest, AUTO) - - -PB_BIND(PB_Storage_ReadResponse, PB_Storage_ReadResponse, AUTO) - - -PB_BIND(PB_Storage_WriteRequest, PB_Storage_WriteRequest, AUTO) - - -PB_BIND(PB_Storage_DeleteRequest, PB_Storage_DeleteRequest, AUTO) - - -PB_BIND(PB_Storage_MkdirRequest, PB_Storage_MkdirRequest, AUTO) - - -PB_BIND(PB_Storage_Md5sumRequest, PB_Storage_Md5sumRequest, AUTO) - - -PB_BIND(PB_Storage_Md5sumResponse, PB_Storage_Md5sumResponse, AUTO) - - -PB_BIND(PB_Storage_RenameRequest, PB_Storage_RenameRequest, AUTO) - - -PB_BIND(PB_Storage_BackupCreateRequest, PB_Storage_BackupCreateRequest, AUTO) - - -PB_BIND(PB_Storage_BackupRestoreRequest, PB_Storage_BackupRestoreRequest, AUTO) - - - - diff --git a/assets/compiled/storage.pb.h b/assets/compiled/storage.pb.h deleted file mode 100644 index 9b31dc313..000000000 --- a/assets/compiled/storage.pb.h +++ /dev/null @@ -1,328 +0,0 @@ -/* Automatically generated nanopb header */ -/* Generated by nanopb-0.4.5 */ - -#ifndef PB_PB_STORAGE_STORAGE_PB_H_INCLUDED -#define PB_PB_STORAGE_STORAGE_PB_H_INCLUDED -#include - -#if PB_PROTO_HEADER_VERSION != 40 -#error Regenerate this file with the current version of nanopb generator. -#endif - -/* Enum definitions */ -typedef enum _PB_Storage_File_FileType { - PB_Storage_File_FileType_FILE = 0, - PB_Storage_File_FileType_DIR = 1 -} PB_Storage_File_FileType; - -/* Struct definitions */ -typedef struct _PB_Storage_BackupCreateRequest { - char *archive_path; -} PB_Storage_BackupCreateRequest; - -typedef struct _PB_Storage_BackupRestoreRequest { - char *archive_path; -} PB_Storage_BackupRestoreRequest; - -typedef struct _PB_Storage_InfoRequest { - char *path; -} PB_Storage_InfoRequest; - -typedef struct _PB_Storage_ListRequest { - char *path; -} PB_Storage_ListRequest; - -typedef struct _PB_Storage_Md5sumRequest { - char *path; -} PB_Storage_Md5sumRequest; - -typedef struct _PB_Storage_MkdirRequest { - char *path; -} PB_Storage_MkdirRequest; - -typedef struct _PB_Storage_ReadRequest { - char *path; -} PB_Storage_ReadRequest; - -typedef struct _PB_Storage_RenameRequest { - char *old_path; - char *new_path; -} PB_Storage_RenameRequest; - -typedef struct _PB_Storage_StatRequest { - char *path; -} PB_Storage_StatRequest; - -typedef struct _PB_Storage_DeleteRequest { - char *path; - bool recursive; -} PB_Storage_DeleteRequest; - -typedef struct _PB_Storage_File { - PB_Storage_File_FileType type; - char *name; - uint32_t size; - pb_bytes_array_t *data; -} PB_Storage_File; - -typedef struct _PB_Storage_InfoResponse { - uint64_t total_space; - uint64_t free_space; -} PB_Storage_InfoResponse; - -typedef struct _PB_Storage_Md5sumResponse { - char md5sum[33]; -} PB_Storage_Md5sumResponse; - -typedef struct _PB_Storage_ListResponse { - pb_size_t file_count; - PB_Storage_File file[8]; -} PB_Storage_ListResponse; - -typedef struct _PB_Storage_ReadResponse { - bool has_file; - PB_Storage_File file; -} PB_Storage_ReadResponse; - -typedef struct _PB_Storage_StatResponse { - bool has_file; - PB_Storage_File file; -} PB_Storage_StatResponse; - -typedef struct _PB_Storage_WriteRequest { - char *path; - bool has_file; - PB_Storage_File file; -} PB_Storage_WriteRequest; - - -/* Helper constants for enums */ -#define _PB_Storage_File_FileType_MIN PB_Storage_File_FileType_FILE -#define _PB_Storage_File_FileType_MAX PB_Storage_File_FileType_DIR -#define _PB_Storage_File_FileType_ARRAYSIZE ((PB_Storage_File_FileType)(PB_Storage_File_FileType_DIR+1)) - - -#ifdef __cplusplus -extern "C" { -#endif - -/* Initializer values for message structs */ -#define PB_Storage_File_init_default {_PB_Storage_File_FileType_MIN, NULL, 0, NULL} -#define PB_Storage_InfoRequest_init_default {NULL} -#define PB_Storage_InfoResponse_init_default {0, 0} -#define PB_Storage_StatRequest_init_default {NULL} -#define PB_Storage_StatResponse_init_default {false, PB_Storage_File_init_default} -#define PB_Storage_ListRequest_init_default {NULL} -#define PB_Storage_ListResponse_init_default {0, {PB_Storage_File_init_default, PB_Storage_File_init_default, PB_Storage_File_init_default, PB_Storage_File_init_default, PB_Storage_File_init_default, PB_Storage_File_init_default, PB_Storage_File_init_default, PB_Storage_File_init_default}} -#define PB_Storage_ReadRequest_init_default {NULL} -#define PB_Storage_ReadResponse_init_default {false, PB_Storage_File_init_default} -#define PB_Storage_WriteRequest_init_default {NULL, false, PB_Storage_File_init_default} -#define PB_Storage_DeleteRequest_init_default {NULL, 0} -#define PB_Storage_MkdirRequest_init_default {NULL} -#define PB_Storage_Md5sumRequest_init_default {NULL} -#define PB_Storage_Md5sumResponse_init_default {""} -#define PB_Storage_RenameRequest_init_default {NULL, NULL} -#define PB_Storage_BackupCreateRequest_init_default {NULL} -#define PB_Storage_BackupRestoreRequest_init_default {NULL} -#define PB_Storage_File_init_zero {_PB_Storage_File_FileType_MIN, NULL, 0, NULL} -#define PB_Storage_InfoRequest_init_zero {NULL} -#define PB_Storage_InfoResponse_init_zero {0, 0} -#define PB_Storage_StatRequest_init_zero {NULL} -#define PB_Storage_StatResponse_init_zero {false, PB_Storage_File_init_zero} -#define PB_Storage_ListRequest_init_zero {NULL} -#define PB_Storage_ListResponse_init_zero {0, {PB_Storage_File_init_zero, PB_Storage_File_init_zero, PB_Storage_File_init_zero, PB_Storage_File_init_zero, PB_Storage_File_init_zero, PB_Storage_File_init_zero, PB_Storage_File_init_zero, PB_Storage_File_init_zero}} -#define PB_Storage_ReadRequest_init_zero {NULL} -#define PB_Storage_ReadResponse_init_zero {false, PB_Storage_File_init_zero} -#define PB_Storage_WriteRequest_init_zero {NULL, false, PB_Storage_File_init_zero} -#define PB_Storage_DeleteRequest_init_zero {NULL, 0} -#define PB_Storage_MkdirRequest_init_zero {NULL} -#define PB_Storage_Md5sumRequest_init_zero {NULL} -#define PB_Storage_Md5sumResponse_init_zero {""} -#define PB_Storage_RenameRequest_init_zero {NULL, NULL} -#define PB_Storage_BackupCreateRequest_init_zero {NULL} -#define PB_Storage_BackupRestoreRequest_init_zero {NULL} - -/* Field tags (for use in manual encoding/decoding) */ -#define PB_Storage_BackupCreateRequest_archive_path_tag 1 -#define PB_Storage_BackupRestoreRequest_archive_path_tag 1 -#define PB_Storage_InfoRequest_path_tag 1 -#define PB_Storage_ListRequest_path_tag 1 -#define PB_Storage_Md5sumRequest_path_tag 1 -#define PB_Storage_MkdirRequest_path_tag 1 -#define PB_Storage_ReadRequest_path_tag 1 -#define PB_Storage_RenameRequest_old_path_tag 1 -#define PB_Storage_RenameRequest_new_path_tag 2 -#define PB_Storage_StatRequest_path_tag 1 -#define PB_Storage_DeleteRequest_path_tag 1 -#define PB_Storage_DeleteRequest_recursive_tag 2 -#define PB_Storage_File_type_tag 1 -#define PB_Storage_File_name_tag 2 -#define PB_Storage_File_size_tag 3 -#define PB_Storage_File_data_tag 4 -#define PB_Storage_InfoResponse_total_space_tag 1 -#define PB_Storage_InfoResponse_free_space_tag 2 -#define PB_Storage_Md5sumResponse_md5sum_tag 1 -#define PB_Storage_ListResponse_file_tag 1 -#define PB_Storage_ReadResponse_file_tag 1 -#define PB_Storage_StatResponse_file_tag 1 -#define PB_Storage_WriteRequest_path_tag 1 -#define PB_Storage_WriteRequest_file_tag 2 - -/* Struct field encoding specification for nanopb */ -#define PB_Storage_File_FIELDLIST(X, a) \ -X(a, STATIC, SINGULAR, UENUM, type, 1) \ -X(a, POINTER, SINGULAR, STRING, name, 2) \ -X(a, STATIC, SINGULAR, UINT32, size, 3) \ -X(a, POINTER, SINGULAR, BYTES, data, 4) -#define PB_Storage_File_CALLBACK NULL -#define PB_Storage_File_DEFAULT NULL - -#define PB_Storage_InfoRequest_FIELDLIST(X, a) \ -X(a, POINTER, SINGULAR, STRING, path, 1) -#define PB_Storage_InfoRequest_CALLBACK NULL -#define PB_Storage_InfoRequest_DEFAULT NULL - -#define PB_Storage_InfoResponse_FIELDLIST(X, a) \ -X(a, STATIC, SINGULAR, UINT64, total_space, 1) \ -X(a, STATIC, SINGULAR, UINT64, free_space, 2) -#define PB_Storage_InfoResponse_CALLBACK NULL -#define PB_Storage_InfoResponse_DEFAULT NULL - -#define PB_Storage_StatRequest_FIELDLIST(X, a) \ -X(a, POINTER, SINGULAR, STRING, path, 1) -#define PB_Storage_StatRequest_CALLBACK NULL -#define PB_Storage_StatRequest_DEFAULT NULL - -#define PB_Storage_StatResponse_FIELDLIST(X, a) \ -X(a, STATIC, OPTIONAL, MESSAGE, file, 1) -#define PB_Storage_StatResponse_CALLBACK NULL -#define PB_Storage_StatResponse_DEFAULT NULL -#define PB_Storage_StatResponse_file_MSGTYPE PB_Storage_File - -#define PB_Storage_ListRequest_FIELDLIST(X, a) \ -X(a, POINTER, SINGULAR, STRING, path, 1) -#define PB_Storage_ListRequest_CALLBACK NULL -#define PB_Storage_ListRequest_DEFAULT NULL - -#define PB_Storage_ListResponse_FIELDLIST(X, a) \ -X(a, STATIC, REPEATED, MESSAGE, file, 1) -#define PB_Storage_ListResponse_CALLBACK NULL -#define PB_Storage_ListResponse_DEFAULT NULL -#define PB_Storage_ListResponse_file_MSGTYPE PB_Storage_File - -#define PB_Storage_ReadRequest_FIELDLIST(X, a) \ -X(a, POINTER, SINGULAR, STRING, path, 1) -#define PB_Storage_ReadRequest_CALLBACK NULL -#define PB_Storage_ReadRequest_DEFAULT NULL - -#define PB_Storage_ReadResponse_FIELDLIST(X, a) \ -X(a, STATIC, OPTIONAL, MESSAGE, file, 1) -#define PB_Storage_ReadResponse_CALLBACK NULL -#define PB_Storage_ReadResponse_DEFAULT NULL -#define PB_Storage_ReadResponse_file_MSGTYPE PB_Storage_File - -#define PB_Storage_WriteRequest_FIELDLIST(X, a) \ -X(a, POINTER, SINGULAR, STRING, path, 1) \ -X(a, STATIC, OPTIONAL, MESSAGE, file, 2) -#define PB_Storage_WriteRequest_CALLBACK NULL -#define PB_Storage_WriteRequest_DEFAULT NULL -#define PB_Storage_WriteRequest_file_MSGTYPE PB_Storage_File - -#define PB_Storage_DeleteRequest_FIELDLIST(X, a) \ -X(a, POINTER, SINGULAR, STRING, path, 1) \ -X(a, STATIC, SINGULAR, BOOL, recursive, 2) -#define PB_Storage_DeleteRequest_CALLBACK NULL -#define PB_Storage_DeleteRequest_DEFAULT NULL - -#define PB_Storage_MkdirRequest_FIELDLIST(X, a) \ -X(a, POINTER, SINGULAR, STRING, path, 1) -#define PB_Storage_MkdirRequest_CALLBACK NULL -#define PB_Storage_MkdirRequest_DEFAULT NULL - -#define PB_Storage_Md5sumRequest_FIELDLIST(X, a) \ -X(a, POINTER, SINGULAR, STRING, path, 1) -#define PB_Storage_Md5sumRequest_CALLBACK NULL -#define PB_Storage_Md5sumRequest_DEFAULT NULL - -#define PB_Storage_Md5sumResponse_FIELDLIST(X, a) \ -X(a, STATIC, SINGULAR, STRING, md5sum, 1) -#define PB_Storage_Md5sumResponse_CALLBACK NULL -#define PB_Storage_Md5sumResponse_DEFAULT NULL - -#define PB_Storage_RenameRequest_FIELDLIST(X, a) \ -X(a, POINTER, SINGULAR, STRING, old_path, 1) \ -X(a, POINTER, SINGULAR, STRING, new_path, 2) -#define PB_Storage_RenameRequest_CALLBACK NULL -#define PB_Storage_RenameRequest_DEFAULT NULL - -#define PB_Storage_BackupCreateRequest_FIELDLIST(X, a) \ -X(a, POINTER, SINGULAR, STRING, archive_path, 1) -#define PB_Storage_BackupCreateRequest_CALLBACK NULL -#define PB_Storage_BackupCreateRequest_DEFAULT NULL - -#define PB_Storage_BackupRestoreRequest_FIELDLIST(X, a) \ -X(a, POINTER, SINGULAR, STRING, archive_path, 1) -#define PB_Storage_BackupRestoreRequest_CALLBACK NULL -#define PB_Storage_BackupRestoreRequest_DEFAULT NULL - -extern const pb_msgdesc_t PB_Storage_File_msg; -extern const pb_msgdesc_t PB_Storage_InfoRequest_msg; -extern const pb_msgdesc_t PB_Storage_InfoResponse_msg; -extern const pb_msgdesc_t PB_Storage_StatRequest_msg; -extern const pb_msgdesc_t PB_Storage_StatResponse_msg; -extern const pb_msgdesc_t PB_Storage_ListRequest_msg; -extern const pb_msgdesc_t PB_Storage_ListResponse_msg; -extern const pb_msgdesc_t PB_Storage_ReadRequest_msg; -extern const pb_msgdesc_t PB_Storage_ReadResponse_msg; -extern const pb_msgdesc_t PB_Storage_WriteRequest_msg; -extern const pb_msgdesc_t PB_Storage_DeleteRequest_msg; -extern const pb_msgdesc_t PB_Storage_MkdirRequest_msg; -extern const pb_msgdesc_t PB_Storage_Md5sumRequest_msg; -extern const pb_msgdesc_t PB_Storage_Md5sumResponse_msg; -extern const pb_msgdesc_t PB_Storage_RenameRequest_msg; -extern const pb_msgdesc_t PB_Storage_BackupCreateRequest_msg; -extern const pb_msgdesc_t PB_Storage_BackupRestoreRequest_msg; - -/* Defines for backwards compatibility with code written before nanopb-0.4.0 */ -#define PB_Storage_File_fields &PB_Storage_File_msg -#define PB_Storage_InfoRequest_fields &PB_Storage_InfoRequest_msg -#define PB_Storage_InfoResponse_fields &PB_Storage_InfoResponse_msg -#define PB_Storage_StatRequest_fields &PB_Storage_StatRequest_msg -#define PB_Storage_StatResponse_fields &PB_Storage_StatResponse_msg -#define PB_Storage_ListRequest_fields &PB_Storage_ListRequest_msg -#define PB_Storage_ListResponse_fields &PB_Storage_ListResponse_msg -#define PB_Storage_ReadRequest_fields &PB_Storage_ReadRequest_msg -#define PB_Storage_ReadResponse_fields &PB_Storage_ReadResponse_msg -#define PB_Storage_WriteRequest_fields &PB_Storage_WriteRequest_msg -#define PB_Storage_DeleteRequest_fields &PB_Storage_DeleteRequest_msg -#define PB_Storage_MkdirRequest_fields &PB_Storage_MkdirRequest_msg -#define PB_Storage_Md5sumRequest_fields &PB_Storage_Md5sumRequest_msg -#define PB_Storage_Md5sumResponse_fields &PB_Storage_Md5sumResponse_msg -#define PB_Storage_RenameRequest_fields &PB_Storage_RenameRequest_msg -#define PB_Storage_BackupCreateRequest_fields &PB_Storage_BackupCreateRequest_msg -#define PB_Storage_BackupRestoreRequest_fields &PB_Storage_BackupRestoreRequest_msg - -/* Maximum encoded size of messages (where known) */ -/* PB_Storage_File_size depends on runtime parameters */ -/* PB_Storage_InfoRequest_size depends on runtime parameters */ -/* PB_Storage_StatRequest_size depends on runtime parameters */ -/* PB_Storage_StatResponse_size depends on runtime parameters */ -/* PB_Storage_ListRequest_size depends on runtime parameters */ -/* PB_Storage_ListResponse_size depends on runtime parameters */ -/* PB_Storage_ReadRequest_size depends on runtime parameters */ -/* PB_Storage_ReadResponse_size depends on runtime parameters */ -/* PB_Storage_WriteRequest_size depends on runtime parameters */ -/* PB_Storage_DeleteRequest_size depends on runtime parameters */ -/* PB_Storage_MkdirRequest_size depends on runtime parameters */ -/* PB_Storage_Md5sumRequest_size depends on runtime parameters */ -/* PB_Storage_RenameRequest_size depends on runtime parameters */ -/* PB_Storage_BackupCreateRequest_size depends on runtime parameters */ -/* PB_Storage_BackupRestoreRequest_size depends on runtime parameters */ -#define PB_Storage_InfoResponse_size 22 -#define PB_Storage_Md5sumResponse_size 34 - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif diff --git a/assets/compiled/system.pb.c b/assets/compiled/system.pb.c deleted file mode 100644 index e05ff90e8..000000000 --- a/assets/compiled/system.pb.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Automatically generated nanopb constant definitions */ -/* Generated by nanopb-0.4.5 */ - -#include "system.pb.h" -#if PB_PROTO_HEADER_VERSION != 40 -#error Regenerate this file with the current version of nanopb generator. -#endif - -PB_BIND(PB_System_PingRequest, PB_System_PingRequest, AUTO) - - -PB_BIND(PB_System_PingResponse, PB_System_PingResponse, AUTO) - - -PB_BIND(PB_System_RebootRequest, PB_System_RebootRequest, AUTO) - - -PB_BIND(PB_System_DeviceInfoRequest, PB_System_DeviceInfoRequest, AUTO) - - -PB_BIND(PB_System_DeviceInfoResponse, PB_System_DeviceInfoResponse, AUTO) - - -PB_BIND(PB_System_FactoryResetRequest, PB_System_FactoryResetRequest, AUTO) - - -PB_BIND(PB_System_GetDateTimeRequest, PB_System_GetDateTimeRequest, AUTO) - - -PB_BIND(PB_System_GetDateTimeResponse, PB_System_GetDateTimeResponse, AUTO) - - -PB_BIND(PB_System_SetDateTimeRequest, PB_System_SetDateTimeRequest, AUTO) - - -PB_BIND(PB_System_DateTime, PB_System_DateTime, AUTO) - - -PB_BIND(PB_System_PlayAudiovisualAlertRequest, PB_System_PlayAudiovisualAlertRequest, AUTO) - - -PB_BIND(PB_System_ProtobufVersionRequest, PB_System_ProtobufVersionRequest, AUTO) - - -PB_BIND(PB_System_ProtobufVersionResponse, PB_System_ProtobufVersionResponse, AUTO) - - -PB_BIND(PB_System_UpdateRequest, PB_System_UpdateRequest, AUTO) - - -PB_BIND(PB_System_UpdateResponse, PB_System_UpdateResponse, AUTO) - - -PB_BIND(PB_System_PowerInfoRequest, PB_System_PowerInfoRequest, AUTO) - - -PB_BIND(PB_System_PowerInfoResponse, PB_System_PowerInfoResponse, AUTO) - - - - - diff --git a/assets/compiled/system.pb.h b/assets/compiled/system.pb.h deleted file mode 100644 index aef2c75be..000000000 --- a/assets/compiled/system.pb.h +++ /dev/null @@ -1,342 +0,0 @@ -/* Automatically generated nanopb header */ -/* Generated by nanopb-0.4.5 */ - -#ifndef PB_PB_SYSTEM_SYSTEM_PB_H_INCLUDED -#define PB_PB_SYSTEM_SYSTEM_PB_H_INCLUDED -#include - -#if PB_PROTO_HEADER_VERSION != 40 -#error Regenerate this file with the current version of nanopb generator. -#endif - -/* Enum definitions */ -typedef enum _PB_System_RebootRequest_RebootMode { - PB_System_RebootRequest_RebootMode_OS = 0, - PB_System_RebootRequest_RebootMode_DFU = 1, - PB_System_RebootRequest_RebootMode_UPDATE = 2 -} PB_System_RebootRequest_RebootMode; - -typedef enum _PB_System_UpdateResponse_UpdateResultCode { - PB_System_UpdateResponse_UpdateResultCode_OK = 0, - PB_System_UpdateResponse_UpdateResultCode_ManifestPathInvalid = 1, - PB_System_UpdateResponse_UpdateResultCode_ManifestFolderNotFound = 2, - PB_System_UpdateResponse_UpdateResultCode_ManifestInvalid = 3, - PB_System_UpdateResponse_UpdateResultCode_StageMissing = 4, - PB_System_UpdateResponse_UpdateResultCode_StageIntegrityError = 5, - PB_System_UpdateResponse_UpdateResultCode_ManifestPointerError = 6, - PB_System_UpdateResponse_UpdateResultCode_TargetMismatch = 7 -} PB_System_UpdateResponse_UpdateResultCode; - -/* Struct definitions */ -typedef struct _PB_System_DeviceInfoRequest { - char dummy_field; -} PB_System_DeviceInfoRequest; - -typedef struct _PB_System_DeviceInfoResponse { - char *key; - char *value; -} PB_System_DeviceInfoResponse; - -typedef struct _PB_System_FactoryResetRequest { - char dummy_field; -} PB_System_FactoryResetRequest; - -typedef struct _PB_System_GetDateTimeRequest { - char dummy_field; -} PB_System_GetDateTimeRequest; - -typedef struct _PB_System_PingRequest { - pb_bytes_array_t *data; -} PB_System_PingRequest; - -typedef struct _PB_System_PingResponse { - pb_bytes_array_t *data; -} PB_System_PingResponse; - -typedef struct _PB_System_PlayAudiovisualAlertRequest { - char dummy_field; -} PB_System_PlayAudiovisualAlertRequest; - -typedef struct _PB_System_PowerInfoRequest { - char dummy_field; -} PB_System_PowerInfoRequest; - -typedef struct _PB_System_PowerInfoResponse { - char *key; - char *value; -} PB_System_PowerInfoResponse; - -typedef struct _PB_System_ProtobufVersionRequest { - char dummy_field; -} PB_System_ProtobufVersionRequest; - -typedef struct _PB_System_UpdateRequest { - char *update_manifest; -} PB_System_UpdateRequest; - -typedef struct _PB_System_DateTime { - /* Time */ - uint8_t hour; /* *< Hour in 24H format: 0-23 */ - uint8_t minute; /* *< Minute: 0-59 */ - uint8_t second; /* *< Second: 0-59 */ - /* Date */ - uint8_t day; /* *< Current day: 1-31 */ - uint8_t month; /* *< Current month: 1-12 */ - uint16_t year; /* *< Current year: 2000-2099 */ - uint8_t weekday; /* *< Current weekday: 1-7 */ -} PB_System_DateTime; - -typedef struct _PB_System_ProtobufVersionResponse { - uint32_t major; - uint32_t minor; -} PB_System_ProtobufVersionResponse; - -typedef struct _PB_System_RebootRequest { - PB_System_RebootRequest_RebootMode mode; -} PB_System_RebootRequest; - -typedef struct _PB_System_UpdateResponse { - PB_System_UpdateResponse_UpdateResultCode code; -} PB_System_UpdateResponse; - -typedef struct _PB_System_GetDateTimeResponse { - bool has_datetime; - PB_System_DateTime datetime; -} PB_System_GetDateTimeResponse; - -typedef struct _PB_System_SetDateTimeRequest { - bool has_datetime; - PB_System_DateTime datetime; -} PB_System_SetDateTimeRequest; - - -/* Helper constants for enums */ -#define _PB_System_RebootRequest_RebootMode_MIN PB_System_RebootRequest_RebootMode_OS -#define _PB_System_RebootRequest_RebootMode_MAX PB_System_RebootRequest_RebootMode_UPDATE -#define _PB_System_RebootRequest_RebootMode_ARRAYSIZE ((PB_System_RebootRequest_RebootMode)(PB_System_RebootRequest_RebootMode_UPDATE+1)) - -#define _PB_System_UpdateResponse_UpdateResultCode_MIN PB_System_UpdateResponse_UpdateResultCode_OK -#define _PB_System_UpdateResponse_UpdateResultCode_MAX PB_System_UpdateResponse_UpdateResultCode_TargetMismatch -#define _PB_System_UpdateResponse_UpdateResultCode_ARRAYSIZE ((PB_System_UpdateResponse_UpdateResultCode)(PB_System_UpdateResponse_UpdateResultCode_TargetMismatch+1)) - - -#ifdef __cplusplus -extern "C" { -#endif - -/* Initializer values for message structs */ -#define PB_System_PingRequest_init_default {NULL} -#define PB_System_PingResponse_init_default {NULL} -#define PB_System_RebootRequest_init_default {_PB_System_RebootRequest_RebootMode_MIN} -#define PB_System_DeviceInfoRequest_init_default {0} -#define PB_System_DeviceInfoResponse_init_default {NULL, NULL} -#define PB_System_FactoryResetRequest_init_default {0} -#define PB_System_GetDateTimeRequest_init_default {0} -#define PB_System_GetDateTimeResponse_init_default {false, PB_System_DateTime_init_default} -#define PB_System_SetDateTimeRequest_init_default {false, PB_System_DateTime_init_default} -#define PB_System_DateTime_init_default {0, 0, 0, 0, 0, 0, 0} -#define PB_System_PlayAudiovisualAlertRequest_init_default {0} -#define PB_System_ProtobufVersionRequest_init_default {0} -#define PB_System_ProtobufVersionResponse_init_default {0, 0} -#define PB_System_UpdateRequest_init_default {NULL} -#define PB_System_UpdateResponse_init_default {_PB_System_UpdateResponse_UpdateResultCode_MIN} -#define PB_System_PowerInfoRequest_init_default {0} -#define PB_System_PowerInfoResponse_init_default {NULL, NULL} -#define PB_System_PingRequest_init_zero {NULL} -#define PB_System_PingResponse_init_zero {NULL} -#define PB_System_RebootRequest_init_zero {_PB_System_RebootRequest_RebootMode_MIN} -#define PB_System_DeviceInfoRequest_init_zero {0} -#define PB_System_DeviceInfoResponse_init_zero {NULL, NULL} -#define PB_System_FactoryResetRequest_init_zero {0} -#define PB_System_GetDateTimeRequest_init_zero {0} -#define PB_System_GetDateTimeResponse_init_zero {false, PB_System_DateTime_init_zero} -#define PB_System_SetDateTimeRequest_init_zero {false, PB_System_DateTime_init_zero} -#define PB_System_DateTime_init_zero {0, 0, 0, 0, 0, 0, 0} -#define PB_System_PlayAudiovisualAlertRequest_init_zero {0} -#define PB_System_ProtobufVersionRequest_init_zero {0} -#define PB_System_ProtobufVersionResponse_init_zero {0, 0} -#define PB_System_UpdateRequest_init_zero {NULL} -#define PB_System_UpdateResponse_init_zero {_PB_System_UpdateResponse_UpdateResultCode_MIN} -#define PB_System_PowerInfoRequest_init_zero {0} -#define PB_System_PowerInfoResponse_init_zero {NULL, NULL} - -/* Field tags (for use in manual encoding/decoding) */ -#define PB_System_DeviceInfoResponse_key_tag 1 -#define PB_System_DeviceInfoResponse_value_tag 2 -#define PB_System_PingRequest_data_tag 1 -#define PB_System_PingResponse_data_tag 1 -#define PB_System_PowerInfoResponse_key_tag 1 -#define PB_System_PowerInfoResponse_value_tag 2 -#define PB_System_UpdateRequest_update_manifest_tag 1 -#define PB_System_DateTime_hour_tag 1 -#define PB_System_DateTime_minute_tag 2 -#define PB_System_DateTime_second_tag 3 -#define PB_System_DateTime_day_tag 4 -#define PB_System_DateTime_month_tag 5 -#define PB_System_DateTime_year_tag 6 -#define PB_System_DateTime_weekday_tag 7 -#define PB_System_ProtobufVersionResponse_major_tag 1 -#define PB_System_ProtobufVersionResponse_minor_tag 2 -#define PB_System_RebootRequest_mode_tag 1 -#define PB_System_UpdateResponse_code_tag 1 -#define PB_System_GetDateTimeResponse_datetime_tag 1 -#define PB_System_SetDateTimeRequest_datetime_tag 1 - -/* Struct field encoding specification for nanopb */ -#define PB_System_PingRequest_FIELDLIST(X, a) \ -X(a, POINTER, SINGULAR, BYTES, data, 1) -#define PB_System_PingRequest_CALLBACK NULL -#define PB_System_PingRequest_DEFAULT NULL - -#define PB_System_PingResponse_FIELDLIST(X, a) \ -X(a, POINTER, SINGULAR, BYTES, data, 1) -#define PB_System_PingResponse_CALLBACK NULL -#define PB_System_PingResponse_DEFAULT NULL - -#define PB_System_RebootRequest_FIELDLIST(X, a) \ -X(a, STATIC, SINGULAR, UENUM, mode, 1) -#define PB_System_RebootRequest_CALLBACK NULL -#define PB_System_RebootRequest_DEFAULT NULL - -#define PB_System_DeviceInfoRequest_FIELDLIST(X, a) \ - -#define PB_System_DeviceInfoRequest_CALLBACK NULL -#define PB_System_DeviceInfoRequest_DEFAULT NULL - -#define PB_System_DeviceInfoResponse_FIELDLIST(X, a) \ -X(a, POINTER, SINGULAR, STRING, key, 1) \ -X(a, POINTER, SINGULAR, STRING, value, 2) -#define PB_System_DeviceInfoResponse_CALLBACK NULL -#define PB_System_DeviceInfoResponse_DEFAULT NULL - -#define PB_System_FactoryResetRequest_FIELDLIST(X, a) \ - -#define PB_System_FactoryResetRequest_CALLBACK NULL -#define PB_System_FactoryResetRequest_DEFAULT NULL - -#define PB_System_GetDateTimeRequest_FIELDLIST(X, a) \ - -#define PB_System_GetDateTimeRequest_CALLBACK NULL -#define PB_System_GetDateTimeRequest_DEFAULT NULL - -#define PB_System_GetDateTimeResponse_FIELDLIST(X, a) \ -X(a, STATIC, OPTIONAL, MESSAGE, datetime, 1) -#define PB_System_GetDateTimeResponse_CALLBACK NULL -#define PB_System_GetDateTimeResponse_DEFAULT NULL -#define PB_System_GetDateTimeResponse_datetime_MSGTYPE PB_System_DateTime - -#define PB_System_SetDateTimeRequest_FIELDLIST(X, a) \ -X(a, STATIC, OPTIONAL, MESSAGE, datetime, 1) -#define PB_System_SetDateTimeRequest_CALLBACK NULL -#define PB_System_SetDateTimeRequest_DEFAULT NULL -#define PB_System_SetDateTimeRequest_datetime_MSGTYPE PB_System_DateTime - -#define PB_System_DateTime_FIELDLIST(X, a) \ -X(a, STATIC, SINGULAR, UINT32, hour, 1) \ -X(a, STATIC, SINGULAR, UINT32, minute, 2) \ -X(a, STATIC, SINGULAR, UINT32, second, 3) \ -X(a, STATIC, SINGULAR, UINT32, day, 4) \ -X(a, STATIC, SINGULAR, UINT32, month, 5) \ -X(a, STATIC, SINGULAR, UINT32, year, 6) \ -X(a, STATIC, SINGULAR, UINT32, weekday, 7) -#define PB_System_DateTime_CALLBACK NULL -#define PB_System_DateTime_DEFAULT NULL - -#define PB_System_PlayAudiovisualAlertRequest_FIELDLIST(X, a) \ - -#define PB_System_PlayAudiovisualAlertRequest_CALLBACK NULL -#define PB_System_PlayAudiovisualAlertRequest_DEFAULT NULL - -#define PB_System_ProtobufVersionRequest_FIELDLIST(X, a) \ - -#define PB_System_ProtobufVersionRequest_CALLBACK NULL -#define PB_System_ProtobufVersionRequest_DEFAULT NULL - -#define PB_System_ProtobufVersionResponse_FIELDLIST(X, a) \ -X(a, STATIC, SINGULAR, UINT32, major, 1) \ -X(a, STATIC, SINGULAR, UINT32, minor, 2) -#define PB_System_ProtobufVersionResponse_CALLBACK NULL -#define PB_System_ProtobufVersionResponse_DEFAULT NULL - -#define PB_System_UpdateRequest_FIELDLIST(X, a) \ -X(a, POINTER, SINGULAR, STRING, update_manifest, 1) -#define PB_System_UpdateRequest_CALLBACK NULL -#define PB_System_UpdateRequest_DEFAULT NULL - -#define PB_System_UpdateResponse_FIELDLIST(X, a) \ -X(a, STATIC, SINGULAR, UENUM, code, 1) -#define PB_System_UpdateResponse_CALLBACK NULL -#define PB_System_UpdateResponse_DEFAULT NULL - -#define PB_System_PowerInfoRequest_FIELDLIST(X, a) \ - -#define PB_System_PowerInfoRequest_CALLBACK NULL -#define PB_System_PowerInfoRequest_DEFAULT NULL - -#define PB_System_PowerInfoResponse_FIELDLIST(X, a) \ -X(a, POINTER, SINGULAR, STRING, key, 1) \ -X(a, POINTER, SINGULAR, STRING, value, 2) -#define PB_System_PowerInfoResponse_CALLBACK NULL -#define PB_System_PowerInfoResponse_DEFAULT NULL - -extern const pb_msgdesc_t PB_System_PingRequest_msg; -extern const pb_msgdesc_t PB_System_PingResponse_msg; -extern const pb_msgdesc_t PB_System_RebootRequest_msg; -extern const pb_msgdesc_t PB_System_DeviceInfoRequest_msg; -extern const pb_msgdesc_t PB_System_DeviceInfoResponse_msg; -extern const pb_msgdesc_t PB_System_FactoryResetRequest_msg; -extern const pb_msgdesc_t PB_System_GetDateTimeRequest_msg; -extern const pb_msgdesc_t PB_System_GetDateTimeResponse_msg; -extern const pb_msgdesc_t PB_System_SetDateTimeRequest_msg; -extern const pb_msgdesc_t PB_System_DateTime_msg; -extern const pb_msgdesc_t PB_System_PlayAudiovisualAlertRequest_msg; -extern const pb_msgdesc_t PB_System_ProtobufVersionRequest_msg; -extern const pb_msgdesc_t PB_System_ProtobufVersionResponse_msg; -extern const pb_msgdesc_t PB_System_UpdateRequest_msg; -extern const pb_msgdesc_t PB_System_UpdateResponse_msg; -extern const pb_msgdesc_t PB_System_PowerInfoRequest_msg; -extern const pb_msgdesc_t PB_System_PowerInfoResponse_msg; - -/* Defines for backwards compatibility with code written before nanopb-0.4.0 */ -#define PB_System_PingRequest_fields &PB_System_PingRequest_msg -#define PB_System_PingResponse_fields &PB_System_PingResponse_msg -#define PB_System_RebootRequest_fields &PB_System_RebootRequest_msg -#define PB_System_DeviceInfoRequest_fields &PB_System_DeviceInfoRequest_msg -#define PB_System_DeviceInfoResponse_fields &PB_System_DeviceInfoResponse_msg -#define PB_System_FactoryResetRequest_fields &PB_System_FactoryResetRequest_msg -#define PB_System_GetDateTimeRequest_fields &PB_System_GetDateTimeRequest_msg -#define PB_System_GetDateTimeResponse_fields &PB_System_GetDateTimeResponse_msg -#define PB_System_SetDateTimeRequest_fields &PB_System_SetDateTimeRequest_msg -#define PB_System_DateTime_fields &PB_System_DateTime_msg -#define PB_System_PlayAudiovisualAlertRequest_fields &PB_System_PlayAudiovisualAlertRequest_msg -#define PB_System_ProtobufVersionRequest_fields &PB_System_ProtobufVersionRequest_msg -#define PB_System_ProtobufVersionResponse_fields &PB_System_ProtobufVersionResponse_msg -#define PB_System_UpdateRequest_fields &PB_System_UpdateRequest_msg -#define PB_System_UpdateResponse_fields &PB_System_UpdateResponse_msg -#define PB_System_PowerInfoRequest_fields &PB_System_PowerInfoRequest_msg -#define PB_System_PowerInfoResponse_fields &PB_System_PowerInfoResponse_msg - -/* Maximum encoded size of messages (where known) */ -/* PB_System_PingRequest_size depends on runtime parameters */ -/* PB_System_PingResponse_size depends on runtime parameters */ -/* PB_System_DeviceInfoResponse_size depends on runtime parameters */ -/* PB_System_UpdateRequest_size depends on runtime parameters */ -/* PB_System_PowerInfoResponse_size depends on runtime parameters */ -#define PB_System_DateTime_size 22 -#define PB_System_DeviceInfoRequest_size 0 -#define PB_System_FactoryResetRequest_size 0 -#define PB_System_GetDateTimeRequest_size 0 -#define PB_System_GetDateTimeResponse_size 24 -#define PB_System_PlayAudiovisualAlertRequest_size 0 -#define PB_System_PowerInfoRequest_size 0 -#define PB_System_ProtobufVersionRequest_size 0 -#define PB_System_ProtobufVersionResponse_size 12 -#define PB_System_RebootRequest_size 2 -#define PB_System_SetDateTimeRequest_size 24 -#define PB_System_UpdateResponse_size 2 - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif diff --git a/assets/copro.mk b/assets/copro.mk deleted file mode 100644 index eb9b83b7e..000000000 --- a/assets/copro.mk +++ /dev/null @@ -1,14 +0,0 @@ -COPRO_CUBE_VERSION := 1.13.3 -COPRO_MCU_FAMILY := STM32WB5x -COPRO_STACK_BIN ?= stm32wb5x_BLE_Stack_light_fw.bin -# See __STACK_TYPE_CODES in scripts/flipper/assets/coprobin.py -COPRO_STACK_TYPE ?= ble_light -COPRO_DISCLAIMER ?= -COPRO_OB_DATA ?= ob.data -# Keep 0 for auto, or put a value from release_notes for chosen stack -COPRO_STACK_ADDR := 0 - -COPRO_BUNDLE_DIR := $(ASSETS_DIR)/core2_firmware -COPRO_CUBE_DIR := $(PROJECT_ROOT)/lib/STM32CubeWB -COPRO_FIRMWARE_DIR := $(COPRO_CUBE_DIR)/Projects/STM32WB_Copro_Wireless_Binaries/$(COPRO_MCU_FAMILY) -COPRO_STACK_BIN_PATH := $(COPRO_FIRMWARE_DIR)/$(COPRO_STACK_BIN) diff --git a/assets/icons/About/Certification1_103x23.png b/assets/icons/About/Certification1_103x23.png deleted file mode 100644 index 4713dc355ae3ee55e4d68a21d8817f3dc259ef3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2105 zcmcIlTWl0n7@mR(v@S*^+CYfIV2B20=en~y6SlD3-O^RIEM<{G0&y;9cPG1ZVP@Lh zqWDmt#b^_`G(o@%XiSWS_yB^aA<;$+h?J;2h&56{LMjkZ0*R!0W^bT@+7~yOopa9o z=lj0%|KB<1#YD>@Pwn(t1VKEp=141ir{VMH%Pzj_}J&0ZT=qQG&N)TJ&i<5CP z3^Ho-ItwgY*OHXiWo2H$7Bryq3jzetfFq&>EvMT;A&3=m1=x0n2@EZUIN2Z;atYD4 zcmfR@7C<>KiOVEOqki5?aV*P`^H7?kNrLnd6pd4yK(YemN6SA9vRO(>XpJLQAg(e4B> zsI;^M&8))eb~#NjVMIYR3Cc^lOR5CM<70toM$ zN>mt8n)1@<6Dw3*G4l44uA=e;5D^^^#9-AZoaAwuNs^4<^9d|Fmm&p{EQQ9Q4;0Z6 z#}{lUYN~TQq4Bs7(``r8We|%5F(}Hbs)_&r0|J~sfXe}y#c7VEabAX9UJ@mS^E1HD z`HQ;X{D>j9yP0t3mu#yTGQ_B6Q&3o+%ux)$Ng%R#N@7#E2&4c`rdU>_Imt%>se-n| zQsK@KbGM_qsuYMA5J{P4QvsY-QY=m}EQ#|zKZ^&X04MXn@AvZ*hTh^08#%*@8w$)W zbNhHK98Oq9O3lF!cI%=>G!_kW6wh%u?S%k}ETjxe6QR*mO-uvA)YGo*p$xd(X4Qr@ z?ksPlWngW&l~d88I|Wg8H$@PWT{i#)D-Wx8Nb~p>RD#WC00bSwC8aRiNI7}Y0--c4 z$$z?#xSM!e>=;}6_#E;-N-w8X&WL&%z!R3h+{F;?SyUS}6?NWrhE^uS zgV}9XZv@z>-YGzb%e3H)apM#7CW6#Ru}CP{w&~K!(9{8R@_}6qZ;t-8<$3XeIUASn zncaRWeBs-~!q>3I;Qo=Pj-q?7zGAlo>uYb;Zv2B(M!12Y>7yrC{@mO6=i}daJnLgU zd!AVn1Dg*@KdnjUAKKEr+Q~2W=U(bMclm&)DQ(tWf9HiA9u{^XY}XRg}! z!-;GCk?zEtNnm)m?F{}~wxO38I9b;+@%pg~t*3vvq5qisuC+e9Yd7-c!lA*r7hm4= z#txqPz{6_Wv3Jj%>c2FlcVNPM$9z+_zpqJ1|Mxv#4He`Q8^FxvMvwQ^ x9v_{?cb(reYxt3mmA2C}Hm>bSFFB!&oUPlPtUF9}_Q~$$9*ed__BTG;^*1Y=%1!_P diff --git a/assets/icons/About/Certification1_103x56.png b/assets/icons/About/Certification1_103x56.png new file mode 100644 index 0000000000000000000000000000000000000000..6e11bbbb222cc54a3e6883f81522af25fd847e52 GIT binary patch literal 3038 zcmb7GX;@QN8V;he)ul=cf&(#HL1^|pBvP^~ic)21m5K^h9>uM#%iJVvjyO-}N0xKmZ+XA>e&;)Pb6~)- z8MaQg7z}2H*iRUY{>Gypmh}|$8~!sT2ZNd30!ihFT;k7Bz-j`ZgyTShL9In`42J7% z&;p7i5W&WQ@sNgx8)`g-!$L|PE{rZANwfkm0rJb#fgzazQblHxf~~}PFSX?wIA{Ph zhyYlFI$5LV7%l=~M!&izkxVY&MZZAyO!K)B>;1&>(;TuhB0whA_tvf_jAx(jpM7 z!5U)%ad0Za!{JaII}#i;K;zLh`jPTcA&5qVNG6bo6V0^=FaqlnVC@*AcYMa+_Z$&O z^?^J__2 zw9!ncyI7+~0F441b%(~?eg1;`N*#nw4Ip_k77ReCWYZW-JWW9Z@k}a>hK~c73Ot|y z04ktTGC(TBbd<4Nl(?}JPzR-fN?#qU9y!3qUF9SN(&k(xcBi!?b0dJ0W0-d1YQELngk)kz>pV zD2&aFa^kOg;UqR@^cyCf*Fz$J&c|Uuu3vxW~ zz037lo4rGRElu<7w-Md$kxq5Bs+Ouzwwb#lKqWf`!Wo zcZ-ktRNbS~FYLai-`)EA?qP1}@ce4utIK_>9&PexRBf~TAM ze;~o#{=mKyJ+b7z9bFZ&-@8wRo^tH`q`JdqoBQEH2N#E#gnP0A=7z}aQY7f5{8(6l zoo&pn%!;O!i``bd0*-!a^XHjciyr#Fx$_e-G&sUn9-Zr1KydedL5{gPyER~?_@O<# z%*`L;8nD>$?6x9{jo|Y;&4RLu@^5~ATk0(i(0#H~7TPAqiL<#U_I-LFGb)b%^jHqf zQ}y=kbJ@y|GM8U>UK2PR>quM`+m+S25BOoox%r-jwC8MieMwo@y1ilTTfob8cDZyG zo0wFCXRX?F!;5}cbm|`-DM>hs)@5xhyURtfWyEI>|mxxkth$^N4M&8DZ; zH)na;4_Z1c%8dlSl*|(zw8}_usp|B6ExOXcjq2QyIeY4Tx7ktapvu*_%FwpAIT5Yd z?QS+@?my}|Q)`~gb=WBPoZCHglOA`siE!NO;9$KdOaEfKn;ai_ySJmDJ$8|Q;xu(P zR5{qfCid*TzN@hz*H&o_t_i|v{+84@?M+_5ZM*j288=VA?yuQiM?UGyjI626sgqDJ zM*};bEobdNQ$}ZeT%TIo?g1Wfin)Aiw_~0hD{J8M!|Nqevt*6Xap&`$++*MGkNBwJ zhw3Qwwm|o#u3?+2I^L@lK%xA+BFE=$v-H{!yX+ zQD}p#v#xgaz37EuJA&r=NPF`4lw6VzB&q+f>N(H*Sh^*lZ`Enb24;Cl#*^MJPUL=F zT7KNkPhz? zwDvxyt9OrWi{BtpY#ww9d2p)OZhiae2R)6662q2&8=ImA|L(M&*pWzjW!3FL70)|V z`k2M$KHiSEt_@Y&clzFF+-$jv8=k?mRX5!#%3PP7m)IGy_N+tVcT!GYWBQAyLH7H7 z3eH~;Cm*oAPz}wEDOgCZGCXdJcJWPYjPWDwzx5q(vj58TgV$z;$T8bmY-%S76Kh uKZdmO;a~c@3d^&P^feXSAlN!%%<6CD5WVhLIBeW0kOj#FYVG~H|%bkw2YN{ zz-W#0KDk}Pinc3{y_kQ2^yT12! z-yS=9M0|%H9SjCTyd&H0g7*NtdbNKF{#Px3ZVbG|`m-l!21CbZLsu)q;w9Y;hM1F5 zu3L9IN3nw9GjXEA15?oFht>u|T6)mW357sMc#tp2Hsj5mdyI%A+Kl7PPTc9w1O-xd zsS0vRN9PKqg@RQyrVl~Vf-EHP0i8pFKCi5?L7Oqm%ffMJ8Z#nc6TQ%8%m_I|+|IE` zrlJCbG2y6y<0N9Snh1ub89W6caT3RHGe(do!LT^Z5*DQCXN2BV(Zjmz!<&4;C!4WA z*ZnMp1p)z6fHEm+K1NurRtzUGl0=~es+Gt(7er;PPcwrZXo4#FbxDzt5F^JcMY_!h zBaNis^E;hUVp(e{6f7AQ!6{ML;=$<0#G} zGJs;5c^<__bR;SQzN0_#y!9|r{``M7+5`Q>~g(o(rh#jB{$F^mpYsAb-fnK@QfJdzhK zXs!{%5Jy%fLs%IGB~3(V&qP{m2dY#I#Nn#qL&BnGrN@=`iJBe3!`A*cv0%}lvLy|+ zsHEv=$N^KEMqUZV2=^At388Hc6XRg)#-_=~1#V$PGhqe-N_#{L%8N9QT6w52K9wV= z)KrnQ0HGNlC;*T$+TuU=E#g~KJbHjrK}J5@5s#4&VIm)uPy{3taB@C?$1Y|Jr5QS( z{(Uk}Ch~~G|1lXXlue{bSVUAU{R^)>ax%l*!&C6M4-KR58Tb%=Qvn&)NrmsBh5J4^ zVlX`AcGxp=3(CKn__DkYiR)XFh+KF$H?jAxL${{%syj1uhl@%&C0}Y6cYyKExwpHn zVhBHLV6~&;!TMXB%*TlXOZ{k-t8~ID#GYT4p%=C~{)U=?_j^~6wf7PkZ#~R<=+o`^0P}ikr=I`3rb3S|M z1YdEvWP0_WO*2n$!O#ns;yMnUktQ=h zSDtAzBX0`oI#GUwv*$?(zcx0EIKA`Z)~)$jLQKL36-Apoab>ZG7*@JZruU!H^ e$L>l=FHe%zE}qh^O3ey=C^@o5+t&}9{Q7Uwhg>cI diff --git a/assets/icons/About/Certification2_98x33.png b/assets/icons/About/Certification2_98x33.png new file mode 100644 index 0000000000000000000000000000000000000000..49c5581c7523f2956fda218cfa9c048cf1998ef5 GIT binary patch literal 2495 zcma)7eN+=y77u<<3c9DF1uNPeM(e@FB$G)pm^lQ^7bZ%SFD0_A?JzSTQ=2gmAE?2J5Xf$#Jm7}N>SV;K-w?O!$Zhp2HA`rt! z^CZW31cr4(VoV~3%@edR3~*>DxWL$h(cSz|`k)YU5s@oohAdtmS;=X1IVKB& zqBJTjL8>BEv@}7fQb}`&1X4@KnY}J8eb=iatwkMFfl-d12T>@5bno-1ON*3OAxXc45=JzXPf}z(--R@i^+f~G#HRartn{9 zC=nD?EHTY7`81Wxv96&@EbdZc6dq01V>(oA9H|_tQ5Z~mjmfCeAc)cEPZtaU(VrQk z@Qh6jz1=tLu zJZl%c1V`&~K{tW+w%ZwSX$k@z4k=^`M5cb+!|R|yv?n)pfGm_K7suc*wM2O!{ZZrt z2BYRC$RV%?<}n!T@{!3779-yV+6_Jk9GLu$M_VRIBq4#Ys@tw&4`C)Q2QeoB`% z;R2c+T{rKuis}uK1x3ovo!8E3&XtEOMfUFLuh*G#YqJ|~=g)sLYSxvk8MnTAcT-_a zRrQuXHEce3zkkuD=YD?Cez?2yQQb{PO4jauX+C{g-JxHO)v(&?9iPYl;K zQ+uu=1A`}ytX)t2)%N4fq6g7U|GpJ+`*$6DQQzy%>HnF!|MjBk6wMp`VP}#|=eMdm zW3QfQ`>Fnr>3$m*gYUXj6D2d({q%uv=0DHxeqn;^#P`QCdsZlt|Kz*M(FaSqs1W=`??1& zmu);-rqAdrXl!qP@Amc04|ly*cW>N{o)ezkOw!CMw0~c7JgrCTE_TGn_kGyfyFIkh zN#D5^8MP#9>7H`slqp|$)3@RG|5#JS__|645+%zr&Nt17(2jq9#}(&|`Q+8^`n?~0 z>@Me84b^>LJiulR#vGSU&zMFYh&<@t&o@UsZ*7VWU0r$M>~p*=35~jvbf>iXyS?9? zI`B}p9$wS&A^Ob53ER%Rx_JE!y0K+qVT9V(d#|-6tWBNFpAzLv$@yYa_ZoN#+Nq#Kx~p6 zI1|4u?Z2nG3f~<#*7fmndV}-0?)(p`($JL8^l(qG4Ox QDWC=hPgg&ebxsLQ0KZ@&0{{R3 delta 117 zcmbQmIE!(D1Sba*0|Nt7K*Xzw0TPMqC7!;n?9W(vdBwyRURZV!C}rvC;us=vIr-21 zvkmM9ip3J%h2G9jE`%5)zH&}8PBazPJH$~g6~l3JqYqC7Blj|aO@=Hb#*g^L7~BqW Vzv1mptp*yx;OXk;vd$@?2>@J;C1U^p diff --git a/assets/icons/Common/Loading_24/frame_01.png b/assets/icons/Common/Loading_24/frame_01.png index 438f971f174e7b2e3327d009ec6099fe6a426fb7..d1f35692590a934aa850a77b71c7923fc1b1b360 100644 GIT binary patch delta 157 zcmaFKc!+U=gasor0|UdYo$Gf4DaPU;cPEB*=VV?2IV|apzK#qG8~eHcB(eheYymzY zuK)l42QotsU9Ov`C=uoA>Eak7aXFcR@!NlSi3kZ6i5dUx6B1Gi5)yb=lXMlt3KJ4u zWF#aMuxMRkN)prvV@mQ@$jfM0;eJTL*deX)OiDrm14Ca2ZOd;zB)j)8m322!%tQf3 zH#TkoL=Z+Pz&6`Uj$qJ%2Vs*_01Fx8{XN(r8ZcHpGwJl8_2fM<3xNRpzwH@8QUEd2 zOa!^7$=3oT+Q~;3&dj8uci~3+v-lxkrTR!8a{5v~DbMiz00000NkvXXu0mjfk;YV( diff --git a/assets/icons/Common/Loading_24/frame_02.png b/assets/icons/Common/Loading_24/frame_02.png index 3455cd4043ff7ac84d67b36e625f47e95a500710..b1617692131bd61a713453f0a025810acb8e446b 100644 GIT binary patch delta 157 zcmey$c!+U=gasor0|UdYo$Gf4DaPU;cPEB*=VV?2IV|apzK#qG8~eHcB(eheYymzY zuK)l42QotsU9Ov`C=uoA>Eak7aXFcR@!NlSi3kZ6i5dUx6B1Gi8WMCB#0nD1YyN#fQ4-9!H!66)8RUE(kZ|!K7?6F2(b0G?-4y@ z2|&%Xf)OO$Eak7aXFcR@!NlSi3kZ6i5dUx6B1Gi91;ZC+1mQp*x1|` zD5)xlH74n@bw~v8t?^^%*xF!mg)xWigwBMSJUl!Mr3SoRnZ1h@fW|U-y85}Sb4q9e E0GClOoB#j- delta 203 zcmV;+05t!=0q+5j7zqdl0002scRl!#P#AxqNklF$m~Q>jIf_JFv=i;_bUwcdGsc7`bHf zaRF=CD3>Uwumc2Pi&FpuVT;p%6~Y!z0aVd|;d)*_1I)i%Q={*;6Yb654*`n%ogNxtPCID?lqLWG002ovPDHLk FV1oH}SFHd5 diff --git a/assets/icons/Common/Loading_24/frame_04.png b/assets/icons/Common/Loading_24/frame_04.png index 12d127e0cc5fb78c4735b8d647cdefddc84bc50d..7f55b0df457223e99a1eefbb4fbc5d1ad75dd431 100644 GIT binary patch delta 153 zcmaFGxQ}sygasor0|UdYo$Gf4DaPU;cPEB*=VV?2IV|apzK#qG8~eHcB(eheYymzY zuK)l42QotsU9Ov`C=ur9>Eak7aXFcR@!NlSi3kZ6i5dUx6B1Gi91imE^78QXIkHl3ah9v0ZlAPbnZf{>+0tKq}f@Y z(gYC%c?8fESrGJv!9CCr)Vu`f3I^z^E0YcZwD~edAt~T(u8k2$2=L4+kkS=-kajYH zCC~h`IoL@+-cCNca4M6U{pW79oyDI5I@No60EE9*J3{~X-T(jq07*qoM6N<$g0Lb~ Av>Eak7aap%#Bj*7H5mtZ2nvIhZ$_jd}tdu#aD5DU2?bqTb zoMOjKk00c| R(pR7j44$rjF6*2UngH6`K5PI0 delta 210 zcmV;@04@K^0rmlq7zqdl0002scRl!#P#AxxNklgg-dRQRf}Bv~~g{r3ZS4YcM&fM&2u$?vGkP7<9Lul!pGAniV> zk%+ICqXa8+dX|!4bruF#&D{VxK#RE>z#*1rn>yq)fM-F56VSTT3xYL+uIKrC$p8QV M07*qoM6N<$g1B8-pa1{> diff --git a/assets/icons/Common/Loading_24/frame_06.png b/assets/icons/Common/Loading_24/frame_06.png index a876adc541e72d22b13829e4888c44645ea092e7..3354ecda423dfc60a6836f8541f78b8f0bdde6bf 100644 GIT binary patch delta 147 zcmaFGxPx(mgasor0|UdYo$Gf4DaPU;cPEB*=VV?2IV|apzK#qG8~eHcB(eheYymzY zuK)l42QotsU9Ov`C=p=o>Eak7aXI+_n~=l}2_}gh5|1S73|UNy3|TA~H*yJhyBM+< wtWDyWz;a2;;g%+s4u2SX2>+#aCJ6}!?gZ{W-rKQZK;sxZUHx3vIVCg!0KWAq_y7O^ delta 198 zcmV;%06G7-0qOye7zqdl0002scRl!#P#AxlNklHNbP4FglEgAC zXswJ&aKwD-WXtbG?PM+HPWCj9CVVvII+K4FoVVsvGrbTfGXMYp07*qoM6N<$f@V%t A3;+NC diff --git a/assets/icons/Common/Loading_24/frame_07.png b/assets/icons/Common/Loading_24/frame_07.png index 04049ebd2b4b66a1dc3f8190b215bb3bc4dd9e4a..70bb37f699a73101bf7a6eabb14418a9eeafec35 100644 GIT binary patch delta 166 zcmey#c$#s7gasor0|UdYo$Gf4DaPU;cPEB*=VV?2IV|apzK#qG8~eHcB(eheYymzY zuK)l42QotsU9Ov`D3R>v>Eak7aas1vM&1Sk9+!*$OHPPQZB1zJnK(;JIhBKLL9%ZD zA;*tjR$FT{c+L#4{=sXw0r>%t7zqdl0002scRl!#P#Ax!NklkjlCH5cma>+=HY6`tKu<6u@e%2Z6q5j1>e1 zj7pk8wl>+?gJtSLq>ybdkmi3>W?98da-KC;M1%fy~fDm+K}fiZik5PPFo8;^msymB-A>r7-b_6DyEXP}pq6c!0?i%mngmDsl^a zeXTq)i%as0D(zsxK#8K1G^^m$LL?!D$s#Pf>lO5oglzQDmD%WHGZCWBCAB!YD6^m> zGd~Y(21GQ-#SO><>azms%uOvx1o7-E3KEmEQ%e+5^HOY;ij?f_e6KQ*jJQ;u3cWdg^O zza5XX16CNTh!&(StIpZ<`Ay!pY_=Qu5nE1$wzW6jY))`{F@sfS=2N|MQ=H$vh-l92 ze)@mjwa;2}=kkeF?cLZsdEPO;xJAbf)VKAV&FOnGKkKnXoN&$FGjC_x%KzA>P?o-9 zy?Rpo2YK})xhLi=KO%bK`76FRPfZJX>s~wXTr{uR!lAg{XVa}onjR-rPKS9`O?ti7 z{^ZrpnP+#c&-$;n+d4G9WwrYao6G!Jo1))GsjoelF~{aY65H(VtHBo6^21&U@_2t` j)N{Qrwg0&9f|? zmrwuLFz*m^mCSed`ZQ%nyL$||sWR!;**>)hEVy~^e0B8nw;!F_j`kSe3>USMvG^Y0 z*;aaZ>huR%rGi_}u$=Kb(9tikIXdHQSl-2H-#_!oZRKxvO!%OB{@|rkp)RxYZMb$z zhEFktarA?oq2R^ILHA5tF{s z)>Zaz|E+Rl(SDMp_||(cXQ{KW@or)#=C`d0u~N2H)4DIj`^cS?v8W#qX{1v&a5Ep=O4Qzw~!M zb5+rm7T*1t?`CpVFN-zP^v>iJyCmLo=AD-jGZBlmT;aO>ckpGmD_q_4=R5a^9JuUq zI`6vjuItXz6(5Pd-V>3sH|GDu(p!sC_I7OVDZ4+_X^ZYI@d+h8cg3@|dbzq-SvoKC zE|uK0HaY#HoWI+ZA4ywXay%z$yjc`?ueMq*{`H#;m*>69jf?p?+beE|IRDe`y|D#H zntxR3mGE{|>&93={h1Yg>twfTzLxh?=1n)BEt&8n`@mbKr1n)G_DDQlJTEz=QvV;L Y{&7Qo$7 application_list:tuple(str)). To specify application set to use in a build, set `FIRMWARE_APP_SET` to its name. +For example, to build firmware image with unit tests, run `./fbt FIRMWARE_APP_SET=unit_tests`. + +Check out `fbt_options.py` for details. diff --git a/fbt b/fbt new file mode 100755 index 000000000..81193a468 --- /dev/null +++ b/fbt @@ -0,0 +1,12 @@ +#!/bin/bash + +set -e + +if [[ -d .git ]]; then + echo "Updating git submodules" + git submodule update --init +fi + +SCRIPTDIR="$( dirname -- "$0"; )"; +SCONS_DEFAULT_FLAGS="-Q --warn=target-not-built" +python3 ${SCRIPTDIR}/lib/scons/scripts/scons.py ${SCONS_DEFAULT_FLAGS} "$@" diff --git a/fbt.cmd b/fbt.cmd new file mode 100644 index 000000000..7711e44b5 --- /dev/null +++ b/fbt.cmd @@ -0,0 +1,8 @@ +@echo off +if exist ".git" ( + echo Prepairing git submodules + git submodule update --init +) + +set "SCONS_DEFAULT_FLAGS=-Q --warn=target-not-built" +python lib/scons/scripts/scons.py %SCONS_DEFAULT_FLAGS% %* diff --git a/fbt_options.py b/fbt_options.py new file mode 100644 index 000000000..ddeff0481 --- /dev/null +++ b/fbt_options.py @@ -0,0 +1,72 @@ +import posixpath + + +# Default hardware target +TARGET_HW = 7 + +# Optimization flags +## Optimize for size +COMPACT = 0 +## Optimize for debugging experience +DEBUG = 1 + +# Suffix to add to files when building distribution. +# If OS environment has DIST_SUFFIX set, it will be used instead.. +DIST_SUFFIX = "local" + +# Coprocessor firmware +COPRO_OB_DATA = "scripts/ob.data" + +# Must match lib/STM32CubeWB version +COPRO_CUBE_VERSION = "1.13.3" + +COPRO_CUBE_DIR = "lib/STM32CubeWB" + +# Default radio stack +COPRO_STACK_BIN = "stm32wb5x_BLE_Stack_light_fw.bin" +# Firmware also supports "ble_full", but it might not fit into debug builds +COPRO_STACK_TYPE = "ble_light" + +# Leave 0 to lets scripts automatically calculate it +COPRO_STACK_ADDR = "0x0" + +# If you override COPRO_CUBE_DIR on commandline, override this aswell +COPRO_STACK_BIN_DIR = posixpath.join( + COPRO_CUBE_DIR, + "Projects", + "STM32WB_Copro_Wireless_Binaries", + "STM32WB5x", +) + +# Supported toolchain versions +FBT_TOOLCHAIN_VERSIONS = (" 10.3.",) + +OPENOCD_OPTS = '-f interface/stlink.cfg -c "transport select hla_swd" -f debug/stm32wbx.cfg -c "stm32wbx.cpu configure -rtos auto" -c "init"' + +SVD_FILE = "debug/STM32WB55_CM4.svd" + +FIRMWARE_APPS = { + "default": ( + "crypto_start", + # Svc + "basic_services", + # Apps + "basic_apps", + "updater_app", + "archive", + # Settings + "passport", + "system_settings", + "about", + # Plugins + "basic_plugins", + # Debug + "debug_apps", + ), + "unit_tests": ( + "basic_services", + "unit_tests", + ), +} + +FIRMWARE_APP_SET = "default" diff --git a/firmware.scons b/firmware.scons new file mode 100644 index 000000000..3652c298e --- /dev/null +++ b/firmware.scons @@ -0,0 +1,227 @@ +Import("ENV", "fw_build_meta") + +import os + + +# Building initial C environment for libs +env = ENV.Clone( + tools=["compilation_db", "fwbin", "openocd", "fbt_apps"], + COMPILATIONDB_USE_ABSPATH=True, + BUILD_DIR=fw_build_meta["build_dir"], + IS_BASE_FIRMWARE=fw_build_meta["type"] == "firmware", + FW_FLAVOR=fw_build_meta["flavor"], + PLUGIN_ELF_DIR="${BUILD_DIR}", + LIB_DIST_DIR="${BUILD_DIR}/lib", + LINT_SOURCES=[ + "applications", + ], + LIBPATH=[ + "${LIB_DIST_DIR}", + ], + CPPPATH=[ + "#/core", + "#/applications", + "#/firmware/targets/f${TARGET_HW}/ble_glue", + "#/firmware/targets/f${TARGET_HW}/fatfs", + "#/firmware/targets/f${TARGET_HW}/furi_hal", + "#/firmware/targets/f${TARGET_HW}/Inc", + "#/firmware/targets/furi_hal_include", + ], + # Specific flags for building libraries - always do optimized builds + FW_LIB_OPTS={ + "Default": { + "CCFLAGS": [ + "-Os", + ], + "CPPDEFINES": [ + "NDEBUG", + "FURI_NDEBUG", + ], + # You can add other entries named after libraries + # If they are present, they have precedence over Default + } + }, +) + + +def ApplyLibFlags(env): + flags_to_apply = env["FW_LIB_OPTS"].get( + env.get("FW_LIB_NAME"), + env["FW_LIB_OPTS"]["Default"], + ) + # print("Flags for ", env.get("FW_LIB_NAME", "Default"), flags_to_apply) + env.MergeFlags(flags_to_apply) + + +env.AddMethod(ApplyLibFlags) + +Export("env") + +if not env["VERBOSE"]: + env.SetDefault( + HEXCOMSTR="\tHEX\t${TARGET}", + BINCOMSTR="\tBIN\t${TARGET}", + DFUCOMSTR="\tDFU\t${TARGET}", + OOCDCOMSTR="\tFLASH\t${SOURCE}", + ) + + +if fw_build_meta["type"] == "updater": + env.Append( + FIRMWARE_BUILD_CFG="updater", + RAM_EXEC=True, + CPPDEFINES=[ + "FURI_RAM_EXEC", + ], + ) +else: + env.Append( + FIRMWARE_BUILD_CFG="firmware", + RAM_EXEC=False, + ) +# print(env.Dump()) + + +# Invoke child SCopscripts to populate global `env` + build their own part of the code +lib_targets = env.BuildModules( + [ + "lib", + "assets", + "firmware", + "core", + ], +) + + +# Now, env is fully set up with everything to build apps +fwenv = env.Clone() + +# Set up additional app-specific build flags +SConscript("site_scons/firmwareopts.scons", exports={"ENV": fwenv}) + +# Set up app configuration +if env["IS_BASE_FIRMWARE"]: + fwenv.Append(APPS=fwenv["FIRMWARE_APPS"].get(fwenv.subst("$FIRMWARE_APP_SET"))) +else: + fwenv.Append(APPS=["updater"]) + +if extra_int_apps := GetOption("extra_int_apps"): + for extra_int_app in extra_int_apps.split(","): + fwenv.Append(APPS=[extra_int_app]) + +fwenv.LoadApplicationManifests() +fwenv.PrepareApplicationsBuild() + +# Build external apps +extapps = SConscript("applications/extapps.scons", exports={"ENV": fwenv}) + + +# Add preprocessor definitions for current set of apps +fwenv.AppendUnique( + CPPDEFINES=fwenv["APPBUILD"].get_apps_cdefs(), +) + + +# Build applications.c for selected services & apps + +# Depends on virtual value-only node, so it only gets rebuilt when set of apps changes +apps_c = fwenv.ApplicationsC( + "applications/applications.c", + Value(fwenv["APPS"]), +) + +sources = [apps_c] +# Gather sources only from app folders from current configuration +for app_folder in fwenv["APPBUILD"].get_builtin_app_folders(): + sources += fwenv.GlobRecursive("*.c*", os.path.join("applications", app_folder)) + + +fwenv.AppendUnique( + LINKFLAGS=[ + "-specs=nano.specs", + "-specs=nosys.specs", + "-Wl,--start-group", + "-lstdc++", + "-lsupc++", + "-Wl,--end-group", + "-Wl,--gc-sections", + "-Wl,--undefined=uxTopUsedPriority", + "-Wl,--wrap,_malloc_r", + "-Wl,--wrap,_free_r", + "-Wl,--wrap,_calloc_r", + "-Wl,--wrap,_realloc_r", + "-u", + "_printf_float", + "-n", + ], +) + +# Debug +# print(fwenv.Dump()) + +# Full firmware definition + +fwelf = fwenv["FW_ELF"] = fwenv.Program( + "${FIRMWARE_BUILD_CFG}", + sources, + LIBS=[ + "flipper${TARGET_HW}", + "core", + "freertos", + "stm32cubewb", + "hwdrivers", + "fatfs", + "littlefs", + "subghz", + "flipperformat", + "toolbox", + "microtar", + "usb_stm32", + "st25rfal002", + "infrared", + "appframe", + "assets", + "misc", + # 2nd round + "flipperformat", + "toolbox", + ], +) + +# Make it depend on everything child builders returned +Depends(fwelf, lib_targets) +AddPostAction(fwelf, fwenv["APPBUILD_DUMP"]) + + +fwhex = fwenv["FW_HEX"] = fwenv.HEXBuilder("${FIRMWARE_BUILD_CFG}") +fwbin = fwenv["FW_BIN"] = fwenv.BINBuilder("${FIRMWARE_BUILD_CFG}") +fwdfu = fwenv["FW_DFU"] = fwenv.DFUBuilder("${FIRMWARE_BUILD_CFG}") +# Default(dfu) +Alias(fwenv["FIRMWARE_BUILD_CFG"] + "_dfu", fwdfu) + +fwdump = fwenv.ObjDump("${FIRMWARE_BUILD_CFG}") +Alias(fwenv["FIRMWARE_BUILD_CFG"] + "_list", fwdump) + +# Additional FW-related pseudotargets +flash = fwenv["FW_FLASH"] = fwenv.OOCDFlashCommand( + "${FIRMWARE_BUILD_CFG}", + OPENOCD_COMMAND='-c "program ${SOURCE.posix} reset exit ${IMAGE_BASE_ADDRESS}"', +) +if fwenv["FORCE"]: + AlwaysBuild(flash) +Alias(fwenv["FIRMWARE_BUILD_CFG"] + "_flash", flash) +if fwenv["IS_BASE_FIRMWARE"]: + Alias("flash", flash) + + +# Compile DB generation +fwcdb = fwenv["FW_CDB"] = fwenv.CompilationDatabase("compile_commands.json") +Alias(fwenv["FIRMWARE_BUILD_CFG"] + "_cdb", fwcdb) + + +artifacts = [fwhex, fwbin, fwdfu, env["FW_VERSION_JSON"]] +fwenv["FW_ARTIFACTS"] = artifacts + +Alias(fwenv["FIRMWARE_BUILD_CFG"] + "_all", artifacts) + +Return("fwenv") diff --git a/firmware/Makefile b/firmware/Makefile deleted file mode 100644 index efa185ca6..000000000 --- a/firmware/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -MAKEFILE_DIR := $(dir $(abspath $(firstword $(MAKEFILE_LIST)))) -PROJECT_ROOT := $(abspath $(MAKEFILE_DIR)/..) - -include $(PROJECT_ROOT)/make/base.mk -include $(PROJECT_ROOT)/make/freertos-heap.mk -include $(PROJECT_ROOT)/assets/assets.mk -include $(PROJECT_ROOT)/core/core.mk -include $(PROJECT_ROOT)/applications/applications.mk -include $(PROJECT_ROOT)/lib/lib.mk - -CFLAGS += -I$(PROJECT_ROOT) -Itargets/furi_hal_include -CFLAGS += -Werror -Wno-address-of-packed-member -CPPFLAGS += -Werror - -include $(PROJECT_ROOT)/make/defaults.mk -TARGET_DIR = targets/$(TARGET) -include $(TARGET_DIR)/target.mk - -ifeq ($(RAM_EXEC), 0) -PROJECT := firmware -else -PROJECT := updater -endif - -include $(PROJECT_ROOT)/make/git.mk -include $(PROJECT_ROOT)/make/toolchain.mk -include $(PROJECT_ROOT)/make/rules.mk diff --git a/firmware/ReadMe.md b/firmware/ReadMe.md index 38271fd27..d2baedfd1 100644 --- a/firmware/ReadMe.md +++ b/firmware/ReadMe.md @@ -19,37 +19,4 @@ Target independent code and headers in `target/include` folders. More details in # Building -## With dev docker image: - -`docker-compose exec dev make -C firmware` - -## With toolchain installed in path: - -`make -C firmware` - -## Build Options - -- `DEBUG` - 0/1 - enable or disable debug build. Default is 1. -- `COMPACT` - 0/1 - enable or disable compiler optimizations. Significantly reduces binary size. Default is 0. -- `TARGET` - string - target to build. Default is `f7`. -- `RAM_EXEC` - 0/1 - whether to build full firmware or RAM-based stage for firmware update. 0 is default, builds firmware. - -# Building self-update package - -`make DEBUG=0 COMPACT=1 updater_package` - -# Flashing - -Using SWD (STLink): - -`make -C firmware flash` - -Or use DFU (USB): - -`make -C firmware upload` - -# Debug - -Using SWD (STLink): - -`make -C firmware debug` +Check out `documentation/fbt.md` on how to build and flash firmware. \ No newline at end of file diff --git a/firmware/SConscript b/firmware/SConscript new file mode 100644 index 000000000..8dade34e1 --- /dev/null +++ b/firmware/SConscript @@ -0,0 +1,14 @@ +Import("env") + +env.Append(LINT_SOURCES=["firmware"]) + +libenv = env.Clone(FW_LIB_NAME="flipper${TARGET_HW}") +libenv.ApplyLibFlags() + + +sources = ["targets/f${TARGET_HW}/startup_stm32wb55xx_cm4.s"] +sources += libenv.GlobRecursive("*.c") + +lib = libenv.StaticLibrary("${FW_LIB_NAME}", sources) +libenv.Install("${LIB_DIST_DIR}", lib) +Return("lib") diff --git a/firmware/targets/f7/application-ext.ld b/firmware/targets/f7/application-ext.ld new file mode 100644 index 000000000..45fe431cd --- /dev/null +++ b/firmware/targets/f7/application-ext.ld @@ -0,0 +1,37 @@ +SECTIONS +{ + .text 0x00000000 : + { + *(.text) + *(.text.*) + } + + .rodata : + { + *(.rodata) + *(.rodata1) + *(.rodata.*) + } + + .data : + { + *(.data) + *(.data1) + *(.data.*) + } + + .bss : + { + *(.bss) + *(.bss.*) + *(.sbss) + *(.sbss.*) + *(COMMON) + } + + /DISCARD/ : + { + *(.comment) + *(.comment.*) + } +} diff --git a/firmware/targets/f7/ble_glue/ble_glue.c b/firmware/targets/f7/ble_glue/ble_glue.c index dd3fc2802..6fa3dbd0d 100644 --- a/firmware/targets/f7/ble_glue/ble_glue.c +++ b/firmware/targets/f7/ble_glue/ble_glue.c @@ -113,13 +113,34 @@ BleGlueStatus ble_glue_get_c2_status() { return ble_glue->status; } +static const char* ble_glue_get_reltype_str(const uint8_t reltype) { + static char relcode[3] = {0}; + switch(reltype) { + case INFO_STACK_TYPE_BLE_FULL: + return "F"; + case INFO_STACK_TYPE_BLE_HCI: + return "H"; + case INFO_STACK_TYPE_BLE_LIGHT: + return "L"; + case INFO_STACK_TYPE_BLE_BEACON: + return "Be"; + case INFO_STACK_TYPE_BLE_BASIC: + return "Ba"; + case INFO_STACK_TYPE_BLE_FULL_EXT_ADV: + return "F+"; + case INFO_STACK_TYPE_BLE_HCI_EXT_ADV: + return "H+"; + default: + snprintf(relcode, sizeof(relcode), "%X", reltype); + return relcode; + } +} + static void ble_glue_update_c2_fw_info() { WirelessFwInfo_t wireless_info; SHCI_GetWirelessFwInfo(&wireless_info); BleGlueC2Info* local_info = &ble_glue->c2_info; - local_info->VersionMajor = wireless_info.VersionMajor; - local_info->VersionMinor = wireless_info.VersionMinor; local_info->VersionMajor = wireless_info.VersionMajor; local_info->VersionMinor = wireless_info.VersionMinor; local_info->VersionSub = wireless_info.VersionSub; @@ -132,6 +153,14 @@ static void ble_glue_update_c2_fw_info() { local_info->MemorySizeFlash = wireless_info.MemorySizeFlash; local_info->StackType = wireless_info.StackType; + snprintf( + local_info->StackTypeString, + BLE_GLUE_MAX_VERSION_STRING_LEN, + "%d.%d.%d.%s", + local_info->VersionMajor, + local_info->VersionMinor, + local_info->VersionSub, + ble_glue_get_reltype_str(local_info->StackType)); local_info->FusVersionMajor = wireless_info.FusVersionMajor; local_info->FusVersionMinor = wireless_info.FusVersionMinor; diff --git a/firmware/targets/f7/ble_glue/ble_glue.h b/firmware/targets/f7/ble_glue/ble_glue.h index fe43ae09d..bd2588a02 100644 --- a/firmware/targets/f7/ble_glue/ble_glue.h +++ b/firmware/targets/f7/ble_glue/ble_glue.h @@ -13,6 +13,7 @@ typedef enum { BleGlueC2ModeStack, } BleGlueC2Mode; +#define BLE_GLUE_MAX_VERSION_STRING_LEN 20 typedef struct { BleGlueC2Mode mode; /** @@ -28,6 +29,7 @@ typedef struct { uint8_t MemorySizeSram1; /*< Multiple of 1K */ uint8_t MemorySizeFlash; /*< Multiple of 4K */ uint8_t StackType; + char StackTypeString[BLE_GLUE_MAX_VERSION_STRING_LEN]; /** * Fus Info */ diff --git a/firmware/targets/f7/ble_glue/dev_info_service.c b/firmware/targets/f7/ble_glue/dev_info_service.c index 4adfce59c..d6d1e479e 100755 --- a/firmware/targets/f7/ble_glue/dev_info_service.c +++ b/firmware/targets/f7/ble_glue/dev_info_service.c @@ -5,6 +5,7 @@ #include #include #include +#include #define TAG "BtDevInfoSvc" @@ -15,15 +16,14 @@ typedef struct { uint16_t firmware_rev_char_handle; uint16_t software_rev_char_handle; uint16_t rpc_version_char_handle; + string_t version_string; + char hardware_revision[4]; } DevInfoSvc; static DevInfoSvc* dev_info_svc = NULL; static const char dev_info_man_name[] = "Flipper Devices Inc."; static const char dev_info_serial_num[] = "1.0"; -static const char dev_info_firmware_rev_num[] = TOSTRING(TARGET); -static const char dev_info_software_rev_num[] = GIT_COMMIT " " GIT_BRANCH " " GIT_BRANCH_NUM - " " BUILD_DATE; static const char dev_info_rpc_version[] = TOSTRING(PROTOBUF_MAJOR_VERSION.PROTOBUF_MINOR_VERSION); static const uint8_t dev_info_rpc_version_uuid[] = @@ -31,6 +31,18 @@ static const uint8_t dev_info_rpc_version_uuid[] = void dev_info_svc_start() { dev_info_svc = malloc(sizeof(DevInfoSvc)); + string_init_printf( + dev_info_svc->version_string, + "%s %s %s %s", + version_get_githash(NULL), + version_get_gitbranch(NULL), + version_get_gitbranchnum(NULL), + version_get_builddate(NULL)); + snprintf( + dev_info_svc->hardware_revision, + sizeof(dev_info_svc->hardware_revision), + "%d", + version_get_target(NULL)); tBleStatus status; // Add Device Information Service @@ -77,7 +89,7 @@ void dev_info_svc_start() { dev_info_svc->service_handle, UUID_TYPE_16, (Char_UUID_t*)&uuid, - strlen(dev_info_firmware_rev_num), + strlen(dev_info_svc->hardware_revision), CHAR_PROP_READ, ATTR_PERMISSION_AUTHEN_READ, GATT_DONT_NOTIFY_EVENTS, @@ -92,7 +104,7 @@ void dev_info_svc_start() { dev_info_svc->service_handle, UUID_TYPE_16, (Char_UUID_t*)&uuid, - strlen(dev_info_software_rev_num), + string_size(dev_info_svc->version_string), CHAR_PROP_READ, ATTR_PERMISSION_AUTHEN_READ, GATT_DONT_NOTIFY_EVENTS, @@ -140,8 +152,8 @@ void dev_info_svc_start() { dev_info_svc->service_handle, dev_info_svc->firmware_rev_char_handle, 0, - strlen(dev_info_firmware_rev_num), - (uint8_t*)dev_info_firmware_rev_num); + strlen(dev_info_svc->hardware_revision), + (uint8_t*)dev_info_svc->hardware_revision); if(status) { FURI_LOG_E(TAG, "Failed to update firmware revision char: %d", status); } @@ -149,8 +161,8 @@ void dev_info_svc_start() { dev_info_svc->service_handle, dev_info_svc->software_rev_char_handle, 0, - strlen(dev_info_software_rev_num), - (uint8_t*)dev_info_software_rev_num); + string_size(dev_info_svc->version_string), + (uint8_t*)string_get_cstr(dev_info_svc->version_string)); if(status) { FURI_LOG_E(TAG, "Failed to update software revision char: %d", status); } @@ -168,6 +180,7 @@ void dev_info_svc_start() { void dev_info_svc_stop() { tBleStatus status; if(dev_info_svc) { + string_clear(dev_info_svc->version_string); // Delete service characteristics status = aci_gatt_del_char(dev_info_svc->service_handle, dev_info_svc->man_name_char_handle); diff --git a/firmware/targets/f7/ble_glue/dev_info_service.h b/firmware/targets/f7/ble_glue/dev_info_service.h index 2faac8a66..8cce20a6c 100644 --- a/firmware/targets/f7/ble_glue/dev_info_service.h +++ b/firmware/targets/f7/ble_glue/dev_info_service.h @@ -7,12 +7,6 @@ extern "C" { #endif -#define DEV_INFO_MANUFACTURER_NAME "Flipper Devices Inc." -#define DEV_INFO_SERIAL_NUMBER "1.0" -#define DEV_INFO_FIRMWARE_REVISION_NUMBER TARGET -#define DEV_INFO_SOFTWARE_REVISION_NUMBER \ - GIT_COMMIT " " GIT_BRANCH " " GIT_BRANCH_NUM " " BUILD_DATE - void dev_info_svc_start(); void dev_info_svc_stop(); diff --git a/firmware/targets/f7/ble_glue/tl_dbg_conf.h b/firmware/targets/f7/ble_glue/tl_dbg_conf.h index 1f09b7e4d..ce58af32b 100644 --- a/firmware/targets/f7/ble_glue/tl_dbg_conf.h +++ b/firmware/targets/f7/ble_glue/tl_dbg_conf.h @@ -33,7 +33,6 @@ extern "C" { #include "app_conf.h" /* required as some configuration used in dbg_trace.h are set there */ #include "dbg_trace.h" #include "hw_if.h" -#include /** * Enable or Disable traces diff --git a/firmware/targets/f7/target.mk b/firmware/targets/f7/target.mk deleted file mode 100644 index 8e58a71c9..000000000 --- a/firmware/targets/f7/target.mk +++ /dev/null @@ -1,162 +0,0 @@ -TOOLCHAIN = arm - -FLASH_ADDRESS = 0x08000000 - -RAM_EXEC ?= 0 -ifeq ($(RAM_EXEC), 1) -CFLAGS += -DFURI_RAM_EXEC -DVECT_TAB_SRAM -DFLIPPER_STREAM_LITE -else -LDFLAGS += -u _printf_float -endif - -DEBUG_RTOS_THREADS ?= 1 -ifeq ($(DEBUG_RTOS_THREADS), 1) -OPENOCD_OPTS = -f interface/stlink.cfg -c "transport select hla_swd" -f ../debug/stm32wbx.cfg -c "stm32wbx.cpu configure -rtos auto" -c "init" -else -OPENOCD_OPTS = -f interface/stlink.cfg -c "transport select hla_swd" -f ../debug/stm32wbx.cfg -c "init" -endif - -MCU_FLAGS = -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard - -# Warnings configuration -CFLAGS += -Wall -Wextra -Wredundant-decls -Wdouble-promotion - -CFLAGS += $(MCU_FLAGS) -DSTM32WB55xx -fdata-sections -ffunction-sections -fsingle-precision-constant -LDFLAGS += $(MCU_FLAGS) -specs=nosys.specs -specs=nano.specs - -CPPFLAGS += -fno-rtti -fno-use-cxa-atexit -fno-exceptions -LDFLAGS += -Wl,--start-group -lstdc++ -lsupc++ -Wl,--end-group - -HARDWARE_TARGET = 7 - -MXPROJECT_DIR = $(TARGET_DIR) - -# Entry Point -ASM_SOURCES += $(MXPROJECT_DIR)/startup_stm32wb55xx_cm4.s - -# STM32WB HAL -CUBE_DIR = ../lib/STM32CubeWB -CFLAGS += \ - -DUSE_FULL_LL_DRIVER \ - -DUSE_FULL_ASSERT \ - -DHAVE_FREERTOS -CFLAGS += \ - -I$(CUBE_DIR)/Drivers/STM32WBxx_HAL_Driver/Inc \ - -I$(CUBE_DIR)/Drivers/CMSIS/Device/ST \ - -I$(CUBE_DIR)/Drivers/CMSIS/Device/ST/STM32WBxx/Include \ - -I$(CUBE_DIR)/Drivers/CMSIS/Include -C_SOURCES += \ - $(CUBE_DIR)/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_adc.c \ - $(CUBE_DIR)/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_comp.c \ - $(CUBE_DIR)/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_dma.c \ - $(CUBE_DIR)/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_gpio.c \ - $(CUBE_DIR)/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_i2c.c \ - $(CUBE_DIR)/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_lptim.c \ - $(CUBE_DIR)/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_rcc.c \ - $(CUBE_DIR)/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_rtc.c \ - $(CUBE_DIR)/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_spi.c \ - $(CUBE_DIR)/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_tim.c \ - $(CUBE_DIR)/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_usart.c \ - $(CUBE_DIR)/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_lpuart.c \ - $(CUBE_DIR)/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_utils.c \ - $(CUBE_DIR)/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_ll_rng.c - -# FreeRTOS -CFLAGS += \ - -I$(LIB_DIR)/FreeRTOS-Kernel/include \ - -I$(LIB_DIR)/FreeRTOS-Kernel/portable/GCC/ARM_CM4F \ - -I$(LIB_DIR)/FreeRTOS-glue/ - -C_SOURCES += \ - $(LIB_DIR)/FreeRTOS-Kernel/event_groups.c \ - $(LIB_DIR)/FreeRTOS-Kernel/list.c \ - $(LIB_DIR)/FreeRTOS-Kernel/queue.c \ - $(LIB_DIR)/FreeRTOS-Kernel/stream_buffer.c \ - $(LIB_DIR)/FreeRTOS-Kernel/tasks.c \ - $(LIB_DIR)/FreeRTOS-Kernel/timers.c \ - $(LIB_DIR)/FreeRTOS-Kernel/portable/GCC/ARM_CM4F/port.c \ - $(LIB_DIR)/FreeRTOS-glue/cmsis_os2.c \ - -# BLE glue -CFLAGS += \ - -I$(TARGET_DIR)/ble_glue \ - -I$(CUBE_DIR)/Middlewares/ST/STM32_WPAN \ - -I$(CUBE_DIR)/Middlewares/ST/STM32_WPAN/ble \ - -I$(CUBE_DIR)/Middlewares/ST/STM32_WPAN/ble/core \ - -I$(CUBE_DIR)/Middlewares/ST/STM32_WPAN/ble/core/template \ - -I$(CUBE_DIR)/Middlewares/ST/STM32_WPAN/utilities \ - -I$(CUBE_DIR)/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread \ - -I$(CUBE_DIR)/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl \ - -I$(CUBE_DIR)/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci -C_SOURCES += \ - $(wildcard $(TARGET_DIR)/ble_glue/*.c) \ - $(CUBE_DIR)/Middlewares/ST/STM32_WPAN/utilities/otp.c \ - $(CUBE_DIR)/Middlewares/ST/STM32_WPAN/utilities/stm_list.c \ - $(CUBE_DIR)/Middlewares/ST/STM32_WPAN/utilities/dbg_trace.c \ - $(CUBE_DIR)/Middlewares/ST/STM32_WPAN/ble/svc/Src/svc_ctl.c \ - $(CUBE_DIR)/Middlewares/ST/STM32_WPAN/ble/core/template/osal.c \ - $(CUBE_DIR)/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hci_le.c \ - $(CUBE_DIR)/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_gap_aci.c \ - $(CUBE_DIR)/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_gatt_aci.c \ - $(CUBE_DIR)/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hal_aci.c \ - $(CUBE_DIR)/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_l2cap_aci.c \ - $(CUBE_DIR)/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/tl_mbox.c \ - $(CUBE_DIR)/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/hci_tl.c \ - $(CUBE_DIR)/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/hci_tl_if.c \ - $(CUBE_DIR)/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/shci_tl.c \ - $(CUBE_DIR)/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/shci_tl_if.c \ - $(CUBE_DIR)/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci/shci.c - -# USB stack -CFLAGS += \ - -DSTM32WB \ - -DUSB_PMASIZE=0x400 - -# Furi HAL -FURI_HAL_OS_DEBUG ?= 0 -ifeq ($(FURI_HAL_OS_DEBUG), 1) -CFLAGS += -DFURI_HAL_OS_DEBUG -endif - -FURI_HAL_USB_VCP_DEBUG ?= 0 -ifeq ($(FURI_HAL_USB_VCP_DEBUG), 1) -CFLAGS += -DFURI_HAL_USB_VCP_DEBUG -endif - -ifeq ($(FURI_HAL_POWER_DEEP_SLEEP_ENABLED), 1) -CFLAGS += -DFURI_HAL_POWER_DEEP_SLEEP_ENABLED -endif - -FURI_HAL_SUBGHZ_TX_GPIO ?= 0 -ifneq ($(FURI_HAL_SUBGHZ_TX_GPIO), 0) -CFLAGS += -DFURI_HAL_SUBGHZ_TX_GPIO=$(FURI_HAL_SUBGHZ_TX_GPIO) -endif - -ifeq ($(INVERT_RFID_IN), 1) -CFLAGS += -DINVERT_RFID_IN -endif - -ifeq ($(BLE_GLUE_DEBUG), 1) -CFLAGS += -DBLE_GLUE_DEBUG -endif - -FURI_HAL_DIR = $(TARGET_DIR)/furi_hal -CFLAGS += -I$(FURI_HAL_DIR) -C_SOURCES += $(wildcard $(FURI_HAL_DIR)/*.c) - -# Other -CFLAGS += \ - -I$(MXPROJECT_DIR)/Inc \ - -I$(MXPROJECT_DIR)/fatfs -C_SOURCES += \ - $(wildcard $(MXPROJECT_DIR)/Src/*.c) \ - $(wildcard $(MXPROJECT_DIR)/fatfs/*.c) - -ifeq ($(RAM_EXEC), 1) -LDFLAGS += -T$(MXPROJECT_DIR)/stm32wb55xx_ram_fw.ld -else # RAM_EXEC -# Linker options -LDFLAGS += -T$(MXPROJECT_DIR)/stm32wb55xx_flash.ld -endif # RAM_EXEC - -SVD_FILE = ../debug/STM32WB55_CM4.svd diff --git a/lib/SConscript b/lib/SConscript new file mode 100644 index 000000000..ee8b83566 --- /dev/null +++ b/lib/SConscript @@ -0,0 +1,78 @@ +Import("env") + +env.Append( + LINT_SOURCES=[ + "lib/app-scened-template", + "lib/digital_signal", + "lib/drivers", + "lib/flipper_format", + "lib/infrared", + "lib/nfc_protocols", + "lib/one_wire", + "lib/ST25RFAL002", + "lib/subghz", + "lib/toolbox", + "lib/u8g2", + "lib/update_util", + ] +) + +env.Append( + CPPPATH=[ + "#/", + "#/lib", # TODO: remove! + "#/lib/mlib", + # Ugly hack + "${BUILD_DIR}/assets/compiled", + ], + CPPDEFINES=[ + '"M_MEMORY_FULL(x)=abort()"', + ], +) + + +# drivers +# fatfs +# flipper_format +# infrared +# littlefs +# subghz +# toolbox +# misc +# digital_signal +# fnv1a-hash +# micro-ecc +# microtar +# nfc_protocols +# one_wire +# qrcode +# u8g2 +# update_util +# heatshrink +# nanopb +# apps +# app-scened-template +# callback-connector +# app-template + + +libs = env.BuildModules( + [ + "STM32CubeWB", + "freertos", + "microtar", + "toolbox", + "ST25RFAL002", + "libusb_stm32", + "drivers", + "fatfs", + "flipper_format", + "infrared", + "littlefs", + "subghz", + "appframe", + "misc", + ], +) + +Return("libs") diff --git a/lib/ST25RFAL002/SConscript b/lib/ST25RFAL002/SConscript new file mode 100644 index 000000000..d86d2d002 --- /dev/null +++ b/lib/ST25RFAL002/SConscript @@ -0,0 +1,19 @@ +Import("env") + +env.Append( + CPPPATH=[ + "#/lib/ST25RFAL002", + "#/lib/ST25RFAL002/include", + "#/lib/ST25RFAL002/source/st25r3916", + ], +) + + +libenv = env.Clone(FW_LIB_NAME="st25rfal002") +libenv.ApplyLibFlags() + +sources = libenv.GlobRecursive("*.c") + +lib = libenv.StaticLibrary("${FW_LIB_NAME}", sources) +libenv.Install("${LIB_DIST_DIR}", lib) +Return("lib") diff --git a/lib/STM32CubeWB.scons b/lib/STM32CubeWB.scons new file mode 100644 index 000000000..02618ae73 --- /dev/null +++ b/lib/STM32CubeWB.scons @@ -0,0 +1,66 @@ +Import("env") + +env.Append( + CPPPATH=[ + "#/lib/STM32CubeWB/Drivers/CMSIS/Device/ST", + "#/lib/STM32CubeWB/Drivers/CMSIS/Device/ST/STM32WBxx/Include", + "#/lib/STM32CubeWB/Drivers/CMSIS/Include", + "#/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Inc", + "#/lib/STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Inc/Legacy", + "#/lib/STM32CubeWB/Middlewares/ST/STM32_WPAN", + "#/lib/STM32CubeWB/Middlewares/ST/STM32_WPAN/ble", + "#/lib/STM32CubeWB/Middlewares/ST/STM32_WPAN/ble/core", + "#/lib/STM32CubeWB/Middlewares/ST/STM32_WPAN/ble/core/template", + "#/lib/STM32CubeWB/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread", + "#/lib/STM32CubeWB/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci", + "#/lib/STM32CubeWB/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl", + "#/lib/STM32CubeWB/Middlewares/ST/STM32_WPAN/utilities", + ], + CPPDEFINES=[ + "STM32WB", + "STM32WB55xx", + "USE_FULL_ASSERT", + "USE_FULL_LL_DRIVER", + ], +) + +if env["RAM_EXEC"]: + env.Append( + CPPDEFINES=[ + "VECT_TAB_SRAM", + ], + ) + + +libenv = env.Clone(FW_LIB_NAME="stm32cubewb") +libenv.ApplyLibFlags() + +sources = libenv.GlobRecursive( + "*_ll_*.c", "STM32CubeWB/Drivers/STM32WBxx_HAL_Driver/Src/", exclude="*usb.c" +) +sources += Glob( + "STM32CubeWB/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci/*.c", + source=True, +) +sources += Glob( + "STM32CubeWB/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/*_tl*.c", + source=True, +) +sources += [ + "STM32CubeWB/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/tl_mbox.c", + "STM32CubeWB/Middlewares/ST/STM32_WPAN/ble/svc/Src/svc_ctl.c", + "STM32CubeWB/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_gap_aci.c", + "STM32CubeWB/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_gatt_aci.c", + "STM32CubeWB/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hal_aci.c", + "STM32CubeWB/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_hci_le.c", + "STM32CubeWB/Middlewares/ST/STM32_WPAN/ble/core/auto/ble_l2cap_aci.c", + "STM32CubeWB/Middlewares/ST/STM32_WPAN/ble/core/template/osal.c", + "STM32CubeWB/Middlewares/ST/STM32_WPAN/utilities/dbg_trace.c", + "STM32CubeWB/Middlewares/ST/STM32_WPAN/utilities/otp.c", + "STM32CubeWB/Middlewares/ST/STM32_WPAN/utilities/stm_list.c", +] + + +lib = libenv.StaticLibrary("${FW_LIB_NAME}", sources) +libenv.Install("${LIB_DIST_DIR}", lib) +Return("lib") diff --git a/lib/appframe.scons b/lib/appframe.scons new file mode 100644 index 000000000..935986d64 --- /dev/null +++ b/lib/appframe.scons @@ -0,0 +1,26 @@ +Import("env") + +env.Append( + CPPPATH=[ + "#/lib/app-scened-template", + "#/lib/callback-connector", + ], +) + + +libenv = env.Clone(FW_LIB_NAME="appframe") +libenv.ApplyLibFlags() + +sources = [] + +recurse_dirs = [ + "app-scened-template", + "callback-connector", +] + +for recurse_dir in recurse_dirs: + sources += libenv.GlobRecursive("*.c*", recurse_dir) + +lib = libenv.StaticLibrary("${FW_LIB_NAME}", sources) +libenv.Install("${LIB_DIST_DIR}", lib) +Return("lib") diff --git a/lib/drivers/SConscript b/lib/drivers/SConscript new file mode 100644 index 000000000..3b7ee2401 --- /dev/null +++ b/lib/drivers/SConscript @@ -0,0 +1,17 @@ +Import("env") + +env.Append( + CPPPATH=[ + "#/lib/drivers", + ], +) + + +libenv = env.Clone(FW_LIB_NAME="hwdrivers") +libenv.ApplyLibFlags() + +sources = Glob("*.c", source=True) + +lib = libenv.StaticLibrary("${FW_LIB_NAME}", sources) +libenv.Install("${LIB_DIST_DIR}", lib) +Return("lib") diff --git a/lib/fatfs/SConscript b/lib/fatfs/SConscript new file mode 100644 index 000000000..c20e29363 --- /dev/null +++ b/lib/fatfs/SConscript @@ -0,0 +1,13 @@ +Import("env") + + +libenv = env.Clone(FW_LIB_NAME="fatfs") +libenv.ApplyLibFlags() + + +sources = ["option/unicode.c"] +sources += Glob("*.c", source=True) + +lib = libenv.StaticLibrary("${FW_LIB_NAME}", sources) +libenv.Install("${LIB_DIST_DIR}", lib) +Return("lib") diff --git a/lib/flipper_format/SConscript b/lib/flipper_format/SConscript new file mode 100644 index 000000000..e5d61a075 --- /dev/null +++ b/lib/flipper_format/SConscript @@ -0,0 +1,25 @@ +Import("env") + +env.Append( + CPPPATH=[ + "#/lib/flipper_format", + ], +) + + +libenv = env.Clone(FW_LIB_NAME="flipperformat") +libenv.ApplyLibFlags() + +if libenv["RAM_EXEC"]: + libenv.Append( + CPPDEFINES=[ + "FLIPPER_STREAM_LITE", + ], + ) + + +sources = libenv.GlobRecursive("*.c") + +lib = libenv.StaticLibrary("${FW_LIB_NAME}", sources) +libenv.Install("${LIB_DIST_DIR}", lib) +Return("lib") diff --git a/lib/freertos.scons b/lib/freertos.scons new file mode 100644 index 000000000..992c4f873 --- /dev/null +++ b/lib/freertos.scons @@ -0,0 +1,28 @@ +Import("env") + +env.Append( + CPPPATH=[ + "#/lib/drivers", + "#/lib/FreeRTOS-Kernel/include", + "#/lib/FreeRTOS-Kernel/portable/GCC/ARM_CM4F", + "#/lib/FreeRTOS-glue", + ], + CPPDEFINES=[ + "HAVE_FREERTOS", + ], +) + + +libenv = env.Clone(FW_LIB_NAME="freertos") +libenv.ApplyLibFlags() + + +sources = libenv.Glob("FreeRTOS-Kernel/*.c", source=True) +sources += [ + "FreeRTOS-Kernel/portable/GCC/ARM_CM4F/port.c", + "FreeRTOS-glue/cmsis_os2.c", +] + +lib = libenv.StaticLibrary("${FW_LIB_NAME}", sources) +libenv.Install("${LIB_DIST_DIR}", lib) +Return("lib") diff --git a/lib/infrared/SConscript b/lib/infrared/SConscript new file mode 100644 index 000000000..35db75f87 --- /dev/null +++ b/lib/infrared/SConscript @@ -0,0 +1,18 @@ +Import("env") + +env.Append( + CPPPATH=[ + "#/lib/infrared/encoder_decoder", + "#/lib/infrared/worker", + ], +) + + +libenv = env.Clone(FW_LIB_NAME="infrared") +libenv.ApplyLibFlags() + +sources = libenv.GlobRecursive("*.c") + +lib = libenv.StaticLibrary("${FW_LIB_NAME}", sources) +libenv.Install("${LIB_DIST_DIR}", lib) +Return("lib") diff --git a/lib/lib.mk b/lib/lib.mk deleted file mode 100644 index 43f4a1a25..000000000 --- a/lib/lib.mk +++ /dev/null @@ -1,138 +0,0 @@ -LIB_DIR = $(PROJECT_ROOT)/lib - -# TODO: some places use lib/header.h includes, is it ok? -CFLAGS += -I$(LIB_DIR) - -# Mlib containers -CFLAGS += -I$(LIB_DIR)/mlib -D'M_MEMORY_FULL(x)=abort()' - -# U8G2 display library -U8G2_DIR = $(LIB_DIR)/u8g2 -CFLAGS += -I$(U8G2_DIR) -C_SOURCES += $(U8G2_DIR)/u8g2_glue.c -C_SOURCES += $(U8G2_DIR)/u8g2_intersection.c -C_SOURCES += $(U8G2_DIR)/u8g2_setup.c -C_SOURCES += $(U8G2_DIR)/u8g2_d_memory.c -C_SOURCES += $(U8G2_DIR)/u8x8_cad.c -C_SOURCES += $(U8G2_DIR)/u8x8_byte.c -C_SOURCES += $(U8G2_DIR)/u8x8_gpio.c -C_SOURCES += $(U8G2_DIR)/u8x8_display.c -C_SOURCES += $(U8G2_DIR)/u8x8_setup.c -C_SOURCES += $(U8G2_DIR)/u8g2_hvline.c -C_SOURCES += $(U8G2_DIR)/u8g2_line.c -C_SOURCES += $(U8G2_DIR)/u8g2_ll_hvline.c -C_SOURCES += $(U8G2_DIR)/u8g2_circle.c -C_SOURCES += $(U8G2_DIR)/u8g2_box.c -C_SOURCES += $(U8G2_DIR)/u8g2_buffer.c -C_SOURCES += $(U8G2_DIR)/u8g2_font.c -C_SOURCES += $(U8G2_DIR)/u8g2_fonts.c -C_SOURCES += $(U8G2_DIR)/u8x8_8x8.c -C_SOURCES += $(U8G2_DIR)/u8g2_bitmap.c - -FATFS_DIR = $(LIB_DIR)/fatfs -C_SOURCES += $(FATFS_DIR)/ff.c -C_SOURCES += $(FATFS_DIR)/ff_gen_drv.c -C_SOURCES += $(FATFS_DIR)/diskio.c -C_SOURCES += $(FATFS_DIR)/option/unicode.c - -# Little FS -LITTLEFS_DIR = $(LIB_DIR)/littlefs -CFLAGS += -I$(LITTLEFS_DIR) -DLFS_CONFIG=lfs_config.h -C_SOURCES += $(LITTLEFS_DIR)/lfs.c -C_SOURCES += $(LITTLEFS_DIR)/lfs_util.c - -ST25RFAL002_DIR = $(LIB_DIR)/ST25RFAL002 -CFLAGS += -I$(ST25RFAL002_DIR) -CFLAGS += -I$(ST25RFAL002_DIR)/include -CFLAGS += -I$(ST25RFAL002_DIR)/source/st25r3916 -C_SOURCES += $(wildcard $(ST25RFAL002_DIR)/*.c) -C_SOURCES += $(wildcard $(ST25RFAL002_DIR)/source/*.c) -C_SOURCES += $(wildcard $(ST25RFAL002_DIR)/source/st25r3916/*.c) - -CFLAGS += -I$(LIB_DIR)/nfc_protocols -C_SOURCES += $(wildcard $(LIB_DIR)/nfc_protocols/*.c) - -# callback connector (C to CPP) library -CFLAGS += -I$(LIB_DIR)/callback-connector - -# app template library -CFLAGS += -I$(LIB_DIR)/app-template - -# add C scene template -CFLAGS += -I$(LIB_DIR)/app_scene_template - -# fnv1a hash library -CFLAGS += -I$(LIB_DIR)/fnv1a-hash -C_SOURCES += $(LIB_DIR)/fnv1a-hash/fnv1a-hash.c - -# common apps api -CFLAGS += -I$(LIB_DIR)/common-api - -# drivers -CFLAGS += -I$(LIB_DIR)/drivers -C_SOURCES += $(wildcard $(LIB_DIR)/drivers/*.c) - -# IR lib -CFLAGS += -I$(LIB_DIR)/infrared/encoder_decoder -CFLAGS += -I$(LIB_DIR)/infrared/worker -C_SOURCES += $(wildcard $(LIB_DIR)/infrared/encoder_decoder/*.c) -C_SOURCES += $(wildcard $(LIB_DIR)/infrared/encoder_decoder/*/*.c) -C_SOURCES += $(wildcard $(LIB_DIR)/infrared/worker/*.c) - -# SubGhz -C_SOURCES += $(wildcard $(LIB_DIR)/subghz/*.c) -C_SOURCES += $(wildcard $(LIB_DIR)/subghz/*/*.c) - -#scened app template lib -CFLAGS += -I$(LIB_DIR)/app-scened-template -C_SOURCES += $(wildcard $(LIB_DIR)/app-scened-template/*.c) -CPP_SOURCES += $(wildcard $(LIB_DIR)/app-scened-template/*.cpp) -CPP_SOURCES += $(wildcard $(LIB_DIR)/app-scened-template/*/*.cpp) - -# Toolbox -C_SOURCES += $(wildcard $(LIB_DIR)/toolbox/*.c) -C_SOURCES += $(wildcard $(LIB_DIR)/toolbox/*/*.c) -CPP_SOURCES += $(wildcard $(LIB_DIR)/toolbox/*.cpp) -CPP_SOURCES += $(wildcard $(LIB_DIR)/toolbox/*/*.cpp) - -# Digital signal -CFLAGS += -I$(LIB_DIR)/digital_signal -C_SOURCES += $(wildcard $(LIB_DIR)/digital_signal/*.c) - - -# USB Stack -CFLAGS += -I$(LIB_DIR)/libusb_stm32/inc -C_SOURCES += $(LIB_DIR)/libusb_stm32/src/usbd_stm32wb55_devfs.c -C_SOURCES += $(LIB_DIR)/libusb_stm32/src/usbd_core.c - -# protobuf -CFLAGS += -I$(LIB_DIR)/nanopb -C_SOURCES += $(wildcard $(LIB_DIR)/nanopb/*.c) - -# heatshrink -CFLAGS += -I$(LIB_DIR)/heatshrink -C_SOURCES += $(wildcard $(LIB_DIR)/heatshrink/*.c) - -# Toolbox -CFLAGS += -I$(LIB_DIR)/flipper_file -C_SOURCES += $(wildcard $(LIB_DIR)/flipper_file/*.c) - -# Flipper format -CFLAGS += -I$(LIB_DIR)/flipper_format -C_SOURCES += $(wildcard $(LIB_DIR)/flipper_format/*.c) - -# Micro-ECC -CFLAGS += -I$(LIB_DIR)/micro-ecc -C_SOURCES += $(wildcard $(LIB_DIR)/micro-ecc/*.c) - -# iButton and OneWire -C_SOURCES += $(wildcard $(LIB_DIR)/one_wire/*.c) -C_SOURCES += $(wildcard $(LIB_DIR)/one_wire/*/*.c) -C_SOURCES += $(wildcard $(LIB_DIR)/one_wire/*/*/*.c) - -# microtar -CFLAGS += -I$(LIB_DIR)/microtar/src -C_SOURCES += $(wildcard $(LIB_DIR)/microtar/src/*.c) - -# Update-related common code -C_SOURCES += $(wildcard $(LIB_DIR)/update_util/*.c) diff --git a/lib/libusb_stm32.scons b/lib/libusb_stm32.scons new file mode 100644 index 000000000..cb867fdbc --- /dev/null +++ b/lib/libusb_stm32.scons @@ -0,0 +1,24 @@ +Import("env") + +env.Append( + CPPPATH=[ + "#/lib/libusb_stm32/inc", + ], + CPPDEFINES=[ + ("USB_PMASIZE", "0x400"), + ], +) + + +libenv = env.Clone(FW_LIB_NAME="usb_stm32") +libenv.ApplyLibFlags() + + +sources = [ + "libusb_stm32/src/usbd_core.c", + "libusb_stm32/src/usbd_stm32wb55_devfs.c", +] + +lib = libenv.StaticLibrary("${FW_LIB_NAME}", sources) +libenv.Install("${LIB_DIST_DIR}", lib) +Return("lib") diff --git a/lib/littlefs.scons b/lib/littlefs.scons new file mode 100644 index 000000000..792142c32 --- /dev/null +++ b/lib/littlefs.scons @@ -0,0 +1,20 @@ +Import("env") + +env.Append( + CPPPATH=[ + "#/lib/littlefs", + ], + CPPDEFINES=[ + ("LFS_CONFIG", "lfs_config.h"), + ], +) + + +libenv = env.Clone(FW_LIB_NAME="littlefs") +libenv.ApplyLibFlags() + +sources = Glob("littlefs/*.c", source=True) + +lib = libenv.StaticLibrary("${FW_LIB_NAME}", sources) +libenv.Install("${LIB_DIST_DIR}", lib) +Return("lib") diff --git a/lib/microtar.scons b/lib/microtar.scons new file mode 100644 index 000000000..6ee36d403 --- /dev/null +++ b/lib/microtar.scons @@ -0,0 +1,21 @@ +Import("env") + +env.Append( + CPPPATH=[ + "#/lib/microtar/src", + ], +) + + +libenv = env.Clone(FW_LIB_NAME="microtar") +libenv.ApplyLibFlags() + +libenv.Append( + CPPDEFINES=["MICROTAR_DISABLE_API_CHECKS"], +) + +sources = libenv.GlobRecursive("*.c", "microtar/src") + +lib = libenv.StaticLibrary("${FW_LIB_NAME}", sources) +libenv.Install("${LIB_DIST_DIR}", lib) +Return("lib") diff --git a/lib/misc.scons b/lib/misc.scons new file mode 100644 index 000000000..91a11ff64 --- /dev/null +++ b/lib/misc.scons @@ -0,0 +1,46 @@ +Import("env") + +env.Append( + CPPPATH=[ + "#/lib/digital_signal", + "#/lib/fnv1a_hash", + "#/lib/heatshrink", + "#/lib/micro-ecc", + "#/lib/nanopb", + "#/lib/nfc_protocols", + "#/lib/u8g2", + ], + CPPDEFINES=[ + "PB_ENABLE_MALLOC", + ], +) + + +libenv = env.Clone(FW_LIB_NAME="misc") +libenv.ApplyLibFlags() + +sources = [] + +libs_recurse = [ + "digital_signal", + "micro-ecc", + "nfc_protocols", + "one_wire", + "u8g2", + "update_util", +] + +for lib in libs_recurse: + sources += libenv.GlobRecursive("*.c*", lib) + +libs_plain = [ + "heatshrink", + "nanopb", +] + +for lib in libs_plain: + sources += Glob(lib + "/*.c*", source=True) + +lib = libenv.StaticLibrary("${FW_LIB_NAME}", sources) +libenv.Install("${LIB_DIST_DIR}", lib) +Return("lib") diff --git a/lib/nanopb b/lib/nanopb index c9124132a..afc499f9a 160000 --- a/lib/nanopb +++ b/lib/nanopb @@ -1 +1 @@ -Subproject commit c9124132a604047d0ef97a09c0e99cd9bed2c818 +Subproject commit afc499f9a410fc9bbf6c9c48cdd8d8b199d49eb4 diff --git a/lib/one_wire/ibutton/ibutton_worker_i.h b/lib/one_wire/ibutton/ibutton_worker_i.h index 93755481e..48d03595f 100644 --- a/lib/one_wire/ibutton/ibutton_worker_i.h +++ b/lib/one_wire/ibutton/ibutton_worker_i.h @@ -27,9 +27,9 @@ typedef enum { typedef struct { const uint32_t quant; - void (*const start) (iButtonWorker* worker); - void (*const tick) (iButtonWorker* worker); - void (*const stop) (iButtonWorker* worker); + void (*const start)(iButtonWorker* worker); + void (*const tick)(iButtonWorker* worker); + void (*const stop)(iButtonWorker* worker); } iButtonWorkerModeType; typedef enum { diff --git a/lib/one_wire/one_wire_slave.c b/lib/one_wire/one_wire_slave.c index 3c9a796d4..1f3896235 100644 --- a/lib/one_wire/one_wire_slave.c +++ b/lib/one_wire/one_wire_slave.c @@ -212,7 +212,8 @@ static void exti_cb(void* context) { static uint32_t pulse_start = 0; if(input_state) { - uint32_t pulse_length = (DWT->CYCCNT - pulse_start) / furi_hal_delay_instructions_per_microsecond(); + uint32_t pulse_length = + (DWT->CYCCNT - pulse_start) / furi_hal_delay_instructions_per_microsecond(); if(pulse_length >= OWS_RESET_MIN) { if(pulse_length <= OWS_RESET_MAX) { // reset cycle ok diff --git a/lib/scons b/lib/scons new file mode 160000 index 000000000..c2d1f09f6 --- /dev/null +++ b/lib/scons @@ -0,0 +1 @@ +Subproject commit c2d1f09f615a9ef3fb5497a7e8e5ee2c900d21a7 diff --git a/lib/subghz/SConscript b/lib/subghz/SConscript new file mode 100644 index 000000000..3c6728afe --- /dev/null +++ b/lib/subghz/SConscript @@ -0,0 +1,16 @@ +Import("env") + +env.Append( + CPPPATH=[ + "#/lib/subghz", + ], +) + +libenv = env.Clone(FW_LIB_NAME="subghz") +libenv.ApplyLibFlags() + +sources = libenv.GlobRecursive("*.c*") + +lib = libenv.StaticLibrary("${FW_LIB_NAME}", sources) +libenv.Install("${LIB_DIST_DIR}", lib) +Return("lib") diff --git a/lib/toolbox/.gitignore b/lib/toolbox/.gitignore new file mode 100644 index 000000000..912c1405c --- /dev/null +++ b/lib/toolbox/.gitignore @@ -0,0 +1 @@ +version.inc.h diff --git a/lib/toolbox/SConscript b/lib/toolbox/SConscript new file mode 100644 index 000000000..26c233d98 --- /dev/null +++ b/lib/toolbox/SConscript @@ -0,0 +1,47 @@ +Import("env") + +from fbt.version import get_fast_git_version_id + + +env.Append( + CPPPATH=[ + "#/lib/toolbox", + ], +) + + +libenv = env.Clone(tools=["fbt_version"], FW_LIB_NAME="toolbox") +libenv.ApplyLibFlags() + + +# Git Version management +version_depends = [] +version_id_data = get_fast_git_version_id() +if version_id_data: + version_depends = Value(version_id_data) + +# Only invoke version generator if preliminary check target (version_depends) has changed +build_version = libenv.VersionBuilder( + Dir("."), + version_depends, +) + +fw_version_json = libenv.InstallAs( + "${BUILD_DIR}/${FIRMWARE_BUILD_CFG}.json", "version.json" +) +env.Append(FW_VERSION_JSON=fw_version_json) + +# Default(fw_version_json) + + +if not version_depends: + libenv.Precious(build_version) + libenv.AlwaysBuild(build_version) + +sources = libenv.GlobRecursive("*.c") + +libenv.Append(CPPPATH=["."]) + +lib = libenv.StaticLibrary("${FW_LIB_NAME}", sources) +libenv.Install("${LIB_DIST_DIR}", lib) +Return("lib") diff --git a/lib/toolbox/path.c b/lib/toolbox/path.c index c6add856a..607671fb9 100644 --- a/lib/toolbox/path.c +++ b/lib/toolbox/path.c @@ -83,3 +83,32 @@ void path_concat(const char* path, const char* suffix, string_t out_path) { string_set(out_path, path); path_append(out_path, suffix); } + +bool path_contains_only_ascii(const char* path) { + const char* name_pos = strrchr(path, '/'); + if(name_pos == NULL) { + name_pos = path; + } else { + name_pos++; + } + + while(*name_pos != '\0') { + if((*name_pos >= '0') && (*name_pos <= '9')) { + name_pos++; + continue; + } else if((*name_pos >= 'A') && (*name_pos <= 'Z')) { + name_pos++; + continue; + } else if((*name_pos >= 'a') && (*name_pos <= 'z')) { + name_pos++; + continue; + } else if(strchr(".!#\\$%&'()-@^_`{}~", *name_pos) != NULL) { + name_pos++; + continue; + } + + return false; + } + + return true; +} \ No newline at end of file diff --git a/lib/toolbox/path.h b/lib/toolbox/path.h index 5c91e3fce..d46b210f0 100644 --- a/lib/toolbox/path.h +++ b/lib/toolbox/path.h @@ -65,6 +65,15 @@ void path_append(string_t path, const char* suffix); */ void path_concat(const char* path, const char* suffix, string_t out_path); +/** + * @brief Check that path contains only ascii characters + * + * @param path + * @return true + * @return false + */ +bool path_contains_only_ascii(const char* path); + #ifdef __cplusplus } #endif diff --git a/lib/toolbox/version.c b/lib/toolbox/version.c index 40c48370b..c6c10b410 100644 --- a/lib/toolbox/version.c +++ b/lib/toolbox/version.c @@ -1,5 +1,8 @@ #include "version.h" +/* This header is autogenerated by build system */ +#include "version.inc.h" + struct Version { const char* git_hash; const char* git_branch; diff --git a/make/base.mk b/make/base.mk deleted file mode 100644 index 281419e9d..000000000 --- a/make/base.mk +++ /dev/null @@ -1,11 +0,0 @@ -OBJ_DIR = .obj -ASM_SOURCES = -C_SOURCES = -CPP_SOURCES = -ASSETS = -OPENOCD_OPTS = - -CFLAGS = -CPPFLAGS = -LDFLAGS = -SVD_FILE = diff --git a/make/defaults.mk b/make/defaults.mk deleted file mode 100644 index ade34a6b0..000000000 --- a/make/defaults.mk +++ /dev/null @@ -1,2 +0,0 @@ -TARGET ?= f7 -export TARGET diff --git a/make/freertos-heap.mk b/make/freertos-heap.mk deleted file mode 100644 index 939929008..000000000 --- a/make/freertos-heap.mk +++ /dev/null @@ -1 +0,0 @@ -LDFLAGS += -Wl,--wrap,_malloc_r -Wl,--wrap,_free_r -Wl,--wrap,_calloc_r -Wl,--wrap,_realloc_r diff --git a/make/git.mk b/make/git.mk deleted file mode 100644 index e58876a8c..000000000 --- a/make/git.mk +++ /dev/null @@ -1,32 +0,0 @@ -GIT_COMMIT := $(shell git rev-parse --short HEAD || echo 'unknown') -GIT_BRANCH := $(shell echo $${WORKFLOW_BRANCH_OR_TAG-$$(git rev-parse --abbrev-ref HEAD || echo 'unknown')}) -GIT_BRANCH_NUM := $(shell git rev-list --count HEAD || echo 'nan') -BUILD_DATE := $(shell date '+%d-%m-%Y' || echo 'unknown') -BUILD_TIME := $(shell date '+%H:%M:%S' || echo 'unknown') -VERSION := $(shell git describe --tags --abbrev=0 --exact-match 2>/dev/null || echo 'unknown') -GIT_DIRTY_BUILD := $(shell git diff --quiet ; echo $$?) - -GIT_DIRTY_SUFFIX := -ifeq ($(GIT_DIRTY_BUILD), 1) - GIT_DIRTY_SUFFIX := -dirty -endif - -CFLAGS += \ - -DGIT_COMMIT=\"$(GIT_COMMIT)\" \ - -DGIT_BRANCH=\"$(GIT_BRANCH)\" \ - -DGIT_BRANCH_NUM=\"$(GIT_BRANCH_NUM)\" \ - -DBUILD_DATE=\"$(BUILD_DATE)\" \ - -DVERSION=\"$(VERSION)\" \ - -DTARGET=$(HARDWARE_TARGET) \ - -DBUILD_DIRTY=$(GIT_DIRTY_BUILD) - -# if suffix is set in environment (by Github), use it -ifeq (${DIST_SUFFIX},) - DIST_SUFFIX := local-$(GIT_COMMIT)$(GIT_DIRTY_SUFFIX) -else - DIST_SUFFIX := ${DIST_SUFFIX}$(GIT_DIRTY_SUFFIX) -endif - -#VERSION_STRING := $(VERSION) ($(GIT_BRANCH) @ $(GIT_COMMIT)), built $(BUILD_DATE) $(BUILD_TIME) -VERSION_STRING := $(DIST_SUFFIX), $(GIT_BRANCH) - diff --git a/make/rules.mk b/make/rules.mk deleted file mode 100644 index bdf8a4af0..000000000 --- a/make/rules.mk +++ /dev/null @@ -1,185 +0,0 @@ -OBJ_DIR := $(OBJ_DIR)/$(TARGET)-$(PROJECT) - -# Include source folder paths to virtual paths -C_SOURCES := $(abspath ${C_SOURCES}) -ASM_SOURCES := $(abspath ${ASM_SOURCES}) -CPP_SOURCES := $(abspath ${CPP_SOURCES}) - -# Gather object -OBJECTS = $(addprefix $(OBJ_DIR)/, $(C_SOURCES:.c=.o)) -OBJECTS += $(addprefix $(OBJ_DIR)/, $(ASM_SOURCES:.s=.o)) -OBJECTS += $(addprefix $(OBJ_DIR)/, $(CPP_SOURCES:.cpp=.o)) - -OBJECT_DIRS = $(sort $(dir $(OBJECTS))) - -# Generate dependencies -DEPS = $(OBJECTS:.o=.d) - -ifdef DFU_SERIAL - DFU_OPTIONS += -S $(DFU_SERIAL) -endif - -$(foreach dir, $(OBJECT_DIRS),$(shell mkdir -p $(dir))) - -BUILD_FLAGS_SHELL=\ - echo $(OBJ_DIR) ;\ - echo "$(CFLAGS)" > $(OBJ_DIR)/BUILD_FLAGS.tmp; \ - diff -u $(OBJ_DIR)/BUILD_FLAGS $(OBJ_DIR)/BUILD_FLAGS.tmp 2>&1 > /dev/null \ - && ( echo "CFLAGS ok"; rm $(OBJ_DIR)/BUILD_FLAGS.tmp) \ - || ( echo "CFLAGS has been changed"; mv $(OBJ_DIR)/BUILD_FLAGS.tmp $(OBJ_DIR)/BUILD_FLAGS ) -$(info $(shell $(BUILD_FLAGS_SHELL))) - -CHECK_AND_REINIT_SUBMODULES_SHELL=\ - if git submodule status | egrep -q '^[-]|^[+]' ; then \ - echo "INFO: Need to reinitialize git submodules"; \ - git submodule sync; \ - git submodule update --init; \ - fi -$(info $(shell $(CHECK_AND_REINIT_SUBMODULES_SHELL))) - - -all: $(OBJ_DIR)/$(PROJECT).elf $(OBJ_DIR)/$(PROJECT).hex $(OBJ_DIR)/$(PROJECT).bin $(OBJ_DIR)/$(PROJECT).dfu $(OBJ_DIR)/$(PROJECT).json - @: - -$(OBJ_DIR)/$(PROJECT).elf: $(OBJECTS) - @echo "\tLD\t" $@ - @$(LD) $(LDFLAGS) $(OBJECTS) -o $@ - @$(SZ) $@ - -$(OBJ_DIR)/$(PROJECT).hex: $(OBJ_DIR)/$(PROJECT).elf - @echo "\tHEX\t" $@ - @$(HEX) $< $@ - -$(OBJ_DIR)/$(PROJECT).bin: $(OBJ_DIR)/$(PROJECT).elf - @echo "\tBIN\t" $@ - @$(BIN) $< $@ - -$(OBJ_DIR)/$(PROJECT).dfu: $(OBJ_DIR)/$(PROJECT).bin - @echo "\tDFU\t" $@ - @../scripts/bin2dfu.py \ - -i $(OBJ_DIR)/$(PROJECT).bin \ - -o $(OBJ_DIR)/$(PROJECT).dfu \ - -a $(FLASH_ADDRESS) \ - -l "Flipper Zero $(shell echo $(TARGET) | tr a-z A-Z)" > /dev/null - -$(OBJ_DIR)/$(PROJECT).json: $(OBJ_DIR)/$(PROJECT).dfu - @echo "\tJSON\t" $@ - @$(PROJECT_ROOT)/scripts/meta.py generate -p $(PROJECT) $(CFLAGS) > $(OBJ_DIR)/$(PROJECT).json - -$(OBJ_DIR)/%.o: %.c $(OBJ_DIR)/BUILD_FLAGS - @echo "\tCC\t" $(subst $(PROJECT_ROOT)/, , $<) - @$(CC) $(CFLAGS) -c $< -o $@ - -$(OBJ_DIR)/%.o: %.s $(OBJ_DIR)/BUILD_FLAGS - @echo "\tASM\t" $(subst $(PROJECT_ROOT)/, , $<) - @$(AS) $(CFLAGS) -c $< -o $@ - -$(OBJ_DIR)/%.o: %.cpp $(OBJ_DIR)/BUILD_FLAGS - @echo "\tCPP\t" $(subst $(PROJECT_ROOT)/, , $<) - @$(CPP) $(CFLAGS) $(CPPFLAGS) -c $< -o $@ - -$(OBJ_DIR)/flash: $(OBJ_DIR)/$(PROJECT).bin - openocd $(OPENOCD_OPTS) -c "program $(OBJ_DIR)/$(PROJECT).bin reset exit $(FLASH_ADDRESS)" - touch $@ - -$(OBJ_DIR)/upload: $(OBJ_DIR)/$(PROJECT).bin - dfu-util -d 0483:df11 -D $(OBJ_DIR)/$(PROJECT).bin -a 0 -s $(FLASH_ADDRESS) $(DFU_OPTIONS) - touch $@ - -.PHONY: flash -flash: $(OBJ_DIR)/flash - -.PHONY: upload -upload: $(OBJ_DIR)/upload - -.PHONY: debug -debug: flash - $(GDB) \ - -ex 'target extended-remote | openocd -c "gdb_port pipe" $(OPENOCD_OPTS)' \ - -ex "set confirm off" \ - -ex "source ../debug/FreeRTOS/FreeRTOS.py" \ - -ex "source ../debug/PyCortexMDebug/PyCortexMDebug.py" \ - -ex "svd_load $(SVD_FILE)" \ - -ex "compare-sections" \ - $(OBJ_DIR)/$(PROJECT).elf; \ - -.PHONY: debug_other -debug_other: - $(GDB) \ - -ex 'target extended-remote | openocd -c "gdb_port pipe" $(OPENOCD_OPTS)' \ - -ex "set confirm off" \ - -ex "source ../debug/PyCortexMDebug/PyCortexMDebug.py" \ - -ex "svd_load $(SVD_FILE)" \ - -.PHONY: blackmagic -blackmagic: - $(GDB) \ - -ex 'target extended-remote $(BLACKMAGIC)' \ - -ex 'monitor swdp_scan' \ - -ex 'monitor debug_bmp enable' \ - -ex 'attach 1' \ - -ex 'set confirm off' \ - -ex 'set mem inaccessible-by-default off' \ - -ex "source ../debug/FreeRTOS/FreeRTOS.py" \ - -ex "source ../debug/PyCortexMDebug/PyCortexMDebug.py" \ - -ex "svd_load $(SVD_FILE)" \ - -ex "compare-sections" \ - $(OBJ_DIR)/$(PROJECT).elf; \ - -.PHONY: openocd -openocd: - openocd $(OPENOCD_OPTS) - -.PHONY: clean -clean: - @echo "\tCLEAN\t" - @$(RM) -rf $(OBJ_DIR) - -.PHONY: z -z: clean - $(MAKE) all - -.PHONY: zz -zz: clean - $(MAKE) flash - -.PHONY: zzz -zzz: clean - $(MAKE) debug - -.PHONY: generate_cscope_db -generate_cscope_db: - @echo "$(C_SOURCES) $(CPP_SOURCES) $(ASM_SOURCES)" | tr ' ' '\n' > $(OBJ_DIR)/source.list.p - @cat ~/headers.list >> $(OBJ_DIR)/source.list.p - @cat $(OBJ_DIR)/source.list.p | sed -e "s|^[^//]|$$PWD/&|g" > $(OBJ_DIR)/source.list - @cscope -b -k -i $(OBJ_DIR)/source.list -f $(OBJ_DIR)/cscope.out - @rm -rf $(OBJ_DIR)/source.list $(OBJ_DIR)/source.list.p - -.PHONY: generate_compile_db -generate_compile_db: - @echo "$(ASM_SOURCES)" | tr ' ' '\n' > $(OBJ_DIR)/db.asm_source.list - @echo "$(C_SOURCES)" | tr ' ' '\n' > $(OBJ_DIR)/db.c_source.list - @echo "$(CPP_SOURCES)" | tr ' ' '\n' > $(OBJ_DIR)/db.cpp_source.list - @echo "$(AS)$(CFLAGS)" | tr ' ' '\n' > $(OBJ_DIR)/db.asm_flags.list - @echo "$(CC)$(CFLAGS)" | tr ' ' '\n' > $(OBJ_DIR)/db.c_flags.list - @echo "$(CPP)$(CFLAGS)$(CPPFLAGS)" | tr ' ' '\n' > $(OBJ_DIR)/db.cpp_flags.list - @$(PROJECT_ROOT)/scripts/compile_db.py generate -p $(OBJ_DIR) - @rm $(OBJ_DIR)/db.asm_source.list - @rm $(OBJ_DIR)/db.c_source.list - @rm $(OBJ_DIR)/db.cpp_source.list - @rm $(OBJ_DIR)/db.asm_flags.list - @rm $(OBJ_DIR)/db.c_flags.list - @rm $(OBJ_DIR)/db.cpp_flags.list - -# Prevent make from searching targets for real files -%.d: ; - -%.c: ; - -%.cpp: ; - -%.s: ; - -$(OBJ_DIR)/BUILD_FLAGS: ; - --include $(DEPS) diff --git a/make/toolchain.mk b/make/toolchain.mk deleted file mode 100644 index f161d3d1e..000000000 --- a/make/toolchain.mk +++ /dev/null @@ -1,41 +0,0 @@ -OS := $(shell uname -s) - -# Compiller -ifeq ($(TOOLCHAIN), arm) -PREFIX = arm-none-eabi- -ifdef GCC_PATH -PREFIX := $(GCC_PATH)/$(PREFIX) -endif -endif - -CCACHE := $(shell which ccache) - -CC = $(CCACHE) $(PREFIX)gcc -std=gnu17 -CPP = $(CCACHE) $(PREFIX)g++ -std=gnu++17 -LD = $(PREFIX)g++ -AS = $(PREFIX)gcc -x assembler-with-cpp -CP = $(PREFIX)objcopy -SZ = $(PREFIX)size -HEX = $(CP) -O ihex -BIN = $(CP) -O binary -S - - -ifeq ($(OS), Darwin) -GDB = gdb -else -GDB = $(PREFIX)gdb-py -endif - -DEBUG ?= 1 -COMPACT ?= 0 -ifeq ($(DEBUG), 1) -CFLAGS += -DFURI_DEBUG -DNDEBUG -Og -g -else ifeq ($(COMPACT), 1) -CFLAGS += -DFURI_NDEBUG -DNDEBUG -Os -g -else -CFLAGS += -DFURI_NDEBUG -DNDEBUG -Og -g -endif - -CFLAGS += -fdata-sections -ffunction-sections -fno-math-errno -fstack-usage -MMD -MP -MF "$(@:%.o=%.d)" -CPPFLAGS += -fno-threadsafe-statics -fno-use-cxa-atexit -fno-exceptions -fno-rtti -LDFLAGS += -Wl,-Map=$(OBJ_DIR)/$(PROJECT).map,--cref -Wl,--gc-sections -Wl,--undefined=uxTopUsedPriority -n diff --git a/scripts/assets.py b/scripts/assets.py index 1363900f0..b27b29efd 100755 --- a/scripts/assets.py +++ b/scripts/assets.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 from flipper.app import App +from flipper.assets.icon import file2image import logging import argparse @@ -90,31 +91,8 @@ class Main(App): self.parser_dolphin.set_defaults(func=self.dolphin) def _icon2header(self, file): - output = subprocess.check_output(["convert", file, "xbm:-"]) - assert output - f = io.StringIO(output.decode().strip()) - width = int(f.readline().strip().split(" ")[2]) - height = int(f.readline().strip().split(" ")[2]) - data = f.read().strip().replace("\n", "").replace(" ", "").split("=")[1][:-1] - data_bin_str = data[1:-1].replace(",", " ").replace("0x", "") - data_bin = bytearray.fromhex(data_bin_str) - # Encode icon data with LZSS - data_encoded_str = subprocess.check_output( - ["heatshrink", "-e", "-w8", "-l4"], input=data_bin - ) - assert data_encoded_str - data_enc = bytearray(data_encoded_str) - data_enc = bytearray([len(data_enc) & 0xFF, len(data_enc) >> 8]) + data_enc - # Use encoded data only if its lenght less than original, including header - if len(data_enc) < len(data_bin) + 1: - data = ( - "{0x01,0x00," - + "".join("0x{:02x},".format(byte) for byte in data_enc) - + "}" - ) - else: - data = "{0x00," + data[1:] - return width, height, data + image = file2image(file) + return image.width, image.height, image.data_as_carray() def _iconIsSupported(self, filename): extension = filename.lower().split(".")[-1] @@ -122,7 +100,11 @@ class Main(App): def icons(self): self.logger.debug(f"Converting icons") - icons_c = open(os.path.join(self.args.output_directory, "assets_icons.c"), "w") + icons_c = open( + os.path.join(self.args.output_directory, "assets_icons.c"), + "w", + newline="\n", + ) icons_c.write(ICONS_TEMPLATE_C_HEADER) icons = [] # Traverse icons tree, append image data to source file @@ -204,12 +186,19 @@ class Main(App): ) ) icons_c.write("\n") + icons_c.close() + # Create Public Header self.logger.debug(f"Creating header") - icons_h = open(os.path.join(self.args.output_directory, "assets_icons.h"), "w") + icons_h = open( + os.path.join(self.args.output_directory, "assets_icons.h"), + "w", + newline="\n", + ) icons_h.write(ICONS_TEMPLATE_H_HEADER) for name, width, height, frame_rate, frame_count in icons: icons_h.write(ICONS_TEMPLATE_H_ICON_NAME.format(name=name)) + icons_h.close() self.logger.debug(f"Done") return 0 diff --git a/scripts/bin2dfu.py b/scripts/bin2dfu.py index d27b44aa1..7484738f1 100755 --- a/scripts/bin2dfu.py +++ b/scripts/bin2dfu.py @@ -62,7 +62,8 @@ class Main(App): data += struct.pack(" 0: - h.update(data) - else: - break + with open(path, "rb") as fd: + while True: + data = fd.read(block_size) + if len(data) > 0: + h.update(data) + else: + break return h.hexdigest() diff --git a/scripts/flipper/utils/fff.py b/scripts/flipper/utils/fff.py index b7f89321a..fa689b016 100644 --- a/scripts/flipper/utils/fff.py +++ b/scripts/flipper/utils/fff.py @@ -99,5 +99,5 @@ class FlipperFormatFile: self.lines = file.readlines() def save(self, filename: str): - with open(filename, "w") as file: + with open(filename, "w", newline="\n") as file: file.write("\n".join(self.lines)) diff --git a/scripts/lint.py b/scripts/lint.py index bf1f5e680..b3c3e7da4 100755 --- a/scripts/lint.py +++ b/scripts/lint.py @@ -117,6 +117,7 @@ class Main(App): if dry_run: if len(bad) > 0: self.logger.error(f"Found {len(bad)} incorrectly named files") + self.logger.info(bad) return False else: # Replace occurances in text files diff --git a/scripts/ob.py b/scripts/ob.py index 17de08fd0..722549d69 100755 --- a/scripts/ob.py +++ b/scripts/ob.py @@ -40,10 +40,10 @@ class Main(App): def before(self): self.logger.info(f"Loading Option Bytes data") file_path = os.path.join(os.path.dirname(sys.argv[0]), "ob.data") - file = open(file_path, "r") - for line in file.readlines(): - k, v, o = line.split(":") - self.ob[k.strip()] = v.strip(), o.strip() + with open(file_path, "r") as file: + for line in file.readlines(): + k, v, o = line.split(":") + self.ob[k.strip()] = v.strip(), o.strip() def check(self): self.logger.info(f"Checking Option Bytes") diff --git a/scripts/otp.py b/scripts/otp.py index 547149610..7b2378d12 100755 --- a/scripts/otp.py +++ b/scripts/otp.py @@ -149,8 +149,10 @@ class Main(App): self.logger.info(f"Generating OTP") self._processFirstArgs() self._processSecondArgs() - open(f"{self.args.file}_first.bin", "wb").write(self._packFirst()) - open(f"{self.args.file}_second.bin", "wb").write(self._packSecond()) + with open(f"{self.args.file}_first.bin", "wb") as file: + file.write(self._packFirst()) + with open(f"{self.args.file}_second.bin", "wb") as file: + file.write(self._packSecond()) self.logger.info( f"Generated files: {self.args.file}_first.bin and {self.args.file}_second.bin" ) @@ -166,9 +168,9 @@ class Main(App): try: self.logger.info(f"Packing binary data") - file = open(filename, "wb") - file.write(self._packFirst()) - file.close() + with open(filename, "wb") as file: + file.write(self._packFirst()) + self.logger.info(f"Flashing OTP") cp = CubeProgrammer(self._getCubeParams()) cp.flashBin("0x1FFF7000", filename) @@ -190,9 +192,9 @@ class Main(App): try: self.logger.info(f"Packing binary data") - file = open(filename, "wb") - file.write(self._packSecond()) - file.close() + with open(filename, "wb") as file: + file.write(self._packSecond()) + self.logger.info(f"Flashing OTP") cp = CubeProgrammer(self._getCubeParams()) cp.flashBin("0x1FFF7010", filename) @@ -215,10 +217,10 @@ class Main(App): try: self.logger.info(f"Packing binary data") - file = open(filename, "wb") - file.write(self._packFirst()) - file.write(self._packSecond()) - file.close() + with open(filename, "wb") as file: + file.write(self._packFirst()) + file.write(self._packSecond()) + self.logger.info(f"Flashing OTP") cp = CubeProgrammer(self._getCubeParams()) cp.flashBin("0x1FFF7000", filename) diff --git a/scripts/requirements.txt b/scripts/requirements.txt new file mode 100644 index 000000000..4c4b7279c --- /dev/null +++ b/scripts/requirements.txt @@ -0,0 +1,7 @@ +pyserial==3.5 +heatshrink2==0.11.0 +Pillow==9.1.1 +grpcio==1.47.0 +grpcio-tools==1.47.0 +protobuf==3.20.1 +python3-protobuf==2.5.0 diff --git a/scripts/dist.py b/scripts/sconsdist.py old mode 100755 new mode 100644 similarity index 55% rename from scripts/dist.py rename to scripts/sconsdist.py index ccede12b0..1e95ee2f2 --- a/scripts/dist.py +++ b/scripts/sconsdist.py @@ -7,6 +7,15 @@ from update import Main as UpdateMain import shutil +class ProjectDir: + def __init__(self, project_dir): + self.dir = project_dir + parts = project_dir.split("-") + self.target = parts[0] + self.project = parts[1] + self.flavor = parts[2] if len(parts) > 2 else "" + + class Main(App): def init(self): self.subparsers = self.parser.add_subparsers(help="sub-command help") @@ -15,8 +24,7 @@ class Main(App): "copy", help="Copy firmware binaries & metadata" ) - self.parser_copy.add_argument("-t", dest="target", required=True) - self.parser_copy.add_argument("-p", dest="projects", nargs="+", required=True) + self.parser_copy.add_argument("-p", dest="project", nargs="+", required=True) self.parser_copy.add_argument("-s", dest="suffix", required=True) self.parser_copy.add_argument("-r", dest="resources", required=False) self.parser_copy.add_argument( @@ -36,40 +44,67 @@ class Main(App): def get_project_filename(self, project, filetype): # Temporary fix - if project == "firmware" and filetype != "elf": - project = "full" - return f"flipper-z-{self.args.target}-{project}-{self.args.suffix}.{filetype}" + project_name = project.project + if project_name == "firmware" and filetype != "elf": + project_name = "full" + return f"flipper-z-{self.target}-{project_name}-{self.args.suffix}.{filetype}" def get_dist_filepath(self, filename): return join(self.output_dir_path, filename) def copy_single_project(self, project): - target_project = f"{self.args.target}-{project}" - obj_directory = join("firmware", ".obj", target_project) + obj_directory = join("build", project.dir) for filetype in ("elf", "bin", "dfu", "json"): shutil.copyfile( - join(obj_directory, f"{project}.{filetype}"), + join(obj_directory, f"{project.project}.{filetype}"), self.get_dist_filepath(self.get_project_filename(project, filetype)), ) def copy(self): - self.output_dir_path = join("dist", self.args.target) + self.projects = dict( + map( + lambda pd: (pd.project, pd), + map(ProjectDir, self.args.project), + ) + ) + + project_targets = set(map(lambda p: p.target, self.projects.values())) + if len(project_targets) != 1: + self.logger.error(f"Cannot mix targets {project_targets}!") + return 1 + self.target = project_targets.pop() + + project_flavors = set(map(lambda p: p.flavor, self.projects.values())) + if len(project_flavors) != 1: + self.logger.error(f"Cannot mix flavors {project_flavors}!") + return 2 + self.flavor = project_flavors.pop() + + dist_dir_components = [self.target] + if self.flavor: + dist_dir_components.append(self.flavor) + + self.output_dir_path = join("dist", "-".join(dist_dir_components)) if exists(self.output_dir_path) and not self.args.noclean: - shutil.rmtree(self.output_dir_path) + try: + shutil.rmtree(self.output_dir_path) + except Exception as ex: + pass if not exists(self.output_dir_path): makedirs(self.output_dir_path) - for project in self.args.projects: + for project in self.projects.values(): self.copy_single_project(project) self.logger.info( f"Firmware binaries can be found at:\n\t{self.output_dir_path}" ) + if self.args.version: bundle_dir = join( - self.output_dir_path, f"{self.args.target}-update-{self.args.suffix}" + self.output_dir_path, f"{self.target}-update-{self.args.suffix}" ) bundle_args = [ "generate", @@ -78,11 +113,15 @@ class Main(App): "-v", self.args.version, "-t", - self.args.target, + self.target, "--dfu", - self.get_dist_filepath(self.get_project_filename("firmware", "dfu")), + self.get_dist_filepath( + self.get_project_filename(self.projects["firmware"], "dfu") + ), "--stage", - self.get_dist_filepath(self.get_project_filename("updater", "bin")), + self.get_dist_filepath( + self.get_project_filename(self.projects["updater"], "bin") + ), ] if self.args.resources: bundle_args.extend( diff --git a/scripts/storage.py b/scripts/storage.py index a56dcd8b9..4364eb28a 100755 --- a/scripts/storage.py +++ b/scripts/storage.py @@ -293,7 +293,8 @@ class Main: with tempfile.TemporaryDirectory() as tmpdirname: send_file_name = os.path.join(tmpdirname, "send") receive_file_name = os.path.join(tmpdirname, "receive") - open(send_file_name, "w").write("A" * self.args.file_size) + with open(send_file_name, "w") as fout: + fout.write("A" * self.args.file_size) storage = FlipperStorage(self.args.port) storage.start() if storage.exist_file(self.args.flipper_path): diff --git a/scripts/version.py b/scripts/version.py new file mode 100644 index 000000000..87bf7ed88 --- /dev/null +++ b/scripts/version.py @@ -0,0 +1,131 @@ +#!/usb/bin/env python3 + +from flipper.app import App + +import subprocess +import os +import json +from datetime import date + + +class GitVersion: + def __init__(self, source_dir): + self.source_dir = source_dir + + def get_version_info(self): + commit = self._exec_git("rev-parse --short HEAD") or "unknown" + + dirty = False + try: + self._exec_git("diff --quiet") + except subprocess.CalledProcessError as e: + if e.returncode == 1: + dirty = True + + # If WORKFLOW_BRANCH_OR_TAG is set in environment, is has precedence + # (set by CI) + branch = ( + os.environ.get("WORKFLOW_BRANCH_OR_TAG", None) + or self._exec_git("rev-parse --abbrev-ref HEAD") + or "unknown" + ) + + branch_num = self._exec_git("rev-list --count HEAD") or "n/a" + + try: + version = self._exec_git("describe --tags --abbrev=0 --exact-match") + except subprocess.CalledProcessError: + version = "unknown" + + return { + "GIT_COMMIT": commit, + "GIT_BRANCH": branch, + "GIT_BRANCH_NUM": branch_num, + "VERSION": version, + "BUILD_DIRTY": dirty and 1 or 0, + } + + def _exec_git(self, args): + cmd = ["git"] + cmd.extend(args.split(" ")) + return ( + subprocess.check_output(cmd, cwd=self.source_dir, stderr=subprocess.STDOUT) + .strip() + .decode() + ) + + +class Main(App): + def init(self): + self.subparsers = self.parser.add_subparsers(help="sub-command help") + + # generate + self.parser_generate = self.subparsers.add_parser( + "generate", help="Generate version header" + ) + + self.parser_generate.add_argument("-o", dest="outdir", required=True) + self.parser_generate.add_argument( + "-t", + dest="target", + type=int, + help="hardware target", + required=True, + ) + self.parser_generate.add_argument("--dir", dest="sourcedir", required=True) + self.parser_generate.set_defaults(func=self.generate) + + def generate(self): + current_info = GitVersion(self.args.sourcedir).get_version_info() + current_info.update( + { + "BUILD_DATE": date.today().strftime("%d-%m-%Y"), + "TARGET": self.args.target, + } + ) + + version_values = [] + for key in current_info: + val = current_info[key] + if isinstance(val, str): + val = f'"{val}"' + version_values.append(f"#define {key} {val}") + + new_version_info_fmt = "\n".join(version_values) + "\n" + + current_version_info = None + version_header_name = os.path.join(self.args.outdir, "version.inc.h") + version_json_name = os.path.join(self.args.outdir, "version.json") + + try: + with open(version_header_name, "r") as file: + current_version_info = file.read() + except EnvironmentError as e: + if self.args.debug: + print(e) + + if current_version_info != new_version_info_fmt: + if self.args.debug: + print("old: ", current_version_info) + print("new: ", new_version_info_fmt) + with open(version_header_name, "w", newline="\n") as file: + file.write(new_version_info_fmt) + # os.utime("../lib/toolbox/version.c", None) + print("Version information updated") + else: + if self.args.debug: + print("Version information hasn't changed") + + version_json = { + "firmware_build_date": current_info["BUILD_DATE"], + "firmware_commit": current_info["GIT_COMMIT"], + "firmware_branch": current_info["GIT_BRANCH"], + "firmware_target": current_info["TARGET"], + } + with open(version_json_name, "w", newline="\n") as file: + json.dump(version_json, file, indent=4) + return 0 + + +if __name__ == "__main__": + Main()() diff --git a/site_scons/cc.scons b/site_scons/cc.scons new file mode 100644 index 000000000..e71db2ba2 --- /dev/null +++ b/site_scons/cc.scons @@ -0,0 +1,47 @@ +Import("ENV") + + +ENV.AppendUnique( + CFLAGS=[ + "-std=gnu17", + ], + CXXFLAGS=[ + "-std=c++17", + "-fno-rtti", + "-fno-use-cxa-atexit", + "-fno-exceptions", + "-fno-threadsafe-statics", + ], + CCFLAGS=[ + "-mcpu=cortex-m4", + "-mfloat-abi=hard", + "-mfpu=fpv4-sp-d16", + "-mthumb", + # "-MMD", + # "-MP", + "-Wall", + "-Wextra", + "-Werror", + "-Wno-address-of-packed-member", + "-Wredundant-decls", + "-Wdouble-promotion", + "-fdata-sections", + "-ffunction-sections", + "-fsingle-precision-constant", + "-fno-math-errno", + "-fstack-usage", + "-g", + # "-Wno-stringop-overread", + # "-Wno-stringop-overflow", + ], + CPPDEFINES=[ + "_GNU_SOURCE", + ], + LINKFLAGS=[ + "-mcpu=cortex-m4", + "-mfloat-abi=hard", + "-mfpu=fpv4-sp-d16", + "-mlittle-endian", + "-mthumb", + ], +) diff --git a/site_scons/commandline.scons b/site_scons/commandline.scons new file mode 100644 index 000000000..06e836578 --- /dev/null +++ b/site_scons/commandline.scons @@ -0,0 +1,202 @@ +# Commandline options + +# To build updater-related targets, you need to set this option +AddOption( + "--with-updater", + dest="fullenv", + action="store_true", + help="Full firmware environment", +) + +AddOption( + "--options", + dest="optionfile", + type="string", + nargs=1, + action="store", + default="fbt_options.py", + help="Enviroment option file", +) + +AddOption( + "--extra-int-apps", + action="store", + dest="extra_int_apps", + default="", + help="List of applications to add to firmare's built-ins. Also see FIRMWARE_APP_SET and FIRMWARE_APPS", +) + +AddOption( + "--extra-ext-apps", + action="store", + dest="extra_ext_apps", + default="", + help="List of applications to forcefully build as standalone .elf", +) + + +# Construction environment variables + +vars = Variables(GetOption("optionfile"), ARGUMENTS) + +vars.AddVariables( + BoolVariable( + "VERBOSE", + help="Print full commands", + default=False, + ), + BoolVariable( + "FORCE", + help="Force target action (for supported targets)", + default=False, + ), + BoolVariable( + "DEBUG", + help="Enable debug build", + default=True, + ), + BoolVariable( + "COMPACT", + help="Optimize for size", + default=False, + ), + EnumVariable( + "TARGET_HW", + help="Hardware target", + default="7", + allowed_values=[ + "7", + ], + ), +) + +vars.Add( + "DIST_SUFFIX", + help="Suffix for binaries in build output for dist targets", + default="local", +) + +vars.Add( + "UPDATE_VERSION_STRING", + help="Version string for updater package", + default="${DIST_SUFFIX}", +) + + +vars.Add( + "COPRO_CUBE_VERSION", + help="Cube version", + default="", +) + +vars.Add( + "COPRO_STACK_ADDR", + help="Core2 Firmware address", + default="0", +) + +vars.Add( + "COPRO_STACK_BIN", + help="Core2 Firmware file name", + default="", +) + +vars.Add( + "COPRO_DISCLAIMER", + help="Value to pass to bundling script to confirm dangerous operations", + default="", +) + +vars.AddVariables( + PathVariable( + "COPRO_OB_DATA", + help="Path to OB reference data", + validator=PathVariable.PathIsFile, + default="", + ), + PathVariable( + "COPRO_STACK_BIN_DIR", + help="Path to ST-provided stacks", + validator=PathVariable.PathIsDir, + default="", + ), + PathVariable( + "COPRO_CUBE_DIR", + help="Path to Cube root", + validator=PathVariable.PathIsDir, + default="", + ), + EnumVariable( + "COPRO_STACK_TYPE", + help="Core2 stack type", + default="ble_light", + allowed_values=[ + "ble_full", + "ble_light", + "ble_basic", + ], + ), + PathVariable( + "SVD_FILE", + help="Path to SVD file", + validator=PathVariable.PathIsFile, + default="", + ), + PathVariable( + "OTHER_ELF", + help="Path to prebuilt ELF file to debug", + validator=PathVariable.PathAccept, + default="", + ), +) + +vars.Add( + "FBT_TOOLCHAIN_VERSIONS", + help="Whitelisted toolchain versions (leave empty for no check)", + default=tuple(), +) + +vars.Add( + "OPENOCD_OPTS", + help="Options to pass to OpenOCD", + default="", +) + +vars.Add( + "UPDATE_SPLASH", + help="Directory name with slideshow frames to render after installing update package", + default="update_default", +) + + +vars.Add( + "FIRMWARE_APPS", + help="Map of (configuration_name->application_list)", + default={ + "default": ( + "crypto_start", + # Svc + "basic_services", + # Apps + "basic_apps", + "updater_app", + "archive", + # Settings + "passport", + "system_settings", + "about", + # Plugins + "basic_plugins", + # Debug + "debug_apps", + ) + }, +) + +vars.Add( + "FIRMWARE_APP_SET", + help="Application set to use from FIRMWARE_APPS", + default="default", +) + +Return("vars") diff --git a/site_scons/environ.scons b/site_scons/environ.scons new file mode 100644 index 000000000..9e49e8b60 --- /dev/null +++ b/site_scons/environ.scons @@ -0,0 +1,82 @@ +import SCons +from SCons.Platform import TempFileMunge +from fbt import util + +import os +import multiprocessing + +Import("VAR_ENV") + +forward_os_env = { + # Import PATH from OS env - scons doesn't do that by default + "PATH": os.environ["PATH"], +} +# Proxying CI environment to child processes & scripts +for env_value_name in ("WORKFLOW_BRANCH_OR_TAG", "DIST_SUFFIX", "HOME", "APPDATA"): + if environ_value := os.environ.get(env_value_name, None): + forward_os_env[env_value_name] = environ_value + + +coreenv = VAR_ENV.Clone( + tools=[ + ( + "crosscc", + { + "toolchain_prefix": "arm-none-eabi-", + "versions": VAR_ENV["FBT_TOOLCHAIN_VERSIONS"], + }, + ), + "python3", + "sconsmodular", + "sconsrecursiveglob", + "ccache", + ], + TEMPFILE=TempFileMunge, + MAXLINELENGTH=2048, + PROGSUFFIX=".elf", + ENV=forward_os_env, +) + +# If DIST_SUFFIX is set in environment, is has precedence (set by CI) +if os_suffix := os.environ.get("DIST_SUFFIX", None): + coreenv.Replace( + DIST_SUFFIX=os_suffix, + ) + +# print(coreenv.Dump()) +if not coreenv["VERBOSE"]: + coreenv.SetDefault( + CCCOMSTR="\tCC\t${SOURCE}", + CXXCOMSTR="\tCPP\t${SOURCE}", + ASCOMSTR="\tASM\t${SOURCE}", + ARCOMSTR="\tAR\t${TARGET}", + RANLIBCOMSTR="\tRANLIB\t${TARGET}", + LINKCOMSTR="\tLINK\t${TARGET}", + INSTALLSTR="\tINSTALL\t${TARGET}", + APPSCOMSTR="\tAPPS\t${TARGET}", + VERSIONCOMSTR="\tVERSION\t${TARGET}", + STRIPCOMSTR="\tSTRIP\t${TARGET}", + OBJDUMPCOMSTR="\tOBJDUMP\t${TARGET}", + # GDBCOMSTR="\tGDB\t${SOURCE}", + # GDBPYCOMSTR="\tGDB-PY\t${SOURCE}", + ) + +# Default value for commandline options + +SetOption("num_jobs", multiprocessing.cpu_count()) +# Avoiding re-scan of all sources on every startup +SetOption("implicit_cache", True) +SetOption("implicit_deps_unchanged", True) +# More aggressive caching +SetOption("max_drift", 1) +# Random task queue - to discover isses with build logic faster +# SetOption("random", 1) + + +# Setting up temp file parameters - to overcome command line length limits +coreenv["TEMPFILEARGESCFUNC"] = util.tempfile_arg_esc_func +util.wrap_tempfile(coreenv, "LINKCOM") +util.wrap_tempfile(coreenv, "ARCOM") + + +Return("coreenv") diff --git a/site_scons/fbt/__init__.py b/site_scons/fbt/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/site_scons/fbt/appmanifest.py b/site_scons/fbt/appmanifest.py new file mode 100644 index 000000000..218b139f3 --- /dev/null +++ b/site_scons/fbt/appmanifest.py @@ -0,0 +1,243 @@ +from dataclasses import dataclass, field +from typing import List, Optional +from enum import Enum +import os + + +class FlipperManifestException(Exception): + pass + + +class FlipperAppType(Enum): + SERVICE = "Service" + SYSTEM = "System" + APP = "App" + PLUGIN = "Plugin" + DEBUG = "Debug" + ARCHIVE = "Archive" + SETTINGS = "Settings" + STARTUP = "StartupHook" + EXTERNAL = "External" + METAPACKAGE = "Package" + + +@dataclass +class FlipperApplication: + appid: str + apptype: FlipperAppType + name: Optional[str] = None + entry_point: Optional[str] = None + flags: List[str] = field(default_factory=lambda: ["Default"]) + cdefines: List[str] = field(default_factory=list) + requires: List[str] = field(default_factory=list) + conflicts: List[str] = field(default_factory=list) + provides: List[str] = field(default_factory=list) + stack_size: int = 2048 + icon: Optional[str] = None + order: int = 0 + _appdir: Optional[str] = None + + +class AppManager: + def __init__(self): + self.known_apps = {} + + def get(self, appname: str): + try: + return self.known_apps[appname] + except KeyError as _: + raise FlipperManifestException( + f"Missing application manifest for '{appname}'" + ) + + def load_manifest(self, app_manifest_path: str, app_dir_name: str): + if not os.path.exists(app_manifest_path): + raise FlipperManifestException( + f"App manifest not found at path {app_manifest_path}" + ) + # print("Loading", app_manifest_path) + + app_manifests = [] + + def App(*args, **kw): + nonlocal app_manifests + app_manifests.append(FlipperApplication(*args, **kw, _appdir=app_dir_name)) + + with open(app_manifest_path, "rt") as manifest_file: + exec(manifest_file.read()) + + if len(app_manifests) == 0: + raise FlipperManifestException( + f"App manifest '{app_manifest_path}' is malformed" + ) + + # print("Built", app_manifests) + for app in app_manifests: + self._add_known_app(app) + + def _add_known_app(self, app: FlipperApplication): + if self.known_apps.get(app.appid, None): + raise FlipperManifestException(f"Duplicate app declaration: {app.appid}") + self.known_apps[app.appid] = app + + def filter_apps(self, applist: List[str]): + return AppBuildset(self, applist) + + +class AppBuilderException(Exception): + pass + + +class AppBuildset: + BUILTIN_APP_TYPES = ( + FlipperAppType.SERVICE, + FlipperAppType.SYSTEM, + FlipperAppType.APP, + FlipperAppType.PLUGIN, + FlipperAppType.DEBUG, + FlipperAppType.ARCHIVE, + FlipperAppType.SETTINGS, + FlipperAppType.STARTUP, + ) + + def __init__(self, appmgr: AppManager, appnames: List[str]): + self.appmgr = appmgr + self.appnames = set(appnames) + self._orig_appnames = appnames + self._process_deps() + self._check_conflicts() + self._check_unsatisfied() # unneeded? + self.apps = sorted( + list(map(self.appmgr.get, self.appnames)), + key=lambda app: app.appid, + ) + + def _is_missing_dep(self, dep_name: str): + return dep_name not in self.appnames + + def _process_deps(self): + while True: + provided = [] + for app in self.appnames: + # print(app) + provided.extend( + filter( + self._is_missing_dep, + self.appmgr.get(app).provides + self.appmgr.get(app).requires, + ) + ) + # print("provides round", provided) + if len(provided) == 0: + break + self.appnames.update(provided) + + def _check_conflicts(self): + conflicts = [] + for app in self.appnames: + # print(app) + if conflict_app_name := list( + filter( + lambda dep_name: dep_name in self.appnames, + self.appmgr.get(app).conflicts, + ) + ): + conflicts.append((app, conflict_app_name)) + + if len(conflicts): + raise AppBuilderException( + f"App conflicts for {', '.join(f'{conflict_dep[0]}: {conflict_dep[1]}' for conflict_dep in conflicts)}" + ) + + def _check_unsatisfied(self): + unsatisfied = [] + for app in self.appnames: + if missing_dep := list( + filter(self._is_missing_dep, self.appmgr.get(app).requires) + ): + unsatisfied.append((app, missing_dep)) + + if len(unsatisfied): + raise AppBuilderException( + f"Unsatisfied dependencies for {', '.join(f'{missing_dep[0]}: {missing_dep[1]}' for missing_dep in unsatisfied)}" + ) + + def get_apps_cdefs(self): + cdefs = set() + for app in self.apps: + cdefs.update(app.cdefines) + return sorted(list(cdefs)) + + def get_apps_of_type(self, apptype: FlipperAppType): + return sorted( + filter(lambda app: app.apptype == apptype, self.apps), + key=lambda app: app.order, + ) + + def get_builtin_app_folders(self): + return sorted( + set( + app._appdir + for app in filter( + lambda app: app.apptype in self.BUILTIN_APP_TYPES, self.apps + ) + ) + ) + + +class ApplicationsCGenerator: + APP_TYPE_MAP = { + FlipperAppType.SERVICE: ("FlipperApplication", "FLIPPER_SERVICES"), + FlipperAppType.SYSTEM: ("FlipperApplication", "FLIPPER_SYSTEM_APPS"), + FlipperAppType.APP: ("FlipperApplication", "FLIPPER_APPS"), + FlipperAppType.PLUGIN: ("FlipperApplication", "FLIPPER_PLUGINS"), + FlipperAppType.DEBUG: ("FlipperApplication", "FLIPPER_DEBUG_APPS"), + FlipperAppType.SETTINGS: ("FlipperApplication", "FLIPPER_SETTINGS_APPS"), + FlipperAppType.STARTUP: ("FlipperOnStartHook", "FLIPPER_ON_SYSTEM_START"), + } + + def __init__(self, buildset: AppBuildset): + self.buildset = buildset + + def get_app_ep_forward(self, app: FlipperApplication): + if app.apptype == FlipperAppType.STARTUP: + return f"extern void {app.entry_point}();" + return f"extern int32_t {app.entry_point}(void* p);" + + def get_app_descr(self, app: FlipperApplication): + if app.apptype == FlipperAppType.STARTUP: + return app.entry_point + return f""" + {{.app = {app.entry_point}, + .name = "{app.name}", + .stack_size = {app.stack_size}, + .icon = {f"&{app.icon}" if app.icon else "NULL"}, + .flags = {'|'.join(f"FlipperApplicationFlag{flag}" for flag in app.flags)} }}""" + + def generate(self): + contents = ['#include "applications.h"', "#include "] + for apptype in self.APP_TYPE_MAP: + contents.extend( + map(self.get_app_ep_forward, self.buildset.get_apps_of_type(apptype)) + ) + entry_type, entry_block = self.APP_TYPE_MAP[apptype] + contents.append(f"const {entry_type} {entry_block}[] = {{") + contents.append( + ",\n".join( + map(self.get_app_descr, self.buildset.get_apps_of_type(apptype)) + ) + ) + contents.append("};") + contents.append( + f"const size_t {entry_block}_COUNT = COUNT_OF({entry_block});" + ) + + archive_app = self.buildset.get_apps_of_type(FlipperAppType.ARCHIVE) + if archive_app: + contents.extend( + [ + self.get_app_ep_forward(archive_app[0]), + f"const FlipperApplication FLIPPER_ARCHIVE = {self.get_app_descr(archive_app[0])};", + ] + ) + + return "\n".join(contents) diff --git a/site_scons/fbt/util.py b/site_scons/fbt/util.py new file mode 100644 index 000000000..9de24a9aa --- /dev/null +++ b/site_scons/fbt/util.py @@ -0,0 +1,19 @@ +import SCons +from SCons.Subst import quote_spaces + +import re + + +WINPATHSEP_RE = re.compile(r"\\([^\"'\\]|$)") + + +def tempfile_arg_esc_func(arg): + arg = quote_spaces(arg) + if SCons.Platform.platform_default() != "win32": + return arg + # GCC requires double Windows slashes, let's use UNIX separator + return WINPATHSEP_RE.sub(r"/\1", arg) + + +def wrap_tempfile(env, command): + env[command] = '${TEMPFILE("' + env[command] + '","$' + command + 'STR")}' diff --git a/site_scons/fbt/version.py b/site_scons/fbt/version.py new file mode 100644 index 000000000..4745c7002 --- /dev/null +++ b/site_scons/fbt/version.py @@ -0,0 +1,23 @@ +import subprocess +import datetime + + +def get_fast_git_version_id(): + try: + version = ( + subprocess.check_output( + [ + "git", + "describe", + "--always", + "--dirty", + "--all", + "--long", + ] + ) + .strip() + .decode() + ) + return (version, datetime.date.today()) + except Exception as e: + print("Failed to check for git changes", e) diff --git a/site_scons/firmwareopts.scons b/site_scons/firmwareopts.scons new file mode 100644 index 000000000..f04b55cdd --- /dev/null +++ b/site_scons/firmwareopts.scons @@ -0,0 +1,50 @@ +Import("ENV") + + +if ENV["DEBUG"]: + ENV.Append( + CPPDEFINES=[ + "FURI_DEBUG", + "NDEBUG", + ], + CCFLAGS=[ + "-Og", + ], + ) +elif ENV["COMPACT"]: + ENV.Append( + CPPDEFINES=[ + "FURI_NDEBUG", + "NDEBUG", + ], + CCFLAGS=[ + "-Os", + ], + ) +else: + ENV.Append( + CPPDEFINES=[ + "FURI_NDEBUG", + "NDEBUG", + ], + CCFLAGS=[ + "-Og", + ], + ) + +ENV.Append( + LINKFLAGS=[ + "-Tfirmware/targets/f${TARGET_HW}/${LINKER_SCRIPT}.ld", + ], +) + +if ENV["FIRMWARE_BUILD_CFG"] == "updater": + ENV.Append( + IMAGE_BASE_ADDRESS="0x20000000", + LINKER_SCRIPT="stm32wb55xx_ram_fw", + ) +else: + ENV.Append( + IMAGE_BASE_ADDRESS="0x8000000", + LINKER_SCRIPT="stm32wb55xx_flash", + ) diff --git a/site_scons/site_init.py b/site_scons/site_init.py new file mode 100644 index 000000000..817269e28 --- /dev/null +++ b/site_scons/site_init.py @@ -0,0 +1,40 @@ +from SCons.Script import GetBuildFailures + +import sys +import os +import atexit + +sys.path.insert(0, os.path.join(os.getcwd(), "scripts")) + + +def bf_to_str(bf): + """Convert an element of GetBuildFailures() to a string + in a useful way.""" + import SCons.Errors + + if bf is None: # unknown targets product None in list + return "(unknown tgt)" + elif isinstance(bf, SCons.Errors.StopError): + return str(bf) + elif bf.node: + return str(bf.node) + ": " + bf.errstr + elif bf.filename: + return bf.filename + ": " + bf.errstr + return "unknown failure: " + bf.errstr + + +def display_build_status(): + """Display the build status. Called by atexit. + Here you could do all kinds of complicated things.""" + bf = GetBuildFailures() + if bf: + # bf is normally a list of build failures; if an element is None, + # it's because of a target that scons doesn't know anything about. + failures_message = "\n".join( + ["Failed building %s" % bf_to_str(x) for x in bf if x is not None] + ) + print("*" * 10, "ERRORS", "*" * 10) + print(failures_message) + + +atexit.register(display_build_status) diff --git a/site_scons/site_tools/ccache.py b/site_scons/site_tools/ccache.py new file mode 100644 index 000000000..e88886ade --- /dev/null +++ b/site_scons/site_tools/ccache.py @@ -0,0 +1,14 @@ +def exists(): + return True + + +def generate(env): + if ccache := env.WhereIs("ccache"): + env["CCACHE"] = "ccache" + env["CC_NOCACHE"] = env["CC"] + env["CC"] = "$CCACHE $CC_NOCACHE" + # Tricky place: linking is done with CXX + # Using ccache breaks it + env["LINK"] = env["CXX"] + env["CXX_NOCACHE"] = env["CXX"] + env["CXX"] = "$CCACHE $CXX_NOCACHE" diff --git a/site_scons/site_tools/crosscc.py b/site_scons/site_tools/crosscc.py new file mode 100644 index 000000000..0770df716 --- /dev/null +++ b/site_scons/site_tools/crosscc.py @@ -0,0 +1,72 @@ +from SCons.Tool import asm +from SCons.Tool import gcc +from SCons.Tool import gxx +from SCons.Tool import ar +from SCons.Tool import gnulink +import strip +import gdb +import objdump + +from SCons.Action import _subproc +import subprocess + + +def prefix_commands(env, command_prefix, cmd_list): + for command in cmd_list: + if command in env: + env[command] = command_prefix + env[command] + + +def _get_tool_version(env, tool): + verstr = "version unknown" + proc = _subproc( + env, + env.subst("${%s} --version" % tool), + stdout=subprocess.PIPE, + stderr="devnull", + stdin="devnull", + universal_newlines=True, + error="raise", + shell=True, + ) + if proc: + verstr = proc.stdout.readline() + proc.communicate() + return verstr + + +def generate(env, **kw): + for orig_tool in (asm, gcc, gxx, ar, gnulink, strip, gdb, objdump): + orig_tool.generate(env) + env.SetDefault( + TOOLCHAIN_PREFIX=kw.get("toolchain_prefix"), + ) + prefix_commands( + env, + env.subst("$TOOLCHAIN_PREFIX"), + [ + "AR", + "AS", + "CC", + "CXX", + "OBJCOPY", + "RANLIB", + "STRIP", + "GDB", + "GDBPY", + "OBJDUMP", + ], + ) + # Call CC to check version + if whitelisted_versions := kw.get("versions", ()): + cc_version = _get_tool_version(env, "CC") + # print("CC version =", cc_version) + # print(list(filter(lambda v: v in cc_version, whitelisted_versions))) + if not any(filter(lambda v: v in cc_version, whitelisted_versions)): + raise Exception( + f"Toolchain version is not supported. Allowed: {whitelisted_versions}, toolchain: {cc_version} " + ) + + +def exists(env): + return True diff --git a/site_scons/site_tools/fbt_apps.py b/site_scons/site_tools/fbt_apps.py new file mode 100644 index 000000000..cbeae2d0a --- /dev/null +++ b/site_scons/site_tools/fbt_apps.py @@ -0,0 +1,61 @@ +from SCons.Builder import Builder +from SCons.Action import Action + +import SCons +from fbt.appmanifest import FlipperAppType, AppManager, ApplicationsCGenerator + +# Adding objects for application management to env +# AppManager env["APPMGR"] - loads all manifests; manages list of known apps +# AppBuildset env["APPBUILD"] - contains subset of apps, filtered for current config + + +def LoadApplicationManifests(env): + appmgr = env["APPMGR"] = AppManager() + for entry in env.Glob("#/applications/*"): + if isinstance(entry, SCons.Node.FS.Dir) and not str(entry).startswith("."): + appmgr.load_manifest(entry.File("application.fam").abspath, entry.name) + + +def PrepareApplicationsBuild(env): + env["APPBUILD"] = env["APPMGR"].filter_apps(env["APPS"]) + env["APPBUILD_DUMP"] = env.Action( + DumpApplicationConfig, + "\tINFO\t", + ) + + +def DumpApplicationConfig(target, source, env): + print(f"Loaded {len(env['APPMGR'].known_apps)} app definitions.") + print("Firmware modules configuration:") + for apptype in FlipperAppType: + app_sublist = env["APPBUILD"].get_apps_of_type(apptype) + if app_sublist: + print( + f"{apptype.value}:\n\t", + ", ".join(app.appid for app in app_sublist), + ) + + +def build_apps_c(target, source, env): + target_file_name = target[0].path + + gen = ApplicationsCGenerator(env["APPBUILD"]) + with open(target_file_name, "w") as file: + file.write(gen.generate()) + + +def generate(env): + env.AddMethod(LoadApplicationManifests) + env.AddMethod(PrepareApplicationsBuild) + + env.Append( + BUILDERS={ + "ApplicationsC": Builder( + action=Action(build_apps_c, "${APPSCOMSTR}"), + ), + } + ) + + +def exists(env): + return True diff --git a/site_scons/site_tools/fbt_assets.py b/site_scons/site_tools/fbt_assets.py new file mode 100644 index 000000000..0c2ce6f79 --- /dev/null +++ b/site_scons/site_tools/fbt_assets.py @@ -0,0 +1,151 @@ +import SCons + +from SCons.Builder import Builder +from SCons.Action import Action +from SCons.Node.FS import File + +import os +import subprocess + + +def icons_emitter(target, source, env): + target = [ + "compiled/assets_icons.c", + "compiled/assets_icons.h", + ] + return target, source + + +def proto_emitter(target, source, env): + out_path = target[0].path + target = [] + for src in source: + basename = os.path.splitext(src.name)[0] + target.append(env.File(f"compiled/{basename}.pb.c")) + target.append(env.File(f"compiled/{basename}.pb.h")) + return target, source + + +def dolphin_emitter(target, source, env): + res_root_dir = source[0].Dir(env["DOLPHIN_RES_TYPE"]) + source = [res_root_dir] + source.extend( + env.GlobRecursive("*.*", res_root_dir), + ) + + target_base_dir = target[0] + env.Replace(_DOLPHIN_OUT_DIR=target[0]) + + if env["DOLPHIN_RES_TYPE"] == "external": + target = [] + target.extend( + map( + lambda node: target_base_dir.File( + res_root_dir.rel_path(node).replace(".png", ".bm") + ), + filter(lambda node: isinstance(node, SCons.Node.FS.File), source), + ) + ) + else: + asset_basename = f"assets_dolphin_{env['DOLPHIN_RES_TYPE']}" + target = [ + target_base_dir.File(asset_basename + ".c"), + target_base_dir.File(asset_basename + ".h"), + ] + + return target, source + + +def _invoke_git(args, source_dir): + cmd = ["git"] + cmd.extend(args) + return ( + subprocess.check_output(cmd, cwd=source_dir, stderr=subprocess.STDOUT) + .strip() + .decode() + ) + + +def proto_ver_generator(target, source, env): + target_file = target[0] + src_dir = source[0].dir.abspath + try: + git_fetch = _invoke_git( + ["fetch", "--tags"], + source_dir=src_dir, + ) + except (subprocess.CalledProcessError, EnvironmentError) as e: + # Not great, not terrible + print("Git: fetch failed") + + try: + git_describe = _invoke_git( + ["describe", "--tags", "--abbrev=0"], + source_dir=src_dir, + ) + except (subprocess.CalledProcessError, EnvironmentError) as e: + print("Git: describe failed") + Exit("git error") + + # print("describe=", git_describe) + git_major, git_minor = git_describe.split(".") + version_file_data = ( + "#pragma once", + f"#define PROTOBUF_MAJOR_VERSION {git_major}", + f"#define PROTOBUF_MINOR_VERSION {git_minor}", + "", + ) + with open(str(target_file), "wt") as file: + file.write("\n".join(version_file_data)) + + +def generate(env): + env.SetDefault( + ASSETS_COMPILER="${ROOT_DIR.abspath}/scripts/assets.py", + NANOPB_COMPILER="${ROOT_DIR.abspath}/lib/nanopb/generator/nanopb_generator.py", + ) + + env.Append( + BUILDERS={ + "IconBuilder": Builder( + action=Action( + "${PYTHON3} ${ASSETS_COMPILER} icons ${SOURCE.posix} ${TARGET.dir.posix}", + "${ICONSCOMSTR}", + ), + emitter=icons_emitter, + ), + "ProtoBuilder": Builder( + action=Action( + "${PYTHON3} ${NANOPB_COMPILER} -q -I${SOURCE.dir.posix} -D${TARGET.dir.posix} ${SOURCES.posix}", + "${PROTOCOMSTR}", + ), + emitter=proto_emitter, + suffix=".pb.c", + src_suffix=".proto", + ), + "DolphinSymBuilder": Builder( + action=Action( + '${PYTHON3} ${ASSETS_COMPILER} dolphin -s dolphin_${DOLPHIN_RES_TYPE} "${SOURCE}" "${_DOLPHIN_OUT_DIR}"', + "${DOLPHINCOMSTR}", + ), + emitter=dolphin_emitter, + ), + "DolphinExtBuilder": Builder( + action=Action( + '${PYTHON3} ${ASSETS_COMPILER} dolphin "${SOURCE}" "${_DOLPHIN_OUT_DIR}"', + "${DOLPHINCOMSTR}", + ), + emitter=dolphin_emitter, + ), + "ProtoVerBuilder": Builder( + action=Action( + proto_ver_generator, + "${PBVERCOMSTR}", + ), + ), + } + ) + + +def exists(env): + return True diff --git a/site_scons/site_tools/fbt_dist.py b/site_scons/site_tools/fbt_dist.py new file mode 100644 index 000000000..c39f72425 --- /dev/null +++ b/site_scons/site_tools/fbt_dist.py @@ -0,0 +1,104 @@ +from SCons.Builder import Builder +from SCons.Action import Action +from SCons.Script import Mkdir + + +def get_variant_dirname(env, project=None): + parts = [f"f{env['TARGET_HW']}"] + if project: + parts.append(project) + + suffix = "" + if env["DEBUG"]: + suffix += "D" + if env["COMPACT"]: + suffix += "C" + if suffix: + parts.append(suffix) + + return "-".join(parts) + + +def create_fw_build_targets(env, configuration_name): + flavor = get_variant_dirname(env, configuration_name) + build_dir = env.Dir("build").Dir(flavor).abspath + return env.SConscript( + "firmware.scons", + variant_dir=build_dir, + duplicate=0, + exports={ + "ENV": env, + "fw_build_meta": { + "type": configuration_name, + "flavor": flavor, + "build_dir": build_dir, + }, + }, + ) + + +def AddFwProject(env, base_env, fw_type, fw_env_key): + project_env = env[fw_env_key] = create_fw_build_targets(base_env, fw_type) + env.Append( + DIST_PROJECTS=[ + project_env["FW_FLAVOR"], + ], + DIST_DEPENDS=[ + project_env["FW_ARTIFACTS"], + ], + ) + return project_env + + +def AddDebugTarget(env, targetenv, force_flash=True): + pseudo_name = f"debug.{targetenv.subst('$FIRMWARE_BUILD_CFG')}.pseudo" + debug_target = env.GDBPy( + pseudo_name, + targetenv["FW_ELF"], + GDBPYOPTS='-ex "source debug/FreeRTOS/FreeRTOS.py" ' + '-ex "source debug/PyCortexMDebug/PyCortexMDebug.py" ' + '-ex "svd_load ${SVD_FILE}" ' + '-ex "compare-sections"', + ) + if force_flash: + env.Depends(debug_target, targetenv["FW_FLASH"]) + env.Pseudo(pseudo_name) + env.AlwaysBuild(debug_target) + return debug_target + + +def generate(env): + env.AddMethod(AddFwProject) + env.AddMethod(AddDebugTarget) + env.SetDefault( + COPRO_MCU_FAMILY="STM32WB5x", + ) + env.Append( + BUILDERS={ + "DistBuilder": Builder( + action=Action( + '${PYTHON3} ${ROOT_DIR.abspath}/scripts/sconsdist.py copy -p ${DIST_PROJECTS} -s "${DIST_SUFFIX}" ${DIST_EXTRA}', + "${DISTCOMSTR}", + ), + ), + "CoproBuilder": Builder( + action=Action( + [ + Mkdir("$TARGET"), + "${PYTHON3} ${ROOT_DIR.abspath}/scripts/assets.py " + "copro ${COPRO_CUBE_DIR} " + "${TARGET} ${COPRO_MCU_FAMILY} " + "--cube_ver=${COPRO_CUBE_VERSION} " + "--stack_type=${COPRO_STACK_TYPE} " + '--stack_file="${COPRO_STACK_BIN}" ' + "--stack_addr=${COPRO_STACK_ADDR} ", + ], + "", + ) + ), + } + ) + + +def exists(env): + return True diff --git a/site_scons/site_tools/fbt_extapps.py b/site_scons/site_tools/fbt_extapps.py new file mode 100644 index 000000000..17c4bf6c5 --- /dev/null +++ b/site_scons/site_tools/fbt_extapps.py @@ -0,0 +1,30 @@ +import os + + +def BuildAppElf(env, app): + work_dir = env.subst("$EXT_APPS_WORK_DIR") + app_target_name = os.path.join(work_dir, app.appid) + app_alias = f"{env['FIRMWARE_BUILD_CFG']}_{app.appid}" + app_elf = env.Program( + app_target_name, + env.GlobRecursive("*.c*", os.path.join(work_dir, app._appdir)), + APP_ENTRY=app.entry_point, + ) + app_elf_dump = env.ObjDump(app_target_name) + env.Alias(f"{app_alias}_list", app_elf_dump) + + app_stripped_elf = env.ELFStripper( + os.path.join(env.subst("$PLUGIN_ELF_DIR"), app.appid), app_elf + ) + env.Alias(app_alias, app_stripped_elf) + return app_stripped_elf + + +def generate(env, **kw): + env.SetDefault(EXT_APPS_WORK_DIR=kw.get("EXT_APPS_WORK_DIR", ".extapps")) + env.VariantDir(env.subst("$EXT_APPS_WORK_DIR"), ".", duplicate=False) + env.AddMethod(BuildAppElf) + + +def exists(env): + return True diff --git a/site_scons/site_tools/fbt_version.py b/site_scons/site_tools/fbt_version.py new file mode 100644 index 000000000..5073c55d9 --- /dev/null +++ b/site_scons/site_tools/fbt_version.py @@ -0,0 +1,29 @@ +from SCons.Builder import Builder +from SCons.Action import Action + + +def version_emitter(target, source, env): + target_dir = target[0] + target = [ + target_dir.File("version.inc.h"), + target_dir.File("version.json"), + ] + return target, source + + +def generate(env): + env.Append( + BUILDERS={ + "VersionBuilder": Builder( + action=Action( + "${PYTHON3} ${ROOT_DIR.abspath}/scripts/version.py generate -t ${TARGET_HW} -o ${TARGET.dir.posix} --dir ${ROOT_DIR}", + "${VERSIONCOMSTR}", + ), + emitter=version_emitter, + ), + } + ) + + +def exists(env): + return True diff --git a/site_scons/site_tools/fwbin.py b/site_scons/site_tools/fwbin.py new file mode 100644 index 000000000..848571e34 --- /dev/null +++ b/site_scons/site_tools/fwbin.py @@ -0,0 +1,52 @@ +from SCons.Builder import Builder +from SCons.Action import Action +import SCons + +__OBJCOPY_ARM_BIN = "arm-none-eabi-objcopy" + + +def generate(env): + env.SetDefault( + BIN2DFU="${ROOT_DIR.abspath}/scripts/bin2dfu.py", + OBJCOPY=__OBJCOPY_ARM_BIN, # FIXME + ) + env.Append( + BUILDERS={ + "HEXBuilder": Builder( + action=Action( + '${OBJCOPY} -O ihex "${SOURCE}" "${TARGET}"', + "${HEXCOMSTR}", + ), + suffix=".hex", + src_suffix=".elf", + ), + "BINBuilder": Builder( + action=Action( + '${OBJCOPY} -O binary -S "${SOURCE}" "${TARGET}"', + "${BINCOMSTR}", + ), + suffix=".bin", + src_suffix=".elf", + ), + "DFUBuilder": Builder( + action=Action( + '${PYTHON3} ${BIN2DFU} -i "${SOURCE}" -o "${TARGET}" -a ${IMAGE_BASE_ADDRESS} -l "Flipper Zero F${TARGET_HW}"', + "${DFUCOMSTR}", + ), + suffix=".dfu", + src_suffix=".bin", + ), + } + ) + + +def exists(env): + try: + return env["OBJCOPY"] + except KeyError: + pass + + if objcopy := env.WhereIs(__OBJCOPY_ARM_BIN): + return objcopy + + raise SCons.Errors.StopError("Could not detect objcopy for arm") diff --git a/site_scons/site_tools/gdb.py b/site_scons/site_tools/gdb.py new file mode 100644 index 000000000..e7b6bdd68 --- /dev/null +++ b/site_scons/site_tools/gdb.py @@ -0,0 +1,33 @@ +from SCons.Builder import Builder +from SCons.Action import Action + + +def generate(env): + env.SetDefault( + GDB="gdb", + GDBPY="gdb-py", + GDBOPTS="", + GDBPYOPTS="", + GDBCOM="$GDB $GDBOPTS $SOURCES", # no $TARGET + GDBPYCOM="$GDBPY $GDBOPTS $GDBPYOPTS $SOURCES", # no $TARGET + ) + env.Append( + BUILDERS={ + "GDB": Builder( + action=Action( + "${GDBCOM}", + "${GDBCOMSTR}", + ), + ), + "GDBPy": Builder( + action=Action( + "${GDBPYCOM}", + "${GDBPYCOMSTR}", + ), + ), + } + ) + + +def exists(env): + return True diff --git a/site_scons/site_tools/objdump.py b/site_scons/site_tools/objdump.py new file mode 100644 index 000000000..f5fa938a7 --- /dev/null +++ b/site_scons/site_tools/objdump.py @@ -0,0 +1,26 @@ +from SCons.Builder import Builder +from SCons.Action import Action + + +def generate(env): + env.SetDefault( + OBJDUMP="objdump", + OBJDUMPFLAGS=[], + OBJDUMPCOM="$OBJDUMP $OBJDUMPFLAGS -S $SOURCES > $TARGET", + ) + env.Append( + BUILDERS={ + "ObjDump": Builder( + action=Action( + "${OBJDUMPCOM}", + "${OBJDUMPCOMSTR}", + ), + suffix=".lst", + src_suffix=".elf", + ), + } + ) + + +def exists(env): + return True diff --git a/site_scons/site_tools/openocd.py b/site_scons/site_tools/openocd.py new file mode 100644 index 000000000..135e1100a --- /dev/null +++ b/site_scons/site_tools/openocd.py @@ -0,0 +1,48 @@ +from SCons.Builder import Builder +from SCons.Action import Action +from SCons.Defaults import Touch +import SCons + +__OPENOCD_BIN = "openocd" + +_oocd_action = Action( + "${OPENOCD} ${OPENOCD_OPTS} ${OPENOCD_COMMAND}", + "${OOCDCOMSTR}", +) + + +def generate(env): + env.SetDefault( + OPENOCD=__OPENOCD_BIN, + OPENOCD_OPTS="", + OPENOCD_COMMAND="", + OOCDCOMSTR="", + ) + + env.Append( + BUILDERS={ + "OOCDFlashCommand": Builder( + action=[ + _oocd_action, + Touch("${TARGET}"), + ], + suffix=".flash", + src_suffix=".bin", + ), + "OOCDCommand": Builder( + action=_oocd_action, + ), + } + ) + + +def exists(env): + try: + return env["OPENOCD"] + except KeyError: + pass + + if openocd := env.WhereIs(__OPENOCD_BIN): + return openocd + + raise SCons.Errors.StopError("Could not detect openocd") diff --git a/site_scons/site_tools/python3.py b/site_scons/site_tools/python3.py new file mode 100644 index 000000000..8ac5490dd --- /dev/null +++ b/site_scons/site_tools/python3.py @@ -0,0 +1,13 @@ +def generate(env): + py_name = "python3" + if env["PLATFORM"] == "win32": + # On Windows, Python 3 executable is usually just "python" + py_name = "python" + + env.SetDefault( + PYTHON3=py_name, + ) + + +def exists(env): + return True diff --git a/site_scons/site_tools/sconsmodular.py b/site_scons/site_tools/sconsmodular.py new file mode 100644 index 000000000..eeb900229 --- /dev/null +++ b/site_scons/site_tools/sconsmodular.py @@ -0,0 +1,38 @@ +import posixpath +import os + + +def BuildModule(env, module): + src_dir = str(env.Dir(".").srcdir or os.getcwd()) + module_sconscript = posixpath.join(src_dir, module, "SConscript") + if not os.path.exists(module_sconscript): + module_sconscript = posixpath.join(src_dir, f"{module}.scons") + if not os.path.exists(module_sconscript): + print(f"Cannot build module {module}: scons file not found") + Exit(2) + + return env.SConscript( + module_sconscript, + variant_dir=posixpath.join(env.subst("$BUILD_DIR"), module), + duplicate=0, + ) + + +def BuildModules(env, modules): + result = [] + for module in modules: + build_res = env.BuildModule(module) + # print("module ", module, build_res) + if build_res is None: + continue + result.append(build_res) + return result + + +def generate(env): + env.AddMethod(BuildModule) + env.AddMethod(BuildModules) + + +def exists(env): + return True diff --git a/site_scons/site_tools/sconsrecursiveglob.py b/site_scons/site_tools/sconsrecursiveglob.py new file mode 100644 index 000000000..32ff55ea1 --- /dev/null +++ b/site_scons/site_tools/sconsrecursiveglob.py @@ -0,0 +1,25 @@ +import SCons + + +def GlobRecursive(env, pattern, node=".", exclude=None): + results = [] + if isinstance(node, str): + node = env.Dir(node) + for f in node.glob("*", source=True, exclude=exclude): + if isinstance(f, SCons.Node.FS.Dir): + results += env.GlobRecursive(pattern, f, exclude) + results += node.glob( + pattern, + source=True, + exclude=exclude, + ) + # print(f"Glob for {pattern} from {node}: {results}") + return results + + +def generate(env): + env.AddMethod(GlobRecursive) + + +def exists(env): + return True diff --git a/site_scons/site_tools/strip.py b/site_scons/site_tools/strip.py new file mode 100644 index 000000000..053956f22 --- /dev/null +++ b/site_scons/site_tools/strip.py @@ -0,0 +1,26 @@ +from SCons.Builder import Builder +from SCons.Action import Action + + +def generate(env): + env.SetDefault( + STRIP="strip", + STRIPFLAGS=[], + STRIPCOM="$STRIP $STRIPFLAGS $SOURCES -o $TARGET", + ) + env.Append( + BUILDERS={ + "ELFStripper": Builder( + action=Action( + "${STRIPCOM}", + "${STRIPCOMSTR}", + ), + suffix=".elf", + src_suffix=".elf", + ), + } + ) + + +def exists(env): + return True