112 Commits

Author SHA1 Message Date
david 1161733b36 feat(touch): add press/release detection with touch-down tracking 2026-02-18 13:08:56 -08:00
david fb4b865954 refactor(display): extract tile layout logic to library helper class 2026-02-18 11:43:46 -08:00
david d1fa0e20b1 refactor(display): extract dashboard tile grid logic to DisplayManager 2026-02-18 04:28:35 -08:00
david deda456d35 refactor(doorbell-touch): add build harness with monitor agent and board-specific setup 2026-02-18 03:28:38 -08:00
david 00989f1d8b refactor(doorbell-touch): extract lockfile logic to shared script 2026-02-18 02:18:50 -08:00
david b296c56f80 feat(doorbell-touch): add lockfile to prevent concurrent monitor sessions 2026-02-18 02:05:27 -08:00
david 999e0b7e60 refactor(doorbell-touch): extract board configs and improve logging 2026-02-18 02:02:35 -08:00
david 2122611a34 fix(doorbell-touch): kill screen session before upload 2026-02-18 01:14:06 -08:00
david 07e6503520 feat(doorbell): add inactivity timeout to turn off screen 2026-02-18 01:12:36 -08:00
david 8b17049620 refactor(config): update glob pattern to use exclude syntax 2026-02-18 00:36:08 -08:00
david cd74b501db feat(doorbell): add staged boot sequence and refactor main loop 2026-02-18 00:35:48 -08:00
david 6cff6d4bf4 refactor(touch): centralize touch handling in DoorbellLogic 2026-02-17 23:35:59 -08:00
david c9232ee477 feat(touch): add continuous touch polling and debug logging 2026-02-17 23:20:42 -08:00
david bc47200e38 fix(doorbell-touch): add touch debug logging and missing TFT_MISO pin 2026-02-17 22:51:32 -08:00
david 3d4eb21a88 feat(boards): add ESP32-32E-4 (4" ST7796) board support 2026-02-17 22:07:51 -08:00
david 9476ac9682 chore(doorbell-touch): add clangd config and project documentation 2026-02-17 21:35:10 -08:00
david 4e963b97b0 fix: Remove vendor directory on clean 2026-02-17 19:43:09 -08:00
david 8c92487a47 refactor: add active parameter to updateHint method signature
1. **Method Signature Update**: Added `bool active` parameter to `updateHint()` method across the display driver hierarchy:
   - `DisplayManager::updateHint(x, y, active)` - delegates to driver
   - `DisplayDriverTFT::updateHint(x, y, active)` - override implementation
   - `DisplayDriverGFX::updateHint(x, y, active)` - override implementation

2. **Code Formatting**: `DisplayManager.h` reformatted (whitespace/comment style changes only)

- **Breaking Change**: All existing `updateHint(x, y)` calls will fail to compile until updated to include the `active` parameter
- **Enhanced Control**: Callers can now explicitly show/hide touch hints rather than just updating position, enabling better touch feedback UX (e.g., hide hint on touch release)
- **API Consistency**: All implementations in the driver hierarchy now enforce the same signature
2026-02-17 05:23:43 -08:00
david 4414185891 feat(display): add active state parameter to hint animation
1. **Added `active` parameter to hint animation**
   - `updateHint()` now accepts a boolean `active` parameter across both display drivers (TFT and GFX)
   - When `active=true`: faster pulse animation (500ms period) during active hold
   - When `active=false`: slower pulse animation (2000ms period) during idle state

2. **Improved animation calculations**
   - Replaced modulo operator with `fmodf()` for cleaner float calculations
   - Standardized to `static_cast<uint8_t>()` for type conversions
   - Fixed GFX driver to use `color565()` method instead of manual bit shifting

3. **Updated hint display logic**
   - Now differentiates between "holding" state (fast pulse) and "idle" state (slow pulse)
   - Hint draws at both states when `holdStartX >= 0` (touch position captured)

4. **Added code formatter task**
   - New `mise.toml` task for running clang-format across all source files

- Users get **visual feedback differentiation**: fast pulsing during active hold vs. slow pulsing when idle
- More intuitive UI that clearly indicates whether a long-press is in progress or just waiting
- Cleaner, more maintainable code with standardized calculations and type conversions
2026-02-17 05:11:02 -08:00
david db668f27dd fix(display): correct type cast syntax in pulse calculation 2026-02-17 04:21:05 -08:00
david 3b0c9c98b7 style: apply consistent code formatting and spacing 2026-02-17 04:15:48 -08:00
david 4d66bded22 style(esp32-32e): reformat code and fix display dimensions 2026-02-17 04:10:03 -08:00
david 853bb38c46 feat(display): draw hint animation at touch position instead of center 2026-02-17 03:49:34 -08:00
david 5ebbf0177a style: fix indentation and formatting in doorbell code 2026-02-17 03:19:12 -08:00
david 4876fb29b7 refactor(display): improve touch handling and code formatting 2026-02-17 03:10:52 -08:00
david 40c0a0a97e refactor(esp32-s3-lcd-43): remove IO expander and use LovyanGFX backlight 2026-02-17 02:13:30 -08:00
david c348de9e38 fix(doorbell-touch): correct LovyanGFX library integration and build 2026-02-17 01:13:28 -08:00
david f658b95a2b refactor(doorbell-touch): simplify LovyanGFX library setup 2026-02-17 01:00:57 -08:00
david dcc710e9b3 refactor(display): split render into screen-specific draw methods 2026-02-17 00:06:30 -08:00
david 0e867a196c chore: remove TFT_eSPI submodule 2026-02-16 23:14:43 -08:00
david e3c78e266b chore(examples): add submodule and remove LVGL examples 2026-02-16 23:09:37 -08:00
david 30f2117e30 refactor(doorbell): unify 2x2 grid touch logic and add progress bar 2026-02-16 22:11:40 -08:00
david 9734796d57 refactor(doorbell-touch): remove entire sketch for rebuild 2026-02-16 21:13:31 -08:00
david f1fb3fb81c refactor(display): update ScreenState field names and remove time display 2026-02-16 20:59:25 -08:00
david 063087d9f5 refactor(doorbell): migrate ESP32-S3 to ESP_IOExpander library 2026-02-16 20:51:56 -08:00
david 9ba3d4992c chore(mise): update PSRAM config and commit task command 2026-02-16 19:15:48 -08:00
david 7740d2fd76 snapshot 2026-02-16 19:08:47 -08:00
david 05f6a7edf6 consolidate sketches 2026-02-16 19:08:47 -08:00
david d8febf3b50 update arduinojson 2026-02-16 19:08:47 -08:00
david 6f0611c3bd move to new multi-board setup 2026-02-16 19:08:47 -08:00
david 2d0427604c Fix ESP32-S3 LCD timing, add diagnostics, scaffold script
1. **Display timing fixes for ESP32-S3-LCD-4.3**
   - Corrected RGB panel timing parameters (hsync/vsync porch values)
   - **Critical fix**: Set `pclk_active_neg = 1` (required for ST7262 panel)
   - Added explicit PCLK speed of 16MHz
   - These changes fix the blank/unstable display issue on Waveshare 4.3" boards

2. **Added memory diagnostics**
   - Prints free heap and PSRAM at boot
   - Helps verify PSRAM is properly initialized

3. **Duplicate loop() function**
   - The `loop()` function appears twice in the .ino file
   - Contains identical code for touch handling, hold-to-silence, and serial commands
   - This is a build error waiting to happen

4. **New scaffold script**
   - Added comprehensive project scaffolding script (`scaffold.sh`)
   - Generates complete multi-target build structure with shared library and per-board drivers

- **ESP32-S3-LCD-4.3 board should now display correctly** (was likely blank before due to wrong timing)
- **Build will fail** due to duplicate `loop()` definition - needs immediate cleanup
- The scaffold script enables rapid project regeneration/setup for new installations
2026-02-16 19:08:47 -08:00
david f82dd35e1d fix: correct Waveshare touch pins, banner, test fills
- TOUCH_SDA=17 SCL=18 RST=38 per Waveshare schematic
- GPIO 8/9 conflict with LCD_B0/B3 was blanking the display
- Banner uses BOARD_NAME macro instead of hard-coded E32R35T
- TFT_eSPI #error wrapped in USE_TFT_ESPI guard
- RGB test fills on separate lines so they actually execute
2026-02-16 19:08:47 -08:00
david ab1fcc55b4 Code formatting improvement in the display initialization function
**Code formatting improvement** in the display initialization function:
- Reformatted a compressed one-liner containing RGB screen test code into properly structured, readable lines
- Split the color test sequence (RED → GREEN → BLUE) across multiple lines with preserved comments and delays

- **No functional changes** - the code behavior remains identical
- **Improved readability** - the color test sequence is now easier to understand and maintain
- **Better debugging** - individual test steps are clearly visible, making it easier to modify or troubleshoot the display initialization routine
2026-02-16 19:08:47 -08:00
david 1c06dbaccb Added RGB color test sequence commented out in the display initialization code
Added RGB color test sequence commented out in the display initialization code:
- Red screen fill (0xF800)
- Green screen fill (0x07E0)
- Blue screen fill (0x001F)
- 2-second delays between each color

**Currently:** No functional impact - the test code is commented out, so it doesn't execute.

**If uncommented:** Would add a 6-second RGB test pattern on display startup, useful for verifying:
- Display color channel functionality
- Proper RGB565 color format support
- Screen initialization success

This appears to be debug/diagnostic code left in for future troubleshooting.
2026-02-16 19:08:47 -08:00
david 124a14351b fix: correct Waveshare touch pins (17/18/38), dynamic banner
- TOUCH_SDA=17, TOUCH_SCL=18, TOUCH_RST=38 per Waveshare schematic
- GPIO 8/9 were conflicting with LCD_B0/B3, blanking the display
- Boot banner now uses BOARD_NAME macro from BoardConfig.h
2026-02-16 19:08:47 -08:00
david 9c34a39a39 fix: correct Waveshare touch pins — SDA=17 SCL=18 RST=38
GPIO 8/9 were assigned to both LCD blue data and I2C touch,
causing I2C init to steal the LCD pins and blank the display.
Corrected to match Waveshare ESP32-S3-Touch-LCD-4.3 schematic.
2026-02-16 19:08:47 -08:00
david 1e596c0fab This commit breaks the doorbell functionality completely
1. **Removed entire `loop()` implementation** - The main program loop is now completely empty
2. **Deleted duplicate `silenceAlerts()` functions** - Three identical copies were consolidated into one
3. **Stripped all functionality**:
   - Touch handling for different screens (ALERT, DASHBOARD, OFF)
   - Hold-to-silence gesture detection
   - Display rendering and backlight control
   - Serial command processing

⚠️ **This commit breaks the doorbell functionality completely**:
- The device will boot but do nothing (empty loop)
- Touch input won't be processed
- Screen won't update or display anything
- Serial commands won't work
- Alert silencing is defined but never called

This appears to be an incomplete snapshot/refactoring in progress, leaving the application non-functional.

1. **Gutted the main loop** - Reduced from ~80 lines to completely empty
2. **Removed duplicate code** - Eliminated 2 of 3 identical `silenceAlerts()` function definitions that were accidentally created

**Device is now completely non-functional:**
- No display updates or rendering
- Touch input completely ignored
- Alert silencing impossible (function defined but never called)
- Serial commands won't be processed
- Screen stays on/off in whatever state it was in

This is clearly an accidental commit or work-in-progress snapshot. The doorbell will compile and run but do absolutely nothing except the initial setup.
2026-02-16 19:07:42 -08:00
david 35016940b5 fix: use compiler.cpp.extra_flags to avoid clobbering platform defines
build.extra_flags replaces the esp32 core's platform-level flags,
which include CONFIG_IDF_TARGET_ESP32S3 — required by Arduino_GFX
for RGB panel support. compiler.cpp.extra_flags appends safely.
2026-02-16 19:05:13 -08:00
david 6d45dae9c9 fix: add missing #include <Arduino.h> to GFX/GT911 drivers
Required for uint16_t, Serial, millis() etc. when compiling
outside the .ino (Arduino IDE auto-includes Arduino.h for .ino
files but not for standalone .cpp files).
2026-02-16 19:05:13 -08:00
david 8508442682 fix: define silenceAlerts() before loop() 2026-02-16 19:05:13 -08:00
david 4f31b4aff2 fix: define silenceAlerts() — was called but never written
Restores the original behavior from before commit 46b0cb9:
delegates to logic.onTouch() which transitions state to SILENT.

This was a pre-existing bug (undefined function) exposed by the
multi-target refactoring changing compile guard structure.
2026-02-16 19:05:13 -08:00
david 087b639e71 fix: make .ino compile guard target-aware
ST7796_DRIVER check only fires when USE_TFT_ESPI is active.
Waveshare (Arduino_GFX) path skips this check entirely.
2026-02-16 19:05:13 -08:00
david 414e5dcc3f build: multi-target mise.toml with BOARD_TARGET env var
Usage:
  mise run compile                              # default (e32r35t)
  BOARD_TARGET=waveshare_s3 mise run compile    # Waveshare 4.3"
  BOARD_TARGET=e32r35t mise run all             # build + upload + monitor
  BOARD_TARGET=waveshare_s3 mise run install-libs  # install target-specific libs

Each target gets its own FQBN, build flags, library set, and port detection.
2026-02-16 19:05:13 -08:00
david 348612d9cd refactor: abstract hardware in DisplayManager
- TFT_eSPI -> Gfx typedef (zero-cost on E32R35T)
- Touch reads wrapped in #if USE_TOUCH_XPT2046 / USE_TOUCH_GT911
- Hardcoded rotation -> DISPLAY_ROTATION from BoardConfig
- All 480/320 literals -> SCREEN_WIDTH / SCREEN_HEIGHT
- Boot splash shows BOARD_NAME for target identification
- Added holdProgress() convenience method using HOLD_DURATION_MS
2026-02-16 19:05:13 -08:00
david d0ab4a8da7 refactor: parameterize Dashboard for multi-target
- TFT_eSPI / TFT_eSprite -> Gfx / GfxSprite typedefs
- Hard-coded 480x320 -> SCREEN_WIDTH / SCREEN_HEIGHT from BoardConfig
- Top bar, WiFi bars, time position all scale to any resolution
- Zero behavioral change on E32R35T (Gfx = TFT_eSPI typedef)
2026-02-16 19:05:13 -08:00
david 259a26e79e feat: add touch driver abstraction layer
XPT2046 path: no change — uses TFT_eSPI built-in getTouch().
GT911 path:   TouchDriver namespace with begin()/read() stub.

TouchDriverGT911.cpp compiles to nothing on TFT_eSPI targets.
Uncomment TAMC_GT911 lines to enable real capacitive touch.
2026-02-16 19:05:13 -08:00
david 50f7b5c390 feat: add display driver abstraction layer
Gfx / GfxSprite types:
  - TFT_eSPI path: zero-cost typedefs to TFT_eSPI / TFT_eSprite
  - Arduino_GFX path: adapter classes with TFT_eSPI-compatible API

DisplayDriverGFX.cpp compiles to nothing on TFT_eSPI targets.
GfxSprite on Arduino_GFX uses direct-draw (no offscreen buffer yet).
2026-02-16 19:05:13 -08:00
david 1b87815011 feat: add board configuration system, refactor Config.h
Board selection driven by -DTARGET_E32R35T or -DTARGET_WAVESHARE_S3_43.
Defaults to E32R35T for backward compatibility.

All hardware pin definitions moved from Config.h to board headers.
SCREEN_WIDTH/SCREEN_HEIGHT now come from board headers.
Config.h is now purely application-level configuration.

New files:
  BoardConfig.h              — board selector
  boards/board_e32r35t.h     — E32R35T pins, display, touch config
  boards/board_waveshare_s3.h — Waveshare S3 4.3" pins, display, touch config

Modified:
  Config.h — removed hardware pins section, added #include BoardConfig.h,
             added HOLD_DURATION_MS to timing section
2026-02-16 19:05:13 -08:00
david 5313222f4f snapshot 2026-02-16 19:05:13 -08:00
david 7763aadf51 snapshot 2026-02-16 19:05:13 -08:00
david d3f5a4e3e3 snapshot 2026-02-16 19:05:13 -08:00
david 850275ee03 snapshot 2026-02-16 19:05:13 -08:00
david 3e62c7d481 implement dashboard on wake 2026-02-16 19:05:13 -08:00
david e24d19eb94 snapshot 2026-02-16 19:05:13 -08:00
david cc081ebc1a snapshot 2026-02-16 19:05:13 -08:00
david 24f69e8589 snapshot 2026-02-16 19:05:13 -08:00
david 83002ff8b2 snapshot 2026-02-16 19:05:13 -08:00
david e16d7b62f6 snapshot 2026-02-16 19:05:13 -08:00
david 030dbe86d3 snapshot 2026-02-16 19:05:13 -08:00
david 3ca9465075 snapshot 2026-02-16 19:05:13 -08:00
david 9b9fb6dfb2 snapshot 2026-02-16 19:05:13 -08:00
david 5b09c14d42 snapshot 2026-02-16 19:05:13 -08:00
david f4045cdb98 snapshot 2026-02-16 19:05:13 -08:00
david fadcb684cc snapshot 2026-02-16 19:05:13 -08:00
david b3f1f0e805 add tft fork to doorbell sketch 2026-02-16 19:05:13 -08:00
david 3e4effd509 snapshot 2026-02-16 19:05:13 -08:00
david dc1a8f9768 snapshot 2026-02-16 19:05:13 -08:00
david 6823b0ac21 snapshot 2026-02-16 19:05:13 -08:00
david 09252ca585 networking broken 2026-02-16 19:05:13 -08:00
david 8be4ed3fa5 snapshot 2026-02-16 19:05:13 -08:00
david b81c93ad94 snapshot 2026-02-16 19:05:13 -08:00
david 329690abcf snapshot 2026-02-16 19:05:12 -08:00
david fbc02af589 snapshot 2026-02-16 19:05:12 -08:00
david df0527b123 snapshot 2026-02-16 19:05:12 -08:00
david f9c726626c snapshot 2026-02-16 19:05:12 -08:00
david 160c686933 snapshot 2026-02-16 19:05:12 -08:00
david 13812abc00 snapshot 2026-02-16 19:05:12 -08:00
david a2f2eb7442 snapshot 2026-02-16 19:05:11 -08:00
david 8bdbf227ca snapshot 2026-02-16 19:05:11 -08:00
david 77f8236347 snapshot 2026-02-16 19:05:10 -08:00
david 049fe7f28d snapshot 2026-02-16 19:05:10 -08:00
david cd9c63fed4 snapshot 2026-02-16 19:05:10 -08:00
david 54298dbd54 snapshot 2026-02-16 19:05:10 -08:00
david b8f6fd80f8 snapshot 2026-02-16 19:05:10 -08:00
david 2e55791fdc snapshot 2026-02-16 19:05:10 -08:00
david b738d9fec1 snapshot 2026-02-16 19:05:10 -08:00
david 63db67b9b1 snapshot 2026-02-16 19:05:10 -08:00
david 0e7641c261 snapshot 2026-02-16 19:05:10 -08:00
david 23048dc48f snapshot 2026-02-16 19:05:10 -08:00
david 66b9865a6f snapshot 2026-02-16 19:05:10 -08:00
david 787c639e90 snapshot 2026-02-16 19:05:10 -08:00
david 6efa0f382f snapshot 2026-02-16 19:05:10 -08:00
david f22fe65f81 snapshot 2026-02-16 19:05:10 -08:00
david 4f9c407d9c snapshot 2026-02-16 19:05:10 -08:00
david 147c130360 snapshot 2026-02-16 19:05:10 -08:00
david b4696a09e7 snapshot 2026-02-16 19:05:10 -08:00
david 792da02d70 snapshot 2026-02-16 19:05:10 -08:00
david 3e802c42a2 snapshot 2026-02-16 19:05:10 -08:00
david 3b6190840f snapshot 2026-02-16 19:05:10 -08:00
david 9fa00dfd11 test ST7789 display
1. **Display Driver Upgrade**
   - Replaced simple backlight control with full **Arduino_GFX library** integration
   - Configured ST7789 display controller (172x320, with 34px column offset)
   - Added SPI bus setup for display communication

2. **Visual Feedback Enhancement**
   - Transitioned from binary backlight (ON/OFF) to **full-color screen displays**:
     - **Silent state**: Black screen
     - **Alarm state**: Red/White blinking
     - **Button press**: White screen
     - **Silence confirmed**: Green screen with text
   - Added colored status messages (WiFi errors, silence confirmations)

3. **Display Test Function**
   - New `testDisplay()` cycles through RED → GREEN → BLUE → WHITE → BLACK on startup
   - Verifies display hardware functionality

- **Better user feedback**: Color-coded states and text messages replace simple backlight blinking
- **Easier troubleshooting**: Startup test validates display, WiFi errors shown visually with text
- **Enhanced alarm**: Alternating red/white screens more noticeable than simple blinking
- **Hardware utilization**: Fully leverages the 1.47" color LCD instead of treating it as a simple backlight
2026-02-16 19:03:32 -08:00
david e9678dd1ea snapshot 2026-02-16 19:03:21 -08:00
david b5c81d79f0 RGB LED Migration
1. **Hardware switch**: Replaced backlight PWM control (GPIO 22) with WS2812B RGB LED (GPIO 8)
   - Removed analog brightness levels (0-255)
   - Added bit-bang WS2812B protocol implementation (`setRGB()`)
   - Defined color palette: RED, GREEN, BLUE, WHITE, OFF

2. **Visual feedback improvements**:
   - **Silent state**: LED OFF (was dim backlight)
   - **Alarm state**: Blinks RED/WHITE (was full brightness on/off)
   - **Button press**: Shows WHITE while held (was full brightness)
   - **Confirmations**: Green flash for SILENCE commands (was dim flash)

3. **Bug fixes**:
   - Added edge detection for button to prevent repeated triggers
   - Added explicit LED OFF commands throughout setup to prevent lingering states
   - Button release now properly resets ALARM → SILENT

4. **Code cleanup**: Removed section divider comments, condensed enum/constant declarations

5. **Tooling**: Added `mise.toml` task for monitor-only (`mon`)

- **More visible alerts**: RGB colors provide clearer state indication than brightness levels
- **Better reliability**: Explicit state management prevents LED staying on unintentionally
- **Improved UX**: Button can now manually cancel alarms with visual confirmation
2026-02-16 18:26:22 -08:00
767 changed files with 60442 additions and 54405 deletions
+3
View File
@@ -0,0 +1,3 @@
[submodule "examples/Waveshare-ESP32-S3-Touch-LCD-4.3-and-Arduino"]
path = examples/Waveshare-ESP32-S3-Touch-LCD-4.3-and-Arduino
url = https://github.com/Westcott1/Waveshare-ESP32-S3-Touch-LCD-4.3-and-Arduino.git
-243
View File
@@ -1,243 +0,0 @@
#include "Display_ST7789.h"
#define SPI_WRITE(_dat) SPI.transfer(_dat)
#define SPI_WRITE_Word(_dat) SPI.transfer16(_dat)
void SPI_Init()
{
SPI.begin(EXAMPLE_PIN_NUM_SCLK,EXAMPLE_PIN_NUM_MISO,EXAMPLE_PIN_NUM_MOSI);
}
void LCD_WriteCommand(uint8_t Cmd)
{
SPI.beginTransaction(SPISettings(SPIFreq, MSBFIRST, SPI_MODE0));
digitalWrite(EXAMPLE_PIN_NUM_LCD_CS, LOW);
digitalWrite(EXAMPLE_PIN_NUM_LCD_DC, LOW);
SPI_WRITE(Cmd);
digitalWrite(EXAMPLE_PIN_NUM_LCD_CS, HIGH);
SPI.endTransaction();
}
void LCD_WriteData(uint8_t Data)
{
SPI.beginTransaction(SPISettings(SPIFreq, MSBFIRST, SPI_MODE0));
digitalWrite(EXAMPLE_PIN_NUM_LCD_CS, LOW);
digitalWrite(EXAMPLE_PIN_NUM_LCD_DC, HIGH);
SPI_WRITE(Data);
digitalWrite(EXAMPLE_PIN_NUM_LCD_CS, HIGH);
SPI.endTransaction();
}
void LCD_WriteData_Word(uint16_t Data)
{
SPI.beginTransaction(SPISettings(SPIFreq, MSBFIRST, SPI_MODE0));
digitalWrite(EXAMPLE_PIN_NUM_LCD_CS, LOW);
digitalWrite(EXAMPLE_PIN_NUM_LCD_DC, HIGH);
SPI_WRITE_Word(Data);
digitalWrite(EXAMPLE_PIN_NUM_LCD_CS, HIGH);
SPI.endTransaction();
}
void LCD_WriteData_nbyte(uint8_t* SetData,uint8_t* ReadData,uint32_t Size)
{
SPI.beginTransaction(SPISettings(SPIFreq, MSBFIRST, SPI_MODE0));
digitalWrite(EXAMPLE_PIN_NUM_LCD_CS, LOW);
digitalWrite(EXAMPLE_PIN_NUM_LCD_DC, HIGH);
SPI.transferBytes(SetData, ReadData, Size);
digitalWrite(EXAMPLE_PIN_NUM_LCD_CS, HIGH);
SPI.endTransaction();
}
void LCD_Reset(void)
{
digitalWrite(EXAMPLE_PIN_NUM_LCD_CS, LOW);
delay(50);
digitalWrite(EXAMPLE_PIN_NUM_LCD_RST, LOW);
delay(50);
digitalWrite(EXAMPLE_PIN_NUM_LCD_RST, HIGH);
delay(50);
}
void LCD_Init(void)
{
pinMode(EXAMPLE_PIN_NUM_LCD_CS, OUTPUT);
pinMode(EXAMPLE_PIN_NUM_LCD_DC, OUTPUT);
pinMode(EXAMPLE_PIN_NUM_LCD_RST, OUTPUT);
Backlight_Init();
SPI_Init();
LCD_Reset();
//************* Start Initial Sequence **********//
LCD_WriteCommand(0x11);
delay(120);
LCD_WriteCommand(0x36);
if (HORIZONTAL)
LCD_WriteData(0x00);
else
LCD_WriteData(0x70);
LCD_WriteCommand(0x3A);
LCD_WriteData(0x05);
LCD_WriteCommand(0xB0);
LCD_WriteData(0x00);
LCD_WriteData(0xE8);
LCD_WriteCommand(0xB2);
LCD_WriteData(0x0C);
LCD_WriteData(0x0C);
LCD_WriteData(0x00);
LCD_WriteData(0x33);
LCD_WriteData(0x33);
LCD_WriteCommand(0xB7);
LCD_WriteData(0x35);
LCD_WriteCommand(0xBB);
LCD_WriteData(0x35);
LCD_WriteCommand(0xC0);
LCD_WriteData(0x2C);
LCD_WriteCommand(0xC2);
LCD_WriteData(0x01);
LCD_WriteCommand(0xC3);
LCD_WriteData(0x13);
LCD_WriteCommand(0xC4);
LCD_WriteData(0x20);
LCD_WriteCommand(0xC6);
LCD_WriteData(0x0F);
LCD_WriteCommand(0xD0);
LCD_WriteData(0xA4);
LCD_WriteData(0xA1);
LCD_WriteCommand(0xD6);
LCD_WriteData(0xA1);
LCD_WriteCommand(0xE0);
LCD_WriteData(0xF0);
LCD_WriteData(0x00);
LCD_WriteData(0x04);
LCD_WriteData(0x04);
LCD_WriteData(0x04);
LCD_WriteData(0x05);
LCD_WriteData(0x29);
LCD_WriteData(0x33);
LCD_WriteData(0x3E);
LCD_WriteData(0x38);
LCD_WriteData(0x12);
LCD_WriteData(0x12);
LCD_WriteData(0x28);
LCD_WriteData(0x30);
LCD_WriteCommand(0xE1);
LCD_WriteData(0xF0);
LCD_WriteData(0x07);
LCD_WriteData(0x0A);
LCD_WriteData(0x0D);
LCD_WriteData(0x0B);
LCD_WriteData(0x07);
LCD_WriteData(0x28);
LCD_WriteData(0x33);
LCD_WriteData(0x3E);
LCD_WriteData(0x36);
LCD_WriteData(0x14);
LCD_WriteData(0x14);
LCD_WriteData(0x29);
LCD_WriteData(0x32);
LCD_WriteCommand(0x21);
LCD_WriteCommand(0x11);
delay(120);
LCD_WriteCommand(0x29);
}
/******************************************************************************
function: Set the cursor position
parameter :
Xstart: Start uint16_t x coordinate
Ystart: Start uint16_t y coordinate
Xend : End uint16_t coordinates
Yend : End uint16_t coordinatesen
******************************************************************************/
void LCD_SetCursor(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend)
{
if (HORIZONTAL) {
// set the X coordinates
LCD_WriteCommand(0x2A);
LCD_WriteData(Xstart >> 8);
LCD_WriteData(Xstart + Offset_X);
LCD_WriteData(Xend >> 8);
LCD_WriteData(Xend + Offset_X);
// set the Y coordinates
LCD_WriteCommand(0x2B);
LCD_WriteData(Ystart >> 8);
LCD_WriteData(Ystart + Offset_Y);
LCD_WriteData(Yend >> 8);
LCD_WriteData(Yend + Offset_Y);
}
else {
// set the X coordinates
LCD_WriteCommand(0x2A);
LCD_WriteData(Ystart >> 8);
LCD_WriteData(Ystart + Offset_Y);
LCD_WriteData(Yend >> 8);
LCD_WriteData(Yend + Offset_Y);
// set the Y coordinates
LCD_WriteCommand(0x2B);
LCD_WriteData(Xstart >> 8);
LCD_WriteData(Xstart + Offset_X);
LCD_WriteData(Xend >> 8);
LCD_WriteData(Xend + Offset_X);
}
LCD_WriteCommand(0x2C);
}
/******************************************************************************
function: Refresh the image in an area
parameter :
Xstart: Start uint16_t x coordinate
Ystart: Start uint16_t y coordinate
Xend : End uint16_t coordinates
Yend : End uint16_t coordinates
color : Set the color
******************************************************************************/
void LCD_addWindow(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend,uint16_t* color)
{
// uint16_t i,j;
// LCD_SetCursor(Xstart, Ystart, Xend,Yend);
// uint16_t Show_Width = Xend - Xstart + 1;
// uint16_t Show_Height = Yend - Ystart + 1;
// for(i = 0; i < Show_Height; i++){
// for(j = 0; j < Show_Width; j++){
// LCD_WriteData_Word(color[(i*(Show_Width))+j]);
// }
// }
uint16_t Show_Width = Xend - Xstart + 1;
uint16_t Show_Height = Yend - Ystart + 1;
uint32_t numBytes = Show_Width * Show_Height * sizeof(uint16_t);
uint8_t Read_D[numBytes];
LCD_SetCursor(Xstart, Ystart, Xend, Yend);
LCD_WriteData_nbyte((uint8_t*)color, Read_D, numBytes);
}
// backlight
void Backlight_Init(void)
{
ledcAttach(EXAMPLE_PIN_NUM_BK_LIGHT, Frequency, Resolution);
ledcWrite(EXAMPLE_PIN_NUM_BK_LIGHT, 100);
}
void Set_Backlight(uint8_t Light) //
{
if(Light > 100 || Light < 0)
printf("Set Backlight parameters in the range of 0 to 100 \r\n");
else{
uint32_t Backlight = Light*10;
ledcWrite(EXAMPLE_PIN_NUM_BK_LIGHT, Backlight);
}
}
-32
View File
@@ -1,32 +0,0 @@
#pragma once
#include <Arduino.h>
#include <SPI.h>
#define LCD_WIDTH 172 //LCD width
#define LCD_HEIGHT 320 //LCD height
#define SPIFreq 80000000
#define EXAMPLE_PIN_NUM_MISO 5
#define EXAMPLE_PIN_NUM_MOSI 6
#define EXAMPLE_PIN_NUM_SCLK 7
#define EXAMPLE_PIN_NUM_LCD_CS 14
#define EXAMPLE_PIN_NUM_LCD_DC 15
#define EXAMPLE_PIN_NUM_LCD_RST 21
#define EXAMPLE_PIN_NUM_BK_LIGHT 22
#define Frequency 1000
#define Resolution 10
#define VERTICAL 0
#define HORIZONTAL 1
#define Offset_X 34
#define Offset_Y 0
void LCD_SetCursor(uint16_t x1, uint16_t y1, uint16_t x2,uint16_t y2);
void LCD_Init(void);
void LCD_SetCursor(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend);
void LCD_addWindow(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend,uint16_t* color);
void Backlight_Init(void);
void Set_Backlight(uint8_t Light);
-26
View File
@@ -1,26 +0,0 @@
#include "SD_Card.h"
#include "Display_ST7789.h"
#include "LVGL_Driver.h"
#include "LVGL_Example.h"
void setup()
{
Flash_test();
LCD_Init();
Lvgl_Init();
SD_Init();
Lvgl_Example1();
// lv_demo_widgets();
// lv_demo_benchmark();
// lv_demo_keypad_encoder();
// lv_demo_music();
// lv_demo_stress();
Wireless_Test2();
}
void loop()
{
Timer_Loop();
delay(5);
}
-84
View File
@@ -1,84 +0,0 @@
/*****************************************************************************
| File : LVGL_Driver.c
| help :
The provided LVGL library file must be installed first
******************************************************************************/
#include "LVGL_Driver.h"
static lv_disp_draw_buf_t draw_buf;
static lv_color_t buf1[ LVGL_BUF_LEN ];
static lv_color_t buf2[ LVGL_BUF_LEN ];
// static lv_color_t* buf1 = (lv_color_t*) heap_caps_malloc(LVGL_BUF_LEN, MALLOC_CAP_SPIRAM);
// static lv_color_t* buf2 = (lv_color_t*) heap_caps_malloc(LVGL_BUF_LEN, MALLOC_CAP_SPIRAM);
/* Serial debugging */
void Lvgl_print(const char * buf)
{
// Serial.printf(buf);
// Serial.flush();
}
/* Display flushing
Displays LVGL content on the LCD
This function implements associating LVGL data to the LCD screen
*/
void Lvgl_Display_LCD( lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_t *color_p )
{
LCD_addWindow(area->x1, area->y1, area->x2, area->y2, ( uint16_t *)&color_p->full);
lv_disp_flush_ready( disp_drv );
}
/*Read the touchpad*/
void Lvgl_Touchpad_Read( lv_indev_drv_t * indev_drv, lv_indev_data_t * data )
{
// NULL
}
void example_increase_lvgl_tick(void *arg)
{
/* Tell LVGL how many milliseconds has elapsed */
lv_tick_inc(EXAMPLE_LVGL_TICK_PERIOD_MS);
}
void Lvgl_Init(void)
{
lv_init();
lv_disp_draw_buf_init( &draw_buf, buf1, buf2, LVGL_BUF_LEN);
/*Initialize the display*/
static lv_disp_drv_t disp_drv;
lv_disp_drv_init( &disp_drv );
/*Change the following line to your display resolution*/
disp_drv.hor_res = LVGL_WIDTH;
disp_drv.ver_res = LVGL_HEIGHT;
disp_drv.flush_cb = Lvgl_Display_LCD;
disp_drv.full_refresh = 1; /**< 1: Always make the whole screen redrawn*/
disp_drv.draw_buf = &draw_buf;
lv_disp_drv_register( &disp_drv );
/*Initialize the (dummy) input device driver*/
static lv_indev_drv_t indev_drv;
lv_indev_drv_init( &indev_drv );
indev_drv.type = LV_INDEV_TYPE_POINTER;
indev_drv.read_cb = Lvgl_Touchpad_Read;
lv_indev_drv_register( &indev_drv );
/* Create simple label */
lv_obj_t *label = lv_label_create( lv_scr_act() );
lv_label_set_text( label, "Hello Ardino and LVGL!");
lv_obj_align( label, LV_ALIGN_CENTER, 0, 0 );
const esp_timer_create_args_t lvgl_tick_timer_args = {
.callback = &example_increase_lvgl_tick,
.name = "lvgl_tick"
};
esp_timer_handle_t lvgl_tick_timer = NULL;
esp_timer_create(&lvgl_tick_timer_args, &lvgl_tick_timer);
esp_timer_start_periodic(lvgl_tick_timer, EXAMPLE_LVGL_TICK_PERIOD_MS * 1000);
}
void Timer_Loop(void)
{
lv_timer_handler(); /* let the GUI do its work */
// delay( 5 );
}
-22
View File
@@ -1,22 +0,0 @@
#pragma once
#include <lvgl.h>
#include <lv_conf.h>
#include <demos/lv_demos.h>
#include <esp_heap_caps.h>
#include "Display_ST7789.h"
#define LVGL_WIDTH (LCD_WIDTH )
#define LVGL_HEIGHT LCD_HEIGHT
#define LVGL_BUF_LEN (LVGL_WIDTH * LVGL_HEIGHT / 20)
#define EXAMPLE_LVGL_TICK_PERIOD_MS 5
void Lvgl_print(const char * buf);
void Lvgl_Display_LCD( lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_t *color_p ); // Displays LVGL content on the LCD. This function implements associating LVGL data to the LCD screen
void Lvgl_Touchpad_Read( lv_indev_drv_t * indev_drv, lv_indev_data_t * data ); // Read the touchpad
void example_increase_lvgl_tick(void *arg);
void Lvgl_Init(void);
void Timer_Loop(void);
-440
View File
@@ -1,440 +0,0 @@
#include "LVGL_Example.h"
/**********************
* TYPEDEFS
**********************/
typedef enum {
DISP_SMALL,
DISP_MEDIUM,
DISP_LARGE,
} disp_size_t;
/**********************
* STATIC PROTOTYPES
**********************/
static void Onboard_create(lv_obj_t * parent);
static void color_changer_create(lv_obj_t * parent);
static void color_changer_event_cb(lv_event_t * e);
static void color_event_cb(lv_event_t * e);
static void ta_event_cb(lv_event_t * e);
static void birthday_event_cb(lv_event_t * e);
static void calendar_event_cb(lv_event_t * e);
void IRAM_ATTR example1_increase_lvgl_tick(lv_timer_t * t);
/**********************
* STATIC VARIABLES
**********************/
static disp_size_t disp_size;
static lv_obj_t * tv;
static lv_obj_t * calendar;
lv_style_t style_text_muted;
lv_style_t style_title;
static lv_style_t style_icon;
static lv_style_t style_bullet;
static lv_obj_t * chart1;
static lv_obj_t * chart2;
static lv_obj_t * chart3;
static lv_chart_series_t * ser1;
static lv_chart_series_t * ser2;
static lv_chart_series_t * ser3;
static lv_chart_series_t * ser4;
static const lv_font_t * font_large;
static const lv_font_t * font_normal;
static lv_timer_t * auto_step_timer;
static lv_color_t original_screen_bg_color;
static lv_timer_t * meter2_timer;
lv_obj_t * SD_Size;
lv_obj_t * FlashSize;
lv_obj_t * Board_angle;
lv_obj_t * RTC_Time;
lv_obj_t * Wireless_Scan;
void IRAM_ATTR auto_switch(lv_timer_t * t)
{
uint16_t page = lv_tabview_get_tab_act(tv);
if (page == 0) {
lv_tabview_set_act(tv, 1, LV_ANIM_ON);
} else if (page == 3) {
lv_tabview_set_act(tv, 2, LV_ANIM_ON);
}
}
void Lvgl_Example1(void){
disp_size = DISP_SMALL;
font_large = LV_FONT_DEFAULT;
font_normal = LV_FONT_DEFAULT;
lv_coord_t tab_h;
tab_h = 45;
#if LV_FONT_MONTSERRAT_18
font_large = &lv_font_montserrat_18;
#else
LV_LOG_WARN("LV_FONT_MONTSERRAT_18 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead.");
#endif
#if LV_FONT_MONTSERRAT_12
font_normal = &lv_font_montserrat_12;
#else
LV_LOG_WARN("LV_FONT_MONTSERRAT_12 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead.");
#endif
lv_style_init(&style_text_muted);
lv_style_set_text_opa(&style_text_muted, LV_OPA_90);
lv_style_init(&style_title);
lv_style_set_text_font(&style_title, font_large);
lv_style_init(&style_icon);
lv_style_set_text_color(&style_icon, lv_theme_get_color_primary(NULL));
lv_style_set_text_font(&style_icon, font_large);
lv_style_init(&style_bullet);
lv_style_set_border_width(&style_bullet, 0);
lv_style_set_radius(&style_bullet, LV_RADIUS_CIRCLE);
tv = lv_tabview_create(lv_scr_act(), LV_DIR_TOP, tab_h);
lv_obj_set_style_text_font(lv_scr_act(), font_normal, 0);
lv_obj_t * t1 = lv_tabview_add_tab(tv, "Onboard");
Onboard_create(t1);
}
void Lvgl_Example1_close(void)
{
/*Delete all animation*/
lv_anim_del(NULL, NULL);
lv_timer_del(meter2_timer);
meter2_timer = NULL;
lv_obj_clean(lv_scr_act());
lv_style_reset(&style_text_muted);
lv_style_reset(&style_title);
lv_style_reset(&style_icon);
lv_style_reset(&style_bullet);
}
/**********************
* STATIC FUNCTIONS
**********************/
static void Onboard_create(lv_obj_t * parent)
{
/*Create a panel*/
lv_obj_t * panel1 = lv_obj_create(parent);
lv_obj_set_height(panel1, LV_SIZE_CONTENT);
lv_obj_t * panel1_title = lv_label_create(panel1);
lv_label_set_text(panel1_title, "Onboard parameter");
lv_obj_add_style(panel1_title, &style_title, 0);
lv_obj_t * SD_label = lv_label_create(panel1);
lv_label_set_text(SD_label, "SD Card");
lv_obj_add_style(SD_label, &style_text_muted, 0);
SD_Size = lv_textarea_create(panel1);
lv_textarea_set_one_line(SD_Size, true);
lv_textarea_set_placeholder_text(SD_Size, "SD Size");
lv_obj_add_event_cb(SD_Size, ta_event_cb, LV_EVENT_ALL, NULL);
lv_obj_t * Flash_label = lv_label_create(panel1);
lv_label_set_text(Flash_label, "Flash Size");
lv_obj_add_style(Flash_label, &style_text_muted, 0);
FlashSize = lv_textarea_create(panel1);
lv_textarea_set_one_line(FlashSize, true);
lv_textarea_set_placeholder_text(FlashSize, "Flash Size");
lv_obj_add_event_cb(FlashSize, ta_event_cb, LV_EVENT_ALL, NULL);
lv_obj_t * Wireless_label = lv_label_create(panel1);
lv_label_set_text(Wireless_label, "Wireless scan");
lv_obj_add_style(Wireless_label, &style_text_muted, 0);
Wireless_Scan = lv_textarea_create(panel1);
lv_textarea_set_one_line(Wireless_Scan, true);
lv_textarea_set_placeholder_text(Wireless_Scan, "Wireless number");
lv_obj_add_event_cb(Wireless_Scan, ta_event_cb, LV_EVENT_ALL, NULL);
// 器件布局
static lv_coord_t grid_main_col_dsc[] = {LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST};
static lv_coord_t grid_main_row_dsc[] = {LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST};
lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc);
/*Create the top panel*/
static lv_coord_t grid_1_col_dsc[] = {LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST};
static lv_coord_t grid_1_row_dsc[] = {LV_GRID_CONTENT, /*Avatar*/
LV_GRID_CONTENT, /*Name*/
LV_GRID_CONTENT, /*Description*/
LV_GRID_CONTENT, /*Email*/
LV_GRID_CONTENT, /*Phone number*/
LV_GRID_CONTENT, /*Button1*/
LV_GRID_CONTENT, /*Button2*/
LV_GRID_TEMPLATE_LAST
};
lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc);
static lv_coord_t grid_2_col_dsc[] = {LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST};
static lv_coord_t grid_2_row_dsc[] = {
LV_GRID_CONTENT, /*Title*/
5, /*Separator*/
LV_GRID_CONTENT, /*Box title*/
40, /*Box*/
LV_GRID_CONTENT, /*Box title*/
40, /*Box*/
LV_GRID_CONTENT, /*Box title*/
40, /*Box*/
LV_GRID_CONTENT, /*Box title*/
40, /*Box*/
LV_GRID_CONTENT, /*Box title*/
40, /*Box*/
LV_GRID_CONTENT, /*Box title*/
40, /*Box*/
LV_GRID_TEMPLATE_LAST
};
// lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc);
// lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc);
lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 0, 1);
lv_obj_set_grid_dsc_array(panel1, grid_2_col_dsc, grid_2_row_dsc);
lv_obj_set_grid_cell(panel1_title, LV_GRID_ALIGN_START, 0, 1, LV_GRID_ALIGN_CENTER, 0, 1);
lv_obj_set_grid_cell(SD_label, LV_GRID_ALIGN_START, 0, 1, LV_GRID_ALIGN_START, 2, 1);
lv_obj_set_grid_cell(SD_Size, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_CENTER, 3, 1);
lv_obj_set_grid_cell(Flash_label, LV_GRID_ALIGN_START, 0, 1, LV_GRID_ALIGN_START, 4, 1);
lv_obj_set_grid_cell(FlashSize, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_CENTER, 5, 1);
lv_obj_set_grid_cell(Wireless_label, LV_GRID_ALIGN_START, 0, 1, LV_GRID_ALIGN_START, 6, 1);
lv_obj_set_grid_cell(Wireless_Scan, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_CENTER, 7, 1);
// 器件布局 END
auto_step_timer = lv_timer_create(example1_increase_lvgl_tick, 100, NULL);
}
void IRAM_ATTR example1_increase_lvgl_tick(lv_timer_t * t)
{
char buf[100]={0};
snprintf(buf, sizeof(buf), "%d MB\r\n", SDCard_Size);
lv_textarea_set_placeholder_text(SD_Size, buf);
snprintf(buf, sizeof(buf), "%d MB\r\n", Flash_Size);
lv_textarea_set_placeholder_text(FlashSize, buf);
if(Scan_finish)
snprintf(buf, sizeof(buf), "W: %d B: %d OK.\r\n",WIFI_NUM,BLE_NUM);
// snprintf(buf, sizeof(buf), "WIFI: %d ..OK.\r\n",WIFI_NUM);
else
snprintf(buf, sizeof(buf), "W: %d B: %d\r\n",WIFI_NUM,BLE_NUM);
// snprintf(buf, sizeof(buf), "WIFI: %d \r\n",WIFI_NUM);
lv_textarea_set_placeholder_text(Wireless_Scan, buf);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void color_changer_create(lv_obj_t * parent)
{
static lv_palette_t palette[] = {
LV_PALETTE_BLUE, LV_PALETTE_GREEN, LV_PALETTE_BLUE_GREY, LV_PALETTE_ORANGE,
LV_PALETTE_RED, LV_PALETTE_PURPLE, LV_PALETTE_TEAL, _LV_PALETTE_LAST
};
lv_obj_t * color_cont = lv_obj_create(parent);
lv_obj_remove_style_all(color_cont);
lv_obj_set_flex_flow(color_cont, LV_FLEX_FLOW_ROW);
lv_obj_set_flex_align(color_cont, LV_FLEX_ALIGN_SPACE_EVENLY, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
lv_obj_add_flag(color_cont, LV_OBJ_FLAG_FLOATING);
lv_obj_set_style_bg_color(color_cont, lv_color_white(), 0);
lv_obj_set_style_pad_right(color_cont, disp_size == DISP_SMALL ? LV_DPX(47) : LV_DPX(55), 0);
lv_obj_set_style_bg_opa(color_cont, LV_OPA_COVER, 0);
lv_obj_set_style_radius(color_cont, LV_RADIUS_CIRCLE, 0);
if(disp_size == DISP_SMALL) lv_obj_set_size(color_cont, LV_DPX(52), LV_DPX(52));
else lv_obj_set_size(color_cont, LV_DPX(60), LV_DPX(60));
lv_obj_align(color_cont, LV_ALIGN_BOTTOM_RIGHT, - LV_DPX(10), - LV_DPX(10));
uint32_t i;
for(i = 0; palette[i] != _LV_PALETTE_LAST; i++) {
lv_obj_t * c = lv_btn_create(color_cont);
lv_obj_set_style_bg_color(c, lv_palette_main(palette[i]), 0);
lv_obj_set_style_radius(c, LV_RADIUS_CIRCLE, 0);
lv_obj_set_style_opa(c, LV_OPA_TRANSP, 0);
lv_obj_set_size(c, 20, 20);
lv_obj_add_event_cb(c, color_event_cb, LV_EVENT_ALL, &palette[i]);
lv_obj_clear_flag(c, LV_OBJ_FLAG_SCROLL_ON_FOCUS);
}
lv_obj_t * btn = lv_btn_create(parent);
lv_obj_add_flag(btn, LV_OBJ_FLAG_FLOATING | LV_OBJ_FLAG_CLICKABLE);
lv_obj_set_style_bg_color(btn, lv_color_white(), LV_STATE_CHECKED);
lv_obj_set_style_pad_all(btn, 10, 0);
lv_obj_set_style_radius(btn, LV_RADIUS_CIRCLE, 0);
lv_obj_add_event_cb(btn, color_changer_event_cb, LV_EVENT_ALL, color_cont);
lv_obj_set_style_shadow_width(btn, 0, 0);
lv_obj_set_style_bg_img_src(btn, LV_SYMBOL_TINT, 0);
if(disp_size == DISP_SMALL) {
lv_obj_set_size(btn, LV_DPX(42), LV_DPX(42));
lv_obj_align(btn, LV_ALIGN_BOTTOM_RIGHT, -LV_DPX(15), -LV_DPX(15));
}
else {
lv_obj_set_size(btn, LV_DPX(50), LV_DPX(50));
lv_obj_align(btn, LV_ALIGN_BOTTOM_RIGHT, -LV_DPX(15), -LV_DPX(15));
}
}
static void color_changer_anim_cb(void * var, int32_t v)
{
lv_obj_t * obj =(lv_obj_t *) var;
lv_coord_t max_w = lv_obj_get_width(lv_obj_get_parent(obj)) - LV_DPX(20);
lv_coord_t w;
if(disp_size == DISP_SMALL) {
w = lv_map(v, 0, 256, LV_DPX(52), max_w);
lv_obj_set_width(obj, w);
lv_obj_align(obj, LV_ALIGN_BOTTOM_RIGHT, - LV_DPX(10), - LV_DPX(10));
}
else {
w = lv_map(v, 0, 256, LV_DPX(60), max_w);
lv_obj_set_width(obj, w);
lv_obj_align(obj, LV_ALIGN_BOTTOM_RIGHT, - LV_DPX(10), - LV_DPX(10));
}
if(v > LV_OPA_COVER) v = LV_OPA_COVER;
uint32_t i;
for(i = 0; i < lv_obj_get_child_cnt(obj); i++) {
lv_obj_set_style_opa(lv_obj_get_child(obj, i), v, 0);
}
}
static void color_changer_event_cb(lv_event_t * e)
{
if(lv_event_get_code(e) == LV_EVENT_CLICKED) {
lv_obj_t * color_cont = (lv_obj_t *)lv_event_get_user_data(e);
if(lv_obj_get_width(color_cont) < LV_HOR_RES / 2) {
lv_anim_t a;
lv_anim_init(&a);
lv_anim_set_var(&a, color_cont);
lv_anim_set_exec_cb(&a, color_changer_anim_cb);
lv_anim_set_values(&a, 0, 256);
lv_anim_set_time(&a, 200);
lv_anim_start(&a);
}
else {
lv_anim_t a;
lv_anim_init(&a);
lv_anim_set_var(&a, color_cont);
lv_anim_set_exec_cb(&a, color_changer_anim_cb);
lv_anim_set_values(&a, 256, 0);
lv_anim_set_time(&a, 200);
lv_anim_start(&a);
}
}
}
static void color_event_cb(lv_event_t * e)
{
lv_event_code_t code = lv_event_get_code(e);
lv_obj_t * obj = lv_event_get_target(e);
if(code == LV_EVENT_FOCUSED) {
lv_obj_t * color_cont = lv_obj_get_parent(obj);
if(lv_obj_get_width(color_cont) < LV_HOR_RES / 2) {
lv_anim_t a;
lv_anim_init(&a);
lv_anim_set_var(&a, color_cont);
lv_anim_set_exec_cb(&a, color_changer_anim_cb);
lv_anim_set_values(&a, 0, 256);
lv_anim_set_time(&a, 200);
lv_anim_start(&a);
}
}
else if(code == LV_EVENT_CLICKED) {
lv_palette_t * palette_primary = (lv_palette_t *)lv_event_get_user_data(e);
lv_palette_t palette_secondary =(lv_palette_t) ((*palette_primary) + 3); /*Use another palette as secondary*/
if(palette_secondary >= _LV_PALETTE_LAST) palette_secondary =(lv_palette_t)(0);
#if LV_USE_THEME_DEFAULT
lv_theme_default_init(NULL, lv_palette_main(*palette_primary), lv_palette_main(palette_secondary),
LV_THEME_DEFAULT_DARK, font_normal);
#endif
lv_color_t color = lv_palette_main(*palette_primary);
lv_style_set_text_color(&style_icon, color);
lv_chart_set_series_color(chart1, ser1, color);
lv_chart_set_series_color(chart2, ser3, color);
}
}
static void ta_event_cb(lv_event_t * e)
{
}
static void birthday_event_cb(lv_event_t * e)
{
lv_event_code_t code = lv_event_get_code(e);
lv_obj_t * ta = lv_event_get_target(e);
if(code == LV_EVENT_FOCUSED) {
if(lv_indev_get_type(lv_indev_get_act()) == LV_INDEV_TYPE_POINTER) {
if(calendar == NULL) {
lv_obj_add_flag(lv_layer_top(), LV_OBJ_FLAG_CLICKABLE);
calendar = lv_calendar_create(lv_layer_top());
lv_obj_set_style_bg_opa(lv_layer_top(), LV_OPA_50, 0);
lv_obj_set_style_bg_color(lv_layer_top(), lv_palette_main(LV_PALETTE_GREY), 0);
if(disp_size == DISP_SMALL) lv_obj_set_size(calendar, 180, 200);
else if(disp_size == DISP_MEDIUM) lv_obj_set_size(calendar, 200, 220);
else lv_obj_set_size(calendar, 300, 330);
lv_calendar_set_showed_date(calendar, 1990, 01);
lv_obj_align(calendar, LV_ALIGN_CENTER, 0, 30);
lv_obj_add_event_cb(calendar, calendar_event_cb, LV_EVENT_ALL, ta);
lv_calendar_header_dropdown_create(calendar);
}
}
}
}
static void calendar_event_cb(lv_event_t * e)
{
lv_event_code_t code = lv_event_get_code(e);
lv_obj_t * ta = (lv_obj_t *)lv_event_get_user_data(e);
lv_obj_t * obj = (lv_obj_t *)lv_event_get_current_target(e);
if(code == LV_EVENT_VALUE_CHANGED) {
lv_calendar_date_t d;
lv_calendar_get_pressed_date(obj, &d);
char buf[32];
lv_snprintf(buf, sizeof(buf), "%02d.%02d.%d", d.day, d.month, d.year);
lv_textarea_set_text(ta, buf);
lv_obj_del(calendar);
calendar = NULL;
lv_obj_clear_flag(lv_layer_top(), LV_OBJ_FLAG_CLICKABLE);
lv_obj_set_style_bg_opa(lv_layer_top(), LV_OPA_TRANSP, 0);
}
}
-10
View File
@@ -1,10 +0,0 @@
#pragma once
#include "LVGL_Driver.h"
#include "SD_Card.h"
#include "Wireless.h"
#define EXAMPLE1_LVGL_TICK_PERIOD_MS 1000
void Lvgl_Example1(void);
-116
View File
@@ -1,116 +0,0 @@
#include "SD_Card.h"
uint16_t SDCard_Size;
uint16_t Flash_Size;
bool SD_Init() {
// SD
pinMode(SD_CS, OUTPUT);
digitalWrite(SD_CS, HIGH);
if (SD.begin(SD_CS, SPI)) {
printf("SD card initialization successful!\r\n");
} else {
printf("SD card initialization failed!\r\n");
}
uint8_t cardType = SD.cardType();
if(cardType == CARD_NONE){
printf("No SD card attached\r\n");
return false;
}
else{
printf("SD Card Type: ");
if(cardType == CARD_MMC){
printf("MMC\r\n");
} else if(cardType == CARD_SD){
printf("SDSC\r\n");
} else if(cardType == CARD_SDHC){
printf("SDHC\r\n");
} else {
printf("UNKNOWN\r\n");
}
uint64_t totalBytes = SD.totalBytes();
uint64_t usedBytes = SD.usedBytes();
SDCard_Size = totalBytes/(1024*1024);
printf("Total space: %llu\n", totalBytes);
printf("Used space: %llu\n", usedBytes);
printf("Free space: %llu\n", totalBytes - usedBytes);
}
return true;
}
bool File_Search(const char* directory, const char* fileName)
{
File Path = SD.open(directory);
if (!Path) {
printf("Path: <%s> does not exist\r\n",directory);
return false;
}
File file = Path.openNextFile();
while (file) {
if (strcmp(file.name(), fileName) == 0) {
if (strcmp(directory, "/") == 0)
printf("File '%s%s' found in root directory.\r\n",directory,fileName);
else
printf("File '%s/%s' found in root directory.\r\n",directory,fileName);
Path.close();
return true;
}
file = Path.openNextFile();
}
if (strcmp(directory, "/") == 0)
printf("File '%s%s' not found in root directory.\r\n",directory,fileName);
else
printf("File '%s/%s' not found in root directory.\r\n",directory,fileName);
Path.close();
return false;
}
uint16_t Folder_retrieval(const char* directory, const char* fileExtension, char File_Name[][100],uint16_t maxFiles)
{
File Path = SD.open(directory);
if (!Path) {
printf("Path: <%s> does not exist\r\n",directory);
return false;
}
uint16_t fileCount = 0;
char filePath[100];
File file = Path.openNextFile();
while (file && fileCount < maxFiles) {
if (!file.isDirectory() && strstr(file.name(), fileExtension)) {
strncpy(File_Name[fileCount], file.name(), sizeof(File_Name[fileCount]));
if (strcmp(directory, "/") == 0) {
snprintf(filePath, 100, "%s%s", directory, file.name());
} else {
snprintf(filePath, 100, "%s/%s", directory, file.name());
}
printf("File found: %s\r\n", filePath);
fileCount++;
}
file = Path.openNextFile();
}
Path.close();
if (fileCount > 0) {
printf(" %d <%s> files were retrieved\r\n",fileCount,fileExtension);
return fileCount;
} else {
printf("No files with extension '%s' found in directory: %s\r\n", fileExtension, directory);
return 0;
}
}
void remove_file_extension(char *file_name) {
char *last_dot = strrchr(file_name, '.');
if (last_dot != NULL) {
*last_dot = '\0';
}
}
void Flash_test()
{
printf("/********** RAM Test**********/\r\n");
// Get Flash size
uint32_t flashSize = ESP.getFlashChipSize();
Flash_Size = flashSize/1024/1024;
printf("Flash size: %d MB \r\n", flashSize/1024/1024);
printf("/******* RAM Test Over********/\r\n\r\n");
}
-19
View File
@@ -1,19 +0,0 @@
#pragma once
#include "Arduino.h"
#include <cstring>
#include "Display_ST7789.h"
#include "SD.h"
#include "FS.h"
// Digital I/O used
#define SD_CS 4 // SD_D3:
extern uint16_t SDCard_Size;
extern uint16_t Flash_Size;
bool SD_Init();
void Flash_test();
bool File_Search(const char* directory, const char* fileName);
uint16_t Folder_retrieval(const char* directory, const char* fileExtension, char File_Name[][100],uint16_t maxFiles);
void remove_file_extension(char *file_name);
-79
View File
@@ -1,79 +0,0 @@
#include "Wireless.h"
bool WIFI_Connection = 0;
uint8_t WIFI_NUM = 0;
uint8_t BLE_NUM = 0;
bool Scan_finish = 0;
int wifi_scan_number()
{
printf("/**********WiFi Test**********/\r\n");
// Set WiFi to station mode and disconnect from an AP if it was previously connected.
WiFi.mode(WIFI_STA);
WiFi.setSleep(true);
// WiFi.scanNetworks will return the number of networks found.
int count = WiFi.scanNetworks();
if (count == 0)
{
printf("No WIFI device was scanned\r\n");
}
else{
printf("Scanned %d Wi-Fi devices\r\n",count);
}
// Delete the scan result to free memory for code below.
WiFi.disconnect(true);
WiFi.scanDelete();
WiFi.mode(WIFI_OFF);
vTaskDelay(100);
printf("/*******WiFi Test Over********/\r\n\r\n");
return count;
}
int ble_scan_number()
{
printf("/**********BLE Test**********/\r\n");
BLEDevice::init("ESP32");
BLEScan* pBLEScan = BLEDevice::getScan();
pBLEScan->setActiveScan(true);
BLEScanResults* foundDevices = pBLEScan->start(5);
int count = foundDevices->getCount();
if (count == 0)
{
printf("No Bluetooth device was scanned\r\n");
}
else{
printf("Scanned %d Bluetooth devices\r\n",count);
}
pBLEScan->stop();
pBLEScan->clearResults();
BLEDevice::deinit(true);
vTaskDelay(100);
printf("/**********BLE Test Over**********/\r\n\r\n");
return count;
}
extern char buffer[128]; /* Make sure buffer is enough for `sprintf` */
void Wireless_Test1(){
BLE_NUM = ble_scan_number(); // !!! Please note that continuing to use Bluetooth will result in allocation failure due to RAM usage, so pay attention to RAM usage when Bluetooth is turned on
WIFI_NUM = wifi_scan_number();
Scan_finish = 1;
}
void WirelessScanTask(void *parameter) {
BLE_NUM = ble_scan_number(); // !!! Please note that continuing to use Bluetooth will result in allocation failure due to RAM usage, so pay attention to RAM usage when Bluetooth is turned on
WIFI_NUM = wifi_scan_number();
Scan_finish = 1;
vTaskDelay(pdMS_TO_TICKS(1000));
vTaskDelete(NULL);
}
void Wireless_Test2(){
xTaskCreatePinnedToCore(
WirelessScanTask,
"WirelessScanTask",
4096,
NULL,
2,
NULL,
0
);
}
-14
View File
@@ -1,14 +0,0 @@
#pragma once
#include "WiFi.h"
#include <BLEDevice.h>
#include <BLEScan.h>
extern bool WIFI_Connection;
extern uint8_t WIFI_NUM;
extern uint8_t BLE_NUM;
extern bool Scan_finish;
int wifi_scan_number();
int ble_scan_number();
void Wireless_Test1();
void Wireless_Test2();
-245
View File
@@ -1,245 +0,0 @@
#include "Display_ST7789.h"
#define SPI_WRITE(_dat) SPI.transfer(_dat)
#define SPI_WRITE_Word(_dat) SPI.transfer16(_dat)
#define SPI_WRITE_nByte(_SetData,_ReadData,_Size) SPI.transferBytes(_SetData,_ReadData,_Size)
void SPI_Init()
{
SPI.begin(EXAMPLE_PIN_NUM_SCLK,EXAMPLE_PIN_NUM_MISO,EXAMPLE_PIN_NUM_MOSI);
}
void LCD_WriteCommand(uint8_t Cmd)
{
SPI.beginTransaction(SPISettings(SPIFreq, MSBFIRST, SPI_MODE0));
digitalWrite(EXAMPLE_PIN_NUM_LCD_CS, LOW);
digitalWrite(EXAMPLE_PIN_NUM_LCD_DC, LOW);
SPI_WRITE(Cmd);
digitalWrite(EXAMPLE_PIN_NUM_LCD_CS, HIGH);
SPI.endTransaction();
}
void LCD_WriteData(uint8_t Data)
{
SPI.beginTransaction(SPISettings(SPIFreq, MSBFIRST, SPI_MODE0));
digitalWrite(EXAMPLE_PIN_NUM_LCD_CS, LOW);
digitalWrite(EXAMPLE_PIN_NUM_LCD_DC, HIGH);
SPI_WRITE(Data);
digitalWrite(EXAMPLE_PIN_NUM_LCD_CS, HIGH);
SPI.endTransaction();
}
void LCD_WriteData_Word(uint16_t Data)
{
SPI.beginTransaction(SPISettings(SPIFreq, MSBFIRST, SPI_MODE0));
digitalWrite(EXAMPLE_PIN_NUM_LCD_CS, LOW);
digitalWrite(EXAMPLE_PIN_NUM_LCD_DC, HIGH);
SPI_WRITE_Word(Data);
digitalWrite(EXAMPLE_PIN_NUM_LCD_CS, HIGH);
SPI.endTransaction();
}
void LCD_WriteData_nbyte(uint8_t* SetData,uint8_t* ReadData,uint32_t Size)
{
SPI.beginTransaction(SPISettings(SPIFreq, MSBFIRST, SPI_MODE0));
digitalWrite(EXAMPLE_PIN_NUM_LCD_CS, LOW);
digitalWrite(EXAMPLE_PIN_NUM_LCD_DC, HIGH);
SPI_WRITE_nByte(SetData, ReadData, Size);
digitalWrite(EXAMPLE_PIN_NUM_LCD_CS, HIGH);
SPI.endTransaction();
}
void LCD_Reset(void)
{
digitalWrite(EXAMPLE_PIN_NUM_LCD_CS, LOW);
delay(50);
digitalWrite(EXAMPLE_PIN_NUM_LCD_RST, LOW);
delay(50);
digitalWrite(EXAMPLE_PIN_NUM_LCD_RST, HIGH);
delay(50);
}
void LCD_Init(void)
{
pinMode(EXAMPLE_PIN_NUM_LCD_CS, OUTPUT);
pinMode(EXAMPLE_PIN_NUM_LCD_DC, OUTPUT);
pinMode(EXAMPLE_PIN_NUM_LCD_RST, OUTPUT);
Backlight_Init();
SPI_Init();
LCD_Reset();
//************* Start Initial Sequence **********//
LCD_WriteCommand(0x11);
delay(120);
LCD_WriteCommand(0x36);
if (HORIZONTAL)
LCD_WriteData(0x00);
else
LCD_WriteData(0x70);
LCD_WriteCommand(0x3A);
LCD_WriteData(0x05);
LCD_WriteCommand(0xB0);
LCD_WriteData(0x00);
LCD_WriteData(0xE8);
LCD_WriteCommand(0xB2);
LCD_WriteData(0x0C);
LCD_WriteData(0x0C);
LCD_WriteData(0x00);
LCD_WriteData(0x33);
LCD_WriteData(0x33);
LCD_WriteCommand(0xB7);
LCD_WriteData(0x35);
LCD_WriteCommand(0xBB);
LCD_WriteData(0x35);
LCD_WriteCommand(0xC0);
LCD_WriteData(0x2C);
LCD_WriteCommand(0xC2);
LCD_WriteData(0x01);
LCD_WriteCommand(0xC3);
LCD_WriteData(0x13);
LCD_WriteCommand(0xC4);
LCD_WriteData(0x20);
LCD_WriteCommand(0xC6);
LCD_WriteData(0x0F);
LCD_WriteCommand(0xD0);
LCD_WriteData(0xA4);
LCD_WriteData(0xA1);
LCD_WriteCommand(0xD6);
LCD_WriteData(0xA1);
LCD_WriteCommand(0xE0);
LCD_WriteData(0xF0);
LCD_WriteData(0x00);
LCD_WriteData(0x04);
LCD_WriteData(0x04);
LCD_WriteData(0x04);
LCD_WriteData(0x05);
LCD_WriteData(0x29);
LCD_WriteData(0x33);
LCD_WriteData(0x3E);
LCD_WriteData(0x38);
LCD_WriteData(0x12);
LCD_WriteData(0x12);
LCD_WriteData(0x28);
LCD_WriteData(0x30);
LCD_WriteCommand(0xE1);
LCD_WriteData(0xF0);
LCD_WriteData(0x07);
LCD_WriteData(0x0A);
LCD_WriteData(0x0D);
LCD_WriteData(0x0B);
LCD_WriteData(0x07);
LCD_WriteData(0x28);
LCD_WriteData(0x33);
LCD_WriteData(0x3E);
LCD_WriteData(0x36);
LCD_WriteData(0x14);
LCD_WriteData(0x14);
LCD_WriteData(0x29);
LCD_WriteData(0x32);
LCD_WriteCommand(0x21);
LCD_WriteCommand(0x11);
delay(120);
LCD_WriteCommand(0x29);
}
/******************************************************************************
function: Set the cursor position
parameter :
Xstart: Start uint16_t x coordinate
Ystart: Start uint16_t y coordinate
Xend : End uint16_t coordinates
Yend : End uint16_t coordinatesen
******************************************************************************/
void LCD_SetCursor(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend)
{
if (HORIZONTAL) {
// set the X coordinates
LCD_WriteCommand(0x2A);
LCD_WriteData(Xstart >> 8);
LCD_WriteData(Xstart + Offset_X);
LCD_WriteData(Xend >> 8);
LCD_WriteData(Xend + Offset_X);
// set the Y coordinates
LCD_WriteCommand(0x2B);
LCD_WriteData(Ystart >> 8);
LCD_WriteData(Ystart + Offset_Y);
LCD_WriteData(Yend >> 8);
LCD_WriteData(Yend + Offset_Y);
}
else {
// set the X coordinates
LCD_WriteCommand(0x2A);
LCD_WriteData(Ystart >> 8);
LCD_WriteData(Ystart + Offset_Y);
LCD_WriteData(Yend >> 8);
LCD_WriteData(Yend + Offset_Y);
// set the Y coordinates
LCD_WriteCommand(0x2B);
LCD_WriteData(Xstart >> 8);
LCD_WriteData(Xstart + Offset_X);
LCD_WriteData(Xend >> 8);
LCD_WriteData(Xend + Offset_X);
}
LCD_WriteCommand(0x2C);
}
/******************************************************************************
function: Refresh the image in an area
parameter :
Xstart: Start uint16_t x coordinate
Ystart: Start uint16_t y coordinate
Xend : End uint16_t coordinates
Yend : End uint16_t coordinates
color : Set the color
******************************************************************************/
void LCD_addWindow(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend,uint16_t* color)
{
// uint16_t i,j;
// LCD_SetCursor(Xstart, Ystart, Xend,Yend);
// uint16_t Show_Width = Xend - Xstart + 1;
// uint16_t Show_Height = Yend - Ystart + 1;
// for(i = 0; i < Show_Height; i++){
// for(j = 0; j < Show_Width; j++){
// LCD_WriteData_Word(color[(i*(Show_Width))+j]);
// }
// }
uint16_t Show_Width = Xend - Xstart + 1;
uint16_t Show_Height = Yend - Ystart + 1;
uint32_t numBytes = Show_Width * Show_Height * sizeof(uint16_t);
uint8_t Read_D[numBytes];
LCD_SetCursor(Xstart, Ystart, Xend, Yend);
LCD_WriteData_nbyte((uint8_t*)color, Read_D, numBytes);
}
// backlight
void Backlight_Init(void)
{
ledcAttach(EXAMPLE_PIN_NUM_BK_LIGHT, Frequency, Resolution);
ledcWrite(EXAMPLE_PIN_NUM_BK_LIGHT, 100);
}
void Set_Backlight(uint8_t Light) //
{
if(Light > 100 || Light < 0)
printf("Set Backlight parameters in the range of 0 to 100 \r\n");
else{
uint32_t Backlight = Light*10;
ledcWrite(EXAMPLE_PIN_NUM_BK_LIGHT, Backlight);
}
}
-31
View File
@@ -1,31 +0,0 @@
#pragma once
#include <Arduino.h>
#include <SPI.h>
#define LCD_WIDTH 172 //LCD width
#define LCD_HEIGHT 320 //LCD height
#define SPIFreq 80000000
#define EXAMPLE_PIN_NUM_MISO 5
#define EXAMPLE_PIN_NUM_MOSI 6
#define EXAMPLE_PIN_NUM_SCLK 7
#define EXAMPLE_PIN_NUM_LCD_CS 14
#define EXAMPLE_PIN_NUM_LCD_DC 15
#define EXAMPLE_PIN_NUM_LCD_RST 21
#define EXAMPLE_PIN_NUM_BK_LIGHT 22
#define Frequency 1000
#define Resolution 10
#define VERTICAL 0
#define HORIZONTAL 1
#define Offset_X 34
#define Offset_Y 0
void SPI_Init();
void LCD_Init(void);
void LCD_SetCursor(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend);
void LCD_addWindow(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend,uint16_t* color);
void Backlight_Init(void);
void Set_Backlight(uint8_t Light);
-124
View File
@@ -1,124 +0,0 @@
#include "LCD_Image.h"
PNG png;
File Image_file;
uint16_t Image_CNT;
char SD_Image_Name[100][100] ;
char File_Image_Name[100][100] ;
int16_t xpos = 0;
int16_t ypos = 0;
void * pngOpen(const char *filePath, int32_t *size) {
Image_file = SD.open(filePath);
*size = Image_file.size();
return &Image_file;
}
void pngClose(void *handle) {
File Image_file = *((File*)handle);
if (Image_file) Image_file.close();
}
int32_t pngRead(PNGFILE *page, uint8_t *buffer, int32_t length) {
if (!Image_file) return 0;
page = page; // Avoid warning
return Image_file.read(buffer, length);
}
int32_t pngSeek(PNGFILE *page, int32_t position) {
if (!Image_file) return 0;
page = page; // Avoid warning
return Image_file.seek(position);
}
//=========================================v==========================================
// pngDraw
//====================================================================================
// This next function will be called during decoding of the png file to
// render each image line to the TFT. If you use a different TFT library
// you will need to adapt this function to suit.
// Callback function to draw pixels to the display
static uint16_t lineBuffer[MAX_IMAGE_WIDTH];
void pngDraw(PNGDRAW *pDraw) {
png.getLineAsRGB565(pDraw, lineBuffer, PNG_RGB565_BIG_ENDIAN, 0xffffffff);
uint32_t size = pDraw->iWidth;
for (size_t i = 0; i < size; i++) {
lineBuffer[i] = (((lineBuffer[i] >> 8) & 0xFF) | ((lineBuffer[i] << 8) & 0xFF00)); // 所有数据修正
}
LCD_addWindow(xpos, pDraw->y, xpos + pDraw->iWidth, ypos + pDraw->y + 1,lineBuffer); // x_end End index on x-axis (x_end not included)
}
/////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
void Search_Image(const char* directory, const char* fileExtension) {
Image_CNT = Folder_retrieval(directory,fileExtension,SD_Image_Name,100);
if(Image_CNT) {
for (int i = 0; i < Image_CNT; i++) {
strcpy(File_Image_Name[i], SD_Image_Name[i]);
remove_file_extension(File_Image_Name[i]);
}
}
}
void Show_Image(const char * filePath)
{
printf("Currently display picture %s\r\n",filePath);
int16_t ret = png.open(filePath, pngOpen, pngClose, pngRead, pngSeek, pngDraw);
if (ret == PNG_SUCCESS) {
printf("image specs: (%d x %d), %d bpp, pixel type: %d\r\n", png.getWidth(), png.getHeight(), png.getBpp(), png.getPixelType());
uint32_t dt = millis();
if (png.getWidth() > MAX_IMAGE_WIDTH) {
printf("Image too wide for allocated line buffer size!\r\n");
}
else {
ret = png.decode(NULL, 0);
png.close();
}
printf("%d ms\r\n",millis()-dt);
}
}
void Display_Image(const char* directory, const char* fileExtension, uint16_t ID)
{
Search_Image(directory,fileExtension);
if(Image_CNT) {
String FilePath;
if (String(directory) == "/") { // Handle the case when the directory is the root
FilePath = String(directory) + SD_Image_Name[ID];
} else {
FilePath = String(directory) + "/" + SD_Image_Name[ID];
}
const char* filePathCStr = FilePath.c_str(); // Convert String to c_str() for Show_Image function
printf("Show : %s \r\n", filePathCStr); // Print file path for debugging
Show_Image(filePathCStr); // Show the image using the file path
}
else
printf("No files with extension '%s' found in directory: %s\r\n", fileExtension, directory);
}
uint16_t Now_Image = 0;
void Image_Next(const char* directory, const char* fileExtension)
{
if(!digitalRead(BOOT_KEY_PIN)){
while(!digitalRead(BOOT_KEY_PIN));
Now_Image ++;
if(Now_Image == Image_CNT)
Now_Image = 0;
Display_Image(directory,fileExtension,Now_Image);
}
}
void Image_Next_Loop(const char* directory, const char* fileExtension,uint32_t NextTime)
{
static uint32_t NextTime_Now=0;
NextTime_Now++;
if(NextTime_Now == NextTime)
{
NextTime_Now = 0;
Now_Image ++;
if(Now_Image == Image_CNT)
Now_Image = 0;
Display_Image(directory,fileExtension,Now_Image);
}
}
-14
View File
@@ -1,14 +0,0 @@
#pragma once
#include <PNGdec.h>
#include "SD_Card.h"
#include "Display_ST7789.h"
#define BOOT_KEY_PIN 9
#define MAX_IMAGE_WIDTH 172 // Adjust for your images
void Search_Image(const char* directory, const char* fileExtension);
void Show_Image(const char * filePath);
void Display_Image(const char* directory, const char* fileExtension, uint16_t ID);
void Image_Next(const char* directory, const char* fileExtension);
void Image_Next_Loop(const char* directory, const char* fileExtension,uint32_t NextTime);
-19
View File
@@ -1,19 +0,0 @@
#include "SD_Card.h"
#include "Display_ST7789.h"
#include "LCD_Image.h"
void setup()
{
Flash_test();
LCD_Init();
SD_Init();
Display_Image("/",".png", 0);
pinMode(BOOT_KEY_PIN, INPUT);
}
void loop()
{
Image_Next_Loop("/",".png",300);
delay(5);
}
-113
View File
@@ -1,113 +0,0 @@
#include "SD_Card.h"
uint16_t SDCard_Size;
uint16_t Flash_Size;
void SD_Init() {
// SD
if (SD.begin(SD_CS, SPI, 80000000, "/sd", 5, true)) {
printf("SD card initialization successful!\r\n");
} else {
printf("SD card initialization failed!\r\n");
}
uint8_t cardType = SD.cardType();
if(cardType == CARD_NONE){
printf("No SD card attached\r\n");
return;
}
else{
printf("SD Card Type: ");
if(cardType == CARD_MMC){
printf("MMC\r\n");
} else if(cardType == CARD_SD){
printf("SDSC\r\n");
} else if(cardType == CARD_SDHC){
printf("SDHC\r\n");
} else {
printf("UNKNOWN\r\n");
}
uint64_t totalBytes = SD.totalBytes();
uint64_t usedBytes = SD.usedBytes();
SDCard_Size = totalBytes/(1024*1024);
printf("Total space: %llu\n", totalBytes);
printf("Used space: %llu\n", usedBytes);
printf("Free space: %llu\n", totalBytes - usedBytes);
}
}
bool File_Search(const char* directory, const char* fileName)
{
File Path = SD.open(directory);
if (!Path) {
printf("Path: <%s> does not exist\r\n",directory);
return false;
}
File file = Path.openNextFile();
while (file) {
if (strcmp(file.name(), fileName) == 0) {
if (strcmp(directory, "/") == 0)
printf("File '%s%s' found in root directory.\r\n",directory,fileName);
else
printf("File '%s/%s' found in root directory.\r\n",directory,fileName);
Path.close();
return true;
}
file = Path.openNextFile();
}
if (strcmp(directory, "/") == 0)
printf("File '%s%s' not found in root directory.\r\n",directory,fileName);
else
printf("File '%s/%s' not found in root directory.\r\n",directory,fileName);
Path.close();
return false;
}
uint16_t Folder_retrieval(const char* directory, const char* fileExtension, char File_Name[][100],uint16_t maxFiles)
{
File Path = SD.open(directory);
if (!Path) {
printf("Path: <%s> does not exist\r\n",directory);
return false;
}
uint16_t fileCount = 0;
char filePath[100];
File file = Path.openNextFile();
while (file && fileCount < maxFiles) {
if (!file.isDirectory() && strstr(file.name(), fileExtension)) {
strncpy(File_Name[fileCount], file.name(), sizeof(File_Name[fileCount]));
if (strcmp(directory, "/") == 0) {
snprintf(filePath, 100, "%s%s", directory, file.name());
} else {
snprintf(filePath, 100, "%s/%s", directory, file.name());
}
printf("File found: %s\r\n", filePath);
fileCount++;
}
file = Path.openNextFile();
}
Path.close();
if (fileCount > 0) {
printf(" %d <%s> files were retrieved\r\n",fileCount,fileExtension);
return fileCount;
} else {
printf("No files with extension '%s' found in directory: %s\r\n", fileExtension, directory);
return 0;
}
}
void remove_file_extension(char *file_name) {
char *last_dot = strrchr(file_name, '.');
if (last_dot != NULL) {
*last_dot = '\0';
}
}
void Flash_test()
{
printf("/********** RAM Test**********/\r\n");
// Get Flash size
uint32_t flashSize = ESP.getFlashChipSize();
Flash_Size = flashSize/1024/1024;
printf("Flash size: %d MB \r\n", flashSize/1024/1024);
printf("/******* RAM Test Over********/\r\n\r\n");
}
-19
View File
@@ -1,19 +0,0 @@
#pragma once
#include "Arduino.h"
#include <cstring>
#include "Display_ST7789.h"
#include "SD.h"
#include "FS.h"
// Digital I/O used
#define SD_CS 4 // SD_D3:
extern uint16_t SDCard_Size;
extern uint16_t Flash_Size;
void SD_Init();
void Flash_test();
bool File_Search(const char* directory, const char* fileName);
uint16_t Folder_retrieval(const char* directory, const char* fileExtension, char File_Name[][100],uint16_t maxFiles);
void remove_file_extension(char *file_name);
+30
View File
@@ -0,0 +1,30 @@
amends "package://github.com/jdx/hk/releases/download/v1.36.0/hk@1.36.0#/Config.pkl"
import "package://github.com/jdx/hk/releases/download/v1.36.0/hk@1.36.0#/Builtins.pkl"
// Only process files in sketches/ (excluding vendor/)
exclude = List("**", "!sketches/**", "sketches/**/vendor/**")
local linters = new Mapping<String, Step> {
["format"] = Builtins.clang_format
["trailing-whitespace"] = Builtins.trailing_whitespace
["mixed-line-ending"] = Builtins.mixed_line_ending
["check-merge-conflict"] = Builtins.check_merge_conflict
}
hooks {
["pre-commit"] {
fix = true
stash = "git"
steps = linters
}
["fix"] {
fix = true
steps = linters
}
["check"] {
steps = linters
}
}
+2
View File
@@ -0,0 +1,2 @@
ESP32_*
-5
View File
@@ -1,11 +1,6 @@
ArduinoJson: change log
=======================
v7.4.2 (2025-06-20)
------
* Fix truncated strings on Arduino Due (issue #2181)
v7.4.1 (2025-04-11)
------
+1 -1
View File
@@ -10,7 +10,7 @@ if(ESP_PLATFORM)
return()
endif()
project(ArduinoJson VERSION 7.4.2)
project(ArduinoJson VERSION 7.4.1)
if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
include(CTest)
+6 -1
View File
@@ -80,7 +80,7 @@ ArduinoJson is a C++ JSON library for Arduino and IoT (Internet Of Things).
* Continuously tested on
* [Visual Studio 2017, 2019, 2022](https://ci.appveyor.com/project/bblanchon/arduinojson/branch/7.x)
* [GCC 4.8, 5, 6, 7, 8, 9, 10, 11, 12](https://github.com/bblanchon/ArduinoJson/actions?query=workflow%3A%22Continuous+Integration%22)
* [Clang 7 to 19](https://github.com/bblanchon/ArduinoJson/actions?query=workflow%3A%22Continuous+Integration%22)
* [Clang 3.9, 4.0, 5.0, 6.0, 7, 8, 9, 10, 11, 12, 13, 14, 15](https://github.com/bblanchon/ArduinoJson/actions?query=workflow%3A%22Continuous+Integration%22)
* [Continuously fuzzed with Google OSS Fuzz](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:arduinojson)
* Passes all default checks of [clang-tidy](https://releases.llvm.org/10.0.0/tools/clang/tools/extra/docs/clang-tidy/)
* Well documented
@@ -139,6 +139,11 @@ See the [tutorial on arduinojson.org](https://arduinojson.org/v7/doc/serializati
ArduinoJson is thankful to its sponsors. Please give them a visit; they deserve it!
<p>
<a href="https://www.programmingelectronics.com/" rel="sponsored">
<img src="https://arduinojson.org/images/2021/10/programmingeleactronicsacademy.png" alt="Programming Electronics Academy" width="200">
</a>
</p>
<p>
<a href="https://github.com/1technophile" rel="sponsored">
<img alt="1technophile" src="https://avatars.githubusercontent.com/u/12672732?s=40&v=4">
+1 -1
View File
@@ -1,4 +1,4 @@
version: 7.4.2.{build}
version: 7.4.1.{build}
environment:
matrix:
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2022
@@ -69,8 +69,6 @@ TEST_CASE("JsonDocument assignment") {
doc2 = std::move(doc1);
REQUIRE(doc2.as<std::string>() == "{\"hello\":\"world\"}");
// NOLINTNEXTLINE(clang-analyzer-cplusplus.Move)
REQUIRE(doc1.as<std::string>() == "null");
}
REQUIRE(spyingAllocator.log() == AllocatorLog{
@@ -44,8 +44,6 @@ TEST_CASE("JsonDocument constructor") {
JsonDocument doc2(std::move(doc1));
REQUIRE(doc2.as<std::string>() == "The size of this string is 32!!");
// NOLINTNEXTLINE(clang-analyzer-cplusplus.Move)
REQUIRE(doc1.as<std::string>() == "null");
}
REQUIRE(spyingAllocator.log() == AllocatorLog{
@@ -29,23 +29,3 @@ set_tests_properties(Misc
PROPERTIES
LABELS "Catch"
)
add_executable(Issue2181
issue2181.cpp # Cannot be linked with other tests
)
set_target_properties(Issue2181 PROPERTIES UNITY_BUILD OFF)
add_test(Issue2181 Issue2181)
set_tests_properties(Issue2181
PROPERTIES
LABELS "Catch"
)
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
target_compile_options(Issue2181
PRIVATE
-Wno-keyword-macro # keyword is hidden by macro definition
)
endif()
@@ -1,15 +0,0 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2025, Benoit BLANCHON
// MIT License
#define true 0x1
#define false 0x0
#include <ArduinoJson.h>
#include <catch.hpp>
TEST_CASE("Issue #2181") {
JsonDocument doc;
doc["hello"] = "world";
REQUIRE(doc.as<std::string>() == "{\"hello\":\"world\"}");
}
@@ -116,12 +116,12 @@ TEST_CASE("StringBuilder") {
}
}
static VariantData saveString(StringBuilder& builder, const char* s) {
static JsonString saveString(StringBuilder& builder, const char* s) {
VariantData data;
builder.startString();
builder.append(s);
builder.save(&data);
return data;
return data.asString();
}
TEST_CASE("StringBuilder::save() deduplicates strings") {
@@ -134,9 +134,9 @@ TEST_CASE("StringBuilder::save() deduplicates strings") {
auto s2 = saveString(builder, "world");
auto s3 = saveString(builder, "hello");
REQUIRE(s1.asString() == "hello");
REQUIRE(s2.asString() == "world");
REQUIRE(+s1.asString().c_str() == +s3.asString().c_str()); // same address
REQUIRE(s1 == "hello");
REQUIRE(s2 == "world");
REQUIRE(+s1.c_str() == +s3.c_str()); // same address
REQUIRE(spy.log() ==
AllocatorLog{
@@ -152,10 +152,9 @@ TEST_CASE("StringBuilder::save() deduplicates strings") {
auto s1 = saveString(builder, "hello world");
auto s2 = saveString(builder, "hello");
REQUIRE(s1.asString() == "hello world");
REQUIRE(s2.asString() == "hello");
REQUIRE(+s2.asString().c_str() !=
+s1.asString().c_str()); // different address
REQUIRE(s1 == "hello world");
REQUIRE(s2 == "hello");
REQUIRE(+s2.c_str() != +s1.c_str()); // different address
REQUIRE(spy.log() ==
AllocatorLog{
@@ -170,10 +169,9 @@ TEST_CASE("StringBuilder::save() deduplicates strings") {
auto s1 = saveString(builder, "hello world");
auto s2 = saveString(builder, "worl");
REQUIRE(s1.asString() == "hello world");
REQUIRE(s2.asString() == "worl");
REQUIRE(s2.asString().c_str() !=
s1.asString().c_str()); // different address
REQUIRE(s1 == "hello world");
REQUIRE(s2 == "worl");
REQUIRE(s2.c_str() != s1.c_str()); // different address
REQUIRE(spy.log() ==
AllocatorLog{
+2 -2
View File
@@ -1,7 +1,7 @@
version: "7.4.2"
version: "7.4.1"
description: >-
A simple and efficient JSON library for embedded C++.
★ 6953 stars on GitHub!
★ 6898 stars on GitHub!
Supports serialization, deserialization, MessagePack, streams, filtering, and more.
Fully tested and documented.
url: https://arduinojson.org/
+2 -2
View File
@@ -1,13 +1,13 @@
{
"name": "ArduinoJson",
"keywords": "json, rest, http, web",
"description": "A simple and efficient JSON library for embedded C++. ⭐ 6953 stars on GitHub! Supports serialization, deserialization, MessagePack, streams, filtering, and more. Fully tested and documented.",
"description": "A simple and efficient JSON library for embedded C++. ⭐ 6898 stars on GitHub! Supports serialization, deserialization, MessagePack, streams, filtering, and more. Fully tested and documented.",
"homepage": "https://arduinojson.org/?utm_source=meta&utm_medium=library.json",
"repository": {
"type": "git",
"url": "https://github.com/bblanchon/ArduinoJson.git"
},
"version": "7.4.2",
"version": "7.4.1",
"authors": {
"name": "Benoit Blanchon",
"url": "https://blog.benoitblanchon.fr"
+2 -2
View File
@@ -1,9 +1,9 @@
name=ArduinoJson
version=7.4.2
version=7.4.1
author=Benoit Blanchon <blog.benoitblanchon.fr>
maintainer=Benoit Blanchon <blog.benoitblanchon.fr>
sentence=A simple and efficient JSON library for embedded C++.
paragraph=⭐ 6953 stars on GitHub! Supports serialization, deserialization, MessagePack, streams, filtering, and more. Fully tested and documented.
paragraph=⭐ 6898 stars on GitHub! Supports serialization, deserialization, MessagePack, streams, filtering, and more. Fully tested and documented.
category=Data Processing
url=https://arduinojson.org/?utm_source=meta&utm_medium=library.properties
architectures=*
@@ -26,15 +26,6 @@
# endif
#endif
// Remove true and false macros defined by some cores, such as Arduino Due's
// See issues #2181 and arduino/ArduinoCore-sam#50
#ifdef true
# undef true
#endif
#ifdef false
# undef false
#endif
#include "ArduinoJson/Array/JsonArray.hpp"
#include "ArduinoJson/Object/JsonObject.hpp"
#include "ArduinoJson/Variant/JsonVariantConst.hpp"
@@ -4,8 +4,8 @@
#pragma once
#define ARDUINOJSON_VERSION "7.4.2"
#define ARDUINOJSON_VERSION "7.4.1"
#define ARDUINOJSON_VERSION_MAJOR 7
#define ARDUINOJSON_VERSION_MINOR 4
#define ARDUINOJSON_VERSION_REVISION 2
#define ARDUINOJSON_VERSION_MACRO V742
#define ARDUINOJSON_VERSION_REVISION 1
#define ARDUINOJSON_VERSION_MACRO V741
+22
View File
@@ -0,0 +1,22 @@
MIT License
NTP library for Arduino framework
Copyright (c) 2022 Stefan Staub
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+288
View File
@@ -0,0 +1,288 @@
/**
* NTP library for Arduino framework
* The MIT License (MIT)
* (c) 2022 sstaub
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#include "NTP.h"
NTP::NTP(UDP& udp) {
this->udp = &udp;
}
NTP::~NTP() {
stop();
}
void NTP::begin(const char* server) {
this->server = server;
init();
}
void NTP::begin(IPAddress serverIP) {
this->serverIP = serverIP;
init();
}
void NTP::init() {
memset(ntpRequest, 0, NTP_PACKET_SIZE);
ntpRequest[0] = 0b11100011; // LI, Version, Mode
ntpRequest[1] = 0; // Stratum, or type of clock
ntpRequest[2] = 6; // Polling Interval
ntpRequest[3] = 0xEC; // Peer Clock Precision
// 8 bytes of zero for Root Delay & Root Dispersion
ntpRequest[12] = 49;
ntpRequest[13] = 0x4E;
ntpRequest[14] = 49;
ntpRequest[15] = 52;
udp->begin(NTP_PORT);
ntpUpdate();
if (dstZone) {
timezoneOffset = dstEnd.tzOffset * SECS_PER_MINUTES;
dstOffset = (dstStart.tzOffset - dstEnd.tzOffset) * SECS_PER_MINUTES;
currentTime();
beginDST();
}
}
void NTP::stop() {
udp->stop();
}
bool NTP::update() {
if ((millis() - lastUpdate >= interval) || lastUpdate == 0) {
return ntpUpdate();
}
return false;
}
bool NTP::ntpUpdate() {
if (server == nullptr) udp->beginPacket(serverIP, NTP_PORT);
else udp->beginPacket(server, NTP_PORT);
udp->write(ntpRequest, NTP_PACKET_SIZE);
udp->endPacket();
uint8_t timeout = 0;
uint8_t size = 0;
do {
delay (10);
size = udp->parsePacket();
if (timeout > 100) return false;
timeout++;
} while (size != 48);
lastUpdate = millis() - (10 * (timeout + 1));
udp->read(ntpQuery, NTP_PACKET_SIZE);
#ifdef __AVR__
unsigned long highWord = word(ntpQuery[40], ntpQuery[41]);
unsigned long lowWord = word(ntpQuery[42], ntpQuery[43]);
timestamp = highWord << 16 | lowWord;
if (timestamp != 0) {
ntpTime = timestamp;
utcTime = ntpTime - NTP_OFFSET;
}
else return false;
#else
timestamp = ntpQuery[40] << 24 | ntpQuery[41] << 16 | ntpQuery[42] << 8 | ntpQuery[43];
if (timestamp != 0) {
ntpTime = timestamp;
utcTime = ntpTime - SEVENTYYEARS;
}
else return false;
#endif
return true;
}
void NTP::updateInterval(uint32_t interval) {
this->interval = interval;
}
void NTP::ruleDST(const char* tzName, int8_t week, int8_t wday, int8_t month, int8_t hour, int tzOffset) {
strcpy(dstStart.tzName, tzName);
dstStart.week = week;
dstStart.wday = wday;
dstStart.month = month;
dstStart.hour = hour;
dstStart.tzOffset = tzOffset;
}
const char* NTP::ruleDST() {
if(dstZone) {
return ctime(&dstTime);
}
else return RULE_DST_MESSAGE;
}
void NTP::ruleSTD(const char* tzName, int8_t week, int8_t wday, int8_t month, int8_t hour, int tzOffset) {
strcpy(dstEnd.tzName, tzName);
dstEnd.week = week;
dstEnd.wday = wday;
dstEnd.month = month;
dstEnd.hour = hour;
dstEnd.tzOffset = tzOffset;
}
const char* NTP::ruleSTD() {
if(dstZone) {
return ctime(&stdTime);
}
else return RULE_STD_MESSAGE;
}
const char* NTP::tzName() {
if (dstZone) {
if (summerTime()) return dstStart.tzName;
else return dstEnd.tzName;
}
return GMT_MESSAGE;
}
void NTP::timeZone(int8_t tzHours, int8_t tzMinutes) {
this->tzHours = tzHours;
this->tzMinutes = tzMinutes;
timezoneOffset = tzHours * 3600;
if (tzHours < 0) {
timezoneOffset -= tzMinutes * 60;
}
else {
timezoneOffset += tzMinutes * 60;
}
}
void NTP::isDST(bool dstZone) {
this->dstZone = dstZone;
}
bool NTP::isDST() {
return summerTime();
}
time_t NTP::epoch() {
currentTime();
return utcCurrent;
}
void NTP::currentTime() {
utcCurrent = utcTime + ((millis() - lastUpdate) / 1000);
if (dstZone) {
if (summerTime()) {
local = utcCurrent + dstOffset + timezoneOffset;
current = gmtime(&local);
}
else {
local = utcCurrent + timezoneOffset;
current = gmtime(&local);
}
if ((current->tm_year + 1900) > yearDST) beginDST();
}
else {
local = utcCurrent + timezoneOffset;
current = gmtime(&local);
}
}
int16_t NTP::year() {
currentTime();
return current->tm_year + 1900;
}
int8_t NTP::month() {
currentTime();
return current->tm_mon + 1;
}
int8_t NTP::day() {
currentTime();
return current->tm_mday;
}
int8_t NTP::weekDay() {
currentTime();
return current->tm_wday;
}
int8_t NTP::hours() {
currentTime();
return current->tm_hour;
}
int8_t NTP::minutes() {
currentTime();
return current->tm_min;
}
int8_t NTP::seconds() {
currentTime();
return current->tm_sec;
}
const char* NTP::formattedTime(const char *format) {
currentTime();
memset(timeString, 0, sizeof(timeString));
strftime(timeString, sizeof(timeString), format, current);
return timeString;
}
void NTP::beginDST() {
dstTime = calcDateDST(dstStart, current->tm_year + 1900);
utcDST = dstTime - (dstEnd.tzOffset * SECS_PER_MINUTES);
stdTime = calcDateDST(dstEnd, current->tm_year + 1900);
utcSTD = stdTime - (dstStart.tzOffset * SECS_PER_MINUTES);
yearDST = current->tm_year + 1900;
}
time_t NTP::calcDateDST(struct ruleDST rule, int year) {
uint8_t month = rule.month;
uint8_t week = rule.week;
if (week == 0) {
if (month++ > 11) {
month = 0;
year++;
}
week = 1;
}
struct tm tm;
tm.tm_hour = rule.hour;
tm.tm_min = 0;
tm.tm_sec = 0;
tm.tm_mday = 1;
tm.tm_mon = month;
tm.tm_year = year - 1900;
time_t t = mktime(&tm);
t += ((rule.wday - tm.tm_wday + 7) % 7 + (week - 1) * 7 ) * SECS_PER_DAY;
if (rule.week == 0) t -= 7 * SECS_PER_DAY;
return t;
}
bool NTP::summerTime() {
if ((utcCurrent > utcDST) && (utcCurrent <= utcSTD)) {
return true;
}
else {
return false;
}
}
uint32_t NTP::ntp() {
return ntpTime;
}
uint32_t NTP::utc() {
return utcTime;
}
+288
View File
@@ -0,0 +1,288 @@
/**
* NTP library for Arduino framewoek
* The MIT License (MIT)
* (c) 2022 sstaub
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#ifndef NTP_H
#define NTP_H
#include "Arduino.h"
#include <time.h>
#include <Udp.h>
#define SEVENTYYEARS 2208988800UL
#define UNIXOFFSET 946684800UL
#ifdef __AVR__
//#define POSIX_OFFSET NTP_OFFSET - SEVENTYYEARS// - UNIX_OFFSET// + 30 years
#define POSIX_OFFSET UNIXOFFSET
#else
#define POSIX_OFFSET -SEVENTYYEARS
#endif
#define NTP_PACKET_SIZE 48
#define NTP_PORT 123
#define SECS_PER_MINUTES 60
#define SECS_PER_DAY 86400
#define GMT_MESSAGE "GMT +/- offset"
#define RULE_DST_MESSAGE "no DST rule"
#define RULE_STD_MESSAGE "no STD rule"
enum week_t {Last, First, Second, Third, Fourth};
enum dow_t {Sun, Mon, Tue, Wed, Thu, Fri, Sat};
enum month_t {Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec};
class NTP {
public:
/**
* @brief constructor for the NTP object
*
* @param udp
*/
NTP(UDP& udp);
/**
* @brief destructor for the NTP object
*
*/
~NTP();
/**
* @brief starts the underlying UDP client with the default local port
*
* @param server NTP server host name
* @param serverIP NTP server IP address
*/
void begin(const char* server = "pool.ntp.org");
void begin(IPAddress serverIP);
/**
* @brief stops the underlying UDP client
*
*/
void stop();
/**
* @brief This should be called in the main loop of your application. By default an update from the NTP Server is only
* made every 60 seconds. This can be configured in the NTPTime constructor.
*
* @return true on success
* @return false on no update or update failure
*/
bool update();
/**
* @brief set the update interval
*
* @param updateInterval in ms, default = 60000ms
*/
void updateInterval(uint32_t interval);
/**
* @brief set the rule for DST (daylight saving time)
* start date of DST
*
* @param tzName name of the time zone
* @param week Last, First, Second, Third, Fourth (0 - 4)
* @param wday Sun, Mon, Tue, Wed, Thu, Fri, Sat (0 - 7)
* @param month Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec (0 -11)
* @param hour the local hour when rule chages
* @param tzOffset sum of summertime and timezone offset
*/
void ruleDST(const char* tzName, int8_t week, int8_t wday, int8_t month, int8_t hour, int tzOffset);
/**
* @brief get the DST time as a ctime string
*
* @return char* time string
*/
const char* ruleDST();
/**
* @brief set the rule for STD (standard day)
* end date of DST
*
* @param tzName name of the time zone
* @param week Last, First, Second, Third, Fourth (0 - 4)
* @param wday Sun, Mon, Tue, Wed, Thu, Fri, Sat (0 - 7)
* @param month Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec (0 -11)
* @param hour the local hour when rule chages
* @param tzOffset timezone offset
*/
void ruleSTD(const char* tzName, int8_t week, int8_t wday, int8_t month, int8_t hour, int tzOffset);
/**
* @brief get the STD time as a ctime string
*
* @return char* time string
*/
const char* ruleSTD();
/**
* @brief get the name of the timezone
*
* @return char* name of the timezone
*/
const char* tzName();
/**
* @brief set the timezone manually
* this should used if there is no DST!
*
* @param tzHours
* @param tzMinutes
*/
void timeZone(int8_t tzHours, int8_t tzMinutes = 0);
/**
* @brief set daylight saving manually!
* use in conjunction with timeZone, when there is no DST!
*
* @param dstZone
*/
void isDST(bool dstZone);
/**
* @brief returns the DST state
*
* @return int 1 if summertime, 0 no summertime
*/
bool isDST();
/**
* @brief get the Unix epoch timestamp
*
* @return time_t timestamp
*/
time_t epoch();
/**
* @brief get the year
*
* @return int year
*/
int16_t year();
/**
* @brief get the month
*
* @return int month, 1 = january
*/
int8_t month();
/**
* @brief get the day of a month
*
* @return int day
*/
int8_t day();
/**
* @brief get the day of a week
*
* @return int day of the week, 0 = sunday
*/
int8_t weekDay();
/**
* @brief get the hour of the day
*
* @return int
*/
int8_t hours();
/**
* @brief get the minutes of the hour
*
* @return int minutes
*/
int8_t minutes();
/**
* @brief get the seconds of a minute
*
* @return int seconds
*/
int8_t seconds();
/**
* @brief returns a formatted string
*
* @param format for strftime
* @return char* formated time string
*/
const char* formattedTime(const char *format);
/**
* @brief returns NTP timestamp
*
* @return uint32_t
*/
uint32_t ntp();
/**
* @brief returns UNIX timestamp
*
* @return uint32_t
*/
uint32_t utc();
private:
UDP *udp;
const char* server = nullptr;
IPAddress serverIP;
uint8_t ntpRequest[NTP_PACKET_SIZE]; // = {0xE3, 0x00, 0x06, 0xEC};
uint8_t ntpQuery[NTP_PACKET_SIZE];
time_t utcCurrent = 0;
time_t local = 0;
struct tm *current;
uint32_t interval = 60000;
uint32_t lastUpdate = 0;
uint8_t tzHours = 0;
uint8_t tzMinutes = 0;
int32_t timezoneOffset;
int16_t dstOffset = 0;
bool dstZone = true;
uint32_t timestamp;
uint32_t ntpTime = 0;
uint32_t utcTime = 0;
time_t utcSTD, utcDST;
time_t dstTime, stdTime;
uint16_t yearDST;
char timeString[64];
struct ruleDST {
char tzName[6]; // five chars max
int8_t week; // First, Second, Third, Fourth, or Last week of the month
int8_t wday; // day of week, 0 = Sun, 2 = Mon, ... 6 = Sat
int8_t month; // 0 = Jan, 1 = Feb, ... 11=Dec
int8_t hour; // 0 - 23
int tzOffset; // offset from UTC in minutes
} dstStart, dstEnd;
void init();
bool ntpUpdate();
time_t localTime();
void currentTime();
void beginDST();
time_t calcDateDST(struct ruleDST rule, int year);
bool summerTime();
};
#endif
+330
View File
@@ -0,0 +1,330 @@
# **NTP**
The **NTP** library allows you to receive time information from the Internet. It also have support for
different timezones and daylight saving time (DST).
This NTP library uses the functions of the time.h standard library.<br>
## Changes for 1.7
- support for AVR
- optimizations
## Changes for 1.6
- change of begin(), now you can start with hostname or IP address
- no blocking
- better documentation
## Example
Example for WIFI boards like ESP32 or MKR1000, NANO RP2040 Connect and other, prints formatted time and date strings to console.
```cpp
// change next line to use with another board/shield
//#include <ESP8266WiFi.h>
//#include <WiFi.h> // for WiFi shield or ESP32
//#include <WiFi101.h> // for WiFi 101 shield or MKR1000
#include <WiFiNINA.h> // for UNO Wifi Rev 2 or Nano RP2040 connect
//#include "WiFiUdp.h" // not needed for WiFiNINA
#include "NTP.h"
const char *ssid = "yourSSID"; // your network SSID
const char *password = "yourPASSWORD"; // your network PW
WiFiUDP wifiUdp;
NTP ntp(wifiUdp);
void setup() {
Serial.begin(9600);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
Serial.println("Connecting ...");
delay(500);
}
Serial.println("Connected");
ntp.ruleDST("CEST", Last, Sun, Mar, 2, 120); // last sunday in march 2:00, timetone +120min (+1 GMT + 1h summertime offset)
ntp.ruleSTD("CET", Last, Sun, Oct, 3, 60); // last sunday in october 3:00, timezone +60min (+1 GMT)
ntp.begin();
Serial.println("start NTP");
}
void loop() {
ntp.update();
Serial.println(ntp.formattedTime("%d. %B %Y")); // dd. Mmm yyyy
Serial.println(ntp.formattedTime("%A %T")); // Www hh:mm:ss
delay(1000);
}
```
# Documentation
## Class Definitions
```cpp
NTP(UDP& udp);
```
Constructor for a NTP object
Example, this should done before ```setup()```
```cpp
WiFiUDP wifiUdp;
NTP ntp(wifiUdp);
```
```cpp
~NTP();
```
Destructor for a NTP object
## begin()
```cpp
void begin(const char* server = "pool.ntp.org");
void begin(IPAddress serverIP);
```
Start the underlaying UDP client with a hostname or IP address.
Example, this must done in ```setup()```
```cpp
ntp.begin(); // start the NTP client with the standard host
```
## stop()
```cpp
void stop();
```
Stop the underlaying UDP client
Example, this must done in ```setup()```
```cpp
ntp.stop();
```
## update()
```cpp
void update();
```
This must called in the main ```loop()```
Example
```cpp
loop() {
ntp.update();
}
```
## updateInterval()
```cpp
void updateInterval(uint32_t interval);
```
Set the update interval for connecting the NTP server in ms, default is 60000ms (60s)
Example, this must done in ```setup()```
```cpp
ntp.updateInterval(1000); // update every second
```
## ruleDST()
```cpp
void ruleDST(const char* tzName, int8_t week, int8_t wday, int8_t month, int8_t hour, int tzOffset);
```
Set the rules for the daylight save time settings
- tzname is the name of the timezone, e.g. "CEST" (central europe summer time)
- week Last, First, Second, Third, Fourth (0 - 4)
- wday Sun, Mon, Tue, Wed, Thu, Fri, Sat (0 - 7)
- month Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec (0 -11)
- hour the local hour when rule changes
- tzOffset timezone offset in minutes
Example, this must done in ```setup()```
```cpp
ntp.ruleDST("CEST", Last, Sun, Mar, 2, 120); // last sunday in march 2:00, timetone +120min (+1 GMT + 1h summertime offset)
```
## Return ruleDST()
```cpp
const char* ruleDST();
```
Returns the DST time back, formatted as an ```ctime``` string
## ruleSTD()
```cpp
void ruleSTD(const char* tzName, int8_t week, int8_t wday, int8_t month, int8_t hour, int tzOffset);
```
Set the rules for the standard time settings
- tzname is the name of the timezone, e.g. "CET" (central europe time)
- week Last, First, Second, Third, Fourth (0 - 4)
- wday Sun, Mon, Tue, Wed, Thu, Fri, Sat (0 - 7)
- month Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec (0 -11)
- hour the local hour when rule changes
- tzOffset timezone offset in minutes
Example, this must done in ```setup()```
```cpp
ntp.ruleDST("CEST", Last, Sun, Mar, 2, 120); // last sunday in march 2:00, time
```
## Return ruleSTD()
```cpp
const char* ruleSTD();
```
Return the STD time back, formatted as an ctime string
## Return tzName()
```cpp
const char* tzName();
```
Return you the name of the current timezone, based on your rule settings
## timeZone()
```cpp
void timeZone(int8_t tzHours, int8_t tzMinutes = 0);
```
Only use this function when you don't made the rules setting,
you have to the set isDST(false)
## isDST()
```cpp
void isDST(bool dstZone);
```
Use in conjunction with timeZone, when there is no DST!
## Return isDST()
```cpp
bool isDST();
```
Return the DST status back, true if summertime
## epoch()
```cpp
time_t epoch();
```
Return the Unix epoch timestamp
## year(), month(), day(), weekDay(), hours(), minutes(), seconds()
```cpp
int16_t year();
int8_t month();
int8_t day();
int8_t weekDay();
int8_t hours();
int8_t minutes();
int8_t seconds();
```
Return the datas from the tm structure of the "time.h" library
## Return formattedTime()
```cpp
const char* formattedTime(const char *format);
```
Return a string, formated with strftime function of standard time library
Example
```cpp
loop() {
ntp.update();
Serial.println(ntp.formattedTime("%d. %B %Y")); // dd. Mmm yyyy
Serial.println(ntp.formattedTime("%A %T")); // Www hh:mm:ss
delay(1000);
}
```
Format symbols:
```
| symbol | explanation
/* General */
| % | writes literal %. The full conversion specification must be %%.
| n | writes newline character
| t | writes horizontal tab character
/* Year */
| Y | writes year as a decimal number, e.g. 2017
| y | writes last 2 digits of year as a decimal number (range [00,99])
| C | writes first 2 digits of year as a decimal number (range [00,99])
| G | writes ISO 8601 week-based year, i.e. the year that contains the specified week.
In IS0 8601 weeks begin with Monday and the first week of the year must satisfy the following requirements:
- Includes January 4
- Includes first Thursday of the year
| g | writes last 2 digits of ISO 8601 week-based year, i.e. the year that contains the specified week (range [00,99]).
In IS0 8601 weeks begin with Monday and the first week of the year must satisfy the following requirements:
- Includes January 4
- Includes first Thursday of the year
/* Month */
| b | writes abbreviated month name, e.g. Oct (locale dependent)
| h | synonym of b
| B | writes full month name, e.g. October (locale dependent)
| m | writes month as a decimal number (range [01,12])
/* Week */
| U | writes week of the year as a decimal number (Sunday is the first day of the week) (range [00,53])
| W | writes week of the year as a decimal number (Monday is the first day of the week) (range [00,53])
| V | writes ISO 8601 week of the year (range [01,53]).
In IS0 8601 weeks begin with Monday and the first week of the year must satisfy the following requirements:
- Includes January 4
- Includes first Thursday of the year
/* Day of the year/month */
| j | writes day of the year as a decimal number (range [001,366])
| d | writes day of the month as a decimal number (range [01,31])
| e | writes day of the month as a decimal number (range [1,31]).
Single digit is preceded by a space.
/* Day of the week */
| a | writes abbreviated weekday name, e.g. Fri (locale dependent)
| A | writes full weekday name, e.g. Friday (locale dependent)
| w | writes weekday as a decimal number, where Sunday is 0 (range [0-6])
| u | writes weekday as a decimal number, where Monday is 1 (ISO 8601 format) (range [1-7])
/* Hour, minute, second */
| H | writes hour as a decimal number, 24 hour clock (range [00-23])
| I | writes hour as a decimal number, 12 hour clock (range [01,12])
| M | writes minute as a decimal number (range [00,59])
| S | writes second as a decimal number (range [00,60])
/* Other */
| c | writes standard date and time string, e.g. Sun Oct 17 04:41:13 2010 (locale dependent)
| x | writes localized date representation (locale dependent)
| X | writes localized time representation (locale dependent)
| D | equivalent to "%m/%d/%y"
| F | equivalent to "%Y-%m-%d" (the ISO 8601 date format)
| r | writes localized 12-hour clock time (locale dependent)
| R | equivalent to "%H:%M"
| T | equivalent to "%H:%M:%S" (the ISO 8601 time format)
| p | writes localized a.m. or p.m. (locale dependent)
```
## Return utc()
```cpp
uint32_t utc();
```
Return the timestamp received from the ntp server in Unix timestamp format
## Return ntp()
```cpp
uint32_t ntp();
```
Return the timestamp received from the ntp server in the NTP timestamp format
@@ -0,0 +1,58 @@
// example ESP32 board with oled, use oled lib https://github.com/squix78/esp8266-oled-ssd1306
#include <Arduino.h>
#include "WiFi.h"
#include <WiFiUdp.h>
#include "SSD1306.h"
#include "NTP.h"
char ssid[] = "yourSSID";
char password[] = "yourPASSWORD";
SSD1306 display(0x3c, 5, 4);
WiFiUDP wifiUdp;
NTP ntp(wifiUdp);
void display_text(String text){
display.clear();
display.setColor(WHITE);
display.setTextAlignment(TEXT_ALIGN_CENTER);
display.drawString(64, 15, text);
display.display();
}
void setup() {
Serial.begin(9600);
display.init();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
display_text("Connecting ...");
delay (500);
}
display.clear();
display_text("Connected");
delay (500);
ntp.ruleDST("CEST", Last, Sun, Mar, 2, 120); // last sunday in march 2:00, timetone +120min (+1 GMT + 1h summertime offset)
ntp.ruleSTD("CET", Last, Sun, Oct, 3, 60); // last sunday in october 3:00, timezone +60min (+1 GMT)
// ntp.isDST(false);
// ntp.timeZone(1);
// ntp.offset(0, 0, 0, 0);
ntp.begin();
display_text("start NTP");
delay (500);
}
void loop() {
ntp.update();
display.clear();
display.fillRect(1, 0, 126 * ntp.seconds() / 59, 2);
display.setTextAlignment(TEXT_ALIGN_CENTER);
display.drawString(64, 5, ntp.formattedTime("%d. %B %Y"));
display.drawString(64, 15, ntp.formattedTime("%A %T"));
display.drawString(64, 25, ntp.ruleDST());
display.drawString(64, 35, ntp.ruleSTD());
display.drawString(64, 45, ntp.tzName());
display.display();
delay(500);
}
@@ -0,0 +1,37 @@
// example for WIFI based boards like ESP8266, ESP32, Nano RP2040 Connect, WiFi 101 shield or MKR1000
#include "Arduino.h"
// change next line to use with another board/shield
//#include <ESP8266WiFi.h>
//#include <WiFi.h> // for WiFi shield or ESP32
//#include <WiFi101.h> // for WiFi 101 shield or MKR1000
#include <WiFiNINA.h> // for e.g. Nano RP2040 Connect
//#include "WiFiUdp.h" // not needed for WiFiNINA
#include "NTP.h"
char ssid[] = "yourSSID";
char password[] = "yourPASSWORD";
WiFiUDP wifiUdp;
NTP ntp(wifiUdp);
void setup() {
Serial.begin(9600);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
Serial.println("Connecting ...");
delay(500);
}
Serial.println("Connected");
ntp.ruleDST("CEST", Last, Sun, Mar, 2, 120); // last sunday in march 2:00, timetone +120min (+1 GMT + 1h summertime offset)
ntp.ruleSTD("CET", Last, Sun, Oct, 3, 60); // last sunday in october 3:00, timezone +60min (+1 GMT)
ntp.begin();
Serial.println("start NTP");
}
void loop() {
ntp.update();
Serial.println(ntp.formattedTime("%d. %B %Y")); // dd. Mmm yyyy
Serial.println(ntp.formattedTime("%A %T")); // Www hh:mm:ss
delay(1000);
}
+30
View File
@@ -0,0 +1,30 @@
#######################################
# Datatypes (KEYWORD1)
#######################################
NTP KEYWORD1
#######################################
# Methods and Functions (KEYWORD2)
#######################################
begin KEYWORD2
stop KEYWORD2
update KEYWORD2
updateInterval KEYWORD2
timeZone KEYWORD2
ruleDST KEYWORD2
ruleSTD KEYWORD2
tzName KEYWORD2
isDST KEYWORD2
epoch KEYWORD2
year KEYWORD2
month KEYWORD2
day KEYWORD2
weekDay KEYWORD2
hours KEYWORD2
minutes KEYWORD2
seconds KEYWORD2
formattedTime KEYWORD2
utc KEYWORD2
ntp KEYWORD2
+13
View File
@@ -0,0 +1,13 @@
{
"name": "NTP",
"keywords": "ntp, client, time, timezone",
"description": "A NTP client with timezone support",
"repository":
{
"type": "git",
"url": "https://github.com/sstaub/NTP.git"
},
"version": "1.7",
"frameworks": "arduino",
"platforms": "*"
}
+10
View File
@@ -0,0 +1,10 @@
name=NTP
version=1.7
author=Stefan Staub
maintainer=Stefan Staub <email@domain.com>
sentence=NTP library
paragraph=NTP library for Arduino framework, using standard time.h library.
category=Timing
url=https://github.com/sstaub/NTP
architectures=*
includes=NTP.h
@@ -1,290 +0,0 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 77;
objects = {
/* Begin PBXCopyFilesBuildPhase section */
19B604CF2D6F15DA00B971F2 /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = /usr/share/man/man1/;
dstSubfolderSpec = 0;
files = (
);
runOnlyForDeploymentPostprocessing = 1;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
19B604D12D6F15DA00B971F2 /* PNG_Test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = PNG_Test; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedRootGroup section */
19B604D32D6F15DA00B971F2 /* PNG_Test */ = {
isa = PBXFileSystemSynchronizedRootGroup;
path = PNG_Test;
sourceTree = "<group>";
};
/* End PBXFileSystemSynchronizedRootGroup section */
/* Begin PBXFrameworksBuildPhase section */
19B604CE2D6F15DA00B971F2 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
19B604C82D6F15DA00B971F2 = {
isa = PBXGroup;
children = (
19B604D32D6F15DA00B971F2 /* PNG_Test */,
19B604D22D6F15DA00B971F2 /* Products */,
);
sourceTree = "<group>";
};
19B604D22D6F15DA00B971F2 /* Products */ = {
isa = PBXGroup;
children = (
19B604D12D6F15DA00B971F2 /* PNG_Test */,
);
name = Products;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
19B604D02D6F15DA00B971F2 /* PNG_Test */ = {
isa = PBXNativeTarget;
buildConfigurationList = 19B604D82D6F15DA00B971F2 /* Build configuration list for PBXNativeTarget "PNG_Test" */;
buildPhases = (
19B604CD2D6F15DA00B971F2 /* Sources */,
19B604CE2D6F15DA00B971F2 /* Frameworks */,
19B604CF2D6F15DA00B971F2 /* CopyFiles */,
);
buildRules = (
);
dependencies = (
);
fileSystemSynchronizedGroups = (
19B604D32D6F15DA00B971F2 /* PNG_Test */,
);
name = PNG_Test;
packageProductDependencies = (
);
productName = PNG_Test;
productReference = 19B604D12D6F15DA00B971F2 /* PNG_Test */;
productType = "com.apple.product-type.tool";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
19B604C92D6F15DA00B971F2 /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = 1;
LastUpgradeCheck = 1620;
TargetAttributes = {
19B604D02D6F15DA00B971F2 = {
CreatedOnToolsVersion = 16.2;
};
};
};
buildConfigurationList = 19B604CC2D6F15DA00B971F2 /* Build configuration list for PBXProject "PNG_Test" */;
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 19B604C82D6F15DA00B971F2;
minimizedProjectReferenceProxies = 1;
preferredProjectObjectVersion = 77;
productRefGroup = 19B604D22D6F15DA00B971F2 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
19B604D02D6F15DA00B971F2 /* PNG_Test */,
);
};
/* End PBXProject section */
/* Begin PBXSourcesBuildPhase section */
19B604CD2D6F15DA00B971F2 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
19B604D62D6F15DA00B971F2 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MACOSX_DEPLOYMENT_TARGET = 15.2;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
};
name = Debug;
};
19B604D72D6F15DA00B971F2 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MACOSX_DEPLOYMENT_TARGET = 15.2;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = macosx;
};
name = Release;
};
19B604D92D6F15DA00B971F2 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "compiler-default";
CODE_SIGN_STYLE = Automatic;
GCC_C_LANGUAGE_STANDARD = gnu89;
"OTHER_CFLAGS[arch=*]" = "";
"OTHER_CPLUSPLUSFLAGS[arch=*]" = "";
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Debug;
};
19B604DA2D6F15DA00B971F2 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "compiler-default";
CODE_SIGN_STYLE = Automatic;
GCC_C_LANGUAGE_STANDARD = gnu89;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
19B604CC2D6F15DA00B971F2 /* Build configuration list for PBXProject "PNG_Test" */ = {
isa = XCConfigurationList;
buildConfigurations = (
19B604D62D6F15DA00B971F2 /* Debug */,
19B604D72D6F15DA00B971F2 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
19B604D82D6F15DA00B971F2 /* Build configuration list for PBXNativeTarget "PNG_Test" */ = {
isa = XCConfigurationList;
buildConfigurations = (
19B604D92D6F15DA00B971F2 /* Debug */,
19B604DA2D6F15DA00B971F2 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 19B604C92D6F15DA00B971F2 /* Project object */;
}
@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:">
</FileRef>
</Workspace>
@@ -1,14 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>SchemeUserState</key>
<dict>
<key>PNG_Test.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
</dict>
</dict>
</plist>
@@ -1,13 +0,0 @@
CFLAGS=-Wall -O2 -g -fsanitize=address,undefined
LIBS =
all: png_test
png_test: main.o
$(CC) main.o -fsanitize=address,undefined -g $(LIBS) -o png_test
main.o: main.cpp
$(CXX) $(CFLAGS) -c main.cpp
clean:
rm -rf *.o png_test
@@ -1,365 +0,0 @@
//
// main.cpp
// PNG_Test
//
// Created by Laurence Bank on 2/26/25.
//
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <stdlib.h>
#include <time.h>
#define __LINUX__
#define ZLIB_DEBUG
#define verbose 0
#define INFLATE_STRICT
#include "../../../src/zutil.c"
#include "../../../src/inflate.c"
#include "../../../src/inffast.c"
#include "../../../src/inftrees.c"
#include "../../../src/crc32.c"
#undef DO1
#undef DO8
#include "../../../src/adler32.c"
#include "../../../src/PNGdec.cpp"
#include "../../../test_images/octocat_8bpp.h"
#include "../../../test_images/octocat.h"
#include "../../../test_images/bugpng.h"
PNG png;
int xoff, yoff, iBpp;
int iWidth, iLines;
uint32_t palentry24;
uint16_t palentry16;
uint32_t u32BG;
uint16_t u16Out;
uint8_t ucPixelType;
//
// Return the current time in microseconds
//
int Micros(void)
{
int iTime;
struct timespec res;
clock_gettime(CLOCK_MONOTONIC, &res);
iTime = (int)(1000000*res.tv_sec + res.tv_nsec/1000);
return iTime;
} /* Micros() */
//
// Create a private structure to pass info to the draw callback
// For this example we want to pass a random x/y starting point
//
typedef struct my_private_struct
{
int xoff, yoff; // corner offset
} PRIVATE;
// Second draw callback for testing conversion to RGB565
int PNGDraw2(PNGDRAW *pDraw)
{
uint16_t usPixels[320];
png.getLineAsRGB565(pDraw, usPixels, ucPixelType, u32BG);
if (pDraw->y == 0) { // get first pixel of first line for testing
u16Out = usPixels[0];
}
return 1;
} /* PNGDraw2() */
int PNGDraw(PNGDRAW *pDraw)
{
PRIVATE *pPriv = (PRIVATE *)pDraw->pUser;
if (pPriv) {
xoff = pPriv->xoff;
yoff = pPriv->yoff;
}
palentry24 = *(uint32_t *)&pDraw->pPalette[2*3];
palentry24 &= 0xffffff;
if (pDraw->pFastPalette) { // this pointer is only valid when the PNG_FAST_PALETTE option is used
palentry16 = pDraw->pFastPalette[2];
}
iBpp = pDraw->iBpp;
iWidth = pDraw->iWidth;
iLines++;
return 1;
} /* PNGDraw() */
int PNGDraw3(PNGDRAW *pDraw)
{
return 0; // abort the decode immediately
}
//
// Simple logging print
//
void PNGLOG(int line, char *string, const char *result)
{
printf("Line: %d: msg: %s%s\n", line, string, result);
} /* PNGLOG() */
int main(int argc, const char * argv[]) {
int i, rc, w, h, iTotal, iTime1, iTime2;
uint8_t *pFuzzData;
char *szTestName;
int iTotalPass, iTotalFail;
uint8_t *pFrameBuffer, c1, c2;
uint32_t pal1;
uint16_t pal2;
PRIVATE priv;
const char *szStart = " - START";
iTotalPass = iTotalFail = iTotal = 0;
// Test 0 - Correct file read continuation
iTotal++;
szTestName = (char *)"Test Continuation";
PNGLOG(__LINE__, szTestName, szStart);
rc = png.openFLASH((uint8_t *)bugpng, sizeof(bugpng), PNGDraw);
if (rc == PNG_SUCCESS) {
w = png.getWidth();
h = png.getHeight();
priv.xoff = w/2; // arbitrary values to see if they get passed properly
priv.yoff = h/2;
xoff = yoff = 0;
rc = png.decode(&priv, 0);
if (rc == PNG_SUCCESS) {
if (xoff == priv.xoff && yoff == priv.yoff) {
iTotalPass++;
PNGLOG(__LINE__, szTestName, " - PASSED");
} else {
iTotalFail++;
PNGLOG(__LINE__, szTestName, " - FAILED");
}
} else {
PNGLOG(__LINE__, szTestName, "Error decoding");
iTotalFail++;
PNGLOG(__LINE__, szTestName, " - FAILED");
}
} else {
PNGLOG(__LINE__, szTestName, "Error opening PNG file.");
iTotalFail++;
PNGLOG(__LINE__, szTestName, " - FAILED");
}
// Test 1 - Test User pointer";
iTotal++;
szTestName = (char *)"Test User pointer";
PNGLOG(__LINE__, szTestName, szStart);
rc = png.openFLASH((uint8_t *)octocat_8bpp, sizeof(octocat_8bpp), PNGDraw);
if (rc == PNG_SUCCESS) {
w = png.getWidth();
h = png.getHeight();
priv.xoff = w/2; // arbitrary values to see if they get passed properly
priv.yoff = h/2;
xoff = yoff = 0;
rc = png.decode(&priv, 0);
if (xoff == priv.xoff && yoff == priv.yoff) {
iTotalPass++;
PNGLOG(__LINE__, szTestName, " - PASSED");
} else {
iTotalFail++;
PNGLOG(__LINE__, szTestName, " - FAILED");
}
} else {
PNGLOG(__LINE__, szTestName, "Error opening PNG file.");
}
// Test 2 - Verify bad parameters return an error
szTestName = (char *)"PNG bad parameter test 1";
iTotal++;
PNGLOG(__LINE__, szTestName, szStart);
png.openFLASH((uint8_t *)octocat_8bpp, sizeof(octocat_8bpp), NULL);
// no PNGDraw callback and no framebuffer = invalid
png.decode(NULL, 0);
if (png.getLastError() == PNG_NO_BUFFER) {
iTotalPass++;
PNGLOG(__LINE__, szTestName, " - PASSED");
} else {
iTotalFail++;
PNGLOG(__LINE__, szTestName, " - FAILED");
}
// Test 3 - Verify pixel format
szTestName = (char *)"PNG verify pixel format";
iTotal++;
PNGLOG(__LINE__, szTestName, szStart);
png.openFLASH((uint8_t *)octocat_8bpp, sizeof(octocat_8bpp), PNGDraw);
iBpp = 0;
png.decode(NULL, 0);
if (iBpp == 8) { // should be 8 bits per pixel
iTotalPass++;
PNGLOG(__LINE__, szTestName, " - PASSED");
} else {
iTotalFail++;
PNGLOG(__LINE__, szTestName, " - FAILED");
}
// Test 4 - Verify correct dimensions
szTestName = (char *)"PNG verify correct dimensions";
iTotal++;
PNGLOG(__LINE__, szTestName, szStart);
png.openFLASH((uint8_t *)octocat_8bpp, sizeof(octocat_8bpp), PNGDraw);
iWidth = iLines = 0;
png.decode(NULL, 0);
if (iWidth == 120 && iLines == 100) { // should be 4 bits per pixel
iTotalPass++;
PNGLOG(__LINE__, szTestName, " - PASSED");
} else {
iTotalFail++;
PNGLOG(__LINE__, szTestName, " - FAILED");
}
// Test 5 - Check CRC option
szTestName = (char *)"PNG Check CRC timing";
iTotal++;
PNGLOG(__LINE__, szTestName, szStart);
png.openFLASH((uint8_t *)octocat_8bpp, sizeof(octocat_8bpp), PNGDraw);
iTime1 = Micros();
png.decode(NULL, 0); // without CRC check should be faster
iTime1 = Micros() - iTime1;
png.close();
png.openFLASH((uint8_t *)octocat_8bpp, sizeof(octocat_8bpp), PNGDraw);
iTime2 = Micros();
png.decode(NULL, PNG_CHECK_CRC); // with CRC check should be slower
iTime2 = Micros() - iTime2;
png.close();
if (iTime1 < iTime2) { // skipping CRC check should be faster
iTotalPass++;
PNGLOG(__LINE__, szTestName, " - PASSED");
} else {
iTotalFail++;
PNGLOG(__LINE__, szTestName, " - FAILED");
}
// Test 6 - Check palette options
szTestName = (char *)"PNG Check palette options";
iTotal++;
PNGLOG(__LINE__, szTestName, szStart);
png.openFLASH((uint8_t *)octocat_8bpp, sizeof(octocat_8bpp), PNGDraw);
png.decode(NULL, 0); // default palette has 24-bit entries
pal1 = palentry24;
png.close();
png.openFLASH((uint8_t *)octocat_8bpp, sizeof(octocat_8bpp), PNGDraw);
png.decode(NULL, PNG_FAST_PALETTE); // Fast palette is RGB565 little-endian
pal2 = palentry16;
png.close();
if (pal1 == 0x2c2c2a && pal2 == 0x2965) { // correct 24-bit and 16-bit palette values
iTotalPass++;
PNGLOG(__LINE__, szTestName, " - PASSED");
} else {
iTotalFail++;
PNGLOG(__LINE__, szTestName, " - FAILED");
}
// Test 7 - Check full framebuffer decode
szTestName = (char *)"PNG Check full framebuffer decode";
iTotal++;
PNGLOG(__LINE__, szTestName, szStart);
png.openFLASH((uint8_t *)octocat_8bpp, sizeof(octocat_8bpp), NULL);
pFrameBuffer = (uint8_t *)malloc(png.getWidth() * png.getHeight()); // just big enough for 8-bpp pixels
png.setBuffer(pFrameBuffer);
png.decode(NULL, 0);
png.close();
c1 = pFrameBuffer[60 + (10 * 120)]; // pixel at (60,10)
c2 = pFrameBuffer[40 + (40 * 120)]; // pixel at (40,40)
if ( c1 == 2 && c2 == 15) { // check a pixel from first line and 50th line for correct colors
iTotalPass++;
PNGLOG(__LINE__, szTestName, " - PASSED");
} else {
iTotalFail++;
PNGLOG(__LINE__, szTestName, " - FAILED");
}
free(pFrameBuffer);
// Test 8 - check 8-bit to RGB565 conversion and alpha blending
ucPixelType = PNG_RGB565_BIG_ENDIAN;
u32BG = 0x00ff00; // set background color to pure green
szTestName = (char *)"PNG Verify 8-bit to RGB565 output";
iTotal++;
PNGLOG(__LINE__, szTestName, szStart);
u16Out = 0xffff;
png.openFLASH((uint8_t *)octocat_8bpp, sizeof(octocat_8bpp), PNGDraw2);
png.setBuffer(NULL);
png.decode(NULL, 0);
png.close();
if (u16Out == 0xe007) { // check transparnet pixel (0,0) to see if it matches the 32-bit BG color we asked for
iTotalPass++;
PNGLOG(__LINE__, szTestName, " - PASSED");
} else {
iTotalFail++;
PNGLOG(__LINE__, szTestName, " - FAILED");
}
// Test 9 - check 32-bit to RGB565 conversion and alpha blending
ucPixelType = PNG_RGB565_BIG_ENDIAN;
u32BG = 0xff0000; // set background color to pure blue
szTestName = (char *)"PNG Verify 32-bit to RGB565 output";
iTotal++;
PNGLOG(__LINE__, szTestName, szStart);
u16Out = 0xffff;
png.openFLASH((uint8_t *)octocat_8bpp, sizeof(octocat_8bpp), PNGDraw2);
png.setBuffer(NULL);
png.decode(NULL, 0);
png.close();
if (u16Out == 0x1f00) { // check transparnet pixel (0,0) to see if it matches the 32-bit BG color we asked for
iTotalPass++;
PNGLOG(__LINE__, szTestName, " - PASSED");
} else {
iTotalFail++;
PNGLOG(__LINE__, szTestName, " - FAILED");
}
// Test 10 - check the decoding can be aborted when the PNGDraw callback returns 0
ucPixelType = PNG_RGB565_BIG_ENDIAN;
szTestName = (char *)"PNG decode aborted early";
iTotal++;
PNGLOG(__LINE__, szTestName, szStart);
u16Out = 0xffff;
png.openFLASH((uint8_t *)octocat_8bpp, sizeof(octocat_8bpp), PNGDraw3);
png.setBuffer(NULL);
rc = png.decode(NULL, 0);
png.close();
if (rc == PNG_QUIT_EARLY) { // check transparnet pixel (0,0) to see if it matches the 32-bit BG color we asked for
iTotalPass++;
PNGLOG(__LINE__, szTestName, " - PASSED");
} else {
iTotalFail++;
PNGLOG(__LINE__, szTestName, " - FAILED");
}
// FUZZ testing
// Randomize the input data (file header and compressed data) and confirm that the library returns an error code
// and doesn't have an invalid pointer exception
printf("Begin fuzz testing...\n");
szTestName = (char *)"Single Byte Sequential Corruption Test";
iTotal++;
pFuzzData = (uint8_t *)malloc(sizeof(octocat_8bpp));
PNGLOG(__LINE__, szTestName, szStart);
// We don't need to corrupt the file all the way to the end because it will take a loooong time
// The header is the main area where corruption can cause erratic behavior
for (i=0; i<sizeof(octocat_8bpp); i++) { // corrupt each byte one at a time by inverting it
memcpy(pFuzzData, octocat_8bpp, sizeof(octocat_8bpp)); // start with the valid data
pFuzzData[i] = ~pFuzzData[i]; // invert the bits of this byte
if (png.openFLASH(pFuzzData, sizeof(octocat_8bpp), PNGDraw) == PNG_SUCCESS) { // the PNG header may be rejected
png.decode(NULL, 0);
}
} // for each test
PNGLOG(__LINE__, szTestName, " - PASSED");
iTotalPass++;
// Fuzz test part 2 - multi-byte random corruption
szTestName = (char *)"Multi-Byte Random Corruption Test";
iTotal++;
PNGLOG(__LINE__, szTestName, szStart);
for (i=0; i<1000; i++) { // 1000 iterations of random spots in the file to corrupt with random values
int iOffset;
memcpy(pFuzzData, octocat_8bpp, sizeof(octocat_8bpp)); // start with the valid data
iOffset = rand() % sizeof(octocat_8bpp);
pFuzzData[iOffset] = (uint8_t)rand();
iOffset = rand() % sizeof(octocat_8bpp); // corrupt 2 spots just for good measure
pFuzzData[iOffset] = (uint8_t)rand();
if (png.openFLASH(pFuzzData, sizeof(octocat_8bpp), PNGDraw) == PNG_SUCCESS) { // the PNG header may be rejected
png.decode(NULL, 0);
}
} // for each test
PNGLOG(__LINE__, szTestName, " - PASSED");
iTotalPass++;
free(pFuzzData);
printf("Total tests: %d, %d passed, %d failed\n", iTotal, iTotalPass, iTotalFail);
return 0;
} /* main() */
+1 -10
View File
@@ -20,7 +20,6 @@ The PNG image specification was written at a time when computers had megabytes o
Feature summary:<br>
----------------<br>
- *New* Added PNGDisplay helper class to simplify displaying images on displays supported by my bb_spi_lcd library<br>
- Runs on any MCU with at least 48K of free RAM<br>
- No external dependencies (including malloc/free)<br>
- Decode an image line by line with a callback function<br>
@@ -34,7 +33,7 @@ Feature summary:<br>
How fast is it?<br>
---------------<br>
For most PNG images, the time is split about 50/50 between inflate and de-filtering. Indexed images usually don't enable filtering, so it becomes nearly 100% the inflator. Converting the output to RGB565 can take significant cycles if doing alpha blending. The examples folder contains a sketch to measure the performance of decoding a 240x200 image of varying bit depths. Here's the results when run on a few common MCUs:<br>
The examples folder contains a sketch to measure the performance of decoding a 240x200 image of varying bit depths. Here's the results when run on a few common MCUs:<br>
<br>
<p align="center">
@@ -46,11 +45,3 @@ Documentation:<br>
Detailed information about the API is in the [Wiki](https://github.com/bitbank2/PNGdec/wiki)<br>
See the examples folder for easy starting points<br>
<br>
## Funding
This project received funding through [NGI Zero Core](https://nlnet.nl/core), a fund established by [NLnet](https://nlnet.nl) with financial support from the European Commission's [Next Generation Internet](https://ngi.eu) program. Learn more at the [NLnet project page](https://nlnet.nl/project/ImageCodes-Optimised).
[<img src="https://nlnet.nl/logo/banner.png" alt="NLnet foundation logo" width="20%" />](https://nlnet.nl)
[<img src="https://nlnet.nl/image/logos/NGI0_tag.svg" alt="NGI Zero Logo" width="20%" />](https://nlnet.nl/core)
@@ -47,14 +47,13 @@ uint8_t *d, ucPix, ucAlpha, ucMask;
} // for each group of 8 pixels
} /* DrawPixelsMasked() */
int PNGDraw(PNGDRAW *pDraw)
void PNGDraw(PNGDRAW *pDraw)
{
uint8_t ucMask[32];
if (png.getAlphaMask(pDraw, ucMask, 255)) { // if any pixels are opaque, draw them
DrawPixelsMasked(pDraw->y, pDraw->pPixels, ucMask, pDraw->iWidth);
}
return 1;
} /* PNGDraw() */
void setup() {
@@ -1,79 +0,0 @@
//
// Example sketch showing the performance benefit of using
// DMA when pushing pixels to serial connected LCD displays
//
// written by Larry Bank (bitbank@pobox.com)
// Febrary 27, 2025
//
#include <PNGdec.h>
#include <bb_spi_lcd.h>
#include "../../test_images/octocat.h"
PNG png;
BB_SPI_LCD lcd;
int w, h, xoff, yoff;
bool bDMA;
static uint16_t usPixels[320]; // make sure there is enough room for the full image width
//
// PNG draw callback
// Called with a full row of pixels
// for every row in the image
//
int PNGDraw(PNGDRAW *pDraw)
{
if (pDraw->y == 0) {
// set the address window when we get the first line
lcd.setAddrWindow(xoff, yoff, w, h);
}
// There's a risk of overwriting pixels that are still being sent to the display if we only use a single \
// DMA buffer, **BUT** in this case, the PNG decoding plus the pixel conversion takes a long time
// relative to sending pixels to the display. If the display were a REALLY slow one, then it would be
// prodent to use a dual (ping-pong) buffer scheme to avoid that risk.
png.getLineAsRGB565(pDraw, usPixels, PNG_RGB565_BIG_ENDIAN, 0); // get help converting to RGB565
if (bDMA) {
lcd.pushPixels(usPixels, pDraw->iWidth, DRAW_TO_LCD | DRAW_WITH_DMA);
} else {
lcd.pushPixels(usPixels, pDraw->iWidth);
}
return 1;
} /* PNGDraw() */
void setup()
{
long lTime;
lcd.begin(DISPLAY_CYD_543 /*DISPLAY_WS_AMOLED_18*/);
lcd.fillScreen(TFT_BLACK);
lcd.setFont(FONT_12x16);
lcd.setTextColor(TFT_GREEN);
lcd.setCursor((lcd.width() - 17*12)/2, 0);
lcd.print("PNG DMA Perf Demo");
png.openFLASH((uint8_t *)octocat, sizeof(octocat), PNGDraw);
w = png.getWidth();
h = png.getHeight();
xoff = (lcd.width() - w)/2; // center on the LCD
yoff = (lcd.height() - h)/2;
bDMA = false; // first time without DMA
lTime = micros();
png.decode(NULL, PNG_FAST_PALETTE); // use the RGB565 palette to speed up color conversion for the LCD
lTime = micros() - lTime;
png.close();
lcd.setCursor((lcd.width() - (20*12))/2, lcd.height()-32);
lcd.printf("Without DMA: %d us\n", (int)lTime);
png.openFLASH((uint8_t *)octocat, sizeof(octocat), PNGDraw);
w = png.getWidth();
h = png.getHeight();
xoff = (lcd.width() - w)/2; // center on the LCD
yoff = (lcd.height() - h)/2;
bDMA = true; // second time with DMA
lTime = micros();
png.decode(NULL, PNG_FAST_PALETTE); // use the RGB565 palette to speed up color conversion for the LCD
lTime = micros() - lTime;
png.close();
lcd.setCursor((lcd.width() - (17*12))/2, lcd.height()-16);
lcd.printf("With DMA: %d us\n", (int)lTime);
}
void loop()
{
}
@@ -0,0 +1,234 @@
//
// m5logosmall
// Data size = 3561 bytes
//
// PNG, Compression=Flate, Size: 240 x 135, 24-Bpp
//
// for non-Arduino builds...
#ifndef PROGMEM
#define PROGMEM
#endif
const uint8_t m5logosmall[] PROGMEM = {
0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,
0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x87,0x08,0x02,0x00,0x00,0x00,0xa7,0x10,0x43,
0xbc,0x00,0x00,0x0d,0xb0,0x49,0x44,0x41,0x54,0x78,0xda,0xed,0x5d,0x4d,0x48,0x1b,
0xeb,0x1a,0x9e,0x73,0x71,0xe5,0xe6,0xde,0x50,0x7b,0xb2,0x39,0x0d,0xc5,0x03,0x2e,
0x8c,0xb8,0x8a,0x8b,0x2c,0xc4,0xde,0xcd,0x9d,0x3b,0x28,0xe2,0x42,0x17,0x81,0x23,
0x58,0x54,0x0a,0x0a,0x5d,0xf4,0x2e,0xac,0x20,0x45,0x0e,0x82,0x15,0xee,0xe9,0x42,
0xa8,0x70,0x50,0xa9,0x60,0xef,0xcd,0x42,0xa1,0x52,0xa4,0xc3,0x1c,0xba,0x68,0x70,
0x91,0x45,0xb2,0x92,0x93,0x42,0x85,0x06,0xab,0x5d,0x34,0x55,0x9b,0x5d,0x76,0x97,
0xde,0xc5,0x7b,0xfc,0xce,0x34,0x99,0xf9,0xe6,0x9b,0xbf,0x64,0x32,0xf3,0x3c,0x64,
0x11,0x93,0xc9,0x38,0x3f,0xcf,0xf7,0xce,0xf3,0xfe,0x7c,0xef,0xf7,0xdd,0xd7,0xaf,
0x5f,0x25,0x00,0x08,0x0b,0x3a,0x70,0x09,0x9a,0x80,0xb3,0x4a,0x95,0xbd,0x4f,0xc4,
0x63,0xb8,0x20,0x20,0x74,0xbb,0x42,0x2d,0x9e,0x1c,0xff,0xfe,0x76,0xb5,0x50,0xa3,
0x3f,0xd3,0xdd,0x5d,0x77,0x6e,0xd4,0x32,0xca,0x10,0x68,0xed,0x13,0xbe,0x83,0xe4,
0xf0,0xc9,0x24,0x67,0xd5,0xdc,0x9b,0xab,0xce,0x7c,0xf9,0xd2,0x70,0x83,0x74,0x77,
0xd7,0xfd,0xa1,0xdb,0xc9,0x5b,0x37,0xc1,0x6c,0x10,0xba,0xbd,0xa9,0x0c,0x5a,0x83,
0xd0,0x6d,0xa9,0x2e,0xc4,0x41,0x3a,0xa4,0xbf,0xaf,0x57,0x49,0xf5,0xe0,0x32,0x82,
0xd0,0xad,0x37,0xc9,0xa5,0xf3,0x8b,0xf5,0xdc,0xa9,0xa1,0x49,0x66,0x64,0x4d,0xde,
0xba,0x29,0x49,0x12,0x67,0x4b,0x18,0x6c,0x10,0x3a,0xd0,0xea,0x82,0xe3,0xff,0xf1,
0x6d,0x39,0x1c,0x47,0x10,0x3a,0x70,0x42,0x39,0x7b,0x37,0x65,0x69,0x68,0x69,0x27,
0x1c,0x89,0xb2,0x38,0xd0,0x09,0x5a,0x83,0xd0,0x2d,0x53,0x17,0x4c,0x33,0xd8,0x95,
0xc2,0x6a,0xf1,0x84,0xbf,0xcf,0x5f,0x7f,0x1a,0x90,0x10,0xc0,0x06,0xa1,0xbd,0xc5,
0xda,0xce,0x01,0xc7,0x24,0xbb,0xb7,0xa6,0x96,0xb4,0x86,0xbc,0x06,0xa1,0x5b,0x29,
0x94,0xdb,0xe2,0xdf,0x81,0xd0,0x11,0x82,0xa5,0xeb,0x66,0x69,0x32,0x29,0xe3,0xed,
0x80,0x7c,0x96,0xda,0x66,0x71,0xa0,0x13,0x61,0x3e,0x10,0xda,0x9b,0xa7,0xbf,0x08,
0x99,0xce,0x2a,0xd5,0xb9,0xe9,0x49,0x7a,0x3f,0x38,0x3e,0xb3,0x30,0x35,0xe6,0xc6,
0x60,0xf3,0x07,0x15,0x68,0x0d,0x42,0x3b,0xb4,0x8b,0x22,0xb1,0x0b,0xb5,0x78,0xf2,
0x74,0xf9,0x81,0xa6,0x69,0xec,0x13,0x59,0x96,0x0f,0x0f,0x0f,0xdd,0xeb,0x10,0x84,
0xf9,0x40,0x68,0x2f,0x0d,0xa1,0xa5,0xba,0xc8,0xaa,0xb9,0xa5,0xd9,0x09,0xfd,0x87,
0xb2,0x2c,0x0f,0x8e,0xcf,0x78,0x45,0x35,0x41,0x1d,0x12,0x71,0xc7,0x31,0xea,0x84,
0x16,0x89,0x2d,0x58,0xaa,0x8b,0xac,0x9a,0x3b,0xda,0xdf,0x62,0x56,0x59,0x96,0x65,
0x49,0x92,0xe6,0x97,0x9f,0xf8,0x24,0x06,0x2c,0x8f,0x39,0xca,0x06,0x3b,0xa2,0x84,
0x16,0xb1,0x76,0x96,0x9c,0x20,0xaf,0xb1,0xce,0x2a,0xaf,0x6c,0xee,0x35,0x87,0x4c,
0xd0,0x21,0x20,0xb4,0x67,0xea,0xa2,0x74,0x7e,0xd1,0x28,0x94,0x3d,0x54,0x17,0x1e,
0x8e,0xcc,0xa8,0x05,0xb0,0x23,0x44,0x68,0xf7,0x99,0x8b,0x46,0x75,0x41,0x54,0xf6,
0x4f,0x5d,0xd8,0x62,0xf6,0xbd,0xe7,0x05,0xd0,0x3a,0x12,0x84,0xe6,0x47,0x94,0x49,
0x5d,0x48,0xdc,0x80,0xb1,0xa1,0xba,0x90,0x65,0x79,0x63,0x7b,0xd7,0x0d,0x45,0xc8,
0xbe,0x1e,0xff,0xfe,0x96,0x7d,0xe2,0xd2,0xab,0xa3,0x1d,0x66,0x9e,0x15,0xcd,0x36,
0x58,0x1c,0xe8,0x74,0x1c,0x43,0x04,0xa1,0x03,0xa1,0x2e,0xf8,0xf9,0x6a,0x7e,0x44,
0x99,0x3d,0xd0,0x5f,0x3f,0x1c,0xae,0x13,0xca,0x6e,0xf2,0x1a,0x86,0x96,0xbe,0x6e,
0xa8,0xfc,0xef,0xef,0xf7,0x1d,0xdb,0x54,0xbe,0x0e,0x39,0x7e,0xa4,0x84,0xd8,0x4e,
0x87,0x93,0xd0,0x22,0x0e,0x13,0xdf,0x50,0x99,0xa9,0x0b,0x97,0x42,0xb9,0x31,0x4a,
0xcd,0xa2,0x22,0x04,0xc3,0xaf,0x1c,0x4b,0x1a,0x7a,0xb0,0xbc,0xb9,0xea,0x64,0x9f,
0x84,0x3e,0x11,0x13,0x36,0x42,0x7b,0x92,0xaf,0x6e,0x0e,0x95,0xd9,0x3e,0xeb,0xb6,
0x24,0x11,0xe2,0xad,0x52,0x77,0x9c,0x84,0x07,0xa1,0x5b,0x66,0x92,0x3d,0x29,0x7e,
0x50,0x8b,0x27,0xa3,0xe9,0x64,0x9d,0x8d,0x74,0xc9,0x24,0xc7,0x7e,0x24,0x79,0xb1,
0x7a,0xb5,0xd3,0xb4,0x98,0x20,0x08,0x1d,0x50,0x07,0xdf,0x6e,0x38,0x96,0x6a,0x30,
0x3c,0xb1,0xcd,0x5e,0x85,0x44,0xea,0x4c,0xbb,0x7b,0x4f,0xd4,0x6c,0xe4,0x84,0x63,
0x5e,0x63,0x18,0x08,0xad,0xfc,0xf2,0x5b,0x23,0x9b,0x1d,0x07,0xaa,0x0c,0xc3,0xcc,
0xb6,0x1c,0x41,0xb3,0x90,0xc8,0xfc,0xf2,0x13,0xc7,0x11,0x8c,0xb5,0x9d,0x03,0xb6,
0x43,0x0f,0x39,0xdd,0xa8,0xd0,0xda,0xdd,0x65,0x0c,0x73,0xa3,0x19,0x9a,0x97,0x6a,
0x17,0x89,0x78,0x2c,0x11,0x8f,0x29,0x87,0x87,0x74,0xb3,0x99,0x89,0x25,0x3e,0xf1,
0x79,0x69,0x58,0xd1,0xe1,0x32,0x24,0x42,0x58,0x98,0x1a,0x93,0xa4,0x3d,0xda,0xb3,
0xa6,0x69,0x59,0x35,0xe7,0x26,0xfa,0xc6,0x89,0xee,0x95,0xce,0x2f,0x40,0xe8,0x16,
0xe3,0xfe,0xd0,0xed,0x46,0x0b,0x9d,0x2f,0x5f,0xf6,0xff,0xac,0xba,0x49,0x28,0x28,
0xa9,0x1e,0x25,0xd5,0x93,0x51,0x86,0xf4,0xca,0x41,0xd3,0x34,0x4d,0x4b,0x36,0xea,
0x10,0x0f,0xb5,0x8a,0x19,0xfa,0xfb,0x7a,0xbd,0x8a,0xff,0x08,0xb6,0x0d,0x01,0xa1,
0x5b,0x24,0x39,0x52,0x3d,0xc7,0xb7,0x6e,0x1a,0xde,0xa7,0x7c,0xf9,0x32,0x5f,0xbe,
0x74,0x53,0xd8,0x90,0x88,0xc7,0x16,0xa6,0xc6,0x32,0xca,0x90,0x3e,0x20,0xad,0x69,
0x9a,0xa6,0x69,0x47,0xb2,0x3c,0x38,0x3e,0x23,0x49,0x92,0xe7,0x21,0x11,0x43,0xe8,
0xf3,0x2f,0x8e,0x85,0xf2,0xf5,0xf5,0xa9,0x49,0x21,0x45,0xa8,0xc2,0x76,0x3e,0x4d,
0x62,0xb5,0xd4,0xc7,0xbe,0x52,0x99,0x22,0x6e,0x75,0x4a,0xe6,0xfd,0xc7,0xcf,0xe2,
0x6e,0xae,0xe5,0x35,0xd1,0x7f,0x95,0xbd,0x9b,0x6a,0x6b,0xbf,0x30,0x9c,0x89,0x15,
0x91,0x68,0xb4,0x9b,0xdb,0x66,0x58,0x32,0xea,0xc6,0xe7,0x13,0x77,0x4f,0xc5,0xe3,
0x24,0x96,0xd3,0x13,0x99,0x18,0xfb,0xdb,0xfc,0x7f,0x41,0xe8,0xf6,0x30,0xd8,0xbe,
0x16,0x58,0xb2,0x4a,0x0c,0xcf,0xcb,0xea,0x5d,0x26,0x77,0xec,0x66,0x97,0x40,0xe8,
0x50,0xe9,0x90,0x40,0xf5,0x73,0x71,0x33,0xf3,0xc5,0x71,0x76,0x09,0x84,0x6e,0x57,
0x1d,0x12,0xe4,0xba,0x61,0xb3,0x32,0x0f,0x11,0x81,0x21,0xd2,0x5f,0x8f,0x33,0x1e,
0xc2,0x44,0xe8,0x08,0x35,0x3c,0xa7,0x30,0x9c,0x99,0x0e,0x61,0xf1,0x90,0x26,0xd3,
0xda,0xac,0xf2,0x4e,0x30,0xcb,0xed,0xbe,0x76,0x05,0x51,0x8e,0x80,0xea,0x0a,0xc9,
0x4e,0xf1,0x8d,0x48,0x65,0xa9,0xdf,0x3a,0xc4,0x57,0x75,0x61,0x8b,0xca,0x90,0x1c,
0x81,0x63,0x33,0xd5,0x72,0x50,0x1b,0x38,0x5b,0x2c,0x74,0x3f,0x49,0xd6,0xb1,0xba,
0x90,0xbe,0x2d,0x16,0x15,0x57,0x17,0x9e,0xb7,0x56,0x82,0xe4,0x08,0x16,0x58,0x65,
0x52,0xbe,0x7c,0x69,0x37,0x73,0x4b,0x3a,0xc4,0xec,0xc1,0xfd,0x87,0x0e,0xc9,0x9d,
0x7a,0xf8,0xe0,0x1e,0x19,0x19,0x71,0x56,0x25,0xf2,0xed,0x41,0xd6,0x4c,0xa8,0x3c,
0x10,0xf1,0x5a,0xbc,0x30,0x10,0xda,0x7d,0x16,0xf7,0x3a,0xcb,0x5d,0xe5,0xa4,0x1b,
0x25,0xb1,0x46,0x33,0x22,0xd2,0xc8,0x8f,0xd8,0x05,0xfa,0x38,0x46,0xce,0x29,0xb4,
0x04,0x65,0xb9,0x17,0xcc,0x1b,0x8d,0x52,0x35,0x8f,0x9b,0xbe,0x72,0x89,0x78,0x6c,
0x63,0x7b,0xb7,0x74,0x7e,0x41,0xa3,0xc8,0x4d,0xec,0x42,0x42,0x2b,0x30,0x10,0x5a,
0x10,0x44,0x6b,0x33,0x1d,0xb2,0x5a,0xa8,0x49,0x85,0xa2,0x63,0x1d,0x42,0xd5,0x7c,
0xcd,0x17,0xca,0x20,0x74,0xd4,0x21,0xa8,0x43,0xbc,0x8d,0x87,0x58,0x0a,0x65,0x74,
0x89,0x06,0xa1,0x3d,0xd0,0x21,0x19,0x73,0x93,0xb9,0x5a,0xa8,0xad,0x16,0x54,0xbf,
0x1b,0x9e,0x63,0x79,0x0a,0x10,0xda,0x17,0x79,0x6d,0x46,0x3b,0xa2,0xb5,0x03,0x0b,
0x1a,0x84,0x88,0x38,0x08,0x1d,0x75,0x1d,0x62,0xc6,0x42,0xf1,0x78,0x08,0x2b,0x0a,
0x85,0xba,0x00,0xa1,0xdb,0x40,0x87,0x64,0x9e,0x15,0xcd,0x5c,0x37,0xc4,0x2e,0x40,
0xe8,0xa0,0xd3,0xda,0x90,0xa0,0xf9,0xf2,0x65,0xbe,0x2c,0x91,0xbc,0x96,0x24,0xa9,
0xbf,0xaf,0x97,0xa6,0x9c,0x40,0x5d,0x80,0xd0,0x41,0xa7,0x75,0x22,0x1e,0xe3,0xa4,
0x1b,0xff,0xf8,0xa4,0xc0,0x66,0xa4,0x9a,0x25,0xf9,0x40,0x65,0x10,0x3a,0x78,0xf2,
0xda,0x2c,0xcc,0x07,0x75,0x01,0x42,0x87,0x50,0x87,0x40,0x5d,0x80,0xd0,0x61,0xd0,
0x21,0xcc,0x60,0x43,0x5d,0x80,0xd0,0x61,0xd0,0x21,0x0b,0xb8,0x10,0xcd,0xc2,0x5f,
0x70,0x09,0x00,0x10,0x1a,0x00,0x40,0x68,0x00,0x00,0xa1,0x01,0x00,0x84,0x06,0x40,
0x68,0x00,0x00,0xa1,0x01,0x00,0x84,0x06,0x00,0x10,0x1a,0x00,0xa2,0x49,0xe8,0xf5,
0xdc,0xa9,0xbe,0x55,0x00,0x60,0x09,0xb5,0x78,0x02,0x42,0x07,0x0b,0xe9,0xee,0x2e,
0xf6,0x3e,0x5f,0xbe,0xcc,0xaa,0x39,0x70,0x5a,0x9c,0xcd,0x9c,0x75,0x94,0xdb,0x11,
0x61,0xa8,0xe5,0xb8,0x73,0xa3,0x96,0x2f,0xff,0xf9,0xa7,0x7e,0x7a,0x1f,0x2a,0x33,
0xcd,0x60,0xd6,0x7b,0xc4,0xd9,0x4a,0x4b,0xc1,0x41,0x48,0x7a,0xdb,0xf5,0xff,0xac,
0x1a,0x7e,0x85,0xae,0x42,0x8d,0xd7,0x8a,0x53,0xae,0x1d,0x82,0xa5,0xed,0xc3,0xd3,
0x7d,0xd4,0xd7,0x66,0xfd,0x21,0xb8,0x3e,0xb4,0xd8,0x80,0x7f,0xcb,0x74,0x80,0xd0,
0xcd,0x36,0x3f,0x52,0x24,0xcb,0xea,0xa3,0x36,0x27,0x37,0x84,0x1d,0xfc,0xbd,0xed,
0x9d,0xdc,0xd6,0x0e,0x9f,0x7e,0x6e,0x41,0x44,0x9e,0x5a,0x61,0x5e,0x92,0x22,0x9a,
0x77,0x34,0xe2,0xe3,0x19,0x8b,0x06,0x85,0xea,0x99,0x6b,0x16,0xbb,0x60,0x67,0x6a,
0xb7,0x21,0x3c,0x08,0x0d,0xbb,0xd5,0xb2,0x67,0x91,0x99,0xc3,0x17,0x29,0xe7,0x21,
0x42,0xab,0x60,0x09,0x3a,0x8e,0xee,0xbb,0x9a,0x07,0x2d,0x76,0x81,0x45,0x83,0x40,
0xeb,0xa0,0xeb,0x90,0x76,0x3f,0x7e,0x10,0x1a,0x16,0x4e,0x94,0xca,0x11,0xef,0xf8,
0x11,0x69,0x42,0xb7,0x11,0x4b,0x10,0x8b,0x04,0xa1,0xbd,0x27,0x8d,0x9b,0xd5,0x55,
0xa0,0x2e,0x40,0xe8,0x80,0x06,0x0d,0x9a,0x66,0x0b,0x2d,0x0f,0x03,0x4d,0x98,0x40,
0x68,0xcf,0x4c,0xa3,0x7f,0x7c,0x82,0xba,0x00,0xa1,0x5b,0x2f,0x5e,0x3d,0x79,0xe2,
0x8b,0x48,0xf9,0xe6,0x6b,0x1e,0x10,0x3a,0x9c,0xb4,0x96,0x74,0x4b,0xd6,0x7a,0x6e,
0x35,0x2d,0x33,0x23,0x6d,0x14,0x1d,0x07,0xa1,0xa3,0x1b,0x0f,0x81,0xba,0x00,0xa1,
0x03,0xe4,0x38,0xba,0x21,0x22,0x62,0x17,0x20,0x74,0x70,0x0d,0x36,0x3f,0x10,0xd1,
0xdf,0xd7,0x2b,0x5d,0x4f,0x6d,0xa2,0x45,0x91,0x91,0xac,0x06,0xa1,0xdb,0x5b,0x87,
0x88,0x00,0x54,0x06,0xa1,0xdb,0x4c,0x87,0x98,0x01,0xcb,0x53,0x80,0xd0,0x6d,0xac,
0x43,0x60,0x92,0x41,0xe8,0x76,0xa5,0x35,0x55,0x3e,0x49,0x92,0xf4,0xe6,0xaa,0x93,
0x7d,0x7e,0xe7,0x46,0x4d,0x92,0x24,0x84,0x93,0x41,0x68,0x00,0xb0,0x06,0x7a,0xdb,
0x01,0x20,0x34,0x00,0x80,0xd0,0x00,0x00,0x42,0x03,0x00,0x08,0x0d,0x80,0xd0,0x00,
0x00,0x42,0x03,0x00,0x08,0x0d,0x00,0x20,0x34,0x00,0x80,0xd0,0x00,0x08,0x0d,0x00,
0x20,0x34,0x00,0x80,0xd0,0x00,0x00,0x42,0x03,0x00,0x08,0x0d,0x80,0xd0,0x00,0x00,
0x42,0x03,0x00,0x08,0x4d,0x70,0xb6,0x92,0x71,0xf3,0xd7,0x3f,0x3e,0xab,0x54,0xcf,
0x2a,0x55,0xb5,0x78,0x42,0x6f,0x5a,0x72,0xa1,0xdc,0x2f,0xcd,0xad,0x3f,0x0b,0x5b,
0x3f,0x09,0xe0,0x1d,0x69,0x44,0xeb,0xa7,0x60,0xd1,0x72,0xd3,0x76,0xd7,0xb3,0xa1,
0x5f,0x59,0xae,0x7c,0x4a,0x2d,0xb6,0x38,0x1b,0x88,0xcc,0xed,0xa3,0x49,0xaf,0x47,
0xfb,0x5b,0x9a,0xa6,0xe9,0x3f,0x97,0x65,0x79,0x70,0x7c,0x86,0xb3,0x87,0xb5,0x9d,
0x83,0xa3,0xfd,0x2d,0xc1,0x33,0x1a,0x1c,0x9f,0xe1,0x9f,0xcb,0x59,0xa5,0x3a,0x37,
0x3d,0xa9,0x69,0xda,0xca,0xe6,0x9e,0x83,0xf5,0x5e,0x0d,0xcf,0xc2,0xf2,0x14,0x08,
0x23,0x23,0x23,0x92,0x24,0xcd,0x2f,0x3f,0xe1,0x6c,0xb6,0xb6,0x73,0xb0,0x34,0x3b,
0xe1,0xec,0xd8,0x3c,0x44,0xeb,0xd7,0xfa,0x26,0xc2,0xe5,0xcb,0x97,0xa5,0xf3,0x0b,
0xf1,0x0e,0x5a,0xb4,0xe4,0xfa,0x6a,0xa1,0x96,0x51,0xaa,0x9c,0xee,0x44,0xeb,0xb9,
0xd3,0x7c,0x99,0x37,0xfb,0x3a,0x7d,0x75,0xca,0xbf,0x97,0x6a,0xf1,0xe4,0xe9,0xf2,
0x83,0x3a,0x2a,0x13,0x34,0x4d,0xa3,0xcf,0x5f,0xe6,0x4b,0x86,0x3b,0x69,0x1c,0x03,
0x7c,0xf0,0x9b,0x19,0x64,0xd5,0x1c,0xed,0x6d,0x69,0x76,0xa2,0xbf,0xaf,0x64,0x6b,
0x8e,0xad,0x5a,0x3c,0x19,0x4d,0x27,0xf5,0x3c,0x66,0xc7,0x4f,0xfb,0x94,0x65,0x79,
0x63,0x7b,0xd7,0xf0,0xbf,0x9f,0x55,0xaa,0xb4,0xcd,0xe0,0xf8,0x5b,0xce,0xd0,0x5d,
0x9a,0x9d,0x08,0xc2,0xd3,0x3e,0x40,0x8b,0xd7,0xaf,0xe7,0x4e,0x05,0xe7,0xf4,0x67,
0xd5,0x9c,0xad,0x3d,0x53,0xd3,0x4e,0xc3,0xaf,0xf8,0x6b,0xb5,0x9f,0x55,0xaa,0x8c,
0xcd,0x64,0xcc,0x32,0xca,0x10,0x3b,0x06,0x4b,0xeb,0xbb,0xb1,0xbd,0xdb,0x78,0xa8,
0x74,0xe3,0x57,0x36,0xf7,0x6c,0xb1,0xb9,0xd1,0x0a,0x88,0x13,0x9a,0xb1,0x99,0x9d,
0x02,0xfb,0x47,0x6c,0xb8,0x6a,0x9a,0x36,0x37,0x3d,0x79,0x78,0x78,0xe8,0xe0,0xc6,
0x31,0x36,0xcb,0xb2,0xdc,0xfa,0xa5,0xc2,0xbf,0xb6,0x1a,0x8f,0x9f,0xbd,0xf8,0xeb,
0xdc,0x7f,0xe8,0xf5,0xf8,0xd9,0x0b,0xcb,0xed,0x3f,0x7c,0xfa,0xf2,0xcf,0x7f,0x6b,
0xec,0x27,0x1f,0x3e,0x7d,0xe1,0x6c,0x69,0xb9,0x8d,0xe5,0xb1,0x75,0x74,0x74,0x74,
0x74,0x74,0x98,0x1d,0xd8,0x87,0x4f,0x5f,0x6c,0xed,0xfc,0x55,0xe1,0x1d,0xed,0xf0,
0x55,0xe1,0x9d,0xad,0x23,0xf9,0xf0,0xe9,0xcb,0xf0,0xf0,0x70,0xc7,0x35,0x86,0x87,
0x87,0xc5,0x7f,0xc8,0x7e,0x65,0x76,0xa8,0xaf,0x0a,0xef,0x1e,0x3f,0x7b,0x61,0xf6,
0x2d,0xdb,0x83,0xe1,0x45,0x60,0x67,0x34,0x3c,0x3c,0xec,0xf8,0x3a,0x7b,0x88,0x60,
0x45,0x39,0xde,0x5c,0x75,0x5a,0x3a,0x16,0x59,0x35,0xe7,0xa6,0xe3,0x96,0x2d,0xd1,
0x49,0x36,0x98,0x63,0x78,0x12,0xf1,0x58,0x73,0xda,0xc4,0x94,0xce,0x2f,0xe8,0x41,
0x41,0xa6,0x5d,0xd3,0x34,0x41,0xef,0x90,0xba,0xe9,0x91,0x2e,0x32,0x3b,0x54,0x25,
0xd5,0xb3,0x30,0x35,0xe6,0xe0,0x44,0xce,0x2a,0x55,0x66,0xfb,0xcd,0x14,0x4b,0xa4,
0xc3,0x76,0xf9,0xf2,0x25,0x5f,0x4e,0x9c,0x55,0xaa,0x96,0x1d,0x89,0x3c,0xc4,0xb5,
0x76,0x9c,0x69,0xf9,0x95,0x79,0xba,0xfc,0x80,0x78,0xc3,0x34,0x0f,0xdf,0xd9,0xad,
0x73,0x51,0x64,0x59,0xe6,0x8b,0x2b,0x67,0x03,0x7e,0x6e,0x7a,0x32,0x50,0x6c,0x0e,
0x16,0xa1,0x17,0x07,0x3a,0xc9,0xcf,0xe3,0x18,0x69,0xa2,0x7b,0xba,0xbb,0x2b,0xdd,
0xdd,0x25,0xb8,0x5b,0xf1,0x2d,0x03,0x0b,0x76,0x41,0x06,0xc7,0x67,0x12,0xf1,0x18,
0x19,0xe9,0xa3,0xfd,0x2d,0x91,0x30,0x19,0x13,0xfa,0xde,0x12,0x8e,0x85,0x5c,0x28,
0xfa,0x11,0x9c,0x6e,0x66,0x41,0x21,0x74,0xba,0xbb,0x8b,0xf9,0x6d,0x66,0x46,0x9a,
0x99,0xe7,0x3b,0x37,0x6a,0xd4,0x50,0xcb,0x6f,0x50,0x34,0x40,0x3c,0xf4,0xe6,0xb7,
0xde,0xd0,0xbb,0xb6,0x22,0xf1,0x13,0x5d,0x80,0x62,0xc6,0x27,0x36,0xaf,0x6c,0xee,
0x05,0xaa,0xa7,0x59,0x80,0x2c,0x74,0xf2,0xd6,0x4d,0x32,0xd2,0x66,0x4a,0x9a,0x99,
0xe7,0x8c,0x32,0x64,0x16,0xb5,0xf0,0x49,0x78,0xb4,0x36,0x65,0xb0,0x9e,0x3b,0xa5,
0xd1,0x45,0xd4,0xc9,0x28,0x43,0x34,0xd2,0xec,0x46,0x7b,0xbc,0x82,0x9e,0xcd,0xad,
0x0f,0x6b,0x04,0x59,0x43,0x93,0x40,0x34,0x54,0xd2,0x67,0x95,0x2a,0xb5,0x3c,0xbc,
0x73,0xa3,0xe6,0xcc,0x7d,0x51,0x8b,0x27,0xec,0x25,0x42,0xd0,0x44,0x3c,0xc6,0x0c,
0xdb,0xdc,0xf4,0xa4,0xfb,0x14,0x9d,0x63,0x73,0xf8,0xfa,0xe1,0xb0,0xde,0xca,0xb2,
0xd3,0x5f,0x9a,0x9d,0x68,0xfe,0x48,0x5b,0xdb,0x39,0x08,0x2c,0x9b,0xa5,0x40,0xc5,
0xa1,0xe9,0x56,0x2d,0x0e,0x74,0xae,0x16,0x6a,0x6f,0xae,0x3a,0x33,0x95,0x6f,0x32,
0x26,0x59,0x35,0x47,0x29,0x12,0xe6,0x15,0x89,0x3b,0xf8,0x86,0x8b,0xfd,0x88,0x74,
0x65,0xce,0x28,0x43,0x47,0xb2,0x7c,0x9d,0x7f,0x48,0xae,0x6c,0xee,0xf5,0xf7,0xf5,
0x36,0xb9,0x01,0x2e,0x1b,0xdb,0xfa,0x87,0xd2,0xfc,0xf2,0x13,0x4d,0x4b,0xd2,0x39,
0x36,0xf3,0x60,0xd4,0xe2,0x09,0x8b,0xa3,0x8b,0xdf,0x88,0xe8,0x5a,0x68,0x33,0x23,
0xcd,0xd4,0xf3,0xe2,0x40,0xa7,0xdd,0xfb,0x97,0x2f,0x5f,0x12,0x9b,0xc9,0x95,0x64,
0x0e,0xe5,0x6a,0xa1,0x76,0xef,0x79,0x81,0x6f,0xe1,0x12,0xf1,0xd8,0xc6,0xf6,0x2e,
0x4b,0x82,0x2c,0xcd,0x4e,0x8c,0xa6,0x93,0x73,0xd3,0x93,0x23,0x23,0x23,0x4d,0x36,
0xd8,0x75,0x61,0x0a,0xf6,0x5e,0x30,0xd6,0xe1,0x09,0x8e,0xf6,0xb7,0x28,0xd8,0xe2,
0x87,0x97,0x19,0x5a,0x42,0x93,0x91,0xae,0x53,0xd2,0x8c,0xdc,0xb6,0xac,0x02,0xbb,
0xeb,0x8b,0x03,0x9d,0xc7,0x8f,0x14,0xf5,0x5f,0xff,0xa0,0xd7,0xaf,0x3f,0x0d,0x64,
0xef,0xa6,0x88,0xeb,0xf7,0x9e,0x17,0x2c,0x8f,0x67,0x61,0x6a,0xec,0xfd,0xc7,0xcf,
0x2b,0x9b,0x7b,0xfa,0x8c,0xf1,0x68,0x3a,0x39,0x32,0x32,0xb2,0xb6,0x73,0xe0,0xb7,
0xde,0x20,0x97,0x94,0xe2,0x1b,0xad,0x75,0x58,0x59,0x9e,0xbc,0x55,0x6a,0xa7,0x2d,
0x09,0xad,0x37,0xd2,0xa4,0x19,0x1c,0x9b,0xe7,0x44,0x3c,0x76,0xfc,0x48,0x39,0x7e,
0xa4,0xd4,0x65,0x0d,0x12,0xf1,0x98,0x92,0xea,0x61,0x9c,0x16,0xb1,0xb5,0x44,0xeb,
0x8d,0xed,0xdd,0x97,0xf9,0x92,0x9e,0xd9,0x4b,0xb3,0x13,0xca,0x2f,0xbf,0xf9,0x77,
0x6b,0x0d,0xe3,0x1b,0x7a,0x7d,0x2f,0x9e,0x61,0xf1,0x0a,0xec,0xf4,0xe7,0xa6,0x27,
0x03,0xc8,0xe9,0x20,0x12,0x9a,0x19,0xe9,0xf5,0xdc,0x29,0xd5,0x88,0xb1,0xe0,0x86,
0x83,0x5d,0x71,0xd2,0x63,0xec,0xbf,0x88,0xef,0x8d,0x92,0x6a,0x87,0x87,0x87,0x2f,
0xf3,0x25,0xba,0xaf,0xaf,0x1f,0x0e,0xfb,0x17,0x6d,0x60,0xf9,0x94,0xc6,0xd0,0x98,
0xdd,0x0c,0x8b,0x27,0x78,0x99,0x2f,0x2d,0x4c,0x8d,0xb1,0xb1,0xd4,0xaa,0x30,0x4b,
0x9b,0x11,0x5a,0x6f,0xa4,0xef,0x3d,0x2f,0xb8,0x09,0x6e,0xf0,0x41,0x66,0x2f,0x5f,
0xbe,0x74,0x60,0x69,0x94,0x54,0xcf,0xc6,0xf6,0x2e,0x71,0x7a,0x69,0x76,0xc2,0x0f,
0x33,0xc9,0x8f,0x22,0x27,0xe2,0x31,0xa6,0x3a,0x9a,0x63,0x29,0xd9,0xb8,0x5a,0x98,
0x1a,0xf3,0xf5,0xc4,0x43,0x48,0x68,0x66,0xa4,0x99,0x4b,0x17,0x40,0x9f,0x5a,0x1f,
0xd7,0xf3,0xc3,0x4c,0xb2,0x28,0x8d,0x74,0x5d,0x62,0x5f,0xf7,0x62,0xd2,0x56,0xbf,
0xa5,0x7f,0xd0,0x8f,0x2b,0x36,0x98,0x9f,0x2e,0x3f,0x08,0x94,0xf0,0x08,0xee,0x14,
0xac,0x8c,0x32,0xc4,0xb2,0xd6,0x0e,0x82,0x1b,0xcd,0x7c,0x92,0xf8,0xaa,0x37,0xc8,
0x10,0xfe,0xf8,0xc3,0xf7,0x8d,0x2f,0xe6,0xa2,0x99,0x0d,0x27,0xff,0x2e,0x5a,0x22,
0x1e,0x9b,0x5f,0x7e,0x42,0xc3,0x89,0x2a,0x3a,0x40,0x68,0xeb,0x4b,0x46,0xf9,0x6d,
0x67,0xea,0xb9,0xdd,0xc1,0xf4,0x86,0x08,0x38,0x31,0x07,0xff,0x82,0x21,0x4a,0xaa,
0x87,0x95,0xfe,0xf9,0x1d,0xed,0x09,0x03,0xa1,0xc9,0xfe,0x65,0xef,0xa6,0x6c,0x4d,
0xcd,0xb2,0x05,0x72,0x07,0xd3,0xdd,0x5d,0x8e,0xf7,0xef,0xdf,0xb3,0x9e,0xf9,0x5b,
0x2b,0x9b,0x7b,0xef,0x3f,0x7e,0x36,0x7b,0xb1,0x18,0xb9,0xd9,0x91,0x30,0x9d,0xe0,
0x87,0x30,0x08,0xa0,0x98,0x0e,0x34,0xa1,0x29,0xaa,0xe0,0x13,0x9b,0xcf,0x2a,0x55,
0x52,0xe7,0x6e,0xea,0x9c,0x98,0x2a,0xf0,0xfc,0x19,0xc2,0x4a,0xb1,0x29,0x9d,0x69,
0xf6,0x12,0x8c,0x75,0xf8,0xa7,0xb3,0x99,0x98,0x1e,0x4d,0x27,0x83,0x20,0xa6,0xc3,
0xdc,0xc6,0x80,0xca,0x36,0xcc,0xd8,0x4c,0x29,0x15,0xbe,0x9e,0x51,0x8b,0x27,0x6b,
0x3b,0x07,0x66,0xf7,0x49,0x5f,0xd5,0xe0,0x79,0x71,0xa6,0xa0,0x0e,0xd6,0xc7,0x3a,
0xcc,0x8c,0x28,0xbd,0x19,0x4d,0x27,0x0d,0xaf,0xc6,0x59,0xa5,0xba,0xb6,0x73,0xe0,
0x38,0xf7,0xc9,0xc4,0xb4,0x24,0x49,0x41,0x10,0xd3,0x1d,0x61,0x65,0x33,0x9b,0x48,
0x9b,0xce,0x9d,0xd2,0x0a,0xc4,0xfa,0xa7,0x39,0x9b,0x25,0x70,0x7f,0xe8,0x36,0x67,
0x8e,0x2d,0x4d,0xc7,0x58,0xd2,0xcd,0x8e,0x66,0xe6,0x90,0x4d,0x80,0xd5,0x17,0xdd,
0x7b,0xa8,0x37,0x58,0xa9,0xb1,0x48,0xf0,0x81,0x72,0x78,0x6a,0xf1,0xc4,0xb0,0x92,
0xf3,0x65,0xbe,0x44,0x13,0x07,0x47,0xd3,0x7f,0x96,0xa3,0x90,0x4a,0xd1,0x9f,0x08,
0x67,0x0e,0xac,0x88,0x98,0x5e,0x9a,0x9d,0x20,0x31,0x1d,0xf5,0x59,0xdf,0xfe,0x81,
0xea,0x9c,0xf4,0xb5,0x1c,0xfa,0x12,0x25,0x5a,0x6a,0x9b,0x73,0x0b,0xa9,0x94,0x9e,
0x6a,0x71,0xf4,0x59,0xdf,0x3a,0x97,0xcb,0x8f,0xc9,0x1a,0x4c,0x6f,0x88,0x4c,0x33,
0xc9,0x28,0x43,0x4b,0xd7,0xc3,0xcc,0xf0,0x74,0x94,0x54,0x4f,0x72,0x7b,0x97,0x6a,
0x3e,0xcd,0xe6,0x66,0xbb,0x1c,0x96,0x0b,0x53,0x63,0x47,0xfb,0xb2,0xa6,0x69,0x47,
0xfb,0x5b,0xb6,0x66,0xfb,0x86,0x90,0xd0,0xfd,0x7d,0xbd,0x52,0xa1,0xc8,0xb1,0x94,
0x86,0x48,0xde,0xba,0x99,0xee,0xee,0xe2,0x64,0x5b,0x28,0x59,0x9d,0x51,0xfe,0x58,
0x70,0x9b,0xad,0xb6,0x4d,0xa1,0x40,0xc1,0x55,0xe3,0x17,0xa6,0xc6,0xfa,0xfb,0x4a,
0x64,0xc6,0x24,0x5d,0x4d,0xbd,0x60,0x3b,0x0b,0xc3,0xc3,0x16,0x61,0x2a,0x19,0xdd,
0xc6,0xfa,0x0d,0xfe,0xc0,0xe3,0xd4,0x88,0x53,0x95,0x55,0x9d,0x49,0x96,0x8c,0xe6,
0x81,0x73,0x54,0x0d,0x9f,0xf1,0x1b,0xdb,0xbb,0x3f,0xfe,0xf0,0x7d,0xcb,0xe9,0x84,
0xb5,0xbe,0x6d,0x2b,0x99,0x60,0x46,0xc4,0x71,0x7d,0x40,0x68,0x20,0x84,0x40,0xb3,
0x46,0x20,0x54,0xf8,0x3f,0x96,0xc0,0x66,0x1b,0x5c,0xbd,0x1b,0xb3,0x00,0x00,0x00,
0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82};
@@ -17,14 +17,13 @@ typedef struct myprivate
bool bConvert;
} PRIVATE;
int PNGDraw(PNGDRAW *pDraw)
void PNGDraw(PNGDRAW *pDraw)
{
PRIVATE *pPriv = (PRIVATE *)pDraw->pUser;
uint16_t usPixels[320];
uint16_t usPixels[240];
if (pPriv->bConvert)
png.getLineAsRGB565(pDraw, usPixels, PNG_RGB565_LITTLE_ENDIAN, 0xffffffff); // don't do alpha color blending
return 1;
} /* PNGDraw() */
void setup() {
@@ -46,13 +45,9 @@ PRIVATE priv;
priv.bConvert = false;
lTime = micros();
rc = png.decode((void *)&priv, PNG_FAST_PALETTE);
if (rc == PNG_SUCCESS) {
lTime = micros() - lTime;
sprintf(szTemp, "Decode time for native pixels = %d us\n", (int)lTime);
Serial.print(szTemp);
} else {
Serial.print("Decode error: "); Serial.println(rc, DEC);
}
lTime = micros() - lTime;
sprintf(szTemp, "Decode time for native pixels = %d us\n", (int)lTime);
Serial.print(szTemp);
priv.bConvert = true;
lTime = micros();
rc = png.decode((void *)&priv, PNG_FAST_PALETTE);
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,807 +0,0 @@
//
// octocat_32bpp
// Data size = 12735 bytes
//
// PNG, Compression=Flate, Size: 240 x 200, 32-Bpp
//
// for non-Arduino builds...
#ifndef PROGMEM
#define PROGMEM
#endif
const uint8_t octocat_32bpp[] PROGMEM = {
0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,
0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xc8,0x08,0x06,0x00,0x00,0x00,0xd6,0x7c,0x6c,
0x52,0x00,0x00,0x00,0x06,0x62,0x4b,0x47,0x44,0x00,0xff,0x00,0xff,0x00,0xff,0xa0,
0xbd,0xa7,0x93,0x00,0x00,0x20,0x00,0x49,0x44,0x41,0x54,0x78,0xda,0xed,0x9d,0x77,
0x78,0x1c,0xd5,0xb9,0xff,0x3f,0x33,0xb3,0x4d,0xab,0xb6,0x6a,0xb6,0xaa,0x67,0x6d,
0xd9,0x72,0x05,0x0c,0xd8,0x18,0xb0,0x0d,0xa6,0x07,0x08,0x25,0x09,0x10,0x12,0xd2,
0x08,0x4a,0xc2,0x25,0x9d,0x24,0xa4,0x91,0x9b,0x9b,0x5f,0xca,0x4d,0x42,0x92,0x9b,
0xe4,0x92,0x0b,0x09,0xe2,0x86,0x70,0x93,0x00,0xa1,0x27,0x10,0x6a,0x42,0x2f,0xc1,
0x80,0x01,0x03,0x96,0xe5,0xb6,0xe3,0x22,0xab,0x6b,0xd5,0x56,0xdb,0x66,0xe6,0xf7,
0xc7,0x8c,0x64,0xc9,0x96,0xad,0x5d,0xd5,0x2d,0xe7,0xfb,0x3c,0xf3,0x48,0x5a,0xed,
0x94,0x73,0xe6,0xfd,0x9e,0xf7,0x9c,0xf7,0xbc,0x05,0x04,0x04,0x04,0x04,0x04,0x04,
0x04,0x04,0x04,0x04,0x04,0x92,0x80,0x94,0xed,0x1d,0xe0,0x57,0x55,0x2f,0xe0,0xb4,
0xfb,0x42,0x97,0x24,0x29,0xba,0x2b,0x10,0x88,0x08,0xd1,0x98,0x5d,0xcc,0xf7,0xfb,
0x5d,0xa6,0x69,0xba,0x00,0x87,0xfd,0x51,0x5c,0x51,0x94,0xd0,0x8e,0x9d,0x3b,0x0d,
0xd1,0x3b,0x82,0xc0,0x43,0xe4,0x3d,0x0b,0xb8,0x17,0xc8,0x1f,0x12,0x12,0xa0,0x03,
0xd8,0x03,0xbc,0x09,0xbc,0x0c,0x3c,0x1b,0xd0,0xb4,0x6d,0x42,0x54,0xa6,0xfd,0x5d,
0x54,0x03,0x6b,0xed,0x63,0x25,0x30,0x1f,0x28,0x03,0xdc,0xf6,0x57,0x06,0x81,0xff,
0x08,0x68,0xda,0x4f,0x45,0x6f,0x09,0x02,0x0f,0x09,0xcd,0xdd,0xc0,0x25,0xe3,0x7c,
0x4d,0x07,0x76,0x01,0xf7,0x03,0x77,0x06,0x34,0xed,0x75,0x21,0x36,0x53,0xd6,0xff,
0xf3,0x81,0x0f,0xd9,0xef,0x60,0x39,0xe0,0x1a,0xe7,0x94,0x00,0xb0,0x20,0xa0,0x69,
0xa6,0xe8,0xbd,0x2c,0x27,0xb0,0x5f,0x55,0xf3,0x6d,0x6d,0xeb,0x4a,0xf2,0xd4,0x77,
0x80,0xdf,0x01,0xb7,0x07,0x34,0x2d,0x28,0x44,0x28,0xe9,0x7e,0xf7,0x00,0xef,0x03,
0xae,0x06,0x4e,0x99,0xc0,0x25,0xd6,0x06,0x34,0xed,0x45,0xd1,0x93,0x16,0xe4,0x2c,
0x6e,0xfb,0x85,0x13,0x20,0x2f,0xb6,0xa6,0xf8,0x15,0xb0,0xc7,0xaf,0xaa,0x37,0xfa,
0x55,0x75,0xa1,0x10,0xa3,0x84,0x88,0x5b,0xe6,0x57,0xd5,0xef,0x00,0x3b,0x81,0x3f,
0x4f,0x90,0xbc,0x24,0x30,0x63,0x12,0x1a,0x38,0x4b,0x04,0xea,0x2f,0xc0,0xa5,0x53,
0x70,0xa9,0x28,0x70,0x0f,0xf0,0xff,0x02,0x9a,0xb6,0x55,0x88,0xd4,0xa1,0xc4,0x05,
0xbe,0x0e,0x7c,0x7a,0x84,0xad,0x61,0x32,0xd8,0x0a,0x2c,0x0f,0x68,0x9a,0x2e,0x7a,
0x37,0x4b,0x09,0xec,0x57,0x55,0x07,0xb0,0x1f,0x28,0x9d,0xc2,0xcb,0xea,0xc0,0x1f,
0x80,0xef,0x06,0x34,0x6d,0xaf,0x20,0xae,0x5a,0x00,0x7c,0x15,0xb8,0x16,0xc8,0x9d,
0xe2,0xcb,0x2f,0x08,0x68,0xda,0x2e,0x41,0xdf,0xec,0x9d,0x42,0x1f,0x35,0xc5,0xe4,
0x05,0x50,0x80,0x4f,0x02,0x4d,0x7e,0x55,0xfd,0x81,0xbd,0xc6,0xce,0xca,0xc1,0xd1,
0xaf,0xaa,0x9f,0x01,0xb6,0x01,0xdf,0x99,0x06,0xf2,0x02,0x9c,0x2e,0xa8,0x6b,0xc1,
0x91,0xa5,0xed,0x3e,0x79,0x1a,0xaf,0x9d,0x03,0x7c,0x1b,0xf8,0x84,0x5f,0x55,0xaf,
0x0b,0x68,0xda,0x9f,0xa7,0x91,0x2c,0x25,0x40,0x89,0x3d,0x35,0xcd,0xb3,0x0f,0x8f,
0xfd,0x5e,0x1d,0xf6,0xa0,0x12,0xb3,0x67,0x07,0x31,0x60,0x00,0x08,0x01,0x7d,0x40,
0x37,0xd0,0x15,0xd0,0xb4,0xfe,0x29,0x7c,0x9e,0xf5,0xc0,0x7f,0x03,0xc7,0x4c,0xf3,
0xfb,0x3b,0x09,0xb8,0x55,0xd0,0x37,0x7b,0x09,0xbc,0x7a,0x06,0xee,0x51,0x05,0xfc,
0xc9,0xaf,0xaa,0x57,0x01,0x57,0x27,0xb3,0x97,0xec,0x57,0x55,0x09,0x6b,0xff,0xb3,
0x1a,0x58,0x0a,0x2c,0x02,0xfc,0x40,0x0d,0xa0,0xda,0x9f,0x17,0x8f,0x98,0x41,0x25,
0xbb,0x14,0x1a,0xda,0x86,0x31,0xfd,0xaa,0x1a,0x03,0x9a,0x81,0xbd,0x58,0xfb,0xdf,
0x3b,0x81,0x1d,0x40,0x13,0xb0,0x05,0xe8,0x0b,0x68,0x5a,0x3c,0x81,0x81,0xe4,0x67,
0xc0,0xc7,0x67,0x68,0x59,0x76,0x82,0xa0,0x6e,0x76,0xaf,0x81,0x5f,0x07,0x8e,0x9d,
0xc1,0x5b,0x86,0x81,0xef,0x01,0x3f,0x0f,0x68,0x5a,0x6c,0x8c,0xe7,0x29,0x05,0x96,
0xd9,0x82,0x79,0x1c,0xb0,0xc2,0x26,0xad,0x27,0x05,0xba,0x6b,0xaf,0x4d,0xe6,0xd7,
0x81,0x8d,0xf6,0xcf,0x5d,0x43,0x46,0x24,0xbf,0xaa,0x5e,0x0e,0xfc,0x1a,0xcb,0xe9,
0x62,0xa6,0xa0,0x03,0x6e,0x61,0xc8,0xca,0x42,0x02,0xfb,0x55,0x35,0xc7,0xd6,0x34,
0x25,0xb3,0x70,0xfb,0x57,0x81,0x2b,0x81,0x16,0x60,0x83,0x7d,0x9c,0x0a,0xd4,0xda,
0x53,0xef,0x74,0x80,0x89,0x65,0x00,0xfc,0x97,0x3d,0xc0,0x9c,0x3b,0x4b,0xcf,0xb1,
0x34,0xa0,0x69,0x8d,0x62,0x0a,0x9d,0x7d,0xc8,0x9b,0x25,0xf2,0x02,0xac,0x02,0x36,
0xd9,0x03,0xa7,0x92,0xc6,0x83,0x7e,0x25,0x96,0x33,0xc6,0x6c,0x62,0x01,0x20,0x08,
0x9c,0x85,0x6d,0xae,0x14,0x7d,0x9e,0x11,0xa8,0x11,0x5d,0x90,0x9d,0xdb,0x48,0x73,
0xc4,0x6b,0xcf,0x08,0x94,0x88,0x2e,0xc8,0x4e,0x02,0x17,0x8a,0xd7,0x9e,0x11,0xf0,
0x89,0x2e,0xc8,0x4e,0x02,0xbb,0xc5,0x6b,0x17,0xef,0x51,0x10,0x38,0x7d,0xa1,0x88,
0xd7,0x2e,0xde,0xa3,0x20,0x70,0xfa,0x42,0x64,0xdb,0xc8,0x0c,0x44,0x45,0x17,0x64,
0x27,0x81,0x07,0xc4,0x6b,0xcf,0x08,0xf4,0x8b,0x2e,0xc8,0x4e,0x02,0xb7,0x89,0xd7,
0x9e,0x11,0xe8,0x14,0x5d,0x90,0x9d,0x04,0x6e,0x16,0xaf,0x3d,0x23,0xb0,0x5f,0x74,
0x41,0x76,0x12,0x38,0x28,0xa6,0x5f,0x19,0x81,0x1d,0xa2,0x0b,0xb2,0x77,0x0d,0xbc,
0x5b,0xbc,0xfa,0xb4,0x47,0xa3,0xe8,0x82,0x2c,0x24,0xb0,0x9d,0xd1,0x70,0xb3,0x78,
0xf5,0x69,0x8d,0xed,0x01,0x4d,0x13,0xc6,0x48,0xb2,0x37,0x23,0x87,0xc8,0x6a,0x28,
0xde,0x9f,0x20,0x70,0x1a,0xe3,0x69,0x0e,0x04,0xb5,0x0b,0xa4,0x1f,0xfe,0x21,0xba,
0x20,0x8b,0x09,0x1c,0xd0,0xb4,0xb7,0xb0,0x62,0x82,0x05,0x04,0x04,0x81,0xd3,0x14,
0x77,0x89,0xd7,0x9f,0xb6,0xb8,0xd5,0xaf,0xaa,0xe7,0x8b,0x6e,0xc8,0x6e,0x02,0x17,
0x89,0xd7,0x9f,0xb6,0x70,0x00,0x77,0xf9,0x55,0x75,0x8d,0x20,0x70,0x16,0xc2,0xaf,
0xaa,0xd7,0x01,0xf5,0x82,0x07,0x69,0x8d,0x5c,0xe0,0x41,0xbb,0x28,0x5a,0xd6,0x22,
0x1b,0x73,0x62,0x9d,0x07,0xfc,0x2d,0xcb,0x67,0x1f,0x99,0x84,0x8d,0xc0,0xba,0x80,
0xa6,0x65,0x65,0x70,0x83,0x92,0x65,0xe4,0xf5,0x03,0x8f,0x93,0x3e,0x09,0xe4,0x04,
0xc6,0x47,0x15,0x50,0x14,0xec,0xe9,0x79,0x44,0x10,0x38,0xb3,0xc9,0xeb,0x00,0xfe,
0x0e,0x88,0x62,0x64,0x99,0x87,0x55,0x3e,0x9f,0x6f,0x63,0xb0,0xa7,0x67,0xbb,0x58,
0x03,0x67,0x2e,0xae,0x03,0xd6,0x08,0x59,0xcf,0x58,0x39,0xbe,0x39,0x1b,0xcb,0xd9,
0x64,0x85,0x06,0xf6,0xab,0xea,0x62,0xe0,0x4e,0x44,0x46,0xc8,0x4c,0x46,0x21,0xe0,
0x09,0xf6,0xf4,0x3c,0x26,0x34,0x70,0xe6,0xe1,0x46,0x44,0x0e,0xa5,0x6c,0xc0,0xe7,
0xfd,0xaa,0xba,0x44,0x10,0x38,0xb3,0xb4,0xef,0xf9,0xc0,0x99,0x42,0xb6,0xb3,0x02,
0x0e,0xe0,0xa7,0xd9,0xd4,0x60,0x29,0xc3,0xc9,0x2b,0x03,0x6f,0x60,0x95,0x13,0x15,
0xc8,0x0e,0x18,0xc0,0x89,0x01,0x4d,0xdb,0x28,0x34,0x70,0xfa,0xe3,0x22,0x41,0xde,
0xac,0x83,0x0c,0x7c,0x5d,0x68,0xe0,0xf4,0xd7,0xbe,0x12,0xf0,0x3c,0xd3,0x5b,0x0b,
0x58,0x20,0x35,0x11,0x07,0x16,0x05,0x34,0x2d,0x20,0x34,0x70,0xfa,0xe2,0x38,0x41,
0xde,0xac,0x5e,0x0b,0x67,0x85,0xab,0x6c,0x26,0x13,0x58,0xf8,0x3a,0x67,0x37,0xae,
0xb4,0x67,0x61,0x82,0xc0,0x69,0x38,0x7d,0x76,0x02,0x1f,0x12,0x32,0x9c,0xd5,0xa8,
0xc4,0xaa,0xbd,0x2c,0x08,0x9c,0x86,0x38,0x0b,0x51,0xc4,0x4c,0x00,0xde,0x2f,0x08,
0x9c,0x9e,0xb8,0x58,0xc8,0xae,0x00,0x70,0x9e,0x20,0x70,0x7a,0xe2,0x6c,0x21,0xbb,
0x02,0x80,0xdf,0xaf,0xaa,0xb5,0x82,0xc0,0xe9,0xb5,0xfe,0xad,0x05,0xaa,0x85,0xec,
0x0a,0x60,0xf9,0xfa,0x9f,0x20,0x08,0x9c,0x5e,0x38,0x1e,0x51,0x7a,0x52,0xe0,0x00,
0x4e,0x16,0x04,0x4e,0x2f,0xac,0x12,0x32,0x2b,0x30,0x02,0xc7,0x08,0x02,0xa7,0x17,
0x56,0x08,0x99,0x15,0x18,0x81,0x5a,0xbf,0xaa,0xba,0x32,0xb5,0x71,0x19,0x15,0x1f,
0x6b,0x07,0x2f,0xa4,0x9c,0xd1,0x22,0x1a,0xd7,0x09,0xc5,0x74,0x62,0x86,0x89,0x53,
0x91,0x29,0xcc,0x71,0xe3,0x71,0x3a,0x88,0xc6,0xe3,0x74,0x87,0x22,0xc4,0x74,0x03,
0x09,0x70,0xc8,0x12,0x4e,0x59,0xc2,0xe5,0x50,0x70,0x28,0xf2,0xac,0xfb,0xb9,0x9a,
0x40,0x5c,0x37,0x88,0xc4,0x75,0xa2,0xba,0x81,0x6e,0x82,0x2c,0x4b,0x94,0x78,0x3d,
0x14,0xe6,0x7a,0xf0,0xb8,0x9c,0x98,0xa6,0x49,0xdf,0x60,0x84,0xfd,0xc1,0x7e,0xe2,
0xba,0x81,0xc7,0x21,0xe3,0x75,0x39,0x90,0xa5,0x94,0xf1,0xa1,0xa8,0x00,0xbc,0x64,
0x68,0x41,0xf0,0x4c,0x0b,0x70,0xf7,0x00,0x73,0x66,0x53,0xe0,0x9d,0x8a,0x8c,0x7f,
0x6e,0x09,0x6b,0x96,0x2e,0xa0,0xa2,0xb4,0x88,0xa2,0x7c,0x2f,0x79,0xde,0x1c,0x0a,
0x72,0xbd,0x38,0x14,0x19,0xcc,0x31,0x0a,0x42,0xd8,0xc2,0x1e,0xd7,0x0d,0x22,0xb1,
0x18,0xa1,0xc1,0x08,0x83,0x91,0x28,0xa6,0x69,0x12,0x8d,0xc7,0xe9,0x0b,0x85,0xe9,
0x1d,0x08,0x11,0x8f,0xeb,0xc4,0x74,0x83,0xe0,0x40,0x88,0xd6,0xae,0x5e,0x5a,0x3b,
0x83,0x0c,0x46,0xa3,0x98,0x26,0x18,0xa6,0x89,0x6e,0x98,0xe8,0x86,0x31,0xfc,0xf7,
0xd0,0xa5,0x65,0x49,0x42,0x96,0x24,0x1c,0x8a,0x8c,0x2c,0x49,0x48,0x12,0xb8,0x1c,
0x4e,0xca,0x4b,0x0a,0x99,0x5b,0x5c,0x48,0x51,0x9e,0xd7,0x1e,0x34,0x14,0x0a,0xf2,
0xbc,0xe4,0x7b,0x3d,0xb8,0x1c,0x16,0x09,0x73,0x3c,0x6e,0x72,0x73,0xdc,0xb8,0x9d,
0x4e,0x64,0x59,0x1a,0xfb,0xf9,0x47,0xb4,0x63,0x30,0x12,0xa3,0xbb,0xb7,0x8f,0x50,
0x24,0xca,0xbe,0xb6,0x4e,0x1a,0xf7,0xb4,0xb0,0x69,0xdb,0x6e,0xfa,0x07,0x23,0x48,
0xb3,0x43,0x6a,0xc9,0x26,0x71,0x30,0x13,0x09,0x9c,0x51,0xae,0x66,0x7e,0x55,0x2d,
0x66,0x16,0x0a,0x3f,0x47,0xe3,0x3a,0x6b,0x97,0x2d,0xe0,0x94,0x95,0x4b,0x58,0x50,
0x39,0x87,0xa2,0xfc,0xdc,0x61,0x02,0x01,0x98,0xc3,0x64,0x1a,0xdd,0xdd,0xe6,0x41,
0x64,0x48,0x54,0xc0,0x25,0x9b,0x2c,0x92,0x7d,0x8e,0x09,0xe8,0x86,0x41,0x4c,0xd7,
0xd1,0x75,0x03,0xd3,0x26,0x33,0x98,0xc8,0x92,0x8c,0x2c,0x4b,0x28,0xb2,0x8c,0x43,
0x51,0x50,0x14,0x19,0xd9,0xbe,0xb7,0x69,0x0f,0x3b,0x66,0x82,0x45,0x66,0x46,0x3e,
0xaf,0x24,0x49,0x63,0xb6,0xe7,0xe0,0xb6,0x4a,0x92,0x44,0x38,0x1a,0x63,0x77,0x6b,
0x07,0xaf,0x6e,0xd9,0xc9,0xc3,0xff,0x7a,0x9b,0x59,0xa8,0x6a,0x73,0x66,0x40,0xd3,
0x32,0xb2,0x1c,0x4b,0xa6,0x69,0xe0,0x19,0xf5,0xbe,0x32,0x0c,0x93,0x75,0x47,0xd5,
0x72,0xe1,0xba,0xe3,0xa9,0x2a,0x2d,0x1e,0x52,0xa4,0xb8,0x3d,0x6e,0xbc,0xde,0x1c,
0x72,0x3c,0x1e,0x5c,0x2e,0x27,0x4e,0xa7,0x13,0x45,0x51,0x90,0x64,0x69,0xd4,0x88,
0x69,0x9a,0x60,0x9a,0x06,0xba,0x61,0xa0,0xeb,0x06,0xba,0xae,0xa3,0xeb,0x3a,0xf1,
0xb8,0x4e,0x3c,0x1e,0xb7,0x0f,0xeb,0xf7,0x58,0x2c,0x8e,0x1e,0x8f,0x5b,0x1a,0xd6,
0x26,0xb1,0x39,0x74,0x11,0xfb,0x6f,0x97,0xa2,0x80,0x72,0x64,0x03,0xbc,0x69,0x18,
0xe8,0x63,0x90,0x52,0x96,0x65,0x1c,0x0e,0x07,0x0e,0x87,0x03,0xa7,0xd3,0x81,0xc3,
0xa1,0x0c,0xff,0xed,0xb0,0xb5,0xb3,0x32,0x7c,0xc8,0x36,0x41,0xa5,0x03,0x23,0x8a,
0x09,0x26,0x26,0x86,0x61,0x10,0x8f,0xc5,0x89,0x46,0x63,0x84,0x23,0x11,0x42,0xa1,
0x41,0xa4,0x81,0x10,0x8b,0xaa,0xcb,0xa9,0xab,0xa9,0xe0,0x3d,0x27,0x1e,0xc3,0xb3,
0x6f,0x6c,0xe1,0x8e,0xa7,0x5e,0xc5,0x21,0xcf,0x98,0xfe,0x28,0x15,0x6b,0xe0,0xf4,
0x80,0x6f,0xc6,0x46,0x0a,0xaf,0x87,0xab,0x2f,0x3e,0x9d,0x15,0xf3,0xab,0x91,0x24,
0x89,0xbc,0xbc,0x5c,0x8a,0x8b,0x8b,0x28,0xc8,0xcf,0xc3,0xe1,0x98,0x9e,0x5d,0xac,
0x21,0x0d,0x17,0x8f,0xeb,0xc3,0x64,0xd7,0x75,0x03,0xdd,0xd0,0x31,0x0c,0x03,0x43,
0x37,0x2c,0xcd,0x3f,0x42,0xbb,0x4a,0x48,0x96,0xb6,0x96,0x2c,0x2d,0x2c,0x2b,0x32,
0xb2,0x2c,0x0f,0x13,0xd1,0xa1,0x58,0x44,0x1d,0x4b,0xa3,0x4e,0x14,0x6e,0x97,0x8b,
0xdc,0xdc,0xd1,0xcf,0xdd,0x3f,0x10,0xa2,0xbb,0xdb,0x9a,0xc5,0x5e,0xb4,0x7e,0x15,
0xc7,0x2f,0x59,0xc0,0xef,0x1f,0x7e,0x86,0xad,0x7b,0xdb,0x32,0x6e,0x60,0x17,0x04,
0x9e,0xdc,0x1a,0x78,0xda,0xb1,0xb4,0x66,0x2e,0xff,0xf6,0xbe,0x33,0x29,0x2e,0xc8,
0xa3,0xb0,0xb0,0x80,0xf2,0xb9,0x65,0xe4,0xe4,0x4c,0xff,0xad,0x87,0x48,0xe6,0x72,
0xc9,0x80,0x33,0x7d,0xd6,0x69,0x92,0x44,0x7e,0x5e,0x2e,0xf9,0x79,0xb9,0x54,0x54,
0xcc,0xa5,0xad,0xad,0x03,0x49,0x92,0xf8,0xda,0x87,0xdf,0xcb,0x9d,0x4f,0xbe,0xc8,
0x13,0xaf,0x6d,0x99,0xee,0xf5,0xb1,0xb0,0x42,0x8b,0xf6,0x58,0x58,0xb3,0xc4,0xcf,
0x55,0x17,0x9c,0x46,0x41,0xae,0x97,0x79,0x35,0x95,0x14,0x14,0x64,0x5d,0x26,0xd3,
0x49,0xc1,0xe9,0x70,0x50,0x55,0x59,0x4e,0x49,0x71,0x11,0xda,0xee,0xbd,0x7c,0xf4,
0x3d,0xeb,0x29,0xf0,0xe6,0x70,0xdf,0xf3,0x9b,0x04,0x81,0x05,0x81,0xa7,0xd7,0x3a,
0xb2,0x6a,0xd1,0x3c,0x3e,0x75,0xe1,0xe9,0x14,0x15,0xe6,0xb3,0x60,0xbe,0x8a,0xd3,
0x29,0xb2,0xd4,0x4e,0x78,0xaa,0xe4,0x71,0xb3,0x68,0xe1,0x7c,0x76,0xef,0x69,0xe6,
0x7d,0xa7,0xae,0xc6,0x04,0xee,0x9f,0x3e,0x12,0xeb,0x82,0xc0,0xe9,0x81,0xd8,0x74,
0x5d,0x78,0x7e,0x79,0x09,0xf5,0x17,0x9e,0x46,0x49,0x91,0x8f,0x05,0xf3,0x6b,0x50,
0x14,0xe1,0xad,0x39,0x59,0xc8,0xb2,0x8c,0x3a,0xaf,0x1a,0x45,0x91,0xb9,0x68,0xfd,
0x2a,0x82,0xfd,0x03,0x3c,0xf5,0x46,0x93,0xe8,0x98,0x2c,0x26,0x70,0x7c,0x5a,0x2c,
0x20,0xb9,0x1e,0xbe,0x78,0xe9,0x39,0xcc,0x2d,0x29,0x66,0xc1,0xfc,0x79,0x28,0xca,
0x04,0x1c,0xd8,0x24,0x09,0xc9,0x65,0x95,0x64,0x32,0x23,0x83,0xcc,0xc2,0x56,0xca,
0xf4,0x4e,0x7c,0x24,0x19,0xc9,0x69,0xb7,0x2f,0x1a,0x4a,0xa6,0x5b,0xa8,0xa9,0xae,
0x04,0xe0,0xc3,0x67,0xad,0xa3,0xad,0xbb,0x8f,0x77,0xb4,0xfd,0x69,0x21,0x17,0x82,
0xc0,0x53,0x8f,0xd0,0x54,0x5f,0xd0,0x30,0x4d,0xfe,0xed,0xa2,0x33,0xa8,0x9a,0x53,
0xca,0xfc,0x09,0x90,0x57,0x29,0x98,0x83,0xb3,0xbc,0x16,0x25,0xbf,0x18,0x24,0xeb,
0x5c,0xd3,0x34,0x30,0xfa,0x3a,0x89,0xb5,0xec,0x40,0xef,0x6d,0x4f,0xeb,0x0e,0x57,
0x0a,0xe7,0xe2,0x9c,0xbb,0x60,0x54,0xfb,0x30,0x0d,0xf4,0xde,0x4e,0x62,0xad,0x89,
0xb7,0xaf,0xba,0xaa,0x82,0x78,0x3c,0xce,0x55,0x17,0x6c,0xe0,0xab,0xff,0x73,0x17,
0x86,0x61,0x08,0x02,0x27,0xd2,0xff,0x99,0xd4,0x18,0x9f,0xcf,0xe7,0x01,0xae,0x9d,
0xca,0x6b,0x5e,0xbc,0x76,0x25,0x67,0xae,0x3e,0x8a,0x85,0xb5,0x7e,0x5c,0xae,0xc4,
0x2d,0xbf,0x92,0xe2,0xc4,0x5d,0xbb,0x0a,0x57,0xf5,0x12,0x64,0x4f,0xae,0x25,0xdc,
0xd2,0xd0,0x96,0x8e,0x8c,0xec,0xc9,0xc5,0x51,0x5a,0x83,0x9c,0x53,0x80,0xd1,0xdb,
0x0e,0xa6,0x91,0x56,0x7d,0x7d,0xa4,0xf6,0x31,0xaa,0x7d,0xf9,0xe8,0xbd,0x6d,0xe3,
0xb6,0x4f,0x92,0x24,0x0a,0x0a,0xf2,0xd1,0xa3,0x51,0x2a,0x8a,0xf2,0x79,0xe1,0xed,
0x1d,0x53,0xe9,0x8e,0x79,0x77,0xb0,0xa7,0xe7,0xcd,0x8c,0x5c,0x86,0x08,0x0d,0x7c,
0x84,0x01,0x21,0x37,0x87,0xf3,0x4e,0x3e,0x96,0x9a,0xea,0x4a,0xdc,0xee,0xc4,0x0d,
0x99,0x92,0xc3,0x8d,0x67,0xe9,0x3a,0x1c,0x45,0xe5,0xe3,0x4f,0x81,0x8a,0x2b,0xf0,
0x2c,0x59,0x8b,0xe4,0x48,0x1f,0x43,0xa9,0xe4,0x4c,0xa6,0x7d,0x95,0xe4,0x2c,0x59,
0x97,0x50,0xfb,0x14,0x59,0xc6,0xef,0xaf,0xe1,0xf8,0x25,0x0b,0x38,0x69,0xd9,0xfc,
0xa9,0x7c,0xe4,0x48,0xc6,0xda,0x11,0x32,0x70,0x0d,0x3c,0x65,0x2f,0xeb,0x63,0xe7,
0xac,0xa5,0xba,0x62,0x0e,0x3e,0x5f,0x41,0x12,0xd2,0x2d,0xe3,0xa9,0x5b,0x83,0x9c,
0x93,0xf8,0xf6,0x92,0xec,0x2d,0xc0,0xb3,0xe8,0xc4,0x61,0x9f,0xe8,0xd4,0x66,0xaf,
0x8c,0x67,0xd1,0x89,0x49,0xb7,0xcf,0xbd,0x68,0xcd,0x81,0x29,0xf6,0x11,0xe0,0x71,
0xbb,0xa9,0xa9,0xaa,0xe0,0xe2,0xf5,0xab,0x46,0xb9,0xa3,0x4e,0x12,0xfd,0x82,0xc0,
0xe9,0x81,0x28,0xd0,0x3b,0x15,0x17,0xaa,0x2a,0x29,0x64,0xd5,0xd2,0x5a,0xaa,0x2a,
0xcb,0x93,0x3a,0xcf,0x55,0xbd,0x0c,0x39,0xf7,0xf0,0x0e,0x61,0xa6,0x69,0x8c,0x19,
0x10,0x20,0xe7,0xf9,0x70,0x55,0x2f,0x4f,0xf9,0x0e,0x76,0xcd,0x5b,0x81,0x9c,0x7b,
0xa8,0x63,0x93,0x69,0x18,0x47,0x0c,0x74,0x50,0xf2,0x8a,0x70,0x56,0x25,0x56,0x77,
0xac,0xa4,0xa4,0x88,0xa5,0x0b,0x6a,0x38,0xe3,0xd8,0x29,0xab,0x53,0xd6,0x9b,0xa9,
0x04,0x76,0x64,0x20,0x81,0x83,0x40,0xd9,0x64,0x2f,0x74,0xe1,0xda,0x63,0xa9,0xa9,
0x2a,0xc7,0xe1,0x48,0xbc,0x8b,0xe4,0x9c,0x02,0x9c,0x73,0xc7,0x9e,0xfa,0x75,0x06,
0x76,0xb2,0xf3,0xb9,0x67,0xe8,0xde,0xd1,0x84,0x24,0xc9,0x14,0x2f,0x5e,0x4a,0xed,
0x29,0xa7,0xe1,0xab,0xac,0x1a,0xfe,0x8e,0x73,0xae,0x9f,0x78,0xc7,0x6e,0x8c,0xc1,
0xd4,0x94,0x37,0xd9,0xeb,0xc3,0x59,0xa6,0x8e,0xfa,0xac,0x7d,0xe7,0x76,0x76,0x3d,
0xf7,0x34,0xc1,0x9d,0xdb,0x91,0x14,0x85,0xd2,0x25,0xcb,0xa9,0x3d,0xe5,0x34,0x0a,
0xca,0x2b,0x0e,0x25,0x7f,0xf9,0x02,0xf4,0x8e,0xdd,0x18,0xe1,0xfe,0x71,0xd7,0xc3,
0x15,0xe5,0x73,0x38,0xfd,0xf8,0xe5,0x3c,0xf5,0xc6,0xd6,0xa9,0x78,0xf4,0x9e,0x4c,
0x25,0x70,0x46,0x19,0xb1,0x82,0x3d,0x3d,0xa6,0xcf,0xe7,0xbb,0x1c,0xa8,0x99,0xd4,
0xa8,0xa6,0x28,0x5c,0x75,0xc1,0x69,0xd4,0x2d,0xf4,0x27,0xe1,0xe2,0x67,0xe2,0xf2,
0x1f,0x8b,0x9c,0x93,0x77,0x88,0x66,0x7a,0xe7,0xe1,0xbf,0xf2,0xda,0x8d,0x3f,0xa3,
0x67,0xc7,0x56,0xa2,0xdd,0x9d,0x44,0xba,0x3a,0x08,0x6e,0xdb,0x42,0xe0,0xa9,0xc7,
0x51,0x0a,0x8b,0x29,0x99,0xbf,0x60,0x48,0x72,0x91,0x1c,0x6e,0xf4,0xee,0xe6,0x94,
0xec,0x5f,0xb7,0xff,0x98,0xe1,0xf6,0x99,0x86,0xce,0x5b,0x0f,0xdc,0xcb,0xa6,0x9b,
0x7f,0x49,0xef,0xce,0x6d,0xc3,0xed,0xea,0x6e,0x7a,0x97,0x5d,0xff,0x7c,0x1c,0x57,
0xe9,0x1c,0x8a,0xe7,0xf9,0x0f,0x66,0x26,0x92,0xd3,0x8d,0xde,0xbd,0x8f,0xf1,0x02,
0xe1,0x5c,0x2e,0x17,0x4e,0x09,0x5e,0x78,0xb3,0x91,0xde,0x50,0x78,0xb2,0x8f,0xfe,
0xa3,0x60,0x4f,0x4f,0x46,0x6a,0xe1,0x4c,0xcc,0xc8,0xb1,0x7b,0xb2,0x17,0x58,0xbd,
0x58,0x65,0xa1,0x5a,0x85,0x2c,0x27,0xde,0x3d,0x92,0x2b,0x17,0x87,0xef,0x50,0xc5,
0xbf,0xe5,0xf1,0x47,0xd8,0x7a,0xe7,0x6d,0x63,0x4e,0x2f,0x4d,0x5d,0x67,0xf3,0xad,
0xbf,0x61,0xc7,0x0b,0xcf,0x1e,0x18,0x3c,0x8a,0xe6,0x22,0x39,0x3d,0x29,0xd7,0xa9,
0x92,0xcb,0x8b,0x52,0x78,0x20,0xd4,0xfa,0xed,0x87,0xfe,0xca,0xf6,0x7b,0xff,0x7c,
0x98,0x76,0xc5,0x79,0xe3,0xb7,0xbf,0x22,0xf0,0xca,0x4b,0x87,0x0e,0x8e,0xbe,0xf2,
0xe1,0xfd,0xe2,0xf1,0x50,0x56,0x56,0xc2,0xd9,0xab,0x27,0x9d,0x60,0xc5,0x10,0x6b,
0xe0,0xf4,0xc2,0xae,0xc9,0x5e,0xe0,0xf8,0xc5,0x7e,0x7c,0xbe,0xe4,0x02,0x58,0x1c,
0x25,0x55,0x87,0x18,0x69,0x3a,0x03,0x3b,0x69,0xfc,0xd3,0xad,0x54,0x6d,0x38,0x87,
0xaa,0x0d,0x67,0x23,0x8d,0x35,0x20,0x48,0x12,0x6f,0xde,0x72,0x23,0xbd,0xad,0x2d,
0xc3,0x46,0x22,0x47,0x49,0xea,0x25,0xd5,0x74,0x94,0x54,0x0f,0x1b,0xd9,0xda,0xb6,
0x35,0xd1,0x74,0xd7,0x6d,0x98,0xa6,0x41,0xbe,0xbf,0x16,0x67,0x6e,0xde,0x98,0xe7,
0x6c,0xfa,0xed,0xaf,0x19,0xe8,0xec,0x38,0x48,0xe2,0x64,0x1c,0xc5,0x55,0x09,0xdd,
0xb3,0x20,0x3f,0x8f,0xc5,0xfe,0x2a,0xe2,0xfa,0xa4,0xb6,0xd8,0x7a,0xc8,0xd0,0x6c,
0x1c,0x99,0x4a,0xe0,0x6d,0x93,0xbd,0xc0,0x22,0xb5,0x2a,0xa9,0x6d,0x23,0x30,0x51,
0x0a,0xe7,0x1e,0xf2,0xe9,0xe6,0xbb,0xef,0x60,0xf5,0xb5,0xdf,0xe6,0xc4,0xfa,0xab,
0x39,0xf1,0xaa,0xab,0x59,0xfd,0xe5,0x6f,0x1d,0x56,0x63,0xbd,0xfb,0xd0,0x03,0x07,
0xd6,0x35,0x63,0x5c,0x6b,0xd6,0xd7,0x5a,0xbe,0x03,0xcf,0xb4,0xf9,0xae,0xff,0xc3,
0x04,0x56,0x7f,0xf9,0xdb,0x9c,0xf5,0xbd,0x9f,0xf0,0x9e,0x5f,0xdc,0x8c,0x6f,0xc9,
0xa1,0x55,0x5c,0x8d,0x68,0x84,0x2d,0x8f,0x3e,0x74,0x98,0x6b,0x8d,0x6f,0x61,0x96,
0x24,0x89,0x25,0x0b,0xe6,0x11,0x8a,0x4f,0xca,0x95,0xb9,0x0b,0xb1,0x8d,0x94,0x56,
0xd8,0x32,0x99,0x93,0xe3,0x86,0x81,0xbf,0xba,0x22,0xc9,0x5e,0x74,0x22,0x7b,0x47,
0x6f,0xab,0x04,0xf7,0xed,0x25,0xd8,0xf4,0x0e,0x73,0xeb,0x16,0x0f,0x7f,0x56,0x5e,
0xb7,0x18,0x87,0x37,0x77,0xcc,0x4b,0xec,0x7b,0xea,0x31,0x06,0x83,0xdd,0x96,0x80,
0xe7,0xf9,0x52,0xab,0x47,0x25,0x09,0xc5,0xb6,0x3c,0x77,0x06,0x76,0x11,0x6c,0x7c,
0x1b,0x87,0x27,0x87,0xea,0xa3,0x57,0x22,0xc9,0x32,0x2e,0xaf,0x97,0x79,0xeb,0x36,
0x8c,0x79,0xaa,0xf6,0xe8,0x5f,0x89,0xf4,0xf5,0x8d,0xee,0x2e,0x6f,0x01,0xc8,0x89,
0x19,0x07,0x8b,0x7d,0x05,0xac,0x5d,0xa2,0x4e,0xe6,0xe9,0x5b,0x02,0x9a,0xa6,0x0b,
0x02,0xa7,0x0f,0x76,0x02,0x13,0xb6,0x7a,0xe8,0x86,0x49,0x59,0x51,0x72,0x04,0x92,
0x5d,0x39,0x48,0xca,0x68,0x2f,0xad,0x96,0x2d,0xef,0xa0,0x87,0xc3,0x0c,0x74,0x75,
0x0d,0x7f,0xd6,0xdf,0xd5,0x45,0x3c,0x3c,0x78,0x58,0x92,0xb4,0x34,0xda,0x63,0x8f,
0xac,0x20,0x7b,0x52,0x27,0x4c,0x51,0xce,0x29,0x1c,0x5e,0x1e,0xec,0x7f,0x77,0x33,
0x48,0x12,0xf1,0xc1,0x41,0x7a,0xdb,0x5a,0x0f,0x2c,0x17,0xb6,0x1f,0x3e,0x08,0xa1,
0x75,0xdb,0x68,0x4b,0xb2,0xe4,0x70,0x25,0xbc,0xce,0xcf,0xcb,0xf5,0x52,0x9c,0xe7,
0x9d,0x55,0x9b,0x48,0x2a,0x23,0xe3,0xe2,0xe1,0x02,0x9a,0xd6,0xe6,0x57,0xd5,0x56,
0x60,0x42,0xc3,0x76,0x81,0xd7,0x93,0xe4,0xf4,0x19,0xa4,0x31,0x9c,0x1a,0xda,0x36,
0xbf,0x01,0xc0,0x4b,0xbf,0xbe,0x81,0x25,0xef,0xfb,0x20,0x00,0x8d,0xf7,0xff,0xe5,
0x88,0x7b,0xa5,0x9d,0xdb,0x9b,0x98,0x7f,0xe2,0xc9,0x07,0xae,0x19,0xee,0x4b,0x11,
0x02,0x1f,0x68,0x5f,0xdb,0x1b,0xaf,0x5b,0xcf,0xa7,0x28,0x3c,0xf7,0xa3,0x7f,0x47,
0x3d,0xeb,0x7c,0x7a,0xf7,0xee,0xa6,0xed,0x95,0xe7,0x0f,0xdf,0xae,0x9d,0x3b,0x98,
0x77,0xdc,0xe8,0x74,0xdd,0xb2,0x27,0x0f,0x3d,0x32,0x30,0xfe,0xd4,0x5d,0x51,0x28,
0x4e,0xc6,0x91,0x66,0xec,0x01,0x5d,0x10,0x38,0xcd,0xf0,0xaf,0xc9,0x10,0x38,0xd9,
0x38,0xdf,0xa1,0x28,0xa3,0x91,0xe8,0xdb,0xbb,0x07,0x80,0xc1,0x96,0x7d,0x6c,0xba,
0xe9,0x17,0x09,0x5d,0x27,0xb8,0xe3,0x80,0x16,0x4b,0x25,0x4b,0xf4,0x90,0x1b,0xa4,
0xa9,0xeb,0x0c,0xb4,0x1e,0xd8,0xe2,0x8a,0xf5,0xf5,0xb0,0xfd,0xbe,0x3f,0x8f,0x6f,
0x45,0xda,0xd1,0x94,0x50,0x9f,0x1d,0x6e,0x1d,0x5c,0x90,0x9f,0x37,0x99,0xc7,0xdf,
0x9a,0xc9,0x04,0xce,0xd4,0xe2,0x66,0x2f,0x4e,0xf4,0xc4,0xde,0x81,0x70,0xd2,0xb1,
0xbe,0x92,0x3c,0xfa,0xfb,0x7a,0x24,0x82,0x3e,0x38,0x90,0xf4,0xbd,0x23,0xfd,0x7d,
0x23,0xae,0x99,0x42,0xaf,0xc6,0x5e,0xaf,0xc6,0x23,0x61,0x8c,0xc1,0xe4,0xdd,0xcd,
0xc3,0x3d,0xc1,0x31,0xfa,0xcc,0x91,0x30,0x81,0xcd,0xc9,0x85,0x5e,0xbe,0x2b,0x08,
0x9c,0x7e,0x78,0x7a,0xa2,0x27,0xf6,0x84,0xc2,0x30,0x49,0x1f,0x5c,0xd3,0x34,0x27,
0x16,0x5d,0x64,0xa4,0x6a,0x8c,0xb0,0x39,0xdc,0x2e,0x73,0x02,0x7d,0x63,0x4e,0x32,
0x34,0x30,0x36,0x71,0x2b,0x74,0x08,0xd8,0x21,0x08,0x9c,0x7e,0xeb,0xe0,0x37,0x81,
0x8e,0x89,0x0a,0x6b,0x28,0x92,0xdc,0xb6,0xa1,0xa9,0x8f,0x0e,0x37,0x55,0x5c,0x2e,
0x24,0x77,0xf2,0x53,0x60,0x47,0x4e,0xce,0x08,0xa1,0x4f,0x21,0xc3,0xa9,0xfd,0x2c,
0x8a,0xd3,0x85,0xec,0x72,0x27,0x7d,0xba,0x2b,0x37,0x77,0x0c,0x52,0x27,0x16,0xa2,
0x6b,0x9a,0x26,0xe1,0xc8,0x84,0xb7,0x71,0xf7,0x04,0x34,0x2d,0x28,0x08,0x9c,0x9e,
0x78,0x64,0x22,0x27,0x39,0x15,0x99,0xbe,0x81,0xe4,0xa6,0x89,0x66,0x74,0xf0,0xa0,
0xe9,0xa1,0x8c,0xb7,0x24,0xf9,0x02,0x11,0xf9,0x55,0x07,0x3c,0x40,0xcd,0x58,0xea,
0x6c,0x5d,0x0e,0x3d,0x8b,0xe2,0x72,0xe1,0x2e,0x2a,0x49,0xbe,0x5d,0x35,0xfe,0x43,
0xaf,0x19,0x49,0xac,0x8f,0x75,0xc3,0xa0,0xa5,0x73,0xc2,0x1c,0x7c,0x91,0x0c,0x47,
0x26,0x13,0xf8,0x81,0x09,0x75,0x88,0x24,0x33,0x30,0x98,0x1c,0x79,0xcc,0x31,0xac,
0xc5,0xa5,0x2b,0x92,0x2f,0x8a,0x57,0x52,0xb7,0xf4,0xc0,0x35,0x53,0x28,0xa0,0x61,
0x64,0x70,0xc5,0x44,0xda,0x55,0xbc,0x60,0xe1,0xa1,0xd7,0x0c,0x27,0xe6,0xdd,0xa8,
0xeb,0x06,0x3b,0xf6,0x4d,0x38,0x77,0xf4,0x73,0x99,0x4e,0xe0,0x59,0xb7,0x42,0xfb,
0x55,0x55,0xb1,0x9f,0x43,0xb1,0x07,0x14,0x05,0x2b,0x0d,0x68,0x0e,0x56,0x51,0x2a,
0x97,0x7d,0x38,0xed,0xff,0x1f,0xfc,0xcc,0x06,0x56,0xd6,0xc1,0x18,0x96,0xc7,0x4d,
0x04,0x6b,0x1f,0x78,0xb3,0xbd,0x06,0x4a,0x6a,0x13,0x51,0x92,0xa0,0x33,0xd8,0xcb,
0xfc,0xaa,0xc4,0xbd,0xa1,0x8c,0xe8,0x20,0x66,0x3c,0x86,0xe4,0x38,0xb0,0x17,0x3c,
0x77,0xe9,0x32,0xb6,0x27,0xb7,0x70,0x66,0x8e,0xed,0xf4,0x61,0x1a,0xf1,0x84,0x05,
0x7c,0x46,0x08,0x1c,0xee,0x03,0xc3,0x00,0x59,0xa6,0x7c,0xf9,0x51,0x04,0x1e,0xbe,
0x6f,0x42,0xed,0x1a,0xa9,0xd1,0xcd,0x78,0x62,0x83,0xa4,0x6e,0x18,0xbc,0xb2,0x63,
0x3f,0xfe,0xe2,0xdc,0x89,0x3c,0xfa,0x6b,0x7e,0x55,0x2d,0xb1,0x65,0x29,0x07,0x2b,
0x6f,0xb8,0xdb,0x96,0xa1,0x21,0x99,0x3b,0x64,0xc9,0x6d,0x1f,0xf1,0x11,0xb2,0x14,
0x06,0x06,0x6d,0x39,0x1b,0x3a,0xe2,0x80,0x1e,0xd0,0x34,0x33,0xe3,0x08,0xec,0x57,
0x55,0x07,0x50,0x6c,0x1f,0xe5,0x07,0x1d,0x65,0x58,0x05,0xc8,0x4a,0x46,0x90,0x52,
0x1a,0x71,0x30,0xa2,0xc3,0x06,0xed,0x4e,0x8c,0x8e,0xe8,0xd4,0x83,0x2d,0x22,0x92,
0x7d,0x1d,0x87,0x4d,0x74,0xcf,0x88,0xa3,0x2b,0x59,0x02,0x03,0x34,0xb7,0x77,0x02,
0x8b,0x92,0x90,0xf0,0x38,0xc6,0x60,0x2f,0x4a,0xfe,0x81,0xe9,0xe5,0x9c,0x85,0x75,
0x78,0x4a,0xe7,0x12,0xee,0x68,0x4d,0xe8,0x12,0x05,0x8b,0x96,0x52,0x54,0x6d,0x4d,
0xa1,0x8d,0xfe,0x14,0x5b,0xb6,0x99,0x26,0xfa,0x40,0x10,0x25,0xbf,0x98,0xf2,0xc5,
0x4b,0x71,0x16,0xf8,0x88,0xf5,0x26,0xf6,0x8c,0xc5,0x47,0x1d,0x7b,0x48,0x68,0xa1,
0x11,0xea,0x05,0x23,0x4e,0x22,0xa5,0xb9,0x3a,0xba,0x7b,0x29,0xf4,0x4c,0x28,0x68,
0xae,0x0f,0xb8,0xdd,0x96,0x9b,0x41,0x7b,0x30,0x0f,0xdb,0xb2,0x14,0x1d,0x41,0xc4,
0x43,0x56,0x51,0xb6,0x2c,0x39,0x0f,0x92,0x25,0xaf,0x4d,0x78,0xd3,0x3e,0x0c,0xc0,
0xf4,0xab,0xaa,0x81,0x15,0xc2,0xda,0x01,0xb4,0x03,0x2d,0x40,0xab,0xfd,0x73,0xbf,
0xfd,0x79,0x57,0x40,0xd3,0x06,0x52,0x8a,0xc0,0x76,0xcd,0xd5,0x85,0x40,0x9d,0xfd,
0x73,0x3e,0x56,0x69,0xcf,0x5a,0xbb,0x81,0x9d,0x36,0x81,0x5a,0x46,0x1c,0xaf,0xda,
0x8d,0xec,0xb0,0xff,0x17,0x1e,0x39,0xe2,0x4d,0xb5,0xcb,0x9b,0x5f,0x55,0x37,0x00,
0x4f,0x25,0x7b,0xde,0xa6,0xc6,0x9d,0x5c,0x7c,0xda,0x49,0x49,0x64,0x84,0x90,0x88,
0x77,0xb7,0x8e,0x22,0xb0,0xec,0x70,0xb0,0xfc,0xf2,0x8f,0xf2,0xda,0x7f,0xdf,0x30,
0x6e,0xa6,0x0d,0xd3,0xd0,0x59,0x71,0xe9,0x87,0x0f,0x54,0x29,0x0c,0xb6,0xa4,0xdc,
0x54,0x4d,0x0f,0xb6,0xa2,0xe4,0x17,0xa3,0xb8,0x5c,0x2c,0xbb,0xfc,0x63,0xbc,0xf9,
0xdb,0x5f,0x8d,0xdf,0x2e,0x5d,0x67,0xf9,0xfb,0x3f,0x78,0xc8,0xe7,0x56,0xfb,0x12,
0x0b,0xd3,0xec,0xec,0xe9,0xa5,0x30,0xc7,0x3d,0x91,0x47,0xfe,0x4d,0x40,0xd3,0xbe,
0x39,0x0d,0xca,0x49,0x3a,0x88,0xe4,0x2e,0xa0,0x00,0xab,0xfe,0x52,0x99,0xad,0xa4,
0x2a,0x80,0x95,0x40,0x95,0xad,0xa8,0x8a,0xfd,0xaa,0x5a,0x08,0xec,0xc3,0xb2,0x8a,
0xef,0x04,0xb6,0xdb,0xc7,0xb6,0x80,0xa6,0x75,0x4c,0x0b,0x81,0x17,0xd6,0xd6,0x4a,
0xf1,0x78,0xdc,0x03,0x54,0x03,0xc7,0x03,0x47,0x03,0xcb,0x6c,0xc2,0xe6,0x62,0x6d,
0x92,0x6f,0xc5,0x0a,0x20,0x78,0x18,0x2b,0x12,0x28,0x10,0xd0,0xb4,0xc1,0x54,0x10,
0xba,0x80,0xa6,0x3d,0xed,0x57,0xd5,0x46,0x20,0xa9,0xd4,0x0e,0xaf,0xbe,0xbb,0x9d,
0x70,0x34,0x86,0x2b,0x09,0x87,0x0e,0xbd,0x6b,0x2f,0x54,0x2f,0x81,0x11,0xfb,0xb7,
0xea,0xea,0x35,0xec,0x5e,0xbd,0x96,0xf6,0x57,0x8f,0x6c,0x4b,0x99,0x77,0xd6,0x05,
0x94,0x2f,0xb5,0xb3,0x71,0x18,0x3a,0x7a,0xd7,0xbe,0x94,0x23,0x70,0xbc,0x73,0x0f,
0xae,0xea,0xc5,0x20,0xc9,0x2c,0x38,0x79,0x1d,0x7b,0x5f,0x7e,0x81,0xce,0xb7,0x5e,
0x3b,0xe2,0x39,0xf3,0xdf,0xfb,0x01,0xe6,0x2c,0xac,0x3b,0x68,0xb6,0xa2,0xa3,0x77,
0x25,0x1e,0xef,0xbc,0x6b,0x6f,0xcb,0x44,0x93,0xdb,0xdd,0x33,0x4d,0x32,0x65,0x8e,
0xd0,0xe2,0x43,0x68,0x67,0x9c,0xed,0x2a,0xbb,0x76,0x75,0xa5,0xad,0xe8,0xe6,0xdb,
0x8a,0xef,0x7c,0x60,0x89,0x5f,0x55,0x8b,0xec,0xf3,0x9b,0x80,0xb7,0x81,0xd7,0xb0,
0xf6,0xaf,0xfb,0xc7,0x53,0x6a,0x47,0x94,0xd0,0x78,0x3c,0x7e,0x39,0xf0,0x2d,0xfb,
0x01,0x5f,0x01,0xde,0x04,0xfe,0x02,0xec,0x0c,0x68,0x5a,0xba,0x04,0x48,0xff,0x12,
0xb8,0x39,0x99,0x13,0x1a,0xf7,0xb4,0xb2,0xaf,0xad,0x33,0xa9,0x75,0xb0,0x19,0x1b,
0x24,0x1e,0x6c,0xc1,0x51,0x5c,0x79,0x40,0x2f,0xcb,0x0a,0x6b,0xae,0xba,0x9a,0xe7,
0x07,0xfa,0x09,0x6e,0x79,0x6b,0xec,0xf5,0xe1,0x09,0xeb,0x38,0xee,0x43,0x1f,0x19,
0x4e,0x1c,0x10,0xef,0x6e,0x49,0x29,0x0b,0xf4,0x81,0xf6,0x85,0x89,0x77,0xb7,0xe2,
0x28,0xae,0x40,0x56,0x1c,0x9c,0x78,0xf5,0xe7,0x79,0xee,0x17,0x3f,0xa1,0x77,0xfb,
0x96,0x31,0xdb,0x55,0xbe,0xf6,0x34,0x56,0x5e,0x72,0xf9,0x21,0x5a,0x3a,0xde,0xb5,
0x3f,0xe1,0xf5,0x2f,0xc0,0xdb,0xdb,0xb5,0x89,0x3c,0xee,0x56,0x5b,0x56,0x53,0x06,
0x01,0x4d,0x33,0x80,0xbd,0xf6,0xf1,0xdc,0x18,0xe4,0x9e,0x6f,0xaf,0xdb,0x56,0x00,
0x5f,0x02,0x96,0xda,0x0a,0xf1,0xa2,0x23,0xcf,0xfd,0xc6,0x9f,0x26,0x9b,0x01,0x4d,
0x8b,0x91,0x66,0xf0,0xab,0xaa,0xd7,0x9e,0x25,0x14,0x01,0x1b,0xed,0x69,0x4e,0xc2,
0xf8,0xe1,0xbf,0x7d,0x88,0x8b,0x4e,0x3f,0x29,0xa9,0x7b,0x4a,0xee,0x3c,0xbc,0x47,
0x6d,0x38,0x24,0x2e,0x38,0x1e,0x8d,0xd0,0xf4,0x8f,0x27,0xd8,0x76,0xdf,0x1d,0xc4,
0x42,0x03,0x80,0x89,0xdb,0x57,0xcc,0xe2,0x4b,0xae,0x60,0xe1,0xfa,0x0d,0xc8,0x43,
0x69,0x7b,0x0c,0x83,0xd0,0xdb,0x4f,0x61,0x46,0x06,0x52,0xb2,0x4f,0x65,0x4f,0x3e,
0x39,0x2b,0x4e,0x1d,0x6e,0x5f,0x3c,0x1c,0xa6,0xf1,0xc9,0xc7,0xd8,0x7e,0xff,0x9d,
0x76,0x90,0x86,0x89,0xa7,0x78,0x0e,0x4b,0x2e,0xbd,0x82,0x05,0x6b,0xd7,0x23,0x1f,
0xec,0xd1,0x66,0x18,0x84,0x36,0xff,0x33,0xe1,0xc4,0xef,0xd1,0x58,0x9c,0x13,0x3e,
0xfa,0x35,0xe2,0x7a,0xd2,0x2b,0xab,0xdf,0x02,0x37,0xd8,0xeb,0xde,0x10,0x10,0x4a,
0x57,0x19,0x0e,0x68,0x5a,0x68,0xc2,0x04,0x9e,0xe5,0x87,0x97,0x46,0xac,0x33,0x8a,
0xec,0x75,0x45,0xe5,0x08,0x43,0x58,0xa9,0x7d,0x14,0x8e,0x38,0xf2,0x6d,0x63,0x43,
0x1c,0x18,0x18,0x71,0x38,0x81,0x13,0x93,0xb9,0xff,0x9a,0xe5,0xb5,0xfc,0xee,0x3b,
0x9f,0x4f,0x3a,0x91,0xbb,0xb3,0x6a,0x29,0xae,0xca,0x45,0x87,0xb1,0x75,0xc5,0x19,
0xe8,0x6c,0x07,0x49,0x26,0xaf,0xb4,0xec,0x10,0x77,0xc9,0x68,0xf3,0x36,0x62,0xfb,
0xb6,0x4c,0x49,0xff,0x85,0x07,0x42,0x44,0x07,0xc3,0xe4,0x15,0x15,0x1e,0x4a,0xa4,
0x49,0xc0,0x55,0xbd,0x1c,0x67,0x45,0xed,0xa1,0xed,0xea,0x68,0x47,0x92,0x65,0x72,
0xc7,0x68,0xd7,0x70,0xfb,0xf6,0x6d,0x25,0xd6,0x9c,0xb8,0x6b,0xf2,0x96,0x5d,0x7b,
0xb8,0xe4,0xba,0x1b,0x92,0x15,0xd2,0x28,0xf0,0xb8,0x3d,0x78,0x7b,0xed,0x63,0xe8,
0xf7,0x18,0x56,0x76,0x8e,0x1e,0xac,0x44,0x77,0x3d,0xb6,0xad,0x66,0xc8,0x00,0x35,
0x64,0x7c,0x6a,0xb6,0x7f,0x8f,0x4c,0x87,0x6d,0x26,0x25,0x8c,0x58,0x53,0x44,0x52,
0x07,0x96,0x45,0xba,0x7c,0x84,0x01,0xcc,0x6f,0x4f,0x27,0x7c,0x1c,0xd8,0x42,0x0a,
0xda,0x53,0x8f,0xfd,0x23,0x8e,0xcd,0x76,0xc7,0x0f,0xbd,0x8c,0x3e,0x7b,0xcd,0x10,
0x1f,0xe3,0x3e,0x4e,0xe0,0xad,0x64,0xd6,0xc2,0x4f,0xbd,0xde,0xc8,0xf6,0x3d,0xcd,
0x2c,0xf6,0x27,0x97,0x1d,0x23,0xd6,0xdc,0x88,0x92,0x57,0x8c,0x52,0x70,0xa8,0xc3,
0x83,0xec,0x70,0x90,0x3f,0x77,0xec,0x58,0x63,0xbd,0xb7,0x83,0xd8,0xbe,0xc6,0x29,
0xe9,0xd7,0xed,0xaf,0xbd,0xcd,0xb6,0xe7,0x36,0x02,0x26,0xde,0x12,0x1f,0xab,0x2e,
0x3a,0x9b,0xdc,0x82,0xbc,0x29,0xb9,0x76,0x74,0xdf,0xbb,0xc8,0x79,0x45,0x56,0x25,
0x86,0x91,0xed,0x2a,0x3f,0x72,0x0c,0xb5,0xde,0xd3,0x4e,0x6c,0x7f,0xe2,0x75,0x8f,
0x24,0x09,0x36,0xbe,0xdd,0x34,0x11,0x0d,0xf3,0xc7,0x80,0xa6,0x5d,0x75,0x04,0x99,
0xcb,0xb5,0x07,0xfa,0x7c,0x7b,0xd0,0x2f,0xb6,0x0d,0x4d,0x65,0xb6,0x8d,0xe7,0x1c,
0xdb,0xe6,0x53,0x8e,0x65,0x8c,0x8d,0xf9,0x55,0x35,0x04,0xec,0x01,0x02,0x23,0x8c,
0x50,0xbb,0x81,0xf6,0x80,0xa6,0xcd,0x6a,0xc8,0x98,0x34,0x43,0x44,0x75,0xda,0x8b,
0xf6,0xa5,0xb6,0x11,0x6c,0xe8,0xa7,0x87,0x03,0xa6,0xf7,0x1d,0xf6,0xb1,0x0b,0xd0,
0xec,0x91,0x71,0x20,0xa0,0x69,0xe1,0x29,0x7a,0x86,0x73,0x6d,0x43,0x5b,0xc2,0x6d,
0xfe,0xf0,0x39,0x6b,0xf9,0x76,0xfd,0x07,0x93,0x76,0xa5,0x97,0x14,0x27,0x9e,0xc5,
0x27,0x1d,0x31,0xbd,0xec,0x28,0xe1,0xee,0xef,0x26,0xdc,0xf4,0x32,0xe8,0x93,0x9f,
0xe5,0xf5,0x75,0xf7,0xf0,0xc2,0xed,0xf7,0x8f,0x6a,0x65,0xf9,0xb2,0x85,0xac,0x3c,
0x73,0xdd,0xd4,0x09,0x8d,0xe2,0xc4,0xb3,0xf8,0xe4,0x31,0xd3,0xcb,0x1e,0xae,0x7d,
0x91,0xa6,0x97,0x0e,0x71,0x39,0x3d,0x12,0x22,0xd1,0x18,0x97,0x7c,0xf5,0x3f,0xd9,
0xb5,0x3f,0x29,0x03,0xad,0x0e,0xd4,0x05,0x34,0x6d,0xe7,0x14,0xc9,0x8c,0xc3,0xd6,
0xde,0xf9,0x36,0xa9,0xfd,0x23,0x14,0x4d,0x8d,0x4d,0xfa,0x3c,0x2c,0x6b,0xf2,0xbb,
0xf6,0xd1,0x08,0x6c,0x09,0x68,0x5a,0x67,0xda,0x11,0xd8,0x76,0xca,0xc8,0x07,0x8e,
0xc3,0xb2,0x5a,0x1f,0x03,0x2c,0xb7,0x47,0xb9,0x77,0x0f,0x3a,0x1a,0x81,0xe0,0x4c,
0x6e,0x84,0xfb,0x55,0xf5,0x2e,0xe0,0xb2,0x44,0xbf,0x6f,0x98,0x26,0x7f,0xfb,0xaf,
0x6f,0x51,0x5b,0x53,0x91,0xfc,0xcd,0x64,0x19,0xb7,0xba,0x12,0x47,0x69,0xd5,0x11,
0xba,0xd9,0x24,0xde,0xb1,0x97,0x88,0xf6,0xa6,0xe5,0x28,0x31,0x05,0x68,0xdb,0xd3,
0xcc,0xeb,0xf7,0x3f,0x3e,0xea,0xb3,0xfc,0x8a,0x32,0xd6,0x5e,0x72,0xde,0xd4,0x26,
0x8e,0x97,0x15,0xdc,0xfe,0x63,0xac,0x5c,0x60,0x87,0x6b,0x9f,0x69,0x12,0xeb,0xd8,
0x43,0x54,0x7b,0x2b,0xe9,0xe0,0x8e,0x8d,0x6f,0x37,0xf1,0xb1,0xef,0xfe,0x1a,0x25,
0xb9,0xa8,0xac,0x9b,0x02,0x9a,0x76,0xcd,0x0c,0x2f,0xf3,0x9c,0xc0,0x02,0x5b,0x21,
0x0d,0x29,0xa7,0x15,0x36,0x0f,0xb6,0xd8,0x33,0xc5,0x4d,0x58,0x21,0xae,0xcd,0x01,
0x4d,0x8b,0xa6,0x0c,0x81,0xfd,0xaa,0x5a,0x60,0x3f,0xf0,0x5a,0x60,0x9d,0x3d,0x42,
0x39,0xb0,0xcc,0xe0,0xaf,0xda,0xd3,0xd6,0xc6,0x80,0xa6,0xa5,0x44,0x05,0x2f,0xdb,
0x2b,0xe7,0x6d,0x7b,0x7a,0x94,0x10,0x2e,0x5c,0x7f,0x1c,0x3f,0xf8,0xdc,0xc7,0x92,
0xca,0x50,0x39,0x4a,0xce,0xf3,0x8a,0x87,0x8b,0x7f,0x0d,0x65,0xed,0x30,0xe3,0x31,
0xf4,0xfe,0x2e,0x62,0x2d,0x3b,0x31,0x06,0x3a,0xa7,0x74,0x1c,0x8d,0x84,0xc2,0x3c,
0xf3,0xfb,0xbb,0x31,0x46,0x18,0x7e,0xfc,0x6b,0x56,0xb2,0x64,0xcd,0xca,0x69,0xe8,
0x51,0x13,0x39,0xaf,0x64,0xec,0xf6,0xf5,0x75,0x11,0x6b,0xdd,0x81,0x31,0xd0,0x9d,
0xf4,0x55,0x0d,0xc3,0xe0,0xda,0x1b,0x6e,0xe1,0xc9,0x57,0xdf,0x49,0xe6,0xb4,0x6e,
0x60,0x49,0x40,0xd3,0xda,0x52,0x44,0xd6,0x5c,0xf6,0xac,0x73,0x85,0xad,0xd0,0x4e,
0xb4,0x6d,0x39,0x1d,0x58,0x3b,0x3a,0xcf,0x03,0x9b,0x02,0x9a,0xb6,0x77,0xc6,0x08,
0x6c,0x13,0xf6,0x64,0xe0,0x54,0xe0,0x2c,0x7b,0xf4,0x69,0x02,0x5e,0xb0,0x1f,0x68,
0x7b,0xaa,0x47,0x7f,0xf8,0x55,0xf5,0x4c,0xe0,0x51,0x12,0xcc,0x89,0xad,0x1b,0x26,
0x37,0x7d,0xe3,0x53,0x6c,0x58,0x7d,0xf4,0x24,0x87,0x4a,0xe9,0x80,0x80,0xeb,0xb1,
0x49,0x87,0x2c,0x1e,0x09,0x9d,0xfb,0x5a,0xd9,0xf2,0xec,0x2b,0x84,0x7b,0x7a,0x29,
0x5f,0xbe,0x88,0x25,0x27,0x1e,0x87,0x63,0x5a,0x8b,0x91,0xdb,0xe5,0x45,0xa7,0xa8,
0x7d,0xaf,0x6f,0xd9,0xce,0x07,0xbf,0xf9,0x5f,0xb8,0x9d,0x49,0x19,0xdf,0x3e,0x13,
0xd0,0xb4,0xdf,0xa5,0xb8,0xec,0xb9,0xb1,0x0c,0xb1,0x6b,0x6c,0x85,0xb7,0xd2,0x9e,
0x86,0xbf,0x8c,0x15,0x02,0xfb,0x5c,0x40,0xd3,0xb6,0x4f,0x19,0x81,0xe7,0xfb,0xfd,
0xb2,0x69,0x9a,0xab,0x81,0xf7,0xd8,0x84,0x9d,0x0b,0x3c,0x6b,0xdf,0xec,0x9f,0xc0,
0x7e,0x7b,0x7f,0x2b,0xad,0xe0,0x57,0xd5,0xeb,0x81,0xef,0x27,0xfa,0xfd,0xc2,0xdc,
0x1c,0xee,0xbe,0xe1,0x3a,0x2a,0xcb,0x4a,0xd2,0xaa,0x9d,0xa6,0x69,0x26,0x91,0x98,
0x3e,0x35,0x10,0x8e,0x46,0xf9,0xe4,0xbf,0xff,0x8a,0xb7,0x76,0xec,0x49,0xe6,0xb4,
0xc7,0x81,0xf7,0xcc,0xb6,0x5f,0xf2,0x04,0xa7,0xe0,0x39,0xc0,0x49,0xc0,0x06,0xfb,
0xa8,0xc0,0xf2,0x1e,0x7c,0x0c,0x78,0x7c,0x3c,0x7f,0x8b,0xf1,0xf6,0x81,0x0b,0xb0,
0x9c,0x20,0x9e,0x06,0xfe,0x99,0xec,0xe8,0x90,0xe2,0x1d,0xf7,0x47,0xe0,0xc3,0x89,
0x9e,0xb3,0x66,0xd9,0x02,0x7e,0xf9,0xf5,0xcf,0x90,0xef,0xcd,0x41,0x60,0xfa,0xf0,
0xc7,0x87,0xfe,0xc9,0x8f,0xff,0x90,0x54,0x20,0x59,0x0b,0xb0,0x32,0xa0,0x69,0xad,
0x19,0x22,0x9b,0xf9,0xc0,0x7a,0x2c,0x6b,0xf8,0x73,0x01,0x4d,0xbb,0x67,0xc6,0x8c,
0x58,0x69,0xd6,0x51,0x2e,0xe0,0x6f,0xc0,0xd9,0x89,0xaf,0x87,0x8f,0xe7,0x3b,0x9f,
0xbe,0x9c,0x1c,0x8f,0x3b,0xa5,0xda,0x12,0x8f,0xc5,0x90,0x24,0x09,0x25,0x81,0x3a,
0x4e,0x91,0xd0,0x20,0xee,0x14,0x1d,0x84,0x5e,0xdf,0xb2,0x83,0x8f,0x7f,0xf7,0xd7,
0xc9,0x64,0xfd,0x88,0x00,0x67,0x04,0x34,0xed,0x85,0x6c,0x95,0x63,0x25,0x5b,0x1b,
0x1e,0xec,0xe9,0xd1,0x7d,0x3e,0xdf,0x7d,0xf6,0x9a,0x3e,0xa1,0x62,0xb4,0x5b,0x77,
0xef,0xa7,0xbd,0xab,0x9b,0x35,0x47,0x2d,0x4e,0xca,0x4f,0x7a,0x3a,0x21,0x49,0x12,
0xff,0xba,0xff,0x31,0x5a,0x76,0xec,0xa6,0x6a,0x49,0xed,0x11,0xbf,0xdb,0xb1,0xaf,
0x85,0x17,0xff,0xf8,0x00,0x25,0xf3,0x6b,0xc8,0x99,0x5c,0xaa,0xd6,0x29,0x87,0xb6,
0xbf,0x8d,0xab,0x7f,0xf0,0x3f,0xc9,0x64,0x43,0xd1,0x81,0x2b,0x03,0x9a,0xf6,0x70,
0x36,0xcf,0x58,0xe4,0x6c,0x6e,0xbc,0xed,0xa6,0x76,0x3e,0xf0,0x50,0xa2,0xe7,0x3c,
0xf0,0xcc,0xab,0x7c,0xe5,0x67,0x0d,0xb4,0x76,0xa6,0x86,0xad,0xce,0xc4,0xa4,0x70,
0x6e,0x19,0x5d,0xda,0x3e,0xda,0xf6,0x1c,0x3e,0x48,0xc0,0xd0,0x75,0x9a,0x5e,0x7c,
0x1d,0xd9,0xe1,0xc0,0x9b,0x9f,0x9b,0x52,0xef,0x61,0x4f,0x4b,0x3b,0x9f,0xfd,0xd1,
0x4d,0x74,0xf6,0x26,0xec,0x42,0x6a,0x00,0x5f,0x08,0x68,0xda,0x9f,0xb2,0x7d,0xc9,
0xa1,0x64,0x7b,0x07,0x04,0x7b,0x7a,0xe2,0x3e,0x9f,0xef,0x6e,0x2c,0xb7,0xcc,0xd5,
0x89,0x9c,0xb3,0xbb,0xb5,0x93,0x27,0x5f,0xde,0xc4,0x62,0x7f,0x25,0x55,0x73,0x4a,
0x67,0xbd,0x0d,0x05,0xa5,0x45,0xec,0xdb,0xb2,0x83,0xd6,0xa6,0x5d,0x14,0x54,0x94,
0x91,0x5b,0x38,0x3a,0x4f,0x75,0x3c,0x1a,0xe3,0xad,0xa7,0x5e,0xa2,0x6b,0xd7,0x1e,
0x16,0xae,0x5f,0x4d,0x59,0x4d,0x65,0xca,0xf4,0xff,0x96,0x9d,0xbb,0xf9,0xec,0x7f,
0xfe,0x96,0xdd,0x6d,0x5d,0xc9,0x68,0xde,0x94,0xb7,0x38,0x0b,0x02,0xcf,0x2c,0x89,
0x0d,0x9f,0xcf,0xf7,0x88,0x6d,0x10,0x39,0x3b,0x91,0x7e,0xe9,0x0b,0x85,0x79,0xf0,
0x99,0x8d,0x44,0x22,0x61,0x96,0xcc,0xaf,0x21,0x27,0xc9,0x64,0xf0,0x53,0x09,0x87,
0xd3,0x49,0x71,0x4d,0x05,0xcd,0x5b,0x77,0xb2,0xf7,0xed,0x26,0x82,0xed,0x9d,0xc4,
0x62,0x71,0x06,0x7a,0xfa,0x68,0xde,0x1e,0x60,0xf3,0xe3,0xcf,0xd1,0xdb,0xd2,0x4e,
0xf5,0xca,0x65,0x2c,0x3e,0x61,0x65,0x4a,0x58,0xa6,0x0d,0xc3,0xe4,0x91,0x17,0x5e,
0xe5,0xdf,0x7e,0xf4,0x3b,0x7a,0x06,0x12,0x8e,0x3e,0xed,0x07,0x2e,0x0d,0x68,0xda,
0x5d,0x42,0x6a,0xed,0x25,0x94,0xe8,0x82,0xd1,0xf0,0xab,0xea,0xf1,0xc0,0x9f,0x80,
0xc5,0x89,0x9e,0x93,0xef,0xf5,0xf0,0xad,0x4f,0x7e,0x80,0xd3,0x4f,0x38,0x86,0xbc,
0x1c,0x0f,0xb3,0xb5,0x97,0x31,0xd8,0x3f,0x40,0xd3,0x2b,0x6f,0xd2,0xda,0xb8,0x13,
0x3d,0x1a,0xb5,0x5f,0xaf,0x49,0xde,0x9c,0x52,0x6a,0xd7,0x1c,0x43,0x65,0xad,0x9a,
0x12,0x7d,0xbc,0xaf,0xad,0x93,0x9b,0xee,0x7a,0x98,0xfb,0x9f,0xd9,0x98,0xcc,0x60,
0xd2,0x08,0x5c,0x12,0xd0,0xb4,0x77,0x84,0x94,0x0a,0x02,0x8f,0x47,0xe2,0x5c,0xe0,
0x07,0xc0,0x17,0x12,0xb5,0x13,0x98,0xa6,0x89,0x5a,0x5e,0x42,0xfd,0xfb,0xce,0xe2,
0x94,0xe3,0x8f,0xa2,0xac,0xa8,0x70,0x42,0x39,0x94,0x27,0xff,0x46,0x25,0xa2,0x83,
0x61,0x06,0xfb,0xfa,0xd1,0xe3,0x3a,0x9e,0x5c,0x2f,0x39,0x79,0xb9,0x48,0xf2,0xec,
0xbe,0x6a,0x49,0x92,0x68,0xef,0xee,0xe1,0xe1,0x67,0x5e,0xe1,0x57,0x77,0x3e,0x4c,
0x34,0xb9,0x5c,0xcf,0xbf,0x03,0xbe,0x12,0xd0,0xb4,0x7e,0x21,0x9d,0x82,0xc0,0xc9,
0x6a,0xe3,0xff,0x01,0x4e,0x48,0xe6,0x3c,0x8f,0xcb,0xc9,0xa5,0x67,0x9c,0xc8,0xd9,
0x27,0x1f,0xc7,0xb2,0x05,0xf3,0x70,0xbb,0x9c,0x59,0xdb,0x87,0xa6,0x69,0x12,0x68,
0x6e,0xe5,0xb1,0x17,0x5e,0xe7,0xf7,0x7f,0xfb,0x27,0x03,0xe1,0xa4,0x5c,0x81,0x77,
0x02,0x57,0x07,0x34,0xed,0x09,0x21,0x8d,0x82,0xc0,0x13,0x25,0xb1,0x84,0xe5,0xf0,
0xf1,0x3d,0xac,0x28,0x94,0xa4,0x84,0xd7,0xeb,0x71,0xf3,0x89,0xf7,0x9e,0xca,0xaa,
0xe5,0x75,0x2c,0x9a,0x57,0x49,0x61,0x7e,0x2e,0x0e,0x45,0x99,0x1d,0xed,0x3c,0x43,
0x9a,0x36,0x1a,0x8b,0xd1,0xd2,0x11,0xe4,0xad,0xa6,0x9d,0x3c,0xf0,0xd4,0xcb,0x3c,
0xf3,0xc6,0x56,0x5c,0x8e,0xa4,0xcc,0x2d,0x3d,0x58,0x01,0xf9,0x3f,0x0b,0x68,0x5a,
0x44,0x48,0xa1,0x20,0xf0,0x54,0x10,0xd9,0x6d,0x13,0xf9,0xeb,0xc9,0xac,0x8f,0x87,
0x60,0x98,0x26,0xbd,0xe1,0x18,0xe7,0x9f,0xb0,0x9c,0xe3,0x97,0x2d,0x64,0xe9,0x82,
0x1a,0xe6,0x55,0xcc,0xa1,0x28,0x3f,0x0f,0x5f,0x7e,0xae,0x95,0xea,0x30,0xcd,0x48,
0x2d,0x49,0x12,0x92,0x24,0xd1,0x1f,0x1a,0xa4,0x33,0xd8,0x4b,0xa0,0xb9,0x95,0xb7,
0x9a,0x76,0xf1,0xc2,0x1b,0x5b,0x78,0x7a,0xf3,0x0e,0x8a,0xbd,0x49,0x3b,0xbc,0xf4,
0xd9,0x33,0x9e,0x9f,0xa7,0x4a,0x00,0x8c,0x20,0x70,0xe6,0x11,0x59,0xc1,0xda,0x3b,
0xfe,0x12,0x96,0xef,0xea,0x84,0xfa,0xd0,0x34,0x2d,0x52,0xfb,0xf2,0x3c,0xd4,0xcc,
0x29,0xe1,0xe8,0x45,0x7e,0x96,0xcc,0xaf,0xc2,0x57,0x90,0x4f,0x45,0x69,0x11,0x5e,
0x8f,0x87,0xfc,0xdc,0x1c,0x7c,0xf9,0xb9,0x76,0x48,0x9d,0xc4,0x4c,0x1b,0x8f,0xcd,
0xa1,0x07,0x05,0xfa,0x07,0xc3,0xf4,0xf4,0x0d,0x10,0x0a,0x47,0xe8,0xe8,0xee,0xa1,
0xad,0xab,0x87,0xbd,0xad,0x1d,0xbc,0xf2,0xce,0x36,0x02,0xcd,0x6d,0xb4,0xf7,0x0c,
0x20,0x4b,0x13,0x7e,0xc6,0xbd,0xc0,0x8d,0xc0,0x6f,0x33,0xbd,0x14,0x8a,0x20,0xf0,
0x68,0x32,0x39,0xec,0x69,0x6d,0x1d,0x56,0xe0,0x75,0x08,0x3b,0x21,0xc0,0x4c,0x24,
0xdd,0xf3,0xab,0xea,0x62,0xe0,0x13,0xc0,0x87,0x98,0x60,0x39,0xd3,0xc3,0x41,0x37,
0x0c,0x42,0xd1,0x38,0xdd,0xe1,0x38,0x0b,0xe7,0xf8,0x58,0x58,0x59,0x46,0xd5,0x9c,
0x22,0x2a,0x4a,0x8b,0x28,0xc8,0xf5,0xa2,0x28,0x0a,0x4e,0x87,0x03,0xa7,0x43,0xb1,
0x0f,0x07,0x8a,0xa2,0xe0,0x50,0x64,0xe4,0xc3,0x18,0xac,0x4c,0x13,0xe2,0xba,0x8e,
0x61,0x18,0xc4,0x75,0x03,0xdd,0x30,0xd0,0x75,0x83,0xb8,0xae,0x13,0x8f,0xeb,0xe8,
0xba,0x4e,0x5c,0xd7,0x19,0x8c,0x44,0x69,0xeb,0xea,0x61,0x5f,0x7b,0x17,0x7b,0xda,
0xba,0x68,0xdc,0xd7,0x8e,0x69,0x98,0x14,0x78,0x9c,0x38,0x15,0x79,0xaa,0xb6,0xa1,
0x06,0x80,0x27,0x80,0x5b,0x81,0xbf,0xa7,0x63,0x50,0x8c,0x20,0xf0,0xe4,0xc8,0xb3,
0x06,0xf8,0x3d,0x56,0x3c,0xf2,0xc1,0xe8,0xc5,0x8a,0xb9,0xfc,0x33,0x70,0xd7,0x78,
0x89,0xc1,0xa6,0x48,0x2b,0x9f,0x08,0x5c,0x62,0x6b,0xe7,0x45,0x42,0xb4,0x0e,0x3b,
0x45,0x7e,0x0a,0x2b,0xe5,0xeb,0xdf,0x67,0x2a,0x6b,0x85,0x20,0x70,0x6a,0x12,0xf8,
0x11,0xac,0x30,0xc7,0xf1,0xd0,0x01,0xfc,0x04,0xf8,0xf5,0x54,0x67,0x43,0x38,0x02,
0x99,0x6b,0x81,0xf3,0xb0,0x42,0x30,0x4f,0xc1,0x4a,0xbb,0x92,0x8d,0x30,0xb0,0x92,
0x3a,0x3c,0x89,0x15,0xf2,0xf7,0xc2,0x74,0x0f,0xa6,0x82,0xc0,0xe9,0x43,0xe0,0xcf,
0x70,0x84,0x7c,0xcf,0x4b,0x4e,0x3f,0x9f,0xd3,0x3f,0x7e,0x0d,0xdb,0x5f,0x7b,0x89,
0xc7,0x7f,0xfd,0x7d,0x40,0xda,0x8a,0xe5,0xfc,0xfe,0xd2,0x0c,0x3f,0xa7,0x0c,0x1c,
0x6b,0x6b,0xe8,0x13,0xb1,0xdc,0x35,0xab,0xed,0x29,0x7f,0x26,0x21,0x6c,0x0f,0x96,
0x6f,0xd8,0xb3,0x9f,0x57,0x80,0x97,0xd2,0x28,0x7f,0xb8,0x20,0xf0,0x2c,0x90,0xf8,
0x7a,0xac,0xed,0x9d,0x43,0x9c,0x2d,0xaa,0x8e,0x5e,0xcd,0xa5,0xdf,0xfe,0x31,0x00,
0xbf,0x78,0xff,0x7a,0x64,0xa7,0x0b,0xac,0xb4,0xa2,0xdf,0x0c,0x68,0xda,0xcf,0x67,
0xf9,0xb9,0x8b,0xb0,0xd2,0x0f,0xad,0xb0,0x97,0x00,0x8b,0xb1,0xf2,0x2a,0x55,0x61,
0x65,0x68,0x48,0x65,0xb4,0x61,0x65,0x05,0x0d,0x60,0x55,0xe4,0xd8,0x0a,0xbc,0x03,
0xec,0x0a,0x68,0x5a,0x8b,0xa0,0x94,0x20,0x70,0x52,0x58,0xf3,0x9e,0x0b,0x37,0xb4,
0xbc,0xb3,0xe9,0x57,0x92,0x2c,0x1f,0x92,0xf3,0xc6,0xe9,0xcd,0x45,0x71,0x79,0x08,
0x07,0x3b,0x29,0xa8,0xa8,0xc6,0x57,0x5e,0xcd,0xee,0x4d,0x2f,0x83,0x65,0xf1,0xfc,
0x62,0xaa,0x19,0x4e,0xfc,0xaa,0xea,0x0e,0x06,0x83,0x4b,0x06,0xc3,0xe1,0xfb,0x24,
0x58,0x20,0xcb,0x32,0xb2,0x2c,0x23,0x0d,0xfd,0x94,0x24,0xab,0x02,0xdc,0x90,0x11,
0xc9,0xfe,0x7b,0xe8,0xf7,0x23,0xbd,0xd0,0x51,0x1b,0x54,0x23,0xb6,0xab,0x46,0x5a,
0x9a,0x87,0x7e,0x37,0x4d,0x13,0xc3,0x30,0x30,0xec,0x9f,0xa6,0x69,0xea,0x1e,0xb7,
0xfb,0x9b,0x3e,0x9f,0xef,0x66,0xd3,0x34,0xa3,0x62,0x6f,0x56,0x60,0xca,0xd0,0xd0,
0x14,0xfc,0x22,0x20,0xf9,0x55,0xf5,0xa3,0x7e,0x55,0xdd,0xe1,0x57,0x55,0xf3,0xe0,
0x43,0xad,0xa9,0x36,0xaf,0xbf,0xf7,0x9f,0xe6,0xad,0xdb,0x7a,0xcc,0xcf,0xfd,0xe6,
0x8f,0xa6,0x5a,0x53,0x63,0xfa,0x55,0xf5,0x46,0xdb,0x49,0x23,0x65,0x20,0xcb,0xf2,
0xc9,0x92,0x55,0xf4,0xcd,0x9c,0xc8,0x21,0x49,0x52,0x42,0xc7,0x04,0xaf,0x6f,0x28,
0x8a,0xf2,0x1f,0x05,0x79,0x79,0x62,0xeb,0x31,0x85,0xe0,0xc8,0x80,0x36,0x7c,0xa6,
0xa1,0x29,0xf8,0x64,0x7d,0x9d,0xef,0xff,0xfc,0xaa,0x7a,0x37,0xf0,0x35,0xe0,0x7a,
0xac,0x84,0xf0,0x96,0x56,0x92,0x15,0x76,0xbc,0xf6,0x32,0xf3,0x96,0x1d,0xc3,0xc2,
0x55,0x27,0x11,0xe9,0xd8,0x83,0x67,0x8e,0xfa,0x59,0x7b,0x2a,0xf8,0xc3,0x14,0x21,
0xef,0xa9,0x86,0x61,0xfc,0x1d,0xbb,0x1c,0xaa,0x2c,0xcb,0xb8,0x9c,0x4e,0x1c,0x4e,
0x27,0x0e,0x87,0x03,0x87,0xa2,0x1c,0xd0,0xc6,0xb6,0x03,0xc5,0x90,0x56,0x66,0x84,
0x16,0x4e,0x84,0x5d,0x43,0x0e,0x23,0x86,0x61,0xa0,0xdb,0xdb,0x4a,0xb1,0x78,0x9c,
0x58,0x34,0x4a,0x38,0x1c,0x3e,0x5c,0x29,0x13,0x49,0xd7,0xf5,0xef,0x0e,0x0c,0x0e,
0xfa,0xb0,0xf6,0xc0,0x05,0xc4,0x14,0x7a,0xd2,0xda,0x77,0x3e,0x96,0xbf,0xec,0xb5,
0xf5,0x75,0xbe,0xff,0x1a,0x31,0x15,0x5d,0x05,0xdc,0x87,0x95,0x7c,0xdb,0x12,0x5a,
0xc3,0xa0,0x72,0xc5,0x71,0x98,0xa6,0x49,0xcb,0x96,0xe1,0xba,0x57,0x71,0xe0,0xbd,
0x01,0x4d,0x7b,0x6c,0x56,0x47,0x51,0x87,0xe3,0x28,0xd3,0x34,0x5f,0xcc,0xcf,0xcb,
0xcb,0xf3,0x78,0x3c,0x38,0x9d,0xce,0x43,0xc9,0x39,0x43,0x18,0x9a,0x3e,0x47,0x22,
0x11,0xfa,0x07,0x06,0x08,0x85,0x42,0x63,0x3d,0xef,0xf7,0xe2,0xf1,0xf8,0x7f,0x08,
0xfa,0x08,0x02,0x4f,0x96,0xc0,0x9f,0xb5,0xd7,0xb3,0x4f,0xd6,0xd7,0xf9,0xce,0x3a,
0x68,0x3d,0x59,0x81,0xb5,0x75,0xb1,0x62,0xac,0x73,0x4b,0x17,0x2c,0x21,0x1a,0x0e,
0xd1,0xdb,0xbc,0xbb,0x19,0x58,0x3e,0x5b,0x1e,0x40,0x15,0xe5,0xe5,0x1e,0xd3,0x34,
0x37,0xb9,0xdd,0xee,0x25,0xa9,0x98,0x41,0x52,0xd7,0x75,0xfa,0xfb,0xfb,0x09,0xf6,
0xf4,0x8c,0x74,0xf5,0x34,0x9c,0x4e,0xe7,0x45,0xb1,0x58,0xec,0x21,0x41,0xa1,0x59,
0x9e,0xb9,0xa5,0xf9,0xf3,0x9f,0x6f,0xff,0x3c,0xa9,0xa1,0x29,0x38,0xaa,0xfa,0x60,
0x40,0xd3,0xf6,0x03,0x67,0x60,0x59,0x4a,0x47,0x1b,0xb7,0xdc,0x1e,0xae,0xfc,0xaf,
0xff,0xe5,0xea,0x9b,0xef,0x62,0xf1,0x86,0x73,0x2b,0x81,0x1f,0xcf,0x56,0x03,0xdc,
0x6e,0xf7,0xf5,0x1e,0x8f,0x67,0x49,0xaa,0xa6,0x7f,0x55,0x14,0x85,0xc2,0xc2,0x42,
0xaa,0xab,0xaa,0xc8,0xcb,0x1d,0xde,0xf9,0x92,0xe3,0xf1,0xf8,0xad,0x1e,0x8f,0xa7,
0x54,0x50,0x48,0x10,0x78,0xa2,0xda,0x37,0x17,0xab,0x22,0x04,0x58,0x7b,0xaa,0x87,
0x14,0xff,0xb1,0xb3,0xf4,0xbf,0x17,0xcb,0x33,0x6b,0x18,0xb1,0xc1,0x7e,0x4c,0xc3,
0xc0,0x95,0xe3,0xe5,0x84,0x8b,0x3e,0x88,0xa9,0xc7,0x3f,0xed,0x57,0xd5,0x75,0x33,
0xdd,0x06,0xdb,0x15,0xf3,0xba,0x74,0xe8,0x6f,0x45,0x51,0x28,0x2d,0x2d,0xa5,0xac,
0xb4,0x74,0x68,0xaa,0x3d,0x27,0x1a,0x8d,0xfe,0x50,0x50,0x48,0x10,0x78,0xa2,0x58,
0xc1,0xe8,0x9a,0xbf,0xeb,0xc7,0xfa,0x52,0x40,0xd3,0x9a,0x80,0xfa,0xd1,0xad,0x76,
0xf0,0xfc,0xdd,0xb7,0x13,0x1e,0xe8,0xa7,0xbf,0xbb,0x13,0x3b,0xda,0xfd,0x36,0x3b,
0x27,0xef,0x4c,0xe2,0x87,0x58,0xd5,0x2d,0xd2,0x06,0xb9,0xb9,0xb9,0x94,0xcf,0xb5,
0x0a,0x9f,0x1b,0x86,0xf1,0x29,0x97,0xd3,0x59,0x27,0x68,0x24,0x08,0x3c,0x11,0xf4,
0x33,0x7a,0x7b,0xf3,0xb0,0x55,0x0c,0x03,0x9a,0x76,0x37,0x70,0xc7,0xc8,0xcf,0x5e,
0xfe,0xf3,0xef,0xf8,0xf1,0xe9,0x75,0xdc,0xf3,0xed,0x6b,0x86,0xea,0xd9,0xd6,0x02,
0xbf,0x9b,0xa9,0xad,0x25,0xbf,0xaa,0x2e,0x62,0x9c,0xea,0x96,0xd4,0x45,0xe1,0x00,
0x00,0x11,0x68,0x49,0x44,0x41,0x54,0xeb,0xa9,0x0a,0x8f,0xc7,0xc3,0x9c,0xb2,0x32,
0x00,0x29,0xae,0xeb,0xdf,0x14,0x34,0x12,0x04,0x4e,0x1a,0xf5,0x75,0xbe,0x77,0x80,
0xdf,0xd8,0x7f,0x6e,0x05,0xfe,0x77,0x9c,0x53,0xbe,0x8c,0x55,0x00,0x6b,0x18,0x8e,
0x82,0x32,0x14,0xb7,0x95,0xe4,0xbc,0xb0,0x72,0x1e,0xee,0xbc,0x82,0xcb,0x81,0x7f,
0x9f,0xa1,0x26,0x5c,0x45,0x1a,0x6f,0xe3,0x79,0xbd,0x5e,0x7c,0x85,0x85,0x98,0xa6,
0x79,0xa9,0xc7,0xe3,0x29,0x12,0x54,0x9a,0x1d,0xa4,0xfd,0xa6,0x7c,0x43,0x53,0xd0,
0x55,0x5f,0xe7,0x4b,0x28,0x48,0xc1,0xaf,0xaa,0x5f,0x00,0x7e,0x75,0xf0,0xe7,0xbe,
0x2a,0x3f,0xd7,0x34,0xdc,0x8b,0x1e,0x8f,0xf1,0xd8,0x2d,0xbf,0xe4,0x8d,0xbf,0xde,
0xf9,0xd5,0xe9,0x74,0xb7,0xb4,0xc3,0x20,0x1b,0x49,0x32,0xc3,0x47,0xaa,0xc1,0x34,
0x4d,0x9a,0xf7,0xef,0x47,0xd7,0xf5,0x8f,0x1a,0x86,0xf1,0x47,0x41,0x27,0xa1,0x81,
0x27,0xa2,0x89,0x93,0x89,0x30,0xfa,0x1f,0xac,0x9a,0xad,0xa3,0x10,0x0b,0x87,0x30,
0x31,0x71,0x7a,0x72,0x58,0x77,0xe9,0xc7,0x31,0x0d,0xfd,0x67,0x7e,0x55,0xfd,0x89,
0x1d,0x59,0x34,0x1d,0x58,0x94,0xee,0xe4,0x05,0xcb,0xa5,0xb3,0xb4,0xa4,0x04,0xd3,
0x34,0x2f,0x14,0x54,0x12,0x04,0x9e,0x76,0x04,0x34,0x2d,0x0e,0x5c,0x7b,0xf0,0xe7,
0x03,0x9d,0x6d,0x3c,0xff,0x97,0x3f,0x10,0x8b,0x84,0x89,0x86,0x43,0x43,0x13,0x93,
0xeb,0x80,0x47,0xfd,0xaa,0x3a,0x1d,0x59,0xd0,0xcf,0x9e,0x81,0xe6,0x76,0x03,0xb7,
0xd9,0x9a,0x7e,0xda,0xe0,0x76,0xbb,0xf1,0x7a,0xbd,0x6b,0x72,0x73,0x73,0x9d,0x82,
0x4e,0x62,0x0a,0x3d,0xed,0xb0,0x8d,0x54,0x0f,0x03,0xe7,0x1e,0xd2,0x19,0xb2,0x6c,
0x39,0x2b,0x0c,0x39,0x2c,0x98,0x26,0x48,0x52,0x2f,0xf0,0x5d,0xac,0x74,0x2f,0x83,
0x93,0xb8,0xaf,0x02,0xac,0x0a,0x87,0xc3,0xd7,0x9a,0xa6,0x79,0x59,0x4e,0xce,0xb4,
0x17,0x18,0xfb,0x44,0x40,0xd3,0xfe,0xe0,0x57,0xd5,0x52,0x40,0xc3,0x76,0xd1,0x9c,
0x0e,0x44,0x22,0x11,0xda,0xda,0xdb,0xe7,0xe8,0xba,0x2e,0xf2,0x58,0x09,0x02,0xcf,
0x08,0x89,0x97,0x00,0x9b,0x00,0xcf,0xe1,0xbe,0x53,0xec,0x5f,0xc4,0x69,0x57,0x7e,
0x8e,0x70,0x5f,0x2f,0xcf,0xdc,0x7e,0x13,0xfd,0x6d,0xcd,0xcd,0xc0,0x2d,0xc0,0x1d,
0x01,0x4d,0xdb,0x9a,0xe0,0x7d,0x5c,0x58,0x45,0x9c,0x2f,0xc0,0x34,0x3f,0x60,0x44,
0x42,0x4b,0xfb,0x07,0x23,0xe4,0xe4,0xe5,0xe3,0x74,0x4e,0xbb,0xc2,0x3a,0x2f,0xa0,
0x69,0x8f,0xd8,0xeb,0xed,0xed,0x4c,0x71,0xca,0x9f,0x83,0xd7,0xc2,0x91,0x48,0x64,
0x5d,0x4b,0x6b,0xeb,0x0b,0x82,0x52,0x33,0x0b,0x47,0x36,0x36,0x3a,0xa0,0x69,0x8d,
0x7e,0x55,0xfd,0x29,0x47,0xb0,0x38,0x1f,0x7d,0xd6,0x05,0x2c,0x5d,0x7b,0x1a,0x98,
0x26,0x55,0x8b,0x97,0x71,0xcb,0x67,0x2e,0xad,0x34,0x0d,0xe3,0xbb,0xc0,0xf5,0x7e,
0x55,0x0d,0x00,0x2f,0x62,0xc5,0xc1,0xee,0xc5,0x4a,0x83,0x6a,0x60,0x65,0xde,0x98,
0x8b,0x15,0xdb,0x7b,0x0c,0x70,0x34,0x50,0x02,0x70,0x4a,0xfd,0x97,0x39,0xe1,0xbd,
0x97,0xf0,0xf8,0x6d,0x37,0xf1,0xfa,0x7d,0xb7,0x27,0xfb,0xc8,0x3a,0x70,0x17,0x49,
0xd4,0x33,0x3e,0x68,0x70,0x4e,0x26,0xdd,0x65,0x2b,0xe0,0x03,0x12,0x4e,0x29,0x29,
0x49,0x12,0x1e,0x8f,0xa7,0x5a,0xd0,0x49,0x10,0x78,0x26,0xf1,0x7d,0x2c,0x2f,0xad,
0xe3,0xc6,0xfa,0xe7,0xa6,0xbf,0xdf,0xc7,0xb2,0x75,0xa7,0x53,0x5c,0x51,0x4d,0x5e,
0x51,0x09,0xae,0xbc,0x02,0x22,0xbd,0x41,0x00,0x65,0xed,0xc7,0xae,0xa9,0x2d,0xae,
0xa8,0xae,0xdd,0xfe,0xea,0x8b,0x6c,0xf9,0xc7,0x43,0x23,0x55,0x11,0xb5,0x6b,0xcf,
0x44,0x3d,0xfa,0x78,0x1a,0x5f,0xf8,0x07,0xcd,0x9b,0x5f,0x1b,0xfe,0x7c,0xd9,0xda,
0xd3,0xf0,0x16,0x14,0xd2,0xaa,0xed,0x44,0x4e,0xde,0x6d,0xf2,0x07,0xc0,0xbd,0x49,
0x12,0x78,0xa2,0xb8,0x17,0xd8,0x0c,0xdc,0x94,0xe4,0x79,0x15,0x82,0x4e,0x82,0xc0,
0x33,0xa9,0x85,0xe3,0x7e,0x55,0xbd,0x0c,0xd8,0x08,0x1c,0xb2,0x8f,0xd9,0xb3,0x2f,
0xc0,0x6f,0xae,0x38,0x9b,0xe5,0xe7,0x5d,0x46,0x47,0x60,0xfb,0x10,0x79,0x59,0xf1,
0x9e,0xf7,0x73,0xda,0x47,0xaf,0x06,0x4c,0x8e,0x3e,0xe3,0x5c,0xee,0x35,0x0d,0x1a,
0xff,0xf9,0x77,0x00,0x8e,0xff,0xc0,0xc7,0x38,0xf7,0xea,0xaf,0x80,0x24,0xb1,0xe6,
0xa2,0x0f,0x72,0xfb,0x75,0x9f,0x66,0xdf,0xe6,0xd7,0x40,0x92,0x78,0xe4,0xa6,0x1b,
0x58,0x7d,0xc1,0x65,0x16,0x81,0xe5,0xa4,0x6c,0x87,0xcd,0xc0,0x8f,0x80,0x25,0x33,
0xd8,0x3d,0xbf,0xc5,0xda,0xa7,0x5e,0x95,0xc4,0x39,0x25,0x82,0x4e,0x33,0x8f,0x6c,
0xaf,0x0f,0xbc,0x03,0xb8,0x14,0x18,0x73,0x2b,0x4a,0x72,0xb8,0x78,0xf7,0xf1,0x07,
0x68,0x6b,0x7a,0x7b,0xf8,0xb3,0x9d,0xaf,0x3c,0x47,0x73,0x93,0x55,0x5f,0x2b,0x1a,
0x0a,0x11,0x19,0x38,0x50,0xd3,0x76,0xa0,0xbb,0x8b,0x68,0x24,0x8c,0x24,0xc9,0x84,
0xfb,0x7a,0x19,0x08,0x1e,0x28,0x99,0xa9,0x6d,0x7c,0x9e,0xbb,0xbf,0xf3,0x79,0xf6,
0x0e,0x69,0xe5,0xc4,0x71,0xeb,0x4c,0x24,0xe3,0x3b,0xa8,0x5f,0x4c,0xe0,0x67,0x49,
0x9e,0x96,0x23,0xe8,0x24,0x34,0xf0,0x6c,0x90,0xf8,0x1f,0x7e,0x55,0xfd,0x28,0x56,
0x0a,0xda,0x71,0xf7,0x7d,0x43,0x5d,0xed,0xfc,0xef,0xe7,0x3e,0x8c,0x3b,0xaf,0x80,
0x78,0x78,0x10,0x3d,0x76,0x80,0x5b,0x8d,0x4f,0x3d,0xcc,0xae,0x8d,0xcf,0x51,0x54,
0xed,0xa7,0x7d,0xe7,0x56,0xf4,0x68,0x64,0xac,0x05,0x63,0xb2,0x8f,0x78,0xcf,0x2c,
0x75,0xcd,0x03,0xc0,0x60,0x12,0xc4,0x74,0x08,0x3a,0x09,0x0d,0x3c,0x5b,0x24,0xfe,
0x8b,0xad,0x89,0x13,0xdb,0x26,0x32,0x4d,0x22,0x7d,0x3d,0xa3,0xc8,0x3b,0x84,0x48,
0x7f,0x2f,0x2d,0x8d,0x6f,0x8d,0x4d,0x5e,0x48,0x36,0x48,0xbf,0x93,0x31,0xc2,0x21,
0x67,0xa8,0x4f,0x22,0xc0,0x33,0x42,0x3a,0x04,0x81,0xd3,0x85,0xc4,0xf7,0x63,0x95,
0x4a,0xd9,0x3b,0x9d,0xf7,0x49,0x52,0xff,0x6e,0x9f,0xcc,0xde,0xf3,0x14,0xe0,0x5f,
0x42,0x32,0x04,0x81,0xd3,0x89,0xc4,0xaf,0x60,0x6d,0xfd,0xdc,0x09,0xd3,0x54,0xa7,
0x3b,0x39,0x0d,0xbc,0x6b,0x96,0xbb,0xe4,0x5d,0x21,0x15,0x82,0xc0,0xe9,0x46,0xe2,
0xee,0x80,0xa6,0x7d,0x08,0x38,0x07,0x78,0x6d,0x6a,0xb9,0x2b,0x25,0xbb,0x85,0xb4,
0x7f,0x8a,0x94,0xfe,0x44,0xdf,0xf3,0x2e,0x21,0x11,0x82,0xc0,0xe9,0x4a,0xe4,0x27,
0xb0,0x0a,0x7b,0x9f,0x03,0xfc,0x0d,0xcb,0x99,0x62,0xf2,0x1d,0x9e,0xdc,0x16,0x52,
0xcf,0x2c,0x13,0x58,0x24,0x6a,0x4f,0x71,0x08,0xcb,0xe1,0x91,0x49,0x6c,0x60,0x25,
0xc6,0x7b,0xdc,0xaf,0xaa,0x25,0xc0,0x05,0x58,0xf5,0x8e,0xd6,0x01,0x95,0x58,0x56,
0xeb,0x23,0xa9,0x54,0xd3,0x26,0x7e,0x1f,0xf0,0x36,0xf0,0x7a,0x4e,0x4e,0x4e,0x17,
0x56,0x35,0x89,0x44,0x10,0x9f,0xe5,0x2e,0x18,0x10,0x52,0x20,0x08,0x9c,0x29,0x64,
0xee,0xc4,0x8a,0xee,0xb9,0x0d,0xc0,0xaf,0xaa,0x3e,0x60,0x3e,0x96,0x07,0x52,0x09,
0xd6,0x76,0x8b,0x03,0x6b,0x4f,0xb9,0x1f,0x2b,0x41,0x7b,0x2b,0xb0,0x2f,0xa0,0x69,
0x1d,0x43,0xd7,0xf1,0xab,0xea,0xf2,0x24,0x08,0x2c,0x20,0x20,0x08,0x3c,0x4d,0x84,
0x0e,0x62,0x05,0x44,0x6c,0x12,0xbd,0x21,0x20,0xd6,0xc0,0x02,0x02,0x02,0x82,0xc0,
0x02,0x02,0x82,0xc0,0x02,0x02,0x02,0x82,0xc0,0x02,0xb3,0x8a,0xb8,0xe8,0x02,0x41,
0x60,0x81,0xf4,0x85,0x29,0xba,0x40,0x10,0x58,0x40,0x40,0x40,0x10,0x58,0x40,0x40,
0x40,0x10,0x58,0x40,0x40,0x40,0x10,0x58,0x40,0x40,0x10,0x58,0x40,0x40,0x40,0x10,
0x58,0x20,0x31,0xec,0xb5,0x02,0x2b,0x12,0x82,0x69,0x9a,0x9c,0xfd,0x85,0xef,0xac,
0x6c,0x68,0x0a,0x9e,0x7d,0xdd,0x5f,0x5f,0x3a,0xcb,0x9d,0x5f,0xe8,0x49,0x58,0x20,
0x1c,0xce,0xe1,0xe0,0x8c,0x40,0x12,0xf7,0x14,0x98,0x1d,0x08,0x5f,0xe8,0x14,0xc6,
0xe9,0x57,0x5f,0xb7,0xe1,0xe4,0x0f,0x5c,0x51,0x06,0xcc,0xed,0x6e,0xd9,0xe7,0xff,
0xf5,0x07,0x4f,0x47,0x71,0x8d,0xcf,0x45,0x33,0x16,0x45,0x5d,0x7e,0xcc,0x4f,0x01,
0x14,0xa7,0x8b,0xc2,0xf2,0x6a,0xda,0xfa,0x12,0x8b,0x4c,0x3c,0xf3,0x9a,0xaf,0x5f,
0x71,0xc2,0x05,0x97,0x9e,0x02,0x74,0x44,0x42,0x03,0x3d,0x3f,0x3c,0xc5,0x8f,0xab,
0xa8,0x52,0xbc,0x0c,0x41,0x60,0x01,0xb0,0x82,0xfa,0x4d,0x33,0xb1,0x2d,0xda,0xe2,
0xaa,0x9a,0x33,0x81,0x33,0x01,0x1c,0x4e,0x17,0xe8,0x09,0xfa,0x66,0x48,0x60,0x8e,
0xda,0x06,0x4e,0x7c,0x4b,0x58,0x71,0xba,0x0a,0x80,0xe5,0x00,0xb2,0xa2,0x10,0xef,
0x8d,0xe1,0x4a,0xa0,0x78,0xe8,0x92,0xd3,0xce,0x9f,0x7f,0xfd,0xb7,0x7e,0xb4,0x0c,
0x68,0xaa,0xaf,0xf3,0x09,0x27,0x12,0x41,0xe0,0xf4,0x47,0x43,0x53,0x30,0x1f,0xab,
0x0a,0xe1,0x1a,0xac,0x1c,0xcb,0x47,0x77,0xef,0xdf,0x7b,0xd4,0x8d,0x1f,0x39,0x77,
0xa8,0xa8,0x78,0xc6,0x40,0x3d,0xea,0xd8,0x0b,0x81,0x0b,0x81,0x78,0x43,0x53,0xf0,
0x5d,0xe0,0x4d,0xe0,0x75,0xac,0xbc,0x5a,0x5b,0xea,0xeb,0x7c,0x41,0x21,0x11,0x82,
0xc0,0xa9,0x4e,0xd8,0x32,0xac,0x2c,0x1e,0x1b,0x80,0xb5,0xb6,0x26,0x2b,0x38,0x58,
0x03,0x67,0x81,0x4c,0x1d,0x6d,0x1f,0x1f,0xb5,0x3f,0x0b,0x37,0x34,0x05,0xb7,0x00,
0x2f,0x61,0x65,0xba,0x7c,0xb1,0xbe,0xce,0xb7,0x57,0x48,0x8c,0x20,0xf0,0x6c,0x13,
0x56,0x06,0x4e,0xc2,0xaa,0x74,0x78,0x1e,0xb0,0x94,0x23,0x14,0x4c,0xcb,0x62,0x78,
0x80,0x63,0xed,0xe3,0x1a,0x20,0xd6,0xd0,0x14,0xdc,0x09,0x3c,0x02,0x3c,0x0a,0x3c,
0x95,0x64,0x9d,0x67,0x01,0x41,0xe0,0x09,0x93,0xd6,0x0b,0x9c,0x0a,0x5c,0x86,0x55,
0x5b,0xa9,0x54,0xf4,0x4a,0xd2,0x70,0x02,0x8b,0xed,0xe3,0x4b,0xc0,0x40,0x43,0x53,
0xf0,0x51,0xac,0x24,0xf6,0x8f,0x8a,0xe9,0xb6,0x20,0xf0,0x54,0x93,0x56,0x02,0x4e,
0x01,0x3e,0x06,0x5c,0x84,0xa8,0x03,0x34,0xd5,0xc8,0x05,0x3e,0x60,0x1f,0x43,0x64,
0xfe,0x03,0xf0,0x98,0xd0,0xcc,0x82,0xc0,0x93,0x21,0x6e,0x11,0x50,0x0f,0x7c,0x0a,
0x58,0x34,0x15,0xd7,0x34,0x33,0x34,0x46,0xc8,0x9c,0xba,0x86,0x8d,0x24,0xf3,0xfe,
0x86,0xa6,0xe0,0xef,0x81,0x9b,0xeb,0xeb,0x7c,0x7b,0x84,0x44,0x0a,0x02,0x27,0x4a,
0x5c,0x3f,0xf0,0x55,0xe0,0x93,0x4c,0x71,0xd1,0x2e,0x43,0x8f,0x27,0x6c,0xc8,0x4a,
0x05,0x83,0x97,0xc3,0x9b,0xd8,0xf7,0xfa,0xba,0x3a,0xa6,0xe3,0xf6,0x15,0xc0,0xb7,
0x80,0xaf,0x37,0x34,0x05,0xff,0x02,0xfc,0xa4,0xbe,0xce,0xf7,0xa6,0x90,0xd0,0x03,
0x10,0x9e,0x58,0xa3,0x89,0x5b,0xd3,0xd0,0x14,0x6c,0x00,0xb6,0x02,0x9f,0x65,0x1a,
0x2a,0xee,0x85,0xfa,0x7a,0x13,0xaa,0xce,0x60,0x9a,0x06,0x0e,0x87,0x73,0x56,0xfb,
0x43,0x92,0x24,0x72,0xab,0xeb,0x12,0xfa,0xee,0xe6,0xc7,0x1e,0xc0,0x34,0xa6,0xcd,
0x71,0x4b,0x01,0x3e,0x04,0x6c,0x6a,0x68,0x0a,0xde,0xdf,0xd0,0x14,0x3c,0x4a,0x48,
0xab,0x20,0xf0,0x48,0xe2,0x7a,0x1a,0x9a,0x82,0xdf,0x07,0x1a,0xb1,0xea,0xe2,0xba,
0xa6,0xeb,0x5e,0xfb,0xb7,0x6f,0x49,0x4c,0x53,0xc7,0x62,0xe4,0x15,0xcf,0xae,0x7d,
0x4c,0x71,0x38,0xa9,0x3a,0xfa,0x84,0x84,0xbe,0xdb,0xdf,0xde,0x42,0x6b,0x60,0xfb,
0xb4,0x8f,0x29,0xc0,0xc5,0xc0,0xeb,0x0d,0x4d,0xc1,0x5b,0x1a,0x9a,0x82,0xc5,0x82,
0xc0,0x82,0xbc,0x1b,0x80,0x77,0x80,0xeb,0x01,0xef,0x74,0xde,0x2b,0x1e,0x8d,0xf2,
0xda,0x43,0x89,0x55,0x0b,0xcd,0x29,0x2a,0xa5,0xa0,0x74,0xce,0xec,0x6a,0x60,0x45,
0xa1,0x6a,0x69,0x82,0xca,0x4e,0x92,0xd8,0xfc,0xd4,0xa3,0x13,0x29,0x9f,0x3a,0xd1,
0xa5,0x5f,0x3d,0xd0,0xd4,0xd0,0x14,0xbc,0xdc,0x36,0x32,0x0a,0x02,0x67,0x19,0x71,
0x1d,0x0d,0x4d,0xc1,0xff,0x04,0xfe,0x01,0x2c,0x98,0x89,0x7b,0x36,0x6d,0x7c,0x9e,
0x8e,0xed,0x89,0xd5,0x0b,0xab,0x5b,0x77,0x26,0xde,0x02,0xdf,0xec,0x76,0x92,0x69,
0xb2,0xe0,0xd8,0x13,0x30,0x13,0x74,0xe1,0xdc,0x78,0xf7,0x1f,0x68,0x0f,0xec,0x98,
0xc9,0x27,0x2c,0x01,0xee,0x00,0x6e,0x6f,0x68,0x0a,0xe6,0x09,0x02,0x67,0x0f,0x79,
0x0b,0x80,0x87,0x81,0x6f,0xcc,0x54,0x1f,0x74,0x35,0xef,0xe1,0xe1,0x9f,0xff,0x07,
0x92,0xac,0x24,0xf4,0xfd,0x95,0x67,0x5f,0x80,0x69,0x4e,0xc5,0x9a,0xd2,0x1c,0xb3,
0x8e,0x71,0xa2,0xa8,0x5a,0xb4,0x8c,0x92,0xda,0xa5,0x89,0x4d,0xfb,0xf5,0x38,0x8f,
0xde,0xfc,0x73,0xa2,0xe1,0x19,0xaf,0x88,0xfa,0x11,0xe0,0x85,0x86,0xa6,0x60,0xb5,
0x20,0x70,0xe6,0x93,0xd7,0x67,0x6b,0xdd,0xb3,0x67,0xea,0x9e,0x5d,0xcd,0x7b,0xb8,
0xf3,0xbb,0x5f,0x26,0x92,0x60,0x44,0x50,0xdd,0x29,0xe7,0xa0,0xae,0x38,0x76,0xea,
0x14,0xa9,0x91,0xf8,0x16,0x8f,0x24,0x8f,0x9e,0x8d,0x3a,0xdc,0x6e,0xce,0xfc,0xd4,
0x97,0x12,0xde,0xff,0xd2,0x5e,0x7d,0x9e,0x27,0x6e,0xf9,0x15,0xb1,0x48,0x64,0xa6,
0x5f,0xed,0xd1,0xc0,0x8b,0x0d,0x4d,0xc1,0xf9,0x82,0xc0,0x99,0x4b,0x5e,0x17,0xf0,
0x20,0x56,0x60,0xc1,0xb4,0x43,0x8f,0xc5,0xd8,0xf2,0xc2,0x53,0x34,0x5c,0x73,0x39,
0x5d,0x81,0x6d,0x09,0xaf,0x7d,0xcf,0xfe,0xf4,0x97,0x27,0x15,0xec,0x60,0x9a,0x13,
0xdf,0x82,0x1a,0xeb,0xac,0x45,0xab,0x4e,0xe6,0xf8,0x0f,0x7c,0x2c,0xe1,0x6b,0x6c,
0xfa,0xeb,0x1d,0xdc,0xf7,0x93,0xeb,0x09,0xb6,0xee,0x9f,0xa9,0x35,0xf1,0x10,0x6a,
0x80,0x27,0x1a,0x9a,0x82,0xa5,0x82,0xc0,0x99,0x89,0x1b,0xb0,0x3c,0xaa,0xa6,0x15,
0xb1,0xf0,0x20,0x8d,0x2f,0x3d,0xc3,0xed,0x5f,0xbf,0x9a,0x7b,0xbe,0xf3,0x39,0xa2,
0x03,0xfd,0x09,0x9d,0xe7,0xce,0x2f,0xe4,0x8a,0xff,0xbc,0x09,0xdf,0xdc,0x8a,0xc9,
0x3d,0x80,0xa1,0xe3,0x70,0xb9,0x87,0x29,0xe9,0x70,0xbb,0x13,0x1f,0x74,0xe2,0xf1,
0x31,0xb4,0xb2,0xcc,0x99,0x57,0x7e,0x8e,0xe5,0xe7,0x5c,0x9c,0xf0,0x75,0xb6,0x3d,
0xf7,0x38,0xbf,0xfd,0xf4,0x25,0x3c,0x7f,0xd7,0x6d,0xf4,0x75,0xb6,0xcf,0xe4,0x3b,
0xae,0x05,0x6e,0xb3,0xfd,0xd4,0x05,0x81,0x33,0x48,0xfb,0xae,0xc6,0xda,0xdb,0x9d,
0x56,0xf4,0x77,0x77,0x71,0xdb,0xd7,0x3e,0xcd,0x3d,0xff,0xfe,0x05,0xf6,0x6d,0x7e,
0x15,0x49,0x19,0xdf,0x57,0xc6,0x34,0x4d,0xaa,0x57,0xae,0xe1,0xaa,0x1b,0xff,0x44,
0x79,0xed,0xd8,0xfb,0xae,0x86,0x61,0x24,0xec,0xed,0x24,0x29,0x0e,0x5c,0x39,0x96,
0x41,0x5d,0x96,0x65,0xf2,0x4a,0xcb,0x13,0x7e,0xfe,0xee,0xe6,0xbd,0x63,0x6a,0x6f,
0xa7,0xc7,0xc3,0x05,0x5f,0xf8,0x36,0xeb,0xaf,0xfc,0x42,0xc2,0xda,0x3d,0x16,0xea,
0xe7,0xe9,0x5b,0x7e,0xc1,0xad,0x9f,0xff,0x08,0xdd,0x2d,0xcd,0x33,0xf9,0xba,0xcf,
0x07,0x2e,0x15,0x04,0xce,0x2c,0x5c,0x8f,0xe5,0x10,0x30,0xad,0x78,0xe3,0x89,0xbf,
0xd1,0xda,0xf8,0x56,0x82,0x53,0x5d,0x83,0x82,0x8a,0x6a,0x2e,0xfc,0xe6,0x8f,0xf9,
0xc8,0x0f,0xfe,0x9b,0xe2,0xca,0x9a,0xc3,0x7e,0x37,0x12,0xea,0x47,0x4a,0xd0,0xb1,
0xa3,0xb0,0x7a,0x3e,0x1e,0xaf,0x65,0x94,0x95,0x15,0x85,0x92,0xea,0x79,0x09,0x3f,
0x7f,0xcb,0x8e,0xc6,0xc3,0x4e,0x7b,0x1d,0x2e,0x17,0xa7,0x5e,0x51,0xcf,0x95,0xbf,
0xb9,0x83,0xc5,0x1b,0xce,0x45,0x0f,0x27,0x56,0x3e,0xb8,0xbf,0xbd,0x85,0x97,0xee,
0xbb,0x63,0xa6,0xdf,0x77,0x56,0x94,0x70,0xcd,0x0a,0x57,0x4a,0x7b,0x4d,0x74,0xee,
0x4c,0xdc,0x4b,0x92,0x8e,0x3c,0x26,0x9a,0x86,0x8e,0x24,0x41,0xed,0x69,0x97,0x53,
0xb3,0x72,0x1d,0x8b,0x8e,0x3d,0x96,0xb2,0xf2,0x42,0xc6,0x5b,0xf2,0xf6,0x77,0x75,
0x22,0x3b,0x12,0xf3,0x2f,0x99,0x7f,0xfc,0x49,0xb8,0xbc,0x5e,0x4c,0x5b,0x6b,0xd7,
0x2c,0x3b,0x9a,0x8d,0xd6,0xc2,0x78,0xdc,0x73,0x5b,0xb7,0x6d,0x61,0xb0,0xaf,0x07,
0x4f,0x6e,0xfe,0x61,0x17,0xd8,0x95,0x8b,0x96,0x72,0xe1,0x57,0x7e,0xc0,0xb2,0x73,
0x3e,0xce,0xae,0xd7,0x5f,0x66,0xfb,0xb3,0x0f,0xd0,0xbb,0x77,0x0b,0xb2,0x33,0xe7,
0xb0,0xe7,0x78,0x0a,0x8a,0x66,0xfa,0xb5,0x2f,0x6e,0x68,0x0a,0xae,0xa9,0xaf,0xf3,
0xfd,0x4b,0x10,0x38,0xfd,0xb1,0x0a,0x2b,0x84,0x6d,0xda,0x71,0xc2,0x05,0x97,0x92,
0x5b,0x3c,0x97,0xc0,0x96,0x9d,0x44,0x06,0x7a,0x50,0x9c,0x6e,0x3c,0x05,0x45,0xb8,
0x3c,0x5e,0xbc,0xbe,0x52,0xf2,0x4a,0xe6,0x92,0x5f,0x5a,0x89,0xe2,0xb4,0xc8,0x38,
0x18,0x85,0xbd,0x7b,0x43,0x14,0x15,0xb9,0xc8,0xcf,0x3f,0xdc,0xeb,0x90,0xd8,0xbf,
0x7d,0x6b,0xc2,0x86,0xad,0x65,0xeb,0xcf,0x1c,0xe5,0xd6,0x58,0xbd,0xe4,0x28,0x14,
0x97,0x0b,0x3d,0x16,0x1b,0xf7,0xdc,0x50,0x67,0x2b,0x1d,0xbb,0x03,0x54,0x1f,0xc6,
0x81,0x43,0xd7,0x4d,0xba,0xbb,0x63,0xf4,0xf7,0xc7,0xc9,0x2d,0x55,0x59,0x71,0xb6,
0xca,0x8a,0xb3,0x2e,0x63,0xa0,0xbb,0x9d,0xfe,0xee,0x36,0xfa,0x3b,0xf6,0x13,0x19,
0x1c,0x20,0xd2,0x17,0x24,0x36,0xd8,0x8f,0xec,0x70,0x52,0xb1,0x68,0x05,0xab,0xce,
0x3a,0x75,0x36,0xde,0xfb,0x7a,0xac,0x8c,0x20,0x82,0xc0,0x69,0x8e,0x9a,0x99,0xba,
0x91,0xd3,0xe3,0x61,0xe5,0x19,0x67,0xb3,0x74,0x9d,0x41,0x6f,0x6f,0x9c,0x81,0x90,
0x3e,0xee,0x16,0x8c,0x61,0x40,0x67,0x67,0x94,0x50,0x48,0xa7,0xac,0xcc,0x85,0x7c,
0xd0,0x56,0x4e,0x74,0x70,0x80,0xd7,0x1f,0xfa,0x4b,0x42,0xf7,0x2f,0x9a,0x57,0x8b,
0x7a,0xd4,0x71,0xa3,0xa7,0xd4,0x65,0x73,0x59,0x7d,0xc9,0x27,0x78,0xf9,0x8e,0x5b,
0xc6,0x5f,0x53,0x39,0x9c,0x6c,0x7e,0xfa,0xd1,0x31,0x09,0x1c,0x0e,0xeb,0xb4,0xb7,
0x47,0xd1,0x75,0xf3,0xe0,0x69,0x07,0xb9,0xc5,0x73,0xc8,0x2d,0x9e,0xc3,0xdc,0xda,
0x15,0xc3,0x83,0x8e,0x2c,0x43,0x41,0x81,0x83,0xfc,0x7c,0x07,0x8a,0x32,0x2b,0xce,
0x52,0x55,0x62,0x0d,0x9c,0x19,0x88,0xcd,0xf4,0x0d,0xdd,0x6e,0x99,0xb2,0x32,0x17,
0x73,0xca,0x5c,0xc8,0x09,0xca,0xee,0xe0,0xa0,0x4e,0x4b,0x4b,0x04,0xe3,0xa0,0x7d,
0xdb,0x57,0xfe,0x76,0x37,0x3d,0xcd,0xda,0xb8,0xe7,0xeb,0xd1,0x30,0xe7,0x7e,0xee,
0x1b,0x38,0x0f,0xb2,0x3a,0x9b,0xa6,0xc9,0x89,0xef,0xfb,0x30,0x39,0x45,0x89,0x85,
0x31,0x6f,0xbc,0xf3,0x56,0x9a,0x9b,0x46,0x7b,0x8c,0x85,0x42,0x3a,0xad,0xad,0x91,
0x43,0xc9,0x7b,0xd8,0xf6,0x4b,0x54,0x56,0x7a,0xf0,0xf9,0x9c,0xb3,0x45,0xde,0x59,
0x79,0xef,0x82,0xc0,0xd3,0x83,0xc6,0xd9,0xba,0xb1,0xd7,0xab,0x50,0x5e,0xee,0x49,
0x78,0x3b,0x34,0x1a,0x35,0x68,0x6f,0x8b,0xda,0x9a,0x77,0x90,0xe7,0xee,0xfc,0x3d,
0x4f,0xdf,0xf2,0x0b,0xc6,0xde,0xa1,0x1d,0xbd,0xce,0x3c,0xa5,0xfe,0x5a,0xe6,0xaf,
0x1c,0x7b,0x8b,0x3b,0xaf,0xa8,0x98,0xcb,0xbe,0xf7,0xcb,0xc4,0x84,0xc2,0xe5,0xe6,
0xae,0xef,0x7e,0x69,0x38,0x38,0x21,0x12,0x31,0x68,0x6f,0x8f,0x24,0x1c,0xcb,0x9c,
0x93,0x63,0xb5,0xd9,0xe1,0x98,0x75,0x17,0xe5,0x6d,0x82,0xc0,0x99,0x81,0x37,0x81,
0xce,0xd9,0xba,0xb9,0xcb,0x2d,0x53,0x56,0x9a,0xf8,0x5e,0xec,0x60,0x58,0x67,0xef,
0xce,0xfd,0xdc,0xf6,0xd5,0x7a,0x9e,0xb9,0x35,0x01,0xd2,0x99,0x26,0xab,0x2e,0xf9,
0x38,0xa7,0x5c,0x7e,0xe5,0x11,0x8d,0x68,0x35,0x4b,0x8f,0xe6,0xc3,0x3f,0xbd,0x25,
0xa1,0x7d,0xe1,0x81,0x8e,0x56,0x7e,0x77,0xd5,0xc5,0xbc,0xf1,0xe4,0xdf,0x93,0x22,
0xaf,0xd3,0x69,0xcd,0x3c,0x52,0x24,0x77,0xdf,0x13,0x82,0xc0,0x19,0x80,0xfa,0x3a,
0xdf,0x20,0xf0,0x7f,0xb3,0xf9,0x0c,0xde,0x5c,0x05,0xaf,0x37,0xf1,0x5d,0xac,0x17,
0xef,0xf9,0x23,0x6d,0x4d,0x6f,0x8f,0xfb,0x3d,0x23,0x36,0xc8,0xb1,0x1f,0xfa,0x2a,
0xab,0x2f,0xb9,0x66,0xd8,0x30,0x76,0x24,0xf8,0x8f,0x39,0x81,0xf3,0xbe,0xfd,0xbf,
0x14,0xaa,0xcb,0xc7,0xfd,0xae,0x24,0x2b,0xfc,0xf5,0x07,0x5f,0xb4,0x3c,0xaa,0x12,
0x44,0x69,0xe9,0xa1,0x6b,0xf8,0x59,0xc2,0xa3,0xf5,0x75,0xbe,0x80,0x20,0x70,0xe6,
0xe0,0xc7,0xc0,0xac,0x26,0x4b,0xf3,0xf9,0x12,0x34,0x84,0x4b,0x12,0x3b,0x9f,0xb9,
0x7b,0x3c,0xb5,0xcb,0x9c,0x65,0x27,0x71,0xfe,0xf7,0xef,0x66,0xf9,0x19,0x97,0xd0,
0xd7,0x6f,0x12,0x0e,0xeb,0xe3,0x5e,0xba,0xa3,0x23,0x42,0x41,0xc5,0x02,0xce,0xfd,
0xda,0x7f,0x73,0xfc,0x15,0xd7,0xe1,0xf0,0x1c,0x39,0x88,0x47,0x72,0x78,0x08,0xf5,
0x24,0x36,0x79,0xf1,0xe6,0x28,0xb8,0xdd,0x29,0x21,0x52,0x71,0xac,0x4c,0x1e,0x19,
0x8f,0xac,0x49,0xa9,0x53,0x5f,0xe7,0x6b,0x6d,0x68,0x0a,0x5e,0x03,0xfc,0x79,0xd6,
0xa6,0xd2,0x2e,0x19,0xb7,0x5b,0x26,0x12,0x31,0xc6,0x9d,0x12,0xcf,0x3d,0x6a,0x3d,
0xfb,0x5e,0x7b,0x72,0xf4,0xc7,0x86,0x81,0xac,0x28,0xf8,0xd7,0xbf,0x8f,0x85,0x27,
0xbd,0x87,0x39,0x0b,0x96,0x8d,0x8a,0x6e,0xea,0xec,0x8c,0x51,0x59,0xa9,0x1c,0x76,
0xfa,0x1a,0x0a,0xe9,0x84,0x42,0x16,0xc9,0x1d,0xee,0x1c,0x96,0x6e,0x78,0x3f,0xf3,
0x57,0x9d,0xce,0x9e,0xb7,0x5e,0x62,0xdb,0xb3,0x0f,0xd2,0xf1,0xee,0xf3,0xc8,0xee,
0xd1,0x84,0xce,0xaf,0xa8,0xc5,0x57,0xae,0x26,0xd4,0xbe,0xfc,0x82,0x94,0x11,0xa7,
0x1f,0xd6,0xd7,0xf9,0x36,0x65,0x83,0x5c,0x67,0x5d,0x20,0x74,0x43,0x53,0xf0,0x87,
0xb3,0x39,0x3a,0xf7,0xf4,0xc4,0xe8,0xee,0x1e,0xdf,0x38,0x3a,0xd8,0xd3,0xc5,0xee,
0x57,0x1f,0xa1,0xb7,0x65,0x07,0xb2,0xa7,0x08,0x77,0xfe,0x1c,0x4a,0xd4,0x3a,0x8a,
0xaa,0x16,0xe0,0xc9,0x2b,0x3c,0xec,0x79,0x65,0x65,0x2e,0x72,0x73,0xc7,0x26,0x52,
0xf3,0xbe,0x30,0xd1,0xd8,0xd8,0x83,0x87,0xa1,0xc7,0xe9,0xef,0x68,0xa1,0x73,0xcf,
0x36,0xba,0xf6,0xec,0x20,0xbf,0x40,0xa6,0xb8,0xa2,0x8a,0xfc,0x9a,0x13,0x70,0xe7,
0x8f,0xef,0x84,0x21,0x49,0x30,0x6f,0x9e,0x37,0x15,0xd6,0xbe,0xf7,0x02,0x1f,0xac,
0xaf,0xf3,0xe9,0x82,0xc0,0x99,0x49,0x60,0x19,0x2b,0xa8,0xe1,0xda,0xd9,0xb8,0x7f,
0x38,0x6c,0x6d,0x15,0x25,0x82,0xe2,0x62,0x27,0xf9,0xf9,0x0e,0x42,0x21,0x6b,0xff,
0x35,0x11,0x78,0x3c,0x32,0xe5,0xe5,0x9e,0x49,0xdd,0xd7,0xe9,0x94,0xa9,0xaa,0xf2,
0x60,0x9a,0xb0,0x7b,0x77,0x28,0x21,0x03,0x56,0x4e,0x8e,0xcc,0xdc,0xb9,0xb3,0x9e,
0xd3,0xfe,0x41,0xe0,0xb2,0x6c,0x4a,0x45,0x9b,0x75,0xf1,0xc0,0xf5,0x75,0x3e,0xa3,
0xbe,0xce,0xf7,0x15,0xac,0xac,0x93,0x33,0x5e,0x84,0x2b,0xa9,0x3d,0x51,0x3b,0x2c,
0x30,0x27,0x47,0x49,0x58,0xb3,0x85,0xc3,0xc6,0x98,0x7b,0xb5,0x03,0x03,0x89,0x2b,
0x24,0xaf,0x57,0x9e,0x40,0xbb,0x66,0x5d,0x94,0x6e,0x04,0x3e,0x90,0x6d,0x79,0xa4,
0xb3,0x36,0xa5,0x4e,0x7d,0x9d,0xef,0xe7,0xc0,0x59,0xc0,0x8c,0xd6,0xe8,0x49,0x2a,
0x7d,0xb2,0x4d,0x5a,0x59,0x96,0x70,0xb9,0x12,0x7f,0x55,0xe1,0xc1,0x43,0xc9,0x3a,
0x38,0x98,0x38,0x81,0x3d,0x1e,0x25,0x9d,0x5e,0x65,0x2f,0x70,0x45,0x7d,0x9d,0xef,
0xf3,0xd9,0x32,0x6d,0x16,0x04,0x3e,0x40,0xe2,0xa7,0x81,0x15,0x40,0x03,0xc9,0xd4,
0xe0,0x9c,0x05,0x24,0x63,0xdd,0x0d,0x1f,0x64,0x24,0x8b,0xc7,0xcd,0x84,0x3d,0xa8,
0x24,0x89,0xa4,0x06,0x8b,0x59,0xc6,0xdf,0x81,0x15,0xf5,0x75,0xbe,0x3f,0x67,0xab,
0x0c,0x67,0x7d,0x56,0xca,0xfa,0x3a,0x5f,0x4f,0x7d,0x9d,0xef,0x53,0x58,0xd5,0x04,
0x5f,0x4c,0xd5,0xe7,0x74,0x39,0x13,0x7f,0x55,0xd1,0xe8,0x41,0x04,0x8e,0x19,0x09,
0x6b,0x7e,0x59,0x96,0x26,0xe8,0xfa,0x38,0xa3,0xe3,0x5f,0x23,0x70,0x71,0x7d,0x9d,
0xef,0xfc,0x6c,0xaf,0xd8,0x20,0xf2,0x42,0x1f,0x20,0xf2,0x4b,0xc0,0x3a,0xe0,0x7d,
0xc0,0x6b,0xa9,0xf6,0x7c,0xc9,0xb8,0x25,0xc6,0xe3,0xe6,0x11,0xff,0x4e,0xe6,0x3e,
0x29,0x56,0x0e,0x75,0x27,0x56,0x3a,0xd9,0x63,0xea,0xeb,0x7c,0x0f,0x0a,0xa9,0x15,
0xa5,0x55,0x0e,0x26,0xb1,0x09,0x3c,0xd0,0xd0,0x14,0xfc,0x1b,0x70,0x06,0xf0,0x75,
0xe0,0x34,0x52,0xc0,0x5a,0x2f,0x27,0xa1,0x15,0x4d,0x73,0x28,0x2f,0x96,0xf5,0xb7,
0x6e,0x98,0xd3,0x32,0x50,0xcc,0x20,0xde,0x00,0x7e,0x0a,0xdc,0x53,0x5f,0xe7,0x8b,
0x09,0x49,0x15,0x04,0x1e,0x8f,0xc8,0x3a,0xf0,0x38,0xf0,0x78,0x43,0x53,0x70,0x19,
0xf0,0x19,0xac,0xd2,0x1e,0x65,0xb3,0xf5,0x4c,0xc9,0x28,0x42,0xd3,0x34,0x31,0x4d,
0x73,0x58,0x7b,0x1a,0xc9,0x64,0xa5,0x4c,0x9d,0xd7,0xd0,0x8b,0xb5,0x2d,0x74,0x73,
0x7d,0x9d,0xef,0x45,0x21,0x95,0x82,0xc0,0x13,0x25,0xf3,0xbb,0xc0,0x17,0x1b,0x9a,
0x82,0xdf,0xc0,0x4a,0x45,0xfb,0x11,0xac,0xec,0x1e,0xb9,0x33,0x40,0xdb,0x29,0x59,
0x62,0xa6,0x51,0x45,0xc4,0x18,0xf0,0x14,0x96,0xb7,0xdc,0x83,0xa2,0x4e,0xb0,0x20,
0xf0,0x54,0x12,0x79,0xd0,0xd6,0x08,0x0f,0xda,0x55,0x00,0xce,0xc1,0xaa,0xd3,0xf3,
0x5e,0x60,0x5a,0x4a,0x28,0x4c,0x66,0xf9,0x39,0x51,0xd2,0x9a,0x33,0x3f,0x48,0x84,
0xec,0xd9,0xce,0x83,0xc0,0x43,0xf5,0x75,0xbe,0x0e,0x21,0x6d,0x82,0xc0,0xd3,0x4d,
0xe6,0x7e,0x2c,0x97,0xbd,0x7b,0xed,0xba,0x3c,0x27,0xda,0xda,0xf9,0x2c,0xac,0x04,
0xe3,0xf9,0xa2,0x97,0x0e,0x8b,0x41,0xac,0xea,0x8f,0x4f,0xd8,0xc4,0x7d,0x56,0x14,
0xf1,0x16,0x04,0x9e,0x4d,0x32,0x9b,0xc0,0x4b,0xf6,0xf1,0x3d,0xbb,0x6c,0xcb,0x4a,
0xac,0x6d,0xa9,0x93,0xed,0xdf,0x27,0x5d,0xf2,0x23,0x8d,0xeb,0x82,0xb7,0x03,0x6f,
0x61,0x6d,0xd1,0xbd,0x00,0xbc,0x26,0xb4,0xac,0x20,0x70,0x2a,0x13,0xba,0x17,0x78,
0xd6,0x3e,0x68,0x68,0x0a,0x3a,0xb1,0x8c,0x5f,0xab,0x80,0x95,0xa6,0x61,0x1e,0x27,
0xcb,0xd2,0x29,0x86,0x61,0xce,0x58,0x9a,0xc6,0x99,0x58,0x03,0xcb,0xd6,0x7c,0x7f,
0x8f,0x4d,0xd6,0x37,0xed,0xe3,0x15,0x60,0x7f,0x7d,0x9d,0x2f,0x22,0x24,0x43,0x10,
0x38,0x5d,0x09,0x1d,0x03,0x9a,0x81,0xbf,0xda,0x07,0x00,0x37,0xfc,0xab,0xbd,0x20,
0x12,0xd1,0x57,0xc6,0x62,0xe6,0x3c,0x49,0x62,0x85,0xae,0x9b,0x95,0xb2,0x2c,0x1d,
0x6d,0x18,0xe6,0x5c,0x7b,0x0a,0xee,0x65,0x16,0x8c,0xc2,0x63,0x91,0x7d,0xc8,0x98,
0x0d,0x0c,0x28,0x8a,0xd4,0x27,0x4b,0xd2,0x5e,0x24,0xb6,0x28,0x8a,0xa4,0x29,0x8a,
0xb4,0x25,0x37,0x57,0xd9,0x59,0x50,0xe0,0x7c,0xfb,0xe3,0xf3,0x0b,0x42,0xe2,0x8d,
0x0b,0x02,0x67,0x05,0xbe,0xb6,0xa6,0x6c,0x48,0x53,0x1f,0x82,0x9f,0x6f,0x6c,0xf7,
0x85,0xc3,0x46,0x99,0x2c,0xe3,0xb1,0xb5,0xf7,0x5c,0xd3,0x64,0xae,0x24,0x51,0x25,
0xcb,0x52,0x0d,0x50,0x62,0x9a,0xe4,0x9a,0xa6,0xe9,0xb0,0x89,0x5e,0x20,0x49,0x92,
0x17,0x70,0x03,0x4e,0x49,0xc2,0x01,0x0c,0xd8,0x03,0x80,0x64,0x9a,0xe4,0x8d,0x20,
0x22,0x58,0x41,0x1c,0x11,0x7b,0x3d,0xda,0x63,0x9a,0xf4,0x4a,0x12,0x51,0x59,0x96,
0x06,0x24,0x89,0x56,0x40,0xb3,0xa7,0xbe,0xed,0x1e,0x8f,0xdc,0x63,0x18,0x68,0x1e,
0x8f,0xdc,0x5f,0x5c,0xec,0x6a,0xfd,0xe4,0xc2,0xc2,0x7e,0xf1,0xf6,0x52,0x07,0x92,
0xe8,0x82,0xf4,0xc6,0xff,0xed,0xee,0x97,0x3a,0xda,0xc3,0x8e,0x78,0xdc,0x54,0x0c,
0xc3,0x54,0x4c,0x13,0xc9,0x34,0x91,0x8a,0x8b,0x9d,0xba,0xed,0x12,0x29,0xb5,0xb5,
0x46,0x94,0xc1,0xb0,0x2e,0xcb,0xb2,0x64,0xca,0x32,0xc8,0xb2,0x64,0xc8,0x32,0x86,
0x24,0x49,0xba,0x2c,0x4b,0xb1,0x6f,0x9c,0x3c,0x47,0x17,0x3d,0x29,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x90,0x05,0xf8,0xff,0xbd,0xee,0x3d,0x8e,0x97,
0x10,0x8f,0xe6,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82};
@@ -1,126 +0,0 @@
// Created with image_to_c
// https://github.com/bitbank2/image_to_c
//
// octocat_4bpp
// Data size = 1808 bytes
//
// PNG, Compression=Flate, Size: 240 x 200, 8-Bpp
//
// for non-Arduino builds...
#ifndef PROGMEM
#define PROGMEM
#endif
const uint8_t octocat_4bpp[] PROGMEM = {
0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,
0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xc8,0x08,0x03,0x00,0x00,0x00,0xe1,0xa2,0x9c,
0x60,0x00,0x00,0x00,0x33,0x50,0x4c,0x54,0x45,0x40,0xcb,0xf9,0x00,0x00,0x00,0x22,
0x1e,0x1d,0x2d,0x2d,0x2d,0x44,0x5c,0x67,0x6a,0x57,0x4d,0xad,0x5b,0x52,0xb7,0x74,
0x6a,0xa2,0x84,0x73,0x6a,0x95,0xa8,0xc7,0x9e,0x8a,0x7b,0xbb,0xe4,0x85,0xbb,0xcc,
0xdc,0xc3,0xc0,0x9c,0xd9,0xf1,0xf5,0xca,0xb3,0xff,0xff,0xff,0x9b,0x6c,0xe6,0xbe,
0x00,0x00,0x00,0x01,0x74,0x52,0x4e,0x53,0x00,0x40,0xe6,0xd8,0x66,0x00,0x00,0x06,
0x8b,0x49,0x44,0x41,0x54,0x78,0xda,0xed,0xdd,0xdb,0xb6,0x9b,0x20,0x10,0x00,0x50,
0x04,0x8c,0x42,0x94,0xd3,0xff,0xff,0xda,0x7a,0x49,0x14,0x10,0x10,0x14,0x97,0x83,
0x99,0x79,0x68,0x57,0x1b,0x49,0x67,0x67,0x00,0x11,0xcd,0x29,0x21,0x18,0x18,0x18,
0x3f,0x1d,0x74,0x8e,0xe2,0xff,0x8d,0xc4,0x5c,0x2e,0x4c,0xe8,0xf2,0x7f,0xe0,0x38,
0xf8,0x82,0x8c,0x2e,0x7e,0xfb,0xd3,0x19,0x65,0x4e,0xea,0xd2,0x37,0xcf,0x94,0x52,
0xbe,0xac,0x2e,0x7c,0xeb,0xcc,0x59,0x65,0xc9,0xeb,0xb2,0x37,0xbe,0x24,0xaf,0xf3,
0x99,0xd1,0xd2,0xc0,0xf4,0x9a,0x77,0xa5,0x60,0xbd,0xae,0xdc,0x62,0x8f,0x4d,0x7a,
0x53,0x40,0x60,0x1a,0x79,0x98,0xdd,0x80,0x16,0x0b,0x9e,0xd2,0xa3,0x79,0x03,0x38,
0x38,0x7f,0x20,0x18,0xc1,0x0f,0x03,0x53,0x04,0x23,0x18,0xc1,0x08,0xc6,0x59,0x1a,
0xc1,0x08,0x46,0xf0,0xaf,0x80,0x09,0x82,0x1f,0xee,0x45,0x30,0x76,0x69,0x9c,0xa6,
0xcb,0x16,0x53,0xfa,0x5b,0x62,0x4a,0x7f,0x4b,0x4c,0x11,0xfc,0x6c,0x31,0xa5,0xbf,
0x25,0xa6,0x08,0x7e,0xb6,0x98,0x22,0xf8,0xd9,0x62,0x8a,0xe0,0x67,0x8b,0x29,0x82,
0x11,0xfc,0x28,0x31,0x45,0x30,0x82,0x11,0x5c,0xb2,0x98,0x22,0x18,0xc1,0x63,0x54,
0xf3,0xaf,0x55,0xec,0xe1,0xc3,0x91,0x6c,0x08,0x5a,0x95,0x07,0x66,0x75,0xdb,0xb6,
0x72,0x8d,0x76,0x8c,0x7a,0x0c,0x36,0xc5,0x74,0xcc,0x14,0xd3,0x5f,0x4e,0x2f,0x4b,
0xe3,0xf8,0xe1,0xc8,0x62,0xc0,0xb5,0x91,0xfb,0xf1,0x68,0xeb,0x22,0xc0,0x1f,0xee,
0x9f,0x19,0xfb,0x3c,0x67,0x83,0x1a,0x3c,0x98,0xb5,0xdb,0xdc,0xb7,0xe1,0x36,0xba,
0x0e,0x6b,0x19,0x6c,0x30,0x8b,0xe1,0x26,0x44,0xa8,0xc8,0x10,0xc0,0x75,0x5e,0xee,
0x4c,0xae,0xe1,0x82,0x2f,0xf0,0x06,0xc4,0xf7,0x83,0xd9,0x15,0x5e,0xbf,0xf8,0x76,
0xf0,0x30,0x5f,0xfd,0xfd,0x5d,0x23,0x66,0x20,0xc1,0xb6,0xf7,0xdf,0x14,0xe9,0xbe,
0x6d,0x3b,0xd9,0x42,0x04,0xd7,0xd2,0x91,0x76,0x3a,0xd9,0xd9,0xce,0x29,0xbe,0x19,
0xcc,0x7c,0xde,0x34,0xb1,0xa7,0x9d,0x6b,0x18,0xdf,0x0c,0x36,0x3b,0xf4,0xbf,0x7f,
0xc7,0xc4,0xde,0x76,0x2d,0x34,0x30,0x0b,0x78,0xe3,0xc5,0xfe,0x76,0x8e,0x12,0xdf,
0x0b,0x6e,0x1d,0x89,0xf7,0xb2,0x69,0x64,0x32,0x78,0x6d,0xb5,0x53,0xe2,0x7b,0xc1,
0x8e,0x02,0xf7,0xaf,0x29,0xfa,0x78,0xb1,0xdd,0xca,0x28,0x31,0x03,0x05,0xae,0xb7,
0xe0,0x4f,0xe6,0x73,0xee,0xd1,0x60,0xa3,0x95,0xd1,0xae,0x06,0x05,0x6e,0x1d,0x95,
0x92,0xf2,0x93,0x7b,0x2c,0xb8,0x9f,0xbc,0xcd,0xda,0x2a,0xdc,0xa7,0x6f,0xdd,0xb5,
0x6c,0x37,0x05,0x96,0xfd,0x52,0x2e,0x19,0x29,0x1e,0x0e,0x6b,0xc6,0xca,0x36,0x4b,
0x2b,0xa3,0x4f,0x83,0x02,0x6f,0x7b,0xf4,0x54,0xa1,0xb4,0x12,0x4f,0x9f,0xd0,0xda,
0xad,0xf7,0xfa,0xf4,0xad,0x60,0x47,0x8f,0xd6,0xc0,0x7d,0x1a,0x58,0xba,0x67,0x3b,
0xd8,0x60,0xf9,0x6a,0xfa,0xfe,0x3b,0x1c,0x65,0x2c,0x78,0x68,0xd0,0xf4,0x72,0x6d,
0x05,0x16,0xcc,0x36,0xe0,0xaf,0x75,0x8a,0x26,0x01,0x6c,0xb4,0x0a,0x81,0xef,0xbd,
0x5d,0x6a,0x4d,0xb6,0x87,0xc0,0xfd,0x32,0x04,0x34,0x70,0x5f,0x0a,0xf8,0xf5,0x43,
0xe0,0x9f,0xeb,0xd2,0x5b,0xb0,0x3c,0x04,0x96,0xa0,0xc0,0x64,0xe7,0x3c,0xdc,0xeb,
0xa9,0x47,0x9f,0x96,0xa4,0xd5,0xca,0x68,0xc7,0xee,0x7d,0x6e,0x29,0x05,0x9c,0xb2,
0xf0,0x30,0x5a,0x19,0xed,0xaa,0xeb,0xc1,0xf1,0xb7,0x2e,0xb7,0x4b,0xcb,0xc6,0x1c,
0x8c,0xd1,0x4b,0x4b,0x73,0x08,0xeb,0x4b,0xcb,0x2a,0x3e,0x9d,0x83,0xce,0x84,0x4f,
0xa3,0xde,0x4c,0xd3,0x7d,0x72,0x8f,0xfe,0xeb,0xed,0x56,0xe6,0x2e,0x4f,0x92,0x29,
0xc5,0x70,0xa4,0xfc,0xdb,0x95,0xc7,0x3a,0x1e,0x65,0xca,0xe5,0xa1,0xd1,0x2a,0x70,
0xb5,0x94,0x56,0x3c,0xdf,0x4b,0x27,0x3a,0xbc,0x63,0x03,0xa0,0x71,0x4f,0xb6,0x3b,
0x1b,0x00,0x7a,0xab,0xc0,0x24,0x9d,0xde,0x69,0x33,0x8f,0x70,0xe7,0x16,0xcf,0x38,
0x12,0xfb,0xe4,0x2d,0x9e,0xa5,0x95,0xd9,0xee,0xa6,0x93,0x92,0xf7,0x36,0x5a,0xe4,
0x66,0xdc,0xd1,0x4d,0xbc,0xed,0xe5,0xf0,0xa5,0x78,0xf7,0x5b,0xfb,0xfb,0xf4,0xee,
0x36,0xed,0x30,0x54,0x9b,0xa4,0x6d,0xda,0xe0,0x10,0xce,0x48,0x0f,0xbf,0x8f,0xbf,
0xc4,0x7b,0x1b,0xf1,0xd3,0x79,0x27,0x61,0x23,0xde,0x5a,0x76,0xe4,0x99,0x76,0x1d,
0x4d,0x0f,0x4f,0x5b,0x3b,0xb7,0x5a,0xa4,0x17,0xec,0x6b,0x27,0x93,0x3a,0x71,0x22,
0x3b,0xfe,0xe8,0x40,0x89,0xc3,0x37,0xd3,0xa6,0x89,0x38,0xfa,0x66,0x9a,0x3d,0x47,
0xe7,0x2b,0x19,0x49,0xed,0x10,0x81,0x12,0x87,0xef,0x80,0x36,0x9e,0x02,0xfb,0x8e,
0x3f,0x3a,0x49,0xed,0x0d,0x80,0x33,0xb3,0x36,0xbb,0xe8,0xf6,0xf0,0xc1,0x02,0xef,
0xa2,0xe9,0xe9,0xd3,0x54,0x7d,0x99,0xb7,0x3d,0x7d,0x16,0xa2,0x97,0x9c,0x98,0xaf,
0x12,0xcb,0x5b,0xaf,0x0b,0x4f,0x8b,0x9b,0x66,0x9d,0xac,0xe3,0xbc,0x0c,0x92,0x37,
0x5d,0xdc,0x2c,0xf3,0x73,0xf3,0x2a,0xd1,0x6b,0x8a,0x63,0x66,0xae,0xef,0x19,0xa9,
0x79,0xc9,0x22,0xbd,0xe9,0x45,0x1e,0x16,0x1d,0x52,0xfa,0x56,0x97,0xd9,0xe7,0xab,
0xeb,0x8b,0xdc,0x46,0xf4,0xea,0x71,0xa5,0x15,0x51,0x5f,0x59,0xc3,0xf4,0xda,0xdb,
0x01,0x6d,0x04,0x25,0xf9,0x74,0x04,0xca,0xbb,0xb9,0x70,0xac,0xcf,0xaf,0x42,0xac,
0x27,0x69,0x09,0xbc,0xd8,0x79,0x50,0x2d,0x51,0x5b,0x53,0xe0,0x5c,0xd7,0xf6,0xc0,
0xf8,0xb0,0xf8,0x91,0x47,0x0d,0xdb,0xba,0xa2,0x25,0x78,0x9d,0x3b,0x22,0x6c,0xfc,
0xfe,0x43,0x9c,0x7b,0xfe,0xb2,0xc3,0xad,0x4f,0xaf,0x64,0xdc,0x04,0xaa,0x28,0xfb,
0x7c,0x9b,0xc3,0x11,0xe3,0xb7,0x3f,0x3c,0xdf,0x7e,0x81,0xe2,0xc9,0xb3,0x81,0x0f,
0xf7,0x67,0x94,0x38,0x2c,0xb9,0xee,0x5a,0x00,0xd6,0x6a,0x10,0xde,0x89,0xc8,0x9d,
0x96,0x82,0xad,0xba,0x82,0x77,0x5d,0x64,0x5e,0x25,0x5b,0x75,0x01,0x63,0x94,0xf1,
0xe8,0xf4,0x2a,0x33,0x96,0xaf,0xde,0x19,0x01,0x7e,0x22,0xee,0x94,0x88,0x14,0x57,
0x91,0x01,0x52,0xab,0x16,0xb2,0x50,0xaa,0xa2,0x09,0xde,0xc0,0x97,0x2c,0x21,0x8b,
0xd5,0x5a,0x64,0xce,0xa3,0xc6,0x5c,0xd4,0xd7,0x4b,0xe1,0x8a,0x95,0xd2,0xbb,0xf5,
0x30,0x94,0x73,0xcd,0x5a,0x40,0xc1,0xea,0x03,0x9e,0x1d,0x4c,0x29,0x9e,0xef,0x84,
0x0c,0x52,0xbc,0x80,0x67,0x89,0x52,0x5d,0xce,0x15,0x08,0x40,0xb1,0x32,0xc5,0x62,
0x6f,0xa6,0x4e,0x3c,0x0b,0x83,0x04,0x6f,0x2d,0x19,0xd7,0x1d,0xe0,0xc4,0x1a,0x78,
0x9d,0xb8,0x32,0xae,0x2e,0x21,0xaf,0x3f,0xb4,0x89,0x2b,0xe3,0x72,0xba,0x08,0x70,
0xe7,0xed,0xd5,0xf4,0x89,0x62,0xa1,0xfc,0x17,0x12,0x8f,0x04,0xfb,0x67,0xae,0xe0,
0x35,0x51,0x41,0xd7,0x4b,0x0e,0x12,0x13,0x82,0x6d,0xff,0x27,0xb0,0xea,0xb9,0x60,
0x31,0x0d,0x64,0x6a,0xfc,0x37,0x60,0x42,0xf1,0xe7,0x81,0x97,0x53,0x53,0xa7,0xba,
0xa1,0xc4,0x42,0x4c,0x46,0x3e,0xfd,0xd6,0x59,0x60,0xe2,0x07,0x93,0x72,0xc0,0x4b,
0xaa,0xe3,0xa5,0x13,0x57,0xe3,0xda,0x7a,0xf9,0x4d,0x58,0xb7,0x0e,0x22,0xc1,0x05,
0xed,0xcb,0x0e,0x75,0xfe,0x82,0x19,0xb5,0xc7,0x70,0x10,0x5c,0x52,0x89,0xcd,0x5b,
0x87,0xf3,0xcf,0x15,0xe2,0x8c,0xda,0x60,0xf2,0x1c,0x30,0xd9,0xf9,0xf9,0x52,0xcf,
0x03,0x93,0x9f,0x03,0x93,0xf3,0x60,0x52,0x16,0xd8,0x43,0x7e,0x32,0xd8,0x49,0xae,
0x4c,0xc4,0xc3,0xc0,0x0e,0x33,0x79,0x3a,0x38,0xf0,0x09,0x20,0x18,0xc1,0x08,0x46,
0x30,0x82,0x11,0x8c,0x60,0x04,0x23,0x18,0xc1,0x08,0xce,0x05,0x66,0xcf,0x06,0x2f,
0x1b,0xd7,0xdf,0x27,0x80,0x14,0x33,0x5e,0x54,0x3f,0x07,0x5e,0xaf,0x9d,0x79,0xa9,
0x5a,0x83,0x98,0x00,0x16,0x4a,0xbf,0x09,0x5d,0x8a,0x75,0x8a,0x13,0x60,0x55,0x8e,
0x5a,0xad,0x71,0x16,0x5c,0x00,0xda,0xc8,0x35,0x0b,0x18,0xb2,0xd9,0x4e,0x34,0x17,
0x18,0xa8,0xd9,0x91,0x66,0x3e,0x30,0x38,0xb3,0x3b,0xc7,0xac,0x60,0x48,0x64,0x5f,
0x86,0x29,0xe0,0xf5,0x8f,0x4c,0x29,0xd8,0x64,0x7f,0x7e,0xc2,0x10,0x86,0xc1,0xdc,
0x78,0x11,0x32,0x39,0x90,0x9d,0x59,0xb5,0x30,0x58,0xfb,0x70,0xb8,0x02,0x2c,0x0e,
0xe5,0x66,0x19,0xc2,0x60,0xeb,0x55,0xa8,0xe4,0x50,0x62,0x1d,0x33,0x09,0x61,0xb0,
0xfe,0xe7,0x60,0x89,0x6f,0x15,0xc7,0x7a,0xb9,0xda,0x07,0x6b,0xfd,0x01,0xac,0x38,
0xd8,0x9f,0x99,0xf9,0xec,0xc7,0x2e,0xd8,0x78,0xe6,0x87,0x83,0xec,0xd5,0x21,0x2e,
0xa7,0xb6,0x77,0x17,0x6c,0x88,0x99,0xe8,0xe0,0x89,0xfd,0xf9,0x18,0x0f,0x68,0x7d,
0xab,0x65,0x81,0xf9,0xb6,0x07,0x0b,0xba,0xfd,0x98,0x00,0x81,0xa3,0xa6,0xe7,0xa1,
0x54,0x8e,0x65,0x08,0x53,0x4e,0xb0,0xea,0x38,0x05,0x7c,0x76,0x8a,0x01,0x73,0xf1,
0x76,0xad,0xbb,0xb8,0xf9,0xa9,0x68,0x6b,0xab,0x37,0x67,0xbb,0x4b,0x4c,0x78,0xe0,
0x61,0x08,0x0f,0x21,0x84,0x78,0x8f,0xe1,0xa8,0xbb,0xef,0xc4,0x3b,0x1d,0xff,0x1e,
0x1a,0x8e,0xcd,0x55,0x41,0xe0,0x6f,0xea,0x9f,0x70,0xad,0xbb,0x5c,0x7d,0xda,0xd1,
0x08,0x92,0x78,0x27,0x23,0x3b,0x79,0xb1,0x29,0xa8,0xb5,0x30,0x51,0x09,0x5c,0x88,
0x60,0x2b,0x7f,0xb1,0x39,0x0b,0x19,0xb3,0x58,0x07,0xdf,0xbb,0x0b,0xd6,0x05,0x9d,
0x6b,0x4e,0x36,0x16,0x63,0x22,0xc9,0x0b,0x1e,0xcc,0x75,0x99,0x7b,0x39,0x96,0xe4,
0x85,0x76,0x22,0xde,0x88,0x99,0x76,0x9e,0x7a,0xeb,0xaf,0xaf,0x64,0x01,0xbd,0xc0,
0x49,0xa3,0x98,0xaf,0x5c,0x0d,0x34,0x9f,0x84,0xe6,0xd7,0x18,0xfc,0x02,0x27,0x95,
0x78,0x3a,0xb3,0x5a,0x22,0xfd,0x45,0xf1,0x2e,0xa0,0xc0,0x29,0x25,0x36,0x87,0xf4,
0x66,0x8c,0x3b,0x5e,0x05,0xba,0x05,0x70,0x02,0xfc,0x3e,0x0a,0x86,0xbb,0xc7,0x13,
0x0d,0x56,0x09,0x60,0xc8,0x9b,0x78,0x5e,0xf0,0xfb,0x38,0x18,0xf6,0x3e,0x6d,0x48,
0x78,0x08,0x0c,0x7d,0x27,0x3e,0x33,0x18,0xfe,0xbd,0x96,0xac,0xe0,0x02,0x6e,0xa6,
0xa9,0x48,0x61,0x0c,0xb8,0x8c,0xfb,0xa5,0xb9,0xc0,0x04,0x6e,0x5c,0x00,0x26,0xe0,
0x23,0x27,0x98,0x94,0x12,0x39,0xc0,0xa4,0xb8,0x38,0x0e,0x26,0x05,0x47,0x22,0x98,
0x3c,0x28,0x02,0x60,0x82,0x81,0x81,0x81,0x11,0x15,0xff,0x01,0xc2,0xdf,0x07,0x33,
0x2f,0x2c,0x60,0x6f,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82};
@@ -1,809 +0,0 @@
// Created with image_to_c
// https://github.com/bitbank2/image_to_c
//
// octocat_optimized
// Data size = 12735 bytes
//
// PNG, Compression=Flate, Size: 240 x 200, 32-Bpp
//
// for non-Arduino builds...
#ifndef PROGMEM
#define PROGMEM
#endif
const uint8_t octocat_optimized[] PROGMEM = {
0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,
0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xc8,0x08,0x06,0x00,0x00,0x00,0xd6,0x7c,0x6c,
0x52,0x00,0x00,0x00,0x06,0x62,0x4b,0x47,0x44,0x00,0xff,0x00,0xff,0x00,0xff,0xa0,
0xbd,0xa7,0x93,0x00,0x00,0x20,0x00,0x49,0x44,0x41,0x54,0x78,0xda,0xed,0x9d,0x77,
0x78,0x1c,0xd5,0xb9,0xff,0x3f,0x33,0xb3,0x4d,0xab,0xb6,0x6a,0xb6,0xaa,0x67,0x6d,
0xd9,0x72,0x05,0x0c,0xd8,0x18,0xb0,0x0d,0xa6,0x07,0x08,0x25,0x09,0x10,0x12,0xd2,
0x08,0x4a,0xc2,0x25,0x9d,0x24,0xa4,0x91,0x9b,0x9b,0x5f,0xca,0x4d,0x42,0x92,0x9b,
0xe4,0x92,0x0b,0x09,0xe2,0x86,0x70,0x93,0x00,0xa1,0x27,0x10,0x6a,0x42,0x2f,0xc1,
0x80,0x01,0x03,0x96,0xe5,0xb6,0xe3,0x22,0xab,0x6b,0xd5,0x56,0xdb,0x66,0xe6,0xf7,
0xc7,0x8c,0x64,0xc9,0x96,0xad,0x5d,0xd5,0x2d,0xe7,0xfb,0x3c,0xf3,0x48,0x5a,0xed,
0x94,0x73,0xe6,0xfd,0x9e,0xf7,0x9c,0xf7,0xbc,0x05,0x04,0x04,0x04,0x04,0x04,0x04,
0x04,0x04,0x04,0x04,0x04,0x92,0x80,0x94,0xed,0x1d,0xe0,0x57,0x55,0x2f,0xe0,0xb4,
0xfb,0x42,0x97,0x24,0x29,0xba,0x2b,0x10,0x88,0x08,0xd1,0x98,0x5d,0xcc,0xf7,0xfb,
0x5d,0xa6,0x69,0xba,0x00,0x87,0xfd,0x51,0x5c,0x51,0x94,0xd0,0x8e,0x9d,0x3b,0x0d,
0xd1,0x3b,0x82,0xc0,0x43,0xe4,0x3d,0x0b,0xb8,0x17,0xc8,0x1f,0x12,0x12,0xa0,0x03,
0xd8,0x03,0xbc,0x09,0xbc,0x0c,0x3c,0x1b,0xd0,0xb4,0x6d,0x42,0x54,0xa6,0xfd,0x5d,
0x54,0x03,0x6b,0xed,0x63,0x25,0x30,0x1f,0x28,0x03,0xdc,0xf6,0x57,0x06,0x81,0xff,
0x08,0x68,0xda,0x4f,0x45,0x6f,0x09,0x02,0x0f,0x09,0xcd,0xdd,0xc0,0x25,0xe3,0x7c,
0x4d,0x07,0x76,0x01,0xf7,0x03,0x77,0x06,0x34,0xed,0x75,0x21,0x36,0x53,0xd6,0xff,
0xf3,0x81,0x0f,0xd9,0xef,0x60,0x39,0xe0,0x1a,0xe7,0x94,0x00,0xb0,0x20,0xa0,0x69,
0xa6,0xe8,0xbd,0x2c,0x27,0xb0,0x5f,0x55,0xf3,0x6d,0x6d,0xeb,0x4a,0xf2,0xd4,0x77,
0x80,0xdf,0x01,0xb7,0x07,0x34,0x2d,0x28,0x44,0x28,0xe9,0x7e,0xf7,0x00,0xef,0x03,
0xae,0x06,0x4e,0x99,0xc0,0x25,0xd6,0x06,0x34,0xed,0x45,0xd1,0x93,0x16,0xe4,0x2c,
0x6e,0xfb,0x85,0x13,0x20,0x2f,0xb6,0xa6,0xf8,0x15,0xb0,0xc7,0xaf,0xaa,0x37,0xfa,
0x55,0x75,0xa1,0x10,0xa3,0x84,0x88,0x5b,0xe6,0x57,0xd5,0xef,0x00,0x3b,0x81,0x3f,
0x4f,0x90,0xbc,0x24,0x30,0x63,0x12,0x1a,0x38,0x4b,0x04,0xea,0x2f,0xc0,0xa5,0x53,
0x70,0xa9,0x28,0x70,0x0f,0xf0,0xff,0x02,0x9a,0xb6,0x55,0x88,0xd4,0xa1,0xc4,0x05,
0xbe,0x0e,0x7c,0x7a,0x84,0xad,0x61,0x32,0xd8,0x0a,0x2c,0x0f,0x68,0x9a,0x2e,0x7a,
0x37,0x4b,0x09,0xec,0x57,0x55,0x07,0xb0,0x1f,0x28,0x9d,0xc2,0xcb,0xea,0xc0,0x1f,
0x80,0xef,0x06,0x34,0x6d,0xaf,0x20,0xae,0x5a,0x00,0x7c,0x15,0xb8,0x16,0xc8,0x9d,
0xe2,0xcb,0x2f,0x08,0x68,0xda,0x2e,0x41,0xdf,0xec,0x9d,0x42,0x1f,0x35,0xc5,0xe4,
0x05,0x50,0x80,0x4f,0x02,0x4d,0x7e,0x55,0xfd,0x81,0xbd,0xc6,0xce,0xca,0xc1,0xd1,
0xaf,0xaa,0x9f,0x01,0xb6,0x01,0xdf,0x99,0x06,0xf2,0x02,0x9c,0x2e,0xa8,0x6b,0xc1,
0x91,0xa5,0xed,0x3e,0x79,0x1a,0xaf,0x9d,0x03,0x7c,0x1b,0xf8,0x84,0x5f,0x55,0xaf,
0x0b,0x68,0xda,0x9f,0xa7,0x91,0x2c,0x25,0x40,0x89,0x3d,0x35,0xcd,0xb3,0x0f,0x8f,
0xfd,0x5e,0x1d,0xf6,0xa0,0x12,0xb3,0x67,0x07,0x31,0x60,0x00,0x08,0x01,0x7d,0x40,
0x37,0xd0,0x15,0xd0,0xb4,0xfe,0x29,0x7c,0x9e,0xf5,0xc0,0x7f,0x03,0xc7,0x4c,0xf3,
0xfb,0x3b,0x09,0xb8,0x55,0xd0,0x37,0x7b,0x09,0xbc,0x7a,0x06,0xee,0x51,0x05,0xfc,
0xc9,0xaf,0xaa,0x57,0x01,0x57,0x27,0xb3,0x97,0xec,0x57,0x55,0x09,0x6b,0xff,0xb3,
0x1a,0x58,0x0a,0x2c,0x02,0xfc,0x40,0x0d,0xa0,0xda,0x9f,0x17,0x8f,0x98,0x41,0x25,
0xbb,0x14,0x1a,0xda,0x86,0x31,0xfd,0xaa,0x1a,0x03,0x9a,0x81,0xbd,0x58,0xfb,0xdf,
0x3b,0x81,0x1d,0x40,0x13,0xb0,0x05,0xe8,0x0b,0x68,0x5a,0x3c,0x81,0x81,0xe4,0x67,
0xc0,0xc7,0x67,0x68,0x59,0x76,0x82,0xa0,0x6e,0x76,0xaf,0x81,0x5f,0x07,0x8e,0x9d,
0xc1,0x5b,0x86,0x81,0xef,0x01,0x3f,0x0f,0x68,0x5a,0x6c,0x8c,0xe7,0x29,0x05,0x96,
0xd9,0x82,0x79,0x1c,0xb0,0xc2,0x26,0xad,0x27,0x05,0xba,0x6b,0xaf,0x4d,0xe6,0xd7,
0x81,0x8d,0xf6,0xcf,0x5d,0x43,0x46,0x24,0xbf,0xaa,0x5e,0x0e,0xfc,0x1a,0xcb,0xe9,
0x62,0xa6,0xa0,0x03,0x6e,0x61,0xc8,0xca,0x42,0x02,0xfb,0x55,0x35,0xc7,0xd6,0x34,
0x25,0xb3,0x70,0xfb,0x57,0x81,0x2b,0x81,0x16,0x60,0x83,0x7d,0x9c,0x0a,0xd4,0xda,
0x53,0xef,0x74,0x80,0x89,0x65,0x00,0xfc,0x97,0x3d,0xc0,0x9c,0x3b,0x4b,0xcf,0xb1,
0x34,0xa0,0x69,0x8d,0x62,0x0a,0x9d,0x7d,0xc8,0x9b,0x25,0xf2,0x02,0xac,0x02,0x36,
0xd9,0x03,0xa7,0x92,0xc6,0x83,0x7e,0x25,0x96,0x33,0xc6,0x6c,0x62,0x01,0x20,0x08,
0x9c,0x85,0x6d,0xae,0x14,0x7d,0x9e,0x11,0xa8,0x11,0x5d,0x90,0x9d,0xdb,0x48,0x73,
0xc4,0x6b,0xcf,0x08,0x94,0x88,0x2e,0xc8,0x4e,0x02,0x17,0x8a,0xd7,0x9e,0x11,0xf0,
0x89,0x2e,0xc8,0x4e,0x02,0xbb,0xc5,0x6b,0x17,0xef,0x51,0x10,0x38,0x7d,0xa1,0x88,
0xd7,0x2e,0xde,0xa3,0x20,0x70,0xfa,0x42,0x64,0xdb,0xc8,0x0c,0x44,0x45,0x17,0x64,
0x27,0x81,0x07,0xc4,0x6b,0xcf,0x08,0xf4,0x8b,0x2e,0xc8,0x4e,0x02,0xb7,0x89,0xd7,
0x9e,0x11,0xe8,0x14,0x5d,0x90,0x9d,0x04,0x6e,0x16,0xaf,0x3d,0x23,0xb0,0x5f,0x74,
0x41,0x76,0x12,0x38,0x28,0xa6,0x5f,0x19,0x81,0x1d,0xa2,0x0b,0xb2,0x77,0x0d,0xbc,
0x5b,0xbc,0xfa,0xb4,0x47,0xa3,0xe8,0x82,0x2c,0x24,0xb0,0x9d,0xd1,0x70,0xb3,0x78,
0xf5,0x69,0x8d,0xed,0x01,0x4d,0x13,0xc6,0x48,0xb2,0x37,0x23,0x87,0xc8,0x6a,0x28,
0xde,0x9f,0x20,0x70,0x1a,0xe3,0x69,0x0e,0x04,0xb5,0x0b,0xa4,0x1f,0xfe,0x21,0xba,
0x20,0x8b,0x09,0x1c,0xd0,0xb4,0xb7,0xb0,0x62,0x82,0x05,0x04,0x04,0x81,0xd3,0x14,
0x77,0x89,0xd7,0x9f,0xb6,0xb8,0xd5,0xaf,0xaa,0xe7,0x8b,0x6e,0xc8,0x6e,0x02,0x17,
0x89,0xd7,0x9f,0xb6,0x70,0x00,0x77,0xf9,0x55,0x75,0x8d,0x20,0x70,0x16,0xc2,0xaf,
0xaa,0xd7,0x01,0xf5,0x82,0x07,0x69,0x8d,0x5c,0xe0,0x41,0xbb,0x28,0x5a,0xd6,0x22,
0x1b,0x73,0x62,0x9d,0x07,0xfc,0x2d,0xcb,0x67,0x1f,0x99,0x84,0x8d,0xc0,0xba,0x80,
0xa6,0x65,0x65,0x70,0x83,0x92,0x65,0xe4,0xf5,0x03,0x8f,0x93,0x3e,0x09,0xe4,0x04,
0xc6,0x47,0x15,0x50,0x14,0xec,0xe9,0x79,0x44,0x10,0x38,0xb3,0xc9,0xeb,0x00,0xfe,
0x0e,0x88,0x62,0x64,0x99,0x87,0x55,0x3e,0x9f,0x6f,0x63,0xb0,0xa7,0x67,0xbb,0x58,
0x03,0x67,0x2e,0xae,0x03,0xd6,0x08,0x59,0xcf,0x58,0x39,0xbe,0x39,0x1b,0xcb,0xd9,
0x64,0x85,0x06,0xf6,0xab,0xea,0x62,0xe0,0x4e,0x44,0x46,0xc8,0x4c,0x46,0x21,0xe0,
0x09,0xf6,0xf4,0x3c,0x26,0x34,0x70,0xe6,0xe1,0x46,0x44,0x0e,0xa5,0x6c,0xc0,0xe7,
0xfd,0xaa,0xba,0x44,0x10,0x38,0xb3,0xb4,0xef,0xf9,0xc0,0x99,0x42,0xb6,0xb3,0x02,
0x0e,0xe0,0xa7,0xd9,0xd4,0x60,0x29,0xc3,0xc9,0x2b,0x03,0x6f,0x60,0x95,0x13,0x15,
0xc8,0x0e,0x18,0xc0,0x89,0x01,0x4d,0xdb,0x28,0x34,0x70,0xfa,0xe3,0x22,0x41,0xde,
0xac,0x83,0x0c,0x7c,0x5d,0x68,0xe0,0xf4,0xd7,0xbe,0x12,0xf0,0x3c,0xd3,0x5b,0x0b,
0x58,0x20,0x35,0x11,0x07,0x16,0x05,0x34,0x2d,0x20,0x34,0x70,0xfa,0xe2,0x38,0x41,
0xde,0xac,0x5e,0x0b,0x67,0x85,0xab,0x6c,0x26,0x13,0x58,0xf8,0x3a,0x67,0x37,0xae,
0xb4,0x67,0x61,0x82,0xc0,0x69,0x38,0x7d,0x76,0x02,0x1f,0x12,0x32,0x9c,0xd5,0xa8,
0xc4,0xaa,0xbd,0x2c,0x08,0x9c,0x86,0x38,0x0b,0x51,0xc4,0x4c,0x00,0xde,0x2f,0x08,
0x9c,0x9e,0xb8,0x58,0xc8,0xae,0x00,0x70,0x9e,0x20,0x70,0x7a,0xe2,0x6c,0x21,0xbb,
0x02,0x80,0xdf,0xaf,0xaa,0xb5,0x82,0xc0,0xe9,0xb5,0xfe,0xad,0x05,0xaa,0x85,0xec,
0x0a,0x60,0xf9,0xfa,0x9f,0x20,0x08,0x9c,0x5e,0x38,0x1e,0x51,0x7a,0x52,0xe0,0x00,
0x4e,0x16,0x04,0x4e,0x2f,0xac,0x12,0x32,0x2b,0x30,0x02,0xc7,0x08,0x02,0xa7,0x17,
0x56,0x08,0x99,0x15,0x18,0x81,0x5a,0xbf,0xaa,0xba,0x32,0xb5,0x71,0x19,0x15,0x1f,
0x6b,0x07,0x2f,0xa4,0x9c,0xd1,0x22,0x1a,0xd7,0x09,0xc5,0x74,0x62,0x86,0x89,0x53,
0x91,0x29,0xcc,0x71,0xe3,0x71,0x3a,0x88,0xc6,0xe3,0x74,0x87,0x22,0xc4,0x74,0x03,
0x09,0x70,0xc8,0x12,0x4e,0x59,0xc2,0xe5,0x50,0x70,0x28,0xf2,0xac,0xfb,0xb9,0x9a,
0x40,0x5c,0x37,0x88,0xc4,0x75,0xa2,0xba,0x81,0x6e,0x82,0x2c,0x4b,0x94,0x78,0x3d,
0x14,0xe6,0x7a,0xf0,0xb8,0x9c,0x98,0xa6,0x49,0xdf,0x60,0x84,0xfd,0xc1,0x7e,0xe2,
0xba,0x81,0xc7,0x21,0xe3,0x75,0x39,0x90,0xa5,0x94,0xf1,0xa1,0xa8,0x00,0xbc,0x64,
0x68,0x41,0xf0,0x4c,0x0b,0x70,0xf7,0x00,0x73,0x66,0x53,0xe0,0x9d,0x8a,0x8c,0x7f,
0x6e,0x09,0x6b,0x96,0x2e,0xa0,0xa2,0xb4,0x88,0xa2,0x7c,0x2f,0x79,0xde,0x1c,0x0a,
0x72,0xbd,0x38,0x14,0x19,0xcc,0x31,0x0a,0x42,0xd8,0xc2,0x1e,0xd7,0x0d,0x22,0xb1,
0x18,0xa1,0xc1,0x08,0x83,0x91,0x28,0xa6,0x69,0x12,0x8d,0xc7,0xe9,0x0b,0x85,0xe9,
0x1d,0x08,0x11,0x8f,0xeb,0xc4,0x74,0x83,0xe0,0x40,0x88,0xd6,0xae,0x5e,0x5a,0x3b,
0x83,0x0c,0x46,0xa3,0x98,0x26,0x18,0xa6,0x89,0x6e,0x98,0xe8,0x86,0x31,0xfc,0xf7,
0xd0,0xa5,0x65,0x49,0x42,0x96,0x24,0x1c,0x8a,0x8c,0x2c,0x49,0x48,0x12,0xb8,0x1c,
0x4e,0xca,0x4b,0x0a,0x99,0x5b,0x5c,0x48,0x51,0x9e,0xd7,0x1e,0x34,0x14,0x0a,0xf2,
0xbc,0xe4,0x7b,0x3d,0xb8,0x1c,0x16,0x09,0x73,0x3c,0x6e,0x72,0x73,0xdc,0xb8,0x9d,
0x4e,0x64,0x59,0x1a,0xfb,0xf9,0x47,0xb4,0x63,0x30,0x12,0xa3,0xbb,0xb7,0x8f,0x50,
0x24,0xca,0xbe,0xb6,0x4e,0x1a,0xf7,0xb4,0xb0,0x69,0xdb,0x6e,0xfa,0x07,0x23,0x48,
0xb3,0x43,0x6a,0xc9,0x26,0x71,0x30,0x13,0x09,0x9c,0x51,0xae,0x66,0x7e,0x55,0x2d,
0x66,0x16,0x0a,0x3f,0x47,0xe3,0x3a,0x6b,0x97,0x2d,0xe0,0x94,0x95,0x4b,0x58,0x50,
0x39,0x87,0xa2,0xfc,0xdc,0x61,0x02,0x01,0x98,0xc3,0x64,0x1a,0xdd,0xdd,0xe6,0x41,
0x64,0x48,0x54,0xc0,0x25,0x9b,0x2c,0x92,0x7d,0x8e,0x09,0xe8,0x86,0x41,0x4c,0xd7,
0xd1,0x75,0x03,0xd3,0x26,0x33,0x98,0xc8,0x92,0x8c,0x2c,0x4b,0x28,0xb2,0x8c,0x43,
0x51,0x50,0x14,0x19,0xd9,0xbe,0xb7,0x69,0x0f,0x3b,0x66,0x82,0x45,0x66,0x46,0x3e,
0xaf,0x24,0x49,0x63,0xb6,0xe7,0xe0,0xb6,0x4a,0x92,0x44,0x38,0x1a,0x63,0x77,0x6b,
0x07,0xaf,0x6e,0xd9,0xc9,0xc3,0xff,0x7a,0x9b,0x59,0xa8,0x6a,0x73,0x66,0x40,0xd3,
0x32,0xb2,0x1c,0x4b,0xa6,0x69,0xe0,0x19,0xf5,0xbe,0x32,0x0c,0x93,0x75,0x47,0xd5,
0x72,0xe1,0xba,0xe3,0xa9,0x2a,0x2d,0x1e,0x52,0xa4,0xb8,0x3d,0x6e,0xbc,0xde,0x1c,
0x72,0x3c,0x1e,0x5c,0x2e,0x27,0x4e,0xa7,0x13,0x45,0x51,0x90,0x64,0x69,0xd4,0x88,
0x69,0x9a,0x60,0x9a,0x06,0xba,0x61,0xa0,0xeb,0x06,0xba,0xae,0xa3,0xeb,0x3a,0xf1,
0xb8,0x4e,0x3c,0x1e,0xb7,0x0f,0xeb,0xf7,0x58,0x2c,0x8e,0x1e,0x8f,0x5b,0x1a,0xd6,
0x26,0xb1,0x39,0x74,0x11,0xfb,0x6f,0x97,0xa2,0x80,0x72,0x64,0x03,0xbc,0x69,0x18,
0xe8,0x63,0x90,0x52,0x96,0x65,0x1c,0x0e,0x07,0x0e,0x87,0x03,0xa7,0xd3,0x81,0xc3,
0xa1,0x0c,0xff,0xed,0xb0,0xb5,0xb3,0x32,0x7c,0xc8,0x36,0x41,0xa5,0x03,0x23,0x8a,
0x09,0x26,0x26,0x86,0x61,0x10,0x8f,0xc5,0x89,0x46,0x63,0x84,0x23,0x11,0x42,0xa1,
0x41,0xa4,0x81,0x10,0x8b,0xaa,0xcb,0xa9,0xab,0xa9,0xe0,0x3d,0x27,0x1e,0xc3,0xb3,
0x6f,0x6c,0xe1,0x8e,0xa7,0x5e,0xc5,0x21,0xcf,0x98,0xfe,0x28,0x15,0x6b,0xe0,0xf4,
0x80,0x6f,0xc6,0x46,0x0a,0xaf,0x87,0xab,0x2f,0x3e,0x9d,0x15,0xf3,0xab,0x91,0x24,
0x89,0xbc,0xbc,0x5c,0x8a,0x8b,0x8b,0x28,0xc8,0xcf,0xc3,0xe1,0x98,0x9e,0x5d,0xac,
0x21,0x0d,0x17,0x8f,0xeb,0xc3,0x64,0xd7,0x75,0x03,0xdd,0xd0,0x31,0x0c,0x03,0x43,
0x37,0x2c,0xcd,0x3f,0x42,0xbb,0x4a,0x48,0x96,0xb6,0x96,0x2c,0x2d,0x2c,0x2b,0x32,
0xb2,0x2c,0x0f,0x13,0xd1,0xa1,0x58,0x44,0x1d,0x4b,0xa3,0x4e,0x14,0x6e,0x97,0x8b,
0xdc,0xdc,0xd1,0xcf,0xdd,0x3f,0x10,0xa2,0xbb,0xdb,0x9a,0xc5,0x5e,0xb4,0x7e,0x15,
0xc7,0x2f,0x59,0xc0,0xef,0x1f,0x7e,0x86,0xad,0x7b,0xdb,0x32,0x6e,0x60,0x17,0x04,
0x9e,0xdc,0x1a,0x78,0xda,0xb1,0xb4,0x66,0x2e,0xff,0xf6,0xbe,0x33,0x29,0x2e,0xc8,
0xa3,0xb0,0xb0,0x80,0xf2,0xb9,0x65,0xe4,0xe4,0x4c,0xff,0xad,0x87,0x48,0xe6,0x72,
0xc9,0x80,0x33,0x7d,0xd6,0x69,0x92,0x44,0x7e,0x5e,0x2e,0xf9,0x79,0xb9,0x54,0x54,
0xcc,0xa5,0xad,0xad,0x03,0x49,0x92,0xf8,0xda,0x87,0xdf,0xcb,0x9d,0x4f,0xbe,0xc8,
0x13,0xaf,0x6d,0x99,0xee,0xf5,0xb1,0xb0,0x42,0x8b,0xf6,0x58,0x58,0xb3,0xc4,0xcf,
0x55,0x17,0x9c,0x46,0x41,0xae,0x97,0x79,0x35,0x95,0x14,0x14,0x64,0x5d,0x26,0xd3,
0x49,0xc1,0xe9,0x70,0x50,0x55,0x59,0x4e,0x49,0x71,0x11,0xda,0xee,0xbd,0x7c,0xf4,
0x3d,0xeb,0x29,0xf0,0xe6,0x70,0xdf,0xf3,0x9b,0x04,0x81,0x05,0x81,0xa7,0xd7,0x3a,
0xb2,0x6a,0xd1,0x3c,0x3e,0x75,0xe1,0xe9,0x14,0x15,0xe6,0xb3,0x60,0xbe,0x8a,0xd3,
0x29,0xb2,0xd4,0x4e,0x78,0xaa,0xe4,0x71,0xb3,0x68,0xe1,0x7c,0x76,0xef,0x69,0xe6,
0x7d,0xa7,0xae,0xc6,0x04,0xee,0x9f,0x3e,0x12,0xeb,0x82,0xc0,0xe9,0x81,0xd8,0x74,
0x5d,0x78,0x7e,0x79,0x09,0xf5,0x17,0x9e,0x46,0x49,0x91,0x8f,0x05,0xf3,0x6b,0x50,
0x14,0xe1,0xad,0x39,0x59,0xc8,0xb2,0x8c,0x3a,0xaf,0x1a,0x45,0x91,0xb9,0x68,0xfd,
0x2a,0x82,0xfd,0x03,0x3c,0xf5,0x46,0x93,0xe8,0x98,0x2c,0x26,0x70,0x7c,0x5a,0x2c,
0x20,0xb9,0x1e,0xbe,0x78,0xe9,0x39,0xcc,0x2d,0x29,0x66,0xc1,0xfc,0x79,0x28,0xca,
0x04,0x1c,0xd8,0x24,0x09,0xc9,0x65,0x95,0x64,0x32,0x23,0x83,0xcc,0xc2,0x56,0xca,
0xf4,0x4e,0x7c,0x24,0x19,0xc9,0x69,0xb7,0x2f,0x1a,0x4a,0xa6,0x5b,0xa8,0xa9,0xae,
0x04,0xe0,0xc3,0x67,0xad,0xa3,0xad,0xbb,0x8f,0x77,0xb4,0xfd,0x69,0x21,0x17,0x82,
0xc0,0x53,0x8f,0xd0,0x54,0x5f,0xd0,0x30,0x4d,0xfe,0xed,0xa2,0x33,0xa8,0x9a,0x53,
0xca,0xfc,0x09,0x90,0x57,0x29,0x98,0x83,0xb3,0xbc,0x16,0x25,0xbf,0x18,0x24,0xeb,
0x5c,0xd3,0x34,0x30,0xfa,0x3a,0x89,0xb5,0xec,0x40,0xef,0x6d,0x4f,0xeb,0x0e,0x57,
0x0a,0xe7,0xe2,0x9c,0xbb,0x60,0x54,0xfb,0x30,0x0d,0xf4,0xde,0x4e,0x62,0xad,0x89,
0xb7,0xaf,0xba,0xaa,0x82,0x78,0x3c,0xce,0x55,0x17,0x6c,0xe0,0xab,0xff,0x73,0x17,
0x86,0x61,0x08,0x02,0x27,0xd2,0xff,0x99,0xd4,0x18,0x9f,0xcf,0xe7,0x01,0xae,0x9d,
0xca,0x6b,0x5e,0xbc,0x76,0x25,0x67,0xae,0x3e,0x8a,0x85,0xb5,0x7e,0x5c,0xae,0xc4,
0x2d,0xbf,0x92,0xe2,0xc4,0x5d,0xbb,0x0a,0x57,0xf5,0x12,0x64,0x4f,0xae,0x25,0xdc,
0xd2,0xd0,0x96,0x8e,0x8c,0xec,0xc9,0xc5,0x51,0x5a,0x83,0x9c,0x53,0x80,0xd1,0xdb,
0x0e,0xa6,0x91,0x56,0x7d,0x7d,0xa4,0xf6,0x31,0xaa,0x7d,0xf9,0xe8,0xbd,0x6d,0xe3,
0xb6,0x4f,0x92,0x24,0x0a,0x0a,0xf2,0xd1,0xa3,0x51,0x2a,0x8a,0xf2,0x79,0xe1,0xed,
0x1d,0x53,0xe9,0x8e,0x79,0x77,0xb0,0xa7,0xe7,0xcd,0x8c,0x5c,0x86,0x08,0x0d,0x7c,
0x84,0x01,0x21,0x37,0x87,0xf3,0x4e,0x3e,0x96,0x9a,0xea,0x4a,0xdc,0xee,0xc4,0x0d,
0x99,0x92,0xc3,0x8d,0x67,0xe9,0x3a,0x1c,0x45,0xe5,0xe3,0x4f,0x81,0x8a,0x2b,0xf0,
0x2c,0x59,0x8b,0xe4,0x48,0x1f,0x43,0xa9,0xe4,0x4c,0xa6,0x7d,0x95,0xe4,0x2c,0x59,
0x97,0x50,0xfb,0x14,0x59,0xc6,0xef,0xaf,0xe1,0xf8,0x25,0x0b,0x38,0x69,0xd9,0xfc,
0xa9,0x7c,0xe4,0x48,0xc6,0xda,0x11,0x32,0x70,0x0d,0x3c,0x65,0x2f,0xeb,0x63,0xe7,
0xac,0xa5,0xba,0x62,0x0e,0x3e,0x5f,0x41,0x12,0xd2,0x2d,0xe3,0xa9,0x5b,0x83,0x9c,
0x93,0xf8,0xf6,0x92,0xec,0x2d,0xc0,0xb3,0xe8,0xc4,0x61,0x9f,0xe8,0xd4,0x66,0xaf,
0x8c,0x67,0xd1,0x89,0x49,0xb7,0xcf,0xbd,0x68,0xcd,0x81,0x29,0xf6,0x11,0xe0,0x71,
0xbb,0xa9,0xa9,0xaa,0xe0,0xe2,0xf5,0xab,0x46,0xb9,0xa3,0x4e,0x12,0xfd,0x82,0xc0,
0xe9,0x81,0x28,0xd0,0x3b,0x15,0x17,0xaa,0x2a,0x29,0x64,0xd5,0xd2,0x5a,0xaa,0x2a,
0xcb,0x93,0x3a,0xcf,0x55,0xbd,0x0c,0x39,0xf7,0xf0,0x0e,0x61,0xa6,0x69,0x8c,0x19,
0x10,0x20,0xe7,0xf9,0x70,0x55,0x2f,0x4f,0xf9,0x0e,0x76,0xcd,0x5b,0x81,0x9c,0x7b,
0xa8,0x63,0x93,0x69,0x18,0x47,0x0c,0x74,0x50,0xf2,0x8a,0x70,0x56,0x25,0x56,0x77,
0xac,0xa4,0xa4,0x88,0xa5,0x0b,0x6a,0x38,0xe3,0xd8,0x29,0xab,0x53,0xd6,0x9b,0xa9,
0x04,0x76,0x64,0x20,0x81,0x83,0x40,0xd9,0x64,0x2f,0x74,0xe1,0xda,0x63,0xa9,0xa9,
0x2a,0xc7,0xe1,0x48,0xbc,0x8b,0xe4,0x9c,0x02,0x9c,0x73,0xc7,0x9e,0xfa,0x75,0x06,
0x76,0xb2,0xf3,0xb9,0x67,0xe8,0xde,0xd1,0x84,0x24,0xc9,0x14,0x2f,0x5e,0x4a,0xed,
0x29,0xa7,0xe1,0xab,0xac,0x1a,0xfe,0x8e,0x73,0xae,0x9f,0x78,0xc7,0x6e,0x8c,0xc1,
0xd4,0x94,0x37,0xd9,0xeb,0xc3,0x59,0xa6,0x8e,0xfa,0xac,0x7d,0xe7,0x76,0x76,0x3d,
0xf7,0x34,0xc1,0x9d,0xdb,0x91,0x14,0x85,0xd2,0x25,0xcb,0xa9,0x3d,0xe5,0x34,0x0a,
0xca,0x2b,0x0e,0x25,0x7f,0xf9,0x02,0xf4,0x8e,0xdd,0x18,0xe1,0xfe,0x71,0xd7,0xc3,
0x15,0xe5,0x73,0x38,0xfd,0xf8,0xe5,0x3c,0xf5,0xc6,0xd6,0xa9,0x78,0xf4,0x9e,0x4c,
0x25,0x70,0x46,0x19,0xb1,0x82,0x3d,0x3d,0xa6,0xcf,0xe7,0xbb,0x1c,0xa8,0x99,0xd4,
0xa8,0xa6,0x28,0x5c,0x75,0xc1,0x69,0xd4,0x2d,0xf4,0x27,0xe1,0xe2,0x67,0xe2,0xf2,
0x1f,0x8b,0x9c,0x93,0x77,0x88,0x66,0x7a,0xe7,0xe1,0xbf,0xf2,0xda,0x8d,0x3f,0xa3,
0x67,0xc7,0x56,0xa2,0xdd,0x9d,0x44,0xba,0x3a,0x08,0x6e,0xdb,0x42,0xe0,0xa9,0xc7,
0x51,0x0a,0x8b,0x29,0x99,0xbf,0x60,0x48,0x72,0x91,0x1c,0x6e,0xf4,0xee,0xe6,0x94,
0xec,0x5f,0xb7,0xff,0x98,0xe1,0xf6,0x99,0x86,0xce,0x5b,0x0f,0xdc,0xcb,0xa6,0x9b,
0x7f,0x49,0xef,0xce,0x6d,0xc3,0xed,0xea,0x6e,0x7a,0x97,0x5d,0xff,0x7c,0x1c,0x57,
0xe9,0x1c,0x8a,0xe7,0xf9,0x0f,0x66,0x26,0x92,0xd3,0x8d,0xde,0xbd,0x8f,0xf1,0x02,
0xe1,0x5c,0x2e,0x17,0x4e,0x09,0x5e,0x78,0xb3,0x91,0xde,0x50,0x78,0xb2,0x8f,0xfe,
0xa3,0x60,0x4f,0x4f,0x46,0x6a,0xe1,0x4c,0xcc,0xc8,0xb1,0x7b,0xb2,0x17,0x58,0xbd,
0x58,0x65,0xa1,0x5a,0x85,0x2c,0x27,0xde,0x3d,0x92,0x2b,0x17,0x87,0xef,0x50,0xc5,
0xbf,0xe5,0xf1,0x47,0xd8,0x7a,0xe7,0x6d,0x63,0x4e,0x2f,0x4d,0x5d,0x67,0xf3,0xad,
0xbf,0x61,0xc7,0x0b,0xcf,0x1e,0x18,0x3c,0x8a,0xe6,0x22,0x39,0x3d,0x29,0xd7,0xa9,
0x92,0xcb,0x8b,0x52,0x78,0x20,0xd4,0xfa,0xed,0x87,0xfe,0xca,0xf6,0x7b,0xff,0x7c,
0x98,0x76,0xc5,0x79,0xe3,0xb7,0xbf,0x22,0xf0,0xca,0x4b,0x87,0x0e,0x8e,0xbe,0xf2,
0xe1,0xfd,0xe2,0xf1,0x50,0x56,0x56,0xc2,0xd9,0xab,0x27,0x9d,0x60,0xc5,0x10,0x6b,
0xe0,0xf4,0xc2,0xae,0xc9,0x5e,0xe0,0xf8,0xc5,0x7e,0x7c,0xbe,0xe4,0x02,0x58,0x1c,
0x25,0x55,0x87,0x18,0x69,0x3a,0x03,0x3b,0x69,0xfc,0xd3,0xad,0x54,0x6d,0x38,0x87,
0xaa,0x0d,0x67,0x23,0x8d,0x35,0x20,0x48,0x12,0x6f,0xde,0x72,0x23,0xbd,0xad,0x2d,
0xc3,0x46,0x22,0x47,0x49,0xea,0x25,0xd5,0x74,0x94,0x54,0x0f,0x1b,0xd9,0xda,0xb6,
0x35,0xd1,0x74,0xd7,0x6d,0x98,0xa6,0x41,0xbe,0xbf,0x16,0x67,0x6e,0xde,0x98,0xe7,
0x6c,0xfa,0xed,0xaf,0x19,0xe8,0xec,0x38,0x48,0xe2,0x64,0x1c,0xc5,0x55,0x09,0xdd,
0xb3,0x20,0x3f,0x8f,0xc5,0xfe,0x2a,0xe2,0xfa,0xa4,0xb6,0xd8,0x7a,0xc8,0xd0,0x6c,
0x1c,0x99,0x4a,0xe0,0x6d,0x93,0xbd,0xc0,0x22,0xb5,0x2a,0xa9,0x6d,0x23,0x30,0x51,
0x0a,0xe7,0x1e,0xf2,0xe9,0xe6,0xbb,0xef,0x60,0xf5,0xb5,0xdf,0xe6,0xc4,0xfa,0xab,
0x39,0xf1,0xaa,0xab,0x59,0xfd,0xe5,0x6f,0x1d,0x56,0x63,0xbd,0xfb,0xd0,0x03,0x07,
0xd6,0x35,0x63,0x5c,0x6b,0xd6,0xd7,0x5a,0xbe,0x03,0xcf,0xb4,0xf9,0xae,0xff,0xc3,
0x04,0x56,0x7f,0xf9,0xdb,0x9c,0xf5,0xbd,0x9f,0xf0,0x9e,0x5f,0xdc,0x8c,0x6f,0xc9,
0xa1,0x55,0x5c,0x8d,0x68,0x84,0x2d,0x8f,0x3e,0x74,0x98,0x6b,0x8d,0x6f,0x61,0x96,
0x24,0x89,0x25,0x0b,0xe6,0x11,0x8a,0x4f,0xca,0x95,0xb9,0x0b,0xb1,0x8d,0x94,0x56,
0xd8,0x32,0x99,0x93,0xe3,0x86,0x81,0xbf,0xba,0x22,0xc9,0x5e,0x74,0x22,0x7b,0x47,
0x6f,0xab,0x04,0xf7,0xed,0x25,0xd8,0xf4,0x0e,0x73,0xeb,0x16,0x0f,0x7f,0x56,0x5e,
0xb7,0x18,0x87,0x37,0x77,0xcc,0x4b,0xec,0x7b,0xea,0x31,0x06,0x83,0xdd,0x96,0x80,
0xe7,0xf9,0x52,0xab,0x47,0x25,0x09,0xc5,0xb6,0x3c,0x77,0x06,0x76,0x11,0x6c,0x7c,
0x1b,0x87,0x27,0x87,0xea,0xa3,0x57,0x22,0xc9,0x32,0x2e,0xaf,0x97,0x79,0xeb,0x36,
0x8c,0x79,0xaa,0xf6,0xe8,0x5f,0x89,0xf4,0xf5,0x8d,0xee,0x2e,0x6f,0x01,0xc8,0x89,
0x19,0x07,0x8b,0x7d,0x05,0xac,0x5d,0xa2,0x4e,0xe6,0xe9,0x5b,0x02,0x9a,0xa6,0x0b,
0x02,0xa7,0x0f,0x76,0x02,0x13,0xb6,0x7a,0xe8,0x86,0x49,0x59,0x51,0x72,0x04,0x92,
0x5d,0x39,0x48,0xca,0x68,0x2f,0xad,0x96,0x2d,0xef,0xa0,0x87,0xc3,0x0c,0x74,0x75,
0x0d,0x7f,0xd6,0xdf,0xd5,0x45,0x3c,0x3c,0x78,0x58,0x92,0xb4,0x34,0xda,0x63,0x8f,
0xac,0x20,0x7b,0x52,0x27,0x4c,0x51,0xce,0x29,0x1c,0x5e,0x1e,0xec,0x7f,0x77,0x33,
0x48,0x12,0xf1,0xc1,0x41,0x7a,0xdb,0x5a,0x0f,0x2c,0x17,0xb6,0x1f,0x3e,0x08,0xa1,
0x75,0xdb,0x68,0x4b,0xb2,0xe4,0x70,0x25,0xbc,0xce,0xcf,0xcb,0xf5,0x52,0x9c,0xe7,
0x9d,0x55,0x9b,0x48,0x2a,0x23,0xe3,0xe2,0xe1,0x02,0x9a,0xd6,0xe6,0x57,0xd5,0x56,
0x60,0x42,0xc3,0x76,0x81,0xd7,0x93,0xe4,0xf4,0x19,0xa4,0x31,0x9c,0x1a,0xda,0x36,
0xbf,0x01,0xc0,0x4b,0xbf,0xbe,0x81,0x25,0xef,0xfb,0x20,0x00,0x8d,0xf7,0xff,0xe5,
0x88,0x7b,0xa5,0x9d,0xdb,0x9b,0x98,0x7f,0xe2,0xc9,0x07,0xae,0x19,0xee,0x4b,0x11,
0x02,0x1f,0x68,0x5f,0xdb,0x1b,0xaf,0x5b,0xcf,0xa7,0x28,0x3c,0xf7,0xa3,0x7f,0x47,
0x3d,0xeb,0x7c,0x7a,0xf7,0xee,0xa6,0xed,0x95,0xe7,0x0f,0xdf,0xae,0x9d,0x3b,0x98,
0x77,0xdc,0xe8,0x74,0xdd,0xb2,0x27,0x0f,0x3d,0x32,0x30,0xfe,0xd4,0x5d,0x51,0x28,
0x4e,0xc6,0x91,0x66,0xec,0x01,0x5d,0x10,0x38,0xcd,0xf0,0xaf,0xc9,0x10,0x38,0xd9,
0x38,0xdf,0xa1,0x28,0xa3,0x91,0xe8,0xdb,0xbb,0x07,0x80,0xc1,0x96,0x7d,0x6c,0xba,
0xe9,0x17,0x09,0x5d,0x27,0xb8,0xe3,0x80,0x16,0x4b,0x25,0x4b,0xf4,0x90,0x1b,0xa4,
0xa9,0xeb,0x0c,0xb4,0x1e,0xd8,0xe2,0x8a,0xf5,0xf5,0xb0,0xfd,0xbe,0x3f,0x8f,0x6f,
0x45,0xda,0xd1,0x94,0x50,0x9f,0x1d,0x6e,0x1d,0x5c,0x90,0x9f,0x37,0x99,0xc7,0xdf,
0x9a,0xc9,0x04,0xce,0xd4,0xe2,0x66,0x2f,0x4e,0xf4,0xc4,0xde,0x81,0x70,0xd2,0xb1,
0xbe,0x92,0x3c,0xfa,0xfb,0x7a,0x24,0x82,0x3e,0x38,0x90,0xf4,0xbd,0x23,0xfd,0x7d,
0x23,0xae,0x99,0x42,0xaf,0xc6,0x5e,0xaf,0xc6,0x23,0x61,0x8c,0xc1,0xe4,0xdd,0xcd,
0xc3,0x3d,0xc1,0x31,0xfa,0xcc,0x91,0x30,0x81,0xcd,0xc9,0x85,0x5e,0xbe,0x2b,0x08,
0x9c,0x7e,0x78,0x7a,0xa2,0x27,0xf6,0x84,0xc2,0x30,0x49,0x1f,0x5c,0xd3,0x34,0x27,
0x16,0x5d,0x64,0xa4,0x6a,0x8c,0xb0,0x39,0xdc,0x2e,0x73,0x02,0x7d,0x63,0x4e,0x32,
0x34,0x30,0x36,0x71,0x2b,0x74,0x08,0xd8,0x21,0x08,0x9c,0x7e,0xeb,0xe0,0x37,0x81,
0x8e,0x89,0x0a,0x6b,0x28,0x92,0xdc,0xb6,0xa1,0xa9,0x8f,0x0e,0x37,0x55,0x5c,0x2e,
0x24,0x77,0xf2,0x53,0x60,0x47,0x4e,0xce,0x08,0xa1,0x4f,0x21,0xc3,0xa9,0xfd,0x2c,
0x8a,0xd3,0x85,0xec,0x72,0x27,0x7d,0xba,0x2b,0x37,0x77,0x0c,0x52,0x27,0x16,0xa2,
0x6b,0x9a,0x26,0xe1,0xc8,0x84,0xb7,0x71,0xf7,0x04,0x34,0x2d,0x28,0x08,0x9c,0x9e,
0x78,0x64,0x22,0x27,0x39,0x15,0x99,0xbe,0x81,0xe4,0xa6,0x89,0x66,0x74,0xf0,0xa0,
0xe9,0xa1,0x8c,0xb7,0x24,0xf9,0x02,0x11,0xf9,0x55,0x07,0x3c,0x40,0xcd,0x58,0xea,
0x6c,0x5d,0x0e,0x3d,0x8b,0xe2,0x72,0xe1,0x2e,0x2a,0x49,0xbe,0x5d,0x35,0xfe,0x43,
0xaf,0x19,0x49,0xac,0x8f,0x75,0xc3,0xa0,0xa5,0x73,0xc2,0x1c,0x7c,0x91,0x0c,0x47,
0x26,0x13,0xf8,0x81,0x09,0x75,0x88,0x24,0x33,0x30,0x98,0x1c,0x79,0xcc,0x31,0xac,
0xc5,0xa5,0x2b,0x92,0x2f,0x8a,0x57,0x52,0xb7,0xf4,0xc0,0x35,0x53,0x28,0xa0,0x61,
0x64,0x70,0xc5,0x44,0xda,0x55,0xbc,0x60,0xe1,0xa1,0xd7,0x0c,0x27,0xe6,0xdd,0xa8,
0xeb,0x06,0x3b,0xf6,0x4d,0x38,0x77,0xf4,0x73,0x99,0x4e,0xe0,0x59,0xb7,0x42,0xfb,
0x55,0x55,0xb1,0x9f,0x43,0xb1,0x07,0x14,0x05,0x2b,0x0d,0x68,0x0e,0x56,0x51,0x2a,
0x97,0x7d,0x38,0xed,0xff,0x1f,0xfc,0xcc,0x06,0x56,0xd6,0xc1,0x18,0x96,0xc7,0x4d,
0x04,0x6b,0x1f,0x78,0xb3,0xbd,0x06,0x4a,0x6a,0x13,0x51,0x92,0xa0,0x33,0xd8,0xcb,
0xfc,0xaa,0xc4,0xbd,0xa1,0x8c,0xe8,0x20,0x66,0x3c,0x86,0xe4,0x38,0xb0,0x17,0x3c,
0x77,0xe9,0x32,0xb6,0x27,0xb7,0x70,0x66,0x8e,0xed,0xf4,0x61,0x1a,0xf1,0x84,0x05,
0x7c,0x46,0x08,0x1c,0xee,0x03,0xc3,0x00,0x59,0xa6,0x7c,0xf9,0x51,0x04,0x1e,0xbe,
0x6f,0x42,0xed,0x1a,0xa9,0xd1,0xcd,0x78,0x62,0x83,0xa4,0x6e,0x18,0xbc,0xb2,0x63,
0x3f,0xfe,0xe2,0xdc,0x89,0x3c,0xfa,0x6b,0x7e,0x55,0x2d,0xb1,0x65,0x29,0x07,0x2b,
0x6f,0xb8,0xdb,0x96,0xa1,0x21,0x99,0x3b,0x64,0xc9,0x6d,0x1f,0xf1,0x11,0xb2,0x14,
0x06,0x06,0x6d,0x39,0x1b,0x3a,0xe2,0x80,0x1e,0xd0,0x34,0x33,0xe3,0x08,0xec,0x57,
0x55,0x07,0x50,0x6c,0x1f,0xe5,0x07,0x1d,0x65,0x58,0x05,0xc8,0x4a,0x46,0x90,0x52,
0x1a,0x71,0x30,0xa2,0xc3,0x06,0xed,0x4e,0x8c,0x8e,0xe8,0xd4,0x83,0x2d,0x22,0x92,
0x7d,0x1d,0x87,0x4d,0x74,0xcf,0x88,0xa3,0x2b,0x59,0x02,0x03,0x34,0xb7,0x77,0x02,
0x8b,0x92,0x90,0xf0,0x38,0xc6,0x60,0x2f,0x4a,0xfe,0x81,0xe9,0xe5,0x9c,0x85,0x75,
0x78,0x4a,0xe7,0x12,0xee,0x68,0x4d,0xe8,0x12,0x05,0x8b,0x96,0x52,0x54,0x6d,0x4d,
0xa1,0x8d,0xfe,0x14,0x5b,0xb6,0x99,0x26,0xfa,0x40,0x10,0x25,0xbf,0x98,0xf2,0xc5,
0x4b,0x71,0x16,0xf8,0x88,0xf5,0x26,0xf6,0x8c,0xc5,0x47,0x1d,0x7b,0x48,0x68,0xa1,
0x11,0xea,0x05,0x23,0x4e,0x22,0xa5,0xb9,0x3a,0xba,0x7b,0x29,0xf4,0x4c,0x28,0x68,
0xae,0x0f,0xb8,0xdd,0x96,0x9b,0x41,0x7b,0x30,0x0f,0xdb,0xb2,0x14,0x1d,0x41,0xc4,
0x43,0x56,0x51,0xb6,0x2c,0x39,0x0f,0x92,0x25,0xaf,0x4d,0x78,0xd3,0x3e,0x0c,0xc0,
0xf4,0xab,0xaa,0x81,0x15,0xc2,0xda,0x01,0xb4,0x03,0x2d,0x40,0xab,0xfd,0x73,0xbf,
0xfd,0x79,0x57,0x40,0xd3,0x06,0x52,0x8a,0xc0,0x76,0xcd,0xd5,0x85,0x40,0x9d,0xfd,
0x73,0x3e,0x56,0x69,0xcf,0x5a,0xbb,0x81,0x9d,0x36,0x81,0x5a,0x46,0x1c,0xaf,0xda,
0x8d,0xec,0xb0,0xff,0x17,0x1e,0x39,0xe2,0x4d,0xb5,0xcb,0x9b,0x5f,0x55,0x37,0x00,
0x4f,0x25,0x7b,0xde,0xa6,0xc6,0x9d,0x5c,0x7c,0xda,0x49,0x49,0x64,0x84,0x90,0x88,
0x77,0xb7,0x8e,0x22,0xb0,0xec,0x70,0xb0,0xfc,0xf2,0x8f,0xf2,0xda,0x7f,0xdf,0x30,
0x6e,0xa6,0x0d,0xd3,0xd0,0x59,0x71,0xe9,0x87,0x0f,0x54,0x29,0x0c,0xb6,0xa4,0xdc,
0x54,0x4d,0x0f,0xb6,0xa2,0xe4,0x17,0xa3,0xb8,0x5c,0x2c,0xbb,0xfc,0x63,0xbc,0xf9,
0xdb,0x5f,0x8d,0xdf,0x2e,0x5d,0x67,0xf9,0xfb,0x3f,0x78,0xc8,0xe7,0x56,0xfb,0x12,
0x0b,0xd3,0xec,0xec,0xe9,0xa5,0x30,0xc7,0x3d,0x91,0x47,0xfe,0x4d,0x40,0xd3,0xbe,
0x39,0x0d,0xca,0x49,0x3a,0x88,0xe4,0x2e,0xa0,0x00,0xab,0xfe,0x52,0x99,0xad,0xa4,
0x2a,0x80,0x95,0x40,0x95,0xad,0xa8,0x8a,0xfd,0xaa,0x5a,0x08,0xec,0xc3,0xb2,0x8a,
0xef,0x04,0xb6,0xdb,0xc7,0xb6,0x80,0xa6,0x75,0x4c,0x0b,0x81,0x17,0xd6,0xd6,0x4a,
0xf1,0x78,0xdc,0x03,0x54,0x03,0xc7,0x03,0x47,0x03,0xcb,0x6c,0xc2,0xe6,0x62,0x6d,
0x92,0x6f,0xc5,0x0a,0x20,0x78,0x18,0x2b,0x12,0x28,0x10,0xd0,0xb4,0xc1,0x54,0x10,
0xba,0x80,0xa6,0x3d,0xed,0x57,0xd5,0x46,0x20,0xa9,0xd4,0x0e,0xaf,0xbe,0xbb,0x9d,
0x70,0x34,0x86,0x2b,0x09,0x87,0x0e,0xbd,0x6b,0x2f,0x54,0x2f,0x81,0x11,0xfb,0xb7,
0xea,0xea,0x35,0xec,0x5e,0xbd,0x96,0xf6,0x57,0x8f,0x6c,0x4b,0x99,0x77,0xd6,0x05,
0x94,0x2f,0xb5,0xb3,0x71,0x18,0x3a,0x7a,0xd7,0xbe,0x94,0x23,0x70,0xbc,0x73,0x0f,
0xae,0xea,0xc5,0x20,0xc9,0x2c,0x38,0x79,0x1d,0x7b,0x5f,0x7e,0x81,0xce,0xb7,0x5e,
0x3b,0xe2,0x39,0xf3,0xdf,0xfb,0x01,0xe6,0x2c,0xac,0x3b,0x68,0xb6,0xa2,0xa3,0x77,
0x25,0x1e,0xef,0xbc,0x6b,0x6f,0xcb,0x44,0x93,0xdb,0xdd,0x33,0x4d,0x32,0x65,0x8e,
0xd0,0xe2,0x43,0x68,0x67,0x9c,0xed,0x2a,0xbb,0x76,0x75,0xa5,0xad,0xe8,0xe6,0xdb,
0x8a,0xef,0x7c,0x60,0x89,0x5f,0x55,0x8b,0xec,0xf3,0x9b,0x80,0xb7,0x81,0xd7,0xb0,
0xf6,0xaf,0xfb,0xc7,0x53,0x6a,0x47,0x94,0xd0,0x78,0x3c,0x7e,0x39,0xf0,0x2d,0xfb,
0x01,0x5f,0x01,0xde,0x04,0xfe,0x02,0xec,0x0c,0x68,0x5a,0xba,0x04,0x48,0xff,0x12,
0xb8,0x39,0x99,0x13,0x1a,0xf7,0xb4,0xb2,0xaf,0xad,0x33,0xa9,0x75,0xb0,0x19,0x1b,
0x24,0x1e,0x6c,0xc1,0x51,0x5c,0x79,0x40,0x2f,0xcb,0x0a,0x6b,0xae,0xba,0x9a,0xe7,
0x07,0xfa,0x09,0x6e,0x79,0x6b,0xec,0xf5,0xe1,0x09,0xeb,0x38,0xee,0x43,0x1f,0x19,
0x4e,0x1c,0x10,0xef,0x6e,0x49,0x29,0x0b,0xf4,0x81,0xf6,0x85,0x89,0x77,0xb7,0xe2,
0x28,0xae,0x40,0x56,0x1c,0x9c,0x78,0xf5,0xe7,0x79,0xee,0x17,0x3f,0xa1,0x77,0xfb,
0x96,0x31,0xdb,0x55,0xbe,0xf6,0x34,0x56,0x5e,0x72,0xf9,0x21,0x5a,0x3a,0xde,0xb5,
0x3f,0xe1,0xf5,0x2f,0xc0,0xdb,0xdb,0xb5,0x89,0x3c,0xee,0x56,0x5b,0x56,0x53,0x06,
0x01,0x4d,0x33,0x80,0xbd,0xf6,0xf1,0xdc,0x18,0xe4,0x9e,0x6f,0xaf,0xdb,0x56,0x00,
0x5f,0x02,0x96,0xda,0x0a,0xf1,0xa2,0x23,0xcf,0xfd,0xc6,0x9f,0x26,0x9b,0x01,0x4d,
0x8b,0x91,0x66,0xf0,0xab,0xaa,0xd7,0x9e,0x25,0x14,0x01,0x1b,0xed,0x69,0x4e,0xc2,
0xf8,0xe1,0xbf,0x7d,0x88,0x8b,0x4e,0x3f,0x29,0xa9,0x7b,0x4a,0xee,0x3c,0xbc,0x47,
0x6d,0x38,0x24,0x2e,0x38,0x1e,0x8d,0xd0,0xf4,0x8f,0x27,0xd8,0x76,0xdf,0x1d,0xc4,
0x42,0x03,0x80,0x89,0xdb,0x57,0xcc,0xe2,0x4b,0xae,0x60,0xe1,0xfa,0x0d,0xc8,0x43,
0x69,0x7b,0x0c,0x83,0xd0,0xdb,0x4f,0x61,0x46,0x06,0x52,0xb2,0x4f,0x65,0x4f,0x3e,
0x39,0x2b,0x4e,0x1d,0x6e,0x5f,0x3c,0x1c,0xa6,0xf1,0xc9,0xc7,0xd8,0x7e,0xff,0x9d,
0x76,0x90,0x86,0x89,0xa7,0x78,0x0e,0x4b,0x2e,0xbd,0x82,0x05,0x6b,0xd7,0x23,0x1f,
0xec,0xd1,0x66,0x18,0x84,0x36,0xff,0x33,0xe1,0xc4,0xef,0xd1,0x58,0x9c,0x13,0x3e,
0xfa,0x35,0xe2,0x7a,0xd2,0x2b,0xab,0xdf,0x02,0x37,0xd8,0xeb,0xde,0x10,0x10,0x4a,
0x57,0x19,0x0e,0x68,0x5a,0x68,0xc2,0x04,0x9e,0xe5,0x87,0x97,0x46,0xac,0x33,0x8a,
0xec,0x75,0x45,0xe5,0x08,0x43,0x58,0xa9,0x7d,0x14,0x8e,0x38,0xf2,0x6d,0x63,0x43,
0x1c,0x18,0x18,0x71,0x38,0x81,0x13,0x93,0xb9,0xff,0x9a,0xe5,0xb5,0xfc,0xee,0x3b,
0x9f,0x4f,0x3a,0x91,0xbb,0xb3,0x6a,0x29,0xae,0xca,0x45,0x87,0xb1,0x75,0xc5,0x19,
0xe8,0x6c,0x07,0x49,0x26,0xaf,0xb4,0xec,0x10,0x77,0xc9,0x68,0xf3,0x36,0x62,0xfb,
0xb6,0x4c,0x49,0xff,0x85,0x07,0x42,0x44,0x07,0xc3,0xe4,0x15,0x15,0x1e,0x4a,0xa4,
0x49,0xc0,0x55,0xbd,0x1c,0x67,0x45,0xed,0xa1,0xed,0xea,0x68,0x47,0x92,0x65,0x72,
0xc7,0x68,0xd7,0x70,0xfb,0xf6,0x6d,0x25,0xd6,0x9c,0xb8,0x6b,0xf2,0x96,0x5d,0x7b,
0xb8,0xe4,0xba,0x1b,0x92,0x15,0xd2,0x28,0xf0,0xb8,0x3d,0x78,0x7b,0xed,0x63,0xe8,
0xf7,0x18,0x56,0x76,0x8e,0x1e,0xac,0x44,0x77,0x3d,0xb6,0xad,0x66,0xc8,0x00,0x35,
0x64,0x7c,0x6a,0xb6,0x7f,0x8f,0x4c,0x87,0x6d,0x26,0x25,0x8c,0x58,0x53,0x44,0x52,
0x07,0x96,0x45,0xba,0x7c,0x84,0x01,0xcc,0x6f,0x4f,0x27,0x7c,0x1c,0xd8,0x42,0x0a,
0xda,0x53,0x8f,0xfd,0x23,0x8e,0xcd,0x76,0xc7,0x0f,0xbd,0x8c,0x3e,0x7b,0xcd,0x10,
0x1f,0xe3,0x3e,0x4e,0xe0,0xad,0x64,0xd6,0xc2,0x4f,0xbd,0xde,0xc8,0xf6,0x3d,0xcd,
0x2c,0xf6,0x27,0x97,0x1d,0x23,0xd6,0xdc,0x88,0x92,0x57,0x8c,0x52,0x70,0xa8,0xc3,
0x83,0xec,0x70,0x90,0x3f,0x77,0xec,0x58,0x63,0xbd,0xb7,0x83,0xd8,0xbe,0xc6,0x29,
0xe9,0xd7,0xed,0xaf,0xbd,0xcd,0xb6,0xe7,0x36,0x02,0x26,0xde,0x12,0x1f,0xab,0x2e,
0x3a,0x9b,0xdc,0x82,0xbc,0x29,0xb9,0x76,0x74,0xdf,0xbb,0xc8,0x79,0x45,0x56,0x25,
0x86,0x91,0xed,0x2a,0x3f,0x72,0x0c,0xb5,0xde,0xd3,0x4e,0x6c,0x7f,0xe2,0x75,0x8f,
0x24,0x09,0x36,0xbe,0xdd,0x34,0x11,0x0d,0xf3,0xc7,0x80,0xa6,0x5d,0x75,0x04,0x99,
0xcb,0xb5,0x07,0xfa,0x7c,0x7b,0xd0,0x2f,0xb6,0x0d,0x4d,0x65,0xb6,0x8d,0xe7,0x1c,
0xdb,0xe6,0x53,0x8e,0x65,0x8c,0x8d,0xf9,0x55,0x35,0x04,0xec,0x01,0x02,0x23,0x8c,
0x50,0xbb,0x81,0xf6,0x80,0xa6,0xcd,0x6a,0xc8,0x98,0x34,0x43,0x44,0x75,0xda,0x8b,
0xf6,0xa5,0xb6,0x11,0x6c,0xe8,0xa7,0x87,0x03,0xa6,0xf7,0x1d,0xf6,0xb1,0x0b,0xd0,
0xec,0x91,0x71,0x20,0xa0,0x69,0xe1,0x29,0x7a,0x86,0x73,0x6d,0x43,0x5b,0xc2,0x6d,
0xfe,0xf0,0x39,0x6b,0xf9,0x76,0xfd,0x07,0x93,0x76,0xa5,0x97,0x14,0x27,0x9e,0xc5,
0x27,0x1d,0x31,0xbd,0xec,0x28,0xe1,0xee,0xef,0x26,0xdc,0xf4,0x32,0xe8,0x93,0x9f,
0xe5,0xf5,0x75,0xf7,0xf0,0xc2,0xed,0xf7,0x8f,0x6a,0x65,0xf9,0xb2,0x85,0xac,0x3c,
0x73,0xdd,0xd4,0x09,0x8d,0xe2,0xc4,0xb3,0xf8,0xe4,0x31,0xd3,0xcb,0x1e,0xae,0x7d,
0x91,0xa6,0x97,0x0e,0x71,0x39,0x3d,0x12,0x22,0xd1,0x18,0x97,0x7c,0xf5,0x3f,0xd9,
0xb5,0x3f,0x29,0x03,0xad,0x0e,0xd4,0x05,0x34,0x6d,0xe7,0x14,0xc9,0x8c,0xc3,0xd6,
0xde,0xf9,0x36,0xa9,0xfd,0x23,0x14,0x4d,0x8d,0x4d,0xfa,0x3c,0x2c,0x6b,0xf2,0xbb,
0xf6,0xd1,0x08,0x6c,0x09,0x68,0x5a,0x67,0xda,0x11,0xd8,0x76,0xca,0xc8,0x07,0x8e,
0xc3,0xb2,0x5a,0x1f,0x03,0x2c,0xb7,0x47,0xb9,0x77,0x0f,0x3a,0x1a,0x81,0xe0,0x4c,
0x6e,0x84,0xfb,0x55,0xf5,0x2e,0xe0,0xb2,0x44,0xbf,0x6f,0x98,0x26,0x7f,0xfb,0xaf,
0x6f,0x51,0x5b,0x53,0x91,0xfc,0xcd,0x64,0x19,0xb7,0xba,0x12,0x47,0x69,0xd5,0x11,
0xba,0xd9,0x24,0xde,0xb1,0x97,0x88,0xf6,0xa6,0xe5,0x28,0x31,0x05,0x68,0xdb,0xd3,
0xcc,0xeb,0xf7,0x3f,0x3e,0xea,0xb3,0xfc,0x8a,0x32,0xd6,0x5e,0x72,0xde,0xd4,0x26,
0x8e,0x97,0x15,0xdc,0xfe,0x63,0xac,0x5c,0x60,0x87,0x6b,0x9f,0x69,0x12,0xeb,0xd8,
0x43,0x54,0x7b,0x2b,0xe9,0xe0,0x8e,0x8d,0x6f,0x37,0xf1,0xb1,0xef,0xfe,0x1a,0x25,
0xb9,0xa8,0xac,0x9b,0x02,0x9a,0x76,0xcd,0x0c,0x2f,0xf3,0x9c,0xc0,0x02,0x5b,0x21,
0x0d,0x29,0xa7,0x15,0x36,0x0f,0xb6,0xd8,0x33,0xc5,0x4d,0x58,0x21,0xae,0xcd,0x01,
0x4d,0x8b,0xa6,0x0c,0x81,0xfd,0xaa,0x5a,0x60,0x3f,0xf0,0x5a,0x60,0x9d,0x3d,0x42,
0x39,0xb0,0xcc,0xe0,0xaf,0xda,0xd3,0xd6,0xc6,0x80,0xa6,0xa5,0x44,0x05,0x2f,0xdb,
0x2b,0xe7,0x6d,0x7b,0x7a,0x94,0x10,0x2e,0x5c,0x7f,0x1c,0x3f,0xf8,0xdc,0xc7,0x92,
0xca,0x50,0x39,0x4a,0xce,0xf3,0x8a,0x87,0x8b,0x7f,0x0d,0x65,0xed,0x30,0xe3,0x31,
0xf4,0xfe,0x2e,0x62,0x2d,0x3b,0x31,0x06,0x3a,0xa7,0x74,0x1c,0x8d,0x84,0xc2,0x3c,
0xf3,0xfb,0xbb,0x31,0x46,0x18,0x7e,0xfc,0x6b,0x56,0xb2,0x64,0xcd,0xca,0x69,0xe8,
0x51,0x13,0x39,0xaf,0x64,0xec,0xf6,0xf5,0x75,0x11,0x6b,0xdd,0x81,0x31,0xd0,0x9d,
0xf4,0x55,0x0d,0xc3,0xe0,0xda,0x1b,0x6e,0xe1,0xc9,0x57,0xdf,0x49,0xe6,0xb4,0x6e,
0x60,0x49,0x40,0xd3,0xda,0x52,0x44,0xd6,0x5c,0xf6,0xac,0x73,0x85,0xad,0xd0,0x4e,
0xb4,0x6d,0x39,0x1d,0x58,0x3b,0x3a,0xcf,0x03,0x9b,0x02,0x9a,0xb6,0x77,0xc6,0x08,
0x6c,0x13,0xf6,0x64,0xe0,0x54,0xe0,0x2c,0x7b,0xf4,0x69,0x02,0x5e,0xb0,0x1f,0x68,
0x7b,0xaa,0x47,0x7f,0xf8,0x55,0xf5,0x4c,0xe0,0x51,0x12,0xcc,0x89,0xad,0x1b,0x26,
0x37,0x7d,0xe3,0x53,0x6c,0x58,0x7d,0xf4,0x24,0x87,0x4a,0xe9,0x80,0x80,0xeb,0xb1,
0x49,0x87,0x2c,0x1e,0x09,0x9d,0xfb,0x5a,0xd9,0xf2,0xec,0x2b,0x84,0x7b,0x7a,0x29,
0x5f,0xbe,0x88,0x25,0x27,0x1e,0x87,0x63,0x5a,0x8b,0x91,0xdb,0xe5,0x45,0xa7,0xa8,
0x7d,0xaf,0x6f,0xd9,0xce,0x07,0xbf,0xf9,0x5f,0xb8,0x9d,0x49,0x19,0xdf,0x3e,0x13,
0xd0,0xb4,0xdf,0xa5,0xb8,0xec,0xb9,0xb1,0x0c,0xb1,0x6b,0x6c,0x85,0xb7,0xd2,0x9e,
0x86,0xbf,0x8c,0x15,0x02,0xfb,0x5c,0x40,0xd3,0xb6,0x4f,0x19,0x81,0xe7,0xfb,0xfd,
0xb2,0x69,0x9a,0xab,0x81,0xf7,0xd8,0x84,0x9d,0x0b,0x3c,0x6b,0xdf,0xec,0x9f,0xc0,
0x7e,0x7b,0x7f,0x2b,0xad,0xe0,0x57,0xd5,0xeb,0x81,0xef,0x27,0xfa,0xfd,0xc2,0xdc,
0x1c,0xee,0xbe,0xe1,0x3a,0x2a,0xcb,0x4a,0xd2,0xaa,0x9d,0xa6,0x69,0x26,0x91,0x98,
0x3e,0x35,0x10,0x8e,0x46,0xf9,0xe4,0xbf,0xff,0x8a,0xb7,0x76,0xec,0x49,0xe6,0xb4,
0xc7,0x81,0xf7,0xcc,0xb6,0x5f,0xf2,0x04,0xa7,0xe0,0x39,0xc0,0x49,0xc0,0x06,0xfb,
0xa8,0xc0,0xf2,0x1e,0x7c,0x0c,0x78,0x7c,0x3c,0x7f,0x8b,0xf1,0xf6,0x81,0x0b,0xb0,
0x9c,0x20,0x9e,0x06,0xfe,0x99,0xec,0xe8,0x90,0xe2,0x1d,0xf7,0x47,0xe0,0xc3,0x89,
0x9e,0xb3,0x66,0xd9,0x02,0x7e,0xf9,0xf5,0xcf,0x90,0xef,0xcd,0x41,0x60,0xfa,0xf0,
0xc7,0x87,0xfe,0xc9,0x8f,0xff,0x90,0x54,0x20,0x59,0x0b,0xb0,0x32,0xa0,0x69,0xad,
0x19,0x22,0x9b,0xf9,0xc0,0x7a,0x2c,0x6b,0xf8,0x73,0x01,0x4d,0xbb,0x67,0xc6,0x8c,
0x58,0x69,0xd6,0x51,0x2e,0xe0,0x6f,0xc0,0xd9,0x89,0xaf,0x87,0x8f,0xe7,0x3b,0x9f,
0xbe,0x9c,0x1c,0x8f,0x3b,0xa5,0xda,0x12,0x8f,0xc5,0x90,0x24,0x09,0x25,0x81,0x3a,
0x4e,0x91,0xd0,0x20,0xee,0x14,0x1d,0x84,0x5e,0xdf,0xb2,0x83,0x8f,0x7f,0xf7,0xd7,
0xc9,0x64,0xfd,0x88,0x00,0x67,0x04,0x34,0xed,0x85,0x6c,0x95,0x63,0x25,0x5b,0x1b,
0x1e,0xec,0xe9,0xd1,0x7d,0x3e,0xdf,0x7d,0xf6,0x9a,0x3e,0xa1,0x62,0xb4,0x5b,0x77,
0xef,0xa7,0xbd,0xab,0x9b,0x35,0x47,0x2d,0x4e,0xca,0x4f,0x7a,0x3a,0x21,0x49,0x12,
0xff,0xba,0xff,0x31,0x5a,0x76,0xec,0xa6,0x6a,0x49,0xed,0x11,0xbf,0xdb,0xb1,0xaf,
0x85,0x17,0xff,0xf8,0x00,0x25,0xf3,0x6b,0xc8,0x99,0x5c,0xaa,0xd6,0x29,0x87,0xb6,
0xbf,0x8d,0xab,0x7f,0xf0,0x3f,0xc9,0x64,0x43,0xd1,0x81,0x2b,0x03,0x9a,0xf6,0x70,
0x36,0xcf,0x58,0xe4,0x6c,0x6e,0xbc,0xed,0xa6,0x76,0x3e,0xf0,0x50,0xa2,0xe7,0x3c,
0xf0,0xcc,0xab,0x7c,0xe5,0x67,0x0d,0xb4,0x76,0xa6,0x86,0xad,0xce,0xc4,0xa4,0x70,
0x6e,0x19,0x5d,0xda,0x3e,0xda,0xf6,0x1c,0x3e,0x48,0xc0,0xd0,0x75,0x9a,0x5e,0x7c,
0x1d,0xd9,0xe1,0xc0,0x9b,0x9f,0x9b,0x52,0xef,0x61,0x4f,0x4b,0x3b,0x9f,0xfd,0xd1,
0x4d,0x74,0xf6,0x26,0xec,0x42,0x6a,0x00,0x5f,0x08,0x68,0xda,0x9f,0xb2,0x7d,0xc9,
0xa1,0x64,0x7b,0x07,0x04,0x7b,0x7a,0xe2,0x3e,0x9f,0xef,0x6e,0x2c,0xb7,0xcc,0xd5,
0x89,0x9c,0xb3,0xbb,0xb5,0x93,0x27,0x5f,0xde,0xc4,0x62,0x7f,0x25,0x55,0x73,0x4a,
0x67,0xbd,0x0d,0x05,0xa5,0x45,0xec,0xdb,0xb2,0x83,0xd6,0xa6,0x5d,0x14,0x54,0x94,
0x91,0x5b,0x38,0x3a,0x4f,0x75,0x3c,0x1a,0xe3,0xad,0xa7,0x5e,0xa2,0x6b,0xd7,0x1e,
0x16,0xae,0x5f,0x4d,0x59,0x4d,0x65,0xca,0xf4,0xff,0x96,0x9d,0xbb,0xf9,0xec,0x7f,
0xfe,0x96,0xdd,0x6d,0x5d,0xc9,0x68,0xde,0x94,0xb7,0x38,0x0b,0x02,0xcf,0x2c,0x89,
0x0d,0x9f,0xcf,0xf7,0x88,0x6d,0x10,0x39,0x3b,0x91,0x7e,0xe9,0x0b,0x85,0x79,0xf0,
0x99,0x8d,0x44,0x22,0x61,0x96,0xcc,0xaf,0x21,0x27,0xc9,0x64,0xf0,0x53,0x09,0x87,
0xd3,0x49,0x71,0x4d,0x05,0xcd,0x5b,0x77,0xb2,0xf7,0xed,0x26,0x82,0xed,0x9d,0xc4,
0x62,0x71,0x06,0x7a,0xfa,0x68,0xde,0x1e,0x60,0xf3,0xe3,0xcf,0xd1,0xdb,0xd2,0x4e,
0xf5,0xca,0x65,0x2c,0x3e,0x61,0x65,0x4a,0x58,0xa6,0x0d,0xc3,0xe4,0x91,0x17,0x5e,
0xe5,0xdf,0x7e,0xf4,0x3b,0x7a,0x06,0x12,0x8e,0x3e,0xed,0x07,0x2e,0x0d,0x68,0xda,
0x5d,0x42,0x6a,0xed,0x25,0x94,0xe8,0x82,0xd1,0xf0,0xab,0xea,0xf1,0xc0,0x9f,0x80,
0xc5,0x89,0x9e,0x93,0xef,0xf5,0xf0,0xad,0x4f,0x7e,0x80,0xd3,0x4f,0x38,0x86,0xbc,
0x1c,0x0f,0xb3,0xb5,0x97,0x31,0xd8,0x3f,0x40,0xd3,0x2b,0x6f,0xd2,0xda,0xb8,0x13,
0x3d,0x1a,0xb5,0x5f,0xaf,0x49,0xde,0x9c,0x52,0x6a,0xd7,0x1c,0x43,0x65,0xad,0x9a,
0x12,0x7d,0xbc,0xaf,0xad,0x93,0x9b,0xee,0x7a,0x98,0xfb,0x9f,0xd9,0x98,0xcc,0x60,
0xd2,0x08,0x5c,0x12,0xd0,0xb4,0x77,0x84,0x94,0x0a,0x02,0x8f,0x47,0xe2,0x5c,0xe0,
0x07,0xc0,0x17,0x12,0xb5,0x13,0x98,0xa6,0x89,0x5a,0x5e,0x42,0xfd,0xfb,0xce,0xe2,
0x94,0xe3,0x8f,0xa2,0xac,0xa8,0x70,0x42,0x39,0x94,0x27,0xff,0x46,0x25,0xa2,0x83,
0x61,0x06,0xfb,0xfa,0xd1,0xe3,0x3a,0x9e,0x5c,0x2f,0x39,0x79,0xb9,0x48,0xf2,0xec,
0xbe,0x6a,0x49,0x92,0x68,0xef,0xee,0xe1,0xe1,0x67,0x5e,0xe1,0x57,0x77,0x3e,0x4c,
0x34,0xb9,0x5c,0xcf,0xbf,0x03,0xbe,0x12,0xd0,0xb4,0x7e,0x21,0x9d,0x82,0xc0,0xc9,
0x6a,0xe3,0xff,0x01,0x4e,0x48,0xe6,0x3c,0x8f,0xcb,0xc9,0xa5,0x67,0x9c,0xc8,0xd9,
0x27,0x1f,0xc7,0xb2,0x05,0xf3,0x70,0xbb,0x9c,0x59,0xdb,0x87,0xa6,0x69,0x12,0x68,
0x6e,0xe5,0xb1,0x17,0x5e,0xe7,0xf7,0x7f,0xfb,0x27,0x03,0xe1,0xa4,0x5c,0x81,0x77,
0x02,0x57,0x07,0x34,0xed,0x09,0x21,0x8d,0x82,0xc0,0x13,0x25,0xb1,0x84,0xe5,0xf0,
0xf1,0x3d,0xac,0x28,0x94,0xa4,0x84,0xd7,0xeb,0x71,0xf3,0x89,0xf7,0x9e,0xca,0xaa,
0xe5,0x75,0x2c,0x9a,0x57,0x49,0x61,0x7e,0x2e,0x0e,0x45,0x99,0x1d,0xed,0x3c,0x43,
0x9a,0x36,0x1a,0x8b,0xd1,0xd2,0x11,0xe4,0xad,0xa6,0x9d,0x3c,0xf0,0xd4,0xcb,0x3c,
0xf3,0xc6,0x56,0x5c,0x8e,0xa4,0xcc,0x2d,0x3d,0x58,0x01,0xf9,0x3f,0x0b,0x68,0x5a,
0x44,0x48,0xa1,0x20,0xf0,0x54,0x10,0xd9,0x6d,0x13,0xf9,0xeb,0xc9,0xac,0x8f,0x87,
0x60,0x98,0x26,0xbd,0xe1,0x18,0xe7,0x9f,0xb0,0x9c,0xe3,0x97,0x2d,0x64,0xe9,0x82,
0x1a,0xe6,0x55,0xcc,0xa1,0x28,0x3f,0x0f,0x5f,0x7e,0xae,0x95,0xea,0x30,0xcd,0x48,
0x2d,0x49,0x12,0x92,0x24,0xd1,0x1f,0x1a,0xa4,0x33,0xd8,0x4b,0xa0,0xb9,0x95,0xb7,
0x9a,0x76,0xf1,0xc2,0x1b,0x5b,0x78,0x7a,0xf3,0x0e,0x8a,0xbd,0x49,0x3b,0xbc,0xf4,
0xd9,0x33,0x9e,0x9f,0xa7,0x4a,0x00,0x8c,0x20,0x70,0xe6,0x11,0x59,0xc1,0xda,0x3b,
0xfe,0x12,0x96,0xef,0xea,0x84,0xfa,0xd0,0x34,0x2d,0x52,0xfb,0xf2,0x3c,0xd4,0xcc,
0x29,0xe1,0xe8,0x45,0x7e,0x96,0xcc,0xaf,0xc2,0x57,0x90,0x4f,0x45,0x69,0x11,0x5e,
0x8f,0x87,0xfc,0xdc,0x1c,0x7c,0xf9,0xb9,0x76,0x48,0x9d,0xc4,0x4c,0x1b,0x8f,0xcd,
0xa1,0x07,0x05,0xfa,0x07,0xc3,0xf4,0xf4,0x0d,0x10,0x0a,0x47,0xe8,0xe8,0xee,0xa1,
0xad,0xab,0x87,0xbd,0xad,0x1d,0xbc,0xf2,0xce,0x36,0x02,0xcd,0x6d,0xb4,0xf7,0x0c,
0x20,0x4b,0x13,0x7e,0xc6,0xbd,0xc0,0x8d,0xc0,0x6f,0x33,0xbd,0x14,0x8a,0x20,0xf0,
0x68,0x32,0x39,0xec,0x69,0x6d,0x1d,0x56,0xe0,0x75,0x08,0x3b,0x21,0xc0,0x4c,0x24,
0xdd,0xf3,0xab,0xea,0x62,0xe0,0x13,0xc0,0x87,0x98,0x60,0x39,0xd3,0xc3,0x41,0x37,
0x0c,0x42,0xd1,0x38,0xdd,0xe1,0x38,0x0b,0xe7,0xf8,0x58,0x58,0x59,0x46,0xd5,0x9c,
0x22,0x2a,0x4a,0x8b,0x28,0xc8,0xf5,0xa2,0x28,0x0a,0x4e,0x87,0x03,0xa7,0x43,0xb1,
0x0f,0x07,0x8a,0xa2,0xe0,0x50,0x64,0xe4,0xc3,0x18,0xac,0x4c,0x13,0xe2,0xba,0x8e,
0x61,0x18,0xc4,0x75,0x03,0xdd,0x30,0xd0,0x75,0x83,0xb8,0xae,0x13,0x8f,0xeb,0xe8,
0xba,0x4e,0x5c,0xd7,0x19,0x8c,0x44,0x69,0xeb,0xea,0x61,0x5f,0x7b,0x17,0x7b,0xda,
0xba,0x68,0xdc,0xd7,0x8e,0x69,0x98,0x14,0x78,0x9c,0x38,0x15,0x79,0xaa,0xb6,0xa1,
0x06,0x80,0x27,0x80,0x5b,0x81,0xbf,0xa7,0x63,0x50,0x8c,0x20,0xf0,0xe4,0xc8,0xb3,
0x06,0xf8,0x3d,0x56,0x3c,0xf2,0xc1,0xe8,0xc5,0x8a,0xb9,0xfc,0x33,0x70,0xd7,0x78,
0x89,0xc1,0xa6,0x48,0x2b,0x9f,0x08,0x5c,0x62,0x6b,0xe7,0x45,0x42,0xb4,0x0e,0x3b,
0x45,0x7e,0x0a,0x2b,0xe5,0xeb,0xdf,0x67,0x2a,0x6b,0x85,0x20,0x70,0x6a,0x12,0xf8,
0x11,0xac,0x30,0xc7,0xf1,0xd0,0x01,0xfc,0x04,0xf8,0xf5,0x54,0x67,0x43,0x38,0x02,
0x99,0x6b,0x81,0xf3,0xb0,0x42,0x30,0x4f,0xc1,0x4a,0xbb,0x92,0x8d,0x30,0xb0,0x92,
0x3a,0x3c,0x89,0x15,0xf2,0xf7,0xc2,0x74,0x0f,0xa6,0x82,0xc0,0xe9,0x43,0xe0,0xcf,
0x70,0x84,0x7c,0xcf,0x4b,0x4e,0x3f,0x9f,0xd3,0x3f,0x7e,0x0d,0xdb,0x5f,0x7b,0x89,
0xc7,0x7f,0xfd,0x7d,0x40,0xda,0x8a,0xe5,0xfc,0xfe,0xd2,0x0c,0x3f,0xa7,0x0c,0x1c,
0x6b,0x6b,0xe8,0x13,0xb1,0xdc,0x35,0xab,0xed,0x29,0x7f,0x26,0x21,0x6c,0x0f,0x96,
0x6f,0xd8,0xb3,0x9f,0x57,0x80,0x97,0xd2,0x28,0x7f,0xb8,0x20,0xf0,0x2c,0x90,0xf8,
0x7a,0xac,0xed,0x9d,0x43,0x9c,0x2d,0xaa,0x8e,0x5e,0xcd,0xa5,0xdf,0xfe,0x31,0x00,
0xbf,0x78,0xff,0x7a,0x64,0xa7,0x0b,0xac,0xb4,0xa2,0xdf,0x0c,0x68,0xda,0xcf,0x67,
0xf9,0xb9,0x8b,0xb0,0xd2,0x0f,0xad,0xb0,0x97,0x00,0x8b,0xb1,0xf2,0x2a,0x55,0x61,
0x65,0x68,0x48,0x65,0xb4,0x61,0x65,0x05,0x0d,0x60,0x55,0xe4,0xd8,0x0a,0xbc,0x03,
0xec,0x0a,0x68,0x5a,0x8b,0xa0,0x94,0x20,0x70,0x52,0x58,0xf3,0x9e,0x0b,0x37,0xb4,
0xbc,0xb3,0xe9,0x57,0x92,0x2c,0x1f,0x92,0xf3,0xc6,0xe9,0xcd,0x45,0x71,0x79,0x08,
0x07,0x3b,0x29,0xa8,0xa8,0xc6,0x57,0x5e,0xcd,0xee,0x4d,0x2f,0x83,0x65,0xf1,0xfc,
0x62,0xaa,0x19,0x4e,0xfc,0xaa,0xea,0x0e,0x06,0x83,0x4b,0x06,0xc3,0xe1,0xfb,0x24,
0x58,0x20,0xcb,0x32,0xb2,0x2c,0x23,0x0d,0xfd,0x94,0x24,0xab,0x02,0xdc,0x90,0x11,
0xc9,0xfe,0x7b,0xe8,0xf7,0x23,0xbd,0xd0,0x51,0x1b,0x54,0x23,0xb6,0xab,0x46,0x5a,
0x9a,0x87,0x7e,0x37,0x4d,0x13,0xc3,0x30,0x30,0xec,0x9f,0xa6,0x69,0xea,0x1e,0xb7,
0xfb,0x9b,0x3e,0x9f,0xef,0x66,0xd3,0x34,0xa3,0x62,0x6f,0x56,0x60,0xca,0xd0,0xd0,
0x14,0xfc,0x22,0x20,0xf9,0x55,0xf5,0xa3,0x7e,0x55,0xdd,0xe1,0x57,0x55,0xf3,0xe0,
0x43,0xad,0xa9,0x36,0xaf,0xbf,0xf7,0x9f,0xe6,0xad,0xdb,0x7a,0xcc,0xcf,0xfd,0xe6,
0x8f,0xa6,0x5a,0x53,0x63,0xfa,0x55,0xf5,0x46,0xdb,0x49,0x23,0x65,0x20,0xcb,0xf2,
0xc9,0x92,0x55,0xf4,0xcd,0x9c,0xc8,0x21,0x49,0x52,0x42,0xc7,0x04,0xaf,0x6f,0x28,
0x8a,0xf2,0x1f,0x05,0x79,0x79,0x62,0xeb,0x31,0x85,0xe0,0xc8,0x80,0x36,0x7c,0xa6,
0xa1,0x29,0xf8,0x64,0x7d,0x9d,0xef,0xff,0xfc,0xaa,0x7a,0x37,0xf0,0x35,0xe0,0x7a,
0xac,0x84,0xf0,0x96,0x56,0x92,0x15,0x76,0xbc,0xf6,0x32,0xf3,0x96,0x1d,0xc3,0xc2,
0x55,0x27,0x11,0xe9,0xd8,0x83,0x67,0x8e,0xfa,0x59,0x7b,0x2a,0xf8,0xc3,0x14,0x21,
0xef,0xa9,0x86,0x61,0xfc,0x1d,0xbb,0x1c,0xaa,0x2c,0xcb,0xb8,0x9c,0x4e,0x1c,0x4e,
0x27,0x0e,0x87,0x03,0x87,0xa2,0x1c,0xd0,0xc6,0xb6,0x03,0xc5,0x90,0x56,0x66,0x84,
0x16,0x4e,0x84,0x5d,0x43,0x0e,0x23,0x86,0x61,0xa0,0xdb,0xdb,0x4a,0xb1,0x78,0x9c,
0x58,0x34,0x4a,0x38,0x1c,0x3e,0x5c,0x29,0x13,0x49,0xd7,0xf5,0xef,0x0e,0x0c,0x0e,
0xfa,0xb0,0xf6,0xc0,0x05,0xc4,0x14,0x7a,0xd2,0xda,0x77,0x3e,0x96,0xbf,0xec,0xb5,
0xf5,0x75,0xbe,0xff,0x1a,0x31,0x15,0x5d,0x05,0xdc,0x87,0x95,0x7c,0xdb,0x12,0x5a,
0xc3,0xa0,0x72,0xc5,0x71,0x98,0xa6,0x49,0xcb,0x96,0xe1,0xba,0x57,0x71,0xe0,0xbd,
0x01,0x4d,0x7b,0x6c,0x56,0x47,0x51,0x87,0xe3,0x28,0xd3,0x34,0x5f,0xcc,0xcf,0xcb,
0xcb,0xf3,0x78,0x3c,0x38,0x9d,0xce,0x43,0xc9,0x39,0x43,0x18,0x9a,0x3e,0x47,0x22,
0x11,0xfa,0x07,0x06,0x08,0x85,0x42,0x63,0x3d,0xef,0xf7,0xe2,0xf1,0xf8,0x7f,0x08,
0xfa,0x08,0x02,0x4f,0x96,0xc0,0x9f,0xb5,0xd7,0xb3,0x4f,0xd6,0xd7,0xf9,0xce,0x3a,
0x68,0x3d,0x59,0x81,0xb5,0x75,0xb1,0x62,0xac,0x73,0x4b,0x17,0x2c,0x21,0x1a,0x0e,
0xd1,0xdb,0xbc,0xbb,0x19,0x58,0x3e,0x5b,0x1e,0x40,0x15,0xe5,0xe5,0x1e,0xd3,0x34,
0x37,0xb9,0xdd,0xee,0x25,0xa9,0x98,0x41,0x52,0xd7,0x75,0xfa,0xfb,0xfb,0x09,0xf6,
0xf4,0x8c,0x74,0xf5,0x34,0x9c,0x4e,0xe7,0x45,0xb1,0x58,0xec,0x21,0x41,0xa1,0x59,
0x9e,0xb9,0xa5,0xf9,0xf3,0x9f,0x6f,0xff,0x3c,0xa9,0xa1,0x29,0x38,0xaa,0xfa,0x60,
0x40,0xd3,0xf6,0x03,0x67,0x60,0x59,0x4a,0x47,0x1b,0xb7,0xdc,0x1e,0xae,0xfc,0xaf,
0xff,0xe5,0xea,0x9b,0xef,0x62,0xf1,0x86,0x73,0x2b,0x81,0x1f,0xcf,0x56,0x03,0xdc,
0x6e,0xf7,0xf5,0x1e,0x8f,0x67,0x49,0xaa,0xa6,0x7f,0x55,0x14,0x85,0xc2,0xc2,0x42,
0xaa,0xab,0xaa,0xc8,0xcb,0x1d,0xde,0xf9,0x92,0xe3,0xf1,0xf8,0xad,0x1e,0x8f,0xa7,
0x54,0x50,0x48,0x10,0x78,0xa2,0xda,0x37,0x17,0xab,0x22,0x04,0x58,0x7b,0xaa,0x87,
0x14,0xff,0xb1,0xb3,0xf4,0xbf,0x17,0xcb,0x33,0x6b,0x18,0xb1,0xc1,0x7e,0x4c,0xc3,
0xc0,0x95,0xe3,0xe5,0x84,0x8b,0x3e,0x88,0xa9,0xc7,0x3f,0xed,0x57,0xd5,0x75,0x33,
0xdd,0x06,0xdb,0x15,0xf3,0xba,0x74,0xe8,0x6f,0x45,0x51,0x28,0x2d,0x2d,0xa5,0xac,
0xb4,0x74,0x68,0xaa,0x3d,0x27,0x1a,0x8d,0xfe,0x50,0x50,0x48,0x10,0x78,0xa2,0x58,
0xc1,0xe8,0x9a,0xbf,0xeb,0xc7,0xfa,0x52,0x40,0xd3,0x9a,0x80,0xfa,0xd1,0xad,0x76,
0xf0,0xfc,0xdd,0xb7,0x13,0x1e,0xe8,0xa7,0xbf,0xbb,0x13,0x3b,0xda,0xfd,0x36,0x3b,
0x27,0xef,0x4c,0xe2,0x87,0x58,0xd5,0x2d,0xd2,0x06,0xb9,0xb9,0xb9,0x94,0xcf,0xb5,
0x0a,0x9f,0x1b,0x86,0xf1,0x29,0x97,0xd3,0x59,0x27,0x68,0x24,0x08,0x3c,0x11,0xf4,
0x33,0x7a,0x7b,0xf3,0xb0,0x55,0x0c,0x03,0x9a,0x76,0x37,0x70,0xc7,0xc8,0xcf,0x5e,
0xfe,0xf3,0xef,0xf8,0xf1,0xe9,0x75,0xdc,0xf3,0xed,0x6b,0x86,0xea,0xd9,0xd6,0x02,
0xbf,0x9b,0xa9,0xad,0x25,0xbf,0xaa,0x2e,0x62,0x9c,0xea,0x96,0xd4,0x45,0xe1,0x00,
0x00,0x11,0x68,0x49,0x44,0x41,0x54,0xeb,0xa9,0x0a,0x8f,0xc7,0xc3,0x9c,0xb2,0x32,
0x00,0x29,0xae,0xeb,0xdf,0x14,0x34,0x12,0x04,0x4e,0x1a,0xf5,0x75,0xbe,0x77,0x80,
0xdf,0xd8,0x7f,0x6e,0x05,0xfe,0x77,0x9c,0x53,0xbe,0x8c,0x55,0x00,0x6b,0x18,0x8e,
0x82,0x32,0x14,0xb7,0x95,0xe4,0xbc,0xb0,0x72,0x1e,0xee,0xbc,0x82,0xcb,0x81,0x7f,
0x9f,0xa1,0x26,0x5c,0x45,0x1a,0x6f,0xe3,0x79,0xbd,0x5e,0x7c,0x85,0x85,0x98,0xa6,
0x79,0xa9,0xc7,0xe3,0x29,0x12,0x54,0x9a,0x1d,0xa4,0xfd,0xa6,0x7c,0x43,0x53,0xd0,
0x55,0x5f,0xe7,0x4b,0x28,0x48,0xc1,0xaf,0xaa,0x5f,0x00,0x7e,0x75,0xf0,0xe7,0xbe,
0x2a,0x3f,0xd7,0x34,0xdc,0x8b,0x1e,0x8f,0xf1,0xd8,0x2d,0xbf,0xe4,0x8d,0xbf,0xde,
0xf9,0xd5,0xe9,0x74,0xb7,0xb4,0xc3,0x20,0x1b,0x49,0x32,0xc3,0x47,0xaa,0xc1,0x34,
0x4d,0x9a,0xf7,0xef,0x47,0xd7,0xf5,0x8f,0x1a,0x86,0xf1,0x47,0x41,0x27,0xa1,0x81,
0x27,0xa2,0x89,0x93,0x89,0x30,0xfa,0x1f,0xac,0x9a,0xad,0xa3,0x10,0x0b,0x87,0x30,
0x31,0x71,0x7a,0x72,0x58,0x77,0xe9,0xc7,0x31,0x0d,0xfd,0x67,0x7e,0x55,0xfd,0x89,
0x1d,0x59,0x34,0x1d,0x58,0x94,0xee,0xe4,0x05,0xcb,0xa5,0xb3,0xb4,0xa4,0x04,0xd3,
0x34,0x2f,0x14,0x54,0x12,0x04,0x9e,0x76,0x04,0x34,0x2d,0x0e,0x5c,0x7b,0xf0,0xe7,
0x03,0x9d,0x6d,0x3c,0xff,0x97,0x3f,0x10,0x8b,0x84,0x89,0x86,0x43,0x43,0x13,0x93,
0xeb,0x80,0x47,0xfd,0xaa,0x3a,0x1d,0x59,0xd0,0xcf,0x9e,0x81,0xe6,0x76,0x03,0xb7,
0xd9,0x9a,0x7e,0xda,0xe0,0x76,0xbb,0xf1,0x7a,0xbd,0x6b,0x72,0x73,0x73,0x9d,0x82,
0x4e,0x62,0x0a,0x3d,0xed,0xb0,0x8d,0x54,0x0f,0x03,0xe7,0x1e,0xd2,0x19,0xb2,0x6c,
0x39,0x2b,0x0c,0x39,0x2c,0x98,0x26,0x48,0x52,0x2f,0xf0,0x5d,0xac,0x74,0x2f,0x83,
0x93,0xb8,0xaf,0x02,0xac,0x0a,0x87,0xc3,0xd7,0x9a,0xa6,0x79,0x59,0x4e,0xce,0xb4,
0x17,0x18,0xfb,0x44,0x40,0xd3,0xfe,0xe0,0x57,0xd5,0x52,0x40,0xc3,0x76,0xd1,0x9c,
0x0e,0x44,0x22,0x11,0xda,0xda,0xdb,0xe7,0xe8,0xba,0x2e,0xf2,0x58,0x09,0x02,0xcf,
0x08,0x89,0x97,0x00,0x9b,0x00,0xcf,0xe1,0xbe,0x53,0xec,0x5f,0xc4,0x69,0x57,0x7e,
0x8e,0x70,0x5f,0x2f,0xcf,0xdc,0x7e,0x13,0xfd,0x6d,0xcd,0xcd,0xc0,0x2d,0xc0,0x1d,
0x01,0x4d,0xdb,0x9a,0xe0,0x7d,0x5c,0x58,0x45,0x9c,0x2f,0xc0,0x34,0x3f,0x60,0x44,
0x42,0x4b,0xfb,0x07,0x23,0xe4,0xe4,0xe5,0xe3,0x74,0x4e,0xbb,0xc2,0x3a,0x2f,0xa0,
0x69,0x8f,0xd8,0xeb,0xed,0xed,0x4c,0x71,0xca,0x9f,0x83,0xd7,0xc2,0x91,0x48,0x64,
0x5d,0x4b,0x6b,0xeb,0x0b,0x82,0x52,0x33,0x0b,0x47,0x36,0x36,0x3a,0xa0,0x69,0x8d,
0x7e,0x55,0xfd,0x29,0x47,0xb0,0x38,0x1f,0x7d,0xd6,0x05,0x2c,0x5d,0x7b,0x1a,0x98,
0x26,0x55,0x8b,0x97,0x71,0xcb,0x67,0x2e,0xad,0x34,0x0d,0xe3,0xbb,0xc0,0xf5,0x7e,
0x55,0x0d,0x00,0x2f,0x62,0xc5,0xc1,0xee,0xc5,0x4a,0x83,0x6a,0x60,0x65,0xde,0x98,
0x8b,0x15,0xdb,0x7b,0x0c,0x70,0x34,0x50,0x02,0x70,0x4a,0xfd,0x97,0x39,0xe1,0xbd,
0x97,0xf0,0xf8,0x6d,0x37,0xf1,0xfa,0x7d,0xb7,0x27,0xfb,0xc8,0x3a,0x70,0x17,0x49,
0xd4,0x33,0x3e,0x68,0x70,0x4e,0x26,0xdd,0x65,0x2b,0xe0,0x03,0x12,0x4e,0x29,0x29,
0x49,0x12,0x1e,0x8f,0xa7,0x5a,0xd0,0x49,0x10,0x78,0x26,0xf1,0x7d,0x2c,0x2f,0xad,
0xe3,0xc6,0xfa,0xe7,0xa6,0xbf,0xdf,0xc7,0xb2,0x75,0xa7,0x53,0x5c,0x51,0x4d,0x5e,
0x51,0x09,0xae,0xbc,0x02,0x22,0xbd,0x41,0x00,0x65,0xed,0xc7,0xae,0xa9,0x2d,0xae,
0xa8,0xae,0xdd,0xfe,0xea,0x8b,0x6c,0xf9,0xc7,0x43,0x23,0x55,0x11,0xb5,0x6b,0xcf,
0x44,0x3d,0xfa,0x78,0x1a,0x5f,0xf8,0x07,0xcd,0x9b,0x5f,0x1b,0xfe,0x7c,0xd9,0xda,
0xd3,0xf0,0x16,0x14,0xd2,0xaa,0xed,0x44,0x4e,0xde,0x6d,0xf2,0x07,0xc0,0xbd,0x49,
0x12,0x78,0xa2,0xb8,0x17,0xd8,0x0c,0xdc,0x94,0xe4,0x79,0x15,0x82,0x4e,0x82,0xc0,
0x33,0xa9,0x85,0xe3,0x7e,0x55,0xbd,0x0c,0xd8,0x08,0x1c,0xb2,0x8f,0xd9,0xb3,0x2f,
0xc0,0x6f,0xae,0x38,0x9b,0xe5,0xe7,0x5d,0x46,0x47,0x60,0xfb,0x10,0x79,0x59,0xf1,
0x9e,0xf7,0x73,0xda,0x47,0xaf,0x06,0x4c,0x8e,0x3e,0xe3,0x5c,0xee,0x35,0x0d,0x1a,
0xff,0xf9,0x77,0x00,0x8e,0xff,0xc0,0xc7,0x38,0xf7,0xea,0xaf,0x80,0x24,0xb1,0xe6,
0xa2,0x0f,0x72,0xfb,0x75,0x9f,0x66,0xdf,0xe6,0xd7,0x40,0x92,0x78,0xe4,0xa6,0x1b,
0x58,0x7d,0xc1,0x65,0x16,0x81,0xe5,0xa4,0x6c,0x87,0xcd,0xc0,0x8f,0x80,0x25,0x33,
0xd8,0x3d,0xbf,0xc5,0xda,0xa7,0x5e,0x95,0xc4,0x39,0x25,0x82,0x4e,0x33,0x8f,0x6c,
0xaf,0x0f,0xbc,0x03,0xb8,0x14,0x18,0x73,0x2b,0x4a,0x72,0xb8,0x78,0xf7,0xf1,0x07,
0x68,0x6b,0x7a,0x7b,0xf8,0xb3,0x9d,0xaf,0x3c,0x47,0x73,0x93,0x55,0x5f,0x2b,0x1a,
0x0a,0x11,0x19,0x38,0x50,0xd3,0x76,0xa0,0xbb,0x8b,0x68,0x24,0x8c,0x24,0xc9,0x84,
0xfb,0x7a,0x19,0x08,0x1e,0x28,0x99,0xa9,0x6d,0x7c,0x9e,0xbb,0xbf,0xf3,0x79,0xf6,
0x0e,0x69,0xe5,0xc4,0x71,0xeb,0x4c,0x24,0xe3,0x3b,0xa8,0x5f,0x4c,0xe0,0x67,0x49,
0x9e,0x96,0x23,0xe8,0x24,0x34,0xf0,0x6c,0x90,0xf8,0x1f,0x7e,0x55,0xfd,0x28,0x56,
0x0a,0xda,0x71,0xf7,0x7d,0x43,0x5d,0xed,0xfc,0xef,0xe7,0x3e,0x8c,0x3b,0xaf,0x80,
0x78,0x78,0x10,0x3d,0x76,0x80,0x5b,0x8d,0x4f,0x3d,0xcc,0xae,0x8d,0xcf,0x51,0x54,
0xed,0xa7,0x7d,0xe7,0x56,0xf4,0x68,0x64,0xac,0x05,0x63,0xb2,0x8f,0x78,0xcf,0x2c,
0x75,0xcd,0x03,0xc0,0x60,0x12,0xc4,0x74,0x08,0x3a,0x09,0x0d,0x3c,0x5b,0x24,0xfe,
0x8b,0xad,0x89,0x13,0xdb,0x26,0x32,0x4d,0x22,0x7d,0x3d,0xa3,0xc8,0x3b,0x84,0x48,
0x7f,0x2f,0x2d,0x8d,0x6f,0x8d,0x4d,0x5e,0x48,0x36,0x48,0xbf,0x93,0x31,0xc2,0x21,
0x67,0xa8,0x4f,0x22,0xc0,0x33,0x42,0x3a,0x04,0x81,0xd3,0x85,0xc4,0xf7,0x63,0x95,
0x4a,0xd9,0x3b,0x9d,0xf7,0x49,0x52,0xff,0x6e,0x9f,0xcc,0xde,0xf3,0x14,0xe0,0x5f,
0x42,0x32,0x04,0x81,0xd3,0x89,0xc4,0xaf,0x60,0x6d,0xfd,0xdc,0x09,0xd3,0x54,0xa7,
0x3b,0x39,0x0d,0xbc,0x6b,0x96,0xbb,0xe4,0x5d,0x21,0x15,0x82,0xc0,0xe9,0x46,0xe2,
0xee,0x80,0xa6,0x7d,0x08,0x38,0x07,0x78,0x6d,0x6a,0xb9,0x2b,0x25,0xbb,0x85,0xb4,
0x7f,0x8a,0x94,0xfe,0x44,0xdf,0xf3,0x2e,0x21,0x11,0x82,0xc0,0xe9,0x4a,0xe4,0x27,
0xb0,0x0a,0x7b,0x9f,0x03,0xfc,0x0d,0xcb,0x99,0x62,0xf2,0x1d,0x9e,0xdc,0x16,0x52,
0xcf,0x2c,0x13,0x58,0x24,0x6a,0x4f,0x71,0x08,0xcb,0xe1,0x91,0x49,0x6c,0x60,0x25,
0xc6,0x7b,0xdc,0xaf,0xaa,0x25,0xc0,0x05,0x58,0xf5,0x8e,0xd6,0x01,0x95,0x58,0x56,
0xeb,0x23,0xa9,0x54,0xd3,0x26,0x7e,0x1f,0xf0,0x36,0xf0,0x7a,0x4e,0x4e,0x4e,0x17,
0x56,0x35,0x89,0x44,0x10,0x9f,0xe5,0x2e,0x18,0x10,0x52,0x20,0x08,0x9c,0x29,0x64,
0xee,0xc4,0x8a,0xee,0xb9,0x0d,0xc0,0xaf,0xaa,0x3e,0x60,0x3e,0x96,0x07,0x52,0x09,
0xd6,0x76,0x8b,0x03,0x6b,0x4f,0xb9,0x1f,0x2b,0x41,0x7b,0x2b,0xb0,0x2f,0xa0,0x69,
0x1d,0x43,0xd7,0xf1,0xab,0xea,0xf2,0x24,0x08,0x2c,0x20,0x20,0x08,0x3c,0x4d,0x84,
0x0e,0x62,0x05,0x44,0x6c,0x12,0xbd,0x21,0x20,0xd6,0xc0,0x02,0x02,0x02,0x82,0xc0,
0x02,0x02,0x82,0xc0,0x02,0x02,0x02,0x82,0xc0,0x02,0xb3,0x8a,0xb8,0xe8,0x02,0x41,
0x60,0x81,0xf4,0x85,0x29,0xba,0x40,0x10,0x58,0x40,0x40,0x40,0x10,0x58,0x40,0x40,
0x40,0x10,0x58,0x40,0x40,0x40,0x10,0x58,0x40,0x40,0x10,0x58,0x40,0x40,0x40,0x10,
0x58,0x20,0x31,0xec,0xb5,0x02,0x2b,0x12,0x82,0x69,0x9a,0x9c,0xfd,0x85,0xef,0xac,
0x6c,0x68,0x0a,0x9e,0x7d,0xdd,0x5f,0x5f,0x3a,0xcb,0x9d,0x5f,0xe8,0x49,0x58,0x20,
0x1c,0xce,0xe1,0xe0,0x8c,0x40,0x12,0xf7,0x14,0x98,0x1d,0x08,0x5f,0xe8,0x14,0xc6,
0xe9,0x57,0x5f,0xb7,0xe1,0xe4,0x0f,0x5c,0x51,0x06,0xcc,0xed,0x6e,0xd9,0xe7,0xff,
0xf5,0x07,0x4f,0x47,0x71,0x8d,0xcf,0x45,0x33,0x16,0x45,0x5d,0x7e,0xcc,0x4f,0x01,
0x14,0xa7,0x8b,0xc2,0xf2,0x6a,0xda,0xfa,0x12,0x8b,0x4c,0x3c,0xf3,0x9a,0xaf,0x5f,
0x71,0xc2,0x05,0x97,0x9e,0x02,0x74,0x44,0x42,0x03,0x3d,0x3f,0x3c,0xc5,0x8f,0xab,
0xa8,0x52,0xbc,0x0c,0x41,0x60,0x01,0xb0,0x82,0xfa,0x4d,0x33,0xb1,0x2d,0xda,0xe2,
0xaa,0x9a,0x33,0x81,0x33,0x01,0x1c,0x4e,0x17,0xe8,0x09,0xfa,0x66,0x48,0x60,0x8e,
0xda,0x06,0x4e,0x7c,0x4b,0x58,0x71,0xba,0x0a,0x80,0xe5,0x00,0xb2,0xa2,0x10,0xef,
0x8d,0xe1,0x4a,0xa0,0x78,0xe8,0x92,0xd3,0xce,0x9f,0x7f,0xfd,0xb7,0x7e,0xb4,0x0c,
0x68,0xaa,0xaf,0xf3,0x09,0x27,0x12,0x41,0xe0,0xf4,0x47,0x43,0x53,0x30,0x1f,0xab,
0x0a,0xe1,0x1a,0xac,0x1c,0xcb,0x47,0x77,0xef,0xdf,0x7b,0xd4,0x8d,0x1f,0x39,0x77,
0xa8,0xa8,0x78,0xc6,0x40,0x3d,0xea,0xd8,0x0b,0x81,0x0b,0x81,0x78,0x43,0x53,0xf0,
0x5d,0xe0,0x4d,0xe0,0x75,0xac,0xbc,0x5a,0x5b,0xea,0xeb,0x7c,0x41,0x21,0x11,0x82,
0xc0,0xa9,0x4e,0xd8,0x32,0xac,0x2c,0x1e,0x1b,0x80,0xb5,0xb6,0x26,0x2b,0x38,0x58,
0x03,0x67,0x81,0x4c,0x1d,0x6d,0x1f,0x1f,0xb5,0x3f,0x0b,0x37,0x34,0x05,0xb7,0x00,
0x2f,0x61,0x65,0xba,0x7c,0xb1,0xbe,0xce,0xb7,0x57,0x48,0x8c,0x20,0xf0,0x6c,0x13,
0x56,0x06,0x4e,0xc2,0xaa,0x74,0x78,0x1e,0xb0,0x94,0x23,0x14,0x4c,0xcb,0x62,0x78,
0x80,0x63,0xed,0xe3,0x1a,0x20,0xd6,0xd0,0x14,0xdc,0x09,0x3c,0x02,0x3c,0x0a,0x3c,
0x95,0x64,0x9d,0x67,0x01,0x41,0xe0,0x09,0x93,0xd6,0x0b,0x9c,0x0a,0x5c,0x86,0x55,
0x5b,0xa9,0x54,0xf4,0x4a,0xd2,0x70,0x02,0x8b,0xed,0xe3,0x4b,0xc0,0x40,0x43,0x53,
0xf0,0x51,0xac,0x24,0xf6,0x8f,0x8a,0xe9,0xb6,0x20,0xf0,0x54,0x93,0x56,0x02,0x4e,
0x01,0x3e,0x06,0x5c,0x84,0xa8,0x03,0x34,0xd5,0xc8,0x05,0x3e,0x60,0x1f,0x43,0x64,
0xfe,0x03,0xf0,0x98,0xd0,0xcc,0x82,0xc0,0x93,0x21,0x6e,0x11,0x50,0x0f,0x7c,0x0a,
0x58,0x34,0x15,0xd7,0x34,0x33,0x34,0x46,0xc8,0x9c,0xba,0x86,0x8d,0x24,0xf3,0xfe,
0x86,0xa6,0xe0,0xef,0x81,0x9b,0xeb,0xeb,0x7c,0x7b,0x84,0x44,0x0a,0x02,0x27,0x4a,
0x5c,0x3f,0xf0,0x55,0xe0,0x93,0x4c,0x71,0xd1,0x2e,0x43,0x8f,0x27,0x6c,0xc8,0x4a,
0x05,0x83,0x97,0xc3,0x9b,0xd8,0xf7,0xfa,0xba,0x3a,0xa6,0xe3,0xf6,0x15,0xc0,0xb7,
0x80,0xaf,0x37,0x34,0x05,0xff,0x02,0xfc,0xa4,0xbe,0xce,0xf7,0xa6,0x90,0xd0,0x03,
0x10,0x9e,0x58,0xa3,0x89,0x5b,0xd3,0xd0,0x14,0x6c,0x00,0xb6,0x02,0x9f,0x65,0x1a,
0x2a,0xee,0x85,0xfa,0x7a,0x13,0xaa,0xce,0x60,0x9a,0x06,0x0e,0x87,0x73,0x56,0xfb,
0x43,0x92,0x24,0x72,0xab,0xeb,0x12,0xfa,0xee,0xe6,0xc7,0x1e,0xc0,0x34,0xa6,0xcd,
0x71,0x4b,0x01,0x3e,0x04,0x6c,0x6a,0x68,0x0a,0xde,0xdf,0xd0,0x14,0x3c,0x4a,0x48,
0xab,0x20,0xf0,0x48,0xe2,0x7a,0x1a,0x9a,0x82,0xdf,0x07,0x1a,0xb1,0xea,0xe2,0xba,
0xa6,0xeb,0x5e,0xfb,0xb7,0x6f,0x49,0x4c,0x53,0xc7,0x62,0xe4,0x15,0xcf,0xae,0x7d,
0x4c,0x71,0x38,0xa9,0x3a,0xfa,0x84,0x84,0xbe,0xdb,0xdf,0xde,0x42,0x6b,0x60,0xfb,
0xb4,0x8f,0x29,0xc0,0xc5,0xc0,0xeb,0x0d,0x4d,0xc1,0x5b,0x1a,0x9a,0x82,0xc5,0x82,
0xc0,0x82,0xbc,0x1b,0x80,0x77,0x80,0xeb,0x01,0xef,0x74,0xde,0x2b,0x1e,0x8d,0xf2,
0xda,0x43,0x89,0x55,0x0b,0xcd,0x29,0x2a,0xa5,0xa0,0x74,0xce,0xec,0x6a,0x60,0x45,
0xa1,0x6a,0x69,0x82,0xca,0x4e,0x92,0xd8,0xfc,0xd4,0xa3,0x13,0x29,0x9f,0x3a,0xd1,
0xa5,0x5f,0x3d,0xd0,0xd4,0xd0,0x14,0xbc,0xdc,0x36,0x32,0x0a,0x02,0x67,0x19,0x71,
0x1d,0x0d,0x4d,0xc1,0xff,0x04,0xfe,0x01,0x2c,0x98,0x89,0x7b,0x36,0x6d,0x7c,0x9e,
0x8e,0xed,0x89,0xd5,0x0b,0xab,0x5b,0x77,0x26,0xde,0x02,0xdf,0xec,0x76,0x92,0x69,
0xb2,0xe0,0xd8,0x13,0x30,0x13,0x74,0xe1,0xdc,0x78,0xf7,0x1f,0x68,0x0f,0xec,0x98,
0xc9,0x27,0x2c,0x01,0xee,0x00,0x6e,0x6f,0x68,0x0a,0xe6,0x09,0x02,0x67,0x0f,0x79,
0x0b,0x80,0x87,0x81,0x6f,0xcc,0x54,0x1f,0x74,0x35,0xef,0xe1,0xe1,0x9f,0xff,0x07,
0x92,0xac,0x24,0xf4,0xfd,0x95,0x67,0x5f,0x80,0x69,0x4e,0xc5,0x9a,0xd2,0x1c,0xb3,
0x8e,0x71,0xa2,0xa8,0x5a,0xb4,0x8c,0x92,0xda,0xa5,0x89,0x4d,0xfb,0xf5,0x38,0x8f,
0xde,0xfc,0x73,0xa2,0xe1,0x19,0xaf,0x88,0xfa,0x11,0xe0,0x85,0x86,0xa6,0x60,0xb5,
0x20,0x70,0xe6,0x93,0xd7,0x67,0x6b,0xdd,0xb3,0x67,0xea,0x9e,0x5d,0xcd,0x7b,0xb8,
0xf3,0xbb,0x5f,0x26,0x92,0x60,0x44,0x50,0xdd,0x29,0xe7,0xa0,0xae,0x38,0x76,0xea,
0x14,0xa9,0x91,0xf8,0x16,0x8f,0x24,0x8f,0x9e,0x8d,0x3a,0xdc,0x6e,0xce,0xfc,0xd4,
0x97,0x12,0xde,0xff,0xd2,0x5e,0x7d,0x9e,0x27,0x6e,0xf9,0x15,0xb1,0x48,0x64,0xa6,
0x5f,0xed,0xd1,0xc0,0x8b,0x0d,0x4d,0xc1,0xf9,0x82,0xc0,0x99,0x4b,0x5e,0x17,0xf0,
0x20,0x56,0x60,0xc1,0xb4,0x43,0x8f,0xc5,0xd8,0xf2,0xc2,0x53,0x34,0x5c,0x73,0x39,
0x5d,0x81,0x6d,0x09,0xaf,0x7d,0xcf,0xfe,0xf4,0x97,0x27,0x15,0xec,0x60,0x9a,0x13,
0xdf,0x82,0x1a,0xeb,0xac,0x45,0xab,0x4e,0xe6,0xf8,0x0f,0x7c,0x2c,0xe1,0x6b,0x6c,
0xfa,0xeb,0x1d,0xdc,0xf7,0x93,0xeb,0x09,0xb6,0xee,0x9f,0xa9,0x35,0xf1,0x10,0x6a,
0x80,0x27,0x1a,0x9a,0x82,0xa5,0x82,0xc0,0x99,0x89,0x1b,0xb0,0x3c,0xaa,0xa6,0x15,
0xb1,0xf0,0x20,0x8d,0x2f,0x3d,0xc3,0xed,0x5f,0xbf,0x9a,0x7b,0xbe,0xf3,0x39,0xa2,
0x03,0xfd,0x09,0x9d,0xe7,0xce,0x2f,0xe4,0x8a,0xff,0xbc,0x09,0xdf,0xdc,0x8a,0xc9,
0x3d,0x80,0xa1,0xe3,0x70,0xb9,0x87,0x29,0xe9,0x70,0xbb,0x13,0x1f,0x74,0xe2,0xf1,
0x31,0xb4,0xb2,0xcc,0x99,0x57,0x7e,0x8e,0xe5,0xe7,0x5c,0x9c,0xf0,0x75,0xb6,0x3d,
0xf7,0x38,0xbf,0xfd,0xf4,0x25,0x3c,0x7f,0xd7,0x6d,0xf4,0x75,0xb6,0xcf,0xe4,0x3b,
0xae,0x05,0x6e,0xb3,0xfd,0xd4,0x05,0x81,0x33,0x48,0xfb,0xae,0xc6,0xda,0xdb,0x9d,
0x56,0xf4,0x77,0x77,0x71,0xdb,0xd7,0x3e,0xcd,0x3d,0xff,0xfe,0x05,0xf6,0x6d,0x7e,
0x15,0x49,0x19,0xdf,0x57,0xc6,0x34,0x4d,0xaa,0x57,0xae,0xe1,0xaa,0x1b,0xff,0x44,
0x79,0xed,0xd8,0xfb,0xae,0x86,0x61,0x24,0xec,0xed,0x24,0x29,0x0e,0x5c,0x39,0x96,
0x41,0x5d,0x96,0x65,0xf2,0x4a,0xcb,0x13,0x7e,0xfe,0xee,0xe6,0xbd,0x63,0x6a,0x6f,
0xa7,0xc7,0xc3,0x05,0x5f,0xf8,0x36,0xeb,0xaf,0xfc,0x42,0xc2,0xda,0x3d,0x16,0xea,
0xe7,0xe9,0x5b,0x7e,0xc1,0xad,0x9f,0xff,0x08,0xdd,0x2d,0xcd,0x33,0xf9,0xba,0xcf,
0x07,0x2e,0x15,0x04,0xce,0x2c,0x5c,0x8f,0xe5,0x10,0x30,0xad,0x78,0xe3,0x89,0xbf,
0xd1,0xda,0xf8,0x56,0x82,0x53,0x5d,0x83,0x82,0x8a,0x6a,0x2e,0xfc,0xe6,0x8f,0xf9,
0xc8,0x0f,0xfe,0x9b,0xe2,0xca,0x9a,0xc3,0x7e,0x37,0x12,0xea,0x47,0x4a,0xd0,0xb1,
0xa3,0xb0,0x7a,0x3e,0x1e,0xaf,0x65,0x94,0x95,0x15,0x85,0x92,0xea,0x79,0x09,0x3f,
0x7f,0xcb,0x8e,0xc6,0xc3,0x4e,0x7b,0x1d,0x2e,0x17,0xa7,0x5e,0x51,0xcf,0x95,0xbf,
0xb9,0x83,0xc5,0x1b,0xce,0x45,0x0f,0x27,0x56,0x3e,0xb8,0xbf,0xbd,0x85,0x97,0xee,
0xbb,0x63,0xa6,0xdf,0x77,0x56,0x94,0x70,0xcd,0x0a,0x57,0x4a,0x7b,0x4d,0x74,0xee,
0x4c,0xdc,0x4b,0x92,0x8e,0x3c,0x26,0x9a,0x86,0x8e,0x24,0x41,0xed,0x69,0x97,0x53,
0xb3,0x72,0x1d,0x8b,0x8e,0x3d,0x96,0xb2,0xf2,0x42,0xc6,0x5b,0xf2,0xf6,0x77,0x75,
0x22,0x3b,0x12,0xf3,0x2f,0x99,0x7f,0xfc,0x49,0xb8,0xbc,0x5e,0x4c,0x5b,0x6b,0xd7,
0x2c,0x3b,0x9a,0x8d,0xd6,0xc2,0x78,0xdc,0x73,0x5b,0xb7,0x6d,0x61,0xb0,0xaf,0x07,
0x4f,0x6e,0xfe,0x61,0x17,0xd8,0x95,0x8b,0x96,0x72,0xe1,0x57,0x7e,0xc0,0xb2,0x73,
0x3e,0xce,0xae,0xd7,0x5f,0x66,0xfb,0xb3,0x0f,0xd0,0xbb,0x77,0x0b,0xb2,0x33,0xe7,
0xb0,0xe7,0x78,0x0a,0x8a,0x66,0xfa,0xb5,0x2f,0x6e,0x68,0x0a,0xae,0xa9,0xaf,0xf3,
0xfd,0x4b,0x10,0x38,0xfd,0xb1,0x0a,0x2b,0x84,0x6d,0xda,0x71,0xc2,0x05,0x97,0x92,
0x5b,0x3c,0x97,0xc0,0x96,0x9d,0x44,0x06,0x7a,0x50,0x9c,0x6e,0x3c,0x05,0x45,0xb8,
0x3c,0x5e,0xbc,0xbe,0x52,0xf2,0x4a,0xe6,0x92,0x5f,0x5a,0x89,0xe2,0xb4,0xc8,0x38,
0x18,0x85,0xbd,0x7b,0x43,0x14,0x15,0xb9,0xc8,0xcf,0x3f,0xdc,0xeb,0x90,0xd8,0xbf,
0x7d,0x6b,0xc2,0x86,0xad,0x65,0xeb,0xcf,0x1c,0xe5,0xd6,0x58,0xbd,0xe4,0x28,0x14,
0x97,0x0b,0x3d,0x16,0x1b,0xf7,0xdc,0x50,0x67,0x2b,0x1d,0xbb,0x03,0x54,0x1f,0xc6,
0x81,0x43,0xd7,0x4d,0xba,0xbb,0x63,0xf4,0xf7,0xc7,0xc9,0x2d,0x55,0x59,0x71,0xb6,
0xca,0x8a,0xb3,0x2e,0x63,0xa0,0xbb,0x9d,0xfe,0xee,0x36,0xfa,0x3b,0xf6,0x13,0x19,
0x1c,0x20,0xd2,0x17,0x24,0x36,0xd8,0x8f,0xec,0x70,0x52,0xb1,0x68,0x05,0xab,0xce,
0x3a,0x75,0x36,0xde,0xfb,0x7a,0xac,0x8c,0x20,0x82,0xc0,0x69,0x8e,0x9a,0x99,0xba,
0x91,0xd3,0xe3,0x61,0xe5,0x19,0x67,0xb3,0x74,0x9d,0x41,0x6f,0x6f,0x9c,0x81,0x90,
0x3e,0xee,0x16,0x8c,0x61,0x40,0x67,0x67,0x94,0x50,0x48,0xa7,0xac,0xcc,0x85,0x7c,
0xd0,0x56,0x4e,0x74,0x70,0x80,0xd7,0x1f,0xfa,0x4b,0x42,0xf7,0x2f,0x9a,0x57,0x8b,
0x7a,0xd4,0x71,0xa3,0xa7,0xd4,0x65,0x73,0x59,0x7d,0xc9,0x27,0x78,0xf9,0x8e,0x5b,
0xc6,0x5f,0x53,0x39,0x9c,0x6c,0x7e,0xfa,0xd1,0x31,0x09,0x1c,0x0e,0xeb,0xb4,0xb7,
0x47,0xd1,0x75,0xf3,0xe0,0x69,0x07,0xb9,0xc5,0x73,0xc8,0x2d,0x9e,0xc3,0xdc,0xda,
0x15,0xc3,0x83,0x8e,0x2c,0x43,0x41,0x81,0x83,0xfc,0x7c,0x07,0x8a,0x32,0x2b,0xce,
0x52,0x55,0x62,0x0d,0x9c,0x19,0x88,0xcd,0xf4,0x0d,0xdd,0x6e,0x99,0xb2,0x32,0x17,
0x73,0xca,0x5c,0xc8,0x09,0xca,0xee,0xe0,0xa0,0x4e,0x4b,0x4b,0x04,0xe3,0xa0,0x7d,
0xdb,0x57,0xfe,0x76,0x37,0x3d,0xcd,0xda,0xb8,0xe7,0xeb,0xd1,0x30,0xe7,0x7e,0xee,
0x1b,0x38,0x0f,0xb2,0x3a,0x9b,0xa6,0xc9,0x89,0xef,0xfb,0x30,0x39,0x45,0x89,0x85,
0x31,0x6f,0xbc,0xf3,0x56,0x9a,0x9b,0x46,0x7b,0x8c,0x85,0x42,0x3a,0xad,0xad,0x91,
0x43,0xc9,0x7b,0xd8,0xf6,0x4b,0x54,0x56,0x7a,0xf0,0xf9,0x9c,0xb3,0x45,0xde,0x59,
0x79,0xef,0x82,0xc0,0xd3,0x83,0xc6,0xd9,0xba,0xb1,0xd7,0xab,0x50,0x5e,0xee,0x49,
0x78,0x3b,0x34,0x1a,0x35,0x68,0x6f,0x8b,0xda,0x9a,0x77,0x90,0xe7,0xee,0xfc,0x3d,
0x4f,0xdf,0xf2,0x0b,0xc6,0xde,0xa1,0x1d,0xbd,0xce,0x3c,0xa5,0xfe,0x5a,0xe6,0xaf,
0x1c,0x7b,0x8b,0x3b,0xaf,0xa8,0x98,0xcb,0xbe,0xf7,0xcb,0xc4,0x84,0xc2,0xe5,0xe6,
0xae,0xef,0x7e,0x69,0x38,0x38,0x21,0x12,0x31,0x68,0x6f,0x8f,0x24,0x1c,0xcb,0x9c,
0x93,0x63,0xb5,0xd9,0xe1,0x98,0x75,0x17,0xe5,0x6d,0x82,0xc0,0x99,0x81,0x37,0x81,
0xce,0xd9,0xba,0xb9,0xcb,0x2d,0x53,0x56,0x9a,0xf8,0x5e,0xec,0x60,0x58,0x67,0xef,
0xce,0xfd,0xdc,0xf6,0xd5,0x7a,0x9e,0xb9,0x35,0x01,0xd2,0x99,0x26,0xab,0x2e,0xf9,
0x38,0xa7,0x5c,0x7e,0xe5,0x11,0x8d,0x68,0x35,0x4b,0x8f,0xe6,0xc3,0x3f,0xbd,0x25,
0xa1,0x7d,0xe1,0x81,0x8e,0x56,0x7e,0x77,0xd5,0xc5,0xbc,0xf1,0xe4,0xdf,0x93,0x22,
0xaf,0xd3,0x69,0xcd,0x3c,0x52,0x24,0x77,0xdf,0x13,0x82,0xc0,0x19,0x80,0xfa,0x3a,
0xdf,0x20,0xf0,0x7f,0xb3,0xf9,0x0c,0xde,0x5c,0x05,0xaf,0x37,0xf1,0x5d,0xac,0x17,
0xef,0xf9,0x23,0x6d,0x4d,0x6f,0x8f,0xfb,0x3d,0x23,0x36,0xc8,0xb1,0x1f,0xfa,0x2a,
0xab,0x2f,0xb9,0x66,0xd8,0x30,0x76,0x24,0xf8,0x8f,0x39,0x81,0xf3,0xbe,0xfd,0xbf,
0x14,0xaa,0xcb,0xc7,0xfd,0xae,0x24,0x2b,0xfc,0xf5,0x07,0x5f,0xb4,0x3c,0xaa,0x12,
0x44,0x69,0xe9,0xa1,0x6b,0xf8,0x59,0xc2,0xa3,0xf5,0x75,0xbe,0x80,0x20,0x70,0xe6,
0xe0,0xc7,0xc0,0xac,0x26,0x4b,0xf3,0xf9,0x12,0x34,0x84,0x4b,0x12,0x3b,0x9f,0xb9,
0x7b,0x3c,0xb5,0xcb,0x9c,0x65,0x27,0x71,0xfe,0xf7,0xef,0x66,0xf9,0x19,0x97,0xd0,
0xd7,0x6f,0x12,0x0e,0xeb,0xe3,0x5e,0xba,0xa3,0x23,0x42,0x41,0xc5,0x02,0xce,0xfd,
0xda,0x7f,0x73,0xfc,0x15,0xd7,0xe1,0xf0,0x1c,0x39,0x88,0x47,0x72,0x78,0x08,0xf5,
0x24,0x36,0x79,0xf1,0xe6,0x28,0xb8,0xdd,0x29,0x21,0x52,0x71,0xac,0x4c,0x1e,0x19,
0x8f,0xac,0x49,0xa9,0x53,0x5f,0xe7,0x6b,0x6d,0x68,0x0a,0x5e,0x03,0xfc,0x79,0xd6,
0xa6,0xd2,0x2e,0x19,0xb7,0x5b,0x26,0x12,0x31,0xc6,0x9d,0x12,0xcf,0x3d,0x6a,0x3d,
0xfb,0x5e,0x7b,0x72,0xf4,0xc7,0x86,0x81,0xac,0x28,0xf8,0xd7,0xbf,0x8f,0x85,0x27,
0xbd,0x87,0x39,0x0b,0x96,0x8d,0x8a,0x6e,0xea,0xec,0x8c,0x51,0x59,0xa9,0x1c,0x76,
0xfa,0x1a,0x0a,0xe9,0x84,0x42,0x16,0xc9,0x1d,0xee,0x1c,0x96,0x6e,0x78,0x3f,0xf3,
0x57,0x9d,0xce,0x9e,0xb7,0x5e,0x62,0xdb,0xb3,0x0f,0xd2,0xf1,0xee,0xf3,0xc8,0xee,
0xd1,0x84,0xce,0xaf,0xa8,0xc5,0x57,0xae,0x26,0xd4,0xbe,0xfc,0x82,0x94,0x11,0xa7,
0x1f,0xd6,0xd7,0xf9,0x36,0x65,0x83,0x5c,0x67,0x5d,0x20,0x74,0x43,0x53,0xf0,0x87,
0xb3,0x39,0x3a,0xf7,0xf4,0xc4,0xe8,0xee,0x1e,0xdf,0x38,0x3a,0xd8,0xd3,0xc5,0xee,
0x57,0x1f,0xa1,0xb7,0x65,0x07,0xb2,0xa7,0x08,0x77,0xfe,0x1c,0x4a,0xd4,0x3a,0x8a,
0xaa,0x16,0xe0,0xc9,0x2b,0x3c,0xec,0x79,0x65,0x65,0x2e,0x72,0x73,0xc7,0x26,0x52,
0xf3,0xbe,0x30,0xd1,0xd8,0xd8,0x83,0x87,0xa1,0xc7,0xe9,0xef,0x68,0xa1,0x73,0xcf,
0x36,0xba,0xf6,0xec,0x20,0xbf,0x40,0xa6,0xb8,0xa2,0x8a,0xfc,0x9a,0x13,0x70,0xe7,
0x8f,0xef,0x84,0x21,0x49,0x30,0x6f,0x9e,0x37,0x15,0xd6,0xbe,0xf7,0x02,0x1f,0xac,
0xaf,0xf3,0xe9,0x82,0xc0,0x99,0x49,0x60,0x19,0x2b,0xa8,0xe1,0xda,0xd9,0xb8,0x7f,
0x38,0x6c,0x6d,0x15,0x25,0x82,0xe2,0x62,0x27,0xf9,0xf9,0x0e,0x42,0x21,0x6b,0xff,
0x35,0x11,0x78,0x3c,0x32,0xe5,0xe5,0x9e,0x49,0xdd,0xd7,0xe9,0x94,0xa9,0xaa,0xf2,
0x60,0x9a,0xb0,0x7b,0x77,0x28,0x21,0x03,0x56,0x4e,0x8e,0xcc,0xdc,0xb9,0xb3,0x9e,
0xd3,0xfe,0x41,0xe0,0xb2,0x6c,0x4a,0x45,0x9b,0x75,0xf1,0xc0,0xf5,0x75,0x3e,0xa3,
0xbe,0xce,0xf7,0x15,0xac,0xac,0x93,0x33,0x5e,0x84,0x2b,0xa9,0x3d,0x51,0x3b,0x2c,
0x30,0x27,0x47,0x49,0x58,0xb3,0x85,0xc3,0xc6,0x98,0x7b,0xb5,0x03,0x03,0x89,0x2b,
0x24,0xaf,0x57,0x9e,0x40,0xbb,0x66,0x5d,0x94,0x6e,0x04,0x3e,0x90,0x6d,0x79,0xa4,
0xb3,0x36,0xa5,0x4e,0x7d,0x9d,0xef,0xe7,0xc0,0x59,0xc0,0x8c,0xd6,0xe8,0x49,0x2a,
0x7d,0xb2,0x4d,0x5a,0x59,0x96,0x70,0xb9,0x12,0x7f,0x55,0xe1,0xc1,0x43,0xc9,0x3a,
0x38,0x98,0x38,0x81,0x3d,0x1e,0x25,0x9d,0x5e,0x65,0x2f,0x70,0x45,0x7d,0x9d,0xef,
0xf3,0xd9,0x32,0x6d,0x16,0x04,0x3e,0x40,0xe2,0xa7,0x81,0x15,0x40,0x03,0xc9,0xd4,
0xe0,0x9c,0x05,0x24,0x63,0xdd,0x0d,0x1f,0x64,0x24,0x8b,0xc7,0xcd,0x84,0x3d,0xa8,
0x24,0x89,0xa4,0x06,0x8b,0x59,0xc6,0xdf,0x81,0x15,0xf5,0x75,0xbe,0x3f,0x67,0xab,
0x0c,0x67,0x7d,0x56,0xca,0xfa,0x3a,0x5f,0x4f,0x7d,0x9d,0xef,0x53,0x58,0xd5,0x04,
0x5f,0x4c,0xd5,0xe7,0x74,0x39,0x13,0x7f,0x55,0xd1,0xe8,0x41,0x04,0x8e,0x19,0x09,
0x6b,0x7e,0x59,0x96,0x26,0xe8,0xfa,0x38,0xa3,0xe3,0x5f,0x23,0x70,0x71,0x7d,0x9d,
0xef,0xfc,0x6c,0xaf,0xd8,0x20,0xf2,0x42,0x1f,0x20,0xf2,0x4b,0xc0,0x3a,0xe0,0x7d,
0xc0,0x6b,0xa9,0xf6,0x7c,0xc9,0xb8,0x25,0xc6,0xe3,0xe6,0x11,0xff,0x4e,0xe6,0x3e,
0x29,0x56,0x0e,0x75,0x27,0x56,0x3a,0xd9,0x63,0xea,0xeb,0x7c,0x0f,0x0a,0xa9,0x15,
0xa5,0x55,0x0e,0x26,0xb1,0x09,0x3c,0xd0,0xd0,0x14,0xfc,0x1b,0x70,0x06,0xf0,0x75,
0xe0,0x34,0x52,0xc0,0x5a,0x2f,0x27,0xa1,0x15,0x4d,0x73,0x28,0x2f,0x96,0xf5,0xb7,
0x6e,0x98,0xd3,0x32,0x50,0xcc,0x20,0xde,0x00,0x7e,0x0a,0xdc,0x53,0x5f,0xe7,0x8b,
0x09,0x49,0x15,0x04,0x1e,0x8f,0xc8,0x3a,0xf0,0x38,0xf0,0x78,0x43,0x53,0x70,0x19,
0xf0,0x19,0xac,0xd2,0x1e,0x65,0xb3,0xf5,0x4c,0xc9,0x28,0x42,0xd3,0x34,0x31,0x4d,
0x73,0x58,0x7b,0x1a,0xc9,0x64,0xa5,0x4c,0x9d,0xd7,0xd0,0x8b,0xb5,0x2d,0x74,0x73,
0x7d,0x9d,0xef,0x45,0x21,0x95,0x82,0xc0,0x13,0x25,0xf3,0xbb,0xc0,0x17,0x1b,0x9a,
0x82,0xdf,0xc0,0x4a,0x45,0xfb,0x11,0xac,0xec,0x1e,0xb9,0x33,0x40,0xdb,0x29,0x59,
0x62,0xa6,0x51,0x45,0xc4,0x18,0xf0,0x14,0x96,0xb7,0xdc,0x83,0xa2,0x4e,0xb0,0x20,
0xf0,0x54,0x12,0x79,0xd0,0xd6,0x08,0x0f,0xda,0x55,0x00,0xce,0xc1,0xaa,0xd3,0xf3,
0x5e,0x60,0x5a,0x4a,0x28,0x4c,0x66,0xf9,0x39,0x51,0xd2,0x9a,0x33,0x3f,0x48,0x84,
0xec,0xd9,0xce,0x83,0xc0,0x43,0xf5,0x75,0xbe,0x0e,0x21,0x6d,0x82,0xc0,0xd3,0x4d,
0xe6,0x7e,0x2c,0x97,0xbd,0x7b,0xed,0xba,0x3c,0x27,0xda,0xda,0xf9,0x2c,0xac,0x04,
0xe3,0xf9,0xa2,0x97,0x0e,0x8b,0x41,0xac,0xea,0x8f,0x4f,0xd8,0xc4,0x7d,0x56,0x14,
0xf1,0x16,0x04,0x9e,0x4d,0x32,0x9b,0xc0,0x4b,0xf6,0xf1,0x3d,0xbb,0x6c,0xcb,0x4a,
0xac,0x6d,0xa9,0x93,0xed,0xdf,0x27,0x5d,0xf2,0x23,0x8d,0xeb,0x82,0xb7,0x03,0x6f,
0x61,0x6d,0xd1,0xbd,0x00,0xbc,0x26,0xb4,0xac,0x20,0x70,0x2a,0x13,0xba,0x17,0x78,
0xd6,0x3e,0x68,0x68,0x0a,0x3a,0xb1,0x8c,0x5f,0xab,0x80,0x95,0xa6,0x61,0x1e,0x27,
0xcb,0xd2,0x29,0x86,0x61,0xce,0x58,0x9a,0xc6,0x99,0x58,0x03,0xcb,0xd6,0x7c,0x7f,
0x8f,0x4d,0xd6,0x37,0xed,0xe3,0x15,0x60,0x7f,0x7d,0x9d,0x2f,0x22,0x24,0x43,0x10,
0x38,0x5d,0x09,0x1d,0x03,0x9a,0x81,0xbf,0xda,0x07,0x00,0x37,0xfc,0xab,0xbd,0x20,
0x12,0xd1,0x57,0xc6,0x62,0xe6,0x3c,0x49,0x62,0x85,0xae,0x9b,0x95,0xb2,0x2c,0x1d,
0x6d,0x18,0xe6,0x5c,0x7b,0x0a,0xee,0x65,0x16,0x8c,0xc2,0x63,0x91,0x7d,0xc8,0x98,
0x0d,0x0c,0x28,0x8a,0xd4,0x27,0x4b,0xd2,0x5e,0x24,0xb6,0x28,0x8a,0xa4,0x29,0x8a,
0xb4,0x25,0x37,0x57,0xd9,0x59,0x50,0xe0,0x7c,0xfb,0xe3,0xf3,0x0b,0x42,0xe2,0x8d,
0x0b,0x02,0x67,0x05,0xbe,0xb6,0xa6,0x6c,0x48,0x53,0x1f,0x82,0x9f,0x6f,0x6c,0xf7,
0x85,0xc3,0x46,0x99,0x2c,0xe3,0xb1,0xb5,0xf7,0x5c,0xd3,0x64,0xae,0x24,0x51,0x25,
0xcb,0x52,0x0d,0x50,0x62,0x9a,0xe4,0x9a,0xa6,0xe9,0xb0,0x89,0x5e,0x20,0x49,0x92,
0x17,0x70,0x03,0x4e,0x49,0xc2,0x01,0x0c,0xd8,0x03,0x80,0x64,0x9a,0xe4,0x8d,0x20,
0x22,0x58,0x41,0x1c,0x11,0x7b,0x3d,0xda,0x63,0x9a,0xf4,0x4a,0x12,0x51,0x59,0x96,
0x06,0x24,0x89,0x56,0x40,0xb3,0xa7,0xbe,0xed,0x1e,0x8f,0xdc,0x63,0x18,0x68,0x1e,
0x8f,0xdc,0x5f,0x5c,0xec,0x6a,0xfd,0xe4,0xc2,0xc2,0x7e,0xf1,0xf6,0x52,0x07,0x92,
0xe8,0x82,0xf4,0xc6,0xff,0xed,0xee,0x97,0x3a,0xda,0xc3,0x8e,0x78,0xdc,0x54,0x0c,
0xc3,0x54,0x4c,0x13,0xc9,0x34,0x91,0x8a,0x8b,0x9d,0xba,0xed,0x12,0x29,0xb5,0xb5,
0x46,0x94,0xc1,0xb0,0x2e,0xcb,0xb2,0x64,0xca,0x32,0xc8,0xb2,0x64,0xc8,0x32,0x86,
0x24,0x49,0xba,0x2c,0x4b,0xb1,0x6f,0x9c,0x3c,0x47,0x17,0x3d,0x29,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x90,0x05,0xf8,0xff,0xbd,0xee,0x3d,0x8e,0x97,
0x10,0x8f,0xe6,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82};
@@ -1,163 +0,0 @@
#include <bb_spi_lcd.h>
#include <PNGdec.h>
#include "lodepng.h"
// sample images
#include "zoidberg_320x240_24b.h"
#include "zoidberg_320x240_4b.h"
#include "zebra.h"
#include "stackoverflow.h"
#include "snoopy_128x128.h"
#include "snoopy_128x128_4b.h"
#include "octocat_4bpp.h"
#include "arduino_screen.h"
static uint8_t u8GFXBuf[4096];
int bDisplay;
PNG *png;
BB_SPI_LCD lcd;
uint16_t u16LodeColor, u16PNGColor;
uint16_t __attribute__((aligned (16))) usPixels[480];
void DecodeTest(int bLode, const uint8_t *pData, size_t data_size, const char *szName)
{
unsigned int width, height;
int rc;
uint8_t *image;
long l;
char szTemp[64];
lcd.setFont(FONT_8x8);
if (bDisplay && !bLode) {
lcd.fillScreen(TFT_BLACK);
}
if (bLode) {
lcd.setTextColor(u16LodeColor, TFT_BLACK);
l = micros();
lodepng_decode32(&image, &width, &height, pData, data_size);
l = micros() - l;
if (image) {
if (!bDisplay) { sprintf(szTemp, "LodePNG decoded in %d us\n", (int)l); lcd.print(szTemp); }
free(image);
} else {
if (!bDisplay) lcd.println("LodePNG decode failed");
}
} else {
lcd.setTextColor(u16PNGColor, TFT_BLACK);
l = micros();
png = (PNG *)malloc(sizeof(PNG));
rc = png->openFLASH((uint8_t *)pData, data_size, PNGDraw);
if (rc == PNG_SUCCESS) {
rc = png->decode(NULL, PNG_FAST_PALETTE);
if (rc == PNG_SUCCESS) {
l = micros() - l;
sprintf(szTemp, "PNGdec decode in %d us\n", (int)l);
if (bDisplay) {
Serial.print(szTemp);
} else {
lcd.print(szTemp);
}
} else {
if (!bDisplay) lcd.println("PNGdec decode failed");
}
} else {
if (!bDisplay) lcd.println("PNGdec open failed");
}
free(png);
}
if (bLode == 1) {
lcd.setTextColor(TFT_MAGENTA, TFT_BLACK);
if (bDisplay)
lcd.setCursor(0, 224);
else
Serial.println(szName);
lcd.println(szName);
}
} /* DecodeTest() */
int PNGDraw(PNGDRAW *pDraw)
{
if (bDisplay) {
if (pDraw->y == 0) {
lcd.setAddrWindow(0, 0, pDraw->iWidth, 240);
}
png->getLineAsRGB565(pDraw, usPixels, PNG_RGB565_BIG_ENDIAN, 0xffffffff);
lcd.pushPixels(usPixels, pDraw->iWidth, DRAW_TO_LCD | DRAW_WITH_DMA);
}
return 1;
} /* PNGDraw() */
void setup() {
Serial.begin(115200);
spilcdSetTXBuffer(u8GFXBuf, 4096);
// lcd.begin(DISPLAY_CYD);
// lcd.begin(DISPLAY_TUFTY2040);
lcd.begin(DISPLAY_T_DISPLAY_S3_PRO);
//lcd.begin(LCD_ILI9341, FLAGS_NONE, 60000000, 10, 9, 8, -1, 12, 11, 13); // Teensy 4.x + ILI9341
lcd.setRotation(270);// lcd.begin(DISPLAY_CYD); //DISPLAY_CYD_22C);
lcd.fillScreen(TFT_BLACK);
lcd.setFont(FONT_12x16);
u16PNGColor = TFT_YELLOW;
u16LodeColor = TFT_GREEN;
lcd.setTextColor(u16LodeColor, TFT_BLACK);
lcd.print("LodePNG");
lcd.setTextColor(TFT_WHITE, TFT_BLACK);
lcd.print(" vs. ");
lcd.setTextColor(u16PNGColor, TFT_BLACK);
lcd.println("PNGdec");
} /* setup() */
void loop() {
char szTemp[64];
for (bDisplay = 0; bDisplay < 2; bDisplay++) { // first pass no display, second pass with display
DecodeTest(0, arduino_screen, sizeof(arduino_screen), "Arduino IDE 480x222x32-bpp");
DecodeTest(1, arduino_screen, sizeof(arduino_screen), "Arduino IDE 480x222x32-bpp");
if (bDisplay) delay(3000);
DecodeTest(0, stackoverflow, sizeof(stackoverflow), "stackoverflow 320x84x32-bpp");
DecodeTest(1, stackoverflow, sizeof(stackoverflow), "stackoverflow 320x84x32-bpp");
if (bDisplay) delay(3000);
DecodeTest(0, zoidberg_320x240_24b, sizeof(zoidberg_320x240_24b), "zoidberg 320x240x24-bpp");
DecodeTest(1, zoidberg_320x240_24b, sizeof(zoidberg_320x240_24b), "zoidberg 320x240x24-bpp");
if (bDisplay) delay(3000);
DecodeTest(0, zoidberg_320x240_4b, sizeof(zoidberg_320x240_4b), "zoidberg 320x240x4-bpp");
DecodeTest(1, zoidberg_320x240_4b, sizeof(zoidberg_320x240_4b), "zoidberg 320x240x4-bpp");
if (bDisplay) delay(3000);
DecodeTest(0, snoopy_128x128, sizeof(snoopy_128x128), "snoopy 128x128x32-bpp");
DecodeTest(1, snoopy_128x128, sizeof(snoopy_128x128), "snoopy 128x128x32-bpp");
if (bDisplay) delay(3000);
DecodeTest(0, octocat_4bpp, sizeof(octocat_4bpp), "octocat 240x200x4-bpp");
DecodeTest(1, octocat_4bpp, sizeof(octocat_4bpp), "octocat 240x200x4-bpp");
if (bDisplay) delay(3000);
DecodeTest(0, zebra, sizeof(zebra), "zebra 320x240x24-bpp");
DecodeTest(1, zebra, sizeof(zebra), "zebra 320x240x24-bpp");
if (bDisplay) delay(3000);
DecodeTest(0, snoopy_128x128_4b, sizeof(snoopy_128x128_4b), "snoopy 128x128x4-bpp");
DecodeTest(1, snoopy_128x128_4b, sizeof(snoopy_128x128_4b), "snoopy 128x128x4-bpp");
if (bDisplay == 0) {
lcd.setFont(FONT_12x16);
lcd.setTextColor(TFT_WHITE, TFT_BLACK);
lcd.println("Now to show the images...");
delay(5000);
lcd.fillScreen(TFT_BLACK);
}
} // for bDisplay
delay(5000);
lcd.fillScreen(TFT_BLACK);
lcd.setCursor(0,0);
lcd.setFont(FONT_12x16);
lcd.setTextColor(TFT_WHITE, TFT_BLACK);
lcd.println("Q: Why did LodePNG fail?");
lcd.println("A: It uses too much RAM\n");
lcd.println("It wasn't designed to run");
lcd.println("on embedded devices, but");
lcd.println("PNGdec is written for MCUs");
sprintf(szTemp, "It only needs %d bytes\n\r", sizeof(PNG));
lcd.print(szTemp);
lcd.println("(and it's much faster!)");
while (1) {
delay(1000);
};
}
@@ -1,508 +0,0 @@
// Created with image_to_c
// https://github.com/bitbank2/image_to_c
//
// snoopy_128x128
// Data size = 7914 bytes
//
// PNG, Compression=Flate, Size: 128 x 128, 32-Bpp
//
// for non-Arduino builds...
#ifndef PROGMEM
#define PROGMEM
#endif
const uint8_t snoopy_128x128[] PROGMEM = {
0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x08,0x06,0x00,0x00,0x00,0xc3,0x3e,0x61,
0xcb,0x00,0x00,0x1e,0xb1,0x49,0x44,0x41,0x54,0x78,0xda,0xed,0x9d,0x79,0x7c,0x5d,
0x55,0xd5,0xf7,0xbf,0x6b,0x9f,0x3b,0x64,0x1e,0x9b,0xb1,0x53,0xee,0xcd,0xd8,0xa6,
0x03,0x2d,0x50,0xa6,0xa2,0x2d,0x45,0x45,0x04,0x45,0x65,0x50,0x1c,0x10,0x05,0x47,
0x10,0x44,0x5e,0x1c,0x1e,0x2d,0xa2,0x3e,0x3c,0x3e,0x8a,0xb3,0xe2,0xa3,0x38,0xbd,
0xfa,0x11,0xe5,0xf1,0x11,0x5f,0x41,0x11,0x10,0x05,0x54,0x64,0x2c,0x3c,0x14,0x3a,
0x97,0x74,0x1e,0xd2,0xa4,0xcd,0x9c,0xdc,0xe1,0x9c,0xbd,0xde,0x3f,0xce,0x49,0x9b,
0x86,0x14,0x9a,0xb4,0x85,0x26,0xb9,0xbf,0xcf,0x27,0x9f,0x7b,0x73,0xee,0x3d,0xe7,
0xdc,0xb3,0xd7,0x6f,0xaf,0xbd,0xf6,0x5a,0x6b,0xaf,0x0d,0x19,0x64,0x90,0x41,0x06,
0x19,0x64,0x90,0xc1,0x64,0x84,0x64,0x9a,0x60,0xf4,0xb8,0x29,0x3e,0x3b,0xba,0x5e,
0xd3,0xa7,0xe4,0x20,0x7b,0x8b,0xc4,0x59,0xff,0xb5,0x96,0x35,0xe9,0xf1,0xfa,0x2c,
0x4e,0x46,0x9c,0xa3,0xc3,0x8d,0xf1,0xd9,0xe1,0x7f,0xd8,0xc4,0x5d,0x79,0xa7,0x9c,
0xfc,0xe5,0xd3,0xde,0x79,0xc9,0x87,0xb6,0x38,0x7c,0xb0,0xaa,0xb3,0xd7,0x5d,0xdf,
0xd5,0xf1,0x78,0x86,0x00,0x93,0x00,0x79,0x85,0x05,0xef,0xde,0xa8,0xf6,0xfa,0x90,
0xe3,0x60,0x42,0x8e,0x79,0xef,0xfb,0x2f,0xcf,0xdf,0xda,0xd9,0x71,0xea,0xa5,0xdd,
0xa9,0x1f,0xdc,0xdb,0xb1,0x27,0x39,0xde,0x9e,0x27,0x94,0x11,0xe9,0xe8,0xb0,0x4f,
0xed,0x3b,0x01,0x36,0x6f,0xd9,0xc2,0xe6,0x2d,0x5b,0x38,0xe5,0x94,0x53,0x98,0x52,
0x5e,0x9e,0xdd,0x87,0x46,0x33,0x36,0xc0,0x04,0xc7,0xf2,0xf8,0x6c,0xf3,0xa4,0x4d,
0xfe,0x74,0xbd,0x7a,0x97,0x89,0x08,0xaa,0xca,0x94,0xd2,0x52,0xb2,0xfb,0x07,0xfe,
0xf6,0xd0,0xda,0xd5,0xcb,0x32,0x43,0xc0,0x04,0xc6,0x7b,0x6b,0x1a,0x4e,0x7c,0xd6,
0x1d,0xf8,0xfd,0xc2,0xb7,0xbf,0xf5,0xdc,0x4f,0x7f,0xf6,0x33,0xf2,0xb1,0xab,0xaf,
0xe6,0xd4,0xd3,0x4e,0x25,0x12,0x09,0xd3,0xb2,0x66,0xad,0x99,0x9d,0x57,0x90,0x73,
0x6e,0x71,0xc5,0x93,0x8f,0x77,0xb6,0xbb,0x99,0xd6,0x9a,0x60,0x78,0x6b,0x4d,0xdd,
0xc5,0x6f,0x79,0xdd,0xeb,0x7b,0x9f,0x7a,0xfc,0x09,0x75,0x5d,0x57,0x87,0xc2,0x5a,
0xab,0xed,0x6d,0x6d,0xfa,0x8d,0xaf,0x7e,0x55,0x17,0xd7,0xc4,0x9f,0xbe,0x3c,0xd6,
0xd0,0x9c,0x69,0xb1,0x09,0x84,0xf7,0xc7,0x1a,0x9a,0x2f,0x39,0xff,0xcd,0xbd,0xad,
0xbb,0x76,0xeb,0x4b,0xc1,0xf3,0x3c,0x7d,0xe0,0xbe,0xfb,0xf5,0xb4,0x59,0xb3,0x5b,
0xaf,0x8f,0x35,0x15,0x65,0x5a,0x6e,0x02,0xe0,0xae,0xfa,0x85,0x66,0x69,0xac,0xee,
0x9e,0xff,0x7d,0xfa,0x69,0x3d,0x1c,0x58,0x6b,0xf5,0xcb,0x37,0x7e,0x41,0xcf,0xa9,
0xa9,0xfd,0x74,0xa6,0xf5,0x26,0x00,0xde,0x13,0xab,0x6f,0xfa,0xc4,0xc7,0x3e,0xe6,
0x7a,0xc3,0xd4,0xfe,0x4b,0x61,0xf5,0xf3,0xcf,0xeb,0x19,0xb1,0xda,0x75,0x3f,0xad,
0x9b,0x1f,0x1e,0x0f,0xcf,0x68,0x32,0x62,0x3e,0x34,0x7a,0xad,0x7d,0xeb,0x85,0x97,
0x5c,0xe2,0x18,0xe7,0xf0,0x6d,0xe5,0xfa,0x86,0x06,0x0a,0xe2,0x35,0x75,0xf7,0xbb,
0xfd,0x8d,0x19,0x02,0x8c,0x73,0xec,0x89,0x86,0xdf,0x38,0x7b,0xce,0x9c,0xd1,0x39,
0x56,0xc2,0x61,0xce,0x5a,0x76,0xb6,0x49,0xa3,0xcd,0x19,0x02,0x8c,0x63,0xdc,0x1c,
0x9f,0x9d,0x15,0x6b,0x6c,0x58,0x90,0x9b,0x97,0x37,0xea,0x73,0xab,0xa7,0x56,0xb3,
0x07,0x3b,0x2b,0x43,0x80,0x71,0x8c,0x0e,0xb4,0xbc,0xb8,0xba,0x3a,0x27,0x14,0x1a,
0xbd,0xb3,0xb4,0x26,0x16,0xa7,0x07,0x9d,0x92,0x21,0xc0,0x38,0xc6,0x4e,0xeb,0x96,
0x56,0x54,0x57,0x8b,0xc8,0xe8,0x9d,0xa5,0xc6,0x31,0x84,0x55,0xb2,0x32,0x04,0x38,
0x86,0xd8,0xd1,0xb4,0xf8,0x98,0xba,0xb1,0x37,0xe1,0xe5,0xe4,0xe6,0xe6,0x8c,0xe9,
0x1e,0x6e,0x3a,0x4d,0x3f,0xda,0x39,0x1e,0xda,0x71,0xdc,0x05,0x83,0x7e,0x52,0x3b,
0x2f,0xef,0xb7,0x5e,0xdf,0x4d,0x17,0xf4,0x6e,0x5d,0xb4,0x78,0xfa,0xcc,0x35,0xb5,
0xa1,0xc8,0x9d,0x6f,0x0d,0xe5,0xdf,0x7f,0xc1,0x86,0xa7,0xed,0xd1,0xbc,0x4f,0x11,
0x52,0x59,0x51,0x51,0x31,0xb6,0x5e,0xe5,0x38,0x44,0x21,0x92,0xd1,0x00,0x47,0x19,
0x1f,0x8b,0x35,0x4e,0xfb,0x99,0xdb,0xf3,0xe4,0xc9,0xef,0xbc,0xf8,0xba,0x3f,0x3e,
0xf9,0xc4,0xe2,0x5f,0xff,0xf3,0xef,0x57,0xce,0xfa,0xc0,0x65,0xf7,0x7c,0x2b,0xdd,
0xf9,0x8f,0x6b,0x62,0x8d,0x35,0x47,0xb9,0x61,0x4a,0xca,0xc6,0x48,0x00,0x01,0x72,
0x45,0x32,0x7e,0x80,0xa3,0x89,0x1b,0xe3,0xb3,0x43,0x2b,0x6d,0xea,0x8e,0x8f,0x7c,
0xe9,0xa6,0xa6,0xcf,0xdf,0x74,0x13,0xe5,0x95,0x15,0x4c,0x9b,0x31,0x83,0x8f,0x5e,
0x75,0xb5,0x78,0x55,0x95,0xa7,0xaf,0xd4,0xf4,0xcf,0x36,0x36,0x9d,0x71,0xd4,0x86,
0x85,0x08,0x52,0x9c,0x9b,0x93,0x33,0xa6,0x73,0xd3,0xae,0x87,0x64,0x34,0xc0,0xd1,
0xc5,0x0a,0x9b,0xbc,0xd1,0x54,0x57,0x9d,0xfe,0xda,0x25,0x4b,0xf0,0xdc,0x03,0x01,
0xb7,0xfc,0xc2,0x02,0x16,0x9f,0x7e,0x3a,0xa6,0xbc,0xfc,0xf4,0x6f,0x26,0xdb,0x0b,
0x8f,0xd6,0xfd,0x5c,0x34,0x3f,0x12,0x1d,0x5b,0x88,0x3f,0x2b,0x1a,0xa1,0x57,0xd5,
0xcb,0x10,0xe0,0x28,0xe1,0xe3,0xb1,0xc6,0x8a,0x54,0x75,0xe5,0x27,0x7e,0x70,0xdb,
0x8f,0xd8,0xb7,0x6f,0x1f,0xeb,0xd6,0xae,0x45,0x55,0xf7,0x7f,0x5e,0x39,0x6d,0x2a,
0x4b,0x5e,0xff,0xba,0x48,0x54,0xa4,0xe2,0xe8,0x11,0x80,0x31,0x67,0xf7,0xe4,0x64,
0xe7,0x90,0x23,0x32,0x23,0x63,0x04,0x1e,0x25,0xac,0x51,0xf7,0xfa,0x2b,0xae,0xba,
0x2a,0x77,0x56,0xf3,0xc8,0xce,0xb5,0x54,0x22,0x49,0x34,0x2b,0x8b,0xb4,0x8e,0x2c,
0xb4,0xdb,0xeb,0x16,0x98,0xd5,0x36,0x51,0xb9,0xda,0xba,0x0b,0x7b,0xac,0x5b,0x54,
0x6c,0x9c,0xce,0x3a,0x13,0x7e,0xe8,0xe6,0x96,0x35,0xbd,0x87,0xba,0x67,0xab,0xf5,
0x4a,0xf3,0x72,0x73,0xc7,0xf4,0x7b,0xcb,0x2a,0x2b,0xe8,0x4b,0x26,0xeb,0x96,0xc7,
0x67,0x9b,0x2f,0xb6,0xac,0xb6,0x19,0x02,0x1c,0x01,0x6e,0x88,0xcf,0xca,0x7a,0x32,
0x2f,0xf2,0x9e,0xb3,0xce,0x3e,0x44,0xc2,0x8d,0x2a,0x5e,0x3a,0x85,0x7a,0xb6,0x57,
0xa0,0x6d,0xe8,0x47,0xff,0x55,0x3b,0xcf,0xdc,0xeb,0xf5,0x5f,0x76,0x47,0x79,0xce,
0xb5,0x4b,0x2e,0xb8,0x74,0xd6,0x07,0x1a,0x1b,0xc3,0x65,0x95,0x15,0x24,0x13,0x09,
0xfe,0xf5,0xf0,0xc3,0x6d,0x6f,0xbd,0xe3,0xb7,0x3f,0x8d,0x0f,0xa4,0xbf,0xf6,0xf5,
0x96,0xb5,0x7b,0x5f,0x34,0x0b,0x10,0x59,0x58,0x54,0x34,0xb6,0xa8,0x6e,0x61,0x61,
0x21,0x95,0x4d,0x8d,0x35,0xed,0x9b,0x77,0x34,0x03,0xcf,0x65,0xbc,0x2a,0x47,0x80,
0xf3,0x6b,0x6a,0xdf,0x7b,0xce,0xb2,0x65,0x7a,0xd7,0xef,0x7f,0xaf,0x7f,0xbe,0xfb,
0x6e,0x4d,0x26,0x12,0x07,0x45,0xdf,0xfa,0xfb,0xfa,0xf4,0xe7,0x3f,0xfe,0xb1,0x5e,
0xfb,0xfe,0xf7,0x3f,0xf5,0x68,0xe3,0xa2,0x83,0x8c,0xc0,0xb3,0x67,0xc6,0xbf,0xf4,
0xa3,0x1f,0xfc,0x40,0xf7,0xed,0xdd,0x3b,0x62,0xe8,0x76,0xd3,0x0b,0x2f,0xe8,0xa7,
0x3e,0x76,0xd5,0x86,0x6b,0xe2,0x4d,0x2f,0x1a,0x3a,0xde,0x78,0xd2,0xc9,0xcf,0xf7,
0xf5,0xf6,0xea,0x58,0x71,0xc7,0xed,0xb7,0xeb,0xb2,0x9a,0xf8,0x6d,0x19,0x09,0x1e,
0x21,0x96,0xc6,0xea,0xee,0x7f,0xe6,0xc9,0xa7,0x34,0xd1,0xdf,0xaf,0xbb,0x77,0xee,
0xd4,0x74,0x3a,0x7d,0x50,0x43,0xbf,0xb0,0x61,0x83,0xde,0xfe,0x8b,0x5f,0xe8,0xeb,
0xea,0x1a,0xbe,0x3e,0xf4,0xbc,0x8b,0x6b,0xea,0xde,0x7f,0xc7,0xaf,0x6e,0xb7,0x2f,
0x17,0xca,0xdd,0xb5,0x73,0xa7,0xbe,0x6b,0xd9,0xd9,0xf7,0x7d,0xb3,0x76,0xee,0xfe,
0x90,0xdf,0x65,0xb1,0x86,0xdc,0xcb,0x2e,0xbc,0xa8,0xdb,0xf3,0xbc,0xc3,0x16,0x78,
0x3a,0x95,0xd2,0xa7,0x9f,0x5a,0xa1,0xbf,0xfd,0xcd,0x6f,0xd4,0xf3,0x3c,0xdd,0xb3,
0x7b,0xb7,0x2e,0xaa,0xad,0xdb,0x7b,0x43,0xac,0xa9,0x2a,0x63,0x04,0x8e,0x11,0x57,
0xc7,0x1a,0x1b,0xaa,0x17,0xcc,0x5f,0x32,0xf7,0x84,0xf9,0x44,0xb3,0xb3,0xa9,0xa8,
0xaa,0x62,0xb8,0x6f,0x7e,0xfd,0xfa,0xf5,0xb8,0xa9,0x34,0x59,0x69,0xef,0x81,0xc1,
0x63,0xcb,0xe3,0xb3,0xf3,0x66,0xbc,0xe1,0xec,0xe5,0x6f,0xbb,0xe8,0x42,0x79,0xb9,
0x50,0x6e,0x65,0x55,0x15,0xef,0xfb,0x3f,0xd7,0xbf,0xfe,0x9f,0xde,0xc0,0x55,0x43,
0x0e,0xcf,0x98,0x7b,0xd2,0x49,0x79,0xc6,0x1c,0x5e,0xf3,0xac,0x7a,0xee,0x39,0xbe,
0x78,0xe3,0x8d,0x74,0x75,0x75,0xf2,0xa6,0x37,0xbf,0x19,0x63,0x0c,0x53,0xca,0xcb,
0x79,0xdf,0xb5,0xd7,0x94,0xac,0xd0,0xd4,0x67,0x33,0x04,0x18,0x23,0x56,0x69,0x7a,
0xe9,0x05,0x17,0x5f,0x14,0x76,0x0e,0x11,0x90,0x51,0x55,0x9e,0x7d,0xfa,0x69,0xda,
0x5b,0x77,0xf7,0x2e,0x70,0xa2,0x2b,0x06,0x8f,0xaf,0x74,0x13,0x57,0x5e,0x7a,0xe5,
0x15,0x33,0x43,0xe1,0xc3,0xf3,0xc5,0x2c,0x5d,0xb6,0x8c,0xa6,0x0b,0x2f,0xf8,0xd2,
0x35,0xb1,0xc6,0xea,0x5b,0x6b,0xe7,0x65,0xb5,0xa9,0xb7,0xe4,0x84,0x05,0x27,0x1c,
0xb6,0x4f,0xa1,0xa4,0xb4,0x94,0x1b,0x3e,0xf3,0x19,0x96,0x9c,0x75,0x16,0xd9,0xd9,
0xd9,0xbe,0x33,0x48,0x84,0x25,0x4b,0x97,0xb2,0xcf,0xf3,0x2e,0xba,0xb9,0x76,0x4e,
0x34,0x43,0x80,0x51,0xe2,0xf6,0xba,0x85,0xe2,0xc1,0x3b,0x4f,0x39,0xf5,0xd4,0x43,
0x7e,0xa7,0xab,0xb3,0x93,0xfe,0xde,0x3e,0x9e,0xfa,0xfb,0x3f,0xee,0xff,0x62,0xcb,
0xea,0x3d,0x00,0x5f,0x8a,0xcf,0xce,0x8f,0x9d,0x73,0xf6,0xb5,0x73,0xe6,0xcd,0x3b,
0xec,0x7b,0x39,0xa1,0x10,0x17,0x5c,0x74,0x71,0xfe,0x4a,0x9b,0xfa,0xf7,0xdf,0x79,
0xbd,0x2b,0x74,0x6a,0xd5,0x0d,0x0b,0x4f,0x3a,0xe9,0xb0,0xcf,0xaf,0xaa,0xae,0x26,
0x2f,0x3f,0xff,0x45,0xc7,0x6b,0xeb,0xeb,0x89,0x9d,0x30,0xaf,0x62,0x8d,0x4d,0x9e,
0x91,0x21,0xc0,0x28,0xf1,0x98,0xd7,0x57,0x7e,0xf2,0x9b,0xce,0x3d,0x63,0xda,0x8c,
0x43,0x4f,0xa7,0x57,0x3c,0xf9,0x24,0x65,0xe5,0x65,0xa4,0x56,0xaf,0xff,0xed,0xe0,
0xb1,0xc7,0xdd,0xc4,0x0d,0xef,0xbe,0xf2,0xca,0x19,0xe1,0xf0,0xe8,0x3c,0xb1,0x0b,
0x4e,0x5c,0xc8,0xa5,0x9f,0xf9,0xd4,0xfb,0x36,0x79,0xee,0xec,0x1b,0x6e,0xfa,0x42,
0x4d,0x71,0x49,0xc9,0x11,0x3f,0x43,0x24,0x12,0xe1,0xbc,0x37,0xbf,0x85,0x3d,0x6a,
0xcf,0xcb,0x10,0x60,0x94,0x48,0xa2,0x0b,0x2a,0xa7,0x4f,0x0f,0x1d,0x2a,0x1c,0xdb,
0xdf,0xd7,0xc7,0xaf,0x7f,0x75,0x3b,0xdd,0x1d,0x9d,0x7d,0x27,0x44,0xb2,0xef,0x03,
0xb8,0xa5,0x76,0x4e,0x74,0xb7,0x4d,0x5f,0x5c,0x5b,0x5b,0x3b,0xea,0xfb,0x39,0x8e,
0xc3,0xdb,0xde,0x7e,0x21,0x15,0x15,0x15,0x9c,0x72,0xda,0x69,0x47,0xed,0x39,0x9a,
0xe7,0x34,0xd3,0xa7,0x3a,0xe7,0x78,0x6d,0xe7,0xe3,0xd6,0x0f,0xb0,0x55,0xbd,0x19,
0x17,0xcc,0x3d,0x74,0xbb,0x6d,0x7a,0xa1,0x05,0x01,0x1e,0x7e,0xf8,0xe1,0x48,0x59,
0x7c,0xda,0xef,0x3e,0x79,0xe6,0xa2,0xa2,0x4d,0xae,0x57,0xfe,0x9e,0x85,0x27,0x4c,
0xcd,0xca,0xc9,0xc1,0x7a,0x1e,0x3b,0xb6,0x6f,0xa7,0xad,0xbd,0x1d,0xeb,0x59,0xa2,
0xd1,0x08,0xed,0xed,0x7b,0xd9,0xb7,0x6f,0x2f,0x8e,0x08,0xe5,0x95,0x95,0x4c,0x29,
0x9d,0x42,0xc3,0xac,0xa6,0x03,0xbd,0x21,0xe4,0xd0,0x3c,0x7b,0x16,0xd1,0xac,0xa3,
0x17,0xca,0x2f,0x9d,0x32,0x85,0x84,0xf5,0x4a,0x33,0x04,0x18,0x25,0x06,0xac,0x3d,
0x33,0x1e,0x8f,0x1f,0xba,0x67,0xcd,0x9b,0xcb,0x0f,0x7f,0xfa,0x13,0x3c,0xd7,0x0d,
0x83,0x2c,0x35,0x21,0xdf,0xda,0x77,0x8c,0x61,0x53,0x4b,0x0b,0xff,0x79,0xf3,0xcd,
0x54,0x4f,0x9d,0xc6,0x6b,0x96,0xbc,0x96,0xdc,0x9c,0x5c,0xba,0xba,0xba,0x98,0x36,
0x6d,0x2a,0x4d,0x4d,0x8d,0xe4,0xe6,0xe5,0xe1,0xba,0x2e,0x39,0xc3,0x82,0x3d,0x3d,
0x9d,0x9d,0x4c,0x9b,0x59,0xc3,0xe1,0x5a,0xff,0x87,0xa7,0x62,0x05,0x07,0xfa,0x33,
0x04,0x18,0x25,0x5c,0x91,0xf9,0x25,0x2f,0x33,0x0e,0x1b,0xc7,0x61,0xf8,0x34,0xaf,
0xbf,0xaf,0x8f,0x4f,0x7c,0xfc,0x1a,0x3e,0xb7,0x7c,0x39,0x27,0x9d,0xb2,0x68,0x54,
0xf7,0x6c,0xdf,0xbb,0x97,0x48,0xe4,0xe8,0x46,0x71,0x93,0xa9,0x24,0x61,0x31,0xbd,
0x19,0x1b,0x60,0x14,0xf8,0x66,0xed,0x9c,0xc8,0xd4,0x59,0x4d,0x65,0x45,0xc5,0xc5,
0xa3,0x3e,0xf7,0xde,0x7b,0xee,0xe1,0x43,0x1f,0xf9,0xf0,0xa8,0x85,0x0f,0x90,0x4c,
0xa7,0x29,0x28,0x2c,0x3c,0xaa,0xcf,0xb2,0x65,0xcb,0x16,0x72,0x8d,0x79,0x22,0x43,
0x80,0x51,0x60,0xb3,0x4d,0xe7,0x15,0x94,0x14,0x57,0x3a,0xa3,0x4c,0xc8,0x4c,0xa7,
0xd3,0xfc,0xed,0xfe,0xbf,0xb0,0xe4,0xac,0xb3,0x50,0x3b,0xfa,0x18,0x8c,0x00,0xbd,
0x5d,0x5d,0x47,0x6f,0x18,0xeb,0xef,0xe7,0xae,0x3b,0x7f,0xdf,0x53,0x2f,0xa1,0x9f,
0x64,0x86,0x80,0x51,0xa0,0xcc,0x84,0x72,0x5a,0xf3,0x46,0x1f,0x89,0xdb,0xdb,0xd6,
0x46,0x59,0x45,0x05,0xd9,0x39,0x39,0xfc,0xe3,0xc1,0x87,0x38,0xfd,0xcc,0xc5,0x38,
0xa1,0x10,0xd6,0xda,0x83,0xc7,0x75,0x85,0x54,0x2a,0x49,0x67,0x47,0x27,0x03,0x03,
0xfd,0x14,0x16,0x15,0xd1,0xdb,0xd3,0xc3,0x8a,0x27,0x9e,0xe4,0xce,0x3b,0xef,0xe4,
0xc4,0x93,0x4f,0xa6,0x7a,0xea,0x54,0xa6,0x4f,0x9f,0x41,0x7e,0x61,0xc1,0xe8,0x1f,
0x40,0x95,0x1d,0xdb,0xb7,0xf3,0x8d,0xaf,0xdd,0xc2,0xa6,0x07,0xfe,0x76,0x77,0x02,
0x4e,0x5e,0x5a,0x53,0x7b,0x72,0x35,0x66,0x4f,0xa9,0x38,0xcf,0x7d,0x67,0xd3,0xda,
0xce,0x0c,0x01,0x86,0xe0,0xda,0x58,0xe3,0xec,0xdd,0x78,0x8d,0xa2,0x4c,0xb3,0xd0,
0xf3,0x80,0x37,0xb0,0x20,0xde,0xd7,0x8f,0xaa,0x72,0xa8,0x69,0xe0,0x60,0x3e,0x80,
0x5a,0xa5,0xbf,0xaf,0x97,0x64,0x3a,0x4d,0x6b,0x6b,0x2b,0xcf,0x3c,0xf3,0x34,0x9d,
0xfb,0xf6,0xd1,0xdd,0xd5,0x89,0x31,0x06,0x55,0xe5,0xb6,0x5b,0x6f,0xe5,0x8a,0x8f,
0x7c,0x84,0xc7,0x1f,0x7d,0x94,0xd5,0x2b,0x57,0xb2,0x63,0xf5,0x1a,0xba,0xd7,0xaf,
0x67,0xf3,0x0b,0x1b,0x69,0x4d,0xa6,0x88,0xe6,0xe6,0x52,0x93,0x4a,0xd2,0x0f,0x44,
0x14,0x3e,0xf9,0xd1,0xab,0xc8,0x49,0xa7,0x28,0x9c,0x5a,0xcd,0xb2,0xf3,0xcf,0x27,
0x5e,0x5f,0x4f,0xcd,0xcc,0x99,0x94,0x95,0x97,0x53,0x58,0x58,0x48,0x5e,0x7e,0x3e,
0xc3,0xb5,0x93,0xe7,0x79,0xb4,0xed,0xd9,0xc3,0xea,0x55,0xab,0x78,0xea,0xb1,0xc7,
0xf9,0xe7,0xaf,0x6f,0x67,0x41,0x62,0x80,0x73,0x1d,0x2e,0xed,0x57,0x2e,0xf5,0x80,
0x75,0xd6,0xb2,0x5d,0xdd,0xde,0xf3,0x6a,0xe2,0x6b,0x4a,0x70,0x3e,0xf3,0x8b,0xcd,
0x1b,0xfe,0xfa,0x6a,0xb7,0xfd,0xab,0x5e,0x20,0xe2,0xe6,0x78,0x73,0xf6,0x43,0xb6,
0xbf,0xe5,0xdd,0x21,0x2a,0x73,0x02,0xab,0x39,0x4b,0xe0,0x5b,0xa1,0x2c,0x6e,0xb9,
0xfd,0x57,0x14,0x15,0x15,0xb3,0x7b,0x4f,0x2b,0x9d,0x1d,0x1d,0xec,0xda,0xb9,0x93,
0xfe,0x8e,0x4e,0xba,0xf6,0xb4,0xd2,0xd1,0xd3,0x43,0x04,0x21,0xd5,0xde,0xc6,0x9e,
0x67,0x57,0xd2,0x98,0x4e,0x12,0x51,0xa5,0x0d,0x61,0xdd,0x9c,0xb9,0x58,0xb5,0x7c,
0xe7,0xbb,0xdf,0xa5,0x6a,0xea,0x34,0x6e,0xf9,0xca,0x57,0xf8,0xc0,0x15,0x57,0xf0,
0xbd,0x8f,0x7f,0x9c,0xcb,0x9f,0x5f,0x41,0xb6,0x1c,0x18,0xfb,0x6c,0xf0,0x37,0x68,
0x4a,0xa6,0x80,0x01,0x85,0x5c,0x01,0x57,0xa1,0x47,0xa1,0x5d,0x61,0x9b,0x55,0xf6,
0x59,0x65,0x2b,0x42,0x67,0x7d,0x03,0xf3,0xce,0x39,0x87,0x99,0x33,0x66,0x90,0x4a,
0xa6,0xd8,0xb9,0x6e,0x2d,0x3b,0x9e,0x7b,0x8e,0xf2,0x67,0x9f,0xa1,0x4e,0xa0,0xd1,
0x11,0x4a,0xcc,0xc8,0x8d,0x2b,0x40,0x9f,0xc2,0x57,0x92,0xda,0x1f,0x22,0x32,0xeb,
0xfb,0x9b,0xd6,0x6d,0x9d,0xd4,0x04,0xb8,0xa4,0xa6,0x7e,0x5a,0x8d,0xb8,0x2d,0xd7,
0x65,0x1d,0x9c,0x44,0xb9,0xc6,0x83,0xbf,0xba,0x4a,0x4c,0x94,0x26,0x23,0xe4,0x1a,
0x21,0x2a,0x90,0x03,0x38,0x02,0x9e,0x82,0x91,0x03,0x2a,0x4c,0x0e,0x68,0x77,0xd6,
0x7a,0xf0,0xcb,0xb4,0xb2,0xbe,0xbc,0x82,0xea,0xa9,0x53,0x69,0x6f,0x6f,0xa7,0xa0,
0x20,0x9f,0x4b,0xd7,0xae,0xe2,0x35,0xe1,0x23,0x7f,0xe4,0x34,0xf0,0xdd,0x84,0xf2,
0x3f,0x56,0xa9,0x07,0x6e,0xcb,0x31,0x84,0x46,0x69,0x50,0xdd,0x93,0x56,0xee,0x74,
0xcd,0xe7,0xef,0xde,0xfc,0xc2,0x97,0x27,0xf5,0x10,0x90,0x46,0x9b,0x6a,0x0c,0x2f,
0x9a,0x7b,0xcd,0x72,0x60,0x96,0x23,0x87,0xe4,0x68,0x48,0x0e,0xcd,0xe8,0x59,0x0e,
0x7c,0xd1,0x11,0xf6,0x76,0xee,0x21,0xd1,0xb9,0x87,0xb4,0x42,0x6e,0x2b,0x54,0x85,
0xe5,0xa8,0x35,0x5a,0x6b,0xf0,0x7e,0xce,0x5b,0xde,0x4c,0xe7,0x7d,0x7f,0xa4,0x7c,
0x94,0xe6,0xf4,0x22,0x47,0xf8,0xb1,0xab,0xf3,0x27,0xfd,0x2c,0x60,0xab,0x7a,0xf3,
0x8b,0x45,0x8e,0x09,0xb3,0x2b,0x0c,0xcc,0x34,0x50,0xe7,0x40,0xd5,0x51,0x7c,0x52,
0x0f,0xd8,0x1a,0xd8,0x20,0x77,0xdd,0xf3,0x67,0xc6,0x52,0x13,0x26,0xcb,0x1f,0x86,
0x66,0x7e,0xad,0x76,0x8e,0x4c,0x6a,0x02,0xe4,0x89,0xcc,0xa9,0x18,0x67,0xeb,0x93,
0xd2,0x0a,0x1d,0x41,0x4e,0xaa,0x97,0x4e,0xb3,0x73,0x0c,0x59,0x7f,0x61,0x20,0x1f,
0x9d,0xbf,0x4d,0xbd,0xa2,0x49,0x4b,0x80,0xeb,0x63,0x4d,0xd2,0xa1,0x7a,0xea,0x78,
0xab,0xaf,0xb6,0xc7,0x42,0xf7,0x90,0xff,0x57,0x78,0x3a,0xea,0x6b,0x44,0x05,0xe6,
0x09,0xe1,0xcd,0x9a,0x2e,0x9f,0xb4,0x04,0x28,0x36,0x4e,0x5e,0xa5,0x30,0xa3,0x6a,
0x9c,0x69,0x80,0xbe,0xe1,0xc2,0x1c,0xe3,0x75,0x4a,0x05,0xc9,0x56,0xe6,0x4d,0x5a,
0x02,0x3c,0xe2,0x25,0x5e,0xb3,0xc8,0x90,0x93,0x33,0xce,0xaa,0x15,0xee,0xb0,0x07,
0xf7,0xf8,0x81,0x31,0x5e,0x67,0x9a,0x81,0x2d,0xd8,0xc5,0x93,0x96,0x00,0x0a,0x67,
0x55,0x8d,0xc3,0x52,0x95,0xdb,0x86,0x8d,0xf9,0x0f,0x5b,0x65,0x2c,0xd5,0xa2,0x6b,
0x8c,0x20,0xaa,0x33,0x27,0x2d,0x01,0x3a,0xd4,0xce,0x9c,0x61,0xc6,0x1f,0x03,0x76,
0xeb,0x41,0x24,0x26,0x32,0x75,0x1a,0xc9,0xd1,0x9b,0x01,0xe4,0x0a,0xa4,0xe1,0xa4,
0x6f,0xd5,0xce,0x8d,0x4c,0x3a,0x02,0xdc,0x56,0x77,0x42,0xd8,0x41,0x4e,0x2e,0x1b,
0x67,0xf2,0x4f,0x03,0x4f,0x0c,0x19,0x02,0x04,0xe8,0xdf,0xb1,0x63,0x4c,0x2b,0x41,
0x8b,0x0d,0x4c,0x15,0xaa,0x9f,0xb3,0xc9,0x59,0x93,0x8e,0x00,0xdb,0x6d,0x3a,0x9c,
0x40,0xf3,0x22,0xe3,0x8c,0x00,0x06,0x28,0x1c,0xf6,0x9b,0xad,0xea,0x98,0xae,0x15,
0x01,0xce,0x72,0x90,0xbd,0x6a,0x2b,0x26,0x1d,0x01,0xd6,0xd8,0xd4,0x94,0x02,0xd1,
0xfc,0xf2,0x71,0x36,0x03,0x70,0x15,0xb6,0x0c,0x93,0x77,0xe3,0x99,0x67,0xd2,0x36,
0x36,0x0e,0x50,0x2a,0xd0,0x87,0x9e,0x3a,0xe9,0x08,0xe0,0xa1,0xaf,0x59,0x6c,0x24,
0x3c,0xde,0x4a,0x94,0xa4,0x81,0xe1,0xe9,0x3d,0xef,0xba,0xf4,0x52,0x76,0xb9,0x63,
0x5b,0x03,0x5a,0x26,0x42,0x37,0x7a,0xda,0xa4,0x23,0xc0,0x4e,0xb5,0xe5,0xb9,0x8c,
0x3f,0x64,0x0b,0x2c,0x18,0x36,0x04,0x24,0x53,0x29,0x0a,0x64,0x6c,0x2a,0x60,0x86,
0x01,0x47,0xb5,0xee,0x37,0xb5,0xf3,0x5f,0x15,0x59,0xbc,0x6a,0x1d,0x30,0x2c,0x54,
0xd6,0x1d,0x67,0xea,0x5f,0x81,0x94,0xfa,0xaf,0x82,0x1f,0x75,0x1c,0xde,0x40,0xc2,
0xc1,0xa5,0x3f,0x54,0x95,0x44,0x62,0x80,0xa8,0x8c,0xed,0x61,0x0a,0x0c,0xcc,0x14,
0x99,0xb2,0x1d,0xcf,0xe0,0x47,0xa6,0x27,0x07,0x01,0x1c,0x58,0x10,0x12,0x61,0x97,
0x85,0xa4,0x42,0xbb,0x2a,0x61,0x04,0xc5,0x8f,0xc1,0x47,0xc5,0xf7,0x97,0xf7,0xaa,
0xef,0x79,0x0b,0x05,0x0d,0x3f,0x34,0xbd,0x36,0xad,0x4a,0x56,0x10,0x22,0x2e,0x30,
0x42,0xa1,0x40,0xde,0x10,0xc1,0x85,0xc5,0x8f,0xf3,0x9b,0x40,0x70,0x1e,0x7e,0x2c,
0xbe,0x3f,0x88,0xf1,0xb7,0x5a,0x65,0x6f,0xf0,0xbe,0x57,0xfd,0x8a,0x10,0x83,0x61,
0xc9,0x76,0x55,0xda,0x80,0x0b,0x1c,0x21,0x57,0xa0,0x5b,0x7d,0xf5,0x9f,0x50,0xd8,
0x38,0xa4,0xb3,0x7b,0xd6,0xe2,0x26,0x53,0xfc,0x2c,0x65,0x79,0x93,0x1a,0xb2,0xf1,
0x23,0x95,0xd9,0xc3,0x02,0x5c,0x83,0xff,0xed,0xb1,0xca,0x1a,0x0b,0x6b,0xad,0x92,
0x27,0xc2,0x0d,0x51,0x21,0x2a,0x5a,0xd0,0x62,0x53,0x75,0xc0,0xda,0x49,0x41,0x80,
0x2b,0xe3,0xb3,0xe4,0x11,0x2f,0x31,0x75,0xaf,0x85,0x85,0x8e,0x10,0x36,0x30,0x13,
0x39,0x68,0x3c,0x3a,0x94,0x42,0x1d,0x6c,0x48,0x3f,0x91,0xc3,0x27,0x8c,0xc5,0x17,
0x6a,0x9f,0xc2,0x5e,0x55,0x7a,0xad,0x90,0xc6,0x0f,0xda,0xf4,0x00,0x09,0x55,0xd6,
0x59,0x68,0x51,0xdf,0x6d,0xdb,0x64,0x20,0x6e,0xa0,0x5c,0x84,0x59,0x0e,0x14,0x08,
0xfb,0x93,0x44,0xcc,0x7e,0x1b,0x45,0x78,0xd6,0x85,0x9d,0x56,0x71,0x80,0xe9,0x46,
0xc8,0x07,0x0a,0x0d,0xec,0x51,0xf8,0x43,0x30,0x15,0x0c,0x39,0x0e,0x9f,0x5d,0xbe,
0x9c,0x8b,0x1d,0xb3,0xbf,0x3a,0x85,0xa3,0x82,0x0c,0xb9,0x96,0x00,0x5d,0xaa,0xac,
0xb7,0xd0,0x68,0xe0,0x34,0x47,0xb8,0x24,0x2c,0x38,0x02,0xf9,0x02,0x27,0x1a,0xcc,
0x7d,0x9e,0xb7,0x78,0xd2,0x10,0x20,0x86,0x38,0xcf,0x43,0xe9,0x19,0x61,0x3f,0xc9,
0xe3,0xe5,0x84,0xce,0x08,0xc4,0x10,0x0e,0xde,0xee,0x24,0x22,0x50,0x24,0x43,0x29,
0x72,0x30,0x6d,0x06,0x14,0x12,0xc1,0x14,0xce,0x1c,0xc6,0xf5,0x0d,0xb0,0x20,0x04,
0x0b,0x46,0xb8,0xde,0x48,0x5e,0xbf,0x85,0x46,0x38,0xf3,0x25,0x33,0xca,0x85,0x25,
0x87,0xf8,0xa4,0xc1,0x08,0xff,0xed,0x69,0xfd,0xa4,0x31,0x02,0xbb,0xd1,0x78,0xad,
0xe8,0x94,0xc2,0x57,0xd0,0x07,0x90,0x2d,0x50,0x2c,0x47,0xe7,0x81,0x87,0xaf,0x1b,
0xba,0xe2,0xf2,0xcb,0x51,0x3b,0xf6,0x9a,0x50,0xc5,0x7e,0xfa,0x59,0xf3,0xa4,0x21,
0xc0,0x16,0x9b,0x5e,0x90,0x27,0x62,0xc6,0xeb,0x8e,0x55,0x67,0x0e,0xd3,0x9b,0xa5,
0x65,0x65,0x64,0x1d,0xc1,0x6a,0xa2,0x22,0x03,0x69,0x74,0xd1,0x95,0xb1,0xc6,0xe8,
0xa4,0x20,0x80,0x40,0x45,0x21,0xe3,0x77,0xcb,0xb2,0xa2,0x21,0x06,0x9e,0x67,0x2d,
0x7d,0x3d,0x3d,0x14,0x1e,0x01,0x9d,0x0b,0x05,0x16,0x19,0x4a,0xca,0x30,0x15,0x93,
0x82,0x00,0xbb,0xb0,0xf1,0xa6,0x71,0xbc,0x5f,0x59,0x83,0x03,0x57,0x38,0x42,0x56,
0x38,0x82,0x11,0xe1,0xee,0xbb,0xee,0x0a,0xec,0x8f,0xb1,0xa3,0x5a,0x30,0x6d,0x78,
0x65,0x93,0x82,0x00,0x69,0xa5,0xb9,0x50,0xc6,0xef,0x96,0x85,0x02,0x2c,0x0e,0x09,
0x89,0x54,0x92,0x0f,0x5e,0x79,0x25,0xb1,0xdd,0xbb,0x38,0xd2,0xb4,0xb6,0x32,0x41,
0x76,0xa8,0xb7,0x6c,0x52,0x10,0x20,0x5b,0xa8,0x0a,0xa1,0x8c,0x67,0xd4,0x3b,0xf0,
0xa5,0x88,0x61,0xdb,0x6d,0x3f,0xe2,0xca,0xa3,0x30,0x97,0x6a,0x72,0x84,0x5d,0x6a,
0x4f,0x9b,0xf0,0x04,0xb8,0xa3,0x7e,0x41,0xa4,0x47,0xb5,0xb8,0x5c,0xc6,0xf7,0xa6,
0xa5,0x02,0x2c,0x0b,0x0b,0xcb,0x73,0x43,0xd4,0x1c,0x85,0xe1,0x2c,0x66,0x60,0x9a,
0x48,0xf3,0xef,0xea,0x4f,0x34,0x13,0x9a,0x00,0x8f,0x78,0x89,0x5c,0x0f,0x4a,0x2b,
0x33,0x5b,0x55,0x1c,0x84,0x88,0x40,0x99,0x68,0xec,0x8f,0x6e,0xcf,0xf4,0x09,0x4d,
0x00,0x4f,0xed,0xfc,0xa8,0x68,0x34,0x2b,0xb3,0x6b,0xf1,0x8b,0x34,0xca,0x5c,0x43,
0xa8,0x4f,0xed,0xc2,0x09,0x4d,0x80,0x0e,0x6c,0xc9,0x34,0x24,0xb3,0x6b,0xf5,0x08,
0x38,0xc9,0x11,0xb6,0x60,0x9b,0x27,0x34,0x01,0xf6,0xa9,0xad,0x9c,0x9b,0x51,0xff,
0x23,0xa2,0x58,0x20,0x0b,0x66,0x4f,0x68,0x02,0xb8,0x68,0xfd,0xf4,0x09,0x4e,0x00,
0x19,0xf2,0x37,0x1a,0xe4,0x0b,0x18,0x74,0xf1,0xc7,0xe3,0x4d,0xaf,0x58,0x8c,0xe6,
0x15,0x0f,0x06,0x29,0x34,0xbc,0xdc,0x5a,0x40,0x7b,0xe0,0xbb,0x07,0x4d,0x16,0x07,
0xe3,0xf5,0x29,0xfc,0xd0,0x70,0x48,0xfc,0xa5,0xdc,0x1e,0x7e,0xaa,0x56,0x28,0xf0,
0xf5,0xbb,0xc1,0x49,0x39,0x7e,0xd6,0x2d,0x1a,0x3c,0x68,0x76,0x10,0x1e,0x1e,0x0c,
0x0d,0xa7,0xd5,0xcf,0xe9,0x4f,0xa8,0x1f,0xee,0xb5,0x28,0x69,0x15,0x06,0x50,0x3c,
0xfc,0x15,0xc8,0x16,0x3f,0x34,0x5d,0x20,0xc2,0x94,0xc1,0xeb,0xe3,0x5f,0x67,0x20,
0x48,0x1c,0xe8,0x53,0x68,0xb7,0x4a,0x97,0xfa,0x91,0xc2,0x16,0x55,0x42,0x40,0x0e,
0x42,0x89,0xc0,0x7c,0xc7,0xbf,0x4e,0x87,0xfa,0xe1,0xe6,0xb8,0x11,0xaa,0x8d,0xff,
0x1c,0x4e,0x60,0x00,0x4a,0x70,0x9f,0xd7,0x1a,0xa6,0x76,0x2b,0xd3,0x81,0x4d,0x13,
0x92,0x00,0xbd,0x4a,0x55,0xb5,0x81,0xf5,0x1e,0x3c,0xe5,0x29,0xdd,0x81,0xb0,0xb2,
0x03,0xc1,0x24,0xf1,0xe3,0xf3,0x65,0x81,0xb0,0x06,0x43,0xac,0x59,0x81,0x40,0x85,
0x03,0x09,0x1b,0xf9,0x01,0x8f,0x46,0x9a,0x85,0xa5,0xf1,0x05,0x13,0xc6,0x8f,0x02,
0x26,0x14,0xd6,0xe9,0x81,0xfb,0xac,0xb0,0x4a,0x91,0x40,0x95,0x08,0x4d,0x41,0x38,
0x38,0x5f,0x20,0x1b,0x25,0x2f,0xb8,0xb7,0xbf,0xef,0x8b,0xd0,0xad,0xca,0x5d,0xae,
0xd2,0x89,0x52,0x2d,0x42,0x2a,0xa8,0x1f,0x10,0xd9,0xdf,0x6b,0xfd,0xff,0x3d,0xfc,
0x95,0xc9,0x67,0x1b,0x43,0x16,0xbe,0x80,0x7b,0x14,0xfe,0x9c,0x56,0xb2,0x05,0x1a,
0x02,0xcd,0xf7,0xdb,0xb4,0xf2,0x94,0x55,0x0a,0x05,0x76,0x29,0x74,0x02,0x35,0x02,
0xd7,0x85,0x85,0xb9,0x46,0xcc,0x2f,0x5c,0x77,0xf1,0x84,0x24,0xc0,0xc7,0x62,0x8d,
0xe5,0x1b,0x35,0xd5,0x54,0x61,0x7c,0x23,0x70,0xa6,0x11,0x42,0x41,0xc3,0x39,0xc3,
0x54,0xe8,0xb1,0x18,0x25,0x5c,0x60,0x8d,0xeb,0x0b,0xed,0xba,0xa0,0xde,0x80,0x73,
0x58,0xaa,0x5a,0x38,0x23,0xec,0xbf,0x8e,0xc5,0x78,0x6d,0x72,0x0e,0x3e,0x6f,0x69,
0x18,0x5c,0xf5,0xf3,0x01,0x52,0x81,0x06,0xeb,0x57,0x3f,0x4d,0x7c,0xa7,0x85,0x6e,
0xd7,0x2e,0x03,0x7e,0x39,0xe1,0x08,0xb0,0x56,0xdd,0xfa,0x19,0x90,0x1d,0x0a,0x1a,
0x3d,0xf4,0x12,0x3d,0xf8,0x58,0x3d,0xec,0xdc,0x31,0x3e,0xf1,0x91,0xcc,0x5a,0x64,
0x04,0xc3,0x6b,0x30,0x1d,0x3e,0x3b,0x78,0xcd,0x0b,0x5e,0xa7,0x19,0x98,0x02,0x75,
0x13,0xd2,0x08,0xcc,0x83,0xb2,0x7a,0x43,0x66,0x0a,0xf8,0x12,0x70,0xfc,0xe1,0xa0,
0xfe,0x3f,0xe2,0xcd,0xd1,0x09,0x47,0x80,0x04,0x9c,0x58,0x97,0x99,0x02,0xbe,0x2c,
0xa6,0x88,0x96,0xae,0xd7,0xf4,0xd4,0x09,0x47,0x80,0x94,0xea,0x99,0x79,0x92,0xe9,
0xff,0x2f,0x87,0xb9,0x8e,0x38,0x03,0xaa,0xb3,0x26,0x14,0x01,0xfe,0xd6,0x70,0xb2,
0x93,0x66,0xfc,0xd5,0x02,0x78,0x35,0x50,0x66,0x60,0x2f,0x36,0x3e,0xa1,0x08,0xf0,
0x97,0x74,0x6f,0x41,0xb6,0x68,0x55,0x59,0x86,0x00,0x2f,0x8b,0x1c,0x20,0x89,0x9e,
0x38,0xa1,0x08,0xb0,0x5a,0x53,0xe7,0x56,0x42,0x56,0x28,0x23,0xdf,0x97,0x45,0xb1,
0x81,0xb9,0x42,0x6c,0x42,0x11,0x60,0x97,0x6a,0x45,0x3c,0x33,0x03,0x38,0xec,0x99,
0x40,0xad,0x61,0xc6,0x0d,0xf1,0xd9,0x66,0xc2,0x10,0x20,0x57,0xa8,0x9b,0x93,0x51,
0xff,0x87,0x8d,0x12,0x61,0x5a,0x14,0xa6,0x4c,0x08,0x02,0x7c,0x35,0x3e,0xd7,0x0c,
0xa8,0x9e,0x59,0xe3,0x64,0xfa,0xff,0xe1,0xa2,0x42,0x34,0xd4,0x62,0xd3,0xf3,0x26,
0x04,0x01,0x5e,0xd0,0x54,0x6d,0x1f,0x3a,0xbb,0x20,0x23,0xff,0xc3,0x46,0xb9,0x11,
0x3a,0xb0,0x0b,0x26,0x04,0x01,0xf6,0xaa,0xcd,0xa9,0x12,0x31,0x19,0x02,0x1c,0x3e,
0xaa,0x0c,0x4c,0xe5,0xd8,0xaf,0x16,0x7a,0x45,0x08,0xb0,0x5d,0x6d,0x6e,0x36,0x9a,
0x31,0x00,0x47,0x69,0x08,0xc6,0x8c,0x9e,0xf4,0x60,0xc3,0xc9,0x66,0xdc,0x13,0xa0,
0x44,0x88,0x14,0x66,0xc4,0x7f,0x58,0x50,0xfc,0x3c,0x83,0xa4,0x42,0xa1,0x10,0xfb,
0x53,0xba,0xe7,0x98,0xee,0x38,0xf6,0x8a,0x4c,0xcb,0x2d,0xf4,0x3c,0xa1,0xca,0x6f,
0x52,0xbe,0x93,0x03,0xfc,0x04,0x8c,0x14,0x7e,0x1a,0x54,0x12,0x3f,0x2c,0x1a,0x33,
0x90,0x2f,0x42,0xbb,0x2a,0xbb,0xad,0x3f,0x65,0x9c,0x6e,0x84,0x1c,0x81,0x4e,0x55,
0x7a,0xd5,0x67,0x6c,0x7e,0x90,0x08,0x32,0x58,0xa4,0xb9,0x4c,0x04,0x11,0x7f,0x19,
0x78,0x04,0xa1,0xcc,0xf8,0xe1,0xd5,0xed,0xaa,0x44,0xf0,0x97,0x81,0x1b,0xfc,0xd8,
0x7c,0x37,0x4a,0xa1,0x08,0xa5,0xc1,0x35,0x06,0xf0,0x73,0x04,0xa2,0xe2,0xaf,0xdd,
0xef,0xc5,0x5f,0xfa,0x95,0xc3,0x81,0x7b,0x2a,0x50,0x69,0x84,0x08,0xfe,0x6f,0xde,
0x15,0xe4,0x12,0x94,0x19,0xd9,0x9f,0x08,0xb2,0x2f,0xc8,0x11,0x98,0x61,0xfc,0x7b,
0xb5,0xa9,0xd2,0x61,0xfd,0xf3,0x7a,0x55,0x71,0xf1,0x23,0x7e,0x0a,0x3c,0xeb,0xc1,
0x0e,0x85,0x1a,0xe3,0xf7,0xf4,0xfe,0xa0,0x1e,0xc2,0x0e,0x0b,0xed,0x40,0x11,0xd0,
0x81,0xd2,0xa3,0xb2,0x7b,0xb1,0x23,0x7d,0xc7,0x52,0x36,0xaf,0x48,0xb7,0xfc,0x70,
0xac,0xa1,0xfc,0x29,0x9b,0x5e,0xd3,0x2c,0x94,0x9c,0x6f,0x0c,0x1e,0x7e,0xa2,0x86,
0xc1,0x2f,0xf8,0x10,0x06,0x72,0x11,0x5a,0x55,0xe9,0xc1,0xcf,0xa6,0xa9,0x0e,0x2a,
0x6e,0xb4,0xab,0xd2,0x87,0x52,0x22,0x42,0x19,0x42,0x12,0xbf,0xc1,0x1d,0x81,0x82,
0xe0,0x1a,0x3b,0x15,0x3c,0xfc,0x02,0x13,0x29,0x94,0xfe,0x80,0xd9,0xa5,0x08,0x16,
0xe8,0x41,0x49,0x02,0x79,0xf8,0x42,0xec,0x0d,0xfe,0x0f,0xe3,0x27,0x75,0x0c,0x04,
0x3d,0x2f,0x1f,0x21,0x5b,0xa0,0x5f,0x7d,0x22,0x64,0x03,0x95,0x22,0xb8,0xf8,0x75,
0x07,0xfa,0xf0,0x09,0x5c,0x26,0x42,0xa7,0x42,0x17,0x7e,0xed,0x80,0x72,0x11,0x8a,
0x11,0x3a,0x50,0x5a,0x55,0x49,0x01,0x65,0x43,0xee,0x15,0xc5,0xcf,0x3d,0x18,0x24,
0x70,0x85,0x40,0x89,0x08,0xfd,0x0a,0xfd,0x28,0xc5,0x22,0xa4,0x82,0xdf,0x1c,0x0e,
0x5e,0xff,0x65,0x2d,0x0f,0xab,0xb9,0xfa,0xff,0x6d,0xde,0xf8,0xbd,0x71,0x4f,0x00,
0x80,0x0f,0xd4,0x34,0x9c,0xde,0xaa,0xe9,0x87,0xae,0x0f,0x39,0xe1,0x9c,0x8c,0x9a,
0x7f,0xc9,0x86,0x4f,0x02,0xdf,0xf4,0xbc,0xce,0x12,0x89,0xc4,0x7e,0xbc,0x69,0x5d,
0xe7,0x84,0x20,0x00,0xc0,0x79,0x35,0xb5,0x5f,0x2b,0xc6,0x5e,0xff,0x16,0x63,0xf6,
0xa7,0x76,0x25,0xf1,0x55,0x37,0x40,0x44,0x84,0x54,0xf0,0x3e,0x14,0xf4,0xaa,0x3c,
0x39,0xd8,0x30,0x1a,0xcc,0xc9,0xd3,0xe0,0x7d,0x28,0x50,0xcb,0xfd,0x41,0xfe,0x5e,
0xae,0x1c,0x78,0xa8,0xae,0xa0,0xd7,0x3a,0x81,0x86,0x09,0x07,0xdf,0x4d,0xa1,0xd8,
0xe0,0xfc,0x81,0x40,0x5d,0x83,0x9f,0x1e,0x56,0x1c,0x9c,0xdd,0x8f,0xdf,0x93,0x0b,
0x83,0xf3,0x04,0xbf,0xc7,0x0f,0x6a,0x81,0x1c,0x84,0x04,0x4a,0x77,0xf0,0x5b,0x34,
0xd0,0x08,0x9b,0x54,0xd9,0x12,0xdc,0xb3,0x34,0x78,0xed,0x0b,0xce,0xcf,0x02,0xba,
0x21,0xb1,0x17,0xd2,0x11,0xc8,0xaa,0x42,0xd2,0x69,0x34,0x6c,0x40,0xf2,0x91,0x90,
0x87,0x32,0x00,0xde,0x5e,0xb0,0x49,0xcc,0xed,0xf7,0x6e,0x7e,0xe1,0x7d,0xc7,0x5a,
0x26,0xaf,0xa8,0x6b,0x7e,0xba,0x38,0xdf,0x7e,0x5e,0xb5,0xf4,0xdb,0x56,0x9b,0xf6,
0xaa,0x6e,0x73,0x40,0x8b,0x44,0xda,0xf2,0x91,0xcd,0x16,0x8a,0xf7,0x59,0x8d,0x47,
0x84,0x7e,0x81,0xed,0x46,0x35,0xd6,0xa6,0xf6,0x42,0x07,0xcd,0x79,0x9b,0x23,0x3c,
0xe0,0xf9,0x8d,0x1d,0x0e,0x86,0x0d,0x1b,0xbc,0x8f,0x06,0x0d,0x9c,0x00,0x9a,0x05,
0x16,0x18,0x21,0x3b,0xf8,0xfc,0x61,0xab,0x6c,0x0e,0xc6,0x70,0x3b,0xa4,0xe7,0x0d,
0xfe,0xe9,0x30,0x2b,0x58,0xf1,0xd3,0xb3,0x06,0xad,0xe3,0xc1,0xaa,0x4d,0x83,0x29,
0x6a,0xde,0x90,0x63,0x83,0x04,0x5a,0x1e,0x16,0xb2,0x83,0x7d,0x8e,0x1e,0x71,0x95,
0x87,0x86,0x15,0x8d,0xcc,0x05,0x2e,0x71,0x84,0x87,0xac,0xf9,0xf2,0x74,0x71,0x7e,
0x17,0x17,0x67,0x47,0x1c,0x92,0x59,0x98,0xc2,0x76,0xf5,0x3a,0x8b,0xc4,0x14,0x76,
0x63,0xc3,0x5d,0xd6,0x16,0xf7,0xa0,0xcc,0x33,0xe1,0xde,0xe9,0x90,0xcc,0x42,0x76,
0xde,0xfb,0x0a,0xc8,0xe4,0xb8,0x36,0xcd,0x97,0xd6,0xc4,0xff,0xa3,0x4b,0xed,0xa7,
0x97,0x18,0xe1,0xcf,0xd6,0xef,0x91,0x2f,0x85,0x5a,0x81,0xb8,0xf8,0xda,0xa0,0x15,
0x3f,0xb9,0x74,0x6f,0x30,0xce,0xe7,0x06,0x63,0xef,0x7c,0xf1,0xc7,0x79,0x37,0x38,
0x5e,0x16,0x14,0xa3,0x8a,0x06,0xc6,0xe8,0x14,0xf1,0x13,0x48,0x07,0xd3,0xb6,0xfa,
0x82,0x8d,0xa3,0xfa,0x81,0xfc,0xe0,0x7b,0x7b,0x03,0xa3,0x6f,0x20,0x30,0x34,0x53,
0x08,0x85,0x28,0x6b,0x15,0x76,0x05,0xbf,0xe5,0xf5,0xc6,0x37,0x34,0x4b,0x80,0x5a,
0x03,0x3f,0x77,0x9d,0x0f,0xdc,0xb5,0x79,0xe3,0x4f,0x8f,0xb7,0x36,0x3e,0xae,0x83,
0x73,0x11,0xa4,0x7b,0x71,0x50,0x78,0x41,0x81,0x06,0x11,0xe6,0x8b,0xbf,0x15,0x4c,
0x8d,0x81,0x28,0x12,0x64,0xff,0xea,0xfe,0xca,0x5f,0x4d,0xc6,0x1f,0x06,0x0c,0x7e,
0xe5,0xb0,0x6c,0xfc,0x6a,0x61,0xe1,0x40,0xa0,0x91,0x11,0xc6,0xe3,0x23,0xe9,0x39,
0x1e,0x42,0x52,0xa1,0x47,0x85,0xbe,0xe0,0x62,0x46,0x60,0x7a,0x60,0xe1,0x7b,0xc0,
0x63,0xae,0x92,0x40,0xe3,0xc7,0x63,0x1b,0x1f,0xd7,0x04,0x28,0x41,0xbc,0x0d,0xaa,
0x7c,0x2e,0x62,0xb8,0x3a,0x98,0x0e,0x1e,0xa9,0x22,0x3b,0x5a,0x8b,0xd2,0x87,0x16,
0x93,0xca,0x96,0x03,0xc9,0x9d,0xc3,0xbf,0x63,0xd8,0xbf,0xbe,0x21,0x71,0x3c,0xb6,
0xf1,0x71,0x1d,0x9f,0xdb,0xae,0x76,0xc3,0x52,0x23,0xd4,0x39,0x90,0x33,0x8e,0xfd,
0x48,0x03,0x0a,0x69,0xb4,0x34,0x43,0x80,0x51,0x22,0x5f,0xa4,0xb9,0x62,0x02,0x84,
0x90,0x0b,0x04,0xfa,0x54,0x4b,0x32,0x43,0xc0,0x28,0x91,0x82,0x19,0x09,0x1d,0xff,
0x04,0x10,0x84,0x5c,0xd9,0xbf,0xd5,0x60,0x46,0x03,0x1c,0x2e,0x72,0x60,0x5b,0xf2,
0x15,0x15,0xd4,0xb1,0x41,0xb7,0x2a,0x82,0x24,0x33,0x1a,0x60,0xf4,0xec,0x8c,0xe6,
0x0d,0xf9,0xdf,0xe2,0x4f,0xd1,0xfa,0x82,0x38,0x80,0x09,0x1c,0x49,0x83,0xdb,0xb6,
0x16,0x89,0xbf,0xda,0x68,0x70,0xde,0x3e,0x28,0xd0,0xfe,0x60,0xf1,0x67,0x6f,0xf0,
0xda,0xa6,0x4a,0x4f,0x70,0x8d,0x1e,0xf5,0x37,0x71,0x1c,0x08,0x1c,0x49,0xd9,0xf8,
0xf1,0x89,0xc1,0x65,0x63,0x04,0xfe,0x86,0x24,0xfe,0x7a,0xc3,0x28,0x42,0x34,0x70,
0x28,0xf9,0xbf,0xc1,0x77,0x4d,0xbb,0x1c,0x70,0x6f,0x97,0x88,0xf8,0xeb,0x0e,0x0d,
0x94,0x1b,0xff,0xf7,0xed,0x56,0x6f,0x7a,0x86,0x00,0xa3,0x84,0x83,0xd0,0x85,0xbf,
0x17,0xf0,0x5a,0x4f,0xc9,0x17,0xdf,0x7d,0x13,0x0e,0xa6,0x76,0xd1,0x21,0x02,0x4e,
0x06,0xaf,0x03,0x08,0x03,0xaa,0x74,0xe1,0x13,0x25,0x15,0x78,0x04,0xeb,0x8d,0xd0,
0x60,0xa0,0xca,0x08,0x73,0x8c,0xef,0x0b,0x88,0x0e,0x71,0xf2,0x0c,0x12,0xa7,0xcd,
0xc2,0x56,0xeb,0x07,0x95,0xf2,0xe5,0xc0,0x82,0x54,0xc3,0x8b,0xab,0x87,0x47,0x00,
0x47,0x04,0xab,0xd0,0xa9,0xbe,0x7f,0x20,0x1a,0x38,0xa5,0xfa,0x55,0x79,0xcc,0x85,
0xf3,0x22,0xc2,0x74,0x23,0x94,0x89,0x44,0xd7,0x64,0x08,0x30,0xea,0x59,0xc0,0x66,
0x57,0xa1,0xc9,0xf1,0x17,0x58,0x1e,0xbe,0xa2,0xf6,0xbf,0x93,0x54,0x68,0x53,0x5f,
0xe8,0x87,0xbb,0xfe,0xb0,0xd2,0xf8,0x11,0xbc,0xd1,0x8e,0x1d,0x95,0x02,0x95,0x87,
0x18,0x50,0x5c,0x60,0x40,0x35,0x95,0xd1,0x00,0xa3,0x44,0xb9,0x48,0x56,0xbe,0x8c,
0xdd,0x0a,0x8c,0x0a,0x4c,0x3b,0x0e,0xa6,0x8f,0x03,0x0a,0x21,0xa4,0x27,0x63,0x04,
0x8e,0x12,0x85,0x98,0xfc,0x3e,0xc6,0x3f,0xfa,0x54,0xc9,0x17,0x66,0x65,0x08,0x30,
0x4a,0x78,0xe8,0xd6,0x89,0x30,0x0d,0x9c,0xee,0x08,0x49,0xc6,0xb4,0xc9,0xf8,0xe4,
0x26,0xc0,0x56,0xb5,0x1d,0x25,0x13,0x20,0x93,0x2c,0x17,0xc8,0x42,0xa2,0x19,0x02,
0x8c,0x12,0x09,0x54,0xfa,0x27,0x80,0x06,0x40,0xa0,0x57,0xb5,0x33,0x43,0x80,0xd1,
0xda,0x00,0x22,0x25,0xad,0xfa,0xaa,0xcb,0xee,0xa0,0xf7,0x63,0xaa,0x00,0xa6,0x60,
0x84,0xc6,0xcc,0x2c,0xe0,0x25,0xf0,0xbd,0xda,0x79,0xe1,0xab,0x5e,0x58,0x79,0xd0,
0x6e,0x2c,0x09,0xd5,0x8e,0xd2,0x21,0x14,0x75,0xf1,0x2b,0x77,0x25,0xf1,0x1d,0x3a,
0x89,0x60,0x23,0xa7,0xa4,0xfa,0x02,0x49,0x0c,0x61,0xb5,0xa2,0xc3,0x12,0x40,0x04,
0x8f,0x03,0x49,0xa9,0x83,0x89,0x1e,0x05,0x72,0x20,0xd0,0x94,0xc0,0x4f,0xf8,0xdc,
0x63,0x83,0xc2,0x52,0xc1,0xb5,0xc3,0x1c,0xd8,0x6f,0x28,0x14,0x9c,0x5b,0x20,0x50,
0x28,0x82,0x45,0xc9,0xc6,0x0f,0xff,0x4e,0x11,0x7f,0xe3,0xaa,0xb0,0xc0,0xbd,0x69,
0x65,0xa6,0x11,0x4e,0x0d,0xf9,0xb3,0x11,0x0b,0xd9,0xcf,0x34,0x9d,0xe6,0x2c,0x58,
0xfb,0xa8,0x97,0x21,0xc0,0x30,0x9c,0x57,0x53,0xf7,0xa6,0xbb,0xbd,0xbe,0xcb,0x81,
0x0b,0x87,0x1e,0xcf,0x11,0x53,0xfa,0x80,0xf5,0xa8,0x49,0xfb,0x3b,0x77,0xa5,0xf0,
0xd3,0xaa,0xb2,0xc5,0xf7,0xd8,0x95,0x1a,0x5f,0xd8,0x61,0x82,0x74,0x31,0x19,0x5a,
0x60,0x4a,0x0e,0xca,0xbd,0xb3,0x01,0x79,0xbc,0xe0,0xfd,0xc0,0x90,0x12,0x71,0xeb,
0x3c,0xa5,0xcd,0x42,0xdc,0x81,0x0a,0x11,0xea,0x43,0x7e,0x06,0x6f,0x78,0xc8,0x16,
0x33,0x2e,0x07,0xca,0xcf,0x0d,0xdd,0x56,0x4e,0x11,0x3a,0xac,0x5f,0xdc,0x69,0xbb,
0x55,0xd6,0x05,0x04,0x2d,0x97,0x03,0x59,0x48,0x00,0x69,0x34,0xfb,0x19,0x2f,0x31,
0x98,0x22,0x90,0x21,0xc0,0x20,0x2e,0x8b,0x37,0x86,0xd6,0xdb,0xf4,0xf2,0x06,0x71,
0x3e,0x3c,0xfc,0x33,0x17,0x76,0x2e,0x12,0x61,0x49,0xf8,0xe8,0x8c,0x75,0xa1,0x21,
0x7a,0x7b,0x68,0xae,0x61,0xc3,0x4b,0xac,0x59,0x1c,0x14,0xa0,0x13,0x08,0x7c,0x44,
0x7f,0x45,0xe0,0xf2,0x3d,0xd4,0xc0,0x10,0x11,0xc8,0x87,0xfc,0x7b,0xdc,0xbe,0xc1,
0xea,0x71,0x07,0xe1,0xd6,0xf8,0x5c,0xd9,0xa2,0xee,0xcc,0xff,0xdc,0xb4,0x66,0xf3,
0xa4,0xb3,0x01,0x92,0xd6,0x2e,0xcb,0x86,0xae,0xff,0xbb,0x69,0xc3,0x33,0xc3,0x3f,
0xcb,0x46,0x12,0x13,0x61,0x3d,0x69,0x18,0x98,0x2a,0x92,0x2a,0x17,0x33,0x62,0xef,
0x7f,0x5c,0x93,0xf3,0x57,0x69,0xea,0xfa,0x49,0x69,0x04,0x76,0x62,0x2f,0x2c,0xc5,
0x7c,0x7f,0xa4,0xcf,0x0a,0x90,0x81,0xbe,0x11,0x8c,0xc0,0x75,0xde,0xc8,0x5b,0xb7,
0x1d,0xaf,0xb0,0xf8,0xf1,0x88,0xa8,0x8e,0x5c,0x20,0xa9,0x4d,0xbd,0xeb,0xeb,0x24,
0xf4,0xed,0x49,0x47,0x80,0x6f,0xd5,0xce,0xc9,0xed,0x55,0x7d,0x43,0xcc,0x84,0xff,
0x31,0xf4,0xf8,0xcd,0xf1,0xe6,0xa2,0x2f,0xc7,0x67,0x67,0x57,0x8a,0xd3,0xeb,0x0c,
0xcb,0xe2,0xb2,0xc0,0x46,0xef,0xc0,0x0e,0x9f,0x43,0x31,0x70,0x8c,0x67,0x0c,0x1b,
0x3d,0xbf,0xbc,0xec,0x58,0x66,0x12,0x59,0x90,0x37,0x45,0xa4,0x1a,0xe0,0xdf,0xe2,
0xb3,0x6a,0x06,0x3f,0x7b,0x57,0x4d,0xfd,0x09,0x69,0xb4,0x72,0x96,0x13,0xd9,0x38,
0x61,0x09,0xf0,0xad,0xf8,0x9c,0xec,0xaf,0xc4,0x9b,0xf3,0x86,0x1f,0x7f,0xcc,0x4b,
0x9e,0x85,0xb0,0xed,0xbd,0x91,0x92,0x8e,0x21,0xc2,0x8f,0x3c,0x64,0x07,0x7e,0xdf,
0xae,0x5e,0xf5,0x2e,0xf5,0x4a,0xbc,0x61,0x03,0xeb,0x0e,0x0b,0x25,0x23,0xfc,0xea,
0x94,0xc2,0x93,0xc7,0xd8,0xd7,0xd6,0x62,0x7d,0xc3,0x70,0x38,0xb6,0xdb,0x97,0x27,
0x40,0x81,0xa8,0x18,0x08,0x7f,0xa0,0xa6,0x61,0xfe,0x6a,0x9b,0xfe,0xdc,0xd7,0xe3,
0xcd,0x02,0xb0,0x0d,0xef,0xf3,0x85,0x98,0x9f,0x7d,0x68,0xe3,0x73,0x3a,0x61,0x09,
0xf0,0x84,0x4d,0x9e,0x7d,0xbf,0x1d,0xf8,0x9f,0x5b,0xeb,0x0e,0x2e,0x14,0xbf,0x1b,
0xef,0xfc,0x2c,0x58,0x39,0x67,0xed,0x23,0xfb,0x1f,0xfe,0x49,0x9b,0xfc,0x60,0x12,
0x9e,0xfb,0xd6,0xa6,0x75,0x2f,0x74,0x62,0xc3,0xc3,0x93,0x2d,0xff,0xe9,0x2a,0x33,
0x47,0xf8,0xd5,0x8f,0xb9,0x30,0xff,0x30,0x4c,0xda,0x91,0x42,0x72,0xdd,0x0a,0x2d,
0x2f,0x63,0x9b,0x77,0x28,0x23,0xee,0x10,0xbe,0xdb,0x1e,0x9e,0x8f,0x57,0x10,0x75,
0x81,0x56,0xbc,0x6f,0xc6,0x24,0xf4,0xf9,0x4f,0xb6,0xac,0xd2,0xcb,0x62,0xf5,0x27,
0xaa,0xd2,0x7c,0x82,0x89,0xde,0x39,0xf4,0xbb,0xcb,0xe3,0xb3,0xa7,0x4c,0x28,0x02,
0x54,0x1b,0xe7,0xef,0x9d,0xaa,0x27,0x3f,0xe1,0x25,0xf7,0x6f,0x8a,0xf4,0x6c,0xd3,
0xe9,0x92,0x50,0x3d,0x35,0x07,0xf3,0xe8,0xe0,0xb1,0x8f,0xc4,0x1a,0x6a,0x76,0xab,
0xfd,0xe4,0x09,0x12,0xf9,0x4a,0xa0,0xee,0xa3,0xa9,0x21,0x6d,0xfe,0x8c,0x0b,0x3f,
0x73,0xfd,0x22,0xcb,0xc3,0x85,0x93,0x06,0x0e,0x67,0x27,0xd2,0xfb,0x52,0xfa,0x22,
0x2b,0xff,0xaf,0x69,0x65,0x9a,0x73,0x60,0x88,0x19,0x44,0xeb,0x90,0x7f,0x56,0xb9,
0x4a,0xcd,0x08,0x61,0xe2,0x8d,0x96,0xfd,0x84,0xb4,0x01,0x11,0x47,0x42,0x11,0xf0,
0x88,0x4d,0xfe,0x7b,0x08,0xfe,0xf0,0x8d,0x4d,0x6b,0x77,0x7d,0xbe,0x76,0xb6,0xac,
0xb3,0xde,0xbf,0x45,0x44,0xfe,0xeb,0x73,0x2d,0xab,0x06,0x00,0xae,0xaf,0x6d,0x96,
0xcb,0x63,0xf5,0x57,0xb7,0xab,0xbb,0x74,0xe8,0xb9,0x9f,0x8c,0x35,0xbd,0xee,0xbb,
0xb5,0xf3,0xc2,0xe3,0x96,0x00,0xb7,0xb4,0xac,0xed,0x2a,0x14,0x79,0xa8,0x55,0xbd,
0xb7,0x0f,0x1e,0xbb,0x33,0xd5,0x99,0x67,0xa1,0x26,0x1f,0xd9,0x07,0xf0,0x9d,0xda,
0xb9,0xce,0x2a,0xeb,0xde,0x9a,0x2f,0xf2,0xfb,0x6f,0x6f,0x5a,0xbb,0x13,0x20,0x17,
0xc9,0xed,0xc5,0x5f,0xa1,0xfb,0x84,0x0b,0x3f,0x4c,0xdb,0xfd,0x59,0x37,0x43,0x6d,
0x82,0xfb,0xd2,0xca,0xe2,0x11,0x7a,0x7f,0xfb,0x30,0xd5,0xbc,0x6f,0x84,0xdc,0xec,
0x75,0x1e,0xcc,0x30,0xfe,0x10,0xf2,0x94,0x7b,0x60,0x92,0xbe,0xc2,0x3d,0xe0,0x20,
0x12,0x60,0x85,0x07,0x53,0x86,0xb5,0xd6,0x4e,0x0b,0x7f,0x77,0xf5,0xa0,0x14,0xf1,
0xe1,0x46,0xab,0x87,0x9f,0x89,0xb4,0x55,0x71,0xf6,0xaa,0x5d,0xb8,0xc8,0xc9,0xfa,
0x09,0xc0,0x5a,0x2f,0xdd,0x9c,0x42,0x17,0x37,0x4a,0xf8,0x36,0x80,0xef,0xd6,0xce,
0x71,0x5a,0xbc,0xe4,0x75,0x9d,0xaa,0x2b,0x6f,0xdd,0xb4,0xfe,0xb7,0xfb,0xa7,0xc9,
0x35,0xf5,0xef,0x48,0xa0,0xee,0xd5,0xc3,0x9c,0x64,0xc7,0x85,0x1f,0xe0,0x6b,0xb5,
0x73,0x4c,0xa5,0x89,0xe4,0x3c,0xe2,0xf6,0x15,0x6f,0x53,0x2f,0x5a,0x08,0x53,0x13,
0xd0,0xd8,0xae,0xb6,0xe2,0x24,0x13,0xf9,0x5d,0x27,0x5e,0x59,0x4a,0x75,0xb6,0x83,
0xb4,0xed,0xc6,0xf6,0xb5,0xa9,0x7d,0xc7,0x47,0x63,0x8d,0x3f,0xa8,0x96,0xd0,0xbe,
0xf5,0x9a,0xae,0x4d,0x40,0x64,0x27,0xde,0x65,0x67,0xd7,0xd4,0x36,0xfc,0xce,0xeb,
0x3b,0x7f,0x37,0xf6,0xb5,0x75,0x38,0x7d,0xef,0xab,0xa9,0xff,0xe5,0x1e,0x6c,0xe7,
0x3e,0xec,0xbc,0x17,0x2c,0xdc,0x91,0x52,0x5a,0x14,0x2e,0x0a,0x09,0xdf,0x19,0x66,
0x85,0x3d,0x98,0x56,0x1a,0xcc,0xc1,0x9b,0x50,0x03,0x6c,0xb3,0xd0,0x61,0x0f,0x16,
0xda,0x2a,0x57,0x29,0x1e,0xf2,0xbd,0x3e,0x85,0xef,0xa4,0x2c,0x27,0x1a,0x7f,0x69,
0xd7,0x89,0x21,0x5f,0xd8,0x6b,0x3d,0x68,0x55,0xe5,0x44,0xf1,0x57,0x17,0x0f,0xee,
0x42,0x1e,0x1e,0xe2,0x17,0xb0,0xc0,0x7f,0xa7,0x95,0xd3,0x9c,0x03,0xbb,0x9e,0x77,
0x29,0xfb,0xf7,0x0f,0x6c,0xb3,0xbe,0x76,0xd8,0x63,0x95,0x9b,0x5d,0x7f,0x15,0x71,
0x1e,0xd2,0xf3,0x67,0x6f,0xe0,0xfa,0x85,0x33,0x63,0x85,0xdb,0xd5,0x5d,0xea,0x42,
0x76,0xb9,0x98,0xac,0xab,0x63,0x4d,0xde,0x83,0x5e,0xe2,0x46,0x81,0xfb,0xee,0xdc,
0xbc,0xf1,0xe1,0x1f,0xd6,0xcd,0x97,0xc7,0xdc,0x81,0xf9,0x1d,0xd8,0xcb,0xf2,0xc5,
0xfc,0xe1,0x7b,0x9b,0xd6,0x3d,0x74,0xac,0x3a,0xe7,0x11,0xcd,0xb2,0xdf,0x5e,0x53,
0xf7,0x85,0x1d,0x6a,0xdf,0x36,0x80,0xc6,0xfa,0xd1,0x1c,0x3b,0xa4,0x73,0x86,0xc1,
0xb5,0xe0,0x28,0x58,0x0f,0x6c,0x14,0x92,0x02,0x39,0x1e,0x58,0xe3,0x1f,0x0b,0x79,
0xc3,0x34,0xd0,0x14,0xa4,0xbd,0x41,0x42,0xdf,0xeb,0x43,0x23,0xd9,0xc8,0x36,0x0b,
0x95,0x1b,0xd5,0x5d,0x62,0xd1,0x8a,0xe9,0x22,0xb7,0x38,0xd0,0xd5,0x0d,0xcb,0xde,
0xe1,0x70,0xe5,0x79,0x11,0x71,0x36,0x7a,0x70,0x45,0xd2,0xf2,0xa9,0xb0,0xb0,0x2c,
0x2c,0x78,0x41,0x5a,0xd6,0x56,0xab,0xfc,0x20,0xad,0x14,0x00,0xf3,0x8c,0x30,0xc7,
0x40,0xb1,0x11,0x7e,0x9d,0x56,0x7a,0x55,0x39,0xc3,0x91,0xfd,0xb5,0xfc,0x73,0x81,
0xb7,0x44,0xfc,0xf4,0x2f,0x0b,0xfc,0x33,0xed,0xe7,0x16,0xce,0x09,0xf9,0x56,0xff,
0x5f,0x5c,0xe5,0x75,0x21,0xe1,0xf6,0xb4,0x72,0x45,0xc4,0xdf,0x85,0xbc,0x57,0x95,
0xff,0xf5,0xe0,0x51,0xeb,0x2f,0x32,0x5d,0x1e,0x35,0x84,0x80,0x9f,0xa7,0x94,0xf9,
0x06,0xd6,0x58,0xf8,0xa3,0x55,0x4e,0x37,0x82,0x2a,0x6c,0x45,0xd8,0xac,0x96,0x2a,
0xcc,0x33,0x56,0x78,0xb0,0x1a,0xb3,0xa1,0x58,0x24,0xd1,0xa5,0xf4,0x57,0x89,0x79,
0x66,0xbd,0xba,0xb7,0x56,0x8b,0xf3,0xc9,0x34,0x6a,0x76,0xa8,0x7d,0xc7,0x80,0xea,
0x6b,0x3a,0xb1,0x27,0xcd,0x97,0xf0,0xb5,0x53,0x8c,0x73,0x5b,0x1e,0x12,0x59,0x65,
0xd3,0xef,0xf4,0xd0,0x33,0xe6,0x9b,0xe8,0x75,0x49,0xb5,0x39,0x16,0x0a,0x5f,0x50,
0xb7,0xfa,0x9c,0x50,0xce,0x83,0x1f,0xd9,0xb8,0xd2,0x7b,0x55,0x08,0x30,0x84,0x08,
0xe7,0x09,0xbc,0x6e,0x00,0xdd,0x99,0x44,0x37,0x38,0x88,0x11,0xc8,0x4e,0xc3,0xe6,
0x66,0x09,0xb5,0xfc,0xc9,0x26,0xfb,0x66,0x4b,0xc8,0xad,0x10,0x33,0x73,0x8b,0x7a,
0xd7,0x6c,0x57,0x1b,0xab,0x13,0xb3,0x03,0x58,0xd3,0x0f,0xeb,0x04,0x72,0x42,0xf0,
0xc6,0x14,0x3a,0x7f,0xa1,0x89,0xbc,0xbd,0x53,0x35,0xbd,0x56,0xd3,0xd1,0x72,0x4c,
0xdd,0x56,0xf5,0x3e,0x5b,0x24,0xb4,0x16,0x61,0xee,0xcd,0x12,0xb2,0x7a,0x95,0x3c,
0x45,0x2f,0x5f,0x64,0x08,0x3f,0x69,0x79,0xd6,0x43,0x6c,0x0a,0x7b,0x4a,0xbf,0x6a,
0x55,0x3f,0xb0,0x2f,0x50,0xc5,0x73,0xc5,0xa1,0x43,0x2d,0xdb,0x83,0x3e,0xfb,0x16,
0x23,0x4c,0x37,0xf0,0x7d,0x57,0x55,0xc1,0xde,0x14,0x36,0x54,0x1b,0xe8,0xb0,0xea,
0x74,0x2b,0x74,0x03,0x7d,0xea,0x90,0x43,0x84,0xa9,0x06,0xee,0x76,0x07,0xc8,0x95,
0x30,0x27,0x99,0x28,0x4f,0x78,0x09,0x1e,0xd0,0x34,0xb3,0xc4,0xa1,0x04,0x61,0x83,
0x7a,0x9a,0x42,0xe5,0xfd,0x21,0xe1,0x51,0x4f,0x79,0x3a,0x18,0x5a,0x86,0x6e,0x66,
0x31,0x68,0x62,0xcc,0x10,0x93,0xbe,0x26,0x54,0xc0,0x37,0xdd,0x6e,0xc9,0x46,0xbe,
0xbf,0x53,0xad,0x71,0xa0,0xa2,0x50,0x24,0xd7,0x55,0xa6,0x76,0xa3,0x8d,0x29,0x34,
0xab,0x51,0x9c,0xae,0xb5,0xea,0x15,0xd6,0x89,0xf3,0x60,0x19,0x66,0x5b,0x8b,0x7a,
0x03,0xf9,0x22,0xd1,0x62,0xcc,0x33,0xfd,0xe8,0xeb,0x77,0xaa,0x37,0x33,0x26,0xa1,
0x3f,0x14,0x8a,0xd9,0xb2,0x49,0x5d,0x9d,0x26,0xce,0xda,0x4a,0x9c,0x9e,0x98,0x13,
0x59,0x75,0xc5,0xc6,0x67,0xed,0xab,0x4a,0x80,0x23,0xc1,0x45,0x35,0x75,0x97,0xed,
0x56,0xfb,0xa1,0x5c,0x91,0xee,0x24,0xba,0x23,0xed,0xdb,0x5e,0x89,0x32,0xcc,0xae,
0x5e,0xec,0x9b,0xfa,0x55,0x4f,0x38,0xc7,0xc9,0x7e,0xbd,0x03,0x3d,0xbb,0xd4,0x6b,
0x68,0x55,0x3b,0x25,0x1b,0x66,0x26,0xa1,0x20,0x0c,0xe9,0x14,0x9a,0x56,0x68,0xdb,
0xa5,0xde,0xe7,0x5c,0xc8,0xcf,0x11,0xd9,0xdc,0xa3,0x9a,0x5b,0x2e,0xa6,0xab,0x4d,
0x6d,0x73,0x96,0xc8,0xee,0x42,0xe4,0xdb,0xd3,0xc4,0x59,0xf7,0xa8,0x4d,0xf5,0x54,
0x89,0x93,0xe8,0x85,0xbe,0x1a,0x71,0x28,0xc3,0xb0,0x5a,0xd3,0xdf,0xef,0x43,0x67,
0xa8,0x92,0x7a,0x83,0x13,0xed,0x57,0x48,0xf6,0xab,0x76,0xad,0xd6,0xf4,0xc0,0x00,
0xba,0x25,0x07,0x71,0x53,0xb0,0x3b,0x81,0x4a,0x16,0xd2,0x33,0x53,0xcc,0x86,0x76,
0xd5,0x54,0x01,0xd2,0x28,0x60,0x14,0xbf,0x00,0x85,0x0b,0x4e,0x2e,0xb2,0xcf,0x40,
0xe1,0x16,0xbc,0x79,0x29,0xa5,0xb5,0x52,0xcc,0x5f,0xea,0x24,0xb4,0x43,0x85,0x92,
0x9d,0xd6,0x3b,0xa7,0x0d,0xbb,0x70,0xb7,0xda,0x77,0x26,0xd0,0x70,0x0e,0x32,0x10,
0x82,0x0d,0x11,0x08,0x17,0x88,0xe9,0x7e,0x8d,0x89,0xec,0xfe,0x93,0x4d,0x6e,0x2b,
0xc1,0xb4,0x2a,0xba,0xa7,0x04,0xd3,0xb9,0x0f,0xbb,0xa5,0x4a,0x42,0x3b,0x16,0x99,
0x48,0xfb,0x74,0x89,0x24,0xcf,0xdd,0xb8,0x42,0x8f,0xab,0x21,0xe0,0x58,0xe3,0xda,
0x58,0x53,0xf5,0x4a,0x4d,0x9d,0x3b,0x43,0x9c,0xa9,0x49,0xd5,0xfe,0x36,0xb4,0x2d,
0x1f,0xd9,0x5c,0x6f,0x22,0x2b,0x43,0xd0,0x75,0x73,0xcb,0xea,0xfd,0xaa,0xef,0x92,
0x9a,0xfa,0xe6,0xd9,0x26,0xbc,0xfd,0xc6,0x96,0xd5,0x5d,0x83,0xc7,0x7e,0x58,0x3b,
0x37,0x6f,0x93,0xba,0x89,0xaf,0xb4,0xac,0x79,0xd5,0xb2,0x71,0xae,0x8b,0x35,0xcd,
0xfc,0x97,0xa6,0x6e,0x29,0x44,0x9e,0xcf,0x47,0xfe,0x79,0x82,0x44,0xda,0xd7,0x69,
0xba,0xb4,0x50,0xcc,0xea,0xef,0x6d,0x5a,0xb7,0x9b,0x0c,0x32,0xc8,0x20,0x83,0x0c,
0x32,0x78,0x75,0xf0,0xff,0x01,0x5b,0x91,0x2c,0x0a,0x3a,0x9c,0x57,0x84,0x00,0x00,
0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82};
@@ -1,108 +0,0 @@
// Created with image_to_c
// https://github.com/bitbank2/image_to_c
//
// snoopy_128x128_4b
// Data size = 1512 bytes
//
// PNG, Compression=Flate, Size: 128 x 128, 8-Bpp
//
// for non-Arduino builds...
#ifndef PROGMEM
#define PROGMEM
#endif
const uint8_t snoopy_128x128_4b[] PROGMEM = {
0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x08,0x03,0x00,0x00,0x00,0xf4,0xe0,0x91,
0xf9,0x00,0x00,0x00,0x33,0x50,0x4c,0x54,0x45,0xd1,0x4c,0x7b,0x28,0x1f,0x1f,0x40,
0x20,0x21,0x58,0x20,0x21,0x70,0x21,0x21,0x8c,0x21,0x21,0xa5,0x22,0x22,0x4a,0x3f,
0x3f,0xb7,0x23,0x21,0xce,0x24,0x21,0xeb,0x25,0x1f,0x74,0x6a,0x6a,0x94,0x8e,0x8d,
0xaf,0xaa,0xa8,0xc4,0xbf,0xbe,0xd4,0xcf,0xce,0xfc,0xfe,0xfa,0xad,0x80,0x28,0x23,
0x00,0x00,0x00,0x01,0x74,0x52,0x4e,0x53,0x00,0x40,0xe6,0xd8,0x66,0x00,0x00,0x05,
0x63,0x49,0x44,0x41,0x54,0x78,0xda,0xed,0x9b,0x89,0x7a,0x9b,0x30,0x0c,0x80,0x6b,
0xf9,0x40,0x8e,0x01,0xe7,0xfd,0x9f,0x76,0x92,0x8c,0x49,0xb8,0xda,0x02,0x06,0x77,
0x5b,0xb5,0x24,0x1f,0x09,0x19,0xfa,0x2d,0xeb,0xb2,0x49,0x3f,0x3e,0x7e,0xe5,0x57,
0xfe,0x29,0x81,0xd0,0x86,0xaa,0x00,0xaa,0x09,0x7d,0x4d,0x02,0x50,0x4a,0x75,0xb5,
0x01,0x1a,0xa8,0xe9,0x01,0x7d,0xec,0x43,0x3d,0x80,0x26,0x3e,0x45,0x5a,0xa8,0xab,
0xff,0xf9,0xec,0x55,0x15,0xfb,0x8f,0xfa,0xc9,0x06,0x35,0x00,0xc2,0x4b,0xff,0x33,
0xd6,0x98,0x84,0xfe,0x0d,0xe0,0xd9,0x54,0x98,0x81,0x77,0xfd,0x35,0xe6,0xa0,0x99,
0x00,0x74,0x50,0xd5,0x05,0xaa,0xc4,0x41,0xfb,0x9f,0x00,0x00,0x6c,0x4d,0x6e,0x77,
0x0b,0x00,0x84,0x18,0x37,0x12,0x6d,0x3f,0x05,0xb8,0xc6,0x09,0x41,0x86,0xb9,0x5e,
0xee,0xee,0x00,0x80,0x94,0xed,0x43,0xf3,0x45,0x22,0xbe,0x6c,0x0a,0x9a,0x18,0x59,
0xcd,0x7a,0xd3,0x35,0x05,0xb8,0x24,0x17,0xc3,0xe0,0x67,0x6d,0xfb,0xb5,0x05,0xae,
0x01,0x78,0x4e,0x01,0x9a,0xb6,0x8b,0x7d,0x76,0xc9,0x19,0xc0,0x25,0xc5,0xa0,0xe9,
0x92,0x09,0xd2,0x14,0xc0,0x10,0xf8,0x31,0xac,0x64,0xe2,0x4b,0x72,0x31,0x8d,0x51,
0x46,0x19,0xd3,0xb5,0xc7,0xb8,0x8f,0xcd,0x02,0x20,0xd2,0xc9,0xf2,0x00,0x59,0x45,
0xd7,0xce,0x52,0x7f,0x3f,0x4b,0x84,0x31,0xf4,0x97,0xf4,0x65,0xdd,0xc4,0x05,0xde,
0xa7,0x3c,0x4c,0xd3,0x40,0xbc,0xc6,0x0d,0x47,0x2f,0x93,0x34,0x10,0xa6,0x2e,0x0f,
0x73,0x17,0xb8,0xc0,0x0d,0xb3,0xca,0xbe,0x5d,0xfa,0x7c,0xab,0xfa,0x25,0x40,0xe9,
0x39,0xc8,0x93,0x1c,0xc2,0xa2,0xfd,0xa1,0xd1,0x2e,0xf5,0x17,0xcf,0xc6,0x5d,0xf6,
0xb0,0xa6,0x09,0x81,0x68,0x28,0x2b,0xc6,0xbe,0xeb,0xfa,0x94,0x9d,0x57,0x00,0x0a,
0x3b,0xc1,0x3c,0xd3,0x85,0xb6,0xef,0xfb,0x18,0xf3,0xbb,0x1b,0x00,0x66,0x36,0x9f,
0xf0,0xc4,0xf6,0x7a,0x80,0x59,0xcf,0x39,0x6b,0x3f,0xda,0xeb,0x7d,0x60,0x6a,0xe4,
0x99,0xc9,0x57,0x01,0xc2,0xc7,0x75,0x00,0x34,0xe7,0x63,0xdc,0x91,0x1f,0xc4,0xb6,
0xe9,0xe3,0x7c,0x02,0x0a,0x2f,0x92,0x61,0x0a,0xd0,0x3c,0x69,0x0e,0x5a,0x1a,0x79,
0xd0,0x1a,0x80,0x9e,0x0a,0xb8,0x36,0x66,0x0a,0x2e,0x92,0xc6,0x5a,0x4b,0x27,0x8a,
0x28,0x77,0x88,0x08,0x12,0x75,0x6d,0x20,0xd1,0xd6,0x9a,0x86,0xbc,0xb0,0x8d,0xe1,
0x91,0xc5,0xd3,0x03,0x1d,0x7d,0xde,0x76,0xf4,0x25,0x8b,0x3e,0x9f,0x30,0x05,0x00,
0x0c,0x5f,0x08,0x8d,0xf3,0x7e,0xbc,0x2c,0xbd,0x6d,0x48,0xdc,0x63,0x21,0x46,0xc1,
0xe4,0xbd,0x2b,0x00,0xb0,0xa2,0x86,0xc7,0xfc,0xce,0xf3,0x12,0xad,0xc2,0xe4,0x63,
0x0f,0x57,0x01,0x6c,0x08,0x28,0x35,0xe5,0x3a,0x0f,0x00,0xb8,0x13,0x00,0x0b,0x03,
0x28,0xbf,0x43,0xbf,0x57,0x4a,0xd9,0xa9,0x53,0x9c,0xb7,0xc0,0x1e,0x03,0xe0,0x02,
0xc0,0x96,0x09,0x82,0xef,0x8a,0x5b,0x00,0x38,0x38,0x9d,0x05,0xf6,0x00,0x58,0x02,
0x98,0x9a,0xec,0x74,0x18,0xec,0xf3,0x41,0xc3,0x5b,0xa5,0x85,0x01,0xfc,0xce,0x20,
0x98,0x59,0xe0,0xa1,0x6b,0x03,0xd8,0x3b,0x83,0xe0,0x41,0xfa,0x67,0xa9,0xf0,0x74,
0x32,0x36,0xbb,0x01,0xfa,0xa9,0xd7,0xe0,0x49,0x27,0xb0,0xbb,0x00,0x34,0xdf,0x30,
0xf0,0x25,0xbd,0x70,0x5f,0x10,0x24,0x00,0x2c,0xe9,0x85,0x80,0xde,0x53,0x3b,0x40,
0x2d,0x81,0xcb,0x82,0xf8,0x2a,0x84,0xdc,0x04,0x58,0x43,0xa2,0x81,0xce,0x58,0x4e,
0x03,0xaa,0xd3,0xdc,0x40,0x88,0x38,0xab,0x8d,0x3f,0x07,0xa0,0xdc,0x6a,0x25,0xe6,
0x8b,0x3b,0xa3,0xb5,0x75,0xb9,0xf7,0x40,0x21,0xe3,0x3c,0xa0,0x8c,0x50,0xb2,0x7a,
0x3a,0xeb,0x4f,0x86,0xc1,0xa7,0x51,0xe8,0x57,0x13,0xd1,0x9c,0xf9,0x9c,0x17,0xea,
0x5d,0x2e,0x20,0x00,0xed,0x0c,0xe0,0x9c,0x17,0xee,0x8b,0x42,0xa9,0x86,0x2d,0xfe,
0x30,0x80,0x53,0x2d,0xc1,0xbe,0x5a,0x98,0xca,0x61,0x33,0x77,0x0d,0x7b,0x5f,0x1a,
0xe0,0x96,0xa8,0x5d,0x18,0xcd,0xdd,0x09,0xf0,0x70,0xc6,0x2f,0xe7,0xe5,0xae,0x5a,
0xb8,0x99,0x1f,0xef,0xaa,0x85,0x9b,0xc1,0x59,0x1b,0xc0,0xde,0x96,0x87,0xb6,0x3c,
0xf3,0xae,0x62,0xbc,0x09,0x00,0xb7,0xa5,0x81,0xad,0x4e,0xad,0x58,0x14,0xfa,0xb4,
0x2a,0xe5,0x7a,0x9c,0x4b,0xb2,0x94,0xc6,0x54,0xb1,0xd3,0x19,0x2e,0x83,0x54,0xa0,
0x2d,0x17,0x4c,0x7f,0xd2,0x09,0xc0,0x7b,0x2b,0x62,0x6c,0x96,0xdc,0x15,0xd8,0xd4,
0x08,0x00,0xef,0x44,0xa4,0xea,0x8b,0x46,0x1b,0x93,0xbe,0xc1,0x28,0x68,0xe8,0xc8,
0x00,0x6f,0x5e,0x20,0x5e,0x15,0x04,0xf8,0xad,0x34,0xe1,0x8f,0x3b,0x41,0x99,0x20,
0x38,0x91,0x8a,0x6c,0x29,0x00,0x53,0x37,0x08,0x0e,0x7b,0xe1,0xfe,0x52,0xb4,0xe9,
0x2c,0x35,0x4b,0xd1,0x89,0x5c,0x08,0x8f,0x62,0x00,0x50,0x37,0x08,0x8e,0x7a,0xa1,
0x2d,0x07,0x60,0xeb,0x06,0xc1,0xc1,0xb6,0xac,0x9c,0x0f,0x1e,0x0c,0x03,0x55,0x10,
0xc0,0xd7,0x0d,0x82,0x83,0x5e,0xa8,0x4b,0x02,0xd8,0xbf,0x11,0x40,0x59,0x5e,0xf2,
0xf3,0x03,0xd3,0x4b,0xde,0x1f,0xa0,0x7a,0x2f,0xab,0x71,0x1c,0x36,0x02,0x5c,0xda,
0x3e,0x48,0x47,0xdc,0x2a,0xc8,0xd2,0x9c,0x85,0x5b,0x04,0xde,0x3c,0xd0,0x70,0x24,
0x13,0x81,0x76,0x72,0x41,0x56,0x9f,0x56,0xfb,0x59,0x95,0xb4,0x1d,0xe9,0x29,0x80,
0x7c,0x80,0xf9,0x93,0x84,0x3b,0xc0,0x52,0x7f,0xc4,0x0f,0x7f,0xac,0x1a,0xe9,0xa1,
0xc9,0x2a,0x20,0xc7,0x1a,0x02,0x31,0xc1,0x68,0x78,0x94,0xc1,0xa0,0xc7,0x97,0xdd,
0x65,0x56,0x6c,0x36,0x0d,0x26,0x83,0xd1,0x27,0x46,0x93,0xe9,0xe9,0x49,0xb6,0x1f,
0x0e,0x0f,0xb6,0x44,0x00,0x4a,0x01,0xff,0x7a,0x89,0x0f,0x2c,0x75,0x77,0xbc,0x0f,
0x49,0x0f,0x6a,0xfd,0xf8,0x70,0x55,0x08,0x42,0xf6,0x49,0xe8,0xfb,0x65,0xef,0x9b,
0x81,0x19,0x75,0x00,0x0d,0x8d,0x39,0x08,0xc4,0xc8,0x6c,0x67,0xe7,0xe3,0x76,0x58,
0xf3,0x4d,0x34,0xc5,0x5d,0x71,0xe1,0xfb,0xf7,0xc6,0xf0,0xc8,0xc5,0xd0,0xfc,0xba,
0x7e,0xcb,0xe8,0xfd,0x76,0x12,0x16,0xbe,0x7d,0xbe,0xbb,0x32,0x94,0xb6,0xc0,0xee,
0xda,0xec,0x0a,0x5b,0x60,0x77,0x6d,0x2e,0x3c,0x05,0x50,0x1b,0xa0,0xfa,0x14,0x68,
0x97,0x1d,0xfc,0xb5,0x51,0xec,0x25,0xfd,0xbe,0xaf,0x18,0x87,0x65,0x23,0xe7,0xe0,
0x87,0x2b,0xfb,0x8b,0x3a,0x6d,0x31,0x27,0x44,0x97,0xd6,0xa5,0x3a,0x6d,0x05,0xa7,
0x3d,0xeb,0x31,0x69,0xcb,0x3b,0x5e,0x21,0x17,0xb9,0x6b,0xfb,0xd9,0x14,0xf8,0x8b,
0x5a,0xf1,0x1f,0x1b,0x05,0xfb,0x9d,0xb0,0x3a,0x40,0xf5,0x29,0xf0,0xff,0x9a,0x05,
0xcc,0xcf,0xb0,0x40,0xde,0x13,0x7b,0x89,0x6c,0x8c,0x49,0x3e,0xe2,0xfe,0x93,0x93,
0x12,0x7f,0x64,0xb1,0xc4,0x6f,0x17,0x72,0x19,0x18,0x8a,0x01,0xae,0xb4,0x01,0xf4,
0x9e,0xda,0x83,0xc9,0x87,0x3e,0x65,0xac,0x72,0x00,0x70,0x70,0x0a,0xea,0x03,0xe8,
0xe9,0x05,0x4e,0xea,0x1f,0x7e,0x4e,0x74,0x00,0x00,0x3e,0x0a,0x02,0xb8,0x2f,0x76,
0x24,0x2f,0x03,0x80,0x04,0xe0,0x93,0x05,0xb6,0x30,0xdc,0x14,0x83,0x16,0xc4,0xfa,
0x94,0xfe,0xa4,0xfa,0x1d,0xc0,0xca,0xc5,0x9d,0x5f,0x1f,0x78,0xc2,0xf3,0x6f,0x00,
0x70,0xce,0x00,0xea,0xdd,0x00,0x0c,0x80,0x4a,0x34,0xb8,0xe9,0x90,0xc7,0x71,0xa7,
0x9d,0x63,0x1c,0x5d,0xc5,0x9c,0xd4,0x9f,0x06,0x0f,0xf9,0xc0,0x3c,0x50,0xcb,0x96,
0x85,0x1d,0x87,0xed,0xf9,0x10,0x91,0xf5,0xb1,0x4a,0xf1,0x12,0x6f,0x46,0x26,0x59,
0x8f,0xa9,0xb3,0x00,0xbc,0x34,0x53,0xbc,0xbc,0x56,0xd6,0x38,0x06,0x70,0x38,0x9a,
0x1b,0x59,0x91,0xe6,0xa4,0x27,0x47,0x02,0x60,0x9c,0x9c,0xa4,0x6c,0x24,0xcb,0x38,
0x50,0xe2,0x08,0xc3,0xcb,0xb7,0x5a,0xaf,0x95,0x45,0x1f,0xd0,0x7f,0x97,0x15,0x3e,
0xb5,0xc6,0x5e,0x89,0x06,0x20,0xbd,0x68,0x34,0xa7,0xe0,0x04,0xe5,0x0d,0xfd,0xf3,
0x68,0xb5,0xf6,0xde,0x38,0xa3,0x0c,0xdf,0x28,0xc8,0xf3,0x07,0xa0,0xf6,0xc4,0xc3,
0x0b,0x96,0xae,0xf1,0xf2,0x43,0x90,0xce,0x50,0xa7,0x95,0xaa,0xac,0xff,0x2c,0x2d,
0x45,0x51,0xea,0x80,0xd3,0xb4,0x4c,0x14,0x43,0x39,0x9d,0xa9,0x5d,0x5a,0x3f,0xd2,
0x77,0xe5,0x04,0x0d,0x41,0x1f,0x9d,0x09,0x19,0x3c,0x8c,0x70,0x90,0xe4,0x75,0x5a,
0xee,0x9c,0xc0,0x4a,0xf9,0x10,0x10,0xb0,0x95,0xfe,0x00,0xb2,0xe2,0xdf,0x9e,0xfe,
0xca,0x2e,0xf9,0x03,0x4c,0x0a,0xee,0xea,0x58,0xd8,0x38,0x2c,0x00,0x00,0x00,0x00,
0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82};
@@ -1,514 +0,0 @@
// Created with image_to_c
// https://github.com/bitbank2/image_to_c
//
// stackoverflow
// Data size = 8004 bytes
//
// PNG, Compression=Flate, Size: 320 x 84, 32-Bpp
//
// for non-Arduino builds...
#ifndef PROGMEM
#define PROGMEM
#endif
const uint8_t stackoverflow[] PROGMEM = {
0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,
0x00,0x00,0x01,0x40,0x00,0x00,0x00,0x54,0x08,0x06,0x00,0x00,0x00,0xf3,0xa0,0xee,
0x93,0x00,0x00,0x0c,0x3f,0x69,0x43,0x43,0x50,0x49,0x43,0x43,0x20,0x50,0x72,0x6f,
0x66,0x69,0x6c,0x65,0x00,0x00,0x48,0x89,0x95,0x57,0x07,0x58,0x53,0xc9,0x16,0x9e,
0x5b,0x52,0x21,0xb4,0x00,0x02,0x52,0x42,0x6f,0x82,0x88,0x94,0x00,0x52,0x42,0x68,
0xa1,0x77,0x04,0x51,0x09,0x49,0x80,0x50,0x62,0x0c,0x04,0x15,0x3b,0xba,0xa8,0xe0,
0xda,0xc5,0x02,0x36,0x74,0x55,0x44,0xc1,0x0a,0x88,0x05,0x45,0xec,0x2c,0x8a,0xbd,
0x2f,0x16,0x14,0x94,0x75,0xb1,0x60,0x57,0xde,0xa4,0x80,0xae,0xfb,0xca,0xf7,0xe6,
0xfb,0xe6,0xce,0x7f,0xff,0x39,0xf3,0x9f,0x33,0xe7,0xce,0xdc,0x7b,0x07,0x00,0xf5,
0x13,0x5c,0xb1,0x38,0x17,0xd5,0x00,0x20,0x4f,0x54,0x20,0x89,0x0d,0xf6,0x67,0x8c,
0x4d,0x4e,0x61,0x90,0xba,0x01,0x0e,0x50,0x40,0x06,0x2a,0x80,0xca,0xe5,0xe5,0x8b,
0x59,0xd1,0xd1,0xe1,0x00,0x96,0xc1,0xf6,0xef,0xe5,0xdd,0x0d,0x80,0xc8,0xda,0xab,
0x0e,0x32,0xad,0x7f,0xf6,0xff,0xd7,0xa2,0xc9,0x17,0xe4,0xf3,0x00,0x40,0xa2,0x21,
0x4e,0xe7,0xe7,0xf3,0xf2,0x20,0x3e,0x08,0x00,0x5e,0xc9,0x13,0x4b,0x0a,0x00,0x20,
0xca,0x78,0xf3,0x29,0x05,0x62,0x19,0x86,0x15,0x68,0x4b,0x60,0x80,0x10,0x2f,0x94,
0xe1,0x4c,0x05,0xae,0x94,0xe1,0x74,0x05,0xde,0x2b,0xb7,0x89,0x8f,0x65,0x43,0xdc,
0x0a,0x00,0x59,0x95,0xcb,0x95,0x64,0x02,0xa0,0x76,0x19,0xf2,0x8c,0x42,0x5e,0x26,
0xd4,0x50,0xeb,0x83,0xd8,0x49,0xc4,0x17,0x8a,0x00,0x50,0x67,0x40,0xec,0x93,0x97,
0x37,0x89,0x0f,0x71,0x1a,0xc4,0x36,0xd0,0x46,0x0c,0xb1,0x4c,0x9f,0x99,0xfe,0x83,
0x4e,0xe6,0xdf,0x34,0xd3,0x87,0x34,0xb9,0xdc,0xcc,0x21,0xac,0x98,0x8b,0xbc,0x90,
0x03,0x84,0xf9,0xe2,0x5c,0xee,0xb4,0xff,0x33,0x1d,0xff,0xbb,0xe4,0xe5,0x4a,0x07,
0x7d,0x58,0xc1,0xaa,0x9a,0x25,0x09,0x89,0x95,0xcd,0x19,0xe6,0xed,0x56,0xce,0xa4,
0x30,0x19,0x56,0x85,0xb8,0x57,0x94,0x1e,0x19,0x05,0xb1,0x16,0xc4,0x1f,0x84,0x7c,
0xb9,0x3d,0xc4,0x28,0x35,0x4b,0x1a,0x92,0xa0,0xb0,0x47,0x0d,0x79,0xf9,0x6c,0x98,
0x33,0xa0,0x0b,0xb1,0x13,0x9f,0x1b,0x10,0x06,0xb1,0x21,0xc4,0x41,0xa2,0xdc,0xc8,
0x70,0x25,0x9f,0x9e,0x21,0x0c,0xe2,0x40,0x0c,0x57,0x08,0x3a,0x55,0x58,0xc0,0x89,
0x87,0x58,0x0f,0xe2,0x85,0x82,0xfc,0xc0,0x38,0xa5,0xcd,0x66,0xc9,0xa4,0x58,0xa5,
0x2f,0xb4,0x3e,0x43,0xc2,0x66,0x29,0xf9,0x73,0x5c,0x89,0xdc,0xaf,0xcc,0xd7,0x03,
0x69,0x4e,0x02,0x4b,0xa9,0xff,0x3a,0x4b,0xc0,0x51,0xea,0x63,0x6a,0x45,0x59,0xf1,
0x49,0x10,0x53,0x21,0xb6,0x28,0x14,0x26,0x46,0x42,0xac,0x06,0xb1,0x63,0x7e,0x4e,
0x5c,0x98,0xd2,0x66,0x4c,0x51,0x16,0x3b,0x72,0xd0,0x46,0x22,0x8d,0x95,0xc5,0x6f,
0x01,0x71,0xac,0x40,0x14,0xec,0xaf,0xd0,0xc7,0x0a,0x33,0x24,0x41,0xb1,0x4a,0xfb,
0xd2,0xbc,0xfc,0xc1,0xf9,0x62,0x9b,0xb3,0x84,0x9c,0x48,0x25,0xde,0x5f,0x90,0x15,
0x1f,0xa2,0xc8,0x0f,0xd6,0xca,0xe3,0xca,0xe3,0x87,0x73,0xc1,0x2e,0x0b,0x44,0xac,
0x84,0x41,0x1d,0x41,0xfe,0xd8,0xf0,0xc1,0xb9,0xf0,0x05,0x01,0x81,0x8a,0xb9,0x63,
0xdd,0x02,0x51,0x42,0x9c,0x52,0xe7,0x83,0xb8,0xc0,0x3f,0x56,0x31,0x16,0xa7,0x8a,
0x73,0xa3,0x95,0xf6,0xb8,0x99,0x20,0x37,0x58,0xc6,0x9b,0x41,0xec,0x92,0x5f,0x18,
0xa7,0x1c,0x8b,0x27,0x16,0xc0,0x05,0xa9,0xd0,0xc7,0x33,0xc4,0x05,0xd1,0xf1,0x8a,
0x38,0xf1,0xa2,0x6c,0x6e,0x68,0xb4,0x22,0x1e,0x7c,0x19,0x08,0x07,0x6c,0x10,0x00,
0x18,0x40,0x0a,0x6b,0x3a,0x98,0x04,0xb2,0x81,0xb0,0xbd,0xb7,0xa1,0x17,0xde,0x29,
0x7a,0x82,0x00,0x17,0x48,0x40,0x26,0x10,0x00,0x07,0x25,0x33,0x38,0x22,0x49,0xde,
0x23,0x82,0xd7,0x38,0x50,0x04,0xfe,0x84,0x48,0x00,0xf2,0x87,0xc6,0xf9,0xcb,0x7b,
0x05,0xa0,0x10,0xf2,0x5f,0x87,0x58,0xc5,0xd5,0x01,0x64,0xc8,0x7b,0x0b,0xe5,0x23,
0x72,0xc0,0x53,0x88,0xf3,0x40,0x18,0xc8,0x85,0xf7,0x52,0xf9,0x28,0xd1,0x90,0xb7,
0x44,0xf0,0x04,0x32,0xc2,0x7f,0x78,0xe7,0xc2,0xca,0x83,0xf1,0xe6,0xc2,0x2a,0xeb,
0xff,0xf7,0xfc,0x20,0xfb,0x9d,0x61,0x41,0x26,0x5c,0xc9,0x48,0x07,0x3d,0x32,0xd4,
0x07,0x2d,0x89,0x81,0xc4,0x00,0x62,0x08,0x31,0x88,0x68,0x8b,0x1b,0xe0,0x3e,0xb8,
0x17,0x1e,0x0e,0xaf,0x7e,0xb0,0x3a,0xe3,0x4c,0xdc,0x63,0x70,0x1e,0xdf,0xed,0x09,
0x4f,0x09,0x1d,0x84,0x47,0x84,0xeb,0x84,0x4e,0xc2,0xed,0x89,0xc2,0x62,0xc9,0x4f,
0x51,0x46,0x80,0x4e,0xa8,0x1f,0xa4,0xcc,0x45,0xfa,0x8f,0xb9,0xc0,0xad,0xa0,0xa6,
0x2b,0xee,0x8f,0x7b,0x43,0x75,0xa8,0x8c,0xeb,0xe2,0x06,0xc0,0x01,0x77,0x81,0x7e,
0x58,0xb8,0x2f,0xf4,0xec,0x0a,0x59,0xb6,0x32,0x6e,0x59,0x56,0x18,0x3f,0x69,0xff,
0x6d,0x06,0x3f,0x3c,0x0d,0xa5,0x1d,0xc5,0x89,0x82,0x52,0x86,0x51,0xfc,0x28,0x36,
0x3f,0x8f,0x54,0xb3,0x53,0x73,0x1d,0x52,0x91,0xe5,0xfa,0xc7,0xfc,0x28,0x62,0x4d,
0x1f,0xca,0x37,0x7b,0xa8,0xe7,0x67,0xff,0xec,0x1f,0xb2,0xcf,0x87,0x6d,0xd8,0xcf,
0x96,0xd8,0x42,0xec,0x00,0x76,0x16,0x3b,0x89,0x9d,0xc7,0x8e,0x62,0x0d,0x80,0x81,
0x35,0x63,0x8d,0x58,0x1b,0x76,0x4c,0x86,0x87,0x56,0xd7,0x13,0xf9,0xea,0x1a,0xf4,
0x16,0x2b,0x8f,0x27,0x07,0xea,0x08,0xff,0xe1,0x6f,0xf0,0xc9,0xca,0x32,0x99,0xef,
0x54,0xe3,0xd4,0xe3,0xf4,0x45,0xd1,0x57,0x20,0x98,0x2a,0x7b,0x47,0x03,0xf6,0x24,
0xf1,0x34,0x89,0x30,0x33,0xab,0x80,0xc1,0x82,0x5f,0x04,0x01,0x83,0x23,0xe2,0x39,
0x8e,0x60,0x38,0x3b,0x39,0xbb,0x00,0x20,0xfb,0xbe,0x28,0x5e,0x5f,0x6f,0x62,0xe4,
0xdf,0x0d,0x44,0xb7,0xed,0x3b,0x37,0xef,0x0f,0x00,0xbc,0x9b,0x07,0x06,0x06,0x8e,
0x7c,0xe7,0x42,0x9b,0x01,0xd8,0xe7,0x0e,0xb7,0xff,0xe1,0xef,0x9c,0x0d,0x13,0x7e,
0x3a,0x54,0x00,0x38,0x77,0x98,0x27,0x95,0x14,0x2a,0x38,0x5c,0x76,0x21,0xc0,0xb7,
0x84,0x3a,0xdc,0x69,0xfa,0xc0,0x18,0x98,0x03,0x1b,0x38,0x1f,0x67,0xe0,0x06,0xbc,
0x80,0x1f,0x08,0x04,0xa1,0x20,0x0a,0xc4,0x83,0x64,0x30,0x01,0x46,0x9f,0x05,0xd7,
0xb9,0x04,0x4c,0x01,0x33,0xc0,0x5c,0x50,0x02,0xca,0xc0,0x32,0xb0,0x1a,0xac,0x07,
0x9b,0xc0,0x56,0xb0,0x13,0xec,0x01,0xfb,0x41,0x03,0x38,0x0a,0x4e,0x82,0x33,0xe0,
0x22,0xb8,0x0c,0xae,0x83,0xbb,0x70,0xf5,0x74,0x81,0x17,0xa0,0x0f,0xbc,0x03,0x9f,
0x11,0x04,0x21,0x21,0x34,0x84,0x8e,0xe8,0x23,0x26,0x88,0x25,0x62,0x8f,0x38,0x23,
0x4c,0xc4,0x07,0x09,0x44,0xc2,0x91,0x58,0x24,0x19,0x49,0x43,0x32,0x11,0x11,0x22,
0x45,0x66,0x20,0xf3,0x90,0x32,0x64,0x05,0xb2,0x1e,0xd9,0x82,0x54,0x23,0xfb,0x90,
0xc3,0xc8,0x49,0xe4,0x3c,0xd2,0x81,0xdc,0x46,0x1e,0x22,0x3d,0xc8,0x6b,0xe4,0x13,
0x8a,0xa1,0xaa,0xa8,0x36,0x6a,0x84,0x5a,0xa1,0x23,0x51,0x26,0xca,0x42,0xc3,0xd0,
0x78,0x74,0x3c,0x9a,0x89,0x4e,0x46,0x8b,0xd0,0xf9,0xe8,0x12,0x74,0x2d,0x5a,0x85,
0xee,0x46,0xeb,0xd1,0x93,0xe8,0x45,0xf4,0x3a,0xda,0x89,0xbe,0x40,0xfb,0x31,0x80,
0xa9,0x60,0xba,0x98,0x29,0xe6,0x80,0x31,0x31,0x36,0x16,0x85,0xa5,0x60,0x19,0x98,
0x04,0x9b,0x85,0x95,0x62,0xe5,0x58,0x15,0x56,0x8b,0x35,0xc1,0xe7,0x7c,0x15,0xeb,
0xc4,0x7a,0xb1,0x8f,0x38,0x11,0xa7,0xe3,0x0c,0xdc,0x01,0xae,0xe0,0x10,0x3c,0x01,
0xe7,0xe1,0x93,0xf1,0x59,0xf8,0x62,0x7c,0x3d,0xbe,0x13,0xaf,0xc7,0x5b,0xf1,0xab,
0xf8,0x43,0xbc,0x0f,0xff,0x46,0xa0,0x11,0x0c,0x09,0xf6,0x04,0x4f,0x02,0x87,0x30,
0x96,0x90,0x49,0x98,0x42,0x28,0x21,0x94,0x13,0xb6,0x13,0x0e,0x11,0x4e,0xc3,0xbd,
0xd4,0x45,0x78,0x47,0x24,0x12,0x75,0x89,0xd6,0x44,0x77,0xb8,0x17,0x93,0x89,0xd9,
0xc4,0xe9,0xc4,0xc5,0xc4,0x0d,0xc4,0x3a,0xe2,0x09,0x62,0x07,0xf1,0x31,0xb1,0x9f,
0x44,0x22,0xe9,0x93,0xec,0x49,0xde,0xa4,0x28,0x12,0x97,0x54,0x40,0x2a,0x21,0xad,
0x23,0xed,0x26,0x35,0x93,0xae,0x90,0xba,0x48,0x1f,0xc8,0x2a,0x64,0x13,0xb2,0x33,
0x39,0x88,0x9c,0x42,0x16,0x91,0x8b,0xc9,0xe5,0xe4,0x5d,0xe4,0xe3,0xe4,0x2b,0xe4,
0x67,0xe4,0xcf,0x14,0x0d,0x8a,0x25,0xc5,0x93,0x12,0x45,0xe1,0x53,0xa6,0x51,0x96,
0x52,0xb6,0x51,0x9a,0x28,0x97,0x28,0x5d,0x94,0xcf,0x54,0x4d,0xaa,0x35,0xd5,0x9b,
0x1a,0x4f,0xcd,0xa6,0xce,0xa5,0xae,0xa5,0xd6,0x52,0x4f,0x53,0xef,0x51,0xdf,0xa8,
0xa8,0xa8,0x98,0xa9,0x78,0xa8,0xc4,0xa8,0x08,0x55,0xe6,0xa8,0xac,0x55,0xd9,0xab,
0x72,0x4e,0xe5,0xa1,0xca,0x47,0x55,0x2d,0x55,0x3b,0x55,0xb6,0x6a,0xaa,0xaa,0x54,
0x75,0x89,0xea,0x0e,0xd5,0x13,0xaa,0xb7,0x55,0xdf,0xd0,0x68,0x34,0x2b,0x9a,0x1f,
0x2d,0x85,0x56,0x40,0x5b,0x42,0xab,0xa6,0x9d,0xa2,0x3d,0xa0,0x7d,0x50,0xa3,0xab,
0x39,0xaa,0x71,0xd4,0xf8,0x6a,0xb3,0xd5,0x2a,0xd4,0xea,0xd5,0xae,0xa8,0xbd,0x54,
0xa7,0xa8,0x5b,0xaa,0xb3,0xd4,0x27,0xa8,0x17,0xa9,0x97,0xab,0x1f,0x50,0xbf,0xa4,
0xde,0xab,0x41,0xd1,0xb0,0xd2,0x60,0x6b,0x70,0x35,0x66,0x69,0x54,0x68,0x1c,0xd6,
0xb8,0xa9,0xd1,0xaf,0x49,0xd7,0x1c,0xa5,0x19,0xa5,0x99,0xa7,0xb9,0x58,0x73,0x97,
0xe6,0x79,0xcd,0x6e,0x2d,0x92,0x96,0x95,0x56,0xa0,0x16,0x5f,0x6b,0xbe,0xd6,0x56,
0xad,0x53,0x5a,0x8f,0xe9,0x18,0xdd,0x9c,0xce,0xa6,0xf3,0xe8,0xf3,0xe8,0xdb,0xe8,
0xa7,0xe9,0x5d,0xda,0x44,0x6d,0x6b,0x6d,0x8e,0x76,0xb6,0x76,0x99,0xf6,0x1e,0xed,
0x76,0xed,0x3e,0x1d,0x2d,0x1d,0x17,0x9d,0x44,0x9d,0xa9,0x3a,0x15,0x3a,0xc7,0x74,
0x3a,0x75,0x31,0x5d,0x2b,0x5d,0x8e,0x6e,0xae,0xee,0x52,0xdd,0xfd,0xba,0x37,0x74,
0x3f,0x0d,0x33,0x1a,0xc6,0x1a,0x26,0x18,0xb6,0x68,0x58,0xed,0xb0,0x2b,0xc3,0xde,
0xeb,0x0d,0xd7,0xf3,0xd3,0x13,0xe8,0x95,0xea,0xd5,0xe9,0x5d,0xd7,0xfb,0xa4,0xcf,
0xd0,0x0f,0xd4,0xcf,0xd1,0x5f,0xae,0xdf,0xa0,0x7f,0xdf,0x00,0x37,0xb0,0x33,0x88,
0x31,0x98,0x62,0xb0,0xd1,0xe0,0xb4,0x41,0xef,0x70,0xed,0xe1,0x5e,0xc3,0x79,0xc3,
0x4b,0x87,0xef,0x1f,0x7e,0xc7,0x10,0x35,0xb4,0x33,0x8c,0x35,0x9c,0x6e,0xb8,0xd5,
0xb0,0xcd,0xb0,0xdf,0xc8,0xd8,0x28,0xd8,0x48,0x6c,0xb4,0xce,0xe8,0x94,0x51,0xaf,
0xb1,0xae,0xb1,0x9f,0x71,0xb6,0xf1,0x2a,0xe3,0xe3,0xc6,0x3d,0x26,0x74,0x13,0x1f,
0x13,0xa1,0xc9,0x2a,0x93,0x66,0x93,0xe7,0x0c,0x1d,0x06,0x8b,0x91,0xcb,0x58,0xcb,
0x68,0x65,0xf4,0x99,0x1a,0x9a,0x86,0x98,0x4a,0x4d,0xb7,0x98,0xb6,0x9b,0x7e,0x36,
0xb3,0x36,0x4b,0x30,0x2b,0x36,0xab,0x33,0xbb,0x6f,0x4e,0x35,0x67,0x9a,0x67,0x98,
0xaf,0x32,0x6f,0x31,0xef,0xb3,0x30,0xb1,0x88,0xb0,0x98,0x61,0x51,0x63,0x71,0xc7,
0x92,0x62,0xc9,0xb4,0xcc,0xb2,0x5c,0x63,0x79,0xd6,0xf2,0xbd,0x95,0xb5,0x55,0x92,
0xd5,0x02,0xab,0x06,0xab,0x6e,0x6b,0x3d,0x6b,0x8e,0x75,0x91,0x75,0x8d,0xf5,0x3d,
0x1b,0x9a,0x8d,0xaf,0xcd,0x64,0x9b,0x2a,0x9b,0x6b,0xb6,0x44,0x5b,0xa6,0x6d,0x8e,
0xed,0x06,0xdb,0xcb,0x76,0xa8,0x9d,0xab,0x5d,0x96,0x5d,0x85,0xdd,0x25,0x7b,0xd4,
0xde,0xcd,0x5e,0x68,0xbf,0xc1,0xbe,0x63,0x04,0x61,0x84,0xc7,0x08,0xd1,0x88,0xaa,
0x11,0x37,0x1d,0x54,0x1d,0x58,0x0e,0x85,0x0e,0x35,0x0e,0x0f,0x1d,0x75,0x1d,0xc3,
0x1d,0x8b,0x1d,0x1b,0x1c,0x5f,0x8e,0xb4,0x18,0x99,0x32,0x72,0xf9,0xc8,0xb3,0x23,
0xbf,0x39,0xb9,0x3a,0xe5,0x3a,0x6d,0x73,0xba,0x3b,0x4a,0x6b,0x54,0xe8,0xa8,0xe2,
0x51,0x4d,0xa3,0x5e,0x3b,0xdb,0x39,0xf3,0x9c,0x2b,0x9c,0xaf,0x8d,0xa6,0x8d,0x0e,
0x1a,0x3d,0x7b,0x74,0xe3,0xe8,0x57,0x2e,0xf6,0x2e,0x02,0x97,0x8d,0x2e,0xb7,0x5c,
0xe9,0xae,0x11,0xae,0x0b,0x5c,0x5b,0x5c,0xbf,0xba,0xb9,0xbb,0x49,0xdc,0x6a,0xdd,
0x7a,0xdc,0x2d,0xdc,0xd3,0xdc,0x2b,0xdd,0x6f,0x32,0xb5,0x99,0xd1,0xcc,0xc5,0xcc,
0x73,0x1e,0x04,0x0f,0x7f,0x8f,0xd9,0x1e,0x47,0x3d,0x3e,0x7a,0xba,0x79,0x16,0x78,
0xee,0xf7,0xfc,0xcb,0xcb,0xc1,0x2b,0xc7,0x6b,0x97,0x57,0xf7,0x18,0xeb,0x31,0x82,
0x31,0xdb,0xc6,0x3c,0xf6,0x36,0xf3,0xe6,0x7a,0x6f,0xf1,0xee,0xf4,0x61,0xf8,0xa4,
0xf9,0x6c,0xf6,0xe9,0xf4,0x35,0xf5,0xe5,0xfa,0x56,0xf9,0x3e,0xf2,0x33,0xf7,0xe3,
0xfb,0x6d,0xf7,0x7b,0xc6,0xb2,0x65,0x65,0xb3,0x76,0xb3,0x5e,0xfa,0x3b,0xf9,0x4b,
0xfc,0x0f,0xf9,0xbf,0x67,0x7b,0xb2,0x67,0xb2,0x4f,0x04,0x60,0x01,0xc1,0x01,0xa5,
0x01,0xed,0x81,0x5a,0x81,0x09,0x81,0xeb,0x03,0x1f,0x04,0x99,0x05,0x65,0x06,0xd5,
0x04,0xf5,0x05,0xbb,0x06,0x4f,0x0f,0x3e,0x11,0x42,0x08,0x09,0x0b,0x59,0x1e,0x72,
0x93,0x63,0xc4,0xe1,0x71,0xaa,0x39,0x7d,0xa1,0xee,0xa1,0x33,0x43,0x5b,0xc3,0x54,
0xc3,0xe2,0xc2,0xd6,0x87,0x3d,0x0a,0xb7,0x0b,0x97,0x84,0x37,0x45,0xa0,0x11,0xa1,
0x11,0x2b,0x23,0xee,0x45,0x5a,0x46,0x8a,0x22,0x1b,0xa2,0x40,0x14,0x27,0x6a,0x65,
0xd4,0xfd,0x68,0xeb,0xe8,0xc9,0xd1,0x47,0x62,0x88,0x31,0xd1,0x31,0x15,0x31,0x4f,
0x63,0x47,0xc5,0xce,0x88,0x3d,0x1b,0x47,0x8f,0x9b,0x18,0xb7,0x2b,0xee,0x5d,0xbc,
0x7f,0xfc,0xd2,0xf8,0xbb,0x09,0x36,0x09,0xd2,0x84,0x96,0x44,0xf5,0xc4,0xd4,0xc4,
0xea,0xc4,0xf7,0x49,0x01,0x49,0x2b,0x92,0x3a,0xc7,0x8e,0x1c,0x3b,0x73,0xec,0xc5,
0x64,0x83,0x64,0x61,0x72,0x63,0x0a,0x29,0x25,0x31,0x65,0x7b,0x4a,0xff,0xb8,0xc0,
0x71,0xab,0xc7,0x75,0xa5,0xba,0xa6,0x96,0xa4,0xde,0x18,0x6f,0x3d,0x7e,0xea,0xf8,
0xf3,0x13,0x0c,0x26,0xe4,0x4e,0x38,0x36,0x51,0x7d,0x22,0x77,0xe2,0x81,0x34,0x42,
0x5a,0x52,0xda,0xae,0xb4,0x2f,0xdc,0x28,0x6e,0x15,0xb7,0x3f,0x9d,0x93,0x5e,0x99,
0xde,0xc7,0x63,0xf3,0xd6,0xf0,0x5e,0xf0,0xfd,0xf8,0xab,0xf8,0x3d,0x02,0x6f,0xc1,
0x0a,0xc1,0xb3,0x0c,0xef,0x8c,0x15,0x19,0xdd,0x99,0xde,0x99,0x2b,0x33,0x7b,0xb2,
0x7c,0xb3,0xca,0xb3,0x7a,0x85,0x6c,0xe1,0x7a,0xe1,0xab,0xec,0x90,0xec,0x4d,0xd9,
0xef,0x73,0xa2,0x72,0x76,0xe4,0x0c,0xe4,0x26,0xe5,0xd6,0xe5,0x91,0xf3,0xd2,0xf2,
0x0e,0x8b,0xb4,0x44,0x39,0xa2,0xd6,0x49,0xc6,0x93,0xa6,0x4e,0xea,0x10,0xdb,0x8b,
0x4b,0xc4,0x9d,0x93,0x3d,0x27,0xaf,0x9e,0xdc,0x27,0x09,0x93,0x6c,0xcf,0x47,0xf2,
0xc7,0xe7,0x37,0x16,0x68,0xc3,0x1f,0xf9,0x36,0xa9,0x8d,0xf4,0x17,0xe9,0xc3,0x42,
0x9f,0xc2,0x8a,0xc2,0x0f,0x53,0x12,0xa7,0x1c,0x98,0xaa,0x39,0x55,0x34,0xb5,0x6d,
0x9a,0xdd,0xb4,0x45,0xd3,0x9e,0x15,0x05,0x15,0xfd,0x36,0x1d,0x9f,0xce,0x9b,0xde,
0x32,0xc3,0x74,0xc6,0xdc,0x19,0x0f,0x67,0xb2,0x66,0x6e,0x99,0x85,0xcc,0x4a,0x9f,
0xd5,0x32,0xdb,0x7c,0xf6,0xfc,0xd9,0x5d,0x73,0x82,0xe7,0xec,0x9c,0x4b,0x9d,0x9b,
0x33,0xf7,0xf7,0x62,0xa7,0xe2,0x15,0xc5,0x6f,0xe7,0x25,0xcd,0x6b,0x9a,0x6f,0x34,
0x7f,0xce,0xfc,0xc7,0xbf,0x04,0xff,0x52,0x53,0xa2,0x56,0x22,0x29,0xb9,0xb9,0xc0,
0x6b,0xc1,0xa6,0x85,0xf8,0x42,0xe1,0xc2,0xf6,0x45,0xa3,0x17,0xad,0x5b,0xf4,0xad,
0x94,0x5f,0x7a,0xa1,0xcc,0xa9,0xac,0xbc,0xec,0xcb,0x62,0xde,0xe2,0x0b,0xbf,0x8e,
0xfa,0x75,0xed,0xaf,0x03,0x4b,0x32,0x96,0xb4,0x2f,0x75,0x5b,0xba,0x71,0x19,0x71,
0x99,0x68,0xd9,0x8d,0xe5,0xbe,0xcb,0x77,0xae,0xd0,0x5c,0x51,0xb4,0xe2,0xf1,0xca,
0x88,0x95,0xf5,0xab,0x18,0xab,0x4a,0x57,0xbd,0x5d,0x3d,0x71,0xf5,0xf9,0x72,0x97,
0xf2,0x4d,0x6b,0xa8,0x6b,0xa4,0x6b,0x3a,0xd7,0x86,0xaf,0x6d,0x5c,0x67,0xb1,0x6e,
0xd9,0xba,0x2f,0xeb,0xb3,0xd6,0x5f,0xaf,0xf0,0xaf,0xa8,0xab,0x34,0xac,0x5c,0x54,
0xf9,0x7e,0x03,0x7f,0xc3,0x95,0x8d,0x7e,0x1b,0x6b,0x37,0x19,0x6d,0x2a,0xdb,0xf4,
0x69,0xb3,0x70,0xf3,0xad,0x2d,0xc1,0x5b,0xea,0xab,0xac,0xaa,0xca,0xb7,0x12,0xb7,
0x16,0x6e,0x7d,0xba,0x2d,0x71,0xdb,0xd9,0xdf,0x98,0xbf,0x55,0x6f,0x37,0xd8,0x5e,
0xb6,0xfd,0xeb,0x0e,0xd1,0x8e,0xce,0x9d,0xb1,0x3b,0x5b,0xab,0xdd,0xab,0xab,0x77,
0x19,0xee,0x5a,0x5a,0x83,0xd6,0x48,0x6b,0x7a,0x76,0xa7,0xee,0xbe,0xbc,0x27,0x60,
0x4f,0x63,0xad,0x43,0xed,0x96,0x3a,0xdd,0xba,0xb2,0xbd,0x60,0xaf,0x74,0xef,0xf3,
0x7d,0x69,0xfb,0x6e,0xec,0x0f,0xdb,0xdf,0x72,0x80,0x79,0xa0,0xf6,0xa0,0xe5,0xc1,
0xca,0x43,0xf4,0x43,0xa5,0xf5,0x48,0xfd,0xb4,0xfa,0xbe,0x86,0xac,0x86,0xce,0xc6,
0xe4,0xc6,0x8e,0xc3,0xa1,0x87,0x5b,0x9a,0xbc,0x9a,0x0e,0x1d,0x71,0x3c,0xb2,0xe3,
0xa8,0xe9,0xd1,0x8a,0x63,0x3a,0xc7,0x96,0x1e,0xa7,0x1e,0x9f,0x7f,0x7c,0xa0,0xb9,
0xa8,0xb9,0xff,0x84,0xf8,0x44,0xef,0xc9,0xcc,0x93,0x8f,0x5b,0x26,0xb6,0xdc,0x3d,
0x35,0xf6,0xd4,0xb5,0xd6,0x98,0xd6,0xf6,0xd3,0x61,0xa7,0xcf,0x9d,0x09,0x3a,0x73,
0xea,0x2c,0xeb,0x6c,0xf3,0x39,0xef,0x73,0x47,0xcf,0x7b,0x9e,0x3f,0x7c,0x81,0x79,
0xa1,0xe1,0xa2,0xdb,0xc5,0xfa,0x36,0xd7,0xb6,0x43,0xbf,0xbb,0xfe,0x7e,0xa8,0xdd,
0xad,0xbd,0xfe,0x92,0xfb,0xa5,0xc6,0xcb,0x1e,0x97,0x9b,0x3a,0xc6,0x74,0x1c,0xbf,
0xe2,0x7b,0xe5,0xe4,0xd5,0x80,0xab,0x67,0xae,0x71,0xae,0x5d,0xbc,0x1e,0x79,0xbd,
0xe3,0x46,0xc2,0x8d,0x5b,0x37,0x53,0x6f,0x76,0xde,0xe2,0xdf,0xea,0xbe,0x9d,0x7b,
0xfb,0xd5,0x9d,0xc2,0x3b,0x9f,0xef,0xce,0xb9,0x47,0xb8,0x57,0x7a,0x5f,0xe3,0x7e,
0xf9,0x03,0xc3,0x07,0x55,0x7f,0xd8,0xfe,0x51,0xd7,0xe9,0xd6,0x79,0xec,0x61,0xc0,
0xc3,0xb6,0x47,0x71,0x8f,0xee,0x3e,0xe6,0x3d,0x7e,0xf1,0x24,0xff,0xc9,0x97,0xae,
0xf9,0x4f,0x69,0x4f,0xcb,0x9f,0x99,0x3c,0xab,0xee,0x76,0xee,0x3e,0xda,0x13,0xd4,
0x73,0xf9,0xf9,0xb8,0xe7,0x5d,0x2f,0xc4,0x2f,0x3e,0xf7,0x96,0xfc,0xa9,0xf9,0x67,
0xe5,0x4b,0x9b,0x97,0x07,0xff,0xf2,0xfb,0xab,0xad,0x6f,0x6c,0x5f,0xd7,0x2b,0xc9,
0xab,0x81,0xd7,0x8b,0xdf,0xe8,0xbf,0xd9,0xf1,0xd6,0xe5,0x6d,0x4b,0x7f,0x74,0xff,
0x83,0x77,0x79,0xef,0x3e,0xbf,0x2f,0xfd,0xa0,0xff,0x61,0xe7,0x47,0xe6,0xc7,0xb3,
0x9f,0x92,0x3e,0x3d,0xfb,0x3c,0xe5,0x0b,0xe9,0xcb,0xda,0xaf,0xb6,0x5f,0x9b,0xbe,
0x85,0x7d,0xbb,0x37,0x90,0x37,0x30,0x20,0xe6,0x4a,0xb8,0xf2,0x5f,0x01,0x0c,0x56,
0x34,0x23,0x03,0x80,0xd7,0x3b,0x00,0xa0,0x25,0x03,0x40,0x87,0xe7,0x33,0xea,0x38,
0xc5,0xf9,0x4f,0x5e,0x10,0xc5,0x99,0x55,0x8e,0xc0,0x7f,0xc2,0x8a,0x33,0xa2,0xbc,
0xb8,0x01,0x50,0x0b,0xff,0xdf,0x63,0x7a,0xe1,0xdf,0xcd,0x4d,0x00,0xf6,0x6e,0x83,
0xc7,0x2f,0xa8,0xaf,0x9e,0x0a,0x40,0x34,0x0d,0x80,0x78,0x0f,0x80,0x8e,0x1e,0x3d,
0x54,0x07,0xcf,0x6a,0xf2,0x73,0xa5,0xac,0x10,0xe1,0x39,0x60,0x73,0xe0,0xd7,0xf4,
0xbc,0x74,0xf0,0x6f,0x8a,0xe2,0xcc,0xf9,0x43,0xdc,0x3f,0xb7,0x40,0xa6,0xea,0x02,
0x7e,0x6e,0xff,0x05,0xac,0x20,0x7c,0x24,0x19,0xe5,0x50,0x43,0x00,0x00,0x00,0x8a,
0x65,0x58,0x49,0x66,0x4d,0x4d,0x00,0x2a,0x00,0x00,0x00,0x08,0x00,0x04,0x01,0x1a,
0x00,0x05,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3e,0x01,0x1b,0x00,0x05,0x00,0x00,
0x00,0x01,0x00,0x00,0x00,0x46,0x01,0x28,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x02,
0x00,0x00,0x87,0x69,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x4e,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x90,0x00,0x00,
0x00,0x01,0x00,0x03,0x92,0x86,0x00,0x07,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x78,
0xa0,0x02,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x40,0xa0,0x03,0x00,0x04,
0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x41,0x53,0x43,0x49,
0x49,0x00,0x00,0x00,0x53,0x63,0x72,0x65,0x65,0x6e,0x73,0x68,0x6f,0x74,0xa8,0x62,
0x25,0xa5,0x00,0x00,0x00,0x09,0x70,0x48,0x59,0x73,0x00,0x00,0x16,0x25,0x00,0x00,
0x16,0x25,0x01,0x49,0x52,0x24,0xf0,0x00,0x00,0x01,0xd5,0x69,0x54,0x58,0x74,0x58,
0x4d,0x4c,0x3a,0x63,0x6f,0x6d,0x2e,0x61,0x64,0x6f,0x62,0x65,0x2e,0x78,0x6d,0x70,
0x00,0x00,0x00,0x00,0x00,0x3c,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,0x74,0x61,0x20,
0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x78,0x3d,0x22,0x61,0x64,0x6f,0x62,0x65,0x3a,0x6e,
0x73,0x3a,0x6d,0x65,0x74,0x61,0x2f,0x22,0x20,0x78,0x3a,0x78,0x6d,0x70,0x74,0x6b,
0x3d,0x22,0x58,0x4d,0x50,0x20,0x43,0x6f,0x72,0x65,0x20,0x36,0x2e,0x30,0x2e,0x30,
0x22,0x3e,0x0a,0x20,0x20,0x20,0x3c,0x72,0x64,0x66,0x3a,0x52,0x44,0x46,0x20,0x78,
0x6d,0x6c,0x6e,0x73,0x3a,0x72,0x64,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,
0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,
0x2f,0x30,0x32,0x2f,0x32,0x32,0x2d,0x72,0x64,0x66,0x2d,0x73,0x79,0x6e,0x74,0x61,
0x78,0x2d,0x6e,0x73,0x23,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x72,
0x64,0x66,0x3a,0x44,0x65,0x73,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x20,0x72,
0x64,0x66,0x3a,0x61,0x62,0x6f,0x75,0x74,0x3d,0x22,0x22,0x0a,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x65,0x78,
0x69,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6e,0x73,0x2e,0x61,0x64,
0x6f,0x62,0x65,0x2e,0x63,0x6f,0x6d,0x2f,0x65,0x78,0x69,0x66,0x2f,0x31,0x2e,0x30,
0x2f,0x22,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x65,0x78,
0x69,0x66,0x3a,0x50,0x69,0x78,0x65,0x6c,0x59,0x44,0x69,0x6d,0x65,0x6e,0x73,0x69,
0x6f,0x6e,0x3e,0x38,0x34,0x3c,0x2f,0x65,0x78,0x69,0x66,0x3a,0x50,0x69,0x78,0x65,
0x6c,0x59,0x44,0x69,0x6d,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x65,0x78,0x69,0x66,0x3a,0x50,0x69,0x78,0x65,
0x6c,0x58,0x44,0x69,0x6d,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x3e,0x33,0x32,0x30,0x3c,
0x2f,0x65,0x78,0x69,0x66,0x3a,0x50,0x69,0x78,0x65,0x6c,0x58,0x44,0x69,0x6d,0x65,
0x6e,0x73,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x3c,0x65,0x78,0x69,0x66,0x3a,0x55,0x73,0x65,0x72,0x43,0x6f,0x6d,0x6d,0x65,0x6e,
0x74,0x3e,0x53,0x63,0x72,0x65,0x65,0x6e,0x73,0x68,0x6f,0x74,0x3c,0x2f,0x65,0x78,
0x69,0x66,0x3a,0x55,0x73,0x65,0x72,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x3e,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,0x66,0x3a,0x44,0x65,0x73,0x63,
0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x3e,0x0a,0x20,0x20,0x20,0x3c,0x2f,0x72,0x64,
0x66,0x3a,0x52,0x44,0x46,0x3e,0x0a,0x3c,0x2f,0x78,0x3a,0x78,0x6d,0x70,0x6d,0x65,
0x74,0x61,0x3e,0x0a,0xfd,0xec,0x59,0xa6,0x00,0x00,0x00,0x1c,0x69,0x44,0x4f,0x54,
0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x28,
0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x2a,0x00,0x00,0x04,0x45,0xd9,0xf6,0x15,0x35,
0x00,0x00,0x04,0x11,0x49,0x44,0x41,0x54,0x78,0x01,0xec,0x9c,0x3d,0x72,0x13,0x31,
0x14,0x80,0xd7,0xe1,0x04,0xe9,0x18,0xe8,0xa0,0x48,0x17,0x9a,0x5c,0x81,0x09,0x0d,
0xc3,0x01,0x88,0x3b,0xae,0x60,0xb8,0x43,0x7c,0x05,0xba,0x9c,0x80,0xa1,0x21,0xc3,
0x15,0xd2,0xd8,0x50,0x90,0x02,0x8e,0x40,0x4e,0x40,0xcc,0x3c,0x67,0xde,0xce,0x8b,
0xac,0xdf,0x8c,0x9d,0x5d,0x59,0x9f,0x1b,0x69,0x77,0xb5,0xcf,0xab,0xef,0xc9,0x9f,
0x25,0x65,0xe2,0xc9,0xd3,0x67,0xcf,0x57,0x1d,0x2f,0x08,0x40,0x00,0x02,0x0d,0x12,
0x98,0x20,0xc0,0x06,0xb3,0x4e,0x97,0x21,0x00,0x81,0x35,0x01,0x04,0xc8,0x40,0x80,
0x00,0x04,0x9a,0x25,0x80,0x00,0x9b,0x4d,0x3d,0x1d,0x87,0x00,0x04,0x10,0x20,0x63,
0x00,0x02,0x10,0x68,0x96,0x00,0x02,0x6c,0x36,0xf5,0x74,0x1c,0x02,0x10,0x40,0x80,
0x8c,0x01,0x08,0x40,0xa0,0x59,0x02,0x08,0xb0,0xd9,0xd4,0xd3,0x71,0x08,0x40,0x00,
0x01,0x32,0x06,0x20,0x00,0x81,0x66,0x09,0x20,0xc0,0x66,0x53,0x4f,0xc7,0x21,0x00,
0x01,0x04,0xc8,0x18,0x80,0x00,0x04,0x9a,0x25,0x80,0x00,0x9b,0x4d,0x3d,0x1d,0x87,
0x00,0x04,0x10,0x20,0x63,0x00,0x02,0x10,0x68,0x96,0x00,0x02,0x6c,0x36,0xf5,0x74,
0x1c,0x02,0x10,0xd8,0x0b,0x01,0x1e,0x1d,0xde,0x25,0xf2,0xfa,0x86,0x84,0x42,0x00,
0x02,0x10,0xc8,0x27,0x50,0xbd,0x00,0x45,0x7e,0xb3,0x93,0x83,0x75,0x8f,0x3f,0x7c,
0xbf,0xcd,0xef,0x39,0x2d,0x21,0x00,0x81,0xe6,0x09,0x54,0x2d,0xc0,0x77,0x2f,0x27,
0xdd,0xdb,0x17,0x93,0x3e,0x89,0xd7,0x37,0x93,0x6e,0x7e,0xf5,0xaf,0x3f,0xa6,0x02,
0x01,0x08,0x40,0x20,0x46,0xa0,0x5a,0x01,0xce,0x4e,0x9e,0x74,0x47,0x87,0x9b,0xbf,
0xe5,0xfa,0xf5,0xcf,0xaa,0xfb,0xf2,0x7b,0xf3,0x7c,0x0c,0x02,0xd7,0x20,0x00,0x81,
0x36,0x09,0x54,0x2b,0x40,0xbb,0xf4,0x75,0x53,0x37,0xbf,0xba,0xed,0xd8,0x0f,0x74,
0xa9,0x70,0x0c,0x01,0x08,0xb8,0x04,0xaa,0x15,0xa0,0x74,0xc4,0x5d,0x02,0xdb,0xce,
0xb1,0x1f,0x68,0x69,0x50,0x87,0x00,0x04,0x7c,0x04,0xaa,0x16,0xa0,0x74,0x28,0xb4,
0x14,0x66,0x3f,0xd0,0x97,0x6e,0xce,0x41,0x00,0x02,0x96,0x40,0xf5,0x02,0x8c,0x2d,
0x85,0xd9,0x0f,0xb4,0xa9,0xa6,0x0e,0x01,0x08,0xb8,0x04,0x46,0x2f,0x40,0x11,0x5c,
0x6a,0x3f,0x2f,0xb6,0x14,0x66,0x3f,0xd0,0x4d,0x39,0xc7,0x10,0x80,0x80,0x12,0x18,
0xbd,0x00,0x3f,0xbf,0x3e,0xe8,0x72,0x66,0x72,0x31,0x09,0xb2,0x1f,0xa8,0xe9,0xa6,
0x84,0x00,0x04,0x2c,0x81,0x51,0x0b,0xd0,0xee,0xef,0xe5,0x48,0xd0,0xb6,0xb7,0x9d,
0x64,0x3f,0xd0,0xd2,0xa0,0x0e,0x01,0x08,0x28,0x81,0xd1,0x0a,0xd0,0x37,0xa3,0x4b,
0x89,0x8c,0xfd,0x40,0x4d,0x2b,0x25,0x04,0x20,0x90,0x43,0x60,0x94,0x02,0xf4,0xc9,
0xcf,0x76,0x26,0xb6,0xaf,0x17,0xbb,0x37,0x76,0x9f,0x8d,0x4f,0x1d,0x02,0x10,0x68,
0x83,0xc0,0x28,0x05,0x28,0xe8,0x43,0xcb,0x59,0x4d,0x4b,0x6c,0x49,0x1c,0x92,0x60,
0x6a,0x06,0xa9,0xb1,0x29,0x21,0x00,0x81,0x36,0x08,0x8c,0x56,0x80,0x82,0x3f,0x24,
0x32,0x4d,0x4d,0x4c,0x82,0x21,0x81,0x22,0x41,0xa5,0x47,0x09,0x01,0x08,0x8c,0x5a,
0x80,0x92,0x9e,0x87,0x4a,0x90,0xfd,0x40,0x06,0x37,0x04,0x20,0x90,0x22,0x30,0x7a,
0x01,0x4a,0x07,0x52,0x12,0x0c,0xcd,0xea,0x62,0xf7,0xb1,0x1f,0x98,0x1a,0x1a,0x5c,
0x87,0xc0,0xfe,0x13,0xa8,0x42,0x80,0x92,0x86,0xd8,0x8c,0x4e,0xd3,0xe4,0x93,0x5a,
0x48,0x82,0x21,0x69,0x6a,0x2c,0x4a,0x08,0x40,0x60,0xff,0x09,0x54,0x23,0x40,0x4d,
0x45,0x68,0x6f,0x4f,0xaf,0xfb,0xf6,0x05,0x43,0xf7,0x20,0x41,0xa5,0x46,0x09,0x81,
0x36,0x09,0x0c,0x2e,0xc0,0x9c,0x7f,0x75,0x73,0x53,0x13,0x9a,0xd5,0x69,0x3b,0x57,
0x82,0xb1,0xd9,0xa3,0xdb,0x56,0x63,0x50,0x6e,0x12,0x98,0x4e,0xa7,0xfd,0xc9,0x8b,
0x8b,0x8b,0xbe,0x4e,0x05,0x02,0xb5,0x12,0x18,0x5c,0x80,0x22,0x33,0x7d,0x95,0xfc,
0x90,0x69,0xa9,0x04,0x63,0xed,0x7d,0x4b,0x67,0x7d,0x26,0xca,0x3b,0x02,0xaf,0x8e,
0x8f,0xbb,0xf3,0xf3,0x79,0x8f,0xe3,0xf4,0xcd,0x69,0x5f,0xa7,0xf2,0xf8,0x04,0x24,
0x1f,0x67,0xef,0xcf,0xee,0xbd,0xf1,0xf2,0xe7,0x8f,0x4e,0xbf,0x98,0xe4,0xcb,0x6a,
0xe3,0xfa,0x62,0xd1,0xcd,0x3e,0x7d,0xbc,0x77,0x4f,0xeb,0x07,0x83,0x0b,0x50,0xfe,
0xd7,0xd7,0xbe,0x4a,0x66,0x64,0x31,0xa9,0x49,0x4c,0x77,0x89,0xcb,0x52,0xd8,0x92,
0x2e,0xab,0x23,0xc0,0x32,0x5e,0xbb,0x6a,0xed,0xe6,0xc1,0xbe,0xcf,0xd2,0x08,0x0e,
0x01,0x5a,0x32,0xe1,0xfa,0xa0,0x02,0x8c,0x09,0x2c,0x57,0x84,0xb1,0xe5,0xad,0x76,
0xdb,0xce,0xf0,0x5c,0x09,0xba,0x92,0xd4,0x7b,0x76,0x55,0xd6,0xba,0x8c,0x74,0x3f,
0x78,0xcc,0x00,0x77,0x35,0x42,0xc2,0x71,0x7d,0x52,0xb3,0xad,0x11,0xa0,0xa5,0x91,
0x57,0x1f,0x54,0x80,0xee,0xec,0xcf,0xf7,0xc8,0xb9,0x22,0x74,0xc5,0xe6,0xc6,0xd2,
0x38,0x56,0x98,0x7a,0xce,0x6d,0xbb,0xcb,0xe3,0xcb,0x6f,0x97,0xeb,0xf0,0x76,0xb0,
0xee,0xf2,0xfd,0xb6,0x15,0x1b,0x01,0x6e,0x8b,0xe4,0xc3,0xe3,0xe8,0xd8,0x09,0x45,
0xb0,0x63,0xca,0x27,0x4b,0x7b,0x3d,0x14,0xa3,0xb5,0xf3,0x83,0x09,0xd0,0x8a,0x28,
0x07,0x7a,0x8e,0xac,0x62,0x33,0x4a,0x79,0x0f,0x8d,0x21,0xed,0x7e,0xfd,0x5d,0x25,
0x7f,0x67,0x30,0xe7,0xb9,0x4a,0xdb,0xe8,0x20,0xae,0x6d,0x30,0x22,0xc0,0xd2,0x4c,
0x6f,0xb7,0xbd,0xcb,0xdf,0x46,0x97,0xb1,0x24,0xfb,0x7f,0x52,0x2e,0x96,0xcb,0xf5,
0x25,0x04,0x68,0x09,0x85,0xeb,0x83,0x09,0x50,0x1f,0x29,0x25,0x2d,0x6d,0xa7,0xa5,
0x4a,0x4c,0x8f,0xdd,0x32,0x15,0x2f,0x75,0xbf,0x1b,0x6f,0xdb,0xc7,0x08,0x70,0xdb,
0x44,0xdb,0x88,0xe7,0x13,0x9a,0xf4,0x3c,0xb4,0x15,0xe1,0x6b,0x5f,0xdb,0x97,0xee,
0x63,0x64,0x76,0x70,0x01,0x6a,0x27,0x53,0xe2,0xd2,0x76,0x5a,0x8a,0xc8,0xe4,0xe5,
0xfb,0xcb,0x71,0x2c,0x16,0x02,0x54,0x82,0x65,0xa5,0x3b,0x03,0x09,0x7d,0xf0,0xca,
0xa2,0xd2,0x3a,0x97,0x40,0xa9,0xd0,0x4a,0xdb,0xe7,0x3e,0xc7,0xbe,0xb5,0x1b,0x8d,
0x00,0x15,0x6c,0x4c,0x5e,0xda,0xc6,0x96,0x21,0x11,0xfa,0x96,0xd8,0x43,0xcb,0x4f,
0x9e,0x9b,0x19,0xa0,0xcd,0x1e,0xf5,0x5c,0x02,0xa5,0x42,0x2b,0x6d,0x9f,0xfb,0x1c,
0xfb,0xd6,0xee,0x3f,0x00,0x00,0x00,0xff,0xff,0xd2,0xac,0x71,0x19,0x00,0x00,0x0b,
0xef,0x49,0x44,0x41,0x54,0xed,0x5c,0x4b,0x8e,0x1d,0x45,0x10,0x7c,0x63,0x4e,0x60,
0x56,0x08,0x76,0x20,0x01,0x0b,0xb0,0x11,0xf2,0x15,0x10,0x6c,0x10,0x07,0xc0,0xde,
0x71,0x05,0x9b,0x33,0x60,0x5f,0x81,0x9d,0xcd,0x01,0x80,0x0d,0x88,0x2b,0x20,0x84,
0x0d,0x0b,0x40,0x32,0x47,0xc0,0x27,0x00,0x43,0x3c,0x3b,0xc6,0x31,0x41,0x66,0x7d,
0x7a,0x7a,0x5e,0xbf,0x91,0xb2,0x16,0x53,0xd5,0x55,0x99,0x91,0x99,0x91,0x59,0xe9,
0x7e,0xf3,0xf1,0xc9,0x2b,0xaf,0xbe,0xf6,0x74,0x77,0x84,0xe3,0x93,0x37,0x4e,0x76,
0x1f,0xbf,0x7e,0x32,0xe5,0xd9,0xb7,0x7f,0x3e,0xdd,0x7d,0xfd,0xf8,0x6c,0x38,0xb7,
0x6f,0xbc,0xb4,0x7b,0xeb,0xea,0xd3,0x5d,0x74,0x36,0x05,0x6e,0xc2,0xd7,0xaf,0x5d,
0xdb,0xef,0x5c,0xbb,0x7e,0xfd,0xcc,0xc9,0xa3,0x87,0x0f,0x77,0x0f,0x1f,0x3d,0x3a,
0xb3,0xa7,0x0f,0xdf,0x7f,0xf7,0xfd,0xfe,0x11,0x72,0xb7,0x3f,0xbf,0xa3,0x47,0xcd,
0x35,0xed,0x41,0x08,0x36,0xa1,0x8f,0xd1,0xb2,0xb5,0x17,0x68,0x7c,0x21,0x26,0xf1,
0x5a,0x58,0x90,0xbd,0x7b,0xf7,0xde,0x29,0xda,0x87,0x1f,0x7d,0x78,0xba,0xce,0x16,
0xc4,0xc7,0x79,0x0b,0xdb,0xf5,0xa1,0x07,0x9f,0xae,0xbd,0xf3,0xee,0xe9,0xd1,0xa3,
0x5f,0x7f,0xd9,0xaf,0xef,0xdf,0xbf,0x7f,0xba,0xa7,0x8b,0x5b,0xb7,0x6e,0xe9,0xe3,
0x7e,0xdd,0xcb,0x05,0x84,0x66,0xf4,0x18,0xcf,0xcd,0x4f,0x6f,0xee,0xe8,0xcf,0x88,
0x0d,0xd8,0x61,0x4c,0x58,0x73,0xa8,0x2e,0xb1,0xb5,0x9e,0xf4,0x1c,0x7e,0xc2,0xae,
0x0e,0x9c,0x3f,0xf8,0xea,0x81,0x6e,0x9d,0xf2,0x9c,0xc9,0xcf,0xd6,0xdc,0x21,0xf2,
0xe0,0x39,0xd0,0xb8,0xcf,0x04,0xf7,0xfc,0xc1,0xe5,0x29,0x93,0xd5,0x06,0xcf,0xa3,
0xf9,0xe4,0x58,0x1b,0x20,0x9d,0x45,0x23,0xc4,0x98,0x69,0x86,0xde,0xec,0x80,0xe1,
0x8d,0x91,0xf8,0xb3,0x33,0x0a,0x15,0x85,0xa8,0x85,0x1a,0x61,0xa0,0x30,0xa3,0x44,
0x6a,0x03,0xe4,0x25,0x52,0x7d,0xd7,0x41,0xb2,0xd1,0x08,0x5a,0xf6,0x78,0x09,0x46,
0x0a,0xa0,0xe7,0x7f,0x86,0x05,0xbd,0x99,0x06,0xa8,0x17,0x10,0x31,0x8d,0x5c,0xbc,
0x9e,0x6f,0xe4,0x09,0x3e,0x7a,0xac,0xf7,0xbe,0xb8,0xfb,0x3f,0x8e,0x7a,0x76,0xd5,
0x47,0x62,0x63,0x76,0xfc,0x11,0xbf,0xa0,0xe3,0xb9,0x53,0xcc,0xc8,0x16,0x75,0x5a,
0xf5,0xc4,0x18,0x22,0x7d,0xc5,0xc7,0x9a,0xb2,0x58,0x47,0xf2,0x7a,0x0e,0x99,0x6c,
0x8c,0xc4,0x0b,0x5d,0xe7,0x09,0x7b,0xb3,0x79,0xf0,0xba,0x02,0x46,0xcb,0xcf,0x28,
0x2e,0xe8,0x44,0xbe,0x60,0xbf,0x37,0x8e,0xbe,0x01,0x32,0x80,0x35,0x1a,0x21,0xb1,
0x96,0xce,0x19,0xf9,0x48,0x58,0xd6,0xa0,0xee,0xdc,0xb9,0x7d,0xfa,0xaf,0x32,0xec,
0xb2,0x01,0x46,0x3e,0x78,0x12,0xa3,0x62,0x8a,0xf4,0xb8,0xe7,0xfa,0xdc,0xe7,0x9c,
0xf9,0xcf,0x73,0x9d,0x1d,0xcb,0x0b,0xb5,0xf5,0x06,0xa8,0x76,0x5a,0xc5,0xac,0xf6,
0x54,0x47,0xf7,0x5b,0x6b,0xe5,0xd6,0xfd,0xa3,0x9e,0xca,0x70,0x8f,0x73,0x66,0x53,
0x63,0xcb,0x64,0x88,0xe1,0xb3,0xf3,0xc6,0xf3,0x59,0x1c,0xea,0x71,0x06,0xae,0xbf,
0x01,0xf2,0x8c,0xb3,0x72,0x1d,0xd9,0xd3,0x73,0xea,0xf8,0x1c,0xe9,0xb9,0x8c,0x3f,
0x2b,0xc7,0x59,0x1e,0x94,0x53,0xd5,0x8f,0xec,0xb5,0xfc,0x8c,0xe4,0x81,0x97,0xe1,
0xab,0xad,0x68,0x7d,0x69,0x1a,0xa0,0x3a,0x3f,0xf3,0xf1,0xd8,0xdf,0x06,0x15,0x67,
0x66,0xed,0x89,0x45,0x92,0x50,0x94,0xfe,0xd1,0x0e,0x09,0xc2,0x40,0xb1,0x46,0x97,
0x21,0x6b,0x80,0x2e,0xeb,0xf6,0x50,0x64,0x18,0x6a,0x0f,0x32,0x68,0xbc,0x7a,0x31,
0xb4,0x18,0xf7,0x0a,0xcf,0xbf,0x78,0xe1,0xc0,0x7f,0x0c,0xd8,0x65,0xf3,0xf6,0x37,
0x4d,0xc5,0x72,0x7f,0xb2,0x82,0x53,0x3b,0xad,0x42,0x7e,0xee,0xd6,0x7e,0x52,0x1d,
0xdd,0xef,0xad,0x1d,0x3f,0xe2,0x56,0x63,0x70,0xbc,0x48,0x5e,0xf3,0xb0,0xd4,0x2f,
0xc5,0xa0,0xcd,0xa5,0x58,0xd0,0x47,0x0c,0x9e,0x67,0xe2,0xea,0xac,0x7c,0x44,0xf6,
0xf4,0x5c,0xf5,0xb8,0xf6,0x1c,0x73,0xbf,0x37,0x3b,0x6e,0xc4,0x6b,0x96,0x87,0x48,
0x16,0xf6,0x32,0xf9,0xe8,0xa5,0xc0,0xed,0xf7,0xfc,0xd5,0xf3,0x83,0x37,0xc0,0x2f,
0x3f,0xb8,0xb2,0xff,0x7e,0x1c,0x9c,0xf8,0xed,0xaf,0xa7,0xbb,0xdf,0x9f,0xa8,0x3b,
0x73,0xeb,0x91,0x46,0xf8,0xd9,0x0f,0xff,0xcc,0x81,0x26,0xd2,0x5a,0x50,0x51,0x81,
0xbb,0x1a,0x8a,0x49,0x9b,0x15,0xcf,0x35,0xe1,0x59,0x13,0xa1,0x2c,0x6d,0x8e,0xca,
0x51,0xcf,0xe5,0x89,0xc3,0xf3,0x96,0xff,0x94,0xf5,0xa2,0xf2,0xcb,0xe1,0x36,0x80,
0x4d,0x5d,0xac,0x5d,0x1f,0x7b,0xd9,0x50,0x4e,0x5c,0x06,0x38,0x6c,0xd0,0x7e,0x86,
0x67,0x8d,0x65,0xe6,0x72,0xa8,0xaf,0x8a,0xab,0x78,0x99,0x5f,0xf0,0x89,0xdf,0xbe,
0xd0,0x7f,0x7c,0x14,0xc7,0x2f,0x70,0x66,0x4f,0x75,0xa2,0x35,0x71,0x32,0x7d,0xf8,
0xc2,0x01,0x9f,0xf8,0xad,0x81,0x48,0xbe,0x97,0x93,0x88,0xbf,0x53,0xec,0x73,0xe6,
0x81,0x71,0x10,0x0f,0xb3,0xd7,0x94,0x9e,0x65,0xbe,0x46,0x39,0xd1,0x9c,0x29,0xc6,
0xc8,0xfa,0xa0,0x0d,0xf0,0xad,0xab,0xbb,0xdd,0xed,0x1b,0x57,0x42,0xbf,0xf0,0xa6,
0x86,0xb1,0xa4,0x29,0x66,0x8d,0x70,0xad,0xb7,0x3f,0xf8,0xa5,0xc5,0x11,0x25,0x13,
0x32,0x23,0x43,0x13,0x18,0x35,0x11,0xc7,0xc8,0x1a,0xa9,0xcb,0xb5,0xfc,0x53,0x9b,
0x23,0xc5,0x82,0xcb,0xc3,0x8b,0x44,0x3b,0x5e,0xac,0xee,0xbb,0x5e,0xb8,0xac,0x78,
0x89,0xa5,0xb3,0xea,0xe9,0xbe,0x63,0xc0,0x3e,0x9a,0x4d,0xd4,0x0c,0xe9,0x8b,0xfb,
0x48,0xbc,0x28,0x5f,0x99,0x5d,0x62,0x65,0xe7,0xa3,0x58,0xee,0x7f,0x86,0x07,0x1f,
0x91,0x13,0xc8,0xe3,0x1f,0x4c,0x8d,0x53,0x6d,0x45,0xfa,0x6e,0x83,0xf1,0x62,0x5e,
0x43,0x1e,0x38,0x6e,0x43,0xfd,0xc3,0xb9,0x0e,0x72,0x17,0xe5,0xc1,0x71,0xa0,0x17,
0xf9,0x48,0xbc,0x19,0x79,0xe5,0x89,0xfa,0xa3,0xf3,0x41,0x1b,0x60,0xd6,0xa8,0x22,
0x67,0x7f,0x7f,0x72,0xb2,0xfb,0xe3,0xc9,0xb3,0xb7,0xb7,0xd1,0xa6,0xe8,0xf8,0x6b,
0xbd,0xfd,0xc1,0x3f,0x6d,0x22,0x4c,0x74,0xe4,0x77,0x6f,0x6f,0x2d,0x1c,0xb7,0xa3,
0xc5,0xa4,0x05,0xa1,0xfb,0x23,0xcd,0xcf,0x71,0xf9,0xec,0x45,0xad,0x1c,0xa8,0x8d,
0xa8,0x70,0x89,0x11,0xcd,0xda,0xb8,0xf5,0x5c,0xf1,0xb9,0xef,0x3e,0x70,0x5f,0xe3,
0x8d,0xf0,0xf4,0x9c,0x3a,0x9a,0x07,0xee,0x29,0x3f,0xbd,0x73,0xea,0x70,0xee,0xd9,
0x55,0x8e,0xa8,0x83,0x59,0x6d,0xea,0x3e,0x62,0xd5,0x4f,0x10,0x91,0x7e,0x8b,0xeb,
0x35,0xe4,0xe1,0xcf,0x92,0x3c,0x64,0x79,0x72,0xac,0x88,0x63,0xe5,0xc0,0xf3,0x16,
0xc5,0x94,0xf9,0xa8,0x38,0xad,0xf5,0xd1,0x36,0xc0,0xc8,0xe9,0xd1,0xa6,0x88,0x46,
0x88,0xb1,0xd6,0x4f,0x7e,0x81,0xa5,0x05,0xee,0x89,0xc1,0xf9,0xe8,0xd0,0xa4,0x7b,
0x41,0x8c,0x62,0x44,0x72,0x5a,0x1c,0x7a,0xa9,0xd4,0x6f,0xdd,0x8f,0x30,0x5a,0x7b,
0x5e,0xd4,0xf4,0x5d,0xed,0x42,0x9f,0xfb,0x2d,0x2c,0x3d,0x53,0x3e,0xb8,0xdf,0xf2,
0x53,0xe3,0x89,0xe4,0xa3,0x73,0x6f,0x14,0xee,0x33,0x71,0xd4,0xf7,0xc8,0x2f,0x3d,
0xa7,0x0e,0x67,0xe7,0x07,0xfb,0x5a,0x27,0x23,0x36,0x89,0x15,0xcd,0x91,0xbe,0xc7,
0xa5,0x7a,0xb3,0xf2,0x51,0xbc,0x6b,0xe7,0x41,0xf9,0x80,0xaf,0x91,0x4d,0x8d,0xc1,
0xe3,0x8b,0x72,0xdb,0xf2,0x51,0xb1,0xb2,0xf5,0x41,0x1b,0x20,0x7f,0x27,0x2f,0x73,
0x66,0xc9,0xfe,0x68,0x53,0x5c,0x82,0xad,0x3a,0x4a,0xbe,0x27,0x46,0xe5,0x7a,0x6b,
0x4d,0x7a,0xeb,0x42,0xf5,0x70,0xfc,0x5c,0x0b,0x5e,0x8b,0x62,0x2d,0x7b,0x7e,0xc1,
0xe1,0xbb,0xda,0xa4,0x3f,0xb3,0x31,0xa9,0x7f,0xc4,0xf0,0x8b,0xc2,0x7d,0xcc,0x9a,
0x07,0xee,0x6b,0x3e,0xdc,0x4f,0xca,0x28,0x66,0xe4,0xb7,0x72,0x16,0x61,0xe8,0x39,
0x31,0x7d,0xf6,0x58,0x54,0x27,0xb2,0x09,0xfd,0x51,0xbe,0x22,0x7d,0x8d,0xdb,0x7d,
0x99,0x95,0x77,0xdf,0x81,0xa7,0xfe,0x3b,0xfe,0x92,0x3c,0x28,0x5e,0xe4,0x9f,0xdb,
0xf0,0xf8,0x66,0x7d,0x74,0xbc,0xe8,0xf9,0xa0,0x0d,0x10,0x3f,0x00,0x39,0xc4,0x40,
0x53,0xfc,0xe6,0xf1,0xdf,0xe7,0xfa,0x01,0x8b,0xfb,0x19,0x5d,0x0a,0x24,0x88,0xdf,
0x0c,0x87,0x3c,0x9e,0xf5,0x63,0x8b,0x63,0xe0,0x59,0x93,0x38,0x5a,0xfc,0xb0,0x8d,
0x11,0x7d,0xff,0x6b,0x7f,0x80,0x33,0xf9,0x5d,0x41,0x2d,0xb4,0x25,0xf6,0x88,0xa9,
0xb3,0xc7,0x0f,0x1b,0xd1,0x0f,0x00,0xbc,0x68,0x15,0xc3,0xd7,0x8e,0xc9,0x73,0x6d,
0x56,0xdc,0xe3,0xdc,0xbb,0x78,0x90,0x8b,0x64,0x14,0x53,0x39,0x21,0xae,0x72,0x36,
0x72,0x39,0xa9,0xd7,0x9a,0x95,0x8b,0x08,0x53,0xcf,0x5b,0x38,0x38,0x9b,0xd5,0x9f,
0x95,0x8f,0x38,0x51,0xce,0xdc,0xbf,0x88,0x63,0x8d,0x27,0xca,0xad,0x9e,0x47,0xfa,
0xb0,0xa7,0xbf,0x6b,0x0a,0x9b,0xf4,0x21,0x8a,0x07,0xe7,0xa3,0x77,0x08,0xb2,0xd1,
0x38,0x77,0x03,0x7c,0xff,0xbd,0xb3,0x7f,0x09,0x41,0x23,0x3f,0xfd,0xfc,0xe2,0xa7,
0x53,0xdc,0xc3,0x0f,0x41,0xde,0x7e,0xf9,0xd9,0xc7,0xd3,0x37,0xaf,0x5e,0xd9,0xff,
0x85,0x06,0xcf,0xd6,0x9e,0xef,0xfd,0xf8,0xcf,0x99,0x06,0x38,0xe3,0x67,0xe6,0x4b,
0x96,0x84,0x48,0x5e,0x2f,0x94,0x9e,0x6b,0xa1,0xf5,0x92,0x87,0x22,0xca,0xbe,0xf1,
0xaf,0x98,0xbe,0xa6,0x6d,0x2f,0xc2,0x9e,0x3d,0xc7,0xd1,0x67,0xc7,0xd2,0x33,0x6f,
0x86,0x2c,0x5a,0x95,0x89,0xd6,0x19,0x66,0x4b,0x3f,0xba,0x38,0x7a,0xb1,0x60,0x27,
0xc2,0xa5,0x4c,0x74,0x06,0x1d,0xe5,0x66,0x26,0xcf,0xd0,0xcd,0x06,0x6d,0xe2,0x3c,
0xc2,0xd4,0xf3,0x0c,0x83,0xfb,0xb3,0xfa,0x33,0xf2,0x19,0x27,0xe7,0xcd,0x43,0x94,
0x2b,0xf2,0xac,0xf7,0x00,0x31,0xb2,0x66,0x5d,0x87,0x1c,0x45,0xf1,0x50,0x87,0x1c,
0x2d,0x99,0x0f,0xda,0x00,0x33,0x07,0xb5,0x31,0x42,0x66,0x8d,0xe6,0xe8,0x3f,0x00,
0x59,0xa3,0x01,0xd2,0x7f,0x24,0x03,0x23,0x7a,0x03,0xa2,0x0c,0x67,0x4f,0x92,0x26,
0x9e,0xc5,0x40,0x59,0x9d,0xa3,0x84,0xe3,0x1c,0x05,0x91,0x0d,0xbe,0x21,0xd2,0xa6,
0x16,0x36,0x0b,0x29,0xd3,0xed,0xed,0x2b,0x96,0xca,0xf2,0x92,0xa8,0xbf,0xa3,0xb6,
0x7a,0x98,0x6a,0x87,0x6b,0xb5,0xc3,0xbd,0xc8,0x9e,0xf2,0x4c,0x39,0xf8,0x0a,0x8e,
0x3c,0x6f,0xe4,0x8b,0x72,0x91,0x0d,0x9e,0xcd,0xcc,0xea,0x57,0x84,0xa9,0xe7,0x3d,
0xdc,0x59,0xfd,0x19,0xf9,0x8b,0xca,0x83,0x37,0x33,0xc4,0xd8,0xcb,0x81,0xeb,0x90,
0xa3,0x28,0x9f,0x9e,0xb7,0x1e,0x87,0xd1,0xf9,0x51,0x34,0xc0,0xc8,0x31,0xee,0x2d,
0x6d,0x8e,0x17,0xd9,0x00,0xe9,0x9b,0xce,0x28,0x22,0x0c,0x36,0x21,0xbd,0x64,0x6c,
0x12,0x38,0xd7,0x44,0xb6,0x1a,0xa0,0xca,0xa1,0x08,0x90,0xec,0xd6,0xc7,0x6b,0x2d,
0x62,0x2d,0x0c,0xc5,0x69,0xd9,0x83,0x6f,0xad,0xa1,0xf8,0x94,0xd3,0xb8,0xb0,0xa7,
0xc5,0xab,0x3e,0x50,0xde,0xe7,0x08,0x13,0x32,0x8e,0xab,0x7a,0xa3,0x17,0x5b,0x7d,
0xa1,0x3e,0x70,0xfd,0x23,0x16,0xce,0xdc,0xd7,0xc8,0x06,0x31,0x66,0x66,0x5e,0x5e,
0xe8,0x44,0x98,0x7a,0xde,0xc3,0x9d,0xd5,0x9f,0x91,0x5f,0x92,0x87,0x88,0x5f,0x8f,
0x27,0xc2,0x05,0xd7,0xfa,0xed,0x1a,0xc6,0xcd,0xda,0x8c,0x74,0xb2,0xbc,0x51,0x87,
0x18,0x4b,0xe6,0xa3,0x6f,0x80,0xad,0xa0,0xb4,0x39,0xe2,0xad,0x11,0x03,0xff,0xf1,
0x01,0xc6,0xa1,0x1b,0xe0,0xde,0xa8,0x7c,0xd1,0x02,0xd4,0xc2,0x18,0x69,0x48,0xaa,
0x0b,0xc8,0x91,0x44,0xab,0x8e,0x5e,0x68,0x2d,0xd4,0x11,0x1c,0x09,0xe1,0xcc,0xd2,
0x0b,0x33,0x6a,0x52,0x23,0x32,0x67,0x40,0xff,0x7b,0x50,0x3e,0x78,0x16,0x61,0xf3,
0x4c,0xe3,0xe1,0x9e,0xf2,0xcb,0x3d,0xf7,0x85,0xfb,0xd1,0xec,0xbc,0x28,0x97,0x94,
0x8f,0x6c,0xf0,0x6c,0x64,0x3e,0x2f,0xe6,0xac,0xfe,0xac,0xfc,0x45,0xe5,0xc1,0x71,
0xc1,0x23,0x5f,0x12,0xc8,0x9b,0xd6,0x2b,0xf6,0xa2,0x1c,0x53,0x96,0xb3,0xeb,0x70,
0x7f,0x76,0xbe,0xd4,0x0d,0x70,0x26,0xd8,0x35,0x3f,0x02,0x8f,0xd8,0xf5,0x0b,0xc8,
0x4b,0xa6,0x05,0xc1,0x3d,0xc7,0xd3,0xe2,0x1d,0x4d,0x74,0xa6,0xa3,0xc5,0xd4,0x6a,
0x2c,0xee,0x83,0x3f,0x67,0xf1,0xb8,0x9c,0xfa,0x31,0xd2,0x34,0x94,0x0f,0x62,0xb5,
0xf4,0x22,0xf9,0x8c,0x23,0x8d,0x9d,0xd8,0x3e,0x47,0xba,0x1e,0x2b,0x74,0x5a,0x3e,
0x39,0x66,0xf4,0xac,0xbc,0xf0,0x7c,0x06,0x73,0x56,0x7f,0x56,0x3e,0xe2,0xb5,0xe5,
0x5f,0x24,0x1f,0x71,0xb9,0x24,0x07,0x4b,0x74,0xc8,0xe9,0xec,0x5c,0x0d,0x30,0xf8,
0x61,0xcd,0x2c,0x89,0x99,0xbc,0x16,0x09,0x9b,0x8f,0xee,0x65,0x0d,0x50,0x0b,0x20,
0x2a,0xaa,0xc8,0x9e,0x16,0xbc,0xea,0xe8,0x7e,0xab,0xa0,0x23,0x4c,0xdd,0xf3,0xa6,
0x90,0xf9,0x0e,0x1d,0x8d,0x51,0x7d,0x51,0x3c,0xae,0x35,0x56,0xee,0x65,0x7e,0x6a,
0x2c,0x94,0xc5,0x9c,0xd9,0xc8,0xe4,0x55,0x37,0x8b,0x43,0x63,0xa0,0x3c,0x73,0xc8,
0xe7,0x99,0x39,0xf2,0x25,0x8b,0x33,0xc2,0x9d,0xd5,0x9f,0x95,0xbf,0xa8,0x3c,0x78,
0xdd,0x44,0xb1,0x79,0x0e,0x96,0xe8,0x44,0xb8,0x23,0x7b,0x07,0x6b,0x80,0x87,0xfa,
0x15,0x18,0x06,0xbd,0xf5,0x47,0x60,0x4f,0x22,0x93,0xac,0x17,0x8b,0x7b,0xf4,0x99,
0xb3,0x16,0xe3,0xe8,0x25,0x51,0x5c,0x6f,0x08,0x7a,0x96,0xd9,0xa4,0x6d,0xcc,0xf0,
0xdd,0xbf,0xdf,0x98,0xc5,0xa3,0x7a,0x5c,0xbb,0x6c,0xab,0x71,0xb8,0x2c,0x31,0x10,
0x03,0x62,0xa7,0x1f,0x90,0xcb,0x7e,0x22,0x9e,0xc5,0x94,0x61,0xab,0x0d,0xff,0x93,
0x3f,0x9e,0x69,0x0e,0xb8,0xd7,0xcb,0x05,0x74,0xf4,0xef,0x71,0xa9,0x87,0x79,0xb6,
0x21,0xa9,0xee,0x12,0xfd,0xc8,0x1e,0x70,0xbc,0x36,0x68,0x27,0xe3,0x6a,0x8d,0x3c,
0x68,0xfd,0xd1,0x1e,0xe7,0xcc,0x9f,0x88,0x7f,0xea,0xf4,0xf2,0x40,0xb9,0x91,0xb9,
0x1a,0xe0,0xe0,0x1b,0x20,0x0b,0x2a,0x4b,0x98,0x93,0xad,0x09,0x54,0x1d,0xdd,0xcf,
0x1a,0x83,0x17,0x63,0x26,0x47,0x9b,0xf4,0x8d,0xcf,0x6a,0x0f,0x7b,0x7e,0xde,0xc2,
0xa3,0x6d,0xc7,0xe0,0x3e,0x6d,0x64,0x4d,0x87,0xe7,0x1a,0x67,0xaf,0x60,0x5b,0x17,
0x84,0x78,0xd9,0xec,0x7e,0xba,0x9c,0xfa,0xe1,0x67,0x2d,0x5d,0x8f,0x97,0xba,0x88,
0x45,0x9b,0x1c,0xe4,0x30,0xb4,0x39,0x47,0xb8,0x9e,0x03,0xe8,0xf4,0x78,0x81,0x0c,
0xc7,0xac,0x7e,0xe6,0x3f,0xf1,0x3c,0x0e,0xec,0x5f,0x54,0x1e,0x96,0xe4,0x60,0x89,
0x0e,0x63,0x9b,0x99,0xab,0x01,0x0e,0x34,0xc0,0xa8,0xf8,0x50,0xe4,0x28,0x22,0x0c,
0x7d,0x4b,0xc1,0xb3,0x5e,0x06,0x3c,0x6b,0xc3,0x71,0xac,0xe8,0xb2,0x40,0xc7,0x0b,
0x00,0x72,0x18,0xb4,0x89,0xb5,0xdb,0xc1,0x1e,0x46,0x84,0x99,0xe1,0xf1,0x0d,0x08,
0x17,0xc6,0x7f,0x45,0x44,0xfd,0xf6,0x0b,0xd5,0x6b,0x80,0x2e,0xaf,0x58,0xcf,0xbc,
0x7c,0xf1,0xd5,0x39,0x79,0x71,0xd2,0x5f,0xcd,0xfa,0xa1,0x88,0x3d,0x5d,0xe7,0x4c,
0x75,0x7b,0x6b,0x6f,0x6e,0x51,0x8c,0x2e,0xd3,0xc2,0x5c,0xa2,0xdf,0xf3,0xdf,0xed,
0x7b,0xce,0x5a,0xfe,0xf8,0x59,0x8b,0xcb,0x16,0x6e,0xa6,0xd7,0xd2,0x69,0xd5,0x92,
0xfb,0xd5,0x7b,0xae,0x06,0x38,0xd0,0x00,0x41,0x62,0x54,0x80,0x3d,0x72,0x71,0x1e,
0x25,0x2b,0x2b,0x4c,0x95,0x6d,0x15,0x40,0xcf,0x6e,0xd4,0x00,0xa1,0x33,0x13,0x83,
0x63,0xb8,0x3f,0x59,0xe1,0xaa,0x6f,0x6a,0xcf,0x2f,0x9b,0xca,0xcd,0xfa,0x46,0x5d,
0xf7,0x91,0xfb,0x3e,0x47,0x6f,0x36,0xa3,0xba,0x59,0xae,0xdc,0x86,0x3f,0x3b,0xbe,
0x72,0x41,0xd9,0x1e,0x27,0x94,0xc3,0xbc,0x44,0xdf,0x73,0xa6,0x78,0x58,0x47,0xf6,
0x23,0x3b,0xae,0xe7,0xcf,0x1e,0xab,0x9f,0xe3,0x79,0x49,0x0e,0x32,0xee,0x47,0x6a,
0x2f,0xf2,0x21,0xda,0xab,0x06,0x38,0xd8,0x00,0x49,0xde,0x48,0x81,0xa0,0xb0,0x50,
0x14,0x7c,0x33,0xa4,0xae,0xce,0x11,0x8e,0x36,0x40,0xc8,0xa2,0x80,0xfd,0xad,0x4c,
0x31,0xb0,0x66,0x11,0x2b,0x5e,0xab,0x20,0x55,0xce,0xb1,0xf8,0x1c,0xe9,0xfb,0x65,
0x1a,0x2d,0x42,0x2d,0xe2,0x08,0x97,0x36,0x31,0x8f,0xf8,0x06,0xb9,0x11,0x7e,0x21,
0xc7,0xa1,0x3e,0x70,0xcf,0xb9,0xe6,0x7e,0x34,0x8f,0xfa,0x05,0xdd,0xcc,0xb7,0x08,
0x83,0xb9,0x8b,0x6c,0xfa,0xde,0x52,0x7d,0xe4,0x2d,0xfb,0xa4,0x90,0xd9,0x8f,0x6c,
0xb9,0x3f,0x78,0xce,0x62,0x8d,0x64,0xa3,0x1c,0xf4,0xea,0x61,0x89,0x4e,0x64,0xbb,
0xb5,0x57,0x0d,0x70,0xb2,0x01,0x2a,0x99,0x28,0x2e,0x0c,0x34,0x29,0x14,0x03,0x46,
0xab,0xe9,0xed,0x05,0xec,0x0b,0x9b,0x1c,0xb6,0xf9,0x71,0xd4,0x44,0xf6,0x8f,0xb4,
0xa5,0x67,0x6a,0x4b,0x71,0xe0,0x8b,0x9e,0xa9,0x8e,0xae,0x51,0xe8,0x3a,0x7a,0x7a,
0xea,0xc3,0x08,0x3e,0xb1,0x67,0xf5,0xe8,0x17,0x2e,0x2e,0x07,0xf9,0xc5,0xa5,0x99,
0xb1,0x0d,0x7d,0xe5,0x86,0x78,0x2d,0xae,0x29,0xe3,0x33,0xfc,0x8a,0x7e,0x89,0x77,
0xc4,0xb7,0xc8,0x87,0x1e,0xdf,0x6a,0x7f,0x0b,0xfd,0x35,0xf3,0x10,0xf9,0xdf,0xcb,
0xc1,0x12,0x1d,0xe5,0x6c,0x64,0x7d,0xb0,0x06,0x38,0xe2,0xcc,0x45,0xca,0x1c,0xfa,
0xf7,0x00,0x2f,0x32,0x96,0xc2,0x2e,0x06,0x8a,0x81,0x75,0x18,0xa8,0x06,0x78,0x8e,
0x37,0xc0,0x75,0x52,0x50,0x28,0xc5,0x40,0x31,0xb0,0x15,0x03,0xd5,0x00,0xab,0x01,
0x6e,0x55,0x7b,0x65,0xb7,0x18,0xd8,0x9c,0x81,0x6a,0x80,0xd5,0x00,0x37,0x2f,0xc2,
0x72,0xa0,0x18,0xd8,0x8a,0x81,0x0b,0x6b,0x80,0x5b,0x05,0x34,0x6b,0x37,0xfa,0x7f,
0x0b,0x67,0x31,0x4a,0xbe,0x18,0x28,0x06,0x2e,0x27,0x03,0xd5,0x00,0xeb,0x0d,0xf0,
0x72,0x56,0x6e,0x79,0x5d,0x0c,0xac,0xc0,0x40,0x35,0xc0,0x6a,0x80,0x2b,0x94,0x51,
0x41,0x14,0x03,0x97,0x93,0x81,0x6a,0x80,0xd5,0x00,0x2f,0x67,0xe5,0x96,0xd7,0xc5,
0xc0,0x0a,0x0c,0x54,0x03,0xac,0x06,0xb8,0x42,0x19,0x15,0x44,0x31,0x70,0x39,0x19,
0xa8,0x06,0x58,0x0d,0xf0,0x72,0x56,0x6e,0x79,0x5d,0x0c,0xac,0xc0,0xc0,0xb9,0x1b,
0xe0,0x0a,0x3e,0x14,0x44,0x31,0x50,0x0c,0x14,0x03,0x9b,0x30,0x50,0x0d,0x70,0x13,
0xda,0xcb,0x68,0x31,0x50,0x0c,0x1c,0x03,0x03,0xd5,0x00,0x8f,0x21,0x0b,0xe5,0x43,
0x31,0x50,0x0c,0x6c,0xc2,0x40,0x35,0xc0,0x4d,0x68,0x2f,0xa3,0xc5,0x40,0x31,0x70,
0x0c,0x0c,0x54,0x03,0x3c,0x86,0x2c,0x94,0x0f,0xc5,0x40,0x31,0xb0,0x09,0x03,0xd5,
0x00,0x37,0xa1,0xbd,0x8c,0x16,0x03,0xc5,0xc0,0x31,0x30,0x50,0x0d,0xf0,0x18,0xb2,
0x50,0x3e,0x14,0x03,0xc5,0xc0,0x26,0x0c,0x54,0x03,0xdc,0x84,0xf6,0x32,0x5a,0x0c,
0x14,0x03,0xc7,0xc0,0x40,0x35,0xc0,0x63,0xc8,0x42,0xf9,0x50,0x0c,0x14,0x03,0x9b,
0x30,0x50,0x0d,0x70,0x13,0xda,0xcb,0x68,0x31,0x50,0x0c,0x1c,0x03,0x03,0xff,0x02,
0xce,0xc9,0x25,0xf9,0x1d,0x38,0x8a,0xd5,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,
0xae,0x42,0x60,0x82};
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,300 +0,0 @@
// Created with image_to_c
// https://github.com/bitbank2/image_to_c
//
// zoidberg_320x240_4b
// Data size = 4580 bytes
//
// PNG, Compression=Flate, Size: 319 x 240, 4-Bpp
//
// for non-Arduino builds...
#ifndef PROGMEM
#define PROGMEM
#endif
const uint8_t zoidberg_320x240_4b[] PROGMEM = {
0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,
0x00,0x00,0x01,0x3f,0x00,0x00,0x00,0xf0,0x04,0x03,0x00,0x00,0x00,0x84,0x41,0x7e,
0x4d,0x00,0x00,0x00,0x30,0x50,0x4c,0x54,0x45,0x00,0x00,0x00,0x28,0x10,0x0e,0x18,
0x19,0x17,0x57,0x19,0x19,0x2c,0x30,0x28,0x8e,0x2d,0x2b,0xbb,0x3d,0x3b,0x53,0x5c,
0x4c,0xff,0x53,0x51,0x60,0x9e,0x89,0x9d,0x9d,0x81,0xca,0xc8,0xa0,0x8b,0xe6,0xca,
0xd9,0xdc,0xb1,0xfb,0xff,0xcc,0xff,0xff,0xff,0x6a,0x6a,0xf0,0xd1,0x00,0x00,0x11,
0x6f,0x49,0x44,0x41,0x54,0x78,0xda,0xed,0x9d,0x5d,0x48,0x5c,0x57,0x1e,0xc0,0x27,
0x63,0x32,0xb5,0x5a,0x97,0xc6,0x34,0x69,0x68,0x17,0x76,0xfc,0x8a,0x5b,0xb3,0xed,
0x46,0x8d,0xc6,0xed,0x93,0xb5,0x21,0xd6,0x58,0xb3,0xf9,0x60,0xcc,0x6c,0x9f,0x34,
0xae,0xf6,0x3e,0x1a,0x6b,0x57,0x62,0x12,0xab,0x9d,0x9d,0xcb,0x7d,0x5c,0x4a,0x40,
0x04,0x1f,0x5c,0x9b,0x45,0x98,0xa5,0xd3,0x34,0x15,0x02,0x5d,0x3a,0xbb,0x94,0x42,
0x10,0xe6,0x21,0x1b,0x02,0x81,0x84,0x95,0x52,0x02,0x03,0x33,0xcc,0x65,0x17,0x0a,
0x05,0xfb,0x30,0x7b,0xe7,0xce,0xfd,0x38,0xe7,0xdc,0xf3,0xf1,0x3f,0x8e,0xf3,0xf1,
0xd0,0xf3,0x50,0xe3,0x78,0xbd,0xfe,0xee,0xf9,0x7f,0x9e,0xff,0xf9,0x9f,0x5b,0x5f,
0x73,0x75,0x8f,0xa0,0xef,0x67,0xc0,0x9f,0x01,0x7f,0x06,0xdc,0x1b,0xc0,0xa6,0x43,
0xdd,0xf9,0xd1,0x58,0x9d,0x80,0xc1,0x9a,0x51,0x45,0x33,0x87,0x3a,0xe1,0xaf,0x42,
0xc0,0x96,0x51,0xcd,0x1d,0xea,0x05,0x7f,0x95,0x01,0x36,0xf5,0x68,0xf8,0x98,0x68,
0xac,0x2a,0xc0,0x7d,0x8a,0x46,0x8e,0x72,0x8a,0x59,0x08,0x58,0xe3,0xe5,0xd3,0xb4,
0x49,0x7f,0xd5,0x00,0xb6,0xd0,0xf8,0xca,0x39,0x87,0x02,0xc0,0x26,0x3a,0x9f,0xa6,
0x8d,0x57,0x09,0x60,0x58,0x63,0x8d,0x8b,0xd5,0x00,0xd8,0x7a,0x84,0xc9,0xa7,0xa9,
0x8d,0x55,0x00,0x58,0xa3,0x71,0x46,0xc4,0x5f,0x71,0xc0,0x60,0x98,0x07,0x58,0x26,
0x21,0xf3,0x00,0x03,0x5c,0xbe,0x32,0x09,0x99,0x03,0x18,0x54,0xf8,0x80,0xe5,0xb1,
0x64,0x0e,0xa0,0x60,0x02,0x8d,0xd1,0x55,0x51,0x40,0xe1,0x04,0x1a,0x76,0x52,0x51,
0xc0,0x36,0x4d,0xab,0x86,0x29,0x64,0x03,0xf6,0x01,0x00,0x23,0x15,0x04,0x6c,0xd2,
0xb4,0xaa,0x98,0x42,0x26,0x60,0x00,0x04,0xb8,0x54,0x39,0xc0,0x30,0x08,0xb0,0xf4,
0xbe,0x90,0x05,0x08,0x93,0x70,0x19,0x7c,0x21,0x0b,0xf0,0x00,0x10,0x50,0xf5,0x57,
0x08,0xb0,0x0f,0x08,0x58,0xf2,0x88,0xcc,0x02,0x54,0xa0,0x80,0x91,0xca,0x00,0x06,
0x35,0xf0,0xf0,0x57,0x04,0xb0,0x0d,0x0e,0x78,0xa5,0x22,0x80,0x01,0x38,0x60,0xa4,
0x22,0x80,0x7d,0x70,0xc0,0x12,0xbb,0x42,0x06,0x60,0x18,0x0e,0x58,0x62,0x3b,0xa6,
0x03,0x06,0x15,0x09,0xc0,0x48,0x63,0x05,0x00,0x35,0x99,0xa1,0x9e,0x2f,0x3b,0x60,
0x8b,0x26,0x47,0xd8,0x55,0x6e,0xc0,0x36,0x39,0xc0,0x52,0x5a,0x32,0x1d,0x30,0x20,
0x09,0xa8,0x35,0x56,0x3b,0xe0,0x95,0xaa,0x05,0x0c,0x97,0x5a,0xc6,0xc5,0x02,0xf6,
0x54,0x3b,0xe0,0x52,0xc1,0x63,0x46,0xab,0x16,0x30,0x7a,0xa0,0x22,0x80,0xc7,0x58,
0x3c,0x9e,0x08,0x73,0x61,0xe2,0xd0,0xe8,0xd4,0x94,0x52,0x2d,0x80,0xaa,0x27,0x89,
0xe8,0xd5,0xa6,0x2e,0x75,0x1e,0xf4,0xf9,0xfc,0xd5,0x01,0x18,0x65,0x25,0x11,0xea,
0x85,0xea,0x88,0x24,0x8b,0x4a,0xd9,0x93,0x2e,0xb9,0x58,0x7c,0x3e,0x54,0xf6,0xf5,
0xa7,0x54,0x36,0xa3,0xd6,0x84,0xca,0xbe,0xfe,0x64,0x24,0xac,0x74,0x51,0x8e,0x87,
0xcb,0x5f,0xa6,0x61,0xcc,0x20,0x95,0x44,0x0d,0x54,0xa0,0xc6,0x20,0xb3,0x26,0xb9,
0xa0,0x54,0x20,0xe5,0x62,0x00,0x1e,0xa5,0x11,0xb8,0xd4,0xd1,0xc2,0x07,0xd8,0x3c,
0x47,0xfd,0xe5,0x04,0x6c,0x63,0xe7,0x05,0x26,0x8c,0xc9,0x3a,0x66,0xca,0x7d,0x2a,
0x14,0xea,0x0e,0x85,0xa6,0x4a,0xb5,0x82,0x67,0x00,0x52,0x8a,0x5b,0x4b,0xe8,0x7c,
0x5d,0x32,0x77,0x14,0xcd,0x5d,0xc5,0xb9,0xd8,0x86,0xaf,0x23,0x36,0x5b,0xa3,0x74,
0x95,0x13,0x90,0xb2,0xac,0xc3,0xb6,0xb5,0x4d,0xe9,0x86,0x34,0xb5,0x73,0x3e,0x97,
0xcb,0xfd,0xe8,0xab,0xcf,0xe5,0x76,0xae,0x36,0x96,0x13,0xd0,0xbb,0x30,0xc6,0xa3,
0x9c,0x9a,0x57,0xd2,0x90,0x7a,0xf2,0xf3,0x9c,0x09,0xf8,0xdb,0xfc,0x97,0xe9,0xb2,
0x02,0xd6,0x7a,0xbc,0x08,0xfe,0x6d,0x5e,0xc6,0x3d,0x05,0xbe,0x5c,0x6e,0xc3,0xfc,
0xba,0x56,0x56,0x40,0xd2,0x4a,0x54,0x62,0xe3,0x73,0xdc,0xd0,0x81,0xce,0x8f,0x72,
0xe8,0x28,0x2f,0x20,0x69,0x25,0x51,0xd7,0xc7,0xa8,0x93,0x9d,0x3e,0x7f,0x5e,0x49,
0x2f,0xe7,0x2a,0x08,0x48,0x2a,0xe1,0x98,0x6d,0x35,0xea,0xa5,0xf6,0x98,0x21,0xd1,
0x1d,0x03,0xf8,0xbd,0x8a,0x02,0x06,0xe8,0x36,0x3c,0xf1,0xd2,0xf5,0x02,0x8e,0xa1,
0xa4,0xef,0x57,0x14,0x90,0x50,0xc2,0xa3,0x56,0x15,0xc6,0x57,0x97,0x73,0x00,0x3f,
0xc6,0x01,0xd7,0xcb,0x0b,0x88,0x7b,0xc2,0x82,0x0a,0xaa,0x2f,0xc5,0x7c,0x7e,0x0b,
0xe7,0x8c,0xe1,0x0c,0x3f,0xc7,0x00,0x67,0xca,0x0b,0x88,0xe7,0x0b,0xe6,0xea,0x32,
0xfa,0xf2,0xe7,0x3b,0xbe,0xfd,0x2e,0xa0,0xfa,0x7b,0x0c,0xd0,0x5f,0x66,0xc0,0x63,
0xa4,0x17,0x54,0x4f,0xfd,0xd3,0xf0,0xc6,0x75,0x2e,0xa0,0xf6,0x26,0xca,0xf7,0x63,
0x73,0x99,0x01,0xb1,0xb4,0x3f,0x1f,0x76,0x4f,0x62,0x12,0xcd,0xf3,0x8f,0xa1,0x1f,
0xfc,0x50,0x6e,0x40,0x4c,0x09,0x0d,0xc0,0x71,0xdc,0x2d,0xe7,0x43,0x4d,0xf4,0xa3,
0x92,0xab,0x20,0xaf,0x25,0xa0,0x0f,0x03,0x8c,0x1e,0xcf,0x79,0x00,0xb5,0x53,0xee,
0xf7,0x3b,0xfe,0xb2,0x03,0xb6,0x61,0x80,0x44,0xd8,0xd8,0x31,0x1d,0x39,0x62,0xc7,
0xa5,0xf1,0x82,0x5c,0x40,0x34,0xda,0x2d,0x45,0x71,0x01,0xe7,0x7e,0x2c,0x28,0xc0,
0xcb,0x0e,0xf0,0xc1,0xf2,0x03,0xa2,0x32,0x8e,0x9c,0xc4,0xf9,0x72,0xff,0xb3,0xac,
0xfb,0x6c,0xe1,0xdb,0x9f,0x3e,0x98,0xac,0x00,0x20,0x12,0xed,0xa2,0x75,0x04,0xe0,
0xa7,0xd6,0x0f,0x4e,0x14,0x22,0xdf,0xd5,0xb0,0x5a,0x01,0x40,0xd4,0xd1,0xfc,0x8a,
0x00,0xb4,0xbd,0x64,0xd4,0x37,0x18,0x8b,0x6d,0xbc,0x65,0x68,0x64,0x05,0x00,0xd1,
0xd5,0x31,0x91,0xb9,0xec,0x38,0xe2,0x1f,0xeb,0xbd,0xd4,0x6d,0xb6,0x08,0x77,0x95,
0x1f,0x10,0x5d,0x7c,0x2e,0xe2,0x80,0xff,0x75,0x9c,0xa4,0xda,0xad,0x94,0xb4,0x8e,
0xce,0x05,0x44,0x1c,0x0d,0x61,0xc5,0x67,0x90,0x9f,0x1c,0xb6,0xa6,0xb2,0x02,0x80,
0x68,0x30,0x79,0x05,0x73,0x32,0x68,0x3a,0x3b,0x71,0xa4,0x02,0xa5,0x0f,0xaf,0xa3,
0x19,0x47,0x23,0xf1,0x87,0x78,0xc7,0xed,0x91,0x12,0xb6,0xd0,0xf0,0x01,0x11,0x47,
0xa3,0x22,0x53,0xf8,0x03,0xb1,0x1e,0x98,0xc8,0xe7,0xdb,0x1f,0x57,0x02,0x10,0x75,
0x34,0x57,0x9c,0x29,0xdc,0xf1,0x54,0xb9,0x26,0x0e,0x2b,0x15,0x31,0x12,0x6c,0xe9,
0xa4,0xda,0x99,0xc1,0x4f,0x6f,0x7b,0xcb,0x0e,0x93,0x35,0x4a,0x65,0x00,0xd1,0xd5,
0x70,0xb4,0x10,0xd6,0x76,0xae,0x2a,0x9a,0xb7,0xd0,0x1a,0xed,0x6c,0xac,0x08,0x20,
0xb6,0x74,0x9a,0x7c,0x2e,0x96,0xdb,0xd9,0x68,0x52,0xe8,0x95,0xcc,0x71,0x7f,0x25,
0x00,0xf1,0xa5,0xd3,0xd4,0xa5,0x83,0xdd,0x21,0xc5,0xd9,0xff,0x2a,0x4b,0xfb,0xbc,
0xa8,0x97,0xbf,0x4f,0xe3,0x57,0x0a,0x31,0xc2,0xbd,0x41,0xda,0xd7,0x28,0x03,0x48,
0xeb,0x45,0x9f,0x60,0xd5,0xd2,0xf7,0xa6,0x77,0x41,0x99,0x90,0x01,0x6c,0x91,0xa9,
0xa5,0xef,0xc9,0x6e,0x4e,0x0b,0x9e,0x77,0x88,0x00,0xbd,0x95,0x4c,0x27,0x3b,0x28,
0x51,0x21,0x3d,0x80,0xdf,0x46,0x78,0xe0,0x85,0x54,0xc2,0xc9,0x4e,0xa5,0xb4,0x9b,
0x25,0xb5,0xb8,0x24,0x84,0x80,0x98,0x3c,0x43,0xdd,0x2f,0x1e,0x2e,0xf5,0x5e,0x44,
0x1f,0xde,0xcc,0x24,0x04,0xc4,0x94,0x70,0x72,0x54,0xd4,0x92,0x54,0xfc,0x14,0x2a,
0xf8,0x73,0x0a,0x01,0xa1,0xcd,0xac,0x7b,0x35,0x85,0xa6,0xd2,0xab,0x12,0x80,0x52,
0x7d,0x66,0x7b,0xd0,0x41,0xd3,0x44,0x08,0x42,0x0c,0x78,0x54,0x0e,0x70,0xac,0x78,
0x2f,0x83,0xad,0x1f,0xc4,0x80,0xc7,0xa0,0xed,0x15,0x7b,0xd3,0xff,0xd1,0x42,0x68,
0x8a,0x18,0x10,0xda,0x68,0x66,0xfb,0xef,0x22,0xcd,0xa4,0x90,0x9e,0xa8,0x12,0x80,
0xe0,0x5e,0xc2,0x4b,0x7b,0xb2,0xba,0xfb,0x35,0xf1,0x98,0x80,0xb3,0x9d,0xd0,0x76,
0x51,0x6b,0xf3,0xb3,0x48,0x19,0x1f,0x25,0xda,0x3a,0x01,0x80,0x60,0x2b,0x39,0xb2,
0x17,0x7d,0xcb,0x96,0xd3,0xf8,0x58,0x02,0x10,0x6a,0x25,0x7b,0x22,0x63,0x5b,0xa1,
0x22,0x12,0x80,0x00,0x2b,0x29,0xdc,0x35,0xa2,0x80,0x8f,0x70,0x08,0x0b,0xcf,0xaa,
0x04,0x60,0x33,0x54,0xb8,0x56,0x5f,0x12,0x40,0x09,0x83,0xe7,0x85,0xf9,0x67,0xa3,
0x04,0xa0,0xd8,0x8c,0x2f,0xd8,0x7d,0x52,0xe6,0x10,0xdf,0xb1,0x97,0x31,0xcb,0x4d,
0x87,0x3c,0x41,0x1d,0x02,0x18,0x86,0x1a,0xf0,0x04,0xb0,0xb1,0xba,0x85,0xa1,0x06,
0xa8,0x47,0xbb,0x22,0x01,0xc8,0xf6,0x33,0xf6,0x2e,0xb7,0x5a,0x8b,0x2a,0xe1,0x98,
0xd8,0x2f,0x2c,0x09,0xcd,0x71,0x49,0x02,0xb0,0x96,0x3d,0x75,0x01,0xcc,0x80,0xad,
0x3d,0xdb,0x45,0x71,0x3e,0xb0,0x24,0x74,0x68,0x11,0x09,0x40,0x4e,0xd3,0x72,0x08,
0xd9,0xdf,0x76,0x8c,0x45,0x94,0x72,0x05,0x58,0x97,0xa0,0xa2,0x52,0xf7,0x06,0x70,
0x0c,0x57,0xc2,0x10,0x11,0x48,0x99,0x3a,0x1d,0x11,0x5a,0xa3,0x0c,0x20,0xc7,0x11,
0xda,0x1b,0xf1,0x96,0x12,0x8e,0x43,0xfa,0xcc,0x5a,0x98,0xae,0x88,0x96,0x58,0x42,
0x00,0x3d,0x49,0xb5,0x3a,0x4a,0x86,0x37,0xcb,0xc3,0x58,0x25,0x87,0x46,0x61,0xe8,
0x8c,0x8a,0x27,0xa2,0x0b,0x0e,0x48,0x3a,0xc2,0xa8,0xcf,0xd7,0xeb,0xd9,0x89,0x47,
0x27,0xb4,0x4b,0x26,0xa7,0x67,0xa9,0xd2,0x15,0x09,0x40,0xc2,0x11,0x9e,0xf7,0xf9,
0x7c,0x61,0x42,0x09,0x17,0xd1,0x58,0xd2,0x25,0x56,0x18,0x71,0xd0,0x97,0x01,0xc4,
0x1d,0xa1,0x6a,0xf0,0xf9,0xec,0x73,0x77,0x11,0x05,0xb3,0x92,0x23,0x62,0xc0,0x00,
0x33,0xe5,0xa9,0xa5,0x9d,0xca,0x04,0x01,0x1e,0x25,0x25,0x6c,0x0c,0x85,0x70,0xd5,
0x7d,0x88,0x2a,0x76,0x89,0x9f,0xb6,0x51,0x28,0xa8,0x88,0x04,0x20,0x5e,0x8c,0x59,
0x32,0x01,0x8f,0x22,0x3d,0x52,0x6e,0xd7,0x45,0x8f,0x10,0xb0,0x89,0xb9,0x30,0x20,
0x52,0xf7,0xdd,0x03,0x2e,0xfa,0x50,0x19,0xe3,0x66,0x1c,0x12,0x02,0xb6,0x30,0x00,
0xdb,0xc6,0x89,0x97,0x26,0x44,0x25,0x00,0x8f,0x51,0x00,0x6b,0xf0,0x2c,0xd5,0x9a,
0xbb,0x90,0xd0,0xcd,0x04,0x18,0x09,0x45,0x98,0xec,0x72,0x97,0x01,0x6c,0xf3,0x02,
0xd6,0x9c,0xc7,0xfc,0x8b,0xfd,0x35,0x24,0x74,0xd4,0x7d,0x74,0x40,0x6f,0x01,0x43,
0x95,0x00,0x6c,0x21,0x75,0x70,0x5f,0xaf,0x53,0x06,0xb6,0xbf,0x2e,0x22,0x80,0x80,
0x94,0x7e,0x4c,0x18,0xad,0x64,0x00,0xf1,0xc7,0x8b,0xf8,0x7a,0x15,0xd7,0x7c,0x6d,
0x3f,0x53,0x68,0x52,0xef,0x11,0x25,0x0b,0xf6,0xad,0x16,0x85,0x0b,0x1f,0x19,0x40,
0xbc,0xef,0x5b,0x55,0xd0,0x73,0x07,0x11,0x6c,0x26,0x7b,0x45,0xe9,0x56,0x1b,0xe3,
0xec,0x79,0xed,0x1e,0x02,0xe2,0x07,0x23,0xf0,0x99,0xec,0x15,0x65,0xd4,0x01,0xdc,
0x04,0x38,0x6b,0x5b,0x4b,0x93,0x61,0x80,0xb4,0x55,0xc9,0x51,0x1c,0x14,0x01,0x6c,
0x04,0x04,0x25,0x55,0x98,0xb5,0xef,0x19,0x60,0x2d,0x02,0x68,0xba,0xed,0x08,0x24,
0x6a,0x92,0x96,0xee,0x5d,0xf7,0x44,0x8b,0x05,0xb4,0x13,0x1a,0x0c,0xb0,0x4f,0x20,
0x61,0xb7,0xcb,0x00,0x9d,0xe6,0x46,0x2a,0x60,0x73,0x09,0x00,0xf3,0xff,0x89,0xc2,
0xb4,0x19,0x09,0x25,0x6d,0x2a,0xed,0x2f,0xc8,0x84,0xba,0x7e,0x00,0xa0,0x69,0xc5,
0x63,0x8a,0x60,0xaf,0xa4,0x89,0x76,0x54,0xb0,0x4f,0xbb,0xd8,0xa4,0x15,0x01,0x18,
0x1c,0x7e,0xa4,0x70,0xd6,0x4b,0xb5,0x88,0xa3,0x3e,0xd9,0x24,0x78,0x7b,0x5d,0x0b,
0xe5,0x1d,0x17,0xc6,0xec,0xa9,0xe1,0x62,0x00,0xeb,0xf4,0x34,0x6d,0x65,0x3c,0x81,
0x03,0x8e,0x83,0xce,0x1b,0xb4,0x51,0xaa,0xed,0x6d,0xdc,0xb7,0x74,0x00,0x0a,0x98,
0x0b,0x7a,0x96,0x56,0x81,0x5b,0xc4,0xf3,0xad,0x1e,0x50,0x7d,0x3a,0x40,0x39,0x3c,
0x11,0xe0,0x16,0xbb,0xc5,0x80,0xad,0xba,0xae,0x7f,0xc8,0x39,0x93,0x68,0xcd,0xee,
0x61,0xd0,0x7e,0x6c,0x80,0xf2,0xfa,0x83,0x3e,0xee,0x79,0x56,0x31,0x60,0xbd,0x01,
0xf8,0x05,0xbb,0xec,0x61,0xd7,0x55,0x5f,0xdc,0xf7,0xe2,0x80,0x54,0x66,0xd9,0x25,
0xa8,0x4d,0x5d,0x84,0x02,0x2e,0x18,0x80,0x29,0x85,0x19,0xeb,0x22,0x05,0x1d,0x1c,
0x83,0xb5,0xcd,0x04,0xbc,0xfb,0x15,0xac,0xb7,0xb7,0x81,0xd7,0xc5,0xdb,0x06,0x20,
0xd5,0x4a,0xac,0xb5,0x7a,0x77,0x41,0xc2,0xb0,0xb6,0x99,0x5a,0x6f,0x75,0xa8,0x8d,
0xff,0x06,0x0c,0x21,0x60,0xbb,0x9e,0x1f,0x67,0x98,0x15,0xdf,0x1e,0x53,0xc6,0xe3,
0xe1,0x48,0xac,0x5f,0x0e,0x50,0xe5,0xab,0xa0,0x0a,0x05,0xac,0x37,0x01,0x3f,0x65,
0x59,0x89,0x61,0xc4,0xe7,0x47,0xb5,0x89,0x5e,0x2d,0x1a,0xcf,0xde,0x96,0x2b,0x94,
0x35,0x72,0x25,0x1c,0x85,0xd6,0x66,0xce,0x99,0x80,0xcf,0x28,0x9e,0xd4,0x3c,0xc1,
0x31,0x6e,0x78,0xd9,0xce,0x83,0x86,0x8f,0x51,0xe3,0xba,0x3e,0x23,0x05,0x98,0x2f,
0x03,0x37,0x1d,0xec,0x13,0xec,0x4a,0x0a,0x01,0xe3,0x26,0x60,0x9a,0xf6,0x22,0xc7,
0xb1,0x51,0x6d,0xd2,0xd1,0x7a,0xd5,0x78,0x92,0x94,0x14,0xa0,0xa1,0x84,0xc1,0x51,
0x66,0x59,0x6a,0x11,0x0a,0x98,0x30,0x01,0xf5,0xd9,0x00,0xed,0x48,0xac,0xcf,0xdd,
0xde,0x56,0x1b,0x74,0xc0,0x14,0xd6,0xe2,0x5a,0x76,0x40,0xfc,0x82,0x0e,0x11,0x60,
0x6b,0x81,0x4f,0xbf,0x73,0xab,0x57,0x50,0xa6,0xae,0x33,0xae,0x7a,0x24,0x55,0xac,
0xed,0xe2,0x6d,0x62,0x41,0x8b,0xe8,0x1d,0x16,0x60,0xea,0xc6,0x5f,0x46,0xb9,0x80,
0xa7,0x96,0x8d,0xab,0xb2,0x33,0x32,0x80,0x57,0x38,0x9b,0xe5,0x2a,0x74,0x1b,0x62,
0xc4,0x02,0xcc,0xfe,0x26,0xf9,0x09,0x8f,0x70,0x6c,0xf5,0x96,0xa9,0xab,0x41,0x89,
0x1a,0x45,0x94,0xf3,0x02,0xc6,0x28,0x70,0x23,0x27,0x18,0xb7,0x00,0xf5,0xdb,0xc9,
0xe4,0x0c,0x5b,0xca,0x13,0x43,0xc9,0x6f,0xf3,0x1e,0x5d,0x7f,0x32,0x20,0x51,0x44,
0xe1,0x1c,0x66,0x85,0xee,0xd5,0xb5,0xdb,0x7c,0x7a,0x6a,0x35,0x99,0xbc,0xc5,0x68,
0xf9,0x50,0x0d,0x3e,0x0b,0x50,0xcf,0xf4,0xc3,0x01,0x6b,0xc5,0x36,0x22,0x02,0xac,
0x77,0x00,0x33,0x2f,0x24,0x93,0xc9,0xe5,0xb7,0x68,0x62,0x9e,0xea,0xba,0x66,0xfc,
0xec,0xbe,0x65,0xef,0xe9,0x69,0x28,0xa0,0x0a,0xb0,0x11,0x11,0xa0,0x23,0x61,0x5d,
0xdf,0x30,0x20,0x92,0x5b,0xb3,0x87,0x48,0xc4,0xc9,0xee,0xc1,0xd5,0x24,0x02,0xa8,
0x67,0x06,0x80,0x55,0x9e,0x68,0x58,0xac,0x82,0x02,0x40,0x57,0xc2,0x46,0x30,0x31,
0x31,0x92,0x5b,0x33,0x35,0x3d,0x53,0xce,0x19,0xb6,0xa9,0xd0,0x89,0xe7,0x56,0xcc,
0xcf,0x93,0xf7,0x9d,0x87,0xe1,0x58,0x4a,0x0b,0xa5,0xcb,0x81,0xdf,0xdd,0xc2,0x7f,
0x0f,0xeb,0x02,0x02,0x98,0x1d,0x2a,0x80,0x24,0xb7,0x56,0xe6,0x06,0x7c,0x07,0xbb,
0xbb,0xbb,0x3b,0x7d,0xfb,0xe7,0x56,0x9e,0x4f,0xda,0x1f,0xbb,0x17,0xa7,0x07,0x40,
0x55,0x9e,0x88,0x02,0xe8,0x1d,0xe1,0x02,0xa2,0x13,0x68,0xda,0xb1,0x3b,0xb6,0x56,
0x56,0x56,0xcc,0x29,0x7d,0x81,0x02,0xa8,0x3f,0x06,0x15,0x51,0x54,0x48,0x03,0x13,
0x17,0x70,0x04,0x03,0x4c,0xdd,0x48,0x52,0x86,0x0b,0x78,0x0e,0xb9,0xf6,0x9e,0xbf,
0xa8,0x0e,0x0d,0xa4,0xee,0xc0,0x03,0x6c,0xdf,0xc6,0x00,0x1d,0x19,0x63,0xe3,0x35,
0x07,0xf0,0x0d,0x6c,0xba,0x8b,0xea,0xd0,0x40,0xb2,0x5f,0x1e,0x20,0x3e,0x81,0xba,
0xbe,0xb9,0x4a,0x01,0x74,0xa9,0x7f,0x81,0x5e,0x9b,0x29,0xea,0xad,0x7c,0xb0,0xee,
0xb7,0xd6,0x04,0x01,0x98,0x7e,0x97,0x02,0x38,0x47,0x07,0xd4,0x67,0x07,0x76,0xdf,
0xa1,0x81,0x96,0xbe,0x38,0x80,0xf5,0x3a,0x39,0x36,0x28,0x80,0xcb,0xf6,0x3f,0xee,
0xe3,0x80,0x9b,0x5f,0xf9,0x77,0xd9,0xa1,0x81,0x57,0x37,0x39,0x80,0x71,0x0f,0x20,
0xcd,0x4c,0xbe,0xb5,0xff,0xf1,0x09,0x0e,0x98,0x8a,0x3f,0xde,0xb5,0x95,0x5c,0x04,
0x01,0xd6,0x79,0xf8,0xa8,0x66,0x62,0x03,0x6e,0x0d,0xe1,0x80,0x99,0x06,0x7d,0x7d,
0x77,0x0d,0x10,0x78,0xed,0x90,0x7d,0x3a,0xd6,0x3b,0x81,0x46,0x42,0xea,0x35,0x93,
0x6f,0x57,0x6d,0x5d,0xc4,0x01,0xf5,0x79,0x3d,0x33,0x2d,0xdc,0x56,0x13,0xbf,0x94,
0x83,0x09,0xd8,0x4e,0xe1,0xd3,0x33,0xde,0x29,0xbc,0x5f,0x00,0xbc,0x75,0x83,0x04,
0xdc,0x30,0xac,0x8a,0x72,0x5f,0xc0,0xdb,0x3f,0xbb,0x40,0x80,0x23,0x34,0x40,0xfd,
0xce,0x10,0x39,0x87,0x5b,0xa6,0x5e,0x2e,0xbf,0x96,0xdc,0x22,0x00,0xbf,0x33,0x9c,
0xc0,0xe6,0x6e,0xac,0x04,0xaf,0x80,0xb2,0x00,0x5b,0xb7,0xa9,0x80,0xe9,0xfd,0xad,
0x04,0xe1,0x96,0x99,0x86,0x0d,0x11,0x91,0x24,0x7f,0xa9,0x11,0xfa,0xb2,0xd3,0xbb,
0xb0,0x92,0x8b,0x20,0xc0,0xe3,0x3a,0x7d,0xac,0xaf,0xcc,0x0e,0x79,0x42,0xc9,0xad,
0xa1,0xa4,0x17,0x30,0x3b,0x42,0x4f,0x1b,0xfa,0x64,0x4c,0x84,0x0d,0x18,0x67,0x00,
0xa6,0x5f,0x4b,0x2e,0xef,0x5f,0x41,0x01,0xaf,0xad,0x4c,0x5f,0x23,0x93,0x05,0x73,
0x5c,0x37,0xdd,0xa1,0x20,0xa9,0x16,0x36,0xc1,0x32,0x00,0x3b,0x74,0xd6,0x58,0x5b,
0x4d,0x6e,0x2d,0x07,0xaf,0x39,0x82,0x5e,0xe9,0x6f,0x5f,0x4d,0x52,0x01,0x37,0xcc,
0x79,0x9c,0x96,0x8c,0x25,0xe4,0xfe,0x04,0x03,0x70,0x81,0x09,0x98,0x36,0x25,0xbc,
0x3c,0x7b,0xfa,0xf4,0x9c,0x31,0x4e,0x9f,0x1e,0xb4,0x51,0xef,0x93,0x93,0xfe,0x70,
0x9b,0x9a,0x1b,0xb6,0x48,0xf8,0x18,0x26,0x20,0xc3,0x44,0xcc,0x71,0x77,0xd5,0xcd,
0x08,0x57,0x10,0x8b,0xf1,0x00,0xa6,0x0a,0x1f,0xdc,0x05,0xec,0xab,0xb1,0x27,0x90,
0x01,0x58,0xcf,0xe6,0xd3,0x33,0xcf,0x27,0xa9,0xe3,0xbe,0x27,0xb7,0x28,0x88,0x81,
0x5c,0xcc,0xf3,0xdf,0xf6,0xef,0x29,0x73,0xd3,0x01,0xe3,0x1c,0x40,0x7a,0xd6,0x65,
0x84,0x14,0x12,0x30,0x6b,0x39,0xc6,0x94,0x44,0xb0,0xf3,0xee,0xb2,0x50,0x01,0xdb,
0x79,0x7c,0x7a,0x76,0x90,0x0e,0xe8,0x51,0x8b,0x79,0xdb,0xae,0xd0,0x7b,0xfb,0xfc,
0x3c,0x3f,0xe3,0xed,0xcc,0xa4,0x02,0xde,0xe4,0x02,0xea,0x8f,0x6f,0xc0,0x00,0x37,
0x28,0xeb,0xd0,0xd6,0xaf,0xef,0x71,0xa2,0x31,0x65,0xa3,0x85,0x0a,0x98,0xe0,0x03,
0xea,0xb3,0xab,0x20,0xc0,0x47,0xf6,0x27,0x8f,0x50,0xed,0xce,0xbe,0x23,0x75,0xd8,
0x83,0x06,0xe8,0x9f,0x3d,0x3d,0xcf,0xd5,0xc2,0x34,0xcd,0x4e,0x96,0x3d,0x97,0x3d,
0xb3,0x1f,0x14,0xb1,0x93,0x05,0x3d,0xc1,0x06,0xa4,0x1d,0x2b,0xa3,0x01,0x9e,0xfd,
0xc7,0xd3,0xaf,0xa6,0x3f,0xe3,0xda,0xc9,0x0d,0x08,0x60,0xda,0x5d,0xca,0x23,0x49,
0xdc,0xd9,0x33,0x52,0x67,0xb6,0x28,0x80,0x66,0xcd,0x32,0x3b,0xcb,0x9b,0xc3,0x2c,
0x45,0xc8,0xf3,0x5e,0x87,0xe4,0xae,0xf3,0xd6,0x5d,0xed,0xd9,0x0c,0xc0,0x2d,0x84,
0x0e,0x58,0x70,0x82,0x99,0xb9,0x6d,0x9e,0x90,0x8d,0xf4,0x6a,0xd6,0x87,0x2d,0xa2,
0xce,0x7a,0xaf,0x72,0x33,0x8e,0xb4,0xad,0xfd,0xc6,0x8d,0x59,0x1b,0x23,0x11,0x3f,
0x10,0xd0,0x9a,0xba,0x74,0x3d,0xd7,0x92,0x07,0x0f,0x4c,0x69,0x7f,0x40,0x01,0x1b,
0xbc,0x17,0x21,0x93,0x7a,0xd7,0x75,0x60,0x9b,0x61,0x99,0x43,0x79,0x5e,0x40,0xc7,
0x09,0xde,0xe6,0x19,0xf3,0x66,0x7e,0x77,0xf3,0x32,0x9a,0x17,0xbe,0xe1,0xbd,0x28,
0x86,0x88,0x7b,0xc0,0x49,0x42,0xb2,0x1f,0xc8,0x1c,0x6b,0xf4,0x02,0xbe,0xee,0xdc,
0xf3,0x38,0x9b,0xef,0x9e,0x99,0xb9,0xff,0x0e,0x05,0xa4,0xe4,0x17,0x9b,0x68,0xea,
0xe0,0xaa,0x4f,0xaa,0x57,0xe2,0x60,0xa8,0x07,0x10,0x59,0x2c,0xad,0x31,0xa7,0xf0,
0x49,0x61,0x65,0xf1,0x4b,0x14,0x90,0x62,0x54,0xdf,0x21,0x6a,0x9c,0x35,0xa7,0xb0,
0x30,0xcd,0xeb,0x61,0xf8,0xa9,0x4b,0x0f,0x20,0x12,0xe6,0xd2,0xac,0x88,0x92,0x7e,
0xbb,0xe0,0xf7,0xdf,0x15,0x00,0xa6,0xd0,0xcf,0x1e,0xbb,0x69,0x5c,0xf6,0xaa,0x27,
0xef,0x3f,0xd1,0x0c,0x05,0x44,0x17,0x4b,0x73,0x0c,0x27,0x63,0xdd,0x7f,0xe9,0x39,
0x5e,0xae,0xe0,0xe6,0x33,0x88,0xb7,0xb6,0x88,0x33,0xe4,0xff,0xe1,0x8b,0x7d,0xf2,
0x97,0x04,0x0c,0x26,0x58,0x33,0x80,0x58,0xa4,0x25,0xa1,0xcb,0x4f,0x90,0x88,0xf2,
0x2f,0x8a,0x57,0xca,0x60,0x7a,0xf9,0xd8,0xda,0xdb,0x2d,0xc8,0x40,0x11,0xc4,0x60,
0x16,0x60,0x07,0x51,0x1d,0xa0,0x09,0xd8,0x6e,0xba,0x7c,0x15,0x8d,0x28,0xb7,0x68,
0x53,0x8d,0xaf,0x5d,0x67,0x90,0x44,0x38,0x8d,0x49,0xf9,0xd4,0x1a,0x18,0xf0,0x1c,
0x35,0x1f,0xc1,0xfe,0xaa,0xed,0x25,0xa2,0x0b,0x7a,0xf6,0xf6,0x2a,0x3b,0x90,0x18,
0x63,0x18,0x57,0x49,0x54,0xc1,0x33,0xd3,0x3d,0x0e,0xe2,0x85,0x78,0x0a,0x0c,0x88,
0x6b,0xd2,0x23,0x8a,0x62,0x39,0x7e,0x76,0xc9,0xf8,0x61,0xc6,0x89,0x79,0xc3,0x34,
0x40,0x9c,0x3a,0x3b,0x83,0x26,0x9a,0xd9,0x8d,0x7d,0xd6,0x51,0xd6,0xc8,0x75,0x3d,
0x03,0x05,0x24,0x2a,0x46,0xe9,0x73,0x5e,0xbd,0x3a,0x6c,0x3f,0xf7,0x65,0xf3,0x0a,
0x3b,0x7b,0xa5,0x56,0x22,0x08,0x09,0xa4,0xf0,0xdb,0x67,0xe6,0xde,0xce,0x7b,0x44,
0xf5,0x15,0xde,0x3e,0x29,0x01,0x48,0x5d,0xdb,0xe2,0x2b,0x77,0x05,0xdd,0x7f,0x35,
0x54,0x7f,0xc8,0x5b,0xa1,0x76,0xc6,0x03,0x42,0x3b,0x48,0x9d,0x7e,0xba,0xd1,0xd4,
0x13,0xba,0x98,0xa0,0x2c,0xad,0x18,0x80,0xc1,0x04,0x7f,0x0a,0x8c,0x19,0x73,0x72,
0x91,0xa8,0xf5,0x30,0xeb,0x37,0x58,0x81,0x44,0xd7,0xbf,0xc7,0x4d,0x3b,0xe3,0x7d,
0x8a,0xec,0x57,0x1b,0xfd,0xfb,0xe3,0x76,0xa0,0x11,0x02,0x76,0x30,0x73,0x4e,0x7b,
0xfc,0xd5,0xd1,0xec,0xc5,0x04,0x9a,0x7a,0x7d,0x43,0x8d,0x3a,0xa9,0x04,0x23,0x41,
0xc4,0xe7,0xd1,0xb8,0xea,0x19,0x0c,0x70,0x84,0xeb,0x6a,0xb1,0x09,0x2c,0xa8,0xa0,
0x39,0x2f,0xf9,0xb5,0xfb,0x37,0xf4,0x90,0x13,0x67,0x47,0x16,0xe2,0x51,0x40,0x80,
0x1e,0x09,0x93,0x9e,0x4c,0xbf,0xeb,0x7a,0xaf,0x57,0xb1,0x15,0xc0,0x32,0x04,0xf0,
0x59,0xa2,0x48,0xc0,0x0e,0xa1,0xa3,0x70,0xd3,0xf5,0x28,0xba,0xb1,0x34,0x44,0x77,
0x83,0xa4,0x00,0x1e,0xb2,0x73,0xe0,0x47,0x20,0xc0,0xd7,0xbd,0xbf,0x88,0xdf,0x33,
0xe5,0xa6,0x21,0x4b,0xe8,0x6c,0x6c,0x5e,0x6b,0xa0,0x47,0x6d,0xbc,0xa8,0x79,0x9b,
0x9d,0xbf,0xc1,0x8c,0x24,0x2e,0x52,0x73,0xa4,0xbf,0xe7,0x7d,0x0c,0x64,0x8d,0x0e,
0xa8,0x37,0x70,0xc4,0x81,0x7b,0x2f,0x08,0x60,0xbb,0x48,0x8b,0x32,0xc8,0x9b,0x3f,
0xde,0x23,0x56,0x51,0x74,0xf5,0x9a,0xe7,0x44,0x3e,0x22,0x4e,0x03,0x00,0x1b,0x44,
0x42,0x7a,0x86,0x04,0x78,0xe2,0xe2,0xcc,0x20,0x55,0xbf,0x62,0x3c,0x8b,0x43,0x7f,
0x04,0x0a,0x75,0x71,0x51,0xbc,0x47,0x24,0xac,0x92,0x3e,0x37,0x5d,0x47,0x23,0xbc,
0xc7,0xce,0xbe,0xf0,0xdf,0x86,0x00,0xd2,0x8b,0x82,0x48,0x2c,0xc9,0xa2,0x6f,0xab,
0xf3,0x3c,0xcd,0xe3,0x0e,0x21,0xe0,0x2e,0xdc,0x20,0x0a,0x48,0x5f,0x23,0x21,0x7f,
0x02,0xed,0x22,0x8c,0x78,0x75,0x6e,0xf3,0x3a,0xc5,0x7b,0x6c,0xeb,0xa0,0xf1,0x00,
0x02,0x48,0x17,0x00,0xf2,0x27,0x50,0x15,0x5c,0xa2,0x18,0xc5,0xda,0x67,0xbb,0x06,
0x04,0x25,0xac,0xf4,0x7b,0x21,0xe1,0x09,0x6d,0x22,0x5c,0xda,0xa6,0x15,0x44,0x3c,
0x32,0x7c,0x06,0x04,0x9c,0x01,0x00,0x32,0x0a,0xfb,0x48,0x30,0x40,0xab,0x3e,0x7f,
0xde,0xd6,0x21,0x84,0xa9,0x04,0x88,0x2f,0xdb,0x0c,0x00,0x64,0xb8,0xda,0xac,0x53,
0x31,0xc8,0xf4,0x09,0x66,0x30,0xef,0x6c,0x12,0x3a,0x34,0x3d,0x80,0xd9,0x08,0x02,
0xc8,0xba,0xd5,0x30,0x25,0xce,0xb1,0x00,0x8d,0x04,0x7b,0x9b,0x9b,0x0d,0xc9,0x06,
0x3a,0x04,0xb0,0x95,0xf5,0xcb,0x8e,0x6d,0x3e,0xd0,0xc4,0x80,0xfa,0x93,0x0e,0x51,
0x8a,0x4a,0x5d,0xc8,0x02,0x00,0x99,0xb5,0x2c,0x27,0x18,0xfc,0x0d,0x02,0xa8,0x3f,
0xc1,0x1c,0x36,0x91,0x2d,0x48,0x47,0x62,0x04,0x90,0x29,0x0b,0xc7,0x53,0xff,0x09,
0x04,0xa8,0xdf,0xeb,0x60,0x67,0x0b,0xf2,0x46,0xec,0x00,0x06,0x99,0xe6,0x66,0x2f,
0x7c,0xf0,0x13,0x07,0x4b,0x6c,0xf3,0xc4,0x1c,0xf6,0x30,0xc8,0x88,0xfd,0x62,0x40,
0xf6,0xd6,0x88,0x5d,0xa2,0xc2,0xbb,0xd1,0x39,0x80,0xfa,0xfa,0x75,0xde,0xb2,0x90,
0x66,0x5a,0x00,0x40,0x76,0x2d,0xd0,0xce,0xd3,0x9f,0x29,0x30,0x11,0xe7,0x13,0xd3,
0x9b,0x90,0x14,0x10,0xe4,0x65,0x1c,0x40,0xb6,0x3b,0xb0,0x5d,0xd9,0xbf,0x35,0x30,
0x60,0xd6,0x25,0x8c,0xed,0x11,0x20,0x5b,0x05,0x1d,0x57,0xf6,0x25,0x1c,0xd0,0x08,
0x29,0xdb,0x32,0x80,0x0f,0xc5,0x80,0x9c,0xdd,0x39,0x3b,0x8b,0xc3,0xbc,0x0c,0x3d,
0xd4,0x51,0x1c,0x74,0xac,0x48,0x37,0x68,0x03,0xd6,0x8b,0x01,0xf1,0x53,0x39,0x7f,
0x14,0xd8,0xe5,0x08,0xa7,0x3e,0x26,0xe3,0x06,0x6d,0x40,0x8e,0xc3,0xb7,0x83,0x41,
0x40,0x06,0xd0,0xb1,0xde,0x4d,0x08,0xe0,0x80,0x18,0x30,0x21,0x9c,0x8c,0x2c,0xde,
0x53,0xfc,0xbe,0xe0,0x6f,0x6e,0xd0,0xcb,0x47,0xb2,0xb9,0x8c,0x0d,0xc8,0x6b,0x01,
0xd0,0x47,0x28,0x6e,0xd0,0x2d,0x7c,0xb0,0xd4,0xca,0xf6,0xa2,0x00,0xc0,0x8c,0x5f,
0x08,0xd8,0xc1,0xfb,0xfd,0x42,0x30,0x48,0xe3,0x5b,0x07,0x6f,0x8a,0x72,0x78,0xca,
0x4e,0x84,0xfc,0x8a,0xc9,0x01,0x6c,0x10,0x03,0x12,0xe7,0xae,0x44,0x31,0xd6,0x06,
0xfb,0x3e,0x51,0x9c,0x1b,0xb4,0x00,0xb9,0x59,0xdb,0x3c,0x05,0x50,0x15,0xa5,0x51,
0x76,0xfc,0x81,0x64,0xac,0xdf,0x09,0x01,0x83,0x71,0x31,0x20,0x7e,0xbe,0x33,0x2a,
0x4a,0x44,0x53,0x12,0x80,0x77,0xc4,0x80,0x00,0x83,0xc4,0x23,0x5d,0x84,0xfd,0x77,
0x33,0xb3,0xd7,0x11,0x30,0x48,0x4a,0xbd,0x26,0x04,0xec,0x00,0x00,0x7e,0x09,0x75,
0x83,0xb3,0x9f,0xe5,0x23,0xb1,0x0c,0xe0,0x8c,0x10,0xf0,0x38,0x00,0x10,0x3b,0xb8,
0xa6,0xbe,0xca,0x36,0xc9,0x9b,0xe6,0x6f,0xd8,0x80,0x19,0x31,0x60,0x76,0x40,0x08,
0xc8,0xd7,0xf8,0x4d,0x6f,0xa4,0x1b,0x1f,0xfe,0x0f,0xef,0x6a,0x83,0x2e,0x2d,0x01,
0xe8,0x17,0x02,0x2e,0x00,0x00,0xb1,0x84,0xbf,0xbb,0xfb,0xa5,0x79,0xce,0x12,0xc6,
0x90,0xab,0x04,0x60,0xba,0x59,0x04,0x18,0x4c,0x00,0x00,0xdf,0x21,0x0f,0xe1,0x74,
0xb0,0x6d,0xde,0x08,0xdf,0x36,0x20,0xa7,0xe4,0xe6,0x78,0x24,0x21,0x60,0xab,0x20,
0x5b,0xf3,0xae,0x48,0xcc,0x1d,0xd4,0x9b,0x6c,0xc0,0x37,0x64,0x00,0x1f,0x0a,0x01,
0x3b,0x84,0x80,0xd9,0xbf,0x67,0xbc,0x1d,0x57,0xa7,0xb6,0x01,0x22,0xd6,0x47,0x8a,
0xf3,0x32,0x26,0x60,0x9d,0x08,0xf0,0x49,0xff,0xec,0xa0,0x17,0x30,0xb2,0x00,0x30,
0x12,0xc0,0xb2,0x6e,0x46,0x08,0x28,0x88,0xab,0x0f,0x9f,0xb6,0x27,0x68,0x6d,0x06,
0xf4,0x84,0x21,0xef,0x5f,0x6e,0x6f,0xbb,0x80,0xe2,0x65,0x9d,0x5f,0x08,0x28,0x88,
0xab,0x0f,0xf2,0x15,0xa1,0x14,0x05,0x90,0xea,0xad,0xb3,0x73,0x89,0x7b,0xc3,0x48,
0xf1,0x5d,0xb8,0xac,0x4b,0x8b,0x01,0xf9,0xe1,0x32,0x33,0x93,0x37,0xf2,0x3b,0x94,
0xf6,0xe7,0xc8,0x7c,0x2c,0x16,0xfb,0xda,0x53,0xfb,0xe8,0xcf,0x17,0x3f,0x1c,0x40,
0x61,0xce,0x2f,0x38,0x52,0x9b,0x07,0x4c,0xf0,0x17,0x68,0x71,0xef,0x8a,0xc4,0x3e,
0xb1,0x16,0x0a,0x85,0x4e,0x0c,0xf3,0x37,0xc1,0x1e,0x14,0x67,0xc4,0x79,0x40,0x6e,
0x3a,0x9d,0x9d,0x35,0xeb,0xba,0x19,0x76,0x57,0xe2,0x78,0x9c,0xbb,0xac,0xfb,0x5e,
0x94,0xb1,0xae,0x0b,0x01,0x79,0x0d,0xa1,0x19,0xab,0x4d,0x2f,0xcd,0xee,0xeb,0xa4,
0xc7,0x65,0x07,0x50,0x58,0x63,0x1d,0x10,0x02,0x72,0xbc,0xcc,0xd3,0x41,0xab,0x2e,
0x9e,0xe6,0x74,0xc6,0x5e,0xe6,0x02,0xa6,0xe3,0x45,0x2c,0x48,0xf2,0x80,0xff,0x07,
0xf7,0x0a,0x96,0x29,0xe8,0xc9,0xdb,0xb6,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,
0xae,0x42,0x60,0x82};
@@ -30,7 +30,7 @@ typedef struct my_private_struct
int xoff, yoff; // corner offset
} PRIVATE;
int PNGDraw(PNGDRAW *pDraw)
void PNGDraw(PNGDRAW *pDraw)
{
uint16_t usPixels[320];
uint8_t ucMask[40];
@@ -40,7 +40,6 @@ PRIVATE *pPriv = (PRIVATE *)pDraw->pUser;
if (png.getAlphaMask(pDraw, ucMask, 255)) { // if any pixels are opaque, draw them
spilcdWritePixelsMasked(&lcd, pPriv->xoff, pPriv->yoff + pDraw->y, (uint8_t *)usPixels, ucMask, pDraw->iWidth, DRAW_TO_LCD);
}
return 1;
} /* PNGDraw() */
void setup() {
@@ -1,441 +0,0 @@
// Created with image_to_c
// https://github.com/bitbank2/image_to_c
//
// octocat_small
// Data size = 6834 bytes
//
// PNG, Compression=Flate, Size: 120 x 100, 32-Bpp
//
// for non-Arduino builds...
#ifndef PROGMEM
#define PROGMEM
#endif
const uint8_t octocat_small[] PROGMEM = {
0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,
0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x64,0x08,0x06,0x00,0x00,0x00,0x4d,0x70,0xf4,
0x32,0x00,0x00,0x00,0x06,0x62,0x4b,0x47,0x44,0x00,0xff,0x00,0xff,0x00,0xff,0xa0,
0xbd,0xa7,0x93,0x00,0x00,0x1a,0x67,0x49,0x44,0x41,0x54,0x78,0xda,0xed,0x9d,0x7b,
0x7c,0x9c,0xd5,0x79,0xe7,0xbf,0xe7,0xbc,0xef,0xdc,0x47,0xd2,0x48,0xa3,0x8b,0xaf,
0x1a,0x59,0xc2,0xb2,0x8c,0xaf,0xc1,0x18,0x03,0xc6,0x80,0x81,0x40,0x80,0x82,0xb9,
0x14,0xd2,0x14,0xd8,0x66,0x83,0x5b,0x9a,0xa4,0x25,0xed,0x7e,0xf6,0x93,0x2e,0xc9,
0x36,0xbb,0x2d,0x01,0x92,0xb0,0x49,0xca,0x2e,0xd0,0xee,0xa7,0x62,0xb7,0x6d,0x48,
0x1b,0x4a,0x52,0x68,0xb2,0x21,0xa6,0x24,0xdc,0x52,0x27,0xe0,0x0b,0x26,0xbe,0x01,
0xb2,0xb1,0x35,0xb6,0xe5,0xab,0x2c,0xcd,0xe8,0x36,0xd7,0xf7,0x3d,0xfb,0xc7,0x7b,
0x46,0x96,0x34,0x23,0x5b,0x17,0x5b,0x23,0x4b,0x7e,0x3e,0x9f,0xf9,0x80,0xe6,0x1d,
0xbf,0xe7,0xf2,0x3b,0xcf,0xe5,0x3c,0xe7,0x79,0x9e,0x03,0x17,0x68,0x4a,0x93,0x28,
0x66,0xe3,0xf5,0xf3,0xe6,0x49,0xdb,0xb6,0x4b,0x75,0x3f,0xd2,0x42,0x88,0xb4,0x69,
0x9a,0xd9,0x3d,0x7b,0xf7,0xaa,0xf3,0x69,0x12,0xf5,0x38,0x5c,0x80,0x07,0x30,0x81,
0x54,0x6b,0x34,0xda,0x3b,0xed,0x01,0xae,0x8b,0x44,0xd6,0x02,0x3f,0xd4,0x13,0xd3,
0x01,0x7c,0x00,0xfc,0x0a,0xf8,0x19,0xb0,0xbd,0x35,0x1a,0x4d,0x4e,0x56,0x50,0xeb,
0x22,0x11,0x09,0x84,0x80,0xeb,0xf5,0x67,0x25,0x10,0x01,0x7c,0xc0,0xfb,0xc0,0xf5,
0x93,0xa1,0xff,0xa2,0xc8,0x13,0xf4,0x34,0xf0,0xf9,0x21,0x8f,0x14,0x90,0xd6,0x93,
0xf4,0x77,0xc0,0x8b,0x40,0x47,0x6b,0x34,0xaa,0x26,0x09,0xb0,0x26,0xb0,0x10,0x78,
0x10,0xb8,0x07,0xa8,0xd6,0x5c,0x3b,0x90,0x52,0xc0,0xda,0xd6,0x68,0xf4,0xd7,0xc5,
0xee,0xaf,0x51,0xac,0x86,0x43,0xa1,0x90,0x0f,0x78,0x12,0xa8,0x28,0xb0,0xe8,0x4c,
0x60,0x0e,0x70,0x33,0x70,0x2f,0x20,0x43,0xa1,0xd0,0x47,0xb1,0x78,0x3c,0x59,0x44,
0x60,0x8d,0x50,0x28,0xb4,0x18,0xf8,0x26,0xf0,0x3f,0x80,0x35,0x40,0x29,0x20,0x87,
0x99,0xd7,0x43,0xa1,0x50,0xe8,0xed,0x58,0x3c,0x5e,0x54,0x80,0xcd,0x22,0xb6,0x7d,
0x91,0x06,0xf1,0x4c,0x0b,0xb0,0x5e,0x4f,0xe8,0x83,0x75,0x91,0xc8,0xa3,0xc0,0x4b,
0xad,0xd1,0x68,0x7a,0x18,0x10,0x84,0xfe,0x37,0x86,0x9e,0x78,0xb7,0x16,0xa3,0x01,
0xc0,0xab,0xbf,0xb7,0xb5,0x84,0xe8,0x03,0xe2,0xfa,0xbf,0x96,0xfe,0xde,0x6a,0x8d,
0x46,0xed,0x02,0xef,0x9c,0x01,0xfc,0x67,0xcd,0xb5,0x65,0x23,0x94,0x8c,0xab,0xf5,
0xfc,0x66,0xa6,0x2b,0xc0,0xcb,0x01,0xd7,0x08,0x7f,0x2b,0x81,0x45,0xc0,0xf7,0x80,
0x57,0xea,0x22,0x91,0x47,0x80,0x8f,0x34,0x60,0x7e,0x60,0x3e,0xb0,0x04,0x58,0x00,
0x34,0x00,0xb5,0xc0,0x6c,0x0d,0xae,0xd4,0x13,0x3e,0x54,0x1d,0xd9,0xfa,0x93,0x00,
0x8e,0x00,0x51,0x60,0x5f,0x5d,0x24,0xd2,0x02,0xec,0x00,0x76,0x03,0xbd,0xc0,0x9d,
0xc0,0xa3,0xc0,0xbc,0x51,0xaa,0xb4,0x65,0x7a,0x81,0x4d,0x3f,0x80,0x35,0x57,0x5c,
0x34,0x06,0x15,0xe1,0x02,0xd6,0x01,0x97,0x03,0x2f,0xe8,0x77,0xac,0xd0,0x40,0x9a,
0x63,0x54,0x39,0x01,0xa0,0x52,0x2f,0x90,0x1c,0xf0,0x59,0x0d,0xee,0x61,0xa0,0x71,
0x14,0x0b,0x71,0x20,0x95,0x02,0xb3,0x80,0x3d,0xd3,0x91,0x83,0x73,0x62,0x6f,0xac,
0x54,0x03,0x3c,0x7c,0x8e,0xfa,0x96,0x13,0xed,0x6e,0xa0,0x7c,0x9c,0xef,0x99,0x59,
0x6c,0x80,0x65,0x11,0xdb,0x2d,0x99,0x06,0x3e,0x86,0xa2,0x8f,0x51,0x4e,0xd3,0xb6,
0xa7,0xcd,0x18,0x8b,0xd5,0x01,0x05,0xf4,0x4c,0x71,0x70,0x95,0xd6,0xe3,0xd3,0x12,
0x60,0x1b,0x38,0x36,0xc5,0x01,0xb6,0x81,0xa3,0xd3,0x12,0x60,0xed,0x95,0xda,0xab,
0xf7,0x9f,0x53,0x95,0x7a,0x80,0x83,0xd3,0x59,0x47,0x6c,0x2d,0xf6,0x1e,0xf1,0x1c,
0xd3,0xfb,0x40,0x72,0x3a,0x03,0xdc,0x02,0x7c,0x3c,0x85,0x01,0xae,0x1a,0xe7,0x56,
0xf0,0xbc,0x07,0x38,0x02,0x04,0xa7,0x30,0xc0,0x4b,0x81,0xff,0x5b,0x17,0x89,0x84,
0x8a,0xd9,0x89,0xa2,0x1c,0x36,0xd4,0x45,0x22,0xe5,0xc0,0x0f,0x38,0xe5,0x3d,0x9a,
0xaa,0xfb,0xe0,0x3a,0xa0,0x2c,0x14,0x0a,0xbd,0x16,0x8b,0xc7,0xed,0x69,0xc1,0xc1,
0xfa,0xb8,0xed,0x6b,0xc0,0x15,0xd3,0x64,0x1f,0xfc,0x20,0x70,0xfb,0x74,0x12,0xd1,
0x57,0x01,0x7f,0xc0,0xf4,0x70,0x74,0x80,0x13,0xcc,0xf0,0x58,0x5d,0x24,0x52,0x39,
0xe5,0x45,0x74,0x5d,0x24,0xe2,0x05,0xfe,0x16,0xe7,0xf4,0x67,0x3a,0x51,0x05,0x10,
0x0f,0x85,0x42,0x1b,0x27,0xfa,0x7c,0x78,0xa2,0xb9,0xe8,0x7a,0xe0,0x4a,0xa6,0x1f,
0x49,0x2d,0xb5,0xca,0x8b,0xd1,0xf0,0x44,0xea,0xde,0xcf,0xe1,0x9c,0xd2,0x4c,0x47,
0x9a,0x0b,0xdc,0x3a,0x95,0x75,0xf0,0x2c,0xe0,0x06,0xa6,0x2f,0x19,0xc0,0x5d,0x7a,
0xa1,0x4f,0x49,0x80,0xaf,0xc7,0x39,0x5c,0x9f,0xce,0x74,0x15,0x23,0x0b,0xf9,0x39,
0xbf,0x00,0xae,0x8b,0x44,0x0c,0xbd,0x2d,0x32,0xa6,0x39,0xc0,0xa5,0x38,0x0e,0x90,
0x29,0xc7,0xc1,0x26,0x4e,0x8c,0xd2,0x59,0x21,0x35,0xe4,0xff,0xcf,0x76,0x3c,0x6d,
0xee,0x7d,0x42,0x08,0x84,0x38,0xab,0xef,0x37,0x81,0xc5,0x13,0x09,0xf0,0x44,0xe9,
0x03,0x17,0x8e,0x6b,0x72,0x4c,0xe4,0x73,0x9b,0x54,0x95,0x05,0x59,0x54,0x37,0x9b,
0x9a,0x8a,0x32,0x4a,0x03,0x3e,0xa4,0x10,0x08,0xc0,0x46,0xa1,0x14,0x24,0x52,0x69,
0xfd,0xc9,0xd0,0xdd,0xdb,0x47,0x5f,0x3a,0xc3,0xf1,0xce,0x2e,0x12,0xc9,0x34,0x96,
0xb2,0xb1,0x6c,0x85,0x52,0x0a,0x21,0x04,0x86,0x10,0x48,0x29,0xf1,0x79,0x5c,0x54,
0x97,0x97,0x12,0xf0,0xb8,0x29,0x09,0xf8,0xf1,0x79,0x5c,0xf8,0xbd,0x1e,0xbc,0x6e,
0x17,0x52,0xff,0x06,0x14,0x96,0x6d,0xd3,0x9b,0x48,0xd3,0x1e,0xeb,0x62,0x77,0xf4,
0x30,0x6d,0xed,0x31,0x7a,0x53,0x99,0xb1,0x32,0x54,0xa4,0x2e,0x12,0x11,0x13,0x15,
0xe7,0x3d,0x51,0x00,0xfb,0x19,0x43,0xf8,0x8a,0xcf,0xed,0x62,0xed,0xf2,0x05,0x5c,
0xb1,0xa4,0x91,0xc8,0x8c,0x2a,0x4a,0x4a,0x02,0x78,0x3d,0x6e,0x4c,0xd3,0x44,0x68,
0x4e,0xb3,0x6d,0x1b,0xcb,0xb6,0xb1,0xb2,0x16,0xd9,0x6c,0x96,0x4c,0x36,0x4b,0x36,
0x93,0xc5,0xb2,0x4f,0x79,0x06,0x2d,0xdb,0xc6,0xb2,0xec,0x53,0x00,0x4b,0x89,0x61,
0x9c,0x12,0x5e,0x86,0x94,0x98,0xa6,0x89,0xcb,0x65,0x62,0x9a,0x26,0xa6,0x69,0x60,
0x18,0x86,0x06,0xd8,0x69,0xc7,0xca,0x66,0x49,0xa5,0x33,0xf4,0xf4,0xf4,0x72,0xe8,
0xf8,0x49,0x36,0xef,0xde,0xcb,0xab,0x9b,0x76,0xd2,0x9d,0x4c,0x8f,0x76,0x58,0x35,
0x1a,0x68,0x6b,0x2a,0x01,0x5c,0x32,0x5a,0x75,0x30,0x27,0x5c,0xc6,0x67,0x6f,0xb9,
0x9a,0x95,0x8b,0x1b,0xa9,0xaa,0x0a,0x13,0xf0,0xfb,0x91,0x52,0x20,0x44,0x7e,0xe4,
0xaa,0x52,0x83,0x05,0xb7,0x52,0x0a,0xdb,0x56,0x58,0xb6,0x85,0x6d,0xd9,0xd8,0xb6,
0x03,0xae,0x42,0xc7,0xcf,0x6a,0xee,0x94,0x86,0xc4,0x90,0x46,0x81,0xf7,0x3a,0xa2,
0x39,0xbf,0x1d,0x47,0x0a,0x5c,0x54,0x9f,0x64,0xd1,0xfc,0x3a,0x3e,0xd1,0x38,0x8f,
0x7f,0xf8,0xd9,0xdb,0x7c,0xd4,0x76,0x62,0x34,0x43,0x0b,0x32,0x81,0x19,0x25,0x13,
0x05,0xf0,0xa8,0x8c,0xab,0xba,0xea,0x72,0xfe,0xf8,0xde,0x4f,0xb1,0x6a,0xd9,0x22,
0xca,0xca,0x4a,0x0a,0x82,0x3a,0x90,0x9c,0xc7,0x62,0xc0,0xdf,0x02,0x29,0xc1,0x3c,
0xcb,0x36,0x9d,0xa3,0x93,0x05,0x81,0x80,0x1f,0xbf,0xdf,0x47,0xb8,0x3c,0x44,0x79,
0x59,0x90,0x67,0x7f,0xf8,0x2a,0x3b,0xa3,0x47,0x47,0x33,0xe7,0x13,0x06,0xf0,0x44,
0x19,0x59,0x23,0x16,0x47,0xe1,0x12,0x3f,0x9f,0xbf,0xeb,0x93,0xac,0x5e,0xb1,0x8c,
0x50,0xa8,0x34,0x1f,0x5c,0x21,0x11,0xa6,0x1b,0x61,0xba,0x41,0x4c,0x40,0xf7,0x87,
0x69,0x4f,0x08,0x41,0x49,0x49,0x90,0x95,0xcb,0x16,0xf1,0xd0,0x5d,0x37,0x32,0xb7,
0x72,0xc4,0xbb,0x9f,0x09,0x3d,0x55,0x9a,0x28,0x0e,0x4e,0x8c,0xc4,0xd8,0x75,0x19,
0x92,0x07,0x6e,0x5a,0xcd,0x55,0x2b,0x97,0x13,0x0c,0xfa,0xf3,0x57,0x63,0x30,0x8c,
0x7b,0xf6,0x02,0x8c,0x40,0xc8,0xd1,0xbf,0xbd,0x31,0xd2,0x6d,0x1f,0x61,0xf7,0x9c,
0x3c,0x37,0xab,0x3f,0x18,0xc6,0x3d,0xbb,0x09,0x23,0xe0,0x80,0x67,0x15,0x68,0xcf,
0xe7,0xf3,0x72,0xd9,0xf2,0x45,0x7c,0xb6,0x23,0xc6,0x93,0xff,0xf8,0x0a,0xc9,0x4c,
0xf6,0x4c,0xaf,0xcd,0x9e,0x03,0xc3,0xbf,0xe8,0x1c,0x9c,0x1c,0x09,0x17,0x5f,0xd6,
0x54,0xc7,0xa7,0xd6,0x5c,0x46,0x59,0x69,0x7e,0x1c,0x80,0x51,0x5a,0x83,0x77,0xfe,
0x4a,0x8c,0xd2,0x4a,0x30,0x4c,0x84,0x61,0x62,0x94,0x56,0xea,0xef,0xaa,0xcf,0xbe,
0x4e,0x29,0xcb,0xb5,0x17,0x06,0xc3,0x84,0xd3,0xb4,0x17,0xf0,0xfb,0xb8,0xee,0xf2,
0x4b,0xb8,0xfe,0x92,0x85,0x67,0x6d,0xb1,0x9f,0x6f,0x00,0xa7,0x39,0x43,0x98,0xac,
0xc7,0x65,0x70,0xfb,0x35,0x97,0x31,0xb3,0xa6,0x2a,0x5f,0x4a,0xba,0x3c,0xb8,0x23,
0x8b,0x11,0xa6,0x1b,0x65,0xdb,0x74,0x1c,0x3c,0x40,0x74,0xeb,0x66,0x3a,0xdb,0x0e,
0x81,0x34,0x71,0x47,0x96,0x20,0x5c,0x9e,0xb3,0x27,0x95,0x5d,0x5e,0xdc,0x91,0x25,
0x20,0x4d,0x4e,0x1e,0x88,0x12,0xdd,0xba,0x99,0xd8,0xe1,0x36,0x94,0x6d,0x23,0x4c,
0xb7,0xee,0xcb,0xe0,0xf6,0xc2,0xe1,0x72,0x6e,0xbb,0xe6,0x32,0x82,0xde,0x33,0xba,
0xda,0x7b,0x26,0x12,0xe0,0x89,0x12,0xd1,0x59,0xa0,0x9d,0xd3,0xc4,0x28,0xd5,0xd5,
0x84,0xb9,0x74,0xf1,0x82,0x41,0xdb,0x97,0xfe,0x4e,0x56,0x46,0x90,0x5e,0x3f,0xca,
0xb6,0x69,0x79,0xeb,0x0d,0x3e,0xfc,0xe7,0xef,0x61,0xf5,0xf5,0x60,0xf8,0x02,0x2c,
0xba,0xff,0x41,0x1a,0xae,0xbc,0x0a,0xb3,0x32,0x42,0xe6,0x48,0xcb,0xd9,0x99,0x94,
0xca,0x08,0xc2,0xe5,0xe1,0xc3,0xd7,0x5f,0xe3,0xa3,0x17,0xbf,0x8f,0x9d,0xec,0xc3,
0xf0,0x07,0x59,0xfc,0xc0,0x7a,0xea,0xaf,0x58,0x8d,0xf4,0x06,0x30,0x2b,0x6b,0xc9,
0x1c,0x3d,0x95,0x95,0x22,0x85,0x60,0xf1,0x82,0x7a,0x96,0xd6,0xcf,0xe1,0x57,0xbb,
0xf7,0x9d,0xee,0xf5,0xf1,0xa9,0xc8,0xc1,0x16,0x4e,0xf6,0xde,0xf0,0xe2,0xf9,0xe2,
0x06,0x2a,0xca,0x0b,0x18,0x2a,0x52,0x62,0x94,0xcf,0x00,0x04,0x1d,0x07,0xa3,0x08,
0x29,0x59,0x70,0xcf,0x7d,0x08,0xc3,0x20,0xdb,0xdb,0xcd,0xae,0xe7,0x9f,0xa3,0xb3,
0xed,0x10,0x46,0x68,0xc6,0xd9,0x31,0xba,0x74,0x7b,0x27,0xf6,0xef,0xe7,0xd8,0xf6,
0x6d,0x2c,0xba,0xef,0x73,0xb8,0xcb,0x2b,0xc9,0xf6,0x74,0xb1,0xf3,0xf9,0x66,0xe2,
0x87,0xdb,0x00,0xe1,0xf4,0x69,0x48,0x7b,0xa5,0xc1,0x00,0xab,0x96,0x34,0x9e,0xc9,
0x49,0x76,0x72,0x22,0x93,0xd9,0x27,0x12,0xe0,0xd3,0x26,0x61,0x35,0xce,0x9b,0x8b,
0x69,0xe4,0x6f,0x6b,0x84,0xe1,0x46,0x7a,0x83,0x28,0xdb,0xe6,0xe0,0x7b,0x5b,0x98,
0xb3,0x6c,0x39,0xb5,0x97,0x5c,0x8a,0xf4,0x3a,0x46,0x58,0xb6,0xb7,0x9b,0x83,0x5b,
0x37,0x21,0xbd,0x01,0x84,0xe9,0x1a,0x77,0x47,0x85,0xe1,0x46,0x78,0xfc,0x44,0xdf,
0xd9,0x48,0xd5,0xc2,0x25,0xcc,0x5b,0x75,0x05,0xa5,0xf3,0x9c,0xf8,0x84,0x6c,0x77,
0x17,0x07,0xb6,0x6e,0x41,0x29,0x85,0xf4,0x95,0xe4,0xb5,0x27,0xa5,0xa4,0xa1,0x76,
0x16,0xa6,0x21,0x4f,0x67,0x41,0x1f,0x99,0x72,0x56,0x74,0x6b,0x34,0x6a,0xd7,0x45,
0x22,0xbb,0xf4,0x00,0x65,0xa1,0x7d,0x6c,0x59,0x49,0xb0,0xe0,0x7e,0x57,0x78,0xfc,
0x08,0x29,0xb1,0x2d,0x9b,0x63,0xef,0x6d,0xa6,0x73,0xaf,0xb3,0x4e,0xb2,0x3d,0x5d,
0xfd,0xbf,0x69,0xdf,0xb5,0x03,0x75,0xeb,0x3a,0x84,0x27,0x80,0xca,0xa4,0xc6,0xb7,
0xe2,0x3d,0x01,0x94,0xad,0x68,0xdf,0xf9,0x1b,0xd2,0x9d,0xed,0x1c,0xdb,0xbe,0x8d,
0xd8,0x87,0xdb,0x4f,0xb5,0xf5,0xc1,0x4e,0xd4,0xad,0xb7,0x21,0xa5,0x44,0xb8,0xfd,
0x79,0xed,0x95,0x04,0x03,0x98,0x86,0x24,0x6b,0xd9,0x63,0x92,0x64,0xe7,0xab,0x0e,
0x06,0xd8,0xac,0x8d,0x2d,0x6f,0x21,0x4f,0x94,0x31,0xcc,0xaa,0x17,0xd2,0xe9,0xa2,
0x6d,0x59,0x64,0xba,0xe3,0xf4,0xb4,0xee,0xcd,0x37,0xd1,0x63,0x9d,0x28,0x14,0x42,
0x9e,0x05,0xc7,0x86,0x34,0xb0,0xb3,0x19,0xb2,0x3d,0xdd,0x64,0x7b,0x7b,0xe8,0xdc,
0xf9,0xde,0xa0,0xc7,0xa9,0xce,0x76,0xed,0x3a,0x13,0xfd,0x7d,0x1b,0xca,0xc5,0x62,
0x78,0x3f,0x46,0x1a,0x27,0xa3,0x63,0xc2,0x68,0x22,0xcf,0x83,0x5b,0x80,0x03,0xc3,
0x3d,0xec,0x4d,0x24,0x0b,0x5a,0x1e,0xca,0xca,0x6a,0xd1,0x69,0x60,0x78,0xfd,0x85,
0xf7,0xcf,0x01,0xc7,0xfb,0xa7,0xec,0xb3,0xe0,0xde,0xb5,0x2d,0x67,0x0b,0xe6,0xf5,
0x15,0x6e,0x2b,0x58,0x9a,0x73,0x9d,0xa1,0xec,0xfc,0x3d,0x6f,0x3a,0x9d,0x19,0xe4,
0x07,0x1f,0x42,0x07,0x70,0xaa,0x09,0x4d,0x4e,0x0e,0xd6,0x99,0xf9,0x72,0xc0,0x67,
0x60,0x4d,0x0c,0x03,0x27,0x82,0xd0,0xcd,0xa9,0x1a,0x19,0x39,0xc3,0x22,0xab,0x3f,
0x1b,0x71,0x32,0xe6,0xf3,0xa8,0x23,0xde,0xd3,0x7f,0x18,0x30,0x08,0xe0,0x74,0x1f,
0xca,0xb6,0x91,0x52,0x52,0xb1,0x70,0x31,0x7d,0x6d,0xf9,0x12,0x2e,0xdc,0xb4,0xc8,
0x39,0xd6,0x4b,0x8d,0x3f,0x99,0xcf,0x4e,0xf5,0x22,0xa5,0xa0,0xbc,0x69,0x11,0x89,
0xa3,0x87,0xf2,0x9e,0x57,0x2c,0xb8,0x18,0x21,0x04,0xca,0xb6,0x51,0xa9,0xbe,0xbc,
0xe7,0xdd,0xbd,0x09,0xd2,0xd9,0x61,0x17,0xda,0xfb,0x40,0x69,0x5d,0x24,0x52,0x31,
0x60,0x9e,0x06,0x8a,0xef,0xac,0xe6,0xf2,0xb4,0xfe,0x3b,0x57,0x3b,0xc4,0xd6,0xf3,
0x68,0x03,0xf6,0x68,0x8c,0x34,0x73,0x18,0x10,0x73,0xe5,0x10,0x82,0x38,0xf5,0x2e,
0xe6,0xe2,0x94,0x0b,0x1a,0xce,0x70,0xc8,0x75,0x24,0xa5,0x3b,0x97,0x1d,0xe0,0x92,
0x93,0xfa,0x7d,0x6e,0x2d,0x9e,0x32,0x14,0x28,0x89,0xb0,0xf7,0xc0,0x61,0x94,0x52,
0x0c,0xf5,0xf2,0xab,0x6c,0x1a,0x3b,0xd1,0x83,0x11,0x0c,0x51,0xbb,0xf2,0x72,0x0e,
0xbf,0xfd,0x73,0xec,0x74,0x6a,0x80,0xce,0xf4,0x32,0x67,0xc5,0x4a,0x54,0xb2,0x07,
0x95,0x1d,0x7f,0xaa,0x93,0xca,0xa6,0x51,0xa9,0x3e,0x6a,0x57,0x5d,0xc1,0xd1,0x8d,
0x6f,0x60,0x67,0x4e,0x9d,0x16,0x49,0xaf,0x8f,0xb9,0x2b,0x2e,0x45,0x48,0x89,0xd5,
0x13,0x47,0x59,0x99,0x21,0xaa,0x46,0x71,0xbc,0x33,0x7e,0x3a,0x43,0xf3,0x04,0x70,
0xa3,0x76,0xfc,0x64,0xf4,0x77,0x39,0xb0,0x0c,0x3d,0x2f,0x6e,0xcd,0x28,0x62,0x00,
0xa3,0xa8,0x21,0x18,0x65,0x81,0x36,0x9c,0xe4,0xb6,0x36,0x20,0x25,0x84,0xc8,0xee,
0x6f,0x6d,0xb5,0x4e,0x0b,0x70,0x5d,0x24,0x52,0x03,0xdc,0x36,0x60,0x65,0x25,0x80,
0x56,0x60,0xbb,0xee,0x5c,0x76,0xc0,0x8a,0xb2,0x01,0x35,0x9a,0xd5,0xa4,0xc3,0x66,
0x6f,0x07,0x56,0x0d,0x7d,0xf6,0xde,0x47,0xfb,0xe8,0x4d,0x24,0x29,0x0d,0x0c,0x11,
0xc3,0xca,0xc6,0xea,0x3c,0x82,0x11,0x2c,0xa3,0x66,0xc1,0x02,0x22,0x37,0xaf,0xa3,
0xf5,0xa7,0x2f,0xa1,0xb2,0x19,0xa4,0xcb,0x4d,0xc3,0xed,0xf7,0x50,0x55,0xdf,0x40,
0xf6,0x70,0x0b,0xa8,0xb3,0xe0,0xe6,0x55,0x36,0x56,0xec,0x28,0x33,0x9b,0x16,0x52,
0x7b,0xd3,0xed,0x44,0x37,0xfc,0xab,0x6e,0xcb,0xc3,0x45,0xeb,0xee,0xa5,0xb2,0x6e,
0x1e,0x28,0x85,0xd5,0x79,0x24,0xaf,0x3d,0xdb,0x56,0x7c,0xd4,0x7a,0x68,0xb8,0x37,
0xc7,0x80,0x6f,0xb6,0x46,0xa3,0x47,0x46,0x29,0x31,0x29,0x20,0x35,0xbd,0x38,0x31,
0x6e,0x11,0x9c,0x28,0x55,0x53,0x29,0x45,0x5d,0x24,0xd2,0x2d,0x84,0x78,0x61,0x20,
0xd0,0xe6,0x60,0x6b,0x56,0xb4,0x2b,0xa5,0xbe,0x9f,0x13,0xa9,0x23,0x01,0x4f,0x17,
0x34,0x93,0x43,0xc4,0x74,0x18,0xa7,0xb0,0x49,0x39,0x4e,0x98,0x4a,0x50,0xaf,0x4c,
0xa5,0xb7,0x4b,0x97,0x0e,0x11,0x4f,0x1c,0xeb,0xe8,0x62,0xdf,0xc1,0xa3,0x2c,0x6f,
0xaa,0xcf,0xf7,0x92,0xb4,0x1f,0xc0,0xac,0x9a,0x8b,0xf4,0x06,0x59,0x76,0xc7,0xdd,
0x54,0x37,0x2e,0x24,0x7e,0xf8,0x10,0xa1,0xb9,0xb5,0xcc,0x5c,0xb0,0x10,0xd2,0x09,
0xb2,0xed,0xa7,0x37,0x4e,0x95,0x52,0xa4,0x13,0x49,0x5c,0x1e,0x0f,0xd2,0x38,0xbd,
0xe9,0x91,0x3d,0x11,0xc5,0xac,0x9c,0xcb,0xf2,0xbb,0xee,0xa1,0xa6,0xe9,0x62,0xe2,
0x87,0xdb,0x28,0xaf,0x8d,0x30,0xa3,0xa9,0x09,0x21,0x0d,0xec,0x44,0x0f,0xd9,0xf6,
0x7c,0x73,0xa2,0x27,0x91,0x60,0xf3,0xae,0x61,0x77,0x83,0xfb,0x80,0x3b,0xeb,0x22,
0x11,0x4b,0x83,0x94,0xd0,0x5e,0xad,0xb8,0xd6,0xcb,0xed,0x7a,0x11,0x64,0x06,0x8a,
0x67,0x8d,0x81,0x35,0xc4,0xd5,0x9b,0xd4,0xbf,0xdd,0x3d,0x00,0x03,0x13,0x30,0x87,
0x72,0xb1,0x18,0xc5,0x6a,0xca,0xbd,0xc4,0x85,0x53,0x5c,0xa4,0x1e,0xa7,0xce,0x95,
0x39,0x44,0x5c,0xa7,0x75,0x67,0x4f,0x02,0x9d,0x40,0x17,0x4e,0x2d,0xaa,0x9c,0x93,
0xdd,0x0d,0xbc,0x0c,0x5c,0x3b,0xb4,0x8d,0xf5,0xeb,0xd6,0xf2,0xc7,0x9f,0x59,0x57,
0xd0,0xa2,0x36,0x4a,0xaa,0xf0,0x34,0x5c,0x72,0xca,0x25,0xa9,0xc5,0xb9,0xca,0xa4,
0x48,0x7e,0xfc,0x1e,0x76,0xf7,0xe9,0xcf,0x64,0x0f,0xed,0x69,0xe5,0xc3,0x37,0x7e,
0xcd,0x8c,0x85,0x17,0xb1,0xe8,0xaa,0x4b,0xcf,0x78,0x04,0x69,0x94,0x56,0xe3,0xa9,
0xbf,0x04,0xe1,0x72,0xf7,0xb7,0x05,0xa0,0x32,0x29,0x52,0x1f,0x6f,0xc5,0xea,0x6e,
0xcf,0xdf,0x26,0xec,0x6c,0xe1,0x0b,0x4f,0xfc,0x6f,0x12,0xe9,0x4c,0x21,0xff,0xf3,
0x27,0x71,0x52,0x66,0x73,0x25,0x9d,0x3c,0x38,0x41,0x88,0xa5,0x38,0x81,0xf1,0x55,
0x9c,0xaa,0x16,0x94,0xc3,0x46,0x69,0x30,0xf7,0xeb,0x05,0xd2,0x39,0x1a,0xe6,0x3b,
0xad,0x91,0xa5,0xc3,0x3b,0xbd,0x38,0xf5,0xa1,0x16,0x31,0x38,0x1a,0xf0,0x30,0x4e,
0xea,0xe7,0x3b,0x43,0x0c,0x82,0x91,0x88,0xec,0x84,0xae,0x73,0xb5,0x61,0xc8,0x3b,
0x79,0xf9,0x8d,0x4d,0xdc,0xba,0xe6,0x32,0xe6,0x47,0x66,0xe7,0x2b,0xb0,0xee,0x13,
0x24,0xf7,0x6c,0xc6,0x3d,0xbb,0x11,0x19,0x70,0xe2,0xc7,0xed,0xde,0x4e,0xe7,0x74,
0xa7,0xb7,0xf3,0x8c,0xdc,0xdb,0x17,0xef,0xc6,0x4a,0xa5,0xe9,0x39,0xd9,0x59,0xd0,
0x98,0xcb,0x6b,0xaf,0xeb,0x38,0xc9,0xbd,0x9b,0x70,0xcf,0x1a,0xd0,0x5e,0x4f,0x27,
0xe9,0xc3,0x85,0xdb,0xcb,0x5a,0x16,0x3f,0x7f,0x67,0x5b,0x21,0x70,0x15,0x4e,0x3d,
0xce,0x77,0x5b,0xa3,0xd1,0x81,0x66,0x77,0x9f,0x06,0x6c,0x38,0x43,0x36,0x27,0x11,
0x03,0x38,0x49,0x6c,0x6b,0xf4,0x02,0x00,0xb0,0xeb,0x22,0x91,0xa3,0x38,0xf5,0xbc,
0x8e,0x02,0x99,0xd6,0x68,0xb4,0xa0,0x65,0x37,0x68,0x94,0xba,0x6a,0xea,0x12,0x9c,
0xda,0x53,0x1e,0xbd,0x5a,0xf6,0x03,0x3b,0xb5,0x48,0xc8,0xe2,0x54,0x83,0x1b,0x97,
0xab,0x4d,0x4b,0x83,0x2f,0xe1,0x94,0x05,0x1c,0x64,0x70,0xdd,0x71,0xf5,0x0a,0x1e,
0x59,0xff,0x69,0x02,0x3e,0xef,0x30,0xae,0x26,0xd9,0xbf,0xdf,0x55,0xb6,0x35,0x62,
0xbd,0x9b,0x4e,0xa6,0x38,0x7e,0xe0,0x30,0xa1,0xea,0x30,0xc1,0x50,0xe9,0x28,0x5c,
0x5b,0x23,0x6b,0x6f,0xe7,0x9e,0x56,0x1e,0x7a,0xec,0x59,0xe2,0xbd,0x79,0x39,0xdf,
0x87,0x80,0x6b,0x5b,0xa3,0xd1,0x71,0xe7,0x42,0x0f,0x30,0x80,0x73,0x52,0x74,0x29,
0x4e,0x08,0x90,0xd0,0x62,0x7e,0x63,0x6b,0x34,0x7a,0x68,0x58,0x80,0xeb,0x22,0x11,
0xb7,0x36,0x80,0x76,0x01,0xdd,0xa3,0x11,0x05,0x63,0xe8,0xac,0x1b,0xf8,0x2e,0xf0,
0xd0,0x40,0x7d,0x6c,0x1a,0x92,0x2f,0xfd,0xce,0x2d,0xdc,0x77,0xeb,0x75,0xb8,0x5d,
0xe3,0xf7,0xc3,0xd8,0x7a,0x4f,0x9a,0x8b,0xaf,0xca,0x71,0xb4,0x6d,0x59,0x18,0xe6,
0xd9,0xf1,0xf3,0xc4,0xba,0x7b,0xf9,0xda,0x33,0xdf,0xe3,0xf5,0xad,0xbb,0x0b,0x89,
0xe6,0xff,0x00,0xfc,0xe8,0x5c,0xcd,0xe3,0x80,0x52,0xc6,0xd5,0x40,0x8d,0x61,0x18,
0xef,0x7d,0xbc,0x6f,0x9f,0x3d,0x6a,0x1d,0x7c,0x8e,0x40,0xf6,0x03,0x7f,0x05,0xfc,
0xc7,0x81,0xea,0xc2,0xeb,0x36,0xf9,0xa3,0x7b,0x6f,0xe6,0xde,0x9b,0xae,0xc6,0xef,
0x1d,0xdf,0x31,0xe0,0x89,0x43,0x47,0xe8,0xe9,0xec,0xa2,0x6e,0x71,0x63,0xbf,0x58,
0x6e,0x6f,0x3b,0x46,0x57,0x7b,0x07,0xf5,0x4b,0x9b,0x40,0x8c,0x6f,0x0a,0x7a,0x13,
0x49,0xfe,0xe6,0xc5,0x57,0xf8,0xfb,0xff,0xf7,0x16,0xb6,0x1a,0x84,0x61,0x0a,0xf8,
0x0a,0xf0,0xd4,0x70,0xe2,0x73,0x22,0xa8,0xa8,0x81,0xe8,0xb1,0x78,0x3c,0x13,0x0a,
0x85,0x5e,0xd3,0xc6,0xd9,0xaa,0x9c,0xb8,0xce,0x5a,0x36,0x9b,0x76,0xed,0xa5,0x23,
0x16,0xa7,0x7e,0xf6,0x0c,0x4a,0x02,0xfe,0x33,0xea,0xcc,0xe1,0xc8,0xe3,0xf3,0x71,
0x70,0xf7,0x1e,0x92,0xbd,0x09,0x84,0x94,0x74,0x1c,0x3d,0xce,0xc1,0x9d,0x2d,0xcc,
0x5b,0xb6,0x10,0xd7,0x38,0x16,0x8f,0x52,0xd0,0x1e,0x8b,0xf3,0xd7,0x2f,0xfc,0x94,
0xef,0x6f,0xd8,0x38,0x14,0xdc,0x5e,0xe0,0xbf,0x00,0x4f,0x17,0x13,0xdc,0xa2,0x03,
0xac,0x41,0xce,0x86,0x42,0xa1,0x7f,0xd7,0x5e,0x9e,0x15,0x7a,0x8b,0x25,0x6c,0xa5,
0xd8,0xbd,0xbf,0x8d,0x37,0x37,0x6f,0xc7,0x65,0x4a,0xc2,0xa1,0x12,0xfc,0x3e,0x2f,
0x72,0x94,0x40,0x4b,0x43,0x52,0x39,0x77,0x26,0x89,0x9e,0x3e,0x3a,0x8f,0x1c,0x47,
0x48,0x41,0xfd,0xf2,0x45,0xf8,0x4a,0x02,0x63,0x04,0x56,0x91,0x4c,0x67,0x78,0x67,
0xfb,0x07,0x3c,0xf1,0xdc,0x8b,0xbc,0xb6,0x79,0xc7,0x40,0x70,0x95,0x36,0x3e,0xd7,
0x03,0xff,0x54,0x6c,0x70,0x8b,0x2e,0xa2,0x0b,0x88,0xec,0x1a,0xe0,0x4f,0xf5,0x04,
0x55,0xe4,0xfa,0x27,0x85,0x60,0x46,0x45,0x29,0x37,0x5d,0xb1,0x9c,0xd5,0xcb,0x2f,
0xa6,0xa1,0x76,0x16,0xe5,0xa5,0x41,0x27,0xf4,0x75,0x14,0x80,0x8f,0xc4,0x7a,0x2e,
0xa8,0xc7,0x95,0xc2,0xb2,0x2c,0x8e,0x77,0xc4,0xd9,0xb9,0x67,0x3f,0x3f,0x7e,0xf3,
0x5d,0xde,0xdd,0xfd,0x31,0xc9,0xf4,0x20,0x5f,0x74,0x37,0x4e,0x35,0xdc,0xc7,0x5b,
0xa3,0xd1,0xb6,0xc9,0x32,0xa7,0x62,0x02,0x40,0xcb,0x79,0x5f,0xec,0x51,0x38,0x4e,
0xea,0x81,0xdf,0x07,0xee,0xc3,0x89,0x02,0xe9,0x97,0x34,0x1e,0x97,0x41,0x79,0x30,
0xc0,0xd2,0xf9,0xb5,0x2c,0x5f,0x50,0xcf,0xdc,0x19,0x55,0x54,0x55,0x94,0x11,0x2a,
0x09,0x12,0xf4,0x7b,0xf1,0x7b,0x1d,0x2e,0xef,0x07,0x52,0x14,0x1e,0xa8,0x2a,0xf0,
0x87,0xc2,0x89,0x7b,0x4e,0xa4,0xd2,0xf4,0xf6,0x25,0x89,0x75,0xf7,0x70,0xbc,0x23,
0xce,0x81,0x23,0xc7,0xd8,0xbc,0x6b,0x0f,0x3b,0xf6,0x1e,0xa4,0xa3,0xbb,0x17,0xcb,
0x56,0x03,0xf7,0xfd,0x71,0xe0,0x47,0xc0,0x33,0xc0,0x8e,0xc9,0xc0,0xb5,0x13,0x02,
0x70,0x43,0x7d,0xbd,0xb0,0x2c,0xeb,0x26,0x9c,0x7a,0xcb,0x41,0xbd,0x5d,0x78,0x1b,
0x78,0x73,0x24,0x17,0x56,0x68,0xa0,0x2b,0x70,0xaa,0xbe,0xdf,0xa9,0xf7,0x81,0x65,
0x43,0xb7,0x55,0x52,0x08,0xfc,0x1e,0x17,0x3e,0x8f,0x0b,0xd3,0x30,0x70,0xbb,0x4c,
0xaa,0xcb,0xcb,0x98,0x11,0x0e,0xe1,0xf1,0xb8,0x71,0xbb,0x4c,0xdc,0xa6,0x89,0x69,
0x9e,0x3a,0xc6,0x53,0x80,0x65,0x59,0x64,0x2d,0x9b,0xac,0x65,0x91,0xc9,0x66,0x49,
0xa7,0xb3,0x9c,0x88,0x75,0x71,0xec,0x64,0x8c,0x44,0x3a,0x8d,0x65,0xd9,0x24,0x52,
0x19,0xfa,0x52,0xe9,0x81,0x80,0xe6,0x7c,0xca,0x7d,0x38,0xc7,0x9f,0x3f,0x06,0x5e,
0x02,0xda,0x26,0x1b,0xb0,0xe7,0x1c,0x60,0xbd,0x0d,0xfa,0x89,0x76,0xae,0x23,0x0c,
0x83,0x4f,0xac,0xfb,0xdd,0x4c,0xd7,0x89,0xa3,0x3b,0xf7,0xfe,0xf2,0xb5,0xaf,0x01,
0x1b,0x86,0x6c,0xfc,0x39,0x83,0xd3,0x25,0xa4,0xfd,0xae,0xab,0xb5,0xab,0x73,0xb1,
0xf6,0x02,0xe5,0x0e,0x46,0xce,0xf6,0x58,0x06,0xba,0x08,0x7b,0x70,0x0a,0x90,0x6f,
0xd5,0xce,0x9d,0x5f,0xe2,0x94,0x62,0xcc,0x4c,0x96,0xbb,0x24,0x8a,0x22,0xa2,0x1b,
0xe6,0x37,0x36,0x19,0x1e,0xef,0x33,0xe9,0xee,0xf8,0x1a,0x21,0xa5,0x6b,0xc5,0x5d,
0x0f,0x90,0x4d,0xa7,0x39,0xb4,0xfb,0xfd,0x44,0xef,0xc9,0x13,0x4f,0x26,0x3a,0xdb,
0x1f,0x6f,0x8d,0x46,0x53,0xa3,0x5c,0x38,0x42,0x73,0xb1,0x17,0xe7,0x94,0xab,0x11,
0xa8,0x4f,0xa7,0xd3,0x77,0x5b,0x96,0x75,0xb9,0x70,0x28,0xe7,0x5c,0x3f,0xe3,0x00,
0x55,0xce,0x24,0xa6,0x3f,0x35,0xc5,0x72,0xbb,0xdd,0x2f,0x1a,0x86,0xb1,0x09,0xe7,
0xfc,0x76,0x2f,0x4e,0x14,0x46,0x9f,0xf6,0x0b,0xd8,0x9c,0x47,0x74,0x4e,0x01,0xfe,
0xdb,0x8f,0x3a,0x3d,0x99,0x54,0xf2,0x9e,0xef,0x7e,0xfa,0x86,0x74,0xa6,0xaf,0xe7,
0x6b,0xc0,0xc5,0xee,0x92,0x32,0xf1,0x99,0xc7,0x9e,0x61,0xff,0x6f,0xb6,0x64,0xde,
0x6e,0xfe,0xee,0x37,0x11,0xe2,0x2f,0x46,0xca,0xc9,0x05,0xb7,0x01,0x86,0x21,0x95,
0x52,0xbf,0x07,0x3c,0x65,0x48,0x59,0x62,0xba,0x5c,0xb8,0x4c,0xd3,0x31,0xc0,0xa4,
0x74,0x74,0x71,0x01,0xa0,0x15,0xa0,0x6c,0x1b,0xcb,0xb2,0xc8,0x64,0x32,0xa4,0xd3,
0x69,0x2c,0xbb,0x3f,0x41,0x6d,0xb7,0x94,0xf2,0x33,0x96,0x65,0x6d,0xe7,0x3c,0xa7,
0x73,0x0a,0x70,0x73,0x4b,0x6c,0x11,0xf0,0x54,0x36,0x93,0xbe,0xf5,0x1b,0xb7,0xac,
0x0c,0x01,0xcf,0x02,0x77,0x94,0xcd,0xae,0x93,0xb6,0x6d,0xe1,0xf6,0x05,0x92,0xdd,
0xc7,0x8f,0x3c,0x90,0xee,0x89,0x8f,0xd9,0xd3,0x53,0x53,0x5d,0x7d,0x0b,0x42,0xbc,
0xe0,0x76,0xb9,0x82,0x39,0x6f,0xd5,0x68,0x2d,0xe5,0x5c,0x52,0x59,0x26,0x93,0xa1,
0xaf,0xaf,0x8f,0xee,0x9e,0x1e,0x94,0x52,0xbb,0xa4,0x94,0x37,0x5b,0x96,0x75,0xf0,
0x7c,0x06,0xf8,0x5c,0x87,0xec,0x5c,0x0f,0xac,0x34,0x5d,0xee,0x19,0xad,0xd1,0xe8,
0x31,0xed,0xb1,0xda,0x10,0x6f,0x6b,0x55,0x28,0xc5,0xfd,0x8f,0x3f,0xed,0x5d,0x76,
0xf3,0x5d,0x4f,0xa0,0xd4,0x98,0x6a,0x3a,0xd6,0x45,0x22,0x61,0x9f,0xcf,0xf7,0xa4,
0xcf,0xeb,0x0d,0x1a,0x86,0xd1,0x9f,0x1c,0x36,0xea,0x55,0xae,0xb3,0x0d,0x3d,0x1e,
0x0f,0xe5,0xe5,0xe5,0xcc,0x9c,0x31,0x03,0x8f,0xdb,0x7d,0xb1,0x6d,0xdb,0x5f,0x37,
0x0c,0xc3,0xbc,0x00,0x70,0x61,0xee,0x95,0x38,0x97,0x66,0x78,0xd1,0x75,0xb1,0x5a,
0xa3,0xd1,0x2e,0xe0,0x8b,0x40,0xb4,0xaf,0xe3,0x04,0x5b,0x7e,0xf6,0x32,0x27,0x0f,
0x1f,0x68,0x10,0xd2,0x78,0x7c,0x5e,0x5d,0x9d,0x67,0x94,0xe0,0x0a,0xe0,0xb3,0x40,
0xd3,0xd9,0xee,0xbb,0xcb,0xe5,0xa2,0xaa,0xaa,0x4a,0x78,0x3d,0x9e,0x7b,0x94,0x52,
0x2b,0x2f,0x00,0x5c,0x80,0xd6,0x37,0x86,0x6c,0xe0,0x6f,0x80,0x47,0x80,0x77,0x07,
0x3c,0x8a,0x02,0x7f,0x69,0xa5,0x53,0xd9,0x8d,0x7f,0xff,0x34,0xc7,0x5a,0x76,0x8b,
0x75,0x5f,0xfd,0xd6,0x7d,0x0b,0xae,0xbb,0xf5,0xcb,0x75,0x91,0xc8,0x68,0x02,0x9b,
0xbd,0xc0,0x03,0xe7,0x6a,0x0c,0x86,0x61,0x10,0x0e,0x87,0x7d,0xa6,0x69,0xde,0x6f,
0x18,0x86,0xbc,0x00,0x70,0x61,0x90,0x77,0xaf,0x6f,0x0c,0x7d,0x67,0x7d,0x63,0xa8,
0x3b,0xf7,0x9d,0xd6,0xb5,0x3f,0x00,0xfe,0x3d,0x27,0x1e,0x67,0x34,0x34,0xba,0xe6,
0x2e,0x5c,0xfa,0xe7,0xc0,0xb7,0x46,0x52,0x9d,0xb5,0x76,0xee,0x5c,0xa1,0x94,0xba,
0x18,0xe7,0x9e,0xa4,0xd1,0x6c,0x7b,0xf6,0x6b,0xc7,0xc4,0x88,0xc8,0x34,0x4d,0x42,
0x65,0x65,0x37,0xb8,0x5c,0x2e,0xef,0x05,0x23,0x6b,0xf4,0xfa,0xf3,0x1a,0xe0,0x15,
0x10,0x7e,0x5f,0x45,0x25,0x56,0x26,0xcd,0xbc,0x4b,0x57,0xdb,0x86,0xe9,0xda,0xfe,
0xe1,0x1b,0xaf,0xfc,0x95,0x9d,0xcd,0xfc,0x14,0x27,0x1a,0x24,0x17,0x51,0x28,0x01,
0xb7,0x90,0xc6,0xa2,0x92,0x19,0x73,0x6e,0x3f,0x79,0x28,0xfa,0x80,0x4b,0x52,0x3b,
0x9c,0x77,0xb1,0xc0,0xe2,0x4d,0xe1,0x44,0x91,0x7c,0x0a,0xa7,0x18,0x6a,0x21,0xc3,
0x3a,0x6f,0x3e,0x6c,0xdb,0xee,0x4b,0xa7,0xd3,0x4d,0x47,0x8f,0x1d,0x3b,0x2f,0x8d,
0xad,0x62,0x1a,0x10,0x1b,0x81,0x66,0x50,0x7f,0x94,0xe8,0x38,0x21,0x0d,0xb7,0x87,
0xc5,0xd7,0xde,0x24,0x67,0xcd,0x6f,0x5a,0x7e,0x60,0xc7,0x96,0xe7,0xca,0x67,0xd5,
0xc6,0xaa,0xeb,0x2e,0xda,0xb9,0x7d,0xc3,0xbf,0x1c,0x06,0xa1,0x16,0xae,0xbd,0xa5,
0xea,0xe0,0xae,0x6d,0x0b,0x12,0x9d,0x27,0x6b,0xee,0xfe,0xca,0x13,0xee,0x7f,0xfb,
0x3f,0x4f,0x8b,0xb6,0xf7,0x7e,0x55,0xe8,0xbd,0x1f,0x69,0x35,0x70,0x63,0x01,0x00,
0x7b,0x71,0x7c,0xc6,0x43,0xc9,0x02,0xde,0x04,0xae,0x19,0x3a,0x27,0x52,0x4a,0xd3,
0xeb,0xf5,0xce,0x66,0x12,0x94,0xe7,0x1f,0x93,0xaa,0x29,0x56,0xc3,0xb1,0x78,0xdc,
0x0e,0x85,0x42,0x9b,0xb4,0x77,0x2a,0xa2,0x2c,0x8b,0x7d,0xdb,0xde,0xa5,0x75,0xc7,
0x36,0x62,0x87,0x5a,0xe5,0x9a,0xfb,0xff,0xd0,0xbf,0xe2,0x53,0x77,0xd4,0xb5,0xee,
0xfa,0xcd,0x92,0xd0,0xac,0xda,0x25,0xbf,0xf5,0xf0,0x57,0x1a,0x82,0xe1,0xea,0xb2,
0x0f,0xde,0xda,0x60,0x26,0x93,0x09,0xb1,0xff,0xfd,0x2d,0x90,0x9f,0xa6,0x62,0x01,
0x7f,0xa6,0xf5,0xf3,0x50,0xe3,0x28,0x8b,0x53,0x08,0xb5,0x41,0x83,0x2f,0x86,0x70,
0xfc,0x7f,0xc5,0xf1,0x7b,0x47,0x0a,0x48,0x83,0x97,0x62,0xf1,0xf8,0xde,0xf3,0x11,
0xe0,0xa2,0x9f,0x26,0xd5,0x45,0x22,0x11,0xad,0x93,0x57,0x0d,0xec,0x8f,0x3b,0x58,
0x8a,0xaf,0xac,0x82,0xee,0xa3,0x87,0x40,0x08,0xca,0x6b,0x1b,0xe8,0xed,0x38,0x41,
0x32,0x76,0xd2,0x39,0xb2,0x4b,0x26,0xf1,0xf9,0xf2,0xb2,0x0f,0xba,0x70,0xae,0x7e,
0xfd,0x2a,0xf0,0x85,0x21,0xcf,0x92,0xc0,0x65,0x1a,0xdc,0x27,0x87,0x8c,0x3d,0x0b,
0xfc,0x36,0x4e,0xec,0xd3,0x77,0x86,0x88,0xf7,0x0c,0x70,0x77,0x6b,0x34,0xfa,0x93,
0x0b,0x46,0xd6,0x18,0xa8,0x35,0x1a,0x8d,0x02,0x77,0xe0,0x1c,0xb5,0xf5,0xb3,0x64,
0xba,0xa7,0x8b,0x78,0x5b,0x2b,0xb6,0x95,0xc5,0xce,0x66,0x38,0xb9,0xef,0x43,0x92,
0xb1,0x33,0x96,0x6a,0x38,0x88,0x13,0x3b,0x36,0x56,0xda,0xaa,0xc1,0x9e,0x32,0x34,
0x29,0xcc,0x7f,0xed,0x04,0x59,0x0f,0xdc,0x05,0xbc,0xca,0xa9,0x2b,0x5f,0x87,0xb3,
0x86,0xb3,0x42,0x88,0x42,0xcf,0x8f,0x73,0xe6,0x22,0x27,0xa7,0x1b,0xf3,0x01,0xa6,
0xd8,0x55,0x3f,0x93,0xc6,0x4b,0xd3,0x1a,0x8d,0x66,0x70,0xae,0x8e,0xfd,0x39,0xa7,
0xc2,0x44,0x2f,0xd6,0x7a,0xd1,0xaf,0x45,0x65,0x0c,0x68,0x13,0x42,0xb4,0xb8,0xdd,
0xee,0xbb,0x81,0xbb,0x87,0xbc,0x26,0xcd,0xf8,0xb2,0xe7,0x7b,0x99,0xc0,0xec,0xfb,
0x69,0x05,0xf0,0x00,0xa0,0xd3,0x38,0x99,0x88,0x2d,0x03,0x62,0x84,0x73,0xfa,0xd2,
0xd6,0xb9,0xc6,0x52,0x4a,0x39,0x1d,0x0b,0x8b,0x9f,0xff,0x00,0x0f,0x01,0x5b,0x31,
0xb5,0x6f,0x47,0x9b,0x1e,0x3a,0x78,0x02,0xc9,0xbe,0x00,0xf0,0xd4,0x26,0x75,0x01,
0xe0,0x0b,0x74,0x01,0xe0,0xc9,0x4a,0x86,0xc7,0x2b,0xee,0xfc,0xda,0x77,0xdc,0x9e,
0xb2,0x8a,0xbc,0x71,0x49,0xd3,0x25,0x6e,0x7b,0xe4,0x1b,0x0d,0x4d,0xd7,0xfd,0x56,
0xfe,0xd9,0xb3,0x10,0xd4,0x34,0x2d,0x73,0x5f,0xf1,0xc0,0x17,0x3c,0xe3,0xcd,0x74,
0xb8,0x00,0xf0,0x38,0xa9,0xb9,0x25,0x66,0x3c,0xfc,0x4f,0xaf,0x79,0xfc,0xe1,0xea,
0x3c,0x03,0x71,0xe9,0x2d,0xbf,0xbd,0x62,0xe1,0x95,0xd7,0xbc,0x76,0xcd,0xef,0x7d,
0xe1,0xde,0xa1,0xcf,0x3c,0xa5,0xe5,0x9e,0x79,0x4b,0x57,0xfc,0x70,0xf1,0xda,0x9b,
0x1e,0x16,0xd2,0x18,0x84,0xa2,0x3b,0x50,0x62,0xde,0xfa,0xf0,0x57,0x9e,0x5d,0x73,
0xcf,0x03,0xbf,0xf0,0x95,0x57,0x0e,0x3a,0x39,0x12,0xd2,0x10,0x97,0xdc,0x79,0x7f,
0x4d,0x73,0x4b,0x2c,0xd0,0xdc,0x12,0x73,0xeb,0x73,0xee,0x0b,0x56,0xf4,0x59,0x04,
0xd4,0xc4,0x49,0xa1,0x5c,0x82,0xe3,0x6a,0x5c,0x5e,0x12,0xae,0x5a,0xb6,0xe6,0xfe,
0x87,0x16,0xbc,0xfa,0xd4,0xa3,0x83,0x7e,0xeb,0x0b,0x96,0x84,0x41,0x84,0x5d,0x1e,
0x6f,0x21,0x26,0x05,0x21,0xdc,0x05,0x23,0x3e,0x84,0x44,0x9a,0x46,0xa5,0x90,0xb2,
0x52,0x1a,0x83,0x8f,0xa4,0x5d,0xfe,0x80,0xf9,0x89,0x1b,0x6f,0x7b,0x06,0xf8,0x3a,
0x4e,0xc2,0xf5,0xfb,0xcd,0x2d,0xb1,0xf7,0x70,0xce,0xb8,0x0f,0x02,0x69,0x7d,0xf6,
0x7d,0x01,0xe0,0x51,0x80,0xea,0xc2,0x29,0x51,0x70,0xa3,0xfe,0x5c,0x85,0x13,0x23,
0x6d,0xe6,0xa4,0x8e,0x34,0x26,0xea,0x9c,0x44,0x20,0x84,0x70,0xe3,0xa4,0x69,0xd6,
0x00,0x6b,0xf5,0xd6,0x2d,0x85,0x13,0x71,0xf9,0x7a,0x73,0x4b,0xec,0x67,0x38,0xe1,
0xb4,0x3d,0x93,0x0d,0x6c,0x73,0x12,0x81,0x2a,0x70,0x2a,0xc3,0xdf,0x02,0xfc,0x2e,
0x70,0x35,0x4e,0xc0,0xbc,0x51,0x5c,0x7b,0x58,0x15,0x6a,0xca,0xc0,0xf1,0xae,0x2d,
0xd5,0x9f,0x2f,0xe2,0x04,0xf6,0xbf,0xd4,0xdc,0x12,0x7b,0x1e,0xd8,0xb9,0xbe,0x31,
0x34,0x29,0x2e,0xbf,0x96,0x93,0x04,0xdc,0x72,0xe0,0x61,0x60,0x13,0xce,0xa1,0xc3,
0x6d,0x38,0x59,0x0c,0xc3,0xb2,0x69,0x3a,0x95,0x7f,0xb9,0xb6,0x3c,0x0b,0x85,0xd0,
0x8c,0x21,0x39,0xc9,0x56,0x2a,0x45,0xa2,0xeb,0x8c,0x41,0x20,0x2e,0x9c,0x4a,0x08,
0x7f,0x8a,0x73,0xce,0xfd,0xcf,0xcd,0x2d,0xb1,0xab,0xb5,0x24,0x9a,0xbe,0x00,0x37,
0xb7,0xc4,0xcc,0xe6,0x96,0xd8,0x3a,0x9c,0x4c,0x81,0x6f,0xe3,0x84,0xe0,0x9c,0x51,
0xaa,0x58,0xd9,0x0c,0x07,0x76,0x6e,0xcb,0x13,0xa5,0xa5,0x55,0x35,0x63,0x4e,0x33,
0x75,0xc4,0xbe,0x49,0x75,0xc3,0xe0,0x28,0x20,0x2b,0x93,0xe2,0xe3,0x6d,0x9b,0xb0,
0x47,0x56,0x64,0x4d,0x00,0x3e,0x9c,0xd3,0xb1,0x0d,0xc0,0x73,0xcd,0x2d,0xb1,0x3a,
0x2d,0x9d,0xa6,0x17,0xc0,0xcd,0x2d,0xb1,0x00,0xf0,0x2d,0xe0,0x05,0x9c,0x1a,0x20,
0x23,0x62,0x3f,0xa5,0x14,0xd1,0x1d,0xdb,0x68,0xdd,0xb2,0x71,0x88,0x95,0x1c,0x62,
0xd6,0xfc,0x85,0x67,0x4e,0xe8,0x56,0xea,0x34,0x00,0x1b,0x34,0xae,0xba,0x1a,0x21,
0x07,0x4f,0xcb,0xf6,0x0d,0x2f,0x71,0x74,0xdf,0x9e,0xd1,0x0e,0xd1,0x07,0xdc,0x0f,
0xbc,0x0e,0x7c,0xb2,0x58,0xd6,0xb7,0x2c,0x12,0xb8,0x5e,0x9c,0x20,0xf8,0x87,0x71,
0x6a,0x81,0x8c,0x88,0xac,0x4c,0x86,0x7d,0xdb,0x36,0xf1,0xca,0xff,0x7c,0x9c,0x4c,
0x5f,0xcf,0x00,0x23,0x58,0xb2,0xe2,0xf6,0xdf,0xa1,0x3a,0x32,0xef,0x8c,0xec,0xa5,
0x0a,0x28,0x70,0xa7,0xec,0x8d,0x13,0x53,0xbd,0x60,0xd5,0x55,0xcc,0x59,0x36,0xb8,
0x8c,0x57,0xa2,0xb3,0x9d,0x0d,0xcf,0x3e,0xc9,0xd1,0x7d,0x7b,0xfa,0x4b,0x42,0x8c,
0xd8,0x42,0x73,0x44,0xf7,0x0f,0x80,0x9b,0x8b,0xc1,0xc9,0xb2,0x08,0xe0,0x0a,0xe0,
0xf3,0xda,0x90,0x1a,0xb1,0xd2,0x3c,0xb6,0x7f,0x2f,0x3f,0xf9,0x5f,0x4f,0xf0,0xc3,
0xbf,0xf8,0x4f,0xc4,0xdb,0x5a,0x07,0x6c,0x63,0x82,0x5c,0xf6,0xe9,0xcf,0x71,0xe5,
0xdd,0xf7,0x21,0x75,0x8c,0xba,0x2a,0xc0,0xa5,0x42,0x1a,0x18,0x2e,0x17,0x86,0x61,
0xe6,0x71,0xa8,0x6d,0x59,0x64,0x75,0x45,0xbb,0x40,0xa8,0x82,0x5b,0x1f,0x7e,0x84,
0xba,0x55,0xd7,0xf6,0xbf,0x0f,0xe0,0xf0,0x8e,0x2d,0xfc,0xe3,0x57,0xbf,0xc8,0xaf,
0x7e,0xf4,0x3c,0xe9,0x44,0x62,0xb4,0xc3,0x2e,0x07,0xfe,0x9a,0x71,0x5c,0x0e,0x76,
0x3e,0x71,0x70,0x09,0x4e,0x85,0x9d,0x11,0x5b,0xf0,0xb6,0x65,0xb1,0x75,0xc3,0xcb,
0x7c,0xf0,0xfa,0x06,0x6c,0x4b,0xe1,0x0a,0x94,0xe3,0x0d,0xcf,0xa6,0xe1,0xba,0x4f,
0x73,0xc7,0x9f,0x3f,0xc5,0xda,0x07,0xfe,0x10,0x6f,0xb0,0xa4,0xdf,0xea,0x4d,0x74,
0xe7,0x1b,0x45,0x15,0x73,0x22,0xb8,0x7d,0x01,0x82,0x15,0x61,0xcc,0x21,0x45,0x4d,
0xb3,0xa9,0x3e,0xba,0x3b,0x4e,0xd5,0xbd,0xaa,0x9c,0x13,0xe1,0xee,0x3f,0xfb,0x3a,
0x9f,0xfc,0x93,0xc7,0x98,0xb9,0xfc,0x3a,0x3c,0x65,0xd5,0x98,0xfe,0x32,0x52,0xdd,
0xdd,0xbc,0xf3,0xe2,0xf3,0x1c,0x3f,0xb0,0x7f,0x2c,0xe3,0x9e,0x03,0x7c,0xee,0xb9,
0x09,0xe6,0xe2,0x62,0x6c,0x93,0x1a,0x38,0x4d,0x69,0xff,0xe1,0x74,0xe3,0x9a,0x7b,
0x3f,0xcb,0xbc,0x4b,0x6f,0xa0,0xb7,0xd7,0xc6,0xf4,0xf8,0xf0,0x95,0x55,0xe0,0xf6,
0xfa,0x31,0x4c,0x83,0x9e,0x5e,0x28,0x2b,0x73,0xb2,0xf7,0xad,0x4c,0x86,0xe8,0x8e,
0x6d,0x43,0xb8,0x57,0xb2,0x78,0xed,0xcd,0x18,0xa6,0x49,0x78,0x76,0x2d,0x33,0x17,
0x2e,0x23,0xba,0xf9,0x97,0xa7,0xd4,0xb2,0x65,0x11,0xdd,0xbe,0x95,0xc6,0x95,0xab,
0x91,0x86,0x81,0x65,0x29,0x7a,0x53,0x1e,0xaa,0x9b,0xae,0x66,0xed,0xfc,0x2b,0x49,
0xf6,0xc4,0x49,0x76,0xc7,0xb1,0x33,0x49,0xca,0x2b,0x83,0xcc,0x6c,0xb8,0x68,0x6c,
0x1b,0x6a,0xb8,0x5c,0x39,0x73,0x9e,0x99,0xca,0x00,0x8f,0xe9,0x5a,0x99,0x92,0x70,
0x25,0x4d,0x15,0x95,0xf4,0xf6,0x66,0x39,0x79,0x32,0xdd,0x6f,0x2b,0xd9,0x36,0xc4,
0x62,0x19,0xac,0xac,0xa2,0xac,0x14,0x76,0xbc,0xf5,0x1a,0xd1,0xad,0x83,0x0d,0xb0,
0xda,0x4b,0x57,0xd3,0x74,0xe5,0x35,0x08,0x21,0x70,0x7b,0x7d,0x5c,0x73,0xdf,0xef,
0xf3,0xe2,0xc7,0x1f,0x92,0xe8,0x38,0x55,0x1d,0x6f,0xfb,0xab,0x2f,0xd3,0xb8,0xea,
0x6a,0xe6,0x5e,0xbc,0x9c,0xf6,0x93,0x19,0x92,0x49,0xbb,0xdf,0xb2,0xf6,0x97,0x85,
0x29,0xad,0xa8,0xa4,0xb2,0xca,0x8d,0xd7,0x3b,0xae,0xad,0xd8,0x84,0xef,0x8d,0x8b,
0x21,0xa2,0xf7,0xe1,0x14,0x2a,0x19,0x3d,0x0b,0x08,0x08,0x06,0x4d,0x42,0x65,0xf9,
0xdb,0xcb,0xae,0xee,0x34,0xbf,0xf8,0xfe,0xf3,0xbc,0xfa,0xd4,0xd7,0xb1,0xf4,0x1e,
0x59,0x48,0x83,0x99,0xcb,0xaf,0xe5,0xc6,0x87,0xbe,0x4c,0xa0,0xec,0xd4,0xed,0xea,
0x73,0x17,0x2e,0xe1,0xe6,0x3f,0x79,0x94,0xe0,0xac,0x8b,0xfa,0xad,0xee,0x54,0x57,
0x8c,0x7f,0x79,0xec,0xcb,0xbc,0xff,0xf6,0xaf,0xfb,0xc1,0x1d,0xd8,0x6e,0x38,0x3c,
0x6e,0x70,0x6d,0xe0,0x4d,0x21,0xc4,0x84,0x06,0xf5,0x15,0x83,0x83,0xfb,0x80,0x6f,
0x00,0xcf,0x31,0xc6,0xeb,0xde,0x83,0x25,0x26,0x5d,0xdd,0x59,0x2c,0x6b,0xc0,0x7d,
0x85,0xb6,0xcd,0xfe,0xf7,0x7e,0x8d,0x52,0x0a,0x33,0x10,0xa2,0x74,0x56,0x03,0x8d,
0x6b,0x6e,0xa3,0x76,0xd9,0x6a,0xf0,0x94,0x0e,0x2c,0x37,0x89,0x6d,0x0b,0x4a,0xe7,
0x2c,0xe3,0x86,0x2f,0x7d,0x9b,0xfd,0x5b,0xdf,0x64,0xdf,0xc6,0x9f,0x92,0xe8,0x38,
0x4a,0x36,0x9d,0xa6,0xe3,0xd8,0x31,0xc2,0xf5,0x83,0x8b,0xb5,0x78,0xbd,0x06,0x5e,
0xdf,0xb8,0x9d,0x28,0x1f,0x00,0x7f,0xf7,0xe0,0xfc,0xb2,0x09,0x3d,0x93,0x2e,0xca,
0x06,0x5c,0x7b,0x78,0xfe,0x1b,0xf0,0x65,0x0a,0xd4,0x8e,0x1e,0x09,0x9d,0x38,0x91,
0xa2,0xb7,0x77,0xb0,0xf3,0x21,0xdd,0x75,0x14,0x32,0x1d,0xf4,0xa5,0x03,0x04,0xc3,
0x35,0x98,0x2e,0x8f,0x93,0xfc,0x2d,0xa0,0xba,0xda,0x83,0x4f,0x83,0x14,0x8b,0x65,
0x88,0xc5,0x32,0xda,0xe2,0xb6,0xc9,0x24,0xfb,0xe8,0xeb,0x38,0x46,0x65,0xa5,0x49,
0xda,0x98,0x81,0xcc,0xbb,0x13,0xc9,0x45,0x49,0xc9,0xb8,0x9c,0x52,0x07,0x80,0x7b,
0xd6,0x37,0x86,0x36,0x4d,0xf4,0x5c,0x17,0xcd,0xc3,0xa2,0x41,0xfe,0x3c,0xf0,0xdf,
0xf5,0x36,0x62,0x54,0xd4,0xd1,0x91,0xa6,0xab,0x6b,0xb0,0xb4,0xf3,0xfb,0x0d,0x2a,
0x2b,0xdd,0xb4,0xb5,0x25,0x07,0x71,0x37,0x40,0x69,0x89,0x49,0x45,0xd8,0x8d,0x52,
0x70,0xe4,0x48,0x92,0x74,0x7a,0xb0,0x18,0x0e,0xf8,0x0d,0xc2,0x95,0x6e,0x0e,0x1d,
0x4a,0x30,0x70,0xab,0x2b,0x04,0x54,0x55,0x79,0xf0,0xfb,0xc7,0xc4,0xc1,0x36,0xb0,
0x05,0xf8,0x83,0xf5,0x8d,0xa1,0xdf,0x4c,0x2b,0x4f,0x96,0x76,0xc6,0x3f,0x8d,0x53,
0x66,0xf7,0x55,0x9c,0x90,0xd7,0xf1,0xaf,0x58,0x21,0xf0,0xb8,0xf3,0x87,0x95,0x4c,
0xd9,0x28,0x05,0x96,0xa5,0xc8,0x66,0xf2,0x9d,0x15,0x6e,0x8f,0x3c,0x9b,0xeb,0x5d,
0xe1,0x94,0x54,0x7e,0x14,0xb8,0xa9,0x58,0xe0,0x16,0x15,0x60,0x0d,0xb2,0xbd,0xbe,
0x31,0xb4,0x15,0x58,0x87,0x93,0x3a,0xf2,0x1a,0x4e,0x8a,0xc9,0xb8,0xf4,0x94,0x61,
0xe6,0x03,0x95,0xe3,0x68,0xcb,0x2a,0x78,0x3a,0x84,0xd9,0xff,0x6f,0xc4,0x30,0x78,
0x8d,0x98,0x63,0x8f,0xe3,0x14,0x59,0xbd,0x02,0xf8,0xcb,0xf5,0x8d,0xa1,0x58,0x31,
0xe7,0x78,0x52,0x1c,0x17,0xae,0x6f,0x0c,0xa5,0x80,0x9f,0x34,0xb7,0xc4,0x5e,0x05,
0x96,0x03,0x9f,0xc1,0x29,0xfd,0x3f,0x67,0x2c,0x86,0x98,0x3c,0xcd,0xe5,0xce,0xb6,
0xad,0x0a,0xea,0xa9,0x71,0xf0,0xae,0xad,0x17,0xe5,0x26,0xe0,0x45,0x9c,0xba,0x59,
0xc7,0x26,0xcb,0xb9,0xf0,0xa4,0x3a,0xf0,0x5f,0xdf,0x18,0x4a,0x03,0x9b,0x9a,0x5b,
0x62,0x5b,0x70,0x72,0x78,0x73,0xc9,0x62,0xd7,0xe2,0x24,0x95,0xf9,0x38,0x4d,0x4d,
0xac,0x33,0x82,0xa4,0x46,0xf5,0xb5,0x5e,0x18,0x79,0x3f,0xb0,0xf5,0x7e,0xb6,0x13,
0xe7,0x90,0xff,0x17,0xc0,0xbf,0x01,0xad,0xba,0xff,0x93,0x8a,0x26,0x65,0x44,0x87,
0x5e,0xfd,0xdd,0xc0,0x2f,0x9a,0x5b,0x62,0xaf,0x6b,0x2e,0xae,0x06,0x2e,0x01,0x3e,
0x01,0x2c,0x55,0x8a,0xe5,0x9c,0x2a,0x73,0x98,0xbb,0x9d,0x44,0x9c,0x0e,0x30,0x35,
0x7a,0xce,0xb4,0x84,0xc0,0x02,0xd1,0x87,0x93,0x6d,0xb1,0x13,0xe7,0x82,0x92,0x2d,
0x38,0xe1,0x3b,0xbd,0xeb,0x1b,0x43,0x93,0x3a,0x59,0x6d,0xd2,0xc7,0x64,0xad,0x6f,
0x0c,0x29,0x9c,0xf0,0x98,0x83,0xc0,0xc1,0xe6,0x96,0xd8,0x8f,0x51,0x18,0x4a,0xe1,
0x72,0xbb,0x65,0xd8,0xb2,0x54,0x83,0x52,0xaa,0x4e,0x29,0xe6,0x08,0x49,0x0d,0x50,
0x8e,0xa2,0x5a,0x08,0x27,0xa7,0x49,0x29,0x7c,0x42,0xe0,0x17,0x42,0x98,0x80,0xa5,
0x54,0xff,0x82,0x50,0xda,0xb0,0xeb,0x16,0x82,0x84,0x82,0x93,0x42,0x70,0x5c,0x4a,
0x4e,0x0a,0x21,0x4e,0x08,0xc1,0x61,0x29,0x45,0xab,0xdb,0x2d,0xf7,0x49,0x43,0x1c,
0xd0,0xbf,0xcd,0x4c,0xe6,0xf8,0xab,0xf3,0x12,0xe0,0x61,0x00,0xcf,0x5d,0xb4,0x75,
0x48,0x7f,0xde,0x02,0xf8,0xf6,0xe6,0x13,0x52,0x80,0x50,0x0a,0x29,0xa5,0x90,0x4a,
0x39,0x17,0xa6,0x49,0x29,0x0c,0x21,0x90,0x42,0xa0,0x94,0x52,0xba,0x6a,0x92,0x50,
0x42,0x60,0xd9,0xb6,0xca,0xea,0xea,0xc5,0x36,0x60,0x7b,0x3c,0x86,0xf2,0xfb,0x0c,
0xfb,0x4b,0x97,0x84,0xa7,0x5d,0x90,0xfc,0x05,0x3a,0x0f,0xe9,0xff,0x03,0x9d,0x2a,
0xb9,0x9c,0xf1,0x9e,0xa6,0x7a,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,
0x60,0x82};
@@ -1,79 +0,0 @@
//
// PNGDisplay class demo
//
// This sketch shows how to use the new helper class, PNGDisplay to more easily
// display PNG images on displays supported by my bb_spi_lcd library
// There are only two overloaded methods exposed by the library: loadPNG(), getPNGInfo()
// They allow you to pass PNG image data as a pointer or a filename on a uSD card
// loadPNG() requires a x,y position for where to draw the image. This code doesn't
// currently support clipping, so attempts to draw off the edge of the display
// will return with an error.
// An optional background color can be specified for PNGs with an alpha channel
//
#include <PNGDisplay.h>
#include <PNGDisplay.inl>
#include <bb_spi_lcd.h>
#include <SPI.h>
#include <SD.h>
#include "octocat_small.h"
BB_SPI_LCD lcd, sprite; // one instance for the display and another for a 'sprite'
PNGDisplay pd; // only one instance of this class is needed
SPIClass SD_SPI;
bool bSD = false;
// These GPIOs are for the uSD card slot on the JC4827W543 "Cheap Yellow Display"
#define SD_CS 10
#define SD_MOSI 11
#define SD_SCK 12
#define SD_MISO 13
void setup() {
int x, y, w, h, bpp;
lcd.begin(DISPLAY_CYD_543);
lcd.fillScreen(TFT_BLACK);
lcd.setTextColor(TFT_GREEN);
lcd.setFont(FONT_12x16);
SD_SPI.begin(SD_SCK, SD_MISO, SD_MOSI, SD_CS);
if (!SD.begin(SD_CS, SD_SPI, 10000000)) { // Faster than 10MHz seems to fail on the CYDs
lcd.println("Card Mount Failed");
} else {
lcd.println("Card Mount Succeeded");
bSD = true;
}
// Load a PNG from the uSD card
if (bSD) {
// The PNG can be directly decoded to the LCD
if (pd.getPNGInfo(&w, &h, &bpp, "/tulips_320x213.png")) { // get info
// center it on the LCD
x = (lcd.width() - w)/2;
y = (lcd.height() - h)/2;
if (x < 0) x = 0;
if (y < 0) y = 0;
pd.loadPNG(&lcd, x, y, "/tulips_320x213.png"); // load this image from the root dir of the SD card
delay(5000);
}
}
//
// Load and display the PNG image all over the display by using a 'sprite'
// First, create a sprite instance of BB_SPI_LCD with the createVirtual() method
// Next, decode a PNG image directly into the sprite memory
// And finally, draw it in multiple places on the LCD
//
lcd.fillScreen(TFT_BLACK);
// You can request the dimensions and bit depth of the image BEFORE decoding it
if (pd.getPNGInfo(&w, &h, &bpp, octocat_small, sizeof(octocat_small))) {
sprite.createVirtual(w, h); // create a sprite of the PNG image size
// The PNG image can be decoded directly into the sprite instance
pd.loadPNG(&sprite, 0, 0, octocat_small, sizeof(octocat_small), 0);
for (int y = 0; y < lcd.height(); y += h) { // now draw it all over the LCD
for (int x = 0; x < lcd.width(); x += w) {
lcd.drawSprite(x, y, &sprite, 0xffffffff); // 0xffffffff = no transparent color
} // for x
} // for y
sprite.freeVirtual(); // free the sprite memory
}
}
void loop() {
}
@@ -59,12 +59,11 @@ int32_t mySeek(PNGFILE *handle, int32_t position) {
}
// Function to draw pixels to the display
int PNGDraw(PNGDRAW *pDraw) {
void PNGDraw(PNGDRAW *pDraw) {
uint16_t usPixels[320];
png.getLineAsRGB565(pDraw, usPixels, PNG_RGB565_LITTLE_ENDIAN, 0xffffffff);
tft.writeRect(0, pDraw->y + 24, pDraw->iWidth, 1, usPixels);
return 1;
}
// Main loop, scan for all .PNG files on the card and display them
+1 -1
View File
@@ -1,5 +1,5 @@
name=PNGdec
version=1.1.6
version=1.0.2
author=Larry Bank
maintainer=Larry Bank
sentence=Universal PNG decoder for MCUs with at least 48K of RAM.
-1
View File
@@ -127,7 +127,6 @@ int main(int argc, const char * argv[]) {
printf("image specs: (%d x %d), %d bpp, pixel type: %d\n", png.getWidth(), png.getHeight(), png.getBpp(), png.getPixelType());
png.setBuffer((uint8_t *)malloc(png.getBufferSize()));
rc = png.decode(NULL, 0); //PNG_CHECK_CRC);
printf("decode returned: %d\n", rc);
i = 1;
pPalette = NULL;
switch (png.getPixelType()) {
-65
View File
@@ -1,65 +0,0 @@
//
// PNG Display helper class
//
// written by Larry Bank
// bitbank@pobox.com
//
// Copyright 2025 BitBank Software, Inc. All Rights Reserved.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//===========================================================================
//
#ifndef __PNGDISPLAY__
#define __PNGDISPLAY__
#include <PNGdec.h>
#include <SD.h>
#ifndef ARDUINO_ARCH_NRF52
#include "FS.h"
#include <LittleFS.h>
#endif
#if !defined(__BB_EPAPER__) && !defined(SPI_LCD_H) && !defined(__FASTEPD_H__)
#error "One of the following display libraries must be included BEFORE PNGDisplay: bb_spi_lcd, bb_epaper, FastEPD"
#endif
// To center one or both coordinates for the drawing position
// use this constant value
#define PNGDISPLAY_CENTER -2
class PNGDisplay
{
public:
#ifdef SPI_LCD_H
int loadPNG(BB_SPI_LCD *pLCD, int x, int y, const void *pData, int iDataSize, uint32_t bgColor = 0xffffffff);
int loadPNG(BB_SPI_LCD *pLCD, int x, int y, const char *fname, uint32_t bgColor = 0xffffffff);
int loadPNG_LFS(BB_SPI_LCD *pLCD, int x, int y, const char *fname, uint32_t bgColor = 0xffffffff);
#endif // SPI_LCD_H
#ifdef __FASTEPD_H__
int loadPNG(FASTEPD *pDisplay, int x, int y, const void *pData, int iDataSize, uint32_t bgColor = 0xffffffff);
int loadPNG(FASTEPD *pDisplay, int x, int y, const char *fname, uint32_t bgColor = 0xffffffff);
int loadPNG_LFS(FASTEPD *pDisplay, int x, int y, const char *fname, uint32_t bgColor = 0xffffffff);
#endif // __FASTEPD_H__
#ifdef __BB_EPAPER__
int loadPNG(BBEPAPER *pDisplay, int x, int y, const void *pData, int iDataSize, uint32_t bgColor = 0xffffffff);
int loadPNG(BBEPAPER *pDisplay, int x, int y, const char *fname, uint32_t bgColor = 0xffffffff);
int loadPNG_LFS(BBEPAPER *pDisplay, int x, int y, const char *fname, uint32_t bgColor = 0xffffffff);
#endif // __BB_EPAPER__
int getPNGInfo(int *width, int *height, int *bpp, const void *pData, int iDataSize);
int getPNGInfo(int *width, int *height, int *bpp, const char *fname);
int getPNGInfo_LFS(int *width, int *height, int *bpp, const char *fname);
int getLastError() {return _iLastError;}
private:
int _iLastError;
};
#endif // __PNGDISPLAY__
-465
View File
@@ -1,465 +0,0 @@
//
// PNG Display helper class
//
// written by Larry Bank
// bitbank@pobox.com
//
// Copyright 2025 BitBank Software, Inc. All Rights Reserved.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//===========================================================================
//
#ifndef __PNGDISPLAY_IMPL__
#define __PNGDISPLAY_IMPL__
#include "PNGDisplay.h"
static int PNGDraw(PNGDRAW *pDraw)
{
int *pInfo = (int *)pDraw->pUser;
uint16_t *p16;
PNG *pPNG;
#ifdef SPI_LCD_H
BB_SPI_LCD *pLCD;
pLCD = (BB_SPI_LCD *)pInfo[0]; // pointer to LCD class pointer
pPNG = (PNG *)pInfo[1]; // pointer to PNG class pointer
p16 = (uint16_t *)&pInfo[3]; // start of temporary pixel space
pPNG->getLineAsRGB565(pDraw, p16, PNG_RGB565_BIG_ENDIAN, (uint32_t)pInfo[2]);
pLCD->pushPixels(p16, pDraw->iWidth);
#endif // SPI_LCD_H
#ifdef __BB_EPAPER__
BBEPAPER *pEPD;
int w, iLen, iPitch; // bits per pixel mode of the EPD
uint8_t uc_s, uc_d, srcMask, destMask, *s, *d;
int32_t iWidth, i, x, y;
pEPD = (BBEPAPER *)pInfo[0]; // pointer to display class object
pPNG = (PNG *)pInfo[1]; // pointer to PNG class pointer
if (pPNG->getBpp() != 1) {
return 0; // mismatch, don't try to convert the bit depth
}
d = (uint8_t *)pEPD->getBuffer();
x = pInfo[3]; y = pInfo[4]; // display offset to draw the image
if (pDraw->y + y > pEPD->height()) return 0; // off bottom edge
w = pPNG->getWidth();
if (w + x > pEPD->width()) w = pEPD->width() - x; // clip to right edge
iPitch = (pEPD->width()+7)/8;
d += (x/8) + ((pDraw->y + y) * iPitch);
srcMask = 0x80;
destMask = 0x80 >> (x & 7);
s = pDraw->pPixels;
i = 0;
if ((x & 7) == 0) { // take advantage of src/dest bit alignment
while (i < w-7) {
*d++ = *s++;
i += 8;
}
}
uc_s = *s++;
uc_d = d[0];
for (; i<w; i++) { // do it pixel-by-pixel
if (uc_s & srcMask) {
uc_d |= destMask; // use the same pixel color polarity
} else {
uc_d &= ~destMask;
}
srcMask >>= 1;
if (srcMask == 0) {
srcMask = 0x80;
uc_s = *s++;
}
destMask >>= 1;
if (destMask == 0) {
destMask = 0x80;
*d++ = uc_d;
uc_d = d[0];
}
} // for i
if (destMask != 0x80) { // store the last partial byte
d[0] = uc_d;
}
#endif // __BB_EPAPER__
#ifdef __FASTEPD_H__
FASTEPD *pEPD;
int i, iLen, iPitch, iBpp; // bits per pixel mode of the EPD
uint8_t srcMask, destMask, uc_s, uc_d, *s, *d;
int32_t iWidth, w, x, y;
pEPD = (FASTEPD *)pInfo[0]; // pointer to display class object
pPNG = (PNG *)pInfo[1]; // pointer to PNG class pointer
iBpp = (pEPD->getMode() == BB_MODE_1BPP) ? 1:4;
if (pPNG->getBpp() != iBpp) return 0; // mismatch, don't try to convert the bit depth
d = (uint8_t *)pEPD->currentBuffer();
x = pInfo[3]; y = pInfo[4]; // display offset to draw the image
if (pDraw->y + y > pEPD->height()) return 0; // off bottom edge
w = pPNG->getWidth();
if (w + x > pEPD->width()) w = pEPD->width() - x; // clip to right edge
iPitch = (pEPD->width()*iBpp)/8;
d += ((x * iBpp)/8) + ((pDraw->y + y) * iPitch);
if (iBpp == 4) {
memcpy(d, pDraw->pPixels, (w*iBpp)/8);
} else { // 1 bpp
srcMask = 0x80;
destMask = 0x80 >> (x & 7);
s = pDraw->pPixels;
if ((x & 7) == 0) { // take advantage of src/dest bit alignment
while (i <= w-7) {
*d++ = *s++;
i += 8;
}
}
uc_s = *s++;
uc_d = d[0];
for (; i<w; i++) { // do it pixel-by-pixel
if (uc_s & srcMask) {
uc_d |= destMask; // use the same pixel color polarity
} else {
uc_d &= ~destMask;
}
srcMask >>= 1;
if (srcMask == 0) {
srcMask = 0x80;
uc_s = *s++;
}
destMask >>= 1;
if (destMask == 0) {
destMask = 0x80;
*d++ = uc_d;
uc_d = d[0];
}
} // for i
if (destMask != 0) { // store the last partial byte
d[0] = uc_d;
}
} // 1-bpp
#endif // __FASTEPD_H__
return 1; // continue decoding
} /* PNGDraw() */
// Functions to access a file on the SD card
static void * pngOpen(const char *filename, int32_t *size) {
static File myfile;
myfile = SD.open(filename);
*size = myfile.size();
return &myfile;
}
#ifndef ARDUINO_ARCH_NRF52
static void * pngOpenLFS(const char *filename, int32_t *size) {
static File myfile;
myfile = LittleFS.open(filename, FILE_READ);
if (myfile) {
*size = myfile.size();
return &myfile;
} else {
return NULL;
}
}
#endif // !nRF52
static void pngClose(void *handle) {
File *pFile = (File *)handle;
if (pFile) pFile->close();
}
static int32_t pngRead(PNGFILE *handle, uint8_t *buffer, int32_t length) {
File *pFile = (File *)handle->fHandle;
if (!pFile) return 0;
return pFile->read(buffer, length);
}
static int32_t pngSeek(PNGFILE *handle, int32_t position) {
File *pFile = (File *)handle->fHandle;
if (!pFile) return 0;
return pFile->seek(position);
}
#ifdef SPI_LCD_H
int PNGDisplay::loadPNG(BB_SPI_LCD *pDisplay, int x, int y, const void *pData, int iDataSize, uint32_t bgColor)
#endif // SPI_LCD_H
#ifdef __FASTEPD_H__
int PNGDisplay::loadPNG(FASTEPD *pDisplay, int x, int y, const void *pData, int iDataSize, uint32_t bgColor)
#endif // __FASTEPD_H__
#ifdef __BB_EPAPER__
int PNGDisplay::loadPNG(BBEPAPER *pDisplay, int x, int y, const void *pData, int iDataSize, uint32_t bgColor)
#endif // __BB_EPAPER__
{
PNG *png;
int w, h, rc;
uint32_t *png_info;
png = (PNG *)malloc(sizeof(PNG));
if (!png) {
_iLastError = PNG_MEM_ERROR;
return 0;
}
rc = png->openRAM((uint8_t *)pData, iDataSize, PNGDraw);
if (rc == PNG_SUCCESS) {
w = png->getWidth();
h = png->getHeight();
if (x == PNGDISPLAY_CENTER) {
x = (pDisplay->width() - w)/2;
if (x < 0) x = 0;
} else if (x < 0 || w + x > pDisplay->width()) {
// clipping is not supported
_iLastError = PNG_INVALID_PARAMETER;
free(png);
return 0;
}
if (y == PNGDISPLAY_CENTER) {
y = (pDisplay->height() - h)/2;
if (y < 0) y = 0;
} else if (y < 0 || y + h > pDisplay->height()) {
// clipping is not supported
free(png);
_iLastError = PNG_INVALID_PARAMETER;
return 0;
}
png_info = (uint32_t *)malloc((w * sizeof(uint16_t)) + 3 * sizeof(int)); // enough for pixels and 3 32-bit values
png_info[0] = (uint32_t)pDisplay;
png_info[1] = (uint32_t)png;
png_info[2] = bgColor;
png_info[3] = x;
png_info[4] = y;
#ifdef SPI_LCD_H
pDisplay->setAddrWindow(x, y, w, h);
#endif
png->decode((void *)png_info, 0); // simple decode, no options
png->close();
free(png);
_iLastError = PNG_SUCCESS;
return 1;
}
_iLastError = png->getLastError();
free(png);
return 0;
} /* loadPNG() */
#ifdef SPI_LCD_H
int PNGDisplay::loadPNG(BB_SPI_LCD *pDisplay, int x, int y, const char *fname, uint32_t bgColor)
#endif
#ifdef __FASTEPD_H__
int PNGDisplay::loadPNG(FASTEPD *pDisplay, int x, int y, const char *fname, uint32_t bgColor)
#endif
#ifdef __BB_EPAPER__
int PNGDisplay::loadPNG(BBEPAPER *pDisplay, int x, int y, const char *fname, uint32_t bgColor)
#endif
{
PNG *png;
int w, h, rc;
uint32_t *png_info;
png = (PNG *)malloc(sizeof(PNG));
if (!png) {
_iLastError = PNG_MEM_ERROR;
return 0;
}
rc = png->open(fname, pngOpen, pngClose, pngRead, pngSeek, PNGDraw);
if (rc == PNG_SUCCESS) {
w = png->getWidth();
h = png->getHeight();
if (x == PNGDISPLAY_CENTER) {
x = (pDisplay->width() - w)/2;
if (x < 0) x = 0;
} else if (x < 0 || w + x > pDisplay->width()) {
// clipping is not supported
free(png);
_iLastError = PNG_INVALID_PARAMETER;
return 0;
}
if (y == PNGDISPLAY_CENTER) {
y = (pDisplay->height() - h)/2;
if (y < 0) y = 0;
} else if (y < 0 || y + h > pDisplay->height()) {
free(png);
_iLastError = PNG_INVALID_PARAMETER;
return 0;
}
png_info = (uint32_t *)malloc((w * sizeof(uint16_t)) + 3 * sizeof(int)); // enough for pixels and 3 32-bit values
png_info[0] = (uint32_t)pDisplay;
png_info[1] = (uint32_t)png;
png_info[2] = bgColor;
png_info[3] = x;
png_info[4] = y;
#ifdef SPI_LCD_H
pDisplay->setAddrWindow(x, y, w, h);
#endif
png->decode((void *)png_info, 0); // simple decode, no options
png->close();
free(png);
_iLastError = PNG_SUCCESS;
return 1;
}
_iLastError = png->getLastError();
free(png);
return 0;
} /* loadPNG() */
#ifndef ARDUINO_ARCH_NRF52
#ifdef SPI_LCD_H
int PNGDisplay::loadPNG_LFS(BB_SPI_LCD *pDisplay, int x, int y, const char *fname, uint32_t bgColor)
#endif
#ifdef __FASTEPD_H__
int PNGDisplay::loadPNG_LFS(FASTEPD *pDisplay, int x, int y, const char *fname, uint32_t bgColor)
#endif
#ifdef __BB_EPAPER__
int PNGDisplay::loadPNG_LFS(BBEPAPER *pDisplay, int x, int y, const char *fname, uint32_t bgColor)
#endif
{
PNG *png;
int w, h, rc;
uint32_t *png_info;
if (!LittleFS.begin(false)) {
return 0;
}
png = (PNG *)malloc(sizeof(PNG));
if (!png) {
_iLastError = PNG_MEM_ERROR;
return 0;
}
rc = png->open(fname, pngOpenLFS, pngClose, pngRead, pngSeek, PNGDraw);
if (rc == PNG_SUCCESS) {
w = png->getWidth();
h = png->getHeight();
if (x == PNGDISPLAY_CENTER) {
x = (pDisplay->width() - w)/2;
if (x < 0) x = 0;
} else if (x < 0 || w + x > pDisplay->width()) {
// clipping is not supported
free(png);
_iLastError = PNG_INVALID_PARAMETER;
return 0;
}
if (y == PNGDISPLAY_CENTER) {
y = (pDisplay->height() - h)/2;
if (y < 0) y = 0;
} else if (y < 0 || y + h > pDisplay->height()) {
free(png);
_iLastError = PNG_INVALID_PARAMETER;
return 0;
}
png_info = (uint32_t *)malloc((w * sizeof(uint16_t)) + 3 * sizeof(int)); // enough for pixels and 3 32-bit values
png_info[0] = (uint32_t)pDisplay;
png_info[1] = (uint32_t)png;
png_info[2] = bgColor;
png_info[3] = x;
png_info[4] = y;
#ifdef SPI_LCD_H
pDisplay->setAddrWindow(x, y, w, h);
#endif
png->decode((void *)png_info, 0); // simple decode, no options
png->close();
free(png);
_iLastError = PNG_SUCCESS;
return 1;
}
_iLastError = png->getLastError();
free(png);
return 0;
} /* loadPNG_LFS() */
#endif // !nRF52
int PNGDisplay::getPNGInfo(int *width, int *height, int *bpp, const void *pData, int iDataSize)
{
PNG *png;
int rc;
uint32_t *png_info;
if (!width || !height || !bpp || !pData || iDataSize < 32) return 0;
png = (PNG *)malloc(sizeof(PNG));
if (!png) {
_iLastError = PNG_MEM_ERROR;
return 0;
}
rc = png->openRAM((uint8_t *)pData, iDataSize, PNGDraw);
if (rc == PNG_SUCCESS) {
*width = png->getWidth();
*height = png->getHeight();
*bpp = png->getBpp();
free(png);
_iLastError = PNG_SUCCESS;
return 1;
}
_iLastError = png->getLastError();
free(png);
return 0;
} /* getPNGInfo() */
int PNGDisplay::getPNGInfo(int *width, int *height, int *bpp, const char *fname)
{
PNG *png;
int rc;
uint32_t *png_info;
if (!width || !height || !bpp || !fname) return 0;
png = (PNG *)malloc(sizeof(PNG));
if (!png) {
_iLastError = PNG_MEM_ERROR;
return 0;
}
rc = png->open(fname, pngOpen, pngClose, pngRead, pngSeek, PNGDraw);
if (rc == PNG_SUCCESS) {
*width = png->getWidth();
*height = png->getHeight();
*bpp = png->getBpp();
png->close();
free(png);
_iLastError = PNG_SUCCESS;
return 1;
}
_iLastError = png->getLastError();
free(png);
return 0;
} /* getPNGInfo() */
#ifndef ARDUINO_ARCH_NRF52
int PNGDisplay::getPNGInfo_LFS(int *width, int *height, int *bpp, const char *fname)
{
PNG *png;
int rc;
uint32_t *png_info;
if (!LittleFS.begin(false)) {
return 0;
}
if (!width || !height || !bpp || !fname) return 0;
png = (PNG *)malloc(sizeof(PNG));
if (!png) {
_iLastError = PNG_MEM_ERROR;
return 0;
}
rc = png->open(fname, pngOpenLFS, pngClose, pngRead, pngSeek, PNGDraw);
if (rc == PNG_SUCCESS) {
*width = png->getWidth();
*height = png->getHeight();
*bpp = png->getBpp();
png->close();
free(png);
_iLastError = PNG_SUCCESS;
return 1;
}
_iLastError = png->getLastError();
free(png);
return 0;
} /* getPNGInfo_LFS() */
#endif // !nRF52
#endif // __PNGDISPLAY_IMPL__
+26 -35
View File
@@ -49,13 +49,8 @@
/* Defines and variables */
#define PNG_FILE_BUF_SIZE 2048
// Number of bytes to reserve for current and previous lines
// Defaults to 320 32-bit pixels max width
// but can be overidden with a macro defined at compile time
#ifndef PNG_MAX_BUFFERED_PIXELS
#define PNG_MAX_BUFFERED_PIXELS ((320*4 + 1)*2)
#endif
#ifndef __PNGENC__
// Defaults to 640 32-bit pixels max width
#define PNG_MAX_BUFFERED_PIXELS (640*4 + 1)
// PNG filter type
enum {
PNG_FILTER_NONE=0,
@@ -80,6 +75,16 @@ enum {
PNG_PIXEL_GRAY_ALPHA=4,
PNG_PIXEL_TRUECOLOR_ALPHA=6
};
// RGB565 endianness
enum {
PNG_RGB565_LITTLE_ENDIAN = 0,
PNG_RGB565_BIG_ENDIAN
};
enum {
PNG_MEM_RAM=0,
PNG_MEM_FLASH
};
// Error codes returned by getLastError()
enum {
@@ -90,29 +95,7 @@ enum {
PNG_NO_BUFFER,
PNG_UNSUPPORTED_FEATURE,
PNG_INVALID_FILE,
PNG_TOO_BIG,
PNG_QUIT_EARLY
};
typedef struct png_file_tag
{
int32_t iPos; // current file position
int32_t iSize; // file size
uint8_t *pData; // memory file pointer
void * fHandle; // class pointer to File/SdFat or whatever you want
} PNGFILE;
#endif // !__PNGENC__
// RGB565 endianness
enum {
PNG_RGB565_LITTLE_ENDIAN = 0,
PNG_RGB565_BIG_ENDIAN
};
enum {
PNG_MEM_RAM=0,
PNG_MEM_FLASH
PNG_TOO_BIG
};
typedef struct png_draw_tag
@@ -129,11 +112,19 @@ typedef struct png_draw_tag
uint8_t *pPixels;
} PNGDRAW;
typedef struct png_file_tag
{
int32_t iPos; // current file position
int32_t iSize; // file size
uint8_t *pData; // memory file pointer
void * fHandle; // class pointer to File/SdFat or whatever you want
} PNGFILE;
// Callback function prototypes
typedef int32_t (PNG_READ_CALLBACK)(PNGFILE *pFile, uint8_t *pBuf, int32_t iLen);
typedef int32_t (PNG_SEEK_CALLBACK)(PNGFILE *pFile, int32_t iPosition);
typedef void * (PNG_OPEN_CALLBACK)(const char *szFilename, int32_t *pFileSize);
typedef int (PNG_DRAW_CALLBACK)(PNGDRAW *);
typedef void (PNG_DRAW_CALLBACK)(PNGDRAW *);
typedef void (PNG_CLOSE_CALLBACK)(void *pHandle);
//
@@ -156,9 +147,9 @@ typedef struct png_image_tag
PNG_DRAW_CALLBACK *pfnDraw;
PNG_CLOSE_CALLBACK *pfnClose;
PNGFILE PNGFile;
uint8_t ucZLIB[32768 + sizeof(struct inflate_state)]; // put this here to avoid needing malloc/free
uint8_t ucZLIB[32768 + sizeof(inflate_state)]; // put this here to avoid needing malloc/free
uint8_t ucPalette[1024];
uint8_t ucPixels[PNG_MAX_BUFFERED_PIXELS];
uint8_t ucPixels[PNG_MAX_BUFFERED_PIXELS * 2];
uint8_t ucFileBuf[PNG_FILE_BUF_SIZE]; // holds temp file data
} PNGIMAGE;
@@ -195,8 +186,8 @@ class PNG
};
#else
#define PNG_STATIC
int PNG_openRAM(PNGIMAGE *pPNG, uint8_t *pData, int iDataSize, PNG_DRAW_CALLBACK *pfnDraw);
int PNG_openFile(PNGIMAGE *pPNG, const char *szFilename, PNG_DRAW_CALLBACK *pfnDraw);
int PNG_openRAM(PNGIMAGE *pPNG, uint8_t *pData, int iDataSize);
int PNG_openFile(PNGIMAGE *pPNG, const char *szFilename);
int PNG_getWidth(PNGIMAGE *pPNG);
int PNG_getHeight(PNGIMAGE *pPNG);
int PNG_decode(PNGIMAGE *pPNG, void *pUser, int iOptions);
+20 -10
View File
@@ -7,9 +7,6 @@
#include "zutil.h"
#ifndef __ADLER32_C__
#define __ADLER32_C__
local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2));
#define BASE 65521U /* largest prime smaller than 65536 */
@@ -63,7 +60,10 @@ local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2));
#endif
/* ========================================================================= */
uLong ZEXPORT adler32_z(uLong adler, const Bytef *buf, z_size_t len)
uLong ZEXPORT adler32_z(adler, buf, len)
uLong adler;
const Bytef *buf;
z_size_t len;
{
unsigned long sum2;
unsigned n;
@@ -131,13 +131,19 @@ uLong ZEXPORT adler32_z(uLong adler, const Bytef *buf, z_size_t len)
}
/* ========================================================================= */
uLong ZEXPORT adler32(uLong adler, const Bytef *buf, uInt len)
uLong ZEXPORT adler32(adler, buf, len)
uLong adler;
const Bytef *buf;
uInt len;
{
return adler32_z(adler, buf, len);
}
/* ========================================================================= */
local uLong adler32_combine_(uLong adler1, uLong adler2, z_off64_t len2)
local uLong adler32_combine_(adler1, adler2, len2)
uLong adler1;
uLong adler2;
z_off64_t len2;
{
unsigned long sum1;
unsigned long sum2;
@@ -163,14 +169,18 @@ local uLong adler32_combine_(uLong adler1, uLong adler2, z_off64_t len2)
}
/* ========================================================================= */
uLong ZEXPORT adler32_combine(uLong adler1, uLong adler2, z_off_t len2)
uLong ZEXPORT adler32_combine(adler1, adler2, len2)
uLong adler1;
uLong adler2;
z_off_t len2;
{
return adler32_combine_(adler1, adler2, len2);
}
uLong ZEXPORT adler32_combine64(uLong adler1, uLong adler2, z_off64_t len2)
uLong ZEXPORT adler32_combine64(adler1, adler2, len2)
uLong adler1;
uLong adler2;
z_off64_t len2;
{
return adler32_combine_(adler1, adler2, len2);
}
#endif // __ADLER32_C__
+35 -10
View File
@@ -185,7 +185,7 @@ local void write_table(out, table)
/* =========================================================================
* This function can be used by asm versions of crc32()
*/
const z_crc_t FAR * ZEXPORT get_crc_table(void)
const z_crc_t FAR * ZEXPORT get_crc_table()
{
#ifdef DYNAMIC_CRC_TABLE
if (crc_table_empty)
@@ -199,7 +199,10 @@ const z_crc_t FAR * ZEXPORT get_crc_table(void)
#define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1
/* ========================================================================= */
unsigned long ZEXPORT crc32_z(unsigned long crc, const unsigned char FAR *buf, z_size_t len)
unsigned long ZEXPORT crc32_z(crc, buf, len)
unsigned long crc;
const unsigned char FAR *buf;
z_size_t len;
{
if (buf == Z_NULL) return 0UL;
@@ -231,7 +234,10 @@ unsigned long ZEXPORT crc32_z(unsigned long crc, const unsigned char FAR *buf, z
}
/* ========================================================================= */
unsigned long ZEXPORT crc32(unsigned long crc, const unsigned char FAR *buf, uInt len)
unsigned long ZEXPORT crc32(crc, buf, len)
unsigned long crc;
const unsigned char FAR *buf;
uInt len;
{
return crc32_z(crc, buf, len);
}
@@ -257,7 +263,10 @@ unsigned long ZEXPORT crc32(unsigned long crc, const unsigned char FAR *buf, uIn
#define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4
/* ========================================================================= */
local unsigned long crc32_little(unsigned long crc, const unsigned char FAR *buf, z_size_t len)
local unsigned long crc32_little(crc, buf, len)
unsigned long crc;
const unsigned char FAR *buf;
z_size_t len;
{
register z_crc_t c;
register const z_crc_t FAR *buf4;
@@ -294,7 +303,10 @@ local unsigned long crc32_little(unsigned long crc, const unsigned char FAR *buf
#define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4
/* ========================================================================= */
local unsigned long crc32_big(unsigned long crc, const unsigned char FAR *buf, z_size_t len)
local unsigned long crc32_big(crc, buf, len)
unsigned long crc;
const unsigned char FAR *buf;
z_size_t len;
{
register z_crc_t c;
register const z_crc_t FAR *buf4;
@@ -329,7 +341,9 @@ local unsigned long crc32_big(unsigned long crc, const unsigned char FAR *buf, z
#define GF2_DIM 32 /* dimension of GF(2) vectors (length of CRC) */
/* ========================================================================= */
local unsigned long gf2_matrix_times(unsigned long *mat, unsigned long vec)
local unsigned long gf2_matrix_times(mat, vec)
unsigned long *mat;
unsigned long vec;
{
unsigned long sum;
@@ -344,7 +358,9 @@ local unsigned long gf2_matrix_times(unsigned long *mat, unsigned long vec)
}
/* ========================================================================= */
local void gf2_matrix_square(unsigned long *square, unsigned long *mat)
local void gf2_matrix_square(square, mat)
unsigned long *square;
unsigned long *mat;
{
int n;
@@ -353,7 +369,10 @@ local void gf2_matrix_square(unsigned long *square, unsigned long *mat)
}
/* ========================================================================= */
local uLong crc32_combine_(uLong crc1, uLong crc2, z_off64_t len2)
local uLong crc32_combine_(crc1, crc2, len2)
uLong crc1;
uLong crc2;
z_off64_t len2;
{
int n;
unsigned long row;
@@ -406,12 +425,18 @@ local uLong crc32_combine_(uLong crc1, uLong crc2, z_off64_t len2)
}
/* ========================================================================= */
uLong ZEXPORT crc32_combine(uLong crc1, uLong crc2, z_off_t len2)
uLong ZEXPORT crc32_combine(crc1, crc2, len2)
uLong crc1;
uLong crc2;
z_off_t len2;
{
return crc32_combine_(crc1, crc2, len2);
}
uLong ZEXPORT crc32_combine64(uLong crc1, uLong crc2, z_off64_t len2)
uLong ZEXPORT crc32_combine64(crc1, crc2, len2)
uLong crc1;
uLong crc2;
z_off64_t len2;
{
return crc32_combine_(crc1, crc2, len2);
}
+17 -5
View File
@@ -16,7 +16,7 @@
#include "inffast.h"
/* function prototypes */
local void fixedtables (struct inflate_state FAR *state);
local void fixedtables OF((struct inflate_state FAR *state));
/*
strm provides memory allocation functions in zalloc and zfree, or
@@ -25,7 +25,12 @@ local void fixedtables (struct inflate_state FAR *state);
windowBits is in the range 8..15, and window is a user-supplied
window and output buffer that is 2**windowBits bytes.
*/
int ZEXPORT inflateBackInit_(z_streamp strm, int windowBits, unsigned char FAR *window, const char *version, int stream_size)
int ZEXPORT inflateBackInit_(strm, windowBits, window, version, stream_size)
z_streamp strm;
int windowBits;
unsigned char FAR *window;
const char *version;
int stream_size;
{
struct inflate_state FAR *state;
@@ -74,7 +79,8 @@ int ZEXPORT inflateBackInit_(z_streamp strm, int windowBits, unsigned char FAR *
used for threaded applications, since the rewriting of the tables and virgin
may not be thread-safe.
*/
local void fixedtables(struct inflate_state FAR *state)
local void fixedtables(state)
struct inflate_state FAR *state;
{
#ifdef BUILDFIXED
static int virgin = 1;
@@ -241,7 +247,12 @@ local void fixedtables(struct inflate_state FAR *state)
inflateBack() can also return Z_STREAM_ERROR if the input parameters
are not correct, i.e. strm is Z_NULL or the state was not initialized.
*/
int ZEXPORT inflateBack(z_streamp strm, in_func in, void FAR *in_desc, out_func out, void FAR *out_desc)
int ZEXPORT inflateBack(strm, in, in_desc, out, out_desc)
z_streamp strm;
in_func in;
void FAR *in_desc;
out_func out;
void FAR *out_desc;
{
struct inflate_state FAR *state;
z_const unsigned char FAR *next; /* next input */
@@ -617,7 +628,8 @@ int ZEXPORT inflateBack(z_streamp strm, in_func in, void FAR *in_desc, out_func
return ret;
}
int ZEXPORT inflateBackEnd(z_streamp strm)
int ZEXPORT inflateBackEnd(strm)
z_streamp strm;
{
if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
return Z_STREAM_ERROR;
+71 -37
View File
@@ -8,13 +8,24 @@
#include "inflate.h"
#include "inffast.h"
#if (INTPTR_MAX == INT64_MAX) || defined(HAL_ESP32_HAL_H_) || defined(TEENSYDUINO) || defined(ARM_MATH_CM4) || defined(ARM_MATH_CM7)
#define ALLOWS_UNALIGNED
#endif
#if INTPTR_MAX == INT64_MAX
#define REGISTER_WIDTH 64
typedef uint64_t BIGUINT;
typedef uint32_t SMALLUINT;
#else
#define REGISTER_WIDTH 32
typedef uint32_t BIGUINT;
typedef uint16_t SMALLUINT;
#endif // native register size
#ifdef ASMINF
# pragma message("Assembler code may have bugs -- use at your own risk")
#else
#if ((INTPTR_MAX == INT64_MAX) || defined(HAL_ESP32_HAL_H_) || defined(TEENSYDUINO) || defined(ARM_MATH_CM4) || defined(ARM_MATH_CM7)) && !defined(ARDUINO_ARCH_RP2040)
#define ALLOWS_UNALIGNED
#endif
/*
Decode literal, length, and distance codes and write out the resulting
literal and match bytes until either not enough input or output is
@@ -50,7 +61,10 @@
requires strm->avail_out >= 258 for each loop to avoid checking for
output space.
*/
void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start) {
void ZLIB_INTERNAL inflate_fast(strm, start)
z_streamp strm;
unsigned start; /* inflate()'s starting value for strm->avail_out */
{
struct inflate_state FAR *state;
z_const unsigned char FAR *in; /* local strm->next_in */
z_const unsigned char FAR *last; /* have enough input while in < last */
@@ -64,13 +78,14 @@ void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start) {
unsigned whave; /* valid bytes in the window */
unsigned wnext; /* window write index */
unsigned char FAR *window; /* allocated sliding window, if wsize != 0 */
unsigned long hold; /* local strm->hold */
BIGUINT hold, tmpbits; /* local strm->hold */
// unsigned long hold; /* local strm->hold */
unsigned bits; /* local strm->bits */
code const FAR *lcode; /* local strm->lencode */
code const FAR *dcode; /* local strm->distcode */
unsigned lmask; /* mask for first level of length codes */
unsigned dmask; /* mask for first level of distance codes */
code const *here; /* retrieved table entry */
code here; /* retrieved table entry */
unsigned op; /* code bits, operation, extra bits, or */
/* window position, window bytes to copy */
unsigned len; /* match length, unused bytes */
@@ -101,60 +116,84 @@ void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start) {
/* decode literals and length/distances until end-of-block or not enough
input data or output space */
do {
if (bits < 15) {
if (bits < (REGISTER_WIDTH/2)) { // helps on 32 and 64-bit CPUs
#ifdef ALLOWS_UNALIGNED
tmpbits = *(SMALLUINT *)in;
hold |= (BIGUINT)(tmpbits << bits);
in += sizeof(SMALLUINT);
bits += (REGISTER_WIDTH / 2);
#else
hold += (unsigned long)(*in++) << bits;
bits += 8;
hold += (unsigned long)(*in++) << bits;
bits += 8;
#endif
}
here = lcode + (hold & lmask);
here = lcode[hold & lmask];
dolen:
op = (unsigned)(here->bits);
op = (unsigned)(here.bits);
hold >>= op;
bits -= op;
op = (unsigned)(here->op);
op = (unsigned)(here.op);
if (op == 0) { /* literal */
Tracevv((stderr, here->val >= 0x20 && here->val < 0x7f ?
Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
"inflate: literal '%c'\n" :
"inflate: literal 0x%02x\n", here->val));
*out++ = (unsigned char)(here->val);
"inflate: literal 0x%02x\n", here.val));
*out++ = (unsigned char)(here.val);
}
else if (op & 16) { /* length base */
len = (unsigned)(here->val);
len = (unsigned)(here.val);
op &= 15; /* number of extra bits */
if (op) {
#if REGISTER_WIDTH == 32
if (bits < op) {
hold += (unsigned long)(*in++) << bits;
hold += (uint32_t)(*in++) << bits;
bits += 8;
}
#endif
len += (unsigned)hold & ((1U << op) - 1);
hold >>= op;
bits -= op;
}
Tracevv((stderr, "inflate: length %u\n", len));
if (bits < 15) {
if (bits < (REGISTER_WIDTH/2)) { // helps on 32 and 64-bit CPUs
#ifdef UNALIGNED_OK
tmpbits = *(SMALLUINT *)in;
hold |= (BIGUINT)(tmpbits << bits);
in += sizeof(SMALLUINT);
bits += (REGISTER_WIDTH / 2);
#else
hold += (unsigned long)(*in++) << bits;
bits += 8;
hold += (unsigned long)(*in++) << bits;
bits += 8;
#endif
}
here = dcode + (hold & dmask);
here = dcode[hold & dmask];
dodist:
op = (unsigned)(here->bits);
op = (unsigned)(here.bits);
hold >>= op;
bits -= op;
op = (unsigned)(here->op);
op = (unsigned)(here.op);
if (op & 16) { /* distance base */
dist = (unsigned)(here->val);
dist = (unsigned)(here.val);
op &= 15; /* number of extra bits */
#if REGISTER_WIDTH == 32
if (bits < op) {
#ifdef ALLOWS_UNALIGNED
hold |= (*(uint16_t *)in << bits);
bits += 16;
in += 2;
#else
hold += (unsigned long)(*in++) << bits;
bits += 8;
if (bits < op) {
if (bits < op) { // this is NEVER true
hold += (unsigned long)(*in++) << bits;
bits += 8;
}
#endif // ALLOWS_UNALIGNED
}
#endif // 32-bit CPU
dist += (unsigned)hold & ((1U << op) - 1);
#ifdef INFLATE_STRICT
if (dist > dmax) {
@@ -267,7 +306,7 @@ void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start) {
{
uint8_t *pEnd = out+len;
int overlap = (int)(intptr_t)(out-from);
if (overlap > 4) { // overlap of source/dest won't impede normal copy
if (overlap >= 4) { // overlap of source/dest won't impede normal copy
while (out < pEnd) {
*(uint32_t *)out = *(uint32_t *)from;
out += 4;
@@ -275,15 +314,10 @@ void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start) {
}
// correct for possible overshoot of destination ptr
out = pEnd;
} else if (overlap == 1 || overlap == 4) { // copy 1/4-byte patterns
uint32_t pattern;
if (overlap == 1) {
pattern = *from;
pattern = pattern | (pattern << 8);
pattern = pattern | (pattern << 16);
} else {
pattern = *(uint32_t *)from;
}
} else if (overlap == 1) { // copy 1-byte pattern
uint32_t pattern = *from;
pattern = pattern | (pattern << 8);
pattern = pattern | (pattern << 16);
while (out < pEnd) {
*(uint32_t *)out = pattern;
out += 4;
@@ -311,7 +345,7 @@ void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start) {
}
}
else if ((op & 64) == 0) { /* 2nd level distance code */
here = dcode + here->val + (hold & ((1U << op) - 1));
here = dcode[here.val + (hold & ((1U << op) - 1))];
goto dodist;
}
else {
@@ -321,7 +355,7 @@ void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start) {
}
}
else if ((op & 64) == 0) { /* 2nd level length code */
here = lcode + here->val + (hold & ((1U << op) - 1));
here = lcode[here.val + (hold & ((1U << op) - 1))];
goto dolen;
}
else if (op & 32) { /* end-of-block */
@@ -337,10 +371,10 @@ void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start) {
} while (in < last && out < end);
/* return unused bytes (on entry, bits < 8, so in won't go too far back) */
len = bits >> 3;
in -= len;
bits -= len << 3;
hold &= (1U << bits) - 1;
// len = bits >> 3;
// in -= len;
// bits -= len << 3;
// hold &= (1 << bits) - 1;
/* update state and return */
strm->next_in = in;
File diff suppressed because it is too large Load Diff
+79 -85
View File
@@ -13,47 +13,43 @@
the crc code when it is not needed. For shared libraries, gzip decoding
should be left enabled. */
#ifndef NO_GZIP
#define GUNZIP
# define GUNZIP
#endif
#ifndef __INFLATE_H__
#define __INFLATE_H__
/* Possible inflate modes between inflate() calls */
typedef enum
{
PNG_HEADER = 16180, /* i: waiting for magic header */
FLAGS, /* i: waiting for method and flags (gzip) */
TIME, /* i: waiting for modification time (gzip) */
OS, /* i: waiting for extra flags and operating system (gzip) */
EXLEN, /* i: waiting for extra length (gzip) */
EXTRA, /* i: waiting for extra bytes (gzip) */
NAME, /* i: waiting for end of file name (gzip) */
COMMENT, /* i: waiting for end of comment (gzip) */
HCRC, /* i: waiting for header crc (gzip) */
DICTID, /* i: waiting for dictionary check value */
DICT, /* waiting for inflateSetDictionary() call */
TYPE, /* i: waiting for type bits, including last-flag bit */
TYPEDO, /* i: same, but skip check to exit inflate on new block */
STORED, /* i: waiting for stored size (length and complement) */
COPY_, /* i/o: same as COPY below, but only first time in */
COPY, /* i/o: waiting for input or output to copy stored block */
TABLE, /* i: waiting for dynamic block table lengths */
LENLENS, /* i: waiting for code length code lengths */
CODELENS, /* i: waiting for length/lit and distance code lengths */
LEN_, /* i: same as LEN below, but only first time in */
LEN, /* i: waiting for length/lit/eob code */
LENEXT, /* i: waiting for length extra bits */
DIST, /* i: waiting for distance code */
DISTEXT, /* i: waiting for distance extra bits */
MATCH, /* o: waiting for output space to copy string */
LIT, /* o: waiting for output space to write literal */
CHECK, /* i: waiting for 32-bit check value */
LENGTH, /* i: waiting for 32-bit length (gzip) */
DONE, /* finished check, done -- remain here until reset */
BAD, /* got a data error -- remain here until reset */
MEM, /* got an inflate() memory error -- remain here until reset */
SYNC /* looking for synchronization bytes to restart inflate() */
typedef enum {
HEAD = 16180, /* i: waiting for magic header */
FLAGS, /* i: waiting for method and flags (gzip) */
TIME, /* i: waiting for modification time (gzip) */
OS, /* i: waiting for extra flags and operating system (gzip) */
EXLEN, /* i: waiting for extra length (gzip) */
EXTRA, /* i: waiting for extra bytes (gzip) */
NAME, /* i: waiting for end of file name (gzip) */
COMMENT, /* i: waiting for end of comment (gzip) */
HCRC, /* i: waiting for header crc (gzip) */
DICTID, /* i: waiting for dictionary check value */
DICT, /* waiting for inflateSetDictionary() call */
TYPE, /* i: waiting for type bits, including last-flag bit */
TYPEDO, /* i: same, but skip check to exit inflate on new block */
STORED, /* i: waiting for stored size (length and complement) */
COPY_, /* i/o: same as COPY below, but only first time in */
COPY, /* i/o: waiting for input or output to copy stored block */
TABLE, /* i: waiting for dynamic block table lengths */
LENLENS, /* i: waiting for code length code lengths */
CODELENS, /* i: waiting for length/lit and distance code lengths */
LEN_, /* i: same as LEN below, but only first time in */
LEN, /* i: waiting for length/lit/eob code */
LENEXT, /* i: waiting for length extra bits */
DIST, /* i: waiting for distance code */
DISTEXT, /* i: waiting for distance extra bits */
MATCH, /* o: waiting for output space to copy string */
LIT, /* o: waiting for output space to write literal */
CHECK, /* i: waiting for 32-bit check value */
LENGTH, /* i: waiting for 32-bit length (gzip) */
DONE, /* finished check, done -- remain here until reset */
BAD, /* got a data error -- remain here until reset */
MEM, /* got an inflate() memory error -- remain here until reset */
SYNC /* looking for synchronization bytes to restart inflate() */
} inflate_mode;
/*
@@ -62,7 +58,7 @@ typedef enum
(most modes can go to BAD or MEM on error -- not shown for clarity)
Process header:
PNG_HEADER -> (gzip) or (zlib) or (raw)
HEAD -> (gzip) or (zlib) or (raw)
(gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME -> COMMENT ->
HCRC -> TYPE
(zlib) -> DICTID or TYPE
@@ -83,50 +79,48 @@ typedef enum
/* State maintained between inflate() calls -- approximately 7K bytes, not
including the allocated sliding window, which is up to 32K bytes. */
struct inflate_state
{
z_streamp strm; /* pointer back to this zlib stream */
inflate_mode mode; /* current inflate mode */
int last; /* true if processing last block */
int wrap; /* bit 0 true for zlib, bit 1 true for gzip,
bit 2 true to validate check value */
int havedict; /* true if dictionary provided */
int flags; /* gzip header method and flags (0 if zlib) */
unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */
unsigned long check; /* protected copy of check value */
unsigned long total; /* protected copy of output count */
gz_headerp head; /* where to save gzip header information */
/* sliding window */
unsigned wbits; /* log base 2 of requested window size */
unsigned wsize; /* window size or zero if not using window */
unsigned whave; /* valid bytes in the window */
unsigned wnext; /* window write index */
unsigned char FAR *window; /* allocated sliding window, if needed */
/* bit accumulator */
uint64_t hold; /* input bit accumulator */
// unsigned long hold; /* input bit accumulator */
unsigned bits; /* number of bits in "in" */
/* for string and stored block copying */
unsigned length; /* literal or length of data to copy */
unsigned offset; /* distance back to copy string from */
/* for table and code decoding */
unsigned extra; /* extra bits needed */
/* fixed and dynamic code tables */
code const FAR *lencode; /* starting table for length/literal codes */
code const FAR *distcode; /* starting table for distance codes */
unsigned lenbits; /* index bits for lencode */
unsigned distbits; /* index bits for distcode */
/* dynamic table building */
unsigned ncode; /* number of code length code lengths */
unsigned nlen; /* number of length code lengths */
unsigned ndist; /* number of distance code lengths */
unsigned have; /* number of code lengths in lens[] */
code FAR *next; /* next available space in codes[] */
unsigned short lens[320]; /* temporary storage for code lengths */
unsigned short work[288]; /* work area for code table building */
code codes[ENOUGH]; /* space for code tables */
int sane; /* if false, allow invalid distance too far */
int back; /* bits back of last unprocessed length/lit */
unsigned was; /* initial length of match */
struct inflate_state {
z_streamp strm; /* pointer back to this zlib stream */
inflate_mode mode; /* current inflate mode */
int last; /* true if processing last block */
int wrap; /* bit 0 true for zlib, bit 1 true for gzip,
bit 2 true to validate check value */
int havedict; /* true if dictionary provided */
int flags; /* gzip header method and flags (0 if zlib) */
unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */
unsigned long check; /* protected copy of check value */
unsigned long total; /* protected copy of output count */
gz_headerp head; /* where to save gzip header information */
/* sliding window */
unsigned wbits; /* log base 2 of requested window size */
unsigned wsize; /* window size or zero if not using window */
unsigned whave; /* valid bytes in the window */
unsigned wnext; /* window write index */
unsigned char FAR *window; /* allocated sliding window, if needed */
/* bit accumulator */
uint64_t hold; /* input bit accumulator */
// unsigned long hold; /* input bit accumulator */
unsigned bits; /* number of bits in "in" */
/* for string and stored block copying */
unsigned length; /* literal or length of data to copy */
unsigned offset; /* distance back to copy string from */
/* for table and code decoding */
unsigned extra; /* extra bits needed */
/* fixed and dynamic code tables */
code const FAR *lencode; /* starting table for length/literal codes */
code const FAR *distcode; /* starting table for distance codes */
unsigned lenbits; /* index bits for lencode */
unsigned distbits; /* index bits for distcode */
/* dynamic table building */
unsigned ncode; /* number of code length code lengths */
unsigned nlen; /* number of length code lengths */
unsigned ndist; /* number of distance code lengths */
unsigned have; /* number of code lengths in lens[] */
code FAR *next; /* next available space in codes[] */
unsigned short lens[320]; /* temporary storage for code lengths */
unsigned short work[288]; /* work area for code table building */
code codes[ENOUGH]; /* space for code tables */
int sane; /* if false, allow invalid distance too far */
int back; /* bits back of last unprocessed length/lit */
unsigned was; /* initial length of match */
};
#endif // __INFLATE_H__
+7 -1
View File
@@ -29,7 +29,13 @@ const char inflate_copyright[] =
table index bits. It will differ if the request is greater than the
longest code or if it is less than the shortest code.
*/
int ZLIB_INTERNAL inflate_table(codetype type, unsigned short FAR *lens, unsigned codes, code FAR * FAR *table, unsigned FAR *bits, unsigned short FAR *work)
int ZLIB_INTERNAL inflate_table(type, lens, codes, table, bits, work)
codetype type;
unsigned short FAR *lens;
unsigned codes;
code FAR * FAR *table;
unsigned FAR *bits;
unsigned short FAR *work;
{
unsigned len; /* a code's length in bits */
unsigned sym; /* index of code symbols */
-3
View File
@@ -7,8 +7,6 @@
part of the implementation of the compression library and is
subject to change. Applications should only use zlib.h.
*/
#ifndef __INFTREES_H__
#define __INFTREES_H__
/* Structure for decoding tables. Each entry provides either the
information needed to do the operation requested by the code that
@@ -62,4 +60,3 @@ typedef enum {
int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens,
unsigned codes, code FAR * FAR *table,
unsigned FAR *bits, unsigned short FAR *work));
#endif // __INFTREES_H__
+55 -157
View File
@@ -60,41 +60,21 @@ static const uint16_t usGrayTo565[] = {0x0000,0x0000,0x0000,0x0000,0x0020,0x0020
// C interface
//
#ifndef __cplusplus
// Forward references
PNG_STATIC int32_t readFLASH(PNGFILE *pFile, uint8_t *pBuf, int32_t iLen);
PNG_STATIC int32_t seekMem(PNGFILE *pFile, int32_t iPosition);
PNG_STATIC int PNGInit(PNGIMAGE *pPNG);
// C API
int PNG_openRAM(PNGIMAGE *pPNG, uint8_t *pData, int iDataSize, PNG_DRAW_CALLBACK *pfnDraw)
{
pPNG->iError = PNG_SUCCESS;
pPNG->pfnRead = readFLASH;
pPNG->pfnRead = readMem;
pPNG->pfnSeek = seekMem;
pPNG->pfnDraw = pfnDraw;
pPNG->pfnOpen = NULL;
pPNG->pfnClose = NULL;
pPNG->PNGFile.iSize = iDataSize;
pPNG->PNGFile.pData = pData;
pPNG->PNGFile.iPos = 0;
return PNGInit(pPNG);
} /* PNG_openRAM() */
#ifdef __LINUX__
int32_t readFile(PNGFILE *handle, uint8_t *buffer, int32_t length) {
if (!handle->fHandle) return 0;
return (int32_t)fread(buffer, 1, length, (FILE *)handle->fHandle);
}
int32_t seekFile(PNGFILE *handle, int32_t position) {
if (!handle->fHandle) return 0;
return fseek((FILE *)handle->fHandle, position, SEEK_SET);
}
void closeFile(void *handle) {
if (handle) {
FILE *f = (FILE *)handle;
fclose(f);
}
}
int PNG_openFile(PNGIMAGE *pPNG, const char *szFilename, PNG_DRAW_CALLBACK *pfnDraw)
{
pPNG->iError = PNG_SUCCESS;
@@ -239,15 +219,6 @@ PNG_STATIC uint8_t PNGMakeMask(PNGDRAW *pDraw, uint8_t *pMask, uint8_t ucThresho
} // switch on pixel type
return cHasOpaque; // let the caller know if any pixels are opaque
} /* PNGMakeMask() */
#ifdef ARDUINO_ESP32S3_DEV
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
void s3_rgb565(uint8_t *pSrc, uint8_t *pDest, int iCount, bool bBigEndian);
#ifdef __cplusplus
};
#endif
#endif
//
// Convert a line of native PNG pixels into RGB565
// handles all standard pixel types
@@ -257,39 +228,18 @@ PNG_STATIC void PNGRGB565(PNGDRAW *pDraw, uint16_t *pPixels, int iEndiannes, uin
{
int x, j;
uint16_t usPixel, *pDest = pPixels;
uint8_t c=0, a, *pPal, *s = pDraw->pPixels;
uint8_t c, a, *pPal, *s = pDraw->pPixels;
switch (pDraw->iPixelType) {
case PNG_PIXEL_GRAY_ALPHA:
if (u32Bkgd != 0xffffffff) {
// gray level of background color choice
uint8_t u8BG = (uint8_t)(((u32Bkgd & 0xff) + ((u32Bkgd >> 7) & 0x1fe) + ((u32Bkgd >> 16) & 0xff)) / 4);
uint16_t usBG = usGrayTo565[u8BG];
for (x=0; x<pDraw->iWidth; x++) {
c = *s++; // gray level
a = *s++;
if (a == 0) {
usPixel = usBG;
} else if (a == 255) { // fully opaque
usPixel = usGrayTo565[c];
} else { // mix the colors
usPixel = (c * a) + (u8BG * (255-a));
usPixel = usGrayTo565[(usPixel >> 8)];
}
if (iEndiannes == PNG_RGB565_BIG_ENDIAN)
usPixel = __builtin_bswap16(usPixel);
*pDest++ = usPixel;
} // for x
} else {
for (x=0; x<pDraw->iWidth; x++) {
c = *s++; // gray level
a = *s++;
j = (a * c) >> 8; // multiply by the alpha
usPixel = usGrayTo565[j];
if (iEndiannes == PNG_RGB565_BIG_ENDIAN)
usPixel = __builtin_bswap16(usPixel);
*pDest++ = usPixel;
}
for (x=0; x<pDraw->iWidth; x++) {
c = *s++; // gray level
a = *s++;
j = (a * c) >> 8; // multiply by the alpha
usPixel = usGrayTo565[j];
if (iEndiannes == PNG_RGB565_BIG_ENDIAN)
usPixel = __builtin_bswap16(usPixel);
*pDest++ = usPixel;
}
break;
case PNG_PIXEL_GRAYSCALE:
@@ -387,49 +337,18 @@ PNG_STATIC void PNGRGB565(PNGDRAW *pDraw, uint16_t *pPixels, int iEndiannes, uin
switch (pDraw->iBpp) {
case 8: // 8-bit palette also supports palette alpha
if (pDraw->iHasAlpha) { // use the alpha to modify the palette
if (u32Bkgd != 0xffffffff) { // user wants to blend it with a background color
uint32_t b_r, b_g, b_b;
b_r = u32Bkgd & 0xff; b_g = (u32Bkgd & 0xff00) >> 8;
b_b = (u32Bkgd >> 16) & 0xff;
uint16_t u16Clr = (u32Bkgd & 0xf8) << 8;
u16Clr |= ((u32Bkgd & 0xfc00) >> 5);
u16Clr |= ((u32Bkgd & 0xf80000) >> 19);
for (x=0; x<pDraw->iWidth; x++) {
int a;
c = *s++;
a = pDraw->pPalette[768+c]; // get alpha
if (a == 0) { // pure BGColor
usPixel = u16Clr;
} else if (a == 255) { // opaque
pPal = &pDraw->pPalette[c * 3];
usPixel = ((pPal[2] * a) >> 11); // blue
usPixel |= (((pPal[1] * a) >> 10) << 5); // green
usPixel |= (((pPal[0] * a) >> 11) << 11); // red
} else { // need to mix the bg & fg colors
pPal = &pDraw->pPalette[c * 3];
usPixel = ((((pPal[2] * a) + (b_b * (255-a)))) >> 11); // blue
usPixel |= ((((pPal[1] * a) + (b_g * (255-a)))>> 10) << 5); // green
usPixel |= ((((pPal[0] * a) + (b_r * (255-a)))>> 11) << 11); // red
} // need to mix with alpha
if (iEndiannes == PNG_RGB565_BIG_ENDIAN)
usPixel = __builtin_bswap16(usPixel);
*pDest++ = usPixel;
} // for x
} else { // alpha 0 = black
for (x=0; x<pDraw->iWidth; x++) {
int a;
c = *s++;
a = pDraw->pPalette[768+c]; // get alpha
pPal = &pDraw->pPalette[c * 3];
usPixel = ((pPal[2] * a) >> 11); // blue
usPixel |= (((pPal[1] * a) >> 10) << 5); // green
usPixel |= (((pPal[0] * a) >> 11) << 11); // red
if (iEndiannes == PNG_RGB565_BIG_ENDIAN)
usPixel = __builtin_bswap16(usPixel);
*pDest++ = usPixel;
} // for x
}
for (x=0; x<pDraw->iWidth; x++) {
int a;
c = *s++;
a = pDraw->pPalette[768+c]; // get alpha
pPal = &pDraw->pPalette[c * 3];
usPixel = ((pPal[2] * a) >> 11); // blue
usPixel |= (((pPal[1] * a) >> 10) << 5); // green
usPixel |= (((pPal[0] * a) >> 11) << 11); // red
if (iEndiannes == PNG_RGB565_BIG_ENDIAN)
usPixel = __builtin_bswap16(usPixel);
*pDest++ = usPixel;
} // for x
} else {
for (x=0; x<pDraw->iWidth; x++) {
c = *s++;
@@ -525,9 +444,6 @@ PNG_STATIC void PNGRGB565(PNGDRAW *pDraw, uint16_t *pPixels, int iEndiannes, uin
s += 4; // skip alpha
}
} else { // ignore alpha
#ifdef ARDUINO_ESP32S3_DEV
s3_rgb565(s, (uint8_t *)pDest, pDraw->iWidth, (iEndiannes == PNG_RGB565_BIG_ENDIAN));
#else
for (x=0; x<pDraw->iWidth; x++) {
usPixel = (s[2] >> 3); // blue
usPixel |= ((s[1] >> 2) << 5); // green
@@ -537,7 +453,6 @@ PNG_STATIC void PNGRGB565(PNGDRAW *pDraw, uint16_t *pPixels, int iEndiannes, uin
*pDest++ = usPixel;
s += 4; // skip alpha
}
#endif
}
break;
}
@@ -591,8 +506,8 @@ PNG_STATIC int PNGParseInfo(PNGIMAGE *pPage)
pPage->iHasAlpha = pPage->iInterlaced = 0;
// Read a few bytes to just parse the size/pixel info
iBytesRead = (*pPage->pfnRead)(&pPage->PNGFile, s, 33);
if (iBytesRead < 33) { // a PNG file this tiny? probably bad
iBytesRead = (*pPage->pfnRead)(&pPage->PNGFile, s, 32);
if (iBytesRead < 32) { // a PNG file this tiny? probably bad
pPage->iError = PNG_INVALID_FILE;
return pPage->iError;
}
@@ -602,17 +517,6 @@ PNG_STATIC int PNGParseInfo(PNGIMAGE *pPage)
return pPage->iError;
}
if (MOTOLONG(&s[12]) == 0x49484452/*'IHDR'*/) {
int len = MOTOLONG(&s[8]);
if (len != 13) {
pPage->iError = PNG_INVALID_FILE;
return pPage->iError;
}
int crc = (int)crc32(0, &s[12], len+4);
int hdrcrc = MOTOLONG(&s[16+len]);
if (len != 13 || crc != hdrcrc) {
pPage->iError = PNG_INVALID_FILE;
return pPage->iError;
}
pPage->iWidth = MOTOLONG(&s[16]);
pPage->iHeight = MOTOLONG(&s[20]);
pPage->ucBpp = s[24]; // bits per pixel
@@ -725,7 +629,7 @@ PNG_STATIC void DeFilter(uint8_t *pCurr, uint8_t *pPrev, int iWidth, int iPitch)
b = *pPrev++;
p = b - c;
pc = a - c;
// assume no native ABS() instruction
// asume no native ABS() instruction
pa = p < 0 ? -p : p;
pb = pc < 0 ? -pc : pc;
pc = (p + pc) < 0 ? -(p + pc) : p + pc;
@@ -773,13 +677,8 @@ PNG_STATIC int DecodePNG(PNGIMAGE *pPage, void *pUser, int iOptions)
return 0;
}
// Use internal buffer to maintain the current and previous lines
y = (int)(intptr_t)&pPage->ucPixels[0];
y &= 15; // make sure we're 16-byte aligned, -1 for filter byte
y += (15 - y);
pCurr = &pPage->ucPixels[y]; // so that the pixels are 16-byte aligned
y += pPage->iPitch + 1; // both lines are 16-byte (minus 1)
y += (15 - (y & 15));
pPrev = &pPage->ucPixels[y];
pCurr = pPage->ucPixels;
pPrev = &pPage->ucPixels[pPage->iPitch+1];
pPage->iError = PNG_SUCCESS;
// Start decoding the image
bDone = FALSE;
@@ -792,7 +691,7 @@ PNG_STATIC int DecodePNG(PNGIMAGE *pPage, void *pUser, int iOptions)
// Insert the memory pointer here to avoid having to use malloc() inside zlib
state = (struct inflate_state FAR *)pPage->ucZLIB;
d_stream.state = (struct internal_state FAR *)state;
state->window = &pPage->ucZLIB[sizeof(struct inflate_state)]; // point to 32k dictionary buffer
state->window = &pPage->ucZLIB[sizeof(inflate_state)]; // point to 32k dictionary buffer
err = inflateInit(&d_stream);
#ifdef FUTURE
// if (inpage->cCompression == PIL_COMP_IPHONE_FLATE)
@@ -803,27 +702,18 @@ PNG_STATIC int DecodePNG(PNGIMAGE *pPage, void *pUser, int iOptions)
iFileOffset = 8; // skip PNG file signature
iOffset = 0; // internal buffer offset starts at 0
iBytesRead = 0; // We haven't read yet anything
// Read some data to start
(*pPage->pfnSeek)(&pPage->PNGFile, iFileOffset);
iBytesRead = (*pPage->pfnRead)(&pPage->PNGFile, s, PNG_FILE_BUF_SIZE);
iFileOffset += iBytesRead;
y = 0;
d_stream.avail_out = 0;
d_stream.next_out = pPage->pImage;
// continue until fully decoded
// parse the markers until the next data block
while (!bDone && y < pPage->iHeight)
while (y < pPage->iHeight) { // continue until fully decoded
// parse the markers until the next data block
while (!bDone)
{
if (iOffset > iBytesRead-8) { // need to read more data
iFileOffset += (iOffset - iBytesRead);
(*pPage->pfnSeek)(&pPage->PNGFile, iFileOffset);
iBytesRead = (*pPage->pfnRead)(&pPage->PNGFile, s, PNG_FILE_BUF_SIZE);
if (iBytesRead < 8) {
pPage->iError = PNG_DECODE_ERROR;
return 1;
}
iFileOffset += iBytesRead;
iOffset = 0;
}
iLen = MOTOLONG(&s[iOffset]); // chunk length
if (iLen < 0 || iLen + (iFileOffset - iBytesRead) > pPage->PNGFile.iSize) // invalid data
{
@@ -931,10 +821,7 @@ PNG_STATIC int DecodePNG(PNGIMAGE *pPage, void *pUser, int iOptions)
pngd.iHasAlpha = pPage->iHasAlpha;
pngd.iBpp = pPage->ucBpp;
pngd.y = y;
if (!(*pPage->pfnDraw)(&pngd)) { // user code returned 0 from PNGDraw
pPage->iError = PNG_QUIT_EARLY;
return pPage->iError;
}
(*pPage->pfnDraw)(&pngd);
} else {
// copy to destination bitmap
memcpy(&pPage->pImage[y * pPage->iPitch], &pCurr[1], pPage->iPitch);
@@ -959,14 +846,17 @@ PNG_STATIC int DecodePNG(PNGIMAGE *pPage, void *pUser, int iOptions)
y |= 0; // need more data
}
} // while (iLen)
if (iBytesRead) { // data remaining in buffer
// Restore iBytesRead to be total ucFileBuf bytes, not remainder
iBytesRead += iOffset;
} else {
// We consumed everything, so move the pointer to the zero.
// We haven't read CRC for the block, but it doesn't matter as
// pfnSeek will move past it to the next chunk.
iOffset = 0;
if (y != pPage->iHeight && iFileOffset < pPage->PNGFile.iSize) {
// need to read more IDAT chunks
if (iBytesRead) { // data remaining in buffer
// move the data down
memmove(pPage->ucFileBuf, &pPage->ucFileBuf[iOffset], iBytesRead);
iOffset = 0;
} else {
iBytesRead = (*pPage->pfnRead)(&pPage->PNGFile, pPage->ucFileBuf, PNG_FILE_BUF_SIZE);
iFileOffset += iBytesRead;
iOffset = 0;
}
}
break;
// case 0x69545874: //'iTXt'
@@ -999,6 +889,14 @@ PNG_STATIC int DecodePNG(PNGIMAGE *pPage, void *pUser, int iOptions)
#endif
} // switch
iOffset += (iLen + 4); // skip data + CRC
if (iOffset > iBytesRead-8) { // need to read more data
iFileOffset += (iOffset - iBytesRead);
(*pPage->pfnSeek)(&pPage->PNGFile, iFileOffset);
iBytesRead = (*pPage->pfnRead)(&pPage->PNGFile, s, PNG_FILE_BUF_SIZE);
iFileOffset += iBytesRead;
iOffset = 0;
}
} // while !bDone
} // while y < height
err = inflateEnd(&d_stream);
return pPage->iError;
-63
View File
@@ -1,63 +0,0 @@
//
// ESP32-S3 SIMD optimized code
// Written by Larry Bank
// Copyright (c) 2024 BitBank Software, Inc.
// written April 17, 2024
//
#ifdef ARDUINO_ARCH_ESP32
#include "dsps_fft2r_platform.h"
#if (dsps_fft2r_sc16_aes3_enabled == 1)
.text
.align 4
// Convert N pixels of RGBA (RGB8888) to RGB565
// A2 A3 A4 A5
// Call as void s3_rgb565(uint8_t *pSrc, uint8_t *pDest, int iCount, bool bBigEndian);
.global s3_rgb565
.type s3_rgb565,@function
s3_rgb565:
# no idea what this frequency keyword does
# .frequency 1.000 0.000
entry a1,16
addi.n a4,a4,7 # process pixels in groups of 8
movi.n a6,-8
and a4,a4,a6
.top_rgb565:
ee.vld.128.ip q0,a2,16 # load 4 pixels into Q0
ee.vld.128.ip q1,a2,16 # load another 4 pixels into Q1
ee.xorq q4,q4,q4 # destination reg set to 0s
ee.vcmp.eq.s16 q2,q2,q2 # create FFs
ee.vunzip.16 q0,q1 # interleave RG and BA from Q0/Q1
ee.vsubs.s16 q3,q4,q2 # make 16-bit 1's in q3
movi.n a6,10 # load the shift register with 10 (for green)
wsr.sar a6 # put it in the SAR (shift amount register)
ee.vmul.u16 q5,q0,q3 # shift green into lower 6 bits of q5
movi.n a6,3 # shift value 3 for red and blue
wsr.sar a6
ee.vmul.s16 q6,q0,q3 # shift red into lower 5 bits of q6
ee.vmul.s16 q7,q1,q3 # shift blue into lower 5 bits of q7
movi.n a6,5
wsr.sar a6 # set shift to 5
ee.vsl.32 q4,q3 # q4 = 0x00200020...
ee.vsubs.s16 q4,q4,q3 # Now q4 has the r/b mask of 0x001f001f...
ee.andq q6,q4,q6 # mask off 5 bits of red
ee.andq q7,q4,q7 # mask off 5 bits of blue
ee.vsl.32 q5,q5 # shift green left 5
movi.n a6,11
wsr.sar a6 # set shift to 11
ee.vsl.32 q6,q6 # shift red left 11
ee.orq q6,q6,q5 # combine red+green
ee.orq q6,q6,q7 # combine rg with b
mv.qr q5,q6 # in case we're generating little endian output
beqi a5,0,.rgb565_out # RGB565 little endian?
ee.vunzip.8 q6,q5 # swap the byte order to be big-endian
ee.vzip.8 q5,q6
.rgb565_out:
ee.vst.128.ip q5,a3,16 # store 8 RGB565 pixels
addi.n a4,a4,-8
bnez.n a4,.top_rgb565
retw.n
#endif // dsps_fft2r_sc16_aes3_enabled
#endif // ESP32
-4
View File
@@ -8,10 +8,6 @@
#ifndef ZCONF_H
#define ZCONF_H
#ifdef __GNUC__
#pragma GCC optimize("O2")
#endif
/*
* If you *really* need a unique prefix for all types and library functions,
* compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
+13 -6
View File
@@ -24,12 +24,12 @@ z_const char * const z_errmsg[10] = {
};
const char * ZEXPORT zlibVersion(void)
const char * ZEXPORT zlibVersion()
{
return ZLIB_VERSION;
}
uLong ZEXPORT zlibCompileFlags(void)
uLong ZEXPORT zlibCompileFlags()
{
uLong flags;
@@ -119,7 +119,8 @@ uLong ZEXPORT zlibCompileFlags(void)
# endif
int ZLIB_INTERNAL z_verbose = verbose;
void ZLIB_INTERNAL z_error (char * m)
void ZLIB_INTERNAL z_error (m)
char *m;
{
fprintf(stderr, "%s\n", m);
exit(1);
@@ -129,7 +130,8 @@ void ZLIB_INTERNAL z_error (char * m)
/* exported to allow conversion of error code to string for compress() and
* uncompress()
*/
const char * ZEXPORT zError(int err)
const char * ZEXPORT zError(err)
int err;
{
return ERR_MSG(err);
}
@@ -300,7 +302,10 @@ extern voidp calloc OF((uInt items, uInt size));
extern void free OF((voidpf ptr));
#endif
voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size)
voidpf ZLIB_INTERNAL zcalloc (opaque, items, size)
voidpf opaque;
unsigned items;
unsigned size;
{
(void)opaque;
// return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) :
@@ -308,7 +313,9 @@ voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size)
return Z_NULL; // DEBUG - no longer used
}
void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
void ZLIB_INTERNAL zcfree (opaque, ptr)
voidpf opaque;
voidpf ptr;
{
(void)opaque;
// free(ptr); // DEBUG - no longer used
+1 -2
View File
@@ -24,7 +24,6 @@
#if defined(STDC) && !defined(Z_SOLO)
# if !(defined(_WIN32_WCE) && defined(_MSC_VER))
# include <stddef.h>
# include <stdint.h>
# endif
# include <string.h>
# include <stdlib.h>
@@ -160,7 +159,7 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
# define OS_CODE 18
#endif
#if defined( __APPLE__ ) && !(defined(MACOS) || defined(TARGET_OS_MAC))
#ifdef __APPLE__
# define OS_CODE 19
#endif
-143
View File
@@ -1,143 +0,0 @@
#ifndef PROGMEM
#define PROGMEM
#endif
const uint8_t bugpng[] PROGMEM = {
0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x01, 0x2F, 0x00, 0x00, 0x00, 0xA1, 0x08, 0x06, 0x00, 0x00, 0x00, 0x96, 0x13, 0x39,
0xC4, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xAE, 0xCE, 0x1C, 0xE9, 0x00, 0x00,
0x00, 0x04, 0x67, 0x41, 0x4D, 0x41, 0x00, 0x00, 0xB1, 0x8F, 0x0B, 0xFC, 0x61, 0x05, 0x00, 0x00,
0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x12, 0x74, 0x00, 0x00, 0x12, 0x74, 0x01, 0xDE,
0x66, 0x1F, 0x78, 0x00, 0x00, 0x04, 0x0F, 0x49, 0x44, 0x41, 0x54, 0x78, 0x5E, 0xED, 0xD4, 0xD9,
0x72, 0xE3, 0x48, 0x0C, 0x44, 0x51, 0xFF, 0xFF, 0x4F, 0x7B, 0xC4, 0x98, 0x76, 0x87, 0x5A, 0xCE,
0x82, 0xC4, 0x5A, 0xB1, 0xDC, 0x13, 0x91, 0x0F, 0x33, 0x2D, 0x93, 0x55, 0x00, 0x88, 0xAF, 0x6F,
0x00, 0x08, 0x88, 0xE5, 0x05, 0x20, 0x24, 0x96, 0x17, 0x80, 0x90, 0x58, 0x5E, 0x48, 0xED, 0xEB,
0xEB, 0xEB, 0x6F, 0x90, 0x0B, 0x1D, 0x45, 0x5A, 0xCF, 0x8B, 0x8B, 0x05, 0x96, 0x0F, 0xDD, 0x44,
0x5A, 0x2C, 0xAF, 0xDC, 0xE8, 0x26, 0xD2, 0x62, 0x79, 0xE5, 0x46, 0x37, 0x91, 0x16, 0xCB, 0x2B,
0x37, 0xBA, 0x89, 0xB4, 0x58, 0x5E, 0xB9, 0xD1, 0x4D, 0xA4, 0xC5, 0xF2, 0xCA, 0x8D, 0x6E, 0x22,
0x2D, 0x96, 0x57, 0x6E, 0x74, 0x13, 0x29, 0xB1, 0xB8, 0xF2, 0xA3, 0xA3, 0x48, 0x89, 0xE5, 0x95,
0x1F, 0x1D, 0x45, 0x4A, 0x2C, 0xAF, 0xFC, 0xE8, 0x28, 0x52, 0x62, 0x79, 0xE5, 0x47, 0x47, 0x91,
0x12, 0xCB, 0x2B, 0x3F, 0x3A, 0x8A, 0x94, 0x58, 0x5E, 0xF9, 0x1D, 0xE9, 0x28, 0x03, 0x85, 0xD5,
0x9E, 0x67, 0x8C, 0x59, 0xCB, 0x69, 0x7B, 0x47, 0xD5, 0x50, 0x5D, 0x01, 0x66, 0x62, 0xC6, 0xF2,
0x73, 0xB3, 0xBC, 0x7E, 0x02, 0xCC, 0xC0, 0x6C, 0xE5, 0xE7, 0x6E, 0x79, 0xFD, 0x04, 0x18, 0xC1,
0x4C, 0xE5, 0x77, 0xA4, 0xA3, 0x6A, 0xB0, 0x5A, 0x01, 0xEE, 0x62, 0x8E, 0x6A, 0x38, 0xDA, 0x55,
0x35, 0x64, 0x2A, 0xC0, 0x1D, 0xCC, 0x50, 0x0D, 0x2E, 0xBA, 0xAA, 0x86, 0x4D, 0x05, 0xF8, 0x04,
0xB3, 0x53, 0x83, 0xAB, 0xAE, 0xAA, 0xA1, 0x53, 0x01, 0x2C, 0xCC, 0x4C, 0x0D, 0xEE, 0xBA, 0xAA,
0x06, 0xAF, 0x15, 0x40, 0x61, 0x56, 0x6A, 0x70, 0xDB, 0x55, 0x35, 0x80, 0xAD, 0x00, 0xCF, 0x98,
0x91, 0x1A, 0xDC, 0x77, 0x55, 0x0D, 0x62, 0x2B, 0xC0, 0x85, 0xD9, 0xA8, 0x21, 0x4C, 0x57, 0xD5,
0x40, 0xB6, 0x82, 0xDA, 0x98, 0x89, 0x1A, 0xC2, 0x75, 0x55, 0x0D, 0x66, 0x2B, 0xA8, 0x89, 0x59,
0xA8, 0x21, 0x6C, 0x57, 0xD5, 0x80, 0xAA, 0xA0, 0x1E, 0xE6, 0xA0, 0x86, 0xF0, 0x5D, 0x55, 0x83,
0xAA, 0x82, 0x1A, 0xE8, 0x7D, 0x1D, 0x69, 0x3A, 0xAB, 0x86, 0x56, 0x05, 0xB9, 0xD1, 0xF3, 0x3A,
0x52, 0x75, 0x56, 0x0D, 0x6E, 0x2B, 0xC8, 0x89, 0x5E, 0xD7, 0x91, 0xB2, 0xB3, 0x6A, 0x80, 0x5B,
0x41, 0x2E, 0xF4, 0xB8, 0x8E, 0xD4, 0x9D, 0x55, 0x83, 0xDC, 0x0A, 0x72, 0x68, 0xF5, 0xF6, 0xF5,
0xBF, 0x11, 0x5F, 0x89, 0x4E, 0x3E, 0x0F, 0xEE, 0xBB, 0x20, 0x36, 0xD5, 0x53, 0x15, 0xC4, 0x57,
0xAA, 0x8B, 0x6A, 0x88, 0x5B, 0x41, 0x4C, 0xAA, 0x97, 0x2A, 0x88, 0xAF, 0x64, 0x17, 0xD5, 0x30,
0xAB, 0x20, 0x16, 0xD5, 0xC3, 0x56, 0x10, 0x5F, 0xE9, 0x2E, 0xAA, 0xA1, 0x56, 0x81, 0x6F, 0xAA,
0x67, 0x56, 0x90, 0x03, 0x9D, 0x7C, 0x50, 0x03, 0xAE, 0x02, 0x5F, 0x54, 0x8F, 0xAC, 0x20, 0x17,
0x3A, 0xFA, 0x87, 0x1A, 0xF6, 0x56, 0x70, 0x96, 0xEA, 0x89, 0x15, 0xE4, 0x44, 0x67, 0x5F, 0xA8,
0xE1, 0x6F, 0x05, 0x7B, 0xA9, 0x1E, 0xBC, 0x0B, 0xF2, 0xA2, 0xBB, 0x0D, 0xEA, 0x43, 0x68, 0x05,
0xEB, 0xA8, 0x7A, 0xDF, 0x09, 0xF2, 0xA2, 0xBB, 0x6F, 0xA8, 0x0F, 0xA2, 0x15, 0xCC, 0xA3, 0xEA,
0x6B, 0xA5, 0xF5, 0x37, 0xC8, 0x8B, 0xEE, 0x7E, 0x48, 0x7D, 0x18, 0xAD, 0xA0, 0x9F, 0xAA, 0xA7,
0x95, 0x67, 0xEF, 0xFE, 0x1D, 0xB9, 0xD0, 0xDD, 0x9B, 0xD4, 0x07, 0xA2, 0x82, 0x7B, 0x54, 0x0D,
0xAD, 0x28, 0x9F, 0xFE, 0x0E, 0x39, 0xD0, 0xDD, 0x4E, 0xEA, 0x43, 0x51, 0x81, 0x4D, 0xD5, 0xCC,
0x8A, 0xE5, 0xEE, 0xEF, 0x11, 0x1B, 0xDD, 0x1D, 0xA4, 0x3E, 0x18, 0x15, 0xFC, 0x4B, 0xD5, 0xC8,
0xCA, 0x27, 0x7A, 0xFF, 0x0E, 0x31, 0xD1, 0xDD, 0x09, 0xD4, 0x47, 0xD3, 0x4A, 0x65, 0xAA, 0x1E,
0x56, 0xEE, 0x9A, 0xF1, 0x0C, 0xC4, 0x41, 0x77, 0x27, 0x52, 0x1F, 0x4F, 0x2B, 0x95, 0xA8, 0xFB,
0x5B, 0xE9, 0x35, 0xF3, 0x59, 0xF0, 0x8F, 0xEE, 0x2E, 0xA0, 0x3E, 0xA2, 0x56, 0x32, 0x53, 0xF7,
0xB5, 0x32, 0x6A, 0xF6, 0xF3, 0xE0, 0x1B, 0x1D, 0x5E, 0xE8, 0xF5, 0x63, 0xB2, 0x92, 0x89, 0xBA,
0x9F, 0x95, 0x19, 0x56, 0x3D, 0x17, 0x7E, 0xD1, 0xE1, 0x0D, 0xD4, 0x87, 0xD5, 0x4A, 0x64, 0xEA,
0x3E, 0x56, 0x66, 0x5A, 0xFD, 0x7C, 0xF8, 0x43, 0x87, 0x37, 0x52, 0x1F, 0x98, 0x4A, 0x24, 0xEA,
0xFC, 0x56, 0x56, 0xD9, 0xF9, 0x2E, 0x6F, 0x2A, 0xDE, 0xF9, 0xC2, 0xF2, 0x3A, 0xE0, 0x79, 0xD8,
0xAC, 0x78, 0xA6, 0xCE, 0x6B, 0x65, 0xB5, 0x13, 0xEF, 0xF4, 0xA0, 0xEA, 0xBD, 0x2F, 0x2C, 0xAF,
0x83, 0xD4, 0xE0, 0xA9, 0x78, 0xA2, 0xCE, 0x67, 0x65, 0x97, 0x93, 0xEF, 0x3E, 0xA9, 0xEA, 0xBD,
0x2F, 0x2C, 0xAF, 0xC3, 0xD4, 0xF0, 0xB5, 0x72, 0x92, 0x3A, 0x8F, 0x95, 0xDD, 0x3C, 0x9C, 0xE1,
0x84, 0xAA, 0xF7, 0xBE, 0xB0, 0xBC, 0x9C, 0x50, 0x43, 0xD8, 0xCA, 0x4E, 0xEA, 0xFD, 0x56, 0x4E,
0xF1, 0x74, 0x96, 0x9D, 0xAA, 0xDE, 0xFB, 0xC2, 0xF2, 0x72, 0x46, 0x0D, 0x63, 0x2B, 0x2B, 0xA9,
0xF7, 0x59, 0x39, 0xCD, 0xE3, 0x99, 0x76, 0xA9, 0x7A, 0x77, 0x96, 0x97, 0x53, 0x6A, 0x20, 0x5B,
0x99, 0x45, 0x3D, 0xDB, 0x8A, 0x27, 0xDE, 0xCF, 0xB7, 0x52, 0xD5, 0xBB, 0xB3, 0xBC, 0x9C, 0x53,
0x83, 0xD9, 0x4A, 0x2F, 0xF5, 0x2C, 0x2B, 0x1E, 0x45, 0x39, 0xE7, 0x0A, 0x55, 0xEF, 0xCE, 0xF2,
0x0A, 0x42, 0x0D, 0x68, 0x2B, 0x9F, 0x52, 0x7F, 0x6B, 0xC5, 0xAB, 0x48, 0x67, 0x5D, 0xA1, 0xEA,
0xFD, 0x59, 0x5E, 0xC1, 0xA8, 0x41, 0x55, 0xB1, 0xA8, 0xDF, 0x5B, 0xF1, 0x2E, 0xE2, 0x99, 0x67,
0xAA, 0x7A, 0x7F, 0x96, 0x57, 0x50, 0x6A, 0x60, 0x55, 0x9E, 0xA9, 0x7F, 0xB7, 0x12, 0x45, 0xE4,
0xB3, 0xCF, 0xA0, 0xEE, 0x7F, 0x25, 0x3B, 0x96, 0x57, 0x60, 0x6A, 0x60, 0x47, 0x13, 0x51, 0x96,
0x7B, 0x8C, 0xA8, 0x58, 0x03, 0x96, 0x57, 0x02, 0x6A, 0x70, 0xEF, 0x26, 0xB2, 0x6C, 0xF7, 0xE9,
0x51, 0xB1, 0x06, 0x2C, 0xAF, 0x44, 0xD4, 0x00, 0xBF, 0x4B, 0x06, 0x59, 0xEF, 0x75, 0x47, 0xC5,
0x1A, 0xB0, 0xBC, 0x92, 0x50, 0xC3, 0xFB, 0x49, 0x32, 0xC8, 0x7A, 0xAF, 0x3B, 0x2A, 0xD6, 0x80,
0xE5, 0x15, 0x9C, 0x1A, 0xDA, 0x9E, 0x44, 0x96, 0xED, 0x3E, 0x3D, 0x54, 0x0D, 0xAE, 0x64, 0xC6,
0xF2, 0x0A, 0x48, 0x0D, 0xE9, 0xAC, 0x44, 0x94, 0xE5, 0x1E, 0xA3, 0xAA, 0xD5, 0x81, 0xE5, 0x15,
0x88, 0x1A, 0x4E, 0x2B, 0xAF, 0xD4, 0x6F, 0x54, 0xA2, 0xC9, 0x70, 0x87, 0x19, 0xAA, 0xD5, 0x81,
0xE5, 0x15, 0x80, 0x1A, 0x4A, 0x2B, 0xEF, 0xA8, 0xBF, 0x51, 0x89, 0x20, 0xEA, 0xB9, 0x57, 0xA8,
0x56, 0x0B, 0x96, 0x97, 0x63, 0x6A, 0x18, 0xAD, 0xDC, 0xA5, 0x9E, 0xA1, 0xE2, 0x59, 0xB4, 0xF3,
0xAE, 0x54, 0xAD, 0x16, 0x2C, 0x2F, 0x87, 0xD4, 0x10, 0x5A, 0x19, 0xA1, 0x9E, 0xD7, 0x8A, 0x47,
0x51, 0xCE, 0xB9, 0x83, 0xAA, 0xC5, 0x95, 0xAC, 0x58, 0x5E, 0x8E, 0xA8, 0xC1, 0xB3, 0x32, 0x93,
0x7A, 0x7E, 0x2B, 0x9E, 0x78, 0x3F, 0xDF, 0x6E, 0x95, 0xEA, 0xC1, 0xF2, 0x3A, 0x4C, 0x0D, 0x9B,
0x95, 0xD5, 0xD4, 0x3B, 0x5B, 0xF1, 0xC0, 0xEB, 0xB9, 0x4E, 0xA9, 0x54, 0x0F, 0x96, 0xD7, 0x21,
0x6A, 0xC8, 0xAC, 0xEC, 0xA6, 0xCE, 0xD0, 0xCA, 0x49, 0xDE, 0xCE, 0x73, 0x5A, 0xA5, 0x7A, 0xB0,
0xBC, 0x36, 0x53, 0xC3, 0x65, 0xE5, 0x34, 0x75, 0xA6, 0x56, 0x4D, 0x9E, 0x6A, 0x8A, 0x00, 0x00,
0x04, 0x0F, 0x49, 0x44, 0x41, 0x54, 0x4E, 0xF0, 0x72, 0x0E, 0x2F, 0x2A, 0xD5, 0x83, 0xE5, 0xB5,
0x89, 0x1A, 0x2A, 0x2B, 0xDE, 0xA8, 0x33, 0xAA, 0xEC, 0xE6, 0xE1, 0x0C, 0x9E, 0x54, 0xAA, 0x07,
0xCB, 0x6B, 0x31, 0x35, 0x4C, 0x56, 0xBC, 0x53, 0x67, 0x56, 0xD9, 0xE5, 0xE4, 0xBB, 0xBD, 0xAA,
0x52, 0x13, 0x3A, 0xBD, 0x80, 0x1A, 0x1E, 0x2B, 0x11, 0xA9, 0x7B, 0xA8, 0xAC, 0x76, 0xE2, 0x9D,
0xDE, 0x55, 0xA9, 0x09, 0x9D, 0x9E, 0x48, 0x0D, 0x8D, 0x95, 0xE8, 0xD4, 0x9D, 0x5A, 0x59, 0x61,
0xD7, 0x7B, 0xA2, 0xA9, 0x52, 0x17, 0xBA, 0x3D, 0x81, 0x1A, 0x16, 0x2B, 0xD9, 0xA8, 0x3B, 0xAA,
0xCC, 0xB6, 0xE3, 0x1D, 0x11, 0x55, 0xA9, 0x0B, 0xDD, 0x1E, 0xA0, 0x86, 0xC4, 0x4A, 0x76, 0xEA,
0xCE, 0xCF, 0x99, 0x6D, 0xC7, 0x3B, 0x22, 0x9A, 0x55, 0x97, 0x19, 0xCF, 0x58, 0x89, 0x6E, 0x77,
0x78, 0x6D, 0xEA, 0xBB, 0x54, 0xA3, 0x6A, 0x70, 0x65, 0xB6, 0x1D, 0xEF, 0x88, 0xAA, 0xB7, 0x36,
0xEA, 0xEF, 0x9E, 0xE3, 0x09, 0xDD, 0xBE, 0x41, 0x35, 0xD3, 0x4A, 0x75, 0xAB, 0x6B, 0xF1, 0xFC,
0xFC, 0x95, 0xEF, 0x89, 0xE8, 0xD3, 0xDA, 0xA8, 0xDF, 0x59, 0xF1, 0x84, 0x6E, 0xBF, 0xA1, 0x1A,
0x68, 0x05, 0xFB, 0x50, 0xFF, 0xB6, 0x56, 0x6D, 0xD4, 0xFF, 0xBF, 0x13, 0x4F, 0xE8, 0x76, 0x83,
0x6A, 0x9C, 0x15, 0xEC, 0x47, 0x1F, 0xDA, 0x54, 0x6D, 0x46, 0xE3, 0x0D, 0xDD, 0x7E, 0xA1, 0x9A,
0x66, 0x05, 0xE7, 0xD0, 0x0F, 0x4D, 0xD5, 0xA5, 0x37, 0x9E, 0xD1, 0xED, 0x3F, 0x54, 0xE3, 0xAC,
0xE0, 0x3C, 0xFA, 0xF2, 0x3F, 0x55, 0x87, 0xDE, 0x44, 0x52, 0xFE, 0x2B, 0x54, 0x0D, 0xB4, 0x02,
0x3F, 0xAA, 0xF6, 0x47, 0xDD, 0xBB, 0x37, 0x91, 0x95, 0xFC, 0x1A, 0x55, 0x13, 0xAD, 0xC0, 0x9F,
0x4A, 0x7D, 0x52, 0x77, 0x1D, 0x49, 0x16, 0xA5, 0xBE, 0x4C, 0xD5, 0x48, 0x2B, 0xF0, 0x2B, 0x73,
0xBF, 0xD4, 0xDD, 0x66, 0x25, 0x93, 0x12, 0x5F, 0xA8, 0x6A, 0xA2, 0x15, 0xF8, 0x97, 0xAD, 0x6F,
0xEA, 0x3E, 0xBD, 0xF9, 0x61, 0xFD, 0x5B, 0x06, 0xA9, 0xBF, 0x54, 0xD5, 0x3C, 0x2B, 0x88, 0x23,
0x7A, 0xFF, 0xD4, 0xF9, 0x7B, 0xD3, 0xA2, 0x7E, 0x7B, 0x25, 0x8B, 0x94, 0x5F, 0xAC, 0x6A, 0x98,
0x15, 0xC4, 0x13, 0xAD, 0x8F, 0xEA, 0xBC, 0x23, 0xF9, 0xD4, 0xC8, 0xDF, 0x7A, 0x97, 0xE6, 0x26,
0xAA, 0x49, 0xEF, 0x82, 0xB8, 0xBC, 0xF7, 0x53, 0x9D, 0x6F, 0x24, 0xBD, 0x66, 0x3E, 0xCB, 0x9B,
0xF0, 0x37, 0x51, 0xCD, 0xB1, 0x82, 0x1C, 0x3C, 0xF6, 0x56, 0x9D, 0xA9, 0x37, 0xB3, 0xAC, 0x7C,
0xF6, 0x69, 0x61, 0x6F, 0xA2, 0x9A, 0x62, 0x05, 0xB9, 0x78, 0xE8, 0xB1, 0x3A, 0x43, 0x6F, 0x56,
0xD9, 0xF9, 0xAE, 0xDD, 0xC2, 0xDD, 0x44, 0x35, 0xC3, 0x0A, 0x72, 0x3A, 0xD1, 0x6B, 0xF5, 0xCE,
0xDE, 0xEC, 0x72, 0xF2, 0xDD, 0xAB, 0x85, 0xB9, 0x89, 0x6A, 0x82, 0x15, 0xE4, 0xB6, 0xA3, 0xE7,
0xEA, 0x1D, 0x23, 0x39, 0xC5, 0xD3, 0x59, 0x66, 0x72, 0x7F, 0x0B, 0x55, 0x78, 0x2B, 0xA8, 0x61,
0x45, 0xDF, 0x5F, 0x9F, 0x39, 0x1A, 0x2F, 0x3C, 0x9F, 0x6D, 0x84, 0xCB, 0x5B, 0xA8, 0x62, 0x5B,
0x41, 0x2D, 0x33, 0x67, 0x40, 0x3D, 0xAB, 0x37, 0x5E, 0x45, 0x3A, 0xEB, 0x1D, 0xAE, 0x6E, 0xA1,
0x8A, 0x6C, 0x05, 0x35, 0x8D, 0xCC, 0x82, 0xFA, 0xDB, 0xDE, 0x44, 0x11, 0xF9, 0xEC, 0x16, 0x17,
0xB7, 0x50, 0xC5, 0xB5, 0x82, 0xDA, 0xEE, 0xCC, 0x84, 0xFA, 0xED, 0x48, 0x22, 0xCA, 0x72, 0x8F,
0x57, 0x47, 0x6F, 0xA1, 0x8A, 0x6A, 0x05, 0xB8, 0x58, 0xB3, 0xA1, 0xFE, 0x6D, 0x24, 0x59, 0x64,
0xBC, 0xDB, 0x91, 0x1B, 0xA8, 0x42, 0x5A, 0x01, 0x9E, 0xA9, 0x19, 0x99, 0x95, 0xAC, 0x32, 0xDE,
0x75, 0xDB, 0x0D, 0x54, 0xF1, 0xAC, 0x00, 0x2D, 0x6A, 0x5E, 0x7A, 0x53, 0x45, 0xC6, 0xBB, 0x2F,
0xBF, 0x81, 0x2A, 0x9A, 0x15, 0xE0, 0x95, 0x9A, 0x93, 0xDE, 0x54, 0x95, 0xB1, 0x16, 0xCB, 0x6E,
0xA0, 0x8A, 0x65, 0x05, 0xF8, 0xA1, 0xE6, 0x63, 0x24, 0x60, 0x79, 0x7D, 0x44, 0x15, 0xC9, 0x0A,
0xA0, 0xE6, 0x62, 0x24, 0xF8, 0x4D, 0xD5, 0xE9, 0x4A, 0x64, 0xD3, 0x4E, 0xAF, 0x0A, 0x63, 0x05,
0xB5, 0xA9, 0x99, 0xE8, 0x0D, 0x3E, 0x93, 0xAD, 0x76, 0xC3, 0xA7, 0x57, 0x05, 0xB1, 0x82, 0x9A,
0xD4, 0x2C, 0xCC, 0x0A, 0x3E, 0x93, 0xAD, 0x76, 0x5D, 0xA7, 0x57, 0x45, 0xB0, 0x82, 0x7A, 0xD4,
0x1C, 0x8C, 0xE4, 0x87, 0xF5, 0x6F, 0xB0, 0x65, 0xAB, 0xDD, 0xAD, 0xD3, 0xAB, 0xCB, 0x5B, 0x41,
0x1D, 0xAA, 0xFF, 0x23, 0x69, 0xB9, 0xF3, 0x5B, 0xFC, 0x2B, 0x5B, 0xED, 0x3E, 0x3A, 0xBD, 0xBA,
0xB4, 0x15, 0xE4, 0xA7, 0xFA, 0x3E, 0x92, 0x4F, 0x8D, 0xFC, 0x6D, 0x75, 0xAA, 0x76, 0x57, 0xA2,
0x32, 0x4F, 0xAE, 0x2E, 0x6A, 0x05, 0xB9, 0xA9, 0x9E, 0xF7, 0xA6, 0xD7, 0xCC, 0x67, 0x55, 0x94,
0xA9, 0x7E, 0xF2, 0xE4, 0xEA, 0x82, 0x56, 0x90, 0x93, 0xEA, 0x75, 0x6F, 0x66, 0x59, 0xF9, 0xEC,
0x0A, 0x32, 0xD5, 0xEF, 0xEF, 0xC9, 0xD5, 0xA5, 0xAC, 0x20, 0x1F, 0xD5, 0xE7, 0x91, 0xAC, 0xB0,
0xEB, 0x3D, 0x59, 0x65, 0xAA, 0xDF, 0xE3, 0xEC, 0xBF, 0x2F, 0x63, 0x05, 0x79, 0xA8, 0xFE, 0x8E,
0x64, 0x87, 0x53, 0xEF, 0xCD, 0x22, 0x53, 0xFD, 0x1E, 0x67, 0xFF, 0x7D, 0x19, 0x15, 0xE4, 0xA0,
0x7A, 0xDB, 0x9B, 0x13, 0xBC, 0x9C, 0x23, 0xAA, 0x4C, 0xF5, 0x7B, 0x9C, 0xFD, 0xF7, 0x65, 0x9E,
0x83, 0xD8, 0x54, 0x4F, 0x7B, 0xE3, 0x81, 0xD7, 0x73, 0x45, 0x92, 0xA5, 0x86, 0x8F, 0x73, 0xFF,
0xBE, 0xC8, 0x15, 0xC4, 0xA4, 0x7A, 0x39, 0x12, 0x4F, 0xBC, 0x9F, 0x2F, 0x8A, 0x2C, 0x75, 0x7C,
0x9C, 0x3B, 0xFE, 0x25, 0x2A, 0x7B, 0xED, 0xDF, 0x68, 0x3C, 0x8B, 0x76, 0x5E, 0xAF, 0xB2, 0xD4,
0xF1, 0x71, 0x6E, 0x06, 0x20, 0x9A, 0xE7, 0xA1, 0x1B, 0x4D, 0x24, 0xD1, 0xCF, 0xEF, 0x45, 0x96,
0x3A, 0xD2, 0xFD, 0x60, 0xD4, 0xE0, 0xDD, 0x49, 0x64, 0xD9, 0xEE, 0x73, 0x4A, 0x96, 0x3A, 0xD2,
0xFD, 0x60, 0xD4, 0xE0, 0x59, 0xC9, 0x24, 0xFB, 0xFD, 0x76, 0xCA, 0x50, 0x4B, 0xBA, 0x1F, 0x8C,
0x1A, 0xBA, 0xD7, 0x64, 0x55, 0xE9, 0xAE, 0xAB, 0x65, 0xA8, 0x25, 0xDD, 0x0F, 0x28, 0xFA, 0xD0,
0x8D, 0xA8, 0x7A, 0xEF, 0xD9, 0x9E, 0xEB, 0x18, 0xB5, 0x9E, 0x4C, 0x00, 0x50, 0x10, 0xCB, 0x0B,
0x40, 0x48, 0x2C, 0x2F, 0x00, 0x21, 0xA9, 0xE5, 0x75, 0x25, 0x12, 0x96, 0x17, 0x50, 0x14, 0xCB,
0x0B, 0x40, 0x48, 0x2C, 0x2F, 0x00, 0x21, 0xB1, 0xBC, 0x00, 0x84, 0xC4, 0xF2, 0x02, 0x10, 0x92,
0x5A, 0x5E, 0x57, 0xA2, 0x60, 0x79, 0x01, 0x85, 0xB1, 0xBC, 0x00, 0x84, 0xC4, 0xF2, 0x02, 0x10,
0x12, 0xCB, 0x0B, 0x40, 0x48, 0x2C, 0x2F, 0x00, 0x21, 0xA9, 0xE5, 0x75, 0x25, 0x02, 0x96, 0x17,
0x50, 0x1C, 0xCB, 0x0B, 0x40, 0x48, 0x2C, 0x2F, 0x00, 0x21, 0xB1, 0xBC, 0x00, 0x84, 0xC4, 0xF2,
0x02, 0x10, 0x56, 0xB4, 0xC5, 0x75, 0x61, 0x79, 0x01, 0x08, 0x89, 0xE5, 0x05, 0x20, 0x24, 0x96,
0x17, 0x80, 0x90, 0x58, 0x5E, 0x00, 0x42, 0x62, 0x79, 0x01, 0x08, 0x89, 0xE5, 0x05, 0x20, 0x24,
0x96, 0x17, 0x80, 0x90, 0x58, 0x5E, 0x00, 0x42, 0x62, 0x79, 0x01, 0x08, 0x89, 0xE5, 0x05, 0x20,
0x24, 0x96, 0x17, 0x80, 0x90, 0x58, 0x5E, 0x00, 0x42, 0x62, 0x79, 0x01, 0x08, 0xE8, 0xFB, 0xFB,
0x3F, 0x19, 0x23, 0xCB, 0x92, 0xF2, 0xE4, 0xEF, 0xED, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E,
0x44, 0xAE, 0x42, 0x60, 0x82};
Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

File diff suppressed because it is too large Load Diff
@@ -1,66 +0,0 @@
//
// octocat_8bpp
// Data size = 872 bytes
//
// PNG, Compression=Flate, Size: 120 x 100, 8-Bpp
//
// for non-Arduino builds...
#ifndef PROGMEM
#define PROGMEM
#endif
const uint8_t octocat_8bpp[] PROGMEM = {
0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,
0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x64,0x08,0x03,0x00,0x00,0x00,0x7a,0xae,0x04,
0x00,0x00,0x00,0x00,0x33,0x50,0x4c,0x54,0x45,0x2f,0x41,0x70,0x00,0x00,0x00,0x2a,
0x2c,0x2c,0x59,0x49,0x41,0x46,0x5f,0x6a,0x7c,0x65,0x58,0xad,0x5c,0x53,0xb5,0x70,
0x67,0xa0,0x80,0x71,0x6c,0x99,0xac,0xc9,0xa1,0x8f,0x83,0xb7,0xc9,0x7b,0xbb,0xe4,
0xdc,0xc5,0xc3,0x9b,0xd8,0xf0,0xf4,0xc9,0xb3,0xff,0xff,0xff,0xfe,0x29,0xa3,0x31,
0x00,0x00,0x00,0x01,0x74,0x52,0x4e,0x53,0x00,0x40,0xe6,0xd8,0x66,0x00,0x00,0x00,
0x01,0x62,0x4b,0x47,0x44,0x00,0x88,0x05,0x1d,0x48,0x00,0x00,0x02,0xd6,0x49,0x44,
0x41,0x54,0x68,0xde,0xed,0xd9,0xed,0x92,0xa3,0x20,0x10,0x05,0x50,0x04,0x54,0x68,
0x47,0xcc,0xfb,0x3f,0xed,0xa2,0x80,0x9f,0xb0,0x62,0x79,0x89,0x33,0x55,0xf6,0x8f,
0xdd,0x52,0x9c,0x3e,0x69,0x04,0xc4,0x84,0xb1,0x37,0x76,0xc1,0x6d,0x5c,0xfe,0x03,
0x8e,0x71,0x2f,0x64,0xba,0x78,0x79,0x46,0xa6,0xac,0x5c,0x97,0x2e,0xce,0xce,0x75,
0x9a,0x8d,0x5f,0xb8,0xf6,0x1a,0x1c,0xd2,0xf1,0x7d,0x24,0xaf,0x44,0xb9,0x17,0xe2,
0x85,0x5f,0xf8,0xd7,0xc2,0xec,0x85,0x7f,0x3d,0xcc,0x9f,0x72,0x6f,0xca,0xfc,0x2f,
0xc2,0xfc,0x29,0xf7,0x39,0x98,0x3f,0xe5,0x3e,0x07,0xf3,0xbf,0x06,0xf3,0x17,0x16,
0xb5,0x1a,0xa3,0xae,0x6b,0x21,0x44,0x38,0x27,0x84,0x3d,0xf6,0xe7,0x05,0x46,0xde,
0xe6,0xa8,0x15,0x9d,0x87,0xaa,0xe1,0xb0,0xa2,0x21,0x27,0x48,0x09,0x2c,0xac,0x86,
0xdc,0x20,0x81,0x84,0xf3,0xdd,0x61,0x50,0x40,0x38,0xb8,0x1f,0x1b,0x29,0x6f,0x69,
0x53,0x30,0x58,0xd0,0x92,0x3b,0x25,0xaf,0xdb,0x6a,0x14,0xac,0xe6,0xdc,0x7d,0x9f,
0x90,0x7d,0x93,0x6b,0x23,0x10,0xec,0x0b,0xb6,0x89,0xfb,0xb6,0x69,0xfa,0x4f,0x7f,
0x74,0xed,0xc9,0xa6,0x69,0xc7,0x2b,0xa6,0x43,0x81,0x81,0xeb,0xa5,0x28,0x9b,0xde,
0xca,0x91,0x82,0x7b,0xb2,0x1f,0xaa,0x0d,0x25,0x2b,0xcc,0xca,0x35,0xf7,0x34,0x7d,
0x3e,0xb6,0x64,0x8a,0xc1,0xd4,0x7f,0x68,0xfc,0x4c,0xdb,0xbe,0xbe,0xf9,0x74,0x9a,
0x87,0x56,0x4b,0x36,0xb9,0xad,0x2b,0x02,0xb7,0x8d,0xb2,0x4d,0xaa,0x14,0xdc,0x34,
0x69,0xd8,0x35,0x41,0x61,0xf5,0x38,0x4c,0x53,0xf6,0xf8,0x3d,0xf6,0x4d,0x90,0xc1,
0x15,0xe4,0x65,0x54,0x4f,0xd9,0xe3,0xa3,0xda,0x37,0x41,0x61,0x11,0xe6,0xea,0x54,
0x57,0x62,0x1e,0xd3,0xca,0x0d,0x4b,0xd7,0xed,0xed,0x2d,0xad,0x56,0xae,0x3e,0xbd,
0x72,0x2d,0xab,0x1a,0x6a,0x63,0x5d,0x0f,0xd1,0xb5,0x9a,0x1a,0x8a,0xaf,0xd5,0x04,
0x7b,0x87,0xa1,0xe8,0xd3,0x89,0x9a,0x36,0xfa,0x74,0xba,0xdf,0xd3,0xb3,0x5c,0x27,
0x9e,0xf9,0x89,0xd3,0xc0,0xf7,0xd4,0x2b,0x1b,0x01,0xff,0x88,0x00,0xbd,0x99,0x1f,
0x65,0xa2,0xf0,0xcf,0x2e,0x6a,0xd0,0xb7,0xa8,0xa1,0xb7,0x0f,0x44,0x4b,0x03,0xb5,
0x25,0xdd,0xb9,0x68,0x3a,0xd4,0x4c,0xa9,0xad,0x1e,0xf2,0x5b,0xfa,0x68,0xd5,0x89,
0xbd,0x2d,0xf8,0x07,0x82,0x69,0x15,0x53,0xb1,0x3a,0xa7,0xea,0xe7,0x1d,0xf5,0x7d,
0x2a,0xb9,0xdb,0x9d,0x5e,0x5b,0x96,0x10,0x02,0xfc,0x35,0x93,0x94,0x17,0x5f,0xe3,
0x50,0x9d,0x2b,0x65,0x34,0x17,0xaf,0xc6,0x08,0x98,0x3b,0x40,0xff,0xf0,0xd3,0xe9,
0x48,0xca,0x2a,0x12,0x40,0xd6,0xa4,0x7e,0x41,0xaa,0x0e,0x3d,0x8c,0x95,0x8d,0xaf,
0x39,0xef,0x3e,0xe3,0x64,0x63,0x9c,0xa2,0x25,0xcf,0x1a,0x60,0x15,0x63,0xe8,0xfb,
0xac,0xf3,0x06,0x76,0xc5,0xca,0x0e,0xb0,0x6f,0xc1,0xbb,0xf9,0xbc,0x9b,0xb6,0xf8,
0x49,0xbc,0x85,0x75,0x37,0x4d,0x69,0x39,0x0e,0xb5,0x2d,0x55,0x10,0x76,0x25,0x73,
0x6d,0xa4,0x34,0x9a,0xcb,0x4d,0xa9,0x61,0xc2,0x95,0x81,0xb7,0xfd,0x59,0xc5,0x60,
0x56,0x06,0x66,0x8f,0xc1,0x6b,0xfa,0xcb,0x30,0xdb,0x12,0x5f,0x85,0x37,0xb5,0xbf,
0xf0,0x0b,0x17,0x87,0xe5,0x97,0xe1,0x71,0xf1,0xe4,0xee,0xb9,0x35,0xfd,0x67,0x8a,
0xc3,0xc6,0x89,0xda,0xc3,0x66,0x03,0x77,0xc6,0x6d,0x1e,0xf0,0xe8,0x18,0x27,0xb0,
0x41,0xe3,0x26,0x44,0x06,0x0c,0xb4,0x97,0x8c,0x99,0x30,0x86,0x5e,0xe7,0x33,0x32,
0x0a,0x4b,0x37,0xe4,0x0c,0x92,0xde,0x66,0x0b,0xd2,0x0e,0xd6,0xc7,0x92,0xef,0xca,
0x31,0x57,0x9a,0xfd,0x74,0xf2,0x25,0x23,0xe5,0x75,0x22,0xbf,0xe1,0x92,0xf3,0x27,
0x58,0x2a,0xf5,0x4d,0x1a,0x26,0x1f,0xef,0xaf,0xd4,0x73,0xe9,0xd2,0x74,0x0b,0xa7,
0x25,0xb4,0xb7,0x77,0x3d,0xad,0xf5,0x8f,0x8d,0x65,0x8c,0x2d,0xa3,0x6a,0x3c,0xaf,
0xf5,0xce,0x85,0xc1,0x2e,0xbf,0x95,0x75,0xf0,0x3a,0xdf,0xd7,0xfe,0xbc,0x29,0x0c,
0xaf,0x86,0x92,0xbb,0xcb,0x1a,0xed,0x26,0xe4,0x71,0x73,0xaf,0x1d,0xe4,0x3e,0xc5,
0xb7,0xe0,0x9f,0xf9,0x5e,0xbb,0xa3,0x0e,0xef,0x1e,0x68,0x7f,0x33,0xc3,0x3d,0x5d,
0x1f,0x82,0xdd,0x9d,0x1c,0x83,0x4d,0x14,0x06,0xaf,0xd6,0xb9,0x30,0xfc,0xf9,0x94,
0x05,0x97,0xd8,0x08,0x9c,0xc3,0x85,0xb6,0x3e,0xff,0x87,0x59,0xe1,0x88,0xc0,0xec,
0x8d,0xd3,0xf8,0x07,0xe9,0x64,0x82,0xb3,0xf5,0x3d,0x65,0xc0,0x00,0x00,0x00,0x00,
0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82};
-18
View File
@@ -964,17 +964,6 @@ menu "LVGL configuration"
default 0
depends on LV_USE_FS_FATFS
config LV_USE_FS_LITTLEFS
bool "File system on top of LittleFS"
config LV_FS_LITTLEFS_LETTER
int "Set an upper cased letter on which the drive will accessible (e.g. 'A' i.e. 65)"
default 0
depends on LV_USE_FS_LITTLEFS
config LV_FS_LITTLEFS_CACHE_SIZE
int ">0 to cache this number of bytes in lv_fs_read()"
default 0
depends on LV_USE_FS_LITTLEFS
config LV_USE_PNG
bool "PNG decoder library"
@@ -1011,13 +1000,6 @@ menu "LVGL configuration"
endmenu
endif
config LV_USE_TINY_TTF
bool "Tiny TTF library"
config LV_TINY_TTF_FILE_SUPPORT
bool "Load TTF data from files"
depends on LV_USE_TINY_TTF
default n
config LV_USE_RLOTTIE
bool "Lottie library"
View File
View File
-45
View File
@@ -1,50 +1,5 @@
# Changelog
## [v8.3.11](https://github.com/lvgl/lvgl/compare/v8.3.11...v8.3.10) 6 December 2023
### New Features
- feat(table): add user_data to table cells [`4767`](https://github.com/lvgl/lvgl/pull/4767)
- feat(tiny_ttf): backport Tiny TTF to lvgl 8 [`4727`](https://github.com/lvgl/lvgl/pull/4727)
- feat(littlefs): add lv_fs_littlefs system as a driver [`4677`](https://github.com/lvgl/lvgl/pull/4677)
### Fixes
- fix(obj): readjust scroll after layout when child removed [`4921`](https://github.com/lvgl/lvgl/pull/4921)
- fix(rt-thread): fix create lvgl thread problem [`4862`](https://github.com/lvgl/lvgl/pull/4862)
- fix(obj): fix arduino compile warnings [`4807`](https://github.com/lvgl/lvgl/pull/4807)
- fix(table):fix issue with abnormal string output of 'lv_table_set_cell_value_fmt' [`4804`](https://github.com/lvgl/lvgl/pull/4804)
- fix(table) user data API functions renamed [`4769`](https://github.com/lvgl/lvgl/pull/4769)
- fix(ime_pinyin): keep cursor in the textarea when a candidate is pressed [`4731`](https://github.com/lvgl/lvgl/pull/4731)
- fix(draw_needles): changed needle line draw start point from scale ce… [`4682`](https://github.com/lvgl/lvgl/pull/4682)
- fix(arc): handle click outside background angle range (#4586) [`4667`](https://github.com/lvgl/lvgl/pull/4667)
- fix(meter): fix minor issues [`4657`](https://github.com/lvgl/lvgl/pull/4657)
- fix(draw): fix compiler error in lv_draw_sw_transform.c #2 [`4612`](https://github.com/lvgl/lvgl/pull/4612)
- fix(dropdown): avoid partial match in lv_dropdown_get_option_index [`4598`](https://github.com/lvgl/lvgl/pull/4598)
- fix(dropdown): reset char_i = 0, avoid access overflow [`4589`](https://github.com/lvgl/lvgl/pull/4589)
- fix(btnmatrix): set LV_BTNMATRIX_BTN_NONE when clicking of disabled button (#4571) [`4578`](https://github.com/lvgl/lvgl/pull/4578)
- fix(qrcode): use LV_ASSERT instead of assert [`1840dec`](https://github.com/lvgl/lvgl/commit/1840decb4136ba01552fcb7cedb0ff759824e2fd)
- fix: fix warning in lv_draw_sw_letter.c [`d22cda3`](https://github.com/lvgl/lvgl/commit/d22cda3cdb15cee95763491db95753980846d9f9)
- fix(arc): fix setting value by click [`20b6199`](https://github.com/lvgl/lvgl/commit/20b6199ba90319942c3cd91f2c727da6cd40cd2d)
- fix(disp): fix infinite recursive SCREEN_LOADED events [`ef76206`](https://github.com/lvgl/lvgl/commit/ef76206c75ea9de26407534a9ce1079dc8e750e3)
- fix(keyboard): add '&' character [`d20bd1c`](https://github.com/lvgl/lvgl/commit/d20bd1ca397ff954167dd496cf1a78da8814f602)
- fix(draw): fix scaling rectangle parts with opa [`7a8fcbf`](https://github.com/lvgl/lvgl/commit/7a8fcbfd3458739cbe64b29767a969ece9542039)
### Docs
- docs(obj): fix wording [`4625`](https://github.com/lvgl/lvgl/pull/4625)
- docs(label): update text for recoloring [`4606`](https://github.com/lvgl/lvgl/pull/4606)
- docs: fix typo [`9fbac75`](https://github.com/lvgl/lvgl/commit/9fbac7570bdec18ddbb157b59f5e26a2ebdf5daf)
### Others
- chore(cmsis-pack): prepare for v8.3.11 [`4936`](https://github.com/lvgl/lvgl/pull/4936)
- chore(cmake): add support for user-specified lv_conf.h path [`4689`](https://github.com/lvgl/lvgl/pull/4689)
- STM32U5 DMA2D support (8.3) [`4643`](https://github.com/lvgl/lvgl/pull/4643)
- backport: fix(lv_disp): fix lv_scr_load_anim being called twice quickly [`4629`](https://github.com/lvgl/lvgl/pull/4629)
- chore(lv_draw_sw_letter.c): Fix print format [`4615`](https://github.com/lvgl/lvgl/pull/4615)
- chore: fix compile error [`7568df7`](https://github.com/lvgl/lvgl/commit/7568df77d16ecbf2242b2bc290dc8fc0eb29cf5a)
## [v8.3.10](https://github.com/lvgl/lvgl/compare/v8.3.10...v8.3.9) 20 September 2023
### New Features
Executable → Regular
View File

Some files were not shown because too many files have changed in this diff Show More