From c0e7d6e9afd6b3d282aaa058a02fd8764e7a50fe Mon Sep 17 00:00:00 2001 From: highlander Date: Fri, 6 Mar 2026 17:05:26 -0700 Subject: [PATCH 1/4] fix: remove 8 dead ERC-20 tokens from legacy coin table Remove QTUM, BNB, ZIL, GTO, IOST, CMT, MCO, and ODEM from tokens.def. These tokens were listed as ERC-20 entries in the legacy coin table but their contract addresses no longer exist in the generated uniswap_tokens table (they migrated to their own L1 chains or were delisted). This causes Coins.TableSanity unit test to fail because tokenByTicker() finds them in coins[] but tokenByChainAddress() cannot locate them in tokens[], returning UnknownToken. The native chain entries for QTUM, BNB, etc. in coins.def are unaffected (they have has_contract_address=false). Co-Authored-By: Claude Opus 4.6 --- include/keepkey/firmware/tokens.def | 8 -------- 1 file changed, 8 deletions(-) diff --git a/include/keepkey/firmware/tokens.def b/include/keepkey/firmware/tokens.def index a4c6add48..296ad8aae 100644 --- a/include/keepkey/firmware/tokens.def +++ b/include/keepkey/firmware/tokens.def @@ -20,7 +20,6 @@ X(__COUNTER__, Civic, CVC, 8, "\x41\xe5\x56\x00\x54\x82\x4e\xa6\xb0\x73\x2e\x65\ X(__COUNTER__, Metal, MTL, 8, "\xF4\x33\x08\x93\x66\x89\x9D\x83\xa9\xf2\x6A\x77\x3D\x59\xec\x7e\xCF\x30\x35\x5e") X(__COUNTER__, TenX, PAY, 18, "\xB9\x70\x48\x62\x8D\xB6\xB6\x61\xD4\xC2\xaA\x83\x3e\x95\xDb\xe1\xA9\x05\xB2\x80") X(__COUNTER__, FunFair, FUN, 8, "\x41\x9D\x0d\x8B\xdD\x9a\xF5\xe6\x06\xAe\x22\x32\xed\x28\x5A\xff\x19\x0E\x71\x1b") -X(__COUNTER__, Qtum ICO Token, QTUM, 18, "\x9a\x64\x2d\x6b\x33\x68\xdd\xc6\x62\xCA\x24\x4b\xAd\xf3\x2c\xDA\x71\x60\x05\xBC") X(__COUNTER__, district0x, DNT, 18, "\x0a\xbd\xac\xe7\x0d\x37\x90\x23\x5a\xf4\x48\xc8\x85\x47\x60\x3b\x94\x56\x04\xea") X(__COUNTER__, 0x, ZRX, 18, "\xE4\x1d\x24\x89\x57\x1d\x32\x21\x89\x24\x6D\xaF\xA5\xeb\xDe\x1F\x46\x99\xF4\x98") X(__COUNTER__, FirstBlood, 1ST, 18, "\xAf\x30\xD2\xa7\xE9\x0d\x7D\xC3\x61\xc8\xC4\x58\x5e\x9B\xB7\xD2\xF6\xf1\x5b\xc7") @@ -28,23 +27,16 @@ X(__COUNTER__, OmiseGo, OMG, 18, "\xd2\x61\x14\xcd\x6E\xE2\x89\xAc\xcF\x82\x35\x X(__COUNTER__, SALT, SALT, 8, "\x41\x56\xD3\x34\x2D\x5c\x38\x5a\x87\xD2\x64\xF9\x06\x53\x73\x35\x92\x00\x05\x81") X(__COUNTER__, RCN, RCN, 18, "\xf9\x70\xb8\xe3\x6e\x23\xf7\xfc\x3f\xd7\x52\xee\xa8\x6f\x8b\xe8\xd8\x33\x75\xa6") X(__COUNTER__, Storj, STORJ, 8, "\xb6\x4e\xf5\x1c\x88\x89\x72\xc9\x08\xcf\xac\xf5\x9b\x47\xc1\xaf\xbc\x0a\xb8\xac") -X(__COUNTER__, BinanceCoin, BNB, 18, "\xB8\xc7\x74\x82\xe4\x5F\x1F\x44\xdE\x17\x45\xF5\x2C\x74\x42\x6C\x63\x1b\xDD\x52") X(__COUNTER__, Tether, USDT, 6, "\xdA\xC1\x7F\x95\x8D\x2e\xe5\x23\xa2\x20\x62\x06\x99\x45\x97\xC1\x3D\x83\x1e\xc7") X(__COUNTER__, PolyMath, POLY, 18, "\x99\x92\xec\x3c\xf6\xa5\x5b\x00\x97\x8c\xdd\xf2\xb2\x7b\xc6\x88\x2d\x88\xd1\xec") -X(__COUNTER__, Zilliqa, ZIL, 12, "\x05\xf4\xa4\x2e\x25\x1f\x2d\x52\xb8\xed\x15\xe9\xfe\xda\xac\xfc\xef\x1f\xad\x27") X(__COUNTER__, Decentraland, MANA, 18, "\x0f\x5d\x2f\xb2\x9f\xb7\xd3\xcf\xee\x44\x4a\x20\x02\x98\xf4\x68\x90\x8c\xc9\x42") X(__COUNTER__, 0xBitcoin, 0xBTC, 8, "\xb6\xed\x76\x44\xc6\x94\x16\xd6\x7b\x52\x2e\x20\xbc\x29\x4a\x9a\x9b\x40\x5b\x31") -X(__COUNTER__, Gifto, GTO, 5, "\xc5\xbb\xae\x50\x78\x1b\xe1\x66\x93\x06\xb9\xe0\x01\xef\xf5\x7a\x29\x57\xb0\x9d") -X(__COUNTER__, IOSToken, IOST, 18, "\xfa\x1a\x85\x6c\xfa\x34\x09\xcf\xa1\x45\xfa\x4e\x20\xeb\x27\x0d\xf3\xeb\x21\xab") X(__COUNTER__, Aelf, ELF, 18, "\xbf\x21\x79\x85\x9f\xc6\xd5\xbe\xe9\xbf\x91\x58\x63\x2d\xc5\x16\x78\xa4\x10\x0e") X(__COUNTER__, TrueUSD, TUSD, 18, "\x00\x00\x00\x00\x00\x08\x5d\x47\x80\xB7\x31\x19\xb6\x44\xAE\x5e\xcd\x22\xb3\x76") X(__COUNTER__, Aeternity, AE, 18, "\x5c\xa9\xa7\x1b\x1d\x01\x84\x9c\x0a\x95\x49\x0c\xc0\x05\x59\x71\x7f\xcf\x0d\x1d") X(__COUNTER__, Maker, MKR, 18, "\x9f\x8f\x72\xaa\x93\x04\xc8\xb5\x93\xd5\x55\xf1\x2e\xf6\x58\x9c\xc3\xa5\x79\xa2") X(__COUNTER__, Dai, DAI, 18, "\x89\xd2\x4a\x6b\x4c\xcb\x1b\x6f\xaa\x26\x25\xfe\x56\x2b\xdd\x9a\x23\x26\x03\x59") X(__COUNTER__, SpankChain, SPANK, 18, "\x42\xd6\x62\x2d\xec\xe3\x94\xb5\x49\x99\xfb\xd7\x3d\x10\x81\x23\x80\x6f\x6a\x18") -X(__COUNTER__, CyberMiles, CMT, 18, "\xf8\x5f\xee\xa2\xfd\xd8\x1d\x51\x17\x7f\x6b\x8f\x35\xf0\xe6\x73\x4c\xe4\x5f\x5f") -X(__COUNTER__, Crypto.com, MCO, 8, "\xb6\x3b\x60\x6a\xc8\x10\xa5\x2c\xca\x15\xe4\x4b\xb6\x30\xfd\x42\xd8\xd1\xd8\x3d") X(__COUNTER__, Populous, PPT, 8, "\xd4\xfa\x14\x60\xf5\x37\xbb\x90\x85\xd2\x2c\x7b\xcc\xb5\xdd\x45\x0e\xf2\x8e\x3a") -X(__COUNTER__, ODEM, ODEM, 18, "\xbf\x52\xf2\xab\x39\xe2\x6e\x09\x51\xd2\xa0\x2b\x49\xb7\x70\x2a\xbe\x30\x40\x6a") X(__COUNTER__, FOX, FOX, 18, "\xc7\x70\xEE\xfA\xd2\x04\xB5\x18\x0d\xF6\xa1\x4E\xe1\x97\xD9\x9d\x80\x8e\xe5\x2d") #undef X From 4fb6b071d9c09e6ba4acd7fb89cf061ad74fd49a Mon Sep 17 00:00:00 2001 From: highlander Date: Fri, 6 Mar 2026 17:47:02 -0700 Subject: [PATCH 2/4] feat(ci): migrate from CircleCI to GitHub Actions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 4-stage fail-fast pipeline: gate (lint, secrets, submodules) → build (emulator + ARM cross-compile) → test (unit + Python integration) → publish (manual DockerHub push). Downloadable firmware artifacts with version-tagged naming. CircleCI config removed. --- .circleci/config.yml | 65 ------- .github/workflows/ci.yml | 402 +++++++++++++++++++++++++++++++++++++++ deps/python-keepkey | 2 +- 3 files changed, 403 insertions(+), 66 deletions(-) delete mode 100644 .circleci/config.yml create mode 100644 .github/workflows/ci.yml diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 3647c3fd4..000000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,65 +0,0 @@ -version: 2.1 -jobs: - emulator-build-test: - docker: - - image: circleci/python:3.7 - steps: - - checkout - - run: - name: Update Submodules - command: | - git submodule update --init --recursive - - setup_remote_docker - - run: - name: Build Emulator and Run Tests - command: | - pushd ./scripts/emulator - set +e - docker-compose up --build firmware-unit - docker-compose up --build python-keepkey - set -e - mkdir -p ../../test-reports - docker cp "$(docker-compose ps -q firmware-unit)":/kkemu/test-reports/. ../../test-reports/ - docker cp "$(docker-compose ps -q python-keepkey)":/kkemu/test-reports/. ../../test-reports/ - popd - [ "$(cat test-reports/python-keepkey/status)$(cat test-reports/firmware-unit/status)" == "00" ] || exit 1 - - store_test_results: - path: test-reports - - emulator-publish: - docker: - - image: circleci/python:3.7 - steps: - - checkout - - run: - name: Update Submodules - command: | - git submodule update --init --recursive - - setup_remote_docker - - run: - name: Build Emulator - command: | - pushd ./scripts/emulator - docker-compose build kkemu - popd - - run: - name: Publish Emulator - command: | - docker login -u $KK_DOCKERHUB_USER -p $KK_DOCKERHUB_PASS - docker push kktech/kkemu - LATEST_IMAGE_ID=$(docker images | grep -i kktech/kkemu | grep -i latest | awk '{print $3}' ) - FW_VERSION=$(cat ./CMakeLists.txt | tr -d '\n' | awk -v FS="(KeepKeyFirmwareVERSION|LANGUAGES)" '{print $1}' | awk '{print $4}') - docker tag $LATEST_IMAGE_ID kktech/kkemu:v$FW_VERSION - docker push kktech/kkemu - -workflows: - version: 2 - emulator: - jobs: - - emulator-build-test - - emulator-publish: - filters: - branches: - only: master - requires: - - emulator-build-test diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000..e65cd87fc --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,402 @@ +# KeepKey Firmware CI Pipeline +# +# FAIL FAST — quick checks gate everything, no wasted compute. +# +# Stage 1: GATE (seconds, no Docker) +# ├─ lint-format clang-format diff check +# ├─ secret-scan gitleaks credential detection +# └─ check-submodules verify all deps present +# +# Stage 2: BUILD (parallel, gated by Stage 1) +# ├─ build-emulator Docker image → artifact +# └─ build-arm-firmware cross-compile → .bin/.elf (downloadable) +# +# Stage 3: TEST (parallel, gated by Stage 2) +# ├─ unit-tests GoogleTest (make xunit) +# └─ python-integration full test suite +# +# Stage 4: PUBLISH (manual trigger, all tests must pass) +# └─ publish-emulator DockerHub push (workflow_dispatch only) + +name: CI + +on: + push: + branches: [master, develop, 'feature/**', 'fix/**'] + pull_request: + branches: [master, develop] + workflow_dispatch: + inputs: + publish_emulator: + description: 'Publish emulator image to DockerHub' + required: false + type: boolean + default: false + +env: + BASE_IMAGE: kktech/firmware:v15 + EMU_IMAGE: kkemu-ci + +jobs: + # ═══════════════════════════════════════════════════════════ + # STAGE 1: GATE — kill bad PRs in seconds + # ═══════════════════════════════════════════════════════════ + + lint-format: + runs-on: ubuntu-latest + timeout-minutes: 3 + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install clang-format + run: sudo apt-get install -y clang-format-14 + + - name: Check code formatting + run: | + FAILED=0 + for f in $(find include/keepkey lib/firmware lib/board lib/transport/src \ + -name '*.c' -o -name '*.h' 2>/dev/null | grep -v generated | grep -v '.pb.'); do + if ! clang-format-14 --style=file --dry-run --Werror "$f" 2>/dev/null; then + echo "::warning file=$f::Formatting differs from .clang-format" + FAILED=1 + fi + done + if [ "$FAILED" = "1" ]; then + echo "" + echo "Run: clang-format -i to fix formatting" + echo "Note: treating as warning until codebase is reformatted" + fi + # Warn-only until existing code is reformatted + continue-on-error: true + + secret-scan: + runs-on: ubuntu-latest + timeout-minutes: 2 + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Run gitleaks + uses: gitleaks/gitleaks-action@v2 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + check-submodules: + runs-on: ubuntu-latest + timeout-minutes: 2 + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Verify submodules are declared + run: | + echo "Checking required submodule declarations..." + REQUIRED=( + "deps/crypto/trezor-firmware" + "deps/device-protocol" + "deps/python-keepkey" + "deps/googletest" + "deps/qrenc/QR-Code-generator" + "deps/sca-hardening/SecAESSTM32" + ) + FAILED=0 + for sub in "${REQUIRED[@]}"; do + if ! grep -q "$sub" .gitmodules; then + echo "::error::Missing required submodule: $sub" + FAILED=1 + else + echo " ✓ $sub" + fi + done + [ "$FAILED" = "0" ] || exit 1 + + # ═══════════════════════════════════════════════════════════ + # STAGE 2: BUILD — compile only after gate passes + # ═══════════════════════════════════════════════════════════ + + build-emulator: + needs: [check-submodules, secret-scan] + runs-on: ubuntu-latest + timeout-minutes: 15 + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Init submodules + run: | + git submodule update --init deps/crypto/trezor-firmware + git submodule update --init deps/device-protocol + git submodule update --init deps/python-keepkey + git submodule update --init deps/googletest + git submodule update --init deps/qrenc/QR-Code-generator + git submodule update --init deps/sca-hardening/SecAESSTM32 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Cache base image + id: cache-base + uses: actions/cache@v4 + with: + path: /tmp/base-image.tar + key: base-image-${{ env.BASE_IMAGE }} + + - name: Pull and cache base image + if: steps.cache-base.outputs.cache-hit != 'true' + run: | + docker pull ${{ env.BASE_IMAGE }} + docker save ${{ env.BASE_IMAGE }} -o /tmp/base-image.tar + + - name: Load base image from cache + if: steps.cache-base.outputs.cache-hit == 'true' + run: docker load -i /tmp/base-image.tar + + - name: Build emulator image + run: | + docker build \ + -t ${{ env.EMU_IMAGE }} \ + -f scripts/emulator/Dockerfile \ + . + + - name: Save emulator image + run: docker save ${{ env.EMU_IMAGE }} -o /tmp/emu-image.tar + + - name: Upload emulator image artifact + uses: actions/upload-artifact@v4 + with: + name: emu-image + path: /tmp/emu-image.tar + retention-days: 1 + + build-arm-firmware: + needs: [check-submodules, secret-scan] + runs-on: ubuntu-latest + timeout-minutes: 15 + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Init submodules + run: | + git submodule update --init deps/crypto/trezor-firmware + git submodule update --init deps/device-protocol + git submodule update --init deps/python-keepkey + git submodule update --init deps/googletest + git submodule update --init deps/qrenc/QR-Code-generator + git submodule update --init deps/sca-hardening/SecAESSTM32 + + - name: Cache base image + id: cache-base + uses: actions/cache@v4 + with: + path: /tmp/base-image.tar + key: base-image-${{ env.BASE_IMAGE }} + + - name: Pull and cache base image + if: steps.cache-base.outputs.cache-hit != 'true' + run: | + docker pull ${{ env.BASE_IMAGE }} + docker save ${{ env.BASE_IMAGE }} -o /tmp/base-image.tar + + - name: Load base image from cache + if: steps.cache-base.outputs.cache-hit == 'true' + run: docker load -i /tmp/base-image.tar + + - name: Extract firmware version + id: version + run: | + FW_VERSION=$(sed -n '/^project/,/)/p' CMakeLists.txt | grep -oP '\d+\.\d+\.\d+') + GIT_SHORT=$(git rev-parse --short HEAD) + echo "fw_version=${FW_VERSION}" >> "$GITHUB_OUTPUT" + echo "git_short=${GIT_SHORT}" >> "$GITHUB_OUTPUT" + echo "Firmware version: ${FW_VERSION} (${GIT_SHORT})" + + - name: Cross-compile firmware for ARM + run: | + docker run --rm \ + -v ${{ github.workspace }}:/root/keepkey-firmware:z \ + ${{ env.BASE_IMAGE }} /bin/sh -c "\ + mkdir /root/build && cd /root/build && \ + cmake -C /root/keepkey-firmware/cmake/caches/device.cmake /root/keepkey-firmware \ + -DCMAKE_BUILD_TYPE=MinSizeRel \ + -DCMAKE_COLOR_MAKEFILE=ON && \ + make && \ + mkdir -p /root/keepkey-firmware/bin && \ + cp bin/*.bin /root/keepkey-firmware/bin/ && \ + cp bin/*.elf /root/keepkey-firmware/bin/ && \ + chmod -R a+rw /root/keepkey-firmware/bin" + + - name: Rename firmware artifacts + run: | + cd bin + for f in *.bin; do + [ -f "$f" ] || continue + mv "$f" "firmware.keepkey.v${{ steps.version.outputs.fw_version }}-${{ steps.version.outputs.git_short }}-${f}" + done + for f in *.elf; do + [ -f "$f" ] || continue + mv "$f" "firmware.keepkey.v${{ steps.version.outputs.fw_version }}-${{ steps.version.outputs.git_short }}-${f}" + done + ls -lh + echo "::notice::Firmware v${{ steps.version.outputs.fw_version }} built successfully" + + - name: Upload firmware artifacts + uses: actions/upload-artifact@v4 + with: + name: firmware-v${{ steps.version.outputs.fw_version }}-${{ steps.version.outputs.git_short }} + path: | + bin/*.bin + bin/*.elf + retention-days: 90 + + # ═══════════════════════════════════════════════════════════ + # STAGE 3: TEST — run only after builds succeed + # ═══════════════════════════════════════════════════════════ + + unit-tests: + needs: build-emulator + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - name: Download emulator image + uses: actions/download-artifact@v4 + with: + name: emu-image + path: /tmp + + - name: Load emulator image + run: docker load -i /tmp/emu-image.tar + + - name: Run unit tests + run: | + # make xunit returns non-zero if any test fails — capture + # exit code so JUnit XML still gets copied for reporting + docker run --rm \ + -v ${{ github.workspace }}/test-reports:/kkemu/test-reports \ + --entrypoint /bin/sh \ + ${{ env.EMU_IMAGE }} \ + -c "mkdir -p /kkemu/test-reports/firmware-unit && \ + make xunit; RC=\$?; \ + cp -r unittests/*.xml /kkemu/test-reports/firmware-unit/ 2>/dev/null; \ + exit \$RC" + + - name: Upload unit test results + uses: mikepenz/action-junit-report@v4 + if: always() + with: + report_paths: test-reports/firmware-unit/*.xml + check_name: Unit Tests + + python-integration-tests: + needs: build-emulator + runs-on: ubuntu-latest + timeout-minutes: 20 + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Init submodules + run: | + git submodule update --init deps/crypto/trezor-firmware + git submodule update --init deps/device-protocol + git submodule update --init deps/python-keepkey + git submodule update --init deps/googletest + git submodule update --init deps/qrenc/QR-Code-generator + git submodule update --init deps/sca-hardening/SecAESSTM32 + + - name: Download emulator image + uses: actions/download-artifact@v4 + with: + name: emu-image + path: /tmp + + - name: Load emulator image + run: docker load -i /tmp/emu-image.tar + + - name: Tag image for docker compose + run: docker tag ${{ env.EMU_IMAGE }} kktech/kkemu:latest + + - name: Run full test suite + working-directory: scripts/emulator + run: | + docker compose up --build --abort-on-container-exit python-keepkey + + - name: Collect test results + if: always() + working-directory: scripts/emulator + run: | + mkdir -p ${{ github.workspace }}/test-reports/python-keepkey + # docker compose v2 ps only shows running containers; + # use -a to include stopped/exited containers + CID=$(docker compose ps -a -q python-keepkey 2>/dev/null || true) + if [ -n "$CID" ]; then + docker cp "$CID":/kkemu/test-reports/python-keepkey/junit.xml \ + ${{ github.workspace }}/test-reports/python-keepkey/junit.xml || true + docker cp "$CID":/kkemu/test-reports/python-keepkey/status \ + ${{ github.workspace }}/test-reports/python-keepkey/status || true + fi + STATUS=$(cat ${{ github.workspace }}/test-reports/python-keepkey/status 2>/dev/null || echo "1") + echo "Python tests exit status: $STATUS" + [ "$STATUS" = "0" ] || exit 1 + + - name: Upload Python test results + uses: mikepenz/action-junit-report@v4 + if: always() + with: + report_paths: test-reports/python-keepkey/junit.xml + check_name: Python Integration Tests + + - name: Tear down + if: always() + working-directory: scripts/emulator + run: docker compose down -v || true + + # ═══════════════════════════════════════════════════════════ + # STAGE 4: PUBLISH — manual trigger only, all tests must pass + # ═══════════════════════════════════════════════════════════ + + publish-emulator: + needs: [unit-tests, python-integration-tests, build-arm-firmware] + if: >- + github.event_name == 'workflow_dispatch' && + github.event.inputs.publish_emulator == 'true' + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Download emulator image + uses: actions/download-artifact@v4 + with: + name: emu-image + path: /tmp + + - name: Load emulator image + run: docker load -i /tmp/emu-image.tar + + - name: Extract firmware version + id: version + run: | + FW_VERSION=$(sed -n '/^project/,/)/p' CMakeLists.txt | grep -oP '\d+\.\d+\.\d+') + echo "fw_version=${FW_VERSION}" >> "$GITHUB_OUTPUT" + echo "Firmware version: ${FW_VERSION}" + + - name: Tag images for publish + run: | + docker tag ${{ env.EMU_IMAGE }} kktech/kkemu:latest + docker tag ${{ env.EMU_IMAGE }} kktech/kkemu:v${{ steps.version.outputs.fw_version }} + + - name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ secrets.KK_DOCKERHUB_USER }} + password: ${{ secrets.KK_DOCKERHUB_PASS }} + + - name: Push emulator images + run: | + docker push kktech/kkemu:latest + docker push kktech/kkemu:v${{ steps.version.outputs.fw_version }} diff --git a/deps/python-keepkey b/deps/python-keepkey index f1dd2b684..7f0d55fe8 160000 --- a/deps/python-keepkey +++ b/deps/python-keepkey @@ -1 +1 @@ -Subproject commit f1dd2b6847346abe8ea2985b22d688de4911643f +Subproject commit 7f0d55fe8d360d05ecfe10f793139dae6f113ebf From 70b2c693ad1fa3952f9fc134089dc410eca87593 Mon Sep 17 00:00:00 2001 From: highlander Date: Sat, 7 Mar 2026 15:25:05 -0700 Subject: [PATCH 3/4] feat: remove dead white-label variants, add KK_BITCOIN_ONLY cmake option Remove unused variant builds (salt, fox, kaspersky, blockpit, dash) that compiled on every build but are no longer shipped. Add KK_BITCOIN_ONLY cmake option to produce a BTC-only firmware with altcoin sources and crypto excluded. Add parallel CI job for BTC-only ARM cross-compilation. Co-Authored-By: Claude Opus 4.6 --- .github/workflows/ci.yml | 67 +- CMakeLists.txt | 27 +- deps/crypto/CMakeLists.txt | 63 +- fuzzer/firmware/CMakeLists.txt | 1 - include/keepkey/variant/salt.h | 16 - lib/board/variant.c | 3 +- lib/firmware/CMakeLists.txt | 59 +- lib/firmware/fsm.c | 20 + lib/firmware/fsm_msg_common.h | 41 +- lib/firmware/messagemap.def | 23 +- lib/firmware/transaction.c | 7 +- lib/variant/CMakeLists.txt | 4 - lib/variant/salt/logo.c | 317 -------- lib/variant/salt/salt.c | 6 - scripts/load-variant.sh | 2 +- tools/emulator/CMakeLists.txt | 1 - tools/firmware/CMakeLists.txt | 1 - tools/rle-dump/CMakeLists.txt | 1 - tools/variant/CMakeLists.txt | 37 - tools/variant/blockpit.c | 1144 ----------------------------- tools/variant/dash.c | 663 ----------------- tools/variant/fox.c | 787 -------------------- tools/variant/kaspersky.c | 497 ------------- tools/variant/salt.c | 7 - unittests/board/CMakeLists.txt | 1 - unittests/crypto/CMakeLists.txt | 1 - unittests/firmware/CMakeLists.txt | 1 - 27 files changed, 210 insertions(+), 3587 deletions(-) delete mode 100644 include/keepkey/variant/salt.h delete mode 100644 lib/variant/salt/logo.c delete mode 100644 lib/variant/salt/salt.c delete mode 100644 tools/variant/blockpit.c delete mode 100644 tools/variant/dash.c delete mode 100644 tools/variant/fox.c delete mode 100644 tools/variant/kaspersky.c delete mode 100644 tools/variant/salt.c diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e65cd87fc..6e7ed7f9b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -252,6 +252,71 @@ jobs: bin/*.elf retention-days: 90 + build-arm-firmware-btconly: + needs: [check-submodules, secret-scan] + runs-on: ubuntu-latest + timeout-minutes: 15 + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Init submodules + run: | + git submodule update --init deps/crypto/trezor-firmware + git submodule update --init deps/device-protocol + git submodule update --init deps/python-keepkey + git submodule update --init deps/googletest + git submodule update --init deps/qrenc/QR-Code-generator + git submodule update --init deps/sca-hardening/SecAESSTM32 + + - name: Cache base image + id: cache-base + uses: actions/cache@v4 + with: + path: /tmp/base-image.tar + key: base-image-${{ env.BASE_IMAGE }} + + - name: Pull and cache base image + if: steps.cache-base.outputs.cache-hit != 'true' + run: | + docker pull ${{ env.BASE_IMAGE }} + docker save ${{ env.BASE_IMAGE }} -o /tmp/base-image.tar + + - name: Load base image from cache + if: steps.cache-base.outputs.cache-hit == 'true' + run: docker load -i /tmp/base-image.tar + + - name: Extract firmware version + id: version + run: | + FW_VERSION=$(sed -n '/^project/,/)/p' CMakeLists.txt | grep -oP '\d+\.\d+\.\d+') + GIT_SHORT=$(git rev-parse --short HEAD) + echo "fw_version=${FW_VERSION}" >> "$GITHUB_OUTPUT" + echo "git_short=${GIT_SHORT}" >> "$GITHUB_OUTPUT" + echo "Firmware version: ${FW_VERSION}-btconly (${GIT_SHORT})" + + - name: Cross-compile BTC-only firmware + run: | + docker run --rm \ + -v ${{ github.workspace }}:/root/keepkey-firmware:z \ + ${{ env.BASE_IMAGE }} /bin/sh -c "\ + mkdir /root/build && cd /root/build && \ + cmake -C /root/keepkey-firmware/cmake/caches/device.cmake /root/keepkey-firmware \ + -DCMAKE_BUILD_TYPE=MinSizeRel \ + -DKK_BITCOIN_ONLY=ON && \ + make && \ + mkdir -p /root/keepkey-firmware/bin-btconly && \ + cp bin/firmware.keepkey.bin /root/keepkey-firmware/bin-btconly/ && \ + cp bin/firmware.keepkey.elf /root/keepkey-firmware/bin-btconly/ && \ + chmod -R a+rw /root/keepkey-firmware/bin-btconly" + + - name: Upload BTC-only firmware artifacts + uses: actions/upload-artifact@v4 + with: + name: firmware-btconly-v${{ steps.version.outputs.fw_version }}-${{ steps.version.outputs.git_short }} + path: bin-btconly/* + retention-days: 90 + # ═══════════════════════════════════════════════════════════ # STAGE 3: TEST — run only after builds succeed # ═══════════════════════════════════════════════════════════ @@ -359,7 +424,7 @@ jobs: # ═══════════════════════════════════════════════════════════ publish-emulator: - needs: [unit-tests, python-integration-tests, build-arm-firmware] + needs: [unit-tests, python-integration-tests, build-arm-firmware, build-arm-firmware-btconly] if: >- github.event_name == 'workflow_dispatch' && github.event.inputs.publish_emulator == 'true' diff --git a/CMakeLists.txt b/CMakeLists.txt index 3d68c588a..554ebbdd9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,6 +12,7 @@ set(BOOTLOADER_PATCH_VERSION 5) option(KK_EMULATOR "Build the emulator" OFF) option(KK_DEBUG_LINK "Build with debug-link enabled" OFF) option(KK_BUILD_FUZZERS "Build the fuzzers?" OFF) +option(KK_BITCOIN_ONLY "Build Bitcoin-only firmware" OFF) set(LIBOPENCM3_PATH /root/libopencm3 CACHE PATH "Path to an already-built libopencm3") @@ -78,13 +79,25 @@ add_definitions(-DED25519_FORCE_32BIT=1) add_definitions(-DUSE_PRECOMPUTED_CP=0) -add_definitions(-DUSE_ETHEREUM=1) -add_definitions(-DUSE_KECCAK=1) -add_definitions(-DUSE_GRAPHENE=0) -add_definitions(-DUSE_CARDANO=0) -add_definitions(-DUSE_MONERO=0) -add_definitions(-DUSE_NEM=0) -add_definitions(-DUSE_NANO=1) +if(KK_BITCOIN_ONLY) + add_definitions(-DBITCOIN_ONLY=1) + add_definitions(-DUSE_ETHEREUM=0) + add_definitions(-DUSE_KECCAK=1) + add_definitions(-DUSE_GRAPHENE=0) + add_definitions(-DUSE_CARDANO=0) + add_definitions(-DUSE_MONERO=0) + add_definitions(-DUSE_NEM=0) + add_definitions(-DUSE_NANO=0) +else() + add_definitions(-DBITCOIN_ONLY=0) + add_definitions(-DUSE_ETHEREUM=1) + add_definitions(-DUSE_KECCAK=1) + add_definitions(-DUSE_GRAPHENE=0) + add_definitions(-DUSE_CARDANO=0) + add_definitions(-DUSE_MONERO=0) + add_definitions(-DUSE_NEM=0) + add_definitions(-DUSE_NANO=1) +endif() add_definitions(-DRAND_PLATFORM_INDEPENDENT=0) diff --git a/deps/crypto/CMakeLists.txt b/deps/crypto/CMakeLists.txt index cd735668c..1e0055079 100644 --- a/deps/crypto/CMakeLists.txt +++ b/deps/crypto/CMakeLists.txt @@ -1,4 +1,5 @@ -set(sources +# BTC core crypto — always compiled +set(base_sources trezor-firmware/crypto/bip39.c trezor-firmware/crypto/bip39_english.c trezor-firmware/crypto/hmac.c @@ -6,65 +7,48 @@ set(sources trezor-firmware/crypto/sha2.c trezor-firmware/crypto/base32.c trezor-firmware/crypto/hasher.c - #trezor-firmware/crypto/tools/bip39bruteforce.c - #trezor-firmware/crypto/tools/mktable.c - #trezor-firmware/crypto/tools/xpubaddrgen.c trezor-firmware/crypto/rand.c trezor-firmware/crypto/rc4.c trezor-firmware/crypto/blake256.c trezor-firmware/crypto/cash_addr.c trezor-firmware/crypto/curves.c trezor-firmware/crypto/rfc6979.c - trezor-firmware/crypto/ed25519-donna/curve25519-donna-scalarmult-base.c - trezor-firmware/crypto/ed25519-donna/ed25519-donna-32bit-tables.c - trezor-firmware/crypto/ed25519-donna/ed25519.c - trezor-firmware/crypto/ed25519-donna/curve25519-donna-helpers.c - trezor-firmware/crypto/ed25519-donna/ed25519-blake2b.c - trezor-firmware/crypto/ed25519-donna/ed25519-keccak.c - trezor-firmware/crypto/ed25519-donna/ed25519-sha3.c - trezor-firmware/crypto/ed25519-donna/ed25519-donna-basepoint-table.c - trezor-firmware/crypto/ed25519-donna/modm-donna-32bit.c - trezor-firmware/crypto/ed25519-donna/curve25519-donna-32bit.c - trezor-firmware/crypto/ed25519-donna/ed25519-donna-impl-base.c - trezor-firmware/crypto/nem.c - trezor-firmware/crypto/nano.c - #trezor-firmware/crypto/tests/test_check.c - #trezor-firmware/crypto/tests/test_openssl.c - #trezor-firmware/crypto/tests/test_speed.c trezor-firmware/crypto/secp256k1.c trezor-firmware/crypto/bignum.c trezor-firmware/crypto/segwit_addr.c trezor-firmware/crypto/ripemd160.c - trezor-firmware/crypto/groestl.c - trezor-firmware/crypto/nist256p1.c - #trezor-firmware/crypto/monero/serialize.c - #trezor-firmware/crypto/monero/range_proof.c - #trezor-firmware/crypto/monero/xmr.c - #trezor-firmware/crypto/monero/base58.c trezor-firmware/crypto/memzero.c trezor-firmware/crypto/blake2b.c trezor-firmware/crypto/script.c trezor-firmware/crypto/bip32.c trezor-firmware/crypto/address.c trezor-firmware/crypto/blake2s.c - trezor-firmware/crypto/sha3.c trezor-firmware/crypto/base58.c trezor-firmware/crypto/ecdsa.c trezor-firmware/crypto/pbkdf2.c trezor-firmware/crypto/aes/aeskey.c trezor-firmware/crypto/aes/aescrypt.c trezor-firmware/crypto/aes/aes_modes.c - #trezor-firmware/crypto/aes/aestst.c - trezor-firmware/crypto/aes/aestab.c) - - # Clang 5.0 in the docker image (kktech/firmware:v7) is missing - # , which breaks these. Until they're needed, we'll just elide - # them. - #trezor-firmware/crypto/chacha20poly1305/chacha_merged.c - #trezor-firmware/crypto/chacha20poly1305/rfc7539.c - #trezor-firmware/crypto/chacha20poly1305/poly1305-donna.c - #trezor-firmware/crypto/chacha20poly1305/chacha20poly1305.c + trezor-firmware/crypto/aes/aestab.c + trezor-firmware/crypto/groestl.c + trezor-firmware/crypto/sha3.c + trezor-firmware/crypto/nist256p1.c + trezor-firmware/crypto/ed25519-donna/curve25519-donna-scalarmult-base.c + trezor-firmware/crypto/ed25519-donna/ed25519-donna-32bit-tables.c + trezor-firmware/crypto/ed25519-donna/ed25519.c + trezor-firmware/crypto/ed25519-donna/curve25519-donna-helpers.c + trezor-firmware/crypto/ed25519-donna/ed25519-blake2b.c + trezor-firmware/crypto/ed25519-donna/ed25519-keccak.c + trezor-firmware/crypto/ed25519-donna/ed25519-sha3.c + trezor-firmware/crypto/ed25519-donna/ed25519-donna-basepoint-table.c + trezor-firmware/crypto/ed25519-donna/modm-donna-32bit.c + trezor-firmware/crypto/ed25519-donna/curve25519-donna-32bit.c + trezor-firmware/crypto/ed25519-donna/ed25519-donna-impl-base.c) +# Altcoin crypto — skipped in BTC-only builds +set(altcoin_sources + trezor-firmware/crypto/nem.c + trezor-firmware/crypto/nano.c) include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/trezor-firmware/crypto @@ -72,5 +56,10 @@ include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/trezor-firmware/crypto/ed25519-donna ${OPENSSL_INCLUDE_DIR}) +if(KK_BITCOIN_ONLY) + set(sources ${base_sources}) +else() + set(sources ${base_sources} ${altcoin_sources}) +endif() add_library(trezorcrypto ${sources}) diff --git a/fuzzer/firmware/CMakeLists.txt b/fuzzer/firmware/CMakeLists.txt index e38b4f8f5..e61f1fa01 100644 --- a/fuzzer/firmware/CMakeLists.txt +++ b/fuzzer/firmware/CMakeLists.txt @@ -10,7 +10,6 @@ set(libraries kkboard kkboard.keepkey kkvariant.keepkey - kkvariant.salt kkboard kkemulator trezorcrypto diff --git a/include/keepkey/variant/salt.h b/include/keepkey/variant/salt.h deleted file mode 100644 index ad632b650..000000000 --- a/include/keepkey/variant/salt.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef KEEPKEY_VARIANT_SALT_H -#define KEEPKEY_VARIANT_SALT_H - -#include "keepkey/board/variant.h" - -#define VARIANTINFO_SALT \ - .version = 1, .name = "SALT", .logo = &salt_logo, \ - .logo_reversed = &salt_logo_reversed, \ - .screensaver_timeout = ONE_SEC * 60 * 10, .screensaver = &salt_screensaver, - -extern const VariantInfo variant_salt; -extern const VariantAnimation salt_logo; -extern const VariantAnimation salt_logo_reversed; -extern const VariantAnimation salt_screensaver; - -#endif diff --git a/lib/board/variant.c b/lib/board/variant.c index d996858ab..479059b07 100644 --- a/lib/board/variant.c +++ b/lib/board/variant.c @@ -6,7 +6,6 @@ #include "trezor/crypto/ecdsa.h" #include "trezor/crypto/sha2.h" #include "keepkey/variant/keepkey.h" -#include "keepkey/variant/salt.h" #include @@ -118,7 +117,7 @@ const VariantInfo *__attribute__((weak)) variant_getInfo(void) { case MODEL_KEEPKEY: return &variant_keepkey; case MODEL_SALT: - return &variant_salt; + return &variant_keepkey; case MODEL_FOX: return &variant_keepkey; case MODEL_KASPERSKY: diff --git a/lib/firmware/CMakeLists.txt b/lib/firmware/CMakeLists.txt index e08ccfc69..1afc9f428 100644 --- a/lib/firmware/CMakeLists.txt +++ b/lib/firmware/CMakeLists.txt @@ -1,10 +1,24 @@ -set(sources +set(base_sources app_confirm.c app_layout.c - authenticator.c - binance.c coins.c crypto.c + fsm.c + home_sm.c + passphrase_sm.c + pin_sm.c + policy.c + recovery_cipher.c + reset.c + signing.c + storage.c + transaction.c + txin_check.c + u2f.c) + +set(altcoin_sources + authenticator.c + binance.c eip712.c eos.c eos-contracts/eosio.system.c @@ -19,27 +33,15 @@ set(sources ethereum_contracts/zxtransERC20.c ethereum_contracts/zxswap.c ethereum_tokens.c - fsm.c - home_sm.c mayachain.c nano.c osmosis.c - passphrase_sm.c - pin_sm.c - policy.c - recovery_cipher.c - reset.c ripple.c ripple_base58.c - signing.c signtx_tendermint.c - storage.c tendermint.c thorchain.c - tiny-json.c - transaction.c - txin_check.c - u2f.c) + tiny-json.c) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/scm_revision.h.in" "${CMAKE_CURRENT_BINARY_DIR}/scm_revision.h" @ONLY) @@ -50,15 +52,26 @@ include_directories( ${CMAKE_SOURCE_DIR}/lib/firmware ${CMAKE_CURRENT_BINARY_DIR}) +if(KK_BITCOIN_ONLY) + set(sources ${base_sources}) +else() + set(sources ${base_sources} ${altcoin_sources}) +endif() + add_library(kkfirmware ${sources}) -add_dependencies(kkfirmware kktransport.pb trezorcrypto qrcodegenerator ethereum_tokens.def) -set(ETHEREUM_TOKENS ${CMAKE_BINARY_DIR}/include/keepkey/firmware/ethereum_tokens) -set(UNISWAP_TOKENS ${CMAKE_BINARY_DIR}/include/keepkey/firmware/uniswap_tokens) +if(KK_BITCOIN_ONLY) + add_dependencies(kkfirmware kktransport.pb trezorcrypto qrcodegenerator) +else() + add_dependencies(kkfirmware kktransport.pb trezorcrypto qrcodegenerator ethereum_tokens.def) + + set(ETHEREUM_TOKENS ${CMAKE_BINARY_DIR}/include/keepkey/firmware/ethereum_tokens) + set(UNISWAP_TOKENS ${CMAKE_BINARY_DIR}/include/keepkey/firmware/uniswap_tokens) -add_custom_target(ethereum_tokens.def - COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/include/keepkey/firmware - COMMAND python3 ${CMAKE_SOURCE_DIR}/deps/python-keepkey/keepkeylib/eth/ethereum_tokens.py ${ETHEREUM_TOKENS}.def - COMMAND python3 ${CMAKE_SOURCE_DIR}/deps/python-keepkey/keepkeylib/eth/uniswap_tokens.py ${UNISWAP_TOKENS}.def) + add_custom_target(ethereum_tokens.def + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/include/keepkey/firmware + COMMAND python3 ${CMAKE_SOURCE_DIR}/deps/python-keepkey/keepkeylib/eth/ethereum_tokens.py ${ETHEREUM_TOKENS}.def + COMMAND python3 ${CMAKE_SOURCE_DIR}/deps/python-keepkey/keepkeylib/eth/uniswap_tokens.py ${UNISWAP_TOKENS}.def) +endif() add_library(kkfirmware.keepkey variant/keepkey/resources.c) diff --git a/lib/firmware/fsm.c b/lib/firmware/fsm.c index 0d779f448..634a60562 100644 --- a/lib/firmware/fsm.c +++ b/lib/firmware/fsm.c @@ -34,30 +34,44 @@ #include "keepkey/board/variant.h" #include "keepkey/firmware/app_confirm.h" #include "keepkey/firmware/app_layout.h" +#if !BITCOIN_ONLY #include "keepkey/firmware/authenticator.h" +#endif #include "keepkey/firmware/coins.h" +#if !BITCOIN_ONLY #include "keepkey/firmware/cosmos.h" #include "keepkey/firmware/binance.h" +#endif #include "keepkey/firmware/crypto.h" +#if !BITCOIN_ONLY #include "keepkey/firmware/eos.h" #include "keepkey/firmware/eos-contracts.h" #include "keepkey/firmware/ethereum.h" #include "keepkey/firmware/ethereum_tokens.h" +#endif #include "keepkey/firmware/fsm.h" #include "keepkey/firmware/home_sm.h" +#if !BITCOIN_ONLY #include "keepkey/firmware/mayachain.h" #include "keepkey/firmware/osmosis.h" +#endif #include "keepkey/firmware/passphrase_sm.h" #include "keepkey/firmware/pin_sm.h" #include "keepkey/firmware/policy.h" #include "keepkey/firmware/recovery_cipher.h" #include "keepkey/firmware/reset.h" +#if !BITCOIN_ONLY #include "keepkey/firmware/ripple.h" +#endif #include "keepkey/firmware/signing.h" +#if !BITCOIN_ONLY #include "keepkey/firmware/signtx_tendermint.h" +#endif #include "keepkey/firmware/storage.h" +#if !BITCOIN_ONLY #include "keepkey/firmware/tendermint.h" #include "keepkey/firmware/thorchain.h" +#endif #include "keepkey/firmware/transaction.h" #include "keepkey/firmware/txin_check.h" #include "keepkey/firmware/u2f.h" @@ -75,6 +89,7 @@ #include "trezor/crypto/secp256k1.h" #include "messages.pb.h" +#if !BITCOIN_ONLY #include "messages-ethereum.pb.h" #include "messages-binance.pb.h" #include "messages-cosmos.pb.h" @@ -84,6 +99,7 @@ #include "messages-ripple.pb.h" #include "messages-thorchain.pb.h" #include "messages-mayachain.pb.h" +#endif #include @@ -272,10 +288,13 @@ void fsm_msgClearSession(ClearSession *msg) { #include "fsm_msg_common.h" #include "fsm_msg_coin.h" +#if !BITCOIN_ONLY #include "fsm_msg_ethereum.h" #include "fsm_msg_nano.h" +#endif #include "fsm_msg_crypto.h" #include "fsm_msg_debug.h" +#if !BITCOIN_ONLY #include "fsm_msg_eos.h" #include "fsm_msg_cosmos.h" #include "fsm_msg_osmosis.h" @@ -284,3 +303,4 @@ void fsm_msgClearSession(ClearSession *msg) { #include "fsm_msg_tendermint.h" #include "fsm_msg_thorchain.h" #include "fsm_msg_mayachain.h" +#endif diff --git a/lib/firmware/fsm_msg_common.h b/lib/firmware/fsm_msg_common.h index 33cd3e10d..6688125da 100644 --- a/lib/firmware/fsm_msg_common.h +++ b/lib/firmware/fsm_msg_common.h @@ -2,9 +2,11 @@ void fsm_msgInitialize(Initialize *msg) { (void)msg; recovery_cipher_abort(); signing_abort(); +#if !BITCOIN_ONLY ethereum_signing_abort(); tendermint_signAbort(); eos_signingAbort(); +#endif session_clear(false); // do not clear PIN layoutHome(); fsm_msgGetFeatures(0); @@ -130,8 +132,13 @@ void fsm_msgGetCoinTable(GetCoinTable *msg) { resp->chunk_size = sizeof(resp->table) / sizeof(resp->table[0]); if (msg->has_start && msg->has_end) { - if (COINS_COUNT + TOKENS_COUNT <= msg->start || - COINS_COUNT + TOKENS_COUNT < msg->end || msg->end < msg->start || +#if BITCOIN_ONLY + uint32_t total_count = COINS_COUNT; +#else + uint32_t total_count = COINS_COUNT + TOKENS_COUNT; +#endif + if (total_count <= msg->start || + total_count < msg->end || msg->end < msg->start || resp->chunk_size < msg->end - msg->start) { fsm_sendFailure(FailureType_Failure_Other, "Incorrect GetCoinTable parameters"); @@ -141,7 +148,11 @@ void fsm_msgGetCoinTable(GetCoinTable *msg) { } resp->has_num_coins = true; +#if BITCOIN_ONLY + resp->num_coins = COINS_COUNT; +#else resp->num_coins = COINS_COUNT + TOKENS_COUNT; +#endif if (msg->has_start && msg->has_end) { resp->table_count = msg->end - msg->start; @@ -149,9 +160,12 @@ void fsm_msgGetCoinTable(GetCoinTable *msg) { for (size_t i = 0; i < msg->end - msg->start; i++) { if (msg->start + i < COINS_COUNT) { resp->table[i] = coins[msg->start + i]; - } else if (msg->start + i - COINS_COUNT < TOKENS_COUNT) { + } +#if !BITCOIN_ONLY + else if (msg->start + i - COINS_COUNT < TOKENS_COUNT) { coinFromToken(&resp->table[i], &tokens[msg->start + i - COINS_COUNT]); } +#endif } } @@ -186,15 +200,16 @@ void fsm_msgPing(Ping *msg) { flash_setModel(&message); } +#if !BITCOIN_ONLY const char *errMsgStr[NUM_AUTHERRS] = { "noerr", - "Authenticator secret storage full", - "Authenticator secret can't be decoded", - "Account name missing or too long, or seed/message string missing", - "Account not found", + "Authenticator secret storage full", + "Authenticator secret can't be decoded", + "Account name missing or too long, or seed/message string missing", + "Account not found", "Slot request out of range", - "Authenticator secret seed too large", - "passphrase incorrect for authdata", + "Authenticator secret seed too large", + "passphrase incorrect for authdata", "Auth secret unknown error", }; @@ -252,7 +267,7 @@ void fsm_msgPing(Ping *msg) { strcat(resp->message, authSlot); #else resp->has_message = false; - #endif + #endif break; case GETACC: @@ -284,7 +299,9 @@ void fsm_msgPing(Ping *msg) { return; } - } else { + } else +#endif + { if (msg->has_button_protection && msg->button_protection) if (!confirm(ButtonRequestType_ButtonRequest_Ping, "Ping", "%s", @@ -545,9 +562,11 @@ void fsm_msgCancel(Cancel *msg) { (void)msg; recovery_cipher_abort(); signing_abort(); +#if !BITCOIN_ONLY ethereum_signing_abort(); tendermint_signAbort(); eos_signingAbort(); +#endif fsm_sendFailure(FailureType_Failure_ActionCancelled, "Aborted"); } diff --git a/lib/firmware/messagemap.def b/lib/firmware/messagemap.def index e8e374386..c68445e17 100644 --- a/lib/firmware/messagemap.def +++ b/lib/firmware/messagemap.def @@ -33,45 +33,37 @@ MSG_IN(MessageType_MessageType_RecoveryDevice, RecoveryDevice, fsm_msgRecoveryDevice) MSG_IN(MessageType_MessageType_CharacterAck, CharacterAck, fsm_msgCharacterAck) MSG_IN(MessageType_MessageType_ApplyPolicies, ApplyPolicies, fsm_msgApplyPolicies) +#if !BITCOIN_ONLY MSG_IN(MessageType_MessageType_EthereumGetAddress, EthereumGetAddress, fsm_msgEthereumGetAddress) MSG_IN(MessageType_MessageType_EthereumSignTx, EthereumSignTx, fsm_msgEthereumSignTx) MSG_IN(MessageType_MessageType_EthereumTxAck, EthereumTxAck, fsm_msgEthereumTxAck) MSG_IN(MessageType_MessageType_EthereumSignMessage, EthereumSignMessage, fsm_msgEthereumSignMessage) MSG_IN(MessageType_MessageType_EthereumVerifyMessage, EthereumVerifyMessage, fsm_msgEthereumVerifyMessage) - MSG_IN(MessageType_MessageType_EthereumSignTypedHash, EthereumSignTypedHash, fsm_msgEthereumSignTypedHash) - MSG_IN(MessageType_MessageType_Ethereum712TypesValues, Ethereum712TypesValues, fsm_msgEthereum712TypesValues) - MSG_IN(MessageType_MessageType_NanoGetAddress, NanoGetAddress, fsm_msgNanoGetAddress) MSG_IN(MessageType_MessageType_NanoSignTx, NanoSignTx, fsm_msgNanoSignTx) - MSG_IN(MessageType_MessageType_CosmosGetAddress, CosmosGetAddress, fsm_msgCosmosGetAddress) MSG_IN(MessageType_MessageType_CosmosSignTx, CosmosSignTx, fsm_msgCosmosSignTx) MSG_IN(MessageType_MessageType_CosmosMsgAck, CosmosMsgAck, fsm_msgCosmosMsgAck) - MSG_IN(MessageType_MessageType_OsmosisGetAddress, OsmosisGetAddress, fsm_msgOsmosisGetAddress) MSG_IN(MessageType_MessageType_OsmosisSignTx, OsmosisSignTx, fsm_msgOsmosisSignTx) MSG_IN(MessageType_MessageType_OsmosisMsgAck, OsmosisMsgAck, fsm_msgOsmosisMsgAck) - MSG_IN(MessageType_MessageType_BinanceGetAddress, BinanceGetAddress, fsm_msgBinanceGetAddress) MSG_IN(MessageType_MessageType_BinanceSignTx, BinanceSignTx, fsm_msgBinanceSignTx) MSG_IN(MessageType_MessageType_BinanceTransferMsg, BinanceTransferMsg, fsm_msgBinanceTransferMsg) - MSG_IN(MessageType_MessageType_EosGetPublicKey, EosGetPublicKey, fsm_msgEosGetPublicKey) MSG_IN(MessageType_MessageType_EosSignTx, EosSignTx, fsm_msgEosSignTx) MSG_IN(MessageType_MessageType_EosTxActionAck, EosTxActionAck, fsm_msgEosTxActionAck) - MSG_IN(MessageType_MessageType_RippleGetAddress, RippleGetAddress, fsm_msgRippleGetAddress) MSG_IN(MessageType_MessageType_RippleSignTx, RippleSignTx, fsm_msgRippleSignTx) - MSG_IN(MessageType_MessageType_ThorchainGetAddress, ThorchainGetAddress, fsm_msgThorchainGetAddress) MSG_IN(MessageType_MessageType_ThorchainSignTx, ThorchainSignTx, fsm_msgThorchainSignTx) MSG_IN(MessageType_MessageType_ThorchainMsgAck, ThorchainMsgAck, fsm_msgThorchainMsgAck) - MSG_IN(MessageType_MessageType_MayachainGetAddress, MayachainGetAddress, fsm_msgMayachainGetAddress) MSG_IN(MessageType_MessageType_MayachainSignTx, MayachainSignTx, fsm_msgMayachainSignTx) MSG_IN(MessageType_MessageType_MayachainMsgAck, MayachainMsgAck, fsm_msgMayachainMsgAck) +#endif /* Normal Out Messages */ MSG_OUT(MessageType_MessageType_Success, Success, NO_PROCESS_FUNC) @@ -95,42 +87,35 @@ MSG_OUT(MessageType_MessageType_PassphraseRequest, PassphraseRequest, NO_PROCESS_FUNC) MSG_OUT(MessageType_MessageType_WordRequest, WordRequest, NO_PROCESS_FUNC) MSG_OUT(MessageType_MessageType_CharacterRequest, CharacterRequest, NO_PROCESS_FUNC) +#if !BITCOIN_ONLY MSG_OUT(MessageType_MessageType_EthereumAddress, EthereumAddress, NO_PROCESS_FUNC) MSG_OUT(MessageType_MessageType_EthereumTxRequest, EthereumTxRequest, NO_PROCESS_FUNC) MSG_OUT(MessageType_MessageType_EthereumMessageSignature, EthereumMessageSignature, NO_PROCESS_FUNC) - MSG_OUT(MessageType_MessageType_EthereumTypedDataSignature, EthereumTypedDataSignature, NO_PROCESS_FUNC) - MSG_OUT(MessageType_MessageType_NanoAddress, NanoAddress, NO_PROCESS_FUNC) MSG_OUT(MessageType_MessageType_NanoSignedTx, NanoSignedTx, NO_PROCESS_FUNC) - MSG_OUT(MessageType_MessageType_CosmosAddress, CosmosAddress, NO_PROCESS_FUNC) MSG_OUT(MessageType_MessageType_CosmosMsgRequest, CosmosMsgRequest, NO_PROCESS_FUNC) MSG_OUT(MessageType_MessageType_CosmosSignedTx, CosmosSignedTx, NO_PROCESS_FUNC) - MSG_OUT(MessageType_MessageType_OsmosisAddress, OsmosisAddress, NO_PROCESS_FUNC) MSG_OUT(MessageType_MessageType_OsmosisMsgRequest, OsmosisMsgRequest, NO_PROCESS_FUNC) MSG_OUT(MessageType_MessageType_OsmosisSignedTx, OsmosisSignedTx, NO_PROCESS_FUNC) - MSG_OUT(MessageType_MessageType_BinanceAddress, BinanceAddress, NO_PROCESS_FUNC) MSG_OUT(MessageType_MessageType_BinancePublicKey, BinancePublicKey, NO_PROCESS_FUNC) MSG_OUT(MessageType_MessageType_BinanceTxRequest, BinanceTxRequest, NO_PROCESS_FUNC) MSG_OUT(MessageType_MessageType_BinanceSignedTx, BinanceSignedTx, NO_PROCESS_FUNC) - MSG_OUT(MessageType_MessageType_EosPublicKey, EosPublicKey, NO_PROCESS_FUNC) MSG_OUT(MessageType_MessageType_EosTxActionRequest, EosTxActionRequest, NO_PROCESS_FUNC) MSG_OUT(MessageType_MessageType_EosSignedTx, EosSignedTx, NO_PROCESS_FUNC) - MSG_OUT(MessageType_MessageType_RippleAddress, RippleAddress, NO_PROCESS_FUNC) MSG_OUT(MessageType_MessageType_RippleSignedTx, RippleSignedTx, NO_PROCESS_FUNC) - MSG_OUT(MessageType_MessageType_ThorchainAddress, ThorchainAddress, NO_PROCESS_FUNC) MSG_OUT(MessageType_MessageType_ThorchainMsgRequest, ThorchainMsgRequest, NO_PROCESS_FUNC) MSG_OUT(MessageType_MessageType_ThorchainSignedTx, ThorchainSignedTx, NO_PROCESS_FUNC) - MSG_OUT(MessageType_MessageType_MayachainAddress, MayachainAddress, NO_PROCESS_FUNC) MSG_OUT(MessageType_MessageType_MayachainMsgRequest, MayachainMsgRequest, NO_PROCESS_FUNC) MSG_OUT(MessageType_MessageType_MayachainSignedTx, MayachainSignedTx, NO_PROCESS_FUNC) +#endif #if DEBUG_LINK /* Debug Messages */ diff --git a/lib/firmware/transaction.c b/lib/firmware/transaction.c index aa37285e0..54747372c 100644 --- a/lib/firmware/transaction.c +++ b/lib/firmware/transaction.c @@ -27,7 +27,9 @@ #include "keepkey/firmware/coins.h" #include "keepkey/firmware/crypto.h" #include "keepkey/firmware/signing.h" +#if !BITCOIN_ONLY #include "keepkey/firmware/thorchain.h" +#endif #include "keepkey/firmware/txin_check.h" #include "keepkey/transport/interface.h" #include "trezor/crypto/address.h" @@ -237,8 +239,11 @@ int compile_output(const CoinType *coin, const HDNode *root, TxOutputType *in, return -1; // user aborted } } else { +#if !BITCOIN_ONLY // is this thorchain data? - if (!thorchain_parseConfirmMemo((const char *)in->op_return_data.bytes, (size_t)in->op_return_data.size)) { + if (!thorchain_parseConfirmMemo((const char *)in->op_return_data.bytes, (size_t)in->op_return_data.size)) +#endif + { if (!confirm_data(ButtonRequestType_ButtonRequest_ConfirmOutput, _("Confirm OP_RETURN"), in->op_return_data.bytes, in->op_return_data.size)) { diff --git a/lib/variant/CMakeLists.txt b/lib/variant/CMakeLists.txt index 0728f3f28..df997443b 100644 --- a/lib/variant/CMakeLists.txt +++ b/lib/variant/CMakeLists.txt @@ -7,10 +7,6 @@ add_library(kkvariant.keepkey ${CMAKE_CURRENT_SOURCE_DIR}/keepkey/keepkey.c ${CMAKE_CURRENT_SOURCE_DIR}/keepkey/logo.c) -add_library(kkvariant.salt - ${CMAKE_CURRENT_SOURCE_DIR}/salt/salt.c - ${CMAKE_CURRENT_SOURCE_DIR}/salt/logo.c) - add_library(kkvariant.poweredBy ${CMAKE_CURRENT_SOURCE_DIR}/poweredBy/poweredBy.c ${CMAKE_CURRENT_SOURCE_DIR}/poweredBy/logo.c) diff --git a/lib/variant/salt/logo.c b/lib/variant/salt/logo.c deleted file mode 100644 index 6884c0684..000000000 --- a/lib/variant/salt/logo.c +++ /dev/null @@ -1,317 +0,0 @@ -/* - * This file is part of the KeepKey project. - * - * Copyright (C) 2015 KeepKey LLC - * - * This library is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . - */ - -#include "keepkey/board/resources.h" - -const uint8_t salt_logo_1_data[1915] = { - 0x7f, 0x0, 0x3a, 0x0, 0xff, 0x1, 0x6, 0x2, 0xff, 0x1, 0x59, 0x0, - 0xfe, 0x1, 0x3, 0x3, 0x2, 0x22, 0x0, 0xff, 0x1, 0x1a, 0x2, 0x9, - 0x0, 0xf2, 0x1, 0x5, 0xd, 0x31, 0x5f, 0x79, 0x84, 0x83, 0x78, 0x5f, - 0x35, 0xf, 0x6, 0x3, 0x2b, 0x0, 0xfe, 0x19, 0x18, 0x28, 0x0, 0xf9, - 0x3, 0x36, 0x87, 0x81, 0x84, 0x65, 0x4, 0x21, 0x0, 0xfd, 0x33, 0x77, - 0x83, 0x16, 0x81, 0xfd, 0x85, 0x65, 0x14, 0x7, 0x0, 0xfc, 0xa, 0x38, - 0xa1, 0xed, 0x8, 0xff, 0xfb, 0xfa, 0xbd, 0x64, 0x16, 0x5, 0x28, 0x0, - 0xfd, 0x3, 0x90, 0x80, 0x28, 0x0, 0xfe, 0x5, 0x6d, 0x3, 0xff, 0xfe, - 0xcb, 0x8, 0x21, 0x0, 0xfe, 0x67, 0xef, 0x18, 0xff, 0xfe, 0xcb, 0x27, - 0x5, 0x0, 0xfd, 0x1, 0x24, 0xa8, 0xe, 0xff, 0xfc, 0xf2, 0x7d, 0x15, - 0x2, 0x26, 0x0, 0xfc, 0x3c, 0xdc, 0xc4, 0x2a, 0x27, 0x0, 0xfe, 0x5, - 0x6b, 0x3, 0xff, 0xfe, 0xc7, 0x8, 0x21, 0x0, 0xfe, 0x65, 0xeb, 0x18, - 0xff, 0xfe, 0xc8, 0x27, 0x4, 0x0, 0xfd, 0x2, 0x3f, 0xe6, 0x4, 0xff, - 0xf9, 0xfd, 0xf6, 0xf2, 0xf1, 0xf2, 0xf4, 0xf9, 0x6, 0xff, 0xfd, 0xdb, - 0x3d, 0x5, 0x25, 0x0, 0xff, 0x7d, 0x2, 0xff, 0xff, 0x67, 0x27, 0x0, - 0xfe, 0x5, 0x6b, 0x3, 0xff, 0xfe, 0xc7, 0x8, 0x21, 0x0, 0xfd, 0x61, - 0xe0, 0xf6, 0x8, 0xf4, 0xff, 0xf7, 0x3, 0xff, 0xfe, 0xfd, 0xf5, 0x8, - 0xf4, 0xfd, 0xfb, 0xbf, 0x25, 0x4, 0x0, 0xfe, 0x31, 0xf0, 0x3, 0xff, - 0xf4, 0xfb, 0xe7, 0xb9, 0x79, 0x57, 0x4d, 0x55, 0x6c, 0x95, 0xca, 0xe8, - 0xf6, 0x5, 0xff, 0xff, 0x5a, 0x24, 0x0, 0xfe, 0x33, 0xcb, 0x2, 0xff, - 0xfe, 0xb4, 0x22, 0x26, 0x0, 0xfe, 0x5, 0x6b, 0x3, 0xff, 0xfe, 0xc7, - 0x8, 0x21, 0x0, 0xfd, 0x29, 0x60, 0x6a, 0x7, 0x69, 0xfe, 0x6a, 0x96, - 0x3, 0xff, 0xfd, 0xea, 0x78, 0x67, 0x7, 0x69, 0xfd, 0x6c, 0x52, 0x10, - 0x3, 0x0, 0xfe, 0x10, 0xc5, 0x3, 0xff, 0xfd, 0xf7, 0xad, 0x29, 0x8, - 0x0, 0xfc, 0x25, 0x87, 0xda, 0xfa, 0x3, 0xff, 0xfe, 0xcb, 0x1, 0x23, - 0x0, 0xff, 0x70, 0x3, 0xff, 0xfe, 0xfd, 0x5a, 0x26, 0x0, 0xfe, 0x5, - 0x6b, 0x3, 0xff, 0xfe, 0xc7, 0x8, 0x2c, 0x0, 0xff, 0x48, 0x3, 0xff, - 0xfe, 0xda, 0x14, 0xd, 0x0, 0xfe, 0x2, 0x50, 0x3, 0xff, 0xfe, 0xf9, - 0x9c, 0xc, 0x0, 0xfa, 0x19, 0xa1, 0xef, 0xff, 0xdc, 0x1b, 0x23, 0x0, - 0xfe, 0x2a, 0xc2, 0x4, 0xff, 0xfe, 0xa9, 0x1b, 0x25, 0x0, 0xfe, 0x5, - 0x6b, 0x3, 0xff, 0xfe, 0xc7, 0x8, 0x2b, 0x0, 0xfe, 0x1, 0x4e, 0x3, - 0xff, 0xfe, 0xdb, 0x1b, 0xd, 0x0, 0xfe, 0x5, 0xb1, 0x3, 0xff, 0xfe, - 0xd1, 0x16, 0xe, 0x0, 0xfd, 0x76, 0xdc, 0x36, 0x24, 0x0, 0xff, 0x63, - 0x5, 0xff, 0xfe, 0xf8, 0x4e, 0x25, 0x0, 0xfe, 0x5, 0x6b, 0x3, 0xff, - 0xfe, 0xc7, 0x8, 0x2b, 0x0, 0xfe, 0x1, 0x4e, 0x3, 0xff, 0xfe, 0xdb, - 0x1b, 0xd, 0x0, 0xfe, 0x7, 0xe9, 0x2, 0xff, 0xfe, 0xfb, 0xa0, 0x10, - 0x0, 0xff, 0x24, 0x24, 0x0, 0xfe, 0x21, 0xb9, 0x6, 0xff, 0xfe, 0x9d, - 0x14, 0x24, 0x0, 0xfe, 0x5, 0x6b, 0x3, 0xff, 0xfe, 0xc7, 0x8, 0x2b, - 0x0, 0xfe, 0x1, 0x4e, 0x3, 0xff, 0xfe, 0xdb, 0x1b, 0xd, 0x0, 0xff, - 0x8, 0x3, 0xff, 0xfe, 0xf4, 0x82, 0x35, 0x0, 0xff, 0x55, 0x3, 0xff, - 0x2, 0xf9, 0x2, 0xff, 0xfe, 0xf2, 0x42, 0x24, 0x0, 0xfe, 0x5, 0x6b, - 0x3, 0xff, 0xfe, 0xc7, 0x8, 0x2b, 0x0, 0xfe, 0x1, 0x4e, 0x3, 0xff, - 0xfe, 0xdb, 0x1b, 0xd, 0x0, 0xfe, 0x8, 0xfe, 0x2, 0xff, 0xfe, 0xfa, - 0x9c, 0x34, 0x0, 0xfe, 0x1a, 0xae, 0x3, 0xff, 0xfe, 0xb8, 0xbe, 0x3, - 0xff, 0xfe, 0x8f, 0xf, 0x23, 0x0, 0xfe, 0x5, 0x6b, 0x3, 0xff, 0xfe, - 0xc7, 0x8, 0x2b, 0x0, 0xfe, 0x1, 0x4e, 0x3, 0xff, 0xfe, 0xdb, 0x1b, - 0xd, 0x0, 0xfe, 0x7, 0xde, 0x3, 0xff, 0xfe, 0xda, 0x29, 0x33, 0x0, - 0xfe, 0x49, 0xfe, 0x2, 0xff, 0xfc, 0xe7, 0x46, 0x5d, 0xf5, 0x2, 0xff, - 0xfe, 0xec, 0x37, 0x23, 0x0, 0xfe, 0x5, 0x6b, 0x3, 0xff, 0xfe, 0xc7, - 0x8, 0x2b, 0x0, 0xfe, 0x1, 0x4e, 0x3, 0xff, 0xfe, 0xdb, 0x1b, 0xd, - 0x0, 0xfe, 0x5, 0x9b, 0x3, 0xff, 0xfc, 0xfd, 0xbe, 0x36, 0x6, 0x30, - 0x0, 0xfe, 0x13, 0xa3, 0x3, 0xff, 0xfc, 0xa6, 0xa, 0x1d, 0xbb, 0x3, - 0xff, 0xfe, 0x82, 0xb, 0x22, 0x0, 0xfe, 0x5, 0x6b, 0x3, 0xff, 0xfe, - 0xc7, 0x8, 0x2b, 0x0, 0xfe, 0x1, 0x4e, 0x3, 0xff, 0xfe, 0xdb, 0x1b, - 0xd, 0x0, 0xfd, 0x1, 0x3d, 0xfd, 0x4, 0xff, 0xfc, 0xdf, 0x7a, 0x3e, - 0x1b, 0x2e, 0x0, 0xfe, 0x3e, 0xf9, 0x2, 0xff, 0xfe, 0xec, 0x5f, 0x2, - 0x0, 0xfe, 0x77, 0xf8, 0x2, 0xff, 0xfe, 0xe6, 0x2c, 0x22, 0x0, 0xfe, - 0x5, 0x6b, 0x3, 0xff, 0xfe, 0xc7, 0x8, 0x2b, 0x0, 0xfe, 0x1, 0x4e, - 0x3, 0xff, 0xfe, 0xdb, 0x1b, 0xe, 0x0, 0xfe, 0x3, 0x93, 0x6, 0xff, - 0xfa, 0xe6, 0xa6, 0x70, 0x49, 0x2c, 0xd, 0x29, 0x0, 0xfe, 0xe, 0x96, - 0x3, 0xff, 0xfe, 0xb3, 0x14, 0x2, 0x0, 0xfe, 0x26, 0xc6, 0x3, 0xff, - 0xfe, 0x76, 0x8, 0x21, 0x0, 0xfe, 0x5, 0x6b, 0x3, 0xff, 0xfe, 0xc7, - 0x8, 0x2b, 0x0, 0xfe, 0x1, 0x4e, 0x3, 0xff, 0xfe, 0xdb, 0x1b, 0xf, - 0x0, 0xfd, 0x11, 0xa0, 0xfa, 0x7, 0xff, 0xfa, 0xec, 0xbf, 0x93, 0x66, - 0x40, 0x19, 0x26, 0x0, 0xfe, 0x33, 0xf4, 0x2, 0xff, 0xfe, 0xf0, 0x6c, - 0x4, 0x0, 0xfe, 0x85, 0xfa, 0x2, 0xff, 0xfe, 0xe0, 0x22, 0x21, 0x0, - 0xfe, 0x5, 0x6b, 0x3, 0xff, 0xfe, 0xc7, 0x8, 0x2b, 0x0, 0xfe, 0x1, - 0x4e, 0x3, 0xff, 0xfe, 0xdb, 0x1b, 0x10, 0x0, 0xfd, 0xe, 0x7b, 0xd2, - 0xa, 0xff, 0xfc, 0xd9, 0xa6, 0x70, 0x39, 0x23, 0x0, 0xfe, 0xa, 0x8a, - 0x3, 0xff, 0xfe, 0xbf, 0x19, 0x4, 0x0, 0xfe, 0x2d, 0xd0, 0x3, 0xff, - 0xfe, 0x69, 0x6, 0x20, 0x0, 0xfe, 0x5, 0x6b, 0x3, 0xff, 0xfe, 0xc7, - 0x8, 0x2b, 0x0, 0xfe, 0x1, 0x4e, 0x3, 0xff, 0xfe, 0xdb, 0x1b, 0x12, - 0x0, 0xfc, 0x3c, 0x87, 0xc2, 0xf2, 0xa, 0xff, 0xfd, 0xce, 0x89, 0x39, - 0x21, 0x0, 0xfe, 0x28, 0xef, 0x2, 0xff, 0xfe, 0xf4, 0x79, 0x6, 0x0, - 0xfe, 0x92, 0xfb, 0x2, 0xff, 0xfe, 0xd9, 0x18, 0x20, 0x0, 0xfe, 0x5, - 0x6b, 0x3, 0xff, 0xfe, 0xc7, 0x8, 0x2b, 0x0, 0xfe, 0x1, 0x4e, 0x3, - 0xff, 0xfe, 0xdb, 0x1b, 0x14, 0x0, 0xfb, 0x2d, 0x60, 0x90, 0xbd, 0xe9, - 0x9, 0xff, 0xfd, 0xcd, 0x6c, 0x2, 0x1e, 0x0, 0xfe, 0x6, 0x7d, 0x3, - 0xff, 0xfe, 0xcb, 0x1e, 0x6, 0x0, 0xfe, 0x36, 0xda, 0x3, 0xff, 0xfe, - 0x5d, 0x4, 0x1f, 0x0, 0xfe, 0x5, 0x6b, 0x3, 0xff, 0xfe, 0xc7, 0x8, - 0x2b, 0x0, 0xfe, 0x1, 0x4e, 0x3, 0xff, 0xfe, 0xdb, 0x1b, 0x16, 0x0, - 0xf9, 0x4, 0x2b, 0x50, 0x75, 0x9e, 0xcc, 0xfc, 0x6, 0xff, 0xfe, 0xf5, - 0x83, 0x1e, 0x0, 0xfe, 0x1d, 0xe9, 0x2, 0xff, 0xfe, 0xf6, 0x86, 0x8, - 0x0, 0xfe, 0x9f, 0xfc, 0x2, 0xff, 0xfe, 0xd1, 0xf, 0x1f, 0x0, 0xfe, - 0x5, 0x6b, 0x3, 0xff, 0xfe, 0xc7, 0x8, 0x2b, 0x0, 0xfe, 0x1, 0x4e, - 0x3, 0xff, 0xfe, 0xdb, 0x1b, 0x1a, 0x0, 0xfb, 0x12, 0x36, 0x5c, 0x90, - 0xd7, 0x5, 0xff, 0xfe, 0xfb, 0x60, 0x1c, 0x0, 0xfe, 0x4, 0x71, 0x3, - 0xff, 0xfe, 0xd6, 0x24, 0x8, 0x0, 0xfe, 0x40, 0xe3, 0x3, 0xff, 0xfe, - 0x52, 0x2, 0x1e, 0x0, 0xfe, 0x5, 0x6b, 0x3, 0xff, 0xfe, 0xc7, 0x8, - 0x2b, 0x0, 0xfe, 0x1, 0x4e, 0x3, 0xff, 0xfe, 0xdb, 0x1b, 0x1d, 0x0, - 0xfc, 0xd, 0x39, 0x7c, 0xe8, 0x4, 0xff, 0xfe, 0xe3, 0x11, 0x1b, 0x0, - 0xfe, 0x13, 0xe3, 0x2, 0xff, 0xfe, 0xf8, 0x93, 0xa, 0x0, 0xfe, 0xac, - 0xfd, 0x2, 0xff, 0xfe, 0xc9, 0x8, 0x1e, 0x0, 0xfe, 0x5, 0x6b, 0x3, - 0xff, 0xfe, 0xc7, 0x8, 0x2b, 0x0, 0xfe, 0x1, 0x4e, 0x3, 0xff, 0xfe, - 0xdb, 0x1b, 0x1f, 0x0, 0xfd, 0x5, 0x46, 0xdd, 0x4, 0xff, 0xff, 0x60, - 0x1a, 0x0, 0xfe, 0x2, 0x66, 0x3, 0xff, 0xfe, 0xdf, 0x2d, 0xa, 0x0, - 0xfe, 0x4b, 0xe9, 0x3, 0xff, 0xfe, 0x47, 0x1, 0x1d, 0x0, 0xfe, 0x5, - 0x6b, 0x3, 0xff, 0xfe, 0xc7, 0x8, 0x2b, 0x0, 0xfe, 0x1, 0x4e, 0x3, - 0xff, 0xfe, 0xdb, 0x1b, 0x21, 0x0, 0xfe, 0x56, 0xf5, 0x3, 0xff, 0xff, - 0xaa, 0x1a, 0x0, 0xfe, 0xa, 0xdc, 0x2, 0xff, 0xfe, 0xfa, 0xa0, 0xc, - 0x0, 0xfe, 0xb9, 0xfe, 0x2, 0xff, 0xfe, 0xbf, 0x1, 0x1d, 0x0, 0xfe, - 0x5, 0x6b, 0x3, 0xff, 0xfe, 0xc7, 0x8, 0x2b, 0x0, 0xfe, 0x1, 0x4e, - 0x3, 0xff, 0xfe, 0xdb, 0x1b, 0x22, 0x0, 0xfe, 0xd2, 0xfe, 0x2, 0xff, - 0xff, 0xd1, 0x1a, 0x0, 0xff, 0x5b, 0x3, 0xff, 0xfe, 0xe8, 0x35, 0xc, - 0x0, 0xfe, 0x57, 0xef, 0x3, 0xff, 0xff, 0x3c, 0x1d, 0x0, 0xfe, 0x5, - 0x6b, 0x3, 0xff, 0xfe, 0xc7, 0x8, 0x2b, 0x0, 0xfe, 0x1, 0x4e, 0x3, - 0xff, 0xfe, 0xdb, 0x1b, 0x22, 0x0, 0xfe, 0xad, 0xfc, 0x2, 0xff, 0xff, - 0xde, 0x19, 0x0, 0xfe, 0x3, 0xd4, 0x2, 0xff, 0xfe, 0xfc, 0xac, 0xd, - 0x0, 0xfe, 0x1, 0xc6, 0x3, 0xff, 0xff, 0xb5, 0x1d, 0x0, 0xfe, 0x5, - 0x6b, 0x3, 0xff, 0xfe, 0xc7, 0x8, 0x2b, 0x0, 0xfe, 0x1, 0x4e, 0x3, - 0xff, 0xfe, 0xdb, 0x1b, 0xf, 0x0, 0xfd, 0xb, 0x0, 0x1, 0x10, 0x0, - 0xfe, 0xb4, 0xfd, 0x2, 0xff, 0xff, 0xd1, 0x19, 0x0, 0xff, 0x50, 0x3, - 0xff, 0xfe, 0xef, 0x40, 0xe, 0x0, 0xfe, 0x63, 0xf4, 0x2, 0xff, 0xfe, - 0xfc, 0x31, 0x1c, 0x0, 0xfe, 0x5, 0x6b, 0x3, 0xff, 0xfe, 0xc7, 0x8, - 0x2b, 0x0, 0xfe, 0x1, 0x4e, 0x3, 0xff, 0xfe, 0xdb, 0x1b, 0xe, 0x0, - 0xfd, 0x2d, 0xc8, 0x40, 0x11, 0x0, 0xff, 0xdf, 0x3, 0xff, 0xff, 0xaa, - 0x19, 0x0, 0xff, 0xcb, 0x2, 0xff, 0xfe, 0xfd, 0xba, 0xf, 0x0, 0xfe, - 0x3, 0xd3, 0x3, 0xff, 0xff, 0xa9, 0x1c, 0x0, 0xfe, 0x5, 0x6b, 0x3, - 0xff, 0xfe, 0xc7, 0x8, 0x2b, 0x0, 0xfe, 0x1, 0x4e, 0x3, 0xff, 0xfe, - 0xdb, 0x1b, 0xd, 0x0, 0xfb, 0x10, 0xd0, 0xff, 0xda, 0x5e, 0xd, 0x0, - 0xfc, 0x1, 0x0, 0x6c, 0xf6, 0x3, 0xff, 0xff, 0x64, 0x18, 0x0, 0xfe, - 0x46, 0xfe, 0x2, 0xff, 0xfe, 0xf4, 0x4c, 0x10, 0x0, 0xfe, 0x6f, 0xf7, - 0x2, 0xff, 0xfe, 0xf8, 0x27, 0x1b, 0x0, 0xfe, 0x5, 0x6b, 0x3, 0xff, - 0xfe, 0xc7, 0x8, 0x2b, 0x0, 0xfe, 0x1, 0x4e, 0x3, 0xff, 0xfe, 0xdb, - 0x1b, 0xc, 0x0, 0xfe, 0x5, 0xb8, 0x3, 0xff, 0xfd, 0xea, 0x9e, 0x1e, - 0xc, 0x0, 0xfe, 0x49, 0xe1, 0x3, 0xff, 0xfe, 0xf2, 0xf, 0x18, 0x0, - 0xff, 0xc1, 0x2, 0xff, 0xfe, 0xfe, 0xc7, 0x11, 0x0, 0xfe, 0x8, 0xdf, - 0x3, 0xff, 0xff, 0x9d, 0x1b, 0x0, 0xfe, 0x5, 0x6b, 0x3, 0xff, 0xfe, - 0xc7, 0x8, 0x2b, 0x0, 0xfe, 0x1, 0x4e, 0x3, 0xff, 0xfe, 0xdb, 0x1b, - 0xc, 0x0, 0xfe, 0x2, 0x9c, 0x4, 0xff, 0xfc, 0xfa, 0xdb, 0x93, 0x30, - 0x8, 0x0, 0xfd, 0x18, 0x88, 0xe4, 0x4, 0xff, 0xff, 0x6f, 0x18, 0x0, - 0xfe, 0x3b, 0xfa, 0x2, 0xff, 0xfe, 0xf5, 0x4b, 0x12, 0x0, 0xfe, 0x6d, - 0xf9, 0x2, 0xff, 0xfe, 0xf4, 0x1d, 0x1a, 0x0, 0xfe, 0x5, 0x6b, 0x3, - 0xff, 0xff, 0xc5, 0x2c, 0x0, 0xfe, 0x1, 0x4e, 0x3, 0xff, 0xfe, 0xdb, - 0x1b, 0xd, 0x0, 0xfe, 0x12, 0x88, 0x5, 0xff, 0xf4, 0xf8, 0xeb, 0xd2, - 0xa1, 0x7a, 0x64, 0x5f, 0x6b, 0x87, 0xbb, 0xe3, 0xf7, 0x4, 0xff, 0xfe, - 0xa8, 0xa, 0x18, 0x0, 0xff, 0xb6, 0x3, 0xff, 0xfe, 0xfb, 0xb8, 0x11, - 0xb1, 0xfd, 0xb0, 0xc2, 0xfc, 0x2, 0xff, 0xfe, 0xfe, 0x90, 0x1a, 0x0, - 0xfe, 0x5, 0x6b, 0x3, 0xff, 0xfd, 0xe2, 0x7f, 0x79, 0xc, 0x7b, 0xfd, - 0x7c, 0x6b, 0x2, 0x1b, 0x0, 0xfe, 0x1, 0x4e, 0x3, 0xff, 0xfe, 0xdb, - 0x1b, 0xe, 0x0, 0xfd, 0xb, 0x52, 0xe9, 0x6, 0xff, 0xfe, 0xfa, 0xf6, - 0x2, 0xf3, 0xfd, 0xf4, 0xf7, 0xfd, 0x5, 0xff, 0xfe, 0xa1, 0x12, 0x18, - 0x0, 0xfe, 0x31, 0xf5, 0x4, 0xff, 0xff, 0xfb, 0x13, 0xfc, 0x4, 0xff, - 0xfe, 0xed, 0x13, 0x19, 0x0, 0xfe, 0x5, 0x6b, 0x3, 0xff, 0xff, 0xfd, - 0xe, 0xf6, 0xfd, 0xf8, 0xd7, 0x5, 0x1b, 0x0, 0xfe, 0x1, 0x4e, 0x3, - 0xff, 0xfe, 0xdb, 0x1b, 0xf, 0x0, 0xfc, 0x3, 0x1b, 0x81, 0xec, 0xe, - 0xff, 0xfd, 0xe4, 0x5e, 0xd, 0x19, 0x0, 0xfe, 0xa8, 0xfd, 0x1c, 0xff, - 0xfe, 0xfb, 0x84, 0x19, 0x0, 0xfe, 0x5, 0x6b, 0x13, 0xff, 0xfe, 0xe0, - 0x5, 0x1b, 0x0, 0xfe, 0x1, 0x4e, 0x3, 0xff, 0xfe, 0xdb, 0x1b, 0x11, - 0x0, 0xfb, 0x5, 0x15, 0x59, 0xab, 0xeb, 0x8, 0xff, 0xfb, 0xf5, 0xb7, - 0x5c, 0x13, 0x3, 0x19, 0x0, 0xfe, 0x29, 0xf6, 0x1e, 0xff, 0xfe, 0xeb, - 0xd, 0x18, 0x0, 0xfe, 0x5, 0x6d, 0x13, 0xff, 0xfe, 0xe4, 0x5, 0x1b, - 0x0, 0xfe, 0x1, 0x4f, 0x3, 0xff, 0xfe, 0xe0, 0x1b, 0x13, 0x0, 0xf2, - 0x2, 0x5, 0xa, 0x1f, 0x45, 0x5f, 0x6a, 0x69, 0x62, 0x4b, 0x26, 0xc, - 0x6, 0x3, 0x1b, 0x0, 0xfe, 0x36, 0x71, 0x1d, 0x73, 0xfd, 0x74, 0x6f, - 0x26, 0x18, 0x0, 0xfd, 0x2, 0x31, 0x79, 0x11, 0x74, 0xfd, 0x75, 0x65, - 0x2, 0x1b, 0x0, 0xf9, 0x1, 0x23, 0x78, 0x74, 0x76, 0x64, 0xc, 0x17, - 0x0, 0xff, 0x1, 0x4, 0x2, 0xff, 0x1, 0x1f, 0x0, 0xff, 0x1, 0x20, - 0x2, 0xff, 0x1, 0x19, 0x0, 0xff, 0x1, 0x14, 0x2, 0x1d, 0x0, 0xff, - 0x1, 0x4, 0x2, 0x7f, 0x0, 0x3d, 0x0}; -static const Image salt_logo_1_image = {175, 40, 1915, salt_logo_1_data}; - -const VariantAnimation salt_logo = {21, - { - {40, 12, 25, 0, &salt_logo_1_image}, - {40, 12, 25, 5, &salt_logo_1_image}, - {40, 12, 25, 10, &salt_logo_1_image}, - {40, 12, 25, 15, &salt_logo_1_image}, - {40, 12, 25, 20, &salt_logo_1_image}, - {40, 12, 25, 25, &salt_logo_1_image}, - {40, 12, 25, 30, &salt_logo_1_image}, - {40, 12, 25, 35, &salt_logo_1_image}, - {40, 12, 25, 40, &salt_logo_1_image}, - {40, 12, 25, 45, &salt_logo_1_image}, - {40, 12, 25, 50, &salt_logo_1_image}, - {40, 12, 25, 55, &salt_logo_1_image}, - {40, 12, 25, 60, &salt_logo_1_image}, - {40, 12, 25, 65, &salt_logo_1_image}, - {40, 12, 25, 70, &salt_logo_1_image}, - {40, 12, 25, 75, &salt_logo_1_image}, - {40, 12, 25, 80, &salt_logo_1_image}, - {40, 12, 25, 85, &salt_logo_1_image}, - {40, 12, 25, 90, &salt_logo_1_image}, - {40, 12, 25, 95, &salt_logo_1_image}, - {40, 12, 25, 100, &salt_logo_1_image}, - }}; -const VariantAnimation salt_logo_reversed = { - 21, {{40, 12, 25, 100, &salt_logo_1_image}, - {40, 12, 25, 95, &salt_logo_1_image}, - {40, 12, 25, 90, &salt_logo_1_image}, - {40, 12, 25, 85, &salt_logo_1_image}, - {40, 12, 25, 80, &salt_logo_1_image}, - {40, 12, 25, 75, &salt_logo_1_image}, - {40, 12, 25, 70, &salt_logo_1_image}, - {40, 12, 25, 65, &salt_logo_1_image}, - {40, 12, 25, 60, &salt_logo_1_image}, - {40, 12, 25, 55, &salt_logo_1_image}, - {40, 12, 25, 50, &salt_logo_1_image}, - {40, 12, 25, 45, &salt_logo_1_image}, - {40, 12, 25, 40, &salt_logo_1_image}, - {40, 12, 25, 35, &salt_logo_1_image}, - {40, 12, 25, 30, &salt_logo_1_image}, - {40, 12, 25, 25, &salt_logo_1_image}, - {40, 12, 25, 20, &salt_logo_1_image}, - {40, 12, 25, 15, &salt_logo_1_image}, - {40, 12, 25, 10, &salt_logo_1_image}, - {40, 12, 25, 5, &salt_logo_1_image}, - {40, 12, 25, 0, &salt_logo_1_image}}}; - -const VariantAnimation salt_screensaver = { - 82, - { - {40, 10, 150, 60, &salt_logo_1_image}, - {42, 10, 150, 60, &salt_logo_1_image}, - {44, 10, 150, 60, &salt_logo_1_image}, - {46, 10, 150, 60, &salt_logo_1_image}, - {48, 10, 150, 60, &salt_logo_1_image}, - {50, 10, 150, 60, &salt_logo_1_image}, - {52, 10, 150, 60, &salt_logo_1_image}, - {54, 10, 150, 60, &salt_logo_1_image}, - {56, 10, 150, 60, &salt_logo_1_image}, - {58, 10, 150, 60, &salt_logo_1_image}, - {60, 10, 150, 60, &salt_logo_1_image}, - {62, 10, 150, 60, &salt_logo_1_image}, - {64, 10, 150, 60, &salt_logo_1_image}, - {66, 10, 150, 60, &salt_logo_1_image}, - {68, 10, 150, 60, &salt_logo_1_image}, - {70, 10, 150, 60, &salt_logo_1_image}, - {72, 10, 150, 60, &salt_logo_1_image}, - {74, 10, 150, 60, &salt_logo_1_image}, - {76, 10, 150, 60, &salt_logo_1_image}, - {78, 10, 150, 60, &salt_logo_1_image}, - {80, 10, 150, 60, &salt_logo_1_image}, - {80, 10, 150, 60, &salt_logo_1_image}, - {78, 10, 150, 60, &salt_logo_1_image}, - {76, 10, 150, 60, &salt_logo_1_image}, - {74, 10, 150, 60, &salt_logo_1_image}, - {72, 10, 150, 60, &salt_logo_1_image}, - {70, 10, 150, 60, &salt_logo_1_image}, - {68, 10, 150, 60, &salt_logo_1_image}, - {66, 10, 150, 60, &salt_logo_1_image}, - {64, 10, 150, 60, &salt_logo_1_image}, - {62, 10, 150, 60, &salt_logo_1_image}, - {60, 10, 150, 60, &salt_logo_1_image}, - {58, 10, 150, 60, &salt_logo_1_image}, - {56, 10, 150, 60, &salt_logo_1_image}, - {54, 10, 150, 60, &salt_logo_1_image}, - {52, 10, 150, 60, &salt_logo_1_image}, - {50, 10, 150, 60, &salt_logo_1_image}, - {48, 10, 150, 60, &salt_logo_1_image}, - {46, 10, 150, 60, &salt_logo_1_image}, - {44, 10, 150, 60, &salt_logo_1_image}, - {42, 10, 150, 60, &salt_logo_1_image}, - {40, 10, 150, 60, &salt_logo_1_image}, - {38, 10, 150, 60, &salt_logo_1_image}, - {36, 10, 150, 60, &salt_logo_1_image}, - {34, 10, 150, 60, &salt_logo_1_image}, - {32, 10, 150, 60, &salt_logo_1_image}, - {30, 10, 150, 60, &salt_logo_1_image}, - {28, 10, 150, 60, &salt_logo_1_image}, - {26, 10, 150, 60, &salt_logo_1_image}, - {24, 10, 150, 60, &salt_logo_1_image}, - {22, 10, 150, 60, &salt_logo_1_image}, - {20, 10, 150, 60, &salt_logo_1_image}, - {18, 10, 150, 60, &salt_logo_1_image}, - {16, 10, 150, 60, &salt_logo_1_image}, - {14, 10, 150, 60, &salt_logo_1_image}, - {12, 10, 150, 60, &salt_logo_1_image}, - {10, 10, 150, 60, &salt_logo_1_image}, - {8, 10, 150, 60, &salt_logo_1_image}, - {6, 10, 150, 60, &salt_logo_1_image}, - {4, 10, 150, 60, &salt_logo_1_image}, - {2, 10, 150, 60, &salt_logo_1_image}, - {0, 10, 150, 60, &salt_logo_1_image}, - {0, 10, 150, 60, &salt_logo_1_image}, - {2, 10, 150, 60, &salt_logo_1_image}, - {4, 10, 150, 60, &salt_logo_1_image}, - {6, 10, 150, 60, &salt_logo_1_image}, - {8, 10, 150, 60, &salt_logo_1_image}, - {10, 10, 150, 60, &salt_logo_1_image}, - {12, 10, 150, 60, &salt_logo_1_image}, - {14, 10, 150, 60, &salt_logo_1_image}, - {16, 10, 150, 60, &salt_logo_1_image}, - {18, 10, 150, 60, &salt_logo_1_image}, - {20, 10, 150, 60, &salt_logo_1_image}, - {22, 10, 150, 60, &salt_logo_1_image}, - {24, 10, 150, 60, &salt_logo_1_image}, - {26, 10, 150, 60, &salt_logo_1_image}, - {28, 10, 150, 60, &salt_logo_1_image}, - {30, 10, 150, 60, &salt_logo_1_image}, - {32, 10, 150, 60, &salt_logo_1_image}, - {34, 10, 150, 60, &salt_logo_1_image}, - {36, 10, 150, 60, &salt_logo_1_image}, - {38, 10, 150, 60, &salt_logo_1_image}, - }}; diff --git a/lib/variant/salt/salt.c b/lib/variant/salt/salt.c deleted file mode 100644 index e728c9b60..000000000 --- a/lib/variant/salt/salt.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "keepkey/variant/salt.h" - -#include "keepkey/board/timer.h" -#include "keepkey/board/variant.h" - -const VariantInfo variant_salt = {VARIANTINFO_SALT}; diff --git a/scripts/load-variant.sh b/scripts/load-variant.sh index f65ccf2f4..1acc2c9b1 100755 --- a/scripts/load-variant.sh +++ b/scripts/load-variant.sh @@ -1,6 +1,6 @@ #! /bin/bash -BIN_FILE=./bin/variant.fox.bin +BIN_FILE=./bin/variant.keepkey.bin openocd -s /usr/share/openocd/scripts -f interface/jlink.cfg -f ./scripts/openocd/stm32f2x.cfg -c "program $BIN_FILE 0x08010000 verify exit" if [[ $? -ne 0 ]]; then echo $? diff --git a/tools/emulator/CMakeLists.txt b/tools/emulator/CMakeLists.txt index 7b0574e65..c2c674cfc 100644 --- a/tools/emulator/CMakeLists.txt +++ b/tools/emulator/CMakeLists.txt @@ -16,7 +16,6 @@ if(${KK_EMULATOR}) kkboard kkboard.keepkey kkvariant.keepkey - kkvariant.salt kktransport trezorcrypto qrcodegenerator diff --git a/tools/firmware/CMakeLists.txt b/tools/firmware/CMakeLists.txt index 18c50e411..6ee022dd9 100644 --- a/tools/firmware/CMakeLists.txt +++ b/tools/firmware/CMakeLists.txt @@ -32,7 +32,6 @@ if(NOT ${KK_EMULATOR}) kkboard kkboard.keepkey kkvariant.keepkey - kkvariant.salt kktransport trezorcrypto qrcodegenerator diff --git a/tools/rle-dump/CMakeLists.txt b/tools/rle-dump/CMakeLists.txt index 5132118e3..02392fc2e 100644 --- a/tools/rle-dump/CMakeLists.txt +++ b/tools/rle-dump/CMakeLists.txt @@ -13,7 +13,6 @@ if(${KK_EMULATOR}) kkboard kkboard.keepkey kkvariant.keepkey - kkvariant.salt kkboard kktransport trezorcrypto diff --git a/tools/variant/CMakeLists.txt b/tools/variant/CMakeLists.txt index 0a250e92e..e33ec4785 100644 --- a/tools/variant/CMakeLists.txt +++ b/tools/variant/CMakeLists.txt @@ -17,41 +17,4 @@ if(NOT ${KK_EMULATOR}) ${CMAKE_BINARY_DIR}/bin/variant.keepkey.elf ${CMAKE_BINARY_DIR}/bin/variant.keepkey.bin) - add_executable(variant.salt.elf salt.c header.s) - target_link_libraries(variant.salt.elf - -Wl,--whole-archive kkvariant.salt -Wl,--no-whole-archive) - add_custom_command(TARGET variant.salt.elf - POST_BUILD - COMMAND ${CMAKE_OBJCOPY} ARGS -O binary - ${CMAKE_BINARY_DIR}/bin/variant.salt.elf - ${CMAKE_BINARY_DIR}/bin/variant.salt.bin) - - add_executable(variant.fox.elf fox.c header.s) - add_custom_command(TARGET variant.fox.elf - POST_BUILD - COMMAND ${CMAKE_OBJCOPY} ARGS -O binary - ${CMAKE_BINARY_DIR}/bin/variant.fox.elf - ${CMAKE_BINARY_DIR}/bin/variant.fox.bin) - - add_executable(variant.kaspersky.elf kaspersky.c header.s) - add_custom_command(TARGET variant.kaspersky.elf - POST_BUILD - COMMAND ${CMAKE_OBJCOPY} ARGS -O binary - ${CMAKE_BINARY_DIR}/bin/variant.kaspersky.elf - ${CMAKE_BINARY_DIR}/bin/variant.kaspersky.bin) - - add_executable(variant.blockpit.elf blockpit.c header.s) - add_custom_command(TARGET variant.blockpit.elf - POST_BUILD - COMMAND ${CMAKE_OBJCOPY} ARGS -O binary - ${CMAKE_BINARY_DIR}/bin/variant.blockpit.elf - ${CMAKE_BINARY_DIR}/bin/variant.blockpit.bin) - - add_executable(variant.dash.elf dash.c header.s) - add_custom_command(TARGET variant.dash.elf - POST_BUILD - COMMAND ${CMAKE_OBJCOPY} ARGS -O binary - ${CMAKE_BINARY_DIR}/bin/variant.dash.elf - ${CMAKE_BINARY_DIR}/bin/variant.dash.bin) - endif() diff --git a/tools/variant/blockpit.c b/tools/variant/blockpit.c deleted file mode 100644 index 0888d58f3..000000000 --- a/tools/variant/blockpit.c +++ /dev/null @@ -1,1144 +0,0 @@ -/* - * This file is part of the KeepKey project. - * - * Copyright (C) 2018 KeepKey LLC - * - * This library is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . - */ - -#include "keepkey/board/variant.h" - -#include "keepkey/board/timer.h" - -const uint8_t blockpit_logo_data[5567] = { - 0x7f, 0x0, 0x7f, 0x0, 0x1d, 0x0, 0xfa, 0x19, 0x94, 0xe2, 0xd0, 0x5e, - 0x2, 0x7f, 0x0, 0x79, 0x0, 0xf7, 0x8, 0x6f, 0xdb, 0xe4, 0xe5, 0xe6, - 0xe7, 0xbb, 0x34, 0x7f, 0x0, 0x77, 0x0, 0xf4, 0x49, 0xc5, 0xe2, 0xe3, - 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0x95, 0x17, 0x7f, 0x0, 0x73, 0x0, - 0xf0, 0x28, 0xa7, 0xdf, 0xe0, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, - 0xe9, 0xea, 0xdf, 0x6b, 0x5, 0x7f, 0x0, 0x6f, 0x0, 0xed, 0x10, 0x81, - 0xda, 0xde, 0xdf, 0xe0, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, - 0xea, 0xeb, 0xec, 0xc8, 0x40, 0x7f, 0x0, 0x6c, 0x0, 0xe9, 0x3, 0x5c, - 0xcc, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, - 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xa3, 0x1e, 0x7f, 0x0, 0x69, - 0x0, 0xe6, 0x39, 0xb4, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe2, - 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, - 0xef, 0xe8, 0x78, 0x9, 0x7f, 0x0, 0x65, 0x0, 0xe3, 0x1c, 0x94, 0xd8, - 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe2, 0xe3, 0xe4, 0xe5, - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, - 0xd4, 0x4d, 0x7f, 0x0, 0x62, 0x0, 0xdf, 0x9, 0x70, 0xd0, 0xd7, 0xd8, - 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe2, 0xe3, 0xe4, 0xe5, - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, - 0xf2, 0xf3, 0xb2, 0x26, 0x7f, 0x0, 0x5e, 0x0, 0xdb, 0x1, 0x4c, 0xbe, - 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, - 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf1, 0x86, 0xe, 0x7f, 0x0, - 0x5b, 0x0, 0xd8, 0x2b, 0xa3, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, - 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, - 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, - 0xf3, 0xf4, 0xf5, 0xf6, 0xe0, 0x5a, 0x1, 0x7f, 0x0, 0x57, 0x0, 0xd5, - 0x13, 0x81, 0xd0, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, - 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, - 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, - 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xc1, 0x30, 0x7f, 0x0, 0x54, 0x0, 0xd1, - 0x5, 0x5f, 0xc4, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, - 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe2, 0xe3, 0xe4, 0xe5, - 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, - 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xfa, 0xf9, 0x96, 0x13, 0x18, - 0x0, 0xff, 0x1, 0x1e, 0x0, 0xff, 0x1, 0x42, 0x0, 0xff, 0x1, 0x45, - 0x0, 0xff, 0x1, 0xf, 0x0, 0xcf, 0x1e, 0xaf, 0xce, 0xcf, 0xd0, 0xd1, - 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, - 0xde, 0xdf, 0xe0, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, - 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, - 0xf7, 0xf8, 0xfa, 0xfb, 0xfc, 0xec, 0x69, 0x15, 0x0, 0xfd, 0x1, 0x57, - 0xc6, 0x1c, 0x0, 0xfd, 0x20, 0xa0, 0x5c, 0x40, 0x0, 0xfd, 0x31, 0xb5, - 0x30, 0x43, 0x0, 0xfd, 0x1, 0x54, 0xc6, 0xf, 0x0, 0xce, 0x3b, 0xcd, - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, - 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, - 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, - 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xa, - 0x13, 0x0, 0xfc, 0x4f, 0xcf, 0xff, 0xf0, 0x1a, 0x0, 0xfb, 0x1a, 0x98, - 0xfa, 0xff, 0x60, 0x3e, 0x0, 0xfe, 0x2a, 0xad, 0x2, 0xff, 0xff, 0x30, - 0x32, 0x0, 0xfa, 0x6b, 0xdc, 0xf9, 0xf2, 0xc9, 0x34, 0xa, 0x0, 0xfc, - 0x4d, 0xcf, 0xff, 0xf0, 0x10, 0x0, 0xd0, 0x30, 0xa7, 0xcf, 0xd0, 0xd1, - 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, - 0xde, 0xdf, 0xe0, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, - 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, - 0xf7, 0xf8, 0xfa, 0xfb, 0xfc, 0xd6, 0x49, 0x12, 0x0, 0xfe, 0x46, 0xc8, - 0x3, 0xff, 0xff, 0xf0, 0x18, 0x0, 0xfd, 0x16, 0x90, 0xf7, 0x3, 0xff, - 0xff, 0x60, 0x3c, 0x0, 0xfd, 0x23, 0xa3, 0xfe, 0x3, 0xff, 0xff, 0x30, - 0x31, 0x0, 0xfe, 0x1d, 0xfe, 0x4, 0xff, 0xff, 0xbf, 0x8, 0x0, 0xfe, - 0x46, 0xc8, 0x3, 0xff, 0xff, 0xf0, 0x11, 0x0, 0xd2, 0x2, 0x55, 0xc2, - 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, - 0xdd, 0xde, 0xdf, 0xe0, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, - 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, - 0xf6, 0xf7, 0xf8, 0xfa, 0xed, 0x71, 0x5, 0x13, 0x0, 0xff, 0xf0, 0x4, - 0xff, 0xff, 0xf0, 0x18, 0x0, 0xff, 0x80, 0x5, 0xff, 0xff, 0x60, 0x3c, - 0x0, 0xff, 0xa0, 0x5, 0xff, 0xff, 0x30, 0x31, 0x0, 0xff, 0x3e, 0x5, - 0xff, 0xff, 0xe0, 0x8, 0x0, 0xff, 0xf0, 0x4, 0xff, 0xff, 0xf0, 0x13, - 0x0, 0xda, 0xf, 0x7d, 0xd1, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, - 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe2, 0xd9, 0x6e, 0x20, 0x3c, - 0xb6, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, - 0xf3, 0xf4, 0xf5, 0xf6, 0x2, 0xf7, 0xfe, 0x98, 0x16, 0x15, 0x0, 0xff, - 0xf0, 0x4, 0xff, 0xff, 0xf0, 0x18, 0x0, 0xff, 0x80, 0x5, 0xff, 0xff, - 0x60, 0x3c, 0x0, 0xff, 0xa0, 0x5, 0xff, 0xff, 0x30, 0x31, 0x0, 0xff, - 0x3d, 0x5, 0xff, 0xff, 0xdf, 0x8, 0x0, 0xff, 0xf0, 0x4, 0xff, 0xff, - 0xf0, 0x15, 0x0, 0xef, 0x28, 0xa3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, - 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0x90, 0x18, 0x3, 0x0, 0xee, - 0x2, 0x59, 0xd6, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, - 0xf3, 0xf4, 0xf5, 0xf6, 0xbe, 0x31, 0x17, 0x0, 0xff, 0xf0, 0x4, 0xff, - 0xff, 0xf0, 0x18, 0x0, 0xff, 0x80, 0x5, 0xff, 0xff, 0x60, 0x3c, 0x0, - 0xff, 0xa0, 0x5, 0xff, 0xff, 0x30, 0x31, 0x0, 0xfe, 0x17, 0xfc, 0x4, - 0xff, 0xff, 0xb5, 0x8, 0x0, 0xff, 0xf0, 0x4, 0xff, 0xff, 0xf0, 0xc, - 0x0, 0xfd, 0xc7, 0x96, 0x22, 0x7, 0x0, 0xf2, 0x1, 0x4d, 0xc1, 0xd6, - 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xb1, 0x31, 0x7, 0x0, - 0xf1, 0xe, 0x85, 0xe8, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, - 0xf4, 0xdb, 0x56, 0x1, 0x7, 0x0, 0xfd, 0x3a, 0xc9, 0x61, 0xe, 0x0, - 0xff, 0xf0, 0x4, 0xff, 0xff, 0xf0, 0x18, 0x0, 0xff, 0x80, 0x5, 0xff, - 0xff, 0x60, 0x3c, 0x0, 0xff, 0xa0, 0x5, 0xff, 0xff, 0x30, 0x32, 0x0, - 0xfa, 0x56, 0xbb, 0xd8, 0xcc, 0xa5, 0x22, 0x8, 0x0, 0xff, 0xf0, 0x4, - 0xff, 0xff, 0xf0, 0xc, 0x0, 0xfb, 0xcc, 0xce, 0xcd, 0x76, 0xc, 0x7, - 0x0, 0xf5, 0xc, 0x75, 0xd4, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xc9, 0x54, - 0x2, 0xa, 0x0, 0xf5, 0x29, 0xb1, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, - 0xeb, 0x7d, 0xa, 0x7, 0x0, 0xfb, 0x1b, 0xa2, 0xfa, 0xfc, 0x6d, 0xe, - 0x0, 0xff, 0xf0, 0x4, 0xff, 0xff, 0xf0, 0x18, 0x0, 0xff, 0x80, 0x5, - 0xff, 0xff, 0x60, 0x3c, 0x0, 0xff, 0xa0, 0x5, 0xff, 0xff, 0x30, 0x40, - 0x0, 0xff, 0xf0, 0x4, 0xff, 0xff, 0xf0, 0xc, 0x0, 0xf9, 0xcc, 0xce, - 0xd0, 0xd2, 0xc3, 0x53, 0x2, 0x7, 0x0, 0xf9, 0x22, 0x9d, 0xd9, 0xda, - 0xd7, 0x76, 0xb, 0xe, 0x0, 0xf9, 0x51, 0xd4, 0xef, 0xf0, 0xf1, 0xa3, - 0x1e, 0x7, 0x0, 0xf9, 0x9, 0x77, 0xeb, 0xf8, 0xfa, 0xfc, 0x6d, 0xe, - 0x0, 0xff, 0xf0, 0x4, 0xff, 0xff, 0xf0, 0x18, 0x0, 0xff, 0x80, 0x5, - 0xff, 0xff, 0x60, 0x3c, 0x0, 0xff, 0xa0, 0x5, 0xff, 0xff, 0x30, 0x40, - 0x0, 0xff, 0xf0, 0x4, 0xff, 0xff, 0xf0, 0xc, 0x0, 0xf8, 0xcc, 0xce, - 0xd0, 0xd2, 0xd4, 0xd6, 0xac, 0x31, 0x8, 0x0, 0xfd, 0x1a, 0x29, 0xe, - 0x11, 0x0, 0xfc, 0x5, 0x33, 0x40, 0x1b, 0x8, 0x0, 0xf8, 0x4f, 0xd4, - 0xf3, 0xf5, 0xf8, 0xfa, 0xfc, 0x6d, 0xe, 0x0, 0xff, 0xf0, 0x4, 0xff, - 0xff, 0xf0, 0x4, 0x0, 0xf9, 0xd, 0x4c, 0x75, 0x80, 0x73, 0x52, 0x19, - 0xd, 0x0, 0xff, 0x80, 0x5, 0xff, 0xff, 0x60, 0xd, 0x0, 0xf8, 0xb, - 0x3c, 0x69, 0x7a, 0x80, 0x72, 0x52, 0x20, 0x15, 0x0, 0xf7, 0x5, 0x34, - 0x63, 0x76, 0x80, 0x78, 0x69, 0x45, 0x15, 0x9, 0x0, 0xff, 0xa0, 0x5, - 0xff, 0xff, 0x30, 0x1e, 0x0, 0xf9, 0x6, 0x41, 0x6e, 0x80, 0x75, 0x5b, - 0x25, 0x1b, 0x0, 0xff, 0xf0, 0x4, 0xff, 0xff, 0xf0, 0xc, 0x0, 0xf6, - 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0x8b, 0x16, 0x24, 0x0, - 0xf6, 0x2a, 0xb2, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, 0xfc, 0x6d, 0xe, - 0x0, 0xff, 0xf0, 0x4, 0xff, 0xff, 0xf0, 0x2, 0x0, 0xfd, 0x1f, 0x9d, - 0xf9, 0x6, 0xff, 0xfe, 0xc2, 0x52, 0xb, 0x0, 0xff, 0x80, 0x5, 0xff, - 0xff, 0x60, 0xb, 0x0, 0xfd, 0x40, 0xad, 0xf7, 0x7, 0xff, 0xfd, 0xd3, - 0x75, 0xc, 0x10, 0x0, 0xfd, 0x2a, 0x9c, 0xee, 0x8, 0xff, 0xfd, 0xd0, - 0x6c, 0x8, 0x6, 0x0, 0xff, 0xa0, 0x5, 0xff, 0xff, 0x30, 0x9, 0x0, - 0xfb, 0x33, 0xcc, 0xff, 0xd2, 0x30, 0x6, 0x0, 0xfa, 0x1, 0x81, 0xf1, - 0xfd, 0xb7, 0x17, 0x2, 0x0, 0xfd, 0x10, 0x87, 0xef, 0x6, 0xff, 0xfd, - 0xd4, 0x6a, 0x4, 0xa, 0x0, 0xfb, 0x19, 0xb9, 0xfe, 0xf0, 0x7e, 0x5, - 0x0, 0xfe, 0x2f, 0x7f, 0x2, 0x90, 0xff, 0xf9, 0x4, 0xff, 0xff, 0xf9, - 0x3, 0x90, 0xfe, 0x86, 0x44, 0x7, 0x0, 0xf4, 0xcc, 0xce, 0xd0, 0xd2, - 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xd4, 0x68, 0x5, 0x20, 0x0, 0xf4, 0x11, - 0x8a, 0xe9, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, 0xfc, 0x6d, 0xe, - 0x0, 0xff, 0xf0, 0x4, 0xff, 0xfc, 0xf0, 0x0, 0x6c, 0xf7, 0xa, 0xff, - 0xfe, 0xbe, 0x1a, 0x9, 0x0, 0xff, 0x80, 0x5, 0xff, 0xff, 0x60, 0x9, - 0x0, 0xfe, 0x20, 0xbb, 0xc, 0xff, 0xfe, 0xec, 0x60, 0xd, 0x0, 0xfd, - 0xa, 0x93, 0xfe, 0xc, 0xff, 0xfe, 0xda, 0x2d, 0x5, 0x0, 0xff, 0xa0, - 0x5, 0xff, 0xff, 0x30, 0x8, 0x0, 0xfe, 0x3a, 0xf1, 0x3, 0xff, 0xfe, - 0xe7, 0xf, 0x5, 0x0, 0xff, 0x62, 0x4, 0xff, 0xfc, 0xba, 0x0, 0x4a, - 0xe9, 0xa, 0xff, 0xfe, 0xd8, 0x30, 0x9, 0x0, 0xff, 0xbd, 0x4, 0xff, - 0xff, 0x5d, 0x3, 0x0, 0xfe, 0x48, 0xfb, 0xe, 0xff, 0xff, 0x73, 0x6, - 0x0, 0xf3, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, - 0xe0, 0xc1, 0x42, 0x1d, 0x0, 0xf2, 0x4, 0x63, 0xd9, 0xe9, 0xeb, 0xed, - 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, 0xfc, 0x6d, 0xe, 0x0, 0xff, 0xf0, - 0x4, 0xff, 0xfe, 0xf0, 0x8e, 0xd, 0xff, 0xfe, 0xea, 0x2d, 0x8, 0x0, - 0xff, 0x80, 0x5, 0xff, 0xff, 0x60, 0x8, 0x0, 0xfe, 0x47, 0xf2, 0xf, - 0xff, 0xfe, 0xa7, 0x6, 0xa, 0x0, 0xfe, 0x1c, 0xd3, 0xf, 0xff, 0xfe, - 0xe7, 0xc, 0x4, 0x0, 0xff, 0xa0, 0x5, 0xff, 0xff, 0x30, 0x7, 0x0, - 0xfe, 0x42, 0xf6, 0x5, 0xff, 0xff, 0x52, 0x5, 0x0, 0xff, 0xb3, 0x5, - 0xff, 0xfe, 0x6e, 0xfd, 0xc, 0xff, 0xfe, 0xf8, 0x4e, 0x7, 0x0, 0xff, - 0xf, 0x5, 0xff, 0xff, 0xad, 0x3, 0x0, 0xff, 0xbc, 0xf, 0xff, 0xff, - 0xef, 0x6, 0x0, 0xf1, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, - 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0x9e, 0x6, 0x1a, 0x0, 0xf1, 0x22, 0xbe, - 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, 0xfc, - 0x66, 0xe, 0x0, 0xff, 0xf0, 0x14, 0xff, 0xfe, 0xeb, 0x21, 0x7, 0x0, - 0xff, 0x80, 0x5, 0xff, 0xff, 0x60, 0x7, 0x0, 0xfe, 0x4e, 0xfa, 0x11, - 0xff, 0xfe, 0xb9, 0x5, 0x8, 0x0, 0xfe, 0x15, 0xdc, 0x11, 0xff, 0xff, - 0x5b, 0x4, 0x0, 0xff, 0xa0, 0x5, 0xff, 0xff, 0x30, 0x6, 0x0, 0xfe, - 0x42, 0xf6, 0x6, 0xff, 0xff, 0x36, 0x5, 0x0, 0xff, 0xc0, 0x14, 0xff, - 0xfe, 0xfa, 0x40, 0x6, 0x0, 0xff, 0x20, 0x5, 0xff, 0xff, 0xc0, 0x3, - 0x0, 0xff, 0xc9, 0xf, 0xff, 0xff, 0xfd, 0x6, 0x0, 0xf1, 0xcc, 0xce, - 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, - 0x66, 0x1a, 0x0, 0xf1, 0xa9, 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, - 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, 0xfc, 0x64, 0xe, 0x0, 0xff, 0xf0, 0xb, - 0xff, 0xfe, 0xf3, 0xfd, 0x8, 0xff, 0xfe, 0xcc, 0x4, 0x6, 0x0, 0xff, - 0x80, 0x5, 0xff, 0xff, 0x60, 0x6, 0x0, 0xfe, 0x2c, 0xf4, 0x8, 0xff, - 0xfd, 0xf6, 0xf0, 0xfe, 0x8, 0xff, 0xff, 0x96, 0x7, 0x0, 0xfe, 0x2, - 0xbe, 0x9, 0xff, 0xfe, 0xf9, 0xf8, 0x7, 0xff, 0xff, 0x6d, 0x4, 0x0, - 0xff, 0xa0, 0x5, 0xff, 0xff, 0x30, 0x5, 0x0, 0xfe, 0x42, 0xf6, 0x6, - 0xff, 0xff, 0x9f, 0x6, 0x0, 0xff, 0xc0, 0xb, 0xff, 0xfe, 0xf6, 0xfa, - 0x8, 0xff, 0xfe, 0xe8, 0x16, 0x5, 0x0, 0xff, 0x20, 0x5, 0xff, 0xff, - 0xc0, 0x3, 0x0, 0xff, 0x7a, 0xf, 0xff, 0xff, 0xb3, 0x6, 0x0, 0xf1, - 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, - 0xe5, 0xe7, 0x90, 0x1a, 0x0, 0xf1, 0xd2, 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, - 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, 0xfc, 0x64, 0xe, 0x0, 0xff, - 0xf0, 0x8, 0xff, 0xf8, 0xb6, 0x4d, 0xb, 0x0, 0x2, 0x2d, 0x84, 0xf3, - 0x6, 0xff, 0xff, 0x6e, 0x6, 0x0, 0xff, 0x80, 0x5, 0xff, 0xff, 0x60, - 0x5, 0x0, 0xfe, 0x3, 0xcb, 0x6, 0xff, 0xfd, 0xed, 0x7c, 0x24, 0x2, - 0x0, 0xfd, 0xd, 0x4d, 0xbc, 0x7, 0xff, 0xff, 0x46, 0x6, 0x0, 0xff, - 0x65, 0x7, 0xff, 0xfd, 0xb7, 0x56, 0x15, 0x2, 0x0, 0xfd, 0x1b, 0x59, - 0xd4, 0x4, 0xff, 0xff, 0x33, 0x4, 0x0, 0xff, 0xa0, 0x5, 0xff, 0xff, - 0x30, 0x4, 0x0, 0xfe, 0x4e, 0xf9, 0x6, 0xff, 0xfe, 0xa0, 0x3, 0x6, - 0x0, 0xff, 0xc0, 0x8, 0xff, 0xfd, 0xcd, 0x5d, 0x13, 0x2, 0x0, 0xfd, - 0x21, 0x71, 0xe6, 0x6, 0xff, 0xff, 0x9a, 0x5, 0x0, 0xff, 0x20, 0x5, - 0xff, 0xff, 0xc0, 0x3, 0x0, 0xfd, 0x3, 0x82, 0xd9, 0x2, 0xe0, 0xff, - 0xfe, 0x4, 0xff, 0xff, 0xfe, 0x3, 0xe0, 0xfd, 0xde, 0xa1, 0x12, 0x6, - 0x0, 0xf1, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, - 0xe0, 0xe2, 0xe5, 0xe7, 0x92, 0x1a, 0x0, 0xf1, 0xd4, 0xe3, 0xe5, 0xe7, - 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, 0xfc, 0x64, 0xe, - 0x0, 0xff, 0xf0, 0x6, 0xff, 0xfe, 0xfd, 0x65, 0x7, 0x0, 0xfe, 0x23, - 0xdc, 0x5, 0xff, 0xfe, 0xea, 0x7, 0x5, 0x0, 0xff, 0x80, 0x5, 0xff, - 0xff, 0x60, 0x5, 0x0, 0xff, 0x5f, 0x6, 0xff, 0xfe, 0xc0, 0x16, 0x7, - 0x0, 0xfe, 0x66, 0xfd, 0x5, 0xff, 0xfe, 0xd6, 0x1, 0x4, 0x0, 0xfe, - 0x6, 0xe6, 0x5, 0xff, 0xfe, 0xf6, 0x53, 0x7, 0x0, 0xfb, 0x7, 0x7f, - 0xe5, 0xe9, 0x79, 0x5, 0x0, 0xff, 0xa0, 0x5, 0xff, 0xff, 0x30, 0x3, - 0x0, 0xfe, 0x4e, 0xfa, 0x6, 0xff, 0xfe, 0x90, 0x1, 0x7, 0x0, 0xff, - 0xc0, 0x7, 0xff, 0xfe, 0x8e, 0x3, 0x6, 0x0, 0xfe, 0x11, 0xbe, 0x5, - 0xff, 0xfe, 0xfe, 0x21, 0x4, 0x0, 0xff, 0x20, 0x5, 0xff, 0xff, 0xc0, - 0x8, 0x0, 0xff, 0xf0, 0x4, 0xff, 0xff, 0xf0, 0xc, 0x0, 0xf1, 0xcc, - 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, - 0xe7, 0x92, 0x1a, 0x0, 0xf1, 0xd4, 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, - 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, 0xfc, 0x64, 0xe, 0x0, 0xff, 0xf0, - 0x6, 0xff, 0xff, 0x74, 0x9, 0x0, 0xfe, 0x20, 0xf1, 0x5, 0xff, 0xff, - 0x5c, 0x5, 0x0, 0xff, 0x80, 0x5, 0xff, 0xff, 0x60, 0x5, 0x0, 0xff, - 0xd5, 0x5, 0xff, 0xfe, 0xcd, 0xa, 0x9, 0x0, 0xff, 0x60, 0x6, 0xff, - 0xff, 0x4c, 0x4, 0x0, 0xff, 0x5c, 0x6, 0xff, 0xff, 0x4b, 0x12, 0x0, - 0xff, 0xa0, 0x5, 0xff, 0xff, 0x30, 0x2, 0x0, 0xfe, 0x4e, 0xfa, 0x6, - 0xff, 0xff, 0x7f, 0x9, 0x0, 0xff, 0xc0, 0x6, 0xff, 0xff, 0xa3, 0x9, - 0x0, 0xfe, 0xa, 0xd8, 0x5, 0xff, 0xff, 0x8a, 0x4, 0x0, 0xff, 0x20, - 0x5, 0xff, 0xff, 0xc0, 0x8, 0x0, 0xff, 0xf0, 0x4, 0xff, 0xff, 0xf0, - 0xc, 0x0, 0xf1, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, - 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0x92, 0x1a, 0x0, 0xf1, 0xd4, 0xe3, 0xe5, - 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, 0xfc, 0x64, - 0xe, 0x0, 0xff, 0xf0, 0x5, 0xff, 0xfe, 0xc7, 0x2, 0xa, 0x0, 0xff, - 0x68, 0x5, 0xff, 0xff, 0xae, 0x5, 0x0, 0xff, 0x80, 0x5, 0xff, 0xff, - 0x60, 0x4, 0x0, 0xff, 0x2f, 0x5, 0xff, 0xfe, 0xfc, 0x2a, 0xb, 0x0, - 0xff, 0xaf, 0x5, 0xff, 0xff, 0xa7, 0x4, 0x0, 0xff, 0xb0, 0x5, 0xff, - 0xff, 0x9e, 0x13, 0x0, 0xff, 0xa0, 0x5, 0xff, 0xfc, 0x30, 0x0, 0x5a, - 0xfa, 0x6, 0xff, 0xff, 0x6e, 0xa, 0x0, 0xff, 0xc0, 0x5, 0xff, 0xfe, - 0xea, 0xe, 0xa, 0x0, 0xff, 0x38, 0x5, 0xff, 0xff, 0xda, 0x4, 0x0, - 0xff, 0x20, 0x5, 0xff, 0xff, 0xc0, 0x8, 0x0, 0xff, 0xf0, 0x4, 0xff, - 0xff, 0xf0, 0xc, 0x0, 0xf1, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, - 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0x92, 0x1a, 0x0, 0xf1, 0xd4, - 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, - 0xfc, 0x64, 0xe, 0x0, 0xff, 0xf0, 0x5, 0xff, 0xff, 0x50, 0xb, 0x0, - 0xfe, 0x7, 0xe9, 0x4, 0xff, 0xff, 0xef, 0x5, 0x0, 0xff, 0x80, 0x5, - 0xff, 0xff, 0x60, 0x4, 0x0, 0xff, 0x79, 0x5, 0xff, 0xff, 0xa6, 0xc, - 0x0, 0xff, 0x2f, 0x5, 0xff, 0xff, 0xef, 0x3, 0x0, 0xfe, 0x1, 0xf2, - 0x5, 0xff, 0xff, 0x27, 0x13, 0x0, 0xff, 0xa0, 0x5, 0xff, 0xfd, 0x30, - 0x5b, 0xfd, 0x5, 0xff, 0xfe, 0xfd, 0x5e, 0xb, 0x0, 0xff, 0xc0, 0x5, - 0xff, 0xff, 0x80, 0xc, 0x0, 0xff, 0xc2, 0x5, 0xff, 0xff, 0x1c, 0x3, - 0x0, 0xff, 0x20, 0x5, 0xff, 0xff, 0xc0, 0x8, 0x0, 0xff, 0xf0, 0x4, - 0xff, 0xff, 0xf0, 0xc, 0x0, 0xf1, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, - 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0x92, 0x1a, 0x0, 0xf1, - 0xd4, 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, - 0xfa, 0xfc, 0x64, 0xe, 0x0, 0xff, 0xf0, 0x4, 0xff, 0xfe, 0xf8, 0x8, - 0xc, 0x0, 0xff, 0xa1, 0x5, 0xff, 0xff, 0x1b, 0x4, 0x0, 0xff, 0x80, - 0x5, 0xff, 0xff, 0x60, 0x4, 0x0, 0xff, 0xa9, 0x5, 0xff, 0xff, 0x4f, - 0xd, 0x0, 0xff, 0xd7, 0x5, 0xff, 0xff, 0x20, 0x2, 0x0, 0xff, 0x20, - 0x5, 0xff, 0xff, 0xd6, 0x14, 0x0, 0xff, 0xa0, 0x5, 0xff, 0xfe, 0x8b, - 0xfd, 0x5, 0xff, 0xfe, 0xf9, 0x4f, 0xc, 0x0, 0xff, 0xc0, 0x5, 0xff, - 0xff, 0x30, 0xc, 0x0, 0xff, 0x73, 0x5, 0xff, 0xff, 0x48, 0x3, 0x0, - 0xff, 0x20, 0x5, 0xff, 0xff, 0xc0, 0x8, 0x0, 0xff, 0xf0, 0x4, 0xff, - 0xff, 0xf0, 0xc, 0x0, 0xf1, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, - 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0x92, 0x1a, 0x0, 0xf1, 0xd4, - 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, - 0xfc, 0x64, 0xe, 0x0, 0xff, 0xf0, 0x4, 0xff, 0xff, 0xca, 0xd, 0x0, - 0xff, 0x6c, 0x5, 0xff, 0xff, 0x39, 0x4, 0x0, 0xff, 0x80, 0x5, 0xff, - 0xff, 0x60, 0x4, 0x0, 0xff, 0xcc, 0x5, 0xff, 0xff, 0x18, 0xd, 0x0, - 0xff, 0xa0, 0x5, 0xff, 0xff, 0x43, 0x2, 0x0, 0xff, 0x3f, 0x5, 0xff, - 0xff, 0xa0, 0x14, 0x0, 0xff, 0xa0, 0xc, 0xff, 0xff, 0x48, 0xd, 0x0, - 0xff, 0xc0, 0x4, 0xff, 0xfe, 0xf7, 0x2, 0xc, 0x0, 0xff, 0x3d, 0x5, - 0xff, 0xff, 0x65, 0x3, 0x0, 0xff, 0x20, 0x5, 0xff, 0xff, 0xc0, 0x8, - 0x0, 0xff, 0xf0, 0x4, 0xff, 0xff, 0xf0, 0xc, 0x0, 0xf1, 0xcc, 0xce, - 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, - 0x92, 0x1a, 0x0, 0xf1, 0xd4, 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, - 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, 0xfc, 0x64, 0xe, 0x0, 0xff, 0xf0, 0x4, - 0xff, 0xff, 0xb5, 0xd, 0x0, 0xff, 0x57, 0x5, 0xff, 0xff, 0x46, 0x4, - 0x0, 0xff, 0x80, 0x5, 0xff, 0xff, 0x60, 0x4, 0x0, 0xff, 0xdb, 0x4, - 0xff, 0xff, 0xfd, 0xe, 0x0, 0xff, 0x84, 0x5, 0xff, 0xff, 0x52, 0x2, - 0x0, 0xff, 0x4e, 0x5, 0xff, 0xff, 0x8a, 0x14, 0x0, 0xff, 0xa0, 0xc, - 0xff, 0xfe, 0xab, 0x3, 0xc, 0x0, 0xff, 0xc0, 0x4, 0xff, 0xff, 0xe4, - 0xd, 0x0, 0xff, 0x28, 0x5, 0xff, 0xff, 0x72, 0x3, 0x0, 0xff, 0x20, - 0x5, 0xff, 0xff, 0xc0, 0x8, 0x0, 0xff, 0xf0, 0x4, 0xff, 0xff, 0xf0, - 0xc, 0x0, 0xf1, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, - 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0x92, 0x1a, 0x0, 0xf1, 0xd4, 0xe3, 0xe5, - 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, 0xfc, 0x64, - 0xe, 0x0, 0xff, 0xf0, 0x4, 0xff, 0xff, 0xb4, 0xd, 0x0, 0xff, 0x56, - 0x5, 0xff, 0xff, 0x47, 0x4, 0x0, 0xff, 0x80, 0x5, 0xff, 0xff, 0x60, - 0x4, 0x0, 0xff, 0xdd, 0x4, 0xff, 0xff, 0xfb, 0xe, 0x0, 0xff, 0x81, - 0x5, 0xff, 0xff, 0x54, 0x2, 0x0, 0xff, 0x50, 0x5, 0xff, 0xff, 0x87, - 0x14, 0x0, 0xff, 0xa0, 0xd, 0xff, 0xff, 0x95, 0xc, 0x0, 0xff, 0xc0, - 0x4, 0xff, 0xff, 0xe3, 0xd, 0x0, 0xff, 0x27, 0x5, 0xff, 0xff, 0x73, - 0x3, 0x0, 0xff, 0x20, 0x5, 0xff, 0xff, 0xc0, 0x8, 0x0, 0xff, 0xf0, - 0x4, 0xff, 0xff, 0xf0, 0xc, 0x0, 0xf1, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, - 0xd6, 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0x92, 0x1a, 0x0, - 0xf1, 0xd4, 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, - 0xf8, 0xfa, 0xfc, 0x64, 0xe, 0x0, 0xff, 0xf0, 0x4, 0xff, 0xff, 0xc8, - 0xd, 0x0, 0xff, 0x6a, 0x5, 0xff, 0xff, 0x3b, 0x4, 0x0, 0xff, 0x80, - 0x5, 0xff, 0xff, 0x60, 0x4, 0x0, 0xff, 0xcf, 0x5, 0xff, 0xff, 0x10, - 0xd, 0x0, 0xff, 0x9a, 0x5, 0xff, 0xff, 0x46, 0x2, 0x0, 0xff, 0x40, - 0x5, 0xff, 0xff, 0x9c, 0x14, 0x0, 0xff, 0xa0, 0xe, 0xff, 0xff, 0x7f, - 0xb, 0x0, 0xff, 0xc0, 0x4, 0xff, 0xfe, 0xf6, 0x1, 0xc, 0x0, 0xff, - 0x3b, 0x5, 0xff, 0xff, 0x67, 0x3, 0x0, 0xff, 0x20, 0x5, 0xff, 0xff, - 0xc0, 0x8, 0x0, 0xff, 0xf0, 0x4, 0xff, 0xff, 0xf0, 0xc, 0x0, 0xf1, - 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, - 0xe5, 0xe7, 0xa2, 0x19, 0x0, 0xf0, 0x15, 0xe1, 0xe3, 0xe5, 0xe7, 0xe9, - 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, 0xfc, 0x64, 0xe, 0x0, - 0xff, 0xf0, 0x4, 0xff, 0xfe, 0xf6, 0x6, 0xc, 0x0, 0xff, 0x9e, 0x5, - 0xff, 0xff, 0x1f, 0x4, 0x0, 0xff, 0x80, 0x5, 0xff, 0xff, 0x60, 0x4, - 0x0, 0xff, 0xb0, 0x5, 0xff, 0xff, 0x44, 0xd, 0x0, 0xff, 0xcc, 0x5, - 0xff, 0xff, 0x27, 0x2, 0x0, 0xff, 0x25, 0x5, 0xff, 0xff, 0xd0, 0x14, - 0x0, 0xff, 0xa0, 0x7, 0xff, 0xff, 0xfc, 0x7, 0xff, 0xff, 0x65, 0xa, - 0x0, 0xff, 0xc0, 0x5, 0xff, 0xff, 0x2b, 0xc, 0x0, 0xff, 0x70, 0x5, - 0xff, 0xff, 0x4b, 0x3, 0x0, 0xff, 0x20, 0x5, 0xff, 0xff, 0xc0, 0x8, - 0x0, 0xff, 0xf0, 0x4, 0xff, 0xff, 0xf0, 0xc, 0x0, 0xf0, 0xcc, 0xce, - 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, - 0xe5, 0x3b, 0x17, 0x0, 0xef, 0xc, 0x9c, 0xe1, 0xe3, 0xe5, 0xe7, 0xe9, - 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, 0xfc, 0x64, 0xe, 0x0, - 0xff, 0xf0, 0x5, 0xff, 0xff, 0x49, 0xb, 0x0, 0xfe, 0x6, 0xe6, 0x4, - 0xff, 0xfe, 0xf4, 0x1, 0x4, 0x0, 0xff, 0x80, 0x5, 0xff, 0xff, 0x60, - 0x4, 0x0, 0xff, 0x80, 0x5, 0xff, 0xff, 0x99, 0xc, 0x0, 0xff, 0x21, - 0x5, 0xff, 0xfe, 0xf7, 0x3, 0x2, 0x0, 0xfe, 0x3, 0xf7, 0x4, 0xff, - 0xfe, 0xfe, 0x22, 0x13, 0x0, 0xff, 0xa0, 0x6, 0xff, 0xfd, 0xc9, 0x26, - 0xd3, 0x6, 0xff, 0xfe, 0xfd, 0x52, 0x9, 0x0, 0xff, 0xc0, 0x5, 0xff, - 0xff, 0x78, 0xc, 0x0, 0xff, 0xbd, 0x5, 0xff, 0xff, 0x22, 0x3, 0x0, - 0xff, 0x20, 0x5, 0xff, 0xff, 0xc0, 0x8, 0x0, 0xff, 0xf0, 0x4, 0xff, - 0xff, 0xf0, 0xc, 0x0, 0xf2, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, - 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0x2, 0xe9, 0xfe, 0x8d, 0x13, - 0x13, 0x0, 0xed, 0x2, 0x53, 0xc9, 0xdf, 0xe1, 0xe3, 0xe5, 0xe7, 0xe9, - 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, 0xfc, 0x63, 0xe, 0x0, - 0xff, 0xf0, 0x5, 0xff, 0xff, 0xbe, 0xb, 0x0, 0xff, 0x60, 0x5, 0xff, - 0xff, 0xb4, 0x5, 0x0, 0xff, 0x80, 0x5, 0xff, 0xff, 0x60, 0x4, 0x0, - 0xff, 0x3c, 0x5, 0xff, 0xfe, 0xf7, 0x1d, 0xb, 0x0, 0xff, 0x9d, 0x5, - 0xff, 0xff, 0xb3, 0x4, 0x0, 0xff, 0xba, 0x5, 0xff, 0xff, 0x9a, 0x13, - 0x0, 0xff, 0xa0, 0x5, 0xff, 0xfb, 0xbd, 0xc, 0x0, 0x1b, 0xdc, 0x6, - 0xff, 0xfe, 0xf8, 0x3f, 0x8, 0x0, 0xff, 0xc0, 0x5, 0xff, 0xfe, 0xe4, - 0xa, 0xa, 0x0, 0xff, 0x32, 0x5, 0xff, 0xff, 0xe2, 0x4, 0x0, 0xff, - 0x20, 0x5, 0xff, 0xff, 0xc0, 0x8, 0x0, 0xff, 0xf0, 0x4, 0xff, 0xff, - 0xf0, 0xc, 0x0, 0xec, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, - 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xe0, 0x66, 0x4, - 0x10, 0x0, 0xec, 0x31, 0xad, 0xdb, 0xdd, 0xdf, 0xe1, 0xe3, 0xe5, 0xe7, - 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, 0xfc, 0x5a, 0xe, - 0x0, 0xff, 0xf0, 0x6, 0xff, 0xff, 0x65, 0x9, 0x0, 0xfe, 0x19, 0xed, - 0x5, 0xff, 0xff, 0x69, 0x5, 0x0, 0xff, 0x80, 0x5, 0xff, 0xff, 0x60, - 0x4, 0x0, 0xfe, 0x2, 0xe4, 0x5, 0xff, 0xfe, 0xbd, 0x3, 0x9, 0x0, - 0xfe, 0x4a, 0xfe, 0x5, 0xff, 0xff, 0x5d, 0x4, 0x0, 0xff, 0x6b, 0x6, - 0xff, 0xff, 0x48, 0x12, 0x0, 0xff, 0xa0, 0x5, 0xff, 0xff, 0x30, 0x3, - 0x0, 0xfe, 0x24, 0xe5, 0x6, 0xff, 0xfe, 0xf1, 0x2f, 0x7, 0x0, 0xff, - 0xc0, 0x6, 0xff, 0xff, 0x94, 0x9, 0x0, 0xfe, 0x7, 0xd0, 0x5, 0xff, - 0xff, 0x94, 0x4, 0x0, 0xff, 0x20, 0x5, 0xff, 0xff, 0xc0, 0x8, 0x0, - 0xff, 0xf0, 0x4, 0xff, 0xff, 0xf0, 0xc, 0x0, 0xeb, 0xcc, 0xce, 0xd0, - 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0xe9, - 0xeb, 0xed, 0xef, 0xf1, 0xc9, 0x3e, 0xd, 0x0, 0xea, 0x16, 0x8a, 0xd7, - 0xd9, 0xdb, 0xdd, 0xdf, 0xe1, 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, - 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, 0xfc, 0x5a, 0xe, 0x0, 0xff, 0xf0, 0x6, - 0xff, 0xfe, 0xfa, 0x4e, 0x7, 0x0, 0xfe, 0x18, 0xd3, 0x5, 0xff, 0xfe, - 0xf3, 0xd, 0x5, 0x0, 0xff, 0x80, 0x5, 0xff, 0xff, 0x60, 0x5, 0x0, - 0xff, 0x72, 0x6, 0xff, 0xfe, 0xab, 0xc, 0x7, 0x0, 0xfe, 0x4a, 0xf6, - 0x5, 0xff, 0xfe, 0xe2, 0x6, 0x4, 0x0, 0xfe, 0xe, 0xf4, 0x5, 0xff, - 0xfe, 0xf1, 0x43, 0x8, 0x0, 0xfc, 0x28, 0x92, 0x9c, 0x4a, 0x5, 0x0, - 0xff, 0xa0, 0x5, 0xff, 0xff, 0x30, 0x4, 0x0, 0xfe, 0x2d, 0xec, 0x6, - 0xff, 0xfe, 0xe7, 0x22, 0x6, 0x0, 0xff, 0xc0, 0x7, 0xff, 0xff, 0x75, - 0x7, 0x0, 0xfe, 0x9, 0xb2, 0x6, 0xff, 0xff, 0x2d, 0x4, 0x0, 0xff, - 0x20, 0x5, 0xff, 0xff, 0xc0, 0x8, 0x0, 0xff, 0xe7, 0x4, 0xff, 0xfe, - 0xfa, 0x3, 0xb, 0x0, 0xe9, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, - 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, - 0xf3, 0xf5, 0xa6, 0x1e, 0x9, 0x0, 0xe8, 0x7, 0x66, 0xcb, 0xd5, 0xd7, - 0xd9, 0xdb, 0xdd, 0xdf, 0xe1, 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, - 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, 0xfc, 0x5a, 0xe, 0x0, 0xff, 0xf0, 0x8, - 0xff, 0xfe, 0x9a, 0x30, 0x3, 0x0, 0xfd, 0x14, 0x6b, 0xea, 0x6, 0xff, - 0xff, 0x82, 0x6, 0x0, 0xff, 0x80, 0x5, 0xff, 0xff, 0x60, 0x5, 0x0, - 0xfe, 0xa, 0xde, 0x6, 0xff, 0xfd, 0xde, 0x61, 0xd, 0x3, 0x0, 0xfe, - 0x33, 0xa1, 0x7, 0xff, 0xff, 0x5f, 0x6, 0x0, 0xff, 0x83, 0x6, 0xff, - 0xfd, 0xfe, 0x9f, 0x32, 0x4, 0x0, 0xfd, 0x1a, 0x84, 0xfa, 0x3, 0xff, - 0xff, 0x50, 0x4, 0x0, 0xff, 0xa0, 0x5, 0xff, 0xff, 0x30, 0x5, 0x0, - 0xfe, 0x37, 0xf3, 0x6, 0xff, 0xfe, 0xdc, 0x15, 0x5, 0x0, 0xff, 0xc0, - 0x8, 0xff, 0xfd, 0xb5, 0x3f, 0x3, 0x2, 0x0, 0xfd, 0xc, 0x59, 0xd8, - 0x6, 0xff, 0xff, 0xb0, 0x5, 0x0, 0xff, 0x20, 0x5, 0xff, 0xff, 0xc0, - 0x8, 0x0, 0xff, 0xd6, 0x5, 0xff, 0xfa, 0x82, 0xf, 0x21, 0x5c, 0x4f, - 0x1, 0x6, 0x0, 0xe7, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, - 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, - 0xf5, 0xf7, 0xf1, 0x7e, 0x6, 0x6, 0x0, 0xe7, 0x3f, 0xb5, 0xd1, 0xd3, - 0xd5, 0xd7, 0xd9, 0xdb, 0xdd, 0xdf, 0xe1, 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, - 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, 0xfc, 0x5a, 0xe, 0x0, 0xff, - 0xf0, 0xa, 0xff, 0xfc, 0xed, 0xd4, 0xe2, 0xfd, 0x7, 0xff, 0xfe, 0xdf, - 0xb, 0x6, 0x0, 0xff, 0x80, 0x5, 0xff, 0xff, 0x60, 0x6, 0x0, 0xfe, - 0x40, 0xfd, 0x7, 0xff, 0xfc, 0xfd, 0xdd, 0xd4, 0xef, 0x8, 0xff, 0xff, - 0xb4, 0x7, 0x0, 0xfe, 0xb, 0xde, 0x8, 0xff, 0xfc, 0xef, 0xd6, 0xd9, - 0xec, 0x6, 0xff, 0xff, 0xb1, 0x4, 0x0, 0xff, 0xa0, 0x5, 0xff, 0xff, - 0x30, 0x6, 0x0, 0xfe, 0x42, 0xf9, 0x6, 0xff, 0xff, 0xbf, 0x5, 0x0, - 0xff, 0xc0, 0xa, 0xff, 0xfc, 0xf3, 0xd7, 0xdc, 0xfa, 0x7, 0xff, 0xfe, - 0xf4, 0x22, 0x5, 0x0, 0xff, 0x20, 0x5, 0xff, 0xff, 0xc0, 0x8, 0x0, - 0xff, 0xbb, 0xa, 0xff, 0xff, 0x74, 0x6, 0x0, 0xe7, 0xcc, 0xce, 0xd0, - 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0xe9, - 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf7, 0xf9, 0xfb, 0x9d, 0x5, 0x0, - 0xe6, 0x12, 0xcd, 0xcf, 0xd1, 0xd3, 0xd5, 0xd7, 0xd9, 0xdb, 0xdd, 0xdf, - 0xe1, 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, - 0xfa, 0xfc, 0x5a, 0xe, 0x0, 0xff, 0xf0, 0x14, 0xff, 0xfe, 0xfa, 0x36, - 0x7, 0x0, 0xff, 0x80, 0x5, 0xff, 0xff, 0x60, 0x7, 0x0, 0xff, 0x6b, - 0x12, 0xff, 0xfe, 0xd2, 0xf, 0x8, 0x0, 0xfe, 0x31, 0xf6, 0x11, 0xff, - 0xff, 0xb4, 0x4, 0x0, 0xff, 0xa0, 0x5, 0xff, 0xff, 0x30, 0x7, 0x0, - 0xfe, 0x4f, 0xfd, 0x6, 0xff, 0xff, 0x2e, 0x4, 0x0, 0xff, 0xc0, 0x15, - 0xff, 0xff, 0x5a, 0x6, 0x0, 0xff, 0x20, 0x5, 0xff, 0xff, 0xc0, 0x8, - 0x0, 0xff, 0x7b, 0xa, 0xff, 0xff, 0xc5, 0x6, 0x0, 0xe7, 0xcc, 0xce, - 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, - 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf7, 0xf9, 0xfb, 0xf6, 0x5, - 0x0, 0xe6, 0x2b, 0xcd, 0xcf, 0xd1, 0xd3, 0xd5, 0xd7, 0xd9, 0xdb, 0xdd, - 0xdf, 0xe1, 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, - 0xf8, 0xfa, 0xfc, 0x58, 0xe, 0x0, 0xff, 0xed, 0x4, 0xff, 0xfe, 0xf3, - 0xdc, 0xd, 0xff, 0xfe, 0xfa, 0x4e, 0x8, 0x0, 0xff, 0x70, 0x5, 0xff, - 0xff, 0x55, 0x8, 0x0, 0xfe, 0x69, 0xfd, 0xf, 0xff, 0xfe, 0xc5, 0x14, - 0xa, 0x0, 0xfe, 0x42, 0xf1, 0xf, 0xff, 0xfe, 0xfd, 0x48, 0x4, 0x0, - 0xff, 0x9b, 0x5, 0xff, 0xff, 0x29, 0x8, 0x0, 0xff, 0x5e, 0x6, 0xff, - 0xff, 0x3c, 0x4, 0x0, 0xff, 0xc0, 0x5, 0xff, 0xff, 0xcc, 0xe, 0xff, - 0xff, 0x69, 0x7, 0x0, 0xff, 0x13, 0x5, 0xff, 0xff, 0xb1, 0x8, 0x0, - 0xfe, 0x1e, 0xf6, 0x9, 0xff, 0xff, 0xc1, 0x6, 0x0, 0xe7, 0xa3, 0xce, - 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, - 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf7, 0xf9, 0xfb, 0xfd, 0x5, - 0x0, 0xe6, 0x2d, 0xcd, 0xcf, 0xd1, 0xd3, 0xd5, 0xd7, 0xd9, 0xdb, 0xdd, - 0xdf, 0xe1, 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, - 0xf8, 0xfa, 0xfc, 0x34, 0xe, 0x0, 0xff, 0xcd, 0x4, 0xff, 0xfd, 0xca, - 0x14, 0xb2, 0xb, 0xff, 0xfe, 0xdf, 0x36, 0x9, 0x0, 0xfe, 0x2e, 0xfd, - 0x3, 0xff, 0xfe, 0xf5, 0x17, 0x9, 0x0, 0xfe, 0x38, 0xd7, 0xc, 0xff, - 0xfd, 0xfa, 0x82, 0x7, 0xc, 0x0, 0xfe, 0x27, 0xcd, 0xd, 0xff, 0xfe, - 0xea, 0x4e, 0x5, 0x0, 0xff, 0x54, 0x4, 0xff, 0xfe, 0xe1, 0x3, 0x9, - 0x0, 0xff, 0x6e, 0x4, 0xff, 0xfe, 0xe4, 0x9, 0x4, 0x0, 0xff, 0xc0, - 0x5, 0xff, 0xfd, 0x17, 0x91, 0xfe, 0xa, 0xff, 0xfe, 0xef, 0x51, 0x9, - 0x0, 0xff, 0xcc, 0x4, 0xff, 0xff, 0x6c, 0x9, 0x0, 0xfe, 0x52, 0xf3, - 0x7, 0xff, 0xfe, 0xf9, 0x43, 0x6, 0x0, 0xe7, 0x1c, 0xa1, 0xd0, 0xd2, - 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0xe9, 0xeb, - 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf7, 0xf9, 0xfb, 0xfd, 0x5, 0x0, 0xe7, - 0x2d, 0xcd, 0xcf, 0xd1, 0xd3, 0xd5, 0xd7, 0xd9, 0xdb, 0xdd, 0xdf, 0xe1, - 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xed, - 0x6f, 0xf, 0x0, 0xfe, 0x55, 0xfe, 0x2, 0xff, 0xfe, 0xfd, 0x4d, 0x2, - 0x0, 0xfe, 0x4a, 0xc6, 0x7, 0xff, 0xfd, 0xe7, 0x7a, 0x9, 0xb, 0x0, - 0xfb, 0x66, 0xf4, 0xff, 0xe9, 0x4b, 0xb, 0x0, 0xfd, 0x4, 0x60, 0xcd, - 0x8, 0xff, 0xfd, 0xee, 0x95, 0x1e, 0xf, 0x0, 0xfd, 0x2, 0x60, 0xd0, - 0x9, 0xff, 0xfd, 0xcb, 0x6e, 0xc, 0x7, 0x0, 0xfb, 0x8b, 0xfc, 0xff, - 0xe0, 0x35, 0xb, 0x0, 0xfb, 0x6d, 0xf3, 0xff, 0xce, 0x2a, 0x5, 0x0, - 0xff, 0xc0, 0x5, 0xff, 0xfb, 0x10, 0x0, 0x35, 0xb4, 0xfe, 0x6, 0xff, - 0xfd, 0xf1, 0x90, 0x14, 0xa, 0x0, 0xfa, 0x26, 0xd5, 0xff, 0xfe, 0x9a, - 0x3, 0xa, 0x0, 0xfc, 0x16, 0x82, 0xd2, 0xfc, 0x2, 0xff, 0xfd, 0xf9, - 0xb1, 0x2e, 0x8, 0x0, 0xe8, 0x1, 0x4c, 0xbd, 0xd4, 0xd6, 0xd8, 0xda, - 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, - 0xf5, 0xf7, 0xf9, 0xfb, 0xfd, 0x5, 0x0, 0xe8, 0x2d, 0xcd, 0xcf, 0xd1, - 0xd3, 0xd5, 0xd7, 0xd9, 0xdb, 0xdd, 0xdf, 0xe1, 0xe3, 0xe5, 0xe7, 0xe9, - 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf4, 0x99, 0x17, 0x11, 0x0, 0xfc, 0x3c, - 0x95, 0x94, 0x3b, 0x5, 0x0, 0xf8, 0x26, 0x69, 0x8f, 0xa0, 0x93, 0x75, - 0x3f, 0x3, 0xe, 0x0, 0xfd, 0x8, 0x1f, 0x3, 0xf, 0x0, 0xf7, 0x21, - 0x59, 0x84, 0x96, 0x9d, 0x8e, 0x6f, 0x3d, 0x5, 0x14, 0x0, 0xf7, 0x25, - 0x5e, 0x8a, 0x99, 0x9c, 0x8c, 0x79, 0x4b, 0x18, 0xb, 0x0, 0xfd, 0xf, - 0x1f, 0x2, 0xd, 0x0, 0xfe, 0x6, 0x11, 0x7, 0x0, 0xff, 0xc0, 0x5, - 0xff, 0xff, 0x10, 0x3, 0x0, 0xf8, 0x1a, 0x5e, 0x8a, 0x9e, 0x95, 0x7d, - 0x49, 0x9, 0xe, 0x0, 0xfe, 0x1c, 0x10, 0xf, 0x0, 0xfc, 0x7, 0x1a, - 0x1f, 0x5, 0xc, 0x0, 0xea, 0xb, 0x72, 0xd2, 0xd8, 0xda, 0xdc, 0xde, - 0xe0, 0xe2, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf7, - 0xf9, 0xfb, 0xfd, 0x5, 0x0, 0xea, 0x2d, 0xcd, 0xcf, 0xd1, 0xd3, 0xd5, - 0xd7, 0xd9, 0xdb, 0xdd, 0xdf, 0xe1, 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, - 0xef, 0xf1, 0xbd, 0x32, 0x7f, 0x0, 0xf, 0x0, 0xff, 0xc0, 0x5, 0xff, - 0xff, 0x10, 0x3c, 0x0, 0xec, 0x1f, 0x99, 0xda, 0xdc, 0xde, 0xe0, 0xe2, - 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf7, 0xf9, 0xfb, - 0xfd, 0x5, 0x0, 0xeb, 0x2d, 0xcd, 0xcf, 0xd1, 0xd3, 0xd5, 0xd7, 0xd9, - 0xdb, 0xdd, 0xdf, 0xe1, 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xd7, 0x55, - 0x1, 0x7f, 0x0, 0x10, 0x0, 0xff, 0xc0, 0x5, 0xff, 0xff, 0x10, 0x3e, - 0x0, 0xee, 0x3f, 0xbc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, - 0xef, 0xf1, 0xf3, 0xf5, 0xf7, 0xf9, 0xfb, 0xfd, 0x5, 0x0, 0xed, 0x2d, - 0xcd, 0xcf, 0xd1, 0xd3, 0xd5, 0xd7, 0xd9, 0xdb, 0xdd, 0xdf, 0xe1, 0xe3, - 0xe5, 0xe7, 0xe9, 0xe4, 0x7b, 0xa, 0x7f, 0x0, 0x12, 0x0, 0xff, 0xc0, - 0x5, 0xff, 0xff, 0x10, 0x3f, 0x0, 0xef, 0x5, 0x68, 0xd5, 0xe2, 0xe5, - 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf7, 0xf9, 0xfb, 0xfd, - 0x5, 0x0, 0xef, 0x2d, 0xcd, 0xcf, 0xd1, 0xd3, 0xd5, 0xd7, 0xd9, 0xdb, - 0xdd, 0xdf, 0xe1, 0xe3, 0xe5, 0xe7, 0x9d, 0x1e, 0x7f, 0x0, 0x14, 0x0, - 0xff, 0xc0, 0x5, 0xff, 0xff, 0x10, 0x41, 0x0, 0xf1, 0x16, 0x90, 0xe5, - 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf7, 0xf9, 0xfb, 0xfd, - 0x5, 0x0, 0xf1, 0x2d, 0xcd, 0xcf, 0xd1, 0xd3, 0xd5, 0xd7, 0xd9, 0xdb, - 0xdd, 0xdf, 0xe1, 0xe3, 0xbd, 0x3b, 0x7f, 0x0, 0x16, 0x0, 0xff, 0xc0, - 0x5, 0xff, 0xff, 0x10, 0x43, 0x0, 0xf3, 0x33, 0xb8, 0xe9, 0xeb, 0xed, - 0xef, 0xf1, 0xf3, 0xf5, 0xf7, 0xf9, 0xfb, 0xfd, 0x5, 0x0, 0xf2, 0x2d, - 0xcd, 0xcf, 0xd1, 0xd3, 0xd5, 0xd7, 0xd9, 0xdb, 0xdd, 0xdf, 0xd1, 0x5d, - 0x4, 0x7f, 0x0, 0x17, 0x0, 0xff, 0xc0, 0x5, 0xff, 0xff, 0x10, 0x44, - 0x0, 0xf4, 0x2, 0x5b, 0xd8, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf7, 0xf9, - 0xfb, 0xfd, 0x5, 0x0, 0xf4, 0x2d, 0xcd, 0xcf, 0xd1, 0xd3, 0xd5, 0xd7, - 0xd9, 0xdb, 0xda, 0x81, 0x10, 0x7f, 0x0, 0x19, 0x0, 0xff, 0xae, 0x4, - 0xff, 0xfe, 0xfd, 0x9, 0x46, 0x0, 0xf6, 0xe, 0x85, 0xec, 0xf1, 0xf3, - 0xf5, 0xf7, 0xf9, 0xfb, 0xfd, 0x5, 0x0, 0xf6, 0x2d, 0xcd, 0xcf, 0xd1, - 0xd3, 0xd5, 0xd7, 0xd9, 0xa1, 0x25, 0x7f, 0x0, 0x1b, 0x0, 0xff, 0x53, - 0x4, 0xff, 0xff, 0xa7, 0x49, 0x0, 0xf8, 0x27, 0xb0, 0xf3, 0xf5, 0xf7, - 0xf9, 0xfb, 0xfd, 0x5, 0x0, 0xf8, 0x31, 0xcd, 0xcf, 0xd1, 0xd3, 0xd5, - 0xbb, 0x44, 0x7f, 0x0, 0x1e, 0x0, 0xfb, 0x63, 0xd2, 0xdd, 0x95, 0xb, - 0x4b, 0x0, 0xfa, 0x4d, 0xd6, 0xf7, 0xf9, 0xfb, 0xfd, 0x5, 0x0, 0xf9, - 0x32, 0xcd, 0xcf, 0xd1, 0xc9, 0x65, 0x6, 0x7f, 0x0, 0x70, 0x0, 0xfb, - 0x8, 0x78, 0xf0, 0xfb, 0xfd, 0x5, 0x0, 0xfb, 0x32, 0xcd, 0xcf, 0x85, - 0x16, 0x7f, 0x0, 0x74, 0x0, 0xfd, 0x1c, 0xa5, 0xe7, 0x5, 0x0, 0xfd, - 0x26, 0x9d, 0x2d, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x60, 0x0}; -static const Image blockpit_logo_image = {256, 64, 5567, blockpit_logo_data}; - -const VariantAnimation blockpit_logo = { - 21, - { - {0, 0, 25, 0, &blockpit_logo_image}, - {0, 0, 25, 5, &blockpit_logo_image}, - {0, 0, 25, 10, &blockpit_logo_image}, - {0, 0, 25, 15, &blockpit_logo_image}, - {0, 0, 25, 20, &blockpit_logo_image}, - {0, 0, 25, 25, &blockpit_logo_image}, - {0, 0, 25, 30, &blockpit_logo_image}, - {0, 0, 25, 35, &blockpit_logo_image}, - {0, 0, 25, 40, &blockpit_logo_image}, - {0, 0, 25, 45, &blockpit_logo_image}, - {0, 0, 25, 50, &blockpit_logo_image}, - {0, 0, 25, 55, &blockpit_logo_image}, - {0, 0, 25, 60, &blockpit_logo_image}, - {0, 0, 25, 65, &blockpit_logo_image}, - {0, 0, 25, 70, &blockpit_logo_image}, - {0, 0, 25, 75, &blockpit_logo_image}, - {0, 0, 25, 80, &blockpit_logo_image}, - {0, 0, 25, 85, &blockpit_logo_image}, - {0, 0, 25, 90, &blockpit_logo_image}, - {0, 0, 25, 95, &blockpit_logo_image}, - {0, 0, 25, 100, &blockpit_logo_image}, - }}; -const VariantAnimation blockpit_logo_reversed = { - 21, - { - {0, 0, 25, 100, &blockpit_logo_image}, - {0, 0, 25, 95, &blockpit_logo_image}, - {0, 0, 25, 90, &blockpit_logo_image}, - {0, 0, 25, 85, &blockpit_logo_image}, - {0, 0, 25, 80, &blockpit_logo_image}, - {0, 0, 25, 75, &blockpit_logo_image}, - {0, 0, 25, 70, &blockpit_logo_image}, - {0, 0, 25, 65, &blockpit_logo_image}, - {0, 0, 25, 60, &blockpit_logo_image}, - {0, 0, 25, 55, &blockpit_logo_image}, - {0, 0, 25, 50, &blockpit_logo_image}, - {0, 0, 25, 45, &blockpit_logo_image}, - {0, 0, 25, 40, &blockpit_logo_image}, - {0, 0, 25, 35, &blockpit_logo_image}, - {0, 0, 25, 30, &blockpit_logo_image}, - {0, 0, 25, 25, &blockpit_logo_image}, - {0, 0, 25, 20, &blockpit_logo_image}, - {0, 0, 25, 15, &blockpit_logo_image}, - {0, 0, 25, 10, &blockpit_logo_image}, - {0, 0, 25, 5, &blockpit_logo_image}, - {0, 0, 25, 0, &blockpit_logo_image}, - }}; - -const uint8_t blockpit_screensaver_data[2339] = { - 0x57, 0x0, 0xfa, 0x19, 0x94, 0xe2, 0xd0, 0x5e, 0x2, 0x34, 0x0, 0xf7, - 0x8, 0x6f, 0xdb, 0xe4, 0xe5, 0xe6, 0xe7, 0xbb, 0x34, 0x32, 0x0, 0xf4, - 0x49, 0xc5, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0x95, 0x17, - 0x2e, 0x0, 0xf0, 0x28, 0xa7, 0xdf, 0xe0, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, - 0xe7, 0xe8, 0xe9, 0xea, 0xdf, 0x6b, 0x5, 0x2a, 0x0, 0xed, 0x10, 0x81, - 0xda, 0xde, 0xdf, 0xe0, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, - 0xea, 0xeb, 0xec, 0xc8, 0x40, 0x27, 0x0, 0xe9, 0x3, 0x5c, 0xcc, 0xdc, - 0xdd, 0xde, 0xdf, 0xe0, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, - 0xea, 0xeb, 0xec, 0xed, 0xee, 0xa3, 0x1e, 0x24, 0x0, 0xe6, 0x39, 0xb4, - 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, - 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xe8, 0x78, 0x9, - 0x20, 0x0, 0xe3, 0x1c, 0x94, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, - 0xdf, 0xe0, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, - 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xd4, 0x4d, 0x1d, 0x0, 0xdf, 0x9, - 0x70, 0xd0, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, - 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xb2, 0x26, 0x19, 0x0, 0xdb, 0x1, - 0x4c, 0xbe, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, - 0xdf, 0xe0, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, - 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf1, 0x86, 0xe, - 0x16, 0x0, 0xd8, 0x2b, 0xa3, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, - 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, - 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, - 0xf3, 0xf4, 0xf5, 0xf6, 0xe0, 0x5a, 0x1, 0x12, 0x0, 0xd5, 0x13, 0x81, - 0xd0, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, - 0xdd, 0xde, 0xdf, 0xe0, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, - 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, - 0xf6, 0xf7, 0xf8, 0xc1, 0x30, 0xf, 0x0, 0xd1, 0x5, 0x5f, 0xc4, 0xd0, - 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, - 0xdd, 0xde, 0xdf, 0xe0, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, - 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, - 0xf6, 0xf7, 0xf8, 0xfa, 0xf9, 0x96, 0x13, 0xc, 0x0, 0xcf, 0x1e, 0xaf, - 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, - 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, - 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, - 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xfa, 0xfb, 0xfc, 0xec, 0x69, 0xb, - 0x0, 0xce, 0x3b, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe2, - 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, - 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xfa, 0xfb, - 0xfc, 0xfd, 0xfe, 0xa, 0xb, 0x0, 0xd0, 0x30, 0xa7, 0xcf, 0xd0, 0xd1, - 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, - 0xde, 0xdf, 0xe0, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, - 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, - 0xf7, 0xf8, 0xfa, 0xfb, 0xfc, 0xd6, 0x49, 0xd, 0x0, 0xd2, 0x2, 0x55, - 0xc2, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, - 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, - 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, - 0xf5, 0xf6, 0xf7, 0xf8, 0xfa, 0xed, 0x71, 0x5, 0x10, 0x0, 0xda, 0xf, - 0x7d, 0xd1, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, - 0xdd, 0xde, 0xdf, 0xe0, 0xe2, 0xd9, 0x6e, 0x20, 0x3c, 0xb6, 0xe8, 0xe9, - 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, - 0xf6, 0x2, 0xf7, 0xfe, 0x98, 0x16, 0x14, 0x0, 0xef, 0x28, 0xa3, 0xd4, - 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, - 0x90, 0x18, 0x3, 0x0, 0xee, 0x2, 0x59, 0xd6, 0xea, 0xeb, 0xec, 0xed, - 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xbe, 0x31, 0xd, - 0x0, 0xfd, 0xc7, 0x96, 0x22, 0x7, 0x0, 0xf2, 0x1, 0x4d, 0xc1, 0xd6, - 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xb1, 0x31, 0x7, 0x0, - 0xf1, 0xe, 0x85, 0xe8, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, - 0xf4, 0xdb, 0x56, 0x1, 0x7, 0x0, 0xfd, 0x3a, 0xc9, 0x61, 0x4, 0x0, - 0xfb, 0xcc, 0xce, 0xcd, 0x76, 0xc, 0x7, 0x0, 0xf5, 0xc, 0x75, 0xd4, - 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xc9, 0x54, 0x2, 0xa, 0x0, 0xf5, 0x29, - 0xb1, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xeb, 0x7d, 0xa, 0x7, 0x0, - 0xfb, 0x1b, 0xa2, 0xfa, 0xfc, 0x6d, 0x4, 0x0, 0xf9, 0xcc, 0xce, 0xd0, - 0xd2, 0xc3, 0x53, 0x2, 0x7, 0x0, 0xf9, 0x22, 0x9d, 0xd9, 0xda, 0xd7, - 0x76, 0xb, 0xe, 0x0, 0xf9, 0x51, 0xd4, 0xef, 0xf0, 0xf1, 0xa3, 0x1e, - 0x7, 0x0, 0xf9, 0x9, 0x77, 0xeb, 0xf8, 0xfa, 0xfc, 0x6d, 0x4, 0x0, - 0xf8, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xac, 0x31, 0x8, 0x0, 0xfd, - 0x1a, 0x29, 0xe, 0x11, 0x0, 0xfc, 0x5, 0x33, 0x40, 0x1b, 0x8, 0x0, - 0xf8, 0x4f, 0xd4, 0xf3, 0xf5, 0xf8, 0xfa, 0xfc, 0x6d, 0x4, 0x0, 0xf6, - 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0x8b, 0x16, 0x24, 0x0, - 0xf6, 0x2a, 0xb2, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, 0xfc, 0x6d, 0x4, - 0x0, 0xf4, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xd4, - 0x68, 0x5, 0x20, 0x0, 0xf4, 0x11, 0x8a, 0xe9, 0xed, 0xef, 0xf1, 0xf3, - 0xf5, 0xf8, 0xfa, 0xfc, 0x6d, 0x4, 0x0, 0xf3, 0xcc, 0xce, 0xd0, 0xd2, - 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xc1, 0x42, 0x1d, 0x0, 0xf2, - 0x4, 0x63, 0xd9, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, - 0xfc, 0x6d, 0x4, 0x0, 0xf1, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, - 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0x9e, 0x6, 0x1a, 0x0, 0xf1, 0x22, - 0xbe, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, - 0xfc, 0x66, 0x4, 0x0, 0xf1, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, - 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0x66, 0x1a, 0x0, 0xf1, 0xa9, - 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, - 0xfc, 0x64, 0x4, 0x0, 0xf1, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, - 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0x90, 0x1a, 0x0, 0xf1, 0xd2, - 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, - 0xfc, 0x64, 0x4, 0x0, 0xf1, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, - 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0x92, 0x1a, 0x0, 0xf1, 0xd4, - 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, - 0xfc, 0x64, 0x4, 0x0, 0xf1, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, - 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0x92, 0x1a, 0x0, 0xf1, 0xd4, - 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, - 0xfc, 0x64, 0x4, 0x0, 0xf1, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, - 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0x92, 0x1a, 0x0, 0xf1, 0xd4, - 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, - 0xfc, 0x64, 0x4, 0x0, 0xf1, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, - 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0x92, 0x1a, 0x0, 0xf1, 0xd4, - 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, - 0xfc, 0x64, 0x4, 0x0, 0xf1, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, - 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0x92, 0x1a, 0x0, 0xf1, 0xd4, - 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, - 0xfc, 0x64, 0x4, 0x0, 0xf1, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, - 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0x92, 0x1a, 0x0, 0xf1, 0xd4, - 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, - 0xfc, 0x64, 0x4, 0x0, 0xf1, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, - 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0x92, 0x1a, 0x0, 0xf1, 0xd4, - 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, - 0xfc, 0x64, 0x4, 0x0, 0xf1, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, - 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0x92, 0x1a, 0x0, 0xf1, 0xd4, - 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, - 0xfc, 0x64, 0x4, 0x0, 0xf1, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, - 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0x92, 0x1a, 0x0, 0xf1, 0xd4, - 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, - 0xfc, 0x64, 0x4, 0x0, 0xf1, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, - 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0xa2, 0x19, 0x0, 0xf0, 0x15, - 0xe1, 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, - 0xfa, 0xfc, 0x64, 0x4, 0x0, 0xf0, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, - 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0xe5, 0x3b, 0x17, 0x0, - 0xef, 0xc, 0x9c, 0xe1, 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, - 0xf3, 0xf5, 0xf8, 0xfa, 0xfc, 0x64, 0x4, 0x0, 0xf2, 0xcc, 0xce, 0xd0, - 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0x2, - 0xe9, 0xfe, 0x8d, 0x13, 0x13, 0x0, 0xed, 0x2, 0x53, 0xc9, 0xdf, 0xe1, - 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, - 0xfc, 0x63, 0x4, 0x0, 0xec, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, - 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xe0, 0x66, - 0x4, 0x10, 0x0, 0xec, 0x31, 0xad, 0xdb, 0xdd, 0xdf, 0xe1, 0xe3, 0xe5, - 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, 0xfc, 0x5a, - 0x4, 0x0, 0xeb, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, - 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xc9, 0x3e, - 0xd, 0x0, 0xea, 0x16, 0x8a, 0xd7, 0xd9, 0xdb, 0xdd, 0xdf, 0xe1, 0xe3, - 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, 0xfc, - 0x5a, 0x4, 0x0, 0xe9, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, - 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, - 0xf5, 0xa6, 0x1e, 0x9, 0x0, 0xe8, 0x7, 0x66, 0xcb, 0xd5, 0xd7, 0xd9, - 0xdb, 0xdd, 0xdf, 0xe1, 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, - 0xf3, 0xf5, 0xf8, 0xfa, 0xfc, 0x5a, 0x4, 0x0, 0xe7, 0xcc, 0xce, 0xd0, - 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0xe9, - 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf7, 0xf1, 0x7e, 0x6, 0x6, 0x0, - 0xe7, 0x3f, 0xb5, 0xd1, 0xd3, 0xd5, 0xd7, 0xd9, 0xdb, 0xdd, 0xdf, 0xe1, - 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, - 0xfc, 0x5a, 0x4, 0x0, 0xe7, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, - 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, - 0xf3, 0xf5, 0xf7, 0xf9, 0xfb, 0x9d, 0x5, 0x0, 0xe6, 0x12, 0xcd, 0xcf, - 0xd1, 0xd3, 0xd5, 0xd7, 0xd9, 0xdb, 0xdd, 0xdf, 0xe1, 0xe3, 0xe5, 0xe7, - 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, 0xfc, 0x5a, 0x4, - 0x0, 0xe7, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, - 0xe0, 0xe2, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf7, - 0xf9, 0xfb, 0xf6, 0x5, 0x0, 0xe6, 0x2b, 0xcd, 0xcf, 0xd1, 0xd3, 0xd5, - 0xd7, 0xd9, 0xdb, 0xdd, 0xdf, 0xe1, 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, - 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xfa, 0xfc, 0x58, 0x4, 0x0, 0xe7, 0xa3, - 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, - 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf7, 0xf9, 0xfb, 0xfd, - 0x5, 0x0, 0xe6, 0x2d, 0xcd, 0xcf, 0xd1, 0xd3, 0xd5, 0xd7, 0xd9, 0xdb, - 0xdd, 0xdf, 0xe1, 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, - 0xf5, 0xf8, 0xfa, 0xfc, 0x34, 0x4, 0x0, 0xe7, 0x1c, 0xa1, 0xd0, 0xd2, - 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0xe9, 0xeb, - 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf7, 0xf9, 0xfb, 0xfd, 0x5, 0x0, 0xe7, - 0x2d, 0xcd, 0xcf, 0xd1, 0xd3, 0xd5, 0xd7, 0xd9, 0xdb, 0xdd, 0xdf, 0xe1, - 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf8, 0xed, - 0x6f, 0x6, 0x0, 0xe8, 0x1, 0x4c, 0xbd, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, - 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, - 0xf7, 0xf9, 0xfb, 0xfd, 0x5, 0x0, 0xe8, 0x2d, 0xcd, 0xcf, 0xd1, 0xd3, - 0xd5, 0xd7, 0xd9, 0xdb, 0xdd, 0xdf, 0xe1, 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, - 0xed, 0xef, 0xf1, 0xf3, 0xf4, 0x99, 0x17, 0x9, 0x0, 0xea, 0xb, 0x72, - 0xd2, 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, - 0xef, 0xf1, 0xf3, 0xf5, 0xf7, 0xf9, 0xfb, 0xfd, 0x5, 0x0, 0xea, 0x2d, - 0xcd, 0xcf, 0xd1, 0xd3, 0xd5, 0xd7, 0xd9, 0xdb, 0xdd, 0xdf, 0xe1, 0xe3, - 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xbd, 0x32, 0xd, 0x0, 0xec, - 0x1f, 0x99, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, - 0xef, 0xf1, 0xf3, 0xf5, 0xf7, 0xf9, 0xfb, 0xfd, 0x5, 0x0, 0xeb, 0x2d, - 0xcd, 0xcf, 0xd1, 0xd3, 0xd5, 0xd7, 0xd9, 0xdb, 0xdd, 0xdf, 0xe1, 0xe3, - 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xd7, 0x55, 0x1, 0x10, 0x0, 0xee, 0x3f, - 0xbc, 0xde, 0xe0, 0xe2, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, - 0xf5, 0xf7, 0xf9, 0xfb, 0xfd, 0x5, 0x0, 0xed, 0x2d, 0xcd, 0xcf, 0xd1, - 0xd3, 0xd5, 0xd7, 0xd9, 0xdb, 0xdd, 0xdf, 0xe1, 0xe3, 0xe5, 0xe7, 0xe9, - 0xe4, 0x7b, 0xa, 0x13, 0x0, 0xef, 0x5, 0x68, 0xd5, 0xe2, 0xe5, 0xe7, - 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf7, 0xf9, 0xfb, 0xfd, 0x5, - 0x0, 0xef, 0x2d, 0xcd, 0xcf, 0xd1, 0xd3, 0xd5, 0xd7, 0xd9, 0xdb, 0xdd, - 0xdf, 0xe1, 0xe3, 0xe5, 0xe7, 0x9d, 0x1e, 0x17, 0x0, 0xf1, 0x16, 0x90, - 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf7, 0xf9, 0xfb, - 0xfd, 0x5, 0x0, 0xf1, 0x2d, 0xcd, 0xcf, 0xd1, 0xd3, 0xd5, 0xd7, 0xd9, - 0xdb, 0xdd, 0xdf, 0xe1, 0xe3, 0xbd, 0x3b, 0x1b, 0x0, 0xf3, 0x33, 0xb8, - 0xe9, 0xeb, 0xed, 0xef, 0xf1, 0xf3, 0xf5, 0xf7, 0xf9, 0xfb, 0xfd, 0x5, - 0x0, 0xf2, 0x2d, 0xcd, 0xcf, 0xd1, 0xd3, 0xd5, 0xd7, 0xd9, 0xdb, 0xdd, - 0xdf, 0xd1, 0x5d, 0x4, 0x1d, 0x0, 0xf4, 0x2, 0x5b, 0xd8, 0xed, 0xef, - 0xf1, 0xf3, 0xf5, 0xf7, 0xf9, 0xfb, 0xfd, 0x5, 0x0, 0xf4, 0x2d, 0xcd, - 0xcf, 0xd1, 0xd3, 0xd5, 0xd7, 0xd9, 0xdb, 0xda, 0x81, 0x10, 0x21, 0x0, - 0xf6, 0xe, 0x85, 0xec, 0xf1, 0xf3, 0xf5, 0xf7, 0xf9, 0xfb, 0xfd, 0x5, - 0x0, 0xf6, 0x2d, 0xcd, 0xcf, 0xd1, 0xd3, 0xd5, 0xd7, 0xd9, 0xa1, 0x25, - 0x25, 0x0, 0xf8, 0x27, 0xb0, 0xf3, 0xf5, 0xf7, 0xf9, 0xfb, 0xfd, 0x5, - 0x0, 0xf8, 0x31, 0xcd, 0xcf, 0xd1, 0xd3, 0xd5, 0xbb, 0x44, 0x29, 0x0, - 0xfa, 0x4d, 0xd6, 0xf7, 0xf9, 0xfb, 0xfd, 0x5, 0x0, 0xf9, 0x32, 0xcd, - 0xcf, 0xd1, 0xc9, 0x65, 0x6, 0x2b, 0x0, 0xfb, 0x8, 0x78, 0xf0, 0xfb, - 0xfd, 0x5, 0x0, 0xfb, 0x32, 0xcd, 0xcf, 0x85, 0x16, 0x2f, 0x0, 0xfd, - 0x1c, 0xa5, 0xe7, 0x5, 0x0, 0xfd, 0x26, 0x9d, 0x2d, 0x55, 0x0}; -static const Image blockpit_screensaver_image = {60, 64, 2339, - blockpit_screensaver_data}; - -const VariantAnimation blockpit_screensaver = { - 392, - { - {98, 0, 125, 100, &blockpit_screensaver_image}, - {99, 0, 125, 100, &blockpit_screensaver_image}, - {100, 0, 125, 100, &blockpit_screensaver_image}, - {101, 0, 125, 100, &blockpit_screensaver_image}, - {102, 0, 125, 100, &blockpit_screensaver_image}, - {103, 0, 125, 100, &blockpit_screensaver_image}, - {104, 0, 125, 100, &blockpit_screensaver_image}, - {105, 0, 125, 100, &blockpit_screensaver_image}, - {106, 0, 125, 100, &blockpit_screensaver_image}, - {107, 0, 125, 100, &blockpit_screensaver_image}, - {108, 0, 125, 100, &blockpit_screensaver_image}, - {109, 0, 125, 100, &blockpit_screensaver_image}, - {110, 0, 125, 100, &blockpit_screensaver_image}, - {111, 0, 125, 100, &blockpit_screensaver_image}, - {112, 0, 125, 100, &blockpit_screensaver_image}, - {113, 0, 125, 100, &blockpit_screensaver_image}, - {114, 0, 125, 100, &blockpit_screensaver_image}, - {115, 0, 125, 100, &blockpit_screensaver_image}, - {116, 0, 125, 100, &blockpit_screensaver_image}, - {117, 0, 125, 100, &blockpit_screensaver_image}, - {118, 0, 125, 100, &blockpit_screensaver_image}, - {119, 0, 125, 100, &blockpit_screensaver_image}, - {120, 0, 125, 100, &blockpit_screensaver_image}, - {121, 0, 125, 100, &blockpit_screensaver_image}, - {122, 0, 125, 100, &blockpit_screensaver_image}, - {123, 0, 125, 100, &blockpit_screensaver_image}, - {124, 0, 125, 100, &blockpit_screensaver_image}, - {125, 0, 125, 100, &blockpit_screensaver_image}, - {126, 0, 125, 100, &blockpit_screensaver_image}, - {127, 0, 125, 100, &blockpit_screensaver_image}, - {128, 0, 125, 100, &blockpit_screensaver_image}, - {129, 0, 125, 100, &blockpit_screensaver_image}, - {130, 0, 125, 100, &blockpit_screensaver_image}, - {131, 0, 125, 100, &blockpit_screensaver_image}, - {132, 0, 125, 100, &blockpit_screensaver_image}, - {133, 0, 125, 100, &blockpit_screensaver_image}, - {134, 0, 125, 100, &blockpit_screensaver_image}, - {135, 0, 125, 100, &blockpit_screensaver_image}, - {136, 0, 125, 100, &blockpit_screensaver_image}, - {137, 0, 125, 100, &blockpit_screensaver_image}, - {138, 0, 125, 100, &blockpit_screensaver_image}, - {139, 0, 125, 100, &blockpit_screensaver_image}, - {140, 0, 125, 100, &blockpit_screensaver_image}, - {141, 0, 125, 100, &blockpit_screensaver_image}, - {142, 0, 125, 100, &blockpit_screensaver_image}, - {143, 0, 125, 100, &blockpit_screensaver_image}, - {144, 0, 125, 100, &blockpit_screensaver_image}, - {145, 0, 125, 100, &blockpit_screensaver_image}, - {146, 0, 125, 100, &blockpit_screensaver_image}, - {147, 0, 125, 100, &blockpit_screensaver_image}, - {148, 0, 125, 100, &blockpit_screensaver_image}, - {149, 0, 125, 100, &blockpit_screensaver_image}, - {150, 0, 125, 100, &blockpit_screensaver_image}, - {151, 0, 125, 100, &blockpit_screensaver_image}, - {152, 0, 125, 100, &blockpit_screensaver_image}, - {153, 0, 125, 100, &blockpit_screensaver_image}, - {154, 0, 125, 100, &blockpit_screensaver_image}, - {155, 0, 125, 100, &blockpit_screensaver_image}, - {156, 0, 125, 100, &blockpit_screensaver_image}, - {157, 0, 125, 100, &blockpit_screensaver_image}, - {158, 0, 125, 100, &blockpit_screensaver_image}, - {159, 0, 125, 100, &blockpit_screensaver_image}, - {160, 0, 125, 100, &blockpit_screensaver_image}, - {161, 0, 125, 100, &blockpit_screensaver_image}, - {162, 0, 125, 100, &blockpit_screensaver_image}, - {163, 0, 125, 100, &blockpit_screensaver_image}, - {164, 0, 125, 100, &blockpit_screensaver_image}, - {165, 0, 125, 100, &blockpit_screensaver_image}, - {166, 0, 125, 100, &blockpit_screensaver_image}, - {167, 0, 125, 100, &blockpit_screensaver_image}, - {168, 0, 125, 100, &blockpit_screensaver_image}, - {169, 0, 125, 100, &blockpit_screensaver_image}, - {170, 0, 125, 100, &blockpit_screensaver_image}, - {171, 0, 125, 100, &blockpit_screensaver_image}, - {172, 0, 125, 100, &blockpit_screensaver_image}, - {173, 0, 125, 100, &blockpit_screensaver_image}, - {174, 0, 125, 100, &blockpit_screensaver_image}, - {175, 0, 125, 100, &blockpit_screensaver_image}, - {176, 0, 125, 100, &blockpit_screensaver_image}, - {177, 0, 125, 100, &blockpit_screensaver_image}, - {178, 0, 125, 100, &blockpit_screensaver_image}, - {179, 0, 125, 100, &blockpit_screensaver_image}, - {180, 0, 125, 100, &blockpit_screensaver_image}, - {181, 0, 125, 100, &blockpit_screensaver_image}, - {182, 0, 125, 100, &blockpit_screensaver_image}, - {183, 0, 125, 100, &blockpit_screensaver_image}, - {184, 0, 125, 100, &blockpit_screensaver_image}, - {185, 0, 125, 100, &blockpit_screensaver_image}, - {186, 0, 125, 100, &blockpit_screensaver_image}, - {187, 0, 125, 100, &blockpit_screensaver_image}, - {188, 0, 125, 100, &blockpit_screensaver_image}, - {189, 0, 125, 100, &blockpit_screensaver_image}, - {190, 0, 125, 100, &blockpit_screensaver_image}, - {191, 0, 125, 100, &blockpit_screensaver_image}, - {192, 0, 125, 100, &blockpit_screensaver_image}, - {193, 0, 125, 100, &blockpit_screensaver_image}, - {194, 0, 125, 100, &blockpit_screensaver_image}, - {195, 0, 125, 100, &blockpit_screensaver_image}, - {194, 0, 125, 100, &blockpit_screensaver_image}, - {193, 0, 125, 100, &blockpit_screensaver_image}, - {192, 0, 125, 100, &blockpit_screensaver_image}, - {191, 0, 125, 100, &blockpit_screensaver_image}, - {190, 0, 125, 100, &blockpit_screensaver_image}, - {189, 0, 125, 100, &blockpit_screensaver_image}, - {188, 0, 125, 100, &blockpit_screensaver_image}, - {187, 0, 125, 100, &blockpit_screensaver_image}, - {186, 0, 125, 100, &blockpit_screensaver_image}, - {185, 0, 125, 100, &blockpit_screensaver_image}, - {184, 0, 125, 100, &blockpit_screensaver_image}, - {183, 0, 125, 100, &blockpit_screensaver_image}, - {182, 0, 125, 100, &blockpit_screensaver_image}, - {181, 0, 125, 100, &blockpit_screensaver_image}, - {180, 0, 125, 100, &blockpit_screensaver_image}, - {179, 0, 125, 100, &blockpit_screensaver_image}, - {178, 0, 125, 100, &blockpit_screensaver_image}, - {177, 0, 125, 100, &blockpit_screensaver_image}, - {176, 0, 125, 100, &blockpit_screensaver_image}, - {175, 0, 125, 100, &blockpit_screensaver_image}, - {174, 0, 125, 100, &blockpit_screensaver_image}, - {173, 0, 125, 100, &blockpit_screensaver_image}, - {172, 0, 125, 100, &blockpit_screensaver_image}, - {171, 0, 125, 100, &blockpit_screensaver_image}, - {170, 0, 125, 100, &blockpit_screensaver_image}, - {169, 0, 125, 100, &blockpit_screensaver_image}, - {168, 0, 125, 100, &blockpit_screensaver_image}, - {167, 0, 125, 100, &blockpit_screensaver_image}, - {166, 0, 125, 100, &blockpit_screensaver_image}, - {165, 0, 125, 100, &blockpit_screensaver_image}, - {164, 0, 125, 100, &blockpit_screensaver_image}, - {163, 0, 125, 100, &blockpit_screensaver_image}, - {162, 0, 125, 100, &blockpit_screensaver_image}, - {161, 0, 125, 100, &blockpit_screensaver_image}, - {160, 0, 125, 100, &blockpit_screensaver_image}, - {159, 0, 125, 100, &blockpit_screensaver_image}, - {158, 0, 125, 100, &blockpit_screensaver_image}, - {157, 0, 125, 100, &blockpit_screensaver_image}, - {156, 0, 125, 100, &blockpit_screensaver_image}, - {155, 0, 125, 100, &blockpit_screensaver_image}, - {154, 0, 125, 100, &blockpit_screensaver_image}, - {153, 0, 125, 100, &blockpit_screensaver_image}, - {152, 0, 125, 100, &blockpit_screensaver_image}, - {151, 0, 125, 100, &blockpit_screensaver_image}, - {150, 0, 125, 100, &blockpit_screensaver_image}, - {149, 0, 125, 100, &blockpit_screensaver_image}, - {148, 0, 125, 100, &blockpit_screensaver_image}, - {147, 0, 125, 100, &blockpit_screensaver_image}, - {146, 0, 125, 100, &blockpit_screensaver_image}, - {145, 0, 125, 100, &blockpit_screensaver_image}, - {144, 0, 125, 100, &blockpit_screensaver_image}, - {143, 0, 125, 100, &blockpit_screensaver_image}, - {142, 0, 125, 100, &blockpit_screensaver_image}, - {141, 0, 125, 100, &blockpit_screensaver_image}, - {140, 0, 125, 100, &blockpit_screensaver_image}, - {139, 0, 125, 100, &blockpit_screensaver_image}, - {138, 0, 125, 100, &blockpit_screensaver_image}, - {137, 0, 125, 100, &blockpit_screensaver_image}, - {136, 0, 125, 100, &blockpit_screensaver_image}, - {135, 0, 125, 100, &blockpit_screensaver_image}, - {134, 0, 125, 100, &blockpit_screensaver_image}, - {133, 0, 125, 100, &blockpit_screensaver_image}, - {132, 0, 125, 100, &blockpit_screensaver_image}, - {131, 0, 125, 100, &blockpit_screensaver_image}, - {130, 0, 125, 100, &blockpit_screensaver_image}, - {129, 0, 125, 100, &blockpit_screensaver_image}, - {128, 0, 125, 100, &blockpit_screensaver_image}, - {127, 0, 125, 100, &blockpit_screensaver_image}, - {126, 0, 125, 100, &blockpit_screensaver_image}, - {125, 0, 125, 100, &blockpit_screensaver_image}, - {124, 0, 125, 100, &blockpit_screensaver_image}, - {123, 0, 125, 100, &blockpit_screensaver_image}, - {122, 0, 125, 100, &blockpit_screensaver_image}, - {121, 0, 125, 100, &blockpit_screensaver_image}, - {120, 0, 125, 100, &blockpit_screensaver_image}, - {119, 0, 125, 100, &blockpit_screensaver_image}, - {118, 0, 125, 100, &blockpit_screensaver_image}, - {117, 0, 125, 100, &blockpit_screensaver_image}, - {116, 0, 125, 100, &blockpit_screensaver_image}, - {115, 0, 125, 100, &blockpit_screensaver_image}, - {114, 0, 125, 100, &blockpit_screensaver_image}, - {113, 0, 125, 100, &blockpit_screensaver_image}, - {112, 0, 125, 100, &blockpit_screensaver_image}, - {111, 0, 125, 100, &blockpit_screensaver_image}, - {110, 0, 125, 100, &blockpit_screensaver_image}, - {109, 0, 125, 100, &blockpit_screensaver_image}, - {108, 0, 125, 100, &blockpit_screensaver_image}, - {107, 0, 125, 100, &blockpit_screensaver_image}, - {106, 0, 125, 100, &blockpit_screensaver_image}, - {105, 0, 125, 100, &blockpit_screensaver_image}, - {104, 0, 125, 100, &blockpit_screensaver_image}, - {103, 0, 125, 100, &blockpit_screensaver_image}, - {102, 0, 125, 100, &blockpit_screensaver_image}, - {101, 0, 125, 100, &blockpit_screensaver_image}, - {100, 0, 125, 100, &blockpit_screensaver_image}, - {99, 0, 125, 100, &blockpit_screensaver_image}, - {98, 0, 125, 100, &blockpit_screensaver_image}, - {97, 0, 125, 100, &blockpit_screensaver_image}, - {96, 0, 125, 100, &blockpit_screensaver_image}, - {95, 0, 125, 100, &blockpit_screensaver_image}, - {94, 0, 125, 100, &blockpit_screensaver_image}, - {93, 0, 125, 100, &blockpit_screensaver_image}, - {92, 0, 125, 100, &blockpit_screensaver_image}, - {91, 0, 125, 100, &blockpit_screensaver_image}, - {90, 0, 125, 100, &blockpit_screensaver_image}, - {89, 0, 125, 100, &blockpit_screensaver_image}, - {88, 0, 125, 100, &blockpit_screensaver_image}, - {87, 0, 125, 100, &blockpit_screensaver_image}, - {86, 0, 125, 100, &blockpit_screensaver_image}, - {85, 0, 125, 100, &blockpit_screensaver_image}, - {84, 0, 125, 100, &blockpit_screensaver_image}, - {83, 0, 125, 100, &blockpit_screensaver_image}, - {82, 0, 125, 100, &blockpit_screensaver_image}, - {81, 0, 125, 100, &blockpit_screensaver_image}, - {80, 0, 125, 100, &blockpit_screensaver_image}, - {79, 0, 125, 100, &blockpit_screensaver_image}, - {78, 0, 125, 100, &blockpit_screensaver_image}, - {77, 0, 125, 100, &blockpit_screensaver_image}, - {76, 0, 125, 100, &blockpit_screensaver_image}, - {75, 0, 125, 100, &blockpit_screensaver_image}, - {74, 0, 125, 100, &blockpit_screensaver_image}, - {73, 0, 125, 100, &blockpit_screensaver_image}, - {72, 0, 125, 100, &blockpit_screensaver_image}, - {71, 0, 125, 100, &blockpit_screensaver_image}, - {70, 0, 125, 100, &blockpit_screensaver_image}, - {69, 0, 125, 100, &blockpit_screensaver_image}, - {68, 0, 125, 100, &blockpit_screensaver_image}, - {67, 0, 125, 100, &blockpit_screensaver_image}, - {66, 0, 125, 100, &blockpit_screensaver_image}, - {65, 0, 125, 100, &blockpit_screensaver_image}, - {64, 0, 125, 100, &blockpit_screensaver_image}, - {63, 0, 125, 100, &blockpit_screensaver_image}, - {62, 0, 125, 100, &blockpit_screensaver_image}, - {61, 0, 125, 100, &blockpit_screensaver_image}, - {60, 0, 125, 100, &blockpit_screensaver_image}, - {59, 0, 125, 100, &blockpit_screensaver_image}, - {58, 0, 125, 100, &blockpit_screensaver_image}, - {57, 0, 125, 100, &blockpit_screensaver_image}, - {56, 0, 125, 100, &blockpit_screensaver_image}, - {55, 0, 125, 100, &blockpit_screensaver_image}, - {54, 0, 125, 100, &blockpit_screensaver_image}, - {53, 0, 125, 100, &blockpit_screensaver_image}, - {52, 0, 125, 100, &blockpit_screensaver_image}, - {51, 0, 125, 100, &blockpit_screensaver_image}, - {50, 0, 125, 100, &blockpit_screensaver_image}, - {49, 0, 125, 100, &blockpit_screensaver_image}, - {48, 0, 125, 100, &blockpit_screensaver_image}, - {47, 0, 125, 100, &blockpit_screensaver_image}, - {46, 0, 125, 100, &blockpit_screensaver_image}, - {45, 0, 125, 100, &blockpit_screensaver_image}, - {44, 0, 125, 100, &blockpit_screensaver_image}, - {43, 0, 125, 100, &blockpit_screensaver_image}, - {42, 0, 125, 100, &blockpit_screensaver_image}, - {41, 0, 125, 100, &blockpit_screensaver_image}, - {40, 0, 125, 100, &blockpit_screensaver_image}, - {39, 0, 125, 100, &blockpit_screensaver_image}, - {38, 0, 125, 100, &blockpit_screensaver_image}, - {37, 0, 125, 100, &blockpit_screensaver_image}, - {36, 0, 125, 100, &blockpit_screensaver_image}, - {35, 0, 125, 100, &blockpit_screensaver_image}, - {34, 0, 125, 100, &blockpit_screensaver_image}, - {33, 0, 125, 100, &blockpit_screensaver_image}, - {32, 0, 125, 100, &blockpit_screensaver_image}, - {31, 0, 125, 100, &blockpit_screensaver_image}, - {30, 0, 125, 100, &blockpit_screensaver_image}, - {29, 0, 125, 100, &blockpit_screensaver_image}, - {28, 0, 125, 100, &blockpit_screensaver_image}, - {27, 0, 125, 100, &blockpit_screensaver_image}, - {26, 0, 125, 100, &blockpit_screensaver_image}, - {25, 0, 125, 100, &blockpit_screensaver_image}, - {24, 0, 125, 100, &blockpit_screensaver_image}, - {23, 0, 125, 100, &blockpit_screensaver_image}, - {22, 0, 125, 100, &blockpit_screensaver_image}, - {21, 0, 125, 100, &blockpit_screensaver_image}, - {20, 0, 125, 100, &blockpit_screensaver_image}, - {19, 0, 125, 100, &blockpit_screensaver_image}, - {18, 0, 125, 100, &blockpit_screensaver_image}, - {17, 0, 125, 100, &blockpit_screensaver_image}, - {16, 0, 125, 100, &blockpit_screensaver_image}, - {15, 0, 125, 100, &blockpit_screensaver_image}, - {14, 0, 125, 100, &blockpit_screensaver_image}, - {13, 0, 125, 100, &blockpit_screensaver_image}, - {12, 0, 125, 100, &blockpit_screensaver_image}, - {11, 0, 125, 100, &blockpit_screensaver_image}, - {10, 0, 125, 100, &blockpit_screensaver_image}, - {9, 0, 125, 100, &blockpit_screensaver_image}, - {8, 0, 125, 100, &blockpit_screensaver_image}, - {7, 0, 125, 100, &blockpit_screensaver_image}, - {6, 0, 125, 100, &blockpit_screensaver_image}, - {5, 0, 125, 100, &blockpit_screensaver_image}, - {4, 0, 125, 100, &blockpit_screensaver_image}, - {3, 0, 125, 100, &blockpit_screensaver_image}, - {2, 0, 125, 100, &blockpit_screensaver_image}, - {1, 0, 125, 100, &blockpit_screensaver_image}, - {0, 0, 125, 100, &blockpit_screensaver_image}, - {0, 0, 125, 100, &blockpit_screensaver_image}, - {1, 0, 125, 100, &blockpit_screensaver_image}, - {2, 0, 125, 100, &blockpit_screensaver_image}, - {3, 0, 125, 100, &blockpit_screensaver_image}, - {4, 0, 125, 100, &blockpit_screensaver_image}, - {5, 0, 125, 100, &blockpit_screensaver_image}, - {6, 0, 125, 100, &blockpit_screensaver_image}, - {7, 0, 125, 100, &blockpit_screensaver_image}, - {8, 0, 125, 100, &blockpit_screensaver_image}, - {9, 0, 125, 100, &blockpit_screensaver_image}, - {10, 0, 125, 100, &blockpit_screensaver_image}, - {11, 0, 125, 100, &blockpit_screensaver_image}, - {12, 0, 125, 100, &blockpit_screensaver_image}, - {13, 0, 125, 100, &blockpit_screensaver_image}, - {14, 0, 125, 100, &blockpit_screensaver_image}, - {15, 0, 125, 100, &blockpit_screensaver_image}, - {16, 0, 125, 100, &blockpit_screensaver_image}, - {17, 0, 125, 100, &blockpit_screensaver_image}, - {18, 0, 125, 100, &blockpit_screensaver_image}, - {19, 0, 125, 100, &blockpit_screensaver_image}, - {20, 0, 125, 100, &blockpit_screensaver_image}, - {21, 0, 125, 100, &blockpit_screensaver_image}, - {22, 0, 125, 100, &blockpit_screensaver_image}, - {23, 0, 125, 100, &blockpit_screensaver_image}, - {24, 0, 125, 100, &blockpit_screensaver_image}, - {25, 0, 125, 100, &blockpit_screensaver_image}, - {26, 0, 125, 100, &blockpit_screensaver_image}, - {27, 0, 125, 100, &blockpit_screensaver_image}, - {28, 0, 125, 100, &blockpit_screensaver_image}, - {29, 0, 125, 100, &blockpit_screensaver_image}, - {30, 0, 125, 100, &blockpit_screensaver_image}, - {31, 0, 125, 100, &blockpit_screensaver_image}, - {32, 0, 125, 100, &blockpit_screensaver_image}, - {33, 0, 125, 100, &blockpit_screensaver_image}, - {34, 0, 125, 100, &blockpit_screensaver_image}, - {35, 0, 125, 100, &blockpit_screensaver_image}, - {36, 0, 125, 100, &blockpit_screensaver_image}, - {37, 0, 125, 100, &blockpit_screensaver_image}, - {38, 0, 125, 100, &blockpit_screensaver_image}, - {39, 0, 125, 100, &blockpit_screensaver_image}, - {40, 0, 125, 100, &blockpit_screensaver_image}, - {41, 0, 125, 100, &blockpit_screensaver_image}, - {42, 0, 125, 100, &blockpit_screensaver_image}, - {43, 0, 125, 100, &blockpit_screensaver_image}, - {44, 0, 125, 100, &blockpit_screensaver_image}, - {45, 0, 125, 100, &blockpit_screensaver_image}, - {46, 0, 125, 100, &blockpit_screensaver_image}, - {47, 0, 125, 100, &blockpit_screensaver_image}, - {48, 0, 125, 100, &blockpit_screensaver_image}, - {49, 0, 125, 100, &blockpit_screensaver_image}, - {50, 0, 125, 100, &blockpit_screensaver_image}, - {51, 0, 125, 100, &blockpit_screensaver_image}, - {52, 0, 125, 100, &blockpit_screensaver_image}, - {53, 0, 125, 100, &blockpit_screensaver_image}, - {54, 0, 125, 100, &blockpit_screensaver_image}, - {55, 0, 125, 100, &blockpit_screensaver_image}, - {56, 0, 125, 100, &blockpit_screensaver_image}, - {57, 0, 125, 100, &blockpit_screensaver_image}, - {58, 0, 125, 100, &blockpit_screensaver_image}, - {59, 0, 125, 100, &blockpit_screensaver_image}, - {60, 0, 125, 100, &blockpit_screensaver_image}, - {61, 0, 125, 100, &blockpit_screensaver_image}, - {62, 0, 125, 100, &blockpit_screensaver_image}, - {63, 0, 125, 100, &blockpit_screensaver_image}, - {64, 0, 125, 100, &blockpit_screensaver_image}, - {65, 0, 125, 100, &blockpit_screensaver_image}, - {66, 0, 125, 100, &blockpit_screensaver_image}, - {67, 0, 125, 100, &blockpit_screensaver_image}, - {68, 0, 125, 100, &blockpit_screensaver_image}, - {69, 0, 125, 100, &blockpit_screensaver_image}, - {70, 0, 125, 100, &blockpit_screensaver_image}, - {71, 0, 125, 100, &blockpit_screensaver_image}, - {72, 0, 125, 100, &blockpit_screensaver_image}, - {73, 0, 125, 100, &blockpit_screensaver_image}, - {74, 0, 125, 100, &blockpit_screensaver_image}, - {75, 0, 125, 100, &blockpit_screensaver_image}, - {76, 0, 125, 100, &blockpit_screensaver_image}, - {77, 0, 125, 100, &blockpit_screensaver_image}, - {78, 0, 125, 100, &blockpit_screensaver_image}, - {79, 0, 125, 100, &blockpit_screensaver_image}, - {80, 0, 125, 100, &blockpit_screensaver_image}, - {81, 0, 125, 100, &blockpit_screensaver_image}, - {82, 0, 125, 100, &blockpit_screensaver_image}, - {83, 0, 125, 100, &blockpit_screensaver_image}, - {84, 0, 125, 100, &blockpit_screensaver_image}, - {85, 0, 125, 100, &blockpit_screensaver_image}, - {86, 0, 125, 100, &blockpit_screensaver_image}, - {87, 0, 125, 100, &blockpit_screensaver_image}, - {88, 0, 125, 100, &blockpit_screensaver_image}, - {89, 0, 125, 100, &blockpit_screensaver_image}, - {90, 0, 125, 100, &blockpit_screensaver_image}, - {91, 0, 125, 100, &blockpit_screensaver_image}, - {92, 0, 125, 100, &blockpit_screensaver_image}, - {93, 0, 125, 100, &blockpit_screensaver_image}, - {94, 0, 125, 100, &blockpit_screensaver_image}, - {95, 0, 125, 100, &blockpit_screensaver_image}, - {96, 0, 125, 100, &blockpit_screensaver_image}, - {97, 0, 125, 100, &blockpit_screensaver_image}, - {98, 0, 125, 100, &blockpit_screensaver_image}, - }}; - -VariantInfo blockpit_svi __attribute__((section("variant_info"))) = { - .version = 1, - .name = "blockpit", - .logo = &blockpit_logo, - .logo_reversed = &blockpit_logo_reversed, - .screensaver_timeout = ONE_SEC * 60 * 10, - .screensaver = &blockpit_screensaver}; diff --git a/tools/variant/dash.c b/tools/variant/dash.c deleted file mode 100644 index a28ef2e69..000000000 --- a/tools/variant/dash.c +++ /dev/null @@ -1,663 +0,0 @@ -/* - * This file is part of the KeepKey project. - * - * Copyright (C) 2018 KeepKey LLC - * - * This library is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . - */ - -#include "keepkey/board/variant.h" - -#include "keepkey/board/timer.h" - -const uint8_t dash_logo_data[2863] = { - 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, - 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, - 0x3b, 0x0, 0xfd, 0x27, 0xba, 0xf1, 0x16, 0xe6, 0xf5, 0xe3, 0xde, 0xd4, - 0xc7, 0xad, 0x8a, 0x64, 0x39, 0x18, 0x9, 0x1, 0x6c, 0x0, 0xfd, 0x5, - 0x96, 0xed, 0x8, 0xe6, 0xfc, 0xe7, 0xf2, 0xb7, 0x1f, 0x61, 0x0, 0xfe, - 0x49, 0xe0, 0x1e, 0xff, 0xfa, 0xfb, 0xd9, 0x9e, 0x58, 0x1b, 0x4, 0x6a, - 0x0, 0xfe, 0x8, 0xcc, 0xb, 0xff, 0xfe, 0xbd, 0x18, 0x61, 0x0, 0xfe, - 0x67, 0xf3, 0x21, 0xff, 0xfb, 0xfd, 0xd2, 0x7d, 0x23, 0x5, 0x68, 0x0, - 0xfe, 0x1b, 0xec, 0xa, 0xff, 0xfd, 0xfe, 0x9d, 0x8, 0x61, 0x0, 0xff, - 0x8c, 0x25, 0xff, 0xfc, 0xdf, 0x7c, 0x19, 0x1, 0x65, 0x0, 0xfd, 0x1, - 0x46, 0xfd, 0xa, 0xff, 0xfe, 0xf4, 0x78, 0x61, 0x0, 0xfe, 0xa, 0xaa, - 0x27, 0xff, 0xfe, 0xb1, 0x25, 0x65, 0x0, 0xfe, 0x2, 0x6f, 0xb, 0xff, - 0xfe, 0xe9, 0x5b, 0x61, 0x0, 0xfe, 0x23, 0xc1, 0x28, 0xff, 0xfd, 0xb1, - 0x23, 0x1, 0x63, 0x0, 0xfe, 0x3, 0x98, 0xb, 0xff, 0xfe, 0xda, 0x3e, - 0x61, 0x0, 0xfe, 0x37, 0xd1, 0x29, 0xff, 0xfe, 0xae, 0x20, 0x63, 0x0, - 0xfe, 0x6, 0xc2, 0xb, 0xff, 0xfe, 0xc1, 0x20, 0x61, 0x0, 0xfe, 0x47, - 0xde, 0x2a, 0xff, 0xfe, 0x8e, 0x9, 0x62, 0x0, 0xfe, 0x1c, 0xe0, 0xb, - 0xff, 0xfe, 0xa3, 0x5, 0x61, 0x0, 0xfe, 0x5e, 0xf0, 0x2a, 0xff, 0xfe, - 0xd7, 0x37, 0x62, 0x0, 0xfe, 0x3f, 0xed, 0xa, 0xff, 0xfe, 0xfb, 0x89, - 0x61, 0x0, 0xfe, 0x1, 0x83, 0x2c, 0xff, 0xfe, 0x84, 0x7, 0x61, 0x0, - 0xfe, 0x66, 0xf9, 0xa, 0xff, 0xfe, 0xef, 0x69, 0x61, 0x0, 0xfc, 0x8, - 0x78, 0xc6, 0xc4, 0x4, 0xc2, 0x6, 0xc3, 0x7, 0xc4, 0x2, 0xc5, 0xfa, - 0xc9, 0xd0, 0xda, 0xe8, 0xf0, 0xfa, 0x11, 0xff, 0xfe, 0xd8, 0x31, 0x60, - 0x0, 0xfe, 0x1, 0x83, 0xb, 0xff, 0xfe, 0xdf, 0x46, 0x61, 0x0, 0xfc, - 0x3, 0x10, 0x17, 0x16, 0x3, 0x15, 0xff, 0x16, 0x7, 0x17, 0x6, 0x18, - 0x2, 0x1a, 0xf8, 0x20, 0x28, 0x37, 0x4e, 0x6d, 0x99, 0xcb, 0xec, 0x10, - 0xff, 0xfe, 0x63, 0x1, 0x60, 0x0, 0xff, 0x93, 0xb, 0xff, 0xfe, 0xcb, - 0x24, 0x7e, 0x0, 0xfc, 0x22, 0x5d, 0xb9, 0xf0, 0xe, 0xff, 0xfe, 0x9a, - 0x11, 0x5f, 0x0, 0xfe, 0x3, 0xae, 0xb, 0xff, 0xff, 0xae, 0x7f, 0x0, - 0x2, 0x0, 0xfd, 0xf, 0x75, 0xea, 0xd, 0xff, 0xfe, 0xcb, 0x28, 0x13, - 0x0, 0xfa, 0x6, 0x14, 0x20, 0x28, 0x2f, 0x35, 0x14, 0x39, 0xfd, 0x3a, - 0x3b, 0x11, 0xd, 0x0, 0xfb, 0x6, 0x19, 0x25, 0x2e, 0x35, 0x14, 0x37, - 0xfd, 0x3e, 0x21, 0x3, 0x6, 0x0, 0xfe, 0x17, 0xcb, 0xb, 0xff, 0xfd, - 0xac, 0x2f, 0x37, 0x7, 0x39, 0xfa, 0x38, 0x32, 0x2c, 0x26, 0x1b, 0xc, - 0x74, 0x0, 0xfe, 0x6d, 0xf2, 0xc, 0xff, 0xfe, 0xe9, 0x36, 0x10, 0x0, - 0xf7, 0xa, 0x26, 0x4b, 0x76, 0xa0, 0xc3, 0xdb, 0xeb, 0xf3, 0x14, 0xf6, - 0xfc, 0xfa, 0xf5, 0x42, 0x1, 0xa, 0x0, 0xf9, 0x12, 0x3d, 0x76, 0xad, - 0xd1, 0xea, 0xf4, 0x13, 0xf5, 0xfc, 0xf4, 0xff, 0x81, 0xa, 0x6, 0x0, - 0xfe, 0x34, 0xe3, 0xa, 0xff, 0xfd, 0xfe, 0xf7, 0xf2, 0x8, 0xf6, 0xf7, - 0xf5, 0xf1, 0xe6, 0xd5, 0xb5, 0x88, 0x5a, 0x29, 0x7, 0x71, 0x0, 0xfe, - 0x10, 0xa8, 0xc, 0xff, 0xfe, 0xfa, 0x45, 0xe, 0x0, 0xfc, 0x1b, 0x45, - 0x84, 0xc6, 0x1c, 0xff, 0xfe, 0xe2, 0x30, 0x9, 0x0, 0xfc, 0xb, 0x43, - 0x99, 0xe8, 0x1a, 0xff, 0xfe, 0x66, 0x5, 0x6, 0x0, 0xfe, 0x51, 0xf8, - 0x1c, 0xff, 0xfc, 0xcd, 0x76, 0x2d, 0x2, 0x70, 0x0, 0xfe, 0x5d, 0xf5, - 0xc, 0xff, 0xff, 0x59, 0xc, 0x0, 0xfc, 0x15, 0x59, 0xad, 0xe7, 0x1e, - 0xff, 0xfe, 0xb4, 0x18, 0x8, 0x0, 0xfd, 0x1d, 0x84, 0xe5, 0x1b, 0xff, - 0xfe, 0xf7, 0x40, 0x7, 0x0, 0xff, 0x77, 0x1f, 0xff, 0xfd, 0xd1, 0x5a, - 0x4, 0x6f, 0x0, 0xfe, 0x29, 0xcb, 0xc, 0xff, 0xff, 0x61, 0xb, 0x0, - 0xfd, 0x27, 0x9c, 0xf5, 0x20, 0xff, 0xfe, 0x9e, 0xf, 0x7, 0x0, 0xfe, - 0x19, 0xa9, 0x1d, 0xff, 0xfe, 0xd1, 0x2a, 0x6, 0x0, 0xfd, 0x3, 0x9c, - 0xfe, 0x1f, 0xff, 0xfd, 0xec, 0x50, 0x1, 0x6e, 0x0, 0xfe, 0x1a, 0xad, - 0xc, 0xff, 0xff, 0x61, 0xa, 0x0, 0xfe, 0x36, 0xc1, 0x22, 0xff, 0xfe, - 0x8d, 0xd, 0x6, 0x0, 0xfe, 0x7, 0x92, 0x1e, 0xff, 0xfe, 0xaf, 0x18, - 0x6, 0x0, 0xfd, 0x12, 0xbb, 0xfe, 0x20, 0xff, 0xfd, 0xd6, 0x2b, 0x1, - 0x6d, 0x0, 0xfe, 0x11, 0x9a, 0xc, 0xff, 0xff, 0x5f, 0x9, 0x0, 0xfe, - 0x55, 0xd6, 0x23, 0xff, 0xfe, 0x73, 0x8, 0x6, 0x0, 0xfe, 0x65, 0xf7, - 0x1e, 0xff, 0xfe, 0x8a, 0xc, 0x6, 0x0, 0xfe, 0x26, 0xde, 0x22, 0xff, - 0xfe, 0x8b, 0xb, 0x40, 0x0, 0xfc, 0x11, 0x35, 0x57, 0x65, 0x16, 0x68, - 0xfd, 0x6e, 0x4b, 0x7, 0x10, 0x0, 0xfe, 0xf, 0x92, 0xc, 0xff, 0xff, - 0x56, 0x8, 0x0, 0xfe, 0x43, 0xec, 0x23, 0xff, 0xfd, 0xfa, 0x55, 0x3, - 0x5, 0x0, 0xfe, 0x24, 0xe6, 0x1f, 0xff, 0xfe, 0x67, 0x4, 0x6, 0x0, - 0xfe, 0x3f, 0xf8, 0x22, 0xff, 0xfd, 0xdc, 0x2b, 0x1, 0x3e, 0x0, 0xfb, - 0x40, 0x9a, 0xd2, 0xef, 0xf9, 0x16, 0xfb, 0xfd, 0xff, 0xa8, 0xd, 0x10, - 0x0, 0xfe, 0x10, 0x96, 0xb, 0xff, 0xfe, 0xfc, 0x48, 0x7, 0x0, 0xfe, - 0x21, 0xcd, 0x24, 0xff, 0xfe, 0xe3, 0x38, 0x6, 0x0, 0xff, 0x8e, 0x1f, - 0xff, 0xfd, 0xfa, 0x4d, 0x1, 0x6, 0x0, 0xfe, 0x61, 0xfc, 0x22, 0xff, - 0xfd, 0xfc, 0x50, 0x3, 0x3c, 0x0, 0xfd, 0x2, 0x54, 0xda, 0x1b, 0xff, - 0xfe, 0x89, 0x7, 0x10, 0x0, 0xfe, 0x16, 0xa5, 0xb, 0xff, 0xfe, 0xee, - 0x39, 0x6, 0x0, 0xfe, 0x13, 0xa9, 0x11, 0xff, 0xfd, 0xf3, 0xe8, 0xe6, - 0x3, 0xe7, 0xfd, 0xe3, 0xea, 0xfa, 0xb, 0xff, 0xfe, 0xc8, 0x1f, 0x5, - 0x0, 0xfe, 0x20, 0xe8, 0xc, 0xff, 0xfe, 0xed, 0xe5, 0xf, 0xe7, 0xfc, - 0xe6, 0xee, 0xc4, 0x2c, 0x6, 0x0, 0xfd, 0x1, 0x8b, 0xfc, 0x23, 0xff, - 0xfe, 0x5e, 0x3, 0x3b, 0x0, 0xfd, 0x1, 0x31, 0xdf, 0x1c, 0xff, 0xfe, - 0x53, 0x3, 0x10, 0x0, 0xfe, 0x22, 0xbc, 0xb, 0xff, 0xfe, 0xd9, 0x2e, - 0x6, 0x0, 0xfe, 0x79, 0xfe, 0xd, 0xff, 0xf9, 0xf9, 0xcd, 0x9f, 0x79, - 0x63, 0x55, 0x52, 0x3, 0x53, 0xfd, 0x4d, 0x7a, 0xe6, 0xb, 0xff, 0xfe, - 0xa5, 0x11, 0x5, 0x0, 0xfe, 0x65, 0xfd, 0xa, 0xff, 0xfc, 0xec, 0x92, - 0x59, 0x51, 0xf, 0x53, 0xfc, 0x52, 0x5c, 0x40, 0x8, 0x6, 0x0, 0xfd, - 0x8, 0xb7, 0xfd, 0xa, 0xff, 0xfc, 0xe3, 0x90, 0x86, 0x8d, 0x2, 0x8c, - 0xfb, 0x8b, 0x8e, 0x9c, 0xb9, 0xec, 0xe, 0xff, 0xfe, 0x61, 0x5, 0x3b, - 0x0, 0xfe, 0xa, 0x8c, 0x1c, 0xff, 0xfd, 0xec, 0x31, 0x1, 0x10, 0x0, - 0xfe, 0x31, 0xd3, 0xb, 0xff, 0xfe, 0xc0, 0x23, 0x5, 0x0, 0xfe, 0x25, - 0xd9, 0xd, 0xff, 0xfc, 0xc8, 0x6a, 0x32, 0x2, 0x8, 0x0, 0xfe, 0x41, - 0xea, 0xb, 0xff, 0xfe, 0x85, 0xc, 0x5, 0x0, 0xfe, 0x8e, 0xfc, 0x9, - 0xff, 0xfe, 0xf7, 0x8f, 0x1c, 0x0, 0xfe, 0x12, 0xdc, 0xa, 0xff, 0xfe, - 0xfd, 0xa9, 0x8, 0x0, 0xfd, 0x1b, 0x5c, 0xd1, 0xd, 0xff, 0xfe, 0x63, - 0x5, 0x3b, 0x0, 0xfe, 0x24, 0xd8, 0x1c, 0xff, 0xfe, 0xbb, 0x16, 0x11, - 0x0, 0xfe, 0x4e, 0xed, 0xb, 0xff, 0xfe, 0xa1, 0x14, 0x5, 0x0, 0xfe, - 0x75, 0xf8, 0xb, 0xff, 0xfd, 0xf6, 0x98, 0x2f, 0xb, 0x0, 0xfe, 0x6c, - 0xfe, 0xa, 0xff, 0xfd, 0xfc, 0x63, 0x5, 0x5, 0x0, 0xfe, 0xb4, 0xfe, - 0x9, 0xff, 0xfe, 0xe0, 0x3e, 0x1c, 0x0, 0xfe, 0x2f, 0xf3, 0xa, 0xff, - 0xfe, 0xf5, 0x83, 0xa, 0x0, 0xfe, 0x48, 0xdd, 0xc, 0xff, 0xfe, 0x63, - 0x5, 0x3a, 0x0, 0xfd, 0x3, 0x53, 0xfa, 0x1c, 0xff, 0xfe, 0x82, 0x6, - 0x10, 0x0, 0xfe, 0x3, 0x75, 0xc, 0xff, 0xfe, 0x7c, 0x4, 0x4, 0x0, - 0xfd, 0x11, 0xc7, 0xfe, 0xa, 0xff, 0xfd, 0xf5, 0x79, 0xd, 0xb, 0x0, - 0xfe, 0x7, 0x90, 0xb, 0xff, 0xfe, 0xef, 0x3b, 0x5, 0x0, 0xfe, 0x11, - 0xd3, 0xa, 0xff, 0xfe, 0xd8, 0x29, 0x1c, 0x0, 0xfe, 0x5c, 0xfa, 0xa, - 0xff, 0xfe, 0xed, 0x5d, 0xb, 0x0, 0xff, 0x8a, 0xc, 0xff, 0xfe, 0x61, - 0x4, 0x3a, 0x0, 0xfe, 0xa, 0x82, 0x1c, 0xff, 0xfd, 0xf4, 0x3c, 0x1, - 0x10, 0x0, 0xfe, 0xe, 0x96, 0xc, 0xff, 0xff, 0x59, 0x5, 0x0, 0xfe, - 0x52, 0xf1, 0xa, 0xff, 0xfd, 0xfd, 0xa9, 0x5, 0xc, 0x0, 0xfe, 0x1c, - 0xb0, 0xb, 0xff, 0xfe, 0xd8, 0x22, 0x5, 0x0, 0xfe, 0x2a, 0xdd, 0xa, - 0xff, 0xfc, 0xec, 0x6e, 0x5, 0x0, 0x9, 0x1, 0x11, 0x0, 0xfe, 0x80, - 0xfb, 0xa, 0xff, 0xfe, 0xe5, 0x3d, 0xb, 0x0, 0xfe, 0x65, 0xf8, 0xb, - 0xff, 0xfe, 0x5d, 0x4, 0x3a, 0x0, 0xfe, 0x11, 0xab, 0x1c, 0xff, 0xfe, - 0x99, 0xb, 0x11, 0x0, 0xfe, 0x18, 0xaa, 0xb, 0xff, 0xfe, 0xe7, 0x3d, - 0x5, 0x0, 0xfe, 0xa2, 0xfb, 0xa, 0xff, 0xfe, 0xed, 0x3f, 0xd, 0x0, - 0xfe, 0x2d, 0xc7, 0xb, 0xff, 0xfe, 0xba, 0x19, 0x5, 0x0, 0xfe, 0x33, - 0xe1, 0xb, 0xff, 0xfd, 0xe2, 0xa5, 0x9b, 0x8, 0x9f, 0xfa, 0x9e, 0x99, - 0x89, 0x6b, 0x3f, 0x17, 0xc, 0x0, 0xfe, 0x98, 0xfb, 0xa, 0xff, 0xfe, - 0xd4, 0x23, 0xb, 0x0, 0xfe, 0x64, 0xf4, 0xb, 0xff, 0xfe, 0x58, 0x4, - 0x3a, 0x0, 0xfe, 0x2f, 0xde, 0x1b, 0xff, 0xfe, 0xb5, 0x24, 0x12, 0x0, - 0xfe, 0x2f, 0xd1, 0xb, 0xff, 0xfe, 0xb8, 0x21, 0x4, 0x0, 0xfe, 0x1b, - 0xda, 0xa, 0xff, 0xfd, 0xfd, 0xa3, 0x5, 0xd, 0x0, 0xfe, 0x39, 0xd6, - 0xb, 0xff, 0xfe, 0x91, 0xf, 0x5, 0x0, 0xfe, 0x2e, 0xdf, 0x19, 0xff, - 0xfb, 0xf8, 0xd9, 0xb9, 0x79, 0x10, 0xa, 0x0, 0xfe, 0xb1, 0xfd, 0x9, - 0xff, 0xfd, 0xfd, 0xb3, 0xb, 0xb, 0x0, 0xfe, 0x78, 0xfc, 0xa, 0xff, - 0xfd, 0xf7, 0x49, 0x2, 0x39, 0x0, 0xfe, 0x2, 0x58, 0x19, 0xff, 0xfc, - 0xf4, 0xce, 0x89, 0x25, 0x13, 0x0, 0xfe, 0x56, 0xf9, 0xb, 0xff, 0xfe, - 0x89, 0x8, 0x4, 0x0, 0xfe, 0x58, 0xee, 0xa, 0xff, 0xfe, 0xf2, 0x4f, - 0xe, 0x0, 0xfe, 0x44, 0xe5, 0xb, 0xff, 0xfe, 0x69, 0x5, 0x5, 0x0, - 0xfe, 0x15, 0xd7, 0x1c, 0xff, 0xfd, 0xf8, 0xa4, 0x1e, 0x8, 0x0, 0xfe, - 0x6, 0xd3, 0xa, 0xff, 0xfe, 0xf8, 0x92, 0xb, 0x0, 0xfe, 0x2, 0x97, - 0xb, 0xff, 0xfe, 0xdd, 0x32, 0x3a, 0x0, 0xfc, 0x2, 0x31, 0x8a, 0x80, - 0x16, 0x7f, 0xfc, 0x78, 0x5d, 0x31, 0x9, 0x13, 0x0, 0xfe, 0xb, 0x8e, - 0xb, 0xff, 0xfe, 0xf5, 0x5b, 0x5, 0x0, 0xfe, 0x8d, 0xf8, 0xa, 0xff, - 0xfe, 0xd3, 0x20, 0xe, 0x0, 0xfe, 0x5b, 0xf4, 0xa, 0xff, 0xfe, 0xfe, - 0x44, 0x6, 0x0, 0xfd, 0x2, 0xb9, 0xfe, 0x1d, 0xff, 0xfe, 0xa8, 0x16, - 0x7, 0x0, 0xfe, 0x23, 0xeb, 0xa, 0xff, 0xfe, 0xf2, 0x76, 0xb, 0x0, - 0xfe, 0x14, 0xb3, 0xb, 0xff, 0xfe, 0xc1, 0x1b, 0x3b, 0x0, 0xfe, 0x2, - 0x5, 0x17, 0x4, 0xff, 0x3, 0x16, 0x0, 0xfe, 0x32, 0xe4, 0xb, 0xff, - 0xfe, 0xcf, 0x30, 0x5, 0x0, 0xff, 0xb9, 0xa, 0xff, 0xfd, 0xfd, 0xab, - 0x4, 0xd, 0x0, 0xfd, 0x5, 0x7e, 0xfd, 0xa, 0xff, 0xfe, 0xe4, 0x29, - 0x7, 0x0, 0xff, 0x7e, 0x1e, 0xff, 0xfd, 0xfd, 0x70, 0x9, 0x6, 0x0, - 0xfe, 0x50, 0xf4, 0xa, 0xff, 0xfe, 0xed, 0x5c, 0xb, 0x0, 0xfe, 0x33, - 0xce, 0xb, 0xff, 0xfe, 0x9e, 0xe, 0x6a, 0x0, 0xfe, 0x9, 0x82, 0xc, - 0xff, 0xfe, 0xac, 0x18, 0x4, 0x0, 0xfe, 0x18, 0xd1, 0xa, 0xff, 0xfe, - 0xfb, 0x87, 0xe, 0x0, 0xfe, 0x11, 0x9f, 0xb, 0xff, 0xfe, 0xc7, 0x1f, - 0x7, 0x0, 0xfe, 0x26, 0xe9, 0x1e, 0xff, 0xfe, 0xbe, 0x1b, 0x6, 0x0, - 0xfe, 0x7c, 0xf9, 0xa, 0xff, 0xfe, 0xea, 0x4b, 0xb, 0x0, 0xfe, 0x4f, - 0xe8, 0xb, 0xff, 0xfe, 0x7b, 0x9, 0x6a, 0x0, 0xfe, 0x32, 0xe7, 0xc, - 0xff, 0xfe, 0x79, 0x5, 0x4, 0x0, 0xfe, 0x36, 0xdb, 0xa, 0xff, 0xfe, - 0xf8, 0x6b, 0xe, 0x0, 0xfe, 0x20, 0xb8, 0xb, 0xff, 0xfe, 0xb6, 0x1a, - 0x8, 0x0, 0xfe, 0x67, 0xfc, 0x1d, 0xff, 0xfe, 0xe8, 0x3a, 0x6, 0x0, - 0xfe, 0xa3, 0xfc, 0xa, 0xff, 0xfe, 0xdb, 0x38, 0xb, 0x0, 0xfe, 0x68, - 0xfc, 0xa, 0xff, 0xfd, 0xfb, 0x5e, 0x4, 0x69, 0x0, 0xfe, 0xe, 0xa4, - 0xc, 0xff, 0xfe, 0xda, 0x38, 0x5, 0x0, 0xfe, 0x49, 0xe3, 0xa, 0xff, - 0xfe, 0xf3, 0x5a, 0xe, 0x0, 0xfe, 0x35, 0xd3, 0xb, 0xff, 0xfe, 0x9b, - 0x12, 0x8, 0x0, 0xfd, 0x7, 0x6a, 0xd9, 0x1c, 0xff, 0xfd, 0xfd, 0x62, - 0x5, 0x4, 0x0, 0xfd, 0x5, 0xc5, 0xfe, 0xa, 0xff, 0xfe, 0xc2, 0x14, - 0xa, 0x0, 0xfe, 0x1, 0x8a, 0xb, 0xff, 0xfd, 0xea, 0x39, 0x1, 0x68, - 0x0, 0xfd, 0x3, 0x85, 0xf7, 0xc, 0xff, 0xfe, 0x88, 0x7, 0x5, 0x0, - 0xfe, 0x52, 0xe7, 0xa, 0xff, 0xfe, 0xf3, 0x58, 0xe, 0x0, 0xfe, 0x51, - 0xe9, 0xb, 0xff, 0xfe, 0x75, 0x6, 0x9, 0x0, 0xfc, 0x4, 0x38, 0x93, - 0xda, 0x1b, 0xff, 0xfe, 0x78, 0xa, 0x4, 0x0, 0xfe, 0x25, 0xdb, 0xa, - 0xff, 0xfd, 0xfc, 0xa6, 0x1, 0xa, 0x0, 0xfe, 0x16, 0xac, 0xb, 0xff, - 0xfe, 0xd2, 0x1e, 0x68, 0x0, 0xfd, 0xb, 0x89, 0xf1, 0xc, 0xff, 0xfe, - 0xe2, 0x3f, 0x6, 0x0, 0xfe, 0x54, 0xe9, 0xa, 0xff, 0xfe, 0xf8, 0x6a, - 0xe, 0x0, 0xfe, 0x6f, 0xfc, 0xb, 0xff, 0xff, 0x4f, 0xc, 0x0, 0xfa, - 0x10, 0x32, 0x5c, 0x82, 0x97, 0xa1, 0x8, 0xa2, 0xfd, 0x9f, 0xa3, 0xd8, - 0xc, 0xff, 0xfe, 0x7c, 0xa, 0x4, 0x0, 0xfe, 0x49, 0xeb, 0xa, 0xff, - 0xfe, 0xf7, 0x89, 0xb, 0x0, 0xfe, 0x2e, 0xc8, 0xb, 0xff, 0xfe, 0xb3, - 0x15, 0x66, 0x0, 0xfc, 0x2, 0x38, 0xa2, 0xf5, 0xd, 0xff, 0xfe, 0x8b, - 0x8, 0x6, 0x0, 0xfe, 0x54, 0xe8, 0xa, 0xff, 0xfe, 0xfc, 0x9a, 0xd, - 0x0, 0xfe, 0x8, 0x8d, 0xb, 0xff, 0xfe, 0xef, 0x36, 0xf, 0x0, 0xfd, - 0xa, 0x11, 0x14, 0x8, 0x15, 0xfc, 0x14, 0x15, 0x42, 0xcb, 0xb, 0xff, - 0xfe, 0x73, 0x8, 0x4, 0x0, 0xfe, 0x6d, 0xf5, 0xa, 0xff, 0xfe, 0xf0, - 0x67, 0xb, 0x0, 0xfe, 0x3e, 0xd9, 0xb, 0xff, 0xfe, 0x90, 0xe, 0x64, - 0x0, 0xfb, 0x14, 0x4c, 0xa2, 0xdf, 0xfb, 0xd, 0xff, 0xfe, 0xd7, 0x37, - 0x7, 0x0, 0xfe, 0x50, 0xe7, 0xb, 0xff, 0xfe, 0xdf, 0x33, 0xc, 0x0, - 0xfe, 0x18, 0xab, 0xb, 0xff, 0xfe, 0xc7, 0x23, 0x1c, 0x0, 0xfe, 0x4, - 0x98, 0xa, 0xff, 0xfd, 0xfa, 0x5d, 0x2, 0x4, 0x0, 0xfe, 0x95, 0xfa, - 0xa, 0xff, 0xfe, 0xe1, 0x3c, 0xb, 0x0, 0xfe, 0x4b, 0xe7, 0xb, 0xff, - 0xfe, 0x66, 0x6, 0x5e, 0x0, 0xf7, 0x4, 0xf, 0x23, 0x3d, 0x5e, 0x8c, - 0xba, 0xe7, 0xfc, 0xf, 0xff, 0xfe, 0x7e, 0x5, 0x7, 0x0, 0xfe, 0x46, - 0xe2, 0xb, 0xff, 0xfd, 0xfd, 0xb9, 0x14, 0xb, 0x0, 0xfe, 0x2b, 0xc5, - 0xb, 0xff, 0xfe, 0xa2, 0x15, 0x1c, 0x0, 0xfe, 0x12, 0xa8, 0xa, 0xff, - 0xfe, 0xec, 0x3a, 0x4, 0x0, 0xfd, 0x5, 0xb3, 0xfd, 0xa, 0xff, 0xfe, - 0xd2, 0x15, 0xb, 0x0, 0xfe, 0x5c, 0xf6, 0xa, 0xff, 0xfd, 0xf9, 0x3f, - 0x1, 0x47, 0x0, 0xfd, 0x24, 0x92, 0xb7, 0x13, 0xae, 0xf9, 0xb1, 0xb6, - 0xbd, 0xcb, 0xde, 0xec, 0xf7, 0x11, 0xff, 0xfe, 0xb6, 0x1c, 0x8, 0x0, - 0xfe, 0x29, 0xd8, 0xc, 0xff, 0xfc, 0xfa, 0xb5, 0x3f, 0x2, 0x9, 0x0, - 0xfe, 0x38, 0xdc, 0xb, 0xff, 0xfe, 0x81, 0x9, 0x1c, 0x0, 0xfe, 0x3f, - 0xe1, 0xa, 0xff, 0xfe, 0xcc, 0x24, 0x4, 0x0, 0xfe, 0x1e, 0xcd, 0xb, - 0xff, 0xfe, 0xba, 0x1, 0xa, 0x0, 0xfd, 0x1, 0x7b, 0xfe, 0xa, 0xff, - 0xfe, 0xe3, 0x25, 0x48, 0x0, 0xfd, 0x4b, 0xea, 0xff, 0x14, 0xfe, 0x16, - 0xff, 0xfe, 0xca, 0x2f, 0x9, 0x0, 0xfe, 0x4, 0xba, 0xd, 0xff, 0xf9, - 0xfd, 0xe4, 0xca, 0xa9, 0x84, 0x72, 0x6e, 0x3, 0x6f, 0xfc, 0x6d, 0x6b, - 0xa1, 0xf8, 0xb, 0xff, 0xfe, 0x5e, 0x1, 0x6, 0x0, 0xfd, 0x2c, 0x71, - 0x6f, 0x10, 0x6d, 0xfb, 0x6c, 0x6d, 0x94, 0xda, 0xfd, 0xa, 0xff, 0xfe, - 0xa3, 0x15, 0x4, 0x0, 0xfe, 0x3e, 0xea, 0xa, 0xff, 0xfe, 0xf9, 0x93, - 0xb, 0x0, 0xfe, 0x12, 0x9f, 0xb, 0xff, 0xfe, 0xbb, 0x19, 0x48, 0x0, - 0xfe, 0x68, 0xf8, 0x2a, 0xff, 0xfd, 0xe7, 0x52, 0x1, 0xa, 0x0, 0xfe, - 0x7e, 0xf5, 0xf, 0xff, 0xfe, 0xfd, 0xf6, 0x5, 0xf2, 0x2, 0xf1, 0xff, - 0xf7, 0xb, 0xff, 0xfe, 0xed, 0x44, 0x7, 0x0, 0xfd, 0x7c, 0xed, 0xf2, - 0x12, 0xf1, 0xff, 0xf9, 0xc, 0xff, 0xfe, 0x6f, 0x4, 0x4, 0x0, 0xfe, - 0x5c, 0xf3, 0xa, 0xff, 0xfe, 0xf2, 0x6c, 0xb, 0x0, 0xfe, 0x23, 0xbd, - 0xb, 0xff, 0xfe, 0x99, 0x10, 0x47, 0x0, 0xfd, 0x9, 0x88, 0xfe, 0x29, - 0xff, 0xfd, 0xf4, 0x72, 0x6, 0xb, 0x0, 0xfe, 0x26, 0xe2, 0x24, 0xff, - 0xfe, 0xcf, 0x2e, 0x6, 0x0, 0xfd, 0x4, 0xa0, 0xfd, 0x1f, 0xff, 0xfe, - 0xe1, 0x31, 0x5, 0x0, 0xfe, 0x73, 0xf6, 0xa, 0xff, 0xfe, 0xec, 0x43, - 0xb, 0x0, 0xfe, 0x38, 0xd4, 0xb, 0xff, 0xfe, 0x81, 0xb, 0x47, 0x0, - 0xfe, 0x17, 0xa9, 0x29, 0xff, 0xfd, 0xe3, 0x5c, 0x9, 0xc, 0x0, 0xfd, - 0x2, 0x7e, 0xf7, 0x23, 0xff, 0xfe, 0xae, 0x1a, 0x6, 0x0, 0xfd, 0x15, - 0xc7, 0xfe, 0x1f, 0xff, 0xfe, 0x70, 0x4, 0x5, 0x0, 0xfe, 0x86, 0xf8, - 0xa, 0xff, 0xfe, 0xde, 0x19, 0xb, 0x0, 0xfe, 0x51, 0xea, 0xb, 0xff, - 0xfe, 0x6a, 0x5, 0x47, 0x0, 0xfe, 0x2a, 0xc7, 0x28, 0xff, 0xfd, 0xd8, - 0x44, 0x5, 0xe, 0x0, 0xfd, 0xf, 0xb7, 0xfd, 0x22, 0xff, 0xfe, 0x8d, - 0xc, 0x6, 0x0, 0xfe, 0x29, 0xe9, 0x1f, 0xff, 0xfe, 0xac, 0x1a, 0x5, - 0x0, 0xfd, 0x3, 0xa1, 0xfb, 0x9, 0xff, 0xfd, 0xfe, 0xc1, 0x1, 0xa, - 0x0, 0xfd, 0x1, 0x72, 0xfa, 0xb, 0xff, 0xff, 0x49, 0x48, 0x0, 0xfe, - 0x40, 0xdd, 0x27, 0xff, 0xfd, 0xae, 0x2e, 0x2, 0x10, 0x0, 0xfe, 0x41, - 0xe7, 0x22, 0xff, 0xfe, 0x71, 0x5, 0x6, 0x0, 0xfe, 0x48, 0xf2, 0x1e, - 0xff, 0xfd, 0xd3, 0x36, 0x1, 0x5, 0x0, 0xfd, 0x11, 0xc2, 0xfe, 0x9, - 0xff, 0xfe, 0xfa, 0x9c, 0xb, 0x0, 0xfe, 0xb, 0x92, 0xb, 0xff, 0xfe, - 0xec, 0x2c, 0x48, 0x0, 0xfe, 0x60, 0xf5, 0x24, 0xff, 0xfb, 0xfd, 0xc8, - 0x65, 0xa, 0x1, 0x11, 0x0, 0xfd, 0x3, 0x4c, 0xcd, 0x20, 0xff, 0xfe, - 0xf1, 0x53, 0x7, 0x0, 0xfe, 0x66, 0xf5, 0x1d, 0xff, 0xfd, 0xe0, 0x52, - 0x2, 0x6, 0x0, 0xfe, 0x26, 0xe1, 0xa, 0xff, 0xfe, 0xf4, 0x71, 0xb, - 0x0, 0xfe, 0x19, 0xae, 0xb, 0xff, 0xfe, 0xc7, 0x1e, 0x47, 0x0, 0xfe, - 0x4, 0x81, 0x23, 0xff, 0xfb, 0xf9, 0xb7, 0x59, 0x14, 0x4, 0x14, 0x0, - 0xfc, 0x2, 0x1a, 0x92, 0xf9, 0x1e, 0xff, 0xfe, 0xd8, 0x32, 0x7, 0x0, - 0xfe, 0x7d, 0xf7, 0x1c, 0xff, 0xfd, 0xb4, 0x2d, 0x3, 0x7, 0x0, 0xfe, - 0x48, 0xee, 0xa, 0xff, 0xfe, 0xee, 0x4c, 0xb, 0x0, 0xfe, 0x2f, 0xca, - 0xb, 0xff, 0xfe, 0x9c, 0x12, 0x47, 0x0, 0xfe, 0x11, 0xa0, 0x20, 0xff, - 0xfa, 0xfd, 0xd6, 0x8f, 0x4b, 0x14, 0x2, 0x18, 0x0, 0xfc, 0x5, 0x46, - 0xa0, 0xef, 0x1c, 0xff, 0xfe, 0xc3, 0x24, 0x7, 0x0, 0xfe, 0x9a, 0xfa, - 0x1a, 0xff, 0xfc, 0xdc, 0x70, 0x15, 0x1, 0x8, 0x0, 0xfe, 0x6f, 0xf4, - 0xa, 0xff, 0xfe, 0xec, 0x3a, 0xb, 0x0, 0xfe, 0x49, 0xe2, 0xb, 0xff, - 0xfe, 0x78, 0x7, 0x47, 0x0, 0xfc, 0x1e, 0xae, 0xf6, 0xe4, 0x14, 0xe5, - 0x2, 0xe4, 0xf4, 0xe2, 0xdf, 0xdb, 0xd3, 0xcb, 0xbc, 0x99, 0x6a, 0x3d, - 0x15, 0x6, 0x1, 0x1b, 0x0, 0xf6, 0x1, 0x9, 0x2b, 0x66, 0x9f, 0xc6, - 0xd5, 0xe0, 0xe5, 0xe6, 0x13, 0xe7, 0xfc, 0xe8, 0xf6, 0xa0, 0x17, 0x6, - 0x0, 0xfc, 0x3, 0xaa, 0xe9, 0xe8, 0x14, 0xe7, 0xf9, 0xe4, 0xdd, 0xd1, - 0xa7, 0x57, 0x18, 0x3, 0xa, 0x0, 0xff, 0x84, 0x2, 0xe8, 0x8, 0xe7, - 0xfd, 0xea, 0xd1, 0x23, 0xb, 0x0, 0xfc, 0x5c, 0xe4, 0xf0, 0xe6, 0x7, - 0xe7, 0xfd, 0xe9, 0xf0, 0x4e, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, - 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, - 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x2e, 0x0}; -static const Image dash_logo_image = {256, 64, 2863, dash_logo_data}; - -const VariantAnimation dash_logo = { - 21, - { - {0, 0, 25, 0, &dash_logo_image}, {0, 0, 25, 5, &dash_logo_image}, - {0, 0, 25, 10, &dash_logo_image}, {0, 0, 25, 15, &dash_logo_image}, - {0, 0, 25, 20, &dash_logo_image}, {0, 0, 25, 25, &dash_logo_image}, - {0, 0, 25, 30, &dash_logo_image}, {0, 0, 25, 35, &dash_logo_image}, - {0, 0, 25, 40, &dash_logo_image}, {0, 0, 25, 45, &dash_logo_image}, - {0, 0, 25, 50, &dash_logo_image}, {0, 0, 25, 55, &dash_logo_image}, - {0, 0, 25, 60, &dash_logo_image}, {0, 0, 25, 65, &dash_logo_image}, - {0, 0, 25, 70, &dash_logo_image}, {0, 0, 25, 75, &dash_logo_image}, - {0, 0, 25, 80, &dash_logo_image}, {0, 0, 25, 85, &dash_logo_image}, - {0, 0, 25, 90, &dash_logo_image}, {0, 0, 25, 95, &dash_logo_image}, - {0, 0, 25, 100, &dash_logo_image}, - }}; -const VariantAnimation dash_logo_reversed = { - 21, - { - {0, 0, 25, 100, &dash_logo_image}, {0, 0, 25, 95, &dash_logo_image}, - {0, 0, 25, 90, &dash_logo_image}, {0, 0, 25, 85, &dash_logo_image}, - {0, 0, 25, 80, &dash_logo_image}, {0, 0, 25, 75, &dash_logo_image}, - {0, 0, 25, 70, &dash_logo_image}, {0, 0, 25, 65, &dash_logo_image}, - {0, 0, 25, 60, &dash_logo_image}, {0, 0, 25, 55, &dash_logo_image}, - {0, 0, 25, 50, &dash_logo_image}, {0, 0, 25, 45, &dash_logo_image}, - {0, 0, 25, 40, &dash_logo_image}, {0, 0, 25, 35, &dash_logo_image}, - {0, 0, 25, 30, &dash_logo_image}, {0, 0, 25, 25, &dash_logo_image}, - {0, 0, 25, 20, &dash_logo_image}, {0, 0, 25, 15, &dash_logo_image}, - {0, 0, 25, 10, &dash_logo_image}, {0, 0, 25, 5, &dash_logo_image}, - {0, 0, 25, 0, &dash_logo_image}, - }}; - -const uint8_t dash_screensaver_data[2837] = { - 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, - 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x46, 0x0, 0xfd, 0x27, 0xba, 0xf1, - 0x16, 0xe6, 0xf5, 0xe3, 0xde, 0xd4, 0xc7, 0xad, 0x8a, 0x64, 0x39, 0x18, - 0x9, 0x1, 0x6c, 0x0, 0xfd, 0x5, 0x96, 0xed, 0x8, 0xe6, 0xfc, 0xe7, - 0xf2, 0xb7, 0x1f, 0x28, 0x0, 0xfe, 0x49, 0xe0, 0x1e, 0xff, 0xfa, 0xfb, - 0xd9, 0x9e, 0x58, 0x1b, 0x4, 0x6a, 0x0, 0xfe, 0x8, 0xcc, 0xb, 0xff, - 0xfe, 0xbd, 0x18, 0x28, 0x0, 0xfe, 0x67, 0xf3, 0x21, 0xff, 0xfb, 0xfd, - 0xd2, 0x7d, 0x23, 0x5, 0x68, 0x0, 0xfe, 0x1b, 0xec, 0xa, 0xff, 0xfd, - 0xfe, 0x9d, 0x8, 0x28, 0x0, 0xff, 0x8c, 0x25, 0xff, 0xfc, 0xdf, 0x7c, - 0x19, 0x1, 0x65, 0x0, 0xfd, 0x1, 0x46, 0xfd, 0xa, 0xff, 0xfe, 0xf4, - 0x78, 0x28, 0x0, 0xfe, 0xa, 0xaa, 0x27, 0xff, 0xfe, 0xb1, 0x25, 0x65, - 0x0, 0xfe, 0x2, 0x6f, 0xb, 0xff, 0xfe, 0xe9, 0x5b, 0x28, 0x0, 0xfe, - 0x23, 0xc1, 0x28, 0xff, 0xfd, 0xb1, 0x23, 0x1, 0x63, 0x0, 0xfe, 0x3, - 0x98, 0xb, 0xff, 0xfe, 0xda, 0x3e, 0x28, 0x0, 0xfe, 0x37, 0xd1, 0x29, - 0xff, 0xfe, 0xae, 0x20, 0x63, 0x0, 0xfe, 0x6, 0xc2, 0xb, 0xff, 0xfe, - 0xc1, 0x20, 0x28, 0x0, 0xfe, 0x47, 0xde, 0x2a, 0xff, 0xfe, 0x8e, 0x9, - 0x62, 0x0, 0xfe, 0x1c, 0xe0, 0xb, 0xff, 0xfe, 0xa3, 0x5, 0x28, 0x0, - 0xfe, 0x5e, 0xf0, 0x2a, 0xff, 0xfe, 0xd7, 0x37, 0x62, 0x0, 0xfe, 0x3f, - 0xed, 0xa, 0xff, 0xfe, 0xfb, 0x89, 0x28, 0x0, 0xfe, 0x1, 0x83, 0x2c, - 0xff, 0xfe, 0x84, 0x7, 0x61, 0x0, 0xfe, 0x66, 0xf9, 0xa, 0xff, 0xfe, - 0xef, 0x69, 0x28, 0x0, 0xfc, 0x8, 0x78, 0xc6, 0xc4, 0x4, 0xc2, 0x6, - 0xc3, 0x7, 0xc4, 0x2, 0xc5, 0xfa, 0xc9, 0xd0, 0xda, 0xe8, 0xf0, 0xfa, - 0x11, 0xff, 0xfe, 0xd8, 0x31, 0x60, 0x0, 0xfe, 0x1, 0x83, 0xb, 0xff, - 0xfe, 0xdf, 0x46, 0x28, 0x0, 0xfc, 0x3, 0x10, 0x17, 0x16, 0x3, 0x15, - 0xff, 0x16, 0x7, 0x17, 0x6, 0x18, 0x2, 0x1a, 0xf8, 0x20, 0x28, 0x37, - 0x4e, 0x6d, 0x99, 0xcb, 0xec, 0x10, 0xff, 0xfe, 0x63, 0x1, 0x60, 0x0, - 0xff, 0x93, 0xb, 0xff, 0xfe, 0xcb, 0x24, 0x45, 0x0, 0xfc, 0x22, 0x5d, - 0xb9, 0xf0, 0xe, 0xff, 0xfe, 0x9a, 0x11, 0x5f, 0x0, 0xfe, 0x3, 0xae, - 0xb, 0xff, 0xff, 0xae, 0x48, 0x0, 0xfd, 0xf, 0x75, 0xea, 0xd, 0xff, - 0xfe, 0xcb, 0x28, 0x13, 0x0, 0xfa, 0x6, 0x14, 0x20, 0x28, 0x2f, 0x35, - 0x14, 0x39, 0xfd, 0x3a, 0x3b, 0x11, 0xd, 0x0, 0xfb, 0x6, 0x19, 0x25, - 0x2e, 0x35, 0x14, 0x37, 0xfd, 0x3e, 0x21, 0x3, 0x6, 0x0, 0xfe, 0x17, - 0xcb, 0xb, 0xff, 0xfd, 0xac, 0x2f, 0x37, 0x7, 0x39, 0xfa, 0x38, 0x32, - 0x2c, 0x26, 0x1b, 0xc, 0x3b, 0x0, 0xfe, 0x6d, 0xf2, 0xc, 0xff, 0xfe, - 0xe9, 0x36, 0x10, 0x0, 0xf7, 0xa, 0x26, 0x4b, 0x76, 0xa0, 0xc3, 0xdb, - 0xeb, 0xf3, 0x14, 0xf6, 0xfc, 0xfa, 0xf5, 0x42, 0x1, 0xa, 0x0, 0xf9, - 0x12, 0x3d, 0x76, 0xad, 0xd1, 0xea, 0xf4, 0x13, 0xf5, 0xfc, 0xf4, 0xff, - 0x81, 0xa, 0x6, 0x0, 0xfe, 0x34, 0xe3, 0xa, 0xff, 0xfd, 0xfe, 0xf7, - 0xf2, 0x8, 0xf6, 0xf7, 0xf5, 0xf1, 0xe6, 0xd5, 0xb5, 0x88, 0x5a, 0x29, - 0x7, 0x38, 0x0, 0xfe, 0x10, 0xa8, 0xc, 0xff, 0xfe, 0xfa, 0x45, 0xe, - 0x0, 0xfc, 0x1b, 0x45, 0x84, 0xc6, 0x1c, 0xff, 0xfe, 0xe2, 0x30, 0x9, - 0x0, 0xfc, 0xb, 0x43, 0x99, 0xe8, 0x1a, 0xff, 0xfe, 0x66, 0x5, 0x6, - 0x0, 0xfe, 0x51, 0xf8, 0x1c, 0xff, 0xfc, 0xcd, 0x76, 0x2d, 0x2, 0x37, - 0x0, 0xfe, 0x5d, 0xf5, 0xc, 0xff, 0xff, 0x59, 0xc, 0x0, 0xfc, 0x15, - 0x59, 0xad, 0xe7, 0x1e, 0xff, 0xfe, 0xb4, 0x18, 0x8, 0x0, 0xfd, 0x1d, - 0x84, 0xe5, 0x1b, 0xff, 0xfe, 0xf7, 0x40, 0x7, 0x0, 0xff, 0x77, 0x1f, - 0xff, 0xfd, 0xd1, 0x5a, 0x4, 0x36, 0x0, 0xfe, 0x29, 0xcb, 0xc, 0xff, - 0xff, 0x61, 0xb, 0x0, 0xfd, 0x27, 0x9c, 0xf5, 0x20, 0xff, 0xfe, 0x9e, - 0xf, 0x7, 0x0, 0xfe, 0x19, 0xa9, 0x1d, 0xff, 0xfe, 0xd1, 0x2a, 0x6, - 0x0, 0xfd, 0x3, 0x9c, 0xfe, 0x1f, 0xff, 0xfd, 0xec, 0x50, 0x1, 0x35, - 0x0, 0xfe, 0x1a, 0xad, 0xc, 0xff, 0xff, 0x61, 0xa, 0x0, 0xfe, 0x36, - 0xc1, 0x22, 0xff, 0xfe, 0x8d, 0xd, 0x6, 0x0, 0xfe, 0x7, 0x92, 0x1e, - 0xff, 0xfe, 0xaf, 0x18, 0x6, 0x0, 0xfd, 0x12, 0xbb, 0xfe, 0x20, 0xff, - 0xfd, 0xd6, 0x2b, 0x1, 0x34, 0x0, 0xfe, 0x11, 0x9a, 0xc, 0xff, 0xff, - 0x5f, 0x9, 0x0, 0xfe, 0x55, 0xd6, 0x23, 0xff, 0xfe, 0x73, 0x8, 0x6, - 0x0, 0xfe, 0x65, 0xf7, 0x1e, 0xff, 0xfe, 0x8a, 0xc, 0x6, 0x0, 0xfe, - 0x26, 0xde, 0x22, 0xff, 0xfe, 0x8b, 0xb, 0x7, 0x0, 0xfc, 0x11, 0x35, - 0x57, 0x65, 0x16, 0x68, 0xfd, 0x6e, 0x4b, 0x7, 0x10, 0x0, 0xfe, 0xf, - 0x92, 0xc, 0xff, 0xff, 0x56, 0x8, 0x0, 0xfe, 0x43, 0xec, 0x23, 0xff, - 0xfd, 0xfa, 0x55, 0x3, 0x5, 0x0, 0xfe, 0x24, 0xe6, 0x1f, 0xff, 0xfe, - 0x67, 0x4, 0x6, 0x0, 0xfe, 0x3f, 0xf8, 0x22, 0xff, 0xfd, 0xdc, 0x2b, - 0x1, 0x5, 0x0, 0xfb, 0x40, 0x9a, 0xd2, 0xef, 0xf9, 0x16, 0xfb, 0xfd, - 0xff, 0xa8, 0xd, 0x10, 0x0, 0xfe, 0x10, 0x96, 0xb, 0xff, 0xfe, 0xfc, - 0x48, 0x7, 0x0, 0xfe, 0x21, 0xcd, 0x24, 0xff, 0xfe, 0xe3, 0x38, 0x6, - 0x0, 0xff, 0x8e, 0x1f, 0xff, 0xfd, 0xfa, 0x4d, 0x1, 0x6, 0x0, 0xfe, - 0x61, 0xfc, 0x22, 0xff, 0xfd, 0xfc, 0x50, 0x3, 0x3, 0x0, 0xfd, 0x2, - 0x54, 0xda, 0x1b, 0xff, 0xfe, 0x89, 0x7, 0x10, 0x0, 0xfe, 0x16, 0xa5, - 0xb, 0xff, 0xfe, 0xee, 0x39, 0x6, 0x0, 0xfe, 0x13, 0xa9, 0x11, 0xff, - 0xfd, 0xf3, 0xe8, 0xe6, 0x3, 0xe7, 0xfd, 0xe3, 0xea, 0xfa, 0xb, 0xff, - 0xfe, 0xc8, 0x1f, 0x5, 0x0, 0xfe, 0x20, 0xe8, 0xc, 0xff, 0xfe, 0xed, - 0xe5, 0xf, 0xe7, 0xfc, 0xe6, 0xee, 0xc4, 0x2c, 0x6, 0x0, 0xfd, 0x1, - 0x8b, 0xfc, 0x23, 0xff, 0xfe, 0x5e, 0x3, 0x2, 0x0, 0xfd, 0x1, 0x31, - 0xdf, 0x1c, 0xff, 0xfe, 0x53, 0x3, 0x10, 0x0, 0xfe, 0x22, 0xbc, 0xb, - 0xff, 0xfe, 0xd9, 0x2e, 0x6, 0x0, 0xfe, 0x79, 0xfe, 0xd, 0xff, 0xf9, - 0xf9, 0xcd, 0x9f, 0x79, 0x63, 0x55, 0x52, 0x3, 0x53, 0xfd, 0x4d, 0x7a, - 0xe6, 0xb, 0xff, 0xfe, 0xa5, 0x11, 0x5, 0x0, 0xfe, 0x65, 0xfd, 0xa, - 0xff, 0xfc, 0xec, 0x92, 0x59, 0x51, 0xf, 0x53, 0xfc, 0x52, 0x5c, 0x40, - 0x8, 0x6, 0x0, 0xfd, 0x8, 0xb7, 0xfd, 0xa, 0xff, 0xfc, 0xe3, 0x90, - 0x86, 0x8d, 0x2, 0x8c, 0xfb, 0x8b, 0x8e, 0x9c, 0xb9, 0xec, 0xe, 0xff, - 0xfe, 0x61, 0x5, 0x2, 0x0, 0xfe, 0xa, 0x8c, 0x1c, 0xff, 0xfd, 0xec, - 0x31, 0x1, 0x10, 0x0, 0xfe, 0x31, 0xd3, 0xb, 0xff, 0xfe, 0xc0, 0x23, - 0x5, 0x0, 0xfe, 0x25, 0xd9, 0xd, 0xff, 0xfc, 0xc8, 0x6a, 0x32, 0x2, - 0x8, 0x0, 0xfe, 0x41, 0xea, 0xb, 0xff, 0xfe, 0x85, 0xc, 0x5, 0x0, - 0xfe, 0x8e, 0xfc, 0x9, 0xff, 0xfe, 0xf7, 0x8f, 0x1c, 0x0, 0xfe, 0x12, - 0xdc, 0xa, 0xff, 0xfe, 0xfd, 0xa9, 0x8, 0x0, 0xfd, 0x1b, 0x5c, 0xd1, - 0xd, 0xff, 0xfe, 0x63, 0x5, 0x2, 0x0, 0xfe, 0x24, 0xd8, 0x1c, 0xff, - 0xfe, 0xbb, 0x16, 0x11, 0x0, 0xfe, 0x4e, 0xed, 0xb, 0xff, 0xfe, 0xa1, - 0x14, 0x5, 0x0, 0xfe, 0x75, 0xf8, 0xb, 0xff, 0xfd, 0xf6, 0x98, 0x2f, - 0xb, 0x0, 0xfe, 0x6c, 0xfe, 0xa, 0xff, 0xfd, 0xfc, 0x63, 0x5, 0x5, - 0x0, 0xfe, 0xb4, 0xfe, 0x9, 0xff, 0xfe, 0xe0, 0x3e, 0x1c, 0x0, 0xfe, - 0x2f, 0xf3, 0xa, 0xff, 0xfe, 0xf5, 0x83, 0xa, 0x0, 0xfe, 0x48, 0xdd, - 0xc, 0xff, 0xfa, 0x63, 0x5, 0x0, 0x3, 0x53, 0xfa, 0x1c, 0xff, 0xfe, - 0x82, 0x6, 0x10, 0x0, 0xfe, 0x3, 0x75, 0xc, 0xff, 0xfe, 0x7c, 0x4, - 0x4, 0x0, 0xfd, 0x11, 0xc7, 0xfe, 0xa, 0xff, 0xfd, 0xf5, 0x79, 0xd, - 0xb, 0x0, 0xfe, 0x7, 0x90, 0xb, 0xff, 0xfe, 0xef, 0x3b, 0x5, 0x0, - 0xfe, 0x11, 0xd3, 0xa, 0xff, 0xfe, 0xd8, 0x29, 0x1c, 0x0, 0xfe, 0x5c, - 0xfa, 0xa, 0xff, 0xfe, 0xed, 0x5d, 0xb, 0x0, 0xff, 0x8a, 0xc, 0xff, - 0xfb, 0x61, 0x4, 0x0, 0xa, 0x82, 0x1c, 0xff, 0xfd, 0xf4, 0x3c, 0x1, - 0x10, 0x0, 0xfe, 0xe, 0x96, 0xc, 0xff, 0xff, 0x59, 0x5, 0x0, 0xfe, - 0x52, 0xf1, 0xa, 0xff, 0xfd, 0xfd, 0xa9, 0x5, 0xc, 0x0, 0xfe, 0x1c, - 0xb0, 0xb, 0xff, 0xfe, 0xd8, 0x22, 0x5, 0x0, 0xfe, 0x2a, 0xdd, 0xa, - 0xff, 0xfc, 0xec, 0x6e, 0x5, 0x0, 0x9, 0x1, 0x11, 0x0, 0xfe, 0x80, - 0xfb, 0xa, 0xff, 0xfe, 0xe5, 0x3d, 0xb, 0x0, 0xfe, 0x65, 0xf8, 0xb, - 0xff, 0xfb, 0x5d, 0x4, 0x0, 0x11, 0xab, 0x1c, 0xff, 0xfe, 0x99, 0xb, - 0x11, 0x0, 0xfe, 0x18, 0xaa, 0xb, 0xff, 0xfe, 0xe7, 0x3d, 0x5, 0x0, - 0xfe, 0xa2, 0xfb, 0xa, 0xff, 0xfe, 0xed, 0x3f, 0xd, 0x0, 0xfe, 0x2d, - 0xc7, 0xb, 0xff, 0xfe, 0xba, 0x19, 0x5, 0x0, 0xfe, 0x33, 0xe1, 0xb, - 0xff, 0xfd, 0xe2, 0xa5, 0x9b, 0x8, 0x9f, 0xfa, 0x9e, 0x99, 0x89, 0x6b, - 0x3f, 0x17, 0xc, 0x0, 0xfe, 0x98, 0xfb, 0xa, 0xff, 0xfe, 0xd4, 0x23, - 0xb, 0x0, 0xfe, 0x64, 0xf4, 0xb, 0xff, 0xfb, 0x58, 0x4, 0x0, 0x2f, - 0xde, 0x1b, 0xff, 0xfe, 0xb5, 0x24, 0x12, 0x0, 0xfe, 0x2f, 0xd1, 0xb, - 0xff, 0xfe, 0xb8, 0x21, 0x4, 0x0, 0xfe, 0x1b, 0xda, 0xa, 0xff, 0xfd, - 0xfd, 0xa3, 0x5, 0xd, 0x0, 0xfe, 0x39, 0xd6, 0xb, 0xff, 0xfe, 0x91, - 0xf, 0x5, 0x0, 0xfe, 0x2e, 0xdf, 0x19, 0xff, 0xfb, 0xf8, 0xd9, 0xb9, - 0x79, 0x10, 0xa, 0x0, 0xfe, 0xb1, 0xfd, 0x9, 0xff, 0xfd, 0xfd, 0xb3, - 0xb, 0xb, 0x0, 0xfe, 0x78, 0xfc, 0xa, 0xff, 0xfe, 0xf7, 0x49, 0x2, - 0x2, 0xff, 0x58, 0x19, 0xff, 0xfc, 0xf4, 0xce, 0x89, 0x25, 0x13, 0x0, - 0xfe, 0x56, 0xf9, 0xb, 0xff, 0xfe, 0x89, 0x8, 0x4, 0x0, 0xfe, 0x58, - 0xee, 0xa, 0xff, 0xfe, 0xf2, 0x4f, 0xe, 0x0, 0xfe, 0x44, 0xe5, 0xb, - 0xff, 0xfe, 0x69, 0x5, 0x5, 0x0, 0xfe, 0x15, 0xd7, 0x1c, 0xff, 0xfd, - 0xf8, 0xa4, 0x1e, 0x8, 0x0, 0xfe, 0x6, 0xd3, 0xa, 0xff, 0xfe, 0xf8, - 0x92, 0xb, 0x0, 0xfe, 0x2, 0x97, 0xb, 0xff, 0xf9, 0xdd, 0x32, 0x0, - 0x2, 0x31, 0x8a, 0x80, 0x16, 0x7f, 0xfc, 0x78, 0x5d, 0x31, 0x9, 0x13, - 0x0, 0xfe, 0xb, 0x8e, 0xb, 0xff, 0xfe, 0xf5, 0x5b, 0x5, 0x0, 0xfe, - 0x8d, 0xf8, 0xa, 0xff, 0xfe, 0xd3, 0x20, 0xe, 0x0, 0xfe, 0x5b, 0xf4, - 0xa, 0xff, 0xfe, 0xfe, 0x44, 0x6, 0x0, 0xfd, 0x2, 0xb9, 0xfe, 0x1d, - 0xff, 0xfe, 0xa8, 0x16, 0x7, 0x0, 0xfe, 0x23, 0xeb, 0xa, 0xff, 0xfe, - 0xf2, 0x76, 0xb, 0x0, 0xfe, 0x14, 0xb3, 0xb, 0xff, 0xfe, 0xc1, 0x1b, - 0x2, 0x0, 0xfe, 0x2, 0x5, 0x17, 0x4, 0xff, 0x3, 0x16, 0x0, 0xfe, - 0x32, 0xe4, 0xb, 0xff, 0xfe, 0xcf, 0x30, 0x5, 0x0, 0xff, 0xb9, 0xa, - 0xff, 0xfd, 0xfd, 0xab, 0x4, 0xd, 0x0, 0xfd, 0x5, 0x7e, 0xfd, 0xa, - 0xff, 0xfe, 0xe4, 0x29, 0x7, 0x0, 0xff, 0x7e, 0x1e, 0xff, 0xfd, 0xfd, - 0x70, 0x9, 0x6, 0x0, 0xfe, 0x50, 0xf4, 0xa, 0xff, 0xfe, 0xed, 0x5c, - 0xb, 0x0, 0xfe, 0x33, 0xce, 0xb, 0xff, 0xfe, 0x9e, 0xe, 0x31, 0x0, - 0xfe, 0x9, 0x82, 0xc, 0xff, 0xfe, 0xac, 0x18, 0x4, 0x0, 0xfe, 0x18, - 0xd1, 0xa, 0xff, 0xfe, 0xfb, 0x87, 0xe, 0x0, 0xfe, 0x11, 0x9f, 0xb, - 0xff, 0xfe, 0xc7, 0x1f, 0x7, 0x0, 0xfe, 0x26, 0xe9, 0x1e, 0xff, 0xfe, - 0xbe, 0x1b, 0x6, 0x0, 0xfe, 0x7c, 0xf9, 0xa, 0xff, 0xfe, 0xea, 0x4b, - 0xb, 0x0, 0xfe, 0x4f, 0xe8, 0xb, 0xff, 0xfe, 0x7b, 0x9, 0x31, 0x0, - 0xfe, 0x32, 0xe7, 0xc, 0xff, 0xfe, 0x79, 0x5, 0x4, 0x0, 0xfe, 0x36, - 0xdb, 0xa, 0xff, 0xfe, 0xf8, 0x6b, 0xe, 0x0, 0xfe, 0x20, 0xb8, 0xb, - 0xff, 0xfe, 0xb6, 0x1a, 0x8, 0x0, 0xfe, 0x67, 0xfc, 0x1d, 0xff, 0xfe, - 0xe8, 0x3a, 0x6, 0x0, 0xfe, 0xa3, 0xfc, 0xa, 0xff, 0xfe, 0xdb, 0x38, - 0xb, 0x0, 0xfe, 0x68, 0xfc, 0xa, 0xff, 0xfd, 0xfb, 0x5e, 0x4, 0x30, - 0x0, 0xfe, 0xe, 0xa4, 0xc, 0xff, 0xfe, 0xda, 0x38, 0x5, 0x0, 0xfe, - 0x49, 0xe3, 0xa, 0xff, 0xfe, 0xf3, 0x5a, 0xe, 0x0, 0xfe, 0x35, 0xd3, - 0xb, 0xff, 0xfe, 0x9b, 0x12, 0x8, 0x0, 0xfd, 0x7, 0x6a, 0xd9, 0x1c, - 0xff, 0xfd, 0xfd, 0x62, 0x5, 0x4, 0x0, 0xfd, 0x5, 0xc5, 0xfe, 0xa, - 0xff, 0xfe, 0xc2, 0x14, 0xa, 0x0, 0xfe, 0x1, 0x8a, 0xb, 0xff, 0xfd, - 0xea, 0x39, 0x1, 0x2f, 0x0, 0xfd, 0x3, 0x85, 0xf7, 0xc, 0xff, 0xfe, - 0x88, 0x7, 0x5, 0x0, 0xfe, 0x52, 0xe7, 0xa, 0xff, 0xfe, 0xf3, 0x58, - 0xe, 0x0, 0xfe, 0x51, 0xe9, 0xb, 0xff, 0xfe, 0x75, 0x6, 0x9, 0x0, - 0xfc, 0x4, 0x38, 0x93, 0xda, 0x1b, 0xff, 0xfe, 0x78, 0xa, 0x4, 0x0, - 0xfe, 0x25, 0xdb, 0xa, 0xff, 0xfd, 0xfc, 0xa6, 0x1, 0xa, 0x0, 0xfe, - 0x16, 0xac, 0xb, 0xff, 0xfe, 0xd2, 0x1e, 0x2f, 0x0, 0xfd, 0xb, 0x89, - 0xf1, 0xc, 0xff, 0xfe, 0xe2, 0x3f, 0x6, 0x0, 0xfe, 0x54, 0xe9, 0xa, - 0xff, 0xfe, 0xf8, 0x6a, 0xe, 0x0, 0xfe, 0x6f, 0xfc, 0xb, 0xff, 0xff, - 0x4f, 0xc, 0x0, 0xfa, 0x10, 0x32, 0x5c, 0x82, 0x97, 0xa1, 0x8, 0xa2, - 0xfd, 0x9f, 0xa3, 0xd8, 0xc, 0xff, 0xfe, 0x7c, 0xa, 0x4, 0x0, 0xfe, - 0x49, 0xeb, 0xa, 0xff, 0xfe, 0xf7, 0x89, 0xb, 0x0, 0xfe, 0x2e, 0xc8, - 0xb, 0xff, 0xfe, 0xb3, 0x15, 0x2d, 0x0, 0xfc, 0x2, 0x38, 0xa2, 0xf5, - 0xd, 0xff, 0xfe, 0x8b, 0x8, 0x6, 0x0, 0xfe, 0x54, 0xe8, 0xa, 0xff, - 0xfe, 0xfc, 0x9a, 0xd, 0x0, 0xfe, 0x8, 0x8d, 0xb, 0xff, 0xfe, 0xef, - 0x36, 0xf, 0x0, 0xfd, 0xa, 0x11, 0x14, 0x8, 0x15, 0xfc, 0x14, 0x15, - 0x42, 0xcb, 0xb, 0xff, 0xfe, 0x73, 0x8, 0x4, 0x0, 0xfe, 0x6d, 0xf5, - 0xa, 0xff, 0xfe, 0xf0, 0x67, 0xb, 0x0, 0xfe, 0x3e, 0xd9, 0xb, 0xff, - 0xfe, 0x90, 0xe, 0x2b, 0x0, 0xfb, 0x14, 0x4c, 0xa2, 0xdf, 0xfb, 0xd, - 0xff, 0xfe, 0xd7, 0x37, 0x7, 0x0, 0xfe, 0x50, 0xe7, 0xb, 0xff, 0xfe, - 0xdf, 0x33, 0xc, 0x0, 0xfe, 0x18, 0xab, 0xb, 0xff, 0xfe, 0xc7, 0x23, - 0x1c, 0x0, 0xfe, 0x4, 0x98, 0xa, 0xff, 0xfd, 0xfa, 0x5d, 0x2, 0x4, - 0x0, 0xfe, 0x95, 0xfa, 0xa, 0xff, 0xfe, 0xe1, 0x3c, 0xb, 0x0, 0xfe, - 0x4b, 0xe7, 0xb, 0xff, 0xfe, 0x66, 0x6, 0x25, 0x0, 0xf7, 0x4, 0xf, - 0x23, 0x3d, 0x5e, 0x8c, 0xba, 0xe7, 0xfc, 0xf, 0xff, 0xfe, 0x7e, 0x5, - 0x7, 0x0, 0xfe, 0x46, 0xe2, 0xb, 0xff, 0xfd, 0xfd, 0xb9, 0x14, 0xb, - 0x0, 0xfe, 0x2b, 0xc5, 0xb, 0xff, 0xfe, 0xa2, 0x15, 0x1c, 0x0, 0xfe, - 0x12, 0xa8, 0xa, 0xff, 0xfe, 0xec, 0x3a, 0x4, 0x0, 0xfd, 0x5, 0xb3, - 0xfd, 0xa, 0xff, 0xfe, 0xd2, 0x15, 0xb, 0x0, 0xfe, 0x5c, 0xf6, 0xa, - 0xff, 0xfd, 0xf9, 0x3f, 0x1, 0xe, 0x0, 0xfd, 0x24, 0x92, 0xb7, 0x13, - 0xae, 0xf9, 0xb1, 0xb6, 0xbd, 0xcb, 0xde, 0xec, 0xf7, 0x11, 0xff, 0xfe, - 0xb6, 0x1c, 0x8, 0x0, 0xfe, 0x29, 0xd8, 0xc, 0xff, 0xfc, 0xfa, 0xb5, - 0x3f, 0x2, 0x9, 0x0, 0xfe, 0x38, 0xdc, 0xb, 0xff, 0xfe, 0x81, 0x9, - 0x1c, 0x0, 0xfe, 0x3f, 0xe1, 0xa, 0xff, 0xfe, 0xcc, 0x24, 0x4, 0x0, - 0xfe, 0x1e, 0xcd, 0xb, 0xff, 0xfe, 0xba, 0x1, 0xa, 0x0, 0xfd, 0x1, - 0x7b, 0xfe, 0xa, 0xff, 0xfe, 0xe3, 0x25, 0xf, 0x0, 0xfd, 0x4b, 0xea, - 0xff, 0x14, 0xfe, 0x16, 0xff, 0xfe, 0xca, 0x2f, 0x9, 0x0, 0xfe, 0x4, - 0xba, 0xd, 0xff, 0xf9, 0xfd, 0xe4, 0xca, 0xa9, 0x84, 0x72, 0x6e, 0x3, - 0x6f, 0xfc, 0x6d, 0x6b, 0xa1, 0xf8, 0xb, 0xff, 0xfe, 0x5e, 0x1, 0x6, - 0x0, 0xfd, 0x2c, 0x71, 0x6f, 0x10, 0x6d, 0xfb, 0x6c, 0x6d, 0x94, 0xda, - 0xfd, 0xa, 0xff, 0xfe, 0xa3, 0x15, 0x4, 0x0, 0xfe, 0x3e, 0xea, 0xa, - 0xff, 0xfe, 0xf9, 0x93, 0xb, 0x0, 0xfe, 0x12, 0x9f, 0xb, 0xff, 0xfe, - 0xbb, 0x19, 0xf, 0x0, 0xfe, 0x68, 0xf8, 0x2a, 0xff, 0xfd, 0xe7, 0x52, - 0x1, 0xa, 0x0, 0xfe, 0x7e, 0xf5, 0xf, 0xff, 0xfe, 0xfd, 0xf6, 0x5, - 0xf2, 0x2, 0xf1, 0xff, 0xf7, 0xb, 0xff, 0xfe, 0xed, 0x44, 0x7, 0x0, - 0xfd, 0x7c, 0xed, 0xf2, 0x12, 0xf1, 0xff, 0xf9, 0xc, 0xff, 0xfe, 0x6f, - 0x4, 0x4, 0x0, 0xfe, 0x5c, 0xf3, 0xa, 0xff, 0xfe, 0xf2, 0x6c, 0xb, - 0x0, 0xfe, 0x23, 0xbd, 0xb, 0xff, 0xfe, 0x99, 0x10, 0xe, 0x0, 0xfd, - 0x9, 0x88, 0xfe, 0x29, 0xff, 0xfd, 0xf4, 0x72, 0x6, 0xb, 0x0, 0xfe, - 0x26, 0xe2, 0x24, 0xff, 0xfe, 0xcf, 0x2e, 0x6, 0x0, 0xfd, 0x4, 0xa0, - 0xfd, 0x1f, 0xff, 0xfe, 0xe1, 0x31, 0x5, 0x0, 0xfe, 0x73, 0xf6, 0xa, - 0xff, 0xfe, 0xec, 0x43, 0xb, 0x0, 0xfe, 0x38, 0xd4, 0xb, 0xff, 0xfe, - 0x81, 0xb, 0xe, 0x0, 0xfe, 0x17, 0xa9, 0x29, 0xff, 0xfd, 0xe3, 0x5c, - 0x9, 0xc, 0x0, 0xfd, 0x2, 0x7e, 0xf7, 0x23, 0xff, 0xfe, 0xae, 0x1a, - 0x6, 0x0, 0xfd, 0x15, 0xc7, 0xfe, 0x1f, 0xff, 0xfe, 0x70, 0x4, 0x5, - 0x0, 0xfe, 0x86, 0xf8, 0xa, 0xff, 0xfe, 0xde, 0x19, 0xb, 0x0, 0xfe, - 0x51, 0xea, 0xb, 0xff, 0xfe, 0x6a, 0x5, 0xe, 0x0, 0xfe, 0x2a, 0xc7, - 0x28, 0xff, 0xfd, 0xd8, 0x44, 0x5, 0xe, 0x0, 0xfd, 0xf, 0xb7, 0xfd, - 0x22, 0xff, 0xfe, 0x8d, 0xc, 0x6, 0x0, 0xfe, 0x29, 0xe9, 0x1f, 0xff, - 0xfe, 0xac, 0x1a, 0x5, 0x0, 0xfd, 0x3, 0xa1, 0xfb, 0x9, 0xff, 0xfd, - 0xfe, 0xc1, 0x1, 0xa, 0x0, 0xfd, 0x1, 0x72, 0xfa, 0xb, 0xff, 0xff, - 0x49, 0xf, 0x0, 0xfe, 0x40, 0xdd, 0x27, 0xff, 0xfd, 0xae, 0x2e, 0x2, - 0x10, 0x0, 0xfe, 0x41, 0xe7, 0x22, 0xff, 0xfe, 0x71, 0x5, 0x6, 0x0, - 0xfe, 0x48, 0xf2, 0x1e, 0xff, 0xfd, 0xd3, 0x36, 0x1, 0x5, 0x0, 0xfd, - 0x11, 0xc2, 0xfe, 0x9, 0xff, 0xfe, 0xfa, 0x9c, 0xb, 0x0, 0xfe, 0xb, - 0x92, 0xb, 0xff, 0xfe, 0xec, 0x2c, 0xf, 0x0, 0xfe, 0x60, 0xf5, 0x24, - 0xff, 0xfb, 0xfd, 0xc8, 0x65, 0xa, 0x1, 0x11, 0x0, 0xfd, 0x3, 0x4c, - 0xcd, 0x20, 0xff, 0xfe, 0xf1, 0x53, 0x7, 0x0, 0xfe, 0x66, 0xf5, 0x1d, - 0xff, 0xfd, 0xe0, 0x52, 0x2, 0x6, 0x0, 0xfe, 0x26, 0xe1, 0xa, 0xff, - 0xfe, 0xf4, 0x71, 0xb, 0x0, 0xfe, 0x19, 0xae, 0xb, 0xff, 0xfe, 0xc7, - 0x1e, 0xe, 0x0, 0xfe, 0x4, 0x81, 0x23, 0xff, 0xfb, 0xf9, 0xb7, 0x59, - 0x14, 0x4, 0x14, 0x0, 0xfc, 0x2, 0x1a, 0x92, 0xf9, 0x1e, 0xff, 0xfe, - 0xd8, 0x32, 0x7, 0x0, 0xfe, 0x7d, 0xf7, 0x1c, 0xff, 0xfd, 0xb4, 0x2d, - 0x3, 0x7, 0x0, 0xfe, 0x48, 0xee, 0xa, 0xff, 0xfe, 0xee, 0x4c, 0xb, - 0x0, 0xfe, 0x2f, 0xca, 0xb, 0xff, 0xfe, 0x9c, 0x12, 0xe, 0x0, 0xfe, - 0x11, 0xa0, 0x20, 0xff, 0xfa, 0xfd, 0xd6, 0x8f, 0x4b, 0x14, 0x2, 0x18, - 0x0, 0xfc, 0x5, 0x46, 0xa0, 0xef, 0x1c, 0xff, 0xfe, 0xc3, 0x24, 0x7, - 0x0, 0xfe, 0x9a, 0xfa, 0x1a, 0xff, 0xfc, 0xdc, 0x70, 0x15, 0x1, 0x8, - 0x0, 0xfe, 0x6f, 0xf4, 0xa, 0xff, 0xfe, 0xec, 0x3a, 0xb, 0x0, 0xfe, - 0x49, 0xe2, 0xb, 0xff, 0xfe, 0x78, 0x7, 0xe, 0x0, 0xfc, 0x1e, 0xae, - 0xf6, 0xe4, 0x14, 0xe5, 0x2, 0xe4, 0xf4, 0xe2, 0xdf, 0xdb, 0xd3, 0xcb, - 0xbc, 0x99, 0x6a, 0x3d, 0x15, 0x6, 0x1, 0x1b, 0x0, 0xf6, 0x1, 0x9, - 0x2b, 0x66, 0x9f, 0xc6, 0xd5, 0xe0, 0xe5, 0xe6, 0x13, 0xe7, 0xfc, 0xe8, - 0xf6, 0xa0, 0x17, 0x6, 0x0, 0xfc, 0x3, 0xaa, 0xe9, 0xe8, 0x14, 0xe7, - 0xf9, 0xe4, 0xdd, 0xd1, 0xa7, 0x57, 0x18, 0x3, 0xa, 0x0, 0xff, 0x84, - 0x2, 0xe8, 0x8, 0xe7, 0xfd, 0xea, 0xd1, 0x23, 0xb, 0x0, 0xfc, 0x5c, - 0xe4, 0xf0, 0xe6, 0x7, 0xe7, 0xfd, 0xe9, 0xf0, 0x4e, 0x7f, 0x0, 0x7f, - 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, - 0x0, 0x7f, 0x0, 0x38, 0x0}; -static const Image dash_screensaver_image = {199, 64, 2837, - dash_screensaver_data}; - -const VariantAnimation dash_screensaver = { - 114, - { - {29, 0, 125, 100, &dash_screensaver_image}, - {30, 0, 125, 100, &dash_screensaver_image}, - {31, 0, 125, 100, &dash_screensaver_image}, - {32, 0, 125, 100, &dash_screensaver_image}, - {33, 0, 125, 100, &dash_screensaver_image}, - {34, 0, 125, 100, &dash_screensaver_image}, - {35, 0, 125, 100, &dash_screensaver_image}, - {36, 0, 125, 100, &dash_screensaver_image}, - {37, 0, 125, 100, &dash_screensaver_image}, - {38, 0, 125, 100, &dash_screensaver_image}, - {39, 0, 125, 100, &dash_screensaver_image}, - {40, 0, 125, 100, &dash_screensaver_image}, - {41, 0, 125, 100, &dash_screensaver_image}, - {42, 0, 125, 100, &dash_screensaver_image}, - {43, 0, 125, 100, &dash_screensaver_image}, - {44, 0, 125, 100, &dash_screensaver_image}, - {45, 0, 125, 100, &dash_screensaver_image}, - {46, 0, 125, 100, &dash_screensaver_image}, - {47, 0, 125, 100, &dash_screensaver_image}, - {48, 0, 125, 100, &dash_screensaver_image}, - {49, 0, 125, 100, &dash_screensaver_image}, - {50, 0, 125, 100, &dash_screensaver_image}, - {51, 0, 125, 100, &dash_screensaver_image}, - {52, 0, 125, 100, &dash_screensaver_image}, - {53, 0, 125, 100, &dash_screensaver_image}, - {54, 0, 125, 100, &dash_screensaver_image}, - {55, 0, 125, 100, &dash_screensaver_image}, - {56, 0, 125, 100, &dash_screensaver_image}, - {55, 0, 125, 100, &dash_screensaver_image}, - {54, 0, 125, 100, &dash_screensaver_image}, - {53, 0, 125, 100, &dash_screensaver_image}, - {52, 0, 125, 100, &dash_screensaver_image}, - {51, 0, 125, 100, &dash_screensaver_image}, - {50, 0, 125, 100, &dash_screensaver_image}, - {49, 0, 125, 100, &dash_screensaver_image}, - {48, 0, 125, 100, &dash_screensaver_image}, - {47, 0, 125, 100, &dash_screensaver_image}, - {46, 0, 125, 100, &dash_screensaver_image}, - {45, 0, 125, 100, &dash_screensaver_image}, - {44, 0, 125, 100, &dash_screensaver_image}, - {43, 0, 125, 100, &dash_screensaver_image}, - {42, 0, 125, 100, &dash_screensaver_image}, - {41, 0, 125, 100, &dash_screensaver_image}, - {40, 0, 125, 100, &dash_screensaver_image}, - {39, 0, 125, 100, &dash_screensaver_image}, - {38, 0, 125, 100, &dash_screensaver_image}, - {37, 0, 125, 100, &dash_screensaver_image}, - {36, 0, 125, 100, &dash_screensaver_image}, - {35, 0, 125, 100, &dash_screensaver_image}, - {34, 0, 125, 100, &dash_screensaver_image}, - {33, 0, 125, 100, &dash_screensaver_image}, - {32, 0, 125, 100, &dash_screensaver_image}, - {31, 0, 125, 100, &dash_screensaver_image}, - {30, 0, 125, 100, &dash_screensaver_image}, - {29, 0, 125, 100, &dash_screensaver_image}, - {28, 0, 125, 100, &dash_screensaver_image}, - {27, 0, 125, 100, &dash_screensaver_image}, - {26, 0, 125, 100, &dash_screensaver_image}, - {25, 0, 125, 100, &dash_screensaver_image}, - {24, 0, 125, 100, &dash_screensaver_image}, - {23, 0, 125, 100, &dash_screensaver_image}, - {22, 0, 125, 100, &dash_screensaver_image}, - {21, 0, 125, 100, &dash_screensaver_image}, - {20, 0, 125, 100, &dash_screensaver_image}, - {19, 0, 125, 100, &dash_screensaver_image}, - {18, 0, 125, 100, &dash_screensaver_image}, - {17, 0, 125, 100, &dash_screensaver_image}, - {16, 0, 125, 100, &dash_screensaver_image}, - {15, 0, 125, 100, &dash_screensaver_image}, - {14, 0, 125, 100, &dash_screensaver_image}, - {13, 0, 125, 100, &dash_screensaver_image}, - {12, 0, 125, 100, &dash_screensaver_image}, - {11, 0, 125, 100, &dash_screensaver_image}, - {10, 0, 125, 100, &dash_screensaver_image}, - {9, 0, 125, 100, &dash_screensaver_image}, - {8, 0, 125, 100, &dash_screensaver_image}, - {7, 0, 125, 100, &dash_screensaver_image}, - {6, 0, 125, 100, &dash_screensaver_image}, - {5, 0, 125, 100, &dash_screensaver_image}, - {4, 0, 125, 100, &dash_screensaver_image}, - {3, 0, 125, 100, &dash_screensaver_image}, - {2, 0, 125, 100, &dash_screensaver_image}, - {1, 0, 125, 100, &dash_screensaver_image}, - {0, 0, 125, 100, &dash_screensaver_image}, - {0, 0, 125, 100, &dash_screensaver_image}, - {1, 0, 125, 100, &dash_screensaver_image}, - {2, 0, 125, 100, &dash_screensaver_image}, - {3, 0, 125, 100, &dash_screensaver_image}, - {4, 0, 125, 100, &dash_screensaver_image}, - {5, 0, 125, 100, &dash_screensaver_image}, - {6, 0, 125, 100, &dash_screensaver_image}, - {7, 0, 125, 100, &dash_screensaver_image}, - {8, 0, 125, 100, &dash_screensaver_image}, - {9, 0, 125, 100, &dash_screensaver_image}, - {10, 0, 125, 100, &dash_screensaver_image}, - {11, 0, 125, 100, &dash_screensaver_image}, - {12, 0, 125, 100, &dash_screensaver_image}, - {13, 0, 125, 100, &dash_screensaver_image}, - {14, 0, 125, 100, &dash_screensaver_image}, - {15, 0, 125, 100, &dash_screensaver_image}, - {16, 0, 125, 100, &dash_screensaver_image}, - {17, 0, 125, 100, &dash_screensaver_image}, - {18, 0, 125, 100, &dash_screensaver_image}, - {19, 0, 125, 100, &dash_screensaver_image}, - {20, 0, 125, 100, &dash_screensaver_image}, - {21, 0, 125, 100, &dash_screensaver_image}, - {22, 0, 125, 100, &dash_screensaver_image}, - {23, 0, 125, 100, &dash_screensaver_image}, - {24, 0, 125, 100, &dash_screensaver_image}, - {25, 0, 125, 100, &dash_screensaver_image}, - {26, 0, 125, 100, &dash_screensaver_image}, - {27, 0, 125, 100, &dash_screensaver_image}, - {28, 0, 125, 100, &dash_screensaver_image}, - {29, 0, 125, 100, &dash_screensaver_image}, - }}; - -VariantInfo dash_svi __attribute__((section("variant_info"))) = { - .version = 1, - .name = "DASH", - .logo = &dash_logo, - .logo_reversed = &dash_logo_reversed, - .screensaver_timeout = ONE_SEC * 60 * 10, - .screensaver = &dash_screensaver}; diff --git a/tools/variant/fox.c b/tools/variant/fox.c deleted file mode 100644 index 0de5bd181..000000000 --- a/tools/variant/fox.c +++ /dev/null @@ -1,787 +0,0 @@ -/* - * This file is part of the KeepKey project. - * - * Copyright (C) 2015 KeepKey LLC - * - * This library is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . - */ - -#include "keepkey/board/variant.h" - -#include "keepkey/board/timer.h" - -const uint8_t fox_logo_data[2432] = { - 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, - 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, - 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, - 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, - 0x55, 0x0, 0xfe, 0xa, 0x7, 0x10, 0x0, 0xfd, 0x1, 0xa, 0x4, 0x7f, - 0x0, 0x6b, 0x0, 0xfb, 0x1, 0x23, 0x35, 0x1c, 0x6, 0xc, 0x0, 0xfb, - 0x1, 0x11, 0x30, 0x44, 0x13, 0x7f, 0x0, 0x6c, 0x0, 0xf9, 0x1b, 0x50, - 0x52, 0x40, 0x24, 0xe, 0x3, 0x7, 0x1, 0xf9, 0x5, 0x16, 0x33, 0x54, - 0x65, 0x52, 0xb, 0x7f, 0x0, 0x6c, 0x0, 0xfe, 0x10, 0x51, 0x2, 0x60, - 0xfb, 0x59, 0x49, 0x35, 0x26, 0x23, 0x3, 0x1f, 0xf7, 0x23, 0x2a, 0x3d, - 0x58, 0x63, 0x64, 0x62, 0x44, 0x6, 0x7f, 0x0, 0x6c, 0x0, 0xfe, 0x9, - 0x48, 0x4, 0x60, 0xf6, 0x5f, 0x5b, 0x59, 0x51, 0x4e, 0x54, 0x5a, 0x5d, - 0x60, 0x63, 0x3, 0x60, 0xfe, 0x33, 0x2, 0x7f, 0x0, 0x6c, 0x0, 0xfd, - 0x4, 0x3b, 0x5e, 0x6, 0x60, 0xfe, 0x5d, 0x5c, 0x7, 0x60, 0xfe, 0x5b, - 0x24, 0x7f, 0x0, 0x6d, 0x0, 0xfd, 0x2, 0x2f, 0x5d, 0xf, 0x60, 0xfe, - 0x56, 0x18, 0x7f, 0x0, 0x6e, 0x0, 0xfc, 0x22, 0x59, 0x60, 0x5e, 0xb, - 0x60, 0xfc, 0x5e, 0x60, 0x4f, 0xe, 0x7f, 0x0, 0x6e, 0x0, 0xfc, 0x1b, - 0x56, 0x5a, 0x5c, 0xa, 0x60, 0xfb, 0x5e, 0x5a, 0x5d, 0x41, 0x5, 0x7f, - 0x0, 0x6e, 0x0, 0xfd, 0x11, 0x4b, 0x59, 0xc, 0x60, 0xfc, 0x5c, 0x57, - 0x2c, 0x3, 0x7f, 0x0, 0x6e, 0x0, 0xfd, 0x1b, 0x54, 0x5f, 0xd, 0x60, - 0xfd, 0x59, 0x2c, 0x2, 0xa, 0x0, 0xfe, 0x4, 0x17, 0x3, 0x1c, 0xff, - 0xe, 0x6, 0x0, 0xfe, 0x9, 0x4, 0x35, 0x0, 0xfe, 0x4, 0x17, 0x3, - 0x1c, 0xff, 0xe, 0x6, 0x0, 0xfe, 0x9, 0x4, 0x7f, 0x0, 0x13, 0x0, - 0xfe, 0x31, 0x5e, 0xe, 0x60, 0xfd, 0x5f, 0x54, 0x19, 0x8, 0x0, 0xfc, - 0x4, 0x41, 0x87, 0xbb, 0x2, 0xca, 0xfc, 0xc7, 0xad, 0x7e, 0x2e, 0x3, - 0x0, 0xfd, 0x3c, 0x93, 0x45, 0x33, 0x0, 0xfc, 0x4, 0x41, 0x87, 0xbb, - 0x2, 0xca, 0xfc, 0xc7, 0xad, 0x7e, 0x2e, 0x3, 0x0, 0xfd, 0x3c, 0x93, - 0x45, 0xa, 0x0, 0xfe, 0x23, 0x21, 0x5, 0x0, 0xfd, 0x3f, 0x8b, 0x79, - 0x7d, 0x0, 0xfe, 0x9, 0x47, 0x10, 0x60, 0xfe, 0x64, 0x31, 0x8, 0x0, - 0xf0, 0x76, 0xdb, 0xec, 0xdd, 0xd3, 0xcd, 0xd6, 0xe0, 0xec, 0xcd, 0x72, - 0x0, 0x4, 0x76, 0xe6, 0x7a, 0x33, 0x0, 0xf0, 0x76, 0xdb, 0xec, 0xdd, - 0xd3, 0xcd, 0xd6, 0xe0, 0xec, 0xcd, 0x72, 0x0, 0x4, 0x76, 0xe6, 0x7a, - 0x9, 0x0, 0xfc, 0x25, 0xc6, 0xcb, 0x25, 0x3, 0x0, 0xfc, 0x76, 0xec, - 0xee, 0x85, 0x7d, 0x0, 0xfe, 0x19, 0x57, 0x10, 0x60, 0xfd, 0x63, 0x4a, - 0x8, 0x6, 0x0, 0xef, 0x60, 0xdb, 0xe0, 0x96, 0x45, 0x1c, 0xe, 0x25, - 0x4a, 0xa6, 0xe2, 0xdb, 0x41, 0x4, 0x76, 0xe6, 0x7a, 0x32, 0x0, 0xef, - 0x60, 0xdb, 0xe0, 0x96, 0x45, 0x1c, 0xe, 0x25, 0x4a, 0xa6, 0xe2, 0xdb, - 0x41, 0x4, 0x76, 0xe6, 0x7a, 0x9, 0x0, 0xfc, 0x25, 0xbf, 0xc6, 0x25, - 0x2, 0x0, 0xfc, 0x11, 0xe0, 0xd2, 0x43, 0x4, 0x0, 0xfe, 0x9f, 0xad, - 0x77, 0x0, 0xfd, 0x1, 0x1e, 0x56, 0xf, 0x60, 0xfc, 0x61, 0x65, 0x4b, - 0xc, 0x5, 0x0, 0xfb, 0x4, 0xad, 0xe8, 0x82, 0x4, 0x5, 0x0, 0xf8, - 0x12, 0x7e, 0x9e, 0x25, 0x4, 0x76, 0xe6, 0x7a, 0x31, 0x0, 0xfb, 0x4, - 0xad, 0xe8, 0x82, 0x4, 0x5, 0x0, 0xf8, 0x12, 0x7e, 0x9e, 0x25, 0x4, - 0x76, 0xe6, 0x7a, 0xa, 0x0, 0xfe, 0x29, 0x2f, 0x3, 0x0, 0xfd, 0x43, - 0xf2, 0x8b, 0x5, 0x0, 0x2, 0xcd, 0x78, 0x0, 0xfc, 0x4, 0x3b, 0x61, - 0x65, 0xc, 0x60, 0xfc, 0x64, 0x5c, 0x39, 0x12, 0x6, 0x0, 0xfc, 0x17, - 0xc7, 0xdb, 0x33, 0x7, 0x0, 0xf9, 0x4, 0xe, 0x0, 0x4, 0x76, 0xe6, - 0x7a, 0x2, 0x0, 0xfd, 0x12, 0x1c, 0xe, 0x9, 0x0, 0xff, 0x12, 0x2, - 0x1c, 0xff, 0x4, 0x2, 0x0, 0xfe, 0xe, 0x9, 0x2, 0x0, 0xff, 0xe, - 0x3, 0x0, 0xff, 0x4, 0x2, 0x1c, 0xff, 0x4, 0x9, 0x0, 0xff, 0xe, - 0x2, 0x1c, 0xff, 0x17, 0x4, 0x0, 0xfc, 0x17, 0xc7, 0xdb, 0x33, 0x7, - 0x0, 0xf9, 0x4, 0xe, 0x0, 0x4, 0x76, 0xe6, 0x7a, 0x2, 0x0, 0xfd, - 0x12, 0x1c, 0xe, 0xa, 0x0, 0xfd, 0x58, 0xf4, 0x6a, 0x5, 0x0, 0xfe, - 0xcb, 0xd0, 0x77, 0x0, 0xfc, 0x4, 0x27, 0x54, 0x60, 0x2, 0x64, 0xff, - 0x62, 0x8, 0x60, 0xfb, 0x61, 0x62, 0x4e, 0x22, 0x4, 0x7, 0x0, 0xfc, - 0x12, 0xc1, 0xe4, 0x60, 0xa, 0x0, 0xf5, 0x4, 0x76, 0xe6, 0x7a, 0x2a, - 0x72, 0xb0, 0xc4, 0xb0, 0x76, 0x20, 0x4, 0x0, 0xe9, 0x4, 0x38, 0x87, - 0xb4, 0xc4, 0xc1, 0x96, 0x41, 0x17, 0x8b, 0x8f, 0x17, 0x5c, 0xa2, 0x33, - 0xe, 0x58, 0xa2, 0xc1, 0xbe, 0x96, 0x4a, 0x4, 0x5, 0x0, 0xfd, 0x2a, - 0x76, 0xb0, 0x2, 0xc4, 0xfd, 0xbb, 0x82, 0x38, 0x2, 0x0, 0xfc, 0x12, - 0xc1, 0xe4, 0x60, 0xa, 0x0, 0xf5, 0x4, 0x76, 0xe6, 0x7a, 0x2a, 0x72, - 0xb0, 0xc4, 0xb0, 0x76, 0x20, 0x3, 0x0, 0xee, 0x51, 0x4f, 0x0, 0x3f, - 0x6d, 0xaf, 0xf4, 0xbd, 0x70, 0x43, 0x4, 0x6a, 0x7f, 0xe5, 0xe9, 0x7f, - 0x64, 0xd, 0x73, 0x0, 0xfd, 0x9, 0x3a, 0x5d, 0x4, 0x60, 0xff, 0x5e, - 0x7, 0x60, 0x2, 0x63, 0xfe, 0x41, 0x11, 0xa, 0x0, 0xfb, 0x82, 0xe8, - 0xd0, 0x6d, 0x25, 0x8, 0x0, 0xfa, 0x4, 0x76, 0xe6, 0xa2, 0xb0, 0xdb, - 0x2, 0xd3, 0xfc, 0xe4, 0xe6, 0xa6, 0x1c, 0x3, 0x0, 0xfc, 0x69, 0xca, - 0xea, 0xdb, 0x2, 0xcd, 0xee, 0xe2, 0xcd, 0x7e, 0xca, 0xd6, 0x2e, 0x93, - 0xe6, 0x76, 0xa6, 0xe2, 0xe4, 0xd3, 0xdd, 0xe8, 0xdd, 0x96, 0x17, 0x3, - 0x0, 0xfc, 0x45, 0xbe, 0xe6, 0xd0, 0x2, 0xc1, 0xfc, 0xd3, 0xe4, 0xc4, - 0x4f, 0x2, 0x0, 0xfb, 0x82, 0xe8, 0xd0, 0x6d, 0x25, 0x8, 0x0, 0xfa, - 0x4, 0x76, 0xe6, 0xa2, 0xb0, 0xdb, 0x2, 0xd3, 0xfc, 0xe4, 0xe6, 0xa6, - 0x1c, 0x2, 0x0, 0xf3, 0xd6, 0xcb, 0x0, 0x99, 0xe1, 0xe7, 0xf8, 0xea, - 0xe4, 0x9f, 0x37, 0xdd, 0xe4, 0x2, 0xf4, 0xfd, 0xe4, 0xd9, 0x45, 0x72, - 0x0, 0xfd, 0xa, 0x3a, 0x62, 0x4, 0x60, 0xfd, 0x5e, 0x57, 0x5c, 0x2, - 0x61, 0xf9, 0x80, 0x88, 0x65, 0x64, 0x5b, 0x48, 0x19, 0xb, 0x0, 0xfe, - 0x1c, 0xa6, 0x2, 0xe4, 0xf9, 0xd0, 0xad, 0x87, 0x60, 0x38, 0x17, 0x4, - 0x2, 0x0, 0xfa, 0x4, 0x76, 0xea, 0xe2, 0xcd, 0x69, 0x2, 0x2a, 0xf5, - 0x5c, 0xbb, 0xea, 0x93, 0x9, 0x0, 0x4a, 0xd3, 0xe6, 0xa2, 0x41, 0x2, - 0x25, 0xe7, 0x60, 0xb0, 0xdb, 0xe6, 0xd6, 0x2e, 0x93, 0xec, 0xd6, 0xe4, - 0x9e, 0x4f, 0x2a, 0x3c, 0x76, 0xca, 0xea, 0x8b, 0x4, 0x0, 0x2e, 0xbe, - 0xe2, 0x96, 0x2e, 0x2, 0x12, 0xf8, 0x2e, 0x87, 0xdd, 0xc1, 0x20, 0x0, - 0x1c, 0xa6, 0x2, 0xe4, 0xf9, 0xd0, 0xad, 0x87, 0x60, 0x38, 0x17, 0x4, - 0x2, 0x0, 0xfa, 0x4, 0x76, 0xea, 0xe2, 0xcd, 0x69, 0x2, 0x2a, 0xe9, - 0x5c, 0xbb, 0xea, 0x93, 0x9, 0x0, 0xdd, 0xcd, 0x0, 0x1, 0x13, 0x7c, - 0xf4, 0x8e, 0x1b, 0x7, 0x0, 0x11, 0x33, 0xd4, 0xd6, 0x37, 0x11, 0x72, - 0x0, 0xfe, 0x10, 0x3e, 0x2, 0x61, 0x5, 0x60, 0xf5, 0x59, 0x55, 0x61, - 0x76, 0xc5, 0xd8, 0x96, 0x5b, 0x49, 0x32, 0x9, 0xc, 0x0, 0xfc, 0x12, - 0x5c, 0xa2, 0xc7, 0x2, 0xe0, 0xf5, 0xe2, 0xdd, 0xc1, 0x8b, 0x33, 0x0, - 0x4, 0x76, 0xec, 0xdd, 0x60, 0x4, 0x0, 0xf7, 0x45, 0xd8, 0xcd, 0x2a, - 0x9, 0x9e, 0xe6, 0x87, 0xe, 0x4, 0x0, 0xf6, 0x25, 0xbe, 0xee, 0xd6, - 0x2e, 0x93, 0xee, 0xe6, 0x82, 0x12, 0x4, 0x0, 0xf7, 0x4a, 0xd8, 0xd3, - 0x38, 0x0, 0x87, 0xe8, 0x93, 0x12, 0x4, 0x0, 0xfc, 0x9, 0x93, 0xe8, - 0x69, 0x2, 0x0, 0xfc, 0x12, 0x5c, 0xa2, 0xc7, 0x2, 0xe0, 0xf5, 0xe2, - 0xdd, 0xc1, 0x8b, 0x33, 0x0, 0x4, 0x76, 0xec, 0xdd, 0x60, 0x4, 0x0, - 0xf9, 0x45, 0xd8, 0xcd, 0x2a, 0x9, 0xdd, 0xcd, 0x3, 0x0, 0xfd, 0x51, - 0xf4, 0x64, 0x5, 0x0, 0xfe, 0xd4, 0xcd, 0x73, 0x0, 0xfd, 0xd, 0x46, - 0x64, 0x7, 0x60, 0xf6, 0x5e, 0x53, 0x55, 0x89, 0xea, 0xef, 0xbf, 0x54, - 0x3c, 0x1f, 0xf, 0x0, 0xf1, 0x9, 0x1c, 0x3c, 0x5c, 0x87, 0xb4, 0xdb, - 0xea, 0xbb, 0x38, 0x4, 0x76, 0xea, 0xa2, 0x9, 0x4, 0x0, 0xfb, 0x9, - 0xb0, 0xe0, 0x4a, 0x25, 0x2, 0xd0, 0xff, 0x2e, 0x6, 0x0, 0xf8, 0x69, - 0xe4, 0xd6, 0x2e, 0x93, 0xee, 0xc4, 0x20, 0x5, 0x0, 0xf8, 0x4, 0x93, - 0xe4, 0x6d, 0x1c, 0xc4, 0xdb, 0x3c, 0x6, 0x0, 0xfd, 0x45, 0xdd, 0x9e, - 0x4, 0x0, 0xf1, 0x9, 0x1c, 0x3c, 0x5c, 0x87, 0xb4, 0xdb, 0xea, 0xbb, - 0x38, 0x4, 0x76, 0xea, 0xa2, 0x9, 0x4, 0x0, 0xf9, 0x9, 0xb0, 0xe0, - 0x4a, 0x25, 0xdd, 0xcd, 0x3, 0x0, 0xfd, 0x51, 0xf4, 0x64, 0x5, 0x0, - 0xfe, 0xd4, 0xcd, 0x73, 0x0, 0xfe, 0x1b, 0x5e, 0x8, 0x60, 0xf9, 0x5f, - 0x56, 0x50, 0x57, 0xa4, 0xc7, 0x70, 0x2, 0x39, 0xff, 0x12, 0x14, 0x0, - 0xf7, 0x4, 0x4f, 0xbe, 0xec, 0xad, 0x12, 0x76, 0xe6, 0x7a, 0x5, 0x0, - 0xf8, 0x4, 0x93, 0xe2, 0x5c, 0x33, 0xdd, 0xad, 0xe, 0x6, 0x0, 0xf8, - 0x33, 0xd8, 0xd6, 0x2e, 0x93, 0xee, 0xa2, 0x9, 0x6, 0x0, 0xf9, 0x60, - 0xe4, 0x87, 0x2a, 0xd6, 0xe4, 0xb7, 0x6, 0xb0, 0xfd, 0xbe, 0xea, 0xb7, - 0x9, 0x0, 0xf7, 0x4, 0x4f, 0xbe, 0xec, 0xad, 0x12, 0x76, 0xe6, 0x7a, - 0x5, 0x0, 0xf9, 0x4, 0x93, 0xe2, 0x5c, 0x33, 0xdd, 0xcd, 0x3, 0x0, - 0xfd, 0x51, 0xf4, 0x64, 0x5, 0x0, 0xfe, 0xd4, 0xcd, 0x73, 0x0, 0xfe, - 0x1b, 0x5e, 0x9, 0x60, 0xf7, 0x5b, 0x51, 0x4f, 0x5c, 0x60, 0x3d, 0x3f, - 0x2e, 0x7, 0x16, 0x0, 0xf9, 0x4a, 0xe0, 0xd6, 0x2e, 0x76, 0xe6, 0x7a, - 0x5, 0x0, 0xf8, 0x4, 0x93, 0xe2, 0x5c, 0x33, 0xdd, 0xa6, 0x4, 0x6, - 0x0, 0xff, 0x20, 0x2, 0xd6, 0xfb, 0x2e, 0x93, 0xee, 0x96, 0x9, 0x6, - 0x0, 0xf9, 0x60, 0xe4, 0x8b, 0x2a, 0xd6, 0xe6, 0xc7, 0x7, 0xc4, 0xfe, - 0xc1, 0x93, 0xb, 0x0, 0xf9, 0x4a, 0xe0, 0xd6, 0x2e, 0x76, 0xe6, 0x7a, - 0x5, 0x0, 0xf9, 0x4, 0x93, 0xe2, 0x5c, 0x33, 0xdd, 0xcd, 0x3, 0x0, - 0xfd, 0x51, 0xf4, 0x64, 0x5, 0x0, 0xfe, 0xd4, 0xcd, 0x73, 0x0, 0xfe, - 0x1b, 0x5e, 0xa, 0x60, 0xff, 0x55, 0x2, 0x50, 0xfc, 0x42, 0x40, 0x3f, - 0x1f, 0xd, 0x0, 0xfe, 0x2e, 0x20, 0x8, 0x0, 0xf9, 0x20, 0xd3, 0xdd, - 0x33, 0x76, 0xe6, 0x7a, 0x5, 0x0, 0xf8, 0x4, 0x93, 0xe2, 0x5c, 0x2e, - 0xd8, 0xbb, 0xe, 0x6, 0x0, 0xf8, 0x45, 0xe2, 0xd6, 0x2e, 0x93, 0xee, - 0xb0, 0x12, 0x5, 0x0, 0xf8, 0x4, 0x87, 0xe6, 0x7e, 0x17, 0xc4, 0xd3, - 0x41, 0x9, 0x1c, 0xfd, 0x0, 0x2e, 0x20, 0x8, 0x0, 0xf9, 0x20, 0xd3, - 0xdd, 0x33, 0x76, 0xe6, 0x7a, 0x5, 0x0, 0xf9, 0x4, 0x93, 0xe2, 0x5c, - 0x2e, 0xdd, 0xcd, 0x3, 0x0, 0xfd, 0x51, 0xf4, 0x64, 0x5, 0x0, 0xfe, - 0xd4, 0xcd, 0x73, 0x0, 0xfe, 0x1c, 0x5e, 0x7, 0x60, 0xfc, 0x5d, 0x5e, - 0x60, 0x58, 0x2, 0x50, 0xfc, 0x47, 0x40, 0x36, 0xe, 0xc, 0x0, 0xfc, - 0x4f, 0xd3, 0xb7, 0x33, 0x7, 0x0, 0xf9, 0x60, 0xe4, 0xc4, 0x17, 0x76, - 0xe6, 0x7a, 0x5, 0x0, 0xf8, 0x4, 0x93, 0xe2, 0x5c, 0x12, 0xbb, 0xe2, - 0x65, 0x6, 0x0, 0xf8, 0x8f, 0xea, 0xd6, 0x2e, 0x93, 0xee, 0xdb, 0x58, - 0x5, 0x0, 0xf7, 0x25, 0xbe, 0xe0, 0x53, 0x0, 0x9a, 0xe6, 0x7e, 0x9, - 0x5, 0x0, 0xf9, 0x12, 0x4, 0x0, 0x4f, 0xd3, 0xb7, 0x33, 0x7, 0x0, - 0xf9, 0x60, 0xe4, 0xc4, 0x17, 0x76, 0xe6, 0x7a, 0x5, 0x0, 0xf9, 0x4, - 0x93, 0xe2, 0x5c, 0x12, 0xdd, 0xcd, 0x3, 0x0, 0xfd, 0x51, 0xf4, 0x64, - 0x5, 0x0, 0xfe, 0xcb, 0xd2, 0x73, 0x0, 0xfd, 0x1c, 0x5d, 0x61, 0x5, - 0x60, 0xf5, 0x5d, 0x58, 0x55, 0x5a, 0x5b, 0x52, 0x50, 0x47, 0x3f, 0x28, - 0x3, 0xc, 0x0, 0xfa, 0x33, 0xc4, 0xe8, 0xbb, 0x5c, 0x17, 0x3, 0x4, - 0xf7, 0xe, 0x5c, 0xc7, 0xec, 0x8b, 0x9, 0x76, 0xe6, 0x7a, 0x5, 0x0, - 0xf6, 0x4, 0x93, 0xe2, 0x5c, 0x0, 0x65, 0xe4, 0xc7, 0x4a, 0x9, 0x2, - 0x4, 0xf4, 0x12, 0x76, 0xdb, 0xec, 0xd6, 0x2e, 0x93, 0xee, 0xea, 0xc4, - 0x4a, 0x9, 0x2, 0x4, 0xf5, 0x33, 0xb0, 0xec, 0xb4, 0x1c, 0x0, 0x4a, - 0xd3, 0xd8, 0x6d, 0xe, 0x3, 0x4, 0xf6, 0x45, 0xa2, 0x76, 0x4, 0x33, - 0xc4, 0xe8, 0xbb, 0x5c, 0x17, 0x3, 0x4, 0xf7, 0xe, 0x5c, 0xc7, 0xec, - 0x8b, 0x9, 0x76, 0xe6, 0x7a, 0x5, 0x0, 0xf9, 0x4, 0x93, 0xe2, 0x5c, - 0x0, 0xdd, 0xcd, 0x3, 0x0, 0xfd, 0x51, 0xf4, 0x64, 0x5, 0x0, 0xfd, - 0xb3, 0xe5, 0x37, 0x72, 0x0, 0xfd, 0x9, 0x40, 0x66, 0x6, 0x60, 0xfc, - 0x5f, 0x5b, 0x56, 0x54, 0x2, 0x50, 0xfc, 0x47, 0x3e, 0x19, 0x1, 0xd, - 0x0, 0xef, 0x4a, 0xbe, 0xee, 0xe2, 0xc1, 0x9a, 0x93, 0xa9, 0xc4, 0xe2, - 0xea, 0xa6, 0x20, 0x4, 0x76, 0xe6, 0x7a, 0x5, 0x0, 0xe2, 0x4, 0x93, - 0xe2, 0x5c, 0x0, 0x9, 0x9a, 0xee, 0xd8, 0xa2, 0x8b, 0x93, 0xb7, 0xe4, - 0xb7, 0xdd, 0xd6, 0x2e, 0x93, 0xe6, 0xbb, 0xd3, 0xdd, 0xb4, 0x93, 0xa9, - 0xd6, 0xec, 0xbe, 0x41, 0x3, 0x0, 0xf6, 0x7e, 0xe6, 0xe4, 0xbe, 0xa2, - 0x9e, 0xbb, 0xdd, 0xe2, 0x7e, 0x2, 0x0, 0xef, 0x4a, 0xbe, 0xee, 0xe2, - 0xc1, 0x9a, 0x93, 0xa9, 0xc4, 0xe2, 0xea, 0xa6, 0x20, 0x4, 0x76, 0xe6, - 0x7a, 0x5, 0x0, 0xf9, 0x4, 0x93, 0xe2, 0x5c, 0x0, 0xdd, 0xcd, 0x3, - 0x0, 0xfd, 0x51, 0xf4, 0x64, 0x5, 0x0, 0xfb, 0x5e, 0xe7, 0xcd, 0x8b, - 0x11, 0x71, 0x0, 0xfd, 0x14, 0x52, 0x64, 0x7, 0x60, 0xf9, 0x5f, 0x5c, - 0x6b, 0x5d, 0x43, 0x33, 0xa, 0xf, 0x0, 0xfb, 0x2a, 0x87, 0xc4, 0xdd, - 0xe4, 0x3, 0xe2, 0xf8, 0xc7, 0x7e, 0x17, 0x0, 0x4, 0x6d, 0xd6, 0x69, - 0x5, 0x0, 0xfc, 0x4, 0x82, 0xd0, 0x53, 0x2, 0x0, 0xfc, 0x12, 0x7e, - 0xc1, 0xdb, 0x2, 0xdd, 0xf5, 0xc7, 0x7a, 0x33, 0xbe, 0xc1, 0x2a, 0x93, - 0xe6, 0x65, 0x4a, 0xb0, 0x2, 0xdd, 0xfc, 0xe0, 0xd0, 0x9e, 0x33, 0x4, - 0x0, 0xfc, 0x4, 0x58, 0xb4, 0xd8, 0x2, 0xe0, 0xfc, 0xd3, 0xb4, 0x69, - 0xe, 0x3, 0x0, 0xfb, 0x2a, 0x87, 0xc4, 0xdd, 0xe4, 0x3, 0xe2, 0xf8, - 0xc7, 0x7e, 0x17, 0x0, 0x4, 0x6d, 0xd6, 0x69, 0x5, 0x0, 0xf9, 0x4, - 0x82, 0xd0, 0x53, 0x0, 0xad, 0xa4, 0x3, 0x0, 0xfd, 0x43, 0xd4, 0x49, - 0x6, 0x0, 0xfc, 0x82, 0xd6, 0xe1, 0x4b, 0x71, 0x0, 0xfc, 0x1, 0x29, - 0x65, 0x62, 0x6, 0x60, 0xf9, 0x5e, 0x7a, 0xc6, 0xb4, 0x69, 0x25, 0x3, - 0x11, 0x0, 0xf8, 0x1c, 0x3c, 0x60, 0x69, 0x58, 0x3c, 0x1c, 0x4, 0x3, - 0x0, 0xfd, 0x9, 0x25, 0xe, 0x6, 0x0, 0xfd, 0x12, 0x25, 0x9, 0x4, - 0x0, 0xfb, 0x20, 0x41, 0x4a, 0x41, 0x25, 0x2, 0x0, 0xf3, 0x20, 0x25, - 0x9, 0x93, 0xe6, 0x5c, 0x0, 0x12, 0x38, 0x4a, 0x3c, 0x20, 0xe, 0x7, - 0x0, 0xfa, 0x12, 0x33, 0x4a, 0x41, 0x2a, 0x12, 0x7, 0x0, 0xf8, 0x1c, - 0x3c, 0x60, 0x69, 0x58, 0x3c, 0x1c, 0x4, 0x3, 0x0, 0xfd, 0x9, 0x25, - 0xe, 0x6, 0x0, 0xfc, 0x12, 0x25, 0x9, 0x0, 0x2, 0x25, 0x3, 0x0, - 0xfd, 0xe, 0x25, 0xe, 0x8, 0x0, 0xff, 0x13, 0x73, 0x0, 0xfd, 0x7, - 0x46, 0x64, 0x5, 0x60, 0xfd, 0x5f, 0x6c, 0xb9, 0x2, 0xef, 0xfc, 0xda, - 0x8a, 0x35, 0x5, 0x34, 0x0, 0xfc, 0x4, 0x93, 0xe6, 0x5c, 0x7f, 0x0, - 0x39, 0x0, 0xfd, 0x1b, 0x58, 0x61, 0x4, 0x60, 0xfd, 0x66, 0xa7, 0xe9, - 0x3, 0xf0, 0xfc, 0xeb, 0xc4, 0x73, 0x14, 0x33, 0x0, 0xfc, 0x4, 0x93, - 0xe6, 0x5c, 0x7f, 0x0, 0x39, 0x0, 0xfd, 0x2, 0x35, 0x64, 0x3, 0x60, - 0xfd, 0x5e, 0x9a, 0xe2, 0x6, 0xf0, 0xfe, 0xd7, 0x3d, 0x33, 0x0, 0xfc, - 0x4, 0x93, 0xe6, 0x5c, 0x7f, 0x0, 0x3a, 0x0, 0xf9, 0xd, 0x4d, 0x64, - 0x60, 0x5d, 0x83, 0xd8, 0x7, 0xf0, 0xfe, 0xde, 0x43, 0x33, 0x0, 0xfc, - 0x4, 0x93, 0xe6, 0x5c, 0x7f, 0x0, 0x3a, 0x0, 0xfa, 0x1, 0x24, 0x5c, - 0x61, 0x81, 0xce, 0x8, 0xf0, 0xfe, 0xde, 0x43, 0x34, 0x0, 0xfd, 0x4a, - 0x87, 0x2e, 0x7f, 0x0, 0x3b, 0x0, 0xfb, 0x2, 0x37, 0x6e, 0xbc, 0xef, - 0x7, 0xf0, 0xfd, 0xef, 0xcd, 0x37, 0x7f, 0x0, 0x73, 0x0, 0xfa, 0x11, - 0x51, 0x9f, 0xc8, 0xe1, 0xef, 0x4, 0xf0, 0xfc, 0xe1, 0xa0, 0x4f, 0x9, - 0x7f, 0x0, 0x74, 0x0, 0xf4, 0x8, 0x1c, 0x3d, 0x6c, 0xa2, 0xce, 0xe7, - 0xe4, 0xaf, 0x5c, 0x18, 0x2, 0x7f, 0x0, 0x78, 0x0, 0xfa, 0x7, 0x17, - 0x3d, 0x70, 0x67, 0x21, 0x7f, 0x0, 0x7d, 0x0, 0xff, 0x1, 0x2, 0x3, - 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, - 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, - 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, - 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, - 0x7f, 0x0, 0x7f, 0x0, 0x7f, 0x0, 0x54, 0x0}; -static const Image fox_logo_image = {256, 64, 2432, fox_logo_data}; - -const VariantAnimation fox_logo = { - 21, - { - {0, 0, 25, 0, &fox_logo_image}, {0, 0, 25, 5, &fox_logo_image}, - {0, 0, 25, 10, &fox_logo_image}, {0, 0, 25, 15, &fox_logo_image}, - {0, 0, 25, 20, &fox_logo_image}, {0, 0, 25, 25, &fox_logo_image}, - {0, 0, 25, 30, &fox_logo_image}, {0, 0, 25, 35, &fox_logo_image}, - {0, 0, 25, 40, &fox_logo_image}, {0, 0, 25, 45, &fox_logo_image}, - {0, 0, 25, 50, &fox_logo_image}, {0, 0, 25, 55, &fox_logo_image}, - {0, 0, 25, 60, &fox_logo_image}, {0, 0, 25, 65, &fox_logo_image}, - {0, 0, 25, 70, &fox_logo_image}, {0, 0, 25, 75, &fox_logo_image}, - {0, 0, 25, 80, &fox_logo_image}, {0, 0, 25, 85, &fox_logo_image}, - {0, 0, 25, 90, &fox_logo_image}, {0, 0, 25, 95, &fox_logo_image}, - {0, 0, 25, 100, &fox_logo_image}, - }}; -const VariantAnimation fox_logo_reversed = { - 21, - { - {0, 0, 25, 100, &fox_logo_image}, {0, 0, 25, 95, &fox_logo_image}, - {0, 0, 25, 90, &fox_logo_image}, {0, 0, 25, 85, &fox_logo_image}, - {0, 0, 25, 80, &fox_logo_image}, {0, 0, 25, 75, &fox_logo_image}, - {0, 0, 25, 70, &fox_logo_image}, {0, 0, 25, 65, &fox_logo_image}, - {0, 0, 25, 60, &fox_logo_image}, {0, 0, 25, 55, &fox_logo_image}, - {0, 0, 25, 50, &fox_logo_image}, {0, 0, 25, 45, &fox_logo_image}, - {0, 0, 25, 40, &fox_logo_image}, {0, 0, 25, 35, &fox_logo_image}, - {0, 0, 25, 30, &fox_logo_image}, {0, 0, 25, 25, &fox_logo_image}, - {0, 0, 25, 20, &fox_logo_image}, {0, 0, 25, 15, &fox_logo_image}, - {0, 0, 25, 10, &fox_logo_image}, {0, 0, 25, 5, &fox_logo_image}, - {0, 0, 25, 0, &fox_logo_image}, - }}; - -const uint8_t fox_screensaver_data[617] = { - 0x5, 0x0, 0xfe, 0xa, 0x7, 0x10, 0x0, 0xfd, 0x1, 0xa, 0x4, 0x4, - 0x0, 0xfb, 0x1, 0x23, 0x35, 0x1c, 0x6, 0xc, 0x0, 0xfb, 0x1, 0x11, - 0x30, 0x44, 0x13, 0x5, 0x0, 0xf9, 0x1b, 0x50, 0x52, 0x40, 0x24, 0xe, - 0x3, 0x7, 0x1, 0xf9, 0x5, 0x16, 0x33, 0x54, 0x65, 0x52, 0xb, 0x5, - 0x0, 0xfe, 0x10, 0x51, 0x2, 0x60, 0xfb, 0x59, 0x49, 0x35, 0x26, 0x23, - 0x3, 0x1f, 0xf7, 0x23, 0x2a, 0x3d, 0x58, 0x63, 0x64, 0x62, 0x44, 0x6, - 0x5, 0x0, 0xfe, 0x9, 0x48, 0x4, 0x60, 0xf6, 0x5f, 0x5b, 0x59, 0x51, - 0x4e, 0x54, 0x5a, 0x5d, 0x60, 0x63, 0x3, 0x60, 0xfe, 0x33, 0x2, 0x5, - 0x0, 0xfd, 0x4, 0x3b, 0x5e, 0x6, 0x60, 0xfe, 0x5d, 0x5c, 0x7, 0x60, - 0xfe, 0x5b, 0x24, 0x6, 0x0, 0xfd, 0x2, 0x2f, 0x5d, 0xf, 0x60, 0xfe, - 0x56, 0x18, 0x7, 0x0, 0xfc, 0x22, 0x59, 0x60, 0x5e, 0xb, 0x60, 0xfc, - 0x5e, 0x60, 0x4f, 0xe, 0x7, 0x0, 0xfc, 0x1b, 0x56, 0x5a, 0x5c, 0xa, - 0x60, 0xfb, 0x5e, 0x5a, 0x5d, 0x41, 0x5, 0x7, 0x0, 0xfd, 0x11, 0x4b, - 0x59, 0xc, 0x60, 0xfc, 0x5c, 0x57, 0x2c, 0x3, 0x7, 0x0, 0xfd, 0x1b, - 0x54, 0x5f, 0xd, 0x60, 0xfd, 0x59, 0x2c, 0x2, 0x7, 0x0, 0xfe, 0x31, - 0x5e, 0xe, 0x60, 0xfd, 0x5f, 0x54, 0x19, 0x6, 0x0, 0xfe, 0x9, 0x47, - 0x10, 0x60, 0xfe, 0x64, 0x31, 0x6, 0x0, 0xfe, 0x19, 0x57, 0x10, 0x60, - 0xfd, 0x63, 0x4a, 0x8, 0x4, 0x0, 0xfd, 0x1, 0x1e, 0x56, 0xf, 0x60, - 0xfc, 0x61, 0x65, 0x4b, 0xc, 0x5, 0x0, 0xfc, 0x4, 0x3b, 0x61, 0x65, - 0xc, 0x60, 0xfc, 0x64, 0x5c, 0x39, 0x12, 0x5, 0x0, 0xfc, 0x4, 0x27, - 0x54, 0x60, 0x2, 0x64, 0xff, 0x62, 0x8, 0x60, 0xfb, 0x61, 0x62, 0x4e, - 0x22, 0x4, 0x5, 0x0, 0xfd, 0x9, 0x3a, 0x5d, 0x4, 0x60, 0xff, 0x5e, - 0x7, 0x60, 0x2, 0x63, 0xfe, 0x41, 0x11, 0x6, 0x0, 0xfd, 0xa, 0x3a, - 0x62, 0x4, 0x60, 0xfd, 0x5e, 0x57, 0x5c, 0x2, 0x61, 0xf9, 0x80, 0x88, - 0x65, 0x64, 0x5b, 0x48, 0x19, 0x6, 0x0, 0xfe, 0x10, 0x3e, 0x2, 0x61, - 0x5, 0x60, 0xf5, 0x59, 0x55, 0x61, 0x76, 0xc5, 0xd8, 0x96, 0x5b, 0x49, - 0x32, 0x9, 0x5, 0x0, 0xfd, 0xd, 0x46, 0x64, 0x7, 0x60, 0xf6, 0x5e, - 0x53, 0x55, 0x89, 0xea, 0xef, 0xbf, 0x54, 0x3c, 0x1f, 0x6, 0x0, 0xfe, - 0x1b, 0x5e, 0x8, 0x60, 0xf9, 0x5f, 0x56, 0x50, 0x57, 0xa4, 0xc7, 0x70, - 0x2, 0x39, 0xff, 0x12, 0x6, 0x0, 0xfe, 0x1b, 0x5e, 0x9, 0x60, 0xf7, - 0x5b, 0x51, 0x4f, 0x5c, 0x60, 0x3d, 0x3f, 0x2e, 0x7, 0x6, 0x0, 0xfe, - 0x1b, 0x5e, 0xa, 0x60, 0xff, 0x55, 0x2, 0x50, 0xfc, 0x42, 0x40, 0x3f, - 0x1f, 0x7, 0x0, 0xfe, 0x1c, 0x5e, 0x7, 0x60, 0xfc, 0x5d, 0x5e, 0x60, - 0x58, 0x2, 0x50, 0xfc, 0x47, 0x40, 0x36, 0xe, 0x7, 0x0, 0xfd, 0x1c, - 0x5d, 0x61, 0x5, 0x60, 0xf5, 0x5d, 0x58, 0x55, 0x5a, 0x5b, 0x52, 0x50, - 0x47, 0x3f, 0x28, 0x3, 0x7, 0x0, 0xfd, 0x9, 0x40, 0x66, 0x6, 0x60, - 0xfc, 0x5f, 0x5b, 0x56, 0x54, 0x2, 0x50, 0xfc, 0x47, 0x3e, 0x19, 0x1, - 0x8, 0x0, 0xfd, 0x14, 0x52, 0x64, 0x7, 0x60, 0xf9, 0x5f, 0x5c, 0x6b, - 0x5d, 0x43, 0x33, 0xa, 0x9, 0x0, 0xfc, 0x1, 0x29, 0x65, 0x62, 0x6, - 0x60, 0xf9, 0x5e, 0x7a, 0xc6, 0xb4, 0x69, 0x25, 0x3, 0xa, 0x0, 0xfd, - 0x7, 0x46, 0x64, 0x5, 0x60, 0xfd, 0x5f, 0x6c, 0xb9, 0x2, 0xef, 0xfc, - 0xda, 0x8a, 0x35, 0x5, 0xa, 0x0, 0xfd, 0x1b, 0x58, 0x61, 0x4, 0x60, - 0xfd, 0x66, 0xa7, 0xe9, 0x3, 0xf0, 0xfc, 0xeb, 0xc4, 0x73, 0x14, 0x9, - 0x0, 0xfd, 0x2, 0x35, 0x64, 0x3, 0x60, 0xfd, 0x5e, 0x9a, 0xe2, 0x6, - 0xf0, 0xfe, 0xd7, 0x3d, 0xa, 0x0, 0xf9, 0xd, 0x4d, 0x64, 0x60, 0x5d, - 0x83, 0xd8, 0x7, 0xf0, 0xfe, 0xde, 0x43, 0xa, 0x0, 0xfa, 0x1, 0x24, - 0x5c, 0x61, 0x81, 0xce, 0x8, 0xf0, 0xfe, 0xde, 0x43, 0xb, 0x0, 0xfb, - 0x2, 0x37, 0x6e, 0xbc, 0xef, 0x7, 0xf0, 0xfd, 0xef, 0xcd, 0x37, 0xc, - 0x0, 0xfa, 0x11, 0x51, 0x9f, 0xc8, 0xe1, 0xef, 0x4, 0xf0, 0xfc, 0xe1, - 0xa0, 0x4f, 0x9, 0xd, 0x0, 0xf4, 0x8, 0x1c, 0x3d, 0x6c, 0xa2, 0xce, - 0xe7, 0xe4, 0xaf, 0x5c, 0x18, 0x2, 0x11, 0x0, 0xfa, 0x7, 0x17, 0x3d, - 0x70, 0x67, 0x21, 0xa, 0x0}; -static const Image fox_screensaver_image = {26, 38, 617, fox_screensaver_data}; - -const VariantAnimation fox_screensaver = { - 460, - { - {115, 13, 125, 100, &fox_screensaver_image}, - {116, 13, 125, 100, &fox_screensaver_image}, - {117, 13, 125, 100, &fox_screensaver_image}, - {118, 13, 125, 100, &fox_screensaver_image}, - {119, 13, 125, 100, &fox_screensaver_image}, - {120, 13, 125, 100, &fox_screensaver_image}, - {121, 13, 125, 100, &fox_screensaver_image}, - {122, 13, 125, 100, &fox_screensaver_image}, - {123, 13, 125, 100, &fox_screensaver_image}, - {124, 13, 125, 100, &fox_screensaver_image}, - {125, 13, 125, 100, &fox_screensaver_image}, - {126, 13, 125, 100, &fox_screensaver_image}, - {127, 13, 125, 100, &fox_screensaver_image}, - {128, 13, 125, 100, &fox_screensaver_image}, - {129, 13, 125, 100, &fox_screensaver_image}, - {130, 13, 125, 100, &fox_screensaver_image}, - {131, 13, 125, 100, &fox_screensaver_image}, - {132, 13, 125, 100, &fox_screensaver_image}, - {133, 13, 125, 100, &fox_screensaver_image}, - {134, 13, 125, 100, &fox_screensaver_image}, - {135, 13, 125, 100, &fox_screensaver_image}, - {136, 13, 125, 100, &fox_screensaver_image}, - {137, 13, 125, 100, &fox_screensaver_image}, - {138, 13, 125, 100, &fox_screensaver_image}, - {139, 13, 125, 100, &fox_screensaver_image}, - {140, 13, 125, 100, &fox_screensaver_image}, - {141, 13, 125, 100, &fox_screensaver_image}, - {142, 13, 125, 100, &fox_screensaver_image}, - {143, 13, 125, 100, &fox_screensaver_image}, - {144, 13, 125, 100, &fox_screensaver_image}, - {145, 13, 125, 100, &fox_screensaver_image}, - {146, 13, 125, 100, &fox_screensaver_image}, - {147, 13, 125, 100, &fox_screensaver_image}, - {148, 13, 125, 100, &fox_screensaver_image}, - {149, 13, 125, 100, &fox_screensaver_image}, - {150, 13, 125, 100, &fox_screensaver_image}, - {151, 13, 125, 100, &fox_screensaver_image}, - {152, 13, 125, 100, &fox_screensaver_image}, - {153, 13, 125, 100, &fox_screensaver_image}, - {154, 13, 125, 100, &fox_screensaver_image}, - {155, 13, 125, 100, &fox_screensaver_image}, - {156, 13, 125, 100, &fox_screensaver_image}, - {157, 13, 125, 100, &fox_screensaver_image}, - {158, 13, 125, 100, &fox_screensaver_image}, - {159, 13, 125, 100, &fox_screensaver_image}, - {160, 13, 125, 100, &fox_screensaver_image}, - {161, 13, 125, 100, &fox_screensaver_image}, - {162, 13, 125, 100, &fox_screensaver_image}, - {163, 13, 125, 100, &fox_screensaver_image}, - {164, 13, 125, 100, &fox_screensaver_image}, - {165, 13, 125, 100, &fox_screensaver_image}, - {166, 13, 125, 100, &fox_screensaver_image}, - {167, 13, 125, 100, &fox_screensaver_image}, - {168, 13, 125, 100, &fox_screensaver_image}, - {169, 13, 125, 100, &fox_screensaver_image}, - {170, 13, 125, 100, &fox_screensaver_image}, - {171, 13, 125, 100, &fox_screensaver_image}, - {172, 13, 125, 100, &fox_screensaver_image}, - {173, 13, 125, 100, &fox_screensaver_image}, - {174, 13, 125, 100, &fox_screensaver_image}, - {175, 13, 125, 100, &fox_screensaver_image}, - {176, 13, 125, 100, &fox_screensaver_image}, - {177, 13, 125, 100, &fox_screensaver_image}, - {178, 13, 125, 100, &fox_screensaver_image}, - {179, 13, 125, 100, &fox_screensaver_image}, - {180, 13, 125, 100, &fox_screensaver_image}, - {181, 13, 125, 100, &fox_screensaver_image}, - {182, 13, 125, 100, &fox_screensaver_image}, - {183, 13, 125, 100, &fox_screensaver_image}, - {184, 13, 125, 100, &fox_screensaver_image}, - {185, 13, 125, 100, &fox_screensaver_image}, - {186, 13, 125, 100, &fox_screensaver_image}, - {187, 13, 125, 100, &fox_screensaver_image}, - {188, 13, 125, 100, &fox_screensaver_image}, - {189, 13, 125, 100, &fox_screensaver_image}, - {190, 13, 125, 100, &fox_screensaver_image}, - {191, 13, 125, 100, &fox_screensaver_image}, - {192, 13, 125, 100, &fox_screensaver_image}, - {193, 13, 125, 100, &fox_screensaver_image}, - {194, 13, 125, 100, &fox_screensaver_image}, - {195, 13, 125, 100, &fox_screensaver_image}, - {196, 13, 125, 100, &fox_screensaver_image}, - {197, 13, 125, 100, &fox_screensaver_image}, - {198, 13, 125, 100, &fox_screensaver_image}, - {199, 13, 125, 100, &fox_screensaver_image}, - {200, 13, 125, 100, &fox_screensaver_image}, - {201, 13, 125, 100, &fox_screensaver_image}, - {202, 13, 125, 100, &fox_screensaver_image}, - {203, 13, 125, 100, &fox_screensaver_image}, - {204, 13, 125, 100, &fox_screensaver_image}, - {205, 13, 125, 100, &fox_screensaver_image}, - {206, 13, 125, 100, &fox_screensaver_image}, - {207, 13, 125, 100, &fox_screensaver_image}, - {208, 13, 125, 100, &fox_screensaver_image}, - {209, 13, 125, 100, &fox_screensaver_image}, - {210, 13, 125, 100, &fox_screensaver_image}, - {211, 13, 125, 100, &fox_screensaver_image}, - {212, 13, 125, 100, &fox_screensaver_image}, - {213, 13, 125, 100, &fox_screensaver_image}, - {214, 13, 125, 100, &fox_screensaver_image}, - {215, 13, 125, 100, &fox_screensaver_image}, - {216, 13, 125, 100, &fox_screensaver_image}, - {217, 13, 125, 100, &fox_screensaver_image}, - {218, 13, 125, 100, &fox_screensaver_image}, - {219, 13, 125, 100, &fox_screensaver_image}, - {220, 13, 125, 100, &fox_screensaver_image}, - {221, 13, 125, 100, &fox_screensaver_image}, - {222, 13, 125, 100, &fox_screensaver_image}, - {223, 13, 125, 100, &fox_screensaver_image}, - {224, 13, 125, 100, &fox_screensaver_image}, - {225, 13, 125, 100, &fox_screensaver_image}, - {226, 13, 125, 100, &fox_screensaver_image}, - {227, 13, 125, 100, &fox_screensaver_image}, - {228, 13, 125, 100, &fox_screensaver_image}, - {229, 13, 125, 100, &fox_screensaver_image}, - {228, 13, 125, 100, &fox_screensaver_image}, - {227, 13, 125, 100, &fox_screensaver_image}, - {226, 13, 125, 100, &fox_screensaver_image}, - {225, 13, 125, 100, &fox_screensaver_image}, - {224, 13, 125, 100, &fox_screensaver_image}, - {223, 13, 125, 100, &fox_screensaver_image}, - {222, 13, 125, 100, &fox_screensaver_image}, - {221, 13, 125, 100, &fox_screensaver_image}, - {220, 13, 125, 100, &fox_screensaver_image}, - {219, 13, 125, 100, &fox_screensaver_image}, - {218, 13, 125, 100, &fox_screensaver_image}, - {217, 13, 125, 100, &fox_screensaver_image}, - {216, 13, 125, 100, &fox_screensaver_image}, - {215, 13, 125, 100, &fox_screensaver_image}, - {214, 13, 125, 100, &fox_screensaver_image}, - {213, 13, 125, 100, &fox_screensaver_image}, - {212, 13, 125, 100, &fox_screensaver_image}, - {211, 13, 125, 100, &fox_screensaver_image}, - {210, 13, 125, 100, &fox_screensaver_image}, - {209, 13, 125, 100, &fox_screensaver_image}, - {208, 13, 125, 100, &fox_screensaver_image}, - {207, 13, 125, 100, &fox_screensaver_image}, - {206, 13, 125, 100, &fox_screensaver_image}, - {205, 13, 125, 100, &fox_screensaver_image}, - {204, 13, 125, 100, &fox_screensaver_image}, - {203, 13, 125, 100, &fox_screensaver_image}, - {202, 13, 125, 100, &fox_screensaver_image}, - {201, 13, 125, 100, &fox_screensaver_image}, - {200, 13, 125, 100, &fox_screensaver_image}, - {199, 13, 125, 100, &fox_screensaver_image}, - {198, 13, 125, 100, &fox_screensaver_image}, - {197, 13, 125, 100, &fox_screensaver_image}, - {196, 13, 125, 100, &fox_screensaver_image}, - {195, 13, 125, 100, &fox_screensaver_image}, - {194, 13, 125, 100, &fox_screensaver_image}, - {193, 13, 125, 100, &fox_screensaver_image}, - {192, 13, 125, 100, &fox_screensaver_image}, - {191, 13, 125, 100, &fox_screensaver_image}, - {190, 13, 125, 100, &fox_screensaver_image}, - {189, 13, 125, 100, &fox_screensaver_image}, - {188, 13, 125, 100, &fox_screensaver_image}, - {187, 13, 125, 100, &fox_screensaver_image}, - {186, 13, 125, 100, &fox_screensaver_image}, - {185, 13, 125, 100, &fox_screensaver_image}, - {184, 13, 125, 100, &fox_screensaver_image}, - {183, 13, 125, 100, &fox_screensaver_image}, - {182, 13, 125, 100, &fox_screensaver_image}, - {181, 13, 125, 100, &fox_screensaver_image}, - {180, 13, 125, 100, &fox_screensaver_image}, - {179, 13, 125, 100, &fox_screensaver_image}, - {178, 13, 125, 100, &fox_screensaver_image}, - {177, 13, 125, 100, &fox_screensaver_image}, - {176, 13, 125, 100, &fox_screensaver_image}, - {175, 13, 125, 100, &fox_screensaver_image}, - {174, 13, 125, 100, &fox_screensaver_image}, - {173, 13, 125, 100, &fox_screensaver_image}, - {172, 13, 125, 100, &fox_screensaver_image}, - {171, 13, 125, 100, &fox_screensaver_image}, - {170, 13, 125, 100, &fox_screensaver_image}, - {169, 13, 125, 100, &fox_screensaver_image}, - {168, 13, 125, 100, &fox_screensaver_image}, - {167, 13, 125, 100, &fox_screensaver_image}, - {166, 13, 125, 100, &fox_screensaver_image}, - {165, 13, 125, 100, &fox_screensaver_image}, - {164, 13, 125, 100, &fox_screensaver_image}, - {163, 13, 125, 100, &fox_screensaver_image}, - {162, 13, 125, 100, &fox_screensaver_image}, - {161, 13, 125, 100, &fox_screensaver_image}, - {160, 13, 125, 100, &fox_screensaver_image}, - {159, 13, 125, 100, &fox_screensaver_image}, - {158, 13, 125, 100, &fox_screensaver_image}, - {157, 13, 125, 100, &fox_screensaver_image}, - {156, 13, 125, 100, &fox_screensaver_image}, - {155, 13, 125, 100, &fox_screensaver_image}, - {154, 13, 125, 100, &fox_screensaver_image}, - {153, 13, 125, 100, &fox_screensaver_image}, - {152, 13, 125, 100, &fox_screensaver_image}, - {151, 13, 125, 100, &fox_screensaver_image}, - {150, 13, 125, 100, &fox_screensaver_image}, - {149, 13, 125, 100, &fox_screensaver_image}, - {148, 13, 125, 100, &fox_screensaver_image}, - {147, 13, 125, 100, &fox_screensaver_image}, - {146, 13, 125, 100, &fox_screensaver_image}, - {145, 13, 125, 100, &fox_screensaver_image}, - {144, 13, 125, 100, &fox_screensaver_image}, - {143, 13, 125, 100, &fox_screensaver_image}, - {142, 13, 125, 100, &fox_screensaver_image}, - {141, 13, 125, 100, &fox_screensaver_image}, - {140, 13, 125, 100, &fox_screensaver_image}, - {139, 13, 125, 100, &fox_screensaver_image}, - {138, 13, 125, 100, &fox_screensaver_image}, - {137, 13, 125, 100, &fox_screensaver_image}, - {136, 13, 125, 100, &fox_screensaver_image}, - {135, 13, 125, 100, &fox_screensaver_image}, - {134, 13, 125, 100, &fox_screensaver_image}, - {133, 13, 125, 100, &fox_screensaver_image}, - {132, 13, 125, 100, &fox_screensaver_image}, - {131, 13, 125, 100, &fox_screensaver_image}, - {130, 13, 125, 100, &fox_screensaver_image}, - {129, 13, 125, 100, &fox_screensaver_image}, - {128, 13, 125, 100, &fox_screensaver_image}, - {127, 13, 125, 100, &fox_screensaver_image}, - {126, 13, 125, 100, &fox_screensaver_image}, - {125, 13, 125, 100, &fox_screensaver_image}, - {124, 13, 125, 100, &fox_screensaver_image}, - {123, 13, 125, 100, &fox_screensaver_image}, - {122, 13, 125, 100, &fox_screensaver_image}, - {121, 13, 125, 100, &fox_screensaver_image}, - {120, 13, 125, 100, &fox_screensaver_image}, - {119, 13, 125, 100, &fox_screensaver_image}, - {118, 13, 125, 100, &fox_screensaver_image}, - {117, 13, 125, 100, &fox_screensaver_image}, - {116, 13, 125, 100, &fox_screensaver_image}, - {115, 13, 125, 100, &fox_screensaver_image}, - {114, 13, 125, 100, &fox_screensaver_image}, - {113, 13, 125, 100, &fox_screensaver_image}, - {112, 13, 125, 100, &fox_screensaver_image}, - {111, 13, 125, 100, &fox_screensaver_image}, - {110, 13, 125, 100, &fox_screensaver_image}, - {109, 13, 125, 100, &fox_screensaver_image}, - {108, 13, 125, 100, &fox_screensaver_image}, - {107, 13, 125, 100, &fox_screensaver_image}, - {106, 13, 125, 100, &fox_screensaver_image}, - {105, 13, 125, 100, &fox_screensaver_image}, - {104, 13, 125, 100, &fox_screensaver_image}, - {103, 13, 125, 100, &fox_screensaver_image}, - {102, 13, 125, 100, &fox_screensaver_image}, - {101, 13, 125, 100, &fox_screensaver_image}, - {100, 13, 125, 100, &fox_screensaver_image}, - {99, 13, 125, 100, &fox_screensaver_image}, - {98, 13, 125, 100, &fox_screensaver_image}, - {97, 13, 125, 100, &fox_screensaver_image}, - {96, 13, 125, 100, &fox_screensaver_image}, - {95, 13, 125, 100, &fox_screensaver_image}, - {94, 13, 125, 100, &fox_screensaver_image}, - {93, 13, 125, 100, &fox_screensaver_image}, - {92, 13, 125, 100, &fox_screensaver_image}, - {91, 13, 125, 100, &fox_screensaver_image}, - {90, 13, 125, 100, &fox_screensaver_image}, - {89, 13, 125, 100, &fox_screensaver_image}, - {88, 13, 125, 100, &fox_screensaver_image}, - {87, 13, 125, 100, &fox_screensaver_image}, - {86, 13, 125, 100, &fox_screensaver_image}, - {85, 13, 125, 100, &fox_screensaver_image}, - {84, 13, 125, 100, &fox_screensaver_image}, - {83, 13, 125, 100, &fox_screensaver_image}, - {82, 13, 125, 100, &fox_screensaver_image}, - {81, 13, 125, 100, &fox_screensaver_image}, - {80, 13, 125, 100, &fox_screensaver_image}, - {79, 13, 125, 100, &fox_screensaver_image}, - {78, 13, 125, 100, &fox_screensaver_image}, - {77, 13, 125, 100, &fox_screensaver_image}, - {76, 13, 125, 100, &fox_screensaver_image}, - {75, 13, 125, 100, &fox_screensaver_image}, - {74, 13, 125, 100, &fox_screensaver_image}, - {73, 13, 125, 100, &fox_screensaver_image}, - {72, 13, 125, 100, &fox_screensaver_image}, - {71, 13, 125, 100, &fox_screensaver_image}, - {70, 13, 125, 100, &fox_screensaver_image}, - {69, 13, 125, 100, &fox_screensaver_image}, - {68, 13, 125, 100, &fox_screensaver_image}, - {67, 13, 125, 100, &fox_screensaver_image}, - {66, 13, 125, 100, &fox_screensaver_image}, - {65, 13, 125, 100, &fox_screensaver_image}, - {64, 13, 125, 100, &fox_screensaver_image}, - {63, 13, 125, 100, &fox_screensaver_image}, - {62, 13, 125, 100, &fox_screensaver_image}, - {61, 13, 125, 100, &fox_screensaver_image}, - {60, 13, 125, 100, &fox_screensaver_image}, - {59, 13, 125, 100, &fox_screensaver_image}, - {58, 13, 125, 100, &fox_screensaver_image}, - {57, 13, 125, 100, &fox_screensaver_image}, - {56, 13, 125, 100, &fox_screensaver_image}, - {55, 13, 125, 100, &fox_screensaver_image}, - {54, 13, 125, 100, &fox_screensaver_image}, - {53, 13, 125, 100, &fox_screensaver_image}, - {52, 13, 125, 100, &fox_screensaver_image}, - {51, 13, 125, 100, &fox_screensaver_image}, - {50, 13, 125, 100, &fox_screensaver_image}, - {49, 13, 125, 100, &fox_screensaver_image}, - {48, 13, 125, 100, &fox_screensaver_image}, - {47, 13, 125, 100, &fox_screensaver_image}, - {46, 13, 125, 100, &fox_screensaver_image}, - {45, 13, 125, 100, &fox_screensaver_image}, - {44, 13, 125, 100, &fox_screensaver_image}, - {43, 13, 125, 100, &fox_screensaver_image}, - {42, 13, 125, 100, &fox_screensaver_image}, - {41, 13, 125, 100, &fox_screensaver_image}, - {40, 13, 125, 100, &fox_screensaver_image}, - {39, 13, 125, 100, &fox_screensaver_image}, - {38, 13, 125, 100, &fox_screensaver_image}, - {37, 13, 125, 100, &fox_screensaver_image}, - {36, 13, 125, 100, &fox_screensaver_image}, - {35, 13, 125, 100, &fox_screensaver_image}, - {34, 13, 125, 100, &fox_screensaver_image}, - {33, 13, 125, 100, &fox_screensaver_image}, - {32, 13, 125, 100, &fox_screensaver_image}, - {31, 13, 125, 100, &fox_screensaver_image}, - {30, 13, 125, 100, &fox_screensaver_image}, - {29, 13, 125, 100, &fox_screensaver_image}, - {28, 13, 125, 100, &fox_screensaver_image}, - {27, 13, 125, 100, &fox_screensaver_image}, - {26, 13, 125, 100, &fox_screensaver_image}, - {25, 13, 125, 100, &fox_screensaver_image}, - {24, 13, 125, 100, &fox_screensaver_image}, - {23, 13, 125, 100, &fox_screensaver_image}, - {22, 13, 125, 100, &fox_screensaver_image}, - {21, 13, 125, 100, &fox_screensaver_image}, - {20, 13, 125, 100, &fox_screensaver_image}, - {19, 13, 125, 100, &fox_screensaver_image}, - {18, 13, 125, 100, &fox_screensaver_image}, - {17, 13, 125, 100, &fox_screensaver_image}, - {16, 13, 125, 100, &fox_screensaver_image}, - {15, 13, 125, 100, &fox_screensaver_image}, - {14, 13, 125, 100, &fox_screensaver_image}, - {13, 13, 125, 100, &fox_screensaver_image}, - {12, 13, 125, 100, &fox_screensaver_image}, - {11, 13, 125, 100, &fox_screensaver_image}, - {10, 13, 125, 100, &fox_screensaver_image}, - {9, 13, 125, 100, &fox_screensaver_image}, - {8, 13, 125, 100, &fox_screensaver_image}, - {7, 13, 125, 100, &fox_screensaver_image}, - {6, 13, 125, 100, &fox_screensaver_image}, - {5, 13, 125, 100, &fox_screensaver_image}, - {4, 13, 125, 100, &fox_screensaver_image}, - {3, 13, 125, 100, &fox_screensaver_image}, - {2, 13, 125, 100, &fox_screensaver_image}, - {1, 13, 125, 100, &fox_screensaver_image}, - {0, 13, 125, 100, &fox_screensaver_image}, - {0, 13, 125, 100, &fox_screensaver_image}, - {1, 13, 125, 100, &fox_screensaver_image}, - {2, 13, 125, 100, &fox_screensaver_image}, - {3, 13, 125, 100, &fox_screensaver_image}, - {4, 13, 125, 100, &fox_screensaver_image}, - {5, 13, 125, 100, &fox_screensaver_image}, - {6, 13, 125, 100, &fox_screensaver_image}, - {7, 13, 125, 100, &fox_screensaver_image}, - {8, 13, 125, 100, &fox_screensaver_image}, - {9, 13, 125, 100, &fox_screensaver_image}, - {10, 13, 125, 100, &fox_screensaver_image}, - {11, 13, 125, 100, &fox_screensaver_image}, - {12, 13, 125, 100, &fox_screensaver_image}, - {13, 13, 125, 100, &fox_screensaver_image}, - {14, 13, 125, 100, &fox_screensaver_image}, - {15, 13, 125, 100, &fox_screensaver_image}, - {16, 13, 125, 100, &fox_screensaver_image}, - {17, 13, 125, 100, &fox_screensaver_image}, - {18, 13, 125, 100, &fox_screensaver_image}, - {19, 13, 125, 100, &fox_screensaver_image}, - {20, 13, 125, 100, &fox_screensaver_image}, - {21, 13, 125, 100, &fox_screensaver_image}, - {22, 13, 125, 100, &fox_screensaver_image}, - {23, 13, 125, 100, &fox_screensaver_image}, - {24, 13, 125, 100, &fox_screensaver_image}, - {25, 13, 125, 100, &fox_screensaver_image}, - {26, 13, 125, 100, &fox_screensaver_image}, - {27, 13, 125, 100, &fox_screensaver_image}, - {28, 13, 125, 100, &fox_screensaver_image}, - {29, 13, 125, 100, &fox_screensaver_image}, - {30, 13, 125, 100, &fox_screensaver_image}, - {31, 13, 125, 100, &fox_screensaver_image}, - {32, 13, 125, 100, &fox_screensaver_image}, - {33, 13, 125, 100, &fox_screensaver_image}, - {34, 13, 125, 100, &fox_screensaver_image}, - {35, 13, 125, 100, &fox_screensaver_image}, - {36, 13, 125, 100, &fox_screensaver_image}, - {37, 13, 125, 100, &fox_screensaver_image}, - {38, 13, 125, 100, &fox_screensaver_image}, - {39, 13, 125, 100, &fox_screensaver_image}, - {40, 13, 125, 100, &fox_screensaver_image}, - {41, 13, 125, 100, &fox_screensaver_image}, - {42, 13, 125, 100, &fox_screensaver_image}, - {43, 13, 125, 100, &fox_screensaver_image}, - {44, 13, 125, 100, &fox_screensaver_image}, - {45, 13, 125, 100, &fox_screensaver_image}, - {46, 13, 125, 100, &fox_screensaver_image}, - {47, 13, 125, 100, &fox_screensaver_image}, - {48, 13, 125, 100, &fox_screensaver_image}, - {49, 13, 125, 100, &fox_screensaver_image}, - {50, 13, 125, 100, &fox_screensaver_image}, - {51, 13, 125, 100, &fox_screensaver_image}, - {52, 13, 125, 100, &fox_screensaver_image}, - {53, 13, 125, 100, &fox_screensaver_image}, - {54, 13, 125, 100, &fox_screensaver_image}, - {55, 13, 125, 100, &fox_screensaver_image}, - {56, 13, 125, 100, &fox_screensaver_image}, - {57, 13, 125, 100, &fox_screensaver_image}, - {58, 13, 125, 100, &fox_screensaver_image}, - {59, 13, 125, 100, &fox_screensaver_image}, - {60, 13, 125, 100, &fox_screensaver_image}, - {61, 13, 125, 100, &fox_screensaver_image}, - {62, 13, 125, 100, &fox_screensaver_image}, - {63, 13, 125, 100, &fox_screensaver_image}, - {64, 13, 125, 100, &fox_screensaver_image}, - {65, 13, 125, 100, &fox_screensaver_image}, - {66, 13, 125, 100, &fox_screensaver_image}, - {67, 13, 125, 100, &fox_screensaver_image}, - {68, 13, 125, 100, &fox_screensaver_image}, - {69, 13, 125, 100, &fox_screensaver_image}, - {70, 13, 125, 100, &fox_screensaver_image}, - {71, 13, 125, 100, &fox_screensaver_image}, - {72, 13, 125, 100, &fox_screensaver_image}, - {73, 13, 125, 100, &fox_screensaver_image}, - {74, 13, 125, 100, &fox_screensaver_image}, - {75, 13, 125, 100, &fox_screensaver_image}, - {76, 13, 125, 100, &fox_screensaver_image}, - {77, 13, 125, 100, &fox_screensaver_image}, - {78, 13, 125, 100, &fox_screensaver_image}, - {79, 13, 125, 100, &fox_screensaver_image}, - {80, 13, 125, 100, &fox_screensaver_image}, - {81, 13, 125, 100, &fox_screensaver_image}, - {82, 13, 125, 100, &fox_screensaver_image}, - {83, 13, 125, 100, &fox_screensaver_image}, - {84, 13, 125, 100, &fox_screensaver_image}, - {85, 13, 125, 100, &fox_screensaver_image}, - {86, 13, 125, 100, &fox_screensaver_image}, - {87, 13, 125, 100, &fox_screensaver_image}, - {88, 13, 125, 100, &fox_screensaver_image}, - {89, 13, 125, 100, &fox_screensaver_image}, - {90, 13, 125, 100, &fox_screensaver_image}, - {91, 13, 125, 100, &fox_screensaver_image}, - {92, 13, 125, 100, &fox_screensaver_image}, - {93, 13, 125, 100, &fox_screensaver_image}, - {94, 13, 125, 100, &fox_screensaver_image}, - {95, 13, 125, 100, &fox_screensaver_image}, - {96, 13, 125, 100, &fox_screensaver_image}, - {97, 13, 125, 100, &fox_screensaver_image}, - {98, 13, 125, 100, &fox_screensaver_image}, - {99, 13, 125, 100, &fox_screensaver_image}, - {100, 13, 125, 100, &fox_screensaver_image}, - {101, 13, 125, 100, &fox_screensaver_image}, - {102, 13, 125, 100, &fox_screensaver_image}, - {103, 13, 125, 100, &fox_screensaver_image}, - {104, 13, 125, 100, &fox_screensaver_image}, - {105, 13, 125, 100, &fox_screensaver_image}, - {106, 13, 125, 100, &fox_screensaver_image}, - {107, 13, 125, 100, &fox_screensaver_image}, - {108, 13, 125, 100, &fox_screensaver_image}, - {109, 13, 125, 100, &fox_screensaver_image}, - {110, 13, 125, 100, &fox_screensaver_image}, - {111, 13, 125, 100, &fox_screensaver_image}, - {112, 13, 125, 100, &fox_screensaver_image}, - {113, 13, 125, 100, &fox_screensaver_image}, - {114, 13, 125, 100, &fox_screensaver_image}, - {115, 13, 125, 100, &fox_screensaver_image}, - }}; - -VariantInfo fox_svi __attribute__((section("variant_info"))) = { - .version = 1, - .name = "FOX", - .logo = &fox_logo, - .logo_reversed = &fox_logo_reversed, - .screensaver_timeout = ONE_SEC * 60 * 10, - .screensaver = &fox_screensaver}; diff --git a/tools/variant/kaspersky.c b/tools/variant/kaspersky.c deleted file mode 100644 index e019e13b8..000000000 --- a/tools/variant/kaspersky.c +++ /dev/null @@ -1,497 +0,0 @@ -/* - * This file is part of the KeepKey project. - * - * Copyright (C) 2018 KeepKey LLC - * - * This library is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . - */ - -#include "keepkey/board/variant.h" - -#include "keepkey/board/timer.h" - -const uint8_t kaspersky_logo_data[3548] = { - 0x34, 0x0, 0xfd, 0x8b, 0x9d, 0x8, 0x4a, 0x0, 0xfd, 0x51, 0xc5, 0x1b, - 0x77, 0x0, 0xff, 0x5f, 0x2, 0xff, 0xfe, 0xcb, 0x1d, 0x48, 0x0, 0xfb, - 0x2c, 0xf6, 0xff, 0xe8, 0x3e, 0x75, 0x0, 0xfe, 0x28, 0xf4, 0x3, 0xff, - 0xfe, 0xeb, 0x41, 0x46, 0x0, 0xfe, 0x9, 0xd5, 0x3, 0xff, 0xfe, 0xfb, - 0x6f, 0x73, 0x0, 0xfe, 0x1, 0xc4, 0x4, 0xff, 0xfe, 0xfd, 0x5a, 0x46, - 0x0, 0xff, 0x88, 0x5, 0xff, 0xff, 0x94, 0x73, 0x0, 0xff, 0x5e, 0x5, - 0xff, 0xff, 0x79, 0x46, 0x0, 0xfe, 0x27, 0xfa, 0x4, 0xff, 0xfe, 0xb4, - 0x2, 0x72, 0x0, 0xfe, 0x6, 0xe4, 0x4, 0xff, 0xfe, 0xba, 0x1, 0x46, - 0x0, 0xff, 0xae, 0x4, 0xff, 0xfe, 0xe8, 0x10, 0x65, 0x0, 0xff, 0x5, - 0xd, 0x0, 0xff, 0x62, 0x4, 0xff, 0xfe, 0xf7, 0x21, 0x46, 0x0, 0xfe, - 0x24, 0xfe, 0x4, 0xff, 0xff, 0x54, 0x44, 0x0, 0x5, 0x20, 0xff, 0x6, - 0x8, 0x0, 0xff, 0x7, 0x5, 0x20, 0xff, 0x1c, 0xc, 0x0, 0xfe, 0x9, - 0xa1, 0xd, 0x0, 0xff, 0xc5, 0x4, 0xff, 0xff, 0x91, 0x8, 0x0, 0xff, - 0x8, 0x6, 0x20, 0xfd, 0x1b, 0x10, 0x1, 0xb, 0x0, 0xff, 0x1c, 0xf, - 0x20, 0xff, 0xa, 0x3, 0x0, 0xff, 0x1a, 0x6, 0x20, 0xfe, 0x12, 0x9, - 0xd, 0x0, 0xff, 0x88, 0x4, 0xff, 0xff, 0xca, 0x9, 0x0, 0x5, 0x20, - 0xff, 0x6, 0x8, 0x0, 0xff, 0x6, 0x5, 0x20, 0xfe, 0x1c, 0x1e, 0x4, - 0x20, 0xff, 0x9, 0xb, 0x0, 0xff, 0x8, 0x4, 0x20, 0xff, 0x1e, 0xa, - 0x0, 0xfe, 0x15, 0x11, 0x4, 0x0, 0x5, 0xff, 0xff, 0x30, 0x8, 0x0, - 0xff, 0x9f, 0x5, 0xff, 0xff, 0x7c, 0xc, 0x0, 0xfd, 0x69, 0xff, 0x34, - 0xb, 0x0, 0xfe, 0x19, 0xfe, 0x4, 0xff, 0xff, 0x23, 0x8, 0x0, 0xff, - 0x40, 0x8, 0xff, 0xfb, 0xfa, 0xd6, 0xa1, 0x54, 0x6, 0x7, 0x0, 0xff, - 0xe0, 0xf, 0xff, 0xff, 0x50, 0x3, 0x0, 0xff, 0xd0, 0x8, 0xff, 0xfc, - 0xe9, 0xbd, 0x78, 0x22, 0x9, 0x0, 0xff, 0xda, 0x4, 0xff, 0xff, 0x60, - 0x9, 0x0, 0x5, 0xff, 0xff, 0x30, 0x8, 0x0, 0xff, 0x98, 0x5, 0xff, - 0xfe, 0x84, 0xa1, 0x4, 0xff, 0xff, 0x99, 0xb, 0x0, 0xff, 0x98, 0x4, - 0xff, 0xff, 0xa4, 0x7, 0x0, 0xfd, 0x13, 0x96, 0xee, 0x2, 0xff, 0xfc, - 0xe8, 0x8b, 0xe, 0x0, 0x5, 0xff, 0xff, 0x30, 0x7, 0x0, 0xff, 0x54, - 0x5, 0xff, 0xfe, 0xc5, 0x3, 0xb, 0x0, 0xfc, 0x4, 0xde, 0xff, 0xac, - 0xb, 0x0, 0xff, 0x58, 0x4, 0xff, 0xff, 0xd1, 0x9, 0x0, 0xff, 0x40, - 0xc, 0xff, 0xfe, 0xe2, 0x5a, 0x6, 0x0, 0xff, 0xe0, 0xf, 0xff, 0xff, - 0x50, 0x3, 0x0, 0xff, 0xd0, 0xb, 0xff, 0xfd, 0xfc, 0xa1, 0x15, 0x6, - 0x0, 0xff, 0x1a, 0x4, 0xff, 0xfe, 0xfe, 0x11, 0x9, 0x0, 0x5, 0xff, - 0xff, 0x30, 0x7, 0x0, 0xff, 0x4d, 0x5, 0xff, 0xfc, 0xca, 0x5, 0x19, - 0xf3, 0x3, 0xff, 0xfe, 0xfe, 0x31, 0x9, 0x0, 0xfe, 0x30, 0xfd, 0x3, - 0xff, 0xfe, 0xf3, 0x1a, 0x6, 0x0, 0xfe, 0x12, 0xdb, 0x6, 0xff, 0xfe, - 0xd0, 0xd, 0x5, 0xff, 0xff, 0x30, 0x6, 0x0, 0xfe, 0x1c, 0xee, 0x4, - 0xff, 0xfe, 0xf2, 0x20, 0xc, 0x0, 0xff, 0x5b, 0x2, 0xff, 0xfe, 0xfe, - 0x28, 0xa, 0x0, 0xff, 0x86, 0x4, 0xff, 0xff, 0x9b, 0x9, 0x0, 0xff, - 0x40, 0xe, 0xff, 0xfe, 0x9c, 0x3, 0x4, 0x0, 0xff, 0xe0, 0xf, 0xff, - 0xff, 0x50, 0x3, 0x0, 0xff, 0xd0, 0xd, 0xff, 0xfe, 0xe5, 0x2d, 0x5, - 0x0, 0xff, 0x49, 0x4, 0xff, 0xff, 0xd7, 0xa, 0x0, 0x5, 0xff, 0xff, - 0x30, 0x6, 0x0, 0xfe, 0x17, 0xeb, 0x4, 0xff, 0xfe, 0xf4, 0x24, 0x2, - 0x0, 0xff, 0x76, 0x4, 0xff, 0xfe, 0xc3, 0x1, 0x7, 0x0, 0xfe, 0x1, - 0xc2, 0x4, 0xff, 0xff, 0x78, 0x7, 0x0, 0xff, 0x96, 0x3, 0xff, 0xfe, - 0xd1, 0xd4, 0x3, 0xff, 0xff, 0x88, 0x5, 0xff, 0xff, 0x30, 0x5, 0x0, - 0xfe, 0x2, 0xbd, 0x5, 0xff, 0xff, 0x5c, 0xc, 0x0, 0xfe, 0x1, 0xd3, - 0x3, 0xff, 0xff, 0x9e, 0xa, 0x0, 0xff, 0xa2, 0x4, 0xff, 0xff, 0x7d, - 0x9, 0x0, 0xff, 0x40, 0xf, 0xff, 0xff, 0x8d, 0x4, 0x0, 0xff, 0xe0, - 0xf, 0xff, 0xff, 0x50, 0x3, 0x0, 0xff, 0xd0, 0xe, 0xff, 0xfe, 0xe7, - 0x1b, 0x4, 0x0, 0xff, 0x66, 0x4, 0xff, 0xff, 0xba, 0xa, 0x0, 0x5, - 0xff, 0xff, 0x30, 0x5, 0x0, 0xfe, 0x1, 0xb7, 0x5, 0xff, 0xff, 0x64, - 0x3, 0x0, 0xfe, 0x6, 0xda, 0x4, 0xff, 0xff, 0x5a, 0x7, 0x0, 0xff, - 0x58, 0x4, 0xff, 0xfe, 0xdc, 0x7, 0x7, 0x0, 0xfc, 0xee, 0xff, 0xfc, - 0x46, 0x2, 0x0, 0xfc, 0x4f, 0xfe, 0xff, 0xe4, 0x5, 0xff, 0xff, 0x30, - 0x5, 0x0, 0xff, 0x75, 0x5, 0xff, 0xff, 0xa7, 0xd, 0x0, 0xff, 0x4c, - 0x4, 0xff, 0xfe, 0xfa, 0x1e, 0x9, 0x0, 0xff, 0xa2, 0x4, 0xff, 0xff, - 0x80, 0x9, 0x0, 0xff, 0x40, 0x10, 0xff, 0xff, 0x3c, 0x3, 0x0, 0xff, - 0xe0, 0xf, 0xff, 0xff, 0x50, 0x3, 0x0, 0xff, 0xd0, 0xf, 0xff, 0xff, - 0xac, 0x4, 0x0, 0xff, 0x6f, 0x4, 0xff, 0xff, 0xbd, 0xa, 0x0, 0x5, - 0xff, 0xff, 0x30, 0x5, 0x0, 0xff, 0x6d, 0x5, 0xff, 0xff, 0xae, 0x5, - 0x0, 0xff, 0x4a, 0x4, 0xff, 0xfe, 0xe5, 0xb, 0x5, 0x0, 0xfe, 0xa, - 0xe3, 0x4, 0xff, 0xff, 0x4d, 0x7, 0x0, 0xff, 0xd, 0x2, 0xff, 0xff, - 0xb6, 0x4, 0x0, 0xff, 0xbf, 0x7, 0xff, 0xff, 0x30, 0x4, 0x0, 0xfe, - 0x31, 0xf9, 0x4, 0xff, 0xfe, 0xe1, 0x10, 0xd, 0x0, 0xff, 0xc6, 0x5, - 0xff, 0xff, 0x90, 0x9, 0x0, 0xff, 0x9b, 0x4, 0xff, 0xff, 0x9b, 0x9, - 0x0, 0xff, 0x40, 0x4, 0xff, 0xf9, 0xf0, 0x0, 0x5, 0x14, 0x32, 0x6f, - 0xd9, 0x5, 0xff, 0xff, 0xb3, 0x3, 0x0, 0xff, 0xe0, 0x4, 0xff, 0xff, - 0x50, 0xe, 0x0, 0xff, 0xd0, 0x4, 0xff, 0xf9, 0x60, 0x0, 0xd, 0x21, - 0x50, 0xa4, 0xfd, 0x5, 0xff, 0xff, 0x29, 0x3, 0x0, 0xff, 0x5c, 0x4, - 0xff, 0xff, 0xd8, 0xa, 0x0, 0x5, 0xff, 0xff, 0x30, 0x4, 0x0, 0xfe, - 0x2b, 0xf8, 0x4, 0xff, 0xfe, 0xe5, 0x13, 0x6, 0x0, 0xff, 0xb6, 0x4, - 0xff, 0xff, 0x86, 0x5, 0x0, 0xff, 0x83, 0x4, 0xff, 0xff, 0xb7, 0x9, - 0x0, 0xfd, 0xee, 0xff, 0xb9, 0x4, 0x0, 0xfd, 0xbf, 0xff, 0xe5, 0x5, - 0xff, 0xff, 0x30, 0x3, 0x0, 0xfe, 0x9, 0xd6, 0x4, 0xff, 0xfe, 0xfd, - 0x3f, 0xd, 0x0, 0xff, 0x3e, 0x6, 0xff, 0xfe, 0xf4, 0x14, 0x8, 0x0, - 0xff, 0x7a, 0x4, 0xff, 0xff, 0xd1, 0x9, 0x0, 0xff, 0x40, 0x4, 0xff, - 0xff, 0xf0, 0x5, 0x0, 0xfe, 0x8, 0xb6, 0x4, 0xff, 0xfe, 0xfb, 0xc, - 0x2, 0x0, 0xff, 0xe0, 0x4, 0xff, 0xff, 0x50, 0xe, 0x0, 0xff, 0xd0, - 0x4, 0xff, 0xff, 0x60, 0x5, 0x0, 0xfe, 0x4c, 0xfd, 0x4, 0xff, 0xff, - 0x7a, 0x3, 0x0, 0xff, 0x3f, 0x4, 0xff, 0xfe, 0xfc, 0x12, 0x9, 0x0, - 0x5, 0xff, 0xff, 0x30, 0x3, 0x0, 0xfe, 0x7, 0xd1, 0x5, 0xff, 0xff, - 0x44, 0x7, 0x0, 0xfe, 0x25, 0xfa, 0x3, 0xff, 0xfe, 0xf8, 0x22, 0x3, - 0x0, 0xfe, 0x21, 0xf8, 0x3, 0xff, 0xfe, 0xfa, 0x27, 0x9, 0x0, 0xfc, - 0x85, 0xff, 0xfd, 0x50, 0x2, 0x0, 0xfc, 0x54, 0xfe, 0xff, 0x7a, 0x5, - 0xff, 0xff, 0x30, 0x3, 0x0, 0xff, 0x96, 0x5, 0xff, 0xff, 0x87, 0xe, - 0x0, 0xff, 0xb8, 0x7, 0xff, 0xff, 0x82, 0x8, 0x0, 0xff, 0x42, 0x5, - 0xff, 0xff, 0x27, 0x8, 0x0, 0xff, 0x40, 0x4, 0xff, 0xff, 0xf0, 0x6, - 0x0, 0xfe, 0x20, 0xfe, 0x4, 0xff, 0xff, 0x3b, 0x2, 0x0, 0xff, 0xe0, - 0x4, 0xff, 0xff, 0x50, 0xe, 0x0, 0xff, 0xd0, 0x4, 0xff, 0xff, 0x60, - 0x6, 0x0, 0xff, 0xab, 0x4, 0xff, 0xff, 0xb0, 0x3, 0x0, 0xfe, 0xb, - 0xfa, 0x4, 0xff, 0xff, 0x66, 0x9, 0x0, 0x5, 0xff, 0xff, 0x30, 0x3, - 0x0, 0xff, 0x8e, 0x5, 0xff, 0xff, 0x8d, 0x9, 0x0, 0xff, 0x89, 0x4, - 0xff, 0xff, 0xb1, 0x3, 0x0, 0xff, 0xaf, 0x4, 0xff, 0xff, 0x8c, 0x5, - 0x0, 0xff, 0xd2, 0x4, 0xe0, 0xff, 0xe3, 0x3, 0xff, 0xfe, 0xdb, 0xdf, - 0x2, 0xff, 0xfe, 0xfb, 0x85, 0x5, 0xff, 0xff, 0x30, 0x2, 0x0, 0xff, - 0x4b, 0x5, 0xff, 0xfe, 0xcc, 0x5, 0xd, 0x0, 0xff, 0x31, 0x8, 0xff, - 0xfe, 0xee, 0xc, 0x7, 0x0, 0xfe, 0x7, 0xef, 0x4, 0xff, 0xff, 0x9c, - 0x8, 0x0, 0xff, 0x40, 0x4, 0xff, 0xff, 0xf0, 0x7, 0x0, 0xff, 0xe6, - 0x4, 0xff, 0xff, 0x52, 0x2, 0x0, 0xff, 0xe0, 0x4, 0xff, 0xff, 0x50, - 0xe, 0x0, 0xff, 0xd0, 0x4, 0xff, 0xff, 0x60, 0x6, 0x0, 0xff, 0x72, - 0x4, 0xff, 0xff, 0xc6, 0x4, 0x0, 0xff, 0xba, 0x4, 0xff, 0xfe, 0xd6, - 0x3, 0x8, 0x0, 0x5, 0xff, 0xff, 0x30, 0x2, 0x0, 0xff, 0x45, 0x5, - 0xff, 0xfe, 0xd1, 0x7, 0x9, 0x0, 0xfe, 0xd, 0xe7, 0x4, 0xff, 0xfd, - 0x47, 0x0, 0x44, 0x4, 0xff, 0xfe, 0xe9, 0xe, 0x5, 0x0, 0xff, 0xf0, - 0xd, 0xff, 0xff, 0xb0, 0x5, 0xff, 0xfc, 0x30, 0x0, 0x16, 0xea, 0x4, - 0xff, 0xfe, 0xf5, 0x26, 0xe, 0x0, 0xff, 0xa8, 0x4, 0xff, 0xff, 0xfd, - 0x4, 0xff, 0xff, 0x74, 0x8, 0x0, 0xff, 0x8f, 0x4, 0xff, 0xfe, 0xfd, - 0x35, 0x7, 0x0, 0xff, 0x40, 0x4, 0xff, 0xff, 0xf0, 0x7, 0x0, 0xff, - 0xe9, 0x4, 0xff, 0xff, 0x52, 0x2, 0x0, 0xff, 0xe0, 0x4, 0xff, 0xff, - 0x50, 0x6, 0x0, 0xff, 0x14, 0x7, 0x0, 0xff, 0xd0, 0x4, 0xff, 0xff, - 0x60, 0x6, 0x0, 0xff, 0x75, 0x4, 0xff, 0xff, 0xc6, 0x4, 0x0, 0xff, - 0x51, 0x5, 0xff, 0xff, 0x6f, 0x8, 0x0, 0x5, 0xff, 0xfc, 0x30, 0x0, - 0x13, 0xe5, 0x4, 0xff, 0xfe, 0xf8, 0x2b, 0xb, 0x0, 0xff, 0x5f, 0x4, - 0xff, 0xfd, 0xd7, 0x9, 0xd5, 0x4, 0xff, 0xff, 0x60, 0x6, 0x0, 0xff, - 0xe1, 0xd, 0xf0, 0xff, 0xa5, 0x5, 0xff, 0xfd, 0x30, 0x1, 0xb5, 0x5, - 0xff, 0xff, 0x66, 0xe, 0x0, 0xfe, 0x24, 0xfe, 0x3, 0xff, 0xfe, 0xfa, - 0x69, 0x4, 0xff, 0xfe, 0xe6, 0x6, 0x7, 0x0, 0xfe, 0x1b, 0xf4, 0x4, - 0xff, 0xfe, 0xd1, 0x5, 0x6, 0x0, 0xff, 0x40, 0x4, 0xff, 0xff, 0xf0, - 0x6, 0x0, 0xff, 0x32, 0x5, 0xff, 0xff, 0x36, 0x2, 0x0, 0xff, 0xe0, - 0x4, 0xff, 0xff, 0x50, 0x4, 0x0, 0xfd, 0x31, 0xb0, 0xaf, 0x7, 0x0, - 0xff, 0xd0, 0x4, 0xff, 0xff, 0x60, 0x6, 0x0, 0xff, 0xbe, 0x4, 0xff, - 0xff, 0xaa, 0x4, 0x0, 0xfe, 0x2, 0xcf, 0x4, 0xff, 0xfe, 0xf4, 0x21, - 0x7, 0x0, 0x5, 0xff, 0xfd, 0x30, 0x0, 0xae, 0x5, 0xff, 0xff, 0x6c, - 0xc, 0x0, 0xfe, 0x1, 0xc7, 0x4, 0xff, 0xff, 0xc9, 0x4, 0xff, 0xfe, - 0xc9, 0x1, 0x15, 0x0, 0x5, 0xff, 0xfe, 0x30, 0x6a, 0x5, 0xff, 0xff, - 0xb1, 0xf, 0x0, 0xff, 0x9a, 0x4, 0xff, 0xfd, 0x9d, 0x1, 0xd2, 0x4, - 0xff, 0xff, 0x65, 0x8, 0x0, 0xff, 0x77, 0x5, 0xff, 0xff, 0x80, 0x6, - 0x0, 0xff, 0x40, 0x4, 0xff, 0xff, 0xf0, 0x5, 0x0, 0xfe, 0x16, 0xd2, - 0x4, 0xff, 0xfe, 0xf4, 0x8, 0x2, 0x0, 0xff, 0xe0, 0x4, 0xff, 0xff, - 0x50, 0x2, 0x0, 0xfe, 0x37, 0xb0, 0x2, 0xff, 0xff, 0xb0, 0x7, 0x0, - 0xff, 0xd0, 0x4, 0xff, 0xff, 0x60, 0x5, 0x0, 0xff, 0x73, 0x5, 0xff, - 0xff, 0x70, 0x5, 0x0, 0xff, 0x3c, 0x5, 0xff, 0xfe, 0xbe, 0x1, 0x6, - 0x0, 0x5, 0xff, 0xfe, 0x30, 0x64, 0x5, 0xff, 0xfe, 0xb7, 0x1, 0xd, - 0x0, 0xfe, 0x35, 0xfe, 0x8, 0xff, 0xff, 0x37, 0xc, 0x0, 0xff, 0x24, - 0x8, 0x30, 0xff, 0x21, 0x5, 0xff, 0xfe, 0x5a, 0xf7, 0x4, 0xff, 0xfe, - 0xe7, 0x14, 0xe, 0x0, 0xfe, 0x1a, 0xfa, 0x3, 0xff, 0xfc, 0xfe, 0x27, - 0x0, 0x5a, 0x4, 0xff, 0xfe, 0xdc, 0x2, 0x7, 0x0, 0xfe, 0x5, 0xd0, - 0x4, 0xff, 0xfe, 0xf7, 0x1f, 0x5, 0x0, 0xff, 0x40, 0x4, 0xff, 0xff, - 0xf0, 0x3, 0x0, 0xfd, 0x17, 0x71, 0xe7, 0x5, 0xff, 0xff, 0x9e, 0x3, - 0x0, 0xff, 0xe0, 0x4, 0xff, 0xfd, 0x50, 0x38, 0xb8, 0x4, 0xff, 0xff, - 0xb0, 0x7, 0x0, 0xff, 0xd0, 0x4, 0xff, 0xff, 0x60, 0x2, 0x0, 0xfd, - 0x3, 0x42, 0xb3, 0x5, 0xff, 0xfe, 0xfa, 0x19, 0x6, 0x0, 0xff, 0x98, - 0x5, 0xff, 0xff, 0x54, 0x6, 0x0, 0x5, 0xff, 0xfe, 0x55, 0xf4, 0x4, - 0xff, 0xfe, 0xeb, 0x17, 0xf, 0x0, 0xff, 0x9d, 0x7, 0xff, 0xff, 0xa0, - 0xd, 0x0, 0xff, 0xc0, 0x8, 0xff, 0xff, 0xb0, 0x5, 0xff, 0xff, 0xb6, - 0x5, 0xff, 0xff, 0x96, 0xf, 0x0, 0xff, 0x8c, 0x4, 0xff, 0xff, 0xac, - 0x2, 0x0, 0xfe, 0x4, 0xdd, 0x4, 0xff, 0xff, 0x57, 0x8, 0x0, 0xff, - 0x38, 0x5, 0xff, 0xff, 0x9f, 0x5, 0x0, 0xff, 0x40, 0x4, 0xff, 0xfc, - 0xf0, 0x7c, 0xc1, 0xdf, 0x7, 0xff, 0xfe, 0xf7, 0x23, 0x3, 0x0, 0xff, - 0xe0, 0x4, 0xff, 0xfe, 0x72, 0xe2, 0x5, 0xff, 0xff, 0xb0, 0x7, 0x0, - 0xff, 0xd0, 0x4, 0xff, 0xfc, 0x8b, 0xb8, 0xcd, 0xf6, 0x7, 0xff, 0xff, - 0x8e, 0x7, 0x0, 0xfe, 0xf, 0xea, 0x4, 0xff, 0xfe, 0xdc, 0x2, 0x5, - 0x0, 0x5, 0xff, 0xff, 0xaf, 0x5, 0xff, 0xff, 0x9c, 0x10, 0x0, 0xfe, - 0x17, 0xf1, 0x5, 0xff, 0xfe, 0xf2, 0x17, 0xd, 0x0, 0xff, 0xc0, 0x8, - 0xff, 0xff, 0xb0, 0x5, 0xff, 0xfe, 0x3c, 0xda, 0x4, 0xff, 0xfe, 0xfc, - 0x3a, 0xd, 0x0, 0xfe, 0x12, 0xf4, 0x4, 0xff, 0xff, 0x33, 0x3, 0x0, - 0xff, 0x68, 0x4, 0xff, 0xfe, 0xcf, 0x1, 0x8, 0x0, 0xff, 0xa3, 0x4, - 0xff, 0xfe, 0xfa, 0x1a, 0x4, 0x0, 0xff, 0x40, 0x4, 0xff, 0xfd, 0xf0, - 0x27, 0xf5, 0x8, 0xff, 0xff, 0x65, 0x4, 0x0, 0xff, 0xe0, 0x4, 0xff, - 0xfc, 0x50, 0x6, 0x60, 0xdc, 0x3, 0xff, 0xff, 0xb0, 0x7, 0x0, 0xff, - 0xd0, 0x4, 0xff, 0xfe, 0x60, 0xa8, 0x8, 0xff, 0xfe, 0xce, 0xa, 0x8, - 0x0, 0xff, 0x6a, 0x5, 0xff, 0xff, 0x50, 0x5, 0x0, 0x5, 0xff, 0xfe, - 0x39, 0xd6, 0x4, 0xff, 0xfe, 0xfd, 0x3f, 0x10, 0x0, 0xff, 0x72, 0x5, - 0xff, 0xff, 0x74, 0xe, 0x0, 0xf6, 0x7e, 0xfc, 0xff, 0xfa, 0xb6, 0xb9, - 0xfc, 0xff, 0xfa, 0x73, 0x5, 0xff, 0xfd, 0x30, 0x35, 0xfb, 0x4, 0xff, - 0xfe, 0xde, 0xd, 0xc, 0x0, 0xff, 0x7e, 0x4, 0xff, 0xff, 0xba, 0x4, - 0x0, 0xfe, 0x9, 0xe7, 0x4, 0xff, 0xff, 0x48, 0x8, 0x0, 0xfe, 0x24, - 0xfc, 0x4, 0xff, 0xff, 0x78, 0x4, 0x0, 0xff, 0x40, 0x4, 0xff, 0xfd, - 0xf0, 0x0, 0x66, 0x6, 0xff, 0xfe, 0xfd, 0x72, 0x5, 0x0, 0xff, 0xe0, - 0x4, 0xff, 0xff, 0x50, 0x2, 0x0, 0xfb, 0x4, 0x60, 0xdc, 0xff, 0xb0, - 0x7, 0x0, 0xff, 0xd0, 0x4, 0xff, 0xfd, 0x60, 0x10, 0xe2, 0x6, 0xff, - 0xfe, 0xce, 0x15, 0x9, 0x0, 0xfe, 0x6, 0xdd, 0x4, 0xff, 0xff, 0xb4, - 0x5, 0x0, 0x5, 0xff, 0xfd, 0x30, 0x2f, 0xf9, 0x4, 0xff, 0xfe, 0xe2, - 0x10, 0xf, 0x0, 0xfe, 0x5, 0xd7, 0x3, 0xff, 0xfe, 0xd9, 0x6, 0xe, - 0x0, 0xfc, 0x91, 0xff, 0xfa, 0x34, 0x2, 0x0, 0xfc, 0x3a, 0xfa, 0xff, - 0x8e, 0x5, 0xff, 0xfd, 0x30, 0x0, 0x7a, 0x5, 0xff, 0xff, 0xa1, 0xb, - 0x0, 0xfe, 0xc, 0xec, 0x4, 0xff, 0xff, 0x41, 0x5, 0x0, 0xff, 0x77, - 0x4, 0xff, 0xff, 0xc1, 0x9, 0x0, 0xff, 0xae, 0x4, 0xff, 0xff, 0xcb, - 0x4, 0x0, 0xff, 0x40, 0x4, 0xff, 0xff, 0xf0, 0x2, 0x0, 0xff, 0xb1, - 0x4, 0xff, 0xfe, 0xd7, 0x40, 0x6, 0x0, 0xff, 0xe0, 0x4, 0xff, 0xff, - 0x50, 0x4, 0x0, 0xfd, 0x4, 0x5f, 0x87, 0x7, 0x0, 0xff, 0xd0, 0x4, - 0xff, 0xfc, 0x60, 0x0, 0x3f, 0xfd, 0x4, 0xff, 0xfe, 0xf3, 0x10, 0xb, - 0x0, 0xff, 0x71, 0x4, 0xff, 0xfe, 0xf9, 0xd, 0x4, 0x0, 0x5, 0xff, - 0xfd, 0x30, 0x0, 0x74, 0x5, 0xff, 0xff, 0xa8, 0x10, 0x0, 0xff, 0x47, - 0x3, 0xff, 0xff, 0x49, 0xf, 0x0, 0xfd, 0xf1, 0xff, 0xb4, 0x4, 0x0, - 0xfd, 0xbb, 0xff, 0xec, 0x5, 0xff, 0xfc, 0x30, 0x0, 0x3, 0xc3, 0x5, - 0xff, 0xff, 0x56, 0xa, 0x0, 0xff, 0x70, 0x4, 0xff, 0xff, 0xcb, 0x6, - 0x40, 0xfe, 0x4a, 0xf0, 0x4, 0xff, 0xff, 0x3a, 0x8, 0x0, 0xff, 0x4d, - 0x4, 0xff, 0xfe, 0xfd, 0xb, 0x3, 0x0, 0xff, 0x40, 0x4, 0xff, 0xff, - 0xf0, 0x2, 0x0, 0xfa, 0x14, 0xe7, 0xf5, 0xb0, 0x52, 0x4, 0x7, 0x0, - 0xff, 0xe0, 0x4, 0xff, 0xff, 0x50, 0xe, 0x0, 0xff, 0xd0, 0x4, 0xff, - 0xff, 0x60, 0x2, 0x0, 0xff, 0x87, 0x5, 0xff, 0xff, 0x94, 0xb, 0x0, - 0xfe, 0x14, 0xfd, 0x4, 0xff, 0xff, 0x45, 0x4, 0x0, 0x5, 0xff, 0xfc, - 0x30, 0x0, 0x1, 0xbd, 0x5, 0xff, 0xff, 0x5d, 0x10, 0x0, 0xfd, 0xb1, - 0xff, 0xb3, 0xf, 0x0, 0xff, 0x8, 0x2, 0xff, 0xff, 0xb9, 0x4, 0x0, - 0xff, 0xc1, 0x7, 0xff, 0xff, 0x30, 0x2, 0x0, 0xfe, 0x1f, 0xf1, 0x4, - 0xff, 0xfe, 0xef, 0x1d, 0x8, 0x0, 0xfe, 0x6, 0xe2, 0x4, 0xff, 0xfe, - 0x53, 0xdc, 0x5, 0xff, 0xfe, 0xad, 0x85, 0x4, 0xff, 0xff, 0xb3, 0x8, - 0x0, 0xfe, 0x9, 0xfb, 0x4, 0xff, 0xff, 0x36, 0x3, 0x0, 0xff, 0x40, - 0x4, 0xff, 0xff, 0xf0, 0x3, 0x0, 0xfe, 0x14, 0x4, 0xa, 0x0, 0xff, - 0xe0, 0x4, 0xff, 0xff, 0x50, 0xe, 0x0, 0xff, 0xd0, 0x4, 0xff, 0xff, - 0x60, 0x2, 0x0, 0xfe, 0x5, 0xcc, 0x5, 0xff, 0xff, 0x4b, 0xb, 0x0, - 0xff, 0xc6, 0x4, 0xff, 0xff, 0x73, 0x4, 0x0, 0x5, 0xff, 0xff, 0x30, - 0x2, 0x0, 0xfe, 0x1b, 0xed, 0x4, 0xff, 0xfe, 0xf2, 0x21, 0xf, 0x0, - 0xfd, 0x23, 0xf1, 0x24, 0x10, 0x0, 0xfc, 0xe5, 0xff, 0xfe, 0x5d, 0x2, - 0x1, 0xff, 0x65, 0x2, 0xff, 0xff, 0xe1, 0x5, 0xff, 0xff, 0x30, 0x3, - 0x0, 0xff, 0x5a, 0x5, 0xff, 0xfe, 0xbf, 0x2, 0x7, 0x0, 0xff, 0x62, - 0x4, 0xff, 0xfd, 0xd6, 0x1, 0x60, 0x4, 0xff, 0xfc, 0xfe, 0x2a, 0x15, - 0xf7, 0x4, 0xff, 0xff, 0x2d, 0x8, 0x0, 0xff, 0xd0, 0x4, 0xff, 0xff, - 0x4f, 0x3, 0x0, 0xff, 0x40, 0x4, 0xff, 0xff, 0xf0, 0xf, 0x0, 0xff, - 0xe0, 0x4, 0xff, 0xff, 0x50, 0xe, 0x0, 0xff, 0xd0, 0x4, 0xff, 0xff, - 0x60, 0x3, 0x0, 0xfe, 0x27, 0xf5, 0x4, 0xff, 0xfe, 0xe9, 0x16, 0xa, - 0x0, 0xff, 0x95, 0x4, 0xff, 0xff, 0x8b, 0x4, 0x0, 0x5, 0xff, 0xff, - 0x30, 0x3, 0x0, 0xff, 0x53, 0x5, 0xff, 0xfe, 0xc5, 0x3, 0xf, 0x0, - 0xff, 0x41, 0x11, 0x0, 0xff, 0x84, 0x3, 0xff, 0xfe, 0xe4, 0xe5, 0x3, - 0xff, 0xff, 0x84, 0x5, 0xff, 0xff, 0x30, 0x4, 0x0, 0xff, 0xa5, 0x5, - 0xff, 0xff, 0x77, 0x6, 0x0, 0xfe, 0x2, 0xd8, 0x4, 0xff, 0xfc, 0x5e, - 0x0, 0x4, 0xdc, 0x3, 0xff, 0xff, 0xa8, 0x2, 0x0, 0xff, 0x93, 0x4, - 0xff, 0xff, 0xa5, 0x8, 0x0, 0xff, 0xbc, 0x4, 0xff, 0xff, 0x54, 0x3, - 0x0, 0xff, 0x40, 0x4, 0xff, 0xff, 0xf0, 0xf, 0x0, 0xff, 0xe0, 0x4, - 0xff, 0xff, 0x50, 0xe, 0x0, 0xff, 0xd0, 0x4, 0xff, 0xff, 0x60, 0x4, - 0x0, 0xff, 0x67, 0x5, 0xff, 0xfe, 0xb4, 0x1, 0x9, 0x0, 0xff, 0x80, - 0x4, 0xff, 0xff, 0x90, 0x4, 0x0, 0x5, 0xff, 0xff, 0x30, 0x4, 0x0, - 0xff, 0x9d, 0x5, 0xff, 0xff, 0x7e, 0xe, 0x0, 0xfd, 0xc, 0xd8, 0xc, - 0x10, 0x0, 0xfe, 0x8, 0xc3, 0x6, 0xff, 0xfe, 0xc5, 0x9, 0x5, 0xff, - 0xff, 0x30, 0x4, 0x0, 0xfe, 0xf, 0xe0, 0x4, 0xff, 0xfe, 0xfa, 0x32, - 0x5, 0x0, 0xff, 0x54, 0x4, 0xff, 0xfe, 0xe2, 0x4, 0x2, 0x0, 0xff, - 0x5e, 0x2, 0xff, 0xfe, 0xfe, 0x2a, 0x2, 0x0, 0xfe, 0x1e, 0xfb, 0x3, - 0xff, 0xfe, 0xfc, 0x22, 0x7, 0x0, 0xff, 0xc4, 0x4, 0xff, 0xff, 0x4c, - 0x3, 0x0, 0xff, 0x40, 0x4, 0xff, 0xff, 0xf0, 0xf, 0x0, 0xff, 0xe0, - 0x4, 0xff, 0xff, 0x87, 0xa, 0x50, 0xff, 0x19, 0x3, 0x0, 0xff, 0xd0, - 0x4, 0xff, 0xff, 0x60, 0x5, 0x0, 0xff, 0xb1, 0x5, 0xff, 0xff, 0x6a, - 0x9, 0x0, 0xff, 0x86, 0x4, 0xff, 0xff, 0x8a, 0x4, 0x0, 0x5, 0xff, - 0xff, 0x30, 0x4, 0x0, 0xfe, 0xc, 0xdc, 0x4, 0xff, 0xfe, 0xfc, 0x38, - 0xd, 0x0, 0xfd, 0x78, 0xff, 0x78, 0x11, 0x0, 0xf7, 0x6, 0x78, 0xd6, - 0xfd, 0xfe, 0xd4, 0x75, 0x6, 0x0, 0x5, 0xff, 0xff, 0x30, 0x5, 0x0, - 0xfe, 0x3d, 0xfd, 0x4, 0xff, 0xfe, 0xd8, 0xa, 0x4, 0x0, 0xff, 0xcc, - 0x4, 0xff, 0xff, 0x6c, 0x3, 0x0, 0xfc, 0x2, 0xd6, 0xff, 0xa8, 0x4, - 0x0, 0xff, 0xa1, 0x4, 0xff, 0xff, 0x97, 0x6, 0x0, 0xfe, 0x1, 0xee, - 0x4, 0xff, 0xff, 0x2a, 0x3, 0x0, 0xff, 0x40, 0x4, 0xff, 0xff, 0xf0, - 0xf, 0x0, 0xff, 0xe0, 0xf, 0xff, 0xff, 0x50, 0x3, 0x0, 0xff, 0xd0, - 0x4, 0xff, 0xff, 0x60, 0x5, 0x0, 0xfe, 0x14, 0xe7, 0x4, 0xff, 0xfe, - 0xf6, 0x29, 0x8, 0x0, 0xff, 0xb3, 0x4, 0xff, 0xff, 0x67, 0x4, 0x0, - 0x5, 0xff, 0xff, 0x30, 0x5, 0x0, 0xfe, 0x37, 0xfc, 0x4, 0xff, 0xfe, - 0xdc, 0xc, 0xb, 0x0, 0xfb, 0xc, 0xec, 0xff, 0xec, 0x10, 0x13, 0x0, - 0xfe, 0x2, 0x1, 0x4, 0x0, 0x5, 0xff, 0xff, 0x30, 0x6, 0x0, 0xff, - 0x84, 0x5, 0xff, 0xff, 0x98, 0x3, 0x0, 0xff, 0x45, 0x4, 0xff, 0xfe, - 0xeb, 0x9, 0x4, 0x0, 0xfd, 0x58, 0xfc, 0x27, 0x4, 0x0, 0xfe, 0x2a, - 0xfe, 0x3, 0xff, 0xfe, 0xf7, 0x19, 0x5, 0x0, 0xff, 0x3a, 0x4, 0xff, - 0xfe, 0xf3, 0x4, 0x3, 0x0, 0xff, 0x40, 0x4, 0xff, 0xff, 0xf0, 0xf, - 0x0, 0xff, 0xe0, 0xf, 0xff, 0xff, 0x50, 0x3, 0x0, 0xff, 0xd0, 0x4, - 0xff, 0xff, 0x60, 0x6, 0x0, 0xff, 0x47, 0x5, 0xff, 0xfe, 0xcf, 0x7, - 0x6, 0x0, 0xfe, 0xa, 0xf4, 0x4, 0xff, 0xff, 0x34, 0x4, 0x0, 0x5, - 0xff, 0xff, 0x30, 0x6, 0x0, 0xff, 0x7c, 0x5, 0xff, 0xff, 0x9e, 0xb, - 0x0, 0xff, 0x7c, 0x3, 0xff, 0xff, 0x80, 0xa, 0x0, 0xff, 0xf, 0xd, - 0x10, 0xff, 0xb, 0x5, 0xff, 0xff, 0x30, 0x6, 0x0, 0xfe, 0x5, 0xca, - 0x5, 0xff, 0xff, 0x4d, 0x2, 0x0, 0xff, 0xbe, 0x4, 0xff, 0xff, 0x7a, - 0x5, 0x0, 0xfe, 0x2, 0x76, 0x6, 0x0, 0xff, 0xaf, 0x4, 0xff, 0xff, - 0x88, 0x5, 0x0, 0xff, 0xa8, 0x4, 0xff, 0xff, 0xaf, 0x4, 0x0, 0xff, - 0x40, 0x4, 0xff, 0xff, 0xf0, 0xf, 0x0, 0xff, 0xe0, 0xf, 0xff, 0xff, - 0x50, 0x3, 0x0, 0xff, 0xd0, 0x4, 0xff, 0xff, 0x60, 0x7, 0x0, 0xff, - 0x91, 0x5, 0xff, 0xff, 0x8a, 0x6, 0x0, 0xff, 0x70, 0x4, 0xff, 0xfe, - 0xea, 0x2, 0x4, 0x0, 0x5, 0xff, 0xff, 0x30, 0x6, 0x0, 0xfe, 0x3, - 0xc5, 0x5, 0xff, 0xff, 0x54, 0x9, 0x0, 0xfe, 0x10, 0xf0, 0x3, 0xff, - 0xfe, 0xf0, 0x10, 0x9, 0x0, 0xff, 0xf0, 0xd, 0xff, 0xff, 0xb0, 0x5, - 0xff, 0xff, 0x30, 0x7, 0x0, 0xfe, 0x25, 0xf4, 0x4, 0xff, 0xfd, 0xeb, - 0x17, 0x37, 0x4, 0xff, 0xfe, 0xf2, 0x10, 0xd, 0x0, 0xff, 0x37, 0x4, - 0xff, 0xfe, 0xf1, 0x10, 0x3, 0x0, 0xff, 0x3f, 0x5, 0xff, 0xff, 0x50, - 0x4, 0x0, 0xff, 0x40, 0x4, 0xff, 0xff, 0xf0, 0xf, 0x0, 0xff, 0xe0, - 0xf, 0xff, 0xff, 0x50, 0x3, 0x0, 0xff, 0xd0, 0x4, 0xff, 0xff, 0x60, - 0x7, 0x0, 0xfe, 0x8, 0xd3, 0x4, 0xff, 0xfe, 0xfe, 0x42, 0x4, 0x0, - 0xfe, 0x15, 0xeb, 0x4, 0xff, 0xff, 0x8d, 0x5, 0x0, 0x5, 0xff, 0xff, - 0x30, 0x7, 0x0, 0xfe, 0x20, 0xf2, 0x4, 0xff, 0xfe, 0xee, 0x1b, 0x8, - 0x0, 0xff, 0x80, 0x5, 0xff, 0xff, 0x80, 0x9, 0x0, 0xff, 0xf0, 0xd, - 0xff, 0xff, 0xb0, 0x5, 0xd0, 0xff, 0x27, 0x8, 0x0, 0xff, 0x5f, 0x5, - 0xd0, 0xfe, 0x87, 0x85, 0x4, 0xd0, 0xff, 0x78, 0xf, 0x0, 0xff, 0xa3, - 0x4, 0xd0, 0xff, 0x59, 0x2, 0x0, 0xfe, 0x12, 0xe0, 0x4, 0xff, 0xfe, - 0xda, 0x3, 0x4, 0x0, 0xff, 0x34, 0x4, 0xd0, 0xff, 0xc3, 0xf, 0x0, - 0xff, 0xb6, 0xf, 0xd0, 0xff, 0x41, 0x3, 0x0, 0xff, 0xa9, 0x4, 0xd0, - 0xff, 0x4e, 0x8, 0x0, 0xfe, 0x2e, 0xcf, 0x4, 0xd0, 0xfe, 0xb4, 0x5, - 0x2, 0x0, 0xfe, 0x1, 0xb4, 0x4, 0xff, 0xfe, 0xfa, 0x21, 0x5, 0x0, - 0x5, 0xd0, 0xff, 0x27, 0x8, 0x0, 0xff, 0x59, 0x5, 0xd0, 0xff, 0x8c, - 0x7, 0x0, 0xfe, 0x6, 0xc0, 0x5, 0xd0, 0xfe, 0xc0, 0x6, 0x8, 0x0, - 0xff, 0xc3, 0xd, 0xd0, 0xff, 0x8f, 0x31, 0x0, 0xfe, 0x7, 0xc0, 0x5, - 0xff, 0xff, 0x53, 0x46, 0x0, 0xff, 0x8c, 0x5, 0xff, 0xff, 0x91, 0x72, - 0x0, 0xfe, 0x6, 0xb2, 0x5, 0xff, 0xff, 0xb0, 0x46, 0x0, 0xff, 0x7b, - 0x5, 0xff, 0xfe, 0xe2, 0xe, 0x71, 0x0, 0xfe, 0xe, 0xbb, 0x5, 0xff, - 0xfe, 0xe4, 0x17, 0x44, 0x0, 0xfe, 0x1, 0x8d, 0x5, 0xff, 0xfe, 0xfa, - 0x3d, 0x72, 0x0, 0xff, 0xb6, 0x5, 0xff, 0xfe, 0xf6, 0x35, 0x45, 0x0, - 0xff, 0x7a, 0x6, 0xff, 0xff, 0x69, 0x73, 0x0, 0xff, 0x72, 0x4, 0xff, - 0xfe, 0xfa, 0x47, 0x46, 0x0, 0xff, 0x35, 0x5, 0xff, 0xff, 0x7d, 0x74, - 0x0, 0xfe, 0xc, 0xee, 0x2, 0xff, 0xfe, 0xf6, 0x4b, 0x48, 0x0, 0xff, - 0xbd, 0x3, 0xff, 0xff, 0x7f, 0x76, 0x0, 0xfc, 0x84, 0xff, 0xeb, 0x3a, - 0x49, 0x0, 0xfc, 0x46, 0xff, 0xfb, 0x66, 0x77, 0x0, 0xfd, 0x15, 0xc4, - 0x1f, 0x4b, 0x0, 0xfe, 0xba, 0x40, 0x48, 0x0}; -static const Image kaspersky_logo_image = {200, 43, 3548, kaspersky_logo_data}; - -const VariantAnimation kaspersky_logo = { - 21, - { - {28, 11, 25, 0, &kaspersky_logo_image}, - {28, 11, 25, 5, &kaspersky_logo_image}, - {28, 11, 25, 10, &kaspersky_logo_image}, - {28, 11, 25, 15, &kaspersky_logo_image}, - {28, 11, 25, 20, &kaspersky_logo_image}, - {28, 11, 25, 25, &kaspersky_logo_image}, - {28, 11, 25, 30, &kaspersky_logo_image}, - {28, 11, 25, 35, &kaspersky_logo_image}, - {28, 11, 25, 40, &kaspersky_logo_image}, - {28, 11, 25, 45, &kaspersky_logo_image}, - {28, 11, 25, 50, &kaspersky_logo_image}, - {28, 11, 25, 55, &kaspersky_logo_image}, - {28, 11, 25, 60, &kaspersky_logo_image}, - {28, 11, 25, 65, &kaspersky_logo_image}, - {28, 11, 25, 70, &kaspersky_logo_image}, - {28, 11, 25, 75, &kaspersky_logo_image}, - {28, 11, 25, 80, &kaspersky_logo_image}, - {28, 11, 25, 85, &kaspersky_logo_image}, - {28, 11, 25, 90, &kaspersky_logo_image}, - {28, 11, 25, 95, &kaspersky_logo_image}, - {28, 11, 25, 100, &kaspersky_logo_image}, - }}; -const VariantAnimation kaspersky_logo_reversed = { - 21, - { - {28, 11, 25, 100, &kaspersky_logo_image}, - {28, 11, 25, 95, &kaspersky_logo_image}, - {28, 11, 25, 90, &kaspersky_logo_image}, - {28, 11, 25, 85, &kaspersky_logo_image}, - {28, 11, 25, 80, &kaspersky_logo_image}, - {28, 11, 25, 75, &kaspersky_logo_image}, - {28, 11, 25, 70, &kaspersky_logo_image}, - {28, 11, 25, 65, &kaspersky_logo_image}, - {28, 11, 25, 60, &kaspersky_logo_image}, - {28, 11, 25, 55, &kaspersky_logo_image}, - {28, 11, 25, 50, &kaspersky_logo_image}, - {28, 11, 25, 45, &kaspersky_logo_image}, - {28, 11, 25, 40, &kaspersky_logo_image}, - {28, 11, 25, 35, &kaspersky_logo_image}, - {28, 11, 25, 30, &kaspersky_logo_image}, - {28, 11, 25, 25, &kaspersky_logo_image}, - {28, 11, 25, 20, &kaspersky_logo_image}, - {28, 11, 25, 15, &kaspersky_logo_image}, - {28, 11, 25, 10, &kaspersky_logo_image}, - {28, 11, 25, 5, &kaspersky_logo_image}, - {28, 11, 25, 0, &kaspersky_logo_image}, - }}; - -const VariantAnimation kaspersky_screensaver = { - 112, - { - {28, 11, 125, 60, &kaspersky_logo_image}, - {29, 11, 125, 60, &kaspersky_logo_image}, - {30, 11, 125, 60, &kaspersky_logo_image}, - {31, 11, 125, 60, &kaspersky_logo_image}, - {32, 11, 125, 60, &kaspersky_logo_image}, - {33, 11, 125, 60, &kaspersky_logo_image}, - {34, 11, 125, 60, &kaspersky_logo_image}, - {35, 11, 125, 60, &kaspersky_logo_image}, - {36, 11, 125, 60, &kaspersky_logo_image}, - {37, 11, 125, 60, &kaspersky_logo_image}, - {38, 11, 125, 60, &kaspersky_logo_image}, - {39, 11, 125, 60, &kaspersky_logo_image}, - {40, 11, 125, 60, &kaspersky_logo_image}, - {41, 11, 125, 60, &kaspersky_logo_image}, - {42, 11, 125, 60, &kaspersky_logo_image}, - {43, 11, 125, 60, &kaspersky_logo_image}, - {44, 11, 125, 60, &kaspersky_logo_image}, - {45, 11, 125, 60, &kaspersky_logo_image}, - {46, 11, 125, 60, &kaspersky_logo_image}, - {47, 11, 125, 60, &kaspersky_logo_image}, - {48, 11, 125, 60, &kaspersky_logo_image}, - {49, 11, 125, 60, &kaspersky_logo_image}, - {50, 11, 125, 60, &kaspersky_logo_image}, - {51, 11, 125, 60, &kaspersky_logo_image}, - {52, 11, 125, 60, &kaspersky_logo_image}, - {53, 11, 125, 60, &kaspersky_logo_image}, - {54, 11, 125, 60, &kaspersky_logo_image}, - {55, 11, 125, 60, &kaspersky_logo_image}, - {54, 11, 125, 60, &kaspersky_logo_image}, - {53, 11, 125, 60, &kaspersky_logo_image}, - {52, 11, 125, 60, &kaspersky_logo_image}, - {51, 11, 125, 60, &kaspersky_logo_image}, - {50, 11, 125, 60, &kaspersky_logo_image}, - {49, 11, 125, 60, &kaspersky_logo_image}, - {48, 11, 125, 60, &kaspersky_logo_image}, - {47, 11, 125, 60, &kaspersky_logo_image}, - {46, 11, 125, 60, &kaspersky_logo_image}, - {45, 11, 125, 60, &kaspersky_logo_image}, - {44, 11, 125, 60, &kaspersky_logo_image}, - {43, 11, 125, 60, &kaspersky_logo_image}, - {42, 11, 125, 60, &kaspersky_logo_image}, - {41, 11, 125, 60, &kaspersky_logo_image}, - {40, 11, 125, 60, &kaspersky_logo_image}, - {39, 11, 125, 60, &kaspersky_logo_image}, - {38, 11, 125, 60, &kaspersky_logo_image}, - {37, 11, 125, 60, &kaspersky_logo_image}, - {36, 11, 125, 60, &kaspersky_logo_image}, - {35, 11, 125, 60, &kaspersky_logo_image}, - {34, 11, 125, 60, &kaspersky_logo_image}, - {33, 11, 125, 60, &kaspersky_logo_image}, - {32, 11, 125, 60, &kaspersky_logo_image}, - {31, 11, 125, 60, &kaspersky_logo_image}, - {30, 11, 125, 60, &kaspersky_logo_image}, - {29, 11, 125, 60, &kaspersky_logo_image}, - {28, 11, 125, 60, &kaspersky_logo_image}, - {27, 11, 125, 60, &kaspersky_logo_image}, - {26, 11, 125, 60, &kaspersky_logo_image}, - {25, 11, 125, 60, &kaspersky_logo_image}, - {24, 11, 125, 60, &kaspersky_logo_image}, - {23, 11, 125, 60, &kaspersky_logo_image}, - {22, 11, 125, 60, &kaspersky_logo_image}, - {21, 11, 125, 60, &kaspersky_logo_image}, - {20, 11, 125, 60, &kaspersky_logo_image}, - {19, 11, 125, 60, &kaspersky_logo_image}, - {18, 11, 125, 60, &kaspersky_logo_image}, - {17, 11, 125, 60, &kaspersky_logo_image}, - {16, 11, 125, 60, &kaspersky_logo_image}, - {15, 11, 125, 60, &kaspersky_logo_image}, - {14, 11, 125, 60, &kaspersky_logo_image}, - {13, 11, 125, 60, &kaspersky_logo_image}, - {12, 11, 125, 60, &kaspersky_logo_image}, - {11, 11, 125, 60, &kaspersky_logo_image}, - {10, 11, 125, 60, &kaspersky_logo_image}, - {9, 11, 125, 60, &kaspersky_logo_image}, - {8, 11, 125, 60, &kaspersky_logo_image}, - {7, 11, 125, 60, &kaspersky_logo_image}, - {6, 11, 125, 60, &kaspersky_logo_image}, - {5, 11, 125, 60, &kaspersky_logo_image}, - {4, 11, 125, 60, &kaspersky_logo_image}, - {3, 11, 125, 60, &kaspersky_logo_image}, - {2, 11, 125, 60, &kaspersky_logo_image}, - {1, 11, 125, 60, &kaspersky_logo_image}, - {0, 11, 125, 60, &kaspersky_logo_image}, - {0, 11, 125, 60, &kaspersky_logo_image}, - {1, 11, 125, 60, &kaspersky_logo_image}, - {2, 11, 125, 60, &kaspersky_logo_image}, - {3, 11, 125, 60, &kaspersky_logo_image}, - {4, 11, 125, 60, &kaspersky_logo_image}, - {5, 11, 125, 60, &kaspersky_logo_image}, - {6, 11, 125, 60, &kaspersky_logo_image}, - {7, 11, 125, 60, &kaspersky_logo_image}, - {8, 11, 125, 60, &kaspersky_logo_image}, - {9, 11, 125, 60, &kaspersky_logo_image}, - {10, 11, 125, 60, &kaspersky_logo_image}, - {11, 11, 125, 60, &kaspersky_logo_image}, - {12, 11, 125, 60, &kaspersky_logo_image}, - {13, 11, 125, 60, &kaspersky_logo_image}, - {14, 11, 125, 60, &kaspersky_logo_image}, - {15, 11, 125, 60, &kaspersky_logo_image}, - {16, 11, 125, 60, &kaspersky_logo_image}, - {17, 11, 125, 60, &kaspersky_logo_image}, - {18, 11, 125, 60, &kaspersky_logo_image}, - {19, 11, 125, 60, &kaspersky_logo_image}, - {20, 11, 125, 60, &kaspersky_logo_image}, - {21, 11, 125, 60, &kaspersky_logo_image}, - {22, 11, 125, 60, &kaspersky_logo_image}, - {23, 11, 125, 60, &kaspersky_logo_image}, - {24, 11, 125, 60, &kaspersky_logo_image}, - {25, 11, 125, 60, &kaspersky_logo_image}, - {26, 11, 125, 60, &kaspersky_logo_image}, - {27, 11, 125, 60, &kaspersky_logo_image}, - {28, 11, 125, 60, &kaspersky_logo_image}, - }}; - -VariantInfo kaspersky_svi __attribute__((section("variant_info"))) = { - .version = 1, - .name = "kaspersky", - .logo = &kaspersky_logo, - .logo_reversed = &kaspersky_logo_reversed, - .screensaver_timeout = ONE_SEC * 60 * 10, - .screensaver = &kaspersky_screensaver}; diff --git a/tools/variant/salt.c b/tools/variant/salt.c deleted file mode 100644 index e15134d0b..000000000 --- a/tools/variant/salt.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "keepkey/variant/salt.h" - -#include "keepkey/board/timer.h" -#include "keepkey/board/variant.h" - -VariantInfo salt_svi - __attribute__((section("variant_info"))) = {VARIANTINFO_SALT}; diff --git a/unittests/board/CMakeLists.txt b/unittests/board/CMakeLists.txt index 81e294dec..a37d57905 100644 --- a/unittests/board/CMakeLists.txt +++ b/unittests/board/CMakeLists.txt @@ -15,7 +15,6 @@ target_link_libraries(board-unit kkboard kkboard.keepkey kkvariant.keepkey - kkvariant.salt kkboard trezorcrypto qrcodegenerator diff --git a/unittests/crypto/CMakeLists.txt b/unittests/crypto/CMakeLists.txt index 782549f28..44576e694 100644 --- a/unittests/crypto/CMakeLists.txt +++ b/unittests/crypto/CMakeLists.txt @@ -15,7 +15,6 @@ target_link_libraries(crypto-unit kkboard kkboard.keepkey kkvariant.keepkey - kkvariant.salt kkboard kkemulator qrcodegenerator diff --git a/unittests/firmware/CMakeLists.txt b/unittests/firmware/CMakeLists.txt index 647d72571..ea3a1a4cc 100644 --- a/unittests/firmware/CMakeLists.txt +++ b/unittests/firmware/CMakeLists.txt @@ -24,7 +24,6 @@ target_link_libraries(firmware-unit kkboard kkboard.keepkey kkvariant.keepkey - kkvariant.salt kkboard kkemulator trezorcrypto From 0c50932f7b5d5b76e8f75038e28bce46064f7348 Mon Sep 17 00:00:00 2001 From: highlander Date: Wed, 11 Mar 2026 16:41:49 -0600 Subject: [PATCH 4/4] feat(firmware): add BIP-85 child mnemonic derivation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Derive child mnemonics from the device's master seed using BIP-85: m/83696968'/39'/0'/word_count'/index' - Supports 12, 18, and 24-word derived mnemonics - HMAC-SHA512 key derivation with BIP-39 entropy conversion - On-device confirmation before revealing derived mnemonic - Message types: GetBip85Mnemonic (120), Bip85Mnemonic (121) - device-protocol submodule → fork/develop (all v7.14.0 protos) --- deps/device-protocol | 2 +- include/keepkey/firmware/bip85.h | 22 +++++ include/keepkey/firmware/fsm.h | 3 + include/keepkey/transport/messages.options | 2 + lib/firmware/CMakeLists.txt | 1 + lib/firmware/bip85.c | 93 ++++++++++++++++++++++ lib/firmware/fsm.c | 2 + lib/firmware/fsm_msg_bip85.h | 48 +++++++++++ lib/firmware/messagemap.def | 4 + 9 files changed, 176 insertions(+), 1 deletion(-) create mode 100644 include/keepkey/firmware/bip85.h create mode 100644 lib/firmware/bip85.c create mode 100644 lib/firmware/fsm_msg_bip85.h diff --git a/deps/device-protocol b/deps/device-protocol index 323802f17..17b38803e 160000 --- a/deps/device-protocol +++ b/deps/device-protocol @@ -1 +1 @@ -Subproject commit 323802f17dd44165a5100357df771348c8b49672 +Subproject commit 17b38803ee186b4411cc0219a20a1bc99aee9ea4 diff --git a/include/keepkey/firmware/bip85.h b/include/keepkey/firmware/bip85.h new file mode 100644 index 000000000..ae3bfc5a0 --- /dev/null +++ b/include/keepkey/firmware/bip85.h @@ -0,0 +1,22 @@ +#ifndef BIP85_H +#define BIP85_H + +#include +#include +#include + +/** + * Derive a child BIP-39 mnemonic via BIP-85. + * + * Path: m/83696968'/39'/0'/'/' + * + * @param word_count Number of words: 12, 18, or 24. + * @param index Child index (0-based). + * @param mnemonic Output buffer (must be at least 241 bytes). + * @param mnemonic_len Size of the output buffer. + * @return true on success, false on error. + */ +bool bip85_derive_mnemonic(uint32_t word_count, uint32_t index, + char *mnemonic, size_t mnemonic_len); + +#endif diff --git a/include/keepkey/firmware/fsm.h b/include/keepkey/firmware/fsm.h index 19e911106..1ed346358 100644 --- a/include/keepkey/firmware/fsm.h +++ b/include/keepkey/firmware/fsm.h @@ -118,6 +118,9 @@ void fsm_msgMayachainGetAddress(const MayachainGetAddress *msg); void fsm_msgMayachainSignTx(const MayachainSignTx *msg); void fsm_msgMayachainMsgAck(const MayachainMsgAck *msg); +// BIP-85 +void fsm_msgGetBip85Mnemonic(const GetBip85Mnemonic *msg); + #if DEBUG_LINK // void fsm_msgDebugLinkDecision(DebugLinkDecision *msg); void fsm_msgDebugLinkGetState(DebugLinkGetState *msg); diff --git a/include/keepkey/transport/messages.options b/include/keepkey/transport/messages.options index 41e0c377c..ad08bd6ba 100644 --- a/include/keepkey/transport/messages.options +++ b/include/keepkey/transport/messages.options @@ -131,3 +131,5 @@ FlashHash.challenge max_size:32 FlashWrite.data max_size:1024 FlashHashResponse.data max_size:32 + +Bip85Mnemonic.mnemonic max_size:241 diff --git a/lib/firmware/CMakeLists.txt b/lib/firmware/CMakeLists.txt index 1afc9f428..a5c1234d8 100644 --- a/lib/firmware/CMakeLists.txt +++ b/lib/firmware/CMakeLists.txt @@ -1,6 +1,7 @@ set(base_sources app_confirm.c app_layout.c + bip85.c coins.c crypto.c fsm.c diff --git a/lib/firmware/bip85.c b/lib/firmware/bip85.c new file mode 100644 index 000000000..0c02d626f --- /dev/null +++ b/lib/firmware/bip85.c @@ -0,0 +1,93 @@ +#include "keepkey/firmware/bip85.h" +#include "keepkey/firmware/storage.h" +#include "trezor/crypto/bip32.h" +#include "trezor/crypto/bip39.h" +#include "trezor/crypto/curves.h" +#include "trezor/crypto/hmac.h" +#include "trezor/crypto/memzero.h" + +#include + +/* + * BIP-85: Deterministic Entropy From BIP32 Keychains + * + * For BIP-39 mnemonic derivation: + * path = m / 83696968' / 39' / 0' / ' / ' + * k = derived_node.private_key (32 bytes) + * hmac = HMAC-SHA512(key="bip-entropy-from-k", msg=k) + * entropy = hmac[0 : entropy_bytes] + * 12 words -> 16 bytes, 18 words -> 24 bytes, 24 words -> 32 bytes + * mnemonic = bip39_from_entropy(entropy) + */ + +/* BIP-85 application number for deriving entropy from a key */ +static const uint8_t BIP85_HMAC_KEY[] = "bip-entropy-from-k"; +#define BIP85_HMAC_KEY_LEN 18 + +bool bip85_derive_mnemonic(uint32_t word_count, uint32_t index, + char *mnemonic, size_t mnemonic_len) { + /* Validate word count and compute entropy length */ + int entropy_bytes; + switch (word_count) { + case 12: entropy_bytes = 16; break; + case 18: entropy_bytes = 24; break; + case 24: entropy_bytes = 32; break; + default: return false; + } + + /* BIP-85 derivation path: m/83696968'/39'/0'/'/' */ + uint32_t address_n[5]; + address_n[0] = 0x80000000 | 83696968; /* purpose (hardened) */ + address_n[1] = 0x80000000 | 39; /* BIP-39 app (hardened) */ + address_n[2] = 0x80000000 | 0; /* English language (hardened) */ + address_n[3] = 0x80000000 | word_count; /* word count (hardened) */ + address_n[4] = 0x80000000 | index; /* child index (hardened) */ + + /* Get the master node from storage (respects passphrase) */ + static CONFIDENTIAL HDNode node; + if (!storage_getRootNode(SECP256K1_NAME, true, &node)) { + memzero(&node, sizeof(node)); + return false; + } + + /* Derive to the BIP-85 path */ + for (int i = 0; i < 5; i++) { + if (hdnode_private_ckd(&node, address_n[i]) == 0) { + memzero(&node, sizeof(node)); + return false; + } + } + + /* HMAC-SHA512(key="bip-entropy-from-k", msg=private_key) */ + static CONFIDENTIAL uint8_t hmac_out[64]; + hmac_sha512(BIP85_HMAC_KEY, BIP85_HMAC_KEY_LEN, + node.private_key, 32, hmac_out); + + /* We no longer need the derived node */ + memzero(&node, sizeof(node)); + + /* Truncate HMAC output to the required entropy length */ + static CONFIDENTIAL uint8_t entropy[32]; + memcpy(entropy, hmac_out, entropy_bytes); + memzero(hmac_out, sizeof(hmac_out)); + + /* Convert entropy to BIP-39 mnemonic */ + const char *words = mnemonic_from_data(entropy, entropy_bytes); + memzero(entropy, sizeof(entropy)); + + if (!words) { + return false; + } + + /* Copy to output buffer */ + size_t words_len = strlen(words); + if (words_len >= mnemonic_len) { + mnemonic_clear(); + return false; + } + + memcpy(mnemonic, words, words_len + 1); + mnemonic_clear(); + + return true; +} diff --git a/lib/firmware/fsm.c b/lib/firmware/fsm.c index 634a60562..2fa76ee45 100644 --- a/lib/firmware/fsm.c +++ b/lib/firmware/fsm.c @@ -34,6 +34,7 @@ #include "keepkey/board/variant.h" #include "keepkey/firmware/app_confirm.h" #include "keepkey/firmware/app_layout.h" +#include "keepkey/firmware/bip85.h" #if !BITCOIN_ONLY #include "keepkey/firmware/authenticator.h" #endif @@ -304,3 +305,4 @@ void fsm_msgClearSession(ClearSession *msg) { #include "fsm_msg_thorchain.h" #include "fsm_msg_mayachain.h" #endif +#include "fsm_msg_bip85.h" diff --git a/lib/firmware/fsm_msg_bip85.h b/lib/firmware/fsm_msg_bip85.h new file mode 100644 index 000000000..6308144dd --- /dev/null +++ b/lib/firmware/fsm_msg_bip85.h @@ -0,0 +1,48 @@ +void fsm_msgGetBip85Mnemonic(const GetBip85Mnemonic *msg) { + CHECK_INITIALIZED + + /* Validate word count */ + if (msg->word_count != 12 && msg->word_count != 18 && msg->word_count != 24) { + fsm_sendFailure(FailureType_Failure_SyntaxError, + "word_count must be 12, 18, or 24"); + layoutHome(); + return; + } + + CHECK_PIN + + /* User confirmation on device display */ + char desc[80]; + snprintf(desc, sizeof(desc), + "Derive %lu-word child seed at index %lu?", + (unsigned long)msg->word_count, (unsigned long)msg->index); + + if (!confirm(ButtonRequestType_ButtonRequest_Other, + "BIP-85 Derive Seed", "%s", desc)) { + fsm_sendFailure(FailureType_Failure_ActionCancelled, + "BIP-85 derivation cancelled"); + layoutHome(); + return; + } + + layout_simple_message("Deriving child seed..."); + + /* Derive the mnemonic */ + static CONFIDENTIAL char mnemonic_buf[241]; + if (!bip85_derive_mnemonic(msg->word_count, msg->index, + mnemonic_buf, sizeof(mnemonic_buf))) { + memzero(mnemonic_buf, sizeof(mnemonic_buf)); + fsm_sendFailure(FailureType_Failure_Other, + "BIP-85 derivation failed"); + layoutHome(); + return; + } + + /* Send response */ + RESP_INIT(Bip85Mnemonic); + strlcpy(resp->mnemonic, mnemonic_buf, sizeof(resp->mnemonic)); + memzero(mnemonic_buf, sizeof(mnemonic_buf)); + + msg_write(MessageType_MessageType_Bip85Mnemonic, resp); + layoutHome(); +} diff --git a/lib/firmware/messagemap.def b/lib/firmware/messagemap.def index c68445e17..73db1e4d4 100644 --- a/lib/firmware/messagemap.def +++ b/lib/firmware/messagemap.def @@ -65,6 +65,8 @@ MSG_IN(MessageType_MessageType_MayachainMsgAck, MayachainMsgAck, fsm_msgMayachainMsgAck) #endif + MSG_IN(MessageType_MessageType_GetBip85Mnemonic, GetBip85Mnemonic, fsm_msgGetBip85Mnemonic) + /* Normal Out Messages */ MSG_OUT(MessageType_MessageType_Success, Success, NO_PROCESS_FUNC) MSG_OUT(MessageType_MessageType_Failure, Failure, NO_PROCESS_FUNC) @@ -117,6 +119,8 @@ MSG_OUT(MessageType_MessageType_MayachainSignedTx, MayachainSignedTx, NO_PROCESS_FUNC) #endif + MSG_OUT(MessageType_MessageType_Bip85Mnemonic, Bip85Mnemonic, NO_PROCESS_FUNC) + #if DEBUG_LINK /* Debug Messages */ DEBUG_IN(MessageType_MessageType_DebugLinkDecision, DebugLinkDecision, NO_PROCESS_FUNC)