Files
crosspoint-reader-mod/lib/EpdFont/builtinFonts/bookerly_18_italic.h

3295 lines
273 KiB
C
Raw Normal View History

/**
* generated by fontconvert.py
* name: bookerly_18_italic
* size: 18
perf: Reduce overall flash usage by 30.7% by compressing built-in fonts (#831) ## Summary **What is the goal of this PR?** Compress reader font bitmaps to reduce flash usage by 30.7%. **What changes are included?** - New `EpdFontGroup` struct and extended `EpdFontData` with `groups`/`groupCount` fields - `--compress` flag in `fontconvert.py`: groups glyphs (ASCII base group + groups of 8) and compresses each with raw DEFLATE - `FontDecompressor` class with 4-slot LRU cache for on-demand decompression during rendering - `GfxRenderer` transparently routes bitmap access through `getGlyphBitmap()` (compressed or direct flash) - Uses `uzlib` for decompression with minimal heap overhead. - 48 reader fonts (Bookerly, NotoSans 12-18pt, OpenDyslexic) regenerated with compression; 5 UI fonts unchanged - Round-trip verification script (`verify_compression.py`) runs as part of font generation ## Additional Context ## Flash & RAM | | baseline | font-compression | Difference | |--|--------|-----------------|------------| | Flash (ELF) | 6,302,476 B (96.2%) | 4,365,022 B (66.6%) | -1,937,454 B (-30.7%) | | firmware.bin | 6,468,192 B | 4,531,008 B | -1,937,184 B (-29.9%) | | RAM | 101,700 B (31.0%) | 103,076 B (31.5%) | +1,376 B (+0.5%) | ## Script-Based Grouping (Cold Cache) Comparison of uncompressed baseline vs script-based group compression (4-slot LRU cache, cleared each page). Glyphs are grouped by Unicode block (ASCII, Latin-1, Latin Extended-A, Combining Marks, Cyrillic, General Punctuation, etc.) instead of sequential groups of 8. ### Render Time | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Median** | 414.9 ms | 431.6 ms | +16.7 ms (+4.0%) | | **Pages** | 37 | 37 | | ### Memory Usage | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Heap free (median)** | 187.0 KB | 176.3 KB | -10.7 KB | | **Heap free (min)** | 186.0 KB | 166.5 KB | -19.5 KB | | **Largest block (median)** | 148.0 KB | 128.0 KB | -20.0 KB | | **Largest block (min)** | 148.0 KB | 120.0 KB | -28.0 KB | ### Cache Effectiveness | | Misses/page | Hit rate | |---|---|---| | **Compressed (cold cache)** | 2.1 | 99.85% | ------ ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**YES**_ Implementation was done by Claude Code (Opus 4.6) based on a plan developed collaboratively. All generated font headers were verified with an automated round-trip decompression test. The firmware was compiled successfully but has not yet been tested on-device. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 20:30:15 +11:00
* mode: 2-bit compressed: true
fix: force auto-hinting for Bookerly to fix inconsistent stem widths (#1098) ## Summary Bookerly's native TrueType hinting is effectively a no-op at the sizes used here, causing FreeType to place stems at inconsistent sub-pixel positions. This results in the 'k' stem (8-bit fringe: 0x38=56) falling just below the 2-bit quantization threshold while 'l' and 'h' stems (fringes: 0x4C=76, 0x40=64) land above it --- making 'k' visibly narrower (2.00px vs 2.33px effective width). FreeType's auto-hinter snaps all stems to consistent grid positions, normalizing effective stem width to 2.67px across all glyphs. Adds --force-autohint flag to fontconvert.py and applies it to Bookerly only. NotoSans, OpenDyslexic, and Ubuntu fonts are unaffected. Here is an example of before/after. Take notice of the vertical stems on characters like `l`, `k`, `n`, `i`, etc. The font is Bookerly 12pt regular: **BEFORE**: ![before](https://github.com/user-attachments/assets/65b2acab-ad95-489e-885e-e3a0163cc252) **AFTER**: ![after](https://github.com/user-attachments/assets/d09a8b5d-40af-4a7d-b622-e1b2cabcce85) Claude generated this script to quantitatively determine that this change makes the vertical stems on a variety of characters more consistent for Bookerly _only_. <details> <summary>Python script</summary> ```python #!/usr/bin/env python3 """Compare stem consistency across all font families with and without auto-hinting. Run from repo root: python3 compare_all_fonts.py """ import freetype DPI = 150 CHARS = ["k", "l", "h", "i", "b", "d"] SIZES = [12, 14, 16, 18] FONTS = { "Bookerly": "lib/EpdFont/builtinFonts/source/Bookerly/Bookerly-Regular.ttf", "NotoSans": "lib/EpdFont/builtinFonts/source/NotoSans/NotoSans-Regular.ttf", "OpenDyslexic": "lib/EpdFont/builtinFonts/source/OpenDyslexic/OpenDyslexic-Regular.otf", "Ubuntu": "lib/EpdFont/builtinFonts/source/Ubuntu/Ubuntu-Regular.ttf", } MODES = { "default": freetype.FT_LOAD_RENDER, "autohint": freetype.FT_LOAD_RENDER | freetype.FT_LOAD_FORCE_AUTOHINT, } def q4to2(v): if v >= 12: return 3 elif v >= 8: return 2 elif v >= 4: return 1 else: return 0 def get_stem_eff(face, char, flags): gi = face.get_char_index(ord(char)) if gi == 0: return None face.load_glyph(gi, flags) bm = face.glyph.bitmap w, h = bm.width, bm.rows if w == 0 or h == 0: return None p2 = [] for y in range(h): row = [] for x in range(w): row.append(q4to2(bm.buffer[y * bm.pitch + x] >> 4)) p2.append(row) # Measure leftmost stem in stable middle rows mid_start, mid_end = h // 4, h - h // 4 widths = [] for y in range(mid_start, mid_end): first = next((x for x in range(w) if p2[y][x] > 0), -1) if first < 0: continue last = first for x in range(first, w): if p2[y][x] > 0: last = x else: break eff = sum(p2[y][x] for x in range(first, last + 1)) / 3.0 widths.append(eff) return round(sum(widths) / len(widths), 2) if widths else None def main(): for font_name, font_path in FONTS.items(): try: freetype.Face(font_path) except Exception: print(f"\n {font_name}: SKIPPED (file not found)") continue print(f"\n{'=' * 80}") print(f" {font_name}") print(f"{'=' * 80}") for size in SIZES: print(f"\n {size}pt:") print(f" {'':6s}", end="") for c in CHARS: print(f" '{c}' ", end="") print(" | spread") for mode_name, flags in MODES.items(): face = freetype.Face(font_path) face.set_char_size(size << 6, size << 6, DPI, DPI) vals = [] print(f" {mode_name:6s}", end="") for c in CHARS: v = get_stem_eff(face, c, flags) vals.append(v) print(f" {v:5.2f}" if v else " N/A", end="") valid = [v for v in vals if v is not None] spread = max(valid) - min(valid) if len(valid) >= 2 else 0 marker = " <-- inconsistent" if spread > 0.5 else "" print(f" | {spread:.2f}{marker}") if __name__ == "__main__": main() ``` </details> Here are the results. The table compares how the font-generation `autohint` flag affects the range of widths of various characters. Lower `spread` mean that glyph stroke widths should appear more consistent. ``` Spread = max stem width - min stem width across glyphs (lower = more consistent): ┌──────────────┬──────┬─────────┬──────────┬──────────┐ │ Font │ Size │ Default │ Autohint │ Winner │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ Bookerly │ 12pt │ 1.49 │ 1.12 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 1.39 │ 1.13 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 1.38 │ 1.16 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.90 │ 1.58 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ NotoSans │ 12pt │ 1.16 │ 0.94 │ mixed │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 0.83 │ 1.14 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 1.41 │ 1.51 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.74 │ 1.63 │ mixed │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ OpenDyslexic │ 12pt │ 2.22 │ 1.44 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 2.57 │ 3.29 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 3.13 │ 2.60 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 3.21 │ 3.23 │ ~tied │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ Ubuntu │ 12pt │ 1.25 │ 1.31 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 1.41 │ 1.64 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 2.21 │ 1.71 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.80 │ 1.71 │ autohint │ └──────────────┴──────┴─────────┴──────────┴──────────┘ ``` --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? I used AI to make sure I'm not doing something stupid, since I'm not a typography expert. I made the changes though.
2026-02-24 06:13:08 +11:00
* Command used: fontconvert.py bookerly_18_italic 18 ../builtinFonts/source/Bookerly/Bookerly-Italic.ttf --2bit --compress --force-autohint
*/
#pragma once
#include "EpdFontData.h"
fix: force auto-hinting for Bookerly to fix inconsistent stem widths (#1098) ## Summary Bookerly's native TrueType hinting is effectively a no-op at the sizes used here, causing FreeType to place stems at inconsistent sub-pixel positions. This results in the 'k' stem (8-bit fringe: 0x38=56) falling just below the 2-bit quantization threshold while 'l' and 'h' stems (fringes: 0x4C=76, 0x40=64) land above it --- making 'k' visibly narrower (2.00px vs 2.33px effective width). FreeType's auto-hinter snaps all stems to consistent grid positions, normalizing effective stem width to 2.67px across all glyphs. Adds --force-autohint flag to fontconvert.py and applies it to Bookerly only. NotoSans, OpenDyslexic, and Ubuntu fonts are unaffected. Here is an example of before/after. Take notice of the vertical stems on characters like `l`, `k`, `n`, `i`, etc. The font is Bookerly 12pt regular: **BEFORE**: ![before](https://github.com/user-attachments/assets/65b2acab-ad95-489e-885e-e3a0163cc252) **AFTER**: ![after](https://github.com/user-attachments/assets/d09a8b5d-40af-4a7d-b622-e1b2cabcce85) Claude generated this script to quantitatively determine that this change makes the vertical stems on a variety of characters more consistent for Bookerly _only_. <details> <summary>Python script</summary> ```python #!/usr/bin/env python3 """Compare stem consistency across all font families with and without auto-hinting. Run from repo root: python3 compare_all_fonts.py """ import freetype DPI = 150 CHARS = ["k", "l", "h", "i", "b", "d"] SIZES = [12, 14, 16, 18] FONTS = { "Bookerly": "lib/EpdFont/builtinFonts/source/Bookerly/Bookerly-Regular.ttf", "NotoSans": "lib/EpdFont/builtinFonts/source/NotoSans/NotoSans-Regular.ttf", "OpenDyslexic": "lib/EpdFont/builtinFonts/source/OpenDyslexic/OpenDyslexic-Regular.otf", "Ubuntu": "lib/EpdFont/builtinFonts/source/Ubuntu/Ubuntu-Regular.ttf", } MODES = { "default": freetype.FT_LOAD_RENDER, "autohint": freetype.FT_LOAD_RENDER | freetype.FT_LOAD_FORCE_AUTOHINT, } def q4to2(v): if v >= 12: return 3 elif v >= 8: return 2 elif v >= 4: return 1 else: return 0 def get_stem_eff(face, char, flags): gi = face.get_char_index(ord(char)) if gi == 0: return None face.load_glyph(gi, flags) bm = face.glyph.bitmap w, h = bm.width, bm.rows if w == 0 or h == 0: return None p2 = [] for y in range(h): row = [] for x in range(w): row.append(q4to2(bm.buffer[y * bm.pitch + x] >> 4)) p2.append(row) # Measure leftmost stem in stable middle rows mid_start, mid_end = h // 4, h - h // 4 widths = [] for y in range(mid_start, mid_end): first = next((x for x in range(w) if p2[y][x] > 0), -1) if first < 0: continue last = first for x in range(first, w): if p2[y][x] > 0: last = x else: break eff = sum(p2[y][x] for x in range(first, last + 1)) / 3.0 widths.append(eff) return round(sum(widths) / len(widths), 2) if widths else None def main(): for font_name, font_path in FONTS.items(): try: freetype.Face(font_path) except Exception: print(f"\n {font_name}: SKIPPED (file not found)") continue print(f"\n{'=' * 80}") print(f" {font_name}") print(f"{'=' * 80}") for size in SIZES: print(f"\n {size}pt:") print(f" {'':6s}", end="") for c in CHARS: print(f" '{c}' ", end="") print(" | spread") for mode_name, flags in MODES.items(): face = freetype.Face(font_path) face.set_char_size(size << 6, size << 6, DPI, DPI) vals = [] print(f" {mode_name:6s}", end="") for c in CHARS: v = get_stem_eff(face, c, flags) vals.append(v) print(f" {v:5.2f}" if v else " N/A", end="") valid = [v for v in vals if v is not None] spread = max(valid) - min(valid) if len(valid) >= 2 else 0 marker = " <-- inconsistent" if spread > 0.5 else "" print(f" | {spread:.2f}{marker}") if __name__ == "__main__": main() ``` </details> Here are the results. The table compares how the font-generation `autohint` flag affects the range of widths of various characters. Lower `spread` mean that glyph stroke widths should appear more consistent. ``` Spread = max stem width - min stem width across glyphs (lower = more consistent): ┌──────────────┬──────┬─────────┬──────────┬──────────┐ │ Font │ Size │ Default │ Autohint │ Winner │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ Bookerly │ 12pt │ 1.49 │ 1.12 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 1.39 │ 1.13 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 1.38 │ 1.16 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.90 │ 1.58 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ NotoSans │ 12pt │ 1.16 │ 0.94 │ mixed │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 0.83 │ 1.14 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 1.41 │ 1.51 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.74 │ 1.63 │ mixed │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ OpenDyslexic │ 12pt │ 2.22 │ 1.44 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 2.57 │ 3.29 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 3.13 │ 2.60 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 3.21 │ 3.23 │ ~tied │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ Ubuntu │ 12pt │ 1.25 │ 1.31 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 1.41 │ 1.64 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 2.21 │ 1.71 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.80 │ 1.71 │ autohint │ └──────────────┴──────┴─────────┴──────────┴──────────┘ ``` --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? I used AI to make sure I'm not doing something stupid, since I'm not a typography expert. I made the changes though.
2026-02-24 06:13:08 +11:00
static const uint8_t bookerly_18_italicBitmaps[39004] = {
0xB5, 0x5A, 0x3D, 0xB0, 0xED, 0x56, 0x75, 0xDE, 0x92, 0x3C, 0x4F, 0x01, 0x4D, 0x10, 0x45, 0x98,
0x61, 0x78, 0x49, 0x94, 0x32, 0x3F, 0x8C, 0xD5, 0xA6, 0xB0, 0x9F, 0x84, 0x5D, 0xBA, 0x30, 0x55,
0x28, 0xE9, 0x69, 0x2E, 0x45, 0x8A, 0x14, 0xBE, 0x57, 0x32, 0xCC, 0x84, 0x92, 0x37, 0x0C, 0x33,
0x29, 0x43, 0x41, 0x13, 0x53, 0x40, 0x41, 0xE1, 0xE2, 0xDE, 0x2B, 0x81, 0x0B, 0x17, 0x14, 0x88,
0xF1, 0x4C, 0x28, 0x28, 0x50, 0xC2, 0x4B, 0x01, 0x4C, 0xC6, 0x02, 0x8B, 0xA0, 0xC7, 0x93, 0xB4,
0xF3, 0x7D, 0xDF, 0xDA, 0x3A, 0xE7, 0x3E, 0xFB, 0x99, 0x84, 0xCC, 0xE4, 0xBC, 0x77, 0xA4, 0x73,
0xF5, 0xB3, 0xF6, 0xDA, 0xEB, 0xF7, 0x5B, 0x6B, 0x6F, 0x97, 0x8D, 0xF1, 0xEA, 0xAA, 0x3E, 0x9D,
0x5D, 0xE7, 0xF2, 0xC9, 0x6D, 0xAE, 0xE8, 0xA3, 0xD5, 0x95, 0x6D, 0x32, 0xBB, 0xCA, 0x25, 0x93,
0xBB, 0x72, 0xE9, 0xE0, 0xAE, 0x5D, 0xD6, 0xBB, 0xC5, 0xE5, 0xB5, 0x9B, 0x5D, 0xEE, 0x8E, 0x4F,
0x51, 0x27, 0xAB, 0xEB, 0xFA, 0x6C, 0x76, 0x97, 0xCE, 0xC5, 0xC3, 0xF3, 0x79, 0x7F, 0x53, 0xB4,
0x6B, 0x59, 0xAF, 0x55, 0xB4, 0x54, 0xF1, 0xFC, 0x20, 0x9E, 0x2E, 0x93, 0xE9, 0xB5, 0x64, 0xBC,
0x4E, 0x86, 0x37, 0x93, 0xBE, 0x8E, 0xF0, 0xCA, 0x03, 0xF7, 0x22, 0x8E, 0x73, 0x34, 0x39, 0x97,
0xF6, 0xA0, 0xE9, 0x4A, 0x5C, 0x72, 0x20, 0x3D, 0x3B, 0x97, 0x0C, 0x69, 0xEF, 0x2A, 0x8F, 0xCF,
0xEB, 0x3C, 0x6C, 0xD1, 0xE7, 0x7E, 0xF3, 0xB9, 0xFF, 0xF8, 0x2C, 0x06, 0x2D, 0x6A, 0xE7, 0x5E,
0x03, 0x0F, 0x2E, 0x9E, 0xC0, 0x90, 0xCB, 0xDB, 0xBC, 0x75, 0xA0, 0x73, 0xE9, 0x62, 0x3E, 0xB7,
0xE4, 0x3C, 0x8E, 0x0D, 0x8F, 0xF5, 0x1D, 0x4A, 0xAE, 0x00, 0x71, 0x87, 0xD7, 0x16, 0x5C, 0x18,
0x93, 0xC1, 0x05, 0x4A, 0xF8, 0x64, 0x3A, 0xE0, 0x11, 0xDC, 0xE0, 0xCF, 0x99, 0x87, 0x17, 0xF0,
0xBD, 0xE7, 0x1F, 0x82, 0x25, 0xD2, 0xC1, 0x61, 0x76, 0xE5, 0xF0, 0x1B, 0xEF, 0xF2, 0xFE, 0xB5,
0x62, 0x48, 0xA7, 0xE7, 0x93, 0x39, 0x5E, 0xF2, 0xFA, 0xDA, 0xF9, 0xA4, 0xFF, 0x13, 0x57, 0xFE,
0x88, 0x33, 0xD8, 0xDE, 0xC4, 0x3B, 0x7E, 0xC3, 0x21, 0xF7, 0x60, 0xC9, 0x75, 0xFC, 0x99, 0xFA,
0x81, 0x57, 0x77, 0x1C, 0x5E, 0xE4, 0xCF, 0x22, 0x5F, 0xA2, 0x21, 0x6B, 0x7D, 0x34, 0x27, 0x43,
0xD5, 0xDF, 0xBA, 0x29, 0x9F, 0xCA, 0xFE, 0xB5, 0x64, 0xC9, 0x96, 0xE7, 0xE3, 0xCD, 0xF9, 0x1F,
0xBE, 0xB4, 0xBB, 0xC2, 0xE3, 0xF1, 0xC8, 0x93, 0x52, 0xEC, 0x1F, 0x49, 0x4C, 0xA4, 0x49, 0x66,
0x39, 0x11, 0xCC, 0xDB, 0x49, 0x48, 0xC7, 0x9D, 0x3F, 0x77, 0xCF, 0xFE, 0x7C, 0x11, 0xB3, 0xE2,
0x53, 0xAB, 0x73, 0x8D, 0xC7, 0xE4, 0x66, 0x4A, 0xA8, 0x77, 0xD9, 0xE8, 0xD2, 0x39, 0x1F, 0xA0,
0x59, 0x4C, 0x26, 0x1B, 0xA0, 0x57, 0x57, 0xB4, 0xE9, 0xE8, 0x6E, 0x1C, 0x7E, 0xA6, 0x43, 0xB4,
0xD8, 0x99, 0xB2, 0xBD, 0x82, 0x58, 0x28, 0x98, 0x4B, 0x3C, 0x49, 0x61, 0x5D, 0xE1, 0xC9, 0x07,
0xEE, 0xAF, 0xEB, 0x2B, 0x3C, 0xB1, 0xC6, 0x7E, 0xAA, 0xA2, 0x2D, 0x9A, 0x73, 0xBF, 0x56, 0x7E,
0x49, 0xC6, 0xEA, 0xF5, 0x2D, 0xF7, 0x63, 0xDE, 0x5F, 0xB9, 0xAB, 0x78, 0x87, 0xB0, 0x57, 0x71,
0x77, 0x19, 0xCD, 0xA6, 0x53, 0x70, 0x8D, 0x73, 0x32, 0xC9, 0x88, 0x5C, 0x36, 0x24, 0x1A, 0xB1,
0x68, 0x71, 0x5E, 0x39, 0x62, 0x32, 0x72, 0xE4, 0xCD, 0x9E, 0x88, 0x17, 0xB0, 0x9B, 0x83, 0xD1,
0x89, 0x82, 0x68, 0x31, 0xBC, 0xC9, 0xB0, 0x84, 0x5C, 0xCB, 0x47, 0x41, 0x65, 0x4F, 0x7D, 0x2E,
0xA4, 0x3A, 0x28, 0xAA, 0x97, 0xB0, 0xA4, 0x06, 0x17, 0xAF, 0x99, 0x2E, 0x57, 0x1C, 0x12, 0x6F,
0x8D, 0x29, 0x95, 0x81, 0xF1, 0xAE, 0xF5, 0x90, 0xE6, 0xE4, 0xA2, 0xC5, 0x1E, 0x2A, 0xBE, 0x02,
0xC5, 0xFF, 0xB1, 0x8B, 0x77, 0xB0, 0x13, 0x8F, 0xAE, 0x04, 0x85, 0x68, 0x77, 0xF9, 0x46, 0x3B,
0xE8, 0x53, 0xD0, 0xBD, 0xF0, 0x63, 0xBC, 0x6D, 0x90, 0xE5, 0x43, 0xD7, 0x64, 0x63, 0x21, 0xB6,
0x9A, 0x78, 0x5E, 0x5C, 0x3C, 0x27, 0xCB, 0x1F, 0x41, 0x3F, 0x95, 0x2B, 0x06, 0xD8, 0x32, 0x66,
0xE4, 0x29, 0xD5, 0x2B, 0x97, 0xAC, 0x90, 0x2F, 0x44, 0x5B, 0xFE, 0x0A, 0x53, 0x6B, 0x60, 0x11,
0xA6, 0x86, 0x84, 0x4C, 0x96, 0xB8, 0x4C, 0xAB, 0x90, 0x71, 0x53, 0xD3, 0x7E, 0x6B, 0x76, 0x8E,
0xF5, 0x08, 0x8F, 0x3D, 0xD4, 0x64, 0x64, 0x40, 0xF8, 0x7C, 0x02, 0xEE, 0xB4, 0x16, 0x5F, 0x9A,
0xAB, 0x64, 0x7A, 0x90, 0x0E, 0xAF, 0x65, 0xFD, 0x9B, 0xCF, 0x1D, 0xD3, 0xA6, 0x76, 0x0A, 0xB0,
0x5F, 0x60, 0x62, 0x65, 0x7F, 0xFE, 0x42, 0xB9, 0x12, 0x1A, 0xF4, 0x4C, 0x85, 0xD3, 0x75, 0xC1,
0xA6, 0x19, 0x83, 0x84, 0x51, 0x39, 0x7B, 0x00, 0xDC, 0x9D, 0x6F, 0x1C, 0x17, 0xF9, 0xF4, 0xF9,
0xC2, 0x10, 0x9E, 0xB8, 0x3A, 0xEE, 0xDE, 0xFD, 0x83, 0x4A, 0x73, 0x55, 0x1D, 0xDE, 0x69, 0xC8,
0x12, 0x7F, 0xD0, 0x15, 0x0E, 0x26, 0xE9, 0x6C, 0xC9, 0x31, 0x04, 0x9F, 0xA0, 0x16, 0x35, 0xF6,
0x14, 0x18, 0x0B, 0x56, 0xAA, 0x2F, 0x8C, 0xC2, 0xDD, 0x86, 0x07, 0xDF, 0xFF, 0xBD, 0x0A, 0xF7,
0x37, 0x7B, 0x96, 0x63, 0x93, 0x30, 0x69, 0x64, 0x83, 0xD1, 0x24, 0x2B, 0x78, 0x1D, 0x41, 0x4B,
0xB7, 0xC8, 0x3C, 0x2E, 0x45, 0x78, 0x03, 0x81, 0x09, 0x91, 0xCD, 0x29, 0xE4, 0xE8, 0x93, 0xB7,
0x71, 0x32, 0x27, 0xE3, 0x1A, 0x6F, 0x2F, 0xB8, 0xF2, 0x3F, 0x3F, 0x01, 0xC5, 0xF6, 0xC5, 0xBB,
0x53, 0xF7, 0xF7, 0x9F, 0xEC, 0x5E, 0x75, 0xF9, 0xCB, 0xA3, 0xAB, 0x57, 0x67, 0x26, 0xFB, 0x6C,
0xE9, 0x24, 0x50, 0xDC, 0x4C, 0xE5, 0x55, 0x0A, 0x35, 0x1F, 0x2E, 0xBF, 0x9E, 0x8C, 0x57, 0x43,
0x3E, 0x83, 0x8B, 0xCE, 0x55, 0x6D, 0xD1, 0xE7, 0x03, 0xFF, 0x65, 0x2D, 0xE2, 0xDB, 0xD2, 0x40,
0xEF, 0x7E, 0xCB, 0xDF, 0xDA, 0x9A, 0x9F, 0xAC, 0x72, 0x67, 0xF7, 0x29, 0x17, 0xDE, 0x12, 0xF7,
0xD2, 0x90, 0x51, 0x94, 0x9C, 0x44, 0x57, 0x52, 0x90, 0x48, 0x34, 0x04, 0xDC, 0xE8, 0x78, 0x85,
0x72, 0xB0, 0xA7, 0x25, 0xF2, 0xE8, 0xFC, 0xCA, 0xD5, 0xE9, 0xE9, 0xB2, 0xFE, 0xBF, 0x0D, 0x70,
0x84, 0xC4, 0x94, 0x2E, 0x19, 0x33, 0x4A, 0x39, 0x5F, 0x97, 0x13, 0xA5, 0xDA, 0xB5, 0x50, 0x7B,
0xB2, 0x52, 0xCE, 0x55, 0x8F, 0xBF, 0x93, 0x35, 0x95, 0xB8, 0x69, 0xF0, 0x2B, 0x0D, 0xB4, 0xFA,
0x3E, 0x35, 0xB2, 0x52, 0x01, 0xD5, 0x5B, 0xD4, 0xDB, 0xD2, 0x80, 0x8B, 0xE6, 0x95, 0x99, 0x06,
0xD3, 0x81, 0xF2, 0x8E, 0x74, 0x03, 0x33, 0xD6, 0x0B, 0xFC, 0xD9, 0xD4, 0x10, 0x6A, 0x3E, 0x21,
0x82, 0x21, 0x23, 0x35, 0x18, 0xA1, 0x4E, 0xE0, 0x55, 0x03, 0xA3, 0xE3, 0xCC, 0x80, 0x46, 0x56,
0x3B, 0x85, 0x6A, 0x17, 0x91, 0x1B, 0x77, 0x1F, 0xC1, 0x07, 0x9E, 0xD4, 0x79, 0x8E, 0x8E, 0x51,
0x5A, 0x49, 0xA0, 0x31, 0x83, 0x04, 0x59, 0x84, 0x13, 0x1A, 0x0E, 0x3C, 0x23, 0x5E, 0x65, 0x09,
0x09, 0x9D, 0xB2, 0x96, 0x15, 0x82, 0x01, 0x8E, 0xB9, 0xCB, 0x91, 0x70, 0xFB, 0x5E, 0xF7, 0x18,
0xEA, 0x5D, 0x3B, 0x4E, 0xF4, 0x94, 0x06, 0x1C, 0xD3, 0x11, 0x66, 0x3B, 0xA6, 0x1B, 0x19, 0xE9,
0x7A, 0x06, 0xD1, 0x09, 0xDE, 0x8E, 0xE1, 0xBE, 0x88, 0x38, 0x25, 0x97, 0xA5, 0x68, 0x39, 0x49,
0x3C, 0x46, 0x49, 0x53, 0xAA, 0xC5, 0xF9, 0x30, 0x3F, 0xF5, 0xA7, 0xEE, 0x96, 0x7C, 0xAE, 0x1A,
0x8E, 0xD7, 0x9A, 0xF6, 0xA0, 0xD2, 0x31, 0x8F, 0xF1, 0x30, 0x63, 0x6C, 0xBF, 0x26, 0x16, 0x27,
0xC0, 0x0D, 0x63, 0x20, 0x65, 0x8F, 0x1C, 0x87, 0xE8, 0x3D, 0x64, 0x2B, 0x3D, 0x9E, 0x99, 0x09,
0xE7, 0xA8, 0x37, 0xFF, 0xA3, 0x04, 0x5C, 0xCC, 0xE7, 0x63, 0x06, 0x99, 0x94, 0x87, 0x82, 0x11,
0x4D, 0x31, 0x85, 0xD3, 0x70, 0x55, 0x27, 0x8E, 0x1B, 0x0E, 0x9D, 0xC9, 0x56, 0xF6, 0xA7, 0x67,
0x50, 0x9E, 0x78, 0x6C, 0x66, 0x8E, 0x3B, 0xDB, 0xFC, 0x91, 0x60, 0x21, 0x8F, 0xEE, 0x71, 0xF0,
0x22, 0x33, 0x26, 0xBE, 0x9F, 0x88, 0x1E, 0x49, 0xE3, 0x41, 0x12, 0xF5, 0x8C, 0x2D, 0x1B, 0x2D,
0xA9, 0xFB, 0xAA, 0xE2, 0x14, 0x98, 0x4A, 0x17, 0x28, 0x20, 0xF2, 0xB4, 0x34, 0x18, 0x0A, 0x35,
0x9C, 0xD0, 0x70, 0xA8, 0x27, 0x4F, 0xD6, 0x21, 0x89, 0x9D, 0xEC, 0xE4, 0x03, 0xB8, 0x87, 0x17,
0x2B, 0x91, 0xFF, 0x84, 0x87, 0x55, 0x60, 0xE0, 0x88, 0x3F, 0x66, 0x9B, 0x9A, 0xAB, 0x13, 0xDF,
0x32, 0x65, 0xDA, 0x1F, 0x33, 0x86, 0x57, 0x5C, 0x15, 0x7E, 0x50, 0xA2, 0xB3, 0x20, 0x18, 0xDE,
0x5C, 0xCF, 0xA6, 0xFD, 0x48, 0xB9, 0x62, 0x0E, 0x26, 0xED, 0xFE, 0x4E, 0x56, 0x95, 0x6A, 0x1E,
0xD2, 0x5F, 0xAA, 0x67, 0xED, 0x6F, 0xF9, 0x8B, 0x64, 0xBB, 0x1C, 0xB2, 0x95, 0xCE, 0x75, 0x88,
0x61, 0xAC, 0x30, 0xCD, 0x9A, 0xFC, 0xF2, 0x87, 0x22, 0xFA, 0xC3, 0xE0, 0x33, 0xBB, 0x12, 0xD3,
0x48, 0x95, 0x2E, 0x78, 0x5C, 0xF7, 0x28, 0x1A, 0x4E, 0x26, 0xE6, 0xB8, 0x11, 0xDF, 0x76, 0xE7,
0x43, 0xF3, 0x8B, 0x6F, 0x06, 0x63, 0x2B, 0x38, 0x17, 0x48, 0xB7, 0x9B, 0x30, 0xAA, 0xF9, 0x57,
0x57, 0x77, 0x94, 0x65, 0x49, 0x03, 0xC6, 0xFC, 0xA3, 0x8D, 0xE6, 0xDC, 0xD0, 0x84, 0xAB, 0x1E,
0xD6, 0x5B, 0x8C, 0x90, 0x26, 0xF8, 0xEC, 0xFA, 0x42, 0xBA, 0x9A, 0x83, 0xBA, 0x65, 0xC5, 0x04,
0x47, 0x33, 0x45, 0xFA, 0x0E, 0x65, 0xF9, 0x2A, 0x8C, 0x65, 0x41, 0x58, 0x68, 0xBE, 0x44, 0x15,
0x30, 0x1C, 0xF5, 0xCF, 0xD9, 0xC4, 0xE8, 0xB1, 0x9A, 0xB6, 0x26, 0x4C, 0x93, 0x48, 0x97, 0x20,
0x83, 0xE4, 0xE9, 0xFB, 0x94, 0x68, 0x73, 0xBA, 0x3C, 0x85, 0x19, 0x48, 0x6E, 0xE5, 0x10, 0x1E,
0x92, 0xC0, 0x2C, 0xF5, 0x06, 0x3E, 0x0A, 0x25, 0x73, 0xD8, 0x37, 0xCC, 0x1F, 0xCF, 0x82, 0xED,
0xA6, 0xC6, 0x50, 0xF9, 0x00, 0x0D, 0xA5, 0x13, 0x66, 0x49, 0x14, 0xDA, 0xE2, 0x8C, 0xA0, 0x49,
0x2C, 0xF4, 0x25, 0x3D, 0x4E, 0xFB, 0x35, 0xBF, 0xDF, 0x95, 0x30, 0xC1, 0xF5, 0x06, 0x65, 0x61,
0xBE, 0x15, 0x27, 0x9D, 0x4A, 0x3C, 0x9E, 0x43, 0x96, 0x8C, 0x41, 0x19, 0xB0, 0x15, 0x6E, 0x82,
0x33, 0xCC, 0xA9, 0x1B, 0xE0, 0x03, 0xB9, 0x5C, 0x08, 0xA6, 0x44, 0x36, 0x94, 0xF4, 0x33, 0x72,
0x9B, 0x31, 0x7E, 0x27, 0x76, 0xAF, 0x85, 0xC1, 0x83, 0x1D, 0x44, 0x9B, 0x85, 0x7C, 0x37, 0x9C,
0xB4, 0xC8, 0x18, 0xD9, 0x7C, 0x0C, 0x3F, 0xED, 0xEA, 0x82, 0x17, 0xC0, 0x7A, 0xBA, 0xD7, 0x98,
0x7A, 0xA9, 0x88, 0xD8, 0xC9, 0x46, 0xBF, 0xF0, 0x4F, 0xCB, 0xD9, 0x72, 0x38, 0xF3, 0x7C, 0x39,
0x3C, 0x24, 0xE2, 0xFD, 0xC8, 0x54, 0xC2, 0x08, 0xC4, 0x61, 0x53, 0xB9, 0x76, 0xB9, 0x98, 0x47,
0x61, 0x3A, 0xF9, 0x02, 0xB1, 0xAC, 0x1F, 0x02, 0xEC, 0x2A, 0x90, 0x2C, 0x66, 0xF8, 0xFD, 0xA2,
0x40, 0x9D, 0xEC, 0xFC, 0x8F, 0xE7, 0xE3, 0xD9, 0xFD, 0x9E, 0xCF, 0x95, 0x54, 0x83, 0xFF, 0x50,
0x67, 0x47, 0xA7, 0x81, 0x77, 0x25, 0x74, 0x34, 0x26, 0xC8, 0x37, 0x4F, 0x8F, 0x65, 0xAD, 0x39,
0x7D, 0xB7, 0xC8, 0x4A, 0x29, 0x20, 0x42, 0x21, 0x86, 0x5A, 0x4E, 0x24, 0xDF, 0x43, 0xDC, 0x8D,
0x89, 0x66, 0x25, 0xBE, 0x66, 0x0B, 0xF3, 0x91, 0xD6, 0x9F, 0x37, 0x16, 0x69, 0x5E, 0xC1, 0xCE,
0x3E, 0xC8, 0xD5, 0x91, 0x35, 0xF9, 0xC4, 0x40, 0x98, 0x90, 0x62, 0xD0, 0x44, 0x94, 0x97, 0xBB,
0x94, 0x2B, 0x51, 0x1E, 0x29, 0x9F, 0xDA, 0x3C, 0xB2, 0x9B, 0x20, 0xB5, 0xC1, 0x3C, 0x0D, 0xF1,
0x81, 0xB4, 0xBB, 0xC1, 0xC0, 0x71, 0xA4, 0x54, 0xE0, 0xEB, 0xDC, 0x4F, 0x85, 0x5F, 0x61, 0x2D,
0x7F, 0xC6, 0x80, 0x56, 0x29, 0x87, 0x5F, 0x2A, 0x61, 0x4F, 0x8C, 0x91, 0x0D, 0xE7, 0x0D, 0xBF,
0x41, 0x46, 0xC3, 0xBD, 0x6A, 0xE5, 0xFF, 0x7C, 0x74, 0x77, 0xCA, 0x18, 0x65, 0x9B, 0x96, 0x92,
0xBA, 0xB4, 0xF4, 0xF2, 0x6D, 0xF3, 0x64, 0xFA, 0x22, 0xA3, 0x73, 0x13, 0x22, 0x31, 0x90, 0x5A,
0x84, 0xC1, 0x23, 0x5E, 0x84, 0x51, 0x28, 0xD0, 0xC2, 0x2E, 0xE4, 0x40, 0x18, 0x2C, 0x32, 0xF4,
0x76, 0x8B, 0xA4, 0x13, 0xEF, 0x1F, 0xAD, 0x8B, 0x16, 0x3A, 0xF2, 0x4F, 0x80, 0xAB, 0x1B, 0x46,
0x9B, 0xC9, 0xAD, 0x55, 0x4D, 0xD8, 0xEF, 0xAA, 0xA2, 0x87, 0x1D, 0xDD, 0xB8, 0xFC, 0x07, 0x03,
0x4B, 0x2D, 0x97, 0xFC, 0x8C, 0x75, 0x57, 0xDE, 0x47, 0xBF, 0x59, 0x05, 0x8B, 0xDD, 0x35, 0x61,
0x37, 0x74, 0x5B, 0x95, 0x6D, 0x46, 0xB0, 0x5C, 0xBE, 0x32, 0xC4, 0xAA, 0xCF, 0xBE, 0x3F, 0xE3,
0xC1, 0xA6, 0xCD, 0x87, 0x1B, 0x38, 0xCB, 0xD5, 0x98, 0x8F, 0x78, 0x60, 0xBA, 0x46, 0xBA, 0xCD,
0xC6, 0x88, 0xE1, 0x72, 0x8C, 0x38, 0x3B, 0x56, 0x20, 0x95, 0x8B, 0xBE, 0xE9, 0xBE, 0x50, 0x9F,
0x26, 0x1A, 0x6F, 0x87, 0x29, 0xF5, 0x76, 0x4E, 0x79, 0xE1, 0xA3, 0x41, 0xB5, 0xCC, 0x41, 0xA9,
0x0F, 0xB3, 0xA5, 0x55, 0xAB, 0x4E, 0xBA, 0x50, 0x2D, 0xA2, 0xCF, 0x7D, 0x3B, 0x75, 0x2E, 0x88,
0x5C, 0x13, 0xD6, 0xD3, 0x78, 0x4F, 0xA7, 0xFC, 0xA7, 0x22, 0x5C, 0x2A, 0xF6, 0xBA, 0x07, 0x0A,
0xCE, 0xEE, 0xDA, 0x4E, 0x4B, 0x6E, 0x80, 0x43, 0xC1, 0x3B, 0x1D, 0x75, 0xCA, 0xFB, 0x54, 0x69,
0xB1, 0x55, 0x88, 0xAE, 0x2C, 0x64, 0xDC, 0x58, 0x1A, 0xF3, 0x72, 0xD8, 0xD8, 0x4E, 0xE9, 0xEF,
0xDE, 0x78, 0x63, 0x53, 0xB4, 0xA7, 0x76, 0x49, 0xDE, 0x94, 0x4C, 0x57, 0xBB, 0xB5, 0xD3, 0xAA,
0x90, 0xA5, 0x80, 0xD4, 0x0D, 0x0D, 0x63, 0x8C, 0xDF, 0x18, 0x6A, 0x2A, 0xBC, 0x1F, 0x75, 0x9C,
0x45, 0x47, 0x52, 0xA9, 0x08, 0x7E, 0xE4, 0xA2, 0x2F, 0x16, 0x12, 0xA1, 0x3B, 0xCF, 0xCC, 0xA4,
0x45, 0x2F, 0xA8, 0xCE, 0x10, 0x84, 0x2C, 0x05, 0x5E, 0x31, 0x16, 0xC3, 0x40, 0x0D, 0x44, 0x13,
0xF9, 0x5F, 0x60, 0xB6, 0x99, 0x6C, 0xBA, 0x12, 0x3F, 0x9B, 0xBB, 0x58, 0xE4, 0x46, 0x13, 0x5F,
0x64, 0xE4, 0x20, 0xF4, 0x48, 0x8C, 0xE4, 0xC0, 0x79, 0xC0, 0xBB, 0x0A, 0x6A, 0xD6, 0xF2, 0x1B,
0x52, 0x1B, 0x90, 0x49, 0xD7, 0xDE, 0x63, 0xAD, 0xCA, 0x4C, 0xE5, 0x49, 0xCE, 0x24, 0x1C, 0x2B,
0xA9, 0xD2, 0x27, 0x28, 0x75, 0x0F, 0xC0, 0x53, 0xDF, 0x13, 0xD4, 0x48, 0x26, 0x2A, 0x2C, 0x67,
0x78, 0x87, 0x35, 0xD3, 0xCE, 0x24, 0xBC, 0x88, 0xA4, 0x0C, 0xEB, 0x1E, 0xA9, 0x50, 0x17, 0x2C,
0x21, 0xA6, 0xF2, 0xBB, 0x42, 0x22, 0x6F, 0xEA, 0x53, 0x7E, 0x57, 0x20, 0xB7, 0xB8, 0x6E, 0x91,
0x09, 0x99, 0xC2, 0xB9, 0x3F, 0x65, 0x20, 0x8B, 0xA7, 0x08, 0x43, 0x77, 0x6D, 0x2C, 0xA7, 0x8D,
0x14, 0xCE, 0xDC, 0x85, 0x78, 0x83, 0xDC, 0x7E, 0x1E, 0x30, 0x49, 0x6B, 0xB6, 0xD1, 0xBB, 0x8F,
0x94, 0x2A, 0x8B, 0x18, 0x49, 0x88, 0xB9, 0x98, 0x68, 0x5A, 0x8E, 0xC7, 0x84, 0xD8, 0x29, 0x23,
0x30, 0x33, 0x65, 0x92, 0x21, 0x33, 0x06, 0xA1, 0x79, 0xD3, 0x8A, 0xDB, 0x5D, 0xEC, 0x82, 0x15,
0xD5, 0x2A, 0x83, 0x18, 0x86, 0xCA, 0x66, 0x39, 0x92, 0x6A, 0x97, 0x49, 0xD6, 0xD5, 0xB1, 0xA7,
0xC0, 0x6B, 0x24, 0x51, 0x2A, 0x52, 0x81, 0x3A, 0x49, 0x20, 0xDE, 0x82, 0x44, 0xAC, 0x48, 0x6C,
0x51, 0x81, 0x4E, 0x19, 0x59, 0xD9, 0x7F, 0x92, 0x68, 0xA1, 0xAB, 0xE5, 0xE9, 0x9E, 0xB4, 0xC0,
0xEA, 0x6F, 0xD7, 0x11, 0x42, 0xFD, 0xAE, 0xA8, 0x7D, 0x47, 0xAC, 0x06, 0xD8, 0x64, 0xC6, 0x17,
0xC0, 0x82, 0xCC, 0x92, 0x04, 0x17, 0x65, 0x4F, 0x3B, 0x4E, 0x01, 0x6E, 0x04, 0xE9, 0x96, 0xFD,
0xD9, 0x95, 0xA0, 0x80, 0x48, 0x25, 0x47, 0x56, 0xD3, 0x6A, 0x72, 0xC5, 0xDA, 0x52, 0xC3, 0x56,
0x62, 0x72, 0x57, 0xFC, 0x58, 0x25, 0xCA, 0xD5, 0x38, 0x9C, 0xF4, 0x47, 0x6F, 0xC9, 0x9E, 0x74,
0x56, 0x32, 0x48, 0x60, 0xA9, 0xFE, 0x0A, 0xE4, 0xF1, 0xB7, 0xC1, 0xD9, 0x8C, 0x3F, 0xF3, 0xE2,
0xAA, 0x3E, 0xEB, 0xFE, 0x30, 0xC8, 0x41, 0xE6, 0x73, 0xF0, 0x6E, 0xCE, 0xF7, 0x7B, 0x5F, 0x9C,
0x4E, 0x9C, 0xDF, 0xF3, 0x5F, 0x17, 0x74, 0x9A, 0x45, 0xCE, 0xC2, 0x42, 0xDC, 0xFD, 0xAE, 0x0E,
0x86, 0x1E, 0x4B, 0x86, 0xA8, 0x86, 0x11, 0xE4, 0x69, 0x36, 0x4A, 0x82, 0x6E, 0x51, 0x90, 0x9B,
0x29, 0xB0, 0xC8, 0xFC, 0x39, 0x8C, 0x61, 0x43, 0x97, 0xFD, 0xD9, 0x26, 0xED, 0x88, 0xD0, 0x72,
0xEF, 0x8D, 0x7F, 0x81, 0x39, 0x02, 0xAA, 0x13, 0x7B, 0xA3, 0xFE, 0x69, 0xC9, 0x06, 0xEF, 0xE6,
0x63, 0xA5, 0x8A, 0x55, 0x69, 0x86, 0xE8, 0x05, 0x54, 0xF2, 0x95, 0x54, 0x18, 0xFE, 0x61, 0x39,
0xA6, 0x5C, 0x68, 0xF3, 0xF1, 0xC1, 0x1A, 0x71, 0x04, 0xF4, 0x81, 0x6B, 0xAB, 0x40, 0x17, 0xC1,
0x85, 0x00, 0x46, 0x17, 0x26, 0xBE, 0x87, 0xEF, 0x66, 0xDF, 0x28, 0x7C, 0xA9, 0xED, 0xD8, 0x2C,
0xCB, 0xCE, 0x4B, 0xF8, 0xCE, 0xF6, 0x4D, 0xC3, 0x37, 0xF3, 0xDE, 0xB4, 0x7D, 0x9C, 0x11, 0x7D,
0xBE, 0x3D, 0x9A, 0xF6, 0xF9, 0x2D, 0x86, 0xA7, 0x4B, 0xEF, 0xEA, 0x38, 0xB7, 0xE1, 0x5B, 0xDB,
0xB7, 0x09, 0x3E, 0x78, 0xB0, 0xE5, 0xED, 0x7B, 0xB0, 0xCB, 0x6A, 0x06, 0xA5, 0x20, 0xCC, 0x60,
0xD6, 0x57, 0xF3, 0x2A, 0xC3, 0x7C, 0xF4, 0x70, 0x98, 0x43, 0x74, 0x87, 0xEF, 0x83, 0x5F, 0x5A,
0x28, 0x45, 0x4F, 0x97, 0xCE, 0x03, 0x6F, 0xC5, 0x1D, 0x7E, 0x0E, 0x3E, 0x9A, 0xF3, 0xD8, 0xC7,
0x98, 0x1A, 0x8B, 0x4A, 0x9F, 0x02, 0x08, 0x52, 0x72, 0xFD, 0x9F, 0x22, 0xCA, 0x1D, 0xAB, 0x5A,
0xCE, 0x1A, 0x6F, 0xEA, 0x3F, 0xFC, 0xC5, 0x73, 0x6C, 0x8A, 0x3F, 0xF0, 0xE2, 0xDD, 0x0B, 0x07,
0xE9, 0x78, 0x50, 0x6C, 0x50, 0xF6, 0xAD, 0xC4, 0x69, 0x69, 0xE0, 0x02, 0xBA, 0x4F, 0x2C, 0x92,
0x46, 0xB4, 0xDD, 0x8B, 0xC7, 0xA8, 0x78, 0x6A, 0x4A, 0x29, 0xB1, 0x68, 0x23, 0x64, 0x82, 0x08,
0xBE, 0x88, 0x0D, 0x9D, 0xB2, 0x49, 0x45, 0x0F, 0x70, 0xAF, 0x48, 0xEC, 0x61, 0xA8, 0x57, 0x75,
0x2A, 0x7E, 0x1A, 0xD0, 0xE1, 0x68, 0xA9, 0xCD, 0x90, 0xD8, 0xDE, 0x98, 0x25, 0xBF, 0x1A, 0xA6,
0xE3, 0x8D, 0x45, 0x55, 0x70, 0xC2, 0x99, 0x1A, 0x4B, 0x05, 0x55, 0x55, 0x67, 0xAB, 0x4D, 0x99,
0xAE, 0x04, 0xDA, 0xB9, 0x69, 0x8D, 0x01, 0x96, 0x9E, 0x56, 0xA8, 0xCD, 0x57, 0x03, 0x36, 0xC9,
0xD9, 0x32, 0xE9, 0xDC, 0x2B, 0xCB, 0x0D, 0x01, 0x23, 0x87, 0x18, 0x7D, 0xA7, 0xB8, 0x59, 0x4F,
0x3E, 0x65, 0xEE, 0x2C, 0x41, 0x7D, 0xA0, 0x1A, 0xF2, 0x67, 0x9D, 0x6C, 0x27, 0xB1, 0x9B, 0x7C,
0xE5, 0xE8, 0x94, 0xFD, 0x0B, 0x94, 0x69, 0xAA, 0x9C, 0xBB, 0x2A, 0x40, 0x11, 0x7D, 0x27, 0x13,
0xE3, 0x93, 0x57, 0x74, 0x1F, 0x42, 0x78, 0x8A, 0xBC, 0xA0, 0xB6, 0xA2, 0x27, 0x93, 0xBB, 0x22,
0x16, 0x55, 0xA0, 0x62, 0xC2, 0xFE, 0xD0, 0xA1, 0xA2, 0x5E, 0x4B, 0x40, 0xCB, 0x2B, 0xFE, 0xA8,
0x40, 0x7E, 0xBD, 0xD5, 0x8F, 0x36, 0x5A, 0x38, 0x85, 0xAB, 0xB2, 0x4D, 0x26, 0xFE, 0xB8, 0x81,
0x3B, 0x0F, 0xFC, 0xB1, 0xC2, 0xBB, 0x7B, 0xD9, 0x74, 0xD1, 0x17, 0x35, 0x9D, 0x72, 0x86, 0xEF,
0x93, 0xE7, 0x64, 0x22, 0xA4, 0x59, 0xF5, 0x63, 0x5C, 0x38, 0x6D, 0xA0, 0x84, 0x5F, 0x4F, 0xFC,
0x91, 0x0D, 0xE9, 0x7B, 0x84, 0x35, 0x04, 0x0C, 0x4F, 0x7A, 0x25, 0x82, 0x1E, 0xC8, 0x83, 0xD3,
0xC3, 0x00, 0xDE, 0x4A, 0xFB, 0x3A, 0xB6, 0xD4, 0x53, 0xF1, 0xC8, 0xE9, 0x5E, 0xB9, 0x68, 0xD6,
0x0F, 0x10, 0xFF, 0x2C, 0x7F, 0xC4, 0x4A, 0x0F, 0xD9, 0x5E, 0x57, 0x2A, 0x57, 0x35, 0xDF, 0x51,
0x9E, 0xD0, 0xAB, 0x2B, 0x57, 0xD0, 0x39, 0x56, 0xE6, 0xBB, 0xC1, 0x5D, 0x40, 0xC0, 0x9F, 0x07,
0x68, 0xA8, 0xA6, 0x00, 0x34, 0x14, 0xFD, 0x04, 0x74, 0x28, 0xBF, 0xD2, 0x5B, 0x43, 0xEB, 0x76,
0x57, 0xD3, 0x24, 0x79, 0x4F, 0x40, 0xD3, 0xE5, 0x6F, 0xCF, 0x6A, 0xB1, 0x34, 0xB9, 0xFA, 0x9D,
0xF1, 0x52, 0x0C, 0xAC, 0x79, 0xB3, 0xA1, 0x6A, 0xD9, 0xA2, 0xA9, 0xD8, 0x09, 0x92, 0x95, 0xEF,
0x22, 0x36, 0xC5, 0x2B, 0xDB, 0x30, 0x6C, 0xB4, 0x93, 0x18, 0xD0, 0xE0, 0x74, 0xA3, 0xA6, 0x4C,
0xF1, 0xCE, 0xA4, 0x5E, 0x4D, 0xC5, 0x0A, 0x1A, 0x5A, 0x6E, 0xAE, 0xAC, 0x4D, 0xE3, 0x45, 0xCC,
0xB0, 0x72, 0x65, 0x95, 0x05, 0x27, 0x45, 0xAB, 0xE3, 0x24, 0x72, 0x22, 0xF7, 0x3D, 0xB8, 0xCE,
0xF1, 0x89, 0x84, 0x2F, 0xE2, 0xA0, 0x58, 0x1F, 0xC0, 0x33, 0xA7, 0x3C, 0x32, 0x93, 0xD2, 0x08,
0x55, 0x6F, 0x31, 0x4C, 0xAB, 0xD4, 0x33, 0xDF, 0x50, 0x17, 0x87, 0x6D, 0x1C, 0x39, 0xDC, 0x5B,
0xEA, 0x2C, 0xAC, 0xD6, 0xE3, 0x78, 0x4B, 0x55, 0xCD, 0x2A, 0xBF, 0xA8, 0xD8, 0x3F, 0x85, 0xAB,
0xCB, 0x9F, 0x3B, 0xB9, 0x7C, 0x3E, 0xF2, 0x4E, 0xBC, 0xC9, 0x5C, 0xD5, 0x17, 0xC2, 0xBC, 0x88,
0x93, 0xE3, 0x4D, 0x95, 0x23, 0xC3, 0xFA, 0x48, 0x1E, 0x0C, 0x71, 0x10, 0x58, 0x2C, 0xCE, 0x7A,
0xA0, 0x86, 0xBB, 0xBF, 0x21, 0xC8, 0xB1, 0xDC, 0xC1, 0x6A, 0xEB, 0x81, 0xD5, 0x16, 0x06, 0x5E,
0xFC, 0x87, 0x13, 0x34, 0x54, 0x6C, 0x6C, 0xD5, 0xCC, 0x48, 0x7B, 0xC7, 0xAC, 0x77, 0xC6, 0xF9,
0x4C, 0x20, 0x01, 0x46, 0x59, 0xF6, 0x17, 0xAA, 0x83, 0xAD, 0xCE, 0x63, 0x80, 0xDC, 0x1F, 0xFE,
0x21, 0xA9, 0xF1, 0xE1, 0x07, 0x52, 0x63, 0xD4, 0x59, 0xB1, 0xD6, 0x09, 0x24, 0x85, 0xD4, 0xCD,
0x36, 0x80, 0xBA, 0x07, 0x14, 0xE8, 0x6E, 0xBD, 0x17, 0x92, 0x67, 0xB9, 0xCC, 0x56, 0x7C, 0xA8,
0xA8, 0x53, 0x93, 0xAA, 0x11, 0xF7, 0xD6, 0xB4, 0x48, 0x56, 0x1B, 0x31, 0x9F, 0x42, 0xFB, 0xA8,
0x37, 0xCF, 0xF7, 0xF6, 0xB4, 0x4D, 0xD7, 0x59, 0xA5, 0x7C, 0xE7, 0xAD, 0xC5, 0xF0, 0x5C, 0x39,
0x68, 0x8C, 0xC8, 0xE0, 0x83, 0x22, 0x07, 0x2A, 0x18, 0xCA, 0x97, 0xE8, 0x9C, 0x00, 0x97, 0x4E,
0xA2, 0x42, 0x25, 0x14, 0x64, 0x89, 0xA1, 0x3B, 0x9E, 0xDB, 0x3B, 0xF0, 0x5D, 0x01, 0xCA, 0x26,
0x16, 0xCA, 0xB6, 0x26, 0x94, 0x0A, 0x65, 0x78, 0x20, 0xF3, 0x8F, 0xC3, 0x83, 0xDE, 0xA2, 0xE3,
0x85, 0x66, 0x0E, 0x29, 0x75, 0x23, 0x61, 0xE2, 0x43, 0xCB, 0x9A, 0x86, 0x12, 0x31, 0xF0, 0xD7,
0x56, 0x15, 0x08, 0xBB, 0x18, 0xAC, 0x84, 0xE7, 0xA0, 0xA1, 0x4E, 0x02, 0x2E, 0xD5, 0x8B, 0xA3,
0xE8, 0x77, 0x4D, 0xF3, 0xB8, 0xCD, 0x70, 0x9D, 0x4D, 0x17, 0xAB, 0xD8, 0x5B, 0xE4, 0xA0, 0xEA,
0x92, 0x7D, 0x4B, 0x35, 0x02, 0x83, 0x06, 0xC3, 0x2E, 0x2D, 0x74, 0x51, 0x26, 0xD9, 0xA4, 0xC9,
0xAA, 0x56, 0x0B, 0xB1, 0xA7, 0x05, 0x5B, 0x27, 0x89, 0x35, 0xBC, 0x25, 0xD1, 0x6A, 0x64, 0x78,
0x4D, 0xFC, 0x2B, 0xE4, 0x8C, 0x8D, 0x09, 0xC2, 0x5A, 0x5C, 0x1A, 0x39, 0x8D, 0xBE, 0x18, 0xF1,
0xCE, 0x0E, 0xBF, 0x82, 0x43, 0x67, 0x03, 0x08, 0x97, 0x24, 0xF8, 0x5D, 0x55, 0x49, 0xAA, 0x8C,
0x72, 0x1D, 0x76, 0x75, 0x8B, 0xD4, 0x30, 0x60, 0xF7, 0xDA, 0xDA, 0x37, 0x2A, 0xE6, 0xD5, 0xC3,
0x89, 0x07, 0xB6, 0x2E, 0xE1, 0x83, 0x13, 0x7C, 0xB4, 0xFC, 0xDE, 0x62, 0x49, 0x25, 0x9D, 0x51,
0x4D, 0x77, 0x6D, 0xC3, 0x89, 0x34, 0x06, 0x4E, 0x1F, 0x5A, 0x7D, 0xEC, 0xDF, 0xE3, 0xC1, 0xAB,
0xC3, 0xF5, 0xCB, 0x01, 0xBC, 0x5E, 0x5E, 0x33, 0x6F, 0xFC, 0xB4, 0x05, 0x17, 0xD7, 0x2C, 0xF0,
0xB2, 0x7F, 0xA4, 0x26, 0xBF, 0xF1, 0xFF, 0x94, 0x03, 0xC0, 0xF1, 0x23, 0x09, 0x98, 0xCD, 0x56,
0x19, 0x43, 0x25, 0x14, 0xB5, 0xD2, 0x41, 0x3A, 0xFF, 0xA3, 0x6F, 0x83, 0xE8, 0xC5, 0x23, 0x99,
0x5B, 0x65, 0xEF, 0x9A, 0x89, 0x22, 0x4E, 0x71, 0xD0, 0xB2, 0x0E, 0xA0, 0x2A, 0xB5, 0x0E, 0x7C,
0x69, 0x2B, 0x0E, 0x5E, 0x9D, 0x06, 0xD2, 0x8F, 0xE7, 0x03, 0x26, 0x35, 0xEE, 0x0E, 0x89, 0xFC,
0x29, 0x12, 0xBB, 0xB5, 0xD2, 0x8D, 0x84, 0xD0, 0x54, 0xAB, 0x11, 0xE5, 0xE6, 0x6C, 0xDA, 0x31,
0xAB, 0x76, 0xD2, 0x42, 0x11, 0x70, 0x98, 0x35, 0x6C, 0x46, 0x77, 0xAC, 0x8E, 0x89, 0x6D, 0xA0,
0x27, 0x4C, 0x84, 0xF1, 0x1B, 0x31, 0x2E, 0x82, 0xED, 0x76, 0x42, 0x5B, 0x74, 0x12, 0xB6, 0x94,
0x16, 0xC9, 0x8C, 0x02, 0xB1, 0xD6, 0x2F, 0x7F, 0x79, 0x49, 0x2C, 0x64, 0x88, 0x4C, 0xE5, 0xDB,
0x51, 0x8A, 0x00, 0x29, 0x4C, 0x9A, 0x9B, 0x16, 0x36, 0x94, 0x81, 0xC0, 0x8B, 0x14, 0x50, 0xF6,
0x12, 0x73, 0x63, 0xDD, 0xF5, 0x55, 0x82, 0x4D, 0x26, 0x09, 0x39, 0xFF, 0xB1, 0xC5, 0x90, 0xC6,
0xFC, 0x47, 0xF1, 0x21, 0xB6, 0x70, 0xA1, 0xFE, 0xEB, 0x91, 0xD1, 0x0F, 0x28, 0x0C, 0x83, 0x28,
0x6A, 0x98, 0xF6, 0x2F, 0x31, 0x27, 0x56, 0x9A, 0x7E, 0x63, 0x87, 0x16, 0x37, 0xD9, 0x5F, 0xEE,
0x15, 0x30, 0x3A, 0x69, 0xD9, 0xE2, 0x39, 0x2E, 0x95, 0xAB, 0x9A, 0x36, 0xAB, 0x56, 0x90, 0x2A,
0xF6, 0xEB, 0x5C, 0xB3, 0x32, 0x0B, 0xD1, 0x8B, 0xDE, 0xED, 0x59, 0x00, 0x97, 0x48, 0x8A, 0x2B,
0x15, 0xC1, 0x0E, 0xDA, 0xAB, 0xCA, 0x39, 0xF0, 0x27, 0x30, 0x58, 0xC9, 0x78, 0xB6, 0x7C, 0x48,
0x0D, 0x58, 0xF7, 0xBB, 0xE9, 0x2F, 0x9E, 0xB3, 0xB1, 0x30, 0xDC, 0xED, 0x6E, 0xD5, 0x41, 0xDA,
0xB2, 0x01, 0x80, 0x5C, 0x16, 0xB7, 0xBA, 0x46, 0x0B, 0x0A, 0x5B, 0x09, 0x89, 0x50, 0x0A, 0x39,
0xD2, 0x51, 0xA5, 0x65, 0xB3, 0x9B, 0x4B, 0xE4, 0x3A, 0xCE, 0x27, 0xC3, 0xC0, 0xD5, 0x65, 0x08,
0x19, 0x5A, 0xDA, 0x52, 0x07, 0xB5, 0x5A, 0x42, 0x77, 0xD9, 0xDA, 0xC2, 0x74, 0xE9, 0xF2, 0x88,
0xB1, 0x66, 0x89, 0x54, 0x23, 0x53, 0x2F, 0xFB, 0x93, 0xB9, 0x4A, 0x8C, 0x47, 0xAE, 0x78, 0x6C,
0x86, 0xBD, 0x5B, 0x50, 0x93, 0xA4, 0xAC, 0x58, 0xC4, 0x21, 0x18, 0x70, 0xDB, 0xD8, 0xDA, 0x5E,
0x6E, 0x4B, 0x7D, 0xEF, 0x58, 0xA0, 0xEA, 0x6E, 0xDC, 0xDD, 0x38, 0x66, 0x63, 0x59, 0x53, 0xC9,
0xA9, 0x6F, 0xA4, 0xAB, 0x9D, 0x35, 0x29, 0xFE, 0x5D, 0x94, 0xA2, 0x35, 0x44, 0x7D, 0x4B, 0x04,
0xF9, 0x20, 0xB7, 0x48, 0xAC, 0x2A, 0xB5, 0x1E, 0x99, 0xD9, 0xCD, 0x64, 0x28, 0x9B, 0xC5, 0x0B,
0x1D, 0x78, 0x47, 0x90, 0x67, 0x9F, 0xC9, 0xC3, 0x4D, 0x26, 0xA1, 0x67, 0xE8, 0x12, 0x8E, 0x74,
0x01, 0x9C, 0xE4, 0xFD, 0xF7, 0x10, 0x5F, 0x81, 0x3E, 0x6D, 0x3D, 0xC1, 0x7A, 0xB3, 0x7C, 0x53,
0xBD, 0x6E, 0x4E, 0x28, 0x5E, 0x43, 0x89, 0x60, 0x75, 0x2E, 0xAD, 0x2A, 0xB2, 0x75, 0xCA, 0xEA,
0x2B, 0x9A, 0xA7, 0xA4, 0x1A, 0x59, 0xDB, 0xAC, 0xB2, 0x5C, 0x64, 0xEC, 0x5A, 0x24, 0x36, 0xF3,
0xB2, 0xD2, 0xCA, 0x0C, 0xCA, 0xD0, 0xF4, 0x33, 0x6E, 0x5F, 0x3C, 0xAE, 0x8F, 0xC4, 0x65, 0x5D,
0x4F, 0xB5, 0x73, 0xC0, 0xAF, 0x20, 0x5E, 0xA2, 0xEE, 0x03, 0x1C, 0x0E, 0x59, 0xFE, 0x9A, 0x09,
0x03, 0x15, 0x67, 0xAA, 0x65, 0x7D, 0xD8, 0xD5, 0x27, 0x43, 0x7C, 0x51, 0x13, 0xD7, 0x5A, 0x5B,
0xC5, 0x9D, 0xD0, 0x32, 0x9D, 0x96, 0x0A, 0x32, 0xD3, 0xF3, 0x9D, 0x88, 0x34, 0x9C, 0x1A, 0x4C,
0x4C, 0x83, 0x03, 0x93, 0x52, 0xDE, 0xF2, 0x8D, 0x4B, 0x26, 0x24, 0x60, 0x3A, 0xD9, 0x24, 0xC3,
0xDE, 0xAE, 0x92, 0x6E, 0x4A, 0x42, 0x63, 0x3F, 0x24, 0x9C, 0x55, 0xDD, 0xC4, 0xCC, 0xB7, 0x01,
0x21, 0x69, 0x81, 0x8A, 0xCB, 0x0C, 0x9B, 0x2D, 0x53, 0xD9, 0x82, 0x9A, 0xBA, 0x9D, 0x5A, 0xF1,
0xB3, 0x55, 0x2E, 0x43, 0x55, 0xCE, 0x60, 0xA3, 0x2D, 0x58, 0xDD, 0x7C, 0xD8, 0xF3, 0x6C, 0x9C,
0xB2, 0x1F, 0x5D, 0x7E, 0xF0, 0x79, 0x98, 0x23, 0x71, 0x2D, 0xE5, 0xFE, 0x57, 0x76, 0x37, 0xB6,
0x80, 0xA5, 0x77, 0xCB, 0xDA, 0xD6, 0xD1, 0x56, 0x23, 0x97, 0x84, 0xCB, 0x45, 0x6D, 0x64, 0xAF,
0xC3, 0x9A, 0xE4, 0x14, 0x16, 0x66, 0x5B, 0xBB, 0x7C, 0x63, 0x23, 0xF2, 0x72, 0x3A, 0x9C, 0x99,
0xB8, 0xFC, 0x20, 0x7D, 0x0E, 0xDB, 0xF0, 0xBB, 0x84, 0x01, 0xC2, 0x0A, 0x29, 0xEF, 0xF3, 0xD5,
0xEC, 0x58, 0xD6, 0x0D, 0xD4, 0xCB, 0x30, 0x70, 0x75, 0x67, 0x71, 0x74, 0x3D, 0x7F, 0xA3, 0x67,
0x90, 0x39, 0x16, 0x4A, 0xF3, 0xB0, 0x4A, 0x5C, 0x7E, 0x90, 0x0C, 0xDB, 0xAE, 0xE4, 0x44, 0xC6,
0x27, 0xE3, 0x62, 0x8B, 0x28, 0x3F, 0x9A, 0xB1, 0x25, 0x4C, 0x2C, 0xF9, 0x35, 0x2E, 0xDF, 0xE4,
0xDC, 0x42, 0x80, 0xDA, 0x60, 0xE1, 0x1A, 0x77, 0xCD, 0x0D, 0x22, 0x88, 0x37, 0xB7, 0xB8, 0x86,
0x1B, 0x1B, 0xA2, 0x4D, 0x3A, 0x82, 0x72, 0xC5, 0xF5, 0xFC, 0xF9, 0x56, 0x05, 0x13, 0x3E, 0x4F,
0xFC, 0xF1, 0xE9, 0x3F, 0x19, 0x71, 0xF7, 0xC3, 0x48, 0x60, 0x58, 0xB6, 0xCF, 0xBB, 0x8F, 0x33,
0x5C, 0x5C, 0x23, 0x78, 0xFC, 0x6E, 0xB1, 0x55, 0xBE, 0xA6, 0x6D, 0xA6, 0x88, 0xC0, 0x01, 0x3C,
0x28, 0x6E, 0xE5, 0xBD, 0xF0, 0x1D, 0xD8, 0x2E, 0xDB, 0x92, 0x2E, 0x55, 0xB1, 0xC9, 0x52, 0xD1,
0x28, 0x1B, 0xB6, 0xB7, 0x1A, 0xFA, 0x7B, 0xE3, 0xF2, 0x1B, 0xE4, 0x90, 0xE7, 0x2F, 0xF3, 0xA6,
0x5F, 0x2F, 0x1F, 0x00, 0xE1, 0x77, 0x0B, 0xC0, 0x4B, 0x33, 0xB2, 0xDD, 0x54, 0xBB, 0xFB, 0xEA,
0x5D, 0x2F, 0xE1, 0x60, 0xA9, 0x53, 0x8B, 0x9F, 0x0A, 0xF9, 0xF2, 0x43, 0x05, 0x7A, 0x5B, 0x1F,
0xED, 0xD5, 0x94, 0xBC, 0x00, 0x66, 0x78, 0x89, 0x4B, 0x7F, 0x39, 0x0B, 0xF5, 0x0A, 0x76, 0x7E,
0xF5, 0x26, 0xDC, 0xF8, 0x96, 0x25, 0x49, 0xC7, 0x2A, 0x04, 0x95, 0x1C, 0x1B, 0x22, 0xF1, 0xAA,
0xA5, 0x0B, 0xE5, 0x14, 0x62, 0x8F, 0x39, 0x21, 0x00, 0x25, 0xE3, 0x03, 0x08, 0x97, 0x5C, 0x30,
0xEC, 0x5C, 0x31, 0xC7, 0x9B, 0x6D, 0x28, 0xA9, 0x68, 0xF5, 0xCF, 0xDF, 0x97, 0xAB, 0x74, 0x6C,
0x53, 0x8E, 0x44, 0x63, 0x55, 0xFB, 0x69, 0xEA, 0x8C, 0xBA, 0xD9, 0x8C, 0x2B, 0xAA, 0xC8, 0x12,
0x99, 0xAE, 0x36, 0x06, 0x03, 0xD8, 0x8E, 0x84, 0x38, 0xFE, 0xA1, 0x1A, 0x8A, 0xA1, 0xD1, 0xC2,
0x67, 0x4B, 0x34, 0x2D, 0xBC, 0x2A, 0xA0, 0x42, 0x7C, 0xA4, 0xF2, 0xC6, 0x40, 0xC3, 0xED, 0x29,
0xF5, 0xE4, 0xA7, 0x35, 0xE2, 0xD3, 0x9D, 0xF4, 0x31, 0xE3, 0x93, 0x7F, 0x57, 0x4D, 0x28, 0xF0,
0x3B, 0x16, 0x6C, 0xDB, 0x11, 0x42, 0x8F, 0x96, 0x0D, 0x73, 0x36, 0xA9, 0x71, 0x56, 0x53, 0xF4,
0x36, 0xE4, 0xC6, 0x46, 0x95, 0x09, 0xCB, 0xC8, 0x82, 0x45, 0x59, 0xBE, 0x98, 0xF0, 0x8B, 0x21,
0xFB, 0xE7, 0x97, 0xDF, 0x5E, 0xF3, 0xB7, 0xDF, 0x19, 0xBD, 0xFF, 0xBE, 0x1F, 0x25, 0x7D, 0xA8,
0x47, 0xA9, 0x04, 0x2C, 0xB2, 0x8C, 0x64, 0x77, 0xA3, 0x73, 0x5C, 0xBB, 0xDA, 0xC0, 0xC9, 0x86,
0xB1, 0x56, 0xF6, 0x80, 0xA1, 0xD7, 0xA1, 0xFA, 0x8C, 0x77, 0xD5, 0x05, 0xD1, 0x92, 0xCA, 0x83,
0x63, 0xF5, 0xFF, 0xE3, 0xC0, 0x05, 0x53, 0xD5, 0x03, 0xF8, 0x41, 0x6C, 0xB9, 0x4A, 0xD2, 0x87,
0x01, 0x8A, 0xB7, 0xE7, 0xAD, 0x1F, 0x89, 0x00, 0x02, 0x44, 0x76, 0x6D, 0x4D, 0x84, 0xFA, 0x50,
0x6A, 0x58, 0xC8, 0x0E, 0x53, 0x0E, 0x38, 0x49, 0xA2, 0x75, 0xEE, 0xBE, 0xAD, 0x2B, 0x1A, 0x24,
0x2E, 0x02, 0xAE, 0xBD, 0x75, 0xE7, 0x2E, 0x60, 0x68, 0x55, 0xBC, 0x8F, 0x44, 0x20, 0x6B, 0x25,
0x96, 0x45, 0x5F, 0x6B, 0x17, 0x86, 0x56, 0xC7, 0xFB, 0x48, 0xF4, 0x77, 0xE2, 0x73, 0xFC, 0x2C,
0x12, 0xEB, 0x5D, 0x12, 0xC6, 0x99, 0x91, 0x35, 0x38, 0x82, 0xDA, 0x51, 0x6B, 0xB3, 0xDE, 0x96,
0x96, 0xAC, 0xED, 0xDE, 0x9D, 0x96, 0x2E, 0x04, 0x2E, 0x63, 0x45, 0xD2, 0x58, 0x00, 0x3C, 0xD6,
0xCA, 0x20, 0xD7, 0x00, 0x94, 0x44, 0x2D, 0xEC, 0x58, 0x40, 0x8C, 0x2C, 0xEA, 0x19, 0x80, 0x53,
0xC1, 0xF2, 0x0B, 0xD5, 0x78, 0x56, 0x13, 0x94, 0x06, 0x67, 0x1E, 0x9D, 0x27, 0x6E, 0xD2, 0xB2,
0x34, 0xA0, 0xE0, 0xC4, 0x21, 0x18, 0x4C, 0xF6, 0xCF, 0x63, 0x20, 0xA4, 0x80, 0x46, 0xD8, 0x10,
0x48, 0x9F, 0xE1, 0x02, 0x56, 0xB9, 0x29, 0x70, 0x54, 0x82, 0x21, 0xD9, 0x26, 0xFC, 0xA3, 0xDE,
0x27, 0x73, 0x3E, 0xA9, 0xFF, 0x8D, 0xE9, 0xEE, 0x62, 0x38, 0xFC, 0xB0, 0xDB, 0x4F, 0x82, 0x90,
0xA0, 0xD2, 0xF3, 0x7E, 0x84, 0xED, 0xBC, 0x0B, 0xC1, 0x56, 0x72, 0xEF, 0x69, 0x77, 0x10, 0xE6,
0xB9, 0xE6, 0x72, 0xCA, 0xD7, 0x01, 0x5B, 0xBF, 0x0A, 0x54, 0x00, 0xE8, 0x5C, 0xF4, 0xC9, 0x13,
0x98, 0x08, 0x20, 0x13, 0x17, 0xEF, 0x06, 0xBC, 0x0B, 0xF4, 0xDD, 0x30, 0xC3, 0x95, 0xBD, 0xB5,
0x91, 0x37, 0xEA, 0x43, 0x8B, 0x40, 0x25, 0x1B, 0xFD, 0xB8, 0x52, 0x7E, 0xF9, 0x2D, 0x40, 0xD5,
0x77, 0xFE, 0x8D, 0xB0, 0x6A, 0xE2, 0x3A, 0xF4, 0x08, 0xD9, 0x97, 0xAC, 0x63, 0x06, 0x54, 0xC5,
0xD5, 0x08, 0x08, 0x5A, 0xDE, 0x2D, 0xA3, 0xDD, 0xA7, 0xD6, 0xCC, 0x0F, 0xDD, 0x66, 0x72, 0xD4,
0xDE, 0xB8, 0x86, 0xB3, 0x67, 0xC3, 0x5F, 0x64, 0x39, 0xF3, 0x97, 0xD2, 0x69, 0xEE, 0x1A, 0x30,
0xD9, 0x4D, 0xA6, 0x7F, 0xED, 0xDA, 0xD2, 0xA2, 0xF2, 0x69, 0x81, 0x34, 0xEF, 0x3F, 0x7C, 0xB5,
0xEE, 0x62, 0x0A, 0x2E, 0xAC, 0xA5, 0x74, 0x59, 0x9C, 0x44, 0x22, 0xB3, 0xD8, 0x0E, 0xFF, 0x95,
0x40, 0x9A, 0x43, 0x52, 0xD2, 0x55, 0x75, 0x3C, 0x6E, 0x90, 0xA2, 0x0E, 0x76, 0xF5, 0x8C, 0x97,
0xF5, 0xD7, 0xE9, 0x1E, 0xDE, 0xCB, 0x5F, 0x22, 0xE4, 0x84, 0x42, 0xB5, 0xCA, 0x1A, 0xB4, 0x7D,
0x62, 0xA4, 0xF1, 0xFF, 0x3B, 0xCA, 0x08, 0xB0, 0xF9, 0x5B, 0x88, 0x6E, 0x57, 0x8D, 0x1F, 0xE3,
0x27, 0xF0, 0x68, 0x24, 0x8E, 0x5B, 0xA0, 0x82, 0x84, 0xFB, 0x5F, 0xCA, 0x3E, 0xE3, 0x52, 0x6D,
0x19, 0x21, 0xA3, 0xB0, 0x22, 0x92, 0xC5, 0x15, 0x24, 0x7F, 0xAB, 0x0D, 0x1B, 0xEC, 0x0C, 0xB3,
0xDD, 0xD0, 0x44, 0x0C, 0xA9, 0xA8, 0x58, 0xB3, 0x31, 0xF6, 0x6B, 0x55, 0xC7, 0x7E, 0xE2, 0xE2,
0x0D, 0xF7, 0x79, 0x35, 0x9E, 0x6D, 0xB9, 0x93, 0xB0, 0x63, 0xAE, 0xB0, 0x24, 0x52, 0xF2, 0xF8,
0xB4, 0x0A, 0xC2, 0xD5, 0xA7, 0x14, 0xF3, 0xE9, 0xEA, 0xAB, 0x5F, 0xF6, 0x53, 0xB5, 0x44, 0x8F,
0xDD, 0x47, 0x37, 0x2B, 0x44, 0x2B, 0x0F, 0xB8, 0x81, 0x62, 0xEE, 0x13, 0xB7, 0xA9, 0x9F, 0x18,
0x44, 0x6E, 0x8B, 0x97, 0xA7, 0x0D, 0xB7, 0xB6, 0xCB, 0xE4, 0xD7, 0x13, 0xCF, 0x73, 0xF2, 0x5B,
0xE6, 0x1C, 0x3F, 0x02, 0xD7, 0x02, 0x5F, 0xFB, 0x1E, 0xE6, 0x5C, 0xB5, 0xEC, 0x98, 0xAC, 0x1C,
0x65, 0x67, 0x2F, 0xA3, 0x71, 0x61, 0xD9, 0x3D, 0x94, 0xEA, 0x3B, 0xE5, 0x02, 0x0B, 0x53, 0x13,
0xA2, 0x62, 0x7A, 0xE0, 0x42, 0xAB, 0x80, 0x3A, 0xCD, 0x2E, 0x59, 0x5E, 0x28, 0x88, 0xD7, 0x93,
0x79, 0xD5, 0x43, 0xB0, 0x3C, 0xCC, 0x9F, 0xE7, 0xB6, 0xA2, 0x90, 0xC1, 0xDF, 0x3D, 0xF0, 0x37,
0x42, 0xF2, 0xCD, 0x1E, 0x7F, 0x0B, 0x93, 0xC6, 0x44, 0xAF, 0x40, 0xEA, 0xE6, 0x92, 0xC0, 0xFE,
0x92, 0x59, 0x76, 0x67, 0x64, 0xF6, 0xDC, 0x29, 0xE1, 0x39, 0x98, 0xBA, 0x60, 0x6A, 0x1B, 0xE4,
0x21, 0x66, 0x17, 0x3D, 0xBD, 0x2F, 0x98, 0x3C, 0xF4, 0xBB, 0x7D, 0x8C, 0xBD, 0x91, 0xE2, 0x15,
0x6E, 0x2B, 0xF8, 0x32, 0x9B, 0x2A, 0xEC, 0xBA, 0x69, 0xAF, 0xD5, 0x23, 0xAA, 0x77, 0x62, 0x42,
0x6A, 0xF3, 0x25, 0x59, 0xD9, 0x9E, 0x19, 0xA1, 0x0A, 0xCF, 0xD5, 0xAF, 0x5F, 0xB1, 0x02, 0x21,
0x0A, 0xFE, 0x19, 0x2B, 0x5A, 0xA6, 0x89, 0x1F, 0xC3, 0xD3, 0x57, 0x2E, 0x89, 0xBD, 0x3D, 0x59,
0xBF, 0xC7, 0xCB, 0xD7, 0xB9, 0x28, 0xAD, 0x6D, 0x8B, 0xA9, 0x1C, 0x9D, 0x2D, 0xB6, 0x7B, 0x5C,
0x9F, 0x74, 0xDC, 0x94, 0xD9, 0x63, 0x12, 0xEA, 0xDE, 0xBF, 0xFA, 0x3A, 0xD7, 0x5E, 0x16, 0x16,
0x31, 0x4F, 0x5A, 0x6B, 0x8C, 0xD2, 0x11, 0xA9, 0x09, 0xA4, 0x08, 0x10, 0xE2, 0x35, 0xD5, 0x87,
0x55, 0x6D, 0x6D, 0x9D, 0x54, 0x17, 0x4A, 0xF5, 0x79, 0x6E, 0x54, 0xD3, 0xAB, 0x47, 0x92, 0xCF,
0x89, 0x76, 0x36, 0x5A, 0xBC, 0x63, 0x4B, 0xF0, 0x5F, 0xF7, 0xFA, 0x08, 0xD1, 0x0A, 0xA5, 0xDA,
0xD8, 0x14, 0x7C, 0xD7, 0x16, 0x76, 0x14, 0xC6, 0xCA, 0x9F, 0xBB, 0xA3, 0xDD, 0x5D, 0x85, 0xCE,
0x6E, 0xF7, 0xF0, 0x1A, 0x57, 0x80, 0x3B, 0x94, 0x97, 0xBB, 0xBA, 0xE1, 0xEA, 0x2D, 0x70, 0x07,
0x4B, 0xD8, 0x4C, 0xB8, 0x63, 0x38, 0x70, 0x47, 0xF5, 0x6C, 0xDC, 0xB1, 0x31, 0x96, 0xAC, 0xC4,
0x1D, 0xD7, 0x98, 0xCC, 0xCA, 0x8A, 0x74, 0x22, 0x8C, 0x79, 0x1D, 0x72, 0x7E, 0x1C, 0x9F, 0x40,
0xC6, 0xF9, 0x70, 0x86, 0x1B, 0x3A, 0x5C, 0x3C, 0x56, 0xFB, 0x4B, 0x25, 0x2E, 0x77, 0x8C, 0x5C,
0x57, 0x3E, 0xDD, 0x2B, 0x0F, 0xDF, 0xB9, 0x02, 0x0C, 0xBB, 0xB9, 0x7C, 0xCE, 0xDD, 0x80, 0xC8,
0x3E, 0xAA, 0x1A, 0x8C, 0x14, 0xE9, 0x6D, 0xD3, 0x45, 0xB2, 0xDE, 0x59, 0x06, 0x38, 0x96, 0x26,
0xFA, 0x3B, 0x4B, 0x00, 0xB6, 0x7C, 0x37, 0xB0, 0x61, 0xCE, 0xE4, 0x58, 0xB9, 0xD7, 0xC0, 0xCE,
0xC7, 0xC3, 0x82, 0x9A, 0xBA, 0xD5, 0x9D, 0x2D, 0xAC, 0xEB, 0xCB, 0x84, 0xCB, 0x16, 0x41, 0x13,
0xB7, 0x6E, 0x2D, 0xE0, 0x42, 0x5D, 0x5B, 0x7E, 0x06, 0x9E, 0x1A, 0x53, 0x5E, 0x4A, 0x36, 0xDA,
0x7E, 0xCB, 0x21, 0xB4, 0x53, 0x94, 0x80, 0x9E, 0xF9, 0x13, 0x45, 0xEC, 0xF6, 0x05, 0xFF, 0x46,
0x9D, 0x5B, 0x77, 0xF4, 0xD8, 0x65, 0x65, 0x9B, 0xB0, 0x2A, 0x77, 0xDA, 0x65, 0x65, 0x9B, 0xB0,
0x80, 0x26, 0xA2, 0x35, 0x9A, 0x8B, 0xA1, 0x8B, 0x94, 0xCC, 0xB9, 0x0F, 0x44, 0xFB, 0x64, 0x6E,
0x73, 0xAE, 0x56, 0xBF, 0xF4, 0xAD, 0xD9, 0x36, 0x1E, 0x67, 0xC1, 0xA1, 0x4A, 0xFA, 0x86, 0x1C,
0x28, 0x39, 0x9B, 0xF5, 0x2E, 0xB3, 0xA6, 0x6B, 0xD1, 0x39, 0xF5, 0x2C, 0x17, 0x5E, 0x2B, 0x1A,
0xFC, 0x83, 0xF9, 0xB9, 0xAA, 0x7E, 0x70, 0x99, 0xC3, 0x8C, 0x8B, 0x57, 0x5F, 0xF6, 0x08, 0x19,
0x6D, 0x83, 0x6A, 0xA3, 0xCD, 0x88, 0x01, 0xEF, 0x51, 0xAD, 0x34, 0xF7, 0xB7, 0xD9, 0xE9, 0xA8,
0xAB, 0x5E, 0x1B, 0xF3, 0x92, 0x49, 0x94, 0x40, 0xF3, 0xCA, 0x36, 0xA2, 0x20, 0x72, 0xD1, 0x45,
0x6F, 0x60, 0xEC, 0xDC, 0xA3, 0x34, 0xC1, 0x90, 0xF2, 0xEF, 0x71, 0x52, 0x14, 0xEF, 0xCA, 0x62,
0xE1, 0xC9, 0x18, 0xBA, 0x42, 0xDA, 0x25, 0xC5, 0x22, 0x32, 0x3A, 0xD2, 0x31, 0xC6, 0x28, 0xC1,
0x1A, 0x6A, 0x09, 0x04, 0x85, 0xE6, 0x2B, 0x7E, 0xE0, 0x5E, 0xD2, 0x89, 0x5B, 0x55, 0xC8, 0x7D,
0x67, 0xA1, 0xA2, 0x18, 0x92, 0x90, 0x40, 0x3C, 0x05, 0xB7, 0x33, 0x4A, 0x32, 0x6A, 0x14, 0x6C,
0x39, 0xA4, 0x53, 0xE6, 0x09, 0xE8, 0xD7, 0xE4, 0xDD, 0x9E, 0x3B, 0x15, 0xE2, 0xF7, 0xA6, 0x82,
0xD1, 0x71, 0xB9, 0xCE, 0xB9, 0xDA, 0x7A, 0x5D, 0xB2, 0x20, 0xB8, 0x79, 0x31, 0x7B, 0x87, 0x9A,
0xBC, 0x8A, 0xFE, 0x4B, 0x6B, 0x38, 0xAE, 0xE1, 0x7E, 0x4A, 0x6F, 0x3B, 0xCD, 0x9A, 0xDA, 0xBA,
0xB0, 0xB5, 0xBB, 0xBB, 0x05, 0xE3, 0xFE, 0x80, 0xC4, 0x96, 0x79, 0xC6, 0xB1, 0xCA, 0xD7, 0x85,
0x16, 0x6B, 0x89, 0x13, 0x36, 0xED, 0x5C, 0x5C, 0x88, 0x9B, 0xB2, 0xDF, 0x0E, 0x47, 0xBF, 0x4B,
0x6D, 0xEF, 0xA7, 0x16, 0x90, 0x73, 0xDB, 0x13, 0x45, 0x92, 0xD9, 0x0F, 0x39, 0xDD, 0xCB, 0x42,
0x5B, 0x1E, 0x61, 0x0A, 0x7F, 0x81, 0x4A, 0x3A, 0xAA, 0x59, 0x13, 0xEF, 0x09, 0x97, 0xAF, 0x47,
0xED, 0x35, 0x86, 0x30, 0x04, 0x1D, 0xAB, 0x9D, 0xE5, 0x65, 0xA5, 0x0D, 0x3B, 0xB6, 0xBE, 0xCE,
0x3D, 0x3E, 0x6A, 0xC8, 0x44, 0x2A, 0x09, 0x55, 0xA1, 0x69, 0xE3, 0xB1, 0x1D, 0x6D, 0xBF, 0x6E,
0x3A, 0xDA, 0x5E, 0xD1, 0x5C, 0x9B, 0x4C, 0x4B, 0xF9, 0xCF, 0x8B, 0x3A, 0x92, 0xD5, 0xE4, 0x57,
0xF2, 0xAD, 0xF7, 0xB4, 0x06, 0xF3, 0x5B, 0x43, 0x80, 0xF5, 0xA9, 0xF0, 0xB7, 0xCA, 0x38, 0x2C,
0x4C, 0xDA, 0x92, 0xE4, 0x29, 0x3C, 0xFC, 0x65, 0x66, 0x3B, 0xD5, 0xD4, 0xBB, 0xDE, 0x4E, 0xB5,
0x2E, 0x83, 0x41, 0xD6, 0xC2, 0x59, 0x56, 0xB6, 0x31, 0xFB, 0xF5, 0x9E, 0xC7, 0xC8, 0xE0, 0xF5,
0x3B, 0xCA, 0xB3, 0x45, 0xD8, 0xB6, 0xAA, 0x5C, 0x47, 0xD7, 0xCA, 0x8F, 0xCD, 0xAD, 0x7B, 0x40,
0xD7, 0x98, 0xF2, 0xC7, 0x62, 0xFF, 0xF5, 0x78, 0xE2, 0x0A, 0x4A, 0x0E, 0xB7, 0x98, 0xD6, 0xFB,
0x7E, 0x4B, 0xFB, 0x7B, 0x0C, 0x4E, 0xF7, 0x47, 0xC4, 0x45, 0x35, 0x85, 0x1A, 0x7B, 0x75, 0x55,
0x1D, 0xC7, 0x89, 0xC3, 0xBA, 0x62, 0x5B, 0x61, 0x48, 0xCE, 0xA7, 0x2B, 0xB1, 0x0D, 0xF4, 0xC2,
0x7A, 0x5A, 0xEE, 0xFA, 0xD4, 0xED, 0xC6, 0xCA, 0xB9, 0x33, 0x91, 0xCA, 0x82, 0xDE, 0x8D, 0x5D,
0xBF, 0xB1, 0x88, 0xD0, 0x58, 0xBF, 0x48, 0xBD, 0xFC, 0x58, 0x7B, 0x60, 0x1E, 0xD0, 0x77, 0x21,
0xDB, 0x52, 0xCD, 0xB7, 0x91, 0x6F, 0x5F, 0xDE, 0xBD, 0x95, 0x3D, 0x75, 0xEB, 0xE6, 0x7C, 0x6B,
0x7E, 0xEA, 0x56, 0xFD, 0xF4, 0x2D, 0x5B, 0xDE, 0x65, 0x03, 0x46, 0x4D, 0xD2, 0xCD, 0x50, 0x89,
0xEA, 0x6C, 0xEB, 0xE8, 0x25, 0xE3, 0xE9, 0x67, 0x7A, 0xFE, 0xA9, 0xEA, 0x3B, 0x04, 0x2A, 0x22,
0xF9, 0xDD, 0xDA, 0x0B, 0x9B, 0x31, 0x7F, 0x94, 0xF4, 0xF4, 0xB4, 0x56, 0x7B, 0x79, 0x68, 0x2B,
0x7C, 0xFD, 0x7D, 0x15, 0xFE, 0xA6, 0xE2, 0x94, 0x36, 0x5B, 0x01, 0xBA, 0xC5, 0x8F, 0x5D, 0xF2,
0x19, 0xE0, 0x0B, 0x84, 0xD1, 0xB9, 0xF8, 0x01, 0xD2, 0x27, 0xEC, 0xBA, 0xDB, 0x63, 0x6E, 0x7E,
0xFA, 0x6F, 0xDD, 0x5B, 0xBF, 0x8F, 0xE5, 0xD6, 0x75, 0xBE, 0x24, 0xA5, 0x61, 0x20, 0x06, 0xA0,
0x0A, 0x25, 0x85, 0x7E, 0x51, 0x45, 0x8A, 0xC0, 0xB0, 0xC4, 0x94, 0x31, 0xB0, 0x33, 0xA4, 0xA4,
0x42, 0x45, 0x0A, 0xA9, 0x88, 0x6B, 0xA7, 0x0C, 0x94, 0x20, 0xAB, 0x52, 0xC5, 0xEC, 0x92, 0x8E,
0x0B, 0x15, 0x2A, 0xA2, 0xFF, 0xC0, 0x2A, 0x1C, 0x20, 0x50, 0x0A, 0x6D, 0xB1, 0xC5, 0x02, 0x99,
0x19, 0x52, 0xDA, 0x42, 0x85, 0x0A, 0x51, 0x72, 0xE1, 0xC2, 0x85, 0x19, 0x4B, 0x81, 0x61, 0x04,
0x88, 0x28, 0x89, 0x91, 0xB8, 0x16, 0xC9, 0xEB, 0xEF, 0xFB, 0x0E, 0xDF, 0xCC, 0xEC, 0xEE, 0xAC,
0x01, 0x27, 0x80, 0x84, 0xD5, 0x60, 0x86, 0xEF, 0xCD, 0x7B, 0x7C, 0xF7, 0x9E, 0xDF, 0xE7, 0x3B,
0xE7, 0x9E, 0xE7, 0xA2, 0xDE, 0x15, 0x6D, 0xE0, 0x5D, 0x3C, 0xB9, 0xB4, 0x76, 0xBB, 0x9F, 0xA4,
0x74, 0xFB, 0xCE, 0x0D, 0x2E, 0x6E, 0x5D, 0xE6, 0xDC, 0x91, 0xC3, 0x5D, 0x78, 0xF7, 0x8A, 0x0B,
0x47, 0x97, 0xB6, 0xAE, 0x70, 0xE1, 0xEC, 0x52, 0x7C, 0xB0, 0x0C, 0xF0, 0x38, 0xB8, 0xA2, 0x0E,
0x16, 0x3E, 0x1E, 0x9C, 0x7E, 0x9E, 0x4B, 0x05, 0x23, 0x9E, 0xE4, 0xF8, 0x8B, 0x06, 0x5C, 0xF8,
0x5E, 0xD4, 0xE1, 0x72, 0x88, 0xBF, 0xCB, 0xAB, 0x73, 0x95, 0x9F, 0x5D, 0xE1, 0x7D, 0x97, 0xDE,
0xFA, 0x72, 0x89, 0xE6, 0x2C, 0x68, 0x9B, 0xB0, 0x77, 0x59, 0xBB, 0xEF, 0xC2, 0x29, 0xE2, 0x16,
0x87, 0x2E, 0x1E, 0xE2, 0xDA, 0x9D, 0xB8, 0xEB, 0xD8, 0x2A, 0x2D, 0xDD, 0x0A, 0x72, 0xD2, 0x1E,
0xD4, 0x78, 0xDC, 0x97, 0x8C, 0xFB, 0xEE, 0x95, 0xE2, 0x66, 0x9B, 0x87, 0xFE, 0x28, 0xEF, 0x53,
0xEF, 0x47, 0xAC, 0x35, 0x61, 0x51, 0xFC, 0x05, 0xC3, 0x6E, 0xDF, 0x1E, 0x17, 0xB0, 0x41, 0x2E,
0xC8, 0x84, 0x23, 0xED, 0xCE, 0xE1, 0x16, 0xF7, 0x80, 0x91, 0x19, 0x34, 0xA4, 0x28, 0xE3, 0x27,
0x5D, 0xE3, 0x17, 0xBC, 0xB0, 0x04, 0xAB, 0x08, 0xC6, 0x35, 0xE9, 0xDD, 0xB1, 0x3E, 0x72, 0x03,
0xCB, 0x49, 0x34, 0x45, 0xC9, 0x6B, 0xA5, 0x8F, 0x36, 0xBA, 0xAE, 0x7A, 0xC1, 0x83, 0x15, 0xE7,
0x3D, 0x97, 0xC1, 0x15, 0xDB, 0x47, 0x33, 0x5F, 0x8F, 0xB8, 0xAC, 0x8B, 0x47, 0x09, 0x74, 0x90,
0x58, 0x7A, 0x5D, 0xB9, 0x29, 0x58, 0xE5, 0x55, 0x0B, 0x3F, 0x52, 0x38, 0xB7, 0x57, 0x43, 0x18,
0xDE, 0xDB, 0xB5, 0x2C, 0xEA, 0x3F, 0x6F, 0x16, 0xA3, 0xF1, 0xE1, 0x08, 0xB7, 0x84, 0x5D, 0x5E,
0x36, 0x7D, 0x51, 0xE6, 0x3F, 0xF2, 0x5F, 0x0D, 0x2E, 0xF7, 0x1E, 0x1B, 0x17, 0x6D, 0xD6, 0xBB,
0x60, 0xE2, 0x42, 0xD2, 0x09, 0x45, 0x3C, 0x53, 0xEA, 0x31, 0xE4, 0xD3, 0xBA, 0xBC, 0xE4, 0x2F,
0x08, 0xB9, 0xCA, 0x0D, 0xA3, 0x15, 0x3A, 0x26, 0xA5, 0xDE, 0x25, 0xBF, 0xF6, 0x4B, 0x01, 0xB9,
0xBE, 0x55, 0x5E, 0x75, 0xA4, 0xE4, 0xEF, 0x36, 0x9D, 0x15, 0x7E, 0x0E, 0xBD, 0x7F, 0x11, 0x4B,
0x7B, 0xFF, 0x8E, 0xBF, 0xE5, 0x12, 0x5F, 0x42, 0xA7, 0x60, 0x14, 0xCA, 0x25, 0xD3, 0x45, 0x4D,
0x01, 0x80, 0x11, 0xD0, 0x8C, 0x97, 0x48, 0x7F, 0x51, 0x93, 0x97, 0x64, 0x48, 0xC8, 0xD7, 0x12,
0xE3, 0xEE, 0x3F, 0xAB, 0x7E, 0x72, 0xEB, 0x25, 0x7C, 0xF4, 0x73, 0x88, 0x24, 0xF4, 0x2B, 0xB6,
0x03, 0x8F, 0x92, 0x46, 0x4C, 0x7E, 0x62, 0x10, 0x00, 0xA2, 0x4D, 0x56, 0xA0, 0x46, 0xAF, 0x49,
0x34, 0xE1, 0x7C, 0x26, 0xD0, 0x4D, 0xD0, 0x26, 0xA1, 0xEC, 0x16, 0xAF, 0xFE, 0x4C, 0x47, 0xB8,
0x77, 0x20, 0xC7, 0x07, 0x64, 0x3E, 0xEE, 0xA8, 0xEA, 0x99, 0xBA, 0xCE, 0x64, 0xA0, 0xC3, 0x26,
0x8C, 0xD1, 0x5D, 0xF0, 0xA3, 0xB7, 0xEE, 0xFA, 0xD4, 0xF1, 0xD9, 0x82, 0xFA, 0x54, 0x3E, 0x72,
0xA7, 0x1A, 0x54, 0x0E, 0xC1, 0x14, 0x2E, 0xB0, 0xF1, 0xBC, 0xF4, 0x2E, 0x6A, 0xAB, 0xD6, 0x75,
0xFB, 0x20, 0x23, 0x85, 0x5C, 0xE3, 0x9B, 0x23, 0x3E, 0x05, 0x91, 0x1C, 0x85, 0xD0, 0x80, 0xCB,
0xDB, 0xA8, 0xC7, 0x7D, 0x27, 0xA0, 0x39, 0xED, 0xB1, 0x8A, 0xC7, 0x3E, 0xE9, 0x08, 0x2D, 0x34,
0xCF, 0xC2, 0x89, 0x06, 0xD8, 0x7C, 0x05, 0xCB, 0x8D, 0x7F, 0x09, 0x8E, 0xBE, 0xEE, 0x07, 0x97,
0x0D, 0x47, 0x70, 0xB8, 0xA2, 0x0E, 0xE7, 0x74, 0x0C, 0x97, 0x90, 0x72, 0xC8, 0x21, 0xB0, 0xA0,
0xF9, 0x84, 0xAE, 0x93, 0xA7, 0x43, 0xFE, 0x9B, 0x39, 0xFD, 0xDF, 0x35, 0x9A, 0x0F, 0xC0, 0x92,
0x73, 0x8F, 0xF9, 0x37, 0xC8, 0xB5, 0xB4, 0x0E, 0x79, 0x04, 0x15, 0xC4, 0xDD, 0x94, 0x14, 0x59,
0x30, 0xC9, 0x20, 0x63, 0xCA, 0x3F, 0xAB, 0x53, 0xD0, 0xFC, 0x46, 0xDC, 0x66, 0xB0, 0xE8, 0x21,
0xEA, 0x0F, 0x5C, 0xF5, 0xEC, 0x10, 0x0C, 0x97, 0xC0, 0xE7, 0xE0, 0xA6, 0x43, 0xB8, 0x45, 0xEF,
0x8E, 0x6E, 0x84, 0x94, 0xF6, 0xE1, 0x24, 0xDF, 0x38, 0x1C, 0xF5, 0x70, 0x69, 0x7B, 0xD8, 0x5E,
0xBC, 0x21, 0x7F, 0x3D, 0x3C, 0x0C, 0x29, 0x8C, 0xA3, 0x4B, 0x70, 0x88, 0x47, 0xDC, 0x74, 0x40,
0x0D, 0x04, 0x43, 0x06, 0x2B, 0xC1, 0xD2, 0x69, 0xBB, 0xE7, 0xEB, 0xB8, 0xDD, 0xB6, 0xDD, 0x88,
0x70, 0x15, 0x48, 0x9A, 0x4E, 0x09, 0xDC, 0xC8, 0xDD, 0x88, 0x4F, 0x3E, 0xEE, 0xB1, 0x82, 0x4B,
0x7F, 0x31, 0xBB, 0x39, 0xEA, 0xE2, 0x2E, 0x85, 0x80, 0x8E, 0x1C, 0x76, 0x8C, 0xBB, 0xAC, 0xCC,
0xCA, 0xD9, 0x5D, 0x49, 0x86, 0x1F, 0xDF, 0xFA, 0x8F, 0x0F, 0x22, 0xFF, 0x2F, 0x43, 0xF4, 0x49,
0xBE, 0x53, 0x58, 0xF0, 0xC3, 0x1F, 0xBE, 0x09, 0x8F, 0xF8, 0xB1, 0xD4, 0x1F, 0xF6, 0x08, 0x0C,
0x54, 0x47, 0x51, 0x36, 0x2E, 0xEB, 0xF3, 0x36, 0x9E, 0xD2, 0x21, 0x84, 0x94, 0x5C, 0xD5, 0xFA,
0x32, 0x19, 0x61, 0xAD, 0x7C, 0x12, 0x20, 0x9C, 0xC0, 0x26, 0x61, 0x99, 0x79, 0x5D, 0xD0, 0xEF,
0x27, 0xB8, 0x4F, 0x24, 0xC7, 0x7A, 0x11, 0x7F, 0x3F, 0xF7, 0x8C, 0x16, 0x4E, 0x82, 0xCD, 0x60,
0x67, 0xB0, 0x05, 0xD3, 0x3B, 0x5F, 0x78, 0x88, 0x61, 0xA4, 0xF2, 0x0B, 0x7E, 0xDD, 0x1E, 0x09,
0xE7, 0x13, 0x30, 0x75, 0xB9, 0x86, 0x2E, 0x41, 0xEA, 0x43, 0xBF, 0x73, 0xC3, 0x7E, 0xE6, 0xDB,
0x57, 0x0F, 0xE3, 0x9B, 0xDD, 0xA5, 0xEB, 0xD1, 0xBB, 0xDD, 0xD3, 0xD7, 0xA2, 0x9B, 0xED, 0x93,
0x43, 0xF4, 0x69, 0x89, 0xCB, 0xFF, 0xB8, 0x27, 0xAF, 0x45, 0xEF, 0xD7, 0x4F, 0x5E, 0x8F, 0x6E,
0x76, 0x4F, 0x1F, 0x26, 0x1F, 0x4E, 0x97, 0xF6, 0x1F, 0x7D, 0xF3, 0xF0, 0x55, 0xA8, 0xDE, 0x0D,
0x5A, 0x40, 0x4B, 0x69, 0x51, 0x2D, 0x9F, 0xFB, 0x15, 0xB1, 0xEB, 0x26, 0x63, 0x46, 0x43, 0xF9,
0x94, 0x78, 0x76, 0xE2, 0x56, 0xD8, 0xCE, 0x07, 0x75, 0xF4, 0x45, 0xEF, 0xE6, 0xD9, 0x1D, 0x14,
0x75, 0xFE, 0x82, 0xF7, 0x6D, 0xE5, 0xDB, 0xD0, 0x97, 0x16, 0x4B, 0xE9, 0x2A, 0xC5, 0x16, 0xCE,
0xB6, 0x17, 0x22, 0x72, 0x85, 0xBF, 0x85, 0x6C, 0x96, 0x17, 0xDD, 0x71, 0xF6, 0xC2, 0xF9, 0x9F,
0xDD, 0x47, 0x28, 0x99, 0xCE, 0xC5, 0x2B, 0x3C, 0x74, 0x0E, 0xFC, 0xDB, 0x08, 0x35, 0x55, 0x04,
0x9B, 0x7E, 0x80, 0x21, 0x10, 0x7E, 0x08, 0x1F, 0x85, 0xDC, 0x61, 0xDF, 0x74, 0x4D, 0xFC, 0x0F,
0x87, 0x8F, 0xD6, 0xB7, 0x7E, 0xD6, 0x78, 0xFF, 0x02, 0x1D, 0x3A, 0xB9, 0x05, 0x93, 0xEB, 0xB2,
0xFF, 0x9E, 0x13, 0x48, 0xBC, 0x44, 0xF0, 0x07, 0xB3, 0x19, 0xB2, 0x4A, 0xE7, 0x18, 0xC5, 0x70,
0x3F, 0x68, 0x00, 0xEB, 0xE1, 0xF2, 0xD0, 0xDB, 0x4B, 0x0C, 0xE6, 0x69, 0xE7, 0xCE, 0x5D, 0x0F,
0xE6, 0x68, 0x86, 0xAD, 0xB7, 0x15, 0xC8, 0xBB, 0x26, 0x75, 0xBF, 0x81, 0x38, 0xC8, 0x70, 0x05,
0xC7, 0xA2, 0xAF, 0x6A, 0xAF, 0x4A, 0x51, 0xB2, 0xD2, 0xD6, 0x46, 0xC0, 0x22, 0x5E, 0x2C, 0x2A,
0x89, 0x2A, 0xD2, 0x76, 0x2C, 0xE3, 0x5B, 0x5C, 0x34, 0xF2, 0x45, 0x23, 0x18, 0xC1, 0xCA, 0x32,
0x53, 0xB8, 0xBA, 0x83, 0x01, 0x42, 0x2A, 0xA7, 0xF1, 0x71, 0x88, 0x6A, 0xF0, 0x53, 0xF4, 0xA9,
0x6F, 0x7D, 0x1F, 0xBF, 0xBB, 0x60, 0xC1, 0xA4, 0x75, 0xA7, 0xA2, 0xB1, 0x6B, 0xD6, 0xDE, 0x11,
0xA2, 0x49, 0xD1, 0x69, 0x60, 0xFA, 0xC1, 0xCE, 0x3A, 0x1B, 0x06, 0xFE, 0x9C, 0xE1, 0x9F, 0x21,
0xED, 0x4D, 0x0A, 0x6F, 0x9F, 0xF9, 0x64, 0xBE, 0xA4, 0x70, 0x4A, 0xB7, 0xF7, 0xD3, 0x11, 0xA5,
0x3C, 0xDE, 0xE0, 0x75, 0x18, 0x75, 0x1D, 0x78, 0xFD, 0x4C, 0xD7, 0x5F, 0xEB, 0xFA, 0x51, 0xCF,
0xEB, 0xCD, 0x8E, 0xF7, 0xDF, 0x6C, 0xB9, 0xE4, 0x7B, 0xB8, 0xC6, 0x9F, 0xBE, 0x4E, 0x02, 0xD2,
0xBF, 0xE1, 0xD6, 0x69, 0xCA, 0xAD, 0xB3, 0x54, 0x14, 0xD1, 0xA0, 0xDC, 0x33, 0xF2, 0x92, 0x7D,
0x25, 0xDD, 0x4B, 0x4C, 0x73, 0xF0, 0x59, 0x5E, 0x27, 0xA5, 0x9D, 0xCF, 0xA9, 0xF5, 0x08, 0x1A,
0x70, 0xAF, 0x20, 0x90, 0x73, 0xF9, 0xBF, 0x65, 0x00, 0x55, 0xFC, 0xCC, 0x95, 0x86, 0xB2, 0xD7,
0xE6, 0xE6, 0x83, 0xE9, 0xAA, 0x73, 0xFF, 0xE6, 0x60, 0x5E, 0x03, 0x84, 0x56, 0x20, 0xD0, 0xE5,
0x75, 0x55, 0x3F, 0x23, 0x2E, 0xDD, 0x21, 0xD2, 0x63, 0x33, 0x07, 0x97, 0x5B, 0x38, 0x78, 0x5E,
0x42, 0x85, 0x05, 0xF5, 0x78, 0xD5, 0x25, 0x1D, 0xEE, 0x85, 0x9C, 0xF0, 0x6A, 0x5D, 0xF9, 0xF7,
0xE1, 0x9A, 0x00, 0x0F, 0x11, 0x6C, 0x78, 0xB9, 0x0C, 0xF5, 0xCF, 0x70, 0xEE, 0x16, 0x5E, 0x9E,
0xB6, 0x69, 0x3B, 0x05, 0x53, 0x56, 0xE7, 0xCF, 0x4E, 0xF1, 0x90, 0xBE, 0x33, 0x23, 0xA6, 0x96,
0xA1, 0x47, 0xEE, 0x30, 0xE1, 0xC1, 0xB3, 0x91, 0x00, 0x60, 0xFE, 0x75, 0xD0, 0xC1, 0xAF, 0xB3,
0xB2, 0xA0, 0x0E, 0x61, 0xC9, 0x23, 0x53, 0x4C, 0x07, 0x79, 0x7B, 0x68, 0x4D, 0x5E, 0xED, 0x11,
0x83, 0x8A, 0xAE, 0x6A, 0x93, 0x31, 0xEB, 0xC3, 0x19, 0x69, 0xB5, 0x81, 0x9E, 0xE1, 0xDC, 0x65,
0xD8, 0xC5, 0x3B, 0xCC, 0xC2, 0x55, 0x03, 0xFE, 0x43, 0x7F, 0xBE, 0xDC, 0x59, 0x9A, 0x8D, 0x7D,
0x6B, 0x0A, 0xB4, 0x27, 0x95, 0xC2, 0xD5, 0xE6, 0x0D, 0x7C, 0x12, 0x09, 0xA2, 0x30, 0x08, 0xF4,
0xE7, 0xFD, 0xA3, 0xD8, 0xFE, 0xC0, 0x2B, 0x69, 0xDA, 0x2E, 0x10, 0xEB, 0x0D, 0xA2, 0x08, 0xC8,
0x00, 0x01, 0x06, 0x4B, 0xC0, 0x6C, 0xD2, 0x89, 0x4F, 0x10, 0x46, 0x0E, 0x46, 0x46, 0x41, 0xE8,
0xE2, 0xCB, 0xE1, 0xB1, 0xB5, 0x24, 0x62, 0xFA, 0x68, 0x80, 0xCB, 0x22, 0xB0, 0xA4, 0xCF, 0x0F,
0x2F, 0xBF, 0x55, 0x22, 0xB4, 0x1E, 0x28, 0xBC, 0x52, 0x6E, 0x24, 0x11, 0xDB, 0x86, 0xBD, 0x0C,
0x0F, 0x02, 0xB5, 0x44, 0x38, 0xC3, 0x72, 0xF8, 0x04, 0x1B, 0xA4, 0x82, 0x14, 0x4A, 0xAB, 0x8C,
0x51, 0x32, 0xC4, 0x7C, 0x47, 0x15, 0x9F, 0x48, 0x8F, 0xC5, 0xC6, 0x8A, 0x7E, 0x9E, 0x3A, 0xEF,
0xD6, 0x0F, 0xEC, 0xA4, 0xC1, 0x5B, 0x24, 0x8D, 0xCA, 0x6D, 0x42, 0x98, 0xB7, 0x27, 0xE2, 0x9D,
0x42, 0xB0, 0x5D, 0xEA, 0x8D, 0x77, 0x4A, 0xA3, 0xD8, 0x2D, 0x7E, 0xBC, 0x3D, 0x51, 0x84, 0xA7,
0x34, 0x14, 0x4B, 0x18, 0x29, 0x99, 0xDA, 0x3A, 0x05, 0x87, 0x32, 0xF1, 0x12, 0xC2, 0x81, 0x52,
0xD8, 0xCC, 0x80, 0x5B, 0x95, 0x0B, 0x3E, 0x01, 0xDE, 0x8F, 0xDC, 0x71, 0x7C, 0x8B, 0x59, 0xF6,
0x29, 0x37, 0x43, 0x1A, 0xDC, 0x20, 0x98, 0x90, 0x5A, 0x4F, 0x51, 0xE1, 0xD5, 0x9D, 0xC8, 0xE7,
0x4D, 0x3D, 0x7C, 0x95, 0x7E, 0x4C, 0x23, 0xDB, 0x28, 0x6B, 0x37, 0xB7, 0x23, 0x1D, 0xE2, 0x76,
0x11, 0x8E, 0x50, 0x44, 0xA1, 0xA0, 0x06, 0x21, 0x88, 0x44, 0xF1, 0xAB, 0xDB, 0x09, 0xA0, 0xBE,
0x2D, 0xCA, 0x11, 0xE2, 0xBC, 0x5C, 0x6E, 0x7B, 0x15, 0xC4, 0x24, 0xF6, 0xD9, 0x2D, 0x71, 0x85,
0x13, 0x37, 0xE1, 0x7B, 0x4F, 0x90, 0x10, 0x25, 0x3E, 0x41, 0xD8, 0xAB, 0x6E, 0x23, 0x49, 0x34,
0x12, 0xA2, 0x88, 0xEA, 0x98, 0x0E, 0x75, 0xC5, 0x6D, 0xFE, 0x94, 0xCA, 0xA4, 0x61, 0xB4, 0x91,
0x05, 0x49, 0xD9, 0x31, 0x32, 0x11, 0xC9, 0xC2, 0x7B, 0xD9, 0x44, 0x54, 0x83, 0xF7, 0xE2, 0x4F,
0x4B, 0xBE, 0x7A, 0x44, 0x1B, 0x41, 0x16, 0xA5, 0x62, 0xF7, 0xF3, 0x08, 0x34, 0x10, 0x5C, 0x3F,
0xDF, 0xE7, 0x93, 0x21, 0x12, 0xF9, 0x33, 0xB4, 0x60, 0x56, 0x02, 0xC3, 0x3C, 0x10, 0x74, 0xA5,
0xCB, 0x99, 0x99, 0xE4, 0x65, 0xA0, 0x60, 0xCD, 0xF7, 0xCC, 0x4E, 0x24, 0x3D, 0xE5, 0x30, 0x09,
0x8A, 0xD2, 0x95, 0xE8, 0x98, 0xEB, 0x4D, 0x64, 0x54, 0x66, 0x76, 0x2A, 0x8E, 0x87, 0x77, 0x4F,
0x70, 0x67, 0xD1, 0x31, 0x3E, 0x12, 0xB0, 0xDE, 0x38, 0x27, 0x30, 0x38, 0x34, 0x98, 0x0C, 0x88,
0xD5, 0x14, 0x4E, 0x29, 0xF3, 0x85, 0xB1, 0x94, 0x58, 0x70, 0xD6, 0xEF, 0xB1, 0x56, 0x05, 0x83,
0x14, 0xC9, 0x1A, 0x5C, 0x43, 0xBC, 0x43, 0x64, 0x45, 0x00, 0x2B, 0xC3, 0xB5, 0x3C, 0xB7, 0xD2,
0x29, 0xF2, 0x52, 0xCC, 0x31, 0x58, 0x96, 0x1A, 0xB6, 0x8D, 0xBC, 0xDD, 0x78, 0xD9, 0xDE, 0x0C,
0xEA, 0x0B, 0x20, 0xDB, 0x63, 0xEE, 0x1C, 0xDC, 0x0E, 0xEC, 0x03, 0x91, 0xD7, 0x9D, 0xB1, 0x3D,
0xA4, 0xBF, 0xB2, 0x30, 0x6D, 0xD1, 0xFA, 0xC0, 0xD0, 0xF5, 0x91, 0x3D, 0x4C, 0x42, 0xDC, 0xD1,
0x20, 0xF8, 0x1D, 0xF7, 0x7A, 0x48, 0x5B, 0x21, 0xCE, 0xAC, 0x96, 0x07, 0x14, 0x06, 0xD3, 0x8F,
0x0D, 0xB3, 0x7B, 0xC9, 0x33, 0xB4, 0x87, 0xF8, 0x77, 0x6F, 0xBD, 0xB5, 0x28, 0x8E, 0xB0, 0x28,
0xE0, 0xF2, 0xAB, 0x49, 0xD2, 0x2B, 0x13, 0xF2, 0x81, 0x9F, 0x69, 0xCA, 0x88, 0xEC, 0x34, 0x5D,
0x05, 0x71, 0xE5, 0x7E, 0x61, 0x42, 0x2C, 0xFC, 0x7C, 0x9E, 0x89, 0xC4, 0x1E, 0xAA, 0x8D, 0x6B,
0x93, 0xBD, 0x41, 0x5D, 0x61, 0x11, 0xB7, 0x89, 0x2C, 0x28, 0xDD, 0x77, 0x54, 0x04, 0x9B, 0xFE,
0x8B, 0xC1, 0x98, 0xB6, 0xFA, 0xE8, 0x96, 0xB7, 0xA2, 0xA8, 0x22, 0x4B, 0x55, 0xAD, 0xD0, 0x7C,
0x65, 0x67, 0x31, 0xDF, 0x19, 0x11, 0x04, 0x6F, 0x86, 0x22, 0x70, 0x4E, 0xE4, 0x9C, 0x9E, 0x01,
0xDD, 0x1D, 0xE4, 0xE2, 0xFD, 0x92, 0x79, 0xC2, 0x23, 0xE1, 0x9B, 0xEE, 0x9E, 0x3F, 0xF7, 0x33,
0xEF, 0x69, 0x2D, 0x6E, 0x0B, 0xD6, 0x4E, 0x8C, 0x89, 0x0D, 0x1F, 0x9A, 0x56, 0x64, 0x1F, 0x58,
0x78, 0xFD, 0xEE, 0x31, 0xBD, 0x21, 0xC6, 0xC0, 0x0F, 0x46, 0xB5, 0x95, 0xBF, 0x9D, 0xA2, 0x78,
0x52, 0x5F, 0xB2, 0xE4, 0x22, 0xA8, 0x96, 0x74, 0xF6, 0xDE, 0x16, 0x04, 0xBC, 0x70, 0x99, 0x7B,
0xF9, 0xBB, 0x23, 0x09, 0x75, 0x33, 0x44, 0x23, 0x9F, 0x18, 0x99, 0xD6, 0x22, 0xE1, 0x4B, 0xD6,
0x8B, 0xC1, 0x93, 0x56, 0x6D, 0x1A, 0xE4, 0x70, 0x64, 0x34, 0x31, 0xF6, 0xC5, 0xE8, 0xD8, 0xF6,
0x00, 0x48, 0xD9, 0xBA, 0x20, 0xD1, 0x64, 0xC1, 0x13, 0x49, 0x38, 0xDF, 0xB2, 0xC5, 0x6C, 0xDD,
0x14, 0x24, 0xA6, 0x68, 0x2B, 0xF6, 0xD9, 0xB9, 0x58, 0x4C, 0x58, 0x95, 0x97, 0xA4, 0x2A, 0x6E,
0x27, 0x1C, 0x54, 0x6E, 0x77, 0x17, 0x56, 0xFD, 0x89, 0x0E, 0x5B, 0x3B, 0xDB, 0x48, 0x64, 0x77,
0xC6, 0xD6, 0xC6, 0x13, 0xFC, 0x02, 0x94, 0x32, 0xA9, 0x8F, 0x6C, 0x28, 0x51, 0x60, 0xCA, 0x7C,
0xDC, 0xAA, 0x22, 0xF7, 0x6C, 0x67, 0xB0, 0x9D, 0x52, 0xA6, 0x7E, 0x0C, 0xC5, 0x9C, 0x2A, 0x27,
0xCB, 0xCC, 0x2E, 0x6C, 0x6E, 0x99, 0x30, 0x3B, 0xF1, 0x5B, 0x22, 0xD3, 0xED, 0x2D, 0xCC, 0xB5,
0xD1, 0x10, 0x52, 0xA2, 0x6D, 0xD6, 0xD1, 0x01, 0x56, 0x15, 0x86, 0xCC, 0xD2, 0x56, 0x5F, 0x58,
0xB2, 0xB6, 0x5E, 0x91, 0x15, 0x1C, 0xEB, 0x59, 0x0B, 0x29, 0x93, 0x42, 0x15, 0x2B, 0x83, 0x75,
0x4B, 0xD2, 0x24, 0xD6, 0xEE, 0xD6, 0x9B, 0x74, 0xAF, 0xC7, 0x1D, 0x18, 0x0E, 0x07, 0x15, 0x5F,
0x75, 0xA8, 0x62, 0x37, 0xB0, 0x52, 0xFC, 0xF2, 0xB9, 0xBC, 0xFC, 0xBD, 0xB3, 0x4C, 0x64, 0x21,
0xC8, 0x64, 0x68, 0x61, 0xFA, 0xF8, 0xB4, 0x57, 0x15, 0x2E, 0xE7, 0xD3, 0x92, 0x41, 0xCC, 0xC9,
0x42, 0xB8, 0x5D, 0x75, 0x7F, 0x25, 0x12, 0x12, 0x8B, 0xF7, 0xFF, 0x78, 0x91, 0x3B, 0x53, 0xC6,
0x8B, 0x44, 0xB1, 0xA8, 0x54, 0x9A, 0xB5, 0xC0, 0x91, 0xF8, 0x3B, 0x92, 0x68, 0xAF, 0x8B, 0xF9,
0x6B, 0x5B, 0x1F, 0xE8, 0x7C, 0x03, 0xCD, 0x28, 0xB3, 0x2E, 0x51, 0xA2, 0x46, 0x40, 0xBA, 0xBB,
0x0E, 0xA7, 0xCD, 0x34, 0x5D, 0x4D, 0x7B, 0x45, 0xBB, 0x89, 0x2F, 0x10, 0x1E, 0x42, 0xD4, 0x85,
0xC2, 0x50, 0x3D, 0x35, 0xC2, 0x3B, 0x9E, 0x16, 0xBC, 0xE7, 0x29, 0x91, 0x4A, 0x84, 0x34, 0x46,
0xCE, 0xED, 0x60, 0x71, 0x03, 0xBA, 0xB9, 0xAE, 0x32, 0xD7, 0xC4, 0x4A, 0x09, 0x51, 0xF4, 0x4C,
0x79, 0x9F, 0xF3, 0xB8, 0x9C, 0xD3, 0xBE, 0xF8, 0x2A, 0x7E, 0xCA, 0xAD, 0x57, 0x92, 0x11, 0x4D,
0x44, 0xFB, 0x00, 0x9F, 0xAF, 0xDC, 0x77, 0xDC, 0x4D, 0x04, 0xAB, 0xD1, 0x1C, 0x33, 0x74, 0xCD,
0x89, 0x5D, 0x27, 0xF6, 0x81, 0xE3, 0xFE, 0xFE, 0xD4, 0x57, 0x6D, 0x18, 0x9E, 0x3B, 0x13, 0x2B,
0xD3, 0xA7, 0x65, 0x93, 0xC1, 0xB5, 0x3B, 0x38, 0x59, 0x19, 0x77, 0xAD, 0x63, 0xE5, 0xB7, 0xA8,
0xB1, 0x58, 0x38, 0x51, 0xD1, 0x32, 0x1B, 0xDD, 0xA4, 0x5A, 0xB5, 0xD2, 0x60, 0x61, 0x83, 0x2E,
0x4E, 0x5A, 0x19, 0xD9, 0x49, 0x67, 0xD1, 0x5A, 0xD8, 0x61, 0x15, 0x51, 0x6D, 0x39, 0xC7, 0x5B,
0xA7, 0xAA, 0x02, 0x77, 0x8D, 0x3F, 0x6B, 0xAA, 0x3E, 0xBE, 0x95, 0x68, 0x0C, 0x83, 0x11, 0x4C,
0x48, 0xC9, 0xAE, 0xFA, 0x04, 0x2F, 0xBC, 0x71, 0x87, 0x98, 0x03, 0x6F, 0x59, 0x01, 0xF1, 0xE7,
0xD6, 0x16, 0x37, 0x14, 0x5A, 0x96, 0xAD, 0xB6, 0x93, 0x70, 0xB9, 0xB3, 0x24, 0xCB, 0xAD, 0x25,
0xD6, 0x66, 0x17, 0xDA, 0xD6, 0xAD, 0x63, 0xAE, 0xD8, 0x48, 0x2A, 0xA5, 0x87, 0x62, 0x57, 0xBD,
0x57, 0xBB, 0x80, 0xC9, 0x85, 0xB9, 0x03, 0x29, 0x4D, 0xBC, 0x3F, 0x75, 0x51, 0xAE, 0x98, 0x8A,
0x4A, 0xB6, 0x5A, 0x80, 0x43, 0x8A, 0x76, 0x05, 0x05, 0xD1, 0x00, 0x63, 0x79, 0xE2, 0x76, 0x19,
0x86, 0x8C, 0xD7, 0x12, 0xE2, 0x1F, 0xBD, 0xF3, 0x1F, 0xC3, 0x12, 0x77, 0x88, 0x99, 0x96, 0x4C,
0xA0, 0xE1, 0x00, 0xF3, 0x2C, 0x3A, 0x9E, 0xC2, 0x3C, 0xE7, 0xCD, 0x64, 0xD3, 0x36, 0xAD, 0xEF,
0xB2, 0xD6, 0xD5, 0xD9, 0x07, 0x24, 0x46, 0x19, 0xD4, 0xBA, 0xB3, 0x44, 0x65, 0xFE, 0x66, 0x67,
0xA3, 0xA2, 0x85, 0xBB, 0x8A, 0x70, 0x91, 0xF8, 0x7F, 0xB8, 0x9D, 0x54, 0x4A, 0x77, 0x9B, 0x30,
0x83, 0xC6, 0xFF, 0x56, 0x2D, 0x78, 0x52, 0x1E, 0x5B, 0x3A, 0x7F, 0x30, 0x6F, 0xD5, 0x4B, 0x58,
0x71, 0x67, 0xAB, 0xB5, 0xF1, 0x5E, 0x46, 0x6B, 0xD0, 0xFA, 0x80, 0x05, 0xDC, 0x81, 0x0C, 0x61,
0x8F, 0xAC, 0x37, 0xC3, 0xAA, 0xB5, 0xCF, 0xCA, 0x25, 0xD8, 0x04, 0xA7, 0xA5, 0x67, 0x9D, 0x40,
0x01, 0x80, 0x84, 0x1C, 0x58, 0x04, 0x42, 0x52, 0x8D, 0x81, 0x0B, 0xB3, 0x60, 0x2E, 0x91, 0x77,
0x5C, 0x02, 0xAB, 0x73, 0x89, 0x6C, 0x20, 0xB1, 0xA1, 0x17, 0xB9, 0xCD, 0x20, 0x07, 0x32, 0x4F,
0x06, 0xBD, 0x20, 0x7A, 0x97, 0xED, 0xC2, 0x37, 0x1F, 0xDC, 0x6A, 0x8F, 0x7D, 0x0B, 0x7B, 0x9F,
0x1B, 0xFC, 0x78, 0xDD, 0x92, 0xD7, 0x61, 0x6A, 0x91, 0xF1, 0xA5, 0x87, 0xEA, 0x7B, 0xC3, 0xD1,
0x46, 0xC7, 0x15, 0x7D, 0xC8, 0xAE, 0x03, 0x96, 0xE7, 0xB9, 0x51, 0x50, 0xBD, 0x61, 0xF9, 0x6F,
0x73, 0x4E, 0x66, 0x8C, 0x6C, 0x83, 0x49, 0x8D, 0xF5, 0x4A, 0xC3, 0xAF, 0x27, 0x35, 0x13, 0xD2,
0x0F, 0x06, 0xEB, 0x3C, 0x20, 0x24, 0xA8, 0x8B, 0x51, 0xB0, 0xA5, 0x86, 0x1A, 0xBD, 0x2A, 0x59,
0xA7, 0xE7, 0xE5, 0xAA, 0xB6, 0xCB, 0x1C, 0xAA, 0x7F, 0x12, 0x0D, 0xD1, 0xA4, 0xC5, 0xDA, 0x64,
0x60, 0x49, 0x74, 0x02, 0x23, 0x3C, 0x51, 0x57, 0xA2, 0x78, 0x77, 0x54, 0x8A, 0xAE, 0x5E, 0x6C,
0x85, 0xC3, 0x56, 0x6B, 0x89, 0x04, 0x8B, 0x16, 0x03, 0x15, 0x5A, 0xCC, 0xA9, 0xDF, 0x37, 0xB3,
0xE2, 0x70, 0xEC, 0xCC, 0x32, 0x62, 0xB0, 0x32, 0xA7, 0xE5, 0xE6, 0x7E, 0xDA, 0xA2, 0xFF, 0x1D,
0x3F, 0x4F, 0xB8, 0xB3, 0xE0, 0xE6, 0x8A, 0xDE, 0xE0, 0x68, 0x6B, 0x20, 0x53, 0xAF, 0xED, 0x0D,
0xA7, 0x6D, 0xB6, 0x3B, 0xFC, 0x5B, 0x50, 0x27, 0x54, 0xC0, 0x0A, 0xAC, 0xB7, 0x0E, 0xE9, 0xE0,
0xB3, 0x79, 0x4F, 0xE5, 0x24, 0x24, 0x79, 0x14, 0x60, 0xA9, 0x6A, 0xF9, 0xC4, 0x9C, 0x08, 0x76,
0xB6, 0x5E, 0x06, 0xA8, 0x28, 0x99, 0xDF, 0x9C, 0x05, 0xED, 0x64, 0xA6, 0xC5, 0xCD, 0x49, 0xEF,
0x54, 0xC2, 0x6D, 0xAF, 0x8D, 0x02, 0x40, 0x82, 0x3D, 0x8D, 0x80, 0x10, 0xEA, 0x45, 0xC6, 0xC5,
0xC5, 0xBC, 0xB1, 0x2D, 0x64, 0x2B, 0xE1, 0x2A, 0xB0, 0x92, 0xD2, 0x04, 0x11, 0x5C, 0x7B, 0xD2,
0x60, 0xE0, 0x87, 0xB6, 0xCA, 0x05, 0xF7, 0xFC, 0x27, 0x3B, 0x92, 0xCD, 0x30, 0x2E, 0x19, 0x0C,
0xB4, 0x58, 0xBD, 0x58, 0x24, 0x17, 0xE6, 0xD4, 0x81, 0x85, 0x3B, 0x29, 0x2F, 0xE6, 0xF7, 0xFE,
0x63, 0x38, 0xB0, 0xE2, 0xB2, 0xB2, 0x9E, 0xB6, 0x41, 0x47, 0xDD, 0x11, 0x2C, 0xE2, 0xBE, 0x2A,
0x4F, 0x94, 0xAE, 0x42, 0xAA, 0xFD, 0xA5, 0xDD, 0xD9, 0xE8, 0x7D, 0xCC, 0xF0, 0x89, 0xCE, 0x35,
0x8B, 0xF9, 0xC0, 0xB2, 0x33, 0xD9, 0x9A, 0x8A, 0x59, 0xCD, 0xA8, 0x13, 0xF7, 0x07, 0x7F, 0xEC,
0xB0, 0x2A, 0x57, 0xA9, 0x92, 0x59, 0x20, 0x59, 0xE8, 0x47, 0xDC, 0x3C, 0x67, 0x80, 0xE2, 0xE6,
0x08, 0x64, 0x08, 0x5C, 0x1B, 0x71, 0x7C, 0x89, 0xA7, 0x18, 0xFC, 0xE7, 0x9D, 0xE5, 0x8C, 0x47,
0x63, 0x38, 0x9A, 0x05, 0xE3, 0x8B, 0xF7, 0x26, 0xAB, 0x61, 0x54, 0x93, 0xBC, 0x30, 0x2A, 0xCE,
0xEA, 0x9F, 0x55, 0x20, 0x3E, 0xEF, 0x4C, 0x6E, 0x56, 0x82, 0xA9, 0x3F, 0x0F, 0xCD, 0x60, 0x77,
0x70, 0x1B, 0xAF, 0xA4, 0xC1, 0xCA, 0x08, 0x95, 0x1C, 0xF5, 0x19, 0x94, 0x57, 0xEA, 0x20, 0x49,
0x5E, 0xBD, 0x35, 0x41, 0x03, 0x76, 0xCD, 0xDD, 0x45, 0x19, 0xE4, 0xBE, 0xF5, 0xD7, 0xEB, 0x2E,
0xBA, 0x39, 0x60, 0x65, 0xC4, 0xC5, 0x78, 0x40, 0xC6, 0xF9, 0x7C, 0x16, 0x1A, 0x27, 0xC0, 0xCB,
0x19, 0x8F, 0x07, 0x97, 0xBD, 0x3F, 0x04, 0x33, 0xA2, 0x65, 0x9B, 0xF6, 0x48, 0x14, 0xBF, 0xEE,
0xAC, 0x8A, 0x3C, 0xFB, 0xC1, 0x5A, 0x81, 0x8E, 0x55, 0xFC, 0x87, 0x76, 0xEE, 0xBC, 0xCE, 0xE4,
0x3A, 0xA0, 0x0C, 0x9A, 0x5A, 0x2B, 0xE1, 0x81, 0xE7, 0x6B, 0x55, 0xAD, 0x32, 0x1C, 0x44, 0x86,
0x5F, 0xCF, 0x54, 0x42, 0x38, 0x79, 0x1D, 0x20, 0x4D, 0x45, 0x0B, 0x6E, 0xC2, 0x29, 0x19, 0xC0,
0x47, 0x38, 0x22, 0x54, 0x7B, 0x86, 0x64, 0x8F, 0xA8, 0x8A, 0xA4, 0xC5, 0xB3, 0x78, 0x3C, 0xA4,
0x43, 0x3C, 0xE2, 0x21, 0x9E, 0x02, 0xD6, 0xA4, 0xB8, 0xA7, 0x7A, 0x9E, 0x0C, 0xBA, 0xEC, 0xE3,
0x51, 0x99, 0x8C, 0x10, 0x04, 0x4B, 0x6F, 0x0F, 0x54, 0x17, 0xEA, 0x36, 0x42, 0x28, 0x56, 0x86,
0x5E, 0x42, 0x88, 0xBF, 0x56, 0x66, 0x8D, 0x06, 0xAB, 0x60, 0xAF, 0x99, 0xBA, 0xCE, 0x7E, 0xC2,
0x0D, 0x0E, 0x58, 0x0C, 0x6B, 0xCC, 0x0C, 0xAC, 0x0F, 0xB0, 0x75, 0x05, 0xB6, 0x1E, 0x81, 0x7B,
0xFA, 0x62, 0xFD, 0x23, 0x15, 0x00, 0x69, 0xF8, 0x0F, 0x90, 0x2B, 0x13, 0xBF, 0x3C, 0x8A, 0x9B,
0xF7, 0xD6, 0x92, 0x8A, 0x42, 0xCE, 0xC9, 0xAD, 0x0D, 0xDE, 0xA8, 0x33, 0xCF, 0x64, 0xC0, 0x79,
0x8F, 0x4E, 0x28, 0xA8, 0xD2, 0xB9, 0x40, 0x68, 0xDD, 0x66, 0x9A, 0x3B, 0x41, 0x4B, 0xAD, 0x7C,
0xB3, 0x08, 0xFA, 0x10, 0xE2, 0x9C, 0x2D, 0xE1, 0x6F, 0x5B, 0xA2, 0x77, 0xDB, 0x71, 0x1E, 0x8F,
0xDF, 0x17, 0x9D, 0x27, 0xC4, 0x96, 0xCA, 0xF8, 0xD6, 0x89, 0xF8, 0x27, 0xF0, 0xA8, 0x3A, 0x22,
0x07, 0xB7, 0x9D, 0xD0, 0x36, 0x76, 0x80, 0x9C, 0xAF, 0x77, 0x94, 0x5B, 0x7F, 0x62, 0x76, 0x7C,
0x3E, 0x57, 0x25, 0x06, 0x51, 0x0C, 0xA0, 0x6E, 0xDD, 0xE5, 0x1F, 0xDC, 0xC3, 0xC7, 0x53, 0xE2,
0x0E, 0xEF, 0x0B, 0xDC, 0x9C, 0xFB, 0xF1, 0x1F, 0x70, 0xF3, 0x63, 0xB7, 0x04, 0xD6, 0x37, 0xCE,
0x8D, 0xCB, 0xC0, 0x40, 0x4B, 0xD2, 0x19, 0xD9, 0x65, 0x60, 0x27, 0x34, 0x89, 0x71, 0x49, 0x23,
0x46, 0x6E, 0x5E, 0xAD, 0x71, 0x32, 0x0A, 0x57, 0x65, 0xED, 0xB9, 0x25, 0xA2, 0xDB, 0x97, 0xA8,
0x77, 0x27, 0x96, 0x3C, 0x9A, 0x1C, 0x25, 0x3C, 0xEE, 0x58, 0x28, 0x29, 0xF3, 0x2C, 0x02, 0xF4,
0xE7, 0xC4, 0x4D, 0x65, 0x2C, 0x38, 0xA1, 0x2E, 0x42, 0x68, 0x8E, 0xE0, 0x4E, 0x2D, 0x20, 0x34,
0x6C, 0x6D, 0xC5, 0x44, 0x64, 0xE9, 0xB9, 0xD0, 0x03, 0x42, 0x8B, 0xBC, 0xAF, 0xAE, 0x0C, 0xE3,
0xB1, 0xBB, 0xF4, 0xE0, 0x2E, 0xD1, 0xDD, 0xFF, 0xAA, 0x4F, 0x3A, 0x9D, 0x94, 0x35, 0x35, 0xD5,
0x1C, 0xAD, 0x6A, 0x37, 0xA5, 0x63, 0xA6, 0x41, 0x9F, 0x32, 0xBF, 0x58, 0xCD, 0xEC, 0x40, 0x65,
0x7E, 0xA6, 0x24, 0x1B, 0xFF, 0xE1, 0xDB, 0x04, 0xCE, 0x9F, 0xDC, 0xCE, 0x4A, 0x72, 0x11, 0x2B,
0xE3, 0xBD, 0x59, 0xD9, 0xA4, 0xE1, 0xEE, 0x29, 0x8D, 0xD5, 0xED, 0x5A, 0x44, 0x58, 0x82, 0xFA,
0x85, 0x89, 0x54, 0x86, 0xC5, 0x6C, 0x9E, 0x88, 0x84, 0x37, 0x2A, 0x9A, 0x48, 0x7B, 0x6A, 0x21,
0x7D, 0xCB, 0x50, 0xE1, 0x19, 0x3E, 0xD9, 0xB4, 0xB5, 0xB1, 0x2E, 0x77, 0x97, 0x21, 0xE4, 0x32,
0xEC, 0xCA, 0xCE, 0xFE, 0x64, 0xEA, 0x4F, 0x5E, 0xD8, 0x89, 0x20, 0x6C, 0x4F, 0xFD, 0x82, 0x6A,
0x01, 0x1A, 0x8F, 0x21, 0x80, 0xEC, 0x16, 0x8D, 0x06, 0x7C, 0x24, 0x3A, 0xA2, 0x62, 0x74, 0x5F,
0x64, 0x47, 0xAB, 0x00, 0x7F, 0xA3, 0xE2, 0xA0, 0xB2, 0xF0, 0xAC, 0x6A, 0x45, 0x1D, 0xCC, 0xD5,
0x8E, 0x1D, 0x3F, 0x68, 0x05, 0x18, 0xBA, 0xD3, 0x56, 0xC8, 0xD6, 0x16, 0xB1, 0xAE, 0x94, 0xB5,
0xAC, 0xB6, 0xF6, 0x64, 0xD1, 0x9E, 0x4D, 0x39, 0xDD, 0xFD, 0x76, 0xD0, 0xFC, 0x97, 0x8D, 0x00,
0x75, 0x32, 0xC5, 0xE1, 0xB4, 0xAC, 0x09, 0x95, 0x6F, 0x0D, 0x7D, 0xE9, 0xE0, 0xCA, 0x20, 0x6A,
0xFA, 0xDB, 0x97, 0xC4, 0xCB, 0xA4, 0xC8, 0x3D, 0xB0, 0x33, 0xE1, 0x69, 0x4A, 0x91, 0x0E, 0xF9,
0xB1, 0x4B, 0xC5, 0xD8, 0x0A, 0xFA, 0x53, 0xCD, 0x6B, 0xAD, 0xD4, 0x4E, 0xCA, 0xB3, 0xE9, 0x50,
0x15, 0x44, 0x55, 0xE3, 0x31, 0xE7, 0x74, 0xDA, 0x65, 0xCD, 0x47, 0xB0, 0x77, 0xC9, 0x4B, 0xEC,
0xFF, 0x75, 0x47, 0x91, 0x28, 0xDD, 0xA3, 0x91, 0xC5, 0x52, 0x45, 0x63, 0x44, 0x89, 0xE2, 0x0D,
0x03, 0xFB, 0xCD, 0x71, 0x74, 0x9C, 0x3E, 0xA9, 0x1F, 0x06, 0x7F, 0xDD, 0xCA, 0x25, 0x15, 0xFA,
0x27, 0xD6, 0x2C, 0x2A, 0xB6, 0x63, 0xE5, 0x56, 0xCE, 0x97, 0xF4, 0x36, 0xF1, 0x36, 0xDA, 0x61,
0xEA, 0xA2, 0x43, 0x39, 0x10, 0x9C, 0xD9, 0x5C, 0x41, 0x6A, 0xAC, 0x4A, 0xB9, 0xD1, 0x68, 0xB0,
0x7B, 0xB6, 0x68, 0x5E, 0x29, 0x29, 0xC2, 0x02, 0x15, 0xC7, 0x41, 0x21, 0x4D, 0x85, 0xD9, 0xC4,
0xAC, 0x4B, 0x32, 0xAE, 0x4C, 0xBC, 0xD4, 0x12, 0xBB, 0x89, 0x7D, 0xC9, 0x5D, 0xA2, 0xF1, 0x90,
0x36, 0x8B, 0xEA, 0xA2, 0x63, 0xB1, 0x51, 0x25, 0x92, 0x6A, 0x5E, 0xEB, 0x21, 0xED, 0x62, 0xB2,
0x19, 0x6D, 0x28, 0x7E, 0xDE, 0x01, 0xA5, 0xB3, 0x71, 0xAB, 0xA0, 0xB4, 0xFE, 0xF1, 0x68, 0xDD,
0x8B, 0xCA, 0x9A, 0xD1, 0xA9, 0x3D, 0x04, 0xCD, 0xAE, 0xAC, 0xFF, 0x0B, 0xB7, 0xCD, 0xD2, 0x59,
0x6B, 0xD2, 0xBA, 0xAC, 0xFC, 0x60, 0xD6, 0x9F, 0xF6, 0x45, 0xAE, 0xDF, 0x76, 0xC8, 0x68, 0xE0,
0xB3, 0x3B, 0x82, 0x8C, 0x7F, 0x37, 0x11, 0x55, 0x8D, 0x50, 0x4D, 0x35, 0xC0, 0x08, 0x91, 0x33,
0x27, 0x52, 0xC6, 0xEA, 0x88, 0x8C, 0xB6, 0xA0, 0x20, 0xAF, 0x73, 0xCE, 0x99, 0x15, 0xEC, 0x90,
0x14, 0xD4, 0x6F, 0x45, 0x73, 0xAD, 0xE0, 0xF5, 0x94, 0xCC, 0x31, 0xFC, 0xE9, 0x99, 0x2B, 0x69,
0xD5, 0xCE, 0x57, 0x0E, 0x0A, 0x3F, 0x34, 0x53, 0xEE, 0xEB, 0xAA, 0x8F, 0x27, 0xD5, 0x4F, 0x9B,
0xDB, 0xB4, 0x3B, 0x2B, 0x12, 0x45, 0x32, 0x49, 0xBF, 0x1B, 0x30, 0xD3, 0x11, 0x7C, 0x74, 0x01,
0x32, 0xFA, 0xE6, 0xE8, 0x5B, 0x76, 0xAD, 0x37, 0xD9, 0x7B, 0xC6, 0xDE, 0x7D, 0x45, 0x91, 0xCF,
0x31, 0x4F, 0x90, 0x43, 0xCD, 0x5C, 0x76, 0xDF, 0x0A, 0x7D, 0x79, 0xFD, 0x57, 0xF8, 0x40, 0x77,
0x03, 0x56, 0xFF, 0xD9, 0x04, 0x5A, 0xE8, 0x72, 0x2D, 0x27, 0x24, 0xEB, 0x47, 0xEF, 0x91, 0x4A,
0xBF, 0x09, 0xAA, 0x8E, 0x82, 0xD1, 0xC0, 0x63, 0xB4, 0x00, 0xA7, 0x09, 0x8D, 0x86, 0x43, 0xD4,
0x7F, 0x7B, 0x04, 0x29, 0x06, 0xA4, 0x34, 0x7C, 0xE5, 0xDE, 0x03, 0x9E, 0xD3, 0x1F, 0x71, 0xB4,
0xF5, 0x48, 0xCF, 0x98, 0xA9, 0x2A, 0xAA, 0xB6, 0xA0, 0x83, 0x24, 0xE3, 0x37, 0x4E, 0xDF, 0xE5,
0x9E, 0x60, 0x36, 0xF5, 0x78, 0xB1, 0x55, 0x37, 0xC4, 0xD7, 0xD9, 0x18, 0xB2, 0x46, 0x40, 0x25,
0x31, 0x84, 0x13, 0x07, 0x76, 0xCB, 0xA4, 0xAF, 0xE8, 0x11, 0x85, 0x76, 0x8E, 0x46, 0x8D, 0x59,
0xB1, 0x0E, 0x04, 0xC0, 0x27, 0x82, 0xCD, 0x7E, 0xB3, 0x2A, 0xFF, 0x11, 0x11, 0x6B, 0xDC, 0x81,
0x53, 0x77, 0xCC, 0x75, 0x43, 0x88, 0xE8, 0xFD, 0x40, 0xD6, 0x65, 0x48, 0x79, 0x37, 0xAA, 0x1F,
0x8F, 0xBE, 0xCC, 0x5B, 0xEF, 0x9F, 0xF5, 0x9C, 0x1D, 0xE5, 0x39, 0x48, 0x1D, 0xB0, 0x17, 0xF4,
0x86, 0x05, 0xD0, 0xDC, 0xF7, 0x11, 0x47, 0x5A, 0xEB, 0xEF, 0xB3, 0x0B, 0xC2, 0xF0, 0xB2, 0x58,
0x2B, 0x6C, 0x0B, 0x5C, 0xD1, 0xF6, 0x6A, 0x65, 0x11, 0x09, 0x21, 0x2D, 0x00, 0xFF, 0xAF, 0x16,
0x5D, 0xD6, 0x71, 0x44, 0xAE, 0x81, 0x14, 0x2B, 0x53, 0x74, 0xF0, 0x33, 0xC7, 0x59, 0x1B, 0x9D,
0x34, 0x30, 0xB8, 0x6D, 0xA3, 0x28, 0x95, 0x85, 0xF0, 0x47, 0x76, 0x23, 0x1F, 0x51, 0x67, 0x0D,
0x2C, 0x82, 0x28, 0xA9, 0xA9, 0xD9, 0x3A, 0x77, 0x9A, 0x00, 0x3E, 0x97, 0x2B, 0xB1, 0x6C, 0x0C,
0x7C, 0xC0, 0xB6, 0x64, 0xE3, 0x16, 0x08, 0x62, 0xC1, 0x72, 0x4B, 0xDA, 0x07, 0x33, 0x0F, 0xC7,
0x20, 0xFC, 0xAE, 0x78, 0x16, 0xD0, 0xFE, 0xF2, 0xC4, 0x79, 0x06, 0x11, 0x51, 0x59, 0xC7, 0xEF,
0x61, 0xE4, 0xF3, 0xA1, 0x68, 0x93, 0x81, 0x35, 0x62, 0xAA, 0x7E, 0xD3, 0x69, 0xC3, 0x93, 0xB3,
0x48, 0xD1, 0xD6, 0xAE, 0x0D, 0x35, 0x4C, 0xBC, 0xB9, 0xFB, 0xF1, 0xD6, 0x30, 0xBD, 0xDD, 0x14,
0x34, 0x07, 0xAB, 0x9E, 0x63, 0x38, 0x47, 0x2C, 0x28, 0x16, 0x8E, 0x60, 0x95, 0xB0, 0x87, 0xB6,
0xC0, 0x1F, 0x89, 0x48, 0xBB, 0xAA, 0x8D, 0xBE, 0xE4, 0x28, 0xEA, 0xA2, 0x0F, 0x48, 0x5A, 0x1C,
0x6D, 0xC3, 0xD2, 0x51, 0x4B, 0x32, 0x12, 0x66, 0x26, 0x1B, 0xDD, 0xDB, 0xB1, 0x27, 0xF4, 0x4A,
0x03, 0x64, 0xCE, 0x5A, 0x60, 0x84, 0xC7, 0xF8, 0xD4, 0x09, 0x64, 0x7D, 0xD5, 0xED, 0xBB, 0x67,
0xDC, 0x43, 0xDF, 0x00, 0x1D, 0x31, 0xF1, 0x9A, 0x87, 0x0C, 0xF2, 0xA1, 0xE8, 0xE4, 0xBC, 0x69,
0x7D, 0x21, 0x4C, 0x8B, 0x95, 0x8F, 0x67, 0xEB, 0xBC, 0x6A, 0xAA, 0xAB, 0x85, 0x39, 0x42, 0x15,
0x8E, 0xDB, 0x53, 0x17, 0x21, 0x73, 0x2E, 0x95, 0xC1, 0xFD, 0xA5, 0x8D, 0x78, 0xDD, 0x9A, 0xAF,
0x24, 0x80, 0xF8, 0x8A, 0x15, 0x59, 0x63, 0x45, 0x3B, 0x97, 0xD9, 0x69, 0xE4, 0x71, 0x46, 0xFB,
0x86, 0xB6, 0x90, 0xF3, 0x11, 0x16, 0x16, 0xEF, 0x86, 0x1F, 0x1F, 0x9D, 0x13, 0xDF, 0x35, 0x28,
0x3F, 0x5B, 0x0E, 0xF7, 0xB2, 0x80, 0xAB, 0x68, 0x37, 0x44, 0x10, 0x7C, 0xA1, 0x85, 0x57, 0x14,
0xCF, 0xC5, 0xC3, 0xD8, 0x54, 0xA9, 0x6F, 0x9B, 0x61, 0x77, 0xBE, 0x18, 0xD7, 0xDB, 0xF0, 0x17,
0x27, 0x6F, 0x35, 0x11, 0xC3, 0x4C, 0x78, 0x5E, 0xB3, 0x8F, 0xD2, 0xA6, 0x4A, 0x2C, 0xBE, 0x1B,
0x06, 0x3A, 0x9B, 0x98, 0x1C, 0x84, 0x23, 0x6D, 0x68, 0x31, 0x17, 0xFA, 0x8D, 0xC6, 0xA7, 0x82,
0x79, 0xDF, 0x35, 0x15, 0x47, 0x92, 0x12, 0x7F, 0xDA, 0x98, 0xE3, 0xEA, 0xE0, 0x95, 0x03, 0x75,
0x2B, 0x95, 0x07, 0xDD, 0x41, 0x75, 0xB7, 0x69, 0xEE, 0xFF, 0xBD, 0x0F, 0x35, 0x04, 0x05, 0x41,
0x3F, 0x1F, 0x41, 0x3D, 0x77, 0x69, 0x27, 0x78, 0xBB, 0xE5, 0x6C, 0x13, 0x37, 0xD0, 0x80, 0x5B,
0xAB, 0x22, 0x05, 0x3B, 0xC4, 0x9A, 0x08, 0x97, 0xD7, 0xD9, 0x64, 0x27, 0xAD, 0x0D, 0xB1, 0x00,
0x7B, 0x20, 0x8D, 0x95, 0xC9, 0x57, 0x03, 0x87, 0x3B, 0xB8, 0x89, 0x8D, 0x4A, 0x3E, 0xAC, 0xF1,
0xFB, 0x3F, 0x85, 0x31, 0x02, 0x26, 0x87, 0xEB, 0x64, 0x5D, 0x49, 0x06, 0x28, 0xC7, 0x8E, 0x4C,
0xF6, 0x3A, 0xC8, 0xEF, 0x8A, 0x5D, 0x39, 0x07, 0xD7, 0x7E, 0x6C, 0x3A, 0x42, 0x70, 0xFC, 0xBA,
0x63, 0x03, 0x17, 0x90, 0xA7, 0xEA, 0x0B, 0x58, 0x1D, 0x42, 0x56, 0xFA, 0x19, 0xCF, 0x67, 0x90,
0xCD, 0x13, 0xD6, 0xD2, 0x27, 0xF4, 0xFC, 0x5F, 0x82, 0x96, 0x19, 0xC4, 0xA0, 0xFA, 0x07, 0x3E,
0xC7, 0x93, 0x82, 0x58, 0xB0, 0xAF, 0x4A, 0xD8, 0xF1, 0x82, 0x6A, 0x22, 0xA3, 0x45, 0x34, 0x04,
0x30, 0x36, 0x6F, 0xAA, 0xFC, 0x56, 0x8C, 0xCF, 0x68, 0x08, 0x03, 0x11, 0xF2, 0x3D, 0xD6, 0xD9,
0x4A, 0x70, 0x4F, 0xED, 0xDD, 0xA3, 0x59, 0x72, 0xB9, 0x43, 0x3C, 0xF3, 0x73, 0xEC, 0xFB, 0xEF,
0x9D, 0x28, 0x60, 0xBC, 0xD6, 0x37, 0x2E, 0xF9, 0x45, 0x07, 0x13, 0xF9, 0xAA, 0x03, 0xC8, 0xF0,
0xAC, 0xFA, 0x2B, 0xDA, 0x2B, 0x80, 0x66, 0xC5, 0x10, 0x85, 0x77, 0xD4, 0xAB, 0x5E, 0x9D, 0xAC,
0x4A, 0xE6, 0xA4, 0x16, 0x2E, 0x81, 0x2B, 0xC8, 0xEB, 0xFE, 0x13, 0x49, 0xEC, 0x33, 0x50, 0x1B,
0xF8, 0x09, 0x72, 0xAB, 0x08, 0xB7, 0x84, 0x56, 0x08, 0xAC, 0x92, 0x5D, 0x9B, 0x3E, 0x1D, 0x37,
0xE8, 0x12, 0x9C, 0x36, 0xED, 0x35, 0x3D, 0xF2, 0xF0, 0x6D, 0xBE, 0x53, 0x12, 0xB6, 0x12, 0x9C,
0x4E, 0x0E, 0x51, 0xB6, 0xCD, 0x3B, 0xB7, 0xC6, 0x6C, 0x42, 0xE0, 0x33, 0x9E, 0xDF, 0x0A, 0xF8,
0x9C, 0x85, 0x07, 0x47, 0x69, 0x29, 0xB2, 0x05, 0x22, 0xCB, 0xDE, 0xA3, 0xF9, 0x56, 0xD6, 0x83,
0x4A, 0x87, 0xA2, 0x8E, 0x24, 0xA9, 0x32, 0xA3, 0xDF, 0x54, 0x67, 0x92, 0x72, 0xA7, 0x0D, 0x52,
0x1D, 0x4E, 0xAF, 0x1B, 0x31, 0xAC, 0x76, 0x04, 0xA3, 0x0E, 0x2E, 0x44, 0x51, 0x3C, 0xFE, 0xA9,
0x60, 0xB5, 0x05, 0x62, 0x7E, 0x3A, 0x45, 0x33, 0xFB, 0x3B, 0x9C, 0xED, 0xF1, 0x3C, 0x4F, 0x97,
0xFA, 0x68, 0x8F, 0x1F, 0x73, 0x1E, 0x0E, 0xC6, 0x91, 0xFE, 0x82, 0x96, 0xCB, 0xB1, 0x5E, 0x10,
0xA5, 0x86, 0x91, 0xA7, 0xDB, 0xB5, 0x88, 0xFE, 0x63, 0xC0, 0x4E, 0x7E, 0x4C, 0xB0, 0x9E, 0x9C,
0x15, 0xFF, 0xB4, 0x39, 0x01, 0x27, 0x36, 0xE3, 0x89, 0x9B, 0xA2, 0x81, 0x47, 0xF2, 0xAC, 0xC6,
0x51, 0x03, 0x22, 0xF7, 0x76, 0xDF, 0x18, 0x3D, 0xB4, 0xA4, 0xC8, 0xFF, 0x33, 0x72, 0xB5, 0xFF,
0x51, 0xED, 0x66, 0x58, 0x72, 0xD4, 0xB1, 0x81, 0xE5, 0xFE, 0xDE, 0x5D, 0x1C, 0xE5, 0x78, 0x68,
0xC1, 0xDA, 0x05, 0x94, 0x20, 0x83, 0x7B, 0x36, 0x96, 0x56, 0xC6, 0x4E, 0xCE, 0x30, 0xA4, 0x03,
0x37, 0x7D, 0x97, 0xBA, 0xA2, 0xB3, 0x4E, 0xA4, 0xE5, 0x43, 0xFC, 0x57, 0x11, 0x10, 0xCE, 0xD0,
0x23, 0xB2, 0x21, 0x88, 0x61, 0x74, 0x1A, 0xA4, 0xAD, 0x98, 0xD8, 0x21, 0xB6, 0xC2, 0x49, 0xA1,
0x8E, 0x10, 0x49, 0x83, 0xB2, 0x45, 0xD7, 0x58, 0xDC, 0xBD, 0x17, 0x42, 0x0A, 0x6C, 0xA6, 0x5D,
0x03, 0xA6, 0xBD, 0x8C, 0x06, 0x00, 0xA5, 0xA8, 0x37, 0x66, 0xB5, 0x5B, 0x3A, 0xD0, 0x93, 0x7E,
0x42, 0xA9, 0xF0, 0x7B, 0x23, 0x23, 0xCD, 0xE6, 0x1D, 0x0A, 0x2B, 0xA6, 0x58, 0x78, 0x82, 0xD1,
0xD2, 0x6E, 0x80, 0xFC, 0x59, 0xB2, 0xDB, 0x89, 0x4B, 0xBD, 0x19, 0x0E, 0xD3, 0xBC, 0xCA, 0x78,
0x0E, 0x22, 0xB0, 0x8B, 0x19, 0x0E, 0xF7, 0x1A, 0x35, 0x3F, 0xED, 0x67, 0xFD, 0xA1, 0x8F, 0x80,
0xDC, 0xEF, 0xEB, 0xFB, 0x39, 0x47, 0x5B, 0x67, 0x80, 0xC2, 0x6B, 0x09, 0xAA, 0xAA, 0x1A, 0x62,
0x61, 0x94, 0x2C, 0x6A, 0x9E, 0x40, 0x55, 0x2E, 0xAF, 0xD8, 0xBC, 0x38, 0x86, 0xB5, 0xAF, 0x11,
0xBF, 0x97, 0xB1, 0xA4, 0x2D, 0xBF, 0x9E, 0x74, 0x55, 0xC0, 0x09, 0xFE, 0xC1, 0xC3, 0x53, 0xCE,
0x2F, 0x7A, 0x9D, 0x27, 0xAD, 0x1A, 0x7A, 0x24, 0x0B, 0x5B, 0x9B, 0xF7, 0x40, 0x5F, 0x02, 0xFA,
0xEB, 0xD0, 0xDF, 0x79, 0x7C, 0xB9, 0xE7, 0xB6, 0x99, 0xE2, 0xED, 0xFC, 0xB7, 0xA9, 0x77, 0xEE,
0x69, 0x23, 0x10, 0x56, 0xAF, 0xBE, 0x7A, 0x97, 0xA4, 0xF7, 0xA0, 0x9E, 0x93, 0x14, 0x8C, 0x16,
0xCF, 0xFD, 0x3B, 0x7B, 0x43, 0x36, 0x8D, 0xDE, 0x30, 0x38, 0x03, 0xFD, 0x2C, 0x0A, 0x08, 0x6A,
0x13, 0xB4, 0xF0, 0xA8, 0x64, 0x8B, 0x17, 0xFA, 0x42, 0x55, 0xD6, 0x5A, 0x55, 0xDB, 0xD4, 0xB4,
0xBF, 0x1E, 0xF7, 0x1E, 0x8C, 0x0F, 0x14, 0xE5, 0xC1, 0x95, 0x14, 0xD6, 0x9B, 0xBD, 0xF8, 0xBC,
0xF7, 0xA8, 0x1C, 0xAA, 0x15, 0xCC, 0x27, 0xE7, 0xEB, 0x0A, 0xAB, 0xBA, 0xAA, 0xD3, 0xD1, 0x11,
0xEB, 0x42, 0xB7, 0xBB, 0xE3, 0x3E, 0x9B, 0x60, 0xAD, 0xBF, 0x7D, 0x3A, 0xD5, 0x5A, 0xC8, 0x75,
0x0C, 0xA9, 0x83, 0xD3, 0x5F, 0xB1, 0xAD, 0xF2, 0x2E, 0x13, 0x03, 0xF3, 0x40, 0xD2, 0x21, 0x49,
0x03, 0xC6, 0xF5, 0xDF, 0x22, 0x9D, 0x87, 0x1C, 0x71, 0xA9, 0x6A, 0xE6, 0xB0, 0xBE, 0xA2, 0x43,
0xF0, 0x7B, 0x56, 0xE3, 0x3D, 0x4A, 0x8E, 0x00, 0x06, 0x91, 0xFF, 0xC4, 0xB3, 0x3D, 0xF4, 0x96,
0x3A, 0x61, 0xC2, 0xD5, 0x39, 0x5B, 0x2B, 0x09, 0x0F, 0x3C, 0x23, 0x7D, 0x63, 0x4E, 0x5F, 0x48,
0x68, 0xD4, 0x39, 0xD8, 0x88, 0xAD, 0xF8, 0x4A, 0x41, 0x62, 0x73, 0x12, 0x9B, 0xB2, 0xA7, 0x90,
0x1E, 0x07, 0x69, 0x97, 0xFE, 0xF4, 0xF9, 0x9B, 0x53, 0xF6, 0xDE, 0xCF, 0x3B, 0xEF, 0xDF, 0xF5,
0x7D, 0x46, 0x60, 0xCF, 0x39, 0xF8, 0xF3, 0xC1, 0x2D, 0x3B, 0xF7, 0x25, 0x29, 0xEB, 0xAC, 0x9C,
0x1F, 0xE1, 0xE9, 0xCE, 0xFA, 0xC3, 0x8F, 0x5F, 0x48, 0xF2, 0xDE, 0xA4, 0xBD, 0x57, 0x0E, 0x10,
0x01, 0x11, 0xD0, 0xAE, 0x9B, 0x2D, 0x8F, 0x6B, 0x7E, 0x59, 0x87, 0x93, 0x90, 0x23, 0xDB, 0x74,
0x9D, 0xA6, 0x9F, 0x75, 0x4D, 0xFA, 0x58, 0x43, 0xC7, 0xA9, 0xB0, 0x5F, 0xAA, 0x6E, 0x82, 0x0D,
0x72, 0xEF, 0xEB, 0xCA, 0xA6, 0x00, 0x32, 0x1B, 0xAF, 0x5F, 0xA8, 0xCC, 0xFE, 0xAA, 0x3D, 0x9D,
0xF1, 0x8D, 0xD6, 0xB3, 0xE3, 0xC5, 0xED, 0xAB, 0x70, 0xED, 0x6E, 0x94, 0xDD, 0xFA, 0x26, 0x7F,
0x69, 0x07, 0xCF, 0x36, 0xAC, 0xB5, 0x9C, 0x9D, 0xCC, 0x39, 0xF7, 0xB6, 0x4E, 0x1C, 0xF4, 0x86,
0xBF, 0x6B, 0x54, 0x49, 0xF6, 0x1E, 0x4E, 0x67, 0x8C, 0x17, 0xA7, 0x2B, 0x82, 0xD4, 0xC7, 0x78,
0x90, 0xF2, 0x1C, 0x71, 0xF0, 0x5C, 0x20, 0xDE, 0x45, 0x1F, 0x03, 0xBA, 0xBB, 0xEC, 0x9F, 0x28,
0xB4, 0x93, 0x21, 0x60, 0x57, 0x48, 0x43, 0xDA, 0xEA, 0xDD, 0xF2, 0x10, 0xD9, 0x29, 0x26, 0xAB,
0xA5, 0xA4, 0xA6, 0x9E, 0xBE, 0x5F, 0x12, 0x4A, 0x79, 0xFA, 0x3A, 0x11, 0x73, 0xF3, 0xB1, 0x20,
0xD6, 0xC2, 0x66, 0x8D, 0xBE, 0x77, 0xC8, 0xE3, 0x04, 0x92, 0xC0, 0x0E, 0xC9, 0x05, 0x24, 0x6C,
0xD3, 0xDC, 0xBB, 0x9E, 0x56, 0xB2, 0xBE, 0xB4, 0x8D, 0x44, 0x9C, 0x0D, 0x29, 0x44, 0xFA, 0x1E,
0x80, 0xCC, 0xCC, 0x65, 0x43, 0xA1, 0xA3, 0x72, 0xA5, 0xDB, 0x3A, 0x2B, 0xEF, 0x79, 0x52, 0x75,
0x5F, 0x29, 0xF1, 0xF7, 0xE5, 0x5C, 0x3B, 0x8C, 0xE5, 0xD6, 0x79, 0x3E, 0x24, 0x57, 0xC3, 0x58,
0x8C, 0xCD, 0x2D, 0x1C, 0xC4, 0xD6, 0xCA, 0xA2, 0x03, 0xB8, 0x50, 0x1C, 0xC9, 0x4C, 0xE1, 0xC2,
0xC5, 0xEE, 0x92, 0x92, 0x80, 0xB8, 0x50, 0x21, 0xF5, 0x29, 0xEC, 0x22, 0x4D, 0xEC, 0x62, 0x52,
0xA4, 0x48, 0xA1, 0x19, 0x52, 0x16, 0x10, 0x15, 0x2E, 0x3C, 0x08, 0x0C, 0xA4, 0x8C, 0x0A, 0x35,
0x96, 0x0A, 0xA9, 0x70, 0xA1, 0x00, 0x3B, 0x43, 0xAE, 0xB7, 0x50, 0x29, 0xDA, 0x2A, 0x52, 0xA4,
0x10, 0xED, 0x2C, 0x10, 0xC4, 0x01, 0x22, 0xCA, 0x62, 0x2C, 0x8E, 0x44, 0xF2, 0xE4, 0xFF, 0xBE,
0xFF, 0x90, 0xF7, 0xCE, 0xCC, 0xDD, 0xB5, 0x64, 0xE8, 0x81, 0x75, 0x2E, 0x34, 0xF7, 0xAE, 0xEE,
0xE3, 0xF0, 0xFC, 0xDF, 0xFF, 0x7E, 0x1C, 0x1A, 0x63, 0x12, 0x3B, 0x1B, 0x79, 0x64, 0xD6, 0xE6,
0xF2, 0x92, 0x5A, 0x6B, 0x7E, 0xD7, 0xE3, 0x8A, 0xBE, 0x54, 0x7C, 0xF6, 0xF8, 0x33, 0x13, 0xD8,
0x12, 0x2F, 0xA1, 0xBE, 0xC4, 0x6F, 0xD5, 0x78, 0x49, 0x13, 0xBE, 0x5C, 0x8F, 0x1B, 0xBC, 0xDC,
0xD0, 0x97, 0x21, 0x6E, 0xF1, 0xFD, 0x2E, 0xEA, 0xF0, 0xFD, 0x96, 0x2F, 0x71, 0x1D, 0xE2, 0x25,
0x29, 0x83, 0x1E, 0x5B, 0x31, 0xC1, 0x20, 0x2F, 0xC7, 0x26, 0x18, 0xE5, 0xC5, 0x5A, 0x2B, 0x2F,
0xBE, 0xBE, 0x84, 0xEF, 0xBF, 0xF4, 0xD2, 0x24, 0xDF, 0x6F, 0x8C, 0x27, 0xBB, 0xC6, 0xF2, 0x33,
0xBE, 0x2F, 0xDF, 0x32, 0xE6, 0x44, 0x5F, 0xF0, 0x9B, 0x2A, 0x0F, 0x26, 0xBC, 0x34, 0x85, 0x6D,
0x85, 0xA4, 0xC9, 0xCA, 0x4B, 0x26, 0xBF, 0xF7, 0xF0, 0x0F, 0x59, 0xAA, 0xC7, 0x53, 0x77, 0x17,
0x12, 0x8B, 0xE6, 0x86, 0xD0, 0xF2, 0xFE, 0x20, 0xE8, 0xC8, 0x97, 0x8B, 0xB2, 0xE8, 0xE4, 0x7A,
0x49, 0x2B, 0xFB, 0x8A, 0x1B, 0xD9, 0x6A, 0x5C, 0x0B, 0x11, 0x49, 0x2D, 0xD7, 0x4F, 0xCB, 0xB4,
0x34, 0x59, 0x9E, 0xE5, 0xA6, 0xC0, 0x3E, 0xAC, 0xBC, 0xC8, 0x37, 0x0B, 0x13, 0xE0, 0x29, 0x3E,
0x36, 0x45, 0xFE, 0x8D, 0x83, 0xB8, 0xA8, 0xC7, 0x83, 0xEB, 0x99, 0xED, 0xAA, 0x21, 0xB5, 0x65,
0xD1, 0x86, 0x83, 0x49, 0xF3, 0xCD, 0xB5, 0xEE, 0x37, 0x06, 0xA0, 0xA5, 0x26, 0xE0, 0x4B, 0xCD,
0xCF, 0x1C, 0x57, 0x22, 0x3B, 0x28, 0xC8, 0xE5, 0x1F, 0x22, 0x3B, 0xF4, 0xF1, 0xAA, 0xF9, 0x63,
0xE3, 0xF5, 0xE6, 0x1F, 0x8C, 0x37, 0xF9, 0x3D, 0x2E, 0x20, 0xFB, 0x2A, 0x40, 0xC6, 0xDE, 0x8B,
0x9F, 0x29, 0x77, 0xEE, 0x6D, 0x5C, 0x13, 0x95, 0xB0, 0x1B, 0x7C, 0xF6, 0x55, 0xD6, 0x83, 0xB3,
0x2F, 0xAA, 0x01, 0xBE, 0x53, 0x84, 0xA2, 0xFC, 0x14, 0x80, 0x05, 0x6C, 0xDF, 0xC0, 0xD5, 0x9E,
0xC1, 0x13, 0x50, 0xF0, 0xF0, 0xE4, 0x0F, 0x84, 0x18, 0xFF, 0xAC, 0x00, 0xDB, 0x7D, 0x0A, 0x3D,
0x49, 0x88, 0xF0, 0xEC, 0xA9, 0x8D, 0x1A, 0xA8, 0x12, 0x40, 0x9B, 0xDF, 0x0D, 0xA9, 0x1C, 0x97,
0xCE, 0x8B, 0xC7, 0x5F, 0xD8, 0x23, 0xC1, 0xCE, 0xDA, 0x89, 0x70, 0xF6, 0x26, 0xEB, 0xCD, 0x7E,
0x03, 0xA4, 0x32, 0x93, 0x0A, 0x6F, 0x46, 0x4F, 0xFE, 0x19, 0xB4, 0xE0, 0x4F, 0x4C, 0xEE, 0x5E,
0x26, 0x1F, 0x8C, 0x72, 0x91, 0xEC, 0xD6, 0x37, 0xC8, 0x41, 0x21, 0x05, 0xD7, 0x9F, 0xC8, 0xF6,
0x9E, 0xDF, 0x6B, 0x17, 0xB8, 0xC8, 0x08, 0xF9, 0x36, 0x3F, 0x8C, 0x04, 0x77, 0xAF, 0x8E, 0x07,
0x68, 0x72, 0x32, 0x99, 0x68, 0x80, 0x2D, 0x15, 0xA9, 0x49, 0xC0, 0x15, 0xB3, 0x67, 0x6F, 0xAF,
0xFB, 0x0B, 0x4B, 0xE5, 0x01, 0xF8, 0xEE, 0x4F, 0x6E, 0xF1, 0x89, 0xA2, 0x60, 0xCC, 0x83, 0xE7,
0xA9, 0xA9, 0x60, 0xB1, 0x66, 0xE1, 0x96, 0x2D, 0x83, 0xC1, 0xAF, 0xA1, 0x22, 0xDE, 0xE8, 0x7E,
0x50, 0x40, 0xFA, 0x4A, 0x0A, 0x8A, 0x09, 0x96, 0x0F, 0x0A, 0x47, 0x8B, 0xEC, 0xD6, 0x13, 0xB9,
0x09, 0xCB, 0xAC, 0x49, 0x9A, 0x10, 0x6A, 0x55, 0x89, 0xD8, 0x86, 0xB3, 0x2E, 0xFB, 0x02, 0x29,
0x24, 0xEB, 0x29, 0x00, 0x31, 0x9F, 0x67, 0x10, 0x97, 0xB4, 0xF8, 0xF9, 0x64, 0x12, 0x59, 0x30,
0x37, 0x97, 0xEF, 0x29, 0x70, 0xFD, 0xD1, 0x59, 0x4B, 0x90, 0x33, 0x09, 0xAD, 0xC7, 0x72, 0xE5,
0x13, 0xC1, 0xE6, 0xD0, 0x5C, 0x13, 0xC9, 0xBB, 0xFF, 0x53, 0x01, 0x57, 0xD5, 0x2D, 0x6B, 0x57,
0xCB, 0x1D, 0x52, 0x27, 0xD5, 0x30, 0xEC, 0x7E, 0xDC, 0x0F, 0x12, 0x02, 0xD2, 0x54, 0x01, 0xDC,
0x78, 0x32, 0x57, 0x7A, 0x23, 0xFF, 0x17, 0xD7, 0x51, 0x0F, 0x70, 0x81, 0xD4, 0x00, 0xE8, 0x82,
0x3A, 0xAD, 0x21, 0xF4, 0xBC, 0x14, 0xED, 0x89, 0x49, 0x09, 0xEE, 0xBC, 0x01, 0x37, 0x69, 0xCE,
0x83, 0x3B, 0x6C, 0xC0, 0xCD, 0xF8, 0x6D, 0xDA, 0x33, 0x1F, 0x10, 0xFF, 0x9D, 0x28, 0xAD, 0x89,
0xEA, 0xD0, 0xE6, 0xFE, 0x2C, 0xDA, 0x05, 0x5A, 0x84, 0x20, 0xF9, 0x81, 0x57, 0x9D, 0x12, 0x7B,
0x59, 0xAC, 0xAA, 0xA1, 0xDA, 0x26, 0x96, 0xAD, 0x6C, 0xBB, 0x2E, 0x87, 0xB9, 0xD0, 0x28, 0xD4,
0xC7, 0x02, 0xE4, 0x6C, 0x5E, 0xC5, 0xD7, 0x0B, 0x45, 0x0C, 0x40, 0x9D, 0xE8, 0x3F, 0x63, 0x7D,
0x17, 0x18, 0x62, 0xCF, 0xB2, 0xC1, 0x4B, 0x59, 0xE9, 0xB5, 0x36, 0x2F, 0x1E, 0x13, 0x29, 0x02,
0x0F, 0x14, 0x29, 0xCF, 0x40, 0xE0, 0xA2, 0x1A, 0x5F, 0x8C, 0x5B, 0xC8, 0x44, 0xD8, 0x83, 0x9A,
0x60, 0x2C, 0xB8, 0x6B, 0x02, 0x59, 0x28, 0xD5, 0x24, 0x72, 0xEF, 0xFC, 0x76, 0x7C, 0xEE, 0x3A,
0x73, 0x4E, 0x5E, 0x9E, 0x15, 0xCA, 0xAC, 0x81, 0xCE, 0x55, 0xB9, 0x3C, 0xAB, 0x88, 0x2A, 0x96,
0xB0, 0xCB, 0x9E, 0x13, 0x46, 0x95, 0x51, 0x05, 0x33, 0x2B, 0x37, 0xCF, 0xC4, 0xF1, 0xEC, 0x73,
0xB9, 0x79, 0x56, 0x38, 0x33, 0x6E, 0x26, 0x95, 0xD5, 0x42, 0xA3, 0x62, 0xAA, 0x78, 0xEA, 0x16,
0xC4, 0x9F, 0x81, 0xBA, 0x55, 0x4E, 0x73, 0xF1, 0x76, 0x87, 0x42, 0xA5, 0x5C, 0xF1, 0x50, 0xE0,
0x08, 0xBA, 0x11, 0x91, 0x17, 0xE8, 0x6B, 0x1C, 0xAF, 0xBE, 0x6C, 0x76, 0xD8, 0x01, 0xCA, 0x58,
0x26, 0xAC, 0x89, 0xDB, 0xC8, 0x40, 0x56, 0x29, 0x8E, 0x80, 0x96, 0xB2, 0x09, 0x61, 0x55, 0xCF,
0x92, 0x3B, 0xC9, 0x28, 0x16, 0x11, 0x91, 0x6D, 0x43, 0x11, 0x1F, 0x32, 0x10, 0x57, 0x0F, 0x5B,
0x62, 0x64, 0x91, 0x0C, 0xDB, 0xC0, 0xD5, 0xE6, 0x80, 0xDE, 0x89, 0xBE, 0x2A, 0xCB, 0xA9, 0xAC,
0xD5, 0x53, 0x6A, 0x22, 0x54, 0xB0, 0x2D, 0x71, 0x52, 0x63, 0x6C, 0xBC, 0xA3, 0x0B, 0x7B, 0xDC,
0xB7, 0xEF, 0xE7, 0x8C, 0x21, 0xE5, 0x8B, 0x72, 0x15, 0xC4, 0x58, 0xFE, 0x93, 0x9D, 0x07, 0x5D,
0x14, 0x28, 0xC1, 0xB6, 0x89, 0x7A, 0x01, 0xBE, 0x16, 0x35, 0xA1, 0x86, 0xC0, 0xCB, 0xB5, 0x67,
0x4A, 0x6E, 0x38, 0x90, 0x1A, 0x91, 0xD3, 0x82, 0xE8, 0x53, 0x9B, 0x45, 0x28, 0x3B, 0x2A, 0x1C,
0xB8, 0x21, 0x4C, 0x9F, 0x68, 0x1A, 0x42, 0x35, 0xA0, 0x58, 0x42, 0xDE, 0x23, 0x76, 0x5C, 0x42,
0xB4, 0x85, 0xB2, 0x56, 0x63, 0x09, 0xD1, 0x3B, 0x2C, 0x21, 0xD2, 0x2B, 0x96, 0x2E, 0x95, 0xF8,
0xAF, 0xA2, 0x86, 0x15, 0x14, 0x72, 0xB0, 0x66, 0x43, 0xC2, 0xD3, 0xEA, 0x13, 0x5B, 0xB3, 0x91,
0x04, 0xBA, 0xDA, 0x3D, 0x4B, 0x77, 0x69, 0xC7, 0xB8, 0xA6, 0xCB, 0xBC, 0xC6, 0xCF, 0x6F, 0x12,
0x95, 0x93, 0xA8, 0xA4, 0xCA, 0x3D, 0xB8, 0xA5, 0xDD, 0x99, 0x62, 0xA3, 0x4E, 0x38, 0xC2, 0x72,
0xE1, 0x29, 0xF8, 0x21, 0x10, 0x8E, 0x8C, 0xEB, 0xD4, 0xCE, 0x52, 0xDA, 0xE3, 0x96, 0xDA, 0x79,
0x42, 0xAE, 0xD1, 0xBF, 0x2A, 0x4E, 0x06, 0xEE, 0x1D, 0x3E, 0x51, 0x7E, 0x8F, 0x65, 0xE9, 0x66,
0xF1, 0x5E, 0xA0, 0xEA, 0x43, 0x23, 0x5D, 0x1B, 0x2C, 0x41, 0x6F, 0x0B, 0x25, 0xFF, 0xD7, 0xFE,
0xAA, 0x90, 0x1B, 0xBF, 0xFE, 0xA6, 0xFC, 0xC4, 0x8E, 0xE9, 0x0C, 0x36, 0x88, 0xD3, 0x25, 0x98,
0xC7, 0xDC, 0x52, 0x65, 0xFF, 0x0B, 0x0C, 0xB5, 0x10, 0xC5, 0x10, 0xCC, 0xA9, 0xCD, 0x7D, 0xA9,
0xA8, 0x3D, 0xA3, 0x0B, 0x4F, 0x5E, 0xB0, 0x0B, 0xF9, 0x4C, 0x56, 0xF6, 0x2C, 0x6D, 0xB5, 0xD8,
0x5E, 0x5C, 0x31, 0x1A, 0xA8, 0x20, 0xB2, 0x10, 0x08, 0x29, 0x4A, 0x12, 0x37, 0x63, 0x09, 0x61,
0x58, 0x86, 0x80, 0x25, 0x69, 0xC8, 0x6B, 0x89, 0x47, 0x7A, 0x72, 0x05, 0xF8, 0x09, 0xE2, 0x95,
0xC6, 0x28, 0x23, 0xDF, 0xC3, 0x12, 0xC2, 0x29, 0x59, 0x42, 0x56, 0xC7, 0x12, 0x49, 0x07, 0xC6,
0xC2, 0x04, 0x89, 0x0A, 0x55, 0x9D, 0x20, 0x0D, 0xC3, 0x47, 0xB1, 0xC9, 0x61, 0x87, 0x66, 0xA7,
0xD9, 0x7B, 0x76, 0xD5, 0x7C, 0x17, 0xB2, 0x9C, 0x77, 0x26, 0x19, 0x93, 0x16, 0x46, 0x4E, 0x0E,
0x79, 0x00, 0xBF, 0xF7, 0x22, 0xB6, 0x6B, 0xA7, 0x71, 0x41, 0xDD, 0x3E, 0x2E, 0xD4, 0xC5, 0xAD,
0xC8, 0x9A, 0x42, 0xAE, 0x88, 0x2B, 0xE0, 0xC4, 0x5B, 0xE1, 0x56, 0xB4, 0x09, 0xB6, 0x62, 0xAD,
0x50, 0x13, 0x69, 0x01, 0xFA, 0xB4, 0xBF, 0xAA, 0x38, 0x2B, 0xCC, 0x8A, 0xF2, 0x0A, 0x32, 0xFD,
0x11, 0x33, 0x8C, 0xBB, 0xA7, 0x18, 0x09, 0x89, 0x4D, 0x57, 0x92, 0x47, 0xBA, 0xBB, 0x1B, 0xB4,
0xE2, 0x37, 0xA8, 0x26, 0x3F, 0x25, 0x29, 0xAF, 0x52, 0x80, 0x35, 0x56, 0x58, 0xAC, 0x3B, 0x75,
0xDC, 0x99, 0xFE, 0x88, 0x96, 0x3A, 0x5E, 0x9E, 0xBB, 0x45, 0x0E, 0xD5, 0x03, 0x38, 0x5B, 0xB6,
0x58, 0x34, 0x8F, 0xA2, 0x14, 0x91, 0xBE, 0x98, 0x7A, 0x97, 0xF2, 0xB2, 0x19, 0xB1, 0x9F, 0xA9,
0x17, 0x23, 0x25, 0x64, 0xE4, 0xCA, 0x25, 0x31, 0x8D, 0xED, 0x9D, 0xB3, 0x0F, 0x08, 0x58, 0x21,
0xA2, 0x23, 0xC1, 0xA7, 0x30, 0x33, 0x6E, 0x64, 0xB3, 0x93, 0x2C, 0x17, 0x37, 0x22, 0xDA, 0xA3,
0x60, 0x58, 0x20, 0x52, 0x6C, 0x82, 0x5E, 0x78, 0x9D, 0xED, 0x0F, 0x22, 0x76, 0xBD, 0xFE, 0x66,
0xB1, 0x4E, 0x97, 0x45, 0xAD, 0x63, 0xD9, 0x60, 0xD4, 0xF9, 0x7A, 0x29, 0x21, 0x3C, 0x39, 0xDD,
0xBA, 0xC0, 0x0B, 0xE6, 0x8F, 0xE8, 0x4F, 0xBF, 0x05, 0xD7, 0x4E, 0xF7, 0x4C, 0x84, 0x69, 0x09,
0xCF, 0xD9, 0xAF, 0x7B, 0x08, 0x5B, 0x3E, 0xFE, 0xDE, 0x7C, 0x4E, 0xE4, 0x4F, 0xAC, 0xAE, 0x95,
0xCD, 0x44, 0x10, 0xE1, 0x0C, 0x44, 0x7D, 0x6F, 0x27, 0xD8, 0x88, 0x2C, 0x42, 0xF9, 0xA9, 0xCF,
0x50, 0x43, 0x68, 0x48, 0xEB, 0xB8, 0x11, 0xCB, 0x34, 0x09, 0x51, 0x49, 0x8D, 0xC4, 0xC2, 0x1F,
0x24, 0x96, 0xCC, 0x1E, 0x13, 0x2B, 0xF8, 0x5B, 0x48, 0xAB, 0xE8, 0x10, 0xA3, 0x11, 0xE7, 0x02,
0x3C, 0xB8, 0x80, 0x4E, 0x28, 0xAD, 0x00, 0x4C, 0xCD, 0x2C, 0xCB, 0x5B, 0xCC, 0xDF, 0xD3, 0x1B,
0x14, 0x22, 0x86, 0x0B, 0xB1, 0xFE, 0x9B, 0x58, 0x78, 0xF9, 0x3D, 0x8A, 0x31, 0x02, 0x11, 0x38,
0x64, 0xC4, 0x61, 0x70, 0xCF, 0x69, 0xBE, 0x53, 0x7E, 0x81, 0x2A, 0xC4, 0x57, 0x40, 0x85, 0xF4,
0x02, 0x53, 0x08, 0x2F, 0x20, 0x85, 0xEC, 0x02, 0x51, 0x88, 0x2E, 0x00, 0xA5, 0xB4, 0x3B, 0xC1,
0x05, 0x9C, 0x90, 0x5B, 0xA0, 0x19, 0x13, 0x84, 0xA3, 0x7B, 0x43, 0xF2, 0x42, 0x5D, 0x83, 0xE4,
0x1F, 0xF0, 0x59, 0x05, 0x72, 0x52, 0x0F, 0xCF, 0x97, 0x62, 0x5C, 0xC3, 0xC5, 0x8F, 0x0B, 0x21,
0xB8, 0x18, 0x44, 0x5C, 0x72, 0xF5, 0x58, 0x24, 0x3C, 0x71, 0x7B, 0x80, 0x89, 0xCE, 0x64, 0xB3,
0x12, 0xD4, 0x6F, 0xE7, 0xFB, 0xA2, 0x15, 0xD7, 0xCC, 0x12, 0xAA, 0x0D, 0x08, 0x17, 0xFC, 0x89,
0xC4, 0xDB, 0x0A, 0x5C, 0xCC, 0xB8, 0xCB, 0xA4, 0x5F, 0xC2, 0xD3, 0x7B, 0x4E, 0xFB, 0x7F, 0x9F,
0x00, 0xF0, 0x13, 0xB4, 0xB5, 0x1A, 0xCA, 0xC5, 0xA4, 0x3E, 0x25, 0xB6, 0x95, 0x65, 0x32, 0x95,
0xD1, 0x91, 0x33, 0x06, 0x29, 0xC1, 0xBA, 0x0B, 0xB9, 0xB6, 0x18, 0x24, 0x84, 0x7C, 0x05, 0x60,
0xD2, 0xE2, 0x45, 0x7C, 0x8A, 0xB0, 0x0B, 0x0A, 0x37, 0x32, 0x2C, 0x1B, 0x18, 0xC4, 0xF5, 0x00,
0xD8, 0xD3, 0x32, 0x88, 0x0B, 0xB7, 0xCF, 0x41, 0xB8, 0x1D, 0x62, 0xEF, 0xBD, 0xF4, 0x13, 0x79,
0x96, 0x1D, 0x16, 0x88, 0x04, 0x06, 0xBC, 0x1F, 0xB5, 0x05, 0x23, 0x26, 0xEE, 0xA8, 0xC1, 0xF2,
0x49, 0x0D, 0xED, 0x16, 0xE3, 0x07, 0xEC, 0x90, 0xBE, 0x20, 0x34, 0xD1, 0xE8, 0x21, 0x23, 0xD7,
0x74, 0x6B, 0xF2, 0x78, 0x80, 0xCF, 0xA9, 0x06, 0xF9, 0x2A, 0xDA, 0x74, 0x1F, 0xF1, 0xEB, 0xCC,
0x7C, 0x9B, 0x89, 0x62, 0x04, 0xB1, 0x8C, 0x1A, 0xBF, 0xA1, 0x41, 0x3C, 0x97, 0xF5, 0x42, 0x92,
0x26, 0xCA, 0x84, 0xE5, 0x33, 0x32, 0xA6, 0x9E, 0x61, 0x69, 0x07, 0xF5, 0x11, 0xE2, 0x32, 0x2A,
0x12, 0x23, 0x38, 0x22, 0x1E, 0xD7, 0x8C, 0x85, 0x7A, 0x8A, 0x57, 0xF5, 0xF2, 0xC8, 0x14, 0x9B,
0x42, 0x56, 0x11, 0xE6, 0x8C, 0x90, 0x33, 0x32, 0x74, 0x48, 0x44, 0xAE, 0xD4, 0xD7, 0x1A, 0xE7,
0x7C, 0x4D, 0x7A, 0x5A, 0x20, 0x8E, 0x6B, 0x11, 0x40, 0xCB, 0x77, 0xC2, 0x89, 0xC8, 0x65, 0x2C,
0x1F, 0xC9, 0xBF, 0xB0, 0x15, 0xF9, 0xA0, 0x87, 0x1B, 0x44, 0xEA, 0x38, 0x30, 0xF4, 0xC6, 0xEA,
0xAF, 0xCC, 0x5B, 0xB6, 0x2E, 0x2C, 0x91, 0xEC, 0x8B, 0xA7, 0x81, 0xEA, 0xF5, 0x88, 0x9D, 0xE8,
0x6C, 0x04, 0x1E, 0x42, 0xF1, 0xF5, 0xA3, 0x9D, 0x9E, 0xFD, 0x5E, 0xE0, 0x2B, 0x1F, 0x5F, 0x30,
0x5E, 0xC9, 0x8C, 0xB1, 0x81, 0x91, 0x50, 0x61, 0x67, 0xE0, 0x15, 0x69, 0xF8, 0x75, 0x07, 0xFA,
0xEE, 0x69, 0xBE, 0xAA, 0x0D, 0x4F, 0xB4, 0xCC, 0xB0, 0x29, 0x36, 0xEC, 0x74, 0x71, 0xF7, 0x14,
0x47, 0x0F, 0xD5, 0xD2, 0xD5, 0x4B, 0x32, 0x6D, 0x98, 0x4C, 0xCB, 0x7E, 0x86, 0xBB, 0x76, 0x24,
0x12, 0x16, 0x8D, 0x2B, 0x5A, 0xE9, 0x8A, 0x01, 0x62, 0xC5, 0xF4, 0xB5, 0x70, 0x29, 0x55, 0x40,
0xC6, 0x91, 0xA3, 0x9D, 0x4B, 0xA5, 0xE8, 0x78, 0x72, 0xEC, 0x31, 0x7A, 0xBF, 0x62, 0x45, 0x91,
0x26, 0x21, 0x62, 0x5D, 0x24, 0x38, 0xDD, 0x78, 0x03, 0xF5, 0x12, 0xA6, 0x22, 0xDD, 0xC9, 0xAC,
0xC6, 0x91, 0x7B, 0xFE, 0x67, 0x34, 0x13, 0x24, 0xFC, 0xB2, 0xFC, 0x4E, 0xD1, 0xC0, 0xC3, 0x40,
0x62, 0x72, 0xF8, 0x1A, 0x94, 0xD6, 0x2A, 0xF9, 0x52, 0xEE, 0x31, 0x67, 0xC7, 0xEA, 0x3E, 0x29,
0xD6, 0x52, 0xCF, 0x3D, 0xA4, 0x61, 0x97, 0xB6, 0xCA, 0xE0, 0xAE, 0xE4, 0xA1, 0x57, 0x5B, 0x73,
0x64, 0xC7, 0x9E, 0x50, 0xAB, 0x03, 0xDB, 0x65, 0xCE, 0xC5, 0x3D, 0xEB, 0xB3, 0x16, 0x9E, 0x59,
0xB8, 0x58, 0xA2, 0x0E, 0x5D, 0x44, 0x4B, 0x39, 0x5A, 0x25, 0xD3, 0x44, 0xEA, 0xAC, 0xE7, 0xC3,
0xCE, 0x7C, 0x66, 0xAC, 0xBE, 0x22, 0x39, 0x11, 0x9A, 0x91, 0xDA, 0x39, 0x3B, 0xED, 0x54, 0x26,
0x7B, 0xCA, 0x64, 0x2D, 0xA9, 0x02, 0xC5, 0xF4, 0xD7, 0x96, 0x99, 0xE3, 0xBC, 0x71, 0x6E, 0xF1,
0xED, 0x4D, 0xC2, 0xAE, 0xB8, 0xFA, 0x5A, 0xD2, 0x28, 0x06, 0xF2, 0x05, 0x02, 0x14, 0xCD, 0xDF,
0x91, 0x0B, 0x89, 0xEE, 0x4A, 0x2C, 0x24, 0xDF, 0xF1, 0x6C, 0x0E, 0x3E, 0x08, 0xFE, 0x93, 0x32,
0xB9, 0x06, 0xD3, 0x25, 0x5A, 0x46, 0x90, 0x6D, 0xD5, 0x70, 0xD0, 0x94, 0x68, 0x81, 0xF4, 0xCC,
0x43, 0xE5, 0xC8, 0xA0, 0x10, 0xA5, 0x25, 0x02, 0xD7, 0x62, 0xB3, 0x2A, 0xE7, 0xC1, 0xA8, 0x5C,
0x8D, 0x5B, 0xC5, 0x27, 0xC9, 0xBD, 0x66, 0x97, 0x88, 0xCF, 0x08, 0x43, 0xC4, 0x12, 0x48, 0x7A,
0x2D, 0x17, 0xDA, 0x93, 0xCB, 0xE0, 0x4F, 0x93, 0x6C, 0x57, 0xFE, 0x9B, 0x5D, 0x1C, 0xE7, 0x8A,
0xCA, 0xF8, 0x03, 0x50, 0xFE, 0xE8, 0x8A, 0xCD, 0x6A, 0xD2, 0xF4, 0xAF, 0xD7, 0xBF, 0xD0, 0xFD,
0x45, 0x5A, 0xAE, 0xC1, 0x35, 0xF4, 0xF5, 0xFD, 0x97, 0x5E, 0x7A, 0xA5, 0x55, 0x94, 0x58, 0x93,
0x71, 0x7F, 0x2C, 0xB8, 0xD4, 0x2A, 0x7D, 0xA9, 0xD6, 0x2B, 0xF4, 0x2F, 0xD7, 0xBF, 0xC2, 0x49,
0xE3, 0xB2, 0x2D, 0xAD, 0xCC, 0xAC, 0xDB, 0x2D, 0x44, 0xBC, 0x50, 0xC1, 0xAA, 0xC4, 0x9E, 0x55,
0xB4, 0x69, 0x5F, 0x5E, 0x35, 0x3E, 0x1B, 0x8D, 0xCB, 0x81, 0xB2, 0xE7, 0x3B, 0xC8, 0xDA, 0x09,
0x96, 0x12, 0xB7, 0x7C, 0x9F, 0x6B, 0x05, 0x2C, 0x8F, 0xBD, 0x89, 0x9D, 0x4A, 0x98, 0x7D, 0x5A,
0x55, 0x05, 0x78, 0x5C, 0xE5, 0x89, 0x6D, 0x06, 0xB2, 0x97, 0x88, 0x6A, 0x49, 0xE0, 0xC4, 0xEC,
0xA3, 0x65, 0x01, 0x3D, 0xAB, 0x05, 0xC7, 0xA0, 0x1B, 0x92, 0xDA, 0x1B, 0x06, 0xB1, 0xE9, 0xC7,
0x03, 0x24, 0xE9, 0x86, 0x6C, 0x57, 0x14, 0x22, 0x2B, 0x61, 0x8E, 0x1B, 0x9F, 0x15, 0xA6, 0x2A,
0x17, 0xC8, 0x84, 0xD2, 0x59, 0xEB, 0x02, 0x28, 0x07, 0xD4, 0x3E, 0xCB, 0x02, 0xB3, 0xF1, 0x87,
0xAB, 0x42, 0xEF, 0x74, 0x5D, 0x1C, 0x6A, 0x66, 0x51, 0x4A, 0x98, 0x7D, 0x51, 0xE4, 0xD3, 0x3B,
0x71, 0xAA, 0xD9, 0xCD, 0x29, 0x95, 0x1E, 0xA8, 0xBF, 0xE7, 0x5E, 0x8D, 0xAB, 0x97, 0x7C, 0x78,
0x4E, 0x59, 0xD6, 0xDB, 0x3E, 0x4E, 0x4E, 0xF9, 0xBB, 0x38, 0xB5, 0x0F, 0x07, 0x4B, 0x57, 0x57,
0xCD, 0xAB, 0x15, 0x80, 0xEA, 0x51, 0x87, 0x7C, 0x4A, 0x7F, 0xC5, 0xC8, 0x22, 0x5B, 0x8B, 0x34,
0x51, 0xEB, 0xBF, 0x28, 0x0A, 0x1F, 0x09, 0xAF, 0x46, 0x74, 0x18, 0xB2, 0xF8, 0x17, 0x02, 0xCA,
0x8F, 0xCA, 0xC2, 0x44, 0x6F, 0x95, 0x49, 0x1D, 0x7C, 0x80, 0x02, 0xAC, 0xAD, 0x85, 0xCC, 0x02,
0x9A, 0x95, 0xC0, 0x3A, 0x4B, 0xDA, 0x99, 0xD6, 0x5A, 0x30, 0x9A, 0x40, 0x78, 0x01, 0x06, 0x0A,
0x4B, 0x0B, 0x4F, 0xA8, 0x4B, 0x9F, 0xBB, 0x25, 0x51, 0xEC, 0x9B, 0xBF, 0x1C, 0x51, 0x0B, 0x2A,
0x50, 0x91, 0x14, 0x9F, 0x97, 0x42, 0xE3, 0xFE, 0xD6, 0x94, 0xE2, 0x33, 0x1F, 0x92, 0xB8, 0xF7,
0xCD, 0xD6, 0x8C, 0x85, 0x30, 0x11, 0xE5, 0x9E, 0xAF, 0xEE, 0x1D, 0x5D, 0x70, 0xF8, 0xEC, 0x95,
0x09, 0x3D, 0xA7, 0x8E, 0x68, 0xAA, 0xDF, 0xE4, 0xB6, 0x4C, 0x73, 0x0F, 0xC8, 0xB4, 0xB2, 0xB4,
0x54, 0x52, 0xAB, 0xA5, 0x5B, 0x32, 0x9F, 0xA9, 0xB8, 0xD6, 0x2E, 0x7F, 0xC8, 0x96, 0xD2, 0x6B,
0xB1, 0x98, 0x14, 0x2C, 0x8C, 0x2B, 0x00, 0xC6, 0x08, 0xF6, 0xCB, 0x1B, 0xFD, 0xB2, 0xE8, 0xAE,
0xC6, 0xF6, 0x87, 0x37, 0xFB, 0x6A, 0x78, 0x28, 0xB0, 0xE6, 0xE9, 0xFB, 0xCF, 0xB9, 0xEB, 0x07,
0x50, 0x07, 0x90, 0xF4, 0x7E, 0x22, 0xAE, 0xB8, 0x82, 0x90, 0x8D, 0x65, 0x0B, 0x5D, 0x74, 0xD6,
0x96, 0x20, 0xAD, 0x36, 0xF7, 0x97, 0x3D, 0x2E, 0xBB, 0x13, 0xF6, 0x88, 0x9F, 0xB3, 0xAC, 0xA1,
0x71, 0x0F, 0x01, 0xEA, 0x9A, 0x15, 0xB2, 0x04, 0x6B, 0xEB, 0x9D, 0x21, 0xCF, 0x67, 0x83, 0x00,
0x82, 0x1F, 0x11, 0xF0, 0x9D, 0xF5, 0xA4, 0x8F, 0x89, 0x74, 0x3E, 0x1E, 0x31, 0x3E, 0x22, 0x24,
0xD4, 0x1F, 0x0F, 0xD8, 0xDA, 0x11, 0x6A, 0xDB, 0x25, 0xFE, 0x3F, 0x67, 0x52, 0x59, 0x4F, 0xA1,
0x1D, 0xFD, 0xC8, 0xB4, 0x7D, 0x14, 0xD0, 0x70, 0x85, 0xD0, 0xB2, 0x4F, 0xD2, 0xAF, 0xD5, 0x1F,
0x14, 0x7F, 0xAC, 0x37, 0x22, 0x1A, 0x87, 0xD5, 0x3B, 0x5F, 0xF8, 0xF1, 0x5E, 0xA9, 0x81, 0x07,
0x60, 0x81, 0x6D, 0x93, 0xAB, 0xA0, 0x24, 0x2C, 0x4B, 0x87, 0x0C, 0x2D, 0x78, 0xFD, 0x49, 0xDF,
0x1F, 0xB9, 0xC7, 0xA0, 0xFF, 0xAA, 0x29, 0xE2, 0x3C, 0x7A, 0xAF, 0x43, 0xB5, 0x34, 0xB2, 0x4E,
0x45, 0x41, 0x66, 0xEA, 0xEC, 0x10, 0x37, 0xEE, 0x6C, 0x8F, 0xB7, 0xE5, 0x19, 0x16, 0x3B, 0x83,
0xA5, 0x41, 0x20, 0xF6, 0x1C, 0x3B, 0x9B, 0x92, 0x6C, 0xD9, 0x91, 0xC5, 0x7E, 0x14, 0x1B, 0x9B,
0xB1, 0x58, 0x75, 0x52, 0x86, 0x82, 0xF8, 0x75, 0xD7, 0x76, 0x1E, 0x1D, 0x8C, 0xCC, 0xC0, 0x07,
0xC5, 0x5F, 0x7C, 0xBF, 0x84, 0x1E, 0xB6, 0x0C, 0xA6, 0x0B, 0x79, 0xFB, 0xF7, 0x3B, 0xA1, 0x34,
0x15, 0x31, 0xA1, 0x7D, 0x15, 0xEE, 0x4F, 0x7C, 0x85, 0xF1, 0x95, 0x9D, 0xC9, 0x26, 0x2A, 0xC3,
0x3E, 0x74, 0x59, 0xC4, 0x8F, 0x4F, 0x22, 0x44, 0x75, 0x4A, 0xD3, 0xFC, 0x8C, 0x09, 0x6A, 0xB4,
0x94, 0x07, 0xD8, 0xFA, 0xD8, 0x96, 0x92, 0xDF, 0xB1, 0x7B, 0xEC, 0x3D, 0xAD, 0x05, 0x2C, 0x14,
0x09, 0x18, 0xED, 0xB4, 0x6B, 0x5B, 0x79, 0x9B, 0xFF, 0x9F, 0x12, 0x30, 0x0F, 0x8C, 0xA9, 0x7D,
0xD2, 0x36, 0x41, 0x27, 0x6B, 0x9F, 0xC8, 0x17, 0x13, 0xB1, 0x7B, 0xB2, 0xF4, 0x84, 0xA4, 0xBD,
0x16, 0xC7, 0xDF, 0xFF, 0xD9, 0x78, 0xAD, 0x2A, 0x32, 0x2B, 0x4C, 0x9B, 0xB8, 0x31, 0x8F, 0xF5,
0x74, 0xDB, 0x53, 0x71, 0x44, 0x8B, 0xE8, 0x40, 0x32, 0xD5, 0x0C, 0xEC, 0x13, 0x7B, 0xC1, 0xBE,
0x70, 0x5D, 0x37, 0x1F, 0x80, 0xEB, 0x86, 0x5A, 0x7F, 0xD7, 0x02, 0x7C, 0xAB, 0x5B, 0x91, 0x6D,
0x31, 0x84, 0x1C, 0xF5, 0x2D, 0xFC, 0x12, 0x66, 0x5F, 0x23, 0x98, 0x9D, 0x8B, 0x4D, 0x67, 0x17,
0x4B, 0xEF, 0xB0, 0x58, 0x73, 0x61, 0x31, 0x90, 0x1C, 0x77, 0x6A, 0x61, 0x64, 0x31, 0x6E, 0xDE,
0x95, 0x3B, 0x23, 0x57, 0x0B, 0xD7, 0xD8, 0xF1, 0xB2, 0x46, 0xD5, 0x7E, 0xA3, 0xA5, 0xFC, 0x58,
0xCB, 0x4E, 0xA2, 0x06, 0x2A, 0x14, 0xA9, 0x46, 0xC8, 0x22, 0x22, 0x11, 0x3C, 0xB1, 0xFC, 0x27,
0xF9, 0x4D, 0xD6, 0xA2, 0x1F, 0x31, 0x21, 0xC9, 0xB9, 0x6B, 0x9E, 0x23, 0xA6, 0xE4, 0x8A, 0x28,
0x55, 0x23, 0xFF, 0x89, 0xFA, 0xC8, 0x7F, 0x62, 0x50, 0x18, 0x17, 0xAA, 0x1B, 0x49, 0x90, 0xC0,
0x89, 0x26, 0x15, 0xD8, 0x4B, 0x84, 0xDA, 0x0B, 0x20, 0x28, 0x40, 0x4E, 0x04, 0xF6, 0xC8, 0xFF,
0x09, 0xC1, 0x71, 0x03, 0x32, 0x47, 0x98, 0x99, 0xA4, 0x16, 0x43, 0x23, 0x3F, 0x10, 0x53, 0x93,
0xE5, 0x22, 0x77, 0x68, 0x23, 0xC2, 0x4F, 0xC9, 0x32, 0x1A, 0xB8, 0x8D, 0xAB, 0xBB, 0xD3, 0xD0,
0x16, 0xEE, 0xEF, 0x32, 0xC4, 0x3B, 0xFE, 0xC1, 0x40, 0x73, 0x4B, 0x0A, 0xA1, 0xDD, 0xC5, 0xD1,
0x66, 0xE6, 0x67, 0x6D, 0xBF, 0xC7, 0xD6, 0xAC, 0xFD, 0xF7, 0xF8, 0x97, 0xB4, 0x40, 0x6C, 0xC0,
0xC7, 0x8D, 0xD7, 0xED, 0xEA, 0xC0, 0x23, 0xDB, 0xD1, 0x54, 0x12, 0x28, 0xEC, 0x4F, 0x5B, 0xFD,
0x26, 0x0D, 0xD2, 0x35, 0x25, 0xD0, 0xBD, 0x69, 0x57, 0xFD, 0xE3, 0xFF, 0xB8, 0xD9, 0x7C, 0xEC,
0xEF, 0xF8, 0xB8, 0xDE, 0xB0, 0x3C, 0xD8, 0xAC, 0xF1, 0xA8, 0x37, 0xAE, 0xCC, 0x0E, 0x94, 0xE5,
0xE9, 0x6A, 0xB5, 0xFF, 0x66, 0xCD, 0x69, 0xE2, 0x79, 0x1D, 0x4B, 0x39, 0xA1, 0x48, 0xDE, 0x64,
0xDB, 0x2B, 0xAA, 0x01, 0xF5, 0x55, 0x64, 0x18, 0xDE, 0xB9, 0xB6, 0x63, 0xB7, 0x44, 0xD5, 0xAE,
0x41, 0x54, 0x6C, 0xCA, 0x78, 0x27, 0x9B, 0xED, 0x6E, 0xF8, 0xA4, 0x14, 0x31, 0x4C, 0x0C, 0x56,
0x96, 0xDD, 0xED, 0x07, 0x1C, 0x50, 0x51, 0xD9, 0x0D, 0xB6, 0xBE, 0xB5, 0x59, 0x0B, 0x0B, 0x5C,
0x43, 0xD7, 0x49, 0x27, 0xB6, 0x8A, 0x79, 0x93, 0x54, 0x48, 0x0C, 0x28, 0x4E, 0x08, 0xFC, 0xF2,
0xE0, 0x8F, 0x45, 0x99, 0x43, 0x49, 0xE3, 0x03, 0x0D, 0xF4, 0x30, 0x43, 0x40, 0xD7, 0x91, 0xB3,
0xEA, 0x27, 0xB2, 0xC6, 0x19, 0x97, 0x8E, 0xB5, 0xF7, 0x60, 0xD4, 0x12, 0xFC, 0xAC, 0x48, 0x66,
0xDA, 0x8B, 0x4D, 0xDE, 0x6A, 0xB5, 0x3E, 0xD9, 0xEA, 0x14, 0x8F, 0xC2, 0x3F, 0xBB, 0xD4, 0xEC,
0x29, 0x1D, 0xA3, 0xA8, 0xAD, 0x72, 0x80, 0x4E, 0x2F, 0x18, 0x75, 0x8A, 0x62, 0x46, 0x92, 0x4A,
0xB1, 0x1F, 0x95, 0x30, 0x84, 0x07, 0xB2, 0x76, 0xAC, 0xC6, 0xCE, 0xA3, 0x2B, 0xFC, 0x31, 0x92,
0x5C, 0x11, 0x31, 0x49, 0x5C, 0x3B, 0x06, 0x10, 0x51, 0xBF, 0x05, 0xF5, 0xD3, 0x2E, 0x75, 0x71,
0xCA, 0x5C, 0x6F, 0xEB, 0xB6, 0xEF, 0x92, 0x74, 0xA7, 0xF1, 0xC7, 0x67, 0x5E, 0xBE, 0xB8, 0x61,
0x15, 0x1C, 0xB6, 0x58, 0xC6, 0x05, 0x3B, 0x36, 0x49, 0x09, 0xED, 0xB8, 0x30, 0x81, 0x9C, 0xA1,
0x94, 0x74, 0x57, 0x44, 0xCB, 0x6E, 0x89, 0x05, 0x3D, 0x2C, 0x6C, 0xEB, 0x7F, 0xD0, 0xA5, 0xA5,
0x64, 0x51, 0x62, 0x41, 0x9B, 0xA0, 0xF7, 0xD0, 0x04, 0x89, 0x5A, 0x34, 0x81, 0xBD, 0x0A, 0x1D,
0x8D, 0x41, 0xB3, 0xBC, 0x04, 0xCB, 0x9F, 0xD0, 0x1F, 0x22, 0x15, 0x06, 0x12, 0x85, 0xA4, 0x6F,
0x12, 0x7F, 0xD9, 0x52, 0xE2, 0x51, 0x3B, 0x66, 0xB9, 0x08, 0x17, 0x9A, 0xC1, 0x5B, 0x34, 0x91,
0x04, 0xE6, 0xD5, 0xC5, 0xB2, 0x2F, 0xCA, 0xC0, 0xF1, 0x92, 0xBC, 0x62, 0xFF, 0xF7, 0x8B, 0xD7,
0x6A, 0x11, 0xA9, 0xFF, 0xFC, 0xAF, 0x5B, 0xC9, 0xFA, 0xD3, 0xC7, 0x86, 0x2F, 0x99, 0x29, 0xC1,
0x48, 0x01, 0x0A, 0x37, 0x6F, 0x08, 0x09, 0x87, 0xAF, 0x09, 0x0C, 0x1F, 0x40, 0x79, 0xAD, 0x2B,
0x6C, 0x1B, 0xF4, 0x1F, 0xC3, 0xDF, 0xC0, 0xFF, 0x3D, 0x87, 0xFE, 0x77, 0xD4, 0x7A, 0x41, 0x97,
0x34, 0x8F, 0x48, 0x0E, 0x7E, 0xB3, 0x13, 0x42, 0xEC, 0x13, 0x62, 0x8A, 0x7A, 0x91, 0xA4, 0xC3,
0x0D, 0xC8, 0x0F, 0xAE, 0x29, 0x73, 0xA8, 0xAA, 0x52, 0xC3, 0x8C, 0xB0, 0xB2, 0x05, 0xC3, 0x18,
0x1E, 0xED, 0x2E, 0x64, 0x75, 0x46, 0xC3, 0x3A, 0x8D, 0xEB, 0x94, 0x47, 0xAA, 0xC7, 0xD3, 0x46,
0x90, 0xC7, 0x95, 0x6F, 0xC1, 0x46, 0xA6, 0x55, 0xF2, 0xAB, 0x8D, 0x4D, 0x9A, 0x57, 0x25, 0x70,
0xAA, 0x52, 0xAF, 0x95, 0x72, 0x00, 0xCB, 0x1A, 0xD8, 0x33, 0x2C, 0x76, 0x23, 0x80, 0x17, 0xB3,
0xC7, 0x5A, 0xF7, 0x3E, 0x12, 0x12, 0x94, 0xBA, 0xA7, 0x48, 0xFB, 0xCB, 0x7C, 0x3C, 0xCC, 0x4B,
0x27, 0x48, 0x86, 0xEA, 0xD8, 0xB6, 0x9E, 0x08, 0xFF, 0x56, 0x19, 0x79, 0xBF, 0x85, 0x28, 0x50,
0x98, 0xCF, 0xC4, 0x78, 0x2E, 0xD6, 0x81, 0xB6, 0x15, 0x2A, 0x23, 0x17, 0x43, 0xC0, 0xCD, 0xC7,
0x17, 0x23, 0xC4, 0x47, 0x4C, 0xF6, 0xA3, 0x12, 0xE6, 0x20, 0x1B, 0x8C, 0x77, 0xBA, 0x58, 0x4D,
0x86, 0x7B, 0xEA, 0xF0, 0x3F, 0x14, 0xA5, 0x8B, 0x7D, 0x28, 0x36, 0x62, 0xFE, 0x61, 0x60, 0xBD,
0xCA, 0x30, 0x8D, 0xD3, 0x7E, 0x23, 0x9B, 0x01, 0x79, 0x0C, 0x47, 0x83, 0x5E, 0x80, 0x65, 0xEB,
0xBD, 0xD9, 0x6E, 0x04, 0xBA, 0x72, 0x49, 0xBB, 0x8E, 0xE5, 0x84, 0x5B, 0xD7, 0xDC, 0x78, 0x18,
0xDA, 0x28, 0x4E, 0x1C, 0x98, 0x3D, 0x74, 0x14, 0x98, 0x86, 0xCD, 0xD8, 0x85, 0xC7, 0x31, 0x07,
0x41, 0x4C, 0x36, 0x2B, 0x88, 0xC8, 0x65, 0xD1, 0xC9, 0x66, 0x33, 0x3B, 0xE1, 0x94, 0x45, 0x86,
0xCC, 0x17, 0x0B, 0x14, 0xE4, 0xF2, 0xD6, 0x8F, 0x04, 0xA8, 0x60, 0x18, 0x04, 0xA7, 0xC0, 0x96,
0xDE, 0xA9, 0xEB, 0x4D, 0x08, 0xA1, 0xE1, 0xBA, 0x92, 0xAC, 0x51, 0x42, 0x38, 0x9D, 0x17, 0x0A,
0x9A, 0x8D, 0x81, 0x2F, 0x10, 0xD3, 0xDE, 0xC4, 0x2C, 0xD6, 0x24, 0xC6, 0xF9, 0xCA, 0x9C, 0x67,
0x44, 0x95, 0x91, 0x44, 0xC8, 0x38, 0xE2, 0x2B, 0x67, 0x47, 0x94, 0xEC, 0xD6, 0xFC, 0x57, 0xB3,
0xD2, 0xA8, 0xE0, 0x29, 0x3B, 0xD4, 0x7F, 0x4C, 0xE7, 0x67, 0x9B, 0xD6, 0x1F, 0x5E, 0x25, 0x93,
0x3B, 0x15, 0x3D, 0xFC, 0xF0, 0xD8, 0x10, 0x5A, 0x4E, 0x76, 0xD4, 0x94, 0x3D, 0xDF, 0xE5, 0xC5,
0x5A, 0xB9, 0x82, 0xD7, 0xA0, 0x5B, 0x1E, 0x45, 0xD4, 0x32, 0xCF, 0x8E, 0x49, 0x5E, 0xCD, 0xF2,
0x66, 0xF6, 0x1C, 0xF0, 0x01, 0x89, 0x0F, 0xEB, 0x06, 0x4E, 0x9C, 0x32, 0x80, 0x34, 0x5C, 0x9A,
0xD6, 0x6C, 0x76, 0x6F, 0x26, 0xB5, 0x8B, 0x92, 0x06, 0xB7, 0xBB, 0xCC, 0xEC, 0x78, 0xB3, 0x30,
0x4B, 0xB0, 0xF4, 0xAA, 0xBC, 0x39, 0x68, 0xE8, 0x8B, 0xA1, 0xC5, 0xF0, 0xF6, 0xC6, 0x6F, 0x6B,
0x06, 0xA0, 0x2A, 0x9A, 0x6D, 0x0D, 0x6E, 0xF5, 0xE7, 0x27, 0x1B, 0x46, 0xF8, 0x7E, 0xE1, 0xA2,
0x7C, 0x09, 0x16, 0x0B, 0x0C, 0x8B, 0x59, 0x8B, 0xCA, 0x1A, 0xBC, 0x77, 0x70, 0x97, 0x1F, 0x3A,
0x09, 0xED, 0x54, 0x0C, 0x21, 0xD8, 0x99, 0x51, 0x3D, 0xCD, 0x10, 0x0B, 0x51, 0x0E, 0x59, 0x6F,
0xE8, 0x17, 0x45, 0xDD, 0x47, 0x9B, 0xAF, 0x53, 0x3D, 0x3C, 0x1F, 0xDF, 0xA6, 0x4B, 0xD1, 0xC0,
0x91, 0x78, 0xB2, 0x84, 0xCA, 0xDE, 0xE0, 0x8D, 0xC1, 0xE8, 0x8F, 0xD1, 0x18, 0x0C, 0xD1, 0x10,
0xF4, 0x21, 0x2B, 0x58, 0x6B, 0xA8, 0x7C, 0x66, 0x19, 0x11, 0xBF, 0xE7, 0x6A, 0xE8, 0x24, 0xAD,
0x22, 0x40, 0x49, 0x8E, 0x7E, 0x3F, 0xAD, 0x7C, 0x16, 0x59, 0xD6, 0xFF, 0xB2, 0xB7, 0xAD, 0x25,
0xA0, 0xD2, 0x8D, 0xD9, 0x79, 0x3A, 0x7B, 0xC1, 0xE2, 0xD0, 0xBF, 0xC0, 0x64, 0xFE, 0xE0, 0xF7,
0xD4, 0x4A, 0x51, 0x2F, 0x80, 0x01, 0xFD, 0xDA, 0x24, 0x59, 0x5B, 0x39, 0x69, 0xA6, 0x44, 0x56,
0x8F, 0x98, 0xF8, 0xED, 0x06, 0xA3, 0xA8, 0xC9, 0x80, 0x41, 0x4E, 0x6C, 0x02, 0x13, 0x91, 0x95,
0xF1, 0x9F, 0xDF, 0x99, 0xA2, 0xFD, 0xA0, 0x86, 0x54, 0x08, 0xFD, 0x18, 0x23, 0x4E, 0xCE, 0x59,
0xF1, 0x87, 0x9D, 0x19, 0x70, 0x71, 0x72, 0xA5, 0xD6, 0x53, 0x0B, 0xCE, 0xF2, 0x03, 0x4D, 0x5E,
0x33, 0xE7, 0x62, 0x6F, 0xDF, 0x25, 0xFE, 0x8D, 0x38, 0xDF, 0x33, 0xB3, 0x9F, 0x98, 0xCA, 0x7E,
0xAE, 0xC8, 0x0E, 0xFE, 0xF4, 0x54, 0x9B, 0xFA, 0xAC, 0x94, 0x2A, 0x05, 0x40, 0xCB, 0x1B, 0x75,
0x9E, 0x16, 0x56, 0x26, 0xAD, 0x4A, 0xC6, 0xD5, 0xA3, 0x0E, 0x17, 0x07, 0xEF, 0x4C, 0xB4, 0xAE,
0xC9, 0xAD, 0x11, 0x06, 0xC0, 0x9C, 0x88, 0x45, 0x38, 0x81, 0x2A, 0xC5, 0x2D, 0xD4, 0x29, 0xAE,
0x25, 0x6F, 0x61, 0xD9, 0x35, 0x2B, 0x33, 0x72, 0xA9, 0xF2, 0x74, 0x60, 0x69, 0xE2, 0x62, 0x79,
0x30, 0x72, 0x31, 0x31, 0x24, 0x5A, 0x90, 0x8D, 0xFF, 0xA3, 0x53, 0x3F, 0xF0, 0x56, 0x49, 0x09,
0xCA, 0x66, 0xD5, 0xCB, 0xAA, 0xD7, 0x5D, 0x41, 0x08, 0xAB, 0x23, 0x1D, 0x07, 0x12, 0xEC, 0x03,
0x16, 0xC5, 0xCB, 0xDD, 0x33, 0x93, 0x9B, 0x08, 0x8C, 0x75, 0x6F, 0xDA, 0x0C, 0x3E, 0x69, 0xE1,
0x8F, 0x66, 0xFB, 0x62, 0x86, 0xB0, 0x37, 0x49, 0x12, 0x28, 0xB1, 0x47, 0x31, 0xFB, 0x2F, 0xB7,
0x85, 0xAD, 0xFD, 0xE1, 0x50, 0xC4, 0xF4, 0xF8, 0x00, 0x25, 0xBE, 0x03, 0x59, 0x4E, 0xC2, 0x4E,
0x89, 0xC2, 0xEC, 0x5A, 0xFC, 0xB3, 0xE5, 0x5A, 0xFC, 0x6B, 0xB7, 0x8A, 0x7F, 0x91, 0x2B, 0x4B,
0x09, 0xD5, 0xD3, 0x17, 0x50, 0xFC, 0x4B, 0x9E, 0x94, 0x4F, 0xEC, 0x73, 0xE8, 0xB8, 0xE6, 0x13,
0xF7, 0x95, 0x32, 0x0A, 0x91, 0x8C, 0x01, 0xB3, 0x67, 0x22, 0xDA, 0xFB, 0x42, 0xE3, 0x77, 0x6E,
0x6B, 0xAB, 0x26, 0x73, 0x4D, 0xDE, 0x51, 0xA7, 0xC8, 0xC3, 0x4E, 0x1B, 0xBF, 0xD8, 0xF9, 0xC9,
0xCC, 0x78, 0x23, 0x78, 0x77, 0xD4, 0x5A, 0xF6, 0xEB, 0x3D, 0x91, 0x29, 0x44, 0x4A, 0x0F, 0x61,
0x8F, 0x92, 0x86, 0x33, 0x61, 0x4D, 0x56, 0x22, 0x36, 0xC8, 0x44, 0xC0, 0xB4, 0x39, 0x35, 0x73,
0xB1, 0xCE, 0x1F, 0xE1, 0x42, 0xD2, 0x32, 0xE8, 0xB1, 0x18, 0xEC, 0xE2, 0x31, 0x91, 0x4F, 0xDE,
0xD4, 0xEE, 0x47, 0xF6, 0xA3, 0x9A, 0xFA, 0x5B, 0x1C, 0xAA, 0x71, 0xB3, 0x5C, 0x4C, 0x60, 0xE6,
0x62, 0x22, 0x62, 0x88, 0x58, 0x73, 0x8E, 0xDA, 0xC2, 0x24, 0x08, 0xD1, 0x11, 0xC2, 0xA9, 0x6C,
0x57, 0xAE, 0x15, 0xB6, 0x67, 0x02, 0x40, 0x17, 0xFC, 0x2F, 0xA9, 0x80, 0xF3, 0x5A, 0x4B, 0x75,
0x7F, 0x19, 0x38, 0xD7, 0xC9, 0xEF, 0x4F, 0x91, 0x0F, 0x5B, 0x91, 0x27, 0xC5, 0x83, 0xB6, 0x45,
0xF7, 0x38, 0xAD, 0x1E, 0x75, 0xF3, 0x74, 0xAE, 0x3C, 0x60, 0x5E, 0xE5, 0x94, 0x82, 0xD0, 0xAA,
0x3F, 0x49, 0x1A, 0xD7, 0x77, 0xF9, 0x99, 0x52, 0x99, 0xBD, 0xAD, 0xC4, 0x17, 0xE3, 0x19, 0x8D,
0x35, 0xE3, 0xFF, 0x2F, 0x9D, 0xBC, 0x0C, 0x80, 0xAF, 0x62, 0xF7, 0x71, 0xC9, 0x88, 0x0C, 0x02,
0x73, 0x82, 0x0B, 0xC5, 0x6F, 0x97, 0x3A, 0x1C, 0xEC, 0xE4, 0xC4, 0x2F, 0x3F, 0x3B, 0x9D, 0x74,
0x39, 0x6C, 0xE0, 0x06, 0xB4, 0xDD, 0x04, 0xAB, 0x7B, 0x99, 0xB6, 0x85, 0xD7, 0xD5, 0x11, 0x9D,
0x1D, 0x76, 0xB4, 0xA6, 0xA5, 0xE8, 0x70, 0x55, 0x5E, 0xF7, 0xEC, 0x10, 0xDA, 0xE6, 0x6B, 0xA2,
0x3F, 0x2C, 0x29, 0x06, 0xFD, 0x31, 0x64, 0x2A, 0x78, 0xA7, 0x03, 0xC0, 0xC1, 0x7B, 0x38, 0x1F,
0x81, 0x4B, 0xB2, 0x34, 0xA2, 0x7D, 0xA9, 0xD8, 0x4D, 0x43, 0xF6, 0x3A, 0x4B, 0xDE, 0x69, 0x38,
0xD1, 0x50, 0xE2, 0xD2, 0xDA, 0xCD, 0xB9, 0x2E, 0xC1, 0x87, 0x0B, 0x22, 0xC6, 0x87, 0x0C, 0xAB,
0xDE, 0xC7, 0xDC, 0x39, 0xF4, 0x74, 0x62, 0x72, 0x66, 0x58, 0x9D, 0xD8, 0x6D, 0x5E, 0xDA, 0xDD,
0xE6, 0xA5, 0xDD, 0x98, 0x97, 0xEA, 0x77, 0x98, 0x97, 0xF4, 0xEE, 0xE6, 0x25, 0x70, 0xE6, 0x25,
0xFC, 0xB0, 0xE6, 0xA5, 0xDF, 0x6D, 0x5E, 0x06, 0x67, 0x5E, 0x1A, 0x67, 0x5E, 0x9C, 0x24, 0xBC,
0xE6, 0x4C, 0x45, 0xBD, 0x6D, 0x2A, 0x1E, 0x75, 0x07, 0x57, 0xEC, 0x72, 0xFA, 0xA6, 0xDF, 0x62,
0x1F, 0x65, 0xC7, 0x8E, 0xA1, 0xFD, 0x15, 0x45, 0x27, 0xFD, 0x61, 0x5B, 0x51, 0x72, 0x82, 0xF7,
0x9A, 0xA8, 0x85, 0xE0, 0x94, 0x45, 0x67, 0x26, 0xCA, 0x4D, 0x2C, 0x31, 0x6A, 0x4D, 0xB1, 0x41,
0x31, 0x91, 0x52, 0x93, 0xD6, 0x1C, 0xA3, 0x0B, 0x06, 0xE8, 0x01, 0xCA, 0x50, 0x05, 0xDA, 0xB5,
0x23, 0x4A, 0x8C, 0x6D, 0xAC, 0xEC, 0xD9, 0xCA, 0x4E, 0x5D, 0x8F, 0x33, 0x17, 0x3A, 0x03, 0x8C,
0x8B, 0x90, 0xFB, 0x6C, 0x83, 0x54, 0xEE, 0x40, 0x10, 0x2B, 0x57, 0x15, 0x83, 0x8F, 0x70, 0x67,
0xD9, 0x7D, 0xFB, 0xC4, 0x16, 0x23, 0x1D, 0xCE, 0xE1, 0x71, 0x5C, 0x29, 0x47, 0x23, 0x51, 0x04,
0x05, 0x74, 0xA5, 0x1C, 0x52, 0x97, 0x3C, 0x00, 0x05, 0xCB, 0x70, 0xD0, 0xFA, 0x73, 0x8D, 0xB7,
0x82, 0x91, 0xF6, 0x2B, 0xBB, 0x39, 0xAD, 0xA3, 0x39, 0x26, 0xBD, 0xC5, 0xB1, 0xD8, 0x51, 0x5D,
0xE0, 0xEB, 0x03, 0x23, 0x1D, 0x3A, 0xC5, 0xE2, 0xDB, 0x3D, 0x53, 0x16, 0xFE, 0xCF, 0xCC, 0xAA,
0x42, 0xDA, 0xB0, 0x40, 0x3D, 0xEA, 0x79, 0x23, 0xD6, 0x63, 0x31, 0x3A, 0x9D, 0x43, 0x38, 0xC3,
0x99, 0xA3, 0x7F, 0x7A, 0xAA, 0xC2, 0x8D, 0xAB, 0x9B, 0x7D, 0x1D, 0x37, 0xB0, 0xF6, 0x36, 0xAA,
0x17, 0xED, 0xDD, 0x0F, 0x07, 0x22, 0x35, 0x4D, 0xD0, 0xBE, 0x42, 0x22, 0x9E, 0xB5, 0x71, 0xE7,
0x63, 0xAC, 0x01, 0x92, 0x5E, 0xA3, 0xC9, 0x85, 0x29, 0xA7, 0x11, 0x85, 0xB5, 0x16, 0x4C, 0x7F,
0x4E, 0x36, 0x37, 0x09, 0xE8, 0x21, 0x7A, 0x38, 0xD9, 0x4D, 0x09, 0x75, 0x27, 0x4C, 0x27, 0x75,
0x9C, 0x7E, 0xC8, 0x9A, 0xA4, 0xD7, 0x9E, 0x6F, 0xC1, 0xBA, 0xFD, 0xF6, 0x3C, 0xE8, 0x55, 0x13,
0xD0, 0x24, 0x7B, 0x3A, 0xD5, 0x7E, 0xAC, 0xED, 0x0E, 0xCE, 0x82, 0x6A, 0xED, 0xF0, 0x81, 0x3B,
0x8D, 0x7B, 0xE8, 0x69, 0x06, 0x8E, 0x3E, 0x71, 0x2E, 0x0C, 0x76, 0xAE, 0x81, 0x89, 0x4B, 0x71,
0x06, 0x84, 0x55, 0x8E, 0xB8, 0xA7, 0x45, 0x28, 0x4A, 0xC5, 0x89, 0x85, 0x8F, 0x8C, 0x95, 0x94,
0x60, 0xE4, 0xD8, 0x97, 0xC2, 0xED, 0xB0, 0xCF, 0x6E, 0x11, 0xEE, 0x91, 0x85, 0x97, 0xEC, 0x79,
0x1E, 0x48, 0xEA, 0x09, 0x77, 0xC5, 0x04, 0x2E, 0x66, 0xDF, 0xDD, 0x9F, 0x1C, 0x0B, 0x75, 0x94,
0x0A, 0x2C, 0x06, 0x30, 0x3D, 0x53, 0xBD, 0xA2, 0xC5, 0x1E, 0xDC, 0x19, 0x01, 0x3D, 0x74, 0x71,
0xE6, 0xA4, 0x90, 0x5F, 0x9B, 0xBF, 0x34, 0x49, 0x1E, 0x96, 0x4A, 0xAA, 0x0E, 0x6D, 0x82, 0xFD,
0xDF, 0xDB, 0x5D, 0x00, 0xC5, 0x38, 0x57, 0x08, 0x26, 0xA1, 0x21, 0x1D, 0x43, 0x78, 0xAA, 0x9C,
0xE3, 0x73, 0x71, 0x87, 0x14, 0x10, 0x75, 0x34, 0x8B, 0x92, 0xE7, 0x90, 0x61, 0x10, 0x1A, 0xB3,
0xF8, 0xDF, 0xEE, 0x44, 0xCC, 0x13, 0xCC, 0xC7, 0x43, 0x75, 0x1F, 0xC3, 0xC0, 0x37, 0xBB, 0xDB,
0x71, 0x1F, 0x4E, 0x3A, 0x56, 0x91, 0x30, 0x4E, 0x98, 0xCF, 0x5C, 0x30, 0xC8, 0x3D, 0x2D, 0x95,
0xC0, 0x14, 0x48, 0xF4, 0xCF, 0xBC, 0xA6, 0x85, 0x13, 0x8B, 0xA7, 0x90, 0x7D, 0xC4, 0xB2, 0x82,
0x09, 0x6C, 0x69, 0x4C, 0xBF, 0x64, 0x3E, 0x77, 0x71, 0xAB, 0x2A, 0x5B, 0xAA, 0x03, 0xA1, 0xD5,
0xF9, 0x0D, 0xB2, 0x03, 0x06, 0x42, 0x5C, 0xA9, 0x2A, 0x01, 0xE4, 0x56, 0x78, 0xA2, 0xFC, 0xC0,
0x59, 0x29, 0xC8, 0x08, 0xB5, 0xA0, 0x56, 0xA4, 0x03, 0x65, 0x08, 0xDF, 0x23, 0x91, 0x10, 0x27,
0x9A, 0x87, 0x39, 0x54, 0x8E, 0x28, 0xE3, 0xF4, 0xEB, 0x33, 0xF9, 0x1B, 0xF5, 0x8E, 0x25, 0xB1,
0x3B, 0x43, 0xE0, 0x26, 0xD3, 0x1B, 0x1E, 0x36, 0x52, 0x9E, 0xE8, 0x29, 0x9C, 0x55, 0x13, 0xAE,
0x9C, 0x69, 0xEA, 0x1F, 0x21, 0xBA, 0x3C, 0x84, 0xA7, 0xA4, 0x32, 0x66, 0x0D, 0x2C, 0x6C, 0x6B,
0xC9, 0x72, 0xA4, 0x6C, 0x70, 0x83, 0x4D, 0x7C, 0x66, 0x18, 0x62, 0xA3, 0x23, 0x2C, 0x02, 0x52,
0x49, 0xC4, 0x19, 0x59, 0x0A, 0x03, 0x8E, 0x01, 0x04, 0x23, 0x7B, 0xC1, 0x2C, 0x4B, 0xD7, 0xD4,
0x13, 0xD1, 0x05, 0xB1, 0x4E, 0x50, 0x14, 0x18, 0xA2, 0x42, 0x3F, 0x81, 0xB7, 0x6E, 0xC8, 0x50,
0x9D, 0x31, 0xA1, 0xAE, 0x84, 0xEE, 0x8C, 0x09, 0xD3, 0x9F, 0x23, 0x37, 0xEC, 0xAF, 0x83, 0x43,
0x7C, 0x95, 0x0F, 0x12, 0xED, 0x2E, 0xE7, 0xF8, 0xBC, 0x42, 0xED, 0x26, 0xED, 0xE1, 0xF0, 0x3C,
0x0A, 0xA4, 0x5C, 0x29, 0x2C, 0x61, 0x6F, 0x64, 0xE3, 0x0F, 0x22, 0xD7, 0x56, 0xCB, 0xD7, 0xBB,
0x92, 0x47, 0xE6, 0x7A, 0x1C, 0xDE, 0xB4, 0x74, 0xC8, 0xBA, 0xE5, 0xA0, 0x49, 0xED, 0x66, 0xEB,
0x67, 0x3D, 0x59, 0xC0, 0xEA, 0x65, 0x00, 0xE4, 0x80, 0x3A, 0x8B, 0x24, 0x85, 0xEB, 0x36, 0x2F,
0xF3, 0x08, 0x9C, 0x6E, 0xD4, 0xD3, 0x90, 0x9D, 0xF6, 0x0D, 0x38, 0xF1, 0x22, 0x0B, 0x3C, 0xC4,
0x53, 0x46, 0x3D, 0x5A, 0x39, 0x48, 0x8F, 0x1A, 0x13, 0x36, 0x1E, 0x87, 0x9D, 0xC5, 0xFC, 0xFA,
0x4B, 0x73, 0xDC, 0x75, 0xC9, 0x1B, 0xC3, 0x62, 0x93, 0xDA, 0x23, 0x41, 0xF5, 0xCA, 0x80, 0x4F,
0x4A, 0x71, 0x03, 0x72, 0xF5, 0x5E, 0x52, 0x6C, 0x60, 0x8B, 0x79, 0xD5, 0x09, 0xE5, 0xF5, 0x0C,
0x72, 0x2D, 0x41, 0x04, 0x0D, 0x51, 0xA9, 0x36, 0x07, 0xC3, 0xAB, 0x40, 0x39, 0xEA, 0x81, 0x73,
0x9F, 0x74, 0x44, 0xBA, 0x6A, 0x88, 0xF5, 0xCC, 0x41, 0xCE, 0xEC, 0xB6, 0x46, 0x47, 0x7A, 0xFA,
0x04, 0xA1, 0x5A, 0x3E, 0xB3, 0x5A, 0xDF, 0x09, 0xEA, 0xB6, 0xDB, 0x13, 0xD7, 0x63, 0x3F, 0x00,
0xCA, 0x85, 0xED, 0x33, 0x1E, 0x37, 0x3A, 0x72, 0xF0, 0x3B, 0xBE, 0x87, 0xF5, 0x66, 0x8C, 0x5A,
0xE7, 0x0E, 0x53, 0xED, 0x9C, 0xD3, 0xA2, 0xA5, 0x47, 0x3B, 0x24, 0x84, 0xB2, 0x76, 0xAA, 0x68,
0x0E, 0x14, 0x3F, 0xC1, 0xE2, 0x73, 0x69, 0x9D, 0x70, 0x34, 0x0C, 0xE2, 0x1B, 0xF4, 0xAE, 0x0F,
0x14, 0xE9, 0x84, 0x91, 0x16, 0xBC, 0x94, 0x8B, 0x02, 0xF6, 0xFA, 0x31, 0x46, 0x2A, 0xAA, 0x3D,
0xA8, 0x57, 0x46, 0x19, 0x8E, 0x39, 0x01, 0x13, 0xBC, 0x5F, 0xD1, 0xB3, 0x31, 0xAE, 0xA9, 0xB4,
0x6B, 0x59, 0x66, 0x3C, 0xE5, 0xE6, 0xBA, 0x40, 0xCA, 0xFE, 0x84, 0xFD, 0x1E, 0x9E, 0xEB, 0x2B,
0xC1, 0xA0, 0xFD, 0x53, 0x11, 0x57, 0xD6, 0x18, 0xB3, 0x1E, 0xE3, 0x4F, 0xFE, 0xB4, 0x6C, 0xF7,
0x9A, 0x86, 0xFF, 0xDC, 0xDA, 0xA8, 0x5C, 0x45, 0x9C, 0x8C, 0x2E, 0xE0, 0xB7, 0xCE, 0xC6, 0x7A,
0xB3, 0xB9, 0x91, 0xD9, 0x70, 0xCE, 0x6C, 0x3C, 0x99, 0xC3, 0x6C, 0x14, 0x67, 0x7D, 0xC9, 0x1C,
0x0B, 0x5D, 0x73, 0xCB, 0x50, 0xD3, 0xE3, 0x90, 0x8F, 0x9E, 0xF8, 0x63, 0xEB, 0x6D, 0x69, 0xBB,
0x2D, 0xB3, 0x0D, 0xF5, 0x56, 0xCB, 0x2D, 0x57, 0x21, 0x3F, 0xD2, 0x71, 0x08, 0x3D, 0xD0, 0x22,
0x78, 0xFD, 0xD3, 0xC8, 0x83, 0xBA, 0xB3, 0x51, 0x69, 0x76, 0xAD, 0xB0, 0x4A, 0x07, 0xEA, 0x98,
0x85, 0xC7, 0xAC, 0x24, 0xC2, 0x36, 0x2C, 0x1F, 0xA3, 0xFE, 0x1E, 0x75, 0xFB, 0xA3, 0x51, 0xAD,
0x84, 0xF1, 0xA4, 0xCF, 0x7F, 0x99, 0x67, 0x75, 0xEB, 0x49, 0xEB, 0xE8, 0x6C, 0xED, 0xBA, 0x4A,
0x8F, 0x36, 0xC2, 0x62, 0x06, 0xCF, 0x9E, 0xF6, 0xCF, 0x60, 0x3C, 0x06, 0x6C, 0x1D, 0x55, 0x8C,
0xAC, 0x45, 0x59, 0x23, 0xB0, 0x4F, 0xB2, 0xF7, 0xBC, 0x46, 0xCB, 0x3A, 0x49, 0xAF, 0x47, 0xF1,
0x5C, 0x05, 0x5D, 0xF3, 0x27, 0xD7, 0x4D, 0xE9, 0x36, 0xB9, 0x92, 0xCB, 0x98, 0x9E, 0x76, 0x25,
0xD2, 0xA8, 0x06, 0x70, 0x81, 0xED, 0x44, 0xF0, 0x81, 0x5C, 0xF4, 0x6F, 0x4D, 0x4E, 0xE8, 0xE2,
0xFF, 0x31, 0x1A, 0xA6, 0x27, 0xBD, 0x3B, 0xCD, 0x97, 0x35, 0x4B, 0xD3, 0x7A, 0xE9, 0x41, 0x9F,
0x2C, 0x57, 0x18, 0xCF, 0xF4, 0xAA, 0xF3, 0xF3, 0xE9, 0x9C, 0x35, 0x5B, 0xA7, 0xC6, 0x18, 0xF6,
0x8C, 0x2E, 0xF4, 0xD1, 0xA2, 0xA3, 0xB9, 0x44, 0x0A, 0x62, 0x9E, 0xCA, 0x0A, 0x7A, 0xAE, 0xA2,
0x12, 0x14, 0xFF, 0x86, 0x27, 0x6F, 0xB4, 0xA0, 0x99, 0x6E, 0x4D, 0x55, 0x2F, 0x45, 0x8D, 0x2D,
0x21, 0xE0, 0xB1, 0x9E, 0xD4, 0x6A, 0xA1, 0x9E, 0xC7, 0xF1, 0x9F, 0xEC, 0x42, 0x9D, 0xA9, 0x82,
0xBB, 0x9C, 0x28, 0x40, 0xC5, 0x22, 0xD6, 0xCA, 0x39, 0x94, 0x9C, 0x07, 0x9A, 0x94, 0xE5, 0x63,
0xE8, 0x64, 0x7A, 0xB3, 0xD2, 0xE9, 0x97, 0x76, 0x8D, 0x01, 0xE6, 0x57, 0xE8, 0x96, 0x68, 0x9B,
0xD2, 0x9A, 0xCD, 0x77, 0x1E, 0x45, 0x75, 0xBB, 0x9D, 0x88, 0x77, 0x41, 0x16, 0xC8, 0xE2, 0x96,
0xE5, 0x35, 0x71, 0xC5, 0x57, 0x64, 0x4F, 0x30, 0x1E, 0x22, 0x1D, 0x53, 0x8A, 0x9D, 0x89, 0xF3,
0x09, 0xA1, 0xBD, 0x18, 0x0C, 0x8A, 0x6B, 0xC1, 0xE3, 0x18, 0x81, 0xDF, 0xBB, 0x9D, 0x1B, 0x20,
0x83, 0x88, 0x85, 0xE7, 0xA7, 0x09, 0x3E, 0x59, 0x2E, 0x5D, 0x66, 0xB7, 0xD4, 0x4D, 0xE0, 0xA1,
0x41, 0xC6, 0xFE, 0x18, 0xE6, 0xE0, 0xE9, 0xD2, 0xBC, 0x73, 0x20, 0xDF, 0x86, 0x39, 0x64, 0x1B,
0x67, 0xE4, 0x09, 0x6E, 0xA1, 0x33, 0x2D, 0x41, 0x07, 0xEA, 0xC4, 0x38, 0x93, 0x1E, 0xE5, 0x94,
0x4B, 0xF6, 0x83, 0x18, 0x38, 0x51, 0xE6, 0xF5, 0x04, 0xF6, 0xB8, 0x24, 0xB5, 0x64, 0x25, 0xCF,
0xD8, 0x24, 0xDD, 0xA3, 0x10, 0x56, 0xC4, 0x4C, 0x42, 0xB8, 0x3F, 0x26, 0x88, 0x1F, 0x04, 0xDF,
0xE2, 0x71, 0x89, 0x9C, 0x06, 0x28, 0x5F, 0xA9, 0x4E, 0xA8, 0xDA, 0x04, 0x6B, 0x8F, 0x3A, 0x51,
0x72, 0x86, 0x21, 0xD2, 0x5C, 0x93, 0x02, 0xF5, 0xAD, 0xF3, 0xA1, 0x59, 0x23, 0x7C, 0x14, 0xC3,
0x25, 0x7F, 0xA3, 0xB8, 0xA4, 0x5E, 0x4F, 0x0D, 0xF3, 0x6C, 0x34, 0xB0, 0xC6, 0xD1, 0xC7, 0x94,
0x69, 0xB1, 0xAB, 0xF4, 0xD1, 0xEF, 0xD4, 0x0F, 0x0B, 0x6F, 0x0E, 0xE4, 0xAF, 0x2A, 0xD3, 0xBC,
0x60, 0x72, 0xDD, 0xBB, 0x74, 0x53, 0xE5, 0xCE, 0x2E, 0xBD, 0x13, 0xF6, 0x56, 0xB3, 0xE7, 0x07,
0x04, 0x00, 0x23, 0xEC, 0xCA, 0x33, 0x17, 0xDA, 0xAA, 0x08, 0x47, 0x18, 0x80, 0x01, 0x32, 0x01,
0x59, 0x44, 0x04, 0x23, 0x5E, 0x28, 0x92, 0xF7, 0xC4, 0x0C, 0x4F, 0x0D, 0xAD, 0x9E, 0xDE, 0x0A,
0x80, 0xA0, 0xB1, 0x1C, 0xC7, 0x56, 0x8F, 0xB6, 0x2B, 0x89, 0x5A, 0x64, 0xD7, 0x73, 0xBF, 0x45,
0x4D, 0xD8, 0xAE, 0x41, 0xDC, 0x0E, 0xDD, 0x53, 0x56, 0x02, 0xB7, 0xBC, 0xAA, 0xFD, 0x59, 0x87,
0x3F, 0xDD, 0xF0, 0xEA, 0x0A, 0x9C, 0xCF, 0x01, 0xCC, 0x5C, 0x3B, 0x3E, 0xE8, 0x1E, 0x8D, 0x18,
0x86, 0xE0, 0x4C, 0xE3, 0x0D, 0xB1, 0xB6, 0x9F, 0xBF, 0x88, 0x1D, 0x7A, 0xA9, 0xA2, 0x01, 0x79,
0xD0, 0x85, 0x38, 0xC2, 0x7C, 0x99, 0xEE, 0x18, 0xFC, 0x65, 0xFB, 0xA8, 0x6A, 0xDD, 0x9E, 0xA0,
0x2E, 0x3C, 0x13, 0x94, 0xB1, 0xC4, 0x2D, 0xE9, 0xF8, 0xE8, 0x21, 0x67, 0x06, 0x7E, 0xB2, 0x89,
0xD2, 0x67, 0x26, 0x32, 0x2F, 0x70, 0xE0, 0x6C, 0x35, 0xDC, 0x6D, 0x9D, 0xC0, 0xEF, 0x00, 0x0D,
0xB6, 0x03, 0x44, 0x71, 0x52, 0xE8, 0xE5, 0x4F, 0x09, 0x06, 0xAF, 0xC0, 0xC1, 0x46, 0x76, 0x6D,
0x89, 0x45, 0xA4, 0x31, 0x1D, 0x64, 0x58, 0x3B, 0x57, 0xAC, 0xCD, 0x8A, 0xF4, 0x4A, 0x06, 0x83,
0xE6, 0x02, 0x90, 0xB8, 0x39, 0x68, 0x5B, 0x53, 0xB2, 0x49, 0x49, 0x78, 0xCA, 0x42, 0xDD, 0x28,
0x87, 0x84, 0x96, 0x48, 0x8B, 0x93, 0x5B, 0x45, 0xEB, 0x56, 0xD1, 0xBE, 0xDC, 0xE0, 0x7A, 0x0F,
0xDE, 0x32, 0x6E, 0xA3, 0x26, 0x12, 0x20, 0x64, 0xB6, 0x01, 0x06, 0x99, 0x79, 0x06, 0x10, 0xB8,
0xD3, 0x86, 0x14, 0x70, 0x9E, 0x9C, 0xED, 0xF4, 0x0F, 0xEB, 0xD1, 0x08, 0x80, 0xFA, 0x44, 0x10,
0x13, 0xE2, 0x1F, 0x93, 0x8B, 0x93, 0xF6, 0x4A, 0x75, 0xDA, 0x7B, 0x51, 0xA5, 0x1E, 0xDF, 0x47,
0x99, 0xE5, 0xC0, 0x2C, 0x7D, 0x26, 0xAC, 0xFA, 0x45, 0xD7, 0x24, 0xB9, 0x84, 0x29, 0x17, 0xDE,
0x0A, 0x01, 0xA1, 0x0A, 0xC3, 0x4C, 0xCB, 0xA8, 0x07, 0xDC, 0x64, 0xB6, 0xAE, 0xA6, 0xFF, 0xDC,
0x31, 0x59, 0xA6, 0x21, 0x94, 0x34, 0x77, 0x80, 0x52, 0x84, 0x2D, 0xC0, 0xD1, 0x43, 0x8A, 0x1A,
0x80, 0xBD, 0x01, 0xDB, 0xF4, 0xA8, 0x86, 0x0D, 0x2A, 0x6B, 0x59, 0xBF, 0xDE, 0x7A, 0x82, 0x27,
0x5F, 0x54, 0xD8, 0x12, 0xBA, 0x90, 0xAA, 0x73, 0xA7, 0xC3, 0x20, 0x6D, 0x91, 0x58, 0xB4, 0x2E,
0x90, 0x8C, 0x62, 0x04, 0x52, 0x95, 0xA1, 0xB8, 0xA5, 0x08, 0x19, 0xA3, 0x91, 0xF3, 0xE6, 0x2E,
0x14, 0xC4, 0x74, 0x20, 0xE3, 0x6F, 0x0F, 0x8A, 0xD0, 0x23, 0x9B, 0xAF, 0x21, 0x64, 0x62, 0xF5,
0xD9, 0xAA, 0xCC, 0xE0, 0xD0, 0x5D, 0x73, 0xD8, 0x98, 0x3F, 0xBF, 0x98, 0x4A, 0x35, 0x9A, 0x93,
0x43, 0x61, 0xE3, 0x3A, 0x31, 0x14, 0xBA, 0xAC, 0x54, 0x95, 0xD5, 0x73, 0x39, 0xD5, 0xC2, 0x38,
0x8A, 0x1E, 0x8D, 0x48, 0xA6, 0x8C, 0x83, 0xDA, 0x86, 0x0D, 0x4A, 0xF0, 0x22, 0x77, 0xA1, 0xE6,
0x95, 0x18, 0xD2, 0x19, 0x18, 0xA9, 0x58, 0xFB, 0x2E, 0x03, 0x3B, 0x44, 0x3E, 0xF6, 0xBF, 0x31,
0x85, 0x71, 0x70, 0x03, 0x1D, 0xEB, 0xB7, 0x24, 0x6E, 0x33, 0x37, 0x00, 0x50, 0xF4, 0x8F, 0x70,
0x02, 0x2F, 0x7C, 0x42, 0xAD, 0x3B, 0xA1, 0x5B, 0x4F, 0xE2, 0x83, 0xE3, 0xEE, 0xD8, 0xF3, 0x26,
0xBF, 0xE2, 0x4C, 0x29, 0x97, 0xC9, 0x36, 0x73, 0x03, 0xEA, 0xAC, 0xC7, 0xB5, 0x0E, 0x9A, 0x96,
0xAB, 0xCD, 0x0E, 0xD5, 0xE0, 0x81, 0x1B, 0xB1, 0xD6, 0x41, 0x24, 0x6C, 0xFD, 0xA1, 0x04, 0xC8,
0x0F, 0x54, 0xBF, 0x3E, 0xE2, 0x28, 0xB1, 0xB3, 0x8A, 0x95, 0x5E, 0xDD, 0x7D, 0xC9, 0x73, 0xF6,
0x32, 0xA3, 0x47, 0xC4, 0x97, 0x24, 0xF0, 0x4F, 0xF2, 0xE2, 0x71, 0x4C, 0x89, 0x4A, 0x88, 0x3B,
0x2C, 0x15, 0x2C, 0xF3, 0x75, 0xDD, 0x4F, 0xAC, 0x05, 0x3D, 0xEA, 0xC6, 0x0D, 0x2E, 0x43, 0xE3,
0xB9, 0xF1, 0xF1, 0x5F, 0x31, 0x7E, 0xEB, 0x46, 0x5D, 0xD2, 0x1A, 0xCB, 0xCE, 0x9C, 0x05, 0xFA,
0x80, 0x7C, 0xE1, 0x5A, 0x7A, 0xA3, 0x82, 0x33, 0x5E, 0x2D, 0x20, 0x27, 0xC8, 0x94, 0xF7, 0xF0,
0x34, 0x1F, 0xA3, 0xB1, 0xF7, 0xEF, 0xE8, 0xFE, 0x1E, 0x63, 0x80, 0x26, 0x7A, 0x03, 0x03, 0x34,
0xAF, 0x7D, 0x57, 0x80, 0xBD, 0xFF, 0x13, 0x6A, 0x35, 0xA3, 0x03, 0x92, 0xBB, 0x13, 0xBE, 0xA1,
0x75, 0x5D, 0x90, 0xA7, 0xCF, 0x4E, 0x98, 0x21, 0x11, 0x7B, 0x42, 0x24, 0xF7, 0x96, 0xC4, 0xF3,
0xB7, 0x24, 0x73, 0x78, 0x76, 0x6D, 0x57, 0x5D, 0x91, 0x5F, 0x48, 0x20, 0xDD, 0x7C, 0xCF, 0xBE,
0xA4, 0xC5, 0xB5, 0x71, 0x6B, 0xBA, 0x6B, 0x19, 0xAD, 0xDD, 0xD1, 0xB2, 0x8A, 0xEB, 0x00, 0xF7,
0x39, 0xC9, 0x93, 0xA6, 0x62, 0x4D, 0x23, 0xD6, 0x49, 0xFF, 0x0F, 0x29, 0x9F, 0xCF, 0xDF, 0x45,
0x3E, 0x79, 0xF6, 0x5E, 0x6F, 0xB6, 0x14, 0xE8, 0x99, 0x8E, 0x8F, 0x2C, 0x9F, 0xD5, 0xED, 0xE5,
0x6C, 0xF1, 0x22, 0x9F, 0x1F, 0x51, 0xD0, 0x7C, 0xDA, 0x9E, 0x51, 0x82, 0xB0, 0xEE, 0xC3, 0x0A,
0x9A, 0x37, 0xEA, 0xCD, 0x89, 0xC6, 0x44, 0x47, 0x0D, 0xE8, 0xE7, 0x7E, 0x46, 0xBB, 0xFC, 0x79,
0xFF, 0xEE, 0x67, 0x33, 0xB0, 0xD3, 0x02, 0xA0, 0x49, 0xEE, 0x69, 0xFF, 0x4A, 0x2C, 0x87, 0x57,
0x1D, 0x79, 0xCA, 0x0B, 0x66, 0x1C, 0x0C, 0xCC, 0x61, 0x67, 0x67, 0xBD, 0x19, 0x8E, 0x4E, 0x3B,
0x27, 0x1A, 0xF0, 0x57, 0x7A, 0x9F, 0x9C, 0x91, 0x94, 0x51, 0x62, 0x1B, 0x37, 0xBF, 0x4C, 0x48,
0xD7, 0x25, 0xB2, 0x33, 0x4B, 0x0C, 0x5A, 0xDD, 0xD6, 0x25, 0x90, 0x80, 0x1E, 0x32, 0xF5, 0x0C,
0x58, 0xC2, 0x86, 0x7A, 0xC6, 0x4C, 0x7E, 0x61, 0xA8, 0x0A, 0xCD, 0x8F, 0x74, 0xA0, 0xDC, 0x9D,
0x00, 0x51, 0x83, 0x9D, 0x94, 0xDF, 0x84, 0x51, 0x4A, 0x60, 0x68, 0x9F, 0xAA, 0x4D, 0x74, 0x0B,
0xB7, 0x0C, 0x68, 0xE0, 0x3F, 0x2E, 0xCC, 0x14, 0x6F, 0xCD, 0x32, 0x44, 0x2D, 0x7C, 0x71, 0xFF,
0xF5, 0x0A, 0x1B, 0x64, 0xEA, 0xC1, 0xF8, 0xD5, 0xE7, 0x8D, 0x0D, 0x58, 0xBD, 0xCF, 0x38, 0x87,
0x56, 0xA3, 0xB8, 0x8D, 0x12, 0x36, 0x67, 0x1B, 0x11, 0x66, 0x62, 0x5C, 0x35, 0x1A, 0x70, 0x58,
0x05, 0xD3, 0xE6, 0xC1, 0xDB, 0xF9, 0x13, 0x7D, 0xF0, 0x9F, 0x4D, 0x37, 0x87, 0xEF, 0xF4, 0x3D,
0x6F, 0xA2, 0x13, 0xDA, 0x56, 0xCC, 0x68, 0x55, 0xB2, 0x9B, 0xED, 0x86, 0x68, 0x0B, 0xCD, 0x80,
0xD7, 0xA9, 0xD2, 0xDD, 0x0F, 0x4C, 0xA3, 0x87, 0x50, 0xE4, 0x1E, 0xA6, 0xF6, 0xFB, 0x42, 0xEC,
0x95, 0xD3, 0xB3, 0x08, 0xFB, 0xBB, 0x10, 0x9E, 0xEE, 0x8C, 0xB0, 0x63, 0x52, 0x7D, 0x67, 0x26,
0x95, 0x14, 0x42, 0x5D, 0x82, 0x93, 0xEB, 0x2D, 0xAF, 0x98, 0x51, 0xD6, 0x58, 0x1F, 0xCE, 0x81,
0x82, 0x38, 0xB8, 0x50, 0x33, 0x2F, 0xCB, 0xF1, 0x72, 0x77, 0x94, 0xEA, 0x74, 0x91, 0x9D, 0xDE,
0x49, 0x79, 0xE2, 0x4A, 0xC0, 0xBB, 0x1F, 0x7B, 0x38, 0xD2, 0x0F, 0xC7, 0x9B, 0x3D, 0xFE, 0xB2,
0xC3, 0x33, 0xEA, 0x74, 0x60, 0x94, 0x83, 0xA4, 0x2C, 0xE8, 0x06, 0x9B, 0x66, 0x01, 0x47, 0x4A,
0x33, 0xC7, 0x22, 0xCB, 0xEF, 0xC2, 0x09, 0x67, 0x68, 0x23, 0x5C, 0xEF, 0x2F, 0x65, 0xF9, 0xF5,
0x83, 0x38, 0x6E, 0x8B, 0xE4, 0xA9, 0x27, 0xAC, 0x8D, 0x24, 0x33, 0xC0, 0xED, 0x1A, 0xA2, 0x33,
0x77, 0xED, 0x7A, 0x94, 0x75, 0x48, 0x9D, 0x47, 0x93, 0xCB, 0x30, 0x5D, 0x8A, 0xAD, 0x9B, 0xE4,
0xA3, 0x06, 0xDF, 0xE9, 0xEE, 0x55, 0x42, 0x6A, 0x2D, 0x1A, 0xF4, 0x06, 0xE7, 0xB3, 0xA7, 0x07,
0x84, 0xAC, 0xBD, 0x39, 0x0F, 0xFB, 0x55, 0x13, 0x1C, 0xA0, 0x87, 0x94, 0x55, 0xBF, 0x5F, 0xC6,
0xFA, 0x59, 0x47, 0x51, 0x63, 0x40, 0x61, 0x01, 0xA0, 0xBC, 0x21, 0x46, 0xEE, 0x4E, 0x7C, 0x84,
0xDD, 0xF6, 0x12, 0xF6, 0xCC, 0x12, 0xAD, 0x56, 0xE8, 0xB9, 0x04, 0x0B, 0x31, 0x03, 0x79, 0x12,
0xB3, 0xCB, 0xC7, 0xCE, 0x4F, 0xA3, 0xA3, 0x9C, 0x8D, 0xA7, 0x77, 0x52, 0xD0, 0x44, 0xC0, 0x9D,
0x99, 0xD9, 0xAE, 0xFD, 0x3D, 0x02, 0xBA, 0xE3, 0x32, 0xA8, 0x1D, 0xD1, 0x7A, 0xF2, 0x80, 0x14,
0xDF, 0xA1, 0x26, 0x89, 0xDA, 0x8C, 0x3F, 0x64, 0x42, 0xE7, 0x74, 0xFF, 0x2B, 0x0D, 0xB2, 0x2F,
0x6C, 0x52, 0x33, 0xF1, 0x13, 0xE5, 0x83, 0x1E, 0xB0, 0x2B, 0x98, 0xA4, 0x97, 0x81, 0x53, 0x95,
0x90, 0x33, 0x96, 0x50, 0x15, 0x9F, 0xDD, 0x1E, 0x8B, 0xE3, 0x71, 0x1F, 0x34, 0x97, 0x79, 0x07,
0x86, 0xEC, 0xD9, 0xF1, 0xE0, 0x1A, 0x6F, 0xC0, 0x80, 0x8E, 0xCC, 0x8C, 0x12, 0xDE, 0xF1, 0xE6,
0x70, 0xAE, 0xEB, 0x96, 0xA7, 0xD6, 0xDD, 0x89, 0x8B, 0xC1, 0x40, 0xCD, 0x96, 0x42, 0x62, 0x28,
0x60, 0xD7, 0x75, 0xFA, 0xD8, 0xD5, 0xB3, 0xDD, 0x7D, 0x1A, 0x7E, 0x72, 0xEF, 0x2B, 0x8C, 0xA7,
0xA3, 0x93, 0xEB, 0x1C, 0xC4, 0x08, 0xDA, 0x0F, 0x70, 0x57, 0x13, 0x12, 0x1E, 0x36, 0xC7, 0x0B,
0xD5, 0x3C, 0x6D, 0xEC, 0xCD, 0x9F, 0x99, 0x16, 0xE5, 0x3C, 0xD2, 0x93, 0xB0, 0xB6, 0xE0, 0x69,
0x49, 0x25, 0xED, 0x19, 0xC6, 0xD8, 0x67, 0x79, 0x07, 0xB8, 0x0E, 0x01, 0x61, 0x30, 0x71, 0x8B,
0x71, 0xCE, 0x12, 0xC4, 0xE5, 0x3F, 0x1C, 0xCB, 0xE6, 0x3A, 0xCC, 0xF0, 0xAA, 0x19, 0x47, 0xDD,
0x50, 0x9B, 0x4C, 0x51, 0x48, 0x4E, 0xDA, 0x2A, 0xD7, 0x42, 0x72, 0x84, 0x42, 0xB2, 0xAF, 0x85,
0xE4, 0xCF, 0xC6, 0xDC, 0x65, 0x3C, 0xC2, 0x34, 0xEA, 0xED, 0xAD, 0x7E, 0xFE, 0x0A, 0x0E, 0x01,
0xDD, 0x3E, 0x6B, 0x89, 0xA2, 0x5D, 0x96, 0xA8, 0xBF, 0xB3, 0x25, 0x72, 0xC6, 0xCC, 0xDC, 0xD1,
0x98, 0xCD, 0x7A, 0xA3, 0x1B, 0x5D, 0x82, 0x47, 0x99, 0x4A, 0x5E, 0x51, 0x5B, 0x9F, 0x42, 0x0C,
0xCA, 0x83, 0x15, 0x13, 0xCF, 0xC4, 0x1D, 0x7E, 0xD2, 0x61, 0xE8, 0xC6, 0x2C, 0xC7, 0x93, 0x96,
0x9B, 0xDF, 0x79, 0xEA, 0x14, 0xE3, 0x72, 0xEB, 0x68, 0xA9, 0xEB, 0xF5, 0x86, 0xD6, 0x9D, 0xF1,
0xE7, 0x17, 0xF7, 0x5E, 0xF8, 0x14, 0x51, 0x65, 0x50, 0x4B, 0x71, 0x8E, 0xEA, 0x65, 0x9E, 0xCE,
0xDF, 0x4C, 0xB4, 0xA4, 0x5A, 0xB5, 0xC0, 0xBE, 0xFE, 0xE4, 0x7C, 0x77, 0xA7, 0xDE, 0xBA, 0x19,
0x88, 0x1B, 0xFA, 0x5C, 0x62, 0xAF, 0x62, 0xBF, 0x59, 0x52, 0x14, 0x37, 0x8B, 0x11, 0xF5, 0xEE,
0xA0, 0xA5, 0x79, 0xED, 0xC2, 0x6D, 0xCF, 0xD6, 0x73, 0x95, 0x03, 0xA0, 0x92, 0x38, 0x16, 0xD1,
0xD9, 0x80, 0xC9, 0xEC, 0x44, 0x2B, 0xBE, 0x21, 0x4B, 0x65, 0x6C, 0xC5, 0x50, 0xFC, 0x75, 0x1E,
0x44, 0xDE, 0x4A, 0x39, 0x46, 0x8F, 0xE1, 0x65, 0xAB, 0x63, 0x85, 0x35, 0x8A, 0x1E, 0x62, 0xAB,
0x61, 0xD0, 0xDF, 0xAE, 0x39, 0xFD, 0x22, 0xC8, 0xD1, 0xA0, 0xA3, 0x55, 0xFF, 0x14, 0x9B, 0xCA,
0x18, 0xA1, 0x9F, 0x5C, 0x62, 0x33, 0xF1, 0x56, 0x82, 0xBC, 0x69, 0xC9, 0xAC, 0x02, 0xE3, 0xF7,
0x91, 0x1B, 0x78, 0xCF, 0xCC, 0x09, 0x37, 0x3D, 0x45, 0x4D, 0xD4, 0x65, 0x8C, 0x9E, 0x47, 0x53,
0xD0, 0x56, 0x4F, 0x92, 0x2B, 0x76, 0x2C, 0x36, 0xBE, 0x29, 0x2A, 0x4B, 0x06, 0x1F, 0x1F, 0x68,
0x4D, 0xCE, 0x44, 0x72, 0xE1, 0xEC, 0xC0, 0x9D, 0xC1, 0x66, 0xC5, 0xC7, 0x84, 0x76, 0x19, 0x96,
0x2A, 0x1A, 0x97, 0xB1, 0x41, 0x1B, 0xF5, 0x0C, 0x10, 0xD4, 0x6A, 0x99, 0xD2, 0xF0, 0xBE, 0xEB,
0x90, 0x74, 0x11, 0x87, 0xC2, 0xE8, 0x66, 0x33, 0x27, 0xAD, 0xBF, 0x9D, 0xE8, 0x3C, 0xCB, 0x89,
0xE6, 0x78, 0x87, 0xE6, 0x21, 0x9D, 0x16, 0xD9, 0x51, 0xBA, 0x6F, 0xC4, 0x84, 0x84, 0x5D, 0x86,
0x19, 0x05, 0x6F, 0x4E, 0xD8, 0xBF, 0x62, 0x9B, 0x09, 0xE2, 0xC1, 0xC9, 0x05, 0x79, 0x2A, 0x50,
0x39, 0x3E, 0x41, 0x8C, 0x37, 0x21, 0xFE, 0x1B, 0xC4, 0x5E, 0xD0, 0xD4, 0x14, 0xAD, 0x36, 0xA6,
0x71, 0x9B, 0x9B, 0xA0, 0x8B, 0x2B, 0x5C, 0x6D, 0x8C, 0xDE, 0xA8, 0x85, 0xB0, 0x2C, 0xF8, 0x15,
0xE0, 0x88, 0x7F, 0xD1, 0xDD, 0x10, 0xCA, 0xFD, 0xBE, 0x4F, 0x9F, 0x42, 0x0F, 0x7E, 0x90, 0x5C,
0x0C, 0x41, 0xB9, 0xA6, 0xEA, 0x23, 0x8B, 0x1D, 0x9E, 0xF6, 0x5E, 0xCC, 0x35, 0x37, 0xA9, 0x79,
0x6E, 0x0E, 0x45, 0x47, 0xC7, 0xDD, 0xBD, 0x45, 0xF1, 0x85, 0xE8, 0x3D, 0xC6, 0xF2, 0x1D, 0x4F,
0x42, 0x77, 0xBC, 0x2D, 0x61, 0x6B, 0xBE, 0x79, 0x76, 0xD8, 0x47, 0x62, 0xCD, 0xCC, 0xFE, 0x56,
0x54, 0x4C, 0x3C, 0x6E, 0x82, 0xB6, 0xE5, 0x6D, 0xC3, 0x66, 0x17, 0x0F, 0xAF, 0x77, 0xA8, 0x61,
0xF0, 0xD6, 0x51, 0x1A, 0x5D, 0xD7, 0x9A, 0x5C, 0xE9, 0xD1, 0x1F, 0x77, 0x3E, 0xEA, 0x44, 0xFB,
0xD2, 0xE4, 0x90, 0x1E, 0x0E, 0xD4, 0x63, 0xD6, 0xDA, 0x27, 0xD7, 0xC1, 0x99, 0x64, 0xAB, 0x08,
0xEE, 0xB8, 0x63, 0xB7, 0x8E, 0x14, 0x5C, 0xFC, 0x18, 0xA3, 0xEA, 0x4B, 0x60, 0x18, 0xAF, 0x2D,
0x77, 0xEF, 0x85, 0xAD, 0x5B, 0x59, 0xE8, 0x91, 0x50, 0xAA, 0x3C, 0xEF, 0x1F, 0xA7, 0xC3, 0x29,
0x71, 0x93, 0xD0, 0xD6, 0xC4, 0xF9, 0x8E, 0x1B, 0x5A, 0xEC, 0x0D, 0xB8, 0x88, 0xA4, 0xC4, 0xA1,
0x4E, 0xEA, 0x8D, 0x4B, 0x93, 0x25, 0xE3, 0x7D, 0xAF, 0x84, 0xAF, 0x94, 0x67, 0xCE, 0xDB, 0x34,
0x4C, 0xB9, 0xF9, 0x1C, 0xB5, 0x38, 0x93, 0x1F, 0xB6, 0x3A, 0x3D, 0x8A, 0x95, 0x83, 0x2E, 0xE5,
0x15, 0xAF, 0xF1, 0x19, 0xE9, 0x6A, 0xF0, 0x0E, 0xEB, 0x38, 0xEF, 0x72, 0x24, 0xFF, 0xBD, 0x7A,
0xD5, 0xF3, 0x60, 0xEB, 0xCE, 0x7D, 0xEE, 0x98, 0x77, 0xBD, 0xB9, 0x47, 0x0B, 0x68, 0x78, 0x58,
0xFB, 0x70, 0x9B, 0x0A, 0xD0, 0xDA, 0x55, 0x48, 0xF9, 0xAD, 0xB4, 0x45, 0x41, 0x39, 0x1E, 0x12,
0x9E, 0xD8, 0xE1, 0x81, 0x82, 0x63, 0x33, 0xDC, 0x41, 0xE5, 0xC5, 0x23, 0xED, 0x4B, 0x70, 0x60,
0xED, 0x4D, 0x8B, 0xBE, 0x3F, 0xFB, 0x18, 0xB3, 0x1E, 0x61, 0x67, 0x79, 0x39, 0xCB, 0xD9, 0x58,
0x2C, 0xF1, 0x96, 0x9E, 0x1B, 0x4D, 0xD6, 0xBB, 0x80, 0x78, 0xA3, 0xCE, 0x43, 0x3C, 0x4F, 0xB5,
0xA3, 0xF2, 0xE9, 0x6D, 0x3B, 0xF5, 0xF0, 0x2E, 0x87, 0xC7, 0x56, 0x23, 0xEB, 0xCE, 0x76, 0xD7,
0x9B, 0x5C, 0x5F, 0x69, 0xDC, 0xF1, 0xF1, 0xFE, 0x69, 0xBE, 0xE4, 0xC6, 0xE6, 0xFC, 0x60, 0xF4,
0xD7, 0x36, 0x8C, 0xA7, 0xA4, 0x70, 0x24, 0x52, 0x43, 0x3C, 0xD5, 0xF0, 0xDB, 0xBB, 0xA7, 0x20,
0xB1, 0x4E, 0xC6, 0x50, 0x96, 0x33, 0xAE, 0xA8, 0x5B, 0x4F, 0x40, 0x4B, 0x6C, 0xC0, 0x80, 0xC8,
0x47, 0xF4, 0x43, 0x76, 0xB5, 0xE7, 0xC4, 0x4C, 0xBB, 0x74, 0x9C, 0xE6, 0x08, 0xB7, 0x32, 0xEE,
0x71, 0x05, 0x5B, 0x13, 0xE1, 0x64, 0x2B, 0x51, 0xD7, 0x5F, 0xE4, 0xEE, 0x16, 0x0F, 0x3F, 0x45,
0x2E, 0x19, 0xB4, 0xEC, 0x29, 0xE5, 0x3C, 0xC4, 0x0F, 0xBE, 0x86, 0x1D, 0x3B, 0xAF, 0xA5, 0xDE,
0x00, 0x66, 0x9D, 0x4C, 0xDE, 0xBA, 0x2B, 0x43, 0xB3, 0xDC, 0xC6, 0xAF, 0x75, 0x97, 0xAB, 0x9C,
0xA9, 0x67, 0x59, 0xE9, 0x42, 0x03, 0xA5, 0x3A, 0x8A, 0x44, 0x19, 0x1B, 0x9C, 0x1A, 0xB4, 0xF5,
0xB8, 0x67, 0x45, 0xD6, 0x84, 0x4F, 0xAF, 0x6E, 0x6E, 0x4C, 0xD9, 0x2D, 0x13, 0xCA, 0xF9, 0xE6,
0xD6, 0x95, 0x3A, 0xC7, 0x5C, 0x52, 0xFF, 0xBF, 0xE0, 0xDB, 0x1F, 0xFB, 0x1D, 0xFA, 0xC2, 0xB1,
0x98, 0xFD, 0x6E, 0xBC, 0x62, 0xA7, 0xB0, 0xDE, 0x63, 0x8C, 0x7F, 0xDF, 0x46, 0xEB, 0xF4, 0x0E,
0x50, 0xD9, 0x86, 0xDA, 0xE5, 0xE4, 0xC7, 0xB9, 0xDD, 0x58, 0x96, 0x09, 0xD0, 0x59, 0x8E, 0x49,
0x21, 0x6A, 0xBB, 0x8D, 0xB8, 0x33, 0xC4, 0xEC, 0x25, 0xBA, 0x70, 0xD7, 0xF8, 0xFB, 0xEF, 0x3A,
0x01, 0x58, 0xD1, 0x72, 0x47, 0xBE, 0x83, 0x0D, 0xD4, 0xDA, 0x51, 0xA4, 0x81, 0x56, 0x63, 0xEC,
0x6E, 0x4E, 0x9A, 0x6F, 0x33, 0x27, 0x62, 0x4C, 0x75, 0x9D, 0x2D, 0xCE, 0x3E, 0xE0, 0x61, 0x51,
0xDC, 0xF9, 0xA2, 0x60, 0x5B, 0x78, 0xD0, 0xBB, 0xDA, 0xC5, 0x4B, 0x5F, 0x58, 0xE5, 0xA0, 0x76,
0x0A, 0x06, 0x96, 0x84, 0xA3, 0xD9, 0x4C, 0x1C, 0x9D, 0x15, 0x97, 0x53, 0xF3, 0x5A, 0x60, 0xA7,
0xB8, 0xAE, 0x70, 0x42, 0xB5, 0xDE, 0xB7, 0x06, 0xA7, 0x90, 0x23, 0xC2, 0xB9, 0xDE, 0xF8, 0x73,
0x85, 0x73, 0xC5, 0xB7, 0x75, 0x32, 0x2D, 0x06, 0xAE, 0x4D, 0x4F, 0xF3, 0x14, 0x5C, 0xE9, 0x66,
0x59, 0x23, 0xBE, 0x59, 0xD9, 0xE6, 0x19, 0x84, 0x4B, 0x67, 0xA6, 0x09, 0x23, 0xCE, 0x12, 0x72,
0xFA, 0xC8, 0xCD, 0x11, 0xEA, 0x14, 0x61, 0x35, 0x6E, 0x0C, 0xE1, 0x78, 0xAF, 0x09, 0xF2, 0xD9,
0x22, 0xF2, 0x31, 0x8A, 0xC8, 0xEF, 0x9C, 0x29, 0x22, 0xF7, 0xBB, 0x8A, 0xC8, 0x9F, 0xA4, 0x20,
0x1B, 0x4F, 0xC7, 0xB2, 0x52, 0x7A, 0x05, 0x5F, 0x6B, 0x07, 0x49, 0x79, 0x43, 0xE1, 0xCD, 0x37,
0x13, 0xAA, 0xAE, 0xBF, 0x36, 0x6E, 0x8F, 0xFC, 0xB9, 0xF2, 0xED, 0xB4, 0x3D, 0xBA, 0xEA, 0x42,
0x2F, 0x0D, 0xAD, 0xD4, 0x8A, 0xDD, 0xF9, 0x86, 0x8F, 0x8B, 0xCB, 0xDA, 0xB9, 0xC4, 0xC9, 0xF6,
0x90, 0xA1, 0x5B, 0xA2, 0xD8, 0xB5, 0xC4, 0xEF, 0xD8, 0x59, 0xCE, 0xF7, 0xA2, 0x86, 0xDF, 0xCB,
0x34, 0x0E, 0x74, 0x07, 0xAB, 0x5D, 0x1B, 0xE3, 0xFF, 0x00, 0x7D, 0x51, 0xB1, 0x6E, 0x14, 0x31,
0x10, 0x7D, 0x6B, 0x13, 0x8C, 0xB0, 0x90, 0x29, 0x21, 0x02, 0xDC, 0xA4, 0x44, 0x98, 0x82, 0x82,
0x22, 0x7B, 0x5E, 0x48, 0x8B, 0xC4, 0xEF, 0x50, 0xDC, 0x65, 0x97, 0xCB, 0x0F, 0xF0, 0x09, 0x14,
0x14, 0x14, 0x7C, 0xC2, 0x71, 0xEB, 0x68, 0x0B, 0x4A, 0x2C, 0x51, 0xD0, 0xBA, 0xA7, 0xB1, 0x90,
0x0B, 0x47, 0xD8, 0x6B, 0xBC, 0x17, 0xDA, 0xE0, 0x91, 0x2D, 0xDB, 0x33, 0xF3, 0xE6, 0xCD, 0x9B,
0x23, 0x48, 0xE8, 0x41, 0x5B, 0xE1, 0x69, 0x44, 0xC6, 0x33, 0xDC, 0x02, 0xF0, 0x14, 0x3D, 0x66,
0x9A, 0xB8, 0x97, 0x46, 0xE3, 0x25, 0xAE, 0x57, 0xF5, 0x93, 0x82, 0xA6, 0xB8, 0x26, 0x27, 0x24,
0x35, 0x64, 0xEA, 0x33, 0x76, 0x2D, 0xEE, 0xE1, 0xF6, 0x87, 0x3B, 0x32, 0x3C, 0xE9, 0xF3, 0x6A,
0xD7, 0xE7, 0xA0, 0xE2, 0x73, 0x6E, 0x75, 0xB9, 0x1A, 0xCB, 0xDC, 0x97, 0x5C, 0xF3, 0x1E, 0x81,
0x6C, 0xC0, 0xFB, 0xEE, 0x5C, 0x97, 0x24, 0x8B, 0x23, 0x73, 0xC7, 0xA7, 0xDC, 0xFF, 0x4C, 0x2B,
0x70, 0x23, 0xB6, 0xB5, 0x8C, 0xB6, 0xFD, 0x94, 0x58, 0x94, 0xDD, 0x0A, 0xCD, 0x67, 0x56, 0xBE,
0x95, 0x3F, 0x61, 0x1F, 0xC5, 0x17, 0x6E, 0x99, 0xE3, 0x4E, 0x38, 0x66, 0xE1, 0x2B, 0x0C, 0xC9,
0x28, 0x51, 0x95, 0xC9, 0x6D, 0xD6, 0xF4, 0x97, 0x69, 0x37, 0x7C, 0x5A, 0x9E, 0x18, 0x87, 0x85,
0xDB, 0x5D, 0x9C, 0x34, 0xB1, 0x96, 0xBD, 0x9C, 0x79, 0xB8, 0x3E, 0xDE, 0x67, 0xE1, 0x74, 0x17,
0xA8, 0x01, 0xEE, 0x57, 0x0A, 0x52, 0x0C, 0x72, 0xAA, 0xED, 0xEC, 0x85, 0x11, 0xDF, 0x0D, 0x29,
0x16, 0xDA, 0x81, 0x39, 0x3C, 0x68, 0x5E, 0x79, 0x2D, 0x6C, 0x52, 0x17, 0xA1, 0xE7, 0x2E, 0x0B,
0x13, 0x15, 0xB1, 0xA7, 0x4D, 0xCD, 0x39, 0xFE, 0x88, 0xBE, 0x74, 0x63, 0xF1, 0x7B, 0x92, 0x5B,
0xA8, 0x37, 0xA0, 0x87, 0x4A, 0xA7, 0x4D, 0xA4, 0x5E, 0x18, 0x39, 0xE8, 0xAE, 0x5A, 0x15, 0x4E,
0x0E, 0xD4, 0xF3, 0x44, 0x17, 0xAB, 0x1E, 0xE6, 0x44, 0x95, 0xEC, 0x1D, 0xC4, 0x94, 0xC7, 0xB7,
0x2E, 0x09, 0xB3, 0x63, 0x56, 0xC3, 0x8B, 0x2E, 0x89, 0xCB, 0xA8, 0xA8, 0x6F, 0x99, 0x79, 0x51,
0x7B, 0x89, 0xE4, 0x10, 0xCF, 0xBD, 0x32, 0x2B, 0x9C, 0x54, 0xD8, 0x9B, 0x25, 0x61, 0x41, 0xE5,
0xB5, 0x0A, 0x32, 0xC8, 0xD8, 0xF6, 0x49, 0x3A, 0xE2, 0xA5, 0xD3, 0x8B, 0xF8, 0xFA, 0x75, 0x90,
0x20, 0x9F, 0x78, 0x16, 0x33, 0xF6, 0xF8, 0x8A, 0xC4, 0x2A, 0xDA, 0x79, 0xC5, 0x6A, 0x2C, 0x1B,
0x24, 0x5A, 0xAC, 0xEB, 0xE7, 0x98, 0x96, 0x1C, 0x6E, 0x2B, 0x93, 0x24, 0xB7, 0x41, 0x9F, 0x2D,
0x52, 0xD6, 0xFA, 0xA0, 0xA5, 0xA3, 0xC5, 0x93, 0x5C, 0x68, 0x12, 0x3F, 0x62, 0x73, 0x15, 0xEA,
0xD0, 0x51, 0xA9, 0x1C, 0xED, 0xF0, 0x78, 0xC6, 0x6E, 0x2C, 0x41, 0x17, 0xCB, 0xF2, 0x7F, 0x67,
0x7B, 0x83, 0x44, 0x68, 0xEA, 0x5E, 0x03, 0xC2, 0x2D, 0x43, 0x43, 0x3F, 0x1C, 0x6E, 0x11, 0x95,
0x12, 0x48, 0xB7, 0x04, 0x70, 0x23, 0xB7, 0xF9, 0x5F, 0x97, 0x3C, 0x2A, 0xAC, 0xF0, 0x10, 0x91,
0x39, 0xD5, 0x95, 0xDF, 0xE5, 0x22, 0xE0, 0x2F, 0xED, 0x7D, 0x4D, 0x8C, 0xE5, 0xD6, 0x95, 0xDE,
0x25, 0x29, 0x17, 0x35, 0xA2, 0x3D, 0x54, 0x00, 0x3B, 0x19, 0xA8, 0x35, 0xA1, 0x16, 0x5E, 0x0C,
0x04, 0x8D, 0xB9, 0x99, 0x85, 0x16, 0xDD, 0x4D, 0x4A, 0x02, 0x62, 0x20, 0x5A, 0xC8, 0x8B, 0x08,
0x59, 0x08, 0x88, 0xBC, 0x36, 0x02, 0xF4, 0x2C, 0x66, 0xE1, 0x45, 0x57, 0x93, 0x92, 0x80, 0x68,
0x61, 0x20, 0x6E, 0x0C, 0xBC, 0x0B, 0x10, 0x6B, 0xA1, 0x00, 0x76, 0x6B, 0x21, 0x2F, 0xB4, 0x10,
0x90, 0xAA, 0x22, 0xA5, 0x5E, 0xF4, 0x42, 0x0B, 0xD3, 0x16, 0x32, 0x06, 0x12, 0x20, 0xA6, 0xAC,
0x76, 0x82, 0xB1, 0x16, 0xA2, 0x2D, 0xDA, 0x62, 0xA9, 0x49, 0xDE, 0x9C, 0xEF, 0x3B, 0x97, 0x7C,
0xAF, 0xAA, 0xAB, 0xD4, 0x2D, 0xA7, 0x2D, 0xAB, 0x65, 0x97, 0xD4, 0x7C, 0x55, 0xEF, 0x3D, 0x92,
0xF7, 0x9E, 0x7B, 0xEE, 0xF9, 0xF9, 0xCE, 0x0F, 0x8D, 0x31, 0x0F, 0x19, 0xFC, 0x0C, 0x3C, 0x5A,
0x3D, 0xD6, 0x38, 0x16, 0x1D, 0x8E, 0xD1, 0xC8, 0xB7, 0xFE, 0xA3, 0x39, 0xE1, 0x27, 0xB1, 0xD6,
0x4E, 0x26, 0xE5, 0xD1, 0x93, 0xE3, 0xC8, 0x0B, 0xEC, 0x19, 0x33, 0xF3, 0x38, 0x19, 0xF3, 0x9A,
0xF1, 0xE4, 0xCD, 0x1F, 0x19, 0x9F, 0x57, 0x09, 0xF4, 0xC8, 0x5B, 0x05, 0x3D, 0x8E, 0xA1, 0xDE,
0xC3, 0x5A, 0x79, 0x2F, 0x5E, 0x8E, 0xF2, 0x5E, 0xDC, 0xF0, 0xFA, 0x3C, 0xA6, 0x1C, 0x4D, 0xA6,
0xC7, 0xD2, 0x78, 0x72, 0xCC, 0x4D, 0x94, 0x9B, 0x42, 0xBE, 0x96, 0x9B, 0x4A, 0xBE, 0xC0, 0xDB,
0x66, 0x66, 0x47, 0x86, 0x30, 0x9B, 0x82, 0x03, 0xA9, 0x74, 0x38, 0x32, 0x2F, 0xAF, 0xC7, 0x8D,
0x43, 0xF9, 0x23, 0x1C, 0x23, 0x3D, 0xCA, 0x6D, 0x82, 0x36, 0x6C, 0xEF, 0xC6, 0x19, 0x65, 0x72,
0xB4, 0x1D, 0x0E, 0xF6, 0x1A, 0x0E, 0x73, 0x9A, 0x27, 0xB5, 0xD7, 0xEF, 0xC9, 0x59, 0xD1, 0xD5,
0x56, 0x86, 0x93, 0xC6, 0x79, 0xDC, 0x9A, 0xD7, 0xEE, 0x91, 0x4B, 0x7A, 0x39, 0xC7, 0x2A, 0xA3,
0xE9, 0x36, 0xF7, 0x9B, 0x1F, 0xF8, 0xA1, 0x0C, 0x55, 0xCE, 0xD4, 0xC9, 0x1A, 0x53, 0x5D, 0x8E,
0x66, 0xCC, 0x43, 0x28, 0x24, 0x27, 0xC6, 0x3D, 0xC6, 0x92, 0xB4, 0x38, 0x31, 0x2B, 0x71, 0xE2,
0x8C, 0x13, 0x65, 0x86, 0x42, 0x81, 0xB8, 0xC5, 0x1C, 0x0B, 0xB9, 0xA3, 0x5C, 0x78, 0xC7, 0x5E,
0x96, 0x0B, 0x63, 0x6E, 0xD9, 0x8B, 0xD6, 0x96, 0xA0, 0xCD, 0x7A, 0xA7, 0x5C, 0x0E, 0xBE, 0x4C,
0xFD, 0x5E, 0x4E, 0x75, 0x1F, 0xC4, 0x97, 0x5B, 0xD6, 0xA0, 0x0B, 0x88, 0xB4, 0xF3, 0xC3, 0xA3,
0x54, 0xFF, 0x26, 0xC9, 0xC7, 0x53, 0x53, 0x1C, 0x3D, 0x10, 0x4C, 0xBE, 0x5B, 0xE2, 0x0D, 0xD2,
0xF6, 0xBC, 0xF9, 0x78, 0xFE, 0x1B, 0x37, 0xAB, 0x85, 0x91, 0xCF, 0xC6, 0x1B, 0xB0, 0x5A, 0x72,
0x94, 0x3F, 0x85, 0x03, 0x64, 0xB5, 0xBC, 0x0E, 0xB3, 0xF4, 0xCA, 0x93, 0x56, 0x8B, 0xC7, 0x58,
0x8F, 0x64, 0x0B, 0xB7, 0x5A, 0xF5, 0x09, 0xAB, 0xB5, 0xCC, 0x0F, 0xAB, 0x25, 0x3F, 0xD5, 0x66,
0xDF, 0xEC, 0xD8, 0xEF, 0xE1, 0x6D, 0xF2, 0x5D, 0xA5, 0xDC, 0x67, 0xBC, 0xEA, 0x90, 0x7F, 0xD9,
0x86, 0xE3, 0xCC, 0x03, 0x9B, 0xEF, 0x4C, 0x26, 0x6B, 0x64, 0xBA, 0xE0, 0xA0, 0xB8, 0x06, 0x47,
0x9C, 0x07, 0x71, 0x4D, 0x87, 0x61, 0x78, 0x7A, 0x8B, 0x23, 0xEB, 0xA6, 0x13, 0x03, 0xA5, 0x43,
0x5C, 0xC2, 0x31, 0x51, 0x81, 0x41, 0x78, 0x33, 0x67, 0x31, 0x2C, 0xE3, 0xF7, 0x70, 0x69, 0x13,
0x9B, 0xAA, 0xC6, 0xF4, 0x85, 0x80, 0x51, 0xEF, 0xD9, 0xC6, 0xB3, 0xB5, 0xBF, 0x12, 0x49, 0x4E,
0xBB, 0x30, 0x5F, 0xC6, 0x09, 0x17, 0xE6, 0x1C, 0x24, 0x6C, 0xF1, 0x6E, 0x2D, 0x4B, 0x3E, 0xCB,
0x30, 0xFC, 0x41, 0x48, 0x12, 0x35, 0x32, 0xE7, 0x14, 0x53, 0x7B, 0xCD, 0xC7, 0xB2, 0x86, 0x38,
0xC4, 0x3C, 0xE0, 0x7E, 0x31, 0xAE, 0x11, 0x61, 0x39, 0x43, 0x1C, 0x7C, 0x1C, 0x3C, 0x2C, 0x96,
0x67, 0x7D, 0x99, 0xD8, 0x28, 0x3C, 0x1C, 0x75, 0x97, 0x84, 0x70, 0x6F, 0xC8, 0xB8, 0x66, 0x99,
0x44, 0xD8, 0xCB, 0xB2, 0x56, 0x65, 0x81, 0xED, 0x50, 0x60, 0x04, 0x91, 0xBD, 0xCC, 0xE5, 0x9B,
0x85, 0x28, 0x93, 0x01, 0x27, 0x91, 0x82, 0xB8, 0xF8, 0xA4, 0x93, 0x07, 0x71, 0xB0, 0xB9, 0xB0,
0x58, 0x58, 0x2A, 0x2C, 0x14, 0xC8, 0x81, 0x49, 0x62, 0x89, 0xB0, 0x40, 0x58, 0x1E, 0x2C, 0x0E,
0x96, 0x06, 0x54, 0xC3, 0xB2, 0x14, 0x6E, 0x49, 0xAC, 0xE1, 0x65, 0x0B, 0xB9, 0x63, 0x05, 0x9E,
0xF3, 0x3B, 0xD9, 0xEF, 0x59, 0x93, 0xD5, 0x9E, 0x7D, 0xDC, 0xAA, 0x0C, 0x88, 0xEB, 0xB8, 0xBC,
0x89, 0xA1, 0x66, 0xA3, 0xDF, 0xBF, 0x70, 0xB8, 0xAC, 0xF9, 0xBC, 0x30, 0x0B, 0xB9, 0xA1, 0x5A,
0x36, 0x3D, 0xF9, 0x04, 0x77, 0xE4, 0x52, 0x71, 0xA5, 0x7E, 0x8F, 0xAF, 0x63, 0x8C, 0x42, 0xFE,
0x16, 0x02, 0x83, 0x4C, 0xE5, 0x51, 0x58, 0xE8, 0x5F, 0x3B, 0xB6, 0x39, 0xCE, 0x0A, 0x1C, 0xB0,
0xAE, 0x79, 0xBF, 0xE1, 0xD0, 0x6A, 0x23, 0x84, 0x94, 0x7D, 0x95, 0x37, 0x3E, 0xD9, 0x89, 0x1B,
0xA6, 0xF2, 0x6F, 0x3A, 0x71, 0x3C, 0xB6, 0xB7, 0xB9, 0x42, 0x0D, 0xAE, 0x11, 0xDB, 0x89, 0x2C,
0x8A, 0xB3, 0xD3, 0x5E, 0xA9, 0x18, 0x43, 0x30, 0xE1, 0x3C, 0xBC, 0x72, 0xBF, 0xCB, 0xEB, 0x75,
0xDD, 0xE3, 0x7A, 0x33, 0x73, 0xC9, 0xED, 0xA1, 0xA8, 0xD1, 0x6D, 0x2F, 0x77, 0xD0, 0xED, 0x14,
0xD7, 0x7A, 0x1B, 0xD9, 0xB3, 0x1C, 0xAD, 0xB0, 0xA1, 0x8E, 0x4C, 0xBE, 0x37, 0xBA, 0x53, 0x13,
0x8B, 0xC5, 0x89, 0xC0, 0xD3, 0x13, 0x4F, 0xCD, 0x78, 0x9B, 0xA4, 0x14, 0xBA, 0x0B, 0xE3, 0xCB,
0x37, 0xB3, 0xDC, 0x9F, 0xC1, 0x0B, 0xC2, 0x35, 0x90, 0x69, 0x0D, 0x26, 0x4A, 0xC9, 0x80, 0xBF,
0xF0, 0x31, 0xD8, 0x6C, 0xC6, 0xC7, 0xB2, 0x97, 0xE4, 0xE3, 0x09, 0x9F, 0xF9, 0xE3, 0xDF, 0x15,
0x25, 0x18, 0xAA, 0x78, 0x52, 0xD6, 0x40, 0x06, 0x9A, 0xB6, 0xD8, 0x32, 0xB2, 0x77, 0x87, 0xC8,
0x72, 0xEB, 0x4C, 0x20, 0x47, 0xA6, 0x73, 0x49, 0xEC, 0xE4, 0x61, 0x57, 0x0B, 0xBB, 0x74, 0x11,
0xE4, 0x28, 0x58, 0x86, 0x9C, 0x8C, 0x4B, 0xA8, 0x74, 0x99, 0x1D, 0x59, 0x29, 0x35, 0x9D, 0xF8,
0x57, 0xE2, 0x56, 0x6E, 0xA5, 0xC0, 0x1B, 0xA4, 0x04, 0xFE, 0x9A, 0x1C, 0x7D, 0x29, 0x94, 0xBC,
0xC9, 0x49, 0x9E, 0x88, 0xC2, 0xFE, 0xBA, 0x51, 0xD1, 0x8F, 0x19, 0xDB, 0x2B, 0x57, 0xAA, 0x5F,
0x5E, 0x98, 0xDC, 0x65, 0x45, 0xB8, 0xEA, 0x65, 0x65, 0x61, 0xF5, 0xB2, 0x71, 0xEB, 0x2E, 0x9B,
0x95, 0xEE, 0xB2, 0x93, 0xBB, 0x6C, 0xD8, 0x63, 0xE5, 0xE4, 0xB2, 0x59, 0xAD, 0xA2, 0x5D, 0xB6,
0x77, 0xC6, 0xD1, 0xA6, 0x2D, 0xC6, 0x7E, 0x41, 0x14, 0x0A, 0x66, 0x85, 0x15, 0x6C, 0x30, 0x2B,
0x99, 0xFC, 0x65, 0x77, 0xE7, 0x4E, 0x8F, 0x50, 0x46, 0xB6, 0xDD, 0xC7, 0x8D, 0x1B, 0x6A, 0x9D,
0x7A, 0x10, 0xD2, 0x46, 0x35, 0xD6, 0x2B, 0x2A, 0xBF, 0x29, 0xB7, 0xFA, 0x82, 0x0E, 0xDE, 0x1C,
0x53, 0x91, 0x32, 0x60, 0xEA, 0x9D, 0x9A, 0x52, 0x4C, 0x84, 0xCC, 0x6C, 0x92, 0x0E, 0xAB, 0x11,
0xF5, 0x18, 0xB4, 0x8C, 0x5E, 0x68, 0x25, 0x47, 0xE1, 0x2A, 0x19, 0xA9, 0x8C, 0x51, 0x46, 0x28,
0x63, 0x93, 0x8F, 0x84, 0xE8, 0xF2, 0x51, 0x46, 0xC1, 0x57, 0x80, 0x75, 0xB9, 0xB3, 0xAF, 0x67,
0x76, 0x0C, 0xED, 0x5C, 0x60, 0x75, 0xA6, 0xED, 0x4D, 0xFC, 0x97, 0x66, 0x4B, 0x30, 0x87, 0x6A,
0xD1, 0xA4, 0x93, 0x6E, 0x2E, 0x2E, 0x4B, 0xA0, 0x9C, 0xE5, 0xE7, 0x27, 0x28, 0x14, 0x91, 0x46,
0x42, 0x0C, 0x59, 0xF7, 0x54, 0xC8, 0x2A, 0xCB, 0x4B, 0xA1, 0x29, 0xE3, 0xA6, 0x52, 0x89, 0xFA,
0xAF, 0x82, 0x96, 0x5C, 0x96, 0x89, 0x2B, 0x2A, 0xE4, 0x9C, 0x38, 0x53, 0xBF, 0xE7, 0x24, 0x69,
0x54, 0x04, 0x43, 0x5C, 0x73, 0xA3, 0xA5, 0x64, 0xF1, 0x8F, 0xF6, 0xD5, 0x22, 0xE0, 0x10, 0xE2,
0xDF, 0x59, 0xDD, 0x6D, 0xDC, 0x69, 0x49, 0x43, 0x99, 0x91, 0x52, 0x0B, 0xC8, 0x6C, 0xA9, 0x82,
0x44, 0xED, 0xF6, 0x64, 0x04, 0x52, 0xAE, 0x30, 0x14, 0xC1, 0x95, 0x4A, 0x48, 0xE8, 0xEB, 0x9A,
0x6C, 0x96, 0xB5, 0x22, 0xDC, 0x26, 0x93, 0x0C, 0x54, 0x35, 0xC1, 0x21, 0x67, 0xE4, 0xA6, 0x11,
0xD5, 0x6E, 0x23, 0x2E, 0x1B, 0xD2, 0xD1, 0x27, 0xB0, 0x6E, 0xCA, 0x45, 0xA3, 0xAF, 0x3B, 0xB5,
0x39, 0xFD, 0x07, 0xC2, 0x50, 0x18, 0x81, 0xD4, 0x48, 0x9C, 0x98, 0x5E, 0x45, 0x75, 0xA5, 0xEC,
0xED, 0x39, 0x91, 0x1D, 0x3A, 0xB1, 0x9D, 0x4C, 0xBA, 0xEC, 0x85, 0x8A, 0x6F, 0xEF, 0x86, 0x8A,
0xF0, 0xF0, 0x5D, 0x15, 0xE3, 0xC9, 0x0B, 0x2A, 0xCA, 0x2F, 0x41, 0x08, 0x45, 0x9D, 0x3F, 0xA8,
0x48, 0x8F, 0x5A, 0x15, 0xEB, 0x69, 0xAE, 0xA2, 0x7D, 0x5F, 0xC5, 0xFB, 0x9B, 0x3D, 0x55, 0x5D,
0xFA, 0x56, 0xA3, 0x62, 0xFE, 0xFD, 0x5C, 0x45, 0xFD, 0xE4, 0xC4, 0x7D, 0xEF, 0x44, 0x7E, 0xB3,
0x11, 0xFB, 0x4E, 0xF4, 0x2F, 0xE2, 0x7F, 0x51, 0x01, 0x99, 0x53, 0x03, 0x95, 0x32, 0x80, 0x12,
0xEA, 0x1B, 0xE6, 0x51, 0x39, 0xEE, 0x0A, 0xD7, 0x72, 0x9B, 0xF6, 0x9C, 0x51, 0x06, 0xF2, 0x1D,
0x5E, 0xA8, 0x29, 0xD4, 0x28, 0x4B, 0xAB, 0xEB, 0x27, 0x52, 0x47, 0x84, 0x4F, 0x1D, 0xD9, 0x19,
0x57, 0x96, 0xBD, 0x52, 0x88, 0xA1, 0x51, 0x35, 0xA0, 0x46, 0x48, 0x9E, 0x06, 0x4D, 0x60, 0xC7,
0x95, 0xE0, 0x68, 0x88, 0xB8, 0x8C, 0x06, 0x92, 0x90, 0x24, 0x29, 0xB1, 0xDE, 0x78, 0x4B, 0xE8,
0xB5, 0x4F, 0x56, 0x20, 0xB7, 0xCC, 0x14, 0x84, 0x61, 0xB7, 0x4B, 0x21, 0xC0, 0xB7, 0x82, 0xDF,
0xA9, 0x49, 0x34, 0x2B, 0xEF, 0xD6, 0x5B, 0x4B, 0x3A, 0x3B, 0x61, 0xB9, 0x1A, 0x4E, 0x41, 0xC9,
0x35, 0x2E, 0xAA, 0x92, 0xBC, 0xA6, 0x5A, 0x80, 0xB2, 0xD6, 0x1F, 0x36, 0xCB, 0x89, 0x7D, 0x27,
0xF2, 0x2A, 0x84, 0x78, 0xA6, 0xB8, 0x6A, 0xA8, 0x86, 0xB8, 0x51, 0x67, 0x95, 0xF0, 0x10, 0x2A,
0xA0, 0x6E, 0x52, 0xAB, 0x40, 0xAA, 0x54, 0x63, 0x04, 0x2A, 0x37, 0x28, 0xA7, 0x2A, 0x15, 0x53,
0x10, 0xE5, 0x58, 0x73, 0xAC, 0x15, 0xCE, 0x04, 0x47, 0xDF, 0xC6, 0xC5, 0xBA, 0xDB, 0xBB, 0x98,
0x59, 0x2F, 0x06, 0xED, 0x21, 0x12, 0xDF, 0xA3, 0xF8, 0xB3, 0x4E, 0x1E, 0x0E, 0xAB, 0x7C, 0x59,
0x0C, 0xB7, 0x45, 0x57, 0x39, 0x39, 0xBA, 0x18, 0x94, 0xF2, 0xB1, 0x7B, 0xFB, 0x9C, 0x5B, 0x39,
0xF7, 0x76, 0xB0, 0x2A, 0xFF, 0x33, 0xDB, 0x02, 0xC3, 0xD3, 0x3D, 0x12, 0x50, 0x81, 0x89, 0xF8,
0xE0, 0x4B, 0xFC, 0x73, 0xB5, 0x04, 0x55, 0x6B, 0x9E, 0x57, 0x8D, 0xB4, 0xA7, 0x2F, 0x83, 0x0A,
0x72, 0x5A, 0x6F, 0x26, 0x6C, 0xF9, 0x12, 0xD7, 0x94, 0xE1, 0xD4, 0x48, 0xB0, 0xE3, 0xA9, 0xF5,
0xF6, 0x55, 0x14, 0xAA, 0x9D, 0xAA, 0xF6, 0x98, 0x09, 0x3F, 0xBA, 0x72, 0x65, 0xE2, 0xAC, 0xC1,
0x3B, 0xB8, 0xFC, 0x6C, 0xC8, 0x83, 0xC2, 0xC0, 0x07, 0xFA, 0x42, 0x6B, 0x32, 0x0F, 0x48, 0xBE,
0xA6, 0x90, 0x95, 0x15, 0x93, 0x09, 0x16, 0x43, 0xC6, 0x6D, 0x69, 0xC9, 0xD9, 0xF8, 0x3B, 0xA1,
0x6D, 0x27, 0x34, 0xA3, 0xB7, 0xE2, 0x77, 0x20, 0xBE, 0x4C, 0x5D, 0xAE, 0x79, 0x96, 0x73, 0xCB,
0x9D, 0x24, 0x56, 0x0B, 0x41, 0xD5, 0xB8, 0xFD, 0xE8, 0xF2, 0xE2, 0xAB, 0xA8, 0x95, 0x39, 0x43,
0xEE, 0xE1, 0x44, 0xCA, 0xE1, 0xA4, 0xC5, 0x89, 0x59, 0x19, 0xF0, 0x13, 0x39, 0x31, 0x50, 0xEF,
0xA0, 0xF6, 0x68, 0x69, 0x47, 0x94, 0xDD, 0x72, 0xC7, 0xAA, 0xC4, 0x1A, 0x0D, 0xDE, 0xB2, 0x3E,
0x33, 0x2F, 0x5E, 0x41, 0x69, 0x55, 0xB8, 0x6C, 0xC8, 0xC9, 0xFE, 0xC5, 0x85, 0x3A, 0x19, 0x78,
0x21, 0x8E, 0x4D, 0x18, 0x40, 0x6E, 0x51, 0x60, 0x6C, 0xB2, 0x90, 0xC2, 0xA5, 0xAA, 0xA9, 0x0B,
0x8C, 0x4D, 0x38, 0xCE, 0xB3, 0xBF, 0xA2, 0xA1, 0x88, 0x1D, 0xAB, 0x63, 0x9B, 0xCC, 0x85, 0x81,
0x63, 0xEB, 0x38, 0xB6, 0xC6, 0x8D, 0x4D, 0x2F, 0xD9, 0x80, 0xC6, 0x54, 0x11, 0x47, 0xC6, 0x56,
0x9E, 0x3C, 0xB6, 0xBB, 0xC0, 0x71, 0x00, 0xCD, 0xD4, 0xBC, 0x50, 0x7E, 0xA9, 0x2C, 0xAD, 0x1E,
0xDF, 0xD9, 0x45, 0x99, 0xB3, 0x2C, 0x9C, 0x55, 0xB4, 0xAB, 0xB7, 0x14, 0x9B, 0x68, 0x54, 0x6B,
0x8A, 0xF7, 0x8B, 0x95, 0xFF, 0x84, 0x17, 0x32, 0x3D, 0x87, 0xA3, 0x0E, 0x1B, 0xBD, 0xF7, 0xA8,
0x43, 0x4E, 0xD4, 0x75, 0x93, 0x2F, 0x51, 0x9C, 0x9C, 0x77, 0x16, 0x6A, 0x03, 0xE1, 0x85, 0x2F,
0x71, 0xD6, 0x30, 0x26, 0x72, 0xB0, 0xB7, 0x5E, 0x62, 0xD4, 0x49, 0xC8, 0x37, 0xA2, 0x56, 0xA9,
0x20, 0x83, 0x3A, 0xA3, 0xFB, 0x34, 0x74, 0x66, 0x4A, 0xC5, 0x57, 0x35, 0xE7, 0x84, 0x7E, 0x3A,
0xEA, 0xF2, 0xC8, 0xA8, 0x0B, 0xBD, 0xA5, 0x5C, 0x95, 0x94, 0xBD, 0x08, 0xEF, 0x97, 0xDA, 0x8B,
0x04, 0xFD, 0x87, 0xBB, 0x02, 0x61, 0x10, 0xC6, 0x15, 0x35, 0xA0, 0x2F, 0xB4, 0x86, 0xC5, 0xD4,
0x88, 0xA1, 0x1A, 0x84, 0xCA, 0x93, 0xC1, 0x8B, 0x68, 0x70, 0xF9, 0xA2, 0x0F, 0x73, 0xC6, 0x44,
0xC3, 0x5F, 0x71, 0x0D, 0x0B, 0x77, 0xE7, 0x51, 0x76, 0x39, 0x2D, 0x01, 0x99, 0xCD, 0xE4, 0x04,
0xD7, 0x79, 0xA3, 0xD6, 0x84, 0xDC, 0xD6, 0x1B, 0x1D, 0x4A, 0x11, 0x3F, 0x3E, 0xAA, 0xB0, 0x37,
0xF1, 0xF3, 0x43, 0xAA, 0xF2, 0x2A, 0xB5, 0x8B, 0xDD, 0x53, 0xD0, 0x91, 0x27, 0x3B, 0x85, 0x9D,
0x5E, 0x2E, 0x18, 0xA3, 0x4E, 0x79, 0x2E, 0xEE, 0x45, 0xB1, 0x2A, 0x3F, 0xB6, 0xA2, 0x6B, 0x54,
0x33, 0xD4, 0x8B, 0x9D, 0x6D, 0x85, 0x71, 0x48, 0xAE, 0x00, 0x76, 0x8D, 0xBA, 0x2A, 0xB2, 0x91,
0x4A, 0x0F, 0x17, 0xCC, 0x68, 0x2A, 0x43, 0x20, 0x8A, 0xF2, 0xC9, 0x70, 0x1A, 0xEC, 0x29, 0x4F,
0x94, 0xAA, 0xF8, 0x73, 0x22, 0x28, 0x62, 0x21, 0x67, 0x2C, 0xA6, 0x12, 0x7C, 0xDB, 0x9E, 0x76,
0x0A, 0xDD, 0xDD, 0x4A, 0xE8, 0x11, 0x82, 0x50, 0x69, 0x29, 0xC6, 0xE9, 0x9E, 0xE8, 0x8F, 0x00,
0x76, 0xB8, 0x08, 0xA3, 0xAC, 0x7C, 0x44, 0xC5, 0x73, 0xD8, 0xB9, 0x3D, 0xC1, 0x65, 0x83, 0x3B,
0x8C, 0xB9, 0x24, 0xD8, 0xEC, 0x05, 0x65, 0x3B, 0x71, 0x80, 0xB4, 0x5D, 0x96, 0xC5, 0x7A, 0x58,
0x55, 0x11, 0x64, 0xC9, 0x4F, 0xE5, 0x2B, 0x96, 0x56, 0x63, 0xDA, 0x89, 0xD3, 0x99, 0xAD, 0x3E,
0xE5, 0x99, 0xD5, 0xA7, 0xFC, 0x9C, 0x1A, 0x2D, 0x9B, 0x1F, 0xB2, 0x4E, 0x9C, 0x7B, 0x8D, 0xCA,
0x94, 0xA0, 0x71, 0x7B, 0x4B, 0x19, 0xF8, 0x97, 0x95, 0xD3, 0xF7, 0x83, 0x33, 0x54, 0x2E, 0xFF,
0x09, 0x1A, 0x79, 0x77, 0xB7, 0x25, 0xEF, 0x3C, 0xE8, 0xC0, 0xE9, 0x80, 0x0B, 0x4E, 0x6D, 0x8D,
0xAA, 0x2E, 0x2E, 0xA9, 0x74, 0x17, 0x42, 0x36, 0x1B, 0x5B, 0x43, 0xF1, 0x24, 0xA8, 0x2C, 0xAB,
0xE2, 0x84, 0xDF, 0x71, 0x6A, 0x22, 0x29, 0xF9, 0x1D, 0xA7, 0x1E, 0x64, 0x37, 0x62, 0x45, 0xBD,
0x41, 0xBF, 0x33, 0xEA, 0x77, 0x0A, 0xB7, 0x29, 0x73, 0x7E, 0x47, 0xD4, 0xC9, 0xAC, 0xEA, 0x0C,
0xD4, 0x8F, 0xE8, 0x28, 0xC3, 0x10, 0x94, 0xEF, 0x04, 0x5F, 0x1F, 0xA8, 0xB1, 0x95, 0x92, 0xA4,
0x6B, 0x35, 0x80, 0xCA, 0x30, 0x2B, 0x85, 0x0F, 0x02, 0x8E, 0xD9, 0x03, 0x94, 0xE2, 0xAB, 0xD8,
0x86, 0x36, 0x03, 0xDF, 0x58, 0xCC, 0xEC, 0x32, 0x0E, 0xFA, 0x07, 0x0F, 0x19, 0x96, 0x33, 0xAD,
0x72, 0x73, 0x89, 0xA6, 0xA0, 0xDC, 0x6E, 0x3C, 0xE0, 0x2F, 0xA5, 0x37, 0x60, 0x08, 0x97, 0xD2,
0x32, 0xE8, 0xF0, 0xCB, 0x7E, 0x5A, 0x87, 0x0D, 0x7E, 0x19, 0x13, 0x11, 0x5F, 0xE4, 0xC5, 0xA4,
0x4E, 0x72, 0x30, 0x63, 0x1F, 0x37, 0x19, 0xED, 0xEB, 0x0E, 0x7C, 0x35, 0xF2, 0x97, 0x76, 0x00,
0xAF, 0x8A, 0x41, 0xF6, 0x9B, 0x0E, 0xBF, 0x44, 0x4D, 0xF8, 0x01, 0x51, 0x4D, 0xA1, 0xD7, 0x0D,
0x1A, 0x30, 0x22, 0xF8, 0x6C, 0x89, 0xC9, 0xCA, 0x0D, 0x2C, 0x19, 0x5A, 0xE6, 0x3E, 0xE9, 0x2F,
0x38, 0x42, 0x2C, 0x5E, 0x02, 0x41, 0x03, 0x9A, 0x04, 0xE2, 0x2F, 0xC8, 0x2F, 0x3E, 0x17, 0x22,
0x9A, 0xF3, 0x8C, 0x18, 0xA5, 0x4C, 0xB5, 0x82, 0xB1, 0xED, 0xC1, 0xAF, 0x3D, 0x75, 0x2F, 0x55,
0x9B, 0xBD, 0xB4, 0x60, 0x5C, 0xC4, 0xB9, 0xDC, 0x3F, 0x7F, 0x0B, 0xEF, 0xF2, 0x17, 0xCC, 0xCB,
0xE1, 0x5E, 0xC4, 0xBE, 0xDC, 0x3F, 0x5A, 0xBE, 0x9D, 0xE3, 0x0E, 0xBC, 0x8A, 0xF1, 0xF8, 0xAA,
0xC3, 0xC2, 0xB8, 0x97, 0xDC, 0xBF, 0x74, 0x0B, 0x17, 0x4B, 0x17, 0x6C, 0xCC, 0xE1, 0x63, 0x0B,
0x46, 0x06, 0xA6, 0xBD, 0x6D, 0xD9, 0xA3, 0x20, 0xA6, 0x4F, 0x7D, 0xE7, 0x29, 0xA6, 0x53, 0x35,
0xD0, 0x09, 0x22, 0xA0, 0x7D, 0x0B, 0x43, 0x4B, 0xB4, 0x0C, 0xA5, 0x44, 0x51, 0xE2, 0xA6, 0xA2,
0x7C, 0xC8, 0xF7, 0xB5, 0xA5, 0x26, 0xE2, 0x96, 0x48, 0xAF, 0x8E, 0xDC, 0x5E, 0xDC, 0x26, 0xD9,
0x55, 0xAA, 0x9C, 0xB1, 0x20, 0x8F, 0xBE, 0xD8, 0x73, 0x8F, 0x71, 0x1F, 0x55, 0x84, 0xA7, 0xE2,
0x16, 0x9F, 0xF8, 0x13, 0xF7, 0x4D, 0x56, 0xE3, 0x9C, 0xB8, 0x03, 0xA4, 0x23, 0xEB, 0x03, 0x0F,
0x48, 0xC4, 0x7D, 0xD1, 0x62, 0x0C, 0xBE, 0x8E, 0x26, 0x54, 0x87, 0x60, 0x47, 0x51, 0xA6, 0xC4,
0x2A, 0x81, 0xD4, 0x02, 0x29, 0xF5, 0x6F, 0xF5, 0x74, 0x08, 0x4C, 0x6C, 0x3B, 0x27, 0xF5, 0x6A,
0x75, 0x83, 0x14, 0x81, 0xF3, 0x74, 0x92, 0x63, 0xCE, 0xC9, 0xE8, 0x9C, 0x13, 0x67, 0xEC, 0x64,
0xEA, 0xE9, 0x78, 0xE3, 0x1D, 0xBE, 0x18, 0xA8, 0x9F, 0xD2, 0xD3, 0x69, 0x23, 0xB5, 0x56, 0xF3,
0x8C, 0xE6, 0xA0, 0xF7, 0xAA, 0x7D, 0x89, 0xA6, 0xE0, 0xB0, 0x65, 0x4B, 0x8F, 0x8B, 0x2D, 0x3D,
0x60, 0xD5, 0xE5, 0x7F, 0x59, 0xE3, 0x02, 0x8C, 0xE5, 0xAB, 0x09, 0xDF, 0xE2, 0xCE, 0x72, 0xF5,
0x19, 0xB3, 0x86, 0x3D, 0x2C, 0x14, 0xC9, 0x85, 0x21, 0x2E, 0xF4, 0x74, 0x42, 0x72, 0xB7, 0x51,
0x13, 0x82, 0xC1, 0xD5, 0xC6, 0x7A, 0xDA, 0x76, 0x10, 0x8E, 0x87, 0x0F, 0xC8, 0xCE, 0x1E, 0x69,
0x1E, 0x59, 0xF5, 0x48, 0xC5, 0x34, 0x3D, 0x54, 0xB7, 0xE6, 0x04, 0x88, 0x7B, 0xBA, 0x4D, 0x88,
0xFB, 0x26, 0x78, 0xF2, 0x74, 0x88, 0x9B, 0xE6, 0x82, 0xA1, 0xF4, 0x34, 0x0F, 0x02, 0xE2, 0xF6,
0xC5, 0x0E, 0x10, 0x63, 0xAB, 0x54, 0x5E, 0xF0, 0x60, 0x78, 0x28, 0xB6, 0xAD, 0xB8, 0xD5, 0x07,
0xE4, 0x02, 0xC2, 0x56, 0xEF, 0x35, 0x42, 0xAB, 0x5D, 0x11, 0x8D, 0x79, 0xF4, 0x73, 0x48, 0xC4,
0x3D, 0x20, 0x66, 0xD1, 0x7F, 0xC2, 0x65, 0x5F, 0x72, 0xB7, 0x8F, 0x37, 0x90, 0x2B, 0x95, 0x83,
0x92, 0x84, 0xE3, 0x53, 0x7B, 0xB2, 0xD8, 0x8C, 0xDA, 0x6E, 0xA8, 0x35, 0xAD, 0x56, 0xBF, 0xDA,
0xA1, 0x24, 0x16, 0xED, 0x2A, 0x0F, 0x3C, 0x19, 0x70, 0xBF, 0x16, 0x1C, 0x59, 0x4A, 0xDB, 0xF1,
0x5D, 0x61, 0x4C, 0xB1, 0x16, 0xE1, 0x5F, 0x9E, 0x99, 0xE0, 0x68, 0xE1, 0xC2, 0x96, 0xF7, 0x97,
0x8B, 0xC3, 0x67, 0x97, 0xC9, 0x67, 0xBC, 0x46, 0x4C, 0xD6, 0x85, 0x5F, 0x22, 0xD7, 0xCE, 0x78,
0x9F, 0xA8, 0xE1, 0x3D, 0x15, 0x58, 0xA6, 0x6D, 0x5F, 0x84, 0x6A, 0x58, 0xEB, 0xDD, 0x2F, 0xA8,
0xE2, 0xE7, 0xD0, 0x12, 0xF5, 0x27, 0xD4, 0xAD, 0xD5, 0xD1, 0x3A, 0x24, 0x95, 0x27, 0x3E, 0xCA,
0x19, 0x87, 0x37, 0x48, 0xDF, 0x6A, 0xDE, 0x72, 0x7A, 0xD3, 0xC5, 0x41, 0x0E, 0xD5, 0xBA, 0x2C,
0x6C, 0xB3, 0x59, 0x2B, 0x25, 0x86, 0x57, 0x7C, 0x6F, 0x35, 0x44, 0xD5, 0x9B, 0x4A, 0xA6, 0xA8,
0x2D, 0xBA, 0x00, 0xB6, 0x6C, 0x55, 0x8A, 0x41, 0x2C, 0x26, 0x65, 0x0A, 0x69, 0x9B, 0xCA, 0x8E,
0x4F, 0x4B, 0x6F, 0x2C, 0x30, 0xB7, 0xE4, 0x2D, 0x42, 0xB4, 0xA3, 0x25, 0x56, 0xFB, 0xE3, 0x4E,
0xE6, 0x1E, 0x0C, 0x16, 0xBE, 0x44, 0xF5, 0x64, 0x67, 0x40, 0x0E, 0x1A, 0xA8, 0xA3, 0x70, 0xD2,
0x28, 0x06, 0x27, 0xF7, 0x6F, 0xCD, 0xD5, 0xA4, 0x32, 0xA4, 0x08, 0xD6, 0x01, 0xE8, 0x1C, 0xDC,
0x7A, 0x9C, 0xA1, 0x10, 0x08, 0x14, 0x7B, 0xC6, 0x06, 0xC2, 0xF7, 0x85, 0xF2, 0x31, 0xCC, 0x6F,
0x59, 0x86, 0xE4, 0x50, 0xD7, 0x93, 0xAB, 0xD0, 0xE8, 0x44, 0x66, 0x3D, 0x37, 0xEA, 0xDC, 0xBA,
0x95, 0x85, 0x22, 0x97, 0x6A, 0x4B, 0xC5, 0x6F, 0xEB, 0x5D, 0xAA, 0x7D, 0xB3, 0x05, 0x0A, 0xA8,
0x5D, 0xBA, 0xE2, 0x88, 0xA6, 0x52, 0x44, 0x21, 0xAD, 0x14, 0x32, 0xF8, 0x05, 0xAF, 0xE4, 0x8D,
0x6E, 0x1F, 0xE9, 0xD6, 0x8A, 0x1B, 0xB5, 0xB2, 0x07, 0x65, 0xAB, 0xCA, 0x8D, 0xA2, 0x26, 0x4B,
0x43, 0xF1, 0x8A, 0xC0, 0xDB, 0x81, 0xC3, 0x3B, 0xE7, 0x42, 0xEE, 0x3C, 0x26, 0xF6, 0xDA, 0x69,
0x34, 0xE0, 0xD3, 0x46, 0x6E, 0xE2, 0xDB, 0x43, 0x6E, 0xEC, 0xED, 0x21, 0x37, 0x73, 0xEE, 0x90,
0x9B, 0x5A, 0x91, 0x1B, 0x47, 0xB4, 0xC8, 0x19, 0xB5, 0xA9, 0x83, 0x20, 0x0F, 0x1C, 0x2A, 0xB3,
0x40, 0x96, 0xEE, 0xED, 0x25, 0xF0, 0xE7, 0xDE, 0x0E, 0xA0, 0xCE, 0x6C, 0x2F, 0x57, 0x7A, 0xD6,
0x0A, 0x7B, 0xD8, 0x37, 0xAA, 0x1E, 0xF8, 0x58, 0x44, 0xC4, 0x0D, 0x23, 0xA1, 0x00, 0x24, 0xC2,
0x9D, 0x3B, 0xA0, 0x40, 0xDE, 0x75, 0x1F, 0xAB, 0xD7, 0x3A, 0x3B, 0x00, 0xDC, 0x41, 0xCF, 0x38,
0xC9, 0x96, 0xA1, 0x63, 0x60, 0x05, 0x66, 0x10, 0x98, 0xF9, 0xE1, 0x53, 0xDD, 0xC6, 0x95, 0x74,
0x9E, 0x59, 0xB1, 0x35, 0xE2, 0x78, 0xEB, 0x63, 0xCF, 0xA1, 0xCB, 0x97, 0xD5, 0x74, 0xD3, 0x2D,
0x03, 0x65, 0x60, 0x47, 0x71, 0x91, 0x68, 0x83, 0xDA, 0x3E, 0x01, 0x82, 0x3E, 0x08, 0x4D, 0x4A,
0x59, 0xE7, 0x90, 0x4E, 0x95, 0xD1, 0xC0, 0x03, 0x61, 0x87, 0x51, 0xC9, 0x3F, 0x2D, 0x96, 0x87,
0xBE, 0x01, 0x72, 0xE8, 0x1B, 0x6E, 0x29, 0x83, 0x5E, 0xD7, 0x61, 0xC0, 0x8B, 0x5B, 0xF5, 0x88,
0x51, 0x0E, 0xF7, 0x86, 0x5B, 0x06, 0x95, 0xFE, 0x18, 0xA5, 0xBC, 0xE1, 0x34, 0x90, 0xBC, 0x70,
0xED, 0x68, 0x69, 0xBB, 0xC5, 0x55, 0x4A, 0xB9, 0x37, 0x0A, 0xDD, 0xDE, 0x59, 0xAE, 0x8C, 0x52,
0x2A, 0x3A, 0x63, 0xDC, 0x1B, 0xB3, 0x52, 0xA0, 0x5A, 0x19, 0x62, 0x5E, 0x35, 0xE0, 0xE4, 0x96,
0xFB, 0x57, 0xAF, 0xD8, 0x2B, 0xAF, 0xCA, 0xF6, 0x2C, 0x74, 0xC5, 0x57, 0x1D, 0x0C, 0x7C, 0xEA,
0x4F, 0x95, 0x1A, 0x97, 0x57, 0x6A, 0x0C, 0x2B, 0x35, 0x86, 0xC5, 0xFD, 0x8A, 0x56, 0xD7, 0x2E,
0xEA, 0xD6, 0xDF, 0xD6, 0xC4, 0x84, 0xB8, 0x59, 0x7F, 0x5B, 0x81, 0xFA, 0x4D, 0xCC, 0x32, 0x36,
0x5B, 0xBF, 0x41, 0x38, 0xD2, 0x5F, 0xE8, 0x70, 0xBB, 0x06, 0x81, 0xB5, 0x1E, 0x5E, 0x00, 0x20,
0x0C, 0x86, 0xF1, 0x89, 0x1B, 0x85, 0xA7, 0xA9, 0xAB, 0xF7, 0x5F, 0xA6, 0xE0, 0x54, 0x1C, 0xB0,
0x13, 0xE2, 0x01, 0x6E, 0xAE, 0x00, 0x0A, 0x30, 0x9E, 0x44, 0x3B, 0x9F, 0xB1, 0xB2, 0x56, 0x51,
0x32, 0x08, 0x2E, 0x48, 0x34, 0x9F, 0x48, 0x53, 0x01, 0xC0, 0x2E, 0x65, 0x1C, 0x79, 0xF0, 0x35,
0x4E, 0xB6, 0x04, 0xC9, 0x66, 0x9A, 0x63, 0x0C, 0xF3, 0x6E, 0x62, 0xBD, 0xAB, 0x83, 0xB9, 0x5A,
0xC5, 0xFC, 0x6B, 0x72, 0x46, 0x00, 0xE9, 0xB8, 0x18, 0xC6, 0xFC, 0x2B, 0x18, 0xCD, 0xC6, 0x34,
0x5E, 0x6D, 0x63, 0xFE, 0x12, 0x7E, 0xF4, 0xDF, 0x56, 0xEB, 0x58, 0xD1, 0xA9, 0x18, 0x7A, 0x88,
0x3E, 0x67, 0x2B, 0xCA, 0xC3, 0x05, 0x8B, 0x2B, 0x86, 0xC2, 0x60, 0x10, 0xD5, 0xCE, 0x44, 0xCE,
0x6A, 0x67, 0x23, 0xA7, 0xB5, 0x33, 0x92, 0xC5, 0xD0, 0x2C, 0x5D, 0xDC, 0xCC, 0x99, 0xC9, 0xC5,
0x62, 0x27, 0xCF, 0xCE, 0x50, 0x8E, 0x46, 0xFC, 0x02, 0xB9, 0xD6, 0xA9, 0xA9, 0xEC, 0x4C, 0x34,
0x59, 0xD8, 0x97, 0xE5, 0x30, 0xB8, 0x29, 0xFB, 0xD4, 0x54, 0x1A, 0x0D, 0x54, 0x41, 0x71, 0x9B,
0xC6, 0xC5, 0x95, 0x6F, 0x18, 0x87, 0x79, 0x72, 0x29, 0xE3, 0xD6, 0x67, 0x66, 0x05, 0xE2, 0x06,
0x80, 0x63, 0xFD, 0xD1, 0xE5, 0x63, 0xC4, 0xAD, 0x3A, 0x25, 0x44, 0x3C, 0x43, 0x02, 0x94, 0x15,
0x60, 0x62, 0xB9, 0x19, 0x22, 0x79, 0xB2, 0x0E, 0xE1, 0x02, 0xC2, 0x5D, 0xA7, 0xFD, 0xA8, 0x83,
0x9A, 0x1D, 0x96, 0x2A, 0x67, 0x88, 0xFD, 0xBC, 0x0F, 0xAB, 0x40, 0x38, 0x2B, 0x1C, 0x81, 0xBF,
0x89, 0xCF, 0x6A, 0xD4, 0x43, 0x55, 0xEB, 0x4B, 0xED, 0x2E, 0xE5, 0x97, 0x99, 0x66, 0x7F, 0xA3,
0x9A, 0xDE, 0x49, 0xC8, 0xED, 0xD1, 0x87, 0xCE, 0x1E, 0xC2, 0xDE, 0x69, 0xCE, 0xC2, 0x5A, 0x83,
0x85, 0x62, 0xB1, 0xAA, 0x85, 0xE8, 0x71, 0xA4, 0x12, 0x11, 0xA8, 0xF1, 0x68, 0x29, 0xC0, 0x5D,
0x5C, 0x98, 0x03, 0x71, 0x76, 0x52, 0xAB, 0xC2, 0x27, 0xF7, 0x29, 0x4D, 0x07, 0x6E, 0x87, 0x14,
0xA9, 0x0B, 0x0C, 0xD3, 0xC2, 0xA7, 0x04, 0xF5, 0x30, 0x24, 0x31, 0xFF, 0x3D, 0x85, 0x37, 0x2B,
0x04, 0x6B, 0x23, 0x55, 0x4A, 0x0E, 0x60, 0xCC, 0xB0, 0x71, 0xC1, 0xD7, 0x14, 0x16, 0x64, 0x1F,
0xC4, 0x73, 0xAF, 0x54, 0x8A, 0x34, 0x29, 0x65, 0xF1, 0x96, 0x02, 0x66, 0x3E, 0x20, 0xD0, 0xC8,
0x41, 0x51, 0x93, 0x06, 0xEB, 0x01, 0x7C, 0xF3, 0xAD, 0x02, 0x1F, 0x57, 0xBA, 0x1F, 0xB3, 0x92,
0x66, 0x29, 0x55, 0x4C, 0x51, 0x3A, 0xFD, 0x82, 0xF9, 0x23, 0xA6, 0xDA, 0xD1, 0x20, 0x65, 0xC0,
0x07, 0xC1, 0x03, 0xF9, 0x1C, 0x72, 0x66, 0x86, 0x95, 0xB0, 0x23, 0x66, 0x3B, 0x83, 0xD3, 0xD4,
0xDB, 0x9C, 0x18, 0x3C, 0x2A, 0x47, 0x00, 0x42, 0xA6, 0x1A, 0xED, 0x07, 0x41, 0x35, 0xCA, 0x1B,
0x1F, 0x2A, 0xCE, 0x91, 0xFB, 0xC3, 0x6A, 0xFD, 0xA5, 0x44, 0xDF, 0x9C, 0x84, 0x51, 0x61, 0x87,
0x85, 0x49, 0x75, 0x24, 0x13, 0xFD, 0x2E, 0x46, 0x3B, 0x2C, 0x63, 0xF2, 0xC6, 0x29, 0x59, 0x17,
0x25, 0xB1, 0xAF, 0x12, 0x02, 0xA8, 0x69, 0x2A, 0x4D, 0x2E, 0xFF, 0x80, 0x42, 0xA6, 0x32, 0x69,
0x4E, 0xD3, 0x9A, 0x22, 0x8C, 0x41, 0xA9, 0x84, 0x9C, 0x86, 0x78, 0xBE, 0xF8, 0x0A, 0x96, 0x00,
0xA6, 0x6F, 0x9B, 0x40, 0x3D, 0xFB, 0x44, 0x91, 0x8F, 0xA2, 0xD9, 0x93, 0x09, 0x7D, 0x84, 0xBF,
0x65, 0x32, 0x45, 0x59, 0x74, 0xB2, 0x30, 0x49, 0xCB, 0xC1, 0x22, 0xFC, 0x55, 0x53, 0xBA, 0x42,
0x9C, 0x96, 0x29, 0xE4, 0x67, 0x06, 0x24, 0x35, 0x03, 0x3F, 0x14, 0xE0, 0xAA, 0x02, 0x86, 0x53,
0x61, 0xE2, 0x7D, 0xD9, 0x5C, 0x5F, 0xDB, 0x8D, 0x8B, 0x7A, 0xDC, 0x3D, 0x2F, 0xDE, 0x74, 0x25,
0xAA, 0xA1, 0x2C, 0x5A, 0x19, 0x4D, 0xBA, 0x09, 0xCC, 0x7A, 0x18, 0xE6, 0x19, 0x28, 0x80, 0x0A,
0x00, 0x14, 0xE6, 0x15, 0x03, 0x07, 0x4F, 0x0E, 0x97, 0xED, 0x44, 0xC9, 0x48, 0x7B, 0x58, 0x11,
0x1B, 0xC6, 0xCE, 0x07, 0x64, 0x0D, 0x8D, 0x85, 0x50, 0xB5, 0xC0, 0xA6, 0x4C, 0x27, 0xB9, 0x77,
0x8C, 0x38, 0x79, 0x88, 0x25, 0x84, 0x23, 0x39, 0x6B, 0xF4, 0x80, 0x5B, 0x89, 0x81, 0x8D, 0xA0,
0x77, 0x10, 0x90, 0x55, 0xB0, 0x1B, 0xC8, 0x07, 0xE0, 0x12, 0x31, 0x14, 0xC5, 0xA9, 0x6D, 0x21,
0x55, 0x1A, 0xFA, 0xFB, 0x72, 0x23, 0x1A, 0xA0, 0x88, 0x46, 0xC8, 0xDF, 0x35, 0xBC, 0x21, 0xD9,
0x36, 0x33, 0xB9, 0x52, 0x18, 0xAA, 0x3E, 0x90, 0x91, 0x00, 0x6A, 0x4F, 0xCB, 0xA4, 0x95, 0xB3,
0xE6, 0xC0, 0xFE, 0xAA, 0x7A, 0x07, 0x7B, 0x18, 0x02, 0x05, 0xDB, 0xF8, 0x9A, 0xA8, 0x26, 0x79,
0x23, 0xEC, 0xB2, 0x3A, 0xEA, 0xA3, 0xF9, 0xD5, 0xDE, 0x50, 0x74, 0xC1, 0xB8, 0x3C, 0x43, 0xE4,
0x14, 0x08, 0x6A, 0x70, 0x3D, 0x18, 0xBF, 0x44, 0x31, 0x26, 0x4B, 0x0C, 0xC6, 0x17, 0x76, 0x0A,
0x67, 0xBA, 0x3D, 0x49, 0x6F, 0x30, 0x05, 0xE7, 0xCE, 0xCA, 0x57, 0xBE, 0x28, 0xBF, 0xF6, 0xB6,
0x4C, 0xDE, 0x90, 0xED, 0x85, 0xB8, 0xA4, 0x57, 0xB5, 0xCE, 0x1C, 0xA9, 0x34, 0xB5, 0xA4, 0x13,
0x3B, 0x4A, 0x98, 0x54, 0xA1, 0x35, 0x75, 0xAB, 0xE6, 0x65, 0x07, 0x93, 0xD9, 0x65, 0x58, 0x67,
0xE6, 0x42, 0x5D, 0x7C, 0x68, 0x00, 0x11, 0xFC, 0x15, 0xDC, 0xEE, 0x0A, 0x40, 0xCF, 0x08, 0xA7,
0xA4, 0x45, 0x60, 0xE6, 0x05, 0x08, 0x1D, 0x84, 0xE9, 0x3B, 0xF9, 0x2B, 0x7D, 0x0E, 0x41, 0x19,
0xEE, 0x00, 0x3A, 0x9A, 0x45, 0xEE, 0x8D, 0x0C, 0xC5, 0x04, 0x93, 0xC7, 0x69, 0x60, 0x4E, 0x90,
0xE2, 0xEA, 0x7A, 0x14, 0x2D, 0x51, 0x20, 0x28, 0x81, 0xCA, 0x4C, 0x72, 0xDD, 0x49, 0xD6, 0x6A,
0x82, 0x42, 0x01, 0x82, 0x25, 0xAC, 0xD2, 0x64, 0x8F, 0x09, 0xED, 0x2F, 0x00, 0xCE, 0xA5, 0x7B,
0xAF, 0x38, 0x85, 0x31, 0xF7, 0xCB, 0x78, 0x41, 0xAA, 0x4E, 0xA4, 0x4F, 0x1D, 0x13, 0x51, 0xDA,
0x42, 0x34, 0x85, 0xF4, 0x21, 0x64, 0x78, 0x28, 0x5C, 0xDA, 0x9A, 0x42, 0xFC, 0x85, 0xD1, 0x03,
0x6E, 0x11, 0xB4, 0x40, 0x84, 0x2E, 0xFA, 0x8F, 0xB5, 0x51, 0x53, 0x98, 0x8B, 0x72, 0x19, 0xAF,
0xCF, 0x6A, 0xC6, 0x00, 0x77, 0x53, 0xF5, 0x99, 0x92, 0xFF, 0xD0, 0x93, 0xD5, 0xC2, 0xFF, 0xBD,
0x47, 0x71, 0xEC, 0xD9, 0x2C, 0xD1, 0x90, 0x6F, 0xFC, 0x9F, 0x29, 0x8E, 0xB3, 0xAF, 0xBF, 0xCF,
0x70, 0x6C, 0xF2, 0x9C, 0x4D, 0x98, 0xA4, 0x51, 0x57, 0x5F, 0x27, 0xA7, 0xD5, 0xD9, 0x1B, 0xBD,
0xB9, 0x5F, 0xAC, 0xD1, 0xB8, 0xBE, 0x64, 0x1E, 0xB9, 0x37, 0x68, 0xC2, 0x36, 0xAE, 0x8B, 0xC8,
0xB6, 0x7E, 0x27, 0x5B, 0x25, 0x10, 0x26, 0x11, 0x99, 0x37, 0x43, 0xAA, 0x3C, 0xAA, 0x9E, 0xAB,
0xD8, 0x39, 0x32, 0x2D, 0x11, 0x68, 0x62, 0xB5, 0xF6, 0xDE, 0x14, 0x88, 0xB8, 0xF1, 0xE8, 0x86,
0x61, 0x97, 0x27, 0x2D, 0x53, 0xAA, 0x12, 0x61, 0xD7, 0x98, 0xF2, 0x60, 0x70, 0xB9, 0x4F, 0xE3,
0x23, 0xC2, 0xAD, 0x7B, 0xC8, 0xB2, 0x93, 0xD5, 0x17, 0x51, 0x5E, 0x66, 0x0B, 0xAA, 0x24, 0xAB,
0x77, 0x10, 0xCB, 0x6D, 0xB2, 0xC7, 0x5F, 0xE9, 0x35, 0x1E, 0x07, 0xEF, 0x9E, 0xEE, 0x05, 0x24,
0x19, 0x98, 0x17, 0x5B, 0x21, 0x01, 0x07, 0x47, 0x50, 0xDF, 0x8C, 0xDC, 0x79, 0xDC, 0xDC, 0x0C,
0x8E, 0x55, 0xD8, 0xCF, 0xC2, 0xD6, 0x93, 0x39, 0xDF, 0xDF, 0x93, 0xE5, 0xE7, 0x77, 0xE3, 0xB8,
0x2D, 0x92, 0xA7, 0x9E, 0xB0, 0x36, 0x92, 0x5D, 0x38, 0x7B, 0xB6, 0x8C, 0x96, 0x8D, 0x78, 0x0F,
0x0D, 0x5D, 0x71, 0x4D, 0x4A, 0x1F, 0x7C, 0xE0, 0x75, 0x00, 0x49, 0x07, 0x17, 0xA9, 0x8A, 0x89,
0x4F, 0x14, 0x37, 0xC7, 0xC8, 0x65, 0xD3, 0xFA, 0x43, 0x26, 0xD3, 0x9A, 0xEE, 0x7B, 0xB5, 0x51,
0x70, 0x31, 0xAD, 0x29, 0x70, 0xC5, 0xD4, 0xD7, 0x38, 0x22, 0x36, 0x8B, 0x7C, 0x02, 0x51, 0x5F,
0xAA, 0xA4, 0x9B, 0xA8, 0x99, 0x30, 0x79, 0xF9, 0x2E, 0x23, 0x8E, 0x16, 0x21, 0xAC, 0x1B, 0xCD,
0xFD, 0x93, 0x39, 0xEC, 0xCF, 0x66, 0xCF, 0x8D, 0xBB, 0xE7, 0xE4, 0x8E, 0xA9, 0x8C, 0x6F, 0x08,
0x29, 0x61, 0xF7, 0xCD, 0x7D, 0x72, 0x52, 0x0F, 0x15, 0xFC, 0xCE, 0x33, 0xB2, 0xDD, 0xCA, 0x34,
0x9F, 0xEE, 0x35, 0x63, 0x04, 0xF4, 0x41, 0xF4, 0x5B, 0xFC, 0xA2, 0xAC, 0xD7, 0xAE, 0xAC, 0xBA,
0xFF, 0x01, 0x64, 0xE6, 0xFB, 0x74, 0x1F, 0x60, 0x6C, 0x66, 0x90, 0xDD, 0x70, 0x66, 0x9E, 0x07,
0x4B, 0x07, 0x9D, 0x87, 0x00, 0xEE, 0x23, 0x22, 0xB5, 0x7E, 0xD1, 0x1D, 0x08, 0x8F, 0x82, 0x38,
0xBD, 0x8C, 0xEE, 0xBC, 0x4A, 0xE9, 0xCB, 0x54, 0x52, 0xCC, 0x09, 0xE0, 0x9A, 0xD1, 0xA8, 0xA8,
0x61, 0x24, 0xEC, 0x51, 0x24, 0x53, 0x89, 0x24, 0x39, 0xB4, 0xD2, 0x1E, 0x71, 0xC8, 0x96, 0xB2,
0x14, 0x89, 0x92, 0x0C, 0xF1, 0xE0, 0x8D, 0x61, 0x41, 0x6C, 0x65, 0x87, 0x05, 0xF7, 0x09, 0x1D,
0xC7, 0xB3, 0x99, 0x2C, 0xC5, 0xBB, 0x9D, 0xC8, 0xD0, 0xCC, 0xC2, 0xB5, 0xB4, 0x2D, 0xE2, 0x9E,
0x72, 0xFA, 0x99, 0x91, 0x96, 0x21, 0x19, 0x62, 0x34, 0x3B, 0xAF, 0x42, 0x73, 0x31, 0x95, 0x25,
0x7C, 0x3F, 0x37, 0xDE, 0x87, 0x6D, 0xF0, 0x9E, 0x5C, 0xF7, 0xF5, 0xD1, 0xC3, 0x9C, 0xCE, 0x65,
0xA6, 0x47, 0x50, 0xEB, 0xA9, 0xFA, 0xE2, 0x25, 0xB9, 0xCF, 0x9B, 0xDD, 0x39, 0x61, 0x55, 0xAF,
0xDB, 0xFF, 0x1A, 0x92, 0x40, 0x5E, 0x4F, 0x9E, 0xC2, 0x40, 0xCE, 0x85, 0xEF, 0x95, 0x58, 0x2B,
0x73, 0xA3, 0x3E, 0x0F, 0x14, 0x38, 0x6B, 0x93, 0x52, 0x86, 0x14, 0x77, 0x61, 0xF3, 0xA3, 0xE7,
0x3B, 0x11, 0x88, 0x87, 0x63, 0x35, 0xCA, 0xB8, 0xAA, 0x49, 0x24, 0xE5, 0x79, 0x71, 0xA8, 0x22,
0xA1, 0xBD, 0x89, 0x5C, 0x40, 0x0A, 0x56, 0xBA, 0x8C, 0x3A, 0x86, 0x0B, 0xEE, 0xBF, 0x42, 0xA6,
0xA2, 0x0A, 0x3A, 0x00, 0xF3, 0x32, 0x95, 0x2A, 0xAE, 0x35, 0xB6, 0x28, 0x9F, 0x4C, 0x4F, 0x3F,
0xD3, 0x19, 0x5A, 0xB8, 0x19, 0x74, 0xFD, 0xD6, 0x27, 0x74, 0xC3, 0x26, 0x17, 0xA6, 0x9D, 0x62,
0x7C, 0x92, 0xBC, 0x28, 0x9F, 0xD8, 0xE7, 0x01, 0x6A, 0x21, 0x7D, 0xE1, 0xC0, 0x71, 0x52, 0x61,
0x69, 0x2E, 0x94, 0xF1, 0x10, 0x8C, 0x00, 0xFC, 0x5A, 0x11, 0x00, 0x16, 0x76, 0xE8, 0xAF, 0x11,
0xFE, 0x83, 0xE9, 0x89, 0x48, 0xC3, 0x0C, 0x0F, 0xEF, 0x67, 0x9D, 0x01, 0xA6, 0x60, 0xB2, 0x6B,
0x9D, 0x22, 0x88, 0x5C, 0xB9, 0x3A, 0x6B, 0x92, 0x9E, 0xB6, 0x06, 0x35, 0x86, 0xF8, 0xD4, 0x66,
0x07, 0xA8, 0x82, 0x4C, 0xA1, 0x98, 0xFD, 0x57, 0x5A, 0x51, 0x0C, 0xFE, 0x70, 0x49, 0x86, 0xB3,
0xBF, 0x0B, 0x03, 0x76, 0x57, 0xEE, 0x2C, 0xFA, 0x3A, 0xCB, 0x61, 0x2E, 0x8A, 0xBA, 0xC3, 0x80,
0x89, 0x0C, 0x67, 0xB5, 0x86, 0xBD, 0xE5, 0x93, 0xCD, 0x5E, 0x62, 0xDE, 0x95, 0xB0, 0xCF, 0xF4,
0x97, 0x90, 0x7A, 0xC9, 0x93, 0x98, 0xC2, 0x0B, 0x98, 0x42, 0xAE, 0x53, 0x90, 0x3B, 0x89, 0x09,
0x60, 0x07, 0xB9, 0x99, 0xDC, 0x0A, 0x38, 0x5B, 0xFA, 0xD4, 0x73, 0x08, 0x57, 0x0E, 0xB0, 0x53,
0x6E, 0xC0, 0x18, 0x47, 0xCC, 0xAC, 0x46, 0x34, 0xAD, 0x82, 0x64, 0x57, 0x07, 0x55, 0xF3, 0x9C,
0x48, 0x4E, 0x7F, 0x74, 0x89, 0x6B, 0x29, 0x7D, 0x8E, 0x7D, 0x7C, 0x23, 0xD0, 0x64, 0xA8, 0x9E,
0x4E, 0x2C, 0xCC, 0x05, 0x45, 0x63, 0xE3, 0x7F, 0x22, 0xCE, 0xB5, 0x01, 0x75, 0x34, 0x5E, 0xA8,
0x1B, 0x77, 0xDC, 0x4A, 0xAB, 0xFD, 0x67, 0xB3, 0x64, 0x15, 0x66, 0x2E, 0xC0, 0x5C, 0x21, 0x93,
0xA0, 0x85, 0x66, 0xCF, 0xCA, 0x47, 0x10, 0xF4, 0x70, 0xAE, 0x3E, 0x8C, 0x0B, 0x58, 0x16, 0x93,
0x1A, 0xA5, 0x78, 0xB7, 0x50, 0xAB, 0x15, 0xDC, 0x29, 0xA3, 0xFA, 0xB6, 0x50, 0xB7, 0x29, 0x68,
0x5C, 0x96, 0x90, 0xD3, 0xB2, 0x01, 0x13, 0x4C, 0x25, 0xB3, 0x1E, 0x00, 0x8A, 0xFA, 0x2B, 0x07,
0xA1, 0x15, 0x59, 0x5D, 0x9B, 0x83, 0xE4, 0x89, 0x6E, 0x92, 0x8F, 0xA6, 0xDD, 0xE0, 0x37, 0x50,
0x11, 0x53, 0x1F, 0x7C, 0x08, 0xB3, 0xC0, 0xC2, 0x2E, 0x4F, 0x45, 0x71, 0xD6, 0x21, 0x64, 0xA4,
0x4F, 0xB3, 0x5A, 0xEC, 0xA9, 0x19, 0xC6, 0x1D, 0x77, 0x7F, 0xEC, 0x84, 0x99, 0x18, 0xA2, 0xB3,
0xCB, 0x06, 0x23, 0x84, 0x49, 0x11, 0x46, 0xE1, 0xE6, 0x3B, 0xE1, 0x11, 0x0C, 0x67, 0xE5, 0x8A,
0x90, 0x28, 0x23, 0xBF, 0x14, 0xD8, 0x8E, 0xB6, 0x9C, 0xEC, 0xA7, 0x8C, 0x21, 0x7C, 0x31, 0x14,
0x76, 0xC8, 0xAE, 0x19, 0x0D, 0x49, 0xD9, 0x72, 0x20, 0x61, 0xA5, 0x30, 0x7F, 0xC9, 0x34, 0x67,
0x62, 0x6B, 0xB2, 0xBC, 0x3D, 0x61, 0x9A, 0x6E, 0x39, 0x46, 0x2D, 0x30, 0x35, 0x48, 0x76, 0x10,
0x05, 0xA1, 0xE9, 0xA0, 0x4B, 0x49, 0xD1, 0x73, 0x3C, 0xEE, 0xE1, 0xF8, 0x6B, 0xFA, 0x21, 0x1F,
0xD0, 0xF4, 0xF8, 0xB0, 0x5E, 0x73, 0xAC, 0x14, 0x1A, 0x52, 0x74, 0xC0, 0x25, 0x09, 0x68, 0x08,
0x76, 0x5D, 0xA9, 0xBF, 0x51, 0xBB, 0x93, 0x88, 0x52, 0xC6, 0x7D, 0x96, 0xAE, 0xDE, 0xDE, 0x03,
0x2F, 0xD1, 0x7C, 0x63, 0xAC, 0x86, 0x26, 0x57, 0xDC, 0xE0, 0x66, 0x49, 0xFE, 0xE5, 0x15, 0xF1,
0xBA, 0xC4, 0xE3, 0xFE, 0x16, 0x9A, 0x37, 0xAA, 0xA8, 0x52, 0xB4, 0x11, 0x5C, 0x47, 0x8B, 0xDD,
0xFE, 0x63, 0x9F, 0x74, 0xB2, 0x8D, 0xFA, 0x60, 0x88, 0x3A, 0xC4, 0x88, 0x38, 0xB7, 0x89, 0x19,
0x48, 0x93, 0xF0, 0xB5, 0xF0, 0x73, 0x06, 0xA6, 0x91, 0x4D, 0x24, 0x32, 0x73, 0x44, 0x44, 0xDE,
0xE7, 0x31, 0x18, 0x0A, 0x86, 0x96, 0xC4, 0x12, 0xAA, 0xE3, 0x46, 0xBC, 0xA6, 0xB2, 0x28, 0x93,
0x3E, 0xFD, 0x37, 0x33, 0xCD, 0x55, 0x9A, 0xF2, 0x34, 0x58, 0x14, 0x72, 0xDF, 0x1E, 0xD4, 0xEE,
0x3A, 0x9C, 0x7B, 0x18, 0xD7, 0xFF, 0x5A, 0xD0, 0xAD, 0x29, 0xA2, 0x14, 0xBE, 0x54, 0x70, 0x18,
0x2C, 0xDC, 0xD4, 0x08, 0x16, 0x54, 0x2D, 0xEF, 0x23, 0x16, 0x54, 0xE1, 0x34, 0x6F, 0x02, 0xAD,
0xA0, 0xF8, 0xE4, 0x9B, 0x1F, 0x36, 0x4B, 0xD6, 0x31, 0xA2, 0xD1, 0x47, 0x31, 0xE1, 0x98, 0x53,
0xA6, 0x49, 0x1F, 0xFD, 0x18, 0x2B, 0xB0, 0x0B, 0x66, 0x0D, 0x64, 0xC8, 0xE6, 0xA1, 0xCC, 0x54,
0x5E, 0x0E, 0x00, 0x4D, 0xCC, 0xAF, 0x3C, 0xB0, 0x6D, 0xC4, 0x0C, 0x43, 0xEA, 0xCD, 0xC0, 0x22,
0xD5, 0xF0, 0xE1, 0x0A, 0xBC, 0xA4, 0xBC, 0x55, 0x70, 0x0F, 0xB6, 0xBA, 0xFB, 0x82, 0x4E, 0x39,
0x4B, 0x77, 0xBB, 0x32, 0x53, 0xAF, 0xA9, 0x2A, 0x81, 0xAA, 0xD9, 0x12, 0x52, 0x01, 0xFA, 0x2A,
0xB0, 0x8F, 0x1B, 0x28, 0xA6, 0x8B, 0x22, 0xA2, 0xD2, 0x67, 0x73, 0x6B, 0xDF, 0xC4, 0x06, 0x68,
0xD3, 0xF7, 0xA1, 0x99, 0x7E, 0xDB, 0xAD, 0x0B, 0xAE, 0x7B, 0x30, 0xDB, 0xFC, 0x7A, 0xA0, 0x41,
0x78, 0xDD, 0xAF, 0xF7, 0x21, 0xDD, 0xA4, 0x80, 0x8A, 0xFE, 0x16, 0x99, 0x7D, 0x1F, 0x37, 0xE1,
0xCD, 0xC1, 0xEB, 0x60, 0x78, 0x08, 0xCF, 0x14, 0x87, 0xAA, 0xF6, 0xA6, 0x1D, 0x7A, 0x12, 0x30,
0x91, 0x66, 0xB9, 0xE2, 0xCE, 0xE5, 0x62, 0x4D, 0x26, 0x21, 0x51, 0x26, 0xA4, 0x3F, 0x8E, 0xBB,
0xB0, 0x66, 0x06, 0x7A, 0x04, 0xBC, 0xDD, 0x0E, 0x33, 0x14, 0xB2, 0x27, 0x60, 0xAF, 0xE7, 0x51,
0x27, 0x93, 0x97, 0x7B, 0x50, 0xD0, 0x55, 0x10, 0x34, 0x3C, 0xD0, 0xD7, 0xA7, 0x85, 0x30, 0xA9,
0xB0, 0xA3, 0xD0, 0xCE, 0x28, 0x08, 0x73, 0x6A, 0xEC, 0x80, 0xCA, 0xB9, 0x53, 0x9D, 0x5D, 0x28,
0x2E, 0x20, 0x8A, 0x6C, 0x02, 0xEB, 0x22, 0x91, 0x14, 0x25, 0x04, 0x8D, 0xAC, 0xCA, 0x8D, 0xFA,
0xB1, 0xD1, 0x7F, 0xBF, 0x3E, 0x37, 0xFE, 0x75, 0xD2, 0x0C, 0x63, 0xFC, 0xDD, 0x6B, 0xB5, 0xB5,
0xB1, 0x6D, 0x81, 0xDB, 0x95, 0xD5, 0x20, 0x7A, 0x25, 0xBD, 0xEC, 0x1F, 0x8A, 0xA2, 0xF9, 0xB4,
0x47, 0xF5, 0x86, 0x8E, 0xEA, 0x6B, 0x49, 0x33, 0xCA, 0xA8, 0xDE, 0x72, 0xA3, 0x1A, 0x74, 0x54,
0x37, 0x72, 0x8E, 0xEA, 0xE2, 0x6B, 0x47, 0x71, 0x96, 0xE1, 0x08, 0x00, 0xE3, 0xB9, 0x3F, 0x35,
0x91, 0x67, 0x01, 0x82, 0x5D, 0xBA, 0x86, 0xA9, 0xE6, 0x57, 0x60, 0xA4, 0x5A, 0xB1, 0xA2, 0x2A,
0xF8, 0x48, 0x6D, 0x04, 0xA1, 0x72, 0x49, 0x86, 0xEF, 0xE5, 0x4C, 0x2C, 0xFC, 0x9F, 0x2F, 0x6B,
0x82, 0xB7, 0x68, 0xB7, 0x3A, 0xBC, 0x1E, 0x4E, 0x5C, 0xE1, 0xB8, 0x36, 0xFA, 0x8B, 0xCC, 0x71,
0x04, 0x54, 0x5E, 0xD2, 0x29, 0x65, 0x30, 0x98, 0xB1, 0x53, 0x11, 0xF1, 0x0F, 0x30, 0xCB, 0x3A,
0x04, 0x8C, 0x16, 0x74, 0x4F, 0x4F, 0x6B, 0xEE, 0x4C, 0xA4, 0x99, 0x34, 0x33, 0xD3, 0x0A, 0x63,
0x62, 0x3E, 0xB0, 0x2F, 0xC4, 0xFD, 0x49, 0xC4, 0x22, 0xB6, 0x9D, 0x4F, 0xCC, 0xA9, 0xCE, 0xCA,
0xA8, 0x0D, 0xC4, 0xF2, 0xE4, 0x6D, 0x78, 0xA6, 0xD8, 0xED, 0x9E, 0x3A, 0x2B, 0xB0, 0x1E, 0x09,
0xEB, 0x64, 0xF9, 0xF4, 0x97, 0x71, 0x13, 0x75, 0xF1, 0xB5, 0xC6, 0xFE, 0x97, 0x51, 0xD8, 0x27,
0x40, 0x3C, 0x73, 0x42, 0xA2, 0xAE, 0x70, 0x10, 0x6C, 0x12, 0xF8, 0x60, 0x57, 0x46, 0xDD, 0xDC,
0x8C, 0x47, 0xF4, 0xCA, 0xD0, 0xC1, 0xEF, 0x6C, 0x89, 0xBB, 0x45, 0xF3, 0x2B, 0x62, 0xCC, 0x73,
0xFF, 0x4E, 0x48, 0x2B, 0xC2, 0x3F, 0x51, 0x25, 0x22, 0x99, 0x83, 0x21, 0x69, 0xE2, 0x2E, 0xC6,
0xB4, 0x59, 0x73, 0x72, 0x5D, 0x4D, 0x62, 0x58, 0xF3, 0x09, 0xAC, 0xFA, 0x26, 0x1A, 0x02, 0xE8,
0x90, 0x9C, 0xFA, 0x26, 0x50, 0x67, 0x5B, 0xBE, 0x0E, 0x30, 0xBC, 0x56, 0x14, 0x9C, 0x8E, 0x2B,
0x23, 0xC3, 0x8F, 0xD7, 0x2C, 0x2D, 0x48, 0x9A, 0x2A, 0x4F, 0x5A, 0x14, 0x30, 0x10, 0x40, 0x38,
0x03, 0x2D, 0x8F, 0x34, 0xA4, 0xC9, 0x68, 0xCA, 0x59, 0xA0, 0xF0, 0xA3, 0xD0, 0x33, 0x1A, 0x88,
0x0F, 0x14, 0x79, 0x30, 0x88, 0xA3, 0x87, 0x4C, 0xB3, 0x18, 0x98, 0x4F, 0x5A, 0x17, 0x74, 0xDB,
0xFD, 0xE9, 0x19, 0x84, 0x5C, 0x30, 0x3A, 0x84, 0x53, 0x88, 0x92, 0xE4, 0x23, 0x1D, 0x42, 0x91,
0xFB, 0x00, 0xBD, 0xD2, 0x92, 0x3E, 0xEC, 0x04, 0x43, 0x7A, 0x08, 0x44, 0x9E, 0x02, 0x46, 0xAA,
0xA3, 0x21, 0x44, 0xDA, 0x3A, 0xCE, 0x43, 0x50, 0x03, 0xC9, 0x30, 0x35, 0xA9, 0xE5, 0x72, 0x04,
0x32, 0x4C, 0x35, 0x63, 0xE8, 0x42, 0x1C, 0x04, 0xD5, 0x30, 0xDC, 0xD5, 0xB0, 0x51, 0x08, 0xA8,
0x95, 0x26, 0xBD, 0x8E, 0xD4, 0x35, 0xE2, 0x12, 0x40, 0x46, 0x65, 0xEA, 0x05, 0xE8, 0x0A, 0x05,
0x0C, 0xB7, 0x0B, 0xA6, 0xE9, 0xFD, 0xE6, 0x92, 0x37, 0x3E, 0xF2, 0x50, 0x61, 0x8A, 0x4C, 0xDC,
0x84, 0xD4, 0x8A, 0xA5, 0x21, 0x7A, 0xF3, 0x40, 0xF1, 0x32, 0xF9, 0x5E, 0xE0, 0x80, 0x77, 0x54,
0xD9, 0x2C, 0x19, 0x06, 0xC4, 0x97, 0x42, 0xF0, 0xEC, 0x56, 0x92, 0xF3, 0x1D, 0xF6, 0xC0, 0xC2,
0x46, 0x4C, 0x4C, 0x2B, 0x77, 0x4C, 0xBB, 0xAC, 0x61, 0xAC, 0x36, 0x2E, 0xD3, 0x93, 0x72, 0x4C,
0xE0, 0xB6, 0x86, 0x8C, 0xC1, 0x00, 0x56, 0x60, 0xDA, 0x85, 0x6A, 0x21, 0xF0, 0x6D, 0x8D, 0x7B,
0xFB, 0x03, 0x12, 0xD1, 0xE5, 0xE6, 0xE0, 0x24, 0xDE, 0x3D, 0x74, 0xF8, 0x2A, 0x84, 0x81, 0x07,
0xA1, 0xDF, 0x11, 0xE2, 0xC2, 0x00, 0xE8, 0x84, 0xAB, 0x0F, 0xF8, 0x05, 0xC0, 0x74, 0xC4, 0x04,
0x5A, 0x87, 0x1F, 0x62, 0x53, 0x30, 0x1A, 0x21, 0xDB, 0x50, 0x31, 0x2B, 0x28, 0x0C, 0xE2, 0x53,
0x07, 0x0B, 0x50, 0x20, 0xBC, 0x2D, 0xDF, 0x13, 0x3F, 0x71, 0x28, 0x6C, 0x93, 0x3E, 0x5B, 0xCE,
0xC1, 0x87, 0x8D, 0xAC, 0x7B, 0x6F, 0xE6, 0x10, 0xA1, 0x04, 0x91, 0xCB, 0x33, 0x73, 0xD2, 0x65,
0xF5, 0x66, 0x98, 0x9D, 0x3F, 0x81, 0x9F, 0x8B, 0x74, 0xC5, 0xAB, 0x00, 0x3C, 0x81, 0x0E, 0xBC,
0xD8, 0xE9, 0x42, 0x15, 0x51, 0xAB, 0x08, 0xD9, 0xE4, 0x48, 0x4E, 0xCE, 0x95, 0x1B, 0xC1, 0xF2,
0xDF, 0x05, 0x04, 0x0D, 0x3E, 0x28, 0x2C, 0x34, 0xD6, 0xBA, 0x10, 0x88, 0x61, 0xC8, 0xFA, 0xC2,
0xD0, 0xC7, 0xB9, 0xB3, 0x22, 0xBE, 0xE7, 0x97, 0xBC, 0x9E, 0x8D, 0x07, 0x35, 0x19, 0x4D, 0xC1,
0x9F, 0xC3, 0xEB, 0xC1, 0xF8, 0xD7, 0x2B, 0x16, 0x30, 0x29, 0x16, 0x30, 0x11, 0x0B, 0x48, 0x7B,
0x80, 0xB4, 0x4B, 0x00, 0x39, 0x5E, 0xB1, 0x80, 0xD4, 0x61, 0x01, 0x25, 0xB1, 0x00, 0x53, 0xF4,
0xF4, 0xC5, 0x53, 0x0B, 0xC6, 0x79, 0xC4, 0xEF, 0x98, 0x05, 0x48, 0x62, 0xC1, 0xB1, 0x15, 0xAA,
0x92, 0x59, 0xE1, 0x5E, 0xBA, 0x25, 0x5F, 0xFE, 0x7D, 0x55, 0x14, 0xE0, 0x90, 0x35, 0x5C, 0xFA,
0x72, 0x5D, 0x7A, 0xAF, 0x6A, 0xA0, 0xD0, 0x03, 0xA0, 0x9F, 0xE2, 0x63, 0x8B, 0x2F, 0x8C, 0x99,
0xC0, 0x80, 0x41, 0x9E, 0x0E, 0xEE, 0x88, 0x98, 0x18, 0xFE, 0x81, 0x8B, 0x00, 0x3A, 0x14, 0xBE,
0xC8, 0x81, 0x44, 0x64, 0x75, 0x55, 0xA6, 0x8F, 0x29, 0x4C, 0x9C, 0xF3, 0x8B, 0x11, 0x0C, 0xEE,
0xAC, 0x45, 0xFA, 0xD9, 0x91, 0x7C, 0xFC, 0x07, 0xC6, 0xC8, 0x36, 0x15, 0x3C, 0x08, 0x8A, 0xC4,
0xA0, 0x57, 0xF9, 0x3E, 0xAB, 0x4A, 0x84, 0x44, 0x11, 0x41, 0x10, 0x76, 0x7D, 0x55, 0x88, 0xA1,
0x5D, 0x75, 0x88, 0x04, 0x08, 0x3F, 0x0A, 0x3B, 0x0A, 0x37, 0xFE, 0x54, 0x98, 0xF1, 0x26, 0x5E,
0xF4, 0x5E, 0xAD, 0x97, 0x8C, 0x3C, 0xA3, 0x51, 0x79, 0x38, 0xB1, 0xAE, 0xDC, 0xA2, 0x5A, 0x2B,
0x30, 0x92, 0xDA, 0x99, 0x86, 0xB2, 0x96, 0x0F, 0x99, 0x22, 0xCE, 0xA3, 0x0F, 0x3B, 0x08, 0x14,
0x78, 0x60, 0x4E, 0xEA, 0xFB, 0xB4, 0x67, 0x5A, 0x17, 0x54, 0x0D, 0xC7, 0x23, 0xF8, 0xFC, 0xD1,
0x25, 0x64, 0xE1, 0x1B, 0x31, 0xE9, 0xDA, 0xD1, 0x54, 0xF1, 0xB7, 0xA5, 0x1A, 0x88, 0xD2, 0x3B,
0xEC, 0x16, 0x34, 0xFE, 0x60, 0x41, 0x82, 0xE3, 0xE5, 0xEB, 0xCC, 0xDE, 0x26, 0xD0, 0x95, 0x9D,
0x7C, 0xB2, 0xFE, 0xB5, 0x7C, 0x26, 0xE7, 0x05, 0xCD, 0x01, 0x56, 0xB4, 0xD5, 0x9D, 0x61, 0xAA,
0x72, 0x81, 0x1A, 0xF9, 0x4B, 0xA5, 0xD0, 0xAD, 0x8B, 0x91, 0x2A, 0x0E, 0x12, 0x2B, 0x34, 0x98,
0xAA, 0xE5, 0x76, 0x1E, 0x89, 0x95, 0xB0, 0xE2, 0xA6, 0x2B, 0xF4, 0x6F, 0x29, 0x7C, 0xB1, 0x5E,
0x62, 0xF3, 0xF5, 0x41, 0x2F, 0xD3, 0x15, 0x01, 0x48, 0x4F, 0x4E, 0x5F, 0x22, 0xC8, 0xB6, 0x49,
0xD3, 0x90, 0xC6, 0xBF, 0x49, 0x4B, 0xEC, 0x66, 0xB1, 0xB2, 0xC3, 0x5E, 0x6C, 0xC7, 0x89, 0x39,
0x06, 0x19, 0x81, 0xB2, 0x9C, 0xB8, 0xFB, 0x60, 0xEE, 0xB3, 0xE0, 0xBD, 0x98, 0x32, 0xD3, 0x7B,
0x06, 0x57, 0xA0, 0x11, 0x40, 0x2D, 0x86, 0x69, 0xD3, 0x28, 0x85, 0xCD, 0xA3, 0x59, 0x64, 0xE3,
0xC3, 0xB9, 0x38, 0x95, 0x85, 0xF8, 0xA7, 0x1A, 0x44, 0xCC, 0x90, 0x1C, 0xD1, 0xF3, 0x63, 0x60,
0x4F, 0x22, 0x89, 0x1F, 0x1F, 0x98, 0xE6, 0x84, 0x21, 0xC0, 0xF6, 0x13, 0x5F, 0x1E, 0x59, 0x5B,
0xB3, 0x19, 0x61, 0xDC, 0xFD, 0x9F, 0xC9, 0x1F, 0x68, 0x44, 0x63, 0x69, 0x65, 0x1C, 0x17, 0x9A,
0xD5, 0x32, 0x9A, 0x57, 0x45, 0xAE, 0x18, 0xA2, 0xE6, 0xF3, 0x58, 0x64, 0x63, 0x31, 0xE9, 0x78,
0x8D, 0x91, 0x90, 0xC4, 0xB2, 0x2C, 0x3F, 0x14, 0x8A, 0x23, 0xA8, 0x9E, 0x21, 0x89, 0x2C, 0x79,
0xA1, 0xAF, 0x4C, 0xF4, 0x76, 0x9B, 0xD4, 0x62, 0xFD, 0x83, 0x31, 0x51, 0xDA, 0x54, 0x60, 0x3A,
0x29, 0x59, 0x75, 0xD4, 0x74, 0x4A, 0x5A, 0x23, 0x30, 0x4E, 0x72, 0x72, 0xAD, 0x39, 0x80, 0x07,
0x95, 0xBD, 0x70, 0x55, 0xE4, 0xCB, 0xDB, 0xEF, 0x40, 0xC1, 0x03, 0x49, 0x13, 0x93, 0x51, 0x14,
0xDF, 0x06, 0xD4, 0xFA, 0xDB, 0x75, 0x39, 0x5B, 0x17, 0x1A, 0x71, 0x88, 0xB4, 0xB3, 0x1F, 0xEF,
0x3B, 0xCE, 0x67, 0x7F, 0x78, 0x0C, 0x84, 0x69, 0xCA, 0x46, 0xB3, 0x87, 0x17, 0xE8, 0x9F, 0xAC,
0xA5, 0x05, 0x09, 0x76, 0x13, 0xB8, 0xFA, 0xF6, 0x4D, 0xBB, 0xE0, 0x53, 0x45, 0xAB, 0x36, 0x25,
0xA5, 0x21, 0xF3, 0x88, 0x85, 0x53, 0x18, 0xF8, 0xA1, 0xBC, 0xEB, 0x18, 0xF1, 0x23, 0x92, 0x13,
0x68, 0x10, 0xEE, 0x5B, 0xC7, 0x4A, 0x00, 0xEF, 0x2A, 0x5F, 0xF1, 0x0F, 0x4E, 0xD8, 0x7F, 0x01,
0xC2, 0x3E, 0x08, 0xC2, 0xC6, 0x8B, 0xE6, 0x42, 0x3A, 0x3C, 0xF3, 0x0B, 0x9D, 0xA7, 0xE7, 0xD9,
0xD5, 0xF3, 0x53, 0x7C, 0x81, 0xB1, 0x5E, 0xAF, 0x68, 0xD6, 0xA0, 0x16, 0x36, 0xD2, 0x95, 0x57,
0x3F, 0xBA, 0xF2, 0x12, 0x4C, 0x63, 0xCB, 0x9C, 0xC6, 0xEE, 0x3C, 0xEE, 0x18, 0x34, 0x42, 0xBC,
0xE6, 0xAC, 0x0C, 0xE7, 0x62, 0x20, 0xF6, 0x58, 0x98, 0x9F, 0x10, 0x10, 0x03, 0xD8, 0x1F, 0x31,
0x9E, 0x41, 0xAF, 0x33, 0x66, 0xD6, 0xD7, 0x04, 0x07, 0x30, 0x81, 0xB1, 0x76, 0x52, 0x40, 0x2C,
0x85, 0x24, 0x92, 0xE5, 0xAB, 0x90, 0x9B, 0x86, 0x7B, 0x96, 0xCC, 0x1C, 0x09, 0x99, 0x44, 0x29,
0x3B, 0x25, 0x45, 0x62, 0x65, 0x87, 0xAA, 0x9A, 0xAF, 0x1C, 0x44, 0xC4, 0x5B, 0xDF, 0xC5, 0x26,
0x34, 0xFB, 0x7B, 0x14, 0x3C, 0x3F, 0xA7, 0x57, 0x6D, 0x59, 0x95, 0x23, 0x12, 0x63, 0xBC, 0x92,
0xFB, 0x4C, 0x41, 0x11, 0x23, 0x0E, 0x42, 0x10, 0xB6, 0x5F, 0x5E, 0x88, 0x45, 0x0D, 0xE1, 0x07,
0x56, 0x11, 0x2A, 0x57, 0x70, 0xE3, 0x26, 0x16, 0x2F, 0xC4, 0x35, 0x9C, 0x4A, 0x7F, 0x80, 0xBF,
0x98, 0x17, 0xFE, 0xA8, 0x02, 0x10, 0x96, 0x2E, 0x92, 0xA0, 0xB5, 0x9A, 0xF9, 0xE4, 0x74, 0xBA,
0xEA, 0x58, 0x3A, 0xDD, 0xB4, 0x9D, 0x4E, 0xA7, 0xF5, 0xA2, 0x33, 0x63, 0x56, 0x47, 0xD3, 0xE9,
0x28, 0x15, 0xAF, 0xF2, 0x38, 0x6A, 0xA0, 0xF9, 0x9A, 0x86, 0x46, 0xE9, 0x28, 0x17, 0x9A, 0x4E,
0xC7, 0xA4, 0x70, 0x6F, 0xD2, 0x54, 0x7E, 0xA6, 0xD3, 0x45, 0xA7, 0xA6, 0xD3, 0x75, 0xCC, 0x5E,
0xE8, 0x37, 0xE9, 0x74, 0xE6, 0x02, 0xF3, 0x69, 0x47, 0x1D, 0x71, 0xDA, 0x46, 0x03, 0xB8, 0xA9,
0x43, 0xCE, 0x19, 0x46, 0x94, 0x41, 0x7D, 0x8D, 0x20, 0x6A, 0xB7, 0x0E, 0x05, 0x4A, 0x14, 0xF6,
0x51, 0xFC, 0x86, 0x8C, 0xF2, 0x80, 0x21, 0x02, 0x50, 0x27, 0x17, 0x43, 0x82, 0xD9, 0xDA, 0x04,
0xC3, 0x0D, 0x72, 0xDD, 0x14, 0x45, 0x4E, 0xDE, 0xC2, 0x7B, 0x91, 0x45, 0x9E, 0x2E, 0x10, 0x9C,
0x1A, 0xBE, 0x14, 0x73, 0xE7, 0xDA, 0x52, 0xAB, 0xCF, 0x7D, 0x4D, 0xDE, 0x60, 0xDC, 0x99, 0xB8,
0xCE, 0xC8, 0x30, 0x25, 0xC4, 0xF7, 0xB4, 0xC4, 0xC3, 0x34, 0xB7, 0x2F, 0xD1, 0xD9, 0xF5, 0x34,
0x84, 0x33, 0xAA, 0xD7, 0x48, 0xF5, 0x27, 0xF1, 0x14, 0x85, 0xFC, 0xB3, 0x27, 0x3A, 0x2A, 0x57,
0x6A, 0xBC, 0xF4, 0xBB, 0xE4, 0xEB, 0x49, 0x33, 0xCF, 0x5C, 0x0B, 0x84, 0x66, 0x83, 0x30, 0xB8,
0xDC, 0x29, 0xDD, 0x9B, 0x3B, 0x00, 0xC2, 0xDE, 0x61, 0x24, 0xEF, 0x1A, 0xAA, 0x18, 0x2D, 0xB8,
0xAF, 0x18, 0xB9, 0xEB, 0xEE, 0xD7, 0xC8, 0x24, 0xD6, 0x1F, 0x9B, 0x98, 0xDA, 0x8C, 0x77, 0x1D,
0x21, 0x1D, 0x82, 0x0E, 0x92, 0x34, 0x7E, 0x93, 0x6B, 0xC9, 0x78, 0xC2, 0xC8, 0xF8, 0xDC, 0x0D,
0xEA, 0x98, 0x69, 0xE3, 0x4F, 0x56, 0x1B, 0x4F, 0x33, 0x28, 0x6F, 0x92, 0xA6, 0x9F, 0xB7, 0xE4,
0xEF, 0xFA, 0x0E, 0x25, 0x7F, 0x8F, 0x2E, 0x61, 0x75, 0x38, 0x9A, 0x4F, 0xE1, 0x32, 0xDE, 0xD6,
0x3C, 0x23, 0x67, 0xC3, 0x2D, 0xF9, 0x46, 0x8B, 0x43, 0x1F, 0x1C, 0xAB, 0x0A, 0xBB, 0x67, 0xA1,
0xF5, 0xEB, 0xD0, 0xC6, 0x62, 0xD5, 0xD4, 0x2E, 0xEA, 0x91, 0x52, 0x7B, 0x58, 0xAD, 0x79, 0x3F,
0x81, 0xB8, 0x17, 0x5A, 0x98, 0x55, 0x88, 0x7B, 0xF8, 0xAF, 0x38, 0xD8, 0x88, 0xDB, 0x05, 0x13,
0xA2, 0xFC, 0xA5, 0x50, 0x36, 0x0B, 0xF4, 0x74, 0xE0, 0x62, 0xBC, 0x99, 0x43, 0xA3, 0x10, 0x73,
0x03, 0x3E, 0xC6, 0xD0, 0x07, 0xC5, 0xF2, 0x57, 0xE3, 0x26, 0xFE, 0xFE, 0xD7, 0xEB, 0x39, 0xFC,
0x75, 0x3F, 0x22, 0xF6, 0xA1, 0x0A, 0x0F, 0xDB, 0x37, 0xD2, 0xA4, 0xCD, 0x66, 0x95, 0xC7, 0x64,
0xAA, 0xA0, 0xD5, 0x5A, 0x9A, 0x35, 0x43, 0x24, 0x3F, 0x96, 0x94, 0xD0, 0xAC, 0xD4, 0xD9, 0x24,
0x25, 0x54, 0x10, 0xDD, 0x5A, 0x18, 0xF3, 0xEF, 0xA7, 0xA7, 0x8F, 0xC9, 0xE0, 0xF9, 0xE5, 0xA5,
0x80, 0x66, 0x4D, 0x4A, 0x20, 0xD4, 0x3A, 0x7D, 0x4C, 0x52, 0x42, 0x7D, 0x6A, 0x52, 0xC2, 0xE8,
0x92, 0x12, 0xBC, 0x0A, 0xB5, 0xD4, 0x0A, 0x28, 0xC0, 0x72, 0xC8, 0x54, 0xD9, 0xC9, 0x5E, 0x15,
0x61, 0x9B, 0x8B, 0x58, 0xF0, 0x71, 0x33, 0xEC, 0xD6, 0x51, 0x97, 0x07, 0x10, 0xC7, 0xFE, 0x85,
0x1E, 0x69, 0x2A, 0x32, 0xD2, 0xFE, 0x92, 0x49, 0x7E, 0xD1, 0x9B, 0xF4, 0xC7, 0x42, 0x61, 0x20,
0xBD, 0x23, 0xC4, 0xB8, 0xD8, 0xEB, 0x5D, 0xD8, 0xA7, 0x14, 0xF9, 0x3D, 0xC5, 0xCB, 0xEF, 0x99,
0x3A, 0xFB, 0x4D, 0x84, 0xDC, 0x9F, 0x68, 0x90, 0x3A, 0x1B, 0xBD, 0x85, 0x4C, 0xA2, 0x04, 0x88,
0x6A, 0x5D, 0x68, 0x62, 0xC6, 0x92, 0x2B, 0x93, 0x7C, 0xF4, 0x8F, 0xF4, 0x1D, 0x82, 0x86, 0xD0,
0x20, 0x8B, 0x95, 0xEF, 0xFD, 0x04, 0xA9, 0xB3, 0xB7, 0x1F, 0x2A, 0x68, 0x50, 0x9F, 0x76, 0x34,
0x54, 0x20, 0x22, 0x7D, 0xF2, 0x18, 0x2A, 0xB8, 0xC8, 0x50, 0x01, 0xE4, 0xED, 0x7E, 0xF0, 0x01,
0x42, 0x05, 0x68, 0xCB, 0x10, 0xF7, 0xF1, 0x56, 0xA8, 0x60, 0x66, 0xA8, 0x80, 0x99, 0xED, 0x48,
0xA5, 0x1B, 0xC1, 0x25, 0xA2, 0xB3, 0x76, 0x6E, 0x2F, 0x54, 0x00, 0x4F, 0x7B, 0x75, 0x5D, 0x9D,
0xFF, 0x63, 0xD6, 0x72, 0x7C, 0x16, 0x7C, 0xE5, 0xBE, 0x26, 0x69, 0xFE, 0x2B, 0xCD, 0xF5, 0xB2,
0x5B, 0x05, 0x99, 0x9A, 0xC5, 0xA4, 0x29, 0x22, 0xAE, 0x64, 0xF3, 0x0F, 0xFF, 0xB1, 0x57, 0xFD,
0x52, 0xD3, 0xF0, 0x1A, 0x32, 0xFE, 0xB2, 0xBB, 0xD7, 0x8C, 0x81, 0x74, 0xD9, 0x34, 0x41, 0x8B,
0x0A, 0x7F, 0xE5, 0xFD, 0xCC, 0xFE, 0xF3, 0xB6, 0xFF, 0x95, 0x99, 0x23, 0x0E, 0x5A, 0xE9, 0x00,
0xF7, 0xA0, 0xDB, 0xFE, 0x02, 0x05, 0x88, 0x53, 0x30, 0xC6, 0x43, 0x48, 0x3C, 0xD2, 0xAC, 0xEA,
0xD5, 0x4A, 0xBB, 0x43, 0xC5, 0x86, 0x11, 0x19, 0x2F, 0x5E, 0x8E, 0xF3, 0xEF, 0x5F, 0x6C, 0x78,
0xF9, 0x78, 0xB1, 0xE1, 0xC9, 0x59, 0x07, 0xF7, 0x0A, 0xC3, 0xED, 0x25, 0x2D, 0x1C, 0x25, 0x64,
0x83, 0x89, 0xE0, 0xF7, 0xE7, 0x7D, 0x99, 0xD3, 0xEB, 0x1F, 0x97, 0x75, 0x70, 0x7B, 0x15, 0xA9,
0xE7, 0x4E, 0xAD, 0x48, 0x1D, 0x1F, 0xF8, 0x81, 0x5C, 0xFC, 0x86, 0xCB, 0x54, 0x82, 0xD9, 0x57,
0x26, 0x04, 0xE0, 0xA3, 0x81, 0x16, 0x5F, 0xC7, 0xBC, 0x8D, 0x5A, 0xED, 0x72, 0x39, 0x91, 0x30,
0xB0, 0x8C, 0x46, 0xFB, 0x1A, 0x44, 0xDC, 0x8E, 0xB0, 0x18, 0xD8, 0x9E, 0x26, 0x7E, 0x87, 0xEE,
0xDC, 0x93, 0x60, 0xCF, 0x71, 0xC3, 0x2D, 0xD5, 0x42, 0xD9, 0x7B, 0x48, 0xA9, 0x81, 0xF1, 0x76,
0x7A, 0xC4, 0x0C, 0xBF, 0x9B, 0xFB, 0x5E, 0xD6, 0xAE, 0x2B, 0x33, 0x26, 0xF0, 0x38, 0xF0, 0xD3,
0xA8, 0x65, 0xE7, 0x0A, 0x71, 0x39, 0xCD, 0x23, 0x2E, 0x05, 0x5B, 0x85, 0x56, 0x30, 0x7C, 0xEB,
0x25, 0x33, 0xAB, 0x89, 0xD9, 0x27, 0xBD, 0x6F, 0x11, 0xCC, 0x7E, 0x5B, 0xF6, 0xE0, 0x80, 0x06,
0x13, 0xF2, 0xCD, 0xEC, 0xFB, 0x32, 0xE8, 0xF7, 0x5A, 0x13, 0xFC, 0xAE, 0x57, 0x91, 0xE0, 0xB2,
0x0A, 0xC9, 0x40, 0x71, 0xEB, 0x61, 0xE8, 0x7D, 0xA4, 0x85, 0x16, 0x70, 0xDA, 0xD9, 0x47, 0xE5,
0x73, 0x56, 0x54, 0x38, 0x9D, 0x54, 0x54, 0x58, 0xAE, 0x45, 0x85, 0xCD, 0x52, 0x54, 0x98, 0x0D,
0x6B, 0x51, 0xA1, 0xCD, 0x97, 0xA2, 0x42, 0xBB, 0x22, 0x2B, 0xC5, 0x6A, 0x0B, 0x55, 0xE6, 0xE6,
0xDF, 0xF6, 0xD7, 0xDF, 0x56, 0x99, 0x65, 0xD6, 0x34, 0x4B, 0xB3, 0x26, 0x57, 0x9A, 0x6F, 0x7C,
0x16, 0x52, 0x47, 0xBE, 0xE9, 0x52, 0x47, 0xCE, 0x1D, 0x4F, 0x1D, 0x79, 0x42, 0x53, 0x47, 0x3E,
0x6A, 0x34, 0x75, 0xA4, 0x5F, 0xD2, 0x43, 0x77, 0x17, 0x8B, 0xCD, 0x59, 0x2F, 0x4B, 0xF3, 0x2A,
0xAF, 0x3F, 0x3A, 0x69, 0x7F, 0xDA, 0x90, 0xE3, 0x8F, 0x55, 0x8B, 0xC9, 0x52, 0xE0, 0x55, 0x7E,
0xEE, 0x39, 0x89, 0x79, 0x3F, 0x02, 0x2A, 0x44, 0xB8, 0x99, 0x42, 0x35, 0x98, 0x3B, 0x9D, 0x15,
0xD3, 0x28, 0xE0, 0xED, 0xFE, 0xFD, 0x45, 0x5C, 0xF3, 0x74, 0x84, 0x0E, 0x77, 0x5E, 0xFE, 0xA3,
0xB6, 0xF6, 0xA8, 0xB5, 0x20, 0xB0, 0x35, 0x4B, 0x47, 0x2D, 0x58, 0xED, 0xC3, 0x89, 0x05, 0x81,
0xE5, 0x76, 0x41, 0x60, 0x3A, 0x51, 0x3E, 0x47, 0xAE, 0x69, 0xC7, 0xF2, 0x62, 0xB6, 0x1A, 0x40,
0x2C, 0xCB, 0x3E, 0x6E, 0x33, 0x83, 0x3A, 0xE8, 0x48, 0x9D, 0x23, 0x2C, 0x24, 0x36, 0x56, 0x3A,
0x7C, 0xE5, 0xC0, 0x54, 0x83, 0xD9, 0xF7, 0xFB, 0x87, 0x88, 0x0B, 0x01, 0x8A, 0x95, 0xED, 0x81,
0x28, 0x21, 0x58, 0x8C, 0xC0, 0x50, 0x70, 0x03, 0x07, 0xAC, 0x7A, 0x30, 0x8C, 0x0E, 0x19, 0x8A,
0xDA, 0x03, 0x4C, 0x28, 0x33, 0x8F, 0xC6, 0xE2, 0xF1, 0xEE, 0x01, 0x1A, 0x1A, 0xD2, 0x52, 0x7C,
0xD9, 0xAC, 0x0C, 0xE7, 0xD7, 0x32, 0x3D, 0x5B, 0xEF, 0x4B, 0x3D, 0xA8, 0x87, 0x7E, 0x51, 0x92,
0xD4, 0x7F, 0x80, 0xB6, 0x98, 0xFD, 0x0B, 0x13, 0xA1, 0x56, 0xE2, 0x97, 0x6C, 0x1F, 0x95, 0xB4,
0x6B, 0x11, 0x61, 0xF5, 0x58, 0xBE, 0xA4, 0x66, 0xC3, 0x38, 0xA1, 0xBE, 0x7D, 0xAB, 0xA4, 0x8B,
0x3B, 0xBC, 0xA6, 0x1E, 0xDB, 0x53, 0x8A, 0x3C, 0xF5, 0x1D, 0x59, 0xA7, 0x48, 0x2E, 0x38, 0xC8,
0x41, 0x45, 0xBA, 0x56, 0xAE, 0xC4, 0x6F, 0x5F, 0xE5, 0xE4, 0xC7, 0xB3, 0x14, 0x53, 0xC9, 0xB5,
0x37, 0xD4, 0x4B, 0x7E, 0x5D, 0xA9, 0xFF, 0x9D, 0xDC, 0xA5, 0x78, 0xAA, 0x23, 0xEC, 0xA2, 0x24,
0xDD, 0x5A, 0xB1, 0x45, 0xCF, 0x5B, 0x01, 0x6B, 0xF8, 0xBE, 0xC8, 0x04, 0xB1, 0x9A, 0x83, 0x43,
0x45, 0x99, 0x5E, 0x06, 0x45, 0x4D, 0xFA, 0x02, 0x8C, 0xE0, 0x51, 0x48, 0x1A, 0x58, 0x54, 0xE2,
0x8C, 0x5F, 0x16, 0x46, 0xF9, 0x9A, 0x9C, 0xF9, 0x16, 0x78, 0x6F, 0xEC, 0x60, 0xAA, 0xFE, 0x57,
0xC0, 0x6D, 0xBF, 0xFD, 0x5F, 0xF0, 0x61, 0xB0, 0x85, 0x82, 0x1B, 0x44, 0xDD, 0xCE, 0xCA, 0x66,
0x08, 0xDF, 0x7D, 0x51, 0xEE, 0xB0, 0xFF, 0x0F, 0x19, 0x2C, 0x32, 0xF0, 0x39, 0xA2, 0x70, 0x8F,
0x02, 0x8F, 0x89, 0x1F, 0x1F, 0x5C, 0xFA, 0x42, 0x3A, 0x82, 0x02, 0x07, 0x37, 0x33, 0xED, 0xE5,
0xA3, 0x4C, 0x1B, 0xF7, 0xF7, 0xC3, 0x2A, 0x4C, 0x99, 0x3C, 0x0A, 0x0C, 0x03, 0x60, 0x2D, 0xBD,
0xDC, 0x51, 0x9B, 0x82, 0x30, 0x0D, 0x57, 0x26, 0x9C, 0x68, 0x92, 0x6E, 0xA6, 0x24, 0x53, 0x55,
0x68, 0x5D, 0x7E, 0xAF, 0x2B, 0x4F, 0xA1, 0xFA, 0x4D, 0xEA, 0x13, 0xAB, 0x58, 0xC3, 0xA3, 0x55,
0xAC, 0xF3, 0xCD, 0x55, 0xAC, 0xDF, 0xBB, 0xB9, 0x8A, 0x15, 0x78, 0xBB, 0x81, 0xD9, 0x6C, 0xBE,
0x35, 0x1E, 0xB1, 0x9A, 0x2E, 0xB9, 0x88, 0x29, 0x4C, 0x8E, 0xBD, 0x54, 0xAC, 0xDF, 0xC1, 0x1B,
0x3C, 0xDB, 0x86, 0x0D, 0xA4, 0xBE, 0x01, 0x72, 0x09, 0x14, 0x1B, 0xF3, 0x48, 0xBE, 0x83, 0xEE,
0x71, 0x17, 0x01, 0x9A, 0x11, 0x43, 0x47, 0xCD, 0xCB, 0xFB, 0x88, 0x9C, 0x64, 0x60, 0x4D, 0xD9,
0x7B, 0xD9, 0x63, 0xF2, 0xAD, 0x51, 0xA6, 0x19, 0x8A, 0xD9, 0xBF, 0x97, 0x96, 0xA2, 0x19, 0x11,
0xB2, 0x84, 0x88, 0x2B, 0x35, 0x25, 0x1E, 0x58, 0xB4, 0xCC, 0x34, 0x99, 0x0B, 0x9A, 0x02, 0x78,
0xC9, 0x3D, 0x3B, 0xED, 0x33, 0x9A, 0xFF, 0xE0, 0xA8, 0xF1, 0x62, 0x46, 0x96, 0x4A, 0xA6, 0xC8,
0x17, 0x80, 0x0E, 0xB5, 0xB2, 0xCA, 0x53, 0x22, 0xFA, 0xA3, 0x12, 0x71, 0x64, 0x44, 0x38, 0x98,
0xD4, 0x7A, 0x50, 0xDD, 0x18, 0x7E, 0x54, 0x31, 0x9F, 0x81, 0x88, 0x85, 0x18, 0x27, 0x24, 0x5B,
0x4C, 0x5F, 0x57, 0x48, 0x1A, 0x69, 0x1B, 0xB0, 0x40, 0xD3, 0x90, 0xB9, 0xD7, 0x65, 0x71, 0xAD,
0xBE, 0x00, 0x3C, 0x45, 0x89, 0x17, 0x42, 0x59, 0xDF, 0x63, 0x3D, 0xBD, 0x65, 0x8E, 0x2A, 0xC2,
0x8F, 0xF0, 0xED, 0xE0, 0x92, 0x3F, 0x8F, 0x98, 0xCB, 0x24, 0xAE, 0x4C, 0x60, 0x7F, 0x56, 0xA7,
0xB2, 0xF6, 0x7B, 0x41, 0x97, 0xFD, 0xE4, 0xC9, 0xFA, 0x7C, 0x04, 0x07, 0xFB, 0x27, 0xC2, 0x3C,
0xF9, 0x1E, 0x31, 0x85, 0x1F, 0xE3, 0xF6, 0x87, 0x60, 0xEA, 0xA4, 0xA2, 0x63, 0x0A, 0xB9, 0x94,
0x5E, 0x83, 0x81, 0xD2, 0x63, 0xD1, 0x33, 0x30, 0x1A, 0x30, 0x98, 0x47, 0x85, 0xAB, 0xAA, 0xA8,
0x44, 0xEA, 0x02, 0xB0, 0x73, 0xCD, 0xF6, 0xBD, 0x64, 0x3E, 0x1B, 0xA5, 0xAB, 0xF5, 0x6D, 0x96,
0xAE, 0x9E, 0x86, 0x04, 0xBC, 0xEC, 0x90, 0x80, 0xD9, 0x21, 0x01, 0x4E, 0x17, 0x2E, 0x6D, 0x62,
0x96, 0xD7, 0xE0, 0xB8, 0xCB, 0xBF, 0xED, 0x1C, 0xAC, 0x4E, 0x0E, 0xA1, 0x00, 0x26, 0xBE, 0x81,
0x54, 0x71, 0xFD, 0x70, 0x05, 0x8D, 0x10, 0xB1, 0x6E, 0x84, 0x99, 0x6F, 0x5A, 0x1A, 0x3D, 0x2A,
0xBE, 0x4A, 0x59, 0x8E, 0xD4, 0x37, 0x72, 0x5B, 0xC0, 0xC0, 0xE3, 0xE2, 0xE5, 0x6F, 0x9F, 0xF0,
0x7C, 0x0D, 0x63, 0xF6, 0x22, 0x92, 0xDF, 0x9E, 0x7D, 0x03, 0x51, 0x6A, 0x44, 0x7A, 0x8B, 0xF7,
0x84, 0x54, 0x7E, 0xDF, 0xAD, 0x0A, 0x5E, 0x05, 0x39, 0x37, 0xAD, 0xBF, 0x29, 0x3A, 0x4C, 0x17,
0x48, 0xD5, 0x2D, 0x96, 0xCD, 0x11, 0x1E, 0x0C, 0x79, 0x2F, 0xE4, 0x43, 0x27, 0xA0, 0xAC, 0x5B,
0x88, 0x71, 0x59, 0xB1, 0x6C, 0xA1, 0x1D, 0x0C, 0x6F, 0x12, 0x3A, 0x60, 0x85, 0x21, 0xFE, 0xB5,
0xEB, 0xB2, 0x6D, 0xD6, 0x77, 0xA5, 0xF4, 0x5A, 0x4D, 0xBC, 0xAE, 0x9D, 0x96, 0xA3, 0x6B, 0xCE,
0xCD, 0x95, 0x2B, 0x57, 0x4E, 0xFB, 0xB6, 0x6B, 0xD4, 0xF7, 0xF1, 0xD7, 0xAE, 0x97, 0xD0, 0xCA,
0xF6, 0xB7, 0xB9, 0x51, 0x56, 0xCE, 0xD3, 0x59, 0xCE, 0xEA, 0x8B, 0xBA, 0x86, 0x78, 0x84, 0x81,
0xAF, 0x62, 0x3D, 0xAC, 0xCD, 0xD8, 0x93, 0xAD, 0x23, 0x81, 0x33, 0x52, 0x58, 0x2C, 0x29, 0x40,
0xE1, 0x23, 0x17, 0x85, 0xC9, 0x97, 0x88, 0xA5, 0x73, 0x59, 0x9C, 0x33, 0x11, 0xB8, 0x42, 0x60,
0x6A, 0x4C, 0x5D, 0x1A, 0x9C, 0xA9, 0xD5, 0x6B, 0x19, 0x93, 0xDE, 0x82, 0xFE, 0x2C, 0xB3, 0x16,
0x13, 0xE0, 0xFD, 0x48, 0xB8, 0xC0, 0x02, 0xB1, 0xEF, 0x0C, 0x43, 0x71, 0xC9, 0x52, 0xCD, 0xE4,
0x2F, 0xDD, 0xD8, 0xCC, 0x17, 0xB4, 0xEF, 0x89, 0x2B, 0xF5, 0xB0, 0x8B, 0x7A, 0xDE, 0xF4, 0x83,
0xD1, 0xEA, 0xB0, 0x71, 0xCB, 0x53, 0xDB, 0x34, 0x2B, 0x59, 0x1D, 0xB6, 0x8D, 0xBF, 0xB7, 0xFA,
0x6D, 0x61, 0x87, 0x5E, 0x9D, 0xF4, 0x69, 0x52, 0xA7, 0x27, 0x63, 0x87, 0xC0, 0xC8, 0x7D, 0xAE,
0x8B, 0xF5, 0xC4, 0x18, 0x72, 0x87, 0x60, 0x53, 0xA2, 0x01, 0x60, 0xA6, 0xAC, 0xF3, 0x0E, 0xEC,
0x55, 0x47, 0x08, 0x95, 0x95, 0x87, 0x19, 0x03, 0xCE, 0x22, 0x70, 0xC8, 0x40, 0x4D, 0xA8, 0x85,
0x7A, 0x1E, 0x8B, 0x1E, 0x98, 0xBC, 0x5A, 0xBB, 0x92, 0x3E, 0x9F, 0x9E, 0x13, 0xCA, 0x32, 0xB2,
0x6B, 0xB4, 0xAD, 0xE0, 0xCC, 0x58, 0x96, 0xDC, 0xE5, 0xCE, 0x99, 0xDC, 0x42, 0xD5, 0x1C, 0xCC,
0xB1, 0xD5, 0x7D, 0xC9, 0x5F, 0xDB, 0x31, 0x0D, 0xE1, 0xD2, 0x9F, 0x69, 0xA9, 0xF9, 0x93, 0x3D,
0xE9, 0xEC, 0x57, 0x0F, 0xB1, 0xC5, 0x1D, 0x2D, 0x7C, 0x95, 0xFD, 0x05, 0x8B, 0xC0, 0x3C, 0x7C,
0xC0, 0x2E, 0x01, 0x26, 0x7A, 0x67, 0xA0, 0x19, 0xC6, 0xE4, 0x4C, 0x00, 0xF2, 0x39, 0x2B, 0x51,
0x6D, 0xAB, 0x6D, 0x15, 0x45, 0x44, 0xEE, 0xFC, 0x80, 0xBA, 0xF9, 0x86, 0x65, 0xEC, 0x42, 0x4C,
0x40, 0x34, 0xBC, 0x8B, 0x0F, 0x7D, 0x9B, 0x33, 0x5D, 0x2B, 0x1A, 0x58, 0x85, 0x20, 0xC4, 0xA8,
0xB4, 0x70, 0x4C, 0x6B, 0xBC, 0x92, 0x86, 0x99, 0x17, 0xDE, 0xA4, 0x65, 0xD1, 0xC9, 0x9B, 0xDC,
0xBB, 0xFE, 0xA8, 0xD8, 0x4F, 0x7A, 0x95, 0xC9, 0x19, 0xC1, 0xD1, 0x04, 0x9F, 0xB0, 0x3B, 0x62,
0x6E, 0xE9, 0x02, 0xE6, 0xEA, 0x95, 0x9F, 0xD7, 0x2C, 0x34, 0x17, 0x4B, 0x75, 0x09, 0x6E, 0xE8,
0xA7, 0xAA, 0xF8, 0x83, 0x2E, 0xEC, 0x21, 0x1B, 0x2A, 0x0A, 0x03, 0x4F, 0x0C, 0x95, 0xB1, 0x24,
0xA1, 0x26, 0x20, 0x61, 0x65, 0x9C, 0x51, 0xCF, 0x10, 0xA1, 0x18, 0x97, 0x3D, 0x9D, 0xDA, 0x18,
0x81, 0x42, 0x22, 0xFC, 0x08, 0x3A, 0xA5, 0x88, 0x62, 0xB2, 0x62, 0x1E, 0xD5, 0x03, 0x19, 0x56,
0x3B, 0x18, 0x8A, 0x92, 0x18, 0x15, 0x5F, 0xC4, 0x2F, 0xC3, 0x4B, 0xEC, 0x5E, 0x9A, 0xA2, 0x64,
0x90, 0xB1, 0xA8, 0x3D, 0x80, 0x70, 0x19, 0x92, 0x27, 0x61, 0x23, 0x33, 0x8B, 0x3F, 0x91, 0x3B,
0x3C, 0xD9, 0x03, 0x67, 0x4E, 0xDF, 0x87, 0x89, 0x7F, 0x39, 0xD6, 0x60, 0xCD, 0x02, 0x4E, 0x54,
0xEC, 0xE3, 0x70, 0x9D, 0x5B, 0x8F, 0xB6, 0x7E, 0x61, 0x51, 0x60, 0xD3, 0x17, 0xA2, 0x95, 0xFA,
0xF4, 0x85, 0x21, 0x40, 0x2E, 0x4C, 0x8D, 0x04, 0xBD, 0x11, 0x29, 0x4B, 0xF1, 0x4F, 0x81, 0x86,
0x8E, 0x28, 0xEE, 0x88, 0xAF, 0x76, 0x41, 0x87, 0x2C, 0xDC, 0xCC, 0xA4, 0x5F, 0xEF, 0x10, 0x15,
0x96, 0x5F, 0xF3, 0x83, 0xB0, 0xF7, 0x7B, 0x58, 0x8D, 0xC9, 0x55, 0x4C, 0x72, 0x96, 0xB5, 0xEE,
0x51, 0xE7, 0x27, 0xAB, 0xD5, 0xDD, 0xA7, 0x60, 0x91, 0x6F, 0xDB, 0xAA, 0xB9, 0xB9, 0x45, 0xAA,
0xFF, 0xA9, 0xD7, 0x8F, 0xFB, 0xAC, 0x1F, 0x0F, 0x08, 0x5D, 0xF8, 0xDA, 0x22, 0xB5, 0x22, 0x4A,
0xC2, 0x0C, 0x1A, 0x93, 0x98, 0x15, 0x51, 0xA5, 0x6D, 0x7D, 0x2F, 0xCD, 0x98, 0x8A, 0xDE, 0x01,
0x17, 0xDD, 0xFF, 0x81, 0x59, 0x52, 0x6A, 0x93, 0x3B, 0x90, 0x52, 0xDB, 0xE9, 0x8D, 0x63, 0xDE,
0xD4, 0x7B, 0xBC, 0xA3, 0x23, 0x83, 0x20, 0xFA, 0xC3, 0x9F, 0x99, 0x9A, 0xF6, 0x43, 0xF2, 0xBD,
0x02, 0x8C, 0xE5, 0x5A, 0xC7, 0x58, 0x6D, 0xA2, 0xC0, 0xD3, 0x26, 0x8E, 0xA9, 0x94, 0xCF, 0x17,
0x37, 0xFC, 0x48, 0xBA, 0x70, 0xB4, 0x9D, 0x2E, 0x9C, 0xDE, 0x94, 0x2E, 0x7C, 0xE3, 0x13, 0xA7,
0x0B, 0x4F, 0x0E, 0x57, 0x1F, 0x8F, 0xA6, 0x0B, 0x7B, 0xC3, 0x83, 0x9A, 0xD4, 0xD9, 0x9F, 0xD3,
0x74, 0xE1, 0xDF, 0x2E, 0xE9, 0xC2, 0x83, 0x66, 0x78, 0xD2, 0x9B, 0x19, 0x9D, 0x43, 0xB3, 0x55,
0x70, 0xBC, 0xC4, 0x07, 0x8E, 0xBF, 0x2E, 0x46, 0xC3, 0x92, 0xB4, 0x9B, 0xE6, 0x05, 0x12, 0xE6,
0xEC, 0x05, 0x59, 0x44, 0x6B, 0xDF, 0x40, 0xC9, 0xD7, 0x0C, 0xE0, 0x9B, 0x3B, 0x58, 0x6B, 0x09,
0x4B, 0x57, 0x93, 0x2C, 0x37, 0xF4, 0x47, 0x67, 0xDD, 0x68, 0x55, 0x2A, 0x16, 0xC8, 0x1B, 0x35,
0x93, 0xE3, 0x45, 0x62, 0x7D, 0x1F, 0x74, 0x9B, 0x76, 0x95, 0xD9, 0xB8, 0xE9, 0xC3, 0xED, 0xDD,
0x4E, 0x21, 0xF2, 0x91, 0x8F, 0x2F, 0x40, 0x02, 0x29, 0xEC, 0x6C, 0x54, 0x7B, 0xEF, 0x20, 0x06,
0x01, 0xB4, 0xF3, 0x1A, 0xAB, 0xBC, 0x28, 0x57, 0x2A, 0xC3, 0x7C, 0x40, 0x31, 0x56, 0x91, 0xAF,
0x18, 0x37, 0x7E, 0xAF, 0x21, 0xA5, 0x03, 0xF9, 0x8F, 0x76, 0x30, 0xF2, 0xC3, 0x18, 0xDC, 0x34,
0x19, 0x6B, 0x18, 0x50, 0xD3, 0xF0, 0x61, 0xA7, 0xAD, 0x5C, 0x34, 0x33, 0xD7, 0x9A, 0xE3, 0xD8,
0xE9, 0x49, 0xD9, 0x2A, 0xB0, 0x0B, 0xB5, 0x28, 0x74, 0x20, 0xBC, 0xB0, 0x45, 0x32, 0xE6, 0xD0,
0xDF, 0x21, 0x92, 0x91, 0x4B, 0x9F, 0x99, 0xFE, 0xDD, 0xD2, 0xEA, 0xDA, 0xB8, 0x9A, 0x45, 0x47,
0xB2, 0xF6, 0xFF, 0x93, 0x64, 0x35, 0x49, 0x16, 0xAC, 0x24, 0x3B, 0xD0, 0xD6, 0xD8, 0xA9, 0x92,
0x6C, 0x5F, 0x49, 0x16, 0x74, 0xE2, 0xB8, 0xC6, 0xE8, 0x81, 0xCC, 0x76, 0x8E, 0xE3, 0x82, 0x7D,
0x30, 0x9B, 0x19, 0xE9, 0x43, 0x05, 0xFC, 0x13, 0x4D, 0xE3, 0x3F, 0x92, 0xEE, 0xB3, 0xA0, 0xC9,
0x4A, 0xB2, 0x33, 0x87, 0xDB, 0x24, 0xBB, 0x7B, 0xFB, 0x1A, 0x5C, 0x76, 0x7D, 0x0D, 0x72, 0xED,
0x6B, 0xE0, 0xF6, 0x97, 0x3D, 0xDA, 0xC2, 0x71, 0x3A, 0x5A, 0xEE, 0xBC, 0x24, 0xDF, 0xE6, 0xDB,
0xC0, 0x06, 0x1B, 0xBC, 0xFE, 0x21, 0x72, 0xC7, 0xCF, 0x22, 0x77, 0xFC, 0x89, 0x0E, 0xB9, 0xE3,
0x05, 0x73, 0xC7, 0x47, 0xE6, 0x8E, 0xFF, 0x08, 0x66, 0xC1, 0xBB, 0xF5, 0x06, 0x7E, 0xDB, 0xDD,
0x80, 0x2D, 0x51, 0xB3, 0x91, 0x9F, 0x4B, 0xB2, 0x03, 0x38, 0x6E, 0x8C, 0x91, 0x78, 0x2E, 0xAF,
0x09, 0x9A, 0xD4, 0xCA, 0xAB, 0x67, 0x2F, 0x87, 0x4D, 0x61, 0xD0, 0x46, 0x3D, 0xAA, 0x0B, 0x0F,
0x25, 0x97, 0x71, 0x59, 0x79, 0xCC, 0xC8, 0xCD, 0x67, 0x0F, 0x9C, 0x14, 0x9A, 0xC9, 0x6B, 0x7C,
0xD7, 0x1D, 0x26, 0x18, 0x9C, 0x43, 0xD5, 0x2B, 0x53, 0x04, 0x9D, 0x2B, 0x77, 0x76, 0xBD, 0x19,
0x22, 0x47, 0xDE, 0xA5, 0x8B, 0x0C, 0x0B, 0xDD, 0xDB, 0x05, 0x56, 0x76, 0x4D, 0x67, 0x5C, 0x2F,
0xA0, 0xC4, 0x39, 0x52, 0xDC, 0x3F, 0xB9, 0xAA, 0xA2, 0xCC, 0x6C, 0x1C, 0xAA, 0xCC, 0xF5, 0x02,
0x2A, 0x54, 0x87, 0xAA, 0x65, 0x7B, 0x79, 0xED, 0x37, 0xAC, 0x59, 0x05, 0x8B, 0xF3, 0x74, 0x0B,
0x27, 0x6A, 0x01, 0x26, 0xC3, 0xFA, 0x68, 0x2B, 0xDA, 0x30, 0xE7, 0x66, 0xA2, 0xF7, 0x22, 0xDC,
0xB6, 0x61, 0x80, 0x93, 0x7F, 0x3E, 0x93, 0x89, 0xFA, 0x9F, 0x4E, 0xE3, 0x89, 0x2B, 0xB7, 0x6A,
0x3C, 0xD1, 0xDE, 0xDC, 0x78, 0xE2, 0xBA, 0x36, 0x9E, 0x60, 0x47, 0x76, 0x7B, 0x9A, 0x3E, 0xA0,
0x3F, 0xE9, 0x38, 0xD6, 0x85, 0xF0, 0xF4, 0x1E, 0x8F, 0x18, 0xAD, 0x41, 0x80, 0x15, 0x3E, 0xED,
0x88, 0x5B, 0x0E, 0x3D, 0xE9, 0x94, 0x68, 0x8B, 0x0C, 0x22, 0x52, 0x95, 0x7F, 0x54, 0x60, 0x46,
0xA1, 0x6B, 0xF1, 0x58, 0xC5, 0x92, 0x58, 0xF4, 0xDB, 0x01, 0x5A, 0xE8, 0xCA, 0x10, 0x68, 0xA8,
0xC7, 0xED, 0x4B, 0xE0, 0x51, 0xD8, 0x4B, 0xE3, 0x25, 0x1A, 0x92, 0x88, 0x40, 0x7F, 0x84, 0xAA,
0x6C, 0xF5, 0x71, 0x77, 0xD7, 0xAD, 0x44, 0x48, 0x8F, 0x2E, 0x2E, 0x75, 0x85, 0xA2, 0xD7, 0xD3,
0x2D, 0x09, 0x3D, 0x9F, 0x4A, 0xE8, 0x08, 0x72, 0xCE, 0x06, 0xEC, 0x5F, 0x5F, 0x77, 0x6C, 0x3D,
0x7F, 0x96, 0x84, 0x7E, 0x76, 0x67, 0x5A, 0x82, 0x67, 0x62, 0x64, 0xD1, 0x38, 0xEF, 0x49, 0xC9,
0x8B, 0xA4, 0x54, 0x4A, 0x4A, 0xF1, 0x6C, 0xE3, 0x5F, 0x3E, 0x8D, 0xD0, 0xFE, 0x42, 0x68, 0xE3,
0x62, 0xB8, 0xB7, 0x55, 0xBA, 0x71, 0x16, 0x75, 0x8F, 0xDF, 0xAE, 0x6A, 0x6F, 0xFE, 0xEF, 0x2C,
0xDD, 0x40, 0x13, 0x26, 0x20, 0x58, 0x1E, 0x11, 0x3B, 0xE0, 0x6F, 0x7E, 0x33, 0x7F, 0xC1, 0x04,
0xF5, 0x94, 0xAC, 0xA5, 0x1B, 0x3D, 0x0E, 0x5A, 0xBA, 0xA1, 0xC1, 0x7B, 0xED, 0xA0, 0xE0, 0x82,
0x77, 0x2E, 0xEC, 0x31, 0x6F, 0x38, 0xE4, 0xA4, 0x86, 0xDB, 0xEA, 0x4F, 0x3E, 0xF0, 0x32, 0xBA,
0xFB, 0x68, 0xD3, 0x7D, 0xE8, 0x8D, 0x78, 0xCE, 0x8B, 0xCE, 0xF5, 0x41, 0x47, 0x6E, 0x3B, 0x29,
0x18, 0x9D, 0xD6, 0x70, 0xBB, 0x76, 0x49, 0x37, 0x95, 0x56, 0xCD, 0x43, 0x8E, 0x60, 0x08, 0x68,
0x44, 0x2B, 0x4B, 0x34, 0x56, 0xAA, 0x84, 0x4E, 0x4F, 0xAA, 0x0C, 0xBB, 0xB5, 0x03, 0xF1, 0xB4,
0x6E, 0x2D, 0x97, 0x54, 0xB9, 0x33, 0xA0, 0x71, 0x9B, 0x50, 0x71, 0x04, 0xBE, 0x9F, 0xC5, 0xCF,
0x89, 0x32, 0xFD, 0xAE, 0xAC, 0x80, 0xD8, 0xB1, 0xA2, 0x54, 0x6F, 0x20, 0x96, 0x64, 0x11, 0x46,
0x2A, 0x60, 0xD5, 0x25, 0xAC, 0xEF, 0xE8, 0xD7, 0xA4, 0x4A, 0xEE, 0xF5, 0xC2, 0x68, 0x52, 0x25,
0x41, 0xBC, 0xF4, 0xE6, 0xA4, 0xCA, 0x12, 0x90, 0xAD, 0x6A, 0x74, 0xB3, 0x36, 0x65, 0xD1, 0x0E,
0x17, 0x28, 0xD5, 0x8F, 0x07, 0x2F, 0x47, 0x6F, 0x81, 0x91, 0x15, 0xEB, 0xE2, 0x6F, 0xE5, 0xEC,
0x5B, 0x93, 0x11, 0x36, 0x10, 0x7F, 0x66, 0x66, 0x82, 0x95, 0xF6, 0x9F, 0xC8, 0xDE, 0xA6, 0x50,
0x56, 0xF7, 0xBF, 0x0F, 0x5D, 0x77, 0x13, 0xD7, 0x59, 0xCC, 0x69, 0xAF, 0x63, 0x2F, 0xED, 0x49,
0x6F, 0x76, 0x4C, 0xC8, 0x40, 0x2C, 0xC3, 0x67, 0xE3, 0x05, 0xF2, 0x2F, 0x7C, 0x9E, 0xB5, 0x33,
0x30, 0xC6, 0x77, 0x79, 0x2B, 0xFB, 0xEA, 0x0C, 0x43, 0x05, 0x18, 0x39, 0x9B, 0xB1, 0x55, 0xDA,
0x69, 0x00, 0x59, 0xE8, 0x62, 0x5C, 0x74, 0xC8, 0xB7, 0x1D, 0x90, 0x7B, 0x7B, 0x3E, 0x42, 0x5A,
0xEC, 0x55, 0x54, 0x7B, 0x4D, 0x93, 0xB8, 0x55, 0xEC, 0x89, 0xE9, 0xAB, 0xC9, 0xD0, 0xB9, 0x0D,
0x46, 0x07, 0x1E, 0xFD, 0xA9, 0xD9, 0xBE, 0x4F, 0xBB, 0x7D, 0xF4, 0x9B, 0x24, 0xA1, 0x23, 0x54,
0x4A, 0x55, 0x90, 0xD8, 0x32, 0xD1, 0x56, 0x2B, 0xE1, 0x18, 0x61, 0x45, 0x82, 0x31, 0x29, 0x13,
0xA5, 0x12, 0x8D, 0x32, 0x9A, 0x01, 0x37, 0x11, 0xEB, 0xEA, 0x49, 0xC4, 0xBA, 0xA0, 0xC8, 0xC9,
0x27, 0x24, 0x56, 0x49, 0x62, 0x89, 0x3A, 0xA1, 0xA4, 0x44, 0xEA, 0x5E, 0x89, 0x9E, 0xEE, 0x9E,
0xEB, 0xA2, 0xB2, 0xF8, 0x1F, 0x8E, 0x58, 0x2E, 0x46, 0xA8, 0xE1, 0xCA, 0x05, 0xAE, 0xB8, 0x74,
0x24, 0x42, 0xB8, 0xA7, 0x2F, 0xAF, 0xEB, 0xCB, 0xDF, 0x9B, 0x6D, 0x22, 0x97, 0xDB, 0x44, 0x2E,
0x1C, 0x91, 0x9B, 0x1E, 0x44, 0x46, 0x8D, 0x44, 0x7F, 0x3E, 0x6C, 0xA3, 0x21, 0x7E, 0xA1, 0x4F,
0x86, 0xA0, 0x9F, 0xAA, 0x5E, 0x9D, 0xD6, 0x88, 0x0D, 0xA9, 0x92, 0x55, 0x8A, 0xE1, 0xB6, 0x0F,
0xC1, 0x17, 0xB9, 0x68, 0x82, 0xC9, 0x9F, 0x35, 0x06, 0xE7, 0x1E, 0x94, 0x50, 0xF5, 0x2B, 0xA6,
0xB7, 0xB7, 0x6A, 0x9D, 0x88, 0x40, 0x5F, 0xB3, 0x7A, 0x1D, 0x8F, 0x7C, 0xCA, 0xCF, 0xC6, 0xD0,
0x9F, 0x2F, 0xAF, 0x01, 0xD2, 0xB3, 0x4E, 0xA5, 0xB7, 0xEA, 0xF3, 0xD2, 0xB0, 0x58, 0xB3, 0xAA,
0x56, 0x45, 0x3F, 0x5D, 0x68, 0xD6, 0x4E, 0xE8, 0x6B, 0x88, 0xF6, 0xBA, 0xB9, 0xE5, 0xCF, 0x9F,
0x1B, 0xE6, 0x6E, 0x37, 0xCC, 0x3D, 0xF2, 0xF3, 0xA0, 0x03, 0x1A, 0x62, 0xD7, 0xDA, 0x4C, 0x6B,
0xD0, 0x92, 0x56, 0x61, 0xA7, 0xC0, 0xC5, 0xBA, 0x96, 0x46, 0x6C, 0x4B, 0x63, 0x85, 0xD3, 0x7E,
0x52, 0x70, 0xA0, 0xF0, 0x4A, 0x81, 0x9A, 0xEE, 0xD0, 0xD6, 0x22, 0x43, 0x92, 0x3C, 0xB2, 0xDD,
0x79, 0x74, 0xC9, 0x0C, 0xEB, 0xAF, 0xFE, 0x6B, 0xB3, 0x1F, 0x76, 0xB2, 0xB1, 0x3C, 0x93, 0x3C,
0x31, 0x12, 0xFC, 0x0E, 0x7F, 0xAA, 0x5D, 0xE8, 0xBD, 0xDF, 0xBE, 0xFF, 0x38, 0x09, 0xBA, 0xFB,
0xDE, 0x9B, 0xE4, 0xE8, 0xE4, 0x83, 0x5F, 0x6B, 0x59, 0x53, 0x37, 0xBC, 0xAF, 0xCD, 0xD7, 0x2E,
0xD1, 0xB8, 0x16, 0x9B, 0x81, 0x49, 0xCD, 0x66, 0x8C, 0x7A, 0x6A, 0xF5, 0x8B, 0x22, 0x1F, 0x72,
0xCF, 0x08, 0x0B, 0xC9, 0x42, 0xF8, 0x75, 0x79, 0x0E, 0xD5, 0x6F, 0x61, 0x57, 0x09, 0x33, 0x8B,
0xAC, 0x41, 0x41, 0x80, 0x6C, 0x23, 0x8B, 0x3C, 0xB1, 0xA0, 0xE4, 0x66, 0xBD, 0x65, 0x84, 0x4B,
0xC3, 0xB2, 0x2C, 0xDB, 0x21, 0xF3, 0x7A, 0xA3, 0xA7, 0x61, 0x59, 0xD7, 0x01, 0xE8, 0x48, 0x84,
0xCB, 0x85, 0x63, 0xEC, 0xE2, 0x29, 0x59, 0x8A, 0x96, 0x1D, 0xAB, 0xC6, 0x70, 0xA1, 0x76, 0x71,
0xA2, 0x75, 0x34, 0xB1, 0x76, 0x6C, 0x8C, 0x14, 0x1C, 0x0D, 0x87, 0xB5, 0x99, 0x59, 0xA1, 0x3B,
0xAB, 0xD2, 0x17, 0x4B, 0x90, 0x06, 0x11, 0x2E, 0xB4, 0x26, 0xB0, 0x2C, 0x43, 0x06, 0x56, 0xE6,
0x24, 0x96, 0x2E, 0xCD, 0x92, 0x5D, 0x48, 0x81, 0xF3, 0x0D, 0x55, 0xC6, 0x4C, 0x2B, 0x31, 0x9E,
0x5B, 0x34, 0x07, 0x81, 0x3E, 0x7C, 0xD9, 0x65, 0xEB, 0xE3, 0xD1, 0x22, 0xD5, 0x4F, 0x9E, 0x69,
0x65, 0x0F, 0xA4, 0xF9, 0xEE, 0x5F, 0x99, 0x49, 0x76, 0x1B, 0x53, 0xC6, 0xE3, 0x5A, 0xC6, 0x75,
0x29, 0x42, 0x02, 0xED, 0x39, 0xF9, 0xEB, 0x67, 0x22, 0x5B, 0x32, 0x2D, 0x7A, 0xB2, 0x22, 0x80,
0x64, 0xC9, 0x53, 0xB0, 0xDA, 0xA4, 0x21, 0x3E, 0x76, 0xDE, 0x48, 0x6A, 0x31, 0x12, 0x0A, 0x20,
0x9B, 0x60, 0x79, 0x6A, 0x5C, 0xDA, 0x61, 0x9B, 0xD8, 0x7E, 0x6E, 0xD0, 0x4D, 0x26, 0x42, 0x70,
0x2F, 0xD3, 0x67, 0x09, 0x95, 0x0B, 0x4E, 0x79, 0xD7, 0x75, 0x9A, 0x9D, 0x5C, 0xA7, 0xD9, 0x7A,
0xED, 0x34, 0xBB, 0x51, 0x18, 0x8A, 0xFD, 0x2D, 0xA6, 0xB3, 0x77, 0x24, 0x38, 0xBE, 0xB8, 0x96,
0xBB, 0xDB, 0xF9, 0x9D, 0x27, 0xB5, 0x76, 0x68, 0x96, 0x82, 0x98, 0xA5, 0xB5, 0x43, 0x7B, 0xCB,
0xD6, 0x0E, 0x3D, 0x49, 0xC4, 0x37, 0x8A, 0xE8, 0xDF, 0x46, 0xE2, 0xC4, 0x5D, 0xCA, 0x44, 0xB6,
0xDD, 0xE8, 0xD9, 0xDA, 0xE1, 0xAA, 0xD0, 0xB7, 0xB2, 0x18, 0xDB, 0x61, 0xBF, 0x71, 0x89, 0xCE,
0x6F, 0xCC, 0xF0, 0x38, 0x5F, 0xF5, 0x81, 0xBA, 0x4D, 0x5F, 0x34, 0xE6, 0xF3, 0xD0, 0x4C, 0x16,
0xC3, 0x63, 0x06, 0xC9, 0xE4, 0xDA, 0x1E, 0x1D, 0xF7, 0x1D, 0xFB, 0xED, 0x54, 0x5D, 0x2F, 0x77,
0x0F, 0xFA, 0x69, 0x0B, 0xF7, 0xE8, 0x85, 0xD9, 0x81, 0x13, 0xEE, 0x6B, 0x08, 0x19, 0xD0, 0x31,
0x1C, 0x91, 0x36, 0x3A, 0x3E, 0x6C, 0x55, 0x24, 0x78, 0xA3, 0x86, 0xD7, 0x68, 0x11, 0x8E, 0x0A,
0xCA, 0x90, 0x45, 0x43, 0x24, 0xD4, 0x10, 0x8E, 0xB5, 0x4D, 0xF0, 0xDB, 0xA7, 0x9F, 0xAD, 0x19,
0x15, 0x40, 0x04, 0xAF, 0x64, 0xC2, 0x24, 0x39, 0x8E, 0x0D, 0x2A, 0x10, 0x10, 0xC0, 0x9E, 0xE1,
0x53, 0x89, 0xF6, 0x57, 0x9E, 0x19, 0x17, 0xBC, 0x0F, 0xCB, 0x74, 0x0F, 0xF2, 0x6A, 0xCF, 0xC7,
0x4B, 0xF1, 0x4C, 0x86, 0xC1, 0x25, 0xD7, 0xEF, 0xB6, 0x85, 0xBA, 0xC3, 0x49, 0xD4, 0xF3, 0xE9,
0x49, 0xD4, 0x77, 0x3C, 0x74, 0xFA, 0x42, 0x89, 0x15, 0xDE, 0x5B, 0x42, 0xA7, 0x81, 0x1D, 0xD0,
0x5C, 0xCA, 0x3E, 0x21, 0x7C, 0xF5, 0x51, 0xB7, 0xEE, 0xA8, 0x70, 0x03, 0x39, 0xA7, 0x9B, 0xA0,
0xEE, 0xE0, 0x60, 0xA3, 0xCF, 0x88, 0x07, 0x7F, 0xD3, 0xC7, 0x1E, 0x85, 0xB1, 0x3E, 0x46, 0x4A,
0xFD, 0xF8, 0x23, 0x27, 0x67, 0x5B, 0xFE, 0x3B, 0x5D, 0xE6, 0x05, 0x0A, 0xD3, 0x5A, 0xAB, 0x2F,
0xB9, 0x12, 0x30, 0xEF, 0x10, 0xE6, 0xC5, 0x3F, 0xD1, 0x81, 0x4F, 0x73, 0x46, 0x81, 0x91, 0xB8,
0x28, 0xF3, 0xA1, 0xFB, 0x7E, 0xC0, 0x7C, 0x7C, 0xF1, 0xDE, 0xC3, 0xFE, 0xCC, 0xAC, 0xCE, 0x7B,
0x62, 0xBF, 0x5B, 0x3B, 0xDF, 0x7D, 0xAB, 0xD0, 0x70, 0x05, 0x6B, 0x3B, 0xF7, 0x70, 0xB7, 0x6C,
0x31, 0x40, 0x35, 0x11, 0x36, 0x77, 0xD2, 0x8A, 0xD2, 0x2B, 0xCA, 0x9D, 0xC5, 0x7A, 0x97, 0x76,
0xFC, 0x0E, 0x3E, 0x71, 0xC7, 0xEF, 0x6E, 0xE9, 0xF8, 0xBD, 0xC4, 0x40, 0xB3, 0xFA, 0x78, 0x86,
0xA2, 0x3D, 0x1E, 0x1D, 0x5D, 0x44, 0xDD, 0xA6, 0xB9, 0xE3, 0xDA, 0xC7, 0xF1, 0x4B, 0xE6, 0x53,
0x69, 0xF8, 0xF3, 0x5C, 0xAE, 0x0D, 0x7F, 0x7A, 0x36, 0xFC, 0x19, 0xF6, 0xB5, 0xE1, 0x8F, 0xD5,
0x86, 0x3F, 0xF6, 0x2D, 0x34, 0xFC, 0x11, 0xC3, 0x8C, 0xFC, 0x76, 0xD8, 0x1D, 0x51, 0x9C, 0x4E,
0x63, 0x66, 0x47, 0x32, 0x10, 0xDD, 0xF0, 0x1D, 0xCC, 0xE7, 0x29, 0xF2, 0x54, 0x32, 0xC3, 0x2B,
0x74, 0x3D, 0xB6, 0x35, 0xCD, 0xB5, 0x51, 0xAE, 0xF1, 0xD7, 0xEA, 0xFD, 0x5B, 0xBD, 0x49, 0x9A,
0x55, 0xB7, 0x7A, 0x33, 0x3A, 0x5C, 0xFA, 0x04, 0x8D, 0xC7, 0xCA, 0x7C, 0x6B, 0x46, 0xEC, 0x02,
0x0D, 0x42, 0x84, 0x0A, 0xAC, 0x73, 0xD0, 0xD9, 0xFF, 0x98, 0xD5, 0x0B, 0x58, 0x73, 0x0F, 0x4F,
0xFD, 0xB9, 0x7B, 0x9F, 0x08, 0xB4, 0x98, 0x36, 0x5F, 0x84, 0x2F, 0x79, 0x16, 0x7C, 0xB7, 0x87,
0x8E, 0x77, 0x3D, 0x04, 0x6B, 0xEB, 0x2C, 0xBF, 0x74, 0xB8, 0x79, 0xC6, 0x9F, 0x4A, 0x4F, 0xBF,
0xB8, 0xD4, 0x85, 0xA8, 0x89, 0xA8, 0x16, 0x35, 0x61, 0xB8, 0xAA, 0x26, 0x45, 0xCF, 0x2F, 0x6E,
0xFA, 0xE7, 0x6C, 0x3D, 0xF6, 0x90, 0xD7, 0x8F, 0xE6, 0x08, 0xC1, 0x14, 0x8D, 0xDA, 0x19, 0xDF,
0xEF, 0x82, 0xF6, 0xE4, 0x79, 0x7E, 0x3A, 0x9D, 0x15, 0x09, 0xEC, 0xAF, 0xC6, 0x7F, 0xED, 0x5C,
0x63, 0xC5, 0x8D, 0x21, 0xA8, 0x35, 0x60, 0x6B, 0x6B, 0x7D, 0x62, 0x16, 0x1E, 0x26, 0x46, 0x87,
0x34, 0xFC, 0xA0, 0xD7, 0xF2, 0xA8, 0xA0, 0x5F, 0x9E, 0xB0, 0x35, 0x14, 0x4B, 0x6A, 0x95, 0xB3,
0x0C, 0x96, 0xE8, 0x10, 0xEA, 0x89, 0xFB, 0xC5, 0x46, 0x70, 0x6E, 0x77, 0xA5, 0x98, 0x14, 0xF6,
0x63, 0xAA, 0xA8, 0x4D, 0x96, 0xBB, 0x6F, 0x67, 0x4B, 0x38, 0x60, 0x75, 0xD1, 0x93, 0xC5, 0x43,
0x87, 0xA9, 0xB6, 0xC0, 0xB1, 0x68, 0xD4, 0x48, 0x98, 0x12, 0xBD, 0x39, 0xD8, 0x79, 0x13, 0x52,
0x7A, 0x5C, 0x9E, 0xAF, 0x78, 0x40, 0xD1, 0xC3, 0x9E, 0xAC, 0xB1, 0xED, 0x35, 0xC7, 0x00, 0x39,
0xDD, 0xCE, 0xB7, 0x41, 0x69, 0x56, 0x85, 0x4A, 0x4C, 0x21, 0x47, 0xAD, 0x3D, 0xA9, 0x4B, 0xA4,
0xEC, 0xE7, 0x96, 0xD1, 0x32, 0x31, 0xFD, 0xA1, 0x2A, 0xD1, 0xE8, 0x10, 0x45, 0x05, 0xA4, 0xB9,
0xF8, 0x95, 0x35, 0x9B, 0xC0, 0x1E, 0x00, 0xF8, 0x42, 0x8F, 0xC8, 0xE4, 0xFF, 0xB2, 0x4A, 0x5D,
0x93, 0x61, 0x90, 0xCF, 0x80, 0x92, 0x3F, 0xC6, 0x62, 0x90, 0x0A, 0x70, 0x4F, 0xD2, 0x24, 0x22,
0xA1, 0x5E, 0x2F, 0x9E, 0xEB, 0xC5, 0x51, 0xAB, 0xAD, 0x7D, 0xCC, 0xA2, 0x8E, 0xA9, 0x67, 0x23,
0x86, 0xF9, 0x78, 0xC1, 0xD8, 0x83, 0xD4, 0xE3, 0x67, 0x69, 0x37, 0x5D, 0x84, 0xB1, 0x07, 0x3B,
0x2A, 0x98, 0x9E, 0xD5, 0xEC, 0xA2, 0xD2, 0xB5, 0x98, 0x3C, 0xA9, 0x6C, 0xEF, 0xB3, 0xFF, 0xD8,
0x65, 0x2D, 0x4B, 0x17, 0xD5, 0xE3, 0x41, 0x05, 0x9F, 0x93, 0x6B, 0x26, 0xDA, 0xC7, 0x85, 0xE9,
0xA7, 0x67, 0x0E, 0x3F, 0xBD, 0x1E, 0x21, 0xFA, 0x28, 0x80, 0xC4, 0x15, 0x42, 0xC1, 0xB8, 0x44,
0xAD, 0x2D, 0x48, 0x5D, 0x95, 0x41, 0xBE, 0x94, 0x0B, 0xCD, 0x5B, 0xCF, 0x3F, 0xE8, 0x36, 0xD3,
0xAF, 0x36, 0xB0, 0x7A, 0xD4, 0xE9, 0x76, 0x61, 0x0F, 0x73, 0x62, 0x9A, 0xBD, 0x9A, 0xDC, 0xB4,
0xEF, 0x35, 0x26, 0xA7, 0x91, 0x36, 0x00, 0x08, 0x23, 0x0B, 0x52, 0x10, 0x1C, 0x15, 0xB9, 0x80,
0xFA, 0x8E, 0x46, 0xFB, 0x12, 0xB3, 0xB8, 0x0D, 0x53, 0xBD, 0xAC, 0x61, 0x2E, 0xF4, 0xCA, 0x46,
0xFF, 0x9A, 0x3E, 0xEC, 0x45, 0x36, 0xE4, 0xDE, 0xE8, 0xAD, 0x8E, 0xC2, 0xCE, 0x44, 0x77, 0x37,
0x39, 0x14, 0x0E, 0x7E, 0x4C, 0xE4, 0x86, 0x3F, 0xA0, 0x0D, 0x06, 0xBA, 0x60, 0xC8, 0x9B, 0x0D,
0x4A, 0xC7, 0xAC, 0x6F, 0x89, 0x45, 0x20, 0xF5, 0xC8, 0x15, 0x90, 0xC2, 0x0A, 0x0E, 0xF8, 0xDC,
0x8C, 0xB8, 0x07, 0xD0, 0x51, 0x50, 0xD6, 0xEE, 0x99, 0x13, 0x19, 0xE9, 0x33, 0x4C, 0x19, 0x4C,
0x24, 0x6D, 0xB3, 0x3A, 0x66, 0xFB, 0x32, 0x11, 0x5D, 0xFB, 0x27, 0x4D, 0x01, 0x76, 0x33, 0xFC,
0x44, 0xA4, 0x81, 0x83, 0x80, 0x3E, 0xC0, 0xC3, 0xFB, 0xC9, 0xC6, 0xB8, 0x2D, 0x62, 0x3E, 0x17,
0x90, 0xEF, 0xFB, 0xFD, 0x3A, 0x9C, 0xC2, 0x0E, 0x24, 0x44, 0x03, 0x3F, 0xF4, 0x97, 0x42, 0xF4,
0x20, 0x9F, 0x58, 0x60, 0x5D, 0xD5, 0x91, 0x72, 0x4C, 0xEE, 0x88, 0x48, 0x70, 0xC3, 0x5F, 0x70,
0xCE, 0x31, 0x5A, 0xA2, 0xD0, 0x63, 0xBC, 0xFC, 0xD6, 0x2F, 0xF1, 0xEA, 0xB0, 0x89, 0x9A, 0x3F,
0x23, 0x9E, 0x9F, 0x10, 0xF1, 0x0C, 0x5A, 0x85, 0x40, 0xB8, 0xAE, 0x54, 0xE8, 0x2E, 0xE3, 0x40,
0x38, 0xDA, 0x19, 0x97, 0x49, 0x7E, 0x6B, 0x20, 0xF9, 0x2E, 0x69, 0xFD, 0xEA, 0xE1, 0x09, 0xF4,
0x71, 0x27, 0x9B, 0x51, 0x2C, 0x9D, 0xDA, 0x9F, 0x85, 0x8A, 0x41, 0x1B, 0x36, 0x37, 0x71, 0xF2,
0x1F, 0xF9, 0xC1, 0x69, 0x11, 0xC0, 0x61, 0xE1, 0x6B, 0x9A, 0x29, 0xEC, 0xEA, 0x74, 0xD2, 0x43,
0xD7, 0x51, 0xE3, 0x17, 0x6A, 0x5B, 0xAE, 0x0E, 0x25, 0x3B, 0x06, 0xB1, 0xF8, 0xFB, 0xB5, 0x15,
0x59, 0xCB, 0x9A, 0x9D, 0x80, 0x82, 0x17, 0x1E, 0x15, 0x9F, 0xF7, 0x3E, 0x38, 0x6F, 0x28, 0xAB,
0x7F, 0x24, 0x33, 0xD9, 0x63, 0xAA, 0x7C, 0x34, 0x50, 0xF3, 0x40, 0xE7, 0x6B, 0x3C, 0x33, 0x62,
0x13, 0x04, 0x98, 0x25, 0xAD, 0x3E, 0xA7, 0x51, 0x58, 0x1A, 0x21, 0x49, 0x4A, 0x99, 0x81, 0xAE,
0x36, 0xFB, 0x51, 0x7B, 0x4B, 0x9E, 0x59, 0xBE, 0x49, 0x39, 0xCB, 0x57, 0x53, 0x30, 0xA1, 0x92,
0xFF, 0x97, 0x6A, 0xD0, 0x68, 0xCE, 0x8A, 0xDD, 0x12, 0x52, 0xBD, 0x93, 0x5D, 0x80, 0x3E, 0x91,
0xD2, 0x17, 0xB0, 0xED, 0xB5, 0x08, 0xA2, 0x11, 0xF9, 0xF6, 0xC2, 0xD1, 0x05, 0x2B, 0x16, 0xB5,
0x61, 0xFD, 0xDA, 0xBD, 0x9D, 0xCA, 0xB6, 0x0E, 0x96, 0xA6, 0xF6, 0x16, 0x7D, 0x44, 0x84, 0x88,
0x7B, 0xCC, 0x3A, 0xA0, 0x1A, 0xFC, 0xA6, 0xEE, 0xD3, 0xB0, 0x5F, 0x01, 0x11, 0x7D, 0xF6, 0x62,
0xBB, 0xDE, 0xBA, 0x50, 0x34, 0xBA, 0x5B, 0x47, 0xE7, 0xCF, 0x1B, 0x69, 0x5A, 0x6C, 0xF4, 0xF1,
0xD6, 0xAF, 0x15, 0xAC, 0xF8, 0xB8, 0xF5, 0x97, 0x02, 0xC7, 0xA2, 0x94, 0x2D, 0x92, 0x32, 0xE0,
0xC8, 0xBC, 0x29, 0x36, 0x87, 0x38, 0x5C, 0xD2, 0x6B, 0xD5, 0x20, 0x4E, 0x5C, 0x22, 0x6A, 0x62,
0xED, 0x6D, 0xEC, 0x9E, 0xCF, 0xED, 0x83, 0xF2, 0xAC, 0xEE, 0x85, 0xF9, 0x56, 0x84, 0xF8, 0x34,
0xBB, 0xD2, 0x44, 0xEE, 0x51, 0xF3, 0x59, 0xAB, 0xB9, 0xA7, 0x59, 0x53, 0x38, 0xEB, 0xAA, 0xA8,
0x57, 0xB5, 0xFD, 0xA7, 0xB7, 0x54, 0x17, 0xA1, 0xD3, 0x29, 0xF4, 0xB3, 0xB6, 0x00, 0xAA, 0x26,
0xF2, 0xC3, 0xEB, 0x4F, 0x71, 0x8E, 0xD0, 0x2F, 0x20, 0x7D, 0x81, 0x29, 0x41, 0x57, 0x5C, 0x9F,
0x68, 0xCD, 0x09, 0x9C, 0x35, 0x23, 0x08, 0xC5, 0xC5, 0xB5, 0xC2, 0x86, 0xCC, 0x52, 0xC9, 0xDC,
0x22, 0x16, 0xDA, 0x56, 0x01, 0xDF, 0x6D, 0x35, 0x1F, 0x48, 0xDC, 0x8E, 0x7D, 0x0F, 0x5D, 0x15,
0x9E, 0xB8, 0x3A, 0x24, 0xD7, 0xDE, 0x6E, 0x90, 0x0E, 0xD4, 0x26, 0x70, 0x91, 0x50, 0x78, 0xC3,
0x94, 0x94, 0x2E, 0xD4, 0xF6, 0x5E, 0x84, 0xAC, 0xFA, 0x94, 0xF9, 0x02, 0xDC, 0xB5, 0x71, 0x1D,
0x9F, 0x82, 0x1B, 0xDC, 0x65, 0x0F, 0x49, 0xA3, 0x63, 0x0A, 0x81, 0x2F, 0xCC, 0x58, 0x69, 0x1F,
0xBF, 0xD3, 0xFC, 0x52, 0xDA, 0xD1, 0x85, 0x56, 0x5D, 0xA0, 0x2D, 0x05, 0xDA, 0xD6, 0xC3, 0x98,
0xD3, 0x6E, 0xCB, 0x32, 0x74, 0x2C, 0x5D, 0xE5, 0xDA, 0xC3, 0xCF, 0xE8, 0x67, 0x88, 0x5E, 0x04,
0x09, 0x6A, 0xEF, 0x2C, 0x1F, 0x3A, 0x8F, 0x06, 0x0B, 0x35, 0x1F, 0x23, 0x6C, 0xF3, 0xA2, 0xF1,
0x9C, 0xDF, 0x52, 0x2E, 0xCF, 0xD6, 0xFE, 0x73, 0x3F, 0x9C, 0xAD, 0x7E, 0x38, 0x77, 0x92, 0xF9,
0x3E, 0xBB, 0x24, 0x84, 0x43, 0xE2, 0xA1, 0xC3, 0x4F, 0x30, 0xA3, 0xA1, 0x1C, 0x0C, 0xC1, 0x53,
0x37, 0x3E, 0xE9, 0xCD, 0xB6, 0xA1, 0xF4, 0xEC, 0xAA, 0x32, 0x6D, 0x49, 0x70, 0xC6, 0x08, 0x01,
0x09, 0xC0, 0xB9, 0x08, 0x3A, 0x52, 0x1C, 0x63, 0xD7, 0x43, 0x01, 0x00, 0x18, 0x24, 0xAF, 0x91,
0xC1, 0x54, 0x16, 0x9A, 0xCF, 0x81, 0xC2, 0x08, 0xD0, 0x3C, 0xD1, 0xA7, 0x13, 0x30, 0xD3, 0xFF,
0xBA, 0x46, 0x3A, 0x77, 0x8D, 0x5A, 0x69, 0xBE, 0xC5, 0xC3, 0x46, 0x52, 0x4A, 0xEA, 0xC1, 0x3B,
0x21, 0x4B, 0xF1, 0x33, 0xF9, 0x30, 0x95, 0x48, 0x4C, 0x66, 0xC8, 0x4F, 0x59, 0xD8, 0x41, 0xEC,
0x69, 0x14, 0xA4, 0xEE, 0x9E, 0x6C, 0xBE, 0x05, 0xAB, 0xF9, 0x26, 0xCB, 0x85, 0xBC, 0xAF, 0xFB,
0xF5, 0x8E, 0x93, 0xD6, 0x78, 0xCA, 0xC8, 0x3C, 0x7D, 0x8A, 0xD0, 0xD2, 0xAD, 0x20, 0x25, 0xE4,
0xFA, 0x23, 0xA1, 0xF8, 0x25, 0x14, 0x3E, 0x37, 0xE1, 0x10, 0x5A, 0x27, 0xC6, 0x9D, 0x8D, 0xC4,
0x96, 0xA9, 0xFA, 0xC4, 0x87, 0x25, 0x51, 0xED, 0x54, 0x9B, 0x9D, 0xCF, 0x01, 0x9B, 0x33, 0xDA,
0x7F, 0x8D, 0x58, 0x46, 0x5E, 0xC5, 0xC7, 0xBA, 0x00, 0xDD, 0xEA, 0xDC, 0x53, 0x54, 0x70, 0x47,
0x59, 0x5C, 0x00, 0xD9, 0x14, 0xE2, 0x7C, 0xFC, 0x0D, 0xF3, 0x57, 0x03, 0x85, 0x82, 0xF7, 0x19,
0xAA, 0xA0, 0xB7, 0xA3, 0x09, 0x0B, 0x61, 0xC7, 0xC9, 0x32, 0xCF, 0xDA, 0x04, 0xBF, 0x53, 0x37,
0x75, 0x56, 0xD9, 0xA5, 0xE0, 0x51, 0xBF, 0x15, 0xAF, 0x52, 0x37, 0x49, 0x2B, 0x64, 0x4B, 0x7D,
0xA2, 0x49, 0x55, 0x3A, 0xA4, 0x6B, 0x31, 0xD7, 0x5C, 0xD2, 0xDA, 0x92, 0xE8, 0xE7, 0xA2, 0x32,
0x91, 0xFD, 0x18, 0xD4, 0xF8, 0x2E, 0x6B, 0x33, 0x9E, 0xF2, 0x5B, 0xD1, 0x40, 0xD2, 0xD8, 0xE7,
0x70, 0x3D, 0xF2, 0x3F, 0x60, 0xD0, 0xF1, 0xE4, 0x84, 0x92, 0xBB, 0xEE, 0xC9, 0x85, 0xEA, 0x69,
0xD2, 0xAE, 0x30, 0x49, 0x97, 0xD1, 0x43, 0xA1, 0x9E, 0xFC, 0x38, 0x07, 0xF3, 0x6E, 0x6B, 0x17,
0xEF, 0x01, 0x9B, 0x03, 0x92, 0xF8, 0x3A, 0xFD, 0x21, 0xC6, 0x7F, 0x7B, 0xD0, 0x2E, 0x9E, 0x42,
0x46, 0x91, 0x7C, 0x36, 0xDB, 0xC8, 0xC1, 0xE3, 0xE2, 0xE3, 0x95, 0x47, 0x9B, 0x02, 0xDF, 0xAD,
0xDB, 0x72, 0x8D, 0x9E, 0xFD, 0x3D, 0xE5, 0x16, 0x31, 0xF8, 0x27, 0x88, 0xDE, 0x6B, 0xA3, 0x08,
0x4D, 0x8C, 0xD7, 0x47, 0xB2, 0x1E, 0x30, 0xFA, 0xFB, 0xFA, 0xE7, 0x60, 0xB1, 0xCF, 0x53, 0xAA,
0xAB, 0xDB, 0x90, 0x74, 0x69, 0xB7, 0xE2, 0x53, 0x83, 0x77, 0x22, 0xC2, 0x77, 0xF7, 0x3C, 0x2B,
0x91, 0x88, 0x1B, 0x6D, 0xE2, 0x68, 0x8C, 0x9D, 0x65, 0xBA, 0x00, 0x45, 0x27, 0xB4, 0x3B, 0xFD,
0x83, 0x77, 0xCC, 0xBF, 0x53, 0x6D, 0x9B, 0x96, 0x25, 0xEE, 0x36, 0x42, 0xEC, 0xF7, 0x6C, 0xDB,
0x74, 0x5D, 0x61, 0x3C, 0xAD, 0x95, 0xDC, 0x40, 0xB3, 0xDE, 0xB8, 0x39, 0xEA, 0xEE, 0x50, 0xE8,
0x52, 0x93, 0x31, 0x34, 0xFF, 0xC1, 0xAF, 0x4F, 0x6F, 0xF3, 0x74, 0xAB, 0x87, 0x4B, 0xFD, 0x5D,
0x56, 0x07, 0xAD, 0xCD, 0x33, 0x84, 0x32, 0x02, 0x3B, 0xB5, 0x9E, 0xFD, 0x4E, 0xB9, 0x76, 0x6B,
0xE3, 0x8E, 0xA8, 0x95, 0x5E, 0xDD, 0x9A, 0x69, 0xBB, 0xEB, 0x72, 0x6D, 0x9D, 0xD9, 0x0A, 0x46,
0x71, 0x08, 0x5F, 0x30, 0x07, 0x93, 0x4B, 0x19, 0xF1, 0xFA, 0x5B, 0x03, 0x14, 0x7F, 0x62, 0xCF,
0x0E, 0xD4, 0x96, 0xEA, 0x86, 0xCE, 0x18, 0x15, 0x16, 0x9A, 0x97, 0xCD, 0x8A, 0xB8, 0x9E, 0xDC,
0x5A, 0x7D, 0x35, 0x49, 0xD9, 0x5F, 0x92, 0x0D, 0x9F, 0xB3, 0x2F, 0x3C, 0xAB, 0x41, 0x73, 0x0D,
0x99, 0xBB, 0x3E, 0x53, 0x83, 0x71, 0x9D, 0xF9, 0xD0, 0x25, 0xF9, 0x37, 0x16, 0xC2, 0xAD, 0xD0,
0xDE, 0xF8, 0x58, 0xD6, 0x41, 0x16, 0x50, 0x66, 0x90, 0xEB, 0x83, 0x01, 0xDC, 0x53, 0x02, 0x90,
0x34, 0x82, 0xC7, 0x14, 0xD1, 0xAD, 0x41, 0x99, 0x5B, 0xDC, 0xB4, 0x28, 0x7B, 0x1B, 0x77, 0xE3,
0xC3, 0xAA, 0x4E, 0x00, 0x21, 0xB6, 0xD8, 0x2D, 0x55, 0xAB, 0xD8, 0xDF, 0x67, 0xB3, 0xCD, 0x99,
0xDB, 0x2F, 0xE5, 0x26, 0x69, 0x61, 0xFB, 0x48, 0x33, 0xE0, 0xAB, 0x34, 0x27, 0x54, 0xD0, 0xB2,
0x72, 0xD0, 0x3C, 0x50, 0xFE, 0x7E, 0x6D, 0xD1, 0x72, 0x3E, 0xD0, 0xBB, 0x36, 0x9D, 0x2D, 0x93,
0x9F, 0xA0, 0x79, 0x98, 0x90, 0x44, 0x6C, 0xEE, 0x5E, 0xF7, 0x61, 0xC2, 0xB4, 0xF3, 0x7B, 0x64,
0x89, 0xB3, 0x99, 0xE5, 0x1D, 0xAC, 0x1B, 0xFE, 0xE3, 0x15, 0xF4, 0xFD, 0xE6, 0xE3, 0x0B, 0xFA,
0x32, 0x2D, 0xE8, 0xF3, 0x8E, 0x17, 0xF4, 0xE5, 0x2C, 0xE8, 0x0B, 0x06, 0xF5, 0x9F, 0xD0, 0xB0,
0xD2, 0x76, 0x6B, 0x73, 0x0D, 0x17, 0x07, 0x5E, 0xD4, 0xB4, 0x06, 0x9C, 0xBF, 0xA1, 0xB2, 0x28,
0x2E, 0x9D, 0xEC, 0x77, 0x16, 0x9D, 0x4B, 0xDE, 0x64, 0x4E, 0xEC, 0x1D, 0x2A, 0xE8, 0xBB, 0xC1,
0x82, 0xBE, 0xB7, 0x5C, 0x41, 0x1F, 0x0C, 0x40, 0xF7, 0x30, 0x18, 0xE1, 0x0A, 0x26, 0x06, 0x5A,
0x57, 0x41, 0xA6, 0x52, 0x59, 0x79, 0xAA, 0xD8, 0x58, 0x96, 0xF4, 0xBC, 0x73, 0x36, 0x3C, 0x66,
0xF7, 0x21, 0xD6, 0x5D, 0xE8, 0x93, 0x78, 0x34, 0xED, 0xE0, 0xA4, 0xD5, 0x9A, 0xB6, 0x56, 0xAB,
0x56, 0xB2, 0xB9, 0xD5, 0x8A, 0x3B, 0x57, 0x11, 0x90, 0x93, 0x4B, 0x83, 0xD1, 0xB1, 0xF2, 0x4F,
0x95, 0x3C, 0xB3, 0xDE, 0x39, 0x54, 0x63, 0xE8, 0xE9, 0xE2, 0xF0, 0x69, 0x17, 0x9D, 0xEF, 0x5C,
0xB3, 0x0D, 0x95, 0x83, 0x1A, 0xAD, 0xF9, 0xC0, 0x3D, 0xE6, 0x27, 0x71, 0x8D, 0x5F, 0x5D, 0xA5,
0x36, 0xBD, 0x71, 0x7F, 0xB3, 0x5A, 0x93, 0x4E, 0x8B, 0xAB, 0xD5, 0x93, 0x42, 0xFE, 0xF1, 0xC7,
0x4A, 0xF7, 0xDA, 0xD3, 0xFD, 0x34, 0x8A, 0x8F, 0xA7, 0x53, 0xDC, 0x67, 0x05, 0x47, 0xA4, 0x25,
0xF2, 0xA7, 0x3C, 0x7E, 0xA7, 0x3D, 0xFD, 0xF1, 0x3B, 0xFF, 0x0F, 0xBD, 0x57, 0xBD, 0x8F, 0xDC,
0x44, 0x14, 0x7F, 0xB6, 0xEF, 0x64, 0xA1, 0x41, 0x37, 0x29, 0x28, 0x10, 0x1F, 0x67, 0x0A, 0x0A,
0x84, 0xEE, 0xE2, 0x14, 0x14, 0x57, 0xDC, 0xED, 0x4C, 0x44, 0x49, 0x73, 0x45, 0xAE, 0x8A, 0x44,
0x1A, 0x5A, 0xA4, 0x14, 0x91, 0xB8, 0xE2, 0x76, 0x3D, 0x28, 0x25, 0x0D, 0x05, 0x12, 0x05, 0xE2,
0x0F, 0xA0, 0xBB, 0xE2, 0x90, 0x22, 0x71, 0x97, 0x35, 0x69, 0x28, 0x71, 0x4D, 0x83, 0x8B, 0xA0,
0x48, 0x34, 0x99, 0xC2, 0x12, 0x8E, 0xB0, 0x3D, 0xFC, 0xDE, 0xB3, 0x77, 0x95, 0x2F, 0x21, 0x45,
0x4A, 0xE2, 0xF3, 0x8C, 0xBC, 0x33, 0xEF, 0x7B, 0xDE, 0xFB, 0xBD, 0xB9, 0xEB, 0xBF, 0x3C, 0xF1,
0x9C, 0x12, 0x5D, 0x79, 0xF3, 0xE4, 0x20, 0x6B, 0xD2, 0x4A, 0x7B, 0xD3, 0x7D, 0xF5, 0x63, 0xE2,
0x5E, 0xFC, 0x8F, 0x76, 0x89, 0x34, 0x51, 0x52, 0x52, 0x54, 0x13, 0xDD, 0x21, 0x3A, 0x08, 0x21,
0xFC, 0x75, 0x34, 0xAF, 0xE9, 0xAC, 0x8E, 0xAB, 0x5A, 0xD9, 0x7A, 0x97, 0xB0, 0xF1, 0x52, 0x5E,
0x3A, 0x21, 0xF2, 0xAC, 0x4A, 0x59, 0xBA, 0x2C, 0xBF, 0xA0, 0x6B, 0x7E, 0x74, 0x7D, 0x9B, 0xD2,
0xD4, 0xA5, 0x51, 0x9D, 0xD2, 0x71, 0x4A, 0xF4, 0x72, 0x5E, 0x13, 0xDA, 0x22, 0xF4, 0x78, 0xD7,
0x1F, 0x4B, 0x28, 0xFB, 0x1D, 0xA3, 0xC7, 0x08, 0x15, 0x4F, 0xFF, 0x86, 0xD5, 0x53, 0xAE, 0xBF,
0xFE, 0x5C, 0x7D, 0x0C, 0xEB, 0xA5, 0xFA, 0x7F, 0x37, 0x0D, 0x15, 0xAF, 0xFF, 0x7D, 0xCA, 0x7A,
0x9A, 0x9E, 0x84, 0x7F, 0x3D, 0x5C, 0xAF, 0xD3, 0x06, 0xCD, 0xA3, 0x36, 0xF1, 0xAA, 0xD2, 0x65,
0x5E, 0x1A, 0x57, 0xB8, 0x65, 0x59, 0x54, 0xB9, 0xA5, 0x6B, 0x49, 0x9F, 0x0C, 0xF1, 0x10, 0xF5,
0x71, 0x97, 0xF0, 0x7E, 0xAD, 0x4B, 0x43, 0x7B, 0x44, 0x87, 0x49, 0x87, 0x1D, 0x5E, 0xED, 0x92,
0x26, 0xF5, 0xBA, 0xCC, 0xDC, 0x8C, 0x8E, 0x69, 0x93, 0x8A, 0xDB, 0x03, 0x52, 0xCC, 0x0D, 0x71,
0x3B, 0xAE, 0xE6, 0x48, 0x9B, 0x0D, 0xBA, 0x44, 0x73, 0x3A, 0x8F, 0xDA, 0xD8, 0xB3, 0x08, 0x56,
0x02, 0x35, 0x0E, 0x8A, 0xAC, 0x71, 0x4B, 0x2A, 0x5C, 0xA0, 0x65, 0x19, 0x6C, 0x51, 0x85, 0x32,
0xB7, 0x0B, 0xA2, 0x6B, 0x10, 0xDF, 0xA7, 0x5D, 0x32, 0xA4, 0x5D, 0x3C, 0x24, 0x5D, 0xD4, 0x27,
0x9D, 0xA8, 0x87, 0x48, 0xE1, 0xAF, 0x85, 0xDF, 0x1A, 0x08, 0xDD, 0xA3, 0x33, 0x18, 0x43, 0x87,
0xDA, 0xE7, 0xB5, 0xA9, 0x20, 0xE5, 0x6A, 0x60, 0x52, 0xED, 0xB3, 0xCA, 0xD8, 0x65, 0x04, 0xE3,
0xD8, 0x88, 0x05, 0x75, 0x49, 0xAD, 0xCA, 0x6D, 0xDA, 0x87, 0x85, 0x9B, 0xAC, 0xF0, 0x53, 0xC8,
0x16, 0x1E, 0xE8, 0x1F, 0xE2, 0x2E, 0x86, 0x6F, 0xB0, 0xB7, 0x62, 0xE2, 0xCC, 0x19, 0xCA, 0x69,
0x06, 0xBB, 0xF7, 0x29, 0xEA, 0x10, 0x2A, 0x1E, 0x2D, 0x46, 0x83, 0xE1, 0x31, 0x90, 0x9F, 0x49,
0x45, 0xC5, 0xF7, 0x7F, 0x74, 0x48, 0x94, 0x0E, 0xD1, 0xEB, 0xBE, 0xD3, 0xEE, 0x0B, 0xD2, 0x96,
0x28, 0xC3, 0xC8, 0x69, 0x1C, 0x06, 0x63, 0x86, 0x01, 0x87, 0xE8, 0x02, 0xA3, 0x1B, 0x07, 0x8B,
0x8C, 0x27, 0x71, 0xD1, 0x21, 0x9F, 0x45, 0x56, 0x8E, 0x4A, 0xC8, 0xB8, 0x71, 0x59, 0x58, 0x59,
0x0D, 0x1D, 0x10, 0x15, 0x3F, 0xFC, 0xDD, 0x29, 0x49, 0xBC, 0x87, 0x0F, 0xBB, 0x4D, 0x6A, 0x37,
0x2D, 0x65, 0x6E, 0x14, 0x21, 0x0C, 0x29, 0x33, 0x14, 0x18, 0xA9, 0x1F, 0x95, 0x7D, 0xA8, 0xCA,
0xB7, 0xD5, 0x30, 0x48, 0xA6, 0x76, 0xFA, 0xD1, 0xA3, 0xA5, 0x15, 0xB3, 0xE2, 0xB5, 0x60, 0x3F,
0x31, 0x28, 0xFE, 0xB8, 0x4B, 0x2C, 0x2B, 0x09, 0xF7, 0x82, 0xE7, 0x0A, 0xD0, 0xF8, 0xA8, 0xF2,
0xEA, 0x2D, 0xB8, 0x50, 0x91, 0x0A, 0x36, 0x0E, 0x3D, 0x2D, 0x43, 0x9D, 0x87, 0xF0, 0x8D, 0xE4,
0xF2, 0xB0, 0x0C, 0x6D, 0x1E, 0x6A, 0x15, 0xCA, 0x38, 0x58, 0x36, 0x4F, 0x1C, 0xF8, 0x6D, 0x28,
0xFE, 0x19, 0x72, 0x97, 0xD6, 0xD4, 0x65, 0x3E, 0xE9, 0x8D, 0x57, 0xBD, 0xA9, 0x54, 0x97, 0x5B,
0x8E, 0x3A, 0x61, 0x39, 0xF6, 0xA0, 0x2E, 0x4A, 0x32, 0x0F, 0x7A, 0xA4, 0x1E, 0x45, 0xE1, 0x86,
0x27, 0xDD, 0x50, 0xDA, 0xCD, 0x24, 0x66, 0x08, 0xFB, 0x24, 0xE2, 0x59, 0x90, 0xF1, 0x59, 0xA8,
0x37, 0x5F, 0x17, 0xC8, 0xB4, 0x7A, 0x7E, 0xA8, 0x5E, 0x05, 0xC8, 0x70, 0xCD, 0xDC, 0xA5, 0x38,
0xB8, 0xF4, 0xCB, 0x6A, 0x7B, 0xE7, 0x6C, 0x6F, 0x67, 0xE7, 0xE6, 0xCE, 0x1B, 0xB4, 0x43, 0xAF,
0xE4, 0x3D, 0xDE, 0x27, 0xDA, 0xDD, 0x46, 0x20, 0x3F, 0xB3, 0x94, 0xDC, 0xAB, 0xE0, 0xA5, 0xE7,
0xC5, 0x65, 0xE8, 0xB7, 0x7F, 0x3E, 0xBA, 0xB3, 0x7F, 0x1A, 0xD5, 0xFE, 0x34, 0xBD, 0x5D, 0x9E,
0x6E, 0x6B, 0x3A, 0x05, 0x2D, 0xBA, 0xC3, 0x2B, 0x1D, 0x74, 0x80, 0x43, 0x3D, 0x3B, 0xC6, 0x89,
0x7A, 0x82, 0x5A, 0xD2, 0x38, 0xE0, 0x7D, 0x04, 0xFC, 0x56, 0x11, 0x86, 0xFD, 0xCB, 0x47, 0x9F,
0x6B, 0x65, 0xB7, 0x60, 0xE6, 0x16, 0xF9, 0xB3, 0x2D, 0xDA, 0xD9, 0xDD, 0x02, 0xC7, 0xAB, 0x1E,
0x4F, 0x3E, 0xD1, 0x04, 0x8B, 0x4B, 0x94, 0x93, 0x1E, 0xBF, 0x33, 0x86, 0xCA, 0x5E, 0x3E, 0x63,
0x86, 0x4D, 0x55, 0x8F, 0xCB, 0x40, 0x15, 0xA9, 0x1D, 0xA9, 0xE5, 0x8B, 0xB1, 0x96, 0x70, 0xBC,
0x75, 0xD4, 0x12, 0xD0, 0x92, 0xA4, 0xC4, 0xD2, 0x2A, 0x6A, 0x57, 0x24, 0x99, 0x9D, 0x04, 0xA2,
0x08, 0xCE, 0xF1, 0x37, 0x4A, 0xB1, 0x40, 0x9B, 0x6A, 0xFC, 0x5E, 0x10, 0x23, 0xE7, 0xC7, 0x96,
0xA2, 0x9F, 0xC0, 0xD5, 0x01, 0xDF, 0xA0, 0xCD, 0x84, 0x04, 0x00, 0x96, 0x59, 0x68, 0x4E, 0xC2,
0xA0, 0xC3, 0x40, 0xAD, 0xAE, 0x0B, 0x6B, 0xBE, 0xEE, 0x74, 0x00, 0xF8, 0x2D, 0x68, 0x11, 0xB7,
0x71, 0xA3, 0x5A, 0x3A, 0x87, 0x01, 0xAD, 0x2E, 0x21, 0x1C, 0x5A, 0x21, 0xB6, 0xBE, 0x10, 0x70,
0x98, 0x41, 0x93, 0xBE, 0xED, 0x81, 0x8F, 0xB0, 0x10, 0x24, 0x0B, 0xED, 0x22, 0x94, 0x7F, 0x6E,
0xB5, 0x8B, 0x9B, 0x05, 0xA1, 0x26, 0xA1, 0x6B, 0x46, 0xFA, 0xD7, 0x86, 0x11, 0x01, 0x16, 0xB6,
0xB4, 0x80, 0x0F, 0x0D, 0xBB, 0xCC, 0x0C, 0x99, 0xD3, 0xE2, 0xB2, 0xAE, 0x8C, 0x33, 0x57, 0x7B,
0x81, 0x8B, 0x2C, 0xB4, 0x8C, 0x04, 0xE2, 0xB2, 0x09, 0x8E, 0x60, 0x14, 0xA1, 0x5E, 0x29, 0xBF,
0x3F, 0x06, 0x6E, 0x87, 0x9E, 0xFF, 0x5C, 0x42, 0x14, 0xFA, 0x18, 0x10, 0x9E, 0x8E, 0xA8, 0xEC,
0x46, 0xD8, 0x96, 0x1D, 0x89, 0x03, 0x94, 0x94, 0xCB, 0xAB, 0xC0, 0x79, 0xD5, 0x64, 0xB5, 0x29,
0x43, 0xDC, 0xA7, 0x8D, 0x06, 0x30, 0x17, 0xC4, 0xAD, 0xA5, 0xD2, 0x6E, 0x6B, 0x25, 0x1B, 0x0C,
0x11, 0x09, 0x8B, 0x13, 0x26, 0x12, 0xB6, 0x91, 0x51, 0x58, 0x89, 0x99, 0x5B, 0x66, 0x97, 0x26,
0x06, 0x6F, 0x20, 0x42, 0xD5, 0xCC, 0x60, 0x88, 0xC5, 0xDC, 0x9C, 0x8C, 0xDA, 0x80, 0xF7, 0x60,
0xB7, 0xA6, 0xCC, 0x2B, 0x5D, 0x2B, 0x0F, 0x7C, 0xEF, 0x60, 0xD6, 0x47, 0xBC, 0xC3, 0x7B, 0xBC,
0x5B, 0x60, 0xBF, 0x70, 0xA6, 0x64, 0x1A, 0xA6, 0xD2, 0x5E, 0xF9, 0xB4, 0x49, 0xDA, 0xB8, 0xA3,
0x4E, 0xA8, 0x99, 0x7E, 0x67, 0x94, 0xB6, 0x41, 0x91, 0x70, 0xE5, 0xC2, 0x57, 0xD8, 0x15, 0xE7,
0x8A, 0x3B, 0xAB, 0x99, 0x7F, 0x92, 0x20, 0x32, 0x26, 0x29, 0xBD, 0xC8, 0x99, 0x89, 0xA4, 0xF7,
0x56, 0x21, 0x43, 0x34, 0x89, 0x33, 0x08, 0x51, 0xA6, 0x01, 0x1F, 0x3D, 0xE2, 0xDC, 0x03, 0xF0,
0x7B, 0x04, 0xBC, 0x67, 0xE4, 0x8F, 0x6B, 0x32, 0x16, 0x9D, 0xA2, 0x70, 0x29, 0x0E, 0xC5, 0xA5,
0x1D, 0xA3, 0x35, 0xE0, 0xB5, 0xB0, 0xD0, 0xCF, 0x90, 0x8E, 0x44, 0x3B, 0xA3, 0xA8, 0x42, 0x52,
0x90, 0xAA, 0x70, 0x8C, 0xBC, 0x6F, 0x4A, 0x38, 0x84, 0x3E, 0x63, 0xAA, 0x18, 0x82, 0x4A, 0x18,
0x00, 0xB1, 0x67, 0x2B, 0x9D, 0x57, 0x78, 0xDA, 0x3B, 0xE1, 0xF9, 0x4E, 0x46, 0xCA, 0xC5, 0x5E,
0x21, 0xC8, 0x69, 0x99, 0xD4, 0xBA, 0xCA, 0x88, 0x1A, 0xE5, 0x0E, 0xA4, 0x1D, 0x21, 0x47, 0x32,
0xE9, 0x4D, 0x69, 0xA9, 0xB8, 0x0D, 0xF9, 0x4C, 0x58, 0x4E, 0x18, 0xB3, 0x67, 0x5E, 0x59, 0x78,
0x59, 0x65, 0xE5, 0x38, 0x63, 0xA5, 0x01, 0xB6, 0x52, 0xCB, 0x62, 0xE3, 0x9A, 0x29, 0x95, 0x4B,
0x4B, 0x6E, 0x8F, 0x31, 0xB2, 0xE8, 0x5C, 0xB9, 0x73, 0x8A, 0x40, 0x99, 0x43, 0x98, 0xAE, 0x94,
0x63, 0xBD, 0x49, 0x2D, 0x36, 0xB4, 0xB7, 0xC4, 0x9E, 0xC9, 0x38, 0xA4, 0x62, 0x01, 0x93, 0xA3,
0x1E, 0x4E, 0xC0, 0x83, 0xC2, 0xE2, 0xBC, 0x96, 0xDC, 0xF9, 0x02, 0x37, 0xB1, 0x9E, 0x74, 0x8D,
0xAE, 0xAA, 0x2B, 0x9E, 0x4A, 0x84, 0x07, 0x9A, 0x1B, 0x38, 0x87, 0x4C, 0x45, 0x07, 0xF2, 0x5C,
0x91, 0xB5, 0x94, 0x25, 0xE2, 0x8C, 0xD4, 0x9F, 0xF3, 0x74, 0x42, 0xDA, 0x71, 0x91, 0x58, 0xF4,
0x18, 0x4C, 0x2D, 0x37, 0x9D, 0xE6, 0xE9, 0xD4, 0xCD, 0x78, 0x43, 0x34, 0x2E, 0x4B, 0xC4, 0x78,
0x69, 0x11, 0xED, 0x39, 0x3B, 0xFF, 0xD4, 0xA5, 0xCA, 0x0C, 0x37, 0xC2, 0x83, 0xD0, 0xAC, 0xCF,
0x8E, 0x15, 0x4C, 0x3D, 0x76, 0x42, 0x08, 0xC1, 0x86, 0x11, 0x15, 0x46, 0x3C, 0xB8, 0x98, 0x30,
0x61, 0xEA, 0xC9, 0x8F, 0x93, 0xD1, 0x63, 0x64, 0x02, 0x18, 0x23, 0x54, 0xCC, 0x5E, 0x5C, 0x1A,
0xDB, 0xC2, 0xD7, 0x8D, 0x15, 0xD9, 0x5C, 0x2C, 0xFC, 0x60, 0xC4, 0x3C, 0x34, 0x64, 0x85, 0x78,
0x02, 0x6D, 0x42, 0x88, 0xE0, 0x04, 0xEE, 0x18, 0x78, 0x6D, 0x1E, 0xFA, 0xF7, 0xA3, 0x81, 0x6E,
0xC1, 0x55, 0xBE, 0xAD, 0x40, 0x28, 0x1F, 0x36, 0x82, 0xC5, 0x77, 0x88, 0xB9, 0xAC, 0x41, 0x3A,
0xCB, 0x33, 0xAB, 0x1F, 0x7C, 0x7F, 0x29, 0x44, 0x11, 0x0E, 0x23, 0x2F, 0x39, 0x01, 0xD9, 0x38,
0xB0, 0x4E, 0x64, 0x06, 0x5B, 0xC1, 0xF3, 0x9B, 0x40, 0xDD, 0x30, 0x5E, 0xA7, 0x9E, 0xF3, 0x30,
0x00, 0xC1, 0xD9, 0x0C, 0xD6, 0x17, 0x8E, 0x41, 0x25, 0x19, 0x28, 0x01, 0xFA, 0x68, 0x2F, 0x31,
0xC8, 0xEC, 0x44, 0x27, 0xEE, 0xC6, 0x1D, 0xBB, 0x80, 0xAB, 0x1E, 0xC4, 0x02, 0x00, 0x02, 0xCE,
0xDE, 0xC3, 0x78, 0xE4, 0x02, 0xDB, 0x9F, 0x55, 0xAC, 0x99, 0x2D, 0x9B, 0x49, 0x1C, 0xE6, 0x28,
0x18, 0xB6, 0xD7, 0x88, 0xC5, 0x23, 0xE8, 0x2D, 0xE4, 0x88, 0xE6, 0x62, 0xF9, 0xB9, 0xDC, 0x86,
0x3A, 0x41, 0xCF, 0x56, 0x82, 0xD8, 0x88, 0xD9, 0x7E, 0x9A, 0x75, 0xCD, 0xE5, 0xF4, 0xEC, 0x03,
0x9B, 0x60, 0x35, 0x4A, 0x4F, 0x0A, 0x91, 0x74, 0x4B, 0x30, 0x4A, 0x0B, 0xF2, 0xB2, 0xC9, 0x63,
0xDB, 0x90, 0x8B, 0x16, 0x5F, 0xF1, 0xDE, 0x6D, 0x09, 0x39, 0x9C, 0x87, 0x0A, 0xD9, 0xAB, 0x83,
0x64, 0x33, 0x22, 0x8F, 0xF2, 0xBC, 0x0F, 0x60, 0x60, 0xA2, 0x4E, 0x8E, 0xCB, 0xC8, 0xAD, 0x8C,
0x6F, 0xDA, 0x9C, 0x4A, 0x1C, 0x44, 0x55, 0xF1, 0x29, 0x28, 0x81, 0x68, 0x90, 0x9F, 0xC8, 0x9C,
0x8B, 0x17, 0xC8, 0x35, 0xCC, 0xD8, 0x46, 0xA1, 0xC3, 0xE8, 0x18, 0xC2, 0xD1, 0xFE, 0x0B, 0xCF,
0x7D, 0x4E, 0x35, 0xF4, 0x7C, 0x9B, 0x71, 0x9E, 0x30, 0x12, 0xAF, 0xEA, 0x70, 0x09, 0x23, 0x00,
0x02, 0x62, 0xC6, 0x46, 0xCF, 0xD6, 0x54, 0xEF, 0x7C, 0x8B, 0x64, 0x66, 0xA0, 0x6F, 0x0C, 0xA0,
0xFE, 0x22, 0x77, 0x4B, 0x74, 0x22, 0xDC, 0x07, 0x43, 0xE4, 0x38, 0x71, 0x1E, 0x43, 0xE4, 0x88,
0xEF, 0x6F, 0x76, 0x86, 0xB8, 0x01, 0xE5, 0x15, 0xD7, 0x73, 0x85, 0x1B, 0x36, 0x43, 0xFE, 0x88,
0xE8, 0xF8, 0xC1, 0x9F, 0x38, 0x1E, 0x5E, 0xC7, 0x6D, 0xBE, 0x55, 0xD2, 0x08, 0x80, 0xCF, 0xFC,
0x3F, 0x05, 0xE8, 0xA5, 0x27, 0xF0, 0x15, 0xBC, 0x4C, 0x9C, 0x02, 0x0E, 0x7E, 0xB2, 0xB6, 0xE2,
0x3F, 0x6D, 0x93, 0xB1, 0x6E, 0xD4, 0x40, 0x14, 0x45, 0xAF, 0x3D, 0x84, 0x29, 0x5C, 0x4C, 0x43,
0x13, 0x51, 0xF8, 0x13, 0xFC, 0x03, 0x90, 0x31, 0xA2, 0xA0, 0xA0, 0xA0, 0x42, 0x7C, 0x06, 0x3F,
0x90, 0x5D, 0x8F, 0xF8, 0x02, 0x3A, 0xBE, 0x01, 0x52, 0xA4, 0x41, 0x42, 0x42, 0x4B, 0x3C, 0x20,
0x51, 0xA5, 0x31, 0xA2, 0xA0, 0x64, 0x10, 0x48, 0x48, 0x9B, 0x66, 0x0A, 0x23, 0x39, 0x30, 0xEB,
0xC7, 0x9D, 0x5D, 0x92, 0x80, 0xC4, 0xCA, 0x2B, 0xEF, 0x5A, 0xF3, 0xEE, 0xBB, 0xEF, 0xBC, 0x6B,
0xE8, 0x19, 0x10, 0x81, 0xF9, 0x39, 0x63, 0x53, 0xA6, 0x2A, 0xA8, 0x68, 0x61, 0xDE, 0x8D, 0xB0,
0xC6, 0x23, 0x59, 0xE8, 0x30, 0xA1, 0xB9, 0x17, 0x90, 0x6A, 0x6F, 0x06, 0x8B, 0x13, 0xC8, 0x71,
0x2C, 0x84, 0x35, 0xFD, 0x53, 0x00, 0x7A, 0xE0, 0x8F, 0x16, 0x55, 0x02, 0x5E, 0x45, 0x98, 0x07,
0x0E, 0xE3, 0x02, 0xE6, 0x49, 0xC4, 0x64, 0xBC, 0x71, 0x07, 0xD8, 0x3C, 0x3C, 0x37, 0x22, 0xD2,
0x88, 0x4C, 0x00, 0x0F, 0xA9, 0x00, 0xD4, 0x2D, 0xB0, 0xE2, 0x4D, 0x22, 0x7A, 0xF1, 0xEA, 0xE7,
0xF3, 0x8B, 0x27, 0x6A, 0x6E, 0x61, 0xC4, 0x03, 0x9D, 0x03, 0x2C, 0x76, 0x05, 0x11, 0x68, 0x1C,
0x74, 0xC2, 0x11, 0xCF, 0x52, 0xA5, 0x62, 0x6B, 0xE0, 0xF1, 0xC0, 0x7A, 0x9F, 0x0B, 0x6C, 0xBB,
0x15, 0x6D, 0xC4, 0x15, 0x22, 0xDE, 0xAC, 0x7B, 0x76, 0xED, 0x8A, 0x11, 0x49, 0x0F, 0x2A, 0xD6,
0xAD, 0xF1, 0x1D, 0xDE, 0xD0, 0x73, 0xB8, 0xF0, 0x6C, 0x45, 0xE8, 0xE8, 0x74, 0x7D, 0xF4, 0x75,
0x50, 0x21, 0x52, 0xBE, 0xE4, 0x35, 0xA2, 0xD8, 0xF9, 0xE3, 0xB5, 0xDC, 0xF6, 0x6E, 0x68, 0xC5,
0x6F, 0xC7, 0xA3, 0x01, 0x5C, 0x9F, 0xA1, 0x24, 0x65, 0x99, 0xC6, 0x75, 0x65, 0x54, 0xA1, 0xC1,
0x21, 0x47, 0x84, 0x7A, 0xD6, 0x16, 0x7E, 0x85, 0x97, 0xEC, 0x84, 0xE6, 0x6E, 0x2C, 0x47, 0xDB,
0x76, 0x6A, 0xEE, 0x43, 0x4D, 0xA3, 0x0D, 0x15, 0xAB, 0x73, 0x54, 0x32, 0x95, 0x73, 0xEF, 0x49,
0xAE, 0xF2, 0x2A, 0x24, 0x1C, 0x98, 0x41, 0x87, 0x7E, 0xBD, 0x51, 0x74, 0xAB, 0x33, 0x15, 0x36,
0xAB, 0x07, 0x54, 0x23, 0x6E, 0x26, 0xF4, 0x33, 0xF4, 0x39, 0xB0, 0xE7, 0xF6, 0xF5, 0x5C, 0x8F,
0x37, 0x3F, 0x49, 0xBB, 0xF8, 0x32, 0xEA, 0xA9, 0x46, 0x5F, 0x46, 0x33, 0x1C, 0x20, 0xA9, 0xA1,
0x6E, 0x0F, 0xCB, 0x58, 0xBD, 0xB7, 0x98, 0x3F, 0x06, 0x33, 0x2D, 0xB0, 0xE1, 0x12, 0xFE, 0x6C,
0xF0, 0xD7, 0x06, 0xF3, 0xE5, 0x06, 0xDF, 0x4E, 0xB0, 0xD5, 0xB0, 0xDB, 0x60, 0xFA, 0xB3, 0x41,
0xA7, 0x43, 0xC7, 0x7E, 0x9B, 0x72, 0xA2, 0x49, 0x97, 0x69, 0x96, 0x24, 0x98, 0x3F, 0x87, 0x45,
0x3F, 0xF4, 0xA9, 0x78, 0xEC, 0xC9, 0xA1, 0x69, 0x49, 0xC5, 0x66, 0xF2, 0x4B, 0x64, 0x85, 0x0C,
0x82, 0x4F, 0x5D, 0x27, 0xA7, 0xAC, 0x60, 0x33, 0x2D, 0xA9, 0x20, 0x8A, 0x3C, 0xAB, 0x57, 0xF1,
0x46, 0x26, 0xC6, 0x23, 0x6A, 0x04, 0x68, 0xC4, 0xBA, 0x3C, 0x8E, 0x26, 0xD4, 0xB4, 0xFB, 0xBF,
0x7E, 0x71, 0x5F, 0x64, 0xEC, 0x32, 0x7E, 0xE2, 0xA8, 0x65, 0xA8, 0xCF, 0x52, 0xE5, 0x2C, 0x9C,
0x71, 0x59, 0x9E, 0x57, 0x37, 0xA0, 0x4F, 0xD8, 0xE7, 0xD6, 0xF3, 0xB6, 0x59, 0x76, 0x82, 0x42,
0xCA, 0x23, 0xB9, 0xC3, 0x9A, 0x4C, 0xF1, 0x9F, 0x98, 0xF5, 0x11, 0xFA, 0xB3, 0xC3, 0xE2, 0x36,
0xF4, 0x87, 0x11, 0xCB, 0xCA, 0xEB, 0x60, 0xE9, 0x60, 0xD2, 0x3F, 0x1E, 0x7D, 0xE3, 0x6E, 0x53,
0x2F, 0x12, 0xB6, 0x3A, 0x94, 0xC7, 0x02, 0x79, 0xBD, 0xFF, 0x8B, 0x1A, 0x29, 0x1B, 0x69, 0xB1,
0xC7, 0x2F, 0xBA, 0xAB, 0xA8, 0x71, 0x8E, 0x6C, 0xBA, 0x8E, 0xE5, 0x31, 0x81, 0x52, 0xA9, 0xF9,
0x76, 0x15, 0xB7, 0x92, 0x87, 0xED, 0x80, 0x72, 0xDA, 0xC6, 0x03, 0x74, 0x57, 0x11, 0xBB, 0x7D,
0x31, 0x17, 0x53, 0x71, 0x19, 0xB7, 0x05, 0xD1, 0x25, 0x35, 0xFE, 0x0D, 0xF8, 0xEF, 0xC8, 0x45,
0x46, 0xEE, 0xDA, 0x55, 0xDE, 0x56, 0x5B, 0x8F, 0xBB, 0xBC, 0xD5, 0x1E, 0x66, 0xC8, 0x2E, 0x98,
0x5E, 0xDC, 0xC2, 0x3F, 0xB1, 0xAB, 0x2F, 0x63, 0x57, 0x4C, 0xA6, 0xD5, 0xDF, 0x3D, 0x5E, 0x8F,
0xB8, 0x55, 0x05, 0xD3, 0xDA, 0x32, 0xC7, 0x8E, 0xE9, 0x1B, 0x75, 0xB4, 0x67, 0x33, 0x83, 0xE0,
0x4A, 0x71, 0x5B, 0xD6, 0x5A, 0xC6, 0x62, 0x17, 0x3D, 0x9A, 0x0B, 0xAB, 0xFC, 0x46, 0xAB, 0x70,
0x82, 0xA5, 0x9E, 0x8F, 0x7D, 0x43, 0xDD, 0x8E, 0xF3, 0xE4, 0x76, 0x99, 0x2A, 0x8A, 0xDE, 0x57,
0xC2, 0x5D, 0xF0, 0xAD, 0xFE, 0x0D, 0x35, 0x52, 0x31, 0x6E, 0x84, 0x40, 0x0C, 0x9C, 0x65, 0x25,
0x28, 0x28, 0x48, 0x71, 0x5D, 0x14, 0xF1, 0x83, 0xF0, 0x84, 0x25, 0x75, 0xDE, 0x14, 0xC1, 0x13,
0xA8, 0x52, 0xA7, 0x48, 0x7F, 0x4D, 0xCA, 0xD3, 0x1D, 0x4F, 0xE0, 0x09, 0x14, 0x29, 0xA2, 0x54,
0x14, 0x14, 0x44, 0xE2, 0x70, 0x3C, 0x5E, 0xD8, 0xC2, 0xBA, 0xC3, 0x9E, 0xF1, 0x78, 0x6C, 0x14,
0x22, 0xB2, 0x22, 0x68, 0x1C, 0xF1, 0xA8, 0xB1, 0x46, 0x39, 0xE0, 0x0D, 0x68, 0xE0, 0x26, 0x24,
0x2B, 0xB2, 0x1E, 0xC5, 0x88, 0x27, 0x20, 0xB4, 0x78, 0x00, 0xEE, 0xD0, 0x97, 0x4D, 0x8C, 0x55,
0xCF, 0x28, 0x0C, 0x9E, 0x1C, 0x50, 0x2A, 0x4D, 0x34, 0xE4, 0x50, 0xA0, 0xBE, 0xC2, 0xEA, 0x14,
0x88, 0x08, 0x74, 0x22, 0x0B, 0x90, 0xB3, 0xD5, 0x01, 0x5C, 0xAC, 0x6E, 0x60, 0xF2, 0xD6, 0x69,
0xBC, 0x91, 0xC8, 0xC7, 0x0A, 0xFB, 0xC8, 0x54, 0x49, 0x98, 0xA6, 0x94, 0x23, 0x59, 0xDD, 0x66,
0x02, 0xEE, 0x06, 0xBB, 0x68, 0xB2, 0xC7, 0xE7, 0xD1, 0x24, 0xD4, 0x8C, 0x8D, 0xA9, 0x13, 0x96,
0x07, 0x13, 0x76, 0xB3, 0xE8, 0x4C, 0x93, 0x29, 0x53, 0x21, 0x32, 0x23, 0x11, 0x0A, 0x4E, 0x6C,
0x74, 0xE4, 0xA6, 0xB5, 0xB0, 0xBE, 0x85, 0x4D, 0x56, 0x5A, 0xAC, 0x48, 0x79, 0x0A, 0x40, 0xDA,
0xD2, 0x24, 0x89, 0xB1, 0x0E, 0x6D, 0x7A, 0x53, 0x7E, 0x77, 0x96, 0x2E, 0x2A, 0x45, 0xC6, 0x64,
0xFC, 0xE9, 0xCD, 0xD3, 0xF8, 0xDE, 0x57, 0x77, 0x7C, 0xC6, 0xB6, 0x3B, 0x62, 0x4A, 0xDD, 0x51,
0xA1, 0x63, 0x34, 0xF5, 0xCE, 0x31, 0x69, 0xD7, 0xAC, 0xDD, 0x75, 0x66, 0x93, 0x1F, 0x76, 0x9C,
0x8E, 0x3D, 0xEF, 0x38, 0xFD, 0xA7, 0xC8, 0x6A, 0xE2, 0x9E, 0x24, 0x55, 0x29, 0x8D, 0x10, 0x27,
0xAF, 0x22, 0x7D, 0x23, 0x7D, 0xB2, 0xA6, 0xF2, 0x72, 0xFE, 0xED, 0x02, 0x3E, 0x40, 0xA1, 0x89,
0x16, 0xD6, 0x34, 0x42, 0xD5, 0xAE, 0xF0, 0xDA, 0xBF, 0xDC, 0x54, 0x72, 0x20, 0x6B, 0x5C, 0x64,
0xD9, 0x52, 0x96, 0xF9, 0x92, 0x6B, 0x3F, 0x61, 0x07, 0x58, 0xA5, 0x7A, 0x62, 0x8E, 0x32, 0x75,
0x8D, 0x7E, 0x04, 0xB3, 0x27, 0x8F, 0xB8, 0xAF, 0xCE, 0x4F, 0x86, 0xCB, 0xC6, 0xCB, 0xD5, 0xCD,
0xA9, 0xFC, 0xD0, 0xDA, 0xAD, 0x92, 0xB5, 0xE0, 0x11, 0x20, 0xDC, 0xBD, 0xAC, 0xBA, 0x6E, 0x05,
0x66, 0x0B, 0xAA, 0x39, 0x6E, 0xF4, 0x8F, 0xD3, 0x99, 0x41, 0xB4, 0x5E, 0x73, 0xD2, 0x39, 0xDD,
0x6F, 0x18, 0x28, 0x94, 0x4A, 0xA2, 0x98, 0xE7, 0x63, 0x9D, 0x79, 0xBC, 0x05, 0xBB, 0xBC, 0xC4,
0x16, 0x67, 0xE7, 0x6A, 0x87, 0xC4, 0xCD, 0x79, 0xE3, 0x2D, 0xCD, 0x7E, 0xE6, 0x97, 0x98, 0xAF,
0x8F, 0x3B, 0xDD, 0xDD, 0x8D, 0xA7, 0x86, 0x60, 0x5B, 0x4D, 0xB6, 0x68, 0xBD, 0x42, 0x4F, 0x5A,
0x30, 0xA2, 0x6A, 0xF7, 0x73, 0xE0, 0x1E, 0x59, 0x99, 0xCA, 0x37, 0xF0, 0x0F, 0x9D, 0x54, 0xBD,
0x6E, 0xD4, 0x40, 0x10, 0x1E, 0xDF, 0x46, 0x6C, 0x12, 0x13, 0x4C, 0x83, 0x94, 0x22, 0x92, 0xA9,
0x11, 0xC8, 0xBC, 0x00, 0xB7, 0xA6, 0x4A, 0x99, 0xCA, 0x34, 0x34, 0x94, 0x74, 0x1C, 0xFD, 0x25,
0x36, 0xA2, 0xA0, 0xE4, 0x15, 0x52, 0x82, 0x79, 0x85, 0x4B, 0xBC, 0xE8, 0x8A, 0x94, 0x67, 0x29,
0x05, 0x65, 0x4E, 0x50, 0x20, 0xD1, 0xB0, 0xD2, 0xB9, 0x30, 0xB0, 0x66, 0x99, 0x19, 0x9F, 0x7D,
0xA7, 0x14, 0x84, 0xB0, 0xD6, 0x7C, 0x5A, 0xAF, 0x3D, 0x33, 0xDF, 0xFC, 0x2D, 0x6C, 0x02, 0x2E,
0x61, 0x08, 0x1B, 0x02, 0x15, 0x23, 0x04, 0x65, 0x7F, 0xE8, 0x68, 0x5D, 0x10, 0x34, 0x69, 0xF2,
0x24, 0xCF, 0x5F, 0xD5, 0x74, 0x2A, 0xE7, 0x84, 0x61, 0x46, 0x58, 0x10, 0x0C, 0x48, 0x03, 0x36,
0x80, 0xF7, 0x31, 0x9B, 0x11, 0x2E, 0x06, 0xE5, 0x62, 0xF1, 0xEB, 0x7B, 0xA6, 0xC2, 0xE8, 0xB5,
0x19, 0x47, 0x6F, 0x1F, 0x9B, 0x07, 0x1B, 0x52, 0xDF, 0x86, 0x10, 0xFF, 0x1A, 0x03, 0x78, 0xE8,
0xC1, 0xD7, 0x00, 0x11, 0xBE, 0x4E, 0x50, 0xEF, 0xCA, 0x57, 0x80, 0x2D, 0x76, 0x50, 0x41, 0x47,
0xB2, 0xE5, 0x0B, 0xB6, 0x8D, 0x82, 0xC9, 0xCE, 0x98, 0x6C, 0x9E, 0xBF, 0x4F, 0x5E, 0x64, 0x1D,
0x55, 0x8F, 0x59, 0x1F, 0x31, 0x69, 0x4D, 0xC8, 0xC6, 0x68, 0xDD, 0xC8, 0xAE, 0xE1, 0x5F, 0xE2,
0xEB, 0x8A, 0xFB, 0x9E, 0xD4, 0x2F, 0xEB, 0x50, 0x7E, 0xAE, 0xC7, 0xE9, 0xE0, 0xC7, 0xC2, 0x78,
0xCE, 0x81, 0xE7, 0x0C, 0x4A, 0x1B, 0x59, 0xBB, 0xF6, 0x40, 0x30, 0x3F, 0x85, 0x84, 0x35, 0x21,
0x52, 0x55, 0xB4, 0x45, 0x24, 0xD6, 0x2A, 0x60, 0xD2, 0x8A, 0xC0, 0x2A, 0x0A, 0x4B, 0xAB, 0x35,
0x85, 0x94, 0x15, 0x52, 0x56, 0x18, 0xC1, 0x0E, 0xAC, 0x2D, 0x26, 0x83, 0x7E, 0x52, 0x8B, 0x2E,
0x5D, 0x2C, 0x17, 0xB3, 0x32, 0x9C, 0x4E, 0x2B, 0x25, 0xB4, 0xBD, 0x29, 0xF4, 0x43, 0x10, 0xF8,
0xFD, 0x2F, 0xB2, 0x29, 0xF4, 0x5D, 0xFA, 0x97, 0x74, 0xE4, 0x97, 0x59, 0x49, 0x36, 0x20, 0x6D,
0x5A, 0x9B, 0x52, 0x2F, 0x7D, 0x60, 0x76, 0xC2, 0x79, 0xE7, 0x03, 0xE4, 0xD7, 0x0B, 0x1D, 0xBD,
0x39, 0x33, 0xA9, 0xFC, 0x58, 0xDF, 0x97, 0x7A, 0xC4, 0xFF, 0x5D, 0x12, 0x2A, 0xF0, 0x23, 0xA9,
0x2B, 0xB5, 0x3F, 0xAD, 0x82, 0x4F, 0xB3, 0x12, 0xEB, 0x1F, 0x83, 0x43, 0xBB, 0xAA, 0xE2, 0x9A,
0xE5, 0x1F, 0xBE, 0xBD, 0xA3, 0x02, 0x91, 0x2C, 0x23, 0xB1, 0x57, 0xCA, 0x2D, 0x4A, 0x48, 0x6C,
0xB1, 0x45, 0xAD, 0xA8, 0xC0, 0xFA, 0x25, 0xD4, 0x51, 0x06, 0x75, 0xE1, 0x5C, 0x9D, 0xA2, 0x44,
0xD8, 0x04, 0x3E, 0xD2, 0x1C, 0x50, 0x99, 0x4F, 0x51, 0xE8, 0x60, 0x6B, 0x95, 0x2A, 0xF5, 0x4F,
0x72, 0x0C, 0x0A, 0xFB, 0x44, 0xA1, 0x81, 0x21, 0x44, 0xD9, 0x10, 0x2D, 0x0E, 0xD1, 0x22, 0x56,
0xA6, 0x51, 0xCC, 0x95, 0xDA, 0x0E, 0x3D, 0xB3, 0xF1, 0xD3, 0x65, 0x4F, 0x1D, 0xF7, 0x3E, 0xEE,
0x70, 0x4F, 0xEA, 0x76, 0x70, 0x76, 0x89, 0x34, 0x8E, 0x87, 0xA2, 0x76, 0x0B, 0x34, 0x82, 0x30,
0xD4, 0x78, 0x96, 0x46, 0x26, 0xE2, 0x92, 0x4F, 0x09, 0xCC, 0xD1, 0x6A, 0x9A, 0x88, 0x37, 0x47,
0xD1, 0x6D, 0xE1, 0xD2, 0x1A, 0xF5, 0x33, 0x27, 0xB9, 0xBD, 0xB8, 0xA7, 0xA9, 0x71, 0x1A, 0x36,
0x78, 0xFE, 0x33, 0xC7, 0xA6, 0xB7, 0x3D, 0x0D, 0xFE, 0xE4, 0x4A, 0x9E, 0x06, 0xC1, 0xDB, 0x20,
0xEB, 0x92, 0xB1, 0x54, 0x96, 0x6B, 0xD6, 0x9F, 0x51, 0xDA, 0x50, 0xCF, 0x77, 0x14, 0x29, 0x9A,
0x71, 0xBE, 0x01, 0x65, 0x0A, 0x1D, 0x38, 0xDF, 0x89, 0x85, 0x99, 0xD8, 0x1D, 0xE5, 0x9F, 0x61,
0x1C, 0x38, 0x0B, 0xCA, 0xD7, 0xD7, 0xDB, 0x0C, 0x8E, 0x9F, 0xF7, 0x8E, 0x3C, 0x26, 0x37, 0x84,
0x7E, 0x2C, 0xE5, 0x9C, 0xF9, 0x67, 0x04, 0xBF, 0xB7, 0x31, 0x88, 0xBC, 0x3D, 0xE6, 0xF9, 0x3E,
0xE1, 0xF1, 0x38, 0xE8, 0x43, 0x59, 0x0D, 0x72, 0x44, 0xD1, 0x08, 0xCE, 0xD7, 0x6E, 0x67, 0xFB,
0x1E, 0x8E, 0xF3, 0xFF, 0x31, 0x3C, 0x37, 0x93, 0x91, 0x52, 0xFE, 0x4C, 0x3B, 0x53, 0x18, 0xE1,
0x7C, 0x0B, 0x81, 0xC1, 0x9B, 0x2D, 0x3A, 0x40, 0xB6, 0x05, 0xA6, 0x7B, 0x40, 0x89, 0xDD, 0x26,
0xCE, 0xF8, 0xD0, 0x2D, 0x80, 0xF7, 0x80, 0x67, 0x69, 0x3E, 0xB9, 0xCC, 0x5E, 0x93, 0x24, 0x05,
0x84, 0xC4, 0xD0, 0x63, 0xC6, 0x9C, 0xEB, 0xE1, 0x21, 0x91, 0x9A, 0x9C, 0x24, 0x49, 0xF2, 0xB4,
0x2D, 0x04, 0xDF, 0xA7, 0x25, 0x75, 0xF5, 0x21, 0x5D, 0xB8, 0xD4, 0x4E, 0x96, 0xCB, 0x3D, 0x87,
0xF9, 0x32, 0x86, 0x3F, 0xD5, 0x59, 0x3D, 0x90, 0xDD, 0x56, 0x15, 0xBE, 0x92, 0x58, 0x2B, 0x13,
0x15, 0x72, 0xE1, 0x82, 0x89, 0x67, 0x10, 0x05, 0x55, 0x98, 0xB1, 0x9A, 0x14, 0x14, 0xCF, 0x91,
0x1C, 0x8A, 0x14, 0x2E, 0x4C, 0x11, 0xD7, 0xD4, 0xC0, 0x0C, 0xA6, 0xA4, 0xB0, 0x57, 0x02, 0x0A,
0x0A, 0x8A, 0xEC, 0x0C, 0x64, 0x28, 0x43, 0x91, 0xC6, 0xDB, 0xD0, 0x52, 0xEC, 0xAE, 0x44, 0x5C,
0xB8, 0x48, 0x81, 0x06, 0x17, 0x2E, 0x28, 0x2C, 0x88, 0x99, 0x84, 0xA1, 0x58, 0x79, 0x10, 0x41,
0x1B, 0x4B, 0xBA, 0x7C, 0xDF, 0x39, 0x7A, 0x4F, 0xDA, 0xDD, 0xE7, 0x10, 0xC6, 0x63, 0xCF, 0x44,
0xB3, 0x7B, 0xEF, 0x7B, 0x57, 0xF7, 0x9E, 0xFB, 0x9D, 0x9F, 0x7B, 0x7E, 0xEE, 0x33, 0x86, 0x4F,
0xD8, 0xB0, 0xF9, 0x78, 0x40, 0xEB, 0xB7, 0x59, 0x69, 0x8C, 0xDB, 0xCB, 0xD0, 0xE0, 0x8E, 0x68,
0x0B, 0xC3, 0xA1, 0x24, 0x0F, 0x5B, 0x63, 0xA2, 0xD2, 0xC1, 0x50, 0xD0, 0x98, 0xC4, 0x5A, 0xDB,
0x9A, 0x00, 0x6D, 0x6F, 0x1C, 0xB4, 0x18, 0x4D, 0x4A, 0x93, 0xE0, 0x5D, 0x6B, 0xE2, 0xDC, 0x18,
0x6B, 0xC2, 0x8A, 0x43, 0x3E, 0xE8, 0xF8, 0x9D, 0x8B, 0xA5, 0x18, 0xEA, 0xD1, 0xC6, 0xD5, 0x2E,
0x5A, 0xAF, 0x4B, 0xB8, 0xB1, 0x0D, 0x41, 0xD9, 0x44, 0x7F, 0xA9, 0x38, 0x64, 0xB9, 0xA5, 0x29,
0x3A, 0xB6, 0x11, 0xA7, 0x1A, 0x6F, 0x14, 0x78, 0x47, 0xD2, 0x7E, 0x8D, 0xCD, 0x05, 0x9B, 0x1B,
0xDF, 0xDA, 0xD4, 0x19, 0x7F, 0x3F, 0x98, 0x6F, 0x98, 0x88, 0x4B, 0xB2, 0x14, 0x33, 0x85, 0x34,
0x88, 0x39, 0xFC, 0xC0, 0xAD, 0xCD, 0x60, 0x5C, 0x7B, 0x5C, 0xBB, 0x84, 0x66, 0xDF, 0xB3, 0x55,
0x52, 0xBA, 0x03, 0x70, 0x87, 0x15, 0x26, 0x0C, 0x40, 0x18, 0xDD, 0x6B, 0x31, 0x39, 0xC3, 0xAA,
0x5F, 0x35, 0xC6, 0x6B, 0x89, 0x3F, 0xAC, 0xC1, 0x19, 0x3E, 0x0C, 0xF8, 0x10, 0x95, 0x16, 0xA3,
0x58, 0x30, 0x9A, 0xAC, 0xCA, 0x4A, 0x90, 0xC1, 0x5A, 0x0B, 0x6C, 0x97, 0x1F, 0x1B, 0x61, 0xFE,
0x06, 0xFE, 0xFF, 0x25, 0xEC, 0x93, 0x33, 0xE1, 0x5E, 0xE4, 0xE8, 0x9D, 0x1F, 0x28, 0x30, 0x2D,
0xC6, 0xFF, 0x47, 0x96, 0x54, 0xB6, 0xCD, 0x38, 0x3B, 0x30, 0x62, 0xA6, 0xE5, 0xB2, 0x63, 0xFC,
0x57, 0xC2, 0xBE, 0xF9, 0x26, 0x64, 0x6B, 0x1F, 0x9B, 0x03, 0x11, 0xF7, 0x5B, 0xBD, 0xC8, 0xFE,
0x29, 0x14, 0x71, 0x62, 0x6E, 0xD9, 0xD2, 0xE0, 0xCF, 0xB5, 0x86, 0xFA, 0x72, 0x6C, 0x4E, 0x82,
0xBE, 0x2D, 0x81, 0xDE, 0x44, 0x8F, 0x6A, 0x70, 0x63, 0x92, 0xEB, 0x4D, 0x04, 0x3A, 0x83, 0xDF,
0x40, 0x48, 0x5E, 0xEB, 0xB5, 0xD8, 0x2A, 0xAC, 0xD0, 0xE5, 0x26, 0x49, 0xA1, 0x8C, 0x1C, 0xE2,
0x62, 0xE7, 0x75, 0x86, 0x83, 0x58, 0xC2, 0x29, 0x18, 0xE6, 0x82, 0x23, 0x6A, 0x3C, 0xFA, 0x33,
0x98, 0x0F, 0xEB, 0xF0, 0x9F, 0x0D, 0x75, 0x18, 0x60, 0x3F, 0x98, 0x85, 0x67, 0xB9, 0x1F, 0x76,
0x4E, 0x8D, 0x3F, 0x60, 0xCB, 0x96, 0xEA, 0x8B, 0x14, 0x74, 0x26, 0xA2, 0x37, 0x87, 0xE6, 0xB2,
0xDD, 0x33, 0xE6, 0x92, 0x59, 0x3F, 0x29, 0x1B, 0x9A, 0x08, 0x01, 0x53, 0x59, 0x34, 0x3B, 0x93,
0x75, 0x1B, 0x13, 0x88, 0xDE, 0x27, 0xC7, 0x87, 0x14, 0x86, 0xD7, 0x14, 0x9C, 0xFC, 0x33, 0xDA,
0x41, 0x2F, 0x5C, 0xD5, 0x64, 0x2A, 0x49, 0x23, 0xF0, 0xD4, 0x53, 0x5E, 0x41, 0x6D, 0x8A, 0x14,
0x76, 0x07, 0xB3, 0x84, 0xEA, 0x31, 0x05, 0xBA, 0x87, 0x09, 0x26, 0x14, 0xA4, 0xDB, 0x51, 0xA4,
0x34, 0x86, 0x22, 0xCD, 0x28, 0x62, 0x70, 0x87, 0x29, 0x11, 0x08, 0x07, 0x1D, 0xA5, 0x2B, 0x0A,
0xB4, 0xF6, 0x4F, 0xD2, 0x9A, 0x8C, 0xED, 0x67, 0xF2, 0xF9, 0xA9, 0x8E, 0xCB, 0x19, 0x48, 0x2A,
0xB2, 0x9F, 0xE5, 0x3C, 0x02, 0x64, 0xB7, 0x77, 0x01, 0x38, 0xA8, 0xFD, 0x9E, 0x38, 0xA0, 0x2D,
0x6C, 0x0B, 0x34, 0xD8, 0x45, 0xED, 0xBF, 0x48, 0xB1, 0x2D, 0xD0, 0xC0, 0xB2, 0x81, 0x26, 0xE3,
0x81, 0xA0, 0xF5, 0x87, 0x0D, 0x4D, 0x3D, 0xA1, 0x2C, 0x4D, 0xF6, 0x0B, 0x12, 0xB6, 0x11, 0x48,
0xBA, 0xC3, 0xE1, 0x86, 0xEF, 0xD0, 0xA6, 0x1B, 0xCB, 0x4F, 0xEA, 0xD9, 0xF0, 0x45, 0x60, 0xE6,
0xDB, 0xD6, 0x52, 0xC2, 0x6C, 0x69, 0x7E, 0x83, 0x23, 0x76, 0xE1, 0x0D, 0x9B, 0xF3, 0x6B, 0xC8,
0x17, 0x41, 0x8A, 0x38, 0x65, 0x4D, 0x21, 0xAD, 0x1E, 0x22, 0xE1, 0xA8, 0x97, 0x76, 0xD0, 0x76,
0x1A, 0x5F, 0xCC, 0xCC, 0x64, 0xAB, 0x44, 0xE8, 0x44, 0x62, 0x76, 0x3C, 0xF3, 0xEB, 0x73, 0xE8,
0xC0, 0xFA, 0x8C, 0x1A, 0xFF, 0x1A, 0x89, 0xA2, 0xC2, 0xF3, 0x9A, 0xAC, 0x4F, 0x36, 0xED, 0x16,
0xB4, 0x10, 0x0B, 0xD0, 0x7A, 0x0D, 0xD1, 0xA2, 0x8D, 0x44, 0x77, 0x40, 0x0B, 0xB9, 0x00, 0x2D,
0xDA, 0x42, 0xCC, 0x62, 0x14, 0x02, 0x5B, 0xD1, 0xF6, 0x44, 0x4B, 0xA5, 0x16, 0xB0, 0x4E, 0xA2,
0xF5, 0x1A, 0x71, 0x31, 0xB5, 0x58, 0x64, 0x45, 0xB4, 0x14, 0xB2, 0x3F, 0x52, 0xB2, 0x38, 0x25,
0xE9, 0x59, 0xB4, 0x85, 0xB4, 0x22, 0x60, 0xF1, 0x13, 0x46, 0xFC, 0xD2, 0xF4, 0x5C, 0x90, 0x39,
0x34, 0x82, 0xC1, 0x95, 0x1D, 0x03, 0xE1, 0x3A, 0xAA, 0x67, 0x99, 0x2C, 0xA5, 0x2A, 0xA8, 0xDA,
0x53, 0xED, 0xB3, 0x24, 0x29, 0xDA, 0x09, 0xC6, 0x54, 0x4C, 0x7E, 0xDE, 0x45, 0x77, 0x04, 0xC0,
0x13, 0xEA, 0xDE, 0xC2, 0xB9, 0x78, 0x76, 0x7D, 0xDC, 0x23, 0x55, 0x4E, 0x22, 0x5F, 0xC4, 0x3F,
0xAC, 0x35, 0xEB, 0x37, 0x0B, 0xA5, 0xC6, 0xA5, 0x0E, 0xA9, 0xB8, 0x12, 0xE9, 0x42, 0x69, 0xCB,
0x79, 0xAE, 0xDB, 0x2F, 0x14, 0xAD, 0x44, 0x74, 0x9D, 0xB2, 0x36, 0x19, 0x4F, 0x3B, 0x9D, 0x42,
0x61, 0x45, 0xC4, 0x56, 0x13, 0x95, 0xA0, 0xFE, 0x60, 0xA1, 0xDD, 0xA0, 0x9A, 0xB8, 0x9F, 0xFC,
0xA0, 0xCC, 0xA2, 0xAC, 0x9D, 0xCE, 0xDC, 0xEA, 0x54, 0x79, 0x29, 0x67, 0xE9, 0xD1, 0x98, 0xF4,
0x49, 0x6D, 0x57, 0xF0, 0x30, 0x32, 0x54, 0xE8, 0xD0, 0x3D, 0x01, 0x7A, 0x0A, 0xBB, 0x90, 0xC7,
0x5C, 0xCC, 0x92, 0x73, 0x2E, 0xAC, 0x07, 0x15, 0x63, 0x0E, 0xC8, 0x8B, 0x8B, 0x94, 0x60, 0x14,
0x56, 0x6C, 0x9D, 0xAE, 0xA8, 0x44, 0xC5, 0xF5, 0x24, 0x38, 0xB6, 0xB9, 0xA0, 0xD2, 0xB0, 0x26,
0x5C, 0xBA, 0xDD, 0x02, 0xFD, 0xDA, 0x80, 0xF7, 0x14, 0x75, 0x2E, 0x0B, 0xD5, 0x20, 0x54, 0x64,
0x81, 0x0A, 0xAB, 0x10, 0xFD, 0x85, 0xB5, 0xCA, 0x4F, 0x45, 0x2A, 0x73, 0x6D, 0xA5, 0xCA, 0x9E,
0x6D, 0x68, 0xD2, 0xB8, 0x0A, 0x56, 0x15, 0x16, 0x8B, 0x48, 0xB3, 0x46, 0xD6, 0x35, 0xB2, 0xAE,
0x26, 0x38, 0x08, 0x33, 0x53, 0x6B, 0xD6, 0xAE, 0x7F, 0x4D, 0xBA, 0x3D, 0xE1, 0xCC, 0x9A, 0xAF,
0x58, 0xE7, 0xDB, 0x4F, 0x61, 0xC2, 0x9F, 0x66, 0x72, 0xC6, 0xC1, 0x11, 0xFC, 0xB1, 0xED, 0x03,
0x91, 0x91, 0x68, 0x33, 0x67, 0x33, 0x32, 0x36, 0xB8, 0x3D, 0x03, 0x85, 0xD7, 0xB0, 0x0D, 0x4B,
0x1F, 0xDA, 0xBC, 0x62, 0x02, 0x9C, 0xC4, 0x8B, 0x26, 0x14, 0x11, 0x86, 0xDD, 0x6C, 0x82, 0x2A,
0xBB, 0xA4, 0x99, 0xBD, 0x60, 0x56, 0x6E, 0xCC, 0x37, 0x50, 0x2B, 0xCD, 0x37, 0x87, 0x42, 0x4E,
0x98, 0x3B, 0xCC, 0xD6, 0x6C, 0xD7, 0x26, 0x7D, 0x49, 0x74, 0xD8, 0xF8, 0x20, 0xED, 0x57, 0x9C,
0x96, 0x7C, 0xB7, 0xA7, 0xCA, 0xE2, 0xCF, 0xF7, 0xF7, 0x0B, 0x35, 0xBA, 0x9F, 0x8B, 0x2A, 0x44,
0x3D, 0x7A, 0xA8, 0x44, 0x47, 0xFC, 0xDF, 0xDF, 0xDF, 0xBF, 0xBB, 0x31, 0x1A, 0x89, 0x55, 0x62,
0x4B, 0x62, 0xFB, 0x74, 0x37, 0x74, 0x60, 0x6B, 0xCB, 0x12, 0x1C, 0x87, 0x1B, 0xF7, 0xB0, 0x75,
0x49, 0xB3, 0x5E, 0xE2, 0x3C, 0x73, 0x49, 0x74, 0x7A, 0x89, 0xB7, 0x6D, 0xC9, 0x0F, 0x04, 0xE4,
0x9B, 0xFA, 0xD5, 0x69, 0x75, 0x42, 0x50, 0xEA, 0xE2, 0x64, 0xA2, 0xD9, 0xE9, 0xB0, 0x5F, 0x29,
0xB9, 0x18, 0x43, 0xBB, 0xBA, 0x82, 0xDE, 0x8E, 0xE8, 0x65, 0x38, 0xD5, 0x15, 0x5F, 0x4C, 0xC8,
0xFD, 0x9D, 0xCA, 0xE5, 0x36, 0x01, 0x92, 0x91, 0xD2, 0xBC, 0xE2, 0x34, 0x4E, 0x50, 0xDD, 0x0E,
0xEE, 0xD9, 0x28, 0x6A, 0xA3, 0xA7, 0xC7, 0x35, 0x4C, 0x3A, 0x87, 0xE7, 0x42, 0x06, 0x00, 0x0F,
0xC6, 0x81, 0xE4, 0xC9, 0x13, 0x7B, 0x1D, 0x33, 0xCA, 0x3C, 0x82, 0x86, 0x7D, 0x1E, 0xD4, 0x66,
0xA2, 0x71, 0x09, 0x13, 0xEB, 0xC8, 0x76, 0xC9, 0xB5, 0xE1, 0x8E, 0xD9, 0x3D, 0x30, 0x49, 0x2F,
0x7F, 0x47, 0x66, 0x37, 0xB9, 0xD6, 0xC7, 0xB6, 0xF5, 0x71, 0x88, 0x2F, 0x99, 0xF8, 0x7A, 0x6F,
0x1F, 0xF5, 0x49, 0x3A, 0xFB, 0xE6, 0xC9, 0x87, 0x79, 0x22, 0x0A, 0xAF, 0x9D, 0x7D, 0x5B, 0xA0,
0x2E, 0xAC, 0x9A, 0xE3, 0x5F, 0xAC, 0xE7, 0x30, 0x9D, 0xCF, 0xBC, 0x7A, 0x6D, 0xB1, 0x91, 0x8D,
0xEF, 0x87, 0xCD, 0x42, 0x7B, 0xC8, 0x4F, 0xC0, 0x38, 0xBC, 0x05, 0x89, 0x15, 0x42, 0x2C, 0x4B,
0x35, 0x6F, 0x15, 0x19, 0x95, 0x14, 0x47, 0x54, 0x51, 0x56, 0x61, 0x4D, 0x62, 0x41, 0xB3, 0x2B,
0x5B, 0x4B, 0xD0, 0x6E, 0x7B, 0x81, 0xC4, 0xD6, 0x19, 0x05, 0x93, 0x9A, 0xD1, 0x94, 0xC7, 0x2E,
0xE2, 0x46, 0xB2, 0x40, 0xB6, 0x33, 0x71, 0xB4, 0x17, 0xD7, 0xE6, 0x4E, 0x68, 0xAB, 0xE8, 0xC1,
0x58, 0xBC, 0x0D, 0xB2, 0x43, 0x17, 0x32, 0x9D, 0x82, 0x08, 0xCB, 0x30, 0x07, 0xCE, 0xDE, 0xC4,
0x75, 0x50, 0x05, 0xC7, 0x69, 0xF6, 0xDB, 0xF6, 0xC8, 0x83, 0x99, 0x32, 0x1E, 0x89, 0x69, 0xBC,
0x82, 0x2C, 0x0F, 0x26, 0x6F, 0x7B, 0x17, 0x82, 0x3C, 0x6E, 0x8A, 0xE2, 0x61, 0x1D, 0xBD, 0x9F,
0xEE, 0xF6, 0x92, 0x8F, 0xE5, 0x50, 0x72, 0x0C, 0x22, 0xB9, 0x6B, 0x4B, 0xA4, 0x64, 0xC9, 0xA1,
0xF3, 0x59, 0xEB, 0x3F, 0x1C, 0xC7, 0xF0, 0x29, 0xE4, 0x9B, 0x27, 0x36, 0xCD, 0x90, 0x99, 0xE5,
0xC3, 0x2C, 0x47, 0x95, 0x9D, 0xCA, 0xEB, 0x65, 0x0D, 0xFF, 0xFD, 0x26, 0x1E, 0xF1, 0x11, 0xE3,
0x22, 0xDD, 0xAA, 0x17, 0xFA, 0xFE, 0xBA, 0xB4, 0x9E, 0x1E, 0x4B, 0xAB, 0x29, 0xA3, 0xBC, 0xF7,
0x4F, 0x05, 0x33, 0xA1, 0x1F, 0x74, 0xEA, 0xBF, 0xCD, 0xEC, 0x2C, 0xA6, 0xB4, 0x45, 0x75, 0x5E,
0xE4, 0x73, 0x14, 0x9E, 0x42, 0xE9, 0x97, 0xA2, 0xE8, 0x4E, 0x14, 0x89, 0xF6, 0x1D, 0x0D, 0x01,
0x0F, 0xD4, 0x7B, 0x17, 0x1A, 0x09, 0xB2, 0xE8, 0xFE, 0x93, 0xFE, 0x4B, 0x37, 0x3B, 0x69, 0xE6,
0x0C, 0xBD, 0xFF, 0x9F, 0x26, 0x7A, 0x54, 0x66, 0x2F, 0xEE, 0x63, 0xFF, 0x8E, 0xF3, 0xBD, 0x75,
0xE4, 0xD2, 0xD0, 0x1E, 0x0B, 0x37, 0x89, 0xB0, 0x99, 0x89, 0x48, 0x06, 0x49, 0x2C, 0xFB, 0x44,
0x7C, 0x18, 0xD5, 0xE3, 0xB5, 0x3C, 0x3C, 0xBE, 0xE4, 0xA8, 0x41, 0x1D, 0x88, 0x8F, 0xE0, 0x99,
0x88, 0x4A, 0x6A, 0x2C, 0x61, 0x4A, 0x8B, 0x63, 0xC4, 0x78, 0x77, 0x24, 0x9A, 0x64, 0x2E, 0x25,
0x5F, 0x59, 0x3C, 0x30, 0xF6, 0x79, 0x32, 0x99, 0x31, 0x3B, 0xAC, 0xB8, 0x37, 0xEA, 0x05, 0x21,
0xC8, 0x44, 0xC3, 0x93, 0x2D, 0xDC, 0x5E, 0xCE, 0xE1, 0xA0, 0xAD, 0x8E, 0xE8, 0xDB, 0x69, 0x6B,
0x49, 0xB3, 0x95, 0x82, 0x52, 0x53, 0xCA, 0xBA, 0x8B, 0xEE, 0xC8, 0xDD, 0xC7, 0x35, 0x12, 0x45,
0xA5, 0x08, 0x15, 0xAD, 0x22, 0x57, 0x2E, 0x94, 0x23, 0xE5, 0x4E, 0x39, 0x9D, 0xB8, 0x56, 0x09,
0xA8, 0x34, 0x54, 0x32, 0x6A, 0x19, 0x22, 0xB1, 0x0B, 0xCC, 0xC5, 0x7C, 0xE6, 0x66, 0xAE, 0x24,
0x64, 0xD9, 0xBF, 0x77, 0x6C, 0x05, 0x63, 0x72, 0x2C, 0x63, 0x8C, 0xCF, 0x3A, 0xC9, 0xC4, 0x28,
0x1C, 0xB5, 0x72, 0x34, 0xE1, 0xC3, 0x66, 0xCD, 0xD2, 0x8B, 0xF8, 0xF8, 0x3A, 0x9A, 0x57, 0x73,
0x69, 0x7F, 0xF9, 0x42, 0x37, 0x92, 0x8F, 0x0F, 0x84, 0x2D, 0xE1, 0xF0, 0x43, 0x56, 0x5A, 0x9D,
0xF0, 0xAD, 0x22, 0x50, 0x69, 0x88, 0x60, 0x54, 0x46, 0x3C, 0x56, 0x7B, 0x46, 0x5C, 0xBE, 0x89,
0x38, 0x9A, 0xFC, 0xB1, 0xA7, 0xF3, 0x7C, 0x63, 0x4A, 0x87, 0xEC, 0xA6, 0x19, 0x5F, 0x7E, 0x43,
0x0D, 0x3B, 0x68, 0x56, 0x8C, 0x1A, 0xC5, 0xDB, 0x2D, 0x13, 0x7F, 0x66, 0x93, 0xCC, 0xF0, 0x2E,
0x9C, 0x2C, 0xB2, 0xD8, 0xA2, 0x94, 0xE2, 0x8B, 0x26, 0x32, 0x25, 0x22, 0x95, 0x79, 0xDE, 0x47,
0xAA, 0xCB, 0x5A, 0xCA, 0xE3, 0x4F, 0x2C, 0x9D, 0xC8, 0xBB, 0xCC, 0x40, 0x06, 0x46, 0x92, 0xA0,
0x16, 0x53, 0x3F, 0xFF, 0x32, 0xCE, 0xD7, 0x91, 0xEC, 0xB9, 0x1E, 0x25, 0xF1, 0x2C, 0xA6, 0xA2,
0x32, 0x6A, 0x83, 0x1E, 0xB1, 0x63, 0x77, 0xEB, 0xE2, 0x38, 0x8F, 0x9B, 0xB0, 0x87, 0xCB, 0xBC,
0x23, 0x2C, 0xA0, 0xFC, 0xE7, 0x51, 0xEC, 0x33, 0x69, 0x99, 0x88, 0x85, 0x3D, 0x61, 0x4E, 0xE5,
0xC7, 0x73, 0x8B, 0x68, 0x1B, 0xFD, 0x48, 0xE9, 0xFF, 0x10, 0x09, 0xA3, 0x84, 0x66, 0xA4, 0xDA,
0x27, 0x7E, 0x83, 0xDA, 0xD1, 0x76, 0x2B, 0x98, 0x5D, 0xEB, 0x20, 0x7A, 0xC2, 0xB7, 0xAD, 0xDF,
0xBB, 0x35, 0xDF, 0xB7, 0x87, 0x7C, 0x7F, 0x75, 0xF1, 0xFE, 0xF4, 0xF3, 0x2A, 0x72, 0xB9, 0xFD,
0x5F, 0xD3, 0x5F, 0x77, 0x56, 0xEF, 0xA9, 0xB6, 0x3C, 0x12, 0x8B, 0xDE, 0x65, 0xF3, 0x37, 0x4E,
0xFF, 0xC0, 0x3D, 0x31, 0xDE, 0x35, 0x24, 0xB4, 0x07, 0x89, 0xED, 0xA2, 0x8F, 0xEA, 0xCC, 0x76,
0x07, 0xA6, 0x18, 0xDD, 0x94, 0x39, 0x25, 0x77, 0xC8, 0x6A, 0xF3, 0x9D, 0xD8, 0x56, 0xC1, 0x7D,
0x24, 0x91, 0xFD, 0x11, 0xCE, 0xC5, 0xF5, 0x32, 0xB0, 0xF5, 0xB7, 0x98, 0x9F, 0x52, 0xEE, 0xCE,
0xE7, 0xA9, 0xD9, 0xD1, 0x20, 0xC1, 0x44, 0xFF, 0xC4, 0xF9, 0x91, 0xFD, 0x47, 0x7A, 0x66, 0x4B,
0x8E, 0x49, 0x35, 0x70, 0x22, 0xF3, 0x64, 0x85, 0xAC, 0x85, 0x59, 0xD0, 0x23, 0xB3, 0xCA, 0xC9,
0x91, 0xAA, 0xDE, 0x5D, 0xE7, 0xA4, 0xC6, 0xE5, 0xCD, 0x50, 0x35, 0xE5, 0x69, 0xA9, 0xD9, 0x2F,
0xF6, 0x37, 0xEF, 0xBC, 0x5A, 0x87, 0xFD, 0x74, 0x93, 0xC7, 0x6A, 0x68, 0x65, 0x26, 0xAB, 0xA9,
0xEC, 0xE2, 0x91, 0xB1, 0x79, 0xCA, 0x36, 0x81, 0x6C, 0x27, 0xF0, 0x53, 0x8D, 0x96, 0x19, 0x0B,
0xEA, 0x4A, 0xBB, 0x3D, 0xB9, 0xB9, 0xB1, 0xBC, 0xF1, 0x03, 0xB4, 0x78, 0xA0, 0x51, 0x4F, 0x1F,
0x38, 0x47, 0xDC, 0xAD, 0x3F, 0x4C, 0xE9, 0xDF, 0x12, 0xC1, 0xCC, 0x17, 0xCD, 0x35, 0x9D, 0xB2,
0x78, 0x16, 0x56, 0x3E, 0xCF, 0x87, 0x14, 0xC0, 0x24, 0xED, 0x30, 0x2F, 0xF0, 0x69, 0xCE, 0x34,
0x92, 0xAC, 0x15, 0xFA, 0x01, 0xBE, 0x63, 0x0B, 0x87, 0xD3, 0x59, 0x03, 0x86, 0xA9, 0x08, 0x6E,
0x7E, 0x5E, 0xC7, 0x0E, 0xBC, 0xA1, 0xFB, 0x58, 0x1C, 0xD7, 0x9C, 0x46, 0x02, 0xE7, 0x4F, 0x34,
0x9B, 0x44, 0x11, 0x41, 0x4A, 0x59, 0x8F, 0xAE, 0x26, 0x4C, 0x57, 0x59, 0x92, 0xAE, 0x5B, 0x77,
0x06, 0x0C, 0x46, 0x9D, 0x5C, 0x52, 0x39, 0x64, 0x32, 0x26, 0xCF, 0x8B, 0x3E, 0x9B, 0xFB, 0x40,
0xFA, 0x7E, 0xEA, 0x2B, 0xAD, 0x24, 0x0F, 0xA0, 0x97, 0x5C, 0xEF, 0x70, 0x2E, 0x2E, 0x30, 0xBC,
0xA1, 0x05, 0x63, 0x20, 0xDC, 0xE6, 0xC2, 0x35, 0x96, 0x39, 0x53, 0x6F, 0x8A, 0x69, 0xFC, 0x74,
0xAF, 0xAC, 0xE2, 0xC0, 0xB0, 0x74, 0x02, 0x36, 0x0A, 0x61, 0xD9, 0xE5, 0xEB, 0xDD, 0x27, 0x30,
0x9C, 0x46, 0x2C, 0x57, 0xD5, 0xDD, 0x51, 0x3E, 0x17, 0xA7, 0x1A, 0x27, 0x15, 0x05, 0x6B, 0xB1,
0x2F, 0x9E, 0x42, 0x6F, 0x93, 0xA6, 0xE2, 0xCB, 0xEF, 0xE6, 0x54, 0xC9, 0x19, 0x16, 0xD9, 0xF3,
0xB8, 0x68, 0x87, 0xF9, 0xAD, 0xCE, 0xF4, 0xE7, 0x60, 0xEA, 0x4C, 0x55, 0x72, 0xBA, 0xD9, 0x65,
0x4C, 0x37, 0xA5, 0x8B, 0x99, 0x1C, 0x50, 0xBF, 0x48, 0xC8, 0xBB, 0x75, 0xB6, 0xB7, 0xE5, 0x12,
0x26, 0x45, 0x38, 0x07, 0x55, 0x38, 0x07, 0xA4, 0xD1, 0x48, 0xC5, 0xB3, 0x54, 0xAE, 0xD9, 0x84,
0x8C, 0xDC, 0x2F, 0x1A, 0xBD, 0x1A, 0x1A, 0x85, 0xCC, 0x28, 0x55, 0x4E, 0x21, 0xC4, 0xB2, 0xD4,
0x97, 0x0B, 0x22, 0x72, 0x1F, 0x4B, 0x56, 0x10, 0x8E, 0xDF, 0x2F, 0xB7, 0x5D, 0xC2, 0xAC, 0xAF,
0xDA, 0x16, 0x98, 0xDC, 0x6E, 0xCE, 0x40, 0xBD, 0x53, 0x4E, 0x2F, 0x4A, 0x4F, 0xDF, 0x75, 0xAD,
0x19, 0xDA, 0x54, 0x18, 0xDB, 0x24, 0xEC, 0xFF, 0x95, 0x12, 0x0E, 0x2A, 0x4A, 0x18, 0xD9, 0x0A,
0xC3, 0xA6, 0x5C, 0xD3, 0xC6, 0x29, 0x65, 0x98, 0xC8, 0xEA, 0x33, 0x0C, 0x0D, 0x4C, 0x73, 0xF0,
0x16, 0x0C, 0x61, 0x26, 0x30, 0x60, 0x15, 0x2F, 0xCE, 0x60, 0x00, 0xF5, 0x76, 0x09, 0x2F, 0x31,
0x1D, 0x9D, 0xAB, 0x7A, 0x16, 0xE7, 0x60, 0xAB, 0x9C, 0x37, 0xA9, 0xD0, 0x74, 0xD9, 0x95, 0x9E,
0xBD, 0x42, 0x3C, 0xDF, 0xFE, 0xBF, 0x97, 0x5D, 0xCF, 0xF0, 0xBC, 0xC3, 0xB2, 0x3D, 0x27, 0xBD,
0xC5, 0xED, 0x8C, 0xDA, 0xA7, 0xDE, 0x02, 0xA8, 0xD5, 0xB9, 0xE7, 0xAD, 0x74, 0x61, 0x99, 0x53,
0xD9, 0xD8, 0xCF, 0xAB, 0x62, 0xB5, 0xCF, 0x52, 0x29, 0x9F, 0xB5, 0xCF, 0xF3, 0x4E, 0xF0, 0xF4,
0x15, 0x1F, 0x06, 0x6F, 0x2A, 0xCB, 0xE2, 0x55, 0x02, 0xB9, 0x6F, 0x82, 0x63, 0x5A, 0x5D, 0x6E,
0xB9, 0xEF, 0x0A, 0x52, 0x87, 0x86, 0x56, 0xD0, 0x2A, 0xAC, 0x6D, 0x05, 0x97, 0x0C, 0x5B, 0x59,
0x61, 0x08, 0x76, 0xBF, 0x42, 0x9D, 0x7D, 0x9B, 0x9D, 0x41, 0x2C, 0x61, 0x77, 0xBB, 0xD3, 0xAE,
0x95, 0xEE, 0xAA, 0x5D, 0x5C, 0x76, 0xDA, 0xA1, 0x13, 0x87, 0x79, 0x55, 0xA7, 0xAC, 0xA6, 0x05,
0xD3, 0x72, 0x21, 0x66, 0xDA, 0x88, 0x9D, 0xDB, 0xC8, 0x46, 0x7E, 0x25, 0xDB, 0x46, 0xB9, 0xA3,
0x20, 0x4C, 0xB6, 0xB7, 0xA2, 0x8D, 0x05, 0xF6, 0x48, 0x0E, 0x76, 0xA1, 0xA2, 0x77, 0xEE, 0x2E,
0xD9, 0x8C, 0xA5, 0xE2, 0xF2, 0xD4, 0x3E, 0xE3, 0xC7, 0xE6, 0x56, 0x2D, 0x6A, 0x85, 0xCC, 0xA4,
0x4C, 0xCB, 0x24, 0xA2, 0x20, 0x08, 0xD1, 0xB9, 0x62, 0x87, 0x2B, 0x22, 0xD0, 0x66, 0x25, 0x6B,
0x1B, 0x75, 0xE7, 0xDD, 0x1F, 0xA4, 0x3B, 0xD0, 0x6B, 0xD4, 0xDB, 0x76, 0x71, 0x6D, 0x6B, 0x7B,
0xB5, 0xB7, 0x83, 0xA9, 0x3B, 0xD0, 0x6E, 0x5A, 0x77, 0x55, 0xE0, 0x34, 0xB1, 0xA8, 0xA7, 0x0E,
0xE9, 0x22, 0x03, 0x39, 0xA7, 0xAC, 0x5C, 0x3B, 0x2D, 0xDA, 0x11, 0x0E, 0xE5, 0x84, 0x9C, 0x38,
0xAC, 0xA5, 0xDD, 0x29, 0x54, 0xC8, 0xAF, 0x09, 0x9B, 0xA7, 0xA0, 0xFC, 0x69, 0x61, 0x4C, 0xFF,
0x4F, 0xCC, 0xE5, 0x6E, 0xCD, 0x02, 0x93, 0x1E, 0x1C, 0x1F, 0x26, 0x43, 0x61, 0xE7, 0x1D, 0xA3,
0x1B, 0x9A, 0x2B, 0x48, 0x3C, 0xC2, 0x0F, 0x6B, 0x96, 0x26, 0xBD, 0x77, 0xBF, 0x44, 0xA1, 0x5D,
0x86, 0x3F, 0x46, 0x36, 0xD2, 0x9B, 0x2B, 0xAD, 0x41, 0xF5, 0xC4, 0xE2, 0x31, 0x94, 0x4B, 0x66,
0xDE, 0x7E, 0x7B, 0xBD, 0x58, 0x5D, 0xA8, 0xAF, 0x76, 0x6B, 0xA7, 0x0F, 0x4B, 0xF7, 0x13, 0x5D,
0x75, 0x03, 0xA4, 0xC3, 0x72, 0x35, 0x11, 0x7C, 0x13, 0x6B, 0xC2, 0xE3, 0x69, 0x2F, 0xB9, 0x3A,
0x81, 0xB3, 0x3A, 0x52, 0x17, 0x52, 0xFC, 0x66, 0x87, 0xF5, 0x67, 0xAC, 0xE5, 0xED, 0x05, 0xBD,
0x42, 0xFF, 0x9F, 0xE0, 0xE5, 0x27, 0x38, 0x06, 0x0F, 0x04, 0x1F, 0x86, 0x7C, 0x07, 0xE0, 0xF9,
0x05, 0xE0, 0xC9, 0x16, 0xC0, 0x33, 0x8B, 0x02, 0x78, 0xF2, 0x78, 0x45, 0x7E, 0x97, 0x23, 0x78,
0x67, 0x02, 0x2F, 0x3F, 0x3D, 0xF0, 0x4B, 0xD4, 0x4A, 0xB2, 0x45, 0xF0, 0xA0, 0x48, 0xF0, 0x80,
0x78, 0x43, 0xEE, 0x2D, 0x05, 0x3C, 0x72, 0x28, 0x82, 0x37, 0x91, 0x66, 0x8D, 0x9D, 0x78, 0x8D,
0x05, 0xF8, 0xC7, 0x3B, 0xF6, 0x1C, 0x78, 0xA9, 0xA8, 0xB4, 0x90, 0x7F, 0x99, 0x1F, 0x6F, 0xDE,
0xCC, 0xDE, 0xBB, 0x79, 0x63, 0xB6, 0x2F, 0xF9, 0xD1, 0xA6, 0xDF, 0x5C, 0x15, 0xE9, 0x05, 0xB3,
0xE4, 0xD6, 0x60, 0x85, 0xD9, 0x35, 0x52, 0x60, 0xC9, 0xAF, 0xA1, 0x51, 0xC9, 0xB0, 0xA1, 0xD2,
0x39, 0xC7, 0xFE, 0x2F, 0x4D, 0x90, 0x3B, 0x12, 0xC3, 0x20, 0x0C, 0x44, 0x65, 0x33, 0x93, 0x94,
0x1C, 0x21, 0x47, 0xA0, 0x49, 0x91, 0x0E, 0x4F, 0x4E, 0xC6, 0xC9, 0x12, 0x1F, 0x81, 0x2E, 0xAD,
0x8B, 0x1C, 0x20, 0x05, 0x85, 0x0B, 0xC3, 0x46, 0x1F, 0x98, 0x31, 0x0D, 0x3B, 0xD2, 0x43, 0x8B,
0x96, 0xE8, 0x74, 0x1E, 0x43, 0xB4, 0x7E, 0x3B, 0x24, 0x13, 0x1E, 0x9B, 0x89, 0x88, 0xDD, 0x44,
0x99, 0x0D, 0x72, 0x2B, 0x05, 0x85, 0xFC, 0x4A, 0x57, 0x85, 0xE2, 0x4A, 0x93, 0x42, 0xF8, 0x34,
0x7A, 0xE9, 0x14, 0x20, 0xC7, 0x24, 0x53, 0x80, 0x5F, 0xDC, 0x64, 0x0A, 0x50, 0x02, 0x43, 0x7C,
0x63, 0x0F, 0x4D, 0x11, 0xAE, 0x20, 0x09, 0x82, 0x1C, 0xB0, 0x09, 0xF2, 0x15, 0x3B, 0x16, 0x95,
0xE8, 0x8D, 0xC2, 0xAD, 0x42, 0x33, 0x77, 0x9D, 0x88, 0x00, 0x2C, 0xFC, 0x7C, 0xBF, 0x68, 0x9B,
0xB9, 0x9B, 0x54, 0xD9, 0xE2, 0x60, 0x91, 0xC5, 0xF4, 0xF0, 0x82, 0x98, 0x47, 0xB5, 0xBF, 0x2B,
0x22, 0xD0, 0x53, 0x10, 0x86, 0xDA, 0xA4, 0x08, 0x6F, 0x3C, 0xD5, 0xBE, 0xA0, 0x2B, 0x63, 0xE5,
0x3C, 0x42, 0x58, 0x7A, 0x1C, 0x75, 0xE4, 0x73, 0x3F, 0xA7, 0x46, 0x7F,
};
static const EpdGlyph bookerly_18_italicGlyphs[] = {
{ 0, 0, 0, 0, 0, 0, 0 }, //
{ 0, 0, 0, 0, 0, 0, 0 }, // 
{ 0, 0, 8, 0, 0, 0, 0 }, //
{ 0, 0, 8, 0, 0, 0, 0 }, //
{ 0, 0, 0, 0, 0, 0, 0 }, // 
{ 0, 0, 8, 0, 0, 0, 0 }, //
fix: force auto-hinting for Bookerly to fix inconsistent stem widths (#1098) ## Summary Bookerly's native TrueType hinting is effectively a no-op at the sizes used here, causing FreeType to place stems at inconsistent sub-pixel positions. This results in the 'k' stem (8-bit fringe: 0x38=56) falling just below the 2-bit quantization threshold while 'l' and 'h' stems (fringes: 0x4C=76, 0x40=64) land above it --- making 'k' visibly narrower (2.00px vs 2.33px effective width). FreeType's auto-hinter snaps all stems to consistent grid positions, normalizing effective stem width to 2.67px across all glyphs. Adds --force-autohint flag to fontconvert.py and applies it to Bookerly only. NotoSans, OpenDyslexic, and Ubuntu fonts are unaffected. Here is an example of before/after. Take notice of the vertical stems on characters like `l`, `k`, `n`, `i`, etc. The font is Bookerly 12pt regular: **BEFORE**: ![before](https://github.com/user-attachments/assets/65b2acab-ad95-489e-885e-e3a0163cc252) **AFTER**: ![after](https://github.com/user-attachments/assets/d09a8b5d-40af-4a7d-b622-e1b2cabcce85) Claude generated this script to quantitatively determine that this change makes the vertical stems on a variety of characters more consistent for Bookerly _only_. <details> <summary>Python script</summary> ```python #!/usr/bin/env python3 """Compare stem consistency across all font families with and without auto-hinting. Run from repo root: python3 compare_all_fonts.py """ import freetype DPI = 150 CHARS = ["k", "l", "h", "i", "b", "d"] SIZES = [12, 14, 16, 18] FONTS = { "Bookerly": "lib/EpdFont/builtinFonts/source/Bookerly/Bookerly-Regular.ttf", "NotoSans": "lib/EpdFont/builtinFonts/source/NotoSans/NotoSans-Regular.ttf", "OpenDyslexic": "lib/EpdFont/builtinFonts/source/OpenDyslexic/OpenDyslexic-Regular.otf", "Ubuntu": "lib/EpdFont/builtinFonts/source/Ubuntu/Ubuntu-Regular.ttf", } MODES = { "default": freetype.FT_LOAD_RENDER, "autohint": freetype.FT_LOAD_RENDER | freetype.FT_LOAD_FORCE_AUTOHINT, } def q4to2(v): if v >= 12: return 3 elif v >= 8: return 2 elif v >= 4: return 1 else: return 0 def get_stem_eff(face, char, flags): gi = face.get_char_index(ord(char)) if gi == 0: return None face.load_glyph(gi, flags) bm = face.glyph.bitmap w, h = bm.width, bm.rows if w == 0 or h == 0: return None p2 = [] for y in range(h): row = [] for x in range(w): row.append(q4to2(bm.buffer[y * bm.pitch + x] >> 4)) p2.append(row) # Measure leftmost stem in stable middle rows mid_start, mid_end = h // 4, h - h // 4 widths = [] for y in range(mid_start, mid_end): first = next((x for x in range(w) if p2[y][x] > 0), -1) if first < 0: continue last = first for x in range(first, w): if p2[y][x] > 0: last = x else: break eff = sum(p2[y][x] for x in range(first, last + 1)) / 3.0 widths.append(eff) return round(sum(widths) / len(widths), 2) if widths else None def main(): for font_name, font_path in FONTS.items(): try: freetype.Face(font_path) except Exception: print(f"\n {font_name}: SKIPPED (file not found)") continue print(f"\n{'=' * 80}") print(f" {font_name}") print(f"{'=' * 80}") for size in SIZES: print(f"\n {size}pt:") print(f" {'':6s}", end="") for c in CHARS: print(f" '{c}' ", end="") print(" | spread") for mode_name, flags in MODES.items(): face = freetype.Face(font_path) face.set_char_size(size << 6, size << 6, DPI, DPI) vals = [] print(f" {mode_name:6s}", end="") for c in CHARS: v = get_stem_eff(face, c, flags) vals.append(v) print(f" {v:5.2f}" if v else " N/A", end="") valid = [v for v in vals if v is not None] spread = max(valid) - min(valid) if len(valid) >= 2 else 0 marker = " <-- inconsistent" if spread > 0.5 else "" print(f" | {spread:.2f}{marker}") if __name__ == "__main__": main() ``` </details> Here are the results. The table compares how the font-generation `autohint` flag affects the range of widths of various characters. Lower `spread` mean that glyph stroke widths should appear more consistent. ``` Spread = max stem width - min stem width across glyphs (lower = more consistent): ┌──────────────┬──────┬─────────┬──────────┬──────────┐ │ Font │ Size │ Default │ Autohint │ Winner │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ Bookerly │ 12pt │ 1.49 │ 1.12 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 1.39 │ 1.13 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 1.38 │ 1.16 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.90 │ 1.58 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ NotoSans │ 12pt │ 1.16 │ 0.94 │ mixed │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 0.83 │ 1.14 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 1.41 │ 1.51 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.74 │ 1.63 │ mixed │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ OpenDyslexic │ 12pt │ 2.22 │ 1.44 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 2.57 │ 3.29 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 3.13 │ 2.60 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 3.21 │ 3.23 │ ~tied │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ Ubuntu │ 12pt │ 1.25 │ 1.31 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 1.41 │ 1.64 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 2.21 │ 1.71 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.80 │ 1.71 │ autohint │ └──────────────┴──────┴─────────┴──────────┴──────────┘ ``` --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? I used AI to make sure I'm not doing something stupid, since I'm not a typography expert. I made the changes though.
2026-02-24 06:13:08 +11:00
{ 10, 29, 11, 2, 29, 73, 0 }, // !
{ 12, 12, 14, 2, 27, 36, 73 }, // "
{ 23, 23, 23, 0, 21, 133, 109 }, // #
{ 21, 39, 23, 1, 31, 205, 242 }, // $
{ 32, 31, 36, 2, 29, 248, 447 }, // %
{ 30, 30, 34, 2, 28, 225, 695 }, // &
{ 6, 12, 8, 2, 27, 18, 920 }, // '
{ 17, 39, 15, 1, 31, 166, 938 }, // (
{ 16, 39, 15, -3, 31, 156, 1104 }, // )
{ 13, 12, 14, 2, 27, 39, 1260 }, // *
{ 17, 16, 23, 3, 21, 68, 1299 }, // +
{ 9, 11, 11, -1, 5, 25, 1367 }, // ,
{ 12, 3, 14, 1, 11, 9, 1392 }, // -
{ 6, 5, 11, 2, 5, 8, 1401 }, // .
{ 21, 30, 19, -1, 28, 158, 1409 }, // /
{ 22, 27, 23, 1, 27, 149, 1567 }, // 0
{ 14, 27, 23, 3, 27, 95, 1716 }, // 1
{ 21, 27, 23, 0, 27, 142, 1811 }, // 2
{ 21, 27, 23, 0, 27, 142, 1953 }, // 3
{ 22, 27, 23, 0, 27, 149, 2095 }, // 4
{ 21, 27, 23, 1, 27, 142, 2244 }, // 5
{ 21, 27, 23, 2, 27, 142, 2386 }, // 6
{ 19, 27, 23, 5, 27, 129, 2528 }, // 7
{ 21, 27, 23, 1, 27, 142, 2657 }, // 8
{ 22, 27, 23, 0, 27, 149, 2799 }, // 9
{ 9, 20, 11, 2, 20, 45, 2948 }, // :
{ 12, 25, 11, -1, 19, 75, 2993 }, // ;
{ 17, 18, 23, 3, 22, 77, 3068 }, // <
{ 17, 10, 23, 3, 18, 43, 3145 }, // =
{ 17, 18, 23, 3, 22, 77, 3188 }, // >
{ 12, 27, 16, 3, 27, 81, 3265 }, // ?
{ 33, 33, 36, 2, 27, 273, 3346 }, // @
{ 28, 27, 27, -2, 27, 189, 3619 }, // A
{ 23, 27, 23, -1, 27, 156, 3808 }, // B
{ 23, 27, 24, 1, 27, 156, 3964 }, // C
{ 27, 27, 27, -1, 27, 183, 4120 }, // D
{ 24, 27, 23, -1, 27, 162, 4303 }, // E
{ 23, 27, 21, -1, 27, 156, 4465 }, // F
{ 24, 27, 27, 1, 27, 162, 4621 }, // G
{ 32, 27, 30, -1, 27, 216, 4783 }, // H
{ 16, 27, 14, -1, 27, 108, 4999 }, // I
{ 23, 34, 13, -7, 27, 196, 5107 }, // J
{ 29, 27, 26, -1, 27, 196, 5303 }, // K
{ 22, 27, 22, -1, 27, 149, 5499 }, // L
{ 36, 27, 34, -2, 27, 243, 5648 }, // M
{ 31, 28, 29, -1, 27, 217, 5891 }, // N
{ 26, 27, 28, 1, 27, 176, 6108 }, // O
{ 23, 27, 22, -1, 27, 156, 6284 }, // P
{ 31, 36, 28, 1, 27, 279, 6440 }, // Q
{ 25, 27, 24, -1, 27, 169, 6719 }, // R
{ 19, 27, 20, 0, 27, 129, 6888 }, // S
{ 22, 27, 24, 3, 27, 149, 7017 }, // T
{ 27, 27, 29, 3, 27, 183, 7166 }, // U
{ 27, 27, 27, 2, 27, 183, 7349 }, // V
{ 38, 27, 39, 3, 27, 257, 7532 }, // W
{ 30, 27, 25, -3, 27, 203, 7789 }, // X
{ 25, 27, 24, 2, 27, 169, 7992 }, // Y
{ 23, 28, 22, -1, 27, 161, 8161 }, // Z
{ 15, 37, 12, -2, 30, 139, 8322 }, // [
{ 15, 30, 19, 2, 28, 113, 8461 }, // <backslash>
{ 16, 37, 12, -2, 30, 148, 8574 }, // ]
{ 18, 17, 23, 3, 24, 77, 8722 }, // ^
{ 19, 3, 19, 0, -2, 15, 8799 }, // _
{ 7, 9, 23, 8, 31, 16, 8814 }, // `
{ 20, 20, 22, 1, 20, 100, 8830 }, // a
{ 20, 30, 21, 0, 30, 150, 8930 }, // b
{ 15, 20, 17, 1, 20, 75, 9080 }, // c
{ 21, 30, 22, 1, 30, 158, 9155 }, // d
{ 16, 20, 18, 1, 20, 80, 9313 }, // e
{ 27, 39, 15, -7, 30, 264, 9393 }, // f
{ 25, 29, 19, -4, 20, 182, 9657 }, // g
{ 21, 30, 22, 1, 30, 158, 9839 }, // h
{ 10, 30, 12, 2, 30, 75, 9997 }, // i
{ 19, 39, 11, -7, 30, 186, 10072 }, // j
{ 19, 30, 20, 1, 30, 143, 10258 }, // k
{ 10, 30, 12, 1, 30, 75, 10401 }, // l
{ 32, 20, 33, 1, 20, 160, 10476 }, // m
{ 21, 20, 23, 1, 20, 105, 10636 }, // n
{ 18, 20, 20, 1, 20, 90, 10741 }, // o
{ 23, 29, 21, -3, 20, 167, 10831 }, // p
{ 20, 29, 21, 1, 20, 145, 10998 }, // q
{ 16, 20, 16, 1, 20, 80, 11143 }, // r
{ 15, 20, 15, 0, 20, 75, 11223 }, // s
{ 14, 26, 15, 1, 26, 91, 11298 }, // t
{ 21, 20, 23, 1, 20, 105, 11389 }, // u
{ 19, 21, 19, 0, 20, 100, 11494 }, // v
{ 29, 21, 29, 0, 20, 153, 11594 }, // w
{ 23, 20, 21, -1, 20, 115, 11747 }, // x
{ 24, 29, 20, -4, 20, 174, 11862 }, // y
{ 18, 20, 18, 0, 20, 90, 12036 }, // z
{ 14, 37, 15, 2, 31, 130, 12126 }, // {
{ 11, 34, 11, 0, 30, 94, 12256 }, // |
{ 15, 37, 15, -2, 31, 139, 12350 }, // }
{ 18, 6, 23, 3, 16, 27, 12489 }, // ~
perf: Reduce overall flash usage by 30.7% by compressing built-in fonts (#831) ## Summary **What is the goal of this PR?** Compress reader font bitmaps to reduce flash usage by 30.7%. **What changes are included?** - New `EpdFontGroup` struct and extended `EpdFontData` with `groups`/`groupCount` fields - `--compress` flag in `fontconvert.py`: groups glyphs (ASCII base group + groups of 8) and compresses each with raw DEFLATE - `FontDecompressor` class with 4-slot LRU cache for on-demand decompression during rendering - `GfxRenderer` transparently routes bitmap access through `getGlyphBitmap()` (compressed or direct flash) - Uses `uzlib` for decompression with minimal heap overhead. - 48 reader fonts (Bookerly, NotoSans 12-18pt, OpenDyslexic) regenerated with compression; 5 UI fonts unchanged - Round-trip verification script (`verify_compression.py`) runs as part of font generation ## Additional Context ## Flash & RAM | | baseline | font-compression | Difference | |--|--------|-----------------|------------| | Flash (ELF) | 6,302,476 B (96.2%) | 4,365,022 B (66.6%) | -1,937,454 B (-30.7%) | | firmware.bin | 6,468,192 B | 4,531,008 B | -1,937,184 B (-29.9%) | | RAM | 101,700 B (31.0%) | 103,076 B (31.5%) | +1,376 B (+0.5%) | ## Script-Based Grouping (Cold Cache) Comparison of uncompressed baseline vs script-based group compression (4-slot LRU cache, cleared each page). Glyphs are grouped by Unicode block (ASCII, Latin-1, Latin Extended-A, Combining Marks, Cyrillic, General Punctuation, etc.) instead of sequential groups of 8. ### Render Time | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Median** | 414.9 ms | 431.6 ms | +16.7 ms (+4.0%) | | **Pages** | 37 | 37 | | ### Memory Usage | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Heap free (median)** | 187.0 KB | 176.3 KB | -10.7 KB | | **Heap free (min)** | 186.0 KB | 166.5 KB | -19.5 KB | | **Largest block (median)** | 148.0 KB | 128.0 KB | -20.0 KB | | **Largest block (min)** | 148.0 KB | 120.0 KB | -28.0 KB | ### Cache Effectiveness | | Misses/page | Hit rate | |---|---|---| | **Compressed (cold cache)** | 2.1 | 99.85% | ------ ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**YES**_ Implementation was done by Claude Code (Opus 4.6) based on a plan developed collaboratively. All generated font headers were verified with an automated round-trip decompression test. The firmware was compiled successfully but has not yet been tested on-device. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 20:30:15 +11:00
{ 0, 0, 8, 0, 0, 0, 0 }, //  
fix: force auto-hinting for Bookerly to fix inconsistent stem widths (#1098) ## Summary Bookerly's native TrueType hinting is effectively a no-op at the sizes used here, causing FreeType to place stems at inconsistent sub-pixel positions. This results in the 'k' stem (8-bit fringe: 0x38=56) falling just below the 2-bit quantization threshold while 'l' and 'h' stems (fringes: 0x4C=76, 0x40=64) land above it --- making 'k' visibly narrower (2.00px vs 2.33px effective width). FreeType's auto-hinter snaps all stems to consistent grid positions, normalizing effective stem width to 2.67px across all glyphs. Adds --force-autohint flag to fontconvert.py and applies it to Bookerly only. NotoSans, OpenDyslexic, and Ubuntu fonts are unaffected. Here is an example of before/after. Take notice of the vertical stems on characters like `l`, `k`, `n`, `i`, etc. The font is Bookerly 12pt regular: **BEFORE**: ![before](https://github.com/user-attachments/assets/65b2acab-ad95-489e-885e-e3a0163cc252) **AFTER**: ![after](https://github.com/user-attachments/assets/d09a8b5d-40af-4a7d-b622-e1b2cabcce85) Claude generated this script to quantitatively determine that this change makes the vertical stems on a variety of characters more consistent for Bookerly _only_. <details> <summary>Python script</summary> ```python #!/usr/bin/env python3 """Compare stem consistency across all font families with and without auto-hinting. Run from repo root: python3 compare_all_fonts.py """ import freetype DPI = 150 CHARS = ["k", "l", "h", "i", "b", "d"] SIZES = [12, 14, 16, 18] FONTS = { "Bookerly": "lib/EpdFont/builtinFonts/source/Bookerly/Bookerly-Regular.ttf", "NotoSans": "lib/EpdFont/builtinFonts/source/NotoSans/NotoSans-Regular.ttf", "OpenDyslexic": "lib/EpdFont/builtinFonts/source/OpenDyslexic/OpenDyslexic-Regular.otf", "Ubuntu": "lib/EpdFont/builtinFonts/source/Ubuntu/Ubuntu-Regular.ttf", } MODES = { "default": freetype.FT_LOAD_RENDER, "autohint": freetype.FT_LOAD_RENDER | freetype.FT_LOAD_FORCE_AUTOHINT, } def q4to2(v): if v >= 12: return 3 elif v >= 8: return 2 elif v >= 4: return 1 else: return 0 def get_stem_eff(face, char, flags): gi = face.get_char_index(ord(char)) if gi == 0: return None face.load_glyph(gi, flags) bm = face.glyph.bitmap w, h = bm.width, bm.rows if w == 0 or h == 0: return None p2 = [] for y in range(h): row = [] for x in range(w): row.append(q4to2(bm.buffer[y * bm.pitch + x] >> 4)) p2.append(row) # Measure leftmost stem in stable middle rows mid_start, mid_end = h // 4, h - h // 4 widths = [] for y in range(mid_start, mid_end): first = next((x for x in range(w) if p2[y][x] > 0), -1) if first < 0: continue last = first for x in range(first, w): if p2[y][x] > 0: last = x else: break eff = sum(p2[y][x] for x in range(first, last + 1)) / 3.0 widths.append(eff) return round(sum(widths) / len(widths), 2) if widths else None def main(): for font_name, font_path in FONTS.items(): try: freetype.Face(font_path) except Exception: print(f"\n {font_name}: SKIPPED (file not found)") continue print(f"\n{'=' * 80}") print(f" {font_name}") print(f"{'=' * 80}") for size in SIZES: print(f"\n {size}pt:") print(f" {'':6s}", end="") for c in CHARS: print(f" '{c}' ", end="") print(" | spread") for mode_name, flags in MODES.items(): face = freetype.Face(font_path) face.set_char_size(size << 6, size << 6, DPI, DPI) vals = [] print(f" {mode_name:6s}", end="") for c in CHARS: v = get_stem_eff(face, c, flags) vals.append(v) print(f" {v:5.2f}" if v else " N/A", end="") valid = [v for v in vals if v is not None] spread = max(valid) - min(valid) if len(valid) >= 2 else 0 marker = " <-- inconsistent" if spread > 0.5 else "" print(f" | {spread:.2f}{marker}") if __name__ == "__main__": main() ``` </details> Here are the results. The table compares how the font-generation `autohint` flag affects the range of widths of various characters. Lower `spread` mean that glyph stroke widths should appear more consistent. ``` Spread = max stem width - min stem width across glyphs (lower = more consistent): ┌──────────────┬──────┬─────────┬──────────┬──────────┐ │ Font │ Size │ Default │ Autohint │ Winner │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ Bookerly │ 12pt │ 1.49 │ 1.12 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 1.39 │ 1.13 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 1.38 │ 1.16 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.90 │ 1.58 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ NotoSans │ 12pt │ 1.16 │ 0.94 │ mixed │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 0.83 │ 1.14 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 1.41 │ 1.51 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.74 │ 1.63 │ mixed │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ OpenDyslexic │ 12pt │ 2.22 │ 1.44 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 2.57 │ 3.29 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 3.13 │ 2.60 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 3.21 │ 3.23 │ ~tied │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ Ubuntu │ 12pt │ 1.25 │ 1.31 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 1.41 │ 1.64 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 2.21 │ 1.71 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.80 │ 1.71 │ autohint │ └──────────────┴──────┴─────────┴──────────┴──────────┘ ``` --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? I used AI to make sure I'm not doing something stupid, since I'm not a typography expert. I made the changes though.
2026-02-24 06:13:08 +11:00
{ 11, 29, 11, -1, 20, 80, 0 }, // ¡
{ 18, 38, 23, 3, 30, 171, 80 }, // ¢
{ 24, 27, 23, -1, 27, 162, 251 }, // £
{ 23, 19, 23, 0, 22, 110, 413 }, // ¤
{ 25, 27, 23, 1, 27, 169, 523 }, // ¥
{ 11, 34, 11, 0, 30, 94, 692 }, // ¦
{ 17, 30, 19, 0, 27, 128, 786 }, // §
{ 13, 5, 23, 5, 29, 17, 914 }, // ¨
{ 28, 28, 29, 1, 27, 196, 931 }, // ©
{ 15, 18, 16, 1, 27, 68, 1127 }, // ª
{ 18, 14, 19, 1, 17, 63, 1195 }, // «
{ 17, 9, 23, 3, 18, 39, 1258 }, // ¬
{ 12, 3, 14, 1, 11, 9, 1297 }, // ­
{ 20, 20, 22, 1, 30, 100, 1306 }, // ®
{ 13, 3, 23, 5, 27, 10, 1406 }, // ¯
{ 13, 12, 20, 3, 26, 39, 1416 }, // °
{ 17, 22, 23, 3, 22, 94, 1455 }, // ±
{ 14, 16, 17, 1, 30, 56, 1549 }, // ²
{ 13, 16, 17, 1, 30, 52, 1605 }, // ³
{ 8, 10, 23, 8, 32, 20, 1657 }, // ´
{ 24, 29, 22, -1, 20, 174, 1677 }, // µ
{ 24, 32, 22, -1, 27, 192, 1851 }, // ¶
{ 6, 5, 11, 3, 13, 8, 2043 }, // ·
{ 9, 9, 23, 7, -1, 21, 2051 }, // ¸
{ 10, 18, 17, 3, 32, 45, 2072 }, // ¹
{ 14, 18, 17, 2, 27, 63, 2117 }, // º
{ 18, 14, 19, 0, 17, 63, 2180 }, // »
{ 36, 30, 40, 3, 28, 270, 2243 }, // ¼
{ 36, 30, 40, 3, 28, 270, 2513 }, // ½
{ 38, 30, 40, 1, 28, 285, 2783 }, // ¾
{ 13, 28, 16, 0, 20, 91, 3068 }, // ¿
{ 28, 37, 27, -2, 37, 259, 3159 }, // À
{ 28, 37, 27, -2, 37, 259, 3418 }, // Á
{ 28, 37, 27, -2, 37, 259, 3677 }, // Â
{ 28, 36, 27, -2, 36, 252, 3936 }, // Ã
{ 28, 35, 27, -2, 35, 245, 4188 }, // Ä
{ 28, 38, 27, -2, 38, 266, 4433 }, // Å
{ 37, 27, 34, -3, 27, 250, 4699 }, // Æ
{ 23, 37, 24, 1, 27, 213, 4949 }, // Ç
{ 24, 37, 23, -1, 37, 222, 5162 }, // È
{ 24, 38, 23, -1, 38, 228, 5384 }, // É
{ 24, 37, 23, -1, 37, 222, 5612 }, // Ê
{ 24, 35, 23, -1, 35, 210, 5834 }, // Ë
{ 16, 37, 14, -1, 37, 148, 6044 }, // Ì
{ 18, 38, 14, -1, 38, 171, 6192 }, // Í
{ 18, 37, 14, -1, 37, 167, 6363 }, // Î
{ 19, 35, 14, -1, 35, 167, 6530 }, // Ï
{ 27, 27, 27, -1, 27, 183, 6697 }, // Ð
{ 31, 37, 29, -1, 36, 287, 6880 }, // Ñ
{ 26, 37, 28, 1, 37, 241, 7167 }, // Ò
{ 26, 37, 28, 1, 37, 241, 7408 }, // Ó
{ 26, 37, 28, 1, 37, 241, 7649 }, // Ô
{ 26, 36, 28, 1, 36, 234, 7890 }, // Õ
{ 26, 35, 28, 1, 35, 228, 8124 }, // Ö
{ 15, 16, 23, 4, 21, 60, 8352 }, // ×
{ 29, 29, 28, -1, 28, 211, 8412 }, // Ø
{ 27, 37, 29, 3, 37, 250, 8623 }, // Ù
{ 27, 38, 29, 3, 38, 257, 8873 }, // Ú
{ 27, 37, 29, 3, 37, 250, 9130 }, // Û
{ 27, 35, 29, 3, 35, 237, 9380 }, // Ü
{ 25, 38, 24, 2, 38, 238, 9617 }, // Ý
{ 22, 27, 22, -1, 27, 149, 9855 }, // Þ
{ 29, 39, 24, -6, 30, 283, 10004 }, // ß
{ 20, 31, 22, 1, 31, 155, 10287 }, // à
{ 20, 32, 22, 1, 32, 160, 10442 }, // á
{ 20, 32, 22, 1, 32, 160, 10602 }, // â
{ 20, 30, 22, 1, 30, 150, 10762 }, // ã
{ 20, 29, 22, 1, 29, 145, 10912 }, // ä
{ 20, 32, 22, 1, 32, 160, 11057 }, // å
{ 27, 20, 29, 1, 20, 135, 11217 }, // æ
{ 15, 30, 17, 1, 20, 113, 11352 }, // ç
{ 16, 31, 18, 1, 31, 124, 11465 }, // è
{ 17, 32, 18, 1, 32, 136, 11589 }, // é
{ 17, 32, 18, 1, 32, 136, 11725 }, // ê
{ 18, 29, 18, 1, 29, 131, 11861 }, // ë
{ 10, 32, 12, 2, 32, 80, 11992 }, // ì
{ 13, 32, 12, 2, 32, 104, 12072 }, // í
{ 13, 32, 12, 2, 32, 104, 12176 }, // î
{ 14, 29, 12, 2, 29, 102, 12280 }, // ï
{ 18, 31, 20, 1, 31, 140, 12382 }, // ð
{ 21, 30, 23, 1, 30, 158, 12522 }, // ñ
{ 18, 31, 20, 1, 31, 140, 12680 }, // ò
{ 18, 32, 20, 1, 32, 144, 12820 }, // ó
{ 18, 32, 20, 1, 32, 144, 12964 }, // ô
{ 19, 30, 20, 1, 30, 143, 13108 }, // õ
{ 19, 29, 20, 1, 29, 138, 13251 }, // ö
{ 17, 17, 23, 3, 21, 73, 13389 }, // ÷
{ 24, 22, 20, -2, 21, 132, 13462 }, // ø
{ 21, 32, 23, 1, 32, 168, 13594 }, // ù
{ 21, 32, 23, 1, 32, 168, 13762 }, // ú
{ 21, 32, 23, 1, 32, 168, 13930 }, // û
{ 21, 29, 23, 1, 29, 153, 14098 }, // ü
{ 24, 41, 20, -4, 32, 246, 14251 }, // ý
{ 23, 39, 21, -3, 30, 225, 14497 }, // þ
{ 24, 38, 20, -4, 29, 228, 14722 }, // ÿ
{ 28, 34, 27, -2, 34, 238, 0 }, // Ā
{ 20, 28, 22, 1, 28, 140, 238 }, // ā
{ 28, 37, 27, -2, 37, 259, 378 }, // Ă
{ 20, 31, 22, 1, 31, 155, 637 }, // ă
{ 28, 35, 27, -2, 27, 245, 792 }, // Ą
{ 20, 28, 22, 1, 20, 140, 1037 }, // ą
{ 23, 37, 24, 1, 37, 213, 1177 }, // Ć
{ 17, 32, 17, 1, 32, 136, 1390 }, // ć
{ 23, 37, 24, 1, 37, 213, 1526 }, // Ĉ
{ 17, 32, 17, 1, 32, 136, 1739 }, // ĉ
{ 23, 36, 24, 1, 36, 207, 1875 }, // Ċ
{ 15, 29, 17, 1, 29, 109, 2082 }, // ċ
{ 24, 38, 24, 1, 38, 228, 2191 }, // Č
{ 18, 32, 17, 1, 32, 144, 2419 }, // č
{ 27, 38, 27, -1, 38, 257, 2563 }, // Ď
{ 27, 34, 23, 1, 34, 230, 2820 }, // ď
{ 27, 27, 27, -1, 27, 183, 3050 }, // Đ
{ 23, 30, 22, 1, 30, 173, 3233 }, // đ
{ 24, 34, 23, -1, 34, 204, 3406 }, // Ē
{ 18, 28, 18, 1, 28, 126, 3610 }, // ē
{ 24, 37, 23, -1, 37, 222, 3736 }, // Ĕ
{ 18, 31, 18, 1, 31, 140, 3958 }, // ĕ
{ 24, 36, 23, -1, 36, 216, 4098 }, // Ė
{ 16, 29, 18, 1, 29, 116, 4314 }, // ė
{ 24, 35, 23, -1, 27, 210, 4430 }, // Ę
{ 16, 28, 18, 1, 20, 112, 4640 }, // ę
{ 24, 38, 23, -1, 38, 228, 4752 }, // Ě
{ 18, 32, 18, 1, 32, 144, 4980 }, // ě
{ 24, 37, 27, 2, 37, 222, 5124 }, // Ĝ
{ 25, 40, 19, -4, 31, 250, 5346 }, // ĝ
{ 24, 37, 27, 2, 37, 222, 5596 }, // Ğ
{ 25, 40, 19, -4, 31, 250, 5818 }, // ğ
{ 24, 36, 27, 2, 36, 216, 6068 }, // Ġ
{ 25, 38, 19, -4, 29, 238, 6284 }, // ġ
{ 24, 37, 27, 2, 27, 222, 6522 }, // Ģ
{ 25, 41, 19, -4, 32, 257, 6744 }, // ģ
{ 32, 37, 30, -1, 37, 296, 7001 }, // Ĥ
{ 21, 40, 22, 1, 40, 210, 7297 }, // ĥ
{ 32, 27, 30, -1, 27, 216, 7507 }, // Ħ
{ 21, 30, 22, 1, 30, 158, 7723 }, // ħ
{ 18, 36, 14, -1, 36, 162, 7881 }, // Ĩ
{ 14, 30, 12, 2, 30, 105, 8043 }, // ĩ
{ 18, 34, 14, -1, 34, 153, 8148 }, // Ī
{ 14, 28, 12, 2, 28, 98, 8301 }, // ī
{ 18, 37, 14, -1, 37, 167, 8399 }, // Ĭ
{ 14, 31, 12, 2, 31, 109, 8566 }, // ĭ
{ 16, 35, 14, -1, 27, 140, 8675 }, // Į
{ 11, 38, 12, 1, 30, 105, 8815 }, // į
{ 16, 36, 14, -1, 36, 144, 8920 }, // İ
{ 9, 20, 12, 2, 20, 45, 9064 }, // ı
{ 31, 34, 27, -1, 27, 264, 9109 }, // IJ
{ 22, 39, 23, 2, 30, 215, 9373 }, // ij
{ 25, 44, 13, -7, 37, 275, 9588 }, // Ĵ
{ 22, 40, 11, -7, 31, 220, 9863 }, // ĵ
{ 29, 37, 26, -1, 27, 269, 10083 }, // Ķ
{ 19, 40, 20, 1, 30, 190, 10352 }, // ķ
{ 19, 20, 20, 1, 20, 95, 10542 }, // ĸ
{ 22, 38, 22, -1, 38, 209, 10637 }, // Ĺ
{ 14, 40, 12, 1, 40, 140, 10846 }, // ĺ
{ 22, 37, 22, -1, 27, 204, 10986 }, // Ļ
{ 12, 40, 12, -1, 30, 120, 11190 }, // ļ
{ 23, 30, 22, -1, 30, 173, 11310 }, // Ľ
{ 17, 34, 13, 1, 34, 145, 11483 }, // ľ
{ 23, 27, 22, -1, 27, 156, 11628 }, // Ŀ
{ 16, 30, 15, 1, 30, 120, 11784 }, // ŀ
{ 22, 27, 22, -1, 27, 149, 11904 }, // Ł
{ 14, 30, 12, -1, 30, 105, 12053 }, // ł
{ 31, 39, 29, -1, 38, 303, 12158 }, // Ń
{ 21, 32, 23, 1, 32, 168, 12461 }, // ń
{ 31, 37, 29, -1, 27, 287, 12629 }, // Ņ
{ 21, 30, 23, 1, 20, 158, 12916 }, // ņ
{ 31, 39, 29, -1, 38, 303, 13074 }, // Ň
{ 21, 32, 23, 1, 32, 168, 13377 }, // ň
{ 28, 29, 31, 2, 29, 203, 13545 }, // ʼn
{ 31, 34, 29, -1, 27, 264, 13748 }, // Ŋ
{ 19, 29, 22, 1, 20, 138, 14012 }, // ŋ
{ 26, 34, 28, 1, 34, 221, 14150 }, // Ō
{ 19, 28, 20, 1, 28, 133, 14371 }, // ō
{ 26, 37, 28, 1, 37, 241, 14504 }, // Ŏ
{ 19, 31, 20, 1, 31, 148, 14745 }, // ŏ
{ 27, 38, 28, 1, 38, 257, 14893 }, // Ő
{ 21, 32, 20, 1, 32, 168, 15150 }, // ő
{ 35, 27, 36, 1, 27, 237, 15318 }, // Œ
{ 29, 20, 31, 1, 20, 145, 15555 }, // œ
{ 25, 37, 24, -1, 37, 232, 15700 }, // Ŕ
{ 16, 32, 16, 1, 32, 128, 15932 }, // ŕ
{ 25, 37, 24, -1, 27, 232, 16060 }, // Ŗ
{ 18, 30, 16, -1, 20, 135, 16292 }, // ŗ
{ 25, 38, 24, -1, 38, 238, 16427 }, // Ř
{ 18, 31, 16, 1, 31, 140, 16665 }, // ř
{ 19, 37, 20, 0, 37, 176, 16805 }, // Ś
{ 16, 32, 15, 0, 32, 128, 16981 }, // ś
{ 20, 37, 20, 0, 37, 185, 17109 }, // Ŝ
{ 17, 32, 15, 0, 32, 136, 17294 }, // ŝ
{ 19, 37, 20, 0, 27, 176, 17430 }, // Ş
{ 15, 30, 15, 0, 20, 113, 17606 }, // ş
{ 21, 38, 20, 0, 38, 200, 17719 }, // Š
{ 18, 32, 15, 0, 32, 144, 17919 }, // š
{ 22, 37, 24, 3, 27, 204, 18063 }, // Ţ
{ 15, 36, 15, 0, 26, 135, 18267 }, // ţ
{ 22, 38, 24, 3, 38, 209, 18402 }, // Ť
{ 16, 31, 15, 1, 31, 124, 18611 }, // ť
{ 22, 27, 24, 3, 27, 149, 18735 }, // Ŧ
{ 15, 26, 15, 0, 26, 98, 18884 }, // ŧ
{ 27, 36, 29, 3, 36, 243, 18982 }, // Ũ
{ 21, 30, 23, 1, 30, 158, 19225 }, // ũ
{ 27, 34, 29, 3, 34, 230, 19383 }, // Ū
{ 21, 28, 23, 1, 28, 147, 19613 }, // ū
{ 27, 37, 29, 3, 37, 250, 19760 }, // Ŭ
{ 21, 31, 23, 1, 31, 163, 20010 }, // ŭ
{ 27, 38, 29, 3, 38, 257, 20173 }, // Ů
{ 21, 32, 23, 1, 32, 168, 20430 }, // ů
{ 27, 38, 29, 3, 38, 257, 20598 }, // Ű
{ 21, 32, 23, 1, 32, 168, 20855 }, // ű
{ 27, 35, 29, 3, 27, 237, 21023 }, // Ų
{ 21, 28, 23, 1, 20, 147, 21260 }, // ų
{ 38, 37, 39, 3, 37, 352, 21407 }, // Ŵ
{ 29, 32, 29, 0, 31, 232, 21759 }, // ŵ
{ 25, 37, 24, 2, 37, 232, 21991 }, // Ŷ
{ 24, 40, 20, -4, 31, 240, 22223 }, // ŷ
{ 25, 35, 24, 2, 35, 219, 22463 }, // Ÿ
{ 23, 39, 22, -1, 38, 225, 22682 }, // Ź
{ 18, 32, 18, 0, 32, 144, 22907 }, // ź
{ 23, 37, 22, -1, 36, 213, 23051 }, // Ż
{ 18, 29, 18, 0, 29, 131, 23264 }, // ż
{ 23, 39, 22, -1, 38, 225, 23395 }, // Ž
{ 18, 32, 18, 0, 32, 144, 23620 }, // ž
{ 27, 39, 15, -7, 30, 264, 23764 }, // ſ
perf: Reduce overall flash usage by 30.7% by compressing built-in fonts (#831) ## Summary **What is the goal of this PR?** Compress reader font bitmaps to reduce flash usage by 30.7%. **What changes are included?** - New `EpdFontGroup` struct and extended `EpdFontData` with `groups`/`groupCount` fields - `--compress` flag in `fontconvert.py`: groups glyphs (ASCII base group + groups of 8) and compresses each with raw DEFLATE - `FontDecompressor` class with 4-slot LRU cache for on-demand decompression during rendering - `GfxRenderer` transparently routes bitmap access through `getGlyphBitmap()` (compressed or direct flash) - Uses `uzlib` for decompression with minimal heap overhead. - 48 reader fonts (Bookerly, NotoSans 12-18pt, OpenDyslexic) regenerated with compression; 5 UI fonts unchanged - Round-trip verification script (`verify_compression.py`) runs as part of font generation ## Additional Context ## Flash & RAM | | baseline | font-compression | Difference | |--|--------|-----------------|------------| | Flash (ELF) | 6,302,476 B (96.2%) | 4,365,022 B (66.6%) | -1,937,454 B (-30.7%) | | firmware.bin | 6,468,192 B | 4,531,008 B | -1,937,184 B (-29.9%) | | RAM | 101,700 B (31.0%) | 103,076 B (31.5%) | +1,376 B (+0.5%) | ## Script-Based Grouping (Cold Cache) Comparison of uncompressed baseline vs script-based group compression (4-slot LRU cache, cleared each page). Glyphs are grouped by Unicode block (ASCII, Latin-1, Latin Extended-A, Combining Marks, Cyrillic, General Punctuation, etc.) instead of sequential groups of 8. ### Render Time | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Median** | 414.9 ms | 431.6 ms | +16.7 ms (+4.0%) | | **Pages** | 37 | 37 | | ### Memory Usage | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Heap free (median)** | 187.0 KB | 176.3 KB | -10.7 KB | | **Heap free (min)** | 186.0 KB | 166.5 KB | -19.5 KB | | **Largest block (median)** | 148.0 KB | 128.0 KB | -20.0 KB | | **Largest block (min)** | 148.0 KB | 120.0 KB | -28.0 KB | ### Cache Effectiveness | | Misses/page | Hit rate | |---|---|---| | **Compressed (cold cache)** | 2.1 | 99.85% | ------ ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**YES**_ Implementation was done by Claude Code (Opus 4.6) based on a plan developed collaboratively. All generated font headers were verified with an automated round-trip decompression test. The firmware was compiled successfully but has not yet been tested on-device. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 20:30:15 +11:00
{ 8, 9, 0, -6, 31, 18, 0 }, // ̀
{ 8, 10, 0, -3, 32, 20, 18 }, // ́
fix: force auto-hinting for Bookerly to fix inconsistent stem widths (#1098) ## Summary Bookerly's native TrueType hinting is effectively a no-op at the sizes used here, causing FreeType to place stems at inconsistent sub-pixel positions. This results in the 'k' stem (8-bit fringe: 0x38=56) falling just below the 2-bit quantization threshold while 'l' and 'h' stems (fringes: 0x4C=76, 0x40=64) land above it --- making 'k' visibly narrower (2.00px vs 2.33px effective width). FreeType's auto-hinter snaps all stems to consistent grid positions, normalizing effective stem width to 2.67px across all glyphs. Adds --force-autohint flag to fontconvert.py and applies it to Bookerly only. NotoSans, OpenDyslexic, and Ubuntu fonts are unaffected. Here is an example of before/after. Take notice of the vertical stems on characters like `l`, `k`, `n`, `i`, etc. The font is Bookerly 12pt regular: **BEFORE**: ![before](https://github.com/user-attachments/assets/65b2acab-ad95-489e-885e-e3a0163cc252) **AFTER**: ![after](https://github.com/user-attachments/assets/d09a8b5d-40af-4a7d-b622-e1b2cabcce85) Claude generated this script to quantitatively determine that this change makes the vertical stems on a variety of characters more consistent for Bookerly _only_. <details> <summary>Python script</summary> ```python #!/usr/bin/env python3 """Compare stem consistency across all font families with and without auto-hinting. Run from repo root: python3 compare_all_fonts.py """ import freetype DPI = 150 CHARS = ["k", "l", "h", "i", "b", "d"] SIZES = [12, 14, 16, 18] FONTS = { "Bookerly": "lib/EpdFont/builtinFonts/source/Bookerly/Bookerly-Regular.ttf", "NotoSans": "lib/EpdFont/builtinFonts/source/NotoSans/NotoSans-Regular.ttf", "OpenDyslexic": "lib/EpdFont/builtinFonts/source/OpenDyslexic/OpenDyslexic-Regular.otf", "Ubuntu": "lib/EpdFont/builtinFonts/source/Ubuntu/Ubuntu-Regular.ttf", } MODES = { "default": freetype.FT_LOAD_RENDER, "autohint": freetype.FT_LOAD_RENDER | freetype.FT_LOAD_FORCE_AUTOHINT, } def q4to2(v): if v >= 12: return 3 elif v >= 8: return 2 elif v >= 4: return 1 else: return 0 def get_stem_eff(face, char, flags): gi = face.get_char_index(ord(char)) if gi == 0: return None face.load_glyph(gi, flags) bm = face.glyph.bitmap w, h = bm.width, bm.rows if w == 0 or h == 0: return None p2 = [] for y in range(h): row = [] for x in range(w): row.append(q4to2(bm.buffer[y * bm.pitch + x] >> 4)) p2.append(row) # Measure leftmost stem in stable middle rows mid_start, mid_end = h // 4, h - h // 4 widths = [] for y in range(mid_start, mid_end): first = next((x for x in range(w) if p2[y][x] > 0), -1) if first < 0: continue last = first for x in range(first, w): if p2[y][x] > 0: last = x else: break eff = sum(p2[y][x] for x in range(first, last + 1)) / 3.0 widths.append(eff) return round(sum(widths) / len(widths), 2) if widths else None def main(): for font_name, font_path in FONTS.items(): try: freetype.Face(font_path) except Exception: print(f"\n {font_name}: SKIPPED (file not found)") continue print(f"\n{'=' * 80}") print(f" {font_name}") print(f"{'=' * 80}") for size in SIZES: print(f"\n {size}pt:") print(f" {'':6s}", end="") for c in CHARS: print(f" '{c}' ", end="") print(" | spread") for mode_name, flags in MODES.items(): face = freetype.Face(font_path) face.set_char_size(size << 6, size << 6, DPI, DPI) vals = [] print(f" {mode_name:6s}", end="") for c in CHARS: v = get_stem_eff(face, c, flags) vals.append(v) print(f" {v:5.2f}" if v else " N/A", end="") valid = [v for v in vals if v is not None] spread = max(valid) - min(valid) if len(valid) >= 2 else 0 marker = " <-- inconsistent" if spread > 0.5 else "" print(f" | {spread:.2f}{marker}") if __name__ == "__main__": main() ``` </details> Here are the results. The table compares how the font-generation `autohint` flag affects the range of widths of various characters. Lower `spread` mean that glyph stroke widths should appear more consistent. ``` Spread = max stem width - min stem width across glyphs (lower = more consistent): ┌──────────────┬──────┬─────────┬──────────┬──────────┐ │ Font │ Size │ Default │ Autohint │ Winner │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ Bookerly │ 12pt │ 1.49 │ 1.12 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 1.39 │ 1.13 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 1.38 │ 1.16 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.90 │ 1.58 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ NotoSans │ 12pt │ 1.16 │ 0.94 │ mixed │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 0.83 │ 1.14 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 1.41 │ 1.51 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.74 │ 1.63 │ mixed │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ OpenDyslexic │ 12pt │ 2.22 │ 1.44 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 2.57 │ 3.29 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 3.13 │ 2.60 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 3.21 │ 3.23 │ ~tied │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ Ubuntu │ 12pt │ 1.25 │ 1.31 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 1.41 │ 1.64 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 2.21 │ 1.71 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.80 │ 1.71 │ autohint │ └──────────────┴──────┴─────────┴──────────┴──────────┘ ``` --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? I used AI to make sure I'm not doing something stupid, since I'm not a typography expert. I made the changes though.
2026-02-24 06:13:08 +11:00
{ 13, 9, 0, -7, 32, 30, 38 }, // ̂
{ 12, 6, 0, -6, 30, 18, 68 }, // ̃
{ 12, 3, 0, -6, 27, 9, 86 }, // ̄
{ 12, 7, 0, -6, 30, 21, 95 }, // ̆
{ 6, 5, 0, -3, 29, 8, 116 }, // ̇
{ 14, 5, 0, -7, 29, 18, 124 }, // ̈
{ 9, 12, 0, -4, 34, 27, 142 }, // ̉
{ 10, 10, 0, -5, 32, 25, 169 }, // ̊
{ 14, 10, 0, -6, 32, 35, 194 }, // ̋
{ 13, 8, 0, -6, 31, 26, 229 }, // ̌
{ 11, 9, 0, -7, 31, 25, 255 }, // ̏
{ 13, 7, 0, -7, 30, 23, 280 }, // ̑
{ 8, 10, 0, -4, 32, 20, 303 }, // ̒
{ 8, 10, 0, -3, 33, 20, 323 }, // ̓
{ 6, 10, 0, -4, 33, 15, 343 }, // ̔
{ 6, 10, 0, -3, 33, 15, 358 }, // ̕
{ 8, 9, 0, -4, 24, 18, 373 }, // ̛
{ 6, 5, 0, -3, -3, 8, 391 }, // ̣
{ 14, 5, 0, -7, -3, 18, 399 }, // ̤
{ 8, 8, 0, -4, -2, 16, 417 }, // ̥
{ 7, 8, 0, -4, -2, 14, 433 }, // ̦
{ 8, 9, 0, -4, -1, 18, 447 }, // ̧
{ 8, 10, 0, -4, 2, 20, 465 }, // ̨
{ 6, 8, 10, -1, -2, 12, 485 }, // ̩
{ 13, 8, 0, -7, -2, 26, 497 }, // ̭
{ 12, 7, 0, -6, -2, 21, 523 }, // ̮
{ 12, 6, 0, -6, -3, 18, 544 }, // ̰
{ 12, 3, 0, -6, -4, 9, 562 }, // ̱
{ 13, 7, 0, -7, 30, 23, 571 }, // ͂
{ 14, 15, 0, -8, 39, 53, 594 }, // ̈́
{ 7, 7, 0, -2, -2, 13, 647 }, // ͅ
perf: Reduce overall flash usage by 30.7% by compressing built-in fonts (#831) ## Summary **What is the goal of this PR?** Compress reader font bitmaps to reduce flash usage by 30.7%. **What changes are included?** - New `EpdFontGroup` struct and extended `EpdFontData` with `groups`/`groupCount` fields - `--compress` flag in `fontconvert.py`: groups glyphs (ASCII base group + groups of 8) and compresses each with raw DEFLATE - `FontDecompressor` class with 4-slot LRU cache for on-demand decompression during rendering - `GfxRenderer` transparently routes bitmap access through `getGlyphBitmap()` (compressed or direct flash) - Uses `uzlib` for decompression with minimal heap overhead. - 48 reader fonts (Bookerly, NotoSans 12-18pt, OpenDyslexic) regenerated with compression; 5 UI fonts unchanged - Round-trip verification script (`verify_compression.py`) runs as part of font generation ## Additional Context ## Flash & RAM | | baseline | font-compression | Difference | |--|--------|-----------------|------------| | Flash (ELF) | 6,302,476 B (96.2%) | 4,365,022 B (66.6%) | -1,937,454 B (-30.7%) | | firmware.bin | 6,468,192 B | 4,531,008 B | -1,937,184 B (-29.9%) | | RAM | 101,700 B (31.0%) | 103,076 B (31.5%) | +1,376 B (+0.5%) | ## Script-Based Grouping (Cold Cache) Comparison of uncompressed baseline vs script-based group compression (4-slot LRU cache, cleared each page). Glyphs are grouped by Unicode block (ASCII, Latin-1, Latin Extended-A, Combining Marks, Cyrillic, General Punctuation, etc.) instead of sequential groups of 8. ### Render Time | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Median** | 414.9 ms | 431.6 ms | +16.7 ms (+4.0%) | | **Pages** | 37 | 37 | | ### Memory Usage | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Heap free (median)** | 187.0 KB | 176.3 KB | -10.7 KB | | **Heap free (min)** | 186.0 KB | 166.5 KB | -19.5 KB | | **Largest block (median)** | 148.0 KB | 128.0 KB | -20.0 KB | | **Largest block (min)** | 148.0 KB | 120.0 KB | -28.0 KB | ### Cache Effectiveness | | Misses/page | Hit rate | |---|---|---| | **Compressed (cold cache)** | 2.1 | 99.85% | ------ ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**YES**_ Implementation was done by Claude Code (Opus 4.6) based on a plan developed collaboratively. All generated font headers were verified with an automated round-trip decompression test. The firmware was compiled successfully but has not yet been tested on-device. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 20:30:15 +11:00
{ 24, 37, 23, -1, 37, 222, 0 }, // Ѐ
{ 24, 35, 23, -1, 35, 210, 222 }, // Ё
{ 23, 35, 28, 3, 27, 202, 432 }, // Ђ
fix: force auto-hinting for Bookerly to fix inconsistent stem widths (#1098) ## Summary Bookerly's native TrueType hinting is effectively a no-op at the sizes used here, causing FreeType to place stems at inconsistent sub-pixel positions. This results in the 'k' stem (8-bit fringe: 0x38=56) falling just below the 2-bit quantization threshold while 'l' and 'h' stems (fringes: 0x4C=76, 0x40=64) land above it --- making 'k' visibly narrower (2.00px vs 2.33px effective width). FreeType's auto-hinter snaps all stems to consistent grid positions, normalizing effective stem width to 2.67px across all glyphs. Adds --force-autohint flag to fontconvert.py and applies it to Bookerly only. NotoSans, OpenDyslexic, and Ubuntu fonts are unaffected. Here is an example of before/after. Take notice of the vertical stems on characters like `l`, `k`, `n`, `i`, etc. The font is Bookerly 12pt regular: **BEFORE**: ![before](https://github.com/user-attachments/assets/65b2acab-ad95-489e-885e-e3a0163cc252) **AFTER**: ![after](https://github.com/user-attachments/assets/d09a8b5d-40af-4a7d-b622-e1b2cabcce85) Claude generated this script to quantitatively determine that this change makes the vertical stems on a variety of characters more consistent for Bookerly _only_. <details> <summary>Python script</summary> ```python #!/usr/bin/env python3 """Compare stem consistency across all font families with and without auto-hinting. Run from repo root: python3 compare_all_fonts.py """ import freetype DPI = 150 CHARS = ["k", "l", "h", "i", "b", "d"] SIZES = [12, 14, 16, 18] FONTS = { "Bookerly": "lib/EpdFont/builtinFonts/source/Bookerly/Bookerly-Regular.ttf", "NotoSans": "lib/EpdFont/builtinFonts/source/NotoSans/NotoSans-Regular.ttf", "OpenDyslexic": "lib/EpdFont/builtinFonts/source/OpenDyslexic/OpenDyslexic-Regular.otf", "Ubuntu": "lib/EpdFont/builtinFonts/source/Ubuntu/Ubuntu-Regular.ttf", } MODES = { "default": freetype.FT_LOAD_RENDER, "autohint": freetype.FT_LOAD_RENDER | freetype.FT_LOAD_FORCE_AUTOHINT, } def q4to2(v): if v >= 12: return 3 elif v >= 8: return 2 elif v >= 4: return 1 else: return 0 def get_stem_eff(face, char, flags): gi = face.get_char_index(ord(char)) if gi == 0: return None face.load_glyph(gi, flags) bm = face.glyph.bitmap w, h = bm.width, bm.rows if w == 0 or h == 0: return None p2 = [] for y in range(h): row = [] for x in range(w): row.append(q4to2(bm.buffer[y * bm.pitch + x] >> 4)) p2.append(row) # Measure leftmost stem in stable middle rows mid_start, mid_end = h // 4, h - h // 4 widths = [] for y in range(mid_start, mid_end): first = next((x for x in range(w) if p2[y][x] > 0), -1) if first < 0: continue last = first for x in range(first, w): if p2[y][x] > 0: last = x else: break eff = sum(p2[y][x] for x in range(first, last + 1)) / 3.0 widths.append(eff) return round(sum(widths) / len(widths), 2) if widths else None def main(): for font_name, font_path in FONTS.items(): try: freetype.Face(font_path) except Exception: print(f"\n {font_name}: SKIPPED (file not found)") continue print(f"\n{'=' * 80}") print(f" {font_name}") print(f"{'=' * 80}") for size in SIZES: print(f"\n {size}pt:") print(f" {'':6s}", end="") for c in CHARS: print(f" '{c}' ", end="") print(" | spread") for mode_name, flags in MODES.items(): face = freetype.Face(font_path) face.set_char_size(size << 6, size << 6, DPI, DPI) vals = [] print(f" {mode_name:6s}", end="") for c in CHARS: v = get_stem_eff(face, c, flags) vals.append(v) print(f" {v:5.2f}" if v else " N/A", end="") valid = [v for v in vals if v is not None] spread = max(valid) - min(valid) if len(valid) >= 2 else 0 marker = " <-- inconsistent" if spread > 0.5 else "" print(f" | {spread:.2f}{marker}") if __name__ == "__main__": main() ``` </details> Here are the results. The table compares how the font-generation `autohint` flag affects the range of widths of various characters. Lower `spread` mean that glyph stroke widths should appear more consistent. ``` Spread = max stem width - min stem width across glyphs (lower = more consistent): ┌──────────────┬──────┬─────────┬──────────┬──────────┐ │ Font │ Size │ Default │ Autohint │ Winner │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ Bookerly │ 12pt │ 1.49 │ 1.12 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 1.39 │ 1.13 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 1.38 │ 1.16 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.90 │ 1.58 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ NotoSans │ 12pt │ 1.16 │ 0.94 │ mixed │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 0.83 │ 1.14 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 1.41 │ 1.51 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.74 │ 1.63 │ mixed │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ OpenDyslexic │ 12pt │ 2.22 │ 1.44 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 2.57 │ 3.29 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 3.13 │ 2.60 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 3.21 │ 3.23 │ ~tied │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ Ubuntu │ 12pt │ 1.25 │ 1.31 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 1.41 │ 1.64 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 2.21 │ 1.71 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.80 │ 1.71 │ autohint │ └──────────────┴──────┴─────────┴──────────┴──────────┘ ``` --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? I used AI to make sure I'm not doing something stupid, since I'm not a typography expert. I made the changes though.
2026-02-24 06:13:08 +11:00
{ 24, 38, 21, -1, 38, 228, 634 }, // Ѓ
{ 23, 27, 24, 1, 27, 156, 862 }, // Є
{ 19, 27, 20, 0, 27, 129, 1018 }, // Ѕ
{ 16, 27, 14, -1, 27, 108, 1147 }, // І
{ 19, 35, 14, -1, 35, 167, 1255 }, // Ї
{ 23, 34, 13, -7, 27, 196, 1422 }, // Ј
{ 34, 27, 33, -2, 27, 230, 1618 }, // Љ
{ 35, 27, 35, -1, 27, 237, 1848 }, // Њ
{ 24, 27, 29, 3, 27, 162, 2085 }, // Ћ
{ 28, 37, 25, -1, 37, 259, 2247 }, // Ќ
{ 32, 37, 30, -1, 37, 296, 2506 }, // Ѝ
{ 26, 38, 23, 1, 38, 247, 2802 }, // Ў
{ 31, 36, 28, -1, 27, 279, 3049 }, // Џ
{ 28, 27, 27, -2, 27, 189, 3328 }, // А
{ 23, 27, 23, -1, 27, 156, 3517 }, // Б
{ 23, 27, 23, -1, 27, 156, 3673 }, // В
{ 24, 27, 21, -1, 27, 162, 3829 }, // Г
{ 30, 35, 27, -2, 27, 263, 3991 }, // Д
{ 24, 27, 23, -1, 27, 162, 4254 }, // Е
{ 40, 27, 36, -3, 27, 270, 4416 }, // Ж
{ 19, 27, 21, 0, 27, 129, 4686 }, // З
{ 32, 27, 30, -1, 27, 216, 4815 }, // И
{ 32, 38, 30, -1, 38, 304, 5031 }, // Й
{ 28, 27, 25, -1, 27, 189, 5335 }, // К
{ 29, 27, 26, -2, 27, 196, 5524 }, // Л
{ 36, 27, 34, -2, 27, 243, 5720 }, // М
{ 32, 27, 30, -1, 27, 216, 5963 }, // Н
{ 26, 27, 28, 1, 27, 176, 6179 }, // О
{ 31, 27, 28, -1, 27, 210, 6355 }, // П
{ 23, 27, 22, -1, 27, 156, 6565 }, // Р
{ 23, 27, 24, 1, 27, 156, 6721 }, // С
{ 22, 27, 24, 3, 27, 149, 6877 }, // Т
{ 26, 27, 23, 1, 27, 176, 7026 }, // У
{ 26, 28, 27, 1, 28, 182, 7202 }, // Ф
{ 30, 27, 25, -3, 27, 203, 7384 }, // Х
{ 31, 35, 28, -1, 27, 272, 7587 }, // Ц
{ 25, 27, 26, 2, 27, 169, 7859 }, // Ч
{ 40, 27, 37, -1, 27, 270, 8028 }, // Ш
{ 40, 35, 37, -1, 27, 350, 8298 }, // Щ
{ 22, 27, 26, 3, 27, 149, 8648 }, // Ъ
{ 36, 27, 34, -1, 27, 243, 8797 }, // Ы
{ 22, 27, 22, -1, 27, 149, 9040 }, // Ь
{ 22, 27, 23, 0, 27, 149, 9189 }, // Э
{ 38, 27, 38, -1, 27, 257, 9338 }, // Ю
{ 27, 27, 24, -2, 27, 183, 9595 }, // Я
{ 20, 20, 22, 1, 20, 100, 9778 }, // а
{ 21, 31, 20, 1, 31, 163, 9878 }, // б
{ 17, 20, 19, 1, 20, 85, 10041 }, // в
{ 15, 20, 16, 1, 20, 75, 10126 }, // г
{ 19, 30, 21, 1, 30, 143, 10201 }, // д
{ 16, 20, 18, 1, 20, 80, 10344 }, // е
{ 33, 21, 33, 0, 21, 174, 10424 }, // ж
{ 16, 20, 17, 0, 20, 80, 10598 }, // з
{ 21, 20, 23, 1, 20, 105, 10678 }, // и
{ 21, 31, 23, 1, 31, 163, 10783 }, // й
{ 19, 20, 20, 1, 20, 95, 10946 }, // к
{ 23, 20, 23, -1, 20, 115, 11041 }, // л
{ 29, 20, 29, 0, 20, 145, 11156 }, // м
{ 21, 20, 23, 1, 20, 105, 11301 }, // н
{ 18, 20, 20, 1, 20, 90, 11406 }, // о
{ 21, 20, 23, 1, 20, 105, 11496 }, // п
{ 23, 29, 21, -3, 20, 167, 11601 }, // р
{ 15, 20, 17, 1, 20, 75, 11768 }, // с
{ 32, 20, 33, 1, 20, 160, 11843 }, // т
{ 24, 29, 20, -4, 20, 174, 12003 }, // у
{ 24, 39, 26, 1, 30, 234, 12177 }, // ф
{ 23, 20, 21, -1, 20, 115, 12411 }, // х
{ 22, 27, 23, 1, 20, 149, 12526 }, // ц
{ 20, 20, 22, 1, 20, 100, 12675 }, // ч
{ 30, 20, 32, 1, 20, 150, 12775 }, // ш
{ 30, 27, 32, 1, 20, 203, 12925 }, // щ
{ 18, 21, 20, 1, 21, 95, 13128 }, // ъ
{ 26, 20, 28, 1, 20, 130, 13223 }, // ы
{ 16, 20, 18, 1, 20, 80, 13353 }, // ь
{ 17, 20, 18, 0, 20, 85, 13433 }, // э
{ 27, 20, 29, 1, 20, 135, 13518 }, // ю
{ 21, 20, 21, -1, 20, 105, 13653 }, // я
{ 16, 31, 18, 1, 31, 124, 13758 }, // ѐ
{ 18, 29, 18, 1, 29, 131, 13882 }, // ё
{ 18, 39, 21, 1, 30, 176, 14013 }, // ђ
{ 15, 32, 16, 1, 32, 120, 14189 }, // ѓ
{ 16, 20, 18, 1, 20, 80, 14309 }, // є
{ 15, 20, 15, 0, 20, 75, 14389 }, // ѕ
{ 10, 30, 12, 2, 30, 75, 14464 }, // і
{ 14, 29, 12, 2, 29, 102, 14539 }, // ї
{ 19, 38, 11, -7, 29, 181, 14641 }, // ј
{ 28, 20, 28, -1, 20, 140, 14822 }, // љ
{ 25, 20, 27, 1, 20, 125, 14962 }, // њ
{ 21, 30, 22, 1, 30, 158, 15087 }, // ћ
{ 19, 32, 20, 1, 32, 152, 15245 }, // ќ
{ 21, 32, 23, 1, 32, 168, 15397 }, // ѝ
{ 24, 40, 20, -4, 31, 240, 15565 }, // ў
{ 21, 27, 23, 1, 20, 142, 15805 }, // џ
{ 22, 30, 25, 2, 30, 165, 15947 }, // Ѣ
{ 26, 20, 28, 1, 20, 130, 16112 }, // ѣ
{ 26, 27, 28, 1, 27, 176, 16242 }, // Ѳ
{ 19, 20, 21, 1, 20, 95, 16418 }, // ѳ
{ 26, 27, 28, 3, 27, 176, 16513 }, // Ѵ
{ 23, 20, 20, 0, 20, 115, 16689 }, // ѵ
{ 32, 46, 30, -1, 38, 368, 16804 }, // Ҋ
{ 22, 38, 23, 1, 31, 209, 17172 }, // ҋ
{ 22, 27, 22, -1, 27, 149, 17381 }, // Ҍ
{ 15, 27, 18, 2, 27, 102, 17530 }, // ҍ
{ 23, 27, 22, -1, 27, 156, 17632 }, // Ҏ
{ 23, 29, 21, -3, 20, 167, 17788 }, // ҏ
{ 25, 32, 21, -1, 32, 200, 17955 }, // Ґ
{ 19, 25, 17, 0, 25, 119, 18155 }, // ґ
{ 24, 27, 21, -1, 27, 162, 18274 }, // Ғ
{ 15, 20, 16, 1, 20, 75, 18436 }, // ғ
{ 23, 35, 23, -1, 27, 202, 18511 }, // Ҕ
{ 17, 29, 20, 2, 20, 124, 18713 }, // ҕ
{ 40, 35, 36, -3, 27, 350, 18837 }, // Җ
{ 33, 28, 33, 0, 21, 231, 19187 }, // җ
{ 19, 34, 21, 0, 27, 162, 19418 }, // Ҙ
{ 16, 27, 17, 0, 20, 108, 19580 }, // ҙ
{ 28, 35, 25, -1, 27, 245, 19688 }, // Қ
{ 20, 27, 21, 1, 20, 135, 19933 }, // қ
{ 30, 27, 27, -1, 27, 203, 20068 }, // Ҝ
{ 22, 20, 23, 1, 20, 110, 20271 }, // ҝ
{ 28, 27, 25, -1, 27, 189, 20381 }, // Ҟ
{ 19, 27, 20, 1, 27, 129, 20570 }, // ҟ
{ 28, 27, 30, 3, 27, 189, 20699 }, // Ҡ
{ 22, 20, 23, 1, 20, 110, 20888 }, // ҡ
{ 32, 35, 30, -1, 27, 280, 20998 }, // Ң
{ 22, 27, 23, 1, 20, 149, 21278 }, // ң
{ 37, 27, 35, -1, 27, 250, 21427 }, // Ҥ
{ 26, 20, 28, 1, 20, 130, 21677 }, // ҥ
{ 38, 35, 39, -1, 27, 333, 21807 }, // Ҧ
{ 30, 29, 32, 1, 20, 218, 22140 }, // ҧ
{ 28, 27, 30, 1, 27, 189, 22358 }, // Ҩ
{ 22, 20, 24, 1, 20, 110, 22547 }, // ҩ
{ 23, 35, 24, 1, 27, 202, 22657 }, // Ҫ
{ 15, 27, 17, 1, 20, 102, 22859 }, // ҫ
{ 22, 35, 24, 3, 27, 193, 22961 }, // Ҭ
{ 32, 27, 34, 1, 20, 216, 23154 }, // ҭ
{ 25, 27, 24, 2, 27, 169, 23370 }, // Ү
{ 19, 29, 19, 0, 20, 138, 23539 }, // ү
{ 25, 27, 24, 2, 27, 169, 23677 }, // Ұ
{ 19, 29, 19, 0, 20, 138, 23846 }, // ұ
{ 30, 35, 25, -3, 27, 263, 23984 }, // Ҳ
{ 23, 27, 21, -1, 20, 156, 24247 }, // ҳ
{ 32, 35, 32, 1, 27, 280, 24403 }, // Ҵ
{ 22, 35, 23, 1, 28, 193, 24683 }, // ҵ
{ 25, 35, 26, 2, 27, 219, 24876 }, // Ҷ
{ 21, 27, 22, 1, 20, 142, 25095 }, // ҷ
{ 25, 27, 26, 2, 27, 169, 25237 }, // Ҹ
{ 20, 20, 22, 1, 20, 100, 25406 }, // ҹ
{ 24, 27, 25, -1, 27, 162, 25506 }, // Һ
{ 21, 30, 22, 1, 30, 158, 25668 }, // һ
{ 28, 27, 30, 1, 27, 189, 25826 }, // Ҽ
{ 21, 20, 22, 0, 20, 105, 26015 }, // ҽ
{ 28, 36, 30, 1, 27, 252, 26120 }, // Ҿ
{ 21, 28, 22, 0, 20, 147, 26372 }, // ҿ
{ 16, 27, 14, -1, 27, 108, 26519 }, // Ӏ
{ 40, 38, 36, -3, 38, 380, 26627 }, // Ӂ
{ 33, 31, 33, 0, 31, 256, 27007 }, // ӂ
{ 28, 35, 25, -1, 27, 245, 27263 }, // Ӄ
{ 19, 29, 21, 1, 20, 138, 27508 }, // ӄ
{ 29, 35, 26, -2, 27, 254, 27646 }, // Ӆ
{ 23, 27, 23, -1, 20, 156, 27900 }, // ӆ
{ 32, 35, 30, -1, 27, 280, 28056 }, // Ӈ
{ 20, 29, 22, 1, 20, 145, 28336 }, // ӈ
{ 32, 35, 30, -1, 27, 280, 28481 }, // Ӊ
{ 22, 27, 23, 1, 20, 149, 28761 }, // ӊ
{ 25, 35, 26, 2, 27, 219, 28910 }, // Ӌ
{ 19, 27, 21, 1, 20, 129, 29129 }, // ӌ
{ 36, 35, 34, -2, 27, 315, 29258 }, // Ӎ
{ 29, 27, 29, 0, 20, 196, 29573 }, // ӎ
{ 17, 29, 12, -2, 29, 124, 29769 }, // ӏ
{ 28, 38, 27, -2, 38, 266, 29893 }, // Ӑ
{ 20, 31, 22, 1, 31, 155, 30159 }, // ӑ
{ 28, 35, 27, -2, 35, 245, 30314 }, // Ӓ
{ 20, 29, 22, 1, 29, 145, 30559 }, // ӓ
{ 37, 27, 34, -3, 27, 250, 30704 }, // Ӕ
{ 27, 20, 29, 1, 20, 135, 30954 }, // ӕ
{ 24, 38, 23, -1, 38, 228, 31089 }, // Ӗ
{ 18, 31, 18, 1, 31, 140, 31317 }, // ӗ
{ 23, 27, 24, 0, 27, 156, 31457 }, // Ә
{ 16, 20, 18, 1, 20, 80, 31613 }, // ә
{ 23, 35, 24, 0, 35, 202, 31693 }, // Ӛ
{ 17, 29, 18, 1, 29, 124, 31895 }, // ӛ
{ 40, 35, 36, -3, 35, 350, 32019 }, // Ӝ
{ 33, 29, 33, 0, 29, 240, 32369 }, // ӝ
{ 19, 35, 21, 0, 35, 167, 32609 }, // Ӟ
{ 17, 29, 17, 0, 29, 124, 32776 }, // ӟ
{ 23, 27, 21, -1, 27, 156, 32900 }, // Ӡ
{ 22, 29, 19, -3, 20, 160, 33056 }, // ӡ
{ 32, 34, 30, -1, 34, 272, 33216 }, // Ӣ
{ 21, 28, 23, 1, 28, 147, 33488 }, // ӣ
{ 32, 35, 30, -1, 35, 280, 33635 }, // Ӥ
{ 21, 29, 23, 1, 29, 153, 33915 }, // ӥ
{ 26, 35, 28, 1, 35, 228, 34068 }, // Ӧ
{ 19, 29, 20, 1, 29, 138, 34296 }, // ӧ
{ 26, 27, 28, 1, 27, 176, 34434 }, // Ө
{ 19, 20, 21, 1, 20, 95, 34610 }, // ө
{ 26, 35, 28, 1, 35, 228, 34705 }, // Ӫ
{ 20, 29, 21, 1, 29, 145, 34933 }, // ӫ
{ 22, 35, 23, 0, 35, 193, 35078 }, // Ӭ
{ 17, 29, 18, 0, 29, 124, 35271 }, // ӭ
{ 26, 34, 23, 1, 34, 221, 35395 }, // Ӯ
{ 24, 36, 20, -4, 27, 216, 35616 }, // ӯ
{ 26, 35, 23, 1, 35, 228, 35832 }, // Ӱ
{ 24, 38, 20, -4, 29, 228, 36060 }, // ӱ
{ 26, 38, 23, 1, 38, 247, 36288 }, // Ӳ
{ 24, 41, 20, -4, 32, 246, 36535 }, // ӳ
{ 25, 35, 26, 2, 35, 219, 36781 }, // Ӵ
{ 20, 29, 22, 1, 29, 145, 37000 }, // ӵ
{ 24, 35, 21, -1, 27, 210, 37145 }, // Ӷ
{ 15, 27, 16, 1, 20, 102, 37355 }, // ӷ
{ 36, 35, 34, -1, 35, 315, 37457 }, // Ӹ
{ 26, 29, 28, 1, 29, 189, 37772 }, // ӹ
{ 24, 35, 21, -1, 27, 210, 37961 }, // Ӻ
{ 15, 27, 16, 1, 20, 102, 38171 }, // ӻ
{ 30, 35, 25, -3, 27, 263, 38273 }, // Ӽ
{ 23, 29, 21, -1, 20, 167, 38536 }, // ӽ
{ 30, 27, 25, -3, 27, 203, 38703 }, // Ӿ
{ 23, 20, 21, -1, 20, 115, 38906 }, // ӿ
perf: Reduce overall flash usage by 30.7% by compressing built-in fonts (#831) ## Summary **What is the goal of this PR?** Compress reader font bitmaps to reduce flash usage by 30.7%. **What changes are included?** - New `EpdFontGroup` struct and extended `EpdFontData` with `groups`/`groupCount` fields - `--compress` flag in `fontconvert.py`: groups glyphs (ASCII base group + groups of 8) and compresses each with raw DEFLATE - `FontDecompressor` class with 4-slot LRU cache for on-demand decompression during rendering - `GfxRenderer` transparently routes bitmap access through `getGlyphBitmap()` (compressed or direct flash) - Uses `uzlib` for decompression with minimal heap overhead. - 48 reader fonts (Bookerly, NotoSans 12-18pt, OpenDyslexic) regenerated with compression; 5 UI fonts unchanged - Round-trip verification script (`verify_compression.py`) runs as part of font generation ## Additional Context ## Flash & RAM | | baseline | font-compression | Difference | |--|--------|-----------------|------------| | Flash (ELF) | 6,302,476 B (96.2%) | 4,365,022 B (66.6%) | -1,937,454 B (-30.7%) | | firmware.bin | 6,468,192 B | 4,531,008 B | -1,937,184 B (-29.9%) | | RAM | 101,700 B (31.0%) | 103,076 B (31.5%) | +1,376 B (+0.5%) | ## Script-Based Grouping (Cold Cache) Comparison of uncompressed baseline vs script-based group compression (4-slot LRU cache, cleared each page). Glyphs are grouped by Unicode block (ASCII, Latin-1, Latin Extended-A, Combining Marks, Cyrillic, General Punctuation, etc.) instead of sequential groups of 8. ### Render Time | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Median** | 414.9 ms | 431.6 ms | +16.7 ms (+4.0%) | | **Pages** | 37 | 37 | | ### Memory Usage | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Heap free (median)** | 187.0 KB | 176.3 KB | -10.7 KB | | **Heap free (min)** | 186.0 KB | 166.5 KB | -19.5 KB | | **Largest block (median)** | 148.0 KB | 128.0 KB | -20.0 KB | | **Largest block (min)** | 148.0 KB | 120.0 KB | -28.0 KB | ### Cache Effectiveness | | Misses/page | Hit rate | |---|---|---| | **Compressed (cold cache)** | 2.1 | 99.85% | ------ ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**YES**_ Implementation was done by Claude Code (Opus 4.6) based on a plan developed collaboratively. All generated font headers were verified with an automated round-trip decompression test. The firmware was compiled successfully but has not yet been tested on-device. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 20:30:15 +11:00
{ 0, 0, 19, 0, 0, 0, 0 }, //  
{ 0, 0, 38, 0, 0, 0, 0 }, //
{ 0, 0, 19, 0, 0, 0, 0 }, //
{ 0, 0, 38, 0, 0, 0, 0 }, //
fix: force auto-hinting for Bookerly to fix inconsistent stem widths (#1098) ## Summary Bookerly's native TrueType hinting is effectively a no-op at the sizes used here, causing FreeType to place stems at inconsistent sub-pixel positions. This results in the 'k' stem (8-bit fringe: 0x38=56) falling just below the 2-bit quantization threshold while 'l' and 'h' stems (fringes: 0x4C=76, 0x40=64) land above it --- making 'k' visibly narrower (2.00px vs 2.33px effective width). FreeType's auto-hinter snaps all stems to consistent grid positions, normalizing effective stem width to 2.67px across all glyphs. Adds --force-autohint flag to fontconvert.py and applies it to Bookerly only. NotoSans, OpenDyslexic, and Ubuntu fonts are unaffected. Here is an example of before/after. Take notice of the vertical stems on characters like `l`, `k`, `n`, `i`, etc. The font is Bookerly 12pt regular: **BEFORE**: ![before](https://github.com/user-attachments/assets/65b2acab-ad95-489e-885e-e3a0163cc252) **AFTER**: ![after](https://github.com/user-attachments/assets/d09a8b5d-40af-4a7d-b622-e1b2cabcce85) Claude generated this script to quantitatively determine that this change makes the vertical stems on a variety of characters more consistent for Bookerly _only_. <details> <summary>Python script</summary> ```python #!/usr/bin/env python3 """Compare stem consistency across all font families with and without auto-hinting. Run from repo root: python3 compare_all_fonts.py """ import freetype DPI = 150 CHARS = ["k", "l", "h", "i", "b", "d"] SIZES = [12, 14, 16, 18] FONTS = { "Bookerly": "lib/EpdFont/builtinFonts/source/Bookerly/Bookerly-Regular.ttf", "NotoSans": "lib/EpdFont/builtinFonts/source/NotoSans/NotoSans-Regular.ttf", "OpenDyslexic": "lib/EpdFont/builtinFonts/source/OpenDyslexic/OpenDyslexic-Regular.otf", "Ubuntu": "lib/EpdFont/builtinFonts/source/Ubuntu/Ubuntu-Regular.ttf", } MODES = { "default": freetype.FT_LOAD_RENDER, "autohint": freetype.FT_LOAD_RENDER | freetype.FT_LOAD_FORCE_AUTOHINT, } def q4to2(v): if v >= 12: return 3 elif v >= 8: return 2 elif v >= 4: return 1 else: return 0 def get_stem_eff(face, char, flags): gi = face.get_char_index(ord(char)) if gi == 0: return None face.load_glyph(gi, flags) bm = face.glyph.bitmap w, h = bm.width, bm.rows if w == 0 or h == 0: return None p2 = [] for y in range(h): row = [] for x in range(w): row.append(q4to2(bm.buffer[y * bm.pitch + x] >> 4)) p2.append(row) # Measure leftmost stem in stable middle rows mid_start, mid_end = h // 4, h - h // 4 widths = [] for y in range(mid_start, mid_end): first = next((x for x in range(w) if p2[y][x] > 0), -1) if first < 0: continue last = first for x in range(first, w): if p2[y][x] > 0: last = x else: break eff = sum(p2[y][x] for x in range(first, last + 1)) / 3.0 widths.append(eff) return round(sum(widths) / len(widths), 2) if widths else None def main(): for font_name, font_path in FONTS.items(): try: freetype.Face(font_path) except Exception: print(f"\n {font_name}: SKIPPED (file not found)") continue print(f"\n{'=' * 80}") print(f" {font_name}") print(f"{'=' * 80}") for size in SIZES: print(f"\n {size}pt:") print(f" {'':6s}", end="") for c in CHARS: print(f" '{c}' ", end="") print(" | spread") for mode_name, flags in MODES.items(): face = freetype.Face(font_path) face.set_char_size(size << 6, size << 6, DPI, DPI) vals = [] print(f" {mode_name:6s}", end="") for c in CHARS: v = get_stem_eff(face, c, flags) vals.append(v) print(f" {v:5.2f}" if v else " N/A", end="") valid = [v for v in vals if v is not None] spread = max(valid) - min(valid) if len(valid) >= 2 else 0 marker = " <-- inconsistent" if spread > 0.5 else "" print(f" | {spread:.2f}{marker}") if __name__ == "__main__": main() ``` </details> Here are the results. The table compares how the font-generation `autohint` flag affects the range of widths of various characters. Lower `spread` mean that glyph stroke widths should appear more consistent. ``` Spread = max stem width - min stem width across glyphs (lower = more consistent): ┌──────────────┬──────┬─────────┬──────────┬──────────┐ │ Font │ Size │ Default │ Autohint │ Winner │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ Bookerly │ 12pt │ 1.49 │ 1.12 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 1.39 │ 1.13 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 1.38 │ 1.16 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.90 │ 1.58 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ NotoSans │ 12pt │ 1.16 │ 0.94 │ mixed │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 0.83 │ 1.14 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 1.41 │ 1.51 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.74 │ 1.63 │ mixed │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ OpenDyslexic │ 12pt │ 2.22 │ 1.44 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 2.57 │ 3.29 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 3.13 │ 2.60 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 3.21 │ 3.23 │ ~tied │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ Ubuntu │ 12pt │ 1.25 │ 1.31 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 1.41 │ 1.64 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 2.21 │ 1.71 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.80 │ 1.71 │ autohint │ └──────────────┴──────┴─────────┴──────────┴──────────┘ ``` --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? I used AI to make sure I'm not doing something stupid, since I'm not a typography expert. I made the changes though.
2026-02-24 06:13:08 +11:00
{ 0, 0, 12, 0, 0, 0, 0 }, //
{ 0, 0, 9, 0, 0, 0, 0 }, //
perf: Reduce overall flash usage by 30.7% by compressing built-in fonts (#831) ## Summary **What is the goal of this PR?** Compress reader font bitmaps to reduce flash usage by 30.7%. **What changes are included?** - New `EpdFontGroup` struct and extended `EpdFontData` with `groups`/`groupCount` fields - `--compress` flag in `fontconvert.py`: groups glyphs (ASCII base group + groups of 8) and compresses each with raw DEFLATE - `FontDecompressor` class with 4-slot LRU cache for on-demand decompression during rendering - `GfxRenderer` transparently routes bitmap access through `getGlyphBitmap()` (compressed or direct flash) - Uses `uzlib` for decompression with minimal heap overhead. - 48 reader fonts (Bookerly, NotoSans 12-18pt, OpenDyslexic) regenerated with compression; 5 UI fonts unchanged - Round-trip verification script (`verify_compression.py`) runs as part of font generation ## Additional Context ## Flash & RAM | | baseline | font-compression | Difference | |--|--------|-----------------|------------| | Flash (ELF) | 6,302,476 B (96.2%) | 4,365,022 B (66.6%) | -1,937,454 B (-30.7%) | | firmware.bin | 6,468,192 B | 4,531,008 B | -1,937,184 B (-29.9%) | | RAM | 101,700 B (31.0%) | 103,076 B (31.5%) | +1,376 B (+0.5%) | ## Script-Based Grouping (Cold Cache) Comparison of uncompressed baseline vs script-based group compression (4-slot LRU cache, cleared each page). Glyphs are grouped by Unicode block (ASCII, Latin-1, Latin Extended-A, Combining Marks, Cyrillic, General Punctuation, etc.) instead of sequential groups of 8. ### Render Time | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Median** | 414.9 ms | 431.6 ms | +16.7 ms (+4.0%) | | **Pages** | 37 | 37 | | ### Memory Usage | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Heap free (median)** | 187.0 KB | 176.3 KB | -10.7 KB | | **Heap free (min)** | 186.0 KB | 166.5 KB | -19.5 KB | | **Largest block (median)** | 148.0 KB | 128.0 KB | -20.0 KB | | **Largest block (min)** | 148.0 KB | 120.0 KB | -28.0 KB | ### Cache Effectiveness | | Misses/page | Hit rate | |---|---|---| | **Compressed (cold cache)** | 2.1 | 99.85% | ------ ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**YES**_ Implementation was done by Claude Code (Opus 4.6) based on a plan developed collaboratively. All generated font headers were verified with an automated round-trip decompression test. The firmware was compiled successfully but has not yet been tested on-device. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 20:30:15 +11:00
{ 0, 0, 6, 0, 0, 0, 0 }, //
fix: force auto-hinting for Bookerly to fix inconsistent stem widths (#1098) ## Summary Bookerly's native TrueType hinting is effectively a no-op at the sizes used here, causing FreeType to place stems at inconsistent sub-pixel positions. This results in the 'k' stem (8-bit fringe: 0x38=56) falling just below the 2-bit quantization threshold while 'l' and 'h' stems (fringes: 0x4C=76, 0x40=64) land above it --- making 'k' visibly narrower (2.00px vs 2.33px effective width). FreeType's auto-hinter snaps all stems to consistent grid positions, normalizing effective stem width to 2.67px across all glyphs. Adds --force-autohint flag to fontconvert.py and applies it to Bookerly only. NotoSans, OpenDyslexic, and Ubuntu fonts are unaffected. Here is an example of before/after. Take notice of the vertical stems on characters like `l`, `k`, `n`, `i`, etc. The font is Bookerly 12pt regular: **BEFORE**: ![before](https://github.com/user-attachments/assets/65b2acab-ad95-489e-885e-e3a0163cc252) **AFTER**: ![after](https://github.com/user-attachments/assets/d09a8b5d-40af-4a7d-b622-e1b2cabcce85) Claude generated this script to quantitatively determine that this change makes the vertical stems on a variety of characters more consistent for Bookerly _only_. <details> <summary>Python script</summary> ```python #!/usr/bin/env python3 """Compare stem consistency across all font families with and without auto-hinting. Run from repo root: python3 compare_all_fonts.py """ import freetype DPI = 150 CHARS = ["k", "l", "h", "i", "b", "d"] SIZES = [12, 14, 16, 18] FONTS = { "Bookerly": "lib/EpdFont/builtinFonts/source/Bookerly/Bookerly-Regular.ttf", "NotoSans": "lib/EpdFont/builtinFonts/source/NotoSans/NotoSans-Regular.ttf", "OpenDyslexic": "lib/EpdFont/builtinFonts/source/OpenDyslexic/OpenDyslexic-Regular.otf", "Ubuntu": "lib/EpdFont/builtinFonts/source/Ubuntu/Ubuntu-Regular.ttf", } MODES = { "default": freetype.FT_LOAD_RENDER, "autohint": freetype.FT_LOAD_RENDER | freetype.FT_LOAD_FORCE_AUTOHINT, } def q4to2(v): if v >= 12: return 3 elif v >= 8: return 2 elif v >= 4: return 1 else: return 0 def get_stem_eff(face, char, flags): gi = face.get_char_index(ord(char)) if gi == 0: return None face.load_glyph(gi, flags) bm = face.glyph.bitmap w, h = bm.width, bm.rows if w == 0 or h == 0: return None p2 = [] for y in range(h): row = [] for x in range(w): row.append(q4to2(bm.buffer[y * bm.pitch + x] >> 4)) p2.append(row) # Measure leftmost stem in stable middle rows mid_start, mid_end = h // 4, h - h // 4 widths = [] for y in range(mid_start, mid_end): first = next((x for x in range(w) if p2[y][x] > 0), -1) if first < 0: continue last = first for x in range(first, w): if p2[y][x] > 0: last = x else: break eff = sum(p2[y][x] for x in range(first, last + 1)) / 3.0 widths.append(eff) return round(sum(widths) / len(widths), 2) if widths else None def main(): for font_name, font_path in FONTS.items(): try: freetype.Face(font_path) except Exception: print(f"\n {font_name}: SKIPPED (file not found)") continue print(f"\n{'=' * 80}") print(f" {font_name}") print(f"{'=' * 80}") for size in SIZES: print(f"\n {size}pt:") print(f" {'':6s}", end="") for c in CHARS: print(f" '{c}' ", end="") print(" | spread") for mode_name, flags in MODES.items(): face = freetype.Face(font_path) face.set_char_size(size << 6, size << 6, DPI, DPI) vals = [] print(f" {mode_name:6s}", end="") for c in CHARS: v = get_stem_eff(face, c, flags) vals.append(v) print(f" {v:5.2f}" if v else " N/A", end="") valid = [v for v in vals if v is not None] spread = max(valid) - min(valid) if len(valid) >= 2 else 0 marker = " <-- inconsistent" if spread > 0.5 else "" print(f" | {spread:.2f}{marker}") if __name__ == "__main__": main() ``` </details> Here are the results. The table compares how the font-generation `autohint` flag affects the range of widths of various characters. Lower `spread` mean that glyph stroke widths should appear more consistent. ``` Spread = max stem width - min stem width across glyphs (lower = more consistent): ┌──────────────┬──────┬─────────┬──────────┬──────────┐ │ Font │ Size │ Default │ Autohint │ Winner │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ Bookerly │ 12pt │ 1.49 │ 1.12 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 1.39 │ 1.13 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 1.38 │ 1.16 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.90 │ 1.58 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ NotoSans │ 12pt │ 1.16 │ 0.94 │ mixed │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 0.83 │ 1.14 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 1.41 │ 1.51 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.74 │ 1.63 │ mixed │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ OpenDyslexic │ 12pt │ 2.22 │ 1.44 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 2.57 │ 3.29 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 3.13 │ 2.60 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 3.21 │ 3.23 │ ~tied │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ Ubuntu │ 12pt │ 1.25 │ 1.31 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 1.41 │ 1.64 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 2.21 │ 1.71 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.80 │ 1.71 │ autohint │ └──────────────┴──────┴─────────┴──────────┴──────────┘ ``` --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? I used AI to make sure I'm not doing something stupid, since I'm not a typography expert. I made the changes though.
2026-02-24 06:13:08 +11:00
{ 0, 0, 23, 0, 0, 0, 0 }, //
perf: Reduce overall flash usage by 30.7% by compressing built-in fonts (#831) ## Summary **What is the goal of this PR?** Compress reader font bitmaps to reduce flash usage by 30.7%. **What changes are included?** - New `EpdFontGroup` struct and extended `EpdFontData` with `groups`/`groupCount` fields - `--compress` flag in `fontconvert.py`: groups glyphs (ASCII base group + groups of 8) and compresses each with raw DEFLATE - `FontDecompressor` class with 4-slot LRU cache for on-demand decompression during rendering - `GfxRenderer` transparently routes bitmap access through `getGlyphBitmap()` (compressed or direct flash) - Uses `uzlib` for decompression with minimal heap overhead. - 48 reader fonts (Bookerly, NotoSans 12-18pt, OpenDyslexic) regenerated with compression; 5 UI fonts unchanged - Round-trip verification script (`verify_compression.py`) runs as part of font generation ## Additional Context ## Flash & RAM | | baseline | font-compression | Difference | |--|--------|-----------------|------------| | Flash (ELF) | 6,302,476 B (96.2%) | 4,365,022 B (66.6%) | -1,937,454 B (-30.7%) | | firmware.bin | 6,468,192 B | 4,531,008 B | -1,937,184 B (-29.9%) | | RAM | 101,700 B (31.0%) | 103,076 B (31.5%) | +1,376 B (+0.5%) | ## Script-Based Grouping (Cold Cache) Comparison of uncompressed baseline vs script-based group compression (4-slot LRU cache, cleared each page). Glyphs are grouped by Unicode block (ASCII, Latin-1, Latin Extended-A, Combining Marks, Cyrillic, General Punctuation, etc.) instead of sequential groups of 8. ### Render Time | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Median** | 414.9 ms | 431.6 ms | +16.7 ms (+4.0%) | | **Pages** | 37 | 37 | | ### Memory Usage | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Heap free (median)** | 187.0 KB | 176.3 KB | -10.7 KB | | **Heap free (min)** | 186.0 KB | 166.5 KB | -19.5 KB | | **Largest block (median)** | 148.0 KB | 128.0 KB | -20.0 KB | | **Largest block (min)** | 148.0 KB | 120.0 KB | -28.0 KB | ### Cache Effectiveness | | Misses/page | Hit rate | |---|---|---| | **Compressed (cold cache)** | 2.1 | 99.85% | ------ ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**YES**_ Implementation was done by Claude Code (Opus 4.6) based on a plan developed collaboratively. All generated font headers were verified with an automated round-trip decompression test. The firmware was compiled successfully but has not yet been tested on-device. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 20:30:15 +11:00
{ 0, 0, 10, 0, 0, 0, 0 }, //
{ 0, 0, 8, 0, 0, 0, 0 }, //
{ 0, 0, 2, 0, 0, 0, 0 }, //
{ 0, 0, 0, 0, 0, 0, 0 }, //
{ 2, 31, 0, -1, 22, 16, 0 }, //
{ 8, 34, 0, -4, 25, 68, 16 }, //
fix: force auto-hinting for Bookerly to fix inconsistent stem widths (#1098) ## Summary Bookerly's native TrueType hinting is effectively a no-op at the sizes used here, causing FreeType to place stems at inconsistent sub-pixel positions. This results in the 'k' stem (8-bit fringe: 0x38=56) falling just below the 2-bit quantization threshold while 'l' and 'h' stems (fringes: 0x4C=76, 0x40=64) land above it --- making 'k' visibly narrower (2.00px vs 2.33px effective width). FreeType's auto-hinter snaps all stems to consistent grid positions, normalizing effective stem width to 2.67px across all glyphs. Adds --force-autohint flag to fontconvert.py and applies it to Bookerly only. NotoSans, OpenDyslexic, and Ubuntu fonts are unaffected. Here is an example of before/after. Take notice of the vertical stems on characters like `l`, `k`, `n`, `i`, etc. The font is Bookerly 12pt regular: **BEFORE**: ![before](https://github.com/user-attachments/assets/65b2acab-ad95-489e-885e-e3a0163cc252) **AFTER**: ![after](https://github.com/user-attachments/assets/d09a8b5d-40af-4a7d-b622-e1b2cabcce85) Claude generated this script to quantitatively determine that this change makes the vertical stems on a variety of characters more consistent for Bookerly _only_. <details> <summary>Python script</summary> ```python #!/usr/bin/env python3 """Compare stem consistency across all font families with and without auto-hinting. Run from repo root: python3 compare_all_fonts.py """ import freetype DPI = 150 CHARS = ["k", "l", "h", "i", "b", "d"] SIZES = [12, 14, 16, 18] FONTS = { "Bookerly": "lib/EpdFont/builtinFonts/source/Bookerly/Bookerly-Regular.ttf", "NotoSans": "lib/EpdFont/builtinFonts/source/NotoSans/NotoSans-Regular.ttf", "OpenDyslexic": "lib/EpdFont/builtinFonts/source/OpenDyslexic/OpenDyslexic-Regular.otf", "Ubuntu": "lib/EpdFont/builtinFonts/source/Ubuntu/Ubuntu-Regular.ttf", } MODES = { "default": freetype.FT_LOAD_RENDER, "autohint": freetype.FT_LOAD_RENDER | freetype.FT_LOAD_FORCE_AUTOHINT, } def q4to2(v): if v >= 12: return 3 elif v >= 8: return 2 elif v >= 4: return 1 else: return 0 def get_stem_eff(face, char, flags): gi = face.get_char_index(ord(char)) if gi == 0: return None face.load_glyph(gi, flags) bm = face.glyph.bitmap w, h = bm.width, bm.rows if w == 0 or h == 0: return None p2 = [] for y in range(h): row = [] for x in range(w): row.append(q4to2(bm.buffer[y * bm.pitch + x] >> 4)) p2.append(row) # Measure leftmost stem in stable middle rows mid_start, mid_end = h // 4, h - h // 4 widths = [] for y in range(mid_start, mid_end): first = next((x for x in range(w) if p2[y][x] > 0), -1) if first < 0: continue last = first for x in range(first, w): if p2[y][x] > 0: last = x else: break eff = sum(p2[y][x] for x in range(first, last + 1)) / 3.0 widths.append(eff) return round(sum(widths) / len(widths), 2) if widths else None def main(): for font_name, font_path in FONTS.items(): try: freetype.Face(font_path) except Exception: print(f"\n {font_name}: SKIPPED (file not found)") continue print(f"\n{'=' * 80}") print(f" {font_name}") print(f"{'=' * 80}") for size in SIZES: print(f"\n {size}pt:") print(f" {'':6s}", end="") for c in CHARS: print(f" '{c}' ", end="") print(" | spread") for mode_name, flags in MODES.items(): face = freetype.Face(font_path) face.set_char_size(size << 6, size << 6, DPI, DPI) vals = [] print(f" {mode_name:6s}", end="") for c in CHARS: v = get_stem_eff(face, c, flags) vals.append(v) print(f" {v:5.2f}" if v else " N/A", end="") valid = [v for v in vals if v is not None] spread = max(valid) - min(valid) if len(valid) >= 2 else 0 marker = " <-- inconsistent" if spread > 0.5 else "" print(f" | {spread:.2f}{marker}") if __name__ == "__main__": main() ``` </details> Here are the results. The table compares how the font-generation `autohint` flag affects the range of widths of various characters. Lower `spread` mean that glyph stroke widths should appear more consistent. ``` Spread = max stem width - min stem width across glyphs (lower = more consistent): ┌──────────────┬──────┬─────────┬──────────┬──────────┐ │ Font │ Size │ Default │ Autohint │ Winner │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ Bookerly │ 12pt │ 1.49 │ 1.12 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 1.39 │ 1.13 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 1.38 │ 1.16 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.90 │ 1.58 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ NotoSans │ 12pt │ 1.16 │ 0.94 │ mixed │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 0.83 │ 1.14 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 1.41 │ 1.51 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.74 │ 1.63 │ mixed │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ OpenDyslexic │ 12pt │ 2.22 │ 1.44 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 2.57 │ 3.29 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 3.13 │ 2.60 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 3.21 │ 3.23 │ ~tied │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ Ubuntu │ 12pt │ 1.25 │ 1.31 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 1.41 │ 1.64 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 2.21 │ 1.71 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.80 │ 1.71 │ autohint │ └──────────────┴──────┴─────────┴──────────┴──────────┘ ``` --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? I used AI to make sure I'm not doing something stupid, since I'm not a typography expert. I made the changes though.
2026-02-24 06:13:08 +11:00
{ 12, 36, 0, -6, 27, 108, 84 }, //
{ 12, 36, 0, -6, 27, 108, 192 }, //
{ 12, 3, 14, 1, 11, 9, 300 }, //
{ 12, 3, 14, 1, 11, 9, 309 }, //
{ 18, 3, 23, 3, 15, 14, 318 }, //
{ 19, 3, 19, 0, 12, 15, 332 }, //
{ 38, 3, 38, 0, 12, 29, 347 }, // —
{ 38, 3, 38, 0, 12, 29, 376 }, // ―
{ 12, 39, 19, 3, 30, 117, 405 }, // ‖
{ 19, 8, 19, 0, -1, 38, 522 }, // ‗
{ 8, 12, 11, 3, 29, 24, 560 }, //
{ 8, 12, 11, 2, 29, 24, 584 }, //
{ 8, 12, 11, 1, 5, 24, 608 }, //
{ 7, 12, 9, 1, 29, 21, 632 }, //
{ 16, 12, 19, 3, 29, 48, 653 }, // “
{ 16, 12, 19, 2, 29, 48, 701 }, // ”
{ 15, 12, 19, 1, 5, 45, 749 }, // „
{ 15, 12, 16, 1, 29, 45, 794 }, // ‟
{ 16, 25, 18, 2, 27, 100, 839 }, // †
{ 18, 29, 18, 0, 27, 131, 939 }, // ‡
{ 9, 8, 11, 1, 14, 18, 1070 }, // •
{ 13, 14, 23, 5, 20, 46, 1088 }, // ‣
{ 6, 5, 10, 2, 5, 8, 1134 }, //
{ 16, 5, 19, 1, 5, 20, 1142 }, // ‥
{ 31, 5, 38, 3, 5, 39, 1162 }, // …
{ 6, 5, 10, 2, 13, 8, 1201 }, // ‧
{ 0, 0, 0, 0, 0, 0, 1209 }, //
{ 0, 0, 0, 0, 0, 0, 1209 }, //
{ 12, 36, 0, -6, 27, 108, 1209 }, //
{ 12, 36, 0, -6, 27, 108, 1317 }, //
{ 12, 36, 0, -6, 27, 108, 1425 }, //
{ 16, 36, 0, -8, 27, 144, 1533 }, //
{ 16, 36, 0, -8, 27, 144, 1677 }, //
{ 0, 0, 4, 0, 0, 0, 1821 }, //
{ 47, 31, 51, 2, 29, 365, 1821 }, // ‰
{ 8, 13, 10, 1, 27, 26, 2186 }, //
{ 15, 13, 17, 1, 27, 49, 2212 }, // ″
{ 23, 13, 24, 1, 27, 75, 2261 }, // ‴
{ 8, 13, 10, 1, 27, 26, 2336 }, //
{ 16, 13, 18, 1, 27, 52, 2362 }, // ‶
{ 24, 13, 26, 1, 27, 78, 2414 }, // ‷
{ 17, 8, 19, 1, 0, 34, 2492 }, // ‸
{ 11, 14, 12, 1, 17, 39, 2526 }, //
{ 11, 14, 12, 0, 17, 39, 2565 }, //
{ 24, 27, 23, 0, 26, 162, 2604 }, // ※
{ 20, 29, 22, 2, 29, 145, 2766 }, // ‼
{ 19, 3, 19, 0, 31, 15, 2911 }, // ‾
{ 9, 3, 11, 1, 11, 7, 2926 }, //
{ 23, 30, 9, -7, 28, 173, 2933 }, //
{ 27, 27, 30, 3, 27, 183, 3106 }, // ⁇
{ 24, 29, 26, 3, 29, 174, 3289 }, // ⁈
{ 25, 29, 27, 2, 29, 182, 3463 }, // ⁉
{ 21, 8, 38, 8, 16, 42, 3645 }, //
{ 30, 13, 32, 1, 27, 98, 3687 }, // ⁗
{ 0, 0, 8, 0, 0, 0, 3785 }, //
{ 0, 0, 0, 0, 0, 0, 3785 }, //
{ 0, 0, 0, 0, 0, 0, 3785 }, //
{ 0, 0, 0, 0, 0, 0, 3785 }, //
{ 0, 0, 0, 0, 0, 0, 3785 }, //
{ 0, 0, 0, 0, 0, 0, 3785 }, //
{ 15, 16, 17, 1, 30, 60, 0 }, // ⁰
{ 15, 16, 17, 1, 30, 60, 60 }, // ⁴
{ 15, 16, 17, 1, 30, 60, 120 }, // ⁵
{ 15, 16, 17, 2, 30, 60, 180 }, // ⁶
{ 13, 16, 17, 4, 30, 52, 240 }, // ⁷
{ 14, 16, 17, 1, 30, 56, 292 }, // ⁸
{ 14, 16, 17, 1, 30, 56, 348 }, // ⁹
{ 14, 13, 21, 4, 27, 46, 404 }, // ⁿ
{ 15, 17, 17, 1, 12, 64, 450 }, // ₀
{ 10, 18, 17, 3, 13, 45, 514 }, // ₁
{ 14, 17, 17, 1, 12, 60, 559 }, // ₂
{ 13, 17, 17, 1, 12, 56, 619 }, // ₃
{ 15, 17, 17, 1, 12, 64, 675 }, // ₄
{ 15, 17, 17, 1, 12, 64, 739 }, // ₅
{ 15, 17, 17, 2, 12, 64, 803 }, // ₆
{ 13, 17, 17, 4, 12, 56, 867 }, // ₇
{ 14, 17, 17, 1, 12, 60, 923 }, // ₈
{ 14, 17, 17, 1, 12, 60, 983 }, // ₉
{ 23, 27, 23, 0, 27, 156, 0 }, // ₣
{ 24, 27, 23, -1, 27, 162, 156 }, // ₤
{ 45, 27, 47, 0, 27, 304, 318 }, // ₧
{ 26, 27, 23, -1, 27, 176, 622 }, // €
{ 22, 15, 38, 8, 20, 83, 0 }, // ←
{ 15, 24, 38, 11, 25, 90, 83 }, // ↑
{ 22, 15, 38, 8, 20, 83, 173 }, // →
{ 15, 24, 38, 11, 25, 90, 256 }, // ↓
{ 23, 16, 38, 7, 21, 92, 346 }, // ↔
{ 16, 26, 38, 11, 26, 104, 438 }, // ↕
{ 16, 24, 38, 11, 25, 96, 542 }, // ↨
{ 16, 25, 38, 11, 25, 100, 638 }, // ↲
{ 16, 25, 38, 11, 25, 100, 738 }, // ↳
{ 21, 18, 38, 8, 22, 95, 838 }, // ↵
{ 22, 18, 38, 8, 22, 99, 933 }, // ⇐
{ 18, 22, 38, 10, 24, 99, 1032 }, // ⇑
{ 22, 18, 38, 8, 22, 99, 1131 }, // ⇒
{ 18, 22, 38, 10, 24, 99, 1230 }, // ⇓
{ 23, 17, 38, 7, 21, 98, 1329 }, // ⇔
{ 25, 28, 38, 6, 27, 175, 0 }, // ∀
{ 18, 30, 23, 3, 29, 135, 175 }, // ∂
{ 17, 26, 38, 10, 26, 111, 310 }, // ∃
{ 28, 29, 38, 5, 27, 203, 421 }, // ∅
{ 23, 27, 25, 1, 27, 156, 624 }, // ∆
{ 23, 27, 38, 7, 26, 156, 780 }, // ∇
{ 24, 26, 38, 7, 26, 156, 936 }, // ∈
{ 24, 33, 38, 7, 29, 198, 1092 }, // ∉
{ 24, 20, 38, 7, 23, 120, 1290 }, // ∊
{ 25, 26, 38, 6, 26, 163, 1410 }, // ∋
{ 25, 33, 38, 6, 29, 207, 1573 }, // ∌
{ 25, 20, 38, 6, 23, 125, 1780 }, // ∍
{ 28, 32, 30, 1, 26, 224, 1905 }, // ∏
{ 23, 33, 23, 0, 26, 190, 2129 }, // ∑
{ 16, 3, 23, 4, 14, 12, 2319 }, //
{ 21, 29, 19, -1, 27, 153, 2331 }, //
{ 15, 29, 19, 2, 27, 109, 2484 }, //
{ 17, 18, 23, 3, 22, 77, 2593 }, //
{ 12, 13, 23, 5, 19, 39, 2670 }, // ∘
{ 6, 6, 23, 9, 13, 9, 2709 }, // ∙
{ 24, 36, 23, 0, 31, 216, 2718 }, // √
{ 18, 14, 23, 3, 19, 63, 2934 }, // ∝
{ 22, 12, 23, 1, 18, 66, 2997 }, // ∞
{ 23, 26, 38, 7, 26, 150, 3063 }, // ∟
{ 26, 27, 38, 5, 27, 176, 3213 }, // ∠
{ 5, 38, 19, 7, 29, 48, 3389 }, //
{ 11, 38, 19, 4, 29, 105, 3437 }, // ∥
{ 24, 26, 38, 7, 26, 156, 3542 }, // ∧
{ 24, 26, 38, 7, 26, 156, 3698 }, //
{ 22, 27, 38, 8, 27, 149, 3854 }, // ∩
{ 22, 27, 38, 8, 26, 149, 4003 }, //
{ 20, 38, 23, 2, 29, 190, 4152 }, // ∫
{ 23, 21, 38, 7, 20, 121, 4342 }, // ∴
{ 23, 21, 38, 7, 20, 121, 4463 }, // ∵
{ 9, 20, 11, 1, 23, 45, 4584 }, //
{ 24, 21, 38, 7, 20, 126, 4629 }, // ∷
{ 21, 6, 38, 8, 14, 32, 4755 }, //
{ 21, 19, 38, 8, 22, 100, 4787 }, // ≅
{ 18, 13, 23, 3, 19, 59, 4887 }, // ≈
{ 20, 13, 38, 9, 17, 65, 4946 }, // ≍
{ 16, 17, 23, 4, 21, 68, 5011 }, // ≠
{ 20, 16, 38, 9, 19, 80, 5079 }, // ≡
{ 16, 23, 23, 4, 23, 92, 5159 }, // ≤
{ 17, 23, 23, 3, 23, 98, 5251 }, // ≥
{ 30, 18, 38, 4, 22, 135, 5349 }, // ≪
{ 30, 18, 38, 4, 22, 135, 5484 }, // ≫
{ 24, 20, 38, 7, 23, 120, 5619 }, // ⊃
{ 24, 33, 38, 7, 29, 198, 5739 }, // ⊄
{ 24, 33, 38, 7, 29, 198, 5937 }, // ⊅
{ 24, 26, 38, 7, 26, 156, 6135 }, // ⊆
{ 24, 26, 38, 7, 26, 156, 6291 }, // ⊇
{ 28, 28, 38, 5, 27, 196, 6447 }, // ⊕
{ 28, 28, 38, 5, 27, 196, 6643 }, // ⊖
{ 27, 28, 38, 5, 27, 189, 6839 }, // ⊗
{ 27, 28, 38, 5, 27, 189, 7028 }, // ⊘
{ 22, 26, 38, 8, 26, 143, 7217 }, // ⊥
{ 6, 6, 23, 9, 13, 9, 7360 }, // ⋅
{ 31, 6, 38, 3, 13, 47, 7369 }, // ⋯
{ 36, 36, 38, 1, 31, 324, 0 }, // <20>
};
static const EpdUnicodeInterval bookerly_18_italicIntervals[] = {
{ 0x0, 0x0, 0x0 },
{ 0x8, 0x9, 0x1 },
{ 0xD, 0xD, 0x3 },
{ 0x1D, 0x1D, 0x4 },
{ 0x20, 0x7E, 0x5 },
{ 0xA0, 0xFF, 0x64 },
{ 0x100, 0x17F, 0xC4 },
{ 0x300, 0x304, 0x144 },
{ 0x306, 0x30C, 0x149 },
{ 0x30F, 0x30F, 0x150 },
{ 0x311, 0x315, 0x151 },
{ 0x31B, 0x31B, 0x156 },
{ 0x323, 0x329, 0x157 },
{ 0x32D, 0x32E, 0x15E },
{ 0x330, 0x331, 0x160 },
{ 0x342, 0x342, 0x162 },
{ 0x344, 0x345, 0x163 },
{ 0x400, 0x45F, 0x165 },
{ 0x462, 0x463, 0x1C5 },
{ 0x472, 0x475, 0x1C7 },
{ 0x48A, 0x4FF, 0x1CB },
{ 0x2000, 0x2030, 0x241 },
{ 0x2032, 0x203C, 0x272 },
{ 0x203E, 0x203E, 0x27D },
{ 0x2043, 0x2044, 0x27E },
{ 0x2047, 0x2049, 0x280 },
{ 0x2053, 0x2053, 0x283 },
{ 0x2057, 0x2057, 0x284 },
{ 0x205F, 0x2064, 0x285 },
{ 0x2070, 0x2070, 0x28B },
{ 0x2074, 0x2079, 0x28C },
{ 0x207F, 0x2089, 0x292 },
{ 0x20A3, 0x20A4, 0x29D },
{ 0x20A7, 0x20A7, 0x29F },
{ 0x20AC, 0x20AC, 0x2A0 },
{ 0x2190, 0x2195, 0x2A1 },
{ 0x21A8, 0x21A8, 0x2A7 },
{ 0x21B2, 0x21B3, 0x2A8 },
{ 0x21B5, 0x21B5, 0x2AA },
{ 0x21D0, 0x21D4, 0x2AB },
{ 0x2200, 0x2200, 0x2B0 },
{ 0x2202, 0x2203, 0x2B1 },
{ 0x2205, 0x220D, 0x2B3 },
{ 0x220F, 0x220F, 0x2BC },
{ 0x2211, 0x2212, 0x2BD },
{ 0x2215, 0x221A, 0x2BF },
{ 0x221D, 0x2220, 0x2C5 },
{ 0x2223, 0x2223, 0x2C9 },
{ 0x2225, 0x2225, 0x2CA },
{ 0x2227, 0x222B, 0x2CB },
{ 0x2234, 0x2237, 0x2D0 },
{ 0x223C, 0x223C, 0x2D4 },
{ 0x2245, 0x2245, 0x2D5 },
{ 0x2248, 0x2248, 0x2D6 },
{ 0x224D, 0x224D, 0x2D7 },
{ 0x2260, 0x2261, 0x2D8 },
{ 0x2264, 0x2265, 0x2DA },
{ 0x226A, 0x226B, 0x2DC },
{ 0x2283, 0x2287, 0x2DE },
{ 0x2295, 0x2298, 0x2E3 },
{ 0x22A5, 0x22A5, 0x2E7 },
{ 0x22C5, 0x22C5, 0x2E8 },
{ 0x22EF, 0x22EF, 0x2E9 },
{ 0xFFFD, 0xFFFD, 0x2EA },
};
perf: Reduce overall flash usage by 30.7% by compressing built-in fonts (#831) ## Summary **What is the goal of this PR?** Compress reader font bitmaps to reduce flash usage by 30.7%. **What changes are included?** - New `EpdFontGroup` struct and extended `EpdFontData` with `groups`/`groupCount` fields - `--compress` flag in `fontconvert.py`: groups glyphs (ASCII base group + groups of 8) and compresses each with raw DEFLATE - `FontDecompressor` class with 4-slot LRU cache for on-demand decompression during rendering - `GfxRenderer` transparently routes bitmap access through `getGlyphBitmap()` (compressed or direct flash) - Uses `uzlib` for decompression with minimal heap overhead. - 48 reader fonts (Bookerly, NotoSans 12-18pt, OpenDyslexic) regenerated with compression; 5 UI fonts unchanged - Round-trip verification script (`verify_compression.py`) runs as part of font generation ## Additional Context ## Flash & RAM | | baseline | font-compression | Difference | |--|--------|-----------------|------------| | Flash (ELF) | 6,302,476 B (96.2%) | 4,365,022 B (66.6%) | -1,937,454 B (-30.7%) | | firmware.bin | 6,468,192 B | 4,531,008 B | -1,937,184 B (-29.9%) | | RAM | 101,700 B (31.0%) | 103,076 B (31.5%) | +1,376 B (+0.5%) | ## Script-Based Grouping (Cold Cache) Comparison of uncompressed baseline vs script-based group compression (4-slot LRU cache, cleared each page). Glyphs are grouped by Unicode block (ASCII, Latin-1, Latin Extended-A, Combining Marks, Cyrillic, General Punctuation, etc.) instead of sequential groups of 8. ### Render Time | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Median** | 414.9 ms | 431.6 ms | +16.7 ms (+4.0%) | | **Pages** | 37 | 37 | | ### Memory Usage | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Heap free (median)** | 187.0 KB | 176.3 KB | -10.7 KB | | **Heap free (min)** | 186.0 KB | 166.5 KB | -19.5 KB | | **Largest block (median)** | 148.0 KB | 128.0 KB | -20.0 KB | | **Largest block (min)** | 148.0 KB | 120.0 KB | -28.0 KB | ### Cache Effectiveness | | Misses/page | Hit rate | |---|---|---| | **Compressed (cold cache)** | 2.1 | 99.85% | ------ ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**YES**_ Implementation was done by Claude Code (Opus 4.6) based on a plan developed collaboratively. All generated font headers were verified with an automated round-trip decompression test. The firmware was compiled successfully but has not yet been tested on-device. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 20:30:15 +11:00
static const EpdFontGroup bookerly_18_italicGroups[] = {
fix: force auto-hinting for Bookerly to fix inconsistent stem widths (#1098) ## Summary Bookerly's native TrueType hinting is effectively a no-op at the sizes used here, causing FreeType to place stems at inconsistent sub-pixel positions. This results in the 'k' stem (8-bit fringe: 0x38=56) falling just below the 2-bit quantization threshold while 'l' and 'h' stems (fringes: 0x4C=76, 0x40=64) land above it --- making 'k' visibly narrower (2.00px vs 2.33px effective width). FreeType's auto-hinter snaps all stems to consistent grid positions, normalizing effective stem width to 2.67px across all glyphs. Adds --force-autohint flag to fontconvert.py and applies it to Bookerly only. NotoSans, OpenDyslexic, and Ubuntu fonts are unaffected. Here is an example of before/after. Take notice of the vertical stems on characters like `l`, `k`, `n`, `i`, etc. The font is Bookerly 12pt regular: **BEFORE**: ![before](https://github.com/user-attachments/assets/65b2acab-ad95-489e-885e-e3a0163cc252) **AFTER**: ![after](https://github.com/user-attachments/assets/d09a8b5d-40af-4a7d-b622-e1b2cabcce85) Claude generated this script to quantitatively determine that this change makes the vertical stems on a variety of characters more consistent for Bookerly _only_. <details> <summary>Python script</summary> ```python #!/usr/bin/env python3 """Compare stem consistency across all font families with and without auto-hinting. Run from repo root: python3 compare_all_fonts.py """ import freetype DPI = 150 CHARS = ["k", "l", "h", "i", "b", "d"] SIZES = [12, 14, 16, 18] FONTS = { "Bookerly": "lib/EpdFont/builtinFonts/source/Bookerly/Bookerly-Regular.ttf", "NotoSans": "lib/EpdFont/builtinFonts/source/NotoSans/NotoSans-Regular.ttf", "OpenDyslexic": "lib/EpdFont/builtinFonts/source/OpenDyslexic/OpenDyslexic-Regular.otf", "Ubuntu": "lib/EpdFont/builtinFonts/source/Ubuntu/Ubuntu-Regular.ttf", } MODES = { "default": freetype.FT_LOAD_RENDER, "autohint": freetype.FT_LOAD_RENDER | freetype.FT_LOAD_FORCE_AUTOHINT, } def q4to2(v): if v >= 12: return 3 elif v >= 8: return 2 elif v >= 4: return 1 else: return 0 def get_stem_eff(face, char, flags): gi = face.get_char_index(ord(char)) if gi == 0: return None face.load_glyph(gi, flags) bm = face.glyph.bitmap w, h = bm.width, bm.rows if w == 0 or h == 0: return None p2 = [] for y in range(h): row = [] for x in range(w): row.append(q4to2(bm.buffer[y * bm.pitch + x] >> 4)) p2.append(row) # Measure leftmost stem in stable middle rows mid_start, mid_end = h // 4, h - h // 4 widths = [] for y in range(mid_start, mid_end): first = next((x for x in range(w) if p2[y][x] > 0), -1) if first < 0: continue last = first for x in range(first, w): if p2[y][x] > 0: last = x else: break eff = sum(p2[y][x] for x in range(first, last + 1)) / 3.0 widths.append(eff) return round(sum(widths) / len(widths), 2) if widths else None def main(): for font_name, font_path in FONTS.items(): try: freetype.Face(font_path) except Exception: print(f"\n {font_name}: SKIPPED (file not found)") continue print(f"\n{'=' * 80}") print(f" {font_name}") print(f"{'=' * 80}") for size in SIZES: print(f"\n {size}pt:") print(f" {'':6s}", end="") for c in CHARS: print(f" '{c}' ", end="") print(" | spread") for mode_name, flags in MODES.items(): face = freetype.Face(font_path) face.set_char_size(size << 6, size << 6, DPI, DPI) vals = [] print(f" {mode_name:6s}", end="") for c in CHARS: v = get_stem_eff(face, c, flags) vals.append(v) print(f" {v:5.2f}" if v else " N/A", end="") valid = [v for v in vals if v is not None] spread = max(valid) - min(valid) if len(valid) >= 2 else 0 marker = " <-- inconsistent" if spread > 0.5 else "" print(f" | {spread:.2f}{marker}") if __name__ == "__main__": main() ``` </details> Here are the results. The table compares how the font-generation `autohint` flag affects the range of widths of various characters. Lower `spread` mean that glyph stroke widths should appear more consistent. ``` Spread = max stem width - min stem width across glyphs (lower = more consistent): ┌──────────────┬──────┬─────────┬──────────┬──────────┐ │ Font │ Size │ Default │ Autohint │ Winner │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ Bookerly │ 12pt │ 1.49 │ 1.12 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 1.39 │ 1.13 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 1.38 │ 1.16 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.90 │ 1.58 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ NotoSans │ 12pt │ 1.16 │ 0.94 │ mixed │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 0.83 │ 1.14 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 1.41 │ 1.51 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.74 │ 1.63 │ mixed │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ OpenDyslexic │ 12pt │ 2.22 │ 1.44 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 2.57 │ 3.29 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 3.13 │ 2.60 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 3.21 │ 3.23 │ ~tied │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ Ubuntu │ 12pt │ 1.25 │ 1.31 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 14pt │ 1.41 │ 1.64 │ default │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 16pt │ 2.21 │ 1.71 │ autohint │ ├──────────────┼──────┼─────────┼──────────┼──────────┤ │ │ 18pt │ 1.80 │ 1.71 │ autohint │ └──────────────┴──────┴─────────┴──────────┴──────────┘ ``` --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? I used AI to make sure I'm not doing something stupid, since I'm not a typography expert. I made the changes though.
2026-02-24 06:13:08 +11:00
{ 0, 5794, 12516, 100, 0 },
{ 5794, 5506, 14950, 96, 100 },
{ 11300, 8326, 24028, 128, 196 },
{ 19626, 446, 660, 33, 324 },
{ 20072, 12659, 39021, 220, 357 },
{ 32731, 1638, 3785, 74, 577 },
{ 34369, 645, 1043, 18, 651 },
{ 35014, 407, 798, 4, 669 },
{ 35421, 647, 1427, 15, 673 },
{ 36068, 2768, 7416, 58, 688 },
{ 38836, 168, 324, 1, 746 },
perf: Reduce overall flash usage by 30.7% by compressing built-in fonts (#831) ## Summary **What is the goal of this PR?** Compress reader font bitmaps to reduce flash usage by 30.7%. **What changes are included?** - New `EpdFontGroup` struct and extended `EpdFontData` with `groups`/`groupCount` fields - `--compress` flag in `fontconvert.py`: groups glyphs (ASCII base group + groups of 8) and compresses each with raw DEFLATE - `FontDecompressor` class with 4-slot LRU cache for on-demand decompression during rendering - `GfxRenderer` transparently routes bitmap access through `getGlyphBitmap()` (compressed or direct flash) - Uses `uzlib` for decompression with minimal heap overhead. - 48 reader fonts (Bookerly, NotoSans 12-18pt, OpenDyslexic) regenerated with compression; 5 UI fonts unchanged - Round-trip verification script (`verify_compression.py`) runs as part of font generation ## Additional Context ## Flash & RAM | | baseline | font-compression | Difference | |--|--------|-----------------|------------| | Flash (ELF) | 6,302,476 B (96.2%) | 4,365,022 B (66.6%) | -1,937,454 B (-30.7%) | | firmware.bin | 6,468,192 B | 4,531,008 B | -1,937,184 B (-29.9%) | | RAM | 101,700 B (31.0%) | 103,076 B (31.5%) | +1,376 B (+0.5%) | ## Script-Based Grouping (Cold Cache) Comparison of uncompressed baseline vs script-based group compression (4-slot LRU cache, cleared each page). Glyphs are grouped by Unicode block (ASCII, Latin-1, Latin Extended-A, Combining Marks, Cyrillic, General Punctuation, etc.) instead of sequential groups of 8. ### Render Time | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Median** | 414.9 ms | 431.6 ms | +16.7 ms (+4.0%) | | **Pages** | 37 | 37 | | ### Memory Usage | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Heap free (median)** | 187.0 KB | 176.3 KB | -10.7 KB | | **Heap free (min)** | 186.0 KB | 166.5 KB | -19.5 KB | | **Largest block (median)** | 148.0 KB | 128.0 KB | -20.0 KB | | **Largest block (min)** | 148.0 KB | 120.0 KB | -28.0 KB | ### Cache Effectiveness | | Misses/page | Hit rate | |---|---|---| | **Compressed (cold cache)** | 2.1 | 99.85% | ------ ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**YES**_ Implementation was done by Claude Code (Opus 4.6) based on a plan developed collaboratively. All generated font headers were verified with an automated round-trip decompression test. The firmware was compiled successfully but has not yet been tested on-device. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 20:30:15 +11:00
};
static const EpdFontData bookerly_18_italic = {
bookerly_18_italicBitmaps,
bookerly_18_italicGlyphs,
bookerly_18_italicIntervals,
64,
49,
40,
-10,
true,
perf: Reduce overall flash usage by 30.7% by compressing built-in fonts (#831) ## Summary **What is the goal of this PR?** Compress reader font bitmaps to reduce flash usage by 30.7%. **What changes are included?** - New `EpdFontGroup` struct and extended `EpdFontData` with `groups`/`groupCount` fields - `--compress` flag in `fontconvert.py`: groups glyphs (ASCII base group + groups of 8) and compresses each with raw DEFLATE - `FontDecompressor` class with 4-slot LRU cache for on-demand decompression during rendering - `GfxRenderer` transparently routes bitmap access through `getGlyphBitmap()` (compressed or direct flash) - Uses `uzlib` for decompression with minimal heap overhead. - 48 reader fonts (Bookerly, NotoSans 12-18pt, OpenDyslexic) regenerated with compression; 5 UI fonts unchanged - Round-trip verification script (`verify_compression.py`) runs as part of font generation ## Additional Context ## Flash & RAM | | baseline | font-compression | Difference | |--|--------|-----------------|------------| | Flash (ELF) | 6,302,476 B (96.2%) | 4,365,022 B (66.6%) | -1,937,454 B (-30.7%) | | firmware.bin | 6,468,192 B | 4,531,008 B | -1,937,184 B (-29.9%) | | RAM | 101,700 B (31.0%) | 103,076 B (31.5%) | +1,376 B (+0.5%) | ## Script-Based Grouping (Cold Cache) Comparison of uncompressed baseline vs script-based group compression (4-slot LRU cache, cleared each page). Glyphs are grouped by Unicode block (ASCII, Latin-1, Latin Extended-A, Combining Marks, Cyrillic, General Punctuation, etc.) instead of sequential groups of 8. ### Render Time | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Median** | 414.9 ms | 431.6 ms | +16.7 ms (+4.0%) | | **Pages** | 37 | 37 | | ### Memory Usage | | Baseline | Compressed (cold cache) | Difference | |---|---|---|---| | **Heap free (median)** | 187.0 KB | 176.3 KB | -10.7 KB | | **Heap free (min)** | 186.0 KB | 166.5 KB | -19.5 KB | | **Largest block (median)** | 148.0 KB | 128.0 KB | -20.0 KB | | **Largest block (min)** | 148.0 KB | 120.0 KB | -28.0 KB | ### Cache Effectiveness | | Misses/page | Hit rate | |---|---|---| | **Compressed (cold cache)** | 2.1 | 99.85% | ------ ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**YES**_ Implementation was done by Claude Code (Opus 4.6) based on a plan developed collaboratively. All generated font headers were verified with an automated round-trip decompression test. The firmware was compiled successfully but has not yet been tested on-device. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 20:30:15 +11:00
bookerly_18_italicGroups,
11,
};