diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fab9794..bcbff72 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,6 +33,8 @@ jobs: run: pip install -U platformio - name: Build firmware run: pio run + - name: Build OLED expression demo + run: pio run -e expression-demo - name: Host Unity tests run: pio test -e native @@ -43,6 +45,10 @@ jobs: - uses: actions/setup-node@v4 with: node-version: 20 + - name: Check OLED expression assets + run: | + node scripts/expressions/generate.js --check + node scripts/expressions/test-assets.js - name: Cursor package tests run: npm test --prefix packages/tiny-engineer-cursor - name: Antigravity package tests diff --git a/docs/testing.md b/docs/testing.md index ca5a958..1f1ed0a 100644 --- a/docs/testing.md +++ b/docs/testing.md @@ -1,6 +1,6 @@ # Tests -Host checks. Neither flashes the board. GitHub Actions on `main` and PRs runs these same commands. On-device hardware: [hardware/testing.md](hardware/testing.md). +Host checks. These commands do not flash the board. GitHub Actions on `main` and PRs runs these same commands. On-device hardware: [hardware/testing.md](hardware/testing.md). ## Firmware @@ -12,6 +12,19 @@ pio test -e native `pio run` builds firmware. Native tests are **`pio test -e native`**, not `pio run -e native`. +## OLED expressions + +The optional [expression library](../lib/TinyEngineerExpressions/README.md) has deterministic asset checks and native renderer tests. These checks require Node 18+ and PlatformIO; they do not access hardware. + +```bash +node scripts/expressions/generate.js --check +node scripts/expressions/test-assets.js +pio test -e native +pio run -e expression-demo +``` + +The `expression-demo` environment builds a separate OLED-only application without changing the default robot build. For a later bench test, follow its [wiring and upload notes](../lib/TinyEngineerExpressions/README.md#standalone-oled-demo), leave the separate servo supply off, and observe all 16 faces through a complete 48-second cycle. Report physical display results separately from host tests and compilation. + ## Packages Node 18+. No robot. diff --git a/examples/expression-demo/main.cpp b/examples/expression-demo/main.cpp new file mode 100644 index 0000000..c9de226 --- /dev/null +++ b/examples/expression-demo/main.cpp @@ -0,0 +1,75 @@ +#include +#include +#include +#include +#include + +// Adafruit rotations: 0 = normal, 2 = 180 degrees. Match your mounting. +#ifndef EXPRESSION_DEMO_ROTATION +#define EXPRESSION_DEMO_ROTATION 0 +#endif + +namespace { +namespace expressions = tiny_engineer::expressions; + +constexpr uint8_t kRotation = EXPRESSION_DEMO_ROTATION; +static_assert(kRotation == 0 || kRotation == 2, + "The 128 x 32 demo supports rotation 0 or 2"); +constexpr uint8_t kOledAddress = 0x3C; +constexpr int kSda = 0; +constexpr int kScl = 1; + +Adafruit_SSD1306 display(expressions::kWidth, expressions::kHeight, &Wire, -1); +uint8_t frame[expressions::kFrameBytes]; +uint8_t expressionIndex = 0; +uint32_t expressionStarted = 0; +uint32_t lastRendered = 0; +bool displayReady = false; +} + +void setup() { + // This example does not initialize a servo controller. Keep the separate + // servo V+ supply off when testing an OLED on an assembled robot. + Serial.begin(115200); + Wire.begin(kSda, kScl); + Wire.beginTransmission(kOledAddress); + if (Wire.endTransmission() != 0) { + Serial.println("No OLED response at I2C address 0x3C"); + return; + } + displayReady = display.begin(SSD1306_SWITCHCAPVCC, kOledAddress, true, false); + if (!displayReady) { + Serial.println("OLED initialization failed"); + return; + } + display.setRotation(kRotation); + expressionStarted = millis(); + lastRendered = expressionStarted - expressions::kFrameDurationMs; + Serial.println("Expression: idle"); +} + +void loop() { + if (!displayReady) return; + + const uint32_t now = millis(); + if (uint32_t(now - lastRendered) < expressions::kFrameDurationMs) return; + lastRendered = now; + + uint32_t elapsed = now - expressionStarted; + if (elapsed >= expressions::kLoopDurationMs) { + const uint32_t skipped = elapsed / expressions::kLoopDurationMs; + expressionIndex = (expressionIndex + skipped) % expressions::kExpressionCount; + elapsed %= expressions::kLoopDurationMs; + expressionStarted = now - elapsed; + Serial.print("Expression: "); + Serial.println(expressions::name(static_cast(expressionIndex))); + } + + const auto expression = static_cast(expressionIndex); + if (expressions::render(expression, elapsed, frame, sizeof(frame))) { + display.clearDisplay(); + display.drawBitmap(0, 0, frame, expressions::kWidth, + expressions::kHeight, SSD1306_WHITE); + display.display(); + } +} diff --git a/lib/TinyEngineerExpressions/README.md b/lib/TinyEngineerExpressions/README.md new file mode 100644 index 0000000..1db0ac0 --- /dev/null +++ b/lib/TinyEngineerExpressions/README.md @@ -0,0 +1,98 @@ +# Tiny Engineer Expressions + +Sixteen animated, kaomoji-inspired faces for a **128 × 32 monochrome OLED**. The C++ library renders a frame into caller-owned memory; the application decides when and where to show it. + +This is an optional display library. It does not replace Tiny Engineer's existing eye modes or map expressions to HTTP commands, AI events, or robot poses. It does not access I²C, initialize a display, change its rotation, or issue servo commands. + +## Faces + +The display numbers below are one-based; the enum values are zero-based and follow this order. + +| No. | `Expression` | Face | +| --- | --- | --- | +| 1 | `Idle` | Relaxed idle | +| 2 | `Happy` | Happy | +| 3 | `Laugh` | Laughing | +| 4 | `Wink` | Wink | +| 5 | `Curious` | Curious | +| 6 | `Thinking` | Thinking | +| 7 | `Surprise` | Surprised | +| 8 | `Smug` | Smug | +| 9 | `Sleepy` | Sleepy | +| 10 | `Sleep` | Sleeping | +| 11 | `Sad` | Sad | +| 12 | `Cry` | Crying | +| 13 | `Angry` | Angry | +| 14 | `Panic` | Panicked | +| 15 | `Shy` | Shy | +| 16 | `Love` | Heart eyes | + +Each face has 30 frames, spaced 100 ms apart, for a repeating 3-second animation. Faces are original pixel drawings made from geometric primitives, with no external font or image dependency. Source and generated assets use the repository's [MIT license](../../LICENSE). + +## Use from C++ + +```cpp +#include + +namespace faces = tiny_engineer::expressions; +uint8_t frame[faces::kFrameBytes]; // 512 bytes, owned by the caller + +bool ready = faces::render(faces::Expression::Happy, elapsedMs, + frame, sizeof(frame)); +``` + +`render()` uses `elapsedMs` since the expression was selected. Start at zero for the first frame; elapsed time wraps within the animation every `kLoopDurationMs` (3000 ms). The function has no clock or playback state and does not delay. The caller controls updates, expression selection, and stopping. For Arduino, unsigned `millis() - startedAt` subtraction handles a timer rollover; reset or advance the start timestamp during long-running playback, as the example does. + +`render()` returns `false` for an invalid expression, a null buffer, or a buffer smaller than `kFrameBytes`, leaving the supplied buffer unchanged. `name()` returns a stable lowercase identifier for a valid expression and `nullptr` for an invalid one. There is no dynamic allocation in the renderer. + +The result is **row-major, MSB-first**, 16 bytes per row: pixel `(0, 0)` is bit 7 of byte 0. It is compatible with Adafruit GFX `drawBitmap()`. It is **not** the vertical-page layout returned by SSD1306 `getBuffer()`; do not copy it directly there. + +For an already initialized Adafruit display: + +```cpp +if (faces::render(selectedExpression, elapsedMs, frame, sizeof(frame))) { + display.clearDisplay(); + display.drawBitmap(0, 0, frame, faces::kWidth, faces::kHeight, + SSD1306_WHITE); + display.display(); +} +``` + +The application still owns display initialization, clearing, brightness, orientation, and sleep behavior. When integrating into the robot firmware, use the existing display owner and saved rotation setting. Avoid two renderers updating the same display concurrently. Selecting this library must be an explicit application decision, so the existing eye-mode and motion behavior can remain the default. + +## Standalone OLED demo + +[`examples/expression-demo/main.cpp`](../../examples/expression-demo/main.cpp) cycles through all 16 faces, showing each for three seconds. It schedules frames without `delay()` and uses a static 512-byte decode buffer. Adafruit SSD1306 additionally owns its normal display framebuffer. + +The example targets the Waveshare ESP32-C3-Zero with SDA = GPIO 0, SCL = GPIO 1, and OLED address `0x3C`. Rotation defaults to 0; add `-D EXPRESSION_DEMO_ROTATION=2` to the example environment's `build_flags` for a display mounted upside down. This affects only the example, not the robot's saved settings. + +Build only: + +```bash +pio run -e expression-demo +``` + +For an intentional bench test, keep the **separate servo V+ rail switched off**, connect the OLED and ESP32 via their normal logic wiring, and power the ESP32 through USB. This example does not send PCA9685 commands, so it does not disable outputs that a powered controller might retain. Uploading the demo replaces the application currently on the ESP32; retain your previous firmware if you want to restore it. + +```bash +pio run -e expression-demo -t upload +pio device monitor -e expression-demo +``` + +Observe all 16 expressions, a complete 48-second cycle, the screen orientation, and smooth frame updates. Hardware behavior must be checked on the target display before calling the library bench-tested. + +## Assets and checks + +The deterministic generator packs the pixels, deduplicates identical frames, and applies lossless byte-run encoding. The 480 frame references share 87 unique frames; the encoded payload and lookup tables occupy about 18.2 KiB. Decoding requires the caller's 512-byte output buffer rather than a table of uncompressed animation frames. + +From the repository root: + +```bash +node scripts/expressions/generate.js --check +node scripts/expressions/test-assets.js +pio test -e native +pio run +pio run -e expression-demo +``` + +After editing the drawing source, regenerate assets with `node scripts/expressions/generate.js` and review the resulting pixel changes. The checks cover generated-file consistency, frame data, and the C++ renderer. Compilation and host checks do not establish I²C reliability, OLED orientation, or on-device animation quality; record those results separately in a PR. diff --git a/lib/TinyEngineerExpressions/library.json b/lib/TinyEngineerExpressions/library.json new file mode 100644 index 0000000..55a4b5a --- /dev/null +++ b/lib/TinyEngineerExpressions/library.json @@ -0,0 +1,9 @@ +{ + "name": "TinyEngineerExpressions", + "version": "0.1.0", + "description": "Portable 128x32 monochrome robot expression frames with caller-owned animation timing.", + "keywords": ["oled", "expressions", "animation", "robot"], + "license": "MIT", + "frameworks": "*", + "platforms": "*" +} diff --git a/lib/TinyEngineerExpressions/src/TinyEngineerExpressions.cpp b/lib/TinyEngineerExpressions/src/TinyEngineerExpressions.cpp new file mode 100644 index 0000000..fce7e7b --- /dev/null +++ b/lib/TinyEngineerExpressions/src/TinyEngineerExpressions.cpp @@ -0,0 +1,76 @@ +#include "TinyEngineerExpressions.h" +#include "expression_assets.h" + +#include + +namespace tiny_engineer { +namespace expressions { + +namespace { + +uint8_t readByte(const uint8_t* address) { +#if defined(ARDUINO) + return pgm_read_byte(address); +#else + return *address; +#endif +} + +uint16_t readWord(const uint16_t* address) { +#if defined(ARDUINO) + return pgm_read_word(address); +#else + return *address; +#endif +} + +const char* const kNames[kExpressionCount] = { + "idle", "happy", "laugh", "wink", "curious", "thinking", "surprise", "smug", + "sleepy", "sleep", "sad", "cry", "angry", "panic", "shy", "love"}; + +} // namespace + +const char* name(Expression expression) { + const auto index = static_cast(expression); + return index < kExpressionCount ? kNames[index] : nullptr; +} + +bool render(Expression expression, uint32_t elapsedMs, + uint8_t* output, std::size_t outputSize) { + const auto index = static_cast(expression); + if (index >= kExpressionCount || output == nullptr || outputSize < kFrameBytes) { + return false; + } + + const auto frame = (elapsedMs % kLoopDurationMs) / kFrameDurationMs; + const auto uniqueFrame = readByte(&detail::kFrameIndices[index][frame]); + if (uniqueFrame >= detail::kUniqueFrameCount) return false; + + const std::size_t begin = readWord(&detail::kFrameOffsets[uniqueFrame]); + const std::size_t end = readWord(&detail::kFrameOffsets[uniqueFrame + 1]); + if (begin > end || end > detail::kRleDataSize || (end - begin) % 2 != 0) { + return false; + } + + // Validate the complete frame before writing, so even corrupt assets leave + // the caller's buffer unchanged. Every pair is an unsigned (count, value). + std::size_t decodedSize = 0; + for (std::size_t cursor = begin; cursor < end; cursor += 2) { + const auto count = readByte(&detail::kRleData[cursor]); + if (count == 0 || count > kFrameBytes - decodedSize) return false; + decodedSize += count; + } + if (decodedSize != kFrameBytes) return false; + + std::size_t written = 0; + for (std::size_t cursor = begin; cursor < end; cursor += 2) { + const auto count = readByte(&detail::kRleData[cursor]); + const auto value = readByte(&detail::kRleData[cursor + 1]); + std::memset(output + written, value, count); + written += count; + } + return true; +} + +} // namespace expressions +} // namespace tiny_engineer diff --git a/lib/TinyEngineerExpressions/src/TinyEngineerExpressions.h b/lib/TinyEngineerExpressions/src/TinyEngineerExpressions.h new file mode 100644 index 0000000..aaa9696 --- /dev/null +++ b/lib/TinyEngineerExpressions/src/TinyEngineerExpressions.h @@ -0,0 +1,66 @@ +#pragma once + +#include +#include + +#if defined(ARDUINO) +#if defined(__AVR__) +#include +#else +#include +#endif +#endif + +#ifndef TE_EXPR_PROGMEM +#if defined(ARDUINO) +#define TE_EXPR_PROGMEM PROGMEM +#else +#define TE_EXPR_PROGMEM +#endif +#endif + +namespace tiny_engineer { +namespace expressions { + +enum class Expression : uint8_t { + Idle, + Happy, + Laugh, + Wink, + Curious, + Thinking, + Surprise, + Smug, + Sleepy, + Sleep, + Sad, + Cry, + Angry, + Panic, + Shy, + Love +}; + +constexpr std::size_t kExpressionCount = 16; +constexpr std::size_t kWidth = 128; +constexpr std::size_t kHeight = 32; +constexpr std::size_t kFrameBytes = 512; +constexpr std::size_t kFramesPerExpression = 30; +constexpr uint32_t kFrameDurationMs = 100; +constexpr uint32_t kLoopDurationMs = 3000; + +// Stable lowercase identifiers for the 16 selectable expressions; invalid +// enum values return nullptr. +const char* name(Expression expression); + +// Render the frame at elapsedMs since the caller selected this expression. +// The caller owns timing, selection, and display output. Animation loops every +// kLoopDurationMs; this function never reads a clock or accesses a display. +// Output is 128x32, row-major, MSB first, compatible with drawBitmap(). +// Invalid arguments or malformed assets return false without changing output. +// A valid call writes exactly kFrameBytes and leaves any remaining bytes intact. +bool render(Expression expression, uint32_t elapsedMs, + uint8_t* output, std::size_t outputSize); + +} // namespace expressions +} // namespace tiny_engineer diff --git a/lib/TinyEngineerExpressions/src/expression_assets.h b/lib/TinyEngineerExpressions/src/expression_assets.h new file mode 100644 index 0000000..9c8d114 --- /dev/null +++ b/lib/TinyEngineerExpressions/src/expression_assets.h @@ -0,0 +1,787 @@ +// SPDX-License-Identifier: MIT +// Generated by scripts/expressions/generate.js. Do not edit by hand. +#pragma once +#include "TinyEngineerExpressions.h" +namespace tiny_engineer { namespace expressions { namespace detail { +constexpr std::size_t kUniqueFrameCount = 87; +constexpr std::size_t kRleDataSize = 17968; +const uint8_t kRleData[kRleDataSize] TE_EXPR_PROGMEM = { + 0x53, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x06, 0x00, 0x01, 0xff, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, + 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x7f, + 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, + 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, + 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, + 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, + 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, + 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, + 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, + 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x0f, + 0x01, 0xff, 0x06, 0x00, 0x01, 0xff, 0x01, 0xf0, 0x1a, 0x00, 0x01, 0x10, 0x01, 0x04, 0x0e, 0x00, 0x02, 0x08, 0x0e, 0x00, 0x01, 0x06, 0x01, 0x30, + 0x0e, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x67, 0x00, 0x53, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0x7f, 0x01, 0xf8, 0x06, 0x00, + 0x01, 0x1f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, + 0x01, 0x01, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x03, 0x02, 0xff, 0x06, 0x00, 0x01, 0x3f, + 0x01, 0xff, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x03, 0x02, 0xff, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x03, 0x02, 0xff, + 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x03, 0x02, 0xff, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xf0, 0x04, 0x00, + 0x01, 0x03, 0x02, 0xff, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x03, 0x02, 0xff, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, + 0x01, 0xf0, 0x04, 0x00, 0x01, 0x03, 0x02, 0xff, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x03, 0x02, 0xff, 0x06, 0x00, + 0x01, 0x3f, 0x01, 0xff, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x03, 0x02, 0xff, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x03, + 0x02, 0xff, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xff, + 0x01, 0xe0, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0x7f, 0x01, 0xf8, + 0x1a, 0x00, 0x01, 0x10, 0x01, 0x04, 0x0e, 0x00, 0x02, 0x08, 0x0e, 0x00, 0x01, 0x06, 0x01, 0x30, 0x0e, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x67, 0x00, + 0x53, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xc0, 0x05, 0x00, 0x01, 0x3f, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf0, 0x05, 0x00, + 0x02, 0xff, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf0, 0x05, 0x00, 0x02, 0xff, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00, + 0x01, 0x01, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x01, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, + 0x01, 0x1f, 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x01, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00, + 0x01, 0x01, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x01, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, + 0x01, 0x1f, 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x01, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00, + 0x01, 0x01, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x01, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, + 0x01, 0x1f, 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x01, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00, + 0x01, 0x01, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf0, 0x05, 0x00, 0x02, 0xff, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, + 0x01, 0xf0, 0x05, 0x00, 0x02, 0xff, 0x06, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xc0, 0x05, 0x00, 0x01, 0x3f, 0x01, 0xfc, 0x1a, 0x00, 0x01, 0x10, + 0x01, 0x04, 0x0e, 0x00, 0x02, 0x08, 0x0e, 0x00, 0x01, 0x06, 0x01, 0x30, 0x0e, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x67, 0x00, 0x93, 0x00, 0x01, 0x08, + 0x01, 0x01, 0x06, 0x00, 0x01, 0x80, 0x01, 0x10, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, + 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, + 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, + 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, + 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x08, 0x01, 0x01, 0x06, 0x00, 0x01, 0x80, 0x01, 0x10, 0x5a, 0x00, 0x01, 0x10, + 0x01, 0x04, 0x0e, 0x00, 0x02, 0x08, 0x0e, 0x00, 0x01, 0x06, 0x01, 0x30, 0x0e, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x67, 0x00, 0xa3, 0x00, 0x01, 0x10, + 0x01, 0x00, 0x01, 0x80, 0x04, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x08, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, + 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, + 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, + 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x10, 0x01, 0x00, 0x01, 0x80, 0x04, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x08, 0x6a, 0x00, 0x01, 0x10, + 0x01, 0x04, 0x0e, 0x00, 0x02, 0x08, 0x0e, 0x00, 0x01, 0x06, 0x01, 0x30, 0x0e, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x67, 0x00, 0x63, 0x00, 0x01, 0x0f, + 0x01, 0xff, 0x06, 0x00, 0x01, 0xff, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, + 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, + 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, + 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, + 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, + 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, + 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, + 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, + 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x06, 0x00, 0x01, 0xff, 0x01, 0xf0, 0x2a, 0x00, 0x01, 0x10, + 0x01, 0x04, 0x0e, 0x00, 0x02, 0x08, 0x0e, 0x00, 0x01, 0x06, 0x01, 0x30, 0x0e, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x67, 0x00, 0x53, 0x00, 0x01, 0x1f, + 0x01, 0xfe, 0x05, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xe0, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, + 0x01, 0xf8, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x02, 0xff, 0x01, 0xc0, + 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x02, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, + 0x02, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x02, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, + 0x01, 0xfc, 0x06, 0x00, 0x02, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x02, 0xff, 0x01, 0xc0, 0x04, 0x00, + 0x01, 0x0f, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x02, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x02, 0xff, + 0x01, 0xc0, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x02, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xfc, + 0x06, 0x00, 0x02, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, + 0x01, 0x07, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, + 0x01, 0x1f, 0x01, 0xfe, 0x05, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xe0, 0x1a, 0x00, 0x01, 0x10, 0x01, 0x04, 0x0e, 0x00, 0x02, 0x08, 0x0e, 0x00, + 0x01, 0x06, 0x01, 0x30, 0x0e, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x67, 0x00, 0x53, 0x00, 0x01, 0x3f, 0x01, 0xfc, 0x05, 0x00, 0x01, 0x03, 0x01, 0xff, + 0x01, 0xc0, 0x06, 0x00, 0x02, 0xff, 0x05, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf0, 0x06, 0x00, 0x02, 0xff, 0x05, 0x00, 0x01, 0x0f, 0x01, 0xff, + 0x01, 0xf0, 0x05, 0x00, 0x01, 0x01, 0x02, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xf8, 0x05, 0x00, 0x01, 0x01, 0x02, 0xff, + 0x01, 0x80, 0x04, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xf8, 0x05, 0x00, 0x01, 0x01, 0x02, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x1f, 0x01, 0xff, + 0x01, 0xf8, 0x05, 0x00, 0x01, 0x01, 0x02, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xf8, 0x05, 0x00, 0x01, 0x01, 0x02, 0xff, + 0x01, 0x80, 0x04, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xf8, 0x05, 0x00, 0x01, 0x01, 0x02, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x1f, 0x01, 0xff, + 0x01, 0xf8, 0x05, 0x00, 0x01, 0x01, 0x02, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xf8, 0x05, 0x00, 0x01, 0x01, 0x02, 0xff, + 0x01, 0x80, 0x04, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xf8, 0x05, 0x00, 0x01, 0x01, 0x02, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x1f, 0x01, 0xff, + 0x01, 0xf8, 0x05, 0x00, 0x01, 0x01, 0x02, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x02, 0xff, 0x05, 0x00, + 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf0, 0x06, 0x00, 0x02, 0xff, 0x05, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xfc, + 0x05, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xc0, 0x1a, 0x00, 0x01, 0x10, 0x01, 0x04, 0x0e, 0x00, 0x02, 0x08, 0x0e, 0x00, 0x01, 0x06, 0x01, 0x30, + 0x0e, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x67, 0x00, 0x84, 0x00, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xc0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xff, + 0x06, 0x00, 0x01, 0x3f, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x07, 0x01, 0x87, 0x01, 0x80, 0x05, 0x00, 0x02, 0x78, 0x06, 0x00, 0x01, 0x0f, 0x01, 0x01, + 0x01, 0xc0, 0x05, 0x00, 0x01, 0xf0, 0x01, 0x1c, 0x06, 0x00, 0x01, 0x1c, 0x01, 0x00, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x01, 0x01, 0xc0, 0x01, 0x0e, + 0x06, 0x00, 0x01, 0x38, 0x01, 0x00, 0x01, 0x70, 0x04, 0x00, 0x01, 0x03, 0x01, 0x80, 0x01, 0x07, 0x06, 0x00, 0x01, 0x30, 0x01, 0x00, 0x01, 0x30, + 0x04, 0x00, 0x01, 0x03, 0x01, 0x00, 0x01, 0x03, 0x06, 0x00, 0x01, 0x70, 0x01, 0x00, 0x01, 0x38, 0x04, 0x00, 0x01, 0x07, 0x01, 0x00, 0x01, 0x03, + 0x01, 0x80, 0x05, 0x00, 0x01, 0x60, 0x01, 0x00, 0x01, 0x18, 0x04, 0x00, 0x01, 0x06, 0x01, 0x00, 0x01, 0x01, 0x01, 0x80, 0x69, 0x00, 0x01, 0x20, + 0x01, 0x02, 0x0e, 0x00, 0x01, 0x10, 0x01, 0x84, 0x0e, 0x00, 0x01, 0x10, 0x01, 0xc4, 0x0e, 0x00, 0x01, 0x0f, 0x01, 0x78, 0x57, 0x00, 0x74, 0x00, + 0x01, 0xfc, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xc0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xff, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x07, + 0x01, 0x87, 0x01, 0x80, 0x05, 0x00, 0x02, 0x78, 0x06, 0x00, 0x01, 0x0f, 0x01, 0x01, 0x01, 0xc0, 0x05, 0x00, 0x01, 0xf0, 0x01, 0x1c, 0x06, 0x00, + 0x01, 0x1c, 0x01, 0x00, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x01, 0x01, 0xc0, 0x01, 0x0e, 0x06, 0x00, 0x01, 0x38, 0x01, 0x00, 0x01, 0x70, 0x04, 0x00, + 0x01, 0x03, 0x01, 0x80, 0x01, 0x07, 0x06, 0x00, 0x01, 0x30, 0x01, 0x00, 0x01, 0x30, 0x04, 0x00, 0x01, 0x03, 0x01, 0x00, 0x01, 0x03, 0x06, 0x00, + 0x01, 0x70, 0x01, 0x00, 0x01, 0x38, 0x04, 0x00, 0x01, 0x07, 0x01, 0x00, 0x01, 0x03, 0x01, 0x80, 0x05, 0x00, 0x01, 0x60, 0x01, 0x00, 0x01, 0x18, + 0x04, 0x00, 0x01, 0x06, 0x01, 0x00, 0x01, 0x01, 0x01, 0x80, 0x79, 0x00, 0x01, 0x20, 0x01, 0x02, 0x0e, 0x00, 0x01, 0x10, 0x01, 0x84, 0x0e, 0x00, + 0x01, 0x10, 0x01, 0xc4, 0x0e, 0x00, 0x01, 0x0f, 0x01, 0x78, 0x57, 0x00, 0x64, 0x00, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xc0, 0x06, 0x00, + 0x01, 0x03, 0x01, 0xff, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x07, 0x01, 0x87, 0x01, 0x80, 0x05, 0x00, 0x02, 0x78, 0x06, 0x00, + 0x01, 0x0f, 0x01, 0x01, 0x01, 0xc0, 0x05, 0x00, 0x01, 0xf0, 0x01, 0x1c, 0x06, 0x00, 0x01, 0x1c, 0x01, 0x00, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x01, + 0x01, 0xc0, 0x01, 0x0e, 0x06, 0x00, 0x01, 0x38, 0x01, 0x00, 0x01, 0x70, 0x04, 0x00, 0x01, 0x03, 0x01, 0x80, 0x01, 0x07, 0x06, 0x00, 0x01, 0x30, + 0x01, 0x00, 0x01, 0x30, 0x04, 0x00, 0x01, 0x03, 0x01, 0x00, 0x01, 0x03, 0x06, 0x00, 0x01, 0x70, 0x01, 0x00, 0x01, 0x38, 0x04, 0x00, 0x01, 0x07, + 0x01, 0x00, 0x01, 0x03, 0x01, 0x80, 0x05, 0x00, 0x01, 0x60, 0x01, 0x00, 0x01, 0x18, 0x04, 0x00, 0x01, 0x06, 0x01, 0x00, 0x01, 0x01, 0x01, 0x80, + 0x89, 0x00, 0x01, 0x20, 0x01, 0x02, 0x0e, 0x00, 0x01, 0x10, 0x01, 0x84, 0x0e, 0x00, 0x01, 0x10, 0x01, 0xc4, 0x0e, 0x00, 0x01, 0x0f, 0x01, 0x78, + 0x57, 0x00, 0x63, 0x00, 0x01, 0x38, 0x08, 0x00, 0x01, 0x0e, 0x06, 0x00, 0x01, 0x3c, 0x08, 0x00, 0x01, 0x1e, 0x06, 0x00, 0x01, 0x3f, 0x08, 0x00, + 0x01, 0x7e, 0x06, 0x00, 0x01, 0x1f, 0x01, 0x80, 0x07, 0x00, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xc0, 0x06, 0x00, 0x01, 0x01, 0x01, 0xf8, + 0x06, 0x00, 0x01, 0x03, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x07, 0x01, 0xe0, 0x06, 0x00, 0x01, 0x01, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xc0, + 0x07, 0x00, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x1f, 0x01, 0x80, 0x07, 0x00, 0x01, 0x7c, 0x06, 0x00, 0x01, 0x1f, 0x08, 0x00, 0x01, 0xfc, 0x06, 0x00, + 0x01, 0x1f, 0x01, 0x80, 0x06, 0x00, 0x01, 0x03, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xe0, 0x06, 0x00, 0x01, 0x07, 0x01, 0xe0, 0x06, 0x00, + 0x01, 0x03, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xc0, 0x06, 0x00, 0x01, 0x01, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x3f, 0x08, 0x00, 0x01, 0x7e, + 0x06, 0x00, 0x01, 0x3e, 0x08, 0x00, 0x01, 0x3e, 0x06, 0x00, 0x01, 0x38, 0x08, 0x00, 0x01, 0x0e, 0x0a, 0x00, 0x01, 0x1f, 0x01, 0xfc, 0x0e, 0x00, + 0x01, 0x17, 0x01, 0xf4, 0x0e, 0x00, 0x01, 0x17, 0x01, 0xf8, 0x0e, 0x00, 0x01, 0x0f, 0x01, 0xf8, 0x0e, 0x00, 0x02, 0x08, 0x0e, 0x00, 0x01, 0x04, + 0x01, 0x10, 0x0e, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x37, 0x00, 0x63, 0x00, 0x01, 0x38, 0x08, 0x00, 0x01, 0x0e, 0x06, 0x00, 0x01, 0x3c, 0x08, 0x00, + 0x01, 0x1e, 0x06, 0x00, 0x01, 0x3f, 0x08, 0x00, 0x01, 0x7e, 0x06, 0x00, 0x01, 0x1f, 0x01, 0x80, 0x07, 0x00, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x0f, + 0x01, 0xc0, 0x06, 0x00, 0x01, 0x01, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x03, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x07, 0x01, 0xe0, 0x06, 0x00, 0x01, 0x01, + 0x01, 0xf8, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xc0, 0x07, 0x00, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x1f, 0x01, 0x80, 0x07, 0x00, 0x01, 0x7c, 0x06, 0x00, + 0x01, 0x1f, 0x08, 0x00, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x1f, 0x01, 0x80, 0x06, 0x00, 0x01, 0x03, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xe0, + 0x06, 0x00, 0x01, 0x07, 0x01, 0xe0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xc0, 0x06, 0x00, 0x01, 0x01, 0x01, 0xfc, + 0x06, 0x00, 0x01, 0x3f, 0x08, 0x00, 0x01, 0x7e, 0x06, 0x00, 0x01, 0x3e, 0x08, 0x00, 0x01, 0x3e, 0x06, 0x00, 0x01, 0x38, 0x08, 0x00, 0x01, 0x0e, + 0x0a, 0x00, 0x01, 0x10, 0x01, 0x04, 0x0e, 0x00, 0x02, 0x08, 0x0e, 0x00, 0x01, 0x06, 0x01, 0x30, 0x0e, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x67, 0x00, + 0x3e, 0x00, 0x01, 0x08, 0x0f, 0x00, 0x01, 0x08, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x09, 0x00, 0x01, 0x08, 0x04, 0x00, 0x01, 0x3f, 0x01, 0xff, + 0x01, 0xc0, 0x08, 0x00, 0x01, 0x18, 0x04, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x08, 0x00, 0x01, 0xff, 0x01, 0x80, 0x03, 0x00, 0x01, 0x7f, + 0x01, 0xff, 0x01, 0xe0, 0x06, 0x00, 0x01, 0x03, 0x01, 0x00, 0x01, 0x0c, 0x04, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x06, 0x00, 0x01, 0x0f, + 0x01, 0x00, 0x01, 0x08, 0x04, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x06, 0x00, 0x01, 0x3e, 0x01, 0x00, 0x01, 0x08, 0x04, 0x00, 0x01, 0x7f, + 0x01, 0xff, 0x01, 0xe0, 0x06, 0x00, 0x01, 0xf8, 0x01, 0x00, 0x01, 0x08, 0x04, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x05, 0x00, 0x01, 0x03, + 0x01, 0xe0, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x05, 0x00, 0x01, 0x0f, 0x01, 0x80, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, + 0x05, 0x00, 0x01, 0x1e, 0x07, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x05, 0x00, 0x01, 0x1f, 0x01, 0x80, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, + 0x01, 0xe0, 0x05, 0x00, 0x01, 0x07, 0x01, 0xe0, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x06, 0x00, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x3f, + 0x01, 0xff, 0x01, 0xc0, 0x06, 0x00, 0x01, 0x3f, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x06, 0x00, 0x01, 0x07, 0x06, 0x00, 0x01, 0x0f, + 0x01, 0xff, 0x22, 0x00, 0x01, 0x10, 0x01, 0x04, 0x0e, 0x00, 0x02, 0x08, 0x0e, 0x00, 0x01, 0x06, 0x01, 0x30, 0x0e, 0x00, 0x01, 0x03, 0x01, 0xe0, + 0x67, 0x00, 0x3e, 0x00, 0x01, 0x08, 0x0f, 0x00, 0x01, 0x08, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x06, 0x00, 0x01, 0xff, 0x01, 0xf0, 0x01, 0x00, + 0x01, 0x08, 0x04, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x00, 0x01, 0x18, 0x04, 0x00, + 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x00, 0x01, 0xff, 0x01, 0x80, 0x03, 0x00, 0x01, 0x7f, + 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x01, 0x00, 0x01, 0x0c, 0x04, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, + 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x01, 0x00, 0x01, 0x08, 0x04, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, + 0x01, 0xff, 0x01, 0xfe, 0x01, 0x00, 0x01, 0x08, 0x04, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, + 0x01, 0x00, 0x01, 0x08, 0x04, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, + 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, + 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, + 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, + 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x3f, + 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x06, 0x00, 0x01, 0xff, 0x01, 0xf0, + 0x1a, 0x00, 0x01, 0x10, 0x01, 0x04, 0x0e, 0x00, 0x02, 0x08, 0x0e, 0x00, 0x01, 0x06, 0x01, 0x30, 0x0e, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x67, 0x00, + 0x3e, 0x00, 0x01, 0x08, 0x0f, 0x00, 0x01, 0x08, 0x0f, 0x00, 0x01, 0x08, 0x0f, 0x00, 0x01, 0x18, 0x0f, 0x00, 0x01, 0xff, 0x01, 0x80, 0x0e, 0x00, + 0x01, 0x0c, 0x04, 0x00, 0x01, 0x08, 0x01, 0x01, 0x06, 0x00, 0x01, 0x80, 0x01, 0x10, 0x01, 0x00, 0x01, 0x08, 0x04, 0x00, 0x01, 0x3f, 0x01, 0xff, + 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x00, 0x01, 0x08, 0x04, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, + 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x00, 0x01, 0x08, 0x04, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, + 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, + 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, + 0x01, 0xfc, 0x06, 0x00, 0x01, 0x08, 0x01, 0x01, 0x06, 0x00, 0x01, 0x80, 0x01, 0x10, 0x5a, 0x00, 0x01, 0x10, 0x01, 0x04, 0x0e, 0x00, 0x02, 0x08, + 0x0e, 0x00, 0x01, 0x06, 0x01, 0x30, 0x0e, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x67, 0x00, 0x2e, 0x00, 0x01, 0x3c, 0x0c, 0x00, 0x01, 0x0f, 0x01, 0x80, + 0x01, 0x00, 0x01, 0x42, 0x0c, 0x00, 0x01, 0x3f, 0x01, 0xe0, 0x01, 0x00, 0x01, 0x81, 0x0c, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x01, 0x00, 0x01, 0x01, + 0x0b, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x00, 0x01, 0x01, 0x05, 0x00, 0x01, 0x70, 0x05, 0x00, 0x01, 0x03, 0x01, 0xf8, 0x01, 0xfe, + 0x01, 0x00, 0x01, 0x02, 0x04, 0x00, 0x01, 0x01, 0x01, 0xfc, 0x05, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x01, 0x3e, 0x01, 0x00, 0x01, 0x0c, 0x04, 0x00, + 0x01, 0x03, 0x01, 0xfe, 0x05, 0x00, 0x01, 0x07, 0x01, 0xc0, 0x01, 0x1f, 0x01, 0x00, 0x01, 0x10, 0x04, 0x00, 0x01, 0x07, 0x01, 0xdf, 0x05, 0x00, + 0x01, 0x07, 0x01, 0x80, 0x01, 0x0f, 0x01, 0x00, 0x01, 0x10, 0x04, 0x00, 0x02, 0x07, 0x05, 0x00, 0x01, 0x0f, 0x01, 0x80, 0x01, 0x0f, 0x01, 0x80, + 0x01, 0x10, 0x04, 0x00, 0x01, 0x0f, 0x01, 0x07, 0x01, 0x80, 0x04, 0x00, 0x01, 0x0f, 0x01, 0x00, 0x01, 0x07, 0x01, 0x80, 0x05, 0x00, 0x01, 0x0e, + 0x01, 0x03, 0x01, 0x80, 0x04, 0x00, 0x01, 0x0f, 0x01, 0x00, 0x01, 0x07, 0x01, 0x80, 0x05, 0x00, 0x01, 0x0f, 0x01, 0x07, 0x01, 0x80, 0x04, 0x00, + 0x01, 0x0f, 0x01, 0x00, 0x01, 0x07, 0x01, 0x80, 0x01, 0x18, 0x04, 0x00, 0x02, 0x07, 0x05, 0x00, 0x01, 0x0f, 0x01, 0x80, 0x01, 0x0f, 0x01, 0x80, + 0x01, 0x18, 0x04, 0x00, 0x01, 0x07, 0x01, 0xdf, 0x05, 0x00, 0x01, 0x07, 0x01, 0x80, 0x01, 0x0f, 0x06, 0x00, 0x01, 0x03, 0x01, 0xfe, 0x05, 0x00, + 0x01, 0x07, 0x01, 0xc0, 0x01, 0x1f, 0x06, 0x00, 0x01, 0x01, 0x01, 0xfc, 0x05, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x01, 0x3e, 0x07, 0x00, 0x01, 0x70, + 0x05, 0x00, 0x01, 0x03, 0x01, 0xf8, 0x01, 0xfe, 0x0d, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xfc, 0x0e, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x0e, 0x00, + 0x01, 0x3f, 0x01, 0xe0, 0x0e, 0x00, 0x01, 0x0f, 0x01, 0x80, 0x1a, 0x00, 0x01, 0x0f, 0x01, 0xf8, 0x67, 0x00, 0x2b, 0x00, 0x01, 0x0f, 0x01, 0x80, + 0x01, 0x00, 0x01, 0x3c, 0x0c, 0x00, 0x01, 0x3f, 0x01, 0xe0, 0x01, 0x00, 0x01, 0x42, 0x0c, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x01, 0x00, 0x01, 0x81, + 0x0b, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x00, 0x01, 0x01, 0x0b, 0x00, 0x01, 0x03, 0x01, 0xf8, 0x01, 0xfe, 0x01, 0x00, 0x01, 0x01, + 0x0b, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x01, 0x3e, 0x01, 0x00, 0x01, 0x02, 0x05, 0x00, 0x01, 0x70, 0x05, 0x00, 0x01, 0x07, 0x01, 0xc0, 0x01, 0x1f, + 0x01, 0x00, 0x01, 0x0c, 0x04, 0x00, 0x01, 0x01, 0x01, 0xfc, 0x05, 0x00, 0x01, 0x07, 0x01, 0x80, 0x01, 0x0f, 0x01, 0x00, 0x01, 0x10, 0x04, 0x00, + 0x01, 0x03, 0x01, 0xfe, 0x05, 0x00, 0x01, 0x0f, 0x01, 0x80, 0x01, 0x0f, 0x01, 0x80, 0x01, 0x10, 0x04, 0x00, 0x01, 0x07, 0x01, 0xdf, 0x05, 0x00, + 0x01, 0x0f, 0x01, 0x00, 0x01, 0x07, 0x01, 0x80, 0x01, 0x10, 0x04, 0x00, 0x02, 0x07, 0x05, 0x00, 0x01, 0x0f, 0x01, 0x00, 0x01, 0x07, 0x01, 0x80, + 0x05, 0x00, 0x01, 0x0f, 0x01, 0x07, 0x01, 0x80, 0x04, 0x00, 0x01, 0x0f, 0x01, 0x00, 0x01, 0x07, 0x01, 0x80, 0x05, 0x00, 0x01, 0x0e, 0x01, 0x03, + 0x01, 0x80, 0x04, 0x00, 0x01, 0x0f, 0x01, 0x80, 0x01, 0x0f, 0x01, 0x80, 0x01, 0x18, 0x04, 0x00, 0x01, 0x0f, 0x01, 0x07, 0x01, 0x80, 0x04, 0x00, + 0x01, 0x07, 0x01, 0x80, 0x01, 0x0f, 0x01, 0x00, 0x01, 0x18, 0x04, 0x00, 0x02, 0x07, 0x05, 0x00, 0x01, 0x07, 0x01, 0xc0, 0x01, 0x1f, 0x06, 0x00, + 0x01, 0x07, 0x01, 0xdf, 0x05, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x01, 0x3e, 0x06, 0x00, 0x01, 0x03, 0x01, 0xfe, 0x05, 0x00, 0x01, 0x03, 0x01, 0xf8, + 0x01, 0xfe, 0x06, 0x00, 0x01, 0x01, 0x01, 0xfc, 0x05, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xfc, 0x07, 0x00, 0x01, 0x70, 0x06, 0x00, 0x01, 0xff, + 0x01, 0xf8, 0x0e, 0x00, 0x01, 0x3f, 0x01, 0xe0, 0x0e, 0x00, 0x01, 0x0f, 0x01, 0x80, 0x2a, 0x00, 0x01, 0x0f, 0x01, 0xf8, 0x67, 0x00, 0x1b, 0x00, + 0x01, 0x0f, 0x01, 0x80, 0x0e, 0x00, 0x01, 0x3f, 0x01, 0xe0, 0x01, 0x00, 0x01, 0x3c, 0x0c, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x01, 0x00, 0x01, 0x42, + 0x0b, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x00, 0x01, 0x81, 0x0b, 0x00, 0x01, 0x03, 0x01, 0xf8, 0x01, 0xfe, 0x01, 0x00, 0x01, 0x01, + 0x0b, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x01, 0x3e, 0x01, 0x00, 0x01, 0x01, 0x0b, 0x00, 0x01, 0x07, 0x01, 0xc0, 0x01, 0x1f, 0x01, 0x00, 0x01, 0x02, + 0x0b, 0x00, 0x01, 0x07, 0x01, 0x80, 0x01, 0x0f, 0x01, 0x00, 0x01, 0x0c, 0x05, 0x00, 0x01, 0x70, 0x05, 0x00, 0x01, 0x0f, 0x01, 0x80, 0x01, 0x0f, + 0x01, 0x80, 0x01, 0x10, 0x04, 0x00, 0x01, 0x01, 0x01, 0xfc, 0x05, 0x00, 0x01, 0x0f, 0x01, 0x00, 0x01, 0x07, 0x01, 0x80, 0x01, 0x10, 0x04, 0x00, + 0x01, 0x03, 0x01, 0xfe, 0x05, 0x00, 0x01, 0x0f, 0x01, 0x00, 0x01, 0x07, 0x01, 0x80, 0x01, 0x10, 0x04, 0x00, 0x01, 0x07, 0x01, 0xdf, 0x05, 0x00, + 0x01, 0x0f, 0x01, 0x00, 0x01, 0x07, 0x01, 0x80, 0x05, 0x00, 0x02, 0x07, 0x05, 0x00, 0x01, 0x0f, 0x01, 0x80, 0x01, 0x0f, 0x01, 0x80, 0x05, 0x00, + 0x01, 0x0f, 0x01, 0x07, 0x01, 0x80, 0x04, 0x00, 0x01, 0x07, 0x01, 0x80, 0x01, 0x0f, 0x01, 0x00, 0x01, 0x18, 0x04, 0x00, 0x01, 0x0e, 0x01, 0x03, + 0x01, 0x80, 0x04, 0x00, 0x01, 0x07, 0x01, 0xc0, 0x01, 0x1f, 0x01, 0x00, 0x01, 0x18, 0x04, 0x00, 0x01, 0x0f, 0x01, 0x07, 0x01, 0x80, 0x04, 0x00, + 0x01, 0x03, 0x01, 0xe0, 0x01, 0x3e, 0x06, 0x00, 0x02, 0x07, 0x05, 0x00, 0x01, 0x03, 0x01, 0xf8, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x07, 0x01, 0xdf, + 0x05, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x03, 0x01, 0xfe, 0x06, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x01, + 0x01, 0xfc, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xe0, 0x07, 0x00, 0x01, 0x70, 0x06, 0x00, 0x01, 0x0f, 0x01, 0x80, 0x3a, 0x00, 0x01, 0x0f, 0x01, 0xf8, + 0x67, 0x00, 0x2e, 0x00, 0x01, 0x3c, 0x0f, 0x00, 0x01, 0x42, 0x0c, 0x00, 0x01, 0x0f, 0x01, 0x80, 0x01, 0x00, 0x01, 0x81, 0x0c, 0x00, 0x01, 0x3f, + 0x01, 0xe0, 0x01, 0x00, 0x01, 0x01, 0x05, 0x00, 0x01, 0x70, 0x06, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x01, 0x00, 0x01, 0x01, 0x04, 0x00, 0x01, 0x01, + 0x01, 0xfc, 0x05, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x00, 0x01, 0x02, 0x04, 0x00, 0x01, 0x03, 0x01, 0xfe, 0x05, 0x00, 0x01, 0x03, + 0x01, 0xf8, 0x01, 0xfe, 0x01, 0x00, 0x01, 0x0c, 0x04, 0x00, 0x01, 0x07, 0x01, 0xdf, 0x05, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x01, 0x3e, 0x01, 0x00, + 0x01, 0x10, 0x04, 0x00, 0x02, 0x07, 0x05, 0x00, 0x01, 0x07, 0x01, 0xc0, 0x01, 0x1f, 0x01, 0x00, 0x01, 0x10, 0x04, 0x00, 0x01, 0x0f, 0x01, 0x07, + 0x01, 0x80, 0x04, 0x00, 0x01, 0x07, 0x01, 0x80, 0x01, 0x0f, 0x01, 0x00, 0x01, 0x10, 0x04, 0x00, 0x01, 0x0e, 0x01, 0x03, 0x01, 0x80, 0x04, 0x00, + 0x01, 0x0f, 0x01, 0x80, 0x01, 0x0f, 0x01, 0x80, 0x05, 0x00, 0x01, 0x0f, 0x01, 0x07, 0x01, 0x80, 0x04, 0x00, 0x01, 0x0f, 0x01, 0x00, 0x01, 0x07, + 0x01, 0x80, 0x05, 0x00, 0x02, 0x07, 0x05, 0x00, 0x01, 0x0f, 0x01, 0x00, 0x01, 0x07, 0x01, 0x80, 0x01, 0x18, 0x04, 0x00, 0x01, 0x07, 0x01, 0xdf, + 0x05, 0x00, 0x01, 0x0f, 0x01, 0x00, 0x01, 0x07, 0x01, 0x80, 0x01, 0x18, 0x04, 0x00, 0x01, 0x03, 0x01, 0xfe, 0x05, 0x00, 0x01, 0x0f, 0x01, 0x80, + 0x01, 0x0f, 0x01, 0x80, 0x05, 0x00, 0x01, 0x01, 0x01, 0xfc, 0x05, 0x00, 0x01, 0x07, 0x01, 0x80, 0x01, 0x0f, 0x07, 0x00, 0x01, 0x70, 0x05, 0x00, + 0x01, 0x07, 0x01, 0xc0, 0x01, 0x1f, 0x0d, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x01, 0x3e, 0x0d, 0x00, 0x01, 0x03, 0x01, 0xf8, 0x01, 0xfe, 0x0d, 0x00, + 0x01, 0x01, 0x01, 0xff, 0x01, 0xfc, 0x0e, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x0e, 0x00, 0x01, 0x3f, 0x01, 0xe0, 0x0e, 0x00, 0x01, 0x0f, 0x01, 0x80, + 0x0a, 0x00, 0x01, 0x0f, 0x01, 0xf8, 0x67, 0x00, 0x2e, 0x00, 0x01, 0x3c, 0x0f, 0x00, 0x01, 0x42, 0x0f, 0x00, 0x01, 0x81, 0x05, 0x00, 0x01, 0x70, + 0x06, 0x00, 0x01, 0x0f, 0x01, 0x80, 0x01, 0x00, 0x01, 0x01, 0x04, 0x00, 0x01, 0x01, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xe0, 0x01, 0x00, + 0x01, 0x01, 0x04, 0x00, 0x01, 0x03, 0x01, 0xfe, 0x06, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x01, 0x00, 0x01, 0x02, 0x04, 0x00, 0x01, 0x07, 0x01, 0xdf, + 0x05, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x00, 0x01, 0x0c, 0x04, 0x00, 0x02, 0x07, 0x05, 0x00, 0x01, 0x03, 0x01, 0xf8, 0x01, 0xfe, + 0x01, 0x00, 0x01, 0x10, 0x04, 0x00, 0x01, 0x0f, 0x01, 0x07, 0x01, 0x80, 0x04, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x01, 0x3e, 0x01, 0x00, 0x01, 0x10, + 0x04, 0x00, 0x01, 0x0e, 0x01, 0x03, 0x01, 0x80, 0x04, 0x00, 0x01, 0x07, 0x01, 0xc0, 0x01, 0x1f, 0x01, 0x00, 0x01, 0x10, 0x04, 0x00, 0x01, 0x0f, + 0x01, 0x07, 0x01, 0x80, 0x04, 0x00, 0x01, 0x07, 0x01, 0x80, 0x01, 0x0f, 0x06, 0x00, 0x02, 0x07, 0x05, 0x00, 0x01, 0x0f, 0x01, 0x80, 0x01, 0x0f, + 0x01, 0x80, 0x05, 0x00, 0x01, 0x07, 0x01, 0xdf, 0x05, 0x00, 0x01, 0x0f, 0x01, 0x00, 0x01, 0x07, 0x01, 0x80, 0x01, 0x18, 0x04, 0x00, 0x01, 0x03, + 0x01, 0xfe, 0x05, 0x00, 0x01, 0x0f, 0x01, 0x00, 0x01, 0x07, 0x01, 0x80, 0x01, 0x18, 0x04, 0x00, 0x01, 0x01, 0x01, 0xfc, 0x05, 0x00, 0x01, 0x0f, + 0x01, 0x00, 0x01, 0x07, 0x01, 0x80, 0x06, 0x00, 0x01, 0x70, 0x05, 0x00, 0x01, 0x0f, 0x01, 0x80, 0x01, 0x0f, 0x01, 0x80, 0x0c, 0x00, 0x01, 0x07, + 0x01, 0x80, 0x01, 0x0f, 0x0d, 0x00, 0x01, 0x07, 0x01, 0xc0, 0x01, 0x1f, 0x0d, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x01, 0x3e, 0x0d, 0x00, 0x01, 0x03, + 0x01, 0xf8, 0x01, 0xfe, 0x0d, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xfc, 0x0e, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x0e, 0x00, 0x01, 0x3f, 0x01, 0xe0, + 0x0a, 0x00, 0x01, 0x0f, 0x01, 0xf8, 0x02, 0x00, 0x01, 0x0f, 0x01, 0x80, 0x63, 0x00, 0x63, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xfc, 0x0d, 0x00, + 0x01, 0x7f, 0x01, 0xff, 0x01, 0xfc, 0x05, 0x00, 0x01, 0x07, 0x01, 0xf8, 0x0e, 0x00, 0x01, 0x1f, 0x01, 0xfe, 0x0e, 0x00, 0x01, 0x1f, 0x01, 0xfe, + 0x0e, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x06, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x05, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x06, 0x00, 0x01, 0x07, + 0x01, 0xff, 0x01, 0xfc, 0x05, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xfe, 0x05, 0x00, 0x01, 0x3f, 0x01, 0xff, + 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xfe, 0x05, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xfe, 0x05, 0x00, + 0x01, 0x3f, 0x01, 0xff, 0x06, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfc, 0x05, 0x00, 0x01, 0x1f, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x03, 0x01, 0xff, + 0x01, 0xf8, 0x05, 0x00, 0x01, 0x1f, 0x01, 0xfe, 0x0e, 0x00, 0x01, 0x07, 0x01, 0xf8, 0x6a, 0x00, 0x01, 0x0f, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x03, + 0x01, 0x33, 0x0e, 0x00, 0x01, 0x03, 0x01, 0x33, 0x51, 0x00, 0x63, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xfc, 0x0d, 0x00, 0x01, 0x7f, 0x01, 0xff, + 0x01, 0xfc, 0x05, 0x00, 0x01, 0x07, 0x01, 0xf8, 0x0e, 0x00, 0x01, 0x1f, 0x01, 0xfe, 0x0e, 0x00, 0x01, 0x1f, 0x01, 0xfe, 0x0e, 0x00, 0x01, 0x3f, + 0x01, 0xff, 0x06, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x05, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x06, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfc, + 0x05, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xfe, 0x05, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x06, 0x00, 0x01, 0x0f, + 0x01, 0xff, 0x01, 0xfe, 0x05, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xfe, 0x05, 0x00, 0x01, 0x3f, 0x01, 0xff, + 0x06, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfc, 0x05, 0x00, 0x01, 0x1f, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x05, 0x00, + 0x01, 0x1f, 0x01, 0xfe, 0x0e, 0x00, 0x01, 0x07, 0x01, 0xf8, 0x6a, 0x00, 0x01, 0x0f, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x03, 0x0f, 0x00, 0x01, 0x03, + 0x52, 0x00, 0x63, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xfc, 0x0d, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xfc, 0x05, 0x00, 0x01, 0x07, 0x01, 0xf8, + 0x0e, 0x00, 0x01, 0x1f, 0x01, 0xfe, 0x0e, 0x00, 0x01, 0x1f, 0x01, 0xfe, 0x0e, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x06, 0x00, 0x01, 0x03, 0x01, 0xff, + 0x01, 0xf8, 0x05, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x06, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfc, 0x05, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x06, 0x00, + 0x01, 0x0f, 0x01, 0xff, 0x01, 0xfe, 0x05, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xfe, 0x05, 0x00, 0x01, 0x3f, + 0x01, 0xff, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xfe, 0x05, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x06, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfc, + 0x05, 0x00, 0x01, 0x1f, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x05, 0x00, 0x01, 0x1f, 0x01, 0xfe, 0x0e, 0x00, 0x01, 0x07, + 0x01, 0xf8, 0x6a, 0x00, 0x01, 0x0f, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x03, 0x01, 0x30, 0x0e, 0x00, 0x01, 0x03, 0x01, 0x30, 0x51, 0x00, 0x63, 0x00, + 0x01, 0x7f, 0x01, 0xff, 0x01, 0xfc, 0x0d, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xfc, 0x3d, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x05, 0x00, + 0x01, 0x0f, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfc, 0x05, 0x00, 0x01, 0x1f, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, + 0x01, 0xfe, 0x05, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xfe, 0x05, 0x00, 0x01, 0x1f, 0x01, 0xfe, 0x06, 0x00, + 0x01, 0x0f, 0x01, 0xff, 0x01, 0xfe, 0x05, 0x00, 0x01, 0x0f, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfc, 0x0d, 0x00, 0x01, 0x03, + 0x01, 0xff, 0x01, 0xf8, 0x81, 0x00, 0x01, 0x0f, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x03, 0x01, 0x33, 0x0e, 0x00, 0x01, 0x03, 0x01, 0x33, 0x51, 0x00, + 0x63, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xfc, 0x0d, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xfc, 0x3d, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, + 0x0d, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfc, 0x05, 0x00, 0x01, 0x1f, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xfe, 0x05, 0x00, + 0x01, 0x3f, 0x01, 0xff, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xfe, 0x05, 0x00, 0x01, 0x1f, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, + 0x01, 0xfe, 0x0d, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfc, 0x0d, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x81, 0x00, 0x01, 0x0f, 0x01, 0xf8, + 0x04, 0x00, 0x01, 0x03, 0x0f, 0x00, 0x01, 0x03, 0x52, 0x00, 0x63, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xfc, 0x0d, 0x00, 0x01, 0x7f, 0x01, 0xff, + 0x01, 0xfc, 0x15, 0x00, 0x01, 0x07, 0x01, 0xf8, 0x0e, 0x00, 0x01, 0x1f, 0x01, 0xfe, 0x0e, 0x00, 0x01, 0x1f, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x03, + 0x01, 0xff, 0x01, 0xf8, 0x05, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x06, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfc, 0x05, 0x00, 0x01, 0x3f, 0x01, 0xff, + 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xfe, 0x05, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xfe, 0x05, 0x00, + 0x01, 0x3f, 0x01, 0xff, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xfe, 0x05, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x06, 0x00, 0x01, 0x07, 0x01, 0xff, + 0x01, 0xfc, 0x05, 0x00, 0x01, 0x1f, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x05, 0x00, 0x01, 0x1f, 0x01, 0xfe, 0x0e, 0x00, + 0x01, 0x07, 0x01, 0xf8, 0x6a, 0x00, 0x01, 0x0f, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x03, 0x0f, 0x00, 0x01, 0x03, 0x52, 0x00, 0x34, 0x00, 0x01, 0xf8, + 0x06, 0x00, 0x01, 0x0f, 0x01, 0x80, 0x06, 0x00, 0x01, 0x03, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xe0, 0x06, 0x00, 0x01, 0x07, 0x01, 0xff, + 0x06, 0x00, 0x01, 0x7f, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x1f, + 0x01, 0x8f, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x01, 0x01, 0xf8, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x3f, 0x01, 0x07, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x03, + 0x01, 0xf0, 0x01, 0x7e, 0x06, 0x00, 0x01, 0x3e, 0x01, 0x03, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x01, 0x3e, 0x06, 0x00, 0x01, 0x3c, + 0x01, 0x01, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xc0, 0x01, 0x1e, 0x06, 0x00, 0x01, 0x7c, 0x01, 0x01, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, + 0x01, 0xc0, 0x01, 0x1f, 0x06, 0x00, 0x01, 0x78, 0x01, 0x00, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, 0x01, 0x80, 0x01, 0x0f, 0x06, 0x00, 0x01, 0x78, + 0x01, 0x00, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, 0x01, 0x80, 0x01, 0x0f, 0x06, 0x00, 0x01, 0x78, 0x01, 0x00, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, + 0x01, 0x80, 0x01, 0x0f, 0x06, 0x00, 0x01, 0x7c, 0x01, 0x01, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xc0, 0x01, 0x1f, 0x06, 0x00, 0x01, 0x3c, + 0x01, 0x01, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xc0, 0x01, 0x1e, 0x06, 0x00, 0x01, 0x3e, 0x01, 0x03, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x03, + 0x01, 0xe0, 0x01, 0x3e, 0x06, 0x00, 0x01, 0x3f, 0x01, 0x07, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xf0, 0x01, 0x7e, 0x06, 0x00, 0x01, 0x1f, + 0x01, 0x8f, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x01, 0x01, 0xf8, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0x80, 0x02, 0x00, 0x01, 0x80, + 0x02, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x07, 0x01, 0xff, 0x02, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x02, 0x00, 0x01, 0x7f, 0x01, 0xf0, + 0x06, 0x00, 0x01, 0x03, 0x01, 0xfe, 0x02, 0x00, 0x01, 0x03, 0x01, 0x60, 0x02, 0x00, 0x01, 0x3f, 0x01, 0xe0, 0x07, 0x00, 0x01, 0xf8, 0x02, 0x00, + 0x01, 0x03, 0x01, 0x60, 0x02, 0x00, 0x01, 0x0f, 0x01, 0x80, 0x0a, 0x00, 0x01, 0x06, 0x01, 0x30, 0x0e, 0x00, 0x01, 0x03, 0x01, 0x60, 0x0e, 0x00, + 0x01, 0x03, 0x01, 0x60, 0x0e, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x0f, 0x00, 0x01, 0x80, 0x37, 0x00, 0x14, 0x00, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x0f, + 0x01, 0x80, 0x06, 0x00, 0x01, 0x07, 0x01, 0xff, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, + 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x3f, + 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, + 0x02, 0xff, 0x06, 0x00, 0x01, 0x7f, 0x01, 0x8f, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xf8, 0x01, 0xff, 0x06, 0x00, 0x01, 0xff, 0x01, 0x07, + 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xf0, 0x01, 0x7f, 0x01, 0x80, 0x05, 0x00, 0x01, 0xfe, 0x01, 0x03, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, + 0x01, 0xe0, 0x01, 0x3f, 0x01, 0x80, 0x05, 0x00, 0x01, 0xfc, 0x01, 0x01, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xc0, 0x01, 0x1f, 0x01, 0x80, + 0x04, 0x00, 0x01, 0x01, 0x01, 0xfc, 0x01, 0x01, 0x01, 0xfc, 0x04, 0x00, 0x01, 0x1f, 0x01, 0xc0, 0x01, 0x1f, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x01, + 0x01, 0xf8, 0x01, 0x00, 0x01, 0xfc, 0x04, 0x00, 0x01, 0x1f, 0x01, 0x80, 0x01, 0x0f, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x01, 0x01, 0xf8, 0x01, 0x00, + 0x01, 0xfc, 0x04, 0x00, 0x01, 0x1f, 0x01, 0x80, 0x01, 0x0f, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x01, 0x01, 0xf8, 0x01, 0x00, 0x01, 0xfc, 0x04, 0x00, + 0x01, 0x1f, 0x01, 0x80, 0x01, 0x0f, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x01, 0x01, 0xfc, 0x01, 0x01, 0x01, 0xfc, 0x04, 0x00, 0x01, 0x1f, 0x01, 0xc0, + 0x01, 0x1f, 0x01, 0xc0, 0x05, 0x00, 0x01, 0xfc, 0x01, 0x01, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xc0, 0x01, 0x1f, 0x01, 0x80, 0x05, 0x00, + 0x01, 0xfe, 0x01, 0x03, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xe0, 0x01, 0x3f, 0x01, 0x80, 0x05, 0x00, 0x01, 0xff, 0x01, 0x07, 0x01, 0xf8, + 0x04, 0x00, 0x01, 0x0f, 0x01, 0xf0, 0x01, 0x7f, 0x01, 0x80, 0x05, 0x00, 0x01, 0x7f, 0x01, 0x8f, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xf8, + 0x01, 0xff, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xf0, 0x02, 0x00, 0x01, 0x80, 0x01, 0x00, 0x01, 0x07, 0x02, 0xff, 0x06, 0x00, 0x01, 0x3f, + 0x01, 0xff, 0x01, 0xe0, 0x01, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x01, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xff, + 0x01, 0xc0, 0x01, 0x00, 0x01, 0x03, 0x01, 0x60, 0x01, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0x80, + 0x01, 0x00, 0x01, 0x03, 0x01, 0x60, 0x02, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x07, 0x01, 0xff, 0x02, 0x00, 0x01, 0x06, 0x01, 0x30, + 0x02, 0x00, 0x01, 0x7f, 0x01, 0xf0, 0x07, 0x00, 0x01, 0xf8, 0x02, 0x00, 0x01, 0x03, 0x01, 0x60, 0x02, 0x00, 0x01, 0x0f, 0x01, 0x80, 0x0a, 0x00, + 0x01, 0x03, 0x01, 0x60, 0x0e, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x0f, 0x00, 0x01, 0x80, 0x37, 0x00, 0x24, 0x00, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x0f, + 0x01, 0x80, 0x06, 0x00, 0x01, 0x03, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xe0, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, + 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x3f, + 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x3f, 0x01, 0x8f, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x03, + 0x01, 0xf8, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0x07, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xf0, 0x01, 0x7f, 0x06, 0x00, 0x01, 0x7e, + 0x01, 0x03, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xe0, 0x01, 0x3f, 0x06, 0x00, 0x01, 0x7c, 0x01, 0x01, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, + 0x01, 0xc0, 0x01, 0x1f, 0x06, 0x00, 0x01, 0xfc, 0x01, 0x01, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xc0, 0x01, 0x1f, 0x01, 0x80, 0x05, 0x00, + 0x01, 0xf8, 0x01, 0x00, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x01, 0x80, 0x01, 0x0f, 0x01, 0x80, 0x05, 0x00, 0x01, 0xf8, 0x01, 0x00, 0x01, 0xf8, + 0x04, 0x00, 0x01, 0x0f, 0x01, 0x80, 0x01, 0x0f, 0x01, 0x80, 0x05, 0x00, 0x01, 0xf8, 0x01, 0x00, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x01, 0x80, + 0x01, 0x0f, 0x01, 0x80, 0x05, 0x00, 0x01, 0xfc, 0x01, 0x01, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xc0, 0x01, 0x1f, 0x01, 0x80, 0x05, 0x00, + 0x01, 0x7c, 0x01, 0x01, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xc0, 0x01, 0x1f, 0x06, 0x00, 0x01, 0x7e, 0x01, 0x03, 0x01, 0xf0, 0x04, 0x00, + 0x01, 0x07, 0x01, 0xe0, 0x01, 0x3f, 0x06, 0x00, 0x01, 0x7f, 0x01, 0x07, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xf0, 0x01, 0x7f, 0x06, 0x00, + 0x01, 0x3f, 0x01, 0x8f, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xf8, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xe0, 0x02, 0x00, + 0x01, 0x80, 0x01, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xc0, 0x01, 0x00, 0x01, 0x03, 0x01, 0xe0, + 0x01, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0x80, 0x01, 0x00, 0x01, 0x03, 0x01, 0x60, 0x02, 0x00, + 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x03, 0x01, 0xfe, 0x02, 0x00, 0x01, 0x03, 0x01, 0x60, 0x02, 0x00, 0x01, 0x3f, 0x01, 0xe0, 0x07, 0x00, + 0x01, 0xf8, 0x02, 0x00, 0x01, 0x06, 0x01, 0x30, 0x02, 0x00, 0x01, 0x0f, 0x01, 0x80, 0x0a, 0x00, 0x01, 0x03, 0x01, 0x60, 0x0e, 0x00, 0x01, 0x03, + 0x01, 0x60, 0x0e, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x0f, 0x00, 0x01, 0x80, 0x37, 0x00, 0x54, 0x00, 0x01, 0x03, 0x01, 0xf0, 0x0d, 0x00, 0x01, 0x03, + 0x01, 0xff, 0x01, 0xf0, 0x0d, 0x00, 0x01, 0x7f, 0x01, 0xfe, 0x05, 0x00, 0x01, 0x07, 0x02, 0xff, 0x06, 0x00, 0x01, 0x7e, 0x06, 0x00, 0x01, 0x07, + 0x02, 0xff, 0x76, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0x8f, 0x06, 0x00, 0x01, 0xff, 0x01, 0xf8, + 0x01, 0xf0, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0x8f, 0x06, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, + 0x01, 0x8f, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xf8, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0x8e, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, + 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x1a, 0x00, 0x01, 0x10, 0x01, 0x04, 0x0e, 0x00, 0x02, 0x08, 0x0e, 0x00, 0x01, 0x06, + 0x01, 0x30, 0x0e, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x67, 0x00, 0x64, 0x00, 0x01, 0x3f, 0x01, 0xf0, 0x0d, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xf0, + 0x04, 0x00, 0x01, 0x07, 0x02, 0xff, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xe0, 0x05, 0x00, 0x01, 0x07, 0x02, 0xff, 0x76, 0x00, 0x01, 0xff, 0x01, 0xf8, + 0x01, 0xf0, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0x8f, 0x06, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, + 0x01, 0x8f, 0x06, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0x8f, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xf8, + 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0x8e, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, + 0x01, 0xfc, 0x1a, 0x00, 0x01, 0x10, 0x01, 0x04, 0x0e, 0x00, 0x02, 0x08, 0x0e, 0x00, 0x01, 0x06, 0x01, 0x30, 0x0e, 0x00, 0x01, 0x03, 0x01, 0xe0, + 0x67, 0x00, 0x73, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, 0x02, 0xff, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xf0, + 0x04, 0x00, 0x01, 0x07, 0x02, 0xff, 0x76, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0x8f, 0x06, 0x00, + 0x01, 0xff, 0x01, 0xf8, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0x8f, 0x06, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x01, 0xf0, 0x04, 0x00, + 0x01, 0x0f, 0x01, 0xff, 0x01, 0x8f, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xf8, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0x8e, 0x06, 0x00, + 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x1a, 0x00, 0x01, 0x10, 0x01, 0x04, 0x0e, 0x00, 0x02, 0x08, + 0x0e, 0x00, 0x01, 0x06, 0x01, 0x30, 0x0e, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x67, 0x00, 0x45, 0x00, 0x01, 0xf0, 0x0e, 0x00, 0x01, 0x3f, 0x01, 0xf0, + 0x0d, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0x80, 0x0d, 0x00, 0x01, 0x7f, 0x01, 0xe0, 0x05, 0x00, 0x01, 0x07, 0x02, 0xff, 0x06, 0x00, 0x01, 0x78, + 0x06, 0x00, 0x01, 0x07, 0x02, 0xff, 0x76, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0x8f, 0x06, 0x00, + 0x01, 0xff, 0x01, 0xf8, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0x8f, 0x06, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x01, 0xf0, 0x04, 0x00, + 0x01, 0x0f, 0x01, 0xff, 0x01, 0x8f, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xf8, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0x8e, 0x06, 0x00, + 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x1a, 0x00, 0x01, 0x10, 0x01, 0x04, 0x0e, 0x00, 0x02, 0x08, + 0x0e, 0x00, 0x01, 0x06, 0x01, 0x30, 0x0e, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x67, 0x00, 0x35, 0x00, 0x01, 0xf0, 0x0e, 0x00, 0x01, 0x0f, 0x01, 0xf0, + 0x0e, 0x00, 0x01, 0xff, 0x01, 0x80, 0x0d, 0x00, 0x01, 0x0f, 0x01, 0xf8, 0x0e, 0x00, 0x01, 0x7f, 0x01, 0x80, 0x05, 0x00, 0x01, 0x07, 0x02, 0xff, + 0x06, 0x00, 0x01, 0x78, 0x06, 0x00, 0x01, 0x07, 0x02, 0xff, 0x76, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, + 0x01, 0x8f, 0x06, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0x8f, 0x06, 0x00, 0x01, 0xff, 0x01, 0xf8, + 0x01, 0xf0, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0x8f, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xf8, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, + 0x01, 0x8e, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x1a, 0x00, 0x01, 0x10, 0x01, 0x04, + 0x0e, 0x00, 0x02, 0x08, 0x0e, 0x00, 0x01, 0x06, 0x01, 0x30, 0x0e, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x67, 0x00, 0xb3, 0x00, 0x01, 0x7f, 0x01, 0xff, + 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, 0x02, 0xff, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, 0x02, 0xff, 0x16, 0x00, + 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, + 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, + 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, + 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x6a, 0x00, 0x01, 0x0f, 0x01, 0xf8, 0x67, 0x00, 0xb3, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xf0, 0x04, 0x00, + 0x01, 0x07, 0x02, 0xff, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, 0x02, 0xff, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, + 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, + 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, + 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, + 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, + 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x5a, 0x00, 0x01, 0x0f, 0x01, 0xf8, 0x67, 0x00, 0xb3, 0x00, 0x01, 0x7f, 0x01, 0xff, + 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, 0x02, 0xff, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, 0x02, 0xff, 0x06, 0x00, + 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, + 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, + 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, + 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, + 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x5a, 0x00, 0x01, 0x0f, 0x01, 0xf8, 0x67, 0x00, 0xb3, 0x00, + 0x01, 0x7f, 0x01, 0xff, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, 0x02, 0xff, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, + 0x02, 0xff, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, + 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, + 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, + 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, + 0x01, 0xfe, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x0b, 0x00, 0x01, 0x80, 0x0e, 0x00, + 0x01, 0x03, 0x01, 0xe0, 0x0e, 0x00, 0x01, 0x03, 0x01, 0x60, 0x0e, 0x00, 0x01, 0x03, 0x01, 0x60, 0x0e, 0x00, 0x01, 0x06, 0x01, 0x30, 0x0e, 0x00, + 0x01, 0x03, 0x01, 0x60, 0x0e, 0x00, 0x01, 0x03, 0x01, 0x60, 0x0e, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x0f, 0x00, 0x01, 0x80, 0x37, 0x00, 0xb3, 0x00, + 0x01, 0x7f, 0x01, 0xff, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, 0x02, 0xff, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, + 0x02, 0xff, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, + 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, + 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, + 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, + 0x01, 0xfc, 0x1b, 0x00, 0x01, 0x80, 0x0e, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x0e, 0x00, 0x01, 0x03, 0x01, 0x60, 0x0e, 0x00, 0x01, 0x03, 0x01, 0x60, + 0x0e, 0x00, 0x01, 0x06, 0x01, 0x30, 0x0e, 0x00, 0x01, 0x03, 0x01, 0x60, 0x0e, 0x00, 0x01, 0x03, 0x01, 0x60, 0x0e, 0x00, 0x01, 0x03, 0x01, 0xe0, + 0x0f, 0x00, 0x01, 0x80, 0x37, 0x00, 0xb3, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, 0x02, 0xff, 0x06, 0x00, 0x01, 0x7f, + 0x01, 0xff, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, 0x02, 0xff, 0x16, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, + 0x01, 0xfc, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, + 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, + 0x01, 0xfe, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x1b, 0x00, 0x01, 0x80, 0x0e, 0x00, + 0x01, 0x03, 0x01, 0xe0, 0x0e, 0x00, 0x01, 0x03, 0x01, 0x60, 0x0e, 0x00, 0x01, 0x03, 0x01, 0x60, 0x0e, 0x00, 0x01, 0x06, 0x01, 0x30, 0x0e, 0x00, + 0x01, 0x03, 0x01, 0x60, 0x0e, 0x00, 0x01, 0x03, 0x01, 0x60, 0x0e, 0x00, 0x01, 0x03, 0x01, 0xe0, 0x0f, 0x00, 0x01, 0x80, 0x37, 0x00, 0xb3, 0x00, + 0x01, 0x7f, 0x01, 0xff, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, 0x02, 0xff, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, + 0x02, 0xff, 0x16, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, + 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, + 0x01, 0xfe, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x7a, 0x00, 0x01, 0x0f, 0x01, 0xf8, + 0x67, 0x00, 0xb3, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, 0x02, 0xff, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xf0, + 0x04, 0x00, 0x01, 0x07, 0x02, 0xff, 0x26, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, + 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, + 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x7a, 0x00, 0x01, 0x0f, 0x01, 0xf8, 0x67, 0x00, 0x4e, 0x00, 0x01, 0x07, 0x01, 0xf0, 0x0f, 0x00, 0x01, 0x20, + 0x0f, 0x00, 0x01, 0x40, 0x0f, 0x00, 0x01, 0x80, 0x0e, 0x00, 0x01, 0x01, 0x0f, 0x00, 0x01, 0x02, 0x0f, 0x00, 0x01, 0x07, 0x01, 0xf0, 0x23, 0x00, + 0x01, 0x70, 0x01, 0x00, 0x01, 0x38, 0x04, 0x00, 0x01, 0x07, 0x01, 0x00, 0x01, 0x03, 0x01, 0x87, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x78, 0x01, 0x00, + 0x01, 0x78, 0x04, 0x00, 0x01, 0x07, 0x01, 0x80, 0x01, 0x07, 0x01, 0x80, 0x01, 0x40, 0x04, 0x00, 0x01, 0x3f, 0x01, 0x03, 0x01, 0xf0, 0x04, 0x00, + 0x01, 0x03, 0x01, 0xf0, 0x01, 0x3f, 0x01, 0x00, 0x01, 0x80, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xc0, 0x05, 0x00, 0x01, 0xff, 0x01, 0xfc, + 0x01, 0x01, 0x05, 0x00, 0x01, 0x01, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xe0, 0x01, 0x02, 0x0f, 0x00, 0x01, 0x07, 0x01, 0xe0, 0x48, 0x00, + 0x01, 0x20, 0x01, 0x02, 0x0e, 0x00, 0x01, 0x10, 0x01, 0x84, 0x0e, 0x00, 0x01, 0x10, 0x01, 0xc4, 0x0e, 0x00, 0x01, 0x0f, 0x01, 0x78, 0x57, 0x00, + 0x4e, 0x00, 0x01, 0x07, 0x01, 0xf0, 0x0f, 0x00, 0x01, 0x20, 0x0f, 0x00, 0x01, 0x40, 0x0f, 0x00, 0x01, 0x80, 0x0e, 0x00, 0x01, 0x01, 0x0f, 0x00, + 0x01, 0x02, 0x0f, 0x00, 0x01, 0x07, 0x01, 0xf0, 0x2d, 0x00, 0x01, 0x07, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x70, 0x01, 0x00, 0x01, 0x38, 0x04, 0x00, + 0x01, 0x07, 0x01, 0x00, 0x01, 0x03, 0x01, 0x80, 0x01, 0x40, 0x04, 0x00, 0x01, 0x78, 0x01, 0x00, 0x01, 0x78, 0x04, 0x00, 0x01, 0x07, 0x01, 0x80, + 0x01, 0x07, 0x02, 0x80, 0x04, 0x00, 0x01, 0x3f, 0x01, 0x03, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xf0, 0x01, 0x3f, 0x01, 0x01, 0x05, 0x00, + 0x01, 0x0f, 0x01, 0xff, 0x01, 0xc0, 0x05, 0x00, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x02, 0x05, 0x00, 0x01, 0x01, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x1f, + 0x01, 0xe0, 0x01, 0x07, 0x01, 0xe0, 0x48, 0x00, 0x01, 0x20, 0x01, 0x02, 0x0e, 0x00, 0x01, 0x10, 0x01, 0x84, 0x0e, 0x00, 0x01, 0x10, 0x01, 0xc4, + 0x0e, 0x00, 0x01, 0x0f, 0x01, 0x78, 0x57, 0x00, 0x3e, 0x00, 0x01, 0x07, 0x01, 0xf0, 0x0f, 0x00, 0x01, 0x20, 0x0f, 0x00, 0x01, 0x40, 0x0f, 0x00, + 0x01, 0x80, 0x0e, 0x00, 0x01, 0x01, 0x0f, 0x00, 0x01, 0x02, 0x0f, 0x00, 0x01, 0x07, 0x01, 0xf0, 0x2d, 0x00, 0x01, 0x07, 0x01, 0xe0, 0x0f, 0x00, + 0x01, 0x40, 0x04, 0x00, 0x01, 0x70, 0x01, 0x00, 0x01, 0x38, 0x04, 0x00, 0x01, 0x07, 0x01, 0x00, 0x01, 0x03, 0x02, 0x80, 0x04, 0x00, 0x01, 0x78, + 0x01, 0x00, 0x01, 0x78, 0x04, 0x00, 0x01, 0x07, 0x01, 0x80, 0x01, 0x07, 0x01, 0x81, 0x05, 0x00, 0x01, 0x3f, 0x01, 0x03, 0x01, 0xf0, 0x04, 0x00, + 0x01, 0x03, 0x01, 0xf0, 0x01, 0x3f, 0x01, 0x02, 0x05, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xc0, 0x05, 0x00, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x07, + 0x01, 0xe0, 0x04, 0x00, 0x01, 0x01, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xe0, 0x4a, 0x00, 0x01, 0x20, 0x01, 0x02, 0x0e, 0x00, 0x01, 0x10, + 0x01, 0x84, 0x0e, 0x00, 0x01, 0x10, 0x01, 0xc4, 0x0e, 0x00, 0x01, 0x0f, 0x01, 0x78, 0x57, 0x00, 0x2e, 0x00, 0x01, 0x07, 0x01, 0xf0, 0x0f, 0x00, + 0x01, 0x20, 0x0f, 0x00, 0x01, 0x40, 0x0f, 0x00, 0x01, 0x80, 0x0e, 0x00, 0x01, 0x01, 0x0f, 0x00, 0x01, 0x02, 0x0f, 0x00, 0x01, 0x07, 0x01, 0xf0, + 0x2d, 0x00, 0x01, 0x07, 0x01, 0xe0, 0x0f, 0x00, 0x01, 0x40, 0x04, 0x00, 0x01, 0x70, 0x01, 0x00, 0x01, 0x38, 0x04, 0x00, 0x01, 0x07, 0x01, 0x00, + 0x01, 0x03, 0x02, 0x80, 0x04, 0x00, 0x01, 0x78, 0x01, 0x00, 0x01, 0x78, 0x04, 0x00, 0x01, 0x07, 0x01, 0x80, 0x01, 0x07, 0x01, 0x81, 0x05, 0x00, + 0x01, 0x3f, 0x01, 0x03, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xf0, 0x01, 0x3f, 0x01, 0x02, 0x05, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xc0, + 0x05, 0x00, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x07, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x01, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xe0, 0x5a, 0x00, + 0x01, 0x20, 0x01, 0x02, 0x0e, 0x00, 0x01, 0x10, 0x01, 0x84, 0x0e, 0x00, 0x01, 0x10, 0x01, 0xc4, 0x0e, 0x00, 0x01, 0x0f, 0x01, 0x78, 0x57, 0x00, + 0x2e, 0x00, 0x01, 0x07, 0x01, 0xf0, 0x0f, 0x00, 0x01, 0x20, 0x0f, 0x00, 0x01, 0x40, 0x0f, 0x00, 0x01, 0x80, 0x0e, 0x00, 0x01, 0x01, 0x0f, 0x00, + 0x01, 0x02, 0x0f, 0x00, 0x01, 0x07, 0x01, 0xf0, 0x2d, 0x00, 0x01, 0x07, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x70, 0x01, 0x00, 0x01, 0x38, 0x04, 0x00, + 0x01, 0x07, 0x01, 0x00, 0x01, 0x03, 0x01, 0x80, 0x01, 0x40, 0x04, 0x00, 0x01, 0x78, 0x01, 0x00, 0x01, 0x78, 0x04, 0x00, 0x01, 0x07, 0x01, 0x80, + 0x01, 0x07, 0x02, 0x80, 0x04, 0x00, 0x01, 0x3f, 0x01, 0x03, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xf0, 0x01, 0x3f, 0x01, 0x01, 0x05, 0x00, + 0x01, 0x0f, 0x01, 0xff, 0x01, 0xc0, 0x05, 0x00, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x02, 0x05, 0x00, 0x01, 0x01, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x1f, + 0x01, 0xe0, 0x01, 0x07, 0x01, 0xe0, 0x68, 0x00, 0x01, 0x20, 0x01, 0x02, 0x0e, 0x00, 0x01, 0x10, 0x01, 0x84, 0x0e, 0x00, 0x01, 0x10, 0x01, 0xc4, + 0x0e, 0x00, 0x01, 0x0f, 0x01, 0x78, 0x57, 0x00, 0x4e, 0x00, 0x01, 0x07, 0x01, 0xf0, 0x0f, 0x00, 0x01, 0x20, 0x0f, 0x00, 0x01, 0x40, 0x0f, 0x00, + 0x01, 0x80, 0x0e, 0x00, 0x01, 0x01, 0x0f, 0x00, 0x01, 0x02, 0x0f, 0x00, 0x01, 0x07, 0x01, 0xf0, 0x13, 0x00, 0x01, 0x70, 0x01, 0x00, 0x01, 0x38, + 0x04, 0x00, 0x01, 0x07, 0x01, 0x00, 0x01, 0x03, 0x01, 0x80, 0x05, 0x00, 0x01, 0x78, 0x01, 0x00, 0x01, 0x78, 0x04, 0x00, 0x01, 0x07, 0x01, 0x80, + 0x01, 0x07, 0x01, 0x87, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x3f, 0x01, 0x03, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xf0, 0x01, 0x3f, 0x01, 0x00, + 0x01, 0x40, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xc0, 0x05, 0x00, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x00, 0x01, 0x80, 0x04, 0x00, 0x01, 0x01, + 0x01, 0xfe, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xe0, 0x01, 0x01, 0x0f, 0x00, 0x01, 0x02, 0x0f, 0x00, 0x01, 0x07, 0x01, 0xe0, 0x48, 0x00, 0x01, 0x20, + 0x01, 0x02, 0x0e, 0x00, 0x01, 0x10, 0x01, 0x84, 0x0e, 0x00, 0x01, 0x10, 0x01, 0xc4, 0x0e, 0x00, 0x01, 0x0f, 0x01, 0x78, 0x57, 0x00, 0x24, 0x00, + 0x01, 0x03, 0x01, 0xc0, 0x05, 0x00, 0x01, 0xf0, 0x08, 0x00, 0x01, 0x7f, 0x01, 0xc0, 0x05, 0x00, 0x01, 0xff, 0x01, 0x80, 0x06, 0x00, 0x01, 0x0f, + 0x01, 0xfe, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xc0, 0x07, 0x00, 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0x78, + 0x08, 0x00, 0x01, 0x07, 0x01, 0x80, 0x16, 0x00, 0x01, 0x70, 0x06, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x01, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x1f, + 0x01, 0xc0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xe0, 0x06, 0x00, 0x01, 0x07, 0x01, 0xff, 0x06, 0x00, 0x01, 0x7f, + 0x01, 0xf0, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0x80, + 0x05, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x19, + 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x01, 0x01, 0x9f, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x19, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x01, + 0x01, 0x9f, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x19, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x01, 0x01, 0x9f, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x09, + 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0x9f, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0xff, 0x01, 0xf8, + 0x06, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x57, 0x01, 0xff, 0x06, 0x00, 0x01, 0x7f, + 0x01, 0xf0, 0x06, 0x00, 0x01, 0x53, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xe0, 0x06, 0x00, 0x01, 0xf9, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x1f, + 0x01, 0xc0, 0x06, 0x00, 0x01, 0xf8, 0x01, 0x70, 0x02, 0x00, 0x01, 0x03, 0x01, 0xf0, 0x02, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0xf8, 0x03, 0x00, + 0x01, 0x0c, 0x01, 0x18, 0x0a, 0x00, 0x01, 0x98, 0x03, 0x00, 0x01, 0x18, 0x01, 0x0c, 0x0a, 0x00, 0x01, 0x60, 0x03, 0x00, 0x01, 0x10, 0x01, 0x04, + 0x47, 0x00, 0x24, 0x00, 0x01, 0x03, 0x01, 0xc0, 0x05, 0x00, 0x01, 0xf0, 0x08, 0x00, 0x01, 0x7f, 0x01, 0xc0, 0x05, 0x00, 0x01, 0xff, 0x01, 0x80, + 0x06, 0x00, 0x01, 0x0f, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xc0, 0x07, 0x00, 0x01, 0xff, 0x01, 0x80, + 0x05, 0x00, 0x01, 0x78, 0x08, 0x00, 0x01, 0x07, 0x01, 0x80, 0x16, 0x00, 0x01, 0x70, 0x06, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x01, 0x01, 0xfc, + 0x06, 0x00, 0x01, 0x1f, 0x01, 0xc0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xe0, 0x06, 0x00, 0x01, 0x07, 0x01, 0xff, + 0x06, 0x00, 0x01, 0x7f, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x0f, + 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0xff, 0x01, 0xf8, + 0x06, 0x00, 0x01, 0x19, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x01, 0x01, 0x9f, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x19, 0x01, 0xff, 0x01, 0xc0, + 0x04, 0x00, 0x01, 0x01, 0x01, 0x9f, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x19, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x01, 0x01, 0x9f, 0x01, 0xfc, + 0x06, 0x00, 0x01, 0x09, 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0x9f, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, + 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x27, 0x01, 0xff, + 0x06, 0x00, 0x01, 0x7f, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x53, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xe0, 0x06, 0x00, 0x01, 0x51, 0x01, 0xfc, + 0x06, 0x00, 0x01, 0x1f, 0x01, 0xc0, 0x06, 0x00, 0x01, 0xf8, 0x01, 0x70, 0x02, 0x00, 0x01, 0x03, 0x01, 0xf0, 0x02, 0x00, 0x01, 0x07, 0x07, 0x00, + 0x01, 0xf8, 0x03, 0x00, 0x01, 0x0c, 0x01, 0x18, 0x0a, 0x00, 0x01, 0xf8, 0x03, 0x00, 0x01, 0x18, 0x01, 0x0c, 0x0a, 0x00, 0x01, 0x98, 0x03, 0x00, + 0x01, 0x10, 0x01, 0x04, 0x0a, 0x00, 0x01, 0x60, 0x3c, 0x00, 0x24, 0x00, 0x01, 0x03, 0x01, 0xc0, 0x05, 0x00, 0x01, 0xf0, 0x08, 0x00, 0x01, 0x7f, + 0x01, 0xc0, 0x05, 0x00, 0x01, 0xff, 0x01, 0x80, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x7f, + 0x01, 0xc0, 0x07, 0x00, 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0x78, 0x08, 0x00, 0x01, 0x07, 0x01, 0x80, 0x16, 0x00, 0x01, 0x70, 0x06, 0x00, + 0x01, 0x07, 0x07, 0x00, 0x01, 0x01, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xc0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x3f, + 0x01, 0xe0, 0x06, 0x00, 0x01, 0x07, 0x01, 0xff, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, + 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, + 0x01, 0x80, 0x05, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x19, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x01, 0x01, 0x9f, 0x01, 0xfc, + 0x06, 0x00, 0x01, 0x19, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x01, 0x01, 0x9f, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x19, 0x01, 0xff, 0x01, 0xc0, + 0x04, 0x00, 0x01, 0x01, 0x01, 0x9f, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x09, 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0x9f, 0x01, 0xf8, 0x06, 0x00, + 0x01, 0x2f, 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x5f, 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0xff, + 0x01, 0xf8, 0x06, 0x00, 0x01, 0x57, 0x01, 0xff, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xf0, 0x06, 0x00, 0x01, 0xfb, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x3f, + 0x01, 0xe0, 0x06, 0x00, 0x01, 0xf9, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xc0, 0x06, 0x00, 0x01, 0xf8, 0x01, 0x70, 0x02, 0x00, 0x01, 0x03, + 0x01, 0xf0, 0x02, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x98, 0x03, 0x00, 0x01, 0x0c, 0x01, 0x18, 0x0a, 0x00, 0x01, 0x60, 0x03, 0x00, 0x01, 0x18, + 0x01, 0x0c, 0x0e, 0x00, 0x01, 0x10, 0x01, 0x04, 0x47, 0x00, 0x73, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, + 0x05, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, + 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, + 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, + 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, + 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, + 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x02, 0x00, 0x01, 0x04, 0x01, 0x10, 0x02, 0x00, + 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x02, 0x00, 0x01, 0x1b, 0x01, 0x6c, 0x02, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x02, 0x00, 0x01, 0x20, + 0x01, 0x82, 0x02, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x53, 0x00, 0x73, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, + 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0xff, + 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, + 0x02, 0x70, 0x07, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x07, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, + 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x01, 0x07, 0x07, 0x00, + 0x01, 0x70, 0x07, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x07, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, + 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x02, 0x00, + 0x01, 0x04, 0x01, 0x10, 0x02, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x02, 0x00, 0x01, 0x1b, 0x01, 0x6c, 0x02, 0x00, 0x02, 0x70, 0x06, 0x00, + 0x02, 0x07, 0x02, 0x00, 0x01, 0x20, 0x01, 0x82, 0x02, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x53, 0x00, 0x73, 0x00, + 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, + 0x01, 0x80, 0x05, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, + 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x07, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, + 0x07, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, + 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x07, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, + 0x07, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, + 0x06, 0x00, 0x02, 0x07, 0x02, 0x00, 0x01, 0x04, 0x01, 0x10, 0x02, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x02, 0x00, 0x01, 0x1b, 0x01, 0x6c, + 0x02, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x02, 0x00, 0x01, 0x20, 0x01, 0x82, 0x02, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, + 0x02, 0x70, 0x53, 0x00, 0x73, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0xff, 0x01, 0xf8, + 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, + 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, + 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x07, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x07, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x06, 0x00, + 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, + 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x07, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x07, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, + 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x02, 0x00, 0x01, 0x04, 0x01, 0x10, 0x02, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, + 0x02, 0x00, 0x01, 0x1b, 0x01, 0x6c, 0x02, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x02, 0x00, 0x01, 0x20, 0x01, 0x82, 0x02, 0x00, 0x02, 0x70, + 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x53, 0x00, 0x73, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, + 0x05, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, + 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, + 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x07, 0x00, 0x01, 0x07, + 0x07, 0x00, 0x01, 0x70, 0x07, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, + 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x07, 0x00, 0x01, 0x07, + 0x07, 0x00, 0x01, 0x70, 0x07, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x02, 0x00, 0x01, 0x04, 0x01, 0x10, 0x02, 0x00, + 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x02, 0x00, 0x01, 0x1b, 0x01, 0x6c, 0x02, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x02, 0x00, 0x01, 0x20, + 0x01, 0x82, 0x02, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x53, 0x00, 0x73, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, + 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0xff, + 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, + 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, + 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x07, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x07, 0x00, 0x01, 0x07, 0x07, 0x00, + 0x01, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, + 0x02, 0x70, 0x06, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x07, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x07, 0x00, 0x02, 0x07, 0x02, 0x00, + 0x01, 0x04, 0x01, 0x10, 0x02, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x02, 0x00, 0x01, 0x1b, 0x01, 0x6c, 0x02, 0x00, 0x02, 0x70, 0x06, 0x00, + 0x02, 0x07, 0x02, 0x00, 0x01, 0x20, 0x01, 0x82, 0x02, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x53, 0x00, 0x73, 0x00, + 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, + 0x01, 0x80, 0x05, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, + 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, + 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, + 0x07, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x07, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, + 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, + 0x07, 0x00, 0x01, 0x07, 0x03, 0x00, 0x01, 0x04, 0x01, 0x10, 0x02, 0x00, 0x01, 0x70, 0x07, 0x00, 0x02, 0x07, 0x02, 0x00, 0x01, 0x1b, 0x01, 0x6c, + 0x02, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x02, 0x00, 0x01, 0x20, 0x01, 0x82, 0x02, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, + 0x02, 0x70, 0x53, 0x00, 0x73, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0xff, 0x01, 0xf8, + 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, + 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, + 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, + 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x07, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x07, 0x00, + 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, + 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x01, 0x07, 0x03, 0x00, 0x01, 0x04, 0x01, 0x10, 0x02, 0x00, 0x01, 0x70, 0x07, 0x00, 0x01, 0x07, + 0x03, 0x00, 0x01, 0x1b, 0x01, 0x6c, 0x02, 0x00, 0x01, 0x70, 0x07, 0x00, 0x02, 0x07, 0x02, 0x00, 0x01, 0x20, 0x01, 0x82, 0x02, 0x00, 0x02, 0x70, + 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x53, 0x00, 0x73, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, + 0x05, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, + 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x07, 0x00, 0x01, 0x07, + 0x07, 0x00, 0x01, 0x70, 0x07, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, + 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, + 0x06, 0x00, 0x02, 0x70, 0x07, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x07, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x06, 0x00, 0x02, 0x07, + 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x02, 0x00, 0x01, 0x04, 0x01, 0x10, 0x02, 0x00, + 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x02, 0x00, 0x01, 0x1b, 0x01, 0x6c, 0x02, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x02, 0x00, 0x01, 0x20, + 0x01, 0x82, 0x02, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x53, 0x00, 0x73, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, + 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0xff, + 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, + 0x02, 0x70, 0x06, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x07, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x07, 0x00, 0x02, 0x07, 0x06, 0x00, + 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, + 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x07, 0x00, 0x01, 0x07, 0x07, 0x00, + 0x01, 0x70, 0x07, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x02, 0x00, + 0x01, 0x04, 0x01, 0x10, 0x02, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x02, 0x00, 0x01, 0x1b, 0x01, 0x6c, 0x02, 0x00, 0x02, 0x70, 0x06, 0x00, + 0x02, 0x07, 0x02, 0x00, 0x01, 0x20, 0x01, 0x82, 0x02, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x53, 0x00, 0x73, 0x00, + 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, + 0x01, 0x80, 0x05, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, + 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, + 0x07, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x07, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, + 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, + 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x07, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x07, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, + 0x06, 0x00, 0x02, 0x07, 0x02, 0x00, 0x01, 0x04, 0x01, 0x10, 0x02, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x02, 0x00, 0x01, 0x1b, 0x01, 0x6c, + 0x02, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x02, 0x00, 0x01, 0x20, 0x01, 0x82, 0x02, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, + 0x02, 0x70, 0x53, 0x00, 0x73, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0xff, 0x01, 0xf8, + 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, + 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, + 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x07, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x07, 0x00, + 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, + 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x07, 0x00, + 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x07, 0x00, 0x01, 0x07, 0x02, 0x00, 0x01, 0x04, 0x01, 0x10, 0x03, 0x00, 0x01, 0x70, 0x06, 0x00, 0x02, 0x07, + 0x02, 0x00, 0x01, 0x1b, 0x01, 0x6c, 0x02, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x02, 0x00, 0x01, 0x20, 0x01, 0x82, 0x02, 0x00, 0x02, 0x70, + 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x53, 0x00, 0x73, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, + 0x05, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, + 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, + 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x01, 0x07, + 0x07, 0x00, 0x01, 0x70, 0x07, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x07, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, + 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, + 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x07, 0x00, 0x01, 0x07, 0x02, 0x00, 0x01, 0x04, 0x01, 0x10, 0x03, 0x00, + 0x01, 0x70, 0x07, 0x00, 0x01, 0x07, 0x02, 0x00, 0x01, 0x1b, 0x01, 0x6c, 0x03, 0x00, 0x01, 0x70, 0x06, 0x00, 0x02, 0x07, 0x02, 0x00, 0x01, 0x20, + 0x01, 0x82, 0x02, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x53, 0x00, 0x73, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, + 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0xff, + 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, 0x01, 0x80, 0x05, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, + 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, + 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x01, 0x07, 0x07, 0x00, 0x01, 0x70, 0x07, 0x00, 0x01, 0x07, 0x07, 0x00, + 0x01, 0x70, 0x07, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, + 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x06, 0x00, 0x02, 0x07, 0x02, 0x00, + 0x01, 0x04, 0x01, 0x10, 0x02, 0x00, 0x02, 0x70, 0x07, 0x00, 0x01, 0x07, 0x02, 0x00, 0x01, 0x1b, 0x01, 0x6c, 0x03, 0x00, 0x01, 0x70, 0x07, 0x00, + 0x01, 0x07, 0x02, 0x00, 0x01, 0x20, 0x01, 0x82, 0x03, 0x00, 0x01, 0x70, 0x06, 0x00, 0x02, 0x07, 0x06, 0x00, 0x02, 0x70, 0x53, 0x00, 0x3e, 0x00, + 0x01, 0x22, 0x03, 0x00, 0x01, 0x07, 0x01, 0x80, 0x09, 0x00, 0x01, 0xf0, 0x01, 0x22, 0x03, 0x00, 0x01, 0x07, 0x01, 0xf0, 0x08, 0x00, 0x01, 0x07, + 0x01, 0xf0, 0x01, 0x22, 0x03, 0x00, 0x01, 0x07, 0x01, 0xfe, 0x08, 0x00, 0x01, 0x3f, 0x01, 0xf0, 0x01, 0x22, 0x03, 0x00, 0x01, 0x01, 0x01, 0xff, + 0x01, 0xc0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xc1, 0x01, 0xe3, 0x01, 0xc0, 0x03, 0x00, 0x01, 0x3f, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x1f, + 0x01, 0xfe, 0x06, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0xff, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf0, + 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xf0, 0x01, 0x01, 0x01, 0xe3, 0x01, 0xc0, 0x03, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xfc, 0x04, 0x00, + 0x01, 0x1f, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x00, 0x01, 0x22, 0x04, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xfc, 0x04, 0x00, 0x01, 0x1f, 0x01, 0xff, + 0x01, 0xfc, 0x01, 0x00, 0x01, 0x22, 0x04, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xfc, 0x04, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xfe, 0x01, 0x00, + 0x01, 0x22, 0x04, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x01, 0x00, 0x01, 0x22, 0x04, 0x00, + 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, + 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, + 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, + 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, + 0x01, 0x0f, 0x01, 0xff, 0x06, 0x00, 0x01, 0xff, 0x01, 0xf0, 0x2a, 0x00, 0x01, 0x03, 0x01, 0xf0, 0x0e, 0x00, 0x01, 0x0c, 0x01, 0x18, 0x0e, 0x00, + 0x01, 0x18, 0x01, 0x0c, 0x0e, 0x00, 0x01, 0x10, 0x01, 0x04, 0x47, 0x00, 0x42, 0x00, 0x01, 0x07, 0x01, 0x80, 0x09, 0x00, 0x01, 0xf0, 0x04, 0x00, + 0x01, 0x07, 0x01, 0xf0, 0x08, 0x00, 0x01, 0x07, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xfe, 0x08, 0x00, 0x01, 0x3f, 0x01, 0xf0, 0x04, 0x00, + 0x01, 0x01, 0x01, 0xff, 0x01, 0xc0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xc0, 0x05, 0x00, 0x01, 0x3f, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x1f, + 0x01, 0xfe, 0x06, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0xff, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf0, + 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xfc, 0x04, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xfc, + 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xfc, 0x04, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xfc, + 0x04, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, + 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, + 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, + 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, + 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, + 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x06, 0x00, 0x01, 0xff, 0x01, 0xf0, 0x2a, 0x00, 0x01, 0x03, 0x01, 0xf0, 0x0e, 0x00, 0x01, 0x0c, 0x01, 0x18, + 0x0e, 0x00, 0x01, 0x18, 0x01, 0x0c, 0x0e, 0x00, 0x01, 0x10, 0x01, 0x04, 0x47, 0x00, 0x3e, 0x00, 0x01, 0x22, 0x03, 0x00, 0x01, 0x07, 0x01, 0x80, + 0x09, 0x00, 0x01, 0xf0, 0x01, 0x22, 0x03, 0x00, 0x01, 0x07, 0x01, 0xf0, 0x08, 0x00, 0x01, 0x07, 0x01, 0xf0, 0x01, 0x22, 0x03, 0x00, 0x01, 0x07, + 0x01, 0xfe, 0x08, 0x00, 0x01, 0x3f, 0x01, 0xf0, 0x01, 0x22, 0x03, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xc0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xff, + 0x01, 0xc1, 0x01, 0xe3, 0x01, 0xc0, 0x03, 0x00, 0x01, 0x3f, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x07, 0x01, 0xff, + 0x01, 0x80, 0x05, 0x00, 0x01, 0xff, 0x01, 0xf0, 0x07, 0x00, 0x01, 0xff, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0x00, 0x01, 0x01, + 0x01, 0xe3, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xfc, 0x04, 0x00, 0x01, 0x1f, 0x01, 0xf8, 0x02, 0x00, 0x01, 0x22, 0x05, 0x00, 0x01, 0x01, + 0x01, 0xfc, 0x04, 0x00, 0x01, 0x1f, 0x01, 0xc0, 0x02, 0x00, 0x01, 0x22, 0x06, 0x00, 0x01, 0x3c, 0x04, 0x00, 0x01, 0x1e, 0x03, 0x00, 0x01, 0x22, + 0x04, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf8, 0x01, 0x00, 0x01, 0x22, 0x04, 0x00, 0x01, 0x3f, + 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, + 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x1f, + 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf8, 0x5a, 0x00, 0x01, 0x03, 0x01, 0xf0, 0x0e, 0x00, 0x01, 0x0c, 0x01, 0x18, + 0x0e, 0x00, 0x01, 0x18, 0x01, 0x0c, 0x0e, 0x00, 0x01, 0x10, 0x01, 0x04, 0x47, 0x00, 0x3e, 0x00, 0x01, 0x22, 0x03, 0x00, 0x01, 0x07, 0x01, 0x80, + 0x09, 0x00, 0x01, 0xf0, 0x01, 0x22, 0x03, 0x00, 0x01, 0x07, 0x01, 0xf0, 0x08, 0x00, 0x01, 0x07, 0x01, 0xf0, 0x01, 0x22, 0x03, 0x00, 0x01, 0x07, + 0x01, 0xfe, 0x08, 0x00, 0x01, 0x3f, 0x01, 0xf0, 0x01, 0x22, 0x03, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xc0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xff, + 0x01, 0xc1, 0x01, 0xe3, 0x01, 0xc0, 0x03, 0x00, 0x01, 0x3f, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x07, 0x01, 0xff, + 0x01, 0x80, 0x05, 0x00, 0x01, 0xff, 0x01, 0xf0, 0x07, 0x00, 0x01, 0xff, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0x00, 0x01, 0x01, + 0x01, 0xe3, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xfc, 0x04, 0x00, 0x01, 0x1f, 0x01, 0xf8, 0x02, 0x00, 0x01, 0x22, 0x05, 0x00, 0x01, 0x01, + 0x01, 0xfc, 0x04, 0x00, 0x01, 0x1f, 0x01, 0xc0, 0x02, 0x00, 0x01, 0x22, 0x06, 0x00, 0x01, 0x3c, 0x04, 0x00, 0x01, 0x1e, 0x03, 0x00, 0x01, 0x22, + 0x0f, 0x00, 0x01, 0x22, 0x04, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x7f, + 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, + 0x01, 0xff, 0x01, 0xfc, 0x6a, 0x00, 0x01, 0x03, 0x01, 0xf0, 0x0e, 0x00, 0x01, 0x0c, 0x01, 0x18, 0x0e, 0x00, 0x01, 0x18, 0x01, 0x0c, 0x0e, 0x00, + 0x01, 0x10, 0x01, 0x04, 0x47, 0x00, 0x3e, 0x00, 0x01, 0x22, 0x03, 0x00, 0x01, 0x07, 0x01, 0x80, 0x09, 0x00, 0x01, 0xf0, 0x01, 0x22, 0x03, 0x00, + 0x01, 0x07, 0x01, 0xf0, 0x08, 0x00, 0x01, 0x07, 0x01, 0xf0, 0x01, 0x22, 0x03, 0x00, 0x01, 0x07, 0x01, 0xfe, 0x08, 0x00, 0x01, 0x3f, 0x01, 0xf0, + 0x01, 0x22, 0x03, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xc0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xc1, 0x01, 0xe3, 0x01, 0xc0, 0x03, 0x00, + 0x01, 0x3f, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0xff, 0x01, 0xf0, + 0x07, 0x00, 0x01, 0xff, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0x00, 0x01, 0x01, 0x01, 0xe3, 0x01, 0xc0, 0x03, 0x00, 0x01, 0x0f, + 0x01, 0xff, 0x01, 0xfc, 0x04, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xf0, 0x01, 0x00, 0x01, 0x22, 0x04, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xfc, + 0x04, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x00, 0x01, 0x22, 0x04, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xfc, 0x04, 0x00, 0x01, 0x1f, + 0x01, 0xff, 0x01, 0xfc, 0x01, 0x00, 0x01, 0x22, 0x04, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, + 0x01, 0x00, 0x01, 0x22, 0x04, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, + 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, + 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x3f, + 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x04, 0x00, 0x01, 0x03, + 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x06, 0x00, 0x01, 0xff, 0x01, 0xf0, 0x2a, 0x00, 0x01, 0x03, 0x01, 0xf0, 0x0e, 0x00, + 0x01, 0x0c, 0x01, 0x18, 0x0e, 0x00, 0x01, 0x18, 0x01, 0x0c, 0x0e, 0x00, 0x01, 0x10, 0x01, 0x04, 0x47, 0x00, 0x73, 0x00, 0x01, 0x0c, 0x08, 0x00, + 0x01, 0x0c, 0x01, 0x00, 0x01, 0x08, 0x04, 0x00, 0x01, 0x0f, 0x08, 0x00, 0x01, 0x3c, 0x01, 0x00, 0x01, 0x14, 0x04, 0x00, 0x01, 0x07, 0x01, 0x80, + 0x07, 0x00, 0x01, 0x78, 0x01, 0x00, 0x01, 0x14, 0x04, 0x00, 0x01, 0x01, 0x01, 0xc0, 0x07, 0x00, 0x01, 0xe0, 0x01, 0x00, 0x01, 0x3e, 0x05, 0x00, + 0x01, 0xf0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xc0, 0x01, 0x00, 0x01, 0x3e, 0x05, 0x00, 0x01, 0x78, 0x06, 0x00, 0x01, 0x07, 0x01, 0x80, 0x01, 0x00, + 0x01, 0x3e, 0x05, 0x00, 0x01, 0x1e, 0x06, 0x00, 0x01, 0x1e, 0x02, 0x00, 0x01, 0x26, 0x05, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x01, 0x3c, 0x02, 0x00, + 0x01, 0x18, 0x05, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x01, 0x3c, 0x08, 0x00, 0x01, 0x1e, 0x06, 0x00, 0x01, 0x1e, 0x08, 0x00, 0x01, 0x38, 0x06, 0x00, + 0x01, 0x07, 0x08, 0x00, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xc0, 0x06, 0x00, 0x01, 0x01, 0x01, 0xe0, 0x06, 0x00, 0x01, 0x01, 0x01, 0xe0, + 0x06, 0x00, 0x01, 0x07, 0x01, 0x80, 0x07, 0x00, 0x01, 0x78, 0x06, 0x00, 0x01, 0x0f, 0x08, 0x00, 0x01, 0x3c, 0x06, 0x00, 0x01, 0x0c, 0x08, 0x00, + 0x01, 0x0c, 0x0a, 0x00, 0x01, 0x04, 0x01, 0x10, 0x0e, 0x00, 0x01, 0x1b, 0x01, 0x6c, 0x0e, 0x00, 0x01, 0x20, 0x01, 0x82, 0x67, 0x00, 0x73, 0x00, + 0x01, 0x0c, 0x08, 0x00, 0x01, 0x0c, 0x06, 0x00, 0x01, 0x0f, 0x08, 0x00, 0x01, 0x3c, 0x01, 0x00, 0x01, 0x08, 0x04, 0x00, 0x01, 0x07, 0x01, 0x80, + 0x07, 0x00, 0x01, 0x78, 0x01, 0x00, 0x01, 0x14, 0x04, 0x00, 0x01, 0x01, 0x01, 0xc0, 0x07, 0x00, 0x01, 0xe0, 0x01, 0x00, 0x01, 0x14, 0x05, 0x00, + 0x01, 0xf0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xc0, 0x01, 0x00, 0x01, 0x3e, 0x05, 0x00, 0x01, 0x78, 0x06, 0x00, 0x01, 0x07, 0x01, 0x80, 0x01, 0x00, + 0x01, 0x3e, 0x05, 0x00, 0x01, 0x1e, 0x06, 0x00, 0x01, 0x1e, 0x02, 0x00, 0x01, 0x3e, 0x05, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x01, 0x3c, 0x02, 0x00, + 0x01, 0x26, 0x05, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x01, 0x3c, 0x02, 0x00, 0x01, 0x18, 0x05, 0x00, 0x01, 0x1e, 0x06, 0x00, 0x01, 0x1e, 0x08, 0x00, + 0x01, 0x38, 0x06, 0x00, 0x01, 0x07, 0x08, 0x00, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xc0, 0x06, 0x00, 0x01, 0x01, 0x01, 0xe0, 0x06, 0x00, + 0x01, 0x01, 0x01, 0xe0, 0x06, 0x00, 0x01, 0x07, 0x01, 0x80, 0x07, 0x00, 0x01, 0x78, 0x06, 0x00, 0x01, 0x0f, 0x08, 0x00, 0x01, 0x3c, 0x06, 0x00, + 0x01, 0x0c, 0x08, 0x00, 0x01, 0x0c, 0x0a, 0x00, 0x01, 0x04, 0x01, 0x10, 0x0e, 0x00, 0x01, 0x1b, 0x01, 0x6c, 0x0e, 0x00, 0x01, 0x20, 0x01, 0x82, + 0x67, 0x00, 0x73, 0x00, 0x01, 0x0c, 0x08, 0x00, 0x01, 0x0c, 0x06, 0x00, 0x01, 0x0f, 0x08, 0x00, 0x01, 0x3c, 0x06, 0x00, 0x01, 0x07, 0x01, 0x80, + 0x07, 0x00, 0x01, 0x78, 0x01, 0x00, 0x01, 0x08, 0x04, 0x00, 0x01, 0x01, 0x01, 0xc0, 0x07, 0x00, 0x01, 0xe0, 0x01, 0x00, 0x01, 0x14, 0x05, 0x00, + 0x01, 0xf0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xc0, 0x01, 0x00, 0x01, 0x14, 0x05, 0x00, 0x01, 0x78, 0x06, 0x00, 0x01, 0x07, 0x01, 0x80, 0x01, 0x00, + 0x01, 0x3e, 0x05, 0x00, 0x01, 0x1e, 0x06, 0x00, 0x01, 0x1e, 0x02, 0x00, 0x01, 0x3e, 0x05, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x01, 0x3c, 0x02, 0x00, + 0x01, 0x3e, 0x05, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x01, 0x3c, 0x02, 0x00, 0x01, 0x26, 0x05, 0x00, 0x01, 0x1e, 0x06, 0x00, 0x01, 0x1e, 0x02, 0x00, + 0x01, 0x18, 0x05, 0x00, 0x01, 0x38, 0x06, 0x00, 0x01, 0x07, 0x08, 0x00, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xc0, 0x06, 0x00, 0x01, 0x01, + 0x01, 0xe0, 0x06, 0x00, 0x01, 0x01, 0x01, 0xe0, 0x06, 0x00, 0x01, 0x07, 0x01, 0x80, 0x07, 0x00, 0x01, 0x78, 0x06, 0x00, 0x01, 0x0f, 0x08, 0x00, + 0x01, 0x3c, 0x06, 0x00, 0x01, 0x0c, 0x08, 0x00, 0x01, 0x0c, 0x0a, 0x00, 0x01, 0x04, 0x01, 0x10, 0x0e, 0x00, 0x01, 0x1b, 0x01, 0x6c, 0x0e, 0x00, + 0x01, 0x20, 0x01, 0x82, 0x67, 0x00, 0x73, 0x00, 0x01, 0x0c, 0x08, 0x00, 0x01, 0x0c, 0x06, 0x00, 0x01, 0x0f, 0x08, 0x00, 0x01, 0x3c, 0x06, 0x00, + 0x01, 0x07, 0x01, 0x80, 0x07, 0x00, 0x01, 0x78, 0x06, 0x00, 0x01, 0x01, 0x01, 0xc0, 0x07, 0x00, 0x01, 0xe0, 0x01, 0x00, 0x01, 0x08, 0x05, 0x00, + 0x01, 0xf0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xc0, 0x01, 0x00, 0x01, 0x14, 0x05, 0x00, 0x01, 0x78, 0x06, 0x00, 0x01, 0x07, 0x01, 0x80, 0x01, 0x00, + 0x01, 0x14, 0x05, 0x00, 0x01, 0x1e, 0x06, 0x00, 0x01, 0x1e, 0x02, 0x00, 0x01, 0x3e, 0x05, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x01, 0x3c, 0x02, 0x00, + 0x01, 0x3e, 0x05, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x01, 0x3c, 0x02, 0x00, 0x01, 0x3e, 0x05, 0x00, 0x01, 0x1e, 0x06, 0x00, 0x01, 0x1e, 0x02, 0x00, + 0x01, 0x26, 0x05, 0x00, 0x01, 0x38, 0x06, 0x00, 0x01, 0x07, 0x02, 0x00, 0x01, 0x18, 0x05, 0x00, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xc0, + 0x06, 0x00, 0x01, 0x01, 0x01, 0xe0, 0x06, 0x00, 0x01, 0x01, 0x01, 0xe0, 0x06, 0x00, 0x01, 0x07, 0x01, 0x80, 0x07, 0x00, 0x01, 0x78, 0x06, 0x00, + 0x01, 0x0f, 0x08, 0x00, 0x01, 0x3c, 0x06, 0x00, 0x01, 0x0c, 0x08, 0x00, 0x01, 0x0c, 0x0a, 0x00, 0x01, 0x04, 0x01, 0x10, 0x0e, 0x00, 0x01, 0x1b, + 0x01, 0x6c, 0x0e, 0x00, 0x01, 0x20, 0x01, 0x82, 0x67, 0x00, 0x73, 0x00, 0x01, 0x0c, 0x08, 0x00, 0x01, 0x0c, 0x06, 0x00, 0x01, 0x0f, 0x08, 0x00, + 0x01, 0x3c, 0x06, 0x00, 0x01, 0x07, 0x01, 0x80, 0x07, 0x00, 0x01, 0x78, 0x06, 0x00, 0x01, 0x01, 0x01, 0xc0, 0x07, 0x00, 0x01, 0xe0, 0x07, 0x00, + 0x01, 0xf0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xc0, 0x01, 0x00, 0x01, 0x08, 0x05, 0x00, 0x01, 0x78, 0x06, 0x00, 0x01, 0x07, 0x01, 0x80, 0x01, 0x00, + 0x01, 0x14, 0x05, 0x00, 0x01, 0x1e, 0x06, 0x00, 0x01, 0x1e, 0x02, 0x00, 0x01, 0x14, 0x05, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x01, 0x3c, 0x02, 0x00, + 0x01, 0x3e, 0x05, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x01, 0x3c, 0x02, 0x00, 0x01, 0x3e, 0x05, 0x00, 0x01, 0x1e, 0x06, 0x00, 0x01, 0x1e, 0x02, 0x00, + 0x01, 0x3e, 0x05, 0x00, 0x01, 0x38, 0x06, 0x00, 0x01, 0x07, 0x02, 0x00, 0x01, 0x26, 0x05, 0x00, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xc0, + 0x01, 0x00, 0x01, 0x18, 0x04, 0x00, 0x01, 0x01, 0x01, 0xe0, 0x06, 0x00, 0x01, 0x01, 0x01, 0xe0, 0x06, 0x00, 0x01, 0x07, 0x01, 0x80, 0x07, 0x00, + 0x01, 0x78, 0x06, 0x00, 0x01, 0x0f, 0x08, 0x00, 0x01, 0x3c, 0x06, 0x00, 0x01, 0x0c, 0x08, 0x00, 0x01, 0x0c, 0x0a, 0x00, 0x01, 0x04, 0x01, 0x10, + 0x0e, 0x00, 0x01, 0x1b, 0x01, 0x6c, 0x0e, 0x00, 0x01, 0x20, 0x01, 0x82, 0x67, 0x00, 0x73, 0x00, 0x01, 0x0c, 0x08, 0x00, 0x01, 0x0c, 0x06, 0x00, + 0x01, 0x0f, 0x08, 0x00, 0x01, 0x3c, 0x06, 0x00, 0x01, 0x07, 0x01, 0x80, 0x07, 0x00, 0x01, 0x78, 0x06, 0x00, 0x01, 0x01, 0x01, 0xc0, 0x07, 0x00, + 0x01, 0xe0, 0x07, 0x00, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xc0, 0x07, 0x00, 0x01, 0x78, 0x06, 0x00, 0x01, 0x07, 0x01, 0x80, 0x01, 0x00, + 0x01, 0x08, 0x05, 0x00, 0x01, 0x1e, 0x06, 0x00, 0x01, 0x1e, 0x02, 0x00, 0x01, 0x14, 0x05, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x01, 0x3c, 0x02, 0x00, + 0x01, 0x14, 0x05, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x01, 0x3c, 0x02, 0x00, 0x01, 0x3e, 0x05, 0x00, 0x01, 0x1e, 0x06, 0x00, 0x01, 0x1e, 0x02, 0x00, + 0x01, 0x3e, 0x05, 0x00, 0x01, 0x38, 0x06, 0x00, 0x01, 0x07, 0x02, 0x00, 0x01, 0x3e, 0x05, 0x00, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xc0, + 0x01, 0x00, 0x01, 0x26, 0x04, 0x00, 0x01, 0x01, 0x01, 0xe0, 0x06, 0x00, 0x01, 0x01, 0x01, 0xe0, 0x01, 0x00, 0x01, 0x18, 0x04, 0x00, 0x01, 0x07, + 0x01, 0x80, 0x07, 0x00, 0x01, 0x78, 0x06, 0x00, 0x01, 0x0f, 0x08, 0x00, 0x01, 0x3c, 0x06, 0x00, 0x01, 0x0c, 0x08, 0x00, 0x01, 0x0c, 0x0a, 0x00, + 0x01, 0x04, 0x01, 0x10, 0x0e, 0x00, 0x01, 0x1b, 0x01, 0x6c, 0x0e, 0x00, 0x01, 0x20, 0x01, 0x82, 0x67, 0x00, 0x73, 0x00, 0x01, 0x0c, 0x08, 0x00, + 0x01, 0x0c, 0x06, 0x00, 0x01, 0x0f, 0x08, 0x00, 0x01, 0x3c, 0x06, 0x00, 0x01, 0x07, 0x01, 0x80, 0x07, 0x00, 0x01, 0x78, 0x06, 0x00, 0x01, 0x01, + 0x01, 0xc0, 0x07, 0x00, 0x01, 0xe0, 0x07, 0x00, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xc0, 0x07, 0x00, 0x01, 0x78, 0x06, 0x00, 0x01, 0x07, + 0x01, 0x80, 0x07, 0x00, 0x01, 0x1e, 0x06, 0x00, 0x01, 0x1e, 0x02, 0x00, 0x01, 0x08, 0x05, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x01, 0x3c, 0x02, 0x00, + 0x01, 0x14, 0x05, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x01, 0x3c, 0x02, 0x00, 0x01, 0x14, 0x05, 0x00, 0x01, 0x1e, 0x06, 0x00, 0x01, 0x1e, 0x02, 0x00, + 0x01, 0x3e, 0x05, 0x00, 0x01, 0x38, 0x06, 0x00, 0x01, 0x07, 0x02, 0x00, 0x01, 0x3e, 0x05, 0x00, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xc0, + 0x01, 0x00, 0x01, 0x3e, 0x04, 0x00, 0x01, 0x01, 0x01, 0xe0, 0x06, 0x00, 0x01, 0x01, 0x01, 0xe0, 0x01, 0x00, 0x01, 0x26, 0x04, 0x00, 0x01, 0x07, + 0x01, 0x80, 0x07, 0x00, 0x01, 0x78, 0x01, 0x00, 0x01, 0x18, 0x04, 0x00, 0x01, 0x0f, 0x08, 0x00, 0x01, 0x3c, 0x06, 0x00, 0x01, 0x0c, 0x08, 0x00, + 0x01, 0x0c, 0x0a, 0x00, 0x01, 0x04, 0x01, 0x10, 0x0e, 0x00, 0x01, 0x1b, 0x01, 0x6c, 0x0e, 0x00, 0x01, 0x20, 0x01, 0x82, 0x67, 0x00, 0x73, 0x00, + 0x01, 0x0c, 0x08, 0x00, 0x01, 0x0c, 0x06, 0x00, 0x01, 0x0f, 0x08, 0x00, 0x01, 0x3c, 0x06, 0x00, 0x01, 0x07, 0x01, 0x80, 0x07, 0x00, 0x01, 0x78, + 0x06, 0x00, 0x01, 0x01, 0x01, 0xc0, 0x07, 0x00, 0x01, 0xe0, 0x07, 0x00, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xc0, 0x07, 0x00, 0x01, 0x78, + 0x06, 0x00, 0x01, 0x07, 0x01, 0x80, 0x07, 0x00, 0x01, 0x1e, 0x06, 0x00, 0x01, 0x1e, 0x08, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x01, 0x3c, 0x02, 0x00, + 0x01, 0x08, 0x05, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x01, 0x3c, 0x02, 0x00, 0x01, 0x14, 0x05, 0x00, 0x01, 0x1e, 0x06, 0x00, 0x01, 0x1e, 0x02, 0x00, + 0x01, 0x14, 0x05, 0x00, 0x01, 0x38, 0x06, 0x00, 0x01, 0x07, 0x02, 0x00, 0x01, 0x3e, 0x05, 0x00, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xc0, + 0x01, 0x00, 0x01, 0x3e, 0x04, 0x00, 0x01, 0x01, 0x01, 0xe0, 0x06, 0x00, 0x01, 0x01, 0x01, 0xe0, 0x01, 0x00, 0x01, 0x3e, 0x04, 0x00, 0x01, 0x07, + 0x01, 0x80, 0x07, 0x00, 0x01, 0x78, 0x01, 0x00, 0x01, 0x26, 0x04, 0x00, 0x01, 0x0f, 0x08, 0x00, 0x01, 0x3c, 0x01, 0x00, 0x01, 0x18, 0x04, 0x00, + 0x01, 0x0c, 0x08, 0x00, 0x01, 0x0c, 0x0a, 0x00, 0x01, 0x04, 0x01, 0x10, 0x0e, 0x00, 0x01, 0x1b, 0x01, 0x6c, 0x0e, 0x00, 0x01, 0x20, 0x01, 0x82, + 0x67, 0x00, 0xb3, 0x00, 0x01, 0x70, 0x01, 0x00, 0x01, 0x38, 0x04, 0x00, 0x01, 0x07, 0x01, 0x00, 0x01, 0x03, 0x01, 0x80, 0x05, 0x00, 0x01, 0x78, + 0x01, 0x00, 0x01, 0x78, 0x04, 0x00, 0x01, 0x07, 0x01, 0x80, 0x01, 0x07, 0x01, 0x80, 0x05, 0x00, 0x01, 0x3f, 0x01, 0x03, 0x01, 0xf0, 0x04, 0x00, + 0x01, 0x03, 0x01, 0xf0, 0x01, 0x3f, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xc0, 0x05, 0x00, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x01, + 0x01, 0xfe, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xe0, 0x45, 0x00, 0x01, 0x10, 0x01, 0x80, 0x08, 0x00, 0x01, 0x04, 0x01, 0x20, 0x04, 0x00, 0x01, 0x21, + 0x09, 0x00, 0x01, 0x08, 0x01, 0x40, 0x04, 0x00, 0x01, 0x21, 0x09, 0x00, 0x01, 0x08, 0x01, 0x40, 0x04, 0x00, 0x01, 0x42, 0x04, 0x00, 0x01, 0x20, + 0x01, 0x02, 0x03, 0x00, 0x01, 0x10, 0x01, 0x80, 0x04, 0x00, 0x01, 0x42, 0x04, 0x00, 0x01, 0x10, 0x01, 0x84, 0x03, 0x00, 0x01, 0x10, 0x01, 0x80, + 0x09, 0x00, 0x01, 0x10, 0x01, 0xc4, 0x0e, 0x00, 0x01, 0x0f, 0x01, 0x78, 0x57, 0x00, 0xb3, 0x00, 0x01, 0x70, 0x01, 0x00, 0x01, 0x38, 0x04, 0x00, + 0x01, 0x07, 0x01, 0x00, 0x01, 0x03, 0x01, 0x80, 0x05, 0x00, 0x01, 0x78, 0x01, 0x00, 0x01, 0x78, 0x04, 0x00, 0x01, 0x07, 0x01, 0x80, 0x01, 0x07, + 0x01, 0x80, 0x05, 0x00, 0x01, 0x3f, 0x01, 0x03, 0x01, 0xf0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xf0, 0x01, 0x3f, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, + 0x01, 0xc0, 0x05, 0x00, 0x01, 0xff, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x01, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xe0, 0x7a, 0x00, 0x01, 0x20, + 0x01, 0x02, 0x0e, 0x00, 0x01, 0x10, 0x01, 0x84, 0x0e, 0x00, 0x01, 0x10, 0x01, 0xc4, 0x0e, 0x00, 0x01, 0x0f, 0x01, 0x78, 0x57, 0x00, 0x73, 0x00, + 0x01, 0x07, 0x01, 0x0e, 0x06, 0x00, 0x01, 0x70, 0x01, 0xe0, 0x06, 0x00, 0x01, 0x0f, 0x01, 0x9f, 0x06, 0x00, 0x01, 0xf9, 0x01, 0xf0, 0x04, 0x00, + 0x01, 0x02, 0x01, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x06, 0x01, 0x00, + 0x01, 0x1f, 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x01, 0x80, 0x01, 0x1f, 0x01, 0xff, + 0x01, 0x80, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x03, 0x01, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, + 0x01, 0x01, 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, + 0x01, 0xf8, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x06, 0x00, 0x01, 0xff, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x07, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, + 0x01, 0xe0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xc0, 0x06, 0x00, 0x01, 0x01, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x1f, + 0x01, 0x80, 0x07, 0x00, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x0f, 0x08, 0x00, 0x01, 0x60, 0x06, 0x00, 0x01, 0x06, 0x12, 0x00, 0x01, 0x40, 0x0f, 0x00, + 0x01, 0xc0, 0x0e, 0x00, 0x01, 0x01, 0x01, 0xf0, 0x08, 0x00, 0x01, 0x20, 0x01, 0x02, 0x05, 0x00, 0x01, 0x60, 0x08, 0x00, 0x01, 0x10, 0x01, 0x84, + 0x05, 0x00, 0x01, 0x40, 0x08, 0x00, 0x01, 0x10, 0x01, 0xc4, 0x0e, 0x00, 0x01, 0x0f, 0x01, 0x78, 0x57, 0x00, 0x83, 0x00, 0x01, 0x07, 0x01, 0x0e, + 0x06, 0x00, 0x01, 0x70, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x0f, 0x01, 0x9f, 0x06, 0x00, 0x01, 0xf9, 0x01, 0xf0, 0x04, 0x00, + 0x01, 0x06, 0x01, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x01, 0x80, + 0x01, 0x1f, 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x03, 0x01, 0x00, 0x01, 0x1f, 0x01, 0xff, + 0x01, 0x80, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, + 0x01, 0x01, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, + 0x01, 0x0f, 0x01, 0xff, 0x06, 0x00, 0x01, 0xff, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x07, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xe0, 0x06, 0x00, + 0x01, 0x03, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xc0, 0x06, 0x00, 0x01, 0x01, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x1f, 0x01, 0x80, 0x07, 0x00, + 0x01, 0xf0, 0x06, 0x00, 0x01, 0x0f, 0x08, 0x00, 0x01, 0x60, 0x06, 0x00, 0x01, 0x06, 0x02, 0x00, 0x01, 0x40, 0x0f, 0x00, 0x01, 0xc0, 0x0e, 0x00, + 0x01, 0x01, 0x01, 0xf0, 0x08, 0x00, 0x01, 0x20, 0x01, 0x02, 0x05, 0x00, 0x01, 0x60, 0x08, 0x00, 0x01, 0x10, 0x01, 0x84, 0x05, 0x00, 0x01, 0x40, + 0x08, 0x00, 0x01, 0x10, 0x01, 0xc4, 0x0e, 0x00, 0x01, 0x0f, 0x01, 0x78, 0x57, 0x00, 0x73, 0x00, 0x01, 0x07, 0x01, 0x0e, 0x06, 0x00, 0x01, 0x70, + 0x01, 0xe0, 0x06, 0x00, 0x01, 0x0f, 0x01, 0x9f, 0x06, 0x00, 0x01, 0xf9, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, + 0x01, 0x01, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, + 0x01, 0x1f, 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, + 0x01, 0x01, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, + 0x01, 0x0f, 0x01, 0xff, 0x06, 0x00, 0x01, 0xff, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x07, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xe0, 0x06, 0x00, + 0x01, 0x03, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xc0, 0x06, 0x00, 0x01, 0x01, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x1f, 0x01, 0x80, 0x07, 0x00, + 0x01, 0xf0, 0x06, 0x00, 0x01, 0x0f, 0x08, 0x00, 0x01, 0x60, 0x06, 0x00, 0x01, 0x06, 0x3b, 0x00, 0x01, 0x20, 0x01, 0x02, 0x0e, 0x00, 0x01, 0x10, + 0x01, 0x84, 0x0e, 0x00, 0x01, 0x10, 0x01, 0xc4, 0x0e, 0x00, 0x01, 0x0f, 0x01, 0x78, 0x57, 0x00, 0x63, 0x00, 0x01, 0x07, 0x01, 0x0e, 0x06, 0x00, + 0x01, 0x70, 0x01, 0xe0, 0x06, 0x00, 0x01, 0x0f, 0x01, 0x9f, 0x06, 0x00, 0x01, 0xf9, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0x80, + 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf8, + 0x06, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0x80, + 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf8, + 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x06, 0x00, 0x01, 0xff, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x07, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xe0, + 0x06, 0x00, 0x01, 0x03, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xc0, 0x06, 0x00, 0x01, 0x01, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x1f, 0x01, 0x80, + 0x07, 0x00, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x0f, 0x08, 0x00, 0x01, 0x60, 0x06, 0x00, 0x01, 0x06, 0x4b, 0x00, 0x01, 0x20, 0x01, 0x02, 0x0e, 0x00, + 0x01, 0x10, 0x01, 0x84, 0x0e, 0x00, 0x01, 0x10, 0x01, 0xc4, 0x0e, 0x00, 0x01, 0x0f, 0x01, 0x78, 0x57, 0x00, 0x83, 0x00, 0x01, 0x07, 0x01, 0x0e, + 0x06, 0x00, 0x01, 0x70, 0x01, 0xe0, 0x06, 0x00, 0x01, 0x0f, 0x01, 0x9f, 0x06, 0x00, 0x01, 0xf9, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xff, + 0x01, 0x80, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, + 0x01, 0xf8, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xff, + 0x01, 0x80, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, + 0x01, 0xf8, 0x06, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x06, 0x00, 0x01, 0xff, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x07, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, + 0x01, 0xe0, 0x06, 0x00, 0x01, 0x03, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xc0, 0x06, 0x00, 0x01, 0x01, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x1f, + 0x01, 0x80, 0x07, 0x00, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x0f, 0x08, 0x00, 0x01, 0x60, 0x06, 0x00, 0x01, 0x06, 0x2b, 0x00, 0x01, 0x20, 0x01, 0x02, + 0x0e, 0x00, 0x01, 0x10, 0x01, 0x84, 0x0e, 0x00, 0x01, 0x10, 0x01, 0xc4, 0x0e, 0x00, 0x01, 0x0f, 0x01, 0x78, 0x57, 0x00, 0x63, 0x00, 0x01, 0x07, + 0x01, 0x0e, 0x06, 0x00, 0x01, 0x70, 0x01, 0xe0, 0x06, 0x00, 0x01, 0x0f, 0x01, 0x9f, 0x06, 0x00, 0x01, 0xf9, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x1f, + 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0x80, + 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x06, 0x01, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x01, + 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x0f, 0x01, 0x80, 0x01, 0x1f, 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf8, + 0x04, 0x00, 0x01, 0x03, 0x01, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x02, + 0x01, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x06, 0x00, 0x01, 0xff, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x07, 0x01, 0xfe, 0x06, 0x00, 0x01, 0x7f, 0x01, 0xe0, + 0x06, 0x00, 0x01, 0x03, 0x01, 0xfc, 0x06, 0x00, 0x01, 0x3f, 0x01, 0xc0, 0x06, 0x00, 0x01, 0x01, 0x01, 0xf8, 0x06, 0x00, 0x01, 0x1f, 0x01, 0x80, + 0x07, 0x00, 0x01, 0xf0, 0x06, 0x00, 0x01, 0x0f, 0x08, 0x00, 0x01, 0x60, 0x06, 0x00, 0x01, 0x06, 0x22, 0x00, 0x01, 0x40, 0x0f, 0x00, 0x01, 0xc0, + 0x0e, 0x00, 0x01, 0x01, 0x01, 0xf0, 0x08, 0x00, 0x01, 0x20, 0x01, 0x02, 0x05, 0x00, 0x01, 0x60, 0x08, 0x00, 0x01, 0x10, 0x01, 0x84, 0x05, 0x00, + 0x01, 0x40, 0x08, 0x00, 0x01, 0x10, 0x01, 0xc4, 0x0e, 0x00, 0x01, 0x0f, 0x01, 0x78, 0x57, 0x00, +}; +const uint16_t kFrameOffsets[kUniqueFrameCount + 1] TE_EXPR_PROGMEM = { + 0, 272, 528, 788, 932, 1052, 1292, 1548, 1808, 1966, 2124, 2282, + 2482, 2664, 2906, 3216, 3398, 3690, 3982, 4274, 4568, 4862, 5026, 5186, + 5350, 5472, 5578, 5732, 6088, 6544, 6950, 7090, 7226, 7358, 7502, 7650, + 7766, 7914, 8062, 8254, 8430, 8590, 8690, 8774, 8928, 9080, 9232, 9384, + 9536, 9694, 10010, 10330, 10642, 10840, 11038, 11236, 11434, 11632, 11830, 12028, + 12226, 12424, 12622, 12820, 13018, 13216, 13414, 13740, 14030, 14294, 14526, 14850, + 15046, 15242, 15438, 15634, 15830, 16026, 16222, 16418, 16574, 16678, 16914, 17150, + 17344, 17538, 17732, 17968, +}; +const uint8_t kFrameIndices[kExpressionCount][kFramesPerExpression] TE_EXPR_PROGMEM = { + {0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 3, 4, 5, 6, 6, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0}, // idle + {8, 9, 9, 10, 10, 10, 9, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8}, // happy + {11, 11, 11, 11, 12, 12, 12, 11, 11, 11, 11, 12, 12, 12, 11, 11, 11, 11, 12, 12, 12, 11, 11, 11, 11, 12, 11, 11, 11, 11}, // laugh + {13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 15, 4, 5, 0, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13}, // wink + {16, 17, 17, 18, 18, 18, 18, 18, 17, 17, 16, 16, 19, 19, 20, 20, 20, 20, 20, 19, 19, 16, 17, 17, 18, 18, 16, 16, 16, 16}, // curious + {21, 22, 22, 22, 22, 23, 23, 23, 23, 23, 21, 21, 21, 21, 24, 25, 26, 22, 22, 22, 23, 23, 23, 23, 23, 21, 21, 21, 21, 21}, // thinking + {27, 28, 28, 29, 29, 29, 29, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27}, // surprise + {30, 31, 31, 32, 32, 32, 32, 32, 31, 31, 30, 30, 33, 33, 34, 34, 34, 34, 34, 33, 33, 30, 31, 31, 32, 32, 30, 30, 30, 30}, // smug + {35, 36, 36, 37, 37, 37, 37, 38, 39, 39, 39, 39, 39, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 42, 42, 42, 35, 35, 35, 35}, // sleepy + {43, 43, 43, 44, 44, 44, 44, 45, 45, 45, 45, 45, 45, 45, 46, 46, 46, 46, 46, 47, 48, 48, 48, 48, 48, 48, 43, 43, 43, 43}, // sleep + {49, 49, 50, 50, 50, 50, 50, 50, 50, 49, 49, 49, 49, 51, 51, 51, 51, 51, 51, 51, 49, 49, 49, 50, 50, 50, 49, 49, 49, 49}, // sad + {52, 53, 54, 55, 55, 56, 57, 57, 58, 59, 60, 60, 61, 62, 62, 63, 64, 64, 65, 53, 54, 54, 55, 56, 56, 57, 52, 52, 52, 52}, // cry + {66, 66, 66, 66, 66, 66, 66, 67, 67, 67, 67, 66, 66, 66, 68, 69, 70, 66, 67, 67, 67, 67, 66, 66, 66, 66, 66, 66, 66, 66}, // angry + {71, 71, 72, 72, 73, 73, 74, 74, 75, 75, 76, 76, 77, 77, 78, 78, 71, 71, 72, 72, 73, 73, 74, 74, 75, 75, 71, 71, 71, 71}, // panic + {79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 80, 80, 80, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79}, // shy + {81, 82, 82, 82, 81, 83, 84, 84, 84, 83, 82, 82, 82, 81, 81, 84, 84, 84, 83, 85, 82, 82, 81, 81, 86, 84, 81, 81, 81, 81}, // love +}; +}}} // namespace tiny_engineer::expressions::detail diff --git a/platformio.ini b/platformio.ini index 7f72967..e98325d 100644 --- a/platformio.ini +++ b/platformio.ini @@ -45,4 +45,20 @@ test_build_src = true build_src_filter = -<**/*.*> + -build_flags = -std=c++17 -Iinclude \ No newline at end of file +build_flags = -std=c++17 -Iinclude + +; Opt-in OLED-only application. Building does not upload or change robot settings. +[env:expression-demo] +platform = ${env:esp32-c3-devkitm-1.platform} +board = ${env:esp32-c3-devkitm-1.board} +framework = ${env:esp32-c3-devkitm-1.framework} +monitor_speed = ${env:esp32-c3-devkitm-1.monitor_speed} +build_flags = ${env:esp32-c3-devkitm-1.build_flags} +; For an upside-down OLED, append: -D EXPRESSION_DEMO_ROTATION=2 +lib_deps = + adafruit/Adafruit GFX Library + adafruit/Adafruit SSD1306 +build_src_filter = + -<*> + +<../examples/expression-demo/main.cpp> +test_ignore = * diff --git a/scripts/expressions/designs.js b/scripts/expressions/designs.js new file mode 100644 index 0000000..a25d6cc --- /dev/null +++ b/scripts/expressions/designs.js @@ -0,0 +1,360 @@ +// SPDX-License-Identifier: MIT +// Original 128x32 pixel drawings inspired by common kaomoji. +const faces = [ + { id: 'idle' }, + { id: 'happy' }, + { id: 'laugh' }, + { id: 'wink' }, + { id: 'curious' }, + { id: 'thinking' }, + { id: 'surprise' }, + { id: 'smug' }, + { id: 'sleepy' }, + { id: 'sleep' }, + { id: 'sad' }, + { id: 'cry' }, + { id: 'angry' }, + { id: 'panic' }, + { id: 'shy' }, + { id: 'love' }, +]; + +// Rasterize the approved balanced design into exactly 4096 one-bit pixels. +// No fonts, gray pixels, antialiasing, display rotation, or device access. +function rasterFace(id, t = 0) { + const pixels = new Uint8Array(128 * 32); + + function putPixel(x, y, value = 1) { + x = Math.round(x); + y = Math.round(y); + if (x >= 0 && x < 128 && y >= 0 && y < 32) pixels[y * 128 + x] = value; + } + + function fillRect(x, y, width, height, value = 1) { + for (let row = Math.round(y); row < Math.round(y + height); row++) { + for (let column = Math.round(x); column < Math.round(x + width); column++) { + putPixel(column, row, value); + } + } + } + + function drawLine(x0, y0, x1, y1, width = 2, value = 1) { + x0 = Math.round(x0); + y0 = Math.round(y0); + x1 = Math.round(x1); + y1 = Math.round(y1); + const dx = Math.abs(x1 - x0); + const stepX = x0 < x1 ? 1 : -1; + const dy = -Math.abs(y1 - y0); + const stepY = y0 < y1 ? 1 : -1; + let error = dx + dy; + const halfWidth = Math.floor((width - 1) / 2); + + for (let step = 0; step < 300; step++) { + fillRect(x0 - halfWidth, y0 - halfWidth, width, width, value); + if (x0 === x1 && y0 === y1) break; + const doubledError = 2 * error; + if (doubledError >= dy) { + error += dy; + x0 += stepX; + } + if (doubledError <= dx) { + error += dx; + y0 += stepY; + } + } + } + + function drawPath(points, width = 2, value = 1) { + for (let i = 1; i < points.length; i++) { + drawLine(...points[i - 1], ...points[i], width, value); + } + } + + function fillOval(centerX, centerY, radiusX, radiusY, value = 1) { + for (let y = Math.floor(centerY - radiusY); y <= Math.ceil(centerY + radiusY); y++) { + for (let x = Math.floor(centerX - radiusX); x <= Math.ceil(centerX + radiusX); x++) { + if (((x - centerX) / radiusX) ** 2 + ((y - centerY) / radiusY) ** 2 <= 1.05) { + putPixel(x, y, value); + } + } + } + } + + function roundedRect(centerX, centerY, width, height, radius = 3) { + const x = Math.round(centerX - width / 2); + const y = Math.round(centerY - height / 2); + radius = Math.min(radius, Math.floor(height / 2), Math.floor(width / 2)); + fillRect(x + radius, y, width - radius * 2, height); + fillRect(x, y + radius, width, height - radius * 2); + if (radius) { + for (const cornerX of [x + radius, x + width - radius - 1]) { + for (const cornerY of [y + radius, y + height - radius - 1]) { + fillOval(cornerX, cornerY, radius, radius); + } + } + } + } + + function quadraticCurve(x0, y0, controlX, controlY, x1, y1, width = 2) { + let previous = [x0, y0]; + for (let i = 1; i <= 24; i++) { + const u = i / 24; + const v = 1 - u; + const next = [ + v * v * x0 + 2 * v * u * controlX + u * u * x1, + v * v * y0 + 2 * v * u * controlY + u * u * y1, + ]; + drawLine(...previous, ...next, width); + previous = next; + } + } + + const bounce = Math.round(Math.sin(Math.PI * Math.min(1, t / 0.8)) * -2); + const sideOffset = t ? Math.round(Math.sin(t * 2.1) * 2) : 0; + const blinkPhase = t % 2.4; + let opening = 1; + if (t > 0 && blinkPhase > 1.3 && blinkPhase < 1.62) { + opening = Math.max(0.12, Math.abs(blinkPhase - 1.46) / 0.16); + } + + const leftX = 34; + const rightX = 94; + const eyeY = 13; + + function eye(x, width = 18, height = 16, y = eyeY) { + roundedRect(x, y, width, Math.max(2, Math.round(height * opening)), 3); + } + + function arcEye(x, y = 14, width = 18) { + quadraticCurve(x - width / 2, y, x, y - 14, x + width / 2, y, 2); + } + + function closedEye(x, y = 15) { + quadraticCurve(x - 9, y - 2, x, y + 4, x + 9, y - 2, 2); + } + + function heart(x, y, scale = 1) { + const outline = [[0, 2], [2, 0], [5, 0], [7, 2], [9, 0], [12, 0], [14, 2], [14, 6], [7, 13], [0, 6]]; + for (let row = 0; row < 14; row++) { + for (let column = 0; column < 15; column++) { + let inside = false; + for (let i = 0, j = outline.length - 1; i < outline.length; j = i++) { + const [x0, y0] = outline[i]; + const [x1, y1] = outline[j]; + if ((y0 > row) !== (y1 > row) && column < (x1 - x0) * (row - y0) / (y1 - y0) + x0) { + inside = !inside; + } + } + if (inside) fillRect(x + (column - 7) * scale, y + (row - 6) * scale, scale, scale); + } + } + } + + function star(x, y, radius = 4) { + drawLine(x - radius, y, x + radius, y, 1); + drawLine(x, y - radius, x, y + radius, 1); + putPixel(x - 1, y - 1); + putPixel(x + 1, y + 1); + } + + function drop(x, y) { + drawPath([[x, y - 3], [x - 2, y], [x - 2, y + 3], [x, y + 4], [x + 2, y + 3], [x + 2, y], [x, y - 3]], 1); + fillRect(x - 1, y, 3, 3); + } + + function mouth(type = 'smile') { + switch (type) { + case 'smile': + quadraticCurve(59, 22, 64, 28, 69, 22, 1); + break; + case 'w': + drawPath([[58, 23], [60, 26], [63, 26], [64, 24], [65, 26], [68, 26], [70, 23]], 1); + break; + case 'flat': + drawLine(60, 25, 68, 25, 1); + break; + case 'o': + fillOval(64, 24, 3, 4); + fillOval(64, 24, 1, 2, 0); + break; + case 'open': + drawPath([[59, 22], [69, 22], [68, 26], [66, 28], [62, 28], [60, 26], [59, 22]], 1); + fillRect(61, 23, 7, 3); + break; + case 'sad': + quadraticCurve(59, 27, 64, 20, 69, 27, 1); + break; + case 'wave': + drawPath([[58, 25], [61, 23], [64, 25], [67, 23], [70, 25]], 1); + break; + } + } + + switch (id) { + case 'idle': + eye(leftX + sideOffset); + eye(rightX + sideOffset); + mouth(); + break; + + case 'happy': + arcEye(leftX, 15 + bounce); + arcEye(rightX, 15 + bounce); + mouth('w'); + break; + + case 'laugh': + drawPath([[leftX - 7, 7], [leftX + 2, 14], [leftX - 7, 20]], 3); + drawPath([[rightX + 7, 7], [rightX - 2, 14], [rightX + 7, 20]], 3); + mouth(t && Math.sin(t * 9) < 0 ? 'smile' : 'open'); + break; + + case 'wink': + eye(leftX); + if (!t || t % 2 < 1.25) { + drawPath([[rightX + 8, 8], [rightX - 3, 14], [rightX + 8, 18]], 2); + } else { + eye(rightX); + } + mouth(); + if (!t || t % 2 < 1.5) star(116, 7); + break; + + case 'curious': { + const eyeOffset = t ? Math.round(Math.sin(t * 3) * 2) : 0; + fillOval(leftX, eyeY + eyeOffset, 6, 6); + fillOval(leftX, eyeY + eyeOffset, 3, 3, 0); + fillOval(rightX, eyeY - eyeOffset, 10, 10); + fillOval(rightX, eyeY - eyeOffset, 6, 6, 0); + mouth('flat'); + drawPath([[112, 4], [114, 2], [117, 2], [119, 4], [119, 6], [115, 9], [115, 11]], 1); + fillRect(115, 14, 2, 2); + break; + } + + case 'thinking': { + roundedRect(leftX + 3, eyeY + 1, 19, 7, 2); + eye(rightX + 3, 14, 12, eyeY); + drawLine(leftX - 9, 6, leftX + 10, 6, 2); + mouth('flat'); + const dotCount = t ? 1 + Math.floor(t * 2) % 3 : 3; + for (let i = 0; i < dotCount; i++) fillRect(110 + i * 4, 25, 2, 2); + break; + } + + case 'surprise': { + const expansion = t ? Math.round(Math.max(0, 1 - t / 0.8) * 2) : 0; + for (const x of [leftX, rightX]) { + fillOval(x, eyeY, 9 + expansion, 10 + expansion); + fillOval(x, eyeY, 5, 6, 0); + } + mouth('o'); + break; + } + + case 'smug': { + for (const x of [leftX, rightX]) { + roundedRect(x, eyeY + 3, 20, 10, 2); + fillRect(x - 11, eyeY - 2, 23, 5, 0); + fillRect(x + 3, eyeY + 3, 3, 4, 0); + } + const eyebrowOffset = t ? Math.round(Math.sin(t * 3) * 2) : 0; + drawLine(leftX - 9, 7, leftX + 8, 5 + eyebrowOffset, 2); + drawLine(rightX - 9, 7, rightX + 8, 7, 2); + mouth(); + break; + } + + case 'sleepy': + for (const x of [leftX, rightX]) { + const height = t ? Math.max(2, 8 - Math.round(t * 2)) : 5; + roundedRect(x, eyeY + 3, 18, height, 1); + drawLine(x - 9, 11, x + 8, 11, 2); + } + mouth(t > 0.6 && t < 1.8 ? 'o' : 'flat'); + break; + + case 'sleep': { + const breathingOffset = t ? Math.round(Math.sin(t * 2)) : 0; + closedEye(leftX, 15 + breathingOffset); + closedEye(rightX, 15 + breathingOffset); + mouth('w'); + const symbolOffset = t ? -Math.floor(t * 1.5) % 3 : 0; + drawPath([[109, 13 + symbolOffset], [114, 13 + symbolOffset], [109, 18 + symbolOffset], [114, 18 + symbolOffset]], 1); + drawPath([[117, 4 + symbolOffset], [123, 4 + symbolOffset], [117, 10 + symbolOffset], [123, 10 + symbolOffset]], 1); + break; + } + + case 'sad': + for (const x of [leftX, rightX]) { + fillOval(x, eyeY + 3, 7, 8); + fillRect(x - 5, eyeY + 2, 2, 4, 0); + } + drawLine(leftX - 9, 5, leftX + 6, 2, 2); + drawLine(rightX - 6, 2, rightX + 9, 5, 2); + drop(leftX - 8, 23 + (t ? Math.round(Math.sin(t * 3)) : 0)); + mouth('sad'); + break; + + case 'cry': + for (const x of [leftX, rightX]) { + drawLine(x - 9, 8, x + 9, 8, 3); + fillRect(x - 5, 10, 3, 17); + fillRect(x + 3, 10, 3, 17); + if (t) { + const tearOffset = Math.floor(t * 7) % 13; + fillRect(x - 5, 12 + tearOffset, 3, 2, 0); + fillRect(x + 3, 11 + (tearOffset + 6) % 13, 3, 2, 0); + } + } + mouth('wave'); + break; + + case 'angry': + eye(leftX, 18, 12, 16); + eye(rightX, 18, 12, 16); + drawPath([[leftX - 12, 5], [leftX + 10, 12]], 3); + drawPath([[rightX - 10, 12], [rightX + 12, 5]], 3); + mouth('sad'); + if (!t || t % 1.1 < 0.7) { + drawPath([[114, 3], [114, 7], [111, 7]], 1); + drawPath([[118, 3], [118, 7], [121, 7]], 1); + drawPath([[114, 14], [114, 10], [111, 10]], 1); + drawPath([[118, 14], [118, 10], [121, 10]], 1); + } + break; + + case 'panic': + drawPath([[leftX - 6, 7], [leftX + 4, 14], [leftX - 6, 21]], 2); + drawPath([[rightX + 6, 7], [rightX - 4, 14], [rightX + 6, 21]], 2); + mouth('wave'); + drop(116, 10 + (t ? Math.floor(t * 5) % 8 : 0)); + break; + + case 'shy': + closedEye(leftX, 13); + closedEye(rightX, 13); + mouth('w'); + if (!t || t % 1.5 < 1.1) { + for (const x of [19, 24, 101, 106]) drawLine(x, 20, x - 2, 24, 1); + } + break; + + case 'love': { + const heartOffset = t ? Math.round(Math.sin(t * 7)) : 0; + heart(leftX, eyeY + heartOffset); + heart(rightX, eyeY + heartOffset); + mouth('w'); + if (!t || t % 1 < 0.5) { + star(14, 11, 2); + star(113, 22, 2); + } + break; + } + } + + return pixels; +} + +export { faces, rasterFace }; diff --git a/scripts/expressions/generate.js b/scripts/expressions/generate.js new file mode 100644 index 0000000..9cfcdbb --- /dev/null +++ b/scripts/expressions/generate.js @@ -0,0 +1,118 @@ +// SPDX-License-Identifier: MIT +// Deterministic, dependency-free asset generator. Run from any directory. +import fs from 'node:fs'; +import path from 'node:path'; +import crypto from 'node:crypto'; +import { fileURLToPath, pathToFileURL } from 'node:url'; +import { faces, rasterFace } from './designs.js'; +const sourceDirectory = path.dirname(fileURLToPath(import.meta.url)); + +function packPixels(pixels) { + if (pixels.length !== 128 * 32) throw new RangeError('Expected 4096 pixels'); + const bytes = Buffer.alloc(512); + pixels.forEach((pixel, i) => { + if (pixel !== 0 && pixel !== 1) throw new RangeError('Expected binary pixels'); + bytes[i >> 3] |= pixel << (7 - (i & 7)); + }); + return bytes; +} + +function encodeRle(bytes) { + const result = []; + for (let i = 0; i < bytes.length;) { + const value = bytes[i]; + let count = 1; + while (count < 255 && i + count < bytes.length && bytes[i + count] === value) count++; + result.push(count, value); + i += count; + } + return Buffer.from(result); +} + +function buildAssets() { + const unique = [], indices = [], animations = [], seen = new Map(); + for (const face of faces) { + const frames = [], sequence = []; + for (let i = 0; i < 30; i++) { + // 2.6 seconds of motion, then four frames of the resting pose. + const frame = packPixels(rasterFace(face.id, i < 26 ? i / 10 : 0)); + const key = frame.toString('hex'); + if (!seen.has(key)) { + seen.set(key, unique.length); + unique.push(frame); + } + frames.push(frame); + sequence.push(seen.get(key)); + } + animations.push(frames); + indices.push(sequence); + } + const offsets = [0], chunks = []; + for (const frame of unique) { + const encoded = encodeRle(frame); + chunks.push(encoded); + offsets.push(offsets[offsets.length - 1] + encoded.length); + } + const data = Buffer.concat(chunks); + if (faces.length !== 16 || unique.length > 256 || data.length > 65535) { + throw new RangeError('Asset count exceeds the C++ table format'); + } + return { animations, unique, indices, offsets, data }; +} + +function outputs(assets) { + const lines = [ + '// SPDX-License-Identifier: MIT', + '// Generated by scripts/expressions/generate.js. Do not edit by hand.', + '#pragma once', + '#include "TinyEngineerExpressions.h"', + 'namespace tiny_engineer { namespace expressions { namespace detail {', + `constexpr std::size_t kUniqueFrameCount = ${assets.unique.length};`, + `constexpr std::size_t kRleDataSize = ${assets.data.length};`, + 'const uint8_t kRleData[kRleDataSize] TE_EXPR_PROGMEM = {' + ]; + for (let i = 0; i < assets.data.length; i += 24) { + lines.push(' ' + [...assets.data.subarray(i, i + 24)].map(b => '0x' + b.toString(16).padStart(2, '0')).join(', ') + ','); + } + lines.push('};', 'const uint16_t kFrameOffsets[kUniqueFrameCount + 1] TE_EXPR_PROGMEM = {'); + for (let i = 0; i < assets.offsets.length; i += 12) lines.push(' ' + assets.offsets.slice(i, i + 12).join(', ') + ','); + lines.push('};', 'const uint8_t kFrameIndices[kExpressionCount][kFramesPerExpression] TE_EXPR_PROGMEM = {'); + assets.indices.forEach((sequence, i) => lines.push(' {' + sequence.join(', ') + '}, // ' + faces[i].id)); + lines.push('};', '}}} // namespace tiny_engineer::expressions::detail', ''); + const manifest = { + width: 128, height: 32, format: 'row-major-msb-first', frameMs: 100, loopMs: 3000, + expressions: faces.map((face, i) => ({ + id: face.id, frames: 30, + sha256: crypto.createHash('sha256').update(Buffer.concat(assets.animations[i])).digest('hex') + })), + totalFrames: 480, uniqueFrames: assets.unique.length, rleBytes: assets.data.length, + indexBytes: 480, offsetBytes: assets.offsets.length * 2, + assetBytes: assets.data.length + 480 + assets.offsets.length * 2 + }; + const root = path.resolve(sourceDirectory, '../..'); + return new Map([ + [path.join(root, 'lib/TinyEngineerExpressions/src/expression_assets.h'), lines.join('\n')], + [path.join(sourceDirectory, 'manifest.json'), JSON.stringify(manifest, null, 2) + '\n'] + ]); +} + +function generate(check = false) { + const assets = buildAssets(); + for (const [filename, content] of outputs(assets)) { + if (check) { + if (!fs.existsSync(filename) || fs.readFileSync(filename, 'utf8') !== content) { + throw new Error('Generated assets are stale: ' + path.basename(filename)); + } + } else { + fs.mkdirSync(path.dirname(filename), { recursive: true }); + fs.writeFileSync(filename, content); + } + } + console.log(`${check ? 'Verified' : 'Generated'} 16 expressions, 480 frames, ${assets.unique.length} unique frames; ${assets.data.length + 480 + assets.offsets.length * 2} asset bytes.`); +} + +export { packPixels, encodeRle, buildAssets, generate }; +if (process.argv[1] && import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href) { + if (process.argv.slice(2).some(arg => arg !== '--check')) throw new Error('Usage: node generate.js [--check]'); + generate(process.argv.includes('--check')); +} diff --git a/scripts/expressions/manifest.json b/scripts/expressions/manifest.json new file mode 100644 index 0000000..23666ab --- /dev/null +++ b/scripts/expressions/manifest.json @@ -0,0 +1,95 @@ +{ + "width": 128, + "height": 32, + "format": "row-major-msb-first", + "frameMs": 100, + "loopMs": 3000, + "expressions": [ + { + "id": "idle", + "frames": 30, + "sha256": "6413f4edee0cbd53f16e7bb490a6a751e3806ba9e66ccde21c6aa3e4bcfa29b0" + }, + { + "id": "happy", + "frames": 30, + "sha256": "ace03d8dff6394548e44c18e663c016d41398ab8f909ac8be97d7154f9539fb6" + }, + { + "id": "laugh", + "frames": 30, + "sha256": "94930173e299ad7055f23d3676998113d895c4f9963788ba0d70800f2297ca25" + }, + { + "id": "wink", + "frames": 30, + "sha256": "ba70db8e958d7a1c1e8432f935e0a113d0620af7e6cafa8b678d2c0cce0c405b" + }, + { + "id": "curious", + "frames": 30, + "sha256": "bb3dfdae21c82b6a7fbd1139cdf1b6266dad1680947f38082705c2b7a29f3f2a" + }, + { + "id": "thinking", + "frames": 30, + "sha256": "1eff7f7fdc13cdebe26a6fa8ba34304fbff97ad41b9691c962e9eb7f6bd165b0" + }, + { + "id": "surprise", + "frames": 30, + "sha256": "1b01090f343d5ef581cd60cf00fa36db793f9304ace61f2cd727f88c4ef49d7e" + }, + { + "id": "smug", + "frames": 30, + "sha256": "a7baa4aae4fb360d7b3cd3f730ceef5929ef2f58721eebee62fa32bd0721f3f7" + }, + { + "id": "sleepy", + "frames": 30, + "sha256": "2a173eebc1dd1f373dd9090072fdb133a3a2f7907bb4c302640e00b85fdc1204" + }, + { + "id": "sleep", + "frames": 30, + "sha256": "b7c465908e413777815b39ba2bdbf7490b4a275932552e1916f34a8ca09c6db3" + }, + { + "id": "sad", + "frames": 30, + "sha256": "3d01ba558d2f2f1bcc2ef78a4ad57d8aa70c21859661dada925e92e8685a88df" + }, + { + "id": "cry", + "frames": 30, + "sha256": "da60536d38f074526521a39c99ff16cf1404cffaf1366cb433978263489ab86b" + }, + { + "id": "angry", + "frames": 30, + "sha256": "eaa6db37e687504871b1f04563a9eeca6820464fd7978e8044cefa6ffaf7f9e6" + }, + { + "id": "panic", + "frames": 30, + "sha256": "a62a4d723c7698c9d52d1c241ea2eecf5a2e200f37529ea4debeb09211b8d9e0" + }, + { + "id": "shy", + "frames": 30, + "sha256": "27fbd45135ad16f1189997c22bbb3ba388894c07902651862478724c5656351e" + }, + { + "id": "love", + "frames": 30, + "sha256": "311a089f5fcffa1152324a75888b3a4f22331e4e8c0e7a0036207638ae708024" + } + ], + "totalFrames": 480, + "uniqueFrames": 87, + "rleBytes": 17968, + "indexBytes": 480, + "offsetBytes": 176, + "assetBytes": 18624 +} diff --git a/scripts/expressions/test-assets.js b/scripts/expressions/test-assets.js new file mode 100644 index 0000000..166336a --- /dev/null +++ b/scripts/expressions/test-assets.js @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT +import assert from 'node:assert/strict'; +import crypto from 'node:crypto'; +import { packPixels, encodeRle, buildAssets, generate } from './generate.js'; + +// Frozen digests of the original uncompressed 30-frame designs. +// These are independent of the deduplication/RLE format and generated manifest. +const golden = [ + '6413f4edee0cbd53f16e7bb490a6a751e3806ba9e66ccde21c6aa3e4bcfa29b0', + 'ace03d8dff6394548e44c18e663c016d41398ab8f909ac8be97d7154f9539fb6', + '94930173e299ad7055f23d3676998113d895c4f9963788ba0d70800f2297ca25', + 'ba70db8e958d7a1c1e8432f935e0a113d0620af7e6cafa8b678d2c0cce0c405b', + 'bb3dfdae21c82b6a7fbd1139cdf1b6266dad1680947f38082705c2b7a29f3f2a', + '1eff7f7fdc13cdebe26a6fa8ba34304fbff97ad41b9691c962e9eb7f6bd165b0', + '1b01090f343d5ef581cd60cf00fa36db793f9304ace61f2cd727f88c4ef49d7e', + 'a7baa4aae4fb360d7b3cd3f730ceef5929ef2f58721eebee62fa32bd0721f3f7', + '2a173eebc1dd1f373dd9090072fdb133a3a2f7907bb4c302640e00b85fdc1204', + 'b7c465908e413777815b39ba2bdbf7490b4a275932552e1916f34a8ca09c6db3', + '3d01ba558d2f2f1bcc2ef78a4ad57d8aa70c21859661dada925e92e8685a88df', + 'da60536d38f074526521a39c99ff16cf1404cffaf1366cb433978263489ab86b', + 'eaa6db37e687504871b1f04563a9eeca6820464fd7978e8044cefa6ffaf7f9e6', + 'a62a4d723c7698c9d52d1c241ea2eecf5a2e200f37529ea4debeb09211b8d9e0', + '27fbd45135ad16f1189997c22bbb3ba388894c07902651862478724c5656351e', + '311a089f5fcffa1152324a75888b3a4f22331e4e8c0e7a0036207638ae708024' +]; + +const pixels = new Uint8Array(4096); +for (const bit of [0, 7, 8, 127, 128, 4095]) pixels[bit] = 1; +const packed = packPixels(pixels); +assert.equal(packed[0], 0x81); +assert.equal(packed[1], 0x80); +assert.equal(packed[15], 1); +assert.equal(packed[16], 0x80); +assert.equal(packed[511], 1); +assert.throws(() => packPixels(new Uint8Array(32)), RangeError); +pixels[3] = 2; +assert.throws(() => packPixels(pixels), RangeError); +assert.deepEqual(encodeRle(Buffer.alloc(512, 7)), Buffer.from([255, 7, 255, 7, 2, 7])); + +const assets = buildAssets(); +assert.equal(assets.animations.length, 16); +assert.equal(assets.unique.length, 87); +assert.equal(assets.data.length + 480 + assets.offsets.length * 2, 18624); +assets.animations.forEach((frames, expression) => { + assert.equal(crypto.createHash('sha256').update(Buffer.concat(frames)).digest('hex'), golden[expression]); + frames.forEach((frame, index) => { + const id = assets.indices[expression][index]; + const data = assets.data.subarray(assets.offsets[id], assets.offsets[id + 1]); + const restored = []; + assert.equal(data.length % 2, 0); + for (let i = 0; i < data.length; i += 2) { + assert.ok(data[i] > 0); + for (let run = 0; run < data[i]; run++) restored.push(data[i + 1]); + } + assert.equal(restored.length, 512); + assert.deepEqual(Buffer.from(restored), frame, `expression ${expression}, frame ${index}`); + }); +}); +generate(true); +console.log('PASS: all 480 frames match the original pixels; packing, RLE limits, and generated files verified.'); diff --git a/test/test_expressions/test_expressions.cpp b/test/test_expressions/test_expressions.cpp new file mode 100644 index 0000000..4aa4096 --- /dev/null +++ b/test/test_expressions/test_expressions.cpp @@ -0,0 +1,101 @@ +// SPDX-License-Identifier: MIT +#include +#include +#include +#include + +namespace expr = tiny_engineer::expressions; + +void test_names_and_invalid_ids() { + const char* expected[] = { + "idle", "happy", "laugh", "wink", "curious", "thinking", "surprise", "smug", + "sleepy", "sleep", "sad", "cry", "angry", "panic", "shy", "love" + }; + TEST_ASSERT_EQUAL_UINT32(16, expr::kExpressionCount); + for (size_t i = 0; i < expr::kExpressionCount; ++i) { + TEST_ASSERT_EQUAL_STRING(expected[i], expr::name(static_cast(i))); + } + for (unsigned i = 16; i <= 255; ++i) { + TEST_ASSERT_NULL(expr::name(static_cast(i))); + } +} + +void test_all_frames_match_original_designs() { + // FNV-1a over each original uncompressed 30-frame animation, before RLE. + // scripts/expressions/test-assets.js separately pins their SHA-256 digests. + const uint32_t expected[] = { + 0x019fd60du, 0xa5101635u, 0xe2919a55u, 0xfb7f1da2u, + 0x86be37c5u, 0x9988e8a7u, 0x1fdf4c81u, 0x89025fa9u, + 0xc9ab6b4eu, 0x8bdc177du, 0x572f1dddu, 0x2432422du, + 0xe9242f32u, 0x4efb79e5u, 0x8b0d926du, 0x2bde1b40u + }; + uint8_t guarded[expr::kFrameBytes + 2]; + for (size_t e = 0; e < expr::kExpressionCount; ++e) { + uint32_t hash = 2166136261u; + for (size_t f = 0; f < expr::kFramesPerExpression; ++f) { + std::memset(guarded, 0xA5, sizeof guarded); + TEST_ASSERT_TRUE(expr::render(static_cast(e), + f * expr::kFrameDurationMs, guarded + 1, expr::kFrameBytes)); + TEST_ASSERT_EQUAL_HEX8(0xA5, guarded[0]); + TEST_ASSERT_EQUAL_HEX8(0xA5, guarded[sizeof guarded - 1]); + for (size_t i = 1; i <= expr::kFrameBytes; ++i) { + hash = (hash ^ guarded[i]) * 16777619u; + } + } + TEST_ASSERT_EQUAL_HEX32_MESSAGE(expected[e], hash, expr::name(static_cast(e))); + } +} + +void test_invalid_inputs_leave_buffer_untouched() { + uint8_t output[expr::kFrameBytes + 2], before[sizeof output]; + std::memset(output, 0xA5, sizeof output); + std::memcpy(before, output, sizeof output); + TEST_ASSERT_FALSE(expr::render(expr::Expression::Idle, 0, nullptr, expr::kFrameBytes)); + for (size_t size = 0; size < expr::kFrameBytes; ++size) { + TEST_ASSERT_FALSE(expr::render(expr::Expression::Idle, 0, output, size)); + } + for (unsigned id = 16; id <= 255; ++id) { + TEST_ASSERT_FALSE(expr::render(static_cast(id), 0, output, sizeof output)); + } + TEST_ASSERT_EQUAL_UINT8_ARRAY(before, output, sizeof output); + // A larger capacity is accepted; only the first 512 bytes are written. + TEST_ASSERT_TRUE(expr::render(expr::Expression::Idle, 0, output, sizeof output)); + TEST_ASSERT_EQUAL_HEX8(0xA5, output[expr::kFrameBytes]); + TEST_ASSERT_EQUAL_HEX8(0xA5, output[expr::kFrameBytes + 1]); +} + +void test_frame_timing_and_loop_boundaries() { + uint8_t frame[expr::kFrameBytes], reference[expr::kFrameBytes]; + for (size_t e = 0; e < expr::kExpressionCount; ++e) { + const auto id = static_cast(e); + for (uint32_t f = 0; f < expr::kFramesPerExpression; ++f) { + TEST_ASSERT_TRUE(expr::render(id, f * 100, reference, sizeof reference)); + TEST_ASSERT_TRUE(expr::render(id, f * 100 + 99, frame, sizeof frame)); + TEST_ASSERT_EQUAL_UINT8_ARRAY(reference, frame, sizeof frame); + TEST_ASSERT_TRUE(expr::render(id, 12000 + f * 100, frame, sizeof frame)); + TEST_ASSERT_EQUAL_UINT8_ARRAY(reference, frame, sizeof frame); + } + const uint32_t last = std::numeric_limits::max(); + TEST_ASSERT_TRUE(expr::render(id, last % 3000, reference, sizeof reference)); + TEST_ASSERT_TRUE(expr::render(id, last, frame, sizeof frame)); + TEST_ASSERT_EQUAL_UINT8_ARRAY(reference, frame, sizeof frame); + } +} + +void test_callers_can_render_independently() { + uint8_t first[expr::kFrameBytes], second[expr::kFrameBytes], again[expr::kFrameBytes]; + TEST_ASSERT_TRUE(expr::render(expr::Expression::Love, 900, first, sizeof first)); + TEST_ASSERT_TRUE(expr::render(expr::Expression::Sleep, 1200, second, sizeof second)); + TEST_ASSERT_TRUE(expr::render(expr::Expression::Love, 900, again, sizeof again)); + TEST_ASSERT_EQUAL_UINT8_ARRAY(first, again, sizeof first); +} + +int main() { + UNITY_BEGIN(); + RUN_TEST(test_names_and_invalid_ids); + RUN_TEST(test_all_frames_match_original_designs); + RUN_TEST(test_invalid_inputs_leave_buffer_untouched); + RUN_TEST(test_frame_timing_and_loop_boundaries); + RUN_TEST(test_callers_can_render_independently); + return UNITY_END(); +}