From 07bca509e7a1d106f04803f32ca1adf763bd8f04 Mon Sep 17 00:00:00 2001 From: Marcel Cornu Date: Fri, 19 Apr 2024 16:51:47 +0100 Subject: [PATCH 01/19] tools: use clang-format for style checking Signed-off-by: Marcel Cornu --- .clang-format | 46 ++++++++++++++++++++++++++++++++++++++++++ .clang-format-ignore | 2 ++ CONTRIBUTING.md | 6 +++--- tools/check_format.sh | 47 ++++++++++++++++++++++++------------------- tools/format.sh | 43 +++++++++++++++++++++++++++++++++++++++ tools/iindent | 2 -- 6 files changed, 120 insertions(+), 26 deletions(-) create mode 100644 .clang-format create mode 100644 .clang-format-ignore create mode 100755 tools/format.sh delete mode 100755 tools/iindent diff --git a/.clang-format b/.clang-format new file mode 100644 index 00000000..0c854c6c --- /dev/null +++ b/.clang-format @@ -0,0 +1,46 @@ +# Copyright (c) 2024, Intel Corporation +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of Intel Corporation nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +BasedOnStyle: LLVM +IndentWidth: 8 +Language: Cpp +BreakBeforeBraces: Linux +AllowShortIfStatementsOnASingleLine: false +IndentCaseLabels: false +UseTab: Never +AlignConsecutiveMacros: true +AlignTrailingComments: true +AlwaysBreakAfterReturnType: All +SortIncludes: false +BreakBeforeInheritanceComma: true +AllowAllParametersOfDeclarationOnNextLine: false +BinPackParameters: true +BinPackArguments: true +ReflowComments: true +ColumnLimit: 100 +Cpp11BracedListStyle: false +MaxEmptyLinesToKeep: 1 +ContinuationIndentWidth: 8 +SpaceAfterCStyleCast: true diff --git a/.clang-format-ignore b/.clang-format-ignore new file mode 100644 index 00000000..8cf373ac --- /dev/null +++ b/.clang-format-ignore @@ -0,0 +1,2 @@ +include/aarch64_multibinary.h +**/aarch64/*.h diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index fb3dfbf2..dffa0029 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -25,10 +25,10 @@ patches, file issues, and ask questions on our [mailing list]. ## Coding Style -The coding style for ISA-L C code roughly follows linux kernel guidelines. Use -the included indent script to format C code. +The coding style for ISA-L C code is roughly based on LLVM style with +some customizations. Use the included format script to format C code. - ./tools/iindent your_files.c + ./tools/format.sh And use check format script before submitting. diff --git a/tools/check_format.sh b/tools/check_format.sh index fb39ab5b..fe0f829c 100755 --- a/tools/check_format.sh +++ b/tools/check_format.sh @@ -3,12 +3,23 @@ set -e rc=0 verbose=0 -# NOTE: there is a bug in GNU indent command line parse where it says, that -# -il6 require numeric parameter. This is because it treat it like "-i" -# param. Here we pass -i8 which is default for linux code style and -# we use long parameter name for indent label. -indent_args='-i8 -linux -l95 -cp1 -lps -ncs --indent-label6' -function iver { printf "%03d%03d%03d%03d" $(echo "$@" | sed 's/^.* indent//; y/./ /'); } +clang_format_min_version=18 + +function clang_format_version() { + version_str=$($clang_format --version) + regex="[0-9]+" + if [[ $version_str =~ $regex ]]; then + major_version="${BASH_REMATCH[0]}" + echo $major_version + fi +} + +# set clang-format binary if not set externally +if [[ -z $CLANGFORMAT ]]; then + clang_format="clang-format" +else + clang_format=$CLANGFORMAT +fi while [ -n "$*" ]; do case "$1" in @@ -29,26 +40,20 @@ if ! git rev-parse --is-inside-work-tree >& /dev/null; then exit 1 fi -# On FreeBSD we need to use gindent -for indent_tool in indent gindent ''; do - if hash $indent_tool && [ $(iver $($indent_tool --version)) -ge $(iver 2.2.12) ]; then - break - fi -done - -if [ -n "$indent_tool" ]; then - echo "Checking C files for coding style..." - for f in `git ls-files '*.c'`; do +if [ $(clang_format_version) -ge $clang_format_min_version ]; then + echo "Checking C files for coding style (clang-format v$(clang_format_version))..." + for f in `git ls-files '*.[c|h]'`; do [ "$verbose" -gt 0 ] && echo "checking style on $f" - if ! $indent_tool $indent_args -st $f | diff -q $f - >& /dev/null; then + if ! $clang_format -style=file --dry-run --Werror "$f" >/dev/null 2>&1; then echo " File found with formatting issues: $f" - [ "$verbose" -gt 0 ] 2> /dev/null && $indent_tool $indent_args -st $f | diff -u $f - + [ "$verbose" -gt 0 ] && $clang_format -style=file --dry-run "$f" rc=1 fi done - [ "$rc" -gt 0 ] && echo " Run ./tools/iindent on files" + [ "$rc" -gt 0 ] && echo " Run ./tools/format.sh to fix formatting issues" else - echo "You do not have a recent indent installed so your code style is not being checked!" + echo "You do not have clang-format version ${clang_format_min_version}+" \ + "installed so your code style is not being checked!" fi if hash grep; then @@ -74,7 +79,7 @@ while read -r perm _res0 _res1 f; do echo " File found with permissions issue ($perm): $f" rc=1 fi -done <<< $(git ls-files -s -- ':(exclude)*.sh' ':(exclude)*iindent') +done <<< $(git ls-files -s -- ':(exclude)*.sh') echo "Checking script files for permissions..." while read -r perm _res0 _res1 f; do diff --git a/tools/format.sh b/tools/format.sh new file mode 100755 index 00000000..59490a82 --- /dev/null +++ b/tools/format.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +verbose=0 +clang_format_min_version=18 + +function clang_format_version() { + version_str=$($clang_format --version) + regex="[0-9]+" + if [[ $version_str =~ $regex ]]; then + major_version="${BASH_REMATCH[0]}" + echo $major_version + fi +} + +# set clang-format binary if not set externally +if [[ -z $CLANGFORMAT ]]; then + clang_format="clang-format" +else + clang_format=$CLANGFORMAT +fi + +while [ -n "$*" ]; do + case "$1" in + -v ) + verbose=1 + shift + ;; + -h ) + echo format.sh [-h -v] + exit 0 + ;; + esac +done + +if [ $(clang_format_version) -ge $clang_format_min_version ]; then + echo "Formatting files using clang-format v$(clang_format_version)..." + for f in `git ls-files '*.[c|h]'`; do + [ "$verbose" -gt 0 ] && echo "formatting $f" + $clang_format -style=file -i "$f" + done +else + echo "clang-format version ${clang_format_min_version}+ is required!" +fi diff --git a/tools/iindent b/tools/iindent deleted file mode 100755 index 48d26360..00000000 --- a/tools/iindent +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -indent -linux -l95 -cp1 -lps -il6 -ncs "$@" From 671e67b62d859950f86e6eec04e16b72404f3bf9 Mon Sep 17 00:00:00 2001 From: Marcel Cornu Date: Fri, 19 Apr 2024 17:08:33 +0100 Subject: [PATCH 02/19] crc: reformat using new code style Signed-off-by: Marcel Cornu --- crc/aarch64/crc64_rocksoft.c | 10 +- crc/aarch64/crc_aarch64_dispatcher.c | 205 ++-- crc/crc16_t10dif_copy_perf.c | 58 +- crc/crc16_t10dif_copy_test.c | 238 ++-- crc/crc16_t10dif_op_perf.c | 117 +- crc/crc16_t10dif_perf.c | 49 +- crc/crc16_t10dif_test.c | 243 ++-- crc/crc32_funcs_test.c | 459 +++---- crc/crc32_gzip_refl_perf.c | 64 +- crc/crc32_ieee_perf.c | 49 +- crc/crc32_iscsi_perf.c | 49 +- crc/crc64_base.c | 1656 +++++++++----------------- crc/crc64_example.c | 55 +- crc/crc64_funcs_perf.c | 97 +- crc/crc64_funcs_test.c | 464 ++++---- crc/crc64_ref.h | 221 ++-- crc/crc_base.c | 446 +++---- crc/crc_base_aliases.c | 65 +- crc/crc_ref.h | 147 +-- crc/crc_simple_test.c | 37 +- 20 files changed, 2095 insertions(+), 2634 deletions(-) diff --git a/crc/aarch64/crc64_rocksoft.c b/crc/aarch64/crc64_rocksoft.c index 1058498d..47669e7f 100644 --- a/crc/aarch64/crc64_rocksoft.c +++ b/crc/aarch64/crc64_rocksoft.c @@ -30,12 +30,14 @@ #include "crc64.h" #include -uint64_t crc64_rocksoft_refl(uint64_t seed, const uint8_t * buf, uint64_t len) +uint64_t +crc64_rocksoft_refl(uint64_t seed, const uint8_t *buf, uint64_t len) { - return crc64_rocksoft_refl_base(seed, buf, len); + return crc64_rocksoft_refl_base(seed, buf, len); } -uint64_t crc64_rocksoft_norm(uint64_t seed, const uint8_t * buf, uint64_t len) +uint64_t +crc64_rocksoft_norm(uint64_t seed, const uint8_t *buf, uint64_t len) { - return crc64_rocksoft_norm_base(seed, buf, len); + return crc64_rocksoft_norm_base(seed, buf, len); } diff --git a/crc/aarch64/crc_aarch64_dispatcher.c b/crc/aarch64/crc_aarch64_dispatcher.c index fe3bb46d..2e07760d 100644 --- a/crc/aarch64/crc_aarch64_dispatcher.c +++ b/crc/aarch64/crc_aarch64_dispatcher.c @@ -31,185 +31,174 @@ DEFINE_INTERFACE_DISPATCHER(crc16_t10dif) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_PMULL) - return PROVIDER_INFO(crc16_t10dif_pmull); + unsigned long auxval = getauxval(AT_HWCAP); + if (auxval & HWCAP_PMULL) + return PROVIDER_INFO(crc16_t10dif_pmull); #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_PMULL_KEY)) - return PROVIDER_INFO(crc16_t10dif_pmull); + if (sysctlEnabled(SYSCTL_PMULL_KEY)) + return PROVIDER_INFO(crc16_t10dif_pmull); #endif - return PROVIDER_BASIC(crc16_t10dif); - + return PROVIDER_BASIC(crc16_t10dif); } DEFINE_INTERFACE_DISPATCHER(crc16_t10dif_copy) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_PMULL) - return PROVIDER_INFO(crc16_t10dif_copy_pmull); + unsigned long auxval = getauxval(AT_HWCAP); + if (auxval & HWCAP_PMULL) + return PROVIDER_INFO(crc16_t10dif_copy_pmull); #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_PMULL_KEY)) - return PROVIDER_INFO(crc16_t10dif_copy_pmull); + if (sysctlEnabled(SYSCTL_PMULL_KEY)) + return PROVIDER_INFO(crc16_t10dif_copy_pmull); #endif - return PROVIDER_BASIC(crc16_t10dif_copy); - + return PROVIDER_BASIC(crc16_t10dif_copy); } DEFINE_INTERFACE_DISPATCHER(crc32_ieee) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_PMULL) { - return PROVIDER_INFO(crc32_ieee_norm_pmull); - } + unsigned long auxval = getauxval(AT_HWCAP); + if (auxval & HWCAP_PMULL) { + return PROVIDER_INFO(crc32_ieee_norm_pmull); + } #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_PMULL_KEY)) - return PROVIDER_INFO(crc32_ieee_norm_pmull); + if (sysctlEnabled(SYSCTL_PMULL_KEY)) + return PROVIDER_INFO(crc32_ieee_norm_pmull); #endif - return PROVIDER_BASIC(crc32_ieee); - + return PROVIDER_BASIC(crc32_ieee); } DEFINE_INTERFACE_DISPATCHER(crc32_iscsi) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_CRC32) { - switch (get_micro_arch_id()) { - case MICRO_ARCH_ID(ARM, NEOVERSE_N1): - case MICRO_ARCH_ID(ARM, CORTEX_A57): - case MICRO_ARCH_ID(ARM, CORTEX_A72): - return PROVIDER_INFO(crc32_iscsi_crc_ext); - } - } - if ((HWCAP_CRC32 | HWCAP_PMULL) == (auxval & (HWCAP_CRC32 | HWCAP_PMULL))) { - return PROVIDER_INFO(crc32_iscsi_3crc_fold); - } - - if (auxval & HWCAP_PMULL) { - return PROVIDER_INFO(crc32_iscsi_refl_pmull); - } + unsigned long auxval = getauxval(AT_HWCAP); + if (auxval & HWCAP_CRC32) { + switch (get_micro_arch_id()) { + case MICRO_ARCH_ID(ARM, NEOVERSE_N1): + case MICRO_ARCH_ID(ARM, CORTEX_A57): + case MICRO_ARCH_ID(ARM, CORTEX_A72): + return PROVIDER_INFO(crc32_iscsi_crc_ext); + } + } + if ((HWCAP_CRC32 | HWCAP_PMULL) == (auxval & (HWCAP_CRC32 | HWCAP_PMULL))) { + return PROVIDER_INFO(crc32_iscsi_3crc_fold); + } + + if (auxval & HWCAP_PMULL) { + return PROVIDER_INFO(crc32_iscsi_refl_pmull); + } #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_CRC32_KEY)) - return PROVIDER_INFO(crc32_iscsi_3crc_fold); - if (sysctlEnabled(SYSCTL_PMULL_KEY)) - return PROVIDER_INFO(crc32_iscsi_refl_pmull); + if (sysctlEnabled(SYSCTL_CRC32_KEY)) + return PROVIDER_INFO(crc32_iscsi_3crc_fold); + if (sysctlEnabled(SYSCTL_PMULL_KEY)) + return PROVIDER_INFO(crc32_iscsi_refl_pmull); #endif - return PROVIDER_BASIC(crc32_iscsi); - + return PROVIDER_BASIC(crc32_iscsi); } DEFINE_INTERFACE_DISPATCHER(crc32_gzip_refl) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); - - if (auxval & HWCAP_CRC32) { - switch (get_micro_arch_id()) { - case MICRO_ARCH_ID(ARM, NEOVERSE_N1): - case MICRO_ARCH_ID(ARM, CORTEX_A57): - case MICRO_ARCH_ID(ARM, CORTEX_A72): - return PROVIDER_INFO(crc32_gzip_refl_crc_ext); - } - } - if ((HWCAP_CRC32 | HWCAP_PMULL) == (auxval & (HWCAP_CRC32 | HWCAP_PMULL))) { - return PROVIDER_INFO(crc32_gzip_refl_3crc_fold); - } - - if (auxval & HWCAP_PMULL) - return PROVIDER_INFO(crc32_gzip_refl_pmull); + unsigned long auxval = getauxval(AT_HWCAP); + + if (auxval & HWCAP_CRC32) { + switch (get_micro_arch_id()) { + case MICRO_ARCH_ID(ARM, NEOVERSE_N1): + case MICRO_ARCH_ID(ARM, CORTEX_A57): + case MICRO_ARCH_ID(ARM, CORTEX_A72): + return PROVIDER_INFO(crc32_gzip_refl_crc_ext); + } + } + if ((HWCAP_CRC32 | HWCAP_PMULL) == (auxval & (HWCAP_CRC32 | HWCAP_PMULL))) { + return PROVIDER_INFO(crc32_gzip_refl_3crc_fold); + } + + if (auxval & HWCAP_PMULL) + return PROVIDER_INFO(crc32_gzip_refl_pmull); #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_CRC32_KEY)) - return PROVIDER_INFO(crc32_gzip_refl_3crc_fold); - if (sysctlEnabled(SYSCTL_PMULL_KEY)) - return PROVIDER_INFO(crc32_gzip_refl_pmull); + if (sysctlEnabled(SYSCTL_CRC32_KEY)) + return PROVIDER_INFO(crc32_gzip_refl_3crc_fold); + if (sysctlEnabled(SYSCTL_PMULL_KEY)) + return PROVIDER_INFO(crc32_gzip_refl_pmull); #endif - return PROVIDER_BASIC(crc32_gzip_refl); - + return PROVIDER_BASIC(crc32_gzip_refl); } DEFINE_INTERFACE_DISPATCHER(crc64_ecma_refl) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); + unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_PMULL) - return PROVIDER_INFO(crc64_ecma_refl_pmull); + if (auxval & HWCAP_PMULL) + return PROVIDER_INFO(crc64_ecma_refl_pmull); #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_PMULL_KEY)) - return PROVIDER_INFO(crc64_ecma_refl_pmull); + if (sysctlEnabled(SYSCTL_PMULL_KEY)) + return PROVIDER_INFO(crc64_ecma_refl_pmull); #endif - return PROVIDER_BASIC(crc64_ecma_refl); - + return PROVIDER_BASIC(crc64_ecma_refl); } DEFINE_INTERFACE_DISPATCHER(crc64_ecma_norm) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_PMULL) - return PROVIDER_INFO(crc64_ecma_norm_pmull); + unsigned long auxval = getauxval(AT_HWCAP); + if (auxval & HWCAP_PMULL) + return PROVIDER_INFO(crc64_ecma_norm_pmull); #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_PMULL_KEY)) - return PROVIDER_INFO(crc64_ecma_norm_pmull); + if (sysctlEnabled(SYSCTL_PMULL_KEY)) + return PROVIDER_INFO(crc64_ecma_norm_pmull); #endif - return PROVIDER_BASIC(crc64_ecma_norm); - + return PROVIDER_BASIC(crc64_ecma_norm); } DEFINE_INTERFACE_DISPATCHER(crc64_iso_refl) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_PMULL) - return PROVIDER_INFO(crc64_iso_refl_pmull); + unsigned long auxval = getauxval(AT_HWCAP); + if (auxval & HWCAP_PMULL) + return PROVIDER_INFO(crc64_iso_refl_pmull); #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_PMULL_KEY)) - return PROVIDER_INFO(crc64_iso_refl_pmull); + if (sysctlEnabled(SYSCTL_PMULL_KEY)) + return PROVIDER_INFO(crc64_iso_refl_pmull); #endif - return PROVIDER_BASIC(crc64_iso_refl); - + return PROVIDER_BASIC(crc64_iso_refl); } DEFINE_INTERFACE_DISPATCHER(crc64_iso_norm) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_PMULL) - return PROVIDER_INFO(crc64_iso_norm_pmull); + unsigned long auxval = getauxval(AT_HWCAP); + if (auxval & HWCAP_PMULL) + return PROVIDER_INFO(crc64_iso_norm_pmull); #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_PMULL_KEY)) - return PROVIDER_INFO(crc64_iso_norm_pmull); + if (sysctlEnabled(SYSCTL_PMULL_KEY)) + return PROVIDER_INFO(crc64_iso_norm_pmull); #endif - return PROVIDER_BASIC(crc64_iso_norm); - + return PROVIDER_BASIC(crc64_iso_norm); } DEFINE_INTERFACE_DISPATCHER(crc64_jones_refl) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_PMULL) - return PROVIDER_INFO(crc64_jones_refl_pmull); + unsigned long auxval = getauxval(AT_HWCAP); + if (auxval & HWCAP_PMULL) + return PROVIDER_INFO(crc64_jones_refl_pmull); #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_PMULL_KEY)) - return PROVIDER_INFO(crc64_jones_refl_pmull); + if (sysctlEnabled(SYSCTL_PMULL_KEY)) + return PROVIDER_INFO(crc64_jones_refl_pmull); #endif - return PROVIDER_BASIC(crc64_jones_refl); - + return PROVIDER_BASIC(crc64_jones_refl); } DEFINE_INTERFACE_DISPATCHER(crc64_jones_norm) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_PMULL) - return PROVIDER_INFO(crc64_jones_norm_pmull); + unsigned long auxval = getauxval(AT_HWCAP); + if (auxval & HWCAP_PMULL) + return PROVIDER_INFO(crc64_jones_norm_pmull); #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_PMULL_KEY)) - return PROVIDER_INFO(crc64_jones_norm_pmull); + if (sysctlEnabled(SYSCTL_PMULL_KEY)) + return PROVIDER_INFO(crc64_jones_norm_pmull); #endif - return PROVIDER_BASIC(crc64_jones_norm); - + return PROVIDER_BASIC(crc64_jones_norm); } diff --git a/crc/crc16_t10dif_copy_perf.c b/crc/crc16_t10dif_copy_perf.c index 39856072..689f9f90 100644 --- a/crc/crc16_t10dif_copy_perf.c +++ b/crc/crc16_t10dif_copy_perf.c @@ -35,51 +35,51 @@ #include "test.h" #ifndef GT_L3_CACHE -# define GT_L3_CACHE 32*1024*1024 /* some number > last level cache */ +#define GT_L3_CACHE 32 * 1024 * 1024 /* some number > last level cache */ #endif #if !defined(COLD_TEST) && !defined(TEST_CUSTOM) // Cached test, loop many times over small dataset -# define TEST_LEN 8*1024 -# define TEST_TYPE_STR "_warm" -#elif defined (COLD_TEST) +#define TEST_LEN 8 * 1024 +#define TEST_TYPE_STR "_warm" +#elif defined(COLD_TEST) // Uncached test. Pull from large mem base. -# define TEST_LEN (2 * GT_L3_CACHE) -# define TEST_TYPE_STR "_cold" +#define TEST_LEN (2 * GT_L3_CACHE) +#define TEST_TYPE_STR "_cold" #endif #ifndef TEST_SEED -# define TEST_SEED 0x1234 +#define TEST_SEED 0x1234 #endif #define TEST_MEM TEST_LEN -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - void *src, *dst; - uint16_t crc; - struct perf start; + void *src, *dst; + uint16_t crc; + struct perf start; - printf("crc16_t10dif_copy_perf:\n"); + printf("crc16_t10dif_copy_perf:\n"); - if (posix_memalign(&src, 1024, TEST_LEN)) { - printf("alloc error: Fail"); - return -1; - } - if (posix_memalign(&dst, 1024, TEST_LEN)) { - printf("alloc error: Fail"); - return -1; - } + if (posix_memalign(&src, 1024, TEST_LEN)) { + printf("alloc error: Fail"); + return -1; + } + if (posix_memalign(&dst, 1024, TEST_LEN)) { + printf("alloc error: Fail"); + return -1; + } - printf("Start timed tests\n"); - fflush(0); + printf("Start timed tests\n"); + fflush(0); - memset(src, 0, TEST_LEN); - BENCHMARK(&start, BENCHMARK_TIME, crc = - crc16_t10dif_copy(TEST_SEED, dst, src, TEST_LEN)); - printf("crc16_t10dif_copy" TEST_TYPE_STR ": "); - perf_print(start, (long long)TEST_LEN); + memset(src, 0, TEST_LEN); + BENCHMARK(&start, BENCHMARK_TIME, crc = crc16_t10dif_copy(TEST_SEED, dst, src, TEST_LEN)); + printf("crc16_t10dif_copy" TEST_TYPE_STR ": "); + perf_print(start, (long long) TEST_LEN); - printf("finish 0x%x\n", crc); - return 0; + printf("finish 0x%x\n", crc); + return 0; } diff --git a/crc/crc16_t10dif_copy_test.c b/crc/crc16_t10dif_copy_test.c index ae791e1e..8e33ee75 100644 --- a/crc/crc16_t10dif_copy_test.c +++ b/crc/crc16_t10dif_copy_test.c @@ -37,157 +37,161 @@ #include "test.h" #ifndef RANDOMS -# define RANDOMS 20 +#define RANDOMS 20 #endif #ifndef TEST_SEED -# define TEST_SEED 0x1234 +#define TEST_SEED 0x1234 #endif -#define MAX_BUF 2345 -#define TEST_SIZE 217 +#define MAX_BUF 2345 +#define TEST_SIZE 217 #define TEST_LEN (8 * 1024) typedef uint16_t u16; typedef uint8_t u8; // bitwise crc version -uint16_t crc16_t10dif_copy_ref(uint16_t seed, uint8_t * dst, uint8_t * src, uint64_t len); +uint16_t +crc16_t10dif_copy_ref(uint16_t seed, uint8_t *dst, uint8_t *src, uint64_t len); -void rand_buffer(unsigned char *buf, long buffer_size) +void +rand_buffer(unsigned char *buf, long buffer_size) { - long i; - for (i = 0; i < buffer_size; i++) - buf[i] = rand(); + long i; + for (i = 0; i < buffer_size; i++) + buf[i] = rand(); } -int memtst(unsigned char *buf, unsigned char c, int len) +int +memtst(unsigned char *buf, unsigned char c, int len) { - int i; - for (i = 0; i < len; i++) - if (*buf++ != c) - return 1; + int i; + for (i = 0; i < len; i++) + if (*buf++ != c) + return 1; - return 0; + return 0; } -int crc_copy_check(const char *description, u8 * dst, u8 * src, u8 dst_fill_val, int len, - int tot) +int +crc_copy_check(const char *description, u8 *dst, u8 *src, u8 dst_fill_val, int len, int tot) { - u16 seed; - int rem; - - assert(tot >= len); - seed = rand(); - rem = tot - len; - memset(dst, dst_fill_val, tot); - - // multi-binary crc version - u16 crc_dut = crc16_t10dif_copy(seed, dst, src, len); - u16 crc_ref = crc16_t10dif(seed, src, len); - if (crc_dut != crc_ref) { - printf("%s, crc gen fail: 0x%4x 0x%4x len=%d\n", description, crc_dut, - crc_ref, len); - return 1; - } else if (memcmp(dst, src, len)) { - printf("%s, copy fail: len=%d\n", description, len); - return 1; - } else if (memtst(&dst[len], dst_fill_val, rem)) { - printf("%s, writeover fail: len=%d\n", description, len); - return 1; - } - // bitwise crc version - crc_dut = crc16_t10dif_copy_ref(seed, dst, src, len); - crc_ref = crc16_t10dif_ref(seed, src, len); - if (crc_dut != crc_ref) { - printf("%s, crc gen fail (table-driven): 0x%4x 0x%4x len=%d\n", description, - crc_dut, crc_ref, len); - return 1; - } else if (memcmp(dst, src, len)) { - printf("%s, copy fail (table driven): len=%d\n", description, len); - return 1; - } else if (memtst(&dst[len], dst_fill_val, rem)) { - printf("%s, writeover fail (table driven): len=%d\n", description, len); - return 1; - } - return 0; + u16 seed; + int rem; + + assert(tot >= len); + seed = rand(); + rem = tot - len; + memset(dst, dst_fill_val, tot); + + // multi-binary crc version + u16 crc_dut = crc16_t10dif_copy(seed, dst, src, len); + u16 crc_ref = crc16_t10dif(seed, src, len); + if (crc_dut != crc_ref) { + printf("%s, crc gen fail: 0x%4x 0x%4x len=%d\n", description, crc_dut, crc_ref, + len); + return 1; + } else if (memcmp(dst, src, len)) { + printf("%s, copy fail: len=%d\n", description, len); + return 1; + } else if (memtst(&dst[len], dst_fill_val, rem)) { + printf("%s, writeover fail: len=%d\n", description, len); + return 1; + } + // bitwise crc version + crc_dut = crc16_t10dif_copy_ref(seed, dst, src, len); + crc_ref = crc16_t10dif_ref(seed, src, len); + if (crc_dut != crc_ref) { + printf("%s, crc gen fail (table-driven): 0x%4x 0x%4x len=%d\n", description, + crc_dut, crc_ref, len); + return 1; + } else if (memcmp(dst, src, len)) { + printf("%s, copy fail (table driven): len=%d\n", description, len); + return 1; + } else if (memtst(&dst[len], dst_fill_val, rem)) { + printf("%s, writeover fail (table driven): len=%d\n", description, len); + return 1; + } + return 0; } -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - int r = 0; - int i; - int len, tot; - u8 *src_raw = NULL, *dst_raw = NULL; - u8 *src, *dst; - - printf("Test crc16_t10dif_copy_test:\n"); - src_raw = (u8 *) malloc(TEST_LEN); - if (NULL == src_raw) { - printf("alloc error: Fail"); - return -1; - } - dst_raw = (u8 *) malloc(TEST_LEN); - if (NULL == dst_raw) { - printf("alloc error: Fail"); - aligned_free(src_raw); - return -1; - } - src = src_raw; - dst = dst_raw; - - srand(TEST_SEED); - - // Test of all zeros - memset(src, 0, TEST_LEN); - r |= crc_copy_check("zero tst", dst, src, 0x5e, MAX_BUF, TEST_LEN); - - // Another simple test pattern - memset(src, 0xff, TEST_LEN); - r |= crc_copy_check("simp tst", dst, src, 0x5e, MAX_BUF, TEST_LEN); - - // Do a few short len random data tests - rand_buffer(src, TEST_LEN); - rand_buffer(dst, TEST_LEN); - for (i = 0; i < MAX_BUF; i++) { - r |= crc_copy_check("short len", dst, src, rand(), i, MAX_BUF); - } + int r = 0; + int i; + int len, tot; + u8 *src_raw = NULL, *dst_raw = NULL; + u8 *src, *dst; + + printf("Test crc16_t10dif_copy_test:\n"); + src_raw = (u8 *) malloc(TEST_LEN); + if (NULL == src_raw) { + printf("alloc error: Fail"); + return -1; + } + dst_raw = (u8 *) malloc(TEST_LEN); + if (NULL == dst_raw) { + printf("alloc error: Fail"); + aligned_free(src_raw); + return -1; + } + src = src_raw; + dst = dst_raw; + + srand(TEST_SEED); + + // Test of all zeros + memset(src, 0, TEST_LEN); + r |= crc_copy_check("zero tst", dst, src, 0x5e, MAX_BUF, TEST_LEN); + + // Another simple test pattern + memset(src, 0xff, TEST_LEN); + r |= crc_copy_check("simp tst", dst, src, 0x5e, MAX_BUF, TEST_LEN); + + // Do a few short len random data tests + rand_buffer(src, TEST_LEN); + rand_buffer(dst, TEST_LEN); + for (i = 0; i < MAX_BUF; i++) { + r |= crc_copy_check("short len", dst, src, rand(), i, MAX_BUF); + } #ifdef TEST_VERBOSE - printf("."); + printf("."); #endif - // Do a few longer tests, random data - for (i = TEST_LEN; i >= (TEST_LEN - TEST_SIZE); i--) { - r |= crc_copy_check("long len", dst, src, rand(), i, TEST_LEN); - } + // Do a few longer tests, random data + for (i = TEST_LEN; i >= (TEST_LEN - TEST_SIZE); i--) { + r |= crc_copy_check("long len", dst, src, rand(), i, TEST_LEN); + } #ifdef TEST_VERBOSE - printf("."); + printf("."); #endif - // Do random size, random data - for (i = 0; i < RANDOMS; i++) { - len = rand() % TEST_LEN; - r |= crc_copy_check("rand len", dst, src, rand(), len, TEST_LEN); - } + // Do random size, random data + for (i = 0; i < RANDOMS; i++) { + len = rand() % TEST_LEN; + r |= crc_copy_check("rand len", dst, src, rand(), len, TEST_LEN); + } #ifdef TEST_VERBOSE - printf("."); + printf("."); #endif - // Run tests at end of buffer - for (i = 0; i < RANDOMS; i++) { - len = rand() % TEST_LEN; - src = &src_raw[TEST_LEN - len - 1]; - dst = &dst_raw[TEST_LEN - len - 1]; - tot = len; - r |= crc_copy_check("end of buffer", dst, src, rand(), len, tot); - } + // Run tests at end of buffer + for (i = 0; i < RANDOMS; i++) { + len = rand() % TEST_LEN; + src = &src_raw[TEST_LEN - len - 1]; + dst = &dst_raw[TEST_LEN - len - 1]; + tot = len; + r |= crc_copy_check("end of buffer", dst, src, rand(), len, tot); + } #ifdef TEST_VERBOSE - printf("."); + printf("."); #endif - printf("Test done: %s\n", r ? "Fail" : "Pass"); + printf("Test done: %s\n", r ? "Fail" : "Pass"); - free(src_raw); - free(dst_raw); + free(src_raw); + free(dst_raw); - return r; + return r; } diff --git a/crc/crc16_t10dif_op_perf.c b/crc/crc16_t10dif_op_perf.c index 7dd7c723..353ab69e 100644 --- a/crc/crc16_t10dif_op_perf.c +++ b/crc/crc16_t10dif_op_perf.c @@ -37,83 +37,82 @@ #define BLKSIZE (512) #ifndef GT_L3_CACHE -# define GT_L3_CACHE 32*1024*1024 /* some number > last level cache */ +#define GT_L3_CACHE 32 * 1024 * 1024 /* some number > last level cache */ #endif #if !defined(COLD_TEST) && !defined(TEST_CUSTOM) // Cached test, loop many times over small dataset -# define NBLOCKS 100 -# define TEST_TYPE_STR "_warm" -#elif defined (COLD_TEST) +#define NBLOCKS 100 +#define TEST_TYPE_STR "_warm" +#elif defined(COLD_TEST) // Uncached test. Pull from large mem base. -# define TEST_LEN (2 * GT_L3_CACHE) -# define NBLOCKS (TEST_LEN / BLKSIZE) -# define TEST_TYPE_STR "_cold" +#define TEST_LEN (2 * GT_L3_CACHE) +#define NBLOCKS (TEST_LEN / BLKSIZE) +#define TEST_TYPE_STR "_cold" #endif #ifndef TEST_SEED -# define TEST_SEED 0x1234 +#define TEST_SEED 0x1234 #endif struct blk { - uint8_t data[BLKSIZE]; + uint8_t data[BLKSIZE]; }; struct blk_ext { - uint8_t data[BLKSIZE]; - uint32_t tag; - uint16_t meta; - uint16_t crc; + uint8_t data[BLKSIZE]; + uint32_t tag; + uint16_t meta; + uint16_t crc; }; -static void crc16_t10dif_copy_perf(struct blk *blks, struct blk *blkp, - struct blk_ext *blks_ext, struct blk_ext *blkp_ext, - uint16_t * crc) +static void +crc16_t10dif_copy_perf(struct blk *blks, struct blk *blkp, struct blk_ext *blks_ext, + struct blk_ext *blkp_ext, uint16_t *crc) { - int i; - for (i = 0, blkp = blks, blkp_ext = blks_ext; i < NBLOCKS; i++) { - *crc = crc16_t10dif_copy(TEST_SEED, blkp_ext->data, blkp->data, - sizeof(blks->data)); - blkp_ext->crc = *crc; - blkp++; - blkp_ext++; - } + int i; + for (i = 0, blkp = blks, blkp_ext = blks_ext; i < NBLOCKS; i++) { + *crc = crc16_t10dif_copy(TEST_SEED, blkp_ext->data, blkp->data, sizeof(blks->data)); + blkp_ext->crc = *crc; + blkp++; + blkp_ext++; + } } -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - uint16_t crc; - struct blk *blks = NULL, *blkp = NULL; - struct blk_ext *blks_ext = NULL, *blkp_ext = NULL; - struct perf start; - - printf("crc16_t10dif_streaming_insert_perf:\n"); - - if (posix_memalign((void *)&blks, 1024, NBLOCKS * sizeof(*blks))) { - printf("alloc error: Fail"); - return -1; - } - if (posix_memalign((void *)&blks_ext, 1024, NBLOCKS * sizeof(*blks_ext))) { - printf("alloc error: Fail"); - return -1; - } - - printf(" size blk: %zu, blk_ext: %zu, blk data: %zu, stream: %zu\n", - sizeof(*blks), sizeof(*blks_ext), sizeof(blks->data), - NBLOCKS * sizeof(blks->data)); - memset(blks, 0xe5, NBLOCKS * sizeof(*blks)); - memset(blks_ext, 0xe5, NBLOCKS * sizeof(*blks_ext)); - - printf("Start timed tests\n"); - fflush(0); - - // Copy and insert test - BENCHMARK(&start, BENCHMARK_TIME, - crc16_t10dif_copy_perf(blks, blkp, blks_ext, blkp_ext, &crc)); - - printf("crc16_t10pi_op_copy_insert" TEST_TYPE_STR ": "); - perf_print(start, (long long)sizeof(blks->data) * NBLOCKS); - - printf("finish 0x%x\n", crc); - return 0; + uint16_t crc; + struct blk *blks = NULL, *blkp = NULL; + struct blk_ext *blks_ext = NULL, *blkp_ext = NULL; + struct perf start; + + printf("crc16_t10dif_streaming_insert_perf:\n"); + + if (posix_memalign((void *) &blks, 1024, NBLOCKS * sizeof(*blks))) { + printf("alloc error: Fail"); + return -1; + } + if (posix_memalign((void *) &blks_ext, 1024, NBLOCKS * sizeof(*blks_ext))) { + printf("alloc error: Fail"); + return -1; + } + + printf(" size blk: %zu, blk_ext: %zu, blk data: %zu, stream: %zu\n", sizeof(*blks), + sizeof(*blks_ext), sizeof(blks->data), NBLOCKS * sizeof(blks->data)); + memset(blks, 0xe5, NBLOCKS * sizeof(*blks)); + memset(blks_ext, 0xe5, NBLOCKS * sizeof(*blks_ext)); + + printf("Start timed tests\n"); + fflush(0); + + // Copy and insert test + BENCHMARK(&start, BENCHMARK_TIME, + crc16_t10dif_copy_perf(blks, blkp, blks_ext, blkp_ext, &crc)); + + printf("crc16_t10pi_op_copy_insert" TEST_TYPE_STR ": "); + perf_print(start, (long long) sizeof(blks->data) * NBLOCKS); + + printf("finish 0x%x\n", crc); + return 0; } diff --git a/crc/crc16_t10dif_perf.c b/crc/crc16_t10dif_perf.c index 79817076..c3fcd4ab 100644 --- a/crc/crc16_t10dif_perf.c +++ b/crc/crc16_t10dif_perf.c @@ -35,46 +35,47 @@ #include "test.h" #ifndef GT_L3_CACHE -# define GT_L3_CACHE 32*1024*1024 /* some number > last level cache */ +#define GT_L3_CACHE 32 * 1024 * 1024 /* some number > last level cache */ #endif #if !defined(COLD_TEST) && !defined(TEST_CUSTOM) // Cached test, loop many times over small dataset -# define TEST_LEN 8*1024 -# define TEST_TYPE_STR "_warm" -#elif defined (COLD_TEST) +#define TEST_LEN 8 * 1024 +#define TEST_TYPE_STR "_warm" +#elif defined(COLD_TEST) // Uncached test. Pull from large mem base. -# define TEST_LEN (2 * GT_L3_CACHE) -# define TEST_TYPE_STR "_cold" +#define TEST_LEN (2 * GT_L3_CACHE) +#define TEST_TYPE_STR "_cold" #endif #ifndef TEST_SEED -# define TEST_SEED 0x1234 +#define TEST_SEED 0x1234 #endif #define TEST_MEM TEST_LEN -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - void *buf; - uint16_t crc; - struct perf start; + void *buf; + uint16_t crc; + struct perf start; - printf("crc16_t10dif_perf:\n"); + printf("crc16_t10dif_perf:\n"); - if (posix_memalign(&buf, 1024, TEST_LEN)) { - printf("alloc error: Fail"); - return -1; - } + if (posix_memalign(&buf, 1024, TEST_LEN)) { + printf("alloc error: Fail"); + return -1; + } - printf("Start timed tests\n"); - fflush(0); + printf("Start timed tests\n"); + fflush(0); - memset(buf, 0, TEST_LEN); - BENCHMARK(&start, BENCHMARK_TIME, crc = crc16_t10dif(TEST_SEED, buf, TEST_LEN)); - printf("crc16_t10dif" TEST_TYPE_STR ": "); - perf_print(start, (long long)TEST_LEN); + memset(buf, 0, TEST_LEN); + BENCHMARK(&start, BENCHMARK_TIME, crc = crc16_t10dif(TEST_SEED, buf, TEST_LEN)); + printf("crc16_t10dif" TEST_TYPE_STR ": "); + perf_print(start, (long long) TEST_LEN); - printf("finish 0x%x\n", crc); - return 0; + printf("finish 0x%x\n", crc); + return 0; } diff --git a/crc/crc16_t10dif_test.c b/crc/crc16_t10dif_test.c index 9407e376..4f64c397 100644 --- a/crc/crc16_t10dif_test.c +++ b/crc/crc16_t10dif_test.c @@ -36,163 +36,164 @@ #include "test.h" #ifndef TEST_SEED -# define TEST_SEED 0x1234 +#define TEST_SEED 0x1234 #endif #define MAX_BUF 4096 -#define TEST_SIZE 20 +#define TEST_SIZE 20 typedef uint32_t u32; typedef uint16_t u16; typedef uint8_t u8; -uint16_t crc16_t10dif_ref(uint16_t seed, uint8_t * buf, uint64_t len); +uint16_t +crc16_t10dif_ref(uint16_t seed, uint8_t *buf, uint64_t len); -void rand_buffer(unsigned char *buf, long buffer_size) +void +rand_buffer(unsigned char *buf, long buffer_size) { - long i; - for (i = 0; i < buffer_size; i++) - buf[i] = rand(); + long i; + for (i = 0; i < buffer_size; i++) + buf[i] = rand(); } -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - int fail = 0; - u32 r = 0; - int i, s; - void *buf_raw = NULL; - unsigned char *buf; - - printf("Test crc16_t10dif_test "); - if (posix_memalign(&buf_raw, 32, MAX_BUF * TEST_SIZE)) { - printf("alloc error: Fail"); - return -1; - } - buf = (unsigned char *)buf_raw; - - srand(TEST_SEED); - - // Test of all zeros - memset(buf, 0, MAX_BUF * 10); - u16 crc_ref = crc16_t10dif_ref(TEST_SEED, buf, MAX_BUF); - u16 crc_base = crc16_t10dif_base(TEST_SEED, buf, MAX_BUF); - u16 crc = crc16_t10dif(TEST_SEED, buf, MAX_BUF); - if ((crc_base != crc_ref) || (crc != crc_ref)) { - fail++; - printf("\n opt ref\n"); - printf(" ------ ------\n"); - printf("fail crc zero = 0x%4x 0x%4x 0x%4x \n", crc_ref, crc_base, crc); - } + int fail = 0; + u32 r = 0; + int i, s; + void *buf_raw = NULL; + unsigned char *buf; + + printf("Test crc16_t10dif_test "); + if (posix_memalign(&buf_raw, 32, MAX_BUF * TEST_SIZE)) { + printf("alloc error: Fail"); + return -1; + } + buf = (unsigned char *) buf_raw; + + srand(TEST_SEED); + + // Test of all zeros + memset(buf, 0, MAX_BUF * 10); + u16 crc_ref = crc16_t10dif_ref(TEST_SEED, buf, MAX_BUF); + u16 crc_base = crc16_t10dif_base(TEST_SEED, buf, MAX_BUF); + u16 crc = crc16_t10dif(TEST_SEED, buf, MAX_BUF); + if ((crc_base != crc_ref) || (crc != crc_ref)) { + fail++; + printf("\n opt ref\n"); + printf(" ------ ------\n"); + printf("fail crc zero = 0x%4x 0x%4x 0x%4x \n", crc_ref, crc_base, crc); + } #ifdef TEST_VERBOSE - else - printf("."); + else + printf("."); #endif - // Another simple test pattern - memset(buf, 0x8a, MAX_BUF); - crc_ref = crc16_t10dif_ref(TEST_SEED, buf, MAX_BUF); - crc_base = crc16_t10dif_base(TEST_SEED, buf, MAX_BUF); - crc = crc16_t10dif(TEST_SEED, buf, MAX_BUF); - if ((crc_base != crc_ref) || (crc != crc_ref)) { - fail++; - printf("fail crc all 8a = 0x%4x 0x%4x 0x%4x\n", crc_ref, crc_base, crc); - } + // Another simple test pattern + memset(buf, 0x8a, MAX_BUF); + crc_ref = crc16_t10dif_ref(TEST_SEED, buf, MAX_BUF); + crc_base = crc16_t10dif_base(TEST_SEED, buf, MAX_BUF); + crc = crc16_t10dif(TEST_SEED, buf, MAX_BUF); + if ((crc_base != crc_ref) || (crc != crc_ref)) { + fail++; + printf("fail crc all 8a = 0x%4x 0x%4x 0x%4x\n", crc_ref, crc_base, crc); + } #ifdef TEST_VERBOSE - else - printf("."); + else + printf("."); #endif - // Do a few random tests + // Do a few random tests - rand_buffer(buf, MAX_BUF * TEST_SIZE); + rand_buffer(buf, MAX_BUF * TEST_SIZE); - for (i = 0; i < TEST_SIZE; i++) { - crc_ref = crc16_t10dif_ref(TEST_SEED, buf, MAX_BUF); - crc_base = crc16_t10dif_base(TEST_SEED, buf, MAX_BUF); - crc = crc16_t10dif(TEST_SEED, buf, MAX_BUF); - if ((crc_base != crc_ref) || (crc != crc_ref)) { - fail++; - printf("fail crc rand%3d = 0x%4x 0x%4x 0x%4x\n", i, crc_ref, crc_base, - crc); - } + for (i = 0; i < TEST_SIZE; i++) { + crc_ref = crc16_t10dif_ref(TEST_SEED, buf, MAX_BUF); + crc_base = crc16_t10dif_base(TEST_SEED, buf, MAX_BUF); + crc = crc16_t10dif(TEST_SEED, buf, MAX_BUF); + if ((crc_base != crc_ref) || (crc != crc_ref)) { + fail++; + printf("fail crc rand%3d = 0x%4x 0x%4x 0x%4x\n", i, crc_ref, crc_base, crc); + } #ifdef TEST_VERBOSE - else if (i % (TEST_SIZE / 8) == 0) - printf("."); + else if (i % (TEST_SIZE / 8) == 0) + printf("."); #endif - buf += MAX_BUF; - } - - // Do a few random sizes - buf = (unsigned char *)buf_raw; //reset buf - r = rand(); - - for (i = MAX_BUF; i >= 0; i--) { - crc_ref = crc16_t10dif_ref(r, buf, i); - crc_base = crc16_t10dif_base(r, buf, i); - crc = crc16_t10dif(r, buf, i); - if ((crc_base != crc_ref) || (crc != crc_ref)) { - fail++; - printf("fail random size%i 0x%8x 0x%8x 0x%8x\n", i, crc_ref, crc_base, - crc); - } + buf += MAX_BUF; + } + + // Do a few random sizes + buf = (unsigned char *) buf_raw; // reset buf + r = rand(); + + for (i = MAX_BUF; i >= 0; i--) { + crc_ref = crc16_t10dif_ref(r, buf, i); + crc_base = crc16_t10dif_base(r, buf, i); + crc = crc16_t10dif(r, buf, i); + if ((crc_base != crc_ref) || (crc != crc_ref)) { + fail++; + printf("fail random size%i 0x%8x 0x%8x 0x%8x\n", i, crc_ref, crc_base, crc); + } #ifdef TEST_VERBOSE - else if (i % (MAX_BUF / 8) == 0) - printf("."); + else if (i % (MAX_BUF / 8) == 0) + printf("."); #endif - } + } - // Try different seeds - for (s = 0; s < 20; s++) { - buf = (unsigned char *)buf_raw; //reset buf + // Try different seeds + for (s = 0; s < 20; s++) { + buf = (unsigned char *) buf_raw; // reset buf - r = rand(); // just to get a new seed - rand_buffer(buf, MAX_BUF * TEST_SIZE); // new pseudo-rand data + r = rand(); // just to get a new seed + rand_buffer(buf, MAX_BUF * TEST_SIZE); // new pseudo-rand data #ifdef TEST_VERBOSE - printf("seed = 0x%x\n", r); + printf("seed = 0x%x\n", r); #endif - for (i = 0; i < TEST_SIZE; i++) { - crc_ref = crc16_t10dif_ref(r, buf, MAX_BUF); - crc_base = crc16_t10dif_base(r, buf, MAX_BUF); - crc = crc16_t10dif(r, buf, MAX_BUF); - if ((crc_base != crc_ref) || (crc != crc_ref)) { - fail++; - printf("fail crc rand%3d = 0x%4x 0x%4x 0x%4x\n", i, crc_ref, - crc_base, crc); - } + for (i = 0; i < TEST_SIZE; i++) { + crc_ref = crc16_t10dif_ref(r, buf, MAX_BUF); + crc_base = crc16_t10dif_base(r, buf, MAX_BUF); + crc = crc16_t10dif(r, buf, MAX_BUF); + if ((crc_base != crc_ref) || (crc != crc_ref)) { + fail++; + printf("fail crc rand%3d = 0x%4x 0x%4x 0x%4x\n", i, crc_ref, + crc_base, crc); + } #ifdef TEST_VERBOSE - else if (i % (TEST_SIZE * 20 / 8) == 0) - printf("."); + else if (i % (TEST_SIZE * 20 / 8) == 0) + printf("."); #endif - buf += MAX_BUF; - } - } - - // Run tests at end of buffer - buf = (unsigned char *)buf_raw; //reset buf - buf = buf + ((MAX_BUF - 1) * TEST_SIZE); //Line up TEST_SIZE from end - for (i = 0; i < TEST_SIZE; i++) { - crc_ref = crc16_t10dif_ref(TEST_SEED, buf + i, TEST_SIZE - i); - crc_base = crc16_t10dif_base(TEST_SEED, buf + i, TEST_SIZE - i); - crc = crc16_t10dif(TEST_SEED, buf + i, TEST_SIZE - i); - if ((crc_base != crc_ref) || (crc != crc_ref)) { - fail++; - printf("fail crc eob rand%3d = 0x%4x 0x%4x 0x%4x\n", i, crc_ref, - crc_base, crc); - } + buf += MAX_BUF; + } + } + + // Run tests at end of buffer + buf = (unsigned char *) buf_raw; // reset buf + buf = buf + ((MAX_BUF - 1) * TEST_SIZE); // Line up TEST_SIZE from end + for (i = 0; i < TEST_SIZE; i++) { + crc_ref = crc16_t10dif_ref(TEST_SEED, buf + i, TEST_SIZE - i); + crc_base = crc16_t10dif_base(TEST_SEED, buf + i, TEST_SIZE - i); + crc = crc16_t10dif(TEST_SEED, buf + i, TEST_SIZE - i); + if ((crc_base != crc_ref) || (crc != crc_ref)) { + fail++; + printf("fail crc eob rand%3d = 0x%4x 0x%4x 0x%4x\n", i, crc_ref, crc_base, + crc); + } #ifdef TEST_VERBOSE - else - printf("."); + else + printf("."); #endif - } + } - printf("Test done: %s\n", fail ? "Fail" : "Pass"); - if (fail) - printf("\nFailed %d tests\n", fail); + printf("Test done: %s\n", fail ? "Fail" : "Pass"); + if (fail) + printf("\nFailed %d tests\n", fail); - if (buf) - aligned_free(buf_raw); + if (buf) + aligned_free(buf_raw); - return fail; + return fail; } diff --git a/crc/crc32_funcs_test.c b/crc/crc32_funcs_test.c index 691d6ba7..dbe40f33 100644 --- a/crc/crc32_funcs_test.c +++ b/crc/crc32_funcs_test.c @@ -36,306 +36,317 @@ #include "test.h" #ifndef TEST_SEED -# define TEST_SEED 0x1234 +#define TEST_SEED 0x1234 #endif #define MAX_BUF 4096 -#define TEST_SIZE 32 +#define TEST_SIZE 32 -typedef uint32_t(*crc32_func_t) (uint32_t, const uint8_t *, uint64_t); -typedef uint32_t(*crc32_func_t_base) (uint32_t, uint8_t *, uint64_t); -typedef uint32_t(*crc32_func_t_ref) (uint32_t, uint8_t *, uint64_t); +typedef uint32_t (*crc32_func_t)(uint32_t, const uint8_t *, uint64_t); +typedef uint32_t (*crc32_func_t_base)(uint32_t, uint8_t *, uint64_t); +typedef uint32_t (*crc32_func_t_ref)(uint32_t, uint8_t *, uint64_t); typedef struct func_case { - char *note; - crc32_func_t crc32_func_call; - crc32_func_t_base crc32_base_call; - crc32_func_t_ref crc32_ref_call; + char *note; + crc32_func_t crc32_func_call; + crc32_func_t_base crc32_base_call; + crc32_func_t_ref crc32_ref_call; } func_case_t; -uint32_t crc32_iscsi_wrap(uint32_t seed, const uint8_t * buf, uint64_t len) +uint32_t +crc32_iscsi_wrap(uint32_t seed, const uint8_t *buf, uint64_t len) { - return crc32_iscsi((uint8_t *) buf, len, seed); + return crc32_iscsi((uint8_t *) buf, len, seed); } -uint32_t crc32_iscsi_base_wrap(uint32_t seed, uint8_t * buf, uint64_t len) +uint32_t +crc32_iscsi_base_wrap(uint32_t seed, uint8_t *buf, uint64_t len) { - return crc32_iscsi_base(buf, len, seed); + return crc32_iscsi_base(buf, len, seed); } -uint32_t crc32_iscsi_ref_wrap(uint32_t seed, uint8_t * buf, uint64_t len) +uint32_t +crc32_iscsi_ref_wrap(uint32_t seed, uint8_t *buf, uint64_t len) { - return crc32_iscsi_ref(buf, len, seed); + return crc32_iscsi_ref(buf, len, seed); } func_case_t test_funcs[] = { - {"crc32_ieee", crc32_ieee, crc32_ieee_base, crc32_ieee_ref} - , - {"crc32_gzip_refl", crc32_gzip_refl, crc32_gzip_refl_base, crc32_gzip_refl_ref} - , - {"crc32_iscsi", crc32_iscsi_wrap, crc32_iscsi_base_wrap, crc32_iscsi_ref_wrap} + { "crc32_ieee", crc32_ieee, crc32_ieee_base, crc32_ieee_ref }, + { "crc32_gzip_refl", crc32_gzip_refl, crc32_gzip_refl_base, crc32_gzip_refl_ref }, + { "crc32_iscsi", crc32_iscsi_wrap, crc32_iscsi_base_wrap, crc32_iscsi_ref_wrap } }; // Generates pseudo-random data -void rand_buffer(unsigned char *buf, long buffer_size) +void +rand_buffer(unsigned char *buf, long buffer_size) { - long i; - for (i = 0; i < buffer_size; i++) - buf[i] = rand(); + long i; + for (i = 0; i < buffer_size; i++) + buf[i] = rand(); } // Test cases -int zeros_test(func_case_t * test_func); +int +zeros_test(func_case_t *test_func); -int simple_pattern_test(func_case_t * test_func); +int +simple_pattern_test(func_case_t *test_func); -int seeds_sizes_test(func_case_t * test_func); +int +seeds_sizes_test(func_case_t *test_func); -int eob_test(func_case_t * test_func); +int +eob_test(func_case_t *test_func); -int update_test(func_case_t * test_func); +int +update_test(func_case_t *test_func); void *buf_alloc = NULL; -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - int fail = 0, fail_case; - int i, ret; - func_case_t *test_func; - - // Align to TEST_SIZE boundary - ret = posix_memalign(&buf_alloc, TEST_SIZE, MAX_BUF * TEST_SIZE); - if (ret) { - printf("alloc error: Fail"); - return -1; - } - srand(TEST_SEED); - printf("CRC32 Tests\n"); - - for (i = 0; i < sizeof(test_funcs) / sizeof(test_funcs[0]); i++) { - fail_case = 0; - test_func = &test_funcs[i]; - - printf("Test %s\t", test_func->note); - fail_case += zeros_test(test_func); - fail_case += simple_pattern_test(test_func); - fail_case += seeds_sizes_test(test_func); - fail_case += eob_test(test_func); - fail_case += update_test(test_func); - printf(" done: %s\n", fail_case ? "Fail" : "Pass"); - - if (fail_case) { - printf("\n%s Failed %d tests\n", test_func->note, fail_case); - fail++; - } - } - - printf("CRC32 Tests all done: %s\n", fail ? "Fail" : "Pass"); - - aligned_free(buf_alloc); - - return fail; + int fail = 0, fail_case; + int i, ret; + func_case_t *test_func; + + // Align to TEST_SIZE boundary + ret = posix_memalign(&buf_alloc, TEST_SIZE, MAX_BUF * TEST_SIZE); + if (ret) { + printf("alloc error: Fail"); + return -1; + } + srand(TEST_SEED); + printf("CRC32 Tests\n"); + + for (i = 0; i < sizeof(test_funcs) / sizeof(test_funcs[0]); i++) { + fail_case = 0; + test_func = &test_funcs[i]; + + printf("Test %s\t", test_func->note); + fail_case += zeros_test(test_func); + fail_case += simple_pattern_test(test_func); + fail_case += seeds_sizes_test(test_func); + fail_case += eob_test(test_func); + fail_case += update_test(test_func); + printf(" done: %s\n", fail_case ? "Fail" : "Pass"); + + if (fail_case) { + printf("\n%s Failed %d tests\n", test_func->note, fail_case); + fail++; + } + } + + printf("CRC32 Tests all done: %s\n", fail ? "Fail" : "Pass"); + + aligned_free(buf_alloc); + + return fail; } // Test of all zeros -int zeros_test(func_case_t * test_func) +int +zeros_test(func_case_t *test_func) { - uint32_t crc_ref, crc_base, crc; - int fail = 0; - unsigned char *buf = NULL; - - buf = (unsigned char *)buf_alloc; - memset(buf, 0, MAX_BUF * 10); - crc_ref = test_func->crc32_ref_call(TEST_SEED, buf, MAX_BUF * 10); - crc_base = test_func->crc32_base_call(TEST_SEED, buf, MAX_BUF * 10); - crc = test_func->crc32_func_call(TEST_SEED, buf, MAX_BUF * 10); - - if ((crc_base != crc_ref) || (crc != crc_ref)) { - fail++; - printf("\n opt ref\n"); - printf(" ------ ------\n"); - printf("fail crc zero = 0x%8x 0x%8x 0x%8x\n", crc_ref, crc_base, crc); - } + uint32_t crc_ref, crc_base, crc; + int fail = 0; + unsigned char *buf = NULL; + + buf = (unsigned char *) buf_alloc; + memset(buf, 0, MAX_BUF * 10); + crc_ref = test_func->crc32_ref_call(TEST_SEED, buf, MAX_BUF * 10); + crc_base = test_func->crc32_base_call(TEST_SEED, buf, MAX_BUF * 10); + crc = test_func->crc32_func_call(TEST_SEED, buf, MAX_BUF * 10); + + if ((crc_base != crc_ref) || (crc != crc_ref)) { + fail++; + printf("\n opt ref\n"); + printf(" ------ ------\n"); + printf("fail crc zero = 0x%8x 0x%8x 0x%8x\n", crc_ref, crc_base, crc); + } #ifdef TEST_VERBOSE - else - printf("."); + else + printf("."); #endif - return fail; + return fail; } // Another simple test pattern -int simple_pattern_test(func_case_t * test_func) +int +simple_pattern_test(func_case_t *test_func) { - uint32_t crc_ref, crc_base, crc; - int fail = 0; - unsigned char *buf = NULL; - - buf = (unsigned char *)buf_alloc; - memset(buf, 0x8a, MAX_BUF); - crc_ref = test_func->crc32_ref_call(TEST_SEED, buf, MAX_BUF); - crc_base = test_func->crc32_base_call(TEST_SEED, buf, MAX_BUF); - crc = test_func->crc32_func_call(TEST_SEED, buf, MAX_BUF); - - if ((crc_base != crc_ref) || (crc != crc_ref)) { - fail++; - printf("fail crc all 8a = 0x%8x 0x%8x 0x%8x\n", crc_ref, crc_base, crc); - } + uint32_t crc_ref, crc_base, crc; + int fail = 0; + unsigned char *buf = NULL; + + buf = (unsigned char *) buf_alloc; + memset(buf, 0x8a, MAX_BUF); + crc_ref = test_func->crc32_ref_call(TEST_SEED, buf, MAX_BUF); + crc_base = test_func->crc32_base_call(TEST_SEED, buf, MAX_BUF); + crc = test_func->crc32_func_call(TEST_SEED, buf, MAX_BUF); + + if ((crc_base != crc_ref) || (crc != crc_ref)) { + fail++; + printf("fail crc all 8a = 0x%8x 0x%8x 0x%8x\n", crc_ref, crc_base, crc); + } #ifdef TEST_VERBOSE - else - printf("."); + else + printf("."); #endif - return fail; + return fail; } -int seeds_sizes_test(func_case_t * test_func) +int +seeds_sizes_test(func_case_t *test_func) { - uint32_t crc_ref, crc_base, crc; - int fail = 0; - int i; - uint64_t r, s; - unsigned char *buf = NULL; - - // Do a few random tests - buf = (unsigned char *)buf_alloc; //reset buf - r = rand(); - rand_buffer(buf, MAX_BUF * TEST_SIZE); - - for (i = 0; i < TEST_SIZE; i++) { - crc_ref = test_func->crc32_ref_call(r, buf, MAX_BUF); - crc_base = test_func->crc32_base_call(r, buf, MAX_BUF); - crc = test_func->crc32_func_call(r, buf, MAX_BUF); - - if ((crc_base != crc_ref) || (crc != crc_ref)) { - fail++; - printf("fail crc rand%3d = 0x%8x 0x%8x 0x%8x\n", i, crc_ref, crc_base, - crc); - } + uint32_t crc_ref, crc_base, crc; + int fail = 0; + int i; + uint64_t r, s; + unsigned char *buf = NULL; + + // Do a few random tests + buf = (unsigned char *) buf_alloc; // reset buf + r = rand(); + rand_buffer(buf, MAX_BUF * TEST_SIZE); + + for (i = 0; i < TEST_SIZE; i++) { + crc_ref = test_func->crc32_ref_call(r, buf, MAX_BUF); + crc_base = test_func->crc32_base_call(r, buf, MAX_BUF); + crc = test_func->crc32_func_call(r, buf, MAX_BUF); + + if ((crc_base != crc_ref) || (crc != crc_ref)) { + fail++; + printf("fail crc rand%3d = 0x%8x 0x%8x 0x%8x\n", i, crc_ref, crc_base, crc); + } #ifdef TEST_VERBOSE - else if (i % (TEST_SIZE / 8) == 0) - printf("."); + else if (i % (TEST_SIZE / 8) == 0) + printf("."); #endif - buf += MAX_BUF; - } - - // Do a few random sizes - buf = (unsigned char *)buf_alloc; //reset buf - r = rand(); - - for (i = MAX_BUF; i >= 0; i--) { - crc_ref = test_func->crc32_ref_call(r, buf, i); - crc_base = test_func->crc32_base_call(r, buf, i); - crc = test_func->crc32_func_call(r, buf, i); - - if ((crc_base != crc_ref) || (crc != crc_ref)) { - fail++; - printf("fail random size%i 0x%8x 0x%8x 0x%8x\n", i, crc_ref, crc_base, - crc); - } + buf += MAX_BUF; + } + + // Do a few random sizes + buf = (unsigned char *) buf_alloc; // reset buf + r = rand(); + + for (i = MAX_BUF; i >= 0; i--) { + crc_ref = test_func->crc32_ref_call(r, buf, i); + crc_base = test_func->crc32_base_call(r, buf, i); + crc = test_func->crc32_func_call(r, buf, i); + + if ((crc_base != crc_ref) || (crc != crc_ref)) { + fail++; + printf("fail random size%i 0x%8x 0x%8x 0x%8x\n", i, crc_ref, crc_base, crc); + } #ifdef TEST_VERBOSE - else if (i % (MAX_BUF / 8) == 0) - printf("."); + else if (i % (MAX_BUF / 8) == 0) + printf("."); #endif - } + } - // Try different seeds - for (s = 0; s < 20; s++) { - buf = (unsigned char *)buf_alloc; //reset buf + // Try different seeds + for (s = 0; s < 20; s++) { + buf = (unsigned char *) buf_alloc; // reset buf - r = rand(); // just to get a new seed - rand_buffer(buf, MAX_BUF * TEST_SIZE); // new pseudo-rand data + r = rand(); // just to get a new seed + rand_buffer(buf, MAX_BUF * TEST_SIZE); // new pseudo-rand data #ifdef TEST_VERBOSE - printf("seed = 0x%lx\n", r); + printf("seed = 0x%lx\n", r); #endif - for (i = 0; i < TEST_SIZE; i++) { - crc_ref = test_func->crc32_ref_call(r, buf, MAX_BUF); - crc_base = test_func->crc32_base_call(r, buf, MAX_BUF); - crc = test_func->crc32_func_call(r, buf, MAX_BUF); + for (i = 0; i < TEST_SIZE; i++) { + crc_ref = test_func->crc32_ref_call(r, buf, MAX_BUF); + crc_base = test_func->crc32_base_call(r, buf, MAX_BUF); + crc = test_func->crc32_func_call(r, buf, MAX_BUF); - if ((crc_base != crc_ref) || (crc != crc_ref)) { - fail++; - printf("fail crc rand%3d = 0x%8x 0x%8x 0x%8x\n", i, crc_ref, - crc_base, crc); - } + if ((crc_base != crc_ref) || (crc != crc_ref)) { + fail++; + printf("fail crc rand%3d = 0x%8x 0x%8x 0x%8x\n", i, crc_ref, + crc_base, crc); + } #ifdef TEST_VERBOSE - else if (i % (TEST_SIZE * 20 / 8) == 0) - printf("."); + else if (i % (TEST_SIZE * 20 / 8) == 0) + printf("."); #endif - buf += MAX_BUF; - } - } + buf += MAX_BUF; + } + } - return fail; + return fail; } // Run tests at end of buffer -int eob_test(func_case_t * test_func) +int +eob_test(func_case_t *test_func) { - uint32_t crc_ref, crc_base, crc; - int fail = 0; - int i; - unsigned char *buf = NULL; - - // Null test - if (0 != test_func->crc32_func_call(0, NULL, 0)) { - fail++; - printf("crc null test fail\n"); - } - - buf = (unsigned char *)buf_alloc; //reset buf - buf = buf + ((MAX_BUF - 1) * TEST_SIZE); //Line up TEST_SIZE from end - for (i = 0; i <= TEST_SIZE; i++) { - crc_ref = test_func->crc32_ref_call(TEST_SEED, buf + i, TEST_SIZE - i); - crc_base = test_func->crc32_base_call(TEST_SEED, buf + i, TEST_SIZE - i); - crc = test_func->crc32_func_call(TEST_SEED, buf + i, TEST_SIZE - i); - - if ((crc_base != crc_ref) || (crc != crc_ref)) { - fail++; - printf("fail crc eob rand%3d = 0x%8x 0x%8x 0x%8x\n", i, crc_ref, - crc_base, crc); - } + uint32_t crc_ref, crc_base, crc; + int fail = 0; + int i; + unsigned char *buf = NULL; + + // Null test + if (0 != test_func->crc32_func_call(0, NULL, 0)) { + fail++; + printf("crc null test fail\n"); + } + + buf = (unsigned char *) buf_alloc; // reset buf + buf = buf + ((MAX_BUF - 1) * TEST_SIZE); // Line up TEST_SIZE from end + for (i = 0; i <= TEST_SIZE; i++) { + crc_ref = test_func->crc32_ref_call(TEST_SEED, buf + i, TEST_SIZE - i); + crc_base = test_func->crc32_base_call(TEST_SEED, buf + i, TEST_SIZE - i); + crc = test_func->crc32_func_call(TEST_SEED, buf + i, TEST_SIZE - i); + + if ((crc_base != crc_ref) || (crc != crc_ref)) { + fail++; + printf("fail crc eob rand%3d = 0x%8x 0x%8x 0x%8x\n", i, crc_ref, crc_base, + crc); + } #ifdef TEST_VERBOSE - else if (i % (TEST_SIZE / 8) == 0) - printf("."); + else if (i % (TEST_SIZE / 8) == 0) + printf("."); #endif - } + } - return fail; + return fail; } -int update_test(func_case_t * test_func) +int +update_test(func_case_t *test_func) { - uint32_t crc_ref, crc_base, crc; - int fail = 0; - int i; - uint64_t r; - unsigned char *buf = NULL; - - buf = (unsigned char *)buf_alloc; //reset buf - r = rand(); - // Process the whole buf with reference func single call. - crc_ref = test_func->crc32_ref_call(r, buf, MAX_BUF * TEST_SIZE); - crc_base = test_func->crc32_base_call(r, buf, MAX_BUF * TEST_SIZE); - // Process buf with update method. - for (i = 0; i < TEST_SIZE; i++) { - crc = test_func->crc32_func_call(r, buf, MAX_BUF); - // Update crc seeds and buf pointer. - r = crc; - buf += MAX_BUF; - } - - if ((crc_base != crc_ref) || (crc != crc_ref)) { - fail++; - printf("fail crc rand%3d = 0x%8x 0x%8x 0x%8x\n", i, crc_ref, crc_base, crc); - } + uint32_t crc_ref, crc_base, crc; + int fail = 0; + int i; + uint64_t r; + unsigned char *buf = NULL; + + buf = (unsigned char *) buf_alloc; // reset buf + r = rand(); + // Process the whole buf with reference func single call. + crc_ref = test_func->crc32_ref_call(r, buf, MAX_BUF * TEST_SIZE); + crc_base = test_func->crc32_base_call(r, buf, MAX_BUF * TEST_SIZE); + // Process buf with update method. + for (i = 0; i < TEST_SIZE; i++) { + crc = test_func->crc32_func_call(r, buf, MAX_BUF); + // Update crc seeds and buf pointer. + r = crc; + buf += MAX_BUF; + } + + if ((crc_base != crc_ref) || (crc != crc_ref)) { + fail++; + printf("fail crc rand%3d = 0x%8x 0x%8x 0x%8x\n", i, crc_ref, crc_base, crc); + } #ifdef TEST_VERBOSE - else - printf("."); + else + printf("."); #endif - return fail; + return fail; } diff --git a/crc/crc32_gzip_refl_perf.c b/crc/crc32_gzip_refl_perf.c index 4c6f74d6..32422874 100644 --- a/crc/crc32_gzip_refl_perf.c +++ b/crc/crc32_gzip_refl_perf.c @@ -35,58 +35,58 @@ #include "test.h" #ifndef GT_L3_CACHE -# define GT_L3_CACHE 32*1024*1024 /* some number > last level cache */ +#define GT_L3_CACHE 32 * 1024 * 1024 /* some number > last level cache */ #endif #if !defined(COLD_TEST) && !defined(TEST_CUSTOM) // Cached test, loop many times over small dataset -# define TEST_LEN 8*1024 -# define TEST_TYPE_STR "_warm" -#elif defined (COLD_TEST) +#define TEST_LEN 8 * 1024 +#define TEST_TYPE_STR "_warm" +#elif defined(COLD_TEST) // Uncached test. Pull from large mem base. -# define TEST_LEN (2 * GT_L3_CACHE) -# define TEST_TYPE_STR "_cold" +#define TEST_LEN (2 * GT_L3_CACHE) +#define TEST_TYPE_STR "_cold" #endif #ifndef TEST_SEED -# define TEST_SEED 0x1234 +#define TEST_SEED 0x1234 #endif #define TEST_MEM TEST_LEN -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - void *buf; - uint32_t crc; - struct perf start; + void *buf; + uint32_t crc; + struct perf start; - printf("crc32_gzip_refl_perf:\n"); + printf("crc32_gzip_refl_perf:\n"); - if (posix_memalign(&buf, 1024, TEST_LEN)) { - printf("alloc error: Fail"); - return -1; - } + if (posix_memalign(&buf, 1024, TEST_LEN)) { + printf("alloc error: Fail"); + return -1; + } - printf("Start timed tests\n"); - fflush(0); + printf("Start timed tests\n"); + fflush(0); - memset(buf, 0, TEST_LEN); - BENCHMARK(&start, BENCHMARK_TIME, crc = crc32_gzip_refl(TEST_SEED, buf, TEST_LEN)); - printf("crc32_gzip_refl" TEST_TYPE_STR ": "); - perf_print(start, (long long)TEST_LEN); + memset(buf, 0, TEST_LEN); + BENCHMARK(&start, BENCHMARK_TIME, crc = crc32_gzip_refl(TEST_SEED, buf, TEST_LEN)); + printf("crc32_gzip_refl" TEST_TYPE_STR ": "); + perf_print(start, (long long) TEST_LEN); - printf("finish 0x%x\n", crc); + printf("finish 0x%x\n", crc); - printf("crc32_gzip_refl_base_perf:\n"); - printf("Start timed tests\n"); - fflush(0); + printf("crc32_gzip_refl_base_perf:\n"); + printf("Start timed tests\n"); + fflush(0); - BENCHMARK(&start, BENCHMARK_TIME, crc = - crc32_gzip_refl_base(TEST_SEED, buf, TEST_LEN)); - printf("crc32_gzip_refl_base" TEST_TYPE_STR ": "); - perf_print(start, (long long)TEST_LEN); + BENCHMARK(&start, BENCHMARK_TIME, crc = crc32_gzip_refl_base(TEST_SEED, buf, TEST_LEN)); + printf("crc32_gzip_refl_base" TEST_TYPE_STR ": "); + perf_print(start, (long long) TEST_LEN); - printf("finish 0x%x\n", crc); + printf("finish 0x%x\n", crc); - return 0; + return 0; } diff --git a/crc/crc32_ieee_perf.c b/crc/crc32_ieee_perf.c index 67c506c6..733747a2 100644 --- a/crc/crc32_ieee_perf.c +++ b/crc/crc32_ieee_perf.c @@ -35,46 +35,47 @@ #include "test.h" #ifndef GT_L3_CACHE -# define GT_L3_CACHE 32*1024*1024 /* some number > last level cache */ +#define GT_L3_CACHE 32 * 1024 * 1024 /* some number > last level cache */ #endif #if !defined(COLD_TEST) && !defined(TEST_CUSTOM) // Cached test, loop many times over small dataset -# define TEST_LEN 8*1024 -# define TEST_TYPE_STR "_warm" -#elif defined (COLD_TEST) +#define TEST_LEN 8 * 1024 +#define TEST_TYPE_STR "_warm" +#elif defined(COLD_TEST) // Uncached test. Pull from large mem base. -# define TEST_LEN (2 * GT_L3_CACHE) -# define TEST_TYPE_STR "_cold" +#define TEST_LEN (2 * GT_L3_CACHE) +#define TEST_TYPE_STR "_cold" #endif #ifndef TEST_SEED -# define TEST_SEED 0x1234 +#define TEST_SEED 0x1234 #endif #define TEST_MEM TEST_LEN -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - void *buf; - uint32_t crc; - struct perf start; + void *buf; + uint32_t crc; + struct perf start; - printf("crc32_ieee_perf:\n"); + printf("crc32_ieee_perf:\n"); - if (posix_memalign(&buf, 1024, TEST_LEN)) { - printf("alloc error: Fail"); - return -1; - } + if (posix_memalign(&buf, 1024, TEST_LEN)) { + printf("alloc error: Fail"); + return -1; + } - printf("Start timed tests\n"); - fflush(0); + printf("Start timed tests\n"); + fflush(0); - memset(buf, 0, TEST_LEN); - BENCHMARK(&start, BENCHMARK_TIME, crc = crc32_ieee(TEST_SEED, buf, TEST_LEN)); - printf("crc32_ieee" TEST_TYPE_STR ": "); - perf_print(start, (long long)TEST_LEN); + memset(buf, 0, TEST_LEN); + BENCHMARK(&start, BENCHMARK_TIME, crc = crc32_ieee(TEST_SEED, buf, TEST_LEN)); + printf("crc32_ieee" TEST_TYPE_STR ": "); + perf_print(start, (long long) TEST_LEN); - printf("finish 0x%x\n", crc); - return 0; + printf("finish 0x%x\n", crc); + return 0; } diff --git a/crc/crc32_iscsi_perf.c b/crc/crc32_iscsi_perf.c index 52067c4a..e754da56 100644 --- a/crc/crc32_iscsi_perf.c +++ b/crc/crc32_iscsi_perf.c @@ -35,46 +35,47 @@ #include "test.h" #ifndef GT_L3_CACHE -# define GT_L3_CACHE 32*1024*1024 /* some number > last level cache */ +#define GT_L3_CACHE 32 * 1024 * 1024 /* some number > last level cache */ #endif #if !defined(COLD_TEST) && !defined(TEST_CUSTOM) // Cached test, loop many times over small dataset -# define TEST_LEN 8*1024 -# define TEST_TYPE_STR "_warm" -#elif defined (COLD_TEST) +#define TEST_LEN 8 * 1024 +#define TEST_TYPE_STR "_warm" +#elif defined(COLD_TEST) // Uncached test. Pull from large mem base. -# define TEST_LEN (2 * GT_L3_CACHE) -# define TEST_TYPE_STR "_cold" +#define TEST_LEN (2 * GT_L3_CACHE) +#define TEST_TYPE_STR "_cold" #endif #ifndef TEST_SEED -# define TEST_SEED 0x1234 +#define TEST_SEED 0x1234 #endif #define TEST_MEM TEST_LEN -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - void *buf; - uint32_t crc; - struct perf start; + void *buf; + uint32_t crc; + struct perf start; - printf("crc32_iscsi_perf:\n"); + printf("crc32_iscsi_perf:\n"); - if (posix_memalign(&buf, 1024, TEST_LEN)) { - printf("alloc error: Fail"); - return -1; - } + if (posix_memalign(&buf, 1024, TEST_LEN)) { + printf("alloc error: Fail"); + return -1; + } - printf("Start timed tests\n"); - fflush(0); + printf("Start timed tests\n"); + fflush(0); - memset(buf, 0, TEST_LEN); - BENCHMARK(&start, BENCHMARK_TIME, crc = crc32_iscsi(buf, TEST_LEN, TEST_SEED)); - printf("crc32_iscsi" TEST_TYPE_STR ": "); - perf_print(start, (long long)TEST_LEN); + memset(buf, 0, TEST_LEN); + BENCHMARK(&start, BENCHMARK_TIME, crc = crc32_iscsi(buf, TEST_LEN, TEST_SEED)); + printf("crc32_iscsi" TEST_TYPE_STR ": "); + perf_print(start, (long long) TEST_LEN); - printf("finish 0x%x\n", crc); - return 0; + printf("finish 0x%x\n", crc); + return 0; } diff --git a/crc/crc64_base.c b/crc/crc64_base.c index e69b95bf..ef0cd6e5 100644 --- a/crc/crc64_base.c +++ b/crc/crc64_base.c @@ -30,1145 +30,641 @@ #include "crc64.h" static const uint64_t crc64_ecma_refl_table[256] = { - 0x0000000000000000ULL, 0xb32e4cbe03a75f6fULL, - 0xf4843657a840a05bULL, 0x47aa7ae9abe7ff34ULL, - 0x7bd0c384ff8f5e33ULL, 0xc8fe8f3afc28015cULL, - 0x8f54f5d357cffe68ULL, 0x3c7ab96d5468a107ULL, - 0xf7a18709ff1ebc66ULL, 0x448fcbb7fcb9e309ULL, - 0x0325b15e575e1c3dULL, 0xb00bfde054f94352ULL, - 0x8c71448d0091e255ULL, 0x3f5f08330336bd3aULL, - 0x78f572daa8d1420eULL, 0xcbdb3e64ab761d61ULL, - 0x7d9ba13851336649ULL, 0xceb5ed8652943926ULL, - 0x891f976ff973c612ULL, 0x3a31dbd1fad4997dULL, - 0x064b62bcaebc387aULL, 0xb5652e02ad1b6715ULL, - 0xf2cf54eb06fc9821ULL, 0x41e11855055bc74eULL, - 0x8a3a2631ae2dda2fULL, 0x39146a8fad8a8540ULL, - 0x7ebe1066066d7a74ULL, 0xcd905cd805ca251bULL, - 0xf1eae5b551a2841cULL, 0x42c4a90b5205db73ULL, - 0x056ed3e2f9e22447ULL, 0xb6409f5cfa457b28ULL, - 0xfb374270a266cc92ULL, 0x48190ecea1c193fdULL, - 0x0fb374270a266cc9ULL, 0xbc9d3899098133a6ULL, - 0x80e781f45de992a1ULL, 0x33c9cd4a5e4ecdceULL, - 0x7463b7a3f5a932faULL, 0xc74dfb1df60e6d95ULL, - 0x0c96c5795d7870f4ULL, 0xbfb889c75edf2f9bULL, - 0xf812f32ef538d0afULL, 0x4b3cbf90f69f8fc0ULL, - 0x774606fda2f72ec7ULL, 0xc4684a43a15071a8ULL, - 0x83c230aa0ab78e9cULL, 0x30ec7c140910d1f3ULL, - 0x86ace348f355aadbULL, 0x3582aff6f0f2f5b4ULL, - 0x7228d51f5b150a80ULL, 0xc10699a158b255efULL, - 0xfd7c20cc0cdaf4e8ULL, 0x4e526c720f7dab87ULL, - 0x09f8169ba49a54b3ULL, 0xbad65a25a73d0bdcULL, - 0x710d64410c4b16bdULL, 0xc22328ff0fec49d2ULL, - 0x85895216a40bb6e6ULL, 0x36a71ea8a7ace989ULL, - 0x0adda7c5f3c4488eULL, 0xb9f3eb7bf06317e1ULL, - 0xfe5991925b84e8d5ULL, 0x4d77dd2c5823b7baULL, - 0x64b62bcaebc387a1ULL, 0xd7986774e864d8ceULL, - 0x90321d9d438327faULL, 0x231c512340247895ULL, - 0x1f66e84e144cd992ULL, 0xac48a4f017eb86fdULL, - 0xebe2de19bc0c79c9ULL, 0x58cc92a7bfab26a6ULL, - 0x9317acc314dd3bc7ULL, 0x2039e07d177a64a8ULL, - 0x67939a94bc9d9b9cULL, 0xd4bdd62abf3ac4f3ULL, - 0xe8c76f47eb5265f4ULL, 0x5be923f9e8f53a9bULL, - 0x1c4359104312c5afULL, 0xaf6d15ae40b59ac0ULL, - 0x192d8af2baf0e1e8ULL, 0xaa03c64cb957be87ULL, - 0xeda9bca512b041b3ULL, 0x5e87f01b11171edcULL, - 0x62fd4976457fbfdbULL, 0xd1d305c846d8e0b4ULL, - 0x96797f21ed3f1f80ULL, 0x2557339fee9840efULL, - 0xee8c0dfb45ee5d8eULL, 0x5da24145464902e1ULL, - 0x1a083bacedaefdd5ULL, 0xa9267712ee09a2baULL, - 0x955cce7fba6103bdULL, 0x267282c1b9c65cd2ULL, - 0x61d8f8281221a3e6ULL, 0xd2f6b4961186fc89ULL, - 0x9f8169ba49a54b33ULL, 0x2caf25044a02145cULL, - 0x6b055fede1e5eb68ULL, 0xd82b1353e242b407ULL, - 0xe451aa3eb62a1500ULL, 0x577fe680b58d4a6fULL, - 0x10d59c691e6ab55bULL, 0xa3fbd0d71dcdea34ULL, - 0x6820eeb3b6bbf755ULL, 0xdb0ea20db51ca83aULL, - 0x9ca4d8e41efb570eULL, 0x2f8a945a1d5c0861ULL, - 0x13f02d374934a966ULL, 0xa0de61894a93f609ULL, - 0xe7741b60e174093dULL, 0x545a57dee2d35652ULL, - 0xe21ac88218962d7aULL, 0x5134843c1b317215ULL, - 0x169efed5b0d68d21ULL, 0xa5b0b26bb371d24eULL, - 0x99ca0b06e7197349ULL, 0x2ae447b8e4be2c26ULL, - 0x6d4e3d514f59d312ULL, 0xde6071ef4cfe8c7dULL, - 0x15bb4f8be788911cULL, 0xa6950335e42fce73ULL, - 0xe13f79dc4fc83147ULL, 0x521135624c6f6e28ULL, - 0x6e6b8c0f1807cf2fULL, 0xdd45c0b11ba09040ULL, - 0x9aefba58b0476f74ULL, 0x29c1f6e6b3e0301bULL, - 0xc96c5795d7870f42ULL, 0x7a421b2bd420502dULL, - 0x3de861c27fc7af19ULL, 0x8ec62d7c7c60f076ULL, - 0xb2bc941128085171ULL, 0x0192d8af2baf0e1eULL, - 0x4638a2468048f12aULL, 0xf516eef883efae45ULL, - 0x3ecdd09c2899b324ULL, 0x8de39c222b3eec4bULL, - 0xca49e6cb80d9137fULL, 0x7967aa75837e4c10ULL, - 0x451d1318d716ed17ULL, 0xf6335fa6d4b1b278ULL, - 0xb199254f7f564d4cULL, 0x02b769f17cf11223ULL, - 0xb4f7f6ad86b4690bULL, 0x07d9ba1385133664ULL, - 0x4073c0fa2ef4c950ULL, 0xf35d8c442d53963fULL, - 0xcf273529793b3738ULL, 0x7c0979977a9c6857ULL, - 0x3ba3037ed17b9763ULL, 0x888d4fc0d2dcc80cULL, - 0x435671a479aad56dULL, 0xf0783d1a7a0d8a02ULL, - 0xb7d247f3d1ea7536ULL, 0x04fc0b4dd24d2a59ULL, - 0x3886b22086258b5eULL, 0x8ba8fe9e8582d431ULL, - 0xcc0284772e652b05ULL, 0x7f2cc8c92dc2746aULL, - 0x325b15e575e1c3d0ULL, 0x8175595b76469cbfULL, - 0xc6df23b2dda1638bULL, 0x75f16f0cde063ce4ULL, - 0x498bd6618a6e9de3ULL, 0xfaa59adf89c9c28cULL, - 0xbd0fe036222e3db8ULL, 0x0e21ac88218962d7ULL, - 0xc5fa92ec8aff7fb6ULL, 0x76d4de52895820d9ULL, - 0x317ea4bb22bfdfedULL, 0x8250e80521188082ULL, - 0xbe2a516875702185ULL, 0x0d041dd676d77eeaULL, - 0x4aae673fdd3081deULL, 0xf9802b81de97deb1ULL, - 0x4fc0b4dd24d2a599ULL, 0xfceef8632775faf6ULL, - 0xbb44828a8c9205c2ULL, 0x086ace348f355aadULL, - 0x34107759db5dfbaaULL, 0x873e3be7d8faa4c5ULL, - 0xc094410e731d5bf1ULL, 0x73ba0db070ba049eULL, - 0xb86133d4dbcc19ffULL, 0x0b4f7f6ad86b4690ULL, - 0x4ce50583738cb9a4ULL, 0xffcb493d702be6cbULL, - 0xc3b1f050244347ccULL, 0x709fbcee27e418a3ULL, - 0x3735c6078c03e797ULL, 0x841b8ab98fa4b8f8ULL, - 0xadda7c5f3c4488e3ULL, 0x1ef430e13fe3d78cULL, - 0x595e4a08940428b8ULL, 0xea7006b697a377d7ULL, - 0xd60abfdbc3cbd6d0ULL, 0x6524f365c06c89bfULL, - 0x228e898c6b8b768bULL, 0x91a0c532682c29e4ULL, - 0x5a7bfb56c35a3485ULL, 0xe955b7e8c0fd6beaULL, - 0xaeffcd016b1a94deULL, 0x1dd181bf68bdcbb1ULL, - 0x21ab38d23cd56ab6ULL, 0x9285746c3f7235d9ULL, - 0xd52f0e859495caedULL, 0x6601423b97329582ULL, - 0xd041dd676d77eeaaULL, 0x636f91d96ed0b1c5ULL, - 0x24c5eb30c5374ef1ULL, 0x97eba78ec690119eULL, - 0xab911ee392f8b099ULL, 0x18bf525d915feff6ULL, - 0x5f1528b43ab810c2ULL, 0xec3b640a391f4fadULL, - 0x27e05a6e926952ccULL, 0x94ce16d091ce0da3ULL, - 0xd3646c393a29f297ULL, 0x604a2087398eadf8ULL, - 0x5c3099ea6de60cffULL, 0xef1ed5546e415390ULL, - 0xa8b4afbdc5a6aca4ULL, 0x1b9ae303c601f3cbULL, - 0x56ed3e2f9e224471ULL, 0xe5c372919d851b1eULL, - 0xa26908783662e42aULL, 0x114744c635c5bb45ULL, - 0x2d3dfdab61ad1a42ULL, 0x9e13b115620a452dULL, - 0xd9b9cbfcc9edba19ULL, 0x6a978742ca4ae576ULL, - 0xa14cb926613cf817ULL, 0x1262f598629ba778ULL, - 0x55c88f71c97c584cULL, 0xe6e6c3cfcadb0723ULL, - 0xda9c7aa29eb3a624ULL, 0x69b2361c9d14f94bULL, - 0x2e184cf536f3067fULL, 0x9d36004b35545910ULL, - 0x2b769f17cf112238ULL, 0x9858d3a9ccb67d57ULL, - 0xdff2a94067518263ULL, 0x6cdce5fe64f6dd0cULL, - 0x50a65c93309e7c0bULL, 0xe388102d33392364ULL, - 0xa4226ac498dedc50ULL, 0x170c267a9b79833fULL, - 0xdcd7181e300f9e5eULL, 0x6ff954a033a8c131ULL, - 0x28532e49984f3e05ULL, 0x9b7d62f79be8616aULL, - 0xa707db9acf80c06dULL, 0x14299724cc279f02ULL, - 0x5383edcd67c06036ULL, 0xe0ada17364673f59ULL + 0x0000000000000000ULL, 0xb32e4cbe03a75f6fULL, 0xf4843657a840a05bULL, 0x47aa7ae9abe7ff34ULL, + 0x7bd0c384ff8f5e33ULL, 0xc8fe8f3afc28015cULL, 0x8f54f5d357cffe68ULL, 0x3c7ab96d5468a107ULL, + 0xf7a18709ff1ebc66ULL, 0x448fcbb7fcb9e309ULL, 0x0325b15e575e1c3dULL, 0xb00bfde054f94352ULL, + 0x8c71448d0091e255ULL, 0x3f5f08330336bd3aULL, 0x78f572daa8d1420eULL, 0xcbdb3e64ab761d61ULL, + 0x7d9ba13851336649ULL, 0xceb5ed8652943926ULL, 0x891f976ff973c612ULL, 0x3a31dbd1fad4997dULL, + 0x064b62bcaebc387aULL, 0xb5652e02ad1b6715ULL, 0xf2cf54eb06fc9821ULL, 0x41e11855055bc74eULL, + 0x8a3a2631ae2dda2fULL, 0x39146a8fad8a8540ULL, 0x7ebe1066066d7a74ULL, 0xcd905cd805ca251bULL, + 0xf1eae5b551a2841cULL, 0x42c4a90b5205db73ULL, 0x056ed3e2f9e22447ULL, 0xb6409f5cfa457b28ULL, + 0xfb374270a266cc92ULL, 0x48190ecea1c193fdULL, 0x0fb374270a266cc9ULL, 0xbc9d3899098133a6ULL, + 0x80e781f45de992a1ULL, 0x33c9cd4a5e4ecdceULL, 0x7463b7a3f5a932faULL, 0xc74dfb1df60e6d95ULL, + 0x0c96c5795d7870f4ULL, 0xbfb889c75edf2f9bULL, 0xf812f32ef538d0afULL, 0x4b3cbf90f69f8fc0ULL, + 0x774606fda2f72ec7ULL, 0xc4684a43a15071a8ULL, 0x83c230aa0ab78e9cULL, 0x30ec7c140910d1f3ULL, + 0x86ace348f355aadbULL, 0x3582aff6f0f2f5b4ULL, 0x7228d51f5b150a80ULL, 0xc10699a158b255efULL, + 0xfd7c20cc0cdaf4e8ULL, 0x4e526c720f7dab87ULL, 0x09f8169ba49a54b3ULL, 0xbad65a25a73d0bdcULL, + 0x710d64410c4b16bdULL, 0xc22328ff0fec49d2ULL, 0x85895216a40bb6e6ULL, 0x36a71ea8a7ace989ULL, + 0x0adda7c5f3c4488eULL, 0xb9f3eb7bf06317e1ULL, 0xfe5991925b84e8d5ULL, 0x4d77dd2c5823b7baULL, + 0x64b62bcaebc387a1ULL, 0xd7986774e864d8ceULL, 0x90321d9d438327faULL, 0x231c512340247895ULL, + 0x1f66e84e144cd992ULL, 0xac48a4f017eb86fdULL, 0xebe2de19bc0c79c9ULL, 0x58cc92a7bfab26a6ULL, + 0x9317acc314dd3bc7ULL, 0x2039e07d177a64a8ULL, 0x67939a94bc9d9b9cULL, 0xd4bdd62abf3ac4f3ULL, + 0xe8c76f47eb5265f4ULL, 0x5be923f9e8f53a9bULL, 0x1c4359104312c5afULL, 0xaf6d15ae40b59ac0ULL, + 0x192d8af2baf0e1e8ULL, 0xaa03c64cb957be87ULL, 0xeda9bca512b041b3ULL, 0x5e87f01b11171edcULL, + 0x62fd4976457fbfdbULL, 0xd1d305c846d8e0b4ULL, 0x96797f21ed3f1f80ULL, 0x2557339fee9840efULL, + 0xee8c0dfb45ee5d8eULL, 0x5da24145464902e1ULL, 0x1a083bacedaefdd5ULL, 0xa9267712ee09a2baULL, + 0x955cce7fba6103bdULL, 0x267282c1b9c65cd2ULL, 0x61d8f8281221a3e6ULL, 0xd2f6b4961186fc89ULL, + 0x9f8169ba49a54b33ULL, 0x2caf25044a02145cULL, 0x6b055fede1e5eb68ULL, 0xd82b1353e242b407ULL, + 0xe451aa3eb62a1500ULL, 0x577fe680b58d4a6fULL, 0x10d59c691e6ab55bULL, 0xa3fbd0d71dcdea34ULL, + 0x6820eeb3b6bbf755ULL, 0xdb0ea20db51ca83aULL, 0x9ca4d8e41efb570eULL, 0x2f8a945a1d5c0861ULL, + 0x13f02d374934a966ULL, 0xa0de61894a93f609ULL, 0xe7741b60e174093dULL, 0x545a57dee2d35652ULL, + 0xe21ac88218962d7aULL, 0x5134843c1b317215ULL, 0x169efed5b0d68d21ULL, 0xa5b0b26bb371d24eULL, + 0x99ca0b06e7197349ULL, 0x2ae447b8e4be2c26ULL, 0x6d4e3d514f59d312ULL, 0xde6071ef4cfe8c7dULL, + 0x15bb4f8be788911cULL, 0xa6950335e42fce73ULL, 0xe13f79dc4fc83147ULL, 0x521135624c6f6e28ULL, + 0x6e6b8c0f1807cf2fULL, 0xdd45c0b11ba09040ULL, 0x9aefba58b0476f74ULL, 0x29c1f6e6b3e0301bULL, + 0xc96c5795d7870f42ULL, 0x7a421b2bd420502dULL, 0x3de861c27fc7af19ULL, 0x8ec62d7c7c60f076ULL, + 0xb2bc941128085171ULL, 0x0192d8af2baf0e1eULL, 0x4638a2468048f12aULL, 0xf516eef883efae45ULL, + 0x3ecdd09c2899b324ULL, 0x8de39c222b3eec4bULL, 0xca49e6cb80d9137fULL, 0x7967aa75837e4c10ULL, + 0x451d1318d716ed17ULL, 0xf6335fa6d4b1b278ULL, 0xb199254f7f564d4cULL, 0x02b769f17cf11223ULL, + 0xb4f7f6ad86b4690bULL, 0x07d9ba1385133664ULL, 0x4073c0fa2ef4c950ULL, 0xf35d8c442d53963fULL, + 0xcf273529793b3738ULL, 0x7c0979977a9c6857ULL, 0x3ba3037ed17b9763ULL, 0x888d4fc0d2dcc80cULL, + 0x435671a479aad56dULL, 0xf0783d1a7a0d8a02ULL, 0xb7d247f3d1ea7536ULL, 0x04fc0b4dd24d2a59ULL, + 0x3886b22086258b5eULL, 0x8ba8fe9e8582d431ULL, 0xcc0284772e652b05ULL, 0x7f2cc8c92dc2746aULL, + 0x325b15e575e1c3d0ULL, 0x8175595b76469cbfULL, 0xc6df23b2dda1638bULL, 0x75f16f0cde063ce4ULL, + 0x498bd6618a6e9de3ULL, 0xfaa59adf89c9c28cULL, 0xbd0fe036222e3db8ULL, 0x0e21ac88218962d7ULL, + 0xc5fa92ec8aff7fb6ULL, 0x76d4de52895820d9ULL, 0x317ea4bb22bfdfedULL, 0x8250e80521188082ULL, + 0xbe2a516875702185ULL, 0x0d041dd676d77eeaULL, 0x4aae673fdd3081deULL, 0xf9802b81de97deb1ULL, + 0x4fc0b4dd24d2a599ULL, 0xfceef8632775faf6ULL, 0xbb44828a8c9205c2ULL, 0x086ace348f355aadULL, + 0x34107759db5dfbaaULL, 0x873e3be7d8faa4c5ULL, 0xc094410e731d5bf1ULL, 0x73ba0db070ba049eULL, + 0xb86133d4dbcc19ffULL, 0x0b4f7f6ad86b4690ULL, 0x4ce50583738cb9a4ULL, 0xffcb493d702be6cbULL, + 0xc3b1f050244347ccULL, 0x709fbcee27e418a3ULL, 0x3735c6078c03e797ULL, 0x841b8ab98fa4b8f8ULL, + 0xadda7c5f3c4488e3ULL, 0x1ef430e13fe3d78cULL, 0x595e4a08940428b8ULL, 0xea7006b697a377d7ULL, + 0xd60abfdbc3cbd6d0ULL, 0x6524f365c06c89bfULL, 0x228e898c6b8b768bULL, 0x91a0c532682c29e4ULL, + 0x5a7bfb56c35a3485ULL, 0xe955b7e8c0fd6beaULL, 0xaeffcd016b1a94deULL, 0x1dd181bf68bdcbb1ULL, + 0x21ab38d23cd56ab6ULL, 0x9285746c3f7235d9ULL, 0xd52f0e859495caedULL, 0x6601423b97329582ULL, + 0xd041dd676d77eeaaULL, 0x636f91d96ed0b1c5ULL, 0x24c5eb30c5374ef1ULL, 0x97eba78ec690119eULL, + 0xab911ee392f8b099ULL, 0x18bf525d915feff6ULL, 0x5f1528b43ab810c2ULL, 0xec3b640a391f4fadULL, + 0x27e05a6e926952ccULL, 0x94ce16d091ce0da3ULL, 0xd3646c393a29f297ULL, 0x604a2087398eadf8ULL, + 0x5c3099ea6de60cffULL, 0xef1ed5546e415390ULL, 0xa8b4afbdc5a6aca4ULL, 0x1b9ae303c601f3cbULL, + 0x56ed3e2f9e224471ULL, 0xe5c372919d851b1eULL, 0xa26908783662e42aULL, 0x114744c635c5bb45ULL, + 0x2d3dfdab61ad1a42ULL, 0x9e13b115620a452dULL, 0xd9b9cbfcc9edba19ULL, 0x6a978742ca4ae576ULL, + 0xa14cb926613cf817ULL, 0x1262f598629ba778ULL, 0x55c88f71c97c584cULL, 0xe6e6c3cfcadb0723ULL, + 0xda9c7aa29eb3a624ULL, 0x69b2361c9d14f94bULL, 0x2e184cf536f3067fULL, 0x9d36004b35545910ULL, + 0x2b769f17cf112238ULL, 0x9858d3a9ccb67d57ULL, 0xdff2a94067518263ULL, 0x6cdce5fe64f6dd0cULL, + 0x50a65c93309e7c0bULL, 0xe388102d33392364ULL, 0xa4226ac498dedc50ULL, 0x170c267a9b79833fULL, + 0xdcd7181e300f9e5eULL, 0x6ff954a033a8c131ULL, 0x28532e49984f3e05ULL, 0x9b7d62f79be8616aULL, + 0xa707db9acf80c06dULL, 0x14299724cc279f02ULL, 0x5383edcd67c06036ULL, 0xe0ada17364673f59ULL }; static const uint64_t crc64_ecma_norm_table[256] = { - 0x0000000000000000ULL, 0x42f0e1eba9ea3693ULL, - 0x85e1c3d753d46d26ULL, 0xc711223cfa3e5bb5ULL, - 0x493366450e42ecdfULL, 0x0bc387aea7a8da4cULL, - 0xccd2a5925d9681f9ULL, 0x8e224479f47cb76aULL, - 0x9266cc8a1c85d9beULL, 0xd0962d61b56fef2dULL, - 0x17870f5d4f51b498ULL, 0x5577eeb6e6bb820bULL, - 0xdb55aacf12c73561ULL, 0x99a54b24bb2d03f2ULL, - 0x5eb4691841135847ULL, 0x1c4488f3e8f96ed4ULL, - 0x663d78ff90e185efULL, 0x24cd9914390bb37cULL, - 0xe3dcbb28c335e8c9ULL, 0xa12c5ac36adfde5aULL, - 0x2f0e1eba9ea36930ULL, 0x6dfeff5137495fa3ULL, - 0xaaefdd6dcd770416ULL, 0xe81f3c86649d3285ULL, - 0xf45bb4758c645c51ULL, 0xb6ab559e258e6ac2ULL, - 0x71ba77a2dfb03177ULL, 0x334a9649765a07e4ULL, - 0xbd68d2308226b08eULL, 0xff9833db2bcc861dULL, - 0x388911e7d1f2dda8ULL, 0x7a79f00c7818eb3bULL, - 0xcc7af1ff21c30bdeULL, 0x8e8a101488293d4dULL, - 0x499b3228721766f8ULL, 0x0b6bd3c3dbfd506bULL, - 0x854997ba2f81e701ULL, 0xc7b97651866bd192ULL, - 0x00a8546d7c558a27ULL, 0x4258b586d5bfbcb4ULL, - 0x5e1c3d753d46d260ULL, 0x1cecdc9e94ace4f3ULL, - 0xdbfdfea26e92bf46ULL, 0x990d1f49c77889d5ULL, - 0x172f5b3033043ebfULL, 0x55dfbadb9aee082cULL, - 0x92ce98e760d05399ULL, 0xd03e790cc93a650aULL, - 0xaa478900b1228e31ULL, 0xe8b768eb18c8b8a2ULL, - 0x2fa64ad7e2f6e317ULL, 0x6d56ab3c4b1cd584ULL, - 0xe374ef45bf6062eeULL, 0xa1840eae168a547dULL, - 0x66952c92ecb40fc8ULL, 0x2465cd79455e395bULL, - 0x3821458aada7578fULL, 0x7ad1a461044d611cULL, - 0xbdc0865dfe733aa9ULL, 0xff3067b657990c3aULL, - 0x711223cfa3e5bb50ULL, 0x33e2c2240a0f8dc3ULL, - 0xf4f3e018f031d676ULL, 0xb60301f359dbe0e5ULL, - 0xda050215ea6c212fULL, 0x98f5e3fe438617bcULL, - 0x5fe4c1c2b9b84c09ULL, 0x1d14202910527a9aULL, - 0x93366450e42ecdf0ULL, 0xd1c685bb4dc4fb63ULL, - 0x16d7a787b7faa0d6ULL, 0x5427466c1e109645ULL, - 0x4863ce9ff6e9f891ULL, 0x0a932f745f03ce02ULL, - 0xcd820d48a53d95b7ULL, 0x8f72eca30cd7a324ULL, - 0x0150a8daf8ab144eULL, 0x43a04931514122ddULL, - 0x84b16b0dab7f7968ULL, 0xc6418ae602954ffbULL, - 0xbc387aea7a8da4c0ULL, 0xfec89b01d3679253ULL, - 0x39d9b93d2959c9e6ULL, 0x7b2958d680b3ff75ULL, - 0xf50b1caf74cf481fULL, 0xb7fbfd44dd257e8cULL, - 0x70eadf78271b2539ULL, 0x321a3e938ef113aaULL, - 0x2e5eb66066087d7eULL, 0x6cae578bcfe24bedULL, - 0xabbf75b735dc1058ULL, 0xe94f945c9c3626cbULL, - 0x676dd025684a91a1ULL, 0x259d31cec1a0a732ULL, - 0xe28c13f23b9efc87ULL, 0xa07cf2199274ca14ULL, - 0x167ff3eacbaf2af1ULL, 0x548f120162451c62ULL, - 0x939e303d987b47d7ULL, 0xd16ed1d631917144ULL, - 0x5f4c95afc5edc62eULL, 0x1dbc74446c07f0bdULL, - 0xdaad56789639ab08ULL, 0x985db7933fd39d9bULL, - 0x84193f60d72af34fULL, 0xc6e9de8b7ec0c5dcULL, - 0x01f8fcb784fe9e69ULL, 0x43081d5c2d14a8faULL, - 0xcd2a5925d9681f90ULL, 0x8fdab8ce70822903ULL, - 0x48cb9af28abc72b6ULL, 0x0a3b7b1923564425ULL, - 0x70428b155b4eaf1eULL, 0x32b26afef2a4998dULL, - 0xf5a348c2089ac238ULL, 0xb753a929a170f4abULL, - 0x3971ed50550c43c1ULL, 0x7b810cbbfce67552ULL, - 0xbc902e8706d82ee7ULL, 0xfe60cf6caf321874ULL, - 0xe224479f47cb76a0ULL, 0xa0d4a674ee214033ULL, - 0x67c58448141f1b86ULL, 0x253565a3bdf52d15ULL, - 0xab1721da49899a7fULL, 0xe9e7c031e063acecULL, - 0x2ef6e20d1a5df759ULL, 0x6c0603e6b3b7c1caULL, - 0xf6fae5c07d3274cdULL, 0xb40a042bd4d8425eULL, - 0x731b26172ee619ebULL, 0x31ebc7fc870c2f78ULL, - 0xbfc9838573709812ULL, 0xfd39626eda9aae81ULL, - 0x3a28405220a4f534ULL, 0x78d8a1b9894ec3a7ULL, - 0x649c294a61b7ad73ULL, 0x266cc8a1c85d9be0ULL, - 0xe17dea9d3263c055ULL, 0xa38d0b769b89f6c6ULL, - 0x2daf4f0f6ff541acULL, 0x6f5faee4c61f773fULL, - 0xa84e8cd83c212c8aULL, 0xeabe6d3395cb1a19ULL, - 0x90c79d3fedd3f122ULL, 0xd2377cd44439c7b1ULL, - 0x15265ee8be079c04ULL, 0x57d6bf0317edaa97ULL, - 0xd9f4fb7ae3911dfdULL, 0x9b041a914a7b2b6eULL, - 0x5c1538adb04570dbULL, 0x1ee5d94619af4648ULL, - 0x02a151b5f156289cULL, 0x4051b05e58bc1e0fULL, - 0x87409262a28245baULL, 0xc5b073890b687329ULL, - 0x4b9237f0ff14c443ULL, 0x0962d61b56fef2d0ULL, - 0xce73f427acc0a965ULL, 0x8c8315cc052a9ff6ULL, - 0x3a80143f5cf17f13ULL, 0x7870f5d4f51b4980ULL, - 0xbf61d7e80f251235ULL, 0xfd913603a6cf24a6ULL, - 0x73b3727a52b393ccULL, 0x31439391fb59a55fULL, - 0xf652b1ad0167feeaULL, 0xb4a25046a88dc879ULL, - 0xa8e6d8b54074a6adULL, 0xea16395ee99e903eULL, - 0x2d071b6213a0cb8bULL, 0x6ff7fa89ba4afd18ULL, - 0xe1d5bef04e364a72ULL, 0xa3255f1be7dc7ce1ULL, - 0x64347d271de22754ULL, 0x26c49cccb40811c7ULL, - 0x5cbd6cc0cc10fafcULL, 0x1e4d8d2b65facc6fULL, - 0xd95caf179fc497daULL, 0x9bac4efc362ea149ULL, - 0x158e0a85c2521623ULL, 0x577eeb6e6bb820b0ULL, - 0x906fc95291867b05ULL, 0xd29f28b9386c4d96ULL, - 0xcedba04ad0952342ULL, 0x8c2b41a1797f15d1ULL, - 0x4b3a639d83414e64ULL, 0x09ca82762aab78f7ULL, - 0x87e8c60fded7cf9dULL, 0xc51827e4773df90eULL, - 0x020905d88d03a2bbULL, 0x40f9e43324e99428ULL, - 0x2cffe7d5975e55e2ULL, 0x6e0f063e3eb46371ULL, - 0xa91e2402c48a38c4ULL, 0xebeec5e96d600e57ULL, - 0x65cc8190991cb93dULL, 0x273c607b30f68faeULL, - 0xe02d4247cac8d41bULL, 0xa2dda3ac6322e288ULL, - 0xbe992b5f8bdb8c5cULL, 0xfc69cab42231bacfULL, - 0x3b78e888d80fe17aULL, 0x7988096371e5d7e9ULL, - 0xf7aa4d1a85996083ULL, 0xb55aacf12c735610ULL, - 0x724b8ecdd64d0da5ULL, 0x30bb6f267fa73b36ULL, - 0x4ac29f2a07bfd00dULL, 0x08327ec1ae55e69eULL, - 0xcf235cfd546bbd2bULL, 0x8dd3bd16fd818bb8ULL, - 0x03f1f96f09fd3cd2ULL, 0x41011884a0170a41ULL, - 0x86103ab85a2951f4ULL, 0xc4e0db53f3c36767ULL, - 0xd8a453a01b3a09b3ULL, 0x9a54b24bb2d03f20ULL, - 0x5d45907748ee6495ULL, 0x1fb5719ce1045206ULL, - 0x919735e51578e56cULL, 0xd367d40ebc92d3ffULL, - 0x1476f63246ac884aULL, 0x568617d9ef46bed9ULL, - 0xe085162ab69d5e3cULL, 0xa275f7c11f7768afULL, - 0x6564d5fde549331aULL, 0x279434164ca30589ULL, - 0xa9b6706fb8dfb2e3ULL, 0xeb46918411358470ULL, - 0x2c57b3b8eb0bdfc5ULL, 0x6ea7525342e1e956ULL, - 0x72e3daa0aa188782ULL, 0x30133b4b03f2b111ULL, - 0xf7021977f9cceaa4ULL, 0xb5f2f89c5026dc37ULL, - 0x3bd0bce5a45a6b5dULL, 0x79205d0e0db05dceULL, - 0xbe317f32f78e067bULL, 0xfcc19ed95e6430e8ULL, - 0x86b86ed5267cdbd3ULL, 0xc4488f3e8f96ed40ULL, - 0x0359ad0275a8b6f5ULL, 0x41a94ce9dc428066ULL, - 0xcf8b0890283e370cULL, 0x8d7be97b81d4019fULL, - 0x4a6acb477bea5a2aULL, 0x089a2aacd2006cb9ULL, - 0x14dea25f3af9026dULL, 0x562e43b4931334feULL, - 0x913f6188692d6f4bULL, 0xd3cf8063c0c759d8ULL, - 0x5dedc41a34bbeeb2ULL, 0x1f1d25f19d51d821ULL, - 0xd80c07cd676f8394ULL, 0x9afce626ce85b507ULL + 0x0000000000000000ULL, 0x42f0e1eba9ea3693ULL, 0x85e1c3d753d46d26ULL, 0xc711223cfa3e5bb5ULL, + 0x493366450e42ecdfULL, 0x0bc387aea7a8da4cULL, 0xccd2a5925d9681f9ULL, 0x8e224479f47cb76aULL, + 0x9266cc8a1c85d9beULL, 0xd0962d61b56fef2dULL, 0x17870f5d4f51b498ULL, 0x5577eeb6e6bb820bULL, + 0xdb55aacf12c73561ULL, 0x99a54b24bb2d03f2ULL, 0x5eb4691841135847ULL, 0x1c4488f3e8f96ed4ULL, + 0x663d78ff90e185efULL, 0x24cd9914390bb37cULL, 0xe3dcbb28c335e8c9ULL, 0xa12c5ac36adfde5aULL, + 0x2f0e1eba9ea36930ULL, 0x6dfeff5137495fa3ULL, 0xaaefdd6dcd770416ULL, 0xe81f3c86649d3285ULL, + 0xf45bb4758c645c51ULL, 0xb6ab559e258e6ac2ULL, 0x71ba77a2dfb03177ULL, 0x334a9649765a07e4ULL, + 0xbd68d2308226b08eULL, 0xff9833db2bcc861dULL, 0x388911e7d1f2dda8ULL, 0x7a79f00c7818eb3bULL, + 0xcc7af1ff21c30bdeULL, 0x8e8a101488293d4dULL, 0x499b3228721766f8ULL, 0x0b6bd3c3dbfd506bULL, + 0x854997ba2f81e701ULL, 0xc7b97651866bd192ULL, 0x00a8546d7c558a27ULL, 0x4258b586d5bfbcb4ULL, + 0x5e1c3d753d46d260ULL, 0x1cecdc9e94ace4f3ULL, 0xdbfdfea26e92bf46ULL, 0x990d1f49c77889d5ULL, + 0x172f5b3033043ebfULL, 0x55dfbadb9aee082cULL, 0x92ce98e760d05399ULL, 0xd03e790cc93a650aULL, + 0xaa478900b1228e31ULL, 0xe8b768eb18c8b8a2ULL, 0x2fa64ad7e2f6e317ULL, 0x6d56ab3c4b1cd584ULL, + 0xe374ef45bf6062eeULL, 0xa1840eae168a547dULL, 0x66952c92ecb40fc8ULL, 0x2465cd79455e395bULL, + 0x3821458aada7578fULL, 0x7ad1a461044d611cULL, 0xbdc0865dfe733aa9ULL, 0xff3067b657990c3aULL, + 0x711223cfa3e5bb50ULL, 0x33e2c2240a0f8dc3ULL, 0xf4f3e018f031d676ULL, 0xb60301f359dbe0e5ULL, + 0xda050215ea6c212fULL, 0x98f5e3fe438617bcULL, 0x5fe4c1c2b9b84c09ULL, 0x1d14202910527a9aULL, + 0x93366450e42ecdf0ULL, 0xd1c685bb4dc4fb63ULL, 0x16d7a787b7faa0d6ULL, 0x5427466c1e109645ULL, + 0x4863ce9ff6e9f891ULL, 0x0a932f745f03ce02ULL, 0xcd820d48a53d95b7ULL, 0x8f72eca30cd7a324ULL, + 0x0150a8daf8ab144eULL, 0x43a04931514122ddULL, 0x84b16b0dab7f7968ULL, 0xc6418ae602954ffbULL, + 0xbc387aea7a8da4c0ULL, 0xfec89b01d3679253ULL, 0x39d9b93d2959c9e6ULL, 0x7b2958d680b3ff75ULL, + 0xf50b1caf74cf481fULL, 0xb7fbfd44dd257e8cULL, 0x70eadf78271b2539ULL, 0x321a3e938ef113aaULL, + 0x2e5eb66066087d7eULL, 0x6cae578bcfe24bedULL, 0xabbf75b735dc1058ULL, 0xe94f945c9c3626cbULL, + 0x676dd025684a91a1ULL, 0x259d31cec1a0a732ULL, 0xe28c13f23b9efc87ULL, 0xa07cf2199274ca14ULL, + 0x167ff3eacbaf2af1ULL, 0x548f120162451c62ULL, 0x939e303d987b47d7ULL, 0xd16ed1d631917144ULL, + 0x5f4c95afc5edc62eULL, 0x1dbc74446c07f0bdULL, 0xdaad56789639ab08ULL, 0x985db7933fd39d9bULL, + 0x84193f60d72af34fULL, 0xc6e9de8b7ec0c5dcULL, 0x01f8fcb784fe9e69ULL, 0x43081d5c2d14a8faULL, + 0xcd2a5925d9681f90ULL, 0x8fdab8ce70822903ULL, 0x48cb9af28abc72b6ULL, 0x0a3b7b1923564425ULL, + 0x70428b155b4eaf1eULL, 0x32b26afef2a4998dULL, 0xf5a348c2089ac238ULL, 0xb753a929a170f4abULL, + 0x3971ed50550c43c1ULL, 0x7b810cbbfce67552ULL, 0xbc902e8706d82ee7ULL, 0xfe60cf6caf321874ULL, + 0xe224479f47cb76a0ULL, 0xa0d4a674ee214033ULL, 0x67c58448141f1b86ULL, 0x253565a3bdf52d15ULL, + 0xab1721da49899a7fULL, 0xe9e7c031e063acecULL, 0x2ef6e20d1a5df759ULL, 0x6c0603e6b3b7c1caULL, + 0xf6fae5c07d3274cdULL, 0xb40a042bd4d8425eULL, 0x731b26172ee619ebULL, 0x31ebc7fc870c2f78ULL, + 0xbfc9838573709812ULL, 0xfd39626eda9aae81ULL, 0x3a28405220a4f534ULL, 0x78d8a1b9894ec3a7ULL, + 0x649c294a61b7ad73ULL, 0x266cc8a1c85d9be0ULL, 0xe17dea9d3263c055ULL, 0xa38d0b769b89f6c6ULL, + 0x2daf4f0f6ff541acULL, 0x6f5faee4c61f773fULL, 0xa84e8cd83c212c8aULL, 0xeabe6d3395cb1a19ULL, + 0x90c79d3fedd3f122ULL, 0xd2377cd44439c7b1ULL, 0x15265ee8be079c04ULL, 0x57d6bf0317edaa97ULL, + 0xd9f4fb7ae3911dfdULL, 0x9b041a914a7b2b6eULL, 0x5c1538adb04570dbULL, 0x1ee5d94619af4648ULL, + 0x02a151b5f156289cULL, 0x4051b05e58bc1e0fULL, 0x87409262a28245baULL, 0xc5b073890b687329ULL, + 0x4b9237f0ff14c443ULL, 0x0962d61b56fef2d0ULL, 0xce73f427acc0a965ULL, 0x8c8315cc052a9ff6ULL, + 0x3a80143f5cf17f13ULL, 0x7870f5d4f51b4980ULL, 0xbf61d7e80f251235ULL, 0xfd913603a6cf24a6ULL, + 0x73b3727a52b393ccULL, 0x31439391fb59a55fULL, 0xf652b1ad0167feeaULL, 0xb4a25046a88dc879ULL, + 0xa8e6d8b54074a6adULL, 0xea16395ee99e903eULL, 0x2d071b6213a0cb8bULL, 0x6ff7fa89ba4afd18ULL, + 0xe1d5bef04e364a72ULL, 0xa3255f1be7dc7ce1ULL, 0x64347d271de22754ULL, 0x26c49cccb40811c7ULL, + 0x5cbd6cc0cc10fafcULL, 0x1e4d8d2b65facc6fULL, 0xd95caf179fc497daULL, 0x9bac4efc362ea149ULL, + 0x158e0a85c2521623ULL, 0x577eeb6e6bb820b0ULL, 0x906fc95291867b05ULL, 0xd29f28b9386c4d96ULL, + 0xcedba04ad0952342ULL, 0x8c2b41a1797f15d1ULL, 0x4b3a639d83414e64ULL, 0x09ca82762aab78f7ULL, + 0x87e8c60fded7cf9dULL, 0xc51827e4773df90eULL, 0x020905d88d03a2bbULL, 0x40f9e43324e99428ULL, + 0x2cffe7d5975e55e2ULL, 0x6e0f063e3eb46371ULL, 0xa91e2402c48a38c4ULL, 0xebeec5e96d600e57ULL, + 0x65cc8190991cb93dULL, 0x273c607b30f68faeULL, 0xe02d4247cac8d41bULL, 0xa2dda3ac6322e288ULL, + 0xbe992b5f8bdb8c5cULL, 0xfc69cab42231bacfULL, 0x3b78e888d80fe17aULL, 0x7988096371e5d7e9ULL, + 0xf7aa4d1a85996083ULL, 0xb55aacf12c735610ULL, 0x724b8ecdd64d0da5ULL, 0x30bb6f267fa73b36ULL, + 0x4ac29f2a07bfd00dULL, 0x08327ec1ae55e69eULL, 0xcf235cfd546bbd2bULL, 0x8dd3bd16fd818bb8ULL, + 0x03f1f96f09fd3cd2ULL, 0x41011884a0170a41ULL, 0x86103ab85a2951f4ULL, 0xc4e0db53f3c36767ULL, + 0xd8a453a01b3a09b3ULL, 0x9a54b24bb2d03f20ULL, 0x5d45907748ee6495ULL, 0x1fb5719ce1045206ULL, + 0x919735e51578e56cULL, 0xd367d40ebc92d3ffULL, 0x1476f63246ac884aULL, 0x568617d9ef46bed9ULL, + 0xe085162ab69d5e3cULL, 0xa275f7c11f7768afULL, 0x6564d5fde549331aULL, 0x279434164ca30589ULL, + 0xa9b6706fb8dfb2e3ULL, 0xeb46918411358470ULL, 0x2c57b3b8eb0bdfc5ULL, 0x6ea7525342e1e956ULL, + 0x72e3daa0aa188782ULL, 0x30133b4b03f2b111ULL, 0xf7021977f9cceaa4ULL, 0xb5f2f89c5026dc37ULL, + 0x3bd0bce5a45a6b5dULL, 0x79205d0e0db05dceULL, 0xbe317f32f78e067bULL, 0xfcc19ed95e6430e8ULL, + 0x86b86ed5267cdbd3ULL, 0xc4488f3e8f96ed40ULL, 0x0359ad0275a8b6f5ULL, 0x41a94ce9dc428066ULL, + 0xcf8b0890283e370cULL, 0x8d7be97b81d4019fULL, 0x4a6acb477bea5a2aULL, 0x089a2aacd2006cb9ULL, + 0x14dea25f3af9026dULL, 0x562e43b4931334feULL, 0x913f6188692d6f4bULL, 0xd3cf8063c0c759d8ULL, + 0x5dedc41a34bbeeb2ULL, 0x1f1d25f19d51d821ULL, 0xd80c07cd676f8394ULL, 0x9afce626ce85b507ULL }; static const uint64_t crc64_iso_refl_table[256] = { - 0x0000000000000000ULL, 0x01b0000000000000ULL, - 0x0360000000000000ULL, 0x02d0000000000000ULL, - 0x06c0000000000000ULL, 0x0770000000000000ULL, - 0x05a0000000000000ULL, 0x0410000000000000ULL, - 0x0d80000000000000ULL, 0x0c30000000000000ULL, - 0x0ee0000000000000ULL, 0x0f50000000000000ULL, - 0x0b40000000000000ULL, 0x0af0000000000000ULL, - 0x0820000000000000ULL, 0x0990000000000000ULL, - 0x1b00000000000000ULL, 0x1ab0000000000000ULL, - 0x1860000000000000ULL, 0x19d0000000000000ULL, - 0x1dc0000000000000ULL, 0x1c70000000000000ULL, - 0x1ea0000000000000ULL, 0x1f10000000000000ULL, - 0x1680000000000000ULL, 0x1730000000000000ULL, - 0x15e0000000000000ULL, 0x1450000000000000ULL, - 0x1040000000000000ULL, 0x11f0000000000000ULL, - 0x1320000000000000ULL, 0x1290000000000000ULL, - 0x3600000000000000ULL, 0x37b0000000000000ULL, - 0x3560000000000000ULL, 0x34d0000000000000ULL, - 0x30c0000000000000ULL, 0x3170000000000000ULL, - 0x33a0000000000000ULL, 0x3210000000000000ULL, - 0x3b80000000000000ULL, 0x3a30000000000000ULL, - 0x38e0000000000000ULL, 0x3950000000000000ULL, - 0x3d40000000000000ULL, 0x3cf0000000000000ULL, - 0x3e20000000000000ULL, 0x3f90000000000000ULL, - 0x2d00000000000000ULL, 0x2cb0000000000000ULL, - 0x2e60000000000000ULL, 0x2fd0000000000000ULL, - 0x2bc0000000000000ULL, 0x2a70000000000000ULL, - 0x28a0000000000000ULL, 0x2910000000000000ULL, - 0x2080000000000000ULL, 0x2130000000000000ULL, - 0x23e0000000000000ULL, 0x2250000000000000ULL, - 0x2640000000000000ULL, 0x27f0000000000000ULL, - 0x2520000000000000ULL, 0x2490000000000000ULL, - 0x6c00000000000000ULL, 0x6db0000000000000ULL, - 0x6f60000000000000ULL, 0x6ed0000000000000ULL, - 0x6ac0000000000000ULL, 0x6b70000000000000ULL, - 0x69a0000000000000ULL, 0x6810000000000000ULL, - 0x6180000000000000ULL, 0x6030000000000000ULL, - 0x62e0000000000000ULL, 0x6350000000000000ULL, - 0x6740000000000000ULL, 0x66f0000000000000ULL, - 0x6420000000000000ULL, 0x6590000000000000ULL, - 0x7700000000000000ULL, 0x76b0000000000000ULL, - 0x7460000000000000ULL, 0x75d0000000000000ULL, - 0x71c0000000000000ULL, 0x7070000000000000ULL, - 0x72a0000000000000ULL, 0x7310000000000000ULL, - 0x7a80000000000000ULL, 0x7b30000000000000ULL, - 0x79e0000000000000ULL, 0x7850000000000000ULL, - 0x7c40000000000000ULL, 0x7df0000000000000ULL, - 0x7f20000000000000ULL, 0x7e90000000000000ULL, - 0x5a00000000000000ULL, 0x5bb0000000000000ULL, - 0x5960000000000000ULL, 0x58d0000000000000ULL, - 0x5cc0000000000000ULL, 0x5d70000000000000ULL, - 0x5fa0000000000000ULL, 0x5e10000000000000ULL, - 0x5780000000000000ULL, 0x5630000000000000ULL, - 0x54e0000000000000ULL, 0x5550000000000000ULL, - 0x5140000000000000ULL, 0x50f0000000000000ULL, - 0x5220000000000000ULL, 0x5390000000000000ULL, - 0x4100000000000000ULL, 0x40b0000000000000ULL, - 0x4260000000000000ULL, 0x43d0000000000000ULL, - 0x47c0000000000000ULL, 0x4670000000000000ULL, - 0x44a0000000000000ULL, 0x4510000000000000ULL, - 0x4c80000000000000ULL, 0x4d30000000000000ULL, - 0x4fe0000000000000ULL, 0x4e50000000000000ULL, - 0x4a40000000000000ULL, 0x4bf0000000000000ULL, - 0x4920000000000000ULL, 0x4890000000000000ULL, - 0xd800000000000000ULL, 0xd9b0000000000000ULL, - 0xdb60000000000000ULL, 0xdad0000000000000ULL, - 0xdec0000000000000ULL, 0xdf70000000000000ULL, - 0xdda0000000000000ULL, 0xdc10000000000000ULL, - 0xd580000000000000ULL, 0xd430000000000000ULL, - 0xd6e0000000000000ULL, 0xd750000000000000ULL, - 0xd340000000000000ULL, 0xd2f0000000000000ULL, - 0xd020000000000000ULL, 0xd190000000000000ULL, - 0xc300000000000000ULL, 0xc2b0000000000000ULL, - 0xc060000000000000ULL, 0xc1d0000000000000ULL, - 0xc5c0000000000000ULL, 0xc470000000000000ULL, - 0xc6a0000000000000ULL, 0xc710000000000000ULL, - 0xce80000000000000ULL, 0xcf30000000000000ULL, - 0xcde0000000000000ULL, 0xcc50000000000000ULL, - 0xc840000000000000ULL, 0xc9f0000000000000ULL, - 0xcb20000000000000ULL, 0xca90000000000000ULL, - 0xee00000000000000ULL, 0xefb0000000000000ULL, - 0xed60000000000000ULL, 0xecd0000000000000ULL, - 0xe8c0000000000000ULL, 0xe970000000000000ULL, - 0xeba0000000000000ULL, 0xea10000000000000ULL, - 0xe380000000000000ULL, 0xe230000000000000ULL, - 0xe0e0000000000000ULL, 0xe150000000000000ULL, - 0xe540000000000000ULL, 0xe4f0000000000000ULL, - 0xe620000000000000ULL, 0xe790000000000000ULL, - 0xf500000000000000ULL, 0xf4b0000000000000ULL, - 0xf660000000000000ULL, 0xf7d0000000000000ULL, - 0xf3c0000000000000ULL, 0xf270000000000000ULL, - 0xf0a0000000000000ULL, 0xf110000000000000ULL, - 0xf880000000000000ULL, 0xf930000000000000ULL, - 0xfbe0000000000000ULL, 0xfa50000000000000ULL, - 0xfe40000000000000ULL, 0xfff0000000000000ULL, - 0xfd20000000000000ULL, 0xfc90000000000000ULL, - 0xb400000000000000ULL, 0xb5b0000000000000ULL, - 0xb760000000000000ULL, 0xb6d0000000000000ULL, - 0xb2c0000000000000ULL, 0xb370000000000000ULL, - 0xb1a0000000000000ULL, 0xb010000000000000ULL, - 0xb980000000000000ULL, 0xb830000000000000ULL, - 0xbae0000000000000ULL, 0xbb50000000000000ULL, - 0xbf40000000000000ULL, 0xbef0000000000000ULL, - 0xbc20000000000000ULL, 0xbd90000000000000ULL, - 0xaf00000000000000ULL, 0xaeb0000000000000ULL, - 0xac60000000000000ULL, 0xadd0000000000000ULL, - 0xa9c0000000000000ULL, 0xa870000000000000ULL, - 0xaaa0000000000000ULL, 0xab10000000000000ULL, - 0xa280000000000000ULL, 0xa330000000000000ULL, - 0xa1e0000000000000ULL, 0xa050000000000000ULL, - 0xa440000000000000ULL, 0xa5f0000000000000ULL, - 0xa720000000000000ULL, 0xa690000000000000ULL, - 0x8200000000000000ULL, 0x83b0000000000000ULL, - 0x8160000000000000ULL, 0x80d0000000000000ULL, - 0x84c0000000000000ULL, 0x8570000000000000ULL, - 0x87a0000000000000ULL, 0x8610000000000000ULL, - 0x8f80000000000000ULL, 0x8e30000000000000ULL, - 0x8ce0000000000000ULL, 0x8d50000000000000ULL, - 0x8940000000000000ULL, 0x88f0000000000000ULL, - 0x8a20000000000000ULL, 0x8b90000000000000ULL, - 0x9900000000000000ULL, 0x98b0000000000000ULL, - 0x9a60000000000000ULL, 0x9bd0000000000000ULL, - 0x9fc0000000000000ULL, 0x9e70000000000000ULL, - 0x9ca0000000000000ULL, 0x9d10000000000000ULL, - 0x9480000000000000ULL, 0x9530000000000000ULL, - 0x97e0000000000000ULL, 0x9650000000000000ULL, - 0x9240000000000000ULL, 0x93f0000000000000ULL, - 0x9120000000000000ULL, 0x9090000000000000ULL + 0x0000000000000000ULL, 0x01b0000000000000ULL, 0x0360000000000000ULL, 0x02d0000000000000ULL, + 0x06c0000000000000ULL, 0x0770000000000000ULL, 0x05a0000000000000ULL, 0x0410000000000000ULL, + 0x0d80000000000000ULL, 0x0c30000000000000ULL, 0x0ee0000000000000ULL, 0x0f50000000000000ULL, + 0x0b40000000000000ULL, 0x0af0000000000000ULL, 0x0820000000000000ULL, 0x0990000000000000ULL, + 0x1b00000000000000ULL, 0x1ab0000000000000ULL, 0x1860000000000000ULL, 0x19d0000000000000ULL, + 0x1dc0000000000000ULL, 0x1c70000000000000ULL, 0x1ea0000000000000ULL, 0x1f10000000000000ULL, + 0x1680000000000000ULL, 0x1730000000000000ULL, 0x15e0000000000000ULL, 0x1450000000000000ULL, + 0x1040000000000000ULL, 0x11f0000000000000ULL, 0x1320000000000000ULL, 0x1290000000000000ULL, + 0x3600000000000000ULL, 0x37b0000000000000ULL, 0x3560000000000000ULL, 0x34d0000000000000ULL, + 0x30c0000000000000ULL, 0x3170000000000000ULL, 0x33a0000000000000ULL, 0x3210000000000000ULL, + 0x3b80000000000000ULL, 0x3a30000000000000ULL, 0x38e0000000000000ULL, 0x3950000000000000ULL, + 0x3d40000000000000ULL, 0x3cf0000000000000ULL, 0x3e20000000000000ULL, 0x3f90000000000000ULL, + 0x2d00000000000000ULL, 0x2cb0000000000000ULL, 0x2e60000000000000ULL, 0x2fd0000000000000ULL, + 0x2bc0000000000000ULL, 0x2a70000000000000ULL, 0x28a0000000000000ULL, 0x2910000000000000ULL, + 0x2080000000000000ULL, 0x2130000000000000ULL, 0x23e0000000000000ULL, 0x2250000000000000ULL, + 0x2640000000000000ULL, 0x27f0000000000000ULL, 0x2520000000000000ULL, 0x2490000000000000ULL, + 0x6c00000000000000ULL, 0x6db0000000000000ULL, 0x6f60000000000000ULL, 0x6ed0000000000000ULL, + 0x6ac0000000000000ULL, 0x6b70000000000000ULL, 0x69a0000000000000ULL, 0x6810000000000000ULL, + 0x6180000000000000ULL, 0x6030000000000000ULL, 0x62e0000000000000ULL, 0x6350000000000000ULL, + 0x6740000000000000ULL, 0x66f0000000000000ULL, 0x6420000000000000ULL, 0x6590000000000000ULL, + 0x7700000000000000ULL, 0x76b0000000000000ULL, 0x7460000000000000ULL, 0x75d0000000000000ULL, + 0x71c0000000000000ULL, 0x7070000000000000ULL, 0x72a0000000000000ULL, 0x7310000000000000ULL, + 0x7a80000000000000ULL, 0x7b30000000000000ULL, 0x79e0000000000000ULL, 0x7850000000000000ULL, + 0x7c40000000000000ULL, 0x7df0000000000000ULL, 0x7f20000000000000ULL, 0x7e90000000000000ULL, + 0x5a00000000000000ULL, 0x5bb0000000000000ULL, 0x5960000000000000ULL, 0x58d0000000000000ULL, + 0x5cc0000000000000ULL, 0x5d70000000000000ULL, 0x5fa0000000000000ULL, 0x5e10000000000000ULL, + 0x5780000000000000ULL, 0x5630000000000000ULL, 0x54e0000000000000ULL, 0x5550000000000000ULL, + 0x5140000000000000ULL, 0x50f0000000000000ULL, 0x5220000000000000ULL, 0x5390000000000000ULL, + 0x4100000000000000ULL, 0x40b0000000000000ULL, 0x4260000000000000ULL, 0x43d0000000000000ULL, + 0x47c0000000000000ULL, 0x4670000000000000ULL, 0x44a0000000000000ULL, 0x4510000000000000ULL, + 0x4c80000000000000ULL, 0x4d30000000000000ULL, 0x4fe0000000000000ULL, 0x4e50000000000000ULL, + 0x4a40000000000000ULL, 0x4bf0000000000000ULL, 0x4920000000000000ULL, 0x4890000000000000ULL, + 0xd800000000000000ULL, 0xd9b0000000000000ULL, 0xdb60000000000000ULL, 0xdad0000000000000ULL, + 0xdec0000000000000ULL, 0xdf70000000000000ULL, 0xdda0000000000000ULL, 0xdc10000000000000ULL, + 0xd580000000000000ULL, 0xd430000000000000ULL, 0xd6e0000000000000ULL, 0xd750000000000000ULL, + 0xd340000000000000ULL, 0xd2f0000000000000ULL, 0xd020000000000000ULL, 0xd190000000000000ULL, + 0xc300000000000000ULL, 0xc2b0000000000000ULL, 0xc060000000000000ULL, 0xc1d0000000000000ULL, + 0xc5c0000000000000ULL, 0xc470000000000000ULL, 0xc6a0000000000000ULL, 0xc710000000000000ULL, + 0xce80000000000000ULL, 0xcf30000000000000ULL, 0xcde0000000000000ULL, 0xcc50000000000000ULL, + 0xc840000000000000ULL, 0xc9f0000000000000ULL, 0xcb20000000000000ULL, 0xca90000000000000ULL, + 0xee00000000000000ULL, 0xefb0000000000000ULL, 0xed60000000000000ULL, 0xecd0000000000000ULL, + 0xe8c0000000000000ULL, 0xe970000000000000ULL, 0xeba0000000000000ULL, 0xea10000000000000ULL, + 0xe380000000000000ULL, 0xe230000000000000ULL, 0xe0e0000000000000ULL, 0xe150000000000000ULL, + 0xe540000000000000ULL, 0xe4f0000000000000ULL, 0xe620000000000000ULL, 0xe790000000000000ULL, + 0xf500000000000000ULL, 0xf4b0000000000000ULL, 0xf660000000000000ULL, 0xf7d0000000000000ULL, + 0xf3c0000000000000ULL, 0xf270000000000000ULL, 0xf0a0000000000000ULL, 0xf110000000000000ULL, + 0xf880000000000000ULL, 0xf930000000000000ULL, 0xfbe0000000000000ULL, 0xfa50000000000000ULL, + 0xfe40000000000000ULL, 0xfff0000000000000ULL, 0xfd20000000000000ULL, 0xfc90000000000000ULL, + 0xb400000000000000ULL, 0xb5b0000000000000ULL, 0xb760000000000000ULL, 0xb6d0000000000000ULL, + 0xb2c0000000000000ULL, 0xb370000000000000ULL, 0xb1a0000000000000ULL, 0xb010000000000000ULL, + 0xb980000000000000ULL, 0xb830000000000000ULL, 0xbae0000000000000ULL, 0xbb50000000000000ULL, + 0xbf40000000000000ULL, 0xbef0000000000000ULL, 0xbc20000000000000ULL, 0xbd90000000000000ULL, + 0xaf00000000000000ULL, 0xaeb0000000000000ULL, 0xac60000000000000ULL, 0xadd0000000000000ULL, + 0xa9c0000000000000ULL, 0xa870000000000000ULL, 0xaaa0000000000000ULL, 0xab10000000000000ULL, + 0xa280000000000000ULL, 0xa330000000000000ULL, 0xa1e0000000000000ULL, 0xa050000000000000ULL, + 0xa440000000000000ULL, 0xa5f0000000000000ULL, 0xa720000000000000ULL, 0xa690000000000000ULL, + 0x8200000000000000ULL, 0x83b0000000000000ULL, 0x8160000000000000ULL, 0x80d0000000000000ULL, + 0x84c0000000000000ULL, 0x8570000000000000ULL, 0x87a0000000000000ULL, 0x8610000000000000ULL, + 0x8f80000000000000ULL, 0x8e30000000000000ULL, 0x8ce0000000000000ULL, 0x8d50000000000000ULL, + 0x8940000000000000ULL, 0x88f0000000000000ULL, 0x8a20000000000000ULL, 0x8b90000000000000ULL, + 0x9900000000000000ULL, 0x98b0000000000000ULL, 0x9a60000000000000ULL, 0x9bd0000000000000ULL, + 0x9fc0000000000000ULL, 0x9e70000000000000ULL, 0x9ca0000000000000ULL, 0x9d10000000000000ULL, + 0x9480000000000000ULL, 0x9530000000000000ULL, 0x97e0000000000000ULL, 0x9650000000000000ULL, + 0x9240000000000000ULL, 0x93f0000000000000ULL, 0x9120000000000000ULL, 0x9090000000000000ULL }; static const uint64_t crc64_iso_norm_table[256] = { - 0x0000000000000000ULL, 0x000000000000001bULL, - 0x0000000000000036ULL, 0x000000000000002dULL, - 0x000000000000006cULL, 0x0000000000000077ULL, - 0x000000000000005aULL, 0x0000000000000041ULL, - 0x00000000000000d8ULL, 0x00000000000000c3ULL, - 0x00000000000000eeULL, 0x00000000000000f5ULL, - 0x00000000000000b4ULL, 0x00000000000000afULL, - 0x0000000000000082ULL, 0x0000000000000099ULL, - 0x00000000000001b0ULL, 0x00000000000001abULL, - 0x0000000000000186ULL, 0x000000000000019dULL, - 0x00000000000001dcULL, 0x00000000000001c7ULL, - 0x00000000000001eaULL, 0x00000000000001f1ULL, - 0x0000000000000168ULL, 0x0000000000000173ULL, - 0x000000000000015eULL, 0x0000000000000145ULL, - 0x0000000000000104ULL, 0x000000000000011fULL, - 0x0000000000000132ULL, 0x0000000000000129ULL, - 0x0000000000000360ULL, 0x000000000000037bULL, - 0x0000000000000356ULL, 0x000000000000034dULL, - 0x000000000000030cULL, 0x0000000000000317ULL, - 0x000000000000033aULL, 0x0000000000000321ULL, - 0x00000000000003b8ULL, 0x00000000000003a3ULL, - 0x000000000000038eULL, 0x0000000000000395ULL, - 0x00000000000003d4ULL, 0x00000000000003cfULL, - 0x00000000000003e2ULL, 0x00000000000003f9ULL, - 0x00000000000002d0ULL, 0x00000000000002cbULL, - 0x00000000000002e6ULL, 0x00000000000002fdULL, - 0x00000000000002bcULL, 0x00000000000002a7ULL, - 0x000000000000028aULL, 0x0000000000000291ULL, - 0x0000000000000208ULL, 0x0000000000000213ULL, - 0x000000000000023eULL, 0x0000000000000225ULL, - 0x0000000000000264ULL, 0x000000000000027fULL, - 0x0000000000000252ULL, 0x0000000000000249ULL, - 0x00000000000006c0ULL, 0x00000000000006dbULL, - 0x00000000000006f6ULL, 0x00000000000006edULL, - 0x00000000000006acULL, 0x00000000000006b7ULL, - 0x000000000000069aULL, 0x0000000000000681ULL, - 0x0000000000000618ULL, 0x0000000000000603ULL, - 0x000000000000062eULL, 0x0000000000000635ULL, - 0x0000000000000674ULL, 0x000000000000066fULL, - 0x0000000000000642ULL, 0x0000000000000659ULL, - 0x0000000000000770ULL, 0x000000000000076bULL, - 0x0000000000000746ULL, 0x000000000000075dULL, - 0x000000000000071cULL, 0x0000000000000707ULL, - 0x000000000000072aULL, 0x0000000000000731ULL, - 0x00000000000007a8ULL, 0x00000000000007b3ULL, - 0x000000000000079eULL, 0x0000000000000785ULL, - 0x00000000000007c4ULL, 0x00000000000007dfULL, - 0x00000000000007f2ULL, 0x00000000000007e9ULL, - 0x00000000000005a0ULL, 0x00000000000005bbULL, - 0x0000000000000596ULL, 0x000000000000058dULL, - 0x00000000000005ccULL, 0x00000000000005d7ULL, - 0x00000000000005faULL, 0x00000000000005e1ULL, - 0x0000000000000578ULL, 0x0000000000000563ULL, - 0x000000000000054eULL, 0x0000000000000555ULL, - 0x0000000000000514ULL, 0x000000000000050fULL, - 0x0000000000000522ULL, 0x0000000000000539ULL, - 0x0000000000000410ULL, 0x000000000000040bULL, - 0x0000000000000426ULL, 0x000000000000043dULL, - 0x000000000000047cULL, 0x0000000000000467ULL, - 0x000000000000044aULL, 0x0000000000000451ULL, - 0x00000000000004c8ULL, 0x00000000000004d3ULL, - 0x00000000000004feULL, 0x00000000000004e5ULL, - 0x00000000000004a4ULL, 0x00000000000004bfULL, - 0x0000000000000492ULL, 0x0000000000000489ULL, - 0x0000000000000d80ULL, 0x0000000000000d9bULL, - 0x0000000000000db6ULL, 0x0000000000000dadULL, - 0x0000000000000decULL, 0x0000000000000df7ULL, - 0x0000000000000ddaULL, 0x0000000000000dc1ULL, - 0x0000000000000d58ULL, 0x0000000000000d43ULL, - 0x0000000000000d6eULL, 0x0000000000000d75ULL, - 0x0000000000000d34ULL, 0x0000000000000d2fULL, - 0x0000000000000d02ULL, 0x0000000000000d19ULL, - 0x0000000000000c30ULL, 0x0000000000000c2bULL, - 0x0000000000000c06ULL, 0x0000000000000c1dULL, - 0x0000000000000c5cULL, 0x0000000000000c47ULL, - 0x0000000000000c6aULL, 0x0000000000000c71ULL, - 0x0000000000000ce8ULL, 0x0000000000000cf3ULL, - 0x0000000000000cdeULL, 0x0000000000000cc5ULL, - 0x0000000000000c84ULL, 0x0000000000000c9fULL, - 0x0000000000000cb2ULL, 0x0000000000000ca9ULL, - 0x0000000000000ee0ULL, 0x0000000000000efbULL, - 0x0000000000000ed6ULL, 0x0000000000000ecdULL, - 0x0000000000000e8cULL, 0x0000000000000e97ULL, - 0x0000000000000ebaULL, 0x0000000000000ea1ULL, - 0x0000000000000e38ULL, 0x0000000000000e23ULL, - 0x0000000000000e0eULL, 0x0000000000000e15ULL, - 0x0000000000000e54ULL, 0x0000000000000e4fULL, - 0x0000000000000e62ULL, 0x0000000000000e79ULL, - 0x0000000000000f50ULL, 0x0000000000000f4bULL, - 0x0000000000000f66ULL, 0x0000000000000f7dULL, - 0x0000000000000f3cULL, 0x0000000000000f27ULL, - 0x0000000000000f0aULL, 0x0000000000000f11ULL, - 0x0000000000000f88ULL, 0x0000000000000f93ULL, - 0x0000000000000fbeULL, 0x0000000000000fa5ULL, - 0x0000000000000fe4ULL, 0x0000000000000fffULL, - 0x0000000000000fd2ULL, 0x0000000000000fc9ULL, - 0x0000000000000b40ULL, 0x0000000000000b5bULL, - 0x0000000000000b76ULL, 0x0000000000000b6dULL, - 0x0000000000000b2cULL, 0x0000000000000b37ULL, - 0x0000000000000b1aULL, 0x0000000000000b01ULL, - 0x0000000000000b98ULL, 0x0000000000000b83ULL, - 0x0000000000000baeULL, 0x0000000000000bb5ULL, - 0x0000000000000bf4ULL, 0x0000000000000befULL, - 0x0000000000000bc2ULL, 0x0000000000000bd9ULL, - 0x0000000000000af0ULL, 0x0000000000000aebULL, - 0x0000000000000ac6ULL, 0x0000000000000addULL, - 0x0000000000000a9cULL, 0x0000000000000a87ULL, - 0x0000000000000aaaULL, 0x0000000000000ab1ULL, - 0x0000000000000a28ULL, 0x0000000000000a33ULL, - 0x0000000000000a1eULL, 0x0000000000000a05ULL, - 0x0000000000000a44ULL, 0x0000000000000a5fULL, - 0x0000000000000a72ULL, 0x0000000000000a69ULL, - 0x0000000000000820ULL, 0x000000000000083bULL, - 0x0000000000000816ULL, 0x000000000000080dULL, - 0x000000000000084cULL, 0x0000000000000857ULL, - 0x000000000000087aULL, 0x0000000000000861ULL, - 0x00000000000008f8ULL, 0x00000000000008e3ULL, - 0x00000000000008ceULL, 0x00000000000008d5ULL, - 0x0000000000000894ULL, 0x000000000000088fULL, - 0x00000000000008a2ULL, 0x00000000000008b9ULL, - 0x0000000000000990ULL, 0x000000000000098bULL, - 0x00000000000009a6ULL, 0x00000000000009bdULL, - 0x00000000000009fcULL, 0x00000000000009e7ULL, - 0x00000000000009caULL, 0x00000000000009d1ULL, - 0x0000000000000948ULL, 0x0000000000000953ULL, - 0x000000000000097eULL, 0x0000000000000965ULL, - 0x0000000000000924ULL, 0x000000000000093fULL, - 0x0000000000000912ULL, 0x0000000000000909ULL + 0x0000000000000000ULL, 0x000000000000001bULL, 0x0000000000000036ULL, 0x000000000000002dULL, + 0x000000000000006cULL, 0x0000000000000077ULL, 0x000000000000005aULL, 0x0000000000000041ULL, + 0x00000000000000d8ULL, 0x00000000000000c3ULL, 0x00000000000000eeULL, 0x00000000000000f5ULL, + 0x00000000000000b4ULL, 0x00000000000000afULL, 0x0000000000000082ULL, 0x0000000000000099ULL, + 0x00000000000001b0ULL, 0x00000000000001abULL, 0x0000000000000186ULL, 0x000000000000019dULL, + 0x00000000000001dcULL, 0x00000000000001c7ULL, 0x00000000000001eaULL, 0x00000000000001f1ULL, + 0x0000000000000168ULL, 0x0000000000000173ULL, 0x000000000000015eULL, 0x0000000000000145ULL, + 0x0000000000000104ULL, 0x000000000000011fULL, 0x0000000000000132ULL, 0x0000000000000129ULL, + 0x0000000000000360ULL, 0x000000000000037bULL, 0x0000000000000356ULL, 0x000000000000034dULL, + 0x000000000000030cULL, 0x0000000000000317ULL, 0x000000000000033aULL, 0x0000000000000321ULL, + 0x00000000000003b8ULL, 0x00000000000003a3ULL, 0x000000000000038eULL, 0x0000000000000395ULL, + 0x00000000000003d4ULL, 0x00000000000003cfULL, 0x00000000000003e2ULL, 0x00000000000003f9ULL, + 0x00000000000002d0ULL, 0x00000000000002cbULL, 0x00000000000002e6ULL, 0x00000000000002fdULL, + 0x00000000000002bcULL, 0x00000000000002a7ULL, 0x000000000000028aULL, 0x0000000000000291ULL, + 0x0000000000000208ULL, 0x0000000000000213ULL, 0x000000000000023eULL, 0x0000000000000225ULL, + 0x0000000000000264ULL, 0x000000000000027fULL, 0x0000000000000252ULL, 0x0000000000000249ULL, + 0x00000000000006c0ULL, 0x00000000000006dbULL, 0x00000000000006f6ULL, 0x00000000000006edULL, + 0x00000000000006acULL, 0x00000000000006b7ULL, 0x000000000000069aULL, 0x0000000000000681ULL, + 0x0000000000000618ULL, 0x0000000000000603ULL, 0x000000000000062eULL, 0x0000000000000635ULL, + 0x0000000000000674ULL, 0x000000000000066fULL, 0x0000000000000642ULL, 0x0000000000000659ULL, + 0x0000000000000770ULL, 0x000000000000076bULL, 0x0000000000000746ULL, 0x000000000000075dULL, + 0x000000000000071cULL, 0x0000000000000707ULL, 0x000000000000072aULL, 0x0000000000000731ULL, + 0x00000000000007a8ULL, 0x00000000000007b3ULL, 0x000000000000079eULL, 0x0000000000000785ULL, + 0x00000000000007c4ULL, 0x00000000000007dfULL, 0x00000000000007f2ULL, 0x00000000000007e9ULL, + 0x00000000000005a0ULL, 0x00000000000005bbULL, 0x0000000000000596ULL, 0x000000000000058dULL, + 0x00000000000005ccULL, 0x00000000000005d7ULL, 0x00000000000005faULL, 0x00000000000005e1ULL, + 0x0000000000000578ULL, 0x0000000000000563ULL, 0x000000000000054eULL, 0x0000000000000555ULL, + 0x0000000000000514ULL, 0x000000000000050fULL, 0x0000000000000522ULL, 0x0000000000000539ULL, + 0x0000000000000410ULL, 0x000000000000040bULL, 0x0000000000000426ULL, 0x000000000000043dULL, + 0x000000000000047cULL, 0x0000000000000467ULL, 0x000000000000044aULL, 0x0000000000000451ULL, + 0x00000000000004c8ULL, 0x00000000000004d3ULL, 0x00000000000004feULL, 0x00000000000004e5ULL, + 0x00000000000004a4ULL, 0x00000000000004bfULL, 0x0000000000000492ULL, 0x0000000000000489ULL, + 0x0000000000000d80ULL, 0x0000000000000d9bULL, 0x0000000000000db6ULL, 0x0000000000000dadULL, + 0x0000000000000decULL, 0x0000000000000df7ULL, 0x0000000000000ddaULL, 0x0000000000000dc1ULL, + 0x0000000000000d58ULL, 0x0000000000000d43ULL, 0x0000000000000d6eULL, 0x0000000000000d75ULL, + 0x0000000000000d34ULL, 0x0000000000000d2fULL, 0x0000000000000d02ULL, 0x0000000000000d19ULL, + 0x0000000000000c30ULL, 0x0000000000000c2bULL, 0x0000000000000c06ULL, 0x0000000000000c1dULL, + 0x0000000000000c5cULL, 0x0000000000000c47ULL, 0x0000000000000c6aULL, 0x0000000000000c71ULL, + 0x0000000000000ce8ULL, 0x0000000000000cf3ULL, 0x0000000000000cdeULL, 0x0000000000000cc5ULL, + 0x0000000000000c84ULL, 0x0000000000000c9fULL, 0x0000000000000cb2ULL, 0x0000000000000ca9ULL, + 0x0000000000000ee0ULL, 0x0000000000000efbULL, 0x0000000000000ed6ULL, 0x0000000000000ecdULL, + 0x0000000000000e8cULL, 0x0000000000000e97ULL, 0x0000000000000ebaULL, 0x0000000000000ea1ULL, + 0x0000000000000e38ULL, 0x0000000000000e23ULL, 0x0000000000000e0eULL, 0x0000000000000e15ULL, + 0x0000000000000e54ULL, 0x0000000000000e4fULL, 0x0000000000000e62ULL, 0x0000000000000e79ULL, + 0x0000000000000f50ULL, 0x0000000000000f4bULL, 0x0000000000000f66ULL, 0x0000000000000f7dULL, + 0x0000000000000f3cULL, 0x0000000000000f27ULL, 0x0000000000000f0aULL, 0x0000000000000f11ULL, + 0x0000000000000f88ULL, 0x0000000000000f93ULL, 0x0000000000000fbeULL, 0x0000000000000fa5ULL, + 0x0000000000000fe4ULL, 0x0000000000000fffULL, 0x0000000000000fd2ULL, 0x0000000000000fc9ULL, + 0x0000000000000b40ULL, 0x0000000000000b5bULL, 0x0000000000000b76ULL, 0x0000000000000b6dULL, + 0x0000000000000b2cULL, 0x0000000000000b37ULL, 0x0000000000000b1aULL, 0x0000000000000b01ULL, + 0x0000000000000b98ULL, 0x0000000000000b83ULL, 0x0000000000000baeULL, 0x0000000000000bb5ULL, + 0x0000000000000bf4ULL, 0x0000000000000befULL, 0x0000000000000bc2ULL, 0x0000000000000bd9ULL, + 0x0000000000000af0ULL, 0x0000000000000aebULL, 0x0000000000000ac6ULL, 0x0000000000000addULL, + 0x0000000000000a9cULL, 0x0000000000000a87ULL, 0x0000000000000aaaULL, 0x0000000000000ab1ULL, + 0x0000000000000a28ULL, 0x0000000000000a33ULL, 0x0000000000000a1eULL, 0x0000000000000a05ULL, + 0x0000000000000a44ULL, 0x0000000000000a5fULL, 0x0000000000000a72ULL, 0x0000000000000a69ULL, + 0x0000000000000820ULL, 0x000000000000083bULL, 0x0000000000000816ULL, 0x000000000000080dULL, + 0x000000000000084cULL, 0x0000000000000857ULL, 0x000000000000087aULL, 0x0000000000000861ULL, + 0x00000000000008f8ULL, 0x00000000000008e3ULL, 0x00000000000008ceULL, 0x00000000000008d5ULL, + 0x0000000000000894ULL, 0x000000000000088fULL, 0x00000000000008a2ULL, 0x00000000000008b9ULL, + 0x0000000000000990ULL, 0x000000000000098bULL, 0x00000000000009a6ULL, 0x00000000000009bdULL, + 0x00000000000009fcULL, 0x00000000000009e7ULL, 0x00000000000009caULL, 0x00000000000009d1ULL, + 0x0000000000000948ULL, 0x0000000000000953ULL, 0x000000000000097eULL, 0x0000000000000965ULL, + 0x0000000000000924ULL, 0x000000000000093fULL, 0x0000000000000912ULL, 0x0000000000000909ULL }; static const uint64_t crc64_jones_refl_table[256] = { - 0x0000000000000000ULL, 0x7ad870c830358979ULL, - 0xf5b0e190606b12f2ULL, 0x8f689158505e9b8bULL, - 0xc038e5739841b68fULL, 0xbae095bba8743ff6ULL, - 0x358804e3f82aa47dULL, 0x4f50742bc81f2d04ULL, - 0xab28ecb46814fe75ULL, 0xd1f09c7c5821770cULL, - 0x5e980d24087fec87ULL, 0x24407dec384a65feULL, - 0x6b1009c7f05548faULL, 0x11c8790fc060c183ULL, - 0x9ea0e857903e5a08ULL, 0xe478989fa00bd371ULL, - 0x7d08ff3b88be6f81ULL, 0x07d08ff3b88be6f8ULL, - 0x88b81eabe8d57d73ULL, 0xf2606e63d8e0f40aULL, - 0xbd301a4810ffd90eULL, 0xc7e86a8020ca5077ULL, - 0x4880fbd87094cbfcULL, 0x32588b1040a14285ULL, - 0xd620138fe0aa91f4ULL, 0xacf86347d09f188dULL, - 0x2390f21f80c18306ULL, 0x594882d7b0f40a7fULL, - 0x1618f6fc78eb277bULL, 0x6cc0863448deae02ULL, - 0xe3a8176c18803589ULL, 0x997067a428b5bcf0ULL, - 0xfa11fe77117cdf02ULL, 0x80c98ebf2149567bULL, - 0x0fa11fe77117cdf0ULL, 0x75796f2f41224489ULL, - 0x3a291b04893d698dULL, 0x40f16bccb908e0f4ULL, - 0xcf99fa94e9567b7fULL, 0xb5418a5cd963f206ULL, - 0x513912c379682177ULL, 0x2be1620b495da80eULL, - 0xa489f35319033385ULL, 0xde51839b2936bafcULL, - 0x9101f7b0e12997f8ULL, 0xebd98778d11c1e81ULL, - 0x64b116208142850aULL, 0x1e6966e8b1770c73ULL, - 0x8719014c99c2b083ULL, 0xfdc17184a9f739faULL, - 0x72a9e0dcf9a9a271ULL, 0x08719014c99c2b08ULL, - 0x4721e43f0183060cULL, 0x3df994f731b68f75ULL, - 0xb29105af61e814feULL, 0xc849756751dd9d87ULL, - 0x2c31edf8f1d64ef6ULL, 0x56e99d30c1e3c78fULL, - 0xd9810c6891bd5c04ULL, 0xa3597ca0a188d57dULL, - 0xec09088b6997f879ULL, 0x96d1784359a27100ULL, - 0x19b9e91b09fcea8bULL, 0x636199d339c963f2ULL, - 0xdf7adabd7a6e2d6fULL, 0xa5a2aa754a5ba416ULL, - 0x2aca3b2d1a053f9dULL, 0x50124be52a30b6e4ULL, - 0x1f423fcee22f9be0ULL, 0x659a4f06d21a1299ULL, - 0xeaf2de5e82448912ULL, 0x902aae96b271006bULL, - 0x74523609127ad31aULL, 0x0e8a46c1224f5a63ULL, - 0x81e2d7997211c1e8ULL, 0xfb3aa75142244891ULL, - 0xb46ad37a8a3b6595ULL, 0xceb2a3b2ba0eececULL, - 0x41da32eaea507767ULL, 0x3b024222da65fe1eULL, - 0xa2722586f2d042eeULL, 0xd8aa554ec2e5cb97ULL, - 0x57c2c41692bb501cULL, 0x2d1ab4dea28ed965ULL, - 0x624ac0f56a91f461ULL, 0x1892b03d5aa47d18ULL, - 0x97fa21650afae693ULL, 0xed2251ad3acf6feaULL, - 0x095ac9329ac4bc9bULL, 0x7382b9faaaf135e2ULL, - 0xfcea28a2faafae69ULL, 0x8632586aca9a2710ULL, - 0xc9622c4102850a14ULL, 0xb3ba5c8932b0836dULL, - 0x3cd2cdd162ee18e6ULL, 0x460abd1952db919fULL, - 0x256b24ca6b12f26dULL, 0x5fb354025b277b14ULL, - 0xd0dbc55a0b79e09fULL, 0xaa03b5923b4c69e6ULL, - 0xe553c1b9f35344e2ULL, 0x9f8bb171c366cd9bULL, - 0x10e3202993385610ULL, 0x6a3b50e1a30ddf69ULL, - 0x8e43c87e03060c18ULL, 0xf49bb8b633338561ULL, - 0x7bf329ee636d1eeaULL, 0x012b592653589793ULL, - 0x4e7b2d0d9b47ba97ULL, 0x34a35dc5ab7233eeULL, - 0xbbcbcc9dfb2ca865ULL, 0xc113bc55cb19211cULL, - 0x5863dbf1e3ac9decULL, 0x22bbab39d3991495ULL, - 0xadd33a6183c78f1eULL, 0xd70b4aa9b3f20667ULL, - 0x985b3e827bed2b63ULL, 0xe2834e4a4bd8a21aULL, - 0x6debdf121b863991ULL, 0x1733afda2bb3b0e8ULL, - 0xf34b37458bb86399ULL, 0x8993478dbb8deae0ULL, - 0x06fbd6d5ebd3716bULL, 0x7c23a61ddbe6f812ULL, - 0x3373d23613f9d516ULL, 0x49aba2fe23cc5c6fULL, - 0xc6c333a67392c7e4ULL, 0xbc1b436e43a74e9dULL, - 0x95ac9329ac4bc9b5ULL, 0xef74e3e19c7e40ccULL, - 0x601c72b9cc20db47ULL, 0x1ac40271fc15523eULL, - 0x5594765a340a7f3aULL, 0x2f4c0692043ff643ULL, - 0xa02497ca54616dc8ULL, 0xdafce7026454e4b1ULL, - 0x3e847f9dc45f37c0ULL, 0x445c0f55f46abeb9ULL, - 0xcb349e0da4342532ULL, 0xb1eceec59401ac4bULL, - 0xfebc9aee5c1e814fULL, 0x8464ea266c2b0836ULL, - 0x0b0c7b7e3c7593bdULL, 0x71d40bb60c401ac4ULL, - 0xe8a46c1224f5a634ULL, 0x927c1cda14c02f4dULL, - 0x1d148d82449eb4c6ULL, 0x67ccfd4a74ab3dbfULL, - 0x289c8961bcb410bbULL, 0x5244f9a98c8199c2ULL, - 0xdd2c68f1dcdf0249ULL, 0xa7f41839ecea8b30ULL, - 0x438c80a64ce15841ULL, 0x3954f06e7cd4d138ULL, - 0xb63c61362c8a4ab3ULL, 0xcce411fe1cbfc3caULL, - 0x83b465d5d4a0eeceULL, 0xf96c151de49567b7ULL, - 0x76048445b4cbfc3cULL, 0x0cdcf48d84fe7545ULL, - 0x6fbd6d5ebd3716b7ULL, 0x15651d968d029fceULL, - 0x9a0d8ccedd5c0445ULL, 0xe0d5fc06ed698d3cULL, - 0xaf85882d2576a038ULL, 0xd55df8e515432941ULL, - 0x5a3569bd451db2caULL, 0x20ed197575283bb3ULL, - 0xc49581ead523e8c2ULL, 0xbe4df122e51661bbULL, - 0x3125607ab548fa30ULL, 0x4bfd10b2857d7349ULL, - 0x04ad64994d625e4dULL, 0x7e7514517d57d734ULL, - 0xf11d85092d094cbfULL, 0x8bc5f5c11d3cc5c6ULL, - 0x12b5926535897936ULL, 0x686de2ad05bcf04fULL, - 0xe70573f555e26bc4ULL, 0x9ddd033d65d7e2bdULL, - 0xd28d7716adc8cfb9ULL, 0xa85507de9dfd46c0ULL, - 0x273d9686cda3dd4bULL, 0x5de5e64efd965432ULL, - 0xb99d7ed15d9d8743ULL, 0xc3450e196da80e3aULL, - 0x4c2d9f413df695b1ULL, 0x36f5ef890dc31cc8ULL, - 0x79a59ba2c5dc31ccULL, 0x037deb6af5e9b8b5ULL, - 0x8c157a32a5b7233eULL, 0xf6cd0afa9582aa47ULL, - 0x4ad64994d625e4daULL, 0x300e395ce6106da3ULL, - 0xbf66a804b64ef628ULL, 0xc5bed8cc867b7f51ULL, - 0x8aeeace74e645255ULL, 0xf036dc2f7e51db2cULL, - 0x7f5e4d772e0f40a7ULL, 0x05863dbf1e3ac9deULL, - 0xe1fea520be311aafULL, 0x9b26d5e88e0493d6ULL, - 0x144e44b0de5a085dULL, 0x6e963478ee6f8124ULL, - 0x21c640532670ac20ULL, 0x5b1e309b16452559ULL, - 0xd476a1c3461bbed2ULL, 0xaeaed10b762e37abULL, - 0x37deb6af5e9b8b5bULL, 0x4d06c6676eae0222ULL, - 0xc26e573f3ef099a9ULL, 0xb8b627f70ec510d0ULL, - 0xf7e653dcc6da3dd4ULL, 0x8d3e2314f6efb4adULL, - 0x0256b24ca6b12f26ULL, 0x788ec2849684a65fULL, - 0x9cf65a1b368f752eULL, 0xe62e2ad306bafc57ULL, - 0x6946bb8b56e467dcULL, 0x139ecb4366d1eea5ULL, - 0x5ccebf68aecec3a1ULL, 0x2616cfa09efb4ad8ULL, - 0xa97e5ef8cea5d153ULL, 0xd3a62e30fe90582aULL, - 0xb0c7b7e3c7593bd8ULL, 0xca1fc72bf76cb2a1ULL, - 0x45775673a732292aULL, 0x3faf26bb9707a053ULL, - 0x70ff52905f188d57ULL, 0x0a2722586f2d042eULL, - 0x854fb3003f739fa5ULL, 0xff97c3c80f4616dcULL, - 0x1bef5b57af4dc5adULL, 0x61372b9f9f784cd4ULL, - 0xee5fbac7cf26d75fULL, 0x9487ca0fff135e26ULL, - 0xdbd7be24370c7322ULL, 0xa10fceec0739fa5bULL, - 0x2e675fb4576761d0ULL, 0x54bf2f7c6752e8a9ULL, - 0xcdcf48d84fe75459ULL, 0xb71738107fd2dd20ULL, - 0x387fa9482f8c46abULL, 0x42a7d9801fb9cfd2ULL, - 0x0df7adabd7a6e2d6ULL, 0x772fdd63e7936bafULL, - 0xf8474c3bb7cdf024ULL, 0x829f3cf387f8795dULL, - 0x66e7a46c27f3aa2cULL, 0x1c3fd4a417c62355ULL, - 0x935745fc4798b8deULL, 0xe98f353477ad31a7ULL, - 0xa6df411fbfb21ca3ULL, 0xdc0731d78f8795daULL, - 0x536fa08fdfd90e51ULL, 0x29b7d047efec8728ULL + 0x0000000000000000ULL, 0x7ad870c830358979ULL, 0xf5b0e190606b12f2ULL, 0x8f689158505e9b8bULL, + 0xc038e5739841b68fULL, 0xbae095bba8743ff6ULL, 0x358804e3f82aa47dULL, 0x4f50742bc81f2d04ULL, + 0xab28ecb46814fe75ULL, 0xd1f09c7c5821770cULL, 0x5e980d24087fec87ULL, 0x24407dec384a65feULL, + 0x6b1009c7f05548faULL, 0x11c8790fc060c183ULL, 0x9ea0e857903e5a08ULL, 0xe478989fa00bd371ULL, + 0x7d08ff3b88be6f81ULL, 0x07d08ff3b88be6f8ULL, 0x88b81eabe8d57d73ULL, 0xf2606e63d8e0f40aULL, + 0xbd301a4810ffd90eULL, 0xc7e86a8020ca5077ULL, 0x4880fbd87094cbfcULL, 0x32588b1040a14285ULL, + 0xd620138fe0aa91f4ULL, 0xacf86347d09f188dULL, 0x2390f21f80c18306ULL, 0x594882d7b0f40a7fULL, + 0x1618f6fc78eb277bULL, 0x6cc0863448deae02ULL, 0xe3a8176c18803589ULL, 0x997067a428b5bcf0ULL, + 0xfa11fe77117cdf02ULL, 0x80c98ebf2149567bULL, 0x0fa11fe77117cdf0ULL, 0x75796f2f41224489ULL, + 0x3a291b04893d698dULL, 0x40f16bccb908e0f4ULL, 0xcf99fa94e9567b7fULL, 0xb5418a5cd963f206ULL, + 0x513912c379682177ULL, 0x2be1620b495da80eULL, 0xa489f35319033385ULL, 0xde51839b2936bafcULL, + 0x9101f7b0e12997f8ULL, 0xebd98778d11c1e81ULL, 0x64b116208142850aULL, 0x1e6966e8b1770c73ULL, + 0x8719014c99c2b083ULL, 0xfdc17184a9f739faULL, 0x72a9e0dcf9a9a271ULL, 0x08719014c99c2b08ULL, + 0x4721e43f0183060cULL, 0x3df994f731b68f75ULL, 0xb29105af61e814feULL, 0xc849756751dd9d87ULL, + 0x2c31edf8f1d64ef6ULL, 0x56e99d30c1e3c78fULL, 0xd9810c6891bd5c04ULL, 0xa3597ca0a188d57dULL, + 0xec09088b6997f879ULL, 0x96d1784359a27100ULL, 0x19b9e91b09fcea8bULL, 0x636199d339c963f2ULL, + 0xdf7adabd7a6e2d6fULL, 0xa5a2aa754a5ba416ULL, 0x2aca3b2d1a053f9dULL, 0x50124be52a30b6e4ULL, + 0x1f423fcee22f9be0ULL, 0x659a4f06d21a1299ULL, 0xeaf2de5e82448912ULL, 0x902aae96b271006bULL, + 0x74523609127ad31aULL, 0x0e8a46c1224f5a63ULL, 0x81e2d7997211c1e8ULL, 0xfb3aa75142244891ULL, + 0xb46ad37a8a3b6595ULL, 0xceb2a3b2ba0eececULL, 0x41da32eaea507767ULL, 0x3b024222da65fe1eULL, + 0xa2722586f2d042eeULL, 0xd8aa554ec2e5cb97ULL, 0x57c2c41692bb501cULL, 0x2d1ab4dea28ed965ULL, + 0x624ac0f56a91f461ULL, 0x1892b03d5aa47d18ULL, 0x97fa21650afae693ULL, 0xed2251ad3acf6feaULL, + 0x095ac9329ac4bc9bULL, 0x7382b9faaaf135e2ULL, 0xfcea28a2faafae69ULL, 0x8632586aca9a2710ULL, + 0xc9622c4102850a14ULL, 0xb3ba5c8932b0836dULL, 0x3cd2cdd162ee18e6ULL, 0x460abd1952db919fULL, + 0x256b24ca6b12f26dULL, 0x5fb354025b277b14ULL, 0xd0dbc55a0b79e09fULL, 0xaa03b5923b4c69e6ULL, + 0xe553c1b9f35344e2ULL, 0x9f8bb171c366cd9bULL, 0x10e3202993385610ULL, 0x6a3b50e1a30ddf69ULL, + 0x8e43c87e03060c18ULL, 0xf49bb8b633338561ULL, 0x7bf329ee636d1eeaULL, 0x012b592653589793ULL, + 0x4e7b2d0d9b47ba97ULL, 0x34a35dc5ab7233eeULL, 0xbbcbcc9dfb2ca865ULL, 0xc113bc55cb19211cULL, + 0x5863dbf1e3ac9decULL, 0x22bbab39d3991495ULL, 0xadd33a6183c78f1eULL, 0xd70b4aa9b3f20667ULL, + 0x985b3e827bed2b63ULL, 0xe2834e4a4bd8a21aULL, 0x6debdf121b863991ULL, 0x1733afda2bb3b0e8ULL, + 0xf34b37458bb86399ULL, 0x8993478dbb8deae0ULL, 0x06fbd6d5ebd3716bULL, 0x7c23a61ddbe6f812ULL, + 0x3373d23613f9d516ULL, 0x49aba2fe23cc5c6fULL, 0xc6c333a67392c7e4ULL, 0xbc1b436e43a74e9dULL, + 0x95ac9329ac4bc9b5ULL, 0xef74e3e19c7e40ccULL, 0x601c72b9cc20db47ULL, 0x1ac40271fc15523eULL, + 0x5594765a340a7f3aULL, 0x2f4c0692043ff643ULL, 0xa02497ca54616dc8ULL, 0xdafce7026454e4b1ULL, + 0x3e847f9dc45f37c0ULL, 0x445c0f55f46abeb9ULL, 0xcb349e0da4342532ULL, 0xb1eceec59401ac4bULL, + 0xfebc9aee5c1e814fULL, 0x8464ea266c2b0836ULL, 0x0b0c7b7e3c7593bdULL, 0x71d40bb60c401ac4ULL, + 0xe8a46c1224f5a634ULL, 0x927c1cda14c02f4dULL, 0x1d148d82449eb4c6ULL, 0x67ccfd4a74ab3dbfULL, + 0x289c8961bcb410bbULL, 0x5244f9a98c8199c2ULL, 0xdd2c68f1dcdf0249ULL, 0xa7f41839ecea8b30ULL, + 0x438c80a64ce15841ULL, 0x3954f06e7cd4d138ULL, 0xb63c61362c8a4ab3ULL, 0xcce411fe1cbfc3caULL, + 0x83b465d5d4a0eeceULL, 0xf96c151de49567b7ULL, 0x76048445b4cbfc3cULL, 0x0cdcf48d84fe7545ULL, + 0x6fbd6d5ebd3716b7ULL, 0x15651d968d029fceULL, 0x9a0d8ccedd5c0445ULL, 0xe0d5fc06ed698d3cULL, + 0xaf85882d2576a038ULL, 0xd55df8e515432941ULL, 0x5a3569bd451db2caULL, 0x20ed197575283bb3ULL, + 0xc49581ead523e8c2ULL, 0xbe4df122e51661bbULL, 0x3125607ab548fa30ULL, 0x4bfd10b2857d7349ULL, + 0x04ad64994d625e4dULL, 0x7e7514517d57d734ULL, 0xf11d85092d094cbfULL, 0x8bc5f5c11d3cc5c6ULL, + 0x12b5926535897936ULL, 0x686de2ad05bcf04fULL, 0xe70573f555e26bc4ULL, 0x9ddd033d65d7e2bdULL, + 0xd28d7716adc8cfb9ULL, 0xa85507de9dfd46c0ULL, 0x273d9686cda3dd4bULL, 0x5de5e64efd965432ULL, + 0xb99d7ed15d9d8743ULL, 0xc3450e196da80e3aULL, 0x4c2d9f413df695b1ULL, 0x36f5ef890dc31cc8ULL, + 0x79a59ba2c5dc31ccULL, 0x037deb6af5e9b8b5ULL, 0x8c157a32a5b7233eULL, 0xf6cd0afa9582aa47ULL, + 0x4ad64994d625e4daULL, 0x300e395ce6106da3ULL, 0xbf66a804b64ef628ULL, 0xc5bed8cc867b7f51ULL, + 0x8aeeace74e645255ULL, 0xf036dc2f7e51db2cULL, 0x7f5e4d772e0f40a7ULL, 0x05863dbf1e3ac9deULL, + 0xe1fea520be311aafULL, 0x9b26d5e88e0493d6ULL, 0x144e44b0de5a085dULL, 0x6e963478ee6f8124ULL, + 0x21c640532670ac20ULL, 0x5b1e309b16452559ULL, 0xd476a1c3461bbed2ULL, 0xaeaed10b762e37abULL, + 0x37deb6af5e9b8b5bULL, 0x4d06c6676eae0222ULL, 0xc26e573f3ef099a9ULL, 0xb8b627f70ec510d0ULL, + 0xf7e653dcc6da3dd4ULL, 0x8d3e2314f6efb4adULL, 0x0256b24ca6b12f26ULL, 0x788ec2849684a65fULL, + 0x9cf65a1b368f752eULL, 0xe62e2ad306bafc57ULL, 0x6946bb8b56e467dcULL, 0x139ecb4366d1eea5ULL, + 0x5ccebf68aecec3a1ULL, 0x2616cfa09efb4ad8ULL, 0xa97e5ef8cea5d153ULL, 0xd3a62e30fe90582aULL, + 0xb0c7b7e3c7593bd8ULL, 0xca1fc72bf76cb2a1ULL, 0x45775673a732292aULL, 0x3faf26bb9707a053ULL, + 0x70ff52905f188d57ULL, 0x0a2722586f2d042eULL, 0x854fb3003f739fa5ULL, 0xff97c3c80f4616dcULL, + 0x1bef5b57af4dc5adULL, 0x61372b9f9f784cd4ULL, 0xee5fbac7cf26d75fULL, 0x9487ca0fff135e26ULL, + 0xdbd7be24370c7322ULL, 0xa10fceec0739fa5bULL, 0x2e675fb4576761d0ULL, 0x54bf2f7c6752e8a9ULL, + 0xcdcf48d84fe75459ULL, 0xb71738107fd2dd20ULL, 0x387fa9482f8c46abULL, 0x42a7d9801fb9cfd2ULL, + 0x0df7adabd7a6e2d6ULL, 0x772fdd63e7936bafULL, 0xf8474c3bb7cdf024ULL, 0x829f3cf387f8795dULL, + 0x66e7a46c27f3aa2cULL, 0x1c3fd4a417c62355ULL, 0x935745fc4798b8deULL, 0xe98f353477ad31a7ULL, + 0xa6df411fbfb21ca3ULL, 0xdc0731d78f8795daULL, 0x536fa08fdfd90e51ULL, 0x29b7d047efec8728ULL }; static const uint64_t crc64_jones_norm_table[256] = { - 0x0000000000000000ULL, 0xad93d23594c935a9ULL, - 0xf6b4765ebd5b5efbULL, 0x5b27a46b29926b52ULL, - 0x40fb3e88ee7f885fULL, 0xed68ecbd7ab6bdf6ULL, - 0xb64f48d65324d6a4ULL, 0x1bdc9ae3c7ede30dULL, - 0x81f67d11dcff10beULL, 0x2c65af2448362517ULL, - 0x77420b4f61a44e45ULL, 0xdad1d97af56d7becULL, - 0xc10d4399328098e1ULL, 0x6c9e91aca649ad48ULL, - 0x37b935c78fdbc61aULL, 0x9a2ae7f21b12f3b3ULL, - 0xae7f28162d3714d5ULL, 0x03ecfa23b9fe217cULL, - 0x58cb5e48906c4a2eULL, 0xf5588c7d04a57f87ULL, - 0xee84169ec3489c8aULL, 0x4317c4ab5781a923ULL, - 0x183060c07e13c271ULL, 0xb5a3b2f5eadaf7d8ULL, - 0x2f895507f1c8046bULL, 0x821a8732650131c2ULL, - 0xd93d23594c935a90ULL, 0x74aef16cd85a6f39ULL, - 0x6f726b8f1fb78c34ULL, 0xc2e1b9ba8b7eb99dULL, - 0x99c61dd1a2ecd2cfULL, 0x3455cfe43625e766ULL, - 0xf16d8219cea71c03ULL, 0x5cfe502c5a6e29aaULL, - 0x07d9f44773fc42f8ULL, 0xaa4a2672e7357751ULL, - 0xb196bc9120d8945cULL, 0x1c056ea4b411a1f5ULL, - 0x4722cacf9d83caa7ULL, 0xeab118fa094aff0eULL, - 0x709bff0812580cbdULL, 0xdd082d3d86913914ULL, - 0x862f8956af035246ULL, 0x2bbc5b633bca67efULL, - 0x3060c180fc2784e2ULL, 0x9df313b568eeb14bULL, - 0xc6d4b7de417cda19ULL, 0x6b4765ebd5b5efb0ULL, - 0x5f12aa0fe39008d6ULL, 0xf281783a77593d7fULL, - 0xa9a6dc515ecb562dULL, 0x04350e64ca026384ULL, - 0x1fe994870def8089ULL, 0xb27a46b29926b520ULL, - 0xe95de2d9b0b4de72ULL, 0x44ce30ec247debdbULL, - 0xdee4d71e3f6f1868ULL, 0x7377052baba62dc1ULL, - 0x2850a14082344693ULL, 0x85c3737516fd733aULL, - 0x9e1fe996d1109037ULL, 0x338c3ba345d9a59eULL, - 0x68ab9fc86c4bceccULL, 0xc5384dfdf882fb65ULL, - 0x4f48d60609870dafULL, 0xe2db04339d4e3806ULL, - 0xb9fca058b4dc5354ULL, 0x146f726d201566fdULL, - 0x0fb3e88ee7f885f0ULL, 0xa2203abb7331b059ULL, - 0xf9079ed05aa3db0bULL, 0x54944ce5ce6aeea2ULL, - 0xcebeab17d5781d11ULL, 0x632d792241b128b8ULL, - 0x380add49682343eaULL, 0x95990f7cfcea7643ULL, - 0x8e45959f3b07954eULL, 0x23d647aaafcea0e7ULL, - 0x78f1e3c1865ccbb5ULL, 0xd56231f41295fe1cULL, - 0xe137fe1024b0197aULL, 0x4ca42c25b0792cd3ULL, - 0x1783884e99eb4781ULL, 0xba105a7b0d227228ULL, - 0xa1ccc098cacf9125ULL, 0x0c5f12ad5e06a48cULL, - 0x5778b6c67794cfdeULL, 0xfaeb64f3e35dfa77ULL, - 0x60c18301f84f09c4ULL, 0xcd5251346c863c6dULL, - 0x9675f55f4514573fULL, 0x3be6276ad1dd6296ULL, - 0x203abd891630819bULL, 0x8da96fbc82f9b432ULL, - 0xd68ecbd7ab6bdf60ULL, 0x7b1d19e23fa2eac9ULL, - 0xbe25541fc72011acULL, 0x13b6862a53e92405ULL, - 0x489122417a7b4f57ULL, 0xe502f074eeb27afeULL, - 0xfede6a97295f99f3ULL, 0x534db8a2bd96ac5aULL, - 0x086a1cc99404c708ULL, 0xa5f9cefc00cdf2a1ULL, - 0x3fd3290e1bdf0112ULL, 0x9240fb3b8f1634bbULL, - 0xc9675f50a6845fe9ULL, 0x64f48d65324d6a40ULL, - 0x7f281786f5a0894dULL, 0xd2bbc5b36169bce4ULL, - 0x899c61d848fbd7b6ULL, 0x240fb3eddc32e21fULL, - 0x105a7c09ea170579ULL, 0xbdc9ae3c7ede30d0ULL, - 0xe6ee0a57574c5b82ULL, 0x4b7dd862c3856e2bULL, - 0x50a1428104688d26ULL, 0xfd3290b490a1b88fULL, - 0xa61534dfb933d3ddULL, 0x0b86e6ea2dfae674ULL, - 0x91ac011836e815c7ULL, 0x3c3fd32da221206eULL, - 0x671877468bb34b3cULL, 0xca8ba5731f7a7e95ULL, - 0xd1573f90d8979d98ULL, 0x7cc4eda54c5ea831ULL, - 0x27e349ce65ccc363ULL, 0x8a709bfbf105f6caULL, - 0x9e91ac0c130e1b5eULL, 0x33027e3987c72ef7ULL, - 0x6825da52ae5545a5ULL, 0xc5b608673a9c700cULL, - 0xde6a9284fd719301ULL, 0x73f940b169b8a6a8ULL, - 0x28dee4da402acdfaULL, 0x854d36efd4e3f853ULL, - 0x1f67d11dcff10be0ULL, 0xb2f403285b383e49ULL, - 0xe9d3a74372aa551bULL, 0x44407576e66360b2ULL, - 0x5f9cef95218e83bfULL, 0xf20f3da0b547b616ULL, - 0xa92899cb9cd5dd44ULL, 0x04bb4bfe081ce8edULL, - 0x30ee841a3e390f8bULL, 0x9d7d562faaf03a22ULL, - 0xc65af24483625170ULL, 0x6bc9207117ab64d9ULL, - 0x7015ba92d04687d4ULL, 0xdd8668a7448fb27dULL, - 0x86a1cccc6d1dd92fULL, 0x2b321ef9f9d4ec86ULL, - 0xb118f90be2c61f35ULL, 0x1c8b2b3e760f2a9cULL, - 0x47ac8f555f9d41ceULL, 0xea3f5d60cb547467ULL, - 0xf1e3c7830cb9976aULL, 0x5c7015b69870a2c3ULL, - 0x0757b1ddb1e2c991ULL, 0xaac463e8252bfc38ULL, - 0x6ffc2e15dda9075dULL, 0xc26ffc20496032f4ULL, - 0x9948584b60f259a6ULL, 0x34db8a7ef43b6c0fULL, - 0x2f07109d33d68f02ULL, 0x8294c2a8a71fbaabULL, - 0xd9b366c38e8dd1f9ULL, 0x7420b4f61a44e450ULL, - 0xee0a5304015617e3ULL, 0x43998131959f224aULL, - 0x18be255abc0d4918ULL, 0xb52df76f28c47cb1ULL, - 0xaef16d8cef299fbcULL, 0x0362bfb97be0aa15ULL, - 0x58451bd25272c147ULL, 0xf5d6c9e7c6bbf4eeULL, - 0xc1830603f09e1388ULL, 0x6c10d43664572621ULL, - 0x3737705d4dc54d73ULL, 0x9aa4a268d90c78daULL, - 0x8178388b1ee19bd7ULL, 0x2cebeabe8a28ae7eULL, - 0x77cc4ed5a3bac52cULL, 0xda5f9ce03773f085ULL, - 0x40757b122c610336ULL, 0xede6a927b8a8369fULL, - 0xb6c10d4c913a5dcdULL, 0x1b52df7905f36864ULL, - 0x008e459ac21e8b69ULL, 0xad1d97af56d7bec0ULL, - 0xf63a33c47f45d592ULL, 0x5ba9e1f1eb8ce03bULL, - 0xd1d97a0a1a8916f1ULL, 0x7c4aa83f8e402358ULL, - 0x276d0c54a7d2480aULL, 0x8afede61331b7da3ULL, - 0x91224482f4f69eaeULL, 0x3cb196b7603fab07ULL, - 0x679632dc49adc055ULL, 0xca05e0e9dd64f5fcULL, - 0x502f071bc676064fULL, 0xfdbcd52e52bf33e6ULL, - 0xa69b71457b2d58b4ULL, 0x0b08a370efe46d1dULL, - 0x10d4399328098e10ULL, 0xbd47eba6bcc0bbb9ULL, - 0xe6604fcd9552d0ebULL, 0x4bf39df8019be542ULL, - 0x7fa6521c37be0224ULL, 0xd2358029a377378dULL, - 0x891224428ae55cdfULL, 0x2481f6771e2c6976ULL, - 0x3f5d6c94d9c18a7bULL, 0x92cebea14d08bfd2ULL, - 0xc9e91aca649ad480ULL, 0x647ac8fff053e129ULL, - 0xfe502f0deb41129aULL, 0x53c3fd387f882733ULL, - 0x08e45953561a4c61ULL, 0xa5778b66c2d379c8ULL, - 0xbeab1185053e9ac5ULL, 0x1338c3b091f7af6cULL, - 0x481f67dbb865c43eULL, 0xe58cb5ee2cacf197ULL, - 0x20b4f813d42e0af2ULL, 0x8d272a2640e73f5bULL, - 0xd6008e4d69755409ULL, 0x7b935c78fdbc61a0ULL, - 0x604fc69b3a5182adULL, 0xcddc14aeae98b704ULL, - 0x96fbb0c5870adc56ULL, 0x3b6862f013c3e9ffULL, - 0xa142850208d11a4cULL, 0x0cd157379c182fe5ULL, - 0x57f6f35cb58a44b7ULL, 0xfa6521692143711eULL, - 0xe1b9bb8ae6ae9213ULL, 0x4c2a69bf7267a7baULL, - 0x170dcdd45bf5cce8ULL, 0xba9e1fe1cf3cf941ULL, - 0x8ecbd005f9191e27ULL, 0x235802306dd02b8eULL, - 0x787fa65b444240dcULL, 0xd5ec746ed08b7575ULL, - 0xce30ee8d17669678ULL, 0x63a33cb883afa3d1ULL, - 0x388498d3aa3dc883ULL, 0x95174ae63ef4fd2aULL, - 0x0f3dad1425e60e99ULL, 0xa2ae7f21b12f3b30ULL, - 0xf989db4a98bd5062ULL, 0x541a097f0c7465cbULL, - 0x4fc6939ccb9986c6ULL, 0xe25541a95f50b36fULL, - 0xb972e5c276c2d83dULL, 0x14e137f7e20bed94ULL + 0x0000000000000000ULL, 0xad93d23594c935a9ULL, 0xf6b4765ebd5b5efbULL, 0x5b27a46b29926b52ULL, + 0x40fb3e88ee7f885fULL, 0xed68ecbd7ab6bdf6ULL, 0xb64f48d65324d6a4ULL, 0x1bdc9ae3c7ede30dULL, + 0x81f67d11dcff10beULL, 0x2c65af2448362517ULL, 0x77420b4f61a44e45ULL, 0xdad1d97af56d7becULL, + 0xc10d4399328098e1ULL, 0x6c9e91aca649ad48ULL, 0x37b935c78fdbc61aULL, 0x9a2ae7f21b12f3b3ULL, + 0xae7f28162d3714d5ULL, 0x03ecfa23b9fe217cULL, 0x58cb5e48906c4a2eULL, 0xf5588c7d04a57f87ULL, + 0xee84169ec3489c8aULL, 0x4317c4ab5781a923ULL, 0x183060c07e13c271ULL, 0xb5a3b2f5eadaf7d8ULL, + 0x2f895507f1c8046bULL, 0x821a8732650131c2ULL, 0xd93d23594c935a90ULL, 0x74aef16cd85a6f39ULL, + 0x6f726b8f1fb78c34ULL, 0xc2e1b9ba8b7eb99dULL, 0x99c61dd1a2ecd2cfULL, 0x3455cfe43625e766ULL, + 0xf16d8219cea71c03ULL, 0x5cfe502c5a6e29aaULL, 0x07d9f44773fc42f8ULL, 0xaa4a2672e7357751ULL, + 0xb196bc9120d8945cULL, 0x1c056ea4b411a1f5ULL, 0x4722cacf9d83caa7ULL, 0xeab118fa094aff0eULL, + 0x709bff0812580cbdULL, 0xdd082d3d86913914ULL, 0x862f8956af035246ULL, 0x2bbc5b633bca67efULL, + 0x3060c180fc2784e2ULL, 0x9df313b568eeb14bULL, 0xc6d4b7de417cda19ULL, 0x6b4765ebd5b5efb0ULL, + 0x5f12aa0fe39008d6ULL, 0xf281783a77593d7fULL, 0xa9a6dc515ecb562dULL, 0x04350e64ca026384ULL, + 0x1fe994870def8089ULL, 0xb27a46b29926b520ULL, 0xe95de2d9b0b4de72ULL, 0x44ce30ec247debdbULL, + 0xdee4d71e3f6f1868ULL, 0x7377052baba62dc1ULL, 0x2850a14082344693ULL, 0x85c3737516fd733aULL, + 0x9e1fe996d1109037ULL, 0x338c3ba345d9a59eULL, 0x68ab9fc86c4bceccULL, 0xc5384dfdf882fb65ULL, + 0x4f48d60609870dafULL, 0xe2db04339d4e3806ULL, 0xb9fca058b4dc5354ULL, 0x146f726d201566fdULL, + 0x0fb3e88ee7f885f0ULL, 0xa2203abb7331b059ULL, 0xf9079ed05aa3db0bULL, 0x54944ce5ce6aeea2ULL, + 0xcebeab17d5781d11ULL, 0x632d792241b128b8ULL, 0x380add49682343eaULL, 0x95990f7cfcea7643ULL, + 0x8e45959f3b07954eULL, 0x23d647aaafcea0e7ULL, 0x78f1e3c1865ccbb5ULL, 0xd56231f41295fe1cULL, + 0xe137fe1024b0197aULL, 0x4ca42c25b0792cd3ULL, 0x1783884e99eb4781ULL, 0xba105a7b0d227228ULL, + 0xa1ccc098cacf9125ULL, 0x0c5f12ad5e06a48cULL, 0x5778b6c67794cfdeULL, 0xfaeb64f3e35dfa77ULL, + 0x60c18301f84f09c4ULL, 0xcd5251346c863c6dULL, 0x9675f55f4514573fULL, 0x3be6276ad1dd6296ULL, + 0x203abd891630819bULL, 0x8da96fbc82f9b432ULL, 0xd68ecbd7ab6bdf60ULL, 0x7b1d19e23fa2eac9ULL, + 0xbe25541fc72011acULL, 0x13b6862a53e92405ULL, 0x489122417a7b4f57ULL, 0xe502f074eeb27afeULL, + 0xfede6a97295f99f3ULL, 0x534db8a2bd96ac5aULL, 0x086a1cc99404c708ULL, 0xa5f9cefc00cdf2a1ULL, + 0x3fd3290e1bdf0112ULL, 0x9240fb3b8f1634bbULL, 0xc9675f50a6845fe9ULL, 0x64f48d65324d6a40ULL, + 0x7f281786f5a0894dULL, 0xd2bbc5b36169bce4ULL, 0x899c61d848fbd7b6ULL, 0x240fb3eddc32e21fULL, + 0x105a7c09ea170579ULL, 0xbdc9ae3c7ede30d0ULL, 0xe6ee0a57574c5b82ULL, 0x4b7dd862c3856e2bULL, + 0x50a1428104688d26ULL, 0xfd3290b490a1b88fULL, 0xa61534dfb933d3ddULL, 0x0b86e6ea2dfae674ULL, + 0x91ac011836e815c7ULL, 0x3c3fd32da221206eULL, 0x671877468bb34b3cULL, 0xca8ba5731f7a7e95ULL, + 0xd1573f90d8979d98ULL, 0x7cc4eda54c5ea831ULL, 0x27e349ce65ccc363ULL, 0x8a709bfbf105f6caULL, + 0x9e91ac0c130e1b5eULL, 0x33027e3987c72ef7ULL, 0x6825da52ae5545a5ULL, 0xc5b608673a9c700cULL, + 0xde6a9284fd719301ULL, 0x73f940b169b8a6a8ULL, 0x28dee4da402acdfaULL, 0x854d36efd4e3f853ULL, + 0x1f67d11dcff10be0ULL, 0xb2f403285b383e49ULL, 0xe9d3a74372aa551bULL, 0x44407576e66360b2ULL, + 0x5f9cef95218e83bfULL, 0xf20f3da0b547b616ULL, 0xa92899cb9cd5dd44ULL, 0x04bb4bfe081ce8edULL, + 0x30ee841a3e390f8bULL, 0x9d7d562faaf03a22ULL, 0xc65af24483625170ULL, 0x6bc9207117ab64d9ULL, + 0x7015ba92d04687d4ULL, 0xdd8668a7448fb27dULL, 0x86a1cccc6d1dd92fULL, 0x2b321ef9f9d4ec86ULL, + 0xb118f90be2c61f35ULL, 0x1c8b2b3e760f2a9cULL, 0x47ac8f555f9d41ceULL, 0xea3f5d60cb547467ULL, + 0xf1e3c7830cb9976aULL, 0x5c7015b69870a2c3ULL, 0x0757b1ddb1e2c991ULL, 0xaac463e8252bfc38ULL, + 0x6ffc2e15dda9075dULL, 0xc26ffc20496032f4ULL, 0x9948584b60f259a6ULL, 0x34db8a7ef43b6c0fULL, + 0x2f07109d33d68f02ULL, 0x8294c2a8a71fbaabULL, 0xd9b366c38e8dd1f9ULL, 0x7420b4f61a44e450ULL, + 0xee0a5304015617e3ULL, 0x43998131959f224aULL, 0x18be255abc0d4918ULL, 0xb52df76f28c47cb1ULL, + 0xaef16d8cef299fbcULL, 0x0362bfb97be0aa15ULL, 0x58451bd25272c147ULL, 0xf5d6c9e7c6bbf4eeULL, + 0xc1830603f09e1388ULL, 0x6c10d43664572621ULL, 0x3737705d4dc54d73ULL, 0x9aa4a268d90c78daULL, + 0x8178388b1ee19bd7ULL, 0x2cebeabe8a28ae7eULL, 0x77cc4ed5a3bac52cULL, 0xda5f9ce03773f085ULL, + 0x40757b122c610336ULL, 0xede6a927b8a8369fULL, 0xb6c10d4c913a5dcdULL, 0x1b52df7905f36864ULL, + 0x008e459ac21e8b69ULL, 0xad1d97af56d7bec0ULL, 0xf63a33c47f45d592ULL, 0x5ba9e1f1eb8ce03bULL, + 0xd1d97a0a1a8916f1ULL, 0x7c4aa83f8e402358ULL, 0x276d0c54a7d2480aULL, 0x8afede61331b7da3ULL, + 0x91224482f4f69eaeULL, 0x3cb196b7603fab07ULL, 0x679632dc49adc055ULL, 0xca05e0e9dd64f5fcULL, + 0x502f071bc676064fULL, 0xfdbcd52e52bf33e6ULL, 0xa69b71457b2d58b4ULL, 0x0b08a370efe46d1dULL, + 0x10d4399328098e10ULL, 0xbd47eba6bcc0bbb9ULL, 0xe6604fcd9552d0ebULL, 0x4bf39df8019be542ULL, + 0x7fa6521c37be0224ULL, 0xd2358029a377378dULL, 0x891224428ae55cdfULL, 0x2481f6771e2c6976ULL, + 0x3f5d6c94d9c18a7bULL, 0x92cebea14d08bfd2ULL, 0xc9e91aca649ad480ULL, 0x647ac8fff053e129ULL, + 0xfe502f0deb41129aULL, 0x53c3fd387f882733ULL, 0x08e45953561a4c61ULL, 0xa5778b66c2d379c8ULL, + 0xbeab1185053e9ac5ULL, 0x1338c3b091f7af6cULL, 0x481f67dbb865c43eULL, 0xe58cb5ee2cacf197ULL, + 0x20b4f813d42e0af2ULL, 0x8d272a2640e73f5bULL, 0xd6008e4d69755409ULL, 0x7b935c78fdbc61a0ULL, + 0x604fc69b3a5182adULL, 0xcddc14aeae98b704ULL, 0x96fbb0c5870adc56ULL, 0x3b6862f013c3e9ffULL, + 0xa142850208d11a4cULL, 0x0cd157379c182fe5ULL, 0x57f6f35cb58a44b7ULL, 0xfa6521692143711eULL, + 0xe1b9bb8ae6ae9213ULL, 0x4c2a69bf7267a7baULL, 0x170dcdd45bf5cce8ULL, 0xba9e1fe1cf3cf941ULL, + 0x8ecbd005f9191e27ULL, 0x235802306dd02b8eULL, 0x787fa65b444240dcULL, 0xd5ec746ed08b7575ULL, + 0xce30ee8d17669678ULL, 0x63a33cb883afa3d1ULL, 0x388498d3aa3dc883ULL, 0x95174ae63ef4fd2aULL, + 0x0f3dad1425e60e99ULL, 0xa2ae7f21b12f3b30ULL, 0xf989db4a98bd5062ULL, 0x541a097f0c7465cbULL, + 0x4fc6939ccb9986c6ULL, 0xe25541a95f50b36fULL, 0xb972e5c276c2d83dULL, 0x14e137f7e20bed94ULL }; static const uint64_t crc64_rocksoft_refl_table[256] = { - 0x0000000000000000ULL, 0x7f6ef0c830358979ULL, - 0xfedde190606b12f2ULL, 0x81b31158505e9b8bULL, - 0xc962e5739841b68fULL, 0xb60c15bba8743ff6ULL, - 0x37bf04e3f82aa47dULL, 0x48d1f42bc81f2d04ULL, - 0xa61cecb46814fe75ULL, 0xd9721c7c5821770cULL, - 0x58c10d24087fec87ULL, 0x27affdec384a65feULL, - 0x6f7e09c7f05548faULL, 0x1010f90fc060c183ULL, - 0x91a3e857903e5a08ULL, 0xeecd189fa00bd371ULL, - 0x78e0ff3b88be6f81ULL, 0x078e0ff3b88be6f8ULL, - 0x863d1eabe8d57d73ULL, 0xf953ee63d8e0f40aULL, - 0xb1821a4810ffd90eULL, 0xceecea8020ca5077ULL, - 0x4f5ffbd87094cbfcULL, 0x30310b1040a14285ULL, - 0xdefc138fe0aa91f4ULL, 0xa192e347d09f188dULL, - 0x2021f21f80c18306ULL, 0x5f4f02d7b0f40a7fULL, - 0x179ef6fc78eb277bULL, 0x68f0063448deae02ULL, - 0xe943176c18803589ULL, 0x962de7a428b5bcf0ULL, - 0xf1c1fe77117cdf02ULL, 0x8eaf0ebf2149567bULL, - 0x0f1c1fe77117cdf0ULL, 0x7072ef2f41224489ULL, - 0x38a31b04893d698dULL, 0x47cdebccb908e0f4ULL, - 0xc67efa94e9567b7fULL, 0xb9100a5cd963f206ULL, - 0x57dd12c379682177ULL, 0x28b3e20b495da80eULL, - 0xa900f35319033385ULL, 0xd66e039b2936bafcULL, - 0x9ebff7b0e12997f8ULL, 0xe1d10778d11c1e81ULL, - 0x606216208142850aULL, 0x1f0ce6e8b1770c73ULL, - 0x8921014c99c2b083ULL, 0xf64ff184a9f739faULL, - 0x77fce0dcf9a9a271ULL, 0x08921014c99c2b08ULL, - 0x4043e43f0183060cULL, 0x3f2d14f731b68f75ULL, - 0xbe9e05af61e814feULL, 0xc1f0f56751dd9d87ULL, - 0x2f3dedf8f1d64ef6ULL, 0x50531d30c1e3c78fULL, - 0xd1e00c6891bd5c04ULL, 0xae8efca0a188d57dULL, - 0xe65f088b6997f879ULL, 0x9931f84359a27100ULL, - 0x1882e91b09fcea8bULL, 0x67ec19d339c963f2ULL, - 0xd75adabd7a6e2d6fULL, 0xa8342a754a5ba416ULL, - 0x29873b2d1a053f9dULL, 0x56e9cbe52a30b6e4ULL, - 0x1e383fcee22f9be0ULL, 0x6156cf06d21a1299ULL, - 0xe0e5de5e82448912ULL, 0x9f8b2e96b271006bULL, - 0x71463609127ad31aULL, 0x0e28c6c1224f5a63ULL, - 0x8f9bd7997211c1e8ULL, 0xf0f5275142244891ULL, - 0xb824d37a8a3b6595ULL, 0xc74a23b2ba0eececULL, - 0x46f932eaea507767ULL, 0x3997c222da65fe1eULL, - 0xafba2586f2d042eeULL, 0xd0d4d54ec2e5cb97ULL, - 0x5167c41692bb501cULL, 0x2e0934dea28ed965ULL, - 0x66d8c0f56a91f461ULL, 0x19b6303d5aa47d18ULL, - 0x980521650afae693ULL, 0xe76bd1ad3acf6feaULL, - 0x09a6c9329ac4bc9bULL, 0x76c839faaaf135e2ULL, - 0xf77b28a2faafae69ULL, 0x8815d86aca9a2710ULL, - 0xc0c42c4102850a14ULL, 0xbfaadc8932b0836dULL, - 0x3e19cdd162ee18e6ULL, 0x41773d1952db919fULL, - 0x269b24ca6b12f26dULL, 0x59f5d4025b277b14ULL, - 0xd846c55a0b79e09fULL, 0xa72835923b4c69e6ULL, - 0xeff9c1b9f35344e2ULL, 0x90973171c366cd9bULL, - 0x1124202993385610ULL, 0x6e4ad0e1a30ddf69ULL, - 0x8087c87e03060c18ULL, 0xffe938b633338561ULL, - 0x7e5a29ee636d1eeaULL, 0x0134d92653589793ULL, - 0x49e52d0d9b47ba97ULL, 0x368bddc5ab7233eeULL, - 0xb738cc9dfb2ca865ULL, 0xc8563c55cb19211cULL, - 0x5e7bdbf1e3ac9decULL, 0x21152b39d3991495ULL, - 0xa0a63a6183c78f1eULL, 0xdfc8caa9b3f20667ULL, - 0x97193e827bed2b63ULL, 0xe877ce4a4bd8a21aULL, - 0x69c4df121b863991ULL, 0x16aa2fda2bb3b0e8ULL, - 0xf86737458bb86399ULL, 0x8709c78dbb8deae0ULL, - 0x06bad6d5ebd3716bULL, 0x79d4261ddbe6f812ULL, - 0x3105d23613f9d516ULL, 0x4e6b22fe23cc5c6fULL, - 0xcfd833a67392c7e4ULL, 0xb0b6c36e43a74e9dULL, - 0x9a6c9329ac4bc9b5ULL, 0xe50263e19c7e40ccULL, - 0x64b172b9cc20db47ULL, 0x1bdf8271fc15523eULL, - 0x530e765a340a7f3aULL, 0x2c608692043ff643ULL, - 0xadd397ca54616dc8ULL, 0xd2bd67026454e4b1ULL, - 0x3c707f9dc45f37c0ULL, 0x431e8f55f46abeb9ULL, - 0xc2ad9e0da4342532ULL, 0xbdc36ec59401ac4bULL, - 0xf5129aee5c1e814fULL, 0x8a7c6a266c2b0836ULL, - 0x0bcf7b7e3c7593bdULL, 0x74a18bb60c401ac4ULL, - 0xe28c6c1224f5a634ULL, 0x9de29cda14c02f4dULL, - 0x1c518d82449eb4c6ULL, 0x633f7d4a74ab3dbfULL, - 0x2bee8961bcb410bbULL, 0x548079a98c8199c2ULL, - 0xd53368f1dcdf0249ULL, 0xaa5d9839ecea8b30ULL, - 0x449080a64ce15841ULL, 0x3bfe706e7cd4d138ULL, - 0xba4d61362c8a4ab3ULL, 0xc52391fe1cbfc3caULL, - 0x8df265d5d4a0eeceULL, 0xf29c951de49567b7ULL, - 0x732f8445b4cbfc3cULL, 0x0c41748d84fe7545ULL, - 0x6bad6d5ebd3716b7ULL, 0x14c39d968d029fceULL, - 0x95708ccedd5c0445ULL, 0xea1e7c06ed698d3cULL, - 0xa2cf882d2576a038ULL, 0xdda178e515432941ULL, - 0x5c1269bd451db2caULL, 0x237c997575283bb3ULL, - 0xcdb181ead523e8c2ULL, 0xb2df7122e51661bbULL, - 0x336c607ab548fa30ULL, 0x4c0290b2857d7349ULL, - 0x04d364994d625e4dULL, 0x7bbd94517d57d734ULL, - 0xfa0e85092d094cbfULL, 0x856075c11d3cc5c6ULL, - 0x134d926535897936ULL, 0x6c2362ad05bcf04fULL, - 0xed9073f555e26bc4ULL, 0x92fe833d65d7e2bdULL, - 0xda2f7716adc8cfb9ULL, 0xa54187de9dfd46c0ULL, - 0x24f29686cda3dd4bULL, 0x5b9c664efd965432ULL, - 0xb5517ed15d9d8743ULL, 0xca3f8e196da80e3aULL, - 0x4b8c9f413df695b1ULL, 0x34e26f890dc31cc8ULL, - 0x7c339ba2c5dc31ccULL, 0x035d6b6af5e9b8b5ULL, - 0x82ee7a32a5b7233eULL, 0xfd808afa9582aa47ULL, - 0x4d364994d625e4daULL, 0x3258b95ce6106da3ULL, - 0xb3eba804b64ef628ULL, 0xcc8558cc867b7f51ULL, - 0x8454ace74e645255ULL, 0xfb3a5c2f7e51db2cULL, - 0x7a894d772e0f40a7ULL, 0x05e7bdbf1e3ac9deULL, - 0xeb2aa520be311aafULL, 0x944455e88e0493d6ULL, - 0x15f744b0de5a085dULL, 0x6a99b478ee6f8124ULL, - 0x224840532670ac20ULL, 0x5d26b09b16452559ULL, - 0xdc95a1c3461bbed2ULL, 0xa3fb510b762e37abULL, - 0x35d6b6af5e9b8b5bULL, 0x4ab846676eae0222ULL, - 0xcb0b573f3ef099a9ULL, 0xb465a7f70ec510d0ULL, - 0xfcb453dcc6da3dd4ULL, 0x83daa314f6efb4adULL, - 0x0269b24ca6b12f26ULL, 0x7d0742849684a65fULL, - 0x93ca5a1b368f752eULL, 0xeca4aad306bafc57ULL, - 0x6d17bb8b56e467dcULL, 0x12794b4366d1eea5ULL, - 0x5aa8bf68aecec3a1ULL, 0x25c64fa09efb4ad8ULL, - 0xa4755ef8cea5d153ULL, 0xdb1bae30fe90582aULL, - 0xbcf7b7e3c7593bd8ULL, 0xc399472bf76cb2a1ULL, - 0x422a5673a732292aULL, 0x3d44a6bb9707a053ULL, - 0x759552905f188d57ULL, 0x0afba2586f2d042eULL, - 0x8b48b3003f739fa5ULL, 0xf42643c80f4616dcULL, - 0x1aeb5b57af4dc5adULL, 0x6585ab9f9f784cd4ULL, - 0xe436bac7cf26d75fULL, 0x9b584a0fff135e26ULL, - 0xd389be24370c7322ULL, 0xace74eec0739fa5bULL, - 0x2d545fb4576761d0ULL, 0x523aaf7c6752e8a9ULL, - 0xc41748d84fe75459ULL, 0xbb79b8107fd2dd20ULL, - 0x3acaa9482f8c46abULL, 0x45a459801fb9cfd2ULL, - 0x0d75adabd7a6e2d6ULL, 0x721b5d63e7936bafULL, - 0xf3a84c3bb7cdf024ULL, 0x8cc6bcf387f8795dULL, - 0x620ba46c27f3aa2cULL, 0x1d6554a417c62355ULL, - 0x9cd645fc4798b8deULL, 0xe3b8b53477ad31a7ULL, - 0xab69411fbfb21ca3ULL, 0xd407b1d78f8795daULL, - 0x55b4a08fdfd90e51ULL, 0x2ada5047efec8728ULL + 0x0000000000000000ULL, 0x7f6ef0c830358979ULL, 0xfedde190606b12f2ULL, 0x81b31158505e9b8bULL, + 0xc962e5739841b68fULL, 0xb60c15bba8743ff6ULL, 0x37bf04e3f82aa47dULL, 0x48d1f42bc81f2d04ULL, + 0xa61cecb46814fe75ULL, 0xd9721c7c5821770cULL, 0x58c10d24087fec87ULL, 0x27affdec384a65feULL, + 0x6f7e09c7f05548faULL, 0x1010f90fc060c183ULL, 0x91a3e857903e5a08ULL, 0xeecd189fa00bd371ULL, + 0x78e0ff3b88be6f81ULL, 0x078e0ff3b88be6f8ULL, 0x863d1eabe8d57d73ULL, 0xf953ee63d8e0f40aULL, + 0xb1821a4810ffd90eULL, 0xceecea8020ca5077ULL, 0x4f5ffbd87094cbfcULL, 0x30310b1040a14285ULL, + 0xdefc138fe0aa91f4ULL, 0xa192e347d09f188dULL, 0x2021f21f80c18306ULL, 0x5f4f02d7b0f40a7fULL, + 0x179ef6fc78eb277bULL, 0x68f0063448deae02ULL, 0xe943176c18803589ULL, 0x962de7a428b5bcf0ULL, + 0xf1c1fe77117cdf02ULL, 0x8eaf0ebf2149567bULL, 0x0f1c1fe77117cdf0ULL, 0x7072ef2f41224489ULL, + 0x38a31b04893d698dULL, 0x47cdebccb908e0f4ULL, 0xc67efa94e9567b7fULL, 0xb9100a5cd963f206ULL, + 0x57dd12c379682177ULL, 0x28b3e20b495da80eULL, 0xa900f35319033385ULL, 0xd66e039b2936bafcULL, + 0x9ebff7b0e12997f8ULL, 0xe1d10778d11c1e81ULL, 0x606216208142850aULL, 0x1f0ce6e8b1770c73ULL, + 0x8921014c99c2b083ULL, 0xf64ff184a9f739faULL, 0x77fce0dcf9a9a271ULL, 0x08921014c99c2b08ULL, + 0x4043e43f0183060cULL, 0x3f2d14f731b68f75ULL, 0xbe9e05af61e814feULL, 0xc1f0f56751dd9d87ULL, + 0x2f3dedf8f1d64ef6ULL, 0x50531d30c1e3c78fULL, 0xd1e00c6891bd5c04ULL, 0xae8efca0a188d57dULL, + 0xe65f088b6997f879ULL, 0x9931f84359a27100ULL, 0x1882e91b09fcea8bULL, 0x67ec19d339c963f2ULL, + 0xd75adabd7a6e2d6fULL, 0xa8342a754a5ba416ULL, 0x29873b2d1a053f9dULL, 0x56e9cbe52a30b6e4ULL, + 0x1e383fcee22f9be0ULL, 0x6156cf06d21a1299ULL, 0xe0e5de5e82448912ULL, 0x9f8b2e96b271006bULL, + 0x71463609127ad31aULL, 0x0e28c6c1224f5a63ULL, 0x8f9bd7997211c1e8ULL, 0xf0f5275142244891ULL, + 0xb824d37a8a3b6595ULL, 0xc74a23b2ba0eececULL, 0x46f932eaea507767ULL, 0x3997c222da65fe1eULL, + 0xafba2586f2d042eeULL, 0xd0d4d54ec2e5cb97ULL, 0x5167c41692bb501cULL, 0x2e0934dea28ed965ULL, + 0x66d8c0f56a91f461ULL, 0x19b6303d5aa47d18ULL, 0x980521650afae693ULL, 0xe76bd1ad3acf6feaULL, + 0x09a6c9329ac4bc9bULL, 0x76c839faaaf135e2ULL, 0xf77b28a2faafae69ULL, 0x8815d86aca9a2710ULL, + 0xc0c42c4102850a14ULL, 0xbfaadc8932b0836dULL, 0x3e19cdd162ee18e6ULL, 0x41773d1952db919fULL, + 0x269b24ca6b12f26dULL, 0x59f5d4025b277b14ULL, 0xd846c55a0b79e09fULL, 0xa72835923b4c69e6ULL, + 0xeff9c1b9f35344e2ULL, 0x90973171c366cd9bULL, 0x1124202993385610ULL, 0x6e4ad0e1a30ddf69ULL, + 0x8087c87e03060c18ULL, 0xffe938b633338561ULL, 0x7e5a29ee636d1eeaULL, 0x0134d92653589793ULL, + 0x49e52d0d9b47ba97ULL, 0x368bddc5ab7233eeULL, 0xb738cc9dfb2ca865ULL, 0xc8563c55cb19211cULL, + 0x5e7bdbf1e3ac9decULL, 0x21152b39d3991495ULL, 0xa0a63a6183c78f1eULL, 0xdfc8caa9b3f20667ULL, + 0x97193e827bed2b63ULL, 0xe877ce4a4bd8a21aULL, 0x69c4df121b863991ULL, 0x16aa2fda2bb3b0e8ULL, + 0xf86737458bb86399ULL, 0x8709c78dbb8deae0ULL, 0x06bad6d5ebd3716bULL, 0x79d4261ddbe6f812ULL, + 0x3105d23613f9d516ULL, 0x4e6b22fe23cc5c6fULL, 0xcfd833a67392c7e4ULL, 0xb0b6c36e43a74e9dULL, + 0x9a6c9329ac4bc9b5ULL, 0xe50263e19c7e40ccULL, 0x64b172b9cc20db47ULL, 0x1bdf8271fc15523eULL, + 0x530e765a340a7f3aULL, 0x2c608692043ff643ULL, 0xadd397ca54616dc8ULL, 0xd2bd67026454e4b1ULL, + 0x3c707f9dc45f37c0ULL, 0x431e8f55f46abeb9ULL, 0xc2ad9e0da4342532ULL, 0xbdc36ec59401ac4bULL, + 0xf5129aee5c1e814fULL, 0x8a7c6a266c2b0836ULL, 0x0bcf7b7e3c7593bdULL, 0x74a18bb60c401ac4ULL, + 0xe28c6c1224f5a634ULL, 0x9de29cda14c02f4dULL, 0x1c518d82449eb4c6ULL, 0x633f7d4a74ab3dbfULL, + 0x2bee8961bcb410bbULL, 0x548079a98c8199c2ULL, 0xd53368f1dcdf0249ULL, 0xaa5d9839ecea8b30ULL, + 0x449080a64ce15841ULL, 0x3bfe706e7cd4d138ULL, 0xba4d61362c8a4ab3ULL, 0xc52391fe1cbfc3caULL, + 0x8df265d5d4a0eeceULL, 0xf29c951de49567b7ULL, 0x732f8445b4cbfc3cULL, 0x0c41748d84fe7545ULL, + 0x6bad6d5ebd3716b7ULL, 0x14c39d968d029fceULL, 0x95708ccedd5c0445ULL, 0xea1e7c06ed698d3cULL, + 0xa2cf882d2576a038ULL, 0xdda178e515432941ULL, 0x5c1269bd451db2caULL, 0x237c997575283bb3ULL, + 0xcdb181ead523e8c2ULL, 0xb2df7122e51661bbULL, 0x336c607ab548fa30ULL, 0x4c0290b2857d7349ULL, + 0x04d364994d625e4dULL, 0x7bbd94517d57d734ULL, 0xfa0e85092d094cbfULL, 0x856075c11d3cc5c6ULL, + 0x134d926535897936ULL, 0x6c2362ad05bcf04fULL, 0xed9073f555e26bc4ULL, 0x92fe833d65d7e2bdULL, + 0xda2f7716adc8cfb9ULL, 0xa54187de9dfd46c0ULL, 0x24f29686cda3dd4bULL, 0x5b9c664efd965432ULL, + 0xb5517ed15d9d8743ULL, 0xca3f8e196da80e3aULL, 0x4b8c9f413df695b1ULL, 0x34e26f890dc31cc8ULL, + 0x7c339ba2c5dc31ccULL, 0x035d6b6af5e9b8b5ULL, 0x82ee7a32a5b7233eULL, 0xfd808afa9582aa47ULL, + 0x4d364994d625e4daULL, 0x3258b95ce6106da3ULL, 0xb3eba804b64ef628ULL, 0xcc8558cc867b7f51ULL, + 0x8454ace74e645255ULL, 0xfb3a5c2f7e51db2cULL, 0x7a894d772e0f40a7ULL, 0x05e7bdbf1e3ac9deULL, + 0xeb2aa520be311aafULL, 0x944455e88e0493d6ULL, 0x15f744b0de5a085dULL, 0x6a99b478ee6f8124ULL, + 0x224840532670ac20ULL, 0x5d26b09b16452559ULL, 0xdc95a1c3461bbed2ULL, 0xa3fb510b762e37abULL, + 0x35d6b6af5e9b8b5bULL, 0x4ab846676eae0222ULL, 0xcb0b573f3ef099a9ULL, 0xb465a7f70ec510d0ULL, + 0xfcb453dcc6da3dd4ULL, 0x83daa314f6efb4adULL, 0x0269b24ca6b12f26ULL, 0x7d0742849684a65fULL, + 0x93ca5a1b368f752eULL, 0xeca4aad306bafc57ULL, 0x6d17bb8b56e467dcULL, 0x12794b4366d1eea5ULL, + 0x5aa8bf68aecec3a1ULL, 0x25c64fa09efb4ad8ULL, 0xa4755ef8cea5d153ULL, 0xdb1bae30fe90582aULL, + 0xbcf7b7e3c7593bd8ULL, 0xc399472bf76cb2a1ULL, 0x422a5673a732292aULL, 0x3d44a6bb9707a053ULL, + 0x759552905f188d57ULL, 0x0afba2586f2d042eULL, 0x8b48b3003f739fa5ULL, 0xf42643c80f4616dcULL, + 0x1aeb5b57af4dc5adULL, 0x6585ab9f9f784cd4ULL, 0xe436bac7cf26d75fULL, 0x9b584a0fff135e26ULL, + 0xd389be24370c7322ULL, 0xace74eec0739fa5bULL, 0x2d545fb4576761d0ULL, 0x523aaf7c6752e8a9ULL, + 0xc41748d84fe75459ULL, 0xbb79b8107fd2dd20ULL, 0x3acaa9482f8c46abULL, 0x45a459801fb9cfd2ULL, + 0x0d75adabd7a6e2d6ULL, 0x721b5d63e7936bafULL, 0xf3a84c3bb7cdf024ULL, 0x8cc6bcf387f8795dULL, + 0x620ba46c27f3aa2cULL, 0x1d6554a417c62355ULL, 0x9cd645fc4798b8deULL, 0xe3b8b53477ad31a7ULL, + 0xab69411fbfb21ca3ULL, 0xd407b1d78f8795daULL, 0x55b4a08fdfd90e51ULL, 0x2ada5047efec8728ULL }; static const uint64_t crc64_rocksoft_norm_table[256] = { - 0x0000000000000000ULL, 0xad93d23594c93659ULL, - 0xf6b4765ebd5b5aebULL, 0x5b27a46b29926cb2ULL, - 0x40fb3e88ee7f838fULL, 0xed68ecbd7ab6b5d6ULL, - 0xb64f48d65324d964ULL, 0x1bdc9ae3c7edef3dULL, - 0x81f67d11dcff071eULL, 0x2c65af2448363147ULL, - 0x77420b4f61a45df5ULL, 0xdad1d97af56d6bacULL, - 0xc10d439932808491ULL, 0x6c9e91aca649b2c8ULL, - 0x37b935c78fdbde7aULL, 0x9a2ae7f21b12e823ULL, - 0xae7f28162d373865ULL, 0x03ecfa23b9fe0e3cULL, - 0x58cb5e48906c628eULL, 0xf5588c7d04a554d7ULL, - 0xee84169ec348bbeaULL, 0x4317c4ab57818db3ULL, - 0x183060c07e13e101ULL, 0xb5a3b2f5eadad758ULL, - 0x2f895507f1c83f7bULL, 0x821a873265010922ULL, - 0xd93d23594c936590ULL, 0x74aef16cd85a53c9ULL, - 0x6f726b8f1fb7bcf4ULL, 0xc2e1b9ba8b7e8aadULL, - 0x99c61dd1a2ece61fULL, 0x3455cfe43625d046ULL, - 0xf16d8219cea74693ULL, 0x5cfe502c5a6e70caULL, - 0x07d9f44773fc1c78ULL, 0xaa4a2672e7352a21ULL, - 0xb196bc9120d8c51cULL, 0x1c056ea4b411f345ULL, - 0x4722cacf9d839ff7ULL, 0xeab118fa094aa9aeULL, - 0x709bff081258418dULL, 0xdd082d3d869177d4ULL, - 0x862f8956af031b66ULL, 0x2bbc5b633bca2d3fULL, - 0x3060c180fc27c202ULL, 0x9df313b568eef45bULL, - 0xc6d4b7de417c98e9ULL, 0x6b4765ebd5b5aeb0ULL, - 0x5f12aa0fe3907ef6ULL, 0xf281783a775948afULL, - 0xa9a6dc515ecb241dULL, 0x04350e64ca021244ULL, - 0x1fe994870deffd79ULL, 0xb27a46b29926cb20ULL, - 0xe95de2d9b0b4a792ULL, 0x44ce30ec247d91cbULL, - 0xdee4d71e3f6f79e8ULL, 0x7377052baba64fb1ULL, - 0x2850a14082342303ULL, 0x85c3737516fd155aULL, - 0x9e1fe996d110fa67ULL, 0x338c3ba345d9cc3eULL, - 0x68ab9fc86c4ba08cULL, 0xc5384dfdf88296d5ULL, - 0x4f48d6060987bb7fULL, 0xe2db04339d4e8d26ULL, - 0xb9fca058b4dce194ULL, 0x146f726d2015d7cdULL, - 0x0fb3e88ee7f838f0ULL, 0xa2203abb73310ea9ULL, - 0xf9079ed05aa3621bULL, 0x54944ce5ce6a5442ULL, - 0xcebeab17d578bc61ULL, 0x632d792241b18a38ULL, - 0x380add496823e68aULL, 0x95990f7cfcead0d3ULL, - 0x8e45959f3b073feeULL, 0x23d647aaafce09b7ULL, - 0x78f1e3c1865c6505ULL, 0xd56231f41295535cULL, - 0xe137fe1024b0831aULL, 0x4ca42c25b079b543ULL, - 0x1783884e99ebd9f1ULL, 0xba105a7b0d22efa8ULL, - 0xa1ccc098cacf0095ULL, 0x0c5f12ad5e0636ccULL, - 0x5778b6c677945a7eULL, 0xfaeb64f3e35d6c27ULL, - 0x60c18301f84f8404ULL, 0xcd5251346c86b25dULL, - 0x9675f55f4514deefULL, 0x3be6276ad1dde8b6ULL, - 0x203abd891630078bULL, 0x8da96fbc82f931d2ULL, - 0xd68ecbd7ab6b5d60ULL, 0x7b1d19e23fa26b39ULL, - 0xbe25541fc720fdecULL, 0x13b6862a53e9cbb5ULL, - 0x489122417a7ba707ULL, 0xe502f074eeb2915eULL, - 0xfede6a97295f7e63ULL, 0x534db8a2bd96483aULL, - 0x086a1cc994042488ULL, 0xa5f9cefc00cd12d1ULL, - 0x3fd3290e1bdffaf2ULL, 0x9240fb3b8f16ccabULL, - 0xc9675f50a684a019ULL, 0x64f48d65324d9640ULL, - 0x7f281786f5a0797dULL, 0xd2bbc5b361694f24ULL, - 0x899c61d848fb2396ULL, 0x240fb3eddc3215cfULL, - 0x105a7c09ea17c589ULL, 0xbdc9ae3c7edef3d0ULL, - 0xe6ee0a57574c9f62ULL, 0x4b7dd862c385a93bULL, - 0x50a1428104684606ULL, 0xfd3290b490a1705fULL, - 0xa61534dfb9331cedULL, 0x0b86e6ea2dfa2ab4ULL, - 0x91ac011836e8c297ULL, 0x3c3fd32da221f4ceULL, - 0x671877468bb3987cULL, 0xca8ba5731f7aae25ULL, - 0xd1573f90d8974118ULL, 0x7cc4eda54c5e7741ULL, - 0x27e349ce65cc1bf3ULL, 0x8a709bfbf1052daaULL, - 0x9e91ac0c130f76feULL, 0x33027e3987c640a7ULL, - 0x6825da52ae542c15ULL, 0xc5b608673a9d1a4cULL, - 0xde6a9284fd70f571ULL, 0x73f940b169b9c328ULL, - 0x28dee4da402baf9aULL, 0x854d36efd4e299c3ULL, - 0x1f67d11dcff071e0ULL, 0xb2f403285b3947b9ULL, - 0xe9d3a74372ab2b0bULL, 0x44407576e6621d52ULL, - 0x5f9cef95218ff26fULL, 0xf20f3da0b546c436ULL, - 0xa92899cb9cd4a884ULL, 0x04bb4bfe081d9eddULL, - 0x30ee841a3e384e9bULL, 0x9d7d562faaf178c2ULL, - 0xc65af24483631470ULL, 0x6bc9207117aa2229ULL, - 0x7015ba92d047cd14ULL, 0xdd8668a7448efb4dULL, - 0x86a1cccc6d1c97ffULL, 0x2b321ef9f9d5a1a6ULL, - 0xb118f90be2c74985ULL, 0x1c8b2b3e760e7fdcULL, - 0x47ac8f555f9c136eULL, 0xea3f5d60cb552537ULL, - 0xf1e3c7830cb8ca0aULL, 0x5c7015b69871fc53ULL, - 0x0757b1ddb1e390e1ULL, 0xaac463e8252aa6b8ULL, - 0x6ffc2e15dda8306dULL, 0xc26ffc2049610634ULL, - 0x9948584b60f36a86ULL, 0x34db8a7ef43a5cdfULL, - 0x2f07109d33d7b3e2ULL, 0x8294c2a8a71e85bbULL, - 0xd9b366c38e8ce909ULL, 0x7420b4f61a45df50ULL, - 0xee0a530401573773ULL, 0x43998131959e012aULL, - 0x18be255abc0c6d98ULL, 0xb52df76f28c55bc1ULL, - 0xaef16d8cef28b4fcULL, 0x0362bfb97be182a5ULL, - 0x58451bd25273ee17ULL, 0xf5d6c9e7c6bad84eULL, - 0xc1830603f09f0808ULL, 0x6c10d43664563e51ULL, - 0x3737705d4dc452e3ULL, 0x9aa4a268d90d64baULL, - 0x8178388b1ee08b87ULL, 0x2cebeabe8a29bddeULL, - 0x77cc4ed5a3bbd16cULL, 0xda5f9ce03772e735ULL, - 0x40757b122c600f16ULL, 0xede6a927b8a9394fULL, - 0xb6c10d4c913b55fdULL, 0x1b52df7905f263a4ULL, - 0x008e459ac21f8c99ULL, 0xad1d97af56d6bac0ULL, - 0xf63a33c47f44d672ULL, 0x5ba9e1f1eb8de02bULL, - 0xd1d97a0a1a88cd81ULL, 0x7c4aa83f8e41fbd8ULL, - 0x276d0c54a7d3976aULL, 0x8afede61331aa133ULL, - 0x91224482f4f74e0eULL, 0x3cb196b7603e7857ULL, - 0x679632dc49ac14e5ULL, 0xca05e0e9dd6522bcULL, - 0x502f071bc677ca9fULL, 0xfdbcd52e52befcc6ULL, - 0xa69b71457b2c9074ULL, 0x0b08a370efe5a62dULL, - 0x10d4399328084910ULL, 0xbd47eba6bcc17f49ULL, - 0xe6604fcd955313fbULL, 0x4bf39df8019a25a2ULL, - 0x7fa6521c37bff5e4ULL, 0xd2358029a376c3bdULL, - 0x891224428ae4af0fULL, 0x2481f6771e2d9956ULL, - 0x3f5d6c94d9c0766bULL, 0x92cebea14d094032ULL, - 0xc9e91aca649b2c80ULL, 0x647ac8fff0521ad9ULL, - 0xfe502f0deb40f2faULL, 0x53c3fd387f89c4a3ULL, - 0x08e45953561ba811ULL, 0xa5778b66c2d29e48ULL, - 0xbeab1185053f7175ULL, 0x1338c3b091f6472cULL, - 0x481f67dbb8642b9eULL, 0xe58cb5ee2cad1dc7ULL, - 0x20b4f813d42f8b12ULL, 0x8d272a2640e6bd4bULL, - 0xd6008e4d6974d1f9ULL, 0x7b935c78fdbde7a0ULL, - 0x604fc69b3a50089dULL, 0xcddc14aeae993ec4ULL, - 0x96fbb0c5870b5276ULL, 0x3b6862f013c2642fULL, - 0xa142850208d08c0cULL, 0x0cd157379c19ba55ULL, - 0x57f6f35cb58bd6e7ULL, 0xfa6521692142e0beULL, - 0xe1b9bb8ae6af0f83ULL, 0x4c2a69bf726639daULL, - 0x170dcdd45bf45568ULL, 0xba9e1fe1cf3d6331ULL, - 0x8ecbd005f918b377ULL, 0x235802306dd1852eULL, - 0x787fa65b4443e99cULL, 0xd5ec746ed08adfc5ULL, - 0xce30ee8d176730f8ULL, 0x63a33cb883ae06a1ULL, - 0x388498d3aa3c6a13ULL, 0x95174ae63ef55c4aULL, - 0x0f3dad1425e7b469ULL, 0xa2ae7f21b12e8230ULL, - 0xf989db4a98bcee82ULL, 0x541a097f0c75d8dbULL, - 0x4fc6939ccb9837e6ULL, 0xe25541a95f5101bfULL, - 0xb972e5c276c36d0dULL, 0x14e137f7e20a5b54ULL + 0x0000000000000000ULL, 0xad93d23594c93659ULL, 0xf6b4765ebd5b5aebULL, 0x5b27a46b29926cb2ULL, + 0x40fb3e88ee7f838fULL, 0xed68ecbd7ab6b5d6ULL, 0xb64f48d65324d964ULL, 0x1bdc9ae3c7edef3dULL, + 0x81f67d11dcff071eULL, 0x2c65af2448363147ULL, 0x77420b4f61a45df5ULL, 0xdad1d97af56d6bacULL, + 0xc10d439932808491ULL, 0x6c9e91aca649b2c8ULL, 0x37b935c78fdbde7aULL, 0x9a2ae7f21b12e823ULL, + 0xae7f28162d373865ULL, 0x03ecfa23b9fe0e3cULL, 0x58cb5e48906c628eULL, 0xf5588c7d04a554d7ULL, + 0xee84169ec348bbeaULL, 0x4317c4ab57818db3ULL, 0x183060c07e13e101ULL, 0xb5a3b2f5eadad758ULL, + 0x2f895507f1c83f7bULL, 0x821a873265010922ULL, 0xd93d23594c936590ULL, 0x74aef16cd85a53c9ULL, + 0x6f726b8f1fb7bcf4ULL, 0xc2e1b9ba8b7e8aadULL, 0x99c61dd1a2ece61fULL, 0x3455cfe43625d046ULL, + 0xf16d8219cea74693ULL, 0x5cfe502c5a6e70caULL, 0x07d9f44773fc1c78ULL, 0xaa4a2672e7352a21ULL, + 0xb196bc9120d8c51cULL, 0x1c056ea4b411f345ULL, 0x4722cacf9d839ff7ULL, 0xeab118fa094aa9aeULL, + 0x709bff081258418dULL, 0xdd082d3d869177d4ULL, 0x862f8956af031b66ULL, 0x2bbc5b633bca2d3fULL, + 0x3060c180fc27c202ULL, 0x9df313b568eef45bULL, 0xc6d4b7de417c98e9ULL, 0x6b4765ebd5b5aeb0ULL, + 0x5f12aa0fe3907ef6ULL, 0xf281783a775948afULL, 0xa9a6dc515ecb241dULL, 0x04350e64ca021244ULL, + 0x1fe994870deffd79ULL, 0xb27a46b29926cb20ULL, 0xe95de2d9b0b4a792ULL, 0x44ce30ec247d91cbULL, + 0xdee4d71e3f6f79e8ULL, 0x7377052baba64fb1ULL, 0x2850a14082342303ULL, 0x85c3737516fd155aULL, + 0x9e1fe996d110fa67ULL, 0x338c3ba345d9cc3eULL, 0x68ab9fc86c4ba08cULL, 0xc5384dfdf88296d5ULL, + 0x4f48d6060987bb7fULL, 0xe2db04339d4e8d26ULL, 0xb9fca058b4dce194ULL, 0x146f726d2015d7cdULL, + 0x0fb3e88ee7f838f0ULL, 0xa2203abb73310ea9ULL, 0xf9079ed05aa3621bULL, 0x54944ce5ce6a5442ULL, + 0xcebeab17d578bc61ULL, 0x632d792241b18a38ULL, 0x380add496823e68aULL, 0x95990f7cfcead0d3ULL, + 0x8e45959f3b073feeULL, 0x23d647aaafce09b7ULL, 0x78f1e3c1865c6505ULL, 0xd56231f41295535cULL, + 0xe137fe1024b0831aULL, 0x4ca42c25b079b543ULL, 0x1783884e99ebd9f1ULL, 0xba105a7b0d22efa8ULL, + 0xa1ccc098cacf0095ULL, 0x0c5f12ad5e0636ccULL, 0x5778b6c677945a7eULL, 0xfaeb64f3e35d6c27ULL, + 0x60c18301f84f8404ULL, 0xcd5251346c86b25dULL, 0x9675f55f4514deefULL, 0x3be6276ad1dde8b6ULL, + 0x203abd891630078bULL, 0x8da96fbc82f931d2ULL, 0xd68ecbd7ab6b5d60ULL, 0x7b1d19e23fa26b39ULL, + 0xbe25541fc720fdecULL, 0x13b6862a53e9cbb5ULL, 0x489122417a7ba707ULL, 0xe502f074eeb2915eULL, + 0xfede6a97295f7e63ULL, 0x534db8a2bd96483aULL, 0x086a1cc994042488ULL, 0xa5f9cefc00cd12d1ULL, + 0x3fd3290e1bdffaf2ULL, 0x9240fb3b8f16ccabULL, 0xc9675f50a684a019ULL, 0x64f48d65324d9640ULL, + 0x7f281786f5a0797dULL, 0xd2bbc5b361694f24ULL, 0x899c61d848fb2396ULL, 0x240fb3eddc3215cfULL, + 0x105a7c09ea17c589ULL, 0xbdc9ae3c7edef3d0ULL, 0xe6ee0a57574c9f62ULL, 0x4b7dd862c385a93bULL, + 0x50a1428104684606ULL, 0xfd3290b490a1705fULL, 0xa61534dfb9331cedULL, 0x0b86e6ea2dfa2ab4ULL, + 0x91ac011836e8c297ULL, 0x3c3fd32da221f4ceULL, 0x671877468bb3987cULL, 0xca8ba5731f7aae25ULL, + 0xd1573f90d8974118ULL, 0x7cc4eda54c5e7741ULL, 0x27e349ce65cc1bf3ULL, 0x8a709bfbf1052daaULL, + 0x9e91ac0c130f76feULL, 0x33027e3987c640a7ULL, 0x6825da52ae542c15ULL, 0xc5b608673a9d1a4cULL, + 0xde6a9284fd70f571ULL, 0x73f940b169b9c328ULL, 0x28dee4da402baf9aULL, 0x854d36efd4e299c3ULL, + 0x1f67d11dcff071e0ULL, 0xb2f403285b3947b9ULL, 0xe9d3a74372ab2b0bULL, 0x44407576e6621d52ULL, + 0x5f9cef95218ff26fULL, 0xf20f3da0b546c436ULL, 0xa92899cb9cd4a884ULL, 0x04bb4bfe081d9eddULL, + 0x30ee841a3e384e9bULL, 0x9d7d562faaf178c2ULL, 0xc65af24483631470ULL, 0x6bc9207117aa2229ULL, + 0x7015ba92d047cd14ULL, 0xdd8668a7448efb4dULL, 0x86a1cccc6d1c97ffULL, 0x2b321ef9f9d5a1a6ULL, + 0xb118f90be2c74985ULL, 0x1c8b2b3e760e7fdcULL, 0x47ac8f555f9c136eULL, 0xea3f5d60cb552537ULL, + 0xf1e3c7830cb8ca0aULL, 0x5c7015b69871fc53ULL, 0x0757b1ddb1e390e1ULL, 0xaac463e8252aa6b8ULL, + 0x6ffc2e15dda8306dULL, 0xc26ffc2049610634ULL, 0x9948584b60f36a86ULL, 0x34db8a7ef43a5cdfULL, + 0x2f07109d33d7b3e2ULL, 0x8294c2a8a71e85bbULL, 0xd9b366c38e8ce909ULL, 0x7420b4f61a45df50ULL, + 0xee0a530401573773ULL, 0x43998131959e012aULL, 0x18be255abc0c6d98ULL, 0xb52df76f28c55bc1ULL, + 0xaef16d8cef28b4fcULL, 0x0362bfb97be182a5ULL, 0x58451bd25273ee17ULL, 0xf5d6c9e7c6bad84eULL, + 0xc1830603f09f0808ULL, 0x6c10d43664563e51ULL, 0x3737705d4dc452e3ULL, 0x9aa4a268d90d64baULL, + 0x8178388b1ee08b87ULL, 0x2cebeabe8a29bddeULL, 0x77cc4ed5a3bbd16cULL, 0xda5f9ce03772e735ULL, + 0x40757b122c600f16ULL, 0xede6a927b8a9394fULL, 0xb6c10d4c913b55fdULL, 0x1b52df7905f263a4ULL, + 0x008e459ac21f8c99ULL, 0xad1d97af56d6bac0ULL, 0xf63a33c47f44d672ULL, 0x5ba9e1f1eb8de02bULL, + 0xd1d97a0a1a88cd81ULL, 0x7c4aa83f8e41fbd8ULL, 0x276d0c54a7d3976aULL, 0x8afede61331aa133ULL, + 0x91224482f4f74e0eULL, 0x3cb196b7603e7857ULL, 0x679632dc49ac14e5ULL, 0xca05e0e9dd6522bcULL, + 0x502f071bc677ca9fULL, 0xfdbcd52e52befcc6ULL, 0xa69b71457b2c9074ULL, 0x0b08a370efe5a62dULL, + 0x10d4399328084910ULL, 0xbd47eba6bcc17f49ULL, 0xe6604fcd955313fbULL, 0x4bf39df8019a25a2ULL, + 0x7fa6521c37bff5e4ULL, 0xd2358029a376c3bdULL, 0x891224428ae4af0fULL, 0x2481f6771e2d9956ULL, + 0x3f5d6c94d9c0766bULL, 0x92cebea14d094032ULL, 0xc9e91aca649b2c80ULL, 0x647ac8fff0521ad9ULL, + 0xfe502f0deb40f2faULL, 0x53c3fd387f89c4a3ULL, 0x08e45953561ba811ULL, 0xa5778b66c2d29e48ULL, + 0xbeab1185053f7175ULL, 0x1338c3b091f6472cULL, 0x481f67dbb8642b9eULL, 0xe58cb5ee2cad1dc7ULL, + 0x20b4f813d42f8b12ULL, 0x8d272a2640e6bd4bULL, 0xd6008e4d6974d1f9ULL, 0x7b935c78fdbde7a0ULL, + 0x604fc69b3a50089dULL, 0xcddc14aeae993ec4ULL, 0x96fbb0c5870b5276ULL, 0x3b6862f013c2642fULL, + 0xa142850208d08c0cULL, 0x0cd157379c19ba55ULL, 0x57f6f35cb58bd6e7ULL, 0xfa6521692142e0beULL, + 0xe1b9bb8ae6af0f83ULL, 0x4c2a69bf726639daULL, 0x170dcdd45bf45568ULL, 0xba9e1fe1cf3d6331ULL, + 0x8ecbd005f918b377ULL, 0x235802306dd1852eULL, 0x787fa65b4443e99cULL, 0xd5ec746ed08adfc5ULL, + 0xce30ee8d176730f8ULL, 0x63a33cb883ae06a1ULL, 0x388498d3aa3c6a13ULL, 0x95174ae63ef55c4aULL, + 0x0f3dad1425e7b469ULL, 0xa2ae7f21b12e8230ULL, 0xf989db4a98bcee82ULL, 0x541a097f0c75d8dbULL, + 0x4fc6939ccb9837e6ULL, 0xe25541a95f5101bfULL, 0xb972e5c276c36d0dULL, 0x14e137f7e20a5b54ULL }; -uint64_t crc64_ecma_refl_base(uint64_t seed, const uint8_t * buf, uint64_t len) +uint64_t +crc64_ecma_refl_base(uint64_t seed, const uint8_t *buf, uint64_t len) { - uint64_t i, crc = ~seed; + uint64_t i, crc = ~seed; - for (i = 0; i < len; i++) { - uint8_t byte = buf[i]; - crc = crc64_ecma_refl_table[(uint8_t) crc ^ byte] ^ (crc >> 8); - } + for (i = 0; i < len; i++) { + uint8_t byte = buf[i]; + crc = crc64_ecma_refl_table[(uint8_t) crc ^ byte] ^ (crc >> 8); + } - return ~crc; + return ~crc; } -uint64_t crc64_ecma_norm_base(uint64_t seed, const uint8_t * buf, uint64_t len) +uint64_t +crc64_ecma_norm_base(uint64_t seed, const uint8_t *buf, uint64_t len) { - uint64_t i, crc = ~seed; + uint64_t i, crc = ~seed; - for (i = 0; i < len; i++) { - uint8_t byte = buf[i]; - crc = crc64_ecma_norm_table[((crc >> 56) ^ byte) & 0xff] ^ (crc << 8); - } + for (i = 0; i < len; i++) { + uint8_t byte = buf[i]; + crc = crc64_ecma_norm_table[((crc >> 56) ^ byte) & 0xff] ^ (crc << 8); + } - return ~crc; + return ~crc; } -uint64_t crc64_iso_refl_base(uint64_t seed, const uint8_t * buf, uint64_t len) +uint64_t +crc64_iso_refl_base(uint64_t seed, const uint8_t *buf, uint64_t len) { - uint64_t i, crc = ~seed; + uint64_t i, crc = ~seed; - for (i = 0; i < len; i++) { - uint8_t byte = buf[i]; - crc = crc64_iso_refl_table[(uint8_t) crc ^ byte] ^ (crc >> 8); - } + for (i = 0; i < len; i++) { + uint8_t byte = buf[i]; + crc = crc64_iso_refl_table[(uint8_t) crc ^ byte] ^ (crc >> 8); + } - return ~crc; + return ~crc; } -uint64_t crc64_iso_norm_base(uint64_t seed, const uint8_t * buf, uint64_t len) +uint64_t +crc64_iso_norm_base(uint64_t seed, const uint8_t *buf, uint64_t len) { - uint64_t i, crc = ~seed; + uint64_t i, crc = ~seed; - for (i = 0; i < len; i++) { - uint8_t byte = buf[i]; - crc = crc64_iso_norm_table[((crc >> 56) ^ byte) & 0xff] ^ (crc << 8); - } + for (i = 0; i < len; i++) { + uint8_t byte = buf[i]; + crc = crc64_iso_norm_table[((crc >> 56) ^ byte) & 0xff] ^ (crc << 8); + } - return ~crc; + return ~crc; } -uint64_t crc64_jones_refl_base(uint64_t seed, const uint8_t * buf, uint64_t len) +uint64_t +crc64_jones_refl_base(uint64_t seed, const uint8_t *buf, uint64_t len) { - uint64_t i, crc = ~seed; + uint64_t i, crc = ~seed; - for (i = 0; i < len; i++) { - uint8_t byte = buf[i]; - crc = crc64_jones_refl_table[(uint8_t) crc ^ byte] ^ (crc >> 8); - } + for (i = 0; i < len; i++) { + uint8_t byte = buf[i]; + crc = crc64_jones_refl_table[(uint8_t) crc ^ byte] ^ (crc >> 8); + } - return ~crc; + return ~crc; } -uint64_t crc64_jones_norm_base(uint64_t seed, const uint8_t * buf, uint64_t len) +uint64_t +crc64_jones_norm_base(uint64_t seed, const uint8_t *buf, uint64_t len) { - uint64_t i, crc = ~seed; + uint64_t i, crc = ~seed; - for (i = 0; i < len; i++) { - uint8_t byte = buf[i]; - crc = crc64_jones_norm_table[((crc >> 56) ^ byte) & 0xff] ^ (crc << 8); - } + for (i = 0; i < len; i++) { + uint8_t byte = buf[i]; + crc = crc64_jones_norm_table[((crc >> 56) ^ byte) & 0xff] ^ (crc << 8); + } - return ~crc; + return ~crc; } -uint64_t crc64_rocksoft_refl_base(uint64_t seed, const uint8_t * buf, uint64_t len) +uint64_t +crc64_rocksoft_refl_base(uint64_t seed, const uint8_t *buf, uint64_t len) { - uint64_t i, crc = ~seed; + uint64_t i, crc = ~seed; - for (i = 0; i < len; i++) { - uint8_t byte = buf[i]; - crc = crc64_rocksoft_refl_table[(uint8_t) crc ^ byte] ^ (crc >> 8); - } + for (i = 0; i < len; i++) { + uint8_t byte = buf[i]; + crc = crc64_rocksoft_refl_table[(uint8_t) crc ^ byte] ^ (crc >> 8); + } - return ~crc; + return ~crc; } -uint64_t crc64_rocksoft_norm_base(uint64_t seed, const uint8_t * buf, uint64_t len) +uint64_t +crc64_rocksoft_norm_base(uint64_t seed, const uint8_t *buf, uint64_t len) { - uint64_t i, crc = ~seed; + uint64_t i, crc = ~seed; - for (i = 0; i < len; i++) { - uint8_t byte = buf[i]; - crc = crc64_rocksoft_norm_table[((crc >> 56) ^ byte) & 0xff] ^ (crc << 8); - } + for (i = 0; i < len; i++) { + uint8_t byte = buf[i]; + crc = crc64_rocksoft_norm_table[((crc >> 56) ^ byte) & 0xff] ^ (crc << 8); + } - return ~crc; + return ~crc; } diff --git a/crc/crc64_example.c b/crc/crc64_example.c index 832d04c9..cc2b5305 100644 --- a/crc/crc64_example.c +++ b/crc/crc64_example.c @@ -32,39 +32,40 @@ #include #include "crc64.h" -#define BUF_SIZE 8192 +#define BUF_SIZE 8192 #define INIT_SEED 0x12345678 -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - uint8_t inbuf[BUF_SIZE]; - uint64_t avail_in, total_in = 0; - uint64_t crc64_checksum; - FILE *in; + uint8_t inbuf[BUF_SIZE]; + uint64_t avail_in, total_in = 0; + uint64_t crc64_checksum; + FILE *in; - if (argc != 2) { - fprintf(stderr, "Usage: crc64_example infile\n"); - exit(0); - } - in = fopen(argv[1], "rb"); - if (!in) { - fprintf(stderr, "Can't open %s for reading\n", argv[1]); - exit(0); - } + if (argc != 2) { + fprintf(stderr, "Usage: crc64_example infile\n"); + exit(0); + } + in = fopen(argv[1], "rb"); + if (!in) { + fprintf(stderr, "Can't open %s for reading\n", argv[1]); + exit(0); + } - printf("crc64_example -- crc64_ecma_refl:\n"); - fflush(0); + printf("crc64_example -- crc64_ecma_refl:\n"); + fflush(0); - crc64_checksum = INIT_SEED; - while ((avail_in = fread(inbuf, 1, BUF_SIZE, in))) { - // crc update mode - crc64_checksum = crc64_ecma_refl(crc64_checksum, inbuf, avail_in); - total_in += avail_in; - } + crc64_checksum = INIT_SEED; + while ((avail_in = fread(inbuf, 1, BUF_SIZE, in))) { + // crc update mode + crc64_checksum = crc64_ecma_refl(crc64_checksum, inbuf, avail_in); + total_in += avail_in; + } - fclose(in); - printf("total length is %" PRIu64 ", checksum is 0x%" PRIx64 "\n", total_in, - crc64_checksum); + fclose(in); + printf("total length is %" PRIu64 ", checksum is 0x%" PRIx64 "\n", total_in, + crc64_checksum); - return 0; + return 0; } diff --git a/crc/crc64_funcs_perf.c b/crc/crc64_funcs_perf.c index 78f2d414..91c8f7cf 100644 --- a/crc/crc64_funcs_perf.c +++ b/crc/crc64_funcs_perf.c @@ -37,72 +37,73 @@ #include "test.h" #ifndef GT_L3_CACHE -# define GT_L3_CACHE 32*1024*1024 /* some number > last level cache */ +#define GT_L3_CACHE 32 * 1024 * 1024 /* some number > last level cache */ #endif #if !defined(COLD_TEST) && !defined(TEST_CUSTOM) // Cached test, loop many times over small dataset -# define TEST_LEN 8*1024 -# define TEST_TYPE_STR "_warm" -#elif defined (COLD_TEST) +#define TEST_LEN 8 * 1024 +#define TEST_TYPE_STR "_warm" +#elif defined(COLD_TEST) // Uncached test. Pull from large mem base. -# define TEST_LEN (2 * GT_L3_CACHE) -# define TEST_TYPE_STR "_cold" +#define TEST_LEN (2 * GT_L3_CACHE) +#define TEST_TYPE_STR "_cold" #endif #ifndef TEST_SEED -# define TEST_SEED 0x1234 +#define TEST_SEED 0x1234 #endif #define TEST_MEM TEST_LEN -typedef uint64_t(*crc64_func_t) (uint64_t, const uint8_t *, uint64_t); +typedef uint64_t (*crc64_func_t)(uint64_t, const uint8_t *, uint64_t); typedef struct func_case { - char *note; - crc64_func_t crc64_func_call; - crc64_func_t crc64_ref_call; + char *note; + crc64_func_t crc64_func_call; + crc64_func_t crc64_ref_call; } func_case_t; func_case_t test_funcs[] = { - {"crc64_ecma_norm", crc64_ecma_norm, crc64_ecma_norm_base}, - {"crc64_ecma_refl", crc64_ecma_refl, crc64_ecma_refl_base}, - {"crc64_iso_norm", crc64_iso_norm, crc64_iso_norm_base}, - {"crc64_iso_refl", crc64_iso_refl, crc64_iso_refl_base}, - {"crc64_jones_norm", crc64_jones_norm, crc64_jones_norm_base}, - {"crc64_jones_refl", crc64_jones_refl, crc64_jones_refl_base}, - {"crc64_rocksoft_norm", crc64_rocksoft_norm, crc64_rocksoft_norm_base}, - {"crc64_rocksoft_refl", crc64_rocksoft_refl, crc64_rocksoft_refl_base} + { "crc64_ecma_norm", crc64_ecma_norm, crc64_ecma_norm_base }, + { "crc64_ecma_refl", crc64_ecma_refl, crc64_ecma_refl_base }, + { "crc64_iso_norm", crc64_iso_norm, crc64_iso_norm_base }, + { "crc64_iso_refl", crc64_iso_refl, crc64_iso_refl_base }, + { "crc64_jones_norm", crc64_jones_norm, crc64_jones_norm_base }, + { "crc64_jones_refl", crc64_jones_refl, crc64_jones_refl_base }, + { "crc64_rocksoft_norm", crc64_rocksoft_norm, crc64_rocksoft_norm_base }, + { "crc64_rocksoft_refl", crc64_rocksoft_refl, crc64_rocksoft_refl_base } }; -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - int j; - void *buf; - uint64_t crc; - struct perf start; - func_case_t *test_func; - - if (posix_memalign(&buf, 1024, TEST_LEN)) { - printf("alloc error: Fail"); - return -1; - } - memset(buf, (char)TEST_SEED, TEST_LEN); - - for (j = 0; j < sizeof(test_funcs) / sizeof(test_funcs[0]); j++) { - test_func = &test_funcs[j]; - printf("%s_perf:\n", test_func->note); - - printf("Start timed tests\n"); - fflush(0); - - BENCHMARK(&start, BENCHMARK_TIME, crc = - test_func->crc64_func_call(TEST_SEED, buf, TEST_LEN)); - printf("%s" TEST_TYPE_STR ": ", test_func->note); - perf_print(start, (long long)TEST_LEN); - - printf("finish 0x%" PRIx64 "\n", crc); - } - - return 0; + int j; + void *buf; + uint64_t crc; + struct perf start; + func_case_t *test_func; + + if (posix_memalign(&buf, 1024, TEST_LEN)) { + printf("alloc error: Fail"); + return -1; + } + memset(buf, (char) TEST_SEED, TEST_LEN); + + for (j = 0; j < sizeof(test_funcs) / sizeof(test_funcs[0]); j++) { + test_func = &test_funcs[j]; + printf("%s_perf:\n", test_func->note); + + printf("Start timed tests\n"); + fflush(0); + + BENCHMARK(&start, BENCHMARK_TIME, + crc = test_func->crc64_func_call(TEST_SEED, buf, TEST_LEN)); + printf("%s" TEST_TYPE_STR ": ", test_func->note); + perf_print(start, (long long) TEST_LEN); + + printf("finish 0x%" PRIx64 "\n", crc); + } + + return 0; } diff --git a/crc/crc64_funcs_test.c b/crc/crc64_funcs_test.c index ee1e6955..cd75613f 100644 --- a/crc/crc64_funcs_test.c +++ b/crc/crc64_funcs_test.c @@ -38,302 +38,314 @@ #include "test.h" #ifndef TEST_SEED -# define TEST_SEED 0x1234 +#define TEST_SEED 0x1234 #endif #define MAX_BUF 4096 -#define TEST_SIZE 32 +#define TEST_SIZE 32 typedef uint64_t u64; typedef uint32_t u32; typedef uint16_t u16; typedef uint8_t u8; -typedef uint64_t(*crc64_func_t) (uint64_t, const uint8_t *, uint64_t); +typedef uint64_t (*crc64_func_t)(uint64_t, const uint8_t *, uint64_t); typedef struct func_case { - char *note; - crc64_func_t crc64_func_call; - crc64_func_t crc64_base_call; - crc64_func_t crc64_ref_call; + char *note; + crc64_func_t crc64_func_call; + crc64_func_t crc64_base_call; + crc64_func_t crc64_ref_call; } func_case_t; func_case_t test_funcs[] = { - {"crc64_ecma_norm", crc64_ecma_norm, crc64_ecma_norm_base, crc64_ecma_norm_ref}, - {"crc64_ecma_refl", crc64_ecma_refl, crc64_ecma_refl_base, crc64_ecma_refl_ref}, - {"crc64_iso_norm", crc64_iso_norm, crc64_iso_norm_base, crc64_iso_norm_ref}, - {"crc64_iso_refl", crc64_iso_refl, crc64_iso_refl_base, crc64_iso_refl_ref}, - {"crc64_jones_norm", crc64_jones_norm, crc64_jones_norm_base, - crc64_jones_norm_ref}, - {"crc64_jones_refl", crc64_jones_refl, crc64_jones_refl_base, crc64_jones_refl_ref}, - {"crc64_rocksoft_norm", crc64_rocksoft_norm, crc64_rocksoft_norm_base, - crc64_rocksoft_norm_ref}, - {"crc64_rocksoft_refl", crc64_rocksoft_refl, crc64_rocksoft_refl_base, - crc64_rocksoft_refl_ref} + { "crc64_ecma_norm", crc64_ecma_norm, crc64_ecma_norm_base, crc64_ecma_norm_ref }, + { "crc64_ecma_refl", crc64_ecma_refl, crc64_ecma_refl_base, crc64_ecma_refl_ref }, + { "crc64_iso_norm", crc64_iso_norm, crc64_iso_norm_base, crc64_iso_norm_ref }, + { "crc64_iso_refl", crc64_iso_refl, crc64_iso_refl_base, crc64_iso_refl_ref }, + { "crc64_jones_norm", crc64_jones_norm, crc64_jones_norm_base, crc64_jones_norm_ref }, + { "crc64_jones_refl", crc64_jones_refl, crc64_jones_refl_base, crc64_jones_refl_ref }, + { "crc64_rocksoft_norm", crc64_rocksoft_norm, crc64_rocksoft_norm_base, + crc64_rocksoft_norm_ref }, + { "crc64_rocksoft_refl", crc64_rocksoft_refl, crc64_rocksoft_refl_base, + crc64_rocksoft_refl_ref } }; // Generates pseudo-random data -void rand_buffer(unsigned char *buf, long buffer_size) +void +rand_buffer(unsigned char *buf, long buffer_size) { - long i; - for (i = 0; i < buffer_size; i++) - buf[i] = rand(); + long i; + for (i = 0; i < buffer_size; i++) + buf[i] = rand(); } // Test cases -int zeros_test(func_case_t * test_func); +int +zeros_test(func_case_t *test_func); -int simple_pattern_test(func_case_t * test_func); +int +simple_pattern_test(func_case_t *test_func); -int seeds_sizes_test(func_case_t * test_func); +int +seeds_sizes_test(func_case_t *test_func); -int eob_test(func_case_t * test_func); +int +eob_test(func_case_t *test_func); -int update_test(func_case_t * test_func); +int +update_test(func_case_t *test_func); void *buf_alloc = NULL; -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - int fail = 0, fail_case; - int i, ret; - func_case_t *test_func; - - // Align to 32B boundary - ret = posix_memalign(&buf_alloc, TEST_SIZE, MAX_BUF * TEST_SIZE); - if (ret) { - printf("alloc error: Fail"); - return -1; - } - srand(TEST_SEED); - printf("CRC64 Tests\n"); - - for (i = 0; i < sizeof(test_funcs) / sizeof(test_funcs[0]); i++) { - fail_case = 0; - test_func = &test_funcs[i]; - - printf("Test %s\t", test_func->note); - fail_case += zeros_test(test_func); - fail_case += simple_pattern_test(test_func); - fail_case += seeds_sizes_test(test_func); - fail_case += eob_test(test_func); - fail_case += update_test(test_func); - printf(" done: %s\n", fail_case ? "Fail" : "Pass"); - - if (fail_case) { - printf("\n%s Failed %d tests\n", test_func->note, fail_case); - fail++; - } - } - - printf("CRC64 Tests all done: %s\n", fail ? "Fail" : "Pass"); - - aligned_free(buf_alloc); - - return fail; + int fail = 0, fail_case; + int i, ret; + func_case_t *test_func; + + // Align to 32B boundary + ret = posix_memalign(&buf_alloc, TEST_SIZE, MAX_BUF * TEST_SIZE); + if (ret) { + printf("alloc error: Fail"); + return -1; + } + srand(TEST_SEED); + printf("CRC64 Tests\n"); + + for (i = 0; i < sizeof(test_funcs) / sizeof(test_funcs[0]); i++) { + fail_case = 0; + test_func = &test_funcs[i]; + + printf("Test %s\t", test_func->note); + fail_case += zeros_test(test_func); + fail_case += simple_pattern_test(test_func); + fail_case += seeds_sizes_test(test_func); + fail_case += eob_test(test_func); + fail_case += update_test(test_func); + printf(" done: %s\n", fail_case ? "Fail" : "Pass"); + + if (fail_case) { + printf("\n%s Failed %d tests\n", test_func->note, fail_case); + fail++; + } + } + + printf("CRC64 Tests all done: %s\n", fail ? "Fail" : "Pass"); + + aligned_free(buf_alloc); + + return fail; } // Test of all zeros -int zeros_test(func_case_t * test_func) +int +zeros_test(func_case_t *test_func) { - uint64_t crc_ref, crc_base, crc; - int fail = 0; - unsigned char *buf = NULL; - - buf = (unsigned char *)buf_alloc; - memset(buf, 0, MAX_BUF * 10); - crc_ref = test_func->crc64_ref_call(TEST_SEED, buf, MAX_BUF * 10); - crc_base = test_func->crc64_base_call(TEST_SEED, buf, MAX_BUF * 10); - crc = test_func->crc64_func_call(TEST_SEED, buf, MAX_BUF * 10); - - if ((crc_base != crc_ref) || (crc != crc_ref)) { - fail++; - printf("\n opt ref\n"); - printf(" ------ ------\n"); - printf("fail crc zero = 0x%" PRIx64 " 0x%" PRIx64 " 0x%" PRIx64 "\n", - crc_ref, crc_base, crc); - } + uint64_t crc_ref, crc_base, crc; + int fail = 0; + unsigned char *buf = NULL; + + buf = (unsigned char *) buf_alloc; + memset(buf, 0, MAX_BUF * 10); + crc_ref = test_func->crc64_ref_call(TEST_SEED, buf, MAX_BUF * 10); + crc_base = test_func->crc64_base_call(TEST_SEED, buf, MAX_BUF * 10); + crc = test_func->crc64_func_call(TEST_SEED, buf, MAX_BUF * 10); + + if ((crc_base != crc_ref) || (crc != crc_ref)) { + fail++; + printf("\n opt ref\n"); + printf(" ------ ------\n"); + printf("fail crc zero = 0x%" PRIx64 " 0x%" PRIx64 " 0x%" PRIx64 "\n", + crc_ref, crc_base, crc); + } #ifdef TEST_VERBOSE - else - printf("."); + else + printf("."); #endif - return fail; + return fail; } // Another simple test pattern -int simple_pattern_test(func_case_t * test_func) +int +simple_pattern_test(func_case_t *test_func) { - uint64_t crc_ref, crc_base, crc; - int fail = 0; - unsigned char *buf = NULL; - - buf = (unsigned char *)buf_alloc; - memset(buf, 0x8a, MAX_BUF); - crc_ref = test_func->crc64_ref_call(TEST_SEED, buf, MAX_BUF); - crc_base = test_func->crc64_base_call(TEST_SEED, buf, MAX_BUF); - crc = test_func->crc64_func_call(TEST_SEED, buf, MAX_BUF); - - if ((crc_base != crc_ref) || (crc != crc_ref)) { - fail++; - printf("fail crc all 8a = 0x%" PRIx64 " 0x%" PRIx64 " 0x%" PRIx64 "\n", - crc_ref, crc_base, crc); - } + uint64_t crc_ref, crc_base, crc; + int fail = 0; + unsigned char *buf = NULL; + + buf = (unsigned char *) buf_alloc; + memset(buf, 0x8a, MAX_BUF); + crc_ref = test_func->crc64_ref_call(TEST_SEED, buf, MAX_BUF); + crc_base = test_func->crc64_base_call(TEST_SEED, buf, MAX_BUF); + crc = test_func->crc64_func_call(TEST_SEED, buf, MAX_BUF); + + if ((crc_base != crc_ref) || (crc != crc_ref)) { + fail++; + printf("fail crc all 8a = 0x%" PRIx64 " 0x%" PRIx64 " 0x%" PRIx64 "\n", crc_ref, + crc_base, crc); + } #ifdef TEST_VERBOSE - else - printf("."); + else + printf("."); #endif - return fail; + return fail; } -int seeds_sizes_test(func_case_t * test_func) +int +seeds_sizes_test(func_case_t *test_func) { - uint64_t crc_ref, crc_base, crc; - int fail = 0; - int i; - uint64_t r, s; - unsigned char *buf = NULL; - - // Do a few random tests - buf = (unsigned char *)buf_alloc; //reset buf - r = rand(); - rand_buffer(buf, MAX_BUF * TEST_SIZE); - - for (i = 0; i < TEST_SIZE; i++) { - crc_ref = test_func->crc64_ref_call(r, buf, MAX_BUF); - crc_base = test_func->crc64_base_call(r, buf, MAX_BUF); - crc = test_func->crc64_func_call(r, buf, MAX_BUF); - - if ((crc_base != crc_ref) || (crc != crc_ref)) { - fail++; - printf("fail crc rand%3d = 0x%" PRIx64 " 0x%" PRIx64 " 0x%" PRIx64 - "\n", i, crc_ref, crc_base, crc); - } + uint64_t crc_ref, crc_base, crc; + int fail = 0; + int i; + uint64_t r, s; + unsigned char *buf = NULL; + + // Do a few random tests + buf = (unsigned char *) buf_alloc; // reset buf + r = rand(); + rand_buffer(buf, MAX_BUF * TEST_SIZE); + + for (i = 0; i < TEST_SIZE; i++) { + crc_ref = test_func->crc64_ref_call(r, buf, MAX_BUF); + crc_base = test_func->crc64_base_call(r, buf, MAX_BUF); + crc = test_func->crc64_func_call(r, buf, MAX_BUF); + + if ((crc_base != crc_ref) || (crc != crc_ref)) { + fail++; + printf("fail crc rand%3d = 0x%" PRIx64 " 0x%" PRIx64 " 0x%" PRIx64 "\n", i, + crc_ref, crc_base, crc); + } #ifdef TEST_VERBOSE - else if (i % (TEST_SIZE / 8) == 0) - printf("."); + else if (i % (TEST_SIZE / 8) == 0) + printf("."); #endif - buf += MAX_BUF; - } - - // Do a few random sizes - buf = (unsigned char *)buf_alloc; //reset buf - r = rand(); - - for (i = MAX_BUF; i >= 0; i--) { - crc_ref = test_func->crc64_ref_call(r, buf, i); - crc_base = test_func->crc64_base_call(r, buf, i); - crc = test_func->crc64_func_call(r, buf, i); - - if ((crc_base != crc_ref) || (crc != crc_ref)) { - fail++; - printf("fail random size %d 0x%" PRIx64 " 0x%" PRIx64 " 0x%" PRIx64 - "\n", i, crc_ref, crc_base, crc); - } + buf += MAX_BUF; + } + + // Do a few random sizes + buf = (unsigned char *) buf_alloc; // reset buf + r = rand(); + + for (i = MAX_BUF; i >= 0; i--) { + crc_ref = test_func->crc64_ref_call(r, buf, i); + crc_base = test_func->crc64_base_call(r, buf, i); + crc = test_func->crc64_func_call(r, buf, i); + + if ((crc_base != crc_ref) || (crc != crc_ref)) { + fail++; + printf("fail random size %d 0x%" PRIx64 " 0x%" PRIx64 " 0x%" PRIx64 "\n", i, + crc_ref, crc_base, crc); + } #ifdef TEST_VERBOSE - else if (i % (MAX_BUF / 8) == 0) - printf("."); + else if (i % (MAX_BUF / 8) == 0) + printf("."); #endif - } + } - // Try different seeds - for (s = 0; s < 20; s++) { - buf = (unsigned char *)buf_alloc; //reset buf + // Try different seeds + for (s = 0; s < 20; s++) { + buf = (unsigned char *) buf_alloc; // reset buf - r = rand(); // just to get a new seed - rand_buffer(buf, MAX_BUF * TEST_SIZE); // new pseudo-rand data + r = rand(); // just to get a new seed + rand_buffer(buf, MAX_BUF * TEST_SIZE); // new pseudo-rand data #ifdef TEST_VERBOSE - printf("seed = 0x%lx\n", r); + printf("seed = 0x%lx\n", r); #endif - for (i = 0; i < TEST_SIZE; i++) { - crc_ref = test_func->crc64_ref_call(r, buf, MAX_BUF); - crc_base = test_func->crc64_base_call(r, buf, MAX_BUF); - crc = test_func->crc64_func_call(r, buf, MAX_BUF); - - if ((crc_base != crc_ref) || (crc != crc_ref)) { - fail++; - printf("fail crc rand%3d = 0x%" PRIx64 " 0x%" PRIx64 " 0x%" - PRIx64 "\n", i, crc_ref, crc_base, crc); - } + for (i = 0; i < TEST_SIZE; i++) { + crc_ref = test_func->crc64_ref_call(r, buf, MAX_BUF); + crc_base = test_func->crc64_base_call(r, buf, MAX_BUF); + crc = test_func->crc64_func_call(r, buf, MAX_BUF); + + if ((crc_base != crc_ref) || (crc != crc_ref)) { + fail++; + printf("fail crc rand%3d = 0x%" PRIx64 " 0x%" PRIx64 " 0x%" PRIx64 + "\n", + i, crc_ref, crc_base, crc); + } #ifdef TEST_VERBOSE - else if (i % (TEST_SIZE * 20 / 8) == 0) - printf("."); + else if (i % (TEST_SIZE * 20 / 8) == 0) + printf("."); #endif - buf += MAX_BUF; - } - } + buf += MAX_BUF; + } + } - return fail; + return fail; } // Run tests at end of buffer -int eob_test(func_case_t * test_func) +int +eob_test(func_case_t *test_func) { - uint64_t crc_ref, crc_base, crc; - int fail = 0; - int i; - unsigned char *buf = NULL; - - // Null test - if (0 != test_func->crc64_func_call(0, NULL, 0)) { - fail++; - printf("crc null test fail\n"); - } - - buf = (unsigned char *)buf_alloc; //reset buf - buf = buf + ((MAX_BUF - 1) * TEST_SIZE); //Line up TEST_SIZE from end - for (i = 0; i <= TEST_SIZE; i++) { - crc_ref = test_func->crc64_ref_call(TEST_SEED, buf + i, TEST_SIZE - i); - crc_base = test_func->crc64_base_call(TEST_SEED, buf + i, TEST_SIZE - i); - crc = test_func->crc64_func_call(TEST_SEED, buf + i, TEST_SIZE - i); - - if ((crc_base != crc_ref) || (crc != crc_ref)) { - fail++; - printf("fail crc eob rand%3d = 0x%" PRIx64 " 0x%" PRIx64 " 0x%" PRIx64 - "\n", i, crc_ref, crc_base, crc); - } + uint64_t crc_ref, crc_base, crc; + int fail = 0; + int i; + unsigned char *buf = NULL; + + // Null test + if (0 != test_func->crc64_func_call(0, NULL, 0)) { + fail++; + printf("crc null test fail\n"); + } + + buf = (unsigned char *) buf_alloc; // reset buf + buf = buf + ((MAX_BUF - 1) * TEST_SIZE); // Line up TEST_SIZE from end + for (i = 0; i <= TEST_SIZE; i++) { + crc_ref = test_func->crc64_ref_call(TEST_SEED, buf + i, TEST_SIZE - i); + crc_base = test_func->crc64_base_call(TEST_SEED, buf + i, TEST_SIZE - i); + crc = test_func->crc64_func_call(TEST_SEED, buf + i, TEST_SIZE - i); + + if ((crc_base != crc_ref) || (crc != crc_ref)) { + fail++; + printf("fail crc eob rand%3d = 0x%" PRIx64 " 0x%" PRIx64 " 0x%" PRIx64 "\n", + i, crc_ref, crc_base, crc); + } #ifdef TEST_VERBOSE - else if (i % (TEST_SIZE / 8) == 0) - printf("."); + else if (i % (TEST_SIZE / 8) == 0) + printf("."); #endif - } + } - return fail; + return fail; } -int update_test(func_case_t * test_func) +int +update_test(func_case_t *test_func) { - uint64_t crc_ref, crc_base, crc; - int fail = 0; - int i; - uint64_t r; - unsigned char *buf = NULL; - - buf = (unsigned char *)buf_alloc; //reset buf - r = rand(); - // Process the whole buf with reference func single call. - crc_ref = test_func->crc64_ref_call(r, buf, MAX_BUF * TEST_SIZE); - crc_base = test_func->crc64_base_call(r, buf, MAX_BUF * TEST_SIZE); - // Process buf with update method. - for (i = 0; i < TEST_SIZE; i++) { - crc = test_func->crc64_func_call(r, buf, MAX_BUF); - // Update crc seeds and buf pointer. - r = crc; - buf += MAX_BUF; - } - - if ((crc_base != crc_ref) || (crc != crc_ref)) { - fail++; - printf("fail crc rand%3d = 0x%" PRIx64 " 0x%" PRIx64 " 0x%" PRIx64 "\n", i, - crc_ref, crc_base, crc); - } + uint64_t crc_ref, crc_base, crc; + int fail = 0; + int i; + uint64_t r; + unsigned char *buf = NULL; + + buf = (unsigned char *) buf_alloc; // reset buf + r = rand(); + // Process the whole buf with reference func single call. + crc_ref = test_func->crc64_ref_call(r, buf, MAX_BUF * TEST_SIZE); + crc_base = test_func->crc64_base_call(r, buf, MAX_BUF * TEST_SIZE); + // Process buf with update method. + for (i = 0; i < TEST_SIZE; i++) { + crc = test_func->crc64_func_call(r, buf, MAX_BUF); + // Update crc seeds and buf pointer. + r = crc; + buf += MAX_BUF; + } + + if ((crc_base != crc_ref) || (crc != crc_ref)) { + fail++; + printf("fail crc rand%3d = 0x%" PRIx64 " 0x%" PRIx64 " 0x%" PRIx64 "\n", i, crc_ref, + crc_base, crc); + } #ifdef TEST_VERBOSE - else - printf("."); + else + printf("."); #endif - return fail; + return fail; } diff --git a/crc/crc64_ref.h b/crc/crc64_ref.h index bc990af2..28a3f4c3 100644 --- a/crc/crc64_ref.h +++ b/crc/crc64_ref.h @@ -37,142 +37,149 @@ extern "C" { #include "crc64.h" #ifdef _MSC_VER -# define inline __inline +#define inline __inline #endif -#define MAX_ITER 8 +#define MAX_ITER 8 // crc64_ecma reference function, slow crc64 from the definition. -static inline uint64_t crc64_ecma_refl_ref(uint64_t seed, const uint8_t * buf, uint64_t len) +static inline uint64_t +crc64_ecma_refl_ref(uint64_t seed, const uint8_t *buf, uint64_t len) { - uint64_t rem = ~seed; - unsigned int i, j; - - uint64_t poly = 0xC96C5795D7870F42ULL; // ECMA-182 standard reflected - - for (i = 0; i < len; i++) { - rem = rem ^ (uint64_t) buf[i]; - for (j = 0; j < MAX_ITER; j++) { - rem = (rem & 0x1ULL ? poly : 0) ^ (rem >> 1); - } - } - return ~rem; + uint64_t rem = ~seed; + unsigned int i, j; + + uint64_t poly = 0xC96C5795D7870F42ULL; // ECMA-182 standard reflected + + for (i = 0; i < len; i++) { + rem = rem ^ (uint64_t) buf[i]; + for (j = 0; j < MAX_ITER; j++) { + rem = (rem & 0x1ULL ? poly : 0) ^ (rem >> 1); + } + } + return ~rem; } -static inline uint64_t crc64_ecma_norm_ref(uint64_t seed, const uint8_t * buf, uint64_t len) +static inline uint64_t +crc64_ecma_norm_ref(uint64_t seed, const uint8_t *buf, uint64_t len) { - uint64_t rem = ~seed; - unsigned int i, j; - - uint64_t poly = 0x42F0E1EBA9EA3693ULL; // ECMA-182 standard - - for (i = 0; i < len; i++) { - rem = rem ^ ((uint64_t) buf[i] << 56); - for (j = 0; j < MAX_ITER; j++) { - rem = (rem & 0x8000000000000000ULL ? poly : 0) ^ (rem << 1); - } - } - return ~rem; + uint64_t rem = ~seed; + unsigned int i, j; + + uint64_t poly = 0x42F0E1EBA9EA3693ULL; // ECMA-182 standard + + for (i = 0; i < len; i++) { + rem = rem ^ ((uint64_t) buf[i] << 56); + for (j = 0; j < MAX_ITER; j++) { + rem = (rem & 0x8000000000000000ULL ? poly : 0) ^ (rem << 1); + } + } + return ~rem; } // crc64_iso reference function, slow crc64 from the definition. -static inline uint64_t crc64_iso_refl_ref(uint64_t seed, const uint8_t * buf, uint64_t len) +static inline uint64_t +crc64_iso_refl_ref(uint64_t seed, const uint8_t *buf, uint64_t len) { - uint64_t rem = ~seed; - unsigned int i, j; - - uint64_t poly = 0xD800000000000000ULL; // ISO standard reflected - - for (i = 0; i < len; i++) { - rem = rem ^ (uint64_t) buf[i]; - for (j = 0; j < MAX_ITER; j++) { - rem = (rem & 0x1ULL ? poly : 0) ^ (rem >> 1); - } - } - return ~rem; + uint64_t rem = ~seed; + unsigned int i, j; + + uint64_t poly = 0xD800000000000000ULL; // ISO standard reflected + + for (i = 0; i < len; i++) { + rem = rem ^ (uint64_t) buf[i]; + for (j = 0; j < MAX_ITER; j++) { + rem = (rem & 0x1ULL ? poly : 0) ^ (rem >> 1); + } + } + return ~rem; } -static inline uint64_t crc64_iso_norm_ref(uint64_t seed, const uint8_t * buf, uint64_t len) +static inline uint64_t +crc64_iso_norm_ref(uint64_t seed, const uint8_t *buf, uint64_t len) { - uint64_t rem = ~seed; - unsigned int i, j; - - uint64_t poly = 0x000000000000001BULL; // ISO standard - - for (i = 0; i < len; i++) { - rem = rem ^ ((uint64_t) buf[i] << 56); - for (j = 0; j < MAX_ITER; j++) { - rem = (rem & 0x8000000000000000ULL ? poly : 0) ^ (rem << 1); - } - } - return ~rem; + uint64_t rem = ~seed; + unsigned int i, j; + + uint64_t poly = 0x000000000000001BULL; // ISO standard + + for (i = 0; i < len; i++) { + rem = rem ^ ((uint64_t) buf[i] << 56); + for (j = 0; j < MAX_ITER; j++) { + rem = (rem & 0x8000000000000000ULL ? poly : 0) ^ (rem << 1); + } + } + return ~rem; } // crc64_jones reference function, slow crc64 from the definition. -static inline uint64_t crc64_jones_refl_ref(uint64_t seed, const uint8_t * buf, uint64_t len) +static inline uint64_t +crc64_jones_refl_ref(uint64_t seed, const uint8_t *buf, uint64_t len) { - uint64_t rem = ~seed; - unsigned int i, j; - - uint64_t poly = 0x95ac9329ac4bc9b5ULL; // Jones coefficients reflected - - for (i = 0; i < len; i++) { - rem = rem ^ (uint64_t) buf[i]; - for (j = 0; j < MAX_ITER; j++) { - rem = (rem & 0x1ULL ? poly : 0) ^ (rem >> 1); - } - } - return ~rem; + uint64_t rem = ~seed; + unsigned int i, j; + + uint64_t poly = 0x95ac9329ac4bc9b5ULL; // Jones coefficients reflected + + for (i = 0; i < len; i++) { + rem = rem ^ (uint64_t) buf[i]; + for (j = 0; j < MAX_ITER; j++) { + rem = (rem & 0x1ULL ? poly : 0) ^ (rem >> 1); + } + } + return ~rem; } -static inline uint64_t crc64_jones_norm_ref(uint64_t seed, const uint8_t * buf, uint64_t len) +static inline uint64_t +crc64_jones_norm_ref(uint64_t seed, const uint8_t *buf, uint64_t len) { - uint64_t rem = ~seed; - unsigned int i, j; - - uint64_t poly = 0xad93d23594c935a9ULL; // Jones coefficients - - for (i = 0; i < len; i++) { - rem = rem ^ ((uint64_t) buf[i] << 56); - for (j = 0; j < MAX_ITER; j++) { - rem = (rem & 0x8000000000000000ULL ? poly : 0) ^ (rem << 1); - } - } - return ~rem; + uint64_t rem = ~seed; + unsigned int i, j; + + uint64_t poly = 0xad93d23594c935a9ULL; // Jones coefficients + + for (i = 0; i < len; i++) { + rem = rem ^ ((uint64_t) buf[i] << 56); + for (j = 0; j < MAX_ITER; j++) { + rem = (rem & 0x8000000000000000ULL ? poly : 0) ^ (rem << 1); + } + } + return ~rem; } - // crc64_rocksoft reference function, slow crc64 from the definition. -static inline uint64_t crc64_rocksoft_refl_ref(uint64_t seed, const uint8_t * buf, uint64_t len) +static inline uint64_t +crc64_rocksoft_refl_ref(uint64_t seed, const uint8_t *buf, uint64_t len) { - uint64_t rem = ~seed; - unsigned int i, j; - - uint64_t poly = 0x9a6c9329ac4bc9b5ULL; // Rocksoft coefficients reflected - - for (i = 0; i < len; i++) { - rem = rem ^ (uint64_t) buf[i]; - for (j = 0; j < MAX_ITER; j++) { - rem = (rem & 0x1ULL ? poly : 0) ^ (rem >> 1); - } - } - return ~rem; + uint64_t rem = ~seed; + unsigned int i, j; + + uint64_t poly = 0x9a6c9329ac4bc9b5ULL; // Rocksoft coefficients reflected + + for (i = 0; i < len; i++) { + rem = rem ^ (uint64_t) buf[i]; + for (j = 0; j < MAX_ITER; j++) { + rem = (rem & 0x1ULL ? poly : 0) ^ (rem >> 1); + } + } + return ~rem; } -static inline uint64_t crc64_rocksoft_norm_ref(uint64_t seed, const uint8_t * buf, uint64_t len) +static inline uint64_t +crc64_rocksoft_norm_ref(uint64_t seed, const uint8_t *buf, uint64_t len) { - uint64_t rem = ~seed; - unsigned int i, j; - - uint64_t poly = 0xad93d23594c93659ULL; // Rocksoft coefficients - - for (i = 0; i < len; i++) { - rem = rem ^ ((uint64_t) buf[i] << 56); - for (j = 0; j < MAX_ITER; j++) { - rem = (rem & 0x8000000000000000ULL ? poly : 0) ^ (rem << 1); - } - } - return ~rem; + uint64_t rem = ~seed; + unsigned int i, j; + + uint64_t poly = 0xad93d23594c93659ULL; // Rocksoft coefficients + + for (i = 0; i < len; i++) { + rem = rem ^ ((uint64_t) buf[i] << 56); + for (j = 0; j < MAX_ITER; j++) { + rem = (rem & 0x8000000000000000ULL ? poly : 0) ^ (rem << 1); + } + } + return ~rem; } #ifdef __cplusplus } diff --git a/crc/crc_base.c b/crc/crc_base.c index 7267f4f7..6df6bfc5 100644 --- a/crc/crc_base.c +++ b/crc/crc_base.c @@ -30,304 +30,220 @@ #include "crc.h" static const uint16_t crc16tab[256] = { - 0x0000, 0x8BB7, 0x9CD9, 0x176E, 0xB205, 0x39B2, 0x2EDC, 0xA56B, - 0xEFBD, 0x640A, 0x7364, 0xF8D3, 0x5DB8, 0xD60F, 0xC161, 0x4AD6, - 0x54CD, 0xDF7A, 0xC814, 0x43A3, 0xE6C8, 0x6D7F, 0x7A11, 0xF1A6, - 0xBB70, 0x30C7, 0x27A9, 0xAC1E, 0x0975, 0x82C2, 0x95AC, 0x1E1B, - 0xA99A, 0x222D, 0x3543, 0xBEF4, 0x1B9F, 0x9028, 0x8746, 0x0CF1, - 0x4627, 0xCD90, 0xDAFE, 0x5149, 0xF422, 0x7F95, 0x68FB, 0xE34C, - 0xFD57, 0x76E0, 0x618E, 0xEA39, 0x4F52, 0xC4E5, 0xD38B, 0x583C, - 0x12EA, 0x995D, 0x8E33, 0x0584, 0xA0EF, 0x2B58, 0x3C36, 0xB781, - 0xD883, 0x5334, 0x445A, 0xCFED, 0x6A86, 0xE131, 0xF65F, 0x7DE8, - 0x373E, 0xBC89, 0xABE7, 0x2050, 0x853B, 0x0E8C, 0x19E2, 0x9255, - 0x8C4E, 0x07F9, 0x1097, 0x9B20, 0x3E4B, 0xB5FC, 0xA292, 0x2925, - 0x63F3, 0xE844, 0xFF2A, 0x749D, 0xD1F6, 0x5A41, 0x4D2F, 0xC698, - 0x7119, 0xFAAE, 0xEDC0, 0x6677, 0xC31C, 0x48AB, 0x5FC5, 0xD472, - 0x9EA4, 0x1513, 0x027D, 0x89CA, 0x2CA1, 0xA716, 0xB078, 0x3BCF, - 0x25D4, 0xAE63, 0xB90D, 0x32BA, 0x97D1, 0x1C66, 0x0B08, 0x80BF, - 0xCA69, 0x41DE, 0x56B0, 0xDD07, 0x786C, 0xF3DB, 0xE4B5, 0x6F02, - 0x3AB1, 0xB106, 0xA668, 0x2DDF, 0x88B4, 0x0303, 0x146D, 0x9FDA, - 0xD50C, 0x5EBB, 0x49D5, 0xC262, 0x6709, 0xECBE, 0xFBD0, 0x7067, - 0x6E7C, 0xE5CB, 0xF2A5, 0x7912, 0xDC79, 0x57CE, 0x40A0, 0xCB17, - 0x81C1, 0x0A76, 0x1D18, 0x96AF, 0x33C4, 0xB873, 0xAF1D, 0x24AA, - 0x932B, 0x189C, 0x0FF2, 0x8445, 0x212E, 0xAA99, 0xBDF7, 0x3640, - 0x7C96, 0xF721, 0xE04F, 0x6BF8, 0xCE93, 0x4524, 0x524A, 0xD9FD, - 0xC7E6, 0x4C51, 0x5B3F, 0xD088, 0x75E3, 0xFE54, 0xE93A, 0x628D, - 0x285B, 0xA3EC, 0xB482, 0x3F35, 0x9A5E, 0x11E9, 0x0687, 0x8D30, - 0xE232, 0x6985, 0x7EEB, 0xF55C, 0x5037, 0xDB80, 0xCCEE, 0x4759, - 0x0D8F, 0x8638, 0x9156, 0x1AE1, 0xBF8A, 0x343D, 0x2353, 0xA8E4, - 0xB6FF, 0x3D48, 0x2A26, 0xA191, 0x04FA, 0x8F4D, 0x9823, 0x1394, - 0x5942, 0xD2F5, 0xC59B, 0x4E2C, 0xEB47, 0x60F0, 0x779E, 0xFC29, - 0x4BA8, 0xC01F, 0xD771, 0x5CC6, 0xF9AD, 0x721A, 0x6574, 0xEEC3, - 0xA415, 0x2FA2, 0x38CC, 0xB37B, 0x1610, 0x9DA7, 0x8AC9, 0x017E, - 0x1F65, 0x94D2, 0x83BC, 0x080B, 0xAD60, 0x26D7, 0x31B9, 0xBA0E, - 0xF0D8, 0x7B6F, 0x6C01, 0xE7B6, 0x42DD, 0xC96A, 0xDE04, 0x55B3 + 0x0000, 0x8BB7, 0x9CD9, 0x176E, 0xB205, 0x39B2, 0x2EDC, 0xA56B, 0xEFBD, 0x640A, 0x7364, + 0xF8D3, 0x5DB8, 0xD60F, 0xC161, 0x4AD6, 0x54CD, 0xDF7A, 0xC814, 0x43A3, 0xE6C8, 0x6D7F, + 0x7A11, 0xF1A6, 0xBB70, 0x30C7, 0x27A9, 0xAC1E, 0x0975, 0x82C2, 0x95AC, 0x1E1B, 0xA99A, + 0x222D, 0x3543, 0xBEF4, 0x1B9F, 0x9028, 0x8746, 0x0CF1, 0x4627, 0xCD90, 0xDAFE, 0x5149, + 0xF422, 0x7F95, 0x68FB, 0xE34C, 0xFD57, 0x76E0, 0x618E, 0xEA39, 0x4F52, 0xC4E5, 0xD38B, + 0x583C, 0x12EA, 0x995D, 0x8E33, 0x0584, 0xA0EF, 0x2B58, 0x3C36, 0xB781, 0xD883, 0x5334, + 0x445A, 0xCFED, 0x6A86, 0xE131, 0xF65F, 0x7DE8, 0x373E, 0xBC89, 0xABE7, 0x2050, 0x853B, + 0x0E8C, 0x19E2, 0x9255, 0x8C4E, 0x07F9, 0x1097, 0x9B20, 0x3E4B, 0xB5FC, 0xA292, 0x2925, + 0x63F3, 0xE844, 0xFF2A, 0x749D, 0xD1F6, 0x5A41, 0x4D2F, 0xC698, 0x7119, 0xFAAE, 0xEDC0, + 0x6677, 0xC31C, 0x48AB, 0x5FC5, 0xD472, 0x9EA4, 0x1513, 0x027D, 0x89CA, 0x2CA1, 0xA716, + 0xB078, 0x3BCF, 0x25D4, 0xAE63, 0xB90D, 0x32BA, 0x97D1, 0x1C66, 0x0B08, 0x80BF, 0xCA69, + 0x41DE, 0x56B0, 0xDD07, 0x786C, 0xF3DB, 0xE4B5, 0x6F02, 0x3AB1, 0xB106, 0xA668, 0x2DDF, + 0x88B4, 0x0303, 0x146D, 0x9FDA, 0xD50C, 0x5EBB, 0x49D5, 0xC262, 0x6709, 0xECBE, 0xFBD0, + 0x7067, 0x6E7C, 0xE5CB, 0xF2A5, 0x7912, 0xDC79, 0x57CE, 0x40A0, 0xCB17, 0x81C1, 0x0A76, + 0x1D18, 0x96AF, 0x33C4, 0xB873, 0xAF1D, 0x24AA, 0x932B, 0x189C, 0x0FF2, 0x8445, 0x212E, + 0xAA99, 0xBDF7, 0x3640, 0x7C96, 0xF721, 0xE04F, 0x6BF8, 0xCE93, 0x4524, 0x524A, 0xD9FD, + 0xC7E6, 0x4C51, 0x5B3F, 0xD088, 0x75E3, 0xFE54, 0xE93A, 0x628D, 0x285B, 0xA3EC, 0xB482, + 0x3F35, 0x9A5E, 0x11E9, 0x0687, 0x8D30, 0xE232, 0x6985, 0x7EEB, 0xF55C, 0x5037, 0xDB80, + 0xCCEE, 0x4759, 0x0D8F, 0x8638, 0x9156, 0x1AE1, 0xBF8A, 0x343D, 0x2353, 0xA8E4, 0xB6FF, + 0x3D48, 0x2A26, 0xA191, 0x04FA, 0x8F4D, 0x9823, 0x1394, 0x5942, 0xD2F5, 0xC59B, 0x4E2C, + 0xEB47, 0x60F0, 0x779E, 0xFC29, 0x4BA8, 0xC01F, 0xD771, 0x5CC6, 0xF9AD, 0x721A, 0x6574, + 0xEEC3, 0xA415, 0x2FA2, 0x38CC, 0xB37B, 0x1610, 0x9DA7, 0x8AC9, 0x017E, 0x1F65, 0x94D2, + 0x83BC, 0x080B, 0xAD60, 0x26D7, 0x31B9, 0xBA0E, 0xF0D8, 0x7B6F, 0x6C01, 0xE7B6, 0x42DD, + 0xC96A, 0xDE04, 0x55B3 }; static const uint32_t crc32_table_iscsi_refl[256] = { - 0x00000000, 0xF26B8303, 0xE13B70F7, 0x1350F3F4, - 0xC79A971F, 0x35F1141C, 0x26A1E7E8, 0xD4CA64EB, - 0x8AD958CF, 0x78B2DBCC, 0x6BE22838, 0x9989AB3B, - 0x4D43CFD0, 0xBF284CD3, 0xAC78BF27, 0x5E133C24, - 0x105EC76F, 0xE235446C, 0xF165B798, 0x030E349B, - 0xD7C45070, 0x25AFD373, 0x36FF2087, 0xC494A384, - 0x9A879FA0, 0x68EC1CA3, 0x7BBCEF57, 0x89D76C54, - 0x5D1D08BF, 0xAF768BBC, 0xBC267848, 0x4E4DFB4B, - 0x20BD8EDE, 0xD2D60DDD, 0xC186FE29, 0x33ED7D2A, - 0xE72719C1, 0x154C9AC2, 0x061C6936, 0xF477EA35, - 0xAA64D611, 0x580F5512, 0x4B5FA6E6, 0xB93425E5, - 0x6DFE410E, 0x9F95C20D, 0x8CC531F9, 0x7EAEB2FA, - 0x30E349B1, 0xC288CAB2, 0xD1D83946, 0x23B3BA45, - 0xF779DEAE, 0x05125DAD, 0x1642AE59, 0xE4292D5A, - 0xBA3A117E, 0x4851927D, 0x5B016189, 0xA96AE28A, - 0x7DA08661, 0x8FCB0562, 0x9C9BF696, 0x6EF07595, - 0x417B1DBC, 0xB3109EBF, 0xA0406D4B, 0x522BEE48, - 0x86E18AA3, 0x748A09A0, 0x67DAFA54, 0x95B17957, - 0xCBA24573, 0x39C9C670, 0x2A993584, 0xD8F2B687, - 0x0C38D26C, 0xFE53516F, 0xED03A29B, 0x1F682198, - 0x5125DAD3, 0xA34E59D0, 0xB01EAA24, 0x42752927, - 0x96BF4DCC, 0x64D4CECF, 0x77843D3B, 0x85EFBE38, - 0xDBFC821C, 0x2997011F, 0x3AC7F2EB, 0xC8AC71E8, - 0x1C661503, 0xEE0D9600, 0xFD5D65F4, 0x0F36E6F7, - 0x61C69362, 0x93AD1061, 0x80FDE395, 0x72966096, - 0xA65C047D, 0x5437877E, 0x4767748A, 0xB50CF789, - 0xEB1FCBAD, 0x197448AE, 0x0A24BB5A, 0xF84F3859, - 0x2C855CB2, 0xDEEEDFB1, 0xCDBE2C45, 0x3FD5AF46, - 0x7198540D, 0x83F3D70E, 0x90A324FA, 0x62C8A7F9, - 0xB602C312, 0x44694011, 0x5739B3E5, 0xA55230E6, - 0xFB410CC2, 0x092A8FC1, 0x1A7A7C35, 0xE811FF36, - 0x3CDB9BDD, 0xCEB018DE, 0xDDE0EB2A, 0x2F8B6829, - 0x82F63B78, 0x709DB87B, 0x63CD4B8F, 0x91A6C88C, - 0x456CAC67, 0xB7072F64, 0xA457DC90, 0x563C5F93, - 0x082F63B7, 0xFA44E0B4, 0xE9141340, 0x1B7F9043, - 0xCFB5F4A8, 0x3DDE77AB, 0x2E8E845F, 0xDCE5075C, - 0x92A8FC17, 0x60C37F14, 0x73938CE0, 0x81F80FE3, - 0x55326B08, 0xA759E80B, 0xB4091BFF, 0x466298FC, - 0x1871A4D8, 0xEA1A27DB, 0xF94AD42F, 0x0B21572C, - 0xDFEB33C7, 0x2D80B0C4, 0x3ED04330, 0xCCBBC033, - 0xA24BB5A6, 0x502036A5, 0x4370C551, 0xB11B4652, - 0x65D122B9, 0x97BAA1BA, 0x84EA524E, 0x7681D14D, - 0x2892ED69, 0xDAF96E6A, 0xC9A99D9E, 0x3BC21E9D, - 0xEF087A76, 0x1D63F975, 0x0E330A81, 0xFC588982, - 0xB21572C9, 0x407EF1CA, 0x532E023E, 0xA145813D, - 0x758FE5D6, 0x87E466D5, 0x94B49521, 0x66DF1622, - 0x38CC2A06, 0xCAA7A905, 0xD9F75AF1, 0x2B9CD9F2, - 0xFF56BD19, 0x0D3D3E1A, 0x1E6DCDEE, 0xEC064EED, - 0xC38D26C4, 0x31E6A5C7, 0x22B65633, 0xD0DDD530, - 0x0417B1DB, 0xF67C32D8, 0xE52CC12C, 0x1747422F, - 0x49547E0B, 0xBB3FFD08, 0xA86F0EFC, 0x5A048DFF, - 0x8ECEE914, 0x7CA56A17, 0x6FF599E3, 0x9D9E1AE0, - 0xD3D3E1AB, 0x21B862A8, 0x32E8915C, 0xC083125F, - 0x144976B4, 0xE622F5B7, 0xF5720643, 0x07198540, - 0x590AB964, 0xAB613A67, 0xB831C993, 0x4A5A4A90, - 0x9E902E7B, 0x6CFBAD78, 0x7FAB5E8C, 0x8DC0DD8F, - 0xE330A81A, 0x115B2B19, 0x020BD8ED, 0xF0605BEE, - 0x24AA3F05, 0xD6C1BC06, 0xC5914FF2, 0x37FACCF1, - 0x69E9F0D5, 0x9B8273D6, 0x88D28022, 0x7AB90321, - 0xAE7367CA, 0x5C18E4C9, 0x4F48173D, 0xBD23943E, - 0xF36E6F75, 0x0105EC76, 0x12551F82, 0xE03E9C81, - 0x34F4F86A, 0xC69F7B69, 0xD5CF889D, 0x27A40B9E, - 0x79B737BA, 0x8BDCB4B9, 0x988C474D, 0x6AE7C44E, - 0xBE2DA0A5, 0x4C4623A6, 0x5F16D052, 0xAD7D5351 + 0x00000000, 0xF26B8303, 0xE13B70F7, 0x1350F3F4, 0xC79A971F, 0x35F1141C, 0x26A1E7E8, + 0xD4CA64EB, 0x8AD958CF, 0x78B2DBCC, 0x6BE22838, 0x9989AB3B, 0x4D43CFD0, 0xBF284CD3, + 0xAC78BF27, 0x5E133C24, 0x105EC76F, 0xE235446C, 0xF165B798, 0x030E349B, 0xD7C45070, + 0x25AFD373, 0x36FF2087, 0xC494A384, 0x9A879FA0, 0x68EC1CA3, 0x7BBCEF57, 0x89D76C54, + 0x5D1D08BF, 0xAF768BBC, 0xBC267848, 0x4E4DFB4B, 0x20BD8EDE, 0xD2D60DDD, 0xC186FE29, + 0x33ED7D2A, 0xE72719C1, 0x154C9AC2, 0x061C6936, 0xF477EA35, 0xAA64D611, 0x580F5512, + 0x4B5FA6E6, 0xB93425E5, 0x6DFE410E, 0x9F95C20D, 0x8CC531F9, 0x7EAEB2FA, 0x30E349B1, + 0xC288CAB2, 0xD1D83946, 0x23B3BA45, 0xF779DEAE, 0x05125DAD, 0x1642AE59, 0xE4292D5A, + 0xBA3A117E, 0x4851927D, 0x5B016189, 0xA96AE28A, 0x7DA08661, 0x8FCB0562, 0x9C9BF696, + 0x6EF07595, 0x417B1DBC, 0xB3109EBF, 0xA0406D4B, 0x522BEE48, 0x86E18AA3, 0x748A09A0, + 0x67DAFA54, 0x95B17957, 0xCBA24573, 0x39C9C670, 0x2A993584, 0xD8F2B687, 0x0C38D26C, + 0xFE53516F, 0xED03A29B, 0x1F682198, 0x5125DAD3, 0xA34E59D0, 0xB01EAA24, 0x42752927, + 0x96BF4DCC, 0x64D4CECF, 0x77843D3B, 0x85EFBE38, 0xDBFC821C, 0x2997011F, 0x3AC7F2EB, + 0xC8AC71E8, 0x1C661503, 0xEE0D9600, 0xFD5D65F4, 0x0F36E6F7, 0x61C69362, 0x93AD1061, + 0x80FDE395, 0x72966096, 0xA65C047D, 0x5437877E, 0x4767748A, 0xB50CF789, 0xEB1FCBAD, + 0x197448AE, 0x0A24BB5A, 0xF84F3859, 0x2C855CB2, 0xDEEEDFB1, 0xCDBE2C45, 0x3FD5AF46, + 0x7198540D, 0x83F3D70E, 0x90A324FA, 0x62C8A7F9, 0xB602C312, 0x44694011, 0x5739B3E5, + 0xA55230E6, 0xFB410CC2, 0x092A8FC1, 0x1A7A7C35, 0xE811FF36, 0x3CDB9BDD, 0xCEB018DE, + 0xDDE0EB2A, 0x2F8B6829, 0x82F63B78, 0x709DB87B, 0x63CD4B8F, 0x91A6C88C, 0x456CAC67, + 0xB7072F64, 0xA457DC90, 0x563C5F93, 0x082F63B7, 0xFA44E0B4, 0xE9141340, 0x1B7F9043, + 0xCFB5F4A8, 0x3DDE77AB, 0x2E8E845F, 0xDCE5075C, 0x92A8FC17, 0x60C37F14, 0x73938CE0, + 0x81F80FE3, 0x55326B08, 0xA759E80B, 0xB4091BFF, 0x466298FC, 0x1871A4D8, 0xEA1A27DB, + 0xF94AD42F, 0x0B21572C, 0xDFEB33C7, 0x2D80B0C4, 0x3ED04330, 0xCCBBC033, 0xA24BB5A6, + 0x502036A5, 0x4370C551, 0xB11B4652, 0x65D122B9, 0x97BAA1BA, 0x84EA524E, 0x7681D14D, + 0x2892ED69, 0xDAF96E6A, 0xC9A99D9E, 0x3BC21E9D, 0xEF087A76, 0x1D63F975, 0x0E330A81, + 0xFC588982, 0xB21572C9, 0x407EF1CA, 0x532E023E, 0xA145813D, 0x758FE5D6, 0x87E466D5, + 0x94B49521, 0x66DF1622, 0x38CC2A06, 0xCAA7A905, 0xD9F75AF1, 0x2B9CD9F2, 0xFF56BD19, + 0x0D3D3E1A, 0x1E6DCDEE, 0xEC064EED, 0xC38D26C4, 0x31E6A5C7, 0x22B65633, 0xD0DDD530, + 0x0417B1DB, 0xF67C32D8, 0xE52CC12C, 0x1747422F, 0x49547E0B, 0xBB3FFD08, 0xA86F0EFC, + 0x5A048DFF, 0x8ECEE914, 0x7CA56A17, 0x6FF599E3, 0x9D9E1AE0, 0xD3D3E1AB, 0x21B862A8, + 0x32E8915C, 0xC083125F, 0x144976B4, 0xE622F5B7, 0xF5720643, 0x07198540, 0x590AB964, + 0xAB613A67, 0xB831C993, 0x4A5A4A90, 0x9E902E7B, 0x6CFBAD78, 0x7FAB5E8C, 0x8DC0DD8F, + 0xE330A81A, 0x115B2B19, 0x020BD8ED, 0xF0605BEE, 0x24AA3F05, 0xD6C1BC06, 0xC5914FF2, + 0x37FACCF1, 0x69E9F0D5, 0x9B8273D6, 0x88D28022, 0x7AB90321, 0xAE7367CA, 0x5C18E4C9, + 0x4F48173D, 0xBD23943E, 0xF36E6F75, 0x0105EC76, 0x12551F82, 0xE03E9C81, 0x34F4F86A, + 0xC69F7B69, 0xD5CF889D, 0x27A40B9E, 0x79B737BA, 0x8BDCB4B9, 0x988C474D, 0x6AE7C44E, + 0xBE2DA0A5, 0x4C4623A6, 0x5F16D052, 0xAD7D5351 }; static const uint32_t crc32_table_ieee_norm[256] = { - 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, - 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005, - 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, - 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd, - 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, - 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75, - 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, - 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd, - 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039, - 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, - 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81, - 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d, - 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49, - 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95, - 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, - 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, - 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae, - 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072, - 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, - 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, - 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde, - 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, - 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066, - 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, - 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, - 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692, - 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6, - 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a, - 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e, - 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, - 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, - 0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a, - 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, - 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb, - 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, - 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53, - 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47, - 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b, - 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff, - 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, - 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, - 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b, - 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, - 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3, - 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, - 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, - 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f, - 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3, - 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, - 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, - 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8, - 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, - 0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30, - 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, - 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, - 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654, - 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, - 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c, - 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18, - 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, - 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, - 0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c, - 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668, - 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4 + 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b, 0x1a864db2, + 0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, 0x350c9b64, 0x31cd86d3, + 0x3c8ea00a, 0x384fbdbd, 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, 0x5f15adac, + 0x5bd4b01b, 0x569796c2, 0x52568b75, 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, + 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, + 0x95609039, 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58, 0xbaea46ef, + 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d, 0xd4326d90, + 0xd0f37027, 0xddb056fe, 0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95, + 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, + 0xec7dd02d, 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, + 0x2e003dc5, 0x2ac12072, 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, 0x018aeb13, + 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde, + 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, + 0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, 0xaca5c697, 0xa864db20, + 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692, 0x8aad2b2f, + 0x8e6c3698, 0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a, + 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e, 0xf3b06b3b, 0xf771768c, 0xfa325055, + 0xfef34de2, 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34, + 0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, 0x7a089632, + 0x7ec98b85, 0x738aad5c, 0x774bb0eb, 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, + 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53, 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, + 0x285e1d47, 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b, 0x0315d626, 0x07d4cb91, + 0x0a97ed48, 0x0e56f0ff, 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e, + 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b, + 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, + 0xc960ebb3, 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, 0xae3afba2, 0xaafbe615, + 0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f, 0x8832161a, + 0x8cf30bad, 0x81b02d74, 0x857130c3, 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, + 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, 0x7b827d21, 0x7f436096, 0x7200464f, + 0x76c15bf8, 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e, + 0x18197087, 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, 0x3793a651, + 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654, + 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, + 0xdbee767c, 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18, 0xf0a5bd1d, 0xf464a0aa, + 0xf9278673, 0xfde69bc4, 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, + 0x9e7d9662, 0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668, + 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4 }; static const uint32_t crc32_table_gzip_refl[256] = { - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, - 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, - 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, - 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, - 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, - 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, - 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, - 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, - 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, - 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, - 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, - 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, - 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, - 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, - 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, - 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, - 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, - 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, - 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, - 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, - 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, - 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, - 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, - 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, - 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, - 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, - 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, - 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, - 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, - 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, - 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, - 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, - 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, - 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, - 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, - 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, - 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, - 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, - 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, - 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, - 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, - 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, - 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, - 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, - 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, - 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, - 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, - 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, - 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, - 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, - 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, - 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, - 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, - 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, - 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, - 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, - 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, - 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, - 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, - 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, + 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, + 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, + 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, + 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, + 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, + 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, + 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, + 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, + 0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, + 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, + 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, + 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, + 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, + 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, + 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, + 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, + 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, + 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, + 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, + 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2, 0x1e01f268, + 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, + 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, + 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, + 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, + 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, + 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, + 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, + 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, + 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, + 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, + 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, + 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, + 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, + 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, + 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d }; -uint16_t crc16_t10dif_base(uint16_t seed, uint8_t * buf, uint64_t len) +uint16_t +crc16_t10dif_base(uint16_t seed, uint8_t *buf, uint64_t len) { - int i; - uint16_t crc = seed; + int i; + uint16_t crc = seed; - for (i = 0; i < len; i++) - crc = (crc << 8) ^ crc16tab[((crc >> 8) ^ *buf++) & 0x00FF]; + for (i = 0; i < len; i++) + crc = (crc << 8) ^ crc16tab[((crc >> 8) ^ *buf++) & 0x00FF]; - return crc; + return crc; } -uint16_t crc16_t10dif_copy_base(uint16_t seed, uint8_t * dst, uint8_t * src, uint64_t len) +uint16_t +crc16_t10dif_copy_base(uint16_t seed, uint8_t *dst, uint8_t *src, uint64_t len) { - int i; - uint16_t crc = seed; + int i; + uint16_t crc = seed; - for (i = 0; i < len; i++) { - crc = (crc << 8) ^ crc16tab[((crc >> 8) ^ *src) & 0x00FF]; - *dst++ = *src++; - } + for (i = 0; i < len; i++) { + crc = (crc << 8) ^ crc16tab[((crc >> 8) ^ *src) & 0x00FF]; + *dst++ = *src++; + } - return crc; + return crc; } -unsigned int crc32_iscsi_base(unsigned char *buffer, int len, unsigned int crc_init) +unsigned int +crc32_iscsi_base(unsigned char *buffer, int len, unsigned int crc_init) { - unsigned int crc; - unsigned char *p_buf; - unsigned char *p_end = buffer + len; + unsigned int crc; + unsigned char *p_buf; + unsigned char *p_end = buffer + len; - p_buf = buffer; - crc = crc_init; + p_buf = buffer; + crc = crc_init; - while (p_buf < p_end) { - crc = (crc >> 8) ^ crc32_table_iscsi_refl[(crc & 0x000000FF) ^ *p_buf++]; - } - return crc; + while (p_buf < p_end) { + crc = (crc >> 8) ^ crc32_table_iscsi_refl[(crc & 0x000000FF) ^ *p_buf++]; + } + return crc; } -uint32_t crc32_ieee_base(uint32_t seed, uint8_t * buf, uint64_t len) +uint32_t +crc32_ieee_base(uint32_t seed, uint8_t *buf, uint64_t len) { - unsigned int crc = ~seed; + unsigned int crc = ~seed; - while (len--) { - crc = (crc << 8) ^ crc32_table_ieee_norm[((crc >> 24) ^ *buf) & 255]; - buf++; - } + while (len--) { + crc = (crc << 8) ^ crc32_table_ieee_norm[((crc >> 24) ^ *buf) & 255]; + buf++; + } - return ~crc; + return ~crc; } -uint32_t crc32_gzip_refl_base(uint32_t seed, uint8_t * buf, uint64_t len) +uint32_t +crc32_gzip_refl_base(uint32_t seed, uint8_t *buf, uint64_t len) { - unsigned int crc; - unsigned char *p_buf; - unsigned char *p_end = buf + len; + unsigned int crc; + unsigned char *p_buf; + unsigned char *p_end = buf + len; - p_buf = (unsigned char *)buf; - crc = ~seed; + p_buf = (unsigned char *) buf; + crc = ~seed; - while (p_buf < p_end) { - crc = (crc >> 8) ^ crc32_table_gzip_refl[(crc & 0x000000FF) ^ *p_buf++]; - } + while (p_buf < p_end) { + crc = (crc >> 8) ^ crc32_table_gzip_refl[(crc & 0x000000FF) ^ *p_buf++]; + } - return ~crc; + return ~crc; } diff --git a/crc/crc_base_aliases.c b/crc/crc_base_aliases.c index a63f4e40..f9dbfa77 100644 --- a/crc/crc_base_aliases.c +++ b/crc/crc_base_aliases.c @@ -31,67 +31,80 @@ #include "crc64.h" #include -unsigned int crc32_iscsi(unsigned char *buffer, int len, unsigned int crc_init) +unsigned int +crc32_iscsi(unsigned char *buffer, int len, unsigned int crc_init) { - return crc32_iscsi_base(buffer, len, crc_init); + return crc32_iscsi_base(buffer, len, crc_init); } -uint16_t crc16_t10dif(uint16_t seed, const unsigned char *buf, uint64_t len) +uint16_t +crc16_t10dif(uint16_t seed, const unsigned char *buf, uint64_t len) { - return crc16_t10dif_base(seed, (uint8_t *) buf, len); + return crc16_t10dif_base(seed, (uint8_t *) buf, len); } -uint16_t crc16_t10dif_copy(uint16_t seed, uint8_t * dst, uint8_t * src, uint64_t len) +uint16_t +crc16_t10dif_copy(uint16_t seed, uint8_t *dst, uint8_t *src, uint64_t len) { - return crc16_t10dif_copy_base(seed, dst, src, len); + return crc16_t10dif_copy_base(seed, dst, src, len); } -uint32_t crc32_ieee(uint32_t seed, const unsigned char *buf, uint64_t len) +uint32_t +crc32_ieee(uint32_t seed, const unsigned char *buf, uint64_t len) { - return crc32_ieee_base(seed, (uint8_t *) buf, len); + return crc32_ieee_base(seed, (uint8_t *) buf, len); } -uint32_t crc32_gzip_refl(uint32_t seed, const unsigned char *buf, uint64_t len) +uint32_t +crc32_gzip_refl(uint32_t seed, const unsigned char *buf, uint64_t len) { - return crc32_gzip_refl_base(seed, (uint8_t *) buf, len); + return crc32_gzip_refl_base(seed, (uint8_t *) buf, len); } -uint64_t crc64_ecma_refl(uint64_t seed, const uint8_t * buf, uint64_t len) +uint64_t +crc64_ecma_refl(uint64_t seed, const uint8_t *buf, uint64_t len) { - return crc64_ecma_refl_base(seed, buf, len); + return crc64_ecma_refl_base(seed, buf, len); } -uint64_t crc64_ecma_norm(uint64_t seed, const uint8_t * buf, uint64_t len) +uint64_t +crc64_ecma_norm(uint64_t seed, const uint8_t *buf, uint64_t len) { - return crc64_ecma_norm_base(seed, buf, len); + return crc64_ecma_norm_base(seed, buf, len); } -uint64_t crc64_iso_refl(uint64_t seed, const uint8_t * buf, uint64_t len) +uint64_t +crc64_iso_refl(uint64_t seed, const uint8_t *buf, uint64_t len) { - return crc64_iso_refl_base(seed, buf, len); + return crc64_iso_refl_base(seed, buf, len); } -uint64_t crc64_iso_norm(uint64_t seed, const uint8_t * buf, uint64_t len) +uint64_t +crc64_iso_norm(uint64_t seed, const uint8_t *buf, uint64_t len) { - return crc64_iso_norm_base(seed, buf, len); + return crc64_iso_norm_base(seed, buf, len); } -uint64_t crc64_jones_refl(uint64_t seed, const uint8_t * buf, uint64_t len) +uint64_t +crc64_jones_refl(uint64_t seed, const uint8_t *buf, uint64_t len) { - return crc64_jones_refl_base(seed, buf, len); + return crc64_jones_refl_base(seed, buf, len); } -uint64_t crc64_jones_norm(uint64_t seed, const uint8_t * buf, uint64_t len) +uint64_t +crc64_jones_norm(uint64_t seed, const uint8_t *buf, uint64_t len) { - return crc64_jones_norm_base(seed, buf, len); + return crc64_jones_norm_base(seed, buf, len); } -uint64_t crc64_rocksoft_refl(uint64_t seed, const uint8_t * buf, uint64_t len) +uint64_t +crc64_rocksoft_refl(uint64_t seed, const uint8_t *buf, uint64_t len) { - return crc64_rocksoft_refl_base(seed, buf, len); + return crc64_rocksoft_refl_base(seed, buf, len); } -uint64_t crc64_rocksoft_norm(uint64_t seed, const uint8_t * buf, uint64_t len) +uint64_t +crc64_rocksoft_norm(uint64_t seed, const uint8_t *buf, uint64_t len) { - return crc64_rocksoft_norm_base(seed, buf, len); + return crc64_rocksoft_norm_base(seed, buf, len); } diff --git a/crc/crc_ref.h b/crc/crc_ref.h index e97a60b5..e1885191 100644 --- a/crc/crc_ref.h +++ b/crc/crc_ref.h @@ -37,100 +37,105 @@ extern "C" { #include "crc.h" #ifdef _MSC_VER -# define inline __inline +#define inline __inline #endif -#define MAX_ITER 8 +#define MAX_ITER 8 // iSCSI CRC reference function -static inline unsigned int crc32_iscsi_ref(unsigned char *buffer, int len, unsigned int crc_init) +static inline unsigned int +crc32_iscsi_ref(unsigned char *buffer, int len, unsigned int crc_init) { - uint64_t rem = crc_init; - int i, j; - - uint32_t poly = 0x82F63B78; - - for (i = 0; i < len; i++) { - rem = rem ^ (buffer[i]); - for (j = 0; j < MAX_ITER; j++) { - rem = (rem & 0x1ULL) ? (rem >> 1) ^ poly : (rem >> 1); - } - } - return rem; + uint64_t rem = crc_init; + int i, j; + + uint32_t poly = 0x82F63B78; + + for (i = 0; i < len; i++) { + rem = rem ^ (buffer[i]); + for (j = 0; j < MAX_ITER; j++) { + rem = (rem & 0x1ULL) ? (rem >> 1) ^ poly : (rem >> 1); + } + } + return rem; } // crc16_t10dif reference function, slow crc16 from the definition. -static inline uint16_t crc16_t10dif_ref(uint16_t seed, uint8_t * buf, uint64_t len) +static inline uint16_t +crc16_t10dif_ref(uint16_t seed, uint8_t *buf, uint64_t len) { - size_t rem = seed; - unsigned int i, j; - - uint16_t poly = 0x8bb7; // t10dif standard - - for (i = 0; i < len; i++) { - rem = rem ^ (buf[i] << 8); - for (j = 0; j < MAX_ITER; j++) { - rem = rem << 1; - rem = (rem & 0x10000) ? rem ^ poly : rem; - } - } - return rem; + size_t rem = seed; + unsigned int i, j; + + uint16_t poly = 0x8bb7; // t10dif standard + + for (i = 0; i < len; i++) { + rem = rem ^ (buf[i] << 8); + for (j = 0; j < MAX_ITER; j++) { + rem = rem << 1; + rem = (rem & 0x10000) ? rem ^ poly : rem; + } + } + return rem; } // crc16_t10dif reference function, slow crc16 from the definition. -static inline uint16_t crc16_t10dif_copy_ref(uint16_t seed, uint8_t * dst, uint8_t * src, uint64_t len) +static inline uint16_t +crc16_t10dif_copy_ref(uint16_t seed, uint8_t *dst, uint8_t *src, uint64_t len) { - size_t rem = seed; - unsigned int i, j; - - uint16_t poly = 0x8bb7; // t10dif standard - - for (i = 0; i < len; i++) { - rem = rem ^ (src[i] << 8); - dst[i] = src[i]; - for (j = 0; j < MAX_ITER; j++) { - rem = rem << 1; - rem = (rem & 0x10000) ? rem ^ poly : rem; - } - } - return rem; + size_t rem = seed; + unsigned int i, j; + + uint16_t poly = 0x8bb7; // t10dif standard + + for (i = 0; i < len; i++) { + rem = rem ^ (src[i] << 8); + dst[i] = src[i]; + for (j = 0; j < MAX_ITER; j++) { + rem = rem << 1; + rem = (rem & 0x10000) ? rem ^ poly : rem; + } + } + return rem; } // crc32_ieee reference function, slow crc32 from the definition. -static inline uint32_t crc32_ieee_ref(uint32_t seed, uint8_t * buf, uint64_t len) +static inline uint32_t +crc32_ieee_ref(uint32_t seed, uint8_t *buf, uint64_t len) { - uint64_t rem = ~seed; - unsigned int i, j; - - uint32_t poly = 0x04C11DB7; // IEEE standard - - for (i = 0; i < len; i++) { - rem = rem ^ ((uint64_t) buf[i] << 24); - for (j = 0; j < MAX_ITER; j++) { - rem = rem << 1; - rem = (rem & 0x100000000ULL) ? rem ^ poly : rem; - } - } - return ~rem; + uint64_t rem = ~seed; + unsigned int i, j; + + uint32_t poly = 0x04C11DB7; // IEEE standard + + for (i = 0; i < len; i++) { + rem = rem ^ ((uint64_t) buf[i] << 24); + for (j = 0; j < MAX_ITER; j++) { + rem = rem << 1; + rem = (rem & 0x100000000ULL) ? rem ^ poly : rem; + } + } + return ~rem; } // crc32_gzip_refl reference function, slow crc32 from the definition. // Please get difference details between crc32_gzip_ref and crc32_ieee // from crc.h. -static inline uint32_t crc32_gzip_refl_ref(uint32_t seed, uint8_t * buf, uint64_t len) +static inline uint32_t +crc32_gzip_refl_ref(uint32_t seed, uint8_t *buf, uint64_t len) { - uint64_t rem = ~seed; - int i, j; - - uint32_t poly = 0xEDB88320; // IEEE standard - - for (i = 0; i < len; i++) { - rem = rem ^ (buf[i]); - for (j = 0; j < MAX_ITER; j++) { - rem = (rem & 0x1ULL) ? (rem >> 1) ^ poly : (rem >> 1); - } - } - return ~rem; + uint64_t rem = ~seed; + int i, j; + + uint32_t poly = 0xEDB88320; // IEEE standard + + for (i = 0; i < len; i++) { + rem = rem ^ (buf[i]); + for (j = 0; j < MAX_ITER; j++) { + rem = (rem & 0x1ULL) ? (rem >> 1) ^ poly : (rem >> 1); + } + } + return ~rem; } #ifdef __cplusplus diff --git a/crc/crc_simple_test.c b/crc/crc_simple_test.c index 4799f874..1c15294e 100644 --- a/crc/crc_simple_test.c +++ b/crc/crc_simple_test.c @@ -36,29 +36,30 @@ const uint16_t t10_dif_expected = 0x60b3; const uint32_t init_crc_32 = 0x12345678; const uint32_t ieee_expected = 0x2ceadbe3; -int main(void) +int +main(void) { - unsigned char p_buf[48]; - uint16_t t10_dif_computed; - uint32_t ieee_computed; - int i; + unsigned char p_buf[48]; + uint16_t t10_dif_computed; + uint32_t ieee_computed; + int i; - for (i = 0; i < 48; i++) - p_buf[i] = i; + for (i = 0; i < 48; i++) + p_buf[i] = i; - t10_dif_computed = crc16_t10dif(init_crc_16, p_buf, 48); + t10_dif_computed = crc16_t10dif(init_crc_16, p_buf, 48); - if (t10_dif_computed != t10_dif_expected) - printf("WRONG CRC-16(T10 DIF) value\n"); - else - printf("CORRECT CRC-16(T10 DIF) value\n"); + if (t10_dif_computed != t10_dif_expected) + printf("WRONG CRC-16(T10 DIF) value\n"); + else + printf("CORRECT CRC-16(T10 DIF) value\n"); - ieee_computed = crc32_ieee(init_crc_32, p_buf, 48); + ieee_computed = crc32_ieee(init_crc_32, p_buf, 48); - if (ieee_computed != ieee_expected) - printf("WRONG CRC-32(IEEE) value\n"); - else - printf("CORRECT CRC-32(IEEE) value\n"); + if (ieee_computed != ieee_expected) + printf("WRONG CRC-32(IEEE) value\n"); + else + printf("CORRECT CRC-32(IEEE) value\n"); - return 0; + return 0; } From 300260a4d902423a8a69f0f7d74e6abaa33ded27 Mon Sep 17 00:00:00 2001 From: Marcel Cornu Date: Fri, 19 Apr 2024 17:08:53 +0100 Subject: [PATCH 03/19] erasure_code: reformat using new code style Signed-off-by: Marcel Cornu --- erasure_code/aarch64/ec_aarch64_dispatcher.c | 100 +- .../aarch64/ec_aarch64_highlevel_func.c | 461 +- erasure_code/ec_base.c | 513 +- erasure_code/ec_base.h | 11184 +++++++--------- erasure_code/ec_base_aliases.c | 37 +- erasure_code/ec_highlevel_func.c | 932 +- erasure_code/erasure_code_base_perf.c | 237 +- erasure_code/erasure_code_base_test.c | 1369 +- erasure_code/erasure_code_perf.c | 430 +- erasure_code/erasure_code_test.c | 1430 +- erasure_code/erasure_code_update_perf.c | 612 +- erasure_code/erasure_code_update_test.c | 1809 ++- erasure_code/gen_rs_matrix_limits.c | 195 +- erasure_code/gf_inverse_test.c | 330 +- erasure_code/gf_vect_dot_prod_1tbl.c | 201 +- erasure_code/gf_vect_dot_prod_base_test.c | 471 +- erasure_code/gf_vect_dot_prod_perf.c | 218 +- erasure_code/gf_vect_dot_prod_test.c | 835 +- erasure_code/gf_vect_mad_test.c | 795 +- erasure_code/gf_vect_mul_base_test.c | 199 +- erasure_code/gf_vect_mul_perf.c | 68 +- erasure_code/gf_vect_mul_test.c | 291 +- erasure_code/ppc64le/ec_base_vsx.c | 169 +- erasure_code/ppc64le/ec_base_vsx.h | 93 +- erasure_code/ppc64le/gf_2vect_dot_prod_vsx.c | 131 +- erasure_code/ppc64le/gf_2vect_mad_vsx.c | 103 +- erasure_code/ppc64le/gf_3vect_dot_prod_vsx.c | 201 +- erasure_code/ppc64le/gf_3vect_mad_vsx.c | 135 +- erasure_code/ppc64le/gf_4vect_dot_prod_vsx.c | 241 +- erasure_code/ppc64le/gf_4vect_mad_vsx.c | 199 +- erasure_code/ppc64le/gf_5vect_dot_prod_vsx.c | 283 +- erasure_code/ppc64le/gf_5vect_mad_vsx.c | 237 +- erasure_code/ppc64le/gf_6vect_dot_prod_vsx.c | 325 +- erasure_code/ppc64le/gf_6vect_mad_vsx.c | 277 +- erasure_code/ppc64le/gf_vect_dot_prod_vsx.c | 135 +- erasure_code/ppc64le/gf_vect_mad_vsx.c | 89 +- erasure_code/ppc64le/gf_vect_mul_vsx.c | 109 +- 37 files changed, 11680 insertions(+), 13764 deletions(-) diff --git a/erasure_code/aarch64/ec_aarch64_dispatcher.c b/erasure_code/aarch64/ec_aarch64_dispatcher.c index 0a116040..7f90dcb3 100644 --- a/erasure_code/aarch64/ec_aarch64_dispatcher.c +++ b/erasure_code/aarch64/ec_aarch64_dispatcher.c @@ -31,94 +31,86 @@ DEFINE_INTERFACE_DISPATCHER(gf_vect_dot_prod) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); + unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_SVE) - return PROVIDER_INFO(gf_vect_dot_prod_sve); - if (auxval & HWCAP_ASIMD) - return PROVIDER_INFO(gf_vect_dot_prod_neon); + if (auxval & HWCAP_SVE) + return PROVIDER_INFO(gf_vect_dot_prod_sve); + if (auxval & HWCAP_ASIMD) + return PROVIDER_INFO(gf_vect_dot_prod_neon); #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_SVE_KEY)) - return PROVIDER_INFO(gf_vect_dot_prod_sve); - return PROVIDER_INFO(gf_vect_dot_prod_neon); + if (sysctlEnabled(SYSCTL_SVE_KEY)) + return PROVIDER_INFO(gf_vect_dot_prod_sve); + return PROVIDER_INFO(gf_vect_dot_prod_neon); #endif - return PROVIDER_BASIC(gf_vect_dot_prod); - + return PROVIDER_BASIC(gf_vect_dot_prod); } DEFINE_INTERFACE_DISPATCHER(gf_vect_mad) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); + unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_SVE) - return PROVIDER_INFO(gf_vect_mad_sve); - if (auxval & HWCAP_ASIMD) - return PROVIDER_INFO(gf_vect_mad_neon); + if (auxval & HWCAP_SVE) + return PROVIDER_INFO(gf_vect_mad_sve); + if (auxval & HWCAP_ASIMD) + return PROVIDER_INFO(gf_vect_mad_neon); #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_SVE_KEY)) - return PROVIDER_INFO(gf_vect_mad_sve); - return PROVIDER_INFO(gf_vect_mad_neon); + if (sysctlEnabled(SYSCTL_SVE_KEY)) + return PROVIDER_INFO(gf_vect_mad_sve); + return PROVIDER_INFO(gf_vect_mad_neon); #endif - return PROVIDER_BASIC(gf_vect_mad); - + return PROVIDER_BASIC(gf_vect_mad); } DEFINE_INTERFACE_DISPATCHER(ec_encode_data) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); + unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_SVE) - return PROVIDER_INFO(ec_encode_data_sve); - if (auxval & HWCAP_ASIMD) - return PROVIDER_INFO(ec_encode_data_neon); + if (auxval & HWCAP_SVE) + return PROVIDER_INFO(ec_encode_data_sve); + if (auxval & HWCAP_ASIMD) + return PROVIDER_INFO(ec_encode_data_neon); #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_SVE_KEY)) - return PROVIDER_INFO(ec_encode_data_sve); - return PROVIDER_INFO(ec_encode_data_neon); + if (sysctlEnabled(SYSCTL_SVE_KEY)) + return PROVIDER_INFO(ec_encode_data_sve); + return PROVIDER_INFO(ec_encode_data_neon); #endif - return PROVIDER_BASIC(ec_encode_data); - + return PROVIDER_BASIC(ec_encode_data); } DEFINE_INTERFACE_DISPATCHER(ec_encode_data_update) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); + unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_SVE) - return PROVIDER_INFO(ec_encode_data_update_sve); - if (auxval & HWCAP_ASIMD) - return PROVIDER_INFO(ec_encode_data_update_neon); + if (auxval & HWCAP_SVE) + return PROVIDER_INFO(ec_encode_data_update_sve); + if (auxval & HWCAP_ASIMD) + return PROVIDER_INFO(ec_encode_data_update_neon); #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_SVE_KEY)) - return PROVIDER_INFO(ec_encode_data_update_sve); - return PROVIDER_INFO(ec_encode_data_update_neon); + if (sysctlEnabled(SYSCTL_SVE_KEY)) + return PROVIDER_INFO(ec_encode_data_update_sve); + return PROVIDER_INFO(ec_encode_data_update_neon); #endif - return PROVIDER_BASIC(ec_encode_data_update); - + return PROVIDER_BASIC(ec_encode_data_update); } DEFINE_INTERFACE_DISPATCHER(gf_vect_mul) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); + unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_SVE) - return PROVIDER_INFO(gf_vect_mul_sve); - if (auxval & HWCAP_ASIMD) - return PROVIDER_INFO(gf_vect_mul_neon); + if (auxval & HWCAP_SVE) + return PROVIDER_INFO(gf_vect_mul_sve); + if (auxval & HWCAP_ASIMD) + return PROVIDER_INFO(gf_vect_mul_neon); #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_SVE_KEY)) - return PROVIDER_INFO(gf_vect_mul_sve); - return PROVIDER_INFO(gf_vect_mul_neon); + if (sysctlEnabled(SYSCTL_SVE_KEY)) + return PROVIDER_INFO(gf_vect_mul_sve); + return PROVIDER_INFO(gf_vect_mul_neon); #endif - return PROVIDER_BASIC(gf_vect_mul); - + return PROVIDER_BASIC(gf_vect_mul); } -DEFINE_INTERFACE_DISPATCHER(ec_init_tables) -{ - return PROVIDER_BASIC(ec_init_tables); -} +DEFINE_INTERFACE_DISPATCHER(ec_init_tables) { return PROVIDER_BASIC(ec_init_tables); } diff --git a/erasure_code/aarch64/ec_aarch64_highlevel_func.c b/erasure_code/aarch64/ec_aarch64_highlevel_func.c index e001fd72..51f8ff02 100644 --- a/erasure_code/aarch64/ec_aarch64_highlevel_func.c +++ b/erasure_code/aarch64/ec_aarch64_highlevel_func.c @@ -29,236 +29,265 @@ #include "erasure_code.h" /*external function*/ -extern void gf_vect_dot_prod_neon(int len, int vlen, unsigned char *gftbls, - unsigned char **src, unsigned char *dest); -extern void gf_2vect_dot_prod_neon(int len, int vlen, unsigned char *gftbls, - unsigned char **src, unsigned char **dest); -extern void gf_3vect_dot_prod_neon(int len, int vlen, unsigned char *gftbls, - unsigned char **src, unsigned char **dest); -extern void gf_4vect_dot_prod_neon(int len, int vlen, unsigned char *gftbls, - unsigned char **src, unsigned char **dest); -extern void gf_5vect_dot_prod_neon(int len, int vlen, unsigned char *gftbls, - unsigned char **src, unsigned char **dest); -extern void gf_vect_mad_neon(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char *dest); -extern void gf_2vect_mad_neon(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest); -extern void gf_3vect_mad_neon(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest); -extern void gf_4vect_mad_neon(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest); -extern void gf_5vect_mad_neon(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest); -extern void gf_6vect_mad_neon(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest); +extern void +gf_vect_dot_prod_neon(int len, int vlen, unsigned char *gftbls, unsigned char **src, + unsigned char *dest); +extern void +gf_2vect_dot_prod_neon(int len, int vlen, unsigned char *gftbls, unsigned char **src, + unsigned char **dest); +extern void +gf_3vect_dot_prod_neon(int len, int vlen, unsigned char *gftbls, unsigned char **src, + unsigned char **dest); +extern void +gf_4vect_dot_prod_neon(int len, int vlen, unsigned char *gftbls, unsigned char **src, + unsigned char **dest); +extern void +gf_5vect_dot_prod_neon(int len, int vlen, unsigned char *gftbls, unsigned char **src, + unsigned char **dest); +extern void +gf_vect_mad_neon(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char *dest); +extern void +gf_2vect_mad_neon(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); +extern void +gf_3vect_mad_neon(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); +extern void +gf_4vect_mad_neon(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); +extern void +gf_5vect_mad_neon(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); +extern void +gf_6vect_mad_neon(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); -void ec_encode_data_neon(int len, int k, int rows, unsigned char *g_tbls, unsigned char **data, - unsigned char **coding) +void +ec_encode_data_neon(int len, int k, int rows, unsigned char *g_tbls, unsigned char **data, + unsigned char **coding) { - if (len < 16) { - ec_encode_data_base(len, k, rows, g_tbls, data, coding); - return; - } + if (len < 16) { + ec_encode_data_base(len, k, rows, g_tbls, data, coding); + return; + } - while (rows > 5) { - gf_5vect_dot_prod_neon(len, k, g_tbls, data, coding); - g_tbls += 5 * k * 32; - coding += 5; - rows -= 5; - } - switch (rows) { - case 5: - gf_5vect_dot_prod_neon(len, k, g_tbls, data, coding); - break; - case 4: - gf_4vect_dot_prod_neon(len, k, g_tbls, data, coding); - break; - case 3: - gf_3vect_dot_prod_neon(len, k, g_tbls, data, coding); - break; - case 2: - gf_2vect_dot_prod_neon(len, k, g_tbls, data, coding); - break; - case 1: - gf_vect_dot_prod_neon(len, k, g_tbls, data, *coding); - break; - case 0: - break; - default: - break; - } + while (rows > 5) { + gf_5vect_dot_prod_neon(len, k, g_tbls, data, coding); + g_tbls += 5 * k * 32; + coding += 5; + rows -= 5; + } + switch (rows) { + case 5: + gf_5vect_dot_prod_neon(len, k, g_tbls, data, coding); + break; + case 4: + gf_4vect_dot_prod_neon(len, k, g_tbls, data, coding); + break; + case 3: + gf_3vect_dot_prod_neon(len, k, g_tbls, data, coding); + break; + case 2: + gf_2vect_dot_prod_neon(len, k, g_tbls, data, coding); + break; + case 1: + gf_vect_dot_prod_neon(len, k, g_tbls, data, *coding); + break; + case 0: + break; + default: + break; + } } -void ec_encode_data_update_neon(int len, int k, int rows, int vec_i, unsigned char *g_tbls, - unsigned char *data, unsigned char **coding) +void +ec_encode_data_update_neon(int len, int k, int rows, int vec_i, unsigned char *g_tbls, + unsigned char *data, unsigned char **coding) { - if (len < 16) { - ec_encode_data_update_base(len, k, rows, vec_i, g_tbls, data, coding); - return; - } - while (rows > 6) { - gf_6vect_mad_neon(len, k, vec_i, g_tbls, data, coding); - g_tbls += 6 * k * 32; - coding += 6; - rows -= 6; - } - switch (rows) { - case 6: - gf_6vect_mad_neon(len, k, vec_i, g_tbls, data, coding); - break; - case 5: - gf_5vect_mad_neon(len, k, vec_i, g_tbls, data, coding); - break; - case 4: - gf_4vect_mad_neon(len, k, vec_i, g_tbls, data, coding); - break; - case 3: - gf_3vect_mad_neon(len, k, vec_i, g_tbls, data, coding); - break; - case 2: - gf_2vect_mad_neon(len, k, vec_i, g_tbls, data, coding); - break; - case 1: - gf_vect_mad_neon(len, k, vec_i, g_tbls, data, *coding); - break; - case 0: - break; - } + if (len < 16) { + ec_encode_data_update_base(len, k, rows, vec_i, g_tbls, data, coding); + return; + } + while (rows > 6) { + gf_6vect_mad_neon(len, k, vec_i, g_tbls, data, coding); + g_tbls += 6 * k * 32; + coding += 6; + rows -= 6; + } + switch (rows) { + case 6: + gf_6vect_mad_neon(len, k, vec_i, g_tbls, data, coding); + break; + case 5: + gf_5vect_mad_neon(len, k, vec_i, g_tbls, data, coding); + break; + case 4: + gf_4vect_mad_neon(len, k, vec_i, g_tbls, data, coding); + break; + case 3: + gf_3vect_mad_neon(len, k, vec_i, g_tbls, data, coding); + break; + case 2: + gf_2vect_mad_neon(len, k, vec_i, g_tbls, data, coding); + break; + case 1: + gf_vect_mad_neon(len, k, vec_i, g_tbls, data, *coding); + break; + case 0: + break; + } } /* SVE */ -extern void gf_vect_dot_prod_sve(int len, int vlen, unsigned char *gftbls, - unsigned char **src, unsigned char *dest); -extern void gf_2vect_dot_prod_sve(int len, int vlen, unsigned char *gftbls, - unsigned char **src, unsigned char **dest); -extern void gf_3vect_dot_prod_sve(int len, int vlen, unsigned char *gftbls, - unsigned char **src, unsigned char **dest); -extern void gf_4vect_dot_prod_sve(int len, int vlen, unsigned char *gftbls, - unsigned char **src, unsigned char **dest); -extern void gf_5vect_dot_prod_sve(int len, int vlen, unsigned char *gftbls, - unsigned char **src, unsigned char **dest); -extern void gf_6vect_dot_prod_sve(int len, int vlen, unsigned char *gftbls, - unsigned char **src, unsigned char **dest); -extern void gf_7vect_dot_prod_sve(int len, int vlen, unsigned char *gftbls, - unsigned char **src, unsigned char **dest); -extern void gf_8vect_dot_prod_sve(int len, int vlen, unsigned char *gftbls, - unsigned char **src, unsigned char **dest); -extern void gf_vect_mad_sve(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char *dest); -extern void gf_2vect_mad_sve(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest); -extern void gf_3vect_mad_sve(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest); -extern void gf_4vect_mad_sve(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest); -extern void gf_5vect_mad_sve(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest); -extern void gf_6vect_mad_sve(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest); +extern void +gf_vect_dot_prod_sve(int len, int vlen, unsigned char *gftbls, unsigned char **src, + unsigned char *dest); +extern void +gf_2vect_dot_prod_sve(int len, int vlen, unsigned char *gftbls, unsigned char **src, + unsigned char **dest); +extern void +gf_3vect_dot_prod_sve(int len, int vlen, unsigned char *gftbls, unsigned char **src, + unsigned char **dest); +extern void +gf_4vect_dot_prod_sve(int len, int vlen, unsigned char *gftbls, unsigned char **src, + unsigned char **dest); +extern void +gf_5vect_dot_prod_sve(int len, int vlen, unsigned char *gftbls, unsigned char **src, + unsigned char **dest); +extern void +gf_6vect_dot_prod_sve(int len, int vlen, unsigned char *gftbls, unsigned char **src, + unsigned char **dest); +extern void +gf_7vect_dot_prod_sve(int len, int vlen, unsigned char *gftbls, unsigned char **src, + unsigned char **dest); +extern void +gf_8vect_dot_prod_sve(int len, int vlen, unsigned char *gftbls, unsigned char **src, + unsigned char **dest); +extern void +gf_vect_mad_sve(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char *dest); +extern void +gf_2vect_mad_sve(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); +extern void +gf_3vect_mad_sve(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); +extern void +gf_4vect_mad_sve(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); +extern void +gf_5vect_mad_sve(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); +extern void +gf_6vect_mad_sve(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); -void ec_encode_data_sve(int len, int k, int rows, unsigned char *g_tbls, unsigned char **data, - unsigned char **coding) +void +ec_encode_data_sve(int len, int k, int rows, unsigned char *g_tbls, unsigned char **data, + unsigned char **coding) { - if (len < 16) { - ec_encode_data_base(len, k, rows, g_tbls, data, coding); - return; - } + if (len < 16) { + ec_encode_data_base(len, k, rows, g_tbls, data, coding); + return; + } - while (rows > 11) { - gf_6vect_dot_prod_sve(len, k, g_tbls, data, coding); - g_tbls += 6 * k * 32; - coding += 6; - rows -= 6; - } + while (rows > 11) { + gf_6vect_dot_prod_sve(len, k, g_tbls, data, coding); + g_tbls += 6 * k * 32; + coding += 6; + rows -= 6; + } - switch (rows) { - case 11: - /* 7 + 4 */ - gf_7vect_dot_prod_sve(len, k, g_tbls, data, coding); - g_tbls += 7 * k * 32; - coding += 7; - gf_4vect_dot_prod_sve(len, k, g_tbls, data, coding); - break; - case 10: - /* 6 + 4 */ - gf_6vect_dot_prod_sve(len, k, g_tbls, data, coding); - g_tbls += 6 * k * 32; - coding += 6; - gf_4vect_dot_prod_sve(len, k, g_tbls, data, coding); - break; - case 9: - /* 5 + 4 */ - gf_5vect_dot_prod_sve(len, k, g_tbls, data, coding); - g_tbls += 5 * k * 32; - coding += 5; - gf_4vect_dot_prod_sve(len, k, g_tbls, data, coding); - break; - case 8: - /* 4 + 4 */ - gf_4vect_dot_prod_sve(len, k, g_tbls, data, coding); - g_tbls += 4 * k * 32; - coding += 4; - gf_4vect_dot_prod_sve(len, k, g_tbls, data, coding); - break; - case 7: - gf_7vect_dot_prod_sve(len, k, g_tbls, data, coding); - break; - case 6: - gf_6vect_dot_prod_sve(len, k, g_tbls, data, coding); - break; - case 5: - gf_5vect_dot_prod_sve(len, k, g_tbls, data, coding); - break; - case 4: - gf_4vect_dot_prod_sve(len, k, g_tbls, data, coding); - break; - case 3: - gf_3vect_dot_prod_sve(len, k, g_tbls, data, coding); - break; - case 2: - gf_2vect_dot_prod_sve(len, k, g_tbls, data, coding); - break; - case 1: - gf_vect_dot_prod_sve(len, k, g_tbls, data, *coding); - break; - default: - break; - } + switch (rows) { + case 11: + /* 7 + 4 */ + gf_7vect_dot_prod_sve(len, k, g_tbls, data, coding); + g_tbls += 7 * k * 32; + coding += 7; + gf_4vect_dot_prod_sve(len, k, g_tbls, data, coding); + break; + case 10: + /* 6 + 4 */ + gf_6vect_dot_prod_sve(len, k, g_tbls, data, coding); + g_tbls += 6 * k * 32; + coding += 6; + gf_4vect_dot_prod_sve(len, k, g_tbls, data, coding); + break; + case 9: + /* 5 + 4 */ + gf_5vect_dot_prod_sve(len, k, g_tbls, data, coding); + g_tbls += 5 * k * 32; + coding += 5; + gf_4vect_dot_prod_sve(len, k, g_tbls, data, coding); + break; + case 8: + /* 4 + 4 */ + gf_4vect_dot_prod_sve(len, k, g_tbls, data, coding); + g_tbls += 4 * k * 32; + coding += 4; + gf_4vect_dot_prod_sve(len, k, g_tbls, data, coding); + break; + case 7: + gf_7vect_dot_prod_sve(len, k, g_tbls, data, coding); + break; + case 6: + gf_6vect_dot_prod_sve(len, k, g_tbls, data, coding); + break; + case 5: + gf_5vect_dot_prod_sve(len, k, g_tbls, data, coding); + break; + case 4: + gf_4vect_dot_prod_sve(len, k, g_tbls, data, coding); + break; + case 3: + gf_3vect_dot_prod_sve(len, k, g_tbls, data, coding); + break; + case 2: + gf_2vect_dot_prod_sve(len, k, g_tbls, data, coding); + break; + case 1: + gf_vect_dot_prod_sve(len, k, g_tbls, data, *coding); + break; + default: + break; + } } -void ec_encode_data_update_sve(int len, int k, int rows, int vec_i, unsigned char *g_tbls, - unsigned char *data, unsigned char **coding) +void +ec_encode_data_update_sve(int len, int k, int rows, int vec_i, unsigned char *g_tbls, + unsigned char *data, unsigned char **coding) { - if (len < 16) { - ec_encode_data_update_base(len, k, rows, vec_i, g_tbls, data, coding); - return; - } - while (rows > 6) { - gf_6vect_mad_sve(len, k, vec_i, g_tbls, data, coding); - g_tbls += 6 * k * 32; - coding += 6; - rows -= 6; - } - switch (rows) { - case 6: - gf_6vect_mad_sve(len, k, vec_i, g_tbls, data, coding); - break; - case 5: - gf_5vect_mad_sve(len, k, vec_i, g_tbls, data, coding); - break; - case 4: - gf_4vect_mad_sve(len, k, vec_i, g_tbls, data, coding); - break; - case 3: - gf_3vect_mad_sve(len, k, vec_i, g_tbls, data, coding); - break; - case 2: - gf_2vect_mad_sve(len, k, vec_i, g_tbls, data, coding); - break; - case 1: - gf_vect_mad_sve(len, k, vec_i, g_tbls, data, *coding); - break; - default: - break; - } + if (len < 16) { + ec_encode_data_update_base(len, k, rows, vec_i, g_tbls, data, coding); + return; + } + while (rows > 6) { + gf_6vect_mad_sve(len, k, vec_i, g_tbls, data, coding); + g_tbls += 6 * k * 32; + coding += 6; + rows -= 6; + } + switch (rows) { + case 6: + gf_6vect_mad_sve(len, k, vec_i, g_tbls, data, coding); + break; + case 5: + gf_5vect_mad_sve(len, k, vec_i, g_tbls, data, coding); + break; + case 4: + gf_4vect_mad_sve(len, k, vec_i, g_tbls, data, coding); + break; + case 3: + gf_3vect_mad_sve(len, k, vec_i, g_tbls, data, coding); + break; + case 2: + gf_2vect_mad_sve(len, k, vec_i, g_tbls, data, coding); + break; + case 1: + gf_vect_mad_sve(len, k, vec_i, g_tbls, data, *coding); + break; + default: + break; + } } diff --git a/erasure_code/ec_base.c b/erasure_code/ec_base.c index 7f027cb5..5e8fa4df 100644 --- a/erasure_code/ec_base.c +++ b/erasure_code/ec_base.c @@ -28,322 +28,331 @@ **********************************************************************/ #include -#include // for memset +#include // for memset #include #include "erasure_code.h" -#include "ec_base.h" // for GF tables +#include "ec_base.h" // for GF tables -void ec_init_tables_base(int k, int rows, unsigned char *a, unsigned char *g_tbls) +void +ec_init_tables_base(int k, int rows, unsigned char *a, unsigned char *g_tbls) { - int i, j; - - for (i = 0; i < rows; i++) { - for (j = 0; j < k; j++) { - gf_vect_mul_init(*a++, g_tbls); - g_tbls += 32; - } - } + int i, j; + + for (i = 0; i < rows; i++) { + for (j = 0; j < k; j++) { + gf_vect_mul_init(*a++, g_tbls); + g_tbls += 32; + } + } } -unsigned char gf_mul(unsigned char a, unsigned char b) +unsigned char +gf_mul(unsigned char a, unsigned char b) { #ifndef GF_LARGE_TABLES - int i; + int i; - if ((a == 0) || (b == 0)) - return 0; + if ((a == 0) || (b == 0)) + return 0; - return gff_base[(i = gflog_base[a] + gflog_base[b]) > 254 ? i - 255 : i]; + return gff_base[(i = gflog_base[a] + gflog_base[b]) > 254 ? i - 255 : i]; #else - return gf_mul_table_base[b * 256 + a]; + return gf_mul_table_base[b * 256 + a]; #endif } -unsigned char gf_inv(unsigned char a) +unsigned char +gf_inv(unsigned char a) { #ifndef GF_LARGE_TABLES - if (a == 0) - return 0; + if (a == 0) + return 0; - return gff_base[255 - gflog_base[a]]; + return gff_base[255 - gflog_base[a]]; #else - return gf_inv_table_base[a]; + return gf_inv_table_base[a]; #endif } -void gf_gen_rs_matrix(unsigned char *a, int m, int k) +void +gf_gen_rs_matrix(unsigned char *a, int m, int k) { - int i, j; - unsigned char p, gen = 1; - - memset(a, 0, k * m); - for (i = 0; i < k; i++) - a[k * i + i] = 1; - - for (i = k; i < m; i++) { - p = 1; - for (j = 0; j < k; j++) { - a[k * i + j] = p; - p = gf_mul(p, gen); - } - gen = gf_mul(gen, 2); - } + int i, j; + unsigned char p, gen = 1; + + memset(a, 0, k * m); + for (i = 0; i < k; i++) + a[k * i + i] = 1; + + for (i = k; i < m; i++) { + p = 1; + for (j = 0; j < k; j++) { + a[k * i + j] = p; + p = gf_mul(p, gen); + } + gen = gf_mul(gen, 2); + } } -void gf_gen_cauchy1_matrix(unsigned char *a, int m, int k) +void +gf_gen_cauchy1_matrix(unsigned char *a, int m, int k) { - int i, j; - unsigned char *p; - - // Identity matrix in high position - memset(a, 0, k * m); - for (i = 0; i < k; i++) - a[k * i + i] = 1; - - // For the rest choose 1/(i + j) | i != j - p = &a[k * k]; - for (i = k; i < m; i++) - for (j = 0; j < k; j++) - *p++ = gf_inv(i ^ j); - + int i, j; + unsigned char *p; + + // Identity matrix in high position + memset(a, 0, k * m); + for (i = 0; i < k; i++) + a[k * i + i] = 1; + + // For the rest choose 1/(i + j) | i != j + p = &a[k * k]; + for (i = k; i < m; i++) + for (j = 0; j < k; j++) + *p++ = gf_inv(i ^ j); } -int gf_invert_matrix(unsigned char *in_mat, unsigned char *out_mat, const int n) +int +gf_invert_matrix(unsigned char *in_mat, unsigned char *out_mat, const int n) { - int i, j, k; - unsigned char temp; - - // Set out_mat[] to the identity matrix - for (i = 0; i < n * n; i++) // memset(out_mat, 0, n*n) - out_mat[i] = 0; - - for (i = 0; i < n; i++) - out_mat[i * n + i] = 1; - - // Inverse - for (i = 0; i < n; i++) { - // Check for 0 in pivot element - if (in_mat[i * n + i] == 0) { - // Find a row with non-zero in current column and swap - for (j = i + 1; j < n; j++) - if (in_mat[j * n + i]) - break; - - if (j == n) // Couldn't find means it's singular - return -1; - - for (k = 0; k < n; k++) { // Swap rows i,j - temp = in_mat[i * n + k]; - in_mat[i * n + k] = in_mat[j * n + k]; - in_mat[j * n + k] = temp; - - temp = out_mat[i * n + k]; - out_mat[i * n + k] = out_mat[j * n + k]; - out_mat[j * n + k] = temp; - } - } - - temp = gf_inv(in_mat[i * n + i]); // 1/pivot - for (j = 0; j < n; j++) { // Scale row i by 1/pivot - in_mat[i * n + j] = gf_mul(in_mat[i * n + j], temp); - out_mat[i * n + j] = gf_mul(out_mat[i * n + j], temp); - } - - for (j = 0; j < n; j++) { - if (j == i) - continue; - - temp = in_mat[j * n + i]; - for (k = 0; k < n; k++) { - out_mat[j * n + k] ^= gf_mul(temp, out_mat[i * n + k]); - in_mat[j * n + k] ^= gf_mul(temp, in_mat[i * n + k]); - } - } - } - return 0; + int i, j, k; + unsigned char temp; + + // Set out_mat[] to the identity matrix + for (i = 0; i < n * n; i++) // memset(out_mat, 0, n*n) + out_mat[i] = 0; + + for (i = 0; i < n; i++) + out_mat[i * n + i] = 1; + + // Inverse + for (i = 0; i < n; i++) { + // Check for 0 in pivot element + if (in_mat[i * n + i] == 0) { + // Find a row with non-zero in current column and swap + for (j = i + 1; j < n; j++) + if (in_mat[j * n + i]) + break; + + if (j == n) // Couldn't find means it's singular + return -1; + + for (k = 0; k < n; k++) { // Swap rows i,j + temp = in_mat[i * n + k]; + in_mat[i * n + k] = in_mat[j * n + k]; + in_mat[j * n + k] = temp; + + temp = out_mat[i * n + k]; + out_mat[i * n + k] = out_mat[j * n + k]; + out_mat[j * n + k] = temp; + } + } + + temp = gf_inv(in_mat[i * n + i]); // 1/pivot + for (j = 0; j < n; j++) { // Scale row i by 1/pivot + in_mat[i * n + j] = gf_mul(in_mat[i * n + j], temp); + out_mat[i * n + j] = gf_mul(out_mat[i * n + j], temp); + } + + for (j = 0; j < n; j++) { + if (j == i) + continue; + + temp = in_mat[j * n + i]; + for (k = 0; k < n; k++) { + out_mat[j * n + k] ^= gf_mul(temp, out_mat[i * n + k]); + in_mat[j * n + k] ^= gf_mul(temp, in_mat[i * n + k]); + } + } + } + return 0; } // Calculates const table gftbl in GF(2^8) from single input A // gftbl(A) = {A{00}, A{01}, A{02}, ... , A{0f} }, {A{00}, A{10}, A{20}, ... , A{f0} } -void gf_vect_mul_init(unsigned char c, unsigned char *tbl) +void +gf_vect_mul_init(unsigned char c, unsigned char *tbl) { - unsigned char c2 = (c << 1) ^ ((c & 0x80) ? 0x1d : 0); //Mult by GF{2} - unsigned char c4 = (c2 << 1) ^ ((c2 & 0x80) ? 0x1d : 0); //Mult by GF{2} - unsigned char c8 = (c4 << 1) ^ ((c4 & 0x80) ? 0x1d : 0); //Mult by GF{2} + unsigned char c2 = (c << 1) ^ ((c & 0x80) ? 0x1d : 0); // Mult by GF{2} + unsigned char c4 = (c2 << 1) ^ ((c2 & 0x80) ? 0x1d : 0); // Mult by GF{2} + unsigned char c8 = (c4 << 1) ^ ((c4 & 0x80) ? 0x1d : 0); // Mult by GF{2} #if (__WORDSIZE == 64 || _WIN64 || __x86_64__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) - unsigned long long v1, v2, v4, v8, *t; - unsigned long long v10, v20, v40, v80; - unsigned char c17, c18, c20, c24; + unsigned long long v1, v2, v4, v8, *t; + unsigned long long v10, v20, v40, v80; + unsigned char c17, c18, c20, c24; - t = (unsigned long long *)tbl; + t = (unsigned long long *) tbl; - v1 = c * 0x0100010001000100ull; - v2 = c2 * 0x0101000001010000ull; - v4 = c4 * 0x0101010100000000ull; - v8 = c8 * 0x0101010101010101ull; + v1 = c * 0x0100010001000100ull; + v2 = c2 * 0x0101000001010000ull; + v4 = c4 * 0x0101010100000000ull; + v8 = c8 * 0x0101010101010101ull; - v4 = v1 ^ v2 ^ v4; - t[0] = v4; - t[1] = v8 ^ v4; + v4 = v1 ^ v2 ^ v4; + t[0] = v4; + t[1] = v8 ^ v4; - c17 = (c8 << 1) ^ ((c8 & 0x80) ? 0x1d : 0); //Mult by GF{2} - c18 = (c17 << 1) ^ ((c17 & 0x80) ? 0x1d : 0); //Mult by GF{2} - c20 = (c18 << 1) ^ ((c18 & 0x80) ? 0x1d : 0); //Mult by GF{2} - c24 = (c20 << 1) ^ ((c20 & 0x80) ? 0x1d : 0); //Mult by GF{2} + c17 = (c8 << 1) ^ ((c8 & 0x80) ? 0x1d : 0); // Mult by GF{2} + c18 = (c17 << 1) ^ ((c17 & 0x80) ? 0x1d : 0); // Mult by GF{2} + c20 = (c18 << 1) ^ ((c18 & 0x80) ? 0x1d : 0); // Mult by GF{2} + c24 = (c20 << 1) ^ ((c20 & 0x80) ? 0x1d : 0); // Mult by GF{2} - v10 = c17 * 0x0100010001000100ull; - v20 = c18 * 0x0101000001010000ull; - v40 = c20 * 0x0101010100000000ull; - v80 = c24 * 0x0101010101010101ull; + v10 = c17 * 0x0100010001000100ull; + v20 = c18 * 0x0101000001010000ull; + v40 = c20 * 0x0101010100000000ull; + v80 = c24 * 0x0101010101010101ull; - v40 = v10 ^ v20 ^ v40; - t[2] = v40; - t[3] = v80 ^ v40; + v40 = v10 ^ v20 ^ v40; + t[2] = v40; + t[3] = v80 ^ v40; #else // 32-bit or other - unsigned char c3, c5, c6, c7, c9, c10, c11, c12, c13, c14, c15; - unsigned char c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, - c31; - - c3 = c2 ^ c; - c5 = c4 ^ c; - c6 = c4 ^ c2; - c7 = c4 ^ c3; - - c9 = c8 ^ c; - c10 = c8 ^ c2; - c11 = c8 ^ c3; - c12 = c8 ^ c4; - c13 = c8 ^ c5; - c14 = c8 ^ c6; - c15 = c8 ^ c7; - - tbl[0] = 0; - tbl[1] = c; - tbl[2] = c2; - tbl[3] = c3; - tbl[4] = c4; - tbl[5] = c5; - tbl[6] = c6; - tbl[7] = c7; - tbl[8] = c8; - tbl[9] = c9; - tbl[10] = c10; - tbl[11] = c11; - tbl[12] = c12; - tbl[13] = c13; - tbl[14] = c14; - tbl[15] = c15; - - c17 = (c8 << 1) ^ ((c8 & 0x80) ? 0x1d : 0); //Mult by GF{2} - c18 = (c17 << 1) ^ ((c17 & 0x80) ? 0x1d : 0); //Mult by GF{2} - c19 = c18 ^ c17; - c20 = (c18 << 1) ^ ((c18 & 0x80) ? 0x1d : 0); //Mult by GF{2} - c21 = c20 ^ c17; - c22 = c20 ^ c18; - c23 = c20 ^ c19; - c24 = (c20 << 1) ^ ((c20 & 0x80) ? 0x1d : 0); //Mult by GF{2} - c25 = c24 ^ c17; - c26 = c24 ^ c18; - c27 = c24 ^ c19; - c28 = c24 ^ c20; - c29 = c24 ^ c21; - c30 = c24 ^ c22; - c31 = c24 ^ c23; - - tbl[16] = 0; - tbl[17] = c17; - tbl[18] = c18; - tbl[19] = c19; - tbl[20] = c20; - tbl[21] = c21; - tbl[22] = c22; - tbl[23] = c23; - tbl[24] = c24; - tbl[25] = c25; - tbl[26] = c26; - tbl[27] = c27; - tbl[28] = c28; - tbl[29] = c29; - tbl[30] = c30; - tbl[31] = c31; + unsigned char c3, c5, c6, c7, c9, c10, c11, c12, c13, c14, c15; + unsigned char c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31; + + c3 = c2 ^ c; + c5 = c4 ^ c; + c6 = c4 ^ c2; + c7 = c4 ^ c3; + + c9 = c8 ^ c; + c10 = c8 ^ c2; + c11 = c8 ^ c3; + c12 = c8 ^ c4; + c13 = c8 ^ c5; + c14 = c8 ^ c6; + c15 = c8 ^ c7; + + tbl[0] = 0; + tbl[1] = c; + tbl[2] = c2; + tbl[3] = c3; + tbl[4] = c4; + tbl[5] = c5; + tbl[6] = c6; + tbl[7] = c7; + tbl[8] = c8; + tbl[9] = c9; + tbl[10] = c10; + tbl[11] = c11; + tbl[12] = c12; + tbl[13] = c13; + tbl[14] = c14; + tbl[15] = c15; + + c17 = (c8 << 1) ^ ((c8 & 0x80) ? 0x1d : 0); // Mult by GF{2} + c18 = (c17 << 1) ^ ((c17 & 0x80) ? 0x1d : 0); // Mult by GF{2} + c19 = c18 ^ c17; + c20 = (c18 << 1) ^ ((c18 & 0x80) ? 0x1d : 0); // Mult by GF{2} + c21 = c20 ^ c17; + c22 = c20 ^ c18; + c23 = c20 ^ c19; + c24 = (c20 << 1) ^ ((c20 & 0x80) ? 0x1d : 0); // Mult by GF{2} + c25 = c24 ^ c17; + c26 = c24 ^ c18; + c27 = c24 ^ c19; + c28 = c24 ^ c20; + c29 = c24 ^ c21; + c30 = c24 ^ c22; + c31 = c24 ^ c23; + + tbl[16] = 0; + tbl[17] = c17; + tbl[18] = c18; + tbl[19] = c19; + tbl[20] = c20; + tbl[21] = c21; + tbl[22] = c22; + tbl[23] = c23; + tbl[24] = c24; + tbl[25] = c25; + tbl[26] = c26; + tbl[27] = c27; + tbl[28] = c28; + tbl[29] = c29; + tbl[30] = c30; + tbl[31] = c31; #endif //__WORDSIZE == 64 || _WIN64 || __x86_64__ } -void gf_vect_dot_prod_base(int len, int vlen, unsigned char *v, - unsigned char **src, unsigned char *dest) +void +gf_vect_dot_prod_base(int len, int vlen, unsigned char *v, unsigned char **src, unsigned char *dest) { - int i, j; - unsigned char s; - for (i = 0; i < len; i++) { - s = 0; - for (j = 0; j < vlen; j++) - s ^= gf_mul(src[j][i], v[j * 32 + 1]); - - dest[i] = s; - } + int i, j; + unsigned char s; + for (i = 0; i < len; i++) { + s = 0; + for (j = 0; j < vlen; j++) + s ^= gf_mul(src[j][i], v[j * 32 + 1]); + + dest[i] = s; + } } -void gf_vect_mad_base(int len, int vec, int vec_i, - unsigned char *v, unsigned char *src, unsigned char *dest) +void +gf_vect_mad_base(int len, int vec, int vec_i, unsigned char *v, unsigned char *src, + unsigned char *dest) { - int i; - unsigned char s; - for (i = 0; i < len; i++) { - s = dest[i]; - s ^= gf_mul(src[i], v[vec_i * 32 + 1]); - dest[i] = s; - } + int i; + unsigned char s; + for (i = 0; i < len; i++) { + s = dest[i]; + s ^= gf_mul(src[i], v[vec_i * 32 + 1]); + dest[i] = s; + } } -void ec_encode_data_base(int len, int srcs, int dests, unsigned char *v, - unsigned char **src, unsigned char **dest) +void +ec_encode_data_base(int len, int srcs, int dests, unsigned char *v, unsigned char **src, + unsigned char **dest) { - int i, j, l; - unsigned char s; - - for (l = 0; l < dests; l++) { - for (i = 0; i < len; i++) { - s = 0; - for (j = 0; j < srcs; j++) - s ^= gf_mul(src[j][i], v[j * 32 + l * srcs * 32 + 1]); - - dest[l][i] = s; - } - } + int i, j, l; + unsigned char s; + + for (l = 0; l < dests; l++) { + for (i = 0; i < len; i++) { + s = 0; + for (j = 0; j < srcs; j++) + s ^= gf_mul(src[j][i], v[j * 32 + l * srcs * 32 + 1]); + + dest[l][i] = s; + } + } } -void ec_encode_data_update_base(int len, int k, int rows, int vec_i, unsigned char *v, - unsigned char *data, unsigned char **dest) +void +ec_encode_data_update_base(int len, int k, int rows, int vec_i, unsigned char *v, + unsigned char *data, unsigned char **dest) { - int i, l; - unsigned char s; + int i, l; + unsigned char s; - for (l = 0; l < rows; l++) { - for (i = 0; i < len; i++) { - s = dest[l][i]; - s ^= gf_mul(data[i], v[vec_i * 32 + l * k * 32 + 1]); + for (l = 0; l < rows; l++) { + for (i = 0; i < len; i++) { + s = dest[l][i]; + s ^= gf_mul(data[i], v[vec_i * 32 + l * k * 32 + 1]); - dest[l][i] = s; - } - } + dest[l][i] = s; + } + } } -int gf_vect_mul_base(int len, unsigned char *a, unsigned char *src, unsigned char *dest) +int +gf_vect_mul_base(int len, unsigned char *a, unsigned char *src, unsigned char *dest) { - //2nd element of table array is ref value used to fill it in - unsigned char c = a[1]; + // 2nd element of table array is ref value used to fill it in + unsigned char c = a[1]; - // Len must be aligned to 32B - if ((len % 32) != 0) { - return -1; - } + // Len must be aligned to 32B + if ((len % 32) != 0) { + return -1; + } - while (len-- > 0) - *dest++ = gf_mul(c, *src++); - return 0; + while (len-- > 0) + *dest++ = gf_mul(c, *src++); + return 0; } diff --git a/erasure_code/ec_base.h b/erasure_code/ec_base.h index ace38496..e9342532 100644 --- a/erasure_code/ec_base.h +++ b/erasure_code/ec_base.h @@ -35,6716 +35,4508 @@ #define MAX_NUM_OUTPUTS_CALL 6 static const uint64_t gf_table_gfni[256] = { - 0x0000000000000000, 0x102040810204080, 0x8001828488102040, 0x8103868c983060c0, - 0x408041c2c4881020, 0x418245cad4a850a0, 0xc081c3464c983060, 0xc183c74e5cb870e0, - 0x2040a061e2c48810, 0x2142a469f2e4c890, 0xa04122e56ad4a850, 0xa14326ed7af4e8d0, - 0x60c0e1a3264c9830, 0x61c2e5ab366cd8b0, 0xe0c16327ae5cb870, 0xe1c3672fbe7cf8f0, - 0x102050b071e2c488, 0x112254b861c28408, 0x9021d234f9f2e4c8, 0x9123d63ce9d2a448, - 0x50a01172b56ad4a8, 0x51a2157aa54a9428, 0xd0a193f63d7af4e8, 0xd1a397fe2d5ab468, - 0x3060f0d193264c98, 0x3162f4d983060c18, 0xb06172551b366cd8, 0xb163765d0b162c58, - 0x70e0b11357ae5cb8, 0x71e2b51b478e1c38, 0xf0e13397dfbe7cf8, 0xf1e3379fcf9e3c78, - 0x8810a8d83871e2c4, 0x8912acd02851a244, 0x08112a5cb061c284, 0x09132e54a0418204, - 0xc890e91afcf9f2e4, 0xc992ed12ecd9b264, 0x48916b9e74e9d2a4, 0x49936f9664c99224, - 0xa85008b9dab56ad4, 0xa9520cb1ca952a54, 0x28518a3d52a54a94, 0x29538e3542850a14, - 0xe8d0497b1e3d7af4, 0xe9d24d730e1d3a74, 0x68d1cbff962d5ab4, 0x69d3cff7860d1a34, - 0x9830f8684993264c, 0x9932fc6059b366cc, 0x18317aecc183060c, 0x19337ee4d1a3468c, - 0xd8b0b9aa8d1b366c, 0xd9b2bda29d3b76ec, 0x58b13b2e050b162c, 0x59b33f26152b56ac, - 0xb8705809ab57ae5c, 0xb9725c01bb77eedc, 0x3871da8d23478e1c, 0x3973de853367ce9c, - 0xf8f019cb6fdfbe7c, 0xf9f21dc37ffffefc, 0x78f19b4fe7cf9e3c, 0x79f39f47f7efdebc, - 0xc488d46c1c3871e2, 0xc58ad0640c183162, 0x448956e8942851a2, 0x458b52e084081122, - 0x840895aed8b061c2, 0x850a91a6c8902142, 0x0409172a50a04182, 0x050b132240800102, - 0xe4c8740dfefcf9f2, 0xe5ca7005eedcb972, 0x64c9f68976ecd9b2, 0x65cbf28166cc9932, - 0xa44835cf3a74e9d2, 0xa54a31c72a54a952, 0x2449b74bb264c992, 0x254bb343a2448912, - 0xd4a884dc6ddab56a, 0xd5aa80d47dfaf5ea, 0x54a90658e5ca952a, 0x55ab0250f5ead5aa, - 0x9428c51ea952a54a, 0x952ac116b972e5ca, 0x1429479a2142850a, 0x152b43923162c58a, - 0xf4e824bd8f1e3d7a, 0xf5ea20b59f3e7dfa, 0x74e9a639070e1d3a, 0x75eba231172e5dba, - 0xb468657f4b962d5a, 0xb56a61775bb66dda, 0x3469e7fbc3860d1a, 0x356be3f3d3a64d9a, - 0x4c987cb424499326, 0x4d9a78bc3469d3a6, 0xcc99fe30ac59b366, 0xcd9bfa38bc79f3e6, - 0x0c183d76e0c18306, 0x0d1a397ef0e1c386, 0x8c19bff268d1a346, 0x8d1bbbfa78f1e3c6, - 0x6cd8dcd5c68d1b36, 0x6ddad8ddd6ad5bb6, 0xecd95e514e9d3b76, 0xeddb5a595ebd7bf6, - 0x2c589d1702050b16, 0x2d5a991f12254b96, 0xac591f938a152b56, 0xad5b1b9b9a356bd6, - 0x5cb82c0455ab57ae, 0x5dba280c458b172e, 0xdcb9ae80ddbb77ee, 0xddbbaa88cd9b376e, - 0x1c386dc69123478e, 0x1d3a69ce8103070e, 0x9c39ef42193367ce, 0x9d3beb4a0913274e, - 0x7cf88c65b76fdfbe, 0x7dfa886da74f9f3e, 0xfcf90ee13f7ffffe, 0xfdfb0ae92f5fbf7e, - 0x3c78cda773e7cf9e, 0x3d7ac9af63c78f1e, 0xbc794f23fbf7efde, 0xbd7b4b2bebd7af5e, - 0xe2c46a368e1c3871, 0xe3c66e3e9e3c78f1, 0x62c5e8b2060c1831, 0x63c7ecba162c58b1, - 0xa2442bf44a942851, 0xa3462ffc5ab468d1, 0x2245a970c2840811, 0x2347ad78d2a44891, - 0xc284ca576cd8b061, 0xc386ce5f7cf8f0e1, 0x428548d3e4c89021, 0x43874cdbf4e8d0a1, - 0x82048b95a850a041, 0x83068f9db870e0c1, 0x0205091120408001, 0x03070d193060c081, - 0xf2e43a86fffefcf9, 0xf3e63e8eefdebc79, 0x72e5b80277eedcb9, 0x73e7bc0a67ce9c39, - 0xb2647b443b76ecd9, 0xb3667f4c2b56ac59, 0x3265f9c0b366cc99, 0x3367fdc8a3468c19, - 0xd2a49ae71d3a74e9, 0xd3a69eef0d1a3469, 0x52a51863952a54a9, 0x53a71c6b850a1429, - 0x9224db25d9b264c9, 0x9326df2dc9922449, 0x122559a151a24489, 0x13275da941820409, - 0x6ad4c2eeb66ddab5, 0x6bd6c6e6a64d9a35, 0xead5406a3e7dfaf5, 0xebd744622e5dba75, - 0x2a54832c72e5ca95, 0x2b56872462c58a15, 0xaa5501a8faf5ead5, 0xab5705a0ead5aa55, - 0x4a94628f54a952a5, 0x4b96668744891225, 0xca95e00bdcb972e5, 0xcb97e403cc993265, - 0x0a14234d90214285, 0x0b16274580010205, 0x8a15a1c9183162c5, 0x8b17a5c108112245, - 0x7af4925ec78f1e3d, 0x7bf69656d7af5ebd, 0xfaf510da4f9f3e7d, 0xfbf714d25fbf7efd, - 0x3a74d39c03070e1d, 0x3b76d79413274e9d, 0xba7551188b172e5d, 0xbb7755109b376edd, - 0x5ab4323f254b962d, 0x5bb63637356bd6ad, 0xdab5b0bbad5bb66d, 0xdbb7b4b3bd7bf6ed, - 0x1a3473fde1c3860d, 0x1b3677f5f1e3c68d, 0x9a35f17969d3a64d, 0x9b37f57179f3e6cd, - 0x264cbe5a92244993, 0x274eba5282040913, 0xa64d3cde1a3469d3, 0xa74f38d60a142953, - 0x66ccff9856ac59b3, 0x67cefb90468c1933, 0xe6cd7d1cdebc79f3, 0xe7cf7914ce9c3973, - 0x060c1e3b70e0c183, 0x070e1a3360c08103, 0x860d9cbff8f0e1c3, 0x870f98b7e8d0a143, - 0x468c5ff9b468d1a3, 0x478e5bf1a4489123, 0xc68ddd7d3c78f1e3, 0xc78fd9752c58b163, - 0x366ceeeae3c68d1b, 0x376eeae2f3e6cd9b, 0xb66d6c6e6bd6ad5b, 0xb76f68667bf6eddb, - 0x76ecaf28274e9d3b, 0x77eeab20376eddbb, 0xf6ed2dacaf5ebd7b, 0xf7ef29a4bf7efdfb, - 0x162c4e8b0102050b, 0x172e4a831122458b, 0x962dcc0f8912254b, 0x972fc807993265cb, - 0x56ac0f49c58a152b, 0x57ae0b41d5aa55ab, 0xd6ad8dcd4d9a356b, 0xd7af89c55dba75eb, - 0xae5c1682aa55ab57, 0xaf5e128aba75ebd7, 0x2e5d940622458b17, 0x2f5f900e3265cb97, - 0xeedc57406eddbb77, 0xefde53487efdfbf7, 0x6eddd5c4e6cd9b37, 0x6fdfd1ccf6eddbb7, - 0x8e1cb6e348912347, 0x8f1eb2eb58b163c7, 0x0e1d3467c0810307, 0x0f1f306fd0a14387, - 0xce9cf7218c193367, 0xcf9ef3299c3973e7, 0x4e9d75a504091327, 0x4f9f71ad142953a7, - 0xbe7c4632dbb76fdf, 0xbf7e423acb972f5f, 0x3e7dc4b653a74f9f, 0x3f7fc0be43870f1f, - 0xfefc07f01f3f7fff, 0xfffe03f80f1f3f7f, 0x7efd8574972f5fbf, 0x7fff817c870f1f3f, - 0x9e3ce6533973e7cf, 0x9f3ee25b2953a74f, 0x1e3d64d7b163c78f, 0x1f3f60dfa143870f, - 0xdebca791fdfbf7ef, 0xdfbea399eddbb76f, 0x5ebd251575ebd7af, 0x5fbf211d65cb972f + 0x0000000000000000, 0x102040810204080, 0x8001828488102040, 0x8103868c983060c0, + 0x408041c2c4881020, 0x418245cad4a850a0, 0xc081c3464c983060, 0xc183c74e5cb870e0, + 0x2040a061e2c48810, 0x2142a469f2e4c890, 0xa04122e56ad4a850, 0xa14326ed7af4e8d0, + 0x60c0e1a3264c9830, 0x61c2e5ab366cd8b0, 0xe0c16327ae5cb870, 0xe1c3672fbe7cf8f0, + 0x102050b071e2c488, 0x112254b861c28408, 0x9021d234f9f2e4c8, 0x9123d63ce9d2a448, + 0x50a01172b56ad4a8, 0x51a2157aa54a9428, 0xd0a193f63d7af4e8, 0xd1a397fe2d5ab468, + 0x3060f0d193264c98, 0x3162f4d983060c18, 0xb06172551b366cd8, 0xb163765d0b162c58, + 0x70e0b11357ae5cb8, 0x71e2b51b478e1c38, 0xf0e13397dfbe7cf8, 0xf1e3379fcf9e3c78, + 0x8810a8d83871e2c4, 0x8912acd02851a244, 0x08112a5cb061c284, 0x09132e54a0418204, + 0xc890e91afcf9f2e4, 0xc992ed12ecd9b264, 0x48916b9e74e9d2a4, 0x49936f9664c99224, + 0xa85008b9dab56ad4, 0xa9520cb1ca952a54, 0x28518a3d52a54a94, 0x29538e3542850a14, + 0xe8d0497b1e3d7af4, 0xe9d24d730e1d3a74, 0x68d1cbff962d5ab4, 0x69d3cff7860d1a34, + 0x9830f8684993264c, 0x9932fc6059b366cc, 0x18317aecc183060c, 0x19337ee4d1a3468c, + 0xd8b0b9aa8d1b366c, 0xd9b2bda29d3b76ec, 0x58b13b2e050b162c, 0x59b33f26152b56ac, + 0xb8705809ab57ae5c, 0xb9725c01bb77eedc, 0x3871da8d23478e1c, 0x3973de853367ce9c, + 0xf8f019cb6fdfbe7c, 0xf9f21dc37ffffefc, 0x78f19b4fe7cf9e3c, 0x79f39f47f7efdebc, + 0xc488d46c1c3871e2, 0xc58ad0640c183162, 0x448956e8942851a2, 0x458b52e084081122, + 0x840895aed8b061c2, 0x850a91a6c8902142, 0x0409172a50a04182, 0x050b132240800102, + 0xe4c8740dfefcf9f2, 0xe5ca7005eedcb972, 0x64c9f68976ecd9b2, 0x65cbf28166cc9932, + 0xa44835cf3a74e9d2, 0xa54a31c72a54a952, 0x2449b74bb264c992, 0x254bb343a2448912, + 0xd4a884dc6ddab56a, 0xd5aa80d47dfaf5ea, 0x54a90658e5ca952a, 0x55ab0250f5ead5aa, + 0x9428c51ea952a54a, 0x952ac116b972e5ca, 0x1429479a2142850a, 0x152b43923162c58a, + 0xf4e824bd8f1e3d7a, 0xf5ea20b59f3e7dfa, 0x74e9a639070e1d3a, 0x75eba231172e5dba, + 0xb468657f4b962d5a, 0xb56a61775bb66dda, 0x3469e7fbc3860d1a, 0x356be3f3d3a64d9a, + 0x4c987cb424499326, 0x4d9a78bc3469d3a6, 0xcc99fe30ac59b366, 0xcd9bfa38bc79f3e6, + 0x0c183d76e0c18306, 0x0d1a397ef0e1c386, 0x8c19bff268d1a346, 0x8d1bbbfa78f1e3c6, + 0x6cd8dcd5c68d1b36, 0x6ddad8ddd6ad5bb6, 0xecd95e514e9d3b76, 0xeddb5a595ebd7bf6, + 0x2c589d1702050b16, 0x2d5a991f12254b96, 0xac591f938a152b56, 0xad5b1b9b9a356bd6, + 0x5cb82c0455ab57ae, 0x5dba280c458b172e, 0xdcb9ae80ddbb77ee, 0xddbbaa88cd9b376e, + 0x1c386dc69123478e, 0x1d3a69ce8103070e, 0x9c39ef42193367ce, 0x9d3beb4a0913274e, + 0x7cf88c65b76fdfbe, 0x7dfa886da74f9f3e, 0xfcf90ee13f7ffffe, 0xfdfb0ae92f5fbf7e, + 0x3c78cda773e7cf9e, 0x3d7ac9af63c78f1e, 0xbc794f23fbf7efde, 0xbd7b4b2bebd7af5e, + 0xe2c46a368e1c3871, 0xe3c66e3e9e3c78f1, 0x62c5e8b2060c1831, 0x63c7ecba162c58b1, + 0xa2442bf44a942851, 0xa3462ffc5ab468d1, 0x2245a970c2840811, 0x2347ad78d2a44891, + 0xc284ca576cd8b061, 0xc386ce5f7cf8f0e1, 0x428548d3e4c89021, 0x43874cdbf4e8d0a1, + 0x82048b95a850a041, 0x83068f9db870e0c1, 0x0205091120408001, 0x03070d193060c081, + 0xf2e43a86fffefcf9, 0xf3e63e8eefdebc79, 0x72e5b80277eedcb9, 0x73e7bc0a67ce9c39, + 0xb2647b443b76ecd9, 0xb3667f4c2b56ac59, 0x3265f9c0b366cc99, 0x3367fdc8a3468c19, + 0xd2a49ae71d3a74e9, 0xd3a69eef0d1a3469, 0x52a51863952a54a9, 0x53a71c6b850a1429, + 0x9224db25d9b264c9, 0x9326df2dc9922449, 0x122559a151a24489, 0x13275da941820409, + 0x6ad4c2eeb66ddab5, 0x6bd6c6e6a64d9a35, 0xead5406a3e7dfaf5, 0xebd744622e5dba75, + 0x2a54832c72e5ca95, 0x2b56872462c58a15, 0xaa5501a8faf5ead5, 0xab5705a0ead5aa55, + 0x4a94628f54a952a5, 0x4b96668744891225, 0xca95e00bdcb972e5, 0xcb97e403cc993265, + 0x0a14234d90214285, 0x0b16274580010205, 0x8a15a1c9183162c5, 0x8b17a5c108112245, + 0x7af4925ec78f1e3d, 0x7bf69656d7af5ebd, 0xfaf510da4f9f3e7d, 0xfbf714d25fbf7efd, + 0x3a74d39c03070e1d, 0x3b76d79413274e9d, 0xba7551188b172e5d, 0xbb7755109b376edd, + 0x5ab4323f254b962d, 0x5bb63637356bd6ad, 0xdab5b0bbad5bb66d, 0xdbb7b4b3bd7bf6ed, + 0x1a3473fde1c3860d, 0x1b3677f5f1e3c68d, 0x9a35f17969d3a64d, 0x9b37f57179f3e6cd, + 0x264cbe5a92244993, 0x274eba5282040913, 0xa64d3cde1a3469d3, 0xa74f38d60a142953, + 0x66ccff9856ac59b3, 0x67cefb90468c1933, 0xe6cd7d1cdebc79f3, 0xe7cf7914ce9c3973, + 0x060c1e3b70e0c183, 0x070e1a3360c08103, 0x860d9cbff8f0e1c3, 0x870f98b7e8d0a143, + 0x468c5ff9b468d1a3, 0x478e5bf1a4489123, 0xc68ddd7d3c78f1e3, 0xc78fd9752c58b163, + 0x366ceeeae3c68d1b, 0x376eeae2f3e6cd9b, 0xb66d6c6e6bd6ad5b, 0xb76f68667bf6eddb, + 0x76ecaf28274e9d3b, 0x77eeab20376eddbb, 0xf6ed2dacaf5ebd7b, 0xf7ef29a4bf7efdfb, + 0x162c4e8b0102050b, 0x172e4a831122458b, 0x962dcc0f8912254b, 0x972fc807993265cb, + 0x56ac0f49c58a152b, 0x57ae0b41d5aa55ab, 0xd6ad8dcd4d9a356b, 0xd7af89c55dba75eb, + 0xae5c1682aa55ab57, 0xaf5e128aba75ebd7, 0x2e5d940622458b17, 0x2f5f900e3265cb97, + 0xeedc57406eddbb77, 0xefde53487efdfbf7, 0x6eddd5c4e6cd9b37, 0x6fdfd1ccf6eddbb7, + 0x8e1cb6e348912347, 0x8f1eb2eb58b163c7, 0x0e1d3467c0810307, 0x0f1f306fd0a14387, + 0xce9cf7218c193367, 0xcf9ef3299c3973e7, 0x4e9d75a504091327, 0x4f9f71ad142953a7, + 0xbe7c4632dbb76fdf, 0xbf7e423acb972f5f, 0x3e7dc4b653a74f9f, 0x3f7fc0be43870f1f, + 0xfefc07f01f3f7fff, 0xfffe03f80f1f3f7f, 0x7efd8574972f5fbf, 0x7fff817c870f1f3f, + 0x9e3ce6533973e7cf, 0x9f3ee25b2953a74f, 0x1e3d64d7b163c78f, 0x1f3f60dfa143870f, + 0xdebca791fdfbf7ef, 0xdfbea399eddbb76f, 0x5ebd251575ebd7af, 0x5fbf211d65cb972f }; // Global GF(256) tables #ifndef GF_LARGE_TABLES static const unsigned char gff_base[] = { - 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1d, 0x3a, - 0x74, 0xe8, 0xcd, 0x87, 0x13, 0x26, 0x4c, 0x98, 0x2d, 0x5a, - 0xb4, 0x75, 0xea, 0xc9, 0x8f, 0x03, 0x06, 0x0c, 0x18, 0x30, - 0x60, 0xc0, 0x9d, 0x27, 0x4e, 0x9c, 0x25, 0x4a, 0x94, 0x35, - 0x6a, 0xd4, 0xb5, 0x77, 0xee, 0xc1, 0x9f, 0x23, 0x46, 0x8c, - 0x05, 0x0a, 0x14, 0x28, 0x50, 0xa0, 0x5d, 0xba, 0x69, 0xd2, - 0xb9, 0x6f, 0xde, 0xa1, 0x5f, 0xbe, 0x61, 0xc2, 0x99, 0x2f, - 0x5e, 0xbc, 0x65, 0xca, 0x89, 0x0f, 0x1e, 0x3c, 0x78, 0xf0, - 0xfd, 0xe7, 0xd3, 0xbb, 0x6b, 0xd6, 0xb1, 0x7f, 0xfe, 0xe1, - 0xdf, 0xa3, 0x5b, 0xb6, 0x71, 0xe2, 0xd9, 0xaf, 0x43, 0x86, - 0x11, 0x22, 0x44, 0x88, 0x0d, 0x1a, 0x34, 0x68, 0xd0, 0xbd, - 0x67, 0xce, 0x81, 0x1f, 0x3e, 0x7c, 0xf8, 0xed, 0xc7, 0x93, - 0x3b, 0x76, 0xec, 0xc5, 0x97, 0x33, 0x66, 0xcc, 0x85, 0x17, - 0x2e, 0x5c, 0xb8, 0x6d, 0xda, 0xa9, 0x4f, 0x9e, 0x21, 0x42, - 0x84, 0x15, 0x2a, 0x54, 0xa8, 0x4d, 0x9a, 0x29, 0x52, 0xa4, - 0x55, 0xaa, 0x49, 0x92, 0x39, 0x72, 0xe4, 0xd5, 0xb7, 0x73, - 0xe6, 0xd1, 0xbf, 0x63, 0xc6, 0x91, 0x3f, 0x7e, 0xfc, 0xe5, - 0xd7, 0xb3, 0x7b, 0xf6, 0xf1, 0xff, 0xe3, 0xdb, 0xab, 0x4b, - 0x96, 0x31, 0x62, 0xc4, 0x95, 0x37, 0x6e, 0xdc, 0xa5, 0x57, - 0xae, 0x41, 0x82, 0x19, 0x32, 0x64, 0xc8, 0x8d, 0x07, 0x0e, - 0x1c, 0x38, 0x70, 0xe0, 0xdd, 0xa7, 0x53, 0xa6, 0x51, 0xa2, - 0x59, 0xb2, 0x79, 0xf2, 0xf9, 0xef, 0xc3, 0x9b, 0x2b, 0x56, - 0xac, 0x45, 0x8a, 0x09, 0x12, 0x24, 0x48, 0x90, 0x3d, 0x7a, - 0xf4, 0xf5, 0xf7, 0xf3, 0xfb, 0xeb, 0xcb, 0x8b, 0x0b, 0x16, - 0x2c, 0x58, 0xb0, 0x7d, 0xfa, 0xe9, 0xcf, 0x83, 0x1b, 0x36, - 0x6c, 0xd8, 0xad, 0x47, 0x8e, 0x01 + 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1d, 0x3a, 0x74, 0xe8, 0xcd, 0x87, 0x13, + 0x26, 0x4c, 0x98, 0x2d, 0x5a, 0xb4, 0x75, 0xea, 0xc9, 0x8f, 0x03, 0x06, 0x0c, 0x18, 0x30, + 0x60, 0xc0, 0x9d, 0x27, 0x4e, 0x9c, 0x25, 0x4a, 0x94, 0x35, 0x6a, 0xd4, 0xb5, 0x77, 0xee, + 0xc1, 0x9f, 0x23, 0x46, 0x8c, 0x05, 0x0a, 0x14, 0x28, 0x50, 0xa0, 0x5d, 0xba, 0x69, 0xd2, + 0xb9, 0x6f, 0xde, 0xa1, 0x5f, 0xbe, 0x61, 0xc2, 0x99, 0x2f, 0x5e, 0xbc, 0x65, 0xca, 0x89, + 0x0f, 0x1e, 0x3c, 0x78, 0xf0, 0xfd, 0xe7, 0xd3, 0xbb, 0x6b, 0xd6, 0xb1, 0x7f, 0xfe, 0xe1, + 0xdf, 0xa3, 0x5b, 0xb6, 0x71, 0xe2, 0xd9, 0xaf, 0x43, 0x86, 0x11, 0x22, 0x44, 0x88, 0x0d, + 0x1a, 0x34, 0x68, 0xd0, 0xbd, 0x67, 0xce, 0x81, 0x1f, 0x3e, 0x7c, 0xf8, 0xed, 0xc7, 0x93, + 0x3b, 0x76, 0xec, 0xc5, 0x97, 0x33, 0x66, 0xcc, 0x85, 0x17, 0x2e, 0x5c, 0xb8, 0x6d, 0xda, + 0xa9, 0x4f, 0x9e, 0x21, 0x42, 0x84, 0x15, 0x2a, 0x54, 0xa8, 0x4d, 0x9a, 0x29, 0x52, 0xa4, + 0x55, 0xaa, 0x49, 0x92, 0x39, 0x72, 0xe4, 0xd5, 0xb7, 0x73, 0xe6, 0xd1, 0xbf, 0x63, 0xc6, + 0x91, 0x3f, 0x7e, 0xfc, 0xe5, 0xd7, 0xb3, 0x7b, 0xf6, 0xf1, 0xff, 0xe3, 0xdb, 0xab, 0x4b, + 0x96, 0x31, 0x62, 0xc4, 0x95, 0x37, 0x6e, 0xdc, 0xa5, 0x57, 0xae, 0x41, 0x82, 0x19, 0x32, + 0x64, 0xc8, 0x8d, 0x07, 0x0e, 0x1c, 0x38, 0x70, 0xe0, 0xdd, 0xa7, 0x53, 0xa6, 0x51, 0xa2, + 0x59, 0xb2, 0x79, 0xf2, 0xf9, 0xef, 0xc3, 0x9b, 0x2b, 0x56, 0xac, 0x45, 0x8a, 0x09, 0x12, + 0x24, 0x48, 0x90, 0x3d, 0x7a, 0xf4, 0xf5, 0xf7, 0xf3, 0xfb, 0xeb, 0xcb, 0x8b, 0x0b, 0x16, + 0x2c, 0x58, 0xb0, 0x7d, 0xfa, 0xe9, 0xcf, 0x83, 0x1b, 0x36, 0x6c, 0xd8, 0xad, 0x47, 0x8e, + 0x01 }; static const unsigned char gflog_base[] = { - 0x00, 0xff, 0x01, 0x19, 0x02, 0x32, 0x1a, 0xc6, 0x03, 0xdf, - 0x33, 0xee, 0x1b, 0x68, 0xc7, 0x4b, 0x04, 0x64, 0xe0, 0x0e, - 0x34, 0x8d, 0xef, 0x81, 0x1c, 0xc1, 0x69, 0xf8, 0xc8, 0x08, - 0x4c, 0x71, 0x05, 0x8a, 0x65, 0x2f, 0xe1, 0x24, 0x0f, 0x21, - 0x35, 0x93, 0x8e, 0xda, 0xf0, 0x12, 0x82, 0x45, 0x1d, 0xb5, - 0xc2, 0x7d, 0x6a, 0x27, 0xf9, 0xb9, 0xc9, 0x9a, 0x09, 0x78, - 0x4d, 0xe4, 0x72, 0xa6, 0x06, 0xbf, 0x8b, 0x62, 0x66, 0xdd, - 0x30, 0xfd, 0xe2, 0x98, 0x25, 0xb3, 0x10, 0x91, 0x22, 0x88, - 0x36, 0xd0, 0x94, 0xce, 0x8f, 0x96, 0xdb, 0xbd, 0xf1, 0xd2, - 0x13, 0x5c, 0x83, 0x38, 0x46, 0x40, 0x1e, 0x42, 0xb6, 0xa3, - 0xc3, 0x48, 0x7e, 0x6e, 0x6b, 0x3a, 0x28, 0x54, 0xfa, 0x85, - 0xba, 0x3d, 0xca, 0x5e, 0x9b, 0x9f, 0x0a, 0x15, 0x79, 0x2b, - 0x4e, 0xd4, 0xe5, 0xac, 0x73, 0xf3, 0xa7, 0x57, 0x07, 0x70, - 0xc0, 0xf7, 0x8c, 0x80, 0x63, 0x0d, 0x67, 0x4a, 0xde, 0xed, - 0x31, 0xc5, 0xfe, 0x18, 0xe3, 0xa5, 0x99, 0x77, 0x26, 0xb8, - 0xb4, 0x7c, 0x11, 0x44, 0x92, 0xd9, 0x23, 0x20, 0x89, 0x2e, - 0x37, 0x3f, 0xd1, 0x5b, 0x95, 0xbc, 0xcf, 0xcd, 0x90, 0x87, - 0x97, 0xb2, 0xdc, 0xfc, 0xbe, 0x61, 0xf2, 0x56, 0xd3, 0xab, - 0x14, 0x2a, 0x5d, 0x9e, 0x84, 0x3c, 0x39, 0x53, 0x47, 0x6d, - 0x41, 0xa2, 0x1f, 0x2d, 0x43, 0xd8, 0xb7, 0x7b, 0xa4, 0x76, - 0xc4, 0x17, 0x49, 0xec, 0x7f, 0x0c, 0x6f, 0xf6, 0x6c, 0xa1, - 0x3b, 0x52, 0x29, 0x9d, 0x55, 0xaa, 0xfb, 0x60, 0x86, 0xb1, - 0xbb, 0xcc, 0x3e, 0x5a, 0xcb, 0x59, 0x5f, 0xb0, 0x9c, 0xa9, - 0xa0, 0x51, 0x0b, 0xf5, 0x16, 0xeb, 0x7a, 0x75, 0x2c, 0xd7, - 0x4f, 0xae, 0xd5, 0xe9, 0xe6, 0xe7, 0xad, 0xe8, 0x74, 0xd6, - 0xf4, 0xea, 0xa8, 0x50, 0x58, 0xaf + 0x00, 0xff, 0x01, 0x19, 0x02, 0x32, 0x1a, 0xc6, 0x03, 0xdf, 0x33, 0xee, 0x1b, 0x68, 0xc7, + 0x4b, 0x04, 0x64, 0xe0, 0x0e, 0x34, 0x8d, 0xef, 0x81, 0x1c, 0xc1, 0x69, 0xf8, 0xc8, 0x08, + 0x4c, 0x71, 0x05, 0x8a, 0x65, 0x2f, 0xe1, 0x24, 0x0f, 0x21, 0x35, 0x93, 0x8e, 0xda, 0xf0, + 0x12, 0x82, 0x45, 0x1d, 0xb5, 0xc2, 0x7d, 0x6a, 0x27, 0xf9, 0xb9, 0xc9, 0x9a, 0x09, 0x78, + 0x4d, 0xe4, 0x72, 0xa6, 0x06, 0xbf, 0x8b, 0x62, 0x66, 0xdd, 0x30, 0xfd, 0xe2, 0x98, 0x25, + 0xb3, 0x10, 0x91, 0x22, 0x88, 0x36, 0xd0, 0x94, 0xce, 0x8f, 0x96, 0xdb, 0xbd, 0xf1, 0xd2, + 0x13, 0x5c, 0x83, 0x38, 0x46, 0x40, 0x1e, 0x42, 0xb6, 0xa3, 0xc3, 0x48, 0x7e, 0x6e, 0x6b, + 0x3a, 0x28, 0x54, 0xfa, 0x85, 0xba, 0x3d, 0xca, 0x5e, 0x9b, 0x9f, 0x0a, 0x15, 0x79, 0x2b, + 0x4e, 0xd4, 0xe5, 0xac, 0x73, 0xf3, 0xa7, 0x57, 0x07, 0x70, 0xc0, 0xf7, 0x8c, 0x80, 0x63, + 0x0d, 0x67, 0x4a, 0xde, 0xed, 0x31, 0xc5, 0xfe, 0x18, 0xe3, 0xa5, 0x99, 0x77, 0x26, 0xb8, + 0xb4, 0x7c, 0x11, 0x44, 0x92, 0xd9, 0x23, 0x20, 0x89, 0x2e, 0x37, 0x3f, 0xd1, 0x5b, 0x95, + 0xbc, 0xcf, 0xcd, 0x90, 0x87, 0x97, 0xb2, 0xdc, 0xfc, 0xbe, 0x61, 0xf2, 0x56, 0xd3, 0xab, + 0x14, 0x2a, 0x5d, 0x9e, 0x84, 0x3c, 0x39, 0x53, 0x47, 0x6d, 0x41, 0xa2, 0x1f, 0x2d, 0x43, + 0xd8, 0xb7, 0x7b, 0xa4, 0x76, 0xc4, 0x17, 0x49, 0xec, 0x7f, 0x0c, 0x6f, 0xf6, 0x6c, 0xa1, + 0x3b, 0x52, 0x29, 0x9d, 0x55, 0xaa, 0xfb, 0x60, 0x86, 0xb1, 0xbb, 0xcc, 0x3e, 0x5a, 0xcb, + 0x59, 0x5f, 0xb0, 0x9c, 0xa9, 0xa0, 0x51, 0x0b, 0xf5, 0x16, 0xeb, 0x7a, 0x75, 0x2c, 0xd7, + 0x4f, 0xae, 0xd5, 0xe9, 0xe6, 0xe7, 0xad, 0xe8, 0x74, 0xd6, 0xf4, 0xea, 0xa8, 0x50, 0x58, + 0xaf }; #else static const unsigned char gf_mul_table_base[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, - 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, - 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, - 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, - 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, - 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, - 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, - 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, - 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, - 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, - 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, - 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, - 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, - 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, - 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, - 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, - 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, - 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, - 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, - 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, - 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, - 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, - 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, - 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, - 0xfe, 0xff, 0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, - 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x22, - 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, - 0x38, 0x3a, 0x3c, 0x3e, 0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, - 0x4c, 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e, - 0x60, 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, 0x70, 0x72, - 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e, 0x80, 0x82, 0x84, 0x86, - 0x88, 0x8a, 0x8c, 0x8e, 0x90, 0x92, 0x94, 0x96, 0x98, 0x9a, - 0x9c, 0x9e, 0xa0, 0xa2, 0xa4, 0xa6, 0xa8, 0xaa, 0xac, 0xae, - 0xb0, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe, 0xc0, 0xc2, - 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, - 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, - 0xec, 0xee, 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0xfe, - 0x1d, 0x1f, 0x19, 0x1b, 0x15, 0x17, 0x11, 0x13, 0x0d, 0x0f, - 0x09, 0x0b, 0x05, 0x07, 0x01, 0x03, 0x3d, 0x3f, 0x39, 0x3b, - 0x35, 0x37, 0x31, 0x33, 0x2d, 0x2f, 0x29, 0x2b, 0x25, 0x27, - 0x21, 0x23, 0x5d, 0x5f, 0x59, 0x5b, 0x55, 0x57, 0x51, 0x53, - 0x4d, 0x4f, 0x49, 0x4b, 0x45, 0x47, 0x41, 0x43, 0x7d, 0x7f, - 0x79, 0x7b, 0x75, 0x77, 0x71, 0x73, 0x6d, 0x6f, 0x69, 0x6b, - 0x65, 0x67, 0x61, 0x63, 0x9d, 0x9f, 0x99, 0x9b, 0x95, 0x97, - 0x91, 0x93, 0x8d, 0x8f, 0x89, 0x8b, 0x85, 0x87, 0x81, 0x83, - 0xbd, 0xbf, 0xb9, 0xbb, 0xb5, 0xb7, 0xb1, 0xb3, 0xad, 0xaf, - 0xa9, 0xab, 0xa5, 0xa7, 0xa1, 0xa3, 0xdd, 0xdf, 0xd9, 0xdb, - 0xd5, 0xd7, 0xd1, 0xd3, 0xcd, 0xcf, 0xc9, 0xcb, 0xc5, 0xc7, - 0xc1, 0xc3, 0xfd, 0xff, 0xf9, 0xfb, 0xf5, 0xf7, 0xf1, 0xf3, - 0xed, 0xef, 0xe9, 0xeb, 0xe5, 0xe7, 0xe1, 0xe3, 0x00, 0x03, - 0x06, 0x05, 0x0c, 0x0f, 0x0a, 0x09, 0x18, 0x1b, 0x1e, 0x1d, - 0x14, 0x17, 0x12, 0x11, 0x30, 0x33, 0x36, 0x35, 0x3c, 0x3f, - 0x3a, 0x39, 0x28, 0x2b, 0x2e, 0x2d, 0x24, 0x27, 0x22, 0x21, - 0x60, 0x63, 0x66, 0x65, 0x6c, 0x6f, 0x6a, 0x69, 0x78, 0x7b, - 0x7e, 0x7d, 0x74, 0x77, 0x72, 0x71, 0x50, 0x53, 0x56, 0x55, - 0x5c, 0x5f, 0x5a, 0x59, 0x48, 0x4b, 0x4e, 0x4d, 0x44, 0x47, - 0x42, 0x41, 0xc0, 0xc3, 0xc6, 0xc5, 0xcc, 0xcf, 0xca, 0xc9, - 0xd8, 0xdb, 0xde, 0xdd, 0xd4, 0xd7, 0xd2, 0xd1, 0xf0, 0xf3, - 0xf6, 0xf5, 0xfc, 0xff, 0xfa, 0xf9, 0xe8, 0xeb, 0xee, 0xed, - 0xe4, 0xe7, 0xe2, 0xe1, 0xa0, 0xa3, 0xa6, 0xa5, 0xac, 0xaf, - 0xaa, 0xa9, 0xb8, 0xbb, 0xbe, 0xbd, 0xb4, 0xb7, 0xb2, 0xb1, - 0x90, 0x93, 0x96, 0x95, 0x9c, 0x9f, 0x9a, 0x99, 0x88, 0x8b, - 0x8e, 0x8d, 0x84, 0x87, 0x82, 0x81, 0x9d, 0x9e, 0x9b, 0x98, - 0x91, 0x92, 0x97, 0x94, 0x85, 0x86, 0x83, 0x80, 0x89, 0x8a, - 0x8f, 0x8c, 0xad, 0xae, 0xab, 0xa8, 0xa1, 0xa2, 0xa7, 0xa4, - 0xb5, 0xb6, 0xb3, 0xb0, 0xb9, 0xba, 0xbf, 0xbc, 0xfd, 0xfe, - 0xfb, 0xf8, 0xf1, 0xf2, 0xf7, 0xf4, 0xe5, 0xe6, 0xe3, 0xe0, - 0xe9, 0xea, 0xef, 0xec, 0xcd, 0xce, 0xcb, 0xc8, 0xc1, 0xc2, - 0xc7, 0xc4, 0xd5, 0xd6, 0xd3, 0xd0, 0xd9, 0xda, 0xdf, 0xdc, - 0x5d, 0x5e, 0x5b, 0x58, 0x51, 0x52, 0x57, 0x54, 0x45, 0x46, - 0x43, 0x40, 0x49, 0x4a, 0x4f, 0x4c, 0x6d, 0x6e, 0x6b, 0x68, - 0x61, 0x62, 0x67, 0x64, 0x75, 0x76, 0x73, 0x70, 0x79, 0x7a, - 0x7f, 0x7c, 0x3d, 0x3e, 0x3b, 0x38, 0x31, 0x32, 0x37, 0x34, - 0x25, 0x26, 0x23, 0x20, 0x29, 0x2a, 0x2f, 0x2c, 0x0d, 0x0e, - 0x0b, 0x08, 0x01, 0x02, 0x07, 0x04, 0x15, 0x16, 0x13, 0x10, - 0x19, 0x1a, 0x1f, 0x1c, 0x00, 0x04, 0x08, 0x0c, 0x10, 0x14, - 0x18, 0x1c, 0x20, 0x24, 0x28, 0x2c, 0x30, 0x34, 0x38, 0x3c, - 0x40, 0x44, 0x48, 0x4c, 0x50, 0x54, 0x58, 0x5c, 0x60, 0x64, - 0x68, 0x6c, 0x70, 0x74, 0x78, 0x7c, 0x80, 0x84, 0x88, 0x8c, - 0x90, 0x94, 0x98, 0x9c, 0xa0, 0xa4, 0xa8, 0xac, 0xb0, 0xb4, - 0xb8, 0xbc, 0xc0, 0xc4, 0xc8, 0xcc, 0xd0, 0xd4, 0xd8, 0xdc, - 0xe0, 0xe4, 0xe8, 0xec, 0xf0, 0xf4, 0xf8, 0xfc, 0x1d, 0x19, - 0x15, 0x11, 0x0d, 0x09, 0x05, 0x01, 0x3d, 0x39, 0x35, 0x31, - 0x2d, 0x29, 0x25, 0x21, 0x5d, 0x59, 0x55, 0x51, 0x4d, 0x49, - 0x45, 0x41, 0x7d, 0x79, 0x75, 0x71, 0x6d, 0x69, 0x65, 0x61, - 0x9d, 0x99, 0x95, 0x91, 0x8d, 0x89, 0x85, 0x81, 0xbd, 0xb9, - 0xb5, 0xb1, 0xad, 0xa9, 0xa5, 0xa1, 0xdd, 0xd9, 0xd5, 0xd1, - 0xcd, 0xc9, 0xc5, 0xc1, 0xfd, 0xf9, 0xf5, 0xf1, 0xed, 0xe9, - 0xe5, 0xe1, 0x3a, 0x3e, 0x32, 0x36, 0x2a, 0x2e, 0x22, 0x26, - 0x1a, 0x1e, 0x12, 0x16, 0x0a, 0x0e, 0x02, 0x06, 0x7a, 0x7e, - 0x72, 0x76, 0x6a, 0x6e, 0x62, 0x66, 0x5a, 0x5e, 0x52, 0x56, - 0x4a, 0x4e, 0x42, 0x46, 0xba, 0xbe, 0xb2, 0xb6, 0xaa, 0xae, - 0xa2, 0xa6, 0x9a, 0x9e, 0x92, 0x96, 0x8a, 0x8e, 0x82, 0x86, - 0xfa, 0xfe, 0xf2, 0xf6, 0xea, 0xee, 0xe2, 0xe6, 0xda, 0xde, - 0xd2, 0xd6, 0xca, 0xce, 0xc2, 0xc6, 0x27, 0x23, 0x2f, 0x2b, - 0x37, 0x33, 0x3f, 0x3b, 0x07, 0x03, 0x0f, 0x0b, 0x17, 0x13, - 0x1f, 0x1b, 0x67, 0x63, 0x6f, 0x6b, 0x77, 0x73, 0x7f, 0x7b, - 0x47, 0x43, 0x4f, 0x4b, 0x57, 0x53, 0x5f, 0x5b, 0xa7, 0xa3, - 0xaf, 0xab, 0xb7, 0xb3, 0xbf, 0xbb, 0x87, 0x83, 0x8f, 0x8b, - 0x97, 0x93, 0x9f, 0x9b, 0xe7, 0xe3, 0xef, 0xeb, 0xf7, 0xf3, - 0xff, 0xfb, 0xc7, 0xc3, 0xcf, 0xcb, 0xd7, 0xd3, 0xdf, 0xdb, - 0x00, 0x05, 0x0a, 0x0f, 0x14, 0x11, 0x1e, 0x1b, 0x28, 0x2d, - 0x22, 0x27, 0x3c, 0x39, 0x36, 0x33, 0x50, 0x55, 0x5a, 0x5f, - 0x44, 0x41, 0x4e, 0x4b, 0x78, 0x7d, 0x72, 0x77, 0x6c, 0x69, - 0x66, 0x63, 0xa0, 0xa5, 0xaa, 0xaf, 0xb4, 0xb1, 0xbe, 0xbb, - 0x88, 0x8d, 0x82, 0x87, 0x9c, 0x99, 0x96, 0x93, 0xf0, 0xf5, - 0xfa, 0xff, 0xe4, 0xe1, 0xee, 0xeb, 0xd8, 0xdd, 0xd2, 0xd7, - 0xcc, 0xc9, 0xc6, 0xc3, 0x5d, 0x58, 0x57, 0x52, 0x49, 0x4c, - 0x43, 0x46, 0x75, 0x70, 0x7f, 0x7a, 0x61, 0x64, 0x6b, 0x6e, - 0x0d, 0x08, 0x07, 0x02, 0x19, 0x1c, 0x13, 0x16, 0x25, 0x20, - 0x2f, 0x2a, 0x31, 0x34, 0x3b, 0x3e, 0xfd, 0xf8, 0xf7, 0xf2, - 0xe9, 0xec, 0xe3, 0xe6, 0xd5, 0xd0, 0xdf, 0xda, 0xc1, 0xc4, - 0xcb, 0xce, 0xad, 0xa8, 0xa7, 0xa2, 0xb9, 0xbc, 0xb3, 0xb6, - 0x85, 0x80, 0x8f, 0x8a, 0x91, 0x94, 0x9b, 0x9e, 0xba, 0xbf, - 0xb0, 0xb5, 0xae, 0xab, 0xa4, 0xa1, 0x92, 0x97, 0x98, 0x9d, - 0x86, 0x83, 0x8c, 0x89, 0xea, 0xef, 0xe0, 0xe5, 0xfe, 0xfb, - 0xf4, 0xf1, 0xc2, 0xc7, 0xc8, 0xcd, 0xd6, 0xd3, 0xdc, 0xd9, - 0x1a, 0x1f, 0x10, 0x15, 0x0e, 0x0b, 0x04, 0x01, 0x32, 0x37, - 0x38, 0x3d, 0x26, 0x23, 0x2c, 0x29, 0x4a, 0x4f, 0x40, 0x45, - 0x5e, 0x5b, 0x54, 0x51, 0x62, 0x67, 0x68, 0x6d, 0x76, 0x73, - 0x7c, 0x79, 0xe7, 0xe2, 0xed, 0xe8, 0xf3, 0xf6, 0xf9, 0xfc, - 0xcf, 0xca, 0xc5, 0xc0, 0xdb, 0xde, 0xd1, 0xd4, 0xb7, 0xb2, - 0xbd, 0xb8, 0xa3, 0xa6, 0xa9, 0xac, 0x9f, 0x9a, 0x95, 0x90, - 0x8b, 0x8e, 0x81, 0x84, 0x47, 0x42, 0x4d, 0x48, 0x53, 0x56, - 0x59, 0x5c, 0x6f, 0x6a, 0x65, 0x60, 0x7b, 0x7e, 0x71, 0x74, - 0x17, 0x12, 0x1d, 0x18, 0x03, 0x06, 0x09, 0x0c, 0x3f, 0x3a, - 0x35, 0x30, 0x2b, 0x2e, 0x21, 0x24, 0x00, 0x06, 0x0c, 0x0a, - 0x18, 0x1e, 0x14, 0x12, 0x30, 0x36, 0x3c, 0x3a, 0x28, 0x2e, - 0x24, 0x22, 0x60, 0x66, 0x6c, 0x6a, 0x78, 0x7e, 0x74, 0x72, - 0x50, 0x56, 0x5c, 0x5a, 0x48, 0x4e, 0x44, 0x42, 0xc0, 0xc6, - 0xcc, 0xca, 0xd8, 0xde, 0xd4, 0xd2, 0xf0, 0xf6, 0xfc, 0xfa, - 0xe8, 0xee, 0xe4, 0xe2, 0xa0, 0xa6, 0xac, 0xaa, 0xb8, 0xbe, - 0xb4, 0xb2, 0x90, 0x96, 0x9c, 0x9a, 0x88, 0x8e, 0x84, 0x82, - 0x9d, 0x9b, 0x91, 0x97, 0x85, 0x83, 0x89, 0x8f, 0xad, 0xab, - 0xa1, 0xa7, 0xb5, 0xb3, 0xb9, 0xbf, 0xfd, 0xfb, 0xf1, 0xf7, - 0xe5, 0xe3, 0xe9, 0xef, 0xcd, 0xcb, 0xc1, 0xc7, 0xd5, 0xd3, - 0xd9, 0xdf, 0x5d, 0x5b, 0x51, 0x57, 0x45, 0x43, 0x49, 0x4f, - 0x6d, 0x6b, 0x61, 0x67, 0x75, 0x73, 0x79, 0x7f, 0x3d, 0x3b, - 0x31, 0x37, 0x25, 0x23, 0x29, 0x2f, 0x0d, 0x0b, 0x01, 0x07, - 0x15, 0x13, 0x19, 0x1f, 0x27, 0x21, 0x2b, 0x2d, 0x3f, 0x39, - 0x33, 0x35, 0x17, 0x11, 0x1b, 0x1d, 0x0f, 0x09, 0x03, 0x05, - 0x47, 0x41, 0x4b, 0x4d, 0x5f, 0x59, 0x53, 0x55, 0x77, 0x71, - 0x7b, 0x7d, 0x6f, 0x69, 0x63, 0x65, 0xe7, 0xe1, 0xeb, 0xed, - 0xff, 0xf9, 0xf3, 0xf5, 0xd7, 0xd1, 0xdb, 0xdd, 0xcf, 0xc9, - 0xc3, 0xc5, 0x87, 0x81, 0x8b, 0x8d, 0x9f, 0x99, 0x93, 0x95, - 0xb7, 0xb1, 0xbb, 0xbd, 0xaf, 0xa9, 0xa3, 0xa5, 0xba, 0xbc, - 0xb6, 0xb0, 0xa2, 0xa4, 0xae, 0xa8, 0x8a, 0x8c, 0x86, 0x80, - 0x92, 0x94, 0x9e, 0x98, 0xda, 0xdc, 0xd6, 0xd0, 0xc2, 0xc4, - 0xce, 0xc8, 0xea, 0xec, 0xe6, 0xe0, 0xf2, 0xf4, 0xfe, 0xf8, - 0x7a, 0x7c, 0x76, 0x70, 0x62, 0x64, 0x6e, 0x68, 0x4a, 0x4c, - 0x46, 0x40, 0x52, 0x54, 0x5e, 0x58, 0x1a, 0x1c, 0x16, 0x10, - 0x02, 0x04, 0x0e, 0x08, 0x2a, 0x2c, 0x26, 0x20, 0x32, 0x34, - 0x3e, 0x38, 0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b, 0x12, 0x15, - 0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a, 0x2d, 0x70, 0x77, - 0x7e, 0x79, 0x6c, 0x6b, 0x62, 0x65, 0x48, 0x4f, 0x46, 0x41, - 0x54, 0x53, 0x5a, 0x5d, 0xe0, 0xe7, 0xee, 0xe9, 0xfc, 0xfb, - 0xf2, 0xf5, 0xd8, 0xdf, 0xd6, 0xd1, 0xc4, 0xc3, 0xca, 0xcd, - 0x90, 0x97, 0x9e, 0x99, 0x8c, 0x8b, 0x82, 0x85, 0xa8, 0xaf, - 0xa6, 0xa1, 0xb4, 0xb3, 0xba, 0xbd, 0xdd, 0xda, 0xd3, 0xd4, - 0xc1, 0xc6, 0xcf, 0xc8, 0xe5, 0xe2, 0xeb, 0xec, 0xf9, 0xfe, - 0xf7, 0xf0, 0xad, 0xaa, 0xa3, 0xa4, 0xb1, 0xb6, 0xbf, 0xb8, - 0x95, 0x92, 0x9b, 0x9c, 0x89, 0x8e, 0x87, 0x80, 0x3d, 0x3a, - 0x33, 0x34, 0x21, 0x26, 0x2f, 0x28, 0x05, 0x02, 0x0b, 0x0c, - 0x19, 0x1e, 0x17, 0x10, 0x4d, 0x4a, 0x43, 0x44, 0x51, 0x56, - 0x5f, 0x58, 0x75, 0x72, 0x7b, 0x7c, 0x69, 0x6e, 0x67, 0x60, - 0xa7, 0xa0, 0xa9, 0xae, 0xbb, 0xbc, 0xb5, 0xb2, 0x9f, 0x98, - 0x91, 0x96, 0x83, 0x84, 0x8d, 0x8a, 0xd7, 0xd0, 0xd9, 0xde, - 0xcb, 0xcc, 0xc5, 0xc2, 0xef, 0xe8, 0xe1, 0xe6, 0xf3, 0xf4, - 0xfd, 0xfa, 0x47, 0x40, 0x49, 0x4e, 0x5b, 0x5c, 0x55, 0x52, - 0x7f, 0x78, 0x71, 0x76, 0x63, 0x64, 0x6d, 0x6a, 0x37, 0x30, - 0x39, 0x3e, 0x2b, 0x2c, 0x25, 0x22, 0x0f, 0x08, 0x01, 0x06, - 0x13, 0x14, 0x1d, 0x1a, 0x7a, 0x7d, 0x74, 0x73, 0x66, 0x61, - 0x68, 0x6f, 0x42, 0x45, 0x4c, 0x4b, 0x5e, 0x59, 0x50, 0x57, - 0x0a, 0x0d, 0x04, 0x03, 0x16, 0x11, 0x18, 0x1f, 0x32, 0x35, - 0x3c, 0x3b, 0x2e, 0x29, 0x20, 0x27, 0x9a, 0x9d, 0x94, 0x93, - 0x86, 0x81, 0x88, 0x8f, 0xa2, 0xa5, 0xac, 0xab, 0xbe, 0xb9, - 0xb0, 0xb7, 0xea, 0xed, 0xe4, 0xe3, 0xf6, 0xf1, 0xf8, 0xff, - 0xd2, 0xd5, 0xdc, 0xdb, 0xce, 0xc9, 0xc0, 0xc7, 0x00, 0x08, - 0x10, 0x18, 0x20, 0x28, 0x30, 0x38, 0x40, 0x48, 0x50, 0x58, - 0x60, 0x68, 0x70, 0x78, 0x80, 0x88, 0x90, 0x98, 0xa0, 0xa8, - 0xb0, 0xb8, 0xc0, 0xc8, 0xd0, 0xd8, 0xe0, 0xe8, 0xf0, 0xf8, - 0x1d, 0x15, 0x0d, 0x05, 0x3d, 0x35, 0x2d, 0x25, 0x5d, 0x55, - 0x4d, 0x45, 0x7d, 0x75, 0x6d, 0x65, 0x9d, 0x95, 0x8d, 0x85, - 0xbd, 0xb5, 0xad, 0xa5, 0xdd, 0xd5, 0xcd, 0xc5, 0xfd, 0xf5, - 0xed, 0xe5, 0x3a, 0x32, 0x2a, 0x22, 0x1a, 0x12, 0x0a, 0x02, - 0x7a, 0x72, 0x6a, 0x62, 0x5a, 0x52, 0x4a, 0x42, 0xba, 0xb2, - 0xaa, 0xa2, 0x9a, 0x92, 0x8a, 0x82, 0xfa, 0xf2, 0xea, 0xe2, - 0xda, 0xd2, 0xca, 0xc2, 0x27, 0x2f, 0x37, 0x3f, 0x07, 0x0f, - 0x17, 0x1f, 0x67, 0x6f, 0x77, 0x7f, 0x47, 0x4f, 0x57, 0x5f, - 0xa7, 0xaf, 0xb7, 0xbf, 0x87, 0x8f, 0x97, 0x9f, 0xe7, 0xef, - 0xf7, 0xff, 0xc7, 0xcf, 0xd7, 0xdf, 0x74, 0x7c, 0x64, 0x6c, - 0x54, 0x5c, 0x44, 0x4c, 0x34, 0x3c, 0x24, 0x2c, 0x14, 0x1c, - 0x04, 0x0c, 0xf4, 0xfc, 0xe4, 0xec, 0xd4, 0xdc, 0xc4, 0xcc, - 0xb4, 0xbc, 0xa4, 0xac, 0x94, 0x9c, 0x84, 0x8c, 0x69, 0x61, - 0x79, 0x71, 0x49, 0x41, 0x59, 0x51, 0x29, 0x21, 0x39, 0x31, - 0x09, 0x01, 0x19, 0x11, 0xe9, 0xe1, 0xf9, 0xf1, 0xc9, 0xc1, - 0xd9, 0xd1, 0xa9, 0xa1, 0xb9, 0xb1, 0x89, 0x81, 0x99, 0x91, - 0x4e, 0x46, 0x5e, 0x56, 0x6e, 0x66, 0x7e, 0x76, 0x0e, 0x06, - 0x1e, 0x16, 0x2e, 0x26, 0x3e, 0x36, 0xce, 0xc6, 0xde, 0xd6, - 0xee, 0xe6, 0xfe, 0xf6, 0x8e, 0x86, 0x9e, 0x96, 0xae, 0xa6, - 0xbe, 0xb6, 0x53, 0x5b, 0x43, 0x4b, 0x73, 0x7b, 0x63, 0x6b, - 0x13, 0x1b, 0x03, 0x0b, 0x33, 0x3b, 0x23, 0x2b, 0xd3, 0xdb, - 0xc3, 0xcb, 0xf3, 0xfb, 0xe3, 0xeb, 0x93, 0x9b, 0x83, 0x8b, - 0xb3, 0xbb, 0xa3, 0xab, 0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, - 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77, - 0x90, 0x99, 0x82, 0x8b, 0xb4, 0xbd, 0xa6, 0xaf, 0xd8, 0xd1, - 0xca, 0xc3, 0xfc, 0xf5, 0xee, 0xe7, 0x3d, 0x34, 0x2f, 0x26, - 0x19, 0x10, 0x0b, 0x02, 0x75, 0x7c, 0x67, 0x6e, 0x51, 0x58, - 0x43, 0x4a, 0xad, 0xa4, 0xbf, 0xb6, 0x89, 0x80, 0x9b, 0x92, - 0xe5, 0xec, 0xf7, 0xfe, 0xc1, 0xc8, 0xd3, 0xda, 0x7a, 0x73, - 0x68, 0x61, 0x5e, 0x57, 0x4c, 0x45, 0x32, 0x3b, 0x20, 0x29, - 0x16, 0x1f, 0x04, 0x0d, 0xea, 0xe3, 0xf8, 0xf1, 0xce, 0xc7, - 0xdc, 0xd5, 0xa2, 0xab, 0xb0, 0xb9, 0x86, 0x8f, 0x94, 0x9d, - 0x47, 0x4e, 0x55, 0x5c, 0x63, 0x6a, 0x71, 0x78, 0x0f, 0x06, - 0x1d, 0x14, 0x2b, 0x22, 0x39, 0x30, 0xd7, 0xde, 0xc5, 0xcc, - 0xf3, 0xfa, 0xe1, 0xe8, 0x9f, 0x96, 0x8d, 0x84, 0xbb, 0xb2, - 0xa9, 0xa0, 0xf4, 0xfd, 0xe6, 0xef, 0xd0, 0xd9, 0xc2, 0xcb, - 0xbc, 0xb5, 0xae, 0xa7, 0x98, 0x91, 0x8a, 0x83, 0x64, 0x6d, - 0x76, 0x7f, 0x40, 0x49, 0x52, 0x5b, 0x2c, 0x25, 0x3e, 0x37, - 0x08, 0x01, 0x1a, 0x13, 0xc9, 0xc0, 0xdb, 0xd2, 0xed, 0xe4, - 0xff, 0xf6, 0x81, 0x88, 0x93, 0x9a, 0xa5, 0xac, 0xb7, 0xbe, - 0x59, 0x50, 0x4b, 0x42, 0x7d, 0x74, 0x6f, 0x66, 0x11, 0x18, - 0x03, 0x0a, 0x35, 0x3c, 0x27, 0x2e, 0x8e, 0x87, 0x9c, 0x95, - 0xaa, 0xa3, 0xb8, 0xb1, 0xc6, 0xcf, 0xd4, 0xdd, 0xe2, 0xeb, - 0xf0, 0xf9, 0x1e, 0x17, 0x0c, 0x05, 0x3a, 0x33, 0x28, 0x21, - 0x56, 0x5f, 0x44, 0x4d, 0x72, 0x7b, 0x60, 0x69, 0xb3, 0xba, - 0xa1, 0xa8, 0x97, 0x9e, 0x85, 0x8c, 0xfb, 0xf2, 0xe9, 0xe0, - 0xdf, 0xd6, 0xcd, 0xc4, 0x23, 0x2a, 0x31, 0x38, 0x07, 0x0e, - 0x15, 0x1c, 0x6b, 0x62, 0x79, 0x70, 0x4f, 0x46, 0x5d, 0x54, - 0x00, 0x0a, 0x14, 0x1e, 0x28, 0x22, 0x3c, 0x36, 0x50, 0x5a, - 0x44, 0x4e, 0x78, 0x72, 0x6c, 0x66, 0xa0, 0xaa, 0xb4, 0xbe, - 0x88, 0x82, 0x9c, 0x96, 0xf0, 0xfa, 0xe4, 0xee, 0xd8, 0xd2, - 0xcc, 0xc6, 0x5d, 0x57, 0x49, 0x43, 0x75, 0x7f, 0x61, 0x6b, - 0x0d, 0x07, 0x19, 0x13, 0x25, 0x2f, 0x31, 0x3b, 0xfd, 0xf7, - 0xe9, 0xe3, 0xd5, 0xdf, 0xc1, 0xcb, 0xad, 0xa7, 0xb9, 0xb3, - 0x85, 0x8f, 0x91, 0x9b, 0xba, 0xb0, 0xae, 0xa4, 0x92, 0x98, - 0x86, 0x8c, 0xea, 0xe0, 0xfe, 0xf4, 0xc2, 0xc8, 0xd6, 0xdc, - 0x1a, 0x10, 0x0e, 0x04, 0x32, 0x38, 0x26, 0x2c, 0x4a, 0x40, - 0x5e, 0x54, 0x62, 0x68, 0x76, 0x7c, 0xe7, 0xed, 0xf3, 0xf9, - 0xcf, 0xc5, 0xdb, 0xd1, 0xb7, 0xbd, 0xa3, 0xa9, 0x9f, 0x95, - 0x8b, 0x81, 0x47, 0x4d, 0x53, 0x59, 0x6f, 0x65, 0x7b, 0x71, - 0x17, 0x1d, 0x03, 0x09, 0x3f, 0x35, 0x2b, 0x21, 0x69, 0x63, - 0x7d, 0x77, 0x41, 0x4b, 0x55, 0x5f, 0x39, 0x33, 0x2d, 0x27, - 0x11, 0x1b, 0x05, 0x0f, 0xc9, 0xc3, 0xdd, 0xd7, 0xe1, 0xeb, - 0xf5, 0xff, 0x99, 0x93, 0x8d, 0x87, 0xb1, 0xbb, 0xa5, 0xaf, - 0x34, 0x3e, 0x20, 0x2a, 0x1c, 0x16, 0x08, 0x02, 0x64, 0x6e, - 0x70, 0x7a, 0x4c, 0x46, 0x58, 0x52, 0x94, 0x9e, 0x80, 0x8a, - 0xbc, 0xb6, 0xa8, 0xa2, 0xc4, 0xce, 0xd0, 0xda, 0xec, 0xe6, - 0xf8, 0xf2, 0xd3, 0xd9, 0xc7, 0xcd, 0xfb, 0xf1, 0xef, 0xe5, - 0x83, 0x89, 0x97, 0x9d, 0xab, 0xa1, 0xbf, 0xb5, 0x73, 0x79, - 0x67, 0x6d, 0x5b, 0x51, 0x4f, 0x45, 0x23, 0x29, 0x37, 0x3d, - 0x0b, 0x01, 0x1f, 0x15, 0x8e, 0x84, 0x9a, 0x90, 0xa6, 0xac, - 0xb2, 0xb8, 0xde, 0xd4, 0xca, 0xc0, 0xf6, 0xfc, 0xe2, 0xe8, - 0x2e, 0x24, 0x3a, 0x30, 0x06, 0x0c, 0x12, 0x18, 0x7e, 0x74, - 0x6a, 0x60, 0x56, 0x5c, 0x42, 0x48, 0x00, 0x0b, 0x16, 0x1d, - 0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, - 0x62, 0x69, 0xb0, 0xbb, 0xa6, 0xad, 0x9c, 0x97, 0x8a, 0x81, - 0xe8, 0xe3, 0xfe, 0xf5, 0xc4, 0xcf, 0xd2, 0xd9, 0x7d, 0x76, - 0x6b, 0x60, 0x51, 0x5a, 0x47, 0x4c, 0x25, 0x2e, 0x33, 0x38, - 0x09, 0x02, 0x1f, 0x14, 0xcd, 0xc6, 0xdb, 0xd0, 0xe1, 0xea, - 0xf7, 0xfc, 0x95, 0x9e, 0x83, 0x88, 0xb9, 0xb2, 0xaf, 0xa4, - 0xfa, 0xf1, 0xec, 0xe7, 0xd6, 0xdd, 0xc0, 0xcb, 0xa2, 0xa9, - 0xb4, 0xbf, 0x8e, 0x85, 0x98, 0x93, 0x4a, 0x41, 0x5c, 0x57, - 0x66, 0x6d, 0x70, 0x7b, 0x12, 0x19, 0x04, 0x0f, 0x3e, 0x35, - 0x28, 0x23, 0x87, 0x8c, 0x91, 0x9a, 0xab, 0xa0, 0xbd, 0xb6, - 0xdf, 0xd4, 0xc9, 0xc2, 0xf3, 0xf8, 0xe5, 0xee, 0x37, 0x3c, - 0x21, 0x2a, 0x1b, 0x10, 0x0d, 0x06, 0x6f, 0x64, 0x79, 0x72, - 0x43, 0x48, 0x55, 0x5e, 0xe9, 0xe2, 0xff, 0xf4, 0xc5, 0xce, - 0xd3, 0xd8, 0xb1, 0xba, 0xa7, 0xac, 0x9d, 0x96, 0x8b, 0x80, - 0x59, 0x52, 0x4f, 0x44, 0x75, 0x7e, 0x63, 0x68, 0x01, 0x0a, - 0x17, 0x1c, 0x2d, 0x26, 0x3b, 0x30, 0x94, 0x9f, 0x82, 0x89, - 0xb8, 0xb3, 0xae, 0xa5, 0xcc, 0xc7, 0xda, 0xd1, 0xe0, 0xeb, - 0xf6, 0xfd, 0x24, 0x2f, 0x32, 0x39, 0x08, 0x03, 0x1e, 0x15, - 0x7c, 0x77, 0x6a, 0x61, 0x50, 0x5b, 0x46, 0x4d, 0x13, 0x18, - 0x05, 0x0e, 0x3f, 0x34, 0x29, 0x22, 0x4b, 0x40, 0x5d, 0x56, - 0x67, 0x6c, 0x71, 0x7a, 0xa3, 0xa8, 0xb5, 0xbe, 0x8f, 0x84, - 0x99, 0x92, 0xfb, 0xf0, 0xed, 0xe6, 0xd7, 0xdc, 0xc1, 0xca, - 0x6e, 0x65, 0x78, 0x73, 0x42, 0x49, 0x54, 0x5f, 0x36, 0x3d, - 0x20, 0x2b, 0x1a, 0x11, 0x0c, 0x07, 0xde, 0xd5, 0xc8, 0xc3, - 0xf2, 0xf9, 0xe4, 0xef, 0x86, 0x8d, 0x90, 0x9b, 0xaa, 0xa1, - 0xbc, 0xb7, 0x00, 0x0c, 0x18, 0x14, 0x30, 0x3c, 0x28, 0x24, - 0x60, 0x6c, 0x78, 0x74, 0x50, 0x5c, 0x48, 0x44, 0xc0, 0xcc, - 0xd8, 0xd4, 0xf0, 0xfc, 0xe8, 0xe4, 0xa0, 0xac, 0xb8, 0xb4, - 0x90, 0x9c, 0x88, 0x84, 0x9d, 0x91, 0x85, 0x89, 0xad, 0xa1, - 0xb5, 0xb9, 0xfd, 0xf1, 0xe5, 0xe9, 0xcd, 0xc1, 0xd5, 0xd9, - 0x5d, 0x51, 0x45, 0x49, 0x6d, 0x61, 0x75, 0x79, 0x3d, 0x31, - 0x25, 0x29, 0x0d, 0x01, 0x15, 0x19, 0x27, 0x2b, 0x3f, 0x33, - 0x17, 0x1b, 0x0f, 0x03, 0x47, 0x4b, 0x5f, 0x53, 0x77, 0x7b, - 0x6f, 0x63, 0xe7, 0xeb, 0xff, 0xf3, 0xd7, 0xdb, 0xcf, 0xc3, - 0x87, 0x8b, 0x9f, 0x93, 0xb7, 0xbb, 0xaf, 0xa3, 0xba, 0xb6, - 0xa2, 0xae, 0x8a, 0x86, 0x92, 0x9e, 0xda, 0xd6, 0xc2, 0xce, - 0xea, 0xe6, 0xf2, 0xfe, 0x7a, 0x76, 0x62, 0x6e, 0x4a, 0x46, - 0x52, 0x5e, 0x1a, 0x16, 0x02, 0x0e, 0x2a, 0x26, 0x32, 0x3e, - 0x4e, 0x42, 0x56, 0x5a, 0x7e, 0x72, 0x66, 0x6a, 0x2e, 0x22, - 0x36, 0x3a, 0x1e, 0x12, 0x06, 0x0a, 0x8e, 0x82, 0x96, 0x9a, - 0xbe, 0xb2, 0xa6, 0xaa, 0xee, 0xe2, 0xf6, 0xfa, 0xde, 0xd2, - 0xc6, 0xca, 0xd3, 0xdf, 0xcb, 0xc7, 0xe3, 0xef, 0xfb, 0xf7, - 0xb3, 0xbf, 0xab, 0xa7, 0x83, 0x8f, 0x9b, 0x97, 0x13, 0x1f, - 0x0b, 0x07, 0x23, 0x2f, 0x3b, 0x37, 0x73, 0x7f, 0x6b, 0x67, - 0x43, 0x4f, 0x5b, 0x57, 0x69, 0x65, 0x71, 0x7d, 0x59, 0x55, - 0x41, 0x4d, 0x09, 0x05, 0x11, 0x1d, 0x39, 0x35, 0x21, 0x2d, - 0xa9, 0xa5, 0xb1, 0xbd, 0x99, 0x95, 0x81, 0x8d, 0xc9, 0xc5, - 0xd1, 0xdd, 0xf9, 0xf5, 0xe1, 0xed, 0xf4, 0xf8, 0xec, 0xe0, - 0xc4, 0xc8, 0xdc, 0xd0, 0x94, 0x98, 0x8c, 0x80, 0xa4, 0xa8, - 0xbc, 0xb0, 0x34, 0x38, 0x2c, 0x20, 0x04, 0x08, 0x1c, 0x10, - 0x54, 0x58, 0x4c, 0x40, 0x64, 0x68, 0x7c, 0x70, 0x00, 0x0d, - 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f, - 0x5c, 0x51, 0x46, 0x4b, 0xd0, 0xdd, 0xca, 0xc7, 0xe4, 0xe9, - 0xfe, 0xf3, 0xb8, 0xb5, 0xa2, 0xaf, 0x8c, 0x81, 0x96, 0x9b, - 0xbd, 0xb0, 0xa7, 0xaa, 0x89, 0x84, 0x93, 0x9e, 0xd5, 0xd8, - 0xcf, 0xc2, 0xe1, 0xec, 0xfb, 0xf6, 0x6d, 0x60, 0x77, 0x7a, - 0x59, 0x54, 0x43, 0x4e, 0x05, 0x08, 0x1f, 0x12, 0x31, 0x3c, - 0x2b, 0x26, 0x67, 0x6a, 0x7d, 0x70, 0x53, 0x5e, 0x49, 0x44, - 0x0f, 0x02, 0x15, 0x18, 0x3b, 0x36, 0x21, 0x2c, 0xb7, 0xba, - 0xad, 0xa0, 0x83, 0x8e, 0x99, 0x94, 0xdf, 0xd2, 0xc5, 0xc8, - 0xeb, 0xe6, 0xf1, 0xfc, 0xda, 0xd7, 0xc0, 0xcd, 0xee, 0xe3, - 0xf4, 0xf9, 0xb2, 0xbf, 0xa8, 0xa5, 0x86, 0x8b, 0x9c, 0x91, - 0x0a, 0x07, 0x10, 0x1d, 0x3e, 0x33, 0x24, 0x29, 0x62, 0x6f, - 0x78, 0x75, 0x56, 0x5b, 0x4c, 0x41, 0xce, 0xc3, 0xd4, 0xd9, - 0xfa, 0xf7, 0xe0, 0xed, 0xa6, 0xab, 0xbc, 0xb1, 0x92, 0x9f, - 0x88, 0x85, 0x1e, 0x13, 0x04, 0x09, 0x2a, 0x27, 0x30, 0x3d, - 0x76, 0x7b, 0x6c, 0x61, 0x42, 0x4f, 0x58, 0x55, 0x73, 0x7e, - 0x69, 0x64, 0x47, 0x4a, 0x5d, 0x50, 0x1b, 0x16, 0x01, 0x0c, - 0x2f, 0x22, 0x35, 0x38, 0xa3, 0xae, 0xb9, 0xb4, 0x97, 0x9a, - 0x8d, 0x80, 0xcb, 0xc6, 0xd1, 0xdc, 0xff, 0xf2, 0xe5, 0xe8, - 0xa9, 0xa4, 0xb3, 0xbe, 0x9d, 0x90, 0x87, 0x8a, 0xc1, 0xcc, - 0xdb, 0xd6, 0xf5, 0xf8, 0xef, 0xe2, 0x79, 0x74, 0x63, 0x6e, - 0x4d, 0x40, 0x57, 0x5a, 0x11, 0x1c, 0x0b, 0x06, 0x25, 0x28, - 0x3f, 0x32, 0x14, 0x19, 0x0e, 0x03, 0x20, 0x2d, 0x3a, 0x37, - 0x7c, 0x71, 0x66, 0x6b, 0x48, 0x45, 0x52, 0x5f, 0xc4, 0xc9, - 0xde, 0xd3, 0xf0, 0xfd, 0xea, 0xe7, 0xac, 0xa1, 0xb6, 0xbb, - 0x98, 0x95, 0x82, 0x8f, 0x00, 0x0e, 0x1c, 0x12, 0x38, 0x36, - 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a, - 0xe0, 0xee, 0xfc, 0xf2, 0xd8, 0xd6, 0xc4, 0xca, 0x90, 0x9e, - 0x8c, 0x82, 0xa8, 0xa6, 0xb4, 0xba, 0xdd, 0xd3, 0xc1, 0xcf, - 0xe5, 0xeb, 0xf9, 0xf7, 0xad, 0xa3, 0xb1, 0xbf, 0x95, 0x9b, - 0x89, 0x87, 0x3d, 0x33, 0x21, 0x2f, 0x05, 0x0b, 0x19, 0x17, - 0x4d, 0x43, 0x51, 0x5f, 0x75, 0x7b, 0x69, 0x67, 0xa7, 0xa9, - 0xbb, 0xb5, 0x9f, 0x91, 0x83, 0x8d, 0xd7, 0xd9, 0xcb, 0xc5, - 0xef, 0xe1, 0xf3, 0xfd, 0x47, 0x49, 0x5b, 0x55, 0x7f, 0x71, - 0x63, 0x6d, 0x37, 0x39, 0x2b, 0x25, 0x0f, 0x01, 0x13, 0x1d, - 0x7a, 0x74, 0x66, 0x68, 0x42, 0x4c, 0x5e, 0x50, 0x0a, 0x04, - 0x16, 0x18, 0x32, 0x3c, 0x2e, 0x20, 0x9a, 0x94, 0x86, 0x88, - 0xa2, 0xac, 0xbe, 0xb0, 0xea, 0xe4, 0xf6, 0xf8, 0xd2, 0xdc, - 0xce, 0xc0, 0x53, 0x5d, 0x4f, 0x41, 0x6b, 0x65, 0x77, 0x79, - 0x23, 0x2d, 0x3f, 0x31, 0x1b, 0x15, 0x07, 0x09, 0xb3, 0xbd, - 0xaf, 0xa1, 0x8b, 0x85, 0x97, 0x99, 0xc3, 0xcd, 0xdf, 0xd1, - 0xfb, 0xf5, 0xe7, 0xe9, 0x8e, 0x80, 0x92, 0x9c, 0xb6, 0xb8, - 0xaa, 0xa4, 0xfe, 0xf0, 0xe2, 0xec, 0xc6, 0xc8, 0xda, 0xd4, - 0x6e, 0x60, 0x72, 0x7c, 0x56, 0x58, 0x4a, 0x44, 0x1e, 0x10, - 0x02, 0x0c, 0x26, 0x28, 0x3a, 0x34, 0xf4, 0xfa, 0xe8, 0xe6, - 0xcc, 0xc2, 0xd0, 0xde, 0x84, 0x8a, 0x98, 0x96, 0xbc, 0xb2, - 0xa0, 0xae, 0x14, 0x1a, 0x08, 0x06, 0x2c, 0x22, 0x30, 0x3e, - 0x64, 0x6a, 0x78, 0x76, 0x5c, 0x52, 0x40, 0x4e, 0x29, 0x27, - 0x35, 0x3b, 0x11, 0x1f, 0x0d, 0x03, 0x59, 0x57, 0x45, 0x4b, - 0x61, 0x6f, 0x7d, 0x73, 0xc9, 0xc7, 0xd5, 0xdb, 0xf1, 0xff, - 0xed, 0xe3, 0xb9, 0xb7, 0xa5, 0xab, 0x81, 0x8f, 0x9d, 0x93, - 0x00, 0x0f, 0x1e, 0x11, 0x3c, 0x33, 0x22, 0x2d, 0x78, 0x77, - 0x66, 0x69, 0x44, 0x4b, 0x5a, 0x55, 0xf0, 0xff, 0xee, 0xe1, - 0xcc, 0xc3, 0xd2, 0xdd, 0x88, 0x87, 0x96, 0x99, 0xb4, 0xbb, - 0xaa, 0xa5, 0xfd, 0xf2, 0xe3, 0xec, 0xc1, 0xce, 0xdf, 0xd0, - 0x85, 0x8a, 0x9b, 0x94, 0xb9, 0xb6, 0xa7, 0xa8, 0x0d, 0x02, - 0x13, 0x1c, 0x31, 0x3e, 0x2f, 0x20, 0x75, 0x7a, 0x6b, 0x64, - 0x49, 0x46, 0x57, 0x58, 0xe7, 0xe8, 0xf9, 0xf6, 0xdb, 0xd4, - 0xc5, 0xca, 0x9f, 0x90, 0x81, 0x8e, 0xa3, 0xac, 0xbd, 0xb2, - 0x17, 0x18, 0x09, 0x06, 0x2b, 0x24, 0x35, 0x3a, 0x6f, 0x60, - 0x71, 0x7e, 0x53, 0x5c, 0x4d, 0x42, 0x1a, 0x15, 0x04, 0x0b, - 0x26, 0x29, 0x38, 0x37, 0x62, 0x6d, 0x7c, 0x73, 0x5e, 0x51, - 0x40, 0x4f, 0xea, 0xe5, 0xf4, 0xfb, 0xd6, 0xd9, 0xc8, 0xc7, - 0x92, 0x9d, 0x8c, 0x83, 0xae, 0xa1, 0xb0, 0xbf, 0xd3, 0xdc, - 0xcd, 0xc2, 0xef, 0xe0, 0xf1, 0xfe, 0xab, 0xa4, 0xb5, 0xba, - 0x97, 0x98, 0x89, 0x86, 0x23, 0x2c, 0x3d, 0x32, 0x1f, 0x10, - 0x01, 0x0e, 0x5b, 0x54, 0x45, 0x4a, 0x67, 0x68, 0x79, 0x76, - 0x2e, 0x21, 0x30, 0x3f, 0x12, 0x1d, 0x0c, 0x03, 0x56, 0x59, - 0x48, 0x47, 0x6a, 0x65, 0x74, 0x7b, 0xde, 0xd1, 0xc0, 0xcf, - 0xe2, 0xed, 0xfc, 0xf3, 0xa6, 0xa9, 0xb8, 0xb7, 0x9a, 0x95, - 0x84, 0x8b, 0x34, 0x3b, 0x2a, 0x25, 0x08, 0x07, 0x16, 0x19, - 0x4c, 0x43, 0x52, 0x5d, 0x70, 0x7f, 0x6e, 0x61, 0xc4, 0xcb, - 0xda, 0xd5, 0xf8, 0xf7, 0xe6, 0xe9, 0xbc, 0xb3, 0xa2, 0xad, - 0x80, 0x8f, 0x9e, 0x91, 0xc9, 0xc6, 0xd7, 0xd8, 0xf5, 0xfa, - 0xeb, 0xe4, 0xb1, 0xbe, 0xaf, 0xa0, 0x8d, 0x82, 0x93, 0x9c, - 0x39, 0x36, 0x27, 0x28, 0x05, 0x0a, 0x1b, 0x14, 0x41, 0x4e, - 0x5f, 0x50, 0x7d, 0x72, 0x63, 0x6c, 0x00, 0x10, 0x20, 0x30, - 0x40, 0x50, 0x60, 0x70, 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, - 0xe0, 0xf0, 0x1d, 0x0d, 0x3d, 0x2d, 0x5d, 0x4d, 0x7d, 0x6d, - 0x9d, 0x8d, 0xbd, 0xad, 0xdd, 0xcd, 0xfd, 0xed, 0x3a, 0x2a, - 0x1a, 0x0a, 0x7a, 0x6a, 0x5a, 0x4a, 0xba, 0xaa, 0x9a, 0x8a, - 0xfa, 0xea, 0xda, 0xca, 0x27, 0x37, 0x07, 0x17, 0x67, 0x77, - 0x47, 0x57, 0xa7, 0xb7, 0x87, 0x97, 0xe7, 0xf7, 0xc7, 0xd7, - 0x74, 0x64, 0x54, 0x44, 0x34, 0x24, 0x14, 0x04, 0xf4, 0xe4, - 0xd4, 0xc4, 0xb4, 0xa4, 0x94, 0x84, 0x69, 0x79, 0x49, 0x59, - 0x29, 0x39, 0x09, 0x19, 0xe9, 0xf9, 0xc9, 0xd9, 0xa9, 0xb9, - 0x89, 0x99, 0x4e, 0x5e, 0x6e, 0x7e, 0x0e, 0x1e, 0x2e, 0x3e, - 0xce, 0xde, 0xee, 0xfe, 0x8e, 0x9e, 0xae, 0xbe, 0x53, 0x43, - 0x73, 0x63, 0x13, 0x03, 0x33, 0x23, 0xd3, 0xc3, 0xf3, 0xe3, - 0x93, 0x83, 0xb3, 0xa3, 0xe8, 0xf8, 0xc8, 0xd8, 0xa8, 0xb8, - 0x88, 0x98, 0x68, 0x78, 0x48, 0x58, 0x28, 0x38, 0x08, 0x18, - 0xf5, 0xe5, 0xd5, 0xc5, 0xb5, 0xa5, 0x95, 0x85, 0x75, 0x65, - 0x55, 0x45, 0x35, 0x25, 0x15, 0x05, 0xd2, 0xc2, 0xf2, 0xe2, - 0x92, 0x82, 0xb2, 0xa2, 0x52, 0x42, 0x72, 0x62, 0x12, 0x02, - 0x32, 0x22, 0xcf, 0xdf, 0xef, 0xff, 0x8f, 0x9f, 0xaf, 0xbf, - 0x4f, 0x5f, 0x6f, 0x7f, 0x0f, 0x1f, 0x2f, 0x3f, 0x9c, 0x8c, - 0xbc, 0xac, 0xdc, 0xcc, 0xfc, 0xec, 0x1c, 0x0c, 0x3c, 0x2c, - 0x5c, 0x4c, 0x7c, 0x6c, 0x81, 0x91, 0xa1, 0xb1, 0xc1, 0xd1, - 0xe1, 0xf1, 0x01, 0x11, 0x21, 0x31, 0x41, 0x51, 0x61, 0x71, - 0xa6, 0xb6, 0x86, 0x96, 0xe6, 0xf6, 0xc6, 0xd6, 0x26, 0x36, - 0x06, 0x16, 0x66, 0x76, 0x46, 0x56, 0xbb, 0xab, 0x9b, 0x8b, - 0xfb, 0xeb, 0xdb, 0xcb, 0x3b, 0x2b, 0x1b, 0x0b, 0x7b, 0x6b, - 0x5b, 0x4b, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, - 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x0d, 0x1c, - 0x2f, 0x3e, 0x49, 0x58, 0x6b, 0x7a, 0x85, 0x94, 0xa7, 0xb6, - 0xc1, 0xd0, 0xe3, 0xf2, 0x1a, 0x0b, 0x38, 0x29, 0x5e, 0x4f, - 0x7c, 0x6d, 0x92, 0x83, 0xb0, 0xa1, 0xd6, 0xc7, 0xf4, 0xe5, - 0x17, 0x06, 0x35, 0x24, 0x53, 0x42, 0x71, 0x60, 0x9f, 0x8e, - 0xbd, 0xac, 0xdb, 0xca, 0xf9, 0xe8, 0x34, 0x25, 0x16, 0x07, - 0x70, 0x61, 0x52, 0x43, 0xbc, 0xad, 0x9e, 0x8f, 0xf8, 0xe9, - 0xda, 0xcb, 0x39, 0x28, 0x1b, 0x0a, 0x7d, 0x6c, 0x5f, 0x4e, - 0xb1, 0xa0, 0x93, 0x82, 0xf5, 0xe4, 0xd7, 0xc6, 0x2e, 0x3f, - 0x0c, 0x1d, 0x6a, 0x7b, 0x48, 0x59, 0xa6, 0xb7, 0x84, 0x95, - 0xe2, 0xf3, 0xc0, 0xd1, 0x23, 0x32, 0x01, 0x10, 0x67, 0x76, - 0x45, 0x54, 0xab, 0xba, 0x89, 0x98, 0xef, 0xfe, 0xcd, 0xdc, - 0x68, 0x79, 0x4a, 0x5b, 0x2c, 0x3d, 0x0e, 0x1f, 0xe0, 0xf1, - 0xc2, 0xd3, 0xa4, 0xb5, 0x86, 0x97, 0x65, 0x74, 0x47, 0x56, - 0x21, 0x30, 0x03, 0x12, 0xed, 0xfc, 0xcf, 0xde, 0xa9, 0xb8, - 0x8b, 0x9a, 0x72, 0x63, 0x50, 0x41, 0x36, 0x27, 0x14, 0x05, - 0xfa, 0xeb, 0xd8, 0xc9, 0xbe, 0xaf, 0x9c, 0x8d, 0x7f, 0x6e, - 0x5d, 0x4c, 0x3b, 0x2a, 0x19, 0x08, 0xf7, 0xe6, 0xd5, 0xc4, - 0xb3, 0xa2, 0x91, 0x80, 0x5c, 0x4d, 0x7e, 0x6f, 0x18, 0x09, - 0x3a, 0x2b, 0xd4, 0xc5, 0xf6, 0xe7, 0x90, 0x81, 0xb2, 0xa3, - 0x51, 0x40, 0x73, 0x62, 0x15, 0x04, 0x37, 0x26, 0xd9, 0xc8, - 0xfb, 0xea, 0x9d, 0x8c, 0xbf, 0xae, 0x46, 0x57, 0x64, 0x75, - 0x02, 0x13, 0x20, 0x31, 0xce, 0xdf, 0xec, 0xfd, 0x8a, 0x9b, - 0xa8, 0xb9, 0x4b, 0x5a, 0x69, 0x78, 0x0f, 0x1e, 0x2d, 0x3c, - 0xc3, 0xd2, 0xe1, 0xf0, 0x87, 0x96, 0xa5, 0xb4, 0x00, 0x12, - 0x24, 0x36, 0x48, 0x5a, 0x6c, 0x7e, 0x90, 0x82, 0xb4, 0xa6, - 0xd8, 0xca, 0xfc, 0xee, 0x3d, 0x2f, 0x19, 0x0b, 0x75, 0x67, - 0x51, 0x43, 0xad, 0xbf, 0x89, 0x9b, 0xe5, 0xf7, 0xc1, 0xd3, - 0x7a, 0x68, 0x5e, 0x4c, 0x32, 0x20, 0x16, 0x04, 0xea, 0xf8, - 0xce, 0xdc, 0xa2, 0xb0, 0x86, 0x94, 0x47, 0x55, 0x63, 0x71, - 0x0f, 0x1d, 0x2b, 0x39, 0xd7, 0xc5, 0xf3, 0xe1, 0x9f, 0x8d, - 0xbb, 0xa9, 0xf4, 0xe6, 0xd0, 0xc2, 0xbc, 0xae, 0x98, 0x8a, - 0x64, 0x76, 0x40, 0x52, 0x2c, 0x3e, 0x08, 0x1a, 0xc9, 0xdb, - 0xed, 0xff, 0x81, 0x93, 0xa5, 0xb7, 0x59, 0x4b, 0x7d, 0x6f, - 0x11, 0x03, 0x35, 0x27, 0x8e, 0x9c, 0xaa, 0xb8, 0xc6, 0xd4, - 0xe2, 0xf0, 0x1e, 0x0c, 0x3a, 0x28, 0x56, 0x44, 0x72, 0x60, - 0xb3, 0xa1, 0x97, 0x85, 0xfb, 0xe9, 0xdf, 0xcd, 0x23, 0x31, - 0x07, 0x15, 0x6b, 0x79, 0x4f, 0x5d, 0xf5, 0xe7, 0xd1, 0xc3, - 0xbd, 0xaf, 0x99, 0x8b, 0x65, 0x77, 0x41, 0x53, 0x2d, 0x3f, - 0x09, 0x1b, 0xc8, 0xda, 0xec, 0xfe, 0x80, 0x92, 0xa4, 0xb6, - 0x58, 0x4a, 0x7c, 0x6e, 0x10, 0x02, 0x34, 0x26, 0x8f, 0x9d, - 0xab, 0xb9, 0xc7, 0xd5, 0xe3, 0xf1, 0x1f, 0x0d, 0x3b, 0x29, - 0x57, 0x45, 0x73, 0x61, 0xb2, 0xa0, 0x96, 0x84, 0xfa, 0xe8, - 0xde, 0xcc, 0x22, 0x30, 0x06, 0x14, 0x6a, 0x78, 0x4e, 0x5c, - 0x01, 0x13, 0x25, 0x37, 0x49, 0x5b, 0x6d, 0x7f, 0x91, 0x83, - 0xb5, 0xa7, 0xd9, 0xcb, 0xfd, 0xef, 0x3c, 0x2e, 0x18, 0x0a, - 0x74, 0x66, 0x50, 0x42, 0xac, 0xbe, 0x88, 0x9a, 0xe4, 0xf6, - 0xc0, 0xd2, 0x7b, 0x69, 0x5f, 0x4d, 0x33, 0x21, 0x17, 0x05, - 0xeb, 0xf9, 0xcf, 0xdd, 0xa3, 0xb1, 0x87, 0x95, 0x46, 0x54, - 0x62, 0x70, 0x0e, 0x1c, 0x2a, 0x38, 0xd6, 0xc4, 0xf2, 0xe0, - 0x9e, 0x8c, 0xba, 0xa8, 0x00, 0x13, 0x26, 0x35, 0x4c, 0x5f, - 0x6a, 0x79, 0x98, 0x8b, 0xbe, 0xad, 0xd4, 0xc7, 0xf2, 0xe1, - 0x2d, 0x3e, 0x0b, 0x18, 0x61, 0x72, 0x47, 0x54, 0xb5, 0xa6, - 0x93, 0x80, 0xf9, 0xea, 0xdf, 0xcc, 0x5a, 0x49, 0x7c, 0x6f, - 0x16, 0x05, 0x30, 0x23, 0xc2, 0xd1, 0xe4, 0xf7, 0x8e, 0x9d, - 0xa8, 0xbb, 0x77, 0x64, 0x51, 0x42, 0x3b, 0x28, 0x1d, 0x0e, - 0xef, 0xfc, 0xc9, 0xda, 0xa3, 0xb0, 0x85, 0x96, 0xb4, 0xa7, - 0x92, 0x81, 0xf8, 0xeb, 0xde, 0xcd, 0x2c, 0x3f, 0x0a, 0x19, - 0x60, 0x73, 0x46, 0x55, 0x99, 0x8a, 0xbf, 0xac, 0xd5, 0xc6, - 0xf3, 0xe0, 0x01, 0x12, 0x27, 0x34, 0x4d, 0x5e, 0x6b, 0x78, - 0xee, 0xfd, 0xc8, 0xdb, 0xa2, 0xb1, 0x84, 0x97, 0x76, 0x65, - 0x50, 0x43, 0x3a, 0x29, 0x1c, 0x0f, 0xc3, 0xd0, 0xe5, 0xf6, - 0x8f, 0x9c, 0xa9, 0xba, 0x5b, 0x48, 0x7d, 0x6e, 0x17, 0x04, - 0x31, 0x22, 0x75, 0x66, 0x53, 0x40, 0x39, 0x2a, 0x1f, 0x0c, - 0xed, 0xfe, 0xcb, 0xd8, 0xa1, 0xb2, 0x87, 0x94, 0x58, 0x4b, - 0x7e, 0x6d, 0x14, 0x07, 0x32, 0x21, 0xc0, 0xd3, 0xe6, 0xf5, - 0x8c, 0x9f, 0xaa, 0xb9, 0x2f, 0x3c, 0x09, 0x1a, 0x63, 0x70, - 0x45, 0x56, 0xb7, 0xa4, 0x91, 0x82, 0xfb, 0xe8, 0xdd, 0xce, - 0x02, 0x11, 0x24, 0x37, 0x4e, 0x5d, 0x68, 0x7b, 0x9a, 0x89, - 0xbc, 0xaf, 0xd6, 0xc5, 0xf0, 0xe3, 0xc1, 0xd2, 0xe7, 0xf4, - 0x8d, 0x9e, 0xab, 0xb8, 0x59, 0x4a, 0x7f, 0x6c, 0x15, 0x06, - 0x33, 0x20, 0xec, 0xff, 0xca, 0xd9, 0xa0, 0xb3, 0x86, 0x95, - 0x74, 0x67, 0x52, 0x41, 0x38, 0x2b, 0x1e, 0x0d, 0x9b, 0x88, - 0xbd, 0xae, 0xd7, 0xc4, 0xf1, 0xe2, 0x03, 0x10, 0x25, 0x36, - 0x4f, 0x5c, 0x69, 0x7a, 0xb6, 0xa5, 0x90, 0x83, 0xfa, 0xe9, - 0xdc, 0xcf, 0x2e, 0x3d, 0x08, 0x1b, 0x62, 0x71, 0x44, 0x57, - 0x00, 0x14, 0x28, 0x3c, 0x50, 0x44, 0x78, 0x6c, 0xa0, 0xb4, - 0x88, 0x9c, 0xf0, 0xe4, 0xd8, 0xcc, 0x5d, 0x49, 0x75, 0x61, - 0x0d, 0x19, 0x25, 0x31, 0xfd, 0xe9, 0xd5, 0xc1, 0xad, 0xb9, - 0x85, 0x91, 0xba, 0xae, 0x92, 0x86, 0xea, 0xfe, 0xc2, 0xd6, - 0x1a, 0x0e, 0x32, 0x26, 0x4a, 0x5e, 0x62, 0x76, 0xe7, 0xf3, - 0xcf, 0xdb, 0xb7, 0xa3, 0x9f, 0x8b, 0x47, 0x53, 0x6f, 0x7b, - 0x17, 0x03, 0x3f, 0x2b, 0x69, 0x7d, 0x41, 0x55, 0x39, 0x2d, - 0x11, 0x05, 0xc9, 0xdd, 0xe1, 0xf5, 0x99, 0x8d, 0xb1, 0xa5, - 0x34, 0x20, 0x1c, 0x08, 0x64, 0x70, 0x4c, 0x58, 0x94, 0x80, - 0xbc, 0xa8, 0xc4, 0xd0, 0xec, 0xf8, 0xd3, 0xc7, 0xfb, 0xef, - 0x83, 0x97, 0xab, 0xbf, 0x73, 0x67, 0x5b, 0x4f, 0x23, 0x37, - 0x0b, 0x1f, 0x8e, 0x9a, 0xa6, 0xb2, 0xde, 0xca, 0xf6, 0xe2, - 0x2e, 0x3a, 0x06, 0x12, 0x7e, 0x6a, 0x56, 0x42, 0xd2, 0xc6, - 0xfa, 0xee, 0x82, 0x96, 0xaa, 0xbe, 0x72, 0x66, 0x5a, 0x4e, - 0x22, 0x36, 0x0a, 0x1e, 0x8f, 0x9b, 0xa7, 0xb3, 0xdf, 0xcb, - 0xf7, 0xe3, 0x2f, 0x3b, 0x07, 0x13, 0x7f, 0x6b, 0x57, 0x43, - 0x68, 0x7c, 0x40, 0x54, 0x38, 0x2c, 0x10, 0x04, 0xc8, 0xdc, - 0xe0, 0xf4, 0x98, 0x8c, 0xb0, 0xa4, 0x35, 0x21, 0x1d, 0x09, - 0x65, 0x71, 0x4d, 0x59, 0x95, 0x81, 0xbd, 0xa9, 0xc5, 0xd1, - 0xed, 0xf9, 0xbb, 0xaf, 0x93, 0x87, 0xeb, 0xff, 0xc3, 0xd7, - 0x1b, 0x0f, 0x33, 0x27, 0x4b, 0x5f, 0x63, 0x77, 0xe6, 0xf2, - 0xce, 0xda, 0xb6, 0xa2, 0x9e, 0x8a, 0x46, 0x52, 0x6e, 0x7a, - 0x16, 0x02, 0x3e, 0x2a, 0x01, 0x15, 0x29, 0x3d, 0x51, 0x45, - 0x79, 0x6d, 0xa1, 0xb5, 0x89, 0x9d, 0xf1, 0xe5, 0xd9, 0xcd, - 0x5c, 0x48, 0x74, 0x60, 0x0c, 0x18, 0x24, 0x30, 0xfc, 0xe8, - 0xd4, 0xc0, 0xac, 0xb8, 0x84, 0x90, 0x00, 0x15, 0x2a, 0x3f, - 0x54, 0x41, 0x7e, 0x6b, 0xa8, 0xbd, 0x82, 0x97, 0xfc, 0xe9, - 0xd6, 0xc3, 0x4d, 0x58, 0x67, 0x72, 0x19, 0x0c, 0x33, 0x26, - 0xe5, 0xf0, 0xcf, 0xda, 0xb1, 0xa4, 0x9b, 0x8e, 0x9a, 0x8f, - 0xb0, 0xa5, 0xce, 0xdb, 0xe4, 0xf1, 0x32, 0x27, 0x18, 0x0d, - 0x66, 0x73, 0x4c, 0x59, 0xd7, 0xc2, 0xfd, 0xe8, 0x83, 0x96, - 0xa9, 0xbc, 0x7f, 0x6a, 0x55, 0x40, 0x2b, 0x3e, 0x01, 0x14, - 0x29, 0x3c, 0x03, 0x16, 0x7d, 0x68, 0x57, 0x42, 0x81, 0x94, - 0xab, 0xbe, 0xd5, 0xc0, 0xff, 0xea, 0x64, 0x71, 0x4e, 0x5b, - 0x30, 0x25, 0x1a, 0x0f, 0xcc, 0xd9, 0xe6, 0xf3, 0x98, 0x8d, - 0xb2, 0xa7, 0xb3, 0xa6, 0x99, 0x8c, 0xe7, 0xf2, 0xcd, 0xd8, - 0x1b, 0x0e, 0x31, 0x24, 0x4f, 0x5a, 0x65, 0x70, 0xfe, 0xeb, - 0xd4, 0xc1, 0xaa, 0xbf, 0x80, 0x95, 0x56, 0x43, 0x7c, 0x69, - 0x02, 0x17, 0x28, 0x3d, 0x52, 0x47, 0x78, 0x6d, 0x06, 0x13, - 0x2c, 0x39, 0xfa, 0xef, 0xd0, 0xc5, 0xae, 0xbb, 0x84, 0x91, - 0x1f, 0x0a, 0x35, 0x20, 0x4b, 0x5e, 0x61, 0x74, 0xb7, 0xa2, - 0x9d, 0x88, 0xe3, 0xf6, 0xc9, 0xdc, 0xc8, 0xdd, 0xe2, 0xf7, - 0x9c, 0x89, 0xb6, 0xa3, 0x60, 0x75, 0x4a, 0x5f, 0x34, 0x21, - 0x1e, 0x0b, 0x85, 0x90, 0xaf, 0xba, 0xd1, 0xc4, 0xfb, 0xee, - 0x2d, 0x38, 0x07, 0x12, 0x79, 0x6c, 0x53, 0x46, 0x7b, 0x6e, - 0x51, 0x44, 0x2f, 0x3a, 0x05, 0x10, 0xd3, 0xc6, 0xf9, 0xec, - 0x87, 0x92, 0xad, 0xb8, 0x36, 0x23, 0x1c, 0x09, 0x62, 0x77, - 0x48, 0x5d, 0x9e, 0x8b, 0xb4, 0xa1, 0xca, 0xdf, 0xe0, 0xf5, - 0xe1, 0xf4, 0xcb, 0xde, 0xb5, 0xa0, 0x9f, 0x8a, 0x49, 0x5c, - 0x63, 0x76, 0x1d, 0x08, 0x37, 0x22, 0xac, 0xb9, 0x86, 0x93, - 0xf8, 0xed, 0xd2, 0xc7, 0x04, 0x11, 0x2e, 0x3b, 0x50, 0x45, - 0x7a, 0x6f, 0x00, 0x16, 0x2c, 0x3a, 0x58, 0x4e, 0x74, 0x62, - 0xb0, 0xa6, 0x9c, 0x8a, 0xe8, 0xfe, 0xc4, 0xd2, 0x7d, 0x6b, - 0x51, 0x47, 0x25, 0x33, 0x09, 0x1f, 0xcd, 0xdb, 0xe1, 0xf7, - 0x95, 0x83, 0xb9, 0xaf, 0xfa, 0xec, 0xd6, 0xc0, 0xa2, 0xb4, - 0x8e, 0x98, 0x4a, 0x5c, 0x66, 0x70, 0x12, 0x04, 0x3e, 0x28, - 0x87, 0x91, 0xab, 0xbd, 0xdf, 0xc9, 0xf3, 0xe5, 0x37, 0x21, - 0x1b, 0x0d, 0x6f, 0x79, 0x43, 0x55, 0xe9, 0xff, 0xc5, 0xd3, - 0xb1, 0xa7, 0x9d, 0x8b, 0x59, 0x4f, 0x75, 0x63, 0x01, 0x17, - 0x2d, 0x3b, 0x94, 0x82, 0xb8, 0xae, 0xcc, 0xda, 0xe0, 0xf6, - 0x24, 0x32, 0x08, 0x1e, 0x7c, 0x6a, 0x50, 0x46, 0x13, 0x05, - 0x3f, 0x29, 0x4b, 0x5d, 0x67, 0x71, 0xa3, 0xb5, 0x8f, 0x99, - 0xfb, 0xed, 0xd7, 0xc1, 0x6e, 0x78, 0x42, 0x54, 0x36, 0x20, - 0x1a, 0x0c, 0xde, 0xc8, 0xf2, 0xe4, 0x86, 0x90, 0xaa, 0xbc, - 0xcf, 0xd9, 0xe3, 0xf5, 0x97, 0x81, 0xbb, 0xad, 0x7f, 0x69, - 0x53, 0x45, 0x27, 0x31, 0x0b, 0x1d, 0xb2, 0xa4, 0x9e, 0x88, - 0xea, 0xfc, 0xc6, 0xd0, 0x02, 0x14, 0x2e, 0x38, 0x5a, 0x4c, - 0x76, 0x60, 0x35, 0x23, 0x19, 0x0f, 0x6d, 0x7b, 0x41, 0x57, - 0x85, 0x93, 0xa9, 0xbf, 0xdd, 0xcb, 0xf1, 0xe7, 0x48, 0x5e, - 0x64, 0x72, 0x10, 0x06, 0x3c, 0x2a, 0xf8, 0xee, 0xd4, 0xc2, - 0xa0, 0xb6, 0x8c, 0x9a, 0x26, 0x30, 0x0a, 0x1c, 0x7e, 0x68, - 0x52, 0x44, 0x96, 0x80, 0xba, 0xac, 0xce, 0xd8, 0xe2, 0xf4, - 0x5b, 0x4d, 0x77, 0x61, 0x03, 0x15, 0x2f, 0x39, 0xeb, 0xfd, - 0xc7, 0xd1, 0xb3, 0xa5, 0x9f, 0x89, 0xdc, 0xca, 0xf0, 0xe6, - 0x84, 0x92, 0xa8, 0xbe, 0x6c, 0x7a, 0x40, 0x56, 0x34, 0x22, - 0x18, 0x0e, 0xa1, 0xb7, 0x8d, 0x9b, 0xf9, 0xef, 0xd5, 0xc3, - 0x11, 0x07, 0x3d, 0x2b, 0x49, 0x5f, 0x65, 0x73, 0x00, 0x17, - 0x2e, 0x39, 0x5c, 0x4b, 0x72, 0x65, 0xb8, 0xaf, 0x96, 0x81, - 0xe4, 0xf3, 0xca, 0xdd, 0x6d, 0x7a, 0x43, 0x54, 0x31, 0x26, - 0x1f, 0x08, 0xd5, 0xc2, 0xfb, 0xec, 0x89, 0x9e, 0xa7, 0xb0, - 0xda, 0xcd, 0xf4, 0xe3, 0x86, 0x91, 0xa8, 0xbf, 0x62, 0x75, - 0x4c, 0x5b, 0x3e, 0x29, 0x10, 0x07, 0xb7, 0xa0, 0x99, 0x8e, - 0xeb, 0xfc, 0xc5, 0xd2, 0x0f, 0x18, 0x21, 0x36, 0x53, 0x44, - 0x7d, 0x6a, 0xa9, 0xbe, 0x87, 0x90, 0xf5, 0xe2, 0xdb, 0xcc, - 0x11, 0x06, 0x3f, 0x28, 0x4d, 0x5a, 0x63, 0x74, 0xc4, 0xd3, - 0xea, 0xfd, 0x98, 0x8f, 0xb6, 0xa1, 0x7c, 0x6b, 0x52, 0x45, - 0x20, 0x37, 0x0e, 0x19, 0x73, 0x64, 0x5d, 0x4a, 0x2f, 0x38, - 0x01, 0x16, 0xcb, 0xdc, 0xe5, 0xf2, 0x97, 0x80, 0xb9, 0xae, - 0x1e, 0x09, 0x30, 0x27, 0x42, 0x55, 0x6c, 0x7b, 0xa6, 0xb1, - 0x88, 0x9f, 0xfa, 0xed, 0xd4, 0xc3, 0x4f, 0x58, 0x61, 0x76, - 0x13, 0x04, 0x3d, 0x2a, 0xf7, 0xe0, 0xd9, 0xce, 0xab, 0xbc, - 0x85, 0x92, 0x22, 0x35, 0x0c, 0x1b, 0x7e, 0x69, 0x50, 0x47, - 0x9a, 0x8d, 0xb4, 0xa3, 0xc6, 0xd1, 0xe8, 0xff, 0x95, 0x82, - 0xbb, 0xac, 0xc9, 0xde, 0xe7, 0xf0, 0x2d, 0x3a, 0x03, 0x14, - 0x71, 0x66, 0x5f, 0x48, 0xf8, 0xef, 0xd6, 0xc1, 0xa4, 0xb3, - 0x8a, 0x9d, 0x40, 0x57, 0x6e, 0x79, 0x1c, 0x0b, 0x32, 0x25, - 0xe6, 0xf1, 0xc8, 0xdf, 0xba, 0xad, 0x94, 0x83, 0x5e, 0x49, - 0x70, 0x67, 0x02, 0x15, 0x2c, 0x3b, 0x8b, 0x9c, 0xa5, 0xb2, - 0xd7, 0xc0, 0xf9, 0xee, 0x33, 0x24, 0x1d, 0x0a, 0x6f, 0x78, - 0x41, 0x56, 0x3c, 0x2b, 0x12, 0x05, 0x60, 0x77, 0x4e, 0x59, - 0x84, 0x93, 0xaa, 0xbd, 0xd8, 0xcf, 0xf6, 0xe1, 0x51, 0x46, - 0x7f, 0x68, 0x0d, 0x1a, 0x23, 0x34, 0xe9, 0xfe, 0xc7, 0xd0, - 0xb5, 0xa2, 0x9b, 0x8c, 0x00, 0x18, 0x30, 0x28, 0x60, 0x78, - 0x50, 0x48, 0xc0, 0xd8, 0xf0, 0xe8, 0xa0, 0xb8, 0x90, 0x88, - 0x9d, 0x85, 0xad, 0xb5, 0xfd, 0xe5, 0xcd, 0xd5, 0x5d, 0x45, - 0x6d, 0x75, 0x3d, 0x25, 0x0d, 0x15, 0x27, 0x3f, 0x17, 0x0f, - 0x47, 0x5f, 0x77, 0x6f, 0xe7, 0xff, 0xd7, 0xcf, 0x87, 0x9f, - 0xb7, 0xaf, 0xba, 0xa2, 0x8a, 0x92, 0xda, 0xc2, 0xea, 0xf2, - 0x7a, 0x62, 0x4a, 0x52, 0x1a, 0x02, 0x2a, 0x32, 0x4e, 0x56, - 0x7e, 0x66, 0x2e, 0x36, 0x1e, 0x06, 0x8e, 0x96, 0xbe, 0xa6, - 0xee, 0xf6, 0xde, 0xc6, 0xd3, 0xcb, 0xe3, 0xfb, 0xb3, 0xab, - 0x83, 0x9b, 0x13, 0x0b, 0x23, 0x3b, 0x73, 0x6b, 0x43, 0x5b, - 0x69, 0x71, 0x59, 0x41, 0x09, 0x11, 0x39, 0x21, 0xa9, 0xb1, - 0x99, 0x81, 0xc9, 0xd1, 0xf9, 0xe1, 0xf4, 0xec, 0xc4, 0xdc, - 0x94, 0x8c, 0xa4, 0xbc, 0x34, 0x2c, 0x04, 0x1c, 0x54, 0x4c, - 0x64, 0x7c, 0x9c, 0x84, 0xac, 0xb4, 0xfc, 0xe4, 0xcc, 0xd4, - 0x5c, 0x44, 0x6c, 0x74, 0x3c, 0x24, 0x0c, 0x14, 0x01, 0x19, - 0x31, 0x29, 0x61, 0x79, 0x51, 0x49, 0xc1, 0xd9, 0xf1, 0xe9, - 0xa1, 0xb9, 0x91, 0x89, 0xbb, 0xa3, 0x8b, 0x93, 0xdb, 0xc3, - 0xeb, 0xf3, 0x7b, 0x63, 0x4b, 0x53, 0x1b, 0x03, 0x2b, 0x33, - 0x26, 0x3e, 0x16, 0x0e, 0x46, 0x5e, 0x76, 0x6e, 0xe6, 0xfe, - 0xd6, 0xce, 0x86, 0x9e, 0xb6, 0xae, 0xd2, 0xca, 0xe2, 0xfa, - 0xb2, 0xaa, 0x82, 0x9a, 0x12, 0x0a, 0x22, 0x3a, 0x72, 0x6a, - 0x42, 0x5a, 0x4f, 0x57, 0x7f, 0x67, 0x2f, 0x37, 0x1f, 0x07, - 0x8f, 0x97, 0xbf, 0xa7, 0xef, 0xf7, 0xdf, 0xc7, 0xf5, 0xed, - 0xc5, 0xdd, 0x95, 0x8d, 0xa5, 0xbd, 0x35, 0x2d, 0x05, 0x1d, - 0x55, 0x4d, 0x65, 0x7d, 0x68, 0x70, 0x58, 0x40, 0x08, 0x10, - 0x38, 0x20, 0xa8, 0xb0, 0x98, 0x80, 0xc8, 0xd0, 0xf8, 0xe0, - 0x00, 0x19, 0x32, 0x2b, 0x64, 0x7d, 0x56, 0x4f, 0xc8, 0xd1, - 0xfa, 0xe3, 0xac, 0xb5, 0x9e, 0x87, 0x8d, 0x94, 0xbf, 0xa6, - 0xe9, 0xf0, 0xdb, 0xc2, 0x45, 0x5c, 0x77, 0x6e, 0x21, 0x38, - 0x13, 0x0a, 0x07, 0x1e, 0x35, 0x2c, 0x63, 0x7a, 0x51, 0x48, - 0xcf, 0xd6, 0xfd, 0xe4, 0xab, 0xb2, 0x99, 0x80, 0x8a, 0x93, - 0xb8, 0xa1, 0xee, 0xf7, 0xdc, 0xc5, 0x42, 0x5b, 0x70, 0x69, - 0x26, 0x3f, 0x14, 0x0d, 0x0e, 0x17, 0x3c, 0x25, 0x6a, 0x73, - 0x58, 0x41, 0xc6, 0xdf, 0xf4, 0xed, 0xa2, 0xbb, 0x90, 0x89, - 0x83, 0x9a, 0xb1, 0xa8, 0xe7, 0xfe, 0xd5, 0xcc, 0x4b, 0x52, - 0x79, 0x60, 0x2f, 0x36, 0x1d, 0x04, 0x09, 0x10, 0x3b, 0x22, - 0x6d, 0x74, 0x5f, 0x46, 0xc1, 0xd8, 0xf3, 0xea, 0xa5, 0xbc, - 0x97, 0x8e, 0x84, 0x9d, 0xb6, 0xaf, 0xe0, 0xf9, 0xd2, 0xcb, - 0x4c, 0x55, 0x7e, 0x67, 0x28, 0x31, 0x1a, 0x03, 0x1c, 0x05, - 0x2e, 0x37, 0x78, 0x61, 0x4a, 0x53, 0xd4, 0xcd, 0xe6, 0xff, - 0xb0, 0xa9, 0x82, 0x9b, 0x91, 0x88, 0xa3, 0xba, 0xf5, 0xec, - 0xc7, 0xde, 0x59, 0x40, 0x6b, 0x72, 0x3d, 0x24, 0x0f, 0x16, - 0x1b, 0x02, 0x29, 0x30, 0x7f, 0x66, 0x4d, 0x54, 0xd3, 0xca, - 0xe1, 0xf8, 0xb7, 0xae, 0x85, 0x9c, 0x96, 0x8f, 0xa4, 0xbd, - 0xf2, 0xeb, 0xc0, 0xd9, 0x5e, 0x47, 0x6c, 0x75, 0x3a, 0x23, - 0x08, 0x11, 0x12, 0x0b, 0x20, 0x39, 0x76, 0x6f, 0x44, 0x5d, - 0xda, 0xc3, 0xe8, 0xf1, 0xbe, 0xa7, 0x8c, 0x95, 0x9f, 0x86, - 0xad, 0xb4, 0xfb, 0xe2, 0xc9, 0xd0, 0x57, 0x4e, 0x65, 0x7c, - 0x33, 0x2a, 0x01, 0x18, 0x15, 0x0c, 0x27, 0x3e, 0x71, 0x68, - 0x43, 0x5a, 0xdd, 0xc4, 0xef, 0xf6, 0xb9, 0xa0, 0x8b, 0x92, - 0x98, 0x81, 0xaa, 0xb3, 0xfc, 0xe5, 0xce, 0xd7, 0x50, 0x49, - 0x62, 0x7b, 0x34, 0x2d, 0x06, 0x1f, 0x00, 0x1a, 0x34, 0x2e, - 0x68, 0x72, 0x5c, 0x46, 0xd0, 0xca, 0xe4, 0xfe, 0xb8, 0xa2, - 0x8c, 0x96, 0xbd, 0xa7, 0x89, 0x93, 0xd5, 0xcf, 0xe1, 0xfb, - 0x6d, 0x77, 0x59, 0x43, 0x05, 0x1f, 0x31, 0x2b, 0x67, 0x7d, - 0x53, 0x49, 0x0f, 0x15, 0x3b, 0x21, 0xb7, 0xad, 0x83, 0x99, - 0xdf, 0xc5, 0xeb, 0xf1, 0xda, 0xc0, 0xee, 0xf4, 0xb2, 0xa8, - 0x86, 0x9c, 0x0a, 0x10, 0x3e, 0x24, 0x62, 0x78, 0x56, 0x4c, - 0xce, 0xd4, 0xfa, 0xe0, 0xa6, 0xbc, 0x92, 0x88, 0x1e, 0x04, - 0x2a, 0x30, 0x76, 0x6c, 0x42, 0x58, 0x73, 0x69, 0x47, 0x5d, - 0x1b, 0x01, 0x2f, 0x35, 0xa3, 0xb9, 0x97, 0x8d, 0xcb, 0xd1, - 0xff, 0xe5, 0xa9, 0xb3, 0x9d, 0x87, 0xc1, 0xdb, 0xf5, 0xef, - 0x79, 0x63, 0x4d, 0x57, 0x11, 0x0b, 0x25, 0x3f, 0x14, 0x0e, - 0x20, 0x3a, 0x7c, 0x66, 0x48, 0x52, 0xc4, 0xde, 0xf0, 0xea, - 0xac, 0xb6, 0x98, 0x82, 0x81, 0x9b, 0xb5, 0xaf, 0xe9, 0xf3, - 0xdd, 0xc7, 0x51, 0x4b, 0x65, 0x7f, 0x39, 0x23, 0x0d, 0x17, - 0x3c, 0x26, 0x08, 0x12, 0x54, 0x4e, 0x60, 0x7a, 0xec, 0xf6, - 0xd8, 0xc2, 0x84, 0x9e, 0xb0, 0xaa, 0xe6, 0xfc, 0xd2, 0xc8, - 0x8e, 0x94, 0xba, 0xa0, 0x36, 0x2c, 0x02, 0x18, 0x5e, 0x44, - 0x6a, 0x70, 0x5b, 0x41, 0x6f, 0x75, 0x33, 0x29, 0x07, 0x1d, - 0x8b, 0x91, 0xbf, 0xa5, 0xe3, 0xf9, 0xd7, 0xcd, 0x4f, 0x55, - 0x7b, 0x61, 0x27, 0x3d, 0x13, 0x09, 0x9f, 0x85, 0xab, 0xb1, - 0xf7, 0xed, 0xc3, 0xd9, 0xf2, 0xe8, 0xc6, 0xdc, 0x9a, 0x80, - 0xae, 0xb4, 0x22, 0x38, 0x16, 0x0c, 0x4a, 0x50, 0x7e, 0x64, - 0x28, 0x32, 0x1c, 0x06, 0x40, 0x5a, 0x74, 0x6e, 0xf8, 0xe2, - 0xcc, 0xd6, 0x90, 0x8a, 0xa4, 0xbe, 0x95, 0x8f, 0xa1, 0xbb, - 0xfd, 0xe7, 0xc9, 0xd3, 0x45, 0x5f, 0x71, 0x6b, 0x2d, 0x37, - 0x19, 0x03, 0x00, 0x1b, 0x36, 0x2d, 0x6c, 0x77, 0x5a, 0x41, - 0xd8, 0xc3, 0xee, 0xf5, 0xb4, 0xaf, 0x82, 0x99, 0xad, 0xb6, - 0x9b, 0x80, 0xc1, 0xda, 0xf7, 0xec, 0x75, 0x6e, 0x43, 0x58, - 0x19, 0x02, 0x2f, 0x34, 0x47, 0x5c, 0x71, 0x6a, 0x2b, 0x30, - 0x1d, 0x06, 0x9f, 0x84, 0xa9, 0xb2, 0xf3, 0xe8, 0xc5, 0xde, - 0xea, 0xf1, 0xdc, 0xc7, 0x86, 0x9d, 0xb0, 0xab, 0x32, 0x29, - 0x04, 0x1f, 0x5e, 0x45, 0x68, 0x73, 0x8e, 0x95, 0xb8, 0xa3, - 0xe2, 0xf9, 0xd4, 0xcf, 0x56, 0x4d, 0x60, 0x7b, 0x3a, 0x21, - 0x0c, 0x17, 0x23, 0x38, 0x15, 0x0e, 0x4f, 0x54, 0x79, 0x62, - 0xfb, 0xe0, 0xcd, 0xd6, 0x97, 0x8c, 0xa1, 0xba, 0xc9, 0xd2, - 0xff, 0xe4, 0xa5, 0xbe, 0x93, 0x88, 0x11, 0x0a, 0x27, 0x3c, - 0x7d, 0x66, 0x4b, 0x50, 0x64, 0x7f, 0x52, 0x49, 0x08, 0x13, - 0x3e, 0x25, 0xbc, 0xa7, 0x8a, 0x91, 0xd0, 0xcb, 0xe6, 0xfd, - 0x01, 0x1a, 0x37, 0x2c, 0x6d, 0x76, 0x5b, 0x40, 0xd9, 0xc2, - 0xef, 0xf4, 0xb5, 0xae, 0x83, 0x98, 0xac, 0xb7, 0x9a, 0x81, - 0xc0, 0xdb, 0xf6, 0xed, 0x74, 0x6f, 0x42, 0x59, 0x18, 0x03, - 0x2e, 0x35, 0x46, 0x5d, 0x70, 0x6b, 0x2a, 0x31, 0x1c, 0x07, - 0x9e, 0x85, 0xa8, 0xb3, 0xf2, 0xe9, 0xc4, 0xdf, 0xeb, 0xf0, - 0xdd, 0xc6, 0x87, 0x9c, 0xb1, 0xaa, 0x33, 0x28, 0x05, 0x1e, - 0x5f, 0x44, 0x69, 0x72, 0x8f, 0x94, 0xb9, 0xa2, 0xe3, 0xf8, - 0xd5, 0xce, 0x57, 0x4c, 0x61, 0x7a, 0x3b, 0x20, 0x0d, 0x16, - 0x22, 0x39, 0x14, 0x0f, 0x4e, 0x55, 0x78, 0x63, 0xfa, 0xe1, - 0xcc, 0xd7, 0x96, 0x8d, 0xa0, 0xbb, 0xc8, 0xd3, 0xfe, 0xe5, - 0xa4, 0xbf, 0x92, 0x89, 0x10, 0x0b, 0x26, 0x3d, 0x7c, 0x67, - 0x4a, 0x51, 0x65, 0x7e, 0x53, 0x48, 0x09, 0x12, 0x3f, 0x24, - 0xbd, 0xa6, 0x8b, 0x90, 0xd1, 0xca, 0xe7, 0xfc, 0x00, 0x1c, - 0x38, 0x24, 0x70, 0x6c, 0x48, 0x54, 0xe0, 0xfc, 0xd8, 0xc4, - 0x90, 0x8c, 0xa8, 0xb4, 0xdd, 0xc1, 0xe5, 0xf9, 0xad, 0xb1, - 0x95, 0x89, 0x3d, 0x21, 0x05, 0x19, 0x4d, 0x51, 0x75, 0x69, - 0xa7, 0xbb, 0x9f, 0x83, 0xd7, 0xcb, 0xef, 0xf3, 0x47, 0x5b, - 0x7f, 0x63, 0x37, 0x2b, 0x0f, 0x13, 0x7a, 0x66, 0x42, 0x5e, - 0x0a, 0x16, 0x32, 0x2e, 0x9a, 0x86, 0xa2, 0xbe, 0xea, 0xf6, - 0xd2, 0xce, 0x53, 0x4f, 0x6b, 0x77, 0x23, 0x3f, 0x1b, 0x07, - 0xb3, 0xaf, 0x8b, 0x97, 0xc3, 0xdf, 0xfb, 0xe7, 0x8e, 0x92, - 0xb6, 0xaa, 0xfe, 0xe2, 0xc6, 0xda, 0x6e, 0x72, 0x56, 0x4a, - 0x1e, 0x02, 0x26, 0x3a, 0xf4, 0xe8, 0xcc, 0xd0, 0x84, 0x98, - 0xbc, 0xa0, 0x14, 0x08, 0x2c, 0x30, 0x64, 0x78, 0x5c, 0x40, - 0x29, 0x35, 0x11, 0x0d, 0x59, 0x45, 0x61, 0x7d, 0xc9, 0xd5, - 0xf1, 0xed, 0xb9, 0xa5, 0x81, 0x9d, 0xa6, 0xba, 0x9e, 0x82, - 0xd6, 0xca, 0xee, 0xf2, 0x46, 0x5a, 0x7e, 0x62, 0x36, 0x2a, - 0x0e, 0x12, 0x7b, 0x67, 0x43, 0x5f, 0x0b, 0x17, 0x33, 0x2f, - 0x9b, 0x87, 0xa3, 0xbf, 0xeb, 0xf7, 0xd3, 0xcf, 0x01, 0x1d, - 0x39, 0x25, 0x71, 0x6d, 0x49, 0x55, 0xe1, 0xfd, 0xd9, 0xc5, - 0x91, 0x8d, 0xa9, 0xb5, 0xdc, 0xc0, 0xe4, 0xf8, 0xac, 0xb0, - 0x94, 0x88, 0x3c, 0x20, 0x04, 0x18, 0x4c, 0x50, 0x74, 0x68, - 0xf5, 0xe9, 0xcd, 0xd1, 0x85, 0x99, 0xbd, 0xa1, 0x15, 0x09, - 0x2d, 0x31, 0x65, 0x79, 0x5d, 0x41, 0x28, 0x34, 0x10, 0x0c, - 0x58, 0x44, 0x60, 0x7c, 0xc8, 0xd4, 0xf0, 0xec, 0xb8, 0xa4, - 0x80, 0x9c, 0x52, 0x4e, 0x6a, 0x76, 0x22, 0x3e, 0x1a, 0x06, - 0xb2, 0xae, 0x8a, 0x96, 0xc2, 0xde, 0xfa, 0xe6, 0x8f, 0x93, - 0xb7, 0xab, 0xff, 0xe3, 0xc7, 0xdb, 0x6f, 0x73, 0x57, 0x4b, - 0x1f, 0x03, 0x27, 0x3b, 0x00, 0x1d, 0x3a, 0x27, 0x74, 0x69, - 0x4e, 0x53, 0xe8, 0xf5, 0xd2, 0xcf, 0x9c, 0x81, 0xa6, 0xbb, - 0xcd, 0xd0, 0xf7, 0xea, 0xb9, 0xa4, 0x83, 0x9e, 0x25, 0x38, - 0x1f, 0x02, 0x51, 0x4c, 0x6b, 0x76, 0x87, 0x9a, 0xbd, 0xa0, - 0xf3, 0xee, 0xc9, 0xd4, 0x6f, 0x72, 0x55, 0x48, 0x1b, 0x06, - 0x21, 0x3c, 0x4a, 0x57, 0x70, 0x6d, 0x3e, 0x23, 0x04, 0x19, - 0xa2, 0xbf, 0x98, 0x85, 0xd6, 0xcb, 0xec, 0xf1, 0x13, 0x0e, - 0x29, 0x34, 0x67, 0x7a, 0x5d, 0x40, 0xfb, 0xe6, 0xc1, 0xdc, - 0x8f, 0x92, 0xb5, 0xa8, 0xde, 0xc3, 0xe4, 0xf9, 0xaa, 0xb7, - 0x90, 0x8d, 0x36, 0x2b, 0x0c, 0x11, 0x42, 0x5f, 0x78, 0x65, - 0x94, 0x89, 0xae, 0xb3, 0xe0, 0xfd, 0xda, 0xc7, 0x7c, 0x61, - 0x46, 0x5b, 0x08, 0x15, 0x32, 0x2f, 0x59, 0x44, 0x63, 0x7e, - 0x2d, 0x30, 0x17, 0x0a, 0xb1, 0xac, 0x8b, 0x96, 0xc5, 0xd8, - 0xff, 0xe2, 0x26, 0x3b, 0x1c, 0x01, 0x52, 0x4f, 0x68, 0x75, - 0xce, 0xd3, 0xf4, 0xe9, 0xba, 0xa7, 0x80, 0x9d, 0xeb, 0xf6, - 0xd1, 0xcc, 0x9f, 0x82, 0xa5, 0xb8, 0x03, 0x1e, 0x39, 0x24, - 0x77, 0x6a, 0x4d, 0x50, 0xa1, 0xbc, 0x9b, 0x86, 0xd5, 0xc8, - 0xef, 0xf2, 0x49, 0x54, 0x73, 0x6e, 0x3d, 0x20, 0x07, 0x1a, - 0x6c, 0x71, 0x56, 0x4b, 0x18, 0x05, 0x22, 0x3f, 0x84, 0x99, - 0xbe, 0xa3, 0xf0, 0xed, 0xca, 0xd7, 0x35, 0x28, 0x0f, 0x12, - 0x41, 0x5c, 0x7b, 0x66, 0xdd, 0xc0, 0xe7, 0xfa, 0xa9, 0xb4, - 0x93, 0x8e, 0xf8, 0xe5, 0xc2, 0xdf, 0x8c, 0x91, 0xb6, 0xab, - 0x10, 0x0d, 0x2a, 0x37, 0x64, 0x79, 0x5e, 0x43, 0xb2, 0xaf, - 0x88, 0x95, 0xc6, 0xdb, 0xfc, 0xe1, 0x5a, 0x47, 0x60, 0x7d, - 0x2e, 0x33, 0x14, 0x09, 0x7f, 0x62, 0x45, 0x58, 0x0b, 0x16, - 0x31, 0x2c, 0x97, 0x8a, 0xad, 0xb0, 0xe3, 0xfe, 0xd9, 0xc4, - 0x00, 0x1e, 0x3c, 0x22, 0x78, 0x66, 0x44, 0x5a, 0xf0, 0xee, - 0xcc, 0xd2, 0x88, 0x96, 0xb4, 0xaa, 0xfd, 0xe3, 0xc1, 0xdf, - 0x85, 0x9b, 0xb9, 0xa7, 0x0d, 0x13, 0x31, 0x2f, 0x75, 0x6b, - 0x49, 0x57, 0xe7, 0xf9, 0xdb, 0xc5, 0x9f, 0x81, 0xa3, 0xbd, - 0x17, 0x09, 0x2b, 0x35, 0x6f, 0x71, 0x53, 0x4d, 0x1a, 0x04, - 0x26, 0x38, 0x62, 0x7c, 0x5e, 0x40, 0xea, 0xf4, 0xd6, 0xc8, - 0x92, 0x8c, 0xae, 0xb0, 0xd3, 0xcd, 0xef, 0xf1, 0xab, 0xb5, - 0x97, 0x89, 0x23, 0x3d, 0x1f, 0x01, 0x5b, 0x45, 0x67, 0x79, - 0x2e, 0x30, 0x12, 0x0c, 0x56, 0x48, 0x6a, 0x74, 0xde, 0xc0, - 0xe2, 0xfc, 0xa6, 0xb8, 0x9a, 0x84, 0x34, 0x2a, 0x08, 0x16, - 0x4c, 0x52, 0x70, 0x6e, 0xc4, 0xda, 0xf8, 0xe6, 0xbc, 0xa2, - 0x80, 0x9e, 0xc9, 0xd7, 0xf5, 0xeb, 0xb1, 0xaf, 0x8d, 0x93, - 0x39, 0x27, 0x05, 0x1b, 0x41, 0x5f, 0x7d, 0x63, 0xbb, 0xa5, - 0x87, 0x99, 0xc3, 0xdd, 0xff, 0xe1, 0x4b, 0x55, 0x77, 0x69, - 0x33, 0x2d, 0x0f, 0x11, 0x46, 0x58, 0x7a, 0x64, 0x3e, 0x20, - 0x02, 0x1c, 0xb6, 0xa8, 0x8a, 0x94, 0xce, 0xd0, 0xf2, 0xec, - 0x5c, 0x42, 0x60, 0x7e, 0x24, 0x3a, 0x18, 0x06, 0xac, 0xb2, - 0x90, 0x8e, 0xd4, 0xca, 0xe8, 0xf6, 0xa1, 0xbf, 0x9d, 0x83, - 0xd9, 0xc7, 0xe5, 0xfb, 0x51, 0x4f, 0x6d, 0x73, 0x29, 0x37, - 0x15, 0x0b, 0x68, 0x76, 0x54, 0x4a, 0x10, 0x0e, 0x2c, 0x32, - 0x98, 0x86, 0xa4, 0xba, 0xe0, 0xfe, 0xdc, 0xc2, 0x95, 0x8b, - 0xa9, 0xb7, 0xed, 0xf3, 0xd1, 0xcf, 0x65, 0x7b, 0x59, 0x47, - 0x1d, 0x03, 0x21, 0x3f, 0x8f, 0x91, 0xb3, 0xad, 0xf7, 0xe9, - 0xcb, 0xd5, 0x7f, 0x61, 0x43, 0x5d, 0x07, 0x19, 0x3b, 0x25, - 0x72, 0x6c, 0x4e, 0x50, 0x0a, 0x14, 0x36, 0x28, 0x82, 0x9c, - 0xbe, 0xa0, 0xfa, 0xe4, 0xc6, 0xd8, 0x00, 0x1f, 0x3e, 0x21, - 0x7c, 0x63, 0x42, 0x5d, 0xf8, 0xe7, 0xc6, 0xd9, 0x84, 0x9b, - 0xba, 0xa5, 0xed, 0xf2, 0xd3, 0xcc, 0x91, 0x8e, 0xaf, 0xb0, - 0x15, 0x0a, 0x2b, 0x34, 0x69, 0x76, 0x57, 0x48, 0xc7, 0xd8, - 0xf9, 0xe6, 0xbb, 0xa4, 0x85, 0x9a, 0x3f, 0x20, 0x01, 0x1e, - 0x43, 0x5c, 0x7d, 0x62, 0x2a, 0x35, 0x14, 0x0b, 0x56, 0x49, - 0x68, 0x77, 0xd2, 0xcd, 0xec, 0xf3, 0xae, 0xb1, 0x90, 0x8f, - 0x93, 0x8c, 0xad, 0xb2, 0xef, 0xf0, 0xd1, 0xce, 0x6b, 0x74, - 0x55, 0x4a, 0x17, 0x08, 0x29, 0x36, 0x7e, 0x61, 0x40, 0x5f, - 0x02, 0x1d, 0x3c, 0x23, 0x86, 0x99, 0xb8, 0xa7, 0xfa, 0xe5, - 0xc4, 0xdb, 0x54, 0x4b, 0x6a, 0x75, 0x28, 0x37, 0x16, 0x09, - 0xac, 0xb3, 0x92, 0x8d, 0xd0, 0xcf, 0xee, 0xf1, 0xb9, 0xa6, - 0x87, 0x98, 0xc5, 0xda, 0xfb, 0xe4, 0x41, 0x5e, 0x7f, 0x60, - 0x3d, 0x22, 0x03, 0x1c, 0x3b, 0x24, 0x05, 0x1a, 0x47, 0x58, - 0x79, 0x66, 0xc3, 0xdc, 0xfd, 0xe2, 0xbf, 0xa0, 0x81, 0x9e, - 0xd6, 0xc9, 0xe8, 0xf7, 0xaa, 0xb5, 0x94, 0x8b, 0x2e, 0x31, - 0x10, 0x0f, 0x52, 0x4d, 0x6c, 0x73, 0xfc, 0xe3, 0xc2, 0xdd, - 0x80, 0x9f, 0xbe, 0xa1, 0x04, 0x1b, 0x3a, 0x25, 0x78, 0x67, - 0x46, 0x59, 0x11, 0x0e, 0x2f, 0x30, 0x6d, 0x72, 0x53, 0x4c, - 0xe9, 0xf6, 0xd7, 0xc8, 0x95, 0x8a, 0xab, 0xb4, 0xa8, 0xb7, - 0x96, 0x89, 0xd4, 0xcb, 0xea, 0xf5, 0x50, 0x4f, 0x6e, 0x71, - 0x2c, 0x33, 0x12, 0x0d, 0x45, 0x5a, 0x7b, 0x64, 0x39, 0x26, - 0x07, 0x18, 0xbd, 0xa2, 0x83, 0x9c, 0xc1, 0xde, 0xff, 0xe0, - 0x6f, 0x70, 0x51, 0x4e, 0x13, 0x0c, 0x2d, 0x32, 0x97, 0x88, - 0xa9, 0xb6, 0xeb, 0xf4, 0xd5, 0xca, 0x82, 0x9d, 0xbc, 0xa3, - 0xfe, 0xe1, 0xc0, 0xdf, 0x7a, 0x65, 0x44, 0x5b, 0x06, 0x19, - 0x38, 0x27, 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, - 0x1d, 0x3d, 0x5d, 0x7d, 0x9d, 0xbd, 0xdd, 0xfd, 0x3a, 0x1a, - 0x7a, 0x5a, 0xba, 0x9a, 0xfa, 0xda, 0x27, 0x07, 0x67, 0x47, - 0xa7, 0x87, 0xe7, 0xc7, 0x74, 0x54, 0x34, 0x14, 0xf4, 0xd4, - 0xb4, 0x94, 0x69, 0x49, 0x29, 0x09, 0xe9, 0xc9, 0xa9, 0x89, - 0x4e, 0x6e, 0x0e, 0x2e, 0xce, 0xee, 0x8e, 0xae, 0x53, 0x73, - 0x13, 0x33, 0xd3, 0xf3, 0x93, 0xb3, 0xe8, 0xc8, 0xa8, 0x88, - 0x68, 0x48, 0x28, 0x08, 0xf5, 0xd5, 0xb5, 0x95, 0x75, 0x55, - 0x35, 0x15, 0xd2, 0xf2, 0x92, 0xb2, 0x52, 0x72, 0x12, 0x32, - 0xcf, 0xef, 0x8f, 0xaf, 0x4f, 0x6f, 0x0f, 0x2f, 0x9c, 0xbc, - 0xdc, 0xfc, 0x1c, 0x3c, 0x5c, 0x7c, 0x81, 0xa1, 0xc1, 0xe1, - 0x01, 0x21, 0x41, 0x61, 0xa6, 0x86, 0xe6, 0xc6, 0x26, 0x06, - 0x66, 0x46, 0xbb, 0x9b, 0xfb, 0xdb, 0x3b, 0x1b, 0x7b, 0x5b, - 0xcd, 0xed, 0x8d, 0xad, 0x4d, 0x6d, 0x0d, 0x2d, 0xd0, 0xf0, - 0x90, 0xb0, 0x50, 0x70, 0x10, 0x30, 0xf7, 0xd7, 0xb7, 0x97, - 0x77, 0x57, 0x37, 0x17, 0xea, 0xca, 0xaa, 0x8a, 0x6a, 0x4a, - 0x2a, 0x0a, 0xb9, 0x99, 0xf9, 0xd9, 0x39, 0x19, 0x79, 0x59, - 0xa4, 0x84, 0xe4, 0xc4, 0x24, 0x04, 0x64, 0x44, 0x83, 0xa3, - 0xc3, 0xe3, 0x03, 0x23, 0x43, 0x63, 0x9e, 0xbe, 0xde, 0xfe, - 0x1e, 0x3e, 0x5e, 0x7e, 0x25, 0x05, 0x65, 0x45, 0xa5, 0x85, - 0xe5, 0xc5, 0x38, 0x18, 0x78, 0x58, 0xb8, 0x98, 0xf8, 0xd8, - 0x1f, 0x3f, 0x5f, 0x7f, 0x9f, 0xbf, 0xdf, 0xff, 0x02, 0x22, - 0x42, 0x62, 0x82, 0xa2, 0xc2, 0xe2, 0x51, 0x71, 0x11, 0x31, - 0xd1, 0xf1, 0x91, 0xb1, 0x4c, 0x6c, 0x0c, 0x2c, 0xcc, 0xec, - 0x8c, 0xac, 0x6b, 0x4b, 0x2b, 0x0b, 0xeb, 0xcb, 0xab, 0x8b, - 0x76, 0x56, 0x36, 0x16, 0xf6, 0xd6, 0xb6, 0x96, 0x00, 0x21, - 0x42, 0x63, 0x84, 0xa5, 0xc6, 0xe7, 0x15, 0x34, 0x57, 0x76, - 0x91, 0xb0, 0xd3, 0xf2, 0x2a, 0x0b, 0x68, 0x49, 0xae, 0x8f, - 0xec, 0xcd, 0x3f, 0x1e, 0x7d, 0x5c, 0xbb, 0x9a, 0xf9, 0xd8, - 0x54, 0x75, 0x16, 0x37, 0xd0, 0xf1, 0x92, 0xb3, 0x41, 0x60, - 0x03, 0x22, 0xc5, 0xe4, 0x87, 0xa6, 0x7e, 0x5f, 0x3c, 0x1d, - 0xfa, 0xdb, 0xb8, 0x99, 0x6b, 0x4a, 0x29, 0x08, 0xef, 0xce, - 0xad, 0x8c, 0xa8, 0x89, 0xea, 0xcb, 0x2c, 0x0d, 0x6e, 0x4f, - 0xbd, 0x9c, 0xff, 0xde, 0x39, 0x18, 0x7b, 0x5a, 0x82, 0xa3, - 0xc0, 0xe1, 0x06, 0x27, 0x44, 0x65, 0x97, 0xb6, 0xd5, 0xf4, - 0x13, 0x32, 0x51, 0x70, 0xfc, 0xdd, 0xbe, 0x9f, 0x78, 0x59, - 0x3a, 0x1b, 0xe9, 0xc8, 0xab, 0x8a, 0x6d, 0x4c, 0x2f, 0x0e, - 0xd6, 0xf7, 0x94, 0xb5, 0x52, 0x73, 0x10, 0x31, 0xc3, 0xe2, - 0x81, 0xa0, 0x47, 0x66, 0x05, 0x24, 0x4d, 0x6c, 0x0f, 0x2e, - 0xc9, 0xe8, 0x8b, 0xaa, 0x58, 0x79, 0x1a, 0x3b, 0xdc, 0xfd, - 0x9e, 0xbf, 0x67, 0x46, 0x25, 0x04, 0xe3, 0xc2, 0xa1, 0x80, - 0x72, 0x53, 0x30, 0x11, 0xf6, 0xd7, 0xb4, 0x95, 0x19, 0x38, - 0x5b, 0x7a, 0x9d, 0xbc, 0xdf, 0xfe, 0x0c, 0x2d, 0x4e, 0x6f, - 0x88, 0xa9, 0xca, 0xeb, 0x33, 0x12, 0x71, 0x50, 0xb7, 0x96, - 0xf5, 0xd4, 0x26, 0x07, 0x64, 0x45, 0xa2, 0x83, 0xe0, 0xc1, - 0xe5, 0xc4, 0xa7, 0x86, 0x61, 0x40, 0x23, 0x02, 0xf0, 0xd1, - 0xb2, 0x93, 0x74, 0x55, 0x36, 0x17, 0xcf, 0xee, 0x8d, 0xac, - 0x4b, 0x6a, 0x09, 0x28, 0xda, 0xfb, 0x98, 0xb9, 0x5e, 0x7f, - 0x1c, 0x3d, 0xb1, 0x90, 0xf3, 0xd2, 0x35, 0x14, 0x77, 0x56, - 0xa4, 0x85, 0xe6, 0xc7, 0x20, 0x01, 0x62, 0x43, 0x9b, 0xba, - 0xd9, 0xf8, 0x1f, 0x3e, 0x5d, 0x7c, 0x8e, 0xaf, 0xcc, 0xed, - 0x0a, 0x2b, 0x48, 0x69, 0x00, 0x22, 0x44, 0x66, 0x88, 0xaa, - 0xcc, 0xee, 0x0d, 0x2f, 0x49, 0x6b, 0x85, 0xa7, 0xc1, 0xe3, - 0x1a, 0x38, 0x5e, 0x7c, 0x92, 0xb0, 0xd6, 0xf4, 0x17, 0x35, - 0x53, 0x71, 0x9f, 0xbd, 0xdb, 0xf9, 0x34, 0x16, 0x70, 0x52, - 0xbc, 0x9e, 0xf8, 0xda, 0x39, 0x1b, 0x7d, 0x5f, 0xb1, 0x93, - 0xf5, 0xd7, 0x2e, 0x0c, 0x6a, 0x48, 0xa6, 0x84, 0xe2, 0xc0, - 0x23, 0x01, 0x67, 0x45, 0xab, 0x89, 0xef, 0xcd, 0x68, 0x4a, - 0x2c, 0x0e, 0xe0, 0xc2, 0xa4, 0x86, 0x65, 0x47, 0x21, 0x03, - 0xed, 0xcf, 0xa9, 0x8b, 0x72, 0x50, 0x36, 0x14, 0xfa, 0xd8, - 0xbe, 0x9c, 0x7f, 0x5d, 0x3b, 0x19, 0xf7, 0xd5, 0xb3, 0x91, - 0x5c, 0x7e, 0x18, 0x3a, 0xd4, 0xf6, 0x90, 0xb2, 0x51, 0x73, - 0x15, 0x37, 0xd9, 0xfb, 0x9d, 0xbf, 0x46, 0x64, 0x02, 0x20, - 0xce, 0xec, 0x8a, 0xa8, 0x4b, 0x69, 0x0f, 0x2d, 0xc3, 0xe1, - 0x87, 0xa5, 0xd0, 0xf2, 0x94, 0xb6, 0x58, 0x7a, 0x1c, 0x3e, - 0xdd, 0xff, 0x99, 0xbb, 0x55, 0x77, 0x11, 0x33, 0xca, 0xe8, - 0x8e, 0xac, 0x42, 0x60, 0x06, 0x24, 0xc7, 0xe5, 0x83, 0xa1, - 0x4f, 0x6d, 0x0b, 0x29, 0xe4, 0xc6, 0xa0, 0x82, 0x6c, 0x4e, - 0x28, 0x0a, 0xe9, 0xcb, 0xad, 0x8f, 0x61, 0x43, 0x25, 0x07, - 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, 0xf3, 0xd1, - 0xb7, 0x95, 0x7b, 0x59, 0x3f, 0x1d, 0xb8, 0x9a, 0xfc, 0xde, - 0x30, 0x12, 0x74, 0x56, 0xb5, 0x97, 0xf1, 0xd3, 0x3d, 0x1f, - 0x79, 0x5b, 0xa2, 0x80, 0xe6, 0xc4, 0x2a, 0x08, 0x6e, 0x4c, - 0xaf, 0x8d, 0xeb, 0xc9, 0x27, 0x05, 0x63, 0x41, 0x8c, 0xae, - 0xc8, 0xea, 0x04, 0x26, 0x40, 0x62, 0x81, 0xa3, 0xc5, 0xe7, - 0x09, 0x2b, 0x4d, 0x6f, 0x96, 0xb4, 0xd2, 0xf0, 0x1e, 0x3c, - 0x5a, 0x78, 0x9b, 0xb9, 0xdf, 0xfd, 0x13, 0x31, 0x57, 0x75, - 0x00, 0x23, 0x46, 0x65, 0x8c, 0xaf, 0xca, 0xe9, 0x05, 0x26, - 0x43, 0x60, 0x89, 0xaa, 0xcf, 0xec, 0x0a, 0x29, 0x4c, 0x6f, - 0x86, 0xa5, 0xc0, 0xe3, 0x0f, 0x2c, 0x49, 0x6a, 0x83, 0xa0, - 0xc5, 0xe6, 0x14, 0x37, 0x52, 0x71, 0x98, 0xbb, 0xde, 0xfd, - 0x11, 0x32, 0x57, 0x74, 0x9d, 0xbe, 0xdb, 0xf8, 0x1e, 0x3d, - 0x58, 0x7b, 0x92, 0xb1, 0xd4, 0xf7, 0x1b, 0x38, 0x5d, 0x7e, - 0x97, 0xb4, 0xd1, 0xf2, 0x28, 0x0b, 0x6e, 0x4d, 0xa4, 0x87, - 0xe2, 0xc1, 0x2d, 0x0e, 0x6b, 0x48, 0xa1, 0x82, 0xe7, 0xc4, - 0x22, 0x01, 0x64, 0x47, 0xae, 0x8d, 0xe8, 0xcb, 0x27, 0x04, - 0x61, 0x42, 0xab, 0x88, 0xed, 0xce, 0x3c, 0x1f, 0x7a, 0x59, - 0xb0, 0x93, 0xf6, 0xd5, 0x39, 0x1a, 0x7f, 0x5c, 0xb5, 0x96, - 0xf3, 0xd0, 0x36, 0x15, 0x70, 0x53, 0xba, 0x99, 0xfc, 0xdf, - 0x33, 0x10, 0x75, 0x56, 0xbf, 0x9c, 0xf9, 0xda, 0x50, 0x73, - 0x16, 0x35, 0xdc, 0xff, 0x9a, 0xb9, 0x55, 0x76, 0x13, 0x30, - 0xd9, 0xfa, 0x9f, 0xbc, 0x5a, 0x79, 0x1c, 0x3f, 0xd6, 0xf5, - 0x90, 0xb3, 0x5f, 0x7c, 0x19, 0x3a, 0xd3, 0xf0, 0x95, 0xb6, - 0x44, 0x67, 0x02, 0x21, 0xc8, 0xeb, 0x8e, 0xad, 0x41, 0x62, - 0x07, 0x24, 0xcd, 0xee, 0x8b, 0xa8, 0x4e, 0x6d, 0x08, 0x2b, - 0xc2, 0xe1, 0x84, 0xa7, 0x4b, 0x68, 0x0d, 0x2e, 0xc7, 0xe4, - 0x81, 0xa2, 0x78, 0x5b, 0x3e, 0x1d, 0xf4, 0xd7, 0xb2, 0x91, - 0x7d, 0x5e, 0x3b, 0x18, 0xf1, 0xd2, 0xb7, 0x94, 0x72, 0x51, - 0x34, 0x17, 0xfe, 0xdd, 0xb8, 0x9b, 0x77, 0x54, 0x31, 0x12, - 0xfb, 0xd8, 0xbd, 0x9e, 0x6c, 0x4f, 0x2a, 0x09, 0xe0, 0xc3, - 0xa6, 0x85, 0x69, 0x4a, 0x2f, 0x0c, 0xe5, 0xc6, 0xa3, 0x80, - 0x66, 0x45, 0x20, 0x03, 0xea, 0xc9, 0xac, 0x8f, 0x63, 0x40, - 0x25, 0x06, 0xef, 0xcc, 0xa9, 0x8a, 0x00, 0x24, 0x48, 0x6c, - 0x90, 0xb4, 0xd8, 0xfc, 0x3d, 0x19, 0x75, 0x51, 0xad, 0x89, - 0xe5, 0xc1, 0x7a, 0x5e, 0x32, 0x16, 0xea, 0xce, 0xa2, 0x86, - 0x47, 0x63, 0x0f, 0x2b, 0xd7, 0xf3, 0x9f, 0xbb, 0xf4, 0xd0, - 0xbc, 0x98, 0x64, 0x40, 0x2c, 0x08, 0xc9, 0xed, 0x81, 0xa5, - 0x59, 0x7d, 0x11, 0x35, 0x8e, 0xaa, 0xc6, 0xe2, 0x1e, 0x3a, - 0x56, 0x72, 0xb3, 0x97, 0xfb, 0xdf, 0x23, 0x07, 0x6b, 0x4f, - 0xf5, 0xd1, 0xbd, 0x99, 0x65, 0x41, 0x2d, 0x09, 0xc8, 0xec, - 0x80, 0xa4, 0x58, 0x7c, 0x10, 0x34, 0x8f, 0xab, 0xc7, 0xe3, - 0x1f, 0x3b, 0x57, 0x73, 0xb2, 0x96, 0xfa, 0xde, 0x22, 0x06, - 0x6a, 0x4e, 0x01, 0x25, 0x49, 0x6d, 0x91, 0xb5, 0xd9, 0xfd, - 0x3c, 0x18, 0x74, 0x50, 0xac, 0x88, 0xe4, 0xc0, 0x7b, 0x5f, - 0x33, 0x17, 0xeb, 0xcf, 0xa3, 0x87, 0x46, 0x62, 0x0e, 0x2a, - 0xd6, 0xf2, 0x9e, 0xba, 0xf7, 0xd3, 0xbf, 0x9b, 0x67, 0x43, - 0x2f, 0x0b, 0xca, 0xee, 0x82, 0xa6, 0x5a, 0x7e, 0x12, 0x36, - 0x8d, 0xa9, 0xc5, 0xe1, 0x1d, 0x39, 0x55, 0x71, 0xb0, 0x94, - 0xf8, 0xdc, 0x20, 0x04, 0x68, 0x4c, 0x03, 0x27, 0x4b, 0x6f, - 0x93, 0xb7, 0xdb, 0xff, 0x3e, 0x1a, 0x76, 0x52, 0xae, 0x8a, - 0xe6, 0xc2, 0x79, 0x5d, 0x31, 0x15, 0xe9, 0xcd, 0xa1, 0x85, - 0x44, 0x60, 0x0c, 0x28, 0xd4, 0xf0, 0x9c, 0xb8, 0x02, 0x26, - 0x4a, 0x6e, 0x92, 0xb6, 0xda, 0xfe, 0x3f, 0x1b, 0x77, 0x53, - 0xaf, 0x8b, 0xe7, 0xc3, 0x78, 0x5c, 0x30, 0x14, 0xe8, 0xcc, - 0xa0, 0x84, 0x45, 0x61, 0x0d, 0x29, 0xd5, 0xf1, 0x9d, 0xb9, - 0xf6, 0xd2, 0xbe, 0x9a, 0x66, 0x42, 0x2e, 0x0a, 0xcb, 0xef, - 0x83, 0xa7, 0x5b, 0x7f, 0x13, 0x37, 0x8c, 0xa8, 0xc4, 0xe0, - 0x1c, 0x38, 0x54, 0x70, 0xb1, 0x95, 0xf9, 0xdd, 0x21, 0x05, - 0x69, 0x4d, 0x00, 0x25, 0x4a, 0x6f, 0x94, 0xb1, 0xde, 0xfb, - 0x35, 0x10, 0x7f, 0x5a, 0xa1, 0x84, 0xeb, 0xce, 0x6a, 0x4f, - 0x20, 0x05, 0xfe, 0xdb, 0xb4, 0x91, 0x5f, 0x7a, 0x15, 0x30, - 0xcb, 0xee, 0x81, 0xa4, 0xd4, 0xf1, 0x9e, 0xbb, 0x40, 0x65, - 0x0a, 0x2f, 0xe1, 0xc4, 0xab, 0x8e, 0x75, 0x50, 0x3f, 0x1a, - 0xbe, 0x9b, 0xf4, 0xd1, 0x2a, 0x0f, 0x60, 0x45, 0x8b, 0xae, - 0xc1, 0xe4, 0x1f, 0x3a, 0x55, 0x70, 0xb5, 0x90, 0xff, 0xda, - 0x21, 0x04, 0x6b, 0x4e, 0x80, 0xa5, 0xca, 0xef, 0x14, 0x31, - 0x5e, 0x7b, 0xdf, 0xfa, 0x95, 0xb0, 0x4b, 0x6e, 0x01, 0x24, - 0xea, 0xcf, 0xa0, 0x85, 0x7e, 0x5b, 0x34, 0x11, 0x61, 0x44, - 0x2b, 0x0e, 0xf5, 0xd0, 0xbf, 0x9a, 0x54, 0x71, 0x1e, 0x3b, - 0xc0, 0xe5, 0x8a, 0xaf, 0x0b, 0x2e, 0x41, 0x64, 0x9f, 0xba, - 0xd5, 0xf0, 0x3e, 0x1b, 0x74, 0x51, 0xaa, 0x8f, 0xe0, 0xc5, - 0x77, 0x52, 0x3d, 0x18, 0xe3, 0xc6, 0xa9, 0x8c, 0x42, 0x67, - 0x08, 0x2d, 0xd6, 0xf3, 0x9c, 0xb9, 0x1d, 0x38, 0x57, 0x72, - 0x89, 0xac, 0xc3, 0xe6, 0x28, 0x0d, 0x62, 0x47, 0xbc, 0x99, - 0xf6, 0xd3, 0xa3, 0x86, 0xe9, 0xcc, 0x37, 0x12, 0x7d, 0x58, - 0x96, 0xb3, 0xdc, 0xf9, 0x02, 0x27, 0x48, 0x6d, 0xc9, 0xec, - 0x83, 0xa6, 0x5d, 0x78, 0x17, 0x32, 0xfc, 0xd9, 0xb6, 0x93, - 0x68, 0x4d, 0x22, 0x07, 0xc2, 0xe7, 0x88, 0xad, 0x56, 0x73, - 0x1c, 0x39, 0xf7, 0xd2, 0xbd, 0x98, 0x63, 0x46, 0x29, 0x0c, - 0xa8, 0x8d, 0xe2, 0xc7, 0x3c, 0x19, 0x76, 0x53, 0x9d, 0xb8, - 0xd7, 0xf2, 0x09, 0x2c, 0x43, 0x66, 0x16, 0x33, 0x5c, 0x79, - 0x82, 0xa7, 0xc8, 0xed, 0x23, 0x06, 0x69, 0x4c, 0xb7, 0x92, - 0xfd, 0xd8, 0x7c, 0x59, 0x36, 0x13, 0xe8, 0xcd, 0xa2, 0x87, - 0x49, 0x6c, 0x03, 0x26, 0xdd, 0xf8, 0x97, 0xb2, 0x00, 0x26, - 0x4c, 0x6a, 0x98, 0xbe, 0xd4, 0xf2, 0x2d, 0x0b, 0x61, 0x47, - 0xb5, 0x93, 0xf9, 0xdf, 0x5a, 0x7c, 0x16, 0x30, 0xc2, 0xe4, - 0x8e, 0xa8, 0x77, 0x51, 0x3b, 0x1d, 0xef, 0xc9, 0xa3, 0x85, - 0xb4, 0x92, 0xf8, 0xde, 0x2c, 0x0a, 0x60, 0x46, 0x99, 0xbf, - 0xd5, 0xf3, 0x01, 0x27, 0x4d, 0x6b, 0xee, 0xc8, 0xa2, 0x84, - 0x76, 0x50, 0x3a, 0x1c, 0xc3, 0xe5, 0x8f, 0xa9, 0x5b, 0x7d, - 0x17, 0x31, 0x75, 0x53, 0x39, 0x1f, 0xed, 0xcb, 0xa1, 0x87, - 0x58, 0x7e, 0x14, 0x32, 0xc0, 0xe6, 0x8c, 0xaa, 0x2f, 0x09, - 0x63, 0x45, 0xb7, 0x91, 0xfb, 0xdd, 0x02, 0x24, 0x4e, 0x68, - 0x9a, 0xbc, 0xd6, 0xf0, 0xc1, 0xe7, 0x8d, 0xab, 0x59, 0x7f, - 0x15, 0x33, 0xec, 0xca, 0xa0, 0x86, 0x74, 0x52, 0x38, 0x1e, - 0x9b, 0xbd, 0xd7, 0xf1, 0x03, 0x25, 0x4f, 0x69, 0xb6, 0x90, - 0xfa, 0xdc, 0x2e, 0x08, 0x62, 0x44, 0xea, 0xcc, 0xa6, 0x80, - 0x72, 0x54, 0x3e, 0x18, 0xc7, 0xe1, 0x8b, 0xad, 0x5f, 0x79, - 0x13, 0x35, 0xb0, 0x96, 0xfc, 0xda, 0x28, 0x0e, 0x64, 0x42, - 0x9d, 0xbb, 0xd1, 0xf7, 0x05, 0x23, 0x49, 0x6f, 0x5e, 0x78, - 0x12, 0x34, 0xc6, 0xe0, 0x8a, 0xac, 0x73, 0x55, 0x3f, 0x19, - 0xeb, 0xcd, 0xa7, 0x81, 0x04, 0x22, 0x48, 0x6e, 0x9c, 0xba, - 0xd0, 0xf6, 0x29, 0x0f, 0x65, 0x43, 0xb1, 0x97, 0xfd, 0xdb, - 0x9f, 0xb9, 0xd3, 0xf5, 0x07, 0x21, 0x4b, 0x6d, 0xb2, 0x94, - 0xfe, 0xd8, 0x2a, 0x0c, 0x66, 0x40, 0xc5, 0xe3, 0x89, 0xaf, - 0x5d, 0x7b, 0x11, 0x37, 0xe8, 0xce, 0xa4, 0x82, 0x70, 0x56, - 0x3c, 0x1a, 0x2b, 0x0d, 0x67, 0x41, 0xb3, 0x95, 0xff, 0xd9, - 0x06, 0x20, 0x4a, 0x6c, 0x9e, 0xb8, 0xd2, 0xf4, 0x71, 0x57, - 0x3d, 0x1b, 0xe9, 0xcf, 0xa5, 0x83, 0x5c, 0x7a, 0x10, 0x36, - 0xc4, 0xe2, 0x88, 0xae, 0x00, 0x27, 0x4e, 0x69, 0x9c, 0xbb, - 0xd2, 0xf5, 0x25, 0x02, 0x6b, 0x4c, 0xb9, 0x9e, 0xf7, 0xd0, - 0x4a, 0x6d, 0x04, 0x23, 0xd6, 0xf1, 0x98, 0xbf, 0x6f, 0x48, - 0x21, 0x06, 0xf3, 0xd4, 0xbd, 0x9a, 0x94, 0xb3, 0xda, 0xfd, - 0x08, 0x2f, 0x46, 0x61, 0xb1, 0x96, 0xff, 0xd8, 0x2d, 0x0a, - 0x63, 0x44, 0xde, 0xf9, 0x90, 0xb7, 0x42, 0x65, 0x0c, 0x2b, - 0xfb, 0xdc, 0xb5, 0x92, 0x67, 0x40, 0x29, 0x0e, 0x35, 0x12, - 0x7b, 0x5c, 0xa9, 0x8e, 0xe7, 0xc0, 0x10, 0x37, 0x5e, 0x79, - 0x8c, 0xab, 0xc2, 0xe5, 0x7f, 0x58, 0x31, 0x16, 0xe3, 0xc4, - 0xad, 0x8a, 0x5a, 0x7d, 0x14, 0x33, 0xc6, 0xe1, 0x88, 0xaf, - 0xa1, 0x86, 0xef, 0xc8, 0x3d, 0x1a, 0x73, 0x54, 0x84, 0xa3, - 0xca, 0xed, 0x18, 0x3f, 0x56, 0x71, 0xeb, 0xcc, 0xa5, 0x82, - 0x77, 0x50, 0x39, 0x1e, 0xce, 0xe9, 0x80, 0xa7, 0x52, 0x75, - 0x1c, 0x3b, 0x6a, 0x4d, 0x24, 0x03, 0xf6, 0xd1, 0xb8, 0x9f, - 0x4f, 0x68, 0x01, 0x26, 0xd3, 0xf4, 0x9d, 0xba, 0x20, 0x07, - 0x6e, 0x49, 0xbc, 0x9b, 0xf2, 0xd5, 0x05, 0x22, 0x4b, 0x6c, - 0x99, 0xbe, 0xd7, 0xf0, 0xfe, 0xd9, 0xb0, 0x97, 0x62, 0x45, - 0x2c, 0x0b, 0xdb, 0xfc, 0x95, 0xb2, 0x47, 0x60, 0x09, 0x2e, - 0xb4, 0x93, 0xfa, 0xdd, 0x28, 0x0f, 0x66, 0x41, 0x91, 0xb6, - 0xdf, 0xf8, 0x0d, 0x2a, 0x43, 0x64, 0x5f, 0x78, 0x11, 0x36, - 0xc3, 0xe4, 0x8d, 0xaa, 0x7a, 0x5d, 0x34, 0x13, 0xe6, 0xc1, - 0xa8, 0x8f, 0x15, 0x32, 0x5b, 0x7c, 0x89, 0xae, 0xc7, 0xe0, - 0x30, 0x17, 0x7e, 0x59, 0xac, 0x8b, 0xe2, 0xc5, 0xcb, 0xec, - 0x85, 0xa2, 0x57, 0x70, 0x19, 0x3e, 0xee, 0xc9, 0xa0, 0x87, - 0x72, 0x55, 0x3c, 0x1b, 0x81, 0xa6, 0xcf, 0xe8, 0x1d, 0x3a, - 0x53, 0x74, 0xa4, 0x83, 0xea, 0xcd, 0x38, 0x1f, 0x76, 0x51, - 0x00, 0x28, 0x50, 0x78, 0xa0, 0x88, 0xf0, 0xd8, 0x5d, 0x75, - 0x0d, 0x25, 0xfd, 0xd5, 0xad, 0x85, 0xba, 0x92, 0xea, 0xc2, - 0x1a, 0x32, 0x4a, 0x62, 0xe7, 0xcf, 0xb7, 0x9f, 0x47, 0x6f, - 0x17, 0x3f, 0x69, 0x41, 0x39, 0x11, 0xc9, 0xe1, 0x99, 0xb1, - 0x34, 0x1c, 0x64, 0x4c, 0x94, 0xbc, 0xc4, 0xec, 0xd3, 0xfb, - 0x83, 0xab, 0x73, 0x5b, 0x23, 0x0b, 0x8e, 0xa6, 0xde, 0xf6, - 0x2e, 0x06, 0x7e, 0x56, 0xd2, 0xfa, 0x82, 0xaa, 0x72, 0x5a, - 0x22, 0x0a, 0x8f, 0xa7, 0xdf, 0xf7, 0x2f, 0x07, 0x7f, 0x57, - 0x68, 0x40, 0x38, 0x10, 0xc8, 0xe0, 0x98, 0xb0, 0x35, 0x1d, - 0x65, 0x4d, 0x95, 0xbd, 0xc5, 0xed, 0xbb, 0x93, 0xeb, 0xc3, - 0x1b, 0x33, 0x4b, 0x63, 0xe6, 0xce, 0xb6, 0x9e, 0x46, 0x6e, - 0x16, 0x3e, 0x01, 0x29, 0x51, 0x79, 0xa1, 0x89, 0xf1, 0xd9, - 0x5c, 0x74, 0x0c, 0x24, 0xfc, 0xd4, 0xac, 0x84, 0xb9, 0x91, - 0xe9, 0xc1, 0x19, 0x31, 0x49, 0x61, 0xe4, 0xcc, 0xb4, 0x9c, - 0x44, 0x6c, 0x14, 0x3c, 0x03, 0x2b, 0x53, 0x7b, 0xa3, 0x8b, - 0xf3, 0xdb, 0x5e, 0x76, 0x0e, 0x26, 0xfe, 0xd6, 0xae, 0x86, - 0xd0, 0xf8, 0x80, 0xa8, 0x70, 0x58, 0x20, 0x08, 0x8d, 0xa5, - 0xdd, 0xf5, 0x2d, 0x05, 0x7d, 0x55, 0x6a, 0x42, 0x3a, 0x12, - 0xca, 0xe2, 0x9a, 0xb2, 0x37, 0x1f, 0x67, 0x4f, 0x97, 0xbf, - 0xc7, 0xef, 0x6b, 0x43, 0x3b, 0x13, 0xcb, 0xe3, 0x9b, 0xb3, - 0x36, 0x1e, 0x66, 0x4e, 0x96, 0xbe, 0xc6, 0xee, 0xd1, 0xf9, - 0x81, 0xa9, 0x71, 0x59, 0x21, 0x09, 0x8c, 0xa4, 0xdc, 0xf4, - 0x2c, 0x04, 0x7c, 0x54, 0x02, 0x2a, 0x52, 0x7a, 0xa2, 0x8a, - 0xf2, 0xda, 0x5f, 0x77, 0x0f, 0x27, 0xff, 0xd7, 0xaf, 0x87, - 0xb8, 0x90, 0xe8, 0xc0, 0x18, 0x30, 0x48, 0x60, 0xe5, 0xcd, - 0xb5, 0x9d, 0x45, 0x6d, 0x15, 0x3d, 0x00, 0x29, 0x52, 0x7b, - 0xa4, 0x8d, 0xf6, 0xdf, 0x55, 0x7c, 0x07, 0x2e, 0xf1, 0xd8, - 0xa3, 0x8a, 0xaa, 0x83, 0xf8, 0xd1, 0x0e, 0x27, 0x5c, 0x75, - 0xff, 0xd6, 0xad, 0x84, 0x5b, 0x72, 0x09, 0x20, 0x49, 0x60, - 0x1b, 0x32, 0xed, 0xc4, 0xbf, 0x96, 0x1c, 0x35, 0x4e, 0x67, - 0xb8, 0x91, 0xea, 0xc3, 0xe3, 0xca, 0xb1, 0x98, 0x47, 0x6e, - 0x15, 0x3c, 0xb6, 0x9f, 0xe4, 0xcd, 0x12, 0x3b, 0x40, 0x69, - 0x92, 0xbb, 0xc0, 0xe9, 0x36, 0x1f, 0x64, 0x4d, 0xc7, 0xee, - 0x95, 0xbc, 0x63, 0x4a, 0x31, 0x18, 0x38, 0x11, 0x6a, 0x43, - 0x9c, 0xb5, 0xce, 0xe7, 0x6d, 0x44, 0x3f, 0x16, 0xc9, 0xe0, - 0x9b, 0xb2, 0xdb, 0xf2, 0x89, 0xa0, 0x7f, 0x56, 0x2d, 0x04, - 0x8e, 0xa7, 0xdc, 0xf5, 0x2a, 0x03, 0x78, 0x51, 0x71, 0x58, - 0x23, 0x0a, 0xd5, 0xfc, 0x87, 0xae, 0x24, 0x0d, 0x76, 0x5f, - 0x80, 0xa9, 0xd2, 0xfb, 0x39, 0x10, 0x6b, 0x42, 0x9d, 0xb4, - 0xcf, 0xe6, 0x6c, 0x45, 0x3e, 0x17, 0xc8, 0xe1, 0x9a, 0xb3, - 0x93, 0xba, 0xc1, 0xe8, 0x37, 0x1e, 0x65, 0x4c, 0xc6, 0xef, - 0x94, 0xbd, 0x62, 0x4b, 0x30, 0x19, 0x70, 0x59, 0x22, 0x0b, - 0xd4, 0xfd, 0x86, 0xaf, 0x25, 0x0c, 0x77, 0x5e, 0x81, 0xa8, - 0xd3, 0xfa, 0xda, 0xf3, 0x88, 0xa1, 0x7e, 0x57, 0x2c, 0x05, - 0x8f, 0xa6, 0xdd, 0xf4, 0x2b, 0x02, 0x79, 0x50, 0xab, 0x82, - 0xf9, 0xd0, 0x0f, 0x26, 0x5d, 0x74, 0xfe, 0xd7, 0xac, 0x85, - 0x5a, 0x73, 0x08, 0x21, 0x01, 0x28, 0x53, 0x7a, 0xa5, 0x8c, - 0xf7, 0xde, 0x54, 0x7d, 0x06, 0x2f, 0xf0, 0xd9, 0xa2, 0x8b, - 0xe2, 0xcb, 0xb0, 0x99, 0x46, 0x6f, 0x14, 0x3d, 0xb7, 0x9e, - 0xe5, 0xcc, 0x13, 0x3a, 0x41, 0x68, 0x48, 0x61, 0x1a, 0x33, - 0xec, 0xc5, 0xbe, 0x97, 0x1d, 0x34, 0x4f, 0x66, 0xb9, 0x90, - 0xeb, 0xc2, 0x00, 0x2a, 0x54, 0x7e, 0xa8, 0x82, 0xfc, 0xd6, - 0x4d, 0x67, 0x19, 0x33, 0xe5, 0xcf, 0xb1, 0x9b, 0x9a, 0xb0, - 0xce, 0xe4, 0x32, 0x18, 0x66, 0x4c, 0xd7, 0xfd, 0x83, 0xa9, - 0x7f, 0x55, 0x2b, 0x01, 0x29, 0x03, 0x7d, 0x57, 0x81, 0xab, - 0xd5, 0xff, 0x64, 0x4e, 0x30, 0x1a, 0xcc, 0xe6, 0x98, 0xb2, - 0xb3, 0x99, 0xe7, 0xcd, 0x1b, 0x31, 0x4f, 0x65, 0xfe, 0xd4, - 0xaa, 0x80, 0x56, 0x7c, 0x02, 0x28, 0x52, 0x78, 0x06, 0x2c, - 0xfa, 0xd0, 0xae, 0x84, 0x1f, 0x35, 0x4b, 0x61, 0xb7, 0x9d, - 0xe3, 0xc9, 0xc8, 0xe2, 0x9c, 0xb6, 0x60, 0x4a, 0x34, 0x1e, - 0x85, 0xaf, 0xd1, 0xfb, 0x2d, 0x07, 0x79, 0x53, 0x7b, 0x51, - 0x2f, 0x05, 0xd3, 0xf9, 0x87, 0xad, 0x36, 0x1c, 0x62, 0x48, - 0x9e, 0xb4, 0xca, 0xe0, 0xe1, 0xcb, 0xb5, 0x9f, 0x49, 0x63, - 0x1d, 0x37, 0xac, 0x86, 0xf8, 0xd2, 0x04, 0x2e, 0x50, 0x7a, - 0xa4, 0x8e, 0xf0, 0xda, 0x0c, 0x26, 0x58, 0x72, 0xe9, 0xc3, - 0xbd, 0x97, 0x41, 0x6b, 0x15, 0x3f, 0x3e, 0x14, 0x6a, 0x40, - 0x96, 0xbc, 0xc2, 0xe8, 0x73, 0x59, 0x27, 0x0d, 0xdb, 0xf1, - 0x8f, 0xa5, 0x8d, 0xa7, 0xd9, 0xf3, 0x25, 0x0f, 0x71, 0x5b, - 0xc0, 0xea, 0x94, 0xbe, 0x68, 0x42, 0x3c, 0x16, 0x17, 0x3d, - 0x43, 0x69, 0xbf, 0x95, 0xeb, 0xc1, 0x5a, 0x70, 0x0e, 0x24, - 0xf2, 0xd8, 0xa6, 0x8c, 0xf6, 0xdc, 0xa2, 0x88, 0x5e, 0x74, - 0x0a, 0x20, 0xbb, 0x91, 0xef, 0xc5, 0x13, 0x39, 0x47, 0x6d, - 0x6c, 0x46, 0x38, 0x12, 0xc4, 0xee, 0x90, 0xba, 0x21, 0x0b, - 0x75, 0x5f, 0x89, 0xa3, 0xdd, 0xf7, 0xdf, 0xf5, 0x8b, 0xa1, - 0x77, 0x5d, 0x23, 0x09, 0x92, 0xb8, 0xc6, 0xec, 0x3a, 0x10, - 0x6e, 0x44, 0x45, 0x6f, 0x11, 0x3b, 0xed, 0xc7, 0xb9, 0x93, - 0x08, 0x22, 0x5c, 0x76, 0xa0, 0x8a, 0xf4, 0xde, 0x00, 0x2b, - 0x56, 0x7d, 0xac, 0x87, 0xfa, 0xd1, 0x45, 0x6e, 0x13, 0x38, - 0xe9, 0xc2, 0xbf, 0x94, 0x8a, 0xa1, 0xdc, 0xf7, 0x26, 0x0d, - 0x70, 0x5b, 0xcf, 0xe4, 0x99, 0xb2, 0x63, 0x48, 0x35, 0x1e, - 0x09, 0x22, 0x5f, 0x74, 0xa5, 0x8e, 0xf3, 0xd8, 0x4c, 0x67, - 0x1a, 0x31, 0xe0, 0xcb, 0xb6, 0x9d, 0x83, 0xa8, 0xd5, 0xfe, - 0x2f, 0x04, 0x79, 0x52, 0xc6, 0xed, 0x90, 0xbb, 0x6a, 0x41, - 0x3c, 0x17, 0x12, 0x39, 0x44, 0x6f, 0xbe, 0x95, 0xe8, 0xc3, - 0x57, 0x7c, 0x01, 0x2a, 0xfb, 0xd0, 0xad, 0x86, 0x98, 0xb3, - 0xce, 0xe5, 0x34, 0x1f, 0x62, 0x49, 0xdd, 0xf6, 0x8b, 0xa0, - 0x71, 0x5a, 0x27, 0x0c, 0x1b, 0x30, 0x4d, 0x66, 0xb7, 0x9c, - 0xe1, 0xca, 0x5e, 0x75, 0x08, 0x23, 0xf2, 0xd9, 0xa4, 0x8f, - 0x91, 0xba, 0xc7, 0xec, 0x3d, 0x16, 0x6b, 0x40, 0xd4, 0xff, - 0x82, 0xa9, 0x78, 0x53, 0x2e, 0x05, 0x24, 0x0f, 0x72, 0x59, - 0x88, 0xa3, 0xde, 0xf5, 0x61, 0x4a, 0x37, 0x1c, 0xcd, 0xe6, - 0x9b, 0xb0, 0xae, 0x85, 0xf8, 0xd3, 0x02, 0x29, 0x54, 0x7f, - 0xeb, 0xc0, 0xbd, 0x96, 0x47, 0x6c, 0x11, 0x3a, 0x2d, 0x06, - 0x7b, 0x50, 0x81, 0xaa, 0xd7, 0xfc, 0x68, 0x43, 0x3e, 0x15, - 0xc4, 0xef, 0x92, 0xb9, 0xa7, 0x8c, 0xf1, 0xda, 0x0b, 0x20, - 0x5d, 0x76, 0xe2, 0xc9, 0xb4, 0x9f, 0x4e, 0x65, 0x18, 0x33, - 0x36, 0x1d, 0x60, 0x4b, 0x9a, 0xb1, 0xcc, 0xe7, 0x73, 0x58, - 0x25, 0x0e, 0xdf, 0xf4, 0x89, 0xa2, 0xbc, 0x97, 0xea, 0xc1, - 0x10, 0x3b, 0x46, 0x6d, 0xf9, 0xd2, 0xaf, 0x84, 0x55, 0x7e, - 0x03, 0x28, 0x3f, 0x14, 0x69, 0x42, 0x93, 0xb8, 0xc5, 0xee, - 0x7a, 0x51, 0x2c, 0x07, 0xd6, 0xfd, 0x80, 0xab, 0xb5, 0x9e, - 0xe3, 0xc8, 0x19, 0x32, 0x4f, 0x64, 0xf0, 0xdb, 0xa6, 0x8d, - 0x5c, 0x77, 0x0a, 0x21, 0x00, 0x2c, 0x58, 0x74, 0xb0, 0x9c, - 0xe8, 0xc4, 0x7d, 0x51, 0x25, 0x09, 0xcd, 0xe1, 0x95, 0xb9, - 0xfa, 0xd6, 0xa2, 0x8e, 0x4a, 0x66, 0x12, 0x3e, 0x87, 0xab, - 0xdf, 0xf3, 0x37, 0x1b, 0x6f, 0x43, 0xe9, 0xc5, 0xb1, 0x9d, - 0x59, 0x75, 0x01, 0x2d, 0x94, 0xb8, 0xcc, 0xe0, 0x24, 0x08, - 0x7c, 0x50, 0x13, 0x3f, 0x4b, 0x67, 0xa3, 0x8f, 0xfb, 0xd7, - 0x6e, 0x42, 0x36, 0x1a, 0xde, 0xf2, 0x86, 0xaa, 0xcf, 0xe3, - 0x97, 0xbb, 0x7f, 0x53, 0x27, 0x0b, 0xb2, 0x9e, 0xea, 0xc6, - 0x02, 0x2e, 0x5a, 0x76, 0x35, 0x19, 0x6d, 0x41, 0x85, 0xa9, - 0xdd, 0xf1, 0x48, 0x64, 0x10, 0x3c, 0xf8, 0xd4, 0xa0, 0x8c, - 0x26, 0x0a, 0x7e, 0x52, 0x96, 0xba, 0xce, 0xe2, 0x5b, 0x77, - 0x03, 0x2f, 0xeb, 0xc7, 0xb3, 0x9f, 0xdc, 0xf0, 0x84, 0xa8, - 0x6c, 0x40, 0x34, 0x18, 0xa1, 0x8d, 0xf9, 0xd5, 0x11, 0x3d, - 0x49, 0x65, 0x83, 0xaf, 0xdb, 0xf7, 0x33, 0x1f, 0x6b, 0x47, - 0xfe, 0xd2, 0xa6, 0x8a, 0x4e, 0x62, 0x16, 0x3a, 0x79, 0x55, - 0x21, 0x0d, 0xc9, 0xe5, 0x91, 0xbd, 0x04, 0x28, 0x5c, 0x70, - 0xb4, 0x98, 0xec, 0xc0, 0x6a, 0x46, 0x32, 0x1e, 0xda, 0xf6, - 0x82, 0xae, 0x17, 0x3b, 0x4f, 0x63, 0xa7, 0x8b, 0xff, 0xd3, - 0x90, 0xbc, 0xc8, 0xe4, 0x20, 0x0c, 0x78, 0x54, 0xed, 0xc1, - 0xb5, 0x99, 0x5d, 0x71, 0x05, 0x29, 0x4c, 0x60, 0x14, 0x38, - 0xfc, 0xd0, 0xa4, 0x88, 0x31, 0x1d, 0x69, 0x45, 0x81, 0xad, - 0xd9, 0xf5, 0xb6, 0x9a, 0xee, 0xc2, 0x06, 0x2a, 0x5e, 0x72, - 0xcb, 0xe7, 0x93, 0xbf, 0x7b, 0x57, 0x23, 0x0f, 0xa5, 0x89, - 0xfd, 0xd1, 0x15, 0x39, 0x4d, 0x61, 0xd8, 0xf4, 0x80, 0xac, - 0x68, 0x44, 0x30, 0x1c, 0x5f, 0x73, 0x07, 0x2b, 0xef, 0xc3, - 0xb7, 0x9b, 0x22, 0x0e, 0x7a, 0x56, 0x92, 0xbe, 0xca, 0xe6, - 0x00, 0x2d, 0x5a, 0x77, 0xb4, 0x99, 0xee, 0xc3, 0x75, 0x58, - 0x2f, 0x02, 0xc1, 0xec, 0x9b, 0xb6, 0xea, 0xc7, 0xb0, 0x9d, - 0x5e, 0x73, 0x04, 0x29, 0x9f, 0xb2, 0xc5, 0xe8, 0x2b, 0x06, - 0x71, 0x5c, 0xc9, 0xe4, 0x93, 0xbe, 0x7d, 0x50, 0x27, 0x0a, - 0xbc, 0x91, 0xe6, 0xcb, 0x08, 0x25, 0x52, 0x7f, 0x23, 0x0e, - 0x79, 0x54, 0x97, 0xba, 0xcd, 0xe0, 0x56, 0x7b, 0x0c, 0x21, - 0xe2, 0xcf, 0xb8, 0x95, 0x8f, 0xa2, 0xd5, 0xf8, 0x3b, 0x16, - 0x61, 0x4c, 0xfa, 0xd7, 0xa0, 0x8d, 0x4e, 0x63, 0x14, 0x39, - 0x65, 0x48, 0x3f, 0x12, 0xd1, 0xfc, 0x8b, 0xa6, 0x10, 0x3d, - 0x4a, 0x67, 0xa4, 0x89, 0xfe, 0xd3, 0x46, 0x6b, 0x1c, 0x31, - 0xf2, 0xdf, 0xa8, 0x85, 0x33, 0x1e, 0x69, 0x44, 0x87, 0xaa, - 0xdd, 0xf0, 0xac, 0x81, 0xf6, 0xdb, 0x18, 0x35, 0x42, 0x6f, - 0xd9, 0xf4, 0x83, 0xae, 0x6d, 0x40, 0x37, 0x1a, 0x03, 0x2e, - 0x59, 0x74, 0xb7, 0x9a, 0xed, 0xc0, 0x76, 0x5b, 0x2c, 0x01, - 0xc2, 0xef, 0x98, 0xb5, 0xe9, 0xc4, 0xb3, 0x9e, 0x5d, 0x70, - 0x07, 0x2a, 0x9c, 0xb1, 0xc6, 0xeb, 0x28, 0x05, 0x72, 0x5f, - 0xca, 0xe7, 0x90, 0xbd, 0x7e, 0x53, 0x24, 0x09, 0xbf, 0x92, - 0xe5, 0xc8, 0x0b, 0x26, 0x51, 0x7c, 0x20, 0x0d, 0x7a, 0x57, - 0x94, 0xb9, 0xce, 0xe3, 0x55, 0x78, 0x0f, 0x22, 0xe1, 0xcc, - 0xbb, 0x96, 0x8c, 0xa1, 0xd6, 0xfb, 0x38, 0x15, 0x62, 0x4f, - 0xf9, 0xd4, 0xa3, 0x8e, 0x4d, 0x60, 0x17, 0x3a, 0x66, 0x4b, - 0x3c, 0x11, 0xd2, 0xff, 0x88, 0xa5, 0x13, 0x3e, 0x49, 0x64, - 0xa7, 0x8a, 0xfd, 0xd0, 0x45, 0x68, 0x1f, 0x32, 0xf1, 0xdc, - 0xab, 0x86, 0x30, 0x1d, 0x6a, 0x47, 0x84, 0xa9, 0xde, 0xf3, - 0xaf, 0x82, 0xf5, 0xd8, 0x1b, 0x36, 0x41, 0x6c, 0xda, 0xf7, - 0x80, 0xad, 0x6e, 0x43, 0x34, 0x19, 0x00, 0x2e, 0x5c, 0x72, - 0xb8, 0x96, 0xe4, 0xca, 0x6d, 0x43, 0x31, 0x1f, 0xd5, 0xfb, - 0x89, 0xa7, 0xda, 0xf4, 0x86, 0xa8, 0x62, 0x4c, 0x3e, 0x10, - 0xb7, 0x99, 0xeb, 0xc5, 0x0f, 0x21, 0x53, 0x7d, 0xa9, 0x87, - 0xf5, 0xdb, 0x11, 0x3f, 0x4d, 0x63, 0xc4, 0xea, 0x98, 0xb6, - 0x7c, 0x52, 0x20, 0x0e, 0x73, 0x5d, 0x2f, 0x01, 0xcb, 0xe5, - 0x97, 0xb9, 0x1e, 0x30, 0x42, 0x6c, 0xa6, 0x88, 0xfa, 0xd4, - 0x4f, 0x61, 0x13, 0x3d, 0xf7, 0xd9, 0xab, 0x85, 0x22, 0x0c, - 0x7e, 0x50, 0x9a, 0xb4, 0xc6, 0xe8, 0x95, 0xbb, 0xc9, 0xe7, - 0x2d, 0x03, 0x71, 0x5f, 0xf8, 0xd6, 0xa4, 0x8a, 0x40, 0x6e, - 0x1c, 0x32, 0xe6, 0xc8, 0xba, 0x94, 0x5e, 0x70, 0x02, 0x2c, - 0x8b, 0xa5, 0xd7, 0xf9, 0x33, 0x1d, 0x6f, 0x41, 0x3c, 0x12, - 0x60, 0x4e, 0x84, 0xaa, 0xd8, 0xf6, 0x51, 0x7f, 0x0d, 0x23, - 0xe9, 0xc7, 0xb5, 0x9b, 0x9e, 0xb0, 0xc2, 0xec, 0x26, 0x08, - 0x7a, 0x54, 0xf3, 0xdd, 0xaf, 0x81, 0x4b, 0x65, 0x17, 0x39, - 0x44, 0x6a, 0x18, 0x36, 0xfc, 0xd2, 0xa0, 0x8e, 0x29, 0x07, - 0x75, 0x5b, 0x91, 0xbf, 0xcd, 0xe3, 0x37, 0x19, 0x6b, 0x45, - 0x8f, 0xa1, 0xd3, 0xfd, 0x5a, 0x74, 0x06, 0x28, 0xe2, 0xcc, - 0xbe, 0x90, 0xed, 0xc3, 0xb1, 0x9f, 0x55, 0x7b, 0x09, 0x27, - 0x80, 0xae, 0xdc, 0xf2, 0x38, 0x16, 0x64, 0x4a, 0xd1, 0xff, - 0x8d, 0xa3, 0x69, 0x47, 0x35, 0x1b, 0xbc, 0x92, 0xe0, 0xce, - 0x04, 0x2a, 0x58, 0x76, 0x0b, 0x25, 0x57, 0x79, 0xb3, 0x9d, - 0xef, 0xc1, 0x66, 0x48, 0x3a, 0x14, 0xde, 0xf0, 0x82, 0xac, - 0x78, 0x56, 0x24, 0x0a, 0xc0, 0xee, 0x9c, 0xb2, 0x15, 0x3b, - 0x49, 0x67, 0xad, 0x83, 0xf1, 0xdf, 0xa2, 0x8c, 0xfe, 0xd0, - 0x1a, 0x34, 0x46, 0x68, 0xcf, 0xe1, 0x93, 0xbd, 0x77, 0x59, - 0x2b, 0x05, 0x00, 0x2f, 0x5e, 0x71, 0xbc, 0x93, 0xe2, 0xcd, - 0x65, 0x4a, 0x3b, 0x14, 0xd9, 0xf6, 0x87, 0xa8, 0xca, 0xe5, - 0x94, 0xbb, 0x76, 0x59, 0x28, 0x07, 0xaf, 0x80, 0xf1, 0xde, - 0x13, 0x3c, 0x4d, 0x62, 0x89, 0xa6, 0xd7, 0xf8, 0x35, 0x1a, - 0x6b, 0x44, 0xec, 0xc3, 0xb2, 0x9d, 0x50, 0x7f, 0x0e, 0x21, - 0x43, 0x6c, 0x1d, 0x32, 0xff, 0xd0, 0xa1, 0x8e, 0x26, 0x09, - 0x78, 0x57, 0x9a, 0xb5, 0xc4, 0xeb, 0x0f, 0x20, 0x51, 0x7e, - 0xb3, 0x9c, 0xed, 0xc2, 0x6a, 0x45, 0x34, 0x1b, 0xd6, 0xf9, - 0x88, 0xa7, 0xc5, 0xea, 0x9b, 0xb4, 0x79, 0x56, 0x27, 0x08, - 0xa0, 0x8f, 0xfe, 0xd1, 0x1c, 0x33, 0x42, 0x6d, 0x86, 0xa9, - 0xd8, 0xf7, 0x3a, 0x15, 0x64, 0x4b, 0xe3, 0xcc, 0xbd, 0x92, - 0x5f, 0x70, 0x01, 0x2e, 0x4c, 0x63, 0x12, 0x3d, 0xf0, 0xdf, - 0xae, 0x81, 0x29, 0x06, 0x77, 0x58, 0x95, 0xba, 0xcb, 0xe4, - 0x1e, 0x31, 0x40, 0x6f, 0xa2, 0x8d, 0xfc, 0xd3, 0x7b, 0x54, - 0x25, 0x0a, 0xc7, 0xe8, 0x99, 0xb6, 0xd4, 0xfb, 0x8a, 0xa5, - 0x68, 0x47, 0x36, 0x19, 0xb1, 0x9e, 0xef, 0xc0, 0x0d, 0x22, - 0x53, 0x7c, 0x97, 0xb8, 0xc9, 0xe6, 0x2b, 0x04, 0x75, 0x5a, - 0xf2, 0xdd, 0xac, 0x83, 0x4e, 0x61, 0x10, 0x3f, 0x5d, 0x72, - 0x03, 0x2c, 0xe1, 0xce, 0xbf, 0x90, 0x38, 0x17, 0x66, 0x49, - 0x84, 0xab, 0xda, 0xf5, 0x11, 0x3e, 0x4f, 0x60, 0xad, 0x82, - 0xf3, 0xdc, 0x74, 0x5b, 0x2a, 0x05, 0xc8, 0xe7, 0x96, 0xb9, - 0xdb, 0xf4, 0x85, 0xaa, 0x67, 0x48, 0x39, 0x16, 0xbe, 0x91, - 0xe0, 0xcf, 0x02, 0x2d, 0x5c, 0x73, 0x98, 0xb7, 0xc6, 0xe9, - 0x24, 0x0b, 0x7a, 0x55, 0xfd, 0xd2, 0xa3, 0x8c, 0x41, 0x6e, - 0x1f, 0x30, 0x52, 0x7d, 0x0c, 0x23, 0xee, 0xc1, 0xb0, 0x9f, - 0x37, 0x18, 0x69, 0x46, 0x8b, 0xa4, 0xd5, 0xfa, 0x00, 0x30, - 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, 0x9d, 0xad, 0xfd, 0xcd, - 0x5d, 0x6d, 0x3d, 0x0d, 0x27, 0x17, 0x47, 0x77, 0xe7, 0xd7, - 0x87, 0xb7, 0xba, 0x8a, 0xda, 0xea, 0x7a, 0x4a, 0x1a, 0x2a, - 0x4e, 0x7e, 0x2e, 0x1e, 0x8e, 0xbe, 0xee, 0xde, 0xd3, 0xe3, - 0xb3, 0x83, 0x13, 0x23, 0x73, 0x43, 0x69, 0x59, 0x09, 0x39, - 0xa9, 0x99, 0xc9, 0xf9, 0xf4, 0xc4, 0x94, 0xa4, 0x34, 0x04, - 0x54, 0x64, 0x9c, 0xac, 0xfc, 0xcc, 0x5c, 0x6c, 0x3c, 0x0c, - 0x01, 0x31, 0x61, 0x51, 0xc1, 0xf1, 0xa1, 0x91, 0xbb, 0x8b, - 0xdb, 0xeb, 0x7b, 0x4b, 0x1b, 0x2b, 0x26, 0x16, 0x46, 0x76, - 0xe6, 0xd6, 0x86, 0xb6, 0xd2, 0xe2, 0xb2, 0x82, 0x12, 0x22, - 0x72, 0x42, 0x4f, 0x7f, 0x2f, 0x1f, 0x8f, 0xbf, 0xef, 0xdf, - 0xf5, 0xc5, 0x95, 0xa5, 0x35, 0x05, 0x55, 0x65, 0x68, 0x58, - 0x08, 0x38, 0xa8, 0x98, 0xc8, 0xf8, 0x25, 0x15, 0x45, 0x75, - 0xe5, 0xd5, 0x85, 0xb5, 0xb8, 0x88, 0xd8, 0xe8, 0x78, 0x48, - 0x18, 0x28, 0x02, 0x32, 0x62, 0x52, 0xc2, 0xf2, 0xa2, 0x92, - 0x9f, 0xaf, 0xff, 0xcf, 0x5f, 0x6f, 0x3f, 0x0f, 0x6b, 0x5b, - 0x0b, 0x3b, 0xab, 0x9b, 0xcb, 0xfb, 0xf6, 0xc6, 0x96, 0xa6, - 0x36, 0x06, 0x56, 0x66, 0x4c, 0x7c, 0x2c, 0x1c, 0x8c, 0xbc, - 0xec, 0xdc, 0xd1, 0xe1, 0xb1, 0x81, 0x11, 0x21, 0x71, 0x41, - 0xb9, 0x89, 0xd9, 0xe9, 0x79, 0x49, 0x19, 0x29, 0x24, 0x14, - 0x44, 0x74, 0xe4, 0xd4, 0x84, 0xb4, 0x9e, 0xae, 0xfe, 0xce, - 0x5e, 0x6e, 0x3e, 0x0e, 0x03, 0x33, 0x63, 0x53, 0xc3, 0xf3, - 0xa3, 0x93, 0xf7, 0xc7, 0x97, 0xa7, 0x37, 0x07, 0x57, 0x67, - 0x6a, 0x5a, 0x0a, 0x3a, 0xaa, 0x9a, 0xca, 0xfa, 0xd0, 0xe0, - 0xb0, 0x80, 0x10, 0x20, 0x70, 0x40, 0x4d, 0x7d, 0x2d, 0x1d, - 0x8d, 0xbd, 0xed, 0xdd, 0x00, 0x31, 0x62, 0x53, 0xc4, 0xf5, - 0xa6, 0x97, 0x95, 0xa4, 0xf7, 0xc6, 0x51, 0x60, 0x33, 0x02, - 0x37, 0x06, 0x55, 0x64, 0xf3, 0xc2, 0x91, 0xa0, 0xa2, 0x93, - 0xc0, 0xf1, 0x66, 0x57, 0x04, 0x35, 0x6e, 0x5f, 0x0c, 0x3d, - 0xaa, 0x9b, 0xc8, 0xf9, 0xfb, 0xca, 0x99, 0xa8, 0x3f, 0x0e, - 0x5d, 0x6c, 0x59, 0x68, 0x3b, 0x0a, 0x9d, 0xac, 0xff, 0xce, - 0xcc, 0xfd, 0xae, 0x9f, 0x08, 0x39, 0x6a, 0x5b, 0xdc, 0xed, - 0xbe, 0x8f, 0x18, 0x29, 0x7a, 0x4b, 0x49, 0x78, 0x2b, 0x1a, - 0x8d, 0xbc, 0xef, 0xde, 0xeb, 0xda, 0x89, 0xb8, 0x2f, 0x1e, - 0x4d, 0x7c, 0x7e, 0x4f, 0x1c, 0x2d, 0xba, 0x8b, 0xd8, 0xe9, - 0xb2, 0x83, 0xd0, 0xe1, 0x76, 0x47, 0x14, 0x25, 0x27, 0x16, - 0x45, 0x74, 0xe3, 0xd2, 0x81, 0xb0, 0x85, 0xb4, 0xe7, 0xd6, - 0x41, 0x70, 0x23, 0x12, 0x10, 0x21, 0x72, 0x43, 0xd4, 0xe5, - 0xb6, 0x87, 0xa5, 0x94, 0xc7, 0xf6, 0x61, 0x50, 0x03, 0x32, - 0x30, 0x01, 0x52, 0x63, 0xf4, 0xc5, 0x96, 0xa7, 0x92, 0xa3, - 0xf0, 0xc1, 0x56, 0x67, 0x34, 0x05, 0x07, 0x36, 0x65, 0x54, - 0xc3, 0xf2, 0xa1, 0x90, 0xcb, 0xfa, 0xa9, 0x98, 0x0f, 0x3e, - 0x6d, 0x5c, 0x5e, 0x6f, 0x3c, 0x0d, 0x9a, 0xab, 0xf8, 0xc9, - 0xfc, 0xcd, 0x9e, 0xaf, 0x38, 0x09, 0x5a, 0x6b, 0x69, 0x58, - 0x0b, 0x3a, 0xad, 0x9c, 0xcf, 0xfe, 0x79, 0x48, 0x1b, 0x2a, - 0xbd, 0x8c, 0xdf, 0xee, 0xec, 0xdd, 0x8e, 0xbf, 0x28, 0x19, - 0x4a, 0x7b, 0x4e, 0x7f, 0x2c, 0x1d, 0x8a, 0xbb, 0xe8, 0xd9, - 0xdb, 0xea, 0xb9, 0x88, 0x1f, 0x2e, 0x7d, 0x4c, 0x17, 0x26, - 0x75, 0x44, 0xd3, 0xe2, 0xb1, 0x80, 0x82, 0xb3, 0xe0, 0xd1, - 0x46, 0x77, 0x24, 0x15, 0x20, 0x11, 0x42, 0x73, 0xe4, 0xd5, - 0x86, 0xb7, 0xb5, 0x84, 0xd7, 0xe6, 0x71, 0x40, 0x13, 0x22, - 0x00, 0x32, 0x64, 0x56, 0xc8, 0xfa, 0xac, 0x9e, 0x8d, 0xbf, - 0xe9, 0xdb, 0x45, 0x77, 0x21, 0x13, 0x07, 0x35, 0x63, 0x51, - 0xcf, 0xfd, 0xab, 0x99, 0x8a, 0xb8, 0xee, 0xdc, 0x42, 0x70, - 0x26, 0x14, 0x0e, 0x3c, 0x6a, 0x58, 0xc6, 0xf4, 0xa2, 0x90, - 0x83, 0xb1, 0xe7, 0xd5, 0x4b, 0x79, 0x2f, 0x1d, 0x09, 0x3b, - 0x6d, 0x5f, 0xc1, 0xf3, 0xa5, 0x97, 0x84, 0xb6, 0xe0, 0xd2, - 0x4c, 0x7e, 0x28, 0x1a, 0x1c, 0x2e, 0x78, 0x4a, 0xd4, 0xe6, - 0xb0, 0x82, 0x91, 0xa3, 0xf5, 0xc7, 0x59, 0x6b, 0x3d, 0x0f, - 0x1b, 0x29, 0x7f, 0x4d, 0xd3, 0xe1, 0xb7, 0x85, 0x96, 0xa4, - 0xf2, 0xc0, 0x5e, 0x6c, 0x3a, 0x08, 0x12, 0x20, 0x76, 0x44, - 0xda, 0xe8, 0xbe, 0x8c, 0x9f, 0xad, 0xfb, 0xc9, 0x57, 0x65, - 0x33, 0x01, 0x15, 0x27, 0x71, 0x43, 0xdd, 0xef, 0xb9, 0x8b, - 0x98, 0xaa, 0xfc, 0xce, 0x50, 0x62, 0x34, 0x06, 0x38, 0x0a, - 0x5c, 0x6e, 0xf0, 0xc2, 0x94, 0xa6, 0xb5, 0x87, 0xd1, 0xe3, - 0x7d, 0x4f, 0x19, 0x2b, 0x3f, 0x0d, 0x5b, 0x69, 0xf7, 0xc5, - 0x93, 0xa1, 0xb2, 0x80, 0xd6, 0xe4, 0x7a, 0x48, 0x1e, 0x2c, - 0x36, 0x04, 0x52, 0x60, 0xfe, 0xcc, 0x9a, 0xa8, 0xbb, 0x89, - 0xdf, 0xed, 0x73, 0x41, 0x17, 0x25, 0x31, 0x03, 0x55, 0x67, - 0xf9, 0xcb, 0x9d, 0xaf, 0xbc, 0x8e, 0xd8, 0xea, 0x74, 0x46, - 0x10, 0x22, 0x24, 0x16, 0x40, 0x72, 0xec, 0xde, 0x88, 0xba, - 0xa9, 0x9b, 0xcd, 0xff, 0x61, 0x53, 0x05, 0x37, 0x23, 0x11, - 0x47, 0x75, 0xeb, 0xd9, 0x8f, 0xbd, 0xae, 0x9c, 0xca, 0xf8, - 0x66, 0x54, 0x02, 0x30, 0x2a, 0x18, 0x4e, 0x7c, 0xe2, 0xd0, - 0x86, 0xb4, 0xa7, 0x95, 0xc3, 0xf1, 0x6f, 0x5d, 0x0b, 0x39, - 0x2d, 0x1f, 0x49, 0x7b, 0xe5, 0xd7, 0x81, 0xb3, 0xa0, 0x92, - 0xc4, 0xf6, 0x68, 0x5a, 0x0c, 0x3e, 0x00, 0x33, 0x66, 0x55, - 0xcc, 0xff, 0xaa, 0x99, 0x85, 0xb6, 0xe3, 0xd0, 0x49, 0x7a, - 0x2f, 0x1c, 0x17, 0x24, 0x71, 0x42, 0xdb, 0xe8, 0xbd, 0x8e, - 0x92, 0xa1, 0xf4, 0xc7, 0x5e, 0x6d, 0x38, 0x0b, 0x2e, 0x1d, - 0x48, 0x7b, 0xe2, 0xd1, 0x84, 0xb7, 0xab, 0x98, 0xcd, 0xfe, - 0x67, 0x54, 0x01, 0x32, 0x39, 0x0a, 0x5f, 0x6c, 0xf5, 0xc6, - 0x93, 0xa0, 0xbc, 0x8f, 0xda, 0xe9, 0x70, 0x43, 0x16, 0x25, - 0x5c, 0x6f, 0x3a, 0x09, 0x90, 0xa3, 0xf6, 0xc5, 0xd9, 0xea, - 0xbf, 0x8c, 0x15, 0x26, 0x73, 0x40, 0x4b, 0x78, 0x2d, 0x1e, - 0x87, 0xb4, 0xe1, 0xd2, 0xce, 0xfd, 0xa8, 0x9b, 0x02, 0x31, - 0x64, 0x57, 0x72, 0x41, 0x14, 0x27, 0xbe, 0x8d, 0xd8, 0xeb, - 0xf7, 0xc4, 0x91, 0xa2, 0x3b, 0x08, 0x5d, 0x6e, 0x65, 0x56, - 0x03, 0x30, 0xa9, 0x9a, 0xcf, 0xfc, 0xe0, 0xd3, 0x86, 0xb5, - 0x2c, 0x1f, 0x4a, 0x79, 0xb8, 0x8b, 0xde, 0xed, 0x74, 0x47, - 0x12, 0x21, 0x3d, 0x0e, 0x5b, 0x68, 0xf1, 0xc2, 0x97, 0xa4, - 0xaf, 0x9c, 0xc9, 0xfa, 0x63, 0x50, 0x05, 0x36, 0x2a, 0x19, - 0x4c, 0x7f, 0xe6, 0xd5, 0x80, 0xb3, 0x96, 0xa5, 0xf0, 0xc3, - 0x5a, 0x69, 0x3c, 0x0f, 0x13, 0x20, 0x75, 0x46, 0xdf, 0xec, - 0xb9, 0x8a, 0x81, 0xb2, 0xe7, 0xd4, 0x4d, 0x7e, 0x2b, 0x18, - 0x04, 0x37, 0x62, 0x51, 0xc8, 0xfb, 0xae, 0x9d, 0xe4, 0xd7, - 0x82, 0xb1, 0x28, 0x1b, 0x4e, 0x7d, 0x61, 0x52, 0x07, 0x34, - 0xad, 0x9e, 0xcb, 0xf8, 0xf3, 0xc0, 0x95, 0xa6, 0x3f, 0x0c, - 0x59, 0x6a, 0x76, 0x45, 0x10, 0x23, 0xba, 0x89, 0xdc, 0xef, - 0xca, 0xf9, 0xac, 0x9f, 0x06, 0x35, 0x60, 0x53, 0x4f, 0x7c, - 0x29, 0x1a, 0x83, 0xb0, 0xe5, 0xd6, 0xdd, 0xee, 0xbb, 0x88, - 0x11, 0x22, 0x77, 0x44, 0x58, 0x6b, 0x3e, 0x0d, 0x94, 0xa7, - 0xf2, 0xc1, 0x00, 0x34, 0x68, 0x5c, 0xd0, 0xe4, 0xb8, 0x8c, - 0xbd, 0x89, 0xd5, 0xe1, 0x6d, 0x59, 0x05, 0x31, 0x67, 0x53, - 0x0f, 0x3b, 0xb7, 0x83, 0xdf, 0xeb, 0xda, 0xee, 0xb2, 0x86, - 0x0a, 0x3e, 0x62, 0x56, 0xce, 0xfa, 0xa6, 0x92, 0x1e, 0x2a, - 0x76, 0x42, 0x73, 0x47, 0x1b, 0x2f, 0xa3, 0x97, 0xcb, 0xff, - 0xa9, 0x9d, 0xc1, 0xf5, 0x79, 0x4d, 0x11, 0x25, 0x14, 0x20, - 0x7c, 0x48, 0xc4, 0xf0, 0xac, 0x98, 0x81, 0xb5, 0xe9, 0xdd, - 0x51, 0x65, 0x39, 0x0d, 0x3c, 0x08, 0x54, 0x60, 0xec, 0xd8, - 0x84, 0xb0, 0xe6, 0xd2, 0x8e, 0xba, 0x36, 0x02, 0x5e, 0x6a, - 0x5b, 0x6f, 0x33, 0x07, 0x8b, 0xbf, 0xe3, 0xd7, 0x4f, 0x7b, - 0x27, 0x13, 0x9f, 0xab, 0xf7, 0xc3, 0xf2, 0xc6, 0x9a, 0xae, - 0x22, 0x16, 0x4a, 0x7e, 0x28, 0x1c, 0x40, 0x74, 0xf8, 0xcc, - 0x90, 0xa4, 0x95, 0xa1, 0xfd, 0xc9, 0x45, 0x71, 0x2d, 0x19, - 0x1f, 0x2b, 0x77, 0x43, 0xcf, 0xfb, 0xa7, 0x93, 0xa2, 0x96, - 0xca, 0xfe, 0x72, 0x46, 0x1a, 0x2e, 0x78, 0x4c, 0x10, 0x24, - 0xa8, 0x9c, 0xc0, 0xf4, 0xc5, 0xf1, 0xad, 0x99, 0x15, 0x21, - 0x7d, 0x49, 0xd1, 0xe5, 0xb9, 0x8d, 0x01, 0x35, 0x69, 0x5d, - 0x6c, 0x58, 0x04, 0x30, 0xbc, 0x88, 0xd4, 0xe0, 0xb6, 0x82, - 0xde, 0xea, 0x66, 0x52, 0x0e, 0x3a, 0x0b, 0x3f, 0x63, 0x57, - 0xdb, 0xef, 0xb3, 0x87, 0x9e, 0xaa, 0xf6, 0xc2, 0x4e, 0x7a, - 0x26, 0x12, 0x23, 0x17, 0x4b, 0x7f, 0xf3, 0xc7, 0x9b, 0xaf, - 0xf9, 0xcd, 0x91, 0xa5, 0x29, 0x1d, 0x41, 0x75, 0x44, 0x70, - 0x2c, 0x18, 0x94, 0xa0, 0xfc, 0xc8, 0x50, 0x64, 0x38, 0x0c, - 0x80, 0xb4, 0xe8, 0xdc, 0xed, 0xd9, 0x85, 0xb1, 0x3d, 0x09, - 0x55, 0x61, 0x37, 0x03, 0x5f, 0x6b, 0xe7, 0xd3, 0x8f, 0xbb, - 0x8a, 0xbe, 0xe2, 0xd6, 0x5a, 0x6e, 0x32, 0x06, 0x00, 0x35, - 0x6a, 0x5f, 0xd4, 0xe1, 0xbe, 0x8b, 0xb5, 0x80, 0xdf, 0xea, - 0x61, 0x54, 0x0b, 0x3e, 0x77, 0x42, 0x1d, 0x28, 0xa3, 0x96, - 0xc9, 0xfc, 0xc2, 0xf7, 0xa8, 0x9d, 0x16, 0x23, 0x7c, 0x49, - 0xee, 0xdb, 0x84, 0xb1, 0x3a, 0x0f, 0x50, 0x65, 0x5b, 0x6e, - 0x31, 0x04, 0x8f, 0xba, 0xe5, 0xd0, 0x99, 0xac, 0xf3, 0xc6, - 0x4d, 0x78, 0x27, 0x12, 0x2c, 0x19, 0x46, 0x73, 0xf8, 0xcd, - 0x92, 0xa7, 0xc1, 0xf4, 0xab, 0x9e, 0x15, 0x20, 0x7f, 0x4a, - 0x74, 0x41, 0x1e, 0x2b, 0xa0, 0x95, 0xca, 0xff, 0xb6, 0x83, - 0xdc, 0xe9, 0x62, 0x57, 0x08, 0x3d, 0x03, 0x36, 0x69, 0x5c, - 0xd7, 0xe2, 0xbd, 0x88, 0x2f, 0x1a, 0x45, 0x70, 0xfb, 0xce, - 0x91, 0xa4, 0x9a, 0xaf, 0xf0, 0xc5, 0x4e, 0x7b, 0x24, 0x11, - 0x58, 0x6d, 0x32, 0x07, 0x8c, 0xb9, 0xe6, 0xd3, 0xed, 0xd8, - 0x87, 0xb2, 0x39, 0x0c, 0x53, 0x66, 0x9f, 0xaa, 0xf5, 0xc0, - 0x4b, 0x7e, 0x21, 0x14, 0x2a, 0x1f, 0x40, 0x75, 0xfe, 0xcb, - 0x94, 0xa1, 0xe8, 0xdd, 0x82, 0xb7, 0x3c, 0x09, 0x56, 0x63, - 0x5d, 0x68, 0x37, 0x02, 0x89, 0xbc, 0xe3, 0xd6, 0x71, 0x44, - 0x1b, 0x2e, 0xa5, 0x90, 0xcf, 0xfa, 0xc4, 0xf1, 0xae, 0x9b, - 0x10, 0x25, 0x7a, 0x4f, 0x06, 0x33, 0x6c, 0x59, 0xd2, 0xe7, - 0xb8, 0x8d, 0xb3, 0x86, 0xd9, 0xec, 0x67, 0x52, 0x0d, 0x38, - 0x5e, 0x6b, 0x34, 0x01, 0x8a, 0xbf, 0xe0, 0xd5, 0xeb, 0xde, - 0x81, 0xb4, 0x3f, 0x0a, 0x55, 0x60, 0x29, 0x1c, 0x43, 0x76, - 0xfd, 0xc8, 0x97, 0xa2, 0x9c, 0xa9, 0xf6, 0xc3, 0x48, 0x7d, - 0x22, 0x17, 0xb0, 0x85, 0xda, 0xef, 0x64, 0x51, 0x0e, 0x3b, - 0x05, 0x30, 0x6f, 0x5a, 0xd1, 0xe4, 0xbb, 0x8e, 0xc7, 0xf2, - 0xad, 0x98, 0x13, 0x26, 0x79, 0x4c, 0x72, 0x47, 0x18, 0x2d, - 0xa6, 0x93, 0xcc, 0xf9, 0x00, 0x36, 0x6c, 0x5a, 0xd8, 0xee, - 0xb4, 0x82, 0xad, 0x9b, 0xc1, 0xf7, 0x75, 0x43, 0x19, 0x2f, - 0x47, 0x71, 0x2b, 0x1d, 0x9f, 0xa9, 0xf3, 0xc5, 0xea, 0xdc, - 0x86, 0xb0, 0x32, 0x04, 0x5e, 0x68, 0x8e, 0xb8, 0xe2, 0xd4, - 0x56, 0x60, 0x3a, 0x0c, 0x23, 0x15, 0x4f, 0x79, 0xfb, 0xcd, - 0x97, 0xa1, 0xc9, 0xff, 0xa5, 0x93, 0x11, 0x27, 0x7d, 0x4b, - 0x64, 0x52, 0x08, 0x3e, 0xbc, 0x8a, 0xd0, 0xe6, 0x01, 0x37, - 0x6d, 0x5b, 0xd9, 0xef, 0xb5, 0x83, 0xac, 0x9a, 0xc0, 0xf6, - 0x74, 0x42, 0x18, 0x2e, 0x46, 0x70, 0x2a, 0x1c, 0x9e, 0xa8, - 0xf2, 0xc4, 0xeb, 0xdd, 0x87, 0xb1, 0x33, 0x05, 0x5f, 0x69, - 0x8f, 0xb9, 0xe3, 0xd5, 0x57, 0x61, 0x3b, 0x0d, 0x22, 0x14, - 0x4e, 0x78, 0xfa, 0xcc, 0x96, 0xa0, 0xc8, 0xfe, 0xa4, 0x92, - 0x10, 0x26, 0x7c, 0x4a, 0x65, 0x53, 0x09, 0x3f, 0xbd, 0x8b, - 0xd1, 0xe7, 0x02, 0x34, 0x6e, 0x58, 0xda, 0xec, 0xb6, 0x80, - 0xaf, 0x99, 0xc3, 0xf5, 0x77, 0x41, 0x1b, 0x2d, 0x45, 0x73, - 0x29, 0x1f, 0x9d, 0xab, 0xf1, 0xc7, 0xe8, 0xde, 0x84, 0xb2, - 0x30, 0x06, 0x5c, 0x6a, 0x8c, 0xba, 0xe0, 0xd6, 0x54, 0x62, - 0x38, 0x0e, 0x21, 0x17, 0x4d, 0x7b, 0xf9, 0xcf, 0x95, 0xa3, - 0xcb, 0xfd, 0xa7, 0x91, 0x13, 0x25, 0x7f, 0x49, 0x66, 0x50, - 0x0a, 0x3c, 0xbe, 0x88, 0xd2, 0xe4, 0x03, 0x35, 0x6f, 0x59, - 0xdb, 0xed, 0xb7, 0x81, 0xae, 0x98, 0xc2, 0xf4, 0x76, 0x40, - 0x1a, 0x2c, 0x44, 0x72, 0x28, 0x1e, 0x9c, 0xaa, 0xf0, 0xc6, - 0xe9, 0xdf, 0x85, 0xb3, 0x31, 0x07, 0x5d, 0x6b, 0x8d, 0xbb, - 0xe1, 0xd7, 0x55, 0x63, 0x39, 0x0f, 0x20, 0x16, 0x4c, 0x7a, - 0xf8, 0xce, 0x94, 0xa2, 0xca, 0xfc, 0xa6, 0x90, 0x12, 0x24, - 0x7e, 0x48, 0x67, 0x51, 0x0b, 0x3d, 0xbf, 0x89, 0xd3, 0xe5, - 0x00, 0x37, 0x6e, 0x59, 0xdc, 0xeb, 0xb2, 0x85, 0xa5, 0x92, - 0xcb, 0xfc, 0x79, 0x4e, 0x17, 0x20, 0x57, 0x60, 0x39, 0x0e, - 0x8b, 0xbc, 0xe5, 0xd2, 0xf2, 0xc5, 0x9c, 0xab, 0x2e, 0x19, - 0x40, 0x77, 0xae, 0x99, 0xc0, 0xf7, 0x72, 0x45, 0x1c, 0x2b, - 0x0b, 0x3c, 0x65, 0x52, 0xd7, 0xe0, 0xb9, 0x8e, 0xf9, 0xce, - 0x97, 0xa0, 0x25, 0x12, 0x4b, 0x7c, 0x5c, 0x6b, 0x32, 0x05, - 0x80, 0xb7, 0xee, 0xd9, 0x41, 0x76, 0x2f, 0x18, 0x9d, 0xaa, - 0xf3, 0xc4, 0xe4, 0xd3, 0x8a, 0xbd, 0x38, 0x0f, 0x56, 0x61, - 0x16, 0x21, 0x78, 0x4f, 0xca, 0xfd, 0xa4, 0x93, 0xb3, 0x84, - 0xdd, 0xea, 0x6f, 0x58, 0x01, 0x36, 0xef, 0xd8, 0x81, 0xb6, - 0x33, 0x04, 0x5d, 0x6a, 0x4a, 0x7d, 0x24, 0x13, 0x96, 0xa1, - 0xf8, 0xcf, 0xb8, 0x8f, 0xd6, 0xe1, 0x64, 0x53, 0x0a, 0x3d, - 0x1d, 0x2a, 0x73, 0x44, 0xc1, 0xf6, 0xaf, 0x98, 0x82, 0xb5, - 0xec, 0xdb, 0x5e, 0x69, 0x30, 0x07, 0x27, 0x10, 0x49, 0x7e, - 0xfb, 0xcc, 0x95, 0xa2, 0xd5, 0xe2, 0xbb, 0x8c, 0x09, 0x3e, - 0x67, 0x50, 0x70, 0x47, 0x1e, 0x29, 0xac, 0x9b, 0xc2, 0xf5, - 0x2c, 0x1b, 0x42, 0x75, 0xf0, 0xc7, 0x9e, 0xa9, 0x89, 0xbe, - 0xe7, 0xd0, 0x55, 0x62, 0x3b, 0x0c, 0x7b, 0x4c, 0x15, 0x22, - 0xa7, 0x90, 0xc9, 0xfe, 0xde, 0xe9, 0xb0, 0x87, 0x02, 0x35, - 0x6c, 0x5b, 0xc3, 0xf4, 0xad, 0x9a, 0x1f, 0x28, 0x71, 0x46, - 0x66, 0x51, 0x08, 0x3f, 0xba, 0x8d, 0xd4, 0xe3, 0x94, 0xa3, - 0xfa, 0xcd, 0x48, 0x7f, 0x26, 0x11, 0x31, 0x06, 0x5f, 0x68, - 0xed, 0xda, 0x83, 0xb4, 0x6d, 0x5a, 0x03, 0x34, 0xb1, 0x86, - 0xdf, 0xe8, 0xc8, 0xff, 0xa6, 0x91, 0x14, 0x23, 0x7a, 0x4d, - 0x3a, 0x0d, 0x54, 0x63, 0xe6, 0xd1, 0x88, 0xbf, 0x9f, 0xa8, - 0xf1, 0xc6, 0x43, 0x74, 0x2d, 0x1a, 0x00, 0x38, 0x70, 0x48, - 0xe0, 0xd8, 0x90, 0xa8, 0xdd, 0xe5, 0xad, 0x95, 0x3d, 0x05, - 0x4d, 0x75, 0xa7, 0x9f, 0xd7, 0xef, 0x47, 0x7f, 0x37, 0x0f, - 0x7a, 0x42, 0x0a, 0x32, 0x9a, 0xa2, 0xea, 0xd2, 0x53, 0x6b, - 0x23, 0x1b, 0xb3, 0x8b, 0xc3, 0xfb, 0x8e, 0xb6, 0xfe, 0xc6, - 0x6e, 0x56, 0x1e, 0x26, 0xf4, 0xcc, 0x84, 0xbc, 0x14, 0x2c, - 0x64, 0x5c, 0x29, 0x11, 0x59, 0x61, 0xc9, 0xf1, 0xb9, 0x81, - 0xa6, 0x9e, 0xd6, 0xee, 0x46, 0x7e, 0x36, 0x0e, 0x7b, 0x43, - 0x0b, 0x33, 0x9b, 0xa3, 0xeb, 0xd3, 0x01, 0x39, 0x71, 0x49, - 0xe1, 0xd9, 0x91, 0xa9, 0xdc, 0xe4, 0xac, 0x94, 0x3c, 0x04, - 0x4c, 0x74, 0xf5, 0xcd, 0x85, 0xbd, 0x15, 0x2d, 0x65, 0x5d, - 0x28, 0x10, 0x58, 0x60, 0xc8, 0xf0, 0xb8, 0x80, 0x52, 0x6a, - 0x22, 0x1a, 0xb2, 0x8a, 0xc2, 0xfa, 0x8f, 0xb7, 0xff, 0xc7, - 0x6f, 0x57, 0x1f, 0x27, 0x51, 0x69, 0x21, 0x19, 0xb1, 0x89, - 0xc1, 0xf9, 0x8c, 0xb4, 0xfc, 0xc4, 0x6c, 0x54, 0x1c, 0x24, - 0xf6, 0xce, 0x86, 0xbe, 0x16, 0x2e, 0x66, 0x5e, 0x2b, 0x13, - 0x5b, 0x63, 0xcb, 0xf3, 0xbb, 0x83, 0x02, 0x3a, 0x72, 0x4a, - 0xe2, 0xda, 0x92, 0xaa, 0xdf, 0xe7, 0xaf, 0x97, 0x3f, 0x07, - 0x4f, 0x77, 0xa5, 0x9d, 0xd5, 0xed, 0x45, 0x7d, 0x35, 0x0d, - 0x78, 0x40, 0x08, 0x30, 0x98, 0xa0, 0xe8, 0xd0, 0xf7, 0xcf, - 0x87, 0xbf, 0x17, 0x2f, 0x67, 0x5f, 0x2a, 0x12, 0x5a, 0x62, - 0xca, 0xf2, 0xba, 0x82, 0x50, 0x68, 0x20, 0x18, 0xb0, 0x88, - 0xc0, 0xf8, 0x8d, 0xb5, 0xfd, 0xc5, 0x6d, 0x55, 0x1d, 0x25, - 0xa4, 0x9c, 0xd4, 0xec, 0x44, 0x7c, 0x34, 0x0c, 0x79, 0x41, - 0x09, 0x31, 0x99, 0xa1, 0xe9, 0xd1, 0x03, 0x3b, 0x73, 0x4b, - 0xe3, 0xdb, 0x93, 0xab, 0xde, 0xe6, 0xae, 0x96, 0x3e, 0x06, - 0x4e, 0x76, 0x00, 0x39, 0x72, 0x4b, 0xe4, 0xdd, 0x96, 0xaf, - 0xd5, 0xec, 0xa7, 0x9e, 0x31, 0x08, 0x43, 0x7a, 0xb7, 0x8e, - 0xc5, 0xfc, 0x53, 0x6a, 0x21, 0x18, 0x62, 0x5b, 0x10, 0x29, - 0x86, 0xbf, 0xf4, 0xcd, 0x73, 0x4a, 0x01, 0x38, 0x97, 0xae, - 0xe5, 0xdc, 0xa6, 0x9f, 0xd4, 0xed, 0x42, 0x7b, 0x30, 0x09, - 0xc4, 0xfd, 0xb6, 0x8f, 0x20, 0x19, 0x52, 0x6b, 0x11, 0x28, - 0x63, 0x5a, 0xf5, 0xcc, 0x87, 0xbe, 0xe6, 0xdf, 0x94, 0xad, - 0x02, 0x3b, 0x70, 0x49, 0x33, 0x0a, 0x41, 0x78, 0xd7, 0xee, - 0xa5, 0x9c, 0x51, 0x68, 0x23, 0x1a, 0xb5, 0x8c, 0xc7, 0xfe, - 0x84, 0xbd, 0xf6, 0xcf, 0x60, 0x59, 0x12, 0x2b, 0x95, 0xac, - 0xe7, 0xde, 0x71, 0x48, 0x03, 0x3a, 0x40, 0x79, 0x32, 0x0b, - 0xa4, 0x9d, 0xd6, 0xef, 0x22, 0x1b, 0x50, 0x69, 0xc6, 0xff, - 0xb4, 0x8d, 0xf7, 0xce, 0x85, 0xbc, 0x13, 0x2a, 0x61, 0x58, - 0xd1, 0xe8, 0xa3, 0x9a, 0x35, 0x0c, 0x47, 0x7e, 0x04, 0x3d, - 0x76, 0x4f, 0xe0, 0xd9, 0x92, 0xab, 0x66, 0x5f, 0x14, 0x2d, - 0x82, 0xbb, 0xf0, 0xc9, 0xb3, 0x8a, 0xc1, 0xf8, 0x57, 0x6e, - 0x25, 0x1c, 0xa2, 0x9b, 0xd0, 0xe9, 0x46, 0x7f, 0x34, 0x0d, - 0x77, 0x4e, 0x05, 0x3c, 0x93, 0xaa, 0xe1, 0xd8, 0x15, 0x2c, - 0x67, 0x5e, 0xf1, 0xc8, 0x83, 0xba, 0xc0, 0xf9, 0xb2, 0x8b, - 0x24, 0x1d, 0x56, 0x6f, 0x37, 0x0e, 0x45, 0x7c, 0xd3, 0xea, - 0xa1, 0x98, 0xe2, 0xdb, 0x90, 0xa9, 0x06, 0x3f, 0x74, 0x4d, - 0x80, 0xb9, 0xf2, 0xcb, 0x64, 0x5d, 0x16, 0x2f, 0x55, 0x6c, - 0x27, 0x1e, 0xb1, 0x88, 0xc3, 0xfa, 0x44, 0x7d, 0x36, 0x0f, - 0xa0, 0x99, 0xd2, 0xeb, 0x91, 0xa8, 0xe3, 0xda, 0x75, 0x4c, - 0x07, 0x3e, 0xf3, 0xca, 0x81, 0xb8, 0x17, 0x2e, 0x65, 0x5c, - 0x26, 0x1f, 0x54, 0x6d, 0xc2, 0xfb, 0xb0, 0x89, 0x00, 0x3a, - 0x74, 0x4e, 0xe8, 0xd2, 0x9c, 0xa6, 0xcd, 0xf7, 0xb9, 0x83, - 0x25, 0x1f, 0x51, 0x6b, 0x87, 0xbd, 0xf3, 0xc9, 0x6f, 0x55, - 0x1b, 0x21, 0x4a, 0x70, 0x3e, 0x04, 0xa2, 0x98, 0xd6, 0xec, - 0x13, 0x29, 0x67, 0x5d, 0xfb, 0xc1, 0x8f, 0xb5, 0xde, 0xe4, - 0xaa, 0x90, 0x36, 0x0c, 0x42, 0x78, 0x94, 0xae, 0xe0, 0xda, - 0x7c, 0x46, 0x08, 0x32, 0x59, 0x63, 0x2d, 0x17, 0xb1, 0x8b, - 0xc5, 0xff, 0x26, 0x1c, 0x52, 0x68, 0xce, 0xf4, 0xba, 0x80, - 0xeb, 0xd1, 0x9f, 0xa5, 0x03, 0x39, 0x77, 0x4d, 0xa1, 0x9b, - 0xd5, 0xef, 0x49, 0x73, 0x3d, 0x07, 0x6c, 0x56, 0x18, 0x22, - 0x84, 0xbe, 0xf0, 0xca, 0x35, 0x0f, 0x41, 0x7b, 0xdd, 0xe7, - 0xa9, 0x93, 0xf8, 0xc2, 0x8c, 0xb6, 0x10, 0x2a, 0x64, 0x5e, - 0xb2, 0x88, 0xc6, 0xfc, 0x5a, 0x60, 0x2e, 0x14, 0x7f, 0x45, - 0x0b, 0x31, 0x97, 0xad, 0xe3, 0xd9, 0x4c, 0x76, 0x38, 0x02, - 0xa4, 0x9e, 0xd0, 0xea, 0x81, 0xbb, 0xf5, 0xcf, 0x69, 0x53, - 0x1d, 0x27, 0xcb, 0xf1, 0xbf, 0x85, 0x23, 0x19, 0x57, 0x6d, - 0x06, 0x3c, 0x72, 0x48, 0xee, 0xd4, 0x9a, 0xa0, 0x5f, 0x65, - 0x2b, 0x11, 0xb7, 0x8d, 0xc3, 0xf9, 0x92, 0xa8, 0xe6, 0xdc, - 0x7a, 0x40, 0x0e, 0x34, 0xd8, 0xe2, 0xac, 0x96, 0x30, 0x0a, - 0x44, 0x7e, 0x15, 0x2f, 0x61, 0x5b, 0xfd, 0xc7, 0x89, 0xb3, - 0x6a, 0x50, 0x1e, 0x24, 0x82, 0xb8, 0xf6, 0xcc, 0xa7, 0x9d, - 0xd3, 0xe9, 0x4f, 0x75, 0x3b, 0x01, 0xed, 0xd7, 0x99, 0xa3, - 0x05, 0x3f, 0x71, 0x4b, 0x20, 0x1a, 0x54, 0x6e, 0xc8, 0xf2, - 0xbc, 0x86, 0x79, 0x43, 0x0d, 0x37, 0x91, 0xab, 0xe5, 0xdf, - 0xb4, 0x8e, 0xc0, 0xfa, 0x5c, 0x66, 0x28, 0x12, 0xfe, 0xc4, - 0x8a, 0xb0, 0x16, 0x2c, 0x62, 0x58, 0x33, 0x09, 0x47, 0x7d, - 0xdb, 0xe1, 0xaf, 0x95, 0x00, 0x3b, 0x76, 0x4d, 0xec, 0xd7, - 0x9a, 0xa1, 0xc5, 0xfe, 0xb3, 0x88, 0x29, 0x12, 0x5f, 0x64, - 0x97, 0xac, 0xe1, 0xda, 0x7b, 0x40, 0x0d, 0x36, 0x52, 0x69, - 0x24, 0x1f, 0xbe, 0x85, 0xc8, 0xf3, 0x33, 0x08, 0x45, 0x7e, - 0xdf, 0xe4, 0xa9, 0x92, 0xf6, 0xcd, 0x80, 0xbb, 0x1a, 0x21, - 0x6c, 0x57, 0xa4, 0x9f, 0xd2, 0xe9, 0x48, 0x73, 0x3e, 0x05, - 0x61, 0x5a, 0x17, 0x2c, 0x8d, 0xb6, 0xfb, 0xc0, 0x66, 0x5d, - 0x10, 0x2b, 0x8a, 0xb1, 0xfc, 0xc7, 0xa3, 0x98, 0xd5, 0xee, - 0x4f, 0x74, 0x39, 0x02, 0xf1, 0xca, 0x87, 0xbc, 0x1d, 0x26, - 0x6b, 0x50, 0x34, 0x0f, 0x42, 0x79, 0xd8, 0xe3, 0xae, 0x95, - 0x55, 0x6e, 0x23, 0x18, 0xb9, 0x82, 0xcf, 0xf4, 0x90, 0xab, - 0xe6, 0xdd, 0x7c, 0x47, 0x0a, 0x31, 0xc2, 0xf9, 0xb4, 0x8f, - 0x2e, 0x15, 0x58, 0x63, 0x07, 0x3c, 0x71, 0x4a, 0xeb, 0xd0, - 0x9d, 0xa6, 0xcc, 0xf7, 0xba, 0x81, 0x20, 0x1b, 0x56, 0x6d, - 0x09, 0x32, 0x7f, 0x44, 0xe5, 0xde, 0x93, 0xa8, 0x5b, 0x60, - 0x2d, 0x16, 0xb7, 0x8c, 0xc1, 0xfa, 0x9e, 0xa5, 0xe8, 0xd3, - 0x72, 0x49, 0x04, 0x3f, 0xff, 0xc4, 0x89, 0xb2, 0x13, 0x28, - 0x65, 0x5e, 0x3a, 0x01, 0x4c, 0x77, 0xd6, 0xed, 0xa0, 0x9b, - 0x68, 0x53, 0x1e, 0x25, 0x84, 0xbf, 0xf2, 0xc9, 0xad, 0x96, - 0xdb, 0xe0, 0x41, 0x7a, 0x37, 0x0c, 0xaa, 0x91, 0xdc, 0xe7, - 0x46, 0x7d, 0x30, 0x0b, 0x6f, 0x54, 0x19, 0x22, 0x83, 0xb8, - 0xf5, 0xce, 0x3d, 0x06, 0x4b, 0x70, 0xd1, 0xea, 0xa7, 0x9c, - 0xf8, 0xc3, 0x8e, 0xb5, 0x14, 0x2f, 0x62, 0x59, 0x99, 0xa2, - 0xef, 0xd4, 0x75, 0x4e, 0x03, 0x38, 0x5c, 0x67, 0x2a, 0x11, - 0xb0, 0x8b, 0xc6, 0xfd, 0x0e, 0x35, 0x78, 0x43, 0xe2, 0xd9, - 0x94, 0xaf, 0xcb, 0xf0, 0xbd, 0x86, 0x27, 0x1c, 0x51, 0x6a, - 0x00, 0x3c, 0x78, 0x44, 0xf0, 0xcc, 0x88, 0xb4, 0xfd, 0xc1, - 0x85, 0xb9, 0x0d, 0x31, 0x75, 0x49, 0xe7, 0xdb, 0x9f, 0xa3, - 0x17, 0x2b, 0x6f, 0x53, 0x1a, 0x26, 0x62, 0x5e, 0xea, 0xd6, - 0x92, 0xae, 0xd3, 0xef, 0xab, 0x97, 0x23, 0x1f, 0x5b, 0x67, - 0x2e, 0x12, 0x56, 0x6a, 0xde, 0xe2, 0xa6, 0x9a, 0x34, 0x08, - 0x4c, 0x70, 0xc4, 0xf8, 0xbc, 0x80, 0xc9, 0xf5, 0xb1, 0x8d, - 0x39, 0x05, 0x41, 0x7d, 0xbb, 0x87, 0xc3, 0xff, 0x4b, 0x77, - 0x33, 0x0f, 0x46, 0x7a, 0x3e, 0x02, 0xb6, 0x8a, 0xce, 0xf2, - 0x5c, 0x60, 0x24, 0x18, 0xac, 0x90, 0xd4, 0xe8, 0xa1, 0x9d, - 0xd9, 0xe5, 0x51, 0x6d, 0x29, 0x15, 0x68, 0x54, 0x10, 0x2c, - 0x98, 0xa4, 0xe0, 0xdc, 0x95, 0xa9, 0xed, 0xd1, 0x65, 0x59, - 0x1d, 0x21, 0x8f, 0xb3, 0xf7, 0xcb, 0x7f, 0x43, 0x07, 0x3b, - 0x72, 0x4e, 0x0a, 0x36, 0x82, 0xbe, 0xfa, 0xc6, 0x6b, 0x57, - 0x13, 0x2f, 0x9b, 0xa7, 0xe3, 0xdf, 0x96, 0xaa, 0xee, 0xd2, - 0x66, 0x5a, 0x1e, 0x22, 0x8c, 0xb0, 0xf4, 0xc8, 0x7c, 0x40, - 0x04, 0x38, 0x71, 0x4d, 0x09, 0x35, 0x81, 0xbd, 0xf9, 0xc5, - 0xb8, 0x84, 0xc0, 0xfc, 0x48, 0x74, 0x30, 0x0c, 0x45, 0x79, - 0x3d, 0x01, 0xb5, 0x89, 0xcd, 0xf1, 0x5f, 0x63, 0x27, 0x1b, - 0xaf, 0x93, 0xd7, 0xeb, 0xa2, 0x9e, 0xda, 0xe6, 0x52, 0x6e, - 0x2a, 0x16, 0xd0, 0xec, 0xa8, 0x94, 0x20, 0x1c, 0x58, 0x64, - 0x2d, 0x11, 0x55, 0x69, 0xdd, 0xe1, 0xa5, 0x99, 0x37, 0x0b, - 0x4f, 0x73, 0xc7, 0xfb, 0xbf, 0x83, 0xca, 0xf6, 0xb2, 0x8e, - 0x3a, 0x06, 0x42, 0x7e, 0x03, 0x3f, 0x7b, 0x47, 0xf3, 0xcf, - 0x8b, 0xb7, 0xfe, 0xc2, 0x86, 0xba, 0x0e, 0x32, 0x76, 0x4a, - 0xe4, 0xd8, 0x9c, 0xa0, 0x14, 0x28, 0x6c, 0x50, 0x19, 0x25, - 0x61, 0x5d, 0xe9, 0xd5, 0x91, 0xad, 0x00, 0x3d, 0x7a, 0x47, - 0xf4, 0xc9, 0x8e, 0xb3, 0xf5, 0xc8, 0x8f, 0xb2, 0x01, 0x3c, - 0x7b, 0x46, 0xf7, 0xca, 0x8d, 0xb0, 0x03, 0x3e, 0x79, 0x44, - 0x02, 0x3f, 0x78, 0x45, 0xf6, 0xcb, 0x8c, 0xb1, 0xf3, 0xce, - 0x89, 0xb4, 0x07, 0x3a, 0x7d, 0x40, 0x06, 0x3b, 0x7c, 0x41, - 0xf2, 0xcf, 0x88, 0xb5, 0x04, 0x39, 0x7e, 0x43, 0xf0, 0xcd, - 0x8a, 0xb7, 0xf1, 0xcc, 0x8b, 0xb6, 0x05, 0x38, 0x7f, 0x42, - 0xfb, 0xc6, 0x81, 0xbc, 0x0f, 0x32, 0x75, 0x48, 0x0e, 0x33, - 0x74, 0x49, 0xfa, 0xc7, 0x80, 0xbd, 0x0c, 0x31, 0x76, 0x4b, - 0xf8, 0xc5, 0x82, 0xbf, 0xf9, 0xc4, 0x83, 0xbe, 0x0d, 0x30, - 0x77, 0x4a, 0x08, 0x35, 0x72, 0x4f, 0xfc, 0xc1, 0x86, 0xbb, - 0xfd, 0xc0, 0x87, 0xba, 0x09, 0x34, 0x73, 0x4e, 0xff, 0xc2, - 0x85, 0xb8, 0x0b, 0x36, 0x71, 0x4c, 0x0a, 0x37, 0x70, 0x4d, - 0xfe, 0xc3, 0x84, 0xb9, 0xeb, 0xd6, 0x91, 0xac, 0x1f, 0x22, - 0x65, 0x58, 0x1e, 0x23, 0x64, 0x59, 0xea, 0xd7, 0x90, 0xad, - 0x1c, 0x21, 0x66, 0x5b, 0xe8, 0xd5, 0x92, 0xaf, 0xe9, 0xd4, - 0x93, 0xae, 0x1d, 0x20, 0x67, 0x5a, 0x18, 0x25, 0x62, 0x5f, - 0xec, 0xd1, 0x96, 0xab, 0xed, 0xd0, 0x97, 0xaa, 0x19, 0x24, - 0x63, 0x5e, 0xef, 0xd2, 0x95, 0xa8, 0x1b, 0x26, 0x61, 0x5c, - 0x1a, 0x27, 0x60, 0x5d, 0xee, 0xd3, 0x94, 0xa9, 0x10, 0x2d, - 0x6a, 0x57, 0xe4, 0xd9, 0x9e, 0xa3, 0xe5, 0xd8, 0x9f, 0xa2, - 0x11, 0x2c, 0x6b, 0x56, 0xe7, 0xda, 0x9d, 0xa0, 0x13, 0x2e, - 0x69, 0x54, 0x12, 0x2f, 0x68, 0x55, 0xe6, 0xdb, 0x9c, 0xa1, - 0xe3, 0xde, 0x99, 0xa4, 0x17, 0x2a, 0x6d, 0x50, 0x16, 0x2b, - 0x6c, 0x51, 0xe2, 0xdf, 0x98, 0xa5, 0x14, 0x29, 0x6e, 0x53, - 0xe0, 0xdd, 0x9a, 0xa7, 0xe1, 0xdc, 0x9b, 0xa6, 0x15, 0x28, - 0x6f, 0x52, 0x00, 0x3e, 0x7c, 0x42, 0xf8, 0xc6, 0x84, 0xba, - 0xed, 0xd3, 0x91, 0xaf, 0x15, 0x2b, 0x69, 0x57, 0xc7, 0xf9, - 0xbb, 0x85, 0x3f, 0x01, 0x43, 0x7d, 0x2a, 0x14, 0x56, 0x68, - 0xd2, 0xec, 0xae, 0x90, 0x93, 0xad, 0xef, 0xd1, 0x6b, 0x55, - 0x17, 0x29, 0x7e, 0x40, 0x02, 0x3c, 0x86, 0xb8, 0xfa, 0xc4, - 0x54, 0x6a, 0x28, 0x16, 0xac, 0x92, 0xd0, 0xee, 0xb9, 0x87, - 0xc5, 0xfb, 0x41, 0x7f, 0x3d, 0x03, 0x3b, 0x05, 0x47, 0x79, - 0xc3, 0xfd, 0xbf, 0x81, 0xd6, 0xe8, 0xaa, 0x94, 0x2e, 0x10, - 0x52, 0x6c, 0xfc, 0xc2, 0x80, 0xbe, 0x04, 0x3a, 0x78, 0x46, - 0x11, 0x2f, 0x6d, 0x53, 0xe9, 0xd7, 0x95, 0xab, 0xa8, 0x96, - 0xd4, 0xea, 0x50, 0x6e, 0x2c, 0x12, 0x45, 0x7b, 0x39, 0x07, - 0xbd, 0x83, 0xc1, 0xff, 0x6f, 0x51, 0x13, 0x2d, 0x97, 0xa9, - 0xeb, 0xd5, 0x82, 0xbc, 0xfe, 0xc0, 0x7a, 0x44, 0x06, 0x38, - 0x76, 0x48, 0x0a, 0x34, 0x8e, 0xb0, 0xf2, 0xcc, 0x9b, 0xa5, - 0xe7, 0xd9, 0x63, 0x5d, 0x1f, 0x21, 0xb1, 0x8f, 0xcd, 0xf3, - 0x49, 0x77, 0x35, 0x0b, 0x5c, 0x62, 0x20, 0x1e, 0xa4, 0x9a, - 0xd8, 0xe6, 0xe5, 0xdb, 0x99, 0xa7, 0x1d, 0x23, 0x61, 0x5f, - 0x08, 0x36, 0x74, 0x4a, 0xf0, 0xce, 0x8c, 0xb2, 0x22, 0x1c, - 0x5e, 0x60, 0xda, 0xe4, 0xa6, 0x98, 0xcf, 0xf1, 0xb3, 0x8d, - 0x37, 0x09, 0x4b, 0x75, 0x4d, 0x73, 0x31, 0x0f, 0xb5, 0x8b, - 0xc9, 0xf7, 0xa0, 0x9e, 0xdc, 0xe2, 0x58, 0x66, 0x24, 0x1a, - 0x8a, 0xb4, 0xf6, 0xc8, 0x72, 0x4c, 0x0e, 0x30, 0x67, 0x59, - 0x1b, 0x25, 0x9f, 0xa1, 0xe3, 0xdd, 0xde, 0xe0, 0xa2, 0x9c, - 0x26, 0x18, 0x5a, 0x64, 0x33, 0x0d, 0x4f, 0x71, 0xcb, 0xf5, - 0xb7, 0x89, 0x19, 0x27, 0x65, 0x5b, 0xe1, 0xdf, 0x9d, 0xa3, - 0xf4, 0xca, 0x88, 0xb6, 0x0c, 0x32, 0x70, 0x4e, 0x00, 0x3f, - 0x7e, 0x41, 0xfc, 0xc3, 0x82, 0xbd, 0xe5, 0xda, 0x9b, 0xa4, - 0x19, 0x26, 0x67, 0x58, 0xd7, 0xe8, 0xa9, 0x96, 0x2b, 0x14, - 0x55, 0x6a, 0x32, 0x0d, 0x4c, 0x73, 0xce, 0xf1, 0xb0, 0x8f, - 0xb3, 0x8c, 0xcd, 0xf2, 0x4f, 0x70, 0x31, 0x0e, 0x56, 0x69, - 0x28, 0x17, 0xaa, 0x95, 0xd4, 0xeb, 0x64, 0x5b, 0x1a, 0x25, - 0x98, 0xa7, 0xe6, 0xd9, 0x81, 0xbe, 0xff, 0xc0, 0x7d, 0x42, - 0x03, 0x3c, 0x7b, 0x44, 0x05, 0x3a, 0x87, 0xb8, 0xf9, 0xc6, - 0x9e, 0xa1, 0xe0, 0xdf, 0x62, 0x5d, 0x1c, 0x23, 0xac, 0x93, - 0xd2, 0xed, 0x50, 0x6f, 0x2e, 0x11, 0x49, 0x76, 0x37, 0x08, - 0xb5, 0x8a, 0xcb, 0xf4, 0xc8, 0xf7, 0xb6, 0x89, 0x34, 0x0b, - 0x4a, 0x75, 0x2d, 0x12, 0x53, 0x6c, 0xd1, 0xee, 0xaf, 0x90, - 0x1f, 0x20, 0x61, 0x5e, 0xe3, 0xdc, 0x9d, 0xa2, 0xfa, 0xc5, - 0x84, 0xbb, 0x06, 0x39, 0x78, 0x47, 0xf6, 0xc9, 0x88, 0xb7, - 0x0a, 0x35, 0x74, 0x4b, 0x13, 0x2c, 0x6d, 0x52, 0xef, 0xd0, - 0x91, 0xae, 0x21, 0x1e, 0x5f, 0x60, 0xdd, 0xe2, 0xa3, 0x9c, - 0xc4, 0xfb, 0xba, 0x85, 0x38, 0x07, 0x46, 0x79, 0x45, 0x7a, - 0x3b, 0x04, 0xb9, 0x86, 0xc7, 0xf8, 0xa0, 0x9f, 0xde, 0xe1, - 0x5c, 0x63, 0x22, 0x1d, 0x92, 0xad, 0xec, 0xd3, 0x6e, 0x51, - 0x10, 0x2f, 0x77, 0x48, 0x09, 0x36, 0x8b, 0xb4, 0xf5, 0xca, - 0x8d, 0xb2, 0xf3, 0xcc, 0x71, 0x4e, 0x0f, 0x30, 0x68, 0x57, - 0x16, 0x29, 0x94, 0xab, 0xea, 0xd5, 0x5a, 0x65, 0x24, 0x1b, - 0xa6, 0x99, 0xd8, 0xe7, 0xbf, 0x80, 0xc1, 0xfe, 0x43, 0x7c, - 0x3d, 0x02, 0x3e, 0x01, 0x40, 0x7f, 0xc2, 0xfd, 0xbc, 0x83, - 0xdb, 0xe4, 0xa5, 0x9a, 0x27, 0x18, 0x59, 0x66, 0xe9, 0xd6, - 0x97, 0xa8, 0x15, 0x2a, 0x6b, 0x54, 0x0c, 0x33, 0x72, 0x4d, - 0xf0, 0xcf, 0x8e, 0xb1, 0x00, 0x40, 0x80, 0xc0, 0x1d, 0x5d, - 0x9d, 0xdd, 0x3a, 0x7a, 0xba, 0xfa, 0x27, 0x67, 0xa7, 0xe7, - 0x74, 0x34, 0xf4, 0xb4, 0x69, 0x29, 0xe9, 0xa9, 0x4e, 0x0e, - 0xce, 0x8e, 0x53, 0x13, 0xd3, 0x93, 0xe8, 0xa8, 0x68, 0x28, - 0xf5, 0xb5, 0x75, 0x35, 0xd2, 0x92, 0x52, 0x12, 0xcf, 0x8f, - 0x4f, 0x0f, 0x9c, 0xdc, 0x1c, 0x5c, 0x81, 0xc1, 0x01, 0x41, - 0xa6, 0xe6, 0x26, 0x66, 0xbb, 0xfb, 0x3b, 0x7b, 0xcd, 0x8d, - 0x4d, 0x0d, 0xd0, 0x90, 0x50, 0x10, 0xf7, 0xb7, 0x77, 0x37, - 0xea, 0xaa, 0x6a, 0x2a, 0xb9, 0xf9, 0x39, 0x79, 0xa4, 0xe4, - 0x24, 0x64, 0x83, 0xc3, 0x03, 0x43, 0x9e, 0xde, 0x1e, 0x5e, - 0x25, 0x65, 0xa5, 0xe5, 0x38, 0x78, 0xb8, 0xf8, 0x1f, 0x5f, - 0x9f, 0xdf, 0x02, 0x42, 0x82, 0xc2, 0x51, 0x11, 0xd1, 0x91, - 0x4c, 0x0c, 0xcc, 0x8c, 0x6b, 0x2b, 0xeb, 0xab, 0x76, 0x36, - 0xf6, 0xb6, 0x87, 0xc7, 0x07, 0x47, 0x9a, 0xda, 0x1a, 0x5a, - 0xbd, 0xfd, 0x3d, 0x7d, 0xa0, 0xe0, 0x20, 0x60, 0xf3, 0xb3, - 0x73, 0x33, 0xee, 0xae, 0x6e, 0x2e, 0xc9, 0x89, 0x49, 0x09, - 0xd4, 0x94, 0x54, 0x14, 0x6f, 0x2f, 0xef, 0xaf, 0x72, 0x32, - 0xf2, 0xb2, 0x55, 0x15, 0xd5, 0x95, 0x48, 0x08, 0xc8, 0x88, - 0x1b, 0x5b, 0x9b, 0xdb, 0x06, 0x46, 0x86, 0xc6, 0x21, 0x61, - 0xa1, 0xe1, 0x3c, 0x7c, 0xbc, 0xfc, 0x4a, 0x0a, 0xca, 0x8a, - 0x57, 0x17, 0xd7, 0x97, 0x70, 0x30, 0xf0, 0xb0, 0x6d, 0x2d, - 0xed, 0xad, 0x3e, 0x7e, 0xbe, 0xfe, 0x23, 0x63, 0xa3, 0xe3, - 0x04, 0x44, 0x84, 0xc4, 0x19, 0x59, 0x99, 0xd9, 0xa2, 0xe2, - 0x22, 0x62, 0xbf, 0xff, 0x3f, 0x7f, 0x98, 0xd8, 0x18, 0x58, - 0x85, 0xc5, 0x05, 0x45, 0xd6, 0x96, 0x56, 0x16, 0xcb, 0x8b, - 0x4b, 0x0b, 0xec, 0xac, 0x6c, 0x2c, 0xf1, 0xb1, 0x71, 0x31, - 0x00, 0x41, 0x82, 0xc3, 0x19, 0x58, 0x9b, 0xda, 0x32, 0x73, - 0xb0, 0xf1, 0x2b, 0x6a, 0xa9, 0xe8, 0x64, 0x25, 0xe6, 0xa7, - 0x7d, 0x3c, 0xff, 0xbe, 0x56, 0x17, 0xd4, 0x95, 0x4f, 0x0e, - 0xcd, 0x8c, 0xc8, 0x89, 0x4a, 0x0b, 0xd1, 0x90, 0x53, 0x12, - 0xfa, 0xbb, 0x78, 0x39, 0xe3, 0xa2, 0x61, 0x20, 0xac, 0xed, - 0x2e, 0x6f, 0xb5, 0xf4, 0x37, 0x76, 0x9e, 0xdf, 0x1c, 0x5d, - 0x87, 0xc6, 0x05, 0x44, 0x8d, 0xcc, 0x0f, 0x4e, 0x94, 0xd5, - 0x16, 0x57, 0xbf, 0xfe, 0x3d, 0x7c, 0xa6, 0xe7, 0x24, 0x65, - 0xe9, 0xa8, 0x6b, 0x2a, 0xf0, 0xb1, 0x72, 0x33, 0xdb, 0x9a, - 0x59, 0x18, 0xc2, 0x83, 0x40, 0x01, 0x45, 0x04, 0xc7, 0x86, - 0x5c, 0x1d, 0xde, 0x9f, 0x77, 0x36, 0xf5, 0xb4, 0x6e, 0x2f, - 0xec, 0xad, 0x21, 0x60, 0xa3, 0xe2, 0x38, 0x79, 0xba, 0xfb, - 0x13, 0x52, 0x91, 0xd0, 0x0a, 0x4b, 0x88, 0xc9, 0x07, 0x46, - 0x85, 0xc4, 0x1e, 0x5f, 0x9c, 0xdd, 0x35, 0x74, 0xb7, 0xf6, - 0x2c, 0x6d, 0xae, 0xef, 0x63, 0x22, 0xe1, 0xa0, 0x7a, 0x3b, - 0xf8, 0xb9, 0x51, 0x10, 0xd3, 0x92, 0x48, 0x09, 0xca, 0x8b, - 0xcf, 0x8e, 0x4d, 0x0c, 0xd6, 0x97, 0x54, 0x15, 0xfd, 0xbc, - 0x7f, 0x3e, 0xe4, 0xa5, 0x66, 0x27, 0xab, 0xea, 0x29, 0x68, - 0xb2, 0xf3, 0x30, 0x71, 0x99, 0xd8, 0x1b, 0x5a, 0x80, 0xc1, - 0x02, 0x43, 0x8a, 0xcb, 0x08, 0x49, 0x93, 0xd2, 0x11, 0x50, - 0xb8, 0xf9, 0x3a, 0x7b, 0xa1, 0xe0, 0x23, 0x62, 0xee, 0xaf, - 0x6c, 0x2d, 0xf7, 0xb6, 0x75, 0x34, 0xdc, 0x9d, 0x5e, 0x1f, - 0xc5, 0x84, 0x47, 0x06, 0x42, 0x03, 0xc0, 0x81, 0x5b, 0x1a, - 0xd9, 0x98, 0x70, 0x31, 0xf2, 0xb3, 0x69, 0x28, 0xeb, 0xaa, - 0x26, 0x67, 0xa4, 0xe5, 0x3f, 0x7e, 0xbd, 0xfc, 0x14, 0x55, - 0x96, 0xd7, 0x0d, 0x4c, 0x8f, 0xce, 0x00, 0x42, 0x84, 0xc6, - 0x15, 0x57, 0x91, 0xd3, 0x2a, 0x68, 0xae, 0xec, 0x3f, 0x7d, - 0xbb, 0xf9, 0x54, 0x16, 0xd0, 0x92, 0x41, 0x03, 0xc5, 0x87, - 0x7e, 0x3c, 0xfa, 0xb8, 0x6b, 0x29, 0xef, 0xad, 0xa8, 0xea, - 0x2c, 0x6e, 0xbd, 0xff, 0x39, 0x7b, 0x82, 0xc0, 0x06, 0x44, - 0x97, 0xd5, 0x13, 0x51, 0xfc, 0xbe, 0x78, 0x3a, 0xe9, 0xab, - 0x6d, 0x2f, 0xd6, 0x94, 0x52, 0x10, 0xc3, 0x81, 0x47, 0x05, - 0x4d, 0x0f, 0xc9, 0x8b, 0x58, 0x1a, 0xdc, 0x9e, 0x67, 0x25, - 0xe3, 0xa1, 0x72, 0x30, 0xf6, 0xb4, 0x19, 0x5b, 0x9d, 0xdf, - 0x0c, 0x4e, 0x88, 0xca, 0x33, 0x71, 0xb7, 0xf5, 0x26, 0x64, - 0xa2, 0xe0, 0xe5, 0xa7, 0x61, 0x23, 0xf0, 0xb2, 0x74, 0x36, - 0xcf, 0x8d, 0x4b, 0x09, 0xda, 0x98, 0x5e, 0x1c, 0xb1, 0xf3, - 0x35, 0x77, 0xa4, 0xe6, 0x20, 0x62, 0x9b, 0xd9, 0x1f, 0x5d, - 0x8e, 0xcc, 0x0a, 0x48, 0x9a, 0xd8, 0x1e, 0x5c, 0x8f, 0xcd, - 0x0b, 0x49, 0xb0, 0xf2, 0x34, 0x76, 0xa5, 0xe7, 0x21, 0x63, - 0xce, 0x8c, 0x4a, 0x08, 0xdb, 0x99, 0x5f, 0x1d, 0xe4, 0xa6, - 0x60, 0x22, 0xf1, 0xb3, 0x75, 0x37, 0x32, 0x70, 0xb6, 0xf4, - 0x27, 0x65, 0xa3, 0xe1, 0x18, 0x5a, 0x9c, 0xde, 0x0d, 0x4f, - 0x89, 0xcb, 0x66, 0x24, 0xe2, 0xa0, 0x73, 0x31, 0xf7, 0xb5, - 0x4c, 0x0e, 0xc8, 0x8a, 0x59, 0x1b, 0xdd, 0x9f, 0xd7, 0x95, - 0x53, 0x11, 0xc2, 0x80, 0x46, 0x04, 0xfd, 0xbf, 0x79, 0x3b, - 0xe8, 0xaa, 0x6c, 0x2e, 0x83, 0xc1, 0x07, 0x45, 0x96, 0xd4, - 0x12, 0x50, 0xa9, 0xeb, 0x2d, 0x6f, 0xbc, 0xfe, 0x38, 0x7a, - 0x7f, 0x3d, 0xfb, 0xb9, 0x6a, 0x28, 0xee, 0xac, 0x55, 0x17, - 0xd1, 0x93, 0x40, 0x02, 0xc4, 0x86, 0x2b, 0x69, 0xaf, 0xed, - 0x3e, 0x7c, 0xba, 0xf8, 0x01, 0x43, 0x85, 0xc7, 0x14, 0x56, - 0x90, 0xd2, 0x00, 0x43, 0x86, 0xc5, 0x11, 0x52, 0x97, 0xd4, - 0x22, 0x61, 0xa4, 0xe7, 0x33, 0x70, 0xb5, 0xf6, 0x44, 0x07, - 0xc2, 0x81, 0x55, 0x16, 0xd3, 0x90, 0x66, 0x25, 0xe0, 0xa3, - 0x77, 0x34, 0xf1, 0xb2, 0x88, 0xcb, 0x0e, 0x4d, 0x99, 0xda, - 0x1f, 0x5c, 0xaa, 0xe9, 0x2c, 0x6f, 0xbb, 0xf8, 0x3d, 0x7e, - 0xcc, 0x8f, 0x4a, 0x09, 0xdd, 0x9e, 0x5b, 0x18, 0xee, 0xad, - 0x68, 0x2b, 0xff, 0xbc, 0x79, 0x3a, 0x0d, 0x4e, 0x8b, 0xc8, - 0x1c, 0x5f, 0x9a, 0xd9, 0x2f, 0x6c, 0xa9, 0xea, 0x3e, 0x7d, - 0xb8, 0xfb, 0x49, 0x0a, 0xcf, 0x8c, 0x58, 0x1b, 0xde, 0x9d, - 0x6b, 0x28, 0xed, 0xae, 0x7a, 0x39, 0xfc, 0xbf, 0x85, 0xc6, - 0x03, 0x40, 0x94, 0xd7, 0x12, 0x51, 0xa7, 0xe4, 0x21, 0x62, - 0xb6, 0xf5, 0x30, 0x73, 0xc1, 0x82, 0x47, 0x04, 0xd0, 0x93, - 0x56, 0x15, 0xe3, 0xa0, 0x65, 0x26, 0xf2, 0xb1, 0x74, 0x37, - 0x1a, 0x59, 0x9c, 0xdf, 0x0b, 0x48, 0x8d, 0xce, 0x38, 0x7b, - 0xbe, 0xfd, 0x29, 0x6a, 0xaf, 0xec, 0x5e, 0x1d, 0xd8, 0x9b, - 0x4f, 0x0c, 0xc9, 0x8a, 0x7c, 0x3f, 0xfa, 0xb9, 0x6d, 0x2e, - 0xeb, 0xa8, 0x92, 0xd1, 0x14, 0x57, 0x83, 0xc0, 0x05, 0x46, - 0xb0, 0xf3, 0x36, 0x75, 0xa1, 0xe2, 0x27, 0x64, 0xd6, 0x95, - 0x50, 0x13, 0xc7, 0x84, 0x41, 0x02, 0xf4, 0xb7, 0x72, 0x31, - 0xe5, 0xa6, 0x63, 0x20, 0x17, 0x54, 0x91, 0xd2, 0x06, 0x45, - 0x80, 0xc3, 0x35, 0x76, 0xb3, 0xf0, 0x24, 0x67, 0xa2, 0xe1, - 0x53, 0x10, 0xd5, 0x96, 0x42, 0x01, 0xc4, 0x87, 0x71, 0x32, - 0xf7, 0xb4, 0x60, 0x23, 0xe6, 0xa5, 0x9f, 0xdc, 0x19, 0x5a, - 0x8e, 0xcd, 0x08, 0x4b, 0xbd, 0xfe, 0x3b, 0x78, 0xac, 0xef, - 0x2a, 0x69, 0xdb, 0x98, 0x5d, 0x1e, 0xca, 0x89, 0x4c, 0x0f, - 0xf9, 0xba, 0x7f, 0x3c, 0xe8, 0xab, 0x6e, 0x2d, 0x00, 0x44, - 0x88, 0xcc, 0x0d, 0x49, 0x85, 0xc1, 0x1a, 0x5e, 0x92, 0xd6, - 0x17, 0x53, 0x9f, 0xdb, 0x34, 0x70, 0xbc, 0xf8, 0x39, 0x7d, - 0xb1, 0xf5, 0x2e, 0x6a, 0xa6, 0xe2, 0x23, 0x67, 0xab, 0xef, - 0x68, 0x2c, 0xe0, 0xa4, 0x65, 0x21, 0xed, 0xa9, 0x72, 0x36, - 0xfa, 0xbe, 0x7f, 0x3b, 0xf7, 0xb3, 0x5c, 0x18, 0xd4, 0x90, - 0x51, 0x15, 0xd9, 0x9d, 0x46, 0x02, 0xce, 0x8a, 0x4b, 0x0f, - 0xc3, 0x87, 0xd0, 0x94, 0x58, 0x1c, 0xdd, 0x99, 0x55, 0x11, - 0xca, 0x8e, 0x42, 0x06, 0xc7, 0x83, 0x4f, 0x0b, 0xe4, 0xa0, - 0x6c, 0x28, 0xe9, 0xad, 0x61, 0x25, 0xfe, 0xba, 0x76, 0x32, - 0xf3, 0xb7, 0x7b, 0x3f, 0xb8, 0xfc, 0x30, 0x74, 0xb5, 0xf1, - 0x3d, 0x79, 0xa2, 0xe6, 0x2a, 0x6e, 0xaf, 0xeb, 0x27, 0x63, - 0x8c, 0xc8, 0x04, 0x40, 0x81, 0xc5, 0x09, 0x4d, 0x96, 0xd2, - 0x1e, 0x5a, 0x9b, 0xdf, 0x13, 0x57, 0xbd, 0xf9, 0x35, 0x71, - 0xb0, 0xf4, 0x38, 0x7c, 0xa7, 0xe3, 0x2f, 0x6b, 0xaa, 0xee, - 0x22, 0x66, 0x89, 0xcd, 0x01, 0x45, 0x84, 0xc0, 0x0c, 0x48, - 0x93, 0xd7, 0x1b, 0x5f, 0x9e, 0xda, 0x16, 0x52, 0xd5, 0x91, - 0x5d, 0x19, 0xd8, 0x9c, 0x50, 0x14, 0xcf, 0x8b, 0x47, 0x03, - 0xc2, 0x86, 0x4a, 0x0e, 0xe1, 0xa5, 0x69, 0x2d, 0xec, 0xa8, - 0x64, 0x20, 0xfb, 0xbf, 0x73, 0x37, 0xf6, 0xb2, 0x7e, 0x3a, - 0x6d, 0x29, 0xe5, 0xa1, 0x60, 0x24, 0xe8, 0xac, 0x77, 0x33, - 0xff, 0xbb, 0x7a, 0x3e, 0xf2, 0xb6, 0x59, 0x1d, 0xd1, 0x95, - 0x54, 0x10, 0xdc, 0x98, 0x43, 0x07, 0xcb, 0x8f, 0x4e, 0x0a, - 0xc6, 0x82, 0x05, 0x41, 0x8d, 0xc9, 0x08, 0x4c, 0x80, 0xc4, - 0x1f, 0x5b, 0x97, 0xd3, 0x12, 0x56, 0x9a, 0xde, 0x31, 0x75, - 0xb9, 0xfd, 0x3c, 0x78, 0xb4, 0xf0, 0x2b, 0x6f, 0xa3, 0xe7, - 0x26, 0x62, 0xae, 0xea, 0x00, 0x45, 0x8a, 0xcf, 0x09, 0x4c, - 0x83, 0xc6, 0x12, 0x57, 0x98, 0xdd, 0x1b, 0x5e, 0x91, 0xd4, - 0x24, 0x61, 0xae, 0xeb, 0x2d, 0x68, 0xa7, 0xe2, 0x36, 0x73, - 0xbc, 0xf9, 0x3f, 0x7a, 0xb5, 0xf0, 0x48, 0x0d, 0xc2, 0x87, - 0x41, 0x04, 0xcb, 0x8e, 0x5a, 0x1f, 0xd0, 0x95, 0x53, 0x16, - 0xd9, 0x9c, 0x6c, 0x29, 0xe6, 0xa3, 0x65, 0x20, 0xef, 0xaa, - 0x7e, 0x3b, 0xf4, 0xb1, 0x77, 0x32, 0xfd, 0xb8, 0x90, 0xd5, - 0x1a, 0x5f, 0x99, 0xdc, 0x13, 0x56, 0x82, 0xc7, 0x08, 0x4d, - 0x8b, 0xce, 0x01, 0x44, 0xb4, 0xf1, 0x3e, 0x7b, 0xbd, 0xf8, - 0x37, 0x72, 0xa6, 0xe3, 0x2c, 0x69, 0xaf, 0xea, 0x25, 0x60, - 0xd8, 0x9d, 0x52, 0x17, 0xd1, 0x94, 0x5b, 0x1e, 0xca, 0x8f, - 0x40, 0x05, 0xc3, 0x86, 0x49, 0x0c, 0xfc, 0xb9, 0x76, 0x33, - 0xf5, 0xb0, 0x7f, 0x3a, 0xee, 0xab, 0x64, 0x21, 0xe7, 0xa2, - 0x6d, 0x28, 0x3d, 0x78, 0xb7, 0xf2, 0x34, 0x71, 0xbe, 0xfb, - 0x2f, 0x6a, 0xa5, 0xe0, 0x26, 0x63, 0xac, 0xe9, 0x19, 0x5c, - 0x93, 0xd6, 0x10, 0x55, 0x9a, 0xdf, 0x0b, 0x4e, 0x81, 0xc4, - 0x02, 0x47, 0x88, 0xcd, 0x75, 0x30, 0xff, 0xba, 0x7c, 0x39, - 0xf6, 0xb3, 0x67, 0x22, 0xed, 0xa8, 0x6e, 0x2b, 0xe4, 0xa1, - 0x51, 0x14, 0xdb, 0x9e, 0x58, 0x1d, 0xd2, 0x97, 0x43, 0x06, - 0xc9, 0x8c, 0x4a, 0x0f, 0xc0, 0x85, 0xad, 0xe8, 0x27, 0x62, - 0xa4, 0xe1, 0x2e, 0x6b, 0xbf, 0xfa, 0x35, 0x70, 0xb6, 0xf3, - 0x3c, 0x79, 0x89, 0xcc, 0x03, 0x46, 0x80, 0xc5, 0x0a, 0x4f, - 0x9b, 0xde, 0x11, 0x54, 0x92, 0xd7, 0x18, 0x5d, 0xe5, 0xa0, - 0x6f, 0x2a, 0xec, 0xa9, 0x66, 0x23, 0xf7, 0xb2, 0x7d, 0x38, - 0xfe, 0xbb, 0x74, 0x31, 0xc1, 0x84, 0x4b, 0x0e, 0xc8, 0x8d, - 0x42, 0x07, 0xd3, 0x96, 0x59, 0x1c, 0xda, 0x9f, 0x50, 0x15, - 0x00, 0x46, 0x8c, 0xca, 0x05, 0x43, 0x89, 0xcf, 0x0a, 0x4c, - 0x86, 0xc0, 0x0f, 0x49, 0x83, 0xc5, 0x14, 0x52, 0x98, 0xde, - 0x11, 0x57, 0x9d, 0xdb, 0x1e, 0x58, 0x92, 0xd4, 0x1b, 0x5d, - 0x97, 0xd1, 0x28, 0x6e, 0xa4, 0xe2, 0x2d, 0x6b, 0xa1, 0xe7, - 0x22, 0x64, 0xae, 0xe8, 0x27, 0x61, 0xab, 0xed, 0x3c, 0x7a, - 0xb0, 0xf6, 0x39, 0x7f, 0xb5, 0xf3, 0x36, 0x70, 0xba, 0xfc, - 0x33, 0x75, 0xbf, 0xf9, 0x50, 0x16, 0xdc, 0x9a, 0x55, 0x13, - 0xd9, 0x9f, 0x5a, 0x1c, 0xd6, 0x90, 0x5f, 0x19, 0xd3, 0x95, - 0x44, 0x02, 0xc8, 0x8e, 0x41, 0x07, 0xcd, 0x8b, 0x4e, 0x08, - 0xc2, 0x84, 0x4b, 0x0d, 0xc7, 0x81, 0x78, 0x3e, 0xf4, 0xb2, - 0x7d, 0x3b, 0xf1, 0xb7, 0x72, 0x34, 0xfe, 0xb8, 0x77, 0x31, - 0xfb, 0xbd, 0x6c, 0x2a, 0xe0, 0xa6, 0x69, 0x2f, 0xe5, 0xa3, - 0x66, 0x20, 0xea, 0xac, 0x63, 0x25, 0xef, 0xa9, 0xa0, 0xe6, - 0x2c, 0x6a, 0xa5, 0xe3, 0x29, 0x6f, 0xaa, 0xec, 0x26, 0x60, - 0xaf, 0xe9, 0x23, 0x65, 0xb4, 0xf2, 0x38, 0x7e, 0xb1, 0xf7, - 0x3d, 0x7b, 0xbe, 0xf8, 0x32, 0x74, 0xbb, 0xfd, 0x37, 0x71, - 0x88, 0xce, 0x04, 0x42, 0x8d, 0xcb, 0x01, 0x47, 0x82, 0xc4, - 0x0e, 0x48, 0x87, 0xc1, 0x0b, 0x4d, 0x9c, 0xda, 0x10, 0x56, - 0x99, 0xdf, 0x15, 0x53, 0x96, 0xd0, 0x1a, 0x5c, 0x93, 0xd5, - 0x1f, 0x59, 0xf0, 0xb6, 0x7c, 0x3a, 0xf5, 0xb3, 0x79, 0x3f, - 0xfa, 0xbc, 0x76, 0x30, 0xff, 0xb9, 0x73, 0x35, 0xe4, 0xa2, - 0x68, 0x2e, 0xe1, 0xa7, 0x6d, 0x2b, 0xee, 0xa8, 0x62, 0x24, - 0xeb, 0xad, 0x67, 0x21, 0xd8, 0x9e, 0x54, 0x12, 0xdd, 0x9b, - 0x51, 0x17, 0xd2, 0x94, 0x5e, 0x18, 0xd7, 0x91, 0x5b, 0x1d, - 0xcc, 0x8a, 0x40, 0x06, 0xc9, 0x8f, 0x45, 0x03, 0xc6, 0x80, - 0x4a, 0x0c, 0xc3, 0x85, 0x4f, 0x09, 0x00, 0x47, 0x8e, 0xc9, - 0x01, 0x46, 0x8f, 0xc8, 0x02, 0x45, 0x8c, 0xcb, 0x03, 0x44, - 0x8d, 0xca, 0x04, 0x43, 0x8a, 0xcd, 0x05, 0x42, 0x8b, 0xcc, - 0x06, 0x41, 0x88, 0xcf, 0x07, 0x40, 0x89, 0xce, 0x08, 0x4f, - 0x86, 0xc1, 0x09, 0x4e, 0x87, 0xc0, 0x0a, 0x4d, 0x84, 0xc3, - 0x0b, 0x4c, 0x85, 0xc2, 0x0c, 0x4b, 0x82, 0xc5, 0x0d, 0x4a, - 0x83, 0xc4, 0x0e, 0x49, 0x80, 0xc7, 0x0f, 0x48, 0x81, 0xc6, - 0x10, 0x57, 0x9e, 0xd9, 0x11, 0x56, 0x9f, 0xd8, 0x12, 0x55, - 0x9c, 0xdb, 0x13, 0x54, 0x9d, 0xda, 0x14, 0x53, 0x9a, 0xdd, - 0x15, 0x52, 0x9b, 0xdc, 0x16, 0x51, 0x98, 0xdf, 0x17, 0x50, - 0x99, 0xde, 0x18, 0x5f, 0x96, 0xd1, 0x19, 0x5e, 0x97, 0xd0, - 0x1a, 0x5d, 0x94, 0xd3, 0x1b, 0x5c, 0x95, 0xd2, 0x1c, 0x5b, - 0x92, 0xd5, 0x1d, 0x5a, 0x93, 0xd4, 0x1e, 0x59, 0x90, 0xd7, - 0x1f, 0x58, 0x91, 0xd6, 0x20, 0x67, 0xae, 0xe9, 0x21, 0x66, - 0xaf, 0xe8, 0x22, 0x65, 0xac, 0xeb, 0x23, 0x64, 0xad, 0xea, - 0x24, 0x63, 0xaa, 0xed, 0x25, 0x62, 0xab, 0xec, 0x26, 0x61, - 0xa8, 0xef, 0x27, 0x60, 0xa9, 0xee, 0x28, 0x6f, 0xa6, 0xe1, - 0x29, 0x6e, 0xa7, 0xe0, 0x2a, 0x6d, 0xa4, 0xe3, 0x2b, 0x6c, - 0xa5, 0xe2, 0x2c, 0x6b, 0xa2, 0xe5, 0x2d, 0x6a, 0xa3, 0xe4, - 0x2e, 0x69, 0xa0, 0xe7, 0x2f, 0x68, 0xa1, 0xe6, 0x30, 0x77, - 0xbe, 0xf9, 0x31, 0x76, 0xbf, 0xf8, 0x32, 0x75, 0xbc, 0xfb, - 0x33, 0x74, 0xbd, 0xfa, 0x34, 0x73, 0xba, 0xfd, 0x35, 0x72, - 0xbb, 0xfc, 0x36, 0x71, 0xb8, 0xff, 0x37, 0x70, 0xb9, 0xfe, - 0x38, 0x7f, 0xb6, 0xf1, 0x39, 0x7e, 0xb7, 0xf0, 0x3a, 0x7d, - 0xb4, 0xf3, 0x3b, 0x7c, 0xb5, 0xf2, 0x3c, 0x7b, 0xb2, 0xf5, - 0x3d, 0x7a, 0xb3, 0xf4, 0x3e, 0x79, 0xb0, 0xf7, 0x3f, 0x78, - 0xb1, 0xf6, 0x00, 0x48, 0x90, 0xd8, 0x3d, 0x75, 0xad, 0xe5, - 0x7a, 0x32, 0xea, 0xa2, 0x47, 0x0f, 0xd7, 0x9f, 0xf4, 0xbc, - 0x64, 0x2c, 0xc9, 0x81, 0x59, 0x11, 0x8e, 0xc6, 0x1e, 0x56, - 0xb3, 0xfb, 0x23, 0x6b, 0xf5, 0xbd, 0x65, 0x2d, 0xc8, 0x80, - 0x58, 0x10, 0x8f, 0xc7, 0x1f, 0x57, 0xb2, 0xfa, 0x22, 0x6a, - 0x01, 0x49, 0x91, 0xd9, 0x3c, 0x74, 0xac, 0xe4, 0x7b, 0x33, - 0xeb, 0xa3, 0x46, 0x0e, 0xd6, 0x9e, 0xf7, 0xbf, 0x67, 0x2f, - 0xca, 0x82, 0x5a, 0x12, 0x8d, 0xc5, 0x1d, 0x55, 0xb0, 0xf8, - 0x20, 0x68, 0x03, 0x4b, 0x93, 0xdb, 0x3e, 0x76, 0xae, 0xe6, - 0x79, 0x31, 0xe9, 0xa1, 0x44, 0x0c, 0xd4, 0x9c, 0x02, 0x4a, - 0x92, 0xda, 0x3f, 0x77, 0xaf, 0xe7, 0x78, 0x30, 0xe8, 0xa0, - 0x45, 0x0d, 0xd5, 0x9d, 0xf6, 0xbe, 0x66, 0x2e, 0xcb, 0x83, - 0x5b, 0x13, 0x8c, 0xc4, 0x1c, 0x54, 0xb1, 0xf9, 0x21, 0x69, - 0xf3, 0xbb, 0x63, 0x2b, 0xce, 0x86, 0x5e, 0x16, 0x89, 0xc1, - 0x19, 0x51, 0xb4, 0xfc, 0x24, 0x6c, 0x07, 0x4f, 0x97, 0xdf, - 0x3a, 0x72, 0xaa, 0xe2, 0x7d, 0x35, 0xed, 0xa5, 0x40, 0x08, - 0xd0, 0x98, 0x06, 0x4e, 0x96, 0xde, 0x3b, 0x73, 0xab, 0xe3, - 0x7c, 0x34, 0xec, 0xa4, 0x41, 0x09, 0xd1, 0x99, 0xf2, 0xba, - 0x62, 0x2a, 0xcf, 0x87, 0x5f, 0x17, 0x88, 0xc0, 0x18, 0x50, - 0xb5, 0xfd, 0x25, 0x6d, 0x04, 0x4c, 0x94, 0xdc, 0x39, 0x71, - 0xa9, 0xe1, 0x7e, 0x36, 0xee, 0xa6, 0x43, 0x0b, 0xd3, 0x9b, - 0xf0, 0xb8, 0x60, 0x28, 0xcd, 0x85, 0x5d, 0x15, 0x8a, 0xc2, - 0x1a, 0x52, 0xb7, 0xff, 0x27, 0x6f, 0xf1, 0xb9, 0x61, 0x29, - 0xcc, 0x84, 0x5c, 0x14, 0x8b, 0xc3, 0x1b, 0x53, 0xb6, 0xfe, - 0x26, 0x6e, 0x05, 0x4d, 0x95, 0xdd, 0x38, 0x70, 0xa8, 0xe0, - 0x7f, 0x37, 0xef, 0xa7, 0x42, 0x0a, 0xd2, 0x9a, 0x00, 0x49, - 0x92, 0xdb, 0x39, 0x70, 0xab, 0xe2, 0x72, 0x3b, 0xe0, 0xa9, - 0x4b, 0x02, 0xd9, 0x90, 0xe4, 0xad, 0x76, 0x3f, 0xdd, 0x94, - 0x4f, 0x06, 0x96, 0xdf, 0x04, 0x4d, 0xaf, 0xe6, 0x3d, 0x74, - 0xd5, 0x9c, 0x47, 0x0e, 0xec, 0xa5, 0x7e, 0x37, 0xa7, 0xee, - 0x35, 0x7c, 0x9e, 0xd7, 0x0c, 0x45, 0x31, 0x78, 0xa3, 0xea, - 0x08, 0x41, 0x9a, 0xd3, 0x43, 0x0a, 0xd1, 0x98, 0x7a, 0x33, - 0xe8, 0xa1, 0xb7, 0xfe, 0x25, 0x6c, 0x8e, 0xc7, 0x1c, 0x55, - 0xc5, 0x8c, 0x57, 0x1e, 0xfc, 0xb5, 0x6e, 0x27, 0x53, 0x1a, - 0xc1, 0x88, 0x6a, 0x23, 0xf8, 0xb1, 0x21, 0x68, 0xb3, 0xfa, - 0x18, 0x51, 0x8a, 0xc3, 0x62, 0x2b, 0xf0, 0xb9, 0x5b, 0x12, - 0xc9, 0x80, 0x10, 0x59, 0x82, 0xcb, 0x29, 0x60, 0xbb, 0xf2, - 0x86, 0xcf, 0x14, 0x5d, 0xbf, 0xf6, 0x2d, 0x64, 0xf4, 0xbd, - 0x66, 0x2f, 0xcd, 0x84, 0x5f, 0x16, 0x73, 0x3a, 0xe1, 0xa8, - 0x4a, 0x03, 0xd8, 0x91, 0x01, 0x48, 0x93, 0xda, 0x38, 0x71, - 0xaa, 0xe3, 0x97, 0xde, 0x05, 0x4c, 0xae, 0xe7, 0x3c, 0x75, - 0xe5, 0xac, 0x77, 0x3e, 0xdc, 0x95, 0x4e, 0x07, 0xa6, 0xef, - 0x34, 0x7d, 0x9f, 0xd6, 0x0d, 0x44, 0xd4, 0x9d, 0x46, 0x0f, - 0xed, 0xa4, 0x7f, 0x36, 0x42, 0x0b, 0xd0, 0x99, 0x7b, 0x32, - 0xe9, 0xa0, 0x30, 0x79, 0xa2, 0xeb, 0x09, 0x40, 0x9b, 0xd2, - 0xc4, 0x8d, 0x56, 0x1f, 0xfd, 0xb4, 0x6f, 0x26, 0xb6, 0xff, - 0x24, 0x6d, 0x8f, 0xc6, 0x1d, 0x54, 0x20, 0x69, 0xb2, 0xfb, - 0x19, 0x50, 0x8b, 0xc2, 0x52, 0x1b, 0xc0, 0x89, 0x6b, 0x22, - 0xf9, 0xb0, 0x11, 0x58, 0x83, 0xca, 0x28, 0x61, 0xba, 0xf3, - 0x63, 0x2a, 0xf1, 0xb8, 0x5a, 0x13, 0xc8, 0x81, 0xf5, 0xbc, - 0x67, 0x2e, 0xcc, 0x85, 0x5e, 0x17, 0x87, 0xce, 0x15, 0x5c, - 0xbe, 0xf7, 0x2c, 0x65, 0x00, 0x4a, 0x94, 0xde, 0x35, 0x7f, - 0xa1, 0xeb, 0x6a, 0x20, 0xfe, 0xb4, 0x5f, 0x15, 0xcb, 0x81, - 0xd4, 0x9e, 0x40, 0x0a, 0xe1, 0xab, 0x75, 0x3f, 0xbe, 0xf4, - 0x2a, 0x60, 0x8b, 0xc1, 0x1f, 0x55, 0xb5, 0xff, 0x21, 0x6b, - 0x80, 0xca, 0x14, 0x5e, 0xdf, 0x95, 0x4b, 0x01, 0xea, 0xa0, - 0x7e, 0x34, 0x61, 0x2b, 0xf5, 0xbf, 0x54, 0x1e, 0xc0, 0x8a, - 0x0b, 0x41, 0x9f, 0xd5, 0x3e, 0x74, 0xaa, 0xe0, 0x77, 0x3d, - 0xe3, 0xa9, 0x42, 0x08, 0xd6, 0x9c, 0x1d, 0x57, 0x89, 0xc3, - 0x28, 0x62, 0xbc, 0xf6, 0xa3, 0xe9, 0x37, 0x7d, 0x96, 0xdc, - 0x02, 0x48, 0xc9, 0x83, 0x5d, 0x17, 0xfc, 0xb6, 0x68, 0x22, - 0xc2, 0x88, 0x56, 0x1c, 0xf7, 0xbd, 0x63, 0x29, 0xa8, 0xe2, - 0x3c, 0x76, 0x9d, 0xd7, 0x09, 0x43, 0x16, 0x5c, 0x82, 0xc8, - 0x23, 0x69, 0xb7, 0xfd, 0x7c, 0x36, 0xe8, 0xa2, 0x49, 0x03, - 0xdd, 0x97, 0xee, 0xa4, 0x7a, 0x30, 0xdb, 0x91, 0x4f, 0x05, - 0x84, 0xce, 0x10, 0x5a, 0xb1, 0xfb, 0x25, 0x6f, 0x3a, 0x70, - 0xae, 0xe4, 0x0f, 0x45, 0x9b, 0xd1, 0x50, 0x1a, 0xc4, 0x8e, - 0x65, 0x2f, 0xf1, 0xbb, 0x5b, 0x11, 0xcf, 0x85, 0x6e, 0x24, - 0xfa, 0xb0, 0x31, 0x7b, 0xa5, 0xef, 0x04, 0x4e, 0x90, 0xda, - 0x8f, 0xc5, 0x1b, 0x51, 0xba, 0xf0, 0x2e, 0x64, 0xe5, 0xaf, - 0x71, 0x3b, 0xd0, 0x9a, 0x44, 0x0e, 0x99, 0xd3, 0x0d, 0x47, - 0xac, 0xe6, 0x38, 0x72, 0xf3, 0xb9, 0x67, 0x2d, 0xc6, 0x8c, - 0x52, 0x18, 0x4d, 0x07, 0xd9, 0x93, 0x78, 0x32, 0xec, 0xa6, - 0x27, 0x6d, 0xb3, 0xf9, 0x12, 0x58, 0x86, 0xcc, 0x2c, 0x66, - 0xb8, 0xf2, 0x19, 0x53, 0x8d, 0xc7, 0x46, 0x0c, 0xd2, 0x98, - 0x73, 0x39, 0xe7, 0xad, 0xf8, 0xb2, 0x6c, 0x26, 0xcd, 0x87, - 0x59, 0x13, 0x92, 0xd8, 0x06, 0x4c, 0xa7, 0xed, 0x33, 0x79, - 0x00, 0x4b, 0x96, 0xdd, 0x31, 0x7a, 0xa7, 0xec, 0x62, 0x29, - 0xf4, 0xbf, 0x53, 0x18, 0xc5, 0x8e, 0xc4, 0x8f, 0x52, 0x19, - 0xf5, 0xbe, 0x63, 0x28, 0xa6, 0xed, 0x30, 0x7b, 0x97, 0xdc, - 0x01, 0x4a, 0x95, 0xde, 0x03, 0x48, 0xa4, 0xef, 0x32, 0x79, - 0xf7, 0xbc, 0x61, 0x2a, 0xc6, 0x8d, 0x50, 0x1b, 0x51, 0x1a, - 0xc7, 0x8c, 0x60, 0x2b, 0xf6, 0xbd, 0x33, 0x78, 0xa5, 0xee, - 0x02, 0x49, 0x94, 0xdf, 0x37, 0x7c, 0xa1, 0xea, 0x06, 0x4d, - 0x90, 0xdb, 0x55, 0x1e, 0xc3, 0x88, 0x64, 0x2f, 0xf2, 0xb9, - 0xf3, 0xb8, 0x65, 0x2e, 0xc2, 0x89, 0x54, 0x1f, 0x91, 0xda, - 0x07, 0x4c, 0xa0, 0xeb, 0x36, 0x7d, 0xa2, 0xe9, 0x34, 0x7f, - 0x93, 0xd8, 0x05, 0x4e, 0xc0, 0x8b, 0x56, 0x1d, 0xf1, 0xba, - 0x67, 0x2c, 0x66, 0x2d, 0xf0, 0xbb, 0x57, 0x1c, 0xc1, 0x8a, - 0x04, 0x4f, 0x92, 0xd9, 0x35, 0x7e, 0xa3, 0xe8, 0x6e, 0x25, - 0xf8, 0xb3, 0x5f, 0x14, 0xc9, 0x82, 0x0c, 0x47, 0x9a, 0xd1, - 0x3d, 0x76, 0xab, 0xe0, 0xaa, 0xe1, 0x3c, 0x77, 0x9b, 0xd0, - 0x0d, 0x46, 0xc8, 0x83, 0x5e, 0x15, 0xf9, 0xb2, 0x6f, 0x24, - 0xfb, 0xb0, 0x6d, 0x26, 0xca, 0x81, 0x5c, 0x17, 0x99, 0xd2, - 0x0f, 0x44, 0xa8, 0xe3, 0x3e, 0x75, 0x3f, 0x74, 0xa9, 0xe2, - 0x0e, 0x45, 0x98, 0xd3, 0x5d, 0x16, 0xcb, 0x80, 0x6c, 0x27, - 0xfa, 0xb1, 0x59, 0x12, 0xcf, 0x84, 0x68, 0x23, 0xfe, 0xb5, - 0x3b, 0x70, 0xad, 0xe6, 0x0a, 0x41, 0x9c, 0xd7, 0x9d, 0xd6, - 0x0b, 0x40, 0xac, 0xe7, 0x3a, 0x71, 0xff, 0xb4, 0x69, 0x22, - 0xce, 0x85, 0x58, 0x13, 0xcc, 0x87, 0x5a, 0x11, 0xfd, 0xb6, - 0x6b, 0x20, 0xae, 0xe5, 0x38, 0x73, 0x9f, 0xd4, 0x09, 0x42, - 0x08, 0x43, 0x9e, 0xd5, 0x39, 0x72, 0xaf, 0xe4, 0x6a, 0x21, - 0xfc, 0xb7, 0x5b, 0x10, 0xcd, 0x86, 0x00, 0x4c, 0x98, 0xd4, - 0x2d, 0x61, 0xb5, 0xf9, 0x5a, 0x16, 0xc2, 0x8e, 0x77, 0x3b, - 0xef, 0xa3, 0xb4, 0xf8, 0x2c, 0x60, 0x99, 0xd5, 0x01, 0x4d, - 0xee, 0xa2, 0x76, 0x3a, 0xc3, 0x8f, 0x5b, 0x17, 0x75, 0x39, - 0xed, 0xa1, 0x58, 0x14, 0xc0, 0x8c, 0x2f, 0x63, 0xb7, 0xfb, - 0x02, 0x4e, 0x9a, 0xd6, 0xc1, 0x8d, 0x59, 0x15, 0xec, 0xa0, - 0x74, 0x38, 0x9b, 0xd7, 0x03, 0x4f, 0xb6, 0xfa, 0x2e, 0x62, - 0xea, 0xa6, 0x72, 0x3e, 0xc7, 0x8b, 0x5f, 0x13, 0xb0, 0xfc, - 0x28, 0x64, 0x9d, 0xd1, 0x05, 0x49, 0x5e, 0x12, 0xc6, 0x8a, - 0x73, 0x3f, 0xeb, 0xa7, 0x04, 0x48, 0x9c, 0xd0, 0x29, 0x65, - 0xb1, 0xfd, 0x9f, 0xd3, 0x07, 0x4b, 0xb2, 0xfe, 0x2a, 0x66, - 0xc5, 0x89, 0x5d, 0x11, 0xe8, 0xa4, 0x70, 0x3c, 0x2b, 0x67, - 0xb3, 0xff, 0x06, 0x4a, 0x9e, 0xd2, 0x71, 0x3d, 0xe9, 0xa5, - 0x5c, 0x10, 0xc4, 0x88, 0xc9, 0x85, 0x51, 0x1d, 0xe4, 0xa8, - 0x7c, 0x30, 0x93, 0xdf, 0x0b, 0x47, 0xbe, 0xf2, 0x26, 0x6a, - 0x7d, 0x31, 0xe5, 0xa9, 0x50, 0x1c, 0xc8, 0x84, 0x27, 0x6b, - 0xbf, 0xf3, 0x0a, 0x46, 0x92, 0xde, 0xbc, 0xf0, 0x24, 0x68, - 0x91, 0xdd, 0x09, 0x45, 0xe6, 0xaa, 0x7e, 0x32, 0xcb, 0x87, - 0x53, 0x1f, 0x08, 0x44, 0x90, 0xdc, 0x25, 0x69, 0xbd, 0xf1, - 0x52, 0x1e, 0xca, 0x86, 0x7f, 0x33, 0xe7, 0xab, 0x23, 0x6f, - 0xbb, 0xf7, 0x0e, 0x42, 0x96, 0xda, 0x79, 0x35, 0xe1, 0xad, - 0x54, 0x18, 0xcc, 0x80, 0x97, 0xdb, 0x0f, 0x43, 0xba, 0xf6, - 0x22, 0x6e, 0xcd, 0x81, 0x55, 0x19, 0xe0, 0xac, 0x78, 0x34, - 0x56, 0x1a, 0xce, 0x82, 0x7b, 0x37, 0xe3, 0xaf, 0x0c, 0x40, - 0x94, 0xd8, 0x21, 0x6d, 0xb9, 0xf5, 0xe2, 0xae, 0x7a, 0x36, - 0xcf, 0x83, 0x57, 0x1b, 0xb8, 0xf4, 0x20, 0x6c, 0x95, 0xd9, - 0x0d, 0x41, 0x00, 0x4d, 0x9a, 0xd7, 0x29, 0x64, 0xb3, 0xfe, - 0x52, 0x1f, 0xc8, 0x85, 0x7b, 0x36, 0xe1, 0xac, 0xa4, 0xe9, - 0x3e, 0x73, 0x8d, 0xc0, 0x17, 0x5a, 0xf6, 0xbb, 0x6c, 0x21, - 0xdf, 0x92, 0x45, 0x08, 0x55, 0x18, 0xcf, 0x82, 0x7c, 0x31, - 0xe6, 0xab, 0x07, 0x4a, 0x9d, 0xd0, 0x2e, 0x63, 0xb4, 0xf9, - 0xf1, 0xbc, 0x6b, 0x26, 0xd8, 0x95, 0x42, 0x0f, 0xa3, 0xee, - 0x39, 0x74, 0x8a, 0xc7, 0x10, 0x5d, 0xaa, 0xe7, 0x30, 0x7d, - 0x83, 0xce, 0x19, 0x54, 0xf8, 0xb5, 0x62, 0x2f, 0xd1, 0x9c, - 0x4b, 0x06, 0x0e, 0x43, 0x94, 0xd9, 0x27, 0x6a, 0xbd, 0xf0, - 0x5c, 0x11, 0xc6, 0x8b, 0x75, 0x38, 0xef, 0xa2, 0xff, 0xb2, - 0x65, 0x28, 0xd6, 0x9b, 0x4c, 0x01, 0xad, 0xe0, 0x37, 0x7a, - 0x84, 0xc9, 0x1e, 0x53, 0x5b, 0x16, 0xc1, 0x8c, 0x72, 0x3f, - 0xe8, 0xa5, 0x09, 0x44, 0x93, 0xde, 0x20, 0x6d, 0xba, 0xf7, - 0x49, 0x04, 0xd3, 0x9e, 0x60, 0x2d, 0xfa, 0xb7, 0x1b, 0x56, - 0x81, 0xcc, 0x32, 0x7f, 0xa8, 0xe5, 0xed, 0xa0, 0x77, 0x3a, - 0xc4, 0x89, 0x5e, 0x13, 0xbf, 0xf2, 0x25, 0x68, 0x96, 0xdb, - 0x0c, 0x41, 0x1c, 0x51, 0x86, 0xcb, 0x35, 0x78, 0xaf, 0xe2, - 0x4e, 0x03, 0xd4, 0x99, 0x67, 0x2a, 0xfd, 0xb0, 0xb8, 0xf5, - 0x22, 0x6f, 0x91, 0xdc, 0x0b, 0x46, 0xea, 0xa7, 0x70, 0x3d, - 0xc3, 0x8e, 0x59, 0x14, 0xe3, 0xae, 0x79, 0x34, 0xca, 0x87, - 0x50, 0x1d, 0xb1, 0xfc, 0x2b, 0x66, 0x98, 0xd5, 0x02, 0x4f, - 0x47, 0x0a, 0xdd, 0x90, 0x6e, 0x23, 0xf4, 0xb9, 0x15, 0x58, - 0x8f, 0xc2, 0x3c, 0x71, 0xa6, 0xeb, 0xb6, 0xfb, 0x2c, 0x61, - 0x9f, 0xd2, 0x05, 0x48, 0xe4, 0xa9, 0x7e, 0x33, 0xcd, 0x80, - 0x57, 0x1a, 0x12, 0x5f, 0x88, 0xc5, 0x3b, 0x76, 0xa1, 0xec, - 0x40, 0x0d, 0xda, 0x97, 0x69, 0x24, 0xf3, 0xbe, 0x00, 0x4e, - 0x9c, 0xd2, 0x25, 0x6b, 0xb9, 0xf7, 0x4a, 0x04, 0xd6, 0x98, - 0x6f, 0x21, 0xf3, 0xbd, 0x94, 0xda, 0x08, 0x46, 0xb1, 0xff, - 0x2d, 0x63, 0xde, 0x90, 0x42, 0x0c, 0xfb, 0xb5, 0x67, 0x29, - 0x35, 0x7b, 0xa9, 0xe7, 0x10, 0x5e, 0x8c, 0xc2, 0x7f, 0x31, - 0xe3, 0xad, 0x5a, 0x14, 0xc6, 0x88, 0xa1, 0xef, 0x3d, 0x73, - 0x84, 0xca, 0x18, 0x56, 0xeb, 0xa5, 0x77, 0x39, 0xce, 0x80, - 0x52, 0x1c, 0x6a, 0x24, 0xf6, 0xb8, 0x4f, 0x01, 0xd3, 0x9d, - 0x20, 0x6e, 0xbc, 0xf2, 0x05, 0x4b, 0x99, 0xd7, 0xfe, 0xb0, - 0x62, 0x2c, 0xdb, 0x95, 0x47, 0x09, 0xb4, 0xfa, 0x28, 0x66, - 0x91, 0xdf, 0x0d, 0x43, 0x5f, 0x11, 0xc3, 0x8d, 0x7a, 0x34, - 0xe6, 0xa8, 0x15, 0x5b, 0x89, 0xc7, 0x30, 0x7e, 0xac, 0xe2, - 0xcb, 0x85, 0x57, 0x19, 0xee, 0xa0, 0x72, 0x3c, 0x81, 0xcf, - 0x1d, 0x53, 0xa4, 0xea, 0x38, 0x76, 0xd4, 0x9a, 0x48, 0x06, - 0xf1, 0xbf, 0x6d, 0x23, 0x9e, 0xd0, 0x02, 0x4c, 0xbb, 0xf5, - 0x27, 0x69, 0x40, 0x0e, 0xdc, 0x92, 0x65, 0x2b, 0xf9, 0xb7, - 0x0a, 0x44, 0x96, 0xd8, 0x2f, 0x61, 0xb3, 0xfd, 0xe1, 0xaf, - 0x7d, 0x33, 0xc4, 0x8a, 0x58, 0x16, 0xab, 0xe5, 0x37, 0x79, - 0x8e, 0xc0, 0x12, 0x5c, 0x75, 0x3b, 0xe9, 0xa7, 0x50, 0x1e, - 0xcc, 0x82, 0x3f, 0x71, 0xa3, 0xed, 0x1a, 0x54, 0x86, 0xc8, - 0xbe, 0xf0, 0x22, 0x6c, 0x9b, 0xd5, 0x07, 0x49, 0xf4, 0xba, - 0x68, 0x26, 0xd1, 0x9f, 0x4d, 0x03, 0x2a, 0x64, 0xb6, 0xf8, - 0x0f, 0x41, 0x93, 0xdd, 0x60, 0x2e, 0xfc, 0xb2, 0x45, 0x0b, - 0xd9, 0x97, 0x8b, 0xc5, 0x17, 0x59, 0xae, 0xe0, 0x32, 0x7c, - 0xc1, 0x8f, 0x5d, 0x13, 0xe4, 0xaa, 0x78, 0x36, 0x1f, 0x51, - 0x83, 0xcd, 0x3a, 0x74, 0xa6, 0xe8, 0x55, 0x1b, 0xc9, 0x87, - 0x70, 0x3e, 0xec, 0xa2, 0x00, 0x4f, 0x9e, 0xd1, 0x21, 0x6e, - 0xbf, 0xf0, 0x42, 0x0d, 0xdc, 0x93, 0x63, 0x2c, 0xfd, 0xb2, - 0x84, 0xcb, 0x1a, 0x55, 0xa5, 0xea, 0x3b, 0x74, 0xc6, 0x89, - 0x58, 0x17, 0xe7, 0xa8, 0x79, 0x36, 0x15, 0x5a, 0x8b, 0xc4, - 0x34, 0x7b, 0xaa, 0xe5, 0x57, 0x18, 0xc9, 0x86, 0x76, 0x39, - 0xe8, 0xa7, 0x91, 0xde, 0x0f, 0x40, 0xb0, 0xff, 0x2e, 0x61, - 0xd3, 0x9c, 0x4d, 0x02, 0xf2, 0xbd, 0x6c, 0x23, 0x2a, 0x65, - 0xb4, 0xfb, 0x0b, 0x44, 0x95, 0xda, 0x68, 0x27, 0xf6, 0xb9, - 0x49, 0x06, 0xd7, 0x98, 0xae, 0xe1, 0x30, 0x7f, 0x8f, 0xc0, - 0x11, 0x5e, 0xec, 0xa3, 0x72, 0x3d, 0xcd, 0x82, 0x53, 0x1c, - 0x3f, 0x70, 0xa1, 0xee, 0x1e, 0x51, 0x80, 0xcf, 0x7d, 0x32, - 0xe3, 0xac, 0x5c, 0x13, 0xc2, 0x8d, 0xbb, 0xf4, 0x25, 0x6a, - 0x9a, 0xd5, 0x04, 0x4b, 0xf9, 0xb6, 0x67, 0x28, 0xd8, 0x97, - 0x46, 0x09, 0x54, 0x1b, 0xca, 0x85, 0x75, 0x3a, 0xeb, 0xa4, - 0x16, 0x59, 0x88, 0xc7, 0x37, 0x78, 0xa9, 0xe6, 0xd0, 0x9f, - 0x4e, 0x01, 0xf1, 0xbe, 0x6f, 0x20, 0x92, 0xdd, 0x0c, 0x43, - 0xb3, 0xfc, 0x2d, 0x62, 0x41, 0x0e, 0xdf, 0x90, 0x60, 0x2f, - 0xfe, 0xb1, 0x03, 0x4c, 0x9d, 0xd2, 0x22, 0x6d, 0xbc, 0xf3, - 0xc5, 0x8a, 0x5b, 0x14, 0xe4, 0xab, 0x7a, 0x35, 0x87, 0xc8, - 0x19, 0x56, 0xa6, 0xe9, 0x38, 0x77, 0x7e, 0x31, 0xe0, 0xaf, - 0x5f, 0x10, 0xc1, 0x8e, 0x3c, 0x73, 0xa2, 0xed, 0x1d, 0x52, - 0x83, 0xcc, 0xfa, 0xb5, 0x64, 0x2b, 0xdb, 0x94, 0x45, 0x0a, - 0xb8, 0xf7, 0x26, 0x69, 0x99, 0xd6, 0x07, 0x48, 0x6b, 0x24, - 0xf5, 0xba, 0x4a, 0x05, 0xd4, 0x9b, 0x29, 0x66, 0xb7, 0xf8, - 0x08, 0x47, 0x96, 0xd9, 0xef, 0xa0, 0x71, 0x3e, 0xce, 0x81, - 0x50, 0x1f, 0xad, 0xe2, 0x33, 0x7c, 0x8c, 0xc3, 0x12, 0x5d, - 0x00, 0x50, 0xa0, 0xf0, 0x5d, 0x0d, 0xfd, 0xad, 0xba, 0xea, - 0x1a, 0x4a, 0xe7, 0xb7, 0x47, 0x17, 0x69, 0x39, 0xc9, 0x99, - 0x34, 0x64, 0x94, 0xc4, 0xd3, 0x83, 0x73, 0x23, 0x8e, 0xde, - 0x2e, 0x7e, 0xd2, 0x82, 0x72, 0x22, 0x8f, 0xdf, 0x2f, 0x7f, - 0x68, 0x38, 0xc8, 0x98, 0x35, 0x65, 0x95, 0xc5, 0xbb, 0xeb, - 0x1b, 0x4b, 0xe6, 0xb6, 0x46, 0x16, 0x01, 0x51, 0xa1, 0xf1, - 0x5c, 0x0c, 0xfc, 0xac, 0xb9, 0xe9, 0x19, 0x49, 0xe4, 0xb4, - 0x44, 0x14, 0x03, 0x53, 0xa3, 0xf3, 0x5e, 0x0e, 0xfe, 0xae, - 0xd0, 0x80, 0x70, 0x20, 0x8d, 0xdd, 0x2d, 0x7d, 0x6a, 0x3a, - 0xca, 0x9a, 0x37, 0x67, 0x97, 0xc7, 0x6b, 0x3b, 0xcb, 0x9b, - 0x36, 0x66, 0x96, 0xc6, 0xd1, 0x81, 0x71, 0x21, 0x8c, 0xdc, - 0x2c, 0x7c, 0x02, 0x52, 0xa2, 0xf2, 0x5f, 0x0f, 0xff, 0xaf, - 0xb8, 0xe8, 0x18, 0x48, 0xe5, 0xb5, 0x45, 0x15, 0x6f, 0x3f, - 0xcf, 0x9f, 0x32, 0x62, 0x92, 0xc2, 0xd5, 0x85, 0x75, 0x25, - 0x88, 0xd8, 0x28, 0x78, 0x06, 0x56, 0xa6, 0xf6, 0x5b, 0x0b, - 0xfb, 0xab, 0xbc, 0xec, 0x1c, 0x4c, 0xe1, 0xb1, 0x41, 0x11, - 0xbd, 0xed, 0x1d, 0x4d, 0xe0, 0xb0, 0x40, 0x10, 0x07, 0x57, - 0xa7, 0xf7, 0x5a, 0x0a, 0xfa, 0xaa, 0xd4, 0x84, 0x74, 0x24, - 0x89, 0xd9, 0x29, 0x79, 0x6e, 0x3e, 0xce, 0x9e, 0x33, 0x63, - 0x93, 0xc3, 0xd6, 0x86, 0x76, 0x26, 0x8b, 0xdb, 0x2b, 0x7b, - 0x6c, 0x3c, 0xcc, 0x9c, 0x31, 0x61, 0x91, 0xc1, 0xbf, 0xef, - 0x1f, 0x4f, 0xe2, 0xb2, 0x42, 0x12, 0x05, 0x55, 0xa5, 0xf5, - 0x58, 0x08, 0xf8, 0xa8, 0x04, 0x54, 0xa4, 0xf4, 0x59, 0x09, - 0xf9, 0xa9, 0xbe, 0xee, 0x1e, 0x4e, 0xe3, 0xb3, 0x43, 0x13, - 0x6d, 0x3d, 0xcd, 0x9d, 0x30, 0x60, 0x90, 0xc0, 0xd7, 0x87, - 0x77, 0x27, 0x8a, 0xda, 0x2a, 0x7a, 0x00, 0x51, 0xa2, 0xf3, - 0x59, 0x08, 0xfb, 0xaa, 0xb2, 0xe3, 0x10, 0x41, 0xeb, 0xba, - 0x49, 0x18, 0x79, 0x28, 0xdb, 0x8a, 0x20, 0x71, 0x82, 0xd3, - 0xcb, 0x9a, 0x69, 0x38, 0x92, 0xc3, 0x30, 0x61, 0xf2, 0xa3, - 0x50, 0x01, 0xab, 0xfa, 0x09, 0x58, 0x40, 0x11, 0xe2, 0xb3, - 0x19, 0x48, 0xbb, 0xea, 0x8b, 0xda, 0x29, 0x78, 0xd2, 0x83, - 0x70, 0x21, 0x39, 0x68, 0x9b, 0xca, 0x60, 0x31, 0xc2, 0x93, - 0xf9, 0xa8, 0x5b, 0x0a, 0xa0, 0xf1, 0x02, 0x53, 0x4b, 0x1a, - 0xe9, 0xb8, 0x12, 0x43, 0xb0, 0xe1, 0x80, 0xd1, 0x22, 0x73, - 0xd9, 0x88, 0x7b, 0x2a, 0x32, 0x63, 0x90, 0xc1, 0x6b, 0x3a, - 0xc9, 0x98, 0x0b, 0x5a, 0xa9, 0xf8, 0x52, 0x03, 0xf0, 0xa1, - 0xb9, 0xe8, 0x1b, 0x4a, 0xe0, 0xb1, 0x42, 0x13, 0x72, 0x23, - 0xd0, 0x81, 0x2b, 0x7a, 0x89, 0xd8, 0xc0, 0x91, 0x62, 0x33, - 0x99, 0xc8, 0x3b, 0x6a, 0xef, 0xbe, 0x4d, 0x1c, 0xb6, 0xe7, - 0x14, 0x45, 0x5d, 0x0c, 0xff, 0xae, 0x04, 0x55, 0xa6, 0xf7, - 0x96, 0xc7, 0x34, 0x65, 0xcf, 0x9e, 0x6d, 0x3c, 0x24, 0x75, - 0x86, 0xd7, 0x7d, 0x2c, 0xdf, 0x8e, 0x1d, 0x4c, 0xbf, 0xee, - 0x44, 0x15, 0xe6, 0xb7, 0xaf, 0xfe, 0x0d, 0x5c, 0xf6, 0xa7, - 0x54, 0x05, 0x64, 0x35, 0xc6, 0x97, 0x3d, 0x6c, 0x9f, 0xce, - 0xd6, 0x87, 0x74, 0x25, 0x8f, 0xde, 0x2d, 0x7c, 0x16, 0x47, - 0xb4, 0xe5, 0x4f, 0x1e, 0xed, 0xbc, 0xa4, 0xf5, 0x06, 0x57, - 0xfd, 0xac, 0x5f, 0x0e, 0x6f, 0x3e, 0xcd, 0x9c, 0x36, 0x67, - 0x94, 0xc5, 0xdd, 0x8c, 0x7f, 0x2e, 0x84, 0xd5, 0x26, 0x77, - 0xe4, 0xb5, 0x46, 0x17, 0xbd, 0xec, 0x1f, 0x4e, 0x56, 0x07, - 0xf4, 0xa5, 0x0f, 0x5e, 0xad, 0xfc, 0x9d, 0xcc, 0x3f, 0x6e, - 0xc4, 0x95, 0x66, 0x37, 0x2f, 0x7e, 0x8d, 0xdc, 0x76, 0x27, - 0xd4, 0x85, 0x00, 0x52, 0xa4, 0xf6, 0x55, 0x07, 0xf1, 0xa3, - 0xaa, 0xf8, 0x0e, 0x5c, 0xff, 0xad, 0x5b, 0x09, 0x49, 0x1b, - 0xed, 0xbf, 0x1c, 0x4e, 0xb8, 0xea, 0xe3, 0xb1, 0x47, 0x15, - 0xb6, 0xe4, 0x12, 0x40, 0x92, 0xc0, 0x36, 0x64, 0xc7, 0x95, - 0x63, 0x31, 0x38, 0x6a, 0x9c, 0xce, 0x6d, 0x3f, 0xc9, 0x9b, - 0xdb, 0x89, 0x7f, 0x2d, 0x8e, 0xdc, 0x2a, 0x78, 0x71, 0x23, - 0xd5, 0x87, 0x24, 0x76, 0x80, 0xd2, 0x39, 0x6b, 0x9d, 0xcf, - 0x6c, 0x3e, 0xc8, 0x9a, 0x93, 0xc1, 0x37, 0x65, 0xc6, 0x94, - 0x62, 0x30, 0x70, 0x22, 0xd4, 0x86, 0x25, 0x77, 0x81, 0xd3, - 0xda, 0x88, 0x7e, 0x2c, 0x8f, 0xdd, 0x2b, 0x79, 0xab, 0xf9, - 0x0f, 0x5d, 0xfe, 0xac, 0x5a, 0x08, 0x01, 0x53, 0xa5, 0xf7, - 0x54, 0x06, 0xf0, 0xa2, 0xe2, 0xb0, 0x46, 0x14, 0xb7, 0xe5, - 0x13, 0x41, 0x48, 0x1a, 0xec, 0xbe, 0x1d, 0x4f, 0xb9, 0xeb, - 0x72, 0x20, 0xd6, 0x84, 0x27, 0x75, 0x83, 0xd1, 0xd8, 0x8a, - 0x7c, 0x2e, 0x8d, 0xdf, 0x29, 0x7b, 0x3b, 0x69, 0x9f, 0xcd, - 0x6e, 0x3c, 0xca, 0x98, 0x91, 0xc3, 0x35, 0x67, 0xc4, 0x96, - 0x60, 0x32, 0xe0, 0xb2, 0x44, 0x16, 0xb5, 0xe7, 0x11, 0x43, - 0x4a, 0x18, 0xee, 0xbc, 0x1f, 0x4d, 0xbb, 0xe9, 0xa9, 0xfb, - 0x0d, 0x5f, 0xfc, 0xae, 0x58, 0x0a, 0x03, 0x51, 0xa7, 0xf5, - 0x56, 0x04, 0xf2, 0xa0, 0x4b, 0x19, 0xef, 0xbd, 0x1e, 0x4c, - 0xba, 0xe8, 0xe1, 0xb3, 0x45, 0x17, 0xb4, 0xe6, 0x10, 0x42, - 0x02, 0x50, 0xa6, 0xf4, 0x57, 0x05, 0xf3, 0xa1, 0xa8, 0xfa, - 0x0c, 0x5e, 0xfd, 0xaf, 0x59, 0x0b, 0xd9, 0x8b, 0x7d, 0x2f, - 0x8c, 0xde, 0x28, 0x7a, 0x73, 0x21, 0xd7, 0x85, 0x26, 0x74, - 0x82, 0xd0, 0x90, 0xc2, 0x34, 0x66, 0xc5, 0x97, 0x61, 0x33, - 0x3a, 0x68, 0x9e, 0xcc, 0x6f, 0x3d, 0xcb, 0x99, 0x00, 0x53, - 0xa6, 0xf5, 0x51, 0x02, 0xf7, 0xa4, 0xa2, 0xf1, 0x04, 0x57, - 0xf3, 0xa0, 0x55, 0x06, 0x59, 0x0a, 0xff, 0xac, 0x08, 0x5b, - 0xae, 0xfd, 0xfb, 0xa8, 0x5d, 0x0e, 0xaa, 0xf9, 0x0c, 0x5f, - 0xb2, 0xe1, 0x14, 0x47, 0xe3, 0xb0, 0x45, 0x16, 0x10, 0x43, - 0xb6, 0xe5, 0x41, 0x12, 0xe7, 0xb4, 0xeb, 0xb8, 0x4d, 0x1e, - 0xba, 0xe9, 0x1c, 0x4f, 0x49, 0x1a, 0xef, 0xbc, 0x18, 0x4b, - 0xbe, 0xed, 0x79, 0x2a, 0xdf, 0x8c, 0x28, 0x7b, 0x8e, 0xdd, - 0xdb, 0x88, 0x7d, 0x2e, 0x8a, 0xd9, 0x2c, 0x7f, 0x20, 0x73, - 0x86, 0xd5, 0x71, 0x22, 0xd7, 0x84, 0x82, 0xd1, 0x24, 0x77, - 0xd3, 0x80, 0x75, 0x26, 0xcb, 0x98, 0x6d, 0x3e, 0x9a, 0xc9, - 0x3c, 0x6f, 0x69, 0x3a, 0xcf, 0x9c, 0x38, 0x6b, 0x9e, 0xcd, - 0x92, 0xc1, 0x34, 0x67, 0xc3, 0x90, 0x65, 0x36, 0x30, 0x63, - 0x96, 0xc5, 0x61, 0x32, 0xc7, 0x94, 0xf2, 0xa1, 0x54, 0x07, - 0xa3, 0xf0, 0x05, 0x56, 0x50, 0x03, 0xf6, 0xa5, 0x01, 0x52, - 0xa7, 0xf4, 0xab, 0xf8, 0x0d, 0x5e, 0xfa, 0xa9, 0x5c, 0x0f, - 0x09, 0x5a, 0xaf, 0xfc, 0x58, 0x0b, 0xfe, 0xad, 0x40, 0x13, - 0xe6, 0xb5, 0x11, 0x42, 0xb7, 0xe4, 0xe2, 0xb1, 0x44, 0x17, - 0xb3, 0xe0, 0x15, 0x46, 0x19, 0x4a, 0xbf, 0xec, 0x48, 0x1b, - 0xee, 0xbd, 0xbb, 0xe8, 0x1d, 0x4e, 0xea, 0xb9, 0x4c, 0x1f, - 0x8b, 0xd8, 0x2d, 0x7e, 0xda, 0x89, 0x7c, 0x2f, 0x29, 0x7a, - 0x8f, 0xdc, 0x78, 0x2b, 0xde, 0x8d, 0xd2, 0x81, 0x74, 0x27, - 0x83, 0xd0, 0x25, 0x76, 0x70, 0x23, 0xd6, 0x85, 0x21, 0x72, - 0x87, 0xd4, 0x39, 0x6a, 0x9f, 0xcc, 0x68, 0x3b, 0xce, 0x9d, - 0x9b, 0xc8, 0x3d, 0x6e, 0xca, 0x99, 0x6c, 0x3f, 0x60, 0x33, - 0xc6, 0x95, 0x31, 0x62, 0x97, 0xc4, 0xc2, 0x91, 0x64, 0x37, - 0x93, 0xc0, 0x35, 0x66, 0x00, 0x54, 0xa8, 0xfc, 0x4d, 0x19, - 0xe5, 0xb1, 0x9a, 0xce, 0x32, 0x66, 0xd7, 0x83, 0x7f, 0x2b, - 0x29, 0x7d, 0x81, 0xd5, 0x64, 0x30, 0xcc, 0x98, 0xb3, 0xe7, - 0x1b, 0x4f, 0xfe, 0xaa, 0x56, 0x02, 0x52, 0x06, 0xfa, 0xae, - 0x1f, 0x4b, 0xb7, 0xe3, 0xc8, 0x9c, 0x60, 0x34, 0x85, 0xd1, - 0x2d, 0x79, 0x7b, 0x2f, 0xd3, 0x87, 0x36, 0x62, 0x9e, 0xca, - 0xe1, 0xb5, 0x49, 0x1d, 0xac, 0xf8, 0x04, 0x50, 0xa4, 0xf0, - 0x0c, 0x58, 0xe9, 0xbd, 0x41, 0x15, 0x3e, 0x6a, 0x96, 0xc2, - 0x73, 0x27, 0xdb, 0x8f, 0x8d, 0xd9, 0x25, 0x71, 0xc0, 0x94, - 0x68, 0x3c, 0x17, 0x43, 0xbf, 0xeb, 0x5a, 0x0e, 0xf2, 0xa6, - 0xf6, 0xa2, 0x5e, 0x0a, 0xbb, 0xef, 0x13, 0x47, 0x6c, 0x38, - 0xc4, 0x90, 0x21, 0x75, 0x89, 0xdd, 0xdf, 0x8b, 0x77, 0x23, - 0x92, 0xc6, 0x3a, 0x6e, 0x45, 0x11, 0xed, 0xb9, 0x08, 0x5c, - 0xa0, 0xf4, 0x55, 0x01, 0xfd, 0xa9, 0x18, 0x4c, 0xb0, 0xe4, - 0xcf, 0x9b, 0x67, 0x33, 0x82, 0xd6, 0x2a, 0x7e, 0x7c, 0x28, - 0xd4, 0x80, 0x31, 0x65, 0x99, 0xcd, 0xe6, 0xb2, 0x4e, 0x1a, - 0xab, 0xff, 0x03, 0x57, 0x07, 0x53, 0xaf, 0xfb, 0x4a, 0x1e, - 0xe2, 0xb6, 0x9d, 0xc9, 0x35, 0x61, 0xd0, 0x84, 0x78, 0x2c, - 0x2e, 0x7a, 0x86, 0xd2, 0x63, 0x37, 0xcb, 0x9f, 0xb4, 0xe0, - 0x1c, 0x48, 0xf9, 0xad, 0x51, 0x05, 0xf1, 0xa5, 0x59, 0x0d, - 0xbc, 0xe8, 0x14, 0x40, 0x6b, 0x3f, 0xc3, 0x97, 0x26, 0x72, - 0x8e, 0xda, 0xd8, 0x8c, 0x70, 0x24, 0x95, 0xc1, 0x3d, 0x69, - 0x42, 0x16, 0xea, 0xbe, 0x0f, 0x5b, 0xa7, 0xf3, 0xa3, 0xf7, - 0x0b, 0x5f, 0xee, 0xba, 0x46, 0x12, 0x39, 0x6d, 0x91, 0xc5, - 0x74, 0x20, 0xdc, 0x88, 0x8a, 0xde, 0x22, 0x76, 0xc7, 0x93, - 0x6f, 0x3b, 0x10, 0x44, 0xb8, 0xec, 0x5d, 0x09, 0xf5, 0xa1, - 0x00, 0x55, 0xaa, 0xff, 0x49, 0x1c, 0xe3, 0xb6, 0x92, 0xc7, - 0x38, 0x6d, 0xdb, 0x8e, 0x71, 0x24, 0x39, 0x6c, 0x93, 0xc6, - 0x70, 0x25, 0xda, 0x8f, 0xab, 0xfe, 0x01, 0x54, 0xe2, 0xb7, - 0x48, 0x1d, 0x72, 0x27, 0xd8, 0x8d, 0x3b, 0x6e, 0x91, 0xc4, - 0xe0, 0xb5, 0x4a, 0x1f, 0xa9, 0xfc, 0x03, 0x56, 0x4b, 0x1e, - 0xe1, 0xb4, 0x02, 0x57, 0xa8, 0xfd, 0xd9, 0x8c, 0x73, 0x26, - 0x90, 0xc5, 0x3a, 0x6f, 0xe4, 0xb1, 0x4e, 0x1b, 0xad, 0xf8, - 0x07, 0x52, 0x76, 0x23, 0xdc, 0x89, 0x3f, 0x6a, 0x95, 0xc0, - 0xdd, 0x88, 0x77, 0x22, 0x94, 0xc1, 0x3e, 0x6b, 0x4f, 0x1a, - 0xe5, 0xb0, 0x06, 0x53, 0xac, 0xf9, 0x96, 0xc3, 0x3c, 0x69, - 0xdf, 0x8a, 0x75, 0x20, 0x04, 0x51, 0xae, 0xfb, 0x4d, 0x18, - 0xe7, 0xb2, 0xaf, 0xfa, 0x05, 0x50, 0xe6, 0xb3, 0x4c, 0x19, - 0x3d, 0x68, 0x97, 0xc2, 0x74, 0x21, 0xde, 0x8b, 0xd5, 0x80, - 0x7f, 0x2a, 0x9c, 0xc9, 0x36, 0x63, 0x47, 0x12, 0xed, 0xb8, - 0x0e, 0x5b, 0xa4, 0xf1, 0xec, 0xb9, 0x46, 0x13, 0xa5, 0xf0, - 0x0f, 0x5a, 0x7e, 0x2b, 0xd4, 0x81, 0x37, 0x62, 0x9d, 0xc8, - 0xa7, 0xf2, 0x0d, 0x58, 0xee, 0xbb, 0x44, 0x11, 0x35, 0x60, - 0x9f, 0xca, 0x7c, 0x29, 0xd6, 0x83, 0x9e, 0xcb, 0x34, 0x61, - 0xd7, 0x82, 0x7d, 0x28, 0x0c, 0x59, 0xa6, 0xf3, 0x45, 0x10, - 0xef, 0xba, 0x31, 0x64, 0x9b, 0xce, 0x78, 0x2d, 0xd2, 0x87, - 0xa3, 0xf6, 0x09, 0x5c, 0xea, 0xbf, 0x40, 0x15, 0x08, 0x5d, - 0xa2, 0xf7, 0x41, 0x14, 0xeb, 0xbe, 0x9a, 0xcf, 0x30, 0x65, - 0xd3, 0x86, 0x79, 0x2c, 0x43, 0x16, 0xe9, 0xbc, 0x0a, 0x5f, - 0xa0, 0xf5, 0xd1, 0x84, 0x7b, 0x2e, 0x98, 0xcd, 0x32, 0x67, - 0x7a, 0x2f, 0xd0, 0x85, 0x33, 0x66, 0x99, 0xcc, 0xe8, 0xbd, - 0x42, 0x17, 0xa1, 0xf4, 0x0b, 0x5e, 0x00, 0x56, 0xac, 0xfa, - 0x45, 0x13, 0xe9, 0xbf, 0x8a, 0xdc, 0x26, 0x70, 0xcf, 0x99, - 0x63, 0x35, 0x09, 0x5f, 0xa5, 0xf3, 0x4c, 0x1a, 0xe0, 0xb6, - 0x83, 0xd5, 0x2f, 0x79, 0xc6, 0x90, 0x6a, 0x3c, 0x12, 0x44, - 0xbe, 0xe8, 0x57, 0x01, 0xfb, 0xad, 0x98, 0xce, 0x34, 0x62, - 0xdd, 0x8b, 0x71, 0x27, 0x1b, 0x4d, 0xb7, 0xe1, 0x5e, 0x08, - 0xf2, 0xa4, 0x91, 0xc7, 0x3d, 0x6b, 0xd4, 0x82, 0x78, 0x2e, - 0x24, 0x72, 0x88, 0xde, 0x61, 0x37, 0xcd, 0x9b, 0xae, 0xf8, - 0x02, 0x54, 0xeb, 0xbd, 0x47, 0x11, 0x2d, 0x7b, 0x81, 0xd7, - 0x68, 0x3e, 0xc4, 0x92, 0xa7, 0xf1, 0x0b, 0x5d, 0xe2, 0xb4, - 0x4e, 0x18, 0x36, 0x60, 0x9a, 0xcc, 0x73, 0x25, 0xdf, 0x89, - 0xbc, 0xea, 0x10, 0x46, 0xf9, 0xaf, 0x55, 0x03, 0x3f, 0x69, - 0x93, 0xc5, 0x7a, 0x2c, 0xd6, 0x80, 0xb5, 0xe3, 0x19, 0x4f, - 0xf0, 0xa6, 0x5c, 0x0a, 0x48, 0x1e, 0xe4, 0xb2, 0x0d, 0x5b, - 0xa1, 0xf7, 0xc2, 0x94, 0x6e, 0x38, 0x87, 0xd1, 0x2b, 0x7d, - 0x41, 0x17, 0xed, 0xbb, 0x04, 0x52, 0xa8, 0xfe, 0xcb, 0x9d, - 0x67, 0x31, 0x8e, 0xd8, 0x22, 0x74, 0x5a, 0x0c, 0xf6, 0xa0, - 0x1f, 0x49, 0xb3, 0xe5, 0xd0, 0x86, 0x7c, 0x2a, 0x95, 0xc3, - 0x39, 0x6f, 0x53, 0x05, 0xff, 0xa9, 0x16, 0x40, 0xba, 0xec, - 0xd9, 0x8f, 0x75, 0x23, 0x9c, 0xca, 0x30, 0x66, 0x6c, 0x3a, - 0xc0, 0x96, 0x29, 0x7f, 0x85, 0xd3, 0xe6, 0xb0, 0x4a, 0x1c, - 0xa3, 0xf5, 0x0f, 0x59, 0x65, 0x33, 0xc9, 0x9f, 0x20, 0x76, - 0x8c, 0xda, 0xef, 0xb9, 0x43, 0x15, 0xaa, 0xfc, 0x06, 0x50, - 0x7e, 0x28, 0xd2, 0x84, 0x3b, 0x6d, 0x97, 0xc1, 0xf4, 0xa2, - 0x58, 0x0e, 0xb1, 0xe7, 0x1d, 0x4b, 0x77, 0x21, 0xdb, 0x8d, - 0x32, 0x64, 0x9e, 0xc8, 0xfd, 0xab, 0x51, 0x07, 0xb8, 0xee, - 0x14, 0x42, 0x00, 0x57, 0xae, 0xf9, 0x41, 0x16, 0xef, 0xb8, - 0x82, 0xd5, 0x2c, 0x7b, 0xc3, 0x94, 0x6d, 0x3a, 0x19, 0x4e, - 0xb7, 0xe0, 0x58, 0x0f, 0xf6, 0xa1, 0x9b, 0xcc, 0x35, 0x62, - 0xda, 0x8d, 0x74, 0x23, 0x32, 0x65, 0x9c, 0xcb, 0x73, 0x24, - 0xdd, 0x8a, 0xb0, 0xe7, 0x1e, 0x49, 0xf1, 0xa6, 0x5f, 0x08, - 0x2b, 0x7c, 0x85, 0xd2, 0x6a, 0x3d, 0xc4, 0x93, 0xa9, 0xfe, - 0x07, 0x50, 0xe8, 0xbf, 0x46, 0x11, 0x64, 0x33, 0xca, 0x9d, - 0x25, 0x72, 0x8b, 0xdc, 0xe6, 0xb1, 0x48, 0x1f, 0xa7, 0xf0, - 0x09, 0x5e, 0x7d, 0x2a, 0xd3, 0x84, 0x3c, 0x6b, 0x92, 0xc5, - 0xff, 0xa8, 0x51, 0x06, 0xbe, 0xe9, 0x10, 0x47, 0x56, 0x01, - 0xf8, 0xaf, 0x17, 0x40, 0xb9, 0xee, 0xd4, 0x83, 0x7a, 0x2d, - 0x95, 0xc2, 0x3b, 0x6c, 0x4f, 0x18, 0xe1, 0xb6, 0x0e, 0x59, - 0xa0, 0xf7, 0xcd, 0x9a, 0x63, 0x34, 0x8c, 0xdb, 0x22, 0x75, - 0xc8, 0x9f, 0x66, 0x31, 0x89, 0xde, 0x27, 0x70, 0x4a, 0x1d, - 0xe4, 0xb3, 0x0b, 0x5c, 0xa5, 0xf2, 0xd1, 0x86, 0x7f, 0x28, - 0x90, 0xc7, 0x3e, 0x69, 0x53, 0x04, 0xfd, 0xaa, 0x12, 0x45, - 0xbc, 0xeb, 0xfa, 0xad, 0x54, 0x03, 0xbb, 0xec, 0x15, 0x42, - 0x78, 0x2f, 0xd6, 0x81, 0x39, 0x6e, 0x97, 0xc0, 0xe3, 0xb4, - 0x4d, 0x1a, 0xa2, 0xf5, 0x0c, 0x5b, 0x61, 0x36, 0xcf, 0x98, - 0x20, 0x77, 0x8e, 0xd9, 0xac, 0xfb, 0x02, 0x55, 0xed, 0xba, - 0x43, 0x14, 0x2e, 0x79, 0x80, 0xd7, 0x6f, 0x38, 0xc1, 0x96, - 0xb5, 0xe2, 0x1b, 0x4c, 0xf4, 0xa3, 0x5a, 0x0d, 0x37, 0x60, - 0x99, 0xce, 0x76, 0x21, 0xd8, 0x8f, 0x9e, 0xc9, 0x30, 0x67, - 0xdf, 0x88, 0x71, 0x26, 0x1c, 0x4b, 0xb2, 0xe5, 0x5d, 0x0a, - 0xf3, 0xa4, 0x87, 0xd0, 0x29, 0x7e, 0xc6, 0x91, 0x68, 0x3f, - 0x05, 0x52, 0xab, 0xfc, 0x44, 0x13, 0xea, 0xbd, 0x00, 0x58, - 0xb0, 0xe8, 0x7d, 0x25, 0xcd, 0x95, 0xfa, 0xa2, 0x4a, 0x12, - 0x87, 0xdf, 0x37, 0x6f, 0xe9, 0xb1, 0x59, 0x01, 0x94, 0xcc, - 0x24, 0x7c, 0x13, 0x4b, 0xa3, 0xfb, 0x6e, 0x36, 0xde, 0x86, - 0xcf, 0x97, 0x7f, 0x27, 0xb2, 0xea, 0x02, 0x5a, 0x35, 0x6d, - 0x85, 0xdd, 0x48, 0x10, 0xf8, 0xa0, 0x26, 0x7e, 0x96, 0xce, - 0x5b, 0x03, 0xeb, 0xb3, 0xdc, 0x84, 0x6c, 0x34, 0xa1, 0xf9, - 0x11, 0x49, 0x83, 0xdb, 0x33, 0x6b, 0xfe, 0xa6, 0x4e, 0x16, - 0x79, 0x21, 0xc9, 0x91, 0x04, 0x5c, 0xb4, 0xec, 0x6a, 0x32, - 0xda, 0x82, 0x17, 0x4f, 0xa7, 0xff, 0x90, 0xc8, 0x20, 0x78, - 0xed, 0xb5, 0x5d, 0x05, 0x4c, 0x14, 0xfc, 0xa4, 0x31, 0x69, - 0x81, 0xd9, 0xb6, 0xee, 0x06, 0x5e, 0xcb, 0x93, 0x7b, 0x23, - 0xa5, 0xfd, 0x15, 0x4d, 0xd8, 0x80, 0x68, 0x30, 0x5f, 0x07, - 0xef, 0xb7, 0x22, 0x7a, 0x92, 0xca, 0x1b, 0x43, 0xab, 0xf3, - 0x66, 0x3e, 0xd6, 0x8e, 0xe1, 0xb9, 0x51, 0x09, 0x9c, 0xc4, - 0x2c, 0x74, 0xf2, 0xaa, 0x42, 0x1a, 0x8f, 0xd7, 0x3f, 0x67, - 0x08, 0x50, 0xb8, 0xe0, 0x75, 0x2d, 0xc5, 0x9d, 0xd4, 0x8c, - 0x64, 0x3c, 0xa9, 0xf1, 0x19, 0x41, 0x2e, 0x76, 0x9e, 0xc6, - 0x53, 0x0b, 0xe3, 0xbb, 0x3d, 0x65, 0x8d, 0xd5, 0x40, 0x18, - 0xf0, 0xa8, 0xc7, 0x9f, 0x77, 0x2f, 0xba, 0xe2, 0x0a, 0x52, - 0x98, 0xc0, 0x28, 0x70, 0xe5, 0xbd, 0x55, 0x0d, 0x62, 0x3a, - 0xd2, 0x8a, 0x1f, 0x47, 0xaf, 0xf7, 0x71, 0x29, 0xc1, 0x99, - 0x0c, 0x54, 0xbc, 0xe4, 0x8b, 0xd3, 0x3b, 0x63, 0xf6, 0xae, - 0x46, 0x1e, 0x57, 0x0f, 0xe7, 0xbf, 0x2a, 0x72, 0x9a, 0xc2, - 0xad, 0xf5, 0x1d, 0x45, 0xd0, 0x88, 0x60, 0x38, 0xbe, 0xe6, - 0x0e, 0x56, 0xc3, 0x9b, 0x73, 0x2b, 0x44, 0x1c, 0xf4, 0xac, - 0x39, 0x61, 0x89, 0xd1, 0x00, 0x59, 0xb2, 0xeb, 0x79, 0x20, - 0xcb, 0x92, 0xf2, 0xab, 0x40, 0x19, 0x8b, 0xd2, 0x39, 0x60, - 0xf9, 0xa0, 0x4b, 0x12, 0x80, 0xd9, 0x32, 0x6b, 0x0b, 0x52, - 0xb9, 0xe0, 0x72, 0x2b, 0xc0, 0x99, 0xef, 0xb6, 0x5d, 0x04, - 0x96, 0xcf, 0x24, 0x7d, 0x1d, 0x44, 0xaf, 0xf6, 0x64, 0x3d, - 0xd6, 0x8f, 0x16, 0x4f, 0xa4, 0xfd, 0x6f, 0x36, 0xdd, 0x84, - 0xe4, 0xbd, 0x56, 0x0f, 0x9d, 0xc4, 0x2f, 0x76, 0xc3, 0x9a, - 0x71, 0x28, 0xba, 0xe3, 0x08, 0x51, 0x31, 0x68, 0x83, 0xda, - 0x48, 0x11, 0xfa, 0xa3, 0x3a, 0x63, 0x88, 0xd1, 0x43, 0x1a, - 0xf1, 0xa8, 0xc8, 0x91, 0x7a, 0x23, 0xb1, 0xe8, 0x03, 0x5a, - 0x2c, 0x75, 0x9e, 0xc7, 0x55, 0x0c, 0xe7, 0xbe, 0xde, 0x87, - 0x6c, 0x35, 0xa7, 0xfe, 0x15, 0x4c, 0xd5, 0x8c, 0x67, 0x3e, - 0xac, 0xf5, 0x1e, 0x47, 0x27, 0x7e, 0x95, 0xcc, 0x5e, 0x07, - 0xec, 0xb5, 0x9b, 0xc2, 0x29, 0x70, 0xe2, 0xbb, 0x50, 0x09, - 0x69, 0x30, 0xdb, 0x82, 0x10, 0x49, 0xa2, 0xfb, 0x62, 0x3b, - 0xd0, 0x89, 0x1b, 0x42, 0xa9, 0xf0, 0x90, 0xc9, 0x22, 0x7b, - 0xe9, 0xb0, 0x5b, 0x02, 0x74, 0x2d, 0xc6, 0x9f, 0x0d, 0x54, - 0xbf, 0xe6, 0x86, 0xdf, 0x34, 0x6d, 0xff, 0xa6, 0x4d, 0x14, - 0x8d, 0xd4, 0x3f, 0x66, 0xf4, 0xad, 0x46, 0x1f, 0x7f, 0x26, - 0xcd, 0x94, 0x06, 0x5f, 0xb4, 0xed, 0x58, 0x01, 0xea, 0xb3, - 0x21, 0x78, 0x93, 0xca, 0xaa, 0xf3, 0x18, 0x41, 0xd3, 0x8a, - 0x61, 0x38, 0xa1, 0xf8, 0x13, 0x4a, 0xd8, 0x81, 0x6a, 0x33, - 0x53, 0x0a, 0xe1, 0xb8, 0x2a, 0x73, 0x98, 0xc1, 0xb7, 0xee, - 0x05, 0x5c, 0xce, 0x97, 0x7c, 0x25, 0x45, 0x1c, 0xf7, 0xae, - 0x3c, 0x65, 0x8e, 0xd7, 0x4e, 0x17, 0xfc, 0xa5, 0x37, 0x6e, - 0x85, 0xdc, 0xbc, 0xe5, 0x0e, 0x57, 0xc5, 0x9c, 0x77, 0x2e, - 0x00, 0x5a, 0xb4, 0xee, 0x75, 0x2f, 0xc1, 0x9b, 0xea, 0xb0, - 0x5e, 0x04, 0x9f, 0xc5, 0x2b, 0x71, 0xc9, 0x93, 0x7d, 0x27, - 0xbc, 0xe6, 0x08, 0x52, 0x23, 0x79, 0x97, 0xcd, 0x56, 0x0c, - 0xe2, 0xb8, 0x8f, 0xd5, 0x3b, 0x61, 0xfa, 0xa0, 0x4e, 0x14, - 0x65, 0x3f, 0xd1, 0x8b, 0x10, 0x4a, 0xa4, 0xfe, 0x46, 0x1c, - 0xf2, 0xa8, 0x33, 0x69, 0x87, 0xdd, 0xac, 0xf6, 0x18, 0x42, - 0xd9, 0x83, 0x6d, 0x37, 0x03, 0x59, 0xb7, 0xed, 0x76, 0x2c, - 0xc2, 0x98, 0xe9, 0xb3, 0x5d, 0x07, 0x9c, 0xc6, 0x28, 0x72, - 0xca, 0x90, 0x7e, 0x24, 0xbf, 0xe5, 0x0b, 0x51, 0x20, 0x7a, - 0x94, 0xce, 0x55, 0x0f, 0xe1, 0xbb, 0x8c, 0xd6, 0x38, 0x62, - 0xf9, 0xa3, 0x4d, 0x17, 0x66, 0x3c, 0xd2, 0x88, 0x13, 0x49, - 0xa7, 0xfd, 0x45, 0x1f, 0xf1, 0xab, 0x30, 0x6a, 0x84, 0xde, - 0xaf, 0xf5, 0x1b, 0x41, 0xda, 0x80, 0x6e, 0x34, 0x06, 0x5c, - 0xb2, 0xe8, 0x73, 0x29, 0xc7, 0x9d, 0xec, 0xb6, 0x58, 0x02, - 0x99, 0xc3, 0x2d, 0x77, 0xcf, 0x95, 0x7b, 0x21, 0xba, 0xe0, - 0x0e, 0x54, 0x25, 0x7f, 0x91, 0xcb, 0x50, 0x0a, 0xe4, 0xbe, - 0x89, 0xd3, 0x3d, 0x67, 0xfc, 0xa6, 0x48, 0x12, 0x63, 0x39, - 0xd7, 0x8d, 0x16, 0x4c, 0xa2, 0xf8, 0x40, 0x1a, 0xf4, 0xae, - 0x35, 0x6f, 0x81, 0xdb, 0xaa, 0xf0, 0x1e, 0x44, 0xdf, 0x85, - 0x6b, 0x31, 0x05, 0x5f, 0xb1, 0xeb, 0x70, 0x2a, 0xc4, 0x9e, - 0xef, 0xb5, 0x5b, 0x01, 0x9a, 0xc0, 0x2e, 0x74, 0xcc, 0x96, - 0x78, 0x22, 0xb9, 0xe3, 0x0d, 0x57, 0x26, 0x7c, 0x92, 0xc8, - 0x53, 0x09, 0xe7, 0xbd, 0x8a, 0xd0, 0x3e, 0x64, 0xff, 0xa5, - 0x4b, 0x11, 0x60, 0x3a, 0xd4, 0x8e, 0x15, 0x4f, 0xa1, 0xfb, - 0x43, 0x19, 0xf7, 0xad, 0x36, 0x6c, 0x82, 0xd8, 0xa9, 0xf3, - 0x1d, 0x47, 0xdc, 0x86, 0x68, 0x32, 0x00, 0x5b, 0xb6, 0xed, - 0x71, 0x2a, 0xc7, 0x9c, 0xe2, 0xb9, 0x54, 0x0f, 0x93, 0xc8, - 0x25, 0x7e, 0xd9, 0x82, 0x6f, 0x34, 0xa8, 0xf3, 0x1e, 0x45, - 0x3b, 0x60, 0x8d, 0xd6, 0x4a, 0x11, 0xfc, 0xa7, 0xaf, 0xf4, - 0x19, 0x42, 0xde, 0x85, 0x68, 0x33, 0x4d, 0x16, 0xfb, 0xa0, - 0x3c, 0x67, 0x8a, 0xd1, 0x76, 0x2d, 0xc0, 0x9b, 0x07, 0x5c, - 0xb1, 0xea, 0x94, 0xcf, 0x22, 0x79, 0xe5, 0xbe, 0x53, 0x08, - 0x43, 0x18, 0xf5, 0xae, 0x32, 0x69, 0x84, 0xdf, 0xa1, 0xfa, - 0x17, 0x4c, 0xd0, 0x8b, 0x66, 0x3d, 0x9a, 0xc1, 0x2c, 0x77, - 0xeb, 0xb0, 0x5d, 0x06, 0x78, 0x23, 0xce, 0x95, 0x09, 0x52, - 0xbf, 0xe4, 0xec, 0xb7, 0x5a, 0x01, 0x9d, 0xc6, 0x2b, 0x70, - 0x0e, 0x55, 0xb8, 0xe3, 0x7f, 0x24, 0xc9, 0x92, 0x35, 0x6e, - 0x83, 0xd8, 0x44, 0x1f, 0xf2, 0xa9, 0xd7, 0x8c, 0x61, 0x3a, - 0xa6, 0xfd, 0x10, 0x4b, 0x86, 0xdd, 0x30, 0x6b, 0xf7, 0xac, - 0x41, 0x1a, 0x64, 0x3f, 0xd2, 0x89, 0x15, 0x4e, 0xa3, 0xf8, - 0x5f, 0x04, 0xe9, 0xb2, 0x2e, 0x75, 0x98, 0xc3, 0xbd, 0xe6, - 0x0b, 0x50, 0xcc, 0x97, 0x7a, 0x21, 0x29, 0x72, 0x9f, 0xc4, - 0x58, 0x03, 0xee, 0xb5, 0xcb, 0x90, 0x7d, 0x26, 0xba, 0xe1, - 0x0c, 0x57, 0xf0, 0xab, 0x46, 0x1d, 0x81, 0xda, 0x37, 0x6c, - 0x12, 0x49, 0xa4, 0xff, 0x63, 0x38, 0xd5, 0x8e, 0xc5, 0x9e, - 0x73, 0x28, 0xb4, 0xef, 0x02, 0x59, 0x27, 0x7c, 0x91, 0xca, - 0x56, 0x0d, 0xe0, 0xbb, 0x1c, 0x47, 0xaa, 0xf1, 0x6d, 0x36, - 0xdb, 0x80, 0xfe, 0xa5, 0x48, 0x13, 0x8f, 0xd4, 0x39, 0x62, - 0x6a, 0x31, 0xdc, 0x87, 0x1b, 0x40, 0xad, 0xf6, 0x88, 0xd3, - 0x3e, 0x65, 0xf9, 0xa2, 0x4f, 0x14, 0xb3, 0xe8, 0x05, 0x5e, - 0xc2, 0x99, 0x74, 0x2f, 0x51, 0x0a, 0xe7, 0xbc, 0x20, 0x7b, - 0x96, 0xcd, 0x00, 0x5c, 0xb8, 0xe4, 0x6d, 0x31, 0xd5, 0x89, - 0xda, 0x86, 0x62, 0x3e, 0xb7, 0xeb, 0x0f, 0x53, 0xa9, 0xf5, - 0x11, 0x4d, 0xc4, 0x98, 0x7c, 0x20, 0x73, 0x2f, 0xcb, 0x97, - 0x1e, 0x42, 0xa6, 0xfa, 0x4f, 0x13, 0xf7, 0xab, 0x22, 0x7e, - 0x9a, 0xc6, 0x95, 0xc9, 0x2d, 0x71, 0xf8, 0xa4, 0x40, 0x1c, - 0xe6, 0xba, 0x5e, 0x02, 0x8b, 0xd7, 0x33, 0x6f, 0x3c, 0x60, - 0x84, 0xd8, 0x51, 0x0d, 0xe9, 0xb5, 0x9e, 0xc2, 0x26, 0x7a, - 0xf3, 0xaf, 0x4b, 0x17, 0x44, 0x18, 0xfc, 0xa0, 0x29, 0x75, - 0x91, 0xcd, 0x37, 0x6b, 0x8f, 0xd3, 0x5a, 0x06, 0xe2, 0xbe, - 0xed, 0xb1, 0x55, 0x09, 0x80, 0xdc, 0x38, 0x64, 0xd1, 0x8d, - 0x69, 0x35, 0xbc, 0xe0, 0x04, 0x58, 0x0b, 0x57, 0xb3, 0xef, - 0x66, 0x3a, 0xde, 0x82, 0x78, 0x24, 0xc0, 0x9c, 0x15, 0x49, - 0xad, 0xf1, 0xa2, 0xfe, 0x1a, 0x46, 0xcf, 0x93, 0x77, 0x2b, - 0x21, 0x7d, 0x99, 0xc5, 0x4c, 0x10, 0xf4, 0xa8, 0xfb, 0xa7, - 0x43, 0x1f, 0x96, 0xca, 0x2e, 0x72, 0x88, 0xd4, 0x30, 0x6c, - 0xe5, 0xb9, 0x5d, 0x01, 0x52, 0x0e, 0xea, 0xb6, 0x3f, 0x63, - 0x87, 0xdb, 0x6e, 0x32, 0xd6, 0x8a, 0x03, 0x5f, 0xbb, 0xe7, - 0xb4, 0xe8, 0x0c, 0x50, 0xd9, 0x85, 0x61, 0x3d, 0xc7, 0x9b, - 0x7f, 0x23, 0xaa, 0xf6, 0x12, 0x4e, 0x1d, 0x41, 0xa5, 0xf9, - 0x70, 0x2c, 0xc8, 0x94, 0xbf, 0xe3, 0x07, 0x5b, 0xd2, 0x8e, - 0x6a, 0x36, 0x65, 0x39, 0xdd, 0x81, 0x08, 0x54, 0xb0, 0xec, - 0x16, 0x4a, 0xae, 0xf2, 0x7b, 0x27, 0xc3, 0x9f, 0xcc, 0x90, - 0x74, 0x28, 0xa1, 0xfd, 0x19, 0x45, 0xf0, 0xac, 0x48, 0x14, - 0x9d, 0xc1, 0x25, 0x79, 0x2a, 0x76, 0x92, 0xce, 0x47, 0x1b, - 0xff, 0xa3, 0x59, 0x05, 0xe1, 0xbd, 0x34, 0x68, 0x8c, 0xd0, - 0x83, 0xdf, 0x3b, 0x67, 0xee, 0xb2, 0x56, 0x0a, 0x00, 0x5d, - 0xba, 0xe7, 0x69, 0x34, 0xd3, 0x8e, 0xd2, 0x8f, 0x68, 0x35, - 0xbb, 0xe6, 0x01, 0x5c, 0xb9, 0xe4, 0x03, 0x5e, 0xd0, 0x8d, - 0x6a, 0x37, 0x6b, 0x36, 0xd1, 0x8c, 0x02, 0x5f, 0xb8, 0xe5, - 0x6f, 0x32, 0xd5, 0x88, 0x06, 0x5b, 0xbc, 0xe1, 0xbd, 0xe0, - 0x07, 0x5a, 0xd4, 0x89, 0x6e, 0x33, 0xd6, 0x8b, 0x6c, 0x31, - 0xbf, 0xe2, 0x05, 0x58, 0x04, 0x59, 0xbe, 0xe3, 0x6d, 0x30, - 0xd7, 0x8a, 0xde, 0x83, 0x64, 0x39, 0xb7, 0xea, 0x0d, 0x50, - 0x0c, 0x51, 0xb6, 0xeb, 0x65, 0x38, 0xdf, 0x82, 0x67, 0x3a, - 0xdd, 0x80, 0x0e, 0x53, 0xb4, 0xe9, 0xb5, 0xe8, 0x0f, 0x52, - 0xdc, 0x81, 0x66, 0x3b, 0xb1, 0xec, 0x0b, 0x56, 0xd8, 0x85, - 0x62, 0x3f, 0x63, 0x3e, 0xd9, 0x84, 0x0a, 0x57, 0xb0, 0xed, - 0x08, 0x55, 0xb2, 0xef, 0x61, 0x3c, 0xdb, 0x86, 0xda, 0x87, - 0x60, 0x3d, 0xb3, 0xee, 0x09, 0x54, 0xa1, 0xfc, 0x1b, 0x46, - 0xc8, 0x95, 0x72, 0x2f, 0x73, 0x2e, 0xc9, 0x94, 0x1a, 0x47, - 0xa0, 0xfd, 0x18, 0x45, 0xa2, 0xff, 0x71, 0x2c, 0xcb, 0x96, - 0xca, 0x97, 0x70, 0x2d, 0xa3, 0xfe, 0x19, 0x44, 0xce, 0x93, - 0x74, 0x29, 0xa7, 0xfa, 0x1d, 0x40, 0x1c, 0x41, 0xa6, 0xfb, - 0x75, 0x28, 0xcf, 0x92, 0x77, 0x2a, 0xcd, 0x90, 0x1e, 0x43, - 0xa4, 0xf9, 0xa5, 0xf8, 0x1f, 0x42, 0xcc, 0x91, 0x76, 0x2b, - 0x7f, 0x22, 0xc5, 0x98, 0x16, 0x4b, 0xac, 0xf1, 0xad, 0xf0, - 0x17, 0x4a, 0xc4, 0x99, 0x7e, 0x23, 0xc6, 0x9b, 0x7c, 0x21, - 0xaf, 0xf2, 0x15, 0x48, 0x14, 0x49, 0xae, 0xf3, 0x7d, 0x20, - 0xc7, 0x9a, 0x10, 0x4d, 0xaa, 0xf7, 0x79, 0x24, 0xc3, 0x9e, - 0xc2, 0x9f, 0x78, 0x25, 0xab, 0xf6, 0x11, 0x4c, 0xa9, 0xf4, - 0x13, 0x4e, 0xc0, 0x9d, 0x7a, 0x27, 0x7b, 0x26, 0xc1, 0x9c, - 0x12, 0x4f, 0xa8, 0xf5, 0x00, 0x5e, 0xbc, 0xe2, 0x65, 0x3b, - 0xd9, 0x87, 0xca, 0x94, 0x76, 0x28, 0xaf, 0xf1, 0x13, 0x4d, - 0x89, 0xd7, 0x35, 0x6b, 0xec, 0xb2, 0x50, 0x0e, 0x43, 0x1d, - 0xff, 0xa1, 0x26, 0x78, 0x9a, 0xc4, 0x0f, 0x51, 0xb3, 0xed, - 0x6a, 0x34, 0xd6, 0x88, 0xc5, 0x9b, 0x79, 0x27, 0xa0, 0xfe, - 0x1c, 0x42, 0x86, 0xd8, 0x3a, 0x64, 0xe3, 0xbd, 0x5f, 0x01, - 0x4c, 0x12, 0xf0, 0xae, 0x29, 0x77, 0x95, 0xcb, 0x1e, 0x40, - 0xa2, 0xfc, 0x7b, 0x25, 0xc7, 0x99, 0xd4, 0x8a, 0x68, 0x36, - 0xb1, 0xef, 0x0d, 0x53, 0x97, 0xc9, 0x2b, 0x75, 0xf2, 0xac, - 0x4e, 0x10, 0x5d, 0x03, 0xe1, 0xbf, 0x38, 0x66, 0x84, 0xda, - 0x11, 0x4f, 0xad, 0xf3, 0x74, 0x2a, 0xc8, 0x96, 0xdb, 0x85, - 0x67, 0x39, 0xbe, 0xe0, 0x02, 0x5c, 0x98, 0xc6, 0x24, 0x7a, - 0xfd, 0xa3, 0x41, 0x1f, 0x52, 0x0c, 0xee, 0xb0, 0x37, 0x69, - 0x8b, 0xd5, 0x3c, 0x62, 0x80, 0xde, 0x59, 0x07, 0xe5, 0xbb, - 0xf6, 0xa8, 0x4a, 0x14, 0x93, 0xcd, 0x2f, 0x71, 0xb5, 0xeb, - 0x09, 0x57, 0xd0, 0x8e, 0x6c, 0x32, 0x7f, 0x21, 0xc3, 0x9d, - 0x1a, 0x44, 0xa6, 0xf8, 0x33, 0x6d, 0x8f, 0xd1, 0x56, 0x08, - 0xea, 0xb4, 0xf9, 0xa7, 0x45, 0x1b, 0x9c, 0xc2, 0x20, 0x7e, - 0xba, 0xe4, 0x06, 0x58, 0xdf, 0x81, 0x63, 0x3d, 0x70, 0x2e, - 0xcc, 0x92, 0x15, 0x4b, 0xa9, 0xf7, 0x22, 0x7c, 0x9e, 0xc0, - 0x47, 0x19, 0xfb, 0xa5, 0xe8, 0xb6, 0x54, 0x0a, 0x8d, 0xd3, - 0x31, 0x6f, 0xab, 0xf5, 0x17, 0x49, 0xce, 0x90, 0x72, 0x2c, - 0x61, 0x3f, 0xdd, 0x83, 0x04, 0x5a, 0xb8, 0xe6, 0x2d, 0x73, - 0x91, 0xcf, 0x48, 0x16, 0xf4, 0xaa, 0xe7, 0xb9, 0x5b, 0x05, - 0x82, 0xdc, 0x3e, 0x60, 0xa4, 0xfa, 0x18, 0x46, 0xc1, 0x9f, - 0x7d, 0x23, 0x6e, 0x30, 0xd2, 0x8c, 0x0b, 0x55, 0xb7, 0xe9, - 0x00, 0x5f, 0xbe, 0xe1, 0x61, 0x3e, 0xdf, 0x80, 0xc2, 0x9d, - 0x7c, 0x23, 0xa3, 0xfc, 0x1d, 0x42, 0x99, 0xc6, 0x27, 0x78, - 0xf8, 0xa7, 0x46, 0x19, 0x5b, 0x04, 0xe5, 0xba, 0x3a, 0x65, - 0x84, 0xdb, 0x2f, 0x70, 0x91, 0xce, 0x4e, 0x11, 0xf0, 0xaf, - 0xed, 0xb2, 0x53, 0x0c, 0x8c, 0xd3, 0x32, 0x6d, 0xb6, 0xe9, - 0x08, 0x57, 0xd7, 0x88, 0x69, 0x36, 0x74, 0x2b, 0xca, 0x95, - 0x15, 0x4a, 0xab, 0xf4, 0x5e, 0x01, 0xe0, 0xbf, 0x3f, 0x60, - 0x81, 0xde, 0x9c, 0xc3, 0x22, 0x7d, 0xfd, 0xa2, 0x43, 0x1c, - 0xc7, 0x98, 0x79, 0x26, 0xa6, 0xf9, 0x18, 0x47, 0x05, 0x5a, - 0xbb, 0xe4, 0x64, 0x3b, 0xda, 0x85, 0x71, 0x2e, 0xcf, 0x90, - 0x10, 0x4f, 0xae, 0xf1, 0xb3, 0xec, 0x0d, 0x52, 0xd2, 0x8d, - 0x6c, 0x33, 0xe8, 0xb7, 0x56, 0x09, 0x89, 0xd6, 0x37, 0x68, - 0x2a, 0x75, 0x94, 0xcb, 0x4b, 0x14, 0xf5, 0xaa, 0xbc, 0xe3, - 0x02, 0x5d, 0xdd, 0x82, 0x63, 0x3c, 0x7e, 0x21, 0xc0, 0x9f, - 0x1f, 0x40, 0xa1, 0xfe, 0x25, 0x7a, 0x9b, 0xc4, 0x44, 0x1b, - 0xfa, 0xa5, 0xe7, 0xb8, 0x59, 0x06, 0x86, 0xd9, 0x38, 0x67, - 0x93, 0xcc, 0x2d, 0x72, 0xf2, 0xad, 0x4c, 0x13, 0x51, 0x0e, - 0xef, 0xb0, 0x30, 0x6f, 0x8e, 0xd1, 0x0a, 0x55, 0xb4, 0xeb, - 0x6b, 0x34, 0xd5, 0x8a, 0xc8, 0x97, 0x76, 0x29, 0xa9, 0xf6, - 0x17, 0x48, 0xe2, 0xbd, 0x5c, 0x03, 0x83, 0xdc, 0x3d, 0x62, - 0x20, 0x7f, 0x9e, 0xc1, 0x41, 0x1e, 0xff, 0xa0, 0x7b, 0x24, - 0xc5, 0x9a, 0x1a, 0x45, 0xa4, 0xfb, 0xb9, 0xe6, 0x07, 0x58, - 0xd8, 0x87, 0x66, 0x39, 0xcd, 0x92, 0x73, 0x2c, 0xac, 0xf3, - 0x12, 0x4d, 0x0f, 0x50, 0xb1, 0xee, 0x6e, 0x31, 0xd0, 0x8f, - 0x54, 0x0b, 0xea, 0xb5, 0x35, 0x6a, 0x8b, 0xd4, 0x96, 0xc9, - 0x28, 0x77, 0xf7, 0xa8, 0x49, 0x16, 0x00, 0x60, 0xc0, 0xa0, - 0x9d, 0xfd, 0x5d, 0x3d, 0x27, 0x47, 0xe7, 0x87, 0xba, 0xda, - 0x7a, 0x1a, 0x4e, 0x2e, 0x8e, 0xee, 0xd3, 0xb3, 0x13, 0x73, - 0x69, 0x09, 0xa9, 0xc9, 0xf4, 0x94, 0x34, 0x54, 0x9c, 0xfc, - 0x5c, 0x3c, 0x01, 0x61, 0xc1, 0xa1, 0xbb, 0xdb, 0x7b, 0x1b, - 0x26, 0x46, 0xe6, 0x86, 0xd2, 0xb2, 0x12, 0x72, 0x4f, 0x2f, - 0x8f, 0xef, 0xf5, 0x95, 0x35, 0x55, 0x68, 0x08, 0xa8, 0xc8, - 0x25, 0x45, 0xe5, 0x85, 0xb8, 0xd8, 0x78, 0x18, 0x02, 0x62, - 0xc2, 0xa2, 0x9f, 0xff, 0x5f, 0x3f, 0x6b, 0x0b, 0xab, 0xcb, - 0xf6, 0x96, 0x36, 0x56, 0x4c, 0x2c, 0x8c, 0xec, 0xd1, 0xb1, - 0x11, 0x71, 0xb9, 0xd9, 0x79, 0x19, 0x24, 0x44, 0xe4, 0x84, - 0x9e, 0xfe, 0x5e, 0x3e, 0x03, 0x63, 0xc3, 0xa3, 0xf7, 0x97, - 0x37, 0x57, 0x6a, 0x0a, 0xaa, 0xca, 0xd0, 0xb0, 0x10, 0x70, - 0x4d, 0x2d, 0x8d, 0xed, 0x4a, 0x2a, 0x8a, 0xea, 0xd7, 0xb7, - 0x17, 0x77, 0x6d, 0x0d, 0xad, 0xcd, 0xf0, 0x90, 0x30, 0x50, - 0x04, 0x64, 0xc4, 0xa4, 0x99, 0xf9, 0x59, 0x39, 0x23, 0x43, - 0xe3, 0x83, 0xbe, 0xde, 0x7e, 0x1e, 0xd6, 0xb6, 0x16, 0x76, - 0x4b, 0x2b, 0x8b, 0xeb, 0xf1, 0x91, 0x31, 0x51, 0x6c, 0x0c, - 0xac, 0xcc, 0x98, 0xf8, 0x58, 0x38, 0x05, 0x65, 0xc5, 0xa5, - 0xbf, 0xdf, 0x7f, 0x1f, 0x22, 0x42, 0xe2, 0x82, 0x6f, 0x0f, - 0xaf, 0xcf, 0xf2, 0x92, 0x32, 0x52, 0x48, 0x28, 0x88, 0xe8, - 0xd5, 0xb5, 0x15, 0x75, 0x21, 0x41, 0xe1, 0x81, 0xbc, 0xdc, - 0x7c, 0x1c, 0x06, 0x66, 0xc6, 0xa6, 0x9b, 0xfb, 0x5b, 0x3b, - 0xf3, 0x93, 0x33, 0x53, 0x6e, 0x0e, 0xae, 0xce, 0xd4, 0xb4, - 0x14, 0x74, 0x49, 0x29, 0x89, 0xe9, 0xbd, 0xdd, 0x7d, 0x1d, - 0x20, 0x40, 0xe0, 0x80, 0x9a, 0xfa, 0x5a, 0x3a, 0x07, 0x67, - 0xc7, 0xa7, 0x00, 0x61, 0xc2, 0xa3, 0x99, 0xf8, 0x5b, 0x3a, - 0x2f, 0x4e, 0xed, 0x8c, 0xb6, 0xd7, 0x74, 0x15, 0x5e, 0x3f, - 0x9c, 0xfd, 0xc7, 0xa6, 0x05, 0x64, 0x71, 0x10, 0xb3, 0xd2, - 0xe8, 0x89, 0x2a, 0x4b, 0xbc, 0xdd, 0x7e, 0x1f, 0x25, 0x44, - 0xe7, 0x86, 0x93, 0xf2, 0x51, 0x30, 0x0a, 0x6b, 0xc8, 0xa9, - 0xe2, 0x83, 0x20, 0x41, 0x7b, 0x1a, 0xb9, 0xd8, 0xcd, 0xac, - 0x0f, 0x6e, 0x54, 0x35, 0x96, 0xf7, 0x65, 0x04, 0xa7, 0xc6, - 0xfc, 0x9d, 0x3e, 0x5f, 0x4a, 0x2b, 0x88, 0xe9, 0xd3, 0xb2, - 0x11, 0x70, 0x3b, 0x5a, 0xf9, 0x98, 0xa2, 0xc3, 0x60, 0x01, - 0x14, 0x75, 0xd6, 0xb7, 0x8d, 0xec, 0x4f, 0x2e, 0xd9, 0xb8, - 0x1b, 0x7a, 0x40, 0x21, 0x82, 0xe3, 0xf6, 0x97, 0x34, 0x55, - 0x6f, 0x0e, 0xad, 0xcc, 0x87, 0xe6, 0x45, 0x24, 0x1e, 0x7f, - 0xdc, 0xbd, 0xa8, 0xc9, 0x6a, 0x0b, 0x31, 0x50, 0xf3, 0x92, - 0xca, 0xab, 0x08, 0x69, 0x53, 0x32, 0x91, 0xf0, 0xe5, 0x84, - 0x27, 0x46, 0x7c, 0x1d, 0xbe, 0xdf, 0x94, 0xf5, 0x56, 0x37, - 0x0d, 0x6c, 0xcf, 0xae, 0xbb, 0xda, 0x79, 0x18, 0x22, 0x43, - 0xe0, 0x81, 0x76, 0x17, 0xb4, 0xd5, 0xef, 0x8e, 0x2d, 0x4c, - 0x59, 0x38, 0x9b, 0xfa, 0xc0, 0xa1, 0x02, 0x63, 0x28, 0x49, - 0xea, 0x8b, 0xb1, 0xd0, 0x73, 0x12, 0x07, 0x66, 0xc5, 0xa4, - 0x9e, 0xff, 0x5c, 0x3d, 0xaf, 0xce, 0x6d, 0x0c, 0x36, 0x57, - 0xf4, 0x95, 0x80, 0xe1, 0x42, 0x23, 0x19, 0x78, 0xdb, 0xba, - 0xf1, 0x90, 0x33, 0x52, 0x68, 0x09, 0xaa, 0xcb, 0xde, 0xbf, - 0x1c, 0x7d, 0x47, 0x26, 0x85, 0xe4, 0x13, 0x72, 0xd1, 0xb0, - 0x8a, 0xeb, 0x48, 0x29, 0x3c, 0x5d, 0xfe, 0x9f, 0xa5, 0xc4, - 0x67, 0x06, 0x4d, 0x2c, 0x8f, 0xee, 0xd4, 0xb5, 0x16, 0x77, - 0x62, 0x03, 0xa0, 0xc1, 0xfb, 0x9a, 0x39, 0x58, 0x00, 0x62, - 0xc4, 0xa6, 0x95, 0xf7, 0x51, 0x33, 0x37, 0x55, 0xf3, 0x91, - 0xa2, 0xc0, 0x66, 0x04, 0x6e, 0x0c, 0xaa, 0xc8, 0xfb, 0x99, - 0x3f, 0x5d, 0x59, 0x3b, 0x9d, 0xff, 0xcc, 0xae, 0x08, 0x6a, - 0xdc, 0xbe, 0x18, 0x7a, 0x49, 0x2b, 0x8d, 0xef, 0xeb, 0x89, - 0x2f, 0x4d, 0x7e, 0x1c, 0xba, 0xd8, 0xb2, 0xd0, 0x76, 0x14, - 0x27, 0x45, 0xe3, 0x81, 0x85, 0xe7, 0x41, 0x23, 0x10, 0x72, - 0xd4, 0xb6, 0xa5, 0xc7, 0x61, 0x03, 0x30, 0x52, 0xf4, 0x96, - 0x92, 0xf0, 0x56, 0x34, 0x07, 0x65, 0xc3, 0xa1, 0xcb, 0xa9, - 0x0f, 0x6d, 0x5e, 0x3c, 0x9a, 0xf8, 0xfc, 0x9e, 0x38, 0x5a, - 0x69, 0x0b, 0xad, 0xcf, 0x79, 0x1b, 0xbd, 0xdf, 0xec, 0x8e, - 0x28, 0x4a, 0x4e, 0x2c, 0x8a, 0xe8, 0xdb, 0xb9, 0x1f, 0x7d, - 0x17, 0x75, 0xd3, 0xb1, 0x82, 0xe0, 0x46, 0x24, 0x20, 0x42, - 0xe4, 0x86, 0xb5, 0xd7, 0x71, 0x13, 0x57, 0x35, 0x93, 0xf1, - 0xc2, 0xa0, 0x06, 0x64, 0x60, 0x02, 0xa4, 0xc6, 0xf5, 0x97, - 0x31, 0x53, 0x39, 0x5b, 0xfd, 0x9f, 0xac, 0xce, 0x68, 0x0a, - 0x0e, 0x6c, 0xca, 0xa8, 0x9b, 0xf9, 0x5f, 0x3d, 0x8b, 0xe9, - 0x4f, 0x2d, 0x1e, 0x7c, 0xda, 0xb8, 0xbc, 0xde, 0x78, 0x1a, - 0x29, 0x4b, 0xed, 0x8f, 0xe5, 0x87, 0x21, 0x43, 0x70, 0x12, - 0xb4, 0xd6, 0xd2, 0xb0, 0x16, 0x74, 0x47, 0x25, 0x83, 0xe1, - 0xf2, 0x90, 0x36, 0x54, 0x67, 0x05, 0xa3, 0xc1, 0xc5, 0xa7, - 0x01, 0x63, 0x50, 0x32, 0x94, 0xf6, 0x9c, 0xfe, 0x58, 0x3a, - 0x09, 0x6b, 0xcd, 0xaf, 0xab, 0xc9, 0x6f, 0x0d, 0x3e, 0x5c, - 0xfa, 0x98, 0x2e, 0x4c, 0xea, 0x88, 0xbb, 0xd9, 0x7f, 0x1d, - 0x19, 0x7b, 0xdd, 0xbf, 0x8c, 0xee, 0x48, 0x2a, 0x40, 0x22, - 0x84, 0xe6, 0xd5, 0xb7, 0x11, 0x73, 0x77, 0x15, 0xb3, 0xd1, - 0xe2, 0x80, 0x26, 0x44, 0x00, 0x63, 0xc6, 0xa5, 0x91, 0xf2, - 0x57, 0x34, 0x3f, 0x5c, 0xf9, 0x9a, 0xae, 0xcd, 0x68, 0x0b, - 0x7e, 0x1d, 0xb8, 0xdb, 0xef, 0x8c, 0x29, 0x4a, 0x41, 0x22, - 0x87, 0xe4, 0xd0, 0xb3, 0x16, 0x75, 0xfc, 0x9f, 0x3a, 0x59, - 0x6d, 0x0e, 0xab, 0xc8, 0xc3, 0xa0, 0x05, 0x66, 0x52, 0x31, - 0x94, 0xf7, 0x82, 0xe1, 0x44, 0x27, 0x13, 0x70, 0xd5, 0xb6, - 0xbd, 0xde, 0x7b, 0x18, 0x2c, 0x4f, 0xea, 0x89, 0xe5, 0x86, - 0x23, 0x40, 0x74, 0x17, 0xb2, 0xd1, 0xda, 0xb9, 0x1c, 0x7f, - 0x4b, 0x28, 0x8d, 0xee, 0x9b, 0xf8, 0x5d, 0x3e, 0x0a, 0x69, - 0xcc, 0xaf, 0xa4, 0xc7, 0x62, 0x01, 0x35, 0x56, 0xf3, 0x90, - 0x19, 0x7a, 0xdf, 0xbc, 0x88, 0xeb, 0x4e, 0x2d, 0x26, 0x45, - 0xe0, 0x83, 0xb7, 0xd4, 0x71, 0x12, 0x67, 0x04, 0xa1, 0xc2, - 0xf6, 0x95, 0x30, 0x53, 0x58, 0x3b, 0x9e, 0xfd, 0xc9, 0xaa, - 0x0f, 0x6c, 0xd7, 0xb4, 0x11, 0x72, 0x46, 0x25, 0x80, 0xe3, - 0xe8, 0x8b, 0x2e, 0x4d, 0x79, 0x1a, 0xbf, 0xdc, 0xa9, 0xca, - 0x6f, 0x0c, 0x38, 0x5b, 0xfe, 0x9d, 0x96, 0xf5, 0x50, 0x33, - 0x07, 0x64, 0xc1, 0xa2, 0x2b, 0x48, 0xed, 0x8e, 0xba, 0xd9, - 0x7c, 0x1f, 0x14, 0x77, 0xd2, 0xb1, 0x85, 0xe6, 0x43, 0x20, - 0x55, 0x36, 0x93, 0xf0, 0xc4, 0xa7, 0x02, 0x61, 0x6a, 0x09, - 0xac, 0xcf, 0xfb, 0x98, 0x3d, 0x5e, 0x32, 0x51, 0xf4, 0x97, - 0xa3, 0xc0, 0x65, 0x06, 0x0d, 0x6e, 0xcb, 0xa8, 0x9c, 0xff, - 0x5a, 0x39, 0x4c, 0x2f, 0x8a, 0xe9, 0xdd, 0xbe, 0x1b, 0x78, - 0x73, 0x10, 0xb5, 0xd6, 0xe2, 0x81, 0x24, 0x47, 0xce, 0xad, - 0x08, 0x6b, 0x5f, 0x3c, 0x99, 0xfa, 0xf1, 0x92, 0x37, 0x54, - 0x60, 0x03, 0xa6, 0xc5, 0xb0, 0xd3, 0x76, 0x15, 0x21, 0x42, - 0xe7, 0x84, 0x8f, 0xec, 0x49, 0x2a, 0x1e, 0x7d, 0xd8, 0xbb, - 0x00, 0x64, 0xc8, 0xac, 0x8d, 0xe9, 0x45, 0x21, 0x07, 0x63, - 0xcf, 0xab, 0x8a, 0xee, 0x42, 0x26, 0x0e, 0x6a, 0xc6, 0xa2, - 0x83, 0xe7, 0x4b, 0x2f, 0x09, 0x6d, 0xc1, 0xa5, 0x84, 0xe0, - 0x4c, 0x28, 0x1c, 0x78, 0xd4, 0xb0, 0x91, 0xf5, 0x59, 0x3d, - 0x1b, 0x7f, 0xd3, 0xb7, 0x96, 0xf2, 0x5e, 0x3a, 0x12, 0x76, - 0xda, 0xbe, 0x9f, 0xfb, 0x57, 0x33, 0x15, 0x71, 0xdd, 0xb9, - 0x98, 0xfc, 0x50, 0x34, 0x38, 0x5c, 0xf0, 0x94, 0xb5, 0xd1, - 0x7d, 0x19, 0x3f, 0x5b, 0xf7, 0x93, 0xb2, 0xd6, 0x7a, 0x1e, - 0x36, 0x52, 0xfe, 0x9a, 0xbb, 0xdf, 0x73, 0x17, 0x31, 0x55, - 0xf9, 0x9d, 0xbc, 0xd8, 0x74, 0x10, 0x24, 0x40, 0xec, 0x88, - 0xa9, 0xcd, 0x61, 0x05, 0x23, 0x47, 0xeb, 0x8f, 0xae, 0xca, - 0x66, 0x02, 0x2a, 0x4e, 0xe2, 0x86, 0xa7, 0xc3, 0x6f, 0x0b, - 0x2d, 0x49, 0xe5, 0x81, 0xa0, 0xc4, 0x68, 0x0c, 0x70, 0x14, - 0xb8, 0xdc, 0xfd, 0x99, 0x35, 0x51, 0x77, 0x13, 0xbf, 0xdb, - 0xfa, 0x9e, 0x32, 0x56, 0x7e, 0x1a, 0xb6, 0xd2, 0xf3, 0x97, - 0x3b, 0x5f, 0x79, 0x1d, 0xb1, 0xd5, 0xf4, 0x90, 0x3c, 0x58, - 0x6c, 0x08, 0xa4, 0xc0, 0xe1, 0x85, 0x29, 0x4d, 0x6b, 0x0f, - 0xa3, 0xc7, 0xe6, 0x82, 0x2e, 0x4a, 0x62, 0x06, 0xaa, 0xce, - 0xef, 0x8b, 0x27, 0x43, 0x65, 0x01, 0xad, 0xc9, 0xe8, 0x8c, - 0x20, 0x44, 0x48, 0x2c, 0x80, 0xe4, 0xc5, 0xa1, 0x0d, 0x69, - 0x4f, 0x2b, 0x87, 0xe3, 0xc2, 0xa6, 0x0a, 0x6e, 0x46, 0x22, - 0x8e, 0xea, 0xcb, 0xaf, 0x03, 0x67, 0x41, 0x25, 0x89, 0xed, - 0xcc, 0xa8, 0x04, 0x60, 0x54, 0x30, 0x9c, 0xf8, 0xd9, 0xbd, - 0x11, 0x75, 0x53, 0x37, 0x9b, 0xff, 0xde, 0xba, 0x16, 0x72, - 0x5a, 0x3e, 0x92, 0xf6, 0xd7, 0xb3, 0x1f, 0x7b, 0x5d, 0x39, - 0x95, 0xf1, 0xd0, 0xb4, 0x18, 0x7c, 0x00, 0x65, 0xca, 0xaf, - 0x89, 0xec, 0x43, 0x26, 0x0f, 0x6a, 0xc5, 0xa0, 0x86, 0xe3, - 0x4c, 0x29, 0x1e, 0x7b, 0xd4, 0xb1, 0x97, 0xf2, 0x5d, 0x38, - 0x11, 0x74, 0xdb, 0xbe, 0x98, 0xfd, 0x52, 0x37, 0x3c, 0x59, - 0xf6, 0x93, 0xb5, 0xd0, 0x7f, 0x1a, 0x33, 0x56, 0xf9, 0x9c, - 0xba, 0xdf, 0x70, 0x15, 0x22, 0x47, 0xe8, 0x8d, 0xab, 0xce, - 0x61, 0x04, 0x2d, 0x48, 0xe7, 0x82, 0xa4, 0xc1, 0x6e, 0x0b, - 0x78, 0x1d, 0xb2, 0xd7, 0xf1, 0x94, 0x3b, 0x5e, 0x77, 0x12, - 0xbd, 0xd8, 0xfe, 0x9b, 0x34, 0x51, 0x66, 0x03, 0xac, 0xc9, - 0xef, 0x8a, 0x25, 0x40, 0x69, 0x0c, 0xa3, 0xc6, 0xe0, 0x85, - 0x2a, 0x4f, 0x44, 0x21, 0x8e, 0xeb, 0xcd, 0xa8, 0x07, 0x62, - 0x4b, 0x2e, 0x81, 0xe4, 0xc2, 0xa7, 0x08, 0x6d, 0x5a, 0x3f, - 0x90, 0xf5, 0xd3, 0xb6, 0x19, 0x7c, 0x55, 0x30, 0x9f, 0xfa, - 0xdc, 0xb9, 0x16, 0x73, 0xf0, 0x95, 0x3a, 0x5f, 0x79, 0x1c, - 0xb3, 0xd6, 0xff, 0x9a, 0x35, 0x50, 0x76, 0x13, 0xbc, 0xd9, - 0xee, 0x8b, 0x24, 0x41, 0x67, 0x02, 0xad, 0xc8, 0xe1, 0x84, - 0x2b, 0x4e, 0x68, 0x0d, 0xa2, 0xc7, 0xcc, 0xa9, 0x06, 0x63, - 0x45, 0x20, 0x8f, 0xea, 0xc3, 0xa6, 0x09, 0x6c, 0x4a, 0x2f, - 0x80, 0xe5, 0xd2, 0xb7, 0x18, 0x7d, 0x5b, 0x3e, 0x91, 0xf4, - 0xdd, 0xb8, 0x17, 0x72, 0x54, 0x31, 0x9e, 0xfb, 0x88, 0xed, - 0x42, 0x27, 0x01, 0x64, 0xcb, 0xae, 0x87, 0xe2, 0x4d, 0x28, - 0x0e, 0x6b, 0xc4, 0xa1, 0x96, 0xf3, 0x5c, 0x39, 0x1f, 0x7a, - 0xd5, 0xb0, 0x99, 0xfc, 0x53, 0x36, 0x10, 0x75, 0xda, 0xbf, - 0xb4, 0xd1, 0x7e, 0x1b, 0x3d, 0x58, 0xf7, 0x92, 0xbb, 0xde, - 0x71, 0x14, 0x32, 0x57, 0xf8, 0x9d, 0xaa, 0xcf, 0x60, 0x05, - 0x23, 0x46, 0xe9, 0x8c, 0xa5, 0xc0, 0x6f, 0x0a, 0x2c, 0x49, - 0xe6, 0x83, 0x00, 0x66, 0xcc, 0xaa, 0x85, 0xe3, 0x49, 0x2f, - 0x17, 0x71, 0xdb, 0xbd, 0x92, 0xf4, 0x5e, 0x38, 0x2e, 0x48, - 0xe2, 0x84, 0xab, 0xcd, 0x67, 0x01, 0x39, 0x5f, 0xf5, 0x93, - 0xbc, 0xda, 0x70, 0x16, 0x5c, 0x3a, 0x90, 0xf6, 0xd9, 0xbf, - 0x15, 0x73, 0x4b, 0x2d, 0x87, 0xe1, 0xce, 0xa8, 0x02, 0x64, - 0x72, 0x14, 0xbe, 0xd8, 0xf7, 0x91, 0x3b, 0x5d, 0x65, 0x03, - 0xa9, 0xcf, 0xe0, 0x86, 0x2c, 0x4a, 0xb8, 0xde, 0x74, 0x12, - 0x3d, 0x5b, 0xf1, 0x97, 0xaf, 0xc9, 0x63, 0x05, 0x2a, 0x4c, - 0xe6, 0x80, 0x96, 0xf0, 0x5a, 0x3c, 0x13, 0x75, 0xdf, 0xb9, - 0x81, 0xe7, 0x4d, 0x2b, 0x04, 0x62, 0xc8, 0xae, 0xe4, 0x82, - 0x28, 0x4e, 0x61, 0x07, 0xad, 0xcb, 0xf3, 0x95, 0x3f, 0x59, - 0x76, 0x10, 0xba, 0xdc, 0xca, 0xac, 0x06, 0x60, 0x4f, 0x29, - 0x83, 0xe5, 0xdd, 0xbb, 0x11, 0x77, 0x58, 0x3e, 0x94, 0xf2, - 0x6d, 0x0b, 0xa1, 0xc7, 0xe8, 0x8e, 0x24, 0x42, 0x7a, 0x1c, - 0xb6, 0xd0, 0xff, 0x99, 0x33, 0x55, 0x43, 0x25, 0x8f, 0xe9, - 0xc6, 0xa0, 0x0a, 0x6c, 0x54, 0x32, 0x98, 0xfe, 0xd1, 0xb7, - 0x1d, 0x7b, 0x31, 0x57, 0xfd, 0x9b, 0xb4, 0xd2, 0x78, 0x1e, - 0x26, 0x40, 0xea, 0x8c, 0xa3, 0xc5, 0x6f, 0x09, 0x1f, 0x79, - 0xd3, 0xb5, 0x9a, 0xfc, 0x56, 0x30, 0x08, 0x6e, 0xc4, 0xa2, - 0x8d, 0xeb, 0x41, 0x27, 0xd5, 0xb3, 0x19, 0x7f, 0x50, 0x36, - 0x9c, 0xfa, 0xc2, 0xa4, 0x0e, 0x68, 0x47, 0x21, 0x8b, 0xed, - 0xfb, 0x9d, 0x37, 0x51, 0x7e, 0x18, 0xb2, 0xd4, 0xec, 0x8a, - 0x20, 0x46, 0x69, 0x0f, 0xa5, 0xc3, 0x89, 0xef, 0x45, 0x23, - 0x0c, 0x6a, 0xc0, 0xa6, 0x9e, 0xf8, 0x52, 0x34, 0x1b, 0x7d, - 0xd7, 0xb1, 0xa7, 0xc1, 0x6b, 0x0d, 0x22, 0x44, 0xee, 0x88, - 0xb0, 0xd6, 0x7c, 0x1a, 0x35, 0x53, 0xf9, 0x9f, 0x00, 0x67, - 0xce, 0xa9, 0x81, 0xe6, 0x4f, 0x28, 0x1f, 0x78, 0xd1, 0xb6, - 0x9e, 0xf9, 0x50, 0x37, 0x3e, 0x59, 0xf0, 0x97, 0xbf, 0xd8, - 0x71, 0x16, 0x21, 0x46, 0xef, 0x88, 0xa0, 0xc7, 0x6e, 0x09, - 0x7c, 0x1b, 0xb2, 0xd5, 0xfd, 0x9a, 0x33, 0x54, 0x63, 0x04, - 0xad, 0xca, 0xe2, 0x85, 0x2c, 0x4b, 0x42, 0x25, 0x8c, 0xeb, - 0xc3, 0xa4, 0x0d, 0x6a, 0x5d, 0x3a, 0x93, 0xf4, 0xdc, 0xbb, - 0x12, 0x75, 0xf8, 0x9f, 0x36, 0x51, 0x79, 0x1e, 0xb7, 0xd0, - 0xe7, 0x80, 0x29, 0x4e, 0x66, 0x01, 0xa8, 0xcf, 0xc6, 0xa1, - 0x08, 0x6f, 0x47, 0x20, 0x89, 0xee, 0xd9, 0xbe, 0x17, 0x70, - 0x58, 0x3f, 0x96, 0xf1, 0x84, 0xe3, 0x4a, 0x2d, 0x05, 0x62, - 0xcb, 0xac, 0x9b, 0xfc, 0x55, 0x32, 0x1a, 0x7d, 0xd4, 0xb3, - 0xba, 0xdd, 0x74, 0x13, 0x3b, 0x5c, 0xf5, 0x92, 0xa5, 0xc2, - 0x6b, 0x0c, 0x24, 0x43, 0xea, 0x8d, 0xed, 0x8a, 0x23, 0x44, - 0x6c, 0x0b, 0xa2, 0xc5, 0xf2, 0x95, 0x3c, 0x5b, 0x73, 0x14, - 0xbd, 0xda, 0xd3, 0xb4, 0x1d, 0x7a, 0x52, 0x35, 0x9c, 0xfb, - 0xcc, 0xab, 0x02, 0x65, 0x4d, 0x2a, 0x83, 0xe4, 0x91, 0xf6, - 0x5f, 0x38, 0x10, 0x77, 0xde, 0xb9, 0x8e, 0xe9, 0x40, 0x27, - 0x0f, 0x68, 0xc1, 0xa6, 0xaf, 0xc8, 0x61, 0x06, 0x2e, 0x49, - 0xe0, 0x87, 0xb0, 0xd7, 0x7e, 0x19, 0x31, 0x56, 0xff, 0x98, - 0x15, 0x72, 0xdb, 0xbc, 0x94, 0xf3, 0x5a, 0x3d, 0x0a, 0x6d, - 0xc4, 0xa3, 0x8b, 0xec, 0x45, 0x22, 0x2b, 0x4c, 0xe5, 0x82, - 0xaa, 0xcd, 0x64, 0x03, 0x34, 0x53, 0xfa, 0x9d, 0xb5, 0xd2, - 0x7b, 0x1c, 0x69, 0x0e, 0xa7, 0xc0, 0xe8, 0x8f, 0x26, 0x41, - 0x76, 0x11, 0xb8, 0xdf, 0xf7, 0x90, 0x39, 0x5e, 0x57, 0x30, - 0x99, 0xfe, 0xd6, 0xb1, 0x18, 0x7f, 0x48, 0x2f, 0x86, 0xe1, - 0xc9, 0xae, 0x07, 0x60, 0x00, 0x68, 0xd0, 0xb8, 0xbd, 0xd5, - 0x6d, 0x05, 0x67, 0x0f, 0xb7, 0xdf, 0xda, 0xb2, 0x0a, 0x62, - 0xce, 0xa6, 0x1e, 0x76, 0x73, 0x1b, 0xa3, 0xcb, 0xa9, 0xc1, - 0x79, 0x11, 0x14, 0x7c, 0xc4, 0xac, 0x81, 0xe9, 0x51, 0x39, - 0x3c, 0x54, 0xec, 0x84, 0xe6, 0x8e, 0x36, 0x5e, 0x5b, 0x33, - 0x8b, 0xe3, 0x4f, 0x27, 0x9f, 0xf7, 0xf2, 0x9a, 0x22, 0x4a, - 0x28, 0x40, 0xf8, 0x90, 0x95, 0xfd, 0x45, 0x2d, 0x1f, 0x77, - 0xcf, 0xa7, 0xa2, 0xca, 0x72, 0x1a, 0x78, 0x10, 0xa8, 0xc0, - 0xc5, 0xad, 0x15, 0x7d, 0xd1, 0xb9, 0x01, 0x69, 0x6c, 0x04, - 0xbc, 0xd4, 0xb6, 0xde, 0x66, 0x0e, 0x0b, 0x63, 0xdb, 0xb3, - 0x9e, 0xf6, 0x4e, 0x26, 0x23, 0x4b, 0xf3, 0x9b, 0xf9, 0x91, - 0x29, 0x41, 0x44, 0x2c, 0x94, 0xfc, 0x50, 0x38, 0x80, 0xe8, - 0xed, 0x85, 0x3d, 0x55, 0x37, 0x5f, 0xe7, 0x8f, 0x8a, 0xe2, - 0x5a, 0x32, 0x3e, 0x56, 0xee, 0x86, 0x83, 0xeb, 0x53, 0x3b, - 0x59, 0x31, 0x89, 0xe1, 0xe4, 0x8c, 0x34, 0x5c, 0xf0, 0x98, - 0x20, 0x48, 0x4d, 0x25, 0x9d, 0xf5, 0x97, 0xff, 0x47, 0x2f, - 0x2a, 0x42, 0xfa, 0x92, 0xbf, 0xd7, 0x6f, 0x07, 0x02, 0x6a, - 0xd2, 0xba, 0xd8, 0xb0, 0x08, 0x60, 0x65, 0x0d, 0xb5, 0xdd, - 0x71, 0x19, 0xa1, 0xc9, 0xcc, 0xa4, 0x1c, 0x74, 0x16, 0x7e, - 0xc6, 0xae, 0xab, 0xc3, 0x7b, 0x13, 0x21, 0x49, 0xf1, 0x99, - 0x9c, 0xf4, 0x4c, 0x24, 0x46, 0x2e, 0x96, 0xfe, 0xfb, 0x93, - 0x2b, 0x43, 0xef, 0x87, 0x3f, 0x57, 0x52, 0x3a, 0x82, 0xea, - 0x88, 0xe0, 0x58, 0x30, 0x35, 0x5d, 0xe5, 0x8d, 0xa0, 0xc8, - 0x70, 0x18, 0x1d, 0x75, 0xcd, 0xa5, 0xc7, 0xaf, 0x17, 0x7f, - 0x7a, 0x12, 0xaa, 0xc2, 0x6e, 0x06, 0xbe, 0xd6, 0xd3, 0xbb, - 0x03, 0x6b, 0x09, 0x61, 0xd9, 0xb1, 0xb4, 0xdc, 0x64, 0x0c, - 0x00, 0x69, 0xd2, 0xbb, 0xb9, 0xd0, 0x6b, 0x02, 0x6f, 0x06, - 0xbd, 0xd4, 0xd6, 0xbf, 0x04, 0x6d, 0xde, 0xb7, 0x0c, 0x65, - 0x67, 0x0e, 0xb5, 0xdc, 0xb1, 0xd8, 0x63, 0x0a, 0x08, 0x61, - 0xda, 0xb3, 0xa1, 0xc8, 0x73, 0x1a, 0x18, 0x71, 0xca, 0xa3, - 0xce, 0xa7, 0x1c, 0x75, 0x77, 0x1e, 0xa5, 0xcc, 0x7f, 0x16, - 0xad, 0xc4, 0xc6, 0xaf, 0x14, 0x7d, 0x10, 0x79, 0xc2, 0xab, - 0xa9, 0xc0, 0x7b, 0x12, 0x5f, 0x36, 0x8d, 0xe4, 0xe6, 0x8f, - 0x34, 0x5d, 0x30, 0x59, 0xe2, 0x8b, 0x89, 0xe0, 0x5b, 0x32, - 0x81, 0xe8, 0x53, 0x3a, 0x38, 0x51, 0xea, 0x83, 0xee, 0x87, - 0x3c, 0x55, 0x57, 0x3e, 0x85, 0xec, 0xfe, 0x97, 0x2c, 0x45, - 0x47, 0x2e, 0x95, 0xfc, 0x91, 0xf8, 0x43, 0x2a, 0x28, 0x41, - 0xfa, 0x93, 0x20, 0x49, 0xf2, 0x9b, 0x99, 0xf0, 0x4b, 0x22, - 0x4f, 0x26, 0x9d, 0xf4, 0xf6, 0x9f, 0x24, 0x4d, 0xbe, 0xd7, - 0x6c, 0x05, 0x07, 0x6e, 0xd5, 0xbc, 0xd1, 0xb8, 0x03, 0x6a, - 0x68, 0x01, 0xba, 0xd3, 0x60, 0x09, 0xb2, 0xdb, 0xd9, 0xb0, - 0x0b, 0x62, 0x0f, 0x66, 0xdd, 0xb4, 0xb6, 0xdf, 0x64, 0x0d, - 0x1f, 0x76, 0xcd, 0xa4, 0xa6, 0xcf, 0x74, 0x1d, 0x70, 0x19, - 0xa2, 0xcb, 0xc9, 0xa0, 0x1b, 0x72, 0xc1, 0xa8, 0x13, 0x7a, - 0x78, 0x11, 0xaa, 0xc3, 0xae, 0xc7, 0x7c, 0x15, 0x17, 0x7e, - 0xc5, 0xac, 0xe1, 0x88, 0x33, 0x5a, 0x58, 0x31, 0x8a, 0xe3, - 0x8e, 0xe7, 0x5c, 0x35, 0x37, 0x5e, 0xe5, 0x8c, 0x3f, 0x56, - 0xed, 0x84, 0x86, 0xef, 0x54, 0x3d, 0x50, 0x39, 0x82, 0xeb, - 0xe9, 0x80, 0x3b, 0x52, 0x40, 0x29, 0x92, 0xfb, 0xf9, 0x90, - 0x2b, 0x42, 0x2f, 0x46, 0xfd, 0x94, 0x96, 0xff, 0x44, 0x2d, - 0x9e, 0xf7, 0x4c, 0x25, 0x27, 0x4e, 0xf5, 0x9c, 0xf1, 0x98, - 0x23, 0x4a, 0x48, 0x21, 0x9a, 0xf3, 0x00, 0x6a, 0xd4, 0xbe, - 0xb5, 0xdf, 0x61, 0x0b, 0x77, 0x1d, 0xa3, 0xc9, 0xc2, 0xa8, - 0x16, 0x7c, 0xee, 0x84, 0x3a, 0x50, 0x5b, 0x31, 0x8f, 0xe5, - 0x99, 0xf3, 0x4d, 0x27, 0x2c, 0x46, 0xf8, 0x92, 0xc1, 0xab, - 0x15, 0x7f, 0x74, 0x1e, 0xa0, 0xca, 0xb6, 0xdc, 0x62, 0x08, - 0x03, 0x69, 0xd7, 0xbd, 0x2f, 0x45, 0xfb, 0x91, 0x9a, 0xf0, - 0x4e, 0x24, 0x58, 0x32, 0x8c, 0xe6, 0xed, 0x87, 0x39, 0x53, - 0x9f, 0xf5, 0x4b, 0x21, 0x2a, 0x40, 0xfe, 0x94, 0xe8, 0x82, - 0x3c, 0x56, 0x5d, 0x37, 0x89, 0xe3, 0x71, 0x1b, 0xa5, 0xcf, - 0xc4, 0xae, 0x10, 0x7a, 0x06, 0x6c, 0xd2, 0xb8, 0xb3, 0xd9, - 0x67, 0x0d, 0x5e, 0x34, 0x8a, 0xe0, 0xeb, 0x81, 0x3f, 0x55, - 0x29, 0x43, 0xfd, 0x97, 0x9c, 0xf6, 0x48, 0x22, 0xb0, 0xda, - 0x64, 0x0e, 0x05, 0x6f, 0xd1, 0xbb, 0xc7, 0xad, 0x13, 0x79, - 0x72, 0x18, 0xa6, 0xcc, 0x23, 0x49, 0xf7, 0x9d, 0x96, 0xfc, - 0x42, 0x28, 0x54, 0x3e, 0x80, 0xea, 0xe1, 0x8b, 0x35, 0x5f, - 0xcd, 0xa7, 0x19, 0x73, 0x78, 0x12, 0xac, 0xc6, 0xba, 0xd0, - 0x6e, 0x04, 0x0f, 0x65, 0xdb, 0xb1, 0xe2, 0x88, 0x36, 0x5c, - 0x57, 0x3d, 0x83, 0xe9, 0x95, 0xff, 0x41, 0x2b, 0x20, 0x4a, - 0xf4, 0x9e, 0x0c, 0x66, 0xd8, 0xb2, 0xb9, 0xd3, 0x6d, 0x07, - 0x7b, 0x11, 0xaf, 0xc5, 0xce, 0xa4, 0x1a, 0x70, 0xbc, 0xd6, - 0x68, 0x02, 0x09, 0x63, 0xdd, 0xb7, 0xcb, 0xa1, 0x1f, 0x75, - 0x7e, 0x14, 0xaa, 0xc0, 0x52, 0x38, 0x86, 0xec, 0xe7, 0x8d, - 0x33, 0x59, 0x25, 0x4f, 0xf1, 0x9b, 0x90, 0xfa, 0x44, 0x2e, - 0x7d, 0x17, 0xa9, 0xc3, 0xc8, 0xa2, 0x1c, 0x76, 0x0a, 0x60, - 0xde, 0xb4, 0xbf, 0xd5, 0x6b, 0x01, 0x93, 0xf9, 0x47, 0x2d, - 0x26, 0x4c, 0xf2, 0x98, 0xe4, 0x8e, 0x30, 0x5a, 0x51, 0x3b, - 0x85, 0xef, 0x00, 0x6b, 0xd6, 0xbd, 0xb1, 0xda, 0x67, 0x0c, - 0x7f, 0x14, 0xa9, 0xc2, 0xce, 0xa5, 0x18, 0x73, 0xfe, 0x95, - 0x28, 0x43, 0x4f, 0x24, 0x99, 0xf2, 0x81, 0xea, 0x57, 0x3c, - 0x30, 0x5b, 0xe6, 0x8d, 0xe1, 0x8a, 0x37, 0x5c, 0x50, 0x3b, - 0x86, 0xed, 0x9e, 0xf5, 0x48, 0x23, 0x2f, 0x44, 0xf9, 0x92, - 0x1f, 0x74, 0xc9, 0xa2, 0xae, 0xc5, 0x78, 0x13, 0x60, 0x0b, - 0xb6, 0xdd, 0xd1, 0xba, 0x07, 0x6c, 0xdf, 0xb4, 0x09, 0x62, - 0x6e, 0x05, 0xb8, 0xd3, 0xa0, 0xcb, 0x76, 0x1d, 0x11, 0x7a, - 0xc7, 0xac, 0x21, 0x4a, 0xf7, 0x9c, 0x90, 0xfb, 0x46, 0x2d, - 0x5e, 0x35, 0x88, 0xe3, 0xef, 0x84, 0x39, 0x52, 0x3e, 0x55, - 0xe8, 0x83, 0x8f, 0xe4, 0x59, 0x32, 0x41, 0x2a, 0x97, 0xfc, - 0xf0, 0x9b, 0x26, 0x4d, 0xc0, 0xab, 0x16, 0x7d, 0x71, 0x1a, - 0xa7, 0xcc, 0xbf, 0xd4, 0x69, 0x02, 0x0e, 0x65, 0xd8, 0xb3, - 0xa3, 0xc8, 0x75, 0x1e, 0x12, 0x79, 0xc4, 0xaf, 0xdc, 0xb7, - 0x0a, 0x61, 0x6d, 0x06, 0xbb, 0xd0, 0x5d, 0x36, 0x8b, 0xe0, - 0xec, 0x87, 0x3a, 0x51, 0x22, 0x49, 0xf4, 0x9f, 0x93, 0xf8, - 0x45, 0x2e, 0x42, 0x29, 0x94, 0xff, 0xf3, 0x98, 0x25, 0x4e, - 0x3d, 0x56, 0xeb, 0x80, 0x8c, 0xe7, 0x5a, 0x31, 0xbc, 0xd7, - 0x6a, 0x01, 0x0d, 0x66, 0xdb, 0xb0, 0xc3, 0xa8, 0x15, 0x7e, - 0x72, 0x19, 0xa4, 0xcf, 0x7c, 0x17, 0xaa, 0xc1, 0xcd, 0xa6, - 0x1b, 0x70, 0x03, 0x68, 0xd5, 0xbe, 0xb2, 0xd9, 0x64, 0x0f, - 0x82, 0xe9, 0x54, 0x3f, 0x33, 0x58, 0xe5, 0x8e, 0xfd, 0x96, - 0x2b, 0x40, 0x4c, 0x27, 0x9a, 0xf1, 0x9d, 0xf6, 0x4b, 0x20, - 0x2c, 0x47, 0xfa, 0x91, 0xe2, 0x89, 0x34, 0x5f, 0x53, 0x38, - 0x85, 0xee, 0x63, 0x08, 0xb5, 0xde, 0xd2, 0xb9, 0x04, 0x6f, - 0x1c, 0x77, 0xca, 0xa1, 0xad, 0xc6, 0x7b, 0x10, 0x00, 0x6c, - 0xd8, 0xb4, 0xad, 0xc1, 0x75, 0x19, 0x47, 0x2b, 0x9f, 0xf3, - 0xea, 0x86, 0x32, 0x5e, 0x8e, 0xe2, 0x56, 0x3a, 0x23, 0x4f, - 0xfb, 0x97, 0xc9, 0xa5, 0x11, 0x7d, 0x64, 0x08, 0xbc, 0xd0, - 0x01, 0x6d, 0xd9, 0xb5, 0xac, 0xc0, 0x74, 0x18, 0x46, 0x2a, - 0x9e, 0xf2, 0xeb, 0x87, 0x33, 0x5f, 0x8f, 0xe3, 0x57, 0x3b, - 0x22, 0x4e, 0xfa, 0x96, 0xc8, 0xa4, 0x10, 0x7c, 0x65, 0x09, - 0xbd, 0xd1, 0x02, 0x6e, 0xda, 0xb6, 0xaf, 0xc3, 0x77, 0x1b, - 0x45, 0x29, 0x9d, 0xf1, 0xe8, 0x84, 0x30, 0x5c, 0x8c, 0xe0, - 0x54, 0x38, 0x21, 0x4d, 0xf9, 0x95, 0xcb, 0xa7, 0x13, 0x7f, - 0x66, 0x0a, 0xbe, 0xd2, 0x03, 0x6f, 0xdb, 0xb7, 0xae, 0xc2, - 0x76, 0x1a, 0x44, 0x28, 0x9c, 0xf0, 0xe9, 0x85, 0x31, 0x5d, - 0x8d, 0xe1, 0x55, 0x39, 0x20, 0x4c, 0xf8, 0x94, 0xca, 0xa6, - 0x12, 0x7e, 0x67, 0x0b, 0xbf, 0xd3, 0x04, 0x68, 0xdc, 0xb0, - 0xa9, 0xc5, 0x71, 0x1d, 0x43, 0x2f, 0x9b, 0xf7, 0xee, 0x82, - 0x36, 0x5a, 0x8a, 0xe6, 0x52, 0x3e, 0x27, 0x4b, 0xff, 0x93, - 0xcd, 0xa1, 0x15, 0x79, 0x60, 0x0c, 0xb8, 0xd4, 0x05, 0x69, - 0xdd, 0xb1, 0xa8, 0xc4, 0x70, 0x1c, 0x42, 0x2e, 0x9a, 0xf6, - 0xef, 0x83, 0x37, 0x5b, 0x8b, 0xe7, 0x53, 0x3f, 0x26, 0x4a, - 0xfe, 0x92, 0xcc, 0xa0, 0x14, 0x78, 0x61, 0x0d, 0xb9, 0xd5, - 0x06, 0x6a, 0xde, 0xb2, 0xab, 0xc7, 0x73, 0x1f, 0x41, 0x2d, - 0x99, 0xf5, 0xec, 0x80, 0x34, 0x58, 0x88, 0xe4, 0x50, 0x3c, - 0x25, 0x49, 0xfd, 0x91, 0xcf, 0xa3, 0x17, 0x7b, 0x62, 0x0e, - 0xba, 0xd6, 0x07, 0x6b, 0xdf, 0xb3, 0xaa, 0xc6, 0x72, 0x1e, - 0x40, 0x2c, 0x98, 0xf4, 0xed, 0x81, 0x35, 0x59, 0x89, 0xe5, - 0x51, 0x3d, 0x24, 0x48, 0xfc, 0x90, 0xce, 0xa2, 0x16, 0x7a, - 0x63, 0x0f, 0xbb, 0xd7, 0x00, 0x6d, 0xda, 0xb7, 0xa9, 0xc4, - 0x73, 0x1e, 0x4f, 0x22, 0x95, 0xf8, 0xe6, 0x8b, 0x3c, 0x51, - 0x9e, 0xf3, 0x44, 0x29, 0x37, 0x5a, 0xed, 0x80, 0xd1, 0xbc, - 0x0b, 0x66, 0x78, 0x15, 0xa2, 0xcf, 0x21, 0x4c, 0xfb, 0x96, - 0x88, 0xe5, 0x52, 0x3f, 0x6e, 0x03, 0xb4, 0xd9, 0xc7, 0xaa, - 0x1d, 0x70, 0xbf, 0xd2, 0x65, 0x08, 0x16, 0x7b, 0xcc, 0xa1, - 0xf0, 0x9d, 0x2a, 0x47, 0x59, 0x34, 0x83, 0xee, 0x42, 0x2f, - 0x98, 0xf5, 0xeb, 0x86, 0x31, 0x5c, 0x0d, 0x60, 0xd7, 0xba, - 0xa4, 0xc9, 0x7e, 0x13, 0xdc, 0xb1, 0x06, 0x6b, 0x75, 0x18, - 0xaf, 0xc2, 0x93, 0xfe, 0x49, 0x24, 0x3a, 0x57, 0xe0, 0x8d, - 0x63, 0x0e, 0xb9, 0xd4, 0xca, 0xa7, 0x10, 0x7d, 0x2c, 0x41, - 0xf6, 0x9b, 0x85, 0xe8, 0x5f, 0x32, 0xfd, 0x90, 0x27, 0x4a, - 0x54, 0x39, 0x8e, 0xe3, 0xb2, 0xdf, 0x68, 0x05, 0x1b, 0x76, - 0xc1, 0xac, 0x84, 0xe9, 0x5e, 0x33, 0x2d, 0x40, 0xf7, 0x9a, - 0xcb, 0xa6, 0x11, 0x7c, 0x62, 0x0f, 0xb8, 0xd5, 0x1a, 0x77, - 0xc0, 0xad, 0xb3, 0xde, 0x69, 0x04, 0x55, 0x38, 0x8f, 0xe2, - 0xfc, 0x91, 0x26, 0x4b, 0xa5, 0xc8, 0x7f, 0x12, 0x0c, 0x61, - 0xd6, 0xbb, 0xea, 0x87, 0x30, 0x5d, 0x43, 0x2e, 0x99, 0xf4, - 0x3b, 0x56, 0xe1, 0x8c, 0x92, 0xff, 0x48, 0x25, 0x74, 0x19, - 0xae, 0xc3, 0xdd, 0xb0, 0x07, 0x6a, 0xc6, 0xab, 0x1c, 0x71, - 0x6f, 0x02, 0xb5, 0xd8, 0x89, 0xe4, 0x53, 0x3e, 0x20, 0x4d, - 0xfa, 0x97, 0x58, 0x35, 0x82, 0xef, 0xf1, 0x9c, 0x2b, 0x46, - 0x17, 0x7a, 0xcd, 0xa0, 0xbe, 0xd3, 0x64, 0x09, 0xe7, 0x8a, - 0x3d, 0x50, 0x4e, 0x23, 0x94, 0xf9, 0xa8, 0xc5, 0x72, 0x1f, - 0x01, 0x6c, 0xdb, 0xb6, 0x79, 0x14, 0xa3, 0xce, 0xd0, 0xbd, - 0x0a, 0x67, 0x36, 0x5b, 0xec, 0x81, 0x9f, 0xf2, 0x45, 0x28, - 0x00, 0x6e, 0xdc, 0xb2, 0xa5, 0xcb, 0x79, 0x17, 0x57, 0x39, - 0x8b, 0xe5, 0xf2, 0x9c, 0x2e, 0x40, 0xae, 0xc0, 0x72, 0x1c, - 0x0b, 0x65, 0xd7, 0xb9, 0xf9, 0x97, 0x25, 0x4b, 0x5c, 0x32, - 0x80, 0xee, 0x41, 0x2f, 0x9d, 0xf3, 0xe4, 0x8a, 0x38, 0x56, - 0x16, 0x78, 0xca, 0xa4, 0xb3, 0xdd, 0x6f, 0x01, 0xef, 0x81, - 0x33, 0x5d, 0x4a, 0x24, 0x96, 0xf8, 0xb8, 0xd6, 0x64, 0x0a, - 0x1d, 0x73, 0xc1, 0xaf, 0x82, 0xec, 0x5e, 0x30, 0x27, 0x49, - 0xfb, 0x95, 0xd5, 0xbb, 0x09, 0x67, 0x70, 0x1e, 0xac, 0xc2, - 0x2c, 0x42, 0xf0, 0x9e, 0x89, 0xe7, 0x55, 0x3b, 0x7b, 0x15, - 0xa7, 0xc9, 0xde, 0xb0, 0x02, 0x6c, 0xc3, 0xad, 0x1f, 0x71, - 0x66, 0x08, 0xba, 0xd4, 0x94, 0xfa, 0x48, 0x26, 0x31, 0x5f, - 0xed, 0x83, 0x6d, 0x03, 0xb1, 0xdf, 0xc8, 0xa6, 0x14, 0x7a, - 0x3a, 0x54, 0xe6, 0x88, 0x9f, 0xf1, 0x43, 0x2d, 0x19, 0x77, - 0xc5, 0xab, 0xbc, 0xd2, 0x60, 0x0e, 0x4e, 0x20, 0x92, 0xfc, - 0xeb, 0x85, 0x37, 0x59, 0xb7, 0xd9, 0x6b, 0x05, 0x12, 0x7c, - 0xce, 0xa0, 0xe0, 0x8e, 0x3c, 0x52, 0x45, 0x2b, 0x99, 0xf7, - 0x58, 0x36, 0x84, 0xea, 0xfd, 0x93, 0x21, 0x4f, 0x0f, 0x61, - 0xd3, 0xbd, 0xaa, 0xc4, 0x76, 0x18, 0xf6, 0x98, 0x2a, 0x44, - 0x53, 0x3d, 0x8f, 0xe1, 0xa1, 0xcf, 0x7d, 0x13, 0x04, 0x6a, - 0xd8, 0xb6, 0x9b, 0xf5, 0x47, 0x29, 0x3e, 0x50, 0xe2, 0x8c, - 0xcc, 0xa2, 0x10, 0x7e, 0x69, 0x07, 0xb5, 0xdb, 0x35, 0x5b, - 0xe9, 0x87, 0x90, 0xfe, 0x4c, 0x22, 0x62, 0x0c, 0xbe, 0xd0, - 0xc7, 0xa9, 0x1b, 0x75, 0xda, 0xb4, 0x06, 0x68, 0x7f, 0x11, - 0xa3, 0xcd, 0x8d, 0xe3, 0x51, 0x3f, 0x28, 0x46, 0xf4, 0x9a, - 0x74, 0x1a, 0xa8, 0xc6, 0xd1, 0xbf, 0x0d, 0x63, 0x23, 0x4d, - 0xff, 0x91, 0x86, 0xe8, 0x5a, 0x34, 0x00, 0x6f, 0xde, 0xb1, - 0xa1, 0xce, 0x7f, 0x10, 0x5f, 0x30, 0x81, 0xee, 0xfe, 0x91, - 0x20, 0x4f, 0xbe, 0xd1, 0x60, 0x0f, 0x1f, 0x70, 0xc1, 0xae, - 0xe1, 0x8e, 0x3f, 0x50, 0x40, 0x2f, 0x9e, 0xf1, 0x61, 0x0e, - 0xbf, 0xd0, 0xc0, 0xaf, 0x1e, 0x71, 0x3e, 0x51, 0xe0, 0x8f, - 0x9f, 0xf0, 0x41, 0x2e, 0xdf, 0xb0, 0x01, 0x6e, 0x7e, 0x11, - 0xa0, 0xcf, 0x80, 0xef, 0x5e, 0x31, 0x21, 0x4e, 0xff, 0x90, - 0xc2, 0xad, 0x1c, 0x73, 0x63, 0x0c, 0xbd, 0xd2, 0x9d, 0xf2, - 0x43, 0x2c, 0x3c, 0x53, 0xe2, 0x8d, 0x7c, 0x13, 0xa2, 0xcd, - 0xdd, 0xb2, 0x03, 0x6c, 0x23, 0x4c, 0xfd, 0x92, 0x82, 0xed, - 0x5c, 0x33, 0xa3, 0xcc, 0x7d, 0x12, 0x02, 0x6d, 0xdc, 0xb3, - 0xfc, 0x93, 0x22, 0x4d, 0x5d, 0x32, 0x83, 0xec, 0x1d, 0x72, - 0xc3, 0xac, 0xbc, 0xd3, 0x62, 0x0d, 0x42, 0x2d, 0x9c, 0xf3, - 0xe3, 0x8c, 0x3d, 0x52, 0x99, 0xf6, 0x47, 0x28, 0x38, 0x57, - 0xe6, 0x89, 0xc6, 0xa9, 0x18, 0x77, 0x67, 0x08, 0xb9, 0xd6, - 0x27, 0x48, 0xf9, 0x96, 0x86, 0xe9, 0x58, 0x37, 0x78, 0x17, - 0xa6, 0xc9, 0xd9, 0xb6, 0x07, 0x68, 0xf8, 0x97, 0x26, 0x49, - 0x59, 0x36, 0x87, 0xe8, 0xa7, 0xc8, 0x79, 0x16, 0x06, 0x69, - 0xd8, 0xb7, 0x46, 0x29, 0x98, 0xf7, 0xe7, 0x88, 0x39, 0x56, - 0x19, 0x76, 0xc7, 0xa8, 0xb8, 0xd7, 0x66, 0x09, 0x5b, 0x34, - 0x85, 0xea, 0xfa, 0x95, 0x24, 0x4b, 0x04, 0x6b, 0xda, 0xb5, - 0xa5, 0xca, 0x7b, 0x14, 0xe5, 0x8a, 0x3b, 0x54, 0x44, 0x2b, - 0x9a, 0xf5, 0xba, 0xd5, 0x64, 0x0b, 0x1b, 0x74, 0xc5, 0xaa, - 0x3a, 0x55, 0xe4, 0x8b, 0x9b, 0xf4, 0x45, 0x2a, 0x65, 0x0a, - 0xbb, 0xd4, 0xc4, 0xab, 0x1a, 0x75, 0x84, 0xeb, 0x5a, 0x35, - 0x25, 0x4a, 0xfb, 0x94, 0xdb, 0xb4, 0x05, 0x6a, 0x7a, 0x15, - 0xa4, 0xcb, 0x00, 0x70, 0xe0, 0x90, 0xdd, 0xad, 0x3d, 0x4d, - 0xa7, 0xd7, 0x47, 0x37, 0x7a, 0x0a, 0x9a, 0xea, 0x53, 0x23, - 0xb3, 0xc3, 0x8e, 0xfe, 0x6e, 0x1e, 0xf4, 0x84, 0x14, 0x64, - 0x29, 0x59, 0xc9, 0xb9, 0xa6, 0xd6, 0x46, 0x36, 0x7b, 0x0b, - 0x9b, 0xeb, 0x01, 0x71, 0xe1, 0x91, 0xdc, 0xac, 0x3c, 0x4c, - 0xf5, 0x85, 0x15, 0x65, 0x28, 0x58, 0xc8, 0xb8, 0x52, 0x22, - 0xb2, 0xc2, 0x8f, 0xff, 0x6f, 0x1f, 0x51, 0x21, 0xb1, 0xc1, - 0x8c, 0xfc, 0x6c, 0x1c, 0xf6, 0x86, 0x16, 0x66, 0x2b, 0x5b, - 0xcb, 0xbb, 0x02, 0x72, 0xe2, 0x92, 0xdf, 0xaf, 0x3f, 0x4f, - 0xa5, 0xd5, 0x45, 0x35, 0x78, 0x08, 0x98, 0xe8, 0xf7, 0x87, - 0x17, 0x67, 0x2a, 0x5a, 0xca, 0xba, 0x50, 0x20, 0xb0, 0xc0, - 0x8d, 0xfd, 0x6d, 0x1d, 0xa4, 0xd4, 0x44, 0x34, 0x79, 0x09, - 0x99, 0xe9, 0x03, 0x73, 0xe3, 0x93, 0xde, 0xae, 0x3e, 0x4e, - 0xa2, 0xd2, 0x42, 0x32, 0x7f, 0x0f, 0x9f, 0xef, 0x05, 0x75, - 0xe5, 0x95, 0xd8, 0xa8, 0x38, 0x48, 0xf1, 0x81, 0x11, 0x61, - 0x2c, 0x5c, 0xcc, 0xbc, 0x56, 0x26, 0xb6, 0xc6, 0x8b, 0xfb, - 0x6b, 0x1b, 0x04, 0x74, 0xe4, 0x94, 0xd9, 0xa9, 0x39, 0x49, - 0xa3, 0xd3, 0x43, 0x33, 0x7e, 0x0e, 0x9e, 0xee, 0x57, 0x27, - 0xb7, 0xc7, 0x8a, 0xfa, 0x6a, 0x1a, 0xf0, 0x80, 0x10, 0x60, - 0x2d, 0x5d, 0xcd, 0xbd, 0xf3, 0x83, 0x13, 0x63, 0x2e, 0x5e, - 0xce, 0xbe, 0x54, 0x24, 0xb4, 0xc4, 0x89, 0xf9, 0x69, 0x19, - 0xa0, 0xd0, 0x40, 0x30, 0x7d, 0x0d, 0x9d, 0xed, 0x07, 0x77, - 0xe7, 0x97, 0xda, 0xaa, 0x3a, 0x4a, 0x55, 0x25, 0xb5, 0xc5, - 0x88, 0xf8, 0x68, 0x18, 0xf2, 0x82, 0x12, 0x62, 0x2f, 0x5f, - 0xcf, 0xbf, 0x06, 0x76, 0xe6, 0x96, 0xdb, 0xab, 0x3b, 0x4b, - 0xa1, 0xd1, 0x41, 0x31, 0x7c, 0x0c, 0x9c, 0xec, 0x00, 0x71, - 0xe2, 0x93, 0xd9, 0xa8, 0x3b, 0x4a, 0xaf, 0xde, 0x4d, 0x3c, - 0x76, 0x07, 0x94, 0xe5, 0x43, 0x32, 0xa1, 0xd0, 0x9a, 0xeb, - 0x78, 0x09, 0xec, 0x9d, 0x0e, 0x7f, 0x35, 0x44, 0xd7, 0xa6, - 0x86, 0xf7, 0x64, 0x15, 0x5f, 0x2e, 0xbd, 0xcc, 0x29, 0x58, - 0xcb, 0xba, 0xf0, 0x81, 0x12, 0x63, 0xc5, 0xb4, 0x27, 0x56, - 0x1c, 0x6d, 0xfe, 0x8f, 0x6a, 0x1b, 0x88, 0xf9, 0xb3, 0xc2, - 0x51, 0x20, 0x11, 0x60, 0xf3, 0x82, 0xc8, 0xb9, 0x2a, 0x5b, - 0xbe, 0xcf, 0x5c, 0x2d, 0x67, 0x16, 0x85, 0xf4, 0x52, 0x23, - 0xb0, 0xc1, 0x8b, 0xfa, 0x69, 0x18, 0xfd, 0x8c, 0x1f, 0x6e, - 0x24, 0x55, 0xc6, 0xb7, 0x97, 0xe6, 0x75, 0x04, 0x4e, 0x3f, - 0xac, 0xdd, 0x38, 0x49, 0xda, 0xab, 0xe1, 0x90, 0x03, 0x72, - 0xd4, 0xa5, 0x36, 0x47, 0x0d, 0x7c, 0xef, 0x9e, 0x7b, 0x0a, - 0x99, 0xe8, 0xa2, 0xd3, 0x40, 0x31, 0x22, 0x53, 0xc0, 0xb1, - 0xfb, 0x8a, 0x19, 0x68, 0x8d, 0xfc, 0x6f, 0x1e, 0x54, 0x25, - 0xb6, 0xc7, 0x61, 0x10, 0x83, 0xf2, 0xb8, 0xc9, 0x5a, 0x2b, - 0xce, 0xbf, 0x2c, 0x5d, 0x17, 0x66, 0xf5, 0x84, 0xa4, 0xd5, - 0x46, 0x37, 0x7d, 0x0c, 0x9f, 0xee, 0x0b, 0x7a, 0xe9, 0x98, - 0xd2, 0xa3, 0x30, 0x41, 0xe7, 0x96, 0x05, 0x74, 0x3e, 0x4f, - 0xdc, 0xad, 0x48, 0x39, 0xaa, 0xdb, 0x91, 0xe0, 0x73, 0x02, - 0x33, 0x42, 0xd1, 0xa0, 0xea, 0x9b, 0x08, 0x79, 0x9c, 0xed, - 0x7e, 0x0f, 0x45, 0x34, 0xa7, 0xd6, 0x70, 0x01, 0x92, 0xe3, - 0xa9, 0xd8, 0x4b, 0x3a, 0xdf, 0xae, 0x3d, 0x4c, 0x06, 0x77, - 0xe4, 0x95, 0xb5, 0xc4, 0x57, 0x26, 0x6c, 0x1d, 0x8e, 0xff, - 0x1a, 0x6b, 0xf8, 0x89, 0xc3, 0xb2, 0x21, 0x50, 0xf6, 0x87, - 0x14, 0x65, 0x2f, 0x5e, 0xcd, 0xbc, 0x59, 0x28, 0xbb, 0xca, - 0x80, 0xf1, 0x62, 0x13, 0x00, 0x72, 0xe4, 0x96, 0xd5, 0xa7, - 0x31, 0x43, 0xb7, 0xc5, 0x53, 0x21, 0x62, 0x10, 0x86, 0xf4, - 0x73, 0x01, 0x97, 0xe5, 0xa6, 0xd4, 0x42, 0x30, 0xc4, 0xb6, - 0x20, 0x52, 0x11, 0x63, 0xf5, 0x87, 0xe6, 0x94, 0x02, 0x70, - 0x33, 0x41, 0xd7, 0xa5, 0x51, 0x23, 0xb5, 0xc7, 0x84, 0xf6, - 0x60, 0x12, 0x95, 0xe7, 0x71, 0x03, 0x40, 0x32, 0xa4, 0xd6, - 0x22, 0x50, 0xc6, 0xb4, 0xf7, 0x85, 0x13, 0x61, 0xd1, 0xa3, - 0x35, 0x47, 0x04, 0x76, 0xe0, 0x92, 0x66, 0x14, 0x82, 0xf0, - 0xb3, 0xc1, 0x57, 0x25, 0xa2, 0xd0, 0x46, 0x34, 0x77, 0x05, - 0x93, 0xe1, 0x15, 0x67, 0xf1, 0x83, 0xc0, 0xb2, 0x24, 0x56, - 0x37, 0x45, 0xd3, 0xa1, 0xe2, 0x90, 0x06, 0x74, 0x80, 0xf2, - 0x64, 0x16, 0x55, 0x27, 0xb1, 0xc3, 0x44, 0x36, 0xa0, 0xd2, - 0x91, 0xe3, 0x75, 0x07, 0xf3, 0x81, 0x17, 0x65, 0x26, 0x54, - 0xc2, 0xb0, 0xbf, 0xcd, 0x5b, 0x29, 0x6a, 0x18, 0x8e, 0xfc, - 0x08, 0x7a, 0xec, 0x9e, 0xdd, 0xaf, 0x39, 0x4b, 0xcc, 0xbe, - 0x28, 0x5a, 0x19, 0x6b, 0xfd, 0x8f, 0x7b, 0x09, 0x9f, 0xed, - 0xae, 0xdc, 0x4a, 0x38, 0x59, 0x2b, 0xbd, 0xcf, 0x8c, 0xfe, - 0x68, 0x1a, 0xee, 0x9c, 0x0a, 0x78, 0x3b, 0x49, 0xdf, 0xad, - 0x2a, 0x58, 0xce, 0xbc, 0xff, 0x8d, 0x1b, 0x69, 0x9d, 0xef, - 0x79, 0x0b, 0x48, 0x3a, 0xac, 0xde, 0x6e, 0x1c, 0x8a, 0xf8, - 0xbb, 0xc9, 0x5f, 0x2d, 0xd9, 0xab, 0x3d, 0x4f, 0x0c, 0x7e, - 0xe8, 0x9a, 0x1d, 0x6f, 0xf9, 0x8b, 0xc8, 0xba, 0x2c, 0x5e, - 0xaa, 0xd8, 0x4e, 0x3c, 0x7f, 0x0d, 0x9b, 0xe9, 0x88, 0xfa, - 0x6c, 0x1e, 0x5d, 0x2f, 0xb9, 0xcb, 0x3f, 0x4d, 0xdb, 0xa9, - 0xea, 0x98, 0x0e, 0x7c, 0xfb, 0x89, 0x1f, 0x6d, 0x2e, 0x5c, - 0xca, 0xb8, 0x4c, 0x3e, 0xa8, 0xda, 0x99, 0xeb, 0x7d, 0x0f, - 0x00, 0x73, 0xe6, 0x95, 0xd1, 0xa2, 0x37, 0x44, 0xbf, 0xcc, - 0x59, 0x2a, 0x6e, 0x1d, 0x88, 0xfb, 0x63, 0x10, 0x85, 0xf6, - 0xb2, 0xc1, 0x54, 0x27, 0xdc, 0xaf, 0x3a, 0x49, 0x0d, 0x7e, - 0xeb, 0x98, 0xc6, 0xb5, 0x20, 0x53, 0x17, 0x64, 0xf1, 0x82, - 0x79, 0x0a, 0x9f, 0xec, 0xa8, 0xdb, 0x4e, 0x3d, 0xa5, 0xd6, - 0x43, 0x30, 0x74, 0x07, 0x92, 0xe1, 0x1a, 0x69, 0xfc, 0x8f, - 0xcb, 0xb8, 0x2d, 0x5e, 0x91, 0xe2, 0x77, 0x04, 0x40, 0x33, - 0xa6, 0xd5, 0x2e, 0x5d, 0xc8, 0xbb, 0xff, 0x8c, 0x19, 0x6a, - 0xf2, 0x81, 0x14, 0x67, 0x23, 0x50, 0xc5, 0xb6, 0x4d, 0x3e, - 0xab, 0xd8, 0x9c, 0xef, 0x7a, 0x09, 0x57, 0x24, 0xb1, 0xc2, - 0x86, 0xf5, 0x60, 0x13, 0xe8, 0x9b, 0x0e, 0x7d, 0x39, 0x4a, - 0xdf, 0xac, 0x34, 0x47, 0xd2, 0xa1, 0xe5, 0x96, 0x03, 0x70, - 0x8b, 0xf8, 0x6d, 0x1e, 0x5a, 0x29, 0xbc, 0xcf, 0x3f, 0x4c, - 0xd9, 0xaa, 0xee, 0x9d, 0x08, 0x7b, 0x80, 0xf3, 0x66, 0x15, - 0x51, 0x22, 0xb7, 0xc4, 0x5c, 0x2f, 0xba, 0xc9, 0x8d, 0xfe, - 0x6b, 0x18, 0xe3, 0x90, 0x05, 0x76, 0x32, 0x41, 0xd4, 0xa7, - 0xf9, 0x8a, 0x1f, 0x6c, 0x28, 0x5b, 0xce, 0xbd, 0x46, 0x35, - 0xa0, 0xd3, 0x97, 0xe4, 0x71, 0x02, 0x9a, 0xe9, 0x7c, 0x0f, - 0x4b, 0x38, 0xad, 0xde, 0x25, 0x56, 0xc3, 0xb0, 0xf4, 0x87, - 0x12, 0x61, 0xae, 0xdd, 0x48, 0x3b, 0x7f, 0x0c, 0x99, 0xea, - 0x11, 0x62, 0xf7, 0x84, 0xc0, 0xb3, 0x26, 0x55, 0xcd, 0xbe, - 0x2b, 0x58, 0x1c, 0x6f, 0xfa, 0x89, 0x72, 0x01, 0x94, 0xe7, - 0xa3, 0xd0, 0x45, 0x36, 0x68, 0x1b, 0x8e, 0xfd, 0xb9, 0xca, - 0x5f, 0x2c, 0xd7, 0xa4, 0x31, 0x42, 0x06, 0x75, 0xe0, 0x93, - 0x0b, 0x78, 0xed, 0x9e, 0xda, 0xa9, 0x3c, 0x4f, 0xb4, 0xc7, - 0x52, 0x21, 0x65, 0x16, 0x83, 0xf0, 0x00, 0x74, 0xe8, 0x9c, - 0xcd, 0xb9, 0x25, 0x51, 0x87, 0xf3, 0x6f, 0x1b, 0x4a, 0x3e, - 0xa2, 0xd6, 0x13, 0x67, 0xfb, 0x8f, 0xde, 0xaa, 0x36, 0x42, - 0x94, 0xe0, 0x7c, 0x08, 0x59, 0x2d, 0xb1, 0xc5, 0x26, 0x52, - 0xce, 0xba, 0xeb, 0x9f, 0x03, 0x77, 0xa1, 0xd5, 0x49, 0x3d, - 0x6c, 0x18, 0x84, 0xf0, 0x35, 0x41, 0xdd, 0xa9, 0xf8, 0x8c, - 0x10, 0x64, 0xb2, 0xc6, 0x5a, 0x2e, 0x7f, 0x0b, 0x97, 0xe3, - 0x4c, 0x38, 0xa4, 0xd0, 0x81, 0xf5, 0x69, 0x1d, 0xcb, 0xbf, - 0x23, 0x57, 0x06, 0x72, 0xee, 0x9a, 0x5f, 0x2b, 0xb7, 0xc3, - 0x92, 0xe6, 0x7a, 0x0e, 0xd8, 0xac, 0x30, 0x44, 0x15, 0x61, - 0xfd, 0x89, 0x6a, 0x1e, 0x82, 0xf6, 0xa7, 0xd3, 0x4f, 0x3b, - 0xed, 0x99, 0x05, 0x71, 0x20, 0x54, 0xc8, 0xbc, 0x79, 0x0d, - 0x91, 0xe5, 0xb4, 0xc0, 0x5c, 0x28, 0xfe, 0x8a, 0x16, 0x62, - 0x33, 0x47, 0xdb, 0xaf, 0x98, 0xec, 0x70, 0x04, 0x55, 0x21, - 0xbd, 0xc9, 0x1f, 0x6b, 0xf7, 0x83, 0xd2, 0xa6, 0x3a, 0x4e, - 0x8b, 0xff, 0x63, 0x17, 0x46, 0x32, 0xae, 0xda, 0x0c, 0x78, - 0xe4, 0x90, 0xc1, 0xb5, 0x29, 0x5d, 0xbe, 0xca, 0x56, 0x22, - 0x73, 0x07, 0x9b, 0xef, 0x39, 0x4d, 0xd1, 0xa5, 0xf4, 0x80, - 0x1c, 0x68, 0xad, 0xd9, 0x45, 0x31, 0x60, 0x14, 0x88, 0xfc, - 0x2a, 0x5e, 0xc2, 0xb6, 0xe7, 0x93, 0x0f, 0x7b, 0xd4, 0xa0, - 0x3c, 0x48, 0x19, 0x6d, 0xf1, 0x85, 0x53, 0x27, 0xbb, 0xcf, - 0x9e, 0xea, 0x76, 0x02, 0xc7, 0xb3, 0x2f, 0x5b, 0x0a, 0x7e, - 0xe2, 0x96, 0x40, 0x34, 0xa8, 0xdc, 0x8d, 0xf9, 0x65, 0x11, - 0xf2, 0x86, 0x1a, 0x6e, 0x3f, 0x4b, 0xd7, 0xa3, 0x75, 0x01, - 0x9d, 0xe9, 0xb8, 0xcc, 0x50, 0x24, 0xe1, 0x95, 0x09, 0x7d, - 0x2c, 0x58, 0xc4, 0xb0, 0x66, 0x12, 0x8e, 0xfa, 0xab, 0xdf, - 0x43, 0x37, 0x00, 0x75, 0xea, 0x9f, 0xc9, 0xbc, 0x23, 0x56, - 0x8f, 0xfa, 0x65, 0x10, 0x46, 0x33, 0xac, 0xd9, 0x03, 0x76, - 0xe9, 0x9c, 0xca, 0xbf, 0x20, 0x55, 0x8c, 0xf9, 0x66, 0x13, - 0x45, 0x30, 0xaf, 0xda, 0x06, 0x73, 0xec, 0x99, 0xcf, 0xba, - 0x25, 0x50, 0x89, 0xfc, 0x63, 0x16, 0x40, 0x35, 0xaa, 0xdf, - 0x05, 0x70, 0xef, 0x9a, 0xcc, 0xb9, 0x26, 0x53, 0x8a, 0xff, - 0x60, 0x15, 0x43, 0x36, 0xa9, 0xdc, 0x0c, 0x79, 0xe6, 0x93, - 0xc5, 0xb0, 0x2f, 0x5a, 0x83, 0xf6, 0x69, 0x1c, 0x4a, 0x3f, - 0xa0, 0xd5, 0x0f, 0x7a, 0xe5, 0x90, 0xc6, 0xb3, 0x2c, 0x59, - 0x80, 0xf5, 0x6a, 0x1f, 0x49, 0x3c, 0xa3, 0xd6, 0x0a, 0x7f, - 0xe0, 0x95, 0xc3, 0xb6, 0x29, 0x5c, 0x85, 0xf0, 0x6f, 0x1a, - 0x4c, 0x39, 0xa6, 0xd3, 0x09, 0x7c, 0xe3, 0x96, 0xc0, 0xb5, - 0x2a, 0x5f, 0x86, 0xf3, 0x6c, 0x19, 0x4f, 0x3a, 0xa5, 0xd0, - 0x18, 0x6d, 0xf2, 0x87, 0xd1, 0xa4, 0x3b, 0x4e, 0x97, 0xe2, - 0x7d, 0x08, 0x5e, 0x2b, 0xb4, 0xc1, 0x1b, 0x6e, 0xf1, 0x84, - 0xd2, 0xa7, 0x38, 0x4d, 0x94, 0xe1, 0x7e, 0x0b, 0x5d, 0x28, - 0xb7, 0xc2, 0x1e, 0x6b, 0xf4, 0x81, 0xd7, 0xa2, 0x3d, 0x48, - 0x91, 0xe4, 0x7b, 0x0e, 0x58, 0x2d, 0xb2, 0xc7, 0x1d, 0x68, - 0xf7, 0x82, 0xd4, 0xa1, 0x3e, 0x4b, 0x92, 0xe7, 0x78, 0x0d, - 0x5b, 0x2e, 0xb1, 0xc4, 0x14, 0x61, 0xfe, 0x8b, 0xdd, 0xa8, - 0x37, 0x42, 0x9b, 0xee, 0x71, 0x04, 0x52, 0x27, 0xb8, 0xcd, - 0x17, 0x62, 0xfd, 0x88, 0xde, 0xab, 0x34, 0x41, 0x98, 0xed, - 0x72, 0x07, 0x51, 0x24, 0xbb, 0xce, 0x12, 0x67, 0xf8, 0x8d, - 0xdb, 0xae, 0x31, 0x44, 0x9d, 0xe8, 0x77, 0x02, 0x54, 0x21, - 0xbe, 0xcb, 0x11, 0x64, 0xfb, 0x8e, 0xd8, 0xad, 0x32, 0x47, - 0x9e, 0xeb, 0x74, 0x01, 0x57, 0x22, 0xbd, 0xc8, 0x00, 0x76, - 0xec, 0x9a, 0xc5, 0xb3, 0x29, 0x5f, 0x97, 0xe1, 0x7b, 0x0d, - 0x52, 0x24, 0xbe, 0xc8, 0x33, 0x45, 0xdf, 0xa9, 0xf6, 0x80, - 0x1a, 0x6c, 0xa4, 0xd2, 0x48, 0x3e, 0x61, 0x17, 0x8d, 0xfb, - 0x66, 0x10, 0x8a, 0xfc, 0xa3, 0xd5, 0x4f, 0x39, 0xf1, 0x87, - 0x1d, 0x6b, 0x34, 0x42, 0xd8, 0xae, 0x55, 0x23, 0xb9, 0xcf, - 0x90, 0xe6, 0x7c, 0x0a, 0xc2, 0xb4, 0x2e, 0x58, 0x07, 0x71, - 0xeb, 0x9d, 0xcc, 0xba, 0x20, 0x56, 0x09, 0x7f, 0xe5, 0x93, - 0x5b, 0x2d, 0xb7, 0xc1, 0x9e, 0xe8, 0x72, 0x04, 0xff, 0x89, - 0x13, 0x65, 0x3a, 0x4c, 0xd6, 0xa0, 0x68, 0x1e, 0x84, 0xf2, - 0xad, 0xdb, 0x41, 0x37, 0xaa, 0xdc, 0x46, 0x30, 0x6f, 0x19, - 0x83, 0xf5, 0x3d, 0x4b, 0xd1, 0xa7, 0xf8, 0x8e, 0x14, 0x62, - 0x99, 0xef, 0x75, 0x03, 0x5c, 0x2a, 0xb0, 0xc6, 0x0e, 0x78, - 0xe2, 0x94, 0xcb, 0xbd, 0x27, 0x51, 0x85, 0xf3, 0x69, 0x1f, - 0x40, 0x36, 0xac, 0xda, 0x12, 0x64, 0xfe, 0x88, 0xd7, 0xa1, - 0x3b, 0x4d, 0xb6, 0xc0, 0x5a, 0x2c, 0x73, 0x05, 0x9f, 0xe9, - 0x21, 0x57, 0xcd, 0xbb, 0xe4, 0x92, 0x08, 0x7e, 0xe3, 0x95, - 0x0f, 0x79, 0x26, 0x50, 0xca, 0xbc, 0x74, 0x02, 0x98, 0xee, - 0xb1, 0xc7, 0x5d, 0x2b, 0xd0, 0xa6, 0x3c, 0x4a, 0x15, 0x63, - 0xf9, 0x8f, 0x47, 0x31, 0xab, 0xdd, 0x82, 0xf4, 0x6e, 0x18, - 0x49, 0x3f, 0xa5, 0xd3, 0x8c, 0xfa, 0x60, 0x16, 0xde, 0xa8, - 0x32, 0x44, 0x1b, 0x6d, 0xf7, 0x81, 0x7a, 0x0c, 0x96, 0xe0, - 0xbf, 0xc9, 0x53, 0x25, 0xed, 0x9b, 0x01, 0x77, 0x28, 0x5e, - 0xc4, 0xb2, 0x2f, 0x59, 0xc3, 0xb5, 0xea, 0x9c, 0x06, 0x70, - 0xb8, 0xce, 0x54, 0x22, 0x7d, 0x0b, 0x91, 0xe7, 0x1c, 0x6a, - 0xf0, 0x86, 0xd9, 0xaf, 0x35, 0x43, 0x8b, 0xfd, 0x67, 0x11, - 0x4e, 0x38, 0xa2, 0xd4, 0x00, 0x77, 0xee, 0x99, 0xc1, 0xb6, - 0x2f, 0x58, 0x9f, 0xe8, 0x71, 0x06, 0x5e, 0x29, 0xb0, 0xc7, - 0x23, 0x54, 0xcd, 0xba, 0xe2, 0x95, 0x0c, 0x7b, 0xbc, 0xcb, - 0x52, 0x25, 0x7d, 0x0a, 0x93, 0xe4, 0x46, 0x31, 0xa8, 0xdf, - 0x87, 0xf0, 0x69, 0x1e, 0xd9, 0xae, 0x37, 0x40, 0x18, 0x6f, - 0xf6, 0x81, 0x65, 0x12, 0x8b, 0xfc, 0xa4, 0xd3, 0x4a, 0x3d, - 0xfa, 0x8d, 0x14, 0x63, 0x3b, 0x4c, 0xd5, 0xa2, 0x8c, 0xfb, - 0x62, 0x15, 0x4d, 0x3a, 0xa3, 0xd4, 0x13, 0x64, 0xfd, 0x8a, - 0xd2, 0xa5, 0x3c, 0x4b, 0xaf, 0xd8, 0x41, 0x36, 0x6e, 0x19, - 0x80, 0xf7, 0x30, 0x47, 0xde, 0xa9, 0xf1, 0x86, 0x1f, 0x68, - 0xca, 0xbd, 0x24, 0x53, 0x0b, 0x7c, 0xe5, 0x92, 0x55, 0x22, - 0xbb, 0xcc, 0x94, 0xe3, 0x7a, 0x0d, 0xe9, 0x9e, 0x07, 0x70, - 0x28, 0x5f, 0xc6, 0xb1, 0x76, 0x01, 0x98, 0xef, 0xb7, 0xc0, - 0x59, 0x2e, 0x05, 0x72, 0xeb, 0x9c, 0xc4, 0xb3, 0x2a, 0x5d, - 0x9a, 0xed, 0x74, 0x03, 0x5b, 0x2c, 0xb5, 0xc2, 0x26, 0x51, - 0xc8, 0xbf, 0xe7, 0x90, 0x09, 0x7e, 0xb9, 0xce, 0x57, 0x20, - 0x78, 0x0f, 0x96, 0xe1, 0x43, 0x34, 0xad, 0xda, 0x82, 0xf5, - 0x6c, 0x1b, 0xdc, 0xab, 0x32, 0x45, 0x1d, 0x6a, 0xf3, 0x84, - 0x60, 0x17, 0x8e, 0xf9, 0xa1, 0xd6, 0x4f, 0x38, 0xff, 0x88, - 0x11, 0x66, 0x3e, 0x49, 0xd0, 0xa7, 0x89, 0xfe, 0x67, 0x10, - 0x48, 0x3f, 0xa6, 0xd1, 0x16, 0x61, 0xf8, 0x8f, 0xd7, 0xa0, - 0x39, 0x4e, 0xaa, 0xdd, 0x44, 0x33, 0x6b, 0x1c, 0x85, 0xf2, - 0x35, 0x42, 0xdb, 0xac, 0xf4, 0x83, 0x1a, 0x6d, 0xcf, 0xb8, - 0x21, 0x56, 0x0e, 0x79, 0xe0, 0x97, 0x50, 0x27, 0xbe, 0xc9, - 0x91, 0xe6, 0x7f, 0x08, 0xec, 0x9b, 0x02, 0x75, 0x2d, 0x5a, - 0xc3, 0xb4, 0x73, 0x04, 0x9d, 0xea, 0xb2, 0xc5, 0x5c, 0x2b, - 0x00, 0x78, 0xf0, 0x88, 0xfd, 0x85, 0x0d, 0x75, 0xe7, 0x9f, - 0x17, 0x6f, 0x1a, 0x62, 0xea, 0x92, 0xd3, 0xab, 0x23, 0x5b, - 0x2e, 0x56, 0xde, 0xa6, 0x34, 0x4c, 0xc4, 0xbc, 0xc9, 0xb1, - 0x39, 0x41, 0xbb, 0xc3, 0x4b, 0x33, 0x46, 0x3e, 0xb6, 0xce, - 0x5c, 0x24, 0xac, 0xd4, 0xa1, 0xd9, 0x51, 0x29, 0x68, 0x10, - 0x98, 0xe0, 0x95, 0xed, 0x65, 0x1d, 0x8f, 0xf7, 0x7f, 0x07, - 0x72, 0x0a, 0x82, 0xfa, 0x6b, 0x13, 0x9b, 0xe3, 0x96, 0xee, - 0x66, 0x1e, 0x8c, 0xf4, 0x7c, 0x04, 0x71, 0x09, 0x81, 0xf9, - 0xb8, 0xc0, 0x48, 0x30, 0x45, 0x3d, 0xb5, 0xcd, 0x5f, 0x27, - 0xaf, 0xd7, 0xa2, 0xda, 0x52, 0x2a, 0xd0, 0xa8, 0x20, 0x58, - 0x2d, 0x55, 0xdd, 0xa5, 0x37, 0x4f, 0xc7, 0xbf, 0xca, 0xb2, - 0x3a, 0x42, 0x03, 0x7b, 0xf3, 0x8b, 0xfe, 0x86, 0x0e, 0x76, - 0xe4, 0x9c, 0x14, 0x6c, 0x19, 0x61, 0xe9, 0x91, 0xd6, 0xae, - 0x26, 0x5e, 0x2b, 0x53, 0xdb, 0xa3, 0x31, 0x49, 0xc1, 0xb9, - 0xcc, 0xb4, 0x3c, 0x44, 0x05, 0x7d, 0xf5, 0x8d, 0xf8, 0x80, - 0x08, 0x70, 0xe2, 0x9a, 0x12, 0x6a, 0x1f, 0x67, 0xef, 0x97, - 0x6d, 0x15, 0x9d, 0xe5, 0x90, 0xe8, 0x60, 0x18, 0x8a, 0xf2, - 0x7a, 0x02, 0x77, 0x0f, 0x87, 0xff, 0xbe, 0xc6, 0x4e, 0x36, - 0x43, 0x3b, 0xb3, 0xcb, 0x59, 0x21, 0xa9, 0xd1, 0xa4, 0xdc, - 0x54, 0x2c, 0xbd, 0xc5, 0x4d, 0x35, 0x40, 0x38, 0xb0, 0xc8, - 0x5a, 0x22, 0xaa, 0xd2, 0xa7, 0xdf, 0x57, 0x2f, 0x6e, 0x16, - 0x9e, 0xe6, 0x93, 0xeb, 0x63, 0x1b, 0x89, 0xf1, 0x79, 0x01, - 0x74, 0x0c, 0x84, 0xfc, 0x06, 0x7e, 0xf6, 0x8e, 0xfb, 0x83, - 0x0b, 0x73, 0xe1, 0x99, 0x11, 0x69, 0x1c, 0x64, 0xec, 0x94, - 0xd5, 0xad, 0x25, 0x5d, 0x28, 0x50, 0xd8, 0xa0, 0x32, 0x4a, - 0xc2, 0xba, 0xcf, 0xb7, 0x3f, 0x47, 0x00, 0x79, 0xf2, 0x8b, - 0xf9, 0x80, 0x0b, 0x72, 0xef, 0x96, 0x1d, 0x64, 0x16, 0x6f, - 0xe4, 0x9d, 0xc3, 0xba, 0x31, 0x48, 0x3a, 0x43, 0xc8, 0xb1, - 0x2c, 0x55, 0xde, 0xa7, 0xd5, 0xac, 0x27, 0x5e, 0x9b, 0xe2, - 0x69, 0x10, 0x62, 0x1b, 0x90, 0xe9, 0x74, 0x0d, 0x86, 0xff, - 0x8d, 0xf4, 0x7f, 0x06, 0x58, 0x21, 0xaa, 0xd3, 0xa1, 0xd8, - 0x53, 0x2a, 0xb7, 0xce, 0x45, 0x3c, 0x4e, 0x37, 0xbc, 0xc5, - 0x2b, 0x52, 0xd9, 0xa0, 0xd2, 0xab, 0x20, 0x59, 0xc4, 0xbd, - 0x36, 0x4f, 0x3d, 0x44, 0xcf, 0xb6, 0xe8, 0x91, 0x1a, 0x63, - 0x11, 0x68, 0xe3, 0x9a, 0x07, 0x7e, 0xf5, 0x8c, 0xfe, 0x87, - 0x0c, 0x75, 0xb0, 0xc9, 0x42, 0x3b, 0x49, 0x30, 0xbb, 0xc2, - 0x5f, 0x26, 0xad, 0xd4, 0xa6, 0xdf, 0x54, 0x2d, 0x73, 0x0a, - 0x81, 0xf8, 0x8a, 0xf3, 0x78, 0x01, 0x9c, 0xe5, 0x6e, 0x17, - 0x65, 0x1c, 0x97, 0xee, 0x56, 0x2f, 0xa4, 0xdd, 0xaf, 0xd6, - 0x5d, 0x24, 0xb9, 0xc0, 0x4b, 0x32, 0x40, 0x39, 0xb2, 0xcb, - 0x95, 0xec, 0x67, 0x1e, 0x6c, 0x15, 0x9e, 0xe7, 0x7a, 0x03, - 0x88, 0xf1, 0x83, 0xfa, 0x71, 0x08, 0xcd, 0xb4, 0x3f, 0x46, - 0x34, 0x4d, 0xc6, 0xbf, 0x22, 0x5b, 0xd0, 0xa9, 0xdb, 0xa2, - 0x29, 0x50, 0x0e, 0x77, 0xfc, 0x85, 0xf7, 0x8e, 0x05, 0x7c, - 0xe1, 0x98, 0x13, 0x6a, 0x18, 0x61, 0xea, 0x93, 0x7d, 0x04, - 0x8f, 0xf6, 0x84, 0xfd, 0x76, 0x0f, 0x92, 0xeb, 0x60, 0x19, - 0x6b, 0x12, 0x99, 0xe0, 0xbe, 0xc7, 0x4c, 0x35, 0x47, 0x3e, - 0xb5, 0xcc, 0x51, 0x28, 0xa3, 0xda, 0xa8, 0xd1, 0x5a, 0x23, - 0xe6, 0x9f, 0x14, 0x6d, 0x1f, 0x66, 0xed, 0x94, 0x09, 0x70, - 0xfb, 0x82, 0xf0, 0x89, 0x02, 0x7b, 0x25, 0x5c, 0xd7, 0xae, - 0xdc, 0xa5, 0x2e, 0x57, 0xca, 0xb3, 0x38, 0x41, 0x33, 0x4a, - 0xc1, 0xb8, 0x00, 0x7a, 0xf4, 0x8e, 0xf5, 0x8f, 0x01, 0x7b, - 0xf7, 0x8d, 0x03, 0x79, 0x02, 0x78, 0xf6, 0x8c, 0xf3, 0x89, - 0x07, 0x7d, 0x06, 0x7c, 0xf2, 0x88, 0x04, 0x7e, 0xf0, 0x8a, - 0xf1, 0x8b, 0x05, 0x7f, 0xfb, 0x81, 0x0f, 0x75, 0x0e, 0x74, - 0xfa, 0x80, 0x0c, 0x76, 0xf8, 0x82, 0xf9, 0x83, 0x0d, 0x77, - 0x08, 0x72, 0xfc, 0x86, 0xfd, 0x87, 0x09, 0x73, 0xff, 0x85, - 0x0b, 0x71, 0x0a, 0x70, 0xfe, 0x84, 0xeb, 0x91, 0x1f, 0x65, - 0x1e, 0x64, 0xea, 0x90, 0x1c, 0x66, 0xe8, 0x92, 0xe9, 0x93, - 0x1d, 0x67, 0x18, 0x62, 0xec, 0x96, 0xed, 0x97, 0x19, 0x63, - 0xef, 0x95, 0x1b, 0x61, 0x1a, 0x60, 0xee, 0x94, 0x10, 0x6a, - 0xe4, 0x9e, 0xe5, 0x9f, 0x11, 0x6b, 0xe7, 0x9d, 0x13, 0x69, - 0x12, 0x68, 0xe6, 0x9c, 0xe3, 0x99, 0x17, 0x6d, 0x16, 0x6c, - 0xe2, 0x98, 0x14, 0x6e, 0xe0, 0x9a, 0xe1, 0x9b, 0x15, 0x6f, - 0xcb, 0xb1, 0x3f, 0x45, 0x3e, 0x44, 0xca, 0xb0, 0x3c, 0x46, - 0xc8, 0xb2, 0xc9, 0xb3, 0x3d, 0x47, 0x38, 0x42, 0xcc, 0xb6, - 0xcd, 0xb7, 0x39, 0x43, 0xcf, 0xb5, 0x3b, 0x41, 0x3a, 0x40, - 0xce, 0xb4, 0x30, 0x4a, 0xc4, 0xbe, 0xc5, 0xbf, 0x31, 0x4b, - 0xc7, 0xbd, 0x33, 0x49, 0x32, 0x48, 0xc6, 0xbc, 0xc3, 0xb9, - 0x37, 0x4d, 0x36, 0x4c, 0xc2, 0xb8, 0x34, 0x4e, 0xc0, 0xba, - 0xc1, 0xbb, 0x35, 0x4f, 0x20, 0x5a, 0xd4, 0xae, 0xd5, 0xaf, - 0x21, 0x5b, 0xd7, 0xad, 0x23, 0x59, 0x22, 0x58, 0xd6, 0xac, - 0xd3, 0xa9, 0x27, 0x5d, 0x26, 0x5c, 0xd2, 0xa8, 0x24, 0x5e, - 0xd0, 0xaa, 0xd1, 0xab, 0x25, 0x5f, 0xdb, 0xa1, 0x2f, 0x55, - 0x2e, 0x54, 0xda, 0xa0, 0x2c, 0x56, 0xd8, 0xa2, 0xd9, 0xa3, - 0x2d, 0x57, 0x28, 0x52, 0xdc, 0xa6, 0xdd, 0xa7, 0x29, 0x53, - 0xdf, 0xa5, 0x2b, 0x51, 0x2a, 0x50, 0xde, 0xa4, 0x00, 0x7b, - 0xf6, 0x8d, 0xf1, 0x8a, 0x07, 0x7c, 0xff, 0x84, 0x09, 0x72, - 0x0e, 0x75, 0xf8, 0x83, 0xe3, 0x98, 0x15, 0x6e, 0x12, 0x69, - 0xe4, 0x9f, 0x1c, 0x67, 0xea, 0x91, 0xed, 0x96, 0x1b, 0x60, - 0xdb, 0xa0, 0x2d, 0x56, 0x2a, 0x51, 0xdc, 0xa7, 0x24, 0x5f, - 0xd2, 0xa9, 0xd5, 0xae, 0x23, 0x58, 0x38, 0x43, 0xce, 0xb5, - 0xc9, 0xb2, 0x3f, 0x44, 0xc7, 0xbc, 0x31, 0x4a, 0x36, 0x4d, - 0xc0, 0xbb, 0xab, 0xd0, 0x5d, 0x26, 0x5a, 0x21, 0xac, 0xd7, - 0x54, 0x2f, 0xa2, 0xd9, 0xa5, 0xde, 0x53, 0x28, 0x48, 0x33, - 0xbe, 0xc5, 0xb9, 0xc2, 0x4f, 0x34, 0xb7, 0xcc, 0x41, 0x3a, - 0x46, 0x3d, 0xb0, 0xcb, 0x70, 0x0b, 0x86, 0xfd, 0x81, 0xfa, - 0x77, 0x0c, 0x8f, 0xf4, 0x79, 0x02, 0x7e, 0x05, 0x88, 0xf3, - 0x93, 0xe8, 0x65, 0x1e, 0x62, 0x19, 0x94, 0xef, 0x6c, 0x17, - 0x9a, 0xe1, 0x9d, 0xe6, 0x6b, 0x10, 0x4b, 0x30, 0xbd, 0xc6, - 0xba, 0xc1, 0x4c, 0x37, 0xb4, 0xcf, 0x42, 0x39, 0x45, 0x3e, - 0xb3, 0xc8, 0xa8, 0xd3, 0x5e, 0x25, 0x59, 0x22, 0xaf, 0xd4, - 0x57, 0x2c, 0xa1, 0xda, 0xa6, 0xdd, 0x50, 0x2b, 0x90, 0xeb, - 0x66, 0x1d, 0x61, 0x1a, 0x97, 0xec, 0x6f, 0x14, 0x99, 0xe2, - 0x9e, 0xe5, 0x68, 0x13, 0x73, 0x08, 0x85, 0xfe, 0x82, 0xf9, - 0x74, 0x0f, 0x8c, 0xf7, 0x7a, 0x01, 0x7d, 0x06, 0x8b, 0xf0, - 0xe0, 0x9b, 0x16, 0x6d, 0x11, 0x6a, 0xe7, 0x9c, 0x1f, 0x64, - 0xe9, 0x92, 0xee, 0x95, 0x18, 0x63, 0x03, 0x78, 0xf5, 0x8e, - 0xf2, 0x89, 0x04, 0x7f, 0xfc, 0x87, 0x0a, 0x71, 0x0d, 0x76, - 0xfb, 0x80, 0x3b, 0x40, 0xcd, 0xb6, 0xca, 0xb1, 0x3c, 0x47, - 0xc4, 0xbf, 0x32, 0x49, 0x35, 0x4e, 0xc3, 0xb8, 0xd8, 0xa3, - 0x2e, 0x55, 0x29, 0x52, 0xdf, 0xa4, 0x27, 0x5c, 0xd1, 0xaa, - 0xd6, 0xad, 0x20, 0x5b, 0x00, 0x7c, 0xf8, 0x84, 0xed, 0x91, - 0x15, 0x69, 0xc7, 0xbb, 0x3f, 0x43, 0x2a, 0x56, 0xd2, 0xae, - 0x93, 0xef, 0x6b, 0x17, 0x7e, 0x02, 0x86, 0xfa, 0x54, 0x28, - 0xac, 0xd0, 0xb9, 0xc5, 0x41, 0x3d, 0x3b, 0x47, 0xc3, 0xbf, - 0xd6, 0xaa, 0x2e, 0x52, 0xfc, 0x80, 0x04, 0x78, 0x11, 0x6d, - 0xe9, 0x95, 0xa8, 0xd4, 0x50, 0x2c, 0x45, 0x39, 0xbd, 0xc1, - 0x6f, 0x13, 0x97, 0xeb, 0x82, 0xfe, 0x7a, 0x06, 0x76, 0x0a, - 0x8e, 0xf2, 0x9b, 0xe7, 0x63, 0x1f, 0xb1, 0xcd, 0x49, 0x35, - 0x5c, 0x20, 0xa4, 0xd8, 0xe5, 0x99, 0x1d, 0x61, 0x08, 0x74, - 0xf0, 0x8c, 0x22, 0x5e, 0xda, 0xa6, 0xcf, 0xb3, 0x37, 0x4b, - 0x4d, 0x31, 0xb5, 0xc9, 0xa0, 0xdc, 0x58, 0x24, 0x8a, 0xf6, - 0x72, 0x0e, 0x67, 0x1b, 0x9f, 0xe3, 0xde, 0xa2, 0x26, 0x5a, - 0x33, 0x4f, 0xcb, 0xb7, 0x19, 0x65, 0xe1, 0x9d, 0xf4, 0x88, - 0x0c, 0x70, 0xec, 0x90, 0x14, 0x68, 0x01, 0x7d, 0xf9, 0x85, - 0x2b, 0x57, 0xd3, 0xaf, 0xc6, 0xba, 0x3e, 0x42, 0x7f, 0x03, - 0x87, 0xfb, 0x92, 0xee, 0x6a, 0x16, 0xb8, 0xc4, 0x40, 0x3c, - 0x55, 0x29, 0xad, 0xd1, 0xd7, 0xab, 0x2f, 0x53, 0x3a, 0x46, - 0xc2, 0xbe, 0x10, 0x6c, 0xe8, 0x94, 0xfd, 0x81, 0x05, 0x79, - 0x44, 0x38, 0xbc, 0xc0, 0xa9, 0xd5, 0x51, 0x2d, 0x83, 0xff, - 0x7b, 0x07, 0x6e, 0x12, 0x96, 0xea, 0x9a, 0xe6, 0x62, 0x1e, - 0x77, 0x0b, 0x8f, 0xf3, 0x5d, 0x21, 0xa5, 0xd9, 0xb0, 0xcc, - 0x48, 0x34, 0x09, 0x75, 0xf1, 0x8d, 0xe4, 0x98, 0x1c, 0x60, - 0xce, 0xb2, 0x36, 0x4a, 0x23, 0x5f, 0xdb, 0xa7, 0xa1, 0xdd, - 0x59, 0x25, 0x4c, 0x30, 0xb4, 0xc8, 0x66, 0x1a, 0x9e, 0xe2, - 0x8b, 0xf7, 0x73, 0x0f, 0x32, 0x4e, 0xca, 0xb6, 0xdf, 0xa3, - 0x27, 0x5b, 0xf5, 0x89, 0x0d, 0x71, 0x18, 0x64, 0xe0, 0x9c, - 0x00, 0x7d, 0xfa, 0x87, 0xe9, 0x94, 0x13, 0x6e, 0xcf, 0xb2, - 0x35, 0x48, 0x26, 0x5b, 0xdc, 0xa1, 0x83, 0xfe, 0x79, 0x04, - 0x6a, 0x17, 0x90, 0xed, 0x4c, 0x31, 0xb6, 0xcb, 0xa5, 0xd8, - 0x5f, 0x22, 0x1b, 0x66, 0xe1, 0x9c, 0xf2, 0x8f, 0x08, 0x75, - 0xd4, 0xa9, 0x2e, 0x53, 0x3d, 0x40, 0xc7, 0xba, 0x98, 0xe5, - 0x62, 0x1f, 0x71, 0x0c, 0x8b, 0xf6, 0x57, 0x2a, 0xad, 0xd0, - 0xbe, 0xc3, 0x44, 0x39, 0x36, 0x4b, 0xcc, 0xb1, 0xdf, 0xa2, - 0x25, 0x58, 0xf9, 0x84, 0x03, 0x7e, 0x10, 0x6d, 0xea, 0x97, - 0xb5, 0xc8, 0x4f, 0x32, 0x5c, 0x21, 0xa6, 0xdb, 0x7a, 0x07, - 0x80, 0xfd, 0x93, 0xee, 0x69, 0x14, 0x2d, 0x50, 0xd7, 0xaa, - 0xc4, 0xb9, 0x3e, 0x43, 0xe2, 0x9f, 0x18, 0x65, 0x0b, 0x76, - 0xf1, 0x8c, 0xae, 0xd3, 0x54, 0x29, 0x47, 0x3a, 0xbd, 0xc0, - 0x61, 0x1c, 0x9b, 0xe6, 0x88, 0xf5, 0x72, 0x0f, 0x6c, 0x11, - 0x96, 0xeb, 0x85, 0xf8, 0x7f, 0x02, 0xa3, 0xde, 0x59, 0x24, - 0x4a, 0x37, 0xb0, 0xcd, 0xef, 0x92, 0x15, 0x68, 0x06, 0x7b, - 0xfc, 0x81, 0x20, 0x5d, 0xda, 0xa7, 0xc9, 0xb4, 0x33, 0x4e, - 0x77, 0x0a, 0x8d, 0xf0, 0x9e, 0xe3, 0x64, 0x19, 0xb8, 0xc5, - 0x42, 0x3f, 0x51, 0x2c, 0xab, 0xd6, 0xf4, 0x89, 0x0e, 0x73, - 0x1d, 0x60, 0xe7, 0x9a, 0x3b, 0x46, 0xc1, 0xbc, 0xd2, 0xaf, - 0x28, 0x55, 0x5a, 0x27, 0xa0, 0xdd, 0xb3, 0xce, 0x49, 0x34, - 0x95, 0xe8, 0x6f, 0x12, 0x7c, 0x01, 0x86, 0xfb, 0xd9, 0xa4, - 0x23, 0x5e, 0x30, 0x4d, 0xca, 0xb7, 0x16, 0x6b, 0xec, 0x91, - 0xff, 0x82, 0x05, 0x78, 0x41, 0x3c, 0xbb, 0xc6, 0xa8, 0xd5, - 0x52, 0x2f, 0x8e, 0xf3, 0x74, 0x09, 0x67, 0x1a, 0x9d, 0xe0, - 0xc2, 0xbf, 0x38, 0x45, 0x2b, 0x56, 0xd1, 0xac, 0x0d, 0x70, - 0xf7, 0x8a, 0xe4, 0x99, 0x1e, 0x63, 0x00, 0x7e, 0xfc, 0x82, - 0xe5, 0x9b, 0x19, 0x67, 0xd7, 0xa9, 0x2b, 0x55, 0x32, 0x4c, - 0xce, 0xb0, 0xb3, 0xcd, 0x4f, 0x31, 0x56, 0x28, 0xaa, 0xd4, - 0x64, 0x1a, 0x98, 0xe6, 0x81, 0xff, 0x7d, 0x03, 0x7b, 0x05, - 0x87, 0xf9, 0x9e, 0xe0, 0x62, 0x1c, 0xac, 0xd2, 0x50, 0x2e, - 0x49, 0x37, 0xb5, 0xcb, 0xc8, 0xb6, 0x34, 0x4a, 0x2d, 0x53, - 0xd1, 0xaf, 0x1f, 0x61, 0xe3, 0x9d, 0xfa, 0x84, 0x06, 0x78, - 0xf6, 0x88, 0x0a, 0x74, 0x13, 0x6d, 0xef, 0x91, 0x21, 0x5f, - 0xdd, 0xa3, 0xc4, 0xba, 0x38, 0x46, 0x45, 0x3b, 0xb9, 0xc7, - 0xa0, 0xde, 0x5c, 0x22, 0x92, 0xec, 0x6e, 0x10, 0x77, 0x09, - 0x8b, 0xf5, 0x8d, 0xf3, 0x71, 0x0f, 0x68, 0x16, 0x94, 0xea, - 0x5a, 0x24, 0xa6, 0xd8, 0xbf, 0xc1, 0x43, 0x3d, 0x3e, 0x40, - 0xc2, 0xbc, 0xdb, 0xa5, 0x27, 0x59, 0xe9, 0x97, 0x15, 0x6b, - 0x0c, 0x72, 0xf0, 0x8e, 0xf1, 0x8f, 0x0d, 0x73, 0x14, 0x6a, - 0xe8, 0x96, 0x26, 0x58, 0xda, 0xa4, 0xc3, 0xbd, 0x3f, 0x41, - 0x42, 0x3c, 0xbe, 0xc0, 0xa7, 0xd9, 0x5b, 0x25, 0x95, 0xeb, - 0x69, 0x17, 0x70, 0x0e, 0x8c, 0xf2, 0x8a, 0xf4, 0x76, 0x08, - 0x6f, 0x11, 0x93, 0xed, 0x5d, 0x23, 0xa1, 0xdf, 0xb8, 0xc6, - 0x44, 0x3a, 0x39, 0x47, 0xc5, 0xbb, 0xdc, 0xa2, 0x20, 0x5e, - 0xee, 0x90, 0x12, 0x6c, 0x0b, 0x75, 0xf7, 0x89, 0x07, 0x79, - 0xfb, 0x85, 0xe2, 0x9c, 0x1e, 0x60, 0xd0, 0xae, 0x2c, 0x52, - 0x35, 0x4b, 0xc9, 0xb7, 0xb4, 0xca, 0x48, 0x36, 0x51, 0x2f, - 0xad, 0xd3, 0x63, 0x1d, 0x9f, 0xe1, 0x86, 0xf8, 0x7a, 0x04, - 0x7c, 0x02, 0x80, 0xfe, 0x99, 0xe7, 0x65, 0x1b, 0xab, 0xd5, - 0x57, 0x29, 0x4e, 0x30, 0xb2, 0xcc, 0xcf, 0xb1, 0x33, 0x4d, - 0x2a, 0x54, 0xd6, 0xa8, 0x18, 0x66, 0xe4, 0x9a, 0xfd, 0x83, - 0x01, 0x7f, 0x00, 0x7f, 0xfe, 0x81, 0xe1, 0x9e, 0x1f, 0x60, - 0xdf, 0xa0, 0x21, 0x5e, 0x3e, 0x41, 0xc0, 0xbf, 0xa3, 0xdc, - 0x5d, 0x22, 0x42, 0x3d, 0xbc, 0xc3, 0x7c, 0x03, 0x82, 0xfd, - 0x9d, 0xe2, 0x63, 0x1c, 0x5b, 0x24, 0xa5, 0xda, 0xba, 0xc5, - 0x44, 0x3b, 0x84, 0xfb, 0x7a, 0x05, 0x65, 0x1a, 0x9b, 0xe4, - 0xf8, 0x87, 0x06, 0x79, 0x19, 0x66, 0xe7, 0x98, 0x27, 0x58, - 0xd9, 0xa6, 0xc6, 0xb9, 0x38, 0x47, 0xb6, 0xc9, 0x48, 0x37, - 0x57, 0x28, 0xa9, 0xd6, 0x69, 0x16, 0x97, 0xe8, 0x88, 0xf7, - 0x76, 0x09, 0x15, 0x6a, 0xeb, 0x94, 0xf4, 0x8b, 0x0a, 0x75, - 0xca, 0xb5, 0x34, 0x4b, 0x2b, 0x54, 0xd5, 0xaa, 0xed, 0x92, - 0x13, 0x6c, 0x0c, 0x73, 0xf2, 0x8d, 0x32, 0x4d, 0xcc, 0xb3, - 0xd3, 0xac, 0x2d, 0x52, 0x4e, 0x31, 0xb0, 0xcf, 0xaf, 0xd0, - 0x51, 0x2e, 0x91, 0xee, 0x6f, 0x10, 0x70, 0x0f, 0x8e, 0xf1, - 0x71, 0x0e, 0x8f, 0xf0, 0x90, 0xef, 0x6e, 0x11, 0xae, 0xd1, - 0x50, 0x2f, 0x4f, 0x30, 0xb1, 0xce, 0xd2, 0xad, 0x2c, 0x53, - 0x33, 0x4c, 0xcd, 0xb2, 0x0d, 0x72, 0xf3, 0x8c, 0xec, 0x93, - 0x12, 0x6d, 0x2a, 0x55, 0xd4, 0xab, 0xcb, 0xb4, 0x35, 0x4a, - 0xf5, 0x8a, 0x0b, 0x74, 0x14, 0x6b, 0xea, 0x95, 0x89, 0xf6, - 0x77, 0x08, 0x68, 0x17, 0x96, 0xe9, 0x56, 0x29, 0xa8, 0xd7, - 0xb7, 0xc8, 0x49, 0x36, 0xc7, 0xb8, 0x39, 0x46, 0x26, 0x59, - 0xd8, 0xa7, 0x18, 0x67, 0xe6, 0x99, 0xf9, 0x86, 0x07, 0x78, - 0x64, 0x1b, 0x9a, 0xe5, 0x85, 0xfa, 0x7b, 0x04, 0xbb, 0xc4, - 0x45, 0x3a, 0x5a, 0x25, 0xa4, 0xdb, 0x9c, 0xe3, 0x62, 0x1d, - 0x7d, 0x02, 0x83, 0xfc, 0x43, 0x3c, 0xbd, 0xc2, 0xa2, 0xdd, - 0x5c, 0x23, 0x3f, 0x40, 0xc1, 0xbe, 0xde, 0xa1, 0x20, 0x5f, - 0xe0, 0x9f, 0x1e, 0x61, 0x01, 0x7e, 0xff, 0x80, 0x00, 0x80, - 0x1d, 0x9d, 0x3a, 0xba, 0x27, 0xa7, 0x74, 0xf4, 0x69, 0xe9, - 0x4e, 0xce, 0x53, 0xd3, 0xe8, 0x68, 0xf5, 0x75, 0xd2, 0x52, - 0xcf, 0x4f, 0x9c, 0x1c, 0x81, 0x01, 0xa6, 0x26, 0xbb, 0x3b, - 0xcd, 0x4d, 0xd0, 0x50, 0xf7, 0x77, 0xea, 0x6a, 0xb9, 0x39, - 0xa4, 0x24, 0x83, 0x03, 0x9e, 0x1e, 0x25, 0xa5, 0x38, 0xb8, - 0x1f, 0x9f, 0x02, 0x82, 0x51, 0xd1, 0x4c, 0xcc, 0x6b, 0xeb, - 0x76, 0xf6, 0x87, 0x07, 0x9a, 0x1a, 0xbd, 0x3d, 0xa0, 0x20, - 0xf3, 0x73, 0xee, 0x6e, 0xc9, 0x49, 0xd4, 0x54, 0x6f, 0xef, - 0x72, 0xf2, 0x55, 0xd5, 0x48, 0xc8, 0x1b, 0x9b, 0x06, 0x86, - 0x21, 0xa1, 0x3c, 0xbc, 0x4a, 0xca, 0x57, 0xd7, 0x70, 0xf0, - 0x6d, 0xed, 0x3e, 0xbe, 0x23, 0xa3, 0x04, 0x84, 0x19, 0x99, - 0xa2, 0x22, 0xbf, 0x3f, 0x98, 0x18, 0x85, 0x05, 0xd6, 0x56, - 0xcb, 0x4b, 0xec, 0x6c, 0xf1, 0x71, 0x13, 0x93, 0x0e, 0x8e, - 0x29, 0xa9, 0x34, 0xb4, 0x67, 0xe7, 0x7a, 0xfa, 0x5d, 0xdd, - 0x40, 0xc0, 0xfb, 0x7b, 0xe6, 0x66, 0xc1, 0x41, 0xdc, 0x5c, - 0x8f, 0x0f, 0x92, 0x12, 0xb5, 0x35, 0xa8, 0x28, 0xde, 0x5e, - 0xc3, 0x43, 0xe4, 0x64, 0xf9, 0x79, 0xaa, 0x2a, 0xb7, 0x37, - 0x90, 0x10, 0x8d, 0x0d, 0x36, 0xb6, 0x2b, 0xab, 0x0c, 0x8c, - 0x11, 0x91, 0x42, 0xc2, 0x5f, 0xdf, 0x78, 0xf8, 0x65, 0xe5, - 0x94, 0x14, 0x89, 0x09, 0xae, 0x2e, 0xb3, 0x33, 0xe0, 0x60, - 0xfd, 0x7d, 0xda, 0x5a, 0xc7, 0x47, 0x7c, 0xfc, 0x61, 0xe1, - 0x46, 0xc6, 0x5b, 0xdb, 0x08, 0x88, 0x15, 0x95, 0x32, 0xb2, - 0x2f, 0xaf, 0x59, 0xd9, 0x44, 0xc4, 0x63, 0xe3, 0x7e, 0xfe, - 0x2d, 0xad, 0x30, 0xb0, 0x17, 0x97, 0x0a, 0x8a, 0xb1, 0x31, - 0xac, 0x2c, 0x8b, 0x0b, 0x96, 0x16, 0xc5, 0x45, 0xd8, 0x58, - 0xff, 0x7f, 0xe2, 0x62, 0x00, 0x81, 0x1f, 0x9e, 0x3e, 0xbf, - 0x21, 0xa0, 0x7c, 0xfd, 0x63, 0xe2, 0x42, 0xc3, 0x5d, 0xdc, - 0xf8, 0x79, 0xe7, 0x66, 0xc6, 0x47, 0xd9, 0x58, 0x84, 0x05, - 0x9b, 0x1a, 0xba, 0x3b, 0xa5, 0x24, 0xed, 0x6c, 0xf2, 0x73, - 0xd3, 0x52, 0xcc, 0x4d, 0x91, 0x10, 0x8e, 0x0f, 0xaf, 0x2e, - 0xb0, 0x31, 0x15, 0x94, 0x0a, 0x8b, 0x2b, 0xaa, 0x34, 0xb5, - 0x69, 0xe8, 0x76, 0xf7, 0x57, 0xd6, 0x48, 0xc9, 0xc7, 0x46, - 0xd8, 0x59, 0xf9, 0x78, 0xe6, 0x67, 0xbb, 0x3a, 0xa4, 0x25, - 0x85, 0x04, 0x9a, 0x1b, 0x3f, 0xbe, 0x20, 0xa1, 0x01, 0x80, - 0x1e, 0x9f, 0x43, 0xc2, 0x5c, 0xdd, 0x7d, 0xfc, 0x62, 0xe3, - 0x2a, 0xab, 0x35, 0xb4, 0x14, 0x95, 0x0b, 0x8a, 0x56, 0xd7, - 0x49, 0xc8, 0x68, 0xe9, 0x77, 0xf6, 0xd2, 0x53, 0xcd, 0x4c, - 0xec, 0x6d, 0xf3, 0x72, 0xae, 0x2f, 0xb1, 0x30, 0x90, 0x11, - 0x8f, 0x0e, 0x93, 0x12, 0x8c, 0x0d, 0xad, 0x2c, 0xb2, 0x33, - 0xef, 0x6e, 0xf0, 0x71, 0xd1, 0x50, 0xce, 0x4f, 0x6b, 0xea, - 0x74, 0xf5, 0x55, 0xd4, 0x4a, 0xcb, 0x17, 0x96, 0x08, 0x89, - 0x29, 0xa8, 0x36, 0xb7, 0x7e, 0xff, 0x61, 0xe0, 0x40, 0xc1, - 0x5f, 0xde, 0x02, 0x83, 0x1d, 0x9c, 0x3c, 0xbd, 0x23, 0xa2, - 0x86, 0x07, 0x99, 0x18, 0xb8, 0x39, 0xa7, 0x26, 0xfa, 0x7b, - 0xe5, 0x64, 0xc4, 0x45, 0xdb, 0x5a, 0x54, 0xd5, 0x4b, 0xca, - 0x6a, 0xeb, 0x75, 0xf4, 0x28, 0xa9, 0x37, 0xb6, 0x16, 0x97, - 0x09, 0x88, 0xac, 0x2d, 0xb3, 0x32, 0x92, 0x13, 0x8d, 0x0c, - 0xd0, 0x51, 0xcf, 0x4e, 0xee, 0x6f, 0xf1, 0x70, 0xb9, 0x38, - 0xa6, 0x27, 0x87, 0x06, 0x98, 0x19, 0xc5, 0x44, 0xda, 0x5b, - 0xfb, 0x7a, 0xe4, 0x65, 0x41, 0xc0, 0x5e, 0xdf, 0x7f, 0xfe, - 0x60, 0xe1, 0x3d, 0xbc, 0x22, 0xa3, 0x03, 0x82, 0x1c, 0x9d, - 0x00, 0x82, 0x19, 0x9b, 0x32, 0xb0, 0x2b, 0xa9, 0x64, 0xe6, - 0x7d, 0xff, 0x56, 0xd4, 0x4f, 0xcd, 0xc8, 0x4a, 0xd1, 0x53, - 0xfa, 0x78, 0xe3, 0x61, 0xac, 0x2e, 0xb5, 0x37, 0x9e, 0x1c, - 0x87, 0x05, 0x8d, 0x0f, 0x94, 0x16, 0xbf, 0x3d, 0xa6, 0x24, - 0xe9, 0x6b, 0xf0, 0x72, 0xdb, 0x59, 0xc2, 0x40, 0x45, 0xc7, - 0x5c, 0xde, 0x77, 0xf5, 0x6e, 0xec, 0x21, 0xa3, 0x38, 0xba, - 0x13, 0x91, 0x0a, 0x88, 0x07, 0x85, 0x1e, 0x9c, 0x35, 0xb7, - 0x2c, 0xae, 0x63, 0xe1, 0x7a, 0xf8, 0x51, 0xd3, 0x48, 0xca, - 0xcf, 0x4d, 0xd6, 0x54, 0xfd, 0x7f, 0xe4, 0x66, 0xab, 0x29, - 0xb2, 0x30, 0x99, 0x1b, 0x80, 0x02, 0x8a, 0x08, 0x93, 0x11, - 0xb8, 0x3a, 0xa1, 0x23, 0xee, 0x6c, 0xf7, 0x75, 0xdc, 0x5e, - 0xc5, 0x47, 0x42, 0xc0, 0x5b, 0xd9, 0x70, 0xf2, 0x69, 0xeb, - 0x26, 0xa4, 0x3f, 0xbd, 0x14, 0x96, 0x0d, 0x8f, 0x0e, 0x8c, - 0x17, 0x95, 0x3c, 0xbe, 0x25, 0xa7, 0x6a, 0xe8, 0x73, 0xf1, - 0x58, 0xda, 0x41, 0xc3, 0xc6, 0x44, 0xdf, 0x5d, 0xf4, 0x76, - 0xed, 0x6f, 0xa2, 0x20, 0xbb, 0x39, 0x90, 0x12, 0x89, 0x0b, - 0x83, 0x01, 0x9a, 0x18, 0xb1, 0x33, 0xa8, 0x2a, 0xe7, 0x65, - 0xfe, 0x7c, 0xd5, 0x57, 0xcc, 0x4e, 0x4b, 0xc9, 0x52, 0xd0, - 0x79, 0xfb, 0x60, 0xe2, 0x2f, 0xad, 0x36, 0xb4, 0x1d, 0x9f, - 0x04, 0x86, 0x09, 0x8b, 0x10, 0x92, 0x3b, 0xb9, 0x22, 0xa0, - 0x6d, 0xef, 0x74, 0xf6, 0x5f, 0xdd, 0x46, 0xc4, 0xc1, 0x43, - 0xd8, 0x5a, 0xf3, 0x71, 0xea, 0x68, 0xa5, 0x27, 0xbc, 0x3e, - 0x97, 0x15, 0x8e, 0x0c, 0x84, 0x06, 0x9d, 0x1f, 0xb6, 0x34, - 0xaf, 0x2d, 0xe0, 0x62, 0xf9, 0x7b, 0xd2, 0x50, 0xcb, 0x49, - 0x4c, 0xce, 0x55, 0xd7, 0x7e, 0xfc, 0x67, 0xe5, 0x28, 0xaa, - 0x31, 0xb3, 0x1a, 0x98, 0x03, 0x81, 0x00, 0x83, 0x1b, 0x98, - 0x36, 0xb5, 0x2d, 0xae, 0x6c, 0xef, 0x77, 0xf4, 0x5a, 0xd9, - 0x41, 0xc2, 0xd8, 0x5b, 0xc3, 0x40, 0xee, 0x6d, 0xf5, 0x76, - 0xb4, 0x37, 0xaf, 0x2c, 0x82, 0x01, 0x99, 0x1a, 0xad, 0x2e, - 0xb6, 0x35, 0x9b, 0x18, 0x80, 0x03, 0xc1, 0x42, 0xda, 0x59, - 0xf7, 0x74, 0xec, 0x6f, 0x75, 0xf6, 0x6e, 0xed, 0x43, 0xc0, - 0x58, 0xdb, 0x19, 0x9a, 0x02, 0x81, 0x2f, 0xac, 0x34, 0xb7, - 0x47, 0xc4, 0x5c, 0xdf, 0x71, 0xf2, 0x6a, 0xe9, 0x2b, 0xa8, - 0x30, 0xb3, 0x1d, 0x9e, 0x06, 0x85, 0x9f, 0x1c, 0x84, 0x07, - 0xa9, 0x2a, 0xb2, 0x31, 0xf3, 0x70, 0xe8, 0x6b, 0xc5, 0x46, - 0xde, 0x5d, 0xea, 0x69, 0xf1, 0x72, 0xdc, 0x5f, 0xc7, 0x44, - 0x86, 0x05, 0x9d, 0x1e, 0xb0, 0x33, 0xab, 0x28, 0x32, 0xb1, - 0x29, 0xaa, 0x04, 0x87, 0x1f, 0x9c, 0x5e, 0xdd, 0x45, 0xc6, - 0x68, 0xeb, 0x73, 0xf0, 0x8e, 0x0d, 0x95, 0x16, 0xb8, 0x3b, - 0xa3, 0x20, 0xe2, 0x61, 0xf9, 0x7a, 0xd4, 0x57, 0xcf, 0x4c, - 0x56, 0xd5, 0x4d, 0xce, 0x60, 0xe3, 0x7b, 0xf8, 0x3a, 0xb9, - 0x21, 0xa2, 0x0c, 0x8f, 0x17, 0x94, 0x23, 0xa0, 0x38, 0xbb, - 0x15, 0x96, 0x0e, 0x8d, 0x4f, 0xcc, 0x54, 0xd7, 0x79, 0xfa, - 0x62, 0xe1, 0xfb, 0x78, 0xe0, 0x63, 0xcd, 0x4e, 0xd6, 0x55, - 0x97, 0x14, 0x8c, 0x0f, 0xa1, 0x22, 0xba, 0x39, 0xc9, 0x4a, - 0xd2, 0x51, 0xff, 0x7c, 0xe4, 0x67, 0xa5, 0x26, 0xbe, 0x3d, - 0x93, 0x10, 0x88, 0x0b, 0x11, 0x92, 0x0a, 0x89, 0x27, 0xa4, - 0x3c, 0xbf, 0x7d, 0xfe, 0x66, 0xe5, 0x4b, 0xc8, 0x50, 0xd3, - 0x64, 0xe7, 0x7f, 0xfc, 0x52, 0xd1, 0x49, 0xca, 0x08, 0x8b, - 0x13, 0x90, 0x3e, 0xbd, 0x25, 0xa6, 0xbc, 0x3f, 0xa7, 0x24, - 0x8a, 0x09, 0x91, 0x12, 0xd0, 0x53, 0xcb, 0x48, 0xe6, 0x65, - 0xfd, 0x7e, 0x00, 0x84, 0x15, 0x91, 0x2a, 0xae, 0x3f, 0xbb, - 0x54, 0xd0, 0x41, 0xc5, 0x7e, 0xfa, 0x6b, 0xef, 0xa8, 0x2c, - 0xbd, 0x39, 0x82, 0x06, 0x97, 0x13, 0xfc, 0x78, 0xe9, 0x6d, - 0xd6, 0x52, 0xc3, 0x47, 0x4d, 0xc9, 0x58, 0xdc, 0x67, 0xe3, - 0x72, 0xf6, 0x19, 0x9d, 0x0c, 0x88, 0x33, 0xb7, 0x26, 0xa2, - 0xe5, 0x61, 0xf0, 0x74, 0xcf, 0x4b, 0xda, 0x5e, 0xb1, 0x35, - 0xa4, 0x20, 0x9b, 0x1f, 0x8e, 0x0a, 0x9a, 0x1e, 0x8f, 0x0b, - 0xb0, 0x34, 0xa5, 0x21, 0xce, 0x4a, 0xdb, 0x5f, 0xe4, 0x60, - 0xf1, 0x75, 0x32, 0xb6, 0x27, 0xa3, 0x18, 0x9c, 0x0d, 0x89, - 0x66, 0xe2, 0x73, 0xf7, 0x4c, 0xc8, 0x59, 0xdd, 0xd7, 0x53, - 0xc2, 0x46, 0xfd, 0x79, 0xe8, 0x6c, 0x83, 0x07, 0x96, 0x12, - 0xa9, 0x2d, 0xbc, 0x38, 0x7f, 0xfb, 0x6a, 0xee, 0x55, 0xd1, - 0x40, 0xc4, 0x2b, 0xaf, 0x3e, 0xba, 0x01, 0x85, 0x14, 0x90, - 0x29, 0xad, 0x3c, 0xb8, 0x03, 0x87, 0x16, 0x92, 0x7d, 0xf9, - 0x68, 0xec, 0x57, 0xd3, 0x42, 0xc6, 0x81, 0x05, 0x94, 0x10, - 0xab, 0x2f, 0xbe, 0x3a, 0xd5, 0x51, 0xc0, 0x44, 0xff, 0x7b, - 0xea, 0x6e, 0x64, 0xe0, 0x71, 0xf5, 0x4e, 0xca, 0x5b, 0xdf, - 0x30, 0xb4, 0x25, 0xa1, 0x1a, 0x9e, 0x0f, 0x8b, 0xcc, 0x48, - 0xd9, 0x5d, 0xe6, 0x62, 0xf3, 0x77, 0x98, 0x1c, 0x8d, 0x09, - 0xb2, 0x36, 0xa7, 0x23, 0xb3, 0x37, 0xa6, 0x22, 0x99, 0x1d, - 0x8c, 0x08, 0xe7, 0x63, 0xf2, 0x76, 0xcd, 0x49, 0xd8, 0x5c, - 0x1b, 0x9f, 0x0e, 0x8a, 0x31, 0xb5, 0x24, 0xa0, 0x4f, 0xcb, - 0x5a, 0xde, 0x65, 0xe1, 0x70, 0xf4, 0xfe, 0x7a, 0xeb, 0x6f, - 0xd4, 0x50, 0xc1, 0x45, 0xaa, 0x2e, 0xbf, 0x3b, 0x80, 0x04, - 0x95, 0x11, 0x56, 0xd2, 0x43, 0xc7, 0x7c, 0xf8, 0x69, 0xed, - 0x02, 0x86, 0x17, 0x93, 0x28, 0xac, 0x3d, 0xb9, 0x00, 0x85, - 0x17, 0x92, 0x2e, 0xab, 0x39, 0xbc, 0x5c, 0xd9, 0x4b, 0xce, - 0x72, 0xf7, 0x65, 0xe0, 0xb8, 0x3d, 0xaf, 0x2a, 0x96, 0x13, - 0x81, 0x04, 0xe4, 0x61, 0xf3, 0x76, 0xca, 0x4f, 0xdd, 0x58, - 0x6d, 0xe8, 0x7a, 0xff, 0x43, 0xc6, 0x54, 0xd1, 0x31, 0xb4, - 0x26, 0xa3, 0x1f, 0x9a, 0x08, 0x8d, 0xd5, 0x50, 0xc2, 0x47, - 0xfb, 0x7e, 0xec, 0x69, 0x89, 0x0c, 0x9e, 0x1b, 0xa7, 0x22, - 0xb0, 0x35, 0xda, 0x5f, 0xcd, 0x48, 0xf4, 0x71, 0xe3, 0x66, - 0x86, 0x03, 0x91, 0x14, 0xa8, 0x2d, 0xbf, 0x3a, 0x62, 0xe7, - 0x75, 0xf0, 0x4c, 0xc9, 0x5b, 0xde, 0x3e, 0xbb, 0x29, 0xac, - 0x10, 0x95, 0x07, 0x82, 0xb7, 0x32, 0xa0, 0x25, 0x99, 0x1c, - 0x8e, 0x0b, 0xeb, 0x6e, 0xfc, 0x79, 0xc5, 0x40, 0xd2, 0x57, - 0x0f, 0x8a, 0x18, 0x9d, 0x21, 0xa4, 0x36, 0xb3, 0x53, 0xd6, - 0x44, 0xc1, 0x7d, 0xf8, 0x6a, 0xef, 0xa9, 0x2c, 0xbe, 0x3b, - 0x87, 0x02, 0x90, 0x15, 0xf5, 0x70, 0xe2, 0x67, 0xdb, 0x5e, - 0xcc, 0x49, 0x11, 0x94, 0x06, 0x83, 0x3f, 0xba, 0x28, 0xad, - 0x4d, 0xc8, 0x5a, 0xdf, 0x63, 0xe6, 0x74, 0xf1, 0xc4, 0x41, - 0xd3, 0x56, 0xea, 0x6f, 0xfd, 0x78, 0x98, 0x1d, 0x8f, 0x0a, - 0xb6, 0x33, 0xa1, 0x24, 0x7c, 0xf9, 0x6b, 0xee, 0x52, 0xd7, - 0x45, 0xc0, 0x20, 0xa5, 0x37, 0xb2, 0x0e, 0x8b, 0x19, 0x9c, - 0x73, 0xf6, 0x64, 0xe1, 0x5d, 0xd8, 0x4a, 0xcf, 0x2f, 0xaa, - 0x38, 0xbd, 0x01, 0x84, 0x16, 0x93, 0xcb, 0x4e, 0xdc, 0x59, - 0xe5, 0x60, 0xf2, 0x77, 0x97, 0x12, 0x80, 0x05, 0xb9, 0x3c, - 0xae, 0x2b, 0x1e, 0x9b, 0x09, 0x8c, 0x30, 0xb5, 0x27, 0xa2, - 0x42, 0xc7, 0x55, 0xd0, 0x6c, 0xe9, 0x7b, 0xfe, 0xa6, 0x23, - 0xb1, 0x34, 0x88, 0x0d, 0x9f, 0x1a, 0xfa, 0x7f, 0xed, 0x68, - 0xd4, 0x51, 0xc3, 0x46, 0x00, 0x86, 0x11, 0x97, 0x22, 0xa4, - 0x33, 0xb5, 0x44, 0xc2, 0x55, 0xd3, 0x66, 0xe0, 0x77, 0xf1, - 0x88, 0x0e, 0x99, 0x1f, 0xaa, 0x2c, 0xbb, 0x3d, 0xcc, 0x4a, - 0xdd, 0x5b, 0xee, 0x68, 0xff, 0x79, 0x0d, 0x8b, 0x1c, 0x9a, - 0x2f, 0xa9, 0x3e, 0xb8, 0x49, 0xcf, 0x58, 0xde, 0x6b, 0xed, - 0x7a, 0xfc, 0x85, 0x03, 0x94, 0x12, 0xa7, 0x21, 0xb6, 0x30, - 0xc1, 0x47, 0xd0, 0x56, 0xe3, 0x65, 0xf2, 0x74, 0x1a, 0x9c, - 0x0b, 0x8d, 0x38, 0xbe, 0x29, 0xaf, 0x5e, 0xd8, 0x4f, 0xc9, - 0x7c, 0xfa, 0x6d, 0xeb, 0x92, 0x14, 0x83, 0x05, 0xb0, 0x36, - 0xa1, 0x27, 0xd6, 0x50, 0xc7, 0x41, 0xf4, 0x72, 0xe5, 0x63, - 0x17, 0x91, 0x06, 0x80, 0x35, 0xb3, 0x24, 0xa2, 0x53, 0xd5, - 0x42, 0xc4, 0x71, 0xf7, 0x60, 0xe6, 0x9f, 0x19, 0x8e, 0x08, - 0xbd, 0x3b, 0xac, 0x2a, 0xdb, 0x5d, 0xca, 0x4c, 0xf9, 0x7f, - 0xe8, 0x6e, 0x34, 0xb2, 0x25, 0xa3, 0x16, 0x90, 0x07, 0x81, - 0x70, 0xf6, 0x61, 0xe7, 0x52, 0xd4, 0x43, 0xc5, 0xbc, 0x3a, - 0xad, 0x2b, 0x9e, 0x18, 0x8f, 0x09, 0xf8, 0x7e, 0xe9, 0x6f, - 0xda, 0x5c, 0xcb, 0x4d, 0x39, 0xbf, 0x28, 0xae, 0x1b, 0x9d, - 0x0a, 0x8c, 0x7d, 0xfb, 0x6c, 0xea, 0x5f, 0xd9, 0x4e, 0xc8, - 0xb1, 0x37, 0xa0, 0x26, 0x93, 0x15, 0x82, 0x04, 0xf5, 0x73, - 0xe4, 0x62, 0xd7, 0x51, 0xc6, 0x40, 0x2e, 0xa8, 0x3f, 0xb9, - 0x0c, 0x8a, 0x1d, 0x9b, 0x6a, 0xec, 0x7b, 0xfd, 0x48, 0xce, - 0x59, 0xdf, 0xa6, 0x20, 0xb7, 0x31, 0x84, 0x02, 0x95, 0x13, - 0xe2, 0x64, 0xf3, 0x75, 0xc0, 0x46, 0xd1, 0x57, 0x23, 0xa5, - 0x32, 0xb4, 0x01, 0x87, 0x10, 0x96, 0x67, 0xe1, 0x76, 0xf0, - 0x45, 0xc3, 0x54, 0xd2, 0xab, 0x2d, 0xba, 0x3c, 0x89, 0x0f, - 0x98, 0x1e, 0xef, 0x69, 0xfe, 0x78, 0xcd, 0x4b, 0xdc, 0x5a, - 0x00, 0x87, 0x13, 0x94, 0x26, 0xa1, 0x35, 0xb2, 0x4c, 0xcb, - 0x5f, 0xd8, 0x6a, 0xed, 0x79, 0xfe, 0x98, 0x1f, 0x8b, 0x0c, - 0xbe, 0x39, 0xad, 0x2a, 0xd4, 0x53, 0xc7, 0x40, 0xf2, 0x75, - 0xe1, 0x66, 0x2d, 0xaa, 0x3e, 0xb9, 0x0b, 0x8c, 0x18, 0x9f, - 0x61, 0xe6, 0x72, 0xf5, 0x47, 0xc0, 0x54, 0xd3, 0xb5, 0x32, - 0xa6, 0x21, 0x93, 0x14, 0x80, 0x07, 0xf9, 0x7e, 0xea, 0x6d, - 0xdf, 0x58, 0xcc, 0x4b, 0x5a, 0xdd, 0x49, 0xce, 0x7c, 0xfb, - 0x6f, 0xe8, 0x16, 0x91, 0x05, 0x82, 0x30, 0xb7, 0x23, 0xa4, - 0xc2, 0x45, 0xd1, 0x56, 0xe4, 0x63, 0xf7, 0x70, 0x8e, 0x09, - 0x9d, 0x1a, 0xa8, 0x2f, 0xbb, 0x3c, 0x77, 0xf0, 0x64, 0xe3, - 0x51, 0xd6, 0x42, 0xc5, 0x3b, 0xbc, 0x28, 0xaf, 0x1d, 0x9a, - 0x0e, 0x89, 0xef, 0x68, 0xfc, 0x7b, 0xc9, 0x4e, 0xda, 0x5d, - 0xa3, 0x24, 0xb0, 0x37, 0x85, 0x02, 0x96, 0x11, 0xb4, 0x33, - 0xa7, 0x20, 0x92, 0x15, 0x81, 0x06, 0xf8, 0x7f, 0xeb, 0x6c, - 0xde, 0x59, 0xcd, 0x4a, 0x2c, 0xab, 0x3f, 0xb8, 0x0a, 0x8d, - 0x19, 0x9e, 0x60, 0xe7, 0x73, 0xf4, 0x46, 0xc1, 0x55, 0xd2, - 0x99, 0x1e, 0x8a, 0x0d, 0xbf, 0x38, 0xac, 0x2b, 0xd5, 0x52, - 0xc6, 0x41, 0xf3, 0x74, 0xe0, 0x67, 0x01, 0x86, 0x12, 0x95, - 0x27, 0xa0, 0x34, 0xb3, 0x4d, 0xca, 0x5e, 0xd9, 0x6b, 0xec, - 0x78, 0xff, 0xee, 0x69, 0xfd, 0x7a, 0xc8, 0x4f, 0xdb, 0x5c, - 0xa2, 0x25, 0xb1, 0x36, 0x84, 0x03, 0x97, 0x10, 0x76, 0xf1, - 0x65, 0xe2, 0x50, 0xd7, 0x43, 0xc4, 0x3a, 0xbd, 0x29, 0xae, - 0x1c, 0x9b, 0x0f, 0x88, 0xc3, 0x44, 0xd0, 0x57, 0xe5, 0x62, - 0xf6, 0x71, 0x8f, 0x08, 0x9c, 0x1b, 0xa9, 0x2e, 0xba, 0x3d, - 0x5b, 0xdc, 0x48, 0xcf, 0x7d, 0xfa, 0x6e, 0xe9, 0x17, 0x90, - 0x04, 0x83, 0x31, 0xb6, 0x22, 0xa5, 0x00, 0x88, 0x0d, 0x85, - 0x1a, 0x92, 0x17, 0x9f, 0x34, 0xbc, 0x39, 0xb1, 0x2e, 0xa6, - 0x23, 0xab, 0x68, 0xe0, 0x65, 0xed, 0x72, 0xfa, 0x7f, 0xf7, - 0x5c, 0xd4, 0x51, 0xd9, 0x46, 0xce, 0x4b, 0xc3, 0xd0, 0x58, - 0xdd, 0x55, 0xca, 0x42, 0xc7, 0x4f, 0xe4, 0x6c, 0xe9, 0x61, - 0xfe, 0x76, 0xf3, 0x7b, 0xb8, 0x30, 0xb5, 0x3d, 0xa2, 0x2a, - 0xaf, 0x27, 0x8c, 0x04, 0x81, 0x09, 0x96, 0x1e, 0x9b, 0x13, - 0xbd, 0x35, 0xb0, 0x38, 0xa7, 0x2f, 0xaa, 0x22, 0x89, 0x01, - 0x84, 0x0c, 0x93, 0x1b, 0x9e, 0x16, 0xd5, 0x5d, 0xd8, 0x50, - 0xcf, 0x47, 0xc2, 0x4a, 0xe1, 0x69, 0xec, 0x64, 0xfb, 0x73, - 0xf6, 0x7e, 0x6d, 0xe5, 0x60, 0xe8, 0x77, 0xff, 0x7a, 0xf2, - 0x59, 0xd1, 0x54, 0xdc, 0x43, 0xcb, 0x4e, 0xc6, 0x05, 0x8d, - 0x08, 0x80, 0x1f, 0x97, 0x12, 0x9a, 0x31, 0xb9, 0x3c, 0xb4, - 0x2b, 0xa3, 0x26, 0xae, 0x67, 0xef, 0x6a, 0xe2, 0x7d, 0xf5, - 0x70, 0xf8, 0x53, 0xdb, 0x5e, 0xd6, 0x49, 0xc1, 0x44, 0xcc, - 0x0f, 0x87, 0x02, 0x8a, 0x15, 0x9d, 0x18, 0x90, 0x3b, 0xb3, - 0x36, 0xbe, 0x21, 0xa9, 0x2c, 0xa4, 0xb7, 0x3f, 0xba, 0x32, - 0xad, 0x25, 0xa0, 0x28, 0x83, 0x0b, 0x8e, 0x06, 0x99, 0x11, - 0x94, 0x1c, 0xdf, 0x57, 0xd2, 0x5a, 0xc5, 0x4d, 0xc8, 0x40, - 0xeb, 0x63, 0xe6, 0x6e, 0xf1, 0x79, 0xfc, 0x74, 0xda, 0x52, - 0xd7, 0x5f, 0xc0, 0x48, 0xcd, 0x45, 0xee, 0x66, 0xe3, 0x6b, - 0xf4, 0x7c, 0xf9, 0x71, 0xb2, 0x3a, 0xbf, 0x37, 0xa8, 0x20, - 0xa5, 0x2d, 0x86, 0x0e, 0x8b, 0x03, 0x9c, 0x14, 0x91, 0x19, - 0x0a, 0x82, 0x07, 0x8f, 0x10, 0x98, 0x1d, 0x95, 0x3e, 0xb6, - 0x33, 0xbb, 0x24, 0xac, 0x29, 0xa1, 0x62, 0xea, 0x6f, 0xe7, - 0x78, 0xf0, 0x75, 0xfd, 0x56, 0xde, 0x5b, 0xd3, 0x4c, 0xc4, - 0x41, 0xc9, 0x00, 0x89, 0x0f, 0x86, 0x1e, 0x97, 0x11, 0x98, - 0x3c, 0xb5, 0x33, 0xba, 0x22, 0xab, 0x2d, 0xa4, 0x78, 0xf1, - 0x77, 0xfe, 0x66, 0xef, 0x69, 0xe0, 0x44, 0xcd, 0x4b, 0xc2, - 0x5a, 0xd3, 0x55, 0xdc, 0xf0, 0x79, 0xff, 0x76, 0xee, 0x67, - 0xe1, 0x68, 0xcc, 0x45, 0xc3, 0x4a, 0xd2, 0x5b, 0xdd, 0x54, - 0x88, 0x01, 0x87, 0x0e, 0x96, 0x1f, 0x99, 0x10, 0xb4, 0x3d, - 0xbb, 0x32, 0xaa, 0x23, 0xa5, 0x2c, 0xfd, 0x74, 0xf2, 0x7b, - 0xe3, 0x6a, 0xec, 0x65, 0xc1, 0x48, 0xce, 0x47, 0xdf, 0x56, - 0xd0, 0x59, 0x85, 0x0c, 0x8a, 0x03, 0x9b, 0x12, 0x94, 0x1d, - 0xb9, 0x30, 0xb6, 0x3f, 0xa7, 0x2e, 0xa8, 0x21, 0x0d, 0x84, - 0x02, 0x8b, 0x13, 0x9a, 0x1c, 0x95, 0x31, 0xb8, 0x3e, 0xb7, - 0x2f, 0xa6, 0x20, 0xa9, 0x75, 0xfc, 0x7a, 0xf3, 0x6b, 0xe2, - 0x64, 0xed, 0x49, 0xc0, 0x46, 0xcf, 0x57, 0xde, 0x58, 0xd1, - 0xe7, 0x6e, 0xe8, 0x61, 0xf9, 0x70, 0xf6, 0x7f, 0xdb, 0x52, - 0xd4, 0x5d, 0xc5, 0x4c, 0xca, 0x43, 0x9f, 0x16, 0x90, 0x19, - 0x81, 0x08, 0x8e, 0x07, 0xa3, 0x2a, 0xac, 0x25, 0xbd, 0x34, - 0xb2, 0x3b, 0x17, 0x9e, 0x18, 0x91, 0x09, 0x80, 0x06, 0x8f, - 0x2b, 0xa2, 0x24, 0xad, 0x35, 0xbc, 0x3a, 0xb3, 0x6f, 0xe6, - 0x60, 0xe9, 0x71, 0xf8, 0x7e, 0xf7, 0x53, 0xda, 0x5c, 0xd5, - 0x4d, 0xc4, 0x42, 0xcb, 0x1a, 0x93, 0x15, 0x9c, 0x04, 0x8d, - 0x0b, 0x82, 0x26, 0xaf, 0x29, 0xa0, 0x38, 0xb1, 0x37, 0xbe, - 0x62, 0xeb, 0x6d, 0xe4, 0x7c, 0xf5, 0x73, 0xfa, 0x5e, 0xd7, - 0x51, 0xd8, 0x40, 0xc9, 0x4f, 0xc6, 0xea, 0x63, 0xe5, 0x6c, - 0xf4, 0x7d, 0xfb, 0x72, 0xd6, 0x5f, 0xd9, 0x50, 0xc8, 0x41, - 0xc7, 0x4e, 0x92, 0x1b, 0x9d, 0x14, 0x8c, 0x05, 0x83, 0x0a, - 0xae, 0x27, 0xa1, 0x28, 0xb0, 0x39, 0xbf, 0x36, 0x00, 0x8a, - 0x09, 0x83, 0x12, 0x98, 0x1b, 0x91, 0x24, 0xae, 0x2d, 0xa7, - 0x36, 0xbc, 0x3f, 0xb5, 0x48, 0xc2, 0x41, 0xcb, 0x5a, 0xd0, - 0x53, 0xd9, 0x6c, 0xe6, 0x65, 0xef, 0x7e, 0xf4, 0x77, 0xfd, - 0x90, 0x1a, 0x99, 0x13, 0x82, 0x08, 0x8b, 0x01, 0xb4, 0x3e, - 0xbd, 0x37, 0xa6, 0x2c, 0xaf, 0x25, 0xd8, 0x52, 0xd1, 0x5b, - 0xca, 0x40, 0xc3, 0x49, 0xfc, 0x76, 0xf5, 0x7f, 0xee, 0x64, - 0xe7, 0x6d, 0x3d, 0xb7, 0x34, 0xbe, 0x2f, 0xa5, 0x26, 0xac, - 0x19, 0x93, 0x10, 0x9a, 0x0b, 0x81, 0x02, 0x88, 0x75, 0xff, - 0x7c, 0xf6, 0x67, 0xed, 0x6e, 0xe4, 0x51, 0xdb, 0x58, 0xd2, - 0x43, 0xc9, 0x4a, 0xc0, 0xad, 0x27, 0xa4, 0x2e, 0xbf, 0x35, - 0xb6, 0x3c, 0x89, 0x03, 0x80, 0x0a, 0x9b, 0x11, 0x92, 0x18, - 0xe5, 0x6f, 0xec, 0x66, 0xf7, 0x7d, 0xfe, 0x74, 0xc1, 0x4b, - 0xc8, 0x42, 0xd3, 0x59, 0xda, 0x50, 0x7a, 0xf0, 0x73, 0xf9, - 0x68, 0xe2, 0x61, 0xeb, 0x5e, 0xd4, 0x57, 0xdd, 0x4c, 0xc6, - 0x45, 0xcf, 0x32, 0xb8, 0x3b, 0xb1, 0x20, 0xaa, 0x29, 0xa3, - 0x16, 0x9c, 0x1f, 0x95, 0x04, 0x8e, 0x0d, 0x87, 0xea, 0x60, - 0xe3, 0x69, 0xf8, 0x72, 0xf1, 0x7b, 0xce, 0x44, 0xc7, 0x4d, - 0xdc, 0x56, 0xd5, 0x5f, 0xa2, 0x28, 0xab, 0x21, 0xb0, 0x3a, - 0xb9, 0x33, 0x86, 0x0c, 0x8f, 0x05, 0x94, 0x1e, 0x9d, 0x17, - 0x47, 0xcd, 0x4e, 0xc4, 0x55, 0xdf, 0x5c, 0xd6, 0x63, 0xe9, - 0x6a, 0xe0, 0x71, 0xfb, 0x78, 0xf2, 0x0f, 0x85, 0x06, 0x8c, - 0x1d, 0x97, 0x14, 0x9e, 0x2b, 0xa1, 0x22, 0xa8, 0x39, 0xb3, - 0x30, 0xba, 0xd7, 0x5d, 0xde, 0x54, 0xc5, 0x4f, 0xcc, 0x46, - 0xf3, 0x79, 0xfa, 0x70, 0xe1, 0x6b, 0xe8, 0x62, 0x9f, 0x15, - 0x96, 0x1c, 0x8d, 0x07, 0x84, 0x0e, 0xbb, 0x31, 0xb2, 0x38, - 0xa9, 0x23, 0xa0, 0x2a, 0x00, 0x8b, 0x0b, 0x80, 0x16, 0x9d, - 0x1d, 0x96, 0x2c, 0xa7, 0x27, 0xac, 0x3a, 0xb1, 0x31, 0xba, - 0x58, 0xd3, 0x53, 0xd8, 0x4e, 0xc5, 0x45, 0xce, 0x74, 0xff, - 0x7f, 0xf4, 0x62, 0xe9, 0x69, 0xe2, 0xb0, 0x3b, 0xbb, 0x30, - 0xa6, 0x2d, 0xad, 0x26, 0x9c, 0x17, 0x97, 0x1c, 0x8a, 0x01, - 0x81, 0x0a, 0xe8, 0x63, 0xe3, 0x68, 0xfe, 0x75, 0xf5, 0x7e, - 0xc4, 0x4f, 0xcf, 0x44, 0xd2, 0x59, 0xd9, 0x52, 0x7d, 0xf6, - 0x76, 0xfd, 0x6b, 0xe0, 0x60, 0xeb, 0x51, 0xda, 0x5a, 0xd1, - 0x47, 0xcc, 0x4c, 0xc7, 0x25, 0xae, 0x2e, 0xa5, 0x33, 0xb8, - 0x38, 0xb3, 0x09, 0x82, 0x02, 0x89, 0x1f, 0x94, 0x14, 0x9f, - 0xcd, 0x46, 0xc6, 0x4d, 0xdb, 0x50, 0xd0, 0x5b, 0xe1, 0x6a, - 0xea, 0x61, 0xf7, 0x7c, 0xfc, 0x77, 0x95, 0x1e, 0x9e, 0x15, - 0x83, 0x08, 0x88, 0x03, 0xb9, 0x32, 0xb2, 0x39, 0xaf, 0x24, - 0xa4, 0x2f, 0xfa, 0x71, 0xf1, 0x7a, 0xec, 0x67, 0xe7, 0x6c, - 0xd6, 0x5d, 0xdd, 0x56, 0xc0, 0x4b, 0xcb, 0x40, 0xa2, 0x29, - 0xa9, 0x22, 0xb4, 0x3f, 0xbf, 0x34, 0x8e, 0x05, 0x85, 0x0e, - 0x98, 0x13, 0x93, 0x18, 0x4a, 0xc1, 0x41, 0xca, 0x5c, 0xd7, - 0x57, 0xdc, 0x66, 0xed, 0x6d, 0xe6, 0x70, 0xfb, 0x7b, 0xf0, - 0x12, 0x99, 0x19, 0x92, 0x04, 0x8f, 0x0f, 0x84, 0x3e, 0xb5, - 0x35, 0xbe, 0x28, 0xa3, 0x23, 0xa8, 0x87, 0x0c, 0x8c, 0x07, - 0x91, 0x1a, 0x9a, 0x11, 0xab, 0x20, 0xa0, 0x2b, 0xbd, 0x36, - 0xb6, 0x3d, 0xdf, 0x54, 0xd4, 0x5f, 0xc9, 0x42, 0xc2, 0x49, - 0xf3, 0x78, 0xf8, 0x73, 0xe5, 0x6e, 0xee, 0x65, 0x37, 0xbc, - 0x3c, 0xb7, 0x21, 0xaa, 0x2a, 0xa1, 0x1b, 0x90, 0x10, 0x9b, - 0x0d, 0x86, 0x06, 0x8d, 0x6f, 0xe4, 0x64, 0xef, 0x79, 0xf2, - 0x72, 0xf9, 0x43, 0xc8, 0x48, 0xc3, 0x55, 0xde, 0x5e, 0xd5, - 0x00, 0x8c, 0x05, 0x89, 0x0a, 0x86, 0x0f, 0x83, 0x14, 0x98, - 0x11, 0x9d, 0x1e, 0x92, 0x1b, 0x97, 0x28, 0xa4, 0x2d, 0xa1, - 0x22, 0xae, 0x27, 0xab, 0x3c, 0xb0, 0x39, 0xb5, 0x36, 0xba, - 0x33, 0xbf, 0x50, 0xdc, 0x55, 0xd9, 0x5a, 0xd6, 0x5f, 0xd3, - 0x44, 0xc8, 0x41, 0xcd, 0x4e, 0xc2, 0x4b, 0xc7, 0x78, 0xf4, - 0x7d, 0xf1, 0x72, 0xfe, 0x77, 0xfb, 0x6c, 0xe0, 0x69, 0xe5, - 0x66, 0xea, 0x63, 0xef, 0xa0, 0x2c, 0xa5, 0x29, 0xaa, 0x26, - 0xaf, 0x23, 0xb4, 0x38, 0xb1, 0x3d, 0xbe, 0x32, 0xbb, 0x37, - 0x88, 0x04, 0x8d, 0x01, 0x82, 0x0e, 0x87, 0x0b, 0x9c, 0x10, - 0x99, 0x15, 0x96, 0x1a, 0x93, 0x1f, 0xf0, 0x7c, 0xf5, 0x79, - 0xfa, 0x76, 0xff, 0x73, 0xe4, 0x68, 0xe1, 0x6d, 0xee, 0x62, - 0xeb, 0x67, 0xd8, 0x54, 0xdd, 0x51, 0xd2, 0x5e, 0xd7, 0x5b, - 0xcc, 0x40, 0xc9, 0x45, 0xc6, 0x4a, 0xc3, 0x4f, 0x5d, 0xd1, - 0x58, 0xd4, 0x57, 0xdb, 0x52, 0xde, 0x49, 0xc5, 0x4c, 0xc0, - 0x43, 0xcf, 0x46, 0xca, 0x75, 0xf9, 0x70, 0xfc, 0x7f, 0xf3, - 0x7a, 0xf6, 0x61, 0xed, 0x64, 0xe8, 0x6b, 0xe7, 0x6e, 0xe2, - 0x0d, 0x81, 0x08, 0x84, 0x07, 0x8b, 0x02, 0x8e, 0x19, 0x95, - 0x1c, 0x90, 0x13, 0x9f, 0x16, 0x9a, 0x25, 0xa9, 0x20, 0xac, - 0x2f, 0xa3, 0x2a, 0xa6, 0x31, 0xbd, 0x34, 0xb8, 0x3b, 0xb7, - 0x3e, 0xb2, 0xfd, 0x71, 0xf8, 0x74, 0xf7, 0x7b, 0xf2, 0x7e, - 0xe9, 0x65, 0xec, 0x60, 0xe3, 0x6f, 0xe6, 0x6a, 0xd5, 0x59, - 0xd0, 0x5c, 0xdf, 0x53, 0xda, 0x56, 0xc1, 0x4d, 0xc4, 0x48, - 0xcb, 0x47, 0xce, 0x42, 0xad, 0x21, 0xa8, 0x24, 0xa7, 0x2b, - 0xa2, 0x2e, 0xb9, 0x35, 0xbc, 0x30, 0xb3, 0x3f, 0xb6, 0x3a, - 0x85, 0x09, 0x80, 0x0c, 0x8f, 0x03, 0x8a, 0x06, 0x91, 0x1d, - 0x94, 0x18, 0x9b, 0x17, 0x9e, 0x12, 0x00, 0x8d, 0x07, 0x8a, - 0x0e, 0x83, 0x09, 0x84, 0x1c, 0x91, 0x1b, 0x96, 0x12, 0x9f, - 0x15, 0x98, 0x38, 0xb5, 0x3f, 0xb2, 0x36, 0xbb, 0x31, 0xbc, - 0x24, 0xa9, 0x23, 0xae, 0x2a, 0xa7, 0x2d, 0xa0, 0x70, 0xfd, - 0x77, 0xfa, 0x7e, 0xf3, 0x79, 0xf4, 0x6c, 0xe1, 0x6b, 0xe6, - 0x62, 0xef, 0x65, 0xe8, 0x48, 0xc5, 0x4f, 0xc2, 0x46, 0xcb, - 0x41, 0xcc, 0x54, 0xd9, 0x53, 0xde, 0x5a, 0xd7, 0x5d, 0xd0, - 0xe0, 0x6d, 0xe7, 0x6a, 0xee, 0x63, 0xe9, 0x64, 0xfc, 0x71, - 0xfb, 0x76, 0xf2, 0x7f, 0xf5, 0x78, 0xd8, 0x55, 0xdf, 0x52, - 0xd6, 0x5b, 0xd1, 0x5c, 0xc4, 0x49, 0xc3, 0x4e, 0xca, 0x47, - 0xcd, 0x40, 0x90, 0x1d, 0x97, 0x1a, 0x9e, 0x13, 0x99, 0x14, - 0x8c, 0x01, 0x8b, 0x06, 0x82, 0x0f, 0x85, 0x08, 0xa8, 0x25, - 0xaf, 0x22, 0xa6, 0x2b, 0xa1, 0x2c, 0xb4, 0x39, 0xb3, 0x3e, - 0xba, 0x37, 0xbd, 0x30, 0xdd, 0x50, 0xda, 0x57, 0xd3, 0x5e, - 0xd4, 0x59, 0xc1, 0x4c, 0xc6, 0x4b, 0xcf, 0x42, 0xc8, 0x45, - 0xe5, 0x68, 0xe2, 0x6f, 0xeb, 0x66, 0xec, 0x61, 0xf9, 0x74, - 0xfe, 0x73, 0xf7, 0x7a, 0xf0, 0x7d, 0xad, 0x20, 0xaa, 0x27, - 0xa3, 0x2e, 0xa4, 0x29, 0xb1, 0x3c, 0xb6, 0x3b, 0xbf, 0x32, - 0xb8, 0x35, 0x95, 0x18, 0x92, 0x1f, 0x9b, 0x16, 0x9c, 0x11, - 0x89, 0x04, 0x8e, 0x03, 0x87, 0x0a, 0x80, 0x0d, 0x3d, 0xb0, - 0x3a, 0xb7, 0x33, 0xbe, 0x34, 0xb9, 0x21, 0xac, 0x26, 0xab, - 0x2f, 0xa2, 0x28, 0xa5, 0x05, 0x88, 0x02, 0x8f, 0x0b, 0x86, - 0x0c, 0x81, 0x19, 0x94, 0x1e, 0x93, 0x17, 0x9a, 0x10, 0x9d, - 0x4d, 0xc0, 0x4a, 0xc7, 0x43, 0xce, 0x44, 0xc9, 0x51, 0xdc, - 0x56, 0xdb, 0x5f, 0xd2, 0x58, 0xd5, 0x75, 0xf8, 0x72, 0xff, - 0x7b, 0xf6, 0x7c, 0xf1, 0x69, 0xe4, 0x6e, 0xe3, 0x67, 0xea, - 0x60, 0xed, 0x00, 0x8e, 0x01, 0x8f, 0x02, 0x8c, 0x03, 0x8d, - 0x04, 0x8a, 0x05, 0x8b, 0x06, 0x88, 0x07, 0x89, 0x08, 0x86, - 0x09, 0x87, 0x0a, 0x84, 0x0b, 0x85, 0x0c, 0x82, 0x0d, 0x83, - 0x0e, 0x80, 0x0f, 0x81, 0x10, 0x9e, 0x11, 0x9f, 0x12, 0x9c, - 0x13, 0x9d, 0x14, 0x9a, 0x15, 0x9b, 0x16, 0x98, 0x17, 0x99, - 0x18, 0x96, 0x19, 0x97, 0x1a, 0x94, 0x1b, 0x95, 0x1c, 0x92, - 0x1d, 0x93, 0x1e, 0x90, 0x1f, 0x91, 0x20, 0xae, 0x21, 0xaf, - 0x22, 0xac, 0x23, 0xad, 0x24, 0xaa, 0x25, 0xab, 0x26, 0xa8, - 0x27, 0xa9, 0x28, 0xa6, 0x29, 0xa7, 0x2a, 0xa4, 0x2b, 0xa5, - 0x2c, 0xa2, 0x2d, 0xa3, 0x2e, 0xa0, 0x2f, 0xa1, 0x30, 0xbe, - 0x31, 0xbf, 0x32, 0xbc, 0x33, 0xbd, 0x34, 0xba, 0x35, 0xbb, - 0x36, 0xb8, 0x37, 0xb9, 0x38, 0xb6, 0x39, 0xb7, 0x3a, 0xb4, - 0x3b, 0xb5, 0x3c, 0xb2, 0x3d, 0xb3, 0x3e, 0xb0, 0x3f, 0xb1, - 0x40, 0xce, 0x41, 0xcf, 0x42, 0xcc, 0x43, 0xcd, 0x44, 0xca, - 0x45, 0xcb, 0x46, 0xc8, 0x47, 0xc9, 0x48, 0xc6, 0x49, 0xc7, - 0x4a, 0xc4, 0x4b, 0xc5, 0x4c, 0xc2, 0x4d, 0xc3, 0x4e, 0xc0, - 0x4f, 0xc1, 0x50, 0xde, 0x51, 0xdf, 0x52, 0xdc, 0x53, 0xdd, - 0x54, 0xda, 0x55, 0xdb, 0x56, 0xd8, 0x57, 0xd9, 0x58, 0xd6, - 0x59, 0xd7, 0x5a, 0xd4, 0x5b, 0xd5, 0x5c, 0xd2, 0x5d, 0xd3, - 0x5e, 0xd0, 0x5f, 0xd1, 0x60, 0xee, 0x61, 0xef, 0x62, 0xec, - 0x63, 0xed, 0x64, 0xea, 0x65, 0xeb, 0x66, 0xe8, 0x67, 0xe9, - 0x68, 0xe6, 0x69, 0xe7, 0x6a, 0xe4, 0x6b, 0xe5, 0x6c, 0xe2, - 0x6d, 0xe3, 0x6e, 0xe0, 0x6f, 0xe1, 0x70, 0xfe, 0x71, 0xff, - 0x72, 0xfc, 0x73, 0xfd, 0x74, 0xfa, 0x75, 0xfb, 0x76, 0xf8, - 0x77, 0xf9, 0x78, 0xf6, 0x79, 0xf7, 0x7a, 0xf4, 0x7b, 0xf5, - 0x7c, 0xf2, 0x7d, 0xf3, 0x7e, 0xf0, 0x7f, 0xf1, 0x00, 0x8f, - 0x03, 0x8c, 0x06, 0x89, 0x05, 0x8a, 0x0c, 0x83, 0x0f, 0x80, - 0x0a, 0x85, 0x09, 0x86, 0x18, 0x97, 0x1b, 0x94, 0x1e, 0x91, - 0x1d, 0x92, 0x14, 0x9b, 0x17, 0x98, 0x12, 0x9d, 0x11, 0x9e, - 0x30, 0xbf, 0x33, 0xbc, 0x36, 0xb9, 0x35, 0xba, 0x3c, 0xb3, - 0x3f, 0xb0, 0x3a, 0xb5, 0x39, 0xb6, 0x28, 0xa7, 0x2b, 0xa4, - 0x2e, 0xa1, 0x2d, 0xa2, 0x24, 0xab, 0x27, 0xa8, 0x22, 0xad, - 0x21, 0xae, 0x60, 0xef, 0x63, 0xec, 0x66, 0xe9, 0x65, 0xea, - 0x6c, 0xe3, 0x6f, 0xe0, 0x6a, 0xe5, 0x69, 0xe6, 0x78, 0xf7, - 0x7b, 0xf4, 0x7e, 0xf1, 0x7d, 0xf2, 0x74, 0xfb, 0x77, 0xf8, - 0x72, 0xfd, 0x71, 0xfe, 0x50, 0xdf, 0x53, 0xdc, 0x56, 0xd9, - 0x55, 0xda, 0x5c, 0xd3, 0x5f, 0xd0, 0x5a, 0xd5, 0x59, 0xd6, - 0x48, 0xc7, 0x4b, 0xc4, 0x4e, 0xc1, 0x4d, 0xc2, 0x44, 0xcb, - 0x47, 0xc8, 0x42, 0xcd, 0x41, 0xce, 0xc0, 0x4f, 0xc3, 0x4c, - 0xc6, 0x49, 0xc5, 0x4a, 0xcc, 0x43, 0xcf, 0x40, 0xca, 0x45, - 0xc9, 0x46, 0xd8, 0x57, 0xdb, 0x54, 0xde, 0x51, 0xdd, 0x52, - 0xd4, 0x5b, 0xd7, 0x58, 0xd2, 0x5d, 0xd1, 0x5e, 0xf0, 0x7f, - 0xf3, 0x7c, 0xf6, 0x79, 0xf5, 0x7a, 0xfc, 0x73, 0xff, 0x70, - 0xfa, 0x75, 0xf9, 0x76, 0xe8, 0x67, 0xeb, 0x64, 0xee, 0x61, - 0xed, 0x62, 0xe4, 0x6b, 0xe7, 0x68, 0xe2, 0x6d, 0xe1, 0x6e, - 0xa0, 0x2f, 0xa3, 0x2c, 0xa6, 0x29, 0xa5, 0x2a, 0xac, 0x23, - 0xaf, 0x20, 0xaa, 0x25, 0xa9, 0x26, 0xb8, 0x37, 0xbb, 0x34, - 0xbe, 0x31, 0xbd, 0x32, 0xb4, 0x3b, 0xb7, 0x38, 0xb2, 0x3d, - 0xb1, 0x3e, 0x90, 0x1f, 0x93, 0x1c, 0x96, 0x19, 0x95, 0x1a, - 0x9c, 0x13, 0x9f, 0x10, 0x9a, 0x15, 0x99, 0x16, 0x88, 0x07, - 0x8b, 0x04, 0x8e, 0x01, 0x8d, 0x02, 0x84, 0x0b, 0x87, 0x08, - 0x82, 0x0d, 0x81, 0x0e, 0x00, 0x90, 0x3d, 0xad, 0x7a, 0xea, - 0x47, 0xd7, 0xf4, 0x64, 0xc9, 0x59, 0x8e, 0x1e, 0xb3, 0x23, - 0xf5, 0x65, 0xc8, 0x58, 0x8f, 0x1f, 0xb2, 0x22, 0x01, 0x91, - 0x3c, 0xac, 0x7b, 0xeb, 0x46, 0xd6, 0xf7, 0x67, 0xca, 0x5a, - 0x8d, 0x1d, 0xb0, 0x20, 0x03, 0x93, 0x3e, 0xae, 0x79, 0xe9, - 0x44, 0xd4, 0x02, 0x92, 0x3f, 0xaf, 0x78, 0xe8, 0x45, 0xd5, - 0xf6, 0x66, 0xcb, 0x5b, 0x8c, 0x1c, 0xb1, 0x21, 0xf3, 0x63, - 0xce, 0x5e, 0x89, 0x19, 0xb4, 0x24, 0x07, 0x97, 0x3a, 0xaa, - 0x7d, 0xed, 0x40, 0xd0, 0x06, 0x96, 0x3b, 0xab, 0x7c, 0xec, - 0x41, 0xd1, 0xf2, 0x62, 0xcf, 0x5f, 0x88, 0x18, 0xb5, 0x25, - 0x04, 0x94, 0x39, 0xa9, 0x7e, 0xee, 0x43, 0xd3, 0xf0, 0x60, - 0xcd, 0x5d, 0x8a, 0x1a, 0xb7, 0x27, 0xf1, 0x61, 0xcc, 0x5c, - 0x8b, 0x1b, 0xb6, 0x26, 0x05, 0x95, 0x38, 0xa8, 0x7f, 0xef, - 0x42, 0xd2, 0xfb, 0x6b, 0xc6, 0x56, 0x81, 0x11, 0xbc, 0x2c, - 0x0f, 0x9f, 0x32, 0xa2, 0x75, 0xe5, 0x48, 0xd8, 0x0e, 0x9e, - 0x33, 0xa3, 0x74, 0xe4, 0x49, 0xd9, 0xfa, 0x6a, 0xc7, 0x57, - 0x80, 0x10, 0xbd, 0x2d, 0x0c, 0x9c, 0x31, 0xa1, 0x76, 0xe6, - 0x4b, 0xdb, 0xf8, 0x68, 0xc5, 0x55, 0x82, 0x12, 0xbf, 0x2f, - 0xf9, 0x69, 0xc4, 0x54, 0x83, 0x13, 0xbe, 0x2e, 0x0d, 0x9d, - 0x30, 0xa0, 0x77, 0xe7, 0x4a, 0xda, 0x08, 0x98, 0x35, 0xa5, - 0x72, 0xe2, 0x4f, 0xdf, 0xfc, 0x6c, 0xc1, 0x51, 0x86, 0x16, - 0xbb, 0x2b, 0xfd, 0x6d, 0xc0, 0x50, 0x87, 0x17, 0xba, 0x2a, - 0x09, 0x99, 0x34, 0xa4, 0x73, 0xe3, 0x4e, 0xde, 0xff, 0x6f, - 0xc2, 0x52, 0x85, 0x15, 0xb8, 0x28, 0x0b, 0x9b, 0x36, 0xa6, - 0x71, 0xe1, 0x4c, 0xdc, 0x0a, 0x9a, 0x37, 0xa7, 0x70, 0xe0, - 0x4d, 0xdd, 0xfe, 0x6e, 0xc3, 0x53, 0x84, 0x14, 0xb9, 0x29, - 0x00, 0x91, 0x3f, 0xae, 0x7e, 0xef, 0x41, 0xd0, 0xfc, 0x6d, - 0xc3, 0x52, 0x82, 0x13, 0xbd, 0x2c, 0xe5, 0x74, 0xda, 0x4b, - 0x9b, 0x0a, 0xa4, 0x35, 0x19, 0x88, 0x26, 0xb7, 0x67, 0xf6, - 0x58, 0xc9, 0xd7, 0x46, 0xe8, 0x79, 0xa9, 0x38, 0x96, 0x07, - 0x2b, 0xba, 0x14, 0x85, 0x55, 0xc4, 0x6a, 0xfb, 0x32, 0xa3, - 0x0d, 0x9c, 0x4c, 0xdd, 0x73, 0xe2, 0xce, 0x5f, 0xf1, 0x60, - 0xb0, 0x21, 0x8f, 0x1e, 0xb3, 0x22, 0x8c, 0x1d, 0xcd, 0x5c, - 0xf2, 0x63, 0x4f, 0xde, 0x70, 0xe1, 0x31, 0xa0, 0x0e, 0x9f, - 0x56, 0xc7, 0x69, 0xf8, 0x28, 0xb9, 0x17, 0x86, 0xaa, 0x3b, - 0x95, 0x04, 0xd4, 0x45, 0xeb, 0x7a, 0x64, 0xf5, 0x5b, 0xca, - 0x1a, 0x8b, 0x25, 0xb4, 0x98, 0x09, 0xa7, 0x36, 0xe6, 0x77, - 0xd9, 0x48, 0x81, 0x10, 0xbe, 0x2f, 0xff, 0x6e, 0xc0, 0x51, - 0x7d, 0xec, 0x42, 0xd3, 0x03, 0x92, 0x3c, 0xad, 0x7b, 0xea, - 0x44, 0xd5, 0x05, 0x94, 0x3a, 0xab, 0x87, 0x16, 0xb8, 0x29, - 0xf9, 0x68, 0xc6, 0x57, 0x9e, 0x0f, 0xa1, 0x30, 0xe0, 0x71, - 0xdf, 0x4e, 0x62, 0xf3, 0x5d, 0xcc, 0x1c, 0x8d, 0x23, 0xb2, - 0xac, 0x3d, 0x93, 0x02, 0xd2, 0x43, 0xed, 0x7c, 0x50, 0xc1, - 0x6f, 0xfe, 0x2e, 0xbf, 0x11, 0x80, 0x49, 0xd8, 0x76, 0xe7, - 0x37, 0xa6, 0x08, 0x99, 0xb5, 0x24, 0x8a, 0x1b, 0xcb, 0x5a, - 0xf4, 0x65, 0xc8, 0x59, 0xf7, 0x66, 0xb6, 0x27, 0x89, 0x18, - 0x34, 0xa5, 0x0b, 0x9a, 0x4a, 0xdb, 0x75, 0xe4, 0x2d, 0xbc, - 0x12, 0x83, 0x53, 0xc2, 0x6c, 0xfd, 0xd1, 0x40, 0xee, 0x7f, - 0xaf, 0x3e, 0x90, 0x01, 0x1f, 0x8e, 0x20, 0xb1, 0x61, 0xf0, - 0x5e, 0xcf, 0xe3, 0x72, 0xdc, 0x4d, 0x9d, 0x0c, 0xa2, 0x33, - 0xfa, 0x6b, 0xc5, 0x54, 0x84, 0x15, 0xbb, 0x2a, 0x06, 0x97, - 0x39, 0xa8, 0x78, 0xe9, 0x47, 0xd6, 0x00, 0x92, 0x39, 0xab, - 0x72, 0xe0, 0x4b, 0xd9, 0xe4, 0x76, 0xdd, 0x4f, 0x96, 0x04, - 0xaf, 0x3d, 0xd5, 0x47, 0xec, 0x7e, 0xa7, 0x35, 0x9e, 0x0c, - 0x31, 0xa3, 0x08, 0x9a, 0x43, 0xd1, 0x7a, 0xe8, 0xb7, 0x25, - 0x8e, 0x1c, 0xc5, 0x57, 0xfc, 0x6e, 0x53, 0xc1, 0x6a, 0xf8, - 0x21, 0xb3, 0x18, 0x8a, 0x62, 0xf0, 0x5b, 0xc9, 0x10, 0x82, - 0x29, 0xbb, 0x86, 0x14, 0xbf, 0x2d, 0xf4, 0x66, 0xcd, 0x5f, - 0x73, 0xe1, 0x4a, 0xd8, 0x01, 0x93, 0x38, 0xaa, 0x97, 0x05, - 0xae, 0x3c, 0xe5, 0x77, 0xdc, 0x4e, 0xa6, 0x34, 0x9f, 0x0d, - 0xd4, 0x46, 0xed, 0x7f, 0x42, 0xd0, 0x7b, 0xe9, 0x30, 0xa2, - 0x09, 0x9b, 0xc4, 0x56, 0xfd, 0x6f, 0xb6, 0x24, 0x8f, 0x1d, - 0x20, 0xb2, 0x19, 0x8b, 0x52, 0xc0, 0x6b, 0xf9, 0x11, 0x83, - 0x28, 0xba, 0x63, 0xf1, 0x5a, 0xc8, 0xf5, 0x67, 0xcc, 0x5e, - 0x87, 0x15, 0xbe, 0x2c, 0xe6, 0x74, 0xdf, 0x4d, 0x94, 0x06, - 0xad, 0x3f, 0x02, 0x90, 0x3b, 0xa9, 0x70, 0xe2, 0x49, 0xdb, - 0x33, 0xa1, 0x0a, 0x98, 0x41, 0xd3, 0x78, 0xea, 0xd7, 0x45, - 0xee, 0x7c, 0xa5, 0x37, 0x9c, 0x0e, 0x51, 0xc3, 0x68, 0xfa, - 0x23, 0xb1, 0x1a, 0x88, 0xb5, 0x27, 0x8c, 0x1e, 0xc7, 0x55, - 0xfe, 0x6c, 0x84, 0x16, 0xbd, 0x2f, 0xf6, 0x64, 0xcf, 0x5d, - 0x60, 0xf2, 0x59, 0xcb, 0x12, 0x80, 0x2b, 0xb9, 0x95, 0x07, - 0xac, 0x3e, 0xe7, 0x75, 0xde, 0x4c, 0x71, 0xe3, 0x48, 0xda, - 0x03, 0x91, 0x3a, 0xa8, 0x40, 0xd2, 0x79, 0xeb, 0x32, 0xa0, - 0x0b, 0x99, 0xa4, 0x36, 0x9d, 0x0f, 0xd6, 0x44, 0xef, 0x7d, - 0x22, 0xb0, 0x1b, 0x89, 0x50, 0xc2, 0x69, 0xfb, 0xc6, 0x54, - 0xff, 0x6d, 0xb4, 0x26, 0x8d, 0x1f, 0xf7, 0x65, 0xce, 0x5c, - 0x85, 0x17, 0xbc, 0x2e, 0x13, 0x81, 0x2a, 0xb8, 0x61, 0xf3, - 0x58, 0xca, 0x00, 0x93, 0x3b, 0xa8, 0x76, 0xe5, 0x4d, 0xde, - 0xec, 0x7f, 0xd7, 0x44, 0x9a, 0x09, 0xa1, 0x32, 0xc5, 0x56, - 0xfe, 0x6d, 0xb3, 0x20, 0x88, 0x1b, 0x29, 0xba, 0x12, 0x81, - 0x5f, 0xcc, 0x64, 0xf7, 0x97, 0x04, 0xac, 0x3f, 0xe1, 0x72, - 0xda, 0x49, 0x7b, 0xe8, 0x40, 0xd3, 0x0d, 0x9e, 0x36, 0xa5, - 0x52, 0xc1, 0x69, 0xfa, 0x24, 0xb7, 0x1f, 0x8c, 0xbe, 0x2d, - 0x85, 0x16, 0xc8, 0x5b, 0xf3, 0x60, 0x33, 0xa0, 0x08, 0x9b, - 0x45, 0xd6, 0x7e, 0xed, 0xdf, 0x4c, 0xe4, 0x77, 0xa9, 0x3a, - 0x92, 0x01, 0xf6, 0x65, 0xcd, 0x5e, 0x80, 0x13, 0xbb, 0x28, - 0x1a, 0x89, 0x21, 0xb2, 0x6c, 0xff, 0x57, 0xc4, 0xa4, 0x37, - 0x9f, 0x0c, 0xd2, 0x41, 0xe9, 0x7a, 0x48, 0xdb, 0x73, 0xe0, - 0x3e, 0xad, 0x05, 0x96, 0x61, 0xf2, 0x5a, 0xc9, 0x17, 0x84, - 0x2c, 0xbf, 0x8d, 0x1e, 0xb6, 0x25, 0xfb, 0x68, 0xc0, 0x53, - 0x66, 0xf5, 0x5d, 0xce, 0x10, 0x83, 0x2b, 0xb8, 0x8a, 0x19, - 0xb1, 0x22, 0xfc, 0x6f, 0xc7, 0x54, 0xa3, 0x30, 0x98, 0x0b, - 0xd5, 0x46, 0xee, 0x7d, 0x4f, 0xdc, 0x74, 0xe7, 0x39, 0xaa, - 0x02, 0x91, 0xf1, 0x62, 0xca, 0x59, 0x87, 0x14, 0xbc, 0x2f, - 0x1d, 0x8e, 0x26, 0xb5, 0x6b, 0xf8, 0x50, 0xc3, 0x34, 0xa7, - 0x0f, 0x9c, 0x42, 0xd1, 0x79, 0xea, 0xd8, 0x4b, 0xe3, 0x70, - 0xae, 0x3d, 0x95, 0x06, 0x55, 0xc6, 0x6e, 0xfd, 0x23, 0xb0, - 0x18, 0x8b, 0xb9, 0x2a, 0x82, 0x11, 0xcf, 0x5c, 0xf4, 0x67, - 0x90, 0x03, 0xab, 0x38, 0xe6, 0x75, 0xdd, 0x4e, 0x7c, 0xef, - 0x47, 0xd4, 0x0a, 0x99, 0x31, 0xa2, 0xc2, 0x51, 0xf9, 0x6a, - 0xb4, 0x27, 0x8f, 0x1c, 0x2e, 0xbd, 0x15, 0x86, 0x58, 0xcb, - 0x63, 0xf0, 0x07, 0x94, 0x3c, 0xaf, 0x71, 0xe2, 0x4a, 0xd9, - 0xeb, 0x78, 0xd0, 0x43, 0x9d, 0x0e, 0xa6, 0x35, 0x00, 0x94, - 0x35, 0xa1, 0x6a, 0xfe, 0x5f, 0xcb, 0xd4, 0x40, 0xe1, 0x75, - 0xbe, 0x2a, 0x8b, 0x1f, 0xb5, 0x21, 0x80, 0x14, 0xdf, 0x4b, - 0xea, 0x7e, 0x61, 0xf5, 0x54, 0xc0, 0x0b, 0x9f, 0x3e, 0xaa, - 0x77, 0xe3, 0x42, 0xd6, 0x1d, 0x89, 0x28, 0xbc, 0xa3, 0x37, - 0x96, 0x02, 0xc9, 0x5d, 0xfc, 0x68, 0xc2, 0x56, 0xf7, 0x63, - 0xa8, 0x3c, 0x9d, 0x09, 0x16, 0x82, 0x23, 0xb7, 0x7c, 0xe8, - 0x49, 0xdd, 0xee, 0x7a, 0xdb, 0x4f, 0x84, 0x10, 0xb1, 0x25, - 0x3a, 0xae, 0x0f, 0x9b, 0x50, 0xc4, 0x65, 0xf1, 0x5b, 0xcf, - 0x6e, 0xfa, 0x31, 0xa5, 0x04, 0x90, 0x8f, 0x1b, 0xba, 0x2e, - 0xe5, 0x71, 0xd0, 0x44, 0x99, 0x0d, 0xac, 0x38, 0xf3, 0x67, - 0xc6, 0x52, 0x4d, 0xd9, 0x78, 0xec, 0x27, 0xb3, 0x12, 0x86, - 0x2c, 0xb8, 0x19, 0x8d, 0x46, 0xd2, 0x73, 0xe7, 0xf8, 0x6c, - 0xcd, 0x59, 0x92, 0x06, 0xa7, 0x33, 0xc1, 0x55, 0xf4, 0x60, - 0xab, 0x3f, 0x9e, 0x0a, 0x15, 0x81, 0x20, 0xb4, 0x7f, 0xeb, - 0x4a, 0xde, 0x74, 0xe0, 0x41, 0xd5, 0x1e, 0x8a, 0x2b, 0xbf, - 0xa0, 0x34, 0x95, 0x01, 0xca, 0x5e, 0xff, 0x6b, 0xb6, 0x22, - 0x83, 0x17, 0xdc, 0x48, 0xe9, 0x7d, 0x62, 0xf6, 0x57, 0xc3, - 0x08, 0x9c, 0x3d, 0xa9, 0x03, 0x97, 0x36, 0xa2, 0x69, 0xfd, - 0x5c, 0xc8, 0xd7, 0x43, 0xe2, 0x76, 0xbd, 0x29, 0x88, 0x1c, - 0x2f, 0xbb, 0x1a, 0x8e, 0x45, 0xd1, 0x70, 0xe4, 0xfb, 0x6f, - 0xce, 0x5a, 0x91, 0x05, 0xa4, 0x30, 0x9a, 0x0e, 0xaf, 0x3b, - 0xf0, 0x64, 0xc5, 0x51, 0x4e, 0xda, 0x7b, 0xef, 0x24, 0xb0, - 0x11, 0x85, 0x58, 0xcc, 0x6d, 0xf9, 0x32, 0xa6, 0x07, 0x93, - 0x8c, 0x18, 0xb9, 0x2d, 0xe6, 0x72, 0xd3, 0x47, 0xed, 0x79, - 0xd8, 0x4c, 0x87, 0x13, 0xb2, 0x26, 0x39, 0xad, 0x0c, 0x98, - 0x53, 0xc7, 0x66, 0xf2, 0x00, 0x95, 0x37, 0xa2, 0x6e, 0xfb, - 0x59, 0xcc, 0xdc, 0x49, 0xeb, 0x7e, 0xb2, 0x27, 0x85, 0x10, - 0xa5, 0x30, 0x92, 0x07, 0xcb, 0x5e, 0xfc, 0x69, 0x79, 0xec, - 0x4e, 0xdb, 0x17, 0x82, 0x20, 0xb5, 0x57, 0xc2, 0x60, 0xf5, - 0x39, 0xac, 0x0e, 0x9b, 0x8b, 0x1e, 0xbc, 0x29, 0xe5, 0x70, - 0xd2, 0x47, 0xf2, 0x67, 0xc5, 0x50, 0x9c, 0x09, 0xab, 0x3e, - 0x2e, 0xbb, 0x19, 0x8c, 0x40, 0xd5, 0x77, 0xe2, 0xae, 0x3b, - 0x99, 0x0c, 0xc0, 0x55, 0xf7, 0x62, 0x72, 0xe7, 0x45, 0xd0, - 0x1c, 0x89, 0x2b, 0xbe, 0x0b, 0x9e, 0x3c, 0xa9, 0x65, 0xf0, - 0x52, 0xc7, 0xd7, 0x42, 0xe0, 0x75, 0xb9, 0x2c, 0x8e, 0x1b, - 0xf9, 0x6c, 0xce, 0x5b, 0x97, 0x02, 0xa0, 0x35, 0x25, 0xb0, - 0x12, 0x87, 0x4b, 0xde, 0x7c, 0xe9, 0x5c, 0xc9, 0x6b, 0xfe, - 0x32, 0xa7, 0x05, 0x90, 0x80, 0x15, 0xb7, 0x22, 0xee, 0x7b, - 0xd9, 0x4c, 0x41, 0xd4, 0x76, 0xe3, 0x2f, 0xba, 0x18, 0x8d, - 0x9d, 0x08, 0xaa, 0x3f, 0xf3, 0x66, 0xc4, 0x51, 0xe4, 0x71, - 0xd3, 0x46, 0x8a, 0x1f, 0xbd, 0x28, 0x38, 0xad, 0x0f, 0x9a, - 0x56, 0xc3, 0x61, 0xf4, 0x16, 0x83, 0x21, 0xb4, 0x78, 0xed, - 0x4f, 0xda, 0xca, 0x5f, 0xfd, 0x68, 0xa4, 0x31, 0x93, 0x06, - 0xb3, 0x26, 0x84, 0x11, 0xdd, 0x48, 0xea, 0x7f, 0x6f, 0xfa, - 0x58, 0xcd, 0x01, 0x94, 0x36, 0xa3, 0xef, 0x7a, 0xd8, 0x4d, - 0x81, 0x14, 0xb6, 0x23, 0x33, 0xa6, 0x04, 0x91, 0x5d, 0xc8, - 0x6a, 0xff, 0x4a, 0xdf, 0x7d, 0xe8, 0x24, 0xb1, 0x13, 0x86, - 0x96, 0x03, 0xa1, 0x34, 0xf8, 0x6d, 0xcf, 0x5a, 0xb8, 0x2d, - 0x8f, 0x1a, 0xd6, 0x43, 0xe1, 0x74, 0x64, 0xf1, 0x53, 0xc6, - 0x0a, 0x9f, 0x3d, 0xa8, 0x1d, 0x88, 0x2a, 0xbf, 0x73, 0xe6, - 0x44, 0xd1, 0xc1, 0x54, 0xf6, 0x63, 0xaf, 0x3a, 0x98, 0x0d, - 0x00, 0x96, 0x31, 0xa7, 0x62, 0xf4, 0x53, 0xc5, 0xc4, 0x52, - 0xf5, 0x63, 0xa6, 0x30, 0x97, 0x01, 0x95, 0x03, 0xa4, 0x32, - 0xf7, 0x61, 0xc6, 0x50, 0x51, 0xc7, 0x60, 0xf6, 0x33, 0xa5, - 0x02, 0x94, 0x37, 0xa1, 0x06, 0x90, 0x55, 0xc3, 0x64, 0xf2, - 0xf3, 0x65, 0xc2, 0x54, 0x91, 0x07, 0xa0, 0x36, 0xa2, 0x34, - 0x93, 0x05, 0xc0, 0x56, 0xf1, 0x67, 0x66, 0xf0, 0x57, 0xc1, - 0x04, 0x92, 0x35, 0xa3, 0x6e, 0xf8, 0x5f, 0xc9, 0x0c, 0x9a, - 0x3d, 0xab, 0xaa, 0x3c, 0x9b, 0x0d, 0xc8, 0x5e, 0xf9, 0x6f, - 0xfb, 0x6d, 0xca, 0x5c, 0x99, 0x0f, 0xa8, 0x3e, 0x3f, 0xa9, - 0x0e, 0x98, 0x5d, 0xcb, 0x6c, 0xfa, 0x59, 0xcf, 0x68, 0xfe, - 0x3b, 0xad, 0x0a, 0x9c, 0x9d, 0x0b, 0xac, 0x3a, 0xff, 0x69, - 0xce, 0x58, 0xcc, 0x5a, 0xfd, 0x6b, 0xae, 0x38, 0x9f, 0x09, - 0x08, 0x9e, 0x39, 0xaf, 0x6a, 0xfc, 0x5b, 0xcd, 0xdc, 0x4a, - 0xed, 0x7b, 0xbe, 0x28, 0x8f, 0x19, 0x18, 0x8e, 0x29, 0xbf, - 0x7a, 0xec, 0x4b, 0xdd, 0x49, 0xdf, 0x78, 0xee, 0x2b, 0xbd, - 0x1a, 0x8c, 0x8d, 0x1b, 0xbc, 0x2a, 0xef, 0x79, 0xde, 0x48, - 0xeb, 0x7d, 0xda, 0x4c, 0x89, 0x1f, 0xb8, 0x2e, 0x2f, 0xb9, - 0x1e, 0x88, 0x4d, 0xdb, 0x7c, 0xea, 0x7e, 0xe8, 0x4f, 0xd9, - 0x1c, 0x8a, 0x2d, 0xbb, 0xba, 0x2c, 0x8b, 0x1d, 0xd8, 0x4e, - 0xe9, 0x7f, 0xb2, 0x24, 0x83, 0x15, 0xd0, 0x46, 0xe1, 0x77, - 0x76, 0xe0, 0x47, 0xd1, 0x14, 0x82, 0x25, 0xb3, 0x27, 0xb1, - 0x16, 0x80, 0x45, 0xd3, 0x74, 0xe2, 0xe3, 0x75, 0xd2, 0x44, - 0x81, 0x17, 0xb0, 0x26, 0x85, 0x13, 0xb4, 0x22, 0xe7, 0x71, - 0xd6, 0x40, 0x41, 0xd7, 0x70, 0xe6, 0x23, 0xb5, 0x12, 0x84, - 0x10, 0x86, 0x21, 0xb7, 0x72, 0xe4, 0x43, 0xd5, 0xd4, 0x42, - 0xe5, 0x73, 0xb6, 0x20, 0x87, 0x11, 0x00, 0x97, 0x33, 0xa4, - 0x66, 0xf1, 0x55, 0xc2, 0xcc, 0x5b, 0xff, 0x68, 0xaa, 0x3d, - 0x99, 0x0e, 0x85, 0x12, 0xb6, 0x21, 0xe3, 0x74, 0xd0, 0x47, - 0x49, 0xde, 0x7a, 0xed, 0x2f, 0xb8, 0x1c, 0x8b, 0x17, 0x80, - 0x24, 0xb3, 0x71, 0xe6, 0x42, 0xd5, 0xdb, 0x4c, 0xe8, 0x7f, - 0xbd, 0x2a, 0x8e, 0x19, 0x92, 0x05, 0xa1, 0x36, 0xf4, 0x63, - 0xc7, 0x50, 0x5e, 0xc9, 0x6d, 0xfa, 0x38, 0xaf, 0x0b, 0x9c, - 0x2e, 0xb9, 0x1d, 0x8a, 0x48, 0xdf, 0x7b, 0xec, 0xe2, 0x75, - 0xd1, 0x46, 0x84, 0x13, 0xb7, 0x20, 0xab, 0x3c, 0x98, 0x0f, - 0xcd, 0x5a, 0xfe, 0x69, 0x67, 0xf0, 0x54, 0xc3, 0x01, 0x96, - 0x32, 0xa5, 0x39, 0xae, 0x0a, 0x9d, 0x5f, 0xc8, 0x6c, 0xfb, - 0xf5, 0x62, 0xc6, 0x51, 0x93, 0x04, 0xa0, 0x37, 0xbc, 0x2b, - 0x8f, 0x18, 0xda, 0x4d, 0xe9, 0x7e, 0x70, 0xe7, 0x43, 0xd4, - 0x16, 0x81, 0x25, 0xb2, 0x5c, 0xcb, 0x6f, 0xf8, 0x3a, 0xad, - 0x09, 0x9e, 0x90, 0x07, 0xa3, 0x34, 0xf6, 0x61, 0xc5, 0x52, - 0xd9, 0x4e, 0xea, 0x7d, 0xbf, 0x28, 0x8c, 0x1b, 0x15, 0x82, - 0x26, 0xb1, 0x73, 0xe4, 0x40, 0xd7, 0x4b, 0xdc, 0x78, 0xef, - 0x2d, 0xba, 0x1e, 0x89, 0x87, 0x10, 0xb4, 0x23, 0xe1, 0x76, - 0xd2, 0x45, 0xce, 0x59, 0xfd, 0x6a, 0xa8, 0x3f, 0x9b, 0x0c, - 0x02, 0x95, 0x31, 0xa6, 0x64, 0xf3, 0x57, 0xc0, 0x72, 0xe5, - 0x41, 0xd6, 0x14, 0x83, 0x27, 0xb0, 0xbe, 0x29, 0x8d, 0x1a, - 0xd8, 0x4f, 0xeb, 0x7c, 0xf7, 0x60, 0xc4, 0x53, 0x91, 0x06, - 0xa2, 0x35, 0x3b, 0xac, 0x08, 0x9f, 0x5d, 0xca, 0x6e, 0xf9, - 0x65, 0xf2, 0x56, 0xc1, 0x03, 0x94, 0x30, 0xa7, 0xa9, 0x3e, - 0x9a, 0x0d, 0xcf, 0x58, 0xfc, 0x6b, 0xe0, 0x77, 0xd3, 0x44, - 0x86, 0x11, 0xb5, 0x22, 0x2c, 0xbb, 0x1f, 0x88, 0x4a, 0xdd, - 0x79, 0xee, 0x00, 0x98, 0x2d, 0xb5, 0x5a, 0xc2, 0x77, 0xef, - 0xb4, 0x2c, 0x99, 0x01, 0xee, 0x76, 0xc3, 0x5b, 0x75, 0xed, - 0x58, 0xc0, 0x2f, 0xb7, 0x02, 0x9a, 0xc1, 0x59, 0xec, 0x74, - 0x9b, 0x03, 0xb6, 0x2e, 0xea, 0x72, 0xc7, 0x5f, 0xb0, 0x28, - 0x9d, 0x05, 0x5e, 0xc6, 0x73, 0xeb, 0x04, 0x9c, 0x29, 0xb1, - 0x9f, 0x07, 0xb2, 0x2a, 0xc5, 0x5d, 0xe8, 0x70, 0x2b, 0xb3, - 0x06, 0x9e, 0x71, 0xe9, 0x5c, 0xc4, 0xc9, 0x51, 0xe4, 0x7c, - 0x93, 0x0b, 0xbe, 0x26, 0x7d, 0xe5, 0x50, 0xc8, 0x27, 0xbf, - 0x0a, 0x92, 0xbc, 0x24, 0x91, 0x09, 0xe6, 0x7e, 0xcb, 0x53, - 0x08, 0x90, 0x25, 0xbd, 0x52, 0xca, 0x7f, 0xe7, 0x23, 0xbb, - 0x0e, 0x96, 0x79, 0xe1, 0x54, 0xcc, 0x97, 0x0f, 0xba, 0x22, - 0xcd, 0x55, 0xe0, 0x78, 0x56, 0xce, 0x7b, 0xe3, 0x0c, 0x94, - 0x21, 0xb9, 0xe2, 0x7a, 0xcf, 0x57, 0xb8, 0x20, 0x95, 0x0d, - 0x8f, 0x17, 0xa2, 0x3a, 0xd5, 0x4d, 0xf8, 0x60, 0x3b, 0xa3, - 0x16, 0x8e, 0x61, 0xf9, 0x4c, 0xd4, 0xfa, 0x62, 0xd7, 0x4f, - 0xa0, 0x38, 0x8d, 0x15, 0x4e, 0xd6, 0x63, 0xfb, 0x14, 0x8c, - 0x39, 0xa1, 0x65, 0xfd, 0x48, 0xd0, 0x3f, 0xa7, 0x12, 0x8a, - 0xd1, 0x49, 0xfc, 0x64, 0x8b, 0x13, 0xa6, 0x3e, 0x10, 0x88, - 0x3d, 0xa5, 0x4a, 0xd2, 0x67, 0xff, 0xa4, 0x3c, 0x89, 0x11, - 0xfe, 0x66, 0xd3, 0x4b, 0x46, 0xde, 0x6b, 0xf3, 0x1c, 0x84, - 0x31, 0xa9, 0xf2, 0x6a, 0xdf, 0x47, 0xa8, 0x30, 0x85, 0x1d, - 0x33, 0xab, 0x1e, 0x86, 0x69, 0xf1, 0x44, 0xdc, 0x87, 0x1f, - 0xaa, 0x32, 0xdd, 0x45, 0xf0, 0x68, 0xac, 0x34, 0x81, 0x19, - 0xf6, 0x6e, 0xdb, 0x43, 0x18, 0x80, 0x35, 0xad, 0x42, 0xda, - 0x6f, 0xf7, 0xd9, 0x41, 0xf4, 0x6c, 0x83, 0x1b, 0xae, 0x36, - 0x6d, 0xf5, 0x40, 0xd8, 0x37, 0xaf, 0x1a, 0x82, 0x00, 0x99, - 0x2f, 0xb6, 0x5e, 0xc7, 0x71, 0xe8, 0xbc, 0x25, 0x93, 0x0a, - 0xe2, 0x7b, 0xcd, 0x54, 0x65, 0xfc, 0x4a, 0xd3, 0x3b, 0xa2, - 0x14, 0x8d, 0xd9, 0x40, 0xf6, 0x6f, 0x87, 0x1e, 0xa8, 0x31, - 0xca, 0x53, 0xe5, 0x7c, 0x94, 0x0d, 0xbb, 0x22, 0x76, 0xef, - 0x59, 0xc0, 0x28, 0xb1, 0x07, 0x9e, 0xaf, 0x36, 0x80, 0x19, - 0xf1, 0x68, 0xde, 0x47, 0x13, 0x8a, 0x3c, 0xa5, 0x4d, 0xd4, - 0x62, 0xfb, 0x89, 0x10, 0xa6, 0x3f, 0xd7, 0x4e, 0xf8, 0x61, - 0x35, 0xac, 0x1a, 0x83, 0x6b, 0xf2, 0x44, 0xdd, 0xec, 0x75, - 0xc3, 0x5a, 0xb2, 0x2b, 0x9d, 0x04, 0x50, 0xc9, 0x7f, 0xe6, - 0x0e, 0x97, 0x21, 0xb8, 0x43, 0xda, 0x6c, 0xf5, 0x1d, 0x84, - 0x32, 0xab, 0xff, 0x66, 0xd0, 0x49, 0xa1, 0x38, 0x8e, 0x17, - 0x26, 0xbf, 0x09, 0x90, 0x78, 0xe1, 0x57, 0xce, 0x9a, 0x03, - 0xb5, 0x2c, 0xc4, 0x5d, 0xeb, 0x72, 0x0f, 0x96, 0x20, 0xb9, - 0x51, 0xc8, 0x7e, 0xe7, 0xb3, 0x2a, 0x9c, 0x05, 0xed, 0x74, - 0xc2, 0x5b, 0x6a, 0xf3, 0x45, 0xdc, 0x34, 0xad, 0x1b, 0x82, - 0xd6, 0x4f, 0xf9, 0x60, 0x88, 0x11, 0xa7, 0x3e, 0xc5, 0x5c, - 0xea, 0x73, 0x9b, 0x02, 0xb4, 0x2d, 0x79, 0xe0, 0x56, 0xcf, - 0x27, 0xbe, 0x08, 0x91, 0xa0, 0x39, 0x8f, 0x16, 0xfe, 0x67, - 0xd1, 0x48, 0x1c, 0x85, 0x33, 0xaa, 0x42, 0xdb, 0x6d, 0xf4, - 0x86, 0x1f, 0xa9, 0x30, 0xd8, 0x41, 0xf7, 0x6e, 0x3a, 0xa3, - 0x15, 0x8c, 0x64, 0xfd, 0x4b, 0xd2, 0xe3, 0x7a, 0xcc, 0x55, - 0xbd, 0x24, 0x92, 0x0b, 0x5f, 0xc6, 0x70, 0xe9, 0x01, 0x98, - 0x2e, 0xb7, 0x4c, 0xd5, 0x63, 0xfa, 0x12, 0x8b, 0x3d, 0xa4, - 0xf0, 0x69, 0xdf, 0x46, 0xae, 0x37, 0x81, 0x18, 0x29, 0xb0, - 0x06, 0x9f, 0x77, 0xee, 0x58, 0xc1, 0x95, 0x0c, 0xba, 0x23, - 0xcb, 0x52, 0xe4, 0x7d, 0x00, 0x9a, 0x29, 0xb3, 0x52, 0xc8, - 0x7b, 0xe1, 0xa4, 0x3e, 0x8d, 0x17, 0xf6, 0x6c, 0xdf, 0x45, - 0x55, 0xcf, 0x7c, 0xe6, 0x07, 0x9d, 0x2e, 0xb4, 0xf1, 0x6b, - 0xd8, 0x42, 0xa3, 0x39, 0x8a, 0x10, 0xaa, 0x30, 0x83, 0x19, - 0xf8, 0x62, 0xd1, 0x4b, 0x0e, 0x94, 0x27, 0xbd, 0x5c, 0xc6, - 0x75, 0xef, 0xff, 0x65, 0xd6, 0x4c, 0xad, 0x37, 0x84, 0x1e, - 0x5b, 0xc1, 0x72, 0xe8, 0x09, 0x93, 0x20, 0xba, 0x49, 0xd3, - 0x60, 0xfa, 0x1b, 0x81, 0x32, 0xa8, 0xed, 0x77, 0xc4, 0x5e, - 0xbf, 0x25, 0x96, 0x0c, 0x1c, 0x86, 0x35, 0xaf, 0x4e, 0xd4, - 0x67, 0xfd, 0xb8, 0x22, 0x91, 0x0b, 0xea, 0x70, 0xc3, 0x59, - 0xe3, 0x79, 0xca, 0x50, 0xb1, 0x2b, 0x98, 0x02, 0x47, 0xdd, - 0x6e, 0xf4, 0x15, 0x8f, 0x3c, 0xa6, 0xb6, 0x2c, 0x9f, 0x05, - 0xe4, 0x7e, 0xcd, 0x57, 0x12, 0x88, 0x3b, 0xa1, 0x40, 0xda, - 0x69, 0xf3, 0x92, 0x08, 0xbb, 0x21, 0xc0, 0x5a, 0xe9, 0x73, - 0x36, 0xac, 0x1f, 0x85, 0x64, 0xfe, 0x4d, 0xd7, 0xc7, 0x5d, - 0xee, 0x74, 0x95, 0x0f, 0xbc, 0x26, 0x63, 0xf9, 0x4a, 0xd0, - 0x31, 0xab, 0x18, 0x82, 0x38, 0xa2, 0x11, 0x8b, 0x6a, 0xf0, - 0x43, 0xd9, 0x9c, 0x06, 0xb5, 0x2f, 0xce, 0x54, 0xe7, 0x7d, - 0x6d, 0xf7, 0x44, 0xde, 0x3f, 0xa5, 0x16, 0x8c, 0xc9, 0x53, - 0xe0, 0x7a, 0x9b, 0x01, 0xb2, 0x28, 0xdb, 0x41, 0xf2, 0x68, - 0x89, 0x13, 0xa0, 0x3a, 0x7f, 0xe5, 0x56, 0xcc, 0x2d, 0xb7, - 0x04, 0x9e, 0x8e, 0x14, 0xa7, 0x3d, 0xdc, 0x46, 0xf5, 0x6f, - 0x2a, 0xb0, 0x03, 0x99, 0x78, 0xe2, 0x51, 0xcb, 0x71, 0xeb, - 0x58, 0xc2, 0x23, 0xb9, 0x0a, 0x90, 0xd5, 0x4f, 0xfc, 0x66, - 0x87, 0x1d, 0xae, 0x34, 0x24, 0xbe, 0x0d, 0x97, 0x76, 0xec, - 0x5f, 0xc5, 0x80, 0x1a, 0xa9, 0x33, 0xd2, 0x48, 0xfb, 0x61, - 0x00, 0x9b, 0x2b, 0xb0, 0x56, 0xcd, 0x7d, 0xe6, 0xac, 0x37, - 0x87, 0x1c, 0xfa, 0x61, 0xd1, 0x4a, 0x45, 0xde, 0x6e, 0xf5, - 0x13, 0x88, 0x38, 0xa3, 0xe9, 0x72, 0xc2, 0x59, 0xbf, 0x24, - 0x94, 0x0f, 0x8a, 0x11, 0xa1, 0x3a, 0xdc, 0x47, 0xf7, 0x6c, - 0x26, 0xbd, 0x0d, 0x96, 0x70, 0xeb, 0x5b, 0xc0, 0xcf, 0x54, - 0xe4, 0x7f, 0x99, 0x02, 0xb2, 0x29, 0x63, 0xf8, 0x48, 0xd3, - 0x35, 0xae, 0x1e, 0x85, 0x09, 0x92, 0x22, 0xb9, 0x5f, 0xc4, - 0x74, 0xef, 0xa5, 0x3e, 0x8e, 0x15, 0xf3, 0x68, 0xd8, 0x43, - 0x4c, 0xd7, 0x67, 0xfc, 0x1a, 0x81, 0x31, 0xaa, 0xe0, 0x7b, - 0xcb, 0x50, 0xb6, 0x2d, 0x9d, 0x06, 0x83, 0x18, 0xa8, 0x33, - 0xd5, 0x4e, 0xfe, 0x65, 0x2f, 0xb4, 0x04, 0x9f, 0x79, 0xe2, - 0x52, 0xc9, 0xc6, 0x5d, 0xed, 0x76, 0x90, 0x0b, 0xbb, 0x20, - 0x6a, 0xf1, 0x41, 0xda, 0x3c, 0xa7, 0x17, 0x8c, 0x12, 0x89, - 0x39, 0xa2, 0x44, 0xdf, 0x6f, 0xf4, 0xbe, 0x25, 0x95, 0x0e, - 0xe8, 0x73, 0xc3, 0x58, 0x57, 0xcc, 0x7c, 0xe7, 0x01, 0x9a, - 0x2a, 0xb1, 0xfb, 0x60, 0xd0, 0x4b, 0xad, 0x36, 0x86, 0x1d, - 0x98, 0x03, 0xb3, 0x28, 0xce, 0x55, 0xe5, 0x7e, 0x34, 0xaf, - 0x1f, 0x84, 0x62, 0xf9, 0x49, 0xd2, 0xdd, 0x46, 0xf6, 0x6d, - 0x8b, 0x10, 0xa0, 0x3b, 0x71, 0xea, 0x5a, 0xc1, 0x27, 0xbc, - 0x0c, 0x97, 0x1b, 0x80, 0x30, 0xab, 0x4d, 0xd6, 0x66, 0xfd, - 0xb7, 0x2c, 0x9c, 0x07, 0xe1, 0x7a, 0xca, 0x51, 0x5e, 0xc5, - 0x75, 0xee, 0x08, 0x93, 0x23, 0xb8, 0xf2, 0x69, 0xd9, 0x42, - 0xa4, 0x3f, 0x8f, 0x14, 0x91, 0x0a, 0xba, 0x21, 0xc7, 0x5c, - 0xec, 0x77, 0x3d, 0xa6, 0x16, 0x8d, 0x6b, 0xf0, 0x40, 0xdb, - 0xd4, 0x4f, 0xff, 0x64, 0x82, 0x19, 0xa9, 0x32, 0x78, 0xe3, - 0x53, 0xc8, 0x2e, 0xb5, 0x05, 0x9e, 0x00, 0x9c, 0x25, 0xb9, - 0x4a, 0xd6, 0x6f, 0xf3, 0x94, 0x08, 0xb1, 0x2d, 0xde, 0x42, - 0xfb, 0x67, 0x35, 0xa9, 0x10, 0x8c, 0x7f, 0xe3, 0x5a, 0xc6, - 0xa1, 0x3d, 0x84, 0x18, 0xeb, 0x77, 0xce, 0x52, 0x6a, 0xf6, - 0x4f, 0xd3, 0x20, 0xbc, 0x05, 0x99, 0xfe, 0x62, 0xdb, 0x47, - 0xb4, 0x28, 0x91, 0x0d, 0x5f, 0xc3, 0x7a, 0xe6, 0x15, 0x89, - 0x30, 0xac, 0xcb, 0x57, 0xee, 0x72, 0x81, 0x1d, 0xa4, 0x38, - 0xd4, 0x48, 0xf1, 0x6d, 0x9e, 0x02, 0xbb, 0x27, 0x40, 0xdc, - 0x65, 0xf9, 0x0a, 0x96, 0x2f, 0xb3, 0xe1, 0x7d, 0xc4, 0x58, - 0xab, 0x37, 0x8e, 0x12, 0x75, 0xe9, 0x50, 0xcc, 0x3f, 0xa3, - 0x1a, 0x86, 0xbe, 0x22, 0x9b, 0x07, 0xf4, 0x68, 0xd1, 0x4d, - 0x2a, 0xb6, 0x0f, 0x93, 0x60, 0xfc, 0x45, 0xd9, 0x8b, 0x17, - 0xae, 0x32, 0xc1, 0x5d, 0xe4, 0x78, 0x1f, 0x83, 0x3a, 0xa6, - 0x55, 0xc9, 0x70, 0xec, 0xb5, 0x29, 0x90, 0x0c, 0xff, 0x63, - 0xda, 0x46, 0x21, 0xbd, 0x04, 0x98, 0x6b, 0xf7, 0x4e, 0xd2, - 0x80, 0x1c, 0xa5, 0x39, 0xca, 0x56, 0xef, 0x73, 0x14, 0x88, - 0x31, 0xad, 0x5e, 0xc2, 0x7b, 0xe7, 0xdf, 0x43, 0xfa, 0x66, - 0x95, 0x09, 0xb0, 0x2c, 0x4b, 0xd7, 0x6e, 0xf2, 0x01, 0x9d, - 0x24, 0xb8, 0xea, 0x76, 0xcf, 0x53, 0xa0, 0x3c, 0x85, 0x19, - 0x7e, 0xe2, 0x5b, 0xc7, 0x34, 0xa8, 0x11, 0x8d, 0x61, 0xfd, - 0x44, 0xd8, 0x2b, 0xb7, 0x0e, 0x92, 0xf5, 0x69, 0xd0, 0x4c, - 0xbf, 0x23, 0x9a, 0x06, 0x54, 0xc8, 0x71, 0xed, 0x1e, 0x82, - 0x3b, 0xa7, 0xc0, 0x5c, 0xe5, 0x79, 0x8a, 0x16, 0xaf, 0x33, - 0x0b, 0x97, 0x2e, 0xb2, 0x41, 0xdd, 0x64, 0xf8, 0x9f, 0x03, - 0xba, 0x26, 0xd5, 0x49, 0xf0, 0x6c, 0x3e, 0xa2, 0x1b, 0x87, - 0x74, 0xe8, 0x51, 0xcd, 0xaa, 0x36, 0x8f, 0x13, 0xe0, 0x7c, - 0xc5, 0x59, 0x00, 0x9d, 0x27, 0xba, 0x4e, 0xd3, 0x69, 0xf4, - 0x9c, 0x01, 0xbb, 0x26, 0xd2, 0x4f, 0xf5, 0x68, 0x25, 0xb8, - 0x02, 0x9f, 0x6b, 0xf6, 0x4c, 0xd1, 0xb9, 0x24, 0x9e, 0x03, - 0xf7, 0x6a, 0xd0, 0x4d, 0x4a, 0xd7, 0x6d, 0xf0, 0x04, 0x99, - 0x23, 0xbe, 0xd6, 0x4b, 0xf1, 0x6c, 0x98, 0x05, 0xbf, 0x22, - 0x6f, 0xf2, 0x48, 0xd5, 0x21, 0xbc, 0x06, 0x9b, 0xf3, 0x6e, - 0xd4, 0x49, 0xbd, 0x20, 0x9a, 0x07, 0x94, 0x09, 0xb3, 0x2e, - 0xda, 0x47, 0xfd, 0x60, 0x08, 0x95, 0x2f, 0xb2, 0x46, 0xdb, - 0x61, 0xfc, 0xb1, 0x2c, 0x96, 0x0b, 0xff, 0x62, 0xd8, 0x45, - 0x2d, 0xb0, 0x0a, 0x97, 0x63, 0xfe, 0x44, 0xd9, 0xde, 0x43, - 0xf9, 0x64, 0x90, 0x0d, 0xb7, 0x2a, 0x42, 0xdf, 0x65, 0xf8, - 0x0c, 0x91, 0x2b, 0xb6, 0xfb, 0x66, 0xdc, 0x41, 0xb5, 0x28, - 0x92, 0x0f, 0x67, 0xfa, 0x40, 0xdd, 0x29, 0xb4, 0x0e, 0x93, - 0x35, 0xa8, 0x12, 0x8f, 0x7b, 0xe6, 0x5c, 0xc1, 0xa9, 0x34, - 0x8e, 0x13, 0xe7, 0x7a, 0xc0, 0x5d, 0x10, 0x8d, 0x37, 0xaa, - 0x5e, 0xc3, 0x79, 0xe4, 0x8c, 0x11, 0xab, 0x36, 0xc2, 0x5f, - 0xe5, 0x78, 0x7f, 0xe2, 0x58, 0xc5, 0x31, 0xac, 0x16, 0x8b, - 0xe3, 0x7e, 0xc4, 0x59, 0xad, 0x30, 0x8a, 0x17, 0x5a, 0xc7, - 0x7d, 0xe0, 0x14, 0x89, 0x33, 0xae, 0xc6, 0x5b, 0xe1, 0x7c, - 0x88, 0x15, 0xaf, 0x32, 0xa1, 0x3c, 0x86, 0x1b, 0xef, 0x72, - 0xc8, 0x55, 0x3d, 0xa0, 0x1a, 0x87, 0x73, 0xee, 0x54, 0xc9, - 0x84, 0x19, 0xa3, 0x3e, 0xca, 0x57, 0xed, 0x70, 0x18, 0x85, - 0x3f, 0xa2, 0x56, 0xcb, 0x71, 0xec, 0xeb, 0x76, 0xcc, 0x51, - 0xa5, 0x38, 0x82, 0x1f, 0x77, 0xea, 0x50, 0xcd, 0x39, 0xa4, - 0x1e, 0x83, 0xce, 0x53, 0xe9, 0x74, 0x80, 0x1d, 0xa7, 0x3a, - 0x52, 0xcf, 0x75, 0xe8, 0x1c, 0x81, 0x3b, 0xa6, 0x00, 0x9e, - 0x21, 0xbf, 0x42, 0xdc, 0x63, 0xfd, 0x84, 0x1a, 0xa5, 0x3b, - 0xc6, 0x58, 0xe7, 0x79, 0x15, 0x8b, 0x34, 0xaa, 0x57, 0xc9, - 0x76, 0xe8, 0x91, 0x0f, 0xb0, 0x2e, 0xd3, 0x4d, 0xf2, 0x6c, - 0x2a, 0xb4, 0x0b, 0x95, 0x68, 0xf6, 0x49, 0xd7, 0xae, 0x30, - 0x8f, 0x11, 0xec, 0x72, 0xcd, 0x53, 0x3f, 0xa1, 0x1e, 0x80, - 0x7d, 0xe3, 0x5c, 0xc2, 0xbb, 0x25, 0x9a, 0x04, 0xf9, 0x67, - 0xd8, 0x46, 0x54, 0xca, 0x75, 0xeb, 0x16, 0x88, 0x37, 0xa9, - 0xd0, 0x4e, 0xf1, 0x6f, 0x92, 0x0c, 0xb3, 0x2d, 0x41, 0xdf, - 0x60, 0xfe, 0x03, 0x9d, 0x22, 0xbc, 0xc5, 0x5b, 0xe4, 0x7a, - 0x87, 0x19, 0xa6, 0x38, 0x7e, 0xe0, 0x5f, 0xc1, 0x3c, 0xa2, - 0x1d, 0x83, 0xfa, 0x64, 0xdb, 0x45, 0xb8, 0x26, 0x99, 0x07, - 0x6b, 0xf5, 0x4a, 0xd4, 0x29, 0xb7, 0x08, 0x96, 0xef, 0x71, - 0xce, 0x50, 0xad, 0x33, 0x8c, 0x12, 0xa8, 0x36, 0x89, 0x17, - 0xea, 0x74, 0xcb, 0x55, 0x2c, 0xb2, 0x0d, 0x93, 0x6e, 0xf0, - 0x4f, 0xd1, 0xbd, 0x23, 0x9c, 0x02, 0xff, 0x61, 0xde, 0x40, - 0x39, 0xa7, 0x18, 0x86, 0x7b, 0xe5, 0x5a, 0xc4, 0x82, 0x1c, - 0xa3, 0x3d, 0xc0, 0x5e, 0xe1, 0x7f, 0x06, 0x98, 0x27, 0xb9, - 0x44, 0xda, 0x65, 0xfb, 0x97, 0x09, 0xb6, 0x28, 0xd5, 0x4b, - 0xf4, 0x6a, 0x13, 0x8d, 0x32, 0xac, 0x51, 0xcf, 0x70, 0xee, - 0xfc, 0x62, 0xdd, 0x43, 0xbe, 0x20, 0x9f, 0x01, 0x78, 0xe6, - 0x59, 0xc7, 0x3a, 0xa4, 0x1b, 0x85, 0xe9, 0x77, 0xc8, 0x56, - 0xab, 0x35, 0x8a, 0x14, 0x6d, 0xf3, 0x4c, 0xd2, 0x2f, 0xb1, - 0x0e, 0x90, 0xd6, 0x48, 0xf7, 0x69, 0x94, 0x0a, 0xb5, 0x2b, - 0x52, 0xcc, 0x73, 0xed, 0x10, 0x8e, 0x31, 0xaf, 0xc3, 0x5d, - 0xe2, 0x7c, 0x81, 0x1f, 0xa0, 0x3e, 0x47, 0xd9, 0x66, 0xf8, - 0x05, 0x9b, 0x24, 0xba, 0x00, 0x9f, 0x23, 0xbc, 0x46, 0xd9, - 0x65, 0xfa, 0x8c, 0x13, 0xaf, 0x30, 0xca, 0x55, 0xe9, 0x76, - 0x05, 0x9a, 0x26, 0xb9, 0x43, 0xdc, 0x60, 0xff, 0x89, 0x16, - 0xaa, 0x35, 0xcf, 0x50, 0xec, 0x73, 0x0a, 0x95, 0x29, 0xb6, - 0x4c, 0xd3, 0x6f, 0xf0, 0x86, 0x19, 0xa5, 0x3a, 0xc0, 0x5f, - 0xe3, 0x7c, 0x0f, 0x90, 0x2c, 0xb3, 0x49, 0xd6, 0x6a, 0xf5, - 0x83, 0x1c, 0xa0, 0x3f, 0xc5, 0x5a, 0xe6, 0x79, 0x14, 0x8b, - 0x37, 0xa8, 0x52, 0xcd, 0x71, 0xee, 0x98, 0x07, 0xbb, 0x24, - 0xde, 0x41, 0xfd, 0x62, 0x11, 0x8e, 0x32, 0xad, 0x57, 0xc8, - 0x74, 0xeb, 0x9d, 0x02, 0xbe, 0x21, 0xdb, 0x44, 0xf8, 0x67, - 0x1e, 0x81, 0x3d, 0xa2, 0x58, 0xc7, 0x7b, 0xe4, 0x92, 0x0d, - 0xb1, 0x2e, 0xd4, 0x4b, 0xf7, 0x68, 0x1b, 0x84, 0x38, 0xa7, - 0x5d, 0xc2, 0x7e, 0xe1, 0x97, 0x08, 0xb4, 0x2b, 0xd1, 0x4e, - 0xf2, 0x6d, 0x28, 0xb7, 0x0b, 0x94, 0x6e, 0xf1, 0x4d, 0xd2, - 0xa4, 0x3b, 0x87, 0x18, 0xe2, 0x7d, 0xc1, 0x5e, 0x2d, 0xb2, - 0x0e, 0x91, 0x6b, 0xf4, 0x48, 0xd7, 0xa1, 0x3e, 0x82, 0x1d, - 0xe7, 0x78, 0xc4, 0x5b, 0x22, 0xbd, 0x01, 0x9e, 0x64, 0xfb, - 0x47, 0xd8, 0xae, 0x31, 0x8d, 0x12, 0xe8, 0x77, 0xcb, 0x54, - 0x27, 0xb8, 0x04, 0x9b, 0x61, 0xfe, 0x42, 0xdd, 0xab, 0x34, - 0x88, 0x17, 0xed, 0x72, 0xce, 0x51, 0x3c, 0xa3, 0x1f, 0x80, - 0x7a, 0xe5, 0x59, 0xc6, 0xb0, 0x2f, 0x93, 0x0c, 0xf6, 0x69, - 0xd5, 0x4a, 0x39, 0xa6, 0x1a, 0x85, 0x7f, 0xe0, 0x5c, 0xc3, - 0xb5, 0x2a, 0x96, 0x09, 0xf3, 0x6c, 0xd0, 0x4f, 0x36, 0xa9, - 0x15, 0x8a, 0x70, 0xef, 0x53, 0xcc, 0xba, 0x25, 0x99, 0x06, - 0xfc, 0x63, 0xdf, 0x40, 0x33, 0xac, 0x10, 0x8f, 0x75, 0xea, - 0x56, 0xc9, 0xbf, 0x20, 0x9c, 0x03, 0xf9, 0x66, 0xda, 0x45, - 0x00, 0xa0, 0x5d, 0xfd, 0xba, 0x1a, 0xe7, 0x47, 0x69, 0xc9, - 0x34, 0x94, 0xd3, 0x73, 0x8e, 0x2e, 0xd2, 0x72, 0x8f, 0x2f, - 0x68, 0xc8, 0x35, 0x95, 0xbb, 0x1b, 0xe6, 0x46, 0x01, 0xa1, - 0x5c, 0xfc, 0xb9, 0x19, 0xe4, 0x44, 0x03, 0xa3, 0x5e, 0xfe, - 0xd0, 0x70, 0x8d, 0x2d, 0x6a, 0xca, 0x37, 0x97, 0x6b, 0xcb, - 0x36, 0x96, 0xd1, 0x71, 0x8c, 0x2c, 0x02, 0xa2, 0x5f, 0xff, - 0xb8, 0x18, 0xe5, 0x45, 0x6f, 0xcf, 0x32, 0x92, 0xd5, 0x75, - 0x88, 0x28, 0x06, 0xa6, 0x5b, 0xfb, 0xbc, 0x1c, 0xe1, 0x41, - 0xbd, 0x1d, 0xe0, 0x40, 0x07, 0xa7, 0x5a, 0xfa, 0xd4, 0x74, - 0x89, 0x29, 0x6e, 0xce, 0x33, 0x93, 0xd6, 0x76, 0x8b, 0x2b, - 0x6c, 0xcc, 0x31, 0x91, 0xbf, 0x1f, 0xe2, 0x42, 0x05, 0xa5, - 0x58, 0xf8, 0x04, 0xa4, 0x59, 0xf9, 0xbe, 0x1e, 0xe3, 0x43, - 0x6d, 0xcd, 0x30, 0x90, 0xd7, 0x77, 0x8a, 0x2a, 0xde, 0x7e, - 0x83, 0x23, 0x64, 0xc4, 0x39, 0x99, 0xb7, 0x17, 0xea, 0x4a, - 0x0d, 0xad, 0x50, 0xf0, 0x0c, 0xac, 0x51, 0xf1, 0xb6, 0x16, - 0xeb, 0x4b, 0x65, 0xc5, 0x38, 0x98, 0xdf, 0x7f, 0x82, 0x22, - 0x67, 0xc7, 0x3a, 0x9a, 0xdd, 0x7d, 0x80, 0x20, 0x0e, 0xae, - 0x53, 0xf3, 0xb4, 0x14, 0xe9, 0x49, 0xb5, 0x15, 0xe8, 0x48, - 0x0f, 0xaf, 0x52, 0xf2, 0xdc, 0x7c, 0x81, 0x21, 0x66, 0xc6, - 0x3b, 0x9b, 0xb1, 0x11, 0xec, 0x4c, 0x0b, 0xab, 0x56, 0xf6, - 0xd8, 0x78, 0x85, 0x25, 0x62, 0xc2, 0x3f, 0x9f, 0x63, 0xc3, - 0x3e, 0x9e, 0xd9, 0x79, 0x84, 0x24, 0x0a, 0xaa, 0x57, 0xf7, - 0xb0, 0x10, 0xed, 0x4d, 0x08, 0xa8, 0x55, 0xf5, 0xb2, 0x12, - 0xef, 0x4f, 0x61, 0xc1, 0x3c, 0x9c, 0xdb, 0x7b, 0x86, 0x26, - 0xda, 0x7a, 0x87, 0x27, 0x60, 0xc0, 0x3d, 0x9d, 0xb3, 0x13, - 0xee, 0x4e, 0x09, 0xa9, 0x54, 0xf4, 0x00, 0xa1, 0x5f, 0xfe, - 0xbe, 0x1f, 0xe1, 0x40, 0x61, 0xc0, 0x3e, 0x9f, 0xdf, 0x7e, - 0x80, 0x21, 0xc2, 0x63, 0x9d, 0x3c, 0x7c, 0xdd, 0x23, 0x82, - 0xa3, 0x02, 0xfc, 0x5d, 0x1d, 0xbc, 0x42, 0xe3, 0x99, 0x38, - 0xc6, 0x67, 0x27, 0x86, 0x78, 0xd9, 0xf8, 0x59, 0xa7, 0x06, - 0x46, 0xe7, 0x19, 0xb8, 0x5b, 0xfa, 0x04, 0xa5, 0xe5, 0x44, - 0xba, 0x1b, 0x3a, 0x9b, 0x65, 0xc4, 0x84, 0x25, 0xdb, 0x7a, - 0x2f, 0x8e, 0x70, 0xd1, 0x91, 0x30, 0xce, 0x6f, 0x4e, 0xef, - 0x11, 0xb0, 0xf0, 0x51, 0xaf, 0x0e, 0xed, 0x4c, 0xb2, 0x13, - 0x53, 0xf2, 0x0c, 0xad, 0x8c, 0x2d, 0xd3, 0x72, 0x32, 0x93, - 0x6d, 0xcc, 0xb6, 0x17, 0xe9, 0x48, 0x08, 0xa9, 0x57, 0xf6, - 0xd7, 0x76, 0x88, 0x29, 0x69, 0xc8, 0x36, 0x97, 0x74, 0xd5, - 0x2b, 0x8a, 0xca, 0x6b, 0x95, 0x34, 0x15, 0xb4, 0x4a, 0xeb, - 0xab, 0x0a, 0xf4, 0x55, 0x5e, 0xff, 0x01, 0xa0, 0xe0, 0x41, - 0xbf, 0x1e, 0x3f, 0x9e, 0x60, 0xc1, 0x81, 0x20, 0xde, 0x7f, - 0x9c, 0x3d, 0xc3, 0x62, 0x22, 0x83, 0x7d, 0xdc, 0xfd, 0x5c, - 0xa2, 0x03, 0x43, 0xe2, 0x1c, 0xbd, 0xc7, 0x66, 0x98, 0x39, - 0x79, 0xd8, 0x26, 0x87, 0xa6, 0x07, 0xf9, 0x58, 0x18, 0xb9, - 0x47, 0xe6, 0x05, 0xa4, 0x5a, 0xfb, 0xbb, 0x1a, 0xe4, 0x45, - 0x64, 0xc5, 0x3b, 0x9a, 0xda, 0x7b, 0x85, 0x24, 0x71, 0xd0, - 0x2e, 0x8f, 0xcf, 0x6e, 0x90, 0x31, 0x10, 0xb1, 0x4f, 0xee, - 0xae, 0x0f, 0xf1, 0x50, 0xb3, 0x12, 0xec, 0x4d, 0x0d, 0xac, - 0x52, 0xf3, 0xd2, 0x73, 0x8d, 0x2c, 0x6c, 0xcd, 0x33, 0x92, - 0xe8, 0x49, 0xb7, 0x16, 0x56, 0xf7, 0x09, 0xa8, 0x89, 0x28, - 0xd6, 0x77, 0x37, 0x96, 0x68, 0xc9, 0x2a, 0x8b, 0x75, 0xd4, - 0x94, 0x35, 0xcb, 0x6a, 0x4b, 0xea, 0x14, 0xb5, 0xf5, 0x54, - 0xaa, 0x0b, 0x00, 0xa2, 0x59, 0xfb, 0xb2, 0x10, 0xeb, 0x49, - 0x79, 0xdb, 0x20, 0x82, 0xcb, 0x69, 0x92, 0x30, 0xf2, 0x50, - 0xab, 0x09, 0x40, 0xe2, 0x19, 0xbb, 0x8b, 0x29, 0xd2, 0x70, - 0x39, 0x9b, 0x60, 0xc2, 0xf9, 0x5b, 0xa0, 0x02, 0x4b, 0xe9, - 0x12, 0xb0, 0x80, 0x22, 0xd9, 0x7b, 0x32, 0x90, 0x6b, 0xc9, - 0x0b, 0xa9, 0x52, 0xf0, 0xb9, 0x1b, 0xe0, 0x42, 0x72, 0xd0, - 0x2b, 0x89, 0xc0, 0x62, 0x99, 0x3b, 0xef, 0x4d, 0xb6, 0x14, - 0x5d, 0xff, 0x04, 0xa6, 0x96, 0x34, 0xcf, 0x6d, 0x24, 0x86, - 0x7d, 0xdf, 0x1d, 0xbf, 0x44, 0xe6, 0xaf, 0x0d, 0xf6, 0x54, - 0x64, 0xc6, 0x3d, 0x9f, 0xd6, 0x74, 0x8f, 0x2d, 0x16, 0xb4, - 0x4f, 0xed, 0xa4, 0x06, 0xfd, 0x5f, 0x6f, 0xcd, 0x36, 0x94, - 0xdd, 0x7f, 0x84, 0x26, 0xe4, 0x46, 0xbd, 0x1f, 0x56, 0xf4, - 0x0f, 0xad, 0x9d, 0x3f, 0xc4, 0x66, 0x2f, 0x8d, 0x76, 0xd4, - 0xc3, 0x61, 0x9a, 0x38, 0x71, 0xd3, 0x28, 0x8a, 0xba, 0x18, - 0xe3, 0x41, 0x08, 0xaa, 0x51, 0xf3, 0x31, 0x93, 0x68, 0xca, - 0x83, 0x21, 0xda, 0x78, 0x48, 0xea, 0x11, 0xb3, 0xfa, 0x58, - 0xa3, 0x01, 0x3a, 0x98, 0x63, 0xc1, 0x88, 0x2a, 0xd1, 0x73, - 0x43, 0xe1, 0x1a, 0xb8, 0xf1, 0x53, 0xa8, 0x0a, 0xc8, 0x6a, - 0x91, 0x33, 0x7a, 0xd8, 0x23, 0x81, 0xb1, 0x13, 0xe8, 0x4a, - 0x03, 0xa1, 0x5a, 0xf8, 0x2c, 0x8e, 0x75, 0xd7, 0x9e, 0x3c, - 0xc7, 0x65, 0x55, 0xf7, 0x0c, 0xae, 0xe7, 0x45, 0xbe, 0x1c, - 0xde, 0x7c, 0x87, 0x25, 0x6c, 0xce, 0x35, 0x97, 0xa7, 0x05, - 0xfe, 0x5c, 0x15, 0xb7, 0x4c, 0xee, 0xd5, 0x77, 0x8c, 0x2e, - 0x67, 0xc5, 0x3e, 0x9c, 0xac, 0x0e, 0xf5, 0x57, 0x1e, 0xbc, - 0x47, 0xe5, 0x27, 0x85, 0x7e, 0xdc, 0x95, 0x37, 0xcc, 0x6e, - 0x5e, 0xfc, 0x07, 0xa5, 0xec, 0x4e, 0xb5, 0x17, 0x00, 0xa3, - 0x5b, 0xf8, 0xb6, 0x15, 0xed, 0x4e, 0x71, 0xd2, 0x2a, 0x89, - 0xc7, 0x64, 0x9c, 0x3f, 0xe2, 0x41, 0xb9, 0x1a, 0x54, 0xf7, - 0x0f, 0xac, 0x93, 0x30, 0xc8, 0x6b, 0x25, 0x86, 0x7e, 0xdd, - 0xd9, 0x7a, 0x82, 0x21, 0x6f, 0xcc, 0x34, 0x97, 0xa8, 0x0b, - 0xf3, 0x50, 0x1e, 0xbd, 0x45, 0xe6, 0x3b, 0x98, 0x60, 0xc3, - 0x8d, 0x2e, 0xd6, 0x75, 0x4a, 0xe9, 0x11, 0xb2, 0xfc, 0x5f, - 0xa7, 0x04, 0xaf, 0x0c, 0xf4, 0x57, 0x19, 0xba, 0x42, 0xe1, - 0xde, 0x7d, 0x85, 0x26, 0x68, 0xcb, 0x33, 0x90, 0x4d, 0xee, - 0x16, 0xb5, 0xfb, 0x58, 0xa0, 0x03, 0x3c, 0x9f, 0x67, 0xc4, - 0x8a, 0x29, 0xd1, 0x72, 0x76, 0xd5, 0x2d, 0x8e, 0xc0, 0x63, - 0x9b, 0x38, 0x07, 0xa4, 0x5c, 0xff, 0xb1, 0x12, 0xea, 0x49, - 0x94, 0x37, 0xcf, 0x6c, 0x22, 0x81, 0x79, 0xda, 0xe5, 0x46, - 0xbe, 0x1d, 0x53, 0xf0, 0x08, 0xab, 0x43, 0xe0, 0x18, 0xbb, - 0xf5, 0x56, 0xae, 0x0d, 0x32, 0x91, 0x69, 0xca, 0x84, 0x27, - 0xdf, 0x7c, 0xa1, 0x02, 0xfa, 0x59, 0x17, 0xb4, 0x4c, 0xef, - 0xd0, 0x73, 0x8b, 0x28, 0x66, 0xc5, 0x3d, 0x9e, 0x9a, 0x39, - 0xc1, 0x62, 0x2c, 0x8f, 0x77, 0xd4, 0xeb, 0x48, 0xb0, 0x13, - 0x5d, 0xfe, 0x06, 0xa5, 0x78, 0xdb, 0x23, 0x80, 0xce, 0x6d, - 0x95, 0x36, 0x09, 0xaa, 0x52, 0xf1, 0xbf, 0x1c, 0xe4, 0x47, - 0xec, 0x4f, 0xb7, 0x14, 0x5a, 0xf9, 0x01, 0xa2, 0x9d, 0x3e, - 0xc6, 0x65, 0x2b, 0x88, 0x70, 0xd3, 0x0e, 0xad, 0x55, 0xf6, - 0xb8, 0x1b, 0xe3, 0x40, 0x7f, 0xdc, 0x24, 0x87, 0xc9, 0x6a, - 0x92, 0x31, 0x35, 0x96, 0x6e, 0xcd, 0x83, 0x20, 0xd8, 0x7b, - 0x44, 0xe7, 0x1f, 0xbc, 0xf2, 0x51, 0xa9, 0x0a, 0xd7, 0x74, - 0x8c, 0x2f, 0x61, 0xc2, 0x3a, 0x99, 0xa6, 0x05, 0xfd, 0x5e, - 0x10, 0xb3, 0x4b, 0xe8, 0x00, 0xa4, 0x55, 0xf1, 0xaa, 0x0e, - 0xff, 0x5b, 0x49, 0xed, 0x1c, 0xb8, 0xe3, 0x47, 0xb6, 0x12, - 0x92, 0x36, 0xc7, 0x63, 0x38, 0x9c, 0x6d, 0xc9, 0xdb, 0x7f, - 0x8e, 0x2a, 0x71, 0xd5, 0x24, 0x80, 0x39, 0x9d, 0x6c, 0xc8, - 0x93, 0x37, 0xc6, 0x62, 0x70, 0xd4, 0x25, 0x81, 0xda, 0x7e, - 0x8f, 0x2b, 0xab, 0x0f, 0xfe, 0x5a, 0x01, 0xa5, 0x54, 0xf0, - 0xe2, 0x46, 0xb7, 0x13, 0x48, 0xec, 0x1d, 0xb9, 0x72, 0xd6, - 0x27, 0x83, 0xd8, 0x7c, 0x8d, 0x29, 0x3b, 0x9f, 0x6e, 0xca, - 0x91, 0x35, 0xc4, 0x60, 0xe0, 0x44, 0xb5, 0x11, 0x4a, 0xee, - 0x1f, 0xbb, 0xa9, 0x0d, 0xfc, 0x58, 0x03, 0xa7, 0x56, 0xf2, - 0x4b, 0xef, 0x1e, 0xba, 0xe1, 0x45, 0xb4, 0x10, 0x02, 0xa6, - 0x57, 0xf3, 0xa8, 0x0c, 0xfd, 0x59, 0xd9, 0x7d, 0x8c, 0x28, - 0x73, 0xd7, 0x26, 0x82, 0x90, 0x34, 0xc5, 0x61, 0x3a, 0x9e, - 0x6f, 0xcb, 0xe4, 0x40, 0xb1, 0x15, 0x4e, 0xea, 0x1b, 0xbf, - 0xad, 0x09, 0xf8, 0x5c, 0x07, 0xa3, 0x52, 0xf6, 0x76, 0xd2, - 0x23, 0x87, 0xdc, 0x78, 0x89, 0x2d, 0x3f, 0x9b, 0x6a, 0xce, - 0x95, 0x31, 0xc0, 0x64, 0xdd, 0x79, 0x88, 0x2c, 0x77, 0xd3, - 0x22, 0x86, 0x94, 0x30, 0xc1, 0x65, 0x3e, 0x9a, 0x6b, 0xcf, - 0x4f, 0xeb, 0x1a, 0xbe, 0xe5, 0x41, 0xb0, 0x14, 0x06, 0xa2, - 0x53, 0xf7, 0xac, 0x08, 0xf9, 0x5d, 0x96, 0x32, 0xc3, 0x67, - 0x3c, 0x98, 0x69, 0xcd, 0xdf, 0x7b, 0x8a, 0x2e, 0x75, 0xd1, - 0x20, 0x84, 0x04, 0xa0, 0x51, 0xf5, 0xae, 0x0a, 0xfb, 0x5f, - 0x4d, 0xe9, 0x18, 0xbc, 0xe7, 0x43, 0xb2, 0x16, 0xaf, 0x0b, - 0xfa, 0x5e, 0x05, 0xa1, 0x50, 0xf4, 0xe6, 0x42, 0xb3, 0x17, - 0x4c, 0xe8, 0x19, 0xbd, 0x3d, 0x99, 0x68, 0xcc, 0x97, 0x33, - 0xc2, 0x66, 0x74, 0xd0, 0x21, 0x85, 0xde, 0x7a, 0x8b, 0x2f, - 0x00, 0xa5, 0x57, 0xf2, 0xae, 0x0b, 0xf9, 0x5c, 0x41, 0xe4, - 0x16, 0xb3, 0xef, 0x4a, 0xb8, 0x1d, 0x82, 0x27, 0xd5, 0x70, - 0x2c, 0x89, 0x7b, 0xde, 0xc3, 0x66, 0x94, 0x31, 0x6d, 0xc8, - 0x3a, 0x9f, 0x19, 0xbc, 0x4e, 0xeb, 0xb7, 0x12, 0xe0, 0x45, - 0x58, 0xfd, 0x0f, 0xaa, 0xf6, 0x53, 0xa1, 0x04, 0x9b, 0x3e, - 0xcc, 0x69, 0x35, 0x90, 0x62, 0xc7, 0xda, 0x7f, 0x8d, 0x28, - 0x74, 0xd1, 0x23, 0x86, 0x32, 0x97, 0x65, 0xc0, 0x9c, 0x39, - 0xcb, 0x6e, 0x73, 0xd6, 0x24, 0x81, 0xdd, 0x78, 0x8a, 0x2f, - 0xb0, 0x15, 0xe7, 0x42, 0x1e, 0xbb, 0x49, 0xec, 0xf1, 0x54, - 0xa6, 0x03, 0x5f, 0xfa, 0x08, 0xad, 0x2b, 0x8e, 0x7c, 0xd9, - 0x85, 0x20, 0xd2, 0x77, 0x6a, 0xcf, 0x3d, 0x98, 0xc4, 0x61, - 0x93, 0x36, 0xa9, 0x0c, 0xfe, 0x5b, 0x07, 0xa2, 0x50, 0xf5, - 0xe8, 0x4d, 0xbf, 0x1a, 0x46, 0xe3, 0x11, 0xb4, 0x64, 0xc1, - 0x33, 0x96, 0xca, 0x6f, 0x9d, 0x38, 0x25, 0x80, 0x72, 0xd7, - 0x8b, 0x2e, 0xdc, 0x79, 0xe6, 0x43, 0xb1, 0x14, 0x48, 0xed, - 0x1f, 0xba, 0xa7, 0x02, 0xf0, 0x55, 0x09, 0xac, 0x5e, 0xfb, - 0x7d, 0xd8, 0x2a, 0x8f, 0xd3, 0x76, 0x84, 0x21, 0x3c, 0x99, - 0x6b, 0xce, 0x92, 0x37, 0xc5, 0x60, 0xff, 0x5a, 0xa8, 0x0d, - 0x51, 0xf4, 0x06, 0xa3, 0xbe, 0x1b, 0xe9, 0x4c, 0x10, 0xb5, - 0x47, 0xe2, 0x56, 0xf3, 0x01, 0xa4, 0xf8, 0x5d, 0xaf, 0x0a, - 0x17, 0xb2, 0x40, 0xe5, 0xb9, 0x1c, 0xee, 0x4b, 0xd4, 0x71, - 0x83, 0x26, 0x7a, 0xdf, 0x2d, 0x88, 0x95, 0x30, 0xc2, 0x67, - 0x3b, 0x9e, 0x6c, 0xc9, 0x4f, 0xea, 0x18, 0xbd, 0xe1, 0x44, - 0xb6, 0x13, 0x0e, 0xab, 0x59, 0xfc, 0xa0, 0x05, 0xf7, 0x52, - 0xcd, 0x68, 0x9a, 0x3f, 0x63, 0xc6, 0x34, 0x91, 0x8c, 0x29, - 0xdb, 0x7e, 0x22, 0x87, 0x75, 0xd0, 0x00, 0xa6, 0x51, 0xf7, - 0xa2, 0x04, 0xf3, 0x55, 0x59, 0xff, 0x08, 0xae, 0xfb, 0x5d, - 0xaa, 0x0c, 0xb2, 0x14, 0xe3, 0x45, 0x10, 0xb6, 0x41, 0xe7, - 0xeb, 0x4d, 0xba, 0x1c, 0x49, 0xef, 0x18, 0xbe, 0x79, 0xdf, - 0x28, 0x8e, 0xdb, 0x7d, 0x8a, 0x2c, 0x20, 0x86, 0x71, 0xd7, - 0x82, 0x24, 0xd3, 0x75, 0xcb, 0x6d, 0x9a, 0x3c, 0x69, 0xcf, - 0x38, 0x9e, 0x92, 0x34, 0xc3, 0x65, 0x30, 0x96, 0x61, 0xc7, - 0xf2, 0x54, 0xa3, 0x05, 0x50, 0xf6, 0x01, 0xa7, 0xab, 0x0d, - 0xfa, 0x5c, 0x09, 0xaf, 0x58, 0xfe, 0x40, 0xe6, 0x11, 0xb7, - 0xe2, 0x44, 0xb3, 0x15, 0x19, 0xbf, 0x48, 0xee, 0xbb, 0x1d, - 0xea, 0x4c, 0x8b, 0x2d, 0xda, 0x7c, 0x29, 0x8f, 0x78, 0xde, - 0xd2, 0x74, 0x83, 0x25, 0x70, 0xd6, 0x21, 0x87, 0x39, 0x9f, - 0x68, 0xce, 0x9b, 0x3d, 0xca, 0x6c, 0x60, 0xc6, 0x31, 0x97, - 0xc2, 0x64, 0x93, 0x35, 0xf9, 0x5f, 0xa8, 0x0e, 0x5b, 0xfd, - 0x0a, 0xac, 0xa0, 0x06, 0xf1, 0x57, 0x02, 0xa4, 0x53, 0xf5, - 0x4b, 0xed, 0x1a, 0xbc, 0xe9, 0x4f, 0xb8, 0x1e, 0x12, 0xb4, - 0x43, 0xe5, 0xb0, 0x16, 0xe1, 0x47, 0x80, 0x26, 0xd1, 0x77, - 0x22, 0x84, 0x73, 0xd5, 0xd9, 0x7f, 0x88, 0x2e, 0x7b, 0xdd, - 0x2a, 0x8c, 0x32, 0x94, 0x63, 0xc5, 0x90, 0x36, 0xc1, 0x67, - 0x6b, 0xcd, 0x3a, 0x9c, 0xc9, 0x6f, 0x98, 0x3e, 0x0b, 0xad, - 0x5a, 0xfc, 0xa9, 0x0f, 0xf8, 0x5e, 0x52, 0xf4, 0x03, 0xa5, - 0xf0, 0x56, 0xa1, 0x07, 0xb9, 0x1f, 0xe8, 0x4e, 0x1b, 0xbd, - 0x4a, 0xec, 0xe0, 0x46, 0xb1, 0x17, 0x42, 0xe4, 0x13, 0xb5, - 0x72, 0xd4, 0x23, 0x85, 0xd0, 0x76, 0x81, 0x27, 0x2b, 0x8d, - 0x7a, 0xdc, 0x89, 0x2f, 0xd8, 0x7e, 0xc0, 0x66, 0x91, 0x37, - 0x62, 0xc4, 0x33, 0x95, 0x99, 0x3f, 0xc8, 0x6e, 0x3b, 0x9d, - 0x6a, 0xcc, 0x00, 0xa7, 0x53, 0xf4, 0xa6, 0x01, 0xf5, 0x52, - 0x51, 0xf6, 0x02, 0xa5, 0xf7, 0x50, 0xa4, 0x03, 0xa2, 0x05, - 0xf1, 0x56, 0x04, 0xa3, 0x57, 0xf0, 0xf3, 0x54, 0xa0, 0x07, - 0x55, 0xf2, 0x06, 0xa1, 0x59, 0xfe, 0x0a, 0xad, 0xff, 0x58, - 0xac, 0x0b, 0x08, 0xaf, 0x5b, 0xfc, 0xae, 0x09, 0xfd, 0x5a, - 0xfb, 0x5c, 0xa8, 0x0f, 0x5d, 0xfa, 0x0e, 0xa9, 0xaa, 0x0d, - 0xf9, 0x5e, 0x0c, 0xab, 0x5f, 0xf8, 0xb2, 0x15, 0xe1, 0x46, - 0x14, 0xb3, 0x47, 0xe0, 0xe3, 0x44, 0xb0, 0x17, 0x45, 0xe2, - 0x16, 0xb1, 0x10, 0xb7, 0x43, 0xe4, 0xb6, 0x11, 0xe5, 0x42, - 0x41, 0xe6, 0x12, 0xb5, 0xe7, 0x40, 0xb4, 0x13, 0xeb, 0x4c, - 0xb8, 0x1f, 0x4d, 0xea, 0x1e, 0xb9, 0xba, 0x1d, 0xe9, 0x4e, - 0x1c, 0xbb, 0x4f, 0xe8, 0x49, 0xee, 0x1a, 0xbd, 0xef, 0x48, - 0xbc, 0x1b, 0x18, 0xbf, 0x4b, 0xec, 0xbe, 0x19, 0xed, 0x4a, - 0x79, 0xde, 0x2a, 0x8d, 0xdf, 0x78, 0x8c, 0x2b, 0x28, 0x8f, - 0x7b, 0xdc, 0x8e, 0x29, 0xdd, 0x7a, 0xdb, 0x7c, 0x88, 0x2f, - 0x7d, 0xda, 0x2e, 0x89, 0x8a, 0x2d, 0xd9, 0x7e, 0x2c, 0x8b, - 0x7f, 0xd8, 0x20, 0x87, 0x73, 0xd4, 0x86, 0x21, 0xd5, 0x72, - 0x71, 0xd6, 0x22, 0x85, 0xd7, 0x70, 0x84, 0x23, 0x82, 0x25, - 0xd1, 0x76, 0x24, 0x83, 0x77, 0xd0, 0xd3, 0x74, 0x80, 0x27, - 0x75, 0xd2, 0x26, 0x81, 0xcb, 0x6c, 0x98, 0x3f, 0x6d, 0xca, - 0x3e, 0x99, 0x9a, 0x3d, 0xc9, 0x6e, 0x3c, 0x9b, 0x6f, 0xc8, - 0x69, 0xce, 0x3a, 0x9d, 0xcf, 0x68, 0x9c, 0x3b, 0x38, 0x9f, - 0x6b, 0xcc, 0x9e, 0x39, 0xcd, 0x6a, 0x92, 0x35, 0xc1, 0x66, - 0x34, 0x93, 0x67, 0xc0, 0xc3, 0x64, 0x90, 0x37, 0x65, 0xc2, - 0x36, 0x91, 0x30, 0x97, 0x63, 0xc4, 0x96, 0x31, 0xc5, 0x62, - 0x61, 0xc6, 0x32, 0x95, 0xc7, 0x60, 0x94, 0x33, 0x00, 0xa8, - 0x4d, 0xe5, 0x9a, 0x32, 0xd7, 0x7f, 0x29, 0x81, 0x64, 0xcc, - 0xb3, 0x1b, 0xfe, 0x56, 0x52, 0xfa, 0x1f, 0xb7, 0xc8, 0x60, - 0x85, 0x2d, 0x7b, 0xd3, 0x36, 0x9e, 0xe1, 0x49, 0xac, 0x04, - 0xa4, 0x0c, 0xe9, 0x41, 0x3e, 0x96, 0x73, 0xdb, 0x8d, 0x25, - 0xc0, 0x68, 0x17, 0xbf, 0x5a, 0xf2, 0xf6, 0x5e, 0xbb, 0x13, - 0x6c, 0xc4, 0x21, 0x89, 0xdf, 0x77, 0x92, 0x3a, 0x45, 0xed, - 0x08, 0xa0, 0x55, 0xfd, 0x18, 0xb0, 0xcf, 0x67, 0x82, 0x2a, - 0x7c, 0xd4, 0x31, 0x99, 0xe6, 0x4e, 0xab, 0x03, 0x07, 0xaf, - 0x4a, 0xe2, 0x9d, 0x35, 0xd0, 0x78, 0x2e, 0x86, 0x63, 0xcb, - 0xb4, 0x1c, 0xf9, 0x51, 0xf1, 0x59, 0xbc, 0x14, 0x6b, 0xc3, - 0x26, 0x8e, 0xd8, 0x70, 0x95, 0x3d, 0x42, 0xea, 0x0f, 0xa7, - 0xa3, 0x0b, 0xee, 0x46, 0x39, 0x91, 0x74, 0xdc, 0x8a, 0x22, - 0xc7, 0x6f, 0x10, 0xb8, 0x5d, 0xf5, 0xaa, 0x02, 0xe7, 0x4f, - 0x30, 0x98, 0x7d, 0xd5, 0x83, 0x2b, 0xce, 0x66, 0x19, 0xb1, - 0x54, 0xfc, 0xf8, 0x50, 0xb5, 0x1d, 0x62, 0xca, 0x2f, 0x87, - 0xd1, 0x79, 0x9c, 0x34, 0x4b, 0xe3, 0x06, 0xae, 0x0e, 0xa6, - 0x43, 0xeb, 0x94, 0x3c, 0xd9, 0x71, 0x27, 0x8f, 0x6a, 0xc2, - 0xbd, 0x15, 0xf0, 0x58, 0x5c, 0xf4, 0x11, 0xb9, 0xc6, 0x6e, - 0x8b, 0x23, 0x75, 0xdd, 0x38, 0x90, 0xef, 0x47, 0xa2, 0x0a, - 0xff, 0x57, 0xb2, 0x1a, 0x65, 0xcd, 0x28, 0x80, 0xd6, 0x7e, - 0x9b, 0x33, 0x4c, 0xe4, 0x01, 0xa9, 0xad, 0x05, 0xe0, 0x48, - 0x37, 0x9f, 0x7a, 0xd2, 0x84, 0x2c, 0xc9, 0x61, 0x1e, 0xb6, - 0x53, 0xfb, 0x5b, 0xf3, 0x16, 0xbe, 0xc1, 0x69, 0x8c, 0x24, - 0x72, 0xda, 0x3f, 0x97, 0xe8, 0x40, 0xa5, 0x0d, 0x09, 0xa1, - 0x44, 0xec, 0x93, 0x3b, 0xde, 0x76, 0x20, 0x88, 0x6d, 0xc5, - 0xba, 0x12, 0xf7, 0x5f, 0x00, 0xa9, 0x4f, 0xe6, 0x9e, 0x37, - 0xd1, 0x78, 0x21, 0x88, 0x6e, 0xc7, 0xbf, 0x16, 0xf0, 0x59, - 0x42, 0xeb, 0x0d, 0xa4, 0xdc, 0x75, 0x93, 0x3a, 0x63, 0xca, - 0x2c, 0x85, 0xfd, 0x54, 0xb2, 0x1b, 0x84, 0x2d, 0xcb, 0x62, - 0x1a, 0xb3, 0x55, 0xfc, 0xa5, 0x0c, 0xea, 0x43, 0x3b, 0x92, - 0x74, 0xdd, 0xc6, 0x6f, 0x89, 0x20, 0x58, 0xf1, 0x17, 0xbe, - 0xe7, 0x4e, 0xa8, 0x01, 0x79, 0xd0, 0x36, 0x9f, 0x15, 0xbc, - 0x5a, 0xf3, 0x8b, 0x22, 0xc4, 0x6d, 0x34, 0x9d, 0x7b, 0xd2, - 0xaa, 0x03, 0xe5, 0x4c, 0x57, 0xfe, 0x18, 0xb1, 0xc9, 0x60, - 0x86, 0x2f, 0x76, 0xdf, 0x39, 0x90, 0xe8, 0x41, 0xa7, 0x0e, - 0x91, 0x38, 0xde, 0x77, 0x0f, 0xa6, 0x40, 0xe9, 0xb0, 0x19, - 0xff, 0x56, 0x2e, 0x87, 0x61, 0xc8, 0xd3, 0x7a, 0x9c, 0x35, - 0x4d, 0xe4, 0x02, 0xab, 0xf2, 0x5b, 0xbd, 0x14, 0x6c, 0xc5, - 0x23, 0x8a, 0x2a, 0x83, 0x65, 0xcc, 0xb4, 0x1d, 0xfb, 0x52, - 0x0b, 0xa2, 0x44, 0xed, 0x95, 0x3c, 0xda, 0x73, 0x68, 0xc1, - 0x27, 0x8e, 0xf6, 0x5f, 0xb9, 0x10, 0x49, 0xe0, 0x06, 0xaf, - 0xd7, 0x7e, 0x98, 0x31, 0xae, 0x07, 0xe1, 0x48, 0x30, 0x99, - 0x7f, 0xd6, 0x8f, 0x26, 0xc0, 0x69, 0x11, 0xb8, 0x5e, 0xf7, - 0xec, 0x45, 0xa3, 0x0a, 0x72, 0xdb, 0x3d, 0x94, 0xcd, 0x64, - 0x82, 0x2b, 0x53, 0xfa, 0x1c, 0xb5, 0x3f, 0x96, 0x70, 0xd9, - 0xa1, 0x08, 0xee, 0x47, 0x1e, 0xb7, 0x51, 0xf8, 0x80, 0x29, - 0xcf, 0x66, 0x7d, 0xd4, 0x32, 0x9b, 0xe3, 0x4a, 0xac, 0x05, - 0x5c, 0xf5, 0x13, 0xba, 0xc2, 0x6b, 0x8d, 0x24, 0xbb, 0x12, - 0xf4, 0x5d, 0x25, 0x8c, 0x6a, 0xc3, 0x9a, 0x33, 0xd5, 0x7c, - 0x04, 0xad, 0x4b, 0xe2, 0xf9, 0x50, 0xb6, 0x1f, 0x67, 0xce, - 0x28, 0x81, 0xd8, 0x71, 0x97, 0x3e, 0x46, 0xef, 0x09, 0xa0, - 0x00, 0xaa, 0x49, 0xe3, 0x92, 0x38, 0xdb, 0x71, 0x39, 0x93, - 0x70, 0xda, 0xab, 0x01, 0xe2, 0x48, 0x72, 0xd8, 0x3b, 0x91, - 0xe0, 0x4a, 0xa9, 0x03, 0x4b, 0xe1, 0x02, 0xa8, 0xd9, 0x73, - 0x90, 0x3a, 0xe4, 0x4e, 0xad, 0x07, 0x76, 0xdc, 0x3f, 0x95, - 0xdd, 0x77, 0x94, 0x3e, 0x4f, 0xe5, 0x06, 0xac, 0x96, 0x3c, - 0xdf, 0x75, 0x04, 0xae, 0x4d, 0xe7, 0xaf, 0x05, 0xe6, 0x4c, - 0x3d, 0x97, 0x74, 0xde, 0xd5, 0x7f, 0x9c, 0x36, 0x47, 0xed, - 0x0e, 0xa4, 0xec, 0x46, 0xa5, 0x0f, 0x7e, 0xd4, 0x37, 0x9d, - 0xa7, 0x0d, 0xee, 0x44, 0x35, 0x9f, 0x7c, 0xd6, 0x9e, 0x34, - 0xd7, 0x7d, 0x0c, 0xa6, 0x45, 0xef, 0x31, 0x9b, 0x78, 0xd2, - 0xa3, 0x09, 0xea, 0x40, 0x08, 0xa2, 0x41, 0xeb, 0x9a, 0x30, - 0xd3, 0x79, 0x43, 0xe9, 0x0a, 0xa0, 0xd1, 0x7b, 0x98, 0x32, - 0x7a, 0xd0, 0x33, 0x99, 0xe8, 0x42, 0xa1, 0x0b, 0xb7, 0x1d, - 0xfe, 0x54, 0x25, 0x8f, 0x6c, 0xc6, 0x8e, 0x24, 0xc7, 0x6d, - 0x1c, 0xb6, 0x55, 0xff, 0xc5, 0x6f, 0x8c, 0x26, 0x57, 0xfd, - 0x1e, 0xb4, 0xfc, 0x56, 0xb5, 0x1f, 0x6e, 0xc4, 0x27, 0x8d, - 0x53, 0xf9, 0x1a, 0xb0, 0xc1, 0x6b, 0x88, 0x22, 0x6a, 0xc0, - 0x23, 0x89, 0xf8, 0x52, 0xb1, 0x1b, 0x21, 0x8b, 0x68, 0xc2, - 0xb3, 0x19, 0xfa, 0x50, 0x18, 0xb2, 0x51, 0xfb, 0x8a, 0x20, - 0xc3, 0x69, 0x62, 0xc8, 0x2b, 0x81, 0xf0, 0x5a, 0xb9, 0x13, - 0x5b, 0xf1, 0x12, 0xb8, 0xc9, 0x63, 0x80, 0x2a, 0x10, 0xba, - 0x59, 0xf3, 0x82, 0x28, 0xcb, 0x61, 0x29, 0x83, 0x60, 0xca, - 0xbb, 0x11, 0xf2, 0x58, 0x86, 0x2c, 0xcf, 0x65, 0x14, 0xbe, - 0x5d, 0xf7, 0xbf, 0x15, 0xf6, 0x5c, 0x2d, 0x87, 0x64, 0xce, - 0xf4, 0x5e, 0xbd, 0x17, 0x66, 0xcc, 0x2f, 0x85, 0xcd, 0x67, - 0x84, 0x2e, 0x5f, 0xf5, 0x16, 0xbc, 0x00, 0xab, 0x4b, 0xe0, - 0x96, 0x3d, 0xdd, 0x76, 0x31, 0x9a, 0x7a, 0xd1, 0xa7, 0x0c, - 0xec, 0x47, 0x62, 0xc9, 0x29, 0x82, 0xf4, 0x5f, 0xbf, 0x14, - 0x53, 0xf8, 0x18, 0xb3, 0xc5, 0x6e, 0x8e, 0x25, 0xc4, 0x6f, - 0x8f, 0x24, 0x52, 0xf9, 0x19, 0xb2, 0xf5, 0x5e, 0xbe, 0x15, - 0x63, 0xc8, 0x28, 0x83, 0xa6, 0x0d, 0xed, 0x46, 0x30, 0x9b, - 0x7b, 0xd0, 0x97, 0x3c, 0xdc, 0x77, 0x01, 0xaa, 0x4a, 0xe1, - 0x95, 0x3e, 0xde, 0x75, 0x03, 0xa8, 0x48, 0xe3, 0xa4, 0x0f, - 0xef, 0x44, 0x32, 0x99, 0x79, 0xd2, 0xf7, 0x5c, 0xbc, 0x17, - 0x61, 0xca, 0x2a, 0x81, 0xc6, 0x6d, 0x8d, 0x26, 0x50, 0xfb, - 0x1b, 0xb0, 0x51, 0xfa, 0x1a, 0xb1, 0xc7, 0x6c, 0x8c, 0x27, - 0x60, 0xcb, 0x2b, 0x80, 0xf6, 0x5d, 0xbd, 0x16, 0x33, 0x98, - 0x78, 0xd3, 0xa5, 0x0e, 0xee, 0x45, 0x02, 0xa9, 0x49, 0xe2, - 0x94, 0x3f, 0xdf, 0x74, 0x37, 0x9c, 0x7c, 0xd7, 0xa1, 0x0a, - 0xea, 0x41, 0x06, 0xad, 0x4d, 0xe6, 0x90, 0x3b, 0xdb, 0x70, - 0x55, 0xfe, 0x1e, 0xb5, 0xc3, 0x68, 0x88, 0x23, 0x64, 0xcf, - 0x2f, 0x84, 0xf2, 0x59, 0xb9, 0x12, 0xf3, 0x58, 0xb8, 0x13, - 0x65, 0xce, 0x2e, 0x85, 0xc2, 0x69, 0x89, 0x22, 0x54, 0xff, - 0x1f, 0xb4, 0x91, 0x3a, 0xda, 0x71, 0x07, 0xac, 0x4c, 0xe7, - 0xa0, 0x0b, 0xeb, 0x40, 0x36, 0x9d, 0x7d, 0xd6, 0xa2, 0x09, - 0xe9, 0x42, 0x34, 0x9f, 0x7f, 0xd4, 0x93, 0x38, 0xd8, 0x73, - 0x05, 0xae, 0x4e, 0xe5, 0xc0, 0x6b, 0x8b, 0x20, 0x56, 0xfd, - 0x1d, 0xb6, 0xf1, 0x5a, 0xba, 0x11, 0x67, 0xcc, 0x2c, 0x87, - 0x66, 0xcd, 0x2d, 0x86, 0xf0, 0x5b, 0xbb, 0x10, 0x57, 0xfc, - 0x1c, 0xb7, 0xc1, 0x6a, 0x8a, 0x21, 0x04, 0xaf, 0x4f, 0xe4, - 0x92, 0x39, 0xd9, 0x72, 0x35, 0x9e, 0x7e, 0xd5, 0xa3, 0x08, - 0xe8, 0x43, 0x00, 0xac, 0x45, 0xe9, 0x8a, 0x26, 0xcf, 0x63, - 0x09, 0xa5, 0x4c, 0xe0, 0x83, 0x2f, 0xc6, 0x6a, 0x12, 0xbe, - 0x57, 0xfb, 0x98, 0x34, 0xdd, 0x71, 0x1b, 0xb7, 0x5e, 0xf2, - 0x91, 0x3d, 0xd4, 0x78, 0x24, 0x88, 0x61, 0xcd, 0xae, 0x02, - 0xeb, 0x47, 0x2d, 0x81, 0x68, 0xc4, 0xa7, 0x0b, 0xe2, 0x4e, - 0x36, 0x9a, 0x73, 0xdf, 0xbc, 0x10, 0xf9, 0x55, 0x3f, 0x93, - 0x7a, 0xd6, 0xb5, 0x19, 0xf0, 0x5c, 0x48, 0xe4, 0x0d, 0xa1, - 0xc2, 0x6e, 0x87, 0x2b, 0x41, 0xed, 0x04, 0xa8, 0xcb, 0x67, - 0x8e, 0x22, 0x5a, 0xf6, 0x1f, 0xb3, 0xd0, 0x7c, 0x95, 0x39, - 0x53, 0xff, 0x16, 0xba, 0xd9, 0x75, 0x9c, 0x30, 0x6c, 0xc0, - 0x29, 0x85, 0xe6, 0x4a, 0xa3, 0x0f, 0x65, 0xc9, 0x20, 0x8c, - 0xef, 0x43, 0xaa, 0x06, 0x7e, 0xd2, 0x3b, 0x97, 0xf4, 0x58, - 0xb1, 0x1d, 0x77, 0xdb, 0x32, 0x9e, 0xfd, 0x51, 0xb8, 0x14, - 0x90, 0x3c, 0xd5, 0x79, 0x1a, 0xb6, 0x5f, 0xf3, 0x99, 0x35, - 0xdc, 0x70, 0x13, 0xbf, 0x56, 0xfa, 0x82, 0x2e, 0xc7, 0x6b, - 0x08, 0xa4, 0x4d, 0xe1, 0x8b, 0x27, 0xce, 0x62, 0x01, 0xad, - 0x44, 0xe8, 0xb4, 0x18, 0xf1, 0x5d, 0x3e, 0x92, 0x7b, 0xd7, - 0xbd, 0x11, 0xf8, 0x54, 0x37, 0x9b, 0x72, 0xde, 0xa6, 0x0a, - 0xe3, 0x4f, 0x2c, 0x80, 0x69, 0xc5, 0xaf, 0x03, 0xea, 0x46, - 0x25, 0x89, 0x60, 0xcc, 0xd8, 0x74, 0x9d, 0x31, 0x52, 0xfe, - 0x17, 0xbb, 0xd1, 0x7d, 0x94, 0x38, 0x5b, 0xf7, 0x1e, 0xb2, - 0xca, 0x66, 0x8f, 0x23, 0x40, 0xec, 0x05, 0xa9, 0xc3, 0x6f, - 0x86, 0x2a, 0x49, 0xe5, 0x0c, 0xa0, 0xfc, 0x50, 0xb9, 0x15, - 0x76, 0xda, 0x33, 0x9f, 0xf5, 0x59, 0xb0, 0x1c, 0x7f, 0xd3, - 0x3a, 0x96, 0xee, 0x42, 0xab, 0x07, 0x64, 0xc8, 0x21, 0x8d, - 0xe7, 0x4b, 0xa2, 0x0e, 0x6d, 0xc1, 0x28, 0x84, 0x00, 0xad, - 0x47, 0xea, 0x8e, 0x23, 0xc9, 0x64, 0x01, 0xac, 0x46, 0xeb, - 0x8f, 0x22, 0xc8, 0x65, 0x02, 0xaf, 0x45, 0xe8, 0x8c, 0x21, - 0xcb, 0x66, 0x03, 0xae, 0x44, 0xe9, 0x8d, 0x20, 0xca, 0x67, - 0x04, 0xa9, 0x43, 0xee, 0x8a, 0x27, 0xcd, 0x60, 0x05, 0xa8, - 0x42, 0xef, 0x8b, 0x26, 0xcc, 0x61, 0x06, 0xab, 0x41, 0xec, - 0x88, 0x25, 0xcf, 0x62, 0x07, 0xaa, 0x40, 0xed, 0x89, 0x24, - 0xce, 0x63, 0x08, 0xa5, 0x4f, 0xe2, 0x86, 0x2b, 0xc1, 0x6c, - 0x09, 0xa4, 0x4e, 0xe3, 0x87, 0x2a, 0xc0, 0x6d, 0x0a, 0xa7, - 0x4d, 0xe0, 0x84, 0x29, 0xc3, 0x6e, 0x0b, 0xa6, 0x4c, 0xe1, - 0x85, 0x28, 0xc2, 0x6f, 0x0c, 0xa1, 0x4b, 0xe6, 0x82, 0x2f, - 0xc5, 0x68, 0x0d, 0xa0, 0x4a, 0xe7, 0x83, 0x2e, 0xc4, 0x69, - 0x0e, 0xa3, 0x49, 0xe4, 0x80, 0x2d, 0xc7, 0x6a, 0x0f, 0xa2, - 0x48, 0xe5, 0x81, 0x2c, 0xc6, 0x6b, 0x10, 0xbd, 0x57, 0xfa, - 0x9e, 0x33, 0xd9, 0x74, 0x11, 0xbc, 0x56, 0xfb, 0x9f, 0x32, - 0xd8, 0x75, 0x12, 0xbf, 0x55, 0xf8, 0x9c, 0x31, 0xdb, 0x76, - 0x13, 0xbe, 0x54, 0xf9, 0x9d, 0x30, 0xda, 0x77, 0x14, 0xb9, - 0x53, 0xfe, 0x9a, 0x37, 0xdd, 0x70, 0x15, 0xb8, 0x52, 0xff, - 0x9b, 0x36, 0xdc, 0x71, 0x16, 0xbb, 0x51, 0xfc, 0x98, 0x35, - 0xdf, 0x72, 0x17, 0xba, 0x50, 0xfd, 0x99, 0x34, 0xde, 0x73, - 0x18, 0xb5, 0x5f, 0xf2, 0x96, 0x3b, 0xd1, 0x7c, 0x19, 0xb4, - 0x5e, 0xf3, 0x97, 0x3a, 0xd0, 0x7d, 0x1a, 0xb7, 0x5d, 0xf0, - 0x94, 0x39, 0xd3, 0x7e, 0x1b, 0xb6, 0x5c, 0xf1, 0x95, 0x38, - 0xd2, 0x7f, 0x1c, 0xb1, 0x5b, 0xf6, 0x92, 0x3f, 0xd5, 0x78, - 0x1d, 0xb0, 0x5a, 0xf7, 0x93, 0x3e, 0xd4, 0x79, 0x1e, 0xb3, - 0x59, 0xf4, 0x90, 0x3d, 0xd7, 0x7a, 0x1f, 0xb2, 0x58, 0xf5, - 0x91, 0x3c, 0xd6, 0x7b, 0x00, 0xae, 0x41, 0xef, 0x82, 0x2c, - 0xc3, 0x6d, 0x19, 0xb7, 0x58, 0xf6, 0x9b, 0x35, 0xda, 0x74, - 0x32, 0x9c, 0x73, 0xdd, 0xb0, 0x1e, 0xf1, 0x5f, 0x2b, 0x85, - 0x6a, 0xc4, 0xa9, 0x07, 0xe8, 0x46, 0x64, 0xca, 0x25, 0x8b, - 0xe6, 0x48, 0xa7, 0x09, 0x7d, 0xd3, 0x3c, 0x92, 0xff, 0x51, - 0xbe, 0x10, 0x56, 0xf8, 0x17, 0xb9, 0xd4, 0x7a, 0x95, 0x3b, - 0x4f, 0xe1, 0x0e, 0xa0, 0xcd, 0x63, 0x8c, 0x22, 0xc8, 0x66, - 0x89, 0x27, 0x4a, 0xe4, 0x0b, 0xa5, 0xd1, 0x7f, 0x90, 0x3e, - 0x53, 0xfd, 0x12, 0xbc, 0xfa, 0x54, 0xbb, 0x15, 0x78, 0xd6, - 0x39, 0x97, 0xe3, 0x4d, 0xa2, 0x0c, 0x61, 0xcf, 0x20, 0x8e, - 0xac, 0x02, 0xed, 0x43, 0x2e, 0x80, 0x6f, 0xc1, 0xb5, 0x1b, - 0xf4, 0x5a, 0x37, 0x99, 0x76, 0xd8, 0x9e, 0x30, 0xdf, 0x71, - 0x1c, 0xb2, 0x5d, 0xf3, 0x87, 0x29, 0xc6, 0x68, 0x05, 0xab, - 0x44, 0xea, 0x8d, 0x23, 0xcc, 0x62, 0x0f, 0xa1, 0x4e, 0xe0, - 0x94, 0x3a, 0xd5, 0x7b, 0x16, 0xb8, 0x57, 0xf9, 0xbf, 0x11, - 0xfe, 0x50, 0x3d, 0x93, 0x7c, 0xd2, 0xa6, 0x08, 0xe7, 0x49, - 0x24, 0x8a, 0x65, 0xcb, 0xe9, 0x47, 0xa8, 0x06, 0x6b, 0xc5, - 0x2a, 0x84, 0xf0, 0x5e, 0xb1, 0x1f, 0x72, 0xdc, 0x33, 0x9d, - 0xdb, 0x75, 0x9a, 0x34, 0x59, 0xf7, 0x18, 0xb6, 0xc2, 0x6c, - 0x83, 0x2d, 0x40, 0xee, 0x01, 0xaf, 0x45, 0xeb, 0x04, 0xaa, - 0xc7, 0x69, 0x86, 0x28, 0x5c, 0xf2, 0x1d, 0xb3, 0xde, 0x70, - 0x9f, 0x31, 0x77, 0xd9, 0x36, 0x98, 0xf5, 0x5b, 0xb4, 0x1a, - 0x6e, 0xc0, 0x2f, 0x81, 0xec, 0x42, 0xad, 0x03, 0x21, 0x8f, - 0x60, 0xce, 0xa3, 0x0d, 0xe2, 0x4c, 0x38, 0x96, 0x79, 0xd7, - 0xba, 0x14, 0xfb, 0x55, 0x13, 0xbd, 0x52, 0xfc, 0x91, 0x3f, - 0xd0, 0x7e, 0x0a, 0xa4, 0x4b, 0xe5, 0x88, 0x26, 0xc9, 0x67, - 0x00, 0xaf, 0x43, 0xec, 0x86, 0x29, 0xc5, 0x6a, 0x11, 0xbe, - 0x52, 0xfd, 0x97, 0x38, 0xd4, 0x7b, 0x22, 0x8d, 0x61, 0xce, - 0xa4, 0x0b, 0xe7, 0x48, 0x33, 0x9c, 0x70, 0xdf, 0xb5, 0x1a, - 0xf6, 0x59, 0x44, 0xeb, 0x07, 0xa8, 0xc2, 0x6d, 0x81, 0x2e, - 0x55, 0xfa, 0x16, 0xb9, 0xd3, 0x7c, 0x90, 0x3f, 0x66, 0xc9, - 0x25, 0x8a, 0xe0, 0x4f, 0xa3, 0x0c, 0x77, 0xd8, 0x34, 0x9b, - 0xf1, 0x5e, 0xb2, 0x1d, 0x88, 0x27, 0xcb, 0x64, 0x0e, 0xa1, - 0x4d, 0xe2, 0x99, 0x36, 0xda, 0x75, 0x1f, 0xb0, 0x5c, 0xf3, - 0xaa, 0x05, 0xe9, 0x46, 0x2c, 0x83, 0x6f, 0xc0, 0xbb, 0x14, - 0xf8, 0x57, 0x3d, 0x92, 0x7e, 0xd1, 0xcc, 0x63, 0x8f, 0x20, - 0x4a, 0xe5, 0x09, 0xa6, 0xdd, 0x72, 0x9e, 0x31, 0x5b, 0xf4, - 0x18, 0xb7, 0xee, 0x41, 0xad, 0x02, 0x68, 0xc7, 0x2b, 0x84, - 0xff, 0x50, 0xbc, 0x13, 0x79, 0xd6, 0x3a, 0x95, 0x0d, 0xa2, - 0x4e, 0xe1, 0x8b, 0x24, 0xc8, 0x67, 0x1c, 0xb3, 0x5f, 0xf0, - 0x9a, 0x35, 0xd9, 0x76, 0x2f, 0x80, 0x6c, 0xc3, 0xa9, 0x06, - 0xea, 0x45, 0x3e, 0x91, 0x7d, 0xd2, 0xb8, 0x17, 0xfb, 0x54, - 0x49, 0xe6, 0x0a, 0xa5, 0xcf, 0x60, 0x8c, 0x23, 0x58, 0xf7, - 0x1b, 0xb4, 0xde, 0x71, 0x9d, 0x32, 0x6b, 0xc4, 0x28, 0x87, - 0xed, 0x42, 0xae, 0x01, 0x7a, 0xd5, 0x39, 0x96, 0xfc, 0x53, - 0xbf, 0x10, 0x85, 0x2a, 0xc6, 0x69, 0x03, 0xac, 0x40, 0xef, - 0x94, 0x3b, 0xd7, 0x78, 0x12, 0xbd, 0x51, 0xfe, 0xa7, 0x08, - 0xe4, 0x4b, 0x21, 0x8e, 0x62, 0xcd, 0xb6, 0x19, 0xf5, 0x5a, - 0x30, 0x9f, 0x73, 0xdc, 0xc1, 0x6e, 0x82, 0x2d, 0x47, 0xe8, - 0x04, 0xab, 0xd0, 0x7f, 0x93, 0x3c, 0x56, 0xf9, 0x15, 0xba, - 0xe3, 0x4c, 0xa0, 0x0f, 0x65, 0xca, 0x26, 0x89, 0xf2, 0x5d, - 0xb1, 0x1e, 0x74, 0xdb, 0x37, 0x98, 0x00, 0xb0, 0x7d, 0xcd, - 0xfa, 0x4a, 0x87, 0x37, 0xe9, 0x59, 0x94, 0x24, 0x13, 0xa3, - 0x6e, 0xde, 0xcf, 0x7f, 0xb2, 0x02, 0x35, 0x85, 0x48, 0xf8, - 0x26, 0x96, 0x5b, 0xeb, 0xdc, 0x6c, 0xa1, 0x11, 0x83, 0x33, - 0xfe, 0x4e, 0x79, 0xc9, 0x04, 0xb4, 0x6a, 0xda, 0x17, 0xa7, - 0x90, 0x20, 0xed, 0x5d, 0x4c, 0xfc, 0x31, 0x81, 0xb6, 0x06, - 0xcb, 0x7b, 0xa5, 0x15, 0xd8, 0x68, 0x5f, 0xef, 0x22, 0x92, - 0x1b, 0xab, 0x66, 0xd6, 0xe1, 0x51, 0x9c, 0x2c, 0xf2, 0x42, - 0x8f, 0x3f, 0x08, 0xb8, 0x75, 0xc5, 0xd4, 0x64, 0xa9, 0x19, - 0x2e, 0x9e, 0x53, 0xe3, 0x3d, 0x8d, 0x40, 0xf0, 0xc7, 0x77, - 0xba, 0x0a, 0x98, 0x28, 0xe5, 0x55, 0x62, 0xd2, 0x1f, 0xaf, - 0x71, 0xc1, 0x0c, 0xbc, 0x8b, 0x3b, 0xf6, 0x46, 0x57, 0xe7, - 0x2a, 0x9a, 0xad, 0x1d, 0xd0, 0x60, 0xbe, 0x0e, 0xc3, 0x73, - 0x44, 0xf4, 0x39, 0x89, 0x36, 0x86, 0x4b, 0xfb, 0xcc, 0x7c, - 0xb1, 0x01, 0xdf, 0x6f, 0xa2, 0x12, 0x25, 0x95, 0x58, 0xe8, - 0xf9, 0x49, 0x84, 0x34, 0x03, 0xb3, 0x7e, 0xce, 0x10, 0xa0, - 0x6d, 0xdd, 0xea, 0x5a, 0x97, 0x27, 0xb5, 0x05, 0xc8, 0x78, - 0x4f, 0xff, 0x32, 0x82, 0x5c, 0xec, 0x21, 0x91, 0xa6, 0x16, - 0xdb, 0x6b, 0x7a, 0xca, 0x07, 0xb7, 0x80, 0x30, 0xfd, 0x4d, - 0x93, 0x23, 0xee, 0x5e, 0x69, 0xd9, 0x14, 0xa4, 0x2d, 0x9d, - 0x50, 0xe0, 0xd7, 0x67, 0xaa, 0x1a, 0xc4, 0x74, 0xb9, 0x09, - 0x3e, 0x8e, 0x43, 0xf3, 0xe2, 0x52, 0x9f, 0x2f, 0x18, 0xa8, - 0x65, 0xd5, 0x0b, 0xbb, 0x76, 0xc6, 0xf1, 0x41, 0x8c, 0x3c, - 0xae, 0x1e, 0xd3, 0x63, 0x54, 0xe4, 0x29, 0x99, 0x47, 0xf7, - 0x3a, 0x8a, 0xbd, 0x0d, 0xc0, 0x70, 0x61, 0xd1, 0x1c, 0xac, - 0x9b, 0x2b, 0xe6, 0x56, 0x88, 0x38, 0xf5, 0x45, 0x72, 0xc2, - 0x0f, 0xbf, 0x00, 0xb1, 0x7f, 0xce, 0xfe, 0x4f, 0x81, 0x30, - 0xe1, 0x50, 0x9e, 0x2f, 0x1f, 0xae, 0x60, 0xd1, 0xdf, 0x6e, - 0xa0, 0x11, 0x21, 0x90, 0x5e, 0xef, 0x3e, 0x8f, 0x41, 0xf0, - 0xc0, 0x71, 0xbf, 0x0e, 0xa3, 0x12, 0xdc, 0x6d, 0x5d, 0xec, - 0x22, 0x93, 0x42, 0xf3, 0x3d, 0x8c, 0xbc, 0x0d, 0xc3, 0x72, - 0x7c, 0xcd, 0x03, 0xb2, 0x82, 0x33, 0xfd, 0x4c, 0x9d, 0x2c, - 0xe2, 0x53, 0x63, 0xd2, 0x1c, 0xad, 0x5b, 0xea, 0x24, 0x95, - 0xa5, 0x14, 0xda, 0x6b, 0xba, 0x0b, 0xc5, 0x74, 0x44, 0xf5, - 0x3b, 0x8a, 0x84, 0x35, 0xfb, 0x4a, 0x7a, 0xcb, 0x05, 0xb4, - 0x65, 0xd4, 0x1a, 0xab, 0x9b, 0x2a, 0xe4, 0x55, 0xf8, 0x49, - 0x87, 0x36, 0x06, 0xb7, 0x79, 0xc8, 0x19, 0xa8, 0x66, 0xd7, - 0xe7, 0x56, 0x98, 0x29, 0x27, 0x96, 0x58, 0xe9, 0xd9, 0x68, - 0xa6, 0x17, 0xc6, 0x77, 0xb9, 0x08, 0x38, 0x89, 0x47, 0xf6, - 0xb6, 0x07, 0xc9, 0x78, 0x48, 0xf9, 0x37, 0x86, 0x57, 0xe6, - 0x28, 0x99, 0xa9, 0x18, 0xd6, 0x67, 0x69, 0xd8, 0x16, 0xa7, - 0x97, 0x26, 0xe8, 0x59, 0x88, 0x39, 0xf7, 0x46, 0x76, 0xc7, - 0x09, 0xb8, 0x15, 0xa4, 0x6a, 0xdb, 0xeb, 0x5a, 0x94, 0x25, - 0xf4, 0x45, 0x8b, 0x3a, 0x0a, 0xbb, 0x75, 0xc4, 0xca, 0x7b, - 0xb5, 0x04, 0x34, 0x85, 0x4b, 0xfa, 0x2b, 0x9a, 0x54, 0xe5, - 0xd5, 0x64, 0xaa, 0x1b, 0xed, 0x5c, 0x92, 0x23, 0x13, 0xa2, - 0x6c, 0xdd, 0x0c, 0xbd, 0x73, 0xc2, 0xf2, 0x43, 0x8d, 0x3c, - 0x32, 0x83, 0x4d, 0xfc, 0xcc, 0x7d, 0xb3, 0x02, 0xd3, 0x62, - 0xac, 0x1d, 0x2d, 0x9c, 0x52, 0xe3, 0x4e, 0xff, 0x31, 0x80, - 0xb0, 0x01, 0xcf, 0x7e, 0xaf, 0x1e, 0xd0, 0x61, 0x51, 0xe0, - 0x2e, 0x9f, 0x91, 0x20, 0xee, 0x5f, 0x6f, 0xde, 0x10, 0xa1, - 0x70, 0xc1, 0x0f, 0xbe, 0x8e, 0x3f, 0xf1, 0x40, 0x00, 0xb2, - 0x79, 0xcb, 0xf2, 0x40, 0x8b, 0x39, 0xf9, 0x4b, 0x80, 0x32, - 0x0b, 0xb9, 0x72, 0xc0, 0xef, 0x5d, 0x96, 0x24, 0x1d, 0xaf, - 0x64, 0xd6, 0x16, 0xa4, 0x6f, 0xdd, 0xe4, 0x56, 0x9d, 0x2f, - 0xc3, 0x71, 0xba, 0x08, 0x31, 0x83, 0x48, 0xfa, 0x3a, 0x88, - 0x43, 0xf1, 0xc8, 0x7a, 0xb1, 0x03, 0x2c, 0x9e, 0x55, 0xe7, - 0xde, 0x6c, 0xa7, 0x15, 0xd5, 0x67, 0xac, 0x1e, 0x27, 0x95, - 0x5e, 0xec, 0x9b, 0x29, 0xe2, 0x50, 0x69, 0xdb, 0x10, 0xa2, - 0x62, 0xd0, 0x1b, 0xa9, 0x90, 0x22, 0xe9, 0x5b, 0x74, 0xc6, - 0x0d, 0xbf, 0x86, 0x34, 0xff, 0x4d, 0x8d, 0x3f, 0xf4, 0x46, - 0x7f, 0xcd, 0x06, 0xb4, 0x58, 0xea, 0x21, 0x93, 0xaa, 0x18, - 0xd3, 0x61, 0xa1, 0x13, 0xd8, 0x6a, 0x53, 0xe1, 0x2a, 0x98, - 0xb7, 0x05, 0xce, 0x7c, 0x45, 0xf7, 0x3c, 0x8e, 0x4e, 0xfc, - 0x37, 0x85, 0xbc, 0x0e, 0xc5, 0x77, 0x2b, 0x99, 0x52, 0xe0, - 0xd9, 0x6b, 0xa0, 0x12, 0xd2, 0x60, 0xab, 0x19, 0x20, 0x92, - 0x59, 0xeb, 0xc4, 0x76, 0xbd, 0x0f, 0x36, 0x84, 0x4f, 0xfd, - 0x3d, 0x8f, 0x44, 0xf6, 0xcf, 0x7d, 0xb6, 0x04, 0xe8, 0x5a, - 0x91, 0x23, 0x1a, 0xa8, 0x63, 0xd1, 0x11, 0xa3, 0x68, 0xda, - 0xe3, 0x51, 0x9a, 0x28, 0x07, 0xb5, 0x7e, 0xcc, 0xf5, 0x47, - 0x8c, 0x3e, 0xfe, 0x4c, 0x87, 0x35, 0x0c, 0xbe, 0x75, 0xc7, - 0xb0, 0x02, 0xc9, 0x7b, 0x42, 0xf0, 0x3b, 0x89, 0x49, 0xfb, - 0x30, 0x82, 0xbb, 0x09, 0xc2, 0x70, 0x5f, 0xed, 0x26, 0x94, - 0xad, 0x1f, 0xd4, 0x66, 0xa6, 0x14, 0xdf, 0x6d, 0x54, 0xe6, - 0x2d, 0x9f, 0x73, 0xc1, 0x0a, 0xb8, 0x81, 0x33, 0xf8, 0x4a, - 0x8a, 0x38, 0xf3, 0x41, 0x78, 0xca, 0x01, 0xb3, 0x9c, 0x2e, - 0xe5, 0x57, 0x6e, 0xdc, 0x17, 0xa5, 0x65, 0xd7, 0x1c, 0xae, - 0x97, 0x25, 0xee, 0x5c, 0x00, 0xb3, 0x7b, 0xc8, 0xf6, 0x45, - 0x8d, 0x3e, 0xf1, 0x42, 0x8a, 0x39, 0x07, 0xb4, 0x7c, 0xcf, - 0xff, 0x4c, 0x84, 0x37, 0x09, 0xba, 0x72, 0xc1, 0x0e, 0xbd, - 0x75, 0xc6, 0xf8, 0x4b, 0x83, 0x30, 0xe3, 0x50, 0x98, 0x2b, - 0x15, 0xa6, 0x6e, 0xdd, 0x12, 0xa1, 0x69, 0xda, 0xe4, 0x57, - 0x9f, 0x2c, 0x1c, 0xaf, 0x67, 0xd4, 0xea, 0x59, 0x91, 0x22, - 0xed, 0x5e, 0x96, 0x25, 0x1b, 0xa8, 0x60, 0xd3, 0xdb, 0x68, - 0xa0, 0x13, 0x2d, 0x9e, 0x56, 0xe5, 0x2a, 0x99, 0x51, 0xe2, - 0xdc, 0x6f, 0xa7, 0x14, 0x24, 0x97, 0x5f, 0xec, 0xd2, 0x61, - 0xa9, 0x1a, 0xd5, 0x66, 0xae, 0x1d, 0x23, 0x90, 0x58, 0xeb, - 0x38, 0x8b, 0x43, 0xf0, 0xce, 0x7d, 0xb5, 0x06, 0xc9, 0x7a, - 0xb2, 0x01, 0x3f, 0x8c, 0x44, 0xf7, 0xc7, 0x74, 0xbc, 0x0f, - 0x31, 0x82, 0x4a, 0xf9, 0x36, 0x85, 0x4d, 0xfe, 0xc0, 0x73, - 0xbb, 0x08, 0xab, 0x18, 0xd0, 0x63, 0x5d, 0xee, 0x26, 0x95, - 0x5a, 0xe9, 0x21, 0x92, 0xac, 0x1f, 0xd7, 0x64, 0x54, 0xe7, - 0x2f, 0x9c, 0xa2, 0x11, 0xd9, 0x6a, 0xa5, 0x16, 0xde, 0x6d, - 0x53, 0xe0, 0x28, 0x9b, 0x48, 0xfb, 0x33, 0x80, 0xbe, 0x0d, - 0xc5, 0x76, 0xb9, 0x0a, 0xc2, 0x71, 0x4f, 0xfc, 0x34, 0x87, - 0xb7, 0x04, 0xcc, 0x7f, 0x41, 0xf2, 0x3a, 0x89, 0x46, 0xf5, - 0x3d, 0x8e, 0xb0, 0x03, 0xcb, 0x78, 0x70, 0xc3, 0x0b, 0xb8, - 0x86, 0x35, 0xfd, 0x4e, 0x81, 0x32, 0xfa, 0x49, 0x77, 0xc4, - 0x0c, 0xbf, 0x8f, 0x3c, 0xf4, 0x47, 0x79, 0xca, 0x02, 0xb1, - 0x7e, 0xcd, 0x05, 0xb6, 0x88, 0x3b, 0xf3, 0x40, 0x93, 0x20, - 0xe8, 0x5b, 0x65, 0xd6, 0x1e, 0xad, 0x62, 0xd1, 0x19, 0xaa, - 0x94, 0x27, 0xef, 0x5c, 0x6c, 0xdf, 0x17, 0xa4, 0x9a, 0x29, - 0xe1, 0x52, 0x9d, 0x2e, 0xe6, 0x55, 0x6b, 0xd8, 0x10, 0xa3, - 0x00, 0xb4, 0x75, 0xc1, 0xea, 0x5e, 0x9f, 0x2b, 0xc9, 0x7d, - 0xbc, 0x08, 0x23, 0x97, 0x56, 0xe2, 0x8f, 0x3b, 0xfa, 0x4e, - 0x65, 0xd1, 0x10, 0xa4, 0x46, 0xf2, 0x33, 0x87, 0xac, 0x18, - 0xd9, 0x6d, 0x03, 0xb7, 0x76, 0xc2, 0xe9, 0x5d, 0x9c, 0x28, - 0xca, 0x7e, 0xbf, 0x0b, 0x20, 0x94, 0x55, 0xe1, 0x8c, 0x38, - 0xf9, 0x4d, 0x66, 0xd2, 0x13, 0xa7, 0x45, 0xf1, 0x30, 0x84, - 0xaf, 0x1b, 0xda, 0x6e, 0x06, 0xb2, 0x73, 0xc7, 0xec, 0x58, - 0x99, 0x2d, 0xcf, 0x7b, 0xba, 0x0e, 0x25, 0x91, 0x50, 0xe4, - 0x89, 0x3d, 0xfc, 0x48, 0x63, 0xd7, 0x16, 0xa2, 0x40, 0xf4, - 0x35, 0x81, 0xaa, 0x1e, 0xdf, 0x6b, 0x05, 0xb1, 0x70, 0xc4, - 0xef, 0x5b, 0x9a, 0x2e, 0xcc, 0x78, 0xb9, 0x0d, 0x26, 0x92, - 0x53, 0xe7, 0x8a, 0x3e, 0xff, 0x4b, 0x60, 0xd4, 0x15, 0xa1, - 0x43, 0xf7, 0x36, 0x82, 0xa9, 0x1d, 0xdc, 0x68, 0x0c, 0xb8, - 0x79, 0xcd, 0xe6, 0x52, 0x93, 0x27, 0xc5, 0x71, 0xb0, 0x04, - 0x2f, 0x9b, 0x5a, 0xee, 0x83, 0x37, 0xf6, 0x42, 0x69, 0xdd, - 0x1c, 0xa8, 0x4a, 0xfe, 0x3f, 0x8b, 0xa0, 0x14, 0xd5, 0x61, - 0x0f, 0xbb, 0x7a, 0xce, 0xe5, 0x51, 0x90, 0x24, 0xc6, 0x72, - 0xb3, 0x07, 0x2c, 0x98, 0x59, 0xed, 0x80, 0x34, 0xf5, 0x41, - 0x6a, 0xde, 0x1f, 0xab, 0x49, 0xfd, 0x3c, 0x88, 0xa3, 0x17, - 0xd6, 0x62, 0x0a, 0xbe, 0x7f, 0xcb, 0xe0, 0x54, 0x95, 0x21, - 0xc3, 0x77, 0xb6, 0x02, 0x29, 0x9d, 0x5c, 0xe8, 0x85, 0x31, - 0xf0, 0x44, 0x6f, 0xdb, 0x1a, 0xae, 0x4c, 0xf8, 0x39, 0x8d, - 0xa6, 0x12, 0xd3, 0x67, 0x09, 0xbd, 0x7c, 0xc8, 0xe3, 0x57, - 0x96, 0x22, 0xc0, 0x74, 0xb5, 0x01, 0x2a, 0x9e, 0x5f, 0xeb, - 0x86, 0x32, 0xf3, 0x47, 0x6c, 0xd8, 0x19, 0xad, 0x4f, 0xfb, - 0x3a, 0x8e, 0xa5, 0x11, 0xd0, 0x64, 0x00, 0xb5, 0x77, 0xc2, - 0xee, 0x5b, 0x99, 0x2c, 0xc1, 0x74, 0xb6, 0x03, 0x2f, 0x9a, - 0x58, 0xed, 0x9f, 0x2a, 0xe8, 0x5d, 0x71, 0xc4, 0x06, 0xb3, - 0x5e, 0xeb, 0x29, 0x9c, 0xb0, 0x05, 0xc7, 0x72, 0x23, 0x96, - 0x54, 0xe1, 0xcd, 0x78, 0xba, 0x0f, 0xe2, 0x57, 0x95, 0x20, - 0x0c, 0xb9, 0x7b, 0xce, 0xbc, 0x09, 0xcb, 0x7e, 0x52, 0xe7, - 0x25, 0x90, 0x7d, 0xc8, 0x0a, 0xbf, 0x93, 0x26, 0xe4, 0x51, - 0x46, 0xf3, 0x31, 0x84, 0xa8, 0x1d, 0xdf, 0x6a, 0x87, 0x32, - 0xf0, 0x45, 0x69, 0xdc, 0x1e, 0xab, 0xd9, 0x6c, 0xae, 0x1b, - 0x37, 0x82, 0x40, 0xf5, 0x18, 0xad, 0x6f, 0xda, 0xf6, 0x43, - 0x81, 0x34, 0x65, 0xd0, 0x12, 0xa7, 0x8b, 0x3e, 0xfc, 0x49, - 0xa4, 0x11, 0xd3, 0x66, 0x4a, 0xff, 0x3d, 0x88, 0xfa, 0x4f, - 0x8d, 0x38, 0x14, 0xa1, 0x63, 0xd6, 0x3b, 0x8e, 0x4c, 0xf9, - 0xd5, 0x60, 0xa2, 0x17, 0x8c, 0x39, 0xfb, 0x4e, 0x62, 0xd7, - 0x15, 0xa0, 0x4d, 0xf8, 0x3a, 0x8f, 0xa3, 0x16, 0xd4, 0x61, - 0x13, 0xa6, 0x64, 0xd1, 0xfd, 0x48, 0x8a, 0x3f, 0xd2, 0x67, - 0xa5, 0x10, 0x3c, 0x89, 0x4b, 0xfe, 0xaf, 0x1a, 0xd8, 0x6d, - 0x41, 0xf4, 0x36, 0x83, 0x6e, 0xdb, 0x19, 0xac, 0x80, 0x35, - 0xf7, 0x42, 0x30, 0x85, 0x47, 0xf2, 0xde, 0x6b, 0xa9, 0x1c, - 0xf1, 0x44, 0x86, 0x33, 0x1f, 0xaa, 0x68, 0xdd, 0xca, 0x7f, - 0xbd, 0x08, 0x24, 0x91, 0x53, 0xe6, 0x0b, 0xbe, 0x7c, 0xc9, - 0xe5, 0x50, 0x92, 0x27, 0x55, 0xe0, 0x22, 0x97, 0xbb, 0x0e, - 0xcc, 0x79, 0x94, 0x21, 0xe3, 0x56, 0x7a, 0xcf, 0x0d, 0xb8, - 0xe9, 0x5c, 0x9e, 0x2b, 0x07, 0xb2, 0x70, 0xc5, 0x28, 0x9d, - 0x5f, 0xea, 0xc6, 0x73, 0xb1, 0x04, 0x76, 0xc3, 0x01, 0xb4, - 0x98, 0x2d, 0xef, 0x5a, 0xb7, 0x02, 0xc0, 0x75, 0x59, 0xec, - 0x2e, 0x9b, 0x00, 0xb6, 0x71, 0xc7, 0xe2, 0x54, 0x93, 0x25, - 0xd9, 0x6f, 0xa8, 0x1e, 0x3b, 0x8d, 0x4a, 0xfc, 0xaf, 0x19, - 0xde, 0x68, 0x4d, 0xfb, 0x3c, 0x8a, 0x76, 0xc0, 0x07, 0xb1, - 0x94, 0x22, 0xe5, 0x53, 0x43, 0xf5, 0x32, 0x84, 0xa1, 0x17, - 0xd0, 0x66, 0x9a, 0x2c, 0xeb, 0x5d, 0x78, 0xce, 0x09, 0xbf, - 0xec, 0x5a, 0x9d, 0x2b, 0x0e, 0xb8, 0x7f, 0xc9, 0x35, 0x83, - 0x44, 0xf2, 0xd7, 0x61, 0xa6, 0x10, 0x86, 0x30, 0xf7, 0x41, - 0x64, 0xd2, 0x15, 0xa3, 0x5f, 0xe9, 0x2e, 0x98, 0xbd, 0x0b, - 0xcc, 0x7a, 0x29, 0x9f, 0x58, 0xee, 0xcb, 0x7d, 0xba, 0x0c, - 0xf0, 0x46, 0x81, 0x37, 0x12, 0xa4, 0x63, 0xd5, 0xc5, 0x73, - 0xb4, 0x02, 0x27, 0x91, 0x56, 0xe0, 0x1c, 0xaa, 0x6d, 0xdb, - 0xfe, 0x48, 0x8f, 0x39, 0x6a, 0xdc, 0x1b, 0xad, 0x88, 0x3e, - 0xf9, 0x4f, 0xb3, 0x05, 0xc2, 0x74, 0x51, 0xe7, 0x20, 0x96, - 0x11, 0xa7, 0x60, 0xd6, 0xf3, 0x45, 0x82, 0x34, 0xc8, 0x7e, - 0xb9, 0x0f, 0x2a, 0x9c, 0x5b, 0xed, 0xbe, 0x08, 0xcf, 0x79, - 0x5c, 0xea, 0x2d, 0x9b, 0x67, 0xd1, 0x16, 0xa0, 0x85, 0x33, - 0xf4, 0x42, 0x52, 0xe4, 0x23, 0x95, 0xb0, 0x06, 0xc1, 0x77, - 0x8b, 0x3d, 0xfa, 0x4c, 0x69, 0xdf, 0x18, 0xae, 0xfd, 0x4b, - 0x8c, 0x3a, 0x1f, 0xa9, 0x6e, 0xd8, 0x24, 0x92, 0x55, 0xe3, - 0xc6, 0x70, 0xb7, 0x01, 0x97, 0x21, 0xe6, 0x50, 0x75, 0xc3, - 0x04, 0xb2, 0x4e, 0xf8, 0x3f, 0x89, 0xac, 0x1a, 0xdd, 0x6b, - 0x38, 0x8e, 0x49, 0xff, 0xda, 0x6c, 0xab, 0x1d, 0xe1, 0x57, - 0x90, 0x26, 0x03, 0xb5, 0x72, 0xc4, 0xd4, 0x62, 0xa5, 0x13, - 0x36, 0x80, 0x47, 0xf1, 0x0d, 0xbb, 0x7c, 0xca, 0xef, 0x59, - 0x9e, 0x28, 0x7b, 0xcd, 0x0a, 0xbc, 0x99, 0x2f, 0xe8, 0x5e, - 0xa2, 0x14, 0xd3, 0x65, 0x40, 0xf6, 0x31, 0x87, 0x00, 0xb7, - 0x73, 0xc4, 0xe6, 0x51, 0x95, 0x22, 0xd1, 0x66, 0xa2, 0x15, - 0x37, 0x80, 0x44, 0xf3, 0xbf, 0x08, 0xcc, 0x7b, 0x59, 0xee, - 0x2a, 0x9d, 0x6e, 0xd9, 0x1d, 0xaa, 0x88, 0x3f, 0xfb, 0x4c, - 0x63, 0xd4, 0x10, 0xa7, 0x85, 0x32, 0xf6, 0x41, 0xb2, 0x05, - 0xc1, 0x76, 0x54, 0xe3, 0x27, 0x90, 0xdc, 0x6b, 0xaf, 0x18, - 0x3a, 0x8d, 0x49, 0xfe, 0x0d, 0xba, 0x7e, 0xc9, 0xeb, 0x5c, - 0x98, 0x2f, 0xc6, 0x71, 0xb5, 0x02, 0x20, 0x97, 0x53, 0xe4, - 0x17, 0xa0, 0x64, 0xd3, 0xf1, 0x46, 0x82, 0x35, 0x79, 0xce, - 0x0a, 0xbd, 0x9f, 0x28, 0xec, 0x5b, 0xa8, 0x1f, 0xdb, 0x6c, - 0x4e, 0xf9, 0x3d, 0x8a, 0xa5, 0x12, 0xd6, 0x61, 0x43, 0xf4, - 0x30, 0x87, 0x74, 0xc3, 0x07, 0xb0, 0x92, 0x25, 0xe1, 0x56, - 0x1a, 0xad, 0x69, 0xde, 0xfc, 0x4b, 0x8f, 0x38, 0xcb, 0x7c, - 0xb8, 0x0f, 0x2d, 0x9a, 0x5e, 0xe9, 0x91, 0x26, 0xe2, 0x55, - 0x77, 0xc0, 0x04, 0xb3, 0x40, 0xf7, 0x33, 0x84, 0xa6, 0x11, - 0xd5, 0x62, 0x2e, 0x99, 0x5d, 0xea, 0xc8, 0x7f, 0xbb, 0x0c, - 0xff, 0x48, 0x8c, 0x3b, 0x19, 0xae, 0x6a, 0xdd, 0xf2, 0x45, - 0x81, 0x36, 0x14, 0xa3, 0x67, 0xd0, 0x23, 0x94, 0x50, 0xe7, - 0xc5, 0x72, 0xb6, 0x01, 0x4d, 0xfa, 0x3e, 0x89, 0xab, 0x1c, - 0xd8, 0x6f, 0x9c, 0x2b, 0xef, 0x58, 0x7a, 0xcd, 0x09, 0xbe, - 0x57, 0xe0, 0x24, 0x93, 0xb1, 0x06, 0xc2, 0x75, 0x86, 0x31, - 0xf5, 0x42, 0x60, 0xd7, 0x13, 0xa4, 0xe8, 0x5f, 0x9b, 0x2c, - 0x0e, 0xb9, 0x7d, 0xca, 0x39, 0x8e, 0x4a, 0xfd, 0xdf, 0x68, - 0xac, 0x1b, 0x34, 0x83, 0x47, 0xf0, 0xd2, 0x65, 0xa1, 0x16, - 0xe5, 0x52, 0x96, 0x21, 0x03, 0xb4, 0x70, 0xc7, 0x8b, 0x3c, - 0xf8, 0x4f, 0x6d, 0xda, 0x1e, 0xa9, 0x5a, 0xed, 0x29, 0x9e, - 0xbc, 0x0b, 0xcf, 0x78, 0x00, 0xb8, 0x6d, 0xd5, 0xda, 0x62, - 0xb7, 0x0f, 0xa9, 0x11, 0xc4, 0x7c, 0x73, 0xcb, 0x1e, 0xa6, - 0x4f, 0xf7, 0x22, 0x9a, 0x95, 0x2d, 0xf8, 0x40, 0xe6, 0x5e, - 0x8b, 0x33, 0x3c, 0x84, 0x51, 0xe9, 0x9e, 0x26, 0xf3, 0x4b, - 0x44, 0xfc, 0x29, 0x91, 0x37, 0x8f, 0x5a, 0xe2, 0xed, 0x55, - 0x80, 0x38, 0xd1, 0x69, 0xbc, 0x04, 0x0b, 0xb3, 0x66, 0xde, - 0x78, 0xc0, 0x15, 0xad, 0xa2, 0x1a, 0xcf, 0x77, 0x21, 0x99, - 0x4c, 0xf4, 0xfb, 0x43, 0x96, 0x2e, 0x88, 0x30, 0xe5, 0x5d, - 0x52, 0xea, 0x3f, 0x87, 0x6e, 0xd6, 0x03, 0xbb, 0xb4, 0x0c, - 0xd9, 0x61, 0xc7, 0x7f, 0xaa, 0x12, 0x1d, 0xa5, 0x70, 0xc8, - 0xbf, 0x07, 0xd2, 0x6a, 0x65, 0xdd, 0x08, 0xb0, 0x16, 0xae, - 0x7b, 0xc3, 0xcc, 0x74, 0xa1, 0x19, 0xf0, 0x48, 0x9d, 0x25, - 0x2a, 0x92, 0x47, 0xff, 0x59, 0xe1, 0x34, 0x8c, 0x83, 0x3b, - 0xee, 0x56, 0x42, 0xfa, 0x2f, 0x97, 0x98, 0x20, 0xf5, 0x4d, - 0xeb, 0x53, 0x86, 0x3e, 0x31, 0x89, 0x5c, 0xe4, 0x0d, 0xb5, - 0x60, 0xd8, 0xd7, 0x6f, 0xba, 0x02, 0xa4, 0x1c, 0xc9, 0x71, - 0x7e, 0xc6, 0x13, 0xab, 0xdc, 0x64, 0xb1, 0x09, 0x06, 0xbe, - 0x6b, 0xd3, 0x75, 0xcd, 0x18, 0xa0, 0xaf, 0x17, 0xc2, 0x7a, - 0x93, 0x2b, 0xfe, 0x46, 0x49, 0xf1, 0x24, 0x9c, 0x3a, 0x82, - 0x57, 0xef, 0xe0, 0x58, 0x8d, 0x35, 0x63, 0xdb, 0x0e, 0xb6, - 0xb9, 0x01, 0xd4, 0x6c, 0xca, 0x72, 0xa7, 0x1f, 0x10, 0xa8, - 0x7d, 0xc5, 0x2c, 0x94, 0x41, 0xf9, 0xf6, 0x4e, 0x9b, 0x23, - 0x85, 0x3d, 0xe8, 0x50, 0x5f, 0xe7, 0x32, 0x8a, 0xfd, 0x45, - 0x90, 0x28, 0x27, 0x9f, 0x4a, 0xf2, 0x54, 0xec, 0x39, 0x81, - 0x8e, 0x36, 0xe3, 0x5b, 0xb2, 0x0a, 0xdf, 0x67, 0x68, 0xd0, - 0x05, 0xbd, 0x1b, 0xa3, 0x76, 0xce, 0xc1, 0x79, 0xac, 0x14, - 0x00, 0xb9, 0x6f, 0xd6, 0xde, 0x67, 0xb1, 0x08, 0xa1, 0x18, - 0xce, 0x77, 0x7f, 0xc6, 0x10, 0xa9, 0x5f, 0xe6, 0x30, 0x89, - 0x81, 0x38, 0xee, 0x57, 0xfe, 0x47, 0x91, 0x28, 0x20, 0x99, - 0x4f, 0xf6, 0xbe, 0x07, 0xd1, 0x68, 0x60, 0xd9, 0x0f, 0xb6, - 0x1f, 0xa6, 0x70, 0xc9, 0xc1, 0x78, 0xae, 0x17, 0xe1, 0x58, - 0x8e, 0x37, 0x3f, 0x86, 0x50, 0xe9, 0x40, 0xf9, 0x2f, 0x96, - 0x9e, 0x27, 0xf1, 0x48, 0x61, 0xd8, 0x0e, 0xb7, 0xbf, 0x06, - 0xd0, 0x69, 0xc0, 0x79, 0xaf, 0x16, 0x1e, 0xa7, 0x71, 0xc8, - 0x3e, 0x87, 0x51, 0xe8, 0xe0, 0x59, 0x8f, 0x36, 0x9f, 0x26, - 0xf0, 0x49, 0x41, 0xf8, 0x2e, 0x97, 0xdf, 0x66, 0xb0, 0x09, - 0x01, 0xb8, 0x6e, 0xd7, 0x7e, 0xc7, 0x11, 0xa8, 0xa0, 0x19, - 0xcf, 0x76, 0x80, 0x39, 0xef, 0x56, 0x5e, 0xe7, 0x31, 0x88, - 0x21, 0x98, 0x4e, 0xf7, 0xff, 0x46, 0x90, 0x29, 0xc2, 0x7b, - 0xad, 0x14, 0x1c, 0xa5, 0x73, 0xca, 0x63, 0xda, 0x0c, 0xb5, - 0xbd, 0x04, 0xd2, 0x6b, 0x9d, 0x24, 0xf2, 0x4b, 0x43, 0xfa, - 0x2c, 0x95, 0x3c, 0x85, 0x53, 0xea, 0xe2, 0x5b, 0x8d, 0x34, - 0x7c, 0xc5, 0x13, 0xaa, 0xa2, 0x1b, 0xcd, 0x74, 0xdd, 0x64, - 0xb2, 0x0b, 0x03, 0xba, 0x6c, 0xd5, 0x23, 0x9a, 0x4c, 0xf5, - 0xfd, 0x44, 0x92, 0x2b, 0x82, 0x3b, 0xed, 0x54, 0x5c, 0xe5, - 0x33, 0x8a, 0xa3, 0x1a, 0xcc, 0x75, 0x7d, 0xc4, 0x12, 0xab, - 0x02, 0xbb, 0x6d, 0xd4, 0xdc, 0x65, 0xb3, 0x0a, 0xfc, 0x45, - 0x93, 0x2a, 0x22, 0x9b, 0x4d, 0xf4, 0x5d, 0xe4, 0x32, 0x8b, - 0x83, 0x3a, 0xec, 0x55, 0x1d, 0xa4, 0x72, 0xcb, 0xc3, 0x7a, - 0xac, 0x15, 0xbc, 0x05, 0xd3, 0x6a, 0x62, 0xdb, 0x0d, 0xb4, - 0x42, 0xfb, 0x2d, 0x94, 0x9c, 0x25, 0xf3, 0x4a, 0xe3, 0x5a, - 0x8c, 0x35, 0x3d, 0x84, 0x52, 0xeb, 0x00, 0xba, 0x69, 0xd3, - 0xd2, 0x68, 0xbb, 0x01, 0xb9, 0x03, 0xd0, 0x6a, 0x6b, 0xd1, - 0x02, 0xb8, 0x6f, 0xd5, 0x06, 0xbc, 0xbd, 0x07, 0xd4, 0x6e, - 0xd6, 0x6c, 0xbf, 0x05, 0x04, 0xbe, 0x6d, 0xd7, 0xde, 0x64, - 0xb7, 0x0d, 0x0c, 0xb6, 0x65, 0xdf, 0x67, 0xdd, 0x0e, 0xb4, - 0xb5, 0x0f, 0xdc, 0x66, 0xb1, 0x0b, 0xd8, 0x62, 0x63, 0xd9, - 0x0a, 0xb0, 0x08, 0xb2, 0x61, 0xdb, 0xda, 0x60, 0xb3, 0x09, - 0xa1, 0x1b, 0xc8, 0x72, 0x73, 0xc9, 0x1a, 0xa0, 0x18, 0xa2, - 0x71, 0xcb, 0xca, 0x70, 0xa3, 0x19, 0xce, 0x74, 0xa7, 0x1d, - 0x1c, 0xa6, 0x75, 0xcf, 0x77, 0xcd, 0x1e, 0xa4, 0xa5, 0x1f, - 0xcc, 0x76, 0x7f, 0xc5, 0x16, 0xac, 0xad, 0x17, 0xc4, 0x7e, - 0xc6, 0x7c, 0xaf, 0x15, 0x14, 0xae, 0x7d, 0xc7, 0x10, 0xaa, - 0x79, 0xc3, 0xc2, 0x78, 0xab, 0x11, 0xa9, 0x13, 0xc0, 0x7a, - 0x7b, 0xc1, 0x12, 0xa8, 0x5f, 0xe5, 0x36, 0x8c, 0x8d, 0x37, - 0xe4, 0x5e, 0xe6, 0x5c, 0x8f, 0x35, 0x34, 0x8e, 0x5d, 0xe7, - 0x30, 0x8a, 0x59, 0xe3, 0xe2, 0x58, 0x8b, 0x31, 0x89, 0x33, - 0xe0, 0x5a, 0x5b, 0xe1, 0x32, 0x88, 0x81, 0x3b, 0xe8, 0x52, - 0x53, 0xe9, 0x3a, 0x80, 0x38, 0x82, 0x51, 0xeb, 0xea, 0x50, - 0x83, 0x39, 0xee, 0x54, 0x87, 0x3d, 0x3c, 0x86, 0x55, 0xef, - 0x57, 0xed, 0x3e, 0x84, 0x85, 0x3f, 0xec, 0x56, 0xfe, 0x44, - 0x97, 0x2d, 0x2c, 0x96, 0x45, 0xff, 0x47, 0xfd, 0x2e, 0x94, - 0x95, 0x2f, 0xfc, 0x46, 0x91, 0x2b, 0xf8, 0x42, 0x43, 0xf9, - 0x2a, 0x90, 0x28, 0x92, 0x41, 0xfb, 0xfa, 0x40, 0x93, 0x29, - 0x20, 0x9a, 0x49, 0xf3, 0xf2, 0x48, 0x9b, 0x21, 0x99, 0x23, - 0xf0, 0x4a, 0x4b, 0xf1, 0x22, 0x98, 0x4f, 0xf5, 0x26, 0x9c, - 0x9d, 0x27, 0xf4, 0x4e, 0xf6, 0x4c, 0x9f, 0x25, 0x24, 0x9e, - 0x4d, 0xf7, 0x00, 0xbb, 0x6b, 0xd0, 0xd6, 0x6d, 0xbd, 0x06, - 0xb1, 0x0a, 0xda, 0x61, 0x67, 0xdc, 0x0c, 0xb7, 0x7f, 0xc4, - 0x14, 0xaf, 0xa9, 0x12, 0xc2, 0x79, 0xce, 0x75, 0xa5, 0x1e, - 0x18, 0xa3, 0x73, 0xc8, 0xfe, 0x45, 0x95, 0x2e, 0x28, 0x93, - 0x43, 0xf8, 0x4f, 0xf4, 0x24, 0x9f, 0x99, 0x22, 0xf2, 0x49, - 0x81, 0x3a, 0xea, 0x51, 0x57, 0xec, 0x3c, 0x87, 0x30, 0x8b, - 0x5b, 0xe0, 0xe6, 0x5d, 0x8d, 0x36, 0xe1, 0x5a, 0x8a, 0x31, - 0x37, 0x8c, 0x5c, 0xe7, 0x50, 0xeb, 0x3b, 0x80, 0x86, 0x3d, - 0xed, 0x56, 0x9e, 0x25, 0xf5, 0x4e, 0x48, 0xf3, 0x23, 0x98, - 0x2f, 0x94, 0x44, 0xff, 0xf9, 0x42, 0x92, 0x29, 0x1f, 0xa4, - 0x74, 0xcf, 0xc9, 0x72, 0xa2, 0x19, 0xae, 0x15, 0xc5, 0x7e, - 0x78, 0xc3, 0x13, 0xa8, 0x60, 0xdb, 0x0b, 0xb0, 0xb6, 0x0d, - 0xdd, 0x66, 0xd1, 0x6a, 0xba, 0x01, 0x07, 0xbc, 0x6c, 0xd7, - 0xdf, 0x64, 0xb4, 0x0f, 0x09, 0xb2, 0x62, 0xd9, 0x6e, 0xd5, - 0x05, 0xbe, 0xb8, 0x03, 0xd3, 0x68, 0xa0, 0x1b, 0xcb, 0x70, - 0x76, 0xcd, 0x1d, 0xa6, 0x11, 0xaa, 0x7a, 0xc1, 0xc7, 0x7c, - 0xac, 0x17, 0x21, 0x9a, 0x4a, 0xf1, 0xf7, 0x4c, 0x9c, 0x27, - 0x90, 0x2b, 0xfb, 0x40, 0x46, 0xfd, 0x2d, 0x96, 0x5e, 0xe5, - 0x35, 0x8e, 0x88, 0x33, 0xe3, 0x58, 0xef, 0x54, 0x84, 0x3f, - 0x39, 0x82, 0x52, 0xe9, 0x3e, 0x85, 0x55, 0xee, 0xe8, 0x53, - 0x83, 0x38, 0x8f, 0x34, 0xe4, 0x5f, 0x59, 0xe2, 0x32, 0x89, - 0x41, 0xfa, 0x2a, 0x91, 0x97, 0x2c, 0xfc, 0x47, 0xf0, 0x4b, - 0x9b, 0x20, 0x26, 0x9d, 0x4d, 0xf6, 0xc0, 0x7b, 0xab, 0x10, - 0x16, 0xad, 0x7d, 0xc6, 0x71, 0xca, 0x1a, 0xa1, 0xa7, 0x1c, - 0xcc, 0x77, 0xbf, 0x04, 0xd4, 0x6f, 0x69, 0xd2, 0x02, 0xb9, - 0x0e, 0xb5, 0x65, 0xde, 0xd8, 0x63, 0xb3, 0x08, 0x00, 0xbc, - 0x65, 0xd9, 0xca, 0x76, 0xaf, 0x13, 0x89, 0x35, 0xec, 0x50, - 0x43, 0xff, 0x26, 0x9a, 0x0f, 0xb3, 0x6a, 0xd6, 0xc5, 0x79, - 0xa0, 0x1c, 0x86, 0x3a, 0xe3, 0x5f, 0x4c, 0xf0, 0x29, 0x95, - 0x1e, 0xa2, 0x7b, 0xc7, 0xd4, 0x68, 0xb1, 0x0d, 0x97, 0x2b, - 0xf2, 0x4e, 0x5d, 0xe1, 0x38, 0x84, 0x11, 0xad, 0x74, 0xc8, - 0xdb, 0x67, 0xbe, 0x02, 0x98, 0x24, 0xfd, 0x41, 0x52, 0xee, - 0x37, 0x8b, 0x3c, 0x80, 0x59, 0xe5, 0xf6, 0x4a, 0x93, 0x2f, - 0xb5, 0x09, 0xd0, 0x6c, 0x7f, 0xc3, 0x1a, 0xa6, 0x33, 0x8f, - 0x56, 0xea, 0xf9, 0x45, 0x9c, 0x20, 0xba, 0x06, 0xdf, 0x63, - 0x70, 0xcc, 0x15, 0xa9, 0x22, 0x9e, 0x47, 0xfb, 0xe8, 0x54, - 0x8d, 0x31, 0xab, 0x17, 0xce, 0x72, 0x61, 0xdd, 0x04, 0xb8, - 0x2d, 0x91, 0x48, 0xf4, 0xe7, 0x5b, 0x82, 0x3e, 0xa4, 0x18, - 0xc1, 0x7d, 0x6e, 0xd2, 0x0b, 0xb7, 0x78, 0xc4, 0x1d, 0xa1, - 0xb2, 0x0e, 0xd7, 0x6b, 0xf1, 0x4d, 0x94, 0x28, 0x3b, 0x87, - 0x5e, 0xe2, 0x77, 0xcb, 0x12, 0xae, 0xbd, 0x01, 0xd8, 0x64, - 0xfe, 0x42, 0x9b, 0x27, 0x34, 0x88, 0x51, 0xed, 0x66, 0xda, - 0x03, 0xbf, 0xac, 0x10, 0xc9, 0x75, 0xef, 0x53, 0x8a, 0x36, - 0x25, 0x99, 0x40, 0xfc, 0x69, 0xd5, 0x0c, 0xb0, 0xa3, 0x1f, - 0xc6, 0x7a, 0xe0, 0x5c, 0x85, 0x39, 0x2a, 0x96, 0x4f, 0xf3, - 0x44, 0xf8, 0x21, 0x9d, 0x8e, 0x32, 0xeb, 0x57, 0xcd, 0x71, - 0xa8, 0x14, 0x07, 0xbb, 0x62, 0xde, 0x4b, 0xf7, 0x2e, 0x92, - 0x81, 0x3d, 0xe4, 0x58, 0xc2, 0x7e, 0xa7, 0x1b, 0x08, 0xb4, - 0x6d, 0xd1, 0x5a, 0xe6, 0x3f, 0x83, 0x90, 0x2c, 0xf5, 0x49, - 0xd3, 0x6f, 0xb6, 0x0a, 0x19, 0xa5, 0x7c, 0xc0, 0x55, 0xe9, - 0x30, 0x8c, 0x9f, 0x23, 0xfa, 0x46, 0xdc, 0x60, 0xb9, 0x05, - 0x16, 0xaa, 0x73, 0xcf, 0x00, 0xbd, 0x67, 0xda, 0xce, 0x73, - 0xa9, 0x14, 0x81, 0x3c, 0xe6, 0x5b, 0x4f, 0xf2, 0x28, 0x95, - 0x1f, 0xa2, 0x78, 0xc5, 0xd1, 0x6c, 0xb6, 0x0b, 0x9e, 0x23, - 0xf9, 0x44, 0x50, 0xed, 0x37, 0x8a, 0x3e, 0x83, 0x59, 0xe4, - 0xf0, 0x4d, 0x97, 0x2a, 0xbf, 0x02, 0xd8, 0x65, 0x71, 0xcc, - 0x16, 0xab, 0x21, 0x9c, 0x46, 0xfb, 0xef, 0x52, 0x88, 0x35, - 0xa0, 0x1d, 0xc7, 0x7a, 0x6e, 0xd3, 0x09, 0xb4, 0x7c, 0xc1, - 0x1b, 0xa6, 0xb2, 0x0f, 0xd5, 0x68, 0xfd, 0x40, 0x9a, 0x27, - 0x33, 0x8e, 0x54, 0xe9, 0x63, 0xde, 0x04, 0xb9, 0xad, 0x10, - 0xca, 0x77, 0xe2, 0x5f, 0x85, 0x38, 0x2c, 0x91, 0x4b, 0xf6, - 0x42, 0xff, 0x25, 0x98, 0x8c, 0x31, 0xeb, 0x56, 0xc3, 0x7e, - 0xa4, 0x19, 0x0d, 0xb0, 0x6a, 0xd7, 0x5d, 0xe0, 0x3a, 0x87, - 0x93, 0x2e, 0xf4, 0x49, 0xdc, 0x61, 0xbb, 0x06, 0x12, 0xaf, - 0x75, 0xc8, 0xf8, 0x45, 0x9f, 0x22, 0x36, 0x8b, 0x51, 0xec, - 0x79, 0xc4, 0x1e, 0xa3, 0xb7, 0x0a, 0xd0, 0x6d, 0xe7, 0x5a, - 0x80, 0x3d, 0x29, 0x94, 0x4e, 0xf3, 0x66, 0xdb, 0x01, 0xbc, - 0xa8, 0x15, 0xcf, 0x72, 0xc6, 0x7b, 0xa1, 0x1c, 0x08, 0xb5, - 0x6f, 0xd2, 0x47, 0xfa, 0x20, 0x9d, 0x89, 0x34, 0xee, 0x53, - 0xd9, 0x64, 0xbe, 0x03, 0x17, 0xaa, 0x70, 0xcd, 0x58, 0xe5, - 0x3f, 0x82, 0x96, 0x2b, 0xf1, 0x4c, 0x84, 0x39, 0xe3, 0x5e, - 0x4a, 0xf7, 0x2d, 0x90, 0x05, 0xb8, 0x62, 0xdf, 0xcb, 0x76, - 0xac, 0x11, 0x9b, 0x26, 0xfc, 0x41, 0x55, 0xe8, 0x32, 0x8f, - 0x1a, 0xa7, 0x7d, 0xc0, 0xd4, 0x69, 0xb3, 0x0e, 0xba, 0x07, - 0xdd, 0x60, 0x74, 0xc9, 0x13, 0xae, 0x3b, 0x86, 0x5c, 0xe1, - 0xf5, 0x48, 0x92, 0x2f, 0xa5, 0x18, 0xc2, 0x7f, 0x6b, 0xd6, - 0x0c, 0xb1, 0x24, 0x99, 0x43, 0xfe, 0xea, 0x57, 0x8d, 0x30, - 0x00, 0xbe, 0x61, 0xdf, 0xc2, 0x7c, 0xa3, 0x1d, 0x99, 0x27, - 0xf8, 0x46, 0x5b, 0xe5, 0x3a, 0x84, 0x2f, 0x91, 0x4e, 0xf0, - 0xed, 0x53, 0x8c, 0x32, 0xb6, 0x08, 0xd7, 0x69, 0x74, 0xca, - 0x15, 0xab, 0x5e, 0xe0, 0x3f, 0x81, 0x9c, 0x22, 0xfd, 0x43, - 0xc7, 0x79, 0xa6, 0x18, 0x05, 0xbb, 0x64, 0xda, 0x71, 0xcf, - 0x10, 0xae, 0xb3, 0x0d, 0xd2, 0x6c, 0xe8, 0x56, 0x89, 0x37, - 0x2a, 0x94, 0x4b, 0xf5, 0xbc, 0x02, 0xdd, 0x63, 0x7e, 0xc0, - 0x1f, 0xa1, 0x25, 0x9b, 0x44, 0xfa, 0xe7, 0x59, 0x86, 0x38, - 0x93, 0x2d, 0xf2, 0x4c, 0x51, 0xef, 0x30, 0x8e, 0x0a, 0xb4, - 0x6b, 0xd5, 0xc8, 0x76, 0xa9, 0x17, 0xe2, 0x5c, 0x83, 0x3d, - 0x20, 0x9e, 0x41, 0xff, 0x7b, 0xc5, 0x1a, 0xa4, 0xb9, 0x07, - 0xd8, 0x66, 0xcd, 0x73, 0xac, 0x12, 0x0f, 0xb1, 0x6e, 0xd0, - 0x54, 0xea, 0x35, 0x8b, 0x96, 0x28, 0xf7, 0x49, 0x65, 0xdb, - 0x04, 0xba, 0xa7, 0x19, 0xc6, 0x78, 0xfc, 0x42, 0x9d, 0x23, - 0x3e, 0x80, 0x5f, 0xe1, 0x4a, 0xf4, 0x2b, 0x95, 0x88, 0x36, - 0xe9, 0x57, 0xd3, 0x6d, 0xb2, 0x0c, 0x11, 0xaf, 0x70, 0xce, - 0x3b, 0x85, 0x5a, 0xe4, 0xf9, 0x47, 0x98, 0x26, 0xa2, 0x1c, - 0xc3, 0x7d, 0x60, 0xde, 0x01, 0xbf, 0x14, 0xaa, 0x75, 0xcb, - 0xd6, 0x68, 0xb7, 0x09, 0x8d, 0x33, 0xec, 0x52, 0x4f, 0xf1, - 0x2e, 0x90, 0xd9, 0x67, 0xb8, 0x06, 0x1b, 0xa5, 0x7a, 0xc4, - 0x40, 0xfe, 0x21, 0x9f, 0x82, 0x3c, 0xe3, 0x5d, 0xf6, 0x48, - 0x97, 0x29, 0x34, 0x8a, 0x55, 0xeb, 0x6f, 0xd1, 0x0e, 0xb0, - 0xad, 0x13, 0xcc, 0x72, 0x87, 0x39, 0xe6, 0x58, 0x45, 0xfb, - 0x24, 0x9a, 0x1e, 0xa0, 0x7f, 0xc1, 0xdc, 0x62, 0xbd, 0x03, - 0xa8, 0x16, 0xc9, 0x77, 0x6a, 0xd4, 0x0b, 0xb5, 0x31, 0x8f, - 0x50, 0xee, 0xf3, 0x4d, 0x92, 0x2c, 0x00, 0xbf, 0x63, 0xdc, - 0xc6, 0x79, 0xa5, 0x1a, 0x91, 0x2e, 0xf2, 0x4d, 0x57, 0xe8, - 0x34, 0x8b, 0x3f, 0x80, 0x5c, 0xe3, 0xf9, 0x46, 0x9a, 0x25, - 0xae, 0x11, 0xcd, 0x72, 0x68, 0xd7, 0x0b, 0xb4, 0x7e, 0xc1, - 0x1d, 0xa2, 0xb8, 0x07, 0xdb, 0x64, 0xef, 0x50, 0x8c, 0x33, - 0x29, 0x96, 0x4a, 0xf5, 0x41, 0xfe, 0x22, 0x9d, 0x87, 0x38, - 0xe4, 0x5b, 0xd0, 0x6f, 0xb3, 0x0c, 0x16, 0xa9, 0x75, 0xca, - 0xfc, 0x43, 0x9f, 0x20, 0x3a, 0x85, 0x59, 0xe6, 0x6d, 0xd2, - 0x0e, 0xb1, 0xab, 0x14, 0xc8, 0x77, 0xc3, 0x7c, 0xa0, 0x1f, - 0x05, 0xba, 0x66, 0xd9, 0x52, 0xed, 0x31, 0x8e, 0x94, 0x2b, - 0xf7, 0x48, 0x82, 0x3d, 0xe1, 0x5e, 0x44, 0xfb, 0x27, 0x98, - 0x13, 0xac, 0x70, 0xcf, 0xd5, 0x6a, 0xb6, 0x09, 0xbd, 0x02, - 0xde, 0x61, 0x7b, 0xc4, 0x18, 0xa7, 0x2c, 0x93, 0x4f, 0xf0, - 0xea, 0x55, 0x89, 0x36, 0xe5, 0x5a, 0x86, 0x39, 0x23, 0x9c, - 0x40, 0xff, 0x74, 0xcb, 0x17, 0xa8, 0xb2, 0x0d, 0xd1, 0x6e, - 0xda, 0x65, 0xb9, 0x06, 0x1c, 0xa3, 0x7f, 0xc0, 0x4b, 0xf4, - 0x28, 0x97, 0x8d, 0x32, 0xee, 0x51, 0x9b, 0x24, 0xf8, 0x47, - 0x5d, 0xe2, 0x3e, 0x81, 0x0a, 0xb5, 0x69, 0xd6, 0xcc, 0x73, - 0xaf, 0x10, 0xa4, 0x1b, 0xc7, 0x78, 0x62, 0xdd, 0x01, 0xbe, - 0x35, 0x8a, 0x56, 0xe9, 0xf3, 0x4c, 0x90, 0x2f, 0x19, 0xa6, - 0x7a, 0xc5, 0xdf, 0x60, 0xbc, 0x03, 0x88, 0x37, 0xeb, 0x54, - 0x4e, 0xf1, 0x2d, 0x92, 0x26, 0x99, 0x45, 0xfa, 0xe0, 0x5f, - 0x83, 0x3c, 0xb7, 0x08, 0xd4, 0x6b, 0x71, 0xce, 0x12, 0xad, - 0x67, 0xd8, 0x04, 0xbb, 0xa1, 0x1e, 0xc2, 0x7d, 0xf6, 0x49, - 0x95, 0x2a, 0x30, 0x8f, 0x53, 0xec, 0x58, 0xe7, 0x3b, 0x84, - 0x9e, 0x21, 0xfd, 0x42, 0xc9, 0x76, 0xaa, 0x15, 0x0f, 0xb0, - 0x6c, 0xd3, 0x00, 0xc0, 0x9d, 0x5d, 0x27, 0xe7, 0xba, 0x7a, - 0x4e, 0x8e, 0xd3, 0x13, 0x69, 0xa9, 0xf4, 0x34, 0x9c, 0x5c, - 0x01, 0xc1, 0xbb, 0x7b, 0x26, 0xe6, 0xd2, 0x12, 0x4f, 0x8f, - 0xf5, 0x35, 0x68, 0xa8, 0x25, 0xe5, 0xb8, 0x78, 0x02, 0xc2, - 0x9f, 0x5f, 0x6b, 0xab, 0xf6, 0x36, 0x4c, 0x8c, 0xd1, 0x11, - 0xb9, 0x79, 0x24, 0xe4, 0x9e, 0x5e, 0x03, 0xc3, 0xf7, 0x37, - 0x6a, 0xaa, 0xd0, 0x10, 0x4d, 0x8d, 0x4a, 0x8a, 0xd7, 0x17, - 0x6d, 0xad, 0xf0, 0x30, 0x04, 0xc4, 0x99, 0x59, 0x23, 0xe3, - 0xbe, 0x7e, 0xd6, 0x16, 0x4b, 0x8b, 0xf1, 0x31, 0x6c, 0xac, - 0x98, 0x58, 0x05, 0xc5, 0xbf, 0x7f, 0x22, 0xe2, 0x6f, 0xaf, - 0xf2, 0x32, 0x48, 0x88, 0xd5, 0x15, 0x21, 0xe1, 0xbc, 0x7c, - 0x06, 0xc6, 0x9b, 0x5b, 0xf3, 0x33, 0x6e, 0xae, 0xd4, 0x14, - 0x49, 0x89, 0xbd, 0x7d, 0x20, 0xe0, 0x9a, 0x5a, 0x07, 0xc7, - 0x94, 0x54, 0x09, 0xc9, 0xb3, 0x73, 0x2e, 0xee, 0xda, 0x1a, - 0x47, 0x87, 0xfd, 0x3d, 0x60, 0xa0, 0x08, 0xc8, 0x95, 0x55, - 0x2f, 0xef, 0xb2, 0x72, 0x46, 0x86, 0xdb, 0x1b, 0x61, 0xa1, - 0xfc, 0x3c, 0xb1, 0x71, 0x2c, 0xec, 0x96, 0x56, 0x0b, 0xcb, - 0xff, 0x3f, 0x62, 0xa2, 0xd8, 0x18, 0x45, 0x85, 0x2d, 0xed, - 0xb0, 0x70, 0x0a, 0xca, 0x97, 0x57, 0x63, 0xa3, 0xfe, 0x3e, - 0x44, 0x84, 0xd9, 0x19, 0xde, 0x1e, 0x43, 0x83, 0xf9, 0x39, - 0x64, 0xa4, 0x90, 0x50, 0x0d, 0xcd, 0xb7, 0x77, 0x2a, 0xea, - 0x42, 0x82, 0xdf, 0x1f, 0x65, 0xa5, 0xf8, 0x38, 0x0c, 0xcc, - 0x91, 0x51, 0x2b, 0xeb, 0xb6, 0x76, 0xfb, 0x3b, 0x66, 0xa6, - 0xdc, 0x1c, 0x41, 0x81, 0xb5, 0x75, 0x28, 0xe8, 0x92, 0x52, - 0x0f, 0xcf, 0x67, 0xa7, 0xfa, 0x3a, 0x40, 0x80, 0xdd, 0x1d, - 0x29, 0xe9, 0xb4, 0x74, 0x0e, 0xce, 0x93, 0x53, 0x00, 0xc1, - 0x9f, 0x5e, 0x23, 0xe2, 0xbc, 0x7d, 0x46, 0x87, 0xd9, 0x18, - 0x65, 0xa4, 0xfa, 0x3b, 0x8c, 0x4d, 0x13, 0xd2, 0xaf, 0x6e, - 0x30, 0xf1, 0xca, 0x0b, 0x55, 0x94, 0xe9, 0x28, 0x76, 0xb7, - 0x05, 0xc4, 0x9a, 0x5b, 0x26, 0xe7, 0xb9, 0x78, 0x43, 0x82, - 0xdc, 0x1d, 0x60, 0xa1, 0xff, 0x3e, 0x89, 0x48, 0x16, 0xd7, - 0xaa, 0x6b, 0x35, 0xf4, 0xcf, 0x0e, 0x50, 0x91, 0xec, 0x2d, - 0x73, 0xb2, 0x0a, 0xcb, 0x95, 0x54, 0x29, 0xe8, 0xb6, 0x77, - 0x4c, 0x8d, 0xd3, 0x12, 0x6f, 0xae, 0xf0, 0x31, 0x86, 0x47, - 0x19, 0xd8, 0xa5, 0x64, 0x3a, 0xfb, 0xc0, 0x01, 0x5f, 0x9e, - 0xe3, 0x22, 0x7c, 0xbd, 0x0f, 0xce, 0x90, 0x51, 0x2c, 0xed, - 0xb3, 0x72, 0x49, 0x88, 0xd6, 0x17, 0x6a, 0xab, 0xf5, 0x34, - 0x83, 0x42, 0x1c, 0xdd, 0xa0, 0x61, 0x3f, 0xfe, 0xc5, 0x04, - 0x5a, 0x9b, 0xe6, 0x27, 0x79, 0xb8, 0x14, 0xd5, 0x8b, 0x4a, - 0x37, 0xf6, 0xa8, 0x69, 0x52, 0x93, 0xcd, 0x0c, 0x71, 0xb0, - 0xee, 0x2f, 0x98, 0x59, 0x07, 0xc6, 0xbb, 0x7a, 0x24, 0xe5, - 0xde, 0x1f, 0x41, 0x80, 0xfd, 0x3c, 0x62, 0xa3, 0x11, 0xd0, - 0x8e, 0x4f, 0x32, 0xf3, 0xad, 0x6c, 0x57, 0x96, 0xc8, 0x09, - 0x74, 0xb5, 0xeb, 0x2a, 0x9d, 0x5c, 0x02, 0xc3, 0xbe, 0x7f, - 0x21, 0xe0, 0xdb, 0x1a, 0x44, 0x85, 0xf8, 0x39, 0x67, 0xa6, - 0x1e, 0xdf, 0x81, 0x40, 0x3d, 0xfc, 0xa2, 0x63, 0x58, 0x99, - 0xc7, 0x06, 0x7b, 0xba, 0xe4, 0x25, 0x92, 0x53, 0x0d, 0xcc, - 0xb1, 0x70, 0x2e, 0xef, 0xd4, 0x15, 0x4b, 0x8a, 0xf7, 0x36, - 0x68, 0xa9, 0x1b, 0xda, 0x84, 0x45, 0x38, 0xf9, 0xa7, 0x66, - 0x5d, 0x9c, 0xc2, 0x03, 0x7e, 0xbf, 0xe1, 0x20, 0x97, 0x56, - 0x08, 0xc9, 0xb4, 0x75, 0x2b, 0xea, 0xd1, 0x10, 0x4e, 0x8f, - 0xf2, 0x33, 0x6d, 0xac, 0x00, 0xc2, 0x99, 0x5b, 0x2f, 0xed, - 0xb6, 0x74, 0x5e, 0x9c, 0xc7, 0x05, 0x71, 0xb3, 0xe8, 0x2a, - 0xbc, 0x7e, 0x25, 0xe7, 0x93, 0x51, 0x0a, 0xc8, 0xe2, 0x20, - 0x7b, 0xb9, 0xcd, 0x0f, 0x54, 0x96, 0x65, 0xa7, 0xfc, 0x3e, - 0x4a, 0x88, 0xd3, 0x11, 0x3b, 0xf9, 0xa2, 0x60, 0x14, 0xd6, - 0x8d, 0x4f, 0xd9, 0x1b, 0x40, 0x82, 0xf6, 0x34, 0x6f, 0xad, - 0x87, 0x45, 0x1e, 0xdc, 0xa8, 0x6a, 0x31, 0xf3, 0xca, 0x08, - 0x53, 0x91, 0xe5, 0x27, 0x7c, 0xbe, 0x94, 0x56, 0x0d, 0xcf, - 0xbb, 0x79, 0x22, 0xe0, 0x76, 0xb4, 0xef, 0x2d, 0x59, 0x9b, - 0xc0, 0x02, 0x28, 0xea, 0xb1, 0x73, 0x07, 0xc5, 0x9e, 0x5c, - 0xaf, 0x6d, 0x36, 0xf4, 0x80, 0x42, 0x19, 0xdb, 0xf1, 0x33, - 0x68, 0xaa, 0xde, 0x1c, 0x47, 0x85, 0x13, 0xd1, 0x8a, 0x48, - 0x3c, 0xfe, 0xa5, 0x67, 0x4d, 0x8f, 0xd4, 0x16, 0x62, 0xa0, - 0xfb, 0x39, 0x89, 0x4b, 0x10, 0xd2, 0xa6, 0x64, 0x3f, 0xfd, - 0xd7, 0x15, 0x4e, 0x8c, 0xf8, 0x3a, 0x61, 0xa3, 0x35, 0xf7, - 0xac, 0x6e, 0x1a, 0xd8, 0x83, 0x41, 0x6b, 0xa9, 0xf2, 0x30, - 0x44, 0x86, 0xdd, 0x1f, 0xec, 0x2e, 0x75, 0xb7, 0xc3, 0x01, - 0x5a, 0x98, 0xb2, 0x70, 0x2b, 0xe9, 0x9d, 0x5f, 0x04, 0xc6, - 0x50, 0x92, 0xc9, 0x0b, 0x7f, 0xbd, 0xe6, 0x24, 0x0e, 0xcc, - 0x97, 0x55, 0x21, 0xe3, 0xb8, 0x7a, 0x43, 0x81, 0xda, 0x18, - 0x6c, 0xae, 0xf5, 0x37, 0x1d, 0xdf, 0x84, 0x46, 0x32, 0xf0, - 0xab, 0x69, 0xff, 0x3d, 0x66, 0xa4, 0xd0, 0x12, 0x49, 0x8b, - 0xa1, 0x63, 0x38, 0xfa, 0x8e, 0x4c, 0x17, 0xd5, 0x26, 0xe4, - 0xbf, 0x7d, 0x09, 0xcb, 0x90, 0x52, 0x78, 0xba, 0xe1, 0x23, - 0x57, 0x95, 0xce, 0x0c, 0x9a, 0x58, 0x03, 0xc1, 0xb5, 0x77, - 0x2c, 0xee, 0xc4, 0x06, 0x5d, 0x9f, 0xeb, 0x29, 0x72, 0xb0, - 0x00, 0xc3, 0x9b, 0x58, 0x2b, 0xe8, 0xb0, 0x73, 0x56, 0x95, - 0xcd, 0x0e, 0x7d, 0xbe, 0xe6, 0x25, 0xac, 0x6f, 0x37, 0xf4, - 0x87, 0x44, 0x1c, 0xdf, 0xfa, 0x39, 0x61, 0xa2, 0xd1, 0x12, - 0x4a, 0x89, 0x45, 0x86, 0xde, 0x1d, 0x6e, 0xad, 0xf5, 0x36, - 0x13, 0xd0, 0x88, 0x4b, 0x38, 0xfb, 0xa3, 0x60, 0xe9, 0x2a, - 0x72, 0xb1, 0xc2, 0x01, 0x59, 0x9a, 0xbf, 0x7c, 0x24, 0xe7, - 0x94, 0x57, 0x0f, 0xcc, 0x8a, 0x49, 0x11, 0xd2, 0xa1, 0x62, - 0x3a, 0xf9, 0xdc, 0x1f, 0x47, 0x84, 0xf7, 0x34, 0x6c, 0xaf, - 0x26, 0xe5, 0xbd, 0x7e, 0x0d, 0xce, 0x96, 0x55, 0x70, 0xb3, - 0xeb, 0x28, 0x5b, 0x98, 0xc0, 0x03, 0xcf, 0x0c, 0x54, 0x97, - 0xe4, 0x27, 0x7f, 0xbc, 0x99, 0x5a, 0x02, 0xc1, 0xb2, 0x71, - 0x29, 0xea, 0x63, 0xa0, 0xf8, 0x3b, 0x48, 0x8b, 0xd3, 0x10, - 0x35, 0xf6, 0xae, 0x6d, 0x1e, 0xdd, 0x85, 0x46, 0x09, 0xca, - 0x92, 0x51, 0x22, 0xe1, 0xb9, 0x7a, 0x5f, 0x9c, 0xc4, 0x07, - 0x74, 0xb7, 0xef, 0x2c, 0xa5, 0x66, 0x3e, 0xfd, 0x8e, 0x4d, - 0x15, 0xd6, 0xf3, 0x30, 0x68, 0xab, 0xd8, 0x1b, 0x43, 0x80, - 0x4c, 0x8f, 0xd7, 0x14, 0x67, 0xa4, 0xfc, 0x3f, 0x1a, 0xd9, - 0x81, 0x42, 0x31, 0xf2, 0xaa, 0x69, 0xe0, 0x23, 0x7b, 0xb8, - 0xcb, 0x08, 0x50, 0x93, 0xb6, 0x75, 0x2d, 0xee, 0x9d, 0x5e, - 0x06, 0xc5, 0x83, 0x40, 0x18, 0xdb, 0xa8, 0x6b, 0x33, 0xf0, - 0xd5, 0x16, 0x4e, 0x8d, 0xfe, 0x3d, 0x65, 0xa6, 0x2f, 0xec, - 0xb4, 0x77, 0x04, 0xc7, 0x9f, 0x5c, 0x79, 0xba, 0xe2, 0x21, - 0x52, 0x91, 0xc9, 0x0a, 0xc6, 0x05, 0x5d, 0x9e, 0xed, 0x2e, - 0x76, 0xb5, 0x90, 0x53, 0x0b, 0xc8, 0xbb, 0x78, 0x20, 0xe3, - 0x6a, 0xa9, 0xf1, 0x32, 0x41, 0x82, 0xda, 0x19, 0x3c, 0xff, - 0xa7, 0x64, 0x17, 0xd4, 0x8c, 0x4f, 0x00, 0xc4, 0x95, 0x51, - 0x37, 0xf3, 0xa2, 0x66, 0x6e, 0xaa, 0xfb, 0x3f, 0x59, 0x9d, - 0xcc, 0x08, 0xdc, 0x18, 0x49, 0x8d, 0xeb, 0x2f, 0x7e, 0xba, - 0xb2, 0x76, 0x27, 0xe3, 0x85, 0x41, 0x10, 0xd4, 0xa5, 0x61, - 0x30, 0xf4, 0x92, 0x56, 0x07, 0xc3, 0xcb, 0x0f, 0x5e, 0x9a, - 0xfc, 0x38, 0x69, 0xad, 0x79, 0xbd, 0xec, 0x28, 0x4e, 0x8a, - 0xdb, 0x1f, 0x17, 0xd3, 0x82, 0x46, 0x20, 0xe4, 0xb5, 0x71, - 0x57, 0x93, 0xc2, 0x06, 0x60, 0xa4, 0xf5, 0x31, 0x39, 0xfd, - 0xac, 0x68, 0x0e, 0xca, 0x9b, 0x5f, 0x8b, 0x4f, 0x1e, 0xda, - 0xbc, 0x78, 0x29, 0xed, 0xe5, 0x21, 0x70, 0xb4, 0xd2, 0x16, - 0x47, 0x83, 0xf2, 0x36, 0x67, 0xa3, 0xc5, 0x01, 0x50, 0x94, - 0x9c, 0x58, 0x09, 0xcd, 0xab, 0x6f, 0x3e, 0xfa, 0x2e, 0xea, - 0xbb, 0x7f, 0x19, 0xdd, 0x8c, 0x48, 0x40, 0x84, 0xd5, 0x11, - 0x77, 0xb3, 0xe2, 0x26, 0xae, 0x6a, 0x3b, 0xff, 0x99, 0x5d, - 0x0c, 0xc8, 0xc0, 0x04, 0x55, 0x91, 0xf7, 0x33, 0x62, 0xa6, - 0x72, 0xb6, 0xe7, 0x23, 0x45, 0x81, 0xd0, 0x14, 0x1c, 0xd8, - 0x89, 0x4d, 0x2b, 0xef, 0xbe, 0x7a, 0x0b, 0xcf, 0x9e, 0x5a, - 0x3c, 0xf8, 0xa9, 0x6d, 0x65, 0xa1, 0xf0, 0x34, 0x52, 0x96, - 0xc7, 0x03, 0xd7, 0x13, 0x42, 0x86, 0xe0, 0x24, 0x75, 0xb1, - 0xb9, 0x7d, 0x2c, 0xe8, 0x8e, 0x4a, 0x1b, 0xdf, 0xf9, 0x3d, - 0x6c, 0xa8, 0xce, 0x0a, 0x5b, 0x9f, 0x97, 0x53, 0x02, 0xc6, - 0xa0, 0x64, 0x35, 0xf1, 0x25, 0xe1, 0xb0, 0x74, 0x12, 0xd6, - 0x87, 0x43, 0x4b, 0x8f, 0xde, 0x1a, 0x7c, 0xb8, 0xe9, 0x2d, - 0x5c, 0x98, 0xc9, 0x0d, 0x6b, 0xaf, 0xfe, 0x3a, 0x32, 0xf6, - 0xa7, 0x63, 0x05, 0xc1, 0x90, 0x54, 0x80, 0x44, 0x15, 0xd1, - 0xb7, 0x73, 0x22, 0xe6, 0xee, 0x2a, 0x7b, 0xbf, 0xd9, 0x1d, - 0x4c, 0x88, 0x00, 0xc5, 0x97, 0x52, 0x33, 0xf6, 0xa4, 0x61, - 0x66, 0xa3, 0xf1, 0x34, 0x55, 0x90, 0xc2, 0x07, 0xcc, 0x09, - 0x5b, 0x9e, 0xff, 0x3a, 0x68, 0xad, 0xaa, 0x6f, 0x3d, 0xf8, - 0x99, 0x5c, 0x0e, 0xcb, 0x85, 0x40, 0x12, 0xd7, 0xb6, 0x73, - 0x21, 0xe4, 0xe3, 0x26, 0x74, 0xb1, 0xd0, 0x15, 0x47, 0x82, - 0x49, 0x8c, 0xde, 0x1b, 0x7a, 0xbf, 0xed, 0x28, 0x2f, 0xea, - 0xb8, 0x7d, 0x1c, 0xd9, 0x8b, 0x4e, 0x17, 0xd2, 0x80, 0x45, - 0x24, 0xe1, 0xb3, 0x76, 0x71, 0xb4, 0xe6, 0x23, 0x42, 0x87, - 0xd5, 0x10, 0xdb, 0x1e, 0x4c, 0x89, 0xe8, 0x2d, 0x7f, 0xba, - 0xbd, 0x78, 0x2a, 0xef, 0x8e, 0x4b, 0x19, 0xdc, 0x92, 0x57, - 0x05, 0xc0, 0xa1, 0x64, 0x36, 0xf3, 0xf4, 0x31, 0x63, 0xa6, - 0xc7, 0x02, 0x50, 0x95, 0x5e, 0x9b, 0xc9, 0x0c, 0x6d, 0xa8, - 0xfa, 0x3f, 0x38, 0xfd, 0xaf, 0x6a, 0x0b, 0xce, 0x9c, 0x59, - 0x2e, 0xeb, 0xb9, 0x7c, 0x1d, 0xd8, 0x8a, 0x4f, 0x48, 0x8d, - 0xdf, 0x1a, 0x7b, 0xbe, 0xec, 0x29, 0xe2, 0x27, 0x75, 0xb0, - 0xd1, 0x14, 0x46, 0x83, 0x84, 0x41, 0x13, 0xd6, 0xb7, 0x72, - 0x20, 0xe5, 0xab, 0x6e, 0x3c, 0xf9, 0x98, 0x5d, 0x0f, 0xca, - 0xcd, 0x08, 0x5a, 0x9f, 0xfe, 0x3b, 0x69, 0xac, 0x67, 0xa2, - 0xf0, 0x35, 0x54, 0x91, 0xc3, 0x06, 0x01, 0xc4, 0x96, 0x53, - 0x32, 0xf7, 0xa5, 0x60, 0x39, 0xfc, 0xae, 0x6b, 0x0a, 0xcf, - 0x9d, 0x58, 0x5f, 0x9a, 0xc8, 0x0d, 0x6c, 0xa9, 0xfb, 0x3e, - 0xf5, 0x30, 0x62, 0xa7, 0xc6, 0x03, 0x51, 0x94, 0x93, 0x56, - 0x04, 0xc1, 0xa0, 0x65, 0x37, 0xf2, 0xbc, 0x79, 0x2b, 0xee, - 0x8f, 0x4a, 0x18, 0xdd, 0xda, 0x1f, 0x4d, 0x88, 0xe9, 0x2c, - 0x7e, 0xbb, 0x70, 0xb5, 0xe7, 0x22, 0x43, 0x86, 0xd4, 0x11, - 0x16, 0xd3, 0x81, 0x44, 0x25, 0xe0, 0xb2, 0x77, 0x00, 0xc6, - 0x91, 0x57, 0x3f, 0xf9, 0xae, 0x68, 0x7e, 0xb8, 0xef, 0x29, - 0x41, 0x87, 0xd0, 0x16, 0xfc, 0x3a, 0x6d, 0xab, 0xc3, 0x05, - 0x52, 0x94, 0x82, 0x44, 0x13, 0xd5, 0xbd, 0x7b, 0x2c, 0xea, - 0xe5, 0x23, 0x74, 0xb2, 0xda, 0x1c, 0x4b, 0x8d, 0x9b, 0x5d, - 0x0a, 0xcc, 0xa4, 0x62, 0x35, 0xf3, 0x19, 0xdf, 0x88, 0x4e, - 0x26, 0xe0, 0xb7, 0x71, 0x67, 0xa1, 0xf6, 0x30, 0x58, 0x9e, - 0xc9, 0x0f, 0xd7, 0x11, 0x46, 0x80, 0xe8, 0x2e, 0x79, 0xbf, - 0xa9, 0x6f, 0x38, 0xfe, 0x96, 0x50, 0x07, 0xc1, 0x2b, 0xed, - 0xba, 0x7c, 0x14, 0xd2, 0x85, 0x43, 0x55, 0x93, 0xc4, 0x02, - 0x6a, 0xac, 0xfb, 0x3d, 0x32, 0xf4, 0xa3, 0x65, 0x0d, 0xcb, - 0x9c, 0x5a, 0x4c, 0x8a, 0xdd, 0x1b, 0x73, 0xb5, 0xe2, 0x24, - 0xce, 0x08, 0x5f, 0x99, 0xf1, 0x37, 0x60, 0xa6, 0xb0, 0x76, - 0x21, 0xe7, 0x8f, 0x49, 0x1e, 0xd8, 0xb3, 0x75, 0x22, 0xe4, - 0x8c, 0x4a, 0x1d, 0xdb, 0xcd, 0x0b, 0x5c, 0x9a, 0xf2, 0x34, - 0x63, 0xa5, 0x4f, 0x89, 0xde, 0x18, 0x70, 0xb6, 0xe1, 0x27, - 0x31, 0xf7, 0xa0, 0x66, 0x0e, 0xc8, 0x9f, 0x59, 0x56, 0x90, - 0xc7, 0x01, 0x69, 0xaf, 0xf8, 0x3e, 0x28, 0xee, 0xb9, 0x7f, - 0x17, 0xd1, 0x86, 0x40, 0xaa, 0x6c, 0x3b, 0xfd, 0x95, 0x53, - 0x04, 0xc2, 0xd4, 0x12, 0x45, 0x83, 0xeb, 0x2d, 0x7a, 0xbc, - 0x64, 0xa2, 0xf5, 0x33, 0x5b, 0x9d, 0xca, 0x0c, 0x1a, 0xdc, - 0x8b, 0x4d, 0x25, 0xe3, 0xb4, 0x72, 0x98, 0x5e, 0x09, 0xcf, - 0xa7, 0x61, 0x36, 0xf0, 0xe6, 0x20, 0x77, 0xb1, 0xd9, 0x1f, - 0x48, 0x8e, 0x81, 0x47, 0x10, 0xd6, 0xbe, 0x78, 0x2f, 0xe9, - 0xff, 0x39, 0x6e, 0xa8, 0xc0, 0x06, 0x51, 0x97, 0x7d, 0xbb, - 0xec, 0x2a, 0x42, 0x84, 0xd3, 0x15, 0x03, 0xc5, 0x92, 0x54, - 0x3c, 0xfa, 0xad, 0x6b, 0x00, 0xc7, 0x93, 0x54, 0x3b, 0xfc, - 0xa8, 0x6f, 0x76, 0xb1, 0xe5, 0x22, 0x4d, 0x8a, 0xde, 0x19, - 0xec, 0x2b, 0x7f, 0xb8, 0xd7, 0x10, 0x44, 0x83, 0x9a, 0x5d, - 0x09, 0xce, 0xa1, 0x66, 0x32, 0xf5, 0xc5, 0x02, 0x56, 0x91, - 0xfe, 0x39, 0x6d, 0xaa, 0xb3, 0x74, 0x20, 0xe7, 0x88, 0x4f, - 0x1b, 0xdc, 0x29, 0xee, 0xba, 0x7d, 0x12, 0xd5, 0x81, 0x46, - 0x5f, 0x98, 0xcc, 0x0b, 0x64, 0xa3, 0xf7, 0x30, 0x97, 0x50, - 0x04, 0xc3, 0xac, 0x6b, 0x3f, 0xf8, 0xe1, 0x26, 0x72, 0xb5, - 0xda, 0x1d, 0x49, 0x8e, 0x7b, 0xbc, 0xe8, 0x2f, 0x40, 0x87, - 0xd3, 0x14, 0x0d, 0xca, 0x9e, 0x59, 0x36, 0xf1, 0xa5, 0x62, - 0x52, 0x95, 0xc1, 0x06, 0x69, 0xae, 0xfa, 0x3d, 0x24, 0xe3, - 0xb7, 0x70, 0x1f, 0xd8, 0x8c, 0x4b, 0xbe, 0x79, 0x2d, 0xea, - 0x85, 0x42, 0x16, 0xd1, 0xc8, 0x0f, 0x5b, 0x9c, 0xf3, 0x34, - 0x60, 0xa7, 0x33, 0xf4, 0xa0, 0x67, 0x08, 0xcf, 0x9b, 0x5c, - 0x45, 0x82, 0xd6, 0x11, 0x7e, 0xb9, 0xed, 0x2a, 0xdf, 0x18, - 0x4c, 0x8b, 0xe4, 0x23, 0x77, 0xb0, 0xa9, 0x6e, 0x3a, 0xfd, - 0x92, 0x55, 0x01, 0xc6, 0xf6, 0x31, 0x65, 0xa2, 0xcd, 0x0a, - 0x5e, 0x99, 0x80, 0x47, 0x13, 0xd4, 0xbb, 0x7c, 0x28, 0xef, - 0x1a, 0xdd, 0x89, 0x4e, 0x21, 0xe6, 0xb2, 0x75, 0x6c, 0xab, - 0xff, 0x38, 0x57, 0x90, 0xc4, 0x03, 0xa4, 0x63, 0x37, 0xf0, - 0x9f, 0x58, 0x0c, 0xcb, 0xd2, 0x15, 0x41, 0x86, 0xe9, 0x2e, - 0x7a, 0xbd, 0x48, 0x8f, 0xdb, 0x1c, 0x73, 0xb4, 0xe0, 0x27, - 0x3e, 0xf9, 0xad, 0x6a, 0x05, 0xc2, 0x96, 0x51, 0x61, 0xa6, - 0xf2, 0x35, 0x5a, 0x9d, 0xc9, 0x0e, 0x17, 0xd0, 0x84, 0x43, - 0x2c, 0xeb, 0xbf, 0x78, 0x8d, 0x4a, 0x1e, 0xd9, 0xb6, 0x71, - 0x25, 0xe2, 0xfb, 0x3c, 0x68, 0xaf, 0xc0, 0x07, 0x53, 0x94, - 0x00, 0xc8, 0x8d, 0x45, 0x07, 0xcf, 0x8a, 0x42, 0x0e, 0xc6, - 0x83, 0x4b, 0x09, 0xc1, 0x84, 0x4c, 0x1c, 0xd4, 0x91, 0x59, - 0x1b, 0xd3, 0x96, 0x5e, 0x12, 0xda, 0x9f, 0x57, 0x15, 0xdd, - 0x98, 0x50, 0x38, 0xf0, 0xb5, 0x7d, 0x3f, 0xf7, 0xb2, 0x7a, - 0x36, 0xfe, 0xbb, 0x73, 0x31, 0xf9, 0xbc, 0x74, 0x24, 0xec, - 0xa9, 0x61, 0x23, 0xeb, 0xae, 0x66, 0x2a, 0xe2, 0xa7, 0x6f, - 0x2d, 0xe5, 0xa0, 0x68, 0x70, 0xb8, 0xfd, 0x35, 0x77, 0xbf, - 0xfa, 0x32, 0x7e, 0xb6, 0xf3, 0x3b, 0x79, 0xb1, 0xf4, 0x3c, - 0x6c, 0xa4, 0xe1, 0x29, 0x6b, 0xa3, 0xe6, 0x2e, 0x62, 0xaa, - 0xef, 0x27, 0x65, 0xad, 0xe8, 0x20, 0x48, 0x80, 0xc5, 0x0d, - 0x4f, 0x87, 0xc2, 0x0a, 0x46, 0x8e, 0xcb, 0x03, 0x41, 0x89, - 0xcc, 0x04, 0x54, 0x9c, 0xd9, 0x11, 0x53, 0x9b, 0xde, 0x16, - 0x5a, 0x92, 0xd7, 0x1f, 0x5d, 0x95, 0xd0, 0x18, 0xe0, 0x28, - 0x6d, 0xa5, 0xe7, 0x2f, 0x6a, 0xa2, 0xee, 0x26, 0x63, 0xab, - 0xe9, 0x21, 0x64, 0xac, 0xfc, 0x34, 0x71, 0xb9, 0xfb, 0x33, - 0x76, 0xbe, 0xf2, 0x3a, 0x7f, 0xb7, 0xf5, 0x3d, 0x78, 0xb0, - 0xd8, 0x10, 0x55, 0x9d, 0xdf, 0x17, 0x52, 0x9a, 0xd6, 0x1e, - 0x5b, 0x93, 0xd1, 0x19, 0x5c, 0x94, 0xc4, 0x0c, 0x49, 0x81, - 0xc3, 0x0b, 0x4e, 0x86, 0xca, 0x02, 0x47, 0x8f, 0xcd, 0x05, - 0x40, 0x88, 0x90, 0x58, 0x1d, 0xd5, 0x97, 0x5f, 0x1a, 0xd2, - 0x9e, 0x56, 0x13, 0xdb, 0x99, 0x51, 0x14, 0xdc, 0x8c, 0x44, - 0x01, 0xc9, 0x8b, 0x43, 0x06, 0xce, 0x82, 0x4a, 0x0f, 0xc7, - 0x85, 0x4d, 0x08, 0xc0, 0xa8, 0x60, 0x25, 0xed, 0xaf, 0x67, - 0x22, 0xea, 0xa6, 0x6e, 0x2b, 0xe3, 0xa1, 0x69, 0x2c, 0xe4, - 0xb4, 0x7c, 0x39, 0xf1, 0xb3, 0x7b, 0x3e, 0xf6, 0xba, 0x72, - 0x37, 0xff, 0xbd, 0x75, 0x30, 0xf8, 0x00, 0xc9, 0x8f, 0x46, - 0x03, 0xca, 0x8c, 0x45, 0x06, 0xcf, 0x89, 0x40, 0x05, 0xcc, - 0x8a, 0x43, 0x0c, 0xc5, 0x83, 0x4a, 0x0f, 0xc6, 0x80, 0x49, - 0x0a, 0xc3, 0x85, 0x4c, 0x09, 0xc0, 0x86, 0x4f, 0x18, 0xd1, - 0x97, 0x5e, 0x1b, 0xd2, 0x94, 0x5d, 0x1e, 0xd7, 0x91, 0x58, - 0x1d, 0xd4, 0x92, 0x5b, 0x14, 0xdd, 0x9b, 0x52, 0x17, 0xde, - 0x98, 0x51, 0x12, 0xdb, 0x9d, 0x54, 0x11, 0xd8, 0x9e, 0x57, - 0x30, 0xf9, 0xbf, 0x76, 0x33, 0xfa, 0xbc, 0x75, 0x36, 0xff, - 0xb9, 0x70, 0x35, 0xfc, 0xba, 0x73, 0x3c, 0xf5, 0xb3, 0x7a, - 0x3f, 0xf6, 0xb0, 0x79, 0x3a, 0xf3, 0xb5, 0x7c, 0x39, 0xf0, - 0xb6, 0x7f, 0x28, 0xe1, 0xa7, 0x6e, 0x2b, 0xe2, 0xa4, 0x6d, - 0x2e, 0xe7, 0xa1, 0x68, 0x2d, 0xe4, 0xa2, 0x6b, 0x24, 0xed, - 0xab, 0x62, 0x27, 0xee, 0xa8, 0x61, 0x22, 0xeb, 0xad, 0x64, - 0x21, 0xe8, 0xae, 0x67, 0x60, 0xa9, 0xef, 0x26, 0x63, 0xaa, - 0xec, 0x25, 0x66, 0xaf, 0xe9, 0x20, 0x65, 0xac, 0xea, 0x23, - 0x6c, 0xa5, 0xe3, 0x2a, 0x6f, 0xa6, 0xe0, 0x29, 0x6a, 0xa3, - 0xe5, 0x2c, 0x69, 0xa0, 0xe6, 0x2f, 0x78, 0xb1, 0xf7, 0x3e, - 0x7b, 0xb2, 0xf4, 0x3d, 0x7e, 0xb7, 0xf1, 0x38, 0x7d, 0xb4, - 0xf2, 0x3b, 0x74, 0xbd, 0xfb, 0x32, 0x77, 0xbe, 0xf8, 0x31, - 0x72, 0xbb, 0xfd, 0x34, 0x71, 0xb8, 0xfe, 0x37, 0x50, 0x99, - 0xdf, 0x16, 0x53, 0x9a, 0xdc, 0x15, 0x56, 0x9f, 0xd9, 0x10, - 0x55, 0x9c, 0xda, 0x13, 0x5c, 0x95, 0xd3, 0x1a, 0x5f, 0x96, - 0xd0, 0x19, 0x5a, 0x93, 0xd5, 0x1c, 0x59, 0x90, 0xd6, 0x1f, - 0x48, 0x81, 0xc7, 0x0e, 0x4b, 0x82, 0xc4, 0x0d, 0x4e, 0x87, - 0xc1, 0x08, 0x4d, 0x84, 0xc2, 0x0b, 0x44, 0x8d, 0xcb, 0x02, - 0x47, 0x8e, 0xc8, 0x01, 0x42, 0x8b, 0xcd, 0x04, 0x41, 0x88, - 0xce, 0x07, 0x00, 0xca, 0x89, 0x43, 0x0f, 0xc5, 0x86, 0x4c, - 0x1e, 0xd4, 0x97, 0x5d, 0x11, 0xdb, 0x98, 0x52, 0x3c, 0xf6, - 0xb5, 0x7f, 0x33, 0xf9, 0xba, 0x70, 0x22, 0xe8, 0xab, 0x61, - 0x2d, 0xe7, 0xa4, 0x6e, 0x78, 0xb2, 0xf1, 0x3b, 0x77, 0xbd, - 0xfe, 0x34, 0x66, 0xac, 0xef, 0x25, 0x69, 0xa3, 0xe0, 0x2a, - 0x44, 0x8e, 0xcd, 0x07, 0x4b, 0x81, 0xc2, 0x08, 0x5a, 0x90, - 0xd3, 0x19, 0x55, 0x9f, 0xdc, 0x16, 0xf0, 0x3a, 0x79, 0xb3, - 0xff, 0x35, 0x76, 0xbc, 0xee, 0x24, 0x67, 0xad, 0xe1, 0x2b, - 0x68, 0xa2, 0xcc, 0x06, 0x45, 0x8f, 0xc3, 0x09, 0x4a, 0x80, - 0xd2, 0x18, 0x5b, 0x91, 0xdd, 0x17, 0x54, 0x9e, 0x88, 0x42, - 0x01, 0xcb, 0x87, 0x4d, 0x0e, 0xc4, 0x96, 0x5c, 0x1f, 0xd5, - 0x99, 0x53, 0x10, 0xda, 0xb4, 0x7e, 0x3d, 0xf7, 0xbb, 0x71, - 0x32, 0xf8, 0xaa, 0x60, 0x23, 0xe9, 0xa5, 0x6f, 0x2c, 0xe6, - 0xfd, 0x37, 0x74, 0xbe, 0xf2, 0x38, 0x7b, 0xb1, 0xe3, 0x29, - 0x6a, 0xa0, 0xec, 0x26, 0x65, 0xaf, 0xc1, 0x0b, 0x48, 0x82, - 0xce, 0x04, 0x47, 0x8d, 0xdf, 0x15, 0x56, 0x9c, 0xd0, 0x1a, - 0x59, 0x93, 0x85, 0x4f, 0x0c, 0xc6, 0x8a, 0x40, 0x03, 0xc9, - 0x9b, 0x51, 0x12, 0xd8, 0x94, 0x5e, 0x1d, 0xd7, 0xb9, 0x73, - 0x30, 0xfa, 0xb6, 0x7c, 0x3f, 0xf5, 0xa7, 0x6d, 0x2e, 0xe4, - 0xa8, 0x62, 0x21, 0xeb, 0x0d, 0xc7, 0x84, 0x4e, 0x02, 0xc8, - 0x8b, 0x41, 0x13, 0xd9, 0x9a, 0x50, 0x1c, 0xd6, 0x95, 0x5f, - 0x31, 0xfb, 0xb8, 0x72, 0x3e, 0xf4, 0xb7, 0x7d, 0x2f, 0xe5, - 0xa6, 0x6c, 0x20, 0xea, 0xa9, 0x63, 0x75, 0xbf, 0xfc, 0x36, - 0x7a, 0xb0, 0xf3, 0x39, 0x6b, 0xa1, 0xe2, 0x28, 0x64, 0xae, - 0xed, 0x27, 0x49, 0x83, 0xc0, 0x0a, 0x46, 0x8c, 0xcf, 0x05, - 0x57, 0x9d, 0xde, 0x14, 0x58, 0x92, 0xd1, 0x1b, 0x00, 0xcb, - 0x8b, 0x40, 0x0b, 0xc0, 0x80, 0x4b, 0x16, 0xdd, 0x9d, 0x56, - 0x1d, 0xd6, 0x96, 0x5d, 0x2c, 0xe7, 0xa7, 0x6c, 0x27, 0xec, - 0xac, 0x67, 0x3a, 0xf1, 0xb1, 0x7a, 0x31, 0xfa, 0xba, 0x71, - 0x58, 0x93, 0xd3, 0x18, 0x53, 0x98, 0xd8, 0x13, 0x4e, 0x85, - 0xc5, 0x0e, 0x45, 0x8e, 0xce, 0x05, 0x74, 0xbf, 0xff, 0x34, - 0x7f, 0xb4, 0xf4, 0x3f, 0x62, 0xa9, 0xe9, 0x22, 0x69, 0xa2, - 0xe2, 0x29, 0xb0, 0x7b, 0x3b, 0xf0, 0xbb, 0x70, 0x30, 0xfb, - 0xa6, 0x6d, 0x2d, 0xe6, 0xad, 0x66, 0x26, 0xed, 0x9c, 0x57, - 0x17, 0xdc, 0x97, 0x5c, 0x1c, 0xd7, 0x8a, 0x41, 0x01, 0xca, - 0x81, 0x4a, 0x0a, 0xc1, 0xe8, 0x23, 0x63, 0xa8, 0xe3, 0x28, - 0x68, 0xa3, 0xfe, 0x35, 0x75, 0xbe, 0xf5, 0x3e, 0x7e, 0xb5, - 0xc4, 0x0f, 0x4f, 0x84, 0xcf, 0x04, 0x44, 0x8f, 0xd2, 0x19, - 0x59, 0x92, 0xd9, 0x12, 0x52, 0x99, 0x7d, 0xb6, 0xf6, 0x3d, - 0x76, 0xbd, 0xfd, 0x36, 0x6b, 0xa0, 0xe0, 0x2b, 0x60, 0xab, - 0xeb, 0x20, 0x51, 0x9a, 0xda, 0x11, 0x5a, 0x91, 0xd1, 0x1a, - 0x47, 0x8c, 0xcc, 0x07, 0x4c, 0x87, 0xc7, 0x0c, 0x25, 0xee, - 0xae, 0x65, 0x2e, 0xe5, 0xa5, 0x6e, 0x33, 0xf8, 0xb8, 0x73, - 0x38, 0xf3, 0xb3, 0x78, 0x09, 0xc2, 0x82, 0x49, 0x02, 0xc9, - 0x89, 0x42, 0x1f, 0xd4, 0x94, 0x5f, 0x14, 0xdf, 0x9f, 0x54, - 0xcd, 0x06, 0x46, 0x8d, 0xc6, 0x0d, 0x4d, 0x86, 0xdb, 0x10, - 0x50, 0x9b, 0xd0, 0x1b, 0x5b, 0x90, 0xe1, 0x2a, 0x6a, 0xa1, - 0xea, 0x21, 0x61, 0xaa, 0xf7, 0x3c, 0x7c, 0xb7, 0xfc, 0x37, - 0x77, 0xbc, 0x95, 0x5e, 0x1e, 0xd5, 0x9e, 0x55, 0x15, 0xde, - 0x83, 0x48, 0x08, 0xc3, 0x88, 0x43, 0x03, 0xc8, 0xb9, 0x72, - 0x32, 0xf9, 0xb2, 0x79, 0x39, 0xf2, 0xaf, 0x64, 0x24, 0xef, - 0xa4, 0x6f, 0x2f, 0xe4, 0x00, 0xcc, 0x85, 0x49, 0x17, 0xdb, - 0x92, 0x5e, 0x2e, 0xe2, 0xab, 0x67, 0x39, 0xf5, 0xbc, 0x70, - 0x5c, 0x90, 0xd9, 0x15, 0x4b, 0x87, 0xce, 0x02, 0x72, 0xbe, - 0xf7, 0x3b, 0x65, 0xa9, 0xe0, 0x2c, 0xb8, 0x74, 0x3d, 0xf1, - 0xaf, 0x63, 0x2a, 0xe6, 0x96, 0x5a, 0x13, 0xdf, 0x81, 0x4d, - 0x04, 0xc8, 0xe4, 0x28, 0x61, 0xad, 0xf3, 0x3f, 0x76, 0xba, - 0xca, 0x06, 0x4f, 0x83, 0xdd, 0x11, 0x58, 0x94, 0x6d, 0xa1, - 0xe8, 0x24, 0x7a, 0xb6, 0xff, 0x33, 0x43, 0x8f, 0xc6, 0x0a, - 0x54, 0x98, 0xd1, 0x1d, 0x31, 0xfd, 0xb4, 0x78, 0x26, 0xea, - 0xa3, 0x6f, 0x1f, 0xd3, 0x9a, 0x56, 0x08, 0xc4, 0x8d, 0x41, - 0xd5, 0x19, 0x50, 0x9c, 0xc2, 0x0e, 0x47, 0x8b, 0xfb, 0x37, - 0x7e, 0xb2, 0xec, 0x20, 0x69, 0xa5, 0x89, 0x45, 0x0c, 0xc0, - 0x9e, 0x52, 0x1b, 0xd7, 0xa7, 0x6b, 0x22, 0xee, 0xb0, 0x7c, - 0x35, 0xf9, 0xda, 0x16, 0x5f, 0x93, 0xcd, 0x01, 0x48, 0x84, - 0xf4, 0x38, 0x71, 0xbd, 0xe3, 0x2f, 0x66, 0xaa, 0x86, 0x4a, - 0x03, 0xcf, 0x91, 0x5d, 0x14, 0xd8, 0xa8, 0x64, 0x2d, 0xe1, - 0xbf, 0x73, 0x3a, 0xf6, 0x62, 0xae, 0xe7, 0x2b, 0x75, 0xb9, - 0xf0, 0x3c, 0x4c, 0x80, 0xc9, 0x05, 0x5b, 0x97, 0xde, 0x12, - 0x3e, 0xf2, 0xbb, 0x77, 0x29, 0xe5, 0xac, 0x60, 0x10, 0xdc, - 0x95, 0x59, 0x07, 0xcb, 0x82, 0x4e, 0xb7, 0x7b, 0x32, 0xfe, - 0xa0, 0x6c, 0x25, 0xe9, 0x99, 0x55, 0x1c, 0xd0, 0x8e, 0x42, - 0x0b, 0xc7, 0xeb, 0x27, 0x6e, 0xa2, 0xfc, 0x30, 0x79, 0xb5, - 0xc5, 0x09, 0x40, 0x8c, 0xd2, 0x1e, 0x57, 0x9b, 0x0f, 0xc3, - 0x8a, 0x46, 0x18, 0xd4, 0x9d, 0x51, 0x21, 0xed, 0xa4, 0x68, - 0x36, 0xfa, 0xb3, 0x7f, 0x53, 0x9f, 0xd6, 0x1a, 0x44, 0x88, - 0xc1, 0x0d, 0x7d, 0xb1, 0xf8, 0x34, 0x6a, 0xa6, 0xef, 0x23, - 0x00, 0xcd, 0x87, 0x4a, 0x13, 0xde, 0x94, 0x59, 0x26, 0xeb, - 0xa1, 0x6c, 0x35, 0xf8, 0xb2, 0x7f, 0x4c, 0x81, 0xcb, 0x06, - 0x5f, 0x92, 0xd8, 0x15, 0x6a, 0xa7, 0xed, 0x20, 0x79, 0xb4, - 0xfe, 0x33, 0x98, 0x55, 0x1f, 0xd2, 0x8b, 0x46, 0x0c, 0xc1, - 0xbe, 0x73, 0x39, 0xf4, 0xad, 0x60, 0x2a, 0xe7, 0xd4, 0x19, - 0x53, 0x9e, 0xc7, 0x0a, 0x40, 0x8d, 0xf2, 0x3f, 0x75, 0xb8, - 0xe1, 0x2c, 0x66, 0xab, 0x2d, 0xe0, 0xaa, 0x67, 0x3e, 0xf3, - 0xb9, 0x74, 0x0b, 0xc6, 0x8c, 0x41, 0x18, 0xd5, 0x9f, 0x52, - 0x61, 0xac, 0xe6, 0x2b, 0x72, 0xbf, 0xf5, 0x38, 0x47, 0x8a, - 0xc0, 0x0d, 0x54, 0x99, 0xd3, 0x1e, 0xb5, 0x78, 0x32, 0xff, - 0xa6, 0x6b, 0x21, 0xec, 0x93, 0x5e, 0x14, 0xd9, 0x80, 0x4d, - 0x07, 0xca, 0xf9, 0x34, 0x7e, 0xb3, 0xea, 0x27, 0x6d, 0xa0, - 0xdf, 0x12, 0x58, 0x95, 0xcc, 0x01, 0x4b, 0x86, 0x5a, 0x97, - 0xdd, 0x10, 0x49, 0x84, 0xce, 0x03, 0x7c, 0xb1, 0xfb, 0x36, - 0x6f, 0xa2, 0xe8, 0x25, 0x16, 0xdb, 0x91, 0x5c, 0x05, 0xc8, - 0x82, 0x4f, 0x30, 0xfd, 0xb7, 0x7a, 0x23, 0xee, 0xa4, 0x69, - 0xc2, 0x0f, 0x45, 0x88, 0xd1, 0x1c, 0x56, 0x9b, 0xe4, 0x29, - 0x63, 0xae, 0xf7, 0x3a, 0x70, 0xbd, 0x8e, 0x43, 0x09, 0xc4, - 0x9d, 0x50, 0x1a, 0xd7, 0xa8, 0x65, 0x2f, 0xe2, 0xbb, 0x76, - 0x3c, 0xf1, 0x77, 0xba, 0xf0, 0x3d, 0x64, 0xa9, 0xe3, 0x2e, - 0x51, 0x9c, 0xd6, 0x1b, 0x42, 0x8f, 0xc5, 0x08, 0x3b, 0xf6, - 0xbc, 0x71, 0x28, 0xe5, 0xaf, 0x62, 0x1d, 0xd0, 0x9a, 0x57, - 0x0e, 0xc3, 0x89, 0x44, 0xef, 0x22, 0x68, 0xa5, 0xfc, 0x31, - 0x7b, 0xb6, 0xc9, 0x04, 0x4e, 0x83, 0xda, 0x17, 0x5d, 0x90, - 0xa3, 0x6e, 0x24, 0xe9, 0xb0, 0x7d, 0x37, 0xfa, 0x85, 0x48, - 0x02, 0xcf, 0x96, 0x5b, 0x11, 0xdc, 0x00, 0xce, 0x81, 0x4f, - 0x1f, 0xd1, 0x9e, 0x50, 0x3e, 0xf0, 0xbf, 0x71, 0x21, 0xef, - 0xa0, 0x6e, 0x7c, 0xb2, 0xfd, 0x33, 0x63, 0xad, 0xe2, 0x2c, - 0x42, 0x8c, 0xc3, 0x0d, 0x5d, 0x93, 0xdc, 0x12, 0xf8, 0x36, - 0x79, 0xb7, 0xe7, 0x29, 0x66, 0xa8, 0xc6, 0x08, 0x47, 0x89, - 0xd9, 0x17, 0x58, 0x96, 0x84, 0x4a, 0x05, 0xcb, 0x9b, 0x55, - 0x1a, 0xd4, 0xba, 0x74, 0x3b, 0xf5, 0xa5, 0x6b, 0x24, 0xea, - 0xed, 0x23, 0x6c, 0xa2, 0xf2, 0x3c, 0x73, 0xbd, 0xd3, 0x1d, - 0x52, 0x9c, 0xcc, 0x02, 0x4d, 0x83, 0x91, 0x5f, 0x10, 0xde, - 0x8e, 0x40, 0x0f, 0xc1, 0xaf, 0x61, 0x2e, 0xe0, 0xb0, 0x7e, - 0x31, 0xff, 0x15, 0xdb, 0x94, 0x5a, 0x0a, 0xc4, 0x8b, 0x45, - 0x2b, 0xe5, 0xaa, 0x64, 0x34, 0xfa, 0xb5, 0x7b, 0x69, 0xa7, - 0xe8, 0x26, 0x76, 0xb8, 0xf7, 0x39, 0x57, 0x99, 0xd6, 0x18, - 0x48, 0x86, 0xc9, 0x07, 0xc7, 0x09, 0x46, 0x88, 0xd8, 0x16, - 0x59, 0x97, 0xf9, 0x37, 0x78, 0xb6, 0xe6, 0x28, 0x67, 0xa9, - 0xbb, 0x75, 0x3a, 0xf4, 0xa4, 0x6a, 0x25, 0xeb, 0x85, 0x4b, - 0x04, 0xca, 0x9a, 0x54, 0x1b, 0xd5, 0x3f, 0xf1, 0xbe, 0x70, - 0x20, 0xee, 0xa1, 0x6f, 0x01, 0xcf, 0x80, 0x4e, 0x1e, 0xd0, - 0x9f, 0x51, 0x43, 0x8d, 0xc2, 0x0c, 0x5c, 0x92, 0xdd, 0x13, - 0x7d, 0xb3, 0xfc, 0x32, 0x62, 0xac, 0xe3, 0x2d, 0x2a, 0xe4, - 0xab, 0x65, 0x35, 0xfb, 0xb4, 0x7a, 0x14, 0xda, 0x95, 0x5b, - 0x0b, 0xc5, 0x8a, 0x44, 0x56, 0x98, 0xd7, 0x19, 0x49, 0x87, - 0xc8, 0x06, 0x68, 0xa6, 0xe9, 0x27, 0x77, 0xb9, 0xf6, 0x38, - 0xd2, 0x1c, 0x53, 0x9d, 0xcd, 0x03, 0x4c, 0x82, 0xec, 0x22, - 0x6d, 0xa3, 0xf3, 0x3d, 0x72, 0xbc, 0xae, 0x60, 0x2f, 0xe1, - 0xb1, 0x7f, 0x30, 0xfe, 0x90, 0x5e, 0x11, 0xdf, 0x8f, 0x41, - 0x0e, 0xc0, 0x00, 0xcf, 0x83, 0x4c, 0x1b, 0xd4, 0x98, 0x57, - 0x36, 0xf9, 0xb5, 0x7a, 0x2d, 0xe2, 0xae, 0x61, 0x6c, 0xa3, - 0xef, 0x20, 0x77, 0xb8, 0xf4, 0x3b, 0x5a, 0x95, 0xd9, 0x16, - 0x41, 0x8e, 0xc2, 0x0d, 0xd8, 0x17, 0x5b, 0x94, 0xc3, 0x0c, - 0x40, 0x8f, 0xee, 0x21, 0x6d, 0xa2, 0xf5, 0x3a, 0x76, 0xb9, - 0xb4, 0x7b, 0x37, 0xf8, 0xaf, 0x60, 0x2c, 0xe3, 0x82, 0x4d, - 0x01, 0xce, 0x99, 0x56, 0x1a, 0xd5, 0xad, 0x62, 0x2e, 0xe1, - 0xb6, 0x79, 0x35, 0xfa, 0x9b, 0x54, 0x18, 0xd7, 0x80, 0x4f, - 0x03, 0xcc, 0xc1, 0x0e, 0x42, 0x8d, 0xda, 0x15, 0x59, 0x96, - 0xf7, 0x38, 0x74, 0xbb, 0xec, 0x23, 0x6f, 0xa0, 0x75, 0xba, - 0xf6, 0x39, 0x6e, 0xa1, 0xed, 0x22, 0x43, 0x8c, 0xc0, 0x0f, - 0x58, 0x97, 0xdb, 0x14, 0x19, 0xd6, 0x9a, 0x55, 0x02, 0xcd, - 0x81, 0x4e, 0x2f, 0xe0, 0xac, 0x63, 0x34, 0xfb, 0xb7, 0x78, - 0x47, 0x88, 0xc4, 0x0b, 0x5c, 0x93, 0xdf, 0x10, 0x71, 0xbe, - 0xf2, 0x3d, 0x6a, 0xa5, 0xe9, 0x26, 0x2b, 0xe4, 0xa8, 0x67, - 0x30, 0xff, 0xb3, 0x7c, 0x1d, 0xd2, 0x9e, 0x51, 0x06, 0xc9, - 0x85, 0x4a, 0x9f, 0x50, 0x1c, 0xd3, 0x84, 0x4b, 0x07, 0xc8, - 0xa9, 0x66, 0x2a, 0xe5, 0xb2, 0x7d, 0x31, 0xfe, 0xf3, 0x3c, - 0x70, 0xbf, 0xe8, 0x27, 0x6b, 0xa4, 0xc5, 0x0a, 0x46, 0x89, - 0xde, 0x11, 0x5d, 0x92, 0xea, 0x25, 0x69, 0xa6, 0xf1, 0x3e, - 0x72, 0xbd, 0xdc, 0x13, 0x5f, 0x90, 0xc7, 0x08, 0x44, 0x8b, - 0x86, 0x49, 0x05, 0xca, 0x9d, 0x52, 0x1e, 0xd1, 0xb0, 0x7f, - 0x33, 0xfc, 0xab, 0x64, 0x28, 0xe7, 0x32, 0xfd, 0xb1, 0x7e, - 0x29, 0xe6, 0xaa, 0x65, 0x04, 0xcb, 0x87, 0x48, 0x1f, 0xd0, - 0x9c, 0x53, 0x5e, 0x91, 0xdd, 0x12, 0x45, 0x8a, 0xc6, 0x09, - 0x68, 0xa7, 0xeb, 0x24, 0x73, 0xbc, 0xf0, 0x3f, 0x00, 0xd0, - 0xbd, 0x6d, 0x67, 0xb7, 0xda, 0x0a, 0xce, 0x1e, 0x73, 0xa3, - 0xa9, 0x79, 0x14, 0xc4, 0x81, 0x51, 0x3c, 0xec, 0xe6, 0x36, - 0x5b, 0x8b, 0x4f, 0x9f, 0xf2, 0x22, 0x28, 0xf8, 0x95, 0x45, - 0x1f, 0xcf, 0xa2, 0x72, 0x78, 0xa8, 0xc5, 0x15, 0xd1, 0x01, - 0x6c, 0xbc, 0xb6, 0x66, 0x0b, 0xdb, 0x9e, 0x4e, 0x23, 0xf3, - 0xf9, 0x29, 0x44, 0x94, 0x50, 0x80, 0xed, 0x3d, 0x37, 0xe7, - 0x8a, 0x5a, 0x3e, 0xee, 0x83, 0x53, 0x59, 0x89, 0xe4, 0x34, - 0xf0, 0x20, 0x4d, 0x9d, 0x97, 0x47, 0x2a, 0xfa, 0xbf, 0x6f, - 0x02, 0xd2, 0xd8, 0x08, 0x65, 0xb5, 0x71, 0xa1, 0xcc, 0x1c, - 0x16, 0xc6, 0xab, 0x7b, 0x21, 0xf1, 0x9c, 0x4c, 0x46, 0x96, - 0xfb, 0x2b, 0xef, 0x3f, 0x52, 0x82, 0x88, 0x58, 0x35, 0xe5, - 0xa0, 0x70, 0x1d, 0xcd, 0xc7, 0x17, 0x7a, 0xaa, 0x6e, 0xbe, - 0xd3, 0x03, 0x09, 0xd9, 0xb4, 0x64, 0x7c, 0xac, 0xc1, 0x11, - 0x1b, 0xcb, 0xa6, 0x76, 0xb2, 0x62, 0x0f, 0xdf, 0xd5, 0x05, - 0x68, 0xb8, 0xfd, 0x2d, 0x40, 0x90, 0x9a, 0x4a, 0x27, 0xf7, - 0x33, 0xe3, 0x8e, 0x5e, 0x54, 0x84, 0xe9, 0x39, 0x63, 0xb3, - 0xde, 0x0e, 0x04, 0xd4, 0xb9, 0x69, 0xad, 0x7d, 0x10, 0xc0, - 0xca, 0x1a, 0x77, 0xa7, 0xe2, 0x32, 0x5f, 0x8f, 0x85, 0x55, - 0x38, 0xe8, 0x2c, 0xfc, 0x91, 0x41, 0x4b, 0x9b, 0xf6, 0x26, - 0x42, 0x92, 0xff, 0x2f, 0x25, 0xf5, 0x98, 0x48, 0x8c, 0x5c, - 0x31, 0xe1, 0xeb, 0x3b, 0x56, 0x86, 0xc3, 0x13, 0x7e, 0xae, - 0xa4, 0x74, 0x19, 0xc9, 0x0d, 0xdd, 0xb0, 0x60, 0x6a, 0xba, - 0xd7, 0x07, 0x5d, 0x8d, 0xe0, 0x30, 0x3a, 0xea, 0x87, 0x57, - 0x93, 0x43, 0x2e, 0xfe, 0xf4, 0x24, 0x49, 0x99, 0xdc, 0x0c, - 0x61, 0xb1, 0xbb, 0x6b, 0x06, 0xd6, 0x12, 0xc2, 0xaf, 0x7f, - 0x75, 0xa5, 0xc8, 0x18, 0x00, 0xd1, 0xbf, 0x6e, 0x63, 0xb2, - 0xdc, 0x0d, 0xc6, 0x17, 0x79, 0xa8, 0xa5, 0x74, 0x1a, 0xcb, - 0x91, 0x40, 0x2e, 0xff, 0xf2, 0x23, 0x4d, 0x9c, 0x57, 0x86, - 0xe8, 0x39, 0x34, 0xe5, 0x8b, 0x5a, 0x3f, 0xee, 0x80, 0x51, - 0x5c, 0x8d, 0xe3, 0x32, 0xf9, 0x28, 0x46, 0x97, 0x9a, 0x4b, - 0x25, 0xf4, 0xae, 0x7f, 0x11, 0xc0, 0xcd, 0x1c, 0x72, 0xa3, - 0x68, 0xb9, 0xd7, 0x06, 0x0b, 0xda, 0xb4, 0x65, 0x7e, 0xaf, - 0xc1, 0x10, 0x1d, 0xcc, 0xa2, 0x73, 0xb8, 0x69, 0x07, 0xd6, - 0xdb, 0x0a, 0x64, 0xb5, 0xef, 0x3e, 0x50, 0x81, 0x8c, 0x5d, - 0x33, 0xe2, 0x29, 0xf8, 0x96, 0x47, 0x4a, 0x9b, 0xf5, 0x24, - 0x41, 0x90, 0xfe, 0x2f, 0x22, 0xf3, 0x9d, 0x4c, 0x87, 0x56, - 0x38, 0xe9, 0xe4, 0x35, 0x5b, 0x8a, 0xd0, 0x01, 0x6f, 0xbe, - 0xb3, 0x62, 0x0c, 0xdd, 0x16, 0xc7, 0xa9, 0x78, 0x75, 0xa4, - 0xca, 0x1b, 0xfc, 0x2d, 0x43, 0x92, 0x9f, 0x4e, 0x20, 0xf1, - 0x3a, 0xeb, 0x85, 0x54, 0x59, 0x88, 0xe6, 0x37, 0x6d, 0xbc, - 0xd2, 0x03, 0x0e, 0xdf, 0xb1, 0x60, 0xab, 0x7a, 0x14, 0xc5, - 0xc8, 0x19, 0x77, 0xa6, 0xc3, 0x12, 0x7c, 0xad, 0xa0, 0x71, - 0x1f, 0xce, 0x05, 0xd4, 0xba, 0x6b, 0x66, 0xb7, 0xd9, 0x08, - 0x52, 0x83, 0xed, 0x3c, 0x31, 0xe0, 0x8e, 0x5f, 0x94, 0x45, - 0x2b, 0xfa, 0xf7, 0x26, 0x48, 0x99, 0x82, 0x53, 0x3d, 0xec, - 0xe1, 0x30, 0x5e, 0x8f, 0x44, 0x95, 0xfb, 0x2a, 0x27, 0xf6, - 0x98, 0x49, 0x13, 0xc2, 0xac, 0x7d, 0x70, 0xa1, 0xcf, 0x1e, - 0xd5, 0x04, 0x6a, 0xbb, 0xb6, 0x67, 0x09, 0xd8, 0xbd, 0x6c, - 0x02, 0xd3, 0xde, 0x0f, 0x61, 0xb0, 0x7b, 0xaa, 0xc4, 0x15, - 0x18, 0xc9, 0xa7, 0x76, 0x2c, 0xfd, 0x93, 0x42, 0x4f, 0x9e, - 0xf0, 0x21, 0xea, 0x3b, 0x55, 0x84, 0x89, 0x58, 0x36, 0xe7, - 0x00, 0xd2, 0xb9, 0x6b, 0x6f, 0xbd, 0xd6, 0x04, 0xde, 0x0c, - 0x67, 0xb5, 0xb1, 0x63, 0x08, 0xda, 0xa1, 0x73, 0x18, 0xca, - 0xce, 0x1c, 0x77, 0xa5, 0x7f, 0xad, 0xc6, 0x14, 0x10, 0xc2, - 0xa9, 0x7b, 0x5f, 0x8d, 0xe6, 0x34, 0x30, 0xe2, 0x89, 0x5b, - 0x81, 0x53, 0x38, 0xea, 0xee, 0x3c, 0x57, 0x85, 0xfe, 0x2c, - 0x47, 0x95, 0x91, 0x43, 0x28, 0xfa, 0x20, 0xf2, 0x99, 0x4b, - 0x4f, 0x9d, 0xf6, 0x24, 0xbe, 0x6c, 0x07, 0xd5, 0xd1, 0x03, - 0x68, 0xba, 0x60, 0xb2, 0xd9, 0x0b, 0x0f, 0xdd, 0xb6, 0x64, - 0x1f, 0xcd, 0xa6, 0x74, 0x70, 0xa2, 0xc9, 0x1b, 0xc1, 0x13, - 0x78, 0xaa, 0xae, 0x7c, 0x17, 0xc5, 0xe1, 0x33, 0x58, 0x8a, - 0x8e, 0x5c, 0x37, 0xe5, 0x3f, 0xed, 0x86, 0x54, 0x50, 0x82, - 0xe9, 0x3b, 0x40, 0x92, 0xf9, 0x2b, 0x2f, 0xfd, 0x96, 0x44, - 0x9e, 0x4c, 0x27, 0xf5, 0xf1, 0x23, 0x48, 0x9a, 0x61, 0xb3, - 0xd8, 0x0a, 0x0e, 0xdc, 0xb7, 0x65, 0xbf, 0x6d, 0x06, 0xd4, - 0xd0, 0x02, 0x69, 0xbb, 0xc0, 0x12, 0x79, 0xab, 0xaf, 0x7d, - 0x16, 0xc4, 0x1e, 0xcc, 0xa7, 0x75, 0x71, 0xa3, 0xc8, 0x1a, - 0x3e, 0xec, 0x87, 0x55, 0x51, 0x83, 0xe8, 0x3a, 0xe0, 0x32, - 0x59, 0x8b, 0x8f, 0x5d, 0x36, 0xe4, 0x9f, 0x4d, 0x26, 0xf4, - 0xf0, 0x22, 0x49, 0x9b, 0x41, 0x93, 0xf8, 0x2a, 0x2e, 0xfc, - 0x97, 0x45, 0xdf, 0x0d, 0x66, 0xb4, 0xb0, 0x62, 0x09, 0xdb, - 0x01, 0xd3, 0xb8, 0x6a, 0x6e, 0xbc, 0xd7, 0x05, 0x7e, 0xac, - 0xc7, 0x15, 0x11, 0xc3, 0xa8, 0x7a, 0xa0, 0x72, 0x19, 0xcb, - 0xcf, 0x1d, 0x76, 0xa4, 0x80, 0x52, 0x39, 0xeb, 0xef, 0x3d, - 0x56, 0x84, 0x5e, 0x8c, 0xe7, 0x35, 0x31, 0xe3, 0x88, 0x5a, - 0x21, 0xf3, 0x98, 0x4a, 0x4e, 0x9c, 0xf7, 0x25, 0xff, 0x2d, - 0x46, 0x94, 0x90, 0x42, 0x29, 0xfb, 0x00, 0xd3, 0xbb, 0x68, - 0x6b, 0xb8, 0xd0, 0x03, 0xd6, 0x05, 0x6d, 0xbe, 0xbd, 0x6e, - 0x06, 0xd5, 0xb1, 0x62, 0x0a, 0xd9, 0xda, 0x09, 0x61, 0xb2, - 0x67, 0xb4, 0xdc, 0x0f, 0x0c, 0xdf, 0xb7, 0x64, 0x7f, 0xac, - 0xc4, 0x17, 0x14, 0xc7, 0xaf, 0x7c, 0xa9, 0x7a, 0x12, 0xc1, - 0xc2, 0x11, 0x79, 0xaa, 0xce, 0x1d, 0x75, 0xa6, 0xa5, 0x76, - 0x1e, 0xcd, 0x18, 0xcb, 0xa3, 0x70, 0x73, 0xa0, 0xc8, 0x1b, - 0xfe, 0x2d, 0x45, 0x96, 0x95, 0x46, 0x2e, 0xfd, 0x28, 0xfb, - 0x93, 0x40, 0x43, 0x90, 0xf8, 0x2b, 0x4f, 0x9c, 0xf4, 0x27, - 0x24, 0xf7, 0x9f, 0x4c, 0x99, 0x4a, 0x22, 0xf1, 0xf2, 0x21, - 0x49, 0x9a, 0x81, 0x52, 0x3a, 0xe9, 0xea, 0x39, 0x51, 0x82, - 0x57, 0x84, 0xec, 0x3f, 0x3c, 0xef, 0x87, 0x54, 0x30, 0xe3, - 0x8b, 0x58, 0x5b, 0x88, 0xe0, 0x33, 0xe6, 0x35, 0x5d, 0x8e, - 0x8d, 0x5e, 0x36, 0xe5, 0xe1, 0x32, 0x5a, 0x89, 0x8a, 0x59, - 0x31, 0xe2, 0x37, 0xe4, 0x8c, 0x5f, 0x5c, 0x8f, 0xe7, 0x34, - 0x50, 0x83, 0xeb, 0x38, 0x3b, 0xe8, 0x80, 0x53, 0x86, 0x55, - 0x3d, 0xee, 0xed, 0x3e, 0x56, 0x85, 0x9e, 0x4d, 0x25, 0xf6, - 0xf5, 0x26, 0x4e, 0x9d, 0x48, 0x9b, 0xf3, 0x20, 0x23, 0xf0, - 0x98, 0x4b, 0x2f, 0xfc, 0x94, 0x47, 0x44, 0x97, 0xff, 0x2c, - 0xf9, 0x2a, 0x42, 0x91, 0x92, 0x41, 0x29, 0xfa, 0x1f, 0xcc, - 0xa4, 0x77, 0x74, 0xa7, 0xcf, 0x1c, 0xc9, 0x1a, 0x72, 0xa1, - 0xa2, 0x71, 0x19, 0xca, 0xae, 0x7d, 0x15, 0xc6, 0xc5, 0x16, - 0x7e, 0xad, 0x78, 0xab, 0xc3, 0x10, 0x13, 0xc0, 0xa8, 0x7b, - 0x60, 0xb3, 0xdb, 0x08, 0x0b, 0xd8, 0xb0, 0x63, 0xb6, 0x65, - 0x0d, 0xde, 0xdd, 0x0e, 0x66, 0xb5, 0xd1, 0x02, 0x6a, 0xb9, - 0xba, 0x69, 0x01, 0xd2, 0x07, 0xd4, 0xbc, 0x6f, 0x6c, 0xbf, - 0xd7, 0x04, 0x00, 0xd4, 0xb5, 0x61, 0x77, 0xa3, 0xc2, 0x16, - 0xee, 0x3a, 0x5b, 0x8f, 0x99, 0x4d, 0x2c, 0xf8, 0xc1, 0x15, - 0x74, 0xa0, 0xb6, 0x62, 0x03, 0xd7, 0x2f, 0xfb, 0x9a, 0x4e, - 0x58, 0x8c, 0xed, 0x39, 0x9f, 0x4b, 0x2a, 0xfe, 0xe8, 0x3c, - 0x5d, 0x89, 0x71, 0xa5, 0xc4, 0x10, 0x06, 0xd2, 0xb3, 0x67, - 0x5e, 0x8a, 0xeb, 0x3f, 0x29, 0xfd, 0x9c, 0x48, 0xb0, 0x64, - 0x05, 0xd1, 0xc7, 0x13, 0x72, 0xa6, 0x23, 0xf7, 0x96, 0x42, - 0x54, 0x80, 0xe1, 0x35, 0xcd, 0x19, 0x78, 0xac, 0xba, 0x6e, - 0x0f, 0xdb, 0xe2, 0x36, 0x57, 0x83, 0x95, 0x41, 0x20, 0xf4, - 0x0c, 0xd8, 0xb9, 0x6d, 0x7b, 0xaf, 0xce, 0x1a, 0xbc, 0x68, - 0x09, 0xdd, 0xcb, 0x1f, 0x7e, 0xaa, 0x52, 0x86, 0xe7, 0x33, - 0x25, 0xf1, 0x90, 0x44, 0x7d, 0xa9, 0xc8, 0x1c, 0x0a, 0xde, - 0xbf, 0x6b, 0x93, 0x47, 0x26, 0xf2, 0xe4, 0x30, 0x51, 0x85, - 0x46, 0x92, 0xf3, 0x27, 0x31, 0xe5, 0x84, 0x50, 0xa8, 0x7c, - 0x1d, 0xc9, 0xdf, 0x0b, 0x6a, 0xbe, 0x87, 0x53, 0x32, 0xe6, - 0xf0, 0x24, 0x45, 0x91, 0x69, 0xbd, 0xdc, 0x08, 0x1e, 0xca, - 0xab, 0x7f, 0xd9, 0x0d, 0x6c, 0xb8, 0xae, 0x7a, 0x1b, 0xcf, - 0x37, 0xe3, 0x82, 0x56, 0x40, 0x94, 0xf5, 0x21, 0x18, 0xcc, - 0xad, 0x79, 0x6f, 0xbb, 0xda, 0x0e, 0xf6, 0x22, 0x43, 0x97, - 0x81, 0x55, 0x34, 0xe0, 0x65, 0xb1, 0xd0, 0x04, 0x12, 0xc6, - 0xa7, 0x73, 0x8b, 0x5f, 0x3e, 0xea, 0xfc, 0x28, 0x49, 0x9d, - 0xa4, 0x70, 0x11, 0xc5, 0xd3, 0x07, 0x66, 0xb2, 0x4a, 0x9e, - 0xff, 0x2b, 0x3d, 0xe9, 0x88, 0x5c, 0xfa, 0x2e, 0x4f, 0x9b, - 0x8d, 0x59, 0x38, 0xec, 0x14, 0xc0, 0xa1, 0x75, 0x63, 0xb7, - 0xd6, 0x02, 0x3b, 0xef, 0x8e, 0x5a, 0x4c, 0x98, 0xf9, 0x2d, - 0xd5, 0x01, 0x60, 0xb4, 0xa2, 0x76, 0x17, 0xc3, 0x00, 0xd5, - 0xb7, 0x62, 0x73, 0xa6, 0xc4, 0x11, 0xe6, 0x33, 0x51, 0x84, - 0x95, 0x40, 0x22, 0xf7, 0xd1, 0x04, 0x66, 0xb3, 0xa2, 0x77, - 0x15, 0xc0, 0x37, 0xe2, 0x80, 0x55, 0x44, 0x91, 0xf3, 0x26, - 0xbf, 0x6a, 0x08, 0xdd, 0xcc, 0x19, 0x7b, 0xae, 0x59, 0x8c, - 0xee, 0x3b, 0x2a, 0xff, 0x9d, 0x48, 0x6e, 0xbb, 0xd9, 0x0c, - 0x1d, 0xc8, 0xaa, 0x7f, 0x88, 0x5d, 0x3f, 0xea, 0xfb, 0x2e, - 0x4c, 0x99, 0x63, 0xb6, 0xd4, 0x01, 0x10, 0xc5, 0xa7, 0x72, - 0x85, 0x50, 0x32, 0xe7, 0xf6, 0x23, 0x41, 0x94, 0xb2, 0x67, - 0x05, 0xd0, 0xc1, 0x14, 0x76, 0xa3, 0x54, 0x81, 0xe3, 0x36, - 0x27, 0xf2, 0x90, 0x45, 0xdc, 0x09, 0x6b, 0xbe, 0xaf, 0x7a, - 0x18, 0xcd, 0x3a, 0xef, 0x8d, 0x58, 0x49, 0x9c, 0xfe, 0x2b, - 0x0d, 0xd8, 0xba, 0x6f, 0x7e, 0xab, 0xc9, 0x1c, 0xeb, 0x3e, - 0x5c, 0x89, 0x98, 0x4d, 0x2f, 0xfa, 0xc6, 0x13, 0x71, 0xa4, - 0xb5, 0x60, 0x02, 0xd7, 0x20, 0xf5, 0x97, 0x42, 0x53, 0x86, - 0xe4, 0x31, 0x17, 0xc2, 0xa0, 0x75, 0x64, 0xb1, 0xd3, 0x06, - 0xf1, 0x24, 0x46, 0x93, 0x82, 0x57, 0x35, 0xe0, 0x79, 0xac, - 0xce, 0x1b, 0x0a, 0xdf, 0xbd, 0x68, 0x9f, 0x4a, 0x28, 0xfd, - 0xec, 0x39, 0x5b, 0x8e, 0xa8, 0x7d, 0x1f, 0xca, 0xdb, 0x0e, - 0x6c, 0xb9, 0x4e, 0x9b, 0xf9, 0x2c, 0x3d, 0xe8, 0x8a, 0x5f, - 0xa5, 0x70, 0x12, 0xc7, 0xd6, 0x03, 0x61, 0xb4, 0x43, 0x96, - 0xf4, 0x21, 0x30, 0xe5, 0x87, 0x52, 0x74, 0xa1, 0xc3, 0x16, - 0x07, 0xd2, 0xb0, 0x65, 0x92, 0x47, 0x25, 0xf0, 0xe1, 0x34, - 0x56, 0x83, 0x1a, 0xcf, 0xad, 0x78, 0x69, 0xbc, 0xde, 0x0b, - 0xfc, 0x29, 0x4b, 0x9e, 0x8f, 0x5a, 0x38, 0xed, 0xcb, 0x1e, - 0x7c, 0xa9, 0xb8, 0x6d, 0x0f, 0xda, 0x2d, 0xf8, 0x9a, 0x4f, - 0x5e, 0x8b, 0xe9, 0x3c, 0x00, 0xd6, 0xb1, 0x67, 0x7f, 0xa9, - 0xce, 0x18, 0xfe, 0x28, 0x4f, 0x99, 0x81, 0x57, 0x30, 0xe6, - 0xe1, 0x37, 0x50, 0x86, 0x9e, 0x48, 0x2f, 0xf9, 0x1f, 0xc9, - 0xae, 0x78, 0x60, 0xb6, 0xd1, 0x07, 0xdf, 0x09, 0x6e, 0xb8, - 0xa0, 0x76, 0x11, 0xc7, 0x21, 0xf7, 0x90, 0x46, 0x5e, 0x88, - 0xef, 0x39, 0x3e, 0xe8, 0x8f, 0x59, 0x41, 0x97, 0xf0, 0x26, - 0xc0, 0x16, 0x71, 0xa7, 0xbf, 0x69, 0x0e, 0xd8, 0xa3, 0x75, - 0x12, 0xc4, 0xdc, 0x0a, 0x6d, 0xbb, 0x5d, 0x8b, 0xec, 0x3a, - 0x22, 0xf4, 0x93, 0x45, 0x42, 0x94, 0xf3, 0x25, 0x3d, 0xeb, - 0x8c, 0x5a, 0xbc, 0x6a, 0x0d, 0xdb, 0xc3, 0x15, 0x72, 0xa4, - 0x7c, 0xaa, 0xcd, 0x1b, 0x03, 0xd5, 0xb2, 0x64, 0x82, 0x54, - 0x33, 0xe5, 0xfd, 0x2b, 0x4c, 0x9a, 0x9d, 0x4b, 0x2c, 0xfa, - 0xe2, 0x34, 0x53, 0x85, 0x63, 0xb5, 0xd2, 0x04, 0x1c, 0xca, - 0xad, 0x7b, 0x5b, 0x8d, 0xea, 0x3c, 0x24, 0xf2, 0x95, 0x43, - 0xa5, 0x73, 0x14, 0xc2, 0xda, 0x0c, 0x6b, 0xbd, 0xba, 0x6c, - 0x0b, 0xdd, 0xc5, 0x13, 0x74, 0xa2, 0x44, 0x92, 0xf5, 0x23, - 0x3b, 0xed, 0x8a, 0x5c, 0x84, 0x52, 0x35, 0xe3, 0xfb, 0x2d, - 0x4a, 0x9c, 0x7a, 0xac, 0xcb, 0x1d, 0x05, 0xd3, 0xb4, 0x62, - 0x65, 0xb3, 0xd4, 0x02, 0x1a, 0xcc, 0xab, 0x7d, 0x9b, 0x4d, - 0x2a, 0xfc, 0xe4, 0x32, 0x55, 0x83, 0xf8, 0x2e, 0x49, 0x9f, - 0x87, 0x51, 0x36, 0xe0, 0x06, 0xd0, 0xb7, 0x61, 0x79, 0xaf, - 0xc8, 0x1e, 0x19, 0xcf, 0xa8, 0x7e, 0x66, 0xb0, 0xd7, 0x01, - 0xe7, 0x31, 0x56, 0x80, 0x98, 0x4e, 0x29, 0xff, 0x27, 0xf1, - 0x96, 0x40, 0x58, 0x8e, 0xe9, 0x3f, 0xd9, 0x0f, 0x68, 0xbe, - 0xa6, 0x70, 0x17, 0xc1, 0xc6, 0x10, 0x77, 0xa1, 0xb9, 0x6f, - 0x08, 0xde, 0x38, 0xee, 0x89, 0x5f, 0x47, 0x91, 0xf6, 0x20, - 0x00, 0xd7, 0xb3, 0x64, 0x7b, 0xac, 0xc8, 0x1f, 0xf6, 0x21, - 0x45, 0x92, 0x8d, 0x5a, 0x3e, 0xe9, 0xf1, 0x26, 0x42, 0x95, - 0x8a, 0x5d, 0x39, 0xee, 0x07, 0xd0, 0xb4, 0x63, 0x7c, 0xab, - 0xcf, 0x18, 0xff, 0x28, 0x4c, 0x9b, 0x84, 0x53, 0x37, 0xe0, - 0x09, 0xde, 0xba, 0x6d, 0x72, 0xa5, 0xc1, 0x16, 0x0e, 0xd9, - 0xbd, 0x6a, 0x75, 0xa2, 0xc6, 0x11, 0xf8, 0x2f, 0x4b, 0x9c, - 0x83, 0x54, 0x30, 0xe7, 0xe3, 0x34, 0x50, 0x87, 0x98, 0x4f, - 0x2b, 0xfc, 0x15, 0xc2, 0xa6, 0x71, 0x6e, 0xb9, 0xdd, 0x0a, - 0x12, 0xc5, 0xa1, 0x76, 0x69, 0xbe, 0xda, 0x0d, 0xe4, 0x33, - 0x57, 0x80, 0x9f, 0x48, 0x2c, 0xfb, 0x1c, 0xcb, 0xaf, 0x78, - 0x67, 0xb0, 0xd4, 0x03, 0xea, 0x3d, 0x59, 0x8e, 0x91, 0x46, - 0x22, 0xf5, 0xed, 0x3a, 0x5e, 0x89, 0x96, 0x41, 0x25, 0xf2, - 0x1b, 0xcc, 0xa8, 0x7f, 0x60, 0xb7, 0xd3, 0x04, 0xdb, 0x0c, - 0x68, 0xbf, 0xa0, 0x77, 0x13, 0xc4, 0x2d, 0xfa, 0x9e, 0x49, - 0x56, 0x81, 0xe5, 0x32, 0x2a, 0xfd, 0x99, 0x4e, 0x51, 0x86, - 0xe2, 0x35, 0xdc, 0x0b, 0x6f, 0xb8, 0xa7, 0x70, 0x14, 0xc3, - 0x24, 0xf3, 0x97, 0x40, 0x5f, 0x88, 0xec, 0x3b, 0xd2, 0x05, - 0x61, 0xb6, 0xa9, 0x7e, 0x1a, 0xcd, 0xd5, 0x02, 0x66, 0xb1, - 0xae, 0x79, 0x1d, 0xca, 0x23, 0xf4, 0x90, 0x47, 0x58, 0x8f, - 0xeb, 0x3c, 0x38, 0xef, 0x8b, 0x5c, 0x43, 0x94, 0xf0, 0x27, - 0xce, 0x19, 0x7d, 0xaa, 0xb5, 0x62, 0x06, 0xd1, 0xc9, 0x1e, - 0x7a, 0xad, 0xb2, 0x65, 0x01, 0xd6, 0x3f, 0xe8, 0x8c, 0x5b, - 0x44, 0x93, 0xf7, 0x20, 0xc7, 0x10, 0x74, 0xa3, 0xbc, 0x6b, - 0x0f, 0xd8, 0x31, 0xe6, 0x82, 0x55, 0x4a, 0x9d, 0xf9, 0x2e, - 0x36, 0xe1, 0x85, 0x52, 0x4d, 0x9a, 0xfe, 0x29, 0xc0, 0x17, - 0x73, 0xa4, 0xbb, 0x6c, 0x08, 0xdf, 0x00, 0xd8, 0xad, 0x75, - 0x47, 0x9f, 0xea, 0x32, 0x8e, 0x56, 0x23, 0xfb, 0xc9, 0x11, - 0x64, 0xbc, 0x01, 0xd9, 0xac, 0x74, 0x46, 0x9e, 0xeb, 0x33, - 0x8f, 0x57, 0x22, 0xfa, 0xc8, 0x10, 0x65, 0xbd, 0x02, 0xda, - 0xaf, 0x77, 0x45, 0x9d, 0xe8, 0x30, 0x8c, 0x54, 0x21, 0xf9, - 0xcb, 0x13, 0x66, 0xbe, 0x03, 0xdb, 0xae, 0x76, 0x44, 0x9c, - 0xe9, 0x31, 0x8d, 0x55, 0x20, 0xf8, 0xca, 0x12, 0x67, 0xbf, - 0x04, 0xdc, 0xa9, 0x71, 0x43, 0x9b, 0xee, 0x36, 0x8a, 0x52, - 0x27, 0xff, 0xcd, 0x15, 0x60, 0xb8, 0x05, 0xdd, 0xa8, 0x70, - 0x42, 0x9a, 0xef, 0x37, 0x8b, 0x53, 0x26, 0xfe, 0xcc, 0x14, - 0x61, 0xb9, 0x06, 0xde, 0xab, 0x73, 0x41, 0x99, 0xec, 0x34, - 0x88, 0x50, 0x25, 0xfd, 0xcf, 0x17, 0x62, 0xba, 0x07, 0xdf, - 0xaa, 0x72, 0x40, 0x98, 0xed, 0x35, 0x89, 0x51, 0x24, 0xfc, - 0xce, 0x16, 0x63, 0xbb, 0x08, 0xd0, 0xa5, 0x7d, 0x4f, 0x97, - 0xe2, 0x3a, 0x86, 0x5e, 0x2b, 0xf3, 0xc1, 0x19, 0x6c, 0xb4, - 0x09, 0xd1, 0xa4, 0x7c, 0x4e, 0x96, 0xe3, 0x3b, 0x87, 0x5f, - 0x2a, 0xf2, 0xc0, 0x18, 0x6d, 0xb5, 0x0a, 0xd2, 0xa7, 0x7f, - 0x4d, 0x95, 0xe0, 0x38, 0x84, 0x5c, 0x29, 0xf1, 0xc3, 0x1b, - 0x6e, 0xb6, 0x0b, 0xd3, 0xa6, 0x7e, 0x4c, 0x94, 0xe1, 0x39, - 0x85, 0x5d, 0x28, 0xf0, 0xc2, 0x1a, 0x6f, 0xb7, 0x0c, 0xd4, - 0xa1, 0x79, 0x4b, 0x93, 0xe6, 0x3e, 0x82, 0x5a, 0x2f, 0xf7, - 0xc5, 0x1d, 0x68, 0xb0, 0x0d, 0xd5, 0xa0, 0x78, 0x4a, 0x92, - 0xe7, 0x3f, 0x83, 0x5b, 0x2e, 0xf6, 0xc4, 0x1c, 0x69, 0xb1, - 0x0e, 0xd6, 0xa3, 0x7b, 0x49, 0x91, 0xe4, 0x3c, 0x80, 0x58, - 0x2d, 0xf5, 0xc7, 0x1f, 0x6a, 0xb2, 0x0f, 0xd7, 0xa2, 0x7a, - 0x48, 0x90, 0xe5, 0x3d, 0x81, 0x59, 0x2c, 0xf4, 0xc6, 0x1e, - 0x6b, 0xb3, 0x00, 0xd9, 0xaf, 0x76, 0x43, 0x9a, 0xec, 0x35, - 0x86, 0x5f, 0x29, 0xf0, 0xc5, 0x1c, 0x6a, 0xb3, 0x11, 0xc8, - 0xbe, 0x67, 0x52, 0x8b, 0xfd, 0x24, 0x97, 0x4e, 0x38, 0xe1, - 0xd4, 0x0d, 0x7b, 0xa2, 0x22, 0xfb, 0x8d, 0x54, 0x61, 0xb8, - 0xce, 0x17, 0xa4, 0x7d, 0x0b, 0xd2, 0xe7, 0x3e, 0x48, 0x91, - 0x33, 0xea, 0x9c, 0x45, 0x70, 0xa9, 0xdf, 0x06, 0xb5, 0x6c, - 0x1a, 0xc3, 0xf6, 0x2f, 0x59, 0x80, 0x44, 0x9d, 0xeb, 0x32, - 0x07, 0xde, 0xa8, 0x71, 0xc2, 0x1b, 0x6d, 0xb4, 0x81, 0x58, - 0x2e, 0xf7, 0x55, 0x8c, 0xfa, 0x23, 0x16, 0xcf, 0xb9, 0x60, - 0xd3, 0x0a, 0x7c, 0xa5, 0x90, 0x49, 0x3f, 0xe6, 0x66, 0xbf, - 0xc9, 0x10, 0x25, 0xfc, 0x8a, 0x53, 0xe0, 0x39, 0x4f, 0x96, - 0xa3, 0x7a, 0x0c, 0xd5, 0x77, 0xae, 0xd8, 0x01, 0x34, 0xed, - 0x9b, 0x42, 0xf1, 0x28, 0x5e, 0x87, 0xb2, 0x6b, 0x1d, 0xc4, - 0x88, 0x51, 0x27, 0xfe, 0xcb, 0x12, 0x64, 0xbd, 0x0e, 0xd7, - 0xa1, 0x78, 0x4d, 0x94, 0xe2, 0x3b, 0x99, 0x40, 0x36, 0xef, - 0xda, 0x03, 0x75, 0xac, 0x1f, 0xc6, 0xb0, 0x69, 0x5c, 0x85, - 0xf3, 0x2a, 0xaa, 0x73, 0x05, 0xdc, 0xe9, 0x30, 0x46, 0x9f, - 0x2c, 0xf5, 0x83, 0x5a, 0x6f, 0xb6, 0xc0, 0x19, 0xbb, 0x62, - 0x14, 0xcd, 0xf8, 0x21, 0x57, 0x8e, 0x3d, 0xe4, 0x92, 0x4b, - 0x7e, 0xa7, 0xd1, 0x08, 0xcc, 0x15, 0x63, 0xba, 0x8f, 0x56, - 0x20, 0xf9, 0x4a, 0x93, 0xe5, 0x3c, 0x09, 0xd0, 0xa6, 0x7f, - 0xdd, 0x04, 0x72, 0xab, 0x9e, 0x47, 0x31, 0xe8, 0x5b, 0x82, - 0xf4, 0x2d, 0x18, 0xc1, 0xb7, 0x6e, 0xee, 0x37, 0x41, 0x98, - 0xad, 0x74, 0x02, 0xdb, 0x68, 0xb1, 0xc7, 0x1e, 0x2b, 0xf2, - 0x84, 0x5d, 0xff, 0x26, 0x50, 0x89, 0xbc, 0x65, 0x13, 0xca, - 0x79, 0xa0, 0xd6, 0x0f, 0x3a, 0xe3, 0x95, 0x4c, 0x00, 0xda, - 0xa9, 0x73, 0x4f, 0x95, 0xe6, 0x3c, 0x9e, 0x44, 0x37, 0xed, - 0xd1, 0x0b, 0x78, 0xa2, 0x21, 0xfb, 0x88, 0x52, 0x6e, 0xb4, - 0xc7, 0x1d, 0xbf, 0x65, 0x16, 0xcc, 0xf0, 0x2a, 0x59, 0x83, - 0x42, 0x98, 0xeb, 0x31, 0x0d, 0xd7, 0xa4, 0x7e, 0xdc, 0x06, - 0x75, 0xaf, 0x93, 0x49, 0x3a, 0xe0, 0x63, 0xb9, 0xca, 0x10, - 0x2c, 0xf6, 0x85, 0x5f, 0xfd, 0x27, 0x54, 0x8e, 0xb2, 0x68, - 0x1b, 0xc1, 0x84, 0x5e, 0x2d, 0xf7, 0xcb, 0x11, 0x62, 0xb8, - 0x1a, 0xc0, 0xb3, 0x69, 0x55, 0x8f, 0xfc, 0x26, 0xa5, 0x7f, - 0x0c, 0xd6, 0xea, 0x30, 0x43, 0x99, 0x3b, 0xe1, 0x92, 0x48, - 0x74, 0xae, 0xdd, 0x07, 0xc6, 0x1c, 0x6f, 0xb5, 0x89, 0x53, - 0x20, 0xfa, 0x58, 0x82, 0xf1, 0x2b, 0x17, 0xcd, 0xbe, 0x64, - 0xe7, 0x3d, 0x4e, 0x94, 0xa8, 0x72, 0x01, 0xdb, 0x79, 0xa3, - 0xd0, 0x0a, 0x36, 0xec, 0x9f, 0x45, 0x15, 0xcf, 0xbc, 0x66, - 0x5a, 0x80, 0xf3, 0x29, 0x8b, 0x51, 0x22, 0xf8, 0xc4, 0x1e, - 0x6d, 0xb7, 0x34, 0xee, 0x9d, 0x47, 0x7b, 0xa1, 0xd2, 0x08, - 0xaa, 0x70, 0x03, 0xd9, 0xe5, 0x3f, 0x4c, 0x96, 0x57, 0x8d, - 0xfe, 0x24, 0x18, 0xc2, 0xb1, 0x6b, 0xc9, 0x13, 0x60, 0xba, - 0x86, 0x5c, 0x2f, 0xf5, 0x76, 0xac, 0xdf, 0x05, 0x39, 0xe3, - 0x90, 0x4a, 0xe8, 0x32, 0x41, 0x9b, 0xa7, 0x7d, 0x0e, 0xd4, - 0x91, 0x4b, 0x38, 0xe2, 0xde, 0x04, 0x77, 0xad, 0x0f, 0xd5, - 0xa6, 0x7c, 0x40, 0x9a, 0xe9, 0x33, 0xb0, 0x6a, 0x19, 0xc3, - 0xff, 0x25, 0x56, 0x8c, 0x2e, 0xf4, 0x87, 0x5d, 0x61, 0xbb, - 0xc8, 0x12, 0xd3, 0x09, 0x7a, 0xa0, 0x9c, 0x46, 0x35, 0xef, - 0x4d, 0x97, 0xe4, 0x3e, 0x02, 0xd8, 0xab, 0x71, 0xf2, 0x28, - 0x5b, 0x81, 0xbd, 0x67, 0x14, 0xce, 0x6c, 0xb6, 0xc5, 0x1f, - 0x23, 0xf9, 0x8a, 0x50, 0x00, 0xdb, 0xab, 0x70, 0x4b, 0x90, - 0xe0, 0x3b, 0x96, 0x4d, 0x3d, 0xe6, 0xdd, 0x06, 0x76, 0xad, - 0x31, 0xea, 0x9a, 0x41, 0x7a, 0xa1, 0xd1, 0x0a, 0xa7, 0x7c, - 0x0c, 0xd7, 0xec, 0x37, 0x47, 0x9c, 0x62, 0xb9, 0xc9, 0x12, - 0x29, 0xf2, 0x82, 0x59, 0xf4, 0x2f, 0x5f, 0x84, 0xbf, 0x64, - 0x14, 0xcf, 0x53, 0x88, 0xf8, 0x23, 0x18, 0xc3, 0xb3, 0x68, - 0xc5, 0x1e, 0x6e, 0xb5, 0x8e, 0x55, 0x25, 0xfe, 0xc4, 0x1f, - 0x6f, 0xb4, 0x8f, 0x54, 0x24, 0xff, 0x52, 0x89, 0xf9, 0x22, - 0x19, 0xc2, 0xb2, 0x69, 0xf5, 0x2e, 0x5e, 0x85, 0xbe, 0x65, - 0x15, 0xce, 0x63, 0xb8, 0xc8, 0x13, 0x28, 0xf3, 0x83, 0x58, - 0xa6, 0x7d, 0x0d, 0xd6, 0xed, 0x36, 0x46, 0x9d, 0x30, 0xeb, - 0x9b, 0x40, 0x7b, 0xa0, 0xd0, 0x0b, 0x97, 0x4c, 0x3c, 0xe7, - 0xdc, 0x07, 0x77, 0xac, 0x01, 0xda, 0xaa, 0x71, 0x4a, 0x91, - 0xe1, 0x3a, 0x95, 0x4e, 0x3e, 0xe5, 0xde, 0x05, 0x75, 0xae, - 0x03, 0xd8, 0xa8, 0x73, 0x48, 0x93, 0xe3, 0x38, 0xa4, 0x7f, - 0x0f, 0xd4, 0xef, 0x34, 0x44, 0x9f, 0x32, 0xe9, 0x99, 0x42, - 0x79, 0xa2, 0xd2, 0x09, 0xf7, 0x2c, 0x5c, 0x87, 0xbc, 0x67, - 0x17, 0xcc, 0x61, 0xba, 0xca, 0x11, 0x2a, 0xf1, 0x81, 0x5a, - 0xc6, 0x1d, 0x6d, 0xb6, 0x8d, 0x56, 0x26, 0xfd, 0x50, 0x8b, - 0xfb, 0x20, 0x1b, 0xc0, 0xb0, 0x6b, 0x51, 0x8a, 0xfa, 0x21, - 0x1a, 0xc1, 0xb1, 0x6a, 0xc7, 0x1c, 0x6c, 0xb7, 0x8c, 0x57, - 0x27, 0xfc, 0x60, 0xbb, 0xcb, 0x10, 0x2b, 0xf0, 0x80, 0x5b, - 0xf6, 0x2d, 0x5d, 0x86, 0xbd, 0x66, 0x16, 0xcd, 0x33, 0xe8, - 0x98, 0x43, 0x78, 0xa3, 0xd3, 0x08, 0xa5, 0x7e, 0x0e, 0xd5, - 0xee, 0x35, 0x45, 0x9e, 0x02, 0xd9, 0xa9, 0x72, 0x49, 0x92, - 0xe2, 0x39, 0x94, 0x4f, 0x3f, 0xe4, 0xdf, 0x04, 0x74, 0xaf, - 0x00, 0xdc, 0xa5, 0x79, 0x57, 0x8b, 0xf2, 0x2e, 0xae, 0x72, - 0x0b, 0xd7, 0xf9, 0x25, 0x5c, 0x80, 0x41, 0x9d, 0xe4, 0x38, - 0x16, 0xca, 0xb3, 0x6f, 0xef, 0x33, 0x4a, 0x96, 0xb8, 0x64, - 0x1d, 0xc1, 0x82, 0x5e, 0x27, 0xfb, 0xd5, 0x09, 0x70, 0xac, - 0x2c, 0xf0, 0x89, 0x55, 0x7b, 0xa7, 0xde, 0x02, 0xc3, 0x1f, - 0x66, 0xba, 0x94, 0x48, 0x31, 0xed, 0x6d, 0xb1, 0xc8, 0x14, - 0x3a, 0xe6, 0x9f, 0x43, 0x19, 0xc5, 0xbc, 0x60, 0x4e, 0x92, - 0xeb, 0x37, 0xb7, 0x6b, 0x12, 0xce, 0xe0, 0x3c, 0x45, 0x99, - 0x58, 0x84, 0xfd, 0x21, 0x0f, 0xd3, 0xaa, 0x76, 0xf6, 0x2a, - 0x53, 0x8f, 0xa1, 0x7d, 0x04, 0xd8, 0x9b, 0x47, 0x3e, 0xe2, - 0xcc, 0x10, 0x69, 0xb5, 0x35, 0xe9, 0x90, 0x4c, 0x62, 0xbe, - 0xc7, 0x1b, 0xda, 0x06, 0x7f, 0xa3, 0x8d, 0x51, 0x28, 0xf4, - 0x74, 0xa8, 0xd1, 0x0d, 0x23, 0xff, 0x86, 0x5a, 0x32, 0xee, - 0x97, 0x4b, 0x65, 0xb9, 0xc0, 0x1c, 0x9c, 0x40, 0x39, 0xe5, - 0xcb, 0x17, 0x6e, 0xb2, 0x73, 0xaf, 0xd6, 0x0a, 0x24, 0xf8, - 0x81, 0x5d, 0xdd, 0x01, 0x78, 0xa4, 0x8a, 0x56, 0x2f, 0xf3, - 0xb0, 0x6c, 0x15, 0xc9, 0xe7, 0x3b, 0x42, 0x9e, 0x1e, 0xc2, - 0xbb, 0x67, 0x49, 0x95, 0xec, 0x30, 0xf1, 0x2d, 0x54, 0x88, - 0xa6, 0x7a, 0x03, 0xdf, 0x5f, 0x83, 0xfa, 0x26, 0x08, 0xd4, - 0xad, 0x71, 0x2b, 0xf7, 0x8e, 0x52, 0x7c, 0xa0, 0xd9, 0x05, - 0x85, 0x59, 0x20, 0xfc, 0xd2, 0x0e, 0x77, 0xab, 0x6a, 0xb6, - 0xcf, 0x13, 0x3d, 0xe1, 0x98, 0x44, 0xc4, 0x18, 0x61, 0xbd, - 0x93, 0x4f, 0x36, 0xea, 0xa9, 0x75, 0x0c, 0xd0, 0xfe, 0x22, - 0x5b, 0x87, 0x07, 0xdb, 0xa2, 0x7e, 0x50, 0x8c, 0xf5, 0x29, - 0xe8, 0x34, 0x4d, 0x91, 0xbf, 0x63, 0x1a, 0xc6, 0x46, 0x9a, - 0xe3, 0x3f, 0x11, 0xcd, 0xb4, 0x68, 0x00, 0xdd, 0xa7, 0x7a, - 0x53, 0x8e, 0xf4, 0x29, 0xa6, 0x7b, 0x01, 0xdc, 0xf5, 0x28, - 0x52, 0x8f, 0x51, 0x8c, 0xf6, 0x2b, 0x02, 0xdf, 0xa5, 0x78, - 0xf7, 0x2a, 0x50, 0x8d, 0xa4, 0x79, 0x03, 0xde, 0xa2, 0x7f, - 0x05, 0xd8, 0xf1, 0x2c, 0x56, 0x8b, 0x04, 0xd9, 0xa3, 0x7e, - 0x57, 0x8a, 0xf0, 0x2d, 0xf3, 0x2e, 0x54, 0x89, 0xa0, 0x7d, - 0x07, 0xda, 0x55, 0x88, 0xf2, 0x2f, 0x06, 0xdb, 0xa1, 0x7c, - 0x59, 0x84, 0xfe, 0x23, 0x0a, 0xd7, 0xad, 0x70, 0xff, 0x22, - 0x58, 0x85, 0xac, 0x71, 0x0b, 0xd6, 0x08, 0xd5, 0xaf, 0x72, - 0x5b, 0x86, 0xfc, 0x21, 0xae, 0x73, 0x09, 0xd4, 0xfd, 0x20, - 0x5a, 0x87, 0xfb, 0x26, 0x5c, 0x81, 0xa8, 0x75, 0x0f, 0xd2, - 0x5d, 0x80, 0xfa, 0x27, 0x0e, 0xd3, 0xa9, 0x74, 0xaa, 0x77, - 0x0d, 0xd0, 0xf9, 0x24, 0x5e, 0x83, 0x0c, 0xd1, 0xab, 0x76, - 0x5f, 0x82, 0xf8, 0x25, 0xb2, 0x6f, 0x15, 0xc8, 0xe1, 0x3c, - 0x46, 0x9b, 0x14, 0xc9, 0xb3, 0x6e, 0x47, 0x9a, 0xe0, 0x3d, - 0xe3, 0x3e, 0x44, 0x99, 0xb0, 0x6d, 0x17, 0xca, 0x45, 0x98, - 0xe2, 0x3f, 0x16, 0xcb, 0xb1, 0x6c, 0x10, 0xcd, 0xb7, 0x6a, - 0x43, 0x9e, 0xe4, 0x39, 0xb6, 0x6b, 0x11, 0xcc, 0xe5, 0x38, - 0x42, 0x9f, 0x41, 0x9c, 0xe6, 0x3b, 0x12, 0xcf, 0xb5, 0x68, - 0xe7, 0x3a, 0x40, 0x9d, 0xb4, 0x69, 0x13, 0xce, 0xeb, 0x36, - 0x4c, 0x91, 0xb8, 0x65, 0x1f, 0xc2, 0x4d, 0x90, 0xea, 0x37, - 0x1e, 0xc3, 0xb9, 0x64, 0xba, 0x67, 0x1d, 0xc0, 0xe9, 0x34, - 0x4e, 0x93, 0x1c, 0xc1, 0xbb, 0x66, 0x4f, 0x92, 0xe8, 0x35, - 0x49, 0x94, 0xee, 0x33, 0x1a, 0xc7, 0xbd, 0x60, 0xef, 0x32, - 0x48, 0x95, 0xbc, 0x61, 0x1b, 0xc6, 0x18, 0xc5, 0xbf, 0x62, - 0x4b, 0x96, 0xec, 0x31, 0xbe, 0x63, 0x19, 0xc4, 0xed, 0x30, - 0x4a, 0x97, 0x00, 0xde, 0xa1, 0x7f, 0x5f, 0x81, 0xfe, 0x20, - 0xbe, 0x60, 0x1f, 0xc1, 0xe1, 0x3f, 0x40, 0x9e, 0x61, 0xbf, - 0xc0, 0x1e, 0x3e, 0xe0, 0x9f, 0x41, 0xdf, 0x01, 0x7e, 0xa0, - 0x80, 0x5e, 0x21, 0xff, 0xc2, 0x1c, 0x63, 0xbd, 0x9d, 0x43, - 0x3c, 0xe2, 0x7c, 0xa2, 0xdd, 0x03, 0x23, 0xfd, 0x82, 0x5c, - 0xa3, 0x7d, 0x02, 0xdc, 0xfc, 0x22, 0x5d, 0x83, 0x1d, 0xc3, - 0xbc, 0x62, 0x42, 0x9c, 0xe3, 0x3d, 0x99, 0x47, 0x38, 0xe6, - 0xc6, 0x18, 0x67, 0xb9, 0x27, 0xf9, 0x86, 0x58, 0x78, 0xa6, - 0xd9, 0x07, 0xf8, 0x26, 0x59, 0x87, 0xa7, 0x79, 0x06, 0xd8, - 0x46, 0x98, 0xe7, 0x39, 0x19, 0xc7, 0xb8, 0x66, 0x5b, 0x85, - 0xfa, 0x24, 0x04, 0xda, 0xa5, 0x7b, 0xe5, 0x3b, 0x44, 0x9a, - 0xba, 0x64, 0x1b, 0xc5, 0x3a, 0xe4, 0x9b, 0x45, 0x65, 0xbb, - 0xc4, 0x1a, 0x84, 0x5a, 0x25, 0xfb, 0xdb, 0x05, 0x7a, 0xa4, - 0x2f, 0xf1, 0x8e, 0x50, 0x70, 0xae, 0xd1, 0x0f, 0x91, 0x4f, - 0x30, 0xee, 0xce, 0x10, 0x6f, 0xb1, 0x4e, 0x90, 0xef, 0x31, - 0x11, 0xcf, 0xb0, 0x6e, 0xf0, 0x2e, 0x51, 0x8f, 0xaf, 0x71, - 0x0e, 0xd0, 0xed, 0x33, 0x4c, 0x92, 0xb2, 0x6c, 0x13, 0xcd, - 0x53, 0x8d, 0xf2, 0x2c, 0x0c, 0xd2, 0xad, 0x73, 0x8c, 0x52, - 0x2d, 0xf3, 0xd3, 0x0d, 0x72, 0xac, 0x32, 0xec, 0x93, 0x4d, - 0x6d, 0xb3, 0xcc, 0x12, 0xb6, 0x68, 0x17, 0xc9, 0xe9, 0x37, - 0x48, 0x96, 0x08, 0xd6, 0xa9, 0x77, 0x57, 0x89, 0xf6, 0x28, - 0xd7, 0x09, 0x76, 0xa8, 0x88, 0x56, 0x29, 0xf7, 0x69, 0xb7, - 0xc8, 0x16, 0x36, 0xe8, 0x97, 0x49, 0x74, 0xaa, 0xd5, 0x0b, - 0x2b, 0xf5, 0x8a, 0x54, 0xca, 0x14, 0x6b, 0xb5, 0x95, 0x4b, - 0x34, 0xea, 0x15, 0xcb, 0xb4, 0x6a, 0x4a, 0x94, 0xeb, 0x35, - 0xab, 0x75, 0x0a, 0xd4, 0xf4, 0x2a, 0x55, 0x8b, 0x00, 0xdf, - 0xa3, 0x7c, 0x5b, 0x84, 0xf8, 0x27, 0xb6, 0x69, 0x15, 0xca, - 0xed, 0x32, 0x4e, 0x91, 0x71, 0xae, 0xd2, 0x0d, 0x2a, 0xf5, - 0x89, 0x56, 0xc7, 0x18, 0x64, 0xbb, 0x9c, 0x43, 0x3f, 0xe0, - 0xe2, 0x3d, 0x41, 0x9e, 0xb9, 0x66, 0x1a, 0xc5, 0x54, 0x8b, - 0xf7, 0x28, 0x0f, 0xd0, 0xac, 0x73, 0x93, 0x4c, 0x30, 0xef, - 0xc8, 0x17, 0x6b, 0xb4, 0x25, 0xfa, 0x86, 0x59, 0x7e, 0xa1, - 0xdd, 0x02, 0xd9, 0x06, 0x7a, 0xa5, 0x82, 0x5d, 0x21, 0xfe, - 0x6f, 0xb0, 0xcc, 0x13, 0x34, 0xeb, 0x97, 0x48, 0xa8, 0x77, - 0x0b, 0xd4, 0xf3, 0x2c, 0x50, 0x8f, 0x1e, 0xc1, 0xbd, 0x62, - 0x45, 0x9a, 0xe6, 0x39, 0x3b, 0xe4, 0x98, 0x47, 0x60, 0xbf, - 0xc3, 0x1c, 0x8d, 0x52, 0x2e, 0xf1, 0xd6, 0x09, 0x75, 0xaa, - 0x4a, 0x95, 0xe9, 0x36, 0x11, 0xce, 0xb2, 0x6d, 0xfc, 0x23, - 0x5f, 0x80, 0xa7, 0x78, 0x04, 0xdb, 0xaf, 0x70, 0x0c, 0xd3, - 0xf4, 0x2b, 0x57, 0x88, 0x19, 0xc6, 0xba, 0x65, 0x42, 0x9d, - 0xe1, 0x3e, 0xde, 0x01, 0x7d, 0xa2, 0x85, 0x5a, 0x26, 0xf9, - 0x68, 0xb7, 0xcb, 0x14, 0x33, 0xec, 0x90, 0x4f, 0x4d, 0x92, - 0xee, 0x31, 0x16, 0xc9, 0xb5, 0x6a, 0xfb, 0x24, 0x58, 0x87, - 0xa0, 0x7f, 0x03, 0xdc, 0x3c, 0xe3, 0x9f, 0x40, 0x67, 0xb8, - 0xc4, 0x1b, 0x8a, 0x55, 0x29, 0xf6, 0xd1, 0x0e, 0x72, 0xad, - 0x76, 0xa9, 0xd5, 0x0a, 0x2d, 0xf2, 0x8e, 0x51, 0xc0, 0x1f, - 0x63, 0xbc, 0x9b, 0x44, 0x38, 0xe7, 0x07, 0xd8, 0xa4, 0x7b, - 0x5c, 0x83, 0xff, 0x20, 0xb1, 0x6e, 0x12, 0xcd, 0xea, 0x35, - 0x49, 0x96, 0x94, 0x4b, 0x37, 0xe8, 0xcf, 0x10, 0x6c, 0xb3, - 0x22, 0xfd, 0x81, 0x5e, 0x79, 0xa6, 0xda, 0x05, 0xe5, 0x3a, - 0x46, 0x99, 0xbe, 0x61, 0x1d, 0xc2, 0x53, 0x8c, 0xf0, 0x2f, - 0x08, 0xd7, 0xab, 0x74, 0x00, 0xe0, 0xdd, 0x3d, 0xa7, 0x47, - 0x7a, 0x9a, 0x53, 0xb3, 0x8e, 0x6e, 0xf4, 0x14, 0x29, 0xc9, - 0xa6, 0x46, 0x7b, 0x9b, 0x01, 0xe1, 0xdc, 0x3c, 0xf5, 0x15, - 0x28, 0xc8, 0x52, 0xb2, 0x8f, 0x6f, 0x51, 0xb1, 0x8c, 0x6c, - 0xf6, 0x16, 0x2b, 0xcb, 0x02, 0xe2, 0xdf, 0x3f, 0xa5, 0x45, - 0x78, 0x98, 0xf7, 0x17, 0x2a, 0xca, 0x50, 0xb0, 0x8d, 0x6d, - 0xa4, 0x44, 0x79, 0x99, 0x03, 0xe3, 0xde, 0x3e, 0xa2, 0x42, - 0x7f, 0x9f, 0x05, 0xe5, 0xd8, 0x38, 0xf1, 0x11, 0x2c, 0xcc, - 0x56, 0xb6, 0x8b, 0x6b, 0x04, 0xe4, 0xd9, 0x39, 0xa3, 0x43, - 0x7e, 0x9e, 0x57, 0xb7, 0x8a, 0x6a, 0xf0, 0x10, 0x2d, 0xcd, - 0xf3, 0x13, 0x2e, 0xce, 0x54, 0xb4, 0x89, 0x69, 0xa0, 0x40, - 0x7d, 0x9d, 0x07, 0xe7, 0xda, 0x3a, 0x55, 0xb5, 0x88, 0x68, - 0xf2, 0x12, 0x2f, 0xcf, 0x06, 0xe6, 0xdb, 0x3b, 0xa1, 0x41, - 0x7c, 0x9c, 0x59, 0xb9, 0x84, 0x64, 0xfe, 0x1e, 0x23, 0xc3, - 0x0a, 0xea, 0xd7, 0x37, 0xad, 0x4d, 0x70, 0x90, 0xff, 0x1f, - 0x22, 0xc2, 0x58, 0xb8, 0x85, 0x65, 0xac, 0x4c, 0x71, 0x91, - 0x0b, 0xeb, 0xd6, 0x36, 0x08, 0xe8, 0xd5, 0x35, 0xaf, 0x4f, - 0x72, 0x92, 0x5b, 0xbb, 0x86, 0x66, 0xfc, 0x1c, 0x21, 0xc1, - 0xae, 0x4e, 0x73, 0x93, 0x09, 0xe9, 0xd4, 0x34, 0xfd, 0x1d, - 0x20, 0xc0, 0x5a, 0xba, 0x87, 0x67, 0xfb, 0x1b, 0x26, 0xc6, - 0x5c, 0xbc, 0x81, 0x61, 0xa8, 0x48, 0x75, 0x95, 0x0f, 0xef, - 0xd2, 0x32, 0x5d, 0xbd, 0x80, 0x60, 0xfa, 0x1a, 0x27, 0xc7, - 0x0e, 0xee, 0xd3, 0x33, 0xa9, 0x49, 0x74, 0x94, 0xaa, 0x4a, - 0x77, 0x97, 0x0d, 0xed, 0xd0, 0x30, 0xf9, 0x19, 0x24, 0xc4, - 0x5e, 0xbe, 0x83, 0x63, 0x0c, 0xec, 0xd1, 0x31, 0xab, 0x4b, - 0x76, 0x96, 0x5f, 0xbf, 0x82, 0x62, 0xf8, 0x18, 0x25, 0xc5, - 0x00, 0xe1, 0xdf, 0x3e, 0xa3, 0x42, 0x7c, 0x9d, 0x5b, 0xba, - 0x84, 0x65, 0xf8, 0x19, 0x27, 0xc6, 0xb6, 0x57, 0x69, 0x88, - 0x15, 0xf4, 0xca, 0x2b, 0xed, 0x0c, 0x32, 0xd3, 0x4e, 0xaf, - 0x91, 0x70, 0x71, 0x90, 0xae, 0x4f, 0xd2, 0x33, 0x0d, 0xec, - 0x2a, 0xcb, 0xf5, 0x14, 0x89, 0x68, 0x56, 0xb7, 0xc7, 0x26, - 0x18, 0xf9, 0x64, 0x85, 0xbb, 0x5a, 0x9c, 0x7d, 0x43, 0xa2, - 0x3f, 0xde, 0xe0, 0x01, 0xe2, 0x03, 0x3d, 0xdc, 0x41, 0xa0, - 0x9e, 0x7f, 0xb9, 0x58, 0x66, 0x87, 0x1a, 0xfb, 0xc5, 0x24, - 0x54, 0xb5, 0x8b, 0x6a, 0xf7, 0x16, 0x28, 0xc9, 0x0f, 0xee, - 0xd0, 0x31, 0xac, 0x4d, 0x73, 0x92, 0x93, 0x72, 0x4c, 0xad, - 0x30, 0xd1, 0xef, 0x0e, 0xc8, 0x29, 0x17, 0xf6, 0x6b, 0x8a, - 0xb4, 0x55, 0x25, 0xc4, 0xfa, 0x1b, 0x86, 0x67, 0x59, 0xb8, - 0x7e, 0x9f, 0xa1, 0x40, 0xdd, 0x3c, 0x02, 0xe3, 0xd9, 0x38, - 0x06, 0xe7, 0x7a, 0x9b, 0xa5, 0x44, 0x82, 0x63, 0x5d, 0xbc, - 0x21, 0xc0, 0xfe, 0x1f, 0x6f, 0x8e, 0xb0, 0x51, 0xcc, 0x2d, - 0x13, 0xf2, 0x34, 0xd5, 0xeb, 0x0a, 0x97, 0x76, 0x48, 0xa9, - 0xa8, 0x49, 0x77, 0x96, 0x0b, 0xea, 0xd4, 0x35, 0xf3, 0x12, - 0x2c, 0xcd, 0x50, 0xb1, 0x8f, 0x6e, 0x1e, 0xff, 0xc1, 0x20, - 0xbd, 0x5c, 0x62, 0x83, 0x45, 0xa4, 0x9a, 0x7b, 0xe6, 0x07, - 0x39, 0xd8, 0x3b, 0xda, 0xe4, 0x05, 0x98, 0x79, 0x47, 0xa6, - 0x60, 0x81, 0xbf, 0x5e, 0xc3, 0x22, 0x1c, 0xfd, 0x8d, 0x6c, - 0x52, 0xb3, 0x2e, 0xcf, 0xf1, 0x10, 0xd6, 0x37, 0x09, 0xe8, - 0x75, 0x94, 0xaa, 0x4b, 0x4a, 0xab, 0x95, 0x74, 0xe9, 0x08, - 0x36, 0xd7, 0x11, 0xf0, 0xce, 0x2f, 0xb2, 0x53, 0x6d, 0x8c, - 0xfc, 0x1d, 0x23, 0xc2, 0x5f, 0xbe, 0x80, 0x61, 0xa7, 0x46, - 0x78, 0x99, 0x04, 0xe5, 0xdb, 0x3a, 0x00, 0xe2, 0xd9, 0x3b, - 0xaf, 0x4d, 0x76, 0x94, 0x43, 0xa1, 0x9a, 0x78, 0xec, 0x0e, - 0x35, 0xd7, 0x86, 0x64, 0x5f, 0xbd, 0x29, 0xcb, 0xf0, 0x12, - 0xc5, 0x27, 0x1c, 0xfe, 0x6a, 0x88, 0xb3, 0x51, 0x11, 0xf3, - 0xc8, 0x2a, 0xbe, 0x5c, 0x67, 0x85, 0x52, 0xb0, 0x8b, 0x69, - 0xfd, 0x1f, 0x24, 0xc6, 0x97, 0x75, 0x4e, 0xac, 0x38, 0xda, - 0xe1, 0x03, 0xd4, 0x36, 0x0d, 0xef, 0x7b, 0x99, 0xa2, 0x40, - 0x22, 0xc0, 0xfb, 0x19, 0x8d, 0x6f, 0x54, 0xb6, 0x61, 0x83, - 0xb8, 0x5a, 0xce, 0x2c, 0x17, 0xf5, 0xa4, 0x46, 0x7d, 0x9f, - 0x0b, 0xe9, 0xd2, 0x30, 0xe7, 0x05, 0x3e, 0xdc, 0x48, 0xaa, - 0x91, 0x73, 0x33, 0xd1, 0xea, 0x08, 0x9c, 0x7e, 0x45, 0xa7, - 0x70, 0x92, 0xa9, 0x4b, 0xdf, 0x3d, 0x06, 0xe4, 0xb5, 0x57, - 0x6c, 0x8e, 0x1a, 0xf8, 0xc3, 0x21, 0xf6, 0x14, 0x2f, 0xcd, - 0x59, 0xbb, 0x80, 0x62, 0x44, 0xa6, 0x9d, 0x7f, 0xeb, 0x09, - 0x32, 0xd0, 0x07, 0xe5, 0xde, 0x3c, 0xa8, 0x4a, 0x71, 0x93, - 0xc2, 0x20, 0x1b, 0xf9, 0x6d, 0x8f, 0xb4, 0x56, 0x81, 0x63, - 0x58, 0xba, 0x2e, 0xcc, 0xf7, 0x15, 0x55, 0xb7, 0x8c, 0x6e, - 0xfa, 0x18, 0x23, 0xc1, 0x16, 0xf4, 0xcf, 0x2d, 0xb9, 0x5b, - 0x60, 0x82, 0xd3, 0x31, 0x0a, 0xe8, 0x7c, 0x9e, 0xa5, 0x47, - 0x90, 0x72, 0x49, 0xab, 0x3f, 0xdd, 0xe6, 0x04, 0x66, 0x84, - 0xbf, 0x5d, 0xc9, 0x2b, 0x10, 0xf2, 0x25, 0xc7, 0xfc, 0x1e, - 0x8a, 0x68, 0x53, 0xb1, 0xe0, 0x02, 0x39, 0xdb, 0x4f, 0xad, - 0x96, 0x74, 0xa3, 0x41, 0x7a, 0x98, 0x0c, 0xee, 0xd5, 0x37, - 0x77, 0x95, 0xae, 0x4c, 0xd8, 0x3a, 0x01, 0xe3, 0x34, 0xd6, - 0xed, 0x0f, 0x9b, 0x79, 0x42, 0xa0, 0xf1, 0x13, 0x28, 0xca, - 0x5e, 0xbc, 0x87, 0x65, 0xb2, 0x50, 0x6b, 0x89, 0x1d, 0xff, - 0xc4, 0x26, 0x00, 0xe3, 0xdb, 0x38, 0xab, 0x48, 0x70, 0x93, - 0x4b, 0xa8, 0x90, 0x73, 0xe0, 0x03, 0x3b, 0xd8, 0x96, 0x75, - 0x4d, 0xae, 0x3d, 0xde, 0xe6, 0x05, 0xdd, 0x3e, 0x06, 0xe5, - 0x76, 0x95, 0xad, 0x4e, 0x31, 0xd2, 0xea, 0x09, 0x9a, 0x79, - 0x41, 0xa2, 0x7a, 0x99, 0xa1, 0x42, 0xd1, 0x32, 0x0a, 0xe9, - 0xa7, 0x44, 0x7c, 0x9f, 0x0c, 0xef, 0xd7, 0x34, 0xec, 0x0f, - 0x37, 0xd4, 0x47, 0xa4, 0x9c, 0x7f, 0x62, 0x81, 0xb9, 0x5a, - 0xc9, 0x2a, 0x12, 0xf1, 0x29, 0xca, 0xf2, 0x11, 0x82, 0x61, - 0x59, 0xba, 0xf4, 0x17, 0x2f, 0xcc, 0x5f, 0xbc, 0x84, 0x67, - 0xbf, 0x5c, 0x64, 0x87, 0x14, 0xf7, 0xcf, 0x2c, 0x53, 0xb0, - 0x88, 0x6b, 0xf8, 0x1b, 0x23, 0xc0, 0x18, 0xfb, 0xc3, 0x20, - 0xb3, 0x50, 0x68, 0x8b, 0xc5, 0x26, 0x1e, 0xfd, 0x6e, 0x8d, - 0xb5, 0x56, 0x8e, 0x6d, 0x55, 0xb6, 0x25, 0xc6, 0xfe, 0x1d, - 0xc4, 0x27, 0x1f, 0xfc, 0x6f, 0x8c, 0xb4, 0x57, 0x8f, 0x6c, - 0x54, 0xb7, 0x24, 0xc7, 0xff, 0x1c, 0x52, 0xb1, 0x89, 0x6a, - 0xf9, 0x1a, 0x22, 0xc1, 0x19, 0xfa, 0xc2, 0x21, 0xb2, 0x51, - 0x69, 0x8a, 0xf5, 0x16, 0x2e, 0xcd, 0x5e, 0xbd, 0x85, 0x66, - 0xbe, 0x5d, 0x65, 0x86, 0x15, 0xf6, 0xce, 0x2d, 0x63, 0x80, - 0xb8, 0x5b, 0xc8, 0x2b, 0x13, 0xf0, 0x28, 0xcb, 0xf3, 0x10, - 0x83, 0x60, 0x58, 0xbb, 0xa6, 0x45, 0x7d, 0x9e, 0x0d, 0xee, - 0xd6, 0x35, 0xed, 0x0e, 0x36, 0xd5, 0x46, 0xa5, 0x9d, 0x7e, - 0x30, 0xd3, 0xeb, 0x08, 0x9b, 0x78, 0x40, 0xa3, 0x7b, 0x98, - 0xa0, 0x43, 0xd0, 0x33, 0x0b, 0xe8, 0x97, 0x74, 0x4c, 0xaf, - 0x3c, 0xdf, 0xe7, 0x04, 0xdc, 0x3f, 0x07, 0xe4, 0x77, 0x94, - 0xac, 0x4f, 0x01, 0xe2, 0xda, 0x39, 0xaa, 0x49, 0x71, 0x92, - 0x4a, 0xa9, 0x91, 0x72, 0xe1, 0x02, 0x3a, 0xd9, 0x00, 0xe4, - 0xd5, 0x31, 0xb7, 0x53, 0x62, 0x86, 0x73, 0x97, 0xa6, 0x42, - 0xc4, 0x20, 0x11, 0xf5, 0xe6, 0x02, 0x33, 0xd7, 0x51, 0xb5, - 0x84, 0x60, 0x95, 0x71, 0x40, 0xa4, 0x22, 0xc6, 0xf7, 0x13, - 0xd1, 0x35, 0x04, 0xe0, 0x66, 0x82, 0xb3, 0x57, 0xa2, 0x46, - 0x77, 0x93, 0x15, 0xf1, 0xc0, 0x24, 0x37, 0xd3, 0xe2, 0x06, - 0x80, 0x64, 0x55, 0xb1, 0x44, 0xa0, 0x91, 0x75, 0xf3, 0x17, - 0x26, 0xc2, 0xbf, 0x5b, 0x6a, 0x8e, 0x08, 0xec, 0xdd, 0x39, - 0xcc, 0x28, 0x19, 0xfd, 0x7b, 0x9f, 0xae, 0x4a, 0x59, 0xbd, - 0x8c, 0x68, 0xee, 0x0a, 0x3b, 0xdf, 0x2a, 0xce, 0xff, 0x1b, - 0x9d, 0x79, 0x48, 0xac, 0x6e, 0x8a, 0xbb, 0x5f, 0xd9, 0x3d, - 0x0c, 0xe8, 0x1d, 0xf9, 0xc8, 0x2c, 0xaa, 0x4e, 0x7f, 0x9b, - 0x88, 0x6c, 0x5d, 0xb9, 0x3f, 0xdb, 0xea, 0x0e, 0xfb, 0x1f, - 0x2e, 0xca, 0x4c, 0xa8, 0x99, 0x7d, 0x63, 0x87, 0xb6, 0x52, - 0xd4, 0x30, 0x01, 0xe5, 0x10, 0xf4, 0xc5, 0x21, 0xa7, 0x43, - 0x72, 0x96, 0x85, 0x61, 0x50, 0xb4, 0x32, 0xd6, 0xe7, 0x03, - 0xf6, 0x12, 0x23, 0xc7, 0x41, 0xa5, 0x94, 0x70, 0xb2, 0x56, - 0x67, 0x83, 0x05, 0xe1, 0xd0, 0x34, 0xc1, 0x25, 0x14, 0xf0, - 0x76, 0x92, 0xa3, 0x47, 0x54, 0xb0, 0x81, 0x65, 0xe3, 0x07, - 0x36, 0xd2, 0x27, 0xc3, 0xf2, 0x16, 0x90, 0x74, 0x45, 0xa1, - 0xdc, 0x38, 0x09, 0xed, 0x6b, 0x8f, 0xbe, 0x5a, 0xaf, 0x4b, - 0x7a, 0x9e, 0x18, 0xfc, 0xcd, 0x29, 0x3a, 0xde, 0xef, 0x0b, - 0x8d, 0x69, 0x58, 0xbc, 0x49, 0xad, 0x9c, 0x78, 0xfe, 0x1a, - 0x2b, 0xcf, 0x0d, 0xe9, 0xd8, 0x3c, 0xba, 0x5e, 0x6f, 0x8b, - 0x7e, 0x9a, 0xab, 0x4f, 0xc9, 0x2d, 0x1c, 0xf8, 0xeb, 0x0f, - 0x3e, 0xda, 0x5c, 0xb8, 0x89, 0x6d, 0x98, 0x7c, 0x4d, 0xa9, - 0x2f, 0xcb, 0xfa, 0x1e, 0x00, 0xe5, 0xd7, 0x32, 0xb3, 0x56, - 0x64, 0x81, 0x7b, 0x9e, 0xac, 0x49, 0xc8, 0x2d, 0x1f, 0xfa, - 0xf6, 0x13, 0x21, 0xc4, 0x45, 0xa0, 0x92, 0x77, 0x8d, 0x68, - 0x5a, 0xbf, 0x3e, 0xdb, 0xe9, 0x0c, 0xf1, 0x14, 0x26, 0xc3, - 0x42, 0xa7, 0x95, 0x70, 0x8a, 0x6f, 0x5d, 0xb8, 0x39, 0xdc, - 0xee, 0x0b, 0x07, 0xe2, 0xd0, 0x35, 0xb4, 0x51, 0x63, 0x86, - 0x7c, 0x99, 0xab, 0x4e, 0xcf, 0x2a, 0x18, 0xfd, 0xff, 0x1a, - 0x28, 0xcd, 0x4c, 0xa9, 0x9b, 0x7e, 0x84, 0x61, 0x53, 0xb6, - 0x37, 0xd2, 0xe0, 0x05, 0x09, 0xec, 0xde, 0x3b, 0xba, 0x5f, - 0x6d, 0x88, 0x72, 0x97, 0xa5, 0x40, 0xc1, 0x24, 0x16, 0xf3, - 0x0e, 0xeb, 0xd9, 0x3c, 0xbd, 0x58, 0x6a, 0x8f, 0x75, 0x90, - 0xa2, 0x47, 0xc6, 0x23, 0x11, 0xf4, 0xf8, 0x1d, 0x2f, 0xca, - 0x4b, 0xae, 0x9c, 0x79, 0x83, 0x66, 0x54, 0xb1, 0x30, 0xd5, - 0xe7, 0x02, 0xe3, 0x06, 0x34, 0xd1, 0x50, 0xb5, 0x87, 0x62, - 0x98, 0x7d, 0x4f, 0xaa, 0x2b, 0xce, 0xfc, 0x19, 0x15, 0xf0, - 0xc2, 0x27, 0xa6, 0x43, 0x71, 0x94, 0x6e, 0x8b, 0xb9, 0x5c, - 0xdd, 0x38, 0x0a, 0xef, 0x12, 0xf7, 0xc5, 0x20, 0xa1, 0x44, - 0x76, 0x93, 0x69, 0x8c, 0xbe, 0x5b, 0xda, 0x3f, 0x0d, 0xe8, - 0xe4, 0x01, 0x33, 0xd6, 0x57, 0xb2, 0x80, 0x65, 0x9f, 0x7a, - 0x48, 0xad, 0x2c, 0xc9, 0xfb, 0x1e, 0x1c, 0xf9, 0xcb, 0x2e, - 0xaf, 0x4a, 0x78, 0x9d, 0x67, 0x82, 0xb0, 0x55, 0xd4, 0x31, - 0x03, 0xe6, 0xea, 0x0f, 0x3d, 0xd8, 0x59, 0xbc, 0x8e, 0x6b, - 0x91, 0x74, 0x46, 0xa3, 0x22, 0xc7, 0xf5, 0x10, 0xed, 0x08, - 0x3a, 0xdf, 0x5e, 0xbb, 0x89, 0x6c, 0x96, 0x73, 0x41, 0xa4, - 0x25, 0xc0, 0xf2, 0x17, 0x1b, 0xfe, 0xcc, 0x29, 0xa8, 0x4d, - 0x7f, 0x9a, 0x60, 0x85, 0xb7, 0x52, 0xd3, 0x36, 0x04, 0xe1, - 0x00, 0xe6, 0xd1, 0x37, 0xbf, 0x59, 0x6e, 0x88, 0x63, 0x85, - 0xb2, 0x54, 0xdc, 0x3a, 0x0d, 0xeb, 0xc6, 0x20, 0x17, 0xf1, - 0x79, 0x9f, 0xa8, 0x4e, 0xa5, 0x43, 0x74, 0x92, 0x1a, 0xfc, - 0xcb, 0x2d, 0x91, 0x77, 0x40, 0xa6, 0x2e, 0xc8, 0xff, 0x19, - 0xf2, 0x14, 0x23, 0xc5, 0x4d, 0xab, 0x9c, 0x7a, 0x57, 0xb1, - 0x86, 0x60, 0xe8, 0x0e, 0x39, 0xdf, 0x34, 0xd2, 0xe5, 0x03, - 0x8b, 0x6d, 0x5a, 0xbc, 0x3f, 0xd9, 0xee, 0x08, 0x80, 0x66, - 0x51, 0xb7, 0x5c, 0xba, 0x8d, 0x6b, 0xe3, 0x05, 0x32, 0xd4, - 0xf9, 0x1f, 0x28, 0xce, 0x46, 0xa0, 0x97, 0x71, 0x9a, 0x7c, - 0x4b, 0xad, 0x25, 0xc3, 0xf4, 0x12, 0xae, 0x48, 0x7f, 0x99, - 0x11, 0xf7, 0xc0, 0x26, 0xcd, 0x2b, 0x1c, 0xfa, 0x72, 0x94, - 0xa3, 0x45, 0x68, 0x8e, 0xb9, 0x5f, 0xd7, 0x31, 0x06, 0xe0, - 0x0b, 0xed, 0xda, 0x3c, 0xb4, 0x52, 0x65, 0x83, 0x7e, 0x98, - 0xaf, 0x49, 0xc1, 0x27, 0x10, 0xf6, 0x1d, 0xfb, 0xcc, 0x2a, - 0xa2, 0x44, 0x73, 0x95, 0xb8, 0x5e, 0x69, 0x8f, 0x07, 0xe1, - 0xd6, 0x30, 0xdb, 0x3d, 0x0a, 0xec, 0x64, 0x82, 0xb5, 0x53, - 0xef, 0x09, 0x3e, 0xd8, 0x50, 0xb6, 0x81, 0x67, 0x8c, 0x6a, - 0x5d, 0xbb, 0x33, 0xd5, 0xe2, 0x04, 0x29, 0xcf, 0xf8, 0x1e, - 0x96, 0x70, 0x47, 0xa1, 0x4a, 0xac, 0x9b, 0x7d, 0xf5, 0x13, - 0x24, 0xc2, 0x41, 0xa7, 0x90, 0x76, 0xfe, 0x18, 0x2f, 0xc9, - 0x22, 0xc4, 0xf3, 0x15, 0x9d, 0x7b, 0x4c, 0xaa, 0x87, 0x61, - 0x56, 0xb0, 0x38, 0xde, 0xe9, 0x0f, 0xe4, 0x02, 0x35, 0xd3, - 0x5b, 0xbd, 0x8a, 0x6c, 0xd0, 0x36, 0x01, 0xe7, 0x6f, 0x89, - 0xbe, 0x58, 0xb3, 0x55, 0x62, 0x84, 0x0c, 0xea, 0xdd, 0x3b, - 0x16, 0xf0, 0xc7, 0x21, 0xa9, 0x4f, 0x78, 0x9e, 0x75, 0x93, - 0xa4, 0x42, 0xca, 0x2c, 0x1b, 0xfd, 0x00, 0xe7, 0xd3, 0x34, - 0xbb, 0x5c, 0x68, 0x8f, 0x6b, 0x8c, 0xb8, 0x5f, 0xd0, 0x37, - 0x03, 0xe4, 0xd6, 0x31, 0x05, 0xe2, 0x6d, 0x8a, 0xbe, 0x59, - 0xbd, 0x5a, 0x6e, 0x89, 0x06, 0xe1, 0xd5, 0x32, 0xb1, 0x56, - 0x62, 0x85, 0x0a, 0xed, 0xd9, 0x3e, 0xda, 0x3d, 0x09, 0xee, - 0x61, 0x86, 0xb2, 0x55, 0x67, 0x80, 0xb4, 0x53, 0xdc, 0x3b, - 0x0f, 0xe8, 0x0c, 0xeb, 0xdf, 0x38, 0xb7, 0x50, 0x64, 0x83, - 0x7f, 0x98, 0xac, 0x4b, 0xc4, 0x23, 0x17, 0xf0, 0x14, 0xf3, - 0xc7, 0x20, 0xaf, 0x48, 0x7c, 0x9b, 0xa9, 0x4e, 0x7a, 0x9d, - 0x12, 0xf5, 0xc1, 0x26, 0xc2, 0x25, 0x11, 0xf6, 0x79, 0x9e, - 0xaa, 0x4d, 0xce, 0x29, 0x1d, 0xfa, 0x75, 0x92, 0xa6, 0x41, - 0xa5, 0x42, 0x76, 0x91, 0x1e, 0xf9, 0xcd, 0x2a, 0x18, 0xff, - 0xcb, 0x2c, 0xa3, 0x44, 0x70, 0x97, 0x73, 0x94, 0xa0, 0x47, - 0xc8, 0x2f, 0x1b, 0xfc, 0xfe, 0x19, 0x2d, 0xca, 0x45, 0xa2, - 0x96, 0x71, 0x95, 0x72, 0x46, 0xa1, 0x2e, 0xc9, 0xfd, 0x1a, - 0x28, 0xcf, 0xfb, 0x1c, 0x93, 0x74, 0x40, 0xa7, 0x43, 0xa4, - 0x90, 0x77, 0xf8, 0x1f, 0x2b, 0xcc, 0x4f, 0xa8, 0x9c, 0x7b, - 0xf4, 0x13, 0x27, 0xc0, 0x24, 0xc3, 0xf7, 0x10, 0x9f, 0x78, - 0x4c, 0xab, 0x99, 0x7e, 0x4a, 0xad, 0x22, 0xc5, 0xf1, 0x16, - 0xf2, 0x15, 0x21, 0xc6, 0x49, 0xae, 0x9a, 0x7d, 0x81, 0x66, - 0x52, 0xb5, 0x3a, 0xdd, 0xe9, 0x0e, 0xea, 0x0d, 0x39, 0xde, - 0x51, 0xb6, 0x82, 0x65, 0x57, 0xb0, 0x84, 0x63, 0xec, 0x0b, - 0x3f, 0xd8, 0x3c, 0xdb, 0xef, 0x08, 0x87, 0x60, 0x54, 0xb3, - 0x30, 0xd7, 0xe3, 0x04, 0x8b, 0x6c, 0x58, 0xbf, 0x5b, 0xbc, - 0x88, 0x6f, 0xe0, 0x07, 0x33, 0xd4, 0xe6, 0x01, 0x35, 0xd2, - 0x5d, 0xba, 0x8e, 0x69, 0x8d, 0x6a, 0x5e, 0xb9, 0x36, 0xd1, - 0xe5, 0x02, 0x00, 0xe8, 0xcd, 0x25, 0x87, 0x6f, 0x4a, 0xa2, - 0x13, 0xfb, 0xde, 0x36, 0x94, 0x7c, 0x59, 0xb1, 0x26, 0xce, - 0xeb, 0x03, 0xa1, 0x49, 0x6c, 0x84, 0x35, 0xdd, 0xf8, 0x10, - 0xb2, 0x5a, 0x7f, 0x97, 0x4c, 0xa4, 0x81, 0x69, 0xcb, 0x23, - 0x06, 0xee, 0x5f, 0xb7, 0x92, 0x7a, 0xd8, 0x30, 0x15, 0xfd, - 0x6a, 0x82, 0xa7, 0x4f, 0xed, 0x05, 0x20, 0xc8, 0x79, 0x91, - 0xb4, 0x5c, 0xfe, 0x16, 0x33, 0xdb, 0x98, 0x70, 0x55, 0xbd, - 0x1f, 0xf7, 0xd2, 0x3a, 0x8b, 0x63, 0x46, 0xae, 0x0c, 0xe4, - 0xc1, 0x29, 0xbe, 0x56, 0x73, 0x9b, 0x39, 0xd1, 0xf4, 0x1c, - 0xad, 0x45, 0x60, 0x88, 0x2a, 0xc2, 0xe7, 0x0f, 0xd4, 0x3c, - 0x19, 0xf1, 0x53, 0xbb, 0x9e, 0x76, 0xc7, 0x2f, 0x0a, 0xe2, - 0x40, 0xa8, 0x8d, 0x65, 0xf2, 0x1a, 0x3f, 0xd7, 0x75, 0x9d, - 0xb8, 0x50, 0xe1, 0x09, 0x2c, 0xc4, 0x66, 0x8e, 0xab, 0x43, - 0x2d, 0xc5, 0xe0, 0x08, 0xaa, 0x42, 0x67, 0x8f, 0x3e, 0xd6, - 0xf3, 0x1b, 0xb9, 0x51, 0x74, 0x9c, 0x0b, 0xe3, 0xc6, 0x2e, - 0x8c, 0x64, 0x41, 0xa9, 0x18, 0xf0, 0xd5, 0x3d, 0x9f, 0x77, - 0x52, 0xba, 0x61, 0x89, 0xac, 0x44, 0xe6, 0x0e, 0x2b, 0xc3, - 0x72, 0x9a, 0xbf, 0x57, 0xf5, 0x1d, 0x38, 0xd0, 0x47, 0xaf, - 0x8a, 0x62, 0xc0, 0x28, 0x0d, 0xe5, 0x54, 0xbc, 0x99, 0x71, - 0xd3, 0x3b, 0x1e, 0xf6, 0xb5, 0x5d, 0x78, 0x90, 0x32, 0xda, - 0xff, 0x17, 0xa6, 0x4e, 0x6b, 0x83, 0x21, 0xc9, 0xec, 0x04, - 0x93, 0x7b, 0x5e, 0xb6, 0x14, 0xfc, 0xd9, 0x31, 0x80, 0x68, - 0x4d, 0xa5, 0x07, 0xef, 0xca, 0x22, 0xf9, 0x11, 0x34, 0xdc, - 0x7e, 0x96, 0xb3, 0x5b, 0xea, 0x02, 0x27, 0xcf, 0x6d, 0x85, - 0xa0, 0x48, 0xdf, 0x37, 0x12, 0xfa, 0x58, 0xb0, 0x95, 0x7d, - 0xcc, 0x24, 0x01, 0xe9, 0x4b, 0xa3, 0x86, 0x6e, 0x00, 0xe9, - 0xcf, 0x26, 0x83, 0x6a, 0x4c, 0xa5, 0x1b, 0xf2, 0xd4, 0x3d, - 0x98, 0x71, 0x57, 0xbe, 0x36, 0xdf, 0xf9, 0x10, 0xb5, 0x5c, - 0x7a, 0x93, 0x2d, 0xc4, 0xe2, 0x0b, 0xae, 0x47, 0x61, 0x88, - 0x6c, 0x85, 0xa3, 0x4a, 0xef, 0x06, 0x20, 0xc9, 0x77, 0x9e, - 0xb8, 0x51, 0xf4, 0x1d, 0x3b, 0xd2, 0x5a, 0xb3, 0x95, 0x7c, - 0xd9, 0x30, 0x16, 0xff, 0x41, 0xa8, 0x8e, 0x67, 0xc2, 0x2b, - 0x0d, 0xe4, 0xd8, 0x31, 0x17, 0xfe, 0x5b, 0xb2, 0x94, 0x7d, - 0xc3, 0x2a, 0x0c, 0xe5, 0x40, 0xa9, 0x8f, 0x66, 0xee, 0x07, - 0x21, 0xc8, 0x6d, 0x84, 0xa2, 0x4b, 0xf5, 0x1c, 0x3a, 0xd3, - 0x76, 0x9f, 0xb9, 0x50, 0xb4, 0x5d, 0x7b, 0x92, 0x37, 0xde, - 0xf8, 0x11, 0xaf, 0x46, 0x60, 0x89, 0x2c, 0xc5, 0xe3, 0x0a, - 0x82, 0x6b, 0x4d, 0xa4, 0x01, 0xe8, 0xce, 0x27, 0x99, 0x70, - 0x56, 0xbf, 0x1a, 0xf3, 0xd5, 0x3c, 0xad, 0x44, 0x62, 0x8b, - 0x2e, 0xc7, 0xe1, 0x08, 0xb6, 0x5f, 0x79, 0x90, 0x35, 0xdc, - 0xfa, 0x13, 0x9b, 0x72, 0x54, 0xbd, 0x18, 0xf1, 0xd7, 0x3e, - 0x80, 0x69, 0x4f, 0xa6, 0x03, 0xea, 0xcc, 0x25, 0xc1, 0x28, - 0x0e, 0xe7, 0x42, 0xab, 0x8d, 0x64, 0xda, 0x33, 0x15, 0xfc, - 0x59, 0xb0, 0x96, 0x7f, 0xf7, 0x1e, 0x38, 0xd1, 0x74, 0x9d, - 0xbb, 0x52, 0xec, 0x05, 0x23, 0xca, 0x6f, 0x86, 0xa0, 0x49, - 0x75, 0x9c, 0xba, 0x53, 0xf6, 0x1f, 0x39, 0xd0, 0x6e, 0x87, - 0xa1, 0x48, 0xed, 0x04, 0x22, 0xcb, 0x43, 0xaa, 0x8c, 0x65, - 0xc0, 0x29, 0x0f, 0xe6, 0x58, 0xb1, 0x97, 0x7e, 0xdb, 0x32, - 0x14, 0xfd, 0x19, 0xf0, 0xd6, 0x3f, 0x9a, 0x73, 0x55, 0xbc, - 0x02, 0xeb, 0xcd, 0x24, 0x81, 0x68, 0x4e, 0xa7, 0x2f, 0xc6, - 0xe0, 0x09, 0xac, 0x45, 0x63, 0x8a, 0x34, 0xdd, 0xfb, 0x12, - 0xb7, 0x5e, 0x78, 0x91, 0x00, 0xea, 0xc9, 0x23, 0x8f, 0x65, - 0x46, 0xac, 0x03, 0xe9, 0xca, 0x20, 0x8c, 0x66, 0x45, 0xaf, - 0x06, 0xec, 0xcf, 0x25, 0x89, 0x63, 0x40, 0xaa, 0x05, 0xef, - 0xcc, 0x26, 0x8a, 0x60, 0x43, 0xa9, 0x0c, 0xe6, 0xc5, 0x2f, - 0x83, 0x69, 0x4a, 0xa0, 0x0f, 0xe5, 0xc6, 0x2c, 0x80, 0x6a, - 0x49, 0xa3, 0x0a, 0xe0, 0xc3, 0x29, 0x85, 0x6f, 0x4c, 0xa6, - 0x09, 0xe3, 0xc0, 0x2a, 0x86, 0x6c, 0x4f, 0xa5, 0x18, 0xf2, - 0xd1, 0x3b, 0x97, 0x7d, 0x5e, 0xb4, 0x1b, 0xf1, 0xd2, 0x38, - 0x94, 0x7e, 0x5d, 0xb7, 0x1e, 0xf4, 0xd7, 0x3d, 0x91, 0x7b, - 0x58, 0xb2, 0x1d, 0xf7, 0xd4, 0x3e, 0x92, 0x78, 0x5b, 0xb1, - 0x14, 0xfe, 0xdd, 0x37, 0x9b, 0x71, 0x52, 0xb8, 0x17, 0xfd, - 0xde, 0x34, 0x98, 0x72, 0x51, 0xbb, 0x12, 0xf8, 0xdb, 0x31, - 0x9d, 0x77, 0x54, 0xbe, 0x11, 0xfb, 0xd8, 0x32, 0x9e, 0x74, - 0x57, 0xbd, 0x30, 0xda, 0xf9, 0x13, 0xbf, 0x55, 0x76, 0x9c, - 0x33, 0xd9, 0xfa, 0x10, 0xbc, 0x56, 0x75, 0x9f, 0x36, 0xdc, - 0xff, 0x15, 0xb9, 0x53, 0x70, 0x9a, 0x35, 0xdf, 0xfc, 0x16, - 0xba, 0x50, 0x73, 0x99, 0x3c, 0xd6, 0xf5, 0x1f, 0xb3, 0x59, - 0x7a, 0x90, 0x3f, 0xd5, 0xf6, 0x1c, 0xb0, 0x5a, 0x79, 0x93, - 0x3a, 0xd0, 0xf3, 0x19, 0xb5, 0x5f, 0x7c, 0x96, 0x39, 0xd3, - 0xf0, 0x1a, 0xb6, 0x5c, 0x7f, 0x95, 0x28, 0xc2, 0xe1, 0x0b, - 0xa7, 0x4d, 0x6e, 0x84, 0x2b, 0xc1, 0xe2, 0x08, 0xa4, 0x4e, - 0x6d, 0x87, 0x2e, 0xc4, 0xe7, 0x0d, 0xa1, 0x4b, 0x68, 0x82, - 0x2d, 0xc7, 0xe4, 0x0e, 0xa2, 0x48, 0x6b, 0x81, 0x24, 0xce, - 0xed, 0x07, 0xab, 0x41, 0x62, 0x88, 0x27, 0xcd, 0xee, 0x04, - 0xa8, 0x42, 0x61, 0x8b, 0x22, 0xc8, 0xeb, 0x01, 0xad, 0x47, - 0x64, 0x8e, 0x21, 0xcb, 0xe8, 0x02, 0xae, 0x44, 0x67, 0x8d, - 0x00, 0xeb, 0xcb, 0x20, 0x8b, 0x60, 0x40, 0xab, 0x0b, 0xe0, - 0xc0, 0x2b, 0x80, 0x6b, 0x4b, 0xa0, 0x16, 0xfd, 0xdd, 0x36, - 0x9d, 0x76, 0x56, 0xbd, 0x1d, 0xf6, 0xd6, 0x3d, 0x96, 0x7d, - 0x5d, 0xb6, 0x2c, 0xc7, 0xe7, 0x0c, 0xa7, 0x4c, 0x6c, 0x87, - 0x27, 0xcc, 0xec, 0x07, 0xac, 0x47, 0x67, 0x8c, 0x3a, 0xd1, - 0xf1, 0x1a, 0xb1, 0x5a, 0x7a, 0x91, 0x31, 0xda, 0xfa, 0x11, - 0xba, 0x51, 0x71, 0x9a, 0x58, 0xb3, 0x93, 0x78, 0xd3, 0x38, - 0x18, 0xf3, 0x53, 0xb8, 0x98, 0x73, 0xd8, 0x33, 0x13, 0xf8, - 0x4e, 0xa5, 0x85, 0x6e, 0xc5, 0x2e, 0x0e, 0xe5, 0x45, 0xae, - 0x8e, 0x65, 0xce, 0x25, 0x05, 0xee, 0x74, 0x9f, 0xbf, 0x54, - 0xff, 0x14, 0x34, 0xdf, 0x7f, 0x94, 0xb4, 0x5f, 0xf4, 0x1f, - 0x3f, 0xd4, 0x62, 0x89, 0xa9, 0x42, 0xe9, 0x02, 0x22, 0xc9, - 0x69, 0x82, 0xa2, 0x49, 0xe2, 0x09, 0x29, 0xc2, 0xb0, 0x5b, - 0x7b, 0x90, 0x3b, 0xd0, 0xf0, 0x1b, 0xbb, 0x50, 0x70, 0x9b, - 0x30, 0xdb, 0xfb, 0x10, 0xa6, 0x4d, 0x6d, 0x86, 0x2d, 0xc6, - 0xe6, 0x0d, 0xad, 0x46, 0x66, 0x8d, 0x26, 0xcd, 0xed, 0x06, - 0x9c, 0x77, 0x57, 0xbc, 0x17, 0xfc, 0xdc, 0x37, 0x97, 0x7c, - 0x5c, 0xb7, 0x1c, 0xf7, 0xd7, 0x3c, 0x8a, 0x61, 0x41, 0xaa, - 0x01, 0xea, 0xca, 0x21, 0x81, 0x6a, 0x4a, 0xa1, 0x0a, 0xe1, - 0xc1, 0x2a, 0xe8, 0x03, 0x23, 0xc8, 0x63, 0x88, 0xa8, 0x43, - 0xe3, 0x08, 0x28, 0xc3, 0x68, 0x83, 0xa3, 0x48, 0xfe, 0x15, - 0x35, 0xde, 0x75, 0x9e, 0xbe, 0x55, 0xf5, 0x1e, 0x3e, 0xd5, - 0x7e, 0x95, 0xb5, 0x5e, 0xc4, 0x2f, 0x0f, 0xe4, 0x4f, 0xa4, - 0x84, 0x6f, 0xcf, 0x24, 0x04, 0xef, 0x44, 0xaf, 0x8f, 0x64, - 0xd2, 0x39, 0x19, 0xf2, 0x59, 0xb2, 0x92, 0x79, 0xd9, 0x32, - 0x12, 0xf9, 0x52, 0xb9, 0x99, 0x72, 0x00, 0xec, 0xc5, 0x29, - 0x97, 0x7b, 0x52, 0xbe, 0x33, 0xdf, 0xf6, 0x1a, 0xa4, 0x48, - 0x61, 0x8d, 0x66, 0x8a, 0xa3, 0x4f, 0xf1, 0x1d, 0x34, 0xd8, - 0x55, 0xb9, 0x90, 0x7c, 0xc2, 0x2e, 0x07, 0xeb, 0xcc, 0x20, - 0x09, 0xe5, 0x5b, 0xb7, 0x9e, 0x72, 0xff, 0x13, 0x3a, 0xd6, - 0x68, 0x84, 0xad, 0x41, 0xaa, 0x46, 0x6f, 0x83, 0x3d, 0xd1, - 0xf8, 0x14, 0x99, 0x75, 0x5c, 0xb0, 0x0e, 0xe2, 0xcb, 0x27, - 0x85, 0x69, 0x40, 0xac, 0x12, 0xfe, 0xd7, 0x3b, 0xb6, 0x5a, - 0x73, 0x9f, 0x21, 0xcd, 0xe4, 0x08, 0xe3, 0x0f, 0x26, 0xca, - 0x74, 0x98, 0xb1, 0x5d, 0xd0, 0x3c, 0x15, 0xf9, 0x47, 0xab, - 0x82, 0x6e, 0x49, 0xa5, 0x8c, 0x60, 0xde, 0x32, 0x1b, 0xf7, - 0x7a, 0x96, 0xbf, 0x53, 0xed, 0x01, 0x28, 0xc4, 0x2f, 0xc3, - 0xea, 0x06, 0xb8, 0x54, 0x7d, 0x91, 0x1c, 0xf0, 0xd9, 0x35, - 0x8b, 0x67, 0x4e, 0xa2, 0x17, 0xfb, 0xd2, 0x3e, 0x80, 0x6c, - 0x45, 0xa9, 0x24, 0xc8, 0xe1, 0x0d, 0xb3, 0x5f, 0x76, 0x9a, - 0x71, 0x9d, 0xb4, 0x58, 0xe6, 0x0a, 0x23, 0xcf, 0x42, 0xae, - 0x87, 0x6b, 0xd5, 0x39, 0x10, 0xfc, 0xdb, 0x37, 0x1e, 0xf2, - 0x4c, 0xa0, 0x89, 0x65, 0xe8, 0x04, 0x2d, 0xc1, 0x7f, 0x93, - 0xba, 0x56, 0xbd, 0x51, 0x78, 0x94, 0x2a, 0xc6, 0xef, 0x03, - 0x8e, 0x62, 0x4b, 0xa7, 0x19, 0xf5, 0xdc, 0x30, 0x92, 0x7e, - 0x57, 0xbb, 0x05, 0xe9, 0xc0, 0x2c, 0xa1, 0x4d, 0x64, 0x88, - 0x36, 0xda, 0xf3, 0x1f, 0xf4, 0x18, 0x31, 0xdd, 0x63, 0x8f, - 0xa6, 0x4a, 0xc7, 0x2b, 0x02, 0xee, 0x50, 0xbc, 0x95, 0x79, - 0x5e, 0xb2, 0x9b, 0x77, 0xc9, 0x25, 0x0c, 0xe0, 0x6d, 0x81, - 0xa8, 0x44, 0xfa, 0x16, 0x3f, 0xd3, 0x38, 0xd4, 0xfd, 0x11, - 0xaf, 0x43, 0x6a, 0x86, 0x0b, 0xe7, 0xce, 0x22, 0x9c, 0x70, - 0x59, 0xb5, 0x00, 0xed, 0xc7, 0x2a, 0x93, 0x7e, 0x54, 0xb9, - 0x3b, 0xd6, 0xfc, 0x11, 0xa8, 0x45, 0x6f, 0x82, 0x76, 0x9b, - 0xb1, 0x5c, 0xe5, 0x08, 0x22, 0xcf, 0x4d, 0xa0, 0x8a, 0x67, - 0xde, 0x33, 0x19, 0xf4, 0xec, 0x01, 0x2b, 0xc6, 0x7f, 0x92, - 0xb8, 0x55, 0xd7, 0x3a, 0x10, 0xfd, 0x44, 0xa9, 0x83, 0x6e, - 0x9a, 0x77, 0x5d, 0xb0, 0x09, 0xe4, 0xce, 0x23, 0xa1, 0x4c, - 0x66, 0x8b, 0x32, 0xdf, 0xf5, 0x18, 0xc5, 0x28, 0x02, 0xef, - 0x56, 0xbb, 0x91, 0x7c, 0xfe, 0x13, 0x39, 0xd4, 0x6d, 0x80, - 0xaa, 0x47, 0xb3, 0x5e, 0x74, 0x99, 0x20, 0xcd, 0xe7, 0x0a, - 0x88, 0x65, 0x4f, 0xa2, 0x1b, 0xf6, 0xdc, 0x31, 0x29, 0xc4, - 0xee, 0x03, 0xba, 0x57, 0x7d, 0x90, 0x12, 0xff, 0xd5, 0x38, - 0x81, 0x6c, 0x46, 0xab, 0x5f, 0xb2, 0x98, 0x75, 0xcc, 0x21, - 0x0b, 0xe6, 0x64, 0x89, 0xa3, 0x4e, 0xf7, 0x1a, 0x30, 0xdd, - 0x97, 0x7a, 0x50, 0xbd, 0x04, 0xe9, 0xc3, 0x2e, 0xac, 0x41, - 0x6b, 0x86, 0x3f, 0xd2, 0xf8, 0x15, 0xe1, 0x0c, 0x26, 0xcb, - 0x72, 0x9f, 0xb5, 0x58, 0xda, 0x37, 0x1d, 0xf0, 0x49, 0xa4, - 0x8e, 0x63, 0x7b, 0x96, 0xbc, 0x51, 0xe8, 0x05, 0x2f, 0xc2, - 0x40, 0xad, 0x87, 0x6a, 0xd3, 0x3e, 0x14, 0xf9, 0x0d, 0xe0, - 0xca, 0x27, 0x9e, 0x73, 0x59, 0xb4, 0x36, 0xdb, 0xf1, 0x1c, - 0xa5, 0x48, 0x62, 0x8f, 0x52, 0xbf, 0x95, 0x78, 0xc1, 0x2c, - 0x06, 0xeb, 0x69, 0x84, 0xae, 0x43, 0xfa, 0x17, 0x3d, 0xd0, - 0x24, 0xc9, 0xe3, 0x0e, 0xb7, 0x5a, 0x70, 0x9d, 0x1f, 0xf2, - 0xd8, 0x35, 0x8c, 0x61, 0x4b, 0xa6, 0xbe, 0x53, 0x79, 0x94, - 0x2d, 0xc0, 0xea, 0x07, 0x85, 0x68, 0x42, 0xaf, 0x16, 0xfb, - 0xd1, 0x3c, 0xc8, 0x25, 0x0f, 0xe2, 0x5b, 0xb6, 0x9c, 0x71, - 0xf3, 0x1e, 0x34, 0xd9, 0x60, 0x8d, 0xa7, 0x4a, 0x00, 0xee, - 0xc1, 0x2f, 0x9f, 0x71, 0x5e, 0xb0, 0x23, 0xcd, 0xe2, 0x0c, - 0xbc, 0x52, 0x7d, 0x93, 0x46, 0xa8, 0x87, 0x69, 0xd9, 0x37, - 0x18, 0xf6, 0x65, 0x8b, 0xa4, 0x4a, 0xfa, 0x14, 0x3b, 0xd5, - 0x8c, 0x62, 0x4d, 0xa3, 0x13, 0xfd, 0xd2, 0x3c, 0xaf, 0x41, - 0x6e, 0x80, 0x30, 0xde, 0xf1, 0x1f, 0xca, 0x24, 0x0b, 0xe5, - 0x55, 0xbb, 0x94, 0x7a, 0xe9, 0x07, 0x28, 0xc6, 0x76, 0x98, - 0xb7, 0x59, 0x05, 0xeb, 0xc4, 0x2a, 0x9a, 0x74, 0x5b, 0xb5, - 0x26, 0xc8, 0xe7, 0x09, 0xb9, 0x57, 0x78, 0x96, 0x43, 0xad, - 0x82, 0x6c, 0xdc, 0x32, 0x1d, 0xf3, 0x60, 0x8e, 0xa1, 0x4f, - 0xff, 0x11, 0x3e, 0xd0, 0x89, 0x67, 0x48, 0xa6, 0x16, 0xf8, - 0xd7, 0x39, 0xaa, 0x44, 0x6b, 0x85, 0x35, 0xdb, 0xf4, 0x1a, - 0xcf, 0x21, 0x0e, 0xe0, 0x50, 0xbe, 0x91, 0x7f, 0xec, 0x02, - 0x2d, 0xc3, 0x73, 0x9d, 0xb2, 0x5c, 0x0a, 0xe4, 0xcb, 0x25, - 0x95, 0x7b, 0x54, 0xba, 0x29, 0xc7, 0xe8, 0x06, 0xb6, 0x58, - 0x77, 0x99, 0x4c, 0xa2, 0x8d, 0x63, 0xd3, 0x3d, 0x12, 0xfc, - 0x6f, 0x81, 0xae, 0x40, 0xf0, 0x1e, 0x31, 0xdf, 0x86, 0x68, - 0x47, 0xa9, 0x19, 0xf7, 0xd8, 0x36, 0xa5, 0x4b, 0x64, 0x8a, - 0x3a, 0xd4, 0xfb, 0x15, 0xc0, 0x2e, 0x01, 0xef, 0x5f, 0xb1, - 0x9e, 0x70, 0xe3, 0x0d, 0x22, 0xcc, 0x7c, 0x92, 0xbd, 0x53, - 0x0f, 0xe1, 0xce, 0x20, 0x90, 0x7e, 0x51, 0xbf, 0x2c, 0xc2, - 0xed, 0x03, 0xb3, 0x5d, 0x72, 0x9c, 0x49, 0xa7, 0x88, 0x66, - 0xd6, 0x38, 0x17, 0xf9, 0x6a, 0x84, 0xab, 0x45, 0xf5, 0x1b, - 0x34, 0xda, 0x83, 0x6d, 0x42, 0xac, 0x1c, 0xf2, 0xdd, 0x33, - 0xa0, 0x4e, 0x61, 0x8f, 0x3f, 0xd1, 0xfe, 0x10, 0xc5, 0x2b, - 0x04, 0xea, 0x5a, 0xb4, 0x9b, 0x75, 0xe6, 0x08, 0x27, 0xc9, - 0x79, 0x97, 0xb8, 0x56, 0x00, 0xef, 0xc3, 0x2c, 0x9b, 0x74, - 0x58, 0xb7, 0x2b, 0xc4, 0xe8, 0x07, 0xb0, 0x5f, 0x73, 0x9c, - 0x56, 0xb9, 0x95, 0x7a, 0xcd, 0x22, 0x0e, 0xe1, 0x7d, 0x92, - 0xbe, 0x51, 0xe6, 0x09, 0x25, 0xca, 0xac, 0x43, 0x6f, 0x80, - 0x37, 0xd8, 0xf4, 0x1b, 0x87, 0x68, 0x44, 0xab, 0x1c, 0xf3, - 0xdf, 0x30, 0xfa, 0x15, 0x39, 0xd6, 0x61, 0x8e, 0xa2, 0x4d, - 0xd1, 0x3e, 0x12, 0xfd, 0x4a, 0xa5, 0x89, 0x66, 0x45, 0xaa, - 0x86, 0x69, 0xde, 0x31, 0x1d, 0xf2, 0x6e, 0x81, 0xad, 0x42, - 0xf5, 0x1a, 0x36, 0xd9, 0x13, 0xfc, 0xd0, 0x3f, 0x88, 0x67, - 0x4b, 0xa4, 0x38, 0xd7, 0xfb, 0x14, 0xa3, 0x4c, 0x60, 0x8f, - 0xe9, 0x06, 0x2a, 0xc5, 0x72, 0x9d, 0xb1, 0x5e, 0xc2, 0x2d, - 0x01, 0xee, 0x59, 0xb6, 0x9a, 0x75, 0xbf, 0x50, 0x7c, 0x93, - 0x24, 0xcb, 0xe7, 0x08, 0x94, 0x7b, 0x57, 0xb8, 0x0f, 0xe0, - 0xcc, 0x23, 0x8a, 0x65, 0x49, 0xa6, 0x11, 0xfe, 0xd2, 0x3d, - 0xa1, 0x4e, 0x62, 0x8d, 0x3a, 0xd5, 0xf9, 0x16, 0xdc, 0x33, - 0x1f, 0xf0, 0x47, 0xa8, 0x84, 0x6b, 0xf7, 0x18, 0x34, 0xdb, - 0x6c, 0x83, 0xaf, 0x40, 0x26, 0xc9, 0xe5, 0x0a, 0xbd, 0x52, - 0x7e, 0x91, 0x0d, 0xe2, 0xce, 0x21, 0x96, 0x79, 0x55, 0xba, - 0x70, 0x9f, 0xb3, 0x5c, 0xeb, 0x04, 0x28, 0xc7, 0x5b, 0xb4, - 0x98, 0x77, 0xc0, 0x2f, 0x03, 0xec, 0xcf, 0x20, 0x0c, 0xe3, - 0x54, 0xbb, 0x97, 0x78, 0xe4, 0x0b, 0x27, 0xc8, 0x7f, 0x90, - 0xbc, 0x53, 0x99, 0x76, 0x5a, 0xb5, 0x02, 0xed, 0xc1, 0x2e, - 0xb2, 0x5d, 0x71, 0x9e, 0x29, 0xc6, 0xea, 0x05, 0x63, 0x8c, - 0xa0, 0x4f, 0xf8, 0x17, 0x3b, 0xd4, 0x48, 0xa7, 0x8b, 0x64, - 0xd3, 0x3c, 0x10, 0xff, 0x35, 0xda, 0xf6, 0x19, 0xae, 0x41, - 0x6d, 0x82, 0x1e, 0xf1, 0xdd, 0x32, 0x85, 0x6a, 0x46, 0xa9, - 0x00, 0xf0, 0xfd, 0x0d, 0xe7, 0x17, 0x1a, 0xea, 0xd3, 0x23, - 0x2e, 0xde, 0x34, 0xc4, 0xc9, 0x39, 0xbb, 0x4b, 0x46, 0xb6, - 0x5c, 0xac, 0xa1, 0x51, 0x68, 0x98, 0x95, 0x65, 0x8f, 0x7f, - 0x72, 0x82, 0x6b, 0x9b, 0x96, 0x66, 0x8c, 0x7c, 0x71, 0x81, - 0xb8, 0x48, 0x45, 0xb5, 0x5f, 0xaf, 0xa2, 0x52, 0xd0, 0x20, - 0x2d, 0xdd, 0x37, 0xc7, 0xca, 0x3a, 0x03, 0xf3, 0xfe, 0x0e, - 0xe4, 0x14, 0x19, 0xe9, 0xd6, 0x26, 0x2b, 0xdb, 0x31, 0xc1, - 0xcc, 0x3c, 0x05, 0xf5, 0xf8, 0x08, 0xe2, 0x12, 0x1f, 0xef, - 0x6d, 0x9d, 0x90, 0x60, 0x8a, 0x7a, 0x77, 0x87, 0xbe, 0x4e, - 0x43, 0xb3, 0x59, 0xa9, 0xa4, 0x54, 0xbd, 0x4d, 0x40, 0xb0, - 0x5a, 0xaa, 0xa7, 0x57, 0x6e, 0x9e, 0x93, 0x63, 0x89, 0x79, - 0x74, 0x84, 0x06, 0xf6, 0xfb, 0x0b, 0xe1, 0x11, 0x1c, 0xec, - 0xd5, 0x25, 0x28, 0xd8, 0x32, 0xc2, 0xcf, 0x3f, 0xb1, 0x41, - 0x4c, 0xbc, 0x56, 0xa6, 0xab, 0x5b, 0x62, 0x92, 0x9f, 0x6f, - 0x85, 0x75, 0x78, 0x88, 0x0a, 0xfa, 0xf7, 0x07, 0xed, 0x1d, - 0x10, 0xe0, 0xd9, 0x29, 0x24, 0xd4, 0x3e, 0xce, 0xc3, 0x33, - 0xda, 0x2a, 0x27, 0xd7, 0x3d, 0xcd, 0xc0, 0x30, 0x09, 0xf9, - 0xf4, 0x04, 0xee, 0x1e, 0x13, 0xe3, 0x61, 0x91, 0x9c, 0x6c, - 0x86, 0x76, 0x7b, 0x8b, 0xb2, 0x42, 0x4f, 0xbf, 0x55, 0xa5, - 0xa8, 0x58, 0x67, 0x97, 0x9a, 0x6a, 0x80, 0x70, 0x7d, 0x8d, - 0xb4, 0x44, 0x49, 0xb9, 0x53, 0xa3, 0xae, 0x5e, 0xdc, 0x2c, - 0x21, 0xd1, 0x3b, 0xcb, 0xc6, 0x36, 0x0f, 0xff, 0xf2, 0x02, - 0xe8, 0x18, 0x15, 0xe5, 0x0c, 0xfc, 0xf1, 0x01, 0xeb, 0x1b, - 0x16, 0xe6, 0xdf, 0x2f, 0x22, 0xd2, 0x38, 0xc8, 0xc5, 0x35, - 0xb7, 0x47, 0x4a, 0xba, 0x50, 0xa0, 0xad, 0x5d, 0x64, 0x94, - 0x99, 0x69, 0x83, 0x73, 0x7e, 0x8e, 0x00, 0xf1, 0xff, 0x0e, - 0xe3, 0x12, 0x1c, 0xed, 0xdb, 0x2a, 0x24, 0xd5, 0x38, 0xc9, - 0xc7, 0x36, 0xab, 0x5a, 0x54, 0xa5, 0x48, 0xb9, 0xb7, 0x46, - 0x70, 0x81, 0x8f, 0x7e, 0x93, 0x62, 0x6c, 0x9d, 0x4b, 0xba, - 0xb4, 0x45, 0xa8, 0x59, 0x57, 0xa6, 0x90, 0x61, 0x6f, 0x9e, - 0x73, 0x82, 0x8c, 0x7d, 0xe0, 0x11, 0x1f, 0xee, 0x03, 0xf2, - 0xfc, 0x0d, 0x3b, 0xca, 0xc4, 0x35, 0xd8, 0x29, 0x27, 0xd6, - 0x96, 0x67, 0x69, 0x98, 0x75, 0x84, 0x8a, 0x7b, 0x4d, 0xbc, - 0xb2, 0x43, 0xae, 0x5f, 0x51, 0xa0, 0x3d, 0xcc, 0xc2, 0x33, - 0xde, 0x2f, 0x21, 0xd0, 0xe6, 0x17, 0x19, 0xe8, 0x05, 0xf4, - 0xfa, 0x0b, 0xdd, 0x2c, 0x22, 0xd3, 0x3e, 0xcf, 0xc1, 0x30, - 0x06, 0xf7, 0xf9, 0x08, 0xe5, 0x14, 0x1a, 0xeb, 0x76, 0x87, - 0x89, 0x78, 0x95, 0x64, 0x6a, 0x9b, 0xad, 0x5c, 0x52, 0xa3, - 0x4e, 0xbf, 0xb1, 0x40, 0x31, 0xc0, 0xce, 0x3f, 0xd2, 0x23, - 0x2d, 0xdc, 0xea, 0x1b, 0x15, 0xe4, 0x09, 0xf8, 0xf6, 0x07, - 0x9a, 0x6b, 0x65, 0x94, 0x79, 0x88, 0x86, 0x77, 0x41, 0xb0, - 0xbe, 0x4f, 0xa2, 0x53, 0x5d, 0xac, 0x7a, 0x8b, 0x85, 0x74, - 0x99, 0x68, 0x66, 0x97, 0xa1, 0x50, 0x5e, 0xaf, 0x42, 0xb3, - 0xbd, 0x4c, 0xd1, 0x20, 0x2e, 0xdf, 0x32, 0xc3, 0xcd, 0x3c, - 0x0a, 0xfb, 0xf5, 0x04, 0xe9, 0x18, 0x16, 0xe7, 0xa7, 0x56, - 0x58, 0xa9, 0x44, 0xb5, 0xbb, 0x4a, 0x7c, 0x8d, 0x83, 0x72, - 0x9f, 0x6e, 0x60, 0x91, 0x0c, 0xfd, 0xf3, 0x02, 0xef, 0x1e, - 0x10, 0xe1, 0xd7, 0x26, 0x28, 0xd9, 0x34, 0xc5, 0xcb, 0x3a, - 0xec, 0x1d, 0x13, 0xe2, 0x0f, 0xfe, 0xf0, 0x01, 0x37, 0xc6, - 0xc8, 0x39, 0xd4, 0x25, 0x2b, 0xda, 0x47, 0xb6, 0xb8, 0x49, - 0xa4, 0x55, 0x5b, 0xaa, 0x9c, 0x6d, 0x63, 0x92, 0x7f, 0x8e, - 0x80, 0x71, 0x00, 0xf2, 0xf9, 0x0b, 0xef, 0x1d, 0x16, 0xe4, - 0xc3, 0x31, 0x3a, 0xc8, 0x2c, 0xde, 0xd5, 0x27, 0x9b, 0x69, - 0x62, 0x90, 0x74, 0x86, 0x8d, 0x7f, 0x58, 0xaa, 0xa1, 0x53, - 0xb7, 0x45, 0x4e, 0xbc, 0x2b, 0xd9, 0xd2, 0x20, 0xc4, 0x36, - 0x3d, 0xcf, 0xe8, 0x1a, 0x11, 0xe3, 0x07, 0xf5, 0xfe, 0x0c, - 0xb0, 0x42, 0x49, 0xbb, 0x5f, 0xad, 0xa6, 0x54, 0x73, 0x81, - 0x8a, 0x78, 0x9c, 0x6e, 0x65, 0x97, 0x56, 0xa4, 0xaf, 0x5d, - 0xb9, 0x4b, 0x40, 0xb2, 0x95, 0x67, 0x6c, 0x9e, 0x7a, 0x88, - 0x83, 0x71, 0xcd, 0x3f, 0x34, 0xc6, 0x22, 0xd0, 0xdb, 0x29, - 0x0e, 0xfc, 0xf7, 0x05, 0xe1, 0x13, 0x18, 0xea, 0x7d, 0x8f, - 0x84, 0x76, 0x92, 0x60, 0x6b, 0x99, 0xbe, 0x4c, 0x47, 0xb5, - 0x51, 0xa3, 0xa8, 0x5a, 0xe6, 0x14, 0x1f, 0xed, 0x09, 0xfb, - 0xf0, 0x02, 0x25, 0xd7, 0xdc, 0x2e, 0xca, 0x38, 0x33, 0xc1, - 0xac, 0x5e, 0x55, 0xa7, 0x43, 0xb1, 0xba, 0x48, 0x6f, 0x9d, - 0x96, 0x64, 0x80, 0x72, 0x79, 0x8b, 0x37, 0xc5, 0xce, 0x3c, - 0xd8, 0x2a, 0x21, 0xd3, 0xf4, 0x06, 0x0d, 0xff, 0x1b, 0xe9, - 0xe2, 0x10, 0x87, 0x75, 0x7e, 0x8c, 0x68, 0x9a, 0x91, 0x63, - 0x44, 0xb6, 0xbd, 0x4f, 0xab, 0x59, 0x52, 0xa0, 0x1c, 0xee, - 0xe5, 0x17, 0xf3, 0x01, 0x0a, 0xf8, 0xdf, 0x2d, 0x26, 0xd4, - 0x30, 0xc2, 0xc9, 0x3b, 0xfa, 0x08, 0x03, 0xf1, 0x15, 0xe7, - 0xec, 0x1e, 0x39, 0xcb, 0xc0, 0x32, 0xd6, 0x24, 0x2f, 0xdd, - 0x61, 0x93, 0x98, 0x6a, 0x8e, 0x7c, 0x77, 0x85, 0xa2, 0x50, - 0x5b, 0xa9, 0x4d, 0xbf, 0xb4, 0x46, 0xd1, 0x23, 0x28, 0xda, - 0x3e, 0xcc, 0xc7, 0x35, 0x12, 0xe0, 0xeb, 0x19, 0xfd, 0x0f, - 0x04, 0xf6, 0x4a, 0xb8, 0xb3, 0x41, 0xa5, 0x57, 0x5c, 0xae, - 0x89, 0x7b, 0x70, 0x82, 0x66, 0x94, 0x9f, 0x6d, 0x00, 0xf3, - 0xfb, 0x08, 0xeb, 0x18, 0x10, 0xe3, 0xcb, 0x38, 0x30, 0xc3, - 0x20, 0xd3, 0xdb, 0x28, 0x8b, 0x78, 0x70, 0x83, 0x60, 0x93, - 0x9b, 0x68, 0x40, 0xb3, 0xbb, 0x48, 0xab, 0x58, 0x50, 0xa3, - 0x0b, 0xf8, 0xf0, 0x03, 0xe0, 0x13, 0x1b, 0xe8, 0xc0, 0x33, - 0x3b, 0xc8, 0x2b, 0xd8, 0xd0, 0x23, 0x80, 0x73, 0x7b, 0x88, - 0x6b, 0x98, 0x90, 0x63, 0x4b, 0xb8, 0xb0, 0x43, 0xa0, 0x53, - 0x5b, 0xa8, 0x16, 0xe5, 0xed, 0x1e, 0xfd, 0x0e, 0x06, 0xf5, - 0xdd, 0x2e, 0x26, 0xd5, 0x36, 0xc5, 0xcd, 0x3e, 0x9d, 0x6e, - 0x66, 0x95, 0x76, 0x85, 0x8d, 0x7e, 0x56, 0xa5, 0xad, 0x5e, - 0xbd, 0x4e, 0x46, 0xb5, 0x1d, 0xee, 0xe6, 0x15, 0xf6, 0x05, - 0x0d, 0xfe, 0xd6, 0x25, 0x2d, 0xde, 0x3d, 0xce, 0xc6, 0x35, - 0x96, 0x65, 0x6d, 0x9e, 0x7d, 0x8e, 0x86, 0x75, 0x5d, 0xae, - 0xa6, 0x55, 0xb6, 0x45, 0x4d, 0xbe, 0x2c, 0xdf, 0xd7, 0x24, - 0xc7, 0x34, 0x3c, 0xcf, 0xe7, 0x14, 0x1c, 0xef, 0x0c, 0xff, - 0xf7, 0x04, 0xa7, 0x54, 0x5c, 0xaf, 0x4c, 0xbf, 0xb7, 0x44, - 0x6c, 0x9f, 0x97, 0x64, 0x87, 0x74, 0x7c, 0x8f, 0x27, 0xd4, - 0xdc, 0x2f, 0xcc, 0x3f, 0x37, 0xc4, 0xec, 0x1f, 0x17, 0xe4, - 0x07, 0xf4, 0xfc, 0x0f, 0xac, 0x5f, 0x57, 0xa4, 0x47, 0xb4, - 0xbc, 0x4f, 0x67, 0x94, 0x9c, 0x6f, 0x8c, 0x7f, 0x77, 0x84, - 0x3a, 0xc9, 0xc1, 0x32, 0xd1, 0x22, 0x2a, 0xd9, 0xf1, 0x02, - 0x0a, 0xf9, 0x1a, 0xe9, 0xe1, 0x12, 0xb1, 0x42, 0x4a, 0xb9, - 0x5a, 0xa9, 0xa1, 0x52, 0x7a, 0x89, 0x81, 0x72, 0x91, 0x62, - 0x6a, 0x99, 0x31, 0xc2, 0xca, 0x39, 0xda, 0x29, 0x21, 0xd2, - 0xfa, 0x09, 0x01, 0xf2, 0x11, 0xe2, 0xea, 0x19, 0xba, 0x49, - 0x41, 0xb2, 0x51, 0xa2, 0xaa, 0x59, 0x71, 0x82, 0x8a, 0x79, - 0x9a, 0x69, 0x61, 0x92, 0x00, 0xf4, 0xf5, 0x01, 0xf7, 0x03, - 0x02, 0xf6, 0xf3, 0x07, 0x06, 0xf2, 0x04, 0xf0, 0xf1, 0x05, - 0xfb, 0x0f, 0x0e, 0xfa, 0x0c, 0xf8, 0xf9, 0x0d, 0x08, 0xfc, - 0xfd, 0x09, 0xff, 0x0b, 0x0a, 0xfe, 0xeb, 0x1f, 0x1e, 0xea, - 0x1c, 0xe8, 0xe9, 0x1d, 0x18, 0xec, 0xed, 0x19, 0xef, 0x1b, - 0x1a, 0xee, 0x10, 0xe4, 0xe5, 0x11, 0xe7, 0x13, 0x12, 0xe6, - 0xe3, 0x17, 0x16, 0xe2, 0x14, 0xe0, 0xe1, 0x15, 0xcb, 0x3f, - 0x3e, 0xca, 0x3c, 0xc8, 0xc9, 0x3d, 0x38, 0xcc, 0xcd, 0x39, - 0xcf, 0x3b, 0x3a, 0xce, 0x30, 0xc4, 0xc5, 0x31, 0xc7, 0x33, - 0x32, 0xc6, 0xc3, 0x37, 0x36, 0xc2, 0x34, 0xc0, 0xc1, 0x35, - 0x20, 0xd4, 0xd5, 0x21, 0xd7, 0x23, 0x22, 0xd6, 0xd3, 0x27, - 0x26, 0xd2, 0x24, 0xd0, 0xd1, 0x25, 0xdb, 0x2f, 0x2e, 0xda, - 0x2c, 0xd8, 0xd9, 0x2d, 0x28, 0xdc, 0xdd, 0x29, 0xdf, 0x2b, - 0x2a, 0xde, 0x8b, 0x7f, 0x7e, 0x8a, 0x7c, 0x88, 0x89, 0x7d, - 0x78, 0x8c, 0x8d, 0x79, 0x8f, 0x7b, 0x7a, 0x8e, 0x70, 0x84, - 0x85, 0x71, 0x87, 0x73, 0x72, 0x86, 0x83, 0x77, 0x76, 0x82, - 0x74, 0x80, 0x81, 0x75, 0x60, 0x94, 0x95, 0x61, 0x97, 0x63, - 0x62, 0x96, 0x93, 0x67, 0x66, 0x92, 0x64, 0x90, 0x91, 0x65, - 0x9b, 0x6f, 0x6e, 0x9a, 0x6c, 0x98, 0x99, 0x6d, 0x68, 0x9c, - 0x9d, 0x69, 0x9f, 0x6b, 0x6a, 0x9e, 0x40, 0xb4, 0xb5, 0x41, - 0xb7, 0x43, 0x42, 0xb6, 0xb3, 0x47, 0x46, 0xb2, 0x44, 0xb0, - 0xb1, 0x45, 0xbb, 0x4f, 0x4e, 0xba, 0x4c, 0xb8, 0xb9, 0x4d, - 0x48, 0xbc, 0xbd, 0x49, 0xbf, 0x4b, 0x4a, 0xbe, 0xab, 0x5f, - 0x5e, 0xaa, 0x5c, 0xa8, 0xa9, 0x5d, 0x58, 0xac, 0xad, 0x59, - 0xaf, 0x5b, 0x5a, 0xae, 0x50, 0xa4, 0xa5, 0x51, 0xa7, 0x53, - 0x52, 0xa6, 0xa3, 0x57, 0x56, 0xa2, 0x54, 0xa0, 0xa1, 0x55, - 0x00, 0xf5, 0xf7, 0x02, 0xf3, 0x06, 0x04, 0xf1, 0xfb, 0x0e, - 0x0c, 0xf9, 0x08, 0xfd, 0xff, 0x0a, 0xeb, 0x1e, 0x1c, 0xe9, - 0x18, 0xed, 0xef, 0x1a, 0x10, 0xe5, 0xe7, 0x12, 0xe3, 0x16, - 0x14, 0xe1, 0xcb, 0x3e, 0x3c, 0xc9, 0x38, 0xcd, 0xcf, 0x3a, - 0x30, 0xc5, 0xc7, 0x32, 0xc3, 0x36, 0x34, 0xc1, 0x20, 0xd5, - 0xd7, 0x22, 0xd3, 0x26, 0x24, 0xd1, 0xdb, 0x2e, 0x2c, 0xd9, - 0x28, 0xdd, 0xdf, 0x2a, 0x8b, 0x7e, 0x7c, 0x89, 0x78, 0x8d, - 0x8f, 0x7a, 0x70, 0x85, 0x87, 0x72, 0x83, 0x76, 0x74, 0x81, - 0x60, 0x95, 0x97, 0x62, 0x93, 0x66, 0x64, 0x91, 0x9b, 0x6e, - 0x6c, 0x99, 0x68, 0x9d, 0x9f, 0x6a, 0x40, 0xb5, 0xb7, 0x42, - 0xb3, 0x46, 0x44, 0xb1, 0xbb, 0x4e, 0x4c, 0xb9, 0x48, 0xbd, - 0xbf, 0x4a, 0xab, 0x5e, 0x5c, 0xa9, 0x58, 0xad, 0xaf, 0x5a, - 0x50, 0xa5, 0xa7, 0x52, 0xa3, 0x56, 0x54, 0xa1, 0x0b, 0xfe, - 0xfc, 0x09, 0xf8, 0x0d, 0x0f, 0xfa, 0xf0, 0x05, 0x07, 0xf2, - 0x03, 0xf6, 0xf4, 0x01, 0xe0, 0x15, 0x17, 0xe2, 0x13, 0xe6, - 0xe4, 0x11, 0x1b, 0xee, 0xec, 0x19, 0xe8, 0x1d, 0x1f, 0xea, - 0xc0, 0x35, 0x37, 0xc2, 0x33, 0xc6, 0xc4, 0x31, 0x3b, 0xce, - 0xcc, 0x39, 0xc8, 0x3d, 0x3f, 0xca, 0x2b, 0xde, 0xdc, 0x29, - 0xd8, 0x2d, 0x2f, 0xda, 0xd0, 0x25, 0x27, 0xd2, 0x23, 0xd6, - 0xd4, 0x21, 0x80, 0x75, 0x77, 0x82, 0x73, 0x86, 0x84, 0x71, - 0x7b, 0x8e, 0x8c, 0x79, 0x88, 0x7d, 0x7f, 0x8a, 0x6b, 0x9e, - 0x9c, 0x69, 0x98, 0x6d, 0x6f, 0x9a, 0x90, 0x65, 0x67, 0x92, - 0x63, 0x96, 0x94, 0x61, 0x4b, 0xbe, 0xbc, 0x49, 0xb8, 0x4d, - 0x4f, 0xba, 0xb0, 0x45, 0x47, 0xb2, 0x43, 0xb6, 0xb4, 0x41, - 0xa0, 0x55, 0x57, 0xa2, 0x53, 0xa6, 0xa4, 0x51, 0x5b, 0xae, - 0xac, 0x59, 0xa8, 0x5d, 0x5f, 0xaa, 0x00, 0xf6, 0xf1, 0x07, - 0xff, 0x09, 0x0e, 0xf8, 0xe3, 0x15, 0x12, 0xe4, 0x1c, 0xea, - 0xed, 0x1b, 0xdb, 0x2d, 0x2a, 0xdc, 0x24, 0xd2, 0xd5, 0x23, - 0x38, 0xce, 0xc9, 0x3f, 0xc7, 0x31, 0x36, 0xc0, 0xab, 0x5d, - 0x5a, 0xac, 0x54, 0xa2, 0xa5, 0x53, 0x48, 0xbe, 0xb9, 0x4f, - 0xb7, 0x41, 0x46, 0xb0, 0x70, 0x86, 0x81, 0x77, 0x8f, 0x79, - 0x7e, 0x88, 0x93, 0x65, 0x62, 0x94, 0x6c, 0x9a, 0x9d, 0x6b, - 0x4b, 0xbd, 0xba, 0x4c, 0xb4, 0x42, 0x45, 0xb3, 0xa8, 0x5e, - 0x59, 0xaf, 0x57, 0xa1, 0xa6, 0x50, 0x90, 0x66, 0x61, 0x97, - 0x6f, 0x99, 0x9e, 0x68, 0x73, 0x85, 0x82, 0x74, 0x8c, 0x7a, - 0x7d, 0x8b, 0xe0, 0x16, 0x11, 0xe7, 0x1f, 0xe9, 0xee, 0x18, - 0x03, 0xf5, 0xf2, 0x04, 0xfc, 0x0a, 0x0d, 0xfb, 0x3b, 0xcd, - 0xca, 0x3c, 0xc4, 0x32, 0x35, 0xc3, 0xd8, 0x2e, 0x29, 0xdf, - 0x27, 0xd1, 0xd6, 0x20, 0x96, 0x60, 0x67, 0x91, 0x69, 0x9f, - 0x98, 0x6e, 0x75, 0x83, 0x84, 0x72, 0x8a, 0x7c, 0x7b, 0x8d, - 0x4d, 0xbb, 0xbc, 0x4a, 0xb2, 0x44, 0x43, 0xb5, 0xae, 0x58, - 0x5f, 0xa9, 0x51, 0xa7, 0xa0, 0x56, 0x3d, 0xcb, 0xcc, 0x3a, - 0xc2, 0x34, 0x33, 0xc5, 0xde, 0x28, 0x2f, 0xd9, 0x21, 0xd7, - 0xd0, 0x26, 0xe6, 0x10, 0x17, 0xe1, 0x19, 0xef, 0xe8, 0x1e, - 0x05, 0xf3, 0xf4, 0x02, 0xfa, 0x0c, 0x0b, 0xfd, 0xdd, 0x2b, - 0x2c, 0xda, 0x22, 0xd4, 0xd3, 0x25, 0x3e, 0xc8, 0xcf, 0x39, - 0xc1, 0x37, 0x30, 0xc6, 0x06, 0xf0, 0xf7, 0x01, 0xf9, 0x0f, - 0x08, 0xfe, 0xe5, 0x13, 0x14, 0xe2, 0x1a, 0xec, 0xeb, 0x1d, - 0x76, 0x80, 0x87, 0x71, 0x89, 0x7f, 0x78, 0x8e, 0x95, 0x63, - 0x64, 0x92, 0x6a, 0x9c, 0x9b, 0x6d, 0xad, 0x5b, 0x5c, 0xaa, - 0x52, 0xa4, 0xa3, 0x55, 0x4e, 0xb8, 0xbf, 0x49, 0xb1, 0x47, - 0x40, 0xb6, 0x00, 0xf7, 0xf3, 0x04, 0xfb, 0x0c, 0x08, 0xff, - 0xeb, 0x1c, 0x18, 0xef, 0x10, 0xe7, 0xe3, 0x14, 0xcb, 0x3c, - 0x38, 0xcf, 0x30, 0xc7, 0xc3, 0x34, 0x20, 0xd7, 0xd3, 0x24, - 0xdb, 0x2c, 0x28, 0xdf, 0x8b, 0x7c, 0x78, 0x8f, 0x70, 0x87, - 0x83, 0x74, 0x60, 0x97, 0x93, 0x64, 0x9b, 0x6c, 0x68, 0x9f, - 0x40, 0xb7, 0xb3, 0x44, 0xbb, 0x4c, 0x48, 0xbf, 0xab, 0x5c, - 0x58, 0xaf, 0x50, 0xa7, 0xa3, 0x54, 0x0b, 0xfc, 0xf8, 0x0f, - 0xf0, 0x07, 0x03, 0xf4, 0xe0, 0x17, 0x13, 0xe4, 0x1b, 0xec, - 0xe8, 0x1f, 0xc0, 0x37, 0x33, 0xc4, 0x3b, 0xcc, 0xc8, 0x3f, - 0x2b, 0xdc, 0xd8, 0x2f, 0xd0, 0x27, 0x23, 0xd4, 0x80, 0x77, - 0x73, 0x84, 0x7b, 0x8c, 0x88, 0x7f, 0x6b, 0x9c, 0x98, 0x6f, - 0x90, 0x67, 0x63, 0x94, 0x4b, 0xbc, 0xb8, 0x4f, 0xb0, 0x47, - 0x43, 0xb4, 0xa0, 0x57, 0x53, 0xa4, 0x5b, 0xac, 0xa8, 0x5f, - 0x16, 0xe1, 0xe5, 0x12, 0xed, 0x1a, 0x1e, 0xe9, 0xfd, 0x0a, - 0x0e, 0xf9, 0x06, 0xf1, 0xf5, 0x02, 0xdd, 0x2a, 0x2e, 0xd9, - 0x26, 0xd1, 0xd5, 0x22, 0x36, 0xc1, 0xc5, 0x32, 0xcd, 0x3a, - 0x3e, 0xc9, 0x9d, 0x6a, 0x6e, 0x99, 0x66, 0x91, 0x95, 0x62, - 0x76, 0x81, 0x85, 0x72, 0x8d, 0x7a, 0x7e, 0x89, 0x56, 0xa1, - 0xa5, 0x52, 0xad, 0x5a, 0x5e, 0xa9, 0xbd, 0x4a, 0x4e, 0xb9, - 0x46, 0xb1, 0xb5, 0x42, 0x1d, 0xea, 0xee, 0x19, 0xe6, 0x11, - 0x15, 0xe2, 0xf6, 0x01, 0x05, 0xf2, 0x0d, 0xfa, 0xfe, 0x09, - 0xd6, 0x21, 0x25, 0xd2, 0x2d, 0xda, 0xde, 0x29, 0x3d, 0xca, - 0xce, 0x39, 0xc6, 0x31, 0x35, 0xc2, 0x96, 0x61, 0x65, 0x92, - 0x6d, 0x9a, 0x9e, 0x69, 0x7d, 0x8a, 0x8e, 0x79, 0x86, 0x71, - 0x75, 0x82, 0x5d, 0xaa, 0xae, 0x59, 0xa6, 0x51, 0x55, 0xa2, - 0xb6, 0x41, 0x45, 0xb2, 0x4d, 0xba, 0xbe, 0x49, 0x00, 0xf8, - 0xed, 0x15, 0xc7, 0x3f, 0x2a, 0xd2, 0x93, 0x6b, 0x7e, 0x86, - 0x54, 0xac, 0xb9, 0x41, 0x3b, 0xc3, 0xd6, 0x2e, 0xfc, 0x04, - 0x11, 0xe9, 0xa8, 0x50, 0x45, 0xbd, 0x6f, 0x97, 0x82, 0x7a, - 0x76, 0x8e, 0x9b, 0x63, 0xb1, 0x49, 0x5c, 0xa4, 0xe5, 0x1d, - 0x08, 0xf0, 0x22, 0xda, 0xcf, 0x37, 0x4d, 0xb5, 0xa0, 0x58, - 0x8a, 0x72, 0x67, 0x9f, 0xde, 0x26, 0x33, 0xcb, 0x19, 0xe1, - 0xf4, 0x0c, 0xec, 0x14, 0x01, 0xf9, 0x2b, 0xd3, 0xc6, 0x3e, - 0x7f, 0x87, 0x92, 0x6a, 0xb8, 0x40, 0x55, 0xad, 0xd7, 0x2f, - 0x3a, 0xc2, 0x10, 0xe8, 0xfd, 0x05, 0x44, 0xbc, 0xa9, 0x51, - 0x83, 0x7b, 0x6e, 0x96, 0x9a, 0x62, 0x77, 0x8f, 0x5d, 0xa5, - 0xb0, 0x48, 0x09, 0xf1, 0xe4, 0x1c, 0xce, 0x36, 0x23, 0xdb, - 0xa1, 0x59, 0x4c, 0xb4, 0x66, 0x9e, 0x8b, 0x73, 0x32, 0xca, - 0xdf, 0x27, 0xf5, 0x0d, 0x18, 0xe0, 0xc5, 0x3d, 0x28, 0xd0, - 0x02, 0xfa, 0xef, 0x17, 0x56, 0xae, 0xbb, 0x43, 0x91, 0x69, - 0x7c, 0x84, 0xfe, 0x06, 0x13, 0xeb, 0x39, 0xc1, 0xd4, 0x2c, - 0x6d, 0x95, 0x80, 0x78, 0xaa, 0x52, 0x47, 0xbf, 0xb3, 0x4b, - 0x5e, 0xa6, 0x74, 0x8c, 0x99, 0x61, 0x20, 0xd8, 0xcd, 0x35, - 0xe7, 0x1f, 0x0a, 0xf2, 0x88, 0x70, 0x65, 0x9d, 0x4f, 0xb7, - 0xa2, 0x5a, 0x1b, 0xe3, 0xf6, 0x0e, 0xdc, 0x24, 0x31, 0xc9, - 0x29, 0xd1, 0xc4, 0x3c, 0xee, 0x16, 0x03, 0xfb, 0xba, 0x42, - 0x57, 0xaf, 0x7d, 0x85, 0x90, 0x68, 0x12, 0xea, 0xff, 0x07, - 0xd5, 0x2d, 0x38, 0xc0, 0x81, 0x79, 0x6c, 0x94, 0x46, 0xbe, - 0xab, 0x53, 0x5f, 0xa7, 0xb2, 0x4a, 0x98, 0x60, 0x75, 0x8d, - 0xcc, 0x34, 0x21, 0xd9, 0x0b, 0xf3, 0xe6, 0x1e, 0x64, 0x9c, - 0x89, 0x71, 0xa3, 0x5b, 0x4e, 0xb6, 0xf7, 0x0f, 0x1a, 0xe2, - 0x30, 0xc8, 0xdd, 0x25, 0x00, 0xf9, 0xef, 0x16, 0xc3, 0x3a, - 0x2c, 0xd5, 0x9b, 0x62, 0x74, 0x8d, 0x58, 0xa1, 0xb7, 0x4e, - 0x2b, 0xd2, 0xc4, 0x3d, 0xe8, 0x11, 0x07, 0xfe, 0xb0, 0x49, - 0x5f, 0xa6, 0x73, 0x8a, 0x9c, 0x65, 0x56, 0xaf, 0xb9, 0x40, - 0x95, 0x6c, 0x7a, 0x83, 0xcd, 0x34, 0x22, 0xdb, 0x0e, 0xf7, - 0xe1, 0x18, 0x7d, 0x84, 0x92, 0x6b, 0xbe, 0x47, 0x51, 0xa8, - 0xe6, 0x1f, 0x09, 0xf0, 0x25, 0xdc, 0xca, 0x33, 0xac, 0x55, - 0x43, 0xba, 0x6f, 0x96, 0x80, 0x79, 0x37, 0xce, 0xd8, 0x21, - 0xf4, 0x0d, 0x1b, 0xe2, 0x87, 0x7e, 0x68, 0x91, 0x44, 0xbd, - 0xab, 0x52, 0x1c, 0xe5, 0xf3, 0x0a, 0xdf, 0x26, 0x30, 0xc9, - 0xfa, 0x03, 0x15, 0xec, 0x39, 0xc0, 0xd6, 0x2f, 0x61, 0x98, - 0x8e, 0x77, 0xa2, 0x5b, 0x4d, 0xb4, 0xd1, 0x28, 0x3e, 0xc7, - 0x12, 0xeb, 0xfd, 0x04, 0x4a, 0xb3, 0xa5, 0x5c, 0x89, 0x70, - 0x66, 0x9f, 0x45, 0xbc, 0xaa, 0x53, 0x86, 0x7f, 0x69, 0x90, - 0xde, 0x27, 0x31, 0xc8, 0x1d, 0xe4, 0xf2, 0x0b, 0x6e, 0x97, - 0x81, 0x78, 0xad, 0x54, 0x42, 0xbb, 0xf5, 0x0c, 0x1a, 0xe3, - 0x36, 0xcf, 0xd9, 0x20, 0x13, 0xea, 0xfc, 0x05, 0xd0, 0x29, - 0x3f, 0xc6, 0x88, 0x71, 0x67, 0x9e, 0x4b, 0xb2, 0xa4, 0x5d, - 0x38, 0xc1, 0xd7, 0x2e, 0xfb, 0x02, 0x14, 0xed, 0xa3, 0x5a, - 0x4c, 0xb5, 0x60, 0x99, 0x8f, 0x76, 0xe9, 0x10, 0x06, 0xff, - 0x2a, 0xd3, 0xc5, 0x3c, 0x72, 0x8b, 0x9d, 0x64, 0xb1, 0x48, - 0x5e, 0xa7, 0xc2, 0x3b, 0x2d, 0xd4, 0x01, 0xf8, 0xee, 0x17, - 0x59, 0xa0, 0xb6, 0x4f, 0x9a, 0x63, 0x75, 0x8c, 0xbf, 0x46, - 0x50, 0xa9, 0x7c, 0x85, 0x93, 0x6a, 0x24, 0xdd, 0xcb, 0x32, - 0xe7, 0x1e, 0x08, 0xf1, 0x94, 0x6d, 0x7b, 0x82, 0x57, 0xae, - 0xb8, 0x41, 0x0f, 0xf6, 0xe0, 0x19, 0xcc, 0x35, 0x23, 0xda, - 0x00, 0xfa, 0xe9, 0x13, 0xcf, 0x35, 0x26, 0xdc, 0x83, 0x79, - 0x6a, 0x90, 0x4c, 0xb6, 0xa5, 0x5f, 0x1b, 0xe1, 0xf2, 0x08, - 0xd4, 0x2e, 0x3d, 0xc7, 0x98, 0x62, 0x71, 0x8b, 0x57, 0xad, - 0xbe, 0x44, 0x36, 0xcc, 0xdf, 0x25, 0xf9, 0x03, 0x10, 0xea, - 0xb5, 0x4f, 0x5c, 0xa6, 0x7a, 0x80, 0x93, 0x69, 0x2d, 0xd7, - 0xc4, 0x3e, 0xe2, 0x18, 0x0b, 0xf1, 0xae, 0x54, 0x47, 0xbd, - 0x61, 0x9b, 0x88, 0x72, 0x6c, 0x96, 0x85, 0x7f, 0xa3, 0x59, - 0x4a, 0xb0, 0xef, 0x15, 0x06, 0xfc, 0x20, 0xda, 0xc9, 0x33, - 0x77, 0x8d, 0x9e, 0x64, 0xb8, 0x42, 0x51, 0xab, 0xf4, 0x0e, - 0x1d, 0xe7, 0x3b, 0xc1, 0xd2, 0x28, 0x5a, 0xa0, 0xb3, 0x49, - 0x95, 0x6f, 0x7c, 0x86, 0xd9, 0x23, 0x30, 0xca, 0x16, 0xec, - 0xff, 0x05, 0x41, 0xbb, 0xa8, 0x52, 0x8e, 0x74, 0x67, 0x9d, - 0xc2, 0x38, 0x2b, 0xd1, 0x0d, 0xf7, 0xe4, 0x1e, 0xd8, 0x22, - 0x31, 0xcb, 0x17, 0xed, 0xfe, 0x04, 0x5b, 0xa1, 0xb2, 0x48, - 0x94, 0x6e, 0x7d, 0x87, 0xc3, 0x39, 0x2a, 0xd0, 0x0c, 0xf6, - 0xe5, 0x1f, 0x40, 0xba, 0xa9, 0x53, 0x8f, 0x75, 0x66, 0x9c, - 0xee, 0x14, 0x07, 0xfd, 0x21, 0xdb, 0xc8, 0x32, 0x6d, 0x97, - 0x84, 0x7e, 0xa2, 0x58, 0x4b, 0xb1, 0xf5, 0x0f, 0x1c, 0xe6, - 0x3a, 0xc0, 0xd3, 0x29, 0x76, 0x8c, 0x9f, 0x65, 0xb9, 0x43, - 0x50, 0xaa, 0xb4, 0x4e, 0x5d, 0xa7, 0x7b, 0x81, 0x92, 0x68, - 0x37, 0xcd, 0xde, 0x24, 0xf8, 0x02, 0x11, 0xeb, 0xaf, 0x55, - 0x46, 0xbc, 0x60, 0x9a, 0x89, 0x73, 0x2c, 0xd6, 0xc5, 0x3f, - 0xe3, 0x19, 0x0a, 0xf0, 0x82, 0x78, 0x6b, 0x91, 0x4d, 0xb7, - 0xa4, 0x5e, 0x01, 0xfb, 0xe8, 0x12, 0xce, 0x34, 0x27, 0xdd, - 0x99, 0x63, 0x70, 0x8a, 0x56, 0xac, 0xbf, 0x45, 0x1a, 0xe0, - 0xf3, 0x09, 0xd5, 0x2f, 0x3c, 0xc6, 0x00, 0xfb, 0xeb, 0x10, - 0xcb, 0x30, 0x20, 0xdb, 0x8b, 0x70, 0x60, 0x9b, 0x40, 0xbb, - 0xab, 0x50, 0x0b, 0xf0, 0xe0, 0x1b, 0xc0, 0x3b, 0x2b, 0xd0, - 0x80, 0x7b, 0x6b, 0x90, 0x4b, 0xb0, 0xa0, 0x5b, 0x16, 0xed, - 0xfd, 0x06, 0xdd, 0x26, 0x36, 0xcd, 0x9d, 0x66, 0x76, 0x8d, - 0x56, 0xad, 0xbd, 0x46, 0x1d, 0xe6, 0xf6, 0x0d, 0xd6, 0x2d, - 0x3d, 0xc6, 0x96, 0x6d, 0x7d, 0x86, 0x5d, 0xa6, 0xb6, 0x4d, - 0x2c, 0xd7, 0xc7, 0x3c, 0xe7, 0x1c, 0x0c, 0xf7, 0xa7, 0x5c, - 0x4c, 0xb7, 0x6c, 0x97, 0x87, 0x7c, 0x27, 0xdc, 0xcc, 0x37, - 0xec, 0x17, 0x07, 0xfc, 0xac, 0x57, 0x47, 0xbc, 0x67, 0x9c, - 0x8c, 0x77, 0x3a, 0xc1, 0xd1, 0x2a, 0xf1, 0x0a, 0x1a, 0xe1, - 0xb1, 0x4a, 0x5a, 0xa1, 0x7a, 0x81, 0x91, 0x6a, 0x31, 0xca, - 0xda, 0x21, 0xfa, 0x01, 0x11, 0xea, 0xba, 0x41, 0x51, 0xaa, - 0x71, 0x8a, 0x9a, 0x61, 0x58, 0xa3, 0xb3, 0x48, 0x93, 0x68, - 0x78, 0x83, 0xd3, 0x28, 0x38, 0xc3, 0x18, 0xe3, 0xf3, 0x08, - 0x53, 0xa8, 0xb8, 0x43, 0x98, 0x63, 0x73, 0x88, 0xd8, 0x23, - 0x33, 0xc8, 0x13, 0xe8, 0xf8, 0x03, 0x4e, 0xb5, 0xa5, 0x5e, - 0x85, 0x7e, 0x6e, 0x95, 0xc5, 0x3e, 0x2e, 0xd5, 0x0e, 0xf5, - 0xe5, 0x1e, 0x45, 0xbe, 0xae, 0x55, 0x8e, 0x75, 0x65, 0x9e, - 0xce, 0x35, 0x25, 0xde, 0x05, 0xfe, 0xee, 0x15, 0x74, 0x8f, - 0x9f, 0x64, 0xbf, 0x44, 0x54, 0xaf, 0xff, 0x04, 0x14, 0xef, - 0x34, 0xcf, 0xdf, 0x24, 0x7f, 0x84, 0x94, 0x6f, 0xb4, 0x4f, - 0x5f, 0xa4, 0xf4, 0x0f, 0x1f, 0xe4, 0x3f, 0xc4, 0xd4, 0x2f, - 0x62, 0x99, 0x89, 0x72, 0xa9, 0x52, 0x42, 0xb9, 0xe9, 0x12, - 0x02, 0xf9, 0x22, 0xd9, 0xc9, 0x32, 0x69, 0x92, 0x82, 0x79, - 0xa2, 0x59, 0x49, 0xb2, 0xe2, 0x19, 0x09, 0xf2, 0x29, 0xd2, - 0xc2, 0x39, 0x00, 0xfc, 0xe5, 0x19, 0xd7, 0x2b, 0x32, 0xce, - 0xb3, 0x4f, 0x56, 0xaa, 0x64, 0x98, 0x81, 0x7d, 0x7b, 0x87, - 0x9e, 0x62, 0xac, 0x50, 0x49, 0xb5, 0xc8, 0x34, 0x2d, 0xd1, - 0x1f, 0xe3, 0xfa, 0x06, 0xf6, 0x0a, 0x13, 0xef, 0x21, 0xdd, - 0xc4, 0x38, 0x45, 0xb9, 0xa0, 0x5c, 0x92, 0x6e, 0x77, 0x8b, - 0x8d, 0x71, 0x68, 0x94, 0x5a, 0xa6, 0xbf, 0x43, 0x3e, 0xc2, - 0xdb, 0x27, 0xe9, 0x15, 0x0c, 0xf0, 0xf1, 0x0d, 0x14, 0xe8, - 0x26, 0xda, 0xc3, 0x3f, 0x42, 0xbe, 0xa7, 0x5b, 0x95, 0x69, - 0x70, 0x8c, 0x8a, 0x76, 0x6f, 0x93, 0x5d, 0xa1, 0xb8, 0x44, - 0x39, 0xc5, 0xdc, 0x20, 0xee, 0x12, 0x0b, 0xf7, 0x07, 0xfb, - 0xe2, 0x1e, 0xd0, 0x2c, 0x35, 0xc9, 0xb4, 0x48, 0x51, 0xad, - 0x63, 0x9f, 0x86, 0x7a, 0x7c, 0x80, 0x99, 0x65, 0xab, 0x57, - 0x4e, 0xb2, 0xcf, 0x33, 0x2a, 0xd6, 0x18, 0xe4, 0xfd, 0x01, - 0xff, 0x03, 0x1a, 0xe6, 0x28, 0xd4, 0xcd, 0x31, 0x4c, 0xb0, - 0xa9, 0x55, 0x9b, 0x67, 0x7e, 0x82, 0x84, 0x78, 0x61, 0x9d, - 0x53, 0xaf, 0xb6, 0x4a, 0x37, 0xcb, 0xd2, 0x2e, 0xe0, 0x1c, - 0x05, 0xf9, 0x09, 0xf5, 0xec, 0x10, 0xde, 0x22, 0x3b, 0xc7, - 0xba, 0x46, 0x5f, 0xa3, 0x6d, 0x91, 0x88, 0x74, 0x72, 0x8e, - 0x97, 0x6b, 0xa5, 0x59, 0x40, 0xbc, 0xc1, 0x3d, 0x24, 0xd8, - 0x16, 0xea, 0xf3, 0x0f, 0x0e, 0xf2, 0xeb, 0x17, 0xd9, 0x25, - 0x3c, 0xc0, 0xbd, 0x41, 0x58, 0xa4, 0x6a, 0x96, 0x8f, 0x73, - 0x75, 0x89, 0x90, 0x6c, 0xa2, 0x5e, 0x47, 0xbb, 0xc6, 0x3a, - 0x23, 0xdf, 0x11, 0xed, 0xf4, 0x08, 0xf8, 0x04, 0x1d, 0xe1, - 0x2f, 0xd3, 0xca, 0x36, 0x4b, 0xb7, 0xae, 0x52, 0x9c, 0x60, - 0x79, 0x85, 0x83, 0x7f, 0x66, 0x9a, 0x54, 0xa8, 0xb1, 0x4d, - 0x30, 0xcc, 0xd5, 0x29, 0xe7, 0x1b, 0x02, 0xfe, 0x00, 0xfd, - 0xe7, 0x1a, 0xd3, 0x2e, 0x34, 0xc9, 0xbb, 0x46, 0x5c, 0xa1, - 0x68, 0x95, 0x8f, 0x72, 0x6b, 0x96, 0x8c, 0x71, 0xb8, 0x45, - 0x5f, 0xa2, 0xd0, 0x2d, 0x37, 0xca, 0x03, 0xfe, 0xe4, 0x19, - 0xd6, 0x2b, 0x31, 0xcc, 0x05, 0xf8, 0xe2, 0x1f, 0x6d, 0x90, - 0x8a, 0x77, 0xbe, 0x43, 0x59, 0xa4, 0xbd, 0x40, 0x5a, 0xa7, - 0x6e, 0x93, 0x89, 0x74, 0x06, 0xfb, 0xe1, 0x1c, 0xd5, 0x28, - 0x32, 0xcf, 0xb1, 0x4c, 0x56, 0xab, 0x62, 0x9f, 0x85, 0x78, - 0x0a, 0xf7, 0xed, 0x10, 0xd9, 0x24, 0x3e, 0xc3, 0xda, 0x27, - 0x3d, 0xc0, 0x09, 0xf4, 0xee, 0x13, 0x61, 0x9c, 0x86, 0x7b, - 0xb2, 0x4f, 0x55, 0xa8, 0x67, 0x9a, 0x80, 0x7d, 0xb4, 0x49, - 0x53, 0xae, 0xdc, 0x21, 0x3b, 0xc6, 0x0f, 0xf2, 0xe8, 0x15, - 0x0c, 0xf1, 0xeb, 0x16, 0xdf, 0x22, 0x38, 0xc5, 0xb7, 0x4a, - 0x50, 0xad, 0x64, 0x99, 0x83, 0x7e, 0x7f, 0x82, 0x98, 0x65, - 0xac, 0x51, 0x4b, 0xb6, 0xc4, 0x39, 0x23, 0xde, 0x17, 0xea, - 0xf0, 0x0d, 0x14, 0xe9, 0xf3, 0x0e, 0xc7, 0x3a, 0x20, 0xdd, - 0xaf, 0x52, 0x48, 0xb5, 0x7c, 0x81, 0x9b, 0x66, 0xa9, 0x54, - 0x4e, 0xb3, 0x7a, 0x87, 0x9d, 0x60, 0x12, 0xef, 0xf5, 0x08, - 0xc1, 0x3c, 0x26, 0xdb, 0xc2, 0x3f, 0x25, 0xd8, 0x11, 0xec, - 0xf6, 0x0b, 0x79, 0x84, 0x9e, 0x63, 0xaa, 0x57, 0x4d, 0xb0, - 0xce, 0x33, 0x29, 0xd4, 0x1d, 0xe0, 0xfa, 0x07, 0x75, 0x88, - 0x92, 0x6f, 0xa6, 0x5b, 0x41, 0xbc, 0xa5, 0x58, 0x42, 0xbf, - 0x76, 0x8b, 0x91, 0x6c, 0x1e, 0xe3, 0xf9, 0x04, 0xcd, 0x30, - 0x2a, 0xd7, 0x18, 0xe5, 0xff, 0x02, 0xcb, 0x36, 0x2c, 0xd1, - 0xa3, 0x5e, 0x44, 0xb9, 0x70, 0x8d, 0x97, 0x6a, 0x73, 0x8e, - 0x94, 0x69, 0xa0, 0x5d, 0x47, 0xba, 0xc8, 0x35, 0x2f, 0xd2, - 0x1b, 0xe6, 0xfc, 0x01, 0x00, 0xfe, 0xe1, 0x1f, 0xdf, 0x21, - 0x3e, 0xc0, 0xa3, 0x5d, 0x42, 0xbc, 0x7c, 0x82, 0x9d, 0x63, - 0x5b, 0xa5, 0xba, 0x44, 0x84, 0x7a, 0x65, 0x9b, 0xf8, 0x06, - 0x19, 0xe7, 0x27, 0xd9, 0xc6, 0x38, 0xb6, 0x48, 0x57, 0xa9, - 0x69, 0x97, 0x88, 0x76, 0x15, 0xeb, 0xf4, 0x0a, 0xca, 0x34, - 0x2b, 0xd5, 0xed, 0x13, 0x0c, 0xf2, 0x32, 0xcc, 0xd3, 0x2d, - 0x4e, 0xb0, 0xaf, 0x51, 0x91, 0x6f, 0x70, 0x8e, 0x71, 0x8f, - 0x90, 0x6e, 0xae, 0x50, 0x4f, 0xb1, 0xd2, 0x2c, 0x33, 0xcd, - 0x0d, 0xf3, 0xec, 0x12, 0x2a, 0xd4, 0xcb, 0x35, 0xf5, 0x0b, - 0x14, 0xea, 0x89, 0x77, 0x68, 0x96, 0x56, 0xa8, 0xb7, 0x49, - 0xc7, 0x39, 0x26, 0xd8, 0x18, 0xe6, 0xf9, 0x07, 0x64, 0x9a, - 0x85, 0x7b, 0xbb, 0x45, 0x5a, 0xa4, 0x9c, 0x62, 0x7d, 0x83, - 0x43, 0xbd, 0xa2, 0x5c, 0x3f, 0xc1, 0xde, 0x20, 0xe0, 0x1e, - 0x01, 0xff, 0xe2, 0x1c, 0x03, 0xfd, 0x3d, 0xc3, 0xdc, 0x22, - 0x41, 0xbf, 0xa0, 0x5e, 0x9e, 0x60, 0x7f, 0x81, 0xb9, 0x47, - 0x58, 0xa6, 0x66, 0x98, 0x87, 0x79, 0x1a, 0xe4, 0xfb, 0x05, - 0xc5, 0x3b, 0x24, 0xda, 0x54, 0xaa, 0xb5, 0x4b, 0x8b, 0x75, - 0x6a, 0x94, 0xf7, 0x09, 0x16, 0xe8, 0x28, 0xd6, 0xc9, 0x37, - 0x0f, 0xf1, 0xee, 0x10, 0xd0, 0x2e, 0x31, 0xcf, 0xac, 0x52, - 0x4d, 0xb3, 0x73, 0x8d, 0x92, 0x6c, 0x93, 0x6d, 0x72, 0x8c, - 0x4c, 0xb2, 0xad, 0x53, 0x30, 0xce, 0xd1, 0x2f, 0xef, 0x11, - 0x0e, 0xf0, 0xc8, 0x36, 0x29, 0xd7, 0x17, 0xe9, 0xf6, 0x08, - 0x6b, 0x95, 0x8a, 0x74, 0xb4, 0x4a, 0x55, 0xab, 0x25, 0xdb, - 0xc4, 0x3a, 0xfa, 0x04, 0x1b, 0xe5, 0x86, 0x78, 0x67, 0x99, - 0x59, 0xa7, 0xb8, 0x46, 0x7e, 0x80, 0x9f, 0x61, 0xa1, 0x5f, - 0x40, 0xbe, 0xdd, 0x23, 0x3c, 0xc2, 0x02, 0xfc, 0xe3, 0x1d, - 0x00, 0xff, 0xe3, 0x1c, 0xdb, 0x24, 0x38, 0xc7, 0xab, 0x54, - 0x48, 0xb7, 0x70, 0x8f, 0x93, 0x6c, 0x4b, 0xb4, 0xa8, 0x57, - 0x90, 0x6f, 0x73, 0x8c, 0xe0, 0x1f, 0x03, 0xfc, 0x3b, 0xc4, - 0xd8, 0x27, 0x96, 0x69, 0x75, 0x8a, 0x4d, 0xb2, 0xae, 0x51, - 0x3d, 0xc2, 0xde, 0x21, 0xe6, 0x19, 0x05, 0xfa, 0xdd, 0x22, - 0x3e, 0xc1, 0x06, 0xf9, 0xe5, 0x1a, 0x76, 0x89, 0x95, 0x6a, - 0xad, 0x52, 0x4e, 0xb1, 0x31, 0xce, 0xd2, 0x2d, 0xea, 0x15, - 0x09, 0xf6, 0x9a, 0x65, 0x79, 0x86, 0x41, 0xbe, 0xa2, 0x5d, - 0x7a, 0x85, 0x99, 0x66, 0xa1, 0x5e, 0x42, 0xbd, 0xd1, 0x2e, - 0x32, 0xcd, 0x0a, 0xf5, 0xe9, 0x16, 0xa7, 0x58, 0x44, 0xbb, - 0x7c, 0x83, 0x9f, 0x60, 0x0c, 0xf3, 0xef, 0x10, 0xd7, 0x28, - 0x34, 0xcb, 0xec, 0x13, 0x0f, 0xf0, 0x37, 0xc8, 0xd4, 0x2b, - 0x47, 0xb8, 0xa4, 0x5b, 0x9c, 0x63, 0x7f, 0x80, 0x62, 0x9d, - 0x81, 0x7e, 0xb9, 0x46, 0x5a, 0xa5, 0xc9, 0x36, 0x2a, 0xd5, - 0x12, 0xed, 0xf1, 0x0e, 0x29, 0xd6, 0xca, 0x35, 0xf2, 0x0d, - 0x11, 0xee, 0x82, 0x7d, 0x61, 0x9e, 0x59, 0xa6, 0xba, 0x45, - 0xf4, 0x0b, 0x17, 0xe8, 0x2f, 0xd0, 0xcc, 0x33, 0x5f, 0xa0, - 0xbc, 0x43, 0x84, 0x7b, 0x67, 0x98, 0xbf, 0x40, 0x5c, 0xa3, - 0x64, 0x9b, 0x87, 0x78, 0x14, 0xeb, 0xf7, 0x08, 0xcf, 0x30, - 0x2c, 0xd3, 0x53, 0xac, 0xb0, 0x4f, 0x88, 0x77, 0x6b, 0x94, - 0xf8, 0x07, 0x1b, 0xe4, 0x23, 0xdc, 0xc0, 0x3f, 0x18, 0xe7, - 0xfb, 0x04, 0xc3, 0x3c, 0x20, 0xdf, 0xb3, 0x4c, 0x50, 0xaf, - 0x68, 0x97, 0x8b, 0x74, 0xc5, 0x3a, 0x26, 0xd9, 0x1e, 0xe1, - 0xfd, 0x02, 0x6e, 0x91, 0x8d, 0x72, 0xb5, 0x4a, 0x56, 0xa9, - 0x8e, 0x71, 0x6d, 0x92, 0x55, 0xaa, 0xb6, 0x49, 0x25, 0xda, - 0xc6, 0x39, 0xfe, 0x01, 0x1d, 0xe2 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, + 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, + 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, + 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, + 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, + 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, + 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, + 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, + 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, + 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, + 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, + 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, + 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, + 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, + 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, + 0xfe, 0xff, 0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x18, + 0x1a, 0x1c, 0x1e, 0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, + 0x38, 0x3a, 0x3c, 0x3e, 0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, + 0x56, 0x58, 0x5a, 0x5c, 0x5e, 0x60, 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, 0x70, 0x72, + 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e, 0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c, 0x8e, 0x90, + 0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e, 0xa0, 0xa2, 0xa4, 0xa6, 0xa8, 0xaa, 0xac, 0xae, + 0xb0, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe, 0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, + 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, + 0xec, 0xee, 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0xfe, 0x1d, 0x1f, 0x19, 0x1b, 0x15, + 0x17, 0x11, 0x13, 0x0d, 0x0f, 0x09, 0x0b, 0x05, 0x07, 0x01, 0x03, 0x3d, 0x3f, 0x39, 0x3b, + 0x35, 0x37, 0x31, 0x33, 0x2d, 0x2f, 0x29, 0x2b, 0x25, 0x27, 0x21, 0x23, 0x5d, 0x5f, 0x59, + 0x5b, 0x55, 0x57, 0x51, 0x53, 0x4d, 0x4f, 0x49, 0x4b, 0x45, 0x47, 0x41, 0x43, 0x7d, 0x7f, + 0x79, 0x7b, 0x75, 0x77, 0x71, 0x73, 0x6d, 0x6f, 0x69, 0x6b, 0x65, 0x67, 0x61, 0x63, 0x9d, + 0x9f, 0x99, 0x9b, 0x95, 0x97, 0x91, 0x93, 0x8d, 0x8f, 0x89, 0x8b, 0x85, 0x87, 0x81, 0x83, + 0xbd, 0xbf, 0xb9, 0xbb, 0xb5, 0xb7, 0xb1, 0xb3, 0xad, 0xaf, 0xa9, 0xab, 0xa5, 0xa7, 0xa1, + 0xa3, 0xdd, 0xdf, 0xd9, 0xdb, 0xd5, 0xd7, 0xd1, 0xd3, 0xcd, 0xcf, 0xc9, 0xcb, 0xc5, 0xc7, + 0xc1, 0xc3, 0xfd, 0xff, 0xf9, 0xfb, 0xf5, 0xf7, 0xf1, 0xf3, 0xed, 0xef, 0xe9, 0xeb, 0xe5, + 0xe7, 0xe1, 0xe3, 0x00, 0x03, 0x06, 0x05, 0x0c, 0x0f, 0x0a, 0x09, 0x18, 0x1b, 0x1e, 0x1d, + 0x14, 0x17, 0x12, 0x11, 0x30, 0x33, 0x36, 0x35, 0x3c, 0x3f, 0x3a, 0x39, 0x28, 0x2b, 0x2e, + 0x2d, 0x24, 0x27, 0x22, 0x21, 0x60, 0x63, 0x66, 0x65, 0x6c, 0x6f, 0x6a, 0x69, 0x78, 0x7b, + 0x7e, 0x7d, 0x74, 0x77, 0x72, 0x71, 0x50, 0x53, 0x56, 0x55, 0x5c, 0x5f, 0x5a, 0x59, 0x48, + 0x4b, 0x4e, 0x4d, 0x44, 0x47, 0x42, 0x41, 0xc0, 0xc3, 0xc6, 0xc5, 0xcc, 0xcf, 0xca, 0xc9, + 0xd8, 0xdb, 0xde, 0xdd, 0xd4, 0xd7, 0xd2, 0xd1, 0xf0, 0xf3, 0xf6, 0xf5, 0xfc, 0xff, 0xfa, + 0xf9, 0xe8, 0xeb, 0xee, 0xed, 0xe4, 0xe7, 0xe2, 0xe1, 0xa0, 0xa3, 0xa6, 0xa5, 0xac, 0xaf, + 0xaa, 0xa9, 0xb8, 0xbb, 0xbe, 0xbd, 0xb4, 0xb7, 0xb2, 0xb1, 0x90, 0x93, 0x96, 0x95, 0x9c, + 0x9f, 0x9a, 0x99, 0x88, 0x8b, 0x8e, 0x8d, 0x84, 0x87, 0x82, 0x81, 0x9d, 0x9e, 0x9b, 0x98, + 0x91, 0x92, 0x97, 0x94, 0x85, 0x86, 0x83, 0x80, 0x89, 0x8a, 0x8f, 0x8c, 0xad, 0xae, 0xab, + 0xa8, 0xa1, 0xa2, 0xa7, 0xa4, 0xb5, 0xb6, 0xb3, 0xb0, 0xb9, 0xba, 0xbf, 0xbc, 0xfd, 0xfe, + 0xfb, 0xf8, 0xf1, 0xf2, 0xf7, 0xf4, 0xe5, 0xe6, 0xe3, 0xe0, 0xe9, 0xea, 0xef, 0xec, 0xcd, + 0xce, 0xcb, 0xc8, 0xc1, 0xc2, 0xc7, 0xc4, 0xd5, 0xd6, 0xd3, 0xd0, 0xd9, 0xda, 0xdf, 0xdc, + 0x5d, 0x5e, 0x5b, 0x58, 0x51, 0x52, 0x57, 0x54, 0x45, 0x46, 0x43, 0x40, 0x49, 0x4a, 0x4f, + 0x4c, 0x6d, 0x6e, 0x6b, 0x68, 0x61, 0x62, 0x67, 0x64, 0x75, 0x76, 0x73, 0x70, 0x79, 0x7a, + 0x7f, 0x7c, 0x3d, 0x3e, 0x3b, 0x38, 0x31, 0x32, 0x37, 0x34, 0x25, 0x26, 0x23, 0x20, 0x29, + 0x2a, 0x2f, 0x2c, 0x0d, 0x0e, 0x0b, 0x08, 0x01, 0x02, 0x07, 0x04, 0x15, 0x16, 0x13, 0x10, + 0x19, 0x1a, 0x1f, 0x1c, 0x00, 0x04, 0x08, 0x0c, 0x10, 0x14, 0x18, 0x1c, 0x20, 0x24, 0x28, + 0x2c, 0x30, 0x34, 0x38, 0x3c, 0x40, 0x44, 0x48, 0x4c, 0x50, 0x54, 0x58, 0x5c, 0x60, 0x64, + 0x68, 0x6c, 0x70, 0x74, 0x78, 0x7c, 0x80, 0x84, 0x88, 0x8c, 0x90, 0x94, 0x98, 0x9c, 0xa0, + 0xa4, 0xa8, 0xac, 0xb0, 0xb4, 0xb8, 0xbc, 0xc0, 0xc4, 0xc8, 0xcc, 0xd0, 0xd4, 0xd8, 0xdc, + 0xe0, 0xe4, 0xe8, 0xec, 0xf0, 0xf4, 0xf8, 0xfc, 0x1d, 0x19, 0x15, 0x11, 0x0d, 0x09, 0x05, + 0x01, 0x3d, 0x39, 0x35, 0x31, 0x2d, 0x29, 0x25, 0x21, 0x5d, 0x59, 0x55, 0x51, 0x4d, 0x49, + 0x45, 0x41, 0x7d, 0x79, 0x75, 0x71, 0x6d, 0x69, 0x65, 0x61, 0x9d, 0x99, 0x95, 0x91, 0x8d, + 0x89, 0x85, 0x81, 0xbd, 0xb9, 0xb5, 0xb1, 0xad, 0xa9, 0xa5, 0xa1, 0xdd, 0xd9, 0xd5, 0xd1, + 0xcd, 0xc9, 0xc5, 0xc1, 0xfd, 0xf9, 0xf5, 0xf1, 0xed, 0xe9, 0xe5, 0xe1, 0x3a, 0x3e, 0x32, + 0x36, 0x2a, 0x2e, 0x22, 0x26, 0x1a, 0x1e, 0x12, 0x16, 0x0a, 0x0e, 0x02, 0x06, 0x7a, 0x7e, + 0x72, 0x76, 0x6a, 0x6e, 0x62, 0x66, 0x5a, 0x5e, 0x52, 0x56, 0x4a, 0x4e, 0x42, 0x46, 0xba, + 0xbe, 0xb2, 0xb6, 0xaa, 0xae, 0xa2, 0xa6, 0x9a, 0x9e, 0x92, 0x96, 0x8a, 0x8e, 0x82, 0x86, + 0xfa, 0xfe, 0xf2, 0xf6, 0xea, 0xee, 0xe2, 0xe6, 0xda, 0xde, 0xd2, 0xd6, 0xca, 0xce, 0xc2, + 0xc6, 0x27, 0x23, 0x2f, 0x2b, 0x37, 0x33, 0x3f, 0x3b, 0x07, 0x03, 0x0f, 0x0b, 0x17, 0x13, + 0x1f, 0x1b, 0x67, 0x63, 0x6f, 0x6b, 0x77, 0x73, 0x7f, 0x7b, 0x47, 0x43, 0x4f, 0x4b, 0x57, + 0x53, 0x5f, 0x5b, 0xa7, 0xa3, 0xaf, 0xab, 0xb7, 0xb3, 0xbf, 0xbb, 0x87, 0x83, 0x8f, 0x8b, + 0x97, 0x93, 0x9f, 0x9b, 0xe7, 0xe3, 0xef, 0xeb, 0xf7, 0xf3, 0xff, 0xfb, 0xc7, 0xc3, 0xcf, + 0xcb, 0xd7, 0xd3, 0xdf, 0xdb, 0x00, 0x05, 0x0a, 0x0f, 0x14, 0x11, 0x1e, 0x1b, 0x28, 0x2d, + 0x22, 0x27, 0x3c, 0x39, 0x36, 0x33, 0x50, 0x55, 0x5a, 0x5f, 0x44, 0x41, 0x4e, 0x4b, 0x78, + 0x7d, 0x72, 0x77, 0x6c, 0x69, 0x66, 0x63, 0xa0, 0xa5, 0xaa, 0xaf, 0xb4, 0xb1, 0xbe, 0xbb, + 0x88, 0x8d, 0x82, 0x87, 0x9c, 0x99, 0x96, 0x93, 0xf0, 0xf5, 0xfa, 0xff, 0xe4, 0xe1, 0xee, + 0xeb, 0xd8, 0xdd, 0xd2, 0xd7, 0xcc, 0xc9, 0xc6, 0xc3, 0x5d, 0x58, 0x57, 0x52, 0x49, 0x4c, + 0x43, 0x46, 0x75, 0x70, 0x7f, 0x7a, 0x61, 0x64, 0x6b, 0x6e, 0x0d, 0x08, 0x07, 0x02, 0x19, + 0x1c, 0x13, 0x16, 0x25, 0x20, 0x2f, 0x2a, 0x31, 0x34, 0x3b, 0x3e, 0xfd, 0xf8, 0xf7, 0xf2, + 0xe9, 0xec, 0xe3, 0xe6, 0xd5, 0xd0, 0xdf, 0xda, 0xc1, 0xc4, 0xcb, 0xce, 0xad, 0xa8, 0xa7, + 0xa2, 0xb9, 0xbc, 0xb3, 0xb6, 0x85, 0x80, 0x8f, 0x8a, 0x91, 0x94, 0x9b, 0x9e, 0xba, 0xbf, + 0xb0, 0xb5, 0xae, 0xab, 0xa4, 0xa1, 0x92, 0x97, 0x98, 0x9d, 0x86, 0x83, 0x8c, 0x89, 0xea, + 0xef, 0xe0, 0xe5, 0xfe, 0xfb, 0xf4, 0xf1, 0xc2, 0xc7, 0xc8, 0xcd, 0xd6, 0xd3, 0xdc, 0xd9, + 0x1a, 0x1f, 0x10, 0x15, 0x0e, 0x0b, 0x04, 0x01, 0x32, 0x37, 0x38, 0x3d, 0x26, 0x23, 0x2c, + 0x29, 0x4a, 0x4f, 0x40, 0x45, 0x5e, 0x5b, 0x54, 0x51, 0x62, 0x67, 0x68, 0x6d, 0x76, 0x73, + 0x7c, 0x79, 0xe7, 0xe2, 0xed, 0xe8, 0xf3, 0xf6, 0xf9, 0xfc, 0xcf, 0xca, 0xc5, 0xc0, 0xdb, + 0xde, 0xd1, 0xd4, 0xb7, 0xb2, 0xbd, 0xb8, 0xa3, 0xa6, 0xa9, 0xac, 0x9f, 0x9a, 0x95, 0x90, + 0x8b, 0x8e, 0x81, 0x84, 0x47, 0x42, 0x4d, 0x48, 0x53, 0x56, 0x59, 0x5c, 0x6f, 0x6a, 0x65, + 0x60, 0x7b, 0x7e, 0x71, 0x74, 0x17, 0x12, 0x1d, 0x18, 0x03, 0x06, 0x09, 0x0c, 0x3f, 0x3a, + 0x35, 0x30, 0x2b, 0x2e, 0x21, 0x24, 0x00, 0x06, 0x0c, 0x0a, 0x18, 0x1e, 0x14, 0x12, 0x30, + 0x36, 0x3c, 0x3a, 0x28, 0x2e, 0x24, 0x22, 0x60, 0x66, 0x6c, 0x6a, 0x78, 0x7e, 0x74, 0x72, + 0x50, 0x56, 0x5c, 0x5a, 0x48, 0x4e, 0x44, 0x42, 0xc0, 0xc6, 0xcc, 0xca, 0xd8, 0xde, 0xd4, + 0xd2, 0xf0, 0xf6, 0xfc, 0xfa, 0xe8, 0xee, 0xe4, 0xe2, 0xa0, 0xa6, 0xac, 0xaa, 0xb8, 0xbe, + 0xb4, 0xb2, 0x90, 0x96, 0x9c, 0x9a, 0x88, 0x8e, 0x84, 0x82, 0x9d, 0x9b, 0x91, 0x97, 0x85, + 0x83, 0x89, 0x8f, 0xad, 0xab, 0xa1, 0xa7, 0xb5, 0xb3, 0xb9, 0xbf, 0xfd, 0xfb, 0xf1, 0xf7, + 0xe5, 0xe3, 0xe9, 0xef, 0xcd, 0xcb, 0xc1, 0xc7, 0xd5, 0xd3, 0xd9, 0xdf, 0x5d, 0x5b, 0x51, + 0x57, 0x45, 0x43, 0x49, 0x4f, 0x6d, 0x6b, 0x61, 0x67, 0x75, 0x73, 0x79, 0x7f, 0x3d, 0x3b, + 0x31, 0x37, 0x25, 0x23, 0x29, 0x2f, 0x0d, 0x0b, 0x01, 0x07, 0x15, 0x13, 0x19, 0x1f, 0x27, + 0x21, 0x2b, 0x2d, 0x3f, 0x39, 0x33, 0x35, 0x17, 0x11, 0x1b, 0x1d, 0x0f, 0x09, 0x03, 0x05, + 0x47, 0x41, 0x4b, 0x4d, 0x5f, 0x59, 0x53, 0x55, 0x77, 0x71, 0x7b, 0x7d, 0x6f, 0x69, 0x63, + 0x65, 0xe7, 0xe1, 0xeb, 0xed, 0xff, 0xf9, 0xf3, 0xf5, 0xd7, 0xd1, 0xdb, 0xdd, 0xcf, 0xc9, + 0xc3, 0xc5, 0x87, 0x81, 0x8b, 0x8d, 0x9f, 0x99, 0x93, 0x95, 0xb7, 0xb1, 0xbb, 0xbd, 0xaf, + 0xa9, 0xa3, 0xa5, 0xba, 0xbc, 0xb6, 0xb0, 0xa2, 0xa4, 0xae, 0xa8, 0x8a, 0x8c, 0x86, 0x80, + 0x92, 0x94, 0x9e, 0x98, 0xda, 0xdc, 0xd6, 0xd0, 0xc2, 0xc4, 0xce, 0xc8, 0xea, 0xec, 0xe6, + 0xe0, 0xf2, 0xf4, 0xfe, 0xf8, 0x7a, 0x7c, 0x76, 0x70, 0x62, 0x64, 0x6e, 0x68, 0x4a, 0x4c, + 0x46, 0x40, 0x52, 0x54, 0x5e, 0x58, 0x1a, 0x1c, 0x16, 0x10, 0x02, 0x04, 0x0e, 0x08, 0x2a, + 0x2c, 0x26, 0x20, 0x32, 0x34, 0x3e, 0x38, 0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b, 0x12, 0x15, + 0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a, 0x2d, 0x70, 0x77, 0x7e, 0x79, 0x6c, 0x6b, 0x62, + 0x65, 0x48, 0x4f, 0x46, 0x41, 0x54, 0x53, 0x5a, 0x5d, 0xe0, 0xe7, 0xee, 0xe9, 0xfc, 0xfb, + 0xf2, 0xf5, 0xd8, 0xdf, 0xd6, 0xd1, 0xc4, 0xc3, 0xca, 0xcd, 0x90, 0x97, 0x9e, 0x99, 0x8c, + 0x8b, 0x82, 0x85, 0xa8, 0xaf, 0xa6, 0xa1, 0xb4, 0xb3, 0xba, 0xbd, 0xdd, 0xda, 0xd3, 0xd4, + 0xc1, 0xc6, 0xcf, 0xc8, 0xe5, 0xe2, 0xeb, 0xec, 0xf9, 0xfe, 0xf7, 0xf0, 0xad, 0xaa, 0xa3, + 0xa4, 0xb1, 0xb6, 0xbf, 0xb8, 0x95, 0x92, 0x9b, 0x9c, 0x89, 0x8e, 0x87, 0x80, 0x3d, 0x3a, + 0x33, 0x34, 0x21, 0x26, 0x2f, 0x28, 0x05, 0x02, 0x0b, 0x0c, 0x19, 0x1e, 0x17, 0x10, 0x4d, + 0x4a, 0x43, 0x44, 0x51, 0x56, 0x5f, 0x58, 0x75, 0x72, 0x7b, 0x7c, 0x69, 0x6e, 0x67, 0x60, + 0xa7, 0xa0, 0xa9, 0xae, 0xbb, 0xbc, 0xb5, 0xb2, 0x9f, 0x98, 0x91, 0x96, 0x83, 0x84, 0x8d, + 0x8a, 0xd7, 0xd0, 0xd9, 0xde, 0xcb, 0xcc, 0xc5, 0xc2, 0xef, 0xe8, 0xe1, 0xe6, 0xf3, 0xf4, + 0xfd, 0xfa, 0x47, 0x40, 0x49, 0x4e, 0x5b, 0x5c, 0x55, 0x52, 0x7f, 0x78, 0x71, 0x76, 0x63, + 0x64, 0x6d, 0x6a, 0x37, 0x30, 0x39, 0x3e, 0x2b, 0x2c, 0x25, 0x22, 0x0f, 0x08, 0x01, 0x06, + 0x13, 0x14, 0x1d, 0x1a, 0x7a, 0x7d, 0x74, 0x73, 0x66, 0x61, 0x68, 0x6f, 0x42, 0x45, 0x4c, + 0x4b, 0x5e, 0x59, 0x50, 0x57, 0x0a, 0x0d, 0x04, 0x03, 0x16, 0x11, 0x18, 0x1f, 0x32, 0x35, + 0x3c, 0x3b, 0x2e, 0x29, 0x20, 0x27, 0x9a, 0x9d, 0x94, 0x93, 0x86, 0x81, 0x88, 0x8f, 0xa2, + 0xa5, 0xac, 0xab, 0xbe, 0xb9, 0xb0, 0xb7, 0xea, 0xed, 0xe4, 0xe3, 0xf6, 0xf1, 0xf8, 0xff, + 0xd2, 0xd5, 0xdc, 0xdb, 0xce, 0xc9, 0xc0, 0xc7, 0x00, 0x08, 0x10, 0x18, 0x20, 0x28, 0x30, + 0x38, 0x40, 0x48, 0x50, 0x58, 0x60, 0x68, 0x70, 0x78, 0x80, 0x88, 0x90, 0x98, 0xa0, 0xa8, + 0xb0, 0xb8, 0xc0, 0xc8, 0xd0, 0xd8, 0xe0, 0xe8, 0xf0, 0xf8, 0x1d, 0x15, 0x0d, 0x05, 0x3d, + 0x35, 0x2d, 0x25, 0x5d, 0x55, 0x4d, 0x45, 0x7d, 0x75, 0x6d, 0x65, 0x9d, 0x95, 0x8d, 0x85, + 0xbd, 0xb5, 0xad, 0xa5, 0xdd, 0xd5, 0xcd, 0xc5, 0xfd, 0xf5, 0xed, 0xe5, 0x3a, 0x32, 0x2a, + 0x22, 0x1a, 0x12, 0x0a, 0x02, 0x7a, 0x72, 0x6a, 0x62, 0x5a, 0x52, 0x4a, 0x42, 0xba, 0xb2, + 0xaa, 0xa2, 0x9a, 0x92, 0x8a, 0x82, 0xfa, 0xf2, 0xea, 0xe2, 0xda, 0xd2, 0xca, 0xc2, 0x27, + 0x2f, 0x37, 0x3f, 0x07, 0x0f, 0x17, 0x1f, 0x67, 0x6f, 0x77, 0x7f, 0x47, 0x4f, 0x57, 0x5f, + 0xa7, 0xaf, 0xb7, 0xbf, 0x87, 0x8f, 0x97, 0x9f, 0xe7, 0xef, 0xf7, 0xff, 0xc7, 0xcf, 0xd7, + 0xdf, 0x74, 0x7c, 0x64, 0x6c, 0x54, 0x5c, 0x44, 0x4c, 0x34, 0x3c, 0x24, 0x2c, 0x14, 0x1c, + 0x04, 0x0c, 0xf4, 0xfc, 0xe4, 0xec, 0xd4, 0xdc, 0xc4, 0xcc, 0xb4, 0xbc, 0xa4, 0xac, 0x94, + 0x9c, 0x84, 0x8c, 0x69, 0x61, 0x79, 0x71, 0x49, 0x41, 0x59, 0x51, 0x29, 0x21, 0x39, 0x31, + 0x09, 0x01, 0x19, 0x11, 0xe9, 0xe1, 0xf9, 0xf1, 0xc9, 0xc1, 0xd9, 0xd1, 0xa9, 0xa1, 0xb9, + 0xb1, 0x89, 0x81, 0x99, 0x91, 0x4e, 0x46, 0x5e, 0x56, 0x6e, 0x66, 0x7e, 0x76, 0x0e, 0x06, + 0x1e, 0x16, 0x2e, 0x26, 0x3e, 0x36, 0xce, 0xc6, 0xde, 0xd6, 0xee, 0xe6, 0xfe, 0xf6, 0x8e, + 0x86, 0x9e, 0x96, 0xae, 0xa6, 0xbe, 0xb6, 0x53, 0x5b, 0x43, 0x4b, 0x73, 0x7b, 0x63, 0x6b, + 0x13, 0x1b, 0x03, 0x0b, 0x33, 0x3b, 0x23, 0x2b, 0xd3, 0xdb, 0xc3, 0xcb, 0xf3, 0xfb, 0xe3, + 0xeb, 0x93, 0x9b, 0x83, 0x8b, 0xb3, 0xbb, 0xa3, 0xab, 0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, + 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77, 0x90, 0x99, 0x82, 0x8b, 0xb4, + 0xbd, 0xa6, 0xaf, 0xd8, 0xd1, 0xca, 0xc3, 0xfc, 0xf5, 0xee, 0xe7, 0x3d, 0x34, 0x2f, 0x26, + 0x19, 0x10, 0x0b, 0x02, 0x75, 0x7c, 0x67, 0x6e, 0x51, 0x58, 0x43, 0x4a, 0xad, 0xa4, 0xbf, + 0xb6, 0x89, 0x80, 0x9b, 0x92, 0xe5, 0xec, 0xf7, 0xfe, 0xc1, 0xc8, 0xd3, 0xda, 0x7a, 0x73, + 0x68, 0x61, 0x5e, 0x57, 0x4c, 0x45, 0x32, 0x3b, 0x20, 0x29, 0x16, 0x1f, 0x04, 0x0d, 0xea, + 0xe3, 0xf8, 0xf1, 0xce, 0xc7, 0xdc, 0xd5, 0xa2, 0xab, 0xb0, 0xb9, 0x86, 0x8f, 0x94, 0x9d, + 0x47, 0x4e, 0x55, 0x5c, 0x63, 0x6a, 0x71, 0x78, 0x0f, 0x06, 0x1d, 0x14, 0x2b, 0x22, 0x39, + 0x30, 0xd7, 0xde, 0xc5, 0xcc, 0xf3, 0xfa, 0xe1, 0xe8, 0x9f, 0x96, 0x8d, 0x84, 0xbb, 0xb2, + 0xa9, 0xa0, 0xf4, 0xfd, 0xe6, 0xef, 0xd0, 0xd9, 0xc2, 0xcb, 0xbc, 0xb5, 0xae, 0xa7, 0x98, + 0x91, 0x8a, 0x83, 0x64, 0x6d, 0x76, 0x7f, 0x40, 0x49, 0x52, 0x5b, 0x2c, 0x25, 0x3e, 0x37, + 0x08, 0x01, 0x1a, 0x13, 0xc9, 0xc0, 0xdb, 0xd2, 0xed, 0xe4, 0xff, 0xf6, 0x81, 0x88, 0x93, + 0x9a, 0xa5, 0xac, 0xb7, 0xbe, 0x59, 0x50, 0x4b, 0x42, 0x7d, 0x74, 0x6f, 0x66, 0x11, 0x18, + 0x03, 0x0a, 0x35, 0x3c, 0x27, 0x2e, 0x8e, 0x87, 0x9c, 0x95, 0xaa, 0xa3, 0xb8, 0xb1, 0xc6, + 0xcf, 0xd4, 0xdd, 0xe2, 0xeb, 0xf0, 0xf9, 0x1e, 0x17, 0x0c, 0x05, 0x3a, 0x33, 0x28, 0x21, + 0x56, 0x5f, 0x44, 0x4d, 0x72, 0x7b, 0x60, 0x69, 0xb3, 0xba, 0xa1, 0xa8, 0x97, 0x9e, 0x85, + 0x8c, 0xfb, 0xf2, 0xe9, 0xe0, 0xdf, 0xd6, 0xcd, 0xc4, 0x23, 0x2a, 0x31, 0x38, 0x07, 0x0e, + 0x15, 0x1c, 0x6b, 0x62, 0x79, 0x70, 0x4f, 0x46, 0x5d, 0x54, 0x00, 0x0a, 0x14, 0x1e, 0x28, + 0x22, 0x3c, 0x36, 0x50, 0x5a, 0x44, 0x4e, 0x78, 0x72, 0x6c, 0x66, 0xa0, 0xaa, 0xb4, 0xbe, + 0x88, 0x82, 0x9c, 0x96, 0xf0, 0xfa, 0xe4, 0xee, 0xd8, 0xd2, 0xcc, 0xc6, 0x5d, 0x57, 0x49, + 0x43, 0x75, 0x7f, 0x61, 0x6b, 0x0d, 0x07, 0x19, 0x13, 0x25, 0x2f, 0x31, 0x3b, 0xfd, 0xf7, + 0xe9, 0xe3, 0xd5, 0xdf, 0xc1, 0xcb, 0xad, 0xa7, 0xb9, 0xb3, 0x85, 0x8f, 0x91, 0x9b, 0xba, + 0xb0, 0xae, 0xa4, 0x92, 0x98, 0x86, 0x8c, 0xea, 0xe0, 0xfe, 0xf4, 0xc2, 0xc8, 0xd6, 0xdc, + 0x1a, 0x10, 0x0e, 0x04, 0x32, 0x38, 0x26, 0x2c, 0x4a, 0x40, 0x5e, 0x54, 0x62, 0x68, 0x76, + 0x7c, 0xe7, 0xed, 0xf3, 0xf9, 0xcf, 0xc5, 0xdb, 0xd1, 0xb7, 0xbd, 0xa3, 0xa9, 0x9f, 0x95, + 0x8b, 0x81, 0x47, 0x4d, 0x53, 0x59, 0x6f, 0x65, 0x7b, 0x71, 0x17, 0x1d, 0x03, 0x09, 0x3f, + 0x35, 0x2b, 0x21, 0x69, 0x63, 0x7d, 0x77, 0x41, 0x4b, 0x55, 0x5f, 0x39, 0x33, 0x2d, 0x27, + 0x11, 0x1b, 0x05, 0x0f, 0xc9, 0xc3, 0xdd, 0xd7, 0xe1, 0xeb, 0xf5, 0xff, 0x99, 0x93, 0x8d, + 0x87, 0xb1, 0xbb, 0xa5, 0xaf, 0x34, 0x3e, 0x20, 0x2a, 0x1c, 0x16, 0x08, 0x02, 0x64, 0x6e, + 0x70, 0x7a, 0x4c, 0x46, 0x58, 0x52, 0x94, 0x9e, 0x80, 0x8a, 0xbc, 0xb6, 0xa8, 0xa2, 0xc4, + 0xce, 0xd0, 0xda, 0xec, 0xe6, 0xf8, 0xf2, 0xd3, 0xd9, 0xc7, 0xcd, 0xfb, 0xf1, 0xef, 0xe5, + 0x83, 0x89, 0x97, 0x9d, 0xab, 0xa1, 0xbf, 0xb5, 0x73, 0x79, 0x67, 0x6d, 0x5b, 0x51, 0x4f, + 0x45, 0x23, 0x29, 0x37, 0x3d, 0x0b, 0x01, 0x1f, 0x15, 0x8e, 0x84, 0x9a, 0x90, 0xa6, 0xac, + 0xb2, 0xb8, 0xde, 0xd4, 0xca, 0xc0, 0xf6, 0xfc, 0xe2, 0xe8, 0x2e, 0x24, 0x3a, 0x30, 0x06, + 0x0c, 0x12, 0x18, 0x7e, 0x74, 0x6a, 0x60, 0x56, 0x5c, 0x42, 0x48, 0x00, 0x0b, 0x16, 0x1d, + 0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69, 0xb0, 0xbb, 0xa6, + 0xad, 0x9c, 0x97, 0x8a, 0x81, 0xe8, 0xe3, 0xfe, 0xf5, 0xc4, 0xcf, 0xd2, 0xd9, 0x7d, 0x76, + 0x6b, 0x60, 0x51, 0x5a, 0x47, 0x4c, 0x25, 0x2e, 0x33, 0x38, 0x09, 0x02, 0x1f, 0x14, 0xcd, + 0xc6, 0xdb, 0xd0, 0xe1, 0xea, 0xf7, 0xfc, 0x95, 0x9e, 0x83, 0x88, 0xb9, 0xb2, 0xaf, 0xa4, + 0xfa, 0xf1, 0xec, 0xe7, 0xd6, 0xdd, 0xc0, 0xcb, 0xa2, 0xa9, 0xb4, 0xbf, 0x8e, 0x85, 0x98, + 0x93, 0x4a, 0x41, 0x5c, 0x57, 0x66, 0x6d, 0x70, 0x7b, 0x12, 0x19, 0x04, 0x0f, 0x3e, 0x35, + 0x28, 0x23, 0x87, 0x8c, 0x91, 0x9a, 0xab, 0xa0, 0xbd, 0xb6, 0xdf, 0xd4, 0xc9, 0xc2, 0xf3, + 0xf8, 0xe5, 0xee, 0x37, 0x3c, 0x21, 0x2a, 0x1b, 0x10, 0x0d, 0x06, 0x6f, 0x64, 0x79, 0x72, + 0x43, 0x48, 0x55, 0x5e, 0xe9, 0xe2, 0xff, 0xf4, 0xc5, 0xce, 0xd3, 0xd8, 0xb1, 0xba, 0xa7, + 0xac, 0x9d, 0x96, 0x8b, 0x80, 0x59, 0x52, 0x4f, 0x44, 0x75, 0x7e, 0x63, 0x68, 0x01, 0x0a, + 0x17, 0x1c, 0x2d, 0x26, 0x3b, 0x30, 0x94, 0x9f, 0x82, 0x89, 0xb8, 0xb3, 0xae, 0xa5, 0xcc, + 0xc7, 0xda, 0xd1, 0xe0, 0xeb, 0xf6, 0xfd, 0x24, 0x2f, 0x32, 0x39, 0x08, 0x03, 0x1e, 0x15, + 0x7c, 0x77, 0x6a, 0x61, 0x50, 0x5b, 0x46, 0x4d, 0x13, 0x18, 0x05, 0x0e, 0x3f, 0x34, 0x29, + 0x22, 0x4b, 0x40, 0x5d, 0x56, 0x67, 0x6c, 0x71, 0x7a, 0xa3, 0xa8, 0xb5, 0xbe, 0x8f, 0x84, + 0x99, 0x92, 0xfb, 0xf0, 0xed, 0xe6, 0xd7, 0xdc, 0xc1, 0xca, 0x6e, 0x65, 0x78, 0x73, 0x42, + 0x49, 0x54, 0x5f, 0x36, 0x3d, 0x20, 0x2b, 0x1a, 0x11, 0x0c, 0x07, 0xde, 0xd5, 0xc8, 0xc3, + 0xf2, 0xf9, 0xe4, 0xef, 0x86, 0x8d, 0x90, 0x9b, 0xaa, 0xa1, 0xbc, 0xb7, 0x00, 0x0c, 0x18, + 0x14, 0x30, 0x3c, 0x28, 0x24, 0x60, 0x6c, 0x78, 0x74, 0x50, 0x5c, 0x48, 0x44, 0xc0, 0xcc, + 0xd8, 0xd4, 0xf0, 0xfc, 0xe8, 0xe4, 0xa0, 0xac, 0xb8, 0xb4, 0x90, 0x9c, 0x88, 0x84, 0x9d, + 0x91, 0x85, 0x89, 0xad, 0xa1, 0xb5, 0xb9, 0xfd, 0xf1, 0xe5, 0xe9, 0xcd, 0xc1, 0xd5, 0xd9, + 0x5d, 0x51, 0x45, 0x49, 0x6d, 0x61, 0x75, 0x79, 0x3d, 0x31, 0x25, 0x29, 0x0d, 0x01, 0x15, + 0x19, 0x27, 0x2b, 0x3f, 0x33, 0x17, 0x1b, 0x0f, 0x03, 0x47, 0x4b, 0x5f, 0x53, 0x77, 0x7b, + 0x6f, 0x63, 0xe7, 0xeb, 0xff, 0xf3, 0xd7, 0xdb, 0xcf, 0xc3, 0x87, 0x8b, 0x9f, 0x93, 0xb7, + 0xbb, 0xaf, 0xa3, 0xba, 0xb6, 0xa2, 0xae, 0x8a, 0x86, 0x92, 0x9e, 0xda, 0xd6, 0xc2, 0xce, + 0xea, 0xe6, 0xf2, 0xfe, 0x7a, 0x76, 0x62, 0x6e, 0x4a, 0x46, 0x52, 0x5e, 0x1a, 0x16, 0x02, + 0x0e, 0x2a, 0x26, 0x32, 0x3e, 0x4e, 0x42, 0x56, 0x5a, 0x7e, 0x72, 0x66, 0x6a, 0x2e, 0x22, + 0x36, 0x3a, 0x1e, 0x12, 0x06, 0x0a, 0x8e, 0x82, 0x96, 0x9a, 0xbe, 0xb2, 0xa6, 0xaa, 0xee, + 0xe2, 0xf6, 0xfa, 0xde, 0xd2, 0xc6, 0xca, 0xd3, 0xdf, 0xcb, 0xc7, 0xe3, 0xef, 0xfb, 0xf7, + 0xb3, 0xbf, 0xab, 0xa7, 0x83, 0x8f, 0x9b, 0x97, 0x13, 0x1f, 0x0b, 0x07, 0x23, 0x2f, 0x3b, + 0x37, 0x73, 0x7f, 0x6b, 0x67, 0x43, 0x4f, 0x5b, 0x57, 0x69, 0x65, 0x71, 0x7d, 0x59, 0x55, + 0x41, 0x4d, 0x09, 0x05, 0x11, 0x1d, 0x39, 0x35, 0x21, 0x2d, 0xa9, 0xa5, 0xb1, 0xbd, 0x99, + 0x95, 0x81, 0x8d, 0xc9, 0xc5, 0xd1, 0xdd, 0xf9, 0xf5, 0xe1, 0xed, 0xf4, 0xf8, 0xec, 0xe0, + 0xc4, 0xc8, 0xdc, 0xd0, 0x94, 0x98, 0x8c, 0x80, 0xa4, 0xa8, 0xbc, 0xb0, 0x34, 0x38, 0x2c, + 0x20, 0x04, 0x08, 0x1c, 0x10, 0x54, 0x58, 0x4c, 0x40, 0x64, 0x68, 0x7c, 0x70, 0x00, 0x0d, + 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b, 0xd0, + 0xdd, 0xca, 0xc7, 0xe4, 0xe9, 0xfe, 0xf3, 0xb8, 0xb5, 0xa2, 0xaf, 0x8c, 0x81, 0x96, 0x9b, + 0xbd, 0xb0, 0xa7, 0xaa, 0x89, 0x84, 0x93, 0x9e, 0xd5, 0xd8, 0xcf, 0xc2, 0xe1, 0xec, 0xfb, + 0xf6, 0x6d, 0x60, 0x77, 0x7a, 0x59, 0x54, 0x43, 0x4e, 0x05, 0x08, 0x1f, 0x12, 0x31, 0x3c, + 0x2b, 0x26, 0x67, 0x6a, 0x7d, 0x70, 0x53, 0x5e, 0x49, 0x44, 0x0f, 0x02, 0x15, 0x18, 0x3b, + 0x36, 0x21, 0x2c, 0xb7, 0xba, 0xad, 0xa0, 0x83, 0x8e, 0x99, 0x94, 0xdf, 0xd2, 0xc5, 0xc8, + 0xeb, 0xe6, 0xf1, 0xfc, 0xda, 0xd7, 0xc0, 0xcd, 0xee, 0xe3, 0xf4, 0xf9, 0xb2, 0xbf, 0xa8, + 0xa5, 0x86, 0x8b, 0x9c, 0x91, 0x0a, 0x07, 0x10, 0x1d, 0x3e, 0x33, 0x24, 0x29, 0x62, 0x6f, + 0x78, 0x75, 0x56, 0x5b, 0x4c, 0x41, 0xce, 0xc3, 0xd4, 0xd9, 0xfa, 0xf7, 0xe0, 0xed, 0xa6, + 0xab, 0xbc, 0xb1, 0x92, 0x9f, 0x88, 0x85, 0x1e, 0x13, 0x04, 0x09, 0x2a, 0x27, 0x30, 0x3d, + 0x76, 0x7b, 0x6c, 0x61, 0x42, 0x4f, 0x58, 0x55, 0x73, 0x7e, 0x69, 0x64, 0x47, 0x4a, 0x5d, + 0x50, 0x1b, 0x16, 0x01, 0x0c, 0x2f, 0x22, 0x35, 0x38, 0xa3, 0xae, 0xb9, 0xb4, 0x97, 0x9a, + 0x8d, 0x80, 0xcb, 0xc6, 0xd1, 0xdc, 0xff, 0xf2, 0xe5, 0xe8, 0xa9, 0xa4, 0xb3, 0xbe, 0x9d, + 0x90, 0x87, 0x8a, 0xc1, 0xcc, 0xdb, 0xd6, 0xf5, 0xf8, 0xef, 0xe2, 0x79, 0x74, 0x63, 0x6e, + 0x4d, 0x40, 0x57, 0x5a, 0x11, 0x1c, 0x0b, 0x06, 0x25, 0x28, 0x3f, 0x32, 0x14, 0x19, 0x0e, + 0x03, 0x20, 0x2d, 0x3a, 0x37, 0x7c, 0x71, 0x66, 0x6b, 0x48, 0x45, 0x52, 0x5f, 0xc4, 0xc9, + 0xde, 0xd3, 0xf0, 0xfd, 0xea, 0xe7, 0xac, 0xa1, 0xb6, 0xbb, 0x98, 0x95, 0x82, 0x8f, 0x00, + 0x0e, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a, + 0xe0, 0xee, 0xfc, 0xf2, 0xd8, 0xd6, 0xc4, 0xca, 0x90, 0x9e, 0x8c, 0x82, 0xa8, 0xa6, 0xb4, + 0xba, 0xdd, 0xd3, 0xc1, 0xcf, 0xe5, 0xeb, 0xf9, 0xf7, 0xad, 0xa3, 0xb1, 0xbf, 0x95, 0x9b, + 0x89, 0x87, 0x3d, 0x33, 0x21, 0x2f, 0x05, 0x0b, 0x19, 0x17, 0x4d, 0x43, 0x51, 0x5f, 0x75, + 0x7b, 0x69, 0x67, 0xa7, 0xa9, 0xbb, 0xb5, 0x9f, 0x91, 0x83, 0x8d, 0xd7, 0xd9, 0xcb, 0xc5, + 0xef, 0xe1, 0xf3, 0xfd, 0x47, 0x49, 0x5b, 0x55, 0x7f, 0x71, 0x63, 0x6d, 0x37, 0x39, 0x2b, + 0x25, 0x0f, 0x01, 0x13, 0x1d, 0x7a, 0x74, 0x66, 0x68, 0x42, 0x4c, 0x5e, 0x50, 0x0a, 0x04, + 0x16, 0x18, 0x32, 0x3c, 0x2e, 0x20, 0x9a, 0x94, 0x86, 0x88, 0xa2, 0xac, 0xbe, 0xb0, 0xea, + 0xe4, 0xf6, 0xf8, 0xd2, 0xdc, 0xce, 0xc0, 0x53, 0x5d, 0x4f, 0x41, 0x6b, 0x65, 0x77, 0x79, + 0x23, 0x2d, 0x3f, 0x31, 0x1b, 0x15, 0x07, 0x09, 0xb3, 0xbd, 0xaf, 0xa1, 0x8b, 0x85, 0x97, + 0x99, 0xc3, 0xcd, 0xdf, 0xd1, 0xfb, 0xf5, 0xe7, 0xe9, 0x8e, 0x80, 0x92, 0x9c, 0xb6, 0xb8, + 0xaa, 0xa4, 0xfe, 0xf0, 0xe2, 0xec, 0xc6, 0xc8, 0xda, 0xd4, 0x6e, 0x60, 0x72, 0x7c, 0x56, + 0x58, 0x4a, 0x44, 0x1e, 0x10, 0x02, 0x0c, 0x26, 0x28, 0x3a, 0x34, 0xf4, 0xfa, 0xe8, 0xe6, + 0xcc, 0xc2, 0xd0, 0xde, 0x84, 0x8a, 0x98, 0x96, 0xbc, 0xb2, 0xa0, 0xae, 0x14, 0x1a, 0x08, + 0x06, 0x2c, 0x22, 0x30, 0x3e, 0x64, 0x6a, 0x78, 0x76, 0x5c, 0x52, 0x40, 0x4e, 0x29, 0x27, + 0x35, 0x3b, 0x11, 0x1f, 0x0d, 0x03, 0x59, 0x57, 0x45, 0x4b, 0x61, 0x6f, 0x7d, 0x73, 0xc9, + 0xc7, 0xd5, 0xdb, 0xf1, 0xff, 0xed, 0xe3, 0xb9, 0xb7, 0xa5, 0xab, 0x81, 0x8f, 0x9d, 0x93, + 0x00, 0x0f, 0x1e, 0x11, 0x3c, 0x33, 0x22, 0x2d, 0x78, 0x77, 0x66, 0x69, 0x44, 0x4b, 0x5a, + 0x55, 0xf0, 0xff, 0xee, 0xe1, 0xcc, 0xc3, 0xd2, 0xdd, 0x88, 0x87, 0x96, 0x99, 0xb4, 0xbb, + 0xaa, 0xa5, 0xfd, 0xf2, 0xe3, 0xec, 0xc1, 0xce, 0xdf, 0xd0, 0x85, 0x8a, 0x9b, 0x94, 0xb9, + 0xb6, 0xa7, 0xa8, 0x0d, 0x02, 0x13, 0x1c, 0x31, 0x3e, 0x2f, 0x20, 0x75, 0x7a, 0x6b, 0x64, + 0x49, 0x46, 0x57, 0x58, 0xe7, 0xe8, 0xf9, 0xf6, 0xdb, 0xd4, 0xc5, 0xca, 0x9f, 0x90, 0x81, + 0x8e, 0xa3, 0xac, 0xbd, 0xb2, 0x17, 0x18, 0x09, 0x06, 0x2b, 0x24, 0x35, 0x3a, 0x6f, 0x60, + 0x71, 0x7e, 0x53, 0x5c, 0x4d, 0x42, 0x1a, 0x15, 0x04, 0x0b, 0x26, 0x29, 0x38, 0x37, 0x62, + 0x6d, 0x7c, 0x73, 0x5e, 0x51, 0x40, 0x4f, 0xea, 0xe5, 0xf4, 0xfb, 0xd6, 0xd9, 0xc8, 0xc7, + 0x92, 0x9d, 0x8c, 0x83, 0xae, 0xa1, 0xb0, 0xbf, 0xd3, 0xdc, 0xcd, 0xc2, 0xef, 0xe0, 0xf1, + 0xfe, 0xab, 0xa4, 0xb5, 0xba, 0x97, 0x98, 0x89, 0x86, 0x23, 0x2c, 0x3d, 0x32, 0x1f, 0x10, + 0x01, 0x0e, 0x5b, 0x54, 0x45, 0x4a, 0x67, 0x68, 0x79, 0x76, 0x2e, 0x21, 0x30, 0x3f, 0x12, + 0x1d, 0x0c, 0x03, 0x56, 0x59, 0x48, 0x47, 0x6a, 0x65, 0x74, 0x7b, 0xde, 0xd1, 0xc0, 0xcf, + 0xe2, 0xed, 0xfc, 0xf3, 0xa6, 0xa9, 0xb8, 0xb7, 0x9a, 0x95, 0x84, 0x8b, 0x34, 0x3b, 0x2a, + 0x25, 0x08, 0x07, 0x16, 0x19, 0x4c, 0x43, 0x52, 0x5d, 0x70, 0x7f, 0x6e, 0x61, 0xc4, 0xcb, + 0xda, 0xd5, 0xf8, 0xf7, 0xe6, 0xe9, 0xbc, 0xb3, 0xa2, 0xad, 0x80, 0x8f, 0x9e, 0x91, 0xc9, + 0xc6, 0xd7, 0xd8, 0xf5, 0xfa, 0xeb, 0xe4, 0xb1, 0xbe, 0xaf, 0xa0, 0x8d, 0x82, 0x93, 0x9c, + 0x39, 0x36, 0x27, 0x28, 0x05, 0x0a, 0x1b, 0x14, 0x41, 0x4e, 0x5f, 0x50, 0x7d, 0x72, 0x63, + 0x6c, 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, + 0xe0, 0xf0, 0x1d, 0x0d, 0x3d, 0x2d, 0x5d, 0x4d, 0x7d, 0x6d, 0x9d, 0x8d, 0xbd, 0xad, 0xdd, + 0xcd, 0xfd, 0xed, 0x3a, 0x2a, 0x1a, 0x0a, 0x7a, 0x6a, 0x5a, 0x4a, 0xba, 0xaa, 0x9a, 0x8a, + 0xfa, 0xea, 0xda, 0xca, 0x27, 0x37, 0x07, 0x17, 0x67, 0x77, 0x47, 0x57, 0xa7, 0xb7, 0x87, + 0x97, 0xe7, 0xf7, 0xc7, 0xd7, 0x74, 0x64, 0x54, 0x44, 0x34, 0x24, 0x14, 0x04, 0xf4, 0xe4, + 0xd4, 0xc4, 0xb4, 0xa4, 0x94, 0x84, 0x69, 0x79, 0x49, 0x59, 0x29, 0x39, 0x09, 0x19, 0xe9, + 0xf9, 0xc9, 0xd9, 0xa9, 0xb9, 0x89, 0x99, 0x4e, 0x5e, 0x6e, 0x7e, 0x0e, 0x1e, 0x2e, 0x3e, + 0xce, 0xde, 0xee, 0xfe, 0x8e, 0x9e, 0xae, 0xbe, 0x53, 0x43, 0x73, 0x63, 0x13, 0x03, 0x33, + 0x23, 0xd3, 0xc3, 0xf3, 0xe3, 0x93, 0x83, 0xb3, 0xa3, 0xe8, 0xf8, 0xc8, 0xd8, 0xa8, 0xb8, + 0x88, 0x98, 0x68, 0x78, 0x48, 0x58, 0x28, 0x38, 0x08, 0x18, 0xf5, 0xe5, 0xd5, 0xc5, 0xb5, + 0xa5, 0x95, 0x85, 0x75, 0x65, 0x55, 0x45, 0x35, 0x25, 0x15, 0x05, 0xd2, 0xc2, 0xf2, 0xe2, + 0x92, 0x82, 0xb2, 0xa2, 0x52, 0x42, 0x72, 0x62, 0x12, 0x02, 0x32, 0x22, 0xcf, 0xdf, 0xef, + 0xff, 0x8f, 0x9f, 0xaf, 0xbf, 0x4f, 0x5f, 0x6f, 0x7f, 0x0f, 0x1f, 0x2f, 0x3f, 0x9c, 0x8c, + 0xbc, 0xac, 0xdc, 0xcc, 0xfc, 0xec, 0x1c, 0x0c, 0x3c, 0x2c, 0x5c, 0x4c, 0x7c, 0x6c, 0x81, + 0x91, 0xa1, 0xb1, 0xc1, 0xd1, 0xe1, 0xf1, 0x01, 0x11, 0x21, 0x31, 0x41, 0x51, 0x61, 0x71, + 0xa6, 0xb6, 0x86, 0x96, 0xe6, 0xf6, 0xc6, 0xd6, 0x26, 0x36, 0x06, 0x16, 0x66, 0x76, 0x46, + 0x56, 0xbb, 0xab, 0x9b, 0x8b, 0xfb, 0xeb, 0xdb, 0xcb, 0x3b, 0x2b, 0x1b, 0x0b, 0x7b, 0x6b, + 0x5b, 0x4b, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, + 0xdd, 0xee, 0xff, 0x0d, 0x1c, 0x2f, 0x3e, 0x49, 0x58, 0x6b, 0x7a, 0x85, 0x94, 0xa7, 0xb6, + 0xc1, 0xd0, 0xe3, 0xf2, 0x1a, 0x0b, 0x38, 0x29, 0x5e, 0x4f, 0x7c, 0x6d, 0x92, 0x83, 0xb0, + 0xa1, 0xd6, 0xc7, 0xf4, 0xe5, 0x17, 0x06, 0x35, 0x24, 0x53, 0x42, 0x71, 0x60, 0x9f, 0x8e, + 0xbd, 0xac, 0xdb, 0xca, 0xf9, 0xe8, 0x34, 0x25, 0x16, 0x07, 0x70, 0x61, 0x52, 0x43, 0xbc, + 0xad, 0x9e, 0x8f, 0xf8, 0xe9, 0xda, 0xcb, 0x39, 0x28, 0x1b, 0x0a, 0x7d, 0x6c, 0x5f, 0x4e, + 0xb1, 0xa0, 0x93, 0x82, 0xf5, 0xe4, 0xd7, 0xc6, 0x2e, 0x3f, 0x0c, 0x1d, 0x6a, 0x7b, 0x48, + 0x59, 0xa6, 0xb7, 0x84, 0x95, 0xe2, 0xf3, 0xc0, 0xd1, 0x23, 0x32, 0x01, 0x10, 0x67, 0x76, + 0x45, 0x54, 0xab, 0xba, 0x89, 0x98, 0xef, 0xfe, 0xcd, 0xdc, 0x68, 0x79, 0x4a, 0x5b, 0x2c, + 0x3d, 0x0e, 0x1f, 0xe0, 0xf1, 0xc2, 0xd3, 0xa4, 0xb5, 0x86, 0x97, 0x65, 0x74, 0x47, 0x56, + 0x21, 0x30, 0x03, 0x12, 0xed, 0xfc, 0xcf, 0xde, 0xa9, 0xb8, 0x8b, 0x9a, 0x72, 0x63, 0x50, + 0x41, 0x36, 0x27, 0x14, 0x05, 0xfa, 0xeb, 0xd8, 0xc9, 0xbe, 0xaf, 0x9c, 0x8d, 0x7f, 0x6e, + 0x5d, 0x4c, 0x3b, 0x2a, 0x19, 0x08, 0xf7, 0xe6, 0xd5, 0xc4, 0xb3, 0xa2, 0x91, 0x80, 0x5c, + 0x4d, 0x7e, 0x6f, 0x18, 0x09, 0x3a, 0x2b, 0xd4, 0xc5, 0xf6, 0xe7, 0x90, 0x81, 0xb2, 0xa3, + 0x51, 0x40, 0x73, 0x62, 0x15, 0x04, 0x37, 0x26, 0xd9, 0xc8, 0xfb, 0xea, 0x9d, 0x8c, 0xbf, + 0xae, 0x46, 0x57, 0x64, 0x75, 0x02, 0x13, 0x20, 0x31, 0xce, 0xdf, 0xec, 0xfd, 0x8a, 0x9b, + 0xa8, 0xb9, 0x4b, 0x5a, 0x69, 0x78, 0x0f, 0x1e, 0x2d, 0x3c, 0xc3, 0xd2, 0xe1, 0xf0, 0x87, + 0x96, 0xa5, 0xb4, 0x00, 0x12, 0x24, 0x36, 0x48, 0x5a, 0x6c, 0x7e, 0x90, 0x82, 0xb4, 0xa6, + 0xd8, 0xca, 0xfc, 0xee, 0x3d, 0x2f, 0x19, 0x0b, 0x75, 0x67, 0x51, 0x43, 0xad, 0xbf, 0x89, + 0x9b, 0xe5, 0xf7, 0xc1, 0xd3, 0x7a, 0x68, 0x5e, 0x4c, 0x32, 0x20, 0x16, 0x04, 0xea, 0xf8, + 0xce, 0xdc, 0xa2, 0xb0, 0x86, 0x94, 0x47, 0x55, 0x63, 0x71, 0x0f, 0x1d, 0x2b, 0x39, 0xd7, + 0xc5, 0xf3, 0xe1, 0x9f, 0x8d, 0xbb, 0xa9, 0xf4, 0xe6, 0xd0, 0xc2, 0xbc, 0xae, 0x98, 0x8a, + 0x64, 0x76, 0x40, 0x52, 0x2c, 0x3e, 0x08, 0x1a, 0xc9, 0xdb, 0xed, 0xff, 0x81, 0x93, 0xa5, + 0xb7, 0x59, 0x4b, 0x7d, 0x6f, 0x11, 0x03, 0x35, 0x27, 0x8e, 0x9c, 0xaa, 0xb8, 0xc6, 0xd4, + 0xe2, 0xf0, 0x1e, 0x0c, 0x3a, 0x28, 0x56, 0x44, 0x72, 0x60, 0xb3, 0xa1, 0x97, 0x85, 0xfb, + 0xe9, 0xdf, 0xcd, 0x23, 0x31, 0x07, 0x15, 0x6b, 0x79, 0x4f, 0x5d, 0xf5, 0xe7, 0xd1, 0xc3, + 0xbd, 0xaf, 0x99, 0x8b, 0x65, 0x77, 0x41, 0x53, 0x2d, 0x3f, 0x09, 0x1b, 0xc8, 0xda, 0xec, + 0xfe, 0x80, 0x92, 0xa4, 0xb6, 0x58, 0x4a, 0x7c, 0x6e, 0x10, 0x02, 0x34, 0x26, 0x8f, 0x9d, + 0xab, 0xb9, 0xc7, 0xd5, 0xe3, 0xf1, 0x1f, 0x0d, 0x3b, 0x29, 0x57, 0x45, 0x73, 0x61, 0xb2, + 0xa0, 0x96, 0x84, 0xfa, 0xe8, 0xde, 0xcc, 0x22, 0x30, 0x06, 0x14, 0x6a, 0x78, 0x4e, 0x5c, + 0x01, 0x13, 0x25, 0x37, 0x49, 0x5b, 0x6d, 0x7f, 0x91, 0x83, 0xb5, 0xa7, 0xd9, 0xcb, 0xfd, + 0xef, 0x3c, 0x2e, 0x18, 0x0a, 0x74, 0x66, 0x50, 0x42, 0xac, 0xbe, 0x88, 0x9a, 0xe4, 0xf6, + 0xc0, 0xd2, 0x7b, 0x69, 0x5f, 0x4d, 0x33, 0x21, 0x17, 0x05, 0xeb, 0xf9, 0xcf, 0xdd, 0xa3, + 0xb1, 0x87, 0x95, 0x46, 0x54, 0x62, 0x70, 0x0e, 0x1c, 0x2a, 0x38, 0xd6, 0xc4, 0xf2, 0xe0, + 0x9e, 0x8c, 0xba, 0xa8, 0x00, 0x13, 0x26, 0x35, 0x4c, 0x5f, 0x6a, 0x79, 0x98, 0x8b, 0xbe, + 0xad, 0xd4, 0xc7, 0xf2, 0xe1, 0x2d, 0x3e, 0x0b, 0x18, 0x61, 0x72, 0x47, 0x54, 0xb5, 0xa6, + 0x93, 0x80, 0xf9, 0xea, 0xdf, 0xcc, 0x5a, 0x49, 0x7c, 0x6f, 0x16, 0x05, 0x30, 0x23, 0xc2, + 0xd1, 0xe4, 0xf7, 0x8e, 0x9d, 0xa8, 0xbb, 0x77, 0x64, 0x51, 0x42, 0x3b, 0x28, 0x1d, 0x0e, + 0xef, 0xfc, 0xc9, 0xda, 0xa3, 0xb0, 0x85, 0x96, 0xb4, 0xa7, 0x92, 0x81, 0xf8, 0xeb, 0xde, + 0xcd, 0x2c, 0x3f, 0x0a, 0x19, 0x60, 0x73, 0x46, 0x55, 0x99, 0x8a, 0xbf, 0xac, 0xd5, 0xc6, + 0xf3, 0xe0, 0x01, 0x12, 0x27, 0x34, 0x4d, 0x5e, 0x6b, 0x78, 0xee, 0xfd, 0xc8, 0xdb, 0xa2, + 0xb1, 0x84, 0x97, 0x76, 0x65, 0x50, 0x43, 0x3a, 0x29, 0x1c, 0x0f, 0xc3, 0xd0, 0xe5, 0xf6, + 0x8f, 0x9c, 0xa9, 0xba, 0x5b, 0x48, 0x7d, 0x6e, 0x17, 0x04, 0x31, 0x22, 0x75, 0x66, 0x53, + 0x40, 0x39, 0x2a, 0x1f, 0x0c, 0xed, 0xfe, 0xcb, 0xd8, 0xa1, 0xb2, 0x87, 0x94, 0x58, 0x4b, + 0x7e, 0x6d, 0x14, 0x07, 0x32, 0x21, 0xc0, 0xd3, 0xe6, 0xf5, 0x8c, 0x9f, 0xaa, 0xb9, 0x2f, + 0x3c, 0x09, 0x1a, 0x63, 0x70, 0x45, 0x56, 0xb7, 0xa4, 0x91, 0x82, 0xfb, 0xe8, 0xdd, 0xce, + 0x02, 0x11, 0x24, 0x37, 0x4e, 0x5d, 0x68, 0x7b, 0x9a, 0x89, 0xbc, 0xaf, 0xd6, 0xc5, 0xf0, + 0xe3, 0xc1, 0xd2, 0xe7, 0xf4, 0x8d, 0x9e, 0xab, 0xb8, 0x59, 0x4a, 0x7f, 0x6c, 0x15, 0x06, + 0x33, 0x20, 0xec, 0xff, 0xca, 0xd9, 0xa0, 0xb3, 0x86, 0x95, 0x74, 0x67, 0x52, 0x41, 0x38, + 0x2b, 0x1e, 0x0d, 0x9b, 0x88, 0xbd, 0xae, 0xd7, 0xc4, 0xf1, 0xe2, 0x03, 0x10, 0x25, 0x36, + 0x4f, 0x5c, 0x69, 0x7a, 0xb6, 0xa5, 0x90, 0x83, 0xfa, 0xe9, 0xdc, 0xcf, 0x2e, 0x3d, 0x08, + 0x1b, 0x62, 0x71, 0x44, 0x57, 0x00, 0x14, 0x28, 0x3c, 0x50, 0x44, 0x78, 0x6c, 0xa0, 0xb4, + 0x88, 0x9c, 0xf0, 0xe4, 0xd8, 0xcc, 0x5d, 0x49, 0x75, 0x61, 0x0d, 0x19, 0x25, 0x31, 0xfd, + 0xe9, 0xd5, 0xc1, 0xad, 0xb9, 0x85, 0x91, 0xba, 0xae, 0x92, 0x86, 0xea, 0xfe, 0xc2, 0xd6, + 0x1a, 0x0e, 0x32, 0x26, 0x4a, 0x5e, 0x62, 0x76, 0xe7, 0xf3, 0xcf, 0xdb, 0xb7, 0xa3, 0x9f, + 0x8b, 0x47, 0x53, 0x6f, 0x7b, 0x17, 0x03, 0x3f, 0x2b, 0x69, 0x7d, 0x41, 0x55, 0x39, 0x2d, + 0x11, 0x05, 0xc9, 0xdd, 0xe1, 0xf5, 0x99, 0x8d, 0xb1, 0xa5, 0x34, 0x20, 0x1c, 0x08, 0x64, + 0x70, 0x4c, 0x58, 0x94, 0x80, 0xbc, 0xa8, 0xc4, 0xd0, 0xec, 0xf8, 0xd3, 0xc7, 0xfb, 0xef, + 0x83, 0x97, 0xab, 0xbf, 0x73, 0x67, 0x5b, 0x4f, 0x23, 0x37, 0x0b, 0x1f, 0x8e, 0x9a, 0xa6, + 0xb2, 0xde, 0xca, 0xf6, 0xe2, 0x2e, 0x3a, 0x06, 0x12, 0x7e, 0x6a, 0x56, 0x42, 0xd2, 0xc6, + 0xfa, 0xee, 0x82, 0x96, 0xaa, 0xbe, 0x72, 0x66, 0x5a, 0x4e, 0x22, 0x36, 0x0a, 0x1e, 0x8f, + 0x9b, 0xa7, 0xb3, 0xdf, 0xcb, 0xf7, 0xe3, 0x2f, 0x3b, 0x07, 0x13, 0x7f, 0x6b, 0x57, 0x43, + 0x68, 0x7c, 0x40, 0x54, 0x38, 0x2c, 0x10, 0x04, 0xc8, 0xdc, 0xe0, 0xf4, 0x98, 0x8c, 0xb0, + 0xa4, 0x35, 0x21, 0x1d, 0x09, 0x65, 0x71, 0x4d, 0x59, 0x95, 0x81, 0xbd, 0xa9, 0xc5, 0xd1, + 0xed, 0xf9, 0xbb, 0xaf, 0x93, 0x87, 0xeb, 0xff, 0xc3, 0xd7, 0x1b, 0x0f, 0x33, 0x27, 0x4b, + 0x5f, 0x63, 0x77, 0xe6, 0xf2, 0xce, 0xda, 0xb6, 0xa2, 0x9e, 0x8a, 0x46, 0x52, 0x6e, 0x7a, + 0x16, 0x02, 0x3e, 0x2a, 0x01, 0x15, 0x29, 0x3d, 0x51, 0x45, 0x79, 0x6d, 0xa1, 0xb5, 0x89, + 0x9d, 0xf1, 0xe5, 0xd9, 0xcd, 0x5c, 0x48, 0x74, 0x60, 0x0c, 0x18, 0x24, 0x30, 0xfc, 0xe8, + 0xd4, 0xc0, 0xac, 0xb8, 0x84, 0x90, 0x00, 0x15, 0x2a, 0x3f, 0x54, 0x41, 0x7e, 0x6b, 0xa8, + 0xbd, 0x82, 0x97, 0xfc, 0xe9, 0xd6, 0xc3, 0x4d, 0x58, 0x67, 0x72, 0x19, 0x0c, 0x33, 0x26, + 0xe5, 0xf0, 0xcf, 0xda, 0xb1, 0xa4, 0x9b, 0x8e, 0x9a, 0x8f, 0xb0, 0xa5, 0xce, 0xdb, 0xe4, + 0xf1, 0x32, 0x27, 0x18, 0x0d, 0x66, 0x73, 0x4c, 0x59, 0xd7, 0xc2, 0xfd, 0xe8, 0x83, 0x96, + 0xa9, 0xbc, 0x7f, 0x6a, 0x55, 0x40, 0x2b, 0x3e, 0x01, 0x14, 0x29, 0x3c, 0x03, 0x16, 0x7d, + 0x68, 0x57, 0x42, 0x81, 0x94, 0xab, 0xbe, 0xd5, 0xc0, 0xff, 0xea, 0x64, 0x71, 0x4e, 0x5b, + 0x30, 0x25, 0x1a, 0x0f, 0xcc, 0xd9, 0xe6, 0xf3, 0x98, 0x8d, 0xb2, 0xa7, 0xb3, 0xa6, 0x99, + 0x8c, 0xe7, 0xf2, 0xcd, 0xd8, 0x1b, 0x0e, 0x31, 0x24, 0x4f, 0x5a, 0x65, 0x70, 0xfe, 0xeb, + 0xd4, 0xc1, 0xaa, 0xbf, 0x80, 0x95, 0x56, 0x43, 0x7c, 0x69, 0x02, 0x17, 0x28, 0x3d, 0x52, + 0x47, 0x78, 0x6d, 0x06, 0x13, 0x2c, 0x39, 0xfa, 0xef, 0xd0, 0xc5, 0xae, 0xbb, 0x84, 0x91, + 0x1f, 0x0a, 0x35, 0x20, 0x4b, 0x5e, 0x61, 0x74, 0xb7, 0xa2, 0x9d, 0x88, 0xe3, 0xf6, 0xc9, + 0xdc, 0xc8, 0xdd, 0xe2, 0xf7, 0x9c, 0x89, 0xb6, 0xa3, 0x60, 0x75, 0x4a, 0x5f, 0x34, 0x21, + 0x1e, 0x0b, 0x85, 0x90, 0xaf, 0xba, 0xd1, 0xc4, 0xfb, 0xee, 0x2d, 0x38, 0x07, 0x12, 0x79, + 0x6c, 0x53, 0x46, 0x7b, 0x6e, 0x51, 0x44, 0x2f, 0x3a, 0x05, 0x10, 0xd3, 0xc6, 0xf9, 0xec, + 0x87, 0x92, 0xad, 0xb8, 0x36, 0x23, 0x1c, 0x09, 0x62, 0x77, 0x48, 0x5d, 0x9e, 0x8b, 0xb4, + 0xa1, 0xca, 0xdf, 0xe0, 0xf5, 0xe1, 0xf4, 0xcb, 0xde, 0xb5, 0xa0, 0x9f, 0x8a, 0x49, 0x5c, + 0x63, 0x76, 0x1d, 0x08, 0x37, 0x22, 0xac, 0xb9, 0x86, 0x93, 0xf8, 0xed, 0xd2, 0xc7, 0x04, + 0x11, 0x2e, 0x3b, 0x50, 0x45, 0x7a, 0x6f, 0x00, 0x16, 0x2c, 0x3a, 0x58, 0x4e, 0x74, 0x62, + 0xb0, 0xa6, 0x9c, 0x8a, 0xe8, 0xfe, 0xc4, 0xd2, 0x7d, 0x6b, 0x51, 0x47, 0x25, 0x33, 0x09, + 0x1f, 0xcd, 0xdb, 0xe1, 0xf7, 0x95, 0x83, 0xb9, 0xaf, 0xfa, 0xec, 0xd6, 0xc0, 0xa2, 0xb4, + 0x8e, 0x98, 0x4a, 0x5c, 0x66, 0x70, 0x12, 0x04, 0x3e, 0x28, 0x87, 0x91, 0xab, 0xbd, 0xdf, + 0xc9, 0xf3, 0xe5, 0x37, 0x21, 0x1b, 0x0d, 0x6f, 0x79, 0x43, 0x55, 0xe9, 0xff, 0xc5, 0xd3, + 0xb1, 0xa7, 0x9d, 0x8b, 0x59, 0x4f, 0x75, 0x63, 0x01, 0x17, 0x2d, 0x3b, 0x94, 0x82, 0xb8, + 0xae, 0xcc, 0xda, 0xe0, 0xf6, 0x24, 0x32, 0x08, 0x1e, 0x7c, 0x6a, 0x50, 0x46, 0x13, 0x05, + 0x3f, 0x29, 0x4b, 0x5d, 0x67, 0x71, 0xa3, 0xb5, 0x8f, 0x99, 0xfb, 0xed, 0xd7, 0xc1, 0x6e, + 0x78, 0x42, 0x54, 0x36, 0x20, 0x1a, 0x0c, 0xde, 0xc8, 0xf2, 0xe4, 0x86, 0x90, 0xaa, 0xbc, + 0xcf, 0xd9, 0xe3, 0xf5, 0x97, 0x81, 0xbb, 0xad, 0x7f, 0x69, 0x53, 0x45, 0x27, 0x31, 0x0b, + 0x1d, 0xb2, 0xa4, 0x9e, 0x88, 0xea, 0xfc, 0xc6, 0xd0, 0x02, 0x14, 0x2e, 0x38, 0x5a, 0x4c, + 0x76, 0x60, 0x35, 0x23, 0x19, 0x0f, 0x6d, 0x7b, 0x41, 0x57, 0x85, 0x93, 0xa9, 0xbf, 0xdd, + 0xcb, 0xf1, 0xe7, 0x48, 0x5e, 0x64, 0x72, 0x10, 0x06, 0x3c, 0x2a, 0xf8, 0xee, 0xd4, 0xc2, + 0xa0, 0xb6, 0x8c, 0x9a, 0x26, 0x30, 0x0a, 0x1c, 0x7e, 0x68, 0x52, 0x44, 0x96, 0x80, 0xba, + 0xac, 0xce, 0xd8, 0xe2, 0xf4, 0x5b, 0x4d, 0x77, 0x61, 0x03, 0x15, 0x2f, 0x39, 0xeb, 0xfd, + 0xc7, 0xd1, 0xb3, 0xa5, 0x9f, 0x89, 0xdc, 0xca, 0xf0, 0xe6, 0x84, 0x92, 0xa8, 0xbe, 0x6c, + 0x7a, 0x40, 0x56, 0x34, 0x22, 0x18, 0x0e, 0xa1, 0xb7, 0x8d, 0x9b, 0xf9, 0xef, 0xd5, 0xc3, + 0x11, 0x07, 0x3d, 0x2b, 0x49, 0x5f, 0x65, 0x73, 0x00, 0x17, 0x2e, 0x39, 0x5c, 0x4b, 0x72, + 0x65, 0xb8, 0xaf, 0x96, 0x81, 0xe4, 0xf3, 0xca, 0xdd, 0x6d, 0x7a, 0x43, 0x54, 0x31, 0x26, + 0x1f, 0x08, 0xd5, 0xc2, 0xfb, 0xec, 0x89, 0x9e, 0xa7, 0xb0, 0xda, 0xcd, 0xf4, 0xe3, 0x86, + 0x91, 0xa8, 0xbf, 0x62, 0x75, 0x4c, 0x5b, 0x3e, 0x29, 0x10, 0x07, 0xb7, 0xa0, 0x99, 0x8e, + 0xeb, 0xfc, 0xc5, 0xd2, 0x0f, 0x18, 0x21, 0x36, 0x53, 0x44, 0x7d, 0x6a, 0xa9, 0xbe, 0x87, + 0x90, 0xf5, 0xe2, 0xdb, 0xcc, 0x11, 0x06, 0x3f, 0x28, 0x4d, 0x5a, 0x63, 0x74, 0xc4, 0xd3, + 0xea, 0xfd, 0x98, 0x8f, 0xb6, 0xa1, 0x7c, 0x6b, 0x52, 0x45, 0x20, 0x37, 0x0e, 0x19, 0x73, + 0x64, 0x5d, 0x4a, 0x2f, 0x38, 0x01, 0x16, 0xcb, 0xdc, 0xe5, 0xf2, 0x97, 0x80, 0xb9, 0xae, + 0x1e, 0x09, 0x30, 0x27, 0x42, 0x55, 0x6c, 0x7b, 0xa6, 0xb1, 0x88, 0x9f, 0xfa, 0xed, 0xd4, + 0xc3, 0x4f, 0x58, 0x61, 0x76, 0x13, 0x04, 0x3d, 0x2a, 0xf7, 0xe0, 0xd9, 0xce, 0xab, 0xbc, + 0x85, 0x92, 0x22, 0x35, 0x0c, 0x1b, 0x7e, 0x69, 0x50, 0x47, 0x9a, 0x8d, 0xb4, 0xa3, 0xc6, + 0xd1, 0xe8, 0xff, 0x95, 0x82, 0xbb, 0xac, 0xc9, 0xde, 0xe7, 0xf0, 0x2d, 0x3a, 0x03, 0x14, + 0x71, 0x66, 0x5f, 0x48, 0xf8, 0xef, 0xd6, 0xc1, 0xa4, 0xb3, 0x8a, 0x9d, 0x40, 0x57, 0x6e, + 0x79, 0x1c, 0x0b, 0x32, 0x25, 0xe6, 0xf1, 0xc8, 0xdf, 0xba, 0xad, 0x94, 0x83, 0x5e, 0x49, + 0x70, 0x67, 0x02, 0x15, 0x2c, 0x3b, 0x8b, 0x9c, 0xa5, 0xb2, 0xd7, 0xc0, 0xf9, 0xee, 0x33, + 0x24, 0x1d, 0x0a, 0x6f, 0x78, 0x41, 0x56, 0x3c, 0x2b, 0x12, 0x05, 0x60, 0x77, 0x4e, 0x59, + 0x84, 0x93, 0xaa, 0xbd, 0xd8, 0xcf, 0xf6, 0xe1, 0x51, 0x46, 0x7f, 0x68, 0x0d, 0x1a, 0x23, + 0x34, 0xe9, 0xfe, 0xc7, 0xd0, 0xb5, 0xa2, 0x9b, 0x8c, 0x00, 0x18, 0x30, 0x28, 0x60, 0x78, + 0x50, 0x48, 0xc0, 0xd8, 0xf0, 0xe8, 0xa0, 0xb8, 0x90, 0x88, 0x9d, 0x85, 0xad, 0xb5, 0xfd, + 0xe5, 0xcd, 0xd5, 0x5d, 0x45, 0x6d, 0x75, 0x3d, 0x25, 0x0d, 0x15, 0x27, 0x3f, 0x17, 0x0f, + 0x47, 0x5f, 0x77, 0x6f, 0xe7, 0xff, 0xd7, 0xcf, 0x87, 0x9f, 0xb7, 0xaf, 0xba, 0xa2, 0x8a, + 0x92, 0xda, 0xc2, 0xea, 0xf2, 0x7a, 0x62, 0x4a, 0x52, 0x1a, 0x02, 0x2a, 0x32, 0x4e, 0x56, + 0x7e, 0x66, 0x2e, 0x36, 0x1e, 0x06, 0x8e, 0x96, 0xbe, 0xa6, 0xee, 0xf6, 0xde, 0xc6, 0xd3, + 0xcb, 0xe3, 0xfb, 0xb3, 0xab, 0x83, 0x9b, 0x13, 0x0b, 0x23, 0x3b, 0x73, 0x6b, 0x43, 0x5b, + 0x69, 0x71, 0x59, 0x41, 0x09, 0x11, 0x39, 0x21, 0xa9, 0xb1, 0x99, 0x81, 0xc9, 0xd1, 0xf9, + 0xe1, 0xf4, 0xec, 0xc4, 0xdc, 0x94, 0x8c, 0xa4, 0xbc, 0x34, 0x2c, 0x04, 0x1c, 0x54, 0x4c, + 0x64, 0x7c, 0x9c, 0x84, 0xac, 0xb4, 0xfc, 0xe4, 0xcc, 0xd4, 0x5c, 0x44, 0x6c, 0x74, 0x3c, + 0x24, 0x0c, 0x14, 0x01, 0x19, 0x31, 0x29, 0x61, 0x79, 0x51, 0x49, 0xc1, 0xd9, 0xf1, 0xe9, + 0xa1, 0xb9, 0x91, 0x89, 0xbb, 0xa3, 0x8b, 0x93, 0xdb, 0xc3, 0xeb, 0xf3, 0x7b, 0x63, 0x4b, + 0x53, 0x1b, 0x03, 0x2b, 0x33, 0x26, 0x3e, 0x16, 0x0e, 0x46, 0x5e, 0x76, 0x6e, 0xe6, 0xfe, + 0xd6, 0xce, 0x86, 0x9e, 0xb6, 0xae, 0xd2, 0xca, 0xe2, 0xfa, 0xb2, 0xaa, 0x82, 0x9a, 0x12, + 0x0a, 0x22, 0x3a, 0x72, 0x6a, 0x42, 0x5a, 0x4f, 0x57, 0x7f, 0x67, 0x2f, 0x37, 0x1f, 0x07, + 0x8f, 0x97, 0xbf, 0xa7, 0xef, 0xf7, 0xdf, 0xc7, 0xf5, 0xed, 0xc5, 0xdd, 0x95, 0x8d, 0xa5, + 0xbd, 0x35, 0x2d, 0x05, 0x1d, 0x55, 0x4d, 0x65, 0x7d, 0x68, 0x70, 0x58, 0x40, 0x08, 0x10, + 0x38, 0x20, 0xa8, 0xb0, 0x98, 0x80, 0xc8, 0xd0, 0xf8, 0xe0, 0x00, 0x19, 0x32, 0x2b, 0x64, + 0x7d, 0x56, 0x4f, 0xc8, 0xd1, 0xfa, 0xe3, 0xac, 0xb5, 0x9e, 0x87, 0x8d, 0x94, 0xbf, 0xa6, + 0xe9, 0xf0, 0xdb, 0xc2, 0x45, 0x5c, 0x77, 0x6e, 0x21, 0x38, 0x13, 0x0a, 0x07, 0x1e, 0x35, + 0x2c, 0x63, 0x7a, 0x51, 0x48, 0xcf, 0xd6, 0xfd, 0xe4, 0xab, 0xb2, 0x99, 0x80, 0x8a, 0x93, + 0xb8, 0xa1, 0xee, 0xf7, 0xdc, 0xc5, 0x42, 0x5b, 0x70, 0x69, 0x26, 0x3f, 0x14, 0x0d, 0x0e, + 0x17, 0x3c, 0x25, 0x6a, 0x73, 0x58, 0x41, 0xc6, 0xdf, 0xf4, 0xed, 0xa2, 0xbb, 0x90, 0x89, + 0x83, 0x9a, 0xb1, 0xa8, 0xe7, 0xfe, 0xd5, 0xcc, 0x4b, 0x52, 0x79, 0x60, 0x2f, 0x36, 0x1d, + 0x04, 0x09, 0x10, 0x3b, 0x22, 0x6d, 0x74, 0x5f, 0x46, 0xc1, 0xd8, 0xf3, 0xea, 0xa5, 0xbc, + 0x97, 0x8e, 0x84, 0x9d, 0xb6, 0xaf, 0xe0, 0xf9, 0xd2, 0xcb, 0x4c, 0x55, 0x7e, 0x67, 0x28, + 0x31, 0x1a, 0x03, 0x1c, 0x05, 0x2e, 0x37, 0x78, 0x61, 0x4a, 0x53, 0xd4, 0xcd, 0xe6, 0xff, + 0xb0, 0xa9, 0x82, 0x9b, 0x91, 0x88, 0xa3, 0xba, 0xf5, 0xec, 0xc7, 0xde, 0x59, 0x40, 0x6b, + 0x72, 0x3d, 0x24, 0x0f, 0x16, 0x1b, 0x02, 0x29, 0x30, 0x7f, 0x66, 0x4d, 0x54, 0xd3, 0xca, + 0xe1, 0xf8, 0xb7, 0xae, 0x85, 0x9c, 0x96, 0x8f, 0xa4, 0xbd, 0xf2, 0xeb, 0xc0, 0xd9, 0x5e, + 0x47, 0x6c, 0x75, 0x3a, 0x23, 0x08, 0x11, 0x12, 0x0b, 0x20, 0x39, 0x76, 0x6f, 0x44, 0x5d, + 0xda, 0xc3, 0xe8, 0xf1, 0xbe, 0xa7, 0x8c, 0x95, 0x9f, 0x86, 0xad, 0xb4, 0xfb, 0xe2, 0xc9, + 0xd0, 0x57, 0x4e, 0x65, 0x7c, 0x33, 0x2a, 0x01, 0x18, 0x15, 0x0c, 0x27, 0x3e, 0x71, 0x68, + 0x43, 0x5a, 0xdd, 0xc4, 0xef, 0xf6, 0xb9, 0xa0, 0x8b, 0x92, 0x98, 0x81, 0xaa, 0xb3, 0xfc, + 0xe5, 0xce, 0xd7, 0x50, 0x49, 0x62, 0x7b, 0x34, 0x2d, 0x06, 0x1f, 0x00, 0x1a, 0x34, 0x2e, + 0x68, 0x72, 0x5c, 0x46, 0xd0, 0xca, 0xe4, 0xfe, 0xb8, 0xa2, 0x8c, 0x96, 0xbd, 0xa7, 0x89, + 0x93, 0xd5, 0xcf, 0xe1, 0xfb, 0x6d, 0x77, 0x59, 0x43, 0x05, 0x1f, 0x31, 0x2b, 0x67, 0x7d, + 0x53, 0x49, 0x0f, 0x15, 0x3b, 0x21, 0xb7, 0xad, 0x83, 0x99, 0xdf, 0xc5, 0xeb, 0xf1, 0xda, + 0xc0, 0xee, 0xf4, 0xb2, 0xa8, 0x86, 0x9c, 0x0a, 0x10, 0x3e, 0x24, 0x62, 0x78, 0x56, 0x4c, + 0xce, 0xd4, 0xfa, 0xe0, 0xa6, 0xbc, 0x92, 0x88, 0x1e, 0x04, 0x2a, 0x30, 0x76, 0x6c, 0x42, + 0x58, 0x73, 0x69, 0x47, 0x5d, 0x1b, 0x01, 0x2f, 0x35, 0xa3, 0xb9, 0x97, 0x8d, 0xcb, 0xd1, + 0xff, 0xe5, 0xa9, 0xb3, 0x9d, 0x87, 0xc1, 0xdb, 0xf5, 0xef, 0x79, 0x63, 0x4d, 0x57, 0x11, + 0x0b, 0x25, 0x3f, 0x14, 0x0e, 0x20, 0x3a, 0x7c, 0x66, 0x48, 0x52, 0xc4, 0xde, 0xf0, 0xea, + 0xac, 0xb6, 0x98, 0x82, 0x81, 0x9b, 0xb5, 0xaf, 0xe9, 0xf3, 0xdd, 0xc7, 0x51, 0x4b, 0x65, + 0x7f, 0x39, 0x23, 0x0d, 0x17, 0x3c, 0x26, 0x08, 0x12, 0x54, 0x4e, 0x60, 0x7a, 0xec, 0xf6, + 0xd8, 0xc2, 0x84, 0x9e, 0xb0, 0xaa, 0xe6, 0xfc, 0xd2, 0xc8, 0x8e, 0x94, 0xba, 0xa0, 0x36, + 0x2c, 0x02, 0x18, 0x5e, 0x44, 0x6a, 0x70, 0x5b, 0x41, 0x6f, 0x75, 0x33, 0x29, 0x07, 0x1d, + 0x8b, 0x91, 0xbf, 0xa5, 0xe3, 0xf9, 0xd7, 0xcd, 0x4f, 0x55, 0x7b, 0x61, 0x27, 0x3d, 0x13, + 0x09, 0x9f, 0x85, 0xab, 0xb1, 0xf7, 0xed, 0xc3, 0xd9, 0xf2, 0xe8, 0xc6, 0xdc, 0x9a, 0x80, + 0xae, 0xb4, 0x22, 0x38, 0x16, 0x0c, 0x4a, 0x50, 0x7e, 0x64, 0x28, 0x32, 0x1c, 0x06, 0x40, + 0x5a, 0x74, 0x6e, 0xf8, 0xe2, 0xcc, 0xd6, 0x90, 0x8a, 0xa4, 0xbe, 0x95, 0x8f, 0xa1, 0xbb, + 0xfd, 0xe7, 0xc9, 0xd3, 0x45, 0x5f, 0x71, 0x6b, 0x2d, 0x37, 0x19, 0x03, 0x00, 0x1b, 0x36, + 0x2d, 0x6c, 0x77, 0x5a, 0x41, 0xd8, 0xc3, 0xee, 0xf5, 0xb4, 0xaf, 0x82, 0x99, 0xad, 0xb6, + 0x9b, 0x80, 0xc1, 0xda, 0xf7, 0xec, 0x75, 0x6e, 0x43, 0x58, 0x19, 0x02, 0x2f, 0x34, 0x47, + 0x5c, 0x71, 0x6a, 0x2b, 0x30, 0x1d, 0x06, 0x9f, 0x84, 0xa9, 0xb2, 0xf3, 0xe8, 0xc5, 0xde, + 0xea, 0xf1, 0xdc, 0xc7, 0x86, 0x9d, 0xb0, 0xab, 0x32, 0x29, 0x04, 0x1f, 0x5e, 0x45, 0x68, + 0x73, 0x8e, 0x95, 0xb8, 0xa3, 0xe2, 0xf9, 0xd4, 0xcf, 0x56, 0x4d, 0x60, 0x7b, 0x3a, 0x21, + 0x0c, 0x17, 0x23, 0x38, 0x15, 0x0e, 0x4f, 0x54, 0x79, 0x62, 0xfb, 0xe0, 0xcd, 0xd6, 0x97, + 0x8c, 0xa1, 0xba, 0xc9, 0xd2, 0xff, 0xe4, 0xa5, 0xbe, 0x93, 0x88, 0x11, 0x0a, 0x27, 0x3c, + 0x7d, 0x66, 0x4b, 0x50, 0x64, 0x7f, 0x52, 0x49, 0x08, 0x13, 0x3e, 0x25, 0xbc, 0xa7, 0x8a, + 0x91, 0xd0, 0xcb, 0xe6, 0xfd, 0x01, 0x1a, 0x37, 0x2c, 0x6d, 0x76, 0x5b, 0x40, 0xd9, 0xc2, + 0xef, 0xf4, 0xb5, 0xae, 0x83, 0x98, 0xac, 0xb7, 0x9a, 0x81, 0xc0, 0xdb, 0xf6, 0xed, 0x74, + 0x6f, 0x42, 0x59, 0x18, 0x03, 0x2e, 0x35, 0x46, 0x5d, 0x70, 0x6b, 0x2a, 0x31, 0x1c, 0x07, + 0x9e, 0x85, 0xa8, 0xb3, 0xf2, 0xe9, 0xc4, 0xdf, 0xeb, 0xf0, 0xdd, 0xc6, 0x87, 0x9c, 0xb1, + 0xaa, 0x33, 0x28, 0x05, 0x1e, 0x5f, 0x44, 0x69, 0x72, 0x8f, 0x94, 0xb9, 0xa2, 0xe3, 0xf8, + 0xd5, 0xce, 0x57, 0x4c, 0x61, 0x7a, 0x3b, 0x20, 0x0d, 0x16, 0x22, 0x39, 0x14, 0x0f, 0x4e, + 0x55, 0x78, 0x63, 0xfa, 0xe1, 0xcc, 0xd7, 0x96, 0x8d, 0xa0, 0xbb, 0xc8, 0xd3, 0xfe, 0xe5, + 0xa4, 0xbf, 0x92, 0x89, 0x10, 0x0b, 0x26, 0x3d, 0x7c, 0x67, 0x4a, 0x51, 0x65, 0x7e, 0x53, + 0x48, 0x09, 0x12, 0x3f, 0x24, 0xbd, 0xa6, 0x8b, 0x90, 0xd1, 0xca, 0xe7, 0xfc, 0x00, 0x1c, + 0x38, 0x24, 0x70, 0x6c, 0x48, 0x54, 0xe0, 0xfc, 0xd8, 0xc4, 0x90, 0x8c, 0xa8, 0xb4, 0xdd, + 0xc1, 0xe5, 0xf9, 0xad, 0xb1, 0x95, 0x89, 0x3d, 0x21, 0x05, 0x19, 0x4d, 0x51, 0x75, 0x69, + 0xa7, 0xbb, 0x9f, 0x83, 0xd7, 0xcb, 0xef, 0xf3, 0x47, 0x5b, 0x7f, 0x63, 0x37, 0x2b, 0x0f, + 0x13, 0x7a, 0x66, 0x42, 0x5e, 0x0a, 0x16, 0x32, 0x2e, 0x9a, 0x86, 0xa2, 0xbe, 0xea, 0xf6, + 0xd2, 0xce, 0x53, 0x4f, 0x6b, 0x77, 0x23, 0x3f, 0x1b, 0x07, 0xb3, 0xaf, 0x8b, 0x97, 0xc3, + 0xdf, 0xfb, 0xe7, 0x8e, 0x92, 0xb6, 0xaa, 0xfe, 0xe2, 0xc6, 0xda, 0x6e, 0x72, 0x56, 0x4a, + 0x1e, 0x02, 0x26, 0x3a, 0xf4, 0xe8, 0xcc, 0xd0, 0x84, 0x98, 0xbc, 0xa0, 0x14, 0x08, 0x2c, + 0x30, 0x64, 0x78, 0x5c, 0x40, 0x29, 0x35, 0x11, 0x0d, 0x59, 0x45, 0x61, 0x7d, 0xc9, 0xd5, + 0xf1, 0xed, 0xb9, 0xa5, 0x81, 0x9d, 0xa6, 0xba, 0x9e, 0x82, 0xd6, 0xca, 0xee, 0xf2, 0x46, + 0x5a, 0x7e, 0x62, 0x36, 0x2a, 0x0e, 0x12, 0x7b, 0x67, 0x43, 0x5f, 0x0b, 0x17, 0x33, 0x2f, + 0x9b, 0x87, 0xa3, 0xbf, 0xeb, 0xf7, 0xd3, 0xcf, 0x01, 0x1d, 0x39, 0x25, 0x71, 0x6d, 0x49, + 0x55, 0xe1, 0xfd, 0xd9, 0xc5, 0x91, 0x8d, 0xa9, 0xb5, 0xdc, 0xc0, 0xe4, 0xf8, 0xac, 0xb0, + 0x94, 0x88, 0x3c, 0x20, 0x04, 0x18, 0x4c, 0x50, 0x74, 0x68, 0xf5, 0xe9, 0xcd, 0xd1, 0x85, + 0x99, 0xbd, 0xa1, 0x15, 0x09, 0x2d, 0x31, 0x65, 0x79, 0x5d, 0x41, 0x28, 0x34, 0x10, 0x0c, + 0x58, 0x44, 0x60, 0x7c, 0xc8, 0xd4, 0xf0, 0xec, 0xb8, 0xa4, 0x80, 0x9c, 0x52, 0x4e, 0x6a, + 0x76, 0x22, 0x3e, 0x1a, 0x06, 0xb2, 0xae, 0x8a, 0x96, 0xc2, 0xde, 0xfa, 0xe6, 0x8f, 0x93, + 0xb7, 0xab, 0xff, 0xe3, 0xc7, 0xdb, 0x6f, 0x73, 0x57, 0x4b, 0x1f, 0x03, 0x27, 0x3b, 0x00, + 0x1d, 0x3a, 0x27, 0x74, 0x69, 0x4e, 0x53, 0xe8, 0xf5, 0xd2, 0xcf, 0x9c, 0x81, 0xa6, 0xbb, + 0xcd, 0xd0, 0xf7, 0xea, 0xb9, 0xa4, 0x83, 0x9e, 0x25, 0x38, 0x1f, 0x02, 0x51, 0x4c, 0x6b, + 0x76, 0x87, 0x9a, 0xbd, 0xa0, 0xf3, 0xee, 0xc9, 0xd4, 0x6f, 0x72, 0x55, 0x48, 0x1b, 0x06, + 0x21, 0x3c, 0x4a, 0x57, 0x70, 0x6d, 0x3e, 0x23, 0x04, 0x19, 0xa2, 0xbf, 0x98, 0x85, 0xd6, + 0xcb, 0xec, 0xf1, 0x13, 0x0e, 0x29, 0x34, 0x67, 0x7a, 0x5d, 0x40, 0xfb, 0xe6, 0xc1, 0xdc, + 0x8f, 0x92, 0xb5, 0xa8, 0xde, 0xc3, 0xe4, 0xf9, 0xaa, 0xb7, 0x90, 0x8d, 0x36, 0x2b, 0x0c, + 0x11, 0x42, 0x5f, 0x78, 0x65, 0x94, 0x89, 0xae, 0xb3, 0xe0, 0xfd, 0xda, 0xc7, 0x7c, 0x61, + 0x46, 0x5b, 0x08, 0x15, 0x32, 0x2f, 0x59, 0x44, 0x63, 0x7e, 0x2d, 0x30, 0x17, 0x0a, 0xb1, + 0xac, 0x8b, 0x96, 0xc5, 0xd8, 0xff, 0xe2, 0x26, 0x3b, 0x1c, 0x01, 0x52, 0x4f, 0x68, 0x75, + 0xce, 0xd3, 0xf4, 0xe9, 0xba, 0xa7, 0x80, 0x9d, 0xeb, 0xf6, 0xd1, 0xcc, 0x9f, 0x82, 0xa5, + 0xb8, 0x03, 0x1e, 0x39, 0x24, 0x77, 0x6a, 0x4d, 0x50, 0xa1, 0xbc, 0x9b, 0x86, 0xd5, 0xc8, + 0xef, 0xf2, 0x49, 0x54, 0x73, 0x6e, 0x3d, 0x20, 0x07, 0x1a, 0x6c, 0x71, 0x56, 0x4b, 0x18, + 0x05, 0x22, 0x3f, 0x84, 0x99, 0xbe, 0xa3, 0xf0, 0xed, 0xca, 0xd7, 0x35, 0x28, 0x0f, 0x12, + 0x41, 0x5c, 0x7b, 0x66, 0xdd, 0xc0, 0xe7, 0xfa, 0xa9, 0xb4, 0x93, 0x8e, 0xf8, 0xe5, 0xc2, + 0xdf, 0x8c, 0x91, 0xb6, 0xab, 0x10, 0x0d, 0x2a, 0x37, 0x64, 0x79, 0x5e, 0x43, 0xb2, 0xaf, + 0x88, 0x95, 0xc6, 0xdb, 0xfc, 0xe1, 0x5a, 0x47, 0x60, 0x7d, 0x2e, 0x33, 0x14, 0x09, 0x7f, + 0x62, 0x45, 0x58, 0x0b, 0x16, 0x31, 0x2c, 0x97, 0x8a, 0xad, 0xb0, 0xe3, 0xfe, 0xd9, 0xc4, + 0x00, 0x1e, 0x3c, 0x22, 0x78, 0x66, 0x44, 0x5a, 0xf0, 0xee, 0xcc, 0xd2, 0x88, 0x96, 0xb4, + 0xaa, 0xfd, 0xe3, 0xc1, 0xdf, 0x85, 0x9b, 0xb9, 0xa7, 0x0d, 0x13, 0x31, 0x2f, 0x75, 0x6b, + 0x49, 0x57, 0xe7, 0xf9, 0xdb, 0xc5, 0x9f, 0x81, 0xa3, 0xbd, 0x17, 0x09, 0x2b, 0x35, 0x6f, + 0x71, 0x53, 0x4d, 0x1a, 0x04, 0x26, 0x38, 0x62, 0x7c, 0x5e, 0x40, 0xea, 0xf4, 0xd6, 0xc8, + 0x92, 0x8c, 0xae, 0xb0, 0xd3, 0xcd, 0xef, 0xf1, 0xab, 0xb5, 0x97, 0x89, 0x23, 0x3d, 0x1f, + 0x01, 0x5b, 0x45, 0x67, 0x79, 0x2e, 0x30, 0x12, 0x0c, 0x56, 0x48, 0x6a, 0x74, 0xde, 0xc0, + 0xe2, 0xfc, 0xa6, 0xb8, 0x9a, 0x84, 0x34, 0x2a, 0x08, 0x16, 0x4c, 0x52, 0x70, 0x6e, 0xc4, + 0xda, 0xf8, 0xe6, 0xbc, 0xa2, 0x80, 0x9e, 0xc9, 0xd7, 0xf5, 0xeb, 0xb1, 0xaf, 0x8d, 0x93, + 0x39, 0x27, 0x05, 0x1b, 0x41, 0x5f, 0x7d, 0x63, 0xbb, 0xa5, 0x87, 0x99, 0xc3, 0xdd, 0xff, + 0xe1, 0x4b, 0x55, 0x77, 0x69, 0x33, 0x2d, 0x0f, 0x11, 0x46, 0x58, 0x7a, 0x64, 0x3e, 0x20, + 0x02, 0x1c, 0xb6, 0xa8, 0x8a, 0x94, 0xce, 0xd0, 0xf2, 0xec, 0x5c, 0x42, 0x60, 0x7e, 0x24, + 0x3a, 0x18, 0x06, 0xac, 0xb2, 0x90, 0x8e, 0xd4, 0xca, 0xe8, 0xf6, 0xa1, 0xbf, 0x9d, 0x83, + 0xd9, 0xc7, 0xe5, 0xfb, 0x51, 0x4f, 0x6d, 0x73, 0x29, 0x37, 0x15, 0x0b, 0x68, 0x76, 0x54, + 0x4a, 0x10, 0x0e, 0x2c, 0x32, 0x98, 0x86, 0xa4, 0xba, 0xe0, 0xfe, 0xdc, 0xc2, 0x95, 0x8b, + 0xa9, 0xb7, 0xed, 0xf3, 0xd1, 0xcf, 0x65, 0x7b, 0x59, 0x47, 0x1d, 0x03, 0x21, 0x3f, 0x8f, + 0x91, 0xb3, 0xad, 0xf7, 0xe9, 0xcb, 0xd5, 0x7f, 0x61, 0x43, 0x5d, 0x07, 0x19, 0x3b, 0x25, + 0x72, 0x6c, 0x4e, 0x50, 0x0a, 0x14, 0x36, 0x28, 0x82, 0x9c, 0xbe, 0xa0, 0xfa, 0xe4, 0xc6, + 0xd8, 0x00, 0x1f, 0x3e, 0x21, 0x7c, 0x63, 0x42, 0x5d, 0xf8, 0xe7, 0xc6, 0xd9, 0x84, 0x9b, + 0xba, 0xa5, 0xed, 0xf2, 0xd3, 0xcc, 0x91, 0x8e, 0xaf, 0xb0, 0x15, 0x0a, 0x2b, 0x34, 0x69, + 0x76, 0x57, 0x48, 0xc7, 0xd8, 0xf9, 0xe6, 0xbb, 0xa4, 0x85, 0x9a, 0x3f, 0x20, 0x01, 0x1e, + 0x43, 0x5c, 0x7d, 0x62, 0x2a, 0x35, 0x14, 0x0b, 0x56, 0x49, 0x68, 0x77, 0xd2, 0xcd, 0xec, + 0xf3, 0xae, 0xb1, 0x90, 0x8f, 0x93, 0x8c, 0xad, 0xb2, 0xef, 0xf0, 0xd1, 0xce, 0x6b, 0x74, + 0x55, 0x4a, 0x17, 0x08, 0x29, 0x36, 0x7e, 0x61, 0x40, 0x5f, 0x02, 0x1d, 0x3c, 0x23, 0x86, + 0x99, 0xb8, 0xa7, 0xfa, 0xe5, 0xc4, 0xdb, 0x54, 0x4b, 0x6a, 0x75, 0x28, 0x37, 0x16, 0x09, + 0xac, 0xb3, 0x92, 0x8d, 0xd0, 0xcf, 0xee, 0xf1, 0xb9, 0xa6, 0x87, 0x98, 0xc5, 0xda, 0xfb, + 0xe4, 0x41, 0x5e, 0x7f, 0x60, 0x3d, 0x22, 0x03, 0x1c, 0x3b, 0x24, 0x05, 0x1a, 0x47, 0x58, + 0x79, 0x66, 0xc3, 0xdc, 0xfd, 0xe2, 0xbf, 0xa0, 0x81, 0x9e, 0xd6, 0xc9, 0xe8, 0xf7, 0xaa, + 0xb5, 0x94, 0x8b, 0x2e, 0x31, 0x10, 0x0f, 0x52, 0x4d, 0x6c, 0x73, 0xfc, 0xe3, 0xc2, 0xdd, + 0x80, 0x9f, 0xbe, 0xa1, 0x04, 0x1b, 0x3a, 0x25, 0x78, 0x67, 0x46, 0x59, 0x11, 0x0e, 0x2f, + 0x30, 0x6d, 0x72, 0x53, 0x4c, 0xe9, 0xf6, 0xd7, 0xc8, 0x95, 0x8a, 0xab, 0xb4, 0xa8, 0xb7, + 0x96, 0x89, 0xd4, 0xcb, 0xea, 0xf5, 0x50, 0x4f, 0x6e, 0x71, 0x2c, 0x33, 0x12, 0x0d, 0x45, + 0x5a, 0x7b, 0x64, 0x39, 0x26, 0x07, 0x18, 0xbd, 0xa2, 0x83, 0x9c, 0xc1, 0xde, 0xff, 0xe0, + 0x6f, 0x70, 0x51, 0x4e, 0x13, 0x0c, 0x2d, 0x32, 0x97, 0x88, 0xa9, 0xb6, 0xeb, 0xf4, 0xd5, + 0xca, 0x82, 0x9d, 0xbc, 0xa3, 0xfe, 0xe1, 0xc0, 0xdf, 0x7a, 0x65, 0x44, 0x5b, 0x06, 0x19, + 0x38, 0x27, 0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xc0, 0xe0, 0x1d, 0x3d, 0x5d, 0x7d, 0x9d, + 0xbd, 0xdd, 0xfd, 0x3a, 0x1a, 0x7a, 0x5a, 0xba, 0x9a, 0xfa, 0xda, 0x27, 0x07, 0x67, 0x47, + 0xa7, 0x87, 0xe7, 0xc7, 0x74, 0x54, 0x34, 0x14, 0xf4, 0xd4, 0xb4, 0x94, 0x69, 0x49, 0x29, + 0x09, 0xe9, 0xc9, 0xa9, 0x89, 0x4e, 0x6e, 0x0e, 0x2e, 0xce, 0xee, 0x8e, 0xae, 0x53, 0x73, + 0x13, 0x33, 0xd3, 0xf3, 0x93, 0xb3, 0xe8, 0xc8, 0xa8, 0x88, 0x68, 0x48, 0x28, 0x08, 0xf5, + 0xd5, 0xb5, 0x95, 0x75, 0x55, 0x35, 0x15, 0xd2, 0xf2, 0x92, 0xb2, 0x52, 0x72, 0x12, 0x32, + 0xcf, 0xef, 0x8f, 0xaf, 0x4f, 0x6f, 0x0f, 0x2f, 0x9c, 0xbc, 0xdc, 0xfc, 0x1c, 0x3c, 0x5c, + 0x7c, 0x81, 0xa1, 0xc1, 0xe1, 0x01, 0x21, 0x41, 0x61, 0xa6, 0x86, 0xe6, 0xc6, 0x26, 0x06, + 0x66, 0x46, 0xbb, 0x9b, 0xfb, 0xdb, 0x3b, 0x1b, 0x7b, 0x5b, 0xcd, 0xed, 0x8d, 0xad, 0x4d, + 0x6d, 0x0d, 0x2d, 0xd0, 0xf0, 0x90, 0xb0, 0x50, 0x70, 0x10, 0x30, 0xf7, 0xd7, 0xb7, 0x97, + 0x77, 0x57, 0x37, 0x17, 0xea, 0xca, 0xaa, 0x8a, 0x6a, 0x4a, 0x2a, 0x0a, 0xb9, 0x99, 0xf9, + 0xd9, 0x39, 0x19, 0x79, 0x59, 0xa4, 0x84, 0xe4, 0xc4, 0x24, 0x04, 0x64, 0x44, 0x83, 0xa3, + 0xc3, 0xe3, 0x03, 0x23, 0x43, 0x63, 0x9e, 0xbe, 0xde, 0xfe, 0x1e, 0x3e, 0x5e, 0x7e, 0x25, + 0x05, 0x65, 0x45, 0xa5, 0x85, 0xe5, 0xc5, 0x38, 0x18, 0x78, 0x58, 0xb8, 0x98, 0xf8, 0xd8, + 0x1f, 0x3f, 0x5f, 0x7f, 0x9f, 0xbf, 0xdf, 0xff, 0x02, 0x22, 0x42, 0x62, 0x82, 0xa2, 0xc2, + 0xe2, 0x51, 0x71, 0x11, 0x31, 0xd1, 0xf1, 0x91, 0xb1, 0x4c, 0x6c, 0x0c, 0x2c, 0xcc, 0xec, + 0x8c, 0xac, 0x6b, 0x4b, 0x2b, 0x0b, 0xeb, 0xcb, 0xab, 0x8b, 0x76, 0x56, 0x36, 0x16, 0xf6, + 0xd6, 0xb6, 0x96, 0x00, 0x21, 0x42, 0x63, 0x84, 0xa5, 0xc6, 0xe7, 0x15, 0x34, 0x57, 0x76, + 0x91, 0xb0, 0xd3, 0xf2, 0x2a, 0x0b, 0x68, 0x49, 0xae, 0x8f, 0xec, 0xcd, 0x3f, 0x1e, 0x7d, + 0x5c, 0xbb, 0x9a, 0xf9, 0xd8, 0x54, 0x75, 0x16, 0x37, 0xd0, 0xf1, 0x92, 0xb3, 0x41, 0x60, + 0x03, 0x22, 0xc5, 0xe4, 0x87, 0xa6, 0x7e, 0x5f, 0x3c, 0x1d, 0xfa, 0xdb, 0xb8, 0x99, 0x6b, + 0x4a, 0x29, 0x08, 0xef, 0xce, 0xad, 0x8c, 0xa8, 0x89, 0xea, 0xcb, 0x2c, 0x0d, 0x6e, 0x4f, + 0xbd, 0x9c, 0xff, 0xde, 0x39, 0x18, 0x7b, 0x5a, 0x82, 0xa3, 0xc0, 0xe1, 0x06, 0x27, 0x44, + 0x65, 0x97, 0xb6, 0xd5, 0xf4, 0x13, 0x32, 0x51, 0x70, 0xfc, 0xdd, 0xbe, 0x9f, 0x78, 0x59, + 0x3a, 0x1b, 0xe9, 0xc8, 0xab, 0x8a, 0x6d, 0x4c, 0x2f, 0x0e, 0xd6, 0xf7, 0x94, 0xb5, 0x52, + 0x73, 0x10, 0x31, 0xc3, 0xe2, 0x81, 0xa0, 0x47, 0x66, 0x05, 0x24, 0x4d, 0x6c, 0x0f, 0x2e, + 0xc9, 0xe8, 0x8b, 0xaa, 0x58, 0x79, 0x1a, 0x3b, 0xdc, 0xfd, 0x9e, 0xbf, 0x67, 0x46, 0x25, + 0x04, 0xe3, 0xc2, 0xa1, 0x80, 0x72, 0x53, 0x30, 0x11, 0xf6, 0xd7, 0xb4, 0x95, 0x19, 0x38, + 0x5b, 0x7a, 0x9d, 0xbc, 0xdf, 0xfe, 0x0c, 0x2d, 0x4e, 0x6f, 0x88, 0xa9, 0xca, 0xeb, 0x33, + 0x12, 0x71, 0x50, 0xb7, 0x96, 0xf5, 0xd4, 0x26, 0x07, 0x64, 0x45, 0xa2, 0x83, 0xe0, 0xc1, + 0xe5, 0xc4, 0xa7, 0x86, 0x61, 0x40, 0x23, 0x02, 0xf0, 0xd1, 0xb2, 0x93, 0x74, 0x55, 0x36, + 0x17, 0xcf, 0xee, 0x8d, 0xac, 0x4b, 0x6a, 0x09, 0x28, 0xda, 0xfb, 0x98, 0xb9, 0x5e, 0x7f, + 0x1c, 0x3d, 0xb1, 0x90, 0xf3, 0xd2, 0x35, 0x14, 0x77, 0x56, 0xa4, 0x85, 0xe6, 0xc7, 0x20, + 0x01, 0x62, 0x43, 0x9b, 0xba, 0xd9, 0xf8, 0x1f, 0x3e, 0x5d, 0x7c, 0x8e, 0xaf, 0xcc, 0xed, + 0x0a, 0x2b, 0x48, 0x69, 0x00, 0x22, 0x44, 0x66, 0x88, 0xaa, 0xcc, 0xee, 0x0d, 0x2f, 0x49, + 0x6b, 0x85, 0xa7, 0xc1, 0xe3, 0x1a, 0x38, 0x5e, 0x7c, 0x92, 0xb0, 0xd6, 0xf4, 0x17, 0x35, + 0x53, 0x71, 0x9f, 0xbd, 0xdb, 0xf9, 0x34, 0x16, 0x70, 0x52, 0xbc, 0x9e, 0xf8, 0xda, 0x39, + 0x1b, 0x7d, 0x5f, 0xb1, 0x93, 0xf5, 0xd7, 0x2e, 0x0c, 0x6a, 0x48, 0xa6, 0x84, 0xe2, 0xc0, + 0x23, 0x01, 0x67, 0x45, 0xab, 0x89, 0xef, 0xcd, 0x68, 0x4a, 0x2c, 0x0e, 0xe0, 0xc2, 0xa4, + 0x86, 0x65, 0x47, 0x21, 0x03, 0xed, 0xcf, 0xa9, 0x8b, 0x72, 0x50, 0x36, 0x14, 0xfa, 0xd8, + 0xbe, 0x9c, 0x7f, 0x5d, 0x3b, 0x19, 0xf7, 0xd5, 0xb3, 0x91, 0x5c, 0x7e, 0x18, 0x3a, 0xd4, + 0xf6, 0x90, 0xb2, 0x51, 0x73, 0x15, 0x37, 0xd9, 0xfb, 0x9d, 0xbf, 0x46, 0x64, 0x02, 0x20, + 0xce, 0xec, 0x8a, 0xa8, 0x4b, 0x69, 0x0f, 0x2d, 0xc3, 0xe1, 0x87, 0xa5, 0xd0, 0xf2, 0x94, + 0xb6, 0x58, 0x7a, 0x1c, 0x3e, 0xdd, 0xff, 0x99, 0xbb, 0x55, 0x77, 0x11, 0x33, 0xca, 0xe8, + 0x8e, 0xac, 0x42, 0x60, 0x06, 0x24, 0xc7, 0xe5, 0x83, 0xa1, 0x4f, 0x6d, 0x0b, 0x29, 0xe4, + 0xc6, 0xa0, 0x82, 0x6c, 0x4e, 0x28, 0x0a, 0xe9, 0xcb, 0xad, 0x8f, 0x61, 0x43, 0x25, 0x07, + 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, 0xf3, 0xd1, 0xb7, 0x95, 0x7b, 0x59, 0x3f, + 0x1d, 0xb8, 0x9a, 0xfc, 0xde, 0x30, 0x12, 0x74, 0x56, 0xb5, 0x97, 0xf1, 0xd3, 0x3d, 0x1f, + 0x79, 0x5b, 0xa2, 0x80, 0xe6, 0xc4, 0x2a, 0x08, 0x6e, 0x4c, 0xaf, 0x8d, 0xeb, 0xc9, 0x27, + 0x05, 0x63, 0x41, 0x8c, 0xae, 0xc8, 0xea, 0x04, 0x26, 0x40, 0x62, 0x81, 0xa3, 0xc5, 0xe7, + 0x09, 0x2b, 0x4d, 0x6f, 0x96, 0xb4, 0xd2, 0xf0, 0x1e, 0x3c, 0x5a, 0x78, 0x9b, 0xb9, 0xdf, + 0xfd, 0x13, 0x31, 0x57, 0x75, 0x00, 0x23, 0x46, 0x65, 0x8c, 0xaf, 0xca, 0xe9, 0x05, 0x26, + 0x43, 0x60, 0x89, 0xaa, 0xcf, 0xec, 0x0a, 0x29, 0x4c, 0x6f, 0x86, 0xa5, 0xc0, 0xe3, 0x0f, + 0x2c, 0x49, 0x6a, 0x83, 0xa0, 0xc5, 0xe6, 0x14, 0x37, 0x52, 0x71, 0x98, 0xbb, 0xde, 0xfd, + 0x11, 0x32, 0x57, 0x74, 0x9d, 0xbe, 0xdb, 0xf8, 0x1e, 0x3d, 0x58, 0x7b, 0x92, 0xb1, 0xd4, + 0xf7, 0x1b, 0x38, 0x5d, 0x7e, 0x97, 0xb4, 0xd1, 0xf2, 0x28, 0x0b, 0x6e, 0x4d, 0xa4, 0x87, + 0xe2, 0xc1, 0x2d, 0x0e, 0x6b, 0x48, 0xa1, 0x82, 0xe7, 0xc4, 0x22, 0x01, 0x64, 0x47, 0xae, + 0x8d, 0xe8, 0xcb, 0x27, 0x04, 0x61, 0x42, 0xab, 0x88, 0xed, 0xce, 0x3c, 0x1f, 0x7a, 0x59, + 0xb0, 0x93, 0xf6, 0xd5, 0x39, 0x1a, 0x7f, 0x5c, 0xb5, 0x96, 0xf3, 0xd0, 0x36, 0x15, 0x70, + 0x53, 0xba, 0x99, 0xfc, 0xdf, 0x33, 0x10, 0x75, 0x56, 0xbf, 0x9c, 0xf9, 0xda, 0x50, 0x73, + 0x16, 0x35, 0xdc, 0xff, 0x9a, 0xb9, 0x55, 0x76, 0x13, 0x30, 0xd9, 0xfa, 0x9f, 0xbc, 0x5a, + 0x79, 0x1c, 0x3f, 0xd6, 0xf5, 0x90, 0xb3, 0x5f, 0x7c, 0x19, 0x3a, 0xd3, 0xf0, 0x95, 0xb6, + 0x44, 0x67, 0x02, 0x21, 0xc8, 0xeb, 0x8e, 0xad, 0x41, 0x62, 0x07, 0x24, 0xcd, 0xee, 0x8b, + 0xa8, 0x4e, 0x6d, 0x08, 0x2b, 0xc2, 0xe1, 0x84, 0xa7, 0x4b, 0x68, 0x0d, 0x2e, 0xc7, 0xe4, + 0x81, 0xa2, 0x78, 0x5b, 0x3e, 0x1d, 0xf4, 0xd7, 0xb2, 0x91, 0x7d, 0x5e, 0x3b, 0x18, 0xf1, + 0xd2, 0xb7, 0x94, 0x72, 0x51, 0x34, 0x17, 0xfe, 0xdd, 0xb8, 0x9b, 0x77, 0x54, 0x31, 0x12, + 0xfb, 0xd8, 0xbd, 0x9e, 0x6c, 0x4f, 0x2a, 0x09, 0xe0, 0xc3, 0xa6, 0x85, 0x69, 0x4a, 0x2f, + 0x0c, 0xe5, 0xc6, 0xa3, 0x80, 0x66, 0x45, 0x20, 0x03, 0xea, 0xc9, 0xac, 0x8f, 0x63, 0x40, + 0x25, 0x06, 0xef, 0xcc, 0xa9, 0x8a, 0x00, 0x24, 0x48, 0x6c, 0x90, 0xb4, 0xd8, 0xfc, 0x3d, + 0x19, 0x75, 0x51, 0xad, 0x89, 0xe5, 0xc1, 0x7a, 0x5e, 0x32, 0x16, 0xea, 0xce, 0xa2, 0x86, + 0x47, 0x63, 0x0f, 0x2b, 0xd7, 0xf3, 0x9f, 0xbb, 0xf4, 0xd0, 0xbc, 0x98, 0x64, 0x40, 0x2c, + 0x08, 0xc9, 0xed, 0x81, 0xa5, 0x59, 0x7d, 0x11, 0x35, 0x8e, 0xaa, 0xc6, 0xe2, 0x1e, 0x3a, + 0x56, 0x72, 0xb3, 0x97, 0xfb, 0xdf, 0x23, 0x07, 0x6b, 0x4f, 0xf5, 0xd1, 0xbd, 0x99, 0x65, + 0x41, 0x2d, 0x09, 0xc8, 0xec, 0x80, 0xa4, 0x58, 0x7c, 0x10, 0x34, 0x8f, 0xab, 0xc7, 0xe3, + 0x1f, 0x3b, 0x57, 0x73, 0xb2, 0x96, 0xfa, 0xde, 0x22, 0x06, 0x6a, 0x4e, 0x01, 0x25, 0x49, + 0x6d, 0x91, 0xb5, 0xd9, 0xfd, 0x3c, 0x18, 0x74, 0x50, 0xac, 0x88, 0xe4, 0xc0, 0x7b, 0x5f, + 0x33, 0x17, 0xeb, 0xcf, 0xa3, 0x87, 0x46, 0x62, 0x0e, 0x2a, 0xd6, 0xf2, 0x9e, 0xba, 0xf7, + 0xd3, 0xbf, 0x9b, 0x67, 0x43, 0x2f, 0x0b, 0xca, 0xee, 0x82, 0xa6, 0x5a, 0x7e, 0x12, 0x36, + 0x8d, 0xa9, 0xc5, 0xe1, 0x1d, 0x39, 0x55, 0x71, 0xb0, 0x94, 0xf8, 0xdc, 0x20, 0x04, 0x68, + 0x4c, 0x03, 0x27, 0x4b, 0x6f, 0x93, 0xb7, 0xdb, 0xff, 0x3e, 0x1a, 0x76, 0x52, 0xae, 0x8a, + 0xe6, 0xc2, 0x79, 0x5d, 0x31, 0x15, 0xe9, 0xcd, 0xa1, 0x85, 0x44, 0x60, 0x0c, 0x28, 0xd4, + 0xf0, 0x9c, 0xb8, 0x02, 0x26, 0x4a, 0x6e, 0x92, 0xb6, 0xda, 0xfe, 0x3f, 0x1b, 0x77, 0x53, + 0xaf, 0x8b, 0xe7, 0xc3, 0x78, 0x5c, 0x30, 0x14, 0xe8, 0xcc, 0xa0, 0x84, 0x45, 0x61, 0x0d, + 0x29, 0xd5, 0xf1, 0x9d, 0xb9, 0xf6, 0xd2, 0xbe, 0x9a, 0x66, 0x42, 0x2e, 0x0a, 0xcb, 0xef, + 0x83, 0xa7, 0x5b, 0x7f, 0x13, 0x37, 0x8c, 0xa8, 0xc4, 0xe0, 0x1c, 0x38, 0x54, 0x70, 0xb1, + 0x95, 0xf9, 0xdd, 0x21, 0x05, 0x69, 0x4d, 0x00, 0x25, 0x4a, 0x6f, 0x94, 0xb1, 0xde, 0xfb, + 0x35, 0x10, 0x7f, 0x5a, 0xa1, 0x84, 0xeb, 0xce, 0x6a, 0x4f, 0x20, 0x05, 0xfe, 0xdb, 0xb4, + 0x91, 0x5f, 0x7a, 0x15, 0x30, 0xcb, 0xee, 0x81, 0xa4, 0xd4, 0xf1, 0x9e, 0xbb, 0x40, 0x65, + 0x0a, 0x2f, 0xe1, 0xc4, 0xab, 0x8e, 0x75, 0x50, 0x3f, 0x1a, 0xbe, 0x9b, 0xf4, 0xd1, 0x2a, + 0x0f, 0x60, 0x45, 0x8b, 0xae, 0xc1, 0xe4, 0x1f, 0x3a, 0x55, 0x70, 0xb5, 0x90, 0xff, 0xda, + 0x21, 0x04, 0x6b, 0x4e, 0x80, 0xa5, 0xca, 0xef, 0x14, 0x31, 0x5e, 0x7b, 0xdf, 0xfa, 0x95, + 0xb0, 0x4b, 0x6e, 0x01, 0x24, 0xea, 0xcf, 0xa0, 0x85, 0x7e, 0x5b, 0x34, 0x11, 0x61, 0x44, + 0x2b, 0x0e, 0xf5, 0xd0, 0xbf, 0x9a, 0x54, 0x71, 0x1e, 0x3b, 0xc0, 0xe5, 0x8a, 0xaf, 0x0b, + 0x2e, 0x41, 0x64, 0x9f, 0xba, 0xd5, 0xf0, 0x3e, 0x1b, 0x74, 0x51, 0xaa, 0x8f, 0xe0, 0xc5, + 0x77, 0x52, 0x3d, 0x18, 0xe3, 0xc6, 0xa9, 0x8c, 0x42, 0x67, 0x08, 0x2d, 0xd6, 0xf3, 0x9c, + 0xb9, 0x1d, 0x38, 0x57, 0x72, 0x89, 0xac, 0xc3, 0xe6, 0x28, 0x0d, 0x62, 0x47, 0xbc, 0x99, + 0xf6, 0xd3, 0xa3, 0x86, 0xe9, 0xcc, 0x37, 0x12, 0x7d, 0x58, 0x96, 0xb3, 0xdc, 0xf9, 0x02, + 0x27, 0x48, 0x6d, 0xc9, 0xec, 0x83, 0xa6, 0x5d, 0x78, 0x17, 0x32, 0xfc, 0xd9, 0xb6, 0x93, + 0x68, 0x4d, 0x22, 0x07, 0xc2, 0xe7, 0x88, 0xad, 0x56, 0x73, 0x1c, 0x39, 0xf7, 0xd2, 0xbd, + 0x98, 0x63, 0x46, 0x29, 0x0c, 0xa8, 0x8d, 0xe2, 0xc7, 0x3c, 0x19, 0x76, 0x53, 0x9d, 0xb8, + 0xd7, 0xf2, 0x09, 0x2c, 0x43, 0x66, 0x16, 0x33, 0x5c, 0x79, 0x82, 0xa7, 0xc8, 0xed, 0x23, + 0x06, 0x69, 0x4c, 0xb7, 0x92, 0xfd, 0xd8, 0x7c, 0x59, 0x36, 0x13, 0xe8, 0xcd, 0xa2, 0x87, + 0x49, 0x6c, 0x03, 0x26, 0xdd, 0xf8, 0x97, 0xb2, 0x00, 0x26, 0x4c, 0x6a, 0x98, 0xbe, 0xd4, + 0xf2, 0x2d, 0x0b, 0x61, 0x47, 0xb5, 0x93, 0xf9, 0xdf, 0x5a, 0x7c, 0x16, 0x30, 0xc2, 0xe4, + 0x8e, 0xa8, 0x77, 0x51, 0x3b, 0x1d, 0xef, 0xc9, 0xa3, 0x85, 0xb4, 0x92, 0xf8, 0xde, 0x2c, + 0x0a, 0x60, 0x46, 0x99, 0xbf, 0xd5, 0xf3, 0x01, 0x27, 0x4d, 0x6b, 0xee, 0xc8, 0xa2, 0x84, + 0x76, 0x50, 0x3a, 0x1c, 0xc3, 0xe5, 0x8f, 0xa9, 0x5b, 0x7d, 0x17, 0x31, 0x75, 0x53, 0x39, + 0x1f, 0xed, 0xcb, 0xa1, 0x87, 0x58, 0x7e, 0x14, 0x32, 0xc0, 0xe6, 0x8c, 0xaa, 0x2f, 0x09, + 0x63, 0x45, 0xb7, 0x91, 0xfb, 0xdd, 0x02, 0x24, 0x4e, 0x68, 0x9a, 0xbc, 0xd6, 0xf0, 0xc1, + 0xe7, 0x8d, 0xab, 0x59, 0x7f, 0x15, 0x33, 0xec, 0xca, 0xa0, 0x86, 0x74, 0x52, 0x38, 0x1e, + 0x9b, 0xbd, 0xd7, 0xf1, 0x03, 0x25, 0x4f, 0x69, 0xb6, 0x90, 0xfa, 0xdc, 0x2e, 0x08, 0x62, + 0x44, 0xea, 0xcc, 0xa6, 0x80, 0x72, 0x54, 0x3e, 0x18, 0xc7, 0xe1, 0x8b, 0xad, 0x5f, 0x79, + 0x13, 0x35, 0xb0, 0x96, 0xfc, 0xda, 0x28, 0x0e, 0x64, 0x42, 0x9d, 0xbb, 0xd1, 0xf7, 0x05, + 0x23, 0x49, 0x6f, 0x5e, 0x78, 0x12, 0x34, 0xc6, 0xe0, 0x8a, 0xac, 0x73, 0x55, 0x3f, 0x19, + 0xeb, 0xcd, 0xa7, 0x81, 0x04, 0x22, 0x48, 0x6e, 0x9c, 0xba, 0xd0, 0xf6, 0x29, 0x0f, 0x65, + 0x43, 0xb1, 0x97, 0xfd, 0xdb, 0x9f, 0xb9, 0xd3, 0xf5, 0x07, 0x21, 0x4b, 0x6d, 0xb2, 0x94, + 0xfe, 0xd8, 0x2a, 0x0c, 0x66, 0x40, 0xc5, 0xe3, 0x89, 0xaf, 0x5d, 0x7b, 0x11, 0x37, 0xe8, + 0xce, 0xa4, 0x82, 0x70, 0x56, 0x3c, 0x1a, 0x2b, 0x0d, 0x67, 0x41, 0xb3, 0x95, 0xff, 0xd9, + 0x06, 0x20, 0x4a, 0x6c, 0x9e, 0xb8, 0xd2, 0xf4, 0x71, 0x57, 0x3d, 0x1b, 0xe9, 0xcf, 0xa5, + 0x83, 0x5c, 0x7a, 0x10, 0x36, 0xc4, 0xe2, 0x88, 0xae, 0x00, 0x27, 0x4e, 0x69, 0x9c, 0xbb, + 0xd2, 0xf5, 0x25, 0x02, 0x6b, 0x4c, 0xb9, 0x9e, 0xf7, 0xd0, 0x4a, 0x6d, 0x04, 0x23, 0xd6, + 0xf1, 0x98, 0xbf, 0x6f, 0x48, 0x21, 0x06, 0xf3, 0xd4, 0xbd, 0x9a, 0x94, 0xb3, 0xda, 0xfd, + 0x08, 0x2f, 0x46, 0x61, 0xb1, 0x96, 0xff, 0xd8, 0x2d, 0x0a, 0x63, 0x44, 0xde, 0xf9, 0x90, + 0xb7, 0x42, 0x65, 0x0c, 0x2b, 0xfb, 0xdc, 0xb5, 0x92, 0x67, 0x40, 0x29, 0x0e, 0x35, 0x12, + 0x7b, 0x5c, 0xa9, 0x8e, 0xe7, 0xc0, 0x10, 0x37, 0x5e, 0x79, 0x8c, 0xab, 0xc2, 0xe5, 0x7f, + 0x58, 0x31, 0x16, 0xe3, 0xc4, 0xad, 0x8a, 0x5a, 0x7d, 0x14, 0x33, 0xc6, 0xe1, 0x88, 0xaf, + 0xa1, 0x86, 0xef, 0xc8, 0x3d, 0x1a, 0x73, 0x54, 0x84, 0xa3, 0xca, 0xed, 0x18, 0x3f, 0x56, + 0x71, 0xeb, 0xcc, 0xa5, 0x82, 0x77, 0x50, 0x39, 0x1e, 0xce, 0xe9, 0x80, 0xa7, 0x52, 0x75, + 0x1c, 0x3b, 0x6a, 0x4d, 0x24, 0x03, 0xf6, 0xd1, 0xb8, 0x9f, 0x4f, 0x68, 0x01, 0x26, 0xd3, + 0xf4, 0x9d, 0xba, 0x20, 0x07, 0x6e, 0x49, 0xbc, 0x9b, 0xf2, 0xd5, 0x05, 0x22, 0x4b, 0x6c, + 0x99, 0xbe, 0xd7, 0xf0, 0xfe, 0xd9, 0xb0, 0x97, 0x62, 0x45, 0x2c, 0x0b, 0xdb, 0xfc, 0x95, + 0xb2, 0x47, 0x60, 0x09, 0x2e, 0xb4, 0x93, 0xfa, 0xdd, 0x28, 0x0f, 0x66, 0x41, 0x91, 0xb6, + 0xdf, 0xf8, 0x0d, 0x2a, 0x43, 0x64, 0x5f, 0x78, 0x11, 0x36, 0xc3, 0xe4, 0x8d, 0xaa, 0x7a, + 0x5d, 0x34, 0x13, 0xe6, 0xc1, 0xa8, 0x8f, 0x15, 0x32, 0x5b, 0x7c, 0x89, 0xae, 0xc7, 0xe0, + 0x30, 0x17, 0x7e, 0x59, 0xac, 0x8b, 0xe2, 0xc5, 0xcb, 0xec, 0x85, 0xa2, 0x57, 0x70, 0x19, + 0x3e, 0xee, 0xc9, 0xa0, 0x87, 0x72, 0x55, 0x3c, 0x1b, 0x81, 0xa6, 0xcf, 0xe8, 0x1d, 0x3a, + 0x53, 0x74, 0xa4, 0x83, 0xea, 0xcd, 0x38, 0x1f, 0x76, 0x51, 0x00, 0x28, 0x50, 0x78, 0xa0, + 0x88, 0xf0, 0xd8, 0x5d, 0x75, 0x0d, 0x25, 0xfd, 0xd5, 0xad, 0x85, 0xba, 0x92, 0xea, 0xc2, + 0x1a, 0x32, 0x4a, 0x62, 0xe7, 0xcf, 0xb7, 0x9f, 0x47, 0x6f, 0x17, 0x3f, 0x69, 0x41, 0x39, + 0x11, 0xc9, 0xe1, 0x99, 0xb1, 0x34, 0x1c, 0x64, 0x4c, 0x94, 0xbc, 0xc4, 0xec, 0xd3, 0xfb, + 0x83, 0xab, 0x73, 0x5b, 0x23, 0x0b, 0x8e, 0xa6, 0xde, 0xf6, 0x2e, 0x06, 0x7e, 0x56, 0xd2, + 0xfa, 0x82, 0xaa, 0x72, 0x5a, 0x22, 0x0a, 0x8f, 0xa7, 0xdf, 0xf7, 0x2f, 0x07, 0x7f, 0x57, + 0x68, 0x40, 0x38, 0x10, 0xc8, 0xe0, 0x98, 0xb0, 0x35, 0x1d, 0x65, 0x4d, 0x95, 0xbd, 0xc5, + 0xed, 0xbb, 0x93, 0xeb, 0xc3, 0x1b, 0x33, 0x4b, 0x63, 0xe6, 0xce, 0xb6, 0x9e, 0x46, 0x6e, + 0x16, 0x3e, 0x01, 0x29, 0x51, 0x79, 0xa1, 0x89, 0xf1, 0xd9, 0x5c, 0x74, 0x0c, 0x24, 0xfc, + 0xd4, 0xac, 0x84, 0xb9, 0x91, 0xe9, 0xc1, 0x19, 0x31, 0x49, 0x61, 0xe4, 0xcc, 0xb4, 0x9c, + 0x44, 0x6c, 0x14, 0x3c, 0x03, 0x2b, 0x53, 0x7b, 0xa3, 0x8b, 0xf3, 0xdb, 0x5e, 0x76, 0x0e, + 0x26, 0xfe, 0xd6, 0xae, 0x86, 0xd0, 0xf8, 0x80, 0xa8, 0x70, 0x58, 0x20, 0x08, 0x8d, 0xa5, + 0xdd, 0xf5, 0x2d, 0x05, 0x7d, 0x55, 0x6a, 0x42, 0x3a, 0x12, 0xca, 0xe2, 0x9a, 0xb2, 0x37, + 0x1f, 0x67, 0x4f, 0x97, 0xbf, 0xc7, 0xef, 0x6b, 0x43, 0x3b, 0x13, 0xcb, 0xe3, 0x9b, 0xb3, + 0x36, 0x1e, 0x66, 0x4e, 0x96, 0xbe, 0xc6, 0xee, 0xd1, 0xf9, 0x81, 0xa9, 0x71, 0x59, 0x21, + 0x09, 0x8c, 0xa4, 0xdc, 0xf4, 0x2c, 0x04, 0x7c, 0x54, 0x02, 0x2a, 0x52, 0x7a, 0xa2, 0x8a, + 0xf2, 0xda, 0x5f, 0x77, 0x0f, 0x27, 0xff, 0xd7, 0xaf, 0x87, 0xb8, 0x90, 0xe8, 0xc0, 0x18, + 0x30, 0x48, 0x60, 0xe5, 0xcd, 0xb5, 0x9d, 0x45, 0x6d, 0x15, 0x3d, 0x00, 0x29, 0x52, 0x7b, + 0xa4, 0x8d, 0xf6, 0xdf, 0x55, 0x7c, 0x07, 0x2e, 0xf1, 0xd8, 0xa3, 0x8a, 0xaa, 0x83, 0xf8, + 0xd1, 0x0e, 0x27, 0x5c, 0x75, 0xff, 0xd6, 0xad, 0x84, 0x5b, 0x72, 0x09, 0x20, 0x49, 0x60, + 0x1b, 0x32, 0xed, 0xc4, 0xbf, 0x96, 0x1c, 0x35, 0x4e, 0x67, 0xb8, 0x91, 0xea, 0xc3, 0xe3, + 0xca, 0xb1, 0x98, 0x47, 0x6e, 0x15, 0x3c, 0xb6, 0x9f, 0xe4, 0xcd, 0x12, 0x3b, 0x40, 0x69, + 0x92, 0xbb, 0xc0, 0xe9, 0x36, 0x1f, 0x64, 0x4d, 0xc7, 0xee, 0x95, 0xbc, 0x63, 0x4a, 0x31, + 0x18, 0x38, 0x11, 0x6a, 0x43, 0x9c, 0xb5, 0xce, 0xe7, 0x6d, 0x44, 0x3f, 0x16, 0xc9, 0xe0, + 0x9b, 0xb2, 0xdb, 0xf2, 0x89, 0xa0, 0x7f, 0x56, 0x2d, 0x04, 0x8e, 0xa7, 0xdc, 0xf5, 0x2a, + 0x03, 0x78, 0x51, 0x71, 0x58, 0x23, 0x0a, 0xd5, 0xfc, 0x87, 0xae, 0x24, 0x0d, 0x76, 0x5f, + 0x80, 0xa9, 0xd2, 0xfb, 0x39, 0x10, 0x6b, 0x42, 0x9d, 0xb4, 0xcf, 0xe6, 0x6c, 0x45, 0x3e, + 0x17, 0xc8, 0xe1, 0x9a, 0xb3, 0x93, 0xba, 0xc1, 0xe8, 0x37, 0x1e, 0x65, 0x4c, 0xc6, 0xef, + 0x94, 0xbd, 0x62, 0x4b, 0x30, 0x19, 0x70, 0x59, 0x22, 0x0b, 0xd4, 0xfd, 0x86, 0xaf, 0x25, + 0x0c, 0x77, 0x5e, 0x81, 0xa8, 0xd3, 0xfa, 0xda, 0xf3, 0x88, 0xa1, 0x7e, 0x57, 0x2c, 0x05, + 0x8f, 0xa6, 0xdd, 0xf4, 0x2b, 0x02, 0x79, 0x50, 0xab, 0x82, 0xf9, 0xd0, 0x0f, 0x26, 0x5d, + 0x74, 0xfe, 0xd7, 0xac, 0x85, 0x5a, 0x73, 0x08, 0x21, 0x01, 0x28, 0x53, 0x7a, 0xa5, 0x8c, + 0xf7, 0xde, 0x54, 0x7d, 0x06, 0x2f, 0xf0, 0xd9, 0xa2, 0x8b, 0xe2, 0xcb, 0xb0, 0x99, 0x46, + 0x6f, 0x14, 0x3d, 0xb7, 0x9e, 0xe5, 0xcc, 0x13, 0x3a, 0x41, 0x68, 0x48, 0x61, 0x1a, 0x33, + 0xec, 0xc5, 0xbe, 0x97, 0x1d, 0x34, 0x4f, 0x66, 0xb9, 0x90, 0xeb, 0xc2, 0x00, 0x2a, 0x54, + 0x7e, 0xa8, 0x82, 0xfc, 0xd6, 0x4d, 0x67, 0x19, 0x33, 0xe5, 0xcf, 0xb1, 0x9b, 0x9a, 0xb0, + 0xce, 0xe4, 0x32, 0x18, 0x66, 0x4c, 0xd7, 0xfd, 0x83, 0xa9, 0x7f, 0x55, 0x2b, 0x01, 0x29, + 0x03, 0x7d, 0x57, 0x81, 0xab, 0xd5, 0xff, 0x64, 0x4e, 0x30, 0x1a, 0xcc, 0xe6, 0x98, 0xb2, + 0xb3, 0x99, 0xe7, 0xcd, 0x1b, 0x31, 0x4f, 0x65, 0xfe, 0xd4, 0xaa, 0x80, 0x56, 0x7c, 0x02, + 0x28, 0x52, 0x78, 0x06, 0x2c, 0xfa, 0xd0, 0xae, 0x84, 0x1f, 0x35, 0x4b, 0x61, 0xb7, 0x9d, + 0xe3, 0xc9, 0xc8, 0xe2, 0x9c, 0xb6, 0x60, 0x4a, 0x34, 0x1e, 0x85, 0xaf, 0xd1, 0xfb, 0x2d, + 0x07, 0x79, 0x53, 0x7b, 0x51, 0x2f, 0x05, 0xd3, 0xf9, 0x87, 0xad, 0x36, 0x1c, 0x62, 0x48, + 0x9e, 0xb4, 0xca, 0xe0, 0xe1, 0xcb, 0xb5, 0x9f, 0x49, 0x63, 0x1d, 0x37, 0xac, 0x86, 0xf8, + 0xd2, 0x04, 0x2e, 0x50, 0x7a, 0xa4, 0x8e, 0xf0, 0xda, 0x0c, 0x26, 0x58, 0x72, 0xe9, 0xc3, + 0xbd, 0x97, 0x41, 0x6b, 0x15, 0x3f, 0x3e, 0x14, 0x6a, 0x40, 0x96, 0xbc, 0xc2, 0xe8, 0x73, + 0x59, 0x27, 0x0d, 0xdb, 0xf1, 0x8f, 0xa5, 0x8d, 0xa7, 0xd9, 0xf3, 0x25, 0x0f, 0x71, 0x5b, + 0xc0, 0xea, 0x94, 0xbe, 0x68, 0x42, 0x3c, 0x16, 0x17, 0x3d, 0x43, 0x69, 0xbf, 0x95, 0xeb, + 0xc1, 0x5a, 0x70, 0x0e, 0x24, 0xf2, 0xd8, 0xa6, 0x8c, 0xf6, 0xdc, 0xa2, 0x88, 0x5e, 0x74, + 0x0a, 0x20, 0xbb, 0x91, 0xef, 0xc5, 0x13, 0x39, 0x47, 0x6d, 0x6c, 0x46, 0x38, 0x12, 0xc4, + 0xee, 0x90, 0xba, 0x21, 0x0b, 0x75, 0x5f, 0x89, 0xa3, 0xdd, 0xf7, 0xdf, 0xf5, 0x8b, 0xa1, + 0x77, 0x5d, 0x23, 0x09, 0x92, 0xb8, 0xc6, 0xec, 0x3a, 0x10, 0x6e, 0x44, 0x45, 0x6f, 0x11, + 0x3b, 0xed, 0xc7, 0xb9, 0x93, 0x08, 0x22, 0x5c, 0x76, 0xa0, 0x8a, 0xf4, 0xde, 0x00, 0x2b, + 0x56, 0x7d, 0xac, 0x87, 0xfa, 0xd1, 0x45, 0x6e, 0x13, 0x38, 0xe9, 0xc2, 0xbf, 0x94, 0x8a, + 0xa1, 0xdc, 0xf7, 0x26, 0x0d, 0x70, 0x5b, 0xcf, 0xe4, 0x99, 0xb2, 0x63, 0x48, 0x35, 0x1e, + 0x09, 0x22, 0x5f, 0x74, 0xa5, 0x8e, 0xf3, 0xd8, 0x4c, 0x67, 0x1a, 0x31, 0xe0, 0xcb, 0xb6, + 0x9d, 0x83, 0xa8, 0xd5, 0xfe, 0x2f, 0x04, 0x79, 0x52, 0xc6, 0xed, 0x90, 0xbb, 0x6a, 0x41, + 0x3c, 0x17, 0x12, 0x39, 0x44, 0x6f, 0xbe, 0x95, 0xe8, 0xc3, 0x57, 0x7c, 0x01, 0x2a, 0xfb, + 0xd0, 0xad, 0x86, 0x98, 0xb3, 0xce, 0xe5, 0x34, 0x1f, 0x62, 0x49, 0xdd, 0xf6, 0x8b, 0xa0, + 0x71, 0x5a, 0x27, 0x0c, 0x1b, 0x30, 0x4d, 0x66, 0xb7, 0x9c, 0xe1, 0xca, 0x5e, 0x75, 0x08, + 0x23, 0xf2, 0xd9, 0xa4, 0x8f, 0x91, 0xba, 0xc7, 0xec, 0x3d, 0x16, 0x6b, 0x40, 0xd4, 0xff, + 0x82, 0xa9, 0x78, 0x53, 0x2e, 0x05, 0x24, 0x0f, 0x72, 0x59, 0x88, 0xa3, 0xde, 0xf5, 0x61, + 0x4a, 0x37, 0x1c, 0xcd, 0xe6, 0x9b, 0xb0, 0xae, 0x85, 0xf8, 0xd3, 0x02, 0x29, 0x54, 0x7f, + 0xeb, 0xc0, 0xbd, 0x96, 0x47, 0x6c, 0x11, 0x3a, 0x2d, 0x06, 0x7b, 0x50, 0x81, 0xaa, 0xd7, + 0xfc, 0x68, 0x43, 0x3e, 0x15, 0xc4, 0xef, 0x92, 0xb9, 0xa7, 0x8c, 0xf1, 0xda, 0x0b, 0x20, + 0x5d, 0x76, 0xe2, 0xc9, 0xb4, 0x9f, 0x4e, 0x65, 0x18, 0x33, 0x36, 0x1d, 0x60, 0x4b, 0x9a, + 0xb1, 0xcc, 0xe7, 0x73, 0x58, 0x25, 0x0e, 0xdf, 0xf4, 0x89, 0xa2, 0xbc, 0x97, 0xea, 0xc1, + 0x10, 0x3b, 0x46, 0x6d, 0xf9, 0xd2, 0xaf, 0x84, 0x55, 0x7e, 0x03, 0x28, 0x3f, 0x14, 0x69, + 0x42, 0x93, 0xb8, 0xc5, 0xee, 0x7a, 0x51, 0x2c, 0x07, 0xd6, 0xfd, 0x80, 0xab, 0xb5, 0x9e, + 0xe3, 0xc8, 0x19, 0x32, 0x4f, 0x64, 0xf0, 0xdb, 0xa6, 0x8d, 0x5c, 0x77, 0x0a, 0x21, 0x00, + 0x2c, 0x58, 0x74, 0xb0, 0x9c, 0xe8, 0xc4, 0x7d, 0x51, 0x25, 0x09, 0xcd, 0xe1, 0x95, 0xb9, + 0xfa, 0xd6, 0xa2, 0x8e, 0x4a, 0x66, 0x12, 0x3e, 0x87, 0xab, 0xdf, 0xf3, 0x37, 0x1b, 0x6f, + 0x43, 0xe9, 0xc5, 0xb1, 0x9d, 0x59, 0x75, 0x01, 0x2d, 0x94, 0xb8, 0xcc, 0xe0, 0x24, 0x08, + 0x7c, 0x50, 0x13, 0x3f, 0x4b, 0x67, 0xa3, 0x8f, 0xfb, 0xd7, 0x6e, 0x42, 0x36, 0x1a, 0xde, + 0xf2, 0x86, 0xaa, 0xcf, 0xe3, 0x97, 0xbb, 0x7f, 0x53, 0x27, 0x0b, 0xb2, 0x9e, 0xea, 0xc6, + 0x02, 0x2e, 0x5a, 0x76, 0x35, 0x19, 0x6d, 0x41, 0x85, 0xa9, 0xdd, 0xf1, 0x48, 0x64, 0x10, + 0x3c, 0xf8, 0xd4, 0xa0, 0x8c, 0x26, 0x0a, 0x7e, 0x52, 0x96, 0xba, 0xce, 0xe2, 0x5b, 0x77, + 0x03, 0x2f, 0xeb, 0xc7, 0xb3, 0x9f, 0xdc, 0xf0, 0x84, 0xa8, 0x6c, 0x40, 0x34, 0x18, 0xa1, + 0x8d, 0xf9, 0xd5, 0x11, 0x3d, 0x49, 0x65, 0x83, 0xaf, 0xdb, 0xf7, 0x33, 0x1f, 0x6b, 0x47, + 0xfe, 0xd2, 0xa6, 0x8a, 0x4e, 0x62, 0x16, 0x3a, 0x79, 0x55, 0x21, 0x0d, 0xc9, 0xe5, 0x91, + 0xbd, 0x04, 0x28, 0x5c, 0x70, 0xb4, 0x98, 0xec, 0xc0, 0x6a, 0x46, 0x32, 0x1e, 0xda, 0xf6, + 0x82, 0xae, 0x17, 0x3b, 0x4f, 0x63, 0xa7, 0x8b, 0xff, 0xd3, 0x90, 0xbc, 0xc8, 0xe4, 0x20, + 0x0c, 0x78, 0x54, 0xed, 0xc1, 0xb5, 0x99, 0x5d, 0x71, 0x05, 0x29, 0x4c, 0x60, 0x14, 0x38, + 0xfc, 0xd0, 0xa4, 0x88, 0x31, 0x1d, 0x69, 0x45, 0x81, 0xad, 0xd9, 0xf5, 0xb6, 0x9a, 0xee, + 0xc2, 0x06, 0x2a, 0x5e, 0x72, 0xcb, 0xe7, 0x93, 0xbf, 0x7b, 0x57, 0x23, 0x0f, 0xa5, 0x89, + 0xfd, 0xd1, 0x15, 0x39, 0x4d, 0x61, 0xd8, 0xf4, 0x80, 0xac, 0x68, 0x44, 0x30, 0x1c, 0x5f, + 0x73, 0x07, 0x2b, 0xef, 0xc3, 0xb7, 0x9b, 0x22, 0x0e, 0x7a, 0x56, 0x92, 0xbe, 0xca, 0xe6, + 0x00, 0x2d, 0x5a, 0x77, 0xb4, 0x99, 0xee, 0xc3, 0x75, 0x58, 0x2f, 0x02, 0xc1, 0xec, 0x9b, + 0xb6, 0xea, 0xc7, 0xb0, 0x9d, 0x5e, 0x73, 0x04, 0x29, 0x9f, 0xb2, 0xc5, 0xe8, 0x2b, 0x06, + 0x71, 0x5c, 0xc9, 0xe4, 0x93, 0xbe, 0x7d, 0x50, 0x27, 0x0a, 0xbc, 0x91, 0xe6, 0xcb, 0x08, + 0x25, 0x52, 0x7f, 0x23, 0x0e, 0x79, 0x54, 0x97, 0xba, 0xcd, 0xe0, 0x56, 0x7b, 0x0c, 0x21, + 0xe2, 0xcf, 0xb8, 0x95, 0x8f, 0xa2, 0xd5, 0xf8, 0x3b, 0x16, 0x61, 0x4c, 0xfa, 0xd7, 0xa0, + 0x8d, 0x4e, 0x63, 0x14, 0x39, 0x65, 0x48, 0x3f, 0x12, 0xd1, 0xfc, 0x8b, 0xa6, 0x10, 0x3d, + 0x4a, 0x67, 0xa4, 0x89, 0xfe, 0xd3, 0x46, 0x6b, 0x1c, 0x31, 0xf2, 0xdf, 0xa8, 0x85, 0x33, + 0x1e, 0x69, 0x44, 0x87, 0xaa, 0xdd, 0xf0, 0xac, 0x81, 0xf6, 0xdb, 0x18, 0x35, 0x42, 0x6f, + 0xd9, 0xf4, 0x83, 0xae, 0x6d, 0x40, 0x37, 0x1a, 0x03, 0x2e, 0x59, 0x74, 0xb7, 0x9a, 0xed, + 0xc0, 0x76, 0x5b, 0x2c, 0x01, 0xc2, 0xef, 0x98, 0xb5, 0xe9, 0xc4, 0xb3, 0x9e, 0x5d, 0x70, + 0x07, 0x2a, 0x9c, 0xb1, 0xc6, 0xeb, 0x28, 0x05, 0x72, 0x5f, 0xca, 0xe7, 0x90, 0xbd, 0x7e, + 0x53, 0x24, 0x09, 0xbf, 0x92, 0xe5, 0xc8, 0x0b, 0x26, 0x51, 0x7c, 0x20, 0x0d, 0x7a, 0x57, + 0x94, 0xb9, 0xce, 0xe3, 0x55, 0x78, 0x0f, 0x22, 0xe1, 0xcc, 0xbb, 0x96, 0x8c, 0xa1, 0xd6, + 0xfb, 0x38, 0x15, 0x62, 0x4f, 0xf9, 0xd4, 0xa3, 0x8e, 0x4d, 0x60, 0x17, 0x3a, 0x66, 0x4b, + 0x3c, 0x11, 0xd2, 0xff, 0x88, 0xa5, 0x13, 0x3e, 0x49, 0x64, 0xa7, 0x8a, 0xfd, 0xd0, 0x45, + 0x68, 0x1f, 0x32, 0xf1, 0xdc, 0xab, 0x86, 0x30, 0x1d, 0x6a, 0x47, 0x84, 0xa9, 0xde, 0xf3, + 0xaf, 0x82, 0xf5, 0xd8, 0x1b, 0x36, 0x41, 0x6c, 0xda, 0xf7, 0x80, 0xad, 0x6e, 0x43, 0x34, + 0x19, 0x00, 0x2e, 0x5c, 0x72, 0xb8, 0x96, 0xe4, 0xca, 0x6d, 0x43, 0x31, 0x1f, 0xd5, 0xfb, + 0x89, 0xa7, 0xda, 0xf4, 0x86, 0xa8, 0x62, 0x4c, 0x3e, 0x10, 0xb7, 0x99, 0xeb, 0xc5, 0x0f, + 0x21, 0x53, 0x7d, 0xa9, 0x87, 0xf5, 0xdb, 0x11, 0x3f, 0x4d, 0x63, 0xc4, 0xea, 0x98, 0xb6, + 0x7c, 0x52, 0x20, 0x0e, 0x73, 0x5d, 0x2f, 0x01, 0xcb, 0xe5, 0x97, 0xb9, 0x1e, 0x30, 0x42, + 0x6c, 0xa6, 0x88, 0xfa, 0xd4, 0x4f, 0x61, 0x13, 0x3d, 0xf7, 0xd9, 0xab, 0x85, 0x22, 0x0c, + 0x7e, 0x50, 0x9a, 0xb4, 0xc6, 0xe8, 0x95, 0xbb, 0xc9, 0xe7, 0x2d, 0x03, 0x71, 0x5f, 0xf8, + 0xd6, 0xa4, 0x8a, 0x40, 0x6e, 0x1c, 0x32, 0xe6, 0xc8, 0xba, 0x94, 0x5e, 0x70, 0x02, 0x2c, + 0x8b, 0xa5, 0xd7, 0xf9, 0x33, 0x1d, 0x6f, 0x41, 0x3c, 0x12, 0x60, 0x4e, 0x84, 0xaa, 0xd8, + 0xf6, 0x51, 0x7f, 0x0d, 0x23, 0xe9, 0xc7, 0xb5, 0x9b, 0x9e, 0xb0, 0xc2, 0xec, 0x26, 0x08, + 0x7a, 0x54, 0xf3, 0xdd, 0xaf, 0x81, 0x4b, 0x65, 0x17, 0x39, 0x44, 0x6a, 0x18, 0x36, 0xfc, + 0xd2, 0xa0, 0x8e, 0x29, 0x07, 0x75, 0x5b, 0x91, 0xbf, 0xcd, 0xe3, 0x37, 0x19, 0x6b, 0x45, + 0x8f, 0xa1, 0xd3, 0xfd, 0x5a, 0x74, 0x06, 0x28, 0xe2, 0xcc, 0xbe, 0x90, 0xed, 0xc3, 0xb1, + 0x9f, 0x55, 0x7b, 0x09, 0x27, 0x80, 0xae, 0xdc, 0xf2, 0x38, 0x16, 0x64, 0x4a, 0xd1, 0xff, + 0x8d, 0xa3, 0x69, 0x47, 0x35, 0x1b, 0xbc, 0x92, 0xe0, 0xce, 0x04, 0x2a, 0x58, 0x76, 0x0b, + 0x25, 0x57, 0x79, 0xb3, 0x9d, 0xef, 0xc1, 0x66, 0x48, 0x3a, 0x14, 0xde, 0xf0, 0x82, 0xac, + 0x78, 0x56, 0x24, 0x0a, 0xc0, 0xee, 0x9c, 0xb2, 0x15, 0x3b, 0x49, 0x67, 0xad, 0x83, 0xf1, + 0xdf, 0xa2, 0x8c, 0xfe, 0xd0, 0x1a, 0x34, 0x46, 0x68, 0xcf, 0xe1, 0x93, 0xbd, 0x77, 0x59, + 0x2b, 0x05, 0x00, 0x2f, 0x5e, 0x71, 0xbc, 0x93, 0xe2, 0xcd, 0x65, 0x4a, 0x3b, 0x14, 0xd9, + 0xf6, 0x87, 0xa8, 0xca, 0xe5, 0x94, 0xbb, 0x76, 0x59, 0x28, 0x07, 0xaf, 0x80, 0xf1, 0xde, + 0x13, 0x3c, 0x4d, 0x62, 0x89, 0xa6, 0xd7, 0xf8, 0x35, 0x1a, 0x6b, 0x44, 0xec, 0xc3, 0xb2, + 0x9d, 0x50, 0x7f, 0x0e, 0x21, 0x43, 0x6c, 0x1d, 0x32, 0xff, 0xd0, 0xa1, 0x8e, 0x26, 0x09, + 0x78, 0x57, 0x9a, 0xb5, 0xc4, 0xeb, 0x0f, 0x20, 0x51, 0x7e, 0xb3, 0x9c, 0xed, 0xc2, 0x6a, + 0x45, 0x34, 0x1b, 0xd6, 0xf9, 0x88, 0xa7, 0xc5, 0xea, 0x9b, 0xb4, 0x79, 0x56, 0x27, 0x08, + 0xa0, 0x8f, 0xfe, 0xd1, 0x1c, 0x33, 0x42, 0x6d, 0x86, 0xa9, 0xd8, 0xf7, 0x3a, 0x15, 0x64, + 0x4b, 0xe3, 0xcc, 0xbd, 0x92, 0x5f, 0x70, 0x01, 0x2e, 0x4c, 0x63, 0x12, 0x3d, 0xf0, 0xdf, + 0xae, 0x81, 0x29, 0x06, 0x77, 0x58, 0x95, 0xba, 0xcb, 0xe4, 0x1e, 0x31, 0x40, 0x6f, 0xa2, + 0x8d, 0xfc, 0xd3, 0x7b, 0x54, 0x25, 0x0a, 0xc7, 0xe8, 0x99, 0xb6, 0xd4, 0xfb, 0x8a, 0xa5, + 0x68, 0x47, 0x36, 0x19, 0xb1, 0x9e, 0xef, 0xc0, 0x0d, 0x22, 0x53, 0x7c, 0x97, 0xb8, 0xc9, + 0xe6, 0x2b, 0x04, 0x75, 0x5a, 0xf2, 0xdd, 0xac, 0x83, 0x4e, 0x61, 0x10, 0x3f, 0x5d, 0x72, + 0x03, 0x2c, 0xe1, 0xce, 0xbf, 0x90, 0x38, 0x17, 0x66, 0x49, 0x84, 0xab, 0xda, 0xf5, 0x11, + 0x3e, 0x4f, 0x60, 0xad, 0x82, 0xf3, 0xdc, 0x74, 0x5b, 0x2a, 0x05, 0xc8, 0xe7, 0x96, 0xb9, + 0xdb, 0xf4, 0x85, 0xaa, 0x67, 0x48, 0x39, 0x16, 0xbe, 0x91, 0xe0, 0xcf, 0x02, 0x2d, 0x5c, + 0x73, 0x98, 0xb7, 0xc6, 0xe9, 0x24, 0x0b, 0x7a, 0x55, 0xfd, 0xd2, 0xa3, 0x8c, 0x41, 0x6e, + 0x1f, 0x30, 0x52, 0x7d, 0x0c, 0x23, 0xee, 0xc1, 0xb0, 0x9f, 0x37, 0x18, 0x69, 0x46, 0x8b, + 0xa4, 0xd5, 0xfa, 0x00, 0x30, 0x60, 0x50, 0xc0, 0xf0, 0xa0, 0x90, 0x9d, 0xad, 0xfd, 0xcd, + 0x5d, 0x6d, 0x3d, 0x0d, 0x27, 0x17, 0x47, 0x77, 0xe7, 0xd7, 0x87, 0xb7, 0xba, 0x8a, 0xda, + 0xea, 0x7a, 0x4a, 0x1a, 0x2a, 0x4e, 0x7e, 0x2e, 0x1e, 0x8e, 0xbe, 0xee, 0xde, 0xd3, 0xe3, + 0xb3, 0x83, 0x13, 0x23, 0x73, 0x43, 0x69, 0x59, 0x09, 0x39, 0xa9, 0x99, 0xc9, 0xf9, 0xf4, + 0xc4, 0x94, 0xa4, 0x34, 0x04, 0x54, 0x64, 0x9c, 0xac, 0xfc, 0xcc, 0x5c, 0x6c, 0x3c, 0x0c, + 0x01, 0x31, 0x61, 0x51, 0xc1, 0xf1, 0xa1, 0x91, 0xbb, 0x8b, 0xdb, 0xeb, 0x7b, 0x4b, 0x1b, + 0x2b, 0x26, 0x16, 0x46, 0x76, 0xe6, 0xd6, 0x86, 0xb6, 0xd2, 0xe2, 0xb2, 0x82, 0x12, 0x22, + 0x72, 0x42, 0x4f, 0x7f, 0x2f, 0x1f, 0x8f, 0xbf, 0xef, 0xdf, 0xf5, 0xc5, 0x95, 0xa5, 0x35, + 0x05, 0x55, 0x65, 0x68, 0x58, 0x08, 0x38, 0xa8, 0x98, 0xc8, 0xf8, 0x25, 0x15, 0x45, 0x75, + 0xe5, 0xd5, 0x85, 0xb5, 0xb8, 0x88, 0xd8, 0xe8, 0x78, 0x48, 0x18, 0x28, 0x02, 0x32, 0x62, + 0x52, 0xc2, 0xf2, 0xa2, 0x92, 0x9f, 0xaf, 0xff, 0xcf, 0x5f, 0x6f, 0x3f, 0x0f, 0x6b, 0x5b, + 0x0b, 0x3b, 0xab, 0x9b, 0xcb, 0xfb, 0xf6, 0xc6, 0x96, 0xa6, 0x36, 0x06, 0x56, 0x66, 0x4c, + 0x7c, 0x2c, 0x1c, 0x8c, 0xbc, 0xec, 0xdc, 0xd1, 0xe1, 0xb1, 0x81, 0x11, 0x21, 0x71, 0x41, + 0xb9, 0x89, 0xd9, 0xe9, 0x79, 0x49, 0x19, 0x29, 0x24, 0x14, 0x44, 0x74, 0xe4, 0xd4, 0x84, + 0xb4, 0x9e, 0xae, 0xfe, 0xce, 0x5e, 0x6e, 0x3e, 0x0e, 0x03, 0x33, 0x63, 0x53, 0xc3, 0xf3, + 0xa3, 0x93, 0xf7, 0xc7, 0x97, 0xa7, 0x37, 0x07, 0x57, 0x67, 0x6a, 0x5a, 0x0a, 0x3a, 0xaa, + 0x9a, 0xca, 0xfa, 0xd0, 0xe0, 0xb0, 0x80, 0x10, 0x20, 0x70, 0x40, 0x4d, 0x7d, 0x2d, 0x1d, + 0x8d, 0xbd, 0xed, 0xdd, 0x00, 0x31, 0x62, 0x53, 0xc4, 0xf5, 0xa6, 0x97, 0x95, 0xa4, 0xf7, + 0xc6, 0x51, 0x60, 0x33, 0x02, 0x37, 0x06, 0x55, 0x64, 0xf3, 0xc2, 0x91, 0xa0, 0xa2, 0x93, + 0xc0, 0xf1, 0x66, 0x57, 0x04, 0x35, 0x6e, 0x5f, 0x0c, 0x3d, 0xaa, 0x9b, 0xc8, 0xf9, 0xfb, + 0xca, 0x99, 0xa8, 0x3f, 0x0e, 0x5d, 0x6c, 0x59, 0x68, 0x3b, 0x0a, 0x9d, 0xac, 0xff, 0xce, + 0xcc, 0xfd, 0xae, 0x9f, 0x08, 0x39, 0x6a, 0x5b, 0xdc, 0xed, 0xbe, 0x8f, 0x18, 0x29, 0x7a, + 0x4b, 0x49, 0x78, 0x2b, 0x1a, 0x8d, 0xbc, 0xef, 0xde, 0xeb, 0xda, 0x89, 0xb8, 0x2f, 0x1e, + 0x4d, 0x7c, 0x7e, 0x4f, 0x1c, 0x2d, 0xba, 0x8b, 0xd8, 0xe9, 0xb2, 0x83, 0xd0, 0xe1, 0x76, + 0x47, 0x14, 0x25, 0x27, 0x16, 0x45, 0x74, 0xe3, 0xd2, 0x81, 0xb0, 0x85, 0xb4, 0xe7, 0xd6, + 0x41, 0x70, 0x23, 0x12, 0x10, 0x21, 0x72, 0x43, 0xd4, 0xe5, 0xb6, 0x87, 0xa5, 0x94, 0xc7, + 0xf6, 0x61, 0x50, 0x03, 0x32, 0x30, 0x01, 0x52, 0x63, 0xf4, 0xc5, 0x96, 0xa7, 0x92, 0xa3, + 0xf0, 0xc1, 0x56, 0x67, 0x34, 0x05, 0x07, 0x36, 0x65, 0x54, 0xc3, 0xf2, 0xa1, 0x90, 0xcb, + 0xfa, 0xa9, 0x98, 0x0f, 0x3e, 0x6d, 0x5c, 0x5e, 0x6f, 0x3c, 0x0d, 0x9a, 0xab, 0xf8, 0xc9, + 0xfc, 0xcd, 0x9e, 0xaf, 0x38, 0x09, 0x5a, 0x6b, 0x69, 0x58, 0x0b, 0x3a, 0xad, 0x9c, 0xcf, + 0xfe, 0x79, 0x48, 0x1b, 0x2a, 0xbd, 0x8c, 0xdf, 0xee, 0xec, 0xdd, 0x8e, 0xbf, 0x28, 0x19, + 0x4a, 0x7b, 0x4e, 0x7f, 0x2c, 0x1d, 0x8a, 0xbb, 0xe8, 0xd9, 0xdb, 0xea, 0xb9, 0x88, 0x1f, + 0x2e, 0x7d, 0x4c, 0x17, 0x26, 0x75, 0x44, 0xd3, 0xe2, 0xb1, 0x80, 0x82, 0xb3, 0xe0, 0xd1, + 0x46, 0x77, 0x24, 0x15, 0x20, 0x11, 0x42, 0x73, 0xe4, 0xd5, 0x86, 0xb7, 0xb5, 0x84, 0xd7, + 0xe6, 0x71, 0x40, 0x13, 0x22, 0x00, 0x32, 0x64, 0x56, 0xc8, 0xfa, 0xac, 0x9e, 0x8d, 0xbf, + 0xe9, 0xdb, 0x45, 0x77, 0x21, 0x13, 0x07, 0x35, 0x63, 0x51, 0xcf, 0xfd, 0xab, 0x99, 0x8a, + 0xb8, 0xee, 0xdc, 0x42, 0x70, 0x26, 0x14, 0x0e, 0x3c, 0x6a, 0x58, 0xc6, 0xf4, 0xa2, 0x90, + 0x83, 0xb1, 0xe7, 0xd5, 0x4b, 0x79, 0x2f, 0x1d, 0x09, 0x3b, 0x6d, 0x5f, 0xc1, 0xf3, 0xa5, + 0x97, 0x84, 0xb6, 0xe0, 0xd2, 0x4c, 0x7e, 0x28, 0x1a, 0x1c, 0x2e, 0x78, 0x4a, 0xd4, 0xe6, + 0xb0, 0x82, 0x91, 0xa3, 0xf5, 0xc7, 0x59, 0x6b, 0x3d, 0x0f, 0x1b, 0x29, 0x7f, 0x4d, 0xd3, + 0xe1, 0xb7, 0x85, 0x96, 0xa4, 0xf2, 0xc0, 0x5e, 0x6c, 0x3a, 0x08, 0x12, 0x20, 0x76, 0x44, + 0xda, 0xe8, 0xbe, 0x8c, 0x9f, 0xad, 0xfb, 0xc9, 0x57, 0x65, 0x33, 0x01, 0x15, 0x27, 0x71, + 0x43, 0xdd, 0xef, 0xb9, 0x8b, 0x98, 0xaa, 0xfc, 0xce, 0x50, 0x62, 0x34, 0x06, 0x38, 0x0a, + 0x5c, 0x6e, 0xf0, 0xc2, 0x94, 0xa6, 0xb5, 0x87, 0xd1, 0xe3, 0x7d, 0x4f, 0x19, 0x2b, 0x3f, + 0x0d, 0x5b, 0x69, 0xf7, 0xc5, 0x93, 0xa1, 0xb2, 0x80, 0xd6, 0xe4, 0x7a, 0x48, 0x1e, 0x2c, + 0x36, 0x04, 0x52, 0x60, 0xfe, 0xcc, 0x9a, 0xa8, 0xbb, 0x89, 0xdf, 0xed, 0x73, 0x41, 0x17, + 0x25, 0x31, 0x03, 0x55, 0x67, 0xf9, 0xcb, 0x9d, 0xaf, 0xbc, 0x8e, 0xd8, 0xea, 0x74, 0x46, + 0x10, 0x22, 0x24, 0x16, 0x40, 0x72, 0xec, 0xde, 0x88, 0xba, 0xa9, 0x9b, 0xcd, 0xff, 0x61, + 0x53, 0x05, 0x37, 0x23, 0x11, 0x47, 0x75, 0xeb, 0xd9, 0x8f, 0xbd, 0xae, 0x9c, 0xca, 0xf8, + 0x66, 0x54, 0x02, 0x30, 0x2a, 0x18, 0x4e, 0x7c, 0xe2, 0xd0, 0x86, 0xb4, 0xa7, 0x95, 0xc3, + 0xf1, 0x6f, 0x5d, 0x0b, 0x39, 0x2d, 0x1f, 0x49, 0x7b, 0xe5, 0xd7, 0x81, 0xb3, 0xa0, 0x92, + 0xc4, 0xf6, 0x68, 0x5a, 0x0c, 0x3e, 0x00, 0x33, 0x66, 0x55, 0xcc, 0xff, 0xaa, 0x99, 0x85, + 0xb6, 0xe3, 0xd0, 0x49, 0x7a, 0x2f, 0x1c, 0x17, 0x24, 0x71, 0x42, 0xdb, 0xe8, 0xbd, 0x8e, + 0x92, 0xa1, 0xf4, 0xc7, 0x5e, 0x6d, 0x38, 0x0b, 0x2e, 0x1d, 0x48, 0x7b, 0xe2, 0xd1, 0x84, + 0xb7, 0xab, 0x98, 0xcd, 0xfe, 0x67, 0x54, 0x01, 0x32, 0x39, 0x0a, 0x5f, 0x6c, 0xf5, 0xc6, + 0x93, 0xa0, 0xbc, 0x8f, 0xda, 0xe9, 0x70, 0x43, 0x16, 0x25, 0x5c, 0x6f, 0x3a, 0x09, 0x90, + 0xa3, 0xf6, 0xc5, 0xd9, 0xea, 0xbf, 0x8c, 0x15, 0x26, 0x73, 0x40, 0x4b, 0x78, 0x2d, 0x1e, + 0x87, 0xb4, 0xe1, 0xd2, 0xce, 0xfd, 0xa8, 0x9b, 0x02, 0x31, 0x64, 0x57, 0x72, 0x41, 0x14, + 0x27, 0xbe, 0x8d, 0xd8, 0xeb, 0xf7, 0xc4, 0x91, 0xa2, 0x3b, 0x08, 0x5d, 0x6e, 0x65, 0x56, + 0x03, 0x30, 0xa9, 0x9a, 0xcf, 0xfc, 0xe0, 0xd3, 0x86, 0xb5, 0x2c, 0x1f, 0x4a, 0x79, 0xb8, + 0x8b, 0xde, 0xed, 0x74, 0x47, 0x12, 0x21, 0x3d, 0x0e, 0x5b, 0x68, 0xf1, 0xc2, 0x97, 0xa4, + 0xaf, 0x9c, 0xc9, 0xfa, 0x63, 0x50, 0x05, 0x36, 0x2a, 0x19, 0x4c, 0x7f, 0xe6, 0xd5, 0x80, + 0xb3, 0x96, 0xa5, 0xf0, 0xc3, 0x5a, 0x69, 0x3c, 0x0f, 0x13, 0x20, 0x75, 0x46, 0xdf, 0xec, + 0xb9, 0x8a, 0x81, 0xb2, 0xe7, 0xd4, 0x4d, 0x7e, 0x2b, 0x18, 0x04, 0x37, 0x62, 0x51, 0xc8, + 0xfb, 0xae, 0x9d, 0xe4, 0xd7, 0x82, 0xb1, 0x28, 0x1b, 0x4e, 0x7d, 0x61, 0x52, 0x07, 0x34, + 0xad, 0x9e, 0xcb, 0xf8, 0xf3, 0xc0, 0x95, 0xa6, 0x3f, 0x0c, 0x59, 0x6a, 0x76, 0x45, 0x10, + 0x23, 0xba, 0x89, 0xdc, 0xef, 0xca, 0xf9, 0xac, 0x9f, 0x06, 0x35, 0x60, 0x53, 0x4f, 0x7c, + 0x29, 0x1a, 0x83, 0xb0, 0xe5, 0xd6, 0xdd, 0xee, 0xbb, 0x88, 0x11, 0x22, 0x77, 0x44, 0x58, + 0x6b, 0x3e, 0x0d, 0x94, 0xa7, 0xf2, 0xc1, 0x00, 0x34, 0x68, 0x5c, 0xd0, 0xe4, 0xb8, 0x8c, + 0xbd, 0x89, 0xd5, 0xe1, 0x6d, 0x59, 0x05, 0x31, 0x67, 0x53, 0x0f, 0x3b, 0xb7, 0x83, 0xdf, + 0xeb, 0xda, 0xee, 0xb2, 0x86, 0x0a, 0x3e, 0x62, 0x56, 0xce, 0xfa, 0xa6, 0x92, 0x1e, 0x2a, + 0x76, 0x42, 0x73, 0x47, 0x1b, 0x2f, 0xa3, 0x97, 0xcb, 0xff, 0xa9, 0x9d, 0xc1, 0xf5, 0x79, + 0x4d, 0x11, 0x25, 0x14, 0x20, 0x7c, 0x48, 0xc4, 0xf0, 0xac, 0x98, 0x81, 0xb5, 0xe9, 0xdd, + 0x51, 0x65, 0x39, 0x0d, 0x3c, 0x08, 0x54, 0x60, 0xec, 0xd8, 0x84, 0xb0, 0xe6, 0xd2, 0x8e, + 0xba, 0x36, 0x02, 0x5e, 0x6a, 0x5b, 0x6f, 0x33, 0x07, 0x8b, 0xbf, 0xe3, 0xd7, 0x4f, 0x7b, + 0x27, 0x13, 0x9f, 0xab, 0xf7, 0xc3, 0xf2, 0xc6, 0x9a, 0xae, 0x22, 0x16, 0x4a, 0x7e, 0x28, + 0x1c, 0x40, 0x74, 0xf8, 0xcc, 0x90, 0xa4, 0x95, 0xa1, 0xfd, 0xc9, 0x45, 0x71, 0x2d, 0x19, + 0x1f, 0x2b, 0x77, 0x43, 0xcf, 0xfb, 0xa7, 0x93, 0xa2, 0x96, 0xca, 0xfe, 0x72, 0x46, 0x1a, + 0x2e, 0x78, 0x4c, 0x10, 0x24, 0xa8, 0x9c, 0xc0, 0xf4, 0xc5, 0xf1, 0xad, 0x99, 0x15, 0x21, + 0x7d, 0x49, 0xd1, 0xe5, 0xb9, 0x8d, 0x01, 0x35, 0x69, 0x5d, 0x6c, 0x58, 0x04, 0x30, 0xbc, + 0x88, 0xd4, 0xe0, 0xb6, 0x82, 0xde, 0xea, 0x66, 0x52, 0x0e, 0x3a, 0x0b, 0x3f, 0x63, 0x57, + 0xdb, 0xef, 0xb3, 0x87, 0x9e, 0xaa, 0xf6, 0xc2, 0x4e, 0x7a, 0x26, 0x12, 0x23, 0x17, 0x4b, + 0x7f, 0xf3, 0xc7, 0x9b, 0xaf, 0xf9, 0xcd, 0x91, 0xa5, 0x29, 0x1d, 0x41, 0x75, 0x44, 0x70, + 0x2c, 0x18, 0x94, 0xa0, 0xfc, 0xc8, 0x50, 0x64, 0x38, 0x0c, 0x80, 0xb4, 0xe8, 0xdc, 0xed, + 0xd9, 0x85, 0xb1, 0x3d, 0x09, 0x55, 0x61, 0x37, 0x03, 0x5f, 0x6b, 0xe7, 0xd3, 0x8f, 0xbb, + 0x8a, 0xbe, 0xe2, 0xd6, 0x5a, 0x6e, 0x32, 0x06, 0x00, 0x35, 0x6a, 0x5f, 0xd4, 0xe1, 0xbe, + 0x8b, 0xb5, 0x80, 0xdf, 0xea, 0x61, 0x54, 0x0b, 0x3e, 0x77, 0x42, 0x1d, 0x28, 0xa3, 0x96, + 0xc9, 0xfc, 0xc2, 0xf7, 0xa8, 0x9d, 0x16, 0x23, 0x7c, 0x49, 0xee, 0xdb, 0x84, 0xb1, 0x3a, + 0x0f, 0x50, 0x65, 0x5b, 0x6e, 0x31, 0x04, 0x8f, 0xba, 0xe5, 0xd0, 0x99, 0xac, 0xf3, 0xc6, + 0x4d, 0x78, 0x27, 0x12, 0x2c, 0x19, 0x46, 0x73, 0xf8, 0xcd, 0x92, 0xa7, 0xc1, 0xf4, 0xab, + 0x9e, 0x15, 0x20, 0x7f, 0x4a, 0x74, 0x41, 0x1e, 0x2b, 0xa0, 0x95, 0xca, 0xff, 0xb6, 0x83, + 0xdc, 0xe9, 0x62, 0x57, 0x08, 0x3d, 0x03, 0x36, 0x69, 0x5c, 0xd7, 0xe2, 0xbd, 0x88, 0x2f, + 0x1a, 0x45, 0x70, 0xfb, 0xce, 0x91, 0xa4, 0x9a, 0xaf, 0xf0, 0xc5, 0x4e, 0x7b, 0x24, 0x11, + 0x58, 0x6d, 0x32, 0x07, 0x8c, 0xb9, 0xe6, 0xd3, 0xed, 0xd8, 0x87, 0xb2, 0x39, 0x0c, 0x53, + 0x66, 0x9f, 0xaa, 0xf5, 0xc0, 0x4b, 0x7e, 0x21, 0x14, 0x2a, 0x1f, 0x40, 0x75, 0xfe, 0xcb, + 0x94, 0xa1, 0xe8, 0xdd, 0x82, 0xb7, 0x3c, 0x09, 0x56, 0x63, 0x5d, 0x68, 0x37, 0x02, 0x89, + 0xbc, 0xe3, 0xd6, 0x71, 0x44, 0x1b, 0x2e, 0xa5, 0x90, 0xcf, 0xfa, 0xc4, 0xf1, 0xae, 0x9b, + 0x10, 0x25, 0x7a, 0x4f, 0x06, 0x33, 0x6c, 0x59, 0xd2, 0xe7, 0xb8, 0x8d, 0xb3, 0x86, 0xd9, + 0xec, 0x67, 0x52, 0x0d, 0x38, 0x5e, 0x6b, 0x34, 0x01, 0x8a, 0xbf, 0xe0, 0xd5, 0xeb, 0xde, + 0x81, 0xb4, 0x3f, 0x0a, 0x55, 0x60, 0x29, 0x1c, 0x43, 0x76, 0xfd, 0xc8, 0x97, 0xa2, 0x9c, + 0xa9, 0xf6, 0xc3, 0x48, 0x7d, 0x22, 0x17, 0xb0, 0x85, 0xda, 0xef, 0x64, 0x51, 0x0e, 0x3b, + 0x05, 0x30, 0x6f, 0x5a, 0xd1, 0xe4, 0xbb, 0x8e, 0xc7, 0xf2, 0xad, 0x98, 0x13, 0x26, 0x79, + 0x4c, 0x72, 0x47, 0x18, 0x2d, 0xa6, 0x93, 0xcc, 0xf9, 0x00, 0x36, 0x6c, 0x5a, 0xd8, 0xee, + 0xb4, 0x82, 0xad, 0x9b, 0xc1, 0xf7, 0x75, 0x43, 0x19, 0x2f, 0x47, 0x71, 0x2b, 0x1d, 0x9f, + 0xa9, 0xf3, 0xc5, 0xea, 0xdc, 0x86, 0xb0, 0x32, 0x04, 0x5e, 0x68, 0x8e, 0xb8, 0xe2, 0xd4, + 0x56, 0x60, 0x3a, 0x0c, 0x23, 0x15, 0x4f, 0x79, 0xfb, 0xcd, 0x97, 0xa1, 0xc9, 0xff, 0xa5, + 0x93, 0x11, 0x27, 0x7d, 0x4b, 0x64, 0x52, 0x08, 0x3e, 0xbc, 0x8a, 0xd0, 0xe6, 0x01, 0x37, + 0x6d, 0x5b, 0xd9, 0xef, 0xb5, 0x83, 0xac, 0x9a, 0xc0, 0xf6, 0x74, 0x42, 0x18, 0x2e, 0x46, + 0x70, 0x2a, 0x1c, 0x9e, 0xa8, 0xf2, 0xc4, 0xeb, 0xdd, 0x87, 0xb1, 0x33, 0x05, 0x5f, 0x69, + 0x8f, 0xb9, 0xe3, 0xd5, 0x57, 0x61, 0x3b, 0x0d, 0x22, 0x14, 0x4e, 0x78, 0xfa, 0xcc, 0x96, + 0xa0, 0xc8, 0xfe, 0xa4, 0x92, 0x10, 0x26, 0x7c, 0x4a, 0x65, 0x53, 0x09, 0x3f, 0xbd, 0x8b, + 0xd1, 0xe7, 0x02, 0x34, 0x6e, 0x58, 0xda, 0xec, 0xb6, 0x80, 0xaf, 0x99, 0xc3, 0xf5, 0x77, + 0x41, 0x1b, 0x2d, 0x45, 0x73, 0x29, 0x1f, 0x9d, 0xab, 0xf1, 0xc7, 0xe8, 0xde, 0x84, 0xb2, + 0x30, 0x06, 0x5c, 0x6a, 0x8c, 0xba, 0xe0, 0xd6, 0x54, 0x62, 0x38, 0x0e, 0x21, 0x17, 0x4d, + 0x7b, 0xf9, 0xcf, 0x95, 0xa3, 0xcb, 0xfd, 0xa7, 0x91, 0x13, 0x25, 0x7f, 0x49, 0x66, 0x50, + 0x0a, 0x3c, 0xbe, 0x88, 0xd2, 0xe4, 0x03, 0x35, 0x6f, 0x59, 0xdb, 0xed, 0xb7, 0x81, 0xae, + 0x98, 0xc2, 0xf4, 0x76, 0x40, 0x1a, 0x2c, 0x44, 0x72, 0x28, 0x1e, 0x9c, 0xaa, 0xf0, 0xc6, + 0xe9, 0xdf, 0x85, 0xb3, 0x31, 0x07, 0x5d, 0x6b, 0x8d, 0xbb, 0xe1, 0xd7, 0x55, 0x63, 0x39, + 0x0f, 0x20, 0x16, 0x4c, 0x7a, 0xf8, 0xce, 0x94, 0xa2, 0xca, 0xfc, 0xa6, 0x90, 0x12, 0x24, + 0x7e, 0x48, 0x67, 0x51, 0x0b, 0x3d, 0xbf, 0x89, 0xd3, 0xe5, 0x00, 0x37, 0x6e, 0x59, 0xdc, + 0xeb, 0xb2, 0x85, 0xa5, 0x92, 0xcb, 0xfc, 0x79, 0x4e, 0x17, 0x20, 0x57, 0x60, 0x39, 0x0e, + 0x8b, 0xbc, 0xe5, 0xd2, 0xf2, 0xc5, 0x9c, 0xab, 0x2e, 0x19, 0x40, 0x77, 0xae, 0x99, 0xc0, + 0xf7, 0x72, 0x45, 0x1c, 0x2b, 0x0b, 0x3c, 0x65, 0x52, 0xd7, 0xe0, 0xb9, 0x8e, 0xf9, 0xce, + 0x97, 0xa0, 0x25, 0x12, 0x4b, 0x7c, 0x5c, 0x6b, 0x32, 0x05, 0x80, 0xb7, 0xee, 0xd9, 0x41, + 0x76, 0x2f, 0x18, 0x9d, 0xaa, 0xf3, 0xc4, 0xe4, 0xd3, 0x8a, 0xbd, 0x38, 0x0f, 0x56, 0x61, + 0x16, 0x21, 0x78, 0x4f, 0xca, 0xfd, 0xa4, 0x93, 0xb3, 0x84, 0xdd, 0xea, 0x6f, 0x58, 0x01, + 0x36, 0xef, 0xd8, 0x81, 0xb6, 0x33, 0x04, 0x5d, 0x6a, 0x4a, 0x7d, 0x24, 0x13, 0x96, 0xa1, + 0xf8, 0xcf, 0xb8, 0x8f, 0xd6, 0xe1, 0x64, 0x53, 0x0a, 0x3d, 0x1d, 0x2a, 0x73, 0x44, 0xc1, + 0xf6, 0xaf, 0x98, 0x82, 0xb5, 0xec, 0xdb, 0x5e, 0x69, 0x30, 0x07, 0x27, 0x10, 0x49, 0x7e, + 0xfb, 0xcc, 0x95, 0xa2, 0xd5, 0xe2, 0xbb, 0x8c, 0x09, 0x3e, 0x67, 0x50, 0x70, 0x47, 0x1e, + 0x29, 0xac, 0x9b, 0xc2, 0xf5, 0x2c, 0x1b, 0x42, 0x75, 0xf0, 0xc7, 0x9e, 0xa9, 0x89, 0xbe, + 0xe7, 0xd0, 0x55, 0x62, 0x3b, 0x0c, 0x7b, 0x4c, 0x15, 0x22, 0xa7, 0x90, 0xc9, 0xfe, 0xde, + 0xe9, 0xb0, 0x87, 0x02, 0x35, 0x6c, 0x5b, 0xc3, 0xf4, 0xad, 0x9a, 0x1f, 0x28, 0x71, 0x46, + 0x66, 0x51, 0x08, 0x3f, 0xba, 0x8d, 0xd4, 0xe3, 0x94, 0xa3, 0xfa, 0xcd, 0x48, 0x7f, 0x26, + 0x11, 0x31, 0x06, 0x5f, 0x68, 0xed, 0xda, 0x83, 0xb4, 0x6d, 0x5a, 0x03, 0x34, 0xb1, 0x86, + 0xdf, 0xe8, 0xc8, 0xff, 0xa6, 0x91, 0x14, 0x23, 0x7a, 0x4d, 0x3a, 0x0d, 0x54, 0x63, 0xe6, + 0xd1, 0x88, 0xbf, 0x9f, 0xa8, 0xf1, 0xc6, 0x43, 0x74, 0x2d, 0x1a, 0x00, 0x38, 0x70, 0x48, + 0xe0, 0xd8, 0x90, 0xa8, 0xdd, 0xe5, 0xad, 0x95, 0x3d, 0x05, 0x4d, 0x75, 0xa7, 0x9f, 0xd7, + 0xef, 0x47, 0x7f, 0x37, 0x0f, 0x7a, 0x42, 0x0a, 0x32, 0x9a, 0xa2, 0xea, 0xd2, 0x53, 0x6b, + 0x23, 0x1b, 0xb3, 0x8b, 0xc3, 0xfb, 0x8e, 0xb6, 0xfe, 0xc6, 0x6e, 0x56, 0x1e, 0x26, 0xf4, + 0xcc, 0x84, 0xbc, 0x14, 0x2c, 0x64, 0x5c, 0x29, 0x11, 0x59, 0x61, 0xc9, 0xf1, 0xb9, 0x81, + 0xa6, 0x9e, 0xd6, 0xee, 0x46, 0x7e, 0x36, 0x0e, 0x7b, 0x43, 0x0b, 0x33, 0x9b, 0xa3, 0xeb, + 0xd3, 0x01, 0x39, 0x71, 0x49, 0xe1, 0xd9, 0x91, 0xa9, 0xdc, 0xe4, 0xac, 0x94, 0x3c, 0x04, + 0x4c, 0x74, 0xf5, 0xcd, 0x85, 0xbd, 0x15, 0x2d, 0x65, 0x5d, 0x28, 0x10, 0x58, 0x60, 0xc8, + 0xf0, 0xb8, 0x80, 0x52, 0x6a, 0x22, 0x1a, 0xb2, 0x8a, 0xc2, 0xfa, 0x8f, 0xb7, 0xff, 0xc7, + 0x6f, 0x57, 0x1f, 0x27, 0x51, 0x69, 0x21, 0x19, 0xb1, 0x89, 0xc1, 0xf9, 0x8c, 0xb4, 0xfc, + 0xc4, 0x6c, 0x54, 0x1c, 0x24, 0xf6, 0xce, 0x86, 0xbe, 0x16, 0x2e, 0x66, 0x5e, 0x2b, 0x13, + 0x5b, 0x63, 0xcb, 0xf3, 0xbb, 0x83, 0x02, 0x3a, 0x72, 0x4a, 0xe2, 0xda, 0x92, 0xaa, 0xdf, + 0xe7, 0xaf, 0x97, 0x3f, 0x07, 0x4f, 0x77, 0xa5, 0x9d, 0xd5, 0xed, 0x45, 0x7d, 0x35, 0x0d, + 0x78, 0x40, 0x08, 0x30, 0x98, 0xa0, 0xe8, 0xd0, 0xf7, 0xcf, 0x87, 0xbf, 0x17, 0x2f, 0x67, + 0x5f, 0x2a, 0x12, 0x5a, 0x62, 0xca, 0xf2, 0xba, 0x82, 0x50, 0x68, 0x20, 0x18, 0xb0, 0x88, + 0xc0, 0xf8, 0x8d, 0xb5, 0xfd, 0xc5, 0x6d, 0x55, 0x1d, 0x25, 0xa4, 0x9c, 0xd4, 0xec, 0x44, + 0x7c, 0x34, 0x0c, 0x79, 0x41, 0x09, 0x31, 0x99, 0xa1, 0xe9, 0xd1, 0x03, 0x3b, 0x73, 0x4b, + 0xe3, 0xdb, 0x93, 0xab, 0xde, 0xe6, 0xae, 0x96, 0x3e, 0x06, 0x4e, 0x76, 0x00, 0x39, 0x72, + 0x4b, 0xe4, 0xdd, 0x96, 0xaf, 0xd5, 0xec, 0xa7, 0x9e, 0x31, 0x08, 0x43, 0x7a, 0xb7, 0x8e, + 0xc5, 0xfc, 0x53, 0x6a, 0x21, 0x18, 0x62, 0x5b, 0x10, 0x29, 0x86, 0xbf, 0xf4, 0xcd, 0x73, + 0x4a, 0x01, 0x38, 0x97, 0xae, 0xe5, 0xdc, 0xa6, 0x9f, 0xd4, 0xed, 0x42, 0x7b, 0x30, 0x09, + 0xc4, 0xfd, 0xb6, 0x8f, 0x20, 0x19, 0x52, 0x6b, 0x11, 0x28, 0x63, 0x5a, 0xf5, 0xcc, 0x87, + 0xbe, 0xe6, 0xdf, 0x94, 0xad, 0x02, 0x3b, 0x70, 0x49, 0x33, 0x0a, 0x41, 0x78, 0xd7, 0xee, + 0xa5, 0x9c, 0x51, 0x68, 0x23, 0x1a, 0xb5, 0x8c, 0xc7, 0xfe, 0x84, 0xbd, 0xf6, 0xcf, 0x60, + 0x59, 0x12, 0x2b, 0x95, 0xac, 0xe7, 0xde, 0x71, 0x48, 0x03, 0x3a, 0x40, 0x79, 0x32, 0x0b, + 0xa4, 0x9d, 0xd6, 0xef, 0x22, 0x1b, 0x50, 0x69, 0xc6, 0xff, 0xb4, 0x8d, 0xf7, 0xce, 0x85, + 0xbc, 0x13, 0x2a, 0x61, 0x58, 0xd1, 0xe8, 0xa3, 0x9a, 0x35, 0x0c, 0x47, 0x7e, 0x04, 0x3d, + 0x76, 0x4f, 0xe0, 0xd9, 0x92, 0xab, 0x66, 0x5f, 0x14, 0x2d, 0x82, 0xbb, 0xf0, 0xc9, 0xb3, + 0x8a, 0xc1, 0xf8, 0x57, 0x6e, 0x25, 0x1c, 0xa2, 0x9b, 0xd0, 0xe9, 0x46, 0x7f, 0x34, 0x0d, + 0x77, 0x4e, 0x05, 0x3c, 0x93, 0xaa, 0xe1, 0xd8, 0x15, 0x2c, 0x67, 0x5e, 0xf1, 0xc8, 0x83, + 0xba, 0xc0, 0xf9, 0xb2, 0x8b, 0x24, 0x1d, 0x56, 0x6f, 0x37, 0x0e, 0x45, 0x7c, 0xd3, 0xea, + 0xa1, 0x98, 0xe2, 0xdb, 0x90, 0xa9, 0x06, 0x3f, 0x74, 0x4d, 0x80, 0xb9, 0xf2, 0xcb, 0x64, + 0x5d, 0x16, 0x2f, 0x55, 0x6c, 0x27, 0x1e, 0xb1, 0x88, 0xc3, 0xfa, 0x44, 0x7d, 0x36, 0x0f, + 0xa0, 0x99, 0xd2, 0xeb, 0x91, 0xa8, 0xe3, 0xda, 0x75, 0x4c, 0x07, 0x3e, 0xf3, 0xca, 0x81, + 0xb8, 0x17, 0x2e, 0x65, 0x5c, 0x26, 0x1f, 0x54, 0x6d, 0xc2, 0xfb, 0xb0, 0x89, 0x00, 0x3a, + 0x74, 0x4e, 0xe8, 0xd2, 0x9c, 0xa6, 0xcd, 0xf7, 0xb9, 0x83, 0x25, 0x1f, 0x51, 0x6b, 0x87, + 0xbd, 0xf3, 0xc9, 0x6f, 0x55, 0x1b, 0x21, 0x4a, 0x70, 0x3e, 0x04, 0xa2, 0x98, 0xd6, 0xec, + 0x13, 0x29, 0x67, 0x5d, 0xfb, 0xc1, 0x8f, 0xb5, 0xde, 0xe4, 0xaa, 0x90, 0x36, 0x0c, 0x42, + 0x78, 0x94, 0xae, 0xe0, 0xda, 0x7c, 0x46, 0x08, 0x32, 0x59, 0x63, 0x2d, 0x17, 0xb1, 0x8b, + 0xc5, 0xff, 0x26, 0x1c, 0x52, 0x68, 0xce, 0xf4, 0xba, 0x80, 0xeb, 0xd1, 0x9f, 0xa5, 0x03, + 0x39, 0x77, 0x4d, 0xa1, 0x9b, 0xd5, 0xef, 0x49, 0x73, 0x3d, 0x07, 0x6c, 0x56, 0x18, 0x22, + 0x84, 0xbe, 0xf0, 0xca, 0x35, 0x0f, 0x41, 0x7b, 0xdd, 0xe7, 0xa9, 0x93, 0xf8, 0xc2, 0x8c, + 0xb6, 0x10, 0x2a, 0x64, 0x5e, 0xb2, 0x88, 0xc6, 0xfc, 0x5a, 0x60, 0x2e, 0x14, 0x7f, 0x45, + 0x0b, 0x31, 0x97, 0xad, 0xe3, 0xd9, 0x4c, 0x76, 0x38, 0x02, 0xa4, 0x9e, 0xd0, 0xea, 0x81, + 0xbb, 0xf5, 0xcf, 0x69, 0x53, 0x1d, 0x27, 0xcb, 0xf1, 0xbf, 0x85, 0x23, 0x19, 0x57, 0x6d, + 0x06, 0x3c, 0x72, 0x48, 0xee, 0xd4, 0x9a, 0xa0, 0x5f, 0x65, 0x2b, 0x11, 0xb7, 0x8d, 0xc3, + 0xf9, 0x92, 0xa8, 0xe6, 0xdc, 0x7a, 0x40, 0x0e, 0x34, 0xd8, 0xe2, 0xac, 0x96, 0x30, 0x0a, + 0x44, 0x7e, 0x15, 0x2f, 0x61, 0x5b, 0xfd, 0xc7, 0x89, 0xb3, 0x6a, 0x50, 0x1e, 0x24, 0x82, + 0xb8, 0xf6, 0xcc, 0xa7, 0x9d, 0xd3, 0xe9, 0x4f, 0x75, 0x3b, 0x01, 0xed, 0xd7, 0x99, 0xa3, + 0x05, 0x3f, 0x71, 0x4b, 0x20, 0x1a, 0x54, 0x6e, 0xc8, 0xf2, 0xbc, 0x86, 0x79, 0x43, 0x0d, + 0x37, 0x91, 0xab, 0xe5, 0xdf, 0xb4, 0x8e, 0xc0, 0xfa, 0x5c, 0x66, 0x28, 0x12, 0xfe, 0xc4, + 0x8a, 0xb0, 0x16, 0x2c, 0x62, 0x58, 0x33, 0x09, 0x47, 0x7d, 0xdb, 0xe1, 0xaf, 0x95, 0x00, + 0x3b, 0x76, 0x4d, 0xec, 0xd7, 0x9a, 0xa1, 0xc5, 0xfe, 0xb3, 0x88, 0x29, 0x12, 0x5f, 0x64, + 0x97, 0xac, 0xe1, 0xda, 0x7b, 0x40, 0x0d, 0x36, 0x52, 0x69, 0x24, 0x1f, 0xbe, 0x85, 0xc8, + 0xf3, 0x33, 0x08, 0x45, 0x7e, 0xdf, 0xe4, 0xa9, 0x92, 0xf6, 0xcd, 0x80, 0xbb, 0x1a, 0x21, + 0x6c, 0x57, 0xa4, 0x9f, 0xd2, 0xe9, 0x48, 0x73, 0x3e, 0x05, 0x61, 0x5a, 0x17, 0x2c, 0x8d, + 0xb6, 0xfb, 0xc0, 0x66, 0x5d, 0x10, 0x2b, 0x8a, 0xb1, 0xfc, 0xc7, 0xa3, 0x98, 0xd5, 0xee, + 0x4f, 0x74, 0x39, 0x02, 0xf1, 0xca, 0x87, 0xbc, 0x1d, 0x26, 0x6b, 0x50, 0x34, 0x0f, 0x42, + 0x79, 0xd8, 0xe3, 0xae, 0x95, 0x55, 0x6e, 0x23, 0x18, 0xb9, 0x82, 0xcf, 0xf4, 0x90, 0xab, + 0xe6, 0xdd, 0x7c, 0x47, 0x0a, 0x31, 0xc2, 0xf9, 0xb4, 0x8f, 0x2e, 0x15, 0x58, 0x63, 0x07, + 0x3c, 0x71, 0x4a, 0xeb, 0xd0, 0x9d, 0xa6, 0xcc, 0xf7, 0xba, 0x81, 0x20, 0x1b, 0x56, 0x6d, + 0x09, 0x32, 0x7f, 0x44, 0xe5, 0xde, 0x93, 0xa8, 0x5b, 0x60, 0x2d, 0x16, 0xb7, 0x8c, 0xc1, + 0xfa, 0x9e, 0xa5, 0xe8, 0xd3, 0x72, 0x49, 0x04, 0x3f, 0xff, 0xc4, 0x89, 0xb2, 0x13, 0x28, + 0x65, 0x5e, 0x3a, 0x01, 0x4c, 0x77, 0xd6, 0xed, 0xa0, 0x9b, 0x68, 0x53, 0x1e, 0x25, 0x84, + 0xbf, 0xf2, 0xc9, 0xad, 0x96, 0xdb, 0xe0, 0x41, 0x7a, 0x37, 0x0c, 0xaa, 0x91, 0xdc, 0xe7, + 0x46, 0x7d, 0x30, 0x0b, 0x6f, 0x54, 0x19, 0x22, 0x83, 0xb8, 0xf5, 0xce, 0x3d, 0x06, 0x4b, + 0x70, 0xd1, 0xea, 0xa7, 0x9c, 0xf8, 0xc3, 0x8e, 0xb5, 0x14, 0x2f, 0x62, 0x59, 0x99, 0xa2, + 0xef, 0xd4, 0x75, 0x4e, 0x03, 0x38, 0x5c, 0x67, 0x2a, 0x11, 0xb0, 0x8b, 0xc6, 0xfd, 0x0e, + 0x35, 0x78, 0x43, 0xe2, 0xd9, 0x94, 0xaf, 0xcb, 0xf0, 0xbd, 0x86, 0x27, 0x1c, 0x51, 0x6a, + 0x00, 0x3c, 0x78, 0x44, 0xf0, 0xcc, 0x88, 0xb4, 0xfd, 0xc1, 0x85, 0xb9, 0x0d, 0x31, 0x75, + 0x49, 0xe7, 0xdb, 0x9f, 0xa3, 0x17, 0x2b, 0x6f, 0x53, 0x1a, 0x26, 0x62, 0x5e, 0xea, 0xd6, + 0x92, 0xae, 0xd3, 0xef, 0xab, 0x97, 0x23, 0x1f, 0x5b, 0x67, 0x2e, 0x12, 0x56, 0x6a, 0xde, + 0xe2, 0xa6, 0x9a, 0x34, 0x08, 0x4c, 0x70, 0xc4, 0xf8, 0xbc, 0x80, 0xc9, 0xf5, 0xb1, 0x8d, + 0x39, 0x05, 0x41, 0x7d, 0xbb, 0x87, 0xc3, 0xff, 0x4b, 0x77, 0x33, 0x0f, 0x46, 0x7a, 0x3e, + 0x02, 0xb6, 0x8a, 0xce, 0xf2, 0x5c, 0x60, 0x24, 0x18, 0xac, 0x90, 0xd4, 0xe8, 0xa1, 0x9d, + 0xd9, 0xe5, 0x51, 0x6d, 0x29, 0x15, 0x68, 0x54, 0x10, 0x2c, 0x98, 0xa4, 0xe0, 0xdc, 0x95, + 0xa9, 0xed, 0xd1, 0x65, 0x59, 0x1d, 0x21, 0x8f, 0xb3, 0xf7, 0xcb, 0x7f, 0x43, 0x07, 0x3b, + 0x72, 0x4e, 0x0a, 0x36, 0x82, 0xbe, 0xfa, 0xc6, 0x6b, 0x57, 0x13, 0x2f, 0x9b, 0xa7, 0xe3, + 0xdf, 0x96, 0xaa, 0xee, 0xd2, 0x66, 0x5a, 0x1e, 0x22, 0x8c, 0xb0, 0xf4, 0xc8, 0x7c, 0x40, + 0x04, 0x38, 0x71, 0x4d, 0x09, 0x35, 0x81, 0xbd, 0xf9, 0xc5, 0xb8, 0x84, 0xc0, 0xfc, 0x48, + 0x74, 0x30, 0x0c, 0x45, 0x79, 0x3d, 0x01, 0xb5, 0x89, 0xcd, 0xf1, 0x5f, 0x63, 0x27, 0x1b, + 0xaf, 0x93, 0xd7, 0xeb, 0xa2, 0x9e, 0xda, 0xe6, 0x52, 0x6e, 0x2a, 0x16, 0xd0, 0xec, 0xa8, + 0x94, 0x20, 0x1c, 0x58, 0x64, 0x2d, 0x11, 0x55, 0x69, 0xdd, 0xe1, 0xa5, 0x99, 0x37, 0x0b, + 0x4f, 0x73, 0xc7, 0xfb, 0xbf, 0x83, 0xca, 0xf6, 0xb2, 0x8e, 0x3a, 0x06, 0x42, 0x7e, 0x03, + 0x3f, 0x7b, 0x47, 0xf3, 0xcf, 0x8b, 0xb7, 0xfe, 0xc2, 0x86, 0xba, 0x0e, 0x32, 0x76, 0x4a, + 0xe4, 0xd8, 0x9c, 0xa0, 0x14, 0x28, 0x6c, 0x50, 0x19, 0x25, 0x61, 0x5d, 0xe9, 0xd5, 0x91, + 0xad, 0x00, 0x3d, 0x7a, 0x47, 0xf4, 0xc9, 0x8e, 0xb3, 0xf5, 0xc8, 0x8f, 0xb2, 0x01, 0x3c, + 0x7b, 0x46, 0xf7, 0xca, 0x8d, 0xb0, 0x03, 0x3e, 0x79, 0x44, 0x02, 0x3f, 0x78, 0x45, 0xf6, + 0xcb, 0x8c, 0xb1, 0xf3, 0xce, 0x89, 0xb4, 0x07, 0x3a, 0x7d, 0x40, 0x06, 0x3b, 0x7c, 0x41, + 0xf2, 0xcf, 0x88, 0xb5, 0x04, 0x39, 0x7e, 0x43, 0xf0, 0xcd, 0x8a, 0xb7, 0xf1, 0xcc, 0x8b, + 0xb6, 0x05, 0x38, 0x7f, 0x42, 0xfb, 0xc6, 0x81, 0xbc, 0x0f, 0x32, 0x75, 0x48, 0x0e, 0x33, + 0x74, 0x49, 0xfa, 0xc7, 0x80, 0xbd, 0x0c, 0x31, 0x76, 0x4b, 0xf8, 0xc5, 0x82, 0xbf, 0xf9, + 0xc4, 0x83, 0xbe, 0x0d, 0x30, 0x77, 0x4a, 0x08, 0x35, 0x72, 0x4f, 0xfc, 0xc1, 0x86, 0xbb, + 0xfd, 0xc0, 0x87, 0xba, 0x09, 0x34, 0x73, 0x4e, 0xff, 0xc2, 0x85, 0xb8, 0x0b, 0x36, 0x71, + 0x4c, 0x0a, 0x37, 0x70, 0x4d, 0xfe, 0xc3, 0x84, 0xb9, 0xeb, 0xd6, 0x91, 0xac, 0x1f, 0x22, + 0x65, 0x58, 0x1e, 0x23, 0x64, 0x59, 0xea, 0xd7, 0x90, 0xad, 0x1c, 0x21, 0x66, 0x5b, 0xe8, + 0xd5, 0x92, 0xaf, 0xe9, 0xd4, 0x93, 0xae, 0x1d, 0x20, 0x67, 0x5a, 0x18, 0x25, 0x62, 0x5f, + 0xec, 0xd1, 0x96, 0xab, 0xed, 0xd0, 0x97, 0xaa, 0x19, 0x24, 0x63, 0x5e, 0xef, 0xd2, 0x95, + 0xa8, 0x1b, 0x26, 0x61, 0x5c, 0x1a, 0x27, 0x60, 0x5d, 0xee, 0xd3, 0x94, 0xa9, 0x10, 0x2d, + 0x6a, 0x57, 0xe4, 0xd9, 0x9e, 0xa3, 0xe5, 0xd8, 0x9f, 0xa2, 0x11, 0x2c, 0x6b, 0x56, 0xe7, + 0xda, 0x9d, 0xa0, 0x13, 0x2e, 0x69, 0x54, 0x12, 0x2f, 0x68, 0x55, 0xe6, 0xdb, 0x9c, 0xa1, + 0xe3, 0xde, 0x99, 0xa4, 0x17, 0x2a, 0x6d, 0x50, 0x16, 0x2b, 0x6c, 0x51, 0xe2, 0xdf, 0x98, + 0xa5, 0x14, 0x29, 0x6e, 0x53, 0xe0, 0xdd, 0x9a, 0xa7, 0xe1, 0xdc, 0x9b, 0xa6, 0x15, 0x28, + 0x6f, 0x52, 0x00, 0x3e, 0x7c, 0x42, 0xf8, 0xc6, 0x84, 0xba, 0xed, 0xd3, 0x91, 0xaf, 0x15, + 0x2b, 0x69, 0x57, 0xc7, 0xf9, 0xbb, 0x85, 0x3f, 0x01, 0x43, 0x7d, 0x2a, 0x14, 0x56, 0x68, + 0xd2, 0xec, 0xae, 0x90, 0x93, 0xad, 0xef, 0xd1, 0x6b, 0x55, 0x17, 0x29, 0x7e, 0x40, 0x02, + 0x3c, 0x86, 0xb8, 0xfa, 0xc4, 0x54, 0x6a, 0x28, 0x16, 0xac, 0x92, 0xd0, 0xee, 0xb9, 0x87, + 0xc5, 0xfb, 0x41, 0x7f, 0x3d, 0x03, 0x3b, 0x05, 0x47, 0x79, 0xc3, 0xfd, 0xbf, 0x81, 0xd6, + 0xe8, 0xaa, 0x94, 0x2e, 0x10, 0x52, 0x6c, 0xfc, 0xc2, 0x80, 0xbe, 0x04, 0x3a, 0x78, 0x46, + 0x11, 0x2f, 0x6d, 0x53, 0xe9, 0xd7, 0x95, 0xab, 0xa8, 0x96, 0xd4, 0xea, 0x50, 0x6e, 0x2c, + 0x12, 0x45, 0x7b, 0x39, 0x07, 0xbd, 0x83, 0xc1, 0xff, 0x6f, 0x51, 0x13, 0x2d, 0x97, 0xa9, + 0xeb, 0xd5, 0x82, 0xbc, 0xfe, 0xc0, 0x7a, 0x44, 0x06, 0x38, 0x76, 0x48, 0x0a, 0x34, 0x8e, + 0xb0, 0xf2, 0xcc, 0x9b, 0xa5, 0xe7, 0xd9, 0x63, 0x5d, 0x1f, 0x21, 0xb1, 0x8f, 0xcd, 0xf3, + 0x49, 0x77, 0x35, 0x0b, 0x5c, 0x62, 0x20, 0x1e, 0xa4, 0x9a, 0xd8, 0xe6, 0xe5, 0xdb, 0x99, + 0xa7, 0x1d, 0x23, 0x61, 0x5f, 0x08, 0x36, 0x74, 0x4a, 0xf0, 0xce, 0x8c, 0xb2, 0x22, 0x1c, + 0x5e, 0x60, 0xda, 0xe4, 0xa6, 0x98, 0xcf, 0xf1, 0xb3, 0x8d, 0x37, 0x09, 0x4b, 0x75, 0x4d, + 0x73, 0x31, 0x0f, 0xb5, 0x8b, 0xc9, 0xf7, 0xa0, 0x9e, 0xdc, 0xe2, 0x58, 0x66, 0x24, 0x1a, + 0x8a, 0xb4, 0xf6, 0xc8, 0x72, 0x4c, 0x0e, 0x30, 0x67, 0x59, 0x1b, 0x25, 0x9f, 0xa1, 0xe3, + 0xdd, 0xde, 0xe0, 0xa2, 0x9c, 0x26, 0x18, 0x5a, 0x64, 0x33, 0x0d, 0x4f, 0x71, 0xcb, 0xf5, + 0xb7, 0x89, 0x19, 0x27, 0x65, 0x5b, 0xe1, 0xdf, 0x9d, 0xa3, 0xf4, 0xca, 0x88, 0xb6, 0x0c, + 0x32, 0x70, 0x4e, 0x00, 0x3f, 0x7e, 0x41, 0xfc, 0xc3, 0x82, 0xbd, 0xe5, 0xda, 0x9b, 0xa4, + 0x19, 0x26, 0x67, 0x58, 0xd7, 0xe8, 0xa9, 0x96, 0x2b, 0x14, 0x55, 0x6a, 0x32, 0x0d, 0x4c, + 0x73, 0xce, 0xf1, 0xb0, 0x8f, 0xb3, 0x8c, 0xcd, 0xf2, 0x4f, 0x70, 0x31, 0x0e, 0x56, 0x69, + 0x28, 0x17, 0xaa, 0x95, 0xd4, 0xeb, 0x64, 0x5b, 0x1a, 0x25, 0x98, 0xa7, 0xe6, 0xd9, 0x81, + 0xbe, 0xff, 0xc0, 0x7d, 0x42, 0x03, 0x3c, 0x7b, 0x44, 0x05, 0x3a, 0x87, 0xb8, 0xf9, 0xc6, + 0x9e, 0xa1, 0xe0, 0xdf, 0x62, 0x5d, 0x1c, 0x23, 0xac, 0x93, 0xd2, 0xed, 0x50, 0x6f, 0x2e, + 0x11, 0x49, 0x76, 0x37, 0x08, 0xb5, 0x8a, 0xcb, 0xf4, 0xc8, 0xf7, 0xb6, 0x89, 0x34, 0x0b, + 0x4a, 0x75, 0x2d, 0x12, 0x53, 0x6c, 0xd1, 0xee, 0xaf, 0x90, 0x1f, 0x20, 0x61, 0x5e, 0xe3, + 0xdc, 0x9d, 0xa2, 0xfa, 0xc5, 0x84, 0xbb, 0x06, 0x39, 0x78, 0x47, 0xf6, 0xc9, 0x88, 0xb7, + 0x0a, 0x35, 0x74, 0x4b, 0x13, 0x2c, 0x6d, 0x52, 0xef, 0xd0, 0x91, 0xae, 0x21, 0x1e, 0x5f, + 0x60, 0xdd, 0xe2, 0xa3, 0x9c, 0xc4, 0xfb, 0xba, 0x85, 0x38, 0x07, 0x46, 0x79, 0x45, 0x7a, + 0x3b, 0x04, 0xb9, 0x86, 0xc7, 0xf8, 0xa0, 0x9f, 0xde, 0xe1, 0x5c, 0x63, 0x22, 0x1d, 0x92, + 0xad, 0xec, 0xd3, 0x6e, 0x51, 0x10, 0x2f, 0x77, 0x48, 0x09, 0x36, 0x8b, 0xb4, 0xf5, 0xca, + 0x8d, 0xb2, 0xf3, 0xcc, 0x71, 0x4e, 0x0f, 0x30, 0x68, 0x57, 0x16, 0x29, 0x94, 0xab, 0xea, + 0xd5, 0x5a, 0x65, 0x24, 0x1b, 0xa6, 0x99, 0xd8, 0xe7, 0xbf, 0x80, 0xc1, 0xfe, 0x43, 0x7c, + 0x3d, 0x02, 0x3e, 0x01, 0x40, 0x7f, 0xc2, 0xfd, 0xbc, 0x83, 0xdb, 0xe4, 0xa5, 0x9a, 0x27, + 0x18, 0x59, 0x66, 0xe9, 0xd6, 0x97, 0xa8, 0x15, 0x2a, 0x6b, 0x54, 0x0c, 0x33, 0x72, 0x4d, + 0xf0, 0xcf, 0x8e, 0xb1, 0x00, 0x40, 0x80, 0xc0, 0x1d, 0x5d, 0x9d, 0xdd, 0x3a, 0x7a, 0xba, + 0xfa, 0x27, 0x67, 0xa7, 0xe7, 0x74, 0x34, 0xf4, 0xb4, 0x69, 0x29, 0xe9, 0xa9, 0x4e, 0x0e, + 0xce, 0x8e, 0x53, 0x13, 0xd3, 0x93, 0xe8, 0xa8, 0x68, 0x28, 0xf5, 0xb5, 0x75, 0x35, 0xd2, + 0x92, 0x52, 0x12, 0xcf, 0x8f, 0x4f, 0x0f, 0x9c, 0xdc, 0x1c, 0x5c, 0x81, 0xc1, 0x01, 0x41, + 0xa6, 0xe6, 0x26, 0x66, 0xbb, 0xfb, 0x3b, 0x7b, 0xcd, 0x8d, 0x4d, 0x0d, 0xd0, 0x90, 0x50, + 0x10, 0xf7, 0xb7, 0x77, 0x37, 0xea, 0xaa, 0x6a, 0x2a, 0xb9, 0xf9, 0x39, 0x79, 0xa4, 0xe4, + 0x24, 0x64, 0x83, 0xc3, 0x03, 0x43, 0x9e, 0xde, 0x1e, 0x5e, 0x25, 0x65, 0xa5, 0xe5, 0x38, + 0x78, 0xb8, 0xf8, 0x1f, 0x5f, 0x9f, 0xdf, 0x02, 0x42, 0x82, 0xc2, 0x51, 0x11, 0xd1, 0x91, + 0x4c, 0x0c, 0xcc, 0x8c, 0x6b, 0x2b, 0xeb, 0xab, 0x76, 0x36, 0xf6, 0xb6, 0x87, 0xc7, 0x07, + 0x47, 0x9a, 0xda, 0x1a, 0x5a, 0xbd, 0xfd, 0x3d, 0x7d, 0xa0, 0xe0, 0x20, 0x60, 0xf3, 0xb3, + 0x73, 0x33, 0xee, 0xae, 0x6e, 0x2e, 0xc9, 0x89, 0x49, 0x09, 0xd4, 0x94, 0x54, 0x14, 0x6f, + 0x2f, 0xef, 0xaf, 0x72, 0x32, 0xf2, 0xb2, 0x55, 0x15, 0xd5, 0x95, 0x48, 0x08, 0xc8, 0x88, + 0x1b, 0x5b, 0x9b, 0xdb, 0x06, 0x46, 0x86, 0xc6, 0x21, 0x61, 0xa1, 0xe1, 0x3c, 0x7c, 0xbc, + 0xfc, 0x4a, 0x0a, 0xca, 0x8a, 0x57, 0x17, 0xd7, 0x97, 0x70, 0x30, 0xf0, 0xb0, 0x6d, 0x2d, + 0xed, 0xad, 0x3e, 0x7e, 0xbe, 0xfe, 0x23, 0x63, 0xa3, 0xe3, 0x04, 0x44, 0x84, 0xc4, 0x19, + 0x59, 0x99, 0xd9, 0xa2, 0xe2, 0x22, 0x62, 0xbf, 0xff, 0x3f, 0x7f, 0x98, 0xd8, 0x18, 0x58, + 0x85, 0xc5, 0x05, 0x45, 0xd6, 0x96, 0x56, 0x16, 0xcb, 0x8b, 0x4b, 0x0b, 0xec, 0xac, 0x6c, + 0x2c, 0xf1, 0xb1, 0x71, 0x31, 0x00, 0x41, 0x82, 0xc3, 0x19, 0x58, 0x9b, 0xda, 0x32, 0x73, + 0xb0, 0xf1, 0x2b, 0x6a, 0xa9, 0xe8, 0x64, 0x25, 0xe6, 0xa7, 0x7d, 0x3c, 0xff, 0xbe, 0x56, + 0x17, 0xd4, 0x95, 0x4f, 0x0e, 0xcd, 0x8c, 0xc8, 0x89, 0x4a, 0x0b, 0xd1, 0x90, 0x53, 0x12, + 0xfa, 0xbb, 0x78, 0x39, 0xe3, 0xa2, 0x61, 0x20, 0xac, 0xed, 0x2e, 0x6f, 0xb5, 0xf4, 0x37, + 0x76, 0x9e, 0xdf, 0x1c, 0x5d, 0x87, 0xc6, 0x05, 0x44, 0x8d, 0xcc, 0x0f, 0x4e, 0x94, 0xd5, + 0x16, 0x57, 0xbf, 0xfe, 0x3d, 0x7c, 0xa6, 0xe7, 0x24, 0x65, 0xe9, 0xa8, 0x6b, 0x2a, 0xf0, + 0xb1, 0x72, 0x33, 0xdb, 0x9a, 0x59, 0x18, 0xc2, 0x83, 0x40, 0x01, 0x45, 0x04, 0xc7, 0x86, + 0x5c, 0x1d, 0xde, 0x9f, 0x77, 0x36, 0xf5, 0xb4, 0x6e, 0x2f, 0xec, 0xad, 0x21, 0x60, 0xa3, + 0xe2, 0x38, 0x79, 0xba, 0xfb, 0x13, 0x52, 0x91, 0xd0, 0x0a, 0x4b, 0x88, 0xc9, 0x07, 0x46, + 0x85, 0xc4, 0x1e, 0x5f, 0x9c, 0xdd, 0x35, 0x74, 0xb7, 0xf6, 0x2c, 0x6d, 0xae, 0xef, 0x63, + 0x22, 0xe1, 0xa0, 0x7a, 0x3b, 0xf8, 0xb9, 0x51, 0x10, 0xd3, 0x92, 0x48, 0x09, 0xca, 0x8b, + 0xcf, 0x8e, 0x4d, 0x0c, 0xd6, 0x97, 0x54, 0x15, 0xfd, 0xbc, 0x7f, 0x3e, 0xe4, 0xa5, 0x66, + 0x27, 0xab, 0xea, 0x29, 0x68, 0xb2, 0xf3, 0x30, 0x71, 0x99, 0xd8, 0x1b, 0x5a, 0x80, 0xc1, + 0x02, 0x43, 0x8a, 0xcb, 0x08, 0x49, 0x93, 0xd2, 0x11, 0x50, 0xb8, 0xf9, 0x3a, 0x7b, 0xa1, + 0xe0, 0x23, 0x62, 0xee, 0xaf, 0x6c, 0x2d, 0xf7, 0xb6, 0x75, 0x34, 0xdc, 0x9d, 0x5e, 0x1f, + 0xc5, 0x84, 0x47, 0x06, 0x42, 0x03, 0xc0, 0x81, 0x5b, 0x1a, 0xd9, 0x98, 0x70, 0x31, 0xf2, + 0xb3, 0x69, 0x28, 0xeb, 0xaa, 0x26, 0x67, 0xa4, 0xe5, 0x3f, 0x7e, 0xbd, 0xfc, 0x14, 0x55, + 0x96, 0xd7, 0x0d, 0x4c, 0x8f, 0xce, 0x00, 0x42, 0x84, 0xc6, 0x15, 0x57, 0x91, 0xd3, 0x2a, + 0x68, 0xae, 0xec, 0x3f, 0x7d, 0xbb, 0xf9, 0x54, 0x16, 0xd0, 0x92, 0x41, 0x03, 0xc5, 0x87, + 0x7e, 0x3c, 0xfa, 0xb8, 0x6b, 0x29, 0xef, 0xad, 0xa8, 0xea, 0x2c, 0x6e, 0xbd, 0xff, 0x39, + 0x7b, 0x82, 0xc0, 0x06, 0x44, 0x97, 0xd5, 0x13, 0x51, 0xfc, 0xbe, 0x78, 0x3a, 0xe9, 0xab, + 0x6d, 0x2f, 0xd6, 0x94, 0x52, 0x10, 0xc3, 0x81, 0x47, 0x05, 0x4d, 0x0f, 0xc9, 0x8b, 0x58, + 0x1a, 0xdc, 0x9e, 0x67, 0x25, 0xe3, 0xa1, 0x72, 0x30, 0xf6, 0xb4, 0x19, 0x5b, 0x9d, 0xdf, + 0x0c, 0x4e, 0x88, 0xca, 0x33, 0x71, 0xb7, 0xf5, 0x26, 0x64, 0xa2, 0xe0, 0xe5, 0xa7, 0x61, + 0x23, 0xf0, 0xb2, 0x74, 0x36, 0xcf, 0x8d, 0x4b, 0x09, 0xda, 0x98, 0x5e, 0x1c, 0xb1, 0xf3, + 0x35, 0x77, 0xa4, 0xe6, 0x20, 0x62, 0x9b, 0xd9, 0x1f, 0x5d, 0x8e, 0xcc, 0x0a, 0x48, 0x9a, + 0xd8, 0x1e, 0x5c, 0x8f, 0xcd, 0x0b, 0x49, 0xb0, 0xf2, 0x34, 0x76, 0xa5, 0xe7, 0x21, 0x63, + 0xce, 0x8c, 0x4a, 0x08, 0xdb, 0x99, 0x5f, 0x1d, 0xe4, 0xa6, 0x60, 0x22, 0xf1, 0xb3, 0x75, + 0x37, 0x32, 0x70, 0xb6, 0xf4, 0x27, 0x65, 0xa3, 0xe1, 0x18, 0x5a, 0x9c, 0xde, 0x0d, 0x4f, + 0x89, 0xcb, 0x66, 0x24, 0xe2, 0xa0, 0x73, 0x31, 0xf7, 0xb5, 0x4c, 0x0e, 0xc8, 0x8a, 0x59, + 0x1b, 0xdd, 0x9f, 0xd7, 0x95, 0x53, 0x11, 0xc2, 0x80, 0x46, 0x04, 0xfd, 0xbf, 0x79, 0x3b, + 0xe8, 0xaa, 0x6c, 0x2e, 0x83, 0xc1, 0x07, 0x45, 0x96, 0xd4, 0x12, 0x50, 0xa9, 0xeb, 0x2d, + 0x6f, 0xbc, 0xfe, 0x38, 0x7a, 0x7f, 0x3d, 0xfb, 0xb9, 0x6a, 0x28, 0xee, 0xac, 0x55, 0x17, + 0xd1, 0x93, 0x40, 0x02, 0xc4, 0x86, 0x2b, 0x69, 0xaf, 0xed, 0x3e, 0x7c, 0xba, 0xf8, 0x01, + 0x43, 0x85, 0xc7, 0x14, 0x56, 0x90, 0xd2, 0x00, 0x43, 0x86, 0xc5, 0x11, 0x52, 0x97, 0xd4, + 0x22, 0x61, 0xa4, 0xe7, 0x33, 0x70, 0xb5, 0xf6, 0x44, 0x07, 0xc2, 0x81, 0x55, 0x16, 0xd3, + 0x90, 0x66, 0x25, 0xe0, 0xa3, 0x77, 0x34, 0xf1, 0xb2, 0x88, 0xcb, 0x0e, 0x4d, 0x99, 0xda, + 0x1f, 0x5c, 0xaa, 0xe9, 0x2c, 0x6f, 0xbb, 0xf8, 0x3d, 0x7e, 0xcc, 0x8f, 0x4a, 0x09, 0xdd, + 0x9e, 0x5b, 0x18, 0xee, 0xad, 0x68, 0x2b, 0xff, 0xbc, 0x79, 0x3a, 0x0d, 0x4e, 0x8b, 0xc8, + 0x1c, 0x5f, 0x9a, 0xd9, 0x2f, 0x6c, 0xa9, 0xea, 0x3e, 0x7d, 0xb8, 0xfb, 0x49, 0x0a, 0xcf, + 0x8c, 0x58, 0x1b, 0xde, 0x9d, 0x6b, 0x28, 0xed, 0xae, 0x7a, 0x39, 0xfc, 0xbf, 0x85, 0xc6, + 0x03, 0x40, 0x94, 0xd7, 0x12, 0x51, 0xa7, 0xe4, 0x21, 0x62, 0xb6, 0xf5, 0x30, 0x73, 0xc1, + 0x82, 0x47, 0x04, 0xd0, 0x93, 0x56, 0x15, 0xe3, 0xa0, 0x65, 0x26, 0xf2, 0xb1, 0x74, 0x37, + 0x1a, 0x59, 0x9c, 0xdf, 0x0b, 0x48, 0x8d, 0xce, 0x38, 0x7b, 0xbe, 0xfd, 0x29, 0x6a, 0xaf, + 0xec, 0x5e, 0x1d, 0xd8, 0x9b, 0x4f, 0x0c, 0xc9, 0x8a, 0x7c, 0x3f, 0xfa, 0xb9, 0x6d, 0x2e, + 0xeb, 0xa8, 0x92, 0xd1, 0x14, 0x57, 0x83, 0xc0, 0x05, 0x46, 0xb0, 0xf3, 0x36, 0x75, 0xa1, + 0xe2, 0x27, 0x64, 0xd6, 0x95, 0x50, 0x13, 0xc7, 0x84, 0x41, 0x02, 0xf4, 0xb7, 0x72, 0x31, + 0xe5, 0xa6, 0x63, 0x20, 0x17, 0x54, 0x91, 0xd2, 0x06, 0x45, 0x80, 0xc3, 0x35, 0x76, 0xb3, + 0xf0, 0x24, 0x67, 0xa2, 0xe1, 0x53, 0x10, 0xd5, 0x96, 0x42, 0x01, 0xc4, 0x87, 0x71, 0x32, + 0xf7, 0xb4, 0x60, 0x23, 0xe6, 0xa5, 0x9f, 0xdc, 0x19, 0x5a, 0x8e, 0xcd, 0x08, 0x4b, 0xbd, + 0xfe, 0x3b, 0x78, 0xac, 0xef, 0x2a, 0x69, 0xdb, 0x98, 0x5d, 0x1e, 0xca, 0x89, 0x4c, 0x0f, + 0xf9, 0xba, 0x7f, 0x3c, 0xe8, 0xab, 0x6e, 0x2d, 0x00, 0x44, 0x88, 0xcc, 0x0d, 0x49, 0x85, + 0xc1, 0x1a, 0x5e, 0x92, 0xd6, 0x17, 0x53, 0x9f, 0xdb, 0x34, 0x70, 0xbc, 0xf8, 0x39, 0x7d, + 0xb1, 0xf5, 0x2e, 0x6a, 0xa6, 0xe2, 0x23, 0x67, 0xab, 0xef, 0x68, 0x2c, 0xe0, 0xa4, 0x65, + 0x21, 0xed, 0xa9, 0x72, 0x36, 0xfa, 0xbe, 0x7f, 0x3b, 0xf7, 0xb3, 0x5c, 0x18, 0xd4, 0x90, + 0x51, 0x15, 0xd9, 0x9d, 0x46, 0x02, 0xce, 0x8a, 0x4b, 0x0f, 0xc3, 0x87, 0xd0, 0x94, 0x58, + 0x1c, 0xdd, 0x99, 0x55, 0x11, 0xca, 0x8e, 0x42, 0x06, 0xc7, 0x83, 0x4f, 0x0b, 0xe4, 0xa0, + 0x6c, 0x28, 0xe9, 0xad, 0x61, 0x25, 0xfe, 0xba, 0x76, 0x32, 0xf3, 0xb7, 0x7b, 0x3f, 0xb8, + 0xfc, 0x30, 0x74, 0xb5, 0xf1, 0x3d, 0x79, 0xa2, 0xe6, 0x2a, 0x6e, 0xaf, 0xeb, 0x27, 0x63, + 0x8c, 0xc8, 0x04, 0x40, 0x81, 0xc5, 0x09, 0x4d, 0x96, 0xd2, 0x1e, 0x5a, 0x9b, 0xdf, 0x13, + 0x57, 0xbd, 0xf9, 0x35, 0x71, 0xb0, 0xf4, 0x38, 0x7c, 0xa7, 0xe3, 0x2f, 0x6b, 0xaa, 0xee, + 0x22, 0x66, 0x89, 0xcd, 0x01, 0x45, 0x84, 0xc0, 0x0c, 0x48, 0x93, 0xd7, 0x1b, 0x5f, 0x9e, + 0xda, 0x16, 0x52, 0xd5, 0x91, 0x5d, 0x19, 0xd8, 0x9c, 0x50, 0x14, 0xcf, 0x8b, 0x47, 0x03, + 0xc2, 0x86, 0x4a, 0x0e, 0xe1, 0xa5, 0x69, 0x2d, 0xec, 0xa8, 0x64, 0x20, 0xfb, 0xbf, 0x73, + 0x37, 0xf6, 0xb2, 0x7e, 0x3a, 0x6d, 0x29, 0xe5, 0xa1, 0x60, 0x24, 0xe8, 0xac, 0x77, 0x33, + 0xff, 0xbb, 0x7a, 0x3e, 0xf2, 0xb6, 0x59, 0x1d, 0xd1, 0x95, 0x54, 0x10, 0xdc, 0x98, 0x43, + 0x07, 0xcb, 0x8f, 0x4e, 0x0a, 0xc6, 0x82, 0x05, 0x41, 0x8d, 0xc9, 0x08, 0x4c, 0x80, 0xc4, + 0x1f, 0x5b, 0x97, 0xd3, 0x12, 0x56, 0x9a, 0xde, 0x31, 0x75, 0xb9, 0xfd, 0x3c, 0x78, 0xb4, + 0xf0, 0x2b, 0x6f, 0xa3, 0xe7, 0x26, 0x62, 0xae, 0xea, 0x00, 0x45, 0x8a, 0xcf, 0x09, 0x4c, + 0x83, 0xc6, 0x12, 0x57, 0x98, 0xdd, 0x1b, 0x5e, 0x91, 0xd4, 0x24, 0x61, 0xae, 0xeb, 0x2d, + 0x68, 0xa7, 0xe2, 0x36, 0x73, 0xbc, 0xf9, 0x3f, 0x7a, 0xb5, 0xf0, 0x48, 0x0d, 0xc2, 0x87, + 0x41, 0x04, 0xcb, 0x8e, 0x5a, 0x1f, 0xd0, 0x95, 0x53, 0x16, 0xd9, 0x9c, 0x6c, 0x29, 0xe6, + 0xa3, 0x65, 0x20, 0xef, 0xaa, 0x7e, 0x3b, 0xf4, 0xb1, 0x77, 0x32, 0xfd, 0xb8, 0x90, 0xd5, + 0x1a, 0x5f, 0x99, 0xdc, 0x13, 0x56, 0x82, 0xc7, 0x08, 0x4d, 0x8b, 0xce, 0x01, 0x44, 0xb4, + 0xf1, 0x3e, 0x7b, 0xbd, 0xf8, 0x37, 0x72, 0xa6, 0xe3, 0x2c, 0x69, 0xaf, 0xea, 0x25, 0x60, + 0xd8, 0x9d, 0x52, 0x17, 0xd1, 0x94, 0x5b, 0x1e, 0xca, 0x8f, 0x40, 0x05, 0xc3, 0x86, 0x49, + 0x0c, 0xfc, 0xb9, 0x76, 0x33, 0xf5, 0xb0, 0x7f, 0x3a, 0xee, 0xab, 0x64, 0x21, 0xe7, 0xa2, + 0x6d, 0x28, 0x3d, 0x78, 0xb7, 0xf2, 0x34, 0x71, 0xbe, 0xfb, 0x2f, 0x6a, 0xa5, 0xe0, 0x26, + 0x63, 0xac, 0xe9, 0x19, 0x5c, 0x93, 0xd6, 0x10, 0x55, 0x9a, 0xdf, 0x0b, 0x4e, 0x81, 0xc4, + 0x02, 0x47, 0x88, 0xcd, 0x75, 0x30, 0xff, 0xba, 0x7c, 0x39, 0xf6, 0xb3, 0x67, 0x22, 0xed, + 0xa8, 0x6e, 0x2b, 0xe4, 0xa1, 0x51, 0x14, 0xdb, 0x9e, 0x58, 0x1d, 0xd2, 0x97, 0x43, 0x06, + 0xc9, 0x8c, 0x4a, 0x0f, 0xc0, 0x85, 0xad, 0xe8, 0x27, 0x62, 0xa4, 0xe1, 0x2e, 0x6b, 0xbf, + 0xfa, 0x35, 0x70, 0xb6, 0xf3, 0x3c, 0x79, 0x89, 0xcc, 0x03, 0x46, 0x80, 0xc5, 0x0a, 0x4f, + 0x9b, 0xde, 0x11, 0x54, 0x92, 0xd7, 0x18, 0x5d, 0xe5, 0xa0, 0x6f, 0x2a, 0xec, 0xa9, 0x66, + 0x23, 0xf7, 0xb2, 0x7d, 0x38, 0xfe, 0xbb, 0x74, 0x31, 0xc1, 0x84, 0x4b, 0x0e, 0xc8, 0x8d, + 0x42, 0x07, 0xd3, 0x96, 0x59, 0x1c, 0xda, 0x9f, 0x50, 0x15, 0x00, 0x46, 0x8c, 0xca, 0x05, + 0x43, 0x89, 0xcf, 0x0a, 0x4c, 0x86, 0xc0, 0x0f, 0x49, 0x83, 0xc5, 0x14, 0x52, 0x98, 0xde, + 0x11, 0x57, 0x9d, 0xdb, 0x1e, 0x58, 0x92, 0xd4, 0x1b, 0x5d, 0x97, 0xd1, 0x28, 0x6e, 0xa4, + 0xe2, 0x2d, 0x6b, 0xa1, 0xe7, 0x22, 0x64, 0xae, 0xe8, 0x27, 0x61, 0xab, 0xed, 0x3c, 0x7a, + 0xb0, 0xf6, 0x39, 0x7f, 0xb5, 0xf3, 0x36, 0x70, 0xba, 0xfc, 0x33, 0x75, 0xbf, 0xf9, 0x50, + 0x16, 0xdc, 0x9a, 0x55, 0x13, 0xd9, 0x9f, 0x5a, 0x1c, 0xd6, 0x90, 0x5f, 0x19, 0xd3, 0x95, + 0x44, 0x02, 0xc8, 0x8e, 0x41, 0x07, 0xcd, 0x8b, 0x4e, 0x08, 0xc2, 0x84, 0x4b, 0x0d, 0xc7, + 0x81, 0x78, 0x3e, 0xf4, 0xb2, 0x7d, 0x3b, 0xf1, 0xb7, 0x72, 0x34, 0xfe, 0xb8, 0x77, 0x31, + 0xfb, 0xbd, 0x6c, 0x2a, 0xe0, 0xa6, 0x69, 0x2f, 0xe5, 0xa3, 0x66, 0x20, 0xea, 0xac, 0x63, + 0x25, 0xef, 0xa9, 0xa0, 0xe6, 0x2c, 0x6a, 0xa5, 0xe3, 0x29, 0x6f, 0xaa, 0xec, 0x26, 0x60, + 0xaf, 0xe9, 0x23, 0x65, 0xb4, 0xf2, 0x38, 0x7e, 0xb1, 0xf7, 0x3d, 0x7b, 0xbe, 0xf8, 0x32, + 0x74, 0xbb, 0xfd, 0x37, 0x71, 0x88, 0xce, 0x04, 0x42, 0x8d, 0xcb, 0x01, 0x47, 0x82, 0xc4, + 0x0e, 0x48, 0x87, 0xc1, 0x0b, 0x4d, 0x9c, 0xda, 0x10, 0x56, 0x99, 0xdf, 0x15, 0x53, 0x96, + 0xd0, 0x1a, 0x5c, 0x93, 0xd5, 0x1f, 0x59, 0xf0, 0xb6, 0x7c, 0x3a, 0xf5, 0xb3, 0x79, 0x3f, + 0xfa, 0xbc, 0x76, 0x30, 0xff, 0xb9, 0x73, 0x35, 0xe4, 0xa2, 0x68, 0x2e, 0xe1, 0xa7, 0x6d, + 0x2b, 0xee, 0xa8, 0x62, 0x24, 0xeb, 0xad, 0x67, 0x21, 0xd8, 0x9e, 0x54, 0x12, 0xdd, 0x9b, + 0x51, 0x17, 0xd2, 0x94, 0x5e, 0x18, 0xd7, 0x91, 0x5b, 0x1d, 0xcc, 0x8a, 0x40, 0x06, 0xc9, + 0x8f, 0x45, 0x03, 0xc6, 0x80, 0x4a, 0x0c, 0xc3, 0x85, 0x4f, 0x09, 0x00, 0x47, 0x8e, 0xc9, + 0x01, 0x46, 0x8f, 0xc8, 0x02, 0x45, 0x8c, 0xcb, 0x03, 0x44, 0x8d, 0xca, 0x04, 0x43, 0x8a, + 0xcd, 0x05, 0x42, 0x8b, 0xcc, 0x06, 0x41, 0x88, 0xcf, 0x07, 0x40, 0x89, 0xce, 0x08, 0x4f, + 0x86, 0xc1, 0x09, 0x4e, 0x87, 0xc0, 0x0a, 0x4d, 0x84, 0xc3, 0x0b, 0x4c, 0x85, 0xc2, 0x0c, + 0x4b, 0x82, 0xc5, 0x0d, 0x4a, 0x83, 0xc4, 0x0e, 0x49, 0x80, 0xc7, 0x0f, 0x48, 0x81, 0xc6, + 0x10, 0x57, 0x9e, 0xd9, 0x11, 0x56, 0x9f, 0xd8, 0x12, 0x55, 0x9c, 0xdb, 0x13, 0x54, 0x9d, + 0xda, 0x14, 0x53, 0x9a, 0xdd, 0x15, 0x52, 0x9b, 0xdc, 0x16, 0x51, 0x98, 0xdf, 0x17, 0x50, + 0x99, 0xde, 0x18, 0x5f, 0x96, 0xd1, 0x19, 0x5e, 0x97, 0xd0, 0x1a, 0x5d, 0x94, 0xd3, 0x1b, + 0x5c, 0x95, 0xd2, 0x1c, 0x5b, 0x92, 0xd5, 0x1d, 0x5a, 0x93, 0xd4, 0x1e, 0x59, 0x90, 0xd7, + 0x1f, 0x58, 0x91, 0xd6, 0x20, 0x67, 0xae, 0xe9, 0x21, 0x66, 0xaf, 0xe8, 0x22, 0x65, 0xac, + 0xeb, 0x23, 0x64, 0xad, 0xea, 0x24, 0x63, 0xaa, 0xed, 0x25, 0x62, 0xab, 0xec, 0x26, 0x61, + 0xa8, 0xef, 0x27, 0x60, 0xa9, 0xee, 0x28, 0x6f, 0xa6, 0xe1, 0x29, 0x6e, 0xa7, 0xe0, 0x2a, + 0x6d, 0xa4, 0xe3, 0x2b, 0x6c, 0xa5, 0xe2, 0x2c, 0x6b, 0xa2, 0xe5, 0x2d, 0x6a, 0xa3, 0xe4, + 0x2e, 0x69, 0xa0, 0xe7, 0x2f, 0x68, 0xa1, 0xe6, 0x30, 0x77, 0xbe, 0xf9, 0x31, 0x76, 0xbf, + 0xf8, 0x32, 0x75, 0xbc, 0xfb, 0x33, 0x74, 0xbd, 0xfa, 0x34, 0x73, 0xba, 0xfd, 0x35, 0x72, + 0xbb, 0xfc, 0x36, 0x71, 0xb8, 0xff, 0x37, 0x70, 0xb9, 0xfe, 0x38, 0x7f, 0xb6, 0xf1, 0x39, + 0x7e, 0xb7, 0xf0, 0x3a, 0x7d, 0xb4, 0xf3, 0x3b, 0x7c, 0xb5, 0xf2, 0x3c, 0x7b, 0xb2, 0xf5, + 0x3d, 0x7a, 0xb3, 0xf4, 0x3e, 0x79, 0xb0, 0xf7, 0x3f, 0x78, 0xb1, 0xf6, 0x00, 0x48, 0x90, + 0xd8, 0x3d, 0x75, 0xad, 0xe5, 0x7a, 0x32, 0xea, 0xa2, 0x47, 0x0f, 0xd7, 0x9f, 0xf4, 0xbc, + 0x64, 0x2c, 0xc9, 0x81, 0x59, 0x11, 0x8e, 0xc6, 0x1e, 0x56, 0xb3, 0xfb, 0x23, 0x6b, 0xf5, + 0xbd, 0x65, 0x2d, 0xc8, 0x80, 0x58, 0x10, 0x8f, 0xc7, 0x1f, 0x57, 0xb2, 0xfa, 0x22, 0x6a, + 0x01, 0x49, 0x91, 0xd9, 0x3c, 0x74, 0xac, 0xe4, 0x7b, 0x33, 0xeb, 0xa3, 0x46, 0x0e, 0xd6, + 0x9e, 0xf7, 0xbf, 0x67, 0x2f, 0xca, 0x82, 0x5a, 0x12, 0x8d, 0xc5, 0x1d, 0x55, 0xb0, 0xf8, + 0x20, 0x68, 0x03, 0x4b, 0x93, 0xdb, 0x3e, 0x76, 0xae, 0xe6, 0x79, 0x31, 0xe9, 0xa1, 0x44, + 0x0c, 0xd4, 0x9c, 0x02, 0x4a, 0x92, 0xda, 0x3f, 0x77, 0xaf, 0xe7, 0x78, 0x30, 0xe8, 0xa0, + 0x45, 0x0d, 0xd5, 0x9d, 0xf6, 0xbe, 0x66, 0x2e, 0xcb, 0x83, 0x5b, 0x13, 0x8c, 0xc4, 0x1c, + 0x54, 0xb1, 0xf9, 0x21, 0x69, 0xf3, 0xbb, 0x63, 0x2b, 0xce, 0x86, 0x5e, 0x16, 0x89, 0xc1, + 0x19, 0x51, 0xb4, 0xfc, 0x24, 0x6c, 0x07, 0x4f, 0x97, 0xdf, 0x3a, 0x72, 0xaa, 0xe2, 0x7d, + 0x35, 0xed, 0xa5, 0x40, 0x08, 0xd0, 0x98, 0x06, 0x4e, 0x96, 0xde, 0x3b, 0x73, 0xab, 0xe3, + 0x7c, 0x34, 0xec, 0xa4, 0x41, 0x09, 0xd1, 0x99, 0xf2, 0xba, 0x62, 0x2a, 0xcf, 0x87, 0x5f, + 0x17, 0x88, 0xc0, 0x18, 0x50, 0xb5, 0xfd, 0x25, 0x6d, 0x04, 0x4c, 0x94, 0xdc, 0x39, 0x71, + 0xa9, 0xe1, 0x7e, 0x36, 0xee, 0xa6, 0x43, 0x0b, 0xd3, 0x9b, 0xf0, 0xb8, 0x60, 0x28, 0xcd, + 0x85, 0x5d, 0x15, 0x8a, 0xc2, 0x1a, 0x52, 0xb7, 0xff, 0x27, 0x6f, 0xf1, 0xb9, 0x61, 0x29, + 0xcc, 0x84, 0x5c, 0x14, 0x8b, 0xc3, 0x1b, 0x53, 0xb6, 0xfe, 0x26, 0x6e, 0x05, 0x4d, 0x95, + 0xdd, 0x38, 0x70, 0xa8, 0xe0, 0x7f, 0x37, 0xef, 0xa7, 0x42, 0x0a, 0xd2, 0x9a, 0x00, 0x49, + 0x92, 0xdb, 0x39, 0x70, 0xab, 0xe2, 0x72, 0x3b, 0xe0, 0xa9, 0x4b, 0x02, 0xd9, 0x90, 0xe4, + 0xad, 0x76, 0x3f, 0xdd, 0x94, 0x4f, 0x06, 0x96, 0xdf, 0x04, 0x4d, 0xaf, 0xe6, 0x3d, 0x74, + 0xd5, 0x9c, 0x47, 0x0e, 0xec, 0xa5, 0x7e, 0x37, 0xa7, 0xee, 0x35, 0x7c, 0x9e, 0xd7, 0x0c, + 0x45, 0x31, 0x78, 0xa3, 0xea, 0x08, 0x41, 0x9a, 0xd3, 0x43, 0x0a, 0xd1, 0x98, 0x7a, 0x33, + 0xe8, 0xa1, 0xb7, 0xfe, 0x25, 0x6c, 0x8e, 0xc7, 0x1c, 0x55, 0xc5, 0x8c, 0x57, 0x1e, 0xfc, + 0xb5, 0x6e, 0x27, 0x53, 0x1a, 0xc1, 0x88, 0x6a, 0x23, 0xf8, 0xb1, 0x21, 0x68, 0xb3, 0xfa, + 0x18, 0x51, 0x8a, 0xc3, 0x62, 0x2b, 0xf0, 0xb9, 0x5b, 0x12, 0xc9, 0x80, 0x10, 0x59, 0x82, + 0xcb, 0x29, 0x60, 0xbb, 0xf2, 0x86, 0xcf, 0x14, 0x5d, 0xbf, 0xf6, 0x2d, 0x64, 0xf4, 0xbd, + 0x66, 0x2f, 0xcd, 0x84, 0x5f, 0x16, 0x73, 0x3a, 0xe1, 0xa8, 0x4a, 0x03, 0xd8, 0x91, 0x01, + 0x48, 0x93, 0xda, 0x38, 0x71, 0xaa, 0xe3, 0x97, 0xde, 0x05, 0x4c, 0xae, 0xe7, 0x3c, 0x75, + 0xe5, 0xac, 0x77, 0x3e, 0xdc, 0x95, 0x4e, 0x07, 0xa6, 0xef, 0x34, 0x7d, 0x9f, 0xd6, 0x0d, + 0x44, 0xd4, 0x9d, 0x46, 0x0f, 0xed, 0xa4, 0x7f, 0x36, 0x42, 0x0b, 0xd0, 0x99, 0x7b, 0x32, + 0xe9, 0xa0, 0x30, 0x79, 0xa2, 0xeb, 0x09, 0x40, 0x9b, 0xd2, 0xc4, 0x8d, 0x56, 0x1f, 0xfd, + 0xb4, 0x6f, 0x26, 0xb6, 0xff, 0x24, 0x6d, 0x8f, 0xc6, 0x1d, 0x54, 0x20, 0x69, 0xb2, 0xfb, + 0x19, 0x50, 0x8b, 0xc2, 0x52, 0x1b, 0xc0, 0x89, 0x6b, 0x22, 0xf9, 0xb0, 0x11, 0x58, 0x83, + 0xca, 0x28, 0x61, 0xba, 0xf3, 0x63, 0x2a, 0xf1, 0xb8, 0x5a, 0x13, 0xc8, 0x81, 0xf5, 0xbc, + 0x67, 0x2e, 0xcc, 0x85, 0x5e, 0x17, 0x87, 0xce, 0x15, 0x5c, 0xbe, 0xf7, 0x2c, 0x65, 0x00, + 0x4a, 0x94, 0xde, 0x35, 0x7f, 0xa1, 0xeb, 0x6a, 0x20, 0xfe, 0xb4, 0x5f, 0x15, 0xcb, 0x81, + 0xd4, 0x9e, 0x40, 0x0a, 0xe1, 0xab, 0x75, 0x3f, 0xbe, 0xf4, 0x2a, 0x60, 0x8b, 0xc1, 0x1f, + 0x55, 0xb5, 0xff, 0x21, 0x6b, 0x80, 0xca, 0x14, 0x5e, 0xdf, 0x95, 0x4b, 0x01, 0xea, 0xa0, + 0x7e, 0x34, 0x61, 0x2b, 0xf5, 0xbf, 0x54, 0x1e, 0xc0, 0x8a, 0x0b, 0x41, 0x9f, 0xd5, 0x3e, + 0x74, 0xaa, 0xe0, 0x77, 0x3d, 0xe3, 0xa9, 0x42, 0x08, 0xd6, 0x9c, 0x1d, 0x57, 0x89, 0xc3, + 0x28, 0x62, 0xbc, 0xf6, 0xa3, 0xe9, 0x37, 0x7d, 0x96, 0xdc, 0x02, 0x48, 0xc9, 0x83, 0x5d, + 0x17, 0xfc, 0xb6, 0x68, 0x22, 0xc2, 0x88, 0x56, 0x1c, 0xf7, 0xbd, 0x63, 0x29, 0xa8, 0xe2, + 0x3c, 0x76, 0x9d, 0xd7, 0x09, 0x43, 0x16, 0x5c, 0x82, 0xc8, 0x23, 0x69, 0xb7, 0xfd, 0x7c, + 0x36, 0xe8, 0xa2, 0x49, 0x03, 0xdd, 0x97, 0xee, 0xa4, 0x7a, 0x30, 0xdb, 0x91, 0x4f, 0x05, + 0x84, 0xce, 0x10, 0x5a, 0xb1, 0xfb, 0x25, 0x6f, 0x3a, 0x70, 0xae, 0xe4, 0x0f, 0x45, 0x9b, + 0xd1, 0x50, 0x1a, 0xc4, 0x8e, 0x65, 0x2f, 0xf1, 0xbb, 0x5b, 0x11, 0xcf, 0x85, 0x6e, 0x24, + 0xfa, 0xb0, 0x31, 0x7b, 0xa5, 0xef, 0x04, 0x4e, 0x90, 0xda, 0x8f, 0xc5, 0x1b, 0x51, 0xba, + 0xf0, 0x2e, 0x64, 0xe5, 0xaf, 0x71, 0x3b, 0xd0, 0x9a, 0x44, 0x0e, 0x99, 0xd3, 0x0d, 0x47, + 0xac, 0xe6, 0x38, 0x72, 0xf3, 0xb9, 0x67, 0x2d, 0xc6, 0x8c, 0x52, 0x18, 0x4d, 0x07, 0xd9, + 0x93, 0x78, 0x32, 0xec, 0xa6, 0x27, 0x6d, 0xb3, 0xf9, 0x12, 0x58, 0x86, 0xcc, 0x2c, 0x66, + 0xb8, 0xf2, 0x19, 0x53, 0x8d, 0xc7, 0x46, 0x0c, 0xd2, 0x98, 0x73, 0x39, 0xe7, 0xad, 0xf8, + 0xb2, 0x6c, 0x26, 0xcd, 0x87, 0x59, 0x13, 0x92, 0xd8, 0x06, 0x4c, 0xa7, 0xed, 0x33, 0x79, + 0x00, 0x4b, 0x96, 0xdd, 0x31, 0x7a, 0xa7, 0xec, 0x62, 0x29, 0xf4, 0xbf, 0x53, 0x18, 0xc5, + 0x8e, 0xc4, 0x8f, 0x52, 0x19, 0xf5, 0xbe, 0x63, 0x28, 0xa6, 0xed, 0x30, 0x7b, 0x97, 0xdc, + 0x01, 0x4a, 0x95, 0xde, 0x03, 0x48, 0xa4, 0xef, 0x32, 0x79, 0xf7, 0xbc, 0x61, 0x2a, 0xc6, + 0x8d, 0x50, 0x1b, 0x51, 0x1a, 0xc7, 0x8c, 0x60, 0x2b, 0xf6, 0xbd, 0x33, 0x78, 0xa5, 0xee, + 0x02, 0x49, 0x94, 0xdf, 0x37, 0x7c, 0xa1, 0xea, 0x06, 0x4d, 0x90, 0xdb, 0x55, 0x1e, 0xc3, + 0x88, 0x64, 0x2f, 0xf2, 0xb9, 0xf3, 0xb8, 0x65, 0x2e, 0xc2, 0x89, 0x54, 0x1f, 0x91, 0xda, + 0x07, 0x4c, 0xa0, 0xeb, 0x36, 0x7d, 0xa2, 0xe9, 0x34, 0x7f, 0x93, 0xd8, 0x05, 0x4e, 0xc0, + 0x8b, 0x56, 0x1d, 0xf1, 0xba, 0x67, 0x2c, 0x66, 0x2d, 0xf0, 0xbb, 0x57, 0x1c, 0xc1, 0x8a, + 0x04, 0x4f, 0x92, 0xd9, 0x35, 0x7e, 0xa3, 0xe8, 0x6e, 0x25, 0xf8, 0xb3, 0x5f, 0x14, 0xc9, + 0x82, 0x0c, 0x47, 0x9a, 0xd1, 0x3d, 0x76, 0xab, 0xe0, 0xaa, 0xe1, 0x3c, 0x77, 0x9b, 0xd0, + 0x0d, 0x46, 0xc8, 0x83, 0x5e, 0x15, 0xf9, 0xb2, 0x6f, 0x24, 0xfb, 0xb0, 0x6d, 0x26, 0xca, + 0x81, 0x5c, 0x17, 0x99, 0xd2, 0x0f, 0x44, 0xa8, 0xe3, 0x3e, 0x75, 0x3f, 0x74, 0xa9, 0xe2, + 0x0e, 0x45, 0x98, 0xd3, 0x5d, 0x16, 0xcb, 0x80, 0x6c, 0x27, 0xfa, 0xb1, 0x59, 0x12, 0xcf, + 0x84, 0x68, 0x23, 0xfe, 0xb5, 0x3b, 0x70, 0xad, 0xe6, 0x0a, 0x41, 0x9c, 0xd7, 0x9d, 0xd6, + 0x0b, 0x40, 0xac, 0xe7, 0x3a, 0x71, 0xff, 0xb4, 0x69, 0x22, 0xce, 0x85, 0x58, 0x13, 0xcc, + 0x87, 0x5a, 0x11, 0xfd, 0xb6, 0x6b, 0x20, 0xae, 0xe5, 0x38, 0x73, 0x9f, 0xd4, 0x09, 0x42, + 0x08, 0x43, 0x9e, 0xd5, 0x39, 0x72, 0xaf, 0xe4, 0x6a, 0x21, 0xfc, 0xb7, 0x5b, 0x10, 0xcd, + 0x86, 0x00, 0x4c, 0x98, 0xd4, 0x2d, 0x61, 0xb5, 0xf9, 0x5a, 0x16, 0xc2, 0x8e, 0x77, 0x3b, + 0xef, 0xa3, 0xb4, 0xf8, 0x2c, 0x60, 0x99, 0xd5, 0x01, 0x4d, 0xee, 0xa2, 0x76, 0x3a, 0xc3, + 0x8f, 0x5b, 0x17, 0x75, 0x39, 0xed, 0xa1, 0x58, 0x14, 0xc0, 0x8c, 0x2f, 0x63, 0xb7, 0xfb, + 0x02, 0x4e, 0x9a, 0xd6, 0xc1, 0x8d, 0x59, 0x15, 0xec, 0xa0, 0x74, 0x38, 0x9b, 0xd7, 0x03, + 0x4f, 0xb6, 0xfa, 0x2e, 0x62, 0xea, 0xa6, 0x72, 0x3e, 0xc7, 0x8b, 0x5f, 0x13, 0xb0, 0xfc, + 0x28, 0x64, 0x9d, 0xd1, 0x05, 0x49, 0x5e, 0x12, 0xc6, 0x8a, 0x73, 0x3f, 0xeb, 0xa7, 0x04, + 0x48, 0x9c, 0xd0, 0x29, 0x65, 0xb1, 0xfd, 0x9f, 0xd3, 0x07, 0x4b, 0xb2, 0xfe, 0x2a, 0x66, + 0xc5, 0x89, 0x5d, 0x11, 0xe8, 0xa4, 0x70, 0x3c, 0x2b, 0x67, 0xb3, 0xff, 0x06, 0x4a, 0x9e, + 0xd2, 0x71, 0x3d, 0xe9, 0xa5, 0x5c, 0x10, 0xc4, 0x88, 0xc9, 0x85, 0x51, 0x1d, 0xe4, 0xa8, + 0x7c, 0x30, 0x93, 0xdf, 0x0b, 0x47, 0xbe, 0xf2, 0x26, 0x6a, 0x7d, 0x31, 0xe5, 0xa9, 0x50, + 0x1c, 0xc8, 0x84, 0x27, 0x6b, 0xbf, 0xf3, 0x0a, 0x46, 0x92, 0xde, 0xbc, 0xf0, 0x24, 0x68, + 0x91, 0xdd, 0x09, 0x45, 0xe6, 0xaa, 0x7e, 0x32, 0xcb, 0x87, 0x53, 0x1f, 0x08, 0x44, 0x90, + 0xdc, 0x25, 0x69, 0xbd, 0xf1, 0x52, 0x1e, 0xca, 0x86, 0x7f, 0x33, 0xe7, 0xab, 0x23, 0x6f, + 0xbb, 0xf7, 0x0e, 0x42, 0x96, 0xda, 0x79, 0x35, 0xe1, 0xad, 0x54, 0x18, 0xcc, 0x80, 0x97, + 0xdb, 0x0f, 0x43, 0xba, 0xf6, 0x22, 0x6e, 0xcd, 0x81, 0x55, 0x19, 0xe0, 0xac, 0x78, 0x34, + 0x56, 0x1a, 0xce, 0x82, 0x7b, 0x37, 0xe3, 0xaf, 0x0c, 0x40, 0x94, 0xd8, 0x21, 0x6d, 0xb9, + 0xf5, 0xe2, 0xae, 0x7a, 0x36, 0xcf, 0x83, 0x57, 0x1b, 0xb8, 0xf4, 0x20, 0x6c, 0x95, 0xd9, + 0x0d, 0x41, 0x00, 0x4d, 0x9a, 0xd7, 0x29, 0x64, 0xb3, 0xfe, 0x52, 0x1f, 0xc8, 0x85, 0x7b, + 0x36, 0xe1, 0xac, 0xa4, 0xe9, 0x3e, 0x73, 0x8d, 0xc0, 0x17, 0x5a, 0xf6, 0xbb, 0x6c, 0x21, + 0xdf, 0x92, 0x45, 0x08, 0x55, 0x18, 0xcf, 0x82, 0x7c, 0x31, 0xe6, 0xab, 0x07, 0x4a, 0x9d, + 0xd0, 0x2e, 0x63, 0xb4, 0xf9, 0xf1, 0xbc, 0x6b, 0x26, 0xd8, 0x95, 0x42, 0x0f, 0xa3, 0xee, + 0x39, 0x74, 0x8a, 0xc7, 0x10, 0x5d, 0xaa, 0xe7, 0x30, 0x7d, 0x83, 0xce, 0x19, 0x54, 0xf8, + 0xb5, 0x62, 0x2f, 0xd1, 0x9c, 0x4b, 0x06, 0x0e, 0x43, 0x94, 0xd9, 0x27, 0x6a, 0xbd, 0xf0, + 0x5c, 0x11, 0xc6, 0x8b, 0x75, 0x38, 0xef, 0xa2, 0xff, 0xb2, 0x65, 0x28, 0xd6, 0x9b, 0x4c, + 0x01, 0xad, 0xe0, 0x37, 0x7a, 0x84, 0xc9, 0x1e, 0x53, 0x5b, 0x16, 0xc1, 0x8c, 0x72, 0x3f, + 0xe8, 0xa5, 0x09, 0x44, 0x93, 0xde, 0x20, 0x6d, 0xba, 0xf7, 0x49, 0x04, 0xd3, 0x9e, 0x60, + 0x2d, 0xfa, 0xb7, 0x1b, 0x56, 0x81, 0xcc, 0x32, 0x7f, 0xa8, 0xe5, 0xed, 0xa0, 0x77, 0x3a, + 0xc4, 0x89, 0x5e, 0x13, 0xbf, 0xf2, 0x25, 0x68, 0x96, 0xdb, 0x0c, 0x41, 0x1c, 0x51, 0x86, + 0xcb, 0x35, 0x78, 0xaf, 0xe2, 0x4e, 0x03, 0xd4, 0x99, 0x67, 0x2a, 0xfd, 0xb0, 0xb8, 0xf5, + 0x22, 0x6f, 0x91, 0xdc, 0x0b, 0x46, 0xea, 0xa7, 0x70, 0x3d, 0xc3, 0x8e, 0x59, 0x14, 0xe3, + 0xae, 0x79, 0x34, 0xca, 0x87, 0x50, 0x1d, 0xb1, 0xfc, 0x2b, 0x66, 0x98, 0xd5, 0x02, 0x4f, + 0x47, 0x0a, 0xdd, 0x90, 0x6e, 0x23, 0xf4, 0xb9, 0x15, 0x58, 0x8f, 0xc2, 0x3c, 0x71, 0xa6, + 0xeb, 0xb6, 0xfb, 0x2c, 0x61, 0x9f, 0xd2, 0x05, 0x48, 0xe4, 0xa9, 0x7e, 0x33, 0xcd, 0x80, + 0x57, 0x1a, 0x12, 0x5f, 0x88, 0xc5, 0x3b, 0x76, 0xa1, 0xec, 0x40, 0x0d, 0xda, 0x97, 0x69, + 0x24, 0xf3, 0xbe, 0x00, 0x4e, 0x9c, 0xd2, 0x25, 0x6b, 0xb9, 0xf7, 0x4a, 0x04, 0xd6, 0x98, + 0x6f, 0x21, 0xf3, 0xbd, 0x94, 0xda, 0x08, 0x46, 0xb1, 0xff, 0x2d, 0x63, 0xde, 0x90, 0x42, + 0x0c, 0xfb, 0xb5, 0x67, 0x29, 0x35, 0x7b, 0xa9, 0xe7, 0x10, 0x5e, 0x8c, 0xc2, 0x7f, 0x31, + 0xe3, 0xad, 0x5a, 0x14, 0xc6, 0x88, 0xa1, 0xef, 0x3d, 0x73, 0x84, 0xca, 0x18, 0x56, 0xeb, + 0xa5, 0x77, 0x39, 0xce, 0x80, 0x52, 0x1c, 0x6a, 0x24, 0xf6, 0xb8, 0x4f, 0x01, 0xd3, 0x9d, + 0x20, 0x6e, 0xbc, 0xf2, 0x05, 0x4b, 0x99, 0xd7, 0xfe, 0xb0, 0x62, 0x2c, 0xdb, 0x95, 0x47, + 0x09, 0xb4, 0xfa, 0x28, 0x66, 0x91, 0xdf, 0x0d, 0x43, 0x5f, 0x11, 0xc3, 0x8d, 0x7a, 0x34, + 0xe6, 0xa8, 0x15, 0x5b, 0x89, 0xc7, 0x30, 0x7e, 0xac, 0xe2, 0xcb, 0x85, 0x57, 0x19, 0xee, + 0xa0, 0x72, 0x3c, 0x81, 0xcf, 0x1d, 0x53, 0xa4, 0xea, 0x38, 0x76, 0xd4, 0x9a, 0x48, 0x06, + 0xf1, 0xbf, 0x6d, 0x23, 0x9e, 0xd0, 0x02, 0x4c, 0xbb, 0xf5, 0x27, 0x69, 0x40, 0x0e, 0xdc, + 0x92, 0x65, 0x2b, 0xf9, 0xb7, 0x0a, 0x44, 0x96, 0xd8, 0x2f, 0x61, 0xb3, 0xfd, 0xe1, 0xaf, + 0x7d, 0x33, 0xc4, 0x8a, 0x58, 0x16, 0xab, 0xe5, 0x37, 0x79, 0x8e, 0xc0, 0x12, 0x5c, 0x75, + 0x3b, 0xe9, 0xa7, 0x50, 0x1e, 0xcc, 0x82, 0x3f, 0x71, 0xa3, 0xed, 0x1a, 0x54, 0x86, 0xc8, + 0xbe, 0xf0, 0x22, 0x6c, 0x9b, 0xd5, 0x07, 0x49, 0xf4, 0xba, 0x68, 0x26, 0xd1, 0x9f, 0x4d, + 0x03, 0x2a, 0x64, 0xb6, 0xf8, 0x0f, 0x41, 0x93, 0xdd, 0x60, 0x2e, 0xfc, 0xb2, 0x45, 0x0b, + 0xd9, 0x97, 0x8b, 0xc5, 0x17, 0x59, 0xae, 0xe0, 0x32, 0x7c, 0xc1, 0x8f, 0x5d, 0x13, 0xe4, + 0xaa, 0x78, 0x36, 0x1f, 0x51, 0x83, 0xcd, 0x3a, 0x74, 0xa6, 0xe8, 0x55, 0x1b, 0xc9, 0x87, + 0x70, 0x3e, 0xec, 0xa2, 0x00, 0x4f, 0x9e, 0xd1, 0x21, 0x6e, 0xbf, 0xf0, 0x42, 0x0d, 0xdc, + 0x93, 0x63, 0x2c, 0xfd, 0xb2, 0x84, 0xcb, 0x1a, 0x55, 0xa5, 0xea, 0x3b, 0x74, 0xc6, 0x89, + 0x58, 0x17, 0xe7, 0xa8, 0x79, 0x36, 0x15, 0x5a, 0x8b, 0xc4, 0x34, 0x7b, 0xaa, 0xe5, 0x57, + 0x18, 0xc9, 0x86, 0x76, 0x39, 0xe8, 0xa7, 0x91, 0xde, 0x0f, 0x40, 0xb0, 0xff, 0x2e, 0x61, + 0xd3, 0x9c, 0x4d, 0x02, 0xf2, 0xbd, 0x6c, 0x23, 0x2a, 0x65, 0xb4, 0xfb, 0x0b, 0x44, 0x95, + 0xda, 0x68, 0x27, 0xf6, 0xb9, 0x49, 0x06, 0xd7, 0x98, 0xae, 0xe1, 0x30, 0x7f, 0x8f, 0xc0, + 0x11, 0x5e, 0xec, 0xa3, 0x72, 0x3d, 0xcd, 0x82, 0x53, 0x1c, 0x3f, 0x70, 0xa1, 0xee, 0x1e, + 0x51, 0x80, 0xcf, 0x7d, 0x32, 0xe3, 0xac, 0x5c, 0x13, 0xc2, 0x8d, 0xbb, 0xf4, 0x25, 0x6a, + 0x9a, 0xd5, 0x04, 0x4b, 0xf9, 0xb6, 0x67, 0x28, 0xd8, 0x97, 0x46, 0x09, 0x54, 0x1b, 0xca, + 0x85, 0x75, 0x3a, 0xeb, 0xa4, 0x16, 0x59, 0x88, 0xc7, 0x37, 0x78, 0xa9, 0xe6, 0xd0, 0x9f, + 0x4e, 0x01, 0xf1, 0xbe, 0x6f, 0x20, 0x92, 0xdd, 0x0c, 0x43, 0xb3, 0xfc, 0x2d, 0x62, 0x41, + 0x0e, 0xdf, 0x90, 0x60, 0x2f, 0xfe, 0xb1, 0x03, 0x4c, 0x9d, 0xd2, 0x22, 0x6d, 0xbc, 0xf3, + 0xc5, 0x8a, 0x5b, 0x14, 0xe4, 0xab, 0x7a, 0x35, 0x87, 0xc8, 0x19, 0x56, 0xa6, 0xe9, 0x38, + 0x77, 0x7e, 0x31, 0xe0, 0xaf, 0x5f, 0x10, 0xc1, 0x8e, 0x3c, 0x73, 0xa2, 0xed, 0x1d, 0x52, + 0x83, 0xcc, 0xfa, 0xb5, 0x64, 0x2b, 0xdb, 0x94, 0x45, 0x0a, 0xb8, 0xf7, 0x26, 0x69, 0x99, + 0xd6, 0x07, 0x48, 0x6b, 0x24, 0xf5, 0xba, 0x4a, 0x05, 0xd4, 0x9b, 0x29, 0x66, 0xb7, 0xf8, + 0x08, 0x47, 0x96, 0xd9, 0xef, 0xa0, 0x71, 0x3e, 0xce, 0x81, 0x50, 0x1f, 0xad, 0xe2, 0x33, + 0x7c, 0x8c, 0xc3, 0x12, 0x5d, 0x00, 0x50, 0xa0, 0xf0, 0x5d, 0x0d, 0xfd, 0xad, 0xba, 0xea, + 0x1a, 0x4a, 0xe7, 0xb7, 0x47, 0x17, 0x69, 0x39, 0xc9, 0x99, 0x34, 0x64, 0x94, 0xc4, 0xd3, + 0x83, 0x73, 0x23, 0x8e, 0xde, 0x2e, 0x7e, 0xd2, 0x82, 0x72, 0x22, 0x8f, 0xdf, 0x2f, 0x7f, + 0x68, 0x38, 0xc8, 0x98, 0x35, 0x65, 0x95, 0xc5, 0xbb, 0xeb, 0x1b, 0x4b, 0xe6, 0xb6, 0x46, + 0x16, 0x01, 0x51, 0xa1, 0xf1, 0x5c, 0x0c, 0xfc, 0xac, 0xb9, 0xe9, 0x19, 0x49, 0xe4, 0xb4, + 0x44, 0x14, 0x03, 0x53, 0xa3, 0xf3, 0x5e, 0x0e, 0xfe, 0xae, 0xd0, 0x80, 0x70, 0x20, 0x8d, + 0xdd, 0x2d, 0x7d, 0x6a, 0x3a, 0xca, 0x9a, 0x37, 0x67, 0x97, 0xc7, 0x6b, 0x3b, 0xcb, 0x9b, + 0x36, 0x66, 0x96, 0xc6, 0xd1, 0x81, 0x71, 0x21, 0x8c, 0xdc, 0x2c, 0x7c, 0x02, 0x52, 0xa2, + 0xf2, 0x5f, 0x0f, 0xff, 0xaf, 0xb8, 0xe8, 0x18, 0x48, 0xe5, 0xb5, 0x45, 0x15, 0x6f, 0x3f, + 0xcf, 0x9f, 0x32, 0x62, 0x92, 0xc2, 0xd5, 0x85, 0x75, 0x25, 0x88, 0xd8, 0x28, 0x78, 0x06, + 0x56, 0xa6, 0xf6, 0x5b, 0x0b, 0xfb, 0xab, 0xbc, 0xec, 0x1c, 0x4c, 0xe1, 0xb1, 0x41, 0x11, + 0xbd, 0xed, 0x1d, 0x4d, 0xe0, 0xb0, 0x40, 0x10, 0x07, 0x57, 0xa7, 0xf7, 0x5a, 0x0a, 0xfa, + 0xaa, 0xd4, 0x84, 0x74, 0x24, 0x89, 0xd9, 0x29, 0x79, 0x6e, 0x3e, 0xce, 0x9e, 0x33, 0x63, + 0x93, 0xc3, 0xd6, 0x86, 0x76, 0x26, 0x8b, 0xdb, 0x2b, 0x7b, 0x6c, 0x3c, 0xcc, 0x9c, 0x31, + 0x61, 0x91, 0xc1, 0xbf, 0xef, 0x1f, 0x4f, 0xe2, 0xb2, 0x42, 0x12, 0x05, 0x55, 0xa5, 0xf5, + 0x58, 0x08, 0xf8, 0xa8, 0x04, 0x54, 0xa4, 0xf4, 0x59, 0x09, 0xf9, 0xa9, 0xbe, 0xee, 0x1e, + 0x4e, 0xe3, 0xb3, 0x43, 0x13, 0x6d, 0x3d, 0xcd, 0x9d, 0x30, 0x60, 0x90, 0xc0, 0xd7, 0x87, + 0x77, 0x27, 0x8a, 0xda, 0x2a, 0x7a, 0x00, 0x51, 0xa2, 0xf3, 0x59, 0x08, 0xfb, 0xaa, 0xb2, + 0xe3, 0x10, 0x41, 0xeb, 0xba, 0x49, 0x18, 0x79, 0x28, 0xdb, 0x8a, 0x20, 0x71, 0x82, 0xd3, + 0xcb, 0x9a, 0x69, 0x38, 0x92, 0xc3, 0x30, 0x61, 0xf2, 0xa3, 0x50, 0x01, 0xab, 0xfa, 0x09, + 0x58, 0x40, 0x11, 0xe2, 0xb3, 0x19, 0x48, 0xbb, 0xea, 0x8b, 0xda, 0x29, 0x78, 0xd2, 0x83, + 0x70, 0x21, 0x39, 0x68, 0x9b, 0xca, 0x60, 0x31, 0xc2, 0x93, 0xf9, 0xa8, 0x5b, 0x0a, 0xa0, + 0xf1, 0x02, 0x53, 0x4b, 0x1a, 0xe9, 0xb8, 0x12, 0x43, 0xb0, 0xe1, 0x80, 0xd1, 0x22, 0x73, + 0xd9, 0x88, 0x7b, 0x2a, 0x32, 0x63, 0x90, 0xc1, 0x6b, 0x3a, 0xc9, 0x98, 0x0b, 0x5a, 0xa9, + 0xf8, 0x52, 0x03, 0xf0, 0xa1, 0xb9, 0xe8, 0x1b, 0x4a, 0xe0, 0xb1, 0x42, 0x13, 0x72, 0x23, + 0xd0, 0x81, 0x2b, 0x7a, 0x89, 0xd8, 0xc0, 0x91, 0x62, 0x33, 0x99, 0xc8, 0x3b, 0x6a, 0xef, + 0xbe, 0x4d, 0x1c, 0xb6, 0xe7, 0x14, 0x45, 0x5d, 0x0c, 0xff, 0xae, 0x04, 0x55, 0xa6, 0xf7, + 0x96, 0xc7, 0x34, 0x65, 0xcf, 0x9e, 0x6d, 0x3c, 0x24, 0x75, 0x86, 0xd7, 0x7d, 0x2c, 0xdf, + 0x8e, 0x1d, 0x4c, 0xbf, 0xee, 0x44, 0x15, 0xe6, 0xb7, 0xaf, 0xfe, 0x0d, 0x5c, 0xf6, 0xa7, + 0x54, 0x05, 0x64, 0x35, 0xc6, 0x97, 0x3d, 0x6c, 0x9f, 0xce, 0xd6, 0x87, 0x74, 0x25, 0x8f, + 0xde, 0x2d, 0x7c, 0x16, 0x47, 0xb4, 0xe5, 0x4f, 0x1e, 0xed, 0xbc, 0xa4, 0xf5, 0x06, 0x57, + 0xfd, 0xac, 0x5f, 0x0e, 0x6f, 0x3e, 0xcd, 0x9c, 0x36, 0x67, 0x94, 0xc5, 0xdd, 0x8c, 0x7f, + 0x2e, 0x84, 0xd5, 0x26, 0x77, 0xe4, 0xb5, 0x46, 0x17, 0xbd, 0xec, 0x1f, 0x4e, 0x56, 0x07, + 0xf4, 0xa5, 0x0f, 0x5e, 0xad, 0xfc, 0x9d, 0xcc, 0x3f, 0x6e, 0xc4, 0x95, 0x66, 0x37, 0x2f, + 0x7e, 0x8d, 0xdc, 0x76, 0x27, 0xd4, 0x85, 0x00, 0x52, 0xa4, 0xf6, 0x55, 0x07, 0xf1, 0xa3, + 0xaa, 0xf8, 0x0e, 0x5c, 0xff, 0xad, 0x5b, 0x09, 0x49, 0x1b, 0xed, 0xbf, 0x1c, 0x4e, 0xb8, + 0xea, 0xe3, 0xb1, 0x47, 0x15, 0xb6, 0xe4, 0x12, 0x40, 0x92, 0xc0, 0x36, 0x64, 0xc7, 0x95, + 0x63, 0x31, 0x38, 0x6a, 0x9c, 0xce, 0x6d, 0x3f, 0xc9, 0x9b, 0xdb, 0x89, 0x7f, 0x2d, 0x8e, + 0xdc, 0x2a, 0x78, 0x71, 0x23, 0xd5, 0x87, 0x24, 0x76, 0x80, 0xd2, 0x39, 0x6b, 0x9d, 0xcf, + 0x6c, 0x3e, 0xc8, 0x9a, 0x93, 0xc1, 0x37, 0x65, 0xc6, 0x94, 0x62, 0x30, 0x70, 0x22, 0xd4, + 0x86, 0x25, 0x77, 0x81, 0xd3, 0xda, 0x88, 0x7e, 0x2c, 0x8f, 0xdd, 0x2b, 0x79, 0xab, 0xf9, + 0x0f, 0x5d, 0xfe, 0xac, 0x5a, 0x08, 0x01, 0x53, 0xa5, 0xf7, 0x54, 0x06, 0xf0, 0xa2, 0xe2, + 0xb0, 0x46, 0x14, 0xb7, 0xe5, 0x13, 0x41, 0x48, 0x1a, 0xec, 0xbe, 0x1d, 0x4f, 0xb9, 0xeb, + 0x72, 0x20, 0xd6, 0x84, 0x27, 0x75, 0x83, 0xd1, 0xd8, 0x8a, 0x7c, 0x2e, 0x8d, 0xdf, 0x29, + 0x7b, 0x3b, 0x69, 0x9f, 0xcd, 0x6e, 0x3c, 0xca, 0x98, 0x91, 0xc3, 0x35, 0x67, 0xc4, 0x96, + 0x60, 0x32, 0xe0, 0xb2, 0x44, 0x16, 0xb5, 0xe7, 0x11, 0x43, 0x4a, 0x18, 0xee, 0xbc, 0x1f, + 0x4d, 0xbb, 0xe9, 0xa9, 0xfb, 0x0d, 0x5f, 0xfc, 0xae, 0x58, 0x0a, 0x03, 0x51, 0xa7, 0xf5, + 0x56, 0x04, 0xf2, 0xa0, 0x4b, 0x19, 0xef, 0xbd, 0x1e, 0x4c, 0xba, 0xe8, 0xe1, 0xb3, 0x45, + 0x17, 0xb4, 0xe6, 0x10, 0x42, 0x02, 0x50, 0xa6, 0xf4, 0x57, 0x05, 0xf3, 0xa1, 0xa8, 0xfa, + 0x0c, 0x5e, 0xfd, 0xaf, 0x59, 0x0b, 0xd9, 0x8b, 0x7d, 0x2f, 0x8c, 0xde, 0x28, 0x7a, 0x73, + 0x21, 0xd7, 0x85, 0x26, 0x74, 0x82, 0xd0, 0x90, 0xc2, 0x34, 0x66, 0xc5, 0x97, 0x61, 0x33, + 0x3a, 0x68, 0x9e, 0xcc, 0x6f, 0x3d, 0xcb, 0x99, 0x00, 0x53, 0xa6, 0xf5, 0x51, 0x02, 0xf7, + 0xa4, 0xa2, 0xf1, 0x04, 0x57, 0xf3, 0xa0, 0x55, 0x06, 0x59, 0x0a, 0xff, 0xac, 0x08, 0x5b, + 0xae, 0xfd, 0xfb, 0xa8, 0x5d, 0x0e, 0xaa, 0xf9, 0x0c, 0x5f, 0xb2, 0xe1, 0x14, 0x47, 0xe3, + 0xb0, 0x45, 0x16, 0x10, 0x43, 0xb6, 0xe5, 0x41, 0x12, 0xe7, 0xb4, 0xeb, 0xb8, 0x4d, 0x1e, + 0xba, 0xe9, 0x1c, 0x4f, 0x49, 0x1a, 0xef, 0xbc, 0x18, 0x4b, 0xbe, 0xed, 0x79, 0x2a, 0xdf, + 0x8c, 0x28, 0x7b, 0x8e, 0xdd, 0xdb, 0x88, 0x7d, 0x2e, 0x8a, 0xd9, 0x2c, 0x7f, 0x20, 0x73, + 0x86, 0xd5, 0x71, 0x22, 0xd7, 0x84, 0x82, 0xd1, 0x24, 0x77, 0xd3, 0x80, 0x75, 0x26, 0xcb, + 0x98, 0x6d, 0x3e, 0x9a, 0xc9, 0x3c, 0x6f, 0x69, 0x3a, 0xcf, 0x9c, 0x38, 0x6b, 0x9e, 0xcd, + 0x92, 0xc1, 0x34, 0x67, 0xc3, 0x90, 0x65, 0x36, 0x30, 0x63, 0x96, 0xc5, 0x61, 0x32, 0xc7, + 0x94, 0xf2, 0xa1, 0x54, 0x07, 0xa3, 0xf0, 0x05, 0x56, 0x50, 0x03, 0xf6, 0xa5, 0x01, 0x52, + 0xa7, 0xf4, 0xab, 0xf8, 0x0d, 0x5e, 0xfa, 0xa9, 0x5c, 0x0f, 0x09, 0x5a, 0xaf, 0xfc, 0x58, + 0x0b, 0xfe, 0xad, 0x40, 0x13, 0xe6, 0xb5, 0x11, 0x42, 0xb7, 0xe4, 0xe2, 0xb1, 0x44, 0x17, + 0xb3, 0xe0, 0x15, 0x46, 0x19, 0x4a, 0xbf, 0xec, 0x48, 0x1b, 0xee, 0xbd, 0xbb, 0xe8, 0x1d, + 0x4e, 0xea, 0xb9, 0x4c, 0x1f, 0x8b, 0xd8, 0x2d, 0x7e, 0xda, 0x89, 0x7c, 0x2f, 0x29, 0x7a, + 0x8f, 0xdc, 0x78, 0x2b, 0xde, 0x8d, 0xd2, 0x81, 0x74, 0x27, 0x83, 0xd0, 0x25, 0x76, 0x70, + 0x23, 0xd6, 0x85, 0x21, 0x72, 0x87, 0xd4, 0x39, 0x6a, 0x9f, 0xcc, 0x68, 0x3b, 0xce, 0x9d, + 0x9b, 0xc8, 0x3d, 0x6e, 0xca, 0x99, 0x6c, 0x3f, 0x60, 0x33, 0xc6, 0x95, 0x31, 0x62, 0x97, + 0xc4, 0xc2, 0x91, 0x64, 0x37, 0x93, 0xc0, 0x35, 0x66, 0x00, 0x54, 0xa8, 0xfc, 0x4d, 0x19, + 0xe5, 0xb1, 0x9a, 0xce, 0x32, 0x66, 0xd7, 0x83, 0x7f, 0x2b, 0x29, 0x7d, 0x81, 0xd5, 0x64, + 0x30, 0xcc, 0x98, 0xb3, 0xe7, 0x1b, 0x4f, 0xfe, 0xaa, 0x56, 0x02, 0x52, 0x06, 0xfa, 0xae, + 0x1f, 0x4b, 0xb7, 0xe3, 0xc8, 0x9c, 0x60, 0x34, 0x85, 0xd1, 0x2d, 0x79, 0x7b, 0x2f, 0xd3, + 0x87, 0x36, 0x62, 0x9e, 0xca, 0xe1, 0xb5, 0x49, 0x1d, 0xac, 0xf8, 0x04, 0x50, 0xa4, 0xf0, + 0x0c, 0x58, 0xe9, 0xbd, 0x41, 0x15, 0x3e, 0x6a, 0x96, 0xc2, 0x73, 0x27, 0xdb, 0x8f, 0x8d, + 0xd9, 0x25, 0x71, 0xc0, 0x94, 0x68, 0x3c, 0x17, 0x43, 0xbf, 0xeb, 0x5a, 0x0e, 0xf2, 0xa6, + 0xf6, 0xa2, 0x5e, 0x0a, 0xbb, 0xef, 0x13, 0x47, 0x6c, 0x38, 0xc4, 0x90, 0x21, 0x75, 0x89, + 0xdd, 0xdf, 0x8b, 0x77, 0x23, 0x92, 0xc6, 0x3a, 0x6e, 0x45, 0x11, 0xed, 0xb9, 0x08, 0x5c, + 0xa0, 0xf4, 0x55, 0x01, 0xfd, 0xa9, 0x18, 0x4c, 0xb0, 0xe4, 0xcf, 0x9b, 0x67, 0x33, 0x82, + 0xd6, 0x2a, 0x7e, 0x7c, 0x28, 0xd4, 0x80, 0x31, 0x65, 0x99, 0xcd, 0xe6, 0xb2, 0x4e, 0x1a, + 0xab, 0xff, 0x03, 0x57, 0x07, 0x53, 0xaf, 0xfb, 0x4a, 0x1e, 0xe2, 0xb6, 0x9d, 0xc9, 0x35, + 0x61, 0xd0, 0x84, 0x78, 0x2c, 0x2e, 0x7a, 0x86, 0xd2, 0x63, 0x37, 0xcb, 0x9f, 0xb4, 0xe0, + 0x1c, 0x48, 0xf9, 0xad, 0x51, 0x05, 0xf1, 0xa5, 0x59, 0x0d, 0xbc, 0xe8, 0x14, 0x40, 0x6b, + 0x3f, 0xc3, 0x97, 0x26, 0x72, 0x8e, 0xda, 0xd8, 0x8c, 0x70, 0x24, 0x95, 0xc1, 0x3d, 0x69, + 0x42, 0x16, 0xea, 0xbe, 0x0f, 0x5b, 0xa7, 0xf3, 0xa3, 0xf7, 0x0b, 0x5f, 0xee, 0xba, 0x46, + 0x12, 0x39, 0x6d, 0x91, 0xc5, 0x74, 0x20, 0xdc, 0x88, 0x8a, 0xde, 0x22, 0x76, 0xc7, 0x93, + 0x6f, 0x3b, 0x10, 0x44, 0xb8, 0xec, 0x5d, 0x09, 0xf5, 0xa1, 0x00, 0x55, 0xaa, 0xff, 0x49, + 0x1c, 0xe3, 0xb6, 0x92, 0xc7, 0x38, 0x6d, 0xdb, 0x8e, 0x71, 0x24, 0x39, 0x6c, 0x93, 0xc6, + 0x70, 0x25, 0xda, 0x8f, 0xab, 0xfe, 0x01, 0x54, 0xe2, 0xb7, 0x48, 0x1d, 0x72, 0x27, 0xd8, + 0x8d, 0x3b, 0x6e, 0x91, 0xc4, 0xe0, 0xb5, 0x4a, 0x1f, 0xa9, 0xfc, 0x03, 0x56, 0x4b, 0x1e, + 0xe1, 0xb4, 0x02, 0x57, 0xa8, 0xfd, 0xd9, 0x8c, 0x73, 0x26, 0x90, 0xc5, 0x3a, 0x6f, 0xe4, + 0xb1, 0x4e, 0x1b, 0xad, 0xf8, 0x07, 0x52, 0x76, 0x23, 0xdc, 0x89, 0x3f, 0x6a, 0x95, 0xc0, + 0xdd, 0x88, 0x77, 0x22, 0x94, 0xc1, 0x3e, 0x6b, 0x4f, 0x1a, 0xe5, 0xb0, 0x06, 0x53, 0xac, + 0xf9, 0x96, 0xc3, 0x3c, 0x69, 0xdf, 0x8a, 0x75, 0x20, 0x04, 0x51, 0xae, 0xfb, 0x4d, 0x18, + 0xe7, 0xb2, 0xaf, 0xfa, 0x05, 0x50, 0xe6, 0xb3, 0x4c, 0x19, 0x3d, 0x68, 0x97, 0xc2, 0x74, + 0x21, 0xde, 0x8b, 0xd5, 0x80, 0x7f, 0x2a, 0x9c, 0xc9, 0x36, 0x63, 0x47, 0x12, 0xed, 0xb8, + 0x0e, 0x5b, 0xa4, 0xf1, 0xec, 0xb9, 0x46, 0x13, 0xa5, 0xf0, 0x0f, 0x5a, 0x7e, 0x2b, 0xd4, + 0x81, 0x37, 0x62, 0x9d, 0xc8, 0xa7, 0xf2, 0x0d, 0x58, 0xee, 0xbb, 0x44, 0x11, 0x35, 0x60, + 0x9f, 0xca, 0x7c, 0x29, 0xd6, 0x83, 0x9e, 0xcb, 0x34, 0x61, 0xd7, 0x82, 0x7d, 0x28, 0x0c, + 0x59, 0xa6, 0xf3, 0x45, 0x10, 0xef, 0xba, 0x31, 0x64, 0x9b, 0xce, 0x78, 0x2d, 0xd2, 0x87, + 0xa3, 0xf6, 0x09, 0x5c, 0xea, 0xbf, 0x40, 0x15, 0x08, 0x5d, 0xa2, 0xf7, 0x41, 0x14, 0xeb, + 0xbe, 0x9a, 0xcf, 0x30, 0x65, 0xd3, 0x86, 0x79, 0x2c, 0x43, 0x16, 0xe9, 0xbc, 0x0a, 0x5f, + 0xa0, 0xf5, 0xd1, 0x84, 0x7b, 0x2e, 0x98, 0xcd, 0x32, 0x67, 0x7a, 0x2f, 0xd0, 0x85, 0x33, + 0x66, 0x99, 0xcc, 0xe8, 0xbd, 0x42, 0x17, 0xa1, 0xf4, 0x0b, 0x5e, 0x00, 0x56, 0xac, 0xfa, + 0x45, 0x13, 0xe9, 0xbf, 0x8a, 0xdc, 0x26, 0x70, 0xcf, 0x99, 0x63, 0x35, 0x09, 0x5f, 0xa5, + 0xf3, 0x4c, 0x1a, 0xe0, 0xb6, 0x83, 0xd5, 0x2f, 0x79, 0xc6, 0x90, 0x6a, 0x3c, 0x12, 0x44, + 0xbe, 0xe8, 0x57, 0x01, 0xfb, 0xad, 0x98, 0xce, 0x34, 0x62, 0xdd, 0x8b, 0x71, 0x27, 0x1b, + 0x4d, 0xb7, 0xe1, 0x5e, 0x08, 0xf2, 0xa4, 0x91, 0xc7, 0x3d, 0x6b, 0xd4, 0x82, 0x78, 0x2e, + 0x24, 0x72, 0x88, 0xde, 0x61, 0x37, 0xcd, 0x9b, 0xae, 0xf8, 0x02, 0x54, 0xeb, 0xbd, 0x47, + 0x11, 0x2d, 0x7b, 0x81, 0xd7, 0x68, 0x3e, 0xc4, 0x92, 0xa7, 0xf1, 0x0b, 0x5d, 0xe2, 0xb4, + 0x4e, 0x18, 0x36, 0x60, 0x9a, 0xcc, 0x73, 0x25, 0xdf, 0x89, 0xbc, 0xea, 0x10, 0x46, 0xf9, + 0xaf, 0x55, 0x03, 0x3f, 0x69, 0x93, 0xc5, 0x7a, 0x2c, 0xd6, 0x80, 0xb5, 0xe3, 0x19, 0x4f, + 0xf0, 0xa6, 0x5c, 0x0a, 0x48, 0x1e, 0xe4, 0xb2, 0x0d, 0x5b, 0xa1, 0xf7, 0xc2, 0x94, 0x6e, + 0x38, 0x87, 0xd1, 0x2b, 0x7d, 0x41, 0x17, 0xed, 0xbb, 0x04, 0x52, 0xa8, 0xfe, 0xcb, 0x9d, + 0x67, 0x31, 0x8e, 0xd8, 0x22, 0x74, 0x5a, 0x0c, 0xf6, 0xa0, 0x1f, 0x49, 0xb3, 0xe5, 0xd0, + 0x86, 0x7c, 0x2a, 0x95, 0xc3, 0x39, 0x6f, 0x53, 0x05, 0xff, 0xa9, 0x16, 0x40, 0xba, 0xec, + 0xd9, 0x8f, 0x75, 0x23, 0x9c, 0xca, 0x30, 0x66, 0x6c, 0x3a, 0xc0, 0x96, 0x29, 0x7f, 0x85, + 0xd3, 0xe6, 0xb0, 0x4a, 0x1c, 0xa3, 0xf5, 0x0f, 0x59, 0x65, 0x33, 0xc9, 0x9f, 0x20, 0x76, + 0x8c, 0xda, 0xef, 0xb9, 0x43, 0x15, 0xaa, 0xfc, 0x06, 0x50, 0x7e, 0x28, 0xd2, 0x84, 0x3b, + 0x6d, 0x97, 0xc1, 0xf4, 0xa2, 0x58, 0x0e, 0xb1, 0xe7, 0x1d, 0x4b, 0x77, 0x21, 0xdb, 0x8d, + 0x32, 0x64, 0x9e, 0xc8, 0xfd, 0xab, 0x51, 0x07, 0xb8, 0xee, 0x14, 0x42, 0x00, 0x57, 0xae, + 0xf9, 0x41, 0x16, 0xef, 0xb8, 0x82, 0xd5, 0x2c, 0x7b, 0xc3, 0x94, 0x6d, 0x3a, 0x19, 0x4e, + 0xb7, 0xe0, 0x58, 0x0f, 0xf6, 0xa1, 0x9b, 0xcc, 0x35, 0x62, 0xda, 0x8d, 0x74, 0x23, 0x32, + 0x65, 0x9c, 0xcb, 0x73, 0x24, 0xdd, 0x8a, 0xb0, 0xe7, 0x1e, 0x49, 0xf1, 0xa6, 0x5f, 0x08, + 0x2b, 0x7c, 0x85, 0xd2, 0x6a, 0x3d, 0xc4, 0x93, 0xa9, 0xfe, 0x07, 0x50, 0xe8, 0xbf, 0x46, + 0x11, 0x64, 0x33, 0xca, 0x9d, 0x25, 0x72, 0x8b, 0xdc, 0xe6, 0xb1, 0x48, 0x1f, 0xa7, 0xf0, + 0x09, 0x5e, 0x7d, 0x2a, 0xd3, 0x84, 0x3c, 0x6b, 0x92, 0xc5, 0xff, 0xa8, 0x51, 0x06, 0xbe, + 0xe9, 0x10, 0x47, 0x56, 0x01, 0xf8, 0xaf, 0x17, 0x40, 0xb9, 0xee, 0xd4, 0x83, 0x7a, 0x2d, + 0x95, 0xc2, 0x3b, 0x6c, 0x4f, 0x18, 0xe1, 0xb6, 0x0e, 0x59, 0xa0, 0xf7, 0xcd, 0x9a, 0x63, + 0x34, 0x8c, 0xdb, 0x22, 0x75, 0xc8, 0x9f, 0x66, 0x31, 0x89, 0xde, 0x27, 0x70, 0x4a, 0x1d, + 0xe4, 0xb3, 0x0b, 0x5c, 0xa5, 0xf2, 0xd1, 0x86, 0x7f, 0x28, 0x90, 0xc7, 0x3e, 0x69, 0x53, + 0x04, 0xfd, 0xaa, 0x12, 0x45, 0xbc, 0xeb, 0xfa, 0xad, 0x54, 0x03, 0xbb, 0xec, 0x15, 0x42, + 0x78, 0x2f, 0xd6, 0x81, 0x39, 0x6e, 0x97, 0xc0, 0xe3, 0xb4, 0x4d, 0x1a, 0xa2, 0xf5, 0x0c, + 0x5b, 0x61, 0x36, 0xcf, 0x98, 0x20, 0x77, 0x8e, 0xd9, 0xac, 0xfb, 0x02, 0x55, 0xed, 0xba, + 0x43, 0x14, 0x2e, 0x79, 0x80, 0xd7, 0x6f, 0x38, 0xc1, 0x96, 0xb5, 0xe2, 0x1b, 0x4c, 0xf4, + 0xa3, 0x5a, 0x0d, 0x37, 0x60, 0x99, 0xce, 0x76, 0x21, 0xd8, 0x8f, 0x9e, 0xc9, 0x30, 0x67, + 0xdf, 0x88, 0x71, 0x26, 0x1c, 0x4b, 0xb2, 0xe5, 0x5d, 0x0a, 0xf3, 0xa4, 0x87, 0xd0, 0x29, + 0x7e, 0xc6, 0x91, 0x68, 0x3f, 0x05, 0x52, 0xab, 0xfc, 0x44, 0x13, 0xea, 0xbd, 0x00, 0x58, + 0xb0, 0xe8, 0x7d, 0x25, 0xcd, 0x95, 0xfa, 0xa2, 0x4a, 0x12, 0x87, 0xdf, 0x37, 0x6f, 0xe9, + 0xb1, 0x59, 0x01, 0x94, 0xcc, 0x24, 0x7c, 0x13, 0x4b, 0xa3, 0xfb, 0x6e, 0x36, 0xde, 0x86, + 0xcf, 0x97, 0x7f, 0x27, 0xb2, 0xea, 0x02, 0x5a, 0x35, 0x6d, 0x85, 0xdd, 0x48, 0x10, 0xf8, + 0xa0, 0x26, 0x7e, 0x96, 0xce, 0x5b, 0x03, 0xeb, 0xb3, 0xdc, 0x84, 0x6c, 0x34, 0xa1, 0xf9, + 0x11, 0x49, 0x83, 0xdb, 0x33, 0x6b, 0xfe, 0xa6, 0x4e, 0x16, 0x79, 0x21, 0xc9, 0x91, 0x04, + 0x5c, 0xb4, 0xec, 0x6a, 0x32, 0xda, 0x82, 0x17, 0x4f, 0xa7, 0xff, 0x90, 0xc8, 0x20, 0x78, + 0xed, 0xb5, 0x5d, 0x05, 0x4c, 0x14, 0xfc, 0xa4, 0x31, 0x69, 0x81, 0xd9, 0xb6, 0xee, 0x06, + 0x5e, 0xcb, 0x93, 0x7b, 0x23, 0xa5, 0xfd, 0x15, 0x4d, 0xd8, 0x80, 0x68, 0x30, 0x5f, 0x07, + 0xef, 0xb7, 0x22, 0x7a, 0x92, 0xca, 0x1b, 0x43, 0xab, 0xf3, 0x66, 0x3e, 0xd6, 0x8e, 0xe1, + 0xb9, 0x51, 0x09, 0x9c, 0xc4, 0x2c, 0x74, 0xf2, 0xaa, 0x42, 0x1a, 0x8f, 0xd7, 0x3f, 0x67, + 0x08, 0x50, 0xb8, 0xe0, 0x75, 0x2d, 0xc5, 0x9d, 0xd4, 0x8c, 0x64, 0x3c, 0xa9, 0xf1, 0x19, + 0x41, 0x2e, 0x76, 0x9e, 0xc6, 0x53, 0x0b, 0xe3, 0xbb, 0x3d, 0x65, 0x8d, 0xd5, 0x40, 0x18, + 0xf0, 0xa8, 0xc7, 0x9f, 0x77, 0x2f, 0xba, 0xe2, 0x0a, 0x52, 0x98, 0xc0, 0x28, 0x70, 0xe5, + 0xbd, 0x55, 0x0d, 0x62, 0x3a, 0xd2, 0x8a, 0x1f, 0x47, 0xaf, 0xf7, 0x71, 0x29, 0xc1, 0x99, + 0x0c, 0x54, 0xbc, 0xe4, 0x8b, 0xd3, 0x3b, 0x63, 0xf6, 0xae, 0x46, 0x1e, 0x57, 0x0f, 0xe7, + 0xbf, 0x2a, 0x72, 0x9a, 0xc2, 0xad, 0xf5, 0x1d, 0x45, 0xd0, 0x88, 0x60, 0x38, 0xbe, 0xe6, + 0x0e, 0x56, 0xc3, 0x9b, 0x73, 0x2b, 0x44, 0x1c, 0xf4, 0xac, 0x39, 0x61, 0x89, 0xd1, 0x00, + 0x59, 0xb2, 0xeb, 0x79, 0x20, 0xcb, 0x92, 0xf2, 0xab, 0x40, 0x19, 0x8b, 0xd2, 0x39, 0x60, + 0xf9, 0xa0, 0x4b, 0x12, 0x80, 0xd9, 0x32, 0x6b, 0x0b, 0x52, 0xb9, 0xe0, 0x72, 0x2b, 0xc0, + 0x99, 0xef, 0xb6, 0x5d, 0x04, 0x96, 0xcf, 0x24, 0x7d, 0x1d, 0x44, 0xaf, 0xf6, 0x64, 0x3d, + 0xd6, 0x8f, 0x16, 0x4f, 0xa4, 0xfd, 0x6f, 0x36, 0xdd, 0x84, 0xe4, 0xbd, 0x56, 0x0f, 0x9d, + 0xc4, 0x2f, 0x76, 0xc3, 0x9a, 0x71, 0x28, 0xba, 0xe3, 0x08, 0x51, 0x31, 0x68, 0x83, 0xda, + 0x48, 0x11, 0xfa, 0xa3, 0x3a, 0x63, 0x88, 0xd1, 0x43, 0x1a, 0xf1, 0xa8, 0xc8, 0x91, 0x7a, + 0x23, 0xb1, 0xe8, 0x03, 0x5a, 0x2c, 0x75, 0x9e, 0xc7, 0x55, 0x0c, 0xe7, 0xbe, 0xde, 0x87, + 0x6c, 0x35, 0xa7, 0xfe, 0x15, 0x4c, 0xd5, 0x8c, 0x67, 0x3e, 0xac, 0xf5, 0x1e, 0x47, 0x27, + 0x7e, 0x95, 0xcc, 0x5e, 0x07, 0xec, 0xb5, 0x9b, 0xc2, 0x29, 0x70, 0xe2, 0xbb, 0x50, 0x09, + 0x69, 0x30, 0xdb, 0x82, 0x10, 0x49, 0xa2, 0xfb, 0x62, 0x3b, 0xd0, 0x89, 0x1b, 0x42, 0xa9, + 0xf0, 0x90, 0xc9, 0x22, 0x7b, 0xe9, 0xb0, 0x5b, 0x02, 0x74, 0x2d, 0xc6, 0x9f, 0x0d, 0x54, + 0xbf, 0xe6, 0x86, 0xdf, 0x34, 0x6d, 0xff, 0xa6, 0x4d, 0x14, 0x8d, 0xd4, 0x3f, 0x66, 0xf4, + 0xad, 0x46, 0x1f, 0x7f, 0x26, 0xcd, 0x94, 0x06, 0x5f, 0xb4, 0xed, 0x58, 0x01, 0xea, 0xb3, + 0x21, 0x78, 0x93, 0xca, 0xaa, 0xf3, 0x18, 0x41, 0xd3, 0x8a, 0x61, 0x38, 0xa1, 0xf8, 0x13, + 0x4a, 0xd8, 0x81, 0x6a, 0x33, 0x53, 0x0a, 0xe1, 0xb8, 0x2a, 0x73, 0x98, 0xc1, 0xb7, 0xee, + 0x05, 0x5c, 0xce, 0x97, 0x7c, 0x25, 0x45, 0x1c, 0xf7, 0xae, 0x3c, 0x65, 0x8e, 0xd7, 0x4e, + 0x17, 0xfc, 0xa5, 0x37, 0x6e, 0x85, 0xdc, 0xbc, 0xe5, 0x0e, 0x57, 0xc5, 0x9c, 0x77, 0x2e, + 0x00, 0x5a, 0xb4, 0xee, 0x75, 0x2f, 0xc1, 0x9b, 0xea, 0xb0, 0x5e, 0x04, 0x9f, 0xc5, 0x2b, + 0x71, 0xc9, 0x93, 0x7d, 0x27, 0xbc, 0xe6, 0x08, 0x52, 0x23, 0x79, 0x97, 0xcd, 0x56, 0x0c, + 0xe2, 0xb8, 0x8f, 0xd5, 0x3b, 0x61, 0xfa, 0xa0, 0x4e, 0x14, 0x65, 0x3f, 0xd1, 0x8b, 0x10, + 0x4a, 0xa4, 0xfe, 0x46, 0x1c, 0xf2, 0xa8, 0x33, 0x69, 0x87, 0xdd, 0xac, 0xf6, 0x18, 0x42, + 0xd9, 0x83, 0x6d, 0x37, 0x03, 0x59, 0xb7, 0xed, 0x76, 0x2c, 0xc2, 0x98, 0xe9, 0xb3, 0x5d, + 0x07, 0x9c, 0xc6, 0x28, 0x72, 0xca, 0x90, 0x7e, 0x24, 0xbf, 0xe5, 0x0b, 0x51, 0x20, 0x7a, + 0x94, 0xce, 0x55, 0x0f, 0xe1, 0xbb, 0x8c, 0xd6, 0x38, 0x62, 0xf9, 0xa3, 0x4d, 0x17, 0x66, + 0x3c, 0xd2, 0x88, 0x13, 0x49, 0xa7, 0xfd, 0x45, 0x1f, 0xf1, 0xab, 0x30, 0x6a, 0x84, 0xde, + 0xaf, 0xf5, 0x1b, 0x41, 0xda, 0x80, 0x6e, 0x34, 0x06, 0x5c, 0xb2, 0xe8, 0x73, 0x29, 0xc7, + 0x9d, 0xec, 0xb6, 0x58, 0x02, 0x99, 0xc3, 0x2d, 0x77, 0xcf, 0x95, 0x7b, 0x21, 0xba, 0xe0, + 0x0e, 0x54, 0x25, 0x7f, 0x91, 0xcb, 0x50, 0x0a, 0xe4, 0xbe, 0x89, 0xd3, 0x3d, 0x67, 0xfc, + 0xa6, 0x48, 0x12, 0x63, 0x39, 0xd7, 0x8d, 0x16, 0x4c, 0xa2, 0xf8, 0x40, 0x1a, 0xf4, 0xae, + 0x35, 0x6f, 0x81, 0xdb, 0xaa, 0xf0, 0x1e, 0x44, 0xdf, 0x85, 0x6b, 0x31, 0x05, 0x5f, 0xb1, + 0xeb, 0x70, 0x2a, 0xc4, 0x9e, 0xef, 0xb5, 0x5b, 0x01, 0x9a, 0xc0, 0x2e, 0x74, 0xcc, 0x96, + 0x78, 0x22, 0xb9, 0xe3, 0x0d, 0x57, 0x26, 0x7c, 0x92, 0xc8, 0x53, 0x09, 0xe7, 0xbd, 0x8a, + 0xd0, 0x3e, 0x64, 0xff, 0xa5, 0x4b, 0x11, 0x60, 0x3a, 0xd4, 0x8e, 0x15, 0x4f, 0xa1, 0xfb, + 0x43, 0x19, 0xf7, 0xad, 0x36, 0x6c, 0x82, 0xd8, 0xa9, 0xf3, 0x1d, 0x47, 0xdc, 0x86, 0x68, + 0x32, 0x00, 0x5b, 0xb6, 0xed, 0x71, 0x2a, 0xc7, 0x9c, 0xe2, 0xb9, 0x54, 0x0f, 0x93, 0xc8, + 0x25, 0x7e, 0xd9, 0x82, 0x6f, 0x34, 0xa8, 0xf3, 0x1e, 0x45, 0x3b, 0x60, 0x8d, 0xd6, 0x4a, + 0x11, 0xfc, 0xa7, 0xaf, 0xf4, 0x19, 0x42, 0xde, 0x85, 0x68, 0x33, 0x4d, 0x16, 0xfb, 0xa0, + 0x3c, 0x67, 0x8a, 0xd1, 0x76, 0x2d, 0xc0, 0x9b, 0x07, 0x5c, 0xb1, 0xea, 0x94, 0xcf, 0x22, + 0x79, 0xe5, 0xbe, 0x53, 0x08, 0x43, 0x18, 0xf5, 0xae, 0x32, 0x69, 0x84, 0xdf, 0xa1, 0xfa, + 0x17, 0x4c, 0xd0, 0x8b, 0x66, 0x3d, 0x9a, 0xc1, 0x2c, 0x77, 0xeb, 0xb0, 0x5d, 0x06, 0x78, + 0x23, 0xce, 0x95, 0x09, 0x52, 0xbf, 0xe4, 0xec, 0xb7, 0x5a, 0x01, 0x9d, 0xc6, 0x2b, 0x70, + 0x0e, 0x55, 0xb8, 0xe3, 0x7f, 0x24, 0xc9, 0x92, 0x35, 0x6e, 0x83, 0xd8, 0x44, 0x1f, 0xf2, + 0xa9, 0xd7, 0x8c, 0x61, 0x3a, 0xa6, 0xfd, 0x10, 0x4b, 0x86, 0xdd, 0x30, 0x6b, 0xf7, 0xac, + 0x41, 0x1a, 0x64, 0x3f, 0xd2, 0x89, 0x15, 0x4e, 0xa3, 0xf8, 0x5f, 0x04, 0xe9, 0xb2, 0x2e, + 0x75, 0x98, 0xc3, 0xbd, 0xe6, 0x0b, 0x50, 0xcc, 0x97, 0x7a, 0x21, 0x29, 0x72, 0x9f, 0xc4, + 0x58, 0x03, 0xee, 0xb5, 0xcb, 0x90, 0x7d, 0x26, 0xba, 0xe1, 0x0c, 0x57, 0xf0, 0xab, 0x46, + 0x1d, 0x81, 0xda, 0x37, 0x6c, 0x12, 0x49, 0xa4, 0xff, 0x63, 0x38, 0xd5, 0x8e, 0xc5, 0x9e, + 0x73, 0x28, 0xb4, 0xef, 0x02, 0x59, 0x27, 0x7c, 0x91, 0xca, 0x56, 0x0d, 0xe0, 0xbb, 0x1c, + 0x47, 0xaa, 0xf1, 0x6d, 0x36, 0xdb, 0x80, 0xfe, 0xa5, 0x48, 0x13, 0x8f, 0xd4, 0x39, 0x62, + 0x6a, 0x31, 0xdc, 0x87, 0x1b, 0x40, 0xad, 0xf6, 0x88, 0xd3, 0x3e, 0x65, 0xf9, 0xa2, 0x4f, + 0x14, 0xb3, 0xe8, 0x05, 0x5e, 0xc2, 0x99, 0x74, 0x2f, 0x51, 0x0a, 0xe7, 0xbc, 0x20, 0x7b, + 0x96, 0xcd, 0x00, 0x5c, 0xb8, 0xe4, 0x6d, 0x31, 0xd5, 0x89, 0xda, 0x86, 0x62, 0x3e, 0xb7, + 0xeb, 0x0f, 0x53, 0xa9, 0xf5, 0x11, 0x4d, 0xc4, 0x98, 0x7c, 0x20, 0x73, 0x2f, 0xcb, 0x97, + 0x1e, 0x42, 0xa6, 0xfa, 0x4f, 0x13, 0xf7, 0xab, 0x22, 0x7e, 0x9a, 0xc6, 0x95, 0xc9, 0x2d, + 0x71, 0xf8, 0xa4, 0x40, 0x1c, 0xe6, 0xba, 0x5e, 0x02, 0x8b, 0xd7, 0x33, 0x6f, 0x3c, 0x60, + 0x84, 0xd8, 0x51, 0x0d, 0xe9, 0xb5, 0x9e, 0xc2, 0x26, 0x7a, 0xf3, 0xaf, 0x4b, 0x17, 0x44, + 0x18, 0xfc, 0xa0, 0x29, 0x75, 0x91, 0xcd, 0x37, 0x6b, 0x8f, 0xd3, 0x5a, 0x06, 0xe2, 0xbe, + 0xed, 0xb1, 0x55, 0x09, 0x80, 0xdc, 0x38, 0x64, 0xd1, 0x8d, 0x69, 0x35, 0xbc, 0xe0, 0x04, + 0x58, 0x0b, 0x57, 0xb3, 0xef, 0x66, 0x3a, 0xde, 0x82, 0x78, 0x24, 0xc0, 0x9c, 0x15, 0x49, + 0xad, 0xf1, 0xa2, 0xfe, 0x1a, 0x46, 0xcf, 0x93, 0x77, 0x2b, 0x21, 0x7d, 0x99, 0xc5, 0x4c, + 0x10, 0xf4, 0xa8, 0xfb, 0xa7, 0x43, 0x1f, 0x96, 0xca, 0x2e, 0x72, 0x88, 0xd4, 0x30, 0x6c, + 0xe5, 0xb9, 0x5d, 0x01, 0x52, 0x0e, 0xea, 0xb6, 0x3f, 0x63, 0x87, 0xdb, 0x6e, 0x32, 0xd6, + 0x8a, 0x03, 0x5f, 0xbb, 0xe7, 0xb4, 0xe8, 0x0c, 0x50, 0xd9, 0x85, 0x61, 0x3d, 0xc7, 0x9b, + 0x7f, 0x23, 0xaa, 0xf6, 0x12, 0x4e, 0x1d, 0x41, 0xa5, 0xf9, 0x70, 0x2c, 0xc8, 0x94, 0xbf, + 0xe3, 0x07, 0x5b, 0xd2, 0x8e, 0x6a, 0x36, 0x65, 0x39, 0xdd, 0x81, 0x08, 0x54, 0xb0, 0xec, + 0x16, 0x4a, 0xae, 0xf2, 0x7b, 0x27, 0xc3, 0x9f, 0xcc, 0x90, 0x74, 0x28, 0xa1, 0xfd, 0x19, + 0x45, 0xf0, 0xac, 0x48, 0x14, 0x9d, 0xc1, 0x25, 0x79, 0x2a, 0x76, 0x92, 0xce, 0x47, 0x1b, + 0xff, 0xa3, 0x59, 0x05, 0xe1, 0xbd, 0x34, 0x68, 0x8c, 0xd0, 0x83, 0xdf, 0x3b, 0x67, 0xee, + 0xb2, 0x56, 0x0a, 0x00, 0x5d, 0xba, 0xe7, 0x69, 0x34, 0xd3, 0x8e, 0xd2, 0x8f, 0x68, 0x35, + 0xbb, 0xe6, 0x01, 0x5c, 0xb9, 0xe4, 0x03, 0x5e, 0xd0, 0x8d, 0x6a, 0x37, 0x6b, 0x36, 0xd1, + 0x8c, 0x02, 0x5f, 0xb8, 0xe5, 0x6f, 0x32, 0xd5, 0x88, 0x06, 0x5b, 0xbc, 0xe1, 0xbd, 0xe0, + 0x07, 0x5a, 0xd4, 0x89, 0x6e, 0x33, 0xd6, 0x8b, 0x6c, 0x31, 0xbf, 0xe2, 0x05, 0x58, 0x04, + 0x59, 0xbe, 0xe3, 0x6d, 0x30, 0xd7, 0x8a, 0xde, 0x83, 0x64, 0x39, 0xb7, 0xea, 0x0d, 0x50, + 0x0c, 0x51, 0xb6, 0xeb, 0x65, 0x38, 0xdf, 0x82, 0x67, 0x3a, 0xdd, 0x80, 0x0e, 0x53, 0xb4, + 0xe9, 0xb5, 0xe8, 0x0f, 0x52, 0xdc, 0x81, 0x66, 0x3b, 0xb1, 0xec, 0x0b, 0x56, 0xd8, 0x85, + 0x62, 0x3f, 0x63, 0x3e, 0xd9, 0x84, 0x0a, 0x57, 0xb0, 0xed, 0x08, 0x55, 0xb2, 0xef, 0x61, + 0x3c, 0xdb, 0x86, 0xda, 0x87, 0x60, 0x3d, 0xb3, 0xee, 0x09, 0x54, 0xa1, 0xfc, 0x1b, 0x46, + 0xc8, 0x95, 0x72, 0x2f, 0x73, 0x2e, 0xc9, 0x94, 0x1a, 0x47, 0xa0, 0xfd, 0x18, 0x45, 0xa2, + 0xff, 0x71, 0x2c, 0xcb, 0x96, 0xca, 0x97, 0x70, 0x2d, 0xa3, 0xfe, 0x19, 0x44, 0xce, 0x93, + 0x74, 0x29, 0xa7, 0xfa, 0x1d, 0x40, 0x1c, 0x41, 0xa6, 0xfb, 0x75, 0x28, 0xcf, 0x92, 0x77, + 0x2a, 0xcd, 0x90, 0x1e, 0x43, 0xa4, 0xf9, 0xa5, 0xf8, 0x1f, 0x42, 0xcc, 0x91, 0x76, 0x2b, + 0x7f, 0x22, 0xc5, 0x98, 0x16, 0x4b, 0xac, 0xf1, 0xad, 0xf0, 0x17, 0x4a, 0xc4, 0x99, 0x7e, + 0x23, 0xc6, 0x9b, 0x7c, 0x21, 0xaf, 0xf2, 0x15, 0x48, 0x14, 0x49, 0xae, 0xf3, 0x7d, 0x20, + 0xc7, 0x9a, 0x10, 0x4d, 0xaa, 0xf7, 0x79, 0x24, 0xc3, 0x9e, 0xc2, 0x9f, 0x78, 0x25, 0xab, + 0xf6, 0x11, 0x4c, 0xa9, 0xf4, 0x13, 0x4e, 0xc0, 0x9d, 0x7a, 0x27, 0x7b, 0x26, 0xc1, 0x9c, + 0x12, 0x4f, 0xa8, 0xf5, 0x00, 0x5e, 0xbc, 0xe2, 0x65, 0x3b, 0xd9, 0x87, 0xca, 0x94, 0x76, + 0x28, 0xaf, 0xf1, 0x13, 0x4d, 0x89, 0xd7, 0x35, 0x6b, 0xec, 0xb2, 0x50, 0x0e, 0x43, 0x1d, + 0xff, 0xa1, 0x26, 0x78, 0x9a, 0xc4, 0x0f, 0x51, 0xb3, 0xed, 0x6a, 0x34, 0xd6, 0x88, 0xc5, + 0x9b, 0x79, 0x27, 0xa0, 0xfe, 0x1c, 0x42, 0x86, 0xd8, 0x3a, 0x64, 0xe3, 0xbd, 0x5f, 0x01, + 0x4c, 0x12, 0xf0, 0xae, 0x29, 0x77, 0x95, 0xcb, 0x1e, 0x40, 0xa2, 0xfc, 0x7b, 0x25, 0xc7, + 0x99, 0xd4, 0x8a, 0x68, 0x36, 0xb1, 0xef, 0x0d, 0x53, 0x97, 0xc9, 0x2b, 0x75, 0xf2, 0xac, + 0x4e, 0x10, 0x5d, 0x03, 0xe1, 0xbf, 0x38, 0x66, 0x84, 0xda, 0x11, 0x4f, 0xad, 0xf3, 0x74, + 0x2a, 0xc8, 0x96, 0xdb, 0x85, 0x67, 0x39, 0xbe, 0xe0, 0x02, 0x5c, 0x98, 0xc6, 0x24, 0x7a, + 0xfd, 0xa3, 0x41, 0x1f, 0x52, 0x0c, 0xee, 0xb0, 0x37, 0x69, 0x8b, 0xd5, 0x3c, 0x62, 0x80, + 0xde, 0x59, 0x07, 0xe5, 0xbb, 0xf6, 0xa8, 0x4a, 0x14, 0x93, 0xcd, 0x2f, 0x71, 0xb5, 0xeb, + 0x09, 0x57, 0xd0, 0x8e, 0x6c, 0x32, 0x7f, 0x21, 0xc3, 0x9d, 0x1a, 0x44, 0xa6, 0xf8, 0x33, + 0x6d, 0x8f, 0xd1, 0x56, 0x08, 0xea, 0xb4, 0xf9, 0xa7, 0x45, 0x1b, 0x9c, 0xc2, 0x20, 0x7e, + 0xba, 0xe4, 0x06, 0x58, 0xdf, 0x81, 0x63, 0x3d, 0x70, 0x2e, 0xcc, 0x92, 0x15, 0x4b, 0xa9, + 0xf7, 0x22, 0x7c, 0x9e, 0xc0, 0x47, 0x19, 0xfb, 0xa5, 0xe8, 0xb6, 0x54, 0x0a, 0x8d, 0xd3, + 0x31, 0x6f, 0xab, 0xf5, 0x17, 0x49, 0xce, 0x90, 0x72, 0x2c, 0x61, 0x3f, 0xdd, 0x83, 0x04, + 0x5a, 0xb8, 0xe6, 0x2d, 0x73, 0x91, 0xcf, 0x48, 0x16, 0xf4, 0xaa, 0xe7, 0xb9, 0x5b, 0x05, + 0x82, 0xdc, 0x3e, 0x60, 0xa4, 0xfa, 0x18, 0x46, 0xc1, 0x9f, 0x7d, 0x23, 0x6e, 0x30, 0xd2, + 0x8c, 0x0b, 0x55, 0xb7, 0xe9, 0x00, 0x5f, 0xbe, 0xe1, 0x61, 0x3e, 0xdf, 0x80, 0xc2, 0x9d, + 0x7c, 0x23, 0xa3, 0xfc, 0x1d, 0x42, 0x99, 0xc6, 0x27, 0x78, 0xf8, 0xa7, 0x46, 0x19, 0x5b, + 0x04, 0xe5, 0xba, 0x3a, 0x65, 0x84, 0xdb, 0x2f, 0x70, 0x91, 0xce, 0x4e, 0x11, 0xf0, 0xaf, + 0xed, 0xb2, 0x53, 0x0c, 0x8c, 0xd3, 0x32, 0x6d, 0xb6, 0xe9, 0x08, 0x57, 0xd7, 0x88, 0x69, + 0x36, 0x74, 0x2b, 0xca, 0x95, 0x15, 0x4a, 0xab, 0xf4, 0x5e, 0x01, 0xe0, 0xbf, 0x3f, 0x60, + 0x81, 0xde, 0x9c, 0xc3, 0x22, 0x7d, 0xfd, 0xa2, 0x43, 0x1c, 0xc7, 0x98, 0x79, 0x26, 0xa6, + 0xf9, 0x18, 0x47, 0x05, 0x5a, 0xbb, 0xe4, 0x64, 0x3b, 0xda, 0x85, 0x71, 0x2e, 0xcf, 0x90, + 0x10, 0x4f, 0xae, 0xf1, 0xb3, 0xec, 0x0d, 0x52, 0xd2, 0x8d, 0x6c, 0x33, 0xe8, 0xb7, 0x56, + 0x09, 0x89, 0xd6, 0x37, 0x68, 0x2a, 0x75, 0x94, 0xcb, 0x4b, 0x14, 0xf5, 0xaa, 0xbc, 0xe3, + 0x02, 0x5d, 0xdd, 0x82, 0x63, 0x3c, 0x7e, 0x21, 0xc0, 0x9f, 0x1f, 0x40, 0xa1, 0xfe, 0x25, + 0x7a, 0x9b, 0xc4, 0x44, 0x1b, 0xfa, 0xa5, 0xe7, 0xb8, 0x59, 0x06, 0x86, 0xd9, 0x38, 0x67, + 0x93, 0xcc, 0x2d, 0x72, 0xf2, 0xad, 0x4c, 0x13, 0x51, 0x0e, 0xef, 0xb0, 0x30, 0x6f, 0x8e, + 0xd1, 0x0a, 0x55, 0xb4, 0xeb, 0x6b, 0x34, 0xd5, 0x8a, 0xc8, 0x97, 0x76, 0x29, 0xa9, 0xf6, + 0x17, 0x48, 0xe2, 0xbd, 0x5c, 0x03, 0x83, 0xdc, 0x3d, 0x62, 0x20, 0x7f, 0x9e, 0xc1, 0x41, + 0x1e, 0xff, 0xa0, 0x7b, 0x24, 0xc5, 0x9a, 0x1a, 0x45, 0xa4, 0xfb, 0xb9, 0xe6, 0x07, 0x58, + 0xd8, 0x87, 0x66, 0x39, 0xcd, 0x92, 0x73, 0x2c, 0xac, 0xf3, 0x12, 0x4d, 0x0f, 0x50, 0xb1, + 0xee, 0x6e, 0x31, 0xd0, 0x8f, 0x54, 0x0b, 0xea, 0xb5, 0x35, 0x6a, 0x8b, 0xd4, 0x96, 0xc9, + 0x28, 0x77, 0xf7, 0xa8, 0x49, 0x16, 0x00, 0x60, 0xc0, 0xa0, 0x9d, 0xfd, 0x5d, 0x3d, 0x27, + 0x47, 0xe7, 0x87, 0xba, 0xda, 0x7a, 0x1a, 0x4e, 0x2e, 0x8e, 0xee, 0xd3, 0xb3, 0x13, 0x73, + 0x69, 0x09, 0xa9, 0xc9, 0xf4, 0x94, 0x34, 0x54, 0x9c, 0xfc, 0x5c, 0x3c, 0x01, 0x61, 0xc1, + 0xa1, 0xbb, 0xdb, 0x7b, 0x1b, 0x26, 0x46, 0xe6, 0x86, 0xd2, 0xb2, 0x12, 0x72, 0x4f, 0x2f, + 0x8f, 0xef, 0xf5, 0x95, 0x35, 0x55, 0x68, 0x08, 0xa8, 0xc8, 0x25, 0x45, 0xe5, 0x85, 0xb8, + 0xd8, 0x78, 0x18, 0x02, 0x62, 0xc2, 0xa2, 0x9f, 0xff, 0x5f, 0x3f, 0x6b, 0x0b, 0xab, 0xcb, + 0xf6, 0x96, 0x36, 0x56, 0x4c, 0x2c, 0x8c, 0xec, 0xd1, 0xb1, 0x11, 0x71, 0xb9, 0xd9, 0x79, + 0x19, 0x24, 0x44, 0xe4, 0x84, 0x9e, 0xfe, 0x5e, 0x3e, 0x03, 0x63, 0xc3, 0xa3, 0xf7, 0x97, + 0x37, 0x57, 0x6a, 0x0a, 0xaa, 0xca, 0xd0, 0xb0, 0x10, 0x70, 0x4d, 0x2d, 0x8d, 0xed, 0x4a, + 0x2a, 0x8a, 0xea, 0xd7, 0xb7, 0x17, 0x77, 0x6d, 0x0d, 0xad, 0xcd, 0xf0, 0x90, 0x30, 0x50, + 0x04, 0x64, 0xc4, 0xa4, 0x99, 0xf9, 0x59, 0x39, 0x23, 0x43, 0xe3, 0x83, 0xbe, 0xde, 0x7e, + 0x1e, 0xd6, 0xb6, 0x16, 0x76, 0x4b, 0x2b, 0x8b, 0xeb, 0xf1, 0x91, 0x31, 0x51, 0x6c, 0x0c, + 0xac, 0xcc, 0x98, 0xf8, 0x58, 0x38, 0x05, 0x65, 0xc5, 0xa5, 0xbf, 0xdf, 0x7f, 0x1f, 0x22, + 0x42, 0xe2, 0x82, 0x6f, 0x0f, 0xaf, 0xcf, 0xf2, 0x92, 0x32, 0x52, 0x48, 0x28, 0x88, 0xe8, + 0xd5, 0xb5, 0x15, 0x75, 0x21, 0x41, 0xe1, 0x81, 0xbc, 0xdc, 0x7c, 0x1c, 0x06, 0x66, 0xc6, + 0xa6, 0x9b, 0xfb, 0x5b, 0x3b, 0xf3, 0x93, 0x33, 0x53, 0x6e, 0x0e, 0xae, 0xce, 0xd4, 0xb4, + 0x14, 0x74, 0x49, 0x29, 0x89, 0xe9, 0xbd, 0xdd, 0x7d, 0x1d, 0x20, 0x40, 0xe0, 0x80, 0x9a, + 0xfa, 0x5a, 0x3a, 0x07, 0x67, 0xc7, 0xa7, 0x00, 0x61, 0xc2, 0xa3, 0x99, 0xf8, 0x5b, 0x3a, + 0x2f, 0x4e, 0xed, 0x8c, 0xb6, 0xd7, 0x74, 0x15, 0x5e, 0x3f, 0x9c, 0xfd, 0xc7, 0xa6, 0x05, + 0x64, 0x71, 0x10, 0xb3, 0xd2, 0xe8, 0x89, 0x2a, 0x4b, 0xbc, 0xdd, 0x7e, 0x1f, 0x25, 0x44, + 0xe7, 0x86, 0x93, 0xf2, 0x51, 0x30, 0x0a, 0x6b, 0xc8, 0xa9, 0xe2, 0x83, 0x20, 0x41, 0x7b, + 0x1a, 0xb9, 0xd8, 0xcd, 0xac, 0x0f, 0x6e, 0x54, 0x35, 0x96, 0xf7, 0x65, 0x04, 0xa7, 0xc6, + 0xfc, 0x9d, 0x3e, 0x5f, 0x4a, 0x2b, 0x88, 0xe9, 0xd3, 0xb2, 0x11, 0x70, 0x3b, 0x5a, 0xf9, + 0x98, 0xa2, 0xc3, 0x60, 0x01, 0x14, 0x75, 0xd6, 0xb7, 0x8d, 0xec, 0x4f, 0x2e, 0xd9, 0xb8, + 0x1b, 0x7a, 0x40, 0x21, 0x82, 0xe3, 0xf6, 0x97, 0x34, 0x55, 0x6f, 0x0e, 0xad, 0xcc, 0x87, + 0xe6, 0x45, 0x24, 0x1e, 0x7f, 0xdc, 0xbd, 0xa8, 0xc9, 0x6a, 0x0b, 0x31, 0x50, 0xf3, 0x92, + 0xca, 0xab, 0x08, 0x69, 0x53, 0x32, 0x91, 0xf0, 0xe5, 0x84, 0x27, 0x46, 0x7c, 0x1d, 0xbe, + 0xdf, 0x94, 0xf5, 0x56, 0x37, 0x0d, 0x6c, 0xcf, 0xae, 0xbb, 0xda, 0x79, 0x18, 0x22, 0x43, + 0xe0, 0x81, 0x76, 0x17, 0xb4, 0xd5, 0xef, 0x8e, 0x2d, 0x4c, 0x59, 0x38, 0x9b, 0xfa, 0xc0, + 0xa1, 0x02, 0x63, 0x28, 0x49, 0xea, 0x8b, 0xb1, 0xd0, 0x73, 0x12, 0x07, 0x66, 0xc5, 0xa4, + 0x9e, 0xff, 0x5c, 0x3d, 0xaf, 0xce, 0x6d, 0x0c, 0x36, 0x57, 0xf4, 0x95, 0x80, 0xe1, 0x42, + 0x23, 0x19, 0x78, 0xdb, 0xba, 0xf1, 0x90, 0x33, 0x52, 0x68, 0x09, 0xaa, 0xcb, 0xde, 0xbf, + 0x1c, 0x7d, 0x47, 0x26, 0x85, 0xe4, 0x13, 0x72, 0xd1, 0xb0, 0x8a, 0xeb, 0x48, 0x29, 0x3c, + 0x5d, 0xfe, 0x9f, 0xa5, 0xc4, 0x67, 0x06, 0x4d, 0x2c, 0x8f, 0xee, 0xd4, 0xb5, 0x16, 0x77, + 0x62, 0x03, 0xa0, 0xc1, 0xfb, 0x9a, 0x39, 0x58, 0x00, 0x62, 0xc4, 0xa6, 0x95, 0xf7, 0x51, + 0x33, 0x37, 0x55, 0xf3, 0x91, 0xa2, 0xc0, 0x66, 0x04, 0x6e, 0x0c, 0xaa, 0xc8, 0xfb, 0x99, + 0x3f, 0x5d, 0x59, 0x3b, 0x9d, 0xff, 0xcc, 0xae, 0x08, 0x6a, 0xdc, 0xbe, 0x18, 0x7a, 0x49, + 0x2b, 0x8d, 0xef, 0xeb, 0x89, 0x2f, 0x4d, 0x7e, 0x1c, 0xba, 0xd8, 0xb2, 0xd0, 0x76, 0x14, + 0x27, 0x45, 0xe3, 0x81, 0x85, 0xe7, 0x41, 0x23, 0x10, 0x72, 0xd4, 0xb6, 0xa5, 0xc7, 0x61, + 0x03, 0x30, 0x52, 0xf4, 0x96, 0x92, 0xf0, 0x56, 0x34, 0x07, 0x65, 0xc3, 0xa1, 0xcb, 0xa9, + 0x0f, 0x6d, 0x5e, 0x3c, 0x9a, 0xf8, 0xfc, 0x9e, 0x38, 0x5a, 0x69, 0x0b, 0xad, 0xcf, 0x79, + 0x1b, 0xbd, 0xdf, 0xec, 0x8e, 0x28, 0x4a, 0x4e, 0x2c, 0x8a, 0xe8, 0xdb, 0xb9, 0x1f, 0x7d, + 0x17, 0x75, 0xd3, 0xb1, 0x82, 0xe0, 0x46, 0x24, 0x20, 0x42, 0xe4, 0x86, 0xb5, 0xd7, 0x71, + 0x13, 0x57, 0x35, 0x93, 0xf1, 0xc2, 0xa0, 0x06, 0x64, 0x60, 0x02, 0xa4, 0xc6, 0xf5, 0x97, + 0x31, 0x53, 0x39, 0x5b, 0xfd, 0x9f, 0xac, 0xce, 0x68, 0x0a, 0x0e, 0x6c, 0xca, 0xa8, 0x9b, + 0xf9, 0x5f, 0x3d, 0x8b, 0xe9, 0x4f, 0x2d, 0x1e, 0x7c, 0xda, 0xb8, 0xbc, 0xde, 0x78, 0x1a, + 0x29, 0x4b, 0xed, 0x8f, 0xe5, 0x87, 0x21, 0x43, 0x70, 0x12, 0xb4, 0xd6, 0xd2, 0xb0, 0x16, + 0x74, 0x47, 0x25, 0x83, 0xe1, 0xf2, 0x90, 0x36, 0x54, 0x67, 0x05, 0xa3, 0xc1, 0xc5, 0xa7, + 0x01, 0x63, 0x50, 0x32, 0x94, 0xf6, 0x9c, 0xfe, 0x58, 0x3a, 0x09, 0x6b, 0xcd, 0xaf, 0xab, + 0xc9, 0x6f, 0x0d, 0x3e, 0x5c, 0xfa, 0x98, 0x2e, 0x4c, 0xea, 0x88, 0xbb, 0xd9, 0x7f, 0x1d, + 0x19, 0x7b, 0xdd, 0xbf, 0x8c, 0xee, 0x48, 0x2a, 0x40, 0x22, 0x84, 0xe6, 0xd5, 0xb7, 0x11, + 0x73, 0x77, 0x15, 0xb3, 0xd1, 0xe2, 0x80, 0x26, 0x44, 0x00, 0x63, 0xc6, 0xa5, 0x91, 0xf2, + 0x57, 0x34, 0x3f, 0x5c, 0xf9, 0x9a, 0xae, 0xcd, 0x68, 0x0b, 0x7e, 0x1d, 0xb8, 0xdb, 0xef, + 0x8c, 0x29, 0x4a, 0x41, 0x22, 0x87, 0xe4, 0xd0, 0xb3, 0x16, 0x75, 0xfc, 0x9f, 0x3a, 0x59, + 0x6d, 0x0e, 0xab, 0xc8, 0xc3, 0xa0, 0x05, 0x66, 0x52, 0x31, 0x94, 0xf7, 0x82, 0xe1, 0x44, + 0x27, 0x13, 0x70, 0xd5, 0xb6, 0xbd, 0xde, 0x7b, 0x18, 0x2c, 0x4f, 0xea, 0x89, 0xe5, 0x86, + 0x23, 0x40, 0x74, 0x17, 0xb2, 0xd1, 0xda, 0xb9, 0x1c, 0x7f, 0x4b, 0x28, 0x8d, 0xee, 0x9b, + 0xf8, 0x5d, 0x3e, 0x0a, 0x69, 0xcc, 0xaf, 0xa4, 0xc7, 0x62, 0x01, 0x35, 0x56, 0xf3, 0x90, + 0x19, 0x7a, 0xdf, 0xbc, 0x88, 0xeb, 0x4e, 0x2d, 0x26, 0x45, 0xe0, 0x83, 0xb7, 0xd4, 0x71, + 0x12, 0x67, 0x04, 0xa1, 0xc2, 0xf6, 0x95, 0x30, 0x53, 0x58, 0x3b, 0x9e, 0xfd, 0xc9, 0xaa, + 0x0f, 0x6c, 0xd7, 0xb4, 0x11, 0x72, 0x46, 0x25, 0x80, 0xe3, 0xe8, 0x8b, 0x2e, 0x4d, 0x79, + 0x1a, 0xbf, 0xdc, 0xa9, 0xca, 0x6f, 0x0c, 0x38, 0x5b, 0xfe, 0x9d, 0x96, 0xf5, 0x50, 0x33, + 0x07, 0x64, 0xc1, 0xa2, 0x2b, 0x48, 0xed, 0x8e, 0xba, 0xd9, 0x7c, 0x1f, 0x14, 0x77, 0xd2, + 0xb1, 0x85, 0xe6, 0x43, 0x20, 0x55, 0x36, 0x93, 0xf0, 0xc4, 0xa7, 0x02, 0x61, 0x6a, 0x09, + 0xac, 0xcf, 0xfb, 0x98, 0x3d, 0x5e, 0x32, 0x51, 0xf4, 0x97, 0xa3, 0xc0, 0x65, 0x06, 0x0d, + 0x6e, 0xcb, 0xa8, 0x9c, 0xff, 0x5a, 0x39, 0x4c, 0x2f, 0x8a, 0xe9, 0xdd, 0xbe, 0x1b, 0x78, + 0x73, 0x10, 0xb5, 0xd6, 0xe2, 0x81, 0x24, 0x47, 0xce, 0xad, 0x08, 0x6b, 0x5f, 0x3c, 0x99, + 0xfa, 0xf1, 0x92, 0x37, 0x54, 0x60, 0x03, 0xa6, 0xc5, 0xb0, 0xd3, 0x76, 0x15, 0x21, 0x42, + 0xe7, 0x84, 0x8f, 0xec, 0x49, 0x2a, 0x1e, 0x7d, 0xd8, 0xbb, 0x00, 0x64, 0xc8, 0xac, 0x8d, + 0xe9, 0x45, 0x21, 0x07, 0x63, 0xcf, 0xab, 0x8a, 0xee, 0x42, 0x26, 0x0e, 0x6a, 0xc6, 0xa2, + 0x83, 0xe7, 0x4b, 0x2f, 0x09, 0x6d, 0xc1, 0xa5, 0x84, 0xe0, 0x4c, 0x28, 0x1c, 0x78, 0xd4, + 0xb0, 0x91, 0xf5, 0x59, 0x3d, 0x1b, 0x7f, 0xd3, 0xb7, 0x96, 0xf2, 0x5e, 0x3a, 0x12, 0x76, + 0xda, 0xbe, 0x9f, 0xfb, 0x57, 0x33, 0x15, 0x71, 0xdd, 0xb9, 0x98, 0xfc, 0x50, 0x34, 0x38, + 0x5c, 0xf0, 0x94, 0xb5, 0xd1, 0x7d, 0x19, 0x3f, 0x5b, 0xf7, 0x93, 0xb2, 0xd6, 0x7a, 0x1e, + 0x36, 0x52, 0xfe, 0x9a, 0xbb, 0xdf, 0x73, 0x17, 0x31, 0x55, 0xf9, 0x9d, 0xbc, 0xd8, 0x74, + 0x10, 0x24, 0x40, 0xec, 0x88, 0xa9, 0xcd, 0x61, 0x05, 0x23, 0x47, 0xeb, 0x8f, 0xae, 0xca, + 0x66, 0x02, 0x2a, 0x4e, 0xe2, 0x86, 0xa7, 0xc3, 0x6f, 0x0b, 0x2d, 0x49, 0xe5, 0x81, 0xa0, + 0xc4, 0x68, 0x0c, 0x70, 0x14, 0xb8, 0xdc, 0xfd, 0x99, 0x35, 0x51, 0x77, 0x13, 0xbf, 0xdb, + 0xfa, 0x9e, 0x32, 0x56, 0x7e, 0x1a, 0xb6, 0xd2, 0xf3, 0x97, 0x3b, 0x5f, 0x79, 0x1d, 0xb1, + 0xd5, 0xf4, 0x90, 0x3c, 0x58, 0x6c, 0x08, 0xa4, 0xc0, 0xe1, 0x85, 0x29, 0x4d, 0x6b, 0x0f, + 0xa3, 0xc7, 0xe6, 0x82, 0x2e, 0x4a, 0x62, 0x06, 0xaa, 0xce, 0xef, 0x8b, 0x27, 0x43, 0x65, + 0x01, 0xad, 0xc9, 0xe8, 0x8c, 0x20, 0x44, 0x48, 0x2c, 0x80, 0xe4, 0xc5, 0xa1, 0x0d, 0x69, + 0x4f, 0x2b, 0x87, 0xe3, 0xc2, 0xa6, 0x0a, 0x6e, 0x46, 0x22, 0x8e, 0xea, 0xcb, 0xaf, 0x03, + 0x67, 0x41, 0x25, 0x89, 0xed, 0xcc, 0xa8, 0x04, 0x60, 0x54, 0x30, 0x9c, 0xf8, 0xd9, 0xbd, + 0x11, 0x75, 0x53, 0x37, 0x9b, 0xff, 0xde, 0xba, 0x16, 0x72, 0x5a, 0x3e, 0x92, 0xf6, 0xd7, + 0xb3, 0x1f, 0x7b, 0x5d, 0x39, 0x95, 0xf1, 0xd0, 0xb4, 0x18, 0x7c, 0x00, 0x65, 0xca, 0xaf, + 0x89, 0xec, 0x43, 0x26, 0x0f, 0x6a, 0xc5, 0xa0, 0x86, 0xe3, 0x4c, 0x29, 0x1e, 0x7b, 0xd4, + 0xb1, 0x97, 0xf2, 0x5d, 0x38, 0x11, 0x74, 0xdb, 0xbe, 0x98, 0xfd, 0x52, 0x37, 0x3c, 0x59, + 0xf6, 0x93, 0xb5, 0xd0, 0x7f, 0x1a, 0x33, 0x56, 0xf9, 0x9c, 0xba, 0xdf, 0x70, 0x15, 0x22, + 0x47, 0xe8, 0x8d, 0xab, 0xce, 0x61, 0x04, 0x2d, 0x48, 0xe7, 0x82, 0xa4, 0xc1, 0x6e, 0x0b, + 0x78, 0x1d, 0xb2, 0xd7, 0xf1, 0x94, 0x3b, 0x5e, 0x77, 0x12, 0xbd, 0xd8, 0xfe, 0x9b, 0x34, + 0x51, 0x66, 0x03, 0xac, 0xc9, 0xef, 0x8a, 0x25, 0x40, 0x69, 0x0c, 0xa3, 0xc6, 0xe0, 0x85, + 0x2a, 0x4f, 0x44, 0x21, 0x8e, 0xeb, 0xcd, 0xa8, 0x07, 0x62, 0x4b, 0x2e, 0x81, 0xe4, 0xc2, + 0xa7, 0x08, 0x6d, 0x5a, 0x3f, 0x90, 0xf5, 0xd3, 0xb6, 0x19, 0x7c, 0x55, 0x30, 0x9f, 0xfa, + 0xdc, 0xb9, 0x16, 0x73, 0xf0, 0x95, 0x3a, 0x5f, 0x79, 0x1c, 0xb3, 0xd6, 0xff, 0x9a, 0x35, + 0x50, 0x76, 0x13, 0xbc, 0xd9, 0xee, 0x8b, 0x24, 0x41, 0x67, 0x02, 0xad, 0xc8, 0xe1, 0x84, + 0x2b, 0x4e, 0x68, 0x0d, 0xa2, 0xc7, 0xcc, 0xa9, 0x06, 0x63, 0x45, 0x20, 0x8f, 0xea, 0xc3, + 0xa6, 0x09, 0x6c, 0x4a, 0x2f, 0x80, 0xe5, 0xd2, 0xb7, 0x18, 0x7d, 0x5b, 0x3e, 0x91, 0xf4, + 0xdd, 0xb8, 0x17, 0x72, 0x54, 0x31, 0x9e, 0xfb, 0x88, 0xed, 0x42, 0x27, 0x01, 0x64, 0xcb, + 0xae, 0x87, 0xe2, 0x4d, 0x28, 0x0e, 0x6b, 0xc4, 0xa1, 0x96, 0xf3, 0x5c, 0x39, 0x1f, 0x7a, + 0xd5, 0xb0, 0x99, 0xfc, 0x53, 0x36, 0x10, 0x75, 0xda, 0xbf, 0xb4, 0xd1, 0x7e, 0x1b, 0x3d, + 0x58, 0xf7, 0x92, 0xbb, 0xde, 0x71, 0x14, 0x32, 0x57, 0xf8, 0x9d, 0xaa, 0xcf, 0x60, 0x05, + 0x23, 0x46, 0xe9, 0x8c, 0xa5, 0xc0, 0x6f, 0x0a, 0x2c, 0x49, 0xe6, 0x83, 0x00, 0x66, 0xcc, + 0xaa, 0x85, 0xe3, 0x49, 0x2f, 0x17, 0x71, 0xdb, 0xbd, 0x92, 0xf4, 0x5e, 0x38, 0x2e, 0x48, + 0xe2, 0x84, 0xab, 0xcd, 0x67, 0x01, 0x39, 0x5f, 0xf5, 0x93, 0xbc, 0xda, 0x70, 0x16, 0x5c, + 0x3a, 0x90, 0xf6, 0xd9, 0xbf, 0x15, 0x73, 0x4b, 0x2d, 0x87, 0xe1, 0xce, 0xa8, 0x02, 0x64, + 0x72, 0x14, 0xbe, 0xd8, 0xf7, 0x91, 0x3b, 0x5d, 0x65, 0x03, 0xa9, 0xcf, 0xe0, 0x86, 0x2c, + 0x4a, 0xb8, 0xde, 0x74, 0x12, 0x3d, 0x5b, 0xf1, 0x97, 0xaf, 0xc9, 0x63, 0x05, 0x2a, 0x4c, + 0xe6, 0x80, 0x96, 0xf0, 0x5a, 0x3c, 0x13, 0x75, 0xdf, 0xb9, 0x81, 0xe7, 0x4d, 0x2b, 0x04, + 0x62, 0xc8, 0xae, 0xe4, 0x82, 0x28, 0x4e, 0x61, 0x07, 0xad, 0xcb, 0xf3, 0x95, 0x3f, 0x59, + 0x76, 0x10, 0xba, 0xdc, 0xca, 0xac, 0x06, 0x60, 0x4f, 0x29, 0x83, 0xe5, 0xdd, 0xbb, 0x11, + 0x77, 0x58, 0x3e, 0x94, 0xf2, 0x6d, 0x0b, 0xa1, 0xc7, 0xe8, 0x8e, 0x24, 0x42, 0x7a, 0x1c, + 0xb6, 0xd0, 0xff, 0x99, 0x33, 0x55, 0x43, 0x25, 0x8f, 0xe9, 0xc6, 0xa0, 0x0a, 0x6c, 0x54, + 0x32, 0x98, 0xfe, 0xd1, 0xb7, 0x1d, 0x7b, 0x31, 0x57, 0xfd, 0x9b, 0xb4, 0xd2, 0x78, 0x1e, + 0x26, 0x40, 0xea, 0x8c, 0xa3, 0xc5, 0x6f, 0x09, 0x1f, 0x79, 0xd3, 0xb5, 0x9a, 0xfc, 0x56, + 0x30, 0x08, 0x6e, 0xc4, 0xa2, 0x8d, 0xeb, 0x41, 0x27, 0xd5, 0xb3, 0x19, 0x7f, 0x50, 0x36, + 0x9c, 0xfa, 0xc2, 0xa4, 0x0e, 0x68, 0x47, 0x21, 0x8b, 0xed, 0xfb, 0x9d, 0x37, 0x51, 0x7e, + 0x18, 0xb2, 0xd4, 0xec, 0x8a, 0x20, 0x46, 0x69, 0x0f, 0xa5, 0xc3, 0x89, 0xef, 0x45, 0x23, + 0x0c, 0x6a, 0xc0, 0xa6, 0x9e, 0xf8, 0x52, 0x34, 0x1b, 0x7d, 0xd7, 0xb1, 0xa7, 0xc1, 0x6b, + 0x0d, 0x22, 0x44, 0xee, 0x88, 0xb0, 0xd6, 0x7c, 0x1a, 0x35, 0x53, 0xf9, 0x9f, 0x00, 0x67, + 0xce, 0xa9, 0x81, 0xe6, 0x4f, 0x28, 0x1f, 0x78, 0xd1, 0xb6, 0x9e, 0xf9, 0x50, 0x37, 0x3e, + 0x59, 0xf0, 0x97, 0xbf, 0xd8, 0x71, 0x16, 0x21, 0x46, 0xef, 0x88, 0xa0, 0xc7, 0x6e, 0x09, + 0x7c, 0x1b, 0xb2, 0xd5, 0xfd, 0x9a, 0x33, 0x54, 0x63, 0x04, 0xad, 0xca, 0xe2, 0x85, 0x2c, + 0x4b, 0x42, 0x25, 0x8c, 0xeb, 0xc3, 0xa4, 0x0d, 0x6a, 0x5d, 0x3a, 0x93, 0xf4, 0xdc, 0xbb, + 0x12, 0x75, 0xf8, 0x9f, 0x36, 0x51, 0x79, 0x1e, 0xb7, 0xd0, 0xe7, 0x80, 0x29, 0x4e, 0x66, + 0x01, 0xa8, 0xcf, 0xc6, 0xa1, 0x08, 0x6f, 0x47, 0x20, 0x89, 0xee, 0xd9, 0xbe, 0x17, 0x70, + 0x58, 0x3f, 0x96, 0xf1, 0x84, 0xe3, 0x4a, 0x2d, 0x05, 0x62, 0xcb, 0xac, 0x9b, 0xfc, 0x55, + 0x32, 0x1a, 0x7d, 0xd4, 0xb3, 0xba, 0xdd, 0x74, 0x13, 0x3b, 0x5c, 0xf5, 0x92, 0xa5, 0xc2, + 0x6b, 0x0c, 0x24, 0x43, 0xea, 0x8d, 0xed, 0x8a, 0x23, 0x44, 0x6c, 0x0b, 0xa2, 0xc5, 0xf2, + 0x95, 0x3c, 0x5b, 0x73, 0x14, 0xbd, 0xda, 0xd3, 0xb4, 0x1d, 0x7a, 0x52, 0x35, 0x9c, 0xfb, + 0xcc, 0xab, 0x02, 0x65, 0x4d, 0x2a, 0x83, 0xe4, 0x91, 0xf6, 0x5f, 0x38, 0x10, 0x77, 0xde, + 0xb9, 0x8e, 0xe9, 0x40, 0x27, 0x0f, 0x68, 0xc1, 0xa6, 0xaf, 0xc8, 0x61, 0x06, 0x2e, 0x49, + 0xe0, 0x87, 0xb0, 0xd7, 0x7e, 0x19, 0x31, 0x56, 0xff, 0x98, 0x15, 0x72, 0xdb, 0xbc, 0x94, + 0xf3, 0x5a, 0x3d, 0x0a, 0x6d, 0xc4, 0xa3, 0x8b, 0xec, 0x45, 0x22, 0x2b, 0x4c, 0xe5, 0x82, + 0xaa, 0xcd, 0x64, 0x03, 0x34, 0x53, 0xfa, 0x9d, 0xb5, 0xd2, 0x7b, 0x1c, 0x69, 0x0e, 0xa7, + 0xc0, 0xe8, 0x8f, 0x26, 0x41, 0x76, 0x11, 0xb8, 0xdf, 0xf7, 0x90, 0x39, 0x5e, 0x57, 0x30, + 0x99, 0xfe, 0xd6, 0xb1, 0x18, 0x7f, 0x48, 0x2f, 0x86, 0xe1, 0xc9, 0xae, 0x07, 0x60, 0x00, + 0x68, 0xd0, 0xb8, 0xbd, 0xd5, 0x6d, 0x05, 0x67, 0x0f, 0xb7, 0xdf, 0xda, 0xb2, 0x0a, 0x62, + 0xce, 0xa6, 0x1e, 0x76, 0x73, 0x1b, 0xa3, 0xcb, 0xa9, 0xc1, 0x79, 0x11, 0x14, 0x7c, 0xc4, + 0xac, 0x81, 0xe9, 0x51, 0x39, 0x3c, 0x54, 0xec, 0x84, 0xe6, 0x8e, 0x36, 0x5e, 0x5b, 0x33, + 0x8b, 0xe3, 0x4f, 0x27, 0x9f, 0xf7, 0xf2, 0x9a, 0x22, 0x4a, 0x28, 0x40, 0xf8, 0x90, 0x95, + 0xfd, 0x45, 0x2d, 0x1f, 0x77, 0xcf, 0xa7, 0xa2, 0xca, 0x72, 0x1a, 0x78, 0x10, 0xa8, 0xc0, + 0xc5, 0xad, 0x15, 0x7d, 0xd1, 0xb9, 0x01, 0x69, 0x6c, 0x04, 0xbc, 0xd4, 0xb6, 0xde, 0x66, + 0x0e, 0x0b, 0x63, 0xdb, 0xb3, 0x9e, 0xf6, 0x4e, 0x26, 0x23, 0x4b, 0xf3, 0x9b, 0xf9, 0x91, + 0x29, 0x41, 0x44, 0x2c, 0x94, 0xfc, 0x50, 0x38, 0x80, 0xe8, 0xed, 0x85, 0x3d, 0x55, 0x37, + 0x5f, 0xe7, 0x8f, 0x8a, 0xe2, 0x5a, 0x32, 0x3e, 0x56, 0xee, 0x86, 0x83, 0xeb, 0x53, 0x3b, + 0x59, 0x31, 0x89, 0xe1, 0xe4, 0x8c, 0x34, 0x5c, 0xf0, 0x98, 0x20, 0x48, 0x4d, 0x25, 0x9d, + 0xf5, 0x97, 0xff, 0x47, 0x2f, 0x2a, 0x42, 0xfa, 0x92, 0xbf, 0xd7, 0x6f, 0x07, 0x02, 0x6a, + 0xd2, 0xba, 0xd8, 0xb0, 0x08, 0x60, 0x65, 0x0d, 0xb5, 0xdd, 0x71, 0x19, 0xa1, 0xc9, 0xcc, + 0xa4, 0x1c, 0x74, 0x16, 0x7e, 0xc6, 0xae, 0xab, 0xc3, 0x7b, 0x13, 0x21, 0x49, 0xf1, 0x99, + 0x9c, 0xf4, 0x4c, 0x24, 0x46, 0x2e, 0x96, 0xfe, 0xfb, 0x93, 0x2b, 0x43, 0xef, 0x87, 0x3f, + 0x57, 0x52, 0x3a, 0x82, 0xea, 0x88, 0xe0, 0x58, 0x30, 0x35, 0x5d, 0xe5, 0x8d, 0xa0, 0xc8, + 0x70, 0x18, 0x1d, 0x75, 0xcd, 0xa5, 0xc7, 0xaf, 0x17, 0x7f, 0x7a, 0x12, 0xaa, 0xc2, 0x6e, + 0x06, 0xbe, 0xd6, 0xd3, 0xbb, 0x03, 0x6b, 0x09, 0x61, 0xd9, 0xb1, 0xb4, 0xdc, 0x64, 0x0c, + 0x00, 0x69, 0xd2, 0xbb, 0xb9, 0xd0, 0x6b, 0x02, 0x6f, 0x06, 0xbd, 0xd4, 0xd6, 0xbf, 0x04, + 0x6d, 0xde, 0xb7, 0x0c, 0x65, 0x67, 0x0e, 0xb5, 0xdc, 0xb1, 0xd8, 0x63, 0x0a, 0x08, 0x61, + 0xda, 0xb3, 0xa1, 0xc8, 0x73, 0x1a, 0x18, 0x71, 0xca, 0xa3, 0xce, 0xa7, 0x1c, 0x75, 0x77, + 0x1e, 0xa5, 0xcc, 0x7f, 0x16, 0xad, 0xc4, 0xc6, 0xaf, 0x14, 0x7d, 0x10, 0x79, 0xc2, 0xab, + 0xa9, 0xc0, 0x7b, 0x12, 0x5f, 0x36, 0x8d, 0xe4, 0xe6, 0x8f, 0x34, 0x5d, 0x30, 0x59, 0xe2, + 0x8b, 0x89, 0xe0, 0x5b, 0x32, 0x81, 0xe8, 0x53, 0x3a, 0x38, 0x51, 0xea, 0x83, 0xee, 0x87, + 0x3c, 0x55, 0x57, 0x3e, 0x85, 0xec, 0xfe, 0x97, 0x2c, 0x45, 0x47, 0x2e, 0x95, 0xfc, 0x91, + 0xf8, 0x43, 0x2a, 0x28, 0x41, 0xfa, 0x93, 0x20, 0x49, 0xf2, 0x9b, 0x99, 0xf0, 0x4b, 0x22, + 0x4f, 0x26, 0x9d, 0xf4, 0xf6, 0x9f, 0x24, 0x4d, 0xbe, 0xd7, 0x6c, 0x05, 0x07, 0x6e, 0xd5, + 0xbc, 0xd1, 0xb8, 0x03, 0x6a, 0x68, 0x01, 0xba, 0xd3, 0x60, 0x09, 0xb2, 0xdb, 0xd9, 0xb0, + 0x0b, 0x62, 0x0f, 0x66, 0xdd, 0xb4, 0xb6, 0xdf, 0x64, 0x0d, 0x1f, 0x76, 0xcd, 0xa4, 0xa6, + 0xcf, 0x74, 0x1d, 0x70, 0x19, 0xa2, 0xcb, 0xc9, 0xa0, 0x1b, 0x72, 0xc1, 0xa8, 0x13, 0x7a, + 0x78, 0x11, 0xaa, 0xc3, 0xae, 0xc7, 0x7c, 0x15, 0x17, 0x7e, 0xc5, 0xac, 0xe1, 0x88, 0x33, + 0x5a, 0x58, 0x31, 0x8a, 0xe3, 0x8e, 0xe7, 0x5c, 0x35, 0x37, 0x5e, 0xe5, 0x8c, 0x3f, 0x56, + 0xed, 0x84, 0x86, 0xef, 0x54, 0x3d, 0x50, 0x39, 0x82, 0xeb, 0xe9, 0x80, 0x3b, 0x52, 0x40, + 0x29, 0x92, 0xfb, 0xf9, 0x90, 0x2b, 0x42, 0x2f, 0x46, 0xfd, 0x94, 0x96, 0xff, 0x44, 0x2d, + 0x9e, 0xf7, 0x4c, 0x25, 0x27, 0x4e, 0xf5, 0x9c, 0xf1, 0x98, 0x23, 0x4a, 0x48, 0x21, 0x9a, + 0xf3, 0x00, 0x6a, 0xd4, 0xbe, 0xb5, 0xdf, 0x61, 0x0b, 0x77, 0x1d, 0xa3, 0xc9, 0xc2, 0xa8, + 0x16, 0x7c, 0xee, 0x84, 0x3a, 0x50, 0x5b, 0x31, 0x8f, 0xe5, 0x99, 0xf3, 0x4d, 0x27, 0x2c, + 0x46, 0xf8, 0x92, 0xc1, 0xab, 0x15, 0x7f, 0x74, 0x1e, 0xa0, 0xca, 0xb6, 0xdc, 0x62, 0x08, + 0x03, 0x69, 0xd7, 0xbd, 0x2f, 0x45, 0xfb, 0x91, 0x9a, 0xf0, 0x4e, 0x24, 0x58, 0x32, 0x8c, + 0xe6, 0xed, 0x87, 0x39, 0x53, 0x9f, 0xf5, 0x4b, 0x21, 0x2a, 0x40, 0xfe, 0x94, 0xe8, 0x82, + 0x3c, 0x56, 0x5d, 0x37, 0x89, 0xe3, 0x71, 0x1b, 0xa5, 0xcf, 0xc4, 0xae, 0x10, 0x7a, 0x06, + 0x6c, 0xd2, 0xb8, 0xb3, 0xd9, 0x67, 0x0d, 0x5e, 0x34, 0x8a, 0xe0, 0xeb, 0x81, 0x3f, 0x55, + 0x29, 0x43, 0xfd, 0x97, 0x9c, 0xf6, 0x48, 0x22, 0xb0, 0xda, 0x64, 0x0e, 0x05, 0x6f, 0xd1, + 0xbb, 0xc7, 0xad, 0x13, 0x79, 0x72, 0x18, 0xa6, 0xcc, 0x23, 0x49, 0xf7, 0x9d, 0x96, 0xfc, + 0x42, 0x28, 0x54, 0x3e, 0x80, 0xea, 0xe1, 0x8b, 0x35, 0x5f, 0xcd, 0xa7, 0x19, 0x73, 0x78, + 0x12, 0xac, 0xc6, 0xba, 0xd0, 0x6e, 0x04, 0x0f, 0x65, 0xdb, 0xb1, 0xe2, 0x88, 0x36, 0x5c, + 0x57, 0x3d, 0x83, 0xe9, 0x95, 0xff, 0x41, 0x2b, 0x20, 0x4a, 0xf4, 0x9e, 0x0c, 0x66, 0xd8, + 0xb2, 0xb9, 0xd3, 0x6d, 0x07, 0x7b, 0x11, 0xaf, 0xc5, 0xce, 0xa4, 0x1a, 0x70, 0xbc, 0xd6, + 0x68, 0x02, 0x09, 0x63, 0xdd, 0xb7, 0xcb, 0xa1, 0x1f, 0x75, 0x7e, 0x14, 0xaa, 0xc0, 0x52, + 0x38, 0x86, 0xec, 0xe7, 0x8d, 0x33, 0x59, 0x25, 0x4f, 0xf1, 0x9b, 0x90, 0xfa, 0x44, 0x2e, + 0x7d, 0x17, 0xa9, 0xc3, 0xc8, 0xa2, 0x1c, 0x76, 0x0a, 0x60, 0xde, 0xb4, 0xbf, 0xd5, 0x6b, + 0x01, 0x93, 0xf9, 0x47, 0x2d, 0x26, 0x4c, 0xf2, 0x98, 0xe4, 0x8e, 0x30, 0x5a, 0x51, 0x3b, + 0x85, 0xef, 0x00, 0x6b, 0xd6, 0xbd, 0xb1, 0xda, 0x67, 0x0c, 0x7f, 0x14, 0xa9, 0xc2, 0xce, + 0xa5, 0x18, 0x73, 0xfe, 0x95, 0x28, 0x43, 0x4f, 0x24, 0x99, 0xf2, 0x81, 0xea, 0x57, 0x3c, + 0x30, 0x5b, 0xe6, 0x8d, 0xe1, 0x8a, 0x37, 0x5c, 0x50, 0x3b, 0x86, 0xed, 0x9e, 0xf5, 0x48, + 0x23, 0x2f, 0x44, 0xf9, 0x92, 0x1f, 0x74, 0xc9, 0xa2, 0xae, 0xc5, 0x78, 0x13, 0x60, 0x0b, + 0xb6, 0xdd, 0xd1, 0xba, 0x07, 0x6c, 0xdf, 0xb4, 0x09, 0x62, 0x6e, 0x05, 0xb8, 0xd3, 0xa0, + 0xcb, 0x76, 0x1d, 0x11, 0x7a, 0xc7, 0xac, 0x21, 0x4a, 0xf7, 0x9c, 0x90, 0xfb, 0x46, 0x2d, + 0x5e, 0x35, 0x88, 0xe3, 0xef, 0x84, 0x39, 0x52, 0x3e, 0x55, 0xe8, 0x83, 0x8f, 0xe4, 0x59, + 0x32, 0x41, 0x2a, 0x97, 0xfc, 0xf0, 0x9b, 0x26, 0x4d, 0xc0, 0xab, 0x16, 0x7d, 0x71, 0x1a, + 0xa7, 0xcc, 0xbf, 0xd4, 0x69, 0x02, 0x0e, 0x65, 0xd8, 0xb3, 0xa3, 0xc8, 0x75, 0x1e, 0x12, + 0x79, 0xc4, 0xaf, 0xdc, 0xb7, 0x0a, 0x61, 0x6d, 0x06, 0xbb, 0xd0, 0x5d, 0x36, 0x8b, 0xe0, + 0xec, 0x87, 0x3a, 0x51, 0x22, 0x49, 0xf4, 0x9f, 0x93, 0xf8, 0x45, 0x2e, 0x42, 0x29, 0x94, + 0xff, 0xf3, 0x98, 0x25, 0x4e, 0x3d, 0x56, 0xeb, 0x80, 0x8c, 0xe7, 0x5a, 0x31, 0xbc, 0xd7, + 0x6a, 0x01, 0x0d, 0x66, 0xdb, 0xb0, 0xc3, 0xa8, 0x15, 0x7e, 0x72, 0x19, 0xa4, 0xcf, 0x7c, + 0x17, 0xaa, 0xc1, 0xcd, 0xa6, 0x1b, 0x70, 0x03, 0x68, 0xd5, 0xbe, 0xb2, 0xd9, 0x64, 0x0f, + 0x82, 0xe9, 0x54, 0x3f, 0x33, 0x58, 0xe5, 0x8e, 0xfd, 0x96, 0x2b, 0x40, 0x4c, 0x27, 0x9a, + 0xf1, 0x9d, 0xf6, 0x4b, 0x20, 0x2c, 0x47, 0xfa, 0x91, 0xe2, 0x89, 0x34, 0x5f, 0x53, 0x38, + 0x85, 0xee, 0x63, 0x08, 0xb5, 0xde, 0xd2, 0xb9, 0x04, 0x6f, 0x1c, 0x77, 0xca, 0xa1, 0xad, + 0xc6, 0x7b, 0x10, 0x00, 0x6c, 0xd8, 0xb4, 0xad, 0xc1, 0x75, 0x19, 0x47, 0x2b, 0x9f, 0xf3, + 0xea, 0x86, 0x32, 0x5e, 0x8e, 0xe2, 0x56, 0x3a, 0x23, 0x4f, 0xfb, 0x97, 0xc9, 0xa5, 0x11, + 0x7d, 0x64, 0x08, 0xbc, 0xd0, 0x01, 0x6d, 0xd9, 0xb5, 0xac, 0xc0, 0x74, 0x18, 0x46, 0x2a, + 0x9e, 0xf2, 0xeb, 0x87, 0x33, 0x5f, 0x8f, 0xe3, 0x57, 0x3b, 0x22, 0x4e, 0xfa, 0x96, 0xc8, + 0xa4, 0x10, 0x7c, 0x65, 0x09, 0xbd, 0xd1, 0x02, 0x6e, 0xda, 0xb6, 0xaf, 0xc3, 0x77, 0x1b, + 0x45, 0x29, 0x9d, 0xf1, 0xe8, 0x84, 0x30, 0x5c, 0x8c, 0xe0, 0x54, 0x38, 0x21, 0x4d, 0xf9, + 0x95, 0xcb, 0xa7, 0x13, 0x7f, 0x66, 0x0a, 0xbe, 0xd2, 0x03, 0x6f, 0xdb, 0xb7, 0xae, 0xc2, + 0x76, 0x1a, 0x44, 0x28, 0x9c, 0xf0, 0xe9, 0x85, 0x31, 0x5d, 0x8d, 0xe1, 0x55, 0x39, 0x20, + 0x4c, 0xf8, 0x94, 0xca, 0xa6, 0x12, 0x7e, 0x67, 0x0b, 0xbf, 0xd3, 0x04, 0x68, 0xdc, 0xb0, + 0xa9, 0xc5, 0x71, 0x1d, 0x43, 0x2f, 0x9b, 0xf7, 0xee, 0x82, 0x36, 0x5a, 0x8a, 0xe6, 0x52, + 0x3e, 0x27, 0x4b, 0xff, 0x93, 0xcd, 0xa1, 0x15, 0x79, 0x60, 0x0c, 0xb8, 0xd4, 0x05, 0x69, + 0xdd, 0xb1, 0xa8, 0xc4, 0x70, 0x1c, 0x42, 0x2e, 0x9a, 0xf6, 0xef, 0x83, 0x37, 0x5b, 0x8b, + 0xe7, 0x53, 0x3f, 0x26, 0x4a, 0xfe, 0x92, 0xcc, 0xa0, 0x14, 0x78, 0x61, 0x0d, 0xb9, 0xd5, + 0x06, 0x6a, 0xde, 0xb2, 0xab, 0xc7, 0x73, 0x1f, 0x41, 0x2d, 0x99, 0xf5, 0xec, 0x80, 0x34, + 0x58, 0x88, 0xe4, 0x50, 0x3c, 0x25, 0x49, 0xfd, 0x91, 0xcf, 0xa3, 0x17, 0x7b, 0x62, 0x0e, + 0xba, 0xd6, 0x07, 0x6b, 0xdf, 0xb3, 0xaa, 0xc6, 0x72, 0x1e, 0x40, 0x2c, 0x98, 0xf4, 0xed, + 0x81, 0x35, 0x59, 0x89, 0xe5, 0x51, 0x3d, 0x24, 0x48, 0xfc, 0x90, 0xce, 0xa2, 0x16, 0x7a, + 0x63, 0x0f, 0xbb, 0xd7, 0x00, 0x6d, 0xda, 0xb7, 0xa9, 0xc4, 0x73, 0x1e, 0x4f, 0x22, 0x95, + 0xf8, 0xe6, 0x8b, 0x3c, 0x51, 0x9e, 0xf3, 0x44, 0x29, 0x37, 0x5a, 0xed, 0x80, 0xd1, 0xbc, + 0x0b, 0x66, 0x78, 0x15, 0xa2, 0xcf, 0x21, 0x4c, 0xfb, 0x96, 0x88, 0xe5, 0x52, 0x3f, 0x6e, + 0x03, 0xb4, 0xd9, 0xc7, 0xaa, 0x1d, 0x70, 0xbf, 0xd2, 0x65, 0x08, 0x16, 0x7b, 0xcc, 0xa1, + 0xf0, 0x9d, 0x2a, 0x47, 0x59, 0x34, 0x83, 0xee, 0x42, 0x2f, 0x98, 0xf5, 0xeb, 0x86, 0x31, + 0x5c, 0x0d, 0x60, 0xd7, 0xba, 0xa4, 0xc9, 0x7e, 0x13, 0xdc, 0xb1, 0x06, 0x6b, 0x75, 0x18, + 0xaf, 0xc2, 0x93, 0xfe, 0x49, 0x24, 0x3a, 0x57, 0xe0, 0x8d, 0x63, 0x0e, 0xb9, 0xd4, 0xca, + 0xa7, 0x10, 0x7d, 0x2c, 0x41, 0xf6, 0x9b, 0x85, 0xe8, 0x5f, 0x32, 0xfd, 0x90, 0x27, 0x4a, + 0x54, 0x39, 0x8e, 0xe3, 0xb2, 0xdf, 0x68, 0x05, 0x1b, 0x76, 0xc1, 0xac, 0x84, 0xe9, 0x5e, + 0x33, 0x2d, 0x40, 0xf7, 0x9a, 0xcb, 0xa6, 0x11, 0x7c, 0x62, 0x0f, 0xb8, 0xd5, 0x1a, 0x77, + 0xc0, 0xad, 0xb3, 0xde, 0x69, 0x04, 0x55, 0x38, 0x8f, 0xe2, 0xfc, 0x91, 0x26, 0x4b, 0xa5, + 0xc8, 0x7f, 0x12, 0x0c, 0x61, 0xd6, 0xbb, 0xea, 0x87, 0x30, 0x5d, 0x43, 0x2e, 0x99, 0xf4, + 0x3b, 0x56, 0xe1, 0x8c, 0x92, 0xff, 0x48, 0x25, 0x74, 0x19, 0xae, 0xc3, 0xdd, 0xb0, 0x07, + 0x6a, 0xc6, 0xab, 0x1c, 0x71, 0x6f, 0x02, 0xb5, 0xd8, 0x89, 0xe4, 0x53, 0x3e, 0x20, 0x4d, + 0xfa, 0x97, 0x58, 0x35, 0x82, 0xef, 0xf1, 0x9c, 0x2b, 0x46, 0x17, 0x7a, 0xcd, 0xa0, 0xbe, + 0xd3, 0x64, 0x09, 0xe7, 0x8a, 0x3d, 0x50, 0x4e, 0x23, 0x94, 0xf9, 0xa8, 0xc5, 0x72, 0x1f, + 0x01, 0x6c, 0xdb, 0xb6, 0x79, 0x14, 0xa3, 0xce, 0xd0, 0xbd, 0x0a, 0x67, 0x36, 0x5b, 0xec, + 0x81, 0x9f, 0xf2, 0x45, 0x28, 0x00, 0x6e, 0xdc, 0xb2, 0xa5, 0xcb, 0x79, 0x17, 0x57, 0x39, + 0x8b, 0xe5, 0xf2, 0x9c, 0x2e, 0x40, 0xae, 0xc0, 0x72, 0x1c, 0x0b, 0x65, 0xd7, 0xb9, 0xf9, + 0x97, 0x25, 0x4b, 0x5c, 0x32, 0x80, 0xee, 0x41, 0x2f, 0x9d, 0xf3, 0xe4, 0x8a, 0x38, 0x56, + 0x16, 0x78, 0xca, 0xa4, 0xb3, 0xdd, 0x6f, 0x01, 0xef, 0x81, 0x33, 0x5d, 0x4a, 0x24, 0x96, + 0xf8, 0xb8, 0xd6, 0x64, 0x0a, 0x1d, 0x73, 0xc1, 0xaf, 0x82, 0xec, 0x5e, 0x30, 0x27, 0x49, + 0xfb, 0x95, 0xd5, 0xbb, 0x09, 0x67, 0x70, 0x1e, 0xac, 0xc2, 0x2c, 0x42, 0xf0, 0x9e, 0x89, + 0xe7, 0x55, 0x3b, 0x7b, 0x15, 0xa7, 0xc9, 0xde, 0xb0, 0x02, 0x6c, 0xc3, 0xad, 0x1f, 0x71, + 0x66, 0x08, 0xba, 0xd4, 0x94, 0xfa, 0x48, 0x26, 0x31, 0x5f, 0xed, 0x83, 0x6d, 0x03, 0xb1, + 0xdf, 0xc8, 0xa6, 0x14, 0x7a, 0x3a, 0x54, 0xe6, 0x88, 0x9f, 0xf1, 0x43, 0x2d, 0x19, 0x77, + 0xc5, 0xab, 0xbc, 0xd2, 0x60, 0x0e, 0x4e, 0x20, 0x92, 0xfc, 0xeb, 0x85, 0x37, 0x59, 0xb7, + 0xd9, 0x6b, 0x05, 0x12, 0x7c, 0xce, 0xa0, 0xe0, 0x8e, 0x3c, 0x52, 0x45, 0x2b, 0x99, 0xf7, + 0x58, 0x36, 0x84, 0xea, 0xfd, 0x93, 0x21, 0x4f, 0x0f, 0x61, 0xd3, 0xbd, 0xaa, 0xc4, 0x76, + 0x18, 0xf6, 0x98, 0x2a, 0x44, 0x53, 0x3d, 0x8f, 0xe1, 0xa1, 0xcf, 0x7d, 0x13, 0x04, 0x6a, + 0xd8, 0xb6, 0x9b, 0xf5, 0x47, 0x29, 0x3e, 0x50, 0xe2, 0x8c, 0xcc, 0xa2, 0x10, 0x7e, 0x69, + 0x07, 0xb5, 0xdb, 0x35, 0x5b, 0xe9, 0x87, 0x90, 0xfe, 0x4c, 0x22, 0x62, 0x0c, 0xbe, 0xd0, + 0xc7, 0xa9, 0x1b, 0x75, 0xda, 0xb4, 0x06, 0x68, 0x7f, 0x11, 0xa3, 0xcd, 0x8d, 0xe3, 0x51, + 0x3f, 0x28, 0x46, 0xf4, 0x9a, 0x74, 0x1a, 0xa8, 0xc6, 0xd1, 0xbf, 0x0d, 0x63, 0x23, 0x4d, + 0xff, 0x91, 0x86, 0xe8, 0x5a, 0x34, 0x00, 0x6f, 0xde, 0xb1, 0xa1, 0xce, 0x7f, 0x10, 0x5f, + 0x30, 0x81, 0xee, 0xfe, 0x91, 0x20, 0x4f, 0xbe, 0xd1, 0x60, 0x0f, 0x1f, 0x70, 0xc1, 0xae, + 0xe1, 0x8e, 0x3f, 0x50, 0x40, 0x2f, 0x9e, 0xf1, 0x61, 0x0e, 0xbf, 0xd0, 0xc0, 0xaf, 0x1e, + 0x71, 0x3e, 0x51, 0xe0, 0x8f, 0x9f, 0xf0, 0x41, 0x2e, 0xdf, 0xb0, 0x01, 0x6e, 0x7e, 0x11, + 0xa0, 0xcf, 0x80, 0xef, 0x5e, 0x31, 0x21, 0x4e, 0xff, 0x90, 0xc2, 0xad, 0x1c, 0x73, 0x63, + 0x0c, 0xbd, 0xd2, 0x9d, 0xf2, 0x43, 0x2c, 0x3c, 0x53, 0xe2, 0x8d, 0x7c, 0x13, 0xa2, 0xcd, + 0xdd, 0xb2, 0x03, 0x6c, 0x23, 0x4c, 0xfd, 0x92, 0x82, 0xed, 0x5c, 0x33, 0xa3, 0xcc, 0x7d, + 0x12, 0x02, 0x6d, 0xdc, 0xb3, 0xfc, 0x93, 0x22, 0x4d, 0x5d, 0x32, 0x83, 0xec, 0x1d, 0x72, + 0xc3, 0xac, 0xbc, 0xd3, 0x62, 0x0d, 0x42, 0x2d, 0x9c, 0xf3, 0xe3, 0x8c, 0x3d, 0x52, 0x99, + 0xf6, 0x47, 0x28, 0x38, 0x57, 0xe6, 0x89, 0xc6, 0xa9, 0x18, 0x77, 0x67, 0x08, 0xb9, 0xd6, + 0x27, 0x48, 0xf9, 0x96, 0x86, 0xe9, 0x58, 0x37, 0x78, 0x17, 0xa6, 0xc9, 0xd9, 0xb6, 0x07, + 0x68, 0xf8, 0x97, 0x26, 0x49, 0x59, 0x36, 0x87, 0xe8, 0xa7, 0xc8, 0x79, 0x16, 0x06, 0x69, + 0xd8, 0xb7, 0x46, 0x29, 0x98, 0xf7, 0xe7, 0x88, 0x39, 0x56, 0x19, 0x76, 0xc7, 0xa8, 0xb8, + 0xd7, 0x66, 0x09, 0x5b, 0x34, 0x85, 0xea, 0xfa, 0x95, 0x24, 0x4b, 0x04, 0x6b, 0xda, 0xb5, + 0xa5, 0xca, 0x7b, 0x14, 0xe5, 0x8a, 0x3b, 0x54, 0x44, 0x2b, 0x9a, 0xf5, 0xba, 0xd5, 0x64, + 0x0b, 0x1b, 0x74, 0xc5, 0xaa, 0x3a, 0x55, 0xe4, 0x8b, 0x9b, 0xf4, 0x45, 0x2a, 0x65, 0x0a, + 0xbb, 0xd4, 0xc4, 0xab, 0x1a, 0x75, 0x84, 0xeb, 0x5a, 0x35, 0x25, 0x4a, 0xfb, 0x94, 0xdb, + 0xb4, 0x05, 0x6a, 0x7a, 0x15, 0xa4, 0xcb, 0x00, 0x70, 0xe0, 0x90, 0xdd, 0xad, 0x3d, 0x4d, + 0xa7, 0xd7, 0x47, 0x37, 0x7a, 0x0a, 0x9a, 0xea, 0x53, 0x23, 0xb3, 0xc3, 0x8e, 0xfe, 0x6e, + 0x1e, 0xf4, 0x84, 0x14, 0x64, 0x29, 0x59, 0xc9, 0xb9, 0xa6, 0xd6, 0x46, 0x36, 0x7b, 0x0b, + 0x9b, 0xeb, 0x01, 0x71, 0xe1, 0x91, 0xdc, 0xac, 0x3c, 0x4c, 0xf5, 0x85, 0x15, 0x65, 0x28, + 0x58, 0xc8, 0xb8, 0x52, 0x22, 0xb2, 0xc2, 0x8f, 0xff, 0x6f, 0x1f, 0x51, 0x21, 0xb1, 0xc1, + 0x8c, 0xfc, 0x6c, 0x1c, 0xf6, 0x86, 0x16, 0x66, 0x2b, 0x5b, 0xcb, 0xbb, 0x02, 0x72, 0xe2, + 0x92, 0xdf, 0xaf, 0x3f, 0x4f, 0xa5, 0xd5, 0x45, 0x35, 0x78, 0x08, 0x98, 0xe8, 0xf7, 0x87, + 0x17, 0x67, 0x2a, 0x5a, 0xca, 0xba, 0x50, 0x20, 0xb0, 0xc0, 0x8d, 0xfd, 0x6d, 0x1d, 0xa4, + 0xd4, 0x44, 0x34, 0x79, 0x09, 0x99, 0xe9, 0x03, 0x73, 0xe3, 0x93, 0xde, 0xae, 0x3e, 0x4e, + 0xa2, 0xd2, 0x42, 0x32, 0x7f, 0x0f, 0x9f, 0xef, 0x05, 0x75, 0xe5, 0x95, 0xd8, 0xa8, 0x38, + 0x48, 0xf1, 0x81, 0x11, 0x61, 0x2c, 0x5c, 0xcc, 0xbc, 0x56, 0x26, 0xb6, 0xc6, 0x8b, 0xfb, + 0x6b, 0x1b, 0x04, 0x74, 0xe4, 0x94, 0xd9, 0xa9, 0x39, 0x49, 0xa3, 0xd3, 0x43, 0x33, 0x7e, + 0x0e, 0x9e, 0xee, 0x57, 0x27, 0xb7, 0xc7, 0x8a, 0xfa, 0x6a, 0x1a, 0xf0, 0x80, 0x10, 0x60, + 0x2d, 0x5d, 0xcd, 0xbd, 0xf3, 0x83, 0x13, 0x63, 0x2e, 0x5e, 0xce, 0xbe, 0x54, 0x24, 0xb4, + 0xc4, 0x89, 0xf9, 0x69, 0x19, 0xa0, 0xd0, 0x40, 0x30, 0x7d, 0x0d, 0x9d, 0xed, 0x07, 0x77, + 0xe7, 0x97, 0xda, 0xaa, 0x3a, 0x4a, 0x55, 0x25, 0xb5, 0xc5, 0x88, 0xf8, 0x68, 0x18, 0xf2, + 0x82, 0x12, 0x62, 0x2f, 0x5f, 0xcf, 0xbf, 0x06, 0x76, 0xe6, 0x96, 0xdb, 0xab, 0x3b, 0x4b, + 0xa1, 0xd1, 0x41, 0x31, 0x7c, 0x0c, 0x9c, 0xec, 0x00, 0x71, 0xe2, 0x93, 0xd9, 0xa8, 0x3b, + 0x4a, 0xaf, 0xde, 0x4d, 0x3c, 0x76, 0x07, 0x94, 0xe5, 0x43, 0x32, 0xa1, 0xd0, 0x9a, 0xeb, + 0x78, 0x09, 0xec, 0x9d, 0x0e, 0x7f, 0x35, 0x44, 0xd7, 0xa6, 0x86, 0xf7, 0x64, 0x15, 0x5f, + 0x2e, 0xbd, 0xcc, 0x29, 0x58, 0xcb, 0xba, 0xf0, 0x81, 0x12, 0x63, 0xc5, 0xb4, 0x27, 0x56, + 0x1c, 0x6d, 0xfe, 0x8f, 0x6a, 0x1b, 0x88, 0xf9, 0xb3, 0xc2, 0x51, 0x20, 0x11, 0x60, 0xf3, + 0x82, 0xc8, 0xb9, 0x2a, 0x5b, 0xbe, 0xcf, 0x5c, 0x2d, 0x67, 0x16, 0x85, 0xf4, 0x52, 0x23, + 0xb0, 0xc1, 0x8b, 0xfa, 0x69, 0x18, 0xfd, 0x8c, 0x1f, 0x6e, 0x24, 0x55, 0xc6, 0xb7, 0x97, + 0xe6, 0x75, 0x04, 0x4e, 0x3f, 0xac, 0xdd, 0x38, 0x49, 0xda, 0xab, 0xe1, 0x90, 0x03, 0x72, + 0xd4, 0xa5, 0x36, 0x47, 0x0d, 0x7c, 0xef, 0x9e, 0x7b, 0x0a, 0x99, 0xe8, 0xa2, 0xd3, 0x40, + 0x31, 0x22, 0x53, 0xc0, 0xb1, 0xfb, 0x8a, 0x19, 0x68, 0x8d, 0xfc, 0x6f, 0x1e, 0x54, 0x25, + 0xb6, 0xc7, 0x61, 0x10, 0x83, 0xf2, 0xb8, 0xc9, 0x5a, 0x2b, 0xce, 0xbf, 0x2c, 0x5d, 0x17, + 0x66, 0xf5, 0x84, 0xa4, 0xd5, 0x46, 0x37, 0x7d, 0x0c, 0x9f, 0xee, 0x0b, 0x7a, 0xe9, 0x98, + 0xd2, 0xa3, 0x30, 0x41, 0xe7, 0x96, 0x05, 0x74, 0x3e, 0x4f, 0xdc, 0xad, 0x48, 0x39, 0xaa, + 0xdb, 0x91, 0xe0, 0x73, 0x02, 0x33, 0x42, 0xd1, 0xa0, 0xea, 0x9b, 0x08, 0x79, 0x9c, 0xed, + 0x7e, 0x0f, 0x45, 0x34, 0xa7, 0xd6, 0x70, 0x01, 0x92, 0xe3, 0xa9, 0xd8, 0x4b, 0x3a, 0xdf, + 0xae, 0x3d, 0x4c, 0x06, 0x77, 0xe4, 0x95, 0xb5, 0xc4, 0x57, 0x26, 0x6c, 0x1d, 0x8e, 0xff, + 0x1a, 0x6b, 0xf8, 0x89, 0xc3, 0xb2, 0x21, 0x50, 0xf6, 0x87, 0x14, 0x65, 0x2f, 0x5e, 0xcd, + 0xbc, 0x59, 0x28, 0xbb, 0xca, 0x80, 0xf1, 0x62, 0x13, 0x00, 0x72, 0xe4, 0x96, 0xd5, 0xa7, + 0x31, 0x43, 0xb7, 0xc5, 0x53, 0x21, 0x62, 0x10, 0x86, 0xf4, 0x73, 0x01, 0x97, 0xe5, 0xa6, + 0xd4, 0x42, 0x30, 0xc4, 0xb6, 0x20, 0x52, 0x11, 0x63, 0xf5, 0x87, 0xe6, 0x94, 0x02, 0x70, + 0x33, 0x41, 0xd7, 0xa5, 0x51, 0x23, 0xb5, 0xc7, 0x84, 0xf6, 0x60, 0x12, 0x95, 0xe7, 0x71, + 0x03, 0x40, 0x32, 0xa4, 0xd6, 0x22, 0x50, 0xc6, 0xb4, 0xf7, 0x85, 0x13, 0x61, 0xd1, 0xa3, + 0x35, 0x47, 0x04, 0x76, 0xe0, 0x92, 0x66, 0x14, 0x82, 0xf0, 0xb3, 0xc1, 0x57, 0x25, 0xa2, + 0xd0, 0x46, 0x34, 0x77, 0x05, 0x93, 0xe1, 0x15, 0x67, 0xf1, 0x83, 0xc0, 0xb2, 0x24, 0x56, + 0x37, 0x45, 0xd3, 0xa1, 0xe2, 0x90, 0x06, 0x74, 0x80, 0xf2, 0x64, 0x16, 0x55, 0x27, 0xb1, + 0xc3, 0x44, 0x36, 0xa0, 0xd2, 0x91, 0xe3, 0x75, 0x07, 0xf3, 0x81, 0x17, 0x65, 0x26, 0x54, + 0xc2, 0xb0, 0xbf, 0xcd, 0x5b, 0x29, 0x6a, 0x18, 0x8e, 0xfc, 0x08, 0x7a, 0xec, 0x9e, 0xdd, + 0xaf, 0x39, 0x4b, 0xcc, 0xbe, 0x28, 0x5a, 0x19, 0x6b, 0xfd, 0x8f, 0x7b, 0x09, 0x9f, 0xed, + 0xae, 0xdc, 0x4a, 0x38, 0x59, 0x2b, 0xbd, 0xcf, 0x8c, 0xfe, 0x68, 0x1a, 0xee, 0x9c, 0x0a, + 0x78, 0x3b, 0x49, 0xdf, 0xad, 0x2a, 0x58, 0xce, 0xbc, 0xff, 0x8d, 0x1b, 0x69, 0x9d, 0xef, + 0x79, 0x0b, 0x48, 0x3a, 0xac, 0xde, 0x6e, 0x1c, 0x8a, 0xf8, 0xbb, 0xc9, 0x5f, 0x2d, 0xd9, + 0xab, 0x3d, 0x4f, 0x0c, 0x7e, 0xe8, 0x9a, 0x1d, 0x6f, 0xf9, 0x8b, 0xc8, 0xba, 0x2c, 0x5e, + 0xaa, 0xd8, 0x4e, 0x3c, 0x7f, 0x0d, 0x9b, 0xe9, 0x88, 0xfa, 0x6c, 0x1e, 0x5d, 0x2f, 0xb9, + 0xcb, 0x3f, 0x4d, 0xdb, 0xa9, 0xea, 0x98, 0x0e, 0x7c, 0xfb, 0x89, 0x1f, 0x6d, 0x2e, 0x5c, + 0xca, 0xb8, 0x4c, 0x3e, 0xa8, 0xda, 0x99, 0xeb, 0x7d, 0x0f, 0x00, 0x73, 0xe6, 0x95, 0xd1, + 0xa2, 0x37, 0x44, 0xbf, 0xcc, 0x59, 0x2a, 0x6e, 0x1d, 0x88, 0xfb, 0x63, 0x10, 0x85, 0xf6, + 0xb2, 0xc1, 0x54, 0x27, 0xdc, 0xaf, 0x3a, 0x49, 0x0d, 0x7e, 0xeb, 0x98, 0xc6, 0xb5, 0x20, + 0x53, 0x17, 0x64, 0xf1, 0x82, 0x79, 0x0a, 0x9f, 0xec, 0xa8, 0xdb, 0x4e, 0x3d, 0xa5, 0xd6, + 0x43, 0x30, 0x74, 0x07, 0x92, 0xe1, 0x1a, 0x69, 0xfc, 0x8f, 0xcb, 0xb8, 0x2d, 0x5e, 0x91, + 0xe2, 0x77, 0x04, 0x40, 0x33, 0xa6, 0xd5, 0x2e, 0x5d, 0xc8, 0xbb, 0xff, 0x8c, 0x19, 0x6a, + 0xf2, 0x81, 0x14, 0x67, 0x23, 0x50, 0xc5, 0xb6, 0x4d, 0x3e, 0xab, 0xd8, 0x9c, 0xef, 0x7a, + 0x09, 0x57, 0x24, 0xb1, 0xc2, 0x86, 0xf5, 0x60, 0x13, 0xe8, 0x9b, 0x0e, 0x7d, 0x39, 0x4a, + 0xdf, 0xac, 0x34, 0x47, 0xd2, 0xa1, 0xe5, 0x96, 0x03, 0x70, 0x8b, 0xf8, 0x6d, 0x1e, 0x5a, + 0x29, 0xbc, 0xcf, 0x3f, 0x4c, 0xd9, 0xaa, 0xee, 0x9d, 0x08, 0x7b, 0x80, 0xf3, 0x66, 0x15, + 0x51, 0x22, 0xb7, 0xc4, 0x5c, 0x2f, 0xba, 0xc9, 0x8d, 0xfe, 0x6b, 0x18, 0xe3, 0x90, 0x05, + 0x76, 0x32, 0x41, 0xd4, 0xa7, 0xf9, 0x8a, 0x1f, 0x6c, 0x28, 0x5b, 0xce, 0xbd, 0x46, 0x35, + 0xa0, 0xd3, 0x97, 0xe4, 0x71, 0x02, 0x9a, 0xe9, 0x7c, 0x0f, 0x4b, 0x38, 0xad, 0xde, 0x25, + 0x56, 0xc3, 0xb0, 0xf4, 0x87, 0x12, 0x61, 0xae, 0xdd, 0x48, 0x3b, 0x7f, 0x0c, 0x99, 0xea, + 0x11, 0x62, 0xf7, 0x84, 0xc0, 0xb3, 0x26, 0x55, 0xcd, 0xbe, 0x2b, 0x58, 0x1c, 0x6f, 0xfa, + 0x89, 0x72, 0x01, 0x94, 0xe7, 0xa3, 0xd0, 0x45, 0x36, 0x68, 0x1b, 0x8e, 0xfd, 0xb9, 0xca, + 0x5f, 0x2c, 0xd7, 0xa4, 0x31, 0x42, 0x06, 0x75, 0xe0, 0x93, 0x0b, 0x78, 0xed, 0x9e, 0xda, + 0xa9, 0x3c, 0x4f, 0xb4, 0xc7, 0x52, 0x21, 0x65, 0x16, 0x83, 0xf0, 0x00, 0x74, 0xe8, 0x9c, + 0xcd, 0xb9, 0x25, 0x51, 0x87, 0xf3, 0x6f, 0x1b, 0x4a, 0x3e, 0xa2, 0xd6, 0x13, 0x67, 0xfb, + 0x8f, 0xde, 0xaa, 0x36, 0x42, 0x94, 0xe0, 0x7c, 0x08, 0x59, 0x2d, 0xb1, 0xc5, 0x26, 0x52, + 0xce, 0xba, 0xeb, 0x9f, 0x03, 0x77, 0xa1, 0xd5, 0x49, 0x3d, 0x6c, 0x18, 0x84, 0xf0, 0x35, + 0x41, 0xdd, 0xa9, 0xf8, 0x8c, 0x10, 0x64, 0xb2, 0xc6, 0x5a, 0x2e, 0x7f, 0x0b, 0x97, 0xe3, + 0x4c, 0x38, 0xa4, 0xd0, 0x81, 0xf5, 0x69, 0x1d, 0xcb, 0xbf, 0x23, 0x57, 0x06, 0x72, 0xee, + 0x9a, 0x5f, 0x2b, 0xb7, 0xc3, 0x92, 0xe6, 0x7a, 0x0e, 0xd8, 0xac, 0x30, 0x44, 0x15, 0x61, + 0xfd, 0x89, 0x6a, 0x1e, 0x82, 0xf6, 0xa7, 0xd3, 0x4f, 0x3b, 0xed, 0x99, 0x05, 0x71, 0x20, + 0x54, 0xc8, 0xbc, 0x79, 0x0d, 0x91, 0xe5, 0xb4, 0xc0, 0x5c, 0x28, 0xfe, 0x8a, 0x16, 0x62, + 0x33, 0x47, 0xdb, 0xaf, 0x98, 0xec, 0x70, 0x04, 0x55, 0x21, 0xbd, 0xc9, 0x1f, 0x6b, 0xf7, + 0x83, 0xd2, 0xa6, 0x3a, 0x4e, 0x8b, 0xff, 0x63, 0x17, 0x46, 0x32, 0xae, 0xda, 0x0c, 0x78, + 0xe4, 0x90, 0xc1, 0xb5, 0x29, 0x5d, 0xbe, 0xca, 0x56, 0x22, 0x73, 0x07, 0x9b, 0xef, 0x39, + 0x4d, 0xd1, 0xa5, 0xf4, 0x80, 0x1c, 0x68, 0xad, 0xd9, 0x45, 0x31, 0x60, 0x14, 0x88, 0xfc, + 0x2a, 0x5e, 0xc2, 0xb6, 0xe7, 0x93, 0x0f, 0x7b, 0xd4, 0xa0, 0x3c, 0x48, 0x19, 0x6d, 0xf1, + 0x85, 0x53, 0x27, 0xbb, 0xcf, 0x9e, 0xea, 0x76, 0x02, 0xc7, 0xb3, 0x2f, 0x5b, 0x0a, 0x7e, + 0xe2, 0x96, 0x40, 0x34, 0xa8, 0xdc, 0x8d, 0xf9, 0x65, 0x11, 0xf2, 0x86, 0x1a, 0x6e, 0x3f, + 0x4b, 0xd7, 0xa3, 0x75, 0x01, 0x9d, 0xe9, 0xb8, 0xcc, 0x50, 0x24, 0xe1, 0x95, 0x09, 0x7d, + 0x2c, 0x58, 0xc4, 0xb0, 0x66, 0x12, 0x8e, 0xfa, 0xab, 0xdf, 0x43, 0x37, 0x00, 0x75, 0xea, + 0x9f, 0xc9, 0xbc, 0x23, 0x56, 0x8f, 0xfa, 0x65, 0x10, 0x46, 0x33, 0xac, 0xd9, 0x03, 0x76, + 0xe9, 0x9c, 0xca, 0xbf, 0x20, 0x55, 0x8c, 0xf9, 0x66, 0x13, 0x45, 0x30, 0xaf, 0xda, 0x06, + 0x73, 0xec, 0x99, 0xcf, 0xba, 0x25, 0x50, 0x89, 0xfc, 0x63, 0x16, 0x40, 0x35, 0xaa, 0xdf, + 0x05, 0x70, 0xef, 0x9a, 0xcc, 0xb9, 0x26, 0x53, 0x8a, 0xff, 0x60, 0x15, 0x43, 0x36, 0xa9, + 0xdc, 0x0c, 0x79, 0xe6, 0x93, 0xc5, 0xb0, 0x2f, 0x5a, 0x83, 0xf6, 0x69, 0x1c, 0x4a, 0x3f, + 0xa0, 0xd5, 0x0f, 0x7a, 0xe5, 0x90, 0xc6, 0xb3, 0x2c, 0x59, 0x80, 0xf5, 0x6a, 0x1f, 0x49, + 0x3c, 0xa3, 0xd6, 0x0a, 0x7f, 0xe0, 0x95, 0xc3, 0xb6, 0x29, 0x5c, 0x85, 0xf0, 0x6f, 0x1a, + 0x4c, 0x39, 0xa6, 0xd3, 0x09, 0x7c, 0xe3, 0x96, 0xc0, 0xb5, 0x2a, 0x5f, 0x86, 0xf3, 0x6c, + 0x19, 0x4f, 0x3a, 0xa5, 0xd0, 0x18, 0x6d, 0xf2, 0x87, 0xd1, 0xa4, 0x3b, 0x4e, 0x97, 0xe2, + 0x7d, 0x08, 0x5e, 0x2b, 0xb4, 0xc1, 0x1b, 0x6e, 0xf1, 0x84, 0xd2, 0xa7, 0x38, 0x4d, 0x94, + 0xe1, 0x7e, 0x0b, 0x5d, 0x28, 0xb7, 0xc2, 0x1e, 0x6b, 0xf4, 0x81, 0xd7, 0xa2, 0x3d, 0x48, + 0x91, 0xe4, 0x7b, 0x0e, 0x58, 0x2d, 0xb2, 0xc7, 0x1d, 0x68, 0xf7, 0x82, 0xd4, 0xa1, 0x3e, + 0x4b, 0x92, 0xe7, 0x78, 0x0d, 0x5b, 0x2e, 0xb1, 0xc4, 0x14, 0x61, 0xfe, 0x8b, 0xdd, 0xa8, + 0x37, 0x42, 0x9b, 0xee, 0x71, 0x04, 0x52, 0x27, 0xb8, 0xcd, 0x17, 0x62, 0xfd, 0x88, 0xde, + 0xab, 0x34, 0x41, 0x98, 0xed, 0x72, 0x07, 0x51, 0x24, 0xbb, 0xce, 0x12, 0x67, 0xf8, 0x8d, + 0xdb, 0xae, 0x31, 0x44, 0x9d, 0xe8, 0x77, 0x02, 0x54, 0x21, 0xbe, 0xcb, 0x11, 0x64, 0xfb, + 0x8e, 0xd8, 0xad, 0x32, 0x47, 0x9e, 0xeb, 0x74, 0x01, 0x57, 0x22, 0xbd, 0xc8, 0x00, 0x76, + 0xec, 0x9a, 0xc5, 0xb3, 0x29, 0x5f, 0x97, 0xe1, 0x7b, 0x0d, 0x52, 0x24, 0xbe, 0xc8, 0x33, + 0x45, 0xdf, 0xa9, 0xf6, 0x80, 0x1a, 0x6c, 0xa4, 0xd2, 0x48, 0x3e, 0x61, 0x17, 0x8d, 0xfb, + 0x66, 0x10, 0x8a, 0xfc, 0xa3, 0xd5, 0x4f, 0x39, 0xf1, 0x87, 0x1d, 0x6b, 0x34, 0x42, 0xd8, + 0xae, 0x55, 0x23, 0xb9, 0xcf, 0x90, 0xe6, 0x7c, 0x0a, 0xc2, 0xb4, 0x2e, 0x58, 0x07, 0x71, + 0xeb, 0x9d, 0xcc, 0xba, 0x20, 0x56, 0x09, 0x7f, 0xe5, 0x93, 0x5b, 0x2d, 0xb7, 0xc1, 0x9e, + 0xe8, 0x72, 0x04, 0xff, 0x89, 0x13, 0x65, 0x3a, 0x4c, 0xd6, 0xa0, 0x68, 0x1e, 0x84, 0xf2, + 0xad, 0xdb, 0x41, 0x37, 0xaa, 0xdc, 0x46, 0x30, 0x6f, 0x19, 0x83, 0xf5, 0x3d, 0x4b, 0xd1, + 0xa7, 0xf8, 0x8e, 0x14, 0x62, 0x99, 0xef, 0x75, 0x03, 0x5c, 0x2a, 0xb0, 0xc6, 0x0e, 0x78, + 0xe2, 0x94, 0xcb, 0xbd, 0x27, 0x51, 0x85, 0xf3, 0x69, 0x1f, 0x40, 0x36, 0xac, 0xda, 0x12, + 0x64, 0xfe, 0x88, 0xd7, 0xa1, 0x3b, 0x4d, 0xb6, 0xc0, 0x5a, 0x2c, 0x73, 0x05, 0x9f, 0xe9, + 0x21, 0x57, 0xcd, 0xbb, 0xe4, 0x92, 0x08, 0x7e, 0xe3, 0x95, 0x0f, 0x79, 0x26, 0x50, 0xca, + 0xbc, 0x74, 0x02, 0x98, 0xee, 0xb1, 0xc7, 0x5d, 0x2b, 0xd0, 0xa6, 0x3c, 0x4a, 0x15, 0x63, + 0xf9, 0x8f, 0x47, 0x31, 0xab, 0xdd, 0x82, 0xf4, 0x6e, 0x18, 0x49, 0x3f, 0xa5, 0xd3, 0x8c, + 0xfa, 0x60, 0x16, 0xde, 0xa8, 0x32, 0x44, 0x1b, 0x6d, 0xf7, 0x81, 0x7a, 0x0c, 0x96, 0xe0, + 0xbf, 0xc9, 0x53, 0x25, 0xed, 0x9b, 0x01, 0x77, 0x28, 0x5e, 0xc4, 0xb2, 0x2f, 0x59, 0xc3, + 0xb5, 0xea, 0x9c, 0x06, 0x70, 0xb8, 0xce, 0x54, 0x22, 0x7d, 0x0b, 0x91, 0xe7, 0x1c, 0x6a, + 0xf0, 0x86, 0xd9, 0xaf, 0x35, 0x43, 0x8b, 0xfd, 0x67, 0x11, 0x4e, 0x38, 0xa2, 0xd4, 0x00, + 0x77, 0xee, 0x99, 0xc1, 0xb6, 0x2f, 0x58, 0x9f, 0xe8, 0x71, 0x06, 0x5e, 0x29, 0xb0, 0xc7, + 0x23, 0x54, 0xcd, 0xba, 0xe2, 0x95, 0x0c, 0x7b, 0xbc, 0xcb, 0x52, 0x25, 0x7d, 0x0a, 0x93, + 0xe4, 0x46, 0x31, 0xa8, 0xdf, 0x87, 0xf0, 0x69, 0x1e, 0xd9, 0xae, 0x37, 0x40, 0x18, 0x6f, + 0xf6, 0x81, 0x65, 0x12, 0x8b, 0xfc, 0xa4, 0xd3, 0x4a, 0x3d, 0xfa, 0x8d, 0x14, 0x63, 0x3b, + 0x4c, 0xd5, 0xa2, 0x8c, 0xfb, 0x62, 0x15, 0x4d, 0x3a, 0xa3, 0xd4, 0x13, 0x64, 0xfd, 0x8a, + 0xd2, 0xa5, 0x3c, 0x4b, 0xaf, 0xd8, 0x41, 0x36, 0x6e, 0x19, 0x80, 0xf7, 0x30, 0x47, 0xde, + 0xa9, 0xf1, 0x86, 0x1f, 0x68, 0xca, 0xbd, 0x24, 0x53, 0x0b, 0x7c, 0xe5, 0x92, 0x55, 0x22, + 0xbb, 0xcc, 0x94, 0xe3, 0x7a, 0x0d, 0xe9, 0x9e, 0x07, 0x70, 0x28, 0x5f, 0xc6, 0xb1, 0x76, + 0x01, 0x98, 0xef, 0xb7, 0xc0, 0x59, 0x2e, 0x05, 0x72, 0xeb, 0x9c, 0xc4, 0xb3, 0x2a, 0x5d, + 0x9a, 0xed, 0x74, 0x03, 0x5b, 0x2c, 0xb5, 0xc2, 0x26, 0x51, 0xc8, 0xbf, 0xe7, 0x90, 0x09, + 0x7e, 0xb9, 0xce, 0x57, 0x20, 0x78, 0x0f, 0x96, 0xe1, 0x43, 0x34, 0xad, 0xda, 0x82, 0xf5, + 0x6c, 0x1b, 0xdc, 0xab, 0x32, 0x45, 0x1d, 0x6a, 0xf3, 0x84, 0x60, 0x17, 0x8e, 0xf9, 0xa1, + 0xd6, 0x4f, 0x38, 0xff, 0x88, 0x11, 0x66, 0x3e, 0x49, 0xd0, 0xa7, 0x89, 0xfe, 0x67, 0x10, + 0x48, 0x3f, 0xa6, 0xd1, 0x16, 0x61, 0xf8, 0x8f, 0xd7, 0xa0, 0x39, 0x4e, 0xaa, 0xdd, 0x44, + 0x33, 0x6b, 0x1c, 0x85, 0xf2, 0x35, 0x42, 0xdb, 0xac, 0xf4, 0x83, 0x1a, 0x6d, 0xcf, 0xb8, + 0x21, 0x56, 0x0e, 0x79, 0xe0, 0x97, 0x50, 0x27, 0xbe, 0xc9, 0x91, 0xe6, 0x7f, 0x08, 0xec, + 0x9b, 0x02, 0x75, 0x2d, 0x5a, 0xc3, 0xb4, 0x73, 0x04, 0x9d, 0xea, 0xb2, 0xc5, 0x5c, 0x2b, + 0x00, 0x78, 0xf0, 0x88, 0xfd, 0x85, 0x0d, 0x75, 0xe7, 0x9f, 0x17, 0x6f, 0x1a, 0x62, 0xea, + 0x92, 0xd3, 0xab, 0x23, 0x5b, 0x2e, 0x56, 0xde, 0xa6, 0x34, 0x4c, 0xc4, 0xbc, 0xc9, 0xb1, + 0x39, 0x41, 0xbb, 0xc3, 0x4b, 0x33, 0x46, 0x3e, 0xb6, 0xce, 0x5c, 0x24, 0xac, 0xd4, 0xa1, + 0xd9, 0x51, 0x29, 0x68, 0x10, 0x98, 0xe0, 0x95, 0xed, 0x65, 0x1d, 0x8f, 0xf7, 0x7f, 0x07, + 0x72, 0x0a, 0x82, 0xfa, 0x6b, 0x13, 0x9b, 0xe3, 0x96, 0xee, 0x66, 0x1e, 0x8c, 0xf4, 0x7c, + 0x04, 0x71, 0x09, 0x81, 0xf9, 0xb8, 0xc0, 0x48, 0x30, 0x45, 0x3d, 0xb5, 0xcd, 0x5f, 0x27, + 0xaf, 0xd7, 0xa2, 0xda, 0x52, 0x2a, 0xd0, 0xa8, 0x20, 0x58, 0x2d, 0x55, 0xdd, 0xa5, 0x37, + 0x4f, 0xc7, 0xbf, 0xca, 0xb2, 0x3a, 0x42, 0x03, 0x7b, 0xf3, 0x8b, 0xfe, 0x86, 0x0e, 0x76, + 0xe4, 0x9c, 0x14, 0x6c, 0x19, 0x61, 0xe9, 0x91, 0xd6, 0xae, 0x26, 0x5e, 0x2b, 0x53, 0xdb, + 0xa3, 0x31, 0x49, 0xc1, 0xb9, 0xcc, 0xb4, 0x3c, 0x44, 0x05, 0x7d, 0xf5, 0x8d, 0xf8, 0x80, + 0x08, 0x70, 0xe2, 0x9a, 0x12, 0x6a, 0x1f, 0x67, 0xef, 0x97, 0x6d, 0x15, 0x9d, 0xe5, 0x90, + 0xe8, 0x60, 0x18, 0x8a, 0xf2, 0x7a, 0x02, 0x77, 0x0f, 0x87, 0xff, 0xbe, 0xc6, 0x4e, 0x36, + 0x43, 0x3b, 0xb3, 0xcb, 0x59, 0x21, 0xa9, 0xd1, 0xa4, 0xdc, 0x54, 0x2c, 0xbd, 0xc5, 0x4d, + 0x35, 0x40, 0x38, 0xb0, 0xc8, 0x5a, 0x22, 0xaa, 0xd2, 0xa7, 0xdf, 0x57, 0x2f, 0x6e, 0x16, + 0x9e, 0xe6, 0x93, 0xeb, 0x63, 0x1b, 0x89, 0xf1, 0x79, 0x01, 0x74, 0x0c, 0x84, 0xfc, 0x06, + 0x7e, 0xf6, 0x8e, 0xfb, 0x83, 0x0b, 0x73, 0xe1, 0x99, 0x11, 0x69, 0x1c, 0x64, 0xec, 0x94, + 0xd5, 0xad, 0x25, 0x5d, 0x28, 0x50, 0xd8, 0xa0, 0x32, 0x4a, 0xc2, 0xba, 0xcf, 0xb7, 0x3f, + 0x47, 0x00, 0x79, 0xf2, 0x8b, 0xf9, 0x80, 0x0b, 0x72, 0xef, 0x96, 0x1d, 0x64, 0x16, 0x6f, + 0xe4, 0x9d, 0xc3, 0xba, 0x31, 0x48, 0x3a, 0x43, 0xc8, 0xb1, 0x2c, 0x55, 0xde, 0xa7, 0xd5, + 0xac, 0x27, 0x5e, 0x9b, 0xe2, 0x69, 0x10, 0x62, 0x1b, 0x90, 0xe9, 0x74, 0x0d, 0x86, 0xff, + 0x8d, 0xf4, 0x7f, 0x06, 0x58, 0x21, 0xaa, 0xd3, 0xa1, 0xd8, 0x53, 0x2a, 0xb7, 0xce, 0x45, + 0x3c, 0x4e, 0x37, 0xbc, 0xc5, 0x2b, 0x52, 0xd9, 0xa0, 0xd2, 0xab, 0x20, 0x59, 0xc4, 0xbd, + 0x36, 0x4f, 0x3d, 0x44, 0xcf, 0xb6, 0xe8, 0x91, 0x1a, 0x63, 0x11, 0x68, 0xe3, 0x9a, 0x07, + 0x7e, 0xf5, 0x8c, 0xfe, 0x87, 0x0c, 0x75, 0xb0, 0xc9, 0x42, 0x3b, 0x49, 0x30, 0xbb, 0xc2, + 0x5f, 0x26, 0xad, 0xd4, 0xa6, 0xdf, 0x54, 0x2d, 0x73, 0x0a, 0x81, 0xf8, 0x8a, 0xf3, 0x78, + 0x01, 0x9c, 0xe5, 0x6e, 0x17, 0x65, 0x1c, 0x97, 0xee, 0x56, 0x2f, 0xa4, 0xdd, 0xaf, 0xd6, + 0x5d, 0x24, 0xb9, 0xc0, 0x4b, 0x32, 0x40, 0x39, 0xb2, 0xcb, 0x95, 0xec, 0x67, 0x1e, 0x6c, + 0x15, 0x9e, 0xe7, 0x7a, 0x03, 0x88, 0xf1, 0x83, 0xfa, 0x71, 0x08, 0xcd, 0xb4, 0x3f, 0x46, + 0x34, 0x4d, 0xc6, 0xbf, 0x22, 0x5b, 0xd0, 0xa9, 0xdb, 0xa2, 0x29, 0x50, 0x0e, 0x77, 0xfc, + 0x85, 0xf7, 0x8e, 0x05, 0x7c, 0xe1, 0x98, 0x13, 0x6a, 0x18, 0x61, 0xea, 0x93, 0x7d, 0x04, + 0x8f, 0xf6, 0x84, 0xfd, 0x76, 0x0f, 0x92, 0xeb, 0x60, 0x19, 0x6b, 0x12, 0x99, 0xe0, 0xbe, + 0xc7, 0x4c, 0x35, 0x47, 0x3e, 0xb5, 0xcc, 0x51, 0x28, 0xa3, 0xda, 0xa8, 0xd1, 0x5a, 0x23, + 0xe6, 0x9f, 0x14, 0x6d, 0x1f, 0x66, 0xed, 0x94, 0x09, 0x70, 0xfb, 0x82, 0xf0, 0x89, 0x02, + 0x7b, 0x25, 0x5c, 0xd7, 0xae, 0xdc, 0xa5, 0x2e, 0x57, 0xca, 0xb3, 0x38, 0x41, 0x33, 0x4a, + 0xc1, 0xb8, 0x00, 0x7a, 0xf4, 0x8e, 0xf5, 0x8f, 0x01, 0x7b, 0xf7, 0x8d, 0x03, 0x79, 0x02, + 0x78, 0xf6, 0x8c, 0xf3, 0x89, 0x07, 0x7d, 0x06, 0x7c, 0xf2, 0x88, 0x04, 0x7e, 0xf0, 0x8a, + 0xf1, 0x8b, 0x05, 0x7f, 0xfb, 0x81, 0x0f, 0x75, 0x0e, 0x74, 0xfa, 0x80, 0x0c, 0x76, 0xf8, + 0x82, 0xf9, 0x83, 0x0d, 0x77, 0x08, 0x72, 0xfc, 0x86, 0xfd, 0x87, 0x09, 0x73, 0xff, 0x85, + 0x0b, 0x71, 0x0a, 0x70, 0xfe, 0x84, 0xeb, 0x91, 0x1f, 0x65, 0x1e, 0x64, 0xea, 0x90, 0x1c, + 0x66, 0xe8, 0x92, 0xe9, 0x93, 0x1d, 0x67, 0x18, 0x62, 0xec, 0x96, 0xed, 0x97, 0x19, 0x63, + 0xef, 0x95, 0x1b, 0x61, 0x1a, 0x60, 0xee, 0x94, 0x10, 0x6a, 0xe4, 0x9e, 0xe5, 0x9f, 0x11, + 0x6b, 0xe7, 0x9d, 0x13, 0x69, 0x12, 0x68, 0xe6, 0x9c, 0xe3, 0x99, 0x17, 0x6d, 0x16, 0x6c, + 0xe2, 0x98, 0x14, 0x6e, 0xe0, 0x9a, 0xe1, 0x9b, 0x15, 0x6f, 0xcb, 0xb1, 0x3f, 0x45, 0x3e, + 0x44, 0xca, 0xb0, 0x3c, 0x46, 0xc8, 0xb2, 0xc9, 0xb3, 0x3d, 0x47, 0x38, 0x42, 0xcc, 0xb6, + 0xcd, 0xb7, 0x39, 0x43, 0xcf, 0xb5, 0x3b, 0x41, 0x3a, 0x40, 0xce, 0xb4, 0x30, 0x4a, 0xc4, + 0xbe, 0xc5, 0xbf, 0x31, 0x4b, 0xc7, 0xbd, 0x33, 0x49, 0x32, 0x48, 0xc6, 0xbc, 0xc3, 0xb9, + 0x37, 0x4d, 0x36, 0x4c, 0xc2, 0xb8, 0x34, 0x4e, 0xc0, 0xba, 0xc1, 0xbb, 0x35, 0x4f, 0x20, + 0x5a, 0xd4, 0xae, 0xd5, 0xaf, 0x21, 0x5b, 0xd7, 0xad, 0x23, 0x59, 0x22, 0x58, 0xd6, 0xac, + 0xd3, 0xa9, 0x27, 0x5d, 0x26, 0x5c, 0xd2, 0xa8, 0x24, 0x5e, 0xd0, 0xaa, 0xd1, 0xab, 0x25, + 0x5f, 0xdb, 0xa1, 0x2f, 0x55, 0x2e, 0x54, 0xda, 0xa0, 0x2c, 0x56, 0xd8, 0xa2, 0xd9, 0xa3, + 0x2d, 0x57, 0x28, 0x52, 0xdc, 0xa6, 0xdd, 0xa7, 0x29, 0x53, 0xdf, 0xa5, 0x2b, 0x51, 0x2a, + 0x50, 0xde, 0xa4, 0x00, 0x7b, 0xf6, 0x8d, 0xf1, 0x8a, 0x07, 0x7c, 0xff, 0x84, 0x09, 0x72, + 0x0e, 0x75, 0xf8, 0x83, 0xe3, 0x98, 0x15, 0x6e, 0x12, 0x69, 0xe4, 0x9f, 0x1c, 0x67, 0xea, + 0x91, 0xed, 0x96, 0x1b, 0x60, 0xdb, 0xa0, 0x2d, 0x56, 0x2a, 0x51, 0xdc, 0xa7, 0x24, 0x5f, + 0xd2, 0xa9, 0xd5, 0xae, 0x23, 0x58, 0x38, 0x43, 0xce, 0xb5, 0xc9, 0xb2, 0x3f, 0x44, 0xc7, + 0xbc, 0x31, 0x4a, 0x36, 0x4d, 0xc0, 0xbb, 0xab, 0xd0, 0x5d, 0x26, 0x5a, 0x21, 0xac, 0xd7, + 0x54, 0x2f, 0xa2, 0xd9, 0xa5, 0xde, 0x53, 0x28, 0x48, 0x33, 0xbe, 0xc5, 0xb9, 0xc2, 0x4f, + 0x34, 0xb7, 0xcc, 0x41, 0x3a, 0x46, 0x3d, 0xb0, 0xcb, 0x70, 0x0b, 0x86, 0xfd, 0x81, 0xfa, + 0x77, 0x0c, 0x8f, 0xf4, 0x79, 0x02, 0x7e, 0x05, 0x88, 0xf3, 0x93, 0xe8, 0x65, 0x1e, 0x62, + 0x19, 0x94, 0xef, 0x6c, 0x17, 0x9a, 0xe1, 0x9d, 0xe6, 0x6b, 0x10, 0x4b, 0x30, 0xbd, 0xc6, + 0xba, 0xc1, 0x4c, 0x37, 0xb4, 0xcf, 0x42, 0x39, 0x45, 0x3e, 0xb3, 0xc8, 0xa8, 0xd3, 0x5e, + 0x25, 0x59, 0x22, 0xaf, 0xd4, 0x57, 0x2c, 0xa1, 0xda, 0xa6, 0xdd, 0x50, 0x2b, 0x90, 0xeb, + 0x66, 0x1d, 0x61, 0x1a, 0x97, 0xec, 0x6f, 0x14, 0x99, 0xe2, 0x9e, 0xe5, 0x68, 0x13, 0x73, + 0x08, 0x85, 0xfe, 0x82, 0xf9, 0x74, 0x0f, 0x8c, 0xf7, 0x7a, 0x01, 0x7d, 0x06, 0x8b, 0xf0, + 0xe0, 0x9b, 0x16, 0x6d, 0x11, 0x6a, 0xe7, 0x9c, 0x1f, 0x64, 0xe9, 0x92, 0xee, 0x95, 0x18, + 0x63, 0x03, 0x78, 0xf5, 0x8e, 0xf2, 0x89, 0x04, 0x7f, 0xfc, 0x87, 0x0a, 0x71, 0x0d, 0x76, + 0xfb, 0x80, 0x3b, 0x40, 0xcd, 0xb6, 0xca, 0xb1, 0x3c, 0x47, 0xc4, 0xbf, 0x32, 0x49, 0x35, + 0x4e, 0xc3, 0xb8, 0xd8, 0xa3, 0x2e, 0x55, 0x29, 0x52, 0xdf, 0xa4, 0x27, 0x5c, 0xd1, 0xaa, + 0xd6, 0xad, 0x20, 0x5b, 0x00, 0x7c, 0xf8, 0x84, 0xed, 0x91, 0x15, 0x69, 0xc7, 0xbb, 0x3f, + 0x43, 0x2a, 0x56, 0xd2, 0xae, 0x93, 0xef, 0x6b, 0x17, 0x7e, 0x02, 0x86, 0xfa, 0x54, 0x28, + 0xac, 0xd0, 0xb9, 0xc5, 0x41, 0x3d, 0x3b, 0x47, 0xc3, 0xbf, 0xd6, 0xaa, 0x2e, 0x52, 0xfc, + 0x80, 0x04, 0x78, 0x11, 0x6d, 0xe9, 0x95, 0xa8, 0xd4, 0x50, 0x2c, 0x45, 0x39, 0xbd, 0xc1, + 0x6f, 0x13, 0x97, 0xeb, 0x82, 0xfe, 0x7a, 0x06, 0x76, 0x0a, 0x8e, 0xf2, 0x9b, 0xe7, 0x63, + 0x1f, 0xb1, 0xcd, 0x49, 0x35, 0x5c, 0x20, 0xa4, 0xd8, 0xe5, 0x99, 0x1d, 0x61, 0x08, 0x74, + 0xf0, 0x8c, 0x22, 0x5e, 0xda, 0xa6, 0xcf, 0xb3, 0x37, 0x4b, 0x4d, 0x31, 0xb5, 0xc9, 0xa0, + 0xdc, 0x58, 0x24, 0x8a, 0xf6, 0x72, 0x0e, 0x67, 0x1b, 0x9f, 0xe3, 0xde, 0xa2, 0x26, 0x5a, + 0x33, 0x4f, 0xcb, 0xb7, 0x19, 0x65, 0xe1, 0x9d, 0xf4, 0x88, 0x0c, 0x70, 0xec, 0x90, 0x14, + 0x68, 0x01, 0x7d, 0xf9, 0x85, 0x2b, 0x57, 0xd3, 0xaf, 0xc6, 0xba, 0x3e, 0x42, 0x7f, 0x03, + 0x87, 0xfb, 0x92, 0xee, 0x6a, 0x16, 0xb8, 0xc4, 0x40, 0x3c, 0x55, 0x29, 0xad, 0xd1, 0xd7, + 0xab, 0x2f, 0x53, 0x3a, 0x46, 0xc2, 0xbe, 0x10, 0x6c, 0xe8, 0x94, 0xfd, 0x81, 0x05, 0x79, + 0x44, 0x38, 0xbc, 0xc0, 0xa9, 0xd5, 0x51, 0x2d, 0x83, 0xff, 0x7b, 0x07, 0x6e, 0x12, 0x96, + 0xea, 0x9a, 0xe6, 0x62, 0x1e, 0x77, 0x0b, 0x8f, 0xf3, 0x5d, 0x21, 0xa5, 0xd9, 0xb0, 0xcc, + 0x48, 0x34, 0x09, 0x75, 0xf1, 0x8d, 0xe4, 0x98, 0x1c, 0x60, 0xce, 0xb2, 0x36, 0x4a, 0x23, + 0x5f, 0xdb, 0xa7, 0xa1, 0xdd, 0x59, 0x25, 0x4c, 0x30, 0xb4, 0xc8, 0x66, 0x1a, 0x9e, 0xe2, + 0x8b, 0xf7, 0x73, 0x0f, 0x32, 0x4e, 0xca, 0xb6, 0xdf, 0xa3, 0x27, 0x5b, 0xf5, 0x89, 0x0d, + 0x71, 0x18, 0x64, 0xe0, 0x9c, 0x00, 0x7d, 0xfa, 0x87, 0xe9, 0x94, 0x13, 0x6e, 0xcf, 0xb2, + 0x35, 0x48, 0x26, 0x5b, 0xdc, 0xa1, 0x83, 0xfe, 0x79, 0x04, 0x6a, 0x17, 0x90, 0xed, 0x4c, + 0x31, 0xb6, 0xcb, 0xa5, 0xd8, 0x5f, 0x22, 0x1b, 0x66, 0xe1, 0x9c, 0xf2, 0x8f, 0x08, 0x75, + 0xd4, 0xa9, 0x2e, 0x53, 0x3d, 0x40, 0xc7, 0xba, 0x98, 0xe5, 0x62, 0x1f, 0x71, 0x0c, 0x8b, + 0xf6, 0x57, 0x2a, 0xad, 0xd0, 0xbe, 0xc3, 0x44, 0x39, 0x36, 0x4b, 0xcc, 0xb1, 0xdf, 0xa2, + 0x25, 0x58, 0xf9, 0x84, 0x03, 0x7e, 0x10, 0x6d, 0xea, 0x97, 0xb5, 0xc8, 0x4f, 0x32, 0x5c, + 0x21, 0xa6, 0xdb, 0x7a, 0x07, 0x80, 0xfd, 0x93, 0xee, 0x69, 0x14, 0x2d, 0x50, 0xd7, 0xaa, + 0xc4, 0xb9, 0x3e, 0x43, 0xe2, 0x9f, 0x18, 0x65, 0x0b, 0x76, 0xf1, 0x8c, 0xae, 0xd3, 0x54, + 0x29, 0x47, 0x3a, 0xbd, 0xc0, 0x61, 0x1c, 0x9b, 0xe6, 0x88, 0xf5, 0x72, 0x0f, 0x6c, 0x11, + 0x96, 0xeb, 0x85, 0xf8, 0x7f, 0x02, 0xa3, 0xde, 0x59, 0x24, 0x4a, 0x37, 0xb0, 0xcd, 0xef, + 0x92, 0x15, 0x68, 0x06, 0x7b, 0xfc, 0x81, 0x20, 0x5d, 0xda, 0xa7, 0xc9, 0xb4, 0x33, 0x4e, + 0x77, 0x0a, 0x8d, 0xf0, 0x9e, 0xe3, 0x64, 0x19, 0xb8, 0xc5, 0x42, 0x3f, 0x51, 0x2c, 0xab, + 0xd6, 0xf4, 0x89, 0x0e, 0x73, 0x1d, 0x60, 0xe7, 0x9a, 0x3b, 0x46, 0xc1, 0xbc, 0xd2, 0xaf, + 0x28, 0x55, 0x5a, 0x27, 0xa0, 0xdd, 0xb3, 0xce, 0x49, 0x34, 0x95, 0xe8, 0x6f, 0x12, 0x7c, + 0x01, 0x86, 0xfb, 0xd9, 0xa4, 0x23, 0x5e, 0x30, 0x4d, 0xca, 0xb7, 0x16, 0x6b, 0xec, 0x91, + 0xff, 0x82, 0x05, 0x78, 0x41, 0x3c, 0xbb, 0xc6, 0xa8, 0xd5, 0x52, 0x2f, 0x8e, 0xf3, 0x74, + 0x09, 0x67, 0x1a, 0x9d, 0xe0, 0xc2, 0xbf, 0x38, 0x45, 0x2b, 0x56, 0xd1, 0xac, 0x0d, 0x70, + 0xf7, 0x8a, 0xe4, 0x99, 0x1e, 0x63, 0x00, 0x7e, 0xfc, 0x82, 0xe5, 0x9b, 0x19, 0x67, 0xd7, + 0xa9, 0x2b, 0x55, 0x32, 0x4c, 0xce, 0xb0, 0xb3, 0xcd, 0x4f, 0x31, 0x56, 0x28, 0xaa, 0xd4, + 0x64, 0x1a, 0x98, 0xe6, 0x81, 0xff, 0x7d, 0x03, 0x7b, 0x05, 0x87, 0xf9, 0x9e, 0xe0, 0x62, + 0x1c, 0xac, 0xd2, 0x50, 0x2e, 0x49, 0x37, 0xb5, 0xcb, 0xc8, 0xb6, 0x34, 0x4a, 0x2d, 0x53, + 0xd1, 0xaf, 0x1f, 0x61, 0xe3, 0x9d, 0xfa, 0x84, 0x06, 0x78, 0xf6, 0x88, 0x0a, 0x74, 0x13, + 0x6d, 0xef, 0x91, 0x21, 0x5f, 0xdd, 0xa3, 0xc4, 0xba, 0x38, 0x46, 0x45, 0x3b, 0xb9, 0xc7, + 0xa0, 0xde, 0x5c, 0x22, 0x92, 0xec, 0x6e, 0x10, 0x77, 0x09, 0x8b, 0xf5, 0x8d, 0xf3, 0x71, + 0x0f, 0x68, 0x16, 0x94, 0xea, 0x5a, 0x24, 0xa6, 0xd8, 0xbf, 0xc1, 0x43, 0x3d, 0x3e, 0x40, + 0xc2, 0xbc, 0xdb, 0xa5, 0x27, 0x59, 0xe9, 0x97, 0x15, 0x6b, 0x0c, 0x72, 0xf0, 0x8e, 0xf1, + 0x8f, 0x0d, 0x73, 0x14, 0x6a, 0xe8, 0x96, 0x26, 0x58, 0xda, 0xa4, 0xc3, 0xbd, 0x3f, 0x41, + 0x42, 0x3c, 0xbe, 0xc0, 0xa7, 0xd9, 0x5b, 0x25, 0x95, 0xeb, 0x69, 0x17, 0x70, 0x0e, 0x8c, + 0xf2, 0x8a, 0xf4, 0x76, 0x08, 0x6f, 0x11, 0x93, 0xed, 0x5d, 0x23, 0xa1, 0xdf, 0xb8, 0xc6, + 0x44, 0x3a, 0x39, 0x47, 0xc5, 0xbb, 0xdc, 0xa2, 0x20, 0x5e, 0xee, 0x90, 0x12, 0x6c, 0x0b, + 0x75, 0xf7, 0x89, 0x07, 0x79, 0xfb, 0x85, 0xe2, 0x9c, 0x1e, 0x60, 0xd0, 0xae, 0x2c, 0x52, + 0x35, 0x4b, 0xc9, 0xb7, 0xb4, 0xca, 0x48, 0x36, 0x51, 0x2f, 0xad, 0xd3, 0x63, 0x1d, 0x9f, + 0xe1, 0x86, 0xf8, 0x7a, 0x04, 0x7c, 0x02, 0x80, 0xfe, 0x99, 0xe7, 0x65, 0x1b, 0xab, 0xd5, + 0x57, 0x29, 0x4e, 0x30, 0xb2, 0xcc, 0xcf, 0xb1, 0x33, 0x4d, 0x2a, 0x54, 0xd6, 0xa8, 0x18, + 0x66, 0xe4, 0x9a, 0xfd, 0x83, 0x01, 0x7f, 0x00, 0x7f, 0xfe, 0x81, 0xe1, 0x9e, 0x1f, 0x60, + 0xdf, 0xa0, 0x21, 0x5e, 0x3e, 0x41, 0xc0, 0xbf, 0xa3, 0xdc, 0x5d, 0x22, 0x42, 0x3d, 0xbc, + 0xc3, 0x7c, 0x03, 0x82, 0xfd, 0x9d, 0xe2, 0x63, 0x1c, 0x5b, 0x24, 0xa5, 0xda, 0xba, 0xc5, + 0x44, 0x3b, 0x84, 0xfb, 0x7a, 0x05, 0x65, 0x1a, 0x9b, 0xe4, 0xf8, 0x87, 0x06, 0x79, 0x19, + 0x66, 0xe7, 0x98, 0x27, 0x58, 0xd9, 0xa6, 0xc6, 0xb9, 0x38, 0x47, 0xb6, 0xc9, 0x48, 0x37, + 0x57, 0x28, 0xa9, 0xd6, 0x69, 0x16, 0x97, 0xe8, 0x88, 0xf7, 0x76, 0x09, 0x15, 0x6a, 0xeb, + 0x94, 0xf4, 0x8b, 0x0a, 0x75, 0xca, 0xb5, 0x34, 0x4b, 0x2b, 0x54, 0xd5, 0xaa, 0xed, 0x92, + 0x13, 0x6c, 0x0c, 0x73, 0xf2, 0x8d, 0x32, 0x4d, 0xcc, 0xb3, 0xd3, 0xac, 0x2d, 0x52, 0x4e, + 0x31, 0xb0, 0xcf, 0xaf, 0xd0, 0x51, 0x2e, 0x91, 0xee, 0x6f, 0x10, 0x70, 0x0f, 0x8e, 0xf1, + 0x71, 0x0e, 0x8f, 0xf0, 0x90, 0xef, 0x6e, 0x11, 0xae, 0xd1, 0x50, 0x2f, 0x4f, 0x30, 0xb1, + 0xce, 0xd2, 0xad, 0x2c, 0x53, 0x33, 0x4c, 0xcd, 0xb2, 0x0d, 0x72, 0xf3, 0x8c, 0xec, 0x93, + 0x12, 0x6d, 0x2a, 0x55, 0xd4, 0xab, 0xcb, 0xb4, 0x35, 0x4a, 0xf5, 0x8a, 0x0b, 0x74, 0x14, + 0x6b, 0xea, 0x95, 0x89, 0xf6, 0x77, 0x08, 0x68, 0x17, 0x96, 0xe9, 0x56, 0x29, 0xa8, 0xd7, + 0xb7, 0xc8, 0x49, 0x36, 0xc7, 0xb8, 0x39, 0x46, 0x26, 0x59, 0xd8, 0xa7, 0x18, 0x67, 0xe6, + 0x99, 0xf9, 0x86, 0x07, 0x78, 0x64, 0x1b, 0x9a, 0xe5, 0x85, 0xfa, 0x7b, 0x04, 0xbb, 0xc4, + 0x45, 0x3a, 0x5a, 0x25, 0xa4, 0xdb, 0x9c, 0xe3, 0x62, 0x1d, 0x7d, 0x02, 0x83, 0xfc, 0x43, + 0x3c, 0xbd, 0xc2, 0xa2, 0xdd, 0x5c, 0x23, 0x3f, 0x40, 0xc1, 0xbe, 0xde, 0xa1, 0x20, 0x5f, + 0xe0, 0x9f, 0x1e, 0x61, 0x01, 0x7e, 0xff, 0x80, 0x00, 0x80, 0x1d, 0x9d, 0x3a, 0xba, 0x27, + 0xa7, 0x74, 0xf4, 0x69, 0xe9, 0x4e, 0xce, 0x53, 0xd3, 0xe8, 0x68, 0xf5, 0x75, 0xd2, 0x52, + 0xcf, 0x4f, 0x9c, 0x1c, 0x81, 0x01, 0xa6, 0x26, 0xbb, 0x3b, 0xcd, 0x4d, 0xd0, 0x50, 0xf7, + 0x77, 0xea, 0x6a, 0xb9, 0x39, 0xa4, 0x24, 0x83, 0x03, 0x9e, 0x1e, 0x25, 0xa5, 0x38, 0xb8, + 0x1f, 0x9f, 0x02, 0x82, 0x51, 0xd1, 0x4c, 0xcc, 0x6b, 0xeb, 0x76, 0xf6, 0x87, 0x07, 0x9a, + 0x1a, 0xbd, 0x3d, 0xa0, 0x20, 0xf3, 0x73, 0xee, 0x6e, 0xc9, 0x49, 0xd4, 0x54, 0x6f, 0xef, + 0x72, 0xf2, 0x55, 0xd5, 0x48, 0xc8, 0x1b, 0x9b, 0x06, 0x86, 0x21, 0xa1, 0x3c, 0xbc, 0x4a, + 0xca, 0x57, 0xd7, 0x70, 0xf0, 0x6d, 0xed, 0x3e, 0xbe, 0x23, 0xa3, 0x04, 0x84, 0x19, 0x99, + 0xa2, 0x22, 0xbf, 0x3f, 0x98, 0x18, 0x85, 0x05, 0xd6, 0x56, 0xcb, 0x4b, 0xec, 0x6c, 0xf1, + 0x71, 0x13, 0x93, 0x0e, 0x8e, 0x29, 0xa9, 0x34, 0xb4, 0x67, 0xe7, 0x7a, 0xfa, 0x5d, 0xdd, + 0x40, 0xc0, 0xfb, 0x7b, 0xe6, 0x66, 0xc1, 0x41, 0xdc, 0x5c, 0x8f, 0x0f, 0x92, 0x12, 0xb5, + 0x35, 0xa8, 0x28, 0xde, 0x5e, 0xc3, 0x43, 0xe4, 0x64, 0xf9, 0x79, 0xaa, 0x2a, 0xb7, 0x37, + 0x90, 0x10, 0x8d, 0x0d, 0x36, 0xb6, 0x2b, 0xab, 0x0c, 0x8c, 0x11, 0x91, 0x42, 0xc2, 0x5f, + 0xdf, 0x78, 0xf8, 0x65, 0xe5, 0x94, 0x14, 0x89, 0x09, 0xae, 0x2e, 0xb3, 0x33, 0xe0, 0x60, + 0xfd, 0x7d, 0xda, 0x5a, 0xc7, 0x47, 0x7c, 0xfc, 0x61, 0xe1, 0x46, 0xc6, 0x5b, 0xdb, 0x08, + 0x88, 0x15, 0x95, 0x32, 0xb2, 0x2f, 0xaf, 0x59, 0xd9, 0x44, 0xc4, 0x63, 0xe3, 0x7e, 0xfe, + 0x2d, 0xad, 0x30, 0xb0, 0x17, 0x97, 0x0a, 0x8a, 0xb1, 0x31, 0xac, 0x2c, 0x8b, 0x0b, 0x96, + 0x16, 0xc5, 0x45, 0xd8, 0x58, 0xff, 0x7f, 0xe2, 0x62, 0x00, 0x81, 0x1f, 0x9e, 0x3e, 0xbf, + 0x21, 0xa0, 0x7c, 0xfd, 0x63, 0xe2, 0x42, 0xc3, 0x5d, 0xdc, 0xf8, 0x79, 0xe7, 0x66, 0xc6, + 0x47, 0xd9, 0x58, 0x84, 0x05, 0x9b, 0x1a, 0xba, 0x3b, 0xa5, 0x24, 0xed, 0x6c, 0xf2, 0x73, + 0xd3, 0x52, 0xcc, 0x4d, 0x91, 0x10, 0x8e, 0x0f, 0xaf, 0x2e, 0xb0, 0x31, 0x15, 0x94, 0x0a, + 0x8b, 0x2b, 0xaa, 0x34, 0xb5, 0x69, 0xe8, 0x76, 0xf7, 0x57, 0xd6, 0x48, 0xc9, 0xc7, 0x46, + 0xd8, 0x59, 0xf9, 0x78, 0xe6, 0x67, 0xbb, 0x3a, 0xa4, 0x25, 0x85, 0x04, 0x9a, 0x1b, 0x3f, + 0xbe, 0x20, 0xa1, 0x01, 0x80, 0x1e, 0x9f, 0x43, 0xc2, 0x5c, 0xdd, 0x7d, 0xfc, 0x62, 0xe3, + 0x2a, 0xab, 0x35, 0xb4, 0x14, 0x95, 0x0b, 0x8a, 0x56, 0xd7, 0x49, 0xc8, 0x68, 0xe9, 0x77, + 0xf6, 0xd2, 0x53, 0xcd, 0x4c, 0xec, 0x6d, 0xf3, 0x72, 0xae, 0x2f, 0xb1, 0x30, 0x90, 0x11, + 0x8f, 0x0e, 0x93, 0x12, 0x8c, 0x0d, 0xad, 0x2c, 0xb2, 0x33, 0xef, 0x6e, 0xf0, 0x71, 0xd1, + 0x50, 0xce, 0x4f, 0x6b, 0xea, 0x74, 0xf5, 0x55, 0xd4, 0x4a, 0xcb, 0x17, 0x96, 0x08, 0x89, + 0x29, 0xa8, 0x36, 0xb7, 0x7e, 0xff, 0x61, 0xe0, 0x40, 0xc1, 0x5f, 0xde, 0x02, 0x83, 0x1d, + 0x9c, 0x3c, 0xbd, 0x23, 0xa2, 0x86, 0x07, 0x99, 0x18, 0xb8, 0x39, 0xa7, 0x26, 0xfa, 0x7b, + 0xe5, 0x64, 0xc4, 0x45, 0xdb, 0x5a, 0x54, 0xd5, 0x4b, 0xca, 0x6a, 0xeb, 0x75, 0xf4, 0x28, + 0xa9, 0x37, 0xb6, 0x16, 0x97, 0x09, 0x88, 0xac, 0x2d, 0xb3, 0x32, 0x92, 0x13, 0x8d, 0x0c, + 0xd0, 0x51, 0xcf, 0x4e, 0xee, 0x6f, 0xf1, 0x70, 0xb9, 0x38, 0xa6, 0x27, 0x87, 0x06, 0x98, + 0x19, 0xc5, 0x44, 0xda, 0x5b, 0xfb, 0x7a, 0xe4, 0x65, 0x41, 0xc0, 0x5e, 0xdf, 0x7f, 0xfe, + 0x60, 0xe1, 0x3d, 0xbc, 0x22, 0xa3, 0x03, 0x82, 0x1c, 0x9d, 0x00, 0x82, 0x19, 0x9b, 0x32, + 0xb0, 0x2b, 0xa9, 0x64, 0xe6, 0x7d, 0xff, 0x56, 0xd4, 0x4f, 0xcd, 0xc8, 0x4a, 0xd1, 0x53, + 0xfa, 0x78, 0xe3, 0x61, 0xac, 0x2e, 0xb5, 0x37, 0x9e, 0x1c, 0x87, 0x05, 0x8d, 0x0f, 0x94, + 0x16, 0xbf, 0x3d, 0xa6, 0x24, 0xe9, 0x6b, 0xf0, 0x72, 0xdb, 0x59, 0xc2, 0x40, 0x45, 0xc7, + 0x5c, 0xde, 0x77, 0xf5, 0x6e, 0xec, 0x21, 0xa3, 0x38, 0xba, 0x13, 0x91, 0x0a, 0x88, 0x07, + 0x85, 0x1e, 0x9c, 0x35, 0xb7, 0x2c, 0xae, 0x63, 0xe1, 0x7a, 0xf8, 0x51, 0xd3, 0x48, 0xca, + 0xcf, 0x4d, 0xd6, 0x54, 0xfd, 0x7f, 0xe4, 0x66, 0xab, 0x29, 0xb2, 0x30, 0x99, 0x1b, 0x80, + 0x02, 0x8a, 0x08, 0x93, 0x11, 0xb8, 0x3a, 0xa1, 0x23, 0xee, 0x6c, 0xf7, 0x75, 0xdc, 0x5e, + 0xc5, 0x47, 0x42, 0xc0, 0x5b, 0xd9, 0x70, 0xf2, 0x69, 0xeb, 0x26, 0xa4, 0x3f, 0xbd, 0x14, + 0x96, 0x0d, 0x8f, 0x0e, 0x8c, 0x17, 0x95, 0x3c, 0xbe, 0x25, 0xa7, 0x6a, 0xe8, 0x73, 0xf1, + 0x58, 0xda, 0x41, 0xc3, 0xc6, 0x44, 0xdf, 0x5d, 0xf4, 0x76, 0xed, 0x6f, 0xa2, 0x20, 0xbb, + 0x39, 0x90, 0x12, 0x89, 0x0b, 0x83, 0x01, 0x9a, 0x18, 0xb1, 0x33, 0xa8, 0x2a, 0xe7, 0x65, + 0xfe, 0x7c, 0xd5, 0x57, 0xcc, 0x4e, 0x4b, 0xc9, 0x52, 0xd0, 0x79, 0xfb, 0x60, 0xe2, 0x2f, + 0xad, 0x36, 0xb4, 0x1d, 0x9f, 0x04, 0x86, 0x09, 0x8b, 0x10, 0x92, 0x3b, 0xb9, 0x22, 0xa0, + 0x6d, 0xef, 0x74, 0xf6, 0x5f, 0xdd, 0x46, 0xc4, 0xc1, 0x43, 0xd8, 0x5a, 0xf3, 0x71, 0xea, + 0x68, 0xa5, 0x27, 0xbc, 0x3e, 0x97, 0x15, 0x8e, 0x0c, 0x84, 0x06, 0x9d, 0x1f, 0xb6, 0x34, + 0xaf, 0x2d, 0xe0, 0x62, 0xf9, 0x7b, 0xd2, 0x50, 0xcb, 0x49, 0x4c, 0xce, 0x55, 0xd7, 0x7e, + 0xfc, 0x67, 0xe5, 0x28, 0xaa, 0x31, 0xb3, 0x1a, 0x98, 0x03, 0x81, 0x00, 0x83, 0x1b, 0x98, + 0x36, 0xb5, 0x2d, 0xae, 0x6c, 0xef, 0x77, 0xf4, 0x5a, 0xd9, 0x41, 0xc2, 0xd8, 0x5b, 0xc3, + 0x40, 0xee, 0x6d, 0xf5, 0x76, 0xb4, 0x37, 0xaf, 0x2c, 0x82, 0x01, 0x99, 0x1a, 0xad, 0x2e, + 0xb6, 0x35, 0x9b, 0x18, 0x80, 0x03, 0xc1, 0x42, 0xda, 0x59, 0xf7, 0x74, 0xec, 0x6f, 0x75, + 0xf6, 0x6e, 0xed, 0x43, 0xc0, 0x58, 0xdb, 0x19, 0x9a, 0x02, 0x81, 0x2f, 0xac, 0x34, 0xb7, + 0x47, 0xc4, 0x5c, 0xdf, 0x71, 0xf2, 0x6a, 0xe9, 0x2b, 0xa8, 0x30, 0xb3, 0x1d, 0x9e, 0x06, + 0x85, 0x9f, 0x1c, 0x84, 0x07, 0xa9, 0x2a, 0xb2, 0x31, 0xf3, 0x70, 0xe8, 0x6b, 0xc5, 0x46, + 0xde, 0x5d, 0xea, 0x69, 0xf1, 0x72, 0xdc, 0x5f, 0xc7, 0x44, 0x86, 0x05, 0x9d, 0x1e, 0xb0, + 0x33, 0xab, 0x28, 0x32, 0xb1, 0x29, 0xaa, 0x04, 0x87, 0x1f, 0x9c, 0x5e, 0xdd, 0x45, 0xc6, + 0x68, 0xeb, 0x73, 0xf0, 0x8e, 0x0d, 0x95, 0x16, 0xb8, 0x3b, 0xa3, 0x20, 0xe2, 0x61, 0xf9, + 0x7a, 0xd4, 0x57, 0xcf, 0x4c, 0x56, 0xd5, 0x4d, 0xce, 0x60, 0xe3, 0x7b, 0xf8, 0x3a, 0xb9, + 0x21, 0xa2, 0x0c, 0x8f, 0x17, 0x94, 0x23, 0xa0, 0x38, 0xbb, 0x15, 0x96, 0x0e, 0x8d, 0x4f, + 0xcc, 0x54, 0xd7, 0x79, 0xfa, 0x62, 0xe1, 0xfb, 0x78, 0xe0, 0x63, 0xcd, 0x4e, 0xd6, 0x55, + 0x97, 0x14, 0x8c, 0x0f, 0xa1, 0x22, 0xba, 0x39, 0xc9, 0x4a, 0xd2, 0x51, 0xff, 0x7c, 0xe4, + 0x67, 0xa5, 0x26, 0xbe, 0x3d, 0x93, 0x10, 0x88, 0x0b, 0x11, 0x92, 0x0a, 0x89, 0x27, 0xa4, + 0x3c, 0xbf, 0x7d, 0xfe, 0x66, 0xe5, 0x4b, 0xc8, 0x50, 0xd3, 0x64, 0xe7, 0x7f, 0xfc, 0x52, + 0xd1, 0x49, 0xca, 0x08, 0x8b, 0x13, 0x90, 0x3e, 0xbd, 0x25, 0xa6, 0xbc, 0x3f, 0xa7, 0x24, + 0x8a, 0x09, 0x91, 0x12, 0xd0, 0x53, 0xcb, 0x48, 0xe6, 0x65, 0xfd, 0x7e, 0x00, 0x84, 0x15, + 0x91, 0x2a, 0xae, 0x3f, 0xbb, 0x54, 0xd0, 0x41, 0xc5, 0x7e, 0xfa, 0x6b, 0xef, 0xa8, 0x2c, + 0xbd, 0x39, 0x82, 0x06, 0x97, 0x13, 0xfc, 0x78, 0xe9, 0x6d, 0xd6, 0x52, 0xc3, 0x47, 0x4d, + 0xc9, 0x58, 0xdc, 0x67, 0xe3, 0x72, 0xf6, 0x19, 0x9d, 0x0c, 0x88, 0x33, 0xb7, 0x26, 0xa2, + 0xe5, 0x61, 0xf0, 0x74, 0xcf, 0x4b, 0xda, 0x5e, 0xb1, 0x35, 0xa4, 0x20, 0x9b, 0x1f, 0x8e, + 0x0a, 0x9a, 0x1e, 0x8f, 0x0b, 0xb0, 0x34, 0xa5, 0x21, 0xce, 0x4a, 0xdb, 0x5f, 0xe4, 0x60, + 0xf1, 0x75, 0x32, 0xb6, 0x27, 0xa3, 0x18, 0x9c, 0x0d, 0x89, 0x66, 0xe2, 0x73, 0xf7, 0x4c, + 0xc8, 0x59, 0xdd, 0xd7, 0x53, 0xc2, 0x46, 0xfd, 0x79, 0xe8, 0x6c, 0x83, 0x07, 0x96, 0x12, + 0xa9, 0x2d, 0xbc, 0x38, 0x7f, 0xfb, 0x6a, 0xee, 0x55, 0xd1, 0x40, 0xc4, 0x2b, 0xaf, 0x3e, + 0xba, 0x01, 0x85, 0x14, 0x90, 0x29, 0xad, 0x3c, 0xb8, 0x03, 0x87, 0x16, 0x92, 0x7d, 0xf9, + 0x68, 0xec, 0x57, 0xd3, 0x42, 0xc6, 0x81, 0x05, 0x94, 0x10, 0xab, 0x2f, 0xbe, 0x3a, 0xd5, + 0x51, 0xc0, 0x44, 0xff, 0x7b, 0xea, 0x6e, 0x64, 0xe0, 0x71, 0xf5, 0x4e, 0xca, 0x5b, 0xdf, + 0x30, 0xb4, 0x25, 0xa1, 0x1a, 0x9e, 0x0f, 0x8b, 0xcc, 0x48, 0xd9, 0x5d, 0xe6, 0x62, 0xf3, + 0x77, 0x98, 0x1c, 0x8d, 0x09, 0xb2, 0x36, 0xa7, 0x23, 0xb3, 0x37, 0xa6, 0x22, 0x99, 0x1d, + 0x8c, 0x08, 0xe7, 0x63, 0xf2, 0x76, 0xcd, 0x49, 0xd8, 0x5c, 0x1b, 0x9f, 0x0e, 0x8a, 0x31, + 0xb5, 0x24, 0xa0, 0x4f, 0xcb, 0x5a, 0xde, 0x65, 0xe1, 0x70, 0xf4, 0xfe, 0x7a, 0xeb, 0x6f, + 0xd4, 0x50, 0xc1, 0x45, 0xaa, 0x2e, 0xbf, 0x3b, 0x80, 0x04, 0x95, 0x11, 0x56, 0xd2, 0x43, + 0xc7, 0x7c, 0xf8, 0x69, 0xed, 0x02, 0x86, 0x17, 0x93, 0x28, 0xac, 0x3d, 0xb9, 0x00, 0x85, + 0x17, 0x92, 0x2e, 0xab, 0x39, 0xbc, 0x5c, 0xd9, 0x4b, 0xce, 0x72, 0xf7, 0x65, 0xe0, 0xb8, + 0x3d, 0xaf, 0x2a, 0x96, 0x13, 0x81, 0x04, 0xe4, 0x61, 0xf3, 0x76, 0xca, 0x4f, 0xdd, 0x58, + 0x6d, 0xe8, 0x7a, 0xff, 0x43, 0xc6, 0x54, 0xd1, 0x31, 0xb4, 0x26, 0xa3, 0x1f, 0x9a, 0x08, + 0x8d, 0xd5, 0x50, 0xc2, 0x47, 0xfb, 0x7e, 0xec, 0x69, 0x89, 0x0c, 0x9e, 0x1b, 0xa7, 0x22, + 0xb0, 0x35, 0xda, 0x5f, 0xcd, 0x48, 0xf4, 0x71, 0xe3, 0x66, 0x86, 0x03, 0x91, 0x14, 0xa8, + 0x2d, 0xbf, 0x3a, 0x62, 0xe7, 0x75, 0xf0, 0x4c, 0xc9, 0x5b, 0xde, 0x3e, 0xbb, 0x29, 0xac, + 0x10, 0x95, 0x07, 0x82, 0xb7, 0x32, 0xa0, 0x25, 0x99, 0x1c, 0x8e, 0x0b, 0xeb, 0x6e, 0xfc, + 0x79, 0xc5, 0x40, 0xd2, 0x57, 0x0f, 0x8a, 0x18, 0x9d, 0x21, 0xa4, 0x36, 0xb3, 0x53, 0xd6, + 0x44, 0xc1, 0x7d, 0xf8, 0x6a, 0xef, 0xa9, 0x2c, 0xbe, 0x3b, 0x87, 0x02, 0x90, 0x15, 0xf5, + 0x70, 0xe2, 0x67, 0xdb, 0x5e, 0xcc, 0x49, 0x11, 0x94, 0x06, 0x83, 0x3f, 0xba, 0x28, 0xad, + 0x4d, 0xc8, 0x5a, 0xdf, 0x63, 0xe6, 0x74, 0xf1, 0xc4, 0x41, 0xd3, 0x56, 0xea, 0x6f, 0xfd, + 0x78, 0x98, 0x1d, 0x8f, 0x0a, 0xb6, 0x33, 0xa1, 0x24, 0x7c, 0xf9, 0x6b, 0xee, 0x52, 0xd7, + 0x45, 0xc0, 0x20, 0xa5, 0x37, 0xb2, 0x0e, 0x8b, 0x19, 0x9c, 0x73, 0xf6, 0x64, 0xe1, 0x5d, + 0xd8, 0x4a, 0xcf, 0x2f, 0xaa, 0x38, 0xbd, 0x01, 0x84, 0x16, 0x93, 0xcb, 0x4e, 0xdc, 0x59, + 0xe5, 0x60, 0xf2, 0x77, 0x97, 0x12, 0x80, 0x05, 0xb9, 0x3c, 0xae, 0x2b, 0x1e, 0x9b, 0x09, + 0x8c, 0x30, 0xb5, 0x27, 0xa2, 0x42, 0xc7, 0x55, 0xd0, 0x6c, 0xe9, 0x7b, 0xfe, 0xa6, 0x23, + 0xb1, 0x34, 0x88, 0x0d, 0x9f, 0x1a, 0xfa, 0x7f, 0xed, 0x68, 0xd4, 0x51, 0xc3, 0x46, 0x00, + 0x86, 0x11, 0x97, 0x22, 0xa4, 0x33, 0xb5, 0x44, 0xc2, 0x55, 0xd3, 0x66, 0xe0, 0x77, 0xf1, + 0x88, 0x0e, 0x99, 0x1f, 0xaa, 0x2c, 0xbb, 0x3d, 0xcc, 0x4a, 0xdd, 0x5b, 0xee, 0x68, 0xff, + 0x79, 0x0d, 0x8b, 0x1c, 0x9a, 0x2f, 0xa9, 0x3e, 0xb8, 0x49, 0xcf, 0x58, 0xde, 0x6b, 0xed, + 0x7a, 0xfc, 0x85, 0x03, 0x94, 0x12, 0xa7, 0x21, 0xb6, 0x30, 0xc1, 0x47, 0xd0, 0x56, 0xe3, + 0x65, 0xf2, 0x74, 0x1a, 0x9c, 0x0b, 0x8d, 0x38, 0xbe, 0x29, 0xaf, 0x5e, 0xd8, 0x4f, 0xc9, + 0x7c, 0xfa, 0x6d, 0xeb, 0x92, 0x14, 0x83, 0x05, 0xb0, 0x36, 0xa1, 0x27, 0xd6, 0x50, 0xc7, + 0x41, 0xf4, 0x72, 0xe5, 0x63, 0x17, 0x91, 0x06, 0x80, 0x35, 0xb3, 0x24, 0xa2, 0x53, 0xd5, + 0x42, 0xc4, 0x71, 0xf7, 0x60, 0xe6, 0x9f, 0x19, 0x8e, 0x08, 0xbd, 0x3b, 0xac, 0x2a, 0xdb, + 0x5d, 0xca, 0x4c, 0xf9, 0x7f, 0xe8, 0x6e, 0x34, 0xb2, 0x25, 0xa3, 0x16, 0x90, 0x07, 0x81, + 0x70, 0xf6, 0x61, 0xe7, 0x52, 0xd4, 0x43, 0xc5, 0xbc, 0x3a, 0xad, 0x2b, 0x9e, 0x18, 0x8f, + 0x09, 0xf8, 0x7e, 0xe9, 0x6f, 0xda, 0x5c, 0xcb, 0x4d, 0x39, 0xbf, 0x28, 0xae, 0x1b, 0x9d, + 0x0a, 0x8c, 0x7d, 0xfb, 0x6c, 0xea, 0x5f, 0xd9, 0x4e, 0xc8, 0xb1, 0x37, 0xa0, 0x26, 0x93, + 0x15, 0x82, 0x04, 0xf5, 0x73, 0xe4, 0x62, 0xd7, 0x51, 0xc6, 0x40, 0x2e, 0xa8, 0x3f, 0xb9, + 0x0c, 0x8a, 0x1d, 0x9b, 0x6a, 0xec, 0x7b, 0xfd, 0x48, 0xce, 0x59, 0xdf, 0xa6, 0x20, 0xb7, + 0x31, 0x84, 0x02, 0x95, 0x13, 0xe2, 0x64, 0xf3, 0x75, 0xc0, 0x46, 0xd1, 0x57, 0x23, 0xa5, + 0x32, 0xb4, 0x01, 0x87, 0x10, 0x96, 0x67, 0xe1, 0x76, 0xf0, 0x45, 0xc3, 0x54, 0xd2, 0xab, + 0x2d, 0xba, 0x3c, 0x89, 0x0f, 0x98, 0x1e, 0xef, 0x69, 0xfe, 0x78, 0xcd, 0x4b, 0xdc, 0x5a, + 0x00, 0x87, 0x13, 0x94, 0x26, 0xa1, 0x35, 0xb2, 0x4c, 0xcb, 0x5f, 0xd8, 0x6a, 0xed, 0x79, + 0xfe, 0x98, 0x1f, 0x8b, 0x0c, 0xbe, 0x39, 0xad, 0x2a, 0xd4, 0x53, 0xc7, 0x40, 0xf2, 0x75, + 0xe1, 0x66, 0x2d, 0xaa, 0x3e, 0xb9, 0x0b, 0x8c, 0x18, 0x9f, 0x61, 0xe6, 0x72, 0xf5, 0x47, + 0xc0, 0x54, 0xd3, 0xb5, 0x32, 0xa6, 0x21, 0x93, 0x14, 0x80, 0x07, 0xf9, 0x7e, 0xea, 0x6d, + 0xdf, 0x58, 0xcc, 0x4b, 0x5a, 0xdd, 0x49, 0xce, 0x7c, 0xfb, 0x6f, 0xe8, 0x16, 0x91, 0x05, + 0x82, 0x30, 0xb7, 0x23, 0xa4, 0xc2, 0x45, 0xd1, 0x56, 0xe4, 0x63, 0xf7, 0x70, 0x8e, 0x09, + 0x9d, 0x1a, 0xa8, 0x2f, 0xbb, 0x3c, 0x77, 0xf0, 0x64, 0xe3, 0x51, 0xd6, 0x42, 0xc5, 0x3b, + 0xbc, 0x28, 0xaf, 0x1d, 0x9a, 0x0e, 0x89, 0xef, 0x68, 0xfc, 0x7b, 0xc9, 0x4e, 0xda, 0x5d, + 0xa3, 0x24, 0xb0, 0x37, 0x85, 0x02, 0x96, 0x11, 0xb4, 0x33, 0xa7, 0x20, 0x92, 0x15, 0x81, + 0x06, 0xf8, 0x7f, 0xeb, 0x6c, 0xde, 0x59, 0xcd, 0x4a, 0x2c, 0xab, 0x3f, 0xb8, 0x0a, 0x8d, + 0x19, 0x9e, 0x60, 0xe7, 0x73, 0xf4, 0x46, 0xc1, 0x55, 0xd2, 0x99, 0x1e, 0x8a, 0x0d, 0xbf, + 0x38, 0xac, 0x2b, 0xd5, 0x52, 0xc6, 0x41, 0xf3, 0x74, 0xe0, 0x67, 0x01, 0x86, 0x12, 0x95, + 0x27, 0xa0, 0x34, 0xb3, 0x4d, 0xca, 0x5e, 0xd9, 0x6b, 0xec, 0x78, 0xff, 0xee, 0x69, 0xfd, + 0x7a, 0xc8, 0x4f, 0xdb, 0x5c, 0xa2, 0x25, 0xb1, 0x36, 0x84, 0x03, 0x97, 0x10, 0x76, 0xf1, + 0x65, 0xe2, 0x50, 0xd7, 0x43, 0xc4, 0x3a, 0xbd, 0x29, 0xae, 0x1c, 0x9b, 0x0f, 0x88, 0xc3, + 0x44, 0xd0, 0x57, 0xe5, 0x62, 0xf6, 0x71, 0x8f, 0x08, 0x9c, 0x1b, 0xa9, 0x2e, 0xba, 0x3d, + 0x5b, 0xdc, 0x48, 0xcf, 0x7d, 0xfa, 0x6e, 0xe9, 0x17, 0x90, 0x04, 0x83, 0x31, 0xb6, 0x22, + 0xa5, 0x00, 0x88, 0x0d, 0x85, 0x1a, 0x92, 0x17, 0x9f, 0x34, 0xbc, 0x39, 0xb1, 0x2e, 0xa6, + 0x23, 0xab, 0x68, 0xe0, 0x65, 0xed, 0x72, 0xfa, 0x7f, 0xf7, 0x5c, 0xd4, 0x51, 0xd9, 0x46, + 0xce, 0x4b, 0xc3, 0xd0, 0x58, 0xdd, 0x55, 0xca, 0x42, 0xc7, 0x4f, 0xe4, 0x6c, 0xe9, 0x61, + 0xfe, 0x76, 0xf3, 0x7b, 0xb8, 0x30, 0xb5, 0x3d, 0xa2, 0x2a, 0xaf, 0x27, 0x8c, 0x04, 0x81, + 0x09, 0x96, 0x1e, 0x9b, 0x13, 0xbd, 0x35, 0xb0, 0x38, 0xa7, 0x2f, 0xaa, 0x22, 0x89, 0x01, + 0x84, 0x0c, 0x93, 0x1b, 0x9e, 0x16, 0xd5, 0x5d, 0xd8, 0x50, 0xcf, 0x47, 0xc2, 0x4a, 0xe1, + 0x69, 0xec, 0x64, 0xfb, 0x73, 0xf6, 0x7e, 0x6d, 0xe5, 0x60, 0xe8, 0x77, 0xff, 0x7a, 0xf2, + 0x59, 0xd1, 0x54, 0xdc, 0x43, 0xcb, 0x4e, 0xc6, 0x05, 0x8d, 0x08, 0x80, 0x1f, 0x97, 0x12, + 0x9a, 0x31, 0xb9, 0x3c, 0xb4, 0x2b, 0xa3, 0x26, 0xae, 0x67, 0xef, 0x6a, 0xe2, 0x7d, 0xf5, + 0x70, 0xf8, 0x53, 0xdb, 0x5e, 0xd6, 0x49, 0xc1, 0x44, 0xcc, 0x0f, 0x87, 0x02, 0x8a, 0x15, + 0x9d, 0x18, 0x90, 0x3b, 0xb3, 0x36, 0xbe, 0x21, 0xa9, 0x2c, 0xa4, 0xb7, 0x3f, 0xba, 0x32, + 0xad, 0x25, 0xa0, 0x28, 0x83, 0x0b, 0x8e, 0x06, 0x99, 0x11, 0x94, 0x1c, 0xdf, 0x57, 0xd2, + 0x5a, 0xc5, 0x4d, 0xc8, 0x40, 0xeb, 0x63, 0xe6, 0x6e, 0xf1, 0x79, 0xfc, 0x74, 0xda, 0x52, + 0xd7, 0x5f, 0xc0, 0x48, 0xcd, 0x45, 0xee, 0x66, 0xe3, 0x6b, 0xf4, 0x7c, 0xf9, 0x71, 0xb2, + 0x3a, 0xbf, 0x37, 0xa8, 0x20, 0xa5, 0x2d, 0x86, 0x0e, 0x8b, 0x03, 0x9c, 0x14, 0x91, 0x19, + 0x0a, 0x82, 0x07, 0x8f, 0x10, 0x98, 0x1d, 0x95, 0x3e, 0xb6, 0x33, 0xbb, 0x24, 0xac, 0x29, + 0xa1, 0x62, 0xea, 0x6f, 0xe7, 0x78, 0xf0, 0x75, 0xfd, 0x56, 0xde, 0x5b, 0xd3, 0x4c, 0xc4, + 0x41, 0xc9, 0x00, 0x89, 0x0f, 0x86, 0x1e, 0x97, 0x11, 0x98, 0x3c, 0xb5, 0x33, 0xba, 0x22, + 0xab, 0x2d, 0xa4, 0x78, 0xf1, 0x77, 0xfe, 0x66, 0xef, 0x69, 0xe0, 0x44, 0xcd, 0x4b, 0xc2, + 0x5a, 0xd3, 0x55, 0xdc, 0xf0, 0x79, 0xff, 0x76, 0xee, 0x67, 0xe1, 0x68, 0xcc, 0x45, 0xc3, + 0x4a, 0xd2, 0x5b, 0xdd, 0x54, 0x88, 0x01, 0x87, 0x0e, 0x96, 0x1f, 0x99, 0x10, 0xb4, 0x3d, + 0xbb, 0x32, 0xaa, 0x23, 0xa5, 0x2c, 0xfd, 0x74, 0xf2, 0x7b, 0xe3, 0x6a, 0xec, 0x65, 0xc1, + 0x48, 0xce, 0x47, 0xdf, 0x56, 0xd0, 0x59, 0x85, 0x0c, 0x8a, 0x03, 0x9b, 0x12, 0x94, 0x1d, + 0xb9, 0x30, 0xb6, 0x3f, 0xa7, 0x2e, 0xa8, 0x21, 0x0d, 0x84, 0x02, 0x8b, 0x13, 0x9a, 0x1c, + 0x95, 0x31, 0xb8, 0x3e, 0xb7, 0x2f, 0xa6, 0x20, 0xa9, 0x75, 0xfc, 0x7a, 0xf3, 0x6b, 0xe2, + 0x64, 0xed, 0x49, 0xc0, 0x46, 0xcf, 0x57, 0xde, 0x58, 0xd1, 0xe7, 0x6e, 0xe8, 0x61, 0xf9, + 0x70, 0xf6, 0x7f, 0xdb, 0x52, 0xd4, 0x5d, 0xc5, 0x4c, 0xca, 0x43, 0x9f, 0x16, 0x90, 0x19, + 0x81, 0x08, 0x8e, 0x07, 0xa3, 0x2a, 0xac, 0x25, 0xbd, 0x34, 0xb2, 0x3b, 0x17, 0x9e, 0x18, + 0x91, 0x09, 0x80, 0x06, 0x8f, 0x2b, 0xa2, 0x24, 0xad, 0x35, 0xbc, 0x3a, 0xb3, 0x6f, 0xe6, + 0x60, 0xe9, 0x71, 0xf8, 0x7e, 0xf7, 0x53, 0xda, 0x5c, 0xd5, 0x4d, 0xc4, 0x42, 0xcb, 0x1a, + 0x93, 0x15, 0x9c, 0x04, 0x8d, 0x0b, 0x82, 0x26, 0xaf, 0x29, 0xa0, 0x38, 0xb1, 0x37, 0xbe, + 0x62, 0xeb, 0x6d, 0xe4, 0x7c, 0xf5, 0x73, 0xfa, 0x5e, 0xd7, 0x51, 0xd8, 0x40, 0xc9, 0x4f, + 0xc6, 0xea, 0x63, 0xe5, 0x6c, 0xf4, 0x7d, 0xfb, 0x72, 0xd6, 0x5f, 0xd9, 0x50, 0xc8, 0x41, + 0xc7, 0x4e, 0x92, 0x1b, 0x9d, 0x14, 0x8c, 0x05, 0x83, 0x0a, 0xae, 0x27, 0xa1, 0x28, 0xb0, + 0x39, 0xbf, 0x36, 0x00, 0x8a, 0x09, 0x83, 0x12, 0x98, 0x1b, 0x91, 0x24, 0xae, 0x2d, 0xa7, + 0x36, 0xbc, 0x3f, 0xb5, 0x48, 0xc2, 0x41, 0xcb, 0x5a, 0xd0, 0x53, 0xd9, 0x6c, 0xe6, 0x65, + 0xef, 0x7e, 0xf4, 0x77, 0xfd, 0x90, 0x1a, 0x99, 0x13, 0x82, 0x08, 0x8b, 0x01, 0xb4, 0x3e, + 0xbd, 0x37, 0xa6, 0x2c, 0xaf, 0x25, 0xd8, 0x52, 0xd1, 0x5b, 0xca, 0x40, 0xc3, 0x49, 0xfc, + 0x76, 0xf5, 0x7f, 0xee, 0x64, 0xe7, 0x6d, 0x3d, 0xb7, 0x34, 0xbe, 0x2f, 0xa5, 0x26, 0xac, + 0x19, 0x93, 0x10, 0x9a, 0x0b, 0x81, 0x02, 0x88, 0x75, 0xff, 0x7c, 0xf6, 0x67, 0xed, 0x6e, + 0xe4, 0x51, 0xdb, 0x58, 0xd2, 0x43, 0xc9, 0x4a, 0xc0, 0xad, 0x27, 0xa4, 0x2e, 0xbf, 0x35, + 0xb6, 0x3c, 0x89, 0x03, 0x80, 0x0a, 0x9b, 0x11, 0x92, 0x18, 0xe5, 0x6f, 0xec, 0x66, 0xf7, + 0x7d, 0xfe, 0x74, 0xc1, 0x4b, 0xc8, 0x42, 0xd3, 0x59, 0xda, 0x50, 0x7a, 0xf0, 0x73, 0xf9, + 0x68, 0xe2, 0x61, 0xeb, 0x5e, 0xd4, 0x57, 0xdd, 0x4c, 0xc6, 0x45, 0xcf, 0x32, 0xb8, 0x3b, + 0xb1, 0x20, 0xaa, 0x29, 0xa3, 0x16, 0x9c, 0x1f, 0x95, 0x04, 0x8e, 0x0d, 0x87, 0xea, 0x60, + 0xe3, 0x69, 0xf8, 0x72, 0xf1, 0x7b, 0xce, 0x44, 0xc7, 0x4d, 0xdc, 0x56, 0xd5, 0x5f, 0xa2, + 0x28, 0xab, 0x21, 0xb0, 0x3a, 0xb9, 0x33, 0x86, 0x0c, 0x8f, 0x05, 0x94, 0x1e, 0x9d, 0x17, + 0x47, 0xcd, 0x4e, 0xc4, 0x55, 0xdf, 0x5c, 0xd6, 0x63, 0xe9, 0x6a, 0xe0, 0x71, 0xfb, 0x78, + 0xf2, 0x0f, 0x85, 0x06, 0x8c, 0x1d, 0x97, 0x14, 0x9e, 0x2b, 0xa1, 0x22, 0xa8, 0x39, 0xb3, + 0x30, 0xba, 0xd7, 0x5d, 0xde, 0x54, 0xc5, 0x4f, 0xcc, 0x46, 0xf3, 0x79, 0xfa, 0x70, 0xe1, + 0x6b, 0xe8, 0x62, 0x9f, 0x15, 0x96, 0x1c, 0x8d, 0x07, 0x84, 0x0e, 0xbb, 0x31, 0xb2, 0x38, + 0xa9, 0x23, 0xa0, 0x2a, 0x00, 0x8b, 0x0b, 0x80, 0x16, 0x9d, 0x1d, 0x96, 0x2c, 0xa7, 0x27, + 0xac, 0x3a, 0xb1, 0x31, 0xba, 0x58, 0xd3, 0x53, 0xd8, 0x4e, 0xc5, 0x45, 0xce, 0x74, 0xff, + 0x7f, 0xf4, 0x62, 0xe9, 0x69, 0xe2, 0xb0, 0x3b, 0xbb, 0x30, 0xa6, 0x2d, 0xad, 0x26, 0x9c, + 0x17, 0x97, 0x1c, 0x8a, 0x01, 0x81, 0x0a, 0xe8, 0x63, 0xe3, 0x68, 0xfe, 0x75, 0xf5, 0x7e, + 0xc4, 0x4f, 0xcf, 0x44, 0xd2, 0x59, 0xd9, 0x52, 0x7d, 0xf6, 0x76, 0xfd, 0x6b, 0xe0, 0x60, + 0xeb, 0x51, 0xda, 0x5a, 0xd1, 0x47, 0xcc, 0x4c, 0xc7, 0x25, 0xae, 0x2e, 0xa5, 0x33, 0xb8, + 0x38, 0xb3, 0x09, 0x82, 0x02, 0x89, 0x1f, 0x94, 0x14, 0x9f, 0xcd, 0x46, 0xc6, 0x4d, 0xdb, + 0x50, 0xd0, 0x5b, 0xe1, 0x6a, 0xea, 0x61, 0xf7, 0x7c, 0xfc, 0x77, 0x95, 0x1e, 0x9e, 0x15, + 0x83, 0x08, 0x88, 0x03, 0xb9, 0x32, 0xb2, 0x39, 0xaf, 0x24, 0xa4, 0x2f, 0xfa, 0x71, 0xf1, + 0x7a, 0xec, 0x67, 0xe7, 0x6c, 0xd6, 0x5d, 0xdd, 0x56, 0xc0, 0x4b, 0xcb, 0x40, 0xa2, 0x29, + 0xa9, 0x22, 0xb4, 0x3f, 0xbf, 0x34, 0x8e, 0x05, 0x85, 0x0e, 0x98, 0x13, 0x93, 0x18, 0x4a, + 0xc1, 0x41, 0xca, 0x5c, 0xd7, 0x57, 0xdc, 0x66, 0xed, 0x6d, 0xe6, 0x70, 0xfb, 0x7b, 0xf0, + 0x12, 0x99, 0x19, 0x92, 0x04, 0x8f, 0x0f, 0x84, 0x3e, 0xb5, 0x35, 0xbe, 0x28, 0xa3, 0x23, + 0xa8, 0x87, 0x0c, 0x8c, 0x07, 0x91, 0x1a, 0x9a, 0x11, 0xab, 0x20, 0xa0, 0x2b, 0xbd, 0x36, + 0xb6, 0x3d, 0xdf, 0x54, 0xd4, 0x5f, 0xc9, 0x42, 0xc2, 0x49, 0xf3, 0x78, 0xf8, 0x73, 0xe5, + 0x6e, 0xee, 0x65, 0x37, 0xbc, 0x3c, 0xb7, 0x21, 0xaa, 0x2a, 0xa1, 0x1b, 0x90, 0x10, 0x9b, + 0x0d, 0x86, 0x06, 0x8d, 0x6f, 0xe4, 0x64, 0xef, 0x79, 0xf2, 0x72, 0xf9, 0x43, 0xc8, 0x48, + 0xc3, 0x55, 0xde, 0x5e, 0xd5, 0x00, 0x8c, 0x05, 0x89, 0x0a, 0x86, 0x0f, 0x83, 0x14, 0x98, + 0x11, 0x9d, 0x1e, 0x92, 0x1b, 0x97, 0x28, 0xa4, 0x2d, 0xa1, 0x22, 0xae, 0x27, 0xab, 0x3c, + 0xb0, 0x39, 0xb5, 0x36, 0xba, 0x33, 0xbf, 0x50, 0xdc, 0x55, 0xd9, 0x5a, 0xd6, 0x5f, 0xd3, + 0x44, 0xc8, 0x41, 0xcd, 0x4e, 0xc2, 0x4b, 0xc7, 0x78, 0xf4, 0x7d, 0xf1, 0x72, 0xfe, 0x77, + 0xfb, 0x6c, 0xe0, 0x69, 0xe5, 0x66, 0xea, 0x63, 0xef, 0xa0, 0x2c, 0xa5, 0x29, 0xaa, 0x26, + 0xaf, 0x23, 0xb4, 0x38, 0xb1, 0x3d, 0xbe, 0x32, 0xbb, 0x37, 0x88, 0x04, 0x8d, 0x01, 0x82, + 0x0e, 0x87, 0x0b, 0x9c, 0x10, 0x99, 0x15, 0x96, 0x1a, 0x93, 0x1f, 0xf0, 0x7c, 0xf5, 0x79, + 0xfa, 0x76, 0xff, 0x73, 0xe4, 0x68, 0xe1, 0x6d, 0xee, 0x62, 0xeb, 0x67, 0xd8, 0x54, 0xdd, + 0x51, 0xd2, 0x5e, 0xd7, 0x5b, 0xcc, 0x40, 0xc9, 0x45, 0xc6, 0x4a, 0xc3, 0x4f, 0x5d, 0xd1, + 0x58, 0xd4, 0x57, 0xdb, 0x52, 0xde, 0x49, 0xc5, 0x4c, 0xc0, 0x43, 0xcf, 0x46, 0xca, 0x75, + 0xf9, 0x70, 0xfc, 0x7f, 0xf3, 0x7a, 0xf6, 0x61, 0xed, 0x64, 0xe8, 0x6b, 0xe7, 0x6e, 0xe2, + 0x0d, 0x81, 0x08, 0x84, 0x07, 0x8b, 0x02, 0x8e, 0x19, 0x95, 0x1c, 0x90, 0x13, 0x9f, 0x16, + 0x9a, 0x25, 0xa9, 0x20, 0xac, 0x2f, 0xa3, 0x2a, 0xa6, 0x31, 0xbd, 0x34, 0xb8, 0x3b, 0xb7, + 0x3e, 0xb2, 0xfd, 0x71, 0xf8, 0x74, 0xf7, 0x7b, 0xf2, 0x7e, 0xe9, 0x65, 0xec, 0x60, 0xe3, + 0x6f, 0xe6, 0x6a, 0xd5, 0x59, 0xd0, 0x5c, 0xdf, 0x53, 0xda, 0x56, 0xc1, 0x4d, 0xc4, 0x48, + 0xcb, 0x47, 0xce, 0x42, 0xad, 0x21, 0xa8, 0x24, 0xa7, 0x2b, 0xa2, 0x2e, 0xb9, 0x35, 0xbc, + 0x30, 0xb3, 0x3f, 0xb6, 0x3a, 0x85, 0x09, 0x80, 0x0c, 0x8f, 0x03, 0x8a, 0x06, 0x91, 0x1d, + 0x94, 0x18, 0x9b, 0x17, 0x9e, 0x12, 0x00, 0x8d, 0x07, 0x8a, 0x0e, 0x83, 0x09, 0x84, 0x1c, + 0x91, 0x1b, 0x96, 0x12, 0x9f, 0x15, 0x98, 0x38, 0xb5, 0x3f, 0xb2, 0x36, 0xbb, 0x31, 0xbc, + 0x24, 0xa9, 0x23, 0xae, 0x2a, 0xa7, 0x2d, 0xa0, 0x70, 0xfd, 0x77, 0xfa, 0x7e, 0xf3, 0x79, + 0xf4, 0x6c, 0xe1, 0x6b, 0xe6, 0x62, 0xef, 0x65, 0xe8, 0x48, 0xc5, 0x4f, 0xc2, 0x46, 0xcb, + 0x41, 0xcc, 0x54, 0xd9, 0x53, 0xde, 0x5a, 0xd7, 0x5d, 0xd0, 0xe0, 0x6d, 0xe7, 0x6a, 0xee, + 0x63, 0xe9, 0x64, 0xfc, 0x71, 0xfb, 0x76, 0xf2, 0x7f, 0xf5, 0x78, 0xd8, 0x55, 0xdf, 0x52, + 0xd6, 0x5b, 0xd1, 0x5c, 0xc4, 0x49, 0xc3, 0x4e, 0xca, 0x47, 0xcd, 0x40, 0x90, 0x1d, 0x97, + 0x1a, 0x9e, 0x13, 0x99, 0x14, 0x8c, 0x01, 0x8b, 0x06, 0x82, 0x0f, 0x85, 0x08, 0xa8, 0x25, + 0xaf, 0x22, 0xa6, 0x2b, 0xa1, 0x2c, 0xb4, 0x39, 0xb3, 0x3e, 0xba, 0x37, 0xbd, 0x30, 0xdd, + 0x50, 0xda, 0x57, 0xd3, 0x5e, 0xd4, 0x59, 0xc1, 0x4c, 0xc6, 0x4b, 0xcf, 0x42, 0xc8, 0x45, + 0xe5, 0x68, 0xe2, 0x6f, 0xeb, 0x66, 0xec, 0x61, 0xf9, 0x74, 0xfe, 0x73, 0xf7, 0x7a, 0xf0, + 0x7d, 0xad, 0x20, 0xaa, 0x27, 0xa3, 0x2e, 0xa4, 0x29, 0xb1, 0x3c, 0xb6, 0x3b, 0xbf, 0x32, + 0xb8, 0x35, 0x95, 0x18, 0x92, 0x1f, 0x9b, 0x16, 0x9c, 0x11, 0x89, 0x04, 0x8e, 0x03, 0x87, + 0x0a, 0x80, 0x0d, 0x3d, 0xb0, 0x3a, 0xb7, 0x33, 0xbe, 0x34, 0xb9, 0x21, 0xac, 0x26, 0xab, + 0x2f, 0xa2, 0x28, 0xa5, 0x05, 0x88, 0x02, 0x8f, 0x0b, 0x86, 0x0c, 0x81, 0x19, 0x94, 0x1e, + 0x93, 0x17, 0x9a, 0x10, 0x9d, 0x4d, 0xc0, 0x4a, 0xc7, 0x43, 0xce, 0x44, 0xc9, 0x51, 0xdc, + 0x56, 0xdb, 0x5f, 0xd2, 0x58, 0xd5, 0x75, 0xf8, 0x72, 0xff, 0x7b, 0xf6, 0x7c, 0xf1, 0x69, + 0xe4, 0x6e, 0xe3, 0x67, 0xea, 0x60, 0xed, 0x00, 0x8e, 0x01, 0x8f, 0x02, 0x8c, 0x03, 0x8d, + 0x04, 0x8a, 0x05, 0x8b, 0x06, 0x88, 0x07, 0x89, 0x08, 0x86, 0x09, 0x87, 0x0a, 0x84, 0x0b, + 0x85, 0x0c, 0x82, 0x0d, 0x83, 0x0e, 0x80, 0x0f, 0x81, 0x10, 0x9e, 0x11, 0x9f, 0x12, 0x9c, + 0x13, 0x9d, 0x14, 0x9a, 0x15, 0x9b, 0x16, 0x98, 0x17, 0x99, 0x18, 0x96, 0x19, 0x97, 0x1a, + 0x94, 0x1b, 0x95, 0x1c, 0x92, 0x1d, 0x93, 0x1e, 0x90, 0x1f, 0x91, 0x20, 0xae, 0x21, 0xaf, + 0x22, 0xac, 0x23, 0xad, 0x24, 0xaa, 0x25, 0xab, 0x26, 0xa8, 0x27, 0xa9, 0x28, 0xa6, 0x29, + 0xa7, 0x2a, 0xa4, 0x2b, 0xa5, 0x2c, 0xa2, 0x2d, 0xa3, 0x2e, 0xa0, 0x2f, 0xa1, 0x30, 0xbe, + 0x31, 0xbf, 0x32, 0xbc, 0x33, 0xbd, 0x34, 0xba, 0x35, 0xbb, 0x36, 0xb8, 0x37, 0xb9, 0x38, + 0xb6, 0x39, 0xb7, 0x3a, 0xb4, 0x3b, 0xb5, 0x3c, 0xb2, 0x3d, 0xb3, 0x3e, 0xb0, 0x3f, 0xb1, + 0x40, 0xce, 0x41, 0xcf, 0x42, 0xcc, 0x43, 0xcd, 0x44, 0xca, 0x45, 0xcb, 0x46, 0xc8, 0x47, + 0xc9, 0x48, 0xc6, 0x49, 0xc7, 0x4a, 0xc4, 0x4b, 0xc5, 0x4c, 0xc2, 0x4d, 0xc3, 0x4e, 0xc0, + 0x4f, 0xc1, 0x50, 0xde, 0x51, 0xdf, 0x52, 0xdc, 0x53, 0xdd, 0x54, 0xda, 0x55, 0xdb, 0x56, + 0xd8, 0x57, 0xd9, 0x58, 0xd6, 0x59, 0xd7, 0x5a, 0xd4, 0x5b, 0xd5, 0x5c, 0xd2, 0x5d, 0xd3, + 0x5e, 0xd0, 0x5f, 0xd1, 0x60, 0xee, 0x61, 0xef, 0x62, 0xec, 0x63, 0xed, 0x64, 0xea, 0x65, + 0xeb, 0x66, 0xe8, 0x67, 0xe9, 0x68, 0xe6, 0x69, 0xe7, 0x6a, 0xe4, 0x6b, 0xe5, 0x6c, 0xe2, + 0x6d, 0xe3, 0x6e, 0xe0, 0x6f, 0xe1, 0x70, 0xfe, 0x71, 0xff, 0x72, 0xfc, 0x73, 0xfd, 0x74, + 0xfa, 0x75, 0xfb, 0x76, 0xf8, 0x77, 0xf9, 0x78, 0xf6, 0x79, 0xf7, 0x7a, 0xf4, 0x7b, 0xf5, + 0x7c, 0xf2, 0x7d, 0xf3, 0x7e, 0xf0, 0x7f, 0xf1, 0x00, 0x8f, 0x03, 0x8c, 0x06, 0x89, 0x05, + 0x8a, 0x0c, 0x83, 0x0f, 0x80, 0x0a, 0x85, 0x09, 0x86, 0x18, 0x97, 0x1b, 0x94, 0x1e, 0x91, + 0x1d, 0x92, 0x14, 0x9b, 0x17, 0x98, 0x12, 0x9d, 0x11, 0x9e, 0x30, 0xbf, 0x33, 0xbc, 0x36, + 0xb9, 0x35, 0xba, 0x3c, 0xb3, 0x3f, 0xb0, 0x3a, 0xb5, 0x39, 0xb6, 0x28, 0xa7, 0x2b, 0xa4, + 0x2e, 0xa1, 0x2d, 0xa2, 0x24, 0xab, 0x27, 0xa8, 0x22, 0xad, 0x21, 0xae, 0x60, 0xef, 0x63, + 0xec, 0x66, 0xe9, 0x65, 0xea, 0x6c, 0xe3, 0x6f, 0xe0, 0x6a, 0xe5, 0x69, 0xe6, 0x78, 0xf7, + 0x7b, 0xf4, 0x7e, 0xf1, 0x7d, 0xf2, 0x74, 0xfb, 0x77, 0xf8, 0x72, 0xfd, 0x71, 0xfe, 0x50, + 0xdf, 0x53, 0xdc, 0x56, 0xd9, 0x55, 0xda, 0x5c, 0xd3, 0x5f, 0xd0, 0x5a, 0xd5, 0x59, 0xd6, + 0x48, 0xc7, 0x4b, 0xc4, 0x4e, 0xc1, 0x4d, 0xc2, 0x44, 0xcb, 0x47, 0xc8, 0x42, 0xcd, 0x41, + 0xce, 0xc0, 0x4f, 0xc3, 0x4c, 0xc6, 0x49, 0xc5, 0x4a, 0xcc, 0x43, 0xcf, 0x40, 0xca, 0x45, + 0xc9, 0x46, 0xd8, 0x57, 0xdb, 0x54, 0xde, 0x51, 0xdd, 0x52, 0xd4, 0x5b, 0xd7, 0x58, 0xd2, + 0x5d, 0xd1, 0x5e, 0xf0, 0x7f, 0xf3, 0x7c, 0xf6, 0x79, 0xf5, 0x7a, 0xfc, 0x73, 0xff, 0x70, + 0xfa, 0x75, 0xf9, 0x76, 0xe8, 0x67, 0xeb, 0x64, 0xee, 0x61, 0xed, 0x62, 0xe4, 0x6b, 0xe7, + 0x68, 0xe2, 0x6d, 0xe1, 0x6e, 0xa0, 0x2f, 0xa3, 0x2c, 0xa6, 0x29, 0xa5, 0x2a, 0xac, 0x23, + 0xaf, 0x20, 0xaa, 0x25, 0xa9, 0x26, 0xb8, 0x37, 0xbb, 0x34, 0xbe, 0x31, 0xbd, 0x32, 0xb4, + 0x3b, 0xb7, 0x38, 0xb2, 0x3d, 0xb1, 0x3e, 0x90, 0x1f, 0x93, 0x1c, 0x96, 0x19, 0x95, 0x1a, + 0x9c, 0x13, 0x9f, 0x10, 0x9a, 0x15, 0x99, 0x16, 0x88, 0x07, 0x8b, 0x04, 0x8e, 0x01, 0x8d, + 0x02, 0x84, 0x0b, 0x87, 0x08, 0x82, 0x0d, 0x81, 0x0e, 0x00, 0x90, 0x3d, 0xad, 0x7a, 0xea, + 0x47, 0xd7, 0xf4, 0x64, 0xc9, 0x59, 0x8e, 0x1e, 0xb3, 0x23, 0xf5, 0x65, 0xc8, 0x58, 0x8f, + 0x1f, 0xb2, 0x22, 0x01, 0x91, 0x3c, 0xac, 0x7b, 0xeb, 0x46, 0xd6, 0xf7, 0x67, 0xca, 0x5a, + 0x8d, 0x1d, 0xb0, 0x20, 0x03, 0x93, 0x3e, 0xae, 0x79, 0xe9, 0x44, 0xd4, 0x02, 0x92, 0x3f, + 0xaf, 0x78, 0xe8, 0x45, 0xd5, 0xf6, 0x66, 0xcb, 0x5b, 0x8c, 0x1c, 0xb1, 0x21, 0xf3, 0x63, + 0xce, 0x5e, 0x89, 0x19, 0xb4, 0x24, 0x07, 0x97, 0x3a, 0xaa, 0x7d, 0xed, 0x40, 0xd0, 0x06, + 0x96, 0x3b, 0xab, 0x7c, 0xec, 0x41, 0xd1, 0xf2, 0x62, 0xcf, 0x5f, 0x88, 0x18, 0xb5, 0x25, + 0x04, 0x94, 0x39, 0xa9, 0x7e, 0xee, 0x43, 0xd3, 0xf0, 0x60, 0xcd, 0x5d, 0x8a, 0x1a, 0xb7, + 0x27, 0xf1, 0x61, 0xcc, 0x5c, 0x8b, 0x1b, 0xb6, 0x26, 0x05, 0x95, 0x38, 0xa8, 0x7f, 0xef, + 0x42, 0xd2, 0xfb, 0x6b, 0xc6, 0x56, 0x81, 0x11, 0xbc, 0x2c, 0x0f, 0x9f, 0x32, 0xa2, 0x75, + 0xe5, 0x48, 0xd8, 0x0e, 0x9e, 0x33, 0xa3, 0x74, 0xe4, 0x49, 0xd9, 0xfa, 0x6a, 0xc7, 0x57, + 0x80, 0x10, 0xbd, 0x2d, 0x0c, 0x9c, 0x31, 0xa1, 0x76, 0xe6, 0x4b, 0xdb, 0xf8, 0x68, 0xc5, + 0x55, 0x82, 0x12, 0xbf, 0x2f, 0xf9, 0x69, 0xc4, 0x54, 0x83, 0x13, 0xbe, 0x2e, 0x0d, 0x9d, + 0x30, 0xa0, 0x77, 0xe7, 0x4a, 0xda, 0x08, 0x98, 0x35, 0xa5, 0x72, 0xe2, 0x4f, 0xdf, 0xfc, + 0x6c, 0xc1, 0x51, 0x86, 0x16, 0xbb, 0x2b, 0xfd, 0x6d, 0xc0, 0x50, 0x87, 0x17, 0xba, 0x2a, + 0x09, 0x99, 0x34, 0xa4, 0x73, 0xe3, 0x4e, 0xde, 0xff, 0x6f, 0xc2, 0x52, 0x85, 0x15, 0xb8, + 0x28, 0x0b, 0x9b, 0x36, 0xa6, 0x71, 0xe1, 0x4c, 0xdc, 0x0a, 0x9a, 0x37, 0xa7, 0x70, 0xe0, + 0x4d, 0xdd, 0xfe, 0x6e, 0xc3, 0x53, 0x84, 0x14, 0xb9, 0x29, 0x00, 0x91, 0x3f, 0xae, 0x7e, + 0xef, 0x41, 0xd0, 0xfc, 0x6d, 0xc3, 0x52, 0x82, 0x13, 0xbd, 0x2c, 0xe5, 0x74, 0xda, 0x4b, + 0x9b, 0x0a, 0xa4, 0x35, 0x19, 0x88, 0x26, 0xb7, 0x67, 0xf6, 0x58, 0xc9, 0xd7, 0x46, 0xe8, + 0x79, 0xa9, 0x38, 0x96, 0x07, 0x2b, 0xba, 0x14, 0x85, 0x55, 0xc4, 0x6a, 0xfb, 0x32, 0xa3, + 0x0d, 0x9c, 0x4c, 0xdd, 0x73, 0xe2, 0xce, 0x5f, 0xf1, 0x60, 0xb0, 0x21, 0x8f, 0x1e, 0xb3, + 0x22, 0x8c, 0x1d, 0xcd, 0x5c, 0xf2, 0x63, 0x4f, 0xde, 0x70, 0xe1, 0x31, 0xa0, 0x0e, 0x9f, + 0x56, 0xc7, 0x69, 0xf8, 0x28, 0xb9, 0x17, 0x86, 0xaa, 0x3b, 0x95, 0x04, 0xd4, 0x45, 0xeb, + 0x7a, 0x64, 0xf5, 0x5b, 0xca, 0x1a, 0x8b, 0x25, 0xb4, 0x98, 0x09, 0xa7, 0x36, 0xe6, 0x77, + 0xd9, 0x48, 0x81, 0x10, 0xbe, 0x2f, 0xff, 0x6e, 0xc0, 0x51, 0x7d, 0xec, 0x42, 0xd3, 0x03, + 0x92, 0x3c, 0xad, 0x7b, 0xea, 0x44, 0xd5, 0x05, 0x94, 0x3a, 0xab, 0x87, 0x16, 0xb8, 0x29, + 0xf9, 0x68, 0xc6, 0x57, 0x9e, 0x0f, 0xa1, 0x30, 0xe0, 0x71, 0xdf, 0x4e, 0x62, 0xf3, 0x5d, + 0xcc, 0x1c, 0x8d, 0x23, 0xb2, 0xac, 0x3d, 0x93, 0x02, 0xd2, 0x43, 0xed, 0x7c, 0x50, 0xc1, + 0x6f, 0xfe, 0x2e, 0xbf, 0x11, 0x80, 0x49, 0xd8, 0x76, 0xe7, 0x37, 0xa6, 0x08, 0x99, 0xb5, + 0x24, 0x8a, 0x1b, 0xcb, 0x5a, 0xf4, 0x65, 0xc8, 0x59, 0xf7, 0x66, 0xb6, 0x27, 0x89, 0x18, + 0x34, 0xa5, 0x0b, 0x9a, 0x4a, 0xdb, 0x75, 0xe4, 0x2d, 0xbc, 0x12, 0x83, 0x53, 0xc2, 0x6c, + 0xfd, 0xd1, 0x40, 0xee, 0x7f, 0xaf, 0x3e, 0x90, 0x01, 0x1f, 0x8e, 0x20, 0xb1, 0x61, 0xf0, + 0x5e, 0xcf, 0xe3, 0x72, 0xdc, 0x4d, 0x9d, 0x0c, 0xa2, 0x33, 0xfa, 0x6b, 0xc5, 0x54, 0x84, + 0x15, 0xbb, 0x2a, 0x06, 0x97, 0x39, 0xa8, 0x78, 0xe9, 0x47, 0xd6, 0x00, 0x92, 0x39, 0xab, + 0x72, 0xe0, 0x4b, 0xd9, 0xe4, 0x76, 0xdd, 0x4f, 0x96, 0x04, 0xaf, 0x3d, 0xd5, 0x47, 0xec, + 0x7e, 0xa7, 0x35, 0x9e, 0x0c, 0x31, 0xa3, 0x08, 0x9a, 0x43, 0xd1, 0x7a, 0xe8, 0xb7, 0x25, + 0x8e, 0x1c, 0xc5, 0x57, 0xfc, 0x6e, 0x53, 0xc1, 0x6a, 0xf8, 0x21, 0xb3, 0x18, 0x8a, 0x62, + 0xf0, 0x5b, 0xc9, 0x10, 0x82, 0x29, 0xbb, 0x86, 0x14, 0xbf, 0x2d, 0xf4, 0x66, 0xcd, 0x5f, + 0x73, 0xe1, 0x4a, 0xd8, 0x01, 0x93, 0x38, 0xaa, 0x97, 0x05, 0xae, 0x3c, 0xe5, 0x77, 0xdc, + 0x4e, 0xa6, 0x34, 0x9f, 0x0d, 0xd4, 0x46, 0xed, 0x7f, 0x42, 0xd0, 0x7b, 0xe9, 0x30, 0xa2, + 0x09, 0x9b, 0xc4, 0x56, 0xfd, 0x6f, 0xb6, 0x24, 0x8f, 0x1d, 0x20, 0xb2, 0x19, 0x8b, 0x52, + 0xc0, 0x6b, 0xf9, 0x11, 0x83, 0x28, 0xba, 0x63, 0xf1, 0x5a, 0xc8, 0xf5, 0x67, 0xcc, 0x5e, + 0x87, 0x15, 0xbe, 0x2c, 0xe6, 0x74, 0xdf, 0x4d, 0x94, 0x06, 0xad, 0x3f, 0x02, 0x90, 0x3b, + 0xa9, 0x70, 0xe2, 0x49, 0xdb, 0x33, 0xa1, 0x0a, 0x98, 0x41, 0xd3, 0x78, 0xea, 0xd7, 0x45, + 0xee, 0x7c, 0xa5, 0x37, 0x9c, 0x0e, 0x51, 0xc3, 0x68, 0xfa, 0x23, 0xb1, 0x1a, 0x88, 0xb5, + 0x27, 0x8c, 0x1e, 0xc7, 0x55, 0xfe, 0x6c, 0x84, 0x16, 0xbd, 0x2f, 0xf6, 0x64, 0xcf, 0x5d, + 0x60, 0xf2, 0x59, 0xcb, 0x12, 0x80, 0x2b, 0xb9, 0x95, 0x07, 0xac, 0x3e, 0xe7, 0x75, 0xde, + 0x4c, 0x71, 0xe3, 0x48, 0xda, 0x03, 0x91, 0x3a, 0xa8, 0x40, 0xd2, 0x79, 0xeb, 0x32, 0xa0, + 0x0b, 0x99, 0xa4, 0x36, 0x9d, 0x0f, 0xd6, 0x44, 0xef, 0x7d, 0x22, 0xb0, 0x1b, 0x89, 0x50, + 0xc2, 0x69, 0xfb, 0xc6, 0x54, 0xff, 0x6d, 0xb4, 0x26, 0x8d, 0x1f, 0xf7, 0x65, 0xce, 0x5c, + 0x85, 0x17, 0xbc, 0x2e, 0x13, 0x81, 0x2a, 0xb8, 0x61, 0xf3, 0x58, 0xca, 0x00, 0x93, 0x3b, + 0xa8, 0x76, 0xe5, 0x4d, 0xde, 0xec, 0x7f, 0xd7, 0x44, 0x9a, 0x09, 0xa1, 0x32, 0xc5, 0x56, + 0xfe, 0x6d, 0xb3, 0x20, 0x88, 0x1b, 0x29, 0xba, 0x12, 0x81, 0x5f, 0xcc, 0x64, 0xf7, 0x97, + 0x04, 0xac, 0x3f, 0xe1, 0x72, 0xda, 0x49, 0x7b, 0xe8, 0x40, 0xd3, 0x0d, 0x9e, 0x36, 0xa5, + 0x52, 0xc1, 0x69, 0xfa, 0x24, 0xb7, 0x1f, 0x8c, 0xbe, 0x2d, 0x85, 0x16, 0xc8, 0x5b, 0xf3, + 0x60, 0x33, 0xa0, 0x08, 0x9b, 0x45, 0xd6, 0x7e, 0xed, 0xdf, 0x4c, 0xe4, 0x77, 0xa9, 0x3a, + 0x92, 0x01, 0xf6, 0x65, 0xcd, 0x5e, 0x80, 0x13, 0xbb, 0x28, 0x1a, 0x89, 0x21, 0xb2, 0x6c, + 0xff, 0x57, 0xc4, 0xa4, 0x37, 0x9f, 0x0c, 0xd2, 0x41, 0xe9, 0x7a, 0x48, 0xdb, 0x73, 0xe0, + 0x3e, 0xad, 0x05, 0x96, 0x61, 0xf2, 0x5a, 0xc9, 0x17, 0x84, 0x2c, 0xbf, 0x8d, 0x1e, 0xb6, + 0x25, 0xfb, 0x68, 0xc0, 0x53, 0x66, 0xf5, 0x5d, 0xce, 0x10, 0x83, 0x2b, 0xb8, 0x8a, 0x19, + 0xb1, 0x22, 0xfc, 0x6f, 0xc7, 0x54, 0xa3, 0x30, 0x98, 0x0b, 0xd5, 0x46, 0xee, 0x7d, 0x4f, + 0xdc, 0x74, 0xe7, 0x39, 0xaa, 0x02, 0x91, 0xf1, 0x62, 0xca, 0x59, 0x87, 0x14, 0xbc, 0x2f, + 0x1d, 0x8e, 0x26, 0xb5, 0x6b, 0xf8, 0x50, 0xc3, 0x34, 0xa7, 0x0f, 0x9c, 0x42, 0xd1, 0x79, + 0xea, 0xd8, 0x4b, 0xe3, 0x70, 0xae, 0x3d, 0x95, 0x06, 0x55, 0xc6, 0x6e, 0xfd, 0x23, 0xb0, + 0x18, 0x8b, 0xb9, 0x2a, 0x82, 0x11, 0xcf, 0x5c, 0xf4, 0x67, 0x90, 0x03, 0xab, 0x38, 0xe6, + 0x75, 0xdd, 0x4e, 0x7c, 0xef, 0x47, 0xd4, 0x0a, 0x99, 0x31, 0xa2, 0xc2, 0x51, 0xf9, 0x6a, + 0xb4, 0x27, 0x8f, 0x1c, 0x2e, 0xbd, 0x15, 0x86, 0x58, 0xcb, 0x63, 0xf0, 0x07, 0x94, 0x3c, + 0xaf, 0x71, 0xe2, 0x4a, 0xd9, 0xeb, 0x78, 0xd0, 0x43, 0x9d, 0x0e, 0xa6, 0x35, 0x00, 0x94, + 0x35, 0xa1, 0x6a, 0xfe, 0x5f, 0xcb, 0xd4, 0x40, 0xe1, 0x75, 0xbe, 0x2a, 0x8b, 0x1f, 0xb5, + 0x21, 0x80, 0x14, 0xdf, 0x4b, 0xea, 0x7e, 0x61, 0xf5, 0x54, 0xc0, 0x0b, 0x9f, 0x3e, 0xaa, + 0x77, 0xe3, 0x42, 0xd6, 0x1d, 0x89, 0x28, 0xbc, 0xa3, 0x37, 0x96, 0x02, 0xc9, 0x5d, 0xfc, + 0x68, 0xc2, 0x56, 0xf7, 0x63, 0xa8, 0x3c, 0x9d, 0x09, 0x16, 0x82, 0x23, 0xb7, 0x7c, 0xe8, + 0x49, 0xdd, 0xee, 0x7a, 0xdb, 0x4f, 0x84, 0x10, 0xb1, 0x25, 0x3a, 0xae, 0x0f, 0x9b, 0x50, + 0xc4, 0x65, 0xf1, 0x5b, 0xcf, 0x6e, 0xfa, 0x31, 0xa5, 0x04, 0x90, 0x8f, 0x1b, 0xba, 0x2e, + 0xe5, 0x71, 0xd0, 0x44, 0x99, 0x0d, 0xac, 0x38, 0xf3, 0x67, 0xc6, 0x52, 0x4d, 0xd9, 0x78, + 0xec, 0x27, 0xb3, 0x12, 0x86, 0x2c, 0xb8, 0x19, 0x8d, 0x46, 0xd2, 0x73, 0xe7, 0xf8, 0x6c, + 0xcd, 0x59, 0x92, 0x06, 0xa7, 0x33, 0xc1, 0x55, 0xf4, 0x60, 0xab, 0x3f, 0x9e, 0x0a, 0x15, + 0x81, 0x20, 0xb4, 0x7f, 0xeb, 0x4a, 0xde, 0x74, 0xe0, 0x41, 0xd5, 0x1e, 0x8a, 0x2b, 0xbf, + 0xa0, 0x34, 0x95, 0x01, 0xca, 0x5e, 0xff, 0x6b, 0xb6, 0x22, 0x83, 0x17, 0xdc, 0x48, 0xe9, + 0x7d, 0x62, 0xf6, 0x57, 0xc3, 0x08, 0x9c, 0x3d, 0xa9, 0x03, 0x97, 0x36, 0xa2, 0x69, 0xfd, + 0x5c, 0xc8, 0xd7, 0x43, 0xe2, 0x76, 0xbd, 0x29, 0x88, 0x1c, 0x2f, 0xbb, 0x1a, 0x8e, 0x45, + 0xd1, 0x70, 0xe4, 0xfb, 0x6f, 0xce, 0x5a, 0x91, 0x05, 0xa4, 0x30, 0x9a, 0x0e, 0xaf, 0x3b, + 0xf0, 0x64, 0xc5, 0x51, 0x4e, 0xda, 0x7b, 0xef, 0x24, 0xb0, 0x11, 0x85, 0x58, 0xcc, 0x6d, + 0xf9, 0x32, 0xa6, 0x07, 0x93, 0x8c, 0x18, 0xb9, 0x2d, 0xe6, 0x72, 0xd3, 0x47, 0xed, 0x79, + 0xd8, 0x4c, 0x87, 0x13, 0xb2, 0x26, 0x39, 0xad, 0x0c, 0x98, 0x53, 0xc7, 0x66, 0xf2, 0x00, + 0x95, 0x37, 0xa2, 0x6e, 0xfb, 0x59, 0xcc, 0xdc, 0x49, 0xeb, 0x7e, 0xb2, 0x27, 0x85, 0x10, + 0xa5, 0x30, 0x92, 0x07, 0xcb, 0x5e, 0xfc, 0x69, 0x79, 0xec, 0x4e, 0xdb, 0x17, 0x82, 0x20, + 0xb5, 0x57, 0xc2, 0x60, 0xf5, 0x39, 0xac, 0x0e, 0x9b, 0x8b, 0x1e, 0xbc, 0x29, 0xe5, 0x70, + 0xd2, 0x47, 0xf2, 0x67, 0xc5, 0x50, 0x9c, 0x09, 0xab, 0x3e, 0x2e, 0xbb, 0x19, 0x8c, 0x40, + 0xd5, 0x77, 0xe2, 0xae, 0x3b, 0x99, 0x0c, 0xc0, 0x55, 0xf7, 0x62, 0x72, 0xe7, 0x45, 0xd0, + 0x1c, 0x89, 0x2b, 0xbe, 0x0b, 0x9e, 0x3c, 0xa9, 0x65, 0xf0, 0x52, 0xc7, 0xd7, 0x42, 0xe0, + 0x75, 0xb9, 0x2c, 0x8e, 0x1b, 0xf9, 0x6c, 0xce, 0x5b, 0x97, 0x02, 0xa0, 0x35, 0x25, 0xb0, + 0x12, 0x87, 0x4b, 0xde, 0x7c, 0xe9, 0x5c, 0xc9, 0x6b, 0xfe, 0x32, 0xa7, 0x05, 0x90, 0x80, + 0x15, 0xb7, 0x22, 0xee, 0x7b, 0xd9, 0x4c, 0x41, 0xd4, 0x76, 0xe3, 0x2f, 0xba, 0x18, 0x8d, + 0x9d, 0x08, 0xaa, 0x3f, 0xf3, 0x66, 0xc4, 0x51, 0xe4, 0x71, 0xd3, 0x46, 0x8a, 0x1f, 0xbd, + 0x28, 0x38, 0xad, 0x0f, 0x9a, 0x56, 0xc3, 0x61, 0xf4, 0x16, 0x83, 0x21, 0xb4, 0x78, 0xed, + 0x4f, 0xda, 0xca, 0x5f, 0xfd, 0x68, 0xa4, 0x31, 0x93, 0x06, 0xb3, 0x26, 0x84, 0x11, 0xdd, + 0x48, 0xea, 0x7f, 0x6f, 0xfa, 0x58, 0xcd, 0x01, 0x94, 0x36, 0xa3, 0xef, 0x7a, 0xd8, 0x4d, + 0x81, 0x14, 0xb6, 0x23, 0x33, 0xa6, 0x04, 0x91, 0x5d, 0xc8, 0x6a, 0xff, 0x4a, 0xdf, 0x7d, + 0xe8, 0x24, 0xb1, 0x13, 0x86, 0x96, 0x03, 0xa1, 0x34, 0xf8, 0x6d, 0xcf, 0x5a, 0xb8, 0x2d, + 0x8f, 0x1a, 0xd6, 0x43, 0xe1, 0x74, 0x64, 0xf1, 0x53, 0xc6, 0x0a, 0x9f, 0x3d, 0xa8, 0x1d, + 0x88, 0x2a, 0xbf, 0x73, 0xe6, 0x44, 0xd1, 0xc1, 0x54, 0xf6, 0x63, 0xaf, 0x3a, 0x98, 0x0d, + 0x00, 0x96, 0x31, 0xa7, 0x62, 0xf4, 0x53, 0xc5, 0xc4, 0x52, 0xf5, 0x63, 0xa6, 0x30, 0x97, + 0x01, 0x95, 0x03, 0xa4, 0x32, 0xf7, 0x61, 0xc6, 0x50, 0x51, 0xc7, 0x60, 0xf6, 0x33, 0xa5, + 0x02, 0x94, 0x37, 0xa1, 0x06, 0x90, 0x55, 0xc3, 0x64, 0xf2, 0xf3, 0x65, 0xc2, 0x54, 0x91, + 0x07, 0xa0, 0x36, 0xa2, 0x34, 0x93, 0x05, 0xc0, 0x56, 0xf1, 0x67, 0x66, 0xf0, 0x57, 0xc1, + 0x04, 0x92, 0x35, 0xa3, 0x6e, 0xf8, 0x5f, 0xc9, 0x0c, 0x9a, 0x3d, 0xab, 0xaa, 0x3c, 0x9b, + 0x0d, 0xc8, 0x5e, 0xf9, 0x6f, 0xfb, 0x6d, 0xca, 0x5c, 0x99, 0x0f, 0xa8, 0x3e, 0x3f, 0xa9, + 0x0e, 0x98, 0x5d, 0xcb, 0x6c, 0xfa, 0x59, 0xcf, 0x68, 0xfe, 0x3b, 0xad, 0x0a, 0x9c, 0x9d, + 0x0b, 0xac, 0x3a, 0xff, 0x69, 0xce, 0x58, 0xcc, 0x5a, 0xfd, 0x6b, 0xae, 0x38, 0x9f, 0x09, + 0x08, 0x9e, 0x39, 0xaf, 0x6a, 0xfc, 0x5b, 0xcd, 0xdc, 0x4a, 0xed, 0x7b, 0xbe, 0x28, 0x8f, + 0x19, 0x18, 0x8e, 0x29, 0xbf, 0x7a, 0xec, 0x4b, 0xdd, 0x49, 0xdf, 0x78, 0xee, 0x2b, 0xbd, + 0x1a, 0x8c, 0x8d, 0x1b, 0xbc, 0x2a, 0xef, 0x79, 0xde, 0x48, 0xeb, 0x7d, 0xda, 0x4c, 0x89, + 0x1f, 0xb8, 0x2e, 0x2f, 0xb9, 0x1e, 0x88, 0x4d, 0xdb, 0x7c, 0xea, 0x7e, 0xe8, 0x4f, 0xd9, + 0x1c, 0x8a, 0x2d, 0xbb, 0xba, 0x2c, 0x8b, 0x1d, 0xd8, 0x4e, 0xe9, 0x7f, 0xb2, 0x24, 0x83, + 0x15, 0xd0, 0x46, 0xe1, 0x77, 0x76, 0xe0, 0x47, 0xd1, 0x14, 0x82, 0x25, 0xb3, 0x27, 0xb1, + 0x16, 0x80, 0x45, 0xd3, 0x74, 0xe2, 0xe3, 0x75, 0xd2, 0x44, 0x81, 0x17, 0xb0, 0x26, 0x85, + 0x13, 0xb4, 0x22, 0xe7, 0x71, 0xd6, 0x40, 0x41, 0xd7, 0x70, 0xe6, 0x23, 0xb5, 0x12, 0x84, + 0x10, 0x86, 0x21, 0xb7, 0x72, 0xe4, 0x43, 0xd5, 0xd4, 0x42, 0xe5, 0x73, 0xb6, 0x20, 0x87, + 0x11, 0x00, 0x97, 0x33, 0xa4, 0x66, 0xf1, 0x55, 0xc2, 0xcc, 0x5b, 0xff, 0x68, 0xaa, 0x3d, + 0x99, 0x0e, 0x85, 0x12, 0xb6, 0x21, 0xe3, 0x74, 0xd0, 0x47, 0x49, 0xde, 0x7a, 0xed, 0x2f, + 0xb8, 0x1c, 0x8b, 0x17, 0x80, 0x24, 0xb3, 0x71, 0xe6, 0x42, 0xd5, 0xdb, 0x4c, 0xe8, 0x7f, + 0xbd, 0x2a, 0x8e, 0x19, 0x92, 0x05, 0xa1, 0x36, 0xf4, 0x63, 0xc7, 0x50, 0x5e, 0xc9, 0x6d, + 0xfa, 0x38, 0xaf, 0x0b, 0x9c, 0x2e, 0xb9, 0x1d, 0x8a, 0x48, 0xdf, 0x7b, 0xec, 0xe2, 0x75, + 0xd1, 0x46, 0x84, 0x13, 0xb7, 0x20, 0xab, 0x3c, 0x98, 0x0f, 0xcd, 0x5a, 0xfe, 0x69, 0x67, + 0xf0, 0x54, 0xc3, 0x01, 0x96, 0x32, 0xa5, 0x39, 0xae, 0x0a, 0x9d, 0x5f, 0xc8, 0x6c, 0xfb, + 0xf5, 0x62, 0xc6, 0x51, 0x93, 0x04, 0xa0, 0x37, 0xbc, 0x2b, 0x8f, 0x18, 0xda, 0x4d, 0xe9, + 0x7e, 0x70, 0xe7, 0x43, 0xd4, 0x16, 0x81, 0x25, 0xb2, 0x5c, 0xcb, 0x6f, 0xf8, 0x3a, 0xad, + 0x09, 0x9e, 0x90, 0x07, 0xa3, 0x34, 0xf6, 0x61, 0xc5, 0x52, 0xd9, 0x4e, 0xea, 0x7d, 0xbf, + 0x28, 0x8c, 0x1b, 0x15, 0x82, 0x26, 0xb1, 0x73, 0xe4, 0x40, 0xd7, 0x4b, 0xdc, 0x78, 0xef, + 0x2d, 0xba, 0x1e, 0x89, 0x87, 0x10, 0xb4, 0x23, 0xe1, 0x76, 0xd2, 0x45, 0xce, 0x59, 0xfd, + 0x6a, 0xa8, 0x3f, 0x9b, 0x0c, 0x02, 0x95, 0x31, 0xa6, 0x64, 0xf3, 0x57, 0xc0, 0x72, 0xe5, + 0x41, 0xd6, 0x14, 0x83, 0x27, 0xb0, 0xbe, 0x29, 0x8d, 0x1a, 0xd8, 0x4f, 0xeb, 0x7c, 0xf7, + 0x60, 0xc4, 0x53, 0x91, 0x06, 0xa2, 0x35, 0x3b, 0xac, 0x08, 0x9f, 0x5d, 0xca, 0x6e, 0xf9, + 0x65, 0xf2, 0x56, 0xc1, 0x03, 0x94, 0x30, 0xa7, 0xa9, 0x3e, 0x9a, 0x0d, 0xcf, 0x58, 0xfc, + 0x6b, 0xe0, 0x77, 0xd3, 0x44, 0x86, 0x11, 0xb5, 0x22, 0x2c, 0xbb, 0x1f, 0x88, 0x4a, 0xdd, + 0x79, 0xee, 0x00, 0x98, 0x2d, 0xb5, 0x5a, 0xc2, 0x77, 0xef, 0xb4, 0x2c, 0x99, 0x01, 0xee, + 0x76, 0xc3, 0x5b, 0x75, 0xed, 0x58, 0xc0, 0x2f, 0xb7, 0x02, 0x9a, 0xc1, 0x59, 0xec, 0x74, + 0x9b, 0x03, 0xb6, 0x2e, 0xea, 0x72, 0xc7, 0x5f, 0xb0, 0x28, 0x9d, 0x05, 0x5e, 0xc6, 0x73, + 0xeb, 0x04, 0x9c, 0x29, 0xb1, 0x9f, 0x07, 0xb2, 0x2a, 0xc5, 0x5d, 0xe8, 0x70, 0x2b, 0xb3, + 0x06, 0x9e, 0x71, 0xe9, 0x5c, 0xc4, 0xc9, 0x51, 0xe4, 0x7c, 0x93, 0x0b, 0xbe, 0x26, 0x7d, + 0xe5, 0x50, 0xc8, 0x27, 0xbf, 0x0a, 0x92, 0xbc, 0x24, 0x91, 0x09, 0xe6, 0x7e, 0xcb, 0x53, + 0x08, 0x90, 0x25, 0xbd, 0x52, 0xca, 0x7f, 0xe7, 0x23, 0xbb, 0x0e, 0x96, 0x79, 0xe1, 0x54, + 0xcc, 0x97, 0x0f, 0xba, 0x22, 0xcd, 0x55, 0xe0, 0x78, 0x56, 0xce, 0x7b, 0xe3, 0x0c, 0x94, + 0x21, 0xb9, 0xe2, 0x7a, 0xcf, 0x57, 0xb8, 0x20, 0x95, 0x0d, 0x8f, 0x17, 0xa2, 0x3a, 0xd5, + 0x4d, 0xf8, 0x60, 0x3b, 0xa3, 0x16, 0x8e, 0x61, 0xf9, 0x4c, 0xd4, 0xfa, 0x62, 0xd7, 0x4f, + 0xa0, 0x38, 0x8d, 0x15, 0x4e, 0xd6, 0x63, 0xfb, 0x14, 0x8c, 0x39, 0xa1, 0x65, 0xfd, 0x48, + 0xd0, 0x3f, 0xa7, 0x12, 0x8a, 0xd1, 0x49, 0xfc, 0x64, 0x8b, 0x13, 0xa6, 0x3e, 0x10, 0x88, + 0x3d, 0xa5, 0x4a, 0xd2, 0x67, 0xff, 0xa4, 0x3c, 0x89, 0x11, 0xfe, 0x66, 0xd3, 0x4b, 0x46, + 0xde, 0x6b, 0xf3, 0x1c, 0x84, 0x31, 0xa9, 0xf2, 0x6a, 0xdf, 0x47, 0xa8, 0x30, 0x85, 0x1d, + 0x33, 0xab, 0x1e, 0x86, 0x69, 0xf1, 0x44, 0xdc, 0x87, 0x1f, 0xaa, 0x32, 0xdd, 0x45, 0xf0, + 0x68, 0xac, 0x34, 0x81, 0x19, 0xf6, 0x6e, 0xdb, 0x43, 0x18, 0x80, 0x35, 0xad, 0x42, 0xda, + 0x6f, 0xf7, 0xd9, 0x41, 0xf4, 0x6c, 0x83, 0x1b, 0xae, 0x36, 0x6d, 0xf5, 0x40, 0xd8, 0x37, + 0xaf, 0x1a, 0x82, 0x00, 0x99, 0x2f, 0xb6, 0x5e, 0xc7, 0x71, 0xe8, 0xbc, 0x25, 0x93, 0x0a, + 0xe2, 0x7b, 0xcd, 0x54, 0x65, 0xfc, 0x4a, 0xd3, 0x3b, 0xa2, 0x14, 0x8d, 0xd9, 0x40, 0xf6, + 0x6f, 0x87, 0x1e, 0xa8, 0x31, 0xca, 0x53, 0xe5, 0x7c, 0x94, 0x0d, 0xbb, 0x22, 0x76, 0xef, + 0x59, 0xc0, 0x28, 0xb1, 0x07, 0x9e, 0xaf, 0x36, 0x80, 0x19, 0xf1, 0x68, 0xde, 0x47, 0x13, + 0x8a, 0x3c, 0xa5, 0x4d, 0xd4, 0x62, 0xfb, 0x89, 0x10, 0xa6, 0x3f, 0xd7, 0x4e, 0xf8, 0x61, + 0x35, 0xac, 0x1a, 0x83, 0x6b, 0xf2, 0x44, 0xdd, 0xec, 0x75, 0xc3, 0x5a, 0xb2, 0x2b, 0x9d, + 0x04, 0x50, 0xc9, 0x7f, 0xe6, 0x0e, 0x97, 0x21, 0xb8, 0x43, 0xda, 0x6c, 0xf5, 0x1d, 0x84, + 0x32, 0xab, 0xff, 0x66, 0xd0, 0x49, 0xa1, 0x38, 0x8e, 0x17, 0x26, 0xbf, 0x09, 0x90, 0x78, + 0xe1, 0x57, 0xce, 0x9a, 0x03, 0xb5, 0x2c, 0xc4, 0x5d, 0xeb, 0x72, 0x0f, 0x96, 0x20, 0xb9, + 0x51, 0xc8, 0x7e, 0xe7, 0xb3, 0x2a, 0x9c, 0x05, 0xed, 0x74, 0xc2, 0x5b, 0x6a, 0xf3, 0x45, + 0xdc, 0x34, 0xad, 0x1b, 0x82, 0xd6, 0x4f, 0xf9, 0x60, 0x88, 0x11, 0xa7, 0x3e, 0xc5, 0x5c, + 0xea, 0x73, 0x9b, 0x02, 0xb4, 0x2d, 0x79, 0xe0, 0x56, 0xcf, 0x27, 0xbe, 0x08, 0x91, 0xa0, + 0x39, 0x8f, 0x16, 0xfe, 0x67, 0xd1, 0x48, 0x1c, 0x85, 0x33, 0xaa, 0x42, 0xdb, 0x6d, 0xf4, + 0x86, 0x1f, 0xa9, 0x30, 0xd8, 0x41, 0xf7, 0x6e, 0x3a, 0xa3, 0x15, 0x8c, 0x64, 0xfd, 0x4b, + 0xd2, 0xe3, 0x7a, 0xcc, 0x55, 0xbd, 0x24, 0x92, 0x0b, 0x5f, 0xc6, 0x70, 0xe9, 0x01, 0x98, + 0x2e, 0xb7, 0x4c, 0xd5, 0x63, 0xfa, 0x12, 0x8b, 0x3d, 0xa4, 0xf0, 0x69, 0xdf, 0x46, 0xae, + 0x37, 0x81, 0x18, 0x29, 0xb0, 0x06, 0x9f, 0x77, 0xee, 0x58, 0xc1, 0x95, 0x0c, 0xba, 0x23, + 0xcb, 0x52, 0xe4, 0x7d, 0x00, 0x9a, 0x29, 0xb3, 0x52, 0xc8, 0x7b, 0xe1, 0xa4, 0x3e, 0x8d, + 0x17, 0xf6, 0x6c, 0xdf, 0x45, 0x55, 0xcf, 0x7c, 0xe6, 0x07, 0x9d, 0x2e, 0xb4, 0xf1, 0x6b, + 0xd8, 0x42, 0xa3, 0x39, 0x8a, 0x10, 0xaa, 0x30, 0x83, 0x19, 0xf8, 0x62, 0xd1, 0x4b, 0x0e, + 0x94, 0x27, 0xbd, 0x5c, 0xc6, 0x75, 0xef, 0xff, 0x65, 0xd6, 0x4c, 0xad, 0x37, 0x84, 0x1e, + 0x5b, 0xc1, 0x72, 0xe8, 0x09, 0x93, 0x20, 0xba, 0x49, 0xd3, 0x60, 0xfa, 0x1b, 0x81, 0x32, + 0xa8, 0xed, 0x77, 0xc4, 0x5e, 0xbf, 0x25, 0x96, 0x0c, 0x1c, 0x86, 0x35, 0xaf, 0x4e, 0xd4, + 0x67, 0xfd, 0xb8, 0x22, 0x91, 0x0b, 0xea, 0x70, 0xc3, 0x59, 0xe3, 0x79, 0xca, 0x50, 0xb1, + 0x2b, 0x98, 0x02, 0x47, 0xdd, 0x6e, 0xf4, 0x15, 0x8f, 0x3c, 0xa6, 0xb6, 0x2c, 0x9f, 0x05, + 0xe4, 0x7e, 0xcd, 0x57, 0x12, 0x88, 0x3b, 0xa1, 0x40, 0xda, 0x69, 0xf3, 0x92, 0x08, 0xbb, + 0x21, 0xc0, 0x5a, 0xe9, 0x73, 0x36, 0xac, 0x1f, 0x85, 0x64, 0xfe, 0x4d, 0xd7, 0xc7, 0x5d, + 0xee, 0x74, 0x95, 0x0f, 0xbc, 0x26, 0x63, 0xf9, 0x4a, 0xd0, 0x31, 0xab, 0x18, 0x82, 0x38, + 0xa2, 0x11, 0x8b, 0x6a, 0xf0, 0x43, 0xd9, 0x9c, 0x06, 0xb5, 0x2f, 0xce, 0x54, 0xe7, 0x7d, + 0x6d, 0xf7, 0x44, 0xde, 0x3f, 0xa5, 0x16, 0x8c, 0xc9, 0x53, 0xe0, 0x7a, 0x9b, 0x01, 0xb2, + 0x28, 0xdb, 0x41, 0xf2, 0x68, 0x89, 0x13, 0xa0, 0x3a, 0x7f, 0xe5, 0x56, 0xcc, 0x2d, 0xb7, + 0x04, 0x9e, 0x8e, 0x14, 0xa7, 0x3d, 0xdc, 0x46, 0xf5, 0x6f, 0x2a, 0xb0, 0x03, 0x99, 0x78, + 0xe2, 0x51, 0xcb, 0x71, 0xeb, 0x58, 0xc2, 0x23, 0xb9, 0x0a, 0x90, 0xd5, 0x4f, 0xfc, 0x66, + 0x87, 0x1d, 0xae, 0x34, 0x24, 0xbe, 0x0d, 0x97, 0x76, 0xec, 0x5f, 0xc5, 0x80, 0x1a, 0xa9, + 0x33, 0xd2, 0x48, 0xfb, 0x61, 0x00, 0x9b, 0x2b, 0xb0, 0x56, 0xcd, 0x7d, 0xe6, 0xac, 0x37, + 0x87, 0x1c, 0xfa, 0x61, 0xd1, 0x4a, 0x45, 0xde, 0x6e, 0xf5, 0x13, 0x88, 0x38, 0xa3, 0xe9, + 0x72, 0xc2, 0x59, 0xbf, 0x24, 0x94, 0x0f, 0x8a, 0x11, 0xa1, 0x3a, 0xdc, 0x47, 0xf7, 0x6c, + 0x26, 0xbd, 0x0d, 0x96, 0x70, 0xeb, 0x5b, 0xc0, 0xcf, 0x54, 0xe4, 0x7f, 0x99, 0x02, 0xb2, + 0x29, 0x63, 0xf8, 0x48, 0xd3, 0x35, 0xae, 0x1e, 0x85, 0x09, 0x92, 0x22, 0xb9, 0x5f, 0xc4, + 0x74, 0xef, 0xa5, 0x3e, 0x8e, 0x15, 0xf3, 0x68, 0xd8, 0x43, 0x4c, 0xd7, 0x67, 0xfc, 0x1a, + 0x81, 0x31, 0xaa, 0xe0, 0x7b, 0xcb, 0x50, 0xb6, 0x2d, 0x9d, 0x06, 0x83, 0x18, 0xa8, 0x33, + 0xd5, 0x4e, 0xfe, 0x65, 0x2f, 0xb4, 0x04, 0x9f, 0x79, 0xe2, 0x52, 0xc9, 0xc6, 0x5d, 0xed, + 0x76, 0x90, 0x0b, 0xbb, 0x20, 0x6a, 0xf1, 0x41, 0xda, 0x3c, 0xa7, 0x17, 0x8c, 0x12, 0x89, + 0x39, 0xa2, 0x44, 0xdf, 0x6f, 0xf4, 0xbe, 0x25, 0x95, 0x0e, 0xe8, 0x73, 0xc3, 0x58, 0x57, + 0xcc, 0x7c, 0xe7, 0x01, 0x9a, 0x2a, 0xb1, 0xfb, 0x60, 0xd0, 0x4b, 0xad, 0x36, 0x86, 0x1d, + 0x98, 0x03, 0xb3, 0x28, 0xce, 0x55, 0xe5, 0x7e, 0x34, 0xaf, 0x1f, 0x84, 0x62, 0xf9, 0x49, + 0xd2, 0xdd, 0x46, 0xf6, 0x6d, 0x8b, 0x10, 0xa0, 0x3b, 0x71, 0xea, 0x5a, 0xc1, 0x27, 0xbc, + 0x0c, 0x97, 0x1b, 0x80, 0x30, 0xab, 0x4d, 0xd6, 0x66, 0xfd, 0xb7, 0x2c, 0x9c, 0x07, 0xe1, + 0x7a, 0xca, 0x51, 0x5e, 0xc5, 0x75, 0xee, 0x08, 0x93, 0x23, 0xb8, 0xf2, 0x69, 0xd9, 0x42, + 0xa4, 0x3f, 0x8f, 0x14, 0x91, 0x0a, 0xba, 0x21, 0xc7, 0x5c, 0xec, 0x77, 0x3d, 0xa6, 0x16, + 0x8d, 0x6b, 0xf0, 0x40, 0xdb, 0xd4, 0x4f, 0xff, 0x64, 0x82, 0x19, 0xa9, 0x32, 0x78, 0xe3, + 0x53, 0xc8, 0x2e, 0xb5, 0x05, 0x9e, 0x00, 0x9c, 0x25, 0xb9, 0x4a, 0xd6, 0x6f, 0xf3, 0x94, + 0x08, 0xb1, 0x2d, 0xde, 0x42, 0xfb, 0x67, 0x35, 0xa9, 0x10, 0x8c, 0x7f, 0xe3, 0x5a, 0xc6, + 0xa1, 0x3d, 0x84, 0x18, 0xeb, 0x77, 0xce, 0x52, 0x6a, 0xf6, 0x4f, 0xd3, 0x20, 0xbc, 0x05, + 0x99, 0xfe, 0x62, 0xdb, 0x47, 0xb4, 0x28, 0x91, 0x0d, 0x5f, 0xc3, 0x7a, 0xe6, 0x15, 0x89, + 0x30, 0xac, 0xcb, 0x57, 0xee, 0x72, 0x81, 0x1d, 0xa4, 0x38, 0xd4, 0x48, 0xf1, 0x6d, 0x9e, + 0x02, 0xbb, 0x27, 0x40, 0xdc, 0x65, 0xf9, 0x0a, 0x96, 0x2f, 0xb3, 0xe1, 0x7d, 0xc4, 0x58, + 0xab, 0x37, 0x8e, 0x12, 0x75, 0xe9, 0x50, 0xcc, 0x3f, 0xa3, 0x1a, 0x86, 0xbe, 0x22, 0x9b, + 0x07, 0xf4, 0x68, 0xd1, 0x4d, 0x2a, 0xb6, 0x0f, 0x93, 0x60, 0xfc, 0x45, 0xd9, 0x8b, 0x17, + 0xae, 0x32, 0xc1, 0x5d, 0xe4, 0x78, 0x1f, 0x83, 0x3a, 0xa6, 0x55, 0xc9, 0x70, 0xec, 0xb5, + 0x29, 0x90, 0x0c, 0xff, 0x63, 0xda, 0x46, 0x21, 0xbd, 0x04, 0x98, 0x6b, 0xf7, 0x4e, 0xd2, + 0x80, 0x1c, 0xa5, 0x39, 0xca, 0x56, 0xef, 0x73, 0x14, 0x88, 0x31, 0xad, 0x5e, 0xc2, 0x7b, + 0xe7, 0xdf, 0x43, 0xfa, 0x66, 0x95, 0x09, 0xb0, 0x2c, 0x4b, 0xd7, 0x6e, 0xf2, 0x01, 0x9d, + 0x24, 0xb8, 0xea, 0x76, 0xcf, 0x53, 0xa0, 0x3c, 0x85, 0x19, 0x7e, 0xe2, 0x5b, 0xc7, 0x34, + 0xa8, 0x11, 0x8d, 0x61, 0xfd, 0x44, 0xd8, 0x2b, 0xb7, 0x0e, 0x92, 0xf5, 0x69, 0xd0, 0x4c, + 0xbf, 0x23, 0x9a, 0x06, 0x54, 0xc8, 0x71, 0xed, 0x1e, 0x82, 0x3b, 0xa7, 0xc0, 0x5c, 0xe5, + 0x79, 0x8a, 0x16, 0xaf, 0x33, 0x0b, 0x97, 0x2e, 0xb2, 0x41, 0xdd, 0x64, 0xf8, 0x9f, 0x03, + 0xba, 0x26, 0xd5, 0x49, 0xf0, 0x6c, 0x3e, 0xa2, 0x1b, 0x87, 0x74, 0xe8, 0x51, 0xcd, 0xaa, + 0x36, 0x8f, 0x13, 0xe0, 0x7c, 0xc5, 0x59, 0x00, 0x9d, 0x27, 0xba, 0x4e, 0xd3, 0x69, 0xf4, + 0x9c, 0x01, 0xbb, 0x26, 0xd2, 0x4f, 0xf5, 0x68, 0x25, 0xb8, 0x02, 0x9f, 0x6b, 0xf6, 0x4c, + 0xd1, 0xb9, 0x24, 0x9e, 0x03, 0xf7, 0x6a, 0xd0, 0x4d, 0x4a, 0xd7, 0x6d, 0xf0, 0x04, 0x99, + 0x23, 0xbe, 0xd6, 0x4b, 0xf1, 0x6c, 0x98, 0x05, 0xbf, 0x22, 0x6f, 0xf2, 0x48, 0xd5, 0x21, + 0xbc, 0x06, 0x9b, 0xf3, 0x6e, 0xd4, 0x49, 0xbd, 0x20, 0x9a, 0x07, 0x94, 0x09, 0xb3, 0x2e, + 0xda, 0x47, 0xfd, 0x60, 0x08, 0x95, 0x2f, 0xb2, 0x46, 0xdb, 0x61, 0xfc, 0xb1, 0x2c, 0x96, + 0x0b, 0xff, 0x62, 0xd8, 0x45, 0x2d, 0xb0, 0x0a, 0x97, 0x63, 0xfe, 0x44, 0xd9, 0xde, 0x43, + 0xf9, 0x64, 0x90, 0x0d, 0xb7, 0x2a, 0x42, 0xdf, 0x65, 0xf8, 0x0c, 0x91, 0x2b, 0xb6, 0xfb, + 0x66, 0xdc, 0x41, 0xb5, 0x28, 0x92, 0x0f, 0x67, 0xfa, 0x40, 0xdd, 0x29, 0xb4, 0x0e, 0x93, + 0x35, 0xa8, 0x12, 0x8f, 0x7b, 0xe6, 0x5c, 0xc1, 0xa9, 0x34, 0x8e, 0x13, 0xe7, 0x7a, 0xc0, + 0x5d, 0x10, 0x8d, 0x37, 0xaa, 0x5e, 0xc3, 0x79, 0xe4, 0x8c, 0x11, 0xab, 0x36, 0xc2, 0x5f, + 0xe5, 0x78, 0x7f, 0xe2, 0x58, 0xc5, 0x31, 0xac, 0x16, 0x8b, 0xe3, 0x7e, 0xc4, 0x59, 0xad, + 0x30, 0x8a, 0x17, 0x5a, 0xc7, 0x7d, 0xe0, 0x14, 0x89, 0x33, 0xae, 0xc6, 0x5b, 0xe1, 0x7c, + 0x88, 0x15, 0xaf, 0x32, 0xa1, 0x3c, 0x86, 0x1b, 0xef, 0x72, 0xc8, 0x55, 0x3d, 0xa0, 0x1a, + 0x87, 0x73, 0xee, 0x54, 0xc9, 0x84, 0x19, 0xa3, 0x3e, 0xca, 0x57, 0xed, 0x70, 0x18, 0x85, + 0x3f, 0xa2, 0x56, 0xcb, 0x71, 0xec, 0xeb, 0x76, 0xcc, 0x51, 0xa5, 0x38, 0x82, 0x1f, 0x77, + 0xea, 0x50, 0xcd, 0x39, 0xa4, 0x1e, 0x83, 0xce, 0x53, 0xe9, 0x74, 0x80, 0x1d, 0xa7, 0x3a, + 0x52, 0xcf, 0x75, 0xe8, 0x1c, 0x81, 0x3b, 0xa6, 0x00, 0x9e, 0x21, 0xbf, 0x42, 0xdc, 0x63, + 0xfd, 0x84, 0x1a, 0xa5, 0x3b, 0xc6, 0x58, 0xe7, 0x79, 0x15, 0x8b, 0x34, 0xaa, 0x57, 0xc9, + 0x76, 0xe8, 0x91, 0x0f, 0xb0, 0x2e, 0xd3, 0x4d, 0xf2, 0x6c, 0x2a, 0xb4, 0x0b, 0x95, 0x68, + 0xf6, 0x49, 0xd7, 0xae, 0x30, 0x8f, 0x11, 0xec, 0x72, 0xcd, 0x53, 0x3f, 0xa1, 0x1e, 0x80, + 0x7d, 0xe3, 0x5c, 0xc2, 0xbb, 0x25, 0x9a, 0x04, 0xf9, 0x67, 0xd8, 0x46, 0x54, 0xca, 0x75, + 0xeb, 0x16, 0x88, 0x37, 0xa9, 0xd0, 0x4e, 0xf1, 0x6f, 0x92, 0x0c, 0xb3, 0x2d, 0x41, 0xdf, + 0x60, 0xfe, 0x03, 0x9d, 0x22, 0xbc, 0xc5, 0x5b, 0xe4, 0x7a, 0x87, 0x19, 0xa6, 0x38, 0x7e, + 0xe0, 0x5f, 0xc1, 0x3c, 0xa2, 0x1d, 0x83, 0xfa, 0x64, 0xdb, 0x45, 0xb8, 0x26, 0x99, 0x07, + 0x6b, 0xf5, 0x4a, 0xd4, 0x29, 0xb7, 0x08, 0x96, 0xef, 0x71, 0xce, 0x50, 0xad, 0x33, 0x8c, + 0x12, 0xa8, 0x36, 0x89, 0x17, 0xea, 0x74, 0xcb, 0x55, 0x2c, 0xb2, 0x0d, 0x93, 0x6e, 0xf0, + 0x4f, 0xd1, 0xbd, 0x23, 0x9c, 0x02, 0xff, 0x61, 0xde, 0x40, 0x39, 0xa7, 0x18, 0x86, 0x7b, + 0xe5, 0x5a, 0xc4, 0x82, 0x1c, 0xa3, 0x3d, 0xc0, 0x5e, 0xe1, 0x7f, 0x06, 0x98, 0x27, 0xb9, + 0x44, 0xda, 0x65, 0xfb, 0x97, 0x09, 0xb6, 0x28, 0xd5, 0x4b, 0xf4, 0x6a, 0x13, 0x8d, 0x32, + 0xac, 0x51, 0xcf, 0x70, 0xee, 0xfc, 0x62, 0xdd, 0x43, 0xbe, 0x20, 0x9f, 0x01, 0x78, 0xe6, + 0x59, 0xc7, 0x3a, 0xa4, 0x1b, 0x85, 0xe9, 0x77, 0xc8, 0x56, 0xab, 0x35, 0x8a, 0x14, 0x6d, + 0xf3, 0x4c, 0xd2, 0x2f, 0xb1, 0x0e, 0x90, 0xd6, 0x48, 0xf7, 0x69, 0x94, 0x0a, 0xb5, 0x2b, + 0x52, 0xcc, 0x73, 0xed, 0x10, 0x8e, 0x31, 0xaf, 0xc3, 0x5d, 0xe2, 0x7c, 0x81, 0x1f, 0xa0, + 0x3e, 0x47, 0xd9, 0x66, 0xf8, 0x05, 0x9b, 0x24, 0xba, 0x00, 0x9f, 0x23, 0xbc, 0x46, 0xd9, + 0x65, 0xfa, 0x8c, 0x13, 0xaf, 0x30, 0xca, 0x55, 0xe9, 0x76, 0x05, 0x9a, 0x26, 0xb9, 0x43, + 0xdc, 0x60, 0xff, 0x89, 0x16, 0xaa, 0x35, 0xcf, 0x50, 0xec, 0x73, 0x0a, 0x95, 0x29, 0xb6, + 0x4c, 0xd3, 0x6f, 0xf0, 0x86, 0x19, 0xa5, 0x3a, 0xc0, 0x5f, 0xe3, 0x7c, 0x0f, 0x90, 0x2c, + 0xb3, 0x49, 0xd6, 0x6a, 0xf5, 0x83, 0x1c, 0xa0, 0x3f, 0xc5, 0x5a, 0xe6, 0x79, 0x14, 0x8b, + 0x37, 0xa8, 0x52, 0xcd, 0x71, 0xee, 0x98, 0x07, 0xbb, 0x24, 0xde, 0x41, 0xfd, 0x62, 0x11, + 0x8e, 0x32, 0xad, 0x57, 0xc8, 0x74, 0xeb, 0x9d, 0x02, 0xbe, 0x21, 0xdb, 0x44, 0xf8, 0x67, + 0x1e, 0x81, 0x3d, 0xa2, 0x58, 0xc7, 0x7b, 0xe4, 0x92, 0x0d, 0xb1, 0x2e, 0xd4, 0x4b, 0xf7, + 0x68, 0x1b, 0x84, 0x38, 0xa7, 0x5d, 0xc2, 0x7e, 0xe1, 0x97, 0x08, 0xb4, 0x2b, 0xd1, 0x4e, + 0xf2, 0x6d, 0x28, 0xb7, 0x0b, 0x94, 0x6e, 0xf1, 0x4d, 0xd2, 0xa4, 0x3b, 0x87, 0x18, 0xe2, + 0x7d, 0xc1, 0x5e, 0x2d, 0xb2, 0x0e, 0x91, 0x6b, 0xf4, 0x48, 0xd7, 0xa1, 0x3e, 0x82, 0x1d, + 0xe7, 0x78, 0xc4, 0x5b, 0x22, 0xbd, 0x01, 0x9e, 0x64, 0xfb, 0x47, 0xd8, 0xae, 0x31, 0x8d, + 0x12, 0xe8, 0x77, 0xcb, 0x54, 0x27, 0xb8, 0x04, 0x9b, 0x61, 0xfe, 0x42, 0xdd, 0xab, 0x34, + 0x88, 0x17, 0xed, 0x72, 0xce, 0x51, 0x3c, 0xa3, 0x1f, 0x80, 0x7a, 0xe5, 0x59, 0xc6, 0xb0, + 0x2f, 0x93, 0x0c, 0xf6, 0x69, 0xd5, 0x4a, 0x39, 0xa6, 0x1a, 0x85, 0x7f, 0xe0, 0x5c, 0xc3, + 0xb5, 0x2a, 0x96, 0x09, 0xf3, 0x6c, 0xd0, 0x4f, 0x36, 0xa9, 0x15, 0x8a, 0x70, 0xef, 0x53, + 0xcc, 0xba, 0x25, 0x99, 0x06, 0xfc, 0x63, 0xdf, 0x40, 0x33, 0xac, 0x10, 0x8f, 0x75, 0xea, + 0x56, 0xc9, 0xbf, 0x20, 0x9c, 0x03, 0xf9, 0x66, 0xda, 0x45, 0x00, 0xa0, 0x5d, 0xfd, 0xba, + 0x1a, 0xe7, 0x47, 0x69, 0xc9, 0x34, 0x94, 0xd3, 0x73, 0x8e, 0x2e, 0xd2, 0x72, 0x8f, 0x2f, + 0x68, 0xc8, 0x35, 0x95, 0xbb, 0x1b, 0xe6, 0x46, 0x01, 0xa1, 0x5c, 0xfc, 0xb9, 0x19, 0xe4, + 0x44, 0x03, 0xa3, 0x5e, 0xfe, 0xd0, 0x70, 0x8d, 0x2d, 0x6a, 0xca, 0x37, 0x97, 0x6b, 0xcb, + 0x36, 0x96, 0xd1, 0x71, 0x8c, 0x2c, 0x02, 0xa2, 0x5f, 0xff, 0xb8, 0x18, 0xe5, 0x45, 0x6f, + 0xcf, 0x32, 0x92, 0xd5, 0x75, 0x88, 0x28, 0x06, 0xa6, 0x5b, 0xfb, 0xbc, 0x1c, 0xe1, 0x41, + 0xbd, 0x1d, 0xe0, 0x40, 0x07, 0xa7, 0x5a, 0xfa, 0xd4, 0x74, 0x89, 0x29, 0x6e, 0xce, 0x33, + 0x93, 0xd6, 0x76, 0x8b, 0x2b, 0x6c, 0xcc, 0x31, 0x91, 0xbf, 0x1f, 0xe2, 0x42, 0x05, 0xa5, + 0x58, 0xf8, 0x04, 0xa4, 0x59, 0xf9, 0xbe, 0x1e, 0xe3, 0x43, 0x6d, 0xcd, 0x30, 0x90, 0xd7, + 0x77, 0x8a, 0x2a, 0xde, 0x7e, 0x83, 0x23, 0x64, 0xc4, 0x39, 0x99, 0xb7, 0x17, 0xea, 0x4a, + 0x0d, 0xad, 0x50, 0xf0, 0x0c, 0xac, 0x51, 0xf1, 0xb6, 0x16, 0xeb, 0x4b, 0x65, 0xc5, 0x38, + 0x98, 0xdf, 0x7f, 0x82, 0x22, 0x67, 0xc7, 0x3a, 0x9a, 0xdd, 0x7d, 0x80, 0x20, 0x0e, 0xae, + 0x53, 0xf3, 0xb4, 0x14, 0xe9, 0x49, 0xb5, 0x15, 0xe8, 0x48, 0x0f, 0xaf, 0x52, 0xf2, 0xdc, + 0x7c, 0x81, 0x21, 0x66, 0xc6, 0x3b, 0x9b, 0xb1, 0x11, 0xec, 0x4c, 0x0b, 0xab, 0x56, 0xf6, + 0xd8, 0x78, 0x85, 0x25, 0x62, 0xc2, 0x3f, 0x9f, 0x63, 0xc3, 0x3e, 0x9e, 0xd9, 0x79, 0x84, + 0x24, 0x0a, 0xaa, 0x57, 0xf7, 0xb0, 0x10, 0xed, 0x4d, 0x08, 0xa8, 0x55, 0xf5, 0xb2, 0x12, + 0xef, 0x4f, 0x61, 0xc1, 0x3c, 0x9c, 0xdb, 0x7b, 0x86, 0x26, 0xda, 0x7a, 0x87, 0x27, 0x60, + 0xc0, 0x3d, 0x9d, 0xb3, 0x13, 0xee, 0x4e, 0x09, 0xa9, 0x54, 0xf4, 0x00, 0xa1, 0x5f, 0xfe, + 0xbe, 0x1f, 0xe1, 0x40, 0x61, 0xc0, 0x3e, 0x9f, 0xdf, 0x7e, 0x80, 0x21, 0xc2, 0x63, 0x9d, + 0x3c, 0x7c, 0xdd, 0x23, 0x82, 0xa3, 0x02, 0xfc, 0x5d, 0x1d, 0xbc, 0x42, 0xe3, 0x99, 0x38, + 0xc6, 0x67, 0x27, 0x86, 0x78, 0xd9, 0xf8, 0x59, 0xa7, 0x06, 0x46, 0xe7, 0x19, 0xb8, 0x5b, + 0xfa, 0x04, 0xa5, 0xe5, 0x44, 0xba, 0x1b, 0x3a, 0x9b, 0x65, 0xc4, 0x84, 0x25, 0xdb, 0x7a, + 0x2f, 0x8e, 0x70, 0xd1, 0x91, 0x30, 0xce, 0x6f, 0x4e, 0xef, 0x11, 0xb0, 0xf0, 0x51, 0xaf, + 0x0e, 0xed, 0x4c, 0xb2, 0x13, 0x53, 0xf2, 0x0c, 0xad, 0x8c, 0x2d, 0xd3, 0x72, 0x32, 0x93, + 0x6d, 0xcc, 0xb6, 0x17, 0xe9, 0x48, 0x08, 0xa9, 0x57, 0xf6, 0xd7, 0x76, 0x88, 0x29, 0x69, + 0xc8, 0x36, 0x97, 0x74, 0xd5, 0x2b, 0x8a, 0xca, 0x6b, 0x95, 0x34, 0x15, 0xb4, 0x4a, 0xeb, + 0xab, 0x0a, 0xf4, 0x55, 0x5e, 0xff, 0x01, 0xa0, 0xe0, 0x41, 0xbf, 0x1e, 0x3f, 0x9e, 0x60, + 0xc1, 0x81, 0x20, 0xde, 0x7f, 0x9c, 0x3d, 0xc3, 0x62, 0x22, 0x83, 0x7d, 0xdc, 0xfd, 0x5c, + 0xa2, 0x03, 0x43, 0xe2, 0x1c, 0xbd, 0xc7, 0x66, 0x98, 0x39, 0x79, 0xd8, 0x26, 0x87, 0xa6, + 0x07, 0xf9, 0x58, 0x18, 0xb9, 0x47, 0xe6, 0x05, 0xa4, 0x5a, 0xfb, 0xbb, 0x1a, 0xe4, 0x45, + 0x64, 0xc5, 0x3b, 0x9a, 0xda, 0x7b, 0x85, 0x24, 0x71, 0xd0, 0x2e, 0x8f, 0xcf, 0x6e, 0x90, + 0x31, 0x10, 0xb1, 0x4f, 0xee, 0xae, 0x0f, 0xf1, 0x50, 0xb3, 0x12, 0xec, 0x4d, 0x0d, 0xac, + 0x52, 0xf3, 0xd2, 0x73, 0x8d, 0x2c, 0x6c, 0xcd, 0x33, 0x92, 0xe8, 0x49, 0xb7, 0x16, 0x56, + 0xf7, 0x09, 0xa8, 0x89, 0x28, 0xd6, 0x77, 0x37, 0x96, 0x68, 0xc9, 0x2a, 0x8b, 0x75, 0xd4, + 0x94, 0x35, 0xcb, 0x6a, 0x4b, 0xea, 0x14, 0xb5, 0xf5, 0x54, 0xaa, 0x0b, 0x00, 0xa2, 0x59, + 0xfb, 0xb2, 0x10, 0xeb, 0x49, 0x79, 0xdb, 0x20, 0x82, 0xcb, 0x69, 0x92, 0x30, 0xf2, 0x50, + 0xab, 0x09, 0x40, 0xe2, 0x19, 0xbb, 0x8b, 0x29, 0xd2, 0x70, 0x39, 0x9b, 0x60, 0xc2, 0xf9, + 0x5b, 0xa0, 0x02, 0x4b, 0xe9, 0x12, 0xb0, 0x80, 0x22, 0xd9, 0x7b, 0x32, 0x90, 0x6b, 0xc9, + 0x0b, 0xa9, 0x52, 0xf0, 0xb9, 0x1b, 0xe0, 0x42, 0x72, 0xd0, 0x2b, 0x89, 0xc0, 0x62, 0x99, + 0x3b, 0xef, 0x4d, 0xb6, 0x14, 0x5d, 0xff, 0x04, 0xa6, 0x96, 0x34, 0xcf, 0x6d, 0x24, 0x86, + 0x7d, 0xdf, 0x1d, 0xbf, 0x44, 0xe6, 0xaf, 0x0d, 0xf6, 0x54, 0x64, 0xc6, 0x3d, 0x9f, 0xd6, + 0x74, 0x8f, 0x2d, 0x16, 0xb4, 0x4f, 0xed, 0xa4, 0x06, 0xfd, 0x5f, 0x6f, 0xcd, 0x36, 0x94, + 0xdd, 0x7f, 0x84, 0x26, 0xe4, 0x46, 0xbd, 0x1f, 0x56, 0xf4, 0x0f, 0xad, 0x9d, 0x3f, 0xc4, + 0x66, 0x2f, 0x8d, 0x76, 0xd4, 0xc3, 0x61, 0x9a, 0x38, 0x71, 0xd3, 0x28, 0x8a, 0xba, 0x18, + 0xe3, 0x41, 0x08, 0xaa, 0x51, 0xf3, 0x31, 0x93, 0x68, 0xca, 0x83, 0x21, 0xda, 0x78, 0x48, + 0xea, 0x11, 0xb3, 0xfa, 0x58, 0xa3, 0x01, 0x3a, 0x98, 0x63, 0xc1, 0x88, 0x2a, 0xd1, 0x73, + 0x43, 0xe1, 0x1a, 0xb8, 0xf1, 0x53, 0xa8, 0x0a, 0xc8, 0x6a, 0x91, 0x33, 0x7a, 0xd8, 0x23, + 0x81, 0xb1, 0x13, 0xe8, 0x4a, 0x03, 0xa1, 0x5a, 0xf8, 0x2c, 0x8e, 0x75, 0xd7, 0x9e, 0x3c, + 0xc7, 0x65, 0x55, 0xf7, 0x0c, 0xae, 0xe7, 0x45, 0xbe, 0x1c, 0xde, 0x7c, 0x87, 0x25, 0x6c, + 0xce, 0x35, 0x97, 0xa7, 0x05, 0xfe, 0x5c, 0x15, 0xb7, 0x4c, 0xee, 0xd5, 0x77, 0x8c, 0x2e, + 0x67, 0xc5, 0x3e, 0x9c, 0xac, 0x0e, 0xf5, 0x57, 0x1e, 0xbc, 0x47, 0xe5, 0x27, 0x85, 0x7e, + 0xdc, 0x95, 0x37, 0xcc, 0x6e, 0x5e, 0xfc, 0x07, 0xa5, 0xec, 0x4e, 0xb5, 0x17, 0x00, 0xa3, + 0x5b, 0xf8, 0xb6, 0x15, 0xed, 0x4e, 0x71, 0xd2, 0x2a, 0x89, 0xc7, 0x64, 0x9c, 0x3f, 0xe2, + 0x41, 0xb9, 0x1a, 0x54, 0xf7, 0x0f, 0xac, 0x93, 0x30, 0xc8, 0x6b, 0x25, 0x86, 0x7e, 0xdd, + 0xd9, 0x7a, 0x82, 0x21, 0x6f, 0xcc, 0x34, 0x97, 0xa8, 0x0b, 0xf3, 0x50, 0x1e, 0xbd, 0x45, + 0xe6, 0x3b, 0x98, 0x60, 0xc3, 0x8d, 0x2e, 0xd6, 0x75, 0x4a, 0xe9, 0x11, 0xb2, 0xfc, 0x5f, + 0xa7, 0x04, 0xaf, 0x0c, 0xf4, 0x57, 0x19, 0xba, 0x42, 0xe1, 0xde, 0x7d, 0x85, 0x26, 0x68, + 0xcb, 0x33, 0x90, 0x4d, 0xee, 0x16, 0xb5, 0xfb, 0x58, 0xa0, 0x03, 0x3c, 0x9f, 0x67, 0xc4, + 0x8a, 0x29, 0xd1, 0x72, 0x76, 0xd5, 0x2d, 0x8e, 0xc0, 0x63, 0x9b, 0x38, 0x07, 0xa4, 0x5c, + 0xff, 0xb1, 0x12, 0xea, 0x49, 0x94, 0x37, 0xcf, 0x6c, 0x22, 0x81, 0x79, 0xda, 0xe5, 0x46, + 0xbe, 0x1d, 0x53, 0xf0, 0x08, 0xab, 0x43, 0xe0, 0x18, 0xbb, 0xf5, 0x56, 0xae, 0x0d, 0x32, + 0x91, 0x69, 0xca, 0x84, 0x27, 0xdf, 0x7c, 0xa1, 0x02, 0xfa, 0x59, 0x17, 0xb4, 0x4c, 0xef, + 0xd0, 0x73, 0x8b, 0x28, 0x66, 0xc5, 0x3d, 0x9e, 0x9a, 0x39, 0xc1, 0x62, 0x2c, 0x8f, 0x77, + 0xd4, 0xeb, 0x48, 0xb0, 0x13, 0x5d, 0xfe, 0x06, 0xa5, 0x78, 0xdb, 0x23, 0x80, 0xce, 0x6d, + 0x95, 0x36, 0x09, 0xaa, 0x52, 0xf1, 0xbf, 0x1c, 0xe4, 0x47, 0xec, 0x4f, 0xb7, 0x14, 0x5a, + 0xf9, 0x01, 0xa2, 0x9d, 0x3e, 0xc6, 0x65, 0x2b, 0x88, 0x70, 0xd3, 0x0e, 0xad, 0x55, 0xf6, + 0xb8, 0x1b, 0xe3, 0x40, 0x7f, 0xdc, 0x24, 0x87, 0xc9, 0x6a, 0x92, 0x31, 0x35, 0x96, 0x6e, + 0xcd, 0x83, 0x20, 0xd8, 0x7b, 0x44, 0xe7, 0x1f, 0xbc, 0xf2, 0x51, 0xa9, 0x0a, 0xd7, 0x74, + 0x8c, 0x2f, 0x61, 0xc2, 0x3a, 0x99, 0xa6, 0x05, 0xfd, 0x5e, 0x10, 0xb3, 0x4b, 0xe8, 0x00, + 0xa4, 0x55, 0xf1, 0xaa, 0x0e, 0xff, 0x5b, 0x49, 0xed, 0x1c, 0xb8, 0xe3, 0x47, 0xb6, 0x12, + 0x92, 0x36, 0xc7, 0x63, 0x38, 0x9c, 0x6d, 0xc9, 0xdb, 0x7f, 0x8e, 0x2a, 0x71, 0xd5, 0x24, + 0x80, 0x39, 0x9d, 0x6c, 0xc8, 0x93, 0x37, 0xc6, 0x62, 0x70, 0xd4, 0x25, 0x81, 0xda, 0x7e, + 0x8f, 0x2b, 0xab, 0x0f, 0xfe, 0x5a, 0x01, 0xa5, 0x54, 0xf0, 0xe2, 0x46, 0xb7, 0x13, 0x48, + 0xec, 0x1d, 0xb9, 0x72, 0xd6, 0x27, 0x83, 0xd8, 0x7c, 0x8d, 0x29, 0x3b, 0x9f, 0x6e, 0xca, + 0x91, 0x35, 0xc4, 0x60, 0xe0, 0x44, 0xb5, 0x11, 0x4a, 0xee, 0x1f, 0xbb, 0xa9, 0x0d, 0xfc, + 0x58, 0x03, 0xa7, 0x56, 0xf2, 0x4b, 0xef, 0x1e, 0xba, 0xe1, 0x45, 0xb4, 0x10, 0x02, 0xa6, + 0x57, 0xf3, 0xa8, 0x0c, 0xfd, 0x59, 0xd9, 0x7d, 0x8c, 0x28, 0x73, 0xd7, 0x26, 0x82, 0x90, + 0x34, 0xc5, 0x61, 0x3a, 0x9e, 0x6f, 0xcb, 0xe4, 0x40, 0xb1, 0x15, 0x4e, 0xea, 0x1b, 0xbf, + 0xad, 0x09, 0xf8, 0x5c, 0x07, 0xa3, 0x52, 0xf6, 0x76, 0xd2, 0x23, 0x87, 0xdc, 0x78, 0x89, + 0x2d, 0x3f, 0x9b, 0x6a, 0xce, 0x95, 0x31, 0xc0, 0x64, 0xdd, 0x79, 0x88, 0x2c, 0x77, 0xd3, + 0x22, 0x86, 0x94, 0x30, 0xc1, 0x65, 0x3e, 0x9a, 0x6b, 0xcf, 0x4f, 0xeb, 0x1a, 0xbe, 0xe5, + 0x41, 0xb0, 0x14, 0x06, 0xa2, 0x53, 0xf7, 0xac, 0x08, 0xf9, 0x5d, 0x96, 0x32, 0xc3, 0x67, + 0x3c, 0x98, 0x69, 0xcd, 0xdf, 0x7b, 0x8a, 0x2e, 0x75, 0xd1, 0x20, 0x84, 0x04, 0xa0, 0x51, + 0xf5, 0xae, 0x0a, 0xfb, 0x5f, 0x4d, 0xe9, 0x18, 0xbc, 0xe7, 0x43, 0xb2, 0x16, 0xaf, 0x0b, + 0xfa, 0x5e, 0x05, 0xa1, 0x50, 0xf4, 0xe6, 0x42, 0xb3, 0x17, 0x4c, 0xe8, 0x19, 0xbd, 0x3d, + 0x99, 0x68, 0xcc, 0x97, 0x33, 0xc2, 0x66, 0x74, 0xd0, 0x21, 0x85, 0xde, 0x7a, 0x8b, 0x2f, + 0x00, 0xa5, 0x57, 0xf2, 0xae, 0x0b, 0xf9, 0x5c, 0x41, 0xe4, 0x16, 0xb3, 0xef, 0x4a, 0xb8, + 0x1d, 0x82, 0x27, 0xd5, 0x70, 0x2c, 0x89, 0x7b, 0xde, 0xc3, 0x66, 0x94, 0x31, 0x6d, 0xc8, + 0x3a, 0x9f, 0x19, 0xbc, 0x4e, 0xeb, 0xb7, 0x12, 0xe0, 0x45, 0x58, 0xfd, 0x0f, 0xaa, 0xf6, + 0x53, 0xa1, 0x04, 0x9b, 0x3e, 0xcc, 0x69, 0x35, 0x90, 0x62, 0xc7, 0xda, 0x7f, 0x8d, 0x28, + 0x74, 0xd1, 0x23, 0x86, 0x32, 0x97, 0x65, 0xc0, 0x9c, 0x39, 0xcb, 0x6e, 0x73, 0xd6, 0x24, + 0x81, 0xdd, 0x78, 0x8a, 0x2f, 0xb0, 0x15, 0xe7, 0x42, 0x1e, 0xbb, 0x49, 0xec, 0xf1, 0x54, + 0xa6, 0x03, 0x5f, 0xfa, 0x08, 0xad, 0x2b, 0x8e, 0x7c, 0xd9, 0x85, 0x20, 0xd2, 0x77, 0x6a, + 0xcf, 0x3d, 0x98, 0xc4, 0x61, 0x93, 0x36, 0xa9, 0x0c, 0xfe, 0x5b, 0x07, 0xa2, 0x50, 0xf5, + 0xe8, 0x4d, 0xbf, 0x1a, 0x46, 0xe3, 0x11, 0xb4, 0x64, 0xc1, 0x33, 0x96, 0xca, 0x6f, 0x9d, + 0x38, 0x25, 0x80, 0x72, 0xd7, 0x8b, 0x2e, 0xdc, 0x79, 0xe6, 0x43, 0xb1, 0x14, 0x48, 0xed, + 0x1f, 0xba, 0xa7, 0x02, 0xf0, 0x55, 0x09, 0xac, 0x5e, 0xfb, 0x7d, 0xd8, 0x2a, 0x8f, 0xd3, + 0x76, 0x84, 0x21, 0x3c, 0x99, 0x6b, 0xce, 0x92, 0x37, 0xc5, 0x60, 0xff, 0x5a, 0xa8, 0x0d, + 0x51, 0xf4, 0x06, 0xa3, 0xbe, 0x1b, 0xe9, 0x4c, 0x10, 0xb5, 0x47, 0xe2, 0x56, 0xf3, 0x01, + 0xa4, 0xf8, 0x5d, 0xaf, 0x0a, 0x17, 0xb2, 0x40, 0xe5, 0xb9, 0x1c, 0xee, 0x4b, 0xd4, 0x71, + 0x83, 0x26, 0x7a, 0xdf, 0x2d, 0x88, 0x95, 0x30, 0xc2, 0x67, 0x3b, 0x9e, 0x6c, 0xc9, 0x4f, + 0xea, 0x18, 0xbd, 0xe1, 0x44, 0xb6, 0x13, 0x0e, 0xab, 0x59, 0xfc, 0xa0, 0x05, 0xf7, 0x52, + 0xcd, 0x68, 0x9a, 0x3f, 0x63, 0xc6, 0x34, 0x91, 0x8c, 0x29, 0xdb, 0x7e, 0x22, 0x87, 0x75, + 0xd0, 0x00, 0xa6, 0x51, 0xf7, 0xa2, 0x04, 0xf3, 0x55, 0x59, 0xff, 0x08, 0xae, 0xfb, 0x5d, + 0xaa, 0x0c, 0xb2, 0x14, 0xe3, 0x45, 0x10, 0xb6, 0x41, 0xe7, 0xeb, 0x4d, 0xba, 0x1c, 0x49, + 0xef, 0x18, 0xbe, 0x79, 0xdf, 0x28, 0x8e, 0xdb, 0x7d, 0x8a, 0x2c, 0x20, 0x86, 0x71, 0xd7, + 0x82, 0x24, 0xd3, 0x75, 0xcb, 0x6d, 0x9a, 0x3c, 0x69, 0xcf, 0x38, 0x9e, 0x92, 0x34, 0xc3, + 0x65, 0x30, 0x96, 0x61, 0xc7, 0xf2, 0x54, 0xa3, 0x05, 0x50, 0xf6, 0x01, 0xa7, 0xab, 0x0d, + 0xfa, 0x5c, 0x09, 0xaf, 0x58, 0xfe, 0x40, 0xe6, 0x11, 0xb7, 0xe2, 0x44, 0xb3, 0x15, 0x19, + 0xbf, 0x48, 0xee, 0xbb, 0x1d, 0xea, 0x4c, 0x8b, 0x2d, 0xda, 0x7c, 0x29, 0x8f, 0x78, 0xde, + 0xd2, 0x74, 0x83, 0x25, 0x70, 0xd6, 0x21, 0x87, 0x39, 0x9f, 0x68, 0xce, 0x9b, 0x3d, 0xca, + 0x6c, 0x60, 0xc6, 0x31, 0x97, 0xc2, 0x64, 0x93, 0x35, 0xf9, 0x5f, 0xa8, 0x0e, 0x5b, 0xfd, + 0x0a, 0xac, 0xa0, 0x06, 0xf1, 0x57, 0x02, 0xa4, 0x53, 0xf5, 0x4b, 0xed, 0x1a, 0xbc, 0xe9, + 0x4f, 0xb8, 0x1e, 0x12, 0xb4, 0x43, 0xe5, 0xb0, 0x16, 0xe1, 0x47, 0x80, 0x26, 0xd1, 0x77, + 0x22, 0x84, 0x73, 0xd5, 0xd9, 0x7f, 0x88, 0x2e, 0x7b, 0xdd, 0x2a, 0x8c, 0x32, 0x94, 0x63, + 0xc5, 0x90, 0x36, 0xc1, 0x67, 0x6b, 0xcd, 0x3a, 0x9c, 0xc9, 0x6f, 0x98, 0x3e, 0x0b, 0xad, + 0x5a, 0xfc, 0xa9, 0x0f, 0xf8, 0x5e, 0x52, 0xf4, 0x03, 0xa5, 0xf0, 0x56, 0xa1, 0x07, 0xb9, + 0x1f, 0xe8, 0x4e, 0x1b, 0xbd, 0x4a, 0xec, 0xe0, 0x46, 0xb1, 0x17, 0x42, 0xe4, 0x13, 0xb5, + 0x72, 0xd4, 0x23, 0x85, 0xd0, 0x76, 0x81, 0x27, 0x2b, 0x8d, 0x7a, 0xdc, 0x89, 0x2f, 0xd8, + 0x7e, 0xc0, 0x66, 0x91, 0x37, 0x62, 0xc4, 0x33, 0x95, 0x99, 0x3f, 0xc8, 0x6e, 0x3b, 0x9d, + 0x6a, 0xcc, 0x00, 0xa7, 0x53, 0xf4, 0xa6, 0x01, 0xf5, 0x52, 0x51, 0xf6, 0x02, 0xa5, 0xf7, + 0x50, 0xa4, 0x03, 0xa2, 0x05, 0xf1, 0x56, 0x04, 0xa3, 0x57, 0xf0, 0xf3, 0x54, 0xa0, 0x07, + 0x55, 0xf2, 0x06, 0xa1, 0x59, 0xfe, 0x0a, 0xad, 0xff, 0x58, 0xac, 0x0b, 0x08, 0xaf, 0x5b, + 0xfc, 0xae, 0x09, 0xfd, 0x5a, 0xfb, 0x5c, 0xa8, 0x0f, 0x5d, 0xfa, 0x0e, 0xa9, 0xaa, 0x0d, + 0xf9, 0x5e, 0x0c, 0xab, 0x5f, 0xf8, 0xb2, 0x15, 0xe1, 0x46, 0x14, 0xb3, 0x47, 0xe0, 0xe3, + 0x44, 0xb0, 0x17, 0x45, 0xe2, 0x16, 0xb1, 0x10, 0xb7, 0x43, 0xe4, 0xb6, 0x11, 0xe5, 0x42, + 0x41, 0xe6, 0x12, 0xb5, 0xe7, 0x40, 0xb4, 0x13, 0xeb, 0x4c, 0xb8, 0x1f, 0x4d, 0xea, 0x1e, + 0xb9, 0xba, 0x1d, 0xe9, 0x4e, 0x1c, 0xbb, 0x4f, 0xe8, 0x49, 0xee, 0x1a, 0xbd, 0xef, 0x48, + 0xbc, 0x1b, 0x18, 0xbf, 0x4b, 0xec, 0xbe, 0x19, 0xed, 0x4a, 0x79, 0xde, 0x2a, 0x8d, 0xdf, + 0x78, 0x8c, 0x2b, 0x28, 0x8f, 0x7b, 0xdc, 0x8e, 0x29, 0xdd, 0x7a, 0xdb, 0x7c, 0x88, 0x2f, + 0x7d, 0xda, 0x2e, 0x89, 0x8a, 0x2d, 0xd9, 0x7e, 0x2c, 0x8b, 0x7f, 0xd8, 0x20, 0x87, 0x73, + 0xd4, 0x86, 0x21, 0xd5, 0x72, 0x71, 0xd6, 0x22, 0x85, 0xd7, 0x70, 0x84, 0x23, 0x82, 0x25, + 0xd1, 0x76, 0x24, 0x83, 0x77, 0xd0, 0xd3, 0x74, 0x80, 0x27, 0x75, 0xd2, 0x26, 0x81, 0xcb, + 0x6c, 0x98, 0x3f, 0x6d, 0xca, 0x3e, 0x99, 0x9a, 0x3d, 0xc9, 0x6e, 0x3c, 0x9b, 0x6f, 0xc8, + 0x69, 0xce, 0x3a, 0x9d, 0xcf, 0x68, 0x9c, 0x3b, 0x38, 0x9f, 0x6b, 0xcc, 0x9e, 0x39, 0xcd, + 0x6a, 0x92, 0x35, 0xc1, 0x66, 0x34, 0x93, 0x67, 0xc0, 0xc3, 0x64, 0x90, 0x37, 0x65, 0xc2, + 0x36, 0x91, 0x30, 0x97, 0x63, 0xc4, 0x96, 0x31, 0xc5, 0x62, 0x61, 0xc6, 0x32, 0x95, 0xc7, + 0x60, 0x94, 0x33, 0x00, 0xa8, 0x4d, 0xe5, 0x9a, 0x32, 0xd7, 0x7f, 0x29, 0x81, 0x64, 0xcc, + 0xb3, 0x1b, 0xfe, 0x56, 0x52, 0xfa, 0x1f, 0xb7, 0xc8, 0x60, 0x85, 0x2d, 0x7b, 0xd3, 0x36, + 0x9e, 0xe1, 0x49, 0xac, 0x04, 0xa4, 0x0c, 0xe9, 0x41, 0x3e, 0x96, 0x73, 0xdb, 0x8d, 0x25, + 0xc0, 0x68, 0x17, 0xbf, 0x5a, 0xf2, 0xf6, 0x5e, 0xbb, 0x13, 0x6c, 0xc4, 0x21, 0x89, 0xdf, + 0x77, 0x92, 0x3a, 0x45, 0xed, 0x08, 0xa0, 0x55, 0xfd, 0x18, 0xb0, 0xcf, 0x67, 0x82, 0x2a, + 0x7c, 0xd4, 0x31, 0x99, 0xe6, 0x4e, 0xab, 0x03, 0x07, 0xaf, 0x4a, 0xe2, 0x9d, 0x35, 0xd0, + 0x78, 0x2e, 0x86, 0x63, 0xcb, 0xb4, 0x1c, 0xf9, 0x51, 0xf1, 0x59, 0xbc, 0x14, 0x6b, 0xc3, + 0x26, 0x8e, 0xd8, 0x70, 0x95, 0x3d, 0x42, 0xea, 0x0f, 0xa7, 0xa3, 0x0b, 0xee, 0x46, 0x39, + 0x91, 0x74, 0xdc, 0x8a, 0x22, 0xc7, 0x6f, 0x10, 0xb8, 0x5d, 0xf5, 0xaa, 0x02, 0xe7, 0x4f, + 0x30, 0x98, 0x7d, 0xd5, 0x83, 0x2b, 0xce, 0x66, 0x19, 0xb1, 0x54, 0xfc, 0xf8, 0x50, 0xb5, + 0x1d, 0x62, 0xca, 0x2f, 0x87, 0xd1, 0x79, 0x9c, 0x34, 0x4b, 0xe3, 0x06, 0xae, 0x0e, 0xa6, + 0x43, 0xeb, 0x94, 0x3c, 0xd9, 0x71, 0x27, 0x8f, 0x6a, 0xc2, 0xbd, 0x15, 0xf0, 0x58, 0x5c, + 0xf4, 0x11, 0xb9, 0xc6, 0x6e, 0x8b, 0x23, 0x75, 0xdd, 0x38, 0x90, 0xef, 0x47, 0xa2, 0x0a, + 0xff, 0x57, 0xb2, 0x1a, 0x65, 0xcd, 0x28, 0x80, 0xd6, 0x7e, 0x9b, 0x33, 0x4c, 0xe4, 0x01, + 0xa9, 0xad, 0x05, 0xe0, 0x48, 0x37, 0x9f, 0x7a, 0xd2, 0x84, 0x2c, 0xc9, 0x61, 0x1e, 0xb6, + 0x53, 0xfb, 0x5b, 0xf3, 0x16, 0xbe, 0xc1, 0x69, 0x8c, 0x24, 0x72, 0xda, 0x3f, 0x97, 0xe8, + 0x40, 0xa5, 0x0d, 0x09, 0xa1, 0x44, 0xec, 0x93, 0x3b, 0xde, 0x76, 0x20, 0x88, 0x6d, 0xc5, + 0xba, 0x12, 0xf7, 0x5f, 0x00, 0xa9, 0x4f, 0xe6, 0x9e, 0x37, 0xd1, 0x78, 0x21, 0x88, 0x6e, + 0xc7, 0xbf, 0x16, 0xf0, 0x59, 0x42, 0xeb, 0x0d, 0xa4, 0xdc, 0x75, 0x93, 0x3a, 0x63, 0xca, + 0x2c, 0x85, 0xfd, 0x54, 0xb2, 0x1b, 0x84, 0x2d, 0xcb, 0x62, 0x1a, 0xb3, 0x55, 0xfc, 0xa5, + 0x0c, 0xea, 0x43, 0x3b, 0x92, 0x74, 0xdd, 0xc6, 0x6f, 0x89, 0x20, 0x58, 0xf1, 0x17, 0xbe, + 0xe7, 0x4e, 0xa8, 0x01, 0x79, 0xd0, 0x36, 0x9f, 0x15, 0xbc, 0x5a, 0xf3, 0x8b, 0x22, 0xc4, + 0x6d, 0x34, 0x9d, 0x7b, 0xd2, 0xaa, 0x03, 0xe5, 0x4c, 0x57, 0xfe, 0x18, 0xb1, 0xc9, 0x60, + 0x86, 0x2f, 0x76, 0xdf, 0x39, 0x90, 0xe8, 0x41, 0xa7, 0x0e, 0x91, 0x38, 0xde, 0x77, 0x0f, + 0xa6, 0x40, 0xe9, 0xb0, 0x19, 0xff, 0x56, 0x2e, 0x87, 0x61, 0xc8, 0xd3, 0x7a, 0x9c, 0x35, + 0x4d, 0xe4, 0x02, 0xab, 0xf2, 0x5b, 0xbd, 0x14, 0x6c, 0xc5, 0x23, 0x8a, 0x2a, 0x83, 0x65, + 0xcc, 0xb4, 0x1d, 0xfb, 0x52, 0x0b, 0xa2, 0x44, 0xed, 0x95, 0x3c, 0xda, 0x73, 0x68, 0xc1, + 0x27, 0x8e, 0xf6, 0x5f, 0xb9, 0x10, 0x49, 0xe0, 0x06, 0xaf, 0xd7, 0x7e, 0x98, 0x31, 0xae, + 0x07, 0xe1, 0x48, 0x30, 0x99, 0x7f, 0xd6, 0x8f, 0x26, 0xc0, 0x69, 0x11, 0xb8, 0x5e, 0xf7, + 0xec, 0x45, 0xa3, 0x0a, 0x72, 0xdb, 0x3d, 0x94, 0xcd, 0x64, 0x82, 0x2b, 0x53, 0xfa, 0x1c, + 0xb5, 0x3f, 0x96, 0x70, 0xd9, 0xa1, 0x08, 0xee, 0x47, 0x1e, 0xb7, 0x51, 0xf8, 0x80, 0x29, + 0xcf, 0x66, 0x7d, 0xd4, 0x32, 0x9b, 0xe3, 0x4a, 0xac, 0x05, 0x5c, 0xf5, 0x13, 0xba, 0xc2, + 0x6b, 0x8d, 0x24, 0xbb, 0x12, 0xf4, 0x5d, 0x25, 0x8c, 0x6a, 0xc3, 0x9a, 0x33, 0xd5, 0x7c, + 0x04, 0xad, 0x4b, 0xe2, 0xf9, 0x50, 0xb6, 0x1f, 0x67, 0xce, 0x28, 0x81, 0xd8, 0x71, 0x97, + 0x3e, 0x46, 0xef, 0x09, 0xa0, 0x00, 0xaa, 0x49, 0xe3, 0x92, 0x38, 0xdb, 0x71, 0x39, 0x93, + 0x70, 0xda, 0xab, 0x01, 0xe2, 0x48, 0x72, 0xd8, 0x3b, 0x91, 0xe0, 0x4a, 0xa9, 0x03, 0x4b, + 0xe1, 0x02, 0xa8, 0xd9, 0x73, 0x90, 0x3a, 0xe4, 0x4e, 0xad, 0x07, 0x76, 0xdc, 0x3f, 0x95, + 0xdd, 0x77, 0x94, 0x3e, 0x4f, 0xe5, 0x06, 0xac, 0x96, 0x3c, 0xdf, 0x75, 0x04, 0xae, 0x4d, + 0xe7, 0xaf, 0x05, 0xe6, 0x4c, 0x3d, 0x97, 0x74, 0xde, 0xd5, 0x7f, 0x9c, 0x36, 0x47, 0xed, + 0x0e, 0xa4, 0xec, 0x46, 0xa5, 0x0f, 0x7e, 0xd4, 0x37, 0x9d, 0xa7, 0x0d, 0xee, 0x44, 0x35, + 0x9f, 0x7c, 0xd6, 0x9e, 0x34, 0xd7, 0x7d, 0x0c, 0xa6, 0x45, 0xef, 0x31, 0x9b, 0x78, 0xd2, + 0xa3, 0x09, 0xea, 0x40, 0x08, 0xa2, 0x41, 0xeb, 0x9a, 0x30, 0xd3, 0x79, 0x43, 0xe9, 0x0a, + 0xa0, 0xd1, 0x7b, 0x98, 0x32, 0x7a, 0xd0, 0x33, 0x99, 0xe8, 0x42, 0xa1, 0x0b, 0xb7, 0x1d, + 0xfe, 0x54, 0x25, 0x8f, 0x6c, 0xc6, 0x8e, 0x24, 0xc7, 0x6d, 0x1c, 0xb6, 0x55, 0xff, 0xc5, + 0x6f, 0x8c, 0x26, 0x57, 0xfd, 0x1e, 0xb4, 0xfc, 0x56, 0xb5, 0x1f, 0x6e, 0xc4, 0x27, 0x8d, + 0x53, 0xf9, 0x1a, 0xb0, 0xc1, 0x6b, 0x88, 0x22, 0x6a, 0xc0, 0x23, 0x89, 0xf8, 0x52, 0xb1, + 0x1b, 0x21, 0x8b, 0x68, 0xc2, 0xb3, 0x19, 0xfa, 0x50, 0x18, 0xb2, 0x51, 0xfb, 0x8a, 0x20, + 0xc3, 0x69, 0x62, 0xc8, 0x2b, 0x81, 0xf0, 0x5a, 0xb9, 0x13, 0x5b, 0xf1, 0x12, 0xb8, 0xc9, + 0x63, 0x80, 0x2a, 0x10, 0xba, 0x59, 0xf3, 0x82, 0x28, 0xcb, 0x61, 0x29, 0x83, 0x60, 0xca, + 0xbb, 0x11, 0xf2, 0x58, 0x86, 0x2c, 0xcf, 0x65, 0x14, 0xbe, 0x5d, 0xf7, 0xbf, 0x15, 0xf6, + 0x5c, 0x2d, 0x87, 0x64, 0xce, 0xf4, 0x5e, 0xbd, 0x17, 0x66, 0xcc, 0x2f, 0x85, 0xcd, 0x67, + 0x84, 0x2e, 0x5f, 0xf5, 0x16, 0xbc, 0x00, 0xab, 0x4b, 0xe0, 0x96, 0x3d, 0xdd, 0x76, 0x31, + 0x9a, 0x7a, 0xd1, 0xa7, 0x0c, 0xec, 0x47, 0x62, 0xc9, 0x29, 0x82, 0xf4, 0x5f, 0xbf, 0x14, + 0x53, 0xf8, 0x18, 0xb3, 0xc5, 0x6e, 0x8e, 0x25, 0xc4, 0x6f, 0x8f, 0x24, 0x52, 0xf9, 0x19, + 0xb2, 0xf5, 0x5e, 0xbe, 0x15, 0x63, 0xc8, 0x28, 0x83, 0xa6, 0x0d, 0xed, 0x46, 0x30, 0x9b, + 0x7b, 0xd0, 0x97, 0x3c, 0xdc, 0x77, 0x01, 0xaa, 0x4a, 0xe1, 0x95, 0x3e, 0xde, 0x75, 0x03, + 0xa8, 0x48, 0xe3, 0xa4, 0x0f, 0xef, 0x44, 0x32, 0x99, 0x79, 0xd2, 0xf7, 0x5c, 0xbc, 0x17, + 0x61, 0xca, 0x2a, 0x81, 0xc6, 0x6d, 0x8d, 0x26, 0x50, 0xfb, 0x1b, 0xb0, 0x51, 0xfa, 0x1a, + 0xb1, 0xc7, 0x6c, 0x8c, 0x27, 0x60, 0xcb, 0x2b, 0x80, 0xf6, 0x5d, 0xbd, 0x16, 0x33, 0x98, + 0x78, 0xd3, 0xa5, 0x0e, 0xee, 0x45, 0x02, 0xa9, 0x49, 0xe2, 0x94, 0x3f, 0xdf, 0x74, 0x37, + 0x9c, 0x7c, 0xd7, 0xa1, 0x0a, 0xea, 0x41, 0x06, 0xad, 0x4d, 0xe6, 0x90, 0x3b, 0xdb, 0x70, + 0x55, 0xfe, 0x1e, 0xb5, 0xc3, 0x68, 0x88, 0x23, 0x64, 0xcf, 0x2f, 0x84, 0xf2, 0x59, 0xb9, + 0x12, 0xf3, 0x58, 0xb8, 0x13, 0x65, 0xce, 0x2e, 0x85, 0xc2, 0x69, 0x89, 0x22, 0x54, 0xff, + 0x1f, 0xb4, 0x91, 0x3a, 0xda, 0x71, 0x07, 0xac, 0x4c, 0xe7, 0xa0, 0x0b, 0xeb, 0x40, 0x36, + 0x9d, 0x7d, 0xd6, 0xa2, 0x09, 0xe9, 0x42, 0x34, 0x9f, 0x7f, 0xd4, 0x93, 0x38, 0xd8, 0x73, + 0x05, 0xae, 0x4e, 0xe5, 0xc0, 0x6b, 0x8b, 0x20, 0x56, 0xfd, 0x1d, 0xb6, 0xf1, 0x5a, 0xba, + 0x11, 0x67, 0xcc, 0x2c, 0x87, 0x66, 0xcd, 0x2d, 0x86, 0xf0, 0x5b, 0xbb, 0x10, 0x57, 0xfc, + 0x1c, 0xb7, 0xc1, 0x6a, 0x8a, 0x21, 0x04, 0xaf, 0x4f, 0xe4, 0x92, 0x39, 0xd9, 0x72, 0x35, + 0x9e, 0x7e, 0xd5, 0xa3, 0x08, 0xe8, 0x43, 0x00, 0xac, 0x45, 0xe9, 0x8a, 0x26, 0xcf, 0x63, + 0x09, 0xa5, 0x4c, 0xe0, 0x83, 0x2f, 0xc6, 0x6a, 0x12, 0xbe, 0x57, 0xfb, 0x98, 0x34, 0xdd, + 0x71, 0x1b, 0xb7, 0x5e, 0xf2, 0x91, 0x3d, 0xd4, 0x78, 0x24, 0x88, 0x61, 0xcd, 0xae, 0x02, + 0xeb, 0x47, 0x2d, 0x81, 0x68, 0xc4, 0xa7, 0x0b, 0xe2, 0x4e, 0x36, 0x9a, 0x73, 0xdf, 0xbc, + 0x10, 0xf9, 0x55, 0x3f, 0x93, 0x7a, 0xd6, 0xb5, 0x19, 0xf0, 0x5c, 0x48, 0xe4, 0x0d, 0xa1, + 0xc2, 0x6e, 0x87, 0x2b, 0x41, 0xed, 0x04, 0xa8, 0xcb, 0x67, 0x8e, 0x22, 0x5a, 0xf6, 0x1f, + 0xb3, 0xd0, 0x7c, 0x95, 0x39, 0x53, 0xff, 0x16, 0xba, 0xd9, 0x75, 0x9c, 0x30, 0x6c, 0xc0, + 0x29, 0x85, 0xe6, 0x4a, 0xa3, 0x0f, 0x65, 0xc9, 0x20, 0x8c, 0xef, 0x43, 0xaa, 0x06, 0x7e, + 0xd2, 0x3b, 0x97, 0xf4, 0x58, 0xb1, 0x1d, 0x77, 0xdb, 0x32, 0x9e, 0xfd, 0x51, 0xb8, 0x14, + 0x90, 0x3c, 0xd5, 0x79, 0x1a, 0xb6, 0x5f, 0xf3, 0x99, 0x35, 0xdc, 0x70, 0x13, 0xbf, 0x56, + 0xfa, 0x82, 0x2e, 0xc7, 0x6b, 0x08, 0xa4, 0x4d, 0xe1, 0x8b, 0x27, 0xce, 0x62, 0x01, 0xad, + 0x44, 0xe8, 0xb4, 0x18, 0xf1, 0x5d, 0x3e, 0x92, 0x7b, 0xd7, 0xbd, 0x11, 0xf8, 0x54, 0x37, + 0x9b, 0x72, 0xde, 0xa6, 0x0a, 0xe3, 0x4f, 0x2c, 0x80, 0x69, 0xc5, 0xaf, 0x03, 0xea, 0x46, + 0x25, 0x89, 0x60, 0xcc, 0xd8, 0x74, 0x9d, 0x31, 0x52, 0xfe, 0x17, 0xbb, 0xd1, 0x7d, 0x94, + 0x38, 0x5b, 0xf7, 0x1e, 0xb2, 0xca, 0x66, 0x8f, 0x23, 0x40, 0xec, 0x05, 0xa9, 0xc3, 0x6f, + 0x86, 0x2a, 0x49, 0xe5, 0x0c, 0xa0, 0xfc, 0x50, 0xb9, 0x15, 0x76, 0xda, 0x33, 0x9f, 0xf5, + 0x59, 0xb0, 0x1c, 0x7f, 0xd3, 0x3a, 0x96, 0xee, 0x42, 0xab, 0x07, 0x64, 0xc8, 0x21, 0x8d, + 0xe7, 0x4b, 0xa2, 0x0e, 0x6d, 0xc1, 0x28, 0x84, 0x00, 0xad, 0x47, 0xea, 0x8e, 0x23, 0xc9, + 0x64, 0x01, 0xac, 0x46, 0xeb, 0x8f, 0x22, 0xc8, 0x65, 0x02, 0xaf, 0x45, 0xe8, 0x8c, 0x21, + 0xcb, 0x66, 0x03, 0xae, 0x44, 0xe9, 0x8d, 0x20, 0xca, 0x67, 0x04, 0xa9, 0x43, 0xee, 0x8a, + 0x27, 0xcd, 0x60, 0x05, 0xa8, 0x42, 0xef, 0x8b, 0x26, 0xcc, 0x61, 0x06, 0xab, 0x41, 0xec, + 0x88, 0x25, 0xcf, 0x62, 0x07, 0xaa, 0x40, 0xed, 0x89, 0x24, 0xce, 0x63, 0x08, 0xa5, 0x4f, + 0xe2, 0x86, 0x2b, 0xc1, 0x6c, 0x09, 0xa4, 0x4e, 0xe3, 0x87, 0x2a, 0xc0, 0x6d, 0x0a, 0xa7, + 0x4d, 0xe0, 0x84, 0x29, 0xc3, 0x6e, 0x0b, 0xa6, 0x4c, 0xe1, 0x85, 0x28, 0xc2, 0x6f, 0x0c, + 0xa1, 0x4b, 0xe6, 0x82, 0x2f, 0xc5, 0x68, 0x0d, 0xa0, 0x4a, 0xe7, 0x83, 0x2e, 0xc4, 0x69, + 0x0e, 0xa3, 0x49, 0xe4, 0x80, 0x2d, 0xc7, 0x6a, 0x0f, 0xa2, 0x48, 0xe5, 0x81, 0x2c, 0xc6, + 0x6b, 0x10, 0xbd, 0x57, 0xfa, 0x9e, 0x33, 0xd9, 0x74, 0x11, 0xbc, 0x56, 0xfb, 0x9f, 0x32, + 0xd8, 0x75, 0x12, 0xbf, 0x55, 0xf8, 0x9c, 0x31, 0xdb, 0x76, 0x13, 0xbe, 0x54, 0xf9, 0x9d, + 0x30, 0xda, 0x77, 0x14, 0xb9, 0x53, 0xfe, 0x9a, 0x37, 0xdd, 0x70, 0x15, 0xb8, 0x52, 0xff, + 0x9b, 0x36, 0xdc, 0x71, 0x16, 0xbb, 0x51, 0xfc, 0x98, 0x35, 0xdf, 0x72, 0x17, 0xba, 0x50, + 0xfd, 0x99, 0x34, 0xde, 0x73, 0x18, 0xb5, 0x5f, 0xf2, 0x96, 0x3b, 0xd1, 0x7c, 0x19, 0xb4, + 0x5e, 0xf3, 0x97, 0x3a, 0xd0, 0x7d, 0x1a, 0xb7, 0x5d, 0xf0, 0x94, 0x39, 0xd3, 0x7e, 0x1b, + 0xb6, 0x5c, 0xf1, 0x95, 0x38, 0xd2, 0x7f, 0x1c, 0xb1, 0x5b, 0xf6, 0x92, 0x3f, 0xd5, 0x78, + 0x1d, 0xb0, 0x5a, 0xf7, 0x93, 0x3e, 0xd4, 0x79, 0x1e, 0xb3, 0x59, 0xf4, 0x90, 0x3d, 0xd7, + 0x7a, 0x1f, 0xb2, 0x58, 0xf5, 0x91, 0x3c, 0xd6, 0x7b, 0x00, 0xae, 0x41, 0xef, 0x82, 0x2c, + 0xc3, 0x6d, 0x19, 0xb7, 0x58, 0xf6, 0x9b, 0x35, 0xda, 0x74, 0x32, 0x9c, 0x73, 0xdd, 0xb0, + 0x1e, 0xf1, 0x5f, 0x2b, 0x85, 0x6a, 0xc4, 0xa9, 0x07, 0xe8, 0x46, 0x64, 0xca, 0x25, 0x8b, + 0xe6, 0x48, 0xa7, 0x09, 0x7d, 0xd3, 0x3c, 0x92, 0xff, 0x51, 0xbe, 0x10, 0x56, 0xf8, 0x17, + 0xb9, 0xd4, 0x7a, 0x95, 0x3b, 0x4f, 0xe1, 0x0e, 0xa0, 0xcd, 0x63, 0x8c, 0x22, 0xc8, 0x66, + 0x89, 0x27, 0x4a, 0xe4, 0x0b, 0xa5, 0xd1, 0x7f, 0x90, 0x3e, 0x53, 0xfd, 0x12, 0xbc, 0xfa, + 0x54, 0xbb, 0x15, 0x78, 0xd6, 0x39, 0x97, 0xe3, 0x4d, 0xa2, 0x0c, 0x61, 0xcf, 0x20, 0x8e, + 0xac, 0x02, 0xed, 0x43, 0x2e, 0x80, 0x6f, 0xc1, 0xb5, 0x1b, 0xf4, 0x5a, 0x37, 0x99, 0x76, + 0xd8, 0x9e, 0x30, 0xdf, 0x71, 0x1c, 0xb2, 0x5d, 0xf3, 0x87, 0x29, 0xc6, 0x68, 0x05, 0xab, + 0x44, 0xea, 0x8d, 0x23, 0xcc, 0x62, 0x0f, 0xa1, 0x4e, 0xe0, 0x94, 0x3a, 0xd5, 0x7b, 0x16, + 0xb8, 0x57, 0xf9, 0xbf, 0x11, 0xfe, 0x50, 0x3d, 0x93, 0x7c, 0xd2, 0xa6, 0x08, 0xe7, 0x49, + 0x24, 0x8a, 0x65, 0xcb, 0xe9, 0x47, 0xa8, 0x06, 0x6b, 0xc5, 0x2a, 0x84, 0xf0, 0x5e, 0xb1, + 0x1f, 0x72, 0xdc, 0x33, 0x9d, 0xdb, 0x75, 0x9a, 0x34, 0x59, 0xf7, 0x18, 0xb6, 0xc2, 0x6c, + 0x83, 0x2d, 0x40, 0xee, 0x01, 0xaf, 0x45, 0xeb, 0x04, 0xaa, 0xc7, 0x69, 0x86, 0x28, 0x5c, + 0xf2, 0x1d, 0xb3, 0xde, 0x70, 0x9f, 0x31, 0x77, 0xd9, 0x36, 0x98, 0xf5, 0x5b, 0xb4, 0x1a, + 0x6e, 0xc0, 0x2f, 0x81, 0xec, 0x42, 0xad, 0x03, 0x21, 0x8f, 0x60, 0xce, 0xa3, 0x0d, 0xe2, + 0x4c, 0x38, 0x96, 0x79, 0xd7, 0xba, 0x14, 0xfb, 0x55, 0x13, 0xbd, 0x52, 0xfc, 0x91, 0x3f, + 0xd0, 0x7e, 0x0a, 0xa4, 0x4b, 0xe5, 0x88, 0x26, 0xc9, 0x67, 0x00, 0xaf, 0x43, 0xec, 0x86, + 0x29, 0xc5, 0x6a, 0x11, 0xbe, 0x52, 0xfd, 0x97, 0x38, 0xd4, 0x7b, 0x22, 0x8d, 0x61, 0xce, + 0xa4, 0x0b, 0xe7, 0x48, 0x33, 0x9c, 0x70, 0xdf, 0xb5, 0x1a, 0xf6, 0x59, 0x44, 0xeb, 0x07, + 0xa8, 0xc2, 0x6d, 0x81, 0x2e, 0x55, 0xfa, 0x16, 0xb9, 0xd3, 0x7c, 0x90, 0x3f, 0x66, 0xc9, + 0x25, 0x8a, 0xe0, 0x4f, 0xa3, 0x0c, 0x77, 0xd8, 0x34, 0x9b, 0xf1, 0x5e, 0xb2, 0x1d, 0x88, + 0x27, 0xcb, 0x64, 0x0e, 0xa1, 0x4d, 0xe2, 0x99, 0x36, 0xda, 0x75, 0x1f, 0xb0, 0x5c, 0xf3, + 0xaa, 0x05, 0xe9, 0x46, 0x2c, 0x83, 0x6f, 0xc0, 0xbb, 0x14, 0xf8, 0x57, 0x3d, 0x92, 0x7e, + 0xd1, 0xcc, 0x63, 0x8f, 0x20, 0x4a, 0xe5, 0x09, 0xa6, 0xdd, 0x72, 0x9e, 0x31, 0x5b, 0xf4, + 0x18, 0xb7, 0xee, 0x41, 0xad, 0x02, 0x68, 0xc7, 0x2b, 0x84, 0xff, 0x50, 0xbc, 0x13, 0x79, + 0xd6, 0x3a, 0x95, 0x0d, 0xa2, 0x4e, 0xe1, 0x8b, 0x24, 0xc8, 0x67, 0x1c, 0xb3, 0x5f, 0xf0, + 0x9a, 0x35, 0xd9, 0x76, 0x2f, 0x80, 0x6c, 0xc3, 0xa9, 0x06, 0xea, 0x45, 0x3e, 0x91, 0x7d, + 0xd2, 0xb8, 0x17, 0xfb, 0x54, 0x49, 0xe6, 0x0a, 0xa5, 0xcf, 0x60, 0x8c, 0x23, 0x58, 0xf7, + 0x1b, 0xb4, 0xde, 0x71, 0x9d, 0x32, 0x6b, 0xc4, 0x28, 0x87, 0xed, 0x42, 0xae, 0x01, 0x7a, + 0xd5, 0x39, 0x96, 0xfc, 0x53, 0xbf, 0x10, 0x85, 0x2a, 0xc6, 0x69, 0x03, 0xac, 0x40, 0xef, + 0x94, 0x3b, 0xd7, 0x78, 0x12, 0xbd, 0x51, 0xfe, 0xa7, 0x08, 0xe4, 0x4b, 0x21, 0x8e, 0x62, + 0xcd, 0xb6, 0x19, 0xf5, 0x5a, 0x30, 0x9f, 0x73, 0xdc, 0xc1, 0x6e, 0x82, 0x2d, 0x47, 0xe8, + 0x04, 0xab, 0xd0, 0x7f, 0x93, 0x3c, 0x56, 0xf9, 0x15, 0xba, 0xe3, 0x4c, 0xa0, 0x0f, 0x65, + 0xca, 0x26, 0x89, 0xf2, 0x5d, 0xb1, 0x1e, 0x74, 0xdb, 0x37, 0x98, 0x00, 0xb0, 0x7d, 0xcd, + 0xfa, 0x4a, 0x87, 0x37, 0xe9, 0x59, 0x94, 0x24, 0x13, 0xa3, 0x6e, 0xde, 0xcf, 0x7f, 0xb2, + 0x02, 0x35, 0x85, 0x48, 0xf8, 0x26, 0x96, 0x5b, 0xeb, 0xdc, 0x6c, 0xa1, 0x11, 0x83, 0x33, + 0xfe, 0x4e, 0x79, 0xc9, 0x04, 0xb4, 0x6a, 0xda, 0x17, 0xa7, 0x90, 0x20, 0xed, 0x5d, 0x4c, + 0xfc, 0x31, 0x81, 0xb6, 0x06, 0xcb, 0x7b, 0xa5, 0x15, 0xd8, 0x68, 0x5f, 0xef, 0x22, 0x92, + 0x1b, 0xab, 0x66, 0xd6, 0xe1, 0x51, 0x9c, 0x2c, 0xf2, 0x42, 0x8f, 0x3f, 0x08, 0xb8, 0x75, + 0xc5, 0xd4, 0x64, 0xa9, 0x19, 0x2e, 0x9e, 0x53, 0xe3, 0x3d, 0x8d, 0x40, 0xf0, 0xc7, 0x77, + 0xba, 0x0a, 0x98, 0x28, 0xe5, 0x55, 0x62, 0xd2, 0x1f, 0xaf, 0x71, 0xc1, 0x0c, 0xbc, 0x8b, + 0x3b, 0xf6, 0x46, 0x57, 0xe7, 0x2a, 0x9a, 0xad, 0x1d, 0xd0, 0x60, 0xbe, 0x0e, 0xc3, 0x73, + 0x44, 0xf4, 0x39, 0x89, 0x36, 0x86, 0x4b, 0xfb, 0xcc, 0x7c, 0xb1, 0x01, 0xdf, 0x6f, 0xa2, + 0x12, 0x25, 0x95, 0x58, 0xe8, 0xf9, 0x49, 0x84, 0x34, 0x03, 0xb3, 0x7e, 0xce, 0x10, 0xa0, + 0x6d, 0xdd, 0xea, 0x5a, 0x97, 0x27, 0xb5, 0x05, 0xc8, 0x78, 0x4f, 0xff, 0x32, 0x82, 0x5c, + 0xec, 0x21, 0x91, 0xa6, 0x16, 0xdb, 0x6b, 0x7a, 0xca, 0x07, 0xb7, 0x80, 0x30, 0xfd, 0x4d, + 0x93, 0x23, 0xee, 0x5e, 0x69, 0xd9, 0x14, 0xa4, 0x2d, 0x9d, 0x50, 0xe0, 0xd7, 0x67, 0xaa, + 0x1a, 0xc4, 0x74, 0xb9, 0x09, 0x3e, 0x8e, 0x43, 0xf3, 0xe2, 0x52, 0x9f, 0x2f, 0x18, 0xa8, + 0x65, 0xd5, 0x0b, 0xbb, 0x76, 0xc6, 0xf1, 0x41, 0x8c, 0x3c, 0xae, 0x1e, 0xd3, 0x63, 0x54, + 0xe4, 0x29, 0x99, 0x47, 0xf7, 0x3a, 0x8a, 0xbd, 0x0d, 0xc0, 0x70, 0x61, 0xd1, 0x1c, 0xac, + 0x9b, 0x2b, 0xe6, 0x56, 0x88, 0x38, 0xf5, 0x45, 0x72, 0xc2, 0x0f, 0xbf, 0x00, 0xb1, 0x7f, + 0xce, 0xfe, 0x4f, 0x81, 0x30, 0xe1, 0x50, 0x9e, 0x2f, 0x1f, 0xae, 0x60, 0xd1, 0xdf, 0x6e, + 0xa0, 0x11, 0x21, 0x90, 0x5e, 0xef, 0x3e, 0x8f, 0x41, 0xf0, 0xc0, 0x71, 0xbf, 0x0e, 0xa3, + 0x12, 0xdc, 0x6d, 0x5d, 0xec, 0x22, 0x93, 0x42, 0xf3, 0x3d, 0x8c, 0xbc, 0x0d, 0xc3, 0x72, + 0x7c, 0xcd, 0x03, 0xb2, 0x82, 0x33, 0xfd, 0x4c, 0x9d, 0x2c, 0xe2, 0x53, 0x63, 0xd2, 0x1c, + 0xad, 0x5b, 0xea, 0x24, 0x95, 0xa5, 0x14, 0xda, 0x6b, 0xba, 0x0b, 0xc5, 0x74, 0x44, 0xf5, + 0x3b, 0x8a, 0x84, 0x35, 0xfb, 0x4a, 0x7a, 0xcb, 0x05, 0xb4, 0x65, 0xd4, 0x1a, 0xab, 0x9b, + 0x2a, 0xe4, 0x55, 0xf8, 0x49, 0x87, 0x36, 0x06, 0xb7, 0x79, 0xc8, 0x19, 0xa8, 0x66, 0xd7, + 0xe7, 0x56, 0x98, 0x29, 0x27, 0x96, 0x58, 0xe9, 0xd9, 0x68, 0xa6, 0x17, 0xc6, 0x77, 0xb9, + 0x08, 0x38, 0x89, 0x47, 0xf6, 0xb6, 0x07, 0xc9, 0x78, 0x48, 0xf9, 0x37, 0x86, 0x57, 0xe6, + 0x28, 0x99, 0xa9, 0x18, 0xd6, 0x67, 0x69, 0xd8, 0x16, 0xa7, 0x97, 0x26, 0xe8, 0x59, 0x88, + 0x39, 0xf7, 0x46, 0x76, 0xc7, 0x09, 0xb8, 0x15, 0xa4, 0x6a, 0xdb, 0xeb, 0x5a, 0x94, 0x25, + 0xf4, 0x45, 0x8b, 0x3a, 0x0a, 0xbb, 0x75, 0xc4, 0xca, 0x7b, 0xb5, 0x04, 0x34, 0x85, 0x4b, + 0xfa, 0x2b, 0x9a, 0x54, 0xe5, 0xd5, 0x64, 0xaa, 0x1b, 0xed, 0x5c, 0x92, 0x23, 0x13, 0xa2, + 0x6c, 0xdd, 0x0c, 0xbd, 0x73, 0xc2, 0xf2, 0x43, 0x8d, 0x3c, 0x32, 0x83, 0x4d, 0xfc, 0xcc, + 0x7d, 0xb3, 0x02, 0xd3, 0x62, 0xac, 0x1d, 0x2d, 0x9c, 0x52, 0xe3, 0x4e, 0xff, 0x31, 0x80, + 0xb0, 0x01, 0xcf, 0x7e, 0xaf, 0x1e, 0xd0, 0x61, 0x51, 0xe0, 0x2e, 0x9f, 0x91, 0x20, 0xee, + 0x5f, 0x6f, 0xde, 0x10, 0xa1, 0x70, 0xc1, 0x0f, 0xbe, 0x8e, 0x3f, 0xf1, 0x40, 0x00, 0xb2, + 0x79, 0xcb, 0xf2, 0x40, 0x8b, 0x39, 0xf9, 0x4b, 0x80, 0x32, 0x0b, 0xb9, 0x72, 0xc0, 0xef, + 0x5d, 0x96, 0x24, 0x1d, 0xaf, 0x64, 0xd6, 0x16, 0xa4, 0x6f, 0xdd, 0xe4, 0x56, 0x9d, 0x2f, + 0xc3, 0x71, 0xba, 0x08, 0x31, 0x83, 0x48, 0xfa, 0x3a, 0x88, 0x43, 0xf1, 0xc8, 0x7a, 0xb1, + 0x03, 0x2c, 0x9e, 0x55, 0xe7, 0xde, 0x6c, 0xa7, 0x15, 0xd5, 0x67, 0xac, 0x1e, 0x27, 0x95, + 0x5e, 0xec, 0x9b, 0x29, 0xe2, 0x50, 0x69, 0xdb, 0x10, 0xa2, 0x62, 0xd0, 0x1b, 0xa9, 0x90, + 0x22, 0xe9, 0x5b, 0x74, 0xc6, 0x0d, 0xbf, 0x86, 0x34, 0xff, 0x4d, 0x8d, 0x3f, 0xf4, 0x46, + 0x7f, 0xcd, 0x06, 0xb4, 0x58, 0xea, 0x21, 0x93, 0xaa, 0x18, 0xd3, 0x61, 0xa1, 0x13, 0xd8, + 0x6a, 0x53, 0xe1, 0x2a, 0x98, 0xb7, 0x05, 0xce, 0x7c, 0x45, 0xf7, 0x3c, 0x8e, 0x4e, 0xfc, + 0x37, 0x85, 0xbc, 0x0e, 0xc5, 0x77, 0x2b, 0x99, 0x52, 0xe0, 0xd9, 0x6b, 0xa0, 0x12, 0xd2, + 0x60, 0xab, 0x19, 0x20, 0x92, 0x59, 0xeb, 0xc4, 0x76, 0xbd, 0x0f, 0x36, 0x84, 0x4f, 0xfd, + 0x3d, 0x8f, 0x44, 0xf6, 0xcf, 0x7d, 0xb6, 0x04, 0xe8, 0x5a, 0x91, 0x23, 0x1a, 0xa8, 0x63, + 0xd1, 0x11, 0xa3, 0x68, 0xda, 0xe3, 0x51, 0x9a, 0x28, 0x07, 0xb5, 0x7e, 0xcc, 0xf5, 0x47, + 0x8c, 0x3e, 0xfe, 0x4c, 0x87, 0x35, 0x0c, 0xbe, 0x75, 0xc7, 0xb0, 0x02, 0xc9, 0x7b, 0x42, + 0xf0, 0x3b, 0x89, 0x49, 0xfb, 0x30, 0x82, 0xbb, 0x09, 0xc2, 0x70, 0x5f, 0xed, 0x26, 0x94, + 0xad, 0x1f, 0xd4, 0x66, 0xa6, 0x14, 0xdf, 0x6d, 0x54, 0xe6, 0x2d, 0x9f, 0x73, 0xc1, 0x0a, + 0xb8, 0x81, 0x33, 0xf8, 0x4a, 0x8a, 0x38, 0xf3, 0x41, 0x78, 0xca, 0x01, 0xb3, 0x9c, 0x2e, + 0xe5, 0x57, 0x6e, 0xdc, 0x17, 0xa5, 0x65, 0xd7, 0x1c, 0xae, 0x97, 0x25, 0xee, 0x5c, 0x00, + 0xb3, 0x7b, 0xc8, 0xf6, 0x45, 0x8d, 0x3e, 0xf1, 0x42, 0x8a, 0x39, 0x07, 0xb4, 0x7c, 0xcf, + 0xff, 0x4c, 0x84, 0x37, 0x09, 0xba, 0x72, 0xc1, 0x0e, 0xbd, 0x75, 0xc6, 0xf8, 0x4b, 0x83, + 0x30, 0xe3, 0x50, 0x98, 0x2b, 0x15, 0xa6, 0x6e, 0xdd, 0x12, 0xa1, 0x69, 0xda, 0xe4, 0x57, + 0x9f, 0x2c, 0x1c, 0xaf, 0x67, 0xd4, 0xea, 0x59, 0x91, 0x22, 0xed, 0x5e, 0x96, 0x25, 0x1b, + 0xa8, 0x60, 0xd3, 0xdb, 0x68, 0xa0, 0x13, 0x2d, 0x9e, 0x56, 0xe5, 0x2a, 0x99, 0x51, 0xe2, + 0xdc, 0x6f, 0xa7, 0x14, 0x24, 0x97, 0x5f, 0xec, 0xd2, 0x61, 0xa9, 0x1a, 0xd5, 0x66, 0xae, + 0x1d, 0x23, 0x90, 0x58, 0xeb, 0x38, 0x8b, 0x43, 0xf0, 0xce, 0x7d, 0xb5, 0x06, 0xc9, 0x7a, + 0xb2, 0x01, 0x3f, 0x8c, 0x44, 0xf7, 0xc7, 0x74, 0xbc, 0x0f, 0x31, 0x82, 0x4a, 0xf9, 0x36, + 0x85, 0x4d, 0xfe, 0xc0, 0x73, 0xbb, 0x08, 0xab, 0x18, 0xd0, 0x63, 0x5d, 0xee, 0x26, 0x95, + 0x5a, 0xe9, 0x21, 0x92, 0xac, 0x1f, 0xd7, 0x64, 0x54, 0xe7, 0x2f, 0x9c, 0xa2, 0x11, 0xd9, + 0x6a, 0xa5, 0x16, 0xde, 0x6d, 0x53, 0xe0, 0x28, 0x9b, 0x48, 0xfb, 0x33, 0x80, 0xbe, 0x0d, + 0xc5, 0x76, 0xb9, 0x0a, 0xc2, 0x71, 0x4f, 0xfc, 0x34, 0x87, 0xb7, 0x04, 0xcc, 0x7f, 0x41, + 0xf2, 0x3a, 0x89, 0x46, 0xf5, 0x3d, 0x8e, 0xb0, 0x03, 0xcb, 0x78, 0x70, 0xc3, 0x0b, 0xb8, + 0x86, 0x35, 0xfd, 0x4e, 0x81, 0x32, 0xfa, 0x49, 0x77, 0xc4, 0x0c, 0xbf, 0x8f, 0x3c, 0xf4, + 0x47, 0x79, 0xca, 0x02, 0xb1, 0x7e, 0xcd, 0x05, 0xb6, 0x88, 0x3b, 0xf3, 0x40, 0x93, 0x20, + 0xe8, 0x5b, 0x65, 0xd6, 0x1e, 0xad, 0x62, 0xd1, 0x19, 0xaa, 0x94, 0x27, 0xef, 0x5c, 0x6c, + 0xdf, 0x17, 0xa4, 0x9a, 0x29, 0xe1, 0x52, 0x9d, 0x2e, 0xe6, 0x55, 0x6b, 0xd8, 0x10, 0xa3, + 0x00, 0xb4, 0x75, 0xc1, 0xea, 0x5e, 0x9f, 0x2b, 0xc9, 0x7d, 0xbc, 0x08, 0x23, 0x97, 0x56, + 0xe2, 0x8f, 0x3b, 0xfa, 0x4e, 0x65, 0xd1, 0x10, 0xa4, 0x46, 0xf2, 0x33, 0x87, 0xac, 0x18, + 0xd9, 0x6d, 0x03, 0xb7, 0x76, 0xc2, 0xe9, 0x5d, 0x9c, 0x28, 0xca, 0x7e, 0xbf, 0x0b, 0x20, + 0x94, 0x55, 0xe1, 0x8c, 0x38, 0xf9, 0x4d, 0x66, 0xd2, 0x13, 0xa7, 0x45, 0xf1, 0x30, 0x84, + 0xaf, 0x1b, 0xda, 0x6e, 0x06, 0xb2, 0x73, 0xc7, 0xec, 0x58, 0x99, 0x2d, 0xcf, 0x7b, 0xba, + 0x0e, 0x25, 0x91, 0x50, 0xe4, 0x89, 0x3d, 0xfc, 0x48, 0x63, 0xd7, 0x16, 0xa2, 0x40, 0xf4, + 0x35, 0x81, 0xaa, 0x1e, 0xdf, 0x6b, 0x05, 0xb1, 0x70, 0xc4, 0xef, 0x5b, 0x9a, 0x2e, 0xcc, + 0x78, 0xb9, 0x0d, 0x26, 0x92, 0x53, 0xe7, 0x8a, 0x3e, 0xff, 0x4b, 0x60, 0xd4, 0x15, 0xa1, + 0x43, 0xf7, 0x36, 0x82, 0xa9, 0x1d, 0xdc, 0x68, 0x0c, 0xb8, 0x79, 0xcd, 0xe6, 0x52, 0x93, + 0x27, 0xc5, 0x71, 0xb0, 0x04, 0x2f, 0x9b, 0x5a, 0xee, 0x83, 0x37, 0xf6, 0x42, 0x69, 0xdd, + 0x1c, 0xa8, 0x4a, 0xfe, 0x3f, 0x8b, 0xa0, 0x14, 0xd5, 0x61, 0x0f, 0xbb, 0x7a, 0xce, 0xe5, + 0x51, 0x90, 0x24, 0xc6, 0x72, 0xb3, 0x07, 0x2c, 0x98, 0x59, 0xed, 0x80, 0x34, 0xf5, 0x41, + 0x6a, 0xde, 0x1f, 0xab, 0x49, 0xfd, 0x3c, 0x88, 0xa3, 0x17, 0xd6, 0x62, 0x0a, 0xbe, 0x7f, + 0xcb, 0xe0, 0x54, 0x95, 0x21, 0xc3, 0x77, 0xb6, 0x02, 0x29, 0x9d, 0x5c, 0xe8, 0x85, 0x31, + 0xf0, 0x44, 0x6f, 0xdb, 0x1a, 0xae, 0x4c, 0xf8, 0x39, 0x8d, 0xa6, 0x12, 0xd3, 0x67, 0x09, + 0xbd, 0x7c, 0xc8, 0xe3, 0x57, 0x96, 0x22, 0xc0, 0x74, 0xb5, 0x01, 0x2a, 0x9e, 0x5f, 0xeb, + 0x86, 0x32, 0xf3, 0x47, 0x6c, 0xd8, 0x19, 0xad, 0x4f, 0xfb, 0x3a, 0x8e, 0xa5, 0x11, 0xd0, + 0x64, 0x00, 0xb5, 0x77, 0xc2, 0xee, 0x5b, 0x99, 0x2c, 0xc1, 0x74, 0xb6, 0x03, 0x2f, 0x9a, + 0x58, 0xed, 0x9f, 0x2a, 0xe8, 0x5d, 0x71, 0xc4, 0x06, 0xb3, 0x5e, 0xeb, 0x29, 0x9c, 0xb0, + 0x05, 0xc7, 0x72, 0x23, 0x96, 0x54, 0xe1, 0xcd, 0x78, 0xba, 0x0f, 0xe2, 0x57, 0x95, 0x20, + 0x0c, 0xb9, 0x7b, 0xce, 0xbc, 0x09, 0xcb, 0x7e, 0x52, 0xe7, 0x25, 0x90, 0x7d, 0xc8, 0x0a, + 0xbf, 0x93, 0x26, 0xe4, 0x51, 0x46, 0xf3, 0x31, 0x84, 0xa8, 0x1d, 0xdf, 0x6a, 0x87, 0x32, + 0xf0, 0x45, 0x69, 0xdc, 0x1e, 0xab, 0xd9, 0x6c, 0xae, 0x1b, 0x37, 0x82, 0x40, 0xf5, 0x18, + 0xad, 0x6f, 0xda, 0xf6, 0x43, 0x81, 0x34, 0x65, 0xd0, 0x12, 0xa7, 0x8b, 0x3e, 0xfc, 0x49, + 0xa4, 0x11, 0xd3, 0x66, 0x4a, 0xff, 0x3d, 0x88, 0xfa, 0x4f, 0x8d, 0x38, 0x14, 0xa1, 0x63, + 0xd6, 0x3b, 0x8e, 0x4c, 0xf9, 0xd5, 0x60, 0xa2, 0x17, 0x8c, 0x39, 0xfb, 0x4e, 0x62, 0xd7, + 0x15, 0xa0, 0x4d, 0xf8, 0x3a, 0x8f, 0xa3, 0x16, 0xd4, 0x61, 0x13, 0xa6, 0x64, 0xd1, 0xfd, + 0x48, 0x8a, 0x3f, 0xd2, 0x67, 0xa5, 0x10, 0x3c, 0x89, 0x4b, 0xfe, 0xaf, 0x1a, 0xd8, 0x6d, + 0x41, 0xf4, 0x36, 0x83, 0x6e, 0xdb, 0x19, 0xac, 0x80, 0x35, 0xf7, 0x42, 0x30, 0x85, 0x47, + 0xf2, 0xde, 0x6b, 0xa9, 0x1c, 0xf1, 0x44, 0x86, 0x33, 0x1f, 0xaa, 0x68, 0xdd, 0xca, 0x7f, + 0xbd, 0x08, 0x24, 0x91, 0x53, 0xe6, 0x0b, 0xbe, 0x7c, 0xc9, 0xe5, 0x50, 0x92, 0x27, 0x55, + 0xe0, 0x22, 0x97, 0xbb, 0x0e, 0xcc, 0x79, 0x94, 0x21, 0xe3, 0x56, 0x7a, 0xcf, 0x0d, 0xb8, + 0xe9, 0x5c, 0x9e, 0x2b, 0x07, 0xb2, 0x70, 0xc5, 0x28, 0x9d, 0x5f, 0xea, 0xc6, 0x73, 0xb1, + 0x04, 0x76, 0xc3, 0x01, 0xb4, 0x98, 0x2d, 0xef, 0x5a, 0xb7, 0x02, 0xc0, 0x75, 0x59, 0xec, + 0x2e, 0x9b, 0x00, 0xb6, 0x71, 0xc7, 0xe2, 0x54, 0x93, 0x25, 0xd9, 0x6f, 0xa8, 0x1e, 0x3b, + 0x8d, 0x4a, 0xfc, 0xaf, 0x19, 0xde, 0x68, 0x4d, 0xfb, 0x3c, 0x8a, 0x76, 0xc0, 0x07, 0xb1, + 0x94, 0x22, 0xe5, 0x53, 0x43, 0xf5, 0x32, 0x84, 0xa1, 0x17, 0xd0, 0x66, 0x9a, 0x2c, 0xeb, + 0x5d, 0x78, 0xce, 0x09, 0xbf, 0xec, 0x5a, 0x9d, 0x2b, 0x0e, 0xb8, 0x7f, 0xc9, 0x35, 0x83, + 0x44, 0xf2, 0xd7, 0x61, 0xa6, 0x10, 0x86, 0x30, 0xf7, 0x41, 0x64, 0xd2, 0x15, 0xa3, 0x5f, + 0xe9, 0x2e, 0x98, 0xbd, 0x0b, 0xcc, 0x7a, 0x29, 0x9f, 0x58, 0xee, 0xcb, 0x7d, 0xba, 0x0c, + 0xf0, 0x46, 0x81, 0x37, 0x12, 0xa4, 0x63, 0xd5, 0xc5, 0x73, 0xb4, 0x02, 0x27, 0x91, 0x56, + 0xe0, 0x1c, 0xaa, 0x6d, 0xdb, 0xfe, 0x48, 0x8f, 0x39, 0x6a, 0xdc, 0x1b, 0xad, 0x88, 0x3e, + 0xf9, 0x4f, 0xb3, 0x05, 0xc2, 0x74, 0x51, 0xe7, 0x20, 0x96, 0x11, 0xa7, 0x60, 0xd6, 0xf3, + 0x45, 0x82, 0x34, 0xc8, 0x7e, 0xb9, 0x0f, 0x2a, 0x9c, 0x5b, 0xed, 0xbe, 0x08, 0xcf, 0x79, + 0x5c, 0xea, 0x2d, 0x9b, 0x67, 0xd1, 0x16, 0xa0, 0x85, 0x33, 0xf4, 0x42, 0x52, 0xe4, 0x23, + 0x95, 0xb0, 0x06, 0xc1, 0x77, 0x8b, 0x3d, 0xfa, 0x4c, 0x69, 0xdf, 0x18, 0xae, 0xfd, 0x4b, + 0x8c, 0x3a, 0x1f, 0xa9, 0x6e, 0xd8, 0x24, 0x92, 0x55, 0xe3, 0xc6, 0x70, 0xb7, 0x01, 0x97, + 0x21, 0xe6, 0x50, 0x75, 0xc3, 0x04, 0xb2, 0x4e, 0xf8, 0x3f, 0x89, 0xac, 0x1a, 0xdd, 0x6b, + 0x38, 0x8e, 0x49, 0xff, 0xda, 0x6c, 0xab, 0x1d, 0xe1, 0x57, 0x90, 0x26, 0x03, 0xb5, 0x72, + 0xc4, 0xd4, 0x62, 0xa5, 0x13, 0x36, 0x80, 0x47, 0xf1, 0x0d, 0xbb, 0x7c, 0xca, 0xef, 0x59, + 0x9e, 0x28, 0x7b, 0xcd, 0x0a, 0xbc, 0x99, 0x2f, 0xe8, 0x5e, 0xa2, 0x14, 0xd3, 0x65, 0x40, + 0xf6, 0x31, 0x87, 0x00, 0xb7, 0x73, 0xc4, 0xe6, 0x51, 0x95, 0x22, 0xd1, 0x66, 0xa2, 0x15, + 0x37, 0x80, 0x44, 0xf3, 0xbf, 0x08, 0xcc, 0x7b, 0x59, 0xee, 0x2a, 0x9d, 0x6e, 0xd9, 0x1d, + 0xaa, 0x88, 0x3f, 0xfb, 0x4c, 0x63, 0xd4, 0x10, 0xa7, 0x85, 0x32, 0xf6, 0x41, 0xb2, 0x05, + 0xc1, 0x76, 0x54, 0xe3, 0x27, 0x90, 0xdc, 0x6b, 0xaf, 0x18, 0x3a, 0x8d, 0x49, 0xfe, 0x0d, + 0xba, 0x7e, 0xc9, 0xeb, 0x5c, 0x98, 0x2f, 0xc6, 0x71, 0xb5, 0x02, 0x20, 0x97, 0x53, 0xe4, + 0x17, 0xa0, 0x64, 0xd3, 0xf1, 0x46, 0x82, 0x35, 0x79, 0xce, 0x0a, 0xbd, 0x9f, 0x28, 0xec, + 0x5b, 0xa8, 0x1f, 0xdb, 0x6c, 0x4e, 0xf9, 0x3d, 0x8a, 0xa5, 0x12, 0xd6, 0x61, 0x43, 0xf4, + 0x30, 0x87, 0x74, 0xc3, 0x07, 0xb0, 0x92, 0x25, 0xe1, 0x56, 0x1a, 0xad, 0x69, 0xde, 0xfc, + 0x4b, 0x8f, 0x38, 0xcb, 0x7c, 0xb8, 0x0f, 0x2d, 0x9a, 0x5e, 0xe9, 0x91, 0x26, 0xe2, 0x55, + 0x77, 0xc0, 0x04, 0xb3, 0x40, 0xf7, 0x33, 0x84, 0xa6, 0x11, 0xd5, 0x62, 0x2e, 0x99, 0x5d, + 0xea, 0xc8, 0x7f, 0xbb, 0x0c, 0xff, 0x48, 0x8c, 0x3b, 0x19, 0xae, 0x6a, 0xdd, 0xf2, 0x45, + 0x81, 0x36, 0x14, 0xa3, 0x67, 0xd0, 0x23, 0x94, 0x50, 0xe7, 0xc5, 0x72, 0xb6, 0x01, 0x4d, + 0xfa, 0x3e, 0x89, 0xab, 0x1c, 0xd8, 0x6f, 0x9c, 0x2b, 0xef, 0x58, 0x7a, 0xcd, 0x09, 0xbe, + 0x57, 0xe0, 0x24, 0x93, 0xb1, 0x06, 0xc2, 0x75, 0x86, 0x31, 0xf5, 0x42, 0x60, 0xd7, 0x13, + 0xa4, 0xe8, 0x5f, 0x9b, 0x2c, 0x0e, 0xb9, 0x7d, 0xca, 0x39, 0x8e, 0x4a, 0xfd, 0xdf, 0x68, + 0xac, 0x1b, 0x34, 0x83, 0x47, 0xf0, 0xd2, 0x65, 0xa1, 0x16, 0xe5, 0x52, 0x96, 0x21, 0x03, + 0xb4, 0x70, 0xc7, 0x8b, 0x3c, 0xf8, 0x4f, 0x6d, 0xda, 0x1e, 0xa9, 0x5a, 0xed, 0x29, 0x9e, + 0xbc, 0x0b, 0xcf, 0x78, 0x00, 0xb8, 0x6d, 0xd5, 0xda, 0x62, 0xb7, 0x0f, 0xa9, 0x11, 0xc4, + 0x7c, 0x73, 0xcb, 0x1e, 0xa6, 0x4f, 0xf7, 0x22, 0x9a, 0x95, 0x2d, 0xf8, 0x40, 0xe6, 0x5e, + 0x8b, 0x33, 0x3c, 0x84, 0x51, 0xe9, 0x9e, 0x26, 0xf3, 0x4b, 0x44, 0xfc, 0x29, 0x91, 0x37, + 0x8f, 0x5a, 0xe2, 0xed, 0x55, 0x80, 0x38, 0xd1, 0x69, 0xbc, 0x04, 0x0b, 0xb3, 0x66, 0xde, + 0x78, 0xc0, 0x15, 0xad, 0xa2, 0x1a, 0xcf, 0x77, 0x21, 0x99, 0x4c, 0xf4, 0xfb, 0x43, 0x96, + 0x2e, 0x88, 0x30, 0xe5, 0x5d, 0x52, 0xea, 0x3f, 0x87, 0x6e, 0xd6, 0x03, 0xbb, 0xb4, 0x0c, + 0xd9, 0x61, 0xc7, 0x7f, 0xaa, 0x12, 0x1d, 0xa5, 0x70, 0xc8, 0xbf, 0x07, 0xd2, 0x6a, 0x65, + 0xdd, 0x08, 0xb0, 0x16, 0xae, 0x7b, 0xc3, 0xcc, 0x74, 0xa1, 0x19, 0xf0, 0x48, 0x9d, 0x25, + 0x2a, 0x92, 0x47, 0xff, 0x59, 0xe1, 0x34, 0x8c, 0x83, 0x3b, 0xee, 0x56, 0x42, 0xfa, 0x2f, + 0x97, 0x98, 0x20, 0xf5, 0x4d, 0xeb, 0x53, 0x86, 0x3e, 0x31, 0x89, 0x5c, 0xe4, 0x0d, 0xb5, + 0x60, 0xd8, 0xd7, 0x6f, 0xba, 0x02, 0xa4, 0x1c, 0xc9, 0x71, 0x7e, 0xc6, 0x13, 0xab, 0xdc, + 0x64, 0xb1, 0x09, 0x06, 0xbe, 0x6b, 0xd3, 0x75, 0xcd, 0x18, 0xa0, 0xaf, 0x17, 0xc2, 0x7a, + 0x93, 0x2b, 0xfe, 0x46, 0x49, 0xf1, 0x24, 0x9c, 0x3a, 0x82, 0x57, 0xef, 0xe0, 0x58, 0x8d, + 0x35, 0x63, 0xdb, 0x0e, 0xb6, 0xb9, 0x01, 0xd4, 0x6c, 0xca, 0x72, 0xa7, 0x1f, 0x10, 0xa8, + 0x7d, 0xc5, 0x2c, 0x94, 0x41, 0xf9, 0xf6, 0x4e, 0x9b, 0x23, 0x85, 0x3d, 0xe8, 0x50, 0x5f, + 0xe7, 0x32, 0x8a, 0xfd, 0x45, 0x90, 0x28, 0x27, 0x9f, 0x4a, 0xf2, 0x54, 0xec, 0x39, 0x81, + 0x8e, 0x36, 0xe3, 0x5b, 0xb2, 0x0a, 0xdf, 0x67, 0x68, 0xd0, 0x05, 0xbd, 0x1b, 0xa3, 0x76, + 0xce, 0xc1, 0x79, 0xac, 0x14, 0x00, 0xb9, 0x6f, 0xd6, 0xde, 0x67, 0xb1, 0x08, 0xa1, 0x18, + 0xce, 0x77, 0x7f, 0xc6, 0x10, 0xa9, 0x5f, 0xe6, 0x30, 0x89, 0x81, 0x38, 0xee, 0x57, 0xfe, + 0x47, 0x91, 0x28, 0x20, 0x99, 0x4f, 0xf6, 0xbe, 0x07, 0xd1, 0x68, 0x60, 0xd9, 0x0f, 0xb6, + 0x1f, 0xa6, 0x70, 0xc9, 0xc1, 0x78, 0xae, 0x17, 0xe1, 0x58, 0x8e, 0x37, 0x3f, 0x86, 0x50, + 0xe9, 0x40, 0xf9, 0x2f, 0x96, 0x9e, 0x27, 0xf1, 0x48, 0x61, 0xd8, 0x0e, 0xb7, 0xbf, 0x06, + 0xd0, 0x69, 0xc0, 0x79, 0xaf, 0x16, 0x1e, 0xa7, 0x71, 0xc8, 0x3e, 0x87, 0x51, 0xe8, 0xe0, + 0x59, 0x8f, 0x36, 0x9f, 0x26, 0xf0, 0x49, 0x41, 0xf8, 0x2e, 0x97, 0xdf, 0x66, 0xb0, 0x09, + 0x01, 0xb8, 0x6e, 0xd7, 0x7e, 0xc7, 0x11, 0xa8, 0xa0, 0x19, 0xcf, 0x76, 0x80, 0x39, 0xef, + 0x56, 0x5e, 0xe7, 0x31, 0x88, 0x21, 0x98, 0x4e, 0xf7, 0xff, 0x46, 0x90, 0x29, 0xc2, 0x7b, + 0xad, 0x14, 0x1c, 0xa5, 0x73, 0xca, 0x63, 0xda, 0x0c, 0xb5, 0xbd, 0x04, 0xd2, 0x6b, 0x9d, + 0x24, 0xf2, 0x4b, 0x43, 0xfa, 0x2c, 0x95, 0x3c, 0x85, 0x53, 0xea, 0xe2, 0x5b, 0x8d, 0x34, + 0x7c, 0xc5, 0x13, 0xaa, 0xa2, 0x1b, 0xcd, 0x74, 0xdd, 0x64, 0xb2, 0x0b, 0x03, 0xba, 0x6c, + 0xd5, 0x23, 0x9a, 0x4c, 0xf5, 0xfd, 0x44, 0x92, 0x2b, 0x82, 0x3b, 0xed, 0x54, 0x5c, 0xe5, + 0x33, 0x8a, 0xa3, 0x1a, 0xcc, 0x75, 0x7d, 0xc4, 0x12, 0xab, 0x02, 0xbb, 0x6d, 0xd4, 0xdc, + 0x65, 0xb3, 0x0a, 0xfc, 0x45, 0x93, 0x2a, 0x22, 0x9b, 0x4d, 0xf4, 0x5d, 0xe4, 0x32, 0x8b, + 0x83, 0x3a, 0xec, 0x55, 0x1d, 0xa4, 0x72, 0xcb, 0xc3, 0x7a, 0xac, 0x15, 0xbc, 0x05, 0xd3, + 0x6a, 0x62, 0xdb, 0x0d, 0xb4, 0x42, 0xfb, 0x2d, 0x94, 0x9c, 0x25, 0xf3, 0x4a, 0xe3, 0x5a, + 0x8c, 0x35, 0x3d, 0x84, 0x52, 0xeb, 0x00, 0xba, 0x69, 0xd3, 0xd2, 0x68, 0xbb, 0x01, 0xb9, + 0x03, 0xd0, 0x6a, 0x6b, 0xd1, 0x02, 0xb8, 0x6f, 0xd5, 0x06, 0xbc, 0xbd, 0x07, 0xd4, 0x6e, + 0xd6, 0x6c, 0xbf, 0x05, 0x04, 0xbe, 0x6d, 0xd7, 0xde, 0x64, 0xb7, 0x0d, 0x0c, 0xb6, 0x65, + 0xdf, 0x67, 0xdd, 0x0e, 0xb4, 0xb5, 0x0f, 0xdc, 0x66, 0xb1, 0x0b, 0xd8, 0x62, 0x63, 0xd9, + 0x0a, 0xb0, 0x08, 0xb2, 0x61, 0xdb, 0xda, 0x60, 0xb3, 0x09, 0xa1, 0x1b, 0xc8, 0x72, 0x73, + 0xc9, 0x1a, 0xa0, 0x18, 0xa2, 0x71, 0xcb, 0xca, 0x70, 0xa3, 0x19, 0xce, 0x74, 0xa7, 0x1d, + 0x1c, 0xa6, 0x75, 0xcf, 0x77, 0xcd, 0x1e, 0xa4, 0xa5, 0x1f, 0xcc, 0x76, 0x7f, 0xc5, 0x16, + 0xac, 0xad, 0x17, 0xc4, 0x7e, 0xc6, 0x7c, 0xaf, 0x15, 0x14, 0xae, 0x7d, 0xc7, 0x10, 0xaa, + 0x79, 0xc3, 0xc2, 0x78, 0xab, 0x11, 0xa9, 0x13, 0xc0, 0x7a, 0x7b, 0xc1, 0x12, 0xa8, 0x5f, + 0xe5, 0x36, 0x8c, 0x8d, 0x37, 0xe4, 0x5e, 0xe6, 0x5c, 0x8f, 0x35, 0x34, 0x8e, 0x5d, 0xe7, + 0x30, 0x8a, 0x59, 0xe3, 0xe2, 0x58, 0x8b, 0x31, 0x89, 0x33, 0xe0, 0x5a, 0x5b, 0xe1, 0x32, + 0x88, 0x81, 0x3b, 0xe8, 0x52, 0x53, 0xe9, 0x3a, 0x80, 0x38, 0x82, 0x51, 0xeb, 0xea, 0x50, + 0x83, 0x39, 0xee, 0x54, 0x87, 0x3d, 0x3c, 0x86, 0x55, 0xef, 0x57, 0xed, 0x3e, 0x84, 0x85, + 0x3f, 0xec, 0x56, 0xfe, 0x44, 0x97, 0x2d, 0x2c, 0x96, 0x45, 0xff, 0x47, 0xfd, 0x2e, 0x94, + 0x95, 0x2f, 0xfc, 0x46, 0x91, 0x2b, 0xf8, 0x42, 0x43, 0xf9, 0x2a, 0x90, 0x28, 0x92, 0x41, + 0xfb, 0xfa, 0x40, 0x93, 0x29, 0x20, 0x9a, 0x49, 0xf3, 0xf2, 0x48, 0x9b, 0x21, 0x99, 0x23, + 0xf0, 0x4a, 0x4b, 0xf1, 0x22, 0x98, 0x4f, 0xf5, 0x26, 0x9c, 0x9d, 0x27, 0xf4, 0x4e, 0xf6, + 0x4c, 0x9f, 0x25, 0x24, 0x9e, 0x4d, 0xf7, 0x00, 0xbb, 0x6b, 0xd0, 0xd6, 0x6d, 0xbd, 0x06, + 0xb1, 0x0a, 0xda, 0x61, 0x67, 0xdc, 0x0c, 0xb7, 0x7f, 0xc4, 0x14, 0xaf, 0xa9, 0x12, 0xc2, + 0x79, 0xce, 0x75, 0xa5, 0x1e, 0x18, 0xa3, 0x73, 0xc8, 0xfe, 0x45, 0x95, 0x2e, 0x28, 0x93, + 0x43, 0xf8, 0x4f, 0xf4, 0x24, 0x9f, 0x99, 0x22, 0xf2, 0x49, 0x81, 0x3a, 0xea, 0x51, 0x57, + 0xec, 0x3c, 0x87, 0x30, 0x8b, 0x5b, 0xe0, 0xe6, 0x5d, 0x8d, 0x36, 0xe1, 0x5a, 0x8a, 0x31, + 0x37, 0x8c, 0x5c, 0xe7, 0x50, 0xeb, 0x3b, 0x80, 0x86, 0x3d, 0xed, 0x56, 0x9e, 0x25, 0xf5, + 0x4e, 0x48, 0xf3, 0x23, 0x98, 0x2f, 0x94, 0x44, 0xff, 0xf9, 0x42, 0x92, 0x29, 0x1f, 0xa4, + 0x74, 0xcf, 0xc9, 0x72, 0xa2, 0x19, 0xae, 0x15, 0xc5, 0x7e, 0x78, 0xc3, 0x13, 0xa8, 0x60, + 0xdb, 0x0b, 0xb0, 0xb6, 0x0d, 0xdd, 0x66, 0xd1, 0x6a, 0xba, 0x01, 0x07, 0xbc, 0x6c, 0xd7, + 0xdf, 0x64, 0xb4, 0x0f, 0x09, 0xb2, 0x62, 0xd9, 0x6e, 0xd5, 0x05, 0xbe, 0xb8, 0x03, 0xd3, + 0x68, 0xa0, 0x1b, 0xcb, 0x70, 0x76, 0xcd, 0x1d, 0xa6, 0x11, 0xaa, 0x7a, 0xc1, 0xc7, 0x7c, + 0xac, 0x17, 0x21, 0x9a, 0x4a, 0xf1, 0xf7, 0x4c, 0x9c, 0x27, 0x90, 0x2b, 0xfb, 0x40, 0x46, + 0xfd, 0x2d, 0x96, 0x5e, 0xe5, 0x35, 0x8e, 0x88, 0x33, 0xe3, 0x58, 0xef, 0x54, 0x84, 0x3f, + 0x39, 0x82, 0x52, 0xe9, 0x3e, 0x85, 0x55, 0xee, 0xe8, 0x53, 0x83, 0x38, 0x8f, 0x34, 0xe4, + 0x5f, 0x59, 0xe2, 0x32, 0x89, 0x41, 0xfa, 0x2a, 0x91, 0x97, 0x2c, 0xfc, 0x47, 0xf0, 0x4b, + 0x9b, 0x20, 0x26, 0x9d, 0x4d, 0xf6, 0xc0, 0x7b, 0xab, 0x10, 0x16, 0xad, 0x7d, 0xc6, 0x71, + 0xca, 0x1a, 0xa1, 0xa7, 0x1c, 0xcc, 0x77, 0xbf, 0x04, 0xd4, 0x6f, 0x69, 0xd2, 0x02, 0xb9, + 0x0e, 0xb5, 0x65, 0xde, 0xd8, 0x63, 0xb3, 0x08, 0x00, 0xbc, 0x65, 0xd9, 0xca, 0x76, 0xaf, + 0x13, 0x89, 0x35, 0xec, 0x50, 0x43, 0xff, 0x26, 0x9a, 0x0f, 0xb3, 0x6a, 0xd6, 0xc5, 0x79, + 0xa0, 0x1c, 0x86, 0x3a, 0xe3, 0x5f, 0x4c, 0xf0, 0x29, 0x95, 0x1e, 0xa2, 0x7b, 0xc7, 0xd4, + 0x68, 0xb1, 0x0d, 0x97, 0x2b, 0xf2, 0x4e, 0x5d, 0xe1, 0x38, 0x84, 0x11, 0xad, 0x74, 0xc8, + 0xdb, 0x67, 0xbe, 0x02, 0x98, 0x24, 0xfd, 0x41, 0x52, 0xee, 0x37, 0x8b, 0x3c, 0x80, 0x59, + 0xe5, 0xf6, 0x4a, 0x93, 0x2f, 0xb5, 0x09, 0xd0, 0x6c, 0x7f, 0xc3, 0x1a, 0xa6, 0x33, 0x8f, + 0x56, 0xea, 0xf9, 0x45, 0x9c, 0x20, 0xba, 0x06, 0xdf, 0x63, 0x70, 0xcc, 0x15, 0xa9, 0x22, + 0x9e, 0x47, 0xfb, 0xe8, 0x54, 0x8d, 0x31, 0xab, 0x17, 0xce, 0x72, 0x61, 0xdd, 0x04, 0xb8, + 0x2d, 0x91, 0x48, 0xf4, 0xe7, 0x5b, 0x82, 0x3e, 0xa4, 0x18, 0xc1, 0x7d, 0x6e, 0xd2, 0x0b, + 0xb7, 0x78, 0xc4, 0x1d, 0xa1, 0xb2, 0x0e, 0xd7, 0x6b, 0xf1, 0x4d, 0x94, 0x28, 0x3b, 0x87, + 0x5e, 0xe2, 0x77, 0xcb, 0x12, 0xae, 0xbd, 0x01, 0xd8, 0x64, 0xfe, 0x42, 0x9b, 0x27, 0x34, + 0x88, 0x51, 0xed, 0x66, 0xda, 0x03, 0xbf, 0xac, 0x10, 0xc9, 0x75, 0xef, 0x53, 0x8a, 0x36, + 0x25, 0x99, 0x40, 0xfc, 0x69, 0xd5, 0x0c, 0xb0, 0xa3, 0x1f, 0xc6, 0x7a, 0xe0, 0x5c, 0x85, + 0x39, 0x2a, 0x96, 0x4f, 0xf3, 0x44, 0xf8, 0x21, 0x9d, 0x8e, 0x32, 0xeb, 0x57, 0xcd, 0x71, + 0xa8, 0x14, 0x07, 0xbb, 0x62, 0xde, 0x4b, 0xf7, 0x2e, 0x92, 0x81, 0x3d, 0xe4, 0x58, 0xc2, + 0x7e, 0xa7, 0x1b, 0x08, 0xb4, 0x6d, 0xd1, 0x5a, 0xe6, 0x3f, 0x83, 0x90, 0x2c, 0xf5, 0x49, + 0xd3, 0x6f, 0xb6, 0x0a, 0x19, 0xa5, 0x7c, 0xc0, 0x55, 0xe9, 0x30, 0x8c, 0x9f, 0x23, 0xfa, + 0x46, 0xdc, 0x60, 0xb9, 0x05, 0x16, 0xaa, 0x73, 0xcf, 0x00, 0xbd, 0x67, 0xda, 0xce, 0x73, + 0xa9, 0x14, 0x81, 0x3c, 0xe6, 0x5b, 0x4f, 0xf2, 0x28, 0x95, 0x1f, 0xa2, 0x78, 0xc5, 0xd1, + 0x6c, 0xb6, 0x0b, 0x9e, 0x23, 0xf9, 0x44, 0x50, 0xed, 0x37, 0x8a, 0x3e, 0x83, 0x59, 0xe4, + 0xf0, 0x4d, 0x97, 0x2a, 0xbf, 0x02, 0xd8, 0x65, 0x71, 0xcc, 0x16, 0xab, 0x21, 0x9c, 0x46, + 0xfb, 0xef, 0x52, 0x88, 0x35, 0xa0, 0x1d, 0xc7, 0x7a, 0x6e, 0xd3, 0x09, 0xb4, 0x7c, 0xc1, + 0x1b, 0xa6, 0xb2, 0x0f, 0xd5, 0x68, 0xfd, 0x40, 0x9a, 0x27, 0x33, 0x8e, 0x54, 0xe9, 0x63, + 0xde, 0x04, 0xb9, 0xad, 0x10, 0xca, 0x77, 0xe2, 0x5f, 0x85, 0x38, 0x2c, 0x91, 0x4b, 0xf6, + 0x42, 0xff, 0x25, 0x98, 0x8c, 0x31, 0xeb, 0x56, 0xc3, 0x7e, 0xa4, 0x19, 0x0d, 0xb0, 0x6a, + 0xd7, 0x5d, 0xe0, 0x3a, 0x87, 0x93, 0x2e, 0xf4, 0x49, 0xdc, 0x61, 0xbb, 0x06, 0x12, 0xaf, + 0x75, 0xc8, 0xf8, 0x45, 0x9f, 0x22, 0x36, 0x8b, 0x51, 0xec, 0x79, 0xc4, 0x1e, 0xa3, 0xb7, + 0x0a, 0xd0, 0x6d, 0xe7, 0x5a, 0x80, 0x3d, 0x29, 0x94, 0x4e, 0xf3, 0x66, 0xdb, 0x01, 0xbc, + 0xa8, 0x15, 0xcf, 0x72, 0xc6, 0x7b, 0xa1, 0x1c, 0x08, 0xb5, 0x6f, 0xd2, 0x47, 0xfa, 0x20, + 0x9d, 0x89, 0x34, 0xee, 0x53, 0xd9, 0x64, 0xbe, 0x03, 0x17, 0xaa, 0x70, 0xcd, 0x58, 0xe5, + 0x3f, 0x82, 0x96, 0x2b, 0xf1, 0x4c, 0x84, 0x39, 0xe3, 0x5e, 0x4a, 0xf7, 0x2d, 0x90, 0x05, + 0xb8, 0x62, 0xdf, 0xcb, 0x76, 0xac, 0x11, 0x9b, 0x26, 0xfc, 0x41, 0x55, 0xe8, 0x32, 0x8f, + 0x1a, 0xa7, 0x7d, 0xc0, 0xd4, 0x69, 0xb3, 0x0e, 0xba, 0x07, 0xdd, 0x60, 0x74, 0xc9, 0x13, + 0xae, 0x3b, 0x86, 0x5c, 0xe1, 0xf5, 0x48, 0x92, 0x2f, 0xa5, 0x18, 0xc2, 0x7f, 0x6b, 0xd6, + 0x0c, 0xb1, 0x24, 0x99, 0x43, 0xfe, 0xea, 0x57, 0x8d, 0x30, 0x00, 0xbe, 0x61, 0xdf, 0xc2, + 0x7c, 0xa3, 0x1d, 0x99, 0x27, 0xf8, 0x46, 0x5b, 0xe5, 0x3a, 0x84, 0x2f, 0x91, 0x4e, 0xf0, + 0xed, 0x53, 0x8c, 0x32, 0xb6, 0x08, 0xd7, 0x69, 0x74, 0xca, 0x15, 0xab, 0x5e, 0xe0, 0x3f, + 0x81, 0x9c, 0x22, 0xfd, 0x43, 0xc7, 0x79, 0xa6, 0x18, 0x05, 0xbb, 0x64, 0xda, 0x71, 0xcf, + 0x10, 0xae, 0xb3, 0x0d, 0xd2, 0x6c, 0xe8, 0x56, 0x89, 0x37, 0x2a, 0x94, 0x4b, 0xf5, 0xbc, + 0x02, 0xdd, 0x63, 0x7e, 0xc0, 0x1f, 0xa1, 0x25, 0x9b, 0x44, 0xfa, 0xe7, 0x59, 0x86, 0x38, + 0x93, 0x2d, 0xf2, 0x4c, 0x51, 0xef, 0x30, 0x8e, 0x0a, 0xb4, 0x6b, 0xd5, 0xc8, 0x76, 0xa9, + 0x17, 0xe2, 0x5c, 0x83, 0x3d, 0x20, 0x9e, 0x41, 0xff, 0x7b, 0xc5, 0x1a, 0xa4, 0xb9, 0x07, + 0xd8, 0x66, 0xcd, 0x73, 0xac, 0x12, 0x0f, 0xb1, 0x6e, 0xd0, 0x54, 0xea, 0x35, 0x8b, 0x96, + 0x28, 0xf7, 0x49, 0x65, 0xdb, 0x04, 0xba, 0xa7, 0x19, 0xc6, 0x78, 0xfc, 0x42, 0x9d, 0x23, + 0x3e, 0x80, 0x5f, 0xe1, 0x4a, 0xf4, 0x2b, 0x95, 0x88, 0x36, 0xe9, 0x57, 0xd3, 0x6d, 0xb2, + 0x0c, 0x11, 0xaf, 0x70, 0xce, 0x3b, 0x85, 0x5a, 0xe4, 0xf9, 0x47, 0x98, 0x26, 0xa2, 0x1c, + 0xc3, 0x7d, 0x60, 0xde, 0x01, 0xbf, 0x14, 0xaa, 0x75, 0xcb, 0xd6, 0x68, 0xb7, 0x09, 0x8d, + 0x33, 0xec, 0x52, 0x4f, 0xf1, 0x2e, 0x90, 0xd9, 0x67, 0xb8, 0x06, 0x1b, 0xa5, 0x7a, 0xc4, + 0x40, 0xfe, 0x21, 0x9f, 0x82, 0x3c, 0xe3, 0x5d, 0xf6, 0x48, 0x97, 0x29, 0x34, 0x8a, 0x55, + 0xeb, 0x6f, 0xd1, 0x0e, 0xb0, 0xad, 0x13, 0xcc, 0x72, 0x87, 0x39, 0xe6, 0x58, 0x45, 0xfb, + 0x24, 0x9a, 0x1e, 0xa0, 0x7f, 0xc1, 0xdc, 0x62, 0xbd, 0x03, 0xa8, 0x16, 0xc9, 0x77, 0x6a, + 0xd4, 0x0b, 0xb5, 0x31, 0x8f, 0x50, 0xee, 0xf3, 0x4d, 0x92, 0x2c, 0x00, 0xbf, 0x63, 0xdc, + 0xc6, 0x79, 0xa5, 0x1a, 0x91, 0x2e, 0xf2, 0x4d, 0x57, 0xe8, 0x34, 0x8b, 0x3f, 0x80, 0x5c, + 0xe3, 0xf9, 0x46, 0x9a, 0x25, 0xae, 0x11, 0xcd, 0x72, 0x68, 0xd7, 0x0b, 0xb4, 0x7e, 0xc1, + 0x1d, 0xa2, 0xb8, 0x07, 0xdb, 0x64, 0xef, 0x50, 0x8c, 0x33, 0x29, 0x96, 0x4a, 0xf5, 0x41, + 0xfe, 0x22, 0x9d, 0x87, 0x38, 0xe4, 0x5b, 0xd0, 0x6f, 0xb3, 0x0c, 0x16, 0xa9, 0x75, 0xca, + 0xfc, 0x43, 0x9f, 0x20, 0x3a, 0x85, 0x59, 0xe6, 0x6d, 0xd2, 0x0e, 0xb1, 0xab, 0x14, 0xc8, + 0x77, 0xc3, 0x7c, 0xa0, 0x1f, 0x05, 0xba, 0x66, 0xd9, 0x52, 0xed, 0x31, 0x8e, 0x94, 0x2b, + 0xf7, 0x48, 0x82, 0x3d, 0xe1, 0x5e, 0x44, 0xfb, 0x27, 0x98, 0x13, 0xac, 0x70, 0xcf, 0xd5, + 0x6a, 0xb6, 0x09, 0xbd, 0x02, 0xde, 0x61, 0x7b, 0xc4, 0x18, 0xa7, 0x2c, 0x93, 0x4f, 0xf0, + 0xea, 0x55, 0x89, 0x36, 0xe5, 0x5a, 0x86, 0x39, 0x23, 0x9c, 0x40, 0xff, 0x74, 0xcb, 0x17, + 0xa8, 0xb2, 0x0d, 0xd1, 0x6e, 0xda, 0x65, 0xb9, 0x06, 0x1c, 0xa3, 0x7f, 0xc0, 0x4b, 0xf4, + 0x28, 0x97, 0x8d, 0x32, 0xee, 0x51, 0x9b, 0x24, 0xf8, 0x47, 0x5d, 0xe2, 0x3e, 0x81, 0x0a, + 0xb5, 0x69, 0xd6, 0xcc, 0x73, 0xaf, 0x10, 0xa4, 0x1b, 0xc7, 0x78, 0x62, 0xdd, 0x01, 0xbe, + 0x35, 0x8a, 0x56, 0xe9, 0xf3, 0x4c, 0x90, 0x2f, 0x19, 0xa6, 0x7a, 0xc5, 0xdf, 0x60, 0xbc, + 0x03, 0x88, 0x37, 0xeb, 0x54, 0x4e, 0xf1, 0x2d, 0x92, 0x26, 0x99, 0x45, 0xfa, 0xe0, 0x5f, + 0x83, 0x3c, 0xb7, 0x08, 0xd4, 0x6b, 0x71, 0xce, 0x12, 0xad, 0x67, 0xd8, 0x04, 0xbb, 0xa1, + 0x1e, 0xc2, 0x7d, 0xf6, 0x49, 0x95, 0x2a, 0x30, 0x8f, 0x53, 0xec, 0x58, 0xe7, 0x3b, 0x84, + 0x9e, 0x21, 0xfd, 0x42, 0xc9, 0x76, 0xaa, 0x15, 0x0f, 0xb0, 0x6c, 0xd3, 0x00, 0xc0, 0x9d, + 0x5d, 0x27, 0xe7, 0xba, 0x7a, 0x4e, 0x8e, 0xd3, 0x13, 0x69, 0xa9, 0xf4, 0x34, 0x9c, 0x5c, + 0x01, 0xc1, 0xbb, 0x7b, 0x26, 0xe6, 0xd2, 0x12, 0x4f, 0x8f, 0xf5, 0x35, 0x68, 0xa8, 0x25, + 0xe5, 0xb8, 0x78, 0x02, 0xc2, 0x9f, 0x5f, 0x6b, 0xab, 0xf6, 0x36, 0x4c, 0x8c, 0xd1, 0x11, + 0xb9, 0x79, 0x24, 0xe4, 0x9e, 0x5e, 0x03, 0xc3, 0xf7, 0x37, 0x6a, 0xaa, 0xd0, 0x10, 0x4d, + 0x8d, 0x4a, 0x8a, 0xd7, 0x17, 0x6d, 0xad, 0xf0, 0x30, 0x04, 0xc4, 0x99, 0x59, 0x23, 0xe3, + 0xbe, 0x7e, 0xd6, 0x16, 0x4b, 0x8b, 0xf1, 0x31, 0x6c, 0xac, 0x98, 0x58, 0x05, 0xc5, 0xbf, + 0x7f, 0x22, 0xe2, 0x6f, 0xaf, 0xf2, 0x32, 0x48, 0x88, 0xd5, 0x15, 0x21, 0xe1, 0xbc, 0x7c, + 0x06, 0xc6, 0x9b, 0x5b, 0xf3, 0x33, 0x6e, 0xae, 0xd4, 0x14, 0x49, 0x89, 0xbd, 0x7d, 0x20, + 0xe0, 0x9a, 0x5a, 0x07, 0xc7, 0x94, 0x54, 0x09, 0xc9, 0xb3, 0x73, 0x2e, 0xee, 0xda, 0x1a, + 0x47, 0x87, 0xfd, 0x3d, 0x60, 0xa0, 0x08, 0xc8, 0x95, 0x55, 0x2f, 0xef, 0xb2, 0x72, 0x46, + 0x86, 0xdb, 0x1b, 0x61, 0xa1, 0xfc, 0x3c, 0xb1, 0x71, 0x2c, 0xec, 0x96, 0x56, 0x0b, 0xcb, + 0xff, 0x3f, 0x62, 0xa2, 0xd8, 0x18, 0x45, 0x85, 0x2d, 0xed, 0xb0, 0x70, 0x0a, 0xca, 0x97, + 0x57, 0x63, 0xa3, 0xfe, 0x3e, 0x44, 0x84, 0xd9, 0x19, 0xde, 0x1e, 0x43, 0x83, 0xf9, 0x39, + 0x64, 0xa4, 0x90, 0x50, 0x0d, 0xcd, 0xb7, 0x77, 0x2a, 0xea, 0x42, 0x82, 0xdf, 0x1f, 0x65, + 0xa5, 0xf8, 0x38, 0x0c, 0xcc, 0x91, 0x51, 0x2b, 0xeb, 0xb6, 0x76, 0xfb, 0x3b, 0x66, 0xa6, + 0xdc, 0x1c, 0x41, 0x81, 0xb5, 0x75, 0x28, 0xe8, 0x92, 0x52, 0x0f, 0xcf, 0x67, 0xa7, 0xfa, + 0x3a, 0x40, 0x80, 0xdd, 0x1d, 0x29, 0xe9, 0xb4, 0x74, 0x0e, 0xce, 0x93, 0x53, 0x00, 0xc1, + 0x9f, 0x5e, 0x23, 0xe2, 0xbc, 0x7d, 0x46, 0x87, 0xd9, 0x18, 0x65, 0xa4, 0xfa, 0x3b, 0x8c, + 0x4d, 0x13, 0xd2, 0xaf, 0x6e, 0x30, 0xf1, 0xca, 0x0b, 0x55, 0x94, 0xe9, 0x28, 0x76, 0xb7, + 0x05, 0xc4, 0x9a, 0x5b, 0x26, 0xe7, 0xb9, 0x78, 0x43, 0x82, 0xdc, 0x1d, 0x60, 0xa1, 0xff, + 0x3e, 0x89, 0x48, 0x16, 0xd7, 0xaa, 0x6b, 0x35, 0xf4, 0xcf, 0x0e, 0x50, 0x91, 0xec, 0x2d, + 0x73, 0xb2, 0x0a, 0xcb, 0x95, 0x54, 0x29, 0xe8, 0xb6, 0x77, 0x4c, 0x8d, 0xd3, 0x12, 0x6f, + 0xae, 0xf0, 0x31, 0x86, 0x47, 0x19, 0xd8, 0xa5, 0x64, 0x3a, 0xfb, 0xc0, 0x01, 0x5f, 0x9e, + 0xe3, 0x22, 0x7c, 0xbd, 0x0f, 0xce, 0x90, 0x51, 0x2c, 0xed, 0xb3, 0x72, 0x49, 0x88, 0xd6, + 0x17, 0x6a, 0xab, 0xf5, 0x34, 0x83, 0x42, 0x1c, 0xdd, 0xa0, 0x61, 0x3f, 0xfe, 0xc5, 0x04, + 0x5a, 0x9b, 0xe6, 0x27, 0x79, 0xb8, 0x14, 0xd5, 0x8b, 0x4a, 0x37, 0xf6, 0xa8, 0x69, 0x52, + 0x93, 0xcd, 0x0c, 0x71, 0xb0, 0xee, 0x2f, 0x98, 0x59, 0x07, 0xc6, 0xbb, 0x7a, 0x24, 0xe5, + 0xde, 0x1f, 0x41, 0x80, 0xfd, 0x3c, 0x62, 0xa3, 0x11, 0xd0, 0x8e, 0x4f, 0x32, 0xf3, 0xad, + 0x6c, 0x57, 0x96, 0xc8, 0x09, 0x74, 0xb5, 0xeb, 0x2a, 0x9d, 0x5c, 0x02, 0xc3, 0xbe, 0x7f, + 0x21, 0xe0, 0xdb, 0x1a, 0x44, 0x85, 0xf8, 0x39, 0x67, 0xa6, 0x1e, 0xdf, 0x81, 0x40, 0x3d, + 0xfc, 0xa2, 0x63, 0x58, 0x99, 0xc7, 0x06, 0x7b, 0xba, 0xe4, 0x25, 0x92, 0x53, 0x0d, 0xcc, + 0xb1, 0x70, 0x2e, 0xef, 0xd4, 0x15, 0x4b, 0x8a, 0xf7, 0x36, 0x68, 0xa9, 0x1b, 0xda, 0x84, + 0x45, 0x38, 0xf9, 0xa7, 0x66, 0x5d, 0x9c, 0xc2, 0x03, 0x7e, 0xbf, 0xe1, 0x20, 0x97, 0x56, + 0x08, 0xc9, 0xb4, 0x75, 0x2b, 0xea, 0xd1, 0x10, 0x4e, 0x8f, 0xf2, 0x33, 0x6d, 0xac, 0x00, + 0xc2, 0x99, 0x5b, 0x2f, 0xed, 0xb6, 0x74, 0x5e, 0x9c, 0xc7, 0x05, 0x71, 0xb3, 0xe8, 0x2a, + 0xbc, 0x7e, 0x25, 0xe7, 0x93, 0x51, 0x0a, 0xc8, 0xe2, 0x20, 0x7b, 0xb9, 0xcd, 0x0f, 0x54, + 0x96, 0x65, 0xa7, 0xfc, 0x3e, 0x4a, 0x88, 0xd3, 0x11, 0x3b, 0xf9, 0xa2, 0x60, 0x14, 0xd6, + 0x8d, 0x4f, 0xd9, 0x1b, 0x40, 0x82, 0xf6, 0x34, 0x6f, 0xad, 0x87, 0x45, 0x1e, 0xdc, 0xa8, + 0x6a, 0x31, 0xf3, 0xca, 0x08, 0x53, 0x91, 0xe5, 0x27, 0x7c, 0xbe, 0x94, 0x56, 0x0d, 0xcf, + 0xbb, 0x79, 0x22, 0xe0, 0x76, 0xb4, 0xef, 0x2d, 0x59, 0x9b, 0xc0, 0x02, 0x28, 0xea, 0xb1, + 0x73, 0x07, 0xc5, 0x9e, 0x5c, 0xaf, 0x6d, 0x36, 0xf4, 0x80, 0x42, 0x19, 0xdb, 0xf1, 0x33, + 0x68, 0xaa, 0xde, 0x1c, 0x47, 0x85, 0x13, 0xd1, 0x8a, 0x48, 0x3c, 0xfe, 0xa5, 0x67, 0x4d, + 0x8f, 0xd4, 0x16, 0x62, 0xa0, 0xfb, 0x39, 0x89, 0x4b, 0x10, 0xd2, 0xa6, 0x64, 0x3f, 0xfd, + 0xd7, 0x15, 0x4e, 0x8c, 0xf8, 0x3a, 0x61, 0xa3, 0x35, 0xf7, 0xac, 0x6e, 0x1a, 0xd8, 0x83, + 0x41, 0x6b, 0xa9, 0xf2, 0x30, 0x44, 0x86, 0xdd, 0x1f, 0xec, 0x2e, 0x75, 0xb7, 0xc3, 0x01, + 0x5a, 0x98, 0xb2, 0x70, 0x2b, 0xe9, 0x9d, 0x5f, 0x04, 0xc6, 0x50, 0x92, 0xc9, 0x0b, 0x7f, + 0xbd, 0xe6, 0x24, 0x0e, 0xcc, 0x97, 0x55, 0x21, 0xe3, 0xb8, 0x7a, 0x43, 0x81, 0xda, 0x18, + 0x6c, 0xae, 0xf5, 0x37, 0x1d, 0xdf, 0x84, 0x46, 0x32, 0xf0, 0xab, 0x69, 0xff, 0x3d, 0x66, + 0xa4, 0xd0, 0x12, 0x49, 0x8b, 0xa1, 0x63, 0x38, 0xfa, 0x8e, 0x4c, 0x17, 0xd5, 0x26, 0xe4, + 0xbf, 0x7d, 0x09, 0xcb, 0x90, 0x52, 0x78, 0xba, 0xe1, 0x23, 0x57, 0x95, 0xce, 0x0c, 0x9a, + 0x58, 0x03, 0xc1, 0xb5, 0x77, 0x2c, 0xee, 0xc4, 0x06, 0x5d, 0x9f, 0xeb, 0x29, 0x72, 0xb0, + 0x00, 0xc3, 0x9b, 0x58, 0x2b, 0xe8, 0xb0, 0x73, 0x56, 0x95, 0xcd, 0x0e, 0x7d, 0xbe, 0xe6, + 0x25, 0xac, 0x6f, 0x37, 0xf4, 0x87, 0x44, 0x1c, 0xdf, 0xfa, 0x39, 0x61, 0xa2, 0xd1, 0x12, + 0x4a, 0x89, 0x45, 0x86, 0xde, 0x1d, 0x6e, 0xad, 0xf5, 0x36, 0x13, 0xd0, 0x88, 0x4b, 0x38, + 0xfb, 0xa3, 0x60, 0xe9, 0x2a, 0x72, 0xb1, 0xc2, 0x01, 0x59, 0x9a, 0xbf, 0x7c, 0x24, 0xe7, + 0x94, 0x57, 0x0f, 0xcc, 0x8a, 0x49, 0x11, 0xd2, 0xa1, 0x62, 0x3a, 0xf9, 0xdc, 0x1f, 0x47, + 0x84, 0xf7, 0x34, 0x6c, 0xaf, 0x26, 0xe5, 0xbd, 0x7e, 0x0d, 0xce, 0x96, 0x55, 0x70, 0xb3, + 0xeb, 0x28, 0x5b, 0x98, 0xc0, 0x03, 0xcf, 0x0c, 0x54, 0x97, 0xe4, 0x27, 0x7f, 0xbc, 0x99, + 0x5a, 0x02, 0xc1, 0xb2, 0x71, 0x29, 0xea, 0x63, 0xa0, 0xf8, 0x3b, 0x48, 0x8b, 0xd3, 0x10, + 0x35, 0xf6, 0xae, 0x6d, 0x1e, 0xdd, 0x85, 0x46, 0x09, 0xca, 0x92, 0x51, 0x22, 0xe1, 0xb9, + 0x7a, 0x5f, 0x9c, 0xc4, 0x07, 0x74, 0xb7, 0xef, 0x2c, 0xa5, 0x66, 0x3e, 0xfd, 0x8e, 0x4d, + 0x15, 0xd6, 0xf3, 0x30, 0x68, 0xab, 0xd8, 0x1b, 0x43, 0x80, 0x4c, 0x8f, 0xd7, 0x14, 0x67, + 0xa4, 0xfc, 0x3f, 0x1a, 0xd9, 0x81, 0x42, 0x31, 0xf2, 0xaa, 0x69, 0xe0, 0x23, 0x7b, 0xb8, + 0xcb, 0x08, 0x50, 0x93, 0xb6, 0x75, 0x2d, 0xee, 0x9d, 0x5e, 0x06, 0xc5, 0x83, 0x40, 0x18, + 0xdb, 0xa8, 0x6b, 0x33, 0xf0, 0xd5, 0x16, 0x4e, 0x8d, 0xfe, 0x3d, 0x65, 0xa6, 0x2f, 0xec, + 0xb4, 0x77, 0x04, 0xc7, 0x9f, 0x5c, 0x79, 0xba, 0xe2, 0x21, 0x52, 0x91, 0xc9, 0x0a, 0xc6, + 0x05, 0x5d, 0x9e, 0xed, 0x2e, 0x76, 0xb5, 0x90, 0x53, 0x0b, 0xc8, 0xbb, 0x78, 0x20, 0xe3, + 0x6a, 0xa9, 0xf1, 0x32, 0x41, 0x82, 0xda, 0x19, 0x3c, 0xff, 0xa7, 0x64, 0x17, 0xd4, 0x8c, + 0x4f, 0x00, 0xc4, 0x95, 0x51, 0x37, 0xf3, 0xa2, 0x66, 0x6e, 0xaa, 0xfb, 0x3f, 0x59, 0x9d, + 0xcc, 0x08, 0xdc, 0x18, 0x49, 0x8d, 0xeb, 0x2f, 0x7e, 0xba, 0xb2, 0x76, 0x27, 0xe3, 0x85, + 0x41, 0x10, 0xd4, 0xa5, 0x61, 0x30, 0xf4, 0x92, 0x56, 0x07, 0xc3, 0xcb, 0x0f, 0x5e, 0x9a, + 0xfc, 0x38, 0x69, 0xad, 0x79, 0xbd, 0xec, 0x28, 0x4e, 0x8a, 0xdb, 0x1f, 0x17, 0xd3, 0x82, + 0x46, 0x20, 0xe4, 0xb5, 0x71, 0x57, 0x93, 0xc2, 0x06, 0x60, 0xa4, 0xf5, 0x31, 0x39, 0xfd, + 0xac, 0x68, 0x0e, 0xca, 0x9b, 0x5f, 0x8b, 0x4f, 0x1e, 0xda, 0xbc, 0x78, 0x29, 0xed, 0xe5, + 0x21, 0x70, 0xb4, 0xd2, 0x16, 0x47, 0x83, 0xf2, 0x36, 0x67, 0xa3, 0xc5, 0x01, 0x50, 0x94, + 0x9c, 0x58, 0x09, 0xcd, 0xab, 0x6f, 0x3e, 0xfa, 0x2e, 0xea, 0xbb, 0x7f, 0x19, 0xdd, 0x8c, + 0x48, 0x40, 0x84, 0xd5, 0x11, 0x77, 0xb3, 0xe2, 0x26, 0xae, 0x6a, 0x3b, 0xff, 0x99, 0x5d, + 0x0c, 0xc8, 0xc0, 0x04, 0x55, 0x91, 0xf7, 0x33, 0x62, 0xa6, 0x72, 0xb6, 0xe7, 0x23, 0x45, + 0x81, 0xd0, 0x14, 0x1c, 0xd8, 0x89, 0x4d, 0x2b, 0xef, 0xbe, 0x7a, 0x0b, 0xcf, 0x9e, 0x5a, + 0x3c, 0xf8, 0xa9, 0x6d, 0x65, 0xa1, 0xf0, 0x34, 0x52, 0x96, 0xc7, 0x03, 0xd7, 0x13, 0x42, + 0x86, 0xe0, 0x24, 0x75, 0xb1, 0xb9, 0x7d, 0x2c, 0xe8, 0x8e, 0x4a, 0x1b, 0xdf, 0xf9, 0x3d, + 0x6c, 0xa8, 0xce, 0x0a, 0x5b, 0x9f, 0x97, 0x53, 0x02, 0xc6, 0xa0, 0x64, 0x35, 0xf1, 0x25, + 0xe1, 0xb0, 0x74, 0x12, 0xd6, 0x87, 0x43, 0x4b, 0x8f, 0xde, 0x1a, 0x7c, 0xb8, 0xe9, 0x2d, + 0x5c, 0x98, 0xc9, 0x0d, 0x6b, 0xaf, 0xfe, 0x3a, 0x32, 0xf6, 0xa7, 0x63, 0x05, 0xc1, 0x90, + 0x54, 0x80, 0x44, 0x15, 0xd1, 0xb7, 0x73, 0x22, 0xe6, 0xee, 0x2a, 0x7b, 0xbf, 0xd9, 0x1d, + 0x4c, 0x88, 0x00, 0xc5, 0x97, 0x52, 0x33, 0xf6, 0xa4, 0x61, 0x66, 0xa3, 0xf1, 0x34, 0x55, + 0x90, 0xc2, 0x07, 0xcc, 0x09, 0x5b, 0x9e, 0xff, 0x3a, 0x68, 0xad, 0xaa, 0x6f, 0x3d, 0xf8, + 0x99, 0x5c, 0x0e, 0xcb, 0x85, 0x40, 0x12, 0xd7, 0xb6, 0x73, 0x21, 0xe4, 0xe3, 0x26, 0x74, + 0xb1, 0xd0, 0x15, 0x47, 0x82, 0x49, 0x8c, 0xde, 0x1b, 0x7a, 0xbf, 0xed, 0x28, 0x2f, 0xea, + 0xb8, 0x7d, 0x1c, 0xd9, 0x8b, 0x4e, 0x17, 0xd2, 0x80, 0x45, 0x24, 0xe1, 0xb3, 0x76, 0x71, + 0xb4, 0xe6, 0x23, 0x42, 0x87, 0xd5, 0x10, 0xdb, 0x1e, 0x4c, 0x89, 0xe8, 0x2d, 0x7f, 0xba, + 0xbd, 0x78, 0x2a, 0xef, 0x8e, 0x4b, 0x19, 0xdc, 0x92, 0x57, 0x05, 0xc0, 0xa1, 0x64, 0x36, + 0xf3, 0xf4, 0x31, 0x63, 0xa6, 0xc7, 0x02, 0x50, 0x95, 0x5e, 0x9b, 0xc9, 0x0c, 0x6d, 0xa8, + 0xfa, 0x3f, 0x38, 0xfd, 0xaf, 0x6a, 0x0b, 0xce, 0x9c, 0x59, 0x2e, 0xeb, 0xb9, 0x7c, 0x1d, + 0xd8, 0x8a, 0x4f, 0x48, 0x8d, 0xdf, 0x1a, 0x7b, 0xbe, 0xec, 0x29, 0xe2, 0x27, 0x75, 0xb0, + 0xd1, 0x14, 0x46, 0x83, 0x84, 0x41, 0x13, 0xd6, 0xb7, 0x72, 0x20, 0xe5, 0xab, 0x6e, 0x3c, + 0xf9, 0x98, 0x5d, 0x0f, 0xca, 0xcd, 0x08, 0x5a, 0x9f, 0xfe, 0x3b, 0x69, 0xac, 0x67, 0xa2, + 0xf0, 0x35, 0x54, 0x91, 0xc3, 0x06, 0x01, 0xc4, 0x96, 0x53, 0x32, 0xf7, 0xa5, 0x60, 0x39, + 0xfc, 0xae, 0x6b, 0x0a, 0xcf, 0x9d, 0x58, 0x5f, 0x9a, 0xc8, 0x0d, 0x6c, 0xa9, 0xfb, 0x3e, + 0xf5, 0x30, 0x62, 0xa7, 0xc6, 0x03, 0x51, 0x94, 0x93, 0x56, 0x04, 0xc1, 0xa0, 0x65, 0x37, + 0xf2, 0xbc, 0x79, 0x2b, 0xee, 0x8f, 0x4a, 0x18, 0xdd, 0xda, 0x1f, 0x4d, 0x88, 0xe9, 0x2c, + 0x7e, 0xbb, 0x70, 0xb5, 0xe7, 0x22, 0x43, 0x86, 0xd4, 0x11, 0x16, 0xd3, 0x81, 0x44, 0x25, + 0xe0, 0xb2, 0x77, 0x00, 0xc6, 0x91, 0x57, 0x3f, 0xf9, 0xae, 0x68, 0x7e, 0xb8, 0xef, 0x29, + 0x41, 0x87, 0xd0, 0x16, 0xfc, 0x3a, 0x6d, 0xab, 0xc3, 0x05, 0x52, 0x94, 0x82, 0x44, 0x13, + 0xd5, 0xbd, 0x7b, 0x2c, 0xea, 0xe5, 0x23, 0x74, 0xb2, 0xda, 0x1c, 0x4b, 0x8d, 0x9b, 0x5d, + 0x0a, 0xcc, 0xa4, 0x62, 0x35, 0xf3, 0x19, 0xdf, 0x88, 0x4e, 0x26, 0xe0, 0xb7, 0x71, 0x67, + 0xa1, 0xf6, 0x30, 0x58, 0x9e, 0xc9, 0x0f, 0xd7, 0x11, 0x46, 0x80, 0xe8, 0x2e, 0x79, 0xbf, + 0xa9, 0x6f, 0x38, 0xfe, 0x96, 0x50, 0x07, 0xc1, 0x2b, 0xed, 0xba, 0x7c, 0x14, 0xd2, 0x85, + 0x43, 0x55, 0x93, 0xc4, 0x02, 0x6a, 0xac, 0xfb, 0x3d, 0x32, 0xf4, 0xa3, 0x65, 0x0d, 0xcb, + 0x9c, 0x5a, 0x4c, 0x8a, 0xdd, 0x1b, 0x73, 0xb5, 0xe2, 0x24, 0xce, 0x08, 0x5f, 0x99, 0xf1, + 0x37, 0x60, 0xa6, 0xb0, 0x76, 0x21, 0xe7, 0x8f, 0x49, 0x1e, 0xd8, 0xb3, 0x75, 0x22, 0xe4, + 0x8c, 0x4a, 0x1d, 0xdb, 0xcd, 0x0b, 0x5c, 0x9a, 0xf2, 0x34, 0x63, 0xa5, 0x4f, 0x89, 0xde, + 0x18, 0x70, 0xb6, 0xe1, 0x27, 0x31, 0xf7, 0xa0, 0x66, 0x0e, 0xc8, 0x9f, 0x59, 0x56, 0x90, + 0xc7, 0x01, 0x69, 0xaf, 0xf8, 0x3e, 0x28, 0xee, 0xb9, 0x7f, 0x17, 0xd1, 0x86, 0x40, 0xaa, + 0x6c, 0x3b, 0xfd, 0x95, 0x53, 0x04, 0xc2, 0xd4, 0x12, 0x45, 0x83, 0xeb, 0x2d, 0x7a, 0xbc, + 0x64, 0xa2, 0xf5, 0x33, 0x5b, 0x9d, 0xca, 0x0c, 0x1a, 0xdc, 0x8b, 0x4d, 0x25, 0xe3, 0xb4, + 0x72, 0x98, 0x5e, 0x09, 0xcf, 0xa7, 0x61, 0x36, 0xf0, 0xe6, 0x20, 0x77, 0xb1, 0xd9, 0x1f, + 0x48, 0x8e, 0x81, 0x47, 0x10, 0xd6, 0xbe, 0x78, 0x2f, 0xe9, 0xff, 0x39, 0x6e, 0xa8, 0xc0, + 0x06, 0x51, 0x97, 0x7d, 0xbb, 0xec, 0x2a, 0x42, 0x84, 0xd3, 0x15, 0x03, 0xc5, 0x92, 0x54, + 0x3c, 0xfa, 0xad, 0x6b, 0x00, 0xc7, 0x93, 0x54, 0x3b, 0xfc, 0xa8, 0x6f, 0x76, 0xb1, 0xe5, + 0x22, 0x4d, 0x8a, 0xde, 0x19, 0xec, 0x2b, 0x7f, 0xb8, 0xd7, 0x10, 0x44, 0x83, 0x9a, 0x5d, + 0x09, 0xce, 0xa1, 0x66, 0x32, 0xf5, 0xc5, 0x02, 0x56, 0x91, 0xfe, 0x39, 0x6d, 0xaa, 0xb3, + 0x74, 0x20, 0xe7, 0x88, 0x4f, 0x1b, 0xdc, 0x29, 0xee, 0xba, 0x7d, 0x12, 0xd5, 0x81, 0x46, + 0x5f, 0x98, 0xcc, 0x0b, 0x64, 0xa3, 0xf7, 0x30, 0x97, 0x50, 0x04, 0xc3, 0xac, 0x6b, 0x3f, + 0xf8, 0xe1, 0x26, 0x72, 0xb5, 0xda, 0x1d, 0x49, 0x8e, 0x7b, 0xbc, 0xe8, 0x2f, 0x40, 0x87, + 0xd3, 0x14, 0x0d, 0xca, 0x9e, 0x59, 0x36, 0xf1, 0xa5, 0x62, 0x52, 0x95, 0xc1, 0x06, 0x69, + 0xae, 0xfa, 0x3d, 0x24, 0xe3, 0xb7, 0x70, 0x1f, 0xd8, 0x8c, 0x4b, 0xbe, 0x79, 0x2d, 0xea, + 0x85, 0x42, 0x16, 0xd1, 0xc8, 0x0f, 0x5b, 0x9c, 0xf3, 0x34, 0x60, 0xa7, 0x33, 0xf4, 0xa0, + 0x67, 0x08, 0xcf, 0x9b, 0x5c, 0x45, 0x82, 0xd6, 0x11, 0x7e, 0xb9, 0xed, 0x2a, 0xdf, 0x18, + 0x4c, 0x8b, 0xe4, 0x23, 0x77, 0xb0, 0xa9, 0x6e, 0x3a, 0xfd, 0x92, 0x55, 0x01, 0xc6, 0xf6, + 0x31, 0x65, 0xa2, 0xcd, 0x0a, 0x5e, 0x99, 0x80, 0x47, 0x13, 0xd4, 0xbb, 0x7c, 0x28, 0xef, + 0x1a, 0xdd, 0x89, 0x4e, 0x21, 0xe6, 0xb2, 0x75, 0x6c, 0xab, 0xff, 0x38, 0x57, 0x90, 0xc4, + 0x03, 0xa4, 0x63, 0x37, 0xf0, 0x9f, 0x58, 0x0c, 0xcb, 0xd2, 0x15, 0x41, 0x86, 0xe9, 0x2e, + 0x7a, 0xbd, 0x48, 0x8f, 0xdb, 0x1c, 0x73, 0xb4, 0xe0, 0x27, 0x3e, 0xf9, 0xad, 0x6a, 0x05, + 0xc2, 0x96, 0x51, 0x61, 0xa6, 0xf2, 0x35, 0x5a, 0x9d, 0xc9, 0x0e, 0x17, 0xd0, 0x84, 0x43, + 0x2c, 0xeb, 0xbf, 0x78, 0x8d, 0x4a, 0x1e, 0xd9, 0xb6, 0x71, 0x25, 0xe2, 0xfb, 0x3c, 0x68, + 0xaf, 0xc0, 0x07, 0x53, 0x94, 0x00, 0xc8, 0x8d, 0x45, 0x07, 0xcf, 0x8a, 0x42, 0x0e, 0xc6, + 0x83, 0x4b, 0x09, 0xc1, 0x84, 0x4c, 0x1c, 0xd4, 0x91, 0x59, 0x1b, 0xd3, 0x96, 0x5e, 0x12, + 0xda, 0x9f, 0x57, 0x15, 0xdd, 0x98, 0x50, 0x38, 0xf0, 0xb5, 0x7d, 0x3f, 0xf7, 0xb2, 0x7a, + 0x36, 0xfe, 0xbb, 0x73, 0x31, 0xf9, 0xbc, 0x74, 0x24, 0xec, 0xa9, 0x61, 0x23, 0xeb, 0xae, + 0x66, 0x2a, 0xe2, 0xa7, 0x6f, 0x2d, 0xe5, 0xa0, 0x68, 0x70, 0xb8, 0xfd, 0x35, 0x77, 0xbf, + 0xfa, 0x32, 0x7e, 0xb6, 0xf3, 0x3b, 0x79, 0xb1, 0xf4, 0x3c, 0x6c, 0xa4, 0xe1, 0x29, 0x6b, + 0xa3, 0xe6, 0x2e, 0x62, 0xaa, 0xef, 0x27, 0x65, 0xad, 0xe8, 0x20, 0x48, 0x80, 0xc5, 0x0d, + 0x4f, 0x87, 0xc2, 0x0a, 0x46, 0x8e, 0xcb, 0x03, 0x41, 0x89, 0xcc, 0x04, 0x54, 0x9c, 0xd9, + 0x11, 0x53, 0x9b, 0xde, 0x16, 0x5a, 0x92, 0xd7, 0x1f, 0x5d, 0x95, 0xd0, 0x18, 0xe0, 0x28, + 0x6d, 0xa5, 0xe7, 0x2f, 0x6a, 0xa2, 0xee, 0x26, 0x63, 0xab, 0xe9, 0x21, 0x64, 0xac, 0xfc, + 0x34, 0x71, 0xb9, 0xfb, 0x33, 0x76, 0xbe, 0xf2, 0x3a, 0x7f, 0xb7, 0xf5, 0x3d, 0x78, 0xb0, + 0xd8, 0x10, 0x55, 0x9d, 0xdf, 0x17, 0x52, 0x9a, 0xd6, 0x1e, 0x5b, 0x93, 0xd1, 0x19, 0x5c, + 0x94, 0xc4, 0x0c, 0x49, 0x81, 0xc3, 0x0b, 0x4e, 0x86, 0xca, 0x02, 0x47, 0x8f, 0xcd, 0x05, + 0x40, 0x88, 0x90, 0x58, 0x1d, 0xd5, 0x97, 0x5f, 0x1a, 0xd2, 0x9e, 0x56, 0x13, 0xdb, 0x99, + 0x51, 0x14, 0xdc, 0x8c, 0x44, 0x01, 0xc9, 0x8b, 0x43, 0x06, 0xce, 0x82, 0x4a, 0x0f, 0xc7, + 0x85, 0x4d, 0x08, 0xc0, 0xa8, 0x60, 0x25, 0xed, 0xaf, 0x67, 0x22, 0xea, 0xa6, 0x6e, 0x2b, + 0xe3, 0xa1, 0x69, 0x2c, 0xe4, 0xb4, 0x7c, 0x39, 0xf1, 0xb3, 0x7b, 0x3e, 0xf6, 0xba, 0x72, + 0x37, 0xff, 0xbd, 0x75, 0x30, 0xf8, 0x00, 0xc9, 0x8f, 0x46, 0x03, 0xca, 0x8c, 0x45, 0x06, + 0xcf, 0x89, 0x40, 0x05, 0xcc, 0x8a, 0x43, 0x0c, 0xc5, 0x83, 0x4a, 0x0f, 0xc6, 0x80, 0x49, + 0x0a, 0xc3, 0x85, 0x4c, 0x09, 0xc0, 0x86, 0x4f, 0x18, 0xd1, 0x97, 0x5e, 0x1b, 0xd2, 0x94, + 0x5d, 0x1e, 0xd7, 0x91, 0x58, 0x1d, 0xd4, 0x92, 0x5b, 0x14, 0xdd, 0x9b, 0x52, 0x17, 0xde, + 0x98, 0x51, 0x12, 0xdb, 0x9d, 0x54, 0x11, 0xd8, 0x9e, 0x57, 0x30, 0xf9, 0xbf, 0x76, 0x33, + 0xfa, 0xbc, 0x75, 0x36, 0xff, 0xb9, 0x70, 0x35, 0xfc, 0xba, 0x73, 0x3c, 0xf5, 0xb3, 0x7a, + 0x3f, 0xf6, 0xb0, 0x79, 0x3a, 0xf3, 0xb5, 0x7c, 0x39, 0xf0, 0xb6, 0x7f, 0x28, 0xe1, 0xa7, + 0x6e, 0x2b, 0xe2, 0xa4, 0x6d, 0x2e, 0xe7, 0xa1, 0x68, 0x2d, 0xe4, 0xa2, 0x6b, 0x24, 0xed, + 0xab, 0x62, 0x27, 0xee, 0xa8, 0x61, 0x22, 0xeb, 0xad, 0x64, 0x21, 0xe8, 0xae, 0x67, 0x60, + 0xa9, 0xef, 0x26, 0x63, 0xaa, 0xec, 0x25, 0x66, 0xaf, 0xe9, 0x20, 0x65, 0xac, 0xea, 0x23, + 0x6c, 0xa5, 0xe3, 0x2a, 0x6f, 0xa6, 0xe0, 0x29, 0x6a, 0xa3, 0xe5, 0x2c, 0x69, 0xa0, 0xe6, + 0x2f, 0x78, 0xb1, 0xf7, 0x3e, 0x7b, 0xb2, 0xf4, 0x3d, 0x7e, 0xb7, 0xf1, 0x38, 0x7d, 0xb4, + 0xf2, 0x3b, 0x74, 0xbd, 0xfb, 0x32, 0x77, 0xbe, 0xf8, 0x31, 0x72, 0xbb, 0xfd, 0x34, 0x71, + 0xb8, 0xfe, 0x37, 0x50, 0x99, 0xdf, 0x16, 0x53, 0x9a, 0xdc, 0x15, 0x56, 0x9f, 0xd9, 0x10, + 0x55, 0x9c, 0xda, 0x13, 0x5c, 0x95, 0xd3, 0x1a, 0x5f, 0x96, 0xd0, 0x19, 0x5a, 0x93, 0xd5, + 0x1c, 0x59, 0x90, 0xd6, 0x1f, 0x48, 0x81, 0xc7, 0x0e, 0x4b, 0x82, 0xc4, 0x0d, 0x4e, 0x87, + 0xc1, 0x08, 0x4d, 0x84, 0xc2, 0x0b, 0x44, 0x8d, 0xcb, 0x02, 0x47, 0x8e, 0xc8, 0x01, 0x42, + 0x8b, 0xcd, 0x04, 0x41, 0x88, 0xce, 0x07, 0x00, 0xca, 0x89, 0x43, 0x0f, 0xc5, 0x86, 0x4c, + 0x1e, 0xd4, 0x97, 0x5d, 0x11, 0xdb, 0x98, 0x52, 0x3c, 0xf6, 0xb5, 0x7f, 0x33, 0xf9, 0xba, + 0x70, 0x22, 0xe8, 0xab, 0x61, 0x2d, 0xe7, 0xa4, 0x6e, 0x78, 0xb2, 0xf1, 0x3b, 0x77, 0xbd, + 0xfe, 0x34, 0x66, 0xac, 0xef, 0x25, 0x69, 0xa3, 0xe0, 0x2a, 0x44, 0x8e, 0xcd, 0x07, 0x4b, + 0x81, 0xc2, 0x08, 0x5a, 0x90, 0xd3, 0x19, 0x55, 0x9f, 0xdc, 0x16, 0xf0, 0x3a, 0x79, 0xb3, + 0xff, 0x35, 0x76, 0xbc, 0xee, 0x24, 0x67, 0xad, 0xe1, 0x2b, 0x68, 0xa2, 0xcc, 0x06, 0x45, + 0x8f, 0xc3, 0x09, 0x4a, 0x80, 0xd2, 0x18, 0x5b, 0x91, 0xdd, 0x17, 0x54, 0x9e, 0x88, 0x42, + 0x01, 0xcb, 0x87, 0x4d, 0x0e, 0xc4, 0x96, 0x5c, 0x1f, 0xd5, 0x99, 0x53, 0x10, 0xda, 0xb4, + 0x7e, 0x3d, 0xf7, 0xbb, 0x71, 0x32, 0xf8, 0xaa, 0x60, 0x23, 0xe9, 0xa5, 0x6f, 0x2c, 0xe6, + 0xfd, 0x37, 0x74, 0xbe, 0xf2, 0x38, 0x7b, 0xb1, 0xe3, 0x29, 0x6a, 0xa0, 0xec, 0x26, 0x65, + 0xaf, 0xc1, 0x0b, 0x48, 0x82, 0xce, 0x04, 0x47, 0x8d, 0xdf, 0x15, 0x56, 0x9c, 0xd0, 0x1a, + 0x59, 0x93, 0x85, 0x4f, 0x0c, 0xc6, 0x8a, 0x40, 0x03, 0xc9, 0x9b, 0x51, 0x12, 0xd8, 0x94, + 0x5e, 0x1d, 0xd7, 0xb9, 0x73, 0x30, 0xfa, 0xb6, 0x7c, 0x3f, 0xf5, 0xa7, 0x6d, 0x2e, 0xe4, + 0xa8, 0x62, 0x21, 0xeb, 0x0d, 0xc7, 0x84, 0x4e, 0x02, 0xc8, 0x8b, 0x41, 0x13, 0xd9, 0x9a, + 0x50, 0x1c, 0xd6, 0x95, 0x5f, 0x31, 0xfb, 0xb8, 0x72, 0x3e, 0xf4, 0xb7, 0x7d, 0x2f, 0xe5, + 0xa6, 0x6c, 0x20, 0xea, 0xa9, 0x63, 0x75, 0xbf, 0xfc, 0x36, 0x7a, 0xb0, 0xf3, 0x39, 0x6b, + 0xa1, 0xe2, 0x28, 0x64, 0xae, 0xed, 0x27, 0x49, 0x83, 0xc0, 0x0a, 0x46, 0x8c, 0xcf, 0x05, + 0x57, 0x9d, 0xde, 0x14, 0x58, 0x92, 0xd1, 0x1b, 0x00, 0xcb, 0x8b, 0x40, 0x0b, 0xc0, 0x80, + 0x4b, 0x16, 0xdd, 0x9d, 0x56, 0x1d, 0xd6, 0x96, 0x5d, 0x2c, 0xe7, 0xa7, 0x6c, 0x27, 0xec, + 0xac, 0x67, 0x3a, 0xf1, 0xb1, 0x7a, 0x31, 0xfa, 0xba, 0x71, 0x58, 0x93, 0xd3, 0x18, 0x53, + 0x98, 0xd8, 0x13, 0x4e, 0x85, 0xc5, 0x0e, 0x45, 0x8e, 0xce, 0x05, 0x74, 0xbf, 0xff, 0x34, + 0x7f, 0xb4, 0xf4, 0x3f, 0x62, 0xa9, 0xe9, 0x22, 0x69, 0xa2, 0xe2, 0x29, 0xb0, 0x7b, 0x3b, + 0xf0, 0xbb, 0x70, 0x30, 0xfb, 0xa6, 0x6d, 0x2d, 0xe6, 0xad, 0x66, 0x26, 0xed, 0x9c, 0x57, + 0x17, 0xdc, 0x97, 0x5c, 0x1c, 0xd7, 0x8a, 0x41, 0x01, 0xca, 0x81, 0x4a, 0x0a, 0xc1, 0xe8, + 0x23, 0x63, 0xa8, 0xe3, 0x28, 0x68, 0xa3, 0xfe, 0x35, 0x75, 0xbe, 0xf5, 0x3e, 0x7e, 0xb5, + 0xc4, 0x0f, 0x4f, 0x84, 0xcf, 0x04, 0x44, 0x8f, 0xd2, 0x19, 0x59, 0x92, 0xd9, 0x12, 0x52, + 0x99, 0x7d, 0xb6, 0xf6, 0x3d, 0x76, 0xbd, 0xfd, 0x36, 0x6b, 0xa0, 0xe0, 0x2b, 0x60, 0xab, + 0xeb, 0x20, 0x51, 0x9a, 0xda, 0x11, 0x5a, 0x91, 0xd1, 0x1a, 0x47, 0x8c, 0xcc, 0x07, 0x4c, + 0x87, 0xc7, 0x0c, 0x25, 0xee, 0xae, 0x65, 0x2e, 0xe5, 0xa5, 0x6e, 0x33, 0xf8, 0xb8, 0x73, + 0x38, 0xf3, 0xb3, 0x78, 0x09, 0xc2, 0x82, 0x49, 0x02, 0xc9, 0x89, 0x42, 0x1f, 0xd4, 0x94, + 0x5f, 0x14, 0xdf, 0x9f, 0x54, 0xcd, 0x06, 0x46, 0x8d, 0xc6, 0x0d, 0x4d, 0x86, 0xdb, 0x10, + 0x50, 0x9b, 0xd0, 0x1b, 0x5b, 0x90, 0xe1, 0x2a, 0x6a, 0xa1, 0xea, 0x21, 0x61, 0xaa, 0xf7, + 0x3c, 0x7c, 0xb7, 0xfc, 0x37, 0x77, 0xbc, 0x95, 0x5e, 0x1e, 0xd5, 0x9e, 0x55, 0x15, 0xde, + 0x83, 0x48, 0x08, 0xc3, 0x88, 0x43, 0x03, 0xc8, 0xb9, 0x72, 0x32, 0xf9, 0xb2, 0x79, 0x39, + 0xf2, 0xaf, 0x64, 0x24, 0xef, 0xa4, 0x6f, 0x2f, 0xe4, 0x00, 0xcc, 0x85, 0x49, 0x17, 0xdb, + 0x92, 0x5e, 0x2e, 0xe2, 0xab, 0x67, 0x39, 0xf5, 0xbc, 0x70, 0x5c, 0x90, 0xd9, 0x15, 0x4b, + 0x87, 0xce, 0x02, 0x72, 0xbe, 0xf7, 0x3b, 0x65, 0xa9, 0xe0, 0x2c, 0xb8, 0x74, 0x3d, 0xf1, + 0xaf, 0x63, 0x2a, 0xe6, 0x96, 0x5a, 0x13, 0xdf, 0x81, 0x4d, 0x04, 0xc8, 0xe4, 0x28, 0x61, + 0xad, 0xf3, 0x3f, 0x76, 0xba, 0xca, 0x06, 0x4f, 0x83, 0xdd, 0x11, 0x58, 0x94, 0x6d, 0xa1, + 0xe8, 0x24, 0x7a, 0xb6, 0xff, 0x33, 0x43, 0x8f, 0xc6, 0x0a, 0x54, 0x98, 0xd1, 0x1d, 0x31, + 0xfd, 0xb4, 0x78, 0x26, 0xea, 0xa3, 0x6f, 0x1f, 0xd3, 0x9a, 0x56, 0x08, 0xc4, 0x8d, 0x41, + 0xd5, 0x19, 0x50, 0x9c, 0xc2, 0x0e, 0x47, 0x8b, 0xfb, 0x37, 0x7e, 0xb2, 0xec, 0x20, 0x69, + 0xa5, 0x89, 0x45, 0x0c, 0xc0, 0x9e, 0x52, 0x1b, 0xd7, 0xa7, 0x6b, 0x22, 0xee, 0xb0, 0x7c, + 0x35, 0xf9, 0xda, 0x16, 0x5f, 0x93, 0xcd, 0x01, 0x48, 0x84, 0xf4, 0x38, 0x71, 0xbd, 0xe3, + 0x2f, 0x66, 0xaa, 0x86, 0x4a, 0x03, 0xcf, 0x91, 0x5d, 0x14, 0xd8, 0xa8, 0x64, 0x2d, 0xe1, + 0xbf, 0x73, 0x3a, 0xf6, 0x62, 0xae, 0xe7, 0x2b, 0x75, 0xb9, 0xf0, 0x3c, 0x4c, 0x80, 0xc9, + 0x05, 0x5b, 0x97, 0xde, 0x12, 0x3e, 0xf2, 0xbb, 0x77, 0x29, 0xe5, 0xac, 0x60, 0x10, 0xdc, + 0x95, 0x59, 0x07, 0xcb, 0x82, 0x4e, 0xb7, 0x7b, 0x32, 0xfe, 0xa0, 0x6c, 0x25, 0xe9, 0x99, + 0x55, 0x1c, 0xd0, 0x8e, 0x42, 0x0b, 0xc7, 0xeb, 0x27, 0x6e, 0xa2, 0xfc, 0x30, 0x79, 0xb5, + 0xc5, 0x09, 0x40, 0x8c, 0xd2, 0x1e, 0x57, 0x9b, 0x0f, 0xc3, 0x8a, 0x46, 0x18, 0xd4, 0x9d, + 0x51, 0x21, 0xed, 0xa4, 0x68, 0x36, 0xfa, 0xb3, 0x7f, 0x53, 0x9f, 0xd6, 0x1a, 0x44, 0x88, + 0xc1, 0x0d, 0x7d, 0xb1, 0xf8, 0x34, 0x6a, 0xa6, 0xef, 0x23, 0x00, 0xcd, 0x87, 0x4a, 0x13, + 0xde, 0x94, 0x59, 0x26, 0xeb, 0xa1, 0x6c, 0x35, 0xf8, 0xb2, 0x7f, 0x4c, 0x81, 0xcb, 0x06, + 0x5f, 0x92, 0xd8, 0x15, 0x6a, 0xa7, 0xed, 0x20, 0x79, 0xb4, 0xfe, 0x33, 0x98, 0x55, 0x1f, + 0xd2, 0x8b, 0x46, 0x0c, 0xc1, 0xbe, 0x73, 0x39, 0xf4, 0xad, 0x60, 0x2a, 0xe7, 0xd4, 0x19, + 0x53, 0x9e, 0xc7, 0x0a, 0x40, 0x8d, 0xf2, 0x3f, 0x75, 0xb8, 0xe1, 0x2c, 0x66, 0xab, 0x2d, + 0xe0, 0xaa, 0x67, 0x3e, 0xf3, 0xb9, 0x74, 0x0b, 0xc6, 0x8c, 0x41, 0x18, 0xd5, 0x9f, 0x52, + 0x61, 0xac, 0xe6, 0x2b, 0x72, 0xbf, 0xf5, 0x38, 0x47, 0x8a, 0xc0, 0x0d, 0x54, 0x99, 0xd3, + 0x1e, 0xb5, 0x78, 0x32, 0xff, 0xa6, 0x6b, 0x21, 0xec, 0x93, 0x5e, 0x14, 0xd9, 0x80, 0x4d, + 0x07, 0xca, 0xf9, 0x34, 0x7e, 0xb3, 0xea, 0x27, 0x6d, 0xa0, 0xdf, 0x12, 0x58, 0x95, 0xcc, + 0x01, 0x4b, 0x86, 0x5a, 0x97, 0xdd, 0x10, 0x49, 0x84, 0xce, 0x03, 0x7c, 0xb1, 0xfb, 0x36, + 0x6f, 0xa2, 0xe8, 0x25, 0x16, 0xdb, 0x91, 0x5c, 0x05, 0xc8, 0x82, 0x4f, 0x30, 0xfd, 0xb7, + 0x7a, 0x23, 0xee, 0xa4, 0x69, 0xc2, 0x0f, 0x45, 0x88, 0xd1, 0x1c, 0x56, 0x9b, 0xe4, 0x29, + 0x63, 0xae, 0xf7, 0x3a, 0x70, 0xbd, 0x8e, 0x43, 0x09, 0xc4, 0x9d, 0x50, 0x1a, 0xd7, 0xa8, + 0x65, 0x2f, 0xe2, 0xbb, 0x76, 0x3c, 0xf1, 0x77, 0xba, 0xf0, 0x3d, 0x64, 0xa9, 0xe3, 0x2e, + 0x51, 0x9c, 0xd6, 0x1b, 0x42, 0x8f, 0xc5, 0x08, 0x3b, 0xf6, 0xbc, 0x71, 0x28, 0xe5, 0xaf, + 0x62, 0x1d, 0xd0, 0x9a, 0x57, 0x0e, 0xc3, 0x89, 0x44, 0xef, 0x22, 0x68, 0xa5, 0xfc, 0x31, + 0x7b, 0xb6, 0xc9, 0x04, 0x4e, 0x83, 0xda, 0x17, 0x5d, 0x90, 0xa3, 0x6e, 0x24, 0xe9, 0xb0, + 0x7d, 0x37, 0xfa, 0x85, 0x48, 0x02, 0xcf, 0x96, 0x5b, 0x11, 0xdc, 0x00, 0xce, 0x81, 0x4f, + 0x1f, 0xd1, 0x9e, 0x50, 0x3e, 0xf0, 0xbf, 0x71, 0x21, 0xef, 0xa0, 0x6e, 0x7c, 0xb2, 0xfd, + 0x33, 0x63, 0xad, 0xe2, 0x2c, 0x42, 0x8c, 0xc3, 0x0d, 0x5d, 0x93, 0xdc, 0x12, 0xf8, 0x36, + 0x79, 0xb7, 0xe7, 0x29, 0x66, 0xa8, 0xc6, 0x08, 0x47, 0x89, 0xd9, 0x17, 0x58, 0x96, 0x84, + 0x4a, 0x05, 0xcb, 0x9b, 0x55, 0x1a, 0xd4, 0xba, 0x74, 0x3b, 0xf5, 0xa5, 0x6b, 0x24, 0xea, + 0xed, 0x23, 0x6c, 0xa2, 0xf2, 0x3c, 0x73, 0xbd, 0xd3, 0x1d, 0x52, 0x9c, 0xcc, 0x02, 0x4d, + 0x83, 0x91, 0x5f, 0x10, 0xde, 0x8e, 0x40, 0x0f, 0xc1, 0xaf, 0x61, 0x2e, 0xe0, 0xb0, 0x7e, + 0x31, 0xff, 0x15, 0xdb, 0x94, 0x5a, 0x0a, 0xc4, 0x8b, 0x45, 0x2b, 0xe5, 0xaa, 0x64, 0x34, + 0xfa, 0xb5, 0x7b, 0x69, 0xa7, 0xe8, 0x26, 0x76, 0xb8, 0xf7, 0x39, 0x57, 0x99, 0xd6, 0x18, + 0x48, 0x86, 0xc9, 0x07, 0xc7, 0x09, 0x46, 0x88, 0xd8, 0x16, 0x59, 0x97, 0xf9, 0x37, 0x78, + 0xb6, 0xe6, 0x28, 0x67, 0xa9, 0xbb, 0x75, 0x3a, 0xf4, 0xa4, 0x6a, 0x25, 0xeb, 0x85, 0x4b, + 0x04, 0xca, 0x9a, 0x54, 0x1b, 0xd5, 0x3f, 0xf1, 0xbe, 0x70, 0x20, 0xee, 0xa1, 0x6f, 0x01, + 0xcf, 0x80, 0x4e, 0x1e, 0xd0, 0x9f, 0x51, 0x43, 0x8d, 0xc2, 0x0c, 0x5c, 0x92, 0xdd, 0x13, + 0x7d, 0xb3, 0xfc, 0x32, 0x62, 0xac, 0xe3, 0x2d, 0x2a, 0xe4, 0xab, 0x65, 0x35, 0xfb, 0xb4, + 0x7a, 0x14, 0xda, 0x95, 0x5b, 0x0b, 0xc5, 0x8a, 0x44, 0x56, 0x98, 0xd7, 0x19, 0x49, 0x87, + 0xc8, 0x06, 0x68, 0xa6, 0xe9, 0x27, 0x77, 0xb9, 0xf6, 0x38, 0xd2, 0x1c, 0x53, 0x9d, 0xcd, + 0x03, 0x4c, 0x82, 0xec, 0x22, 0x6d, 0xa3, 0xf3, 0x3d, 0x72, 0xbc, 0xae, 0x60, 0x2f, 0xe1, + 0xb1, 0x7f, 0x30, 0xfe, 0x90, 0x5e, 0x11, 0xdf, 0x8f, 0x41, 0x0e, 0xc0, 0x00, 0xcf, 0x83, + 0x4c, 0x1b, 0xd4, 0x98, 0x57, 0x36, 0xf9, 0xb5, 0x7a, 0x2d, 0xe2, 0xae, 0x61, 0x6c, 0xa3, + 0xef, 0x20, 0x77, 0xb8, 0xf4, 0x3b, 0x5a, 0x95, 0xd9, 0x16, 0x41, 0x8e, 0xc2, 0x0d, 0xd8, + 0x17, 0x5b, 0x94, 0xc3, 0x0c, 0x40, 0x8f, 0xee, 0x21, 0x6d, 0xa2, 0xf5, 0x3a, 0x76, 0xb9, + 0xb4, 0x7b, 0x37, 0xf8, 0xaf, 0x60, 0x2c, 0xe3, 0x82, 0x4d, 0x01, 0xce, 0x99, 0x56, 0x1a, + 0xd5, 0xad, 0x62, 0x2e, 0xe1, 0xb6, 0x79, 0x35, 0xfa, 0x9b, 0x54, 0x18, 0xd7, 0x80, 0x4f, + 0x03, 0xcc, 0xc1, 0x0e, 0x42, 0x8d, 0xda, 0x15, 0x59, 0x96, 0xf7, 0x38, 0x74, 0xbb, 0xec, + 0x23, 0x6f, 0xa0, 0x75, 0xba, 0xf6, 0x39, 0x6e, 0xa1, 0xed, 0x22, 0x43, 0x8c, 0xc0, 0x0f, + 0x58, 0x97, 0xdb, 0x14, 0x19, 0xd6, 0x9a, 0x55, 0x02, 0xcd, 0x81, 0x4e, 0x2f, 0xe0, 0xac, + 0x63, 0x34, 0xfb, 0xb7, 0x78, 0x47, 0x88, 0xc4, 0x0b, 0x5c, 0x93, 0xdf, 0x10, 0x71, 0xbe, + 0xf2, 0x3d, 0x6a, 0xa5, 0xe9, 0x26, 0x2b, 0xe4, 0xa8, 0x67, 0x30, 0xff, 0xb3, 0x7c, 0x1d, + 0xd2, 0x9e, 0x51, 0x06, 0xc9, 0x85, 0x4a, 0x9f, 0x50, 0x1c, 0xd3, 0x84, 0x4b, 0x07, 0xc8, + 0xa9, 0x66, 0x2a, 0xe5, 0xb2, 0x7d, 0x31, 0xfe, 0xf3, 0x3c, 0x70, 0xbf, 0xe8, 0x27, 0x6b, + 0xa4, 0xc5, 0x0a, 0x46, 0x89, 0xde, 0x11, 0x5d, 0x92, 0xea, 0x25, 0x69, 0xa6, 0xf1, 0x3e, + 0x72, 0xbd, 0xdc, 0x13, 0x5f, 0x90, 0xc7, 0x08, 0x44, 0x8b, 0x86, 0x49, 0x05, 0xca, 0x9d, + 0x52, 0x1e, 0xd1, 0xb0, 0x7f, 0x33, 0xfc, 0xab, 0x64, 0x28, 0xe7, 0x32, 0xfd, 0xb1, 0x7e, + 0x29, 0xe6, 0xaa, 0x65, 0x04, 0xcb, 0x87, 0x48, 0x1f, 0xd0, 0x9c, 0x53, 0x5e, 0x91, 0xdd, + 0x12, 0x45, 0x8a, 0xc6, 0x09, 0x68, 0xa7, 0xeb, 0x24, 0x73, 0xbc, 0xf0, 0x3f, 0x00, 0xd0, + 0xbd, 0x6d, 0x67, 0xb7, 0xda, 0x0a, 0xce, 0x1e, 0x73, 0xa3, 0xa9, 0x79, 0x14, 0xc4, 0x81, + 0x51, 0x3c, 0xec, 0xe6, 0x36, 0x5b, 0x8b, 0x4f, 0x9f, 0xf2, 0x22, 0x28, 0xf8, 0x95, 0x45, + 0x1f, 0xcf, 0xa2, 0x72, 0x78, 0xa8, 0xc5, 0x15, 0xd1, 0x01, 0x6c, 0xbc, 0xb6, 0x66, 0x0b, + 0xdb, 0x9e, 0x4e, 0x23, 0xf3, 0xf9, 0x29, 0x44, 0x94, 0x50, 0x80, 0xed, 0x3d, 0x37, 0xe7, + 0x8a, 0x5a, 0x3e, 0xee, 0x83, 0x53, 0x59, 0x89, 0xe4, 0x34, 0xf0, 0x20, 0x4d, 0x9d, 0x97, + 0x47, 0x2a, 0xfa, 0xbf, 0x6f, 0x02, 0xd2, 0xd8, 0x08, 0x65, 0xb5, 0x71, 0xa1, 0xcc, 0x1c, + 0x16, 0xc6, 0xab, 0x7b, 0x21, 0xf1, 0x9c, 0x4c, 0x46, 0x96, 0xfb, 0x2b, 0xef, 0x3f, 0x52, + 0x82, 0x88, 0x58, 0x35, 0xe5, 0xa0, 0x70, 0x1d, 0xcd, 0xc7, 0x17, 0x7a, 0xaa, 0x6e, 0xbe, + 0xd3, 0x03, 0x09, 0xd9, 0xb4, 0x64, 0x7c, 0xac, 0xc1, 0x11, 0x1b, 0xcb, 0xa6, 0x76, 0xb2, + 0x62, 0x0f, 0xdf, 0xd5, 0x05, 0x68, 0xb8, 0xfd, 0x2d, 0x40, 0x90, 0x9a, 0x4a, 0x27, 0xf7, + 0x33, 0xe3, 0x8e, 0x5e, 0x54, 0x84, 0xe9, 0x39, 0x63, 0xb3, 0xde, 0x0e, 0x04, 0xd4, 0xb9, + 0x69, 0xad, 0x7d, 0x10, 0xc0, 0xca, 0x1a, 0x77, 0xa7, 0xe2, 0x32, 0x5f, 0x8f, 0x85, 0x55, + 0x38, 0xe8, 0x2c, 0xfc, 0x91, 0x41, 0x4b, 0x9b, 0xf6, 0x26, 0x42, 0x92, 0xff, 0x2f, 0x25, + 0xf5, 0x98, 0x48, 0x8c, 0x5c, 0x31, 0xe1, 0xeb, 0x3b, 0x56, 0x86, 0xc3, 0x13, 0x7e, 0xae, + 0xa4, 0x74, 0x19, 0xc9, 0x0d, 0xdd, 0xb0, 0x60, 0x6a, 0xba, 0xd7, 0x07, 0x5d, 0x8d, 0xe0, + 0x30, 0x3a, 0xea, 0x87, 0x57, 0x93, 0x43, 0x2e, 0xfe, 0xf4, 0x24, 0x49, 0x99, 0xdc, 0x0c, + 0x61, 0xb1, 0xbb, 0x6b, 0x06, 0xd6, 0x12, 0xc2, 0xaf, 0x7f, 0x75, 0xa5, 0xc8, 0x18, 0x00, + 0xd1, 0xbf, 0x6e, 0x63, 0xb2, 0xdc, 0x0d, 0xc6, 0x17, 0x79, 0xa8, 0xa5, 0x74, 0x1a, 0xcb, + 0x91, 0x40, 0x2e, 0xff, 0xf2, 0x23, 0x4d, 0x9c, 0x57, 0x86, 0xe8, 0x39, 0x34, 0xe5, 0x8b, + 0x5a, 0x3f, 0xee, 0x80, 0x51, 0x5c, 0x8d, 0xe3, 0x32, 0xf9, 0x28, 0x46, 0x97, 0x9a, 0x4b, + 0x25, 0xf4, 0xae, 0x7f, 0x11, 0xc0, 0xcd, 0x1c, 0x72, 0xa3, 0x68, 0xb9, 0xd7, 0x06, 0x0b, + 0xda, 0xb4, 0x65, 0x7e, 0xaf, 0xc1, 0x10, 0x1d, 0xcc, 0xa2, 0x73, 0xb8, 0x69, 0x07, 0xd6, + 0xdb, 0x0a, 0x64, 0xb5, 0xef, 0x3e, 0x50, 0x81, 0x8c, 0x5d, 0x33, 0xe2, 0x29, 0xf8, 0x96, + 0x47, 0x4a, 0x9b, 0xf5, 0x24, 0x41, 0x90, 0xfe, 0x2f, 0x22, 0xf3, 0x9d, 0x4c, 0x87, 0x56, + 0x38, 0xe9, 0xe4, 0x35, 0x5b, 0x8a, 0xd0, 0x01, 0x6f, 0xbe, 0xb3, 0x62, 0x0c, 0xdd, 0x16, + 0xc7, 0xa9, 0x78, 0x75, 0xa4, 0xca, 0x1b, 0xfc, 0x2d, 0x43, 0x92, 0x9f, 0x4e, 0x20, 0xf1, + 0x3a, 0xeb, 0x85, 0x54, 0x59, 0x88, 0xe6, 0x37, 0x6d, 0xbc, 0xd2, 0x03, 0x0e, 0xdf, 0xb1, + 0x60, 0xab, 0x7a, 0x14, 0xc5, 0xc8, 0x19, 0x77, 0xa6, 0xc3, 0x12, 0x7c, 0xad, 0xa0, 0x71, + 0x1f, 0xce, 0x05, 0xd4, 0xba, 0x6b, 0x66, 0xb7, 0xd9, 0x08, 0x52, 0x83, 0xed, 0x3c, 0x31, + 0xe0, 0x8e, 0x5f, 0x94, 0x45, 0x2b, 0xfa, 0xf7, 0x26, 0x48, 0x99, 0x82, 0x53, 0x3d, 0xec, + 0xe1, 0x30, 0x5e, 0x8f, 0x44, 0x95, 0xfb, 0x2a, 0x27, 0xf6, 0x98, 0x49, 0x13, 0xc2, 0xac, + 0x7d, 0x70, 0xa1, 0xcf, 0x1e, 0xd5, 0x04, 0x6a, 0xbb, 0xb6, 0x67, 0x09, 0xd8, 0xbd, 0x6c, + 0x02, 0xd3, 0xde, 0x0f, 0x61, 0xb0, 0x7b, 0xaa, 0xc4, 0x15, 0x18, 0xc9, 0xa7, 0x76, 0x2c, + 0xfd, 0x93, 0x42, 0x4f, 0x9e, 0xf0, 0x21, 0xea, 0x3b, 0x55, 0x84, 0x89, 0x58, 0x36, 0xe7, + 0x00, 0xd2, 0xb9, 0x6b, 0x6f, 0xbd, 0xd6, 0x04, 0xde, 0x0c, 0x67, 0xb5, 0xb1, 0x63, 0x08, + 0xda, 0xa1, 0x73, 0x18, 0xca, 0xce, 0x1c, 0x77, 0xa5, 0x7f, 0xad, 0xc6, 0x14, 0x10, 0xc2, + 0xa9, 0x7b, 0x5f, 0x8d, 0xe6, 0x34, 0x30, 0xe2, 0x89, 0x5b, 0x81, 0x53, 0x38, 0xea, 0xee, + 0x3c, 0x57, 0x85, 0xfe, 0x2c, 0x47, 0x95, 0x91, 0x43, 0x28, 0xfa, 0x20, 0xf2, 0x99, 0x4b, + 0x4f, 0x9d, 0xf6, 0x24, 0xbe, 0x6c, 0x07, 0xd5, 0xd1, 0x03, 0x68, 0xba, 0x60, 0xb2, 0xd9, + 0x0b, 0x0f, 0xdd, 0xb6, 0x64, 0x1f, 0xcd, 0xa6, 0x74, 0x70, 0xa2, 0xc9, 0x1b, 0xc1, 0x13, + 0x78, 0xaa, 0xae, 0x7c, 0x17, 0xc5, 0xe1, 0x33, 0x58, 0x8a, 0x8e, 0x5c, 0x37, 0xe5, 0x3f, + 0xed, 0x86, 0x54, 0x50, 0x82, 0xe9, 0x3b, 0x40, 0x92, 0xf9, 0x2b, 0x2f, 0xfd, 0x96, 0x44, + 0x9e, 0x4c, 0x27, 0xf5, 0xf1, 0x23, 0x48, 0x9a, 0x61, 0xb3, 0xd8, 0x0a, 0x0e, 0xdc, 0xb7, + 0x65, 0xbf, 0x6d, 0x06, 0xd4, 0xd0, 0x02, 0x69, 0xbb, 0xc0, 0x12, 0x79, 0xab, 0xaf, 0x7d, + 0x16, 0xc4, 0x1e, 0xcc, 0xa7, 0x75, 0x71, 0xa3, 0xc8, 0x1a, 0x3e, 0xec, 0x87, 0x55, 0x51, + 0x83, 0xe8, 0x3a, 0xe0, 0x32, 0x59, 0x8b, 0x8f, 0x5d, 0x36, 0xe4, 0x9f, 0x4d, 0x26, 0xf4, + 0xf0, 0x22, 0x49, 0x9b, 0x41, 0x93, 0xf8, 0x2a, 0x2e, 0xfc, 0x97, 0x45, 0xdf, 0x0d, 0x66, + 0xb4, 0xb0, 0x62, 0x09, 0xdb, 0x01, 0xd3, 0xb8, 0x6a, 0x6e, 0xbc, 0xd7, 0x05, 0x7e, 0xac, + 0xc7, 0x15, 0x11, 0xc3, 0xa8, 0x7a, 0xa0, 0x72, 0x19, 0xcb, 0xcf, 0x1d, 0x76, 0xa4, 0x80, + 0x52, 0x39, 0xeb, 0xef, 0x3d, 0x56, 0x84, 0x5e, 0x8c, 0xe7, 0x35, 0x31, 0xe3, 0x88, 0x5a, + 0x21, 0xf3, 0x98, 0x4a, 0x4e, 0x9c, 0xf7, 0x25, 0xff, 0x2d, 0x46, 0x94, 0x90, 0x42, 0x29, + 0xfb, 0x00, 0xd3, 0xbb, 0x68, 0x6b, 0xb8, 0xd0, 0x03, 0xd6, 0x05, 0x6d, 0xbe, 0xbd, 0x6e, + 0x06, 0xd5, 0xb1, 0x62, 0x0a, 0xd9, 0xda, 0x09, 0x61, 0xb2, 0x67, 0xb4, 0xdc, 0x0f, 0x0c, + 0xdf, 0xb7, 0x64, 0x7f, 0xac, 0xc4, 0x17, 0x14, 0xc7, 0xaf, 0x7c, 0xa9, 0x7a, 0x12, 0xc1, + 0xc2, 0x11, 0x79, 0xaa, 0xce, 0x1d, 0x75, 0xa6, 0xa5, 0x76, 0x1e, 0xcd, 0x18, 0xcb, 0xa3, + 0x70, 0x73, 0xa0, 0xc8, 0x1b, 0xfe, 0x2d, 0x45, 0x96, 0x95, 0x46, 0x2e, 0xfd, 0x28, 0xfb, + 0x93, 0x40, 0x43, 0x90, 0xf8, 0x2b, 0x4f, 0x9c, 0xf4, 0x27, 0x24, 0xf7, 0x9f, 0x4c, 0x99, + 0x4a, 0x22, 0xf1, 0xf2, 0x21, 0x49, 0x9a, 0x81, 0x52, 0x3a, 0xe9, 0xea, 0x39, 0x51, 0x82, + 0x57, 0x84, 0xec, 0x3f, 0x3c, 0xef, 0x87, 0x54, 0x30, 0xe3, 0x8b, 0x58, 0x5b, 0x88, 0xe0, + 0x33, 0xe6, 0x35, 0x5d, 0x8e, 0x8d, 0x5e, 0x36, 0xe5, 0xe1, 0x32, 0x5a, 0x89, 0x8a, 0x59, + 0x31, 0xe2, 0x37, 0xe4, 0x8c, 0x5f, 0x5c, 0x8f, 0xe7, 0x34, 0x50, 0x83, 0xeb, 0x38, 0x3b, + 0xe8, 0x80, 0x53, 0x86, 0x55, 0x3d, 0xee, 0xed, 0x3e, 0x56, 0x85, 0x9e, 0x4d, 0x25, 0xf6, + 0xf5, 0x26, 0x4e, 0x9d, 0x48, 0x9b, 0xf3, 0x20, 0x23, 0xf0, 0x98, 0x4b, 0x2f, 0xfc, 0x94, + 0x47, 0x44, 0x97, 0xff, 0x2c, 0xf9, 0x2a, 0x42, 0x91, 0x92, 0x41, 0x29, 0xfa, 0x1f, 0xcc, + 0xa4, 0x77, 0x74, 0xa7, 0xcf, 0x1c, 0xc9, 0x1a, 0x72, 0xa1, 0xa2, 0x71, 0x19, 0xca, 0xae, + 0x7d, 0x15, 0xc6, 0xc5, 0x16, 0x7e, 0xad, 0x78, 0xab, 0xc3, 0x10, 0x13, 0xc0, 0xa8, 0x7b, + 0x60, 0xb3, 0xdb, 0x08, 0x0b, 0xd8, 0xb0, 0x63, 0xb6, 0x65, 0x0d, 0xde, 0xdd, 0x0e, 0x66, + 0xb5, 0xd1, 0x02, 0x6a, 0xb9, 0xba, 0x69, 0x01, 0xd2, 0x07, 0xd4, 0xbc, 0x6f, 0x6c, 0xbf, + 0xd7, 0x04, 0x00, 0xd4, 0xb5, 0x61, 0x77, 0xa3, 0xc2, 0x16, 0xee, 0x3a, 0x5b, 0x8f, 0x99, + 0x4d, 0x2c, 0xf8, 0xc1, 0x15, 0x74, 0xa0, 0xb6, 0x62, 0x03, 0xd7, 0x2f, 0xfb, 0x9a, 0x4e, + 0x58, 0x8c, 0xed, 0x39, 0x9f, 0x4b, 0x2a, 0xfe, 0xe8, 0x3c, 0x5d, 0x89, 0x71, 0xa5, 0xc4, + 0x10, 0x06, 0xd2, 0xb3, 0x67, 0x5e, 0x8a, 0xeb, 0x3f, 0x29, 0xfd, 0x9c, 0x48, 0xb0, 0x64, + 0x05, 0xd1, 0xc7, 0x13, 0x72, 0xa6, 0x23, 0xf7, 0x96, 0x42, 0x54, 0x80, 0xe1, 0x35, 0xcd, + 0x19, 0x78, 0xac, 0xba, 0x6e, 0x0f, 0xdb, 0xe2, 0x36, 0x57, 0x83, 0x95, 0x41, 0x20, 0xf4, + 0x0c, 0xd8, 0xb9, 0x6d, 0x7b, 0xaf, 0xce, 0x1a, 0xbc, 0x68, 0x09, 0xdd, 0xcb, 0x1f, 0x7e, + 0xaa, 0x52, 0x86, 0xe7, 0x33, 0x25, 0xf1, 0x90, 0x44, 0x7d, 0xa9, 0xc8, 0x1c, 0x0a, 0xde, + 0xbf, 0x6b, 0x93, 0x47, 0x26, 0xf2, 0xe4, 0x30, 0x51, 0x85, 0x46, 0x92, 0xf3, 0x27, 0x31, + 0xe5, 0x84, 0x50, 0xa8, 0x7c, 0x1d, 0xc9, 0xdf, 0x0b, 0x6a, 0xbe, 0x87, 0x53, 0x32, 0xe6, + 0xf0, 0x24, 0x45, 0x91, 0x69, 0xbd, 0xdc, 0x08, 0x1e, 0xca, 0xab, 0x7f, 0xd9, 0x0d, 0x6c, + 0xb8, 0xae, 0x7a, 0x1b, 0xcf, 0x37, 0xe3, 0x82, 0x56, 0x40, 0x94, 0xf5, 0x21, 0x18, 0xcc, + 0xad, 0x79, 0x6f, 0xbb, 0xda, 0x0e, 0xf6, 0x22, 0x43, 0x97, 0x81, 0x55, 0x34, 0xe0, 0x65, + 0xb1, 0xd0, 0x04, 0x12, 0xc6, 0xa7, 0x73, 0x8b, 0x5f, 0x3e, 0xea, 0xfc, 0x28, 0x49, 0x9d, + 0xa4, 0x70, 0x11, 0xc5, 0xd3, 0x07, 0x66, 0xb2, 0x4a, 0x9e, 0xff, 0x2b, 0x3d, 0xe9, 0x88, + 0x5c, 0xfa, 0x2e, 0x4f, 0x9b, 0x8d, 0x59, 0x38, 0xec, 0x14, 0xc0, 0xa1, 0x75, 0x63, 0xb7, + 0xd6, 0x02, 0x3b, 0xef, 0x8e, 0x5a, 0x4c, 0x98, 0xf9, 0x2d, 0xd5, 0x01, 0x60, 0xb4, 0xa2, + 0x76, 0x17, 0xc3, 0x00, 0xd5, 0xb7, 0x62, 0x73, 0xa6, 0xc4, 0x11, 0xe6, 0x33, 0x51, 0x84, + 0x95, 0x40, 0x22, 0xf7, 0xd1, 0x04, 0x66, 0xb3, 0xa2, 0x77, 0x15, 0xc0, 0x37, 0xe2, 0x80, + 0x55, 0x44, 0x91, 0xf3, 0x26, 0xbf, 0x6a, 0x08, 0xdd, 0xcc, 0x19, 0x7b, 0xae, 0x59, 0x8c, + 0xee, 0x3b, 0x2a, 0xff, 0x9d, 0x48, 0x6e, 0xbb, 0xd9, 0x0c, 0x1d, 0xc8, 0xaa, 0x7f, 0x88, + 0x5d, 0x3f, 0xea, 0xfb, 0x2e, 0x4c, 0x99, 0x63, 0xb6, 0xd4, 0x01, 0x10, 0xc5, 0xa7, 0x72, + 0x85, 0x50, 0x32, 0xe7, 0xf6, 0x23, 0x41, 0x94, 0xb2, 0x67, 0x05, 0xd0, 0xc1, 0x14, 0x76, + 0xa3, 0x54, 0x81, 0xe3, 0x36, 0x27, 0xf2, 0x90, 0x45, 0xdc, 0x09, 0x6b, 0xbe, 0xaf, 0x7a, + 0x18, 0xcd, 0x3a, 0xef, 0x8d, 0x58, 0x49, 0x9c, 0xfe, 0x2b, 0x0d, 0xd8, 0xba, 0x6f, 0x7e, + 0xab, 0xc9, 0x1c, 0xeb, 0x3e, 0x5c, 0x89, 0x98, 0x4d, 0x2f, 0xfa, 0xc6, 0x13, 0x71, 0xa4, + 0xb5, 0x60, 0x02, 0xd7, 0x20, 0xf5, 0x97, 0x42, 0x53, 0x86, 0xe4, 0x31, 0x17, 0xc2, 0xa0, + 0x75, 0x64, 0xb1, 0xd3, 0x06, 0xf1, 0x24, 0x46, 0x93, 0x82, 0x57, 0x35, 0xe0, 0x79, 0xac, + 0xce, 0x1b, 0x0a, 0xdf, 0xbd, 0x68, 0x9f, 0x4a, 0x28, 0xfd, 0xec, 0x39, 0x5b, 0x8e, 0xa8, + 0x7d, 0x1f, 0xca, 0xdb, 0x0e, 0x6c, 0xb9, 0x4e, 0x9b, 0xf9, 0x2c, 0x3d, 0xe8, 0x8a, 0x5f, + 0xa5, 0x70, 0x12, 0xc7, 0xd6, 0x03, 0x61, 0xb4, 0x43, 0x96, 0xf4, 0x21, 0x30, 0xe5, 0x87, + 0x52, 0x74, 0xa1, 0xc3, 0x16, 0x07, 0xd2, 0xb0, 0x65, 0x92, 0x47, 0x25, 0xf0, 0xe1, 0x34, + 0x56, 0x83, 0x1a, 0xcf, 0xad, 0x78, 0x69, 0xbc, 0xde, 0x0b, 0xfc, 0x29, 0x4b, 0x9e, 0x8f, + 0x5a, 0x38, 0xed, 0xcb, 0x1e, 0x7c, 0xa9, 0xb8, 0x6d, 0x0f, 0xda, 0x2d, 0xf8, 0x9a, 0x4f, + 0x5e, 0x8b, 0xe9, 0x3c, 0x00, 0xd6, 0xb1, 0x67, 0x7f, 0xa9, 0xce, 0x18, 0xfe, 0x28, 0x4f, + 0x99, 0x81, 0x57, 0x30, 0xe6, 0xe1, 0x37, 0x50, 0x86, 0x9e, 0x48, 0x2f, 0xf9, 0x1f, 0xc9, + 0xae, 0x78, 0x60, 0xb6, 0xd1, 0x07, 0xdf, 0x09, 0x6e, 0xb8, 0xa0, 0x76, 0x11, 0xc7, 0x21, + 0xf7, 0x90, 0x46, 0x5e, 0x88, 0xef, 0x39, 0x3e, 0xe8, 0x8f, 0x59, 0x41, 0x97, 0xf0, 0x26, + 0xc0, 0x16, 0x71, 0xa7, 0xbf, 0x69, 0x0e, 0xd8, 0xa3, 0x75, 0x12, 0xc4, 0xdc, 0x0a, 0x6d, + 0xbb, 0x5d, 0x8b, 0xec, 0x3a, 0x22, 0xf4, 0x93, 0x45, 0x42, 0x94, 0xf3, 0x25, 0x3d, 0xeb, + 0x8c, 0x5a, 0xbc, 0x6a, 0x0d, 0xdb, 0xc3, 0x15, 0x72, 0xa4, 0x7c, 0xaa, 0xcd, 0x1b, 0x03, + 0xd5, 0xb2, 0x64, 0x82, 0x54, 0x33, 0xe5, 0xfd, 0x2b, 0x4c, 0x9a, 0x9d, 0x4b, 0x2c, 0xfa, + 0xe2, 0x34, 0x53, 0x85, 0x63, 0xb5, 0xd2, 0x04, 0x1c, 0xca, 0xad, 0x7b, 0x5b, 0x8d, 0xea, + 0x3c, 0x24, 0xf2, 0x95, 0x43, 0xa5, 0x73, 0x14, 0xc2, 0xda, 0x0c, 0x6b, 0xbd, 0xba, 0x6c, + 0x0b, 0xdd, 0xc5, 0x13, 0x74, 0xa2, 0x44, 0x92, 0xf5, 0x23, 0x3b, 0xed, 0x8a, 0x5c, 0x84, + 0x52, 0x35, 0xe3, 0xfb, 0x2d, 0x4a, 0x9c, 0x7a, 0xac, 0xcb, 0x1d, 0x05, 0xd3, 0xb4, 0x62, + 0x65, 0xb3, 0xd4, 0x02, 0x1a, 0xcc, 0xab, 0x7d, 0x9b, 0x4d, 0x2a, 0xfc, 0xe4, 0x32, 0x55, + 0x83, 0xf8, 0x2e, 0x49, 0x9f, 0x87, 0x51, 0x36, 0xe0, 0x06, 0xd0, 0xb7, 0x61, 0x79, 0xaf, + 0xc8, 0x1e, 0x19, 0xcf, 0xa8, 0x7e, 0x66, 0xb0, 0xd7, 0x01, 0xe7, 0x31, 0x56, 0x80, 0x98, + 0x4e, 0x29, 0xff, 0x27, 0xf1, 0x96, 0x40, 0x58, 0x8e, 0xe9, 0x3f, 0xd9, 0x0f, 0x68, 0xbe, + 0xa6, 0x70, 0x17, 0xc1, 0xc6, 0x10, 0x77, 0xa1, 0xb9, 0x6f, 0x08, 0xde, 0x38, 0xee, 0x89, + 0x5f, 0x47, 0x91, 0xf6, 0x20, 0x00, 0xd7, 0xb3, 0x64, 0x7b, 0xac, 0xc8, 0x1f, 0xf6, 0x21, + 0x45, 0x92, 0x8d, 0x5a, 0x3e, 0xe9, 0xf1, 0x26, 0x42, 0x95, 0x8a, 0x5d, 0x39, 0xee, 0x07, + 0xd0, 0xb4, 0x63, 0x7c, 0xab, 0xcf, 0x18, 0xff, 0x28, 0x4c, 0x9b, 0x84, 0x53, 0x37, 0xe0, + 0x09, 0xde, 0xba, 0x6d, 0x72, 0xa5, 0xc1, 0x16, 0x0e, 0xd9, 0xbd, 0x6a, 0x75, 0xa2, 0xc6, + 0x11, 0xf8, 0x2f, 0x4b, 0x9c, 0x83, 0x54, 0x30, 0xe7, 0xe3, 0x34, 0x50, 0x87, 0x98, 0x4f, + 0x2b, 0xfc, 0x15, 0xc2, 0xa6, 0x71, 0x6e, 0xb9, 0xdd, 0x0a, 0x12, 0xc5, 0xa1, 0x76, 0x69, + 0xbe, 0xda, 0x0d, 0xe4, 0x33, 0x57, 0x80, 0x9f, 0x48, 0x2c, 0xfb, 0x1c, 0xcb, 0xaf, 0x78, + 0x67, 0xb0, 0xd4, 0x03, 0xea, 0x3d, 0x59, 0x8e, 0x91, 0x46, 0x22, 0xf5, 0xed, 0x3a, 0x5e, + 0x89, 0x96, 0x41, 0x25, 0xf2, 0x1b, 0xcc, 0xa8, 0x7f, 0x60, 0xb7, 0xd3, 0x04, 0xdb, 0x0c, + 0x68, 0xbf, 0xa0, 0x77, 0x13, 0xc4, 0x2d, 0xfa, 0x9e, 0x49, 0x56, 0x81, 0xe5, 0x32, 0x2a, + 0xfd, 0x99, 0x4e, 0x51, 0x86, 0xe2, 0x35, 0xdc, 0x0b, 0x6f, 0xb8, 0xa7, 0x70, 0x14, 0xc3, + 0x24, 0xf3, 0x97, 0x40, 0x5f, 0x88, 0xec, 0x3b, 0xd2, 0x05, 0x61, 0xb6, 0xa9, 0x7e, 0x1a, + 0xcd, 0xd5, 0x02, 0x66, 0xb1, 0xae, 0x79, 0x1d, 0xca, 0x23, 0xf4, 0x90, 0x47, 0x58, 0x8f, + 0xeb, 0x3c, 0x38, 0xef, 0x8b, 0x5c, 0x43, 0x94, 0xf0, 0x27, 0xce, 0x19, 0x7d, 0xaa, 0xb5, + 0x62, 0x06, 0xd1, 0xc9, 0x1e, 0x7a, 0xad, 0xb2, 0x65, 0x01, 0xd6, 0x3f, 0xe8, 0x8c, 0x5b, + 0x44, 0x93, 0xf7, 0x20, 0xc7, 0x10, 0x74, 0xa3, 0xbc, 0x6b, 0x0f, 0xd8, 0x31, 0xe6, 0x82, + 0x55, 0x4a, 0x9d, 0xf9, 0x2e, 0x36, 0xe1, 0x85, 0x52, 0x4d, 0x9a, 0xfe, 0x29, 0xc0, 0x17, + 0x73, 0xa4, 0xbb, 0x6c, 0x08, 0xdf, 0x00, 0xd8, 0xad, 0x75, 0x47, 0x9f, 0xea, 0x32, 0x8e, + 0x56, 0x23, 0xfb, 0xc9, 0x11, 0x64, 0xbc, 0x01, 0xd9, 0xac, 0x74, 0x46, 0x9e, 0xeb, 0x33, + 0x8f, 0x57, 0x22, 0xfa, 0xc8, 0x10, 0x65, 0xbd, 0x02, 0xda, 0xaf, 0x77, 0x45, 0x9d, 0xe8, + 0x30, 0x8c, 0x54, 0x21, 0xf9, 0xcb, 0x13, 0x66, 0xbe, 0x03, 0xdb, 0xae, 0x76, 0x44, 0x9c, + 0xe9, 0x31, 0x8d, 0x55, 0x20, 0xf8, 0xca, 0x12, 0x67, 0xbf, 0x04, 0xdc, 0xa9, 0x71, 0x43, + 0x9b, 0xee, 0x36, 0x8a, 0x52, 0x27, 0xff, 0xcd, 0x15, 0x60, 0xb8, 0x05, 0xdd, 0xa8, 0x70, + 0x42, 0x9a, 0xef, 0x37, 0x8b, 0x53, 0x26, 0xfe, 0xcc, 0x14, 0x61, 0xb9, 0x06, 0xde, 0xab, + 0x73, 0x41, 0x99, 0xec, 0x34, 0x88, 0x50, 0x25, 0xfd, 0xcf, 0x17, 0x62, 0xba, 0x07, 0xdf, + 0xaa, 0x72, 0x40, 0x98, 0xed, 0x35, 0x89, 0x51, 0x24, 0xfc, 0xce, 0x16, 0x63, 0xbb, 0x08, + 0xd0, 0xa5, 0x7d, 0x4f, 0x97, 0xe2, 0x3a, 0x86, 0x5e, 0x2b, 0xf3, 0xc1, 0x19, 0x6c, 0xb4, + 0x09, 0xd1, 0xa4, 0x7c, 0x4e, 0x96, 0xe3, 0x3b, 0x87, 0x5f, 0x2a, 0xf2, 0xc0, 0x18, 0x6d, + 0xb5, 0x0a, 0xd2, 0xa7, 0x7f, 0x4d, 0x95, 0xe0, 0x38, 0x84, 0x5c, 0x29, 0xf1, 0xc3, 0x1b, + 0x6e, 0xb6, 0x0b, 0xd3, 0xa6, 0x7e, 0x4c, 0x94, 0xe1, 0x39, 0x85, 0x5d, 0x28, 0xf0, 0xc2, + 0x1a, 0x6f, 0xb7, 0x0c, 0xd4, 0xa1, 0x79, 0x4b, 0x93, 0xe6, 0x3e, 0x82, 0x5a, 0x2f, 0xf7, + 0xc5, 0x1d, 0x68, 0xb0, 0x0d, 0xd5, 0xa0, 0x78, 0x4a, 0x92, 0xe7, 0x3f, 0x83, 0x5b, 0x2e, + 0xf6, 0xc4, 0x1c, 0x69, 0xb1, 0x0e, 0xd6, 0xa3, 0x7b, 0x49, 0x91, 0xe4, 0x3c, 0x80, 0x58, + 0x2d, 0xf5, 0xc7, 0x1f, 0x6a, 0xb2, 0x0f, 0xd7, 0xa2, 0x7a, 0x48, 0x90, 0xe5, 0x3d, 0x81, + 0x59, 0x2c, 0xf4, 0xc6, 0x1e, 0x6b, 0xb3, 0x00, 0xd9, 0xaf, 0x76, 0x43, 0x9a, 0xec, 0x35, + 0x86, 0x5f, 0x29, 0xf0, 0xc5, 0x1c, 0x6a, 0xb3, 0x11, 0xc8, 0xbe, 0x67, 0x52, 0x8b, 0xfd, + 0x24, 0x97, 0x4e, 0x38, 0xe1, 0xd4, 0x0d, 0x7b, 0xa2, 0x22, 0xfb, 0x8d, 0x54, 0x61, 0xb8, + 0xce, 0x17, 0xa4, 0x7d, 0x0b, 0xd2, 0xe7, 0x3e, 0x48, 0x91, 0x33, 0xea, 0x9c, 0x45, 0x70, + 0xa9, 0xdf, 0x06, 0xb5, 0x6c, 0x1a, 0xc3, 0xf6, 0x2f, 0x59, 0x80, 0x44, 0x9d, 0xeb, 0x32, + 0x07, 0xde, 0xa8, 0x71, 0xc2, 0x1b, 0x6d, 0xb4, 0x81, 0x58, 0x2e, 0xf7, 0x55, 0x8c, 0xfa, + 0x23, 0x16, 0xcf, 0xb9, 0x60, 0xd3, 0x0a, 0x7c, 0xa5, 0x90, 0x49, 0x3f, 0xe6, 0x66, 0xbf, + 0xc9, 0x10, 0x25, 0xfc, 0x8a, 0x53, 0xe0, 0x39, 0x4f, 0x96, 0xa3, 0x7a, 0x0c, 0xd5, 0x77, + 0xae, 0xd8, 0x01, 0x34, 0xed, 0x9b, 0x42, 0xf1, 0x28, 0x5e, 0x87, 0xb2, 0x6b, 0x1d, 0xc4, + 0x88, 0x51, 0x27, 0xfe, 0xcb, 0x12, 0x64, 0xbd, 0x0e, 0xd7, 0xa1, 0x78, 0x4d, 0x94, 0xe2, + 0x3b, 0x99, 0x40, 0x36, 0xef, 0xda, 0x03, 0x75, 0xac, 0x1f, 0xc6, 0xb0, 0x69, 0x5c, 0x85, + 0xf3, 0x2a, 0xaa, 0x73, 0x05, 0xdc, 0xe9, 0x30, 0x46, 0x9f, 0x2c, 0xf5, 0x83, 0x5a, 0x6f, + 0xb6, 0xc0, 0x19, 0xbb, 0x62, 0x14, 0xcd, 0xf8, 0x21, 0x57, 0x8e, 0x3d, 0xe4, 0x92, 0x4b, + 0x7e, 0xa7, 0xd1, 0x08, 0xcc, 0x15, 0x63, 0xba, 0x8f, 0x56, 0x20, 0xf9, 0x4a, 0x93, 0xe5, + 0x3c, 0x09, 0xd0, 0xa6, 0x7f, 0xdd, 0x04, 0x72, 0xab, 0x9e, 0x47, 0x31, 0xe8, 0x5b, 0x82, + 0xf4, 0x2d, 0x18, 0xc1, 0xb7, 0x6e, 0xee, 0x37, 0x41, 0x98, 0xad, 0x74, 0x02, 0xdb, 0x68, + 0xb1, 0xc7, 0x1e, 0x2b, 0xf2, 0x84, 0x5d, 0xff, 0x26, 0x50, 0x89, 0xbc, 0x65, 0x13, 0xca, + 0x79, 0xa0, 0xd6, 0x0f, 0x3a, 0xe3, 0x95, 0x4c, 0x00, 0xda, 0xa9, 0x73, 0x4f, 0x95, 0xe6, + 0x3c, 0x9e, 0x44, 0x37, 0xed, 0xd1, 0x0b, 0x78, 0xa2, 0x21, 0xfb, 0x88, 0x52, 0x6e, 0xb4, + 0xc7, 0x1d, 0xbf, 0x65, 0x16, 0xcc, 0xf0, 0x2a, 0x59, 0x83, 0x42, 0x98, 0xeb, 0x31, 0x0d, + 0xd7, 0xa4, 0x7e, 0xdc, 0x06, 0x75, 0xaf, 0x93, 0x49, 0x3a, 0xe0, 0x63, 0xb9, 0xca, 0x10, + 0x2c, 0xf6, 0x85, 0x5f, 0xfd, 0x27, 0x54, 0x8e, 0xb2, 0x68, 0x1b, 0xc1, 0x84, 0x5e, 0x2d, + 0xf7, 0xcb, 0x11, 0x62, 0xb8, 0x1a, 0xc0, 0xb3, 0x69, 0x55, 0x8f, 0xfc, 0x26, 0xa5, 0x7f, + 0x0c, 0xd6, 0xea, 0x30, 0x43, 0x99, 0x3b, 0xe1, 0x92, 0x48, 0x74, 0xae, 0xdd, 0x07, 0xc6, + 0x1c, 0x6f, 0xb5, 0x89, 0x53, 0x20, 0xfa, 0x58, 0x82, 0xf1, 0x2b, 0x17, 0xcd, 0xbe, 0x64, + 0xe7, 0x3d, 0x4e, 0x94, 0xa8, 0x72, 0x01, 0xdb, 0x79, 0xa3, 0xd0, 0x0a, 0x36, 0xec, 0x9f, + 0x45, 0x15, 0xcf, 0xbc, 0x66, 0x5a, 0x80, 0xf3, 0x29, 0x8b, 0x51, 0x22, 0xf8, 0xc4, 0x1e, + 0x6d, 0xb7, 0x34, 0xee, 0x9d, 0x47, 0x7b, 0xa1, 0xd2, 0x08, 0xaa, 0x70, 0x03, 0xd9, 0xe5, + 0x3f, 0x4c, 0x96, 0x57, 0x8d, 0xfe, 0x24, 0x18, 0xc2, 0xb1, 0x6b, 0xc9, 0x13, 0x60, 0xba, + 0x86, 0x5c, 0x2f, 0xf5, 0x76, 0xac, 0xdf, 0x05, 0x39, 0xe3, 0x90, 0x4a, 0xe8, 0x32, 0x41, + 0x9b, 0xa7, 0x7d, 0x0e, 0xd4, 0x91, 0x4b, 0x38, 0xe2, 0xde, 0x04, 0x77, 0xad, 0x0f, 0xd5, + 0xa6, 0x7c, 0x40, 0x9a, 0xe9, 0x33, 0xb0, 0x6a, 0x19, 0xc3, 0xff, 0x25, 0x56, 0x8c, 0x2e, + 0xf4, 0x87, 0x5d, 0x61, 0xbb, 0xc8, 0x12, 0xd3, 0x09, 0x7a, 0xa0, 0x9c, 0x46, 0x35, 0xef, + 0x4d, 0x97, 0xe4, 0x3e, 0x02, 0xd8, 0xab, 0x71, 0xf2, 0x28, 0x5b, 0x81, 0xbd, 0x67, 0x14, + 0xce, 0x6c, 0xb6, 0xc5, 0x1f, 0x23, 0xf9, 0x8a, 0x50, 0x00, 0xdb, 0xab, 0x70, 0x4b, 0x90, + 0xe0, 0x3b, 0x96, 0x4d, 0x3d, 0xe6, 0xdd, 0x06, 0x76, 0xad, 0x31, 0xea, 0x9a, 0x41, 0x7a, + 0xa1, 0xd1, 0x0a, 0xa7, 0x7c, 0x0c, 0xd7, 0xec, 0x37, 0x47, 0x9c, 0x62, 0xb9, 0xc9, 0x12, + 0x29, 0xf2, 0x82, 0x59, 0xf4, 0x2f, 0x5f, 0x84, 0xbf, 0x64, 0x14, 0xcf, 0x53, 0x88, 0xf8, + 0x23, 0x18, 0xc3, 0xb3, 0x68, 0xc5, 0x1e, 0x6e, 0xb5, 0x8e, 0x55, 0x25, 0xfe, 0xc4, 0x1f, + 0x6f, 0xb4, 0x8f, 0x54, 0x24, 0xff, 0x52, 0x89, 0xf9, 0x22, 0x19, 0xc2, 0xb2, 0x69, 0xf5, + 0x2e, 0x5e, 0x85, 0xbe, 0x65, 0x15, 0xce, 0x63, 0xb8, 0xc8, 0x13, 0x28, 0xf3, 0x83, 0x58, + 0xa6, 0x7d, 0x0d, 0xd6, 0xed, 0x36, 0x46, 0x9d, 0x30, 0xeb, 0x9b, 0x40, 0x7b, 0xa0, 0xd0, + 0x0b, 0x97, 0x4c, 0x3c, 0xe7, 0xdc, 0x07, 0x77, 0xac, 0x01, 0xda, 0xaa, 0x71, 0x4a, 0x91, + 0xe1, 0x3a, 0x95, 0x4e, 0x3e, 0xe5, 0xde, 0x05, 0x75, 0xae, 0x03, 0xd8, 0xa8, 0x73, 0x48, + 0x93, 0xe3, 0x38, 0xa4, 0x7f, 0x0f, 0xd4, 0xef, 0x34, 0x44, 0x9f, 0x32, 0xe9, 0x99, 0x42, + 0x79, 0xa2, 0xd2, 0x09, 0xf7, 0x2c, 0x5c, 0x87, 0xbc, 0x67, 0x17, 0xcc, 0x61, 0xba, 0xca, + 0x11, 0x2a, 0xf1, 0x81, 0x5a, 0xc6, 0x1d, 0x6d, 0xb6, 0x8d, 0x56, 0x26, 0xfd, 0x50, 0x8b, + 0xfb, 0x20, 0x1b, 0xc0, 0xb0, 0x6b, 0x51, 0x8a, 0xfa, 0x21, 0x1a, 0xc1, 0xb1, 0x6a, 0xc7, + 0x1c, 0x6c, 0xb7, 0x8c, 0x57, 0x27, 0xfc, 0x60, 0xbb, 0xcb, 0x10, 0x2b, 0xf0, 0x80, 0x5b, + 0xf6, 0x2d, 0x5d, 0x86, 0xbd, 0x66, 0x16, 0xcd, 0x33, 0xe8, 0x98, 0x43, 0x78, 0xa3, 0xd3, + 0x08, 0xa5, 0x7e, 0x0e, 0xd5, 0xee, 0x35, 0x45, 0x9e, 0x02, 0xd9, 0xa9, 0x72, 0x49, 0x92, + 0xe2, 0x39, 0x94, 0x4f, 0x3f, 0xe4, 0xdf, 0x04, 0x74, 0xaf, 0x00, 0xdc, 0xa5, 0x79, 0x57, + 0x8b, 0xf2, 0x2e, 0xae, 0x72, 0x0b, 0xd7, 0xf9, 0x25, 0x5c, 0x80, 0x41, 0x9d, 0xe4, 0x38, + 0x16, 0xca, 0xb3, 0x6f, 0xef, 0x33, 0x4a, 0x96, 0xb8, 0x64, 0x1d, 0xc1, 0x82, 0x5e, 0x27, + 0xfb, 0xd5, 0x09, 0x70, 0xac, 0x2c, 0xf0, 0x89, 0x55, 0x7b, 0xa7, 0xde, 0x02, 0xc3, 0x1f, + 0x66, 0xba, 0x94, 0x48, 0x31, 0xed, 0x6d, 0xb1, 0xc8, 0x14, 0x3a, 0xe6, 0x9f, 0x43, 0x19, + 0xc5, 0xbc, 0x60, 0x4e, 0x92, 0xeb, 0x37, 0xb7, 0x6b, 0x12, 0xce, 0xe0, 0x3c, 0x45, 0x99, + 0x58, 0x84, 0xfd, 0x21, 0x0f, 0xd3, 0xaa, 0x76, 0xf6, 0x2a, 0x53, 0x8f, 0xa1, 0x7d, 0x04, + 0xd8, 0x9b, 0x47, 0x3e, 0xe2, 0xcc, 0x10, 0x69, 0xb5, 0x35, 0xe9, 0x90, 0x4c, 0x62, 0xbe, + 0xc7, 0x1b, 0xda, 0x06, 0x7f, 0xa3, 0x8d, 0x51, 0x28, 0xf4, 0x74, 0xa8, 0xd1, 0x0d, 0x23, + 0xff, 0x86, 0x5a, 0x32, 0xee, 0x97, 0x4b, 0x65, 0xb9, 0xc0, 0x1c, 0x9c, 0x40, 0x39, 0xe5, + 0xcb, 0x17, 0x6e, 0xb2, 0x73, 0xaf, 0xd6, 0x0a, 0x24, 0xf8, 0x81, 0x5d, 0xdd, 0x01, 0x78, + 0xa4, 0x8a, 0x56, 0x2f, 0xf3, 0xb0, 0x6c, 0x15, 0xc9, 0xe7, 0x3b, 0x42, 0x9e, 0x1e, 0xc2, + 0xbb, 0x67, 0x49, 0x95, 0xec, 0x30, 0xf1, 0x2d, 0x54, 0x88, 0xa6, 0x7a, 0x03, 0xdf, 0x5f, + 0x83, 0xfa, 0x26, 0x08, 0xd4, 0xad, 0x71, 0x2b, 0xf7, 0x8e, 0x52, 0x7c, 0xa0, 0xd9, 0x05, + 0x85, 0x59, 0x20, 0xfc, 0xd2, 0x0e, 0x77, 0xab, 0x6a, 0xb6, 0xcf, 0x13, 0x3d, 0xe1, 0x98, + 0x44, 0xc4, 0x18, 0x61, 0xbd, 0x93, 0x4f, 0x36, 0xea, 0xa9, 0x75, 0x0c, 0xd0, 0xfe, 0x22, + 0x5b, 0x87, 0x07, 0xdb, 0xa2, 0x7e, 0x50, 0x8c, 0xf5, 0x29, 0xe8, 0x34, 0x4d, 0x91, 0xbf, + 0x63, 0x1a, 0xc6, 0x46, 0x9a, 0xe3, 0x3f, 0x11, 0xcd, 0xb4, 0x68, 0x00, 0xdd, 0xa7, 0x7a, + 0x53, 0x8e, 0xf4, 0x29, 0xa6, 0x7b, 0x01, 0xdc, 0xf5, 0x28, 0x52, 0x8f, 0x51, 0x8c, 0xf6, + 0x2b, 0x02, 0xdf, 0xa5, 0x78, 0xf7, 0x2a, 0x50, 0x8d, 0xa4, 0x79, 0x03, 0xde, 0xa2, 0x7f, + 0x05, 0xd8, 0xf1, 0x2c, 0x56, 0x8b, 0x04, 0xd9, 0xa3, 0x7e, 0x57, 0x8a, 0xf0, 0x2d, 0xf3, + 0x2e, 0x54, 0x89, 0xa0, 0x7d, 0x07, 0xda, 0x55, 0x88, 0xf2, 0x2f, 0x06, 0xdb, 0xa1, 0x7c, + 0x59, 0x84, 0xfe, 0x23, 0x0a, 0xd7, 0xad, 0x70, 0xff, 0x22, 0x58, 0x85, 0xac, 0x71, 0x0b, + 0xd6, 0x08, 0xd5, 0xaf, 0x72, 0x5b, 0x86, 0xfc, 0x21, 0xae, 0x73, 0x09, 0xd4, 0xfd, 0x20, + 0x5a, 0x87, 0xfb, 0x26, 0x5c, 0x81, 0xa8, 0x75, 0x0f, 0xd2, 0x5d, 0x80, 0xfa, 0x27, 0x0e, + 0xd3, 0xa9, 0x74, 0xaa, 0x77, 0x0d, 0xd0, 0xf9, 0x24, 0x5e, 0x83, 0x0c, 0xd1, 0xab, 0x76, + 0x5f, 0x82, 0xf8, 0x25, 0xb2, 0x6f, 0x15, 0xc8, 0xe1, 0x3c, 0x46, 0x9b, 0x14, 0xc9, 0xb3, + 0x6e, 0x47, 0x9a, 0xe0, 0x3d, 0xe3, 0x3e, 0x44, 0x99, 0xb0, 0x6d, 0x17, 0xca, 0x45, 0x98, + 0xe2, 0x3f, 0x16, 0xcb, 0xb1, 0x6c, 0x10, 0xcd, 0xb7, 0x6a, 0x43, 0x9e, 0xe4, 0x39, 0xb6, + 0x6b, 0x11, 0xcc, 0xe5, 0x38, 0x42, 0x9f, 0x41, 0x9c, 0xe6, 0x3b, 0x12, 0xcf, 0xb5, 0x68, + 0xe7, 0x3a, 0x40, 0x9d, 0xb4, 0x69, 0x13, 0xce, 0xeb, 0x36, 0x4c, 0x91, 0xb8, 0x65, 0x1f, + 0xc2, 0x4d, 0x90, 0xea, 0x37, 0x1e, 0xc3, 0xb9, 0x64, 0xba, 0x67, 0x1d, 0xc0, 0xe9, 0x34, + 0x4e, 0x93, 0x1c, 0xc1, 0xbb, 0x66, 0x4f, 0x92, 0xe8, 0x35, 0x49, 0x94, 0xee, 0x33, 0x1a, + 0xc7, 0xbd, 0x60, 0xef, 0x32, 0x48, 0x95, 0xbc, 0x61, 0x1b, 0xc6, 0x18, 0xc5, 0xbf, 0x62, + 0x4b, 0x96, 0xec, 0x31, 0xbe, 0x63, 0x19, 0xc4, 0xed, 0x30, 0x4a, 0x97, 0x00, 0xde, 0xa1, + 0x7f, 0x5f, 0x81, 0xfe, 0x20, 0xbe, 0x60, 0x1f, 0xc1, 0xe1, 0x3f, 0x40, 0x9e, 0x61, 0xbf, + 0xc0, 0x1e, 0x3e, 0xe0, 0x9f, 0x41, 0xdf, 0x01, 0x7e, 0xa0, 0x80, 0x5e, 0x21, 0xff, 0xc2, + 0x1c, 0x63, 0xbd, 0x9d, 0x43, 0x3c, 0xe2, 0x7c, 0xa2, 0xdd, 0x03, 0x23, 0xfd, 0x82, 0x5c, + 0xa3, 0x7d, 0x02, 0xdc, 0xfc, 0x22, 0x5d, 0x83, 0x1d, 0xc3, 0xbc, 0x62, 0x42, 0x9c, 0xe3, + 0x3d, 0x99, 0x47, 0x38, 0xe6, 0xc6, 0x18, 0x67, 0xb9, 0x27, 0xf9, 0x86, 0x58, 0x78, 0xa6, + 0xd9, 0x07, 0xf8, 0x26, 0x59, 0x87, 0xa7, 0x79, 0x06, 0xd8, 0x46, 0x98, 0xe7, 0x39, 0x19, + 0xc7, 0xb8, 0x66, 0x5b, 0x85, 0xfa, 0x24, 0x04, 0xda, 0xa5, 0x7b, 0xe5, 0x3b, 0x44, 0x9a, + 0xba, 0x64, 0x1b, 0xc5, 0x3a, 0xe4, 0x9b, 0x45, 0x65, 0xbb, 0xc4, 0x1a, 0x84, 0x5a, 0x25, + 0xfb, 0xdb, 0x05, 0x7a, 0xa4, 0x2f, 0xf1, 0x8e, 0x50, 0x70, 0xae, 0xd1, 0x0f, 0x91, 0x4f, + 0x30, 0xee, 0xce, 0x10, 0x6f, 0xb1, 0x4e, 0x90, 0xef, 0x31, 0x11, 0xcf, 0xb0, 0x6e, 0xf0, + 0x2e, 0x51, 0x8f, 0xaf, 0x71, 0x0e, 0xd0, 0xed, 0x33, 0x4c, 0x92, 0xb2, 0x6c, 0x13, 0xcd, + 0x53, 0x8d, 0xf2, 0x2c, 0x0c, 0xd2, 0xad, 0x73, 0x8c, 0x52, 0x2d, 0xf3, 0xd3, 0x0d, 0x72, + 0xac, 0x32, 0xec, 0x93, 0x4d, 0x6d, 0xb3, 0xcc, 0x12, 0xb6, 0x68, 0x17, 0xc9, 0xe9, 0x37, + 0x48, 0x96, 0x08, 0xd6, 0xa9, 0x77, 0x57, 0x89, 0xf6, 0x28, 0xd7, 0x09, 0x76, 0xa8, 0x88, + 0x56, 0x29, 0xf7, 0x69, 0xb7, 0xc8, 0x16, 0x36, 0xe8, 0x97, 0x49, 0x74, 0xaa, 0xd5, 0x0b, + 0x2b, 0xf5, 0x8a, 0x54, 0xca, 0x14, 0x6b, 0xb5, 0x95, 0x4b, 0x34, 0xea, 0x15, 0xcb, 0xb4, + 0x6a, 0x4a, 0x94, 0xeb, 0x35, 0xab, 0x75, 0x0a, 0xd4, 0xf4, 0x2a, 0x55, 0x8b, 0x00, 0xdf, + 0xa3, 0x7c, 0x5b, 0x84, 0xf8, 0x27, 0xb6, 0x69, 0x15, 0xca, 0xed, 0x32, 0x4e, 0x91, 0x71, + 0xae, 0xd2, 0x0d, 0x2a, 0xf5, 0x89, 0x56, 0xc7, 0x18, 0x64, 0xbb, 0x9c, 0x43, 0x3f, 0xe0, + 0xe2, 0x3d, 0x41, 0x9e, 0xb9, 0x66, 0x1a, 0xc5, 0x54, 0x8b, 0xf7, 0x28, 0x0f, 0xd0, 0xac, + 0x73, 0x93, 0x4c, 0x30, 0xef, 0xc8, 0x17, 0x6b, 0xb4, 0x25, 0xfa, 0x86, 0x59, 0x7e, 0xa1, + 0xdd, 0x02, 0xd9, 0x06, 0x7a, 0xa5, 0x82, 0x5d, 0x21, 0xfe, 0x6f, 0xb0, 0xcc, 0x13, 0x34, + 0xeb, 0x97, 0x48, 0xa8, 0x77, 0x0b, 0xd4, 0xf3, 0x2c, 0x50, 0x8f, 0x1e, 0xc1, 0xbd, 0x62, + 0x45, 0x9a, 0xe6, 0x39, 0x3b, 0xe4, 0x98, 0x47, 0x60, 0xbf, 0xc3, 0x1c, 0x8d, 0x52, 0x2e, + 0xf1, 0xd6, 0x09, 0x75, 0xaa, 0x4a, 0x95, 0xe9, 0x36, 0x11, 0xce, 0xb2, 0x6d, 0xfc, 0x23, + 0x5f, 0x80, 0xa7, 0x78, 0x04, 0xdb, 0xaf, 0x70, 0x0c, 0xd3, 0xf4, 0x2b, 0x57, 0x88, 0x19, + 0xc6, 0xba, 0x65, 0x42, 0x9d, 0xe1, 0x3e, 0xde, 0x01, 0x7d, 0xa2, 0x85, 0x5a, 0x26, 0xf9, + 0x68, 0xb7, 0xcb, 0x14, 0x33, 0xec, 0x90, 0x4f, 0x4d, 0x92, 0xee, 0x31, 0x16, 0xc9, 0xb5, + 0x6a, 0xfb, 0x24, 0x58, 0x87, 0xa0, 0x7f, 0x03, 0xdc, 0x3c, 0xe3, 0x9f, 0x40, 0x67, 0xb8, + 0xc4, 0x1b, 0x8a, 0x55, 0x29, 0xf6, 0xd1, 0x0e, 0x72, 0xad, 0x76, 0xa9, 0xd5, 0x0a, 0x2d, + 0xf2, 0x8e, 0x51, 0xc0, 0x1f, 0x63, 0xbc, 0x9b, 0x44, 0x38, 0xe7, 0x07, 0xd8, 0xa4, 0x7b, + 0x5c, 0x83, 0xff, 0x20, 0xb1, 0x6e, 0x12, 0xcd, 0xea, 0x35, 0x49, 0x96, 0x94, 0x4b, 0x37, + 0xe8, 0xcf, 0x10, 0x6c, 0xb3, 0x22, 0xfd, 0x81, 0x5e, 0x79, 0xa6, 0xda, 0x05, 0xe5, 0x3a, + 0x46, 0x99, 0xbe, 0x61, 0x1d, 0xc2, 0x53, 0x8c, 0xf0, 0x2f, 0x08, 0xd7, 0xab, 0x74, 0x00, + 0xe0, 0xdd, 0x3d, 0xa7, 0x47, 0x7a, 0x9a, 0x53, 0xb3, 0x8e, 0x6e, 0xf4, 0x14, 0x29, 0xc9, + 0xa6, 0x46, 0x7b, 0x9b, 0x01, 0xe1, 0xdc, 0x3c, 0xf5, 0x15, 0x28, 0xc8, 0x52, 0xb2, 0x8f, + 0x6f, 0x51, 0xb1, 0x8c, 0x6c, 0xf6, 0x16, 0x2b, 0xcb, 0x02, 0xe2, 0xdf, 0x3f, 0xa5, 0x45, + 0x78, 0x98, 0xf7, 0x17, 0x2a, 0xca, 0x50, 0xb0, 0x8d, 0x6d, 0xa4, 0x44, 0x79, 0x99, 0x03, + 0xe3, 0xde, 0x3e, 0xa2, 0x42, 0x7f, 0x9f, 0x05, 0xe5, 0xd8, 0x38, 0xf1, 0x11, 0x2c, 0xcc, + 0x56, 0xb6, 0x8b, 0x6b, 0x04, 0xe4, 0xd9, 0x39, 0xa3, 0x43, 0x7e, 0x9e, 0x57, 0xb7, 0x8a, + 0x6a, 0xf0, 0x10, 0x2d, 0xcd, 0xf3, 0x13, 0x2e, 0xce, 0x54, 0xb4, 0x89, 0x69, 0xa0, 0x40, + 0x7d, 0x9d, 0x07, 0xe7, 0xda, 0x3a, 0x55, 0xb5, 0x88, 0x68, 0xf2, 0x12, 0x2f, 0xcf, 0x06, + 0xe6, 0xdb, 0x3b, 0xa1, 0x41, 0x7c, 0x9c, 0x59, 0xb9, 0x84, 0x64, 0xfe, 0x1e, 0x23, 0xc3, + 0x0a, 0xea, 0xd7, 0x37, 0xad, 0x4d, 0x70, 0x90, 0xff, 0x1f, 0x22, 0xc2, 0x58, 0xb8, 0x85, + 0x65, 0xac, 0x4c, 0x71, 0x91, 0x0b, 0xeb, 0xd6, 0x36, 0x08, 0xe8, 0xd5, 0x35, 0xaf, 0x4f, + 0x72, 0x92, 0x5b, 0xbb, 0x86, 0x66, 0xfc, 0x1c, 0x21, 0xc1, 0xae, 0x4e, 0x73, 0x93, 0x09, + 0xe9, 0xd4, 0x34, 0xfd, 0x1d, 0x20, 0xc0, 0x5a, 0xba, 0x87, 0x67, 0xfb, 0x1b, 0x26, 0xc6, + 0x5c, 0xbc, 0x81, 0x61, 0xa8, 0x48, 0x75, 0x95, 0x0f, 0xef, 0xd2, 0x32, 0x5d, 0xbd, 0x80, + 0x60, 0xfa, 0x1a, 0x27, 0xc7, 0x0e, 0xee, 0xd3, 0x33, 0xa9, 0x49, 0x74, 0x94, 0xaa, 0x4a, + 0x77, 0x97, 0x0d, 0xed, 0xd0, 0x30, 0xf9, 0x19, 0x24, 0xc4, 0x5e, 0xbe, 0x83, 0x63, 0x0c, + 0xec, 0xd1, 0x31, 0xab, 0x4b, 0x76, 0x96, 0x5f, 0xbf, 0x82, 0x62, 0xf8, 0x18, 0x25, 0xc5, + 0x00, 0xe1, 0xdf, 0x3e, 0xa3, 0x42, 0x7c, 0x9d, 0x5b, 0xba, 0x84, 0x65, 0xf8, 0x19, 0x27, + 0xc6, 0xb6, 0x57, 0x69, 0x88, 0x15, 0xf4, 0xca, 0x2b, 0xed, 0x0c, 0x32, 0xd3, 0x4e, 0xaf, + 0x91, 0x70, 0x71, 0x90, 0xae, 0x4f, 0xd2, 0x33, 0x0d, 0xec, 0x2a, 0xcb, 0xf5, 0x14, 0x89, + 0x68, 0x56, 0xb7, 0xc7, 0x26, 0x18, 0xf9, 0x64, 0x85, 0xbb, 0x5a, 0x9c, 0x7d, 0x43, 0xa2, + 0x3f, 0xde, 0xe0, 0x01, 0xe2, 0x03, 0x3d, 0xdc, 0x41, 0xa0, 0x9e, 0x7f, 0xb9, 0x58, 0x66, + 0x87, 0x1a, 0xfb, 0xc5, 0x24, 0x54, 0xb5, 0x8b, 0x6a, 0xf7, 0x16, 0x28, 0xc9, 0x0f, 0xee, + 0xd0, 0x31, 0xac, 0x4d, 0x73, 0x92, 0x93, 0x72, 0x4c, 0xad, 0x30, 0xd1, 0xef, 0x0e, 0xc8, + 0x29, 0x17, 0xf6, 0x6b, 0x8a, 0xb4, 0x55, 0x25, 0xc4, 0xfa, 0x1b, 0x86, 0x67, 0x59, 0xb8, + 0x7e, 0x9f, 0xa1, 0x40, 0xdd, 0x3c, 0x02, 0xe3, 0xd9, 0x38, 0x06, 0xe7, 0x7a, 0x9b, 0xa5, + 0x44, 0x82, 0x63, 0x5d, 0xbc, 0x21, 0xc0, 0xfe, 0x1f, 0x6f, 0x8e, 0xb0, 0x51, 0xcc, 0x2d, + 0x13, 0xf2, 0x34, 0xd5, 0xeb, 0x0a, 0x97, 0x76, 0x48, 0xa9, 0xa8, 0x49, 0x77, 0x96, 0x0b, + 0xea, 0xd4, 0x35, 0xf3, 0x12, 0x2c, 0xcd, 0x50, 0xb1, 0x8f, 0x6e, 0x1e, 0xff, 0xc1, 0x20, + 0xbd, 0x5c, 0x62, 0x83, 0x45, 0xa4, 0x9a, 0x7b, 0xe6, 0x07, 0x39, 0xd8, 0x3b, 0xda, 0xe4, + 0x05, 0x98, 0x79, 0x47, 0xa6, 0x60, 0x81, 0xbf, 0x5e, 0xc3, 0x22, 0x1c, 0xfd, 0x8d, 0x6c, + 0x52, 0xb3, 0x2e, 0xcf, 0xf1, 0x10, 0xd6, 0x37, 0x09, 0xe8, 0x75, 0x94, 0xaa, 0x4b, 0x4a, + 0xab, 0x95, 0x74, 0xe9, 0x08, 0x36, 0xd7, 0x11, 0xf0, 0xce, 0x2f, 0xb2, 0x53, 0x6d, 0x8c, + 0xfc, 0x1d, 0x23, 0xc2, 0x5f, 0xbe, 0x80, 0x61, 0xa7, 0x46, 0x78, 0x99, 0x04, 0xe5, 0xdb, + 0x3a, 0x00, 0xe2, 0xd9, 0x3b, 0xaf, 0x4d, 0x76, 0x94, 0x43, 0xa1, 0x9a, 0x78, 0xec, 0x0e, + 0x35, 0xd7, 0x86, 0x64, 0x5f, 0xbd, 0x29, 0xcb, 0xf0, 0x12, 0xc5, 0x27, 0x1c, 0xfe, 0x6a, + 0x88, 0xb3, 0x51, 0x11, 0xf3, 0xc8, 0x2a, 0xbe, 0x5c, 0x67, 0x85, 0x52, 0xb0, 0x8b, 0x69, + 0xfd, 0x1f, 0x24, 0xc6, 0x97, 0x75, 0x4e, 0xac, 0x38, 0xda, 0xe1, 0x03, 0xd4, 0x36, 0x0d, + 0xef, 0x7b, 0x99, 0xa2, 0x40, 0x22, 0xc0, 0xfb, 0x19, 0x8d, 0x6f, 0x54, 0xb6, 0x61, 0x83, + 0xb8, 0x5a, 0xce, 0x2c, 0x17, 0xf5, 0xa4, 0x46, 0x7d, 0x9f, 0x0b, 0xe9, 0xd2, 0x30, 0xe7, + 0x05, 0x3e, 0xdc, 0x48, 0xaa, 0x91, 0x73, 0x33, 0xd1, 0xea, 0x08, 0x9c, 0x7e, 0x45, 0xa7, + 0x70, 0x92, 0xa9, 0x4b, 0xdf, 0x3d, 0x06, 0xe4, 0xb5, 0x57, 0x6c, 0x8e, 0x1a, 0xf8, 0xc3, + 0x21, 0xf6, 0x14, 0x2f, 0xcd, 0x59, 0xbb, 0x80, 0x62, 0x44, 0xa6, 0x9d, 0x7f, 0xeb, 0x09, + 0x32, 0xd0, 0x07, 0xe5, 0xde, 0x3c, 0xa8, 0x4a, 0x71, 0x93, 0xc2, 0x20, 0x1b, 0xf9, 0x6d, + 0x8f, 0xb4, 0x56, 0x81, 0x63, 0x58, 0xba, 0x2e, 0xcc, 0xf7, 0x15, 0x55, 0xb7, 0x8c, 0x6e, + 0xfa, 0x18, 0x23, 0xc1, 0x16, 0xf4, 0xcf, 0x2d, 0xb9, 0x5b, 0x60, 0x82, 0xd3, 0x31, 0x0a, + 0xe8, 0x7c, 0x9e, 0xa5, 0x47, 0x90, 0x72, 0x49, 0xab, 0x3f, 0xdd, 0xe6, 0x04, 0x66, 0x84, + 0xbf, 0x5d, 0xc9, 0x2b, 0x10, 0xf2, 0x25, 0xc7, 0xfc, 0x1e, 0x8a, 0x68, 0x53, 0xb1, 0xe0, + 0x02, 0x39, 0xdb, 0x4f, 0xad, 0x96, 0x74, 0xa3, 0x41, 0x7a, 0x98, 0x0c, 0xee, 0xd5, 0x37, + 0x77, 0x95, 0xae, 0x4c, 0xd8, 0x3a, 0x01, 0xe3, 0x34, 0xd6, 0xed, 0x0f, 0x9b, 0x79, 0x42, + 0xa0, 0xf1, 0x13, 0x28, 0xca, 0x5e, 0xbc, 0x87, 0x65, 0xb2, 0x50, 0x6b, 0x89, 0x1d, 0xff, + 0xc4, 0x26, 0x00, 0xe3, 0xdb, 0x38, 0xab, 0x48, 0x70, 0x93, 0x4b, 0xa8, 0x90, 0x73, 0xe0, + 0x03, 0x3b, 0xd8, 0x96, 0x75, 0x4d, 0xae, 0x3d, 0xde, 0xe6, 0x05, 0xdd, 0x3e, 0x06, 0xe5, + 0x76, 0x95, 0xad, 0x4e, 0x31, 0xd2, 0xea, 0x09, 0x9a, 0x79, 0x41, 0xa2, 0x7a, 0x99, 0xa1, + 0x42, 0xd1, 0x32, 0x0a, 0xe9, 0xa7, 0x44, 0x7c, 0x9f, 0x0c, 0xef, 0xd7, 0x34, 0xec, 0x0f, + 0x37, 0xd4, 0x47, 0xa4, 0x9c, 0x7f, 0x62, 0x81, 0xb9, 0x5a, 0xc9, 0x2a, 0x12, 0xf1, 0x29, + 0xca, 0xf2, 0x11, 0x82, 0x61, 0x59, 0xba, 0xf4, 0x17, 0x2f, 0xcc, 0x5f, 0xbc, 0x84, 0x67, + 0xbf, 0x5c, 0x64, 0x87, 0x14, 0xf7, 0xcf, 0x2c, 0x53, 0xb0, 0x88, 0x6b, 0xf8, 0x1b, 0x23, + 0xc0, 0x18, 0xfb, 0xc3, 0x20, 0xb3, 0x50, 0x68, 0x8b, 0xc5, 0x26, 0x1e, 0xfd, 0x6e, 0x8d, + 0xb5, 0x56, 0x8e, 0x6d, 0x55, 0xb6, 0x25, 0xc6, 0xfe, 0x1d, 0xc4, 0x27, 0x1f, 0xfc, 0x6f, + 0x8c, 0xb4, 0x57, 0x8f, 0x6c, 0x54, 0xb7, 0x24, 0xc7, 0xff, 0x1c, 0x52, 0xb1, 0x89, 0x6a, + 0xf9, 0x1a, 0x22, 0xc1, 0x19, 0xfa, 0xc2, 0x21, 0xb2, 0x51, 0x69, 0x8a, 0xf5, 0x16, 0x2e, + 0xcd, 0x5e, 0xbd, 0x85, 0x66, 0xbe, 0x5d, 0x65, 0x86, 0x15, 0xf6, 0xce, 0x2d, 0x63, 0x80, + 0xb8, 0x5b, 0xc8, 0x2b, 0x13, 0xf0, 0x28, 0xcb, 0xf3, 0x10, 0x83, 0x60, 0x58, 0xbb, 0xa6, + 0x45, 0x7d, 0x9e, 0x0d, 0xee, 0xd6, 0x35, 0xed, 0x0e, 0x36, 0xd5, 0x46, 0xa5, 0x9d, 0x7e, + 0x30, 0xd3, 0xeb, 0x08, 0x9b, 0x78, 0x40, 0xa3, 0x7b, 0x98, 0xa0, 0x43, 0xd0, 0x33, 0x0b, + 0xe8, 0x97, 0x74, 0x4c, 0xaf, 0x3c, 0xdf, 0xe7, 0x04, 0xdc, 0x3f, 0x07, 0xe4, 0x77, 0x94, + 0xac, 0x4f, 0x01, 0xe2, 0xda, 0x39, 0xaa, 0x49, 0x71, 0x92, 0x4a, 0xa9, 0x91, 0x72, 0xe1, + 0x02, 0x3a, 0xd9, 0x00, 0xe4, 0xd5, 0x31, 0xb7, 0x53, 0x62, 0x86, 0x73, 0x97, 0xa6, 0x42, + 0xc4, 0x20, 0x11, 0xf5, 0xe6, 0x02, 0x33, 0xd7, 0x51, 0xb5, 0x84, 0x60, 0x95, 0x71, 0x40, + 0xa4, 0x22, 0xc6, 0xf7, 0x13, 0xd1, 0x35, 0x04, 0xe0, 0x66, 0x82, 0xb3, 0x57, 0xa2, 0x46, + 0x77, 0x93, 0x15, 0xf1, 0xc0, 0x24, 0x37, 0xd3, 0xe2, 0x06, 0x80, 0x64, 0x55, 0xb1, 0x44, + 0xa0, 0x91, 0x75, 0xf3, 0x17, 0x26, 0xc2, 0xbf, 0x5b, 0x6a, 0x8e, 0x08, 0xec, 0xdd, 0x39, + 0xcc, 0x28, 0x19, 0xfd, 0x7b, 0x9f, 0xae, 0x4a, 0x59, 0xbd, 0x8c, 0x68, 0xee, 0x0a, 0x3b, + 0xdf, 0x2a, 0xce, 0xff, 0x1b, 0x9d, 0x79, 0x48, 0xac, 0x6e, 0x8a, 0xbb, 0x5f, 0xd9, 0x3d, + 0x0c, 0xe8, 0x1d, 0xf9, 0xc8, 0x2c, 0xaa, 0x4e, 0x7f, 0x9b, 0x88, 0x6c, 0x5d, 0xb9, 0x3f, + 0xdb, 0xea, 0x0e, 0xfb, 0x1f, 0x2e, 0xca, 0x4c, 0xa8, 0x99, 0x7d, 0x63, 0x87, 0xb6, 0x52, + 0xd4, 0x30, 0x01, 0xe5, 0x10, 0xf4, 0xc5, 0x21, 0xa7, 0x43, 0x72, 0x96, 0x85, 0x61, 0x50, + 0xb4, 0x32, 0xd6, 0xe7, 0x03, 0xf6, 0x12, 0x23, 0xc7, 0x41, 0xa5, 0x94, 0x70, 0xb2, 0x56, + 0x67, 0x83, 0x05, 0xe1, 0xd0, 0x34, 0xc1, 0x25, 0x14, 0xf0, 0x76, 0x92, 0xa3, 0x47, 0x54, + 0xb0, 0x81, 0x65, 0xe3, 0x07, 0x36, 0xd2, 0x27, 0xc3, 0xf2, 0x16, 0x90, 0x74, 0x45, 0xa1, + 0xdc, 0x38, 0x09, 0xed, 0x6b, 0x8f, 0xbe, 0x5a, 0xaf, 0x4b, 0x7a, 0x9e, 0x18, 0xfc, 0xcd, + 0x29, 0x3a, 0xde, 0xef, 0x0b, 0x8d, 0x69, 0x58, 0xbc, 0x49, 0xad, 0x9c, 0x78, 0xfe, 0x1a, + 0x2b, 0xcf, 0x0d, 0xe9, 0xd8, 0x3c, 0xba, 0x5e, 0x6f, 0x8b, 0x7e, 0x9a, 0xab, 0x4f, 0xc9, + 0x2d, 0x1c, 0xf8, 0xeb, 0x0f, 0x3e, 0xda, 0x5c, 0xb8, 0x89, 0x6d, 0x98, 0x7c, 0x4d, 0xa9, + 0x2f, 0xcb, 0xfa, 0x1e, 0x00, 0xe5, 0xd7, 0x32, 0xb3, 0x56, 0x64, 0x81, 0x7b, 0x9e, 0xac, + 0x49, 0xc8, 0x2d, 0x1f, 0xfa, 0xf6, 0x13, 0x21, 0xc4, 0x45, 0xa0, 0x92, 0x77, 0x8d, 0x68, + 0x5a, 0xbf, 0x3e, 0xdb, 0xe9, 0x0c, 0xf1, 0x14, 0x26, 0xc3, 0x42, 0xa7, 0x95, 0x70, 0x8a, + 0x6f, 0x5d, 0xb8, 0x39, 0xdc, 0xee, 0x0b, 0x07, 0xe2, 0xd0, 0x35, 0xb4, 0x51, 0x63, 0x86, + 0x7c, 0x99, 0xab, 0x4e, 0xcf, 0x2a, 0x18, 0xfd, 0xff, 0x1a, 0x28, 0xcd, 0x4c, 0xa9, 0x9b, + 0x7e, 0x84, 0x61, 0x53, 0xb6, 0x37, 0xd2, 0xe0, 0x05, 0x09, 0xec, 0xde, 0x3b, 0xba, 0x5f, + 0x6d, 0x88, 0x72, 0x97, 0xa5, 0x40, 0xc1, 0x24, 0x16, 0xf3, 0x0e, 0xeb, 0xd9, 0x3c, 0xbd, + 0x58, 0x6a, 0x8f, 0x75, 0x90, 0xa2, 0x47, 0xc6, 0x23, 0x11, 0xf4, 0xf8, 0x1d, 0x2f, 0xca, + 0x4b, 0xae, 0x9c, 0x79, 0x83, 0x66, 0x54, 0xb1, 0x30, 0xd5, 0xe7, 0x02, 0xe3, 0x06, 0x34, + 0xd1, 0x50, 0xb5, 0x87, 0x62, 0x98, 0x7d, 0x4f, 0xaa, 0x2b, 0xce, 0xfc, 0x19, 0x15, 0xf0, + 0xc2, 0x27, 0xa6, 0x43, 0x71, 0x94, 0x6e, 0x8b, 0xb9, 0x5c, 0xdd, 0x38, 0x0a, 0xef, 0x12, + 0xf7, 0xc5, 0x20, 0xa1, 0x44, 0x76, 0x93, 0x69, 0x8c, 0xbe, 0x5b, 0xda, 0x3f, 0x0d, 0xe8, + 0xe4, 0x01, 0x33, 0xd6, 0x57, 0xb2, 0x80, 0x65, 0x9f, 0x7a, 0x48, 0xad, 0x2c, 0xc9, 0xfb, + 0x1e, 0x1c, 0xf9, 0xcb, 0x2e, 0xaf, 0x4a, 0x78, 0x9d, 0x67, 0x82, 0xb0, 0x55, 0xd4, 0x31, + 0x03, 0xe6, 0xea, 0x0f, 0x3d, 0xd8, 0x59, 0xbc, 0x8e, 0x6b, 0x91, 0x74, 0x46, 0xa3, 0x22, + 0xc7, 0xf5, 0x10, 0xed, 0x08, 0x3a, 0xdf, 0x5e, 0xbb, 0x89, 0x6c, 0x96, 0x73, 0x41, 0xa4, + 0x25, 0xc0, 0xf2, 0x17, 0x1b, 0xfe, 0xcc, 0x29, 0xa8, 0x4d, 0x7f, 0x9a, 0x60, 0x85, 0xb7, + 0x52, 0xd3, 0x36, 0x04, 0xe1, 0x00, 0xe6, 0xd1, 0x37, 0xbf, 0x59, 0x6e, 0x88, 0x63, 0x85, + 0xb2, 0x54, 0xdc, 0x3a, 0x0d, 0xeb, 0xc6, 0x20, 0x17, 0xf1, 0x79, 0x9f, 0xa8, 0x4e, 0xa5, + 0x43, 0x74, 0x92, 0x1a, 0xfc, 0xcb, 0x2d, 0x91, 0x77, 0x40, 0xa6, 0x2e, 0xc8, 0xff, 0x19, + 0xf2, 0x14, 0x23, 0xc5, 0x4d, 0xab, 0x9c, 0x7a, 0x57, 0xb1, 0x86, 0x60, 0xe8, 0x0e, 0x39, + 0xdf, 0x34, 0xd2, 0xe5, 0x03, 0x8b, 0x6d, 0x5a, 0xbc, 0x3f, 0xd9, 0xee, 0x08, 0x80, 0x66, + 0x51, 0xb7, 0x5c, 0xba, 0x8d, 0x6b, 0xe3, 0x05, 0x32, 0xd4, 0xf9, 0x1f, 0x28, 0xce, 0x46, + 0xa0, 0x97, 0x71, 0x9a, 0x7c, 0x4b, 0xad, 0x25, 0xc3, 0xf4, 0x12, 0xae, 0x48, 0x7f, 0x99, + 0x11, 0xf7, 0xc0, 0x26, 0xcd, 0x2b, 0x1c, 0xfa, 0x72, 0x94, 0xa3, 0x45, 0x68, 0x8e, 0xb9, + 0x5f, 0xd7, 0x31, 0x06, 0xe0, 0x0b, 0xed, 0xda, 0x3c, 0xb4, 0x52, 0x65, 0x83, 0x7e, 0x98, + 0xaf, 0x49, 0xc1, 0x27, 0x10, 0xf6, 0x1d, 0xfb, 0xcc, 0x2a, 0xa2, 0x44, 0x73, 0x95, 0xb8, + 0x5e, 0x69, 0x8f, 0x07, 0xe1, 0xd6, 0x30, 0xdb, 0x3d, 0x0a, 0xec, 0x64, 0x82, 0xb5, 0x53, + 0xef, 0x09, 0x3e, 0xd8, 0x50, 0xb6, 0x81, 0x67, 0x8c, 0x6a, 0x5d, 0xbb, 0x33, 0xd5, 0xe2, + 0x04, 0x29, 0xcf, 0xf8, 0x1e, 0x96, 0x70, 0x47, 0xa1, 0x4a, 0xac, 0x9b, 0x7d, 0xf5, 0x13, + 0x24, 0xc2, 0x41, 0xa7, 0x90, 0x76, 0xfe, 0x18, 0x2f, 0xc9, 0x22, 0xc4, 0xf3, 0x15, 0x9d, + 0x7b, 0x4c, 0xaa, 0x87, 0x61, 0x56, 0xb0, 0x38, 0xde, 0xe9, 0x0f, 0xe4, 0x02, 0x35, 0xd3, + 0x5b, 0xbd, 0x8a, 0x6c, 0xd0, 0x36, 0x01, 0xe7, 0x6f, 0x89, 0xbe, 0x58, 0xb3, 0x55, 0x62, + 0x84, 0x0c, 0xea, 0xdd, 0x3b, 0x16, 0xf0, 0xc7, 0x21, 0xa9, 0x4f, 0x78, 0x9e, 0x75, 0x93, + 0xa4, 0x42, 0xca, 0x2c, 0x1b, 0xfd, 0x00, 0xe7, 0xd3, 0x34, 0xbb, 0x5c, 0x68, 0x8f, 0x6b, + 0x8c, 0xb8, 0x5f, 0xd0, 0x37, 0x03, 0xe4, 0xd6, 0x31, 0x05, 0xe2, 0x6d, 0x8a, 0xbe, 0x59, + 0xbd, 0x5a, 0x6e, 0x89, 0x06, 0xe1, 0xd5, 0x32, 0xb1, 0x56, 0x62, 0x85, 0x0a, 0xed, 0xd9, + 0x3e, 0xda, 0x3d, 0x09, 0xee, 0x61, 0x86, 0xb2, 0x55, 0x67, 0x80, 0xb4, 0x53, 0xdc, 0x3b, + 0x0f, 0xe8, 0x0c, 0xeb, 0xdf, 0x38, 0xb7, 0x50, 0x64, 0x83, 0x7f, 0x98, 0xac, 0x4b, 0xc4, + 0x23, 0x17, 0xf0, 0x14, 0xf3, 0xc7, 0x20, 0xaf, 0x48, 0x7c, 0x9b, 0xa9, 0x4e, 0x7a, 0x9d, + 0x12, 0xf5, 0xc1, 0x26, 0xc2, 0x25, 0x11, 0xf6, 0x79, 0x9e, 0xaa, 0x4d, 0xce, 0x29, 0x1d, + 0xfa, 0x75, 0x92, 0xa6, 0x41, 0xa5, 0x42, 0x76, 0x91, 0x1e, 0xf9, 0xcd, 0x2a, 0x18, 0xff, + 0xcb, 0x2c, 0xa3, 0x44, 0x70, 0x97, 0x73, 0x94, 0xa0, 0x47, 0xc8, 0x2f, 0x1b, 0xfc, 0xfe, + 0x19, 0x2d, 0xca, 0x45, 0xa2, 0x96, 0x71, 0x95, 0x72, 0x46, 0xa1, 0x2e, 0xc9, 0xfd, 0x1a, + 0x28, 0xcf, 0xfb, 0x1c, 0x93, 0x74, 0x40, 0xa7, 0x43, 0xa4, 0x90, 0x77, 0xf8, 0x1f, 0x2b, + 0xcc, 0x4f, 0xa8, 0x9c, 0x7b, 0xf4, 0x13, 0x27, 0xc0, 0x24, 0xc3, 0xf7, 0x10, 0x9f, 0x78, + 0x4c, 0xab, 0x99, 0x7e, 0x4a, 0xad, 0x22, 0xc5, 0xf1, 0x16, 0xf2, 0x15, 0x21, 0xc6, 0x49, + 0xae, 0x9a, 0x7d, 0x81, 0x66, 0x52, 0xb5, 0x3a, 0xdd, 0xe9, 0x0e, 0xea, 0x0d, 0x39, 0xde, + 0x51, 0xb6, 0x82, 0x65, 0x57, 0xb0, 0x84, 0x63, 0xec, 0x0b, 0x3f, 0xd8, 0x3c, 0xdb, 0xef, + 0x08, 0x87, 0x60, 0x54, 0xb3, 0x30, 0xd7, 0xe3, 0x04, 0x8b, 0x6c, 0x58, 0xbf, 0x5b, 0xbc, + 0x88, 0x6f, 0xe0, 0x07, 0x33, 0xd4, 0xe6, 0x01, 0x35, 0xd2, 0x5d, 0xba, 0x8e, 0x69, 0x8d, + 0x6a, 0x5e, 0xb9, 0x36, 0xd1, 0xe5, 0x02, 0x00, 0xe8, 0xcd, 0x25, 0x87, 0x6f, 0x4a, 0xa2, + 0x13, 0xfb, 0xde, 0x36, 0x94, 0x7c, 0x59, 0xb1, 0x26, 0xce, 0xeb, 0x03, 0xa1, 0x49, 0x6c, + 0x84, 0x35, 0xdd, 0xf8, 0x10, 0xb2, 0x5a, 0x7f, 0x97, 0x4c, 0xa4, 0x81, 0x69, 0xcb, 0x23, + 0x06, 0xee, 0x5f, 0xb7, 0x92, 0x7a, 0xd8, 0x30, 0x15, 0xfd, 0x6a, 0x82, 0xa7, 0x4f, 0xed, + 0x05, 0x20, 0xc8, 0x79, 0x91, 0xb4, 0x5c, 0xfe, 0x16, 0x33, 0xdb, 0x98, 0x70, 0x55, 0xbd, + 0x1f, 0xf7, 0xd2, 0x3a, 0x8b, 0x63, 0x46, 0xae, 0x0c, 0xe4, 0xc1, 0x29, 0xbe, 0x56, 0x73, + 0x9b, 0x39, 0xd1, 0xf4, 0x1c, 0xad, 0x45, 0x60, 0x88, 0x2a, 0xc2, 0xe7, 0x0f, 0xd4, 0x3c, + 0x19, 0xf1, 0x53, 0xbb, 0x9e, 0x76, 0xc7, 0x2f, 0x0a, 0xe2, 0x40, 0xa8, 0x8d, 0x65, 0xf2, + 0x1a, 0x3f, 0xd7, 0x75, 0x9d, 0xb8, 0x50, 0xe1, 0x09, 0x2c, 0xc4, 0x66, 0x8e, 0xab, 0x43, + 0x2d, 0xc5, 0xe0, 0x08, 0xaa, 0x42, 0x67, 0x8f, 0x3e, 0xd6, 0xf3, 0x1b, 0xb9, 0x51, 0x74, + 0x9c, 0x0b, 0xe3, 0xc6, 0x2e, 0x8c, 0x64, 0x41, 0xa9, 0x18, 0xf0, 0xd5, 0x3d, 0x9f, 0x77, + 0x52, 0xba, 0x61, 0x89, 0xac, 0x44, 0xe6, 0x0e, 0x2b, 0xc3, 0x72, 0x9a, 0xbf, 0x57, 0xf5, + 0x1d, 0x38, 0xd0, 0x47, 0xaf, 0x8a, 0x62, 0xc0, 0x28, 0x0d, 0xe5, 0x54, 0xbc, 0x99, 0x71, + 0xd3, 0x3b, 0x1e, 0xf6, 0xb5, 0x5d, 0x78, 0x90, 0x32, 0xda, 0xff, 0x17, 0xa6, 0x4e, 0x6b, + 0x83, 0x21, 0xc9, 0xec, 0x04, 0x93, 0x7b, 0x5e, 0xb6, 0x14, 0xfc, 0xd9, 0x31, 0x80, 0x68, + 0x4d, 0xa5, 0x07, 0xef, 0xca, 0x22, 0xf9, 0x11, 0x34, 0xdc, 0x7e, 0x96, 0xb3, 0x5b, 0xea, + 0x02, 0x27, 0xcf, 0x6d, 0x85, 0xa0, 0x48, 0xdf, 0x37, 0x12, 0xfa, 0x58, 0xb0, 0x95, 0x7d, + 0xcc, 0x24, 0x01, 0xe9, 0x4b, 0xa3, 0x86, 0x6e, 0x00, 0xe9, 0xcf, 0x26, 0x83, 0x6a, 0x4c, + 0xa5, 0x1b, 0xf2, 0xd4, 0x3d, 0x98, 0x71, 0x57, 0xbe, 0x36, 0xdf, 0xf9, 0x10, 0xb5, 0x5c, + 0x7a, 0x93, 0x2d, 0xc4, 0xe2, 0x0b, 0xae, 0x47, 0x61, 0x88, 0x6c, 0x85, 0xa3, 0x4a, 0xef, + 0x06, 0x20, 0xc9, 0x77, 0x9e, 0xb8, 0x51, 0xf4, 0x1d, 0x3b, 0xd2, 0x5a, 0xb3, 0x95, 0x7c, + 0xd9, 0x30, 0x16, 0xff, 0x41, 0xa8, 0x8e, 0x67, 0xc2, 0x2b, 0x0d, 0xe4, 0xd8, 0x31, 0x17, + 0xfe, 0x5b, 0xb2, 0x94, 0x7d, 0xc3, 0x2a, 0x0c, 0xe5, 0x40, 0xa9, 0x8f, 0x66, 0xee, 0x07, + 0x21, 0xc8, 0x6d, 0x84, 0xa2, 0x4b, 0xf5, 0x1c, 0x3a, 0xd3, 0x76, 0x9f, 0xb9, 0x50, 0xb4, + 0x5d, 0x7b, 0x92, 0x37, 0xde, 0xf8, 0x11, 0xaf, 0x46, 0x60, 0x89, 0x2c, 0xc5, 0xe3, 0x0a, + 0x82, 0x6b, 0x4d, 0xa4, 0x01, 0xe8, 0xce, 0x27, 0x99, 0x70, 0x56, 0xbf, 0x1a, 0xf3, 0xd5, + 0x3c, 0xad, 0x44, 0x62, 0x8b, 0x2e, 0xc7, 0xe1, 0x08, 0xb6, 0x5f, 0x79, 0x90, 0x35, 0xdc, + 0xfa, 0x13, 0x9b, 0x72, 0x54, 0xbd, 0x18, 0xf1, 0xd7, 0x3e, 0x80, 0x69, 0x4f, 0xa6, 0x03, + 0xea, 0xcc, 0x25, 0xc1, 0x28, 0x0e, 0xe7, 0x42, 0xab, 0x8d, 0x64, 0xda, 0x33, 0x15, 0xfc, + 0x59, 0xb0, 0x96, 0x7f, 0xf7, 0x1e, 0x38, 0xd1, 0x74, 0x9d, 0xbb, 0x52, 0xec, 0x05, 0x23, + 0xca, 0x6f, 0x86, 0xa0, 0x49, 0x75, 0x9c, 0xba, 0x53, 0xf6, 0x1f, 0x39, 0xd0, 0x6e, 0x87, + 0xa1, 0x48, 0xed, 0x04, 0x22, 0xcb, 0x43, 0xaa, 0x8c, 0x65, 0xc0, 0x29, 0x0f, 0xe6, 0x58, + 0xb1, 0x97, 0x7e, 0xdb, 0x32, 0x14, 0xfd, 0x19, 0xf0, 0xd6, 0x3f, 0x9a, 0x73, 0x55, 0xbc, + 0x02, 0xeb, 0xcd, 0x24, 0x81, 0x68, 0x4e, 0xa7, 0x2f, 0xc6, 0xe0, 0x09, 0xac, 0x45, 0x63, + 0x8a, 0x34, 0xdd, 0xfb, 0x12, 0xb7, 0x5e, 0x78, 0x91, 0x00, 0xea, 0xc9, 0x23, 0x8f, 0x65, + 0x46, 0xac, 0x03, 0xe9, 0xca, 0x20, 0x8c, 0x66, 0x45, 0xaf, 0x06, 0xec, 0xcf, 0x25, 0x89, + 0x63, 0x40, 0xaa, 0x05, 0xef, 0xcc, 0x26, 0x8a, 0x60, 0x43, 0xa9, 0x0c, 0xe6, 0xc5, 0x2f, + 0x83, 0x69, 0x4a, 0xa0, 0x0f, 0xe5, 0xc6, 0x2c, 0x80, 0x6a, 0x49, 0xa3, 0x0a, 0xe0, 0xc3, + 0x29, 0x85, 0x6f, 0x4c, 0xa6, 0x09, 0xe3, 0xc0, 0x2a, 0x86, 0x6c, 0x4f, 0xa5, 0x18, 0xf2, + 0xd1, 0x3b, 0x97, 0x7d, 0x5e, 0xb4, 0x1b, 0xf1, 0xd2, 0x38, 0x94, 0x7e, 0x5d, 0xb7, 0x1e, + 0xf4, 0xd7, 0x3d, 0x91, 0x7b, 0x58, 0xb2, 0x1d, 0xf7, 0xd4, 0x3e, 0x92, 0x78, 0x5b, 0xb1, + 0x14, 0xfe, 0xdd, 0x37, 0x9b, 0x71, 0x52, 0xb8, 0x17, 0xfd, 0xde, 0x34, 0x98, 0x72, 0x51, + 0xbb, 0x12, 0xf8, 0xdb, 0x31, 0x9d, 0x77, 0x54, 0xbe, 0x11, 0xfb, 0xd8, 0x32, 0x9e, 0x74, + 0x57, 0xbd, 0x30, 0xda, 0xf9, 0x13, 0xbf, 0x55, 0x76, 0x9c, 0x33, 0xd9, 0xfa, 0x10, 0xbc, + 0x56, 0x75, 0x9f, 0x36, 0xdc, 0xff, 0x15, 0xb9, 0x53, 0x70, 0x9a, 0x35, 0xdf, 0xfc, 0x16, + 0xba, 0x50, 0x73, 0x99, 0x3c, 0xd6, 0xf5, 0x1f, 0xb3, 0x59, 0x7a, 0x90, 0x3f, 0xd5, 0xf6, + 0x1c, 0xb0, 0x5a, 0x79, 0x93, 0x3a, 0xd0, 0xf3, 0x19, 0xb5, 0x5f, 0x7c, 0x96, 0x39, 0xd3, + 0xf0, 0x1a, 0xb6, 0x5c, 0x7f, 0x95, 0x28, 0xc2, 0xe1, 0x0b, 0xa7, 0x4d, 0x6e, 0x84, 0x2b, + 0xc1, 0xe2, 0x08, 0xa4, 0x4e, 0x6d, 0x87, 0x2e, 0xc4, 0xe7, 0x0d, 0xa1, 0x4b, 0x68, 0x82, + 0x2d, 0xc7, 0xe4, 0x0e, 0xa2, 0x48, 0x6b, 0x81, 0x24, 0xce, 0xed, 0x07, 0xab, 0x41, 0x62, + 0x88, 0x27, 0xcd, 0xee, 0x04, 0xa8, 0x42, 0x61, 0x8b, 0x22, 0xc8, 0xeb, 0x01, 0xad, 0x47, + 0x64, 0x8e, 0x21, 0xcb, 0xe8, 0x02, 0xae, 0x44, 0x67, 0x8d, 0x00, 0xeb, 0xcb, 0x20, 0x8b, + 0x60, 0x40, 0xab, 0x0b, 0xe0, 0xc0, 0x2b, 0x80, 0x6b, 0x4b, 0xa0, 0x16, 0xfd, 0xdd, 0x36, + 0x9d, 0x76, 0x56, 0xbd, 0x1d, 0xf6, 0xd6, 0x3d, 0x96, 0x7d, 0x5d, 0xb6, 0x2c, 0xc7, 0xe7, + 0x0c, 0xa7, 0x4c, 0x6c, 0x87, 0x27, 0xcc, 0xec, 0x07, 0xac, 0x47, 0x67, 0x8c, 0x3a, 0xd1, + 0xf1, 0x1a, 0xb1, 0x5a, 0x7a, 0x91, 0x31, 0xda, 0xfa, 0x11, 0xba, 0x51, 0x71, 0x9a, 0x58, + 0xb3, 0x93, 0x78, 0xd3, 0x38, 0x18, 0xf3, 0x53, 0xb8, 0x98, 0x73, 0xd8, 0x33, 0x13, 0xf8, + 0x4e, 0xa5, 0x85, 0x6e, 0xc5, 0x2e, 0x0e, 0xe5, 0x45, 0xae, 0x8e, 0x65, 0xce, 0x25, 0x05, + 0xee, 0x74, 0x9f, 0xbf, 0x54, 0xff, 0x14, 0x34, 0xdf, 0x7f, 0x94, 0xb4, 0x5f, 0xf4, 0x1f, + 0x3f, 0xd4, 0x62, 0x89, 0xa9, 0x42, 0xe9, 0x02, 0x22, 0xc9, 0x69, 0x82, 0xa2, 0x49, 0xe2, + 0x09, 0x29, 0xc2, 0xb0, 0x5b, 0x7b, 0x90, 0x3b, 0xd0, 0xf0, 0x1b, 0xbb, 0x50, 0x70, 0x9b, + 0x30, 0xdb, 0xfb, 0x10, 0xa6, 0x4d, 0x6d, 0x86, 0x2d, 0xc6, 0xe6, 0x0d, 0xad, 0x46, 0x66, + 0x8d, 0x26, 0xcd, 0xed, 0x06, 0x9c, 0x77, 0x57, 0xbc, 0x17, 0xfc, 0xdc, 0x37, 0x97, 0x7c, + 0x5c, 0xb7, 0x1c, 0xf7, 0xd7, 0x3c, 0x8a, 0x61, 0x41, 0xaa, 0x01, 0xea, 0xca, 0x21, 0x81, + 0x6a, 0x4a, 0xa1, 0x0a, 0xe1, 0xc1, 0x2a, 0xe8, 0x03, 0x23, 0xc8, 0x63, 0x88, 0xa8, 0x43, + 0xe3, 0x08, 0x28, 0xc3, 0x68, 0x83, 0xa3, 0x48, 0xfe, 0x15, 0x35, 0xde, 0x75, 0x9e, 0xbe, + 0x55, 0xf5, 0x1e, 0x3e, 0xd5, 0x7e, 0x95, 0xb5, 0x5e, 0xc4, 0x2f, 0x0f, 0xe4, 0x4f, 0xa4, + 0x84, 0x6f, 0xcf, 0x24, 0x04, 0xef, 0x44, 0xaf, 0x8f, 0x64, 0xd2, 0x39, 0x19, 0xf2, 0x59, + 0xb2, 0x92, 0x79, 0xd9, 0x32, 0x12, 0xf9, 0x52, 0xb9, 0x99, 0x72, 0x00, 0xec, 0xc5, 0x29, + 0x97, 0x7b, 0x52, 0xbe, 0x33, 0xdf, 0xf6, 0x1a, 0xa4, 0x48, 0x61, 0x8d, 0x66, 0x8a, 0xa3, + 0x4f, 0xf1, 0x1d, 0x34, 0xd8, 0x55, 0xb9, 0x90, 0x7c, 0xc2, 0x2e, 0x07, 0xeb, 0xcc, 0x20, + 0x09, 0xe5, 0x5b, 0xb7, 0x9e, 0x72, 0xff, 0x13, 0x3a, 0xd6, 0x68, 0x84, 0xad, 0x41, 0xaa, + 0x46, 0x6f, 0x83, 0x3d, 0xd1, 0xf8, 0x14, 0x99, 0x75, 0x5c, 0xb0, 0x0e, 0xe2, 0xcb, 0x27, + 0x85, 0x69, 0x40, 0xac, 0x12, 0xfe, 0xd7, 0x3b, 0xb6, 0x5a, 0x73, 0x9f, 0x21, 0xcd, 0xe4, + 0x08, 0xe3, 0x0f, 0x26, 0xca, 0x74, 0x98, 0xb1, 0x5d, 0xd0, 0x3c, 0x15, 0xf9, 0x47, 0xab, + 0x82, 0x6e, 0x49, 0xa5, 0x8c, 0x60, 0xde, 0x32, 0x1b, 0xf7, 0x7a, 0x96, 0xbf, 0x53, 0xed, + 0x01, 0x28, 0xc4, 0x2f, 0xc3, 0xea, 0x06, 0xb8, 0x54, 0x7d, 0x91, 0x1c, 0xf0, 0xd9, 0x35, + 0x8b, 0x67, 0x4e, 0xa2, 0x17, 0xfb, 0xd2, 0x3e, 0x80, 0x6c, 0x45, 0xa9, 0x24, 0xc8, 0xe1, + 0x0d, 0xb3, 0x5f, 0x76, 0x9a, 0x71, 0x9d, 0xb4, 0x58, 0xe6, 0x0a, 0x23, 0xcf, 0x42, 0xae, + 0x87, 0x6b, 0xd5, 0x39, 0x10, 0xfc, 0xdb, 0x37, 0x1e, 0xf2, 0x4c, 0xa0, 0x89, 0x65, 0xe8, + 0x04, 0x2d, 0xc1, 0x7f, 0x93, 0xba, 0x56, 0xbd, 0x51, 0x78, 0x94, 0x2a, 0xc6, 0xef, 0x03, + 0x8e, 0x62, 0x4b, 0xa7, 0x19, 0xf5, 0xdc, 0x30, 0x92, 0x7e, 0x57, 0xbb, 0x05, 0xe9, 0xc0, + 0x2c, 0xa1, 0x4d, 0x64, 0x88, 0x36, 0xda, 0xf3, 0x1f, 0xf4, 0x18, 0x31, 0xdd, 0x63, 0x8f, + 0xa6, 0x4a, 0xc7, 0x2b, 0x02, 0xee, 0x50, 0xbc, 0x95, 0x79, 0x5e, 0xb2, 0x9b, 0x77, 0xc9, + 0x25, 0x0c, 0xe0, 0x6d, 0x81, 0xa8, 0x44, 0xfa, 0x16, 0x3f, 0xd3, 0x38, 0xd4, 0xfd, 0x11, + 0xaf, 0x43, 0x6a, 0x86, 0x0b, 0xe7, 0xce, 0x22, 0x9c, 0x70, 0x59, 0xb5, 0x00, 0xed, 0xc7, + 0x2a, 0x93, 0x7e, 0x54, 0xb9, 0x3b, 0xd6, 0xfc, 0x11, 0xa8, 0x45, 0x6f, 0x82, 0x76, 0x9b, + 0xb1, 0x5c, 0xe5, 0x08, 0x22, 0xcf, 0x4d, 0xa0, 0x8a, 0x67, 0xde, 0x33, 0x19, 0xf4, 0xec, + 0x01, 0x2b, 0xc6, 0x7f, 0x92, 0xb8, 0x55, 0xd7, 0x3a, 0x10, 0xfd, 0x44, 0xa9, 0x83, 0x6e, + 0x9a, 0x77, 0x5d, 0xb0, 0x09, 0xe4, 0xce, 0x23, 0xa1, 0x4c, 0x66, 0x8b, 0x32, 0xdf, 0xf5, + 0x18, 0xc5, 0x28, 0x02, 0xef, 0x56, 0xbb, 0x91, 0x7c, 0xfe, 0x13, 0x39, 0xd4, 0x6d, 0x80, + 0xaa, 0x47, 0xb3, 0x5e, 0x74, 0x99, 0x20, 0xcd, 0xe7, 0x0a, 0x88, 0x65, 0x4f, 0xa2, 0x1b, + 0xf6, 0xdc, 0x31, 0x29, 0xc4, 0xee, 0x03, 0xba, 0x57, 0x7d, 0x90, 0x12, 0xff, 0xd5, 0x38, + 0x81, 0x6c, 0x46, 0xab, 0x5f, 0xb2, 0x98, 0x75, 0xcc, 0x21, 0x0b, 0xe6, 0x64, 0x89, 0xa3, + 0x4e, 0xf7, 0x1a, 0x30, 0xdd, 0x97, 0x7a, 0x50, 0xbd, 0x04, 0xe9, 0xc3, 0x2e, 0xac, 0x41, + 0x6b, 0x86, 0x3f, 0xd2, 0xf8, 0x15, 0xe1, 0x0c, 0x26, 0xcb, 0x72, 0x9f, 0xb5, 0x58, 0xda, + 0x37, 0x1d, 0xf0, 0x49, 0xa4, 0x8e, 0x63, 0x7b, 0x96, 0xbc, 0x51, 0xe8, 0x05, 0x2f, 0xc2, + 0x40, 0xad, 0x87, 0x6a, 0xd3, 0x3e, 0x14, 0xf9, 0x0d, 0xe0, 0xca, 0x27, 0x9e, 0x73, 0x59, + 0xb4, 0x36, 0xdb, 0xf1, 0x1c, 0xa5, 0x48, 0x62, 0x8f, 0x52, 0xbf, 0x95, 0x78, 0xc1, 0x2c, + 0x06, 0xeb, 0x69, 0x84, 0xae, 0x43, 0xfa, 0x17, 0x3d, 0xd0, 0x24, 0xc9, 0xe3, 0x0e, 0xb7, + 0x5a, 0x70, 0x9d, 0x1f, 0xf2, 0xd8, 0x35, 0x8c, 0x61, 0x4b, 0xa6, 0xbe, 0x53, 0x79, 0x94, + 0x2d, 0xc0, 0xea, 0x07, 0x85, 0x68, 0x42, 0xaf, 0x16, 0xfb, 0xd1, 0x3c, 0xc8, 0x25, 0x0f, + 0xe2, 0x5b, 0xb6, 0x9c, 0x71, 0xf3, 0x1e, 0x34, 0xd9, 0x60, 0x8d, 0xa7, 0x4a, 0x00, 0xee, + 0xc1, 0x2f, 0x9f, 0x71, 0x5e, 0xb0, 0x23, 0xcd, 0xe2, 0x0c, 0xbc, 0x52, 0x7d, 0x93, 0x46, + 0xa8, 0x87, 0x69, 0xd9, 0x37, 0x18, 0xf6, 0x65, 0x8b, 0xa4, 0x4a, 0xfa, 0x14, 0x3b, 0xd5, + 0x8c, 0x62, 0x4d, 0xa3, 0x13, 0xfd, 0xd2, 0x3c, 0xaf, 0x41, 0x6e, 0x80, 0x30, 0xde, 0xf1, + 0x1f, 0xca, 0x24, 0x0b, 0xe5, 0x55, 0xbb, 0x94, 0x7a, 0xe9, 0x07, 0x28, 0xc6, 0x76, 0x98, + 0xb7, 0x59, 0x05, 0xeb, 0xc4, 0x2a, 0x9a, 0x74, 0x5b, 0xb5, 0x26, 0xc8, 0xe7, 0x09, 0xb9, + 0x57, 0x78, 0x96, 0x43, 0xad, 0x82, 0x6c, 0xdc, 0x32, 0x1d, 0xf3, 0x60, 0x8e, 0xa1, 0x4f, + 0xff, 0x11, 0x3e, 0xd0, 0x89, 0x67, 0x48, 0xa6, 0x16, 0xf8, 0xd7, 0x39, 0xaa, 0x44, 0x6b, + 0x85, 0x35, 0xdb, 0xf4, 0x1a, 0xcf, 0x21, 0x0e, 0xe0, 0x50, 0xbe, 0x91, 0x7f, 0xec, 0x02, + 0x2d, 0xc3, 0x73, 0x9d, 0xb2, 0x5c, 0x0a, 0xe4, 0xcb, 0x25, 0x95, 0x7b, 0x54, 0xba, 0x29, + 0xc7, 0xe8, 0x06, 0xb6, 0x58, 0x77, 0x99, 0x4c, 0xa2, 0x8d, 0x63, 0xd3, 0x3d, 0x12, 0xfc, + 0x6f, 0x81, 0xae, 0x40, 0xf0, 0x1e, 0x31, 0xdf, 0x86, 0x68, 0x47, 0xa9, 0x19, 0xf7, 0xd8, + 0x36, 0xa5, 0x4b, 0x64, 0x8a, 0x3a, 0xd4, 0xfb, 0x15, 0xc0, 0x2e, 0x01, 0xef, 0x5f, 0xb1, + 0x9e, 0x70, 0xe3, 0x0d, 0x22, 0xcc, 0x7c, 0x92, 0xbd, 0x53, 0x0f, 0xe1, 0xce, 0x20, 0x90, + 0x7e, 0x51, 0xbf, 0x2c, 0xc2, 0xed, 0x03, 0xb3, 0x5d, 0x72, 0x9c, 0x49, 0xa7, 0x88, 0x66, + 0xd6, 0x38, 0x17, 0xf9, 0x6a, 0x84, 0xab, 0x45, 0xf5, 0x1b, 0x34, 0xda, 0x83, 0x6d, 0x42, + 0xac, 0x1c, 0xf2, 0xdd, 0x33, 0xa0, 0x4e, 0x61, 0x8f, 0x3f, 0xd1, 0xfe, 0x10, 0xc5, 0x2b, + 0x04, 0xea, 0x5a, 0xb4, 0x9b, 0x75, 0xe6, 0x08, 0x27, 0xc9, 0x79, 0x97, 0xb8, 0x56, 0x00, + 0xef, 0xc3, 0x2c, 0x9b, 0x74, 0x58, 0xb7, 0x2b, 0xc4, 0xe8, 0x07, 0xb0, 0x5f, 0x73, 0x9c, + 0x56, 0xb9, 0x95, 0x7a, 0xcd, 0x22, 0x0e, 0xe1, 0x7d, 0x92, 0xbe, 0x51, 0xe6, 0x09, 0x25, + 0xca, 0xac, 0x43, 0x6f, 0x80, 0x37, 0xd8, 0xf4, 0x1b, 0x87, 0x68, 0x44, 0xab, 0x1c, 0xf3, + 0xdf, 0x30, 0xfa, 0x15, 0x39, 0xd6, 0x61, 0x8e, 0xa2, 0x4d, 0xd1, 0x3e, 0x12, 0xfd, 0x4a, + 0xa5, 0x89, 0x66, 0x45, 0xaa, 0x86, 0x69, 0xde, 0x31, 0x1d, 0xf2, 0x6e, 0x81, 0xad, 0x42, + 0xf5, 0x1a, 0x36, 0xd9, 0x13, 0xfc, 0xd0, 0x3f, 0x88, 0x67, 0x4b, 0xa4, 0x38, 0xd7, 0xfb, + 0x14, 0xa3, 0x4c, 0x60, 0x8f, 0xe9, 0x06, 0x2a, 0xc5, 0x72, 0x9d, 0xb1, 0x5e, 0xc2, 0x2d, + 0x01, 0xee, 0x59, 0xb6, 0x9a, 0x75, 0xbf, 0x50, 0x7c, 0x93, 0x24, 0xcb, 0xe7, 0x08, 0x94, + 0x7b, 0x57, 0xb8, 0x0f, 0xe0, 0xcc, 0x23, 0x8a, 0x65, 0x49, 0xa6, 0x11, 0xfe, 0xd2, 0x3d, + 0xa1, 0x4e, 0x62, 0x8d, 0x3a, 0xd5, 0xf9, 0x16, 0xdc, 0x33, 0x1f, 0xf0, 0x47, 0xa8, 0x84, + 0x6b, 0xf7, 0x18, 0x34, 0xdb, 0x6c, 0x83, 0xaf, 0x40, 0x26, 0xc9, 0xe5, 0x0a, 0xbd, 0x52, + 0x7e, 0x91, 0x0d, 0xe2, 0xce, 0x21, 0x96, 0x79, 0x55, 0xba, 0x70, 0x9f, 0xb3, 0x5c, 0xeb, + 0x04, 0x28, 0xc7, 0x5b, 0xb4, 0x98, 0x77, 0xc0, 0x2f, 0x03, 0xec, 0xcf, 0x20, 0x0c, 0xe3, + 0x54, 0xbb, 0x97, 0x78, 0xe4, 0x0b, 0x27, 0xc8, 0x7f, 0x90, 0xbc, 0x53, 0x99, 0x76, 0x5a, + 0xb5, 0x02, 0xed, 0xc1, 0x2e, 0xb2, 0x5d, 0x71, 0x9e, 0x29, 0xc6, 0xea, 0x05, 0x63, 0x8c, + 0xa0, 0x4f, 0xf8, 0x17, 0x3b, 0xd4, 0x48, 0xa7, 0x8b, 0x64, 0xd3, 0x3c, 0x10, 0xff, 0x35, + 0xda, 0xf6, 0x19, 0xae, 0x41, 0x6d, 0x82, 0x1e, 0xf1, 0xdd, 0x32, 0x85, 0x6a, 0x46, 0xa9, + 0x00, 0xf0, 0xfd, 0x0d, 0xe7, 0x17, 0x1a, 0xea, 0xd3, 0x23, 0x2e, 0xde, 0x34, 0xc4, 0xc9, + 0x39, 0xbb, 0x4b, 0x46, 0xb6, 0x5c, 0xac, 0xa1, 0x51, 0x68, 0x98, 0x95, 0x65, 0x8f, 0x7f, + 0x72, 0x82, 0x6b, 0x9b, 0x96, 0x66, 0x8c, 0x7c, 0x71, 0x81, 0xb8, 0x48, 0x45, 0xb5, 0x5f, + 0xaf, 0xa2, 0x52, 0xd0, 0x20, 0x2d, 0xdd, 0x37, 0xc7, 0xca, 0x3a, 0x03, 0xf3, 0xfe, 0x0e, + 0xe4, 0x14, 0x19, 0xe9, 0xd6, 0x26, 0x2b, 0xdb, 0x31, 0xc1, 0xcc, 0x3c, 0x05, 0xf5, 0xf8, + 0x08, 0xe2, 0x12, 0x1f, 0xef, 0x6d, 0x9d, 0x90, 0x60, 0x8a, 0x7a, 0x77, 0x87, 0xbe, 0x4e, + 0x43, 0xb3, 0x59, 0xa9, 0xa4, 0x54, 0xbd, 0x4d, 0x40, 0xb0, 0x5a, 0xaa, 0xa7, 0x57, 0x6e, + 0x9e, 0x93, 0x63, 0x89, 0x79, 0x74, 0x84, 0x06, 0xf6, 0xfb, 0x0b, 0xe1, 0x11, 0x1c, 0xec, + 0xd5, 0x25, 0x28, 0xd8, 0x32, 0xc2, 0xcf, 0x3f, 0xb1, 0x41, 0x4c, 0xbc, 0x56, 0xa6, 0xab, + 0x5b, 0x62, 0x92, 0x9f, 0x6f, 0x85, 0x75, 0x78, 0x88, 0x0a, 0xfa, 0xf7, 0x07, 0xed, 0x1d, + 0x10, 0xe0, 0xd9, 0x29, 0x24, 0xd4, 0x3e, 0xce, 0xc3, 0x33, 0xda, 0x2a, 0x27, 0xd7, 0x3d, + 0xcd, 0xc0, 0x30, 0x09, 0xf9, 0xf4, 0x04, 0xee, 0x1e, 0x13, 0xe3, 0x61, 0x91, 0x9c, 0x6c, + 0x86, 0x76, 0x7b, 0x8b, 0xb2, 0x42, 0x4f, 0xbf, 0x55, 0xa5, 0xa8, 0x58, 0x67, 0x97, 0x9a, + 0x6a, 0x80, 0x70, 0x7d, 0x8d, 0xb4, 0x44, 0x49, 0xb9, 0x53, 0xa3, 0xae, 0x5e, 0xdc, 0x2c, + 0x21, 0xd1, 0x3b, 0xcb, 0xc6, 0x36, 0x0f, 0xff, 0xf2, 0x02, 0xe8, 0x18, 0x15, 0xe5, 0x0c, + 0xfc, 0xf1, 0x01, 0xeb, 0x1b, 0x16, 0xe6, 0xdf, 0x2f, 0x22, 0xd2, 0x38, 0xc8, 0xc5, 0x35, + 0xb7, 0x47, 0x4a, 0xba, 0x50, 0xa0, 0xad, 0x5d, 0x64, 0x94, 0x99, 0x69, 0x83, 0x73, 0x7e, + 0x8e, 0x00, 0xf1, 0xff, 0x0e, 0xe3, 0x12, 0x1c, 0xed, 0xdb, 0x2a, 0x24, 0xd5, 0x38, 0xc9, + 0xc7, 0x36, 0xab, 0x5a, 0x54, 0xa5, 0x48, 0xb9, 0xb7, 0x46, 0x70, 0x81, 0x8f, 0x7e, 0x93, + 0x62, 0x6c, 0x9d, 0x4b, 0xba, 0xb4, 0x45, 0xa8, 0x59, 0x57, 0xa6, 0x90, 0x61, 0x6f, 0x9e, + 0x73, 0x82, 0x8c, 0x7d, 0xe0, 0x11, 0x1f, 0xee, 0x03, 0xf2, 0xfc, 0x0d, 0x3b, 0xca, 0xc4, + 0x35, 0xd8, 0x29, 0x27, 0xd6, 0x96, 0x67, 0x69, 0x98, 0x75, 0x84, 0x8a, 0x7b, 0x4d, 0xbc, + 0xb2, 0x43, 0xae, 0x5f, 0x51, 0xa0, 0x3d, 0xcc, 0xc2, 0x33, 0xde, 0x2f, 0x21, 0xd0, 0xe6, + 0x17, 0x19, 0xe8, 0x05, 0xf4, 0xfa, 0x0b, 0xdd, 0x2c, 0x22, 0xd3, 0x3e, 0xcf, 0xc1, 0x30, + 0x06, 0xf7, 0xf9, 0x08, 0xe5, 0x14, 0x1a, 0xeb, 0x76, 0x87, 0x89, 0x78, 0x95, 0x64, 0x6a, + 0x9b, 0xad, 0x5c, 0x52, 0xa3, 0x4e, 0xbf, 0xb1, 0x40, 0x31, 0xc0, 0xce, 0x3f, 0xd2, 0x23, + 0x2d, 0xdc, 0xea, 0x1b, 0x15, 0xe4, 0x09, 0xf8, 0xf6, 0x07, 0x9a, 0x6b, 0x65, 0x94, 0x79, + 0x88, 0x86, 0x77, 0x41, 0xb0, 0xbe, 0x4f, 0xa2, 0x53, 0x5d, 0xac, 0x7a, 0x8b, 0x85, 0x74, + 0x99, 0x68, 0x66, 0x97, 0xa1, 0x50, 0x5e, 0xaf, 0x42, 0xb3, 0xbd, 0x4c, 0xd1, 0x20, 0x2e, + 0xdf, 0x32, 0xc3, 0xcd, 0x3c, 0x0a, 0xfb, 0xf5, 0x04, 0xe9, 0x18, 0x16, 0xe7, 0xa7, 0x56, + 0x58, 0xa9, 0x44, 0xb5, 0xbb, 0x4a, 0x7c, 0x8d, 0x83, 0x72, 0x9f, 0x6e, 0x60, 0x91, 0x0c, + 0xfd, 0xf3, 0x02, 0xef, 0x1e, 0x10, 0xe1, 0xd7, 0x26, 0x28, 0xd9, 0x34, 0xc5, 0xcb, 0x3a, + 0xec, 0x1d, 0x13, 0xe2, 0x0f, 0xfe, 0xf0, 0x01, 0x37, 0xc6, 0xc8, 0x39, 0xd4, 0x25, 0x2b, + 0xda, 0x47, 0xb6, 0xb8, 0x49, 0xa4, 0x55, 0x5b, 0xaa, 0x9c, 0x6d, 0x63, 0x92, 0x7f, 0x8e, + 0x80, 0x71, 0x00, 0xf2, 0xf9, 0x0b, 0xef, 0x1d, 0x16, 0xe4, 0xc3, 0x31, 0x3a, 0xc8, 0x2c, + 0xde, 0xd5, 0x27, 0x9b, 0x69, 0x62, 0x90, 0x74, 0x86, 0x8d, 0x7f, 0x58, 0xaa, 0xa1, 0x53, + 0xb7, 0x45, 0x4e, 0xbc, 0x2b, 0xd9, 0xd2, 0x20, 0xc4, 0x36, 0x3d, 0xcf, 0xe8, 0x1a, 0x11, + 0xe3, 0x07, 0xf5, 0xfe, 0x0c, 0xb0, 0x42, 0x49, 0xbb, 0x5f, 0xad, 0xa6, 0x54, 0x73, 0x81, + 0x8a, 0x78, 0x9c, 0x6e, 0x65, 0x97, 0x56, 0xa4, 0xaf, 0x5d, 0xb9, 0x4b, 0x40, 0xb2, 0x95, + 0x67, 0x6c, 0x9e, 0x7a, 0x88, 0x83, 0x71, 0xcd, 0x3f, 0x34, 0xc6, 0x22, 0xd0, 0xdb, 0x29, + 0x0e, 0xfc, 0xf7, 0x05, 0xe1, 0x13, 0x18, 0xea, 0x7d, 0x8f, 0x84, 0x76, 0x92, 0x60, 0x6b, + 0x99, 0xbe, 0x4c, 0x47, 0xb5, 0x51, 0xa3, 0xa8, 0x5a, 0xe6, 0x14, 0x1f, 0xed, 0x09, 0xfb, + 0xf0, 0x02, 0x25, 0xd7, 0xdc, 0x2e, 0xca, 0x38, 0x33, 0xc1, 0xac, 0x5e, 0x55, 0xa7, 0x43, + 0xb1, 0xba, 0x48, 0x6f, 0x9d, 0x96, 0x64, 0x80, 0x72, 0x79, 0x8b, 0x37, 0xc5, 0xce, 0x3c, + 0xd8, 0x2a, 0x21, 0xd3, 0xf4, 0x06, 0x0d, 0xff, 0x1b, 0xe9, 0xe2, 0x10, 0x87, 0x75, 0x7e, + 0x8c, 0x68, 0x9a, 0x91, 0x63, 0x44, 0xb6, 0xbd, 0x4f, 0xab, 0x59, 0x52, 0xa0, 0x1c, 0xee, + 0xe5, 0x17, 0xf3, 0x01, 0x0a, 0xf8, 0xdf, 0x2d, 0x26, 0xd4, 0x30, 0xc2, 0xc9, 0x3b, 0xfa, + 0x08, 0x03, 0xf1, 0x15, 0xe7, 0xec, 0x1e, 0x39, 0xcb, 0xc0, 0x32, 0xd6, 0x24, 0x2f, 0xdd, + 0x61, 0x93, 0x98, 0x6a, 0x8e, 0x7c, 0x77, 0x85, 0xa2, 0x50, 0x5b, 0xa9, 0x4d, 0xbf, 0xb4, + 0x46, 0xd1, 0x23, 0x28, 0xda, 0x3e, 0xcc, 0xc7, 0x35, 0x12, 0xe0, 0xeb, 0x19, 0xfd, 0x0f, + 0x04, 0xf6, 0x4a, 0xb8, 0xb3, 0x41, 0xa5, 0x57, 0x5c, 0xae, 0x89, 0x7b, 0x70, 0x82, 0x66, + 0x94, 0x9f, 0x6d, 0x00, 0xf3, 0xfb, 0x08, 0xeb, 0x18, 0x10, 0xe3, 0xcb, 0x38, 0x30, 0xc3, + 0x20, 0xd3, 0xdb, 0x28, 0x8b, 0x78, 0x70, 0x83, 0x60, 0x93, 0x9b, 0x68, 0x40, 0xb3, 0xbb, + 0x48, 0xab, 0x58, 0x50, 0xa3, 0x0b, 0xf8, 0xf0, 0x03, 0xe0, 0x13, 0x1b, 0xe8, 0xc0, 0x33, + 0x3b, 0xc8, 0x2b, 0xd8, 0xd0, 0x23, 0x80, 0x73, 0x7b, 0x88, 0x6b, 0x98, 0x90, 0x63, 0x4b, + 0xb8, 0xb0, 0x43, 0xa0, 0x53, 0x5b, 0xa8, 0x16, 0xe5, 0xed, 0x1e, 0xfd, 0x0e, 0x06, 0xf5, + 0xdd, 0x2e, 0x26, 0xd5, 0x36, 0xc5, 0xcd, 0x3e, 0x9d, 0x6e, 0x66, 0x95, 0x76, 0x85, 0x8d, + 0x7e, 0x56, 0xa5, 0xad, 0x5e, 0xbd, 0x4e, 0x46, 0xb5, 0x1d, 0xee, 0xe6, 0x15, 0xf6, 0x05, + 0x0d, 0xfe, 0xd6, 0x25, 0x2d, 0xde, 0x3d, 0xce, 0xc6, 0x35, 0x96, 0x65, 0x6d, 0x9e, 0x7d, + 0x8e, 0x86, 0x75, 0x5d, 0xae, 0xa6, 0x55, 0xb6, 0x45, 0x4d, 0xbe, 0x2c, 0xdf, 0xd7, 0x24, + 0xc7, 0x34, 0x3c, 0xcf, 0xe7, 0x14, 0x1c, 0xef, 0x0c, 0xff, 0xf7, 0x04, 0xa7, 0x54, 0x5c, + 0xaf, 0x4c, 0xbf, 0xb7, 0x44, 0x6c, 0x9f, 0x97, 0x64, 0x87, 0x74, 0x7c, 0x8f, 0x27, 0xd4, + 0xdc, 0x2f, 0xcc, 0x3f, 0x37, 0xc4, 0xec, 0x1f, 0x17, 0xe4, 0x07, 0xf4, 0xfc, 0x0f, 0xac, + 0x5f, 0x57, 0xa4, 0x47, 0xb4, 0xbc, 0x4f, 0x67, 0x94, 0x9c, 0x6f, 0x8c, 0x7f, 0x77, 0x84, + 0x3a, 0xc9, 0xc1, 0x32, 0xd1, 0x22, 0x2a, 0xd9, 0xf1, 0x02, 0x0a, 0xf9, 0x1a, 0xe9, 0xe1, + 0x12, 0xb1, 0x42, 0x4a, 0xb9, 0x5a, 0xa9, 0xa1, 0x52, 0x7a, 0x89, 0x81, 0x72, 0x91, 0x62, + 0x6a, 0x99, 0x31, 0xc2, 0xca, 0x39, 0xda, 0x29, 0x21, 0xd2, 0xfa, 0x09, 0x01, 0xf2, 0x11, + 0xe2, 0xea, 0x19, 0xba, 0x49, 0x41, 0xb2, 0x51, 0xa2, 0xaa, 0x59, 0x71, 0x82, 0x8a, 0x79, + 0x9a, 0x69, 0x61, 0x92, 0x00, 0xf4, 0xf5, 0x01, 0xf7, 0x03, 0x02, 0xf6, 0xf3, 0x07, 0x06, + 0xf2, 0x04, 0xf0, 0xf1, 0x05, 0xfb, 0x0f, 0x0e, 0xfa, 0x0c, 0xf8, 0xf9, 0x0d, 0x08, 0xfc, + 0xfd, 0x09, 0xff, 0x0b, 0x0a, 0xfe, 0xeb, 0x1f, 0x1e, 0xea, 0x1c, 0xe8, 0xe9, 0x1d, 0x18, + 0xec, 0xed, 0x19, 0xef, 0x1b, 0x1a, 0xee, 0x10, 0xe4, 0xe5, 0x11, 0xe7, 0x13, 0x12, 0xe6, + 0xe3, 0x17, 0x16, 0xe2, 0x14, 0xe0, 0xe1, 0x15, 0xcb, 0x3f, 0x3e, 0xca, 0x3c, 0xc8, 0xc9, + 0x3d, 0x38, 0xcc, 0xcd, 0x39, 0xcf, 0x3b, 0x3a, 0xce, 0x30, 0xc4, 0xc5, 0x31, 0xc7, 0x33, + 0x32, 0xc6, 0xc3, 0x37, 0x36, 0xc2, 0x34, 0xc0, 0xc1, 0x35, 0x20, 0xd4, 0xd5, 0x21, 0xd7, + 0x23, 0x22, 0xd6, 0xd3, 0x27, 0x26, 0xd2, 0x24, 0xd0, 0xd1, 0x25, 0xdb, 0x2f, 0x2e, 0xda, + 0x2c, 0xd8, 0xd9, 0x2d, 0x28, 0xdc, 0xdd, 0x29, 0xdf, 0x2b, 0x2a, 0xde, 0x8b, 0x7f, 0x7e, + 0x8a, 0x7c, 0x88, 0x89, 0x7d, 0x78, 0x8c, 0x8d, 0x79, 0x8f, 0x7b, 0x7a, 0x8e, 0x70, 0x84, + 0x85, 0x71, 0x87, 0x73, 0x72, 0x86, 0x83, 0x77, 0x76, 0x82, 0x74, 0x80, 0x81, 0x75, 0x60, + 0x94, 0x95, 0x61, 0x97, 0x63, 0x62, 0x96, 0x93, 0x67, 0x66, 0x92, 0x64, 0x90, 0x91, 0x65, + 0x9b, 0x6f, 0x6e, 0x9a, 0x6c, 0x98, 0x99, 0x6d, 0x68, 0x9c, 0x9d, 0x69, 0x9f, 0x6b, 0x6a, + 0x9e, 0x40, 0xb4, 0xb5, 0x41, 0xb7, 0x43, 0x42, 0xb6, 0xb3, 0x47, 0x46, 0xb2, 0x44, 0xb0, + 0xb1, 0x45, 0xbb, 0x4f, 0x4e, 0xba, 0x4c, 0xb8, 0xb9, 0x4d, 0x48, 0xbc, 0xbd, 0x49, 0xbf, + 0x4b, 0x4a, 0xbe, 0xab, 0x5f, 0x5e, 0xaa, 0x5c, 0xa8, 0xa9, 0x5d, 0x58, 0xac, 0xad, 0x59, + 0xaf, 0x5b, 0x5a, 0xae, 0x50, 0xa4, 0xa5, 0x51, 0xa7, 0x53, 0x52, 0xa6, 0xa3, 0x57, 0x56, + 0xa2, 0x54, 0xa0, 0xa1, 0x55, 0x00, 0xf5, 0xf7, 0x02, 0xf3, 0x06, 0x04, 0xf1, 0xfb, 0x0e, + 0x0c, 0xf9, 0x08, 0xfd, 0xff, 0x0a, 0xeb, 0x1e, 0x1c, 0xe9, 0x18, 0xed, 0xef, 0x1a, 0x10, + 0xe5, 0xe7, 0x12, 0xe3, 0x16, 0x14, 0xe1, 0xcb, 0x3e, 0x3c, 0xc9, 0x38, 0xcd, 0xcf, 0x3a, + 0x30, 0xc5, 0xc7, 0x32, 0xc3, 0x36, 0x34, 0xc1, 0x20, 0xd5, 0xd7, 0x22, 0xd3, 0x26, 0x24, + 0xd1, 0xdb, 0x2e, 0x2c, 0xd9, 0x28, 0xdd, 0xdf, 0x2a, 0x8b, 0x7e, 0x7c, 0x89, 0x78, 0x8d, + 0x8f, 0x7a, 0x70, 0x85, 0x87, 0x72, 0x83, 0x76, 0x74, 0x81, 0x60, 0x95, 0x97, 0x62, 0x93, + 0x66, 0x64, 0x91, 0x9b, 0x6e, 0x6c, 0x99, 0x68, 0x9d, 0x9f, 0x6a, 0x40, 0xb5, 0xb7, 0x42, + 0xb3, 0x46, 0x44, 0xb1, 0xbb, 0x4e, 0x4c, 0xb9, 0x48, 0xbd, 0xbf, 0x4a, 0xab, 0x5e, 0x5c, + 0xa9, 0x58, 0xad, 0xaf, 0x5a, 0x50, 0xa5, 0xa7, 0x52, 0xa3, 0x56, 0x54, 0xa1, 0x0b, 0xfe, + 0xfc, 0x09, 0xf8, 0x0d, 0x0f, 0xfa, 0xf0, 0x05, 0x07, 0xf2, 0x03, 0xf6, 0xf4, 0x01, 0xe0, + 0x15, 0x17, 0xe2, 0x13, 0xe6, 0xe4, 0x11, 0x1b, 0xee, 0xec, 0x19, 0xe8, 0x1d, 0x1f, 0xea, + 0xc0, 0x35, 0x37, 0xc2, 0x33, 0xc6, 0xc4, 0x31, 0x3b, 0xce, 0xcc, 0x39, 0xc8, 0x3d, 0x3f, + 0xca, 0x2b, 0xde, 0xdc, 0x29, 0xd8, 0x2d, 0x2f, 0xda, 0xd0, 0x25, 0x27, 0xd2, 0x23, 0xd6, + 0xd4, 0x21, 0x80, 0x75, 0x77, 0x82, 0x73, 0x86, 0x84, 0x71, 0x7b, 0x8e, 0x8c, 0x79, 0x88, + 0x7d, 0x7f, 0x8a, 0x6b, 0x9e, 0x9c, 0x69, 0x98, 0x6d, 0x6f, 0x9a, 0x90, 0x65, 0x67, 0x92, + 0x63, 0x96, 0x94, 0x61, 0x4b, 0xbe, 0xbc, 0x49, 0xb8, 0x4d, 0x4f, 0xba, 0xb0, 0x45, 0x47, + 0xb2, 0x43, 0xb6, 0xb4, 0x41, 0xa0, 0x55, 0x57, 0xa2, 0x53, 0xa6, 0xa4, 0x51, 0x5b, 0xae, + 0xac, 0x59, 0xa8, 0x5d, 0x5f, 0xaa, 0x00, 0xf6, 0xf1, 0x07, 0xff, 0x09, 0x0e, 0xf8, 0xe3, + 0x15, 0x12, 0xe4, 0x1c, 0xea, 0xed, 0x1b, 0xdb, 0x2d, 0x2a, 0xdc, 0x24, 0xd2, 0xd5, 0x23, + 0x38, 0xce, 0xc9, 0x3f, 0xc7, 0x31, 0x36, 0xc0, 0xab, 0x5d, 0x5a, 0xac, 0x54, 0xa2, 0xa5, + 0x53, 0x48, 0xbe, 0xb9, 0x4f, 0xb7, 0x41, 0x46, 0xb0, 0x70, 0x86, 0x81, 0x77, 0x8f, 0x79, + 0x7e, 0x88, 0x93, 0x65, 0x62, 0x94, 0x6c, 0x9a, 0x9d, 0x6b, 0x4b, 0xbd, 0xba, 0x4c, 0xb4, + 0x42, 0x45, 0xb3, 0xa8, 0x5e, 0x59, 0xaf, 0x57, 0xa1, 0xa6, 0x50, 0x90, 0x66, 0x61, 0x97, + 0x6f, 0x99, 0x9e, 0x68, 0x73, 0x85, 0x82, 0x74, 0x8c, 0x7a, 0x7d, 0x8b, 0xe0, 0x16, 0x11, + 0xe7, 0x1f, 0xe9, 0xee, 0x18, 0x03, 0xf5, 0xf2, 0x04, 0xfc, 0x0a, 0x0d, 0xfb, 0x3b, 0xcd, + 0xca, 0x3c, 0xc4, 0x32, 0x35, 0xc3, 0xd8, 0x2e, 0x29, 0xdf, 0x27, 0xd1, 0xd6, 0x20, 0x96, + 0x60, 0x67, 0x91, 0x69, 0x9f, 0x98, 0x6e, 0x75, 0x83, 0x84, 0x72, 0x8a, 0x7c, 0x7b, 0x8d, + 0x4d, 0xbb, 0xbc, 0x4a, 0xb2, 0x44, 0x43, 0xb5, 0xae, 0x58, 0x5f, 0xa9, 0x51, 0xa7, 0xa0, + 0x56, 0x3d, 0xcb, 0xcc, 0x3a, 0xc2, 0x34, 0x33, 0xc5, 0xde, 0x28, 0x2f, 0xd9, 0x21, 0xd7, + 0xd0, 0x26, 0xe6, 0x10, 0x17, 0xe1, 0x19, 0xef, 0xe8, 0x1e, 0x05, 0xf3, 0xf4, 0x02, 0xfa, + 0x0c, 0x0b, 0xfd, 0xdd, 0x2b, 0x2c, 0xda, 0x22, 0xd4, 0xd3, 0x25, 0x3e, 0xc8, 0xcf, 0x39, + 0xc1, 0x37, 0x30, 0xc6, 0x06, 0xf0, 0xf7, 0x01, 0xf9, 0x0f, 0x08, 0xfe, 0xe5, 0x13, 0x14, + 0xe2, 0x1a, 0xec, 0xeb, 0x1d, 0x76, 0x80, 0x87, 0x71, 0x89, 0x7f, 0x78, 0x8e, 0x95, 0x63, + 0x64, 0x92, 0x6a, 0x9c, 0x9b, 0x6d, 0xad, 0x5b, 0x5c, 0xaa, 0x52, 0xa4, 0xa3, 0x55, 0x4e, + 0xb8, 0xbf, 0x49, 0xb1, 0x47, 0x40, 0xb6, 0x00, 0xf7, 0xf3, 0x04, 0xfb, 0x0c, 0x08, 0xff, + 0xeb, 0x1c, 0x18, 0xef, 0x10, 0xe7, 0xe3, 0x14, 0xcb, 0x3c, 0x38, 0xcf, 0x30, 0xc7, 0xc3, + 0x34, 0x20, 0xd7, 0xd3, 0x24, 0xdb, 0x2c, 0x28, 0xdf, 0x8b, 0x7c, 0x78, 0x8f, 0x70, 0x87, + 0x83, 0x74, 0x60, 0x97, 0x93, 0x64, 0x9b, 0x6c, 0x68, 0x9f, 0x40, 0xb7, 0xb3, 0x44, 0xbb, + 0x4c, 0x48, 0xbf, 0xab, 0x5c, 0x58, 0xaf, 0x50, 0xa7, 0xa3, 0x54, 0x0b, 0xfc, 0xf8, 0x0f, + 0xf0, 0x07, 0x03, 0xf4, 0xe0, 0x17, 0x13, 0xe4, 0x1b, 0xec, 0xe8, 0x1f, 0xc0, 0x37, 0x33, + 0xc4, 0x3b, 0xcc, 0xc8, 0x3f, 0x2b, 0xdc, 0xd8, 0x2f, 0xd0, 0x27, 0x23, 0xd4, 0x80, 0x77, + 0x73, 0x84, 0x7b, 0x8c, 0x88, 0x7f, 0x6b, 0x9c, 0x98, 0x6f, 0x90, 0x67, 0x63, 0x94, 0x4b, + 0xbc, 0xb8, 0x4f, 0xb0, 0x47, 0x43, 0xb4, 0xa0, 0x57, 0x53, 0xa4, 0x5b, 0xac, 0xa8, 0x5f, + 0x16, 0xe1, 0xe5, 0x12, 0xed, 0x1a, 0x1e, 0xe9, 0xfd, 0x0a, 0x0e, 0xf9, 0x06, 0xf1, 0xf5, + 0x02, 0xdd, 0x2a, 0x2e, 0xd9, 0x26, 0xd1, 0xd5, 0x22, 0x36, 0xc1, 0xc5, 0x32, 0xcd, 0x3a, + 0x3e, 0xc9, 0x9d, 0x6a, 0x6e, 0x99, 0x66, 0x91, 0x95, 0x62, 0x76, 0x81, 0x85, 0x72, 0x8d, + 0x7a, 0x7e, 0x89, 0x56, 0xa1, 0xa5, 0x52, 0xad, 0x5a, 0x5e, 0xa9, 0xbd, 0x4a, 0x4e, 0xb9, + 0x46, 0xb1, 0xb5, 0x42, 0x1d, 0xea, 0xee, 0x19, 0xe6, 0x11, 0x15, 0xe2, 0xf6, 0x01, 0x05, + 0xf2, 0x0d, 0xfa, 0xfe, 0x09, 0xd6, 0x21, 0x25, 0xd2, 0x2d, 0xda, 0xde, 0x29, 0x3d, 0xca, + 0xce, 0x39, 0xc6, 0x31, 0x35, 0xc2, 0x96, 0x61, 0x65, 0x92, 0x6d, 0x9a, 0x9e, 0x69, 0x7d, + 0x8a, 0x8e, 0x79, 0x86, 0x71, 0x75, 0x82, 0x5d, 0xaa, 0xae, 0x59, 0xa6, 0x51, 0x55, 0xa2, + 0xb6, 0x41, 0x45, 0xb2, 0x4d, 0xba, 0xbe, 0x49, 0x00, 0xf8, 0xed, 0x15, 0xc7, 0x3f, 0x2a, + 0xd2, 0x93, 0x6b, 0x7e, 0x86, 0x54, 0xac, 0xb9, 0x41, 0x3b, 0xc3, 0xd6, 0x2e, 0xfc, 0x04, + 0x11, 0xe9, 0xa8, 0x50, 0x45, 0xbd, 0x6f, 0x97, 0x82, 0x7a, 0x76, 0x8e, 0x9b, 0x63, 0xb1, + 0x49, 0x5c, 0xa4, 0xe5, 0x1d, 0x08, 0xf0, 0x22, 0xda, 0xcf, 0x37, 0x4d, 0xb5, 0xa0, 0x58, + 0x8a, 0x72, 0x67, 0x9f, 0xde, 0x26, 0x33, 0xcb, 0x19, 0xe1, 0xf4, 0x0c, 0xec, 0x14, 0x01, + 0xf9, 0x2b, 0xd3, 0xc6, 0x3e, 0x7f, 0x87, 0x92, 0x6a, 0xb8, 0x40, 0x55, 0xad, 0xd7, 0x2f, + 0x3a, 0xc2, 0x10, 0xe8, 0xfd, 0x05, 0x44, 0xbc, 0xa9, 0x51, 0x83, 0x7b, 0x6e, 0x96, 0x9a, + 0x62, 0x77, 0x8f, 0x5d, 0xa5, 0xb0, 0x48, 0x09, 0xf1, 0xe4, 0x1c, 0xce, 0x36, 0x23, 0xdb, + 0xa1, 0x59, 0x4c, 0xb4, 0x66, 0x9e, 0x8b, 0x73, 0x32, 0xca, 0xdf, 0x27, 0xf5, 0x0d, 0x18, + 0xe0, 0xc5, 0x3d, 0x28, 0xd0, 0x02, 0xfa, 0xef, 0x17, 0x56, 0xae, 0xbb, 0x43, 0x91, 0x69, + 0x7c, 0x84, 0xfe, 0x06, 0x13, 0xeb, 0x39, 0xc1, 0xd4, 0x2c, 0x6d, 0x95, 0x80, 0x78, 0xaa, + 0x52, 0x47, 0xbf, 0xb3, 0x4b, 0x5e, 0xa6, 0x74, 0x8c, 0x99, 0x61, 0x20, 0xd8, 0xcd, 0x35, + 0xe7, 0x1f, 0x0a, 0xf2, 0x88, 0x70, 0x65, 0x9d, 0x4f, 0xb7, 0xa2, 0x5a, 0x1b, 0xe3, 0xf6, + 0x0e, 0xdc, 0x24, 0x31, 0xc9, 0x29, 0xd1, 0xc4, 0x3c, 0xee, 0x16, 0x03, 0xfb, 0xba, 0x42, + 0x57, 0xaf, 0x7d, 0x85, 0x90, 0x68, 0x12, 0xea, 0xff, 0x07, 0xd5, 0x2d, 0x38, 0xc0, 0x81, + 0x79, 0x6c, 0x94, 0x46, 0xbe, 0xab, 0x53, 0x5f, 0xa7, 0xb2, 0x4a, 0x98, 0x60, 0x75, 0x8d, + 0xcc, 0x34, 0x21, 0xd9, 0x0b, 0xf3, 0xe6, 0x1e, 0x64, 0x9c, 0x89, 0x71, 0xa3, 0x5b, 0x4e, + 0xb6, 0xf7, 0x0f, 0x1a, 0xe2, 0x30, 0xc8, 0xdd, 0x25, 0x00, 0xf9, 0xef, 0x16, 0xc3, 0x3a, + 0x2c, 0xd5, 0x9b, 0x62, 0x74, 0x8d, 0x58, 0xa1, 0xb7, 0x4e, 0x2b, 0xd2, 0xc4, 0x3d, 0xe8, + 0x11, 0x07, 0xfe, 0xb0, 0x49, 0x5f, 0xa6, 0x73, 0x8a, 0x9c, 0x65, 0x56, 0xaf, 0xb9, 0x40, + 0x95, 0x6c, 0x7a, 0x83, 0xcd, 0x34, 0x22, 0xdb, 0x0e, 0xf7, 0xe1, 0x18, 0x7d, 0x84, 0x92, + 0x6b, 0xbe, 0x47, 0x51, 0xa8, 0xe6, 0x1f, 0x09, 0xf0, 0x25, 0xdc, 0xca, 0x33, 0xac, 0x55, + 0x43, 0xba, 0x6f, 0x96, 0x80, 0x79, 0x37, 0xce, 0xd8, 0x21, 0xf4, 0x0d, 0x1b, 0xe2, 0x87, + 0x7e, 0x68, 0x91, 0x44, 0xbd, 0xab, 0x52, 0x1c, 0xe5, 0xf3, 0x0a, 0xdf, 0x26, 0x30, 0xc9, + 0xfa, 0x03, 0x15, 0xec, 0x39, 0xc0, 0xd6, 0x2f, 0x61, 0x98, 0x8e, 0x77, 0xa2, 0x5b, 0x4d, + 0xb4, 0xd1, 0x28, 0x3e, 0xc7, 0x12, 0xeb, 0xfd, 0x04, 0x4a, 0xb3, 0xa5, 0x5c, 0x89, 0x70, + 0x66, 0x9f, 0x45, 0xbc, 0xaa, 0x53, 0x86, 0x7f, 0x69, 0x90, 0xde, 0x27, 0x31, 0xc8, 0x1d, + 0xe4, 0xf2, 0x0b, 0x6e, 0x97, 0x81, 0x78, 0xad, 0x54, 0x42, 0xbb, 0xf5, 0x0c, 0x1a, 0xe3, + 0x36, 0xcf, 0xd9, 0x20, 0x13, 0xea, 0xfc, 0x05, 0xd0, 0x29, 0x3f, 0xc6, 0x88, 0x71, 0x67, + 0x9e, 0x4b, 0xb2, 0xa4, 0x5d, 0x38, 0xc1, 0xd7, 0x2e, 0xfb, 0x02, 0x14, 0xed, 0xa3, 0x5a, + 0x4c, 0xb5, 0x60, 0x99, 0x8f, 0x76, 0xe9, 0x10, 0x06, 0xff, 0x2a, 0xd3, 0xc5, 0x3c, 0x72, + 0x8b, 0x9d, 0x64, 0xb1, 0x48, 0x5e, 0xa7, 0xc2, 0x3b, 0x2d, 0xd4, 0x01, 0xf8, 0xee, 0x17, + 0x59, 0xa0, 0xb6, 0x4f, 0x9a, 0x63, 0x75, 0x8c, 0xbf, 0x46, 0x50, 0xa9, 0x7c, 0x85, 0x93, + 0x6a, 0x24, 0xdd, 0xcb, 0x32, 0xe7, 0x1e, 0x08, 0xf1, 0x94, 0x6d, 0x7b, 0x82, 0x57, 0xae, + 0xb8, 0x41, 0x0f, 0xf6, 0xe0, 0x19, 0xcc, 0x35, 0x23, 0xda, 0x00, 0xfa, 0xe9, 0x13, 0xcf, + 0x35, 0x26, 0xdc, 0x83, 0x79, 0x6a, 0x90, 0x4c, 0xb6, 0xa5, 0x5f, 0x1b, 0xe1, 0xf2, 0x08, + 0xd4, 0x2e, 0x3d, 0xc7, 0x98, 0x62, 0x71, 0x8b, 0x57, 0xad, 0xbe, 0x44, 0x36, 0xcc, 0xdf, + 0x25, 0xf9, 0x03, 0x10, 0xea, 0xb5, 0x4f, 0x5c, 0xa6, 0x7a, 0x80, 0x93, 0x69, 0x2d, 0xd7, + 0xc4, 0x3e, 0xe2, 0x18, 0x0b, 0xf1, 0xae, 0x54, 0x47, 0xbd, 0x61, 0x9b, 0x88, 0x72, 0x6c, + 0x96, 0x85, 0x7f, 0xa3, 0x59, 0x4a, 0xb0, 0xef, 0x15, 0x06, 0xfc, 0x20, 0xda, 0xc9, 0x33, + 0x77, 0x8d, 0x9e, 0x64, 0xb8, 0x42, 0x51, 0xab, 0xf4, 0x0e, 0x1d, 0xe7, 0x3b, 0xc1, 0xd2, + 0x28, 0x5a, 0xa0, 0xb3, 0x49, 0x95, 0x6f, 0x7c, 0x86, 0xd9, 0x23, 0x30, 0xca, 0x16, 0xec, + 0xff, 0x05, 0x41, 0xbb, 0xa8, 0x52, 0x8e, 0x74, 0x67, 0x9d, 0xc2, 0x38, 0x2b, 0xd1, 0x0d, + 0xf7, 0xe4, 0x1e, 0xd8, 0x22, 0x31, 0xcb, 0x17, 0xed, 0xfe, 0x04, 0x5b, 0xa1, 0xb2, 0x48, + 0x94, 0x6e, 0x7d, 0x87, 0xc3, 0x39, 0x2a, 0xd0, 0x0c, 0xf6, 0xe5, 0x1f, 0x40, 0xba, 0xa9, + 0x53, 0x8f, 0x75, 0x66, 0x9c, 0xee, 0x14, 0x07, 0xfd, 0x21, 0xdb, 0xc8, 0x32, 0x6d, 0x97, + 0x84, 0x7e, 0xa2, 0x58, 0x4b, 0xb1, 0xf5, 0x0f, 0x1c, 0xe6, 0x3a, 0xc0, 0xd3, 0x29, 0x76, + 0x8c, 0x9f, 0x65, 0xb9, 0x43, 0x50, 0xaa, 0xb4, 0x4e, 0x5d, 0xa7, 0x7b, 0x81, 0x92, 0x68, + 0x37, 0xcd, 0xde, 0x24, 0xf8, 0x02, 0x11, 0xeb, 0xaf, 0x55, 0x46, 0xbc, 0x60, 0x9a, 0x89, + 0x73, 0x2c, 0xd6, 0xc5, 0x3f, 0xe3, 0x19, 0x0a, 0xf0, 0x82, 0x78, 0x6b, 0x91, 0x4d, 0xb7, + 0xa4, 0x5e, 0x01, 0xfb, 0xe8, 0x12, 0xce, 0x34, 0x27, 0xdd, 0x99, 0x63, 0x70, 0x8a, 0x56, + 0xac, 0xbf, 0x45, 0x1a, 0xe0, 0xf3, 0x09, 0xd5, 0x2f, 0x3c, 0xc6, 0x00, 0xfb, 0xeb, 0x10, + 0xcb, 0x30, 0x20, 0xdb, 0x8b, 0x70, 0x60, 0x9b, 0x40, 0xbb, 0xab, 0x50, 0x0b, 0xf0, 0xe0, + 0x1b, 0xc0, 0x3b, 0x2b, 0xd0, 0x80, 0x7b, 0x6b, 0x90, 0x4b, 0xb0, 0xa0, 0x5b, 0x16, 0xed, + 0xfd, 0x06, 0xdd, 0x26, 0x36, 0xcd, 0x9d, 0x66, 0x76, 0x8d, 0x56, 0xad, 0xbd, 0x46, 0x1d, + 0xe6, 0xf6, 0x0d, 0xd6, 0x2d, 0x3d, 0xc6, 0x96, 0x6d, 0x7d, 0x86, 0x5d, 0xa6, 0xb6, 0x4d, + 0x2c, 0xd7, 0xc7, 0x3c, 0xe7, 0x1c, 0x0c, 0xf7, 0xa7, 0x5c, 0x4c, 0xb7, 0x6c, 0x97, 0x87, + 0x7c, 0x27, 0xdc, 0xcc, 0x37, 0xec, 0x17, 0x07, 0xfc, 0xac, 0x57, 0x47, 0xbc, 0x67, 0x9c, + 0x8c, 0x77, 0x3a, 0xc1, 0xd1, 0x2a, 0xf1, 0x0a, 0x1a, 0xe1, 0xb1, 0x4a, 0x5a, 0xa1, 0x7a, + 0x81, 0x91, 0x6a, 0x31, 0xca, 0xda, 0x21, 0xfa, 0x01, 0x11, 0xea, 0xba, 0x41, 0x51, 0xaa, + 0x71, 0x8a, 0x9a, 0x61, 0x58, 0xa3, 0xb3, 0x48, 0x93, 0x68, 0x78, 0x83, 0xd3, 0x28, 0x38, + 0xc3, 0x18, 0xe3, 0xf3, 0x08, 0x53, 0xa8, 0xb8, 0x43, 0x98, 0x63, 0x73, 0x88, 0xd8, 0x23, + 0x33, 0xc8, 0x13, 0xe8, 0xf8, 0x03, 0x4e, 0xb5, 0xa5, 0x5e, 0x85, 0x7e, 0x6e, 0x95, 0xc5, + 0x3e, 0x2e, 0xd5, 0x0e, 0xf5, 0xe5, 0x1e, 0x45, 0xbe, 0xae, 0x55, 0x8e, 0x75, 0x65, 0x9e, + 0xce, 0x35, 0x25, 0xde, 0x05, 0xfe, 0xee, 0x15, 0x74, 0x8f, 0x9f, 0x64, 0xbf, 0x44, 0x54, + 0xaf, 0xff, 0x04, 0x14, 0xef, 0x34, 0xcf, 0xdf, 0x24, 0x7f, 0x84, 0x94, 0x6f, 0xb4, 0x4f, + 0x5f, 0xa4, 0xf4, 0x0f, 0x1f, 0xe4, 0x3f, 0xc4, 0xd4, 0x2f, 0x62, 0x99, 0x89, 0x72, 0xa9, + 0x52, 0x42, 0xb9, 0xe9, 0x12, 0x02, 0xf9, 0x22, 0xd9, 0xc9, 0x32, 0x69, 0x92, 0x82, 0x79, + 0xa2, 0x59, 0x49, 0xb2, 0xe2, 0x19, 0x09, 0xf2, 0x29, 0xd2, 0xc2, 0x39, 0x00, 0xfc, 0xe5, + 0x19, 0xd7, 0x2b, 0x32, 0xce, 0xb3, 0x4f, 0x56, 0xaa, 0x64, 0x98, 0x81, 0x7d, 0x7b, 0x87, + 0x9e, 0x62, 0xac, 0x50, 0x49, 0xb5, 0xc8, 0x34, 0x2d, 0xd1, 0x1f, 0xe3, 0xfa, 0x06, 0xf6, + 0x0a, 0x13, 0xef, 0x21, 0xdd, 0xc4, 0x38, 0x45, 0xb9, 0xa0, 0x5c, 0x92, 0x6e, 0x77, 0x8b, + 0x8d, 0x71, 0x68, 0x94, 0x5a, 0xa6, 0xbf, 0x43, 0x3e, 0xc2, 0xdb, 0x27, 0xe9, 0x15, 0x0c, + 0xf0, 0xf1, 0x0d, 0x14, 0xe8, 0x26, 0xda, 0xc3, 0x3f, 0x42, 0xbe, 0xa7, 0x5b, 0x95, 0x69, + 0x70, 0x8c, 0x8a, 0x76, 0x6f, 0x93, 0x5d, 0xa1, 0xb8, 0x44, 0x39, 0xc5, 0xdc, 0x20, 0xee, + 0x12, 0x0b, 0xf7, 0x07, 0xfb, 0xe2, 0x1e, 0xd0, 0x2c, 0x35, 0xc9, 0xb4, 0x48, 0x51, 0xad, + 0x63, 0x9f, 0x86, 0x7a, 0x7c, 0x80, 0x99, 0x65, 0xab, 0x57, 0x4e, 0xb2, 0xcf, 0x33, 0x2a, + 0xd6, 0x18, 0xe4, 0xfd, 0x01, 0xff, 0x03, 0x1a, 0xe6, 0x28, 0xd4, 0xcd, 0x31, 0x4c, 0xb0, + 0xa9, 0x55, 0x9b, 0x67, 0x7e, 0x82, 0x84, 0x78, 0x61, 0x9d, 0x53, 0xaf, 0xb6, 0x4a, 0x37, + 0xcb, 0xd2, 0x2e, 0xe0, 0x1c, 0x05, 0xf9, 0x09, 0xf5, 0xec, 0x10, 0xde, 0x22, 0x3b, 0xc7, + 0xba, 0x46, 0x5f, 0xa3, 0x6d, 0x91, 0x88, 0x74, 0x72, 0x8e, 0x97, 0x6b, 0xa5, 0x59, 0x40, + 0xbc, 0xc1, 0x3d, 0x24, 0xd8, 0x16, 0xea, 0xf3, 0x0f, 0x0e, 0xf2, 0xeb, 0x17, 0xd9, 0x25, + 0x3c, 0xc0, 0xbd, 0x41, 0x58, 0xa4, 0x6a, 0x96, 0x8f, 0x73, 0x75, 0x89, 0x90, 0x6c, 0xa2, + 0x5e, 0x47, 0xbb, 0xc6, 0x3a, 0x23, 0xdf, 0x11, 0xed, 0xf4, 0x08, 0xf8, 0x04, 0x1d, 0xe1, + 0x2f, 0xd3, 0xca, 0x36, 0x4b, 0xb7, 0xae, 0x52, 0x9c, 0x60, 0x79, 0x85, 0x83, 0x7f, 0x66, + 0x9a, 0x54, 0xa8, 0xb1, 0x4d, 0x30, 0xcc, 0xd5, 0x29, 0xe7, 0x1b, 0x02, 0xfe, 0x00, 0xfd, + 0xe7, 0x1a, 0xd3, 0x2e, 0x34, 0xc9, 0xbb, 0x46, 0x5c, 0xa1, 0x68, 0x95, 0x8f, 0x72, 0x6b, + 0x96, 0x8c, 0x71, 0xb8, 0x45, 0x5f, 0xa2, 0xd0, 0x2d, 0x37, 0xca, 0x03, 0xfe, 0xe4, 0x19, + 0xd6, 0x2b, 0x31, 0xcc, 0x05, 0xf8, 0xe2, 0x1f, 0x6d, 0x90, 0x8a, 0x77, 0xbe, 0x43, 0x59, + 0xa4, 0xbd, 0x40, 0x5a, 0xa7, 0x6e, 0x93, 0x89, 0x74, 0x06, 0xfb, 0xe1, 0x1c, 0xd5, 0x28, + 0x32, 0xcf, 0xb1, 0x4c, 0x56, 0xab, 0x62, 0x9f, 0x85, 0x78, 0x0a, 0xf7, 0xed, 0x10, 0xd9, + 0x24, 0x3e, 0xc3, 0xda, 0x27, 0x3d, 0xc0, 0x09, 0xf4, 0xee, 0x13, 0x61, 0x9c, 0x86, 0x7b, + 0xb2, 0x4f, 0x55, 0xa8, 0x67, 0x9a, 0x80, 0x7d, 0xb4, 0x49, 0x53, 0xae, 0xdc, 0x21, 0x3b, + 0xc6, 0x0f, 0xf2, 0xe8, 0x15, 0x0c, 0xf1, 0xeb, 0x16, 0xdf, 0x22, 0x38, 0xc5, 0xb7, 0x4a, + 0x50, 0xad, 0x64, 0x99, 0x83, 0x7e, 0x7f, 0x82, 0x98, 0x65, 0xac, 0x51, 0x4b, 0xb6, 0xc4, + 0x39, 0x23, 0xde, 0x17, 0xea, 0xf0, 0x0d, 0x14, 0xe9, 0xf3, 0x0e, 0xc7, 0x3a, 0x20, 0xdd, + 0xaf, 0x52, 0x48, 0xb5, 0x7c, 0x81, 0x9b, 0x66, 0xa9, 0x54, 0x4e, 0xb3, 0x7a, 0x87, 0x9d, + 0x60, 0x12, 0xef, 0xf5, 0x08, 0xc1, 0x3c, 0x26, 0xdb, 0xc2, 0x3f, 0x25, 0xd8, 0x11, 0xec, + 0xf6, 0x0b, 0x79, 0x84, 0x9e, 0x63, 0xaa, 0x57, 0x4d, 0xb0, 0xce, 0x33, 0x29, 0xd4, 0x1d, + 0xe0, 0xfa, 0x07, 0x75, 0x88, 0x92, 0x6f, 0xa6, 0x5b, 0x41, 0xbc, 0xa5, 0x58, 0x42, 0xbf, + 0x76, 0x8b, 0x91, 0x6c, 0x1e, 0xe3, 0xf9, 0x04, 0xcd, 0x30, 0x2a, 0xd7, 0x18, 0xe5, 0xff, + 0x02, 0xcb, 0x36, 0x2c, 0xd1, 0xa3, 0x5e, 0x44, 0xb9, 0x70, 0x8d, 0x97, 0x6a, 0x73, 0x8e, + 0x94, 0x69, 0xa0, 0x5d, 0x47, 0xba, 0xc8, 0x35, 0x2f, 0xd2, 0x1b, 0xe6, 0xfc, 0x01, 0x00, + 0xfe, 0xe1, 0x1f, 0xdf, 0x21, 0x3e, 0xc0, 0xa3, 0x5d, 0x42, 0xbc, 0x7c, 0x82, 0x9d, 0x63, + 0x5b, 0xa5, 0xba, 0x44, 0x84, 0x7a, 0x65, 0x9b, 0xf8, 0x06, 0x19, 0xe7, 0x27, 0xd9, 0xc6, + 0x38, 0xb6, 0x48, 0x57, 0xa9, 0x69, 0x97, 0x88, 0x76, 0x15, 0xeb, 0xf4, 0x0a, 0xca, 0x34, + 0x2b, 0xd5, 0xed, 0x13, 0x0c, 0xf2, 0x32, 0xcc, 0xd3, 0x2d, 0x4e, 0xb0, 0xaf, 0x51, 0x91, + 0x6f, 0x70, 0x8e, 0x71, 0x8f, 0x90, 0x6e, 0xae, 0x50, 0x4f, 0xb1, 0xd2, 0x2c, 0x33, 0xcd, + 0x0d, 0xf3, 0xec, 0x12, 0x2a, 0xd4, 0xcb, 0x35, 0xf5, 0x0b, 0x14, 0xea, 0x89, 0x77, 0x68, + 0x96, 0x56, 0xa8, 0xb7, 0x49, 0xc7, 0x39, 0x26, 0xd8, 0x18, 0xe6, 0xf9, 0x07, 0x64, 0x9a, + 0x85, 0x7b, 0xbb, 0x45, 0x5a, 0xa4, 0x9c, 0x62, 0x7d, 0x83, 0x43, 0xbd, 0xa2, 0x5c, 0x3f, + 0xc1, 0xde, 0x20, 0xe0, 0x1e, 0x01, 0xff, 0xe2, 0x1c, 0x03, 0xfd, 0x3d, 0xc3, 0xdc, 0x22, + 0x41, 0xbf, 0xa0, 0x5e, 0x9e, 0x60, 0x7f, 0x81, 0xb9, 0x47, 0x58, 0xa6, 0x66, 0x98, 0x87, + 0x79, 0x1a, 0xe4, 0xfb, 0x05, 0xc5, 0x3b, 0x24, 0xda, 0x54, 0xaa, 0xb5, 0x4b, 0x8b, 0x75, + 0x6a, 0x94, 0xf7, 0x09, 0x16, 0xe8, 0x28, 0xd6, 0xc9, 0x37, 0x0f, 0xf1, 0xee, 0x10, 0xd0, + 0x2e, 0x31, 0xcf, 0xac, 0x52, 0x4d, 0xb3, 0x73, 0x8d, 0x92, 0x6c, 0x93, 0x6d, 0x72, 0x8c, + 0x4c, 0xb2, 0xad, 0x53, 0x30, 0xce, 0xd1, 0x2f, 0xef, 0x11, 0x0e, 0xf0, 0xc8, 0x36, 0x29, + 0xd7, 0x17, 0xe9, 0xf6, 0x08, 0x6b, 0x95, 0x8a, 0x74, 0xb4, 0x4a, 0x55, 0xab, 0x25, 0xdb, + 0xc4, 0x3a, 0xfa, 0x04, 0x1b, 0xe5, 0x86, 0x78, 0x67, 0x99, 0x59, 0xa7, 0xb8, 0x46, 0x7e, + 0x80, 0x9f, 0x61, 0xa1, 0x5f, 0x40, 0xbe, 0xdd, 0x23, 0x3c, 0xc2, 0x02, 0xfc, 0xe3, 0x1d, + 0x00, 0xff, 0xe3, 0x1c, 0xdb, 0x24, 0x38, 0xc7, 0xab, 0x54, 0x48, 0xb7, 0x70, 0x8f, 0x93, + 0x6c, 0x4b, 0xb4, 0xa8, 0x57, 0x90, 0x6f, 0x73, 0x8c, 0xe0, 0x1f, 0x03, 0xfc, 0x3b, 0xc4, + 0xd8, 0x27, 0x96, 0x69, 0x75, 0x8a, 0x4d, 0xb2, 0xae, 0x51, 0x3d, 0xc2, 0xde, 0x21, 0xe6, + 0x19, 0x05, 0xfa, 0xdd, 0x22, 0x3e, 0xc1, 0x06, 0xf9, 0xe5, 0x1a, 0x76, 0x89, 0x95, 0x6a, + 0xad, 0x52, 0x4e, 0xb1, 0x31, 0xce, 0xd2, 0x2d, 0xea, 0x15, 0x09, 0xf6, 0x9a, 0x65, 0x79, + 0x86, 0x41, 0xbe, 0xa2, 0x5d, 0x7a, 0x85, 0x99, 0x66, 0xa1, 0x5e, 0x42, 0xbd, 0xd1, 0x2e, + 0x32, 0xcd, 0x0a, 0xf5, 0xe9, 0x16, 0xa7, 0x58, 0x44, 0xbb, 0x7c, 0x83, 0x9f, 0x60, 0x0c, + 0xf3, 0xef, 0x10, 0xd7, 0x28, 0x34, 0xcb, 0xec, 0x13, 0x0f, 0xf0, 0x37, 0xc8, 0xd4, 0x2b, + 0x47, 0xb8, 0xa4, 0x5b, 0x9c, 0x63, 0x7f, 0x80, 0x62, 0x9d, 0x81, 0x7e, 0xb9, 0x46, 0x5a, + 0xa5, 0xc9, 0x36, 0x2a, 0xd5, 0x12, 0xed, 0xf1, 0x0e, 0x29, 0xd6, 0xca, 0x35, 0xf2, 0x0d, + 0x11, 0xee, 0x82, 0x7d, 0x61, 0x9e, 0x59, 0xa6, 0xba, 0x45, 0xf4, 0x0b, 0x17, 0xe8, 0x2f, + 0xd0, 0xcc, 0x33, 0x5f, 0xa0, 0xbc, 0x43, 0x84, 0x7b, 0x67, 0x98, 0xbf, 0x40, 0x5c, 0xa3, + 0x64, 0x9b, 0x87, 0x78, 0x14, 0xeb, 0xf7, 0x08, 0xcf, 0x30, 0x2c, 0xd3, 0x53, 0xac, 0xb0, + 0x4f, 0x88, 0x77, 0x6b, 0x94, 0xf8, 0x07, 0x1b, 0xe4, 0x23, 0xdc, 0xc0, 0x3f, 0x18, 0xe7, + 0xfb, 0x04, 0xc3, 0x3c, 0x20, 0xdf, 0xb3, 0x4c, 0x50, 0xaf, 0x68, 0x97, 0x8b, 0x74, 0xc5, + 0x3a, 0x26, 0xd9, 0x1e, 0xe1, 0xfd, 0x02, 0x6e, 0x91, 0x8d, 0x72, 0xb5, 0x4a, 0x56, 0xa9, + 0x8e, 0x71, 0x6d, 0x92, 0x55, 0xaa, 0xb6, 0x49, 0x25, 0xda, 0xc6, 0x39, 0xfe, 0x01, 0x1d, + 0xe2 }; static const unsigned char gf_inv_table_base[] = { - 0x00, 0x01, 0x8e, 0xf4, 0x47, 0xa7, 0x7a, 0xba, 0xad, 0x9d, - 0xdd, 0x98, 0x3d, 0xaa, 0x5d, 0x96, 0xd8, 0x72, 0xc0, 0x58, - 0xe0, 0x3e, 0x4c, 0x66, 0x90, 0xde, 0x55, 0x80, 0xa0, 0x83, - 0x4b, 0x2a, 0x6c, 0xed, 0x39, 0x51, 0x60, 0x56, 0x2c, 0x8a, - 0x70, 0xd0, 0x1f, 0x4a, 0x26, 0x8b, 0x33, 0x6e, 0x48, 0x89, - 0x6f, 0x2e, 0xa4, 0xc3, 0x40, 0x5e, 0x50, 0x22, 0xcf, 0xa9, - 0xab, 0x0c, 0x15, 0xe1, 0x36, 0x5f, 0xf8, 0xd5, 0x92, 0x4e, - 0xa6, 0x04, 0x30, 0x88, 0x2b, 0x1e, 0x16, 0x67, 0x45, 0x93, - 0x38, 0x23, 0x68, 0x8c, 0x81, 0x1a, 0x25, 0x61, 0x13, 0xc1, - 0xcb, 0x63, 0x97, 0x0e, 0x37, 0x41, 0x24, 0x57, 0xca, 0x5b, - 0xb9, 0xc4, 0x17, 0x4d, 0x52, 0x8d, 0xef, 0xb3, 0x20, 0xec, - 0x2f, 0x32, 0x28, 0xd1, 0x11, 0xd9, 0xe9, 0xfb, 0xda, 0x79, - 0xdb, 0x77, 0x06, 0xbb, 0x84, 0xcd, 0xfe, 0xfc, 0x1b, 0x54, - 0xa1, 0x1d, 0x7c, 0xcc, 0xe4, 0xb0, 0x49, 0x31, 0x27, 0x2d, - 0x53, 0x69, 0x02, 0xf5, 0x18, 0xdf, 0x44, 0x4f, 0x9b, 0xbc, - 0x0f, 0x5c, 0x0b, 0xdc, 0xbd, 0x94, 0xac, 0x09, 0xc7, 0xa2, - 0x1c, 0x82, 0x9f, 0xc6, 0x34, 0xc2, 0x46, 0x05, 0xce, 0x3b, - 0x0d, 0x3c, 0x9c, 0x08, 0xbe, 0xb7, 0x87, 0xe5, 0xee, 0x6b, - 0xeb, 0xf2, 0xbf, 0xaf, 0xc5, 0x64, 0x07, 0x7b, 0x95, 0x9a, - 0xae, 0xb6, 0x12, 0x59, 0xa5, 0x35, 0x65, 0xb8, 0xa3, 0x9e, - 0xd2, 0xf7, 0x62, 0x5a, 0x85, 0x7d, 0xa8, 0x3a, 0x29, 0x71, - 0xc8, 0xf6, 0xf9, 0x43, 0xd7, 0xd6, 0x10, 0x73, 0x76, 0x78, - 0x99, 0x0a, 0x19, 0x91, 0x14, 0x3f, 0xe6, 0xf0, 0x86, 0xb1, - 0xe2, 0xf1, 0xfa, 0x74, 0xf3, 0xb4, 0x6d, 0x21, 0xb2, 0x6a, - 0xe3, 0xe7, 0xb5, 0xea, 0x03, 0x8f, 0xd3, 0xc9, 0x42, 0xd4, - 0xe8, 0x75, 0x7f, 0xff, 0x7e, 0xfd + 0x00, 0x01, 0x8e, 0xf4, 0x47, 0xa7, 0x7a, 0xba, 0xad, 0x9d, 0xdd, 0x98, 0x3d, 0xaa, 0x5d, + 0x96, 0xd8, 0x72, 0xc0, 0x58, 0xe0, 0x3e, 0x4c, 0x66, 0x90, 0xde, 0x55, 0x80, 0xa0, 0x83, + 0x4b, 0x2a, 0x6c, 0xed, 0x39, 0x51, 0x60, 0x56, 0x2c, 0x8a, 0x70, 0xd0, 0x1f, 0x4a, 0x26, + 0x8b, 0x33, 0x6e, 0x48, 0x89, 0x6f, 0x2e, 0xa4, 0xc3, 0x40, 0x5e, 0x50, 0x22, 0xcf, 0xa9, + 0xab, 0x0c, 0x15, 0xe1, 0x36, 0x5f, 0xf8, 0xd5, 0x92, 0x4e, 0xa6, 0x04, 0x30, 0x88, 0x2b, + 0x1e, 0x16, 0x67, 0x45, 0x93, 0x38, 0x23, 0x68, 0x8c, 0x81, 0x1a, 0x25, 0x61, 0x13, 0xc1, + 0xcb, 0x63, 0x97, 0x0e, 0x37, 0x41, 0x24, 0x57, 0xca, 0x5b, 0xb9, 0xc4, 0x17, 0x4d, 0x52, + 0x8d, 0xef, 0xb3, 0x20, 0xec, 0x2f, 0x32, 0x28, 0xd1, 0x11, 0xd9, 0xe9, 0xfb, 0xda, 0x79, + 0xdb, 0x77, 0x06, 0xbb, 0x84, 0xcd, 0xfe, 0xfc, 0x1b, 0x54, 0xa1, 0x1d, 0x7c, 0xcc, 0xe4, + 0xb0, 0x49, 0x31, 0x27, 0x2d, 0x53, 0x69, 0x02, 0xf5, 0x18, 0xdf, 0x44, 0x4f, 0x9b, 0xbc, + 0x0f, 0x5c, 0x0b, 0xdc, 0xbd, 0x94, 0xac, 0x09, 0xc7, 0xa2, 0x1c, 0x82, 0x9f, 0xc6, 0x34, + 0xc2, 0x46, 0x05, 0xce, 0x3b, 0x0d, 0x3c, 0x9c, 0x08, 0xbe, 0xb7, 0x87, 0xe5, 0xee, 0x6b, + 0xeb, 0xf2, 0xbf, 0xaf, 0xc5, 0x64, 0x07, 0x7b, 0x95, 0x9a, 0xae, 0xb6, 0x12, 0x59, 0xa5, + 0x35, 0x65, 0xb8, 0xa3, 0x9e, 0xd2, 0xf7, 0x62, 0x5a, 0x85, 0x7d, 0xa8, 0x3a, 0x29, 0x71, + 0xc8, 0xf6, 0xf9, 0x43, 0xd7, 0xd6, 0x10, 0x73, 0x76, 0x78, 0x99, 0x0a, 0x19, 0x91, 0x14, + 0x3f, 0xe6, 0xf0, 0x86, 0xb1, 0xe2, 0xf1, 0xfa, 0x74, 0xf3, 0xb4, 0x6d, 0x21, 0xb2, 0x6a, + 0xe3, 0xe7, 0xb5, 0xea, 0x03, 0x8f, 0xd3, 0xc9, 0x42, 0xd4, 0xe8, 0x75, 0x7f, 0xff, 0x7e, + 0xfd }; #endif // GF_LARGE_TABLES diff --git a/erasure_code/ec_base_aliases.c b/erasure_code/ec_base_aliases.c index 705dfb68..2c385a26 100644 --- a/erasure_code/ec_base_aliases.c +++ b/erasure_code/ec_base_aliases.c @@ -29,37 +29,40 @@ #include "erasure_code.h" -void gf_vect_dot_prod(int len, int vlen, unsigned char *v, - unsigned char **src, unsigned char *dest) +void +gf_vect_dot_prod(int len, int vlen, unsigned char *v, unsigned char **src, unsigned char *dest) { - gf_vect_dot_prod_base(len, vlen, v, src, dest); + gf_vect_dot_prod_base(len, vlen, v, src, dest); } -void gf_vect_mad(int len, int vec, int vec_i, - unsigned char *v, unsigned char *src, unsigned char *dest) +void +gf_vect_mad(int len, int vec, int vec_i, unsigned char *v, unsigned char *src, unsigned char *dest) { - gf_vect_mad_base(len, vec, vec_i, v, src, dest); - + gf_vect_mad_base(len, vec, vec_i, v, src, dest); } -void ec_encode_data(int len, int srcs, int dests, unsigned char *v, - unsigned char **src, unsigned char **dest) +void +ec_encode_data(int len, int srcs, int dests, unsigned char *v, unsigned char **src, + unsigned char **dest) { - ec_encode_data_base(len, srcs, dests, v, src, dest); + ec_encode_data_base(len, srcs, dests, v, src, dest); } -void ec_encode_data_update(int len, int k, int rows, int vec_i, unsigned char *v, - unsigned char *data, unsigned char **dest) +void +ec_encode_data_update(int len, int k, int rows, int vec_i, unsigned char *v, unsigned char *data, + unsigned char **dest) { - ec_encode_data_update_base(len, k, rows, vec_i, v, data, dest); + ec_encode_data_update_base(len, k, rows, vec_i, v, data, dest); } -int gf_vect_mul(int len, unsigned char *a, void *src, void *dest) +int +gf_vect_mul(int len, unsigned char *a, void *src, void *dest) { - return gf_vect_mul_base(len, a, (unsigned char *)src, (unsigned char *)dest); + return gf_vect_mul_base(len, a, (unsigned char *) src, (unsigned char *) dest); } -void ec_init_tables(int k, int rows, unsigned char *a, unsigned char *g_tbls) +void +ec_init_tables(int k, int rows, unsigned char *a, unsigned char *g_tbls) { - return ec_init_tables_base(k, rows, a, g_tbls); + return ec_init_tables_base(k, rows, a, g_tbls); } diff --git a/erasure_code/ec_highlevel_func.c b/erasure_code/ec_highlevel_func.c index 373cd337..c9a10ff6 100644 --- a/erasure_code/ec_highlevel_func.c +++ b/erasure_code/ec_highlevel_func.c @@ -28,387 +28,423 @@ **********************************************************************/ #include #include "erasure_code.h" -#include "ec_base.h" /* for GF tables */ +#include "ec_base.h" /* for GF tables */ -#if __x86_64__ || __i386__ || _M_X64 || _M_IX86 -void ec_encode_data_sse(int len, int k, int rows, unsigned char *g_tbls, unsigned char **data, - unsigned char **coding) +#if __x86_64__ || __i386__ || _M_X64 || _M_IX86 +void +ec_encode_data_sse(int len, int k, int rows, unsigned char *g_tbls, unsigned char **data, + unsigned char **coding) { - if (len < 16) { - ec_encode_data_base(len, k, rows, g_tbls, data, coding); - return; - } - - while (rows >= 6) { - gf_6vect_dot_prod_sse(len, k, g_tbls, data, coding); - g_tbls += 6 * k * 32; - coding += 6; - rows -= 6; - } - switch (rows) { - case 5: - gf_5vect_dot_prod_sse(len, k, g_tbls, data, coding); - break; - case 4: - gf_4vect_dot_prod_sse(len, k, g_tbls, data, coding); - break; - case 3: - gf_3vect_dot_prod_sse(len, k, g_tbls, data, coding); - break; - case 2: - gf_2vect_dot_prod_sse(len, k, g_tbls, data, coding); - break; - case 1: - gf_vect_dot_prod_sse(len, k, g_tbls, data, *coding); - break; - case 0: - break; - } - + if (len < 16) { + ec_encode_data_base(len, k, rows, g_tbls, data, coding); + return; + } + + while (rows >= 6) { + gf_6vect_dot_prod_sse(len, k, g_tbls, data, coding); + g_tbls += 6 * k * 32; + coding += 6; + rows -= 6; + } + switch (rows) { + case 5: + gf_5vect_dot_prod_sse(len, k, g_tbls, data, coding); + break; + case 4: + gf_4vect_dot_prod_sse(len, k, g_tbls, data, coding); + break; + case 3: + gf_3vect_dot_prod_sse(len, k, g_tbls, data, coding); + break; + case 2: + gf_2vect_dot_prod_sse(len, k, g_tbls, data, coding); + break; + case 1: + gf_vect_dot_prod_sse(len, k, g_tbls, data, *coding); + break; + case 0: + break; + } } -void ec_encode_data_avx(int len, int k, int rows, unsigned char *g_tbls, unsigned char **data, - unsigned char **coding) +void +ec_encode_data_avx(int len, int k, int rows, unsigned char *g_tbls, unsigned char **data, + unsigned char **coding) { - if (len < 16) { - ec_encode_data_base(len, k, rows, g_tbls, data, coding); - return; - } - - while (rows >= 6) { - gf_6vect_dot_prod_avx(len, k, g_tbls, data, coding); - g_tbls += 6 * k * 32; - coding += 6; - rows -= 6; - } - switch (rows) { - case 5: - gf_5vect_dot_prod_avx(len, k, g_tbls, data, coding); - break; - case 4: - gf_4vect_dot_prod_avx(len, k, g_tbls, data, coding); - break; - case 3: - gf_3vect_dot_prod_avx(len, k, g_tbls, data, coding); - break; - case 2: - gf_2vect_dot_prod_avx(len, k, g_tbls, data, coding); - break; - case 1: - gf_vect_dot_prod_avx(len, k, g_tbls, data, *coding); - break; - case 0: - break; - } - + if (len < 16) { + ec_encode_data_base(len, k, rows, g_tbls, data, coding); + return; + } + + while (rows >= 6) { + gf_6vect_dot_prod_avx(len, k, g_tbls, data, coding); + g_tbls += 6 * k * 32; + coding += 6; + rows -= 6; + } + switch (rows) { + case 5: + gf_5vect_dot_prod_avx(len, k, g_tbls, data, coding); + break; + case 4: + gf_4vect_dot_prod_avx(len, k, g_tbls, data, coding); + break; + case 3: + gf_3vect_dot_prod_avx(len, k, g_tbls, data, coding); + break; + case 2: + gf_2vect_dot_prod_avx(len, k, g_tbls, data, coding); + break; + case 1: + gf_vect_dot_prod_avx(len, k, g_tbls, data, *coding); + break; + case 0: + break; + } } -void ec_encode_data_avx2(int len, int k, int rows, unsigned char *g_tbls, unsigned char **data, - unsigned char **coding) +void +ec_encode_data_avx2(int len, int k, int rows, unsigned char *g_tbls, unsigned char **data, + unsigned char **coding) { - if (len < 32) { - ec_encode_data_base(len, k, rows, g_tbls, data, coding); - return; - } - - while (rows >= 6) { - gf_6vect_dot_prod_avx2(len, k, g_tbls, data, coding); - g_tbls += 6 * k * 32; - coding += 6; - rows -= 6; - } - switch (rows) { - case 5: - gf_5vect_dot_prod_avx2(len, k, g_tbls, data, coding); - break; - case 4: - gf_4vect_dot_prod_avx2(len, k, g_tbls, data, coding); - break; - case 3: - gf_3vect_dot_prod_avx2(len, k, g_tbls, data, coding); - break; - case 2: - gf_2vect_dot_prod_avx2(len, k, g_tbls, data, coding); - break; - case 1: - gf_vect_dot_prod_avx2(len, k, g_tbls, data, *coding); - break; - case 0: - break; - } - + if (len < 32) { + ec_encode_data_base(len, k, rows, g_tbls, data, coding); + return; + } + + while (rows >= 6) { + gf_6vect_dot_prod_avx2(len, k, g_tbls, data, coding); + g_tbls += 6 * k * 32; + coding += 6; + rows -= 6; + } + switch (rows) { + case 5: + gf_5vect_dot_prod_avx2(len, k, g_tbls, data, coding); + break; + case 4: + gf_4vect_dot_prod_avx2(len, k, g_tbls, data, coding); + break; + case 3: + gf_3vect_dot_prod_avx2(len, k, g_tbls, data, coding); + break; + case 2: + gf_2vect_dot_prod_avx2(len, k, g_tbls, data, coding); + break; + case 1: + gf_vect_dot_prod_avx2(len, k, g_tbls, data, *coding); + break; + case 0: + break; + } } #ifdef HAVE_AS_KNOWS_AVX512 -extern int gf_vect_dot_prod_avx512(int len, int k, unsigned char *g_tbls, unsigned char **data, - unsigned char *dest); -extern int gf_2vect_dot_prod_avx512(int len, int k, unsigned char *g_tbls, - unsigned char **data, unsigned char **coding); -extern int gf_3vect_dot_prod_avx512(int len, int k, unsigned char *g_tbls, - unsigned char **data, unsigned char **coding); -extern int gf_4vect_dot_prod_avx512(int len, int k, unsigned char *g_tbls, - unsigned char **data, unsigned char **coding); -extern int gf_5vect_dot_prod_avx512(int len, int k, unsigned char *g_tbls, - unsigned char **data, unsigned char **coding); -extern int gf_6vect_dot_prod_avx512(int len, int k, unsigned char *g_tbls, - unsigned char **data, unsigned char **coding); -extern void gf_vect_mad_avx512(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char *dest); -extern void gf_2vect_mad_avx512(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest); -extern void gf_3vect_mad_avx512(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest); -extern void gf_4vect_mad_avx512(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest); -extern void gf_5vect_mad_avx512(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest); -extern void gf_6vect_mad_avx512(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest); - -void ec_encode_data_avx512(int len, int k, int rows, unsigned char *g_tbls, - unsigned char **data, unsigned char **coding) +extern int +gf_vect_dot_prod_avx512(int len, int k, unsigned char *g_tbls, unsigned char **data, + unsigned char *dest); +extern int +gf_2vect_dot_prod_avx512(int len, int k, unsigned char *g_tbls, unsigned char **data, + unsigned char **coding); +extern int +gf_3vect_dot_prod_avx512(int len, int k, unsigned char *g_tbls, unsigned char **data, + unsigned char **coding); +extern int +gf_4vect_dot_prod_avx512(int len, int k, unsigned char *g_tbls, unsigned char **data, + unsigned char **coding); +extern int +gf_5vect_dot_prod_avx512(int len, int k, unsigned char *g_tbls, unsigned char **data, + unsigned char **coding); +extern int +gf_6vect_dot_prod_avx512(int len, int k, unsigned char *g_tbls, unsigned char **data, + unsigned char **coding); +extern void +gf_vect_mad_avx512(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char *dest); +extern void +gf_2vect_mad_avx512(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); +extern void +gf_3vect_mad_avx512(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); +extern void +gf_4vect_mad_avx512(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); +extern void +gf_5vect_mad_avx512(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); +extern void +gf_6vect_mad_avx512(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); + +void +ec_encode_data_avx512(int len, int k, int rows, unsigned char *g_tbls, unsigned char **data, + unsigned char **coding) { - if (len < 64) { - ec_encode_data_base(len, k, rows, g_tbls, data, coding); - return; - } - - while (rows >= 6) { - gf_6vect_dot_prod_avx512(len, k, g_tbls, data, coding); - g_tbls += 6 * k * 32; - coding += 6; - rows -= 6; - } - switch (rows) { - case 5: - gf_5vect_dot_prod_avx512(len, k, g_tbls, data, coding); - break; - case 4: - gf_4vect_dot_prod_avx512(len, k, g_tbls, data, coding); - break; - case 3: - gf_3vect_dot_prod_avx512(len, k, g_tbls, data, coding); - break; - case 2: - gf_2vect_dot_prod_avx512(len, k, g_tbls, data, coding); - break; - case 1: - gf_vect_dot_prod_avx512(len, k, g_tbls, data, *coding); - break; - case 0: - break; - } + if (len < 64) { + ec_encode_data_base(len, k, rows, g_tbls, data, coding); + return; + } + + while (rows >= 6) { + gf_6vect_dot_prod_avx512(len, k, g_tbls, data, coding); + g_tbls += 6 * k * 32; + coding += 6; + rows -= 6; + } + switch (rows) { + case 5: + gf_5vect_dot_prod_avx512(len, k, g_tbls, data, coding); + break; + case 4: + gf_4vect_dot_prod_avx512(len, k, g_tbls, data, coding); + break; + case 3: + gf_3vect_dot_prod_avx512(len, k, g_tbls, data, coding); + break; + case 2: + gf_2vect_dot_prod_avx512(len, k, g_tbls, data, coding); + break; + case 1: + gf_vect_dot_prod_avx512(len, k, g_tbls, data, *coding); + break; + case 0: + break; + } } -void ec_encode_data_update_avx512(int len, int k, int rows, int vec_i, unsigned char *g_tbls, - unsigned char *data, unsigned char **coding) +void +ec_encode_data_update_avx512(int len, int k, int rows, int vec_i, unsigned char *g_tbls, + unsigned char *data, unsigned char **coding) { - if (len < 64) { - ec_encode_data_update_base(len, k, rows, vec_i, g_tbls, data, coding); - return; - } - - while (rows >= 6) { - gf_6vect_mad_avx512(len, k, vec_i, g_tbls, data, coding); - g_tbls += 6 * k * 32; - coding += 6; - rows -= 6; - } - switch (rows) { - case 5: - gf_5vect_mad_avx512(len, k, vec_i, g_tbls, data, coding); - break; - case 4: - gf_4vect_mad_avx512(len, k, vec_i, g_tbls, data, coding); - break; - case 3: - gf_3vect_mad_avx512(len, k, vec_i, g_tbls, data, coding); - break; - case 2: - gf_2vect_mad_avx512(len, k, vec_i, g_tbls, data, coding); - break; - case 1: - gf_vect_mad_avx512(len, k, vec_i, g_tbls, data, *coding); - break; - case 0: - break; - } + if (len < 64) { + ec_encode_data_update_base(len, k, rows, vec_i, g_tbls, data, coding); + return; + } + + while (rows >= 6) { + gf_6vect_mad_avx512(len, k, vec_i, g_tbls, data, coding); + g_tbls += 6 * k * 32; + coding += 6; + rows -= 6; + } + switch (rows) { + case 5: + gf_5vect_mad_avx512(len, k, vec_i, g_tbls, data, coding); + break; + case 4: + gf_4vect_mad_avx512(len, k, vec_i, g_tbls, data, coding); + break; + case 3: + gf_3vect_mad_avx512(len, k, vec_i, g_tbls, data, coding); + break; + case 2: + gf_2vect_mad_avx512(len, k, vec_i, g_tbls, data, coding); + break; + case 1: + gf_vect_mad_avx512(len, k, vec_i, g_tbls, data, *coding); + break; + case 0: + break; + } } #if AS_FEATURE_LEVEL >= 10 -extern void gf_vect_dot_prod_avx512_gfni(int len, int k, unsigned char *g_tbls, - unsigned char **data, unsigned char *dest); -extern void gf_2vect_dot_prod_avx512_gfni(int len, int k, unsigned char *g_tbls, - unsigned char **data, unsigned char **coding); -extern void gf_3vect_dot_prod_avx512_gfni(int len, int k, unsigned char *g_tbls, - unsigned char **data, unsigned char **coding); -extern void gf_4vect_dot_prod_avx512_gfni(int len, int k, unsigned char *g_tbls, - unsigned char **data, unsigned char **coding); -extern void gf_5vect_dot_prod_avx512_gfni(int len, int k, unsigned char *g_tbls, - unsigned char **data, unsigned char **coding); -extern void gf_6vect_dot_prod_avx512_gfni(int len, int k, unsigned char *g_tbls, - unsigned char **data, unsigned char **coding); - -extern void gf_vect_mad_avx512_gfni(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char *dest); -extern void gf_2vect_mad_avx512_gfni(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest); -extern void gf_3vect_mad_avx512_gfni(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest); -extern void gf_4vect_mad_avx512_gfni(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest); -extern void gf_5vect_mad_avx512_gfni(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest); -extern void gf_6vect_mad_avx512_gfni(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest); - -extern void gf_vect_dot_prod_avx2_gfni(int len, int k, unsigned char *g_tbls, - unsigned char **data, unsigned char *dest); -extern void gf_2vect_dot_prod_avx2_gfni(int len, int k, unsigned char *g_tbls, - unsigned char **data, unsigned char **coding); -extern void gf_3vect_dot_prod_avx2_gfni(int len, int k, unsigned char *g_tbls, - unsigned char **data, unsigned char **coding); -extern void gf_vect_mad_avx2_gfni(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char *dest); -extern void gf_2vect_mad_avx2_gfni(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest); -extern void gf_3vect_mad_avx2_gfni(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest); -extern void gf_4vect_mad_avx2_gfni(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest); -extern void gf_5vect_mad_avx2_gfni(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest); - -void ec_init_tables_gfni(int k, int rows, unsigned char *a, unsigned char *g_tbls) +extern void +gf_vect_dot_prod_avx512_gfni(int len, int k, unsigned char *g_tbls, unsigned char **data, + unsigned char *dest); +extern void +gf_2vect_dot_prod_avx512_gfni(int len, int k, unsigned char *g_tbls, unsigned char **data, + unsigned char **coding); +extern void +gf_3vect_dot_prod_avx512_gfni(int len, int k, unsigned char *g_tbls, unsigned char **data, + unsigned char **coding); +extern void +gf_4vect_dot_prod_avx512_gfni(int len, int k, unsigned char *g_tbls, unsigned char **data, + unsigned char **coding); +extern void +gf_5vect_dot_prod_avx512_gfni(int len, int k, unsigned char *g_tbls, unsigned char **data, + unsigned char **coding); +extern void +gf_6vect_dot_prod_avx512_gfni(int len, int k, unsigned char *g_tbls, unsigned char **data, + unsigned char **coding); + +extern void +gf_vect_mad_avx512_gfni(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char *dest); +extern void +gf_2vect_mad_avx512_gfni(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); +extern void +gf_3vect_mad_avx512_gfni(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); +extern void +gf_4vect_mad_avx512_gfni(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); +extern void +gf_5vect_mad_avx512_gfni(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); +extern void +gf_6vect_mad_avx512_gfni(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); + +extern void +gf_vect_dot_prod_avx2_gfni(int len, int k, unsigned char *g_tbls, unsigned char **data, + unsigned char *dest); +extern void +gf_2vect_dot_prod_avx2_gfni(int len, int k, unsigned char *g_tbls, unsigned char **data, + unsigned char **coding); +extern void +gf_3vect_dot_prod_avx2_gfni(int len, int k, unsigned char *g_tbls, unsigned char **data, + unsigned char **coding); +extern void +gf_vect_mad_avx2_gfni(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char *dest); +extern void +gf_2vect_mad_avx2_gfni(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); +extern void +gf_3vect_mad_avx2_gfni(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); +extern void +gf_4vect_mad_avx2_gfni(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); +extern void +gf_5vect_mad_avx2_gfni(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); + +void +ec_init_tables_gfni(int k, int rows, unsigned char *a, unsigned char *g_tbls) { - int i, j; - - uint64_t *g64 = (uint64_t *) g_tbls; + int i, j; - for (i = 0; i < rows; i++) - for (j = 0; j < k; j++) - *(g64++) = gf_table_gfni[*a++]; + uint64_t *g64 = (uint64_t *) g_tbls; + for (i = 0; i < rows; i++) + for (j = 0; j < k; j++) + *(g64++) = gf_table_gfni[*a++]; } -void ec_encode_data_avx512_gfni(int len, int k, int rows, unsigned char *g_tbls, - unsigned char **data, unsigned char **coding) +void +ec_encode_data_avx512_gfni(int len, int k, int rows, unsigned char *g_tbls, unsigned char **data, + unsigned char **coding) { - while (rows >= 6) { - gf_6vect_dot_prod_avx512_gfni(len, k, g_tbls, data, coding); - g_tbls += 6 * k * 8; - coding += 6; - rows -= 6; - } - switch (rows) { - case 5: - gf_5vect_dot_prod_avx512_gfni(len, k, g_tbls, data, coding); - break; - case 4: - gf_4vect_dot_prod_avx512_gfni(len, k, g_tbls, data, coding); - break; - case 3: - gf_3vect_dot_prod_avx512_gfni(len, k, g_tbls, data, coding); - break; - case 2: - gf_2vect_dot_prod_avx512_gfni(len, k, g_tbls, data, coding); - break; - case 1: - gf_vect_dot_prod_avx512_gfni(len, k, g_tbls, data, *coding); - break; - case 0: - default: - break; - } + while (rows >= 6) { + gf_6vect_dot_prod_avx512_gfni(len, k, g_tbls, data, coding); + g_tbls += 6 * k * 8; + coding += 6; + rows -= 6; + } + switch (rows) { + case 5: + gf_5vect_dot_prod_avx512_gfni(len, k, g_tbls, data, coding); + break; + case 4: + gf_4vect_dot_prod_avx512_gfni(len, k, g_tbls, data, coding); + break; + case 3: + gf_3vect_dot_prod_avx512_gfni(len, k, g_tbls, data, coding); + break; + case 2: + gf_2vect_dot_prod_avx512_gfni(len, k, g_tbls, data, coding); + break; + case 1: + gf_vect_dot_prod_avx512_gfni(len, k, g_tbls, data, *coding); + break; + case 0: + default: + break; + } } -void ec_encode_data_avx2_gfni(int len, int k, int rows, unsigned char *g_tbls, - unsigned char **data, unsigned char **coding) +void +ec_encode_data_avx2_gfni(int len, int k, int rows, unsigned char *g_tbls, unsigned char **data, + unsigned char **coding) { - while (rows >= 3) { - gf_3vect_dot_prod_avx2_gfni(len, k, g_tbls, data, coding); - g_tbls += 3 * k * 8; - coding += 3; - rows -= 3; - } - switch (rows) { - case 2: - gf_2vect_dot_prod_avx2_gfni(len, k, g_tbls, data, coding); - break; - case 1: - gf_vect_dot_prod_avx2_gfni(len, k, g_tbls, data, *coding); - break; - case 0: - default: - break; - } + while (rows >= 3) { + gf_3vect_dot_prod_avx2_gfni(len, k, g_tbls, data, coding); + g_tbls += 3 * k * 8; + coding += 3; + rows -= 3; + } + switch (rows) { + case 2: + gf_2vect_dot_prod_avx2_gfni(len, k, g_tbls, data, coding); + break; + case 1: + gf_vect_dot_prod_avx2_gfni(len, k, g_tbls, data, *coding); + break; + case 0: + default: + break; + } } -void ec_encode_data_update_avx512_gfni(int len, int k, int rows, int vec_i, - unsigned char *g_tbls, unsigned char *data, - unsigned char **coding) +void +ec_encode_data_update_avx512_gfni(int len, int k, int rows, int vec_i, unsigned char *g_tbls, + unsigned char *data, unsigned char **coding) { - while (rows >= 6) { - gf_6vect_mad_avx512_gfni(len, k, vec_i, g_tbls, data, coding); - g_tbls += 6 * k * 8; - coding += 6; - rows -= 6; - } - switch (rows) { - case 5: - gf_5vect_mad_avx512_gfni(len, k, vec_i, g_tbls, data, coding); - break; - case 4: - gf_4vect_mad_avx512_gfni(len, k, vec_i, g_tbls, data, coding); - break; - case 3: - gf_3vect_mad_avx512_gfni(len, k, vec_i, g_tbls, data, coding); - break; - case 2: - gf_2vect_mad_avx512_gfni(len, k, vec_i, g_tbls, data, coding); - break; - case 1: - gf_vect_mad_avx512_gfni(len, k, vec_i, g_tbls, data, *coding); - break; - case 0: - default: - break; - } + while (rows >= 6) { + gf_6vect_mad_avx512_gfni(len, k, vec_i, g_tbls, data, coding); + g_tbls += 6 * k * 8; + coding += 6; + rows -= 6; + } + switch (rows) { + case 5: + gf_5vect_mad_avx512_gfni(len, k, vec_i, g_tbls, data, coding); + break; + case 4: + gf_4vect_mad_avx512_gfni(len, k, vec_i, g_tbls, data, coding); + break; + case 3: + gf_3vect_mad_avx512_gfni(len, k, vec_i, g_tbls, data, coding); + break; + case 2: + gf_2vect_mad_avx512_gfni(len, k, vec_i, g_tbls, data, coding); + break; + case 1: + gf_vect_mad_avx512_gfni(len, k, vec_i, g_tbls, data, *coding); + break; + case 0: + default: + break; + } } -void ec_encode_data_update_avx2_gfni(int len, int k, int rows, int vec_i, - unsigned char *g_tbls, unsigned char *data, - unsigned char **coding) +void +ec_encode_data_update_avx2_gfni(int len, int k, int rows, int vec_i, unsigned char *g_tbls, + unsigned char *data, unsigned char **coding) { - while (rows >= 5) { - gf_5vect_mad_avx2_gfni(len, k, vec_i, g_tbls, data, coding); - g_tbls += 5 * k * 8; - coding += 5; - rows -= 5; - } - switch (rows) { - case 4: - gf_4vect_mad_avx2_gfni(len, k, vec_i, g_tbls, data, coding); - break; - case 3: - gf_3vect_mad_avx2_gfni(len, k, vec_i, g_tbls, data, coding); - break; - case 2: - gf_2vect_mad_avx2_gfni(len, k, vec_i, g_tbls, data, coding); - break; - case 1: - gf_vect_mad_avx2_gfni(len, k, vec_i, g_tbls, data, *coding); - break; - case 0: - default: - break; - } + while (rows >= 5) { + gf_5vect_mad_avx2_gfni(len, k, vec_i, g_tbls, data, coding); + g_tbls += 5 * k * 8; + coding += 5; + rows -= 5; + } + switch (rows) { + case 4: + gf_4vect_mad_avx2_gfni(len, k, vec_i, g_tbls, data, coding); + break; + case 3: + gf_3vect_mad_avx2_gfni(len, k, vec_i, g_tbls, data, coding); + break; + case 2: + gf_2vect_mad_avx2_gfni(len, k, vec_i, g_tbls, data, coding); + break; + case 1: + gf_vect_mad_avx2_gfni(len, k, vec_i, g_tbls, data, *coding); + break; + case 0: + default: + break; + } } #endif // AS_FEATURE_LEVEL >= 10 @@ -416,119 +452,119 @@ void ec_encode_data_update_avx2_gfni(int len, int k, int rows, int vec_i, #if __WORDSIZE == 64 || _WIN64 || __x86_64__ -void ec_encode_data_update_sse(int len, int k, int rows, int vec_i, unsigned char *g_tbls, - unsigned char *data, unsigned char **coding) +void +ec_encode_data_update_sse(int len, int k, int rows, int vec_i, unsigned char *g_tbls, + unsigned char *data, unsigned char **coding) { - if (len < 16) { - ec_encode_data_update_base(len, k, rows, vec_i, g_tbls, data, coding); - return; - } - - while (rows > 6) { - gf_6vect_mad_sse(len, k, vec_i, g_tbls, data, coding); - g_tbls += 6 * k * 32; - coding += 6; - rows -= 6; - } - switch (rows) { - case 6: - gf_6vect_mad_sse(len, k, vec_i, g_tbls, data, coding); - break; - case 5: - gf_5vect_mad_sse(len, k, vec_i, g_tbls, data, coding); - break; - case 4: - gf_4vect_mad_sse(len, k, vec_i, g_tbls, data, coding); - break; - case 3: - gf_3vect_mad_sse(len, k, vec_i, g_tbls, data, coding); - break; - case 2: - gf_2vect_mad_sse(len, k, vec_i, g_tbls, data, coding); - break; - case 1: - gf_vect_mad_sse(len, k, vec_i, g_tbls, data, *coding); - break; - case 0: - break; - } - + if (len < 16) { + ec_encode_data_update_base(len, k, rows, vec_i, g_tbls, data, coding); + return; + } + + while (rows > 6) { + gf_6vect_mad_sse(len, k, vec_i, g_tbls, data, coding); + g_tbls += 6 * k * 32; + coding += 6; + rows -= 6; + } + switch (rows) { + case 6: + gf_6vect_mad_sse(len, k, vec_i, g_tbls, data, coding); + break; + case 5: + gf_5vect_mad_sse(len, k, vec_i, g_tbls, data, coding); + break; + case 4: + gf_4vect_mad_sse(len, k, vec_i, g_tbls, data, coding); + break; + case 3: + gf_3vect_mad_sse(len, k, vec_i, g_tbls, data, coding); + break; + case 2: + gf_2vect_mad_sse(len, k, vec_i, g_tbls, data, coding); + break; + case 1: + gf_vect_mad_sse(len, k, vec_i, g_tbls, data, *coding); + break; + case 0: + break; + } } -void ec_encode_data_update_avx(int len, int k, int rows, int vec_i, unsigned char *g_tbls, - unsigned char *data, unsigned char **coding) +void +ec_encode_data_update_avx(int len, int k, int rows, int vec_i, unsigned char *g_tbls, + unsigned char *data, unsigned char **coding) { - if (len < 16) { - ec_encode_data_update_base(len, k, rows, vec_i, g_tbls, data, coding); - return; - } - while (rows > 6) { - gf_6vect_mad_avx(len, k, vec_i, g_tbls, data, coding); - g_tbls += 6 * k * 32; - coding += 6; - rows -= 6; - } - switch (rows) { - case 6: - gf_6vect_mad_avx(len, k, vec_i, g_tbls, data, coding); - break; - case 5: - gf_5vect_mad_avx(len, k, vec_i, g_tbls, data, coding); - break; - case 4: - gf_4vect_mad_avx(len, k, vec_i, g_tbls, data, coding); - break; - case 3: - gf_3vect_mad_avx(len, k, vec_i, g_tbls, data, coding); - break; - case 2: - gf_2vect_mad_avx(len, k, vec_i, g_tbls, data, coding); - break; - case 1: - gf_vect_mad_avx(len, k, vec_i, g_tbls, data, *coding); - break; - case 0: - break; - } - + if (len < 16) { + ec_encode_data_update_base(len, k, rows, vec_i, g_tbls, data, coding); + return; + } + while (rows > 6) { + gf_6vect_mad_avx(len, k, vec_i, g_tbls, data, coding); + g_tbls += 6 * k * 32; + coding += 6; + rows -= 6; + } + switch (rows) { + case 6: + gf_6vect_mad_avx(len, k, vec_i, g_tbls, data, coding); + break; + case 5: + gf_5vect_mad_avx(len, k, vec_i, g_tbls, data, coding); + break; + case 4: + gf_4vect_mad_avx(len, k, vec_i, g_tbls, data, coding); + break; + case 3: + gf_3vect_mad_avx(len, k, vec_i, g_tbls, data, coding); + break; + case 2: + gf_2vect_mad_avx(len, k, vec_i, g_tbls, data, coding); + break; + case 1: + gf_vect_mad_avx(len, k, vec_i, g_tbls, data, *coding); + break; + case 0: + break; + } } -void ec_encode_data_update_avx2(int len, int k, int rows, int vec_i, unsigned char *g_tbls, - unsigned char *data, unsigned char **coding) +void +ec_encode_data_update_avx2(int len, int k, int rows, int vec_i, unsigned char *g_tbls, + unsigned char *data, unsigned char **coding) { - if (len < 32) { - ec_encode_data_update_base(len, k, rows, vec_i, g_tbls, data, coding); - return; - } - while (rows > 6) { - gf_6vect_mad_avx2(len, k, vec_i, g_tbls, data, coding); - g_tbls += 6 * k * 32; - coding += 6; - rows -= 6; - } - switch (rows) { - case 6: - gf_6vect_mad_avx2(len, k, vec_i, g_tbls, data, coding); - break; - case 5: - gf_5vect_mad_avx2(len, k, vec_i, g_tbls, data, coding); - break; - case 4: - gf_4vect_mad_avx2(len, k, vec_i, g_tbls, data, coding); - break; - case 3: - gf_3vect_mad_avx2(len, k, vec_i, g_tbls, data, coding); - break; - case 2: - gf_2vect_mad_avx2(len, k, vec_i, g_tbls, data, coding); - break; - case 1: - gf_vect_mad_avx2(len, k, vec_i, g_tbls, data, *coding); - break; - case 0: - break; - } - + if (len < 32) { + ec_encode_data_update_base(len, k, rows, vec_i, g_tbls, data, coding); + return; + } + while (rows > 6) { + gf_6vect_mad_avx2(len, k, vec_i, g_tbls, data, coding); + g_tbls += 6 * k * 32; + coding += 6; + rows -= 6; + } + switch (rows) { + case 6: + gf_6vect_mad_avx2(len, k, vec_i, g_tbls, data, coding); + break; + case 5: + gf_5vect_mad_avx2(len, k, vec_i, g_tbls, data, coding); + break; + case 4: + gf_4vect_mad_avx2(len, k, vec_i, g_tbls, data, coding); + break; + case 3: + gf_3vect_mad_avx2(len, k, vec_i, g_tbls, data, coding); + break; + case 2: + gf_2vect_mad_avx2(len, k, vec_i, g_tbls, data, coding); + break; + case 1: + gf_vect_mad_avx2(len, k, vec_i, g_tbls, data, *coding); + break; + case 0: + break; + } } #endif //__WORDSIZE == 64 || _WIN64 || __x86_64__ diff --git a/erasure_code/erasure_code_base_perf.c b/erasure_code/erasure_code_base_perf.c index 4fca1059..bbc8caae 100644 --- a/erasure_code/erasure_code_base_perf.c +++ b/erasure_code/erasure_code_base_perf.c @@ -29,27 +29,27 @@ #include #include -#include // for memset, memcmp +#include // for memset, memcmp #include #include "erasure_code.h" #include "test.h" #ifndef GT_L3_CACHE -# define GT_L3_CACHE 32*1024*1024 /* some number > last level cache */ +#define GT_L3_CACHE 32 * 1024 * 1024 /* some number > last level cache */ #endif #if !defined(COLD_TEST) && !defined(TEST_CUSTOM) // Cached test, loop many times over small dataset -# define TEST_SOURCES 32 -# define TEST_LEN(m) ((128*1024 / m) & ~(64-1)) -# define TEST_TYPE_STR "_warm" -#elif defined (COLD_TEST) +#define TEST_SOURCES 32 +#define TEST_LEN(m) ((128 * 1024 / m) & ~(64 - 1)) +#define TEST_TYPE_STR "_warm" +#elif defined(COLD_TEST) // Uncached test. Pull from large mem base. -# define TEST_SOURCES 32 -# define TEST_LEN(m) ((GT_L3_CACHE / m) & ~(64-1)) -# define TEST_TYPE_STR "_cold" -#elif defined (TEST_CUSTOM) -# define TEST_TYPE_STR "_cus" +#define TEST_SOURCES 32 +#define TEST_LEN(m) ((GT_L3_CACHE / m) & ~(64 - 1)) +#define TEST_TYPE_STR "_cold" +#elif defined(TEST_CUSTOM) +#define TEST_TYPE_STR "_cus" #endif #define MMAX TEST_SOURCES @@ -59,117 +59,120 @@ typedef unsigned char u8; -void ec_encode_perf(int m, int k, u8 * a, u8 * g_tbls, u8 ** buffs) +void +ec_encode_perf(int m, int k, u8 *a, u8 *g_tbls, u8 **buffs) { - ec_init_tables_base(k, m - k, &a[k * k], g_tbls); - ec_encode_data_base(TEST_LEN(m), k, m - k, g_tbls, buffs, &buffs[k]); + ec_init_tables_base(k, m - k, &a[k * k], g_tbls); + ec_encode_data_base(TEST_LEN(m), k, m - k, g_tbls, buffs, &buffs[k]); } -int ec_decode_perf(int m, int k, u8 * a, u8 * g_tbls, u8 ** buffs, u8 * src_in_err, - u8 * src_err_list, int nerrs, u8 ** temp_buffs) +int +ec_decode_perf(int m, int k, u8 *a, u8 *g_tbls, u8 **buffs, u8 *src_in_err, u8 *src_err_list, + int nerrs, u8 **temp_buffs) { - int i, j, r; - u8 b[MMAX * KMAX], c[MMAX * KMAX], d[MMAX * KMAX]; - u8 *recov[TEST_SOURCES]; - - // Construct b by removing error rows - for (i = 0, r = 0; i < k; i++, r++) { - while (src_in_err[r]) - r++; - recov[i] = buffs[r]; - for (j = 0; j < k; j++) - b[k * i + j] = a[k * r + j]; - } - - if (gf_invert_matrix(b, d, k) < 0) - return BAD_MATRIX; - - for (i = 0; i < nerrs; i++) - for (j = 0; j < k; j++) - c[k * i + j] = d[k * src_err_list[i] + j]; - - // Recover data - ec_init_tables_base(k, nerrs, c, g_tbls); - ec_encode_data_base(TEST_LEN(m), k, nerrs, g_tbls, recov, temp_buffs); - - return 0; + int i, j, r; + u8 b[MMAX * KMAX], c[MMAX * KMAX], d[MMAX * KMAX]; + u8 *recov[TEST_SOURCES]; + + // Construct b by removing error rows + for (i = 0, r = 0; i < k; i++, r++) { + while (src_in_err[r]) + r++; + recov[i] = buffs[r]; + for (j = 0; j < k; j++) + b[k * i + j] = a[k * r + j]; + } + + if (gf_invert_matrix(b, d, k) < 0) + return BAD_MATRIX; + + for (i = 0; i < nerrs; i++) + for (j = 0; j < k; j++) + c[k * i + j] = d[k * src_err_list[i] + j]; + + // Recover data + ec_init_tables_base(k, nerrs, c, g_tbls); + ec_encode_data_base(TEST_LEN(m), k, nerrs, g_tbls, recov, temp_buffs); + + return 0; } -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - int i, j, m, k, nerrs, check; - void *buf; - u8 *temp_buffs[TEST_SOURCES], *buffs[TEST_SOURCES]; - u8 a[MMAX * KMAX]; - u8 g_tbls[KMAX * TEST_SOURCES * 32], src_in_err[TEST_SOURCES]; - u8 src_err_list[TEST_SOURCES]; - struct perf start; - - // Pick test parameters - m = 14; - k = 10; - nerrs = 4; - const u8 err_list[] = { 2, 4, 5, 7 }; - - printf("erasure_code_base_perf: %dx%d %d\n", m, TEST_LEN(m), nerrs); - - // check input parameters - assert(!(m > MMAX || k > KMAX || nerrs > (m - k))); - - memcpy(src_err_list, err_list, nerrs); - memset(src_in_err, 0, TEST_SOURCES); - for (i = 0; i < nerrs; i++) - src_in_err[src_err_list[i]] = 1; - - // Allocate the arrays - for (i = 0; i < m; i++) { - if (posix_memalign(&buf, 64, TEST_LEN(m))) { - printf("alloc error: Fail\n"); - return -1; - } - buffs[i] = buf; - } - - for (i = 0; i < (m - k); i++) { - if (posix_memalign(&buf, 64, TEST_LEN(m))) { - printf("alloc error: Fail\n"); - return -1; - } - temp_buffs[i] = buf; - } - - // Make random data - for (i = 0; i < k; i++) - for (j = 0; j < TEST_LEN(m); j++) - buffs[i][j] = rand(); - - gf_gen_rs_matrix(a, m, k); - - // Start encode test - BENCHMARK(&start, BENCHMARK_TIME, ec_encode_perf(m, k, a, g_tbls, buffs)); - printf("erasure_code_base_encode" TEST_TYPE_STR ": "); - perf_print(start, (long long)(TEST_LEN(m)) * (m)); - - // Start decode test - BENCHMARK(&start, BENCHMARK_TIME, check = - ec_decode_perf(m, k, a, g_tbls, buffs, src_in_err, src_err_list, nerrs, - temp_buffs)); - - if (check == BAD_MATRIX) { - printf("BAD MATRIX\n"); - return check; - } - - for (i = 0; i < nerrs; i++) { - if (0 != memcmp(temp_buffs[i], buffs[src_err_list[i]], TEST_LEN(m))) { - printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs); - return -1; - } - } - - printf("erasure_code_base_decode" TEST_TYPE_STR ": "); - perf_print(start, (long long)(TEST_LEN(m)) * (k + nerrs)); - - printf("done all: Pass\n"); - return 0; + int i, j, m, k, nerrs, check; + void *buf; + u8 *temp_buffs[TEST_SOURCES], *buffs[TEST_SOURCES]; + u8 a[MMAX * KMAX]; + u8 g_tbls[KMAX * TEST_SOURCES * 32], src_in_err[TEST_SOURCES]; + u8 src_err_list[TEST_SOURCES]; + struct perf start; + + // Pick test parameters + m = 14; + k = 10; + nerrs = 4; + const u8 err_list[] = { 2, 4, 5, 7 }; + + printf("erasure_code_base_perf: %dx%d %d\n", m, TEST_LEN(m), nerrs); + + // check input parameters + assert(!(m > MMAX || k > KMAX || nerrs > (m - k))); + + memcpy(src_err_list, err_list, nerrs); + memset(src_in_err, 0, TEST_SOURCES); + for (i = 0; i < nerrs; i++) + src_in_err[src_err_list[i]] = 1; + + // Allocate the arrays + for (i = 0; i < m; i++) { + if (posix_memalign(&buf, 64, TEST_LEN(m))) { + printf("alloc error: Fail\n"); + return -1; + } + buffs[i] = buf; + } + + for (i = 0; i < (m - k); i++) { + if (posix_memalign(&buf, 64, TEST_LEN(m))) { + printf("alloc error: Fail\n"); + return -1; + } + temp_buffs[i] = buf; + } + + // Make random data + for (i = 0; i < k; i++) + for (j = 0; j < TEST_LEN(m); j++) + buffs[i][j] = rand(); + + gf_gen_rs_matrix(a, m, k); + + // Start encode test + BENCHMARK(&start, BENCHMARK_TIME, ec_encode_perf(m, k, a, g_tbls, buffs)); + printf("erasure_code_base_encode" TEST_TYPE_STR ": "); + perf_print(start, (long long) (TEST_LEN(m)) * (m)); + + // Start decode test + BENCHMARK(&start, BENCHMARK_TIME, + check = ec_decode_perf(m, k, a, g_tbls, buffs, src_in_err, src_err_list, nerrs, + temp_buffs)); + + if (check == BAD_MATRIX) { + printf("BAD MATRIX\n"); + return check; + } + + for (i = 0; i < nerrs; i++) { + if (0 != memcmp(temp_buffs[i], buffs[src_err_list[i]], TEST_LEN(m))) { + printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs); + return -1; + } + } + + printf("erasure_code_base_decode" TEST_TYPE_STR ": "); + perf_print(start, (long long) (TEST_LEN(m)) * (k + nerrs)); + + printf("done all: Pass\n"); + return 0; } diff --git a/erasure_code/erasure_code_base_test.c b/erasure_code/erasure_code_base_test.c index 0d62f08c..bbd5bc2b 100644 --- a/erasure_code/erasure_code_base_test.c +++ b/erasure_code/erasure_code_base_test.c @@ -29,19 +29,19 @@ #include #include -#include // for memset, memcmp +#include // for memset, memcmp #include #include "erasure_code.h" #include "test.h" -#define TEST_LEN 8192 -#define TEST_SIZE (TEST_LEN/2) +#define TEST_LEN 8192 +#define TEST_SIZE (TEST_LEN / 2) #ifndef TEST_SOURCES -# define TEST_SOURCES 127 +#define TEST_SOURCES 127 #endif #ifndef RANDOMS -# define RANDOMS 50 +#define RANDOMS 50 #endif #define MMAX TEST_SOURCES @@ -51,12 +51,12 @@ #ifdef EC_ALIGNED_ADDR // Define power of 2 range to check ptr, len alignment -# define PTR_ALIGN_CHK_B 0 -# define LEN_ALIGN_CHK_B 0 // 0 for aligned only +#define PTR_ALIGN_CHK_B 0 +#define LEN_ALIGN_CHK_B 0 // 0 for aligned only #else // Define power of 2 range to check ptr, len alignment -# define PTR_ALIGN_CHK_B 32 -# define LEN_ALIGN_CHK_B 32 // 0 for aligned only +#define PTR_ALIGN_CHK_B 32 +#define LEN_ALIGN_CHK_B 32 // 0 for aligned only #endif #ifndef TEST_SEED @@ -65,704 +65,703 @@ typedef unsigned char u8; -void dump(unsigned char *buf, int len) +void +dump(unsigned char *buf, int len) { - int i; - for (i = 0; i < len;) { - printf(" %2x", 0xff & buf[i++]); - if (i % 32 == 0) - printf("\n"); - } - printf("\n"); + int i; + for (i = 0; i < len;) { + printf(" %2x", 0xff & buf[i++]); + if (i % 32 == 0) + printf("\n"); + } + printf("\n"); } -void dump_matrix(unsigned char **s, int k, int m) +void +dump_matrix(unsigned char **s, int k, int m) { - int i, j; - for (i = 0; i < k; i++) { - for (j = 0; j < m; j++) { - printf(" %2x", s[i][j]); - } - printf("\n"); - } - printf("\n"); + int i, j; + for (i = 0; i < k; i++) { + for (j = 0; j < m; j++) { + printf(" %2x", s[i][j]); + } + printf("\n"); + } + printf("\n"); } -void dump_u8xu8(unsigned char *s, int k, int m) +void +dump_u8xu8(unsigned char *s, int k, int m) { - int i, j; - for (i = 0; i < k; i++) { - for (j = 0; j < m; j++) { - printf(" %2x", 0xff & s[j + (i * m)]); - } - printf("\n"); - } - printf("\n"); + int i, j; + for (i = 0; i < k; i++) { + for (j = 0; j < m; j++) { + printf(" %2x", 0xff & s[j + (i * m)]); + } + printf("\n"); + } + printf("\n"); } // Generate Random errors -static void gen_err_list(unsigned char *src_err_list, - unsigned char *src_in_err, int *pnerrs, int *pnsrcerrs, int k, int m) +static void +gen_err_list(unsigned char *src_err_list, unsigned char *src_in_err, int *pnerrs, int *pnsrcerrs, + int k, int m) { - int i, err; - int nerrs = 0, nsrcerrs = 0; - - for (i = 0, nerrs = 0, nsrcerrs = 0; i < m && nerrs < m - k; i++) { - err = 1 & rand(); - src_in_err[i] = err; - if (err) { - src_err_list[nerrs++] = i; - if (i < k) { - nsrcerrs++; - } - } - } - if (nerrs == 0) { // should have at least one error - while ((err = (rand() % KMAX)) >= m) ; - src_err_list[nerrs++] = err; - src_in_err[err] = 1; - if (err < k) - nsrcerrs = 1; - } - *pnerrs = nerrs; - *pnsrcerrs = nsrcerrs; - return; + int i, err; + int nerrs = 0, nsrcerrs = 0; + + for (i = 0, nerrs = 0, nsrcerrs = 0; i < m && nerrs < m - k; i++) { + err = 1 & rand(); + src_in_err[i] = err; + if (err) { + src_err_list[nerrs++] = i; + if (i < k) { + nsrcerrs++; + } + } + } + if (nerrs == 0) { // should have at least one error + while ((err = (rand() % KMAX)) >= m) + ; + src_err_list[nerrs++] = err; + src_in_err[err] = 1; + if (err < k) + nsrcerrs = 1; + } + *pnerrs = nerrs; + *pnsrcerrs = nsrcerrs; + return; } #define NO_INVERT_MATRIX -2 // Generate decode matrix from encode matrix -static int gf_gen_decode_matrix(unsigned char *encode_matrix, - unsigned char *decode_matrix, - unsigned char *invert_matrix, - unsigned int *decode_index, - unsigned char *src_err_list, - unsigned char *src_in_err, - int nerrs, int nsrcerrs, int k, int m) +static int +gf_gen_decode_matrix(unsigned char *encode_matrix, unsigned char *decode_matrix, + unsigned char *invert_matrix, unsigned int *decode_index, + unsigned char *src_err_list, unsigned char *src_in_err, int nerrs, + int nsrcerrs, int k, int m) { - int i, j, p; - int r; - unsigned char *backup, *b, s; - int incr = 0; - - b = malloc(MMAX * KMAX); - backup = malloc(MMAX * KMAX); - - if (b == NULL || backup == NULL) { - printf("Test failure! Error with malloc\n"); - free(b); - free(backup); - return -1; - } - // Construct matrix b by removing error rows - for (i = 0, r = 0; i < k; i++, r++) { - while (src_in_err[r]) - r++; - for (j = 0; j < k; j++) { - b[k * i + j] = encode_matrix[k * r + j]; - backup[k * i + j] = encode_matrix[k * r + j]; - } - decode_index[i] = r; - } - incr = 0; - while (gf_invert_matrix(b, invert_matrix, k) < 0) { - if (nerrs == (m - k)) { - free(b); - free(backup); - printf("BAD MATRIX\n"); - return NO_INVERT_MATRIX; - } - incr++; - memcpy(b, backup, MMAX * KMAX); - for (i = nsrcerrs; i < nerrs - nsrcerrs; i++) { - if (src_err_list[i] == (decode_index[k - 1] + incr)) { - // skip the erased parity line - incr++; - continue; - } - } - if (decode_index[k - 1] + incr >= m) { - free(b); - free(backup); - printf("BAD MATRIX\n"); - return NO_INVERT_MATRIX; - } - decode_index[k - 1] += incr; - for (j = 0; j < k; j++) - b[k * (k - 1) + j] = encode_matrix[k * decode_index[k - 1] + j]; - - }; - - for (i = 0; i < nsrcerrs; i++) { - for (j = 0; j < k; j++) { - decode_matrix[k * i + j] = invert_matrix[k * src_err_list[i] + j]; - } - } - /* src_err_list from encode_matrix * invert of b for parity decoding */ - for (p = nsrcerrs; p < nerrs; p++) { - for (i = 0; i < k; i++) { - s = 0; - for (j = 0; j < k; j++) - s ^= gf_mul(invert_matrix[j * k + i], - encode_matrix[k * src_err_list[p] + j]); - - decode_matrix[k * p + i] = s; - } - } - free(b); - free(backup); - return 0; + int i, j, p; + int r; + unsigned char *backup, *b, s; + int incr = 0; + + b = malloc(MMAX * KMAX); + backup = malloc(MMAX * KMAX); + + if (b == NULL || backup == NULL) { + printf("Test failure! Error with malloc\n"); + free(b); + free(backup); + return -1; + } + // Construct matrix b by removing error rows + for (i = 0, r = 0; i < k; i++, r++) { + while (src_in_err[r]) + r++; + for (j = 0; j < k; j++) { + b[k * i + j] = encode_matrix[k * r + j]; + backup[k * i + j] = encode_matrix[k * r + j]; + } + decode_index[i] = r; + } + incr = 0; + while (gf_invert_matrix(b, invert_matrix, k) < 0) { + if (nerrs == (m - k)) { + free(b); + free(backup); + printf("BAD MATRIX\n"); + return NO_INVERT_MATRIX; + } + incr++; + memcpy(b, backup, MMAX * KMAX); + for (i = nsrcerrs; i < nerrs - nsrcerrs; i++) { + if (src_err_list[i] == (decode_index[k - 1] + incr)) { + // skip the erased parity line + incr++; + continue; + } + } + if (decode_index[k - 1] + incr >= m) { + free(b); + free(backup); + printf("BAD MATRIX\n"); + return NO_INVERT_MATRIX; + } + decode_index[k - 1] += incr; + for (j = 0; j < k; j++) + b[k * (k - 1) + j] = encode_matrix[k * decode_index[k - 1] + j]; + }; + + for (i = 0; i < nsrcerrs; i++) { + for (j = 0; j < k; j++) { + decode_matrix[k * i + j] = invert_matrix[k * src_err_list[i] + j]; + } + } + /* src_err_list from encode_matrix * invert of b for parity decoding */ + for (p = nsrcerrs; p < nerrs; p++) { + for (i = 0; i < k; i++) { + s = 0; + for (j = 0; j < k; j++) + s ^= gf_mul(invert_matrix[j * k + i], + encode_matrix[k * src_err_list[p] + j]); + + decode_matrix[k * p + i] = s; + } + } + free(b); + free(backup); + return 0; } -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - int re = 0; - int i, j, p, rtest, m, k; - int nerrs, nsrcerrs; - void *buf; - unsigned int decode_index[MMAX]; - unsigned char *temp_buffs[TEST_SOURCES], *buffs[TEST_SOURCES]; - unsigned char *encode_matrix, *decode_matrix, *invert_matrix, *g_tbls; - unsigned char src_in_err[TEST_SOURCES], src_err_list[TEST_SOURCES]; - unsigned char *recov[TEST_SOURCES]; - - int rows, align, size; - unsigned char *efence_buffs[TEST_SOURCES]; - unsigned int offset; - u8 *ubuffs[TEST_SOURCES]; - u8 *temp_ubuffs[TEST_SOURCES]; - - printf("erasure_code_base_test: %dx%d ", TEST_SOURCES, TEST_LEN); - srand(TEST_SEED); - - // Allocate the arrays - for (i = 0; i < TEST_SOURCES; i++) { - if (posix_memalign(&buf, 64, TEST_LEN)) { - printf("alloc error: Fail"); - return -1; - } - buffs[i] = buf; - } - - for (i = 0; i < TEST_SOURCES; i++) { - if (posix_memalign(&buf, 64, TEST_LEN)) { - printf("alloc error: Fail"); - return -1; - } - temp_buffs[i] = buf; - } - - // Test erasure code by encode and recovery - - encode_matrix = malloc(MMAX * KMAX); - decode_matrix = malloc(MMAX * KMAX); - invert_matrix = malloc(MMAX * KMAX); - g_tbls = malloc(KMAX * TEST_SOURCES * 32); - if (encode_matrix == NULL || decode_matrix == NULL - || invert_matrix == NULL || g_tbls == NULL) { - printf("Test failure! Error with malloc\n"); - return -1; - } - // Pick a first test - m = 9; - k = 5; - assert((m <= MMAX) && (k <= KMAX)); - - // Make random data - for (i = 0; i < k; i++) - for (j = 0; j < TEST_LEN; j++) - buffs[i][j] = rand(); - - // Generate encode matrix encode_matrix - // The matrix generated by gf_gen_rs_matrix - // is not always invertable. - gf_gen_rs_matrix(encode_matrix, m, k); - - // Generate g_tbls from encode matrix encode_matrix - ec_init_tables_base(k, m - k, &encode_matrix[k * k], g_tbls); - - // Perform matrix dot_prod for EC encoding - // using g_tbls from encode matrix encode_matrix - ec_encode_data_base(TEST_LEN, k, m - k, g_tbls, buffs, &buffs[k]); - - // Choose random buffers to be in erasure - memset(src_in_err, 0, TEST_SOURCES); - gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); - - // Generate decode matrix - re = gf_gen_decode_matrix(encode_matrix, decode_matrix, - invert_matrix, decode_index, src_err_list, src_in_err, - nerrs, nsrcerrs, k, m); - if (re != 0) { - printf("Fail to gf_gen_decode_matrix\n"); - return -1; - } - // Pack recovery array as list of valid sources - // Its order must be the same as the order - // to generate matrix b in gf_gen_decode_matrix - for (i = 0; i < k; i++) { - recov[i] = buffs[decode_index[i]]; - } - - // Recover data - ec_init_tables_base(k, nerrs, decode_matrix, g_tbls); - ec_encode_data_base(TEST_LEN, k, nerrs, g_tbls, recov, &temp_buffs[k]); - for (i = 0; i < nerrs; i++) { - - if (0 != memcmp(temp_buffs[k + i], buffs[src_err_list[i]], TEST_LEN)) { - printf("Fail error recovery (%d, %d, %d)\n", m, k, nerrs); - printf(" - erase list = "); - for (j = 0; j < nerrs; j++) - printf(" %d", src_err_list[j]); - printf(" - Index = "); - for (p = 0; p < k; p++) - printf(" %d", decode_index[p]); - printf("\nencode_matrix:\n"); - dump_u8xu8((u8 *) encode_matrix, m, k); - printf("inv b:\n"); - dump_u8xu8((u8 *) invert_matrix, k, k); - printf("\ndecode_matrix:\n"); - dump_u8xu8((u8 *) decode_matrix, m, k); - printf("recov %d:", src_err_list[i]); - dump(temp_buffs[k + i], 25); - printf("orig :"); - dump(buffs[src_err_list[i]], 25); - return -1; - } - } - - // Pick a first test - m = 9; - k = 5; - if (m > MMAX || k > KMAX) - return -1; - - // Make random data - for (i = 0; i < k; i++) - for (j = 0; j < TEST_LEN; j++) - buffs[i][j] = rand(); - - // The matrix generated by gf_gen_cauchy1_matrix - // is always invertable. - gf_gen_cauchy1_matrix(encode_matrix, m, k); - - // Generate g_tbls from encode matrix encode_matrix - ec_init_tables_base(k, m - k, &encode_matrix[k * k], g_tbls); - - // Perform matrix dot_prod for EC encoding - // using g_tbls from encode matrix encode_matrix - ec_encode_data_base(TEST_LEN, k, m - k, g_tbls, buffs, &buffs[k]); - - // Choose random buffers to be in erasure - memset(src_in_err, 0, TEST_SOURCES); - gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); - - // Generate decode matrix - re = gf_gen_decode_matrix(encode_matrix, decode_matrix, - invert_matrix, decode_index, src_err_list, src_in_err, - nerrs, nsrcerrs, k, m); - if (re != 0) { - printf("Fail to gf_gen_decode_matrix\n"); - return -1; - } - // Pack recovery array as list of valid sources - // Its order must be the same as the order - // to generate matrix b in gf_gen_decode_matrix - for (i = 0; i < k; i++) { - recov[i] = buffs[decode_index[i]]; - } - - // Recover data - ec_init_tables_base(k, nerrs, decode_matrix, g_tbls); - ec_encode_data_base(TEST_LEN, k, nerrs, g_tbls, recov, &temp_buffs[k]); - for (i = 0; i < nerrs; i++) { - - if (0 != memcmp(temp_buffs[k + i], buffs[src_err_list[i]], TEST_LEN)) { - printf("Fail error recovery (%d, %d, %d)\n", m, k, nerrs); - printf(" - erase list = "); - for (j = 0; j < nerrs; j++) - printf(" %d", src_err_list[j]); - printf(" - Index = "); - for (p = 0; p < k; p++) - printf(" %d", decode_index[p]); - printf("\nencode_matrix:\n"); - dump_u8xu8((u8 *) encode_matrix, m, k); - printf("inv b:\n"); - dump_u8xu8((u8 *) invert_matrix, k, k); - printf("\ndecode_matrix:\n"); - dump_u8xu8((u8 *) decode_matrix, m, k); - printf("recov %d:", src_err_list[i]); - dump(temp_buffs[k + i], 25); - printf("orig :"); - dump(buffs[src_err_list[i]], 25); - return -1; - } - } - - // Do more random tests - for (rtest = 0; rtest < RANDOMS; rtest++) { - while ((m = (rand() % MMAX)) < 2) ; - while ((k = (rand() % KMAX)) >= m || k < 1) ; - - if (m > MMAX || k > KMAX) - continue; - - // Make random data - for (i = 0; i < k; i++) - for (j = 0; j < TEST_LEN; j++) - buffs[i][j] = rand(); - - // The matrix generated by gf_gen_cauchy1_matrix - // is always invertable. - gf_gen_cauchy1_matrix(encode_matrix, m, k); - - // Make parity vects - // Generate g_tbls from encode matrix a - ec_init_tables_base(k, m - k, &encode_matrix[k * k], g_tbls); - // Perform matrix dot_prod for EC encoding - // using g_tbls from encode matrix a - ec_encode_data_base(TEST_LEN, k, m - k, g_tbls, buffs, &buffs[k]); - - // Random errors - memset(src_in_err, 0, TEST_SOURCES); - gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); - - // Generate decode matrix - re = gf_gen_decode_matrix(encode_matrix, decode_matrix, - invert_matrix, decode_index, src_err_list, - src_in_err, nerrs, nsrcerrs, k, m); - if (re != 0) { - printf("Fail to gf_gen_decode_matrix\n"); - return -1; - } - // Pack recovery array as list of valid sources - // Its order must be the same as the order - // to generate matrix b in gf_gen_decode_matrix - for (i = 0; i < k; i++) { - recov[i] = buffs[decode_index[i]]; - } - - // Recover data - ec_init_tables_base(k, nerrs, decode_matrix, g_tbls); - ec_encode_data_base(TEST_LEN, k, nerrs, g_tbls, recov, &temp_buffs[k]); - - for (i = 0; i < nerrs; i++) { - - if (0 != memcmp(temp_buffs[k + i], buffs[src_err_list[i]], TEST_LEN)) { - printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs); - printf(" - erase list = "); - for (j = 0; j < nerrs; j++) - printf(" %d", src_err_list[j]); - printf(" - Index = "); - for (p = 0; p < k; p++) - printf(" %d", decode_index[p]); - printf("\nencode_matrix:\n"); - dump_u8xu8((u8 *) encode_matrix, m, k); - printf("inv b:\n"); - dump_u8xu8((u8 *) invert_matrix, k, k); - printf("\ndecode_matrix:\n"); - dump_u8xu8((u8 *) decode_matrix, m, k); - printf("orig data:\n"); - dump_matrix(buffs, m, 25); - printf("orig :"); - dump(buffs[src_err_list[i]], 25); - printf("recov %d:", src_err_list[i]); - dump(temp_buffs[k + i], 25); - return -1; - } - } + int re = 0; + int i, j, p, rtest, m, k; + int nerrs, nsrcerrs; + void *buf; + unsigned int decode_index[MMAX]; + unsigned char *temp_buffs[TEST_SOURCES], *buffs[TEST_SOURCES]; + unsigned char *encode_matrix, *decode_matrix, *invert_matrix, *g_tbls; + unsigned char src_in_err[TEST_SOURCES], src_err_list[TEST_SOURCES]; + unsigned char *recov[TEST_SOURCES]; + + int rows, align, size; + unsigned char *efence_buffs[TEST_SOURCES]; + unsigned int offset; + u8 *ubuffs[TEST_SOURCES]; + u8 *temp_ubuffs[TEST_SOURCES]; + + printf("erasure_code_base_test: %dx%d ", TEST_SOURCES, TEST_LEN); + srand(TEST_SEED); + + // Allocate the arrays + for (i = 0; i < TEST_SOURCES; i++) { + if (posix_memalign(&buf, 64, TEST_LEN)) { + printf("alloc error: Fail"); + return -1; + } + buffs[i] = buf; + } + + for (i = 0; i < TEST_SOURCES; i++) { + if (posix_memalign(&buf, 64, TEST_LEN)) { + printf("alloc error: Fail"); + return -1; + } + temp_buffs[i] = buf; + } + + // Test erasure code by encode and recovery + + encode_matrix = malloc(MMAX * KMAX); + decode_matrix = malloc(MMAX * KMAX); + invert_matrix = malloc(MMAX * KMAX); + g_tbls = malloc(KMAX * TEST_SOURCES * 32); + if (encode_matrix == NULL || decode_matrix == NULL || invert_matrix == NULL || + g_tbls == NULL) { + printf("Test failure! Error with malloc\n"); + return -1; + } + // Pick a first test + m = 9; + k = 5; + assert((m <= MMAX) && (k <= KMAX)); + + // Make random data + for (i = 0; i < k; i++) + for (j = 0; j < TEST_LEN; j++) + buffs[i][j] = rand(); + + // Generate encode matrix encode_matrix + // The matrix generated by gf_gen_rs_matrix + // is not always invertable. + gf_gen_rs_matrix(encode_matrix, m, k); + + // Generate g_tbls from encode matrix encode_matrix + ec_init_tables_base(k, m - k, &encode_matrix[k * k], g_tbls); + + // Perform matrix dot_prod for EC encoding + // using g_tbls from encode matrix encode_matrix + ec_encode_data_base(TEST_LEN, k, m - k, g_tbls, buffs, &buffs[k]); + + // Choose random buffers to be in erasure + memset(src_in_err, 0, TEST_SOURCES); + gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); + + // Generate decode matrix + re = gf_gen_decode_matrix(encode_matrix, decode_matrix, invert_matrix, decode_index, + src_err_list, src_in_err, nerrs, nsrcerrs, k, m); + if (re != 0) { + printf("Fail to gf_gen_decode_matrix\n"); + return -1; + } + // Pack recovery array as list of valid sources + // Its order must be the same as the order + // to generate matrix b in gf_gen_decode_matrix + for (i = 0; i < k; i++) { + recov[i] = buffs[decode_index[i]]; + } + + // Recover data + ec_init_tables_base(k, nerrs, decode_matrix, g_tbls); + ec_encode_data_base(TEST_LEN, k, nerrs, g_tbls, recov, &temp_buffs[k]); + for (i = 0; i < nerrs; i++) { + + if (0 != memcmp(temp_buffs[k + i], buffs[src_err_list[i]], TEST_LEN)) { + printf("Fail error recovery (%d, %d, %d)\n", m, k, nerrs); + printf(" - erase list = "); + for (j = 0; j < nerrs; j++) + printf(" %d", src_err_list[j]); + printf(" - Index = "); + for (p = 0; p < k; p++) + printf(" %d", decode_index[p]); + printf("\nencode_matrix:\n"); + dump_u8xu8((u8 *) encode_matrix, m, k); + printf("inv b:\n"); + dump_u8xu8((u8 *) invert_matrix, k, k); + printf("\ndecode_matrix:\n"); + dump_u8xu8((u8 *) decode_matrix, m, k); + printf("recov %d:", src_err_list[i]); + dump(temp_buffs[k + i], 25); + printf("orig :"); + dump(buffs[src_err_list[i]], 25); + return -1; + } + } + + // Pick a first test + m = 9; + k = 5; + if (m > MMAX || k > KMAX) + return -1; + + // Make random data + for (i = 0; i < k; i++) + for (j = 0; j < TEST_LEN; j++) + buffs[i][j] = rand(); + + // The matrix generated by gf_gen_cauchy1_matrix + // is always invertable. + gf_gen_cauchy1_matrix(encode_matrix, m, k); + + // Generate g_tbls from encode matrix encode_matrix + ec_init_tables_base(k, m - k, &encode_matrix[k * k], g_tbls); + + // Perform matrix dot_prod for EC encoding + // using g_tbls from encode matrix encode_matrix + ec_encode_data_base(TEST_LEN, k, m - k, g_tbls, buffs, &buffs[k]); + + // Choose random buffers to be in erasure + memset(src_in_err, 0, TEST_SOURCES); + gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); + + // Generate decode matrix + re = gf_gen_decode_matrix(encode_matrix, decode_matrix, invert_matrix, decode_index, + src_err_list, src_in_err, nerrs, nsrcerrs, k, m); + if (re != 0) { + printf("Fail to gf_gen_decode_matrix\n"); + return -1; + } + // Pack recovery array as list of valid sources + // Its order must be the same as the order + // to generate matrix b in gf_gen_decode_matrix + for (i = 0; i < k; i++) { + recov[i] = buffs[decode_index[i]]; + } + + // Recover data + ec_init_tables_base(k, nerrs, decode_matrix, g_tbls); + ec_encode_data_base(TEST_LEN, k, nerrs, g_tbls, recov, &temp_buffs[k]); + for (i = 0; i < nerrs; i++) { + + if (0 != memcmp(temp_buffs[k + i], buffs[src_err_list[i]], TEST_LEN)) { + printf("Fail error recovery (%d, %d, %d)\n", m, k, nerrs); + printf(" - erase list = "); + for (j = 0; j < nerrs; j++) + printf(" %d", src_err_list[j]); + printf(" - Index = "); + for (p = 0; p < k; p++) + printf(" %d", decode_index[p]); + printf("\nencode_matrix:\n"); + dump_u8xu8((u8 *) encode_matrix, m, k); + printf("inv b:\n"); + dump_u8xu8((u8 *) invert_matrix, k, k); + printf("\ndecode_matrix:\n"); + dump_u8xu8((u8 *) decode_matrix, m, k); + printf("recov %d:", src_err_list[i]); + dump(temp_buffs[k + i], 25); + printf("orig :"); + dump(buffs[src_err_list[i]], 25); + return -1; + } + } + + // Do more random tests + for (rtest = 0; rtest < RANDOMS; rtest++) { + while ((m = (rand() % MMAX)) < 2) + ; + while ((k = (rand() % KMAX)) >= m || k < 1) + ; + + if (m > MMAX || k > KMAX) + continue; + + // Make random data + for (i = 0; i < k; i++) + for (j = 0; j < TEST_LEN; j++) + buffs[i][j] = rand(); + + // The matrix generated by gf_gen_cauchy1_matrix + // is always invertable. + gf_gen_cauchy1_matrix(encode_matrix, m, k); + + // Make parity vects + // Generate g_tbls from encode matrix a + ec_init_tables_base(k, m - k, &encode_matrix[k * k], g_tbls); + // Perform matrix dot_prod for EC encoding + // using g_tbls from encode matrix a + ec_encode_data_base(TEST_LEN, k, m - k, g_tbls, buffs, &buffs[k]); + + // Random errors + memset(src_in_err, 0, TEST_SOURCES); + gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); + + // Generate decode matrix + re = gf_gen_decode_matrix(encode_matrix, decode_matrix, invert_matrix, decode_index, + src_err_list, src_in_err, nerrs, nsrcerrs, k, m); + if (re != 0) { + printf("Fail to gf_gen_decode_matrix\n"); + return -1; + } + // Pack recovery array as list of valid sources + // Its order must be the same as the order + // to generate matrix b in gf_gen_decode_matrix + for (i = 0; i < k; i++) { + recov[i] = buffs[decode_index[i]]; + } + + // Recover data + ec_init_tables_base(k, nerrs, decode_matrix, g_tbls); + ec_encode_data_base(TEST_LEN, k, nerrs, g_tbls, recov, &temp_buffs[k]); + + for (i = 0; i < nerrs; i++) { + + if (0 != memcmp(temp_buffs[k + i], buffs[src_err_list[i]], TEST_LEN)) { + printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs); + printf(" - erase list = "); + for (j = 0; j < nerrs; j++) + printf(" %d", src_err_list[j]); + printf(" - Index = "); + for (p = 0; p < k; p++) + printf(" %d", decode_index[p]); + printf("\nencode_matrix:\n"); + dump_u8xu8((u8 *) encode_matrix, m, k); + printf("inv b:\n"); + dump_u8xu8((u8 *) invert_matrix, k, k); + printf("\ndecode_matrix:\n"); + dump_u8xu8((u8 *) decode_matrix, m, k); + printf("orig data:\n"); + dump_matrix(buffs, m, 25); + printf("orig :"); + dump(buffs[src_err_list[i]], 25); + printf("recov %d:", src_err_list[i]); + dump(temp_buffs[k + i], 25); + return -1; + } + } #ifdef TEST_VERBOSE - putchar('.'); + putchar('.'); #endif - } - - // Run tests at end of buffer for Electric Fence - k = 16; - align = (LEN_ALIGN_CHK_B != 0) ? 1 : 16; - if (k > KMAX) - return -1; - - for (rows = 1; rows <= 16; rows++) { - m = k + rows; - if (m > MMAX) - return -1; - - // Make random data - for (i = 0; i < k; i++) - for (j = 0; j < TEST_LEN; j++) - buffs[i][j] = rand(); - - for (size = EFENCE_TEST_MIN_SIZE; size <= TEST_SIZE; size += align) { - for (i = 0; i < m; i++) { // Line up TEST_SIZE from end - efence_buffs[i] = buffs[i] + TEST_LEN - size; - } - - // The matrix generated by gf_gen_cauchy1_matrix - // is always invertable. - gf_gen_cauchy1_matrix(encode_matrix, m, k); - - // Make parity vects - // Generate g_tbls from encode matrix a - ec_init_tables_base(k, m - k, &encode_matrix[k * k], g_tbls); - // Perform matrix dot_prod for EC encoding - // using g_tbls from encode matrix a - ec_encode_data_base(size, k, m - k, g_tbls, efence_buffs, - &efence_buffs[k]); - - // Random errors - memset(src_in_err, 0, TEST_SOURCES); - gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); - - // Generate decode matrix - re = gf_gen_decode_matrix(encode_matrix, decode_matrix, - invert_matrix, decode_index, src_err_list, - src_in_err, nerrs, nsrcerrs, k, m); - if (re != 0) { - printf("Fail to gf_gen_decode_matrix\n"); - return -1; - } - // Pack recovery array as list of valid sources - // Its order must be the same as the order - // to generate matrix b in gf_gen_decode_matrix - for (i = 0; i < k; i++) { - recov[i] = efence_buffs[decode_index[i]]; - } - - // Recover data - ec_init_tables_base(k, nerrs, decode_matrix, g_tbls); - ec_encode_data_base(size, k, nerrs, g_tbls, recov, &temp_buffs[k]); - - for (i = 0; i < nerrs; i++) { - - if (0 != - memcmp(temp_buffs[k + i], efence_buffs[src_err_list[i]], - size)) { - printf("Efence: Fail error recovery (%d, %d, %d)\n", m, - k, nerrs); - - printf("size = %d\n", size); - - printf("Test erase list = "); - for (j = 0; j < nerrs; j++) - printf(" %d", src_err_list[j]); - printf(" - Index = "); - for (p = 0; p < k; p++) - printf(" %d", decode_index[p]); - printf("\nencode_matrix:\n"); - dump_u8xu8((u8 *) encode_matrix, m, k); - printf("inv b:\n"); - dump_u8xu8((u8 *) invert_matrix, k, k); - printf("\ndecode_matrix:\n"); - dump_u8xu8((u8 *) decode_matrix, m, k); - - printf("recov %d:", src_err_list[i]); - dump(temp_buffs[k + i], align); - printf("orig :"); - dump(efence_buffs[src_err_list[i]], align); - return -1; - } - } - } - - } - - // Test rand ptr alignment if available - - for (rtest = 0; rtest < RANDOMS; rtest++) { - while ((m = (rand() % MMAX)) < 2) ; - while ((k = (rand() % KMAX)) >= m || k < 1) ; - - if (m > MMAX || k > KMAX) - continue; - - size = (TEST_LEN - PTR_ALIGN_CHK_B) & ~15; - - offset = (PTR_ALIGN_CHK_B != 0) ? 1 : PTR_ALIGN_CHK_B; - // Add random offsets - for (i = 0; i < m; i++) { - memset(buffs[i], 0, TEST_LEN); // zero pad to check write-over - memset(temp_buffs[i], 0, TEST_LEN); // zero pad to check write-over - ubuffs[i] = buffs[i] + (rand() & (PTR_ALIGN_CHK_B - offset)); - temp_ubuffs[i] = temp_buffs[i] + (rand() & (PTR_ALIGN_CHK_B - offset)); - } - - for (i = 0; i < k; i++) - for (j = 0; j < size; j++) - ubuffs[i][j] = rand(); - - // The matrix generated by gf_gen_cauchy1_matrix - // is always invertable. - gf_gen_cauchy1_matrix(encode_matrix, m, k); - - // Make parity vects - // Generate g_tbls from encode matrix a - ec_init_tables_base(k, m - k, &encode_matrix[k * k], g_tbls); - // Perform matrix dot_prod for EC encoding - // using g_tbls from encode matrix a - ec_encode_data_base(size, k, m - k, g_tbls, ubuffs, &ubuffs[k]); - - // Random errors - memset(src_in_err, 0, TEST_SOURCES); - gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); - - // Generate decode matrix - re = gf_gen_decode_matrix(encode_matrix, decode_matrix, - invert_matrix, decode_index, src_err_list, - src_in_err, nerrs, nsrcerrs, k, m); - if (re != 0) { - printf("Fail to gf_gen_decode_matrix\n"); - return -1; - } - // Pack recovery array as list of valid sources - // Its order must be the same as the order - // to generate matrix b in gf_gen_decode_matrix - for (i = 0; i < k; i++) { - recov[i] = ubuffs[decode_index[i]]; - } - - // Recover data - ec_init_tables_base(k, nerrs, decode_matrix, g_tbls); - ec_encode_data_base(size, k, nerrs, g_tbls, recov, &temp_ubuffs[k]); - - for (i = 0; i < nerrs; i++) { - - if (0 != memcmp(temp_ubuffs[k + i], ubuffs[src_err_list[i]], size)) { - printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs); - printf(" - erase list = "); - for (j = 0; j < nerrs; j++) - printf(" %d", src_err_list[j]); - printf(" - Index = "); - for (p = 0; p < k; p++) - printf(" %d", decode_index[p]); - printf("\nencode_matrix:\n"); - dump_u8xu8((unsigned char *)encode_matrix, m, k); - printf("inv b:\n"); - dump_u8xu8((unsigned char *)invert_matrix, k, k); - printf("\ndecode_matrix:\n"); - dump_u8xu8((unsigned char *)decode_matrix, m, k); - printf("orig data:\n"); - dump_matrix(ubuffs, m, 25); - printf("orig :"); - dump(ubuffs[src_err_list[i]], 25); - printf("recov %d:", src_err_list[i]); - dump(temp_ubuffs[k + i], 25); - return -1; - } - } - - // Confirm that padding around dests is unchanged - memset(temp_buffs[0], 0, PTR_ALIGN_CHK_B); // Make reference zero buff - - for (i = 0; i < m; i++) { - - offset = ubuffs[i] - buffs[i]; - - if (memcmp(buffs[i], temp_buffs[0], offset)) { - printf("Fail rand ualign encode pad start\n"); - return -1; - } - if (memcmp - (buffs[i] + offset + size, temp_buffs[0], - PTR_ALIGN_CHK_B - offset)) { - printf("Fail rand ualign encode pad end\n"); - return -1; - } - } - - for (i = 0; i < nerrs; i++) { - - offset = temp_ubuffs[k + i] - temp_buffs[k + i]; - if (memcmp(temp_buffs[k + i], temp_buffs[0], offset)) { - printf("Fail rand ualign decode pad start\n"); - return -1; - } - if (memcmp - (temp_buffs[k + i] + offset + size, temp_buffs[0], - PTR_ALIGN_CHK_B - offset)) { - printf("Fail rand ualign decode pad end\n"); - return -1; - } - } + } + + // Run tests at end of buffer for Electric Fence + k = 16; + align = (LEN_ALIGN_CHK_B != 0) ? 1 : 16; + if (k > KMAX) + return -1; + + for (rows = 1; rows <= 16; rows++) { + m = k + rows; + if (m > MMAX) + return -1; + + // Make random data + for (i = 0; i < k; i++) + for (j = 0; j < TEST_LEN; j++) + buffs[i][j] = rand(); + + for (size = EFENCE_TEST_MIN_SIZE; size <= TEST_SIZE; size += align) { + for (i = 0; i < m; i++) { // Line up TEST_SIZE from end + efence_buffs[i] = buffs[i] + TEST_LEN - size; + } + + // The matrix generated by gf_gen_cauchy1_matrix + // is always invertable. + gf_gen_cauchy1_matrix(encode_matrix, m, k); + + // Make parity vects + // Generate g_tbls from encode matrix a + ec_init_tables_base(k, m - k, &encode_matrix[k * k], g_tbls); + // Perform matrix dot_prod for EC encoding + // using g_tbls from encode matrix a + ec_encode_data_base(size, k, m - k, g_tbls, efence_buffs, &efence_buffs[k]); + + // Random errors + memset(src_in_err, 0, TEST_SOURCES); + gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); + + // Generate decode matrix + re = gf_gen_decode_matrix(encode_matrix, decode_matrix, invert_matrix, + decode_index, src_err_list, src_in_err, nerrs, + nsrcerrs, k, m); + if (re != 0) { + printf("Fail to gf_gen_decode_matrix\n"); + return -1; + } + // Pack recovery array as list of valid sources + // Its order must be the same as the order + // to generate matrix b in gf_gen_decode_matrix + for (i = 0; i < k; i++) { + recov[i] = efence_buffs[decode_index[i]]; + } + + // Recover data + ec_init_tables_base(k, nerrs, decode_matrix, g_tbls); + ec_encode_data_base(size, k, nerrs, g_tbls, recov, &temp_buffs[k]); + + for (i = 0; i < nerrs; i++) { + + if (0 != memcmp(temp_buffs[k + i], efence_buffs[src_err_list[i]], + size)) { + printf("Efence: Fail error recovery (%d, %d, %d)\n", m, k, + nerrs); + + printf("size = %d\n", size); + + printf("Test erase list = "); + for (j = 0; j < nerrs; j++) + printf(" %d", src_err_list[j]); + printf(" - Index = "); + for (p = 0; p < k; p++) + printf(" %d", decode_index[p]); + printf("\nencode_matrix:\n"); + dump_u8xu8((u8 *) encode_matrix, m, k); + printf("inv b:\n"); + dump_u8xu8((u8 *) invert_matrix, k, k); + printf("\ndecode_matrix:\n"); + dump_u8xu8((u8 *) decode_matrix, m, k); + + printf("recov %d:", src_err_list[i]); + dump(temp_buffs[k + i], align); + printf("orig :"); + dump(efence_buffs[src_err_list[i]], align); + return -1; + } + } + } + } + + // Test rand ptr alignment if available + + for (rtest = 0; rtest < RANDOMS; rtest++) { + while ((m = (rand() % MMAX)) < 2) + ; + while ((k = (rand() % KMAX)) >= m || k < 1) + ; + + if (m > MMAX || k > KMAX) + continue; + + size = (TEST_LEN - PTR_ALIGN_CHK_B) & ~15; + + offset = (PTR_ALIGN_CHK_B != 0) ? 1 : PTR_ALIGN_CHK_B; + // Add random offsets + for (i = 0; i < m; i++) { + memset(buffs[i], 0, TEST_LEN); // zero pad to check write-over + memset(temp_buffs[i], 0, TEST_LEN); // zero pad to check write-over + ubuffs[i] = buffs[i] + (rand() & (PTR_ALIGN_CHK_B - offset)); + temp_ubuffs[i] = temp_buffs[i] + (rand() & (PTR_ALIGN_CHK_B - offset)); + } + + for (i = 0; i < k; i++) + for (j = 0; j < size; j++) + ubuffs[i][j] = rand(); + + // The matrix generated by gf_gen_cauchy1_matrix + // is always invertable. + gf_gen_cauchy1_matrix(encode_matrix, m, k); + + // Make parity vects + // Generate g_tbls from encode matrix a + ec_init_tables_base(k, m - k, &encode_matrix[k * k], g_tbls); + // Perform matrix dot_prod for EC encoding + // using g_tbls from encode matrix a + ec_encode_data_base(size, k, m - k, g_tbls, ubuffs, &ubuffs[k]); + + // Random errors + memset(src_in_err, 0, TEST_SOURCES); + gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); + + // Generate decode matrix + re = gf_gen_decode_matrix(encode_matrix, decode_matrix, invert_matrix, decode_index, + src_err_list, src_in_err, nerrs, nsrcerrs, k, m); + if (re != 0) { + printf("Fail to gf_gen_decode_matrix\n"); + return -1; + } + // Pack recovery array as list of valid sources + // Its order must be the same as the order + // to generate matrix b in gf_gen_decode_matrix + for (i = 0; i < k; i++) { + recov[i] = ubuffs[decode_index[i]]; + } + + // Recover data + ec_init_tables_base(k, nerrs, decode_matrix, g_tbls); + ec_encode_data_base(size, k, nerrs, g_tbls, recov, &temp_ubuffs[k]); + + for (i = 0; i < nerrs; i++) { + + if (0 != memcmp(temp_ubuffs[k + i], ubuffs[src_err_list[i]], size)) { + printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs); + printf(" - erase list = "); + for (j = 0; j < nerrs; j++) + printf(" %d", src_err_list[j]); + printf(" - Index = "); + for (p = 0; p < k; p++) + printf(" %d", decode_index[p]); + printf("\nencode_matrix:\n"); + dump_u8xu8((unsigned char *) encode_matrix, m, k); + printf("inv b:\n"); + dump_u8xu8((unsigned char *) invert_matrix, k, k); + printf("\ndecode_matrix:\n"); + dump_u8xu8((unsigned char *) decode_matrix, m, k); + printf("orig data:\n"); + dump_matrix(ubuffs, m, 25); + printf("orig :"); + dump(ubuffs[src_err_list[i]], 25); + printf("recov %d:", src_err_list[i]); + dump(temp_ubuffs[k + i], 25); + return -1; + } + } + + // Confirm that padding around dests is unchanged + memset(temp_buffs[0], 0, PTR_ALIGN_CHK_B); // Make reference zero buff + + for (i = 0; i < m; i++) { + + offset = ubuffs[i] - buffs[i]; + + if (memcmp(buffs[i], temp_buffs[0], offset)) { + printf("Fail rand ualign encode pad start\n"); + return -1; + } + if (memcmp(buffs[i] + offset + size, temp_buffs[0], + PTR_ALIGN_CHK_B - offset)) { + printf("Fail rand ualign encode pad end\n"); + return -1; + } + } + + for (i = 0; i < nerrs; i++) { + + offset = temp_ubuffs[k + i] - temp_buffs[k + i]; + if (memcmp(temp_buffs[k + i], temp_buffs[0], offset)) { + printf("Fail rand ualign decode pad start\n"); + return -1; + } + if (memcmp(temp_buffs[k + i] + offset + size, temp_buffs[0], + PTR_ALIGN_CHK_B - offset)) { + printf("Fail rand ualign decode pad end\n"); + return -1; + } + } #ifdef TEST_VERBOSE - putchar('.'); + putchar('.'); #endif - } - - // Test size alignment - - align = (LEN_ALIGN_CHK_B != 0) ? 13 : 16; - - for (size = TEST_LEN; size > 0; size -= align) { - while ((m = (rand() % MMAX)) < 2) ; - while ((k = (rand() % KMAX)) >= m || k < 1) ; - - if (m > MMAX || k > KMAX) - continue; - - for (i = 0; i < k; i++) - for (j = 0; j < size; j++) - buffs[i][j] = rand(); - - // The matrix generated by gf_gen_cauchy1_matrix - // is always invertable. - gf_gen_cauchy1_matrix(encode_matrix, m, k); - - // Make parity vects - // Generate g_tbls from encode matrix a - ec_init_tables_base(k, m - k, &encode_matrix[k * k], g_tbls); - // Perform matrix dot_prod for EC encoding - // using g_tbls from encode matrix a - ec_encode_data_base(size, k, m - k, g_tbls, buffs, &buffs[k]); - - // Random errors - memset(src_in_err, 0, TEST_SOURCES); - gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); - // Generate decode matrix - re = gf_gen_decode_matrix(encode_matrix, decode_matrix, - invert_matrix, decode_index, src_err_list, - src_in_err, nerrs, nsrcerrs, k, m); - if (re != 0) { - printf("Fail to gf_gen_decode_matrix\n"); - return -1; - } - // Pack recovery array as list of valid sources - // Its order must be the same as the order - // to generate matrix b in gf_gen_decode_matrix - for (i = 0; i < k; i++) { - recov[i] = buffs[decode_index[i]]; - } - - // Recover data - ec_init_tables_base(k, nerrs, decode_matrix, g_tbls); - ec_encode_data_base(size, k, nerrs, g_tbls, recov, &temp_buffs[k]); - - for (i = 0; i < nerrs; i++) { - - if (0 != memcmp(temp_buffs[k + i], buffs[src_err_list[i]], size)) { - printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs); - printf(" - erase list = "); - for (j = 0; j < nerrs; j++) - printf(" %d", src_err_list[j]); - printf(" - Index = "); - for (p = 0; p < k; p++) - printf(" %d", decode_index[p]); - printf("\nencode_matrix:\n"); - dump_u8xu8((unsigned char *)encode_matrix, m, k); - printf("inv b:\n"); - dump_u8xu8((unsigned char *)invert_matrix, k, k); - printf("\ndecode_matrix:\n"); - dump_u8xu8((unsigned char *)decode_matrix, m, k); - printf("orig data:\n"); - dump_matrix(buffs, m, 25); - printf("orig :"); - dump(buffs[src_err_list[i]], 25); - printf("recov %d:", src_err_list[i]); - dump(temp_buffs[k + i], 25); - return -1; - } - } - } - - printf("done EC tests: Pass\n"); - return 0; + } + + // Test size alignment + + align = (LEN_ALIGN_CHK_B != 0) ? 13 : 16; + + for (size = TEST_LEN; size > 0; size -= align) { + while ((m = (rand() % MMAX)) < 2) + ; + while ((k = (rand() % KMAX)) >= m || k < 1) + ; + + if (m > MMAX || k > KMAX) + continue; + + for (i = 0; i < k; i++) + for (j = 0; j < size; j++) + buffs[i][j] = rand(); + + // The matrix generated by gf_gen_cauchy1_matrix + // is always invertable. + gf_gen_cauchy1_matrix(encode_matrix, m, k); + + // Make parity vects + // Generate g_tbls from encode matrix a + ec_init_tables_base(k, m - k, &encode_matrix[k * k], g_tbls); + // Perform matrix dot_prod for EC encoding + // using g_tbls from encode matrix a + ec_encode_data_base(size, k, m - k, g_tbls, buffs, &buffs[k]); + + // Random errors + memset(src_in_err, 0, TEST_SOURCES); + gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); + // Generate decode matrix + re = gf_gen_decode_matrix(encode_matrix, decode_matrix, invert_matrix, decode_index, + src_err_list, src_in_err, nerrs, nsrcerrs, k, m); + if (re != 0) { + printf("Fail to gf_gen_decode_matrix\n"); + return -1; + } + // Pack recovery array as list of valid sources + // Its order must be the same as the order + // to generate matrix b in gf_gen_decode_matrix + for (i = 0; i < k; i++) { + recov[i] = buffs[decode_index[i]]; + } + + // Recover data + ec_init_tables_base(k, nerrs, decode_matrix, g_tbls); + ec_encode_data_base(size, k, nerrs, g_tbls, recov, &temp_buffs[k]); + + for (i = 0; i < nerrs; i++) { + + if (0 != memcmp(temp_buffs[k + i], buffs[src_err_list[i]], size)) { + printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs); + printf(" - erase list = "); + for (j = 0; j < nerrs; j++) + printf(" %d", src_err_list[j]); + printf(" - Index = "); + for (p = 0; p < k; p++) + printf(" %d", decode_index[p]); + printf("\nencode_matrix:\n"); + dump_u8xu8((unsigned char *) encode_matrix, m, k); + printf("inv b:\n"); + dump_u8xu8((unsigned char *) invert_matrix, k, k); + printf("\ndecode_matrix:\n"); + dump_u8xu8((unsigned char *) decode_matrix, m, k); + printf("orig data:\n"); + dump_matrix(buffs, m, 25); + printf("orig :"); + dump(buffs[src_err_list[i]], 25); + printf("recov %d:", src_err_list[i]); + dump(temp_buffs[k + i], 25); + return -1; + } + } + } + + printf("done EC tests: Pass\n"); + return 0; } diff --git a/erasure_code/erasure_code_perf.c b/erasure_code/erasure_code_perf.c index 25c87745..7d6651a2 100644 --- a/erasure_code/erasure_code_perf.c +++ b/erasure_code/erasure_code_perf.c @@ -29,29 +29,29 @@ #include #include -#include // for memset, memcmp +#include // for memset, memcmp #include "erasure_code.h" #include "test.h" #ifndef GT_L3_CACHE -# define GT_L3_CACHE 32*1024*1024 /* some number > last level cache */ +#define GT_L3_CACHE 32 * 1024 * 1024 /* some number > last level cache */ #endif #if !defined(COLD_TEST) && !defined(TEST_CUSTOM) // Cached test, loop many times over small dataset -# define TEST_SOURCES 32 -# define TEST_LEN(m) ((128*1024 / m) & ~(64-1)) -# define TEST_TYPE_STR "_warm" -#elif defined (COLD_TEST) +#define TEST_SOURCES 32 +#define TEST_LEN(m) ((128 * 1024 / m) & ~(64 - 1)) +#define TEST_TYPE_STR "_warm" +#elif defined(COLD_TEST) // Uncached test. Pull from large mem base. -# define TEST_SOURCES 32 -# define TEST_LEN(m) ((GT_L3_CACHE / m) & ~(64-1)) -# define TEST_TYPE_STR "_cold" -#elif defined (TEST_CUSTOM) -# define TEST_TYPE_STR "_cus" +#define TEST_SOURCES 32 +#define TEST_LEN(m) ((GT_L3_CACHE / m) & ~(64 - 1)) +#define TEST_TYPE_STR "_cold" +#elif defined(TEST_CUSTOM) +#define TEST_TYPE_STR "_cus" #endif #ifndef TEST_SEED -# define TEST_SEED 0x1234 +#define TEST_SEED 0x1234 #endif #define MMAX TEST_SOURCES @@ -61,215 +61,219 @@ typedef unsigned char u8; -void usage(const char *app_name) +void +usage(const char *app_name) { - fprintf(stderr, - "Usage: %s [options]\n" - " -h Help\n" - " -k Number of source buffers\n" - " -p Number of parity buffers\n" - " -e Number of simulated buffers with errors (cannot be higher than p or k)\n", - app_name); + fprintf(stderr, + "Usage: %s [options]\n" + " -h Help\n" + " -k Number of source buffers\n" + " -p Number of parity buffers\n" + " -e Number of simulated buffers with errors (cannot be higher than p or " + "k)\n", + app_name); } -void ec_encode_perf(int m, int k, u8 * a, u8 * g_tbls, u8 ** buffs, struct perf *start) +void +ec_encode_perf(int m, int k, u8 *a, u8 *g_tbls, u8 **buffs, struct perf *start) { - ec_init_tables(k, m - k, &a[k * k], g_tbls); - BENCHMARK(start, BENCHMARK_TIME, - ec_encode_data(TEST_LEN(m), k, m - k, g_tbls, buffs, &buffs[k])); + ec_init_tables(k, m - k, &a[k * k], g_tbls); + BENCHMARK(start, BENCHMARK_TIME, + ec_encode_data(TEST_LEN(m), k, m - k, g_tbls, buffs, &buffs[k])); } -int ec_decode_perf(int m, int k, u8 * a, u8 * g_tbls, u8 ** buffs, u8 * src_in_err, - u8 * src_err_list, int nerrs, u8 ** temp_buffs, struct perf *start) +int +ec_decode_perf(int m, int k, u8 *a, u8 *g_tbls, u8 **buffs, u8 *src_in_err, u8 *src_err_list, + int nerrs, u8 **temp_buffs, struct perf *start) { - int i, j, r; - u8 b[MMAX * KMAX], c[MMAX * KMAX], d[MMAX * KMAX]; - u8 *recov[TEST_SOURCES]; - - // Construct b by removing error rows - for (i = 0, r = 0; i < k; i++, r++) { - while (src_in_err[r]) - r++; - recov[i] = buffs[r]; - for (j = 0; j < k; j++) - b[k * i + j] = a[k * r + j]; - } - - if (gf_invert_matrix(b, d, k) < 0) - return BAD_MATRIX; - - for (i = 0; i < nerrs; i++) - for (j = 0; j < k; j++) - c[k * i + j] = d[k * src_err_list[i] + j]; - - // Recover data - ec_init_tables(k, nerrs, c, g_tbls); - BENCHMARK(start, BENCHMARK_TIME, - ec_encode_data(TEST_LEN(m), k, nerrs, g_tbls, recov, temp_buffs)); - - return 0; + int i, j, r; + u8 b[MMAX * KMAX], c[MMAX * KMAX], d[MMAX * KMAX]; + u8 *recov[TEST_SOURCES]; + + // Construct b by removing error rows + for (i = 0, r = 0; i < k; i++, r++) { + while (src_in_err[r]) + r++; + recov[i] = buffs[r]; + for (j = 0; j < k; j++) + b[k * i + j] = a[k * r + j]; + } + + if (gf_invert_matrix(b, d, k) < 0) + return BAD_MATRIX; + + for (i = 0; i < nerrs; i++) + for (j = 0; j < k; j++) + c[k * i + j] = d[k * src_err_list[i] + j]; + + // Recover data + ec_init_tables(k, nerrs, c, g_tbls); + BENCHMARK(start, BENCHMARK_TIME, + ec_encode_data(TEST_LEN(m), k, nerrs, g_tbls, recov, temp_buffs)); + + return 0; } -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - int i, j, m, k, p, nerrs, check, ret = -1; - void *buf; - u8 *temp_buffs[TEST_SOURCES] = { NULL }; - u8 *buffs[TEST_SOURCES] = { NULL }; - u8 a[MMAX * KMAX]; - u8 g_tbls[KMAX * TEST_SOURCES * 32], src_in_err[TEST_SOURCES]; - u8 src_err_list[TEST_SOURCES]; - struct perf start; - - /* Set default parameters */ - k = 8; - p = 6; - nerrs = 4; - - /* Parse arguments */ - for (i = 1; i < argc; i++) { - if (strcmp(argv[i], "-k") == 0) { - k = atoi(argv[++i]); - } else if (strcmp(argv[i], "-p") == 0) { - p = atoi(argv[++i]); - } else if (strcmp(argv[i], "-e") == 0) { - nerrs = atoi(argv[++i]); - } else if (strcmp(argv[i], "-h") == 0) { - usage(argv[0]); - return 0; - } else { - usage(argv[0]); - return -1; - } - } - - if (nerrs > k) { - printf - ("Number of errors (%d) cannot be higher than number of data buffers (%d)\n", - nerrs, k); - return -1; - } - - if (k <= 0) { - printf("Number of source buffers (%d) must be > 0\n", k); - return -1; - } - - if (p <= 0) { - printf("Number of parity buffers (%d) must be > 0\n", p); - return -1; - } - - if (nerrs <= 0) { - printf("Number of errors (%d) must be > 0\n", nerrs); - return -1; - } - - if (nerrs > p) { - printf - ("Number of errors (%d) cannot be higher than number of parity buffers (%d)\n", - nerrs, p); - return -1; - } - - m = k + p; - - if (m > MMAX) { - printf("Number of total buffers (data and parity) cannot be higher than %d\n", - MMAX); - return -1; - } - - u8 *err_list = malloc((size_t)nerrs); - if (err_list == NULL) { - printf("Error allocating list of array of error indices\n"); - return -1; - } - - srand(TEST_SEED); - - for (i = 0; i < nerrs;) { - u8 next_err = rand() % k; - for (j = 0; j < i; j++) - if (next_err == err_list[j]) - break; - if (j != i) - continue; - err_list[i++] = next_err; - } - - printf("Testing with %u data buffers and %u parity buffers (num errors = %u, in [ ", k, - p, nerrs); - for (i = 0; i < nerrs; i++) - printf("%d ", (int)err_list[i]); - - printf("])\n"); - - printf("erasure_code_perf: %dx%d %d\n", m, TEST_LEN(m), nerrs); - - memcpy(src_err_list, err_list, nerrs); - memset(src_in_err, 0, TEST_SOURCES); - for (i = 0; i < nerrs; i++) - src_in_err[src_err_list[i]] = 1; - - // Allocate the arrays - for (i = 0; i < m; i++) { - if (posix_memalign(&buf, 64, TEST_LEN(m))) { - printf("Error allocating buffers\n"); - goto exit; - } - buffs[i] = buf; - } - - for (i = 0; i < p; i++) { - if (posix_memalign(&buf, 64, TEST_LEN(m))) { - printf("Error allocating buffers\n"); - goto exit; - } - temp_buffs[i] = buf; - } - - // Make random data - for (i = 0; i < k; i++) - for (j = 0; j < TEST_LEN(m); j++) - buffs[i][j] = rand(); - - gf_gen_rs_matrix(a, m, k); - - // Start encode test - ec_encode_perf(m, k, a, g_tbls, buffs, &start); - printf("erasure_code_encode" TEST_TYPE_STR ": "); - perf_print(start, (long long)(TEST_LEN(m)) * (m)); - - // Start decode test - check = ec_decode_perf(m, k, a, g_tbls, buffs, src_in_err, src_err_list, nerrs, - temp_buffs, &start); - - if (check == BAD_MATRIX) { - printf("BAD MATRIX\n"); - ret = check; - goto exit; - } - - for (i = 0; i < nerrs; i++) { - if (0 != memcmp(temp_buffs[i], buffs[src_err_list[i]], TEST_LEN(m))) { - printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs); - goto exit; - } - } - - printf("erasure_code_decode" TEST_TYPE_STR ": "); - perf_print(start, (long long)(TEST_LEN(m)) * (k + nerrs)); - - printf("done all: Pass\n"); - - ret = 0; - - exit: - free(err_list); - for (i = 0; i < TEST_SOURCES; i++) { - free(buffs[i]); - free(temp_buffs[i]); - } - return ret; + int i, j, m, k, p, nerrs, check, ret = -1; + void *buf; + u8 *temp_buffs[TEST_SOURCES] = { NULL }; + u8 *buffs[TEST_SOURCES] = { NULL }; + u8 a[MMAX * KMAX]; + u8 g_tbls[KMAX * TEST_SOURCES * 32], src_in_err[TEST_SOURCES]; + u8 src_err_list[TEST_SOURCES]; + struct perf start; + + /* Set default parameters */ + k = 8; + p = 6; + nerrs = 4; + + /* Parse arguments */ + for (i = 1; i < argc; i++) { + if (strcmp(argv[i], "-k") == 0) { + k = atoi(argv[++i]); + } else if (strcmp(argv[i], "-p") == 0) { + p = atoi(argv[++i]); + } else if (strcmp(argv[i], "-e") == 0) { + nerrs = atoi(argv[++i]); + } else if (strcmp(argv[i], "-h") == 0) { + usage(argv[0]); + return 0; + } else { + usage(argv[0]); + return -1; + } + } + + if (nerrs > k) { + printf("Number of errors (%d) cannot be higher than number of data buffers (%d)\n", + nerrs, k); + return -1; + } + + if (k <= 0) { + printf("Number of source buffers (%d) must be > 0\n", k); + return -1; + } + + if (p <= 0) { + printf("Number of parity buffers (%d) must be > 0\n", p); + return -1; + } + + if (nerrs <= 0) { + printf("Number of errors (%d) must be > 0\n", nerrs); + return -1; + } + + if (nerrs > p) { + printf("Number of errors (%d) cannot be higher than number of parity buffers " + "(%d)\n", + nerrs, p); + return -1; + } + + m = k + p; + + if (m > MMAX) { + printf("Number of total buffers (data and parity) cannot be higher than %d\n", + MMAX); + return -1; + } + + u8 *err_list = malloc((size_t) nerrs); + if (err_list == NULL) { + printf("Error allocating list of array of error indices\n"); + return -1; + } + + srand(TEST_SEED); + + for (i = 0; i < nerrs;) { + u8 next_err = rand() % k; + for (j = 0; j < i; j++) + if (next_err == err_list[j]) + break; + if (j != i) + continue; + err_list[i++] = next_err; + } + + printf("Testing with %u data buffers and %u parity buffers (num errors = %u, in [ ", k, p, + nerrs); + for (i = 0; i < nerrs; i++) + printf("%d ", (int) err_list[i]); + + printf("])\n"); + + printf("erasure_code_perf: %dx%d %d\n", m, TEST_LEN(m), nerrs); + + memcpy(src_err_list, err_list, nerrs); + memset(src_in_err, 0, TEST_SOURCES); + for (i = 0; i < nerrs; i++) + src_in_err[src_err_list[i]] = 1; + + // Allocate the arrays + for (i = 0; i < m; i++) { + if (posix_memalign(&buf, 64, TEST_LEN(m))) { + printf("Error allocating buffers\n"); + goto exit; + } + buffs[i] = buf; + } + + for (i = 0; i < p; i++) { + if (posix_memalign(&buf, 64, TEST_LEN(m))) { + printf("Error allocating buffers\n"); + goto exit; + } + temp_buffs[i] = buf; + } + + // Make random data + for (i = 0; i < k; i++) + for (j = 0; j < TEST_LEN(m); j++) + buffs[i][j] = rand(); + + gf_gen_rs_matrix(a, m, k); + + // Start encode test + ec_encode_perf(m, k, a, g_tbls, buffs, &start); + printf("erasure_code_encode" TEST_TYPE_STR ": "); + perf_print(start, (long long) (TEST_LEN(m)) * (m)); + + // Start decode test + check = ec_decode_perf(m, k, a, g_tbls, buffs, src_in_err, src_err_list, nerrs, temp_buffs, + &start); + + if (check == BAD_MATRIX) { + printf("BAD MATRIX\n"); + ret = check; + goto exit; + } + + for (i = 0; i < nerrs; i++) { + if (0 != memcmp(temp_buffs[i], buffs[src_err_list[i]], TEST_LEN(m))) { + printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs); + goto exit; + } + } + + printf("erasure_code_decode" TEST_TYPE_STR ": "); + perf_print(start, (long long) (TEST_LEN(m)) * (k + nerrs)); + + printf("done all: Pass\n"); + + ret = 0; + +exit: + free(err_list); + for (i = 0; i < TEST_SOURCES; i++) { + free(buffs[i]); + free(temp_buffs[i]); + } + return ret; } diff --git a/erasure_code/erasure_code_test.c b/erasure_code/erasure_code_test.c index 465218ec..365f0e14 100644 --- a/erasure_code/erasure_code_test.c +++ b/erasure_code/erasure_code_test.c @@ -29,19 +29,19 @@ #include #include -#include // for memset, memcmp +#include // for memset, memcmp #include #include "erasure_code.h" #include "test.h" -#define TEST_LEN 8192 -#define TEST_SIZE (TEST_LEN/2) +#define TEST_LEN 8192 +#define TEST_SIZE (TEST_LEN / 2) #ifndef TEST_SOURCES -# define TEST_SOURCES 127 +#define TEST_SOURCES 127 #endif #ifndef RANDOMS -# define RANDOMS 200 +#define RANDOMS 200 #endif #define MMAX TEST_SOURCES @@ -52,12 +52,12 @@ #ifdef EC_ALIGNED_ADDR // Define power of 2 range to check ptr, len alignment -# define PTR_ALIGN_CHK_B 0 -# define LEN_ALIGN_CHK_B 0 // 0 for aligned only +#define PTR_ALIGN_CHK_B 0 +#define LEN_ALIGN_CHK_B 0 // 0 for aligned only #else // Define power of 2 range to check ptr, len alignment -# define PTR_ALIGN_CHK_B 32 -# define LEN_ALIGN_CHK_B 32 // 0 for aligned only +#define PTR_ALIGN_CHK_B 32 +#define LEN_ALIGN_CHK_B 32 // 0 for aligned only #endif #ifndef TEST_SEED @@ -66,734 +66,734 @@ typedef unsigned char u8; -void dump(unsigned char *buf, int len) +void +dump(unsigned char *buf, int len) { - int i; - for (i = 0; i < len;) { - printf(" %2x", 0xff & buf[i++]); - if (i % 32 == 0) - printf("\n"); - } - printf("\n"); + int i; + for (i = 0; i < len;) { + printf(" %2x", 0xff & buf[i++]); + if (i % 32 == 0) + printf("\n"); + } + printf("\n"); } -void dump_matrix(unsigned char **s, int k, int m) +void +dump_matrix(unsigned char **s, int k, int m) { - int i, j; - for (i = 0; i < k; i++) { - for (j = 0; j < m; j++) { - printf(" %2x", s[i][j]); - } - printf("\n"); - } - printf("\n"); + int i, j; + for (i = 0; i < k; i++) { + for (j = 0; j < m; j++) { + printf(" %2x", s[i][j]); + } + printf("\n"); + } + printf("\n"); } -void dump_u8xu8(unsigned char *s, int k, int m) +void +dump_u8xu8(unsigned char *s, int k, int m) { - int i, j; - for (i = 0; i < k; i++) { - for (j = 0; j < m; j++) { - printf(" %2x", 0xff & s[j + (i * m)]); - } - printf("\n"); - } - printf("\n"); + int i, j; + for (i = 0; i < k; i++) { + for (j = 0; j < m; j++) { + printf(" %2x", 0xff & s[j + (i * m)]); + } + printf("\n"); + } + printf("\n"); } // Generate Random errors -static void gen_err_list(unsigned char *src_err_list, - unsigned char *src_in_err, int *pnerrs, int *pnsrcerrs, int k, int m) +static void +gen_err_list(unsigned char *src_err_list, unsigned char *src_in_err, int *pnerrs, int *pnsrcerrs, + int k, int m) { - int i, err; - int nerrs = 0, nsrcerrs = 0; - - for (i = 0, nerrs = 0, nsrcerrs = 0; i < m && nerrs < m - k; i++) { - err = 1 & rand(); - src_in_err[i] = err; - if (err) { - src_err_list[nerrs++] = i; - if (i < k) { - nsrcerrs++; - } - } - } - if (nerrs == 0) { // should have at least one error - while ((err = (rand() % KMAX)) >= m) ; - src_err_list[nerrs++] = err; - src_in_err[err] = 1; - if (err < k) - nsrcerrs = 1; - } - *pnerrs = nerrs; - *pnsrcerrs = nsrcerrs; - return; + int i, err; + int nerrs = 0, nsrcerrs = 0; + + for (i = 0, nerrs = 0, nsrcerrs = 0; i < m && nerrs < m - k; i++) { + err = 1 & rand(); + src_in_err[i] = err; + if (err) { + src_err_list[nerrs++] = i; + if (i < k) { + nsrcerrs++; + } + } + } + if (nerrs == 0) { // should have at least one error + while ((err = (rand() % KMAX)) >= m) + ; + src_err_list[nerrs++] = err; + src_in_err[err] = 1; + if (err < k) + nsrcerrs = 1; + } + *pnerrs = nerrs; + *pnsrcerrs = nsrcerrs; + return; } #define NO_INVERT_MATRIX -2 // Generate decode matrix from encode matrix -static int gf_gen_decode_matrix(unsigned char *encode_matrix, - unsigned char *decode_matrix, - unsigned char *invert_matrix, - unsigned int *decode_index, - unsigned char *src_err_list, - unsigned char *src_in_err, - int nerrs, int nsrcerrs, int k, int m) +static int +gf_gen_decode_matrix(unsigned char *encode_matrix, unsigned char *decode_matrix, + unsigned char *invert_matrix, unsigned int *decode_index, + unsigned char *src_err_list, unsigned char *src_in_err, int nerrs, + int nsrcerrs, int k, int m) { - int i, j, p; - int r; - unsigned char *backup, *b, s; - int incr = 0; - - b = malloc(MMAX * KMAX); - backup = malloc(MMAX * KMAX); - - if (b == NULL || backup == NULL) { - printf("Test failure! Error with malloc\n"); - free(b); - free(backup); - return -1; - } - // Construct matrix b by removing error rows - for (i = 0, r = 0; i < k; i++, r++) { - while (src_in_err[r]) - r++; - for (j = 0; j < k; j++) { - b[k * i + j] = encode_matrix[k * r + j]; - backup[k * i + j] = encode_matrix[k * r + j]; - } - decode_index[i] = r; - } - incr = 0; - while (gf_invert_matrix(b, invert_matrix, k) < 0) { - if (nerrs == (m - k)) { - free(b); - free(backup); - printf("BAD MATRIX\n"); - return NO_INVERT_MATRIX; - } - incr++; - memcpy(b, backup, MMAX * KMAX); - for (i = nsrcerrs; i < nerrs - nsrcerrs; i++) { - if (src_err_list[i] == (decode_index[k - 1] + incr)) { - // skip the erased parity line - incr++; - continue; - } - } - if (decode_index[k - 1] + incr >= m) { - free(b); - free(backup); - printf("BAD MATRIX\n"); - return NO_INVERT_MATRIX; - } - decode_index[k - 1] += incr; - for (j = 0; j < k; j++) - b[k * (k - 1) + j] = encode_matrix[k * decode_index[k - 1] + j]; - - }; - - for (i = 0; i < nsrcerrs; i++) { - for (j = 0; j < k; j++) { - decode_matrix[k * i + j] = invert_matrix[k * src_err_list[i] + j]; - } - } - /* src_err_list from encode_matrix * invert of b for parity decoding */ - for (p = nsrcerrs; p < nerrs; p++) { - for (i = 0; i < k; i++) { - s = 0; - for (j = 0; j < k; j++) - s ^= gf_mul(invert_matrix[j * k + i], - encode_matrix[k * src_err_list[p] + j]); - - decode_matrix[k * p + i] = s; - } - } - free(b); - free(backup); - return 0; + int i, j, p; + int r; + unsigned char *backup, *b, s; + int incr = 0; + + b = malloc(MMAX * KMAX); + backup = malloc(MMAX * KMAX); + + if (b == NULL || backup == NULL) { + printf("Test failure! Error with malloc\n"); + free(b); + free(backup); + return -1; + } + // Construct matrix b by removing error rows + for (i = 0, r = 0; i < k; i++, r++) { + while (src_in_err[r]) + r++; + for (j = 0; j < k; j++) { + b[k * i + j] = encode_matrix[k * r + j]; + backup[k * i + j] = encode_matrix[k * r + j]; + } + decode_index[i] = r; + } + incr = 0; + while (gf_invert_matrix(b, invert_matrix, k) < 0) { + if (nerrs == (m - k)) { + free(b); + free(backup); + printf("BAD MATRIX\n"); + return NO_INVERT_MATRIX; + } + incr++; + memcpy(b, backup, MMAX * KMAX); + for (i = nsrcerrs; i < nerrs - nsrcerrs; i++) { + if (src_err_list[i] == (decode_index[k - 1] + incr)) { + // skip the erased parity line + incr++; + continue; + } + } + if (decode_index[k - 1] + incr >= m) { + free(b); + free(backup); + printf("BAD MATRIX\n"); + return NO_INVERT_MATRIX; + } + decode_index[k - 1] += incr; + for (j = 0; j < k; j++) + b[k * (k - 1) + j] = encode_matrix[k * decode_index[k - 1] + j]; + }; + + for (i = 0; i < nsrcerrs; i++) { + for (j = 0; j < k; j++) { + decode_matrix[k * i + j] = invert_matrix[k * src_err_list[i] + j]; + } + } + /* src_err_list from encode_matrix * invert of b for parity decoding */ + for (p = nsrcerrs; p < nerrs; p++) { + for (i = 0; i < k; i++) { + s = 0; + for (j = 0; j < k; j++) + s ^= gf_mul(invert_matrix[j * k + i], + encode_matrix[k * src_err_list[p] + j]); + + decode_matrix[k * p + i] = s; + } + } + free(b); + free(backup); + return 0; } -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - int re = -1; - int i, j, p, rtest, m, k; - int nerrs, nsrcerrs; - void *buf; - unsigned int decode_index[MMAX]; - unsigned char *temp_buffs[TEST_SOURCES] = { NULL }, *buffs[TEST_SOURCES] = { NULL }; - unsigned char *encode_matrix = NULL, *decode_matrix = NULL, *invert_matrix = - NULL, *g_tbls = NULL; - unsigned char src_in_err[TEST_SOURCES], src_err_list[TEST_SOURCES]; - unsigned char *recov[TEST_SOURCES]; - - int rows, align, size; - unsigned char *efence_buffs[TEST_SOURCES]; - unsigned int offset; - u8 *ubuffs[TEST_SOURCES]; - u8 *temp_ubuffs[TEST_SOURCES]; - - printf("erasure_code_test: %dx%d ", TEST_SOURCES, TEST_LEN); - srand(TEST_SEED); - - // Allocate the arrays - for (i = 0; i < TEST_SOURCES; i++) { - if (posix_memalign(&buf, 64, TEST_LEN)) { - printf("alloc error: Fail"); - goto exit; - } - buffs[i] = buf; - } - - for (i = 0; i < TEST_SOURCES; i++) { - if (posix_memalign(&buf, 64, TEST_LEN)) { - printf("alloc error: Fail"); - goto exit; - } - temp_buffs[i] = buf; - } - - // Test erasure code by encode and recovery - - encode_matrix = malloc(MMAX * KMAX); - decode_matrix = malloc(MMAX * KMAX); - invert_matrix = malloc(MMAX * KMAX); - g_tbls = malloc(KMAX * TEST_SOURCES * 32); - if (encode_matrix == NULL || decode_matrix == NULL - || invert_matrix == NULL || g_tbls == NULL) { - printf("Test failure! Error with malloc\n"); - goto exit; - } - // Pick a first test - m = 9; - k = 5; - assert((m <= MMAX) && (k <= KMAX)); - - // Make random data - for (i = 0; i < k; i++) - for (j = 0; j < TEST_LEN; j++) - buffs[i][j] = rand(); - - // Generate encode matrix encode_matrix - // The matrix generated by gf_gen_rs_matrix - // is not always invertable. - gf_gen_rs_matrix(encode_matrix, m, k); - - // Generate g_tbls from encode matrix encode_matrix - ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls); - - // Perform matrix dot_prod for EC encoding - // using g_tbls from encode matrix encode_matrix - ec_encode_data(TEST_LEN, k, m - k, g_tbls, buffs, &buffs[k]); - - // Choose random buffers to be in erasure - memset(src_in_err, 0, TEST_SOURCES); - gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); - - // Generate decode matrix - re = gf_gen_decode_matrix(encode_matrix, decode_matrix, - invert_matrix, decode_index, src_err_list, src_in_err, - nerrs, nsrcerrs, k, m); - if (re != 0) { - printf("Fail to gf_gen_decode_matrix\n"); - goto exit; - } - // Pack recovery array as list of valid sources - // Its order must be the same as the order - // to generate matrix b in gf_gen_decode_matrix - for (i = 0; i < k; i++) { - recov[i] = buffs[decode_index[i]]; - } - - // Recover data - ec_init_tables(k, nerrs, decode_matrix, g_tbls); - ec_encode_data(TEST_LEN, k, nerrs, g_tbls, recov, &temp_buffs[k]); - for (i = 0; i < nerrs; i++) { - - if (0 != memcmp(temp_buffs[k + i], buffs[src_err_list[i]], TEST_LEN)) { - printf("Fail error recovery (%d, %d, %d)\n", m, k, nerrs); - printf(" - erase list = "); - for (j = 0; j < nerrs; j++) - printf(" %d", src_err_list[j]); - printf(" - Index = "); - for (p = 0; p < k; p++) - printf(" %d", decode_index[p]); - printf("\nencode_matrix:\n"); - dump_u8xu8((u8 *) encode_matrix, m, k); - printf("inv b:\n"); - dump_u8xu8((u8 *) invert_matrix, k, k); - printf("\ndecode_matrix:\n"); - dump_u8xu8((u8 *) decode_matrix, m, k); - printf("recov %d:", src_err_list[i]); - dump(temp_buffs[k + i], 25); - printf("orig :"); - dump(buffs[src_err_list[i]], 25); - re = -1; - goto exit; - } - } - - // Pick a first test - m = 9; - k = 5; - if (m > MMAX || k > KMAX) { - re = -1; - goto exit; - } - - // Make random data - for (i = 0; i < k; i++) - for (j = 0; j < TEST_LEN; j++) - buffs[i][j] = rand(); - - // The matrix generated by gf_gen_cauchy1_matrix - // is always invertable. - gf_gen_cauchy1_matrix(encode_matrix, m, k); - - // Generate g_tbls from encode matrix encode_matrix - ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls); - - // Perform matrix dot_prod for EC encoding - // using g_tbls from encode matrix encode_matrix - ec_encode_data(TEST_LEN, k, m - k, g_tbls, buffs, &buffs[k]); - - // Choose random buffers to be in erasure - memset(src_in_err, 0, TEST_SOURCES); - gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); - - // Generate decode matrix - re = gf_gen_decode_matrix(encode_matrix, decode_matrix, - invert_matrix, decode_index, src_err_list, src_in_err, - nerrs, nsrcerrs, k, m); - if (re != 0) { - printf("Fail to gf_gen_decode_matrix\n"); - goto exit; - } - // Pack recovery array as list of valid sources - // Its order must be the same as the order - // to generate matrix b in gf_gen_decode_matrix - for (i = 0; i < k; i++) { - recov[i] = buffs[decode_index[i]]; - } - - // Recover data - ec_init_tables(k, nerrs, decode_matrix, g_tbls); - ec_encode_data(TEST_LEN, k, nerrs, g_tbls, recov, &temp_buffs[k]); - for (i = 0; i < nerrs; i++) { - - if (0 != memcmp(temp_buffs[k + i], buffs[src_err_list[i]], TEST_LEN)) { - printf("Fail error recovery (%d, %d, %d)\n", m, k, nerrs); - printf(" - erase list = "); - for (j = 0; j < nerrs; j++) - printf(" %d", src_err_list[j]); - printf(" - Index = "); - for (p = 0; p < k; p++) - printf(" %d", decode_index[p]); - printf("\nencode_matrix:\n"); - dump_u8xu8((u8 *) encode_matrix, m, k); - printf("inv b:\n"); - dump_u8xu8((u8 *) invert_matrix, k, k); - printf("\ndecode_matrix:\n"); - dump_u8xu8((u8 *) decode_matrix, m, k); - printf("recov %d:", src_err_list[i]); - dump(temp_buffs[k + i], 25); - printf("orig :"); - dump(buffs[src_err_list[i]], 25); - re = -1; - goto exit; - } - } - - // Do more random tests - for (rtest = 0; rtest < RANDOMS; rtest++) { - while ((m = (rand() % MMAX)) < 2) ; - while ((k = (rand() % KMAX)) >= m || k < 1) ; - - if (m > MMAX || k > KMAX) - continue; - - // Make random data - for (i = 0; i < k; i++) - for (j = 0; j < TEST_LEN; j++) - buffs[i][j] = rand(); - - // The matrix generated by gf_gen_cauchy1_matrix - // is always invertable. - gf_gen_cauchy1_matrix(encode_matrix, m, k); - - // Make parity vects - // Generate g_tbls from encode matrix a - ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls); - // Perform matrix dot_prod for EC encoding - // using g_tbls from encode matrix a - ec_encode_data(TEST_LEN, k, m - k, g_tbls, buffs, &buffs[k]); - - // Random errors - memset(src_in_err, 0, TEST_SOURCES); - gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); - - // Generate decode matrix - re = gf_gen_decode_matrix(encode_matrix, decode_matrix, - invert_matrix, decode_index, src_err_list, - src_in_err, nerrs, nsrcerrs, k, m); - if (re != 0) { - printf("Fail to gf_gen_decode_matrix\n"); - goto exit; - } - // Pack recovery array as list of valid sources - // Its order must be the same as the order - // to generate matrix b in gf_gen_decode_matrix - for (i = 0; i < k; i++) { - recov[i] = buffs[decode_index[i]]; - } - - // Recover data - ec_init_tables(k, nerrs, decode_matrix, g_tbls); - ec_encode_data(TEST_LEN, k, nerrs, g_tbls, recov, &temp_buffs[k]); - - for (i = 0; i < nerrs; i++) { - - if (0 != memcmp(temp_buffs[k + i], buffs[src_err_list[i]], TEST_LEN)) { - printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs); - printf(" - erase list = "); - for (j = 0; j < nerrs; j++) - printf(" %d", src_err_list[j]); - printf(" - Index = "); - for (p = 0; p < k; p++) - printf(" %d", decode_index[p]); - printf("\nencode_matrix:\n"); - dump_u8xu8((u8 *) encode_matrix, m, k); - printf("inv b:\n"); - dump_u8xu8((u8 *) invert_matrix, k, k); - printf("\ndecode_matrix:\n"); - dump_u8xu8((u8 *) decode_matrix, m, k); - printf("orig data:\n"); - dump_matrix(buffs, m, 25); - printf("orig :"); - dump(buffs[src_err_list[i]], 25); - printf("recov %d:", src_err_list[i]); - dump(temp_buffs[k + i], 25); - re = -1; - goto exit; - } - } + int re = -1; + int i, j, p, rtest, m, k; + int nerrs, nsrcerrs; + void *buf; + unsigned int decode_index[MMAX]; + unsigned char *temp_buffs[TEST_SOURCES] = { NULL }, *buffs[TEST_SOURCES] = { NULL }; + unsigned char *encode_matrix = NULL, *decode_matrix = NULL, *invert_matrix = NULL, + *g_tbls = NULL; + unsigned char src_in_err[TEST_SOURCES], src_err_list[TEST_SOURCES]; + unsigned char *recov[TEST_SOURCES]; + + int rows, align, size; + unsigned char *efence_buffs[TEST_SOURCES]; + unsigned int offset; + u8 *ubuffs[TEST_SOURCES]; + u8 *temp_ubuffs[TEST_SOURCES]; + + printf("erasure_code_test: %dx%d ", TEST_SOURCES, TEST_LEN); + srand(TEST_SEED); + + // Allocate the arrays + for (i = 0; i < TEST_SOURCES; i++) { + if (posix_memalign(&buf, 64, TEST_LEN)) { + printf("alloc error: Fail"); + goto exit; + } + buffs[i] = buf; + } + + for (i = 0; i < TEST_SOURCES; i++) { + if (posix_memalign(&buf, 64, TEST_LEN)) { + printf("alloc error: Fail"); + goto exit; + } + temp_buffs[i] = buf; + } + + // Test erasure code by encode and recovery + + encode_matrix = malloc(MMAX * KMAX); + decode_matrix = malloc(MMAX * KMAX); + invert_matrix = malloc(MMAX * KMAX); + g_tbls = malloc(KMAX * TEST_SOURCES * 32); + if (encode_matrix == NULL || decode_matrix == NULL || invert_matrix == NULL || + g_tbls == NULL) { + printf("Test failure! Error with malloc\n"); + goto exit; + } + // Pick a first test + m = 9; + k = 5; + assert((m <= MMAX) && (k <= KMAX)); + + // Make random data + for (i = 0; i < k; i++) + for (j = 0; j < TEST_LEN; j++) + buffs[i][j] = rand(); + + // Generate encode matrix encode_matrix + // The matrix generated by gf_gen_rs_matrix + // is not always invertable. + gf_gen_rs_matrix(encode_matrix, m, k); + + // Generate g_tbls from encode matrix encode_matrix + ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls); + + // Perform matrix dot_prod for EC encoding + // using g_tbls from encode matrix encode_matrix + ec_encode_data(TEST_LEN, k, m - k, g_tbls, buffs, &buffs[k]); + + // Choose random buffers to be in erasure + memset(src_in_err, 0, TEST_SOURCES); + gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); + + // Generate decode matrix + re = gf_gen_decode_matrix(encode_matrix, decode_matrix, invert_matrix, decode_index, + src_err_list, src_in_err, nerrs, nsrcerrs, k, m); + if (re != 0) { + printf("Fail to gf_gen_decode_matrix\n"); + goto exit; + } + // Pack recovery array as list of valid sources + // Its order must be the same as the order + // to generate matrix b in gf_gen_decode_matrix + for (i = 0; i < k; i++) { + recov[i] = buffs[decode_index[i]]; + } + + // Recover data + ec_init_tables(k, nerrs, decode_matrix, g_tbls); + ec_encode_data(TEST_LEN, k, nerrs, g_tbls, recov, &temp_buffs[k]); + for (i = 0; i < nerrs; i++) { + + if (0 != memcmp(temp_buffs[k + i], buffs[src_err_list[i]], TEST_LEN)) { + printf("Fail error recovery (%d, %d, %d)\n", m, k, nerrs); + printf(" - erase list = "); + for (j = 0; j < nerrs; j++) + printf(" %d", src_err_list[j]); + printf(" - Index = "); + for (p = 0; p < k; p++) + printf(" %d", decode_index[p]); + printf("\nencode_matrix:\n"); + dump_u8xu8((u8 *) encode_matrix, m, k); + printf("inv b:\n"); + dump_u8xu8((u8 *) invert_matrix, k, k); + printf("\ndecode_matrix:\n"); + dump_u8xu8((u8 *) decode_matrix, m, k); + printf("recov %d:", src_err_list[i]); + dump(temp_buffs[k + i], 25); + printf("orig :"); + dump(buffs[src_err_list[i]], 25); + re = -1; + goto exit; + } + } + + // Pick a first test + m = 9; + k = 5; + if (m > MMAX || k > KMAX) { + re = -1; + goto exit; + } + + // Make random data + for (i = 0; i < k; i++) + for (j = 0; j < TEST_LEN; j++) + buffs[i][j] = rand(); + + // The matrix generated by gf_gen_cauchy1_matrix + // is always invertable. + gf_gen_cauchy1_matrix(encode_matrix, m, k); + + // Generate g_tbls from encode matrix encode_matrix + ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls); + + // Perform matrix dot_prod for EC encoding + // using g_tbls from encode matrix encode_matrix + ec_encode_data(TEST_LEN, k, m - k, g_tbls, buffs, &buffs[k]); + + // Choose random buffers to be in erasure + memset(src_in_err, 0, TEST_SOURCES); + gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); + + // Generate decode matrix + re = gf_gen_decode_matrix(encode_matrix, decode_matrix, invert_matrix, decode_index, + src_err_list, src_in_err, nerrs, nsrcerrs, k, m); + if (re != 0) { + printf("Fail to gf_gen_decode_matrix\n"); + goto exit; + } + // Pack recovery array as list of valid sources + // Its order must be the same as the order + // to generate matrix b in gf_gen_decode_matrix + for (i = 0; i < k; i++) { + recov[i] = buffs[decode_index[i]]; + } + + // Recover data + ec_init_tables(k, nerrs, decode_matrix, g_tbls); + ec_encode_data(TEST_LEN, k, nerrs, g_tbls, recov, &temp_buffs[k]); + for (i = 0; i < nerrs; i++) { + + if (0 != memcmp(temp_buffs[k + i], buffs[src_err_list[i]], TEST_LEN)) { + printf("Fail error recovery (%d, %d, %d)\n", m, k, nerrs); + printf(" - erase list = "); + for (j = 0; j < nerrs; j++) + printf(" %d", src_err_list[j]); + printf(" - Index = "); + for (p = 0; p < k; p++) + printf(" %d", decode_index[p]); + printf("\nencode_matrix:\n"); + dump_u8xu8((u8 *) encode_matrix, m, k); + printf("inv b:\n"); + dump_u8xu8((u8 *) invert_matrix, k, k); + printf("\ndecode_matrix:\n"); + dump_u8xu8((u8 *) decode_matrix, m, k); + printf("recov %d:", src_err_list[i]); + dump(temp_buffs[k + i], 25); + printf("orig :"); + dump(buffs[src_err_list[i]], 25); + re = -1; + goto exit; + } + } + + // Do more random tests + for (rtest = 0; rtest < RANDOMS; rtest++) { + while ((m = (rand() % MMAX)) < 2) + ; + while ((k = (rand() % KMAX)) >= m || k < 1) + ; + + if (m > MMAX || k > KMAX) + continue; + + // Make random data + for (i = 0; i < k; i++) + for (j = 0; j < TEST_LEN; j++) + buffs[i][j] = rand(); + + // The matrix generated by gf_gen_cauchy1_matrix + // is always invertable. + gf_gen_cauchy1_matrix(encode_matrix, m, k); + + // Make parity vects + // Generate g_tbls from encode matrix a + ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls); + // Perform matrix dot_prod for EC encoding + // using g_tbls from encode matrix a + ec_encode_data(TEST_LEN, k, m - k, g_tbls, buffs, &buffs[k]); + + // Random errors + memset(src_in_err, 0, TEST_SOURCES); + gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); + + // Generate decode matrix + re = gf_gen_decode_matrix(encode_matrix, decode_matrix, invert_matrix, decode_index, + src_err_list, src_in_err, nerrs, nsrcerrs, k, m); + if (re != 0) { + printf("Fail to gf_gen_decode_matrix\n"); + goto exit; + } + // Pack recovery array as list of valid sources + // Its order must be the same as the order + // to generate matrix b in gf_gen_decode_matrix + for (i = 0; i < k; i++) { + recov[i] = buffs[decode_index[i]]; + } + + // Recover data + ec_init_tables(k, nerrs, decode_matrix, g_tbls); + ec_encode_data(TEST_LEN, k, nerrs, g_tbls, recov, &temp_buffs[k]); + + for (i = 0; i < nerrs; i++) { + + if (0 != memcmp(temp_buffs[k + i], buffs[src_err_list[i]], TEST_LEN)) { + printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs); + printf(" - erase list = "); + for (j = 0; j < nerrs; j++) + printf(" %d", src_err_list[j]); + printf(" - Index = "); + for (p = 0; p < k; p++) + printf(" %d", decode_index[p]); + printf("\nencode_matrix:\n"); + dump_u8xu8((u8 *) encode_matrix, m, k); + printf("inv b:\n"); + dump_u8xu8((u8 *) invert_matrix, k, k); + printf("\ndecode_matrix:\n"); + dump_u8xu8((u8 *) decode_matrix, m, k); + printf("orig data:\n"); + dump_matrix(buffs, m, 25); + printf("orig :"); + dump(buffs[src_err_list[i]], 25); + printf("recov %d:", src_err_list[i]); + dump(temp_buffs[k + i], 25); + re = -1; + goto exit; + } + } #ifdef TEST_VERBOSE - putchar('.'); + putchar('.'); #endif - } - - // Run tests at end of buffer for Electric Fence - k = 16; - align = (LEN_ALIGN_CHK_B != 0) ? 1 : 16; - if (k > KMAX) { - re = -1; - goto exit; - } - - for (rows = 1; rows <= 16; rows++) { - m = k + rows; - if (m > MMAX) { - re = -1; - goto exit; - } - - // Make random data - for (i = 0; i < k; i++) - for (j = 0; j < TEST_LEN; j++) - buffs[i][j] = rand(); - - for (size = EFENCE_TEST_MIN_SIZE; size <= EFENCE_TEST_MAX_SIZE; size += align) { - for (i = 0; i < m; i++) { // Line up TEST_SIZE from end - efence_buffs[i] = buffs[i] + TEST_LEN - size; - } - - // The matrix generated by gf_gen_cauchy1_matrix - // is always invertable. - gf_gen_cauchy1_matrix(encode_matrix, m, k); - - // Make parity vects - // Generate g_tbls from encode matrix a - ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls); - // Perform matrix dot_prod for EC encoding - // using g_tbls from encode matrix a - ec_encode_data(size, k, m - k, g_tbls, efence_buffs, &efence_buffs[k]); - - // Random errors - memset(src_in_err, 0, TEST_SOURCES); - gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); - - // Generate decode matrix - re = gf_gen_decode_matrix(encode_matrix, decode_matrix, - invert_matrix, decode_index, src_err_list, - src_in_err, nerrs, nsrcerrs, k, m); - if (re != 0) { - printf("Fail to gf_gen_decode_matrix\n"); - goto exit; - } - // Pack recovery array as list of valid sources - // Its order must be the same as the order - // to generate matrix b in gf_gen_decode_matrix - for (i = 0; i < k; i++) { - recov[i] = efence_buffs[decode_index[i]]; - } - - // Recover data - ec_init_tables(k, nerrs, decode_matrix, g_tbls); - ec_encode_data(size, k, nerrs, g_tbls, recov, &temp_buffs[k]); - - for (i = 0; i < nerrs; i++) { - - if (0 != - memcmp(temp_buffs[k + i], efence_buffs[src_err_list[i]], - size)) { - printf("Efence: Fail error recovery (%d, %d, %d)\n", m, - k, nerrs); - - printf("size = %d\n", size); - - printf("Test erase list = "); - for (j = 0; j < nerrs; j++) - printf(" %d", src_err_list[j]); - printf(" - Index = "); - for (p = 0; p < k; p++) - printf(" %d", decode_index[p]); - printf("\nencode_matrix:\n"); - dump_u8xu8((u8 *) encode_matrix, m, k); - printf("inv b:\n"); - dump_u8xu8((u8 *) invert_matrix, k, k); - printf("\ndecode_matrix:\n"); - dump_u8xu8((u8 *) decode_matrix, m, k); - - printf("recov %d:", src_err_list[i]); - dump(temp_buffs[k + i], align); - printf("orig :"); - dump(efence_buffs[src_err_list[i]], align); - re = -1; - goto exit; - } - } - } - - } - - // Test rand ptr alignment if available - - for (rtest = 0; rtest < RANDOMS; rtest++) { - while ((m = (rand() % MMAX)) < 2) ; - while ((k = (rand() % KMAX)) >= m || k < 1) ; - - if (m > MMAX || k > KMAX) - continue; - - size = (TEST_LEN - PTR_ALIGN_CHK_B) & ~15; - - offset = (PTR_ALIGN_CHK_B != 0) ? 1 : PTR_ALIGN_CHK_B; - // Add random offsets - for (i = 0; i < m; i++) { - memset(buffs[i], 0, TEST_LEN); // zero pad to check write-over - memset(temp_buffs[i], 0, TEST_LEN); // zero pad to check write-over - ubuffs[i] = buffs[i] + (rand() & (PTR_ALIGN_CHK_B - offset)); - temp_ubuffs[i] = temp_buffs[i] + (rand() & (PTR_ALIGN_CHK_B - offset)); - } - - for (i = 0; i < k; i++) - for (j = 0; j < size; j++) - ubuffs[i][j] = rand(); - - // The matrix generated by gf_gen_cauchy1_matrix - // is always invertable. - gf_gen_cauchy1_matrix(encode_matrix, m, k); - - // Make parity vects - // Generate g_tbls from encode matrix a - ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls); - // Perform matrix dot_prod for EC encoding - // using g_tbls from encode matrix a - ec_encode_data(size, k, m - k, g_tbls, ubuffs, &ubuffs[k]); - - // Random errors - memset(src_in_err, 0, TEST_SOURCES); - gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); - - // Generate decode matrix - re = gf_gen_decode_matrix(encode_matrix, decode_matrix, - invert_matrix, decode_index, src_err_list, - src_in_err, nerrs, nsrcerrs, k, m); - if (re != 0) { - printf("Fail to gf_gen_decode_matrix\n"); - goto exit; - } - // Pack recovery array as list of valid sources - // Its order must be the same as the order - // to generate matrix b in gf_gen_decode_matrix - for (i = 0; i < k; i++) { - recov[i] = ubuffs[decode_index[i]]; - } - - // Recover data - ec_init_tables(k, nerrs, decode_matrix, g_tbls); - ec_encode_data(size, k, nerrs, g_tbls, recov, &temp_ubuffs[k]); - - for (i = 0; i < nerrs; i++) { - - if (0 != memcmp(temp_ubuffs[k + i], ubuffs[src_err_list[i]], size)) { - printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs); - printf(" - erase list = "); - for (j = 0; j < nerrs; j++) - printf(" %d", src_err_list[j]); - printf(" - Index = "); - for (p = 0; p < k; p++) - printf(" %d", decode_index[p]); - printf("\nencode_matrix:\n"); - dump_u8xu8((unsigned char *)encode_matrix, m, k); - printf("inv b:\n"); - dump_u8xu8((unsigned char *)invert_matrix, k, k); - printf("\ndecode_matrix:\n"); - dump_u8xu8((unsigned char *)decode_matrix, m, k); - printf("orig data:\n"); - dump_matrix(ubuffs, m, 25); - printf("orig :"); - dump(ubuffs[src_err_list[i]], 25); - printf("recov %d:", src_err_list[i]); - dump(temp_ubuffs[k + i], 25); - re = -1; - goto exit; - } - } - - // Confirm that padding around dests is unchanged - memset(temp_buffs[0], 0, PTR_ALIGN_CHK_B); // Make reference zero buff - - for (i = 0; i < m; i++) { - - offset = ubuffs[i] - buffs[i]; - - if (memcmp(buffs[i], temp_buffs[0], offset)) { - printf("Fail rand ualign encode pad start\n"); - re = -1; - goto exit; - } - if (memcmp - (buffs[i] + offset + size, temp_buffs[0], - PTR_ALIGN_CHK_B - offset)) { - printf("Fail rand ualign encode pad end\n"); - re = -1; - goto exit; - } - } - - for (i = 0; i < nerrs; i++) { - - offset = temp_ubuffs[k + i] - temp_buffs[k + i]; - if (memcmp(temp_buffs[k + i], temp_buffs[0], offset)) { - printf("Fail rand ualign decode pad start\n"); - re = -1; - goto exit; - } - if (memcmp - (temp_buffs[k + i] + offset + size, temp_buffs[0], - PTR_ALIGN_CHK_B - offset)) { - printf("Fail rand ualign decode pad end\n"); - re = -1; - goto exit; - } - } + } + + // Run tests at end of buffer for Electric Fence + k = 16; + align = (LEN_ALIGN_CHK_B != 0) ? 1 : 16; + if (k > KMAX) { + re = -1; + goto exit; + } + + for (rows = 1; rows <= 16; rows++) { + m = k + rows; + if (m > MMAX) { + re = -1; + goto exit; + } + + // Make random data + for (i = 0; i < k; i++) + for (j = 0; j < TEST_LEN; j++) + buffs[i][j] = rand(); + + for (size = EFENCE_TEST_MIN_SIZE; size <= EFENCE_TEST_MAX_SIZE; size += align) { + for (i = 0; i < m; i++) { // Line up TEST_SIZE from end + efence_buffs[i] = buffs[i] + TEST_LEN - size; + } + + // The matrix generated by gf_gen_cauchy1_matrix + // is always invertable. + gf_gen_cauchy1_matrix(encode_matrix, m, k); + + // Make parity vects + // Generate g_tbls from encode matrix a + ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls); + // Perform matrix dot_prod for EC encoding + // using g_tbls from encode matrix a + ec_encode_data(size, k, m - k, g_tbls, efence_buffs, &efence_buffs[k]); + + // Random errors + memset(src_in_err, 0, TEST_SOURCES); + gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); + + // Generate decode matrix + re = gf_gen_decode_matrix(encode_matrix, decode_matrix, invert_matrix, + decode_index, src_err_list, src_in_err, nerrs, + nsrcerrs, k, m); + if (re != 0) { + printf("Fail to gf_gen_decode_matrix\n"); + goto exit; + } + // Pack recovery array as list of valid sources + // Its order must be the same as the order + // to generate matrix b in gf_gen_decode_matrix + for (i = 0; i < k; i++) { + recov[i] = efence_buffs[decode_index[i]]; + } + + // Recover data + ec_init_tables(k, nerrs, decode_matrix, g_tbls); + ec_encode_data(size, k, nerrs, g_tbls, recov, &temp_buffs[k]); + + for (i = 0; i < nerrs; i++) { + + if (0 != memcmp(temp_buffs[k + i], efence_buffs[src_err_list[i]], + size)) { + printf("Efence: Fail error recovery (%d, %d, %d)\n", m, k, + nerrs); + + printf("size = %d\n", size); + + printf("Test erase list = "); + for (j = 0; j < nerrs; j++) + printf(" %d", src_err_list[j]); + printf(" - Index = "); + for (p = 0; p < k; p++) + printf(" %d", decode_index[p]); + printf("\nencode_matrix:\n"); + dump_u8xu8((u8 *) encode_matrix, m, k); + printf("inv b:\n"); + dump_u8xu8((u8 *) invert_matrix, k, k); + printf("\ndecode_matrix:\n"); + dump_u8xu8((u8 *) decode_matrix, m, k); + + printf("recov %d:", src_err_list[i]); + dump(temp_buffs[k + i], align); + printf("orig :"); + dump(efence_buffs[src_err_list[i]], align); + re = -1; + goto exit; + } + } + } + } + + // Test rand ptr alignment if available + + for (rtest = 0; rtest < RANDOMS; rtest++) { + while ((m = (rand() % MMAX)) < 2) + ; + while ((k = (rand() % KMAX)) >= m || k < 1) + ; + + if (m > MMAX || k > KMAX) + continue; + + size = (TEST_LEN - PTR_ALIGN_CHK_B) & ~15; + + offset = (PTR_ALIGN_CHK_B != 0) ? 1 : PTR_ALIGN_CHK_B; + // Add random offsets + for (i = 0; i < m; i++) { + memset(buffs[i], 0, TEST_LEN); // zero pad to check write-over + memset(temp_buffs[i], 0, TEST_LEN); // zero pad to check write-over + ubuffs[i] = buffs[i] + (rand() & (PTR_ALIGN_CHK_B - offset)); + temp_ubuffs[i] = temp_buffs[i] + (rand() & (PTR_ALIGN_CHK_B - offset)); + } + + for (i = 0; i < k; i++) + for (j = 0; j < size; j++) + ubuffs[i][j] = rand(); + + // The matrix generated by gf_gen_cauchy1_matrix + // is always invertable. + gf_gen_cauchy1_matrix(encode_matrix, m, k); + + // Make parity vects + // Generate g_tbls from encode matrix a + ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls); + // Perform matrix dot_prod for EC encoding + // using g_tbls from encode matrix a + ec_encode_data(size, k, m - k, g_tbls, ubuffs, &ubuffs[k]); + + // Random errors + memset(src_in_err, 0, TEST_SOURCES); + gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); + + // Generate decode matrix + re = gf_gen_decode_matrix(encode_matrix, decode_matrix, invert_matrix, decode_index, + src_err_list, src_in_err, nerrs, nsrcerrs, k, m); + if (re != 0) { + printf("Fail to gf_gen_decode_matrix\n"); + goto exit; + } + // Pack recovery array as list of valid sources + // Its order must be the same as the order + // to generate matrix b in gf_gen_decode_matrix + for (i = 0; i < k; i++) { + recov[i] = ubuffs[decode_index[i]]; + } + + // Recover data + ec_init_tables(k, nerrs, decode_matrix, g_tbls); + ec_encode_data(size, k, nerrs, g_tbls, recov, &temp_ubuffs[k]); + + for (i = 0; i < nerrs; i++) { + + if (0 != memcmp(temp_ubuffs[k + i], ubuffs[src_err_list[i]], size)) { + printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs); + printf(" - erase list = "); + for (j = 0; j < nerrs; j++) + printf(" %d", src_err_list[j]); + printf(" - Index = "); + for (p = 0; p < k; p++) + printf(" %d", decode_index[p]); + printf("\nencode_matrix:\n"); + dump_u8xu8((unsigned char *) encode_matrix, m, k); + printf("inv b:\n"); + dump_u8xu8((unsigned char *) invert_matrix, k, k); + printf("\ndecode_matrix:\n"); + dump_u8xu8((unsigned char *) decode_matrix, m, k); + printf("orig data:\n"); + dump_matrix(ubuffs, m, 25); + printf("orig :"); + dump(ubuffs[src_err_list[i]], 25); + printf("recov %d:", src_err_list[i]); + dump(temp_ubuffs[k + i], 25); + re = -1; + goto exit; + } + } + + // Confirm that padding around dests is unchanged + memset(temp_buffs[0], 0, PTR_ALIGN_CHK_B); // Make reference zero buff + + for (i = 0; i < m; i++) { + + offset = ubuffs[i] - buffs[i]; + + if (memcmp(buffs[i], temp_buffs[0], offset)) { + printf("Fail rand ualign encode pad start\n"); + re = -1; + goto exit; + } + if (memcmp(buffs[i] + offset + size, temp_buffs[0], + PTR_ALIGN_CHK_B - offset)) { + printf("Fail rand ualign encode pad end\n"); + re = -1; + goto exit; + } + } + + for (i = 0; i < nerrs; i++) { + + offset = temp_ubuffs[k + i] - temp_buffs[k + i]; + if (memcmp(temp_buffs[k + i], temp_buffs[0], offset)) { + printf("Fail rand ualign decode pad start\n"); + re = -1; + goto exit; + } + if (memcmp(temp_buffs[k + i] + offset + size, temp_buffs[0], + PTR_ALIGN_CHK_B - offset)) { + printf("Fail rand ualign decode pad end\n"); + re = -1; + goto exit; + } + } #ifdef TEST_VERBOSE - putchar('.'); + putchar('.'); #endif - } - - // Test size alignment - - align = (LEN_ALIGN_CHK_B != 0) ? 13 : 16; - - for (size = TEST_LEN; size > 0; size -= align) { - while ((m = (rand() % MMAX)) < 2) ; - while ((k = (rand() % KMAX)) >= m || k < 1) ; - - if (m > MMAX || k > KMAX) - continue; - - for (i = 0; i < k; i++) - for (j = 0; j < size; j++) - buffs[i][j] = rand(); - - // The matrix generated by gf_gen_cauchy1_matrix - // is always invertable. - gf_gen_cauchy1_matrix(encode_matrix, m, k); - - // Make parity vects - // Generate g_tbls from encode matrix a - ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls); - // Perform matrix dot_prod for EC encoding - // using g_tbls from encode matrix a - ec_encode_data(size, k, m - k, g_tbls, buffs, &buffs[k]); - - // Random errors - memset(src_in_err, 0, TEST_SOURCES); - gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); - // Generate decode matrix - re = gf_gen_decode_matrix(encode_matrix, decode_matrix, - invert_matrix, decode_index, src_err_list, - src_in_err, nerrs, nsrcerrs, k, m); - if (re != 0) { - printf("Fail to gf_gen_decode_matrix\n"); - goto exit; - } - // Pack recovery array as list of valid sources - // Its order must be the same as the order - // to generate matrix b in gf_gen_decode_matrix - for (i = 0; i < k; i++) { - recov[i] = buffs[decode_index[i]]; - } - - // Recover data - ec_init_tables(k, nerrs, decode_matrix, g_tbls); - ec_encode_data(size, k, nerrs, g_tbls, recov, &temp_buffs[k]); - - for (i = 0; i < nerrs; i++) { - - if (0 != memcmp(temp_buffs[k + i], buffs[src_err_list[i]], size)) { - printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs); - printf(" - erase list = "); - for (j = 0; j < nerrs; j++) - printf(" %d", src_err_list[j]); - printf(" - Index = "); - for (p = 0; p < k; p++) - printf(" %d", decode_index[p]); - printf("\nencode_matrix:\n"); - dump_u8xu8((unsigned char *)encode_matrix, m, k); - printf("inv b:\n"); - dump_u8xu8((unsigned char *)invert_matrix, k, k); - printf("\ndecode_matrix:\n"); - dump_u8xu8((unsigned char *)decode_matrix, m, k); - printf("orig data:\n"); - dump_matrix(buffs, m, 25); - printf("orig :"); - dump(buffs[src_err_list[i]], 25); - printf("recov %d:", src_err_list[i]); - dump(temp_buffs[k + i], 25); - re = -1; - goto exit; - } - } - } - - printf("done EC tests: Pass\n"); - re = 0; - - exit: - for (i = 0; i < TEST_SOURCES; i++) { - if (buffs[i]) - aligned_free(buffs[i]); - if (temp_buffs[i]) - aligned_free(temp_buffs[i]); - } - free(encode_matrix); - free(decode_matrix); - free(invert_matrix); - free(g_tbls); - - return re; + } + + // Test size alignment + + align = (LEN_ALIGN_CHK_B != 0) ? 13 : 16; + + for (size = TEST_LEN; size > 0; size -= align) { + while ((m = (rand() % MMAX)) < 2) + ; + while ((k = (rand() % KMAX)) >= m || k < 1) + ; + + if (m > MMAX || k > KMAX) + continue; + + for (i = 0; i < k; i++) + for (j = 0; j < size; j++) + buffs[i][j] = rand(); + + // The matrix generated by gf_gen_cauchy1_matrix + // is always invertable. + gf_gen_cauchy1_matrix(encode_matrix, m, k); + + // Make parity vects + // Generate g_tbls from encode matrix a + ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls); + // Perform matrix dot_prod for EC encoding + // using g_tbls from encode matrix a + ec_encode_data(size, k, m - k, g_tbls, buffs, &buffs[k]); + + // Random errors + memset(src_in_err, 0, TEST_SOURCES); + gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); + // Generate decode matrix + re = gf_gen_decode_matrix(encode_matrix, decode_matrix, invert_matrix, decode_index, + src_err_list, src_in_err, nerrs, nsrcerrs, k, m); + if (re != 0) { + printf("Fail to gf_gen_decode_matrix\n"); + goto exit; + } + // Pack recovery array as list of valid sources + // Its order must be the same as the order + // to generate matrix b in gf_gen_decode_matrix + for (i = 0; i < k; i++) { + recov[i] = buffs[decode_index[i]]; + } + + // Recover data + ec_init_tables(k, nerrs, decode_matrix, g_tbls); + ec_encode_data(size, k, nerrs, g_tbls, recov, &temp_buffs[k]); + + for (i = 0; i < nerrs; i++) { + + if (0 != memcmp(temp_buffs[k + i], buffs[src_err_list[i]], size)) { + printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs); + printf(" - erase list = "); + for (j = 0; j < nerrs; j++) + printf(" %d", src_err_list[j]); + printf(" - Index = "); + for (p = 0; p < k; p++) + printf(" %d", decode_index[p]); + printf("\nencode_matrix:\n"); + dump_u8xu8((unsigned char *) encode_matrix, m, k); + printf("inv b:\n"); + dump_u8xu8((unsigned char *) invert_matrix, k, k); + printf("\ndecode_matrix:\n"); + dump_u8xu8((unsigned char *) decode_matrix, m, k); + printf("orig data:\n"); + dump_matrix(buffs, m, 25); + printf("orig :"); + dump(buffs[src_err_list[i]], 25); + printf("recov %d:", src_err_list[i]); + dump(temp_buffs[k + i], 25); + re = -1; + goto exit; + } + } + } + + printf("done EC tests: Pass\n"); + re = 0; + +exit: + for (i = 0; i < TEST_SOURCES; i++) { + if (buffs[i]) + aligned_free(buffs[i]); + if (temp_buffs[i]) + aligned_free(temp_buffs[i]); + } + free(encode_matrix); + free(decode_matrix); + free(invert_matrix); + free(g_tbls); + + return re; } diff --git a/erasure_code/erasure_code_update_perf.c b/erasure_code/erasure_code_update_perf.c index e74a217c..91aad8bc 100644 --- a/erasure_code/erasure_code_update_perf.c +++ b/erasure_code/erasure_code_update_perf.c @@ -29,43 +29,43 @@ #include #include -#include // for memset, memcmp +#include // for memset, memcmp #include "erasure_code.h" #include "test.h" -//By default, test multibinary version +// By default, test multibinary version #ifndef FUNCTION_UNDER_TEST -# define FUNCTION_UNDER_TEST ec_encode_data_update -# define REF_FUNCTION ec_encode_data +#define FUNCTION_UNDER_TEST ec_encode_data_update +#define REF_FUNCTION ec_encode_data #endif -//By default, test EC(8+4) +// By default, test EC(8+4) #if (!defined(VECT)) -# define VECT 4 +#define VECT 4 #endif -#define str(s) #s +#define str(s) #s #define xstr(s) str(s) #ifndef GT_L3_CACHE -# define GT_L3_CACHE 32*1024*1024 /* some number > last level cache */ +#define GT_L3_CACHE 32 * 1024 * 1024 /* some number > last level cache */ #endif #if !defined(COLD_TEST) && !defined(TEST_CUSTOM) // Cached test, loop many times over small dataset -# define TEST_SOURCES 32 -# define TEST_LEN(m) ((128*1024 / m) & ~(64-1)) -# define TEST_TYPE_STR "_warm" -#elif defined (COLD_TEST) +#define TEST_SOURCES 32 +#define TEST_LEN(m) ((128 * 1024 / m) & ~(64 - 1)) +#define TEST_TYPE_STR "_warm" +#elif defined(COLD_TEST) // Uncached test. Pull from large mem base. -# define TEST_SOURCES 32 -# define TEST_LEN(m) ((GT_L3_CACHE / m) & ~(64-1)) -# define TEST_TYPE_STR "_cold" -#elif defined (TEST_CUSTOM) -# define TEST_TYPE_STR "_cus" +#define TEST_SOURCES 32 +#define TEST_LEN(m) ((GT_L3_CACHE / m) & ~(64 - 1)) +#define TEST_TYPE_STR "_cold" +#elif defined(TEST_CUSTOM) +#define TEST_TYPE_STR "_cus" #endif #ifndef TEST_SEED -# define TEST_SEED 0x1234 +#define TEST_SEED 0x1234 #endif #define MMAX TEST_SOURCES @@ -73,308 +73,316 @@ typedef unsigned char u8; -void usage(const char *app_name) +void +usage(const char *app_name) { - fprintf(stderr, - "Usage: %s [options]\n" - " -h Help\n" - " -k Number of source buffers\n" - " -p Number of parity buffers\n" - " -e Number of simulated buffers with errors (cannot be higher than p or k)\n", - app_name); + fprintf(stderr, + "Usage: %s [options]\n" + " -h Help\n" + " -k Number of source buffers\n" + " -p Number of parity buffers\n" + " -e Number of simulated buffers with errors (cannot be higher than p or " + "k)\n", + app_name); } -void dump(unsigned char *buf, int len) +void +dump(unsigned char *buf, int len) { - int i; - for (i = 0; i < len;) { - printf(" %2x", 0xff & buf[i++]); - if (i % 32 == 0) - printf("\n"); - } - printf("\n"); + int i; + for (i = 0; i < len;) { + printf(" %2x", 0xff & buf[i++]); + if (i % 32 == 0) + printf("\n"); + } + printf("\n"); } -void encode_update_test_ref(int m, int k, u8 * g_tbls, u8 ** buffs, u8 * a) +void +encode_update_test_ref(int m, int k, u8 *g_tbls, u8 **buffs, u8 *a) { - ec_init_tables(k, m - k, &a[k * k], g_tbls); - REF_FUNCTION(TEST_LEN(m), k, m - k, g_tbls, buffs, &buffs[k]); + ec_init_tables(k, m - k, &a[k * k], g_tbls); + REF_FUNCTION(TEST_LEN(m), k, m - k, g_tbls, buffs, &buffs[k]); } -void encode_update_test(int m, int k, u8 * g_tbls, u8 ** perf_update_buffs, u8 * a) +void +encode_update_test(int m, int k, u8 *g_tbls, u8 **perf_update_buffs, u8 *a) { - int i; - - // Make parity vects - ec_init_tables(k, m - k, &a[k * k], g_tbls); - for (i = 0; i < k; i++) { - FUNCTION_UNDER_TEST(TEST_LEN(m), k, m - k, i, g_tbls, - perf_update_buffs[i], &perf_update_buffs[k]); - } + int i; + + // Make parity vects + ec_init_tables(k, m - k, &a[k * k], g_tbls); + for (i = 0; i < k; i++) { + FUNCTION_UNDER_TEST(TEST_LEN(m), k, m - k, i, g_tbls, perf_update_buffs[i], + &perf_update_buffs[k]); + } } -int decode_test(int m, int k, u8 ** update_buffs, u8 ** recov, u8 * a, u8 * src_in_err, - u8 * src_err_list, int nerrs, u8 * g_tbls, u8 ** perf_update_buffs) +int +decode_test(int m, int k, u8 **update_buffs, u8 **recov, u8 *a, u8 *src_in_err, u8 *src_err_list, + int nerrs, u8 *g_tbls, u8 **perf_update_buffs) { - int i, j, r; - u8 b[MMAX * KMAX], c[MMAX * KMAX], d[MMAX * KMAX]; - // Construct b by removing error rows - for (i = 0, r = 0; i < k; i++, r++) { - while (src_in_err[r]) - r++; - recov[i] = update_buffs[r]; - for (j = 0; j < k; j++) - b[k * i + j] = a[k * r + j]; - } - - if (gf_invert_matrix(b, d, k) < 0) { - printf("BAD MATRIX\n"); - return -1; - } - - for (i = 0; i < nerrs; i++) - for (j = 0; j < k; j++) - c[k * i + j] = d[k * src_err_list[i] + j]; - - // Recover data - ec_init_tables(k, nerrs, c, g_tbls); - for (i = 0; i < k; i++) { - FUNCTION_UNDER_TEST(TEST_LEN(m), k, nerrs, i, g_tbls, recov[i], - perf_update_buffs); - } - return 0; + int i, j, r; + u8 b[MMAX * KMAX], c[MMAX * KMAX], d[MMAX * KMAX]; + // Construct b by removing error rows + for (i = 0, r = 0; i < k; i++, r++) { + while (src_in_err[r]) + r++; + recov[i] = update_buffs[r]; + for (j = 0; j < k; j++) + b[k * i + j] = a[k * r + j]; + } + + if (gf_invert_matrix(b, d, k) < 0) { + printf("BAD MATRIX\n"); + return -1; + } + + for (i = 0; i < nerrs; i++) + for (j = 0; j < k; j++) + c[k * i + j] = d[k * src_err_list[i] + j]; + + // Recover data + ec_init_tables(k, nerrs, c, g_tbls); + for (i = 0; i < k; i++) { + FUNCTION_UNDER_TEST(TEST_LEN(m), k, nerrs, i, g_tbls, recov[i], perf_update_buffs); + } + return 0; } -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - int i, j, check, m, k, p, nerrs, ret = -1; - void *buf; - u8 *temp_buffs[TEST_SOURCES] = { NULL }; - u8 *buffs[TEST_SOURCES] = { NULL }; - u8 *update_buffs[TEST_SOURCES] = { NULL }; - u8 *perf_update_buffs[TEST_SOURCES] = { NULL }; - u8 a[MMAX * KMAX]; - u8 g_tbls[KMAX * TEST_SOURCES * 32], src_in_err[TEST_SOURCES]; - u8 src_err_list[TEST_SOURCES], *recov[TEST_SOURCES]; - struct perf start; - - /* Set default parameters */ - k = 10; - p = VECT; - nerrs = VECT; - - /* Parse arguments */ - for (i = 1; i < argc; i++) { - if (strcmp(argv[i], "-k") == 0) { - k = atoi(argv[++i]); - } else if (strcmp(argv[i], "-p") == 0) { - p = atoi(argv[++i]); - } else if (strcmp(argv[i], "-e") == 0) { - nerrs = atoi(argv[++i]); - } else if (strcmp(argv[i], "-h") == 0) { - usage(argv[0]); - return 0; - } else { - usage(argv[0]); - return -1; - } - } - - if (nerrs > k) { - printf - ("Number of errors (%d) cannot be higher than number of data buffers (%d)\n", - nerrs, k); - return -1; - } - - if (k <= 0) { - printf("Number of source buffers (%d) must be > 0\n", k); - return -1; - } - - if (p <= 0) { - printf("Number of parity buffers (%d) must be > 0\n", p); - return -1; - } - - if (nerrs > p) { - printf - ("Number of errors (%d) cannot be higher than number of parity buffers (%d)\n", - nerrs, p); - return -1; - } - - if (nerrs <= 0) { - printf("Number of errors (%d) must be > 0\n", nerrs); - return -1; - } - - m = k + p; - - if (m > MMAX) { - printf("Number of total buffers (data and parity) cannot be higher than %d\n", - MMAX); - return -1; - } - - u8 *err_list = malloc((size_t)nerrs); - if (err_list == NULL) { - printf("Error allocating list of array of error indices\n"); - return -1; - } - - srand(TEST_SEED); - - for (i = 0; i < nerrs;) { - u8 next_err = rand() % k; - for (j = 0; j < i; j++) - if (next_err == err_list[j]) - break; - if (j != i) - continue; - err_list[i++] = next_err; - } - - printf("Testing with %u data buffers and %u parity buffers (num errors = %u, in [ ", k, - p, nerrs); - for (i = 0; i < nerrs; i++) - printf("%d ", err_list[i]); - - printf("])\n"); - - printf(xstr(FUNCTION_UNDER_TEST) "_perf: %dx%d %d\n", m, TEST_LEN(m), nerrs); - - memcpy(src_err_list, err_list, nerrs); - memset(src_in_err, 0, TEST_SOURCES); - for (i = 0; i < nerrs; i++) - src_in_err[src_err_list[i]] = 1; - - // Allocate the arrays - for (i = 0; i < m; i++) { - if (posix_memalign(&buf, 64, TEST_LEN(m))) { - printf("Error allocating buffers\n"); - goto exit; - } - buffs[i] = buf; - } - - for (i = 0; i < (m - k); i++) { - if (posix_memalign(&buf, 64, TEST_LEN(m))) { - printf("Error allocating buffers\n"); - goto exit; - } - temp_buffs[i] = buf; - memset(temp_buffs[i], 0, TEST_LEN(m)); // initialize the destination buffer to be zero for update function - } - - for (i = 0; i < TEST_SOURCES; i++) { - if (posix_memalign(&buf, 64, TEST_LEN(m))) { - printf("Error allocating buffers\n"); - goto exit; - } - update_buffs[i] = buf; - memset(update_buffs[i], 0, TEST_LEN(m)); // initialize the destination buffer to be zero for update function - } - for (i = 0; i < TEST_SOURCES; i++) { - if (posix_memalign(&buf, 64, TEST_LEN(m))) { - printf("Error allocating buffers\n"); - goto exit; - } - perf_update_buffs[i] = buf; - memset(perf_update_buffs[i], 0, TEST_LEN(m)); // initialize the destination buffer to be zero for update function - } - - // Make random data - for (i = 0; i < k; i++) - for (j = 0; j < TEST_LEN(m); j++) { - buffs[i][j] = rand(); - update_buffs[i][j] = buffs[i][j]; - } - - gf_gen_rs_matrix(a, m, k); - - encode_update_test_ref(m, k, g_tbls, buffs, a); - encode_update_test(m, k, g_tbls, update_buffs, a); - for (i = 0; i < m - k; i++) { - if (0 != memcmp(update_buffs[k + i], buffs[k + i], TEST_LEN(m))) { - printf("\nupdate_buffs%d :", i); - dump(update_buffs[k + i], 25); - printf("buffs%d :", i); - dump(buffs[k + i], 25); - goto exit; - } - } + int i, j, check, m, k, p, nerrs, ret = -1; + void *buf; + u8 *temp_buffs[TEST_SOURCES] = { NULL }; + u8 *buffs[TEST_SOURCES] = { NULL }; + u8 *update_buffs[TEST_SOURCES] = { NULL }; + u8 *perf_update_buffs[TEST_SOURCES] = { NULL }; + u8 a[MMAX * KMAX]; + u8 g_tbls[KMAX * TEST_SOURCES * 32], src_in_err[TEST_SOURCES]; + u8 src_err_list[TEST_SOURCES], *recov[TEST_SOURCES]; + struct perf start; + + /* Set default parameters */ + k = 10; + p = VECT; + nerrs = VECT; + + /* Parse arguments */ + for (i = 1; i < argc; i++) { + if (strcmp(argv[i], "-k") == 0) { + k = atoi(argv[++i]); + } else if (strcmp(argv[i], "-p") == 0) { + p = atoi(argv[++i]); + } else if (strcmp(argv[i], "-e") == 0) { + nerrs = atoi(argv[++i]); + } else if (strcmp(argv[i], "-h") == 0) { + usage(argv[0]); + return 0; + } else { + usage(argv[0]); + return -1; + } + } + + if (nerrs > k) { + printf("Number of errors (%d) cannot be higher than number of data buffers (%d)\n", + nerrs, k); + return -1; + } + + if (k <= 0) { + printf("Number of source buffers (%d) must be > 0\n", k); + return -1; + } + + if (p <= 0) { + printf("Number of parity buffers (%d) must be > 0\n", p); + return -1; + } + + if (nerrs > p) { + printf("Number of errors (%d) cannot be higher than number of parity buffers " + "(%d)\n", + nerrs, p); + return -1; + } + + if (nerrs <= 0) { + printf("Number of errors (%d) must be > 0\n", nerrs); + return -1; + } + + m = k + p; + + if (m > MMAX) { + printf("Number of total buffers (data and parity) cannot be higher than %d\n", + MMAX); + return -1; + } + + u8 *err_list = malloc((size_t) nerrs); + if (err_list == NULL) { + printf("Error allocating list of array of error indices\n"); + return -1; + } + + srand(TEST_SEED); + + for (i = 0; i < nerrs;) { + u8 next_err = rand() % k; + for (j = 0; j < i; j++) + if (next_err == err_list[j]) + break; + if (j != i) + continue; + err_list[i++] = next_err; + } + + printf("Testing with %u data buffers and %u parity buffers (num errors = %u, in [ ", k, p, + nerrs); + for (i = 0; i < nerrs; i++) + printf("%d ", err_list[i]); + + printf("])\n"); + + printf(xstr(FUNCTION_UNDER_TEST) "_perf: %dx%d %d\n", m, TEST_LEN(m), nerrs); + + memcpy(src_err_list, err_list, nerrs); + memset(src_in_err, 0, TEST_SOURCES); + for (i = 0; i < nerrs; i++) + src_in_err[src_err_list[i]] = 1; + + // Allocate the arrays + for (i = 0; i < m; i++) { + if (posix_memalign(&buf, 64, TEST_LEN(m))) { + printf("Error allocating buffers\n"); + goto exit; + } + buffs[i] = buf; + } + + for (i = 0; i < (m - k); i++) { + if (posix_memalign(&buf, 64, TEST_LEN(m))) { + printf("Error allocating buffers\n"); + goto exit; + } + temp_buffs[i] = buf; + memset(temp_buffs[i], 0, TEST_LEN(m)); // initialize the destination buffer to be + // zero for update function + } + + for (i = 0; i < TEST_SOURCES; i++) { + if (posix_memalign(&buf, 64, TEST_LEN(m))) { + printf("Error allocating buffers\n"); + goto exit; + } + update_buffs[i] = buf; + memset(update_buffs[i], 0, TEST_LEN(m)); // initialize the destination buffer to be + // zero for update function + } + for (i = 0; i < TEST_SOURCES; i++) { + if (posix_memalign(&buf, 64, TEST_LEN(m))) { + printf("Error allocating buffers\n"); + goto exit; + } + perf_update_buffs[i] = buf; + memset(perf_update_buffs[i], 0, TEST_LEN(m)); // initialize the destination buffer + // to be zero for update function + } + + // Make random data + for (i = 0; i < k; i++) + for (j = 0; j < TEST_LEN(m); j++) { + buffs[i][j] = rand(); + update_buffs[i][j] = buffs[i][j]; + } + + gf_gen_rs_matrix(a, m, k); + + encode_update_test_ref(m, k, g_tbls, buffs, a); + encode_update_test(m, k, g_tbls, update_buffs, a); + for (i = 0; i < m - k; i++) { + if (0 != memcmp(update_buffs[k + i], buffs[k + i], TEST_LEN(m))) { + printf("\nupdate_buffs%d :", i); + dump(update_buffs[k + i], 25); + printf("buffs%d :", i); + dump(buffs[k + i], 25); + goto exit; + } + } #ifdef DO_REF_PERF - // Start encode test - BENCHMARK(&start, BENCHMARK_TIME, encode_update_test_ref(m, k, g_tbls, buffs, a)); - printf(xstr(REF_FUNCTION) TEST_TYPE_STR ": "); - perf_print(start, (long long)(TEST_LEN(m)) * (m)); + // Start encode test + BENCHMARK(&start, BENCHMARK_TIME, encode_update_test_ref(m, k, g_tbls, buffs, a)); + printf(xstr(REF_FUNCTION) TEST_TYPE_STR ": "); + perf_print(start, (long long) (TEST_LEN(m)) * (m)); #endif - // Start encode test - BENCHMARK(&start, BENCHMARK_TIME, - encode_update_test(m, k, g_tbls, perf_update_buffs, a)); - printf(xstr(FUNCTION_UNDER_TEST) TEST_TYPE_STR ": "); - perf_print(start, (long long)(TEST_LEN(m)) * (m)); - - // Start encode test - BENCHMARK(&start, BENCHMARK_TIME, - // Make parity vects - ec_init_tables(k, m - k, &a[k * k], g_tbls); - FUNCTION_UNDER_TEST(TEST_LEN(m), k, m - k, 0, g_tbls, perf_update_buffs[0], - &perf_update_buffs[k])); - printf(xstr(FUNCTION_UNDER_TEST) "_single_src" TEST_TYPE_STR ": "); - perf_print(start, (long long)(TEST_LEN(m)) * (m - k + 1)); - - // Start encode test - BENCHMARK(&start, BENCHMARK_TIME, - // Make parity vects - FUNCTION_UNDER_TEST(TEST_LEN(m), k, m - k, 0, g_tbls, perf_update_buffs[0], - &perf_update_buffs[k])); - printf(xstr(FUNCTION_UNDER_TEST) "_single_src_simple" TEST_TYPE_STR ": "); - perf_print(start, (long long)(TEST_LEN(m)) * (m - k + 1)); - - for (i = k; i < m; i++) { - memset(update_buffs[i], 0, TEST_LEN(m)); // initialize the destination buffer to be zero for update function - } - for (i = 0; i < k; i++) { - FUNCTION_UNDER_TEST(TEST_LEN(m), k, m - k, i, g_tbls, update_buffs[i], - &update_buffs[k]); - } - - decode_test(m, k, update_buffs, recov, a, src_in_err, src_err_list, - nerrs, g_tbls, temp_buffs); - BENCHMARK(&start, BENCHMARK_TIME, check = - decode_test(m, k, update_buffs, recov, a, src_in_err, src_err_list, - nerrs, g_tbls, perf_update_buffs)); - if (check) { - printf("BAD_MATRIX\n"); - ret = check; - goto exit; - } - - for (i = 0; i < nerrs; i++) { - if (0 != memcmp(temp_buffs[i], update_buffs[src_err_list[i]], TEST_LEN(m))) { - printf("Fail error recovery (%d, %d, %d) - \n", m, k, nerrs); - goto exit; - } - } - - printf(xstr(FUNCTION_UNDER_TEST) "_decode" TEST_TYPE_STR ": "); - perf_print(start, (long long)(TEST_LEN(m)) * (k + nerrs)); - - printf("done all: Pass\n"); - - ret = 0; - - exit: - free(err_list); - for (i = 0; i < TEST_SOURCES; i++) { - free(buffs[i]); - free(temp_buffs[i]); - free(update_buffs[i]); - free(perf_update_buffs[i]); - } - return ret; + // Start encode test + BENCHMARK(&start, BENCHMARK_TIME, encode_update_test(m, k, g_tbls, perf_update_buffs, a)); + printf(xstr(FUNCTION_UNDER_TEST) TEST_TYPE_STR ": "); + perf_print(start, (long long) (TEST_LEN(m)) * (m)); + + // Start encode test + BENCHMARK(&start, BENCHMARK_TIME, + // Make parity vects + ec_init_tables(k, m - k, &a[k * k], g_tbls); + FUNCTION_UNDER_TEST(TEST_LEN(m), k, m - k, 0, g_tbls, perf_update_buffs[0], + &perf_update_buffs[k])); + printf(xstr(FUNCTION_UNDER_TEST) "_single_src" TEST_TYPE_STR ": "); + perf_print(start, (long long) (TEST_LEN(m)) * (m - k + 1)); + + // Start encode test + BENCHMARK(&start, BENCHMARK_TIME, + // Make parity vects + FUNCTION_UNDER_TEST(TEST_LEN(m), k, m - k, 0, g_tbls, perf_update_buffs[0], + &perf_update_buffs[k])); + printf(xstr(FUNCTION_UNDER_TEST) "_single_src_simple" TEST_TYPE_STR ": "); + perf_print(start, (long long) (TEST_LEN(m)) * (m - k + 1)); + + for (i = k; i < m; i++) { + memset(update_buffs[i], 0, TEST_LEN(m)); // initialize the destination buffer to be + // zero for update function + } + for (i = 0; i < k; i++) { + FUNCTION_UNDER_TEST(TEST_LEN(m), k, m - k, i, g_tbls, update_buffs[i], + &update_buffs[k]); + } + + decode_test(m, k, update_buffs, recov, a, src_in_err, src_err_list, nerrs, g_tbls, + temp_buffs); + BENCHMARK(&start, BENCHMARK_TIME, + check = decode_test(m, k, update_buffs, recov, a, src_in_err, src_err_list, nerrs, + g_tbls, perf_update_buffs)); + if (check) { + printf("BAD_MATRIX\n"); + ret = check; + goto exit; + } + + for (i = 0; i < nerrs; i++) { + if (0 != memcmp(temp_buffs[i], update_buffs[src_err_list[i]], TEST_LEN(m))) { + printf("Fail error recovery (%d, %d, %d) - \n", m, k, nerrs); + goto exit; + } + } + + printf(xstr(FUNCTION_UNDER_TEST) "_decode" TEST_TYPE_STR ": "); + perf_print(start, (long long) (TEST_LEN(m)) * (k + nerrs)); + + printf("done all: Pass\n"); + + ret = 0; + +exit: + free(err_list); + for (i = 0; i < TEST_SOURCES; i++) { + free(buffs[i]); + free(temp_buffs[i]); + free(update_buffs[i]); + free(perf_update_buffs[i]); + } + return ret; } diff --git a/erasure_code/erasure_code_update_test.c b/erasure_code/erasure_code_update_test.c index 687215ba..13be40b8 100644 --- a/erasure_code/erasure_code_update_test.c +++ b/erasure_code/erasure_code_update_test.c @@ -29,29 +29,29 @@ #include #include -#include // for memset, memcmp +#include // for memset, memcmp #include #include "erasure_code.h" #include "test.h" #ifndef ALIGN_SIZE -# define ALIGN_SIZE 16 +#define ALIGN_SIZE 16 #endif -//By default, test multibinary version +// By default, test multibinary version #ifndef FUNCTION_UNDER_TEST -# define FUNCTION_UNDER_TEST ec_encode_data_update -# define REF_FUNCTION ec_encode_data +#define FUNCTION_UNDER_TEST ec_encode_data_update +#define REF_FUNCTION ec_encode_data #endif -#define TEST_LEN 8192 -#define TEST_SIZE (TEST_LEN/2) +#define TEST_LEN 8192 +#define TEST_SIZE (TEST_LEN / 2) #ifndef TEST_SOURCES -# define TEST_SOURCES 127 +#define TEST_SOURCES 127 #endif #ifndef RANDOMS -# define RANDOMS 200 +#define RANDOMS 200 #endif #define MMAX TEST_SOURCES @@ -61,948 +61,943 @@ #ifdef EC_ALIGNED_ADDR // Define power of 2 range to check ptr, len alignment -# define PTR_ALIGN_CHK_B 0 -# define LEN_ALIGN_CHK_B 0 // 0 for aligned only +#define PTR_ALIGN_CHK_B 0 +#define LEN_ALIGN_CHK_B 0 // 0 for aligned only #else // Define power of 2 range to check ptr, len alignment -# define PTR_ALIGN_CHK_B ALIGN_SIZE -# define LEN_ALIGN_CHK_B ALIGN_SIZE // 0 for aligned only +#define PTR_ALIGN_CHK_B ALIGN_SIZE +#define LEN_ALIGN_CHK_B ALIGN_SIZE // 0 for aligned only #endif #ifndef TEST_SEED #define TEST_SEED 11 #endif -#define str(s) #s +#define str(s) #s #define xstr(s) str(s) typedef unsigned char u8; -void dump(unsigned char *buf, int len) +void +dump(unsigned char *buf, int len) { - int i; - for (i = 0; i < len;) { - printf(" %2x", 0xff & buf[i++]); - if (i % 32 == 0) - printf("\n"); - } - printf("\n"); + int i; + for (i = 0; i < len;) { + printf(" %2x", 0xff & buf[i++]); + if (i % 32 == 0) + printf("\n"); + } + printf("\n"); } -void dump_matrix(unsigned char **s, int k, int m) +void +dump_matrix(unsigned char **s, int k, int m) { - int i, j; - for (i = 0; i < k; i++) { - for (j = 0; j < m; j++) { - printf(" %2x", s[i][j]); - } - printf("\n"); - } - printf("\n"); + int i, j; + for (i = 0; i < k; i++) { + for (j = 0; j < m; j++) { + printf(" %2x", s[i][j]); + } + printf("\n"); + } + printf("\n"); } -void dump_u8xu8(unsigned char *s, int k, int m) +void +dump_u8xu8(unsigned char *s, int k, int m) { - int i, j; - for (i = 0; i < k; i++) { - for (j = 0; j < m; j++) { - printf(" %2x", 0xff & s[j + (i * m)]); - } - printf("\n"); - } - printf("\n"); + int i, j; + for (i = 0; i < k; i++) { + for (j = 0; j < m; j++) { + printf(" %2x", 0xff & s[j + (i * m)]); + } + printf("\n"); + } + printf("\n"); } // Generate Random errors -static void gen_err_list(unsigned char *src_err_list, - unsigned char *src_in_err, int *pnerrs, int *pnsrcerrs, int k, int m) +static void +gen_err_list(unsigned char *src_err_list, unsigned char *src_in_err, int *pnerrs, int *pnsrcerrs, + int k, int m) { - int i, err; - int nerrs = 0, nsrcerrs = 0; - - for (i = 0, nerrs = 0, nsrcerrs = 0; i < m && nerrs < m - k; i++) { - err = 1 & rand(); - src_in_err[i] = err; - if (err) { - src_err_list[nerrs++] = i; - if (i < k) { - nsrcerrs++; - } - } - } - if (nerrs == 0) { // should have at least one error - while ((err = (rand() % KMAX)) >= m) ; - src_err_list[nerrs++] = err; - src_in_err[err] = 1; - if (err < k) - nsrcerrs = 1; - } - *pnerrs = nerrs; - *pnsrcerrs = nsrcerrs; - return; + int i, err; + int nerrs = 0, nsrcerrs = 0; + + for (i = 0, nerrs = 0, nsrcerrs = 0; i < m && nerrs < m - k; i++) { + err = 1 & rand(); + src_in_err[i] = err; + if (err) { + src_err_list[nerrs++] = i; + if (i < k) { + nsrcerrs++; + } + } + } + if (nerrs == 0) { // should have at least one error + while ((err = (rand() % KMAX)) >= m) + ; + src_err_list[nerrs++] = err; + src_in_err[err] = 1; + if (err < k) + nsrcerrs = 1; + } + *pnerrs = nerrs; + *pnsrcerrs = nsrcerrs; + return; } #define NO_INVERT_MATRIX -2 // Generate decode matrix from encode matrix -static int gf_gen_decode_matrix(unsigned char *encode_matrix, - unsigned char *decode_matrix, - unsigned char *invert_matrix, - unsigned int *decode_index, - unsigned char *src_err_list, - unsigned char *src_in_err, - int nerrs, int nsrcerrs, int k, int m) +static int +gf_gen_decode_matrix(unsigned char *encode_matrix, unsigned char *decode_matrix, + unsigned char *invert_matrix, unsigned int *decode_index, + unsigned char *src_err_list, unsigned char *src_in_err, int nerrs, + int nsrcerrs, int k, int m) { - int i, j, p; - int r; - unsigned char *backup, *b, s; - int incr = 0; - - b = malloc(MMAX * KMAX); - backup = malloc(MMAX * KMAX); - - if (b == NULL || backup == NULL) { - printf("Test failure! Error with malloc\n"); - free(b); - free(backup); - return -1; - } - // Construct matrix b by removing error rows - for (i = 0, r = 0; i < k; i++, r++) { - while (src_in_err[r]) - r++; - for (j = 0; j < k; j++) { - b[k * i + j] = encode_matrix[k * r + j]; - backup[k * i + j] = encode_matrix[k * r + j]; - } - decode_index[i] = r; - } - incr = 0; - while (gf_invert_matrix(b, invert_matrix, k) < 0) { - if (nerrs == (m - k)) { - free(b); - free(backup); - printf("BAD MATRIX\n"); - return NO_INVERT_MATRIX; - } - incr++; - memcpy(b, backup, MMAX * KMAX); - for (i = nsrcerrs; i < nerrs - nsrcerrs; i++) { - if (src_err_list[i] == (decode_index[k - 1] + incr)) { - // skip the erased parity line - incr++; - continue; - } - } - if (decode_index[k - 1] + incr >= m) { - free(b); - free(backup); - printf("BAD MATRIX\n"); - return NO_INVERT_MATRIX; - } - decode_index[k - 1] += incr; - for (j = 0; j < k; j++) - b[k * (k - 1) + j] = encode_matrix[k * decode_index[k - 1] + j]; - - }; - - for (i = 0; i < nsrcerrs; i++) { - for (j = 0; j < k; j++) { - decode_matrix[k * i + j] = invert_matrix[k * src_err_list[i] + j]; - } - } - /* src_err_list from encode_matrix * invert of b for parity decoding */ - for (p = nsrcerrs; p < nerrs; p++) { - for (i = 0; i < k; i++) { - s = 0; - for (j = 0; j < k; j++) - s ^= gf_mul(invert_matrix[j * k + i], - encode_matrix[k * src_err_list[p] + j]); - - decode_matrix[k * p + i] = s; - } - } - free(b); - free(backup); - return 0; + int i, j, p; + int r; + unsigned char *backup, *b, s; + int incr = 0; + + b = malloc(MMAX * KMAX); + backup = malloc(MMAX * KMAX); + + if (b == NULL || backup == NULL) { + printf("Test failure! Error with malloc\n"); + free(b); + free(backup); + return -1; + } + // Construct matrix b by removing error rows + for (i = 0, r = 0; i < k; i++, r++) { + while (src_in_err[r]) + r++; + for (j = 0; j < k; j++) { + b[k * i + j] = encode_matrix[k * r + j]; + backup[k * i + j] = encode_matrix[k * r + j]; + } + decode_index[i] = r; + } + incr = 0; + while (gf_invert_matrix(b, invert_matrix, k) < 0) { + if (nerrs == (m - k)) { + free(b); + free(backup); + printf("BAD MATRIX\n"); + return NO_INVERT_MATRIX; + } + incr++; + memcpy(b, backup, MMAX * KMAX); + for (i = nsrcerrs; i < nerrs - nsrcerrs; i++) { + if (src_err_list[i] == (decode_index[k - 1] + incr)) { + // skip the erased parity line + incr++; + continue; + } + } + if (decode_index[k - 1] + incr >= m) { + free(b); + free(backup); + printf("BAD MATRIX\n"); + return NO_INVERT_MATRIX; + } + decode_index[k - 1] += incr; + for (j = 0; j < k; j++) + b[k * (k - 1) + j] = encode_matrix[k * decode_index[k - 1] + j]; + }; + + for (i = 0; i < nsrcerrs; i++) { + for (j = 0; j < k; j++) { + decode_matrix[k * i + j] = invert_matrix[k * src_err_list[i] + j]; + } + } + /* src_err_list from encode_matrix * invert of b for parity decoding */ + for (p = nsrcerrs; p < nerrs; p++) { + for (i = 0; i < k; i++) { + s = 0; + for (j = 0; j < k; j++) + s ^= gf_mul(invert_matrix[j * k + i], + encode_matrix[k * src_err_list[p] + j]); + + decode_matrix[k * p + i] = s; + } + } + free(b); + free(backup); + return 0; } -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - int re = -1; - int i, j, p, rtest, m, k; - int nerrs, nsrcerrs; - void *buf; - unsigned int decode_index[MMAX]; - unsigned char *temp_buffs[TEST_SOURCES] = { NULL }, *buffs[TEST_SOURCES] = { NULL }; - unsigned char *update_buffs[TEST_SOURCES] = { NULL }; - unsigned char *encode_matrix = NULL, *decode_matrix = NULL, *invert_matrix = - NULL, *g_tbls = NULL; - unsigned char src_in_err[TEST_SOURCES], src_err_list[TEST_SOURCES]; - unsigned char *recov[TEST_SOURCES]; - - int rows, align, size; - unsigned char *efence_buffs[TEST_SOURCES]; - unsigned char *efence_update_buffs[TEST_SOURCES]; - unsigned int offset; - u8 *ubuffs[TEST_SOURCES]; - u8 *update_ubuffs[TEST_SOURCES]; - u8 *temp_ubuffs[TEST_SOURCES]; - - printf("test " xstr(FUNCTION_UNDER_TEST) ": %dx%d ", TEST_SOURCES, TEST_LEN); - srand(TEST_SEED); - - // Allocate the arrays - for (i = 0; i < TEST_SOURCES; i++) { - if (posix_memalign(&buf, 64, TEST_LEN)) { - printf("alloc error: Fail"); - goto exit; - } - buffs[i] = buf; - } - - for (i = 0; i < TEST_SOURCES; i++) { - if (posix_memalign(&buf, 64, TEST_LEN)) { - printf("alloc error: Fail"); - goto exit; - } - temp_buffs[i] = buf; - memset(temp_buffs[i], 0, TEST_LEN); // initialize the destination buffer to be zero for update function - } - - for (i = 0; i < TEST_SOURCES; i++) { - if (posix_memalign(&buf, 64, TEST_LEN)) { - printf("alloc error: Fail"); - goto exit; - } - update_buffs[i] = buf; - memset(update_buffs[i], 0, TEST_LEN); // initialize the destination buffer to be zero for update function - } - // Test erasure code by encode and recovery - - encode_matrix = malloc(MMAX * KMAX); - decode_matrix = malloc(MMAX * KMAX); - invert_matrix = malloc(MMAX * KMAX); - g_tbls = malloc(KMAX * TEST_SOURCES * 32); - if (encode_matrix == NULL || decode_matrix == NULL - || invert_matrix == NULL || g_tbls == NULL) { - printf("Test failure! Error with malloc\n"); - goto exit; - } - // Pick a first test - m = 14; - k = 10; - assert(!(m > MMAX || k > KMAX)); - - // Make random data - for (i = 0; i < k; i++) { - for (j = 0; j < TEST_LEN; j++) { - buffs[i][j] = rand(); - update_buffs[i][j] = buffs[i][j]; - } - } - - // Generate encode matrix encode_matrix - // The matrix generated by gf_gen_rs_matrix - // is not always invertable. - gf_gen_rs_matrix(encode_matrix, m, k); - - // Generate g_tbls from encode matrix encode_matrix - ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls); - - // Perform matrix dot_prod for EC encoding - // using g_tbls from encode matrix encode_matrix - REF_FUNCTION(TEST_LEN, k, m - k, g_tbls, buffs, &buffs[k]); - for (i = 0; i < k; i++) { - FUNCTION_UNDER_TEST(TEST_LEN, k, m - k, i, g_tbls, update_buffs[i], - &update_buffs[k]); - } - for (i = 0; i < m - k; i++) { - if (0 != memcmp(update_buffs[k + i], buffs[k + i], TEST_LEN)) { - printf("\nupdate_buffs%d :", i); - dump(update_buffs[k + i], 25); - printf("buffs%d :", i); - dump(buffs[k + i], 25); - goto exit; - } - } - - // Choose random buffers to be in erasure - memset(src_in_err, 0, TEST_SOURCES); - gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); - - // Generate decode matrix - re = gf_gen_decode_matrix(encode_matrix, decode_matrix, - invert_matrix, decode_index, src_err_list, src_in_err, - nerrs, nsrcerrs, k, m); - if (re != 0) { - printf("Fail to gf_gen_decode_matrix\n"); - goto exit; - } - // Pack recovery array as list of valid sources - // Its order must be the same as the order - // to generate matrix b in gf_gen_decode_matrix - for (i = 0; i < k; i++) { - recov[i] = update_buffs[decode_index[i]]; - } - - // Recover data - ec_init_tables(k, nerrs, decode_matrix, g_tbls); - REF_FUNCTION(TEST_LEN, k, nerrs, g_tbls, recov, &temp_buffs[k]); - for (i = 0; i < nerrs; i++) { - - if (0 != memcmp(temp_buffs[k + i], update_buffs[src_err_list[i]], TEST_LEN)) { - printf("Fail error recovery (%d, %d, %d)\n", m, k, nerrs); - printf(" - erase list = "); - for (j = 0; j < nerrs; j++) - printf(" %d", src_err_list[j]); - printf(" - Index = "); - for (p = 0; p < k; p++) - printf(" %d", decode_index[p]); - printf("\nencode_matrix:\n"); - dump_u8xu8((u8 *) encode_matrix, m, k); - printf("inv b:\n"); - dump_u8xu8((u8 *) invert_matrix, k, k); - printf("\ndecode_matrix:\n"); - dump_u8xu8((u8 *) decode_matrix, m, k); - printf("recov %d:", src_err_list[i]); - dump(temp_buffs[k + i], 25); - printf("orig :"); - dump(update_buffs[src_err_list[i]], 25); - re = -1; - goto exit; - } - } + int re = -1; + int i, j, p, rtest, m, k; + int nerrs, nsrcerrs; + void *buf; + unsigned int decode_index[MMAX]; + unsigned char *temp_buffs[TEST_SOURCES] = { NULL }, *buffs[TEST_SOURCES] = { NULL }; + unsigned char *update_buffs[TEST_SOURCES] = { NULL }; + unsigned char *encode_matrix = NULL, *decode_matrix = NULL, *invert_matrix = NULL, + *g_tbls = NULL; + unsigned char src_in_err[TEST_SOURCES], src_err_list[TEST_SOURCES]; + unsigned char *recov[TEST_SOURCES]; + + int rows, align, size; + unsigned char *efence_buffs[TEST_SOURCES]; + unsigned char *efence_update_buffs[TEST_SOURCES]; + unsigned int offset; + u8 *ubuffs[TEST_SOURCES]; + u8 *update_ubuffs[TEST_SOURCES]; + u8 *temp_ubuffs[TEST_SOURCES]; + + printf("test " xstr(FUNCTION_UNDER_TEST) ": %dx%d ", TEST_SOURCES, TEST_LEN); + srand(TEST_SEED); + + // Allocate the arrays + for (i = 0; i < TEST_SOURCES; i++) { + if (posix_memalign(&buf, 64, TEST_LEN)) { + printf("alloc error: Fail"); + goto exit; + } + buffs[i] = buf; + } + + for (i = 0; i < TEST_SOURCES; i++) { + if (posix_memalign(&buf, 64, TEST_LEN)) { + printf("alloc error: Fail"); + goto exit; + } + temp_buffs[i] = buf; + memset(temp_buffs[i], 0, TEST_LEN); // initialize the destination buffer to be zero + // for update function + } + + for (i = 0; i < TEST_SOURCES; i++) { + if (posix_memalign(&buf, 64, TEST_LEN)) { + printf("alloc error: Fail"); + goto exit; + } + update_buffs[i] = buf; + memset(update_buffs[i], 0, TEST_LEN); // initialize the destination buffer to be + // zero for update function + } + // Test erasure code by encode and recovery + + encode_matrix = malloc(MMAX * KMAX); + decode_matrix = malloc(MMAX * KMAX); + invert_matrix = malloc(MMAX * KMAX); + g_tbls = malloc(KMAX * TEST_SOURCES * 32); + if (encode_matrix == NULL || decode_matrix == NULL || invert_matrix == NULL || + g_tbls == NULL) { + printf("Test failure! Error with malloc\n"); + goto exit; + } + // Pick a first test + m = 14; + k = 10; + assert(!(m > MMAX || k > KMAX)); + + // Make random data + for (i = 0; i < k; i++) { + for (j = 0; j < TEST_LEN; j++) { + buffs[i][j] = rand(); + update_buffs[i][j] = buffs[i][j]; + } + } + + // Generate encode matrix encode_matrix + // The matrix generated by gf_gen_rs_matrix + // is not always invertable. + gf_gen_rs_matrix(encode_matrix, m, k); + + // Generate g_tbls from encode matrix encode_matrix + ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls); + + // Perform matrix dot_prod for EC encoding + // using g_tbls from encode matrix encode_matrix + REF_FUNCTION(TEST_LEN, k, m - k, g_tbls, buffs, &buffs[k]); + for (i = 0; i < k; i++) { + FUNCTION_UNDER_TEST(TEST_LEN, k, m - k, i, g_tbls, update_buffs[i], + &update_buffs[k]); + } + for (i = 0; i < m - k; i++) { + if (0 != memcmp(update_buffs[k + i], buffs[k + i], TEST_LEN)) { + printf("\nupdate_buffs%d :", i); + dump(update_buffs[k + i], 25); + printf("buffs%d :", i); + dump(buffs[k + i], 25); + goto exit; + } + } + + // Choose random buffers to be in erasure + memset(src_in_err, 0, TEST_SOURCES); + gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); + + // Generate decode matrix + re = gf_gen_decode_matrix(encode_matrix, decode_matrix, invert_matrix, decode_index, + src_err_list, src_in_err, nerrs, nsrcerrs, k, m); + if (re != 0) { + printf("Fail to gf_gen_decode_matrix\n"); + goto exit; + } + // Pack recovery array as list of valid sources + // Its order must be the same as the order + // to generate matrix b in gf_gen_decode_matrix + for (i = 0; i < k; i++) { + recov[i] = update_buffs[decode_index[i]]; + } + + // Recover data + ec_init_tables(k, nerrs, decode_matrix, g_tbls); + REF_FUNCTION(TEST_LEN, k, nerrs, g_tbls, recov, &temp_buffs[k]); + for (i = 0; i < nerrs; i++) { + + if (0 != memcmp(temp_buffs[k + i], update_buffs[src_err_list[i]], TEST_LEN)) { + printf("Fail error recovery (%d, %d, %d)\n", m, k, nerrs); + printf(" - erase list = "); + for (j = 0; j < nerrs; j++) + printf(" %d", src_err_list[j]); + printf(" - Index = "); + for (p = 0; p < k; p++) + printf(" %d", decode_index[p]); + printf("\nencode_matrix:\n"); + dump_u8xu8((u8 *) encode_matrix, m, k); + printf("inv b:\n"); + dump_u8xu8((u8 *) invert_matrix, k, k); + printf("\ndecode_matrix:\n"); + dump_u8xu8((u8 *) decode_matrix, m, k); + printf("recov %d:", src_err_list[i]); + dump(temp_buffs[k + i], 25); + printf("orig :"); + dump(update_buffs[src_err_list[i]], 25); + re = -1; + goto exit; + } + } #ifdef TEST_VERBOSE - putchar('.'); + putchar('.'); #endif - // Pick a first test - m = 7; - k = 5; - if (m > MMAX || k > KMAX) { - re = -1; - goto exit; - } - - // Zero the destination buffer for update function - for (i = k; i < TEST_SOURCES; i++) { - memset(buffs[i], 0, TEST_LEN); - memset(update_buffs[i], 0, TEST_LEN); - } - // Make random data - for (i = 0; i < k; i++) { - for (j = 0; j < TEST_LEN; j++) { - buffs[i][j] = rand(); - update_buffs[i][j] = buffs[i][j]; - } - } - - // The matrix generated by gf_gen_cauchy1_matrix - // is always invertable. - gf_gen_cauchy1_matrix(encode_matrix, m, k); - - // Generate g_tbls from encode matrix encode_matrix - ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls); - - // Perform matrix dot_prod for EC encoding - // using g_tbls from encode matrix encode_matrix - REF_FUNCTION(TEST_LEN, k, m - k, g_tbls, buffs, &buffs[k]); - for (i = 0; i < k; i++) { - FUNCTION_UNDER_TEST(TEST_LEN, k, m - k, i, g_tbls, update_buffs[i], - &update_buffs[k]); - } - for (i = 0; i < m - k; i++) { - if (0 != memcmp(update_buffs[k + i], buffs[k + i], TEST_LEN)) { - printf("\nupdate_buffs%d :", i); - dump(update_buffs[k + i], 25); - printf("buffs%d :", i); - dump(buffs[k + i], 25); - re = -1; - goto exit; - } - } - - // Choose random buffers to be in erasure - memset(src_in_err, 0, TEST_SOURCES); - gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); - - // Generate decode matrix - re = gf_gen_decode_matrix(encode_matrix, decode_matrix, - invert_matrix, decode_index, src_err_list, src_in_err, - nerrs, nsrcerrs, k, m); - if (re != 0) { - printf("Fail to gf_gen_decode_matrix\n"); - goto exit; - } - // Pack recovery array as list of valid sources - // Its order must be the same as the order - // to generate matrix b in gf_gen_decode_matrix - for (i = 0; i < k; i++) { - recov[i] = update_buffs[decode_index[i]]; - } - - // Recover data - for (i = 0; i < TEST_SOURCES; i++) { - memset(temp_buffs[i], 0, TEST_LEN); - } - ec_init_tables(k, nerrs, decode_matrix, g_tbls); - for (i = 0; i < k; i++) { - FUNCTION_UNDER_TEST(TEST_LEN, k, nerrs, i, g_tbls, recov[i], &temp_buffs[k]); - } - for (i = 0; i < nerrs; i++) { - - if (0 != memcmp(temp_buffs[k + i], update_buffs[src_err_list[i]], TEST_LEN)) { - printf("Fail error recovery (%d, %d, %d)\n", m, k, nerrs); - printf(" - erase list = "); - for (j = 0; j < nerrs; j++) - printf(" %d", src_err_list[j]); - printf(" - Index = "); - for (p = 0; p < k; p++) - printf(" %d", decode_index[p]); - printf("\nencode_matrix:\n"); - dump_u8xu8((u8 *) encode_matrix, m, k); - printf("inv b:\n"); - dump_u8xu8((u8 *) invert_matrix, k, k); - printf("\ndecode_matrix:\n"); - dump_u8xu8((u8 *) decode_matrix, m, k); - printf("recov %d:", src_err_list[i]); - dump(temp_buffs[k + i], 25); - printf("orig :"); - dump(update_buffs[src_err_list[i]], 25); - re = -1; - goto exit; - } - } + // Pick a first test + m = 7; + k = 5; + if (m > MMAX || k > KMAX) { + re = -1; + goto exit; + } + + // Zero the destination buffer for update function + for (i = k; i < TEST_SOURCES; i++) { + memset(buffs[i], 0, TEST_LEN); + memset(update_buffs[i], 0, TEST_LEN); + } + // Make random data + for (i = 0; i < k; i++) { + for (j = 0; j < TEST_LEN; j++) { + buffs[i][j] = rand(); + update_buffs[i][j] = buffs[i][j]; + } + } + + // The matrix generated by gf_gen_cauchy1_matrix + // is always invertable. + gf_gen_cauchy1_matrix(encode_matrix, m, k); + + // Generate g_tbls from encode matrix encode_matrix + ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls); + + // Perform matrix dot_prod for EC encoding + // using g_tbls from encode matrix encode_matrix + REF_FUNCTION(TEST_LEN, k, m - k, g_tbls, buffs, &buffs[k]); + for (i = 0; i < k; i++) { + FUNCTION_UNDER_TEST(TEST_LEN, k, m - k, i, g_tbls, update_buffs[i], + &update_buffs[k]); + } + for (i = 0; i < m - k; i++) { + if (0 != memcmp(update_buffs[k + i], buffs[k + i], TEST_LEN)) { + printf("\nupdate_buffs%d :", i); + dump(update_buffs[k + i], 25); + printf("buffs%d :", i); + dump(buffs[k + i], 25); + re = -1; + goto exit; + } + } + + // Choose random buffers to be in erasure + memset(src_in_err, 0, TEST_SOURCES); + gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); + + // Generate decode matrix + re = gf_gen_decode_matrix(encode_matrix, decode_matrix, invert_matrix, decode_index, + src_err_list, src_in_err, nerrs, nsrcerrs, k, m); + if (re != 0) { + printf("Fail to gf_gen_decode_matrix\n"); + goto exit; + } + // Pack recovery array as list of valid sources + // Its order must be the same as the order + // to generate matrix b in gf_gen_decode_matrix + for (i = 0; i < k; i++) { + recov[i] = update_buffs[decode_index[i]]; + } + + // Recover data + for (i = 0; i < TEST_SOURCES; i++) { + memset(temp_buffs[i], 0, TEST_LEN); + } + ec_init_tables(k, nerrs, decode_matrix, g_tbls); + for (i = 0; i < k; i++) { + FUNCTION_UNDER_TEST(TEST_LEN, k, nerrs, i, g_tbls, recov[i], &temp_buffs[k]); + } + for (i = 0; i < nerrs; i++) { + + if (0 != memcmp(temp_buffs[k + i], update_buffs[src_err_list[i]], TEST_LEN)) { + printf("Fail error recovery (%d, %d, %d)\n", m, k, nerrs); + printf(" - erase list = "); + for (j = 0; j < nerrs; j++) + printf(" %d", src_err_list[j]); + printf(" - Index = "); + for (p = 0; p < k; p++) + printf(" %d", decode_index[p]); + printf("\nencode_matrix:\n"); + dump_u8xu8((u8 *) encode_matrix, m, k); + printf("inv b:\n"); + dump_u8xu8((u8 *) invert_matrix, k, k); + printf("\ndecode_matrix:\n"); + dump_u8xu8((u8 *) decode_matrix, m, k); + printf("recov %d:", src_err_list[i]); + dump(temp_buffs[k + i], 25); + printf("orig :"); + dump(update_buffs[src_err_list[i]], 25); + re = -1; + goto exit; + } + } #ifdef TEST_VERBOSE - putchar('.'); + putchar('.'); #endif - // Do more random tests - for (rtest = 0; rtest < RANDOMS; rtest++) { - while ((m = (rand() % MMAX)) < 2) ; - while ((k = (rand() % KMAX)) >= m || k < 1) ; - - if (m > MMAX || k > KMAX) - continue; - - // Zero the destination buffer for update function - for (i = k; i < TEST_SOURCES; i++) { - memset(buffs[i], 0, TEST_LEN); - memset(update_buffs[i], 0, TEST_LEN); - } - // Make random data - for (i = 0; i < k; i++) { - for (j = 0; j < TEST_LEN; j++) { - buffs[i][j] = rand(); - update_buffs[i][j] = buffs[i][j]; - } - } - - // The matrix generated by gf_gen_cauchy1_matrix - // is always invertable. - gf_gen_cauchy1_matrix(encode_matrix, m, k); - - // Make parity vects - // Generate g_tbls from encode matrix a - ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls); - // Perform matrix dot_prod for EC encoding - // using g_tbls from encode matrix a - REF_FUNCTION(TEST_LEN, k, m - k, g_tbls, buffs, &buffs[k]); - for (i = 0; i < k; i++) { - FUNCTION_UNDER_TEST(TEST_LEN, k, m - k, i, g_tbls, update_buffs[i], - &update_buffs[k]); - } - for (i = 0; i < m - k; i++) { - if (0 != memcmp(update_buffs[k + i], buffs[k + i], TEST_LEN)) { - printf("\nupdate_buffs%d :", i); - dump(update_buffs[k + i], 25); - printf("buffs%d :", i); - dump(buffs[k + i], 25); - re = -1; - goto exit; - } - } - - // Random errors - memset(src_in_err, 0, TEST_SOURCES); - gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); - - // Generate decode matrix - re = gf_gen_decode_matrix(encode_matrix, decode_matrix, - invert_matrix, decode_index, src_err_list, - src_in_err, nerrs, nsrcerrs, k, m); - if (re != 0) { - printf("Fail to gf_gen_decode_matrix\n"); - goto exit; - } - // Pack recovery array as list of valid sources - // Its order must be the same as the order - // to generate matrix b in gf_gen_decode_matrix - for (i = 0; i < k; i++) { - recov[i] = update_buffs[decode_index[i]]; - } - - // Recover data - for (i = 0; i < TEST_SOURCES; i++) { - memset(temp_buffs[i], 0, TEST_LEN); - } - ec_init_tables(k, nerrs, decode_matrix, g_tbls); - for (i = 0; i < k; i++) { - FUNCTION_UNDER_TEST(TEST_LEN, k, nerrs, i, g_tbls, recov[i], - &temp_buffs[k]); - } - - for (i = 0; i < nerrs; i++) { - - if (0 != - memcmp(temp_buffs[k + i], update_buffs[src_err_list[i]], - TEST_LEN)) { - printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs); - printf(" - erase list = "); - for (j = 0; j < nerrs; j++) - printf(" %d", src_err_list[j]); - printf(" - Index = "); - for (p = 0; p < k; p++) - printf(" %d", decode_index[p]); - printf("\nencode_matrix:\n"); - dump_u8xu8((u8 *) encode_matrix, m, k); - printf("inv b:\n"); - dump_u8xu8((u8 *) invert_matrix, k, k); - printf("\ndecode_matrix:\n"); - dump_u8xu8((u8 *) decode_matrix, m, k); - printf("orig data:\n"); - dump_matrix(update_buffs, m, 25); - printf("orig :"); - dump(update_buffs[src_err_list[i]], 25); - printf("recov %d:", src_err_list[i]); - dump(temp_buffs[k + i], 25); - re = -1; - goto exit; - } - } + // Do more random tests + for (rtest = 0; rtest < RANDOMS; rtest++) { + while ((m = (rand() % MMAX)) < 2) + ; + while ((k = (rand() % KMAX)) >= m || k < 1) + ; + + if (m > MMAX || k > KMAX) + continue; + + // Zero the destination buffer for update function + for (i = k; i < TEST_SOURCES; i++) { + memset(buffs[i], 0, TEST_LEN); + memset(update_buffs[i], 0, TEST_LEN); + } + // Make random data + for (i = 0; i < k; i++) { + for (j = 0; j < TEST_LEN; j++) { + buffs[i][j] = rand(); + update_buffs[i][j] = buffs[i][j]; + } + } + + // The matrix generated by gf_gen_cauchy1_matrix + // is always invertable. + gf_gen_cauchy1_matrix(encode_matrix, m, k); + + // Make parity vects + // Generate g_tbls from encode matrix a + ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls); + // Perform matrix dot_prod for EC encoding + // using g_tbls from encode matrix a + REF_FUNCTION(TEST_LEN, k, m - k, g_tbls, buffs, &buffs[k]); + for (i = 0; i < k; i++) { + FUNCTION_UNDER_TEST(TEST_LEN, k, m - k, i, g_tbls, update_buffs[i], + &update_buffs[k]); + } + for (i = 0; i < m - k; i++) { + if (0 != memcmp(update_buffs[k + i], buffs[k + i], TEST_LEN)) { + printf("\nupdate_buffs%d :", i); + dump(update_buffs[k + i], 25); + printf("buffs%d :", i); + dump(buffs[k + i], 25); + re = -1; + goto exit; + } + } + + // Random errors + memset(src_in_err, 0, TEST_SOURCES); + gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); + + // Generate decode matrix + re = gf_gen_decode_matrix(encode_matrix, decode_matrix, invert_matrix, decode_index, + src_err_list, src_in_err, nerrs, nsrcerrs, k, m); + if (re != 0) { + printf("Fail to gf_gen_decode_matrix\n"); + goto exit; + } + // Pack recovery array as list of valid sources + // Its order must be the same as the order + // to generate matrix b in gf_gen_decode_matrix + for (i = 0; i < k; i++) { + recov[i] = update_buffs[decode_index[i]]; + } + + // Recover data + for (i = 0; i < TEST_SOURCES; i++) { + memset(temp_buffs[i], 0, TEST_LEN); + } + ec_init_tables(k, nerrs, decode_matrix, g_tbls); + for (i = 0; i < k; i++) { + FUNCTION_UNDER_TEST(TEST_LEN, k, nerrs, i, g_tbls, recov[i], + &temp_buffs[k]); + } + + for (i = 0; i < nerrs; i++) { + + if (0 != + memcmp(temp_buffs[k + i], update_buffs[src_err_list[i]], TEST_LEN)) { + printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs); + printf(" - erase list = "); + for (j = 0; j < nerrs; j++) + printf(" %d", src_err_list[j]); + printf(" - Index = "); + for (p = 0; p < k; p++) + printf(" %d", decode_index[p]); + printf("\nencode_matrix:\n"); + dump_u8xu8((u8 *) encode_matrix, m, k); + printf("inv b:\n"); + dump_u8xu8((u8 *) invert_matrix, k, k); + printf("\ndecode_matrix:\n"); + dump_u8xu8((u8 *) decode_matrix, m, k); + printf("orig data:\n"); + dump_matrix(update_buffs, m, 25); + printf("orig :"); + dump(update_buffs[src_err_list[i]], 25); + printf("recov %d:", src_err_list[i]); + dump(temp_buffs[k + i], 25); + re = -1; + goto exit; + } + } #ifdef TEST_VERBOSE - putchar('.'); + putchar('.'); #endif - } - - // Run tests at end of buffer for Electric Fence - k = 16; - align = (LEN_ALIGN_CHK_B != 0) ? 1 : ALIGN_SIZE; - if (k > KMAX) { - re = -1; - goto exit; - } - - for (rows = 1; rows <= 16; rows++) { - m = k + rows; - if (m > MMAX) { - re = -1; - goto exit; - } - - for (i = k; i < TEST_SOURCES; i++) { - memset(buffs[i], 0, TEST_LEN); - memset(update_buffs[i], 0, TEST_LEN); - } - // Make random data - for (i = 0; i < k; i++) { - for (j = 0; j < TEST_LEN; j++) { - buffs[i][j] = rand(); - update_buffs[i][j] = buffs[i][j]; - } - } - - for (size = 0; size <= EFENCE_TEST_MAX_SIZE; size += align) { - for (i = 0; i < m; i++) { // Line up TEST_SIZE from end - efence_buffs[i] = buffs[i] + TEST_LEN - size; - efence_update_buffs[i] = update_buffs[i] + TEST_LEN - size; - } - // Zero the destination buffer for update function - for (i = k; i < m; i++) { - memset(efence_buffs[i], 0, size); - memset(efence_update_buffs[i], 0, size); - } - - // The matrix generated by gf_gen_cauchy1_matrix - // is always invertable. - gf_gen_cauchy1_matrix(encode_matrix, m, k); - - // Make parity vects - // Generate g_tbls from encode matrix a - ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls); - // Perform matrix dot_prod for EC encoding - // using g_tbls from encode matrix a - REF_FUNCTION(size, k, m - k, g_tbls, efence_buffs, &efence_buffs[k]); - for (i = 0; i < k; i++) { - FUNCTION_UNDER_TEST(size, k, m - k, i, g_tbls, - efence_update_buffs[i], - &efence_update_buffs[k]); - } - for (i = 0; i < m - k; i++) { - if (0 != - memcmp(efence_update_buffs[k + i], efence_buffs[k + i], - size)) { - printf("\nefence_update_buffs%d :", i); - dump(efence_update_buffs[k + i], 25); - printf("efence_buffs%d :", i); - dump(efence_buffs[k + i], 25); - re = -1; - goto exit; - } - } - - // Random errors - memset(src_in_err, 0, TEST_SOURCES); - gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); - - // Generate decode matrix - re = gf_gen_decode_matrix(encode_matrix, decode_matrix, - invert_matrix, decode_index, src_err_list, - src_in_err, nerrs, nsrcerrs, k, m); - if (re != 0) { - printf("Fail to gf_gen_decode_matrix\n"); - goto exit; - } - // Pack recovery array as list of valid sources - // Its order must be the same as the order - // to generate matrix b in gf_gen_decode_matrix - for (i = 0; i < k; i++) { - recov[i] = efence_update_buffs[decode_index[i]]; - } - - // Recover data - for (i = 0; i < TEST_SOURCES; i++) { - memset(temp_buffs[i], 0, TEST_LEN); - } - ec_init_tables(k, nerrs, decode_matrix, g_tbls); - for (i = 0; i < k; i++) { - FUNCTION_UNDER_TEST(size, k, nerrs, i, g_tbls, recov[i], - &temp_buffs[k]); - } - - for (i = 0; i < nerrs; i++) { - - if (0 != - memcmp(temp_buffs[k + i], - efence_update_buffs[src_err_list[i]], size)) { - printf("Efence: Fail error recovery (%d, %d, %d)\n", m, - k, nerrs); - - printf("size = %d\n", size); - - printf("Test erase list = "); - for (j = 0; j < nerrs; j++) - printf(" %d", src_err_list[j]); - printf(" - Index = "); - for (p = 0; p < k; p++) - printf(" %d", decode_index[p]); - printf("\nencode_matrix:\n"); - dump_u8xu8((u8 *) encode_matrix, m, k); - printf("inv b:\n"); - dump_u8xu8((u8 *) invert_matrix, k, k); - printf("\ndecode_matrix:\n"); - dump_u8xu8((u8 *) decode_matrix, m, k); - - printf("recov %d:", src_err_list[i]); - dump(temp_buffs[k + i], align); - printf("orig :"); - dump(efence_update_buffs[src_err_list[i]], align); - re = 1; - goto exit; - } - } - } + } + + // Run tests at end of buffer for Electric Fence + k = 16; + align = (LEN_ALIGN_CHK_B != 0) ? 1 : ALIGN_SIZE; + if (k > KMAX) { + re = -1; + goto exit; + } + + for (rows = 1; rows <= 16; rows++) { + m = k + rows; + if (m > MMAX) { + re = -1; + goto exit; + } + + for (i = k; i < TEST_SOURCES; i++) { + memset(buffs[i], 0, TEST_LEN); + memset(update_buffs[i], 0, TEST_LEN); + } + // Make random data + for (i = 0; i < k; i++) { + for (j = 0; j < TEST_LEN; j++) { + buffs[i][j] = rand(); + update_buffs[i][j] = buffs[i][j]; + } + } + + for (size = 0; size <= EFENCE_TEST_MAX_SIZE; size += align) { + for (i = 0; i < m; i++) { // Line up TEST_SIZE from end + efence_buffs[i] = buffs[i] + TEST_LEN - size; + efence_update_buffs[i] = update_buffs[i] + TEST_LEN - size; + } + // Zero the destination buffer for update function + for (i = k; i < m; i++) { + memset(efence_buffs[i], 0, size); + memset(efence_update_buffs[i], 0, size); + } + + // The matrix generated by gf_gen_cauchy1_matrix + // is always invertable. + gf_gen_cauchy1_matrix(encode_matrix, m, k); + + // Make parity vects + // Generate g_tbls from encode matrix a + ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls); + // Perform matrix dot_prod for EC encoding + // using g_tbls from encode matrix a + REF_FUNCTION(size, k, m - k, g_tbls, efence_buffs, &efence_buffs[k]); + for (i = 0; i < k; i++) { + FUNCTION_UNDER_TEST(size, k, m - k, i, g_tbls, + efence_update_buffs[i], + &efence_update_buffs[k]); + } + for (i = 0; i < m - k; i++) { + if (0 != + memcmp(efence_update_buffs[k + i], efence_buffs[k + i], size)) { + printf("\nefence_update_buffs%d :", i); + dump(efence_update_buffs[k + i], 25); + printf("efence_buffs%d :", i); + dump(efence_buffs[k + i], 25); + re = -1; + goto exit; + } + } + + // Random errors + memset(src_in_err, 0, TEST_SOURCES); + gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); + + // Generate decode matrix + re = gf_gen_decode_matrix(encode_matrix, decode_matrix, invert_matrix, + decode_index, src_err_list, src_in_err, nerrs, + nsrcerrs, k, m); + if (re != 0) { + printf("Fail to gf_gen_decode_matrix\n"); + goto exit; + } + // Pack recovery array as list of valid sources + // Its order must be the same as the order + // to generate matrix b in gf_gen_decode_matrix + for (i = 0; i < k; i++) { + recov[i] = efence_update_buffs[decode_index[i]]; + } + + // Recover data + for (i = 0; i < TEST_SOURCES; i++) { + memset(temp_buffs[i], 0, TEST_LEN); + } + ec_init_tables(k, nerrs, decode_matrix, g_tbls); + for (i = 0; i < k; i++) { + FUNCTION_UNDER_TEST(size, k, nerrs, i, g_tbls, recov[i], + &temp_buffs[k]); + } + + for (i = 0; i < nerrs; i++) { + + if (0 != memcmp(temp_buffs[k + i], + efence_update_buffs[src_err_list[i]], size)) { + printf("Efence: Fail error recovery (%d, %d, %d)\n", m, k, + nerrs); + + printf("size = %d\n", size); + + printf("Test erase list = "); + for (j = 0; j < nerrs; j++) + printf(" %d", src_err_list[j]); + printf(" - Index = "); + for (p = 0; p < k; p++) + printf(" %d", decode_index[p]); + printf("\nencode_matrix:\n"); + dump_u8xu8((u8 *) encode_matrix, m, k); + printf("inv b:\n"); + dump_u8xu8((u8 *) invert_matrix, k, k); + printf("\ndecode_matrix:\n"); + dump_u8xu8((u8 *) decode_matrix, m, k); + + printf("recov %d:", src_err_list[i]); + dump(temp_buffs[k + i], align); + printf("orig :"); + dump(efence_update_buffs[src_err_list[i]], align); + re = 1; + goto exit; + } + } + } #ifdef TEST_VERBOSE - putchar('.'); + putchar('.'); #endif - - } - - // Test rand ptr alignment if available - - for (rtest = 0; rtest < RANDOMS; rtest++) { - while ((m = (rand() % MMAX)) < 2) ; - while ((k = (rand() % KMAX)) >= m || k < 1) ; - - if (m > MMAX || k > KMAX) - continue; - - size = (TEST_LEN - PTR_ALIGN_CHK_B) & ~15; - - offset = (PTR_ALIGN_CHK_B != 0) ? 1 : PTR_ALIGN_CHK_B; - // Add random offsets - for (i = 0; i < m; i++) { - memset(buffs[i], 0, TEST_LEN); // zero pad to check write-over - memset(update_buffs[i], 0, TEST_LEN); // zero pad to check write-over - memset(temp_buffs[i], 0, TEST_LEN); // zero pad to check write-over - ubuffs[i] = buffs[i] + (rand() & (PTR_ALIGN_CHK_B - offset)); - update_ubuffs[i] = - update_buffs[i] + (rand() & (PTR_ALIGN_CHK_B - offset)); - temp_ubuffs[i] = temp_buffs[i] + (rand() & (PTR_ALIGN_CHK_B - offset)); - } - - // Zero the destination buffer for update function - for (i = k; i < m; i++) { - memset(ubuffs[i], 0, size); - memset(update_ubuffs[i], 0, size); - } - // Make random data - for (i = 0; i < k; i++) { - for (j = 0; j < size; j++) { - ubuffs[i][j] = rand(); - update_ubuffs[i][j] = ubuffs[i][j]; - } - } - - // The matrix generated by gf_gen_cauchy1_matrix - // is always invertable. - gf_gen_cauchy1_matrix(encode_matrix, m, k); - - // Make parity vects - // Generate g_tbls from encode matrix a - ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls); - // Perform matrix dot_prod for EC encoding - // using g_tbls from encode matrix a - REF_FUNCTION(size, k, m - k, g_tbls, ubuffs, &ubuffs[k]); - for (i = 0; i < k; i++) { - FUNCTION_UNDER_TEST(size, k, m - k, i, g_tbls, update_ubuffs[i], - &update_ubuffs[k]); - } - for (i = 0; i < m - k; i++) { - if (0 != memcmp(update_ubuffs[k + i], ubuffs[k + i], size)) { - printf("\nupdate_ubuffs%d :", i); - dump(update_ubuffs[k + i], 25); - printf("ubuffs%d :", i); - dump(ubuffs[k + i], 25); - re = -1; - goto exit; - } - } - - // Random errors - memset(src_in_err, 0, TEST_SOURCES); - gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); - - // Generate decode matrix - re = gf_gen_decode_matrix(encode_matrix, decode_matrix, - invert_matrix, decode_index, src_err_list, - src_in_err, nerrs, nsrcerrs, k, m); - if (re != 0) { - printf("Fail to gf_gen_decode_matrix\n"); - goto exit; - } - // Pack recovery array as list of valid sources - // Its order must be the same as the order - // to generate matrix b in gf_gen_decode_matrix - for (i = 0; i < k; i++) { - recov[i] = update_ubuffs[decode_index[i]]; - } - - // Recover data - for (i = 0; i < m; i++) { - memset(temp_ubuffs[i], 0, size); - } - ec_init_tables(k, nerrs, decode_matrix, g_tbls); - for (i = 0; i < k; i++) { - FUNCTION_UNDER_TEST(size, k, nerrs, i, g_tbls, recov[i], - &temp_ubuffs[k]); - } - - for (i = 0; i < nerrs; i++) { - - if (0 != - memcmp(temp_ubuffs[k + i], update_ubuffs[src_err_list[i]], size)) { - printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs); - printf(" - erase list = "); - for (j = 0; j < nerrs; j++) - printf(" %d", src_err_list[j]); - printf(" - Index = "); - for (p = 0; p < k; p++) - printf(" %d", decode_index[p]); - printf("\nencode_matrix:\n"); - dump_u8xu8((unsigned char *)encode_matrix, m, k); - printf("inv b:\n"); - dump_u8xu8((unsigned char *)invert_matrix, k, k); - printf("\ndecode_matrix:\n"); - dump_u8xu8((unsigned char *)decode_matrix, m, k); - printf("orig data:\n"); - dump_matrix(update_ubuffs, m, 25); - printf("orig :"); - dump(update_ubuffs[src_err_list[i]], 25); - printf("recov %d:", src_err_list[i]); - dump(temp_ubuffs[k + i], 25); - re = -1; - goto exit; - } - } - - // Confirm that padding around dests is unchanged - memset(temp_buffs[0], 0, PTR_ALIGN_CHK_B); // Make reference zero buff - - for (i = 0; i < m; i++) { - - offset = update_ubuffs[i] - update_buffs[i]; - - if (memcmp(update_buffs[i], temp_buffs[0], offset)) { - printf("Fail rand ualign encode pad start\n"); - re = -1; - goto exit; - } - if (memcmp - (update_buffs[i] + offset + size, temp_buffs[0], - PTR_ALIGN_CHK_B - offset)) { - printf("Fail rand ualign encode pad end\n"); - re = -1; - goto exit; - } - } - - for (i = 0; i < nerrs; i++) { - - offset = temp_ubuffs[k + i] - temp_buffs[k + i]; - if (memcmp(temp_buffs[k + i], temp_buffs[0], offset)) { - printf("Fail rand ualign decode pad start\n"); - re = -1; - goto exit; - } - if (memcmp - (temp_buffs[k + i] + offset + size, temp_buffs[0], - PTR_ALIGN_CHK_B - offset)) { - printf("Fail rand ualign decode pad end\n"); - re = -1; - goto exit; - } - } + } + + // Test rand ptr alignment if available + + for (rtest = 0; rtest < RANDOMS; rtest++) { + while ((m = (rand() % MMAX)) < 2) + ; + while ((k = (rand() % KMAX)) >= m || k < 1) + ; + + if (m > MMAX || k > KMAX) + continue; + + size = (TEST_LEN - PTR_ALIGN_CHK_B) & ~15; + + offset = (PTR_ALIGN_CHK_B != 0) ? 1 : PTR_ALIGN_CHK_B; + // Add random offsets + for (i = 0; i < m; i++) { + memset(buffs[i], 0, TEST_LEN); // zero pad to check write-over + memset(update_buffs[i], 0, TEST_LEN); // zero pad to check write-over + memset(temp_buffs[i], 0, TEST_LEN); // zero pad to check write-over + ubuffs[i] = buffs[i] + (rand() & (PTR_ALIGN_CHK_B - offset)); + update_ubuffs[i] = update_buffs[i] + (rand() & (PTR_ALIGN_CHK_B - offset)); + temp_ubuffs[i] = temp_buffs[i] + (rand() & (PTR_ALIGN_CHK_B - offset)); + } + + // Zero the destination buffer for update function + for (i = k; i < m; i++) { + memset(ubuffs[i], 0, size); + memset(update_ubuffs[i], 0, size); + } + // Make random data + for (i = 0; i < k; i++) { + for (j = 0; j < size; j++) { + ubuffs[i][j] = rand(); + update_ubuffs[i][j] = ubuffs[i][j]; + } + } + + // The matrix generated by gf_gen_cauchy1_matrix + // is always invertable. + gf_gen_cauchy1_matrix(encode_matrix, m, k); + + // Make parity vects + // Generate g_tbls from encode matrix a + ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls); + // Perform matrix dot_prod for EC encoding + // using g_tbls from encode matrix a + REF_FUNCTION(size, k, m - k, g_tbls, ubuffs, &ubuffs[k]); + for (i = 0; i < k; i++) { + FUNCTION_UNDER_TEST(size, k, m - k, i, g_tbls, update_ubuffs[i], + &update_ubuffs[k]); + } + for (i = 0; i < m - k; i++) { + if (0 != memcmp(update_ubuffs[k + i], ubuffs[k + i], size)) { + printf("\nupdate_ubuffs%d :", i); + dump(update_ubuffs[k + i], 25); + printf("ubuffs%d :", i); + dump(ubuffs[k + i], 25); + re = -1; + goto exit; + } + } + + // Random errors + memset(src_in_err, 0, TEST_SOURCES); + gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); + + // Generate decode matrix + re = gf_gen_decode_matrix(encode_matrix, decode_matrix, invert_matrix, decode_index, + src_err_list, src_in_err, nerrs, nsrcerrs, k, m); + if (re != 0) { + printf("Fail to gf_gen_decode_matrix\n"); + goto exit; + } + // Pack recovery array as list of valid sources + // Its order must be the same as the order + // to generate matrix b in gf_gen_decode_matrix + for (i = 0; i < k; i++) { + recov[i] = update_ubuffs[decode_index[i]]; + } + + // Recover data + for (i = 0; i < m; i++) { + memset(temp_ubuffs[i], 0, size); + } + ec_init_tables(k, nerrs, decode_matrix, g_tbls); + for (i = 0; i < k; i++) { + FUNCTION_UNDER_TEST(size, k, nerrs, i, g_tbls, recov[i], &temp_ubuffs[k]); + } + + for (i = 0; i < nerrs; i++) { + + if (0 != memcmp(temp_ubuffs[k + i], update_ubuffs[src_err_list[i]], size)) { + printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs); + printf(" - erase list = "); + for (j = 0; j < nerrs; j++) + printf(" %d", src_err_list[j]); + printf(" - Index = "); + for (p = 0; p < k; p++) + printf(" %d", decode_index[p]); + printf("\nencode_matrix:\n"); + dump_u8xu8((unsigned char *) encode_matrix, m, k); + printf("inv b:\n"); + dump_u8xu8((unsigned char *) invert_matrix, k, k); + printf("\ndecode_matrix:\n"); + dump_u8xu8((unsigned char *) decode_matrix, m, k); + printf("orig data:\n"); + dump_matrix(update_ubuffs, m, 25); + printf("orig :"); + dump(update_ubuffs[src_err_list[i]], 25); + printf("recov %d:", src_err_list[i]); + dump(temp_ubuffs[k + i], 25); + re = -1; + goto exit; + } + } + + // Confirm that padding around dests is unchanged + memset(temp_buffs[0], 0, PTR_ALIGN_CHK_B); // Make reference zero buff + + for (i = 0; i < m; i++) { + + offset = update_ubuffs[i] - update_buffs[i]; + + if (memcmp(update_buffs[i], temp_buffs[0], offset)) { + printf("Fail rand ualign encode pad start\n"); + re = -1; + goto exit; + } + if (memcmp(update_buffs[i] + offset + size, temp_buffs[0], + PTR_ALIGN_CHK_B - offset)) { + printf("Fail rand ualign encode pad end\n"); + re = -1; + goto exit; + } + } + + for (i = 0; i < nerrs; i++) { + + offset = temp_ubuffs[k + i] - temp_buffs[k + i]; + if (memcmp(temp_buffs[k + i], temp_buffs[0], offset)) { + printf("Fail rand ualign decode pad start\n"); + re = -1; + goto exit; + } + if (memcmp(temp_buffs[k + i] + offset + size, temp_buffs[0], + PTR_ALIGN_CHK_B - offset)) { + printf("Fail rand ualign decode pad end\n"); + re = -1; + goto exit; + } + } #ifdef TEST_VERBOSE - putchar('.'); + putchar('.'); #endif - } - - // Test size alignment - - align = (LEN_ALIGN_CHK_B != 0) ? 13 : ALIGN_SIZE; - - for (size = TEST_LEN; size >= 0; size -= align) { - while ((m = (rand() % MMAX)) < 2) ; - while ((k = (rand() % KMAX)) >= m || k < 1) ; - - if (m > MMAX || k > KMAX) - continue; - - // Zero the destination buffer for update function - for (i = k; i < TEST_SOURCES; i++) { - memset(buffs[i], 0, size); - memset(update_buffs[i], 0, size); - } - // Make random data - for (i = 0; i < k; i++) { - for (j = 0; j < size; j++) { - buffs[i][j] = rand(); - update_buffs[i][j] = buffs[i][j]; - } - } - - // The matrix generated by gf_gen_cauchy1_matrix - // is always invertable. - gf_gen_cauchy1_matrix(encode_matrix, m, k); - - // Make parity vects - // Generate g_tbls from encode matrix a - ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls); - // Perform matrix dot_prod for EC encoding - // using g_tbls from encode matrix a - REF_FUNCTION(size, k, m - k, g_tbls, buffs, &buffs[k]); - for (i = 0; i < k; i++) { - FUNCTION_UNDER_TEST(size, k, m - k, i, g_tbls, update_buffs[i], - &update_buffs[k]); - } - for (i = 0; i < m - k; i++) { - if (0 != memcmp(update_buffs[k + i], buffs[k + i], size)) { - printf("\nupdate_buffs%d (size=%d) :", i, size); - dump(update_buffs[k + i], 25); - printf("buffs%d (size=%d) :", i, size); - dump(buffs[k + i], 25); - re = -1; - goto exit; - } - } - - // Random errors - memset(src_in_err, 0, TEST_SOURCES); - gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); - // Generate decode matrix - re = gf_gen_decode_matrix(encode_matrix, decode_matrix, - invert_matrix, decode_index, src_err_list, - src_in_err, nerrs, nsrcerrs, k, m); - if (re != 0) { - printf("Fail to gf_gen_decode_matrix\n"); - goto exit; - } - // Pack recovery array as list of valid sources - // Its order must be the same as the order - // to generate matrix b in gf_gen_decode_matrix - for (i = 0; i < k; i++) { - recov[i] = update_buffs[decode_index[i]]; - } - - // Recover data - for (i = 0; i < TEST_SOURCES; i++) { - memset(temp_buffs[i], 0, TEST_LEN); - } - ec_init_tables(k, nerrs, decode_matrix, g_tbls); - for (i = 0; i < k; i++) { - FUNCTION_UNDER_TEST(size, k, nerrs, i, g_tbls, recov[i], - &temp_buffs[k]); - } - - for (i = 0; i < nerrs; i++) { - - if (0 != - memcmp(temp_buffs[k + i], update_buffs[src_err_list[i]], size)) { - printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs); - printf(" - erase list = "); - for (j = 0; j < nerrs; j++) - printf(" %d", src_err_list[j]); - printf(" - Index = "); - for (p = 0; p < k; p++) - printf(" %d", decode_index[p]); - printf("\nencode_matrix:\n"); - dump_u8xu8((unsigned char *)encode_matrix, m, k); - printf("inv b:\n"); - dump_u8xu8((unsigned char *)invert_matrix, k, k); - printf("\ndecode_matrix:\n"); - dump_u8xu8((unsigned char *)decode_matrix, m, k); - printf("orig data:\n"); - dump_matrix(update_buffs, m, 25); - printf("orig :"); - dump(update_buffs[src_err_list[i]], 25); - printf("recov %d:", src_err_list[i]); - dump(temp_buffs[k + i], 25); - re = -1; - goto exit; - } - } + } + + // Test size alignment + + align = (LEN_ALIGN_CHK_B != 0) ? 13 : ALIGN_SIZE; + + for (size = TEST_LEN; size >= 0; size -= align) { + while ((m = (rand() % MMAX)) < 2) + ; + while ((k = (rand() % KMAX)) >= m || k < 1) + ; + + if (m > MMAX || k > KMAX) + continue; + + // Zero the destination buffer for update function + for (i = k; i < TEST_SOURCES; i++) { + memset(buffs[i], 0, size); + memset(update_buffs[i], 0, size); + } + // Make random data + for (i = 0; i < k; i++) { + for (j = 0; j < size; j++) { + buffs[i][j] = rand(); + update_buffs[i][j] = buffs[i][j]; + } + } + + // The matrix generated by gf_gen_cauchy1_matrix + // is always invertable. + gf_gen_cauchy1_matrix(encode_matrix, m, k); + + // Make parity vects + // Generate g_tbls from encode matrix a + ec_init_tables(k, m - k, &encode_matrix[k * k], g_tbls); + // Perform matrix dot_prod for EC encoding + // using g_tbls from encode matrix a + REF_FUNCTION(size, k, m - k, g_tbls, buffs, &buffs[k]); + for (i = 0; i < k; i++) { + FUNCTION_UNDER_TEST(size, k, m - k, i, g_tbls, update_buffs[i], + &update_buffs[k]); + } + for (i = 0; i < m - k; i++) { + if (0 != memcmp(update_buffs[k + i], buffs[k + i], size)) { + printf("\nupdate_buffs%d (size=%d) :", i, size); + dump(update_buffs[k + i], 25); + printf("buffs%d (size=%d) :", i, size); + dump(buffs[k + i], 25); + re = -1; + goto exit; + } + } + + // Random errors + memset(src_in_err, 0, TEST_SOURCES); + gen_err_list(src_err_list, src_in_err, &nerrs, &nsrcerrs, k, m); + // Generate decode matrix + re = gf_gen_decode_matrix(encode_matrix, decode_matrix, invert_matrix, decode_index, + src_err_list, src_in_err, nerrs, nsrcerrs, k, m); + if (re != 0) { + printf("Fail to gf_gen_decode_matrix\n"); + goto exit; + } + // Pack recovery array as list of valid sources + // Its order must be the same as the order + // to generate matrix b in gf_gen_decode_matrix + for (i = 0; i < k; i++) { + recov[i] = update_buffs[decode_index[i]]; + } + + // Recover data + for (i = 0; i < TEST_SOURCES; i++) { + memset(temp_buffs[i], 0, TEST_LEN); + } + ec_init_tables(k, nerrs, decode_matrix, g_tbls); + for (i = 0; i < k; i++) { + FUNCTION_UNDER_TEST(size, k, nerrs, i, g_tbls, recov[i], &temp_buffs[k]); + } + + for (i = 0; i < nerrs; i++) { + + if (0 != memcmp(temp_buffs[k + i], update_buffs[src_err_list[i]], size)) { + printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs); + printf(" - erase list = "); + for (j = 0; j < nerrs; j++) + printf(" %d", src_err_list[j]); + printf(" - Index = "); + for (p = 0; p < k; p++) + printf(" %d", decode_index[p]); + printf("\nencode_matrix:\n"); + dump_u8xu8((unsigned char *) encode_matrix, m, k); + printf("inv b:\n"); + dump_u8xu8((unsigned char *) invert_matrix, k, k); + printf("\ndecode_matrix:\n"); + dump_u8xu8((unsigned char *) decode_matrix, m, k); + printf("orig data:\n"); + dump_matrix(update_buffs, m, 25); + printf("orig :"); + dump(update_buffs[src_err_list[i]], 25); + printf("recov %d:", src_err_list[i]); + dump(temp_buffs[k + i], 25); + re = -1; + goto exit; + } + } #ifdef TEST_VERBOSE - putchar('.'); + putchar('.'); #endif - } - - printf("done EC tests: Pass\n"); - re = 0; - - exit: - for (i = 0; i < TEST_SOURCES; i++) { - if (buffs[i]) - aligned_free(buffs[i]); - if (temp_buffs[i]) - aligned_free(temp_buffs[i]); - if (update_buffs[i]) - aligned_free(update_buffs[i]); - } - free(encode_matrix); - free(decode_matrix); - free(invert_matrix); - free(g_tbls); - return 0; + } + + printf("done EC tests: Pass\n"); + re = 0; + +exit: + for (i = 0; i < TEST_SOURCES; i++) { + if (buffs[i]) + aligned_free(buffs[i]); + if (temp_buffs[i]) + aligned_free(temp_buffs[i]); + if (update_buffs[i]) + aligned_free(update_buffs[i]); + } + free(encode_matrix); + free(decode_matrix); + free(invert_matrix); + free(g_tbls); + return 0; } diff --git a/erasure_code/gen_rs_matrix_limits.c b/erasure_code/gen_rs_matrix_limits.c index 18a55908..3b017d97 100644 --- a/erasure_code/gen_rs_matrix_limits.c +++ b/erasure_code/gen_rs_matrix_limits.c @@ -3,114 +3,117 @@ #include #include "erasure_code.h" -#define MAX_CHECK 63 /* Size is limited by using uint64_t to represent subsets */ -#define M_MAX 0x20 -#define K_MAX 0x10 -#define ROWS M_MAX -#define COLS K_MAX - -static inline uint64_t min(const uint64_t a, const uint64_t b) +#define MAX_CHECK 63 /* Size is limited by using uint64_t to represent subsets */ +#define M_MAX 0x20 +#define K_MAX 0x10 +#define ROWS M_MAX +#define COLS K_MAX + +static inline uint64_t +min(const uint64_t a, const uint64_t b) { - if (a <= b) - return a; - else - return b; + if (a <= b) + return a; + else + return b; } -void gen_sub_matrix(unsigned char *out_matrix, const uint64_t dim, unsigned char *in_matrix, - const uint64_t rows, const uint64_t cols, const uint64_t row_indicator, - const uint64_t col_indicator) +void +gen_sub_matrix(unsigned char *out_matrix, const uint64_t dim, unsigned char *in_matrix, + const uint64_t rows, const uint64_t cols, const uint64_t row_indicator, + const uint64_t col_indicator) { - uint64_t i, j, r, s; - - for (i = 0, r = 0; i < rows; i++) { - if (!(row_indicator & ((uint64_t) 1 << i))) - continue; - - for (j = 0, s = 0; j < cols; j++) { - if (!(col_indicator & ((uint64_t) 1 << j))) - continue; - out_matrix[dim * r + s] = in_matrix[cols * i + j]; - s++; - } - r++; - } + uint64_t i, j, r, s; + + for (i = 0, r = 0; i < rows; i++) { + if (!(row_indicator & ((uint64_t) 1 << i))) + continue; + + for (j = 0, s = 0; j < cols; j++) { + if (!(col_indicator & ((uint64_t) 1 << j))) + continue; + out_matrix[dim * r + s] = in_matrix[cols * i + j]; + s++; + } + r++; + } } /* Gosper's Hack */ -uint64_t next_subset(uint64_t * subset, uint64_t element_count, uint64_t subsize) +uint64_t +next_subset(uint64_t *subset, uint64_t element_count, uint64_t subsize) { - uint64_t tmp1 = *subset & -*subset; - uint64_t tmp2 = *subset + tmp1; - *subset = (((*subset ^ tmp2) >> 2) / tmp1) | tmp2; - if (*subset & (((uint64_t) 1 << element_count))) { - /* Overflow on last subset */ - *subset = ((uint64_t) 1 << subsize) - 1; - return 1; - } - - return 0; + uint64_t tmp1 = *subset & -*subset; + uint64_t tmp2 = *subset + tmp1; + *subset = (((*subset ^ tmp2) >> 2) / tmp1) | tmp2; + if (*subset & (((uint64_t) 1 << element_count))) { + /* Overflow on last subset */ + *subset = ((uint64_t) 1 << subsize) - 1; + return 1; + } + + return 0; } -int are_submatrices_singular(unsigned char *vmatrix, const uint64_t rows, const uint64_t cols) +int +are_submatrices_singular(unsigned char *vmatrix, const uint64_t rows, const uint64_t cols) { - unsigned char matrix[COLS * COLS]; - unsigned char invert_matrix[COLS * COLS]; - uint64_t subsize; - - /* Check all square subsize x subsize submatrices of the rows x cols - * vmatrix for singularity*/ - for (subsize = 1; subsize <= min(rows, cols); subsize++) { - const uint64_t subset_init = (1ULL << subsize) - 1ULL; - uint64_t col_indicator = subset_init; - do { - uint64_t row_indicator = subset_init; - do { - gen_sub_matrix(matrix, subsize, vmatrix, rows, - cols, row_indicator, col_indicator); - if (gf_invert_matrix(matrix, invert_matrix, (int)subsize)) - return 1; - - } while (next_subset(&row_indicator, rows, subsize) == 0); - } while (next_subset(&col_indicator, cols, subsize) == 0); - } - - return 0; + unsigned char matrix[COLS * COLS]; + unsigned char invert_matrix[COLS * COLS]; + uint64_t subsize; + + /* Check all square subsize x subsize submatrices of the rows x cols + * vmatrix for singularity*/ + for (subsize = 1; subsize <= min(rows, cols); subsize++) { + const uint64_t subset_init = (1ULL << subsize) - 1ULL; + uint64_t col_indicator = subset_init; + do { + uint64_t row_indicator = subset_init; + do { + gen_sub_matrix(matrix, subsize, vmatrix, rows, cols, row_indicator, + col_indicator); + if (gf_invert_matrix(matrix, invert_matrix, (int) subsize)) + return 1; + + } while (next_subset(&row_indicator, rows, subsize) == 0); + } while (next_subset(&col_indicator, cols, subsize) == 0); + } + + return 0; } -int main(int argc, char **argv) +int +main(int argc, char **argv) { - unsigned char vmatrix[(ROWS + COLS) * COLS]; - uint64_t rows, cols; - - if (K_MAX > MAX_CHECK) { - printf("K_MAX too large for this test\n"); - return 0; - } - if (M_MAX > MAX_CHECK) { - printf("M_MAX too large for this test\n"); - return 0; - } - if (M_MAX < K_MAX) { - printf("M_MAX must be smaller than K_MAX"); - return 0; - } - - printf("Checking gen_rs_matrix for k <= %d and m <= %d.\n", K_MAX, M_MAX); - printf("gen_rs_matrix creates erasure codes for:\n"); - - for (cols = 1; cols <= K_MAX; cols++) { - for (rows = 1; rows <= M_MAX - cols; rows++) { - gf_gen_rs_matrix(vmatrix, rows + cols, cols); - - /* Verify the Vandermonde portion of vmatrix contains no - * singular submatrix */ - if (are_submatrices_singular(&vmatrix[cols * cols], rows, cols)) - break; - - } - printf(" k = %2u, m <= %2u \n", (unsigned)cols, (unsigned)(rows + cols - 1)); - - } - return 0; + unsigned char vmatrix[(ROWS + COLS) * COLS]; + uint64_t rows, cols; + + if (K_MAX > MAX_CHECK) { + printf("K_MAX too large for this test\n"); + return 0; + } + if (M_MAX > MAX_CHECK) { + printf("M_MAX too large for this test\n"); + return 0; + } + if (M_MAX < K_MAX) { + printf("M_MAX must be smaller than K_MAX"); + return 0; + } + + printf("Checking gen_rs_matrix for k <= %d and m <= %d.\n", K_MAX, M_MAX); + printf("gen_rs_matrix creates erasure codes for:\n"); + + for (cols = 1; cols <= K_MAX; cols++) { + for (rows = 1; rows <= M_MAX - cols; rows++) { + gf_gen_rs_matrix(vmatrix, rows + cols, cols); + + /* Verify the Vandermonde portion of vmatrix contains no + * singular submatrix */ + if (are_submatrices_singular(&vmatrix[cols * cols], rows, cols)) + break; + } + printf(" k = %2u, m <= %2u \n", (unsigned) cols, (unsigned) (rows + cols - 1)); + } + return 0; } diff --git a/erasure_code/gf_inverse_test.c b/erasure_code/gf_inverse_test.c index 1aa14ad5..c1ec1f00 100644 --- a/erasure_code/gf_inverse_test.c +++ b/erasure_code/gf_inverse_test.c @@ -29,7 +29,7 @@ #include #include -#include // for memset, memcmp +#include // for memset, memcmp #include #include "erasure_code.h" @@ -37,202 +37,194 @@ #define TEST_LEN 8192 #ifndef TEST_SOURCES -# define TEST_SOURCES 128 +#define TEST_SOURCES 128 #endif #ifndef RANDOMS -# define RANDOMS 200 +#define RANDOMS 200 #endif #define KMAX TEST_SOURCES typedef unsigned char u8; -void matrix_mult(u8 * a, u8 * b, u8 * c, int n) +void +matrix_mult(u8 *a, u8 *b, u8 *c, int n) { - int i, j, k; - u8 d; - - for (i = 0; i < n; i++) { - for (j = 0; j < n; j++) { - d = 0; - for (k = 0; k < n; k++) { - d ^= gf_mul(a[n * i + k], b[n * k + j]); - } - c[i * n + j] = d; - } - } + int i, j, k; + u8 d; + + for (i = 0; i < n; i++) { + for (j = 0; j < n; j++) { + d = 0; + for (k = 0; k < n; k++) { + d ^= gf_mul(a[n * i + k], b[n * k + j]); + } + c[i * n + j] = d; + } + } } -void print_matrix(u8 * a, int n) +void +print_matrix(u8 *a, int n) { - int i, j; - - for (i = 0; i < n; i++) { - for (j = 0; j < n; j++) { - printf(" %2x", a[i * n + j]); - } - printf("\n"); - } - printf("\n"); + int i, j; + + for (i = 0; i < n; i++) { + for (j = 0; j < n; j++) { + printf(" %2x", a[i * n + j]); + } + printf("\n"); + } + printf("\n"); } -int is_ident(u8 * a, const int n) +int +is_ident(u8 *a, const int n) { - int i, j; - u8 c; - for (i = 0; i < n; i++) { - for (j = 0; j < n; j++) { - c = *a++; - if (i == j) - c--; - if (c != 0) - return -1; - } - } - return 0; + int i, j; + u8 c; + for (i = 0; i < n; i++) { + for (j = 0; j < n; j++) { + c = *a++; + if (i == j) + c--; + if (c != 0) + return -1; + } + } + return 0; } -int inv_test(u8 * in, u8 * inv, u8 * sav, int n) +int +inv_test(u8 *in, u8 *inv, u8 *sav, int n) { - memcpy(sav, in, n * n); - - if (gf_invert_matrix(in, inv, n)) { - printf("Given singular matrix\n"); - print_matrix(sav, n); - return -1; - } - - matrix_mult(inv, sav, in, n); - - if (is_ident(in, n)) { - printf("fail\n"); - print_matrix(sav, n); - print_matrix(inv, n); - print_matrix(in, n); - return -1; - } + memcpy(sav, in, n * n); + + if (gf_invert_matrix(in, inv, n)) { + printf("Given singular matrix\n"); + print_matrix(sav, n); + return -1; + } + + matrix_mult(inv, sav, in, n); + + if (is_ident(in, n)) { + printf("fail\n"); + print_matrix(sav, n); + print_matrix(inv, n); + print_matrix(in, n); + return -1; + } #ifdef TEST_VERBOSE - putchar('.'); + putchar('.'); #endif - return 0; + return 0; } -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - int i, k, t; - u8 *test_mat = NULL, *save_mat = NULL, *invr_mat = NULL; - int ret = -1; - - u8 test1[] = { 1, 1, 6, - 1, 1, 1, - 7, 1, 9 - }; - - u8 test2[] = { 0, 1, 6, - 1, 0, 1, - 0, 1, 9 - }; - - u8 test3[] = { 0, 0, 1, - 1, 0, 0, - 0, 1, 1 - }; - - u8 test4[] = { 0, 1, 6, 7, - 1, 1, 0, 0, - 0, 1, 2, 3, - 3, 2, 2, 3 - }; // = row3+3*row2 - - printf("gf_inverse_test: max=%d ", KMAX); - - test_mat = malloc(KMAX * KMAX); - save_mat = malloc(KMAX * KMAX); - invr_mat = malloc(KMAX * KMAX); - - if (NULL == test_mat || NULL == save_mat || NULL == invr_mat) - goto exit; - - // Test with lots of leading 1's - k = 3; - memcpy(test_mat, test1, k * k); - if (inv_test(test_mat, invr_mat, save_mat, k)) - goto exit; - - // Test with leading zeros - k = 3; - memcpy(test_mat, test2, k * k); - if (inv_test(test_mat, invr_mat, save_mat, k)) - goto exit; - - // Test 3 - k = 3; - memcpy(test_mat, test3, k * k); - if (inv_test(test_mat, invr_mat, save_mat, k)) - goto exit; - - // Test 4 - try a singular matrix - k = 4; - memcpy(test_mat, test4, k * k); - if (!gf_invert_matrix(test_mat, invr_mat, k)) { - printf("Fail: didn't catch singular matrix\n"); - print_matrix(test4, 4); - goto exit; - } - // Do random test of size KMAX - k = KMAX; - - for (i = 0; i < k * k; i++) - test_mat[i] = save_mat[i] = rand(); - - if (gf_invert_matrix(test_mat, invr_mat, k)) { - printf("rand picked a singular matrix, try again\n"); - goto exit; - } - - matrix_mult(invr_mat, save_mat, test_mat, k); - - if (is_ident(test_mat, k)) { - printf("fail\n"); - print_matrix(save_mat, k); - print_matrix(invr_mat, k); - print_matrix(test_mat, k); - goto exit; - } - // Do Randoms. Random size and coefficients - for (t = 0; t < RANDOMS; t++) { - k = rand() % KMAX; - - for (i = 0; i < k * k; i++) - test_mat[i] = save_mat[i] = rand(); - - if (gf_invert_matrix(test_mat, invr_mat, k)) - continue; - - matrix_mult(invr_mat, save_mat, test_mat, k); - - if (is_ident(test_mat, k)) { - printf("fail rand k=%d\n", k); - print_matrix(save_mat, k); - print_matrix(invr_mat, k); - print_matrix(test_mat, k); - goto exit; - } + int i, k, t; + u8 *test_mat = NULL, *save_mat = NULL, *invr_mat = NULL; + int ret = -1; + + u8 test1[] = { 1, 1, 6, 1, 1, 1, 7, 1, 9 }; + + u8 test2[] = { 0, 1, 6, 1, 0, 1, 0, 1, 9 }; + + u8 test3[] = { 0, 0, 1, 1, 0, 0, 0, 1, 1 }; + + u8 test4[] = { 0, 1, 6, 7, 1, 1, 0, 0, 0, 1, 2, 3, 3, 2, 2, 3 }; // = row3+3*row2 + + printf("gf_inverse_test: max=%d ", KMAX); + + test_mat = malloc(KMAX * KMAX); + save_mat = malloc(KMAX * KMAX); + invr_mat = malloc(KMAX * KMAX); + + if (NULL == test_mat || NULL == save_mat || NULL == invr_mat) + goto exit; + + // Test with lots of leading 1's + k = 3; + memcpy(test_mat, test1, k * k); + if (inv_test(test_mat, invr_mat, save_mat, k)) + goto exit; + + // Test with leading zeros + k = 3; + memcpy(test_mat, test2, k * k); + if (inv_test(test_mat, invr_mat, save_mat, k)) + goto exit; + + // Test 3 + k = 3; + memcpy(test_mat, test3, k * k); + if (inv_test(test_mat, invr_mat, save_mat, k)) + goto exit; + + // Test 4 - try a singular matrix + k = 4; + memcpy(test_mat, test4, k * k); + if (!gf_invert_matrix(test_mat, invr_mat, k)) { + printf("Fail: didn't catch singular matrix\n"); + print_matrix(test4, 4); + goto exit; + } + // Do random test of size KMAX + k = KMAX; + + for (i = 0; i < k * k; i++) + test_mat[i] = save_mat[i] = rand(); + + if (gf_invert_matrix(test_mat, invr_mat, k)) { + printf("rand picked a singular matrix, try again\n"); + goto exit; + } + + matrix_mult(invr_mat, save_mat, test_mat, k); + + if (is_ident(test_mat, k)) { + printf("fail\n"); + print_matrix(save_mat, k); + print_matrix(invr_mat, k); + print_matrix(test_mat, k); + goto exit; + } + // Do Randoms. Random size and coefficients + for (t = 0; t < RANDOMS; t++) { + k = rand() % KMAX; + + for (i = 0; i < k * k; i++) + test_mat[i] = save_mat[i] = rand(); + + if (gf_invert_matrix(test_mat, invr_mat, k)) + continue; + + matrix_mult(invr_mat, save_mat, test_mat, k); + + if (is_ident(test_mat, k)) { + printf("fail rand k=%d\n", k); + print_matrix(save_mat, k); + print_matrix(invr_mat, k); + print_matrix(test_mat, k); + goto exit; + } #ifdef TEST_VERBOSE - if (0 == (t % 8)) - putchar('.'); + if (0 == (t % 8)) + putchar('.'); #endif - } + } - printf(" Pass\n"); + printf(" Pass\n"); - ret = 0; + ret = 0; - exit: - free(test_mat); - free(save_mat); - free(invr_mat); +exit: + free(test_mat); + free(save_mat); + free(invr_mat); - return ret; + return ret; } diff --git a/erasure_code/gf_vect_dot_prod_1tbl.c b/erasure_code/gf_vect_dot_prod_1tbl.c index e5369be7..34ad01d8 100644 --- a/erasure_code/gf_vect_dot_prod_1tbl.c +++ b/erasure_code/gf_vect_dot_prod_1tbl.c @@ -29,26 +29,26 @@ #include #include -#include // for memset, memcmp +#include // for memset, memcmp #include "test.h" #include "erasure_code.h" #ifndef GT_L3_CACHE -# define GT_L3_CACHE 32*1024*1024 /* some number > last level cache */ +#define GT_L3_CACHE 32 * 1024 * 1024 /* some number > last level cache */ #endif #if !defined(COLD_TEST) && !defined(TEST_CUSTOM) // Cached test, loop many times over small dataset -# define TEST_SOURCES 10 -# define TEST_LEN 8*1024 -# define TEST_TYPE_STR "_warm" -#elif defined (COLD_TEST) +#define TEST_SOURCES 10 +#define TEST_LEN 8 * 1024 +#define TEST_TYPE_STR "_warm" +#elif defined(COLD_TEST) // Uncached test. Pull from large mem base. -# define TEST_SOURCES 10 -# define TEST_LEN (GT_L3_CACHE / TEST_SOURCES) -# define TEST_TYPE_STR "_cold" -#elif defined (TEST_CUSTOM) -# define TEST_TYPE_STR "_cus" +#define TEST_SOURCES 10 +#define TEST_LEN (GT_L3_CACHE / TEST_SOURCES) +#define TEST_TYPE_STR "_cold" +#elif defined(TEST_CUSTOM) +#define TEST_TYPE_STR "_cus" #endif typedef unsigned char u8; @@ -58,105 +58,108 @@ u8 gff[256]; u8 gflog[256]; u8 gf_mul_table[256 * 256]; -void mk_gf_field(void) +void +mk_gf_field(void) { - int i; - u8 s = 1; - gflog[0] = 0; - - for (i = 0; i < 256; i++) { - gff[i] = s; - gflog[s] = i; - s = (s << 1) ^ ((s & 0x80) ? 0x1d : 0); // mult by GF{2} - } + int i; + u8 s = 1; + gflog[0] = 0; + + for (i = 0; i < 256; i++) { + gff[i] = s; + gflog[s] = i; + s = (s << 1) ^ ((s & 0x80) ? 0x1d : 0); // mult by GF{2} + } } -void mk_gf_mul_table(u8 * table) +void +mk_gf_mul_table(u8 *table) { - // Populate a single table with all multiply combinations for a fast, - // single-table lookup of GF(2^8) multiply at the expense of memory. - int i, j; - for (i = 0; i < 256; i++) - for (j = 0; j < 256; j++) - table[i * 256 + j] = gf_mul(i, j); + // Populate a single table with all multiply combinations for a fast, + // single-table lookup of GF(2^8) multiply at the expense of memory. + int i, j; + for (i = 0; i < 256; i++) + for (j = 0; j < 256; j++) + table[i * 256 + j] = gf_mul(i, j); } -void gf_vect_dot_prod_ref(int len, int vlen, u8 * v, u8 ** src, u8 * dest) +void +gf_vect_dot_prod_ref(int len, int vlen, u8 *v, u8 **src, u8 *dest) { - int i, j; - u8 s; - for (i = 0; i < len; i++) { - s = 0; - for (j = 0; j < vlen; j++) - s ^= gf_mul(src[j][i], v[j]); - - dest[i] = s; - } + int i, j; + u8 s; + for (i = 0; i < len; i++) { + s = 0; + for (j = 0; j < vlen; j++) + s ^= gf_mul(src[j][i], v[j]); + + dest[i] = s; + } } -void gf_vect_dot_prod_mult(int len, int vlen, u8 * v, u8 ** src, u8 * dest) +void +gf_vect_dot_prod_mult(int len, int vlen, u8 *v, u8 **src, u8 *dest) { - int i, j; - u8 s; - for (i = 0; i < len; i++) { - s = 0; - for (j = 0; j < vlen; j++) { - s ^= gf_mul_table[v[j] * 256 + src[j][i]]; - } - dest[i] = s; - } - + int i, j; + u8 s; + for (i = 0; i < len; i++) { + s = 0; + for (j = 0; j < vlen; j++) { + s ^= gf_mul_table[v[j] * 256 + src[j][i]]; + } + dest[i] = s; + } } -int main(void) +int +main(void) { - int i, j; - u8 vec[TEST_SOURCES], *dest1, *dest2; - u8 *matrix[TEST_SOURCES]; - struct perf start; - - dest1 = (u8 *) malloc(TEST_LEN); - dest2 = (u8 *) malloc(TEST_LEN); - - if (NULL == dest1 || NULL == dest2) { - printf("buffer alloc error\n"); - return -1; - } - memset(dest1, 0xfe, TEST_LEN); - memset(dest2, 0xfe, TEST_LEN); - - mk_gf_field(); - mk_gf_mul_table(gf_mul_table); - - //generate random vector and matrix/data - for (i = 0; i < TEST_SOURCES; i++) { - vec[i] = rand(); - - if (!(matrix[i] = malloc(TEST_LEN))) { - fprintf(stderr, "Error failure\n\n"); - return -1; - } - for (j = 0; j < TEST_LEN; j++) - matrix[i][j] = rand(); - - } - - BENCHMARK(&start, BENCHMARK_TIME, - gf_vect_dot_prod_ref(TEST_LEN, TEST_SOURCES, vec, matrix, dest1)); - printf("gf_vect_dot_prod_2tbl" TEST_TYPE_STR ": "); - perf_print(start, (long long)TEST_LEN * (TEST_SOURCES + 1)); - - BENCHMARK(&start, BENCHMARK_TIME, - gf_vect_dot_prod_mult(TEST_LEN, TEST_SOURCES, vec, matrix, dest2)); - printf("gf_vect_dot_prod_1tbl" TEST_TYPE_STR ": "); - perf_print(start, (long long)TEST_LEN * (TEST_SOURCES + 1)); - - // Compare with reference function - if (0 != memcmp(dest1, dest2, TEST_LEN)) { - printf("Error, different results!\n\n"); - return -1; - } - - printf("Pass functional test\n"); - return 0; + int i, j; + u8 vec[TEST_SOURCES], *dest1, *dest2; + u8 *matrix[TEST_SOURCES]; + struct perf start; + + dest1 = (u8 *) malloc(TEST_LEN); + dest2 = (u8 *) malloc(TEST_LEN); + + if (NULL == dest1 || NULL == dest2) { + printf("buffer alloc error\n"); + return -1; + } + memset(dest1, 0xfe, TEST_LEN); + memset(dest2, 0xfe, TEST_LEN); + + mk_gf_field(); + mk_gf_mul_table(gf_mul_table); + + // generate random vector and matrix/data + for (i = 0; i < TEST_SOURCES; i++) { + vec[i] = rand(); + + if (!(matrix[i] = malloc(TEST_LEN))) { + fprintf(stderr, "Error failure\n\n"); + return -1; + } + for (j = 0; j < TEST_LEN; j++) + matrix[i][j] = rand(); + } + + BENCHMARK(&start, BENCHMARK_TIME, + gf_vect_dot_prod_ref(TEST_LEN, TEST_SOURCES, vec, matrix, dest1)); + printf("gf_vect_dot_prod_2tbl" TEST_TYPE_STR ": "); + perf_print(start, (long long) TEST_LEN * (TEST_SOURCES + 1)); + + BENCHMARK(&start, BENCHMARK_TIME, + gf_vect_dot_prod_mult(TEST_LEN, TEST_SOURCES, vec, matrix, dest2)); + printf("gf_vect_dot_prod_1tbl" TEST_TYPE_STR ": "); + perf_print(start, (long long) TEST_LEN * (TEST_SOURCES + 1)); + + // Compare with reference function + if (0 != memcmp(dest1, dest2, TEST_LEN)) { + printf("Error, different results!\n\n"); + return -1; + } + + printf("Pass functional test\n"); + return 0; } diff --git a/erasure_code/gf_vect_dot_prod_base_test.c b/erasure_code/gf_vect_dot_prod_base_test.c index 0cfd4444..e06ae5a6 100644 --- a/erasure_code/gf_vect_dot_prod_base_test.c +++ b/erasure_code/gf_vect_dot_prod_base_test.c @@ -29,19 +29,19 @@ #include #include -#include // for memset, memcmp +#include // for memset, memcmp #include #include "erasure_code.h" #include "test.h" -#define TEST_LEN 8192 -#define TEST_SIZE (TEST_LEN/2) +#define TEST_LEN 8192 +#define TEST_SIZE (TEST_LEN / 2) #ifndef TEST_SOURCES -# define TEST_SOURCES 250 +#define TEST_SOURCES 250 #endif #ifndef RANDOMS -# define RANDOMS 20 +#define RANDOMS 20 #endif #define MMAX TEST_SOURCES @@ -49,244 +49,251 @@ typedef unsigned char u8; -void dump(unsigned char *buf, int len) +void +dump(unsigned char *buf, int len) { - int i; - for (i = 0; i < len;) { - printf(" %2x", 0xff & buf[i++]); - if (i % 32 == 0) - printf("\n"); - } - printf("\n"); + int i; + for (i = 0; i < len;) { + printf(" %2x", 0xff & buf[i++]); + if (i % 32 == 0) + printf("\n"); + } + printf("\n"); } -void dump_matrix(unsigned char **s, int k, int m) +void +dump_matrix(unsigned char **s, int k, int m) { - int i, j; - for (i = 0; i < k; i++) { - for (j = 0; j < m; j++) { - printf(" %2x", s[i][j]); - } - printf("\n"); - } - printf("\n"); + int i, j; + for (i = 0; i < k; i++) { + for (j = 0; j < m; j++) { + printf(" %2x", s[i][j]); + } + printf("\n"); + } + printf("\n"); } -void dump_u8xu8(unsigned char *s, int k, int m) +void +dump_u8xu8(unsigned char *s, int k, int m) { - int i, j; - for (i = 0; i < k; i++) { - for (j = 0; j < m; j++) { - printf(" %2x", 0xff & s[j + (i * m)]); - } - printf("\n"); - } - printf("\n"); + int i, j; + for (i = 0; i < k; i++) { + for (j = 0; j < m; j++) { + printf(" %2x", 0xff & s[j + (i * m)]); + } + printf("\n"); + } + printf("\n"); } -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - int i, j, rtest, m, k, nerrs, r, err; - void *buf; - u8 g[TEST_SOURCES], g_tbls[TEST_SOURCES * 32], src_in_err[TEST_SOURCES]; - u8 *dest, *dest_ref, *temp_buff, *buffs[TEST_SOURCES]; - u8 a[MMAX * KMAX], b[MMAX * KMAX], d[MMAX * KMAX]; - u8 src_err_list[TEST_SOURCES], *recov[TEST_SOURCES]; - - printf("gf_vect_dot_prod_base: %dx%d ", TEST_SOURCES, TEST_LEN); - - // Allocate the arrays - for (i = 0; i < TEST_SOURCES; i++) { - if (posix_memalign(&buf, 64, TEST_LEN)) { - printf("alloc error: Fail"); - return -1; - } - buffs[i] = buf; - } - - if (posix_memalign(&buf, 64, TEST_LEN)) { - printf("alloc error: Fail"); - return -1; - } - dest = buf; - - if (posix_memalign(&buf, 64, TEST_LEN)) { - printf("alloc error: Fail"); - return -1; - } - dest_ref = buf; - - if (posix_memalign(&buf, 64, TEST_LEN)) { - printf("alloc error: Fail"); - return -1; - } - temp_buff = buf; - - // Init - for (i = 0; i < TEST_SOURCES; i++) - memset(buffs[i], 0, TEST_LEN); - - memset(dest, 0, TEST_LEN); - memset(temp_buff, 0, TEST_LEN); - memset(dest_ref, 0, TEST_LEN); - memset(g, 0, TEST_SOURCES); - - // Test erasure code using gf_vect_dot_prod - // Pick a first test - m = 9; - k = 5; - assert(!(m > MMAX || k > KMAX)); - - gf_gen_cauchy1_matrix(a, m, k); - - // Make random data - for (i = 0; i < k; i++) - for (j = 0; j < TEST_LEN; j++) - buffs[i][j] = rand(); - - // Make parity vects - for (i = k; i < m; i++) { - for (j = 0; j < k; j++) - gf_vect_mul_init(a[k * i + j], &g_tbls[j * 32]); - - gf_vect_dot_prod_base(TEST_LEN, k, g_tbls, buffs, buffs[i]); - } - - // Random buffers in erasure - memset(src_in_err, 0, TEST_SOURCES); - for (i = 0, nerrs = 0; i < k && nerrs < m - k; i++) { - err = 1 & rand(); - src_in_err[i] = err; - if (err) - src_err_list[nerrs++] = i; - } - - // construct b by removing error rows - for (i = 0, r = 0; i < k; i++, r++) { - while (src_in_err[r]) { - r++; - continue; - } - for (j = 0; j < k; j++) - b[k * i + j] = a[k * r + j]; - } - - if (gf_invert_matrix((u8 *) b, (u8 *) d, k) < 0) - printf("BAD MATRIX\n"); - - for (i = 0, r = 0; i < k; i++, r++) { - while (src_in_err[r]) { - r++; - continue; - } - recov[i] = buffs[r]; - } - - // Recover data - for (i = 0; i < nerrs; i++) { - for (j = 0; j < k; j++) - gf_vect_mul_init(d[k * src_err_list[i] + j], &g_tbls[j * 32]); - - gf_vect_dot_prod_base(TEST_LEN, k, g_tbls, recov, temp_buff); - - if (0 != memcmp(temp_buff, buffs[src_err_list[i]], TEST_LEN)) { - printf("Fail error recovery (%d, %d, %d)\n", m, k, nerrs); - printf("recov %d:", src_err_list[i]); - dump(temp_buff, 25); - printf("orig :"); - dump(buffs[src_err_list[i]], 25); - return -1; - } - } - - // Do more random tests - - for (rtest = 0; rtest < RANDOMS; rtest++) { - while ((m = (rand() % MMAX)) < 2) ; - while ((k = (rand() % KMAX)) >= m || k < 1) ; - - if (m > MMAX || k > KMAX) - continue; - - gf_gen_cauchy1_matrix(a, m, k); - - // Make random data - for (i = 0; i < k; i++) - for (j = 0; j < TEST_LEN; j++) - buffs[i][j] = rand(); - - // Make parity vects - for (i = k; i < m; i++) { - for (j = 0; j < k; j++) - gf_vect_mul_init(a[k * i + j], &g_tbls[j * 32]); - - gf_vect_dot_prod_base(TEST_LEN, k, g_tbls, buffs, buffs[i]); - } - - // Random errors - memset(src_in_err, 0, TEST_SOURCES); - for (i = 0, nerrs = 0; i < k && nerrs < m - k; i++) { - err = 1 & rand(); - src_in_err[i] = err; - if (err) - src_err_list[nerrs++] = i; - } - if (nerrs == 0) { // should have at least one error - while ((err = (rand() % KMAX)) >= k) ; - src_err_list[nerrs++] = err; - src_in_err[err] = 1; - } - // construct b by removing error rows - for (i = 0, r = 0; i < k; i++, r++) { - while (src_in_err[r]) { - r++; - continue; - } - for (j = 0; j < k; j++) - b[k * i + j] = a[k * r + j]; - } - - if (gf_invert_matrix((u8 *) b, (u8 *) d, k) < 0) - printf("BAD MATRIX\n"); - - for (i = 0, r = 0; i < k; i++, r++) { - while (src_in_err[r]) { - r++; - continue; - } - recov[i] = buffs[r]; - } - - // Recover data - for (i = 0; i < nerrs; i++) { - for (j = 0; j < k; j++) - gf_vect_mul_init(d[k * src_err_list[i] + j], &g_tbls[j * 32]); - - gf_vect_dot_prod_base(TEST_LEN, k, g_tbls, recov, temp_buff); - - if (0 != memcmp(temp_buff, buffs[src_err_list[i]], TEST_LEN)) { - printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs); - printf(" - erase list = "); - for (i = 0; i < nerrs; i++) - printf(" %d", src_err_list[i]); - printf("\na:\n"); - dump_u8xu8((u8 *) a, m, k); - printf("inv b:\n"); - dump_u8xu8((u8 *) d, k, k); - printf("orig data:\n"); - dump_matrix(buffs, m, 25); - printf("orig :"); - dump(buffs[src_err_list[i]], 25); - printf("recov %d:", src_err_list[i]); - dump(temp_buff, 25); - return -1; - } - } + int i, j, rtest, m, k, nerrs, r, err; + void *buf; + u8 g[TEST_SOURCES], g_tbls[TEST_SOURCES * 32], src_in_err[TEST_SOURCES]; + u8 *dest, *dest_ref, *temp_buff, *buffs[TEST_SOURCES]; + u8 a[MMAX * KMAX], b[MMAX * KMAX], d[MMAX * KMAX]; + u8 src_err_list[TEST_SOURCES], *recov[TEST_SOURCES]; + + printf("gf_vect_dot_prod_base: %dx%d ", TEST_SOURCES, TEST_LEN); + + // Allocate the arrays + for (i = 0; i < TEST_SOURCES; i++) { + if (posix_memalign(&buf, 64, TEST_LEN)) { + printf("alloc error: Fail"); + return -1; + } + buffs[i] = buf; + } + + if (posix_memalign(&buf, 64, TEST_LEN)) { + printf("alloc error: Fail"); + return -1; + } + dest = buf; + + if (posix_memalign(&buf, 64, TEST_LEN)) { + printf("alloc error: Fail"); + return -1; + } + dest_ref = buf; + + if (posix_memalign(&buf, 64, TEST_LEN)) { + printf("alloc error: Fail"); + return -1; + } + temp_buff = buf; + + // Init + for (i = 0; i < TEST_SOURCES; i++) + memset(buffs[i], 0, TEST_LEN); + + memset(dest, 0, TEST_LEN); + memset(temp_buff, 0, TEST_LEN); + memset(dest_ref, 0, TEST_LEN); + memset(g, 0, TEST_SOURCES); + + // Test erasure code using gf_vect_dot_prod + // Pick a first test + m = 9; + k = 5; + assert(!(m > MMAX || k > KMAX)); + + gf_gen_cauchy1_matrix(a, m, k); + + // Make random data + for (i = 0; i < k; i++) + for (j = 0; j < TEST_LEN; j++) + buffs[i][j] = rand(); + + // Make parity vects + for (i = k; i < m; i++) { + for (j = 0; j < k; j++) + gf_vect_mul_init(a[k * i + j], &g_tbls[j * 32]); + + gf_vect_dot_prod_base(TEST_LEN, k, g_tbls, buffs, buffs[i]); + } + + // Random buffers in erasure + memset(src_in_err, 0, TEST_SOURCES); + for (i = 0, nerrs = 0; i < k && nerrs < m - k; i++) { + err = 1 & rand(); + src_in_err[i] = err; + if (err) + src_err_list[nerrs++] = i; + } + + // construct b by removing error rows + for (i = 0, r = 0; i < k; i++, r++) { + while (src_in_err[r]) { + r++; + continue; + } + for (j = 0; j < k; j++) + b[k * i + j] = a[k * r + j]; + } + + if (gf_invert_matrix((u8 *) b, (u8 *) d, k) < 0) + printf("BAD MATRIX\n"); + + for (i = 0, r = 0; i < k; i++, r++) { + while (src_in_err[r]) { + r++; + continue; + } + recov[i] = buffs[r]; + } + + // Recover data + for (i = 0; i < nerrs; i++) { + for (j = 0; j < k; j++) + gf_vect_mul_init(d[k * src_err_list[i] + j], &g_tbls[j * 32]); + + gf_vect_dot_prod_base(TEST_LEN, k, g_tbls, recov, temp_buff); + + if (0 != memcmp(temp_buff, buffs[src_err_list[i]], TEST_LEN)) { + printf("Fail error recovery (%d, %d, %d)\n", m, k, nerrs); + printf("recov %d:", src_err_list[i]); + dump(temp_buff, 25); + printf("orig :"); + dump(buffs[src_err_list[i]], 25); + return -1; + } + } + + // Do more random tests + + for (rtest = 0; rtest < RANDOMS; rtest++) { + while ((m = (rand() % MMAX)) < 2) + ; + while ((k = (rand() % KMAX)) >= m || k < 1) + ; + + if (m > MMAX || k > KMAX) + continue; + + gf_gen_cauchy1_matrix(a, m, k); + + // Make random data + for (i = 0; i < k; i++) + for (j = 0; j < TEST_LEN; j++) + buffs[i][j] = rand(); + + // Make parity vects + for (i = k; i < m; i++) { + for (j = 0; j < k; j++) + gf_vect_mul_init(a[k * i + j], &g_tbls[j * 32]); + + gf_vect_dot_prod_base(TEST_LEN, k, g_tbls, buffs, buffs[i]); + } + + // Random errors + memset(src_in_err, 0, TEST_SOURCES); + for (i = 0, nerrs = 0; i < k && nerrs < m - k; i++) { + err = 1 & rand(); + src_in_err[i] = err; + if (err) + src_err_list[nerrs++] = i; + } + if (nerrs == 0) { // should have at least one error + while ((err = (rand() % KMAX)) >= k) + ; + src_err_list[nerrs++] = err; + src_in_err[err] = 1; + } + // construct b by removing error rows + for (i = 0, r = 0; i < k; i++, r++) { + while (src_in_err[r]) { + r++; + continue; + } + for (j = 0; j < k; j++) + b[k * i + j] = a[k * r + j]; + } + + if (gf_invert_matrix((u8 *) b, (u8 *) d, k) < 0) + printf("BAD MATRIX\n"); + + for (i = 0, r = 0; i < k; i++, r++) { + while (src_in_err[r]) { + r++; + continue; + } + recov[i] = buffs[r]; + } + + // Recover data + for (i = 0; i < nerrs; i++) { + for (j = 0; j < k; j++) + gf_vect_mul_init(d[k * src_err_list[i] + j], &g_tbls[j * 32]); + + gf_vect_dot_prod_base(TEST_LEN, k, g_tbls, recov, temp_buff); + + if (0 != memcmp(temp_buff, buffs[src_err_list[i]], TEST_LEN)) { + printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs); + printf(" - erase list = "); + for (i = 0; i < nerrs; i++) + printf(" %d", src_err_list[i]); + printf("\na:\n"); + dump_u8xu8((u8 *) a, m, k); + printf("inv b:\n"); + dump_u8xu8((u8 *) d, k, k); + printf("orig data:\n"); + dump_matrix(buffs, m, 25); + printf("orig :"); + dump(buffs[src_err_list[i]], 25); + printf("recov %d:", src_err_list[i]); + dump(temp_buff, 25); + return -1; + } + } #ifdef TEST_VERBOSE - putchar('.'); + putchar('.'); #endif - } + } - printf("done all: Pass\n"); - return 0; + printf("done all: Pass\n"); + return 0; } diff --git a/erasure_code/gf_vect_dot_prod_perf.c b/erasure_code/gf_vect_dot_prod_perf.c index 3b051c67..dcb867b6 100644 --- a/erasure_code/gf_vect_dot_prod_perf.c +++ b/erasure_code/gf_vect_dot_prod_perf.c @@ -29,146 +29,148 @@ #include #include -#include // for memset, memcmp +#include // for memset, memcmp #include "erasure_code.h" #include "test.h" #ifndef FUNCTION_UNDER_TEST -# define FUNCTION_UNDER_TEST gf_vect_dot_prod +#define FUNCTION_UNDER_TEST gf_vect_dot_prod #endif -#define str(s) #s +#define str(s) #s #define xstr(s) str(s) #ifndef GT_L3_CACHE -# define GT_L3_CACHE 32*1024*1024 /* some number > last level cache */ +#define GT_L3_CACHE 32 * 1024 * 1024 /* some number > last level cache */ #endif #if !defined(COLD_TEST) && !defined(TEST_CUSTOM) // Cached test, loop many times over small dataset -# define TEST_SOURCES 10 -# define TEST_LEN 8*1024 -# define TEST_TYPE_STR "_warm" -#elif defined (COLD_TEST) +#define TEST_SOURCES 10 +#define TEST_LEN 8 * 1024 +#define TEST_TYPE_STR "_warm" +#elif defined(COLD_TEST) // Uncached test. Pull from large mem base. -# define TEST_SOURCES 10 -# define TEST_LEN ((GT_L3_CACHE / TEST_SOURCES) & ~(64-1)) -# define TEST_TYPE_STR "_cold" -#elif defined (TEST_CUSTOM) -# define TEST_TYPE_STR "_cus" +#define TEST_SOURCES 10 +#define TEST_LEN ((GT_L3_CACHE / TEST_SOURCES) & ~(64 - 1)) +#define TEST_TYPE_STR "_cold" +#elif defined(TEST_CUSTOM) +#define TEST_TYPE_STR "_cus" #endif typedef unsigned char u8; -void dump(unsigned char *buf, int len) +void +dump(unsigned char *buf, int len) { - int i; - for (i = 0; i < len;) { - printf(" %2x", 0xff & buf[i++]); - if (i % 32 == 0) - printf("\n"); - } - printf("\n"); + int i; + for (i = 0; i < len;) { + printf(" %2x", 0xff & buf[i++]); + if (i % 32 == 0) + printf("\n"); + } + printf("\n"); } -void dump_matrix(unsigned char **s, int k, int m) +void +dump_matrix(unsigned char **s, int k, int m) { - int i, j; - for (i = 0; i < k; i++) { - for (j = 0; j < m; j++) { - printf(" %2x", s[i][j]); - } - printf("\n"); - } - printf("\n"); + int i, j; + for (i = 0; i < k; i++) { + for (j = 0; j < m; j++) { + printf(" %2x", s[i][j]); + } + printf("\n"); + } + printf("\n"); } -void vect_dot_prod_perf(void (*fun_ptr) - (int, int, unsigned char *, unsigned char **, unsigned char *), - u8 * g, u8 * g_tbls, u8 ** buffs, u8 * dest_ref) +void +vect_dot_prod_perf(void (*fun_ptr)(int, int, unsigned char *, unsigned char **, unsigned char *), + u8 *g, u8 *g_tbls, u8 **buffs, u8 *dest_ref) { - int j; - for (j = 0; j < TEST_SOURCES; j++) - gf_vect_mul_init(g[j], &g_tbls[j * 32]); + int j; + for (j = 0; j < TEST_SOURCES; j++) + gf_vect_mul_init(g[j], &g_tbls[j * 32]); - (*fun_ptr) (TEST_LEN, TEST_SOURCES, &g_tbls[0], buffs, dest_ref); + (*fun_ptr)(TEST_LEN, TEST_SOURCES, &g_tbls[0], buffs, dest_ref); } -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - int i, j; - void *buf; - u8 g[TEST_SOURCES], g_tbls[TEST_SOURCES * 32], *dest, *dest_ref; - u8 *temp_buff, *buffs[TEST_SOURCES]; - struct perf start; - - printf(xstr(FUNCTION_UNDER_TEST) ": %dx%d\n", TEST_SOURCES, TEST_LEN); - - // Allocate the arrays - for (i = 0; i < TEST_SOURCES; i++) { - if (posix_memalign(&buf, 64, TEST_LEN)) { - printf("alloc error: Fail"); - return -1; - } - buffs[i] = buf; - } - - if (posix_memalign(&buf, 64, TEST_LEN)) { - printf("alloc error: Fail"); - return -1; - } - dest = buf; - - if (posix_memalign(&buf, 64, TEST_LEN)) { - printf("alloc error: Fail"); - return -1; - } - dest_ref = buf; - - if (posix_memalign(&buf, 64, TEST_LEN)) { - printf("alloc error: Fail"); - return -1; - } - temp_buff = buf; - - // Performance test - for (i = 0; i < TEST_SOURCES; i++) - for (j = 0; j < TEST_LEN; j++) - buffs[i][j] = rand(); - - memset(dest, 0, TEST_LEN); - memset(temp_buff, 0, TEST_LEN); - memset(dest_ref, 0, TEST_LEN); - memset(g, 0, TEST_SOURCES); - - for (i = 0; i < TEST_SOURCES; i++) - g[i] = rand(); + int i, j; + void *buf; + u8 g[TEST_SOURCES], g_tbls[TEST_SOURCES * 32], *dest, *dest_ref; + u8 *temp_buff, *buffs[TEST_SOURCES]; + struct perf start; + + printf(xstr(FUNCTION_UNDER_TEST) ": %dx%d\n", TEST_SOURCES, TEST_LEN); + + // Allocate the arrays + for (i = 0; i < TEST_SOURCES; i++) { + if (posix_memalign(&buf, 64, TEST_LEN)) { + printf("alloc error: Fail"); + return -1; + } + buffs[i] = buf; + } + + if (posix_memalign(&buf, 64, TEST_LEN)) { + printf("alloc error: Fail"); + return -1; + } + dest = buf; + + if (posix_memalign(&buf, 64, TEST_LEN)) { + printf("alloc error: Fail"); + return -1; + } + dest_ref = buf; + + if (posix_memalign(&buf, 64, TEST_LEN)) { + printf("alloc error: Fail"); + return -1; + } + temp_buff = buf; + + // Performance test + for (i = 0; i < TEST_SOURCES; i++) + for (j = 0; j < TEST_LEN; j++) + buffs[i][j] = rand(); + + memset(dest, 0, TEST_LEN); + memset(temp_buff, 0, TEST_LEN); + memset(dest_ref, 0, TEST_LEN); + memset(g, 0, TEST_SOURCES); + + for (i = 0; i < TEST_SOURCES; i++) + g[i] = rand(); #ifdef DO_REF_PERF - BENCHMARK(&start, BENCHMARK_TIME, - vect_dot_prod_perf(&gf_vect_dot_prod_base, g, g_tbls, buffs, dest_ref) - ); - printf("gf_vect_dot_prod_base" TEST_TYPE_STR ": "); - perf_print(start, (long long)TEST_LEN * (TEST_SOURCES + 1)); + BENCHMARK(&start, BENCHMARK_TIME, + vect_dot_prod_perf(&gf_vect_dot_prod_base, g, g_tbls, buffs, dest_ref)); + printf("gf_vect_dot_prod_base" TEST_TYPE_STR ": "); + perf_print(start, (long long) TEST_LEN * (TEST_SOURCES + 1)); #else - vect_dot_prod_perf(&gf_vect_dot_prod_base, g, g_tbls, buffs, dest_ref); + vect_dot_prod_perf(&gf_vect_dot_prod_base, g, g_tbls, buffs, dest_ref); #endif - BENCHMARK(&start, BENCHMARK_TIME, - vect_dot_prod_perf(&FUNCTION_UNDER_TEST, g, g_tbls, buffs, dest)); - printf(xstr(FUNCTION_UNDER_TEST) TEST_TYPE_STR ": "); - perf_print(start, (long long)TEST_LEN * (TEST_SOURCES + 1)); - - if (0 != memcmp(dest_ref, dest, TEST_LEN)) { - printf("Fail zero " xstr(FUNCTION_UNDER_TEST) " test\n"); - dump_matrix(buffs, 5, TEST_SOURCES); - printf("dprod_base:"); - dump(dest_ref, 25); - printf("dprod:"); - dump(dest, 25); - return -1; - } - - printf("pass perf check\n"); - return 0; + BENCHMARK(&start, BENCHMARK_TIME, + vect_dot_prod_perf(&FUNCTION_UNDER_TEST, g, g_tbls, buffs, dest)); + printf(xstr(FUNCTION_UNDER_TEST) TEST_TYPE_STR ": "); + perf_print(start, (long long) TEST_LEN * (TEST_SOURCES + 1)); + + if (0 != memcmp(dest_ref, dest, TEST_LEN)) { + printf("Fail zero " xstr(FUNCTION_UNDER_TEST) " test\n"); + dump_matrix(buffs, 5, TEST_SOURCES); + printf("dprod_base:"); + dump(dest_ref, 25); + printf("dprod:"); + dump(dest, 25); + return -1; + } + + printf("pass perf check\n"); + return 0; } diff --git a/erasure_code/gf_vect_dot_prod_test.c b/erasure_code/gf_vect_dot_prod_test.c index 8300fbd7..c66c1a3e 100644 --- a/erasure_code/gf_vect_dot_prod_test.c +++ b/erasure_code/gf_vect_dot_prod_test.c @@ -29,28 +29,28 @@ #include #include -#include // for memset, memcmp +#include // for memset, memcmp #include "erasure_code.h" #include "test.h" #ifndef FUNCTION_UNDER_TEST -# define FUNCTION_UNDER_TEST gf_vect_dot_prod +#define FUNCTION_UNDER_TEST gf_vect_dot_prod #endif #ifndef TEST_MIN_SIZE -# define TEST_MIN_SIZE 32 +#define TEST_MIN_SIZE 32 #endif -#define str(s) #s +#define str(s) #s #define xstr(s) str(s) -#define TEST_LEN 8192 -#define TEST_SIZE (TEST_LEN/2) +#define TEST_LEN 8192 +#define TEST_SIZE (TEST_LEN / 2) #ifndef TEST_SOURCES -# define TEST_SOURCES 16 +#define TEST_SOURCES 16 #endif #ifndef RANDOMS -# define RANDOMS 20 +#define RANDOMS 20 #endif #define MMAX TEST_SOURCES @@ -58,481 +58,486 @@ #ifdef EC_ALIGNED_ADDR // Define power of 2 range to check ptr, len alignment -# define PTR_ALIGN_CHK_B 0 -# define LEN_ALIGN_CHK_B 0 // 0 for aligned only +#define PTR_ALIGN_CHK_B 0 +#define LEN_ALIGN_CHK_B 0 // 0 for aligned only #else // Define power of 2 range to check ptr, len alignment -# define PTR_ALIGN_CHK_B 32 -# define LEN_ALIGN_CHK_B 32 // 0 for aligned only +#define PTR_ALIGN_CHK_B 32 +#define LEN_ALIGN_CHK_B 32 // 0 for aligned only #endif typedef unsigned char u8; -void dump(unsigned char *buf, int len) +void +dump(unsigned char *buf, int len) { - int i; - for (i = 0; i < len;) { - printf(" %2x", 0xff & buf[i++]); - if (i % 32 == 0) - printf("\n"); - } - printf("\n"); + int i; + for (i = 0; i < len;) { + printf(" %2x", 0xff & buf[i++]); + if (i % 32 == 0) + printf("\n"); + } + printf("\n"); } -void dump_matrix(unsigned char **s, int k, int m) +void +dump_matrix(unsigned char **s, int k, int m) { - int i, j; - for (i = 0; i < k; i++) { - for (j = 0; j < m; j++) { - printf(" %2x", s[i][j]); - } - printf("\n"); - } - printf("\n"); + int i, j; + for (i = 0; i < k; i++) { + for (j = 0; j < m; j++) { + printf(" %2x", s[i][j]); + } + printf("\n"); + } + printf("\n"); } -void dump_u8xu8(unsigned char *s, int k, int m) +void +dump_u8xu8(unsigned char *s, int k, int m) { - int i, j; - for (i = 0; i < k; i++) { - for (j = 0; j < m; j++) { - printf(" %2x", 0xff & s[j + (i * m)]); - } - printf("\n"); - } - printf("\n"); + int i, j; + for (i = 0; i < k; i++) { + for (j = 0; j < m; j++) { + printf(" %2x", 0xff & s[j + (i * m)]); + } + printf("\n"); + } + printf("\n"); } -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - int i, j, rtest, srcs, m, k, nerrs, r, err; - void *buf; - u8 g[TEST_SOURCES], g_tbls[TEST_SOURCES * 32], src_in_err[TEST_SOURCES]; - u8 *dest, *dest_ref, *temp_buff, *buffs[TEST_SOURCES]; - u8 a[MMAX * KMAX], b[MMAX * KMAX], d[MMAX * KMAX]; - u8 src_err_list[TEST_SOURCES], *recov[TEST_SOURCES]; - - int align, size; - unsigned char *efence_buffs[TEST_SOURCES]; - unsigned int offset; - u8 *ubuffs[TEST_SOURCES]; - u8 *udest_ptr; - - printf(xstr(FUNCTION_UNDER_TEST) ": %dx%d ", TEST_SOURCES, TEST_LEN); - - // Allocate the arrays - for (i = 0; i < TEST_SOURCES; i++) { - if (posix_memalign(&buf, 64, TEST_LEN)) { - printf("alloc error: Fail"); - return -1; - } - buffs[i] = buf; - } - - if (posix_memalign(&buf, 64, TEST_LEN)) { - printf("alloc error: Fail"); - return -1; - } - dest = buf; - - if (posix_memalign(&buf, 64, TEST_LEN)) { - printf("alloc error: Fail"); - return -1; - } - dest_ref = buf; - - if (posix_memalign(&buf, 64, TEST_LEN)) { - printf("alloc error: Fail"); - return -1; - } - temp_buff = buf; - - // Test of all zeros - for (i = 0; i < TEST_SOURCES; i++) - memset(buffs[i], 0, TEST_LEN); - - memset(dest, 0, TEST_LEN); - memset(temp_buff, 0, TEST_LEN); - memset(dest_ref, 0, TEST_LEN); - memset(g, 0, TEST_SOURCES); - - for (i = 0; i < TEST_SOURCES; i++) - gf_vect_mul_init(g[i], &g_tbls[i * 32]); - - gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[0], buffs, dest_ref); - - FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest); - - if (0 != memcmp(dest_ref, dest, TEST_LEN)) { - printf("Fail zero " xstr(FUNCTION_UNDER_TEST) " \n"); - dump_matrix(buffs, 5, TEST_SOURCES); - printf("dprod_base:"); - dump(dest_ref, 25); - printf("dprod:"); - dump(dest, 25); - return -1; - } + int i, j, rtest, srcs, m, k, nerrs, r, err; + void *buf; + u8 g[TEST_SOURCES], g_tbls[TEST_SOURCES * 32], src_in_err[TEST_SOURCES]; + u8 *dest, *dest_ref, *temp_buff, *buffs[TEST_SOURCES]; + u8 a[MMAX * KMAX], b[MMAX * KMAX], d[MMAX * KMAX]; + u8 src_err_list[TEST_SOURCES], *recov[TEST_SOURCES]; + + int align, size; + unsigned char *efence_buffs[TEST_SOURCES]; + unsigned int offset; + u8 *ubuffs[TEST_SOURCES]; + u8 *udest_ptr; + + printf(xstr(FUNCTION_UNDER_TEST) ": %dx%d ", TEST_SOURCES, TEST_LEN); + + // Allocate the arrays + for (i = 0; i < TEST_SOURCES; i++) { + if (posix_memalign(&buf, 64, TEST_LEN)) { + printf("alloc error: Fail"); + return -1; + } + buffs[i] = buf; + } + + if (posix_memalign(&buf, 64, TEST_LEN)) { + printf("alloc error: Fail"); + return -1; + } + dest = buf; + + if (posix_memalign(&buf, 64, TEST_LEN)) { + printf("alloc error: Fail"); + return -1; + } + dest_ref = buf; + + if (posix_memalign(&buf, 64, TEST_LEN)) { + printf("alloc error: Fail"); + return -1; + } + temp_buff = buf; + + // Test of all zeros + for (i = 0; i < TEST_SOURCES; i++) + memset(buffs[i], 0, TEST_LEN); + + memset(dest, 0, TEST_LEN); + memset(temp_buff, 0, TEST_LEN); + memset(dest_ref, 0, TEST_LEN); + memset(g, 0, TEST_SOURCES); + + for (i = 0; i < TEST_SOURCES; i++) + gf_vect_mul_init(g[i], &g_tbls[i * 32]); + + gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[0], buffs, dest_ref); + + FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest); + + if (0 != memcmp(dest_ref, dest, TEST_LEN)) { + printf("Fail zero " xstr(FUNCTION_UNDER_TEST) " \n"); + dump_matrix(buffs, 5, TEST_SOURCES); + printf("dprod_base:"); + dump(dest_ref, 25); + printf("dprod:"); + dump(dest, 25); + return -1; + } #ifdef TEST_VERBOSE - else - putchar('.'); + else + putchar('.'); #endif - // Rand data test - for (rtest = 0; rtest < RANDOMS; rtest++) { - for (i = 0; i < TEST_SOURCES; i++) - for (j = 0; j < TEST_LEN; j++) - buffs[i][j] = rand(); + // Rand data test + for (rtest = 0; rtest < RANDOMS; rtest++) { + for (i = 0; i < TEST_SOURCES; i++) + for (j = 0; j < TEST_LEN; j++) + buffs[i][j] = rand(); - for (i = 0; i < TEST_SOURCES; i++) - g[i] = rand(); + for (i = 0; i < TEST_SOURCES; i++) + g[i] = rand(); - for (i = 0; i < TEST_SOURCES; i++) - gf_vect_mul_init(g[i], &g_tbls[i * 32]); + for (i = 0; i < TEST_SOURCES; i++) + gf_vect_mul_init(g[i], &g_tbls[i * 32]); - gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[0], buffs, dest_ref); - FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest); + gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[0], buffs, dest_ref); + FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest); - if (0 != memcmp(dest_ref, dest, TEST_LEN)) { - printf("Fail rand " xstr(FUNCTION_UNDER_TEST) " 1\n"); - dump_matrix(buffs, 5, TEST_SOURCES); - printf("dprod_base:"); - dump(dest_ref, 25); - printf("dprod:"); - dump(dest, 25); - return -1; - } + if (0 != memcmp(dest_ref, dest, TEST_LEN)) { + printf("Fail rand " xstr(FUNCTION_UNDER_TEST) " 1\n"); + dump_matrix(buffs, 5, TEST_SOURCES); + printf("dprod_base:"); + dump(dest_ref, 25); + printf("dprod:"); + dump(dest, 25); + return -1; + } #ifdef TEST_VERBOSE - putchar('.'); + putchar('.'); #endif - } - - // Rand data test with varied parameters - for (rtest = 0; rtest < RANDOMS; rtest++) { - for (srcs = TEST_SOURCES; srcs > 0; srcs--) { - for (i = 0; i < srcs; i++) - for (j = 0; j < TEST_LEN; j++) - buffs[i][j] = rand(); - - for (i = 0; i < srcs; i++) - g[i] = rand(); - - for (i = 0; i < srcs; i++) - gf_vect_mul_init(g[i], &g_tbls[i * 32]); - - gf_vect_dot_prod_base(TEST_LEN, srcs, &g_tbls[0], buffs, dest_ref); - FUNCTION_UNDER_TEST(TEST_LEN, srcs, g_tbls, buffs, dest); - - if (0 != memcmp(dest_ref, dest, TEST_LEN)) { - printf("Fail rand " xstr(FUNCTION_UNDER_TEST) " test 2\n"); - dump_matrix(buffs, 5, srcs); - printf("dprod_base:"); - dump(dest_ref, 5); - printf("dprod:"); - dump(dest, 5); - return -1; - } + } + + // Rand data test with varied parameters + for (rtest = 0; rtest < RANDOMS; rtest++) { + for (srcs = TEST_SOURCES; srcs > 0; srcs--) { + for (i = 0; i < srcs; i++) + for (j = 0; j < TEST_LEN; j++) + buffs[i][j] = rand(); + + for (i = 0; i < srcs; i++) + g[i] = rand(); + + for (i = 0; i < srcs; i++) + gf_vect_mul_init(g[i], &g_tbls[i * 32]); + + gf_vect_dot_prod_base(TEST_LEN, srcs, &g_tbls[0], buffs, dest_ref); + FUNCTION_UNDER_TEST(TEST_LEN, srcs, g_tbls, buffs, dest); + + if (0 != memcmp(dest_ref, dest, TEST_LEN)) { + printf("Fail rand " xstr(FUNCTION_UNDER_TEST) " test 2\n"); + dump_matrix(buffs, 5, srcs); + printf("dprod_base:"); + dump(dest_ref, 5); + printf("dprod:"); + dump(dest, 5); + return -1; + } #ifdef TEST_VERBOSE - putchar('.'); + putchar('.'); #endif - } - } + } + } - // Test erasure code using gf_vect_dot_prod + // Test erasure code using gf_vect_dot_prod - // Pick a first test - m = 9; - k = 5; - if (m > MMAX || k > KMAX) - return -1; + // Pick a first test + m = 9; + k = 5; + if (m > MMAX || k > KMAX) + return -1; - gf_gen_rs_matrix(a, m, k); + gf_gen_rs_matrix(a, m, k); - // Make random data - for (i = 0; i < k; i++) - for (j = 0; j < TEST_LEN; j++) - buffs[i][j] = rand(); + // Make random data + for (i = 0; i < k; i++) + for (j = 0; j < TEST_LEN; j++) + buffs[i][j] = rand(); - // Make parity vects - for (i = k; i < m; i++) { - for (j = 0; j < k; j++) - gf_vect_mul_init(a[k * i + j], &g_tbls[j * 32]); + // Make parity vects + for (i = k; i < m; i++) { + for (j = 0; j < k; j++) + gf_vect_mul_init(a[k * i + j], &g_tbls[j * 32]); #ifndef USEREF - FUNCTION_UNDER_TEST(TEST_LEN, k, g_tbls, buffs, buffs[i]); + FUNCTION_UNDER_TEST(TEST_LEN, k, g_tbls, buffs, buffs[i]); #else - gf_vect_dot_prod_base(TEST_LEN, k, &g_tbls[0], buffs, buffs[i]); + gf_vect_dot_prod_base(TEST_LEN, k, &g_tbls[0], buffs, buffs[i]); #endif - } - - // Random buffers in erasure - memset(src_in_err, 0, TEST_SOURCES); - for (i = 0, nerrs = 0; i < k && nerrs < m - k; i++) { - err = 1 & rand(); - src_in_err[i] = err; - if (err) - src_err_list[nerrs++] = i; - } - - // construct b by removing error rows - for (i = 0, r = 0; i < k; i++, r++) { - while (src_in_err[r]) { - r++; - continue; - } - for (j = 0; j < k; j++) - b[k * i + j] = a[k * r + j]; - } - - if (gf_invert_matrix((u8 *) b, (u8 *) d, k) < 0) - printf("BAD MATRIX\n"); - - for (i = 0, r = 0; i < k; i++, r++) { - while (src_in_err[r]) { - r++; - continue; - } - recov[i] = buffs[r]; - } - - // Recover data - for (i = 0; i < nerrs; i++) { - for (j = 0; j < k; j++) - gf_vect_mul_init(d[k * src_err_list[i] + j], &g_tbls[j * 32]); + } + + // Random buffers in erasure + memset(src_in_err, 0, TEST_SOURCES); + for (i = 0, nerrs = 0; i < k && nerrs < m - k; i++) { + err = 1 & rand(); + src_in_err[i] = err; + if (err) + src_err_list[nerrs++] = i; + } + + // construct b by removing error rows + for (i = 0, r = 0; i < k; i++, r++) { + while (src_in_err[r]) { + r++; + continue; + } + for (j = 0; j < k; j++) + b[k * i + j] = a[k * r + j]; + } + + if (gf_invert_matrix((u8 *) b, (u8 *) d, k) < 0) + printf("BAD MATRIX\n"); + + for (i = 0, r = 0; i < k; i++, r++) { + while (src_in_err[r]) { + r++; + continue; + } + recov[i] = buffs[r]; + } + + // Recover data + for (i = 0; i < nerrs; i++) { + for (j = 0; j < k; j++) + gf_vect_mul_init(d[k * src_err_list[i] + j], &g_tbls[j * 32]); #ifndef USEREF - FUNCTION_UNDER_TEST(TEST_LEN, k, g_tbls, recov, temp_buff); + FUNCTION_UNDER_TEST(TEST_LEN, k, g_tbls, recov, temp_buff); #else - gf_vect_dot_prod_base(TEST_LEN, k, &g_tbls[0], recov, temp_buff); + gf_vect_dot_prod_base(TEST_LEN, k, &g_tbls[0], recov, temp_buff); #endif - if (0 != memcmp(temp_buff, buffs[src_err_list[i]], TEST_LEN)) { - printf("Fail error recovery (%d, %d, %d)\n", m, k, nerrs); - printf("recov %d:", src_err_list[i]); - dump(temp_buff, 25); - printf("orig :"); - dump(buffs[src_err_list[i]], 25); - return -1; - } - } - - // Do more random tests - - for (rtest = 0; rtest < RANDOMS; rtest++) { - while ((m = (rand() % MMAX)) < 2) ; - while ((k = (rand() % KMAX)) >= m || k < 1) ; - - if (m > MMAX || k > KMAX) - continue; - - gf_gen_rs_matrix(a, m, k); - - // Make random data - for (i = 0; i < k; i++) - for (j = 0; j < TEST_LEN; j++) - buffs[i][j] = rand(); - - // Make parity vects - for (i = k; i < m; i++) { - for (j = 0; j < k; j++) - gf_vect_mul_init(a[k * i + j], &g_tbls[j * 32]); + if (0 != memcmp(temp_buff, buffs[src_err_list[i]], TEST_LEN)) { + printf("Fail error recovery (%d, %d, %d)\n", m, k, nerrs); + printf("recov %d:", src_err_list[i]); + dump(temp_buff, 25); + printf("orig :"); + dump(buffs[src_err_list[i]], 25); + return -1; + } + } + + // Do more random tests + + for (rtest = 0; rtest < RANDOMS; rtest++) { + while ((m = (rand() % MMAX)) < 2) + ; + while ((k = (rand() % KMAX)) >= m || k < 1) + ; + + if (m > MMAX || k > KMAX) + continue; + + gf_gen_rs_matrix(a, m, k); + + // Make random data + for (i = 0; i < k; i++) + for (j = 0; j < TEST_LEN; j++) + buffs[i][j] = rand(); + + // Make parity vects + for (i = k; i < m; i++) { + for (j = 0; j < k; j++) + gf_vect_mul_init(a[k * i + j], &g_tbls[j * 32]); #ifndef USEREF - FUNCTION_UNDER_TEST(TEST_LEN, k, g_tbls, buffs, buffs[i]); + FUNCTION_UNDER_TEST(TEST_LEN, k, g_tbls, buffs, buffs[i]); #else - gf_vect_dot_prod_base(TEST_LEN, k, &g_tbls[0], buffs, buffs[i]); + gf_vect_dot_prod_base(TEST_LEN, k, &g_tbls[0], buffs, buffs[i]); #endif - } - - // Random errors - memset(src_in_err, 0, TEST_SOURCES); - for (i = 0, nerrs = 0; i < k && nerrs < m - k; i++) { - err = 1 & rand(); - src_in_err[i] = err; - if (err) - src_err_list[nerrs++] = i; - } - if (nerrs == 0) { // should have at least one error - while ((err = (rand() % KMAX)) >= k) ; - src_err_list[nerrs++] = err; - src_in_err[err] = 1; - } - // construct b by removing error rows - for (i = 0, r = 0; i < k; i++, r++) { - while (src_in_err[r]) { - r++; - continue; - } - for (j = 0; j < k; j++) - b[k * i + j] = a[k * r + j]; - } - - if (gf_invert_matrix((u8 *) b, (u8 *) d, k) < 0) - printf("BAD MATRIX\n"); - - for (i = 0, r = 0; i < k; i++, r++) { - while (src_in_err[r]) { - r++; - continue; - } - recov[i] = buffs[r]; - } - - // Recover data - for (i = 0; i < nerrs; i++) { - for (j = 0; j < k; j++) - gf_vect_mul_init(d[k * src_err_list[i] + j], &g_tbls[j * 32]); + } + + // Random errors + memset(src_in_err, 0, TEST_SOURCES); + for (i = 0, nerrs = 0; i < k && nerrs < m - k; i++) { + err = 1 & rand(); + src_in_err[i] = err; + if (err) + src_err_list[nerrs++] = i; + } + if (nerrs == 0) { // should have at least one error + while ((err = (rand() % KMAX)) >= k) + ; + src_err_list[nerrs++] = err; + src_in_err[err] = 1; + } + // construct b by removing error rows + for (i = 0, r = 0; i < k; i++, r++) { + while (src_in_err[r]) { + r++; + continue; + } + for (j = 0; j < k; j++) + b[k * i + j] = a[k * r + j]; + } + + if (gf_invert_matrix((u8 *) b, (u8 *) d, k) < 0) + printf("BAD MATRIX\n"); + + for (i = 0, r = 0; i < k; i++, r++) { + while (src_in_err[r]) { + r++; + continue; + } + recov[i] = buffs[r]; + } + + // Recover data + for (i = 0; i < nerrs; i++) { + for (j = 0; j < k; j++) + gf_vect_mul_init(d[k * src_err_list[i] + j], &g_tbls[j * 32]); #ifndef USEREF - FUNCTION_UNDER_TEST(TEST_LEN, k, g_tbls, recov, temp_buff); + FUNCTION_UNDER_TEST(TEST_LEN, k, g_tbls, recov, temp_buff); #else - gf_vect_dot_prod_base(TEST_LEN, k, &g_tbls[0], recov, temp_buff); + gf_vect_dot_prod_base(TEST_LEN, k, &g_tbls[0], recov, temp_buff); #endif - if (0 != memcmp(temp_buff, buffs[src_err_list[i]], TEST_LEN)) { - printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs); - printf(" - erase list = "); - for (i = 0; i < nerrs; i++) - printf(" %d", src_err_list[i]); - printf("\na:\n"); - dump_u8xu8((u8 *) a, m, k); - printf("inv b:\n"); - dump_u8xu8((u8 *) d, k, k); - printf("orig data:\n"); - dump_matrix(buffs, m, 25); - printf("orig :"); - dump(buffs[src_err_list[i]], 25); - printf("recov %d:", src_err_list[i]); - dump(temp_buff, 25); - return -1; - } - } + if (0 != memcmp(temp_buff, buffs[src_err_list[i]], TEST_LEN)) { + printf("Fail error recovery (%d, %d, %d) - ", m, k, nerrs); + printf(" - erase list = "); + for (i = 0; i < nerrs; i++) + printf(" %d", src_err_list[i]); + printf("\na:\n"); + dump_u8xu8((u8 *) a, m, k); + printf("inv b:\n"); + dump_u8xu8((u8 *) d, k, k); + printf("orig data:\n"); + dump_matrix(buffs, m, 25); + printf("orig :"); + dump(buffs[src_err_list[i]], 25); + printf("recov %d:", src_err_list[i]); + dump(temp_buff, 25); + return -1; + } + } #ifdef TEST_VERBOSE - putchar('.'); + putchar('.'); #endif - } + } - // Run tests at end of buffer for Electric Fence - align = (LEN_ALIGN_CHK_B != 0) ? 1 : 16; - for (size = TEST_MIN_SIZE; size <= TEST_SIZE; size += align) { - for (i = 0; i < TEST_SOURCES; i++) - for (j = 0; j < TEST_LEN; j++) - buffs[i][j] = rand(); + // Run tests at end of buffer for Electric Fence + align = (LEN_ALIGN_CHK_B != 0) ? 1 : 16; + for (size = TEST_MIN_SIZE; size <= TEST_SIZE; size += align) { + for (i = 0; i < TEST_SOURCES; i++) + for (j = 0; j < TEST_LEN; j++) + buffs[i][j] = rand(); - for (i = 0; i < TEST_SOURCES; i++) // Line up TEST_SIZE from end - efence_buffs[i] = buffs[i] + TEST_LEN - size; + for (i = 0; i < TEST_SOURCES; i++) // Line up TEST_SIZE from end + efence_buffs[i] = buffs[i] + TEST_LEN - size; - for (i = 0; i < TEST_SOURCES; i++) - g[i] = rand(); + for (i = 0; i < TEST_SOURCES; i++) + g[i] = rand(); - for (i = 0; i < TEST_SOURCES; i++) - gf_vect_mul_init(g[i], &g_tbls[i * 32]); + for (i = 0; i < TEST_SOURCES; i++) + gf_vect_mul_init(g[i], &g_tbls[i * 32]); - gf_vect_dot_prod_base(size, TEST_SOURCES, &g_tbls[0], efence_buffs, dest_ref); - FUNCTION_UNDER_TEST(size, TEST_SOURCES, g_tbls, efence_buffs, dest); + gf_vect_dot_prod_base(size, TEST_SOURCES, &g_tbls[0], efence_buffs, dest_ref); + FUNCTION_UNDER_TEST(size, TEST_SOURCES, g_tbls, efence_buffs, dest); - if (0 != memcmp(dest_ref, dest, size)) { - printf("Fail rand " xstr(FUNCTION_UNDER_TEST) " test 3\n"); - dump_matrix(efence_buffs, 5, TEST_SOURCES); - printf("dprod_base:"); - dump(dest_ref, align); - printf("dprod:"); - dump(dest, align); - return -1; - } + if (0 != memcmp(dest_ref, dest, size)) { + printf("Fail rand " xstr(FUNCTION_UNDER_TEST) " test 3\n"); + dump_matrix(efence_buffs, 5, TEST_SOURCES); + printf("dprod_base:"); + dump(dest_ref, align); + printf("dprod:"); + dump(dest, align); + return -1; + } #ifdef TEST_VERBOSE - putchar('.'); + putchar('.'); #endif - } - - // Test rand ptr alignment if available - - for (rtest = 0; rtest < RANDOMS; rtest++) { - size = (TEST_LEN - PTR_ALIGN_CHK_B) & ~(TEST_MIN_SIZE - 1); - srcs = rand() % TEST_SOURCES; - if (srcs == 0) - continue; - - offset = (PTR_ALIGN_CHK_B != 0) ? 1 : PTR_ALIGN_CHK_B; - // Add random offsets - for (i = 0; i < srcs; i++) - ubuffs[i] = buffs[i] + (rand() & (PTR_ALIGN_CHK_B - offset)); - - udest_ptr = dest + (rand() & (PTR_ALIGN_CHK_B - offset)); - - memset(dest, 0, TEST_LEN); // zero pad to check write-over - - for (i = 0; i < srcs; i++) - for (j = 0; j < size; j++) - ubuffs[i][j] = rand(); - - for (i = 0; i < srcs; i++) - g[i] = rand(); - - for (i = 0; i < srcs; i++) - gf_vect_mul_init(g[i], &g_tbls[i * 32]); - - gf_vect_dot_prod_base(size, srcs, &g_tbls[0], ubuffs, dest_ref); - - FUNCTION_UNDER_TEST(size, srcs, g_tbls, ubuffs, udest_ptr); - - if (memcmp(dest_ref, udest_ptr, size)) { - printf("Fail rand " xstr(FUNCTION_UNDER_TEST) " ualign srcs=%d\n", - srcs); - dump_matrix(ubuffs, 5, TEST_SOURCES); - printf("dprod_base:"); - dump(dest_ref, 25); - printf("dprod:"); - dump(udest_ptr, 25); - return -1; - } - // Confirm that padding around dests is unchanged - memset(dest_ref, 0, PTR_ALIGN_CHK_B); // Make reference zero buff - offset = udest_ptr - dest; - - if (memcmp(dest, dest_ref, offset)) { - printf("Fail rand ualign pad start\n"); - return -1; - } - if (memcmp(dest + offset + size, dest_ref, PTR_ALIGN_CHK_B - offset)) { - printf("Fail rand ualign pad end\n"); - return -1; - } + } + + // Test rand ptr alignment if available + + for (rtest = 0; rtest < RANDOMS; rtest++) { + size = (TEST_LEN - PTR_ALIGN_CHK_B) & ~(TEST_MIN_SIZE - 1); + srcs = rand() % TEST_SOURCES; + if (srcs == 0) + continue; + + offset = (PTR_ALIGN_CHK_B != 0) ? 1 : PTR_ALIGN_CHK_B; + // Add random offsets + for (i = 0; i < srcs; i++) + ubuffs[i] = buffs[i] + (rand() & (PTR_ALIGN_CHK_B - offset)); + + udest_ptr = dest + (rand() & (PTR_ALIGN_CHK_B - offset)); + + memset(dest, 0, TEST_LEN); // zero pad to check write-over + + for (i = 0; i < srcs; i++) + for (j = 0; j < size; j++) + ubuffs[i][j] = rand(); + + for (i = 0; i < srcs; i++) + g[i] = rand(); + + for (i = 0; i < srcs; i++) + gf_vect_mul_init(g[i], &g_tbls[i * 32]); + + gf_vect_dot_prod_base(size, srcs, &g_tbls[0], ubuffs, dest_ref); + + FUNCTION_UNDER_TEST(size, srcs, g_tbls, ubuffs, udest_ptr); + + if (memcmp(dest_ref, udest_ptr, size)) { + printf("Fail rand " xstr(FUNCTION_UNDER_TEST) " ualign srcs=%d\n", srcs); + dump_matrix(ubuffs, 5, TEST_SOURCES); + printf("dprod_base:"); + dump(dest_ref, 25); + printf("dprod:"); + dump(udest_ptr, 25); + return -1; + } + // Confirm that padding around dests is unchanged + memset(dest_ref, 0, PTR_ALIGN_CHK_B); // Make reference zero buff + offset = udest_ptr - dest; + + if (memcmp(dest, dest_ref, offset)) { + printf("Fail rand ualign pad start\n"); + return -1; + } + if (memcmp(dest + offset + size, dest_ref, PTR_ALIGN_CHK_B - offset)) { + printf("Fail rand ualign pad end\n"); + return -1; + } #ifdef TEST_VERBOSE - putchar('.'); + putchar('.'); #endif - } + } - // Test all size alignment - align = (LEN_ALIGN_CHK_B != 0) ? 1 : 16; + // Test all size alignment + align = (LEN_ALIGN_CHK_B != 0) ? 1 : 16; - for (size = TEST_LEN; size >= TEST_MIN_SIZE; size -= align) { - srcs = TEST_SOURCES; + for (size = TEST_LEN; size >= TEST_MIN_SIZE; size -= align) { + srcs = TEST_SOURCES; - for (i = 0; i < srcs; i++) - for (j = 0; j < size; j++) - buffs[i][j] = rand(); + for (i = 0; i < srcs; i++) + for (j = 0; j < size; j++) + buffs[i][j] = rand(); - for (i = 0; i < srcs; i++) - g[i] = rand(); + for (i = 0; i < srcs; i++) + g[i] = rand(); - for (i = 0; i < srcs; i++) - gf_vect_mul_init(g[i], &g_tbls[i * 32]); + for (i = 0; i < srcs; i++) + gf_vect_mul_init(g[i], &g_tbls[i * 32]); - gf_vect_dot_prod_base(size, srcs, &g_tbls[0], buffs, dest_ref); + gf_vect_dot_prod_base(size, srcs, &g_tbls[0], buffs, dest_ref); - FUNCTION_UNDER_TEST(size, srcs, g_tbls, buffs, dest); + FUNCTION_UNDER_TEST(size, srcs, g_tbls, buffs, dest); - if (memcmp(dest_ref, dest, size)) { - printf("Fail rand " xstr(FUNCTION_UNDER_TEST) " ualign len=%d\n", - size); - dump_matrix(buffs, 5, TEST_SOURCES); - printf("dprod_base:"); - dump(dest_ref, 25); - printf("dprod:"); - dump(dest, 25); - return -1; - } - } + if (memcmp(dest_ref, dest, size)) { + printf("Fail rand " xstr(FUNCTION_UNDER_TEST) " ualign len=%d\n", size); + dump_matrix(buffs, 5, TEST_SOURCES); + printf("dprod_base:"); + dump(dest_ref, 25); + printf("dprod:"); + dump(dest, 25); + return -1; + } + } - printf("done all: Pass\n"); - return 0; + printf("done all: Pass\n"); + return 0; } diff --git a/erasure_code/gf_vect_mad_test.c b/erasure_code/gf_vect_mad_test.c index 3a552b2c..85db23f4 100644 --- a/erasure_code/gf_vect_mad_test.c +++ b/erasure_code/gf_vect_mad_test.c @@ -29,503 +29,500 @@ #include #include -#include // for memset, memcmp +#include // for memset, memcmp #include "erasure_code.h" #include "test.h" #ifndef ALIGN_SIZE -# define ALIGN_SIZE 32 +#define ALIGN_SIZE 32 #endif #ifndef FUNCTION_UNDER_TEST -//By default, test multi-binary version -# define FUNCTION_UNDER_TEST gf_vect_mad -# define REF_FUNCTION gf_vect_dot_prod -# define VECT 1 +// By default, test multi-binary version +#define FUNCTION_UNDER_TEST gf_vect_mad +#define REF_FUNCTION gf_vect_dot_prod +#define VECT 1 #endif #ifndef TEST_MIN_SIZE -# define TEST_MIN_SIZE 64 +#define TEST_MIN_SIZE 64 #endif -#define str(s) #s +#define str(s) #s #define xstr(s) str(s) -#define TEST_LEN 8192 -#define TEST_SIZE (TEST_LEN/2) -#define TEST_MEM TEST_SIZE -#define TEST_LOOPS 20000 +#define TEST_LEN 8192 +#define TEST_SIZE (TEST_LEN / 2) +#define TEST_MEM TEST_SIZE +#define TEST_LOOPS 20000 #define TEST_TYPE_STR "" #ifndef TEST_SOURCES -# define TEST_SOURCES 16 +#define TEST_SOURCES 16 #endif #ifndef RANDOMS -# define RANDOMS 20 +#define RANDOMS 20 #endif #ifdef EC_ALIGNED_ADDR // Define power of 2 range to check ptr, len alignment -# define PTR_ALIGN_CHK_B 0 -# define LEN_ALIGN_CHK_B 0 // 0 for aligned only +#define PTR_ALIGN_CHK_B 0 +#define LEN_ALIGN_CHK_B 0 // 0 for aligned only #else // Define power of 2 range to check ptr, len alignment -# define PTR_ALIGN_CHK_B ALIGN_SIZE -# define LEN_ALIGN_CHK_B ALIGN_SIZE // 0 for aligned only +#define PTR_ALIGN_CHK_B ALIGN_SIZE +#define LEN_ALIGN_CHK_B ALIGN_SIZE // 0 for aligned only #endif -#define str(s) #s +#define str(s) #s #define xstr(s) str(s) typedef unsigned char u8; #if (VECT == 1) -# define LAST_ARG *dest +#define LAST_ARG *dest #else -# define LAST_ARG **dest +#define LAST_ARG **dest #endif -extern void FUNCTION_UNDER_TEST(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char LAST_ARG); -extern void REF_FUNCTION(int len, int vlen, unsigned char *gftbls, unsigned char **src, - unsigned char LAST_ARG); +extern void +FUNCTION_UNDER_TEST(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char LAST_ARG); +extern void +REF_FUNCTION(int len, int vlen, unsigned char *gftbls, unsigned char **src, unsigned char LAST_ARG); -void dump(unsigned char *buf, int len) +void +dump(unsigned char *buf, int len) { - int i; - for (i = 0; i < len;) { - printf(" %2x", 0xff & buf[i++]); - if (i % 32 == 0) - printf("\n"); - } - printf("\n"); + int i; + for (i = 0; i < len;) { + printf(" %2x", 0xff & buf[i++]); + if (i % 32 == 0) + printf("\n"); + } + printf("\n"); } -void dump_matrix(unsigned char **s, int k, int m) +void +dump_matrix(unsigned char **s, int k, int m) { - int i, j; - for (i = 0; i < k; i++) { - for (j = 0; j < m; j++) { - printf(" %2x", s[i][j]); - } - printf("\n"); - } - printf("\n"); + int i, j; + for (i = 0; i < k; i++) { + for (j = 0; j < m; j++) { + printf(" %2x", s[i][j]); + } + printf("\n"); + } + printf("\n"); } -void dump_u8xu8(unsigned char *s, int k, int m) +void +dump_u8xu8(unsigned char *s, int k, int m) { - int i, j; - for (i = 0; i < k; i++) { - for (j = 0; j < m; j++) { - printf(" %2x", 0xff & s[j + (i * m)]); - } - printf("\n"); - } - printf("\n"); + int i, j; + for (i = 0; i < k; i++) { + for (j = 0; j < m; j++) { + printf(" %2x", 0xff & s[j + (i * m)]); + } + printf("\n"); + } + printf("\n"); } -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - int i, j, rtest, srcs; - void *buf; - u8 gf[6][TEST_SOURCES]; - u8 *g_tbls; - u8 *dest_ref[VECT]; - u8 *dest_ptrs[VECT], *buffs[TEST_SOURCES]; - int vector = VECT; - - int align, size; - unsigned char *efence_buffs[TEST_SOURCES]; - unsigned int offset; - u8 *ubuffs[TEST_SOURCES]; - u8 *udest_ptrs[VECT]; - printf("test" xstr(FUNCTION_UNDER_TEST) ": %dx%d ", TEST_SOURCES, TEST_LEN); - - // Allocate the arrays - for (i = 0; i < TEST_SOURCES; i++) { - if (posix_memalign(&buf, 64, TEST_LEN)) { - printf("alloc error: Fail"); - return -1; - } - buffs[i] = buf; - } - - if (posix_memalign(&buf, 16, 2 * (vector * TEST_SOURCES * 32))) { - printf("alloc error: Fail"); - return -1; - } - g_tbls = buf; - - for (i = 0; i < vector; i++) { - if (posix_memalign(&buf, 64, TEST_LEN)) { - printf("alloc error: Fail"); - return -1; - } - dest_ptrs[i] = buf; - memset(dest_ptrs[i], 0, TEST_LEN); - } - - for (i = 0; i < vector; i++) { - if (posix_memalign(&buf, 64, TEST_LEN)) { - printf("alloc error: Fail"); - return -1; - } - dest_ref[i] = buf; - memset(dest_ref[i], 0, TEST_LEN); - } - - // Test of all zeros - for (i = 0; i < TEST_SOURCES; i++) - memset(buffs[i], 0, TEST_LEN); - - switch (vector) { - case 6: - memset(gf[5], 0xe6, TEST_SOURCES); - case 5: - memset(gf[4], 4, TEST_SOURCES); - case 4: - memset(gf[3], 9, TEST_SOURCES); - case 3: - memset(gf[2], 7, TEST_SOURCES); - case 2: - memset(gf[1], 1, TEST_SOURCES); - case 1: - memset(gf[0], 2, TEST_SOURCES); - break; - default: - return -1; - } - - for (i = 0; i < TEST_SOURCES; i++) - for (j = 0; j < TEST_LEN; j++) - buffs[i][j] = rand(); - - for (i = 0; i < vector; i++) - for (j = 0; j < TEST_SOURCES; j++) { - gf[i][j] = rand(); - gf_vect_mul_init(gf[i][j], &g_tbls[i * (32 * TEST_SOURCES) + j * 32]); - } - - for (i = 0; i < vector; i++) - gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[i * 32 * TEST_SOURCES], - buffs, dest_ref[i]); - - for (i = 0; i < vector; i++) - memset(dest_ptrs[i], 0, TEST_LEN); - for (i = 0; i < TEST_SOURCES; i++) { + int i, j, rtest, srcs; + void *buf; + u8 gf[6][TEST_SOURCES]; + u8 *g_tbls; + u8 *dest_ref[VECT]; + u8 *dest_ptrs[VECT], *buffs[TEST_SOURCES]; + int vector = VECT; + + int align, size; + unsigned char *efence_buffs[TEST_SOURCES]; + unsigned int offset; + u8 *ubuffs[TEST_SOURCES]; + u8 *udest_ptrs[VECT]; + printf("test" xstr(FUNCTION_UNDER_TEST) ": %dx%d ", TEST_SOURCES, TEST_LEN); + + // Allocate the arrays + for (i = 0; i < TEST_SOURCES; i++) { + if (posix_memalign(&buf, 64, TEST_LEN)) { + printf("alloc error: Fail"); + return -1; + } + buffs[i] = buf; + } + + if (posix_memalign(&buf, 16, 2 * (vector * TEST_SOURCES * 32))) { + printf("alloc error: Fail"); + return -1; + } + g_tbls = buf; + + for (i = 0; i < vector; i++) { + if (posix_memalign(&buf, 64, TEST_LEN)) { + printf("alloc error: Fail"); + return -1; + } + dest_ptrs[i] = buf; + memset(dest_ptrs[i], 0, TEST_LEN); + } + + for (i = 0; i < vector; i++) { + if (posix_memalign(&buf, 64, TEST_LEN)) { + printf("alloc error: Fail"); + return -1; + } + dest_ref[i] = buf; + memset(dest_ref[i], 0, TEST_LEN); + } + + // Test of all zeros + for (i = 0; i < TEST_SOURCES; i++) + memset(buffs[i], 0, TEST_LEN); + + switch (vector) { + case 6: + memset(gf[5], 0xe6, TEST_SOURCES); + case 5: + memset(gf[4], 4, TEST_SOURCES); + case 4: + memset(gf[3], 9, TEST_SOURCES); + case 3: + memset(gf[2], 7, TEST_SOURCES); + case 2: + memset(gf[1], 1, TEST_SOURCES); + case 1: + memset(gf[0], 2, TEST_SOURCES); + break; + default: + return -1; + } + + for (i = 0; i < TEST_SOURCES; i++) + for (j = 0; j < TEST_LEN; j++) + buffs[i][j] = rand(); + + for (i = 0; i < vector; i++) + for (j = 0; j < TEST_SOURCES; j++) { + gf[i][j] = rand(); + gf_vect_mul_init(gf[i][j], &g_tbls[i * (32 * TEST_SOURCES) + j * 32]); + } + + for (i = 0; i < vector; i++) + gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, &g_tbls[i * 32 * TEST_SOURCES], buffs, + dest_ref[i]); + + for (i = 0; i < vector; i++) + memset(dest_ptrs[i], 0, TEST_LEN); + for (i = 0; i < TEST_SOURCES; i++) { #if (VECT == 1) - FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, i, g_tbls, buffs[i], *dest_ptrs); + FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, i, g_tbls, buffs[i], *dest_ptrs); #else - FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, i, g_tbls, buffs[i], dest_ptrs); + FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, i, g_tbls, buffs[i], dest_ptrs); #endif - } - for (i = 0; i < vector; i++) { - if (0 != memcmp(dest_ref[i], dest_ptrs[i], TEST_LEN)) { - printf("Fail zero " xstr(FUNCTION_UNDER_TEST) " test%d\n", i); - dump_matrix(buffs, vector, TEST_SOURCES); - printf("dprod_base:"); - dump(dest_ref[i], 25); - printf("dprod_dut:"); - dump(dest_ptrs[i], 25); - return -1; - } - } + } + for (i = 0; i < vector; i++) { + if (0 != memcmp(dest_ref[i], dest_ptrs[i], TEST_LEN)) { + printf("Fail zero " xstr(FUNCTION_UNDER_TEST) " test%d\n", i); + dump_matrix(buffs, vector, TEST_SOURCES); + printf("dprod_base:"); + dump(dest_ref[i], 25); + printf("dprod_dut:"); + dump(dest_ptrs[i], 25); + return -1; + } + } #if (VECT == 1) - REF_FUNCTION(TEST_LEN, TEST_SOURCES, g_tbls, buffs, *dest_ref); + REF_FUNCTION(TEST_LEN, TEST_SOURCES, g_tbls, buffs, *dest_ref); #else - REF_FUNCTION(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest_ref); + REF_FUNCTION(TEST_LEN, TEST_SOURCES, g_tbls, buffs, dest_ref); #endif - for (i = 0; i < vector; i++) { - if (0 != memcmp(dest_ref[i], dest_ptrs[i], TEST_LEN)) { - printf("Fail zero " xstr(FUNCTION_UNDER_TEST) " test%d\n", i); - dump_matrix(buffs, vector, TEST_SOURCES); - printf("dprod_base:"); - dump(dest_ref[i], 25); - printf("dprod_dut:"); - dump(dest_ptrs[i], 25); - return -1; - } - } + for (i = 0; i < vector; i++) { + if (0 != memcmp(dest_ref[i], dest_ptrs[i], TEST_LEN)) { + printf("Fail zero " xstr(FUNCTION_UNDER_TEST) " test%d\n", i); + dump_matrix(buffs, vector, TEST_SOURCES); + printf("dprod_base:"); + dump(dest_ref[i], 25); + printf("dprod_dut:"); + dump(dest_ptrs[i], 25); + return -1; + } + } #ifdef TEST_VERBOSE - putchar('.'); + putchar('.'); #endif - // Rand data test + // Rand data test - for (rtest = 0; rtest < RANDOMS; rtest++) { - for (i = 0; i < TEST_SOURCES; i++) - for (j = 0; j < TEST_LEN; j++) - buffs[i][j] = rand(); + for (rtest = 0; rtest < RANDOMS; rtest++) { + for (i = 0; i < TEST_SOURCES; i++) + for (j = 0; j < TEST_LEN; j++) + buffs[i][j] = rand(); - for (i = 0; i < vector; i++) - for (j = 0; j < TEST_SOURCES; j++) { - gf[i][j] = rand(); - gf_vect_mul_init(gf[i][j], - &g_tbls[i * (32 * TEST_SOURCES) + j * 32]); - } + for (i = 0; i < vector; i++) + for (j = 0; j < TEST_SOURCES; j++) { + gf[i][j] = rand(); + gf_vect_mul_init(gf[i][j], + &g_tbls[i * (32 * TEST_SOURCES) + j * 32]); + } - for (i = 0; i < vector; i++) - gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, - &g_tbls[i * 32 * TEST_SOURCES], buffs, - dest_ref[i]); + for (i = 0; i < vector; i++) + gf_vect_dot_prod_base(TEST_LEN, TEST_SOURCES, + &g_tbls[i * 32 * TEST_SOURCES], buffs, dest_ref[i]); - for (i = 0; i < vector; i++) - memset(dest_ptrs[i], 0, TEST_LEN); - for (i = 0; i < TEST_SOURCES; i++) { + for (i = 0; i < vector; i++) + memset(dest_ptrs[i], 0, TEST_LEN); + for (i = 0; i < TEST_SOURCES; i++) { #if (VECT == 1) - FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, i, g_tbls, buffs[i], - *dest_ptrs); + FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, i, g_tbls, buffs[i], + *dest_ptrs); #else - FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, i, g_tbls, buffs[i], - dest_ptrs); + FUNCTION_UNDER_TEST(TEST_LEN, TEST_SOURCES, i, g_tbls, buffs[i], dest_ptrs); #endif - } - for (i = 0; i < vector; i++) { - if (0 != memcmp(dest_ref[i], dest_ptrs[i], TEST_LEN)) { - printf("Fail rand " xstr(FUNCTION_UNDER_TEST) " test%d %d\n", - i, rtest); - dump_matrix(buffs, vector, TEST_SOURCES); - printf("dprod_base:"); - dump(dest_ref[i], 25); - printf("dprod_dut:"); - dump(dest_ptrs[i], 25); - return -1; - } - } + } + for (i = 0; i < vector; i++) { + if (0 != memcmp(dest_ref[i], dest_ptrs[i], TEST_LEN)) { + printf("Fail rand " xstr(FUNCTION_UNDER_TEST) " test%d %d\n", i, + rtest); + dump_matrix(buffs, vector, TEST_SOURCES); + printf("dprod_base:"); + dump(dest_ref[i], 25); + printf("dprod_dut:"); + dump(dest_ptrs[i], 25); + return -1; + } + } #ifdef TEST_VERBOSE - putchar('.'); + putchar('.'); #endif - } - - // Rand data test with varied parameters - for (rtest = 0; rtest < RANDOMS; rtest++) { - for (srcs = TEST_SOURCES; srcs > 0; srcs--) { - for (i = 0; i < srcs; i++) - for (j = 0; j < TEST_LEN; j++) - buffs[i][j] = rand(); - - for (i = 0; i < vector; i++) - for (j = 0; j < srcs; j++) { - gf[i][j] = rand(); - gf_vect_mul_init(gf[i][j], - &g_tbls[i * (32 * srcs) + j * 32]); - } - - for (i = 0; i < vector; i++) - gf_vect_dot_prod_base(TEST_LEN, srcs, &g_tbls[i * 32 * srcs], - buffs, dest_ref[i]); - - for (i = 0; i < vector; i++) - memset(dest_ptrs[i], 0, TEST_LEN); - for (i = 0; i < srcs; i++) { + } + + // Rand data test with varied parameters + for (rtest = 0; rtest < RANDOMS; rtest++) { + for (srcs = TEST_SOURCES; srcs > 0; srcs--) { + for (i = 0; i < srcs; i++) + for (j = 0; j < TEST_LEN; j++) + buffs[i][j] = rand(); + + for (i = 0; i < vector; i++) + for (j = 0; j < srcs; j++) { + gf[i][j] = rand(); + gf_vect_mul_init(gf[i][j], + &g_tbls[i * (32 * srcs) + j * 32]); + } + + for (i = 0; i < vector; i++) + gf_vect_dot_prod_base(TEST_LEN, srcs, &g_tbls[i * 32 * srcs], buffs, + dest_ref[i]); + + for (i = 0; i < vector; i++) + memset(dest_ptrs[i], 0, TEST_LEN); + for (i = 0; i < srcs; i++) { #if (VECT == 1) - FUNCTION_UNDER_TEST(TEST_LEN, srcs, i, g_tbls, buffs[i], - *dest_ptrs); + FUNCTION_UNDER_TEST(TEST_LEN, srcs, i, g_tbls, buffs[i], + *dest_ptrs); #else - FUNCTION_UNDER_TEST(TEST_LEN, srcs, i, g_tbls, buffs[i], - dest_ptrs); + FUNCTION_UNDER_TEST(TEST_LEN, srcs, i, g_tbls, buffs[i], dest_ptrs); #endif - - } - for (i = 0; i < vector; i++) { - if (0 != memcmp(dest_ref[i], dest_ptrs[i], TEST_LEN)) { - printf("Fail rand " xstr(FUNCTION_UNDER_TEST) - " test%d srcs=%d\n", i, srcs); - dump_matrix(buffs, vector, TEST_SOURCES); - printf("dprod_base:"); - dump(dest_ref[i], 25); - printf("dprod_dut:"); - dump(dest_ptrs[i], 25); - return -1; - } - } + } + for (i = 0; i < vector; i++) { + if (0 != memcmp(dest_ref[i], dest_ptrs[i], TEST_LEN)) { + printf("Fail rand " xstr( + FUNCTION_UNDER_TEST) " test%d srcs=%d\n", + i, srcs); + dump_matrix(buffs, vector, TEST_SOURCES); + printf("dprod_base:"); + dump(dest_ref[i], 25); + printf("dprod_dut:"); + dump(dest_ptrs[i], 25); + return -1; + } + } #ifdef TEST_VERBOSE - putchar('.'); + putchar('.'); #endif - } - } - - // Run tests at end of buffer for Electric Fence - align = (LEN_ALIGN_CHK_B != 0) ? 1 : ALIGN_SIZE; - for (size = TEST_MIN_SIZE; size <= TEST_SIZE; size += align) { - for (i = 0; i < TEST_SOURCES; i++) - for (j = 0; j < TEST_LEN; j++) - buffs[i][j] = rand(); - - for (i = 0; i < TEST_SOURCES; i++) // Line up TEST_SIZE from end - efence_buffs[i] = buffs[i] + TEST_LEN - size; - - for (i = 0; i < vector; i++) - for (j = 0; j < TEST_SOURCES; j++) { - gf[i][j] = rand(); - gf_vect_mul_init(gf[i][j], - &g_tbls[i * (32 * TEST_SOURCES) + j * 32]); - } - - for (i = 0; i < vector; i++) - gf_vect_dot_prod_base(size, TEST_SOURCES, - &g_tbls[i * 32 * TEST_SOURCES], efence_buffs, - dest_ref[i]); - - for (i = 0; i < vector; i++) - memset(dest_ptrs[i], 0, size); - for (i = 0; i < TEST_SOURCES; i++) { + } + } + + // Run tests at end of buffer for Electric Fence + align = (LEN_ALIGN_CHK_B != 0) ? 1 : ALIGN_SIZE; + for (size = TEST_MIN_SIZE; size <= TEST_SIZE; size += align) { + for (i = 0; i < TEST_SOURCES; i++) + for (j = 0; j < TEST_LEN; j++) + buffs[i][j] = rand(); + + for (i = 0; i < TEST_SOURCES; i++) // Line up TEST_SIZE from end + efence_buffs[i] = buffs[i] + TEST_LEN - size; + + for (i = 0; i < vector; i++) + for (j = 0; j < TEST_SOURCES; j++) { + gf[i][j] = rand(); + gf_vect_mul_init(gf[i][j], + &g_tbls[i * (32 * TEST_SOURCES) + j * 32]); + } + + for (i = 0; i < vector; i++) + gf_vect_dot_prod_base(size, TEST_SOURCES, &g_tbls[i * 32 * TEST_SOURCES], + efence_buffs, dest_ref[i]); + + for (i = 0; i < vector; i++) + memset(dest_ptrs[i], 0, size); + for (i = 0; i < TEST_SOURCES; i++) { #if (VECT == 1) - FUNCTION_UNDER_TEST(size, TEST_SOURCES, i, g_tbls, efence_buffs[i], - *dest_ptrs); + FUNCTION_UNDER_TEST(size, TEST_SOURCES, i, g_tbls, efence_buffs[i], + *dest_ptrs); #else - FUNCTION_UNDER_TEST(size, TEST_SOURCES, i, g_tbls, efence_buffs[i], - dest_ptrs); + FUNCTION_UNDER_TEST(size, TEST_SOURCES, i, g_tbls, efence_buffs[i], + dest_ptrs); #endif - } - for (i = 0; i < vector; i++) { - if (0 != memcmp(dest_ref[i], dest_ptrs[i], size)) { - printf("Fail rand " xstr(FUNCTION_UNDER_TEST) - " test%d size=%d\n", i, size); - dump_matrix(buffs, vector, TEST_SOURCES); - printf("dprod_base:"); - dump(dest_ref[i], TEST_MIN_SIZE + align); - printf("dprod_dut:"); - dump(dest_ptrs[i], TEST_MIN_SIZE + align); - return -1; - } - } + } + for (i = 0; i < vector; i++) { + if (0 != memcmp(dest_ref[i], dest_ptrs[i], size)) { + printf("Fail rand " xstr(FUNCTION_UNDER_TEST) " test%d size=%d\n", + i, size); + dump_matrix(buffs, vector, TEST_SOURCES); + printf("dprod_base:"); + dump(dest_ref[i], TEST_MIN_SIZE + align); + printf("dprod_dut:"); + dump(dest_ptrs[i], TEST_MIN_SIZE + align); + return -1; + } + } #ifdef TEST_VERBOSE - putchar('.'); + putchar('.'); #endif - } + } - // Test rand ptr alignment if available + // Test rand ptr alignment if available - for (rtest = 0; rtest < RANDOMS; rtest++) { - size = (TEST_LEN - PTR_ALIGN_CHK_B) & ~(TEST_MIN_SIZE - 1); - srcs = rand() % TEST_SOURCES; - if (srcs == 0) - continue; + for (rtest = 0; rtest < RANDOMS; rtest++) { + size = (TEST_LEN - PTR_ALIGN_CHK_B) & ~(TEST_MIN_SIZE - 1); + srcs = rand() % TEST_SOURCES; + if (srcs == 0) + continue; - offset = (PTR_ALIGN_CHK_B != 0) ? 1 : PTR_ALIGN_CHK_B; - // Add random offsets - for (i = 0; i < srcs; i++) - ubuffs[i] = buffs[i] + (rand() & (PTR_ALIGN_CHK_B - offset)); + offset = (PTR_ALIGN_CHK_B != 0) ? 1 : PTR_ALIGN_CHK_B; + // Add random offsets + for (i = 0; i < srcs; i++) + ubuffs[i] = buffs[i] + (rand() & (PTR_ALIGN_CHK_B - offset)); - for (i = 0; i < vector; i++) { - udest_ptrs[i] = dest_ptrs[i] + (rand() & (PTR_ALIGN_CHK_B - offset)); - memset(dest_ptrs[i], 0, TEST_LEN); // zero pad to check write-over - } + for (i = 0; i < vector; i++) { + udest_ptrs[i] = dest_ptrs[i] + (rand() & (PTR_ALIGN_CHK_B - offset)); + memset(dest_ptrs[i], 0, TEST_LEN); // zero pad to check write-over + } - for (i = 0; i < srcs; i++) - for (j = 0; j < size; j++) - ubuffs[i][j] = rand(); + for (i = 0; i < srcs; i++) + for (j = 0; j < size; j++) + ubuffs[i][j] = rand(); - for (i = 0; i < vector; i++) - for (j = 0; j < srcs; j++) { - gf[i][j] = rand(); - gf_vect_mul_init(gf[i][j], &g_tbls[i * (32 * srcs) + j * 32]); - } + for (i = 0; i < vector; i++) + for (j = 0; j < srcs; j++) { + gf[i][j] = rand(); + gf_vect_mul_init(gf[i][j], &g_tbls[i * (32 * srcs) + j * 32]); + } - for (i = 0; i < vector; i++) - gf_vect_dot_prod_base(size, srcs, &g_tbls[i * 32 * srcs], ubuffs, - dest_ref[i]); + for (i = 0; i < vector; i++) + gf_vect_dot_prod_base(size, srcs, &g_tbls[i * 32 * srcs], ubuffs, + dest_ref[i]); - for (i = 0; i < srcs; i++) { + for (i = 0; i < srcs; i++) { #if (VECT == 1) - FUNCTION_UNDER_TEST(size, srcs, i, g_tbls, ubuffs[i], *udest_ptrs); + FUNCTION_UNDER_TEST(size, srcs, i, g_tbls, ubuffs[i], *udest_ptrs); #else - FUNCTION_UNDER_TEST(size, srcs, i, g_tbls, ubuffs[i], udest_ptrs); + FUNCTION_UNDER_TEST(size, srcs, i, g_tbls, ubuffs[i], udest_ptrs); #endif - } - for (i = 0; i < vector; i++) { - if (0 != memcmp(dest_ref[i], udest_ptrs[i], size)) { - printf("Fail rand " xstr(FUNCTION_UNDER_TEST) - " test%d ualign srcs=%d\n", i, srcs); - dump_matrix(buffs, vector, TEST_SOURCES); - printf("dprod_base:"); - dump(dest_ref[i], 25); - printf("dprod_dut:"); - dump(udest_ptrs[i], 25); - return -1; - } - } - - // Confirm that padding around dests is unchanged - memset(dest_ref[0], 0, PTR_ALIGN_CHK_B); // Make reference zero buff - - for (i = 0; i < vector; i++) { - offset = udest_ptrs[i] - dest_ptrs[i]; - if (memcmp(dest_ptrs[i], dest_ref[0], offset)) { - printf("Fail rand ualign pad1 start\n"); - return -1; - } - if (memcmp - (dest_ptrs[i] + offset + size, dest_ref[0], - PTR_ALIGN_CHK_B - offset)) { - printf("Fail rand ualign pad1 end\n"); - return -1; - } - } + } + for (i = 0; i < vector; i++) { + if (0 != memcmp(dest_ref[i], udest_ptrs[i], size)) { + printf("Fail rand " xstr( + FUNCTION_UNDER_TEST) " test%d ualign srcs=%d\n", + i, srcs); + dump_matrix(buffs, vector, TEST_SOURCES); + printf("dprod_base:"); + dump(dest_ref[i], 25); + printf("dprod_dut:"); + dump(udest_ptrs[i], 25); + return -1; + } + } + + // Confirm that padding around dests is unchanged + memset(dest_ref[0], 0, PTR_ALIGN_CHK_B); // Make reference zero buff + + for (i = 0; i < vector; i++) { + offset = udest_ptrs[i] - dest_ptrs[i]; + if (memcmp(dest_ptrs[i], dest_ref[0], offset)) { + printf("Fail rand ualign pad1 start\n"); + return -1; + } + if (memcmp(dest_ptrs[i] + offset + size, dest_ref[0], + PTR_ALIGN_CHK_B - offset)) { + printf("Fail rand ualign pad1 end\n"); + return -1; + } + } #ifdef TEST_VERBOSE - putchar('.'); + putchar('.'); #endif - } - - // Test all size alignment - align = (LEN_ALIGN_CHK_B != 0) ? 1 : ALIGN_SIZE; - - for (size = TEST_LEN; size >= TEST_MIN_SIZE; size -= align) { - for (i = 0; i < TEST_SOURCES; i++) - for (j = 0; j < size; j++) - buffs[i][j] = rand(); - - for (i = 0; i < vector; i++) { - for (j = 0; j < TEST_SOURCES; j++) { - gf[i][j] = rand(); - gf_vect_mul_init(gf[i][j], - &g_tbls[i * (32 * TEST_SOURCES) + j * 32]); - } - memset(dest_ptrs[i], 0, TEST_LEN); // zero pad to check write-over - } - - for (i = 0; i < vector; i++) - gf_vect_dot_prod_base(size, TEST_SOURCES, - &g_tbls[i * 32 * TEST_SOURCES], buffs, - dest_ref[i]); - - for (i = 0; i < TEST_SOURCES; i++) { + } + + // Test all size alignment + align = (LEN_ALIGN_CHK_B != 0) ? 1 : ALIGN_SIZE; + + for (size = TEST_LEN; size >= TEST_MIN_SIZE; size -= align) { + for (i = 0; i < TEST_SOURCES; i++) + for (j = 0; j < size; j++) + buffs[i][j] = rand(); + + for (i = 0; i < vector; i++) { + for (j = 0; j < TEST_SOURCES; j++) { + gf[i][j] = rand(); + gf_vect_mul_init(gf[i][j], + &g_tbls[i * (32 * TEST_SOURCES) + j * 32]); + } + memset(dest_ptrs[i], 0, TEST_LEN); // zero pad to check write-over + } + + for (i = 0; i < vector; i++) + gf_vect_dot_prod_base(size, TEST_SOURCES, &g_tbls[i * 32 * TEST_SOURCES], + buffs, dest_ref[i]); + + for (i = 0; i < TEST_SOURCES; i++) { #if (VECT == 1) - FUNCTION_UNDER_TEST(size, TEST_SOURCES, i, g_tbls, buffs[i], - *dest_ptrs); + FUNCTION_UNDER_TEST(size, TEST_SOURCES, i, g_tbls, buffs[i], *dest_ptrs); #else - FUNCTION_UNDER_TEST(size, TEST_SOURCES, i, g_tbls, buffs[i], - dest_ptrs); + FUNCTION_UNDER_TEST(size, TEST_SOURCES, i, g_tbls, buffs[i], dest_ptrs); #endif - } - for (i = 0; i < vector; i++) { - if (0 != memcmp(dest_ref[i], dest_ptrs[i], size)) { - printf("Fail rand " xstr(FUNCTION_UNDER_TEST) - " test%d ualign len=%d\n", i, size); - dump_matrix(buffs, vector, TEST_SOURCES); - printf("dprod_base:"); - dump(dest_ref[i], 25); - printf("dprod_dut:"); - dump(dest_ptrs[i], 25); - return -1; - } - } + } + for (i = 0; i < vector; i++) { + if (0 != memcmp(dest_ref[i], dest_ptrs[i], size)) { + printf("Fail rand " xstr( + FUNCTION_UNDER_TEST) " test%d ualign len=%d\n", + i, size); + dump_matrix(buffs, vector, TEST_SOURCES); + printf("dprod_base:"); + dump(dest_ref[i], 25); + printf("dprod_dut:"); + dump(dest_ptrs[i], 25); + return -1; + } + } #ifdef TEST_VERBOSE - putchar('.'); + putchar('.'); #endif + } - } - - printf("Pass\n"); - return 0; - + printf("Pass\n"); + return 0; } diff --git a/erasure_code/gf_vect_mul_base_test.c b/erasure_code/gf_vect_mul_base_test.c index cce577e4..8ebadf8f 100644 --- a/erasure_code/gf_vect_mul_base_test.c +++ b/erasure_code/gf_vect_mul_base_test.c @@ -29,117 +29,116 @@ #include #include -#include // for memset +#include // for memset #include "erasure_code.h" -#define TEST_SIZE 8192 -#define TEST_MEM TEST_SIZE -#define TEST_LOOPS 100000 +#define TEST_SIZE 8192 +#define TEST_MEM TEST_SIZE +#define TEST_LOOPS 100000 #define TEST_TYPE_STR "" typedef unsigned char u8; -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - int i; - u8 *buff1, *buff2, *buff3, gf_const_tbl[64], a = 2; - int align, size; - unsigned char *efence_buff1; - unsigned char *efence_buff2; - - printf("gf_vect_mul_base_test:\n"); - - gf_vect_mul_init(a, gf_const_tbl); - - buff1 = (u8 *) malloc(TEST_SIZE); - buff2 = (u8 *) malloc(TEST_SIZE); - buff3 = (u8 *) malloc(TEST_SIZE); - - if (NULL == buff1 || NULL == buff2 || NULL == buff3) { - printf("buffer alloc error\n"); - return -1; - } - // Fill with rand data - for (i = 0; i < TEST_SIZE; i++) - buff1[i] = rand(); - - if (gf_vect_mul_base(TEST_SIZE, gf_const_tbl, buff1, buff2) != 0) { - printf("fail fill with rand data\n"); - return 1; - } - - for (i = 0; i < TEST_SIZE; i++) - if (gf_mul(a, buff1[i]) != buff2[i]) { - printf("fail at %d, 0x%x x 2 = 0x%x (0x%x)\n", i, buff1[i], buff2[i], - gf_mul(2, buff1[i])); - return 1; - } - - if (gf_vect_mul_base(TEST_SIZE, gf_const_tbl, buff1, buff3) != 0) { - printf("fail fill with rand data for buff1\n"); - return -1; - } - // Check reference function - for (i = 0; i < TEST_SIZE; i++) - if (buff2[i] != buff3[i]) { - printf("fail at %d, 0x%x x 0x%d = 0x%x (0x%x)\n", - i, a, buff1[i], buff2[i], gf_mul(a, buff1[i])); - return 1; - } - - for (i = 0; i < TEST_SIZE; i++) - buff1[i] = rand(); - - // Check each possible constant - printf("Random tests "); - for (a = 0; a != 255; a++) { - gf_vect_mul_init(a, gf_const_tbl); - if (gf_vect_mul_base(TEST_SIZE, gf_const_tbl, buff1, buff2) != 0) { - printf("fail random tests\n"); - return 1; - } - - for (i = 0; i < TEST_SIZE; i++) - if (gf_mul(a, buff1[i]) != buff2[i]) { - printf("fail at %d, 0x%x x %d = 0x%x (0x%x)\n", - i, a, buff1[i], buff2[i], gf_mul(2, buff1[i])); - return 1; - } + int i; + u8 *buff1, *buff2, *buff3, gf_const_tbl[64], a = 2; + int align, size; + unsigned char *efence_buff1; + unsigned char *efence_buff2; + + printf("gf_vect_mul_base_test:\n"); + + gf_vect_mul_init(a, gf_const_tbl); + + buff1 = (u8 *) malloc(TEST_SIZE); + buff2 = (u8 *) malloc(TEST_SIZE); + buff3 = (u8 *) malloc(TEST_SIZE); + + if (NULL == buff1 || NULL == buff2 || NULL == buff3) { + printf("buffer alloc error\n"); + return -1; + } + // Fill with rand data + for (i = 0; i < TEST_SIZE; i++) + buff1[i] = rand(); + + if (gf_vect_mul_base(TEST_SIZE, gf_const_tbl, buff1, buff2) != 0) { + printf("fail fill with rand data\n"); + return 1; + } + + for (i = 0; i < TEST_SIZE; i++) + if (gf_mul(a, buff1[i]) != buff2[i]) { + printf("fail at %d, 0x%x x 2 = 0x%x (0x%x)\n", i, buff1[i], buff2[i], + gf_mul(2, buff1[i])); + return 1; + } + + if (gf_vect_mul_base(TEST_SIZE, gf_const_tbl, buff1, buff3) != 0) { + printf("fail fill with rand data for buff1\n"); + return -1; + } + // Check reference function + for (i = 0; i < TEST_SIZE; i++) + if (buff2[i] != buff3[i]) { + printf("fail at %d, 0x%x x 0x%d = 0x%x (0x%x)\n", i, a, buff1[i], buff2[i], + gf_mul(a, buff1[i])); + return 1; + } + + for (i = 0; i < TEST_SIZE; i++) + buff1[i] = rand(); + + // Check each possible constant + printf("Random tests "); + for (a = 0; a != 255; a++) { + gf_vect_mul_init(a, gf_const_tbl); + if (gf_vect_mul_base(TEST_SIZE, gf_const_tbl, buff1, buff2) != 0) { + printf("fail random tests\n"); + return 1; + } + + for (i = 0; i < TEST_SIZE; i++) + if (gf_mul(a, buff1[i]) != buff2[i]) { + printf("fail at %d, 0x%x x %d = 0x%x (0x%x)\n", i, a, buff1[i], + buff2[i], gf_mul(2, buff1[i])); + return 1; + } #ifdef TEST_VERBOSE - putchar('.'); + putchar('.'); #endif - } - - // Run tests at end of buffer for Electric Fence - align = 32; - a = 2; - - gf_vect_mul_init(a, gf_const_tbl); - for (size = 0; size < TEST_SIZE; size += align) { - // Line up TEST_SIZE from end - efence_buff1 = buff1 + size; - efence_buff2 = buff2 + size; - - if (gf_vect_mul_base - (TEST_SIZE - size, gf_const_tbl, efence_buff1, efence_buff2) != 0) { - printf("fail tests at end of buffer\n"); - return -1; - } - - for (i = 0; i < TEST_SIZE - size; i++) - if (gf_mul(a, efence_buff1[i]) != efence_buff2[i]) { - printf("fail at %d, 0x%x x 2 = 0x%x (0x%x)\n", - i, efence_buff1[i], efence_buff2[i], gf_mul(2, - efence_buff1 - [i])); - return 1; - } + } + + // Run tests at end of buffer for Electric Fence + align = 32; + a = 2; + + gf_vect_mul_init(a, gf_const_tbl); + for (size = 0; size < TEST_SIZE; size += align) { + // Line up TEST_SIZE from end + efence_buff1 = buff1 + size; + efence_buff2 = buff2 + size; + + if (gf_vect_mul_base(TEST_SIZE - size, gf_const_tbl, efence_buff1, efence_buff2) != + 0) { + printf("fail tests at end of buffer\n"); + return -1; + } + + for (i = 0; i < TEST_SIZE - size; i++) + if (gf_mul(a, efence_buff1[i]) != efence_buff2[i]) { + printf("fail at %d, 0x%x x 2 = 0x%x (0x%x)\n", i, efence_buff1[i], + efence_buff2[i], gf_mul(2, efence_buff1[i])); + return 1; + } #ifdef TEST_VERBOSE - putchar('.'); + putchar('.'); #endif - } + } - printf(" done: Pass\n"); - return 0; + printf(" done: Pass\n"); + return 0; } diff --git a/erasure_code/gf_vect_mul_perf.c b/erasure_code/gf_vect_mul_perf.c index ae41cee4..7a4fc53f 100644 --- a/erasure_code/gf_vect_mul_perf.c +++ b/erasure_code/gf_vect_mul_perf.c @@ -29,63 +29,65 @@ #include #include -#include // for memset +#include // for memset #include "erasure_code.h" #include "test.h" #ifndef GT_L3_CACHE -# define GT_L3_CACHE 32*1024*1024 /* some number > last level cache */ +#define GT_L3_CACHE 32 * 1024 * 1024 /* some number > last level cache */ #endif #if !defined(COLD_TEST) && !defined(TEST_CUSTOM) // Cached test, loop many times over small dataset -# define TEST_SOURCES 10 -# define TEST_LEN 8*1024 -# define TEST_TYPE_STR "_warm" -#elif defined (COLD_TEST) +#define TEST_SOURCES 10 +#define TEST_LEN 8 * 1024 +#define TEST_TYPE_STR "_warm" +#elif defined(COLD_TEST) // Uncached test. Pull from large mem base. -# define TEST_SOURCES 10 -# define TEST_LEN (GT_L3_CACHE / 2) -# define TEST_TYPE_STR "_cold" -#elif defined (TEST_CUSTOM) -# define TEST_TYPE_STR "_cus" +#define TEST_SOURCES 10 +#define TEST_LEN (GT_L3_CACHE / 2) +#define TEST_TYPE_STR "_cold" +#elif defined(TEST_CUSTOM) +#define TEST_TYPE_STR "_cus" #endif #define TEST_MEM (2 * TEST_LEN) typedef unsigned char u8; -void gf_vect_mul_perf(u8 a, u8 * gf_const_tbl, u8 * buff1, u8 * buff2) +void +gf_vect_mul_perf(u8 a, u8 *gf_const_tbl, u8 *buff1, u8 *buff2) { - gf_vect_mul_init(a, gf_const_tbl); - gf_vect_mul(TEST_LEN, gf_const_tbl, buff1, buff2); + gf_vect_mul_init(a, gf_const_tbl); + gf_vect_mul(TEST_LEN, gf_const_tbl, buff1, buff2); } -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - u8 *buff1, *buff2, gf_const_tbl[64], a = 2; - struct perf start; + u8 *buff1, *buff2, gf_const_tbl[64], a = 2; + struct perf start; - printf("gf_vect_mul_perf:\n"); + printf("gf_vect_mul_perf:\n"); - // Allocate large mem region - buff1 = (u8 *) malloc(TEST_LEN); - buff2 = (u8 *) malloc(TEST_LEN); - if (NULL == buff1 || NULL == buff2) { - printf("Failed to allocate %dB\n", TEST_LEN); - return 1; - } + // Allocate large mem region + buff1 = (u8 *) malloc(TEST_LEN); + buff2 = (u8 *) malloc(TEST_LEN); + if (NULL == buff1 || NULL == buff2) { + printf("Failed to allocate %dB\n", TEST_LEN); + return 1; + } - memset(buff1, 0, TEST_LEN); - memset(buff2, 0, TEST_LEN); + memset(buff1, 0, TEST_LEN); + memset(buff2, 0, TEST_LEN); - printf("Start timed tests\n"); - fflush(0); + printf("Start timed tests\n"); + fflush(0); - BENCHMARK(&start, BENCHMARK_TIME, gf_vect_mul_perf(a, gf_const_tbl, buff1, buff2)); + BENCHMARK(&start, BENCHMARK_TIME, gf_vect_mul_perf(a, gf_const_tbl, buff1, buff2)); - printf("gf_vect_mul" TEST_TYPE_STR ": "); - perf_print(start, (long long)TEST_LEN); + printf("gf_vect_mul" TEST_TYPE_STR ": "); + perf_print(start, (long long) TEST_LEN); - return 0; + return 0; } diff --git a/erasure_code/gf_vect_mul_test.c b/erasure_code/gf_vect_mul_test.c index 617365c8..2c6092f0 100644 --- a/erasure_code/gf_vect_mul_test.c +++ b/erasure_code/gf_vect_mul_test.c @@ -31,165 +31,164 @@ #include #include "erasure_code.h" -#define TEST_SIZE (128*1024) +#define TEST_SIZE (128 * 1024) typedef unsigned char u8; -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - int i, ret = -1; - u8 *buff1 = NULL, *buff2 = NULL, *buff3 = NULL, gf_const_tbl[64], a = 2; - int tsize; - int align, size; - unsigned char *efence_buff1; - unsigned char *efence_buff2; - unsigned char *efence_buff3; - - printf("gf_vect_mul_test: "); - - gf_vect_mul_init(a, gf_const_tbl); - - buff1 = (u8 *) malloc(TEST_SIZE); - buff2 = (u8 *) malloc(TEST_SIZE); - buff3 = (u8 *) malloc(TEST_SIZE); - - if (NULL == buff1 || NULL == buff2 || NULL == buff3) { - printf("buffer alloc error\n"); - goto exit; - } - // Fill with rand data - for (i = 0; i < TEST_SIZE; i++) - buff1[i] = rand(); - - if (gf_vect_mul(TEST_SIZE, gf_const_tbl, buff1, buff2) != 0) { - printf("fail creating buff2\n"); - goto exit; - } - - for (i = 0; i < TEST_SIZE; i++) { - if (gf_mul(a, buff1[i]) != buff2[i]) { - printf("fail at %d, 0x%x x 2 = 0x%x (0x%x)\n", i, - buff1[i], buff2[i], gf_mul(2, buff1[i])); - goto exit; - } - } - - if (gf_vect_mul_base(TEST_SIZE, gf_const_tbl, buff1, buff3) != 0) { - printf("fail fill with rand data\n"); - goto exit; - } - // Check reference function - for (i = 0; i < TEST_SIZE; i++) { - if (buff2[i] != buff3[i]) { - printf("fail at %d, 0x%x x 0x%d = 0x%x (0x%x)\n", - i, a, buff1[i], buff2[i], gf_mul(a, buff1[i])); - goto exit; - } - } - - for (i = 0; i < TEST_SIZE; i++) - buff1[i] = rand(); - - // Check each possible constant - for (a = 0; a != 255; a++) { - gf_vect_mul_init(a, gf_const_tbl); - if (gf_vect_mul(TEST_SIZE, gf_const_tbl, buff1, buff2) != 0) { - printf("fail creating buff2\n"); - goto exit; - } - - for (i = 0; i < TEST_SIZE; i++) - if (gf_mul(a, buff1[i]) != buff2[i]) { - printf("fail at %d, 0x%x x %d = 0x%x (0x%x)\n", - i, a, buff1[i], buff2[i], gf_mul(2, buff1[i])); - goto exit; - } + int i, ret = -1; + u8 *buff1 = NULL, *buff2 = NULL, *buff3 = NULL, gf_const_tbl[64], a = 2; + int tsize; + int align, size; + unsigned char *efence_buff1; + unsigned char *efence_buff2; + unsigned char *efence_buff3; + + printf("gf_vect_mul_test: "); + + gf_vect_mul_init(a, gf_const_tbl); + + buff1 = (u8 *) malloc(TEST_SIZE); + buff2 = (u8 *) malloc(TEST_SIZE); + buff3 = (u8 *) malloc(TEST_SIZE); + + if (NULL == buff1 || NULL == buff2 || NULL == buff3) { + printf("buffer alloc error\n"); + goto exit; + } + // Fill with rand data + for (i = 0; i < TEST_SIZE; i++) + buff1[i] = rand(); + + if (gf_vect_mul(TEST_SIZE, gf_const_tbl, buff1, buff2) != 0) { + printf("fail creating buff2\n"); + goto exit; + } + + for (i = 0; i < TEST_SIZE; i++) { + if (gf_mul(a, buff1[i]) != buff2[i]) { + printf("fail at %d, 0x%x x 2 = 0x%x (0x%x)\n", i, buff1[i], buff2[i], + gf_mul(2, buff1[i])); + goto exit; + } + } + + if (gf_vect_mul_base(TEST_SIZE, gf_const_tbl, buff1, buff3) != 0) { + printf("fail fill with rand data\n"); + goto exit; + } + // Check reference function + for (i = 0; i < TEST_SIZE; i++) { + if (buff2[i] != buff3[i]) { + printf("fail at %d, 0x%x x 0x%d = 0x%x (0x%x)\n", i, a, buff1[i], buff2[i], + gf_mul(a, buff1[i])); + goto exit; + } + } + + for (i = 0; i < TEST_SIZE; i++) + buff1[i] = rand(); + + // Check each possible constant + for (a = 0; a != 255; a++) { + gf_vect_mul_init(a, gf_const_tbl); + if (gf_vect_mul(TEST_SIZE, gf_const_tbl, buff1, buff2) != 0) { + printf("fail creating buff2\n"); + goto exit; + } + + for (i = 0; i < TEST_SIZE; i++) + if (gf_mul(a, buff1[i]) != buff2[i]) { + printf("fail at %d, 0x%x x %d = 0x%x (0x%x)\n", i, a, buff1[i], + buff2[i], gf_mul(2, buff1[i])); + goto exit; + } #ifdef TEST_VERBOSE - putchar('.'); + putchar('.'); #endif - } - - // Check buffer len - for (tsize = TEST_SIZE; tsize > 0; tsize -= 32) { - a = rand(); - gf_vect_mul_init(a, gf_const_tbl); - if (gf_vect_mul(tsize, gf_const_tbl, buff1, buff2) != 0) { - printf("fail creating buff2 (len %d)\n", tsize); - goto exit; - } - - for (i = 0; i < tsize; i++) - if (gf_mul(a, buff1[i]) != buff2[i]) { - printf("fail at %d, 0x%x x %d = 0x%x (0x%x)\n", - i, a, buff1[i], buff2[i], gf_mul(2, buff1[i])); - goto exit; - } + } + + // Check buffer len + for (tsize = TEST_SIZE; tsize > 0; tsize -= 32) { + a = rand(); + gf_vect_mul_init(a, gf_const_tbl); + if (gf_vect_mul(tsize, gf_const_tbl, buff1, buff2) != 0) { + printf("fail creating buff2 (len %d)\n", tsize); + goto exit; + } + + for (i = 0; i < tsize; i++) + if (gf_mul(a, buff1[i]) != buff2[i]) { + printf("fail at %d, 0x%x x %d = 0x%x (0x%x)\n", i, a, buff1[i], + buff2[i], gf_mul(2, buff1[i])); + goto exit; + } #ifdef TEST_VERBOSE - if (0 == tsize % (32 * 8)) { - putchar('.'); - fflush(0); - } + if (0 == tsize % (32 * 8)) { + putchar('.'); + fflush(0); + } #endif - } - - // Run tests at end of buffer for Electric Fence - align = 32; - a = 2; - - gf_vect_mul_init(a, gf_const_tbl); - for (size = 0; size < TEST_SIZE; size += align) { - // Line up TEST_SIZE from end - efence_buff1 = buff1 + size; - efence_buff2 = buff2 + size; - efence_buff3 = buff3 + size; - - gf_vect_mul(TEST_SIZE - size, gf_const_tbl, efence_buff1, efence_buff2); - - for (i = 0; i < TEST_SIZE - size; i++) - if (gf_mul(a, efence_buff1[i]) != efence_buff2[i]) { - printf("fail at %d, 0x%x x 2 = 0x%x (0x%x)\n", - i, efence_buff1[i], efence_buff2[i], - gf_mul(2, efence_buff1[i])); - goto exit; - } - - if (gf_vect_mul_base - (TEST_SIZE - size, gf_const_tbl, efence_buff1, efence_buff3) != 0) { - printf("fail line up TEST_SIZE from end\n"); - goto exit; - } - // Check reference function - for (i = 0; i < TEST_SIZE - size; i++) - if (efence_buff2[i] != efence_buff3[i]) { - printf("fail at %d, 0x%x x 0x%d = 0x%x (0x%x)\n", - i, a, efence_buff2[i], efence_buff3[i], - gf_mul(2, efence_buff1[i])); - goto exit; - } + } + + // Run tests at end of buffer for Electric Fence + align = 32; + a = 2; + + gf_vect_mul_init(a, gf_const_tbl); + for (size = 0; size < TEST_SIZE; size += align) { + // Line up TEST_SIZE from end + efence_buff1 = buff1 + size; + efence_buff2 = buff2 + size; + efence_buff3 = buff3 + size; + + gf_vect_mul(TEST_SIZE - size, gf_const_tbl, efence_buff1, efence_buff2); + + for (i = 0; i < TEST_SIZE - size; i++) + if (gf_mul(a, efence_buff1[i]) != efence_buff2[i]) { + printf("fail at %d, 0x%x x 2 = 0x%x (0x%x)\n", i, efence_buff1[i], + efence_buff2[i], gf_mul(2, efence_buff1[i])); + goto exit; + } + + if (gf_vect_mul_base(TEST_SIZE - size, gf_const_tbl, efence_buff1, efence_buff3) != + 0) { + printf("fail line up TEST_SIZE from end\n"); + goto exit; + } + // Check reference function + for (i = 0; i < TEST_SIZE - size; i++) + if (efence_buff2[i] != efence_buff3[i]) { + printf("fail at %d, 0x%x x 0x%d = 0x%x (0x%x)\n", i, a, + efence_buff2[i], efence_buff3[i], + gf_mul(2, efence_buff1[i])); + goto exit; + } #ifdef TEST_VERBOSE - putchar('.'); + putchar('.'); #endif - } + } - // Test all unsupported sizes up to TEST_SIZE - for (size = 0; size < TEST_SIZE; size++) { - if (size % align != 0 && gf_vect_mul(size, gf_const_tbl, buff1, buff2) == 0) { - printf - ("fail expecting nonzero return code for unaligned size param (%d)\n", - size); - goto exit; - } - } + // Test all unsupported sizes up to TEST_SIZE + for (size = 0; size < TEST_SIZE; size++) { + if (size % align != 0 && gf_vect_mul(size, gf_const_tbl, buff1, buff2) == 0) { + printf("fail expecting nonzero return code for unaligned size param (%d)\n", + size); + goto exit; + } + } - printf(" done: Pass\n"); - fflush(0); + printf(" done: Pass\n"); + fflush(0); - ret = 0; - exit: + ret = 0; +exit: - free(buff1); - free(buff2); - free(buff3); + free(buff1); + free(buff2); + free(buff3); - return ret; + return ret; } diff --git a/erasure_code/ppc64le/ec_base_vsx.c b/erasure_code/ppc64le/ec_base_vsx.c index c3163a58..975fd249 100644 --- a/erasure_code/ppc64le/ec_base_vsx.c +++ b/erasure_code/ppc64le/ec_base_vsx.c @@ -1,106 +1,109 @@ #include "erasure_code.h" #include "ec_base_vsx.h" -void gf_vect_dot_prod(int len, int vlen, unsigned char *v, - unsigned char **src, unsigned char *dest) +void +gf_vect_dot_prod(int len, int vlen, unsigned char *v, unsigned char **src, unsigned char *dest) { - gf_vect_dot_prod_vsx(len, vlen, v, src, dest); + gf_vect_dot_prod_vsx(len, vlen, v, src, dest); } -void gf_vect_mad(int len, int vec, int vec_i, unsigned char *v, - unsigned char *src, unsigned char *dest) +void +gf_vect_mad(int len, int vec, int vec_i, unsigned char *v, unsigned char *src, unsigned char *dest) { - gf_vect_mad_vsx(len, vec, vec_i, v, src, dest); - + gf_vect_mad_vsx(len, vec, vec_i, v, src, dest); } -void ec_encode_data(int len, int srcs, int dests, unsigned char *v, - unsigned char **src, unsigned char **dest) +void +ec_encode_data(int len, int srcs, int dests, unsigned char *v, unsigned char **src, + unsigned char **dest) { - if (len < 64) { - ec_encode_data_base(len, srcs, dests, v, src, dest); - return; - } + if (len < 64) { + ec_encode_data_base(len, srcs, dests, v, src, dest); + return; + } - while (dests >= 6) { - gf_6vect_dot_prod_vsx(len, srcs, v, src, dest); - v += 6 * srcs * 32; - dest += 6; - dests -= 6; - } - switch (dests) { - case 6: - gf_6vect_dot_prod_vsx(len, srcs, v, src, dest); - break; - case 5: - gf_5vect_dot_prod_vsx(len, srcs, v, src, dest); - break; - case 4: - gf_4vect_dot_prod_vsx(len, srcs, v, src, dest); - break; - case 3: - gf_3vect_dot_prod_vsx(len, srcs, v, src, dest); - break; - case 2: - gf_2vect_dot_prod_vsx(len, srcs, v, src, dest); - break; - case 1: - gf_vect_dot_prod_vsx(len, srcs, v, src, *dest); - break; - case 0: - break; - } + while (dests >= 6) { + gf_6vect_dot_prod_vsx(len, srcs, v, src, dest); + v += 6 * srcs * 32; + dest += 6; + dests -= 6; + } + switch (dests) { + case 6: + gf_6vect_dot_prod_vsx(len, srcs, v, src, dest); + break; + case 5: + gf_5vect_dot_prod_vsx(len, srcs, v, src, dest); + break; + case 4: + gf_4vect_dot_prod_vsx(len, srcs, v, src, dest); + break; + case 3: + gf_3vect_dot_prod_vsx(len, srcs, v, src, dest); + break; + case 2: + gf_2vect_dot_prod_vsx(len, srcs, v, src, dest); + break; + case 1: + gf_vect_dot_prod_vsx(len, srcs, v, src, *dest); + break; + case 0: + break; + } } -void ec_encode_data_update(int len, int k, int rows, int vec_i, unsigned char *v, - unsigned char *data, unsigned char **dest) +void +ec_encode_data_update(int len, int k, int rows, int vec_i, unsigned char *v, unsigned char *data, + unsigned char **dest) { - if (len < 64) { - ec_encode_data_update_base(len, k, rows, vec_i, v, data, dest); - return; - } + if (len < 64) { + ec_encode_data_update_base(len, k, rows, vec_i, v, data, dest); + return; + } - while (rows >= 6) { - gf_6vect_mad_vsx(len, k, vec_i, v, data, dest); - v += 6 * k * 32; - dest += 6; - rows -= 6; - } - switch (rows) { - case 6: - gf_6vect_mad_vsx(len, k, vec_i, v, data, dest); - break; - case 5: - gf_5vect_mad_vsx(len, k, vec_i, v, data, dest); - break; - case 4: - gf_4vect_mad_vsx(len, k, vec_i, v, data, dest); - break; - case 3: - gf_3vect_mad_vsx(len, k, vec_i, v, data, dest); - break; - case 2: - gf_2vect_mad_vsx(len, k, vec_i, v, data, dest); - break; - case 1: - gf_vect_mad_vsx(len, k, vec_i, v, data, *dest); - break; - case 0: - break; - } + while (rows >= 6) { + gf_6vect_mad_vsx(len, k, vec_i, v, data, dest); + v += 6 * k * 32; + dest += 6; + rows -= 6; + } + switch (rows) { + case 6: + gf_6vect_mad_vsx(len, k, vec_i, v, data, dest); + break; + case 5: + gf_5vect_mad_vsx(len, k, vec_i, v, data, dest); + break; + case 4: + gf_4vect_mad_vsx(len, k, vec_i, v, data, dest); + break; + case 3: + gf_3vect_mad_vsx(len, k, vec_i, v, data, dest); + break; + case 2: + gf_2vect_mad_vsx(len, k, vec_i, v, data, dest); + break; + case 1: + gf_vect_mad_vsx(len, k, vec_i, v, data, *dest); + break; + case 0: + break; + } } -int gf_vect_mul(int len, unsigned char *a, void *src, void *dest) +int +gf_vect_mul(int len, unsigned char *a, void *src, void *dest) { - /* Size must be aligned to 32 bytes */ - if ((len % 32) != 0) - return -1; + /* Size must be aligned to 32 bytes */ + if ((len % 32) != 0) + return -1; - gf_vect_mul_vsx(len, a, (unsigned char *)src, (unsigned char *)dest); - return 0; + gf_vect_mul_vsx(len, a, (unsigned char *) src, (unsigned char *) dest); + return 0; } -void ec_init_tables(int k, int rows, unsigned char *a, unsigned char *g_tbls) +void +ec_init_tables(int k, int rows, unsigned char *a, unsigned char *g_tbls) { - return ec_init_tables_base(k, rows, a, g_tbls); + return ec_init_tables_base(k, rows, a, g_tbls); } diff --git a/erasure_code/ppc64le/ec_base_vsx.h b/erasure_code/ppc64le/ec_base_vsx.h index c808629a..0a696f38 100644 --- a/erasure_code/ppc64le/ec_base_vsx.h +++ b/erasure_code/ppc64le/ec_base_vsx.h @@ -9,29 +9,37 @@ extern "C" { #endif #if defined(__ibmxl__) -#define EC_vec_xl(a, b) vec_xl_be(a, b) +#define EC_vec_xl(a, b) vec_xl_be(a, b) #define EC_vec_permxor(va, vb, vc) __vpermxor(va, vb, vc) #elif defined __GNUC__ && __GNUC__ >= 8 -#define EC_vec_xl(a, b) vec_xl_be(a, b) +#define EC_vec_xl(a, b) vec_xl_be(a, b) #define EC_vec_permxor(va, vb, vc) __builtin_crypto_vpermxor(va, vb, vc) #elif defined __GNUC__ && __GNUC__ >= 7 #if defined _ARCH_PWR9 -#define EC_vec_xl(a, b) vec_vsx_ld(a, b) +#define EC_vec_xl(a, b) vec_vsx_ld(a, b) #define EC_vec_permxor(va, vb, vc) __builtin_crypto_vpermxor(va, vb, vec_nor(vc, vc)) #else -inline vector unsigned char EC_vec_xl(int off, unsigned char *ptr) { - vector unsigned char vc; - __asm__ __volatile__("lxvd2x %x0, %1, %2; xxswapd %x0, %x0" : "=wa" (vc) : "r" (off), "r" (ptr)); - return vc; +inline vector unsigned char +EC_vec_xl(int off, unsigned char *ptr) +{ + vector unsigned char vc; + __asm__ __volatile__("lxvd2x %x0, %1, %2; xxswapd %x0, %x0" + : "=wa"(vc) + : "r"(off), "r"(ptr)); + return vc; } #define EC_vec_permxor(va, vb, vc) __builtin_crypto_vpermxor(va, vb, vec_nor(vc, vc)) #endif #else #if defined _ARCH_PWR8 -inline vector unsigned char EC_vec_xl(int off, unsigned char *ptr) { - vector unsigned char vc; - __asm__ __volatile__("lxvd2x %x0, %1, %2; xxswapd %x0, %x0" : "=wa" (vc) : "r" (off), "r" (ptr)); - return vc; +inline vector unsigned char +EC_vec_xl(int off, unsigned char *ptr) +{ + vector unsigned char vc; + __asm__ __volatile__("lxvd2x %x0, %1, %2; xxswapd %x0, %x0" + : "=wa"(vc) + : "r"(off), "r"(ptr)); + return vc; } #define EC_vec_permxor(va, vb, vc) __builtin_crypto_vpermxor(va, vb, vec_nor(vc, vc)) #else @@ -57,7 +65,8 @@ inline vector unsigned char EC_vec_xl(int off, unsigned char *ptr) { * @returns none */ -void gf_vect_mul_vsx(int len, unsigned char *gftbls, unsigned char *src, unsigned char *dest); +void +gf_vect_mul_vsx(int len, unsigned char *gftbls, unsigned char *src, unsigned char *dest); /** * @brief GF(2^8) vector dot product. VSX version. @@ -77,8 +86,9 @@ void gf_vect_mul_vsx(int len, unsigned char *gftbls, unsigned char *src, unsigne * @returns none */ -void gf_vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, - unsigned char **src, unsigned char *dest); +void +gf_vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, unsigned char **src, + unsigned char *dest); /** * @brief GF(2^8) vector dot product with two outputs. VSX version. @@ -99,8 +109,9 @@ void gf_vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, * @returns none */ -void gf_2vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, - unsigned char **src, unsigned char **dest); +void +gf_2vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, unsigned char **src, + unsigned char **dest); /** * @brief GF(2^8) vector dot product with three outputs. VSX version. @@ -121,8 +132,9 @@ void gf_2vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, * @returns none */ -void gf_3vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, - unsigned char **src, unsigned char **dest); +void +gf_3vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, unsigned char **src, + unsigned char **dest); /** * @brief GF(2^8) vector dot product with four outputs. VSX version. @@ -143,8 +155,9 @@ void gf_3vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, * @returns none */ -void gf_4vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, - unsigned char **src, unsigned char **dest); +void +gf_4vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, unsigned char **src, + unsigned char **dest); /** * @brief GF(2^8) vector dot product with five outputs. VSX version. @@ -165,8 +178,9 @@ void gf_4vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, * @returns none */ -void gf_5vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, - unsigned char **src, unsigned char **dest); +void +gf_5vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, unsigned char **src, + unsigned char **dest); /** * @brief GF(2^8) vector dot product with six outputs. VSX version. @@ -187,8 +201,9 @@ void gf_5vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, * @returns none */ -void gf_6vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, - unsigned char **src, unsigned char **dest); +void +gf_6vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, unsigned char **src, + unsigned char **dest); /** * @brief GF(2^8) vector multiply accumulate. VSX version. @@ -211,8 +226,9 @@ void gf_6vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, * @returns none */ -void gf_vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, - unsigned char *dest); +void +gf_vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char *dest); /** * @brief GF(2^8) vector multiply with 2 accumulate. VSX version. * @@ -234,8 +250,9 @@ void gf_vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsigne * @returns none */ -void gf_2vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, - unsigned char **dest); +void +gf_2vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); /** * @brief GF(2^8) vector multiply with 3 accumulate. VSX version. @@ -258,8 +275,9 @@ void gf_2vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsign * @returns none */ -void gf_3vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, - unsigned char **dest); +void +gf_3vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); /** * @brief GF(2^8) vector multiply with 4 accumulate. VSX version. @@ -282,8 +300,9 @@ void gf_3vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsign * @returns none */ -void gf_4vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, - unsigned char **dest); +void +gf_4vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); /** * @brief GF(2^8) vector multiply with 5 accumulate. VSX version. @@ -305,8 +324,9 @@ void gf_4vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsign * @param dest Array of pointers to destination input/outputs. * @returns none */ -void gf_5vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, - unsigned char **dest); +void +gf_5vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); /** * @brief GF(2^8) vector multiply with 6 accumulate. VSX version. @@ -328,8 +348,9 @@ void gf_5vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsign * @param dest Array of pointers to destination input/outputs. * @returns none */ -void gf_6vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, - unsigned char **dest); +void +gf_6vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest); #ifdef __cplusplus } diff --git a/erasure_code/ppc64le/gf_2vect_dot_prod_vsx.c b/erasure_code/ppc64le/gf_2vect_dot_prod_vsx.c index 3cb269cc..8cd8cd87 100644 --- a/erasure_code/ppc64le/gf_2vect_dot_prod_vsx.c +++ b/erasure_code/ppc64le/gf_2vect_dot_prod_vsx.c @@ -1,83 +1,84 @@ #include "ec_base_vsx.h" -void gf_2vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, - unsigned char **src, unsigned char **dest) +void +gf_2vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, unsigned char **src, + unsigned char **dest) { - unsigned char *s, *t0, *t1; - vector unsigned char vX1, vX2, vX3, vX4; - vector unsigned char vY1, vY2, vY3, vY4; - vector unsigned char vYD, vYE, vYF, vYG; - vector unsigned char vhi0, vlo0, vhi1, vlo1; - int i, j, head; + unsigned char *s, *t0, *t1; + vector unsigned char vX1, vX2, vX3, vX4; + vector unsigned char vY1, vY2, vY3, vY4; + vector unsigned char vYD, vYE, vYF, vYG; + vector unsigned char vhi0, vlo0, vhi1, vlo1; + int i, j, head; - if (vlen < 128) { - gf_vect_mul_vsx(len, &gftbls[0 * 32 * vlen], src[0], (unsigned char *)dest[0]); - gf_vect_mul_vsx(len, &gftbls[1 * 32 * vlen], src[0], (unsigned char *)dest[1]); + if (vlen < 128) { + gf_vect_mul_vsx(len, &gftbls[0 * 32 * vlen], src[0], (unsigned char *) dest[0]); + gf_vect_mul_vsx(len, &gftbls[1 * 32 * vlen], src[0], (unsigned char *) dest[1]); - for (j = 1; j < vlen; j++) { - gf_2vect_mad_vsx(len, vlen, j, gftbls, src[j], dest); - } - return; - } + for (j = 1; j < vlen; j++) { + gf_2vect_mad_vsx(len, vlen, j, gftbls, src[j], dest); + } + return; + } - t0 = (unsigned char *)dest[0]; - t1 = (unsigned char *)dest[1]; + t0 = (unsigned char *) dest[0]; + t1 = (unsigned char *) dest[1]; - head = len % 64; - if (head != 0) { - gf_vect_dot_prod_base(head, vlen, &gftbls[0 * 32 * vlen], src, t0); - gf_vect_dot_prod_base(head, vlen, &gftbls[1 * 32 * vlen], src, t1); - } + head = len % 64; + if (head != 0) { + gf_vect_dot_prod_base(head, vlen, &gftbls[0 * 32 * vlen], src, t0); + gf_vect_dot_prod_base(head, vlen, &gftbls[1 * 32 * vlen], src, t1); + } - for (i = head; i < len - 63; i += 64) { - vY1 = vY1 ^ vY1; - vY2 = vY2 ^ vY2; - vY3 = vY3 ^ vY3; - vY4 = vY4 ^ vY4; + for (i = head; i < len - 63; i += 64) { + vY1 = vY1 ^ vY1; + vY2 = vY2 ^ vY2; + vY3 = vY3 ^ vY3; + vY4 = vY4 ^ vY4; - vYD = vYD ^ vYD; - vYE = vYE ^ vYE; - vYF = vYF ^ vYF; - vYG = vYG ^ vYG; + vYD = vYD ^ vYD; + vYE = vYE ^ vYE; + vYF = vYF ^ vYF; + vYG = vYG ^ vYG; - unsigned char *g0 = &gftbls[0 * 32 * vlen]; - unsigned char *g1 = &gftbls[1 * 32 * vlen]; + unsigned char *g0 = &gftbls[0 * 32 * vlen]; + unsigned char *g1 = &gftbls[1 * 32 * vlen]; - for (j = 0; j < vlen; j++) { - s = (unsigned char *)src[j]; - vX1 = vec_xl(0, s + i); - vX2 = vec_xl(16, s + i); - vX3 = vec_xl(32, s + i); - vX4 = vec_xl(48, s + i); + for (j = 0; j < vlen; j++) { + s = (unsigned char *) src[j]; + vX1 = vec_xl(0, s + i); + vX2 = vec_xl(16, s + i); + vX3 = vec_xl(32, s + i); + vX4 = vec_xl(48, s + i); - vlo0 = EC_vec_xl(0, g0); - vhi0 = EC_vec_xl(16, g0); - vlo1 = EC_vec_xl(0, g1); - vhi1 = EC_vec_xl(16, g1); + vlo0 = EC_vec_xl(0, g0); + vhi0 = EC_vec_xl(16, g0); + vlo1 = EC_vec_xl(0, g1); + vhi1 = EC_vec_xl(16, g1); - vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1); - vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2); - vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3); - vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4); + vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1); + vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2); + vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3); + vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4); - vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1); - vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2); - vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3); - vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4); + vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1); + vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2); + vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3); + vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4); - g0 += 32; - g1 += 32; - } + g0 += 32; + g1 += 32; + } - vec_xst(vY1, 0, t0 + i); - vec_xst(vY2, 16, t0 + i); - vec_xst(vY3, 0, t1 + i); - vec_xst(vY4, 16, t1 + i); + vec_xst(vY1, 0, t0 + i); + vec_xst(vY2, 16, t0 + i); + vec_xst(vY3, 0, t1 + i); + vec_xst(vY4, 16, t1 + i); - vec_xst(vYD, 32, t0 + i); - vec_xst(vYE, 48, t0 + i); - vec_xst(vYF, 32, t1 + i); - vec_xst(vYG, 48, t1 + i); - } - return; + vec_xst(vYD, 32, t0 + i); + vec_xst(vYE, 48, t0 + i); + vec_xst(vYF, 32, t1 + i); + vec_xst(vYG, 48, t1 + i); + } + return; } diff --git a/erasure_code/ppc64le/gf_2vect_mad_vsx.c b/erasure_code/ppc64le/gf_2vect_mad_vsx.c index 621684a5..b05701d1 100644 --- a/erasure_code/ppc64le/gf_2vect_mad_vsx.c +++ b/erasure_code/ppc64le/gf_2vect_mad_vsx.c @@ -1,65 +1,66 @@ #include "ec_base_vsx.h" -void gf_2vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest) +void +gf_2vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest) { - unsigned char *s, *t0, *t1; - vector unsigned char vX1, vX2, vX3, vX4; - vector unsigned char vY1, vY2, vY3, vY4; - vector unsigned char vYD, vYE, vYF, vYG; - vector unsigned char vhi0, vlo0, vhi1, vlo1; - int i, head; + unsigned char *s, *t0, *t1; + vector unsigned char vX1, vX2, vX3, vX4; + vector unsigned char vY1, vY2, vY3, vY4; + vector unsigned char vYD, vYE, vYF, vYG; + vector unsigned char vhi0, vlo0, vhi1, vlo1; + int i, head; - s = (unsigned char *)src; - t0 = (unsigned char *)dest[0]; - t1 = (unsigned char *)dest[1]; + s = (unsigned char *) src; + t0 = (unsigned char *) dest[0]; + t1 = (unsigned char *) dest[1]; - head = len % 64; - if (head != 0) { - gf_vect_mad_base(head, vec, vec_i, &gftbls[0 * 32 * vec], src, t0); - gf_vect_mad_base(head, vec, vec_i, &gftbls[1 * 32 * vec], src, t1); - } + head = len % 64; + if (head != 0) { + gf_vect_mad_base(head, vec, vec_i, &gftbls[0 * 32 * vec], src, t0); + gf_vect_mad_base(head, vec, vec_i, &gftbls[1 * 32 * vec], src, t1); + } - vlo0 = EC_vec_xl(0, gftbls + (((0 * vec) << 5) + (vec_i << 5))); - vhi0 = EC_vec_xl(16, gftbls + (((0 * vec) << 5) + (vec_i << 5))); - vlo1 = EC_vec_xl(0, gftbls + (((1 * vec) << 5) + (vec_i << 5))); - vhi1 = EC_vec_xl(16, gftbls + (((1 * vec) << 5) + (vec_i << 5))); + vlo0 = EC_vec_xl(0, gftbls + (((0 * vec) << 5) + (vec_i << 5))); + vhi0 = EC_vec_xl(16, gftbls + (((0 * vec) << 5) + (vec_i << 5))); + vlo1 = EC_vec_xl(0, gftbls + (((1 * vec) << 5) + (vec_i << 5))); + vhi1 = EC_vec_xl(16, gftbls + (((1 * vec) << 5) + (vec_i << 5))); - for (i = head; i < len - 63; i += 64) { - vX1 = vec_xl(0, s + i); - vX2 = vec_xl(16, s + i); - vX3 = vec_xl(32, s + i); - vX4 = vec_xl(48, s + i); + for (i = head; i < len - 63; i += 64) { + vX1 = vec_xl(0, s + i); + vX2 = vec_xl(16, s + i); + vX3 = vec_xl(32, s + i); + vX4 = vec_xl(48, s + i); - vY1 = vec_xl(0, t0 + i); - vY2 = vec_xl(16, t0 + i); - vYD = vec_xl(32, t0 + i); - vYE = vec_xl(48, t0 + i); + vY1 = vec_xl(0, t0 + i); + vY2 = vec_xl(16, t0 + i); + vYD = vec_xl(32, t0 + i); + vYE = vec_xl(48, t0 + i); - vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1); - vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2); - vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3); - vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4); + vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1); + vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2); + vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3); + vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4); - vY3 = vec_xl(0, t1 + i); - vY4 = vec_xl(16, t1 + i); - vYF = vec_xl(32, t1 + i); - vYG = vec_xl(48, t1 + i); + vY3 = vec_xl(0, t1 + i); + vY4 = vec_xl(16, t1 + i); + vYF = vec_xl(32, t1 + i); + vYG = vec_xl(48, t1 + i); - vec_xst(vY1, 0, t0 + i); - vec_xst(vY2, 16, t0 + i); - vec_xst(vYD, 32, t0 + i); - vec_xst(vYE, 48, t0 + i); + vec_xst(vY1, 0, t0 + i); + vec_xst(vY2, 16, t0 + i); + vec_xst(vYD, 32, t0 + i); + vec_xst(vYE, 48, t0 + i); - vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1); - vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2); - vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3); - vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4); + vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1); + vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2); + vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3); + vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4); - vec_xst(vY3, 0, t1 + i); - vec_xst(vY4, 16, t1 + i); - vec_xst(vYF, 32, t1 + i); - vec_xst(vYG, 48, t1 + i); - } - return; + vec_xst(vY3, 0, t1 + i); + vec_xst(vY4, 16, t1 + i); + vec_xst(vYF, 32, t1 + i); + vec_xst(vYG, 48, t1 + i); + } + return; } diff --git a/erasure_code/ppc64le/gf_3vect_dot_prod_vsx.c b/erasure_code/ppc64le/gf_3vect_dot_prod_vsx.c index 23b72dc4..c91ff3a9 100644 --- a/erasure_code/ppc64le/gf_3vect_dot_prod_vsx.c +++ b/erasure_code/ppc64le/gf_3vect_dot_prod_vsx.c @@ -1,104 +1,105 @@ #include "ec_base_vsx.h" -void gf_3vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, - unsigned char **src, unsigned char **dest) +void +gf_3vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, unsigned char **src, + unsigned char **dest) { - unsigned char *s, *t0, *t1, *t2; - vector unsigned char vX1, vX2, vX3, vX4; - vector unsigned char vY1, vY2, vY3, vY4, vY5, vY6; - vector unsigned char vYD, vYE, vYF, vYG, vYH, vYI; - vector unsigned char vhi0, vlo0, vhi1, vlo1, vhi2, vlo2; - int i, j, head; - - if (vlen < 128) { - gf_vect_mul_vsx(len, &gftbls[0 * 32 * vlen], src[0], (unsigned char *)dest[0]); - gf_vect_mul_vsx(len, &gftbls[1 * 32 * vlen], src[0], (unsigned char *)dest[1]); - gf_vect_mul_vsx(len, &gftbls[2 * 32 * vlen], src[0], (unsigned char *)dest[2]); - - for (j = 1; j < vlen; j++) { - gf_3vect_mad_vsx(len, vlen, j, gftbls, src[j], dest); - } - return; - } - - t0 = (unsigned char *)dest[0]; - t1 = (unsigned char *)dest[1]; - t2 = (unsigned char *)dest[2]; - - head = len % 64; - if (head != 0) { - gf_vect_dot_prod_base(head, vlen, &gftbls[0 * 32 * vlen], src, t0); - gf_vect_dot_prod_base(head, vlen, &gftbls[1 * 32 * vlen], src, t1); - gf_vect_dot_prod_base(head, vlen, &gftbls[2 * 32 * vlen], src, t2); - } - - for (i = head; i < len - 63; i += 64) { - vY1 = vY1 ^ vY1; - vY2 = vY2 ^ vY2; - vY3 = vY3 ^ vY3; - vY4 = vY4 ^ vY4; - vY5 = vY5 ^ vY5; - vY6 = vY6 ^ vY6; - - vYD = vYD ^ vYD; - vYE = vYE ^ vYE; - vYF = vYF ^ vYF; - vYG = vYG ^ vYG; - vYH = vYH ^ vYH; - vYI = vYI ^ vYI; - - unsigned char *g0 = &gftbls[0 * 32 * vlen]; - unsigned char *g1 = &gftbls[1 * 32 * vlen]; - unsigned char *g2 = &gftbls[2 * 32 * vlen]; - - for (j = 0; j < vlen; j++) { - s = (unsigned char *)src[j]; - vX1 = vec_xl(0, s + i); - vX2 = vec_xl(16, s + i); - vX3 = vec_xl(32, s + i); - vX4 = vec_xl(48, s + i); - - vlo0 = EC_vec_xl(0, g0); - vhi0 = EC_vec_xl(16, g0); - vlo1 = EC_vec_xl(0, g1); - vhi1 = EC_vec_xl(16, g1); - - vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1); - vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2); - vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3); - vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4); - - vlo2 = vec_xl(0, g2); - vhi2 = vec_xl(16, g2); - - vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1); - vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2); - vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3); - vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4); - - vY5 = vY5 ^ EC_vec_permxor(vhi2, vlo2, vX1); - vY6 = vY6 ^ EC_vec_permxor(vhi2, vlo2, vX2); - vYH = vYH ^ EC_vec_permxor(vhi2, vlo2, vX3); - vYI = vYI ^ EC_vec_permxor(vhi2, vlo2, vX4); - - g0 += 32; - g1 += 32; - g2 += 32; - } - - vec_xst(vY1, 0, t0 + i); - vec_xst(vY2, 16, t0 + i); - vec_xst(vY3, 0, t1 + i); - vec_xst(vY4, 16, t1 + i); - vec_xst(vY5, 0, t2 + i); - vec_xst(vY6, 16, t2 + i); - - vec_xst(vYD, 32, t0 + i); - vec_xst(vYE, 48, t0 + i); - vec_xst(vYF, 32, t1 + i); - vec_xst(vYG, 48, t1 + i); - vec_xst(vYH, 32, t2 + i); - vec_xst(vYI, 48, t2 + i); - } - return; + unsigned char *s, *t0, *t1, *t2; + vector unsigned char vX1, vX2, vX3, vX4; + vector unsigned char vY1, vY2, vY3, vY4, vY5, vY6; + vector unsigned char vYD, vYE, vYF, vYG, vYH, vYI; + vector unsigned char vhi0, vlo0, vhi1, vlo1, vhi2, vlo2; + int i, j, head; + + if (vlen < 128) { + gf_vect_mul_vsx(len, &gftbls[0 * 32 * vlen], src[0], (unsigned char *) dest[0]); + gf_vect_mul_vsx(len, &gftbls[1 * 32 * vlen], src[0], (unsigned char *) dest[1]); + gf_vect_mul_vsx(len, &gftbls[2 * 32 * vlen], src[0], (unsigned char *) dest[2]); + + for (j = 1; j < vlen; j++) { + gf_3vect_mad_vsx(len, vlen, j, gftbls, src[j], dest); + } + return; + } + + t0 = (unsigned char *) dest[0]; + t1 = (unsigned char *) dest[1]; + t2 = (unsigned char *) dest[2]; + + head = len % 64; + if (head != 0) { + gf_vect_dot_prod_base(head, vlen, &gftbls[0 * 32 * vlen], src, t0); + gf_vect_dot_prod_base(head, vlen, &gftbls[1 * 32 * vlen], src, t1); + gf_vect_dot_prod_base(head, vlen, &gftbls[2 * 32 * vlen], src, t2); + } + + for (i = head; i < len - 63; i += 64) { + vY1 = vY1 ^ vY1; + vY2 = vY2 ^ vY2; + vY3 = vY3 ^ vY3; + vY4 = vY4 ^ vY4; + vY5 = vY5 ^ vY5; + vY6 = vY6 ^ vY6; + + vYD = vYD ^ vYD; + vYE = vYE ^ vYE; + vYF = vYF ^ vYF; + vYG = vYG ^ vYG; + vYH = vYH ^ vYH; + vYI = vYI ^ vYI; + + unsigned char *g0 = &gftbls[0 * 32 * vlen]; + unsigned char *g1 = &gftbls[1 * 32 * vlen]; + unsigned char *g2 = &gftbls[2 * 32 * vlen]; + + for (j = 0; j < vlen; j++) { + s = (unsigned char *) src[j]; + vX1 = vec_xl(0, s + i); + vX2 = vec_xl(16, s + i); + vX3 = vec_xl(32, s + i); + vX4 = vec_xl(48, s + i); + + vlo0 = EC_vec_xl(0, g0); + vhi0 = EC_vec_xl(16, g0); + vlo1 = EC_vec_xl(0, g1); + vhi1 = EC_vec_xl(16, g1); + + vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1); + vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2); + vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3); + vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4); + + vlo2 = vec_xl(0, g2); + vhi2 = vec_xl(16, g2); + + vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1); + vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2); + vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3); + vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4); + + vY5 = vY5 ^ EC_vec_permxor(vhi2, vlo2, vX1); + vY6 = vY6 ^ EC_vec_permxor(vhi2, vlo2, vX2); + vYH = vYH ^ EC_vec_permxor(vhi2, vlo2, vX3); + vYI = vYI ^ EC_vec_permxor(vhi2, vlo2, vX4); + + g0 += 32; + g1 += 32; + g2 += 32; + } + + vec_xst(vY1, 0, t0 + i); + vec_xst(vY2, 16, t0 + i); + vec_xst(vY3, 0, t1 + i); + vec_xst(vY4, 16, t1 + i); + vec_xst(vY5, 0, t2 + i); + vec_xst(vY6, 16, t2 + i); + + vec_xst(vYD, 32, t0 + i); + vec_xst(vYE, 48, t0 + i); + vec_xst(vYF, 32, t1 + i); + vec_xst(vYG, 48, t1 + i); + vec_xst(vYH, 32, t2 + i); + vec_xst(vYI, 48, t2 + i); + } + return; } diff --git a/erasure_code/ppc64le/gf_3vect_mad_vsx.c b/erasure_code/ppc64le/gf_3vect_mad_vsx.c index ba90c1fd..0a6118ef 100644 --- a/erasure_code/ppc64le/gf_3vect_mad_vsx.c +++ b/erasure_code/ppc64le/gf_3vect_mad_vsx.c @@ -1,84 +1,85 @@ #include "ec_base_vsx.h" -void gf_3vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest) +void +gf_3vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest) { - unsigned char *s, *t0, *t1, *t2; - vector unsigned char vX1, vX2, vX3, vX4; - vector unsigned char vY1, vY2, vY3, vY4, vY5, vY6; - vector unsigned char vYD, vYE, vYF, vYG, vYH, vYI; - vector unsigned char vhi0, vlo0, vhi1, vlo1, vhi2, vlo2; - int i, head; + unsigned char *s, *t0, *t1, *t2; + vector unsigned char vX1, vX2, vX3, vX4; + vector unsigned char vY1, vY2, vY3, vY4, vY5, vY6; + vector unsigned char vYD, vYE, vYF, vYG, vYH, vYI; + vector unsigned char vhi0, vlo0, vhi1, vlo1, vhi2, vlo2; + int i, head; - s = (unsigned char *)src; - t0 = (unsigned char *)dest[0]; - t1 = (unsigned char *)dest[1]; - t2 = (unsigned char *)dest[2]; + s = (unsigned char *) src; + t0 = (unsigned char *) dest[0]; + t1 = (unsigned char *) dest[1]; + t2 = (unsigned char *) dest[2]; - head = len % 64; - if (head != 0) { - gf_vect_mad_base(head, vec, vec_i, &gftbls[0 * 32 * vec], src, t0); - gf_vect_mad_base(head, vec, vec_i, &gftbls[1 * 32 * vec], src, t1); - gf_vect_mad_base(head, vec, vec_i, &gftbls[2 * 32 * vec], src, t2); - } + head = len % 64; + if (head != 0) { + gf_vect_mad_base(head, vec, vec_i, &gftbls[0 * 32 * vec], src, t0); + gf_vect_mad_base(head, vec, vec_i, &gftbls[1 * 32 * vec], src, t1); + gf_vect_mad_base(head, vec, vec_i, &gftbls[2 * 32 * vec], src, t2); + } - vlo0 = EC_vec_xl(0, gftbls + (((0 * vec) << 5) + (vec_i << 5))); - vhi0 = EC_vec_xl(16, gftbls + (((0 * vec) << 5) + (vec_i << 5))); - vlo1 = EC_vec_xl(0, gftbls + (((1 * vec) << 5) + (vec_i << 5))); - vhi1 = EC_vec_xl(16, gftbls + (((1 * vec) << 5) + (vec_i << 5))); - vlo2 = EC_vec_xl(0, gftbls + (((2 * vec) << 5) + (vec_i << 5))); - vhi2 = EC_vec_xl(16, gftbls + (((2 * vec) << 5) + (vec_i << 5))); + vlo0 = EC_vec_xl(0, gftbls + (((0 * vec) << 5) + (vec_i << 5))); + vhi0 = EC_vec_xl(16, gftbls + (((0 * vec) << 5) + (vec_i << 5))); + vlo1 = EC_vec_xl(0, gftbls + (((1 * vec) << 5) + (vec_i << 5))); + vhi1 = EC_vec_xl(16, gftbls + (((1 * vec) << 5) + (vec_i << 5))); + vlo2 = EC_vec_xl(0, gftbls + (((2 * vec) << 5) + (vec_i << 5))); + vhi2 = EC_vec_xl(16, gftbls + (((2 * vec) << 5) + (vec_i << 5))); - for (i = head; i < len - 63; i += 64) { - vX1 = vec_xl(0, s + i); - vX2 = vec_xl(16, s + i); - vX3 = vec_xl(32, s + i); - vX4 = vec_xl(48, s + i); + for (i = head; i < len - 63; i += 64) { + vX1 = vec_xl(0, s + i); + vX2 = vec_xl(16, s + i); + vX3 = vec_xl(32, s + i); + vX4 = vec_xl(48, s + i); - vY1 = vec_xl(0, t0 + i); - vY2 = vec_xl(16, t0 + i); - vYD = vec_xl(32, t0 + i); - vYE = vec_xl(48, t0 + i); + vY1 = vec_xl(0, t0 + i); + vY2 = vec_xl(16, t0 + i); + vYD = vec_xl(32, t0 + i); + vYE = vec_xl(48, t0 + i); - vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1); - vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2); - vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3); - vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4); + vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1); + vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2); + vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3); + vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4); - vY3 = vec_xl(0, t1 + i); - vY4 = vec_xl(16, t1 + i); - vYF = vec_xl(32, t1 + i); - vYG = vec_xl(48, t1 + i); + vY3 = vec_xl(0, t1 + i); + vY4 = vec_xl(16, t1 + i); + vYF = vec_xl(32, t1 + i); + vYG = vec_xl(48, t1 + i); - vec_xst(vY1, 0, t0 + i); - vec_xst(vY2, 16, t0 + i); - vec_xst(vYD, 32, t0 + i); - vec_xst(vYE, 48, t0 + i); + vec_xst(vY1, 0, t0 + i); + vec_xst(vY2, 16, t0 + i); + vec_xst(vYD, 32, t0 + i); + vec_xst(vYE, 48, t0 + i); - vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1); - vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2); - vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3); - vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4); + vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1); + vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2); + vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3); + vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4); - vY5 = vec_xl(0, t2 + i); - vY6 = vec_xl(16, t2 + i); - vYH = vec_xl(32, t2 + i); - vYI = vec_xl(48, t2 + i); + vY5 = vec_xl(0, t2 + i); + vY6 = vec_xl(16, t2 + i); + vYH = vec_xl(32, t2 + i); + vYI = vec_xl(48, t2 + i); - vec_xst(vY3, 0, t1 + i); - vec_xst(vY4, 16, t1 + i); - vec_xst(vYF, 32, t1 + i); - vec_xst(vYG, 48, t1 + i); + vec_xst(vY3, 0, t1 + i); + vec_xst(vY4, 16, t1 + i); + vec_xst(vYF, 32, t1 + i); + vec_xst(vYG, 48, t1 + i); - vY5 = vY5 ^ EC_vec_permxor(vhi2, vlo2, vX1); - vY6 = vY6 ^ EC_vec_permxor(vhi2, vlo2, vX2); - vYH = vYH ^ EC_vec_permxor(vhi2, vlo2, vX3); - vYI = vYI ^ EC_vec_permxor(vhi2, vlo2, vX4); + vY5 = vY5 ^ EC_vec_permxor(vhi2, vlo2, vX1); + vY6 = vY6 ^ EC_vec_permxor(vhi2, vlo2, vX2); + vYH = vYH ^ EC_vec_permxor(vhi2, vlo2, vX3); + vYI = vYI ^ EC_vec_permxor(vhi2, vlo2, vX4); - vec_xst(vY5, 0, t2 + i); - vec_xst(vY6, 16, t2 + i); - vec_xst(vYH, 32, t2 + i); - vec_xst(vYI, 48, t2 + i); - } - return; + vec_xst(vY5, 0, t2 + i); + vec_xst(vY6, 16, t2 + i); + vec_xst(vYH, 32, t2 + i); + vec_xst(vYI, 48, t2 + i); + } + return; } diff --git a/erasure_code/ppc64le/gf_4vect_dot_prod_vsx.c b/erasure_code/ppc64le/gf_4vect_dot_prod_vsx.c index e6565445..b0e32789 100644 --- a/erasure_code/ppc64le/gf_4vect_dot_prod_vsx.c +++ b/erasure_code/ppc64le/gf_4vect_dot_prod_vsx.c @@ -1,124 +1,125 @@ #include "ec_base_vsx.h" -void gf_4vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, - unsigned char **src, unsigned char **dest) +void +gf_4vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, unsigned char **src, + unsigned char **dest) { - unsigned char *s, *t0, *t1, *t2, *t3; - vector unsigned char vX1, vX2, vX3, vX4; - vector unsigned char vY1, vY2, vY3, vY4, vY5, vY6, vY7, vY8; - vector unsigned char vYD, vYE, vYF, vYG, vYH, vYI, vYJ, vYK; - vector unsigned char vhi0, vlo0, vhi1, vlo1, vhi2, vlo2, vhi3, vlo3; - int i, j, head; - - if (vlen < 128) { - gf_vect_mul_vsx(len, &gftbls[0 * 32 * vlen], src[0], (unsigned char *)dest[0]); - gf_vect_mul_vsx(len, &gftbls[1 * 32 * vlen], src[0], (unsigned char *)dest[1]); - gf_vect_mul_vsx(len, &gftbls[2 * 32 * vlen], src[0], (unsigned char *)dest[2]); - gf_vect_mul_vsx(len, &gftbls[3 * 32 * vlen], src[0], (unsigned char *)dest[3]); - - for (j = 1; j < vlen; j++) { - gf_4vect_mad_vsx(len, vlen, j, gftbls, src[j], dest); - } - return; - } - - t0 = (unsigned char *)dest[0]; - t1 = (unsigned char *)dest[1]; - t2 = (unsigned char *)dest[2]; - t3 = (unsigned char *)dest[3]; - - head = len % 64; - if (head != 0) { - gf_vect_dot_prod_base(head, vlen, &gftbls[0 * 32 * vlen], src, t0); - gf_vect_dot_prod_base(head, vlen, &gftbls[1 * 32 * vlen], src, t1); - gf_vect_dot_prod_base(head, vlen, &gftbls[2 * 32 * vlen], src, t2); - gf_vect_dot_prod_base(head, vlen, &gftbls[3 * 32 * vlen], src, t3); - } - - for (i = head; i < len - 63; i += 64) { - vY1 = vY1 ^ vY1; - vY2 = vY2 ^ vY2; - vY3 = vY3 ^ vY3; - vY4 = vY4 ^ vY4; - vY5 = vY5 ^ vY5; - vY6 = vY6 ^ vY6; - vY7 = vY7 ^ vY7; - vY8 = vY8 ^ vY8; - - vYD = vYD ^ vYD; - vYE = vYE ^ vYE; - vYF = vYF ^ vYF; - vYG = vYG ^ vYG; - vYH = vYH ^ vYH; - vYI = vYI ^ vYI; - vYJ = vYJ ^ vYJ; - vYK = vYK ^ vYK; - - unsigned char *g0 = &gftbls[0 * 32 * vlen]; - unsigned char *g1 = &gftbls[1 * 32 * vlen]; - unsigned char *g2 = &gftbls[2 * 32 * vlen]; - unsigned char *g3 = &gftbls[3 * 32 * vlen]; - - for (j = 0; j < vlen; j++) { - s = (unsigned char *)src[j]; - vX1 = vec_xl(0, s + i); - vX2 = vec_xl(16, s + i); - vX3 = vec_xl(32, s + i); - vX4 = vec_xl(48, s + i); - - vlo0 = EC_vec_xl(0, g0); - vhi0 = EC_vec_xl(16, g0); - vlo1 = EC_vec_xl(0, g1); - vhi1 = EC_vec_xl(16, g1); - - vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1); - vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2); - vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3); - vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4); - - vlo2 = vec_xl(0, g2); - vhi2 = vec_xl(16, g2); - vlo3 = vec_xl(0, g3); - vhi3 = vec_xl(16, g3); - - vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1); - vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2); - vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3); - vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4); - - vY5 = vY5 ^ EC_vec_permxor(vhi2, vlo2, vX1); - vY6 = vY6 ^ EC_vec_permxor(vhi2, vlo2, vX2); - vYH = vYH ^ EC_vec_permxor(vhi2, vlo2, vX3); - vYI = vYI ^ EC_vec_permxor(vhi2, vlo2, vX4); - - vY7 = vY7 ^ EC_vec_permxor(vhi3, vlo3, vX1); - vY8 = vY8 ^ EC_vec_permxor(vhi3, vlo3, vX2); - vYJ = vYJ ^ EC_vec_permxor(vhi3, vlo3, vX3); - vYK = vYK ^ EC_vec_permxor(vhi3, vlo3, vX4); - - g0 += 32; - g1 += 32; - g2 += 32; - g3 += 32; - } - - vec_xst(vY1, 0, t0 + i); - vec_xst(vY2, 16, t0 + i); - vec_xst(vY3, 0, t1 + i); - vec_xst(vY4, 16, t1 + i); - vec_xst(vY5, 0, t2 + i); - vec_xst(vY6, 16, t2 + i); - vec_xst(vY7, 0, t3 + i); - vec_xst(vY8, 16, t3 + i); - - vec_xst(vYD, 32, t0 + i); - vec_xst(vYE, 48, t0 + i); - vec_xst(vYF, 32, t1 + i); - vec_xst(vYG, 48, t1 + i); - vec_xst(vYH, 32, t2 + i); - vec_xst(vYI, 48, t2 + i); - vec_xst(vYJ, 32, t3 + i); - vec_xst(vYK, 48, t3 + i); - } - return; + unsigned char *s, *t0, *t1, *t2, *t3; + vector unsigned char vX1, vX2, vX3, vX4; + vector unsigned char vY1, vY2, vY3, vY4, vY5, vY6, vY7, vY8; + vector unsigned char vYD, vYE, vYF, vYG, vYH, vYI, vYJ, vYK; + vector unsigned char vhi0, vlo0, vhi1, vlo1, vhi2, vlo2, vhi3, vlo3; + int i, j, head; + + if (vlen < 128) { + gf_vect_mul_vsx(len, &gftbls[0 * 32 * vlen], src[0], (unsigned char *) dest[0]); + gf_vect_mul_vsx(len, &gftbls[1 * 32 * vlen], src[0], (unsigned char *) dest[1]); + gf_vect_mul_vsx(len, &gftbls[2 * 32 * vlen], src[0], (unsigned char *) dest[2]); + gf_vect_mul_vsx(len, &gftbls[3 * 32 * vlen], src[0], (unsigned char *) dest[3]); + + for (j = 1; j < vlen; j++) { + gf_4vect_mad_vsx(len, vlen, j, gftbls, src[j], dest); + } + return; + } + + t0 = (unsigned char *) dest[0]; + t1 = (unsigned char *) dest[1]; + t2 = (unsigned char *) dest[2]; + t3 = (unsigned char *) dest[3]; + + head = len % 64; + if (head != 0) { + gf_vect_dot_prod_base(head, vlen, &gftbls[0 * 32 * vlen], src, t0); + gf_vect_dot_prod_base(head, vlen, &gftbls[1 * 32 * vlen], src, t1); + gf_vect_dot_prod_base(head, vlen, &gftbls[2 * 32 * vlen], src, t2); + gf_vect_dot_prod_base(head, vlen, &gftbls[3 * 32 * vlen], src, t3); + } + + for (i = head; i < len - 63; i += 64) { + vY1 = vY1 ^ vY1; + vY2 = vY2 ^ vY2; + vY3 = vY3 ^ vY3; + vY4 = vY4 ^ vY4; + vY5 = vY5 ^ vY5; + vY6 = vY6 ^ vY6; + vY7 = vY7 ^ vY7; + vY8 = vY8 ^ vY8; + + vYD = vYD ^ vYD; + vYE = vYE ^ vYE; + vYF = vYF ^ vYF; + vYG = vYG ^ vYG; + vYH = vYH ^ vYH; + vYI = vYI ^ vYI; + vYJ = vYJ ^ vYJ; + vYK = vYK ^ vYK; + + unsigned char *g0 = &gftbls[0 * 32 * vlen]; + unsigned char *g1 = &gftbls[1 * 32 * vlen]; + unsigned char *g2 = &gftbls[2 * 32 * vlen]; + unsigned char *g3 = &gftbls[3 * 32 * vlen]; + + for (j = 0; j < vlen; j++) { + s = (unsigned char *) src[j]; + vX1 = vec_xl(0, s + i); + vX2 = vec_xl(16, s + i); + vX3 = vec_xl(32, s + i); + vX4 = vec_xl(48, s + i); + + vlo0 = EC_vec_xl(0, g0); + vhi0 = EC_vec_xl(16, g0); + vlo1 = EC_vec_xl(0, g1); + vhi1 = EC_vec_xl(16, g1); + + vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1); + vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2); + vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3); + vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4); + + vlo2 = vec_xl(0, g2); + vhi2 = vec_xl(16, g2); + vlo3 = vec_xl(0, g3); + vhi3 = vec_xl(16, g3); + + vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1); + vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2); + vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3); + vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4); + + vY5 = vY5 ^ EC_vec_permxor(vhi2, vlo2, vX1); + vY6 = vY6 ^ EC_vec_permxor(vhi2, vlo2, vX2); + vYH = vYH ^ EC_vec_permxor(vhi2, vlo2, vX3); + vYI = vYI ^ EC_vec_permxor(vhi2, vlo2, vX4); + + vY7 = vY7 ^ EC_vec_permxor(vhi3, vlo3, vX1); + vY8 = vY8 ^ EC_vec_permxor(vhi3, vlo3, vX2); + vYJ = vYJ ^ EC_vec_permxor(vhi3, vlo3, vX3); + vYK = vYK ^ EC_vec_permxor(vhi3, vlo3, vX4); + + g0 += 32; + g1 += 32; + g2 += 32; + g3 += 32; + } + + vec_xst(vY1, 0, t0 + i); + vec_xst(vY2, 16, t0 + i); + vec_xst(vY3, 0, t1 + i); + vec_xst(vY4, 16, t1 + i); + vec_xst(vY5, 0, t2 + i); + vec_xst(vY6, 16, t2 + i); + vec_xst(vY7, 0, t3 + i); + vec_xst(vY8, 16, t3 + i); + + vec_xst(vYD, 32, t0 + i); + vec_xst(vYE, 48, t0 + i); + vec_xst(vYF, 32, t1 + i); + vec_xst(vYG, 48, t1 + i); + vec_xst(vYH, 32, t2 + i); + vec_xst(vYI, 48, t2 + i); + vec_xst(vYJ, 32, t3 + i); + vec_xst(vYK, 48, t3 + i); + } + return; } diff --git a/erasure_code/ppc64le/gf_4vect_mad_vsx.c b/erasure_code/ppc64le/gf_4vect_mad_vsx.c index 7b236b6f..b332fa93 100644 --- a/erasure_code/ppc64le/gf_4vect_mad_vsx.c +++ b/erasure_code/ppc64le/gf_4vect_mad_vsx.c @@ -1,103 +1,104 @@ #include "ec_base_vsx.h" -void gf_4vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest) +void +gf_4vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest) { - unsigned char *s, *t0, *t1, *t2, *t3; - vector unsigned char vX1, vX2, vX3, vX4; - vector unsigned char vY1, vY2, vY3, vY4, vY5, vY6, vY7, vY8; - vector unsigned char vYD, vYE, vYF, vYG, vYH, vYI, vYJ, vYK; - vector unsigned char vhi0, vlo0, vhi1, vlo1, vhi2, vlo2, vhi3, vlo3; - int i, head; - - s = (unsigned char *)src; - t0 = (unsigned char *)dest[0]; - t1 = (unsigned char *)dest[1]; - t2 = (unsigned char *)dest[2]; - t3 = (unsigned char *)dest[3]; - - head = len % 64; - if (head != 0) { - gf_vect_mad_base(head, vec, vec_i, &gftbls[0 * 32 * vec], src, t0); - gf_vect_mad_base(head, vec, vec_i, &gftbls[1 * 32 * vec], src, t1); - gf_vect_mad_base(head, vec, vec_i, &gftbls[2 * 32 * vec], src, t2); - gf_vect_mad_base(head, vec, vec_i, &gftbls[3 * 32 * vec], src, t3); - } - - vlo0 = EC_vec_xl(0, gftbls + (((0 * vec) << 5) + (vec_i << 5))); - vhi0 = EC_vec_xl(16, gftbls + (((0 * vec) << 5) + (vec_i << 5))); - vlo1 = EC_vec_xl(0, gftbls + (((1 * vec) << 5) + (vec_i << 5))); - vhi1 = EC_vec_xl(16, gftbls + (((1 * vec) << 5) + (vec_i << 5))); - vlo2 = EC_vec_xl(0, gftbls + (((2 * vec) << 5) + (vec_i << 5))); - vhi2 = EC_vec_xl(16, gftbls + (((2 * vec) << 5) + (vec_i << 5))); - vlo3 = EC_vec_xl(0, gftbls + (((3 * vec) << 5) + (vec_i << 5))); - vhi3 = EC_vec_xl(16, gftbls + (((3 * vec) << 5) + (vec_i << 5))); - - for (i = head; i < len - 63; i += 64) { - vX1 = vec_xl(0, s + i); - vX2 = vec_xl(16, s + i); - vX3 = vec_xl(32, s + i); - vX4 = vec_xl(48, s + i); - - vY1 = vec_xl(0, t0 + i); - vY2 = vec_xl(16, t0 + i); - vYD = vec_xl(32, t0 + i); - vYE = vec_xl(48, t0 + i); - - vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1); - vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2); - vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3); - vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4); - - vY3 = vec_xl(0, t1 + i); - vY4 = vec_xl(16, t1 + i); - vYF = vec_xl(32, t1 + i); - vYG = vec_xl(48, t1 + i); - - vec_xst(vY1, 0, t0 + i); - vec_xst(vY2, 16, t0 + i); - vec_xst(vYD, 32, t0 + i); - vec_xst(vYE, 48, t0 + i); - - vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1); - vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2); - vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3); - vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4); - - vY5 = vec_xl(0, t2 + i); - vY6 = vec_xl(16, t2 + i); - vYH = vec_xl(32, t2 + i); - vYI = vec_xl(48, t2 + i); - - vec_xst(vY3, 0, t1 + i); - vec_xst(vY4, 16, t1 + i); - vec_xst(vYF, 32, t1 + i); - vec_xst(vYG, 48, t1 + i); - - vY5 = vY5 ^ EC_vec_permxor(vhi2, vlo2, vX1); - vY6 = vY6 ^ EC_vec_permxor(vhi2, vlo2, vX2); - vYH = vYH ^ EC_vec_permxor(vhi2, vlo2, vX3); - vYI = vYI ^ EC_vec_permxor(vhi2, vlo2, vX4); - - vY7 = vec_xl(0, t3 + i); - vY8 = vec_xl(16, t3 + i); - vYJ = vec_xl(32, t3 + i); - vYK = vec_xl(48, t3 + i); - - vec_xst(vY5, 0, t2 + i); - vec_xst(vY6, 16, t2 + i); - vec_xst(vYH, 32, t2 + i); - vec_xst(vYI, 48, t2 + i); - - vY7 = vY7 ^ EC_vec_permxor(vhi3, vlo3, vX1); - vY8 = vY8 ^ EC_vec_permxor(vhi3, vlo3, vX2); - vYJ = vYJ ^ EC_vec_permxor(vhi3, vlo3, vX3); - vYK = vYK ^ EC_vec_permxor(vhi3, vlo3, vX4); - - vec_xst(vY7, 0, t3 + i); - vec_xst(vY8, 16, t3 + i); - vec_xst(vYJ, 32, t3 + i); - vec_xst(vYK, 48, t3 + i); - } - return; + unsigned char *s, *t0, *t1, *t2, *t3; + vector unsigned char vX1, vX2, vX3, vX4; + vector unsigned char vY1, vY2, vY3, vY4, vY5, vY6, vY7, vY8; + vector unsigned char vYD, vYE, vYF, vYG, vYH, vYI, vYJ, vYK; + vector unsigned char vhi0, vlo0, vhi1, vlo1, vhi2, vlo2, vhi3, vlo3; + int i, head; + + s = (unsigned char *) src; + t0 = (unsigned char *) dest[0]; + t1 = (unsigned char *) dest[1]; + t2 = (unsigned char *) dest[2]; + t3 = (unsigned char *) dest[3]; + + head = len % 64; + if (head != 0) { + gf_vect_mad_base(head, vec, vec_i, &gftbls[0 * 32 * vec], src, t0); + gf_vect_mad_base(head, vec, vec_i, &gftbls[1 * 32 * vec], src, t1); + gf_vect_mad_base(head, vec, vec_i, &gftbls[2 * 32 * vec], src, t2); + gf_vect_mad_base(head, vec, vec_i, &gftbls[3 * 32 * vec], src, t3); + } + + vlo0 = EC_vec_xl(0, gftbls + (((0 * vec) << 5) + (vec_i << 5))); + vhi0 = EC_vec_xl(16, gftbls + (((0 * vec) << 5) + (vec_i << 5))); + vlo1 = EC_vec_xl(0, gftbls + (((1 * vec) << 5) + (vec_i << 5))); + vhi1 = EC_vec_xl(16, gftbls + (((1 * vec) << 5) + (vec_i << 5))); + vlo2 = EC_vec_xl(0, gftbls + (((2 * vec) << 5) + (vec_i << 5))); + vhi2 = EC_vec_xl(16, gftbls + (((2 * vec) << 5) + (vec_i << 5))); + vlo3 = EC_vec_xl(0, gftbls + (((3 * vec) << 5) + (vec_i << 5))); + vhi3 = EC_vec_xl(16, gftbls + (((3 * vec) << 5) + (vec_i << 5))); + + for (i = head; i < len - 63; i += 64) { + vX1 = vec_xl(0, s + i); + vX2 = vec_xl(16, s + i); + vX3 = vec_xl(32, s + i); + vX4 = vec_xl(48, s + i); + + vY1 = vec_xl(0, t0 + i); + vY2 = vec_xl(16, t0 + i); + vYD = vec_xl(32, t0 + i); + vYE = vec_xl(48, t0 + i); + + vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1); + vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2); + vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3); + vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4); + + vY3 = vec_xl(0, t1 + i); + vY4 = vec_xl(16, t1 + i); + vYF = vec_xl(32, t1 + i); + vYG = vec_xl(48, t1 + i); + + vec_xst(vY1, 0, t0 + i); + vec_xst(vY2, 16, t0 + i); + vec_xst(vYD, 32, t0 + i); + vec_xst(vYE, 48, t0 + i); + + vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1); + vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2); + vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3); + vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4); + + vY5 = vec_xl(0, t2 + i); + vY6 = vec_xl(16, t2 + i); + vYH = vec_xl(32, t2 + i); + vYI = vec_xl(48, t2 + i); + + vec_xst(vY3, 0, t1 + i); + vec_xst(vY4, 16, t1 + i); + vec_xst(vYF, 32, t1 + i); + vec_xst(vYG, 48, t1 + i); + + vY5 = vY5 ^ EC_vec_permxor(vhi2, vlo2, vX1); + vY6 = vY6 ^ EC_vec_permxor(vhi2, vlo2, vX2); + vYH = vYH ^ EC_vec_permxor(vhi2, vlo2, vX3); + vYI = vYI ^ EC_vec_permxor(vhi2, vlo2, vX4); + + vY7 = vec_xl(0, t3 + i); + vY8 = vec_xl(16, t3 + i); + vYJ = vec_xl(32, t3 + i); + vYK = vec_xl(48, t3 + i); + + vec_xst(vY5, 0, t2 + i); + vec_xst(vY6, 16, t2 + i); + vec_xst(vYH, 32, t2 + i); + vec_xst(vYI, 48, t2 + i); + + vY7 = vY7 ^ EC_vec_permxor(vhi3, vlo3, vX1); + vY8 = vY8 ^ EC_vec_permxor(vhi3, vlo3, vX2); + vYJ = vYJ ^ EC_vec_permxor(vhi3, vlo3, vX3); + vYK = vYK ^ EC_vec_permxor(vhi3, vlo3, vX4); + + vec_xst(vY7, 0, t3 + i); + vec_xst(vY8, 16, t3 + i); + vec_xst(vYJ, 32, t3 + i); + vec_xst(vYK, 48, t3 + i); + } + return; } diff --git a/erasure_code/ppc64le/gf_5vect_dot_prod_vsx.c b/erasure_code/ppc64le/gf_5vect_dot_prod_vsx.c index e9eef0e6..cf6218f2 100644 --- a/erasure_code/ppc64le/gf_5vect_dot_prod_vsx.c +++ b/erasure_code/ppc64le/gf_5vect_dot_prod_vsx.c @@ -1,145 +1,146 @@ #include "ec_base_vsx.h" -void gf_5vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, - unsigned char **src, unsigned char **dest) +void +gf_5vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, unsigned char **src, + unsigned char **dest) { - unsigned char *s, *t0, *t1, *t2, *t3, *t4; - vector unsigned char vX1, vX2, vX3, vX4; - vector unsigned char vY1, vY2, vY3, vY4, vY5, vY6, vY7, vY8, vY9, vYA; - vector unsigned char vYD, vYE, vYF, vYG, vYH, vYI, vYJ, vYK, vYL, vYM; - vector unsigned char vhi0, vlo0, vhi1, vlo1, vhi2, vlo2, vhi3, vlo3, vhi4, vlo4; - int i, j, head; - - if (vlen < 128) { - gf_vect_mul_vsx(len, &gftbls[0 * 32 * vlen], src[0], (unsigned char *)dest[0]); - gf_vect_mul_vsx(len, &gftbls[1 * 32 * vlen], src[0], (unsigned char *)dest[1]); - gf_vect_mul_vsx(len, &gftbls[2 * 32 * vlen], src[0], (unsigned char *)dest[2]); - gf_vect_mul_vsx(len, &gftbls[3 * 32 * vlen], src[0], (unsigned char *)dest[3]); - gf_vect_mul_vsx(len, &gftbls[4 * 32 * vlen], src[0], (unsigned char *)dest[4]); - - for (j = 1; j < vlen; j++) { - gf_5vect_mad_vsx(len, vlen, j, gftbls, src[j], dest); - } - return; - } - - t0 = (unsigned char *)dest[0]; - t1 = (unsigned char *)dest[1]; - t2 = (unsigned char *)dest[2]; - t3 = (unsigned char *)dest[3]; - t4 = (unsigned char *)dest[4]; - - head = len % 64; - if (head != 0) { - gf_vect_dot_prod_base(head, vlen, &gftbls[0 * 32 * vlen], src, t0); - gf_vect_dot_prod_base(head, vlen, &gftbls[1 * 32 * vlen], src, t1); - gf_vect_dot_prod_base(head, vlen, &gftbls[2 * 32 * vlen], src, t2); - gf_vect_dot_prod_base(head, vlen, &gftbls[3 * 32 * vlen], src, t3); - gf_vect_dot_prod_base(head, vlen, &gftbls[4 * 32 * vlen], src, t4); - } - - for (i = head; i < len - 63; i += 64) { - vY1 = vY1 ^ vY1; - vY2 = vY2 ^ vY2; - vY3 = vY3 ^ vY3; - vY4 = vY4 ^ vY4; - vY5 = vY5 ^ vY5; - vY6 = vY6 ^ vY6; - vY7 = vY7 ^ vY7; - vY8 = vY8 ^ vY8; - vY9 = vY9 ^ vY9; - vYA = vYA ^ vYA; - - vYD = vYD ^ vYD; - vYE = vYE ^ vYE; - vYF = vYF ^ vYF; - vYG = vYG ^ vYG; - vYH = vYH ^ vYH; - vYI = vYI ^ vYI; - vYJ = vYJ ^ vYJ; - vYK = vYK ^ vYK; - vYL = vYL ^ vYL; - vYM = vYM ^ vYM; - - unsigned char *g0 = &gftbls[0 * 32 * vlen]; - unsigned char *g1 = &gftbls[1 * 32 * vlen]; - unsigned char *g2 = &gftbls[2 * 32 * vlen]; - unsigned char *g3 = &gftbls[3 * 32 * vlen]; - unsigned char *g4 = &gftbls[4 * 32 * vlen]; - - for (j = 0; j < vlen; j++) { - s = (unsigned char *)src[j]; - vX1 = vec_xl(0, s + i); - vX2 = vec_xl(16, s + i); - vX3 = vec_xl(32, s + i); - vX4 = vec_xl(48, s + i); - - vlo0 = EC_vec_xl(0, g0); - vhi0 = EC_vec_xl(16, g0); - vlo1 = EC_vec_xl(0, g1); - vhi1 = EC_vec_xl(16, g1); - - vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1); - vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2); - vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3); - vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4); - - vlo2 = vec_xl(0, g2); - vhi2 = vec_xl(16, g2); - vlo3 = vec_xl(0, g3); - vhi3 = vec_xl(16, g3); - - vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1); - vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2); - vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3); - vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4); - - vlo4 = vec_xl(0, g4); - vhi4 = vec_xl(16, g4); - - vY5 = vY5 ^ EC_vec_permxor(vhi2, vlo2, vX1); - vY6 = vY6 ^ EC_vec_permxor(vhi2, vlo2, vX2); - vYH = vYH ^ EC_vec_permxor(vhi2, vlo2, vX3); - vYI = vYI ^ EC_vec_permxor(vhi2, vlo2, vX4); - - vY7 = vY7 ^ EC_vec_permxor(vhi3, vlo3, vX1); - vY8 = vY8 ^ EC_vec_permxor(vhi3, vlo3, vX2); - vYJ = vYJ ^ EC_vec_permxor(vhi3, vlo3, vX3); - vYK = vYK ^ EC_vec_permxor(vhi3, vlo3, vX4); - - vY9 = vY9 ^ EC_vec_permxor(vhi4, vlo4, vX1); - vYA = vYA ^ EC_vec_permxor(vhi4, vlo4, vX2); - vYL = vYL ^ EC_vec_permxor(vhi4, vlo4, vX3); - vYM = vYM ^ EC_vec_permxor(vhi4, vlo4, vX4); - - g0 += 32; - g1 += 32; - g2 += 32; - g3 += 32; - g4 += 32; - } - - vec_xst(vY1, 0, t0 + i); - vec_xst(vY2, 16, t0 + i); - vec_xst(vY3, 0, t1 + i); - vec_xst(vY4, 16, t1 + i); - vec_xst(vY5, 0, t2 + i); - vec_xst(vY6, 16, t2 + i); - vec_xst(vY7, 0, t3 + i); - vec_xst(vY8, 16, t3 + i); - vec_xst(vY9, 0, t4 + i); - vec_xst(vYA, 16, t4 + i); - - vec_xst(vYD, 32, t0 + i); - vec_xst(vYE, 48, t0 + i); - vec_xst(vYF, 32, t1 + i); - vec_xst(vYG, 48, t1 + i); - vec_xst(vYH, 32, t2 + i); - vec_xst(vYI, 48, t2 + i); - vec_xst(vYJ, 32, t3 + i); - vec_xst(vYK, 48, t3 + i); - vec_xst(vYL, 32, t4 + i); - vec_xst(vYM, 48, t4 + i); - } - return; + unsigned char *s, *t0, *t1, *t2, *t3, *t4; + vector unsigned char vX1, vX2, vX3, vX4; + vector unsigned char vY1, vY2, vY3, vY4, vY5, vY6, vY7, vY8, vY9, vYA; + vector unsigned char vYD, vYE, vYF, vYG, vYH, vYI, vYJ, vYK, vYL, vYM; + vector unsigned char vhi0, vlo0, vhi1, vlo1, vhi2, vlo2, vhi3, vlo3, vhi4, vlo4; + int i, j, head; + + if (vlen < 128) { + gf_vect_mul_vsx(len, &gftbls[0 * 32 * vlen], src[0], (unsigned char *) dest[0]); + gf_vect_mul_vsx(len, &gftbls[1 * 32 * vlen], src[0], (unsigned char *) dest[1]); + gf_vect_mul_vsx(len, &gftbls[2 * 32 * vlen], src[0], (unsigned char *) dest[2]); + gf_vect_mul_vsx(len, &gftbls[3 * 32 * vlen], src[0], (unsigned char *) dest[3]); + gf_vect_mul_vsx(len, &gftbls[4 * 32 * vlen], src[0], (unsigned char *) dest[4]); + + for (j = 1; j < vlen; j++) { + gf_5vect_mad_vsx(len, vlen, j, gftbls, src[j], dest); + } + return; + } + + t0 = (unsigned char *) dest[0]; + t1 = (unsigned char *) dest[1]; + t2 = (unsigned char *) dest[2]; + t3 = (unsigned char *) dest[3]; + t4 = (unsigned char *) dest[4]; + + head = len % 64; + if (head != 0) { + gf_vect_dot_prod_base(head, vlen, &gftbls[0 * 32 * vlen], src, t0); + gf_vect_dot_prod_base(head, vlen, &gftbls[1 * 32 * vlen], src, t1); + gf_vect_dot_prod_base(head, vlen, &gftbls[2 * 32 * vlen], src, t2); + gf_vect_dot_prod_base(head, vlen, &gftbls[3 * 32 * vlen], src, t3); + gf_vect_dot_prod_base(head, vlen, &gftbls[4 * 32 * vlen], src, t4); + } + + for (i = head; i < len - 63; i += 64) { + vY1 = vY1 ^ vY1; + vY2 = vY2 ^ vY2; + vY3 = vY3 ^ vY3; + vY4 = vY4 ^ vY4; + vY5 = vY5 ^ vY5; + vY6 = vY6 ^ vY6; + vY7 = vY7 ^ vY7; + vY8 = vY8 ^ vY8; + vY9 = vY9 ^ vY9; + vYA = vYA ^ vYA; + + vYD = vYD ^ vYD; + vYE = vYE ^ vYE; + vYF = vYF ^ vYF; + vYG = vYG ^ vYG; + vYH = vYH ^ vYH; + vYI = vYI ^ vYI; + vYJ = vYJ ^ vYJ; + vYK = vYK ^ vYK; + vYL = vYL ^ vYL; + vYM = vYM ^ vYM; + + unsigned char *g0 = &gftbls[0 * 32 * vlen]; + unsigned char *g1 = &gftbls[1 * 32 * vlen]; + unsigned char *g2 = &gftbls[2 * 32 * vlen]; + unsigned char *g3 = &gftbls[3 * 32 * vlen]; + unsigned char *g4 = &gftbls[4 * 32 * vlen]; + + for (j = 0; j < vlen; j++) { + s = (unsigned char *) src[j]; + vX1 = vec_xl(0, s + i); + vX2 = vec_xl(16, s + i); + vX3 = vec_xl(32, s + i); + vX4 = vec_xl(48, s + i); + + vlo0 = EC_vec_xl(0, g0); + vhi0 = EC_vec_xl(16, g0); + vlo1 = EC_vec_xl(0, g1); + vhi1 = EC_vec_xl(16, g1); + + vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1); + vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2); + vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3); + vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4); + + vlo2 = vec_xl(0, g2); + vhi2 = vec_xl(16, g2); + vlo3 = vec_xl(0, g3); + vhi3 = vec_xl(16, g3); + + vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1); + vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2); + vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3); + vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4); + + vlo4 = vec_xl(0, g4); + vhi4 = vec_xl(16, g4); + + vY5 = vY5 ^ EC_vec_permxor(vhi2, vlo2, vX1); + vY6 = vY6 ^ EC_vec_permxor(vhi2, vlo2, vX2); + vYH = vYH ^ EC_vec_permxor(vhi2, vlo2, vX3); + vYI = vYI ^ EC_vec_permxor(vhi2, vlo2, vX4); + + vY7 = vY7 ^ EC_vec_permxor(vhi3, vlo3, vX1); + vY8 = vY8 ^ EC_vec_permxor(vhi3, vlo3, vX2); + vYJ = vYJ ^ EC_vec_permxor(vhi3, vlo3, vX3); + vYK = vYK ^ EC_vec_permxor(vhi3, vlo3, vX4); + + vY9 = vY9 ^ EC_vec_permxor(vhi4, vlo4, vX1); + vYA = vYA ^ EC_vec_permxor(vhi4, vlo4, vX2); + vYL = vYL ^ EC_vec_permxor(vhi4, vlo4, vX3); + vYM = vYM ^ EC_vec_permxor(vhi4, vlo4, vX4); + + g0 += 32; + g1 += 32; + g2 += 32; + g3 += 32; + g4 += 32; + } + + vec_xst(vY1, 0, t0 + i); + vec_xst(vY2, 16, t0 + i); + vec_xst(vY3, 0, t1 + i); + vec_xst(vY4, 16, t1 + i); + vec_xst(vY5, 0, t2 + i); + vec_xst(vY6, 16, t2 + i); + vec_xst(vY7, 0, t3 + i); + vec_xst(vY8, 16, t3 + i); + vec_xst(vY9, 0, t4 + i); + vec_xst(vYA, 16, t4 + i); + + vec_xst(vYD, 32, t0 + i); + vec_xst(vYE, 48, t0 + i); + vec_xst(vYF, 32, t1 + i); + vec_xst(vYG, 48, t1 + i); + vec_xst(vYH, 32, t2 + i); + vec_xst(vYI, 48, t2 + i); + vec_xst(vYJ, 32, t3 + i); + vec_xst(vYK, 48, t3 + i); + vec_xst(vYL, 32, t4 + i); + vec_xst(vYM, 48, t4 + i); + } + return; } diff --git a/erasure_code/ppc64le/gf_5vect_mad_vsx.c b/erasure_code/ppc64le/gf_5vect_mad_vsx.c index 7bb7bb21..be0f443a 100644 --- a/erasure_code/ppc64le/gf_5vect_mad_vsx.c +++ b/erasure_code/ppc64le/gf_5vect_mad_vsx.c @@ -1,122 +1,123 @@ #include "ec_base_vsx.h" -void gf_5vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest) +void +gf_5vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest) { - unsigned char *s, *t0, *t1, *t2, *t3, *t4; - vector unsigned char vX1, vX2, vX3, vX4; - vector unsigned char vY1, vY2, vY3, vY4, vY5, vY6, vY7, vY8, vY9, vYA; - vector unsigned char vYD, vYE, vYF, vYG, vYH, vYI, vYJ, vYK, vYL, vYM; - vector unsigned char vhi0, vlo0, vhi1, vlo1, vhi2, vlo2, vhi3, vlo3, vhi4, vlo4; - int i, head; - - s = (unsigned char *)src; - t0 = (unsigned char *)dest[0]; - t1 = (unsigned char *)dest[1]; - t2 = (unsigned char *)dest[2]; - t3 = (unsigned char *)dest[3]; - t4 = (unsigned char *)dest[4]; - - head = len % 64; - if (head != 0) { - gf_vect_mad_base(head, vec, vec_i, &gftbls[0 * 32 * vec], src, t0); - gf_vect_mad_base(head, vec, vec_i, &gftbls[1 * 32 * vec], src, t1); - gf_vect_mad_base(head, vec, vec_i, &gftbls[2 * 32 * vec], src, t2); - gf_vect_mad_base(head, vec, vec_i, &gftbls[3 * 32 * vec], src, t3); - gf_vect_mad_base(head, vec, vec_i, &gftbls[4 * 32 * vec], src, t4); - } - - vlo0 = EC_vec_xl(0, gftbls + (((0 * vec) << 5) + (vec_i << 5))); - vhi0 = EC_vec_xl(16, gftbls + (((0 * vec) << 5) + (vec_i << 5))); - vlo1 = EC_vec_xl(0, gftbls + (((1 * vec) << 5) + (vec_i << 5))); - vhi1 = EC_vec_xl(16, gftbls + (((1 * vec) << 5) + (vec_i << 5))); - vlo2 = EC_vec_xl(0, gftbls + (((2 * vec) << 5) + (vec_i << 5))); - vhi2 = EC_vec_xl(16, gftbls + (((2 * vec) << 5) + (vec_i << 5))); - vlo3 = EC_vec_xl(0, gftbls + (((3 * vec) << 5) + (vec_i << 5))); - vhi3 = EC_vec_xl(16, gftbls + (((3 * vec) << 5) + (vec_i << 5))); - vlo4 = EC_vec_xl(0, gftbls + (((4 * vec) << 5) + (vec_i << 5))); - vhi4 = EC_vec_xl(16, gftbls + (((4 * vec) << 5) + (vec_i << 5))); - - for (i = head; i < len - 63; i += 64) { - vX1 = vec_xl(0, s + i); - vX2 = vec_xl(16, s + i); - vX3 = vec_xl(32, s + i); - vX4 = vec_xl(48, s + i); - - vY1 = vec_xl(0, t0 + i); - vY2 = vec_xl(16, t0 + i); - vYD = vec_xl(32, t0 + i); - vYE = vec_xl(48, t0 + i); - - vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1); - vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2); - vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3); - vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4); - - vY3 = vec_xl(0, t1 + i); - vY4 = vec_xl(16, t1 + i); - vYF = vec_xl(32, t1 + i); - vYG = vec_xl(48, t1 + i); - - vec_xst(vY1, 0, t0 + i); - vec_xst(vY2, 16, t0 + i); - vec_xst(vYD, 32, t0 + i); - vec_xst(vYE, 48, t0 + i); - - vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1); - vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2); - vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3); - vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4); - - vY5 = vec_xl(0, t2 + i); - vY6 = vec_xl(16, t2 + i); - vYH = vec_xl(32, t2 + i); - vYI = vec_xl(48, t2 + i); - - vec_xst(vY3, 0, t1 + i); - vec_xst(vY4, 16, t1 + i); - vec_xst(vYF, 32, t1 + i); - vec_xst(vYG, 48, t1 + i); - - vY5 = vY5 ^ EC_vec_permxor(vhi2, vlo2, vX1); - vY6 = vY6 ^ EC_vec_permxor(vhi2, vlo2, vX2); - vYH = vYH ^ EC_vec_permxor(vhi2, vlo2, vX3); - vYI = vYI ^ EC_vec_permxor(vhi2, vlo2, vX4); - - vY7 = vec_xl(0, t3 + i); - vY8 = vec_xl(16, t3 + i); - vYJ = vec_xl(32, t3 + i); - vYK = vec_xl(48, t3 + i); - - vec_xst(vY5, 0, t2 + i); - vec_xst(vY6, 16, t2 + i); - vec_xst(vYH, 32, t2 + i); - vec_xst(vYI, 48, t2 + i); - - vY7 = vY7 ^ EC_vec_permxor(vhi3, vlo3, vX1); - vY8 = vY8 ^ EC_vec_permxor(vhi3, vlo3, vX2); - vYJ = vYJ ^ EC_vec_permxor(vhi3, vlo3, vX3); - vYK = vYK ^ EC_vec_permxor(vhi3, vlo3, vX4); - - vY9 = vec_xl(0, t4 + i); - vYA = vec_xl(16, t4 + i); - vYL = vec_xl(32, t4 + i); - vYM = vec_xl(48, t4 + i); - - vec_xst(vY7, 0, t3 + i); - vec_xst(vY8, 16, t3 + i); - vec_xst(vYJ, 32, t3 + i); - vec_xst(vYK, 48, t3 + i); - - vY9 = vY9 ^ EC_vec_permxor(vhi4, vlo4, vX1); - vYA = vYA ^ EC_vec_permxor(vhi4, vlo4, vX2); - vYL = vYL ^ EC_vec_permxor(vhi4, vlo4, vX3); - vYM = vYM ^ EC_vec_permxor(vhi4, vlo4, vX4); - - vec_xst(vY9, 0, t4 + i); - vec_xst(vYA, 16, t4 + i); - vec_xst(vYL, 32, t4 + i); - vec_xst(vYM, 48, t4 + i); - } - return; + unsigned char *s, *t0, *t1, *t2, *t3, *t4; + vector unsigned char vX1, vX2, vX3, vX4; + vector unsigned char vY1, vY2, vY3, vY4, vY5, vY6, vY7, vY8, vY9, vYA; + vector unsigned char vYD, vYE, vYF, vYG, vYH, vYI, vYJ, vYK, vYL, vYM; + vector unsigned char vhi0, vlo0, vhi1, vlo1, vhi2, vlo2, vhi3, vlo3, vhi4, vlo4; + int i, head; + + s = (unsigned char *) src; + t0 = (unsigned char *) dest[0]; + t1 = (unsigned char *) dest[1]; + t2 = (unsigned char *) dest[2]; + t3 = (unsigned char *) dest[3]; + t4 = (unsigned char *) dest[4]; + + head = len % 64; + if (head != 0) { + gf_vect_mad_base(head, vec, vec_i, &gftbls[0 * 32 * vec], src, t0); + gf_vect_mad_base(head, vec, vec_i, &gftbls[1 * 32 * vec], src, t1); + gf_vect_mad_base(head, vec, vec_i, &gftbls[2 * 32 * vec], src, t2); + gf_vect_mad_base(head, vec, vec_i, &gftbls[3 * 32 * vec], src, t3); + gf_vect_mad_base(head, vec, vec_i, &gftbls[4 * 32 * vec], src, t4); + } + + vlo0 = EC_vec_xl(0, gftbls + (((0 * vec) << 5) + (vec_i << 5))); + vhi0 = EC_vec_xl(16, gftbls + (((0 * vec) << 5) + (vec_i << 5))); + vlo1 = EC_vec_xl(0, gftbls + (((1 * vec) << 5) + (vec_i << 5))); + vhi1 = EC_vec_xl(16, gftbls + (((1 * vec) << 5) + (vec_i << 5))); + vlo2 = EC_vec_xl(0, gftbls + (((2 * vec) << 5) + (vec_i << 5))); + vhi2 = EC_vec_xl(16, gftbls + (((2 * vec) << 5) + (vec_i << 5))); + vlo3 = EC_vec_xl(0, gftbls + (((3 * vec) << 5) + (vec_i << 5))); + vhi3 = EC_vec_xl(16, gftbls + (((3 * vec) << 5) + (vec_i << 5))); + vlo4 = EC_vec_xl(0, gftbls + (((4 * vec) << 5) + (vec_i << 5))); + vhi4 = EC_vec_xl(16, gftbls + (((4 * vec) << 5) + (vec_i << 5))); + + for (i = head; i < len - 63; i += 64) { + vX1 = vec_xl(0, s + i); + vX2 = vec_xl(16, s + i); + vX3 = vec_xl(32, s + i); + vX4 = vec_xl(48, s + i); + + vY1 = vec_xl(0, t0 + i); + vY2 = vec_xl(16, t0 + i); + vYD = vec_xl(32, t0 + i); + vYE = vec_xl(48, t0 + i); + + vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1); + vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2); + vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3); + vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4); + + vY3 = vec_xl(0, t1 + i); + vY4 = vec_xl(16, t1 + i); + vYF = vec_xl(32, t1 + i); + vYG = vec_xl(48, t1 + i); + + vec_xst(vY1, 0, t0 + i); + vec_xst(vY2, 16, t0 + i); + vec_xst(vYD, 32, t0 + i); + vec_xst(vYE, 48, t0 + i); + + vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1); + vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2); + vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3); + vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4); + + vY5 = vec_xl(0, t2 + i); + vY6 = vec_xl(16, t2 + i); + vYH = vec_xl(32, t2 + i); + vYI = vec_xl(48, t2 + i); + + vec_xst(vY3, 0, t1 + i); + vec_xst(vY4, 16, t1 + i); + vec_xst(vYF, 32, t1 + i); + vec_xst(vYG, 48, t1 + i); + + vY5 = vY5 ^ EC_vec_permxor(vhi2, vlo2, vX1); + vY6 = vY6 ^ EC_vec_permxor(vhi2, vlo2, vX2); + vYH = vYH ^ EC_vec_permxor(vhi2, vlo2, vX3); + vYI = vYI ^ EC_vec_permxor(vhi2, vlo2, vX4); + + vY7 = vec_xl(0, t3 + i); + vY8 = vec_xl(16, t3 + i); + vYJ = vec_xl(32, t3 + i); + vYK = vec_xl(48, t3 + i); + + vec_xst(vY5, 0, t2 + i); + vec_xst(vY6, 16, t2 + i); + vec_xst(vYH, 32, t2 + i); + vec_xst(vYI, 48, t2 + i); + + vY7 = vY7 ^ EC_vec_permxor(vhi3, vlo3, vX1); + vY8 = vY8 ^ EC_vec_permxor(vhi3, vlo3, vX2); + vYJ = vYJ ^ EC_vec_permxor(vhi3, vlo3, vX3); + vYK = vYK ^ EC_vec_permxor(vhi3, vlo3, vX4); + + vY9 = vec_xl(0, t4 + i); + vYA = vec_xl(16, t4 + i); + vYL = vec_xl(32, t4 + i); + vYM = vec_xl(48, t4 + i); + + vec_xst(vY7, 0, t3 + i); + vec_xst(vY8, 16, t3 + i); + vec_xst(vYJ, 32, t3 + i); + vec_xst(vYK, 48, t3 + i); + + vY9 = vY9 ^ EC_vec_permxor(vhi4, vlo4, vX1); + vYA = vYA ^ EC_vec_permxor(vhi4, vlo4, vX2); + vYL = vYL ^ EC_vec_permxor(vhi4, vlo4, vX3); + vYM = vYM ^ EC_vec_permxor(vhi4, vlo4, vX4); + + vec_xst(vY9, 0, t4 + i); + vec_xst(vYA, 16, t4 + i); + vec_xst(vYL, 32, t4 + i); + vec_xst(vYM, 48, t4 + i); + } + return; } diff --git a/erasure_code/ppc64le/gf_6vect_dot_prod_vsx.c b/erasure_code/ppc64le/gf_6vect_dot_prod_vsx.c index ac918bd4..b07c4a0d 100644 --- a/erasure_code/ppc64le/gf_6vect_dot_prod_vsx.c +++ b/erasure_code/ppc64le/gf_6vect_dot_prod_vsx.c @@ -1,166 +1,167 @@ #include "ec_base_vsx.h" -void gf_6vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, - unsigned char **src, unsigned char **dest) +void +gf_6vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, unsigned char **src, + unsigned char **dest) { - unsigned char *s, *t0, *t1, *t2, *t3, *t4, *t5; - vector unsigned char vX1, vX2, vX3, vX4; - vector unsigned char vY1, vY2, vY3, vY4, vY5, vY6, vY7, vY8, vY9, vYA, vYB, vYC; - vector unsigned char vYD, vYE, vYF, vYG, vYH, vYI, vYJ, vYK, vYL, vYM, vYN, vYO; - vector unsigned char vhi0, vlo0, vhi1, vlo1, vhi2, vlo2; - vector unsigned char vhi3, vlo3, vhi4, vlo4, vhi5, vlo5; - int i, j, head; - - if (vlen < 128) { - gf_vect_mul_vsx(len, &gftbls[0 * 32 * vlen], src[0], (unsigned char *)dest[0]); - gf_vect_mul_vsx(len, &gftbls[1 * 32 * vlen], src[0], (unsigned char *)dest[1]); - gf_vect_mul_vsx(len, &gftbls[2 * 32 * vlen], src[0], (unsigned char *)dest[2]); - gf_vect_mul_vsx(len, &gftbls[3 * 32 * vlen], src[0], (unsigned char *)dest[3]); - gf_vect_mul_vsx(len, &gftbls[4 * 32 * vlen], src[0], (unsigned char *)dest[4]); - gf_vect_mul_vsx(len, &gftbls[5 * 32 * vlen], src[0], (unsigned char *)dest[5]); - - for (j = 1; j < vlen; j++) { - gf_6vect_mad_vsx(len, vlen, j, gftbls, src[j], dest); - } - return; - } - - t0 = (unsigned char *)dest[0]; - t1 = (unsigned char *)dest[1]; - t2 = (unsigned char *)dest[2]; - t3 = (unsigned char *)dest[3]; - t4 = (unsigned char *)dest[4]; - t5 = (unsigned char *)dest[5]; - - head = len % 64; - if (head != 0) { - gf_vect_dot_prod_base(head, vlen, &gftbls[0 * 32 * vlen], src, t0); - gf_vect_dot_prod_base(head, vlen, &gftbls[1 * 32 * vlen], src, t1); - gf_vect_dot_prod_base(head, vlen, &gftbls[2 * 32 * vlen], src, t2); - gf_vect_dot_prod_base(head, vlen, &gftbls[3 * 32 * vlen], src, t3); - gf_vect_dot_prod_base(head, vlen, &gftbls[4 * 32 * vlen], src, t4); - gf_vect_dot_prod_base(head, vlen, &gftbls[5 * 32 * vlen], src, t5); - } - - for (i = head; i < len - 63; i += 64) { - vY1 = vY1 ^ vY1; - vY2 = vY2 ^ vY2; - vY3 = vY3 ^ vY3; - vY4 = vY4 ^ vY4; - vY5 = vY5 ^ vY5; - vY6 = vY6 ^ vY6; - vY7 = vY7 ^ vY7; - vY8 = vY8 ^ vY8; - vY9 = vY9 ^ vY9; - vYA = vYA ^ vYA; - vYB = vYB ^ vYB; - vYC = vYC ^ vYC; - - vYD = vYD ^ vYD; - vYE = vYE ^ vYE; - vYF = vYF ^ vYF; - vYG = vYG ^ vYG; - vYH = vYH ^ vYH; - vYI = vYI ^ vYI; - vYJ = vYJ ^ vYJ; - vYK = vYK ^ vYK; - vYL = vYL ^ vYL; - vYM = vYM ^ vYM; - vYN = vYN ^ vYN; - vYO = vYO ^ vYO; - - unsigned char *g0 = &gftbls[0 * 32 * vlen]; - unsigned char *g1 = &gftbls[1 * 32 * vlen]; - unsigned char *g2 = &gftbls[2 * 32 * vlen]; - unsigned char *g3 = &gftbls[3 * 32 * vlen]; - unsigned char *g4 = &gftbls[4 * 32 * vlen]; - unsigned char *g5 = &gftbls[5 * 32 * vlen]; - - for (j = 0; j < vlen; j++) { - s = (unsigned char *)src[j]; - vX1 = vec_xl(0, s + i); - vX2 = vec_xl(16, s + i); - vX3 = vec_xl(32, s + i); - vX4 = vec_xl(48, s + i); - - vlo0 = EC_vec_xl(0, g0); - vhi0 = EC_vec_xl(16, g0); - vlo1 = EC_vec_xl(0, g1); - vhi1 = EC_vec_xl(16, g1); - - vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1); - vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2); - vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3); - vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4); - - vlo2 = EC_vec_xl(0, g2); - vhi2 = EC_vec_xl(16, g2); - vlo3 = EC_vec_xl(0, g3); - vhi3 = EC_vec_xl(16, g3); - - vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1); - vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2); - vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3); - vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4); - - vlo4 = EC_vec_xl(0, g4); - vhi4 = EC_vec_xl(16, g4); - vlo5 = EC_vec_xl(0, g5); - vhi5 = EC_vec_xl(16, g5); - - vY5 = vY5 ^ EC_vec_permxor(vhi2, vlo2, vX1); - vY6 = vY6 ^ EC_vec_permxor(vhi2, vlo2, vX2); - vYH = vYH ^ EC_vec_permxor(vhi2, vlo2, vX3); - vYI = vYI ^ EC_vec_permxor(vhi2, vlo2, vX4); - - vY7 = vY7 ^ EC_vec_permxor(vhi3, vlo3, vX1); - vY8 = vY8 ^ EC_vec_permxor(vhi3, vlo3, vX2); - vYJ = vYJ ^ EC_vec_permxor(vhi3, vlo3, vX3); - vYK = vYK ^ EC_vec_permxor(vhi3, vlo3, vX4); - - vY9 = vY9 ^ EC_vec_permxor(vhi4, vlo4, vX1); - vYA = vYA ^ EC_vec_permxor(vhi4, vlo4, vX2); - vYL = vYL ^ EC_vec_permxor(vhi4, vlo4, vX3); - vYM = vYM ^ EC_vec_permxor(vhi4, vlo4, vX4); - - vYB = vYB ^ EC_vec_permxor(vhi5, vlo5, vX1); - vYC = vYC ^ EC_vec_permxor(vhi5, vlo5, vX2); - vYN = vYN ^ EC_vec_permxor(vhi5, vlo5, vX3); - vYO = vYO ^ EC_vec_permxor(vhi5, vlo5, vX4); - - g0 += 32; - g1 += 32; - g2 += 32; - g3 += 32; - g4 += 32; - g5 += 32; - } - - vec_xst(vY1, 0, t0 + i); - vec_xst(vY2, 16, t0 + i); - vec_xst(vY3, 0, t1 + i); - vec_xst(vY4, 16, t1 + i); - vec_xst(vY5, 0, t2 + i); - vec_xst(vY6, 16, t2 + i); - vec_xst(vY7, 0, t3 + i); - vec_xst(vY8, 16, t3 + i); - vec_xst(vY9, 0, t4 + i); - vec_xst(vYA, 16, t4 + i); - vec_xst(vYB, 0, t5 + i); - vec_xst(vYC, 16, t5 + i); - - vec_xst(vYD, 32, t0 + i); - vec_xst(vYE, 48, t0 + i); - vec_xst(vYF, 32, t1 + i); - vec_xst(vYG, 48, t1 + i); - vec_xst(vYH, 32, t2 + i); - vec_xst(vYI, 48, t2 + i); - vec_xst(vYJ, 32, t3 + i); - vec_xst(vYK, 48, t3 + i); - vec_xst(vYL, 32, t4 + i); - vec_xst(vYM, 48, t4 + i); - vec_xst(vYN, 32, t5 + i); - vec_xst(vYO, 48, t5 + i); - } - return; + unsigned char *s, *t0, *t1, *t2, *t3, *t4, *t5; + vector unsigned char vX1, vX2, vX3, vX4; + vector unsigned char vY1, vY2, vY3, vY4, vY5, vY6, vY7, vY8, vY9, vYA, vYB, vYC; + vector unsigned char vYD, vYE, vYF, vYG, vYH, vYI, vYJ, vYK, vYL, vYM, vYN, vYO; + vector unsigned char vhi0, vlo0, vhi1, vlo1, vhi2, vlo2; + vector unsigned char vhi3, vlo3, vhi4, vlo4, vhi5, vlo5; + int i, j, head; + + if (vlen < 128) { + gf_vect_mul_vsx(len, &gftbls[0 * 32 * vlen], src[0], (unsigned char *) dest[0]); + gf_vect_mul_vsx(len, &gftbls[1 * 32 * vlen], src[0], (unsigned char *) dest[1]); + gf_vect_mul_vsx(len, &gftbls[2 * 32 * vlen], src[0], (unsigned char *) dest[2]); + gf_vect_mul_vsx(len, &gftbls[3 * 32 * vlen], src[0], (unsigned char *) dest[3]); + gf_vect_mul_vsx(len, &gftbls[4 * 32 * vlen], src[0], (unsigned char *) dest[4]); + gf_vect_mul_vsx(len, &gftbls[5 * 32 * vlen], src[0], (unsigned char *) dest[5]); + + for (j = 1; j < vlen; j++) { + gf_6vect_mad_vsx(len, vlen, j, gftbls, src[j], dest); + } + return; + } + + t0 = (unsigned char *) dest[0]; + t1 = (unsigned char *) dest[1]; + t2 = (unsigned char *) dest[2]; + t3 = (unsigned char *) dest[3]; + t4 = (unsigned char *) dest[4]; + t5 = (unsigned char *) dest[5]; + + head = len % 64; + if (head != 0) { + gf_vect_dot_prod_base(head, vlen, &gftbls[0 * 32 * vlen], src, t0); + gf_vect_dot_prod_base(head, vlen, &gftbls[1 * 32 * vlen], src, t1); + gf_vect_dot_prod_base(head, vlen, &gftbls[2 * 32 * vlen], src, t2); + gf_vect_dot_prod_base(head, vlen, &gftbls[3 * 32 * vlen], src, t3); + gf_vect_dot_prod_base(head, vlen, &gftbls[4 * 32 * vlen], src, t4); + gf_vect_dot_prod_base(head, vlen, &gftbls[5 * 32 * vlen], src, t5); + } + + for (i = head; i < len - 63; i += 64) { + vY1 = vY1 ^ vY1; + vY2 = vY2 ^ vY2; + vY3 = vY3 ^ vY3; + vY4 = vY4 ^ vY4; + vY5 = vY5 ^ vY5; + vY6 = vY6 ^ vY6; + vY7 = vY7 ^ vY7; + vY8 = vY8 ^ vY8; + vY9 = vY9 ^ vY9; + vYA = vYA ^ vYA; + vYB = vYB ^ vYB; + vYC = vYC ^ vYC; + + vYD = vYD ^ vYD; + vYE = vYE ^ vYE; + vYF = vYF ^ vYF; + vYG = vYG ^ vYG; + vYH = vYH ^ vYH; + vYI = vYI ^ vYI; + vYJ = vYJ ^ vYJ; + vYK = vYK ^ vYK; + vYL = vYL ^ vYL; + vYM = vYM ^ vYM; + vYN = vYN ^ vYN; + vYO = vYO ^ vYO; + + unsigned char *g0 = &gftbls[0 * 32 * vlen]; + unsigned char *g1 = &gftbls[1 * 32 * vlen]; + unsigned char *g2 = &gftbls[2 * 32 * vlen]; + unsigned char *g3 = &gftbls[3 * 32 * vlen]; + unsigned char *g4 = &gftbls[4 * 32 * vlen]; + unsigned char *g5 = &gftbls[5 * 32 * vlen]; + + for (j = 0; j < vlen; j++) { + s = (unsigned char *) src[j]; + vX1 = vec_xl(0, s + i); + vX2 = vec_xl(16, s + i); + vX3 = vec_xl(32, s + i); + vX4 = vec_xl(48, s + i); + + vlo0 = EC_vec_xl(0, g0); + vhi0 = EC_vec_xl(16, g0); + vlo1 = EC_vec_xl(0, g1); + vhi1 = EC_vec_xl(16, g1); + + vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1); + vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2); + vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3); + vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4); + + vlo2 = EC_vec_xl(0, g2); + vhi2 = EC_vec_xl(16, g2); + vlo3 = EC_vec_xl(0, g3); + vhi3 = EC_vec_xl(16, g3); + + vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1); + vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2); + vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3); + vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4); + + vlo4 = EC_vec_xl(0, g4); + vhi4 = EC_vec_xl(16, g4); + vlo5 = EC_vec_xl(0, g5); + vhi5 = EC_vec_xl(16, g5); + + vY5 = vY5 ^ EC_vec_permxor(vhi2, vlo2, vX1); + vY6 = vY6 ^ EC_vec_permxor(vhi2, vlo2, vX2); + vYH = vYH ^ EC_vec_permxor(vhi2, vlo2, vX3); + vYI = vYI ^ EC_vec_permxor(vhi2, vlo2, vX4); + + vY7 = vY7 ^ EC_vec_permxor(vhi3, vlo3, vX1); + vY8 = vY8 ^ EC_vec_permxor(vhi3, vlo3, vX2); + vYJ = vYJ ^ EC_vec_permxor(vhi3, vlo3, vX3); + vYK = vYK ^ EC_vec_permxor(vhi3, vlo3, vX4); + + vY9 = vY9 ^ EC_vec_permxor(vhi4, vlo4, vX1); + vYA = vYA ^ EC_vec_permxor(vhi4, vlo4, vX2); + vYL = vYL ^ EC_vec_permxor(vhi4, vlo4, vX3); + vYM = vYM ^ EC_vec_permxor(vhi4, vlo4, vX4); + + vYB = vYB ^ EC_vec_permxor(vhi5, vlo5, vX1); + vYC = vYC ^ EC_vec_permxor(vhi5, vlo5, vX2); + vYN = vYN ^ EC_vec_permxor(vhi5, vlo5, vX3); + vYO = vYO ^ EC_vec_permxor(vhi5, vlo5, vX4); + + g0 += 32; + g1 += 32; + g2 += 32; + g3 += 32; + g4 += 32; + g5 += 32; + } + + vec_xst(vY1, 0, t0 + i); + vec_xst(vY2, 16, t0 + i); + vec_xst(vY3, 0, t1 + i); + vec_xst(vY4, 16, t1 + i); + vec_xst(vY5, 0, t2 + i); + vec_xst(vY6, 16, t2 + i); + vec_xst(vY7, 0, t3 + i); + vec_xst(vY8, 16, t3 + i); + vec_xst(vY9, 0, t4 + i); + vec_xst(vYA, 16, t4 + i); + vec_xst(vYB, 0, t5 + i); + vec_xst(vYC, 16, t5 + i); + + vec_xst(vYD, 32, t0 + i); + vec_xst(vYE, 48, t0 + i); + vec_xst(vYF, 32, t1 + i); + vec_xst(vYG, 48, t1 + i); + vec_xst(vYH, 32, t2 + i); + vec_xst(vYI, 48, t2 + i); + vec_xst(vYJ, 32, t3 + i); + vec_xst(vYK, 48, t3 + i); + vec_xst(vYL, 32, t4 + i); + vec_xst(vYM, 48, t4 + i); + vec_xst(vYN, 32, t5 + i); + vec_xst(vYO, 48, t5 + i); + } + return; } diff --git a/erasure_code/ppc64le/gf_6vect_mad_vsx.c b/erasure_code/ppc64le/gf_6vect_mad_vsx.c index 43ea6c69..bfe09d0d 100644 --- a/erasure_code/ppc64le/gf_6vect_mad_vsx.c +++ b/erasure_code/ppc64le/gf_6vect_mad_vsx.c @@ -1,142 +1,143 @@ #include "ec_base_vsx.h" -void gf_6vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char **dest) +void +gf_6vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char **dest) { - unsigned char *s, *t0, *t1, *t2, *t3, *t4, *t5; - vector unsigned char vX1, vX2, vX3, vX4; - vector unsigned char vY1, vY2, vY3, vY4, vY5, vY6, vY7, vY8, vY9, vYA, vYB, vYC; - vector unsigned char vYD, vYE, vYF, vYG, vYH, vYI, vYJ, vYK, vYL, vYM, vYN, vYO; - vector unsigned char vhi0, vlo0, vhi1, vlo1, vhi2, vlo2; - vector unsigned char vhi3, vlo3, vhi4, vlo4, vhi5, vlo5; - int i, head; - - s = (unsigned char *)src; - t0 = (unsigned char *)dest[0]; - t1 = (unsigned char *)dest[1]; - t2 = (unsigned char *)dest[2]; - t3 = (unsigned char *)dest[3]; - t4 = (unsigned char *)dest[4]; - t5 = (unsigned char *)dest[5]; - - head = len % 64; - if (head != 0) { - gf_vect_mad_base(head, vec, vec_i, &gftbls[0 * 32 * vec], src, t0); - gf_vect_mad_base(head, vec, vec_i, &gftbls[1 * 32 * vec], src, t1); - gf_vect_mad_base(head, vec, vec_i, &gftbls[2 * 32 * vec], src, t2); - gf_vect_mad_base(head, vec, vec_i, &gftbls[3 * 32 * vec], src, t3); - gf_vect_mad_base(head, vec, vec_i, &gftbls[4 * 32 * vec], src, t4); - gf_vect_mad_base(head, vec, vec_i, &gftbls[5 * 32 * vec], src, t5); - } - - vlo0 = EC_vec_xl(0, gftbls + (((0 * vec) << 5) + (vec_i << 5))); - vhi0 = EC_vec_xl(16, gftbls + (((0 * vec) << 5) + (vec_i << 5))); - vlo1 = EC_vec_xl(0, gftbls + (((1 * vec) << 5) + (vec_i << 5))); - vhi1 = EC_vec_xl(16, gftbls + (((1 * vec) << 5) + (vec_i << 5))); - vlo2 = EC_vec_xl(0, gftbls + (((2 * vec) << 5) + (vec_i << 5))); - vhi2 = EC_vec_xl(16, gftbls + (((2 * vec) << 5) + (vec_i << 5))); - vlo3 = EC_vec_xl(0, gftbls + (((3 * vec) << 5) + (vec_i << 5))); - vhi3 = EC_vec_xl(16, gftbls + (((3 * vec) << 5) + (vec_i << 5))); - vlo4 = EC_vec_xl(0, gftbls + (((4 * vec) << 5) + (vec_i << 5))); - vhi4 = EC_vec_xl(16, gftbls + (((4 * vec) << 5) + (vec_i << 5))); - vlo5 = EC_vec_xl(0, gftbls + (((5 * vec) << 5) + (vec_i << 5))); - vhi5 = EC_vec_xl(16, gftbls + (((5 * vec) << 5) + (vec_i << 5))); - - for (i = head; i < len - 63; i += 64) { - vX1 = vec_xl(0, s + i); - vX2 = vec_xl(16, s + i); - vX3 = vec_xl(32, s + i); - vX4 = vec_xl(48, s + i); - - vY1 = vec_xl(0, t0 + i); - vY2 = vec_xl(16, t0 + i); - vYD = vec_xl(32, t0 + i); - vYE = vec_xl(48, t0 + i); - - vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1); - vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2); - vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3); - vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4); - - vec_xst(vY1, 0, t0 + i); - vec_xst(vY2, 16, t0 + i); - vec_xst(vYD, 32, t0 + i); - vec_xst(vYE, 48, t0 + i); - - vY3 = vec_xl(0, t1 + i); - vY4 = vec_xl(16, t1 + i); - vYF = vec_xl(32, t1 + i); - vYG = vec_xl(48, t1 + i); - - vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1); - vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2); - vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3); - vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4); - - vec_xst(vY3, 0, t1 + i); - vec_xst(vY4, 16, t1 + i); - vec_xst(vYF, 32, t1 + i); - vec_xst(vYG, 48, t1 + i); - - vY5 = vec_xl(0, t2 + i); - vY6 = vec_xl(16, t2 + i); - vYH = vec_xl(32, t2 + i); - vYI = vec_xl(48, t2 + i); - - vY5 = vY5 ^ EC_vec_permxor(vhi2, vlo2, vX1); - vY6 = vY6 ^ EC_vec_permxor(vhi2, vlo2, vX2); - vYH = vYH ^ EC_vec_permxor(vhi2, vlo2, vX3); - vYI = vYI ^ EC_vec_permxor(vhi2, vlo2, vX4); - - vY7 = vec_xl(0, t3 + i); - vY8 = vec_xl(16, t3 + i); - vYJ = vec_xl(32, t3 + i); - vYK = vec_xl(48, t3 + i); - - vec_xst(vY5, 0, t2 + i); - vec_xst(vY6, 16, t2 + i); - vec_xst(vYH, 32, t2 + i); - vec_xst(vYI, 48, t2 + i); - - vY7 = vY7 ^ EC_vec_permxor(vhi3, vlo3, vX1); - vY8 = vY8 ^ EC_vec_permxor(vhi3, vlo3, vX2); - vYJ = vYJ ^ EC_vec_permxor(vhi3, vlo3, vX3); - vYK = vYK ^ EC_vec_permxor(vhi3, vlo3, vX4); - - vY9 = vec_xl(0, t4 + i); - vYA = vec_xl(16, t4 + i); - vYL = vec_xl(32, t4 + i); - vYM = vec_xl(48, t4 + i); - - vec_xst(vY7, 0, t3 + i); - vec_xst(vY8, 16, t3 + i); - vec_xst(vYJ, 32, t3 + i); - vec_xst(vYK, 48, t3 + i); - - vY9 = vY9 ^ EC_vec_permxor(vhi4, vlo4, vX1); - vYA = vYA ^ EC_vec_permxor(vhi4, vlo4, vX2); - vYL = vYL ^ EC_vec_permxor(vhi4, vlo4, vX3); - vYM = vYM ^ EC_vec_permxor(vhi4, vlo4, vX4); - - vYB = vec_xl(0, t5 + i); - vYC = vec_xl(16, t5 + i); - vYN = vec_xl(32, t5 + i); - vYO = vec_xl(48, t5 + i); - - vec_xst(vY9, 0, t4 + i); - vec_xst(vYA, 16, t4 + i); - vec_xst(vYL, 32, t4 + i); - vec_xst(vYM, 48, t4 + i); - - vYB = vYB ^ EC_vec_permxor(vhi5, vlo5, vX1); - vYC = vYC ^ EC_vec_permxor(vhi5, vlo5, vX2); - vYN = vYN ^ EC_vec_permxor(vhi5, vlo5, vX3); - vYO = vYO ^ EC_vec_permxor(vhi5, vlo5, vX4); - - vec_xst(vYB, 0, t5 + i); - vec_xst(vYC, 16, t5 + i); - vec_xst(vYN, 32, t5 + i); - vec_xst(vYO, 48, t5 + i); - } - return; + unsigned char *s, *t0, *t1, *t2, *t3, *t4, *t5; + vector unsigned char vX1, vX2, vX3, vX4; + vector unsigned char vY1, vY2, vY3, vY4, vY5, vY6, vY7, vY8, vY9, vYA, vYB, vYC; + vector unsigned char vYD, vYE, vYF, vYG, vYH, vYI, vYJ, vYK, vYL, vYM, vYN, vYO; + vector unsigned char vhi0, vlo0, vhi1, vlo1, vhi2, vlo2; + vector unsigned char vhi3, vlo3, vhi4, vlo4, vhi5, vlo5; + int i, head; + + s = (unsigned char *) src; + t0 = (unsigned char *) dest[0]; + t1 = (unsigned char *) dest[1]; + t2 = (unsigned char *) dest[2]; + t3 = (unsigned char *) dest[3]; + t4 = (unsigned char *) dest[4]; + t5 = (unsigned char *) dest[5]; + + head = len % 64; + if (head != 0) { + gf_vect_mad_base(head, vec, vec_i, &gftbls[0 * 32 * vec], src, t0); + gf_vect_mad_base(head, vec, vec_i, &gftbls[1 * 32 * vec], src, t1); + gf_vect_mad_base(head, vec, vec_i, &gftbls[2 * 32 * vec], src, t2); + gf_vect_mad_base(head, vec, vec_i, &gftbls[3 * 32 * vec], src, t3); + gf_vect_mad_base(head, vec, vec_i, &gftbls[4 * 32 * vec], src, t4); + gf_vect_mad_base(head, vec, vec_i, &gftbls[5 * 32 * vec], src, t5); + } + + vlo0 = EC_vec_xl(0, gftbls + (((0 * vec) << 5) + (vec_i << 5))); + vhi0 = EC_vec_xl(16, gftbls + (((0 * vec) << 5) + (vec_i << 5))); + vlo1 = EC_vec_xl(0, gftbls + (((1 * vec) << 5) + (vec_i << 5))); + vhi1 = EC_vec_xl(16, gftbls + (((1 * vec) << 5) + (vec_i << 5))); + vlo2 = EC_vec_xl(0, gftbls + (((2 * vec) << 5) + (vec_i << 5))); + vhi2 = EC_vec_xl(16, gftbls + (((2 * vec) << 5) + (vec_i << 5))); + vlo3 = EC_vec_xl(0, gftbls + (((3 * vec) << 5) + (vec_i << 5))); + vhi3 = EC_vec_xl(16, gftbls + (((3 * vec) << 5) + (vec_i << 5))); + vlo4 = EC_vec_xl(0, gftbls + (((4 * vec) << 5) + (vec_i << 5))); + vhi4 = EC_vec_xl(16, gftbls + (((4 * vec) << 5) + (vec_i << 5))); + vlo5 = EC_vec_xl(0, gftbls + (((5 * vec) << 5) + (vec_i << 5))); + vhi5 = EC_vec_xl(16, gftbls + (((5 * vec) << 5) + (vec_i << 5))); + + for (i = head; i < len - 63; i += 64) { + vX1 = vec_xl(0, s + i); + vX2 = vec_xl(16, s + i); + vX3 = vec_xl(32, s + i); + vX4 = vec_xl(48, s + i); + + vY1 = vec_xl(0, t0 + i); + vY2 = vec_xl(16, t0 + i); + vYD = vec_xl(32, t0 + i); + vYE = vec_xl(48, t0 + i); + + vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1); + vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2); + vYD = vYD ^ EC_vec_permxor(vhi0, vlo0, vX3); + vYE = vYE ^ EC_vec_permxor(vhi0, vlo0, vX4); + + vec_xst(vY1, 0, t0 + i); + vec_xst(vY2, 16, t0 + i); + vec_xst(vYD, 32, t0 + i); + vec_xst(vYE, 48, t0 + i); + + vY3 = vec_xl(0, t1 + i); + vY4 = vec_xl(16, t1 + i); + vYF = vec_xl(32, t1 + i); + vYG = vec_xl(48, t1 + i); + + vY3 = vY3 ^ EC_vec_permxor(vhi1, vlo1, vX1); + vY4 = vY4 ^ EC_vec_permxor(vhi1, vlo1, vX2); + vYF = vYF ^ EC_vec_permxor(vhi1, vlo1, vX3); + vYG = vYG ^ EC_vec_permxor(vhi1, vlo1, vX4); + + vec_xst(vY3, 0, t1 + i); + vec_xst(vY4, 16, t1 + i); + vec_xst(vYF, 32, t1 + i); + vec_xst(vYG, 48, t1 + i); + + vY5 = vec_xl(0, t2 + i); + vY6 = vec_xl(16, t2 + i); + vYH = vec_xl(32, t2 + i); + vYI = vec_xl(48, t2 + i); + + vY5 = vY5 ^ EC_vec_permxor(vhi2, vlo2, vX1); + vY6 = vY6 ^ EC_vec_permxor(vhi2, vlo2, vX2); + vYH = vYH ^ EC_vec_permxor(vhi2, vlo2, vX3); + vYI = vYI ^ EC_vec_permxor(vhi2, vlo2, vX4); + + vY7 = vec_xl(0, t3 + i); + vY8 = vec_xl(16, t3 + i); + vYJ = vec_xl(32, t3 + i); + vYK = vec_xl(48, t3 + i); + + vec_xst(vY5, 0, t2 + i); + vec_xst(vY6, 16, t2 + i); + vec_xst(vYH, 32, t2 + i); + vec_xst(vYI, 48, t2 + i); + + vY7 = vY7 ^ EC_vec_permxor(vhi3, vlo3, vX1); + vY8 = vY8 ^ EC_vec_permxor(vhi3, vlo3, vX2); + vYJ = vYJ ^ EC_vec_permxor(vhi3, vlo3, vX3); + vYK = vYK ^ EC_vec_permxor(vhi3, vlo3, vX4); + + vY9 = vec_xl(0, t4 + i); + vYA = vec_xl(16, t4 + i); + vYL = vec_xl(32, t4 + i); + vYM = vec_xl(48, t4 + i); + + vec_xst(vY7, 0, t3 + i); + vec_xst(vY8, 16, t3 + i); + vec_xst(vYJ, 32, t3 + i); + vec_xst(vYK, 48, t3 + i); + + vY9 = vY9 ^ EC_vec_permxor(vhi4, vlo4, vX1); + vYA = vYA ^ EC_vec_permxor(vhi4, vlo4, vX2); + vYL = vYL ^ EC_vec_permxor(vhi4, vlo4, vX3); + vYM = vYM ^ EC_vec_permxor(vhi4, vlo4, vX4); + + vYB = vec_xl(0, t5 + i); + vYC = vec_xl(16, t5 + i); + vYN = vec_xl(32, t5 + i); + vYO = vec_xl(48, t5 + i); + + vec_xst(vY9, 0, t4 + i); + vec_xst(vYA, 16, t4 + i); + vec_xst(vYL, 32, t4 + i); + vec_xst(vYM, 48, t4 + i); + + vYB = vYB ^ EC_vec_permxor(vhi5, vlo5, vX1); + vYC = vYC ^ EC_vec_permxor(vhi5, vlo5, vX2); + vYN = vYN ^ EC_vec_permxor(vhi5, vlo5, vX3); + vYO = vYO ^ EC_vec_permxor(vhi5, vlo5, vX4); + + vec_xst(vYB, 0, t5 + i); + vec_xst(vYC, 16, t5 + i); + vec_xst(vYN, 32, t5 + i); + vec_xst(vYO, 48, t5 + i); + } + return; } diff --git a/erasure_code/ppc64le/gf_vect_dot_prod_vsx.c b/erasure_code/ppc64le/gf_vect_dot_prod_vsx.c index 2f97e342..f1499689 100644 --- a/erasure_code/ppc64le/gf_vect_dot_prod_vsx.c +++ b/erasure_code/ppc64le/gf_vect_dot_prod_vsx.c @@ -1,85 +1,86 @@ #include "ec_base_vsx.h" -void gf_vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, - unsigned char **src, unsigned char *dest) +void +gf_vect_dot_prod_vsx(int len, int vlen, unsigned char *gftbls, unsigned char **src, + unsigned char *dest) { - unsigned char *s, *t0; - vector unsigned char vX1, vY1; - vector unsigned char vX2, vY2; - vector unsigned char vX3, vY3; - vector unsigned char vX4, vY4; - vector unsigned char vX5, vY5; - vector unsigned char vX6, vY6; - vector unsigned char vX7, vY7; - vector unsigned char vX8, vY8; - vector unsigned char vhi0, vlo0; - int i, j, head; + unsigned char *s, *t0; + vector unsigned char vX1, vY1; + vector unsigned char vX2, vY2; + vector unsigned char vX3, vY3; + vector unsigned char vX4, vY4; + vector unsigned char vX5, vY5; + vector unsigned char vX6, vY6; + vector unsigned char vX7, vY7; + vector unsigned char vX8, vY8; + vector unsigned char vhi0, vlo0; + int i, j, head; - if (vlen < 128) { - gf_vect_mul_vsx(len, &gftbls[0 * 32 * vlen], src[0], (unsigned char *)dest); + if (vlen < 128) { + gf_vect_mul_vsx(len, &gftbls[0 * 32 * vlen], src[0], (unsigned char *) dest); - for (j = 1; j < vlen; j++) { - gf_vect_mad_vsx(len, vlen, j, gftbls, src[j], dest); - } - return; - } + for (j = 1; j < vlen; j++) { + gf_vect_mad_vsx(len, vlen, j, gftbls, src[j], dest); + } + return; + } - t0 = (unsigned char *)dest; + t0 = (unsigned char *) dest; - head = len % 128; - if (head != 0) { - gf_vect_dot_prod_base(head, vlen, &gftbls[0 * 32 * vlen], src, t0); - } + head = len % 128; + if (head != 0) { + gf_vect_dot_prod_base(head, vlen, &gftbls[0 * 32 * vlen], src, t0); + } - for (i = head; i < len - 127; i += 128) { - vY1 = vY1 ^ vY1; - vY2 = vY2 ^ vY2; - vY3 = vY3 ^ vY3; - vY4 = vY4 ^ vY4; + for (i = head; i < len - 127; i += 128) { + vY1 = vY1 ^ vY1; + vY2 = vY2 ^ vY2; + vY3 = vY3 ^ vY3; + vY4 = vY4 ^ vY4; - vY5 = vY5 ^ vY5; - vY6 = vY6 ^ vY6; - vY7 = vY7 ^ vY7; - vY8 = vY8 ^ vY8; + vY5 = vY5 ^ vY5; + vY6 = vY6 ^ vY6; + vY7 = vY7 ^ vY7; + vY8 = vY8 ^ vY8; - unsigned char *g0 = &gftbls[0 * 32 * vlen]; + unsigned char *g0 = &gftbls[0 * 32 * vlen]; - for (j = 0; j < vlen; j++) { - s = (unsigned char *)src[j]; - vX1 = vec_xl(0, s + i); - vX2 = vec_xl(16, s + i); - vX3 = vec_xl(32, s + i); - vX4 = vec_xl(48, s + i); + for (j = 0; j < vlen; j++) { + s = (unsigned char *) src[j]; + vX1 = vec_xl(0, s + i); + vX2 = vec_xl(16, s + i); + vX3 = vec_xl(32, s + i); + vX4 = vec_xl(48, s + i); - vlo0 = EC_vec_xl(0, g0); - vhi0 = EC_vec_xl(16, g0); + vlo0 = EC_vec_xl(0, g0); + vhi0 = EC_vec_xl(16, g0); - vX5 = vec_xl(64, s + i); - vX6 = vec_xl(80, s + i); - vX7 = vec_xl(96, s + i); - vX8 = vec_xl(112, s + i); + vX5 = vec_xl(64, s + i); + vX6 = vec_xl(80, s + i); + vX7 = vec_xl(96, s + i); + vX8 = vec_xl(112, s + i); - vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1); - vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2); - vY3 = vY3 ^ EC_vec_permxor(vhi0, vlo0, vX3); - vY4 = vY4 ^ EC_vec_permxor(vhi0, vlo0, vX4); + vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1); + vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2); + vY3 = vY3 ^ EC_vec_permxor(vhi0, vlo0, vX3); + vY4 = vY4 ^ EC_vec_permxor(vhi0, vlo0, vX4); - vY5 = vY5 ^ EC_vec_permxor(vhi0, vlo0, vX5); - vY6 = vY6 ^ EC_vec_permxor(vhi0, vlo0, vX6); - vY7 = vY7 ^ EC_vec_permxor(vhi0, vlo0, vX7); - vY8 = vY8 ^ EC_vec_permxor(vhi0, vlo0, vX8); + vY5 = vY5 ^ EC_vec_permxor(vhi0, vlo0, vX5); + vY6 = vY6 ^ EC_vec_permxor(vhi0, vlo0, vX6); + vY7 = vY7 ^ EC_vec_permxor(vhi0, vlo0, vX7); + vY8 = vY8 ^ EC_vec_permxor(vhi0, vlo0, vX8); - g0 += 32; - } - vec_xst(vY1, 0, t0 + i); - vec_xst(vY2, 16, t0 + i); - vec_xst(vY3, 32, t0 + i); - vec_xst(vY4, 48, t0 + i); + g0 += 32; + } + vec_xst(vY1, 0, t0 + i); + vec_xst(vY2, 16, t0 + i); + vec_xst(vY3, 32, t0 + i); + vec_xst(vY4, 48, t0 + i); - vec_xst(vY5, 64, t0 + i); - vec_xst(vY6, 80, t0 + i); - vec_xst(vY7, 96, t0 + i); - vec_xst(vY8, 112, t0 + i); - } - return; + vec_xst(vY5, 64, t0 + i); + vec_xst(vY6, 80, t0 + i); + vec_xst(vY7, 96, t0 + i); + vec_xst(vY8, 112, t0 + i); + } + return; } diff --git a/erasure_code/ppc64le/gf_vect_mad_vsx.c b/erasure_code/ppc64le/gf_vect_mad_vsx.c index a4810b96..03da0710 100644 --- a/erasure_code/ppc64le/gf_vect_mad_vsx.c +++ b/erasure_code/ppc64le/gf_vect_mad_vsx.c @@ -1,48 +1,49 @@ #include "ec_base_vsx.h" -void gf_vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, - unsigned char *src, unsigned char *dest) +void +gf_vect_mad_vsx(int len, int vec, int vec_i, unsigned char *gftbls, unsigned char *src, + unsigned char *dest) { - unsigned char *s, *t0; - vector unsigned char vX1, vY1; - vector unsigned char vX2, vY2; - vector unsigned char vX3, vY3; - vector unsigned char vX4, vY4; - vector unsigned char vhi0, vlo0; - int i, head; - - s = (unsigned char *)src; - t0 = (unsigned char *)dest; - - head = len % 64; - if (head != 0) { - gf_vect_mad_base(head, vec, vec_i, &gftbls[0 * 32 * vec], src, dest); - } - - vlo0 = EC_vec_xl(0, gftbls + (((0 * vec) << 5) + (vec_i << 5))); - vhi0 = EC_vec_xl(16, gftbls + (((0 * vec) << 5) + (vec_i << 5))); - - for (i = head; i < len - 63; i += 64) { - vX1 = vec_xl(0, s + i); - vX2 = vec_xl(16, s + i); - vX3 = vec_xl(32, s + i); - vX4 = vec_xl(48, s + i); - - vY1 = vec_xl(0, t0 + i); - vY2 = vec_xl(16, t0 + i); - vY3 = vec_xl(32, t0 + i); - vY4 = vec_xl(48, t0 + i); - - vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1); - vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2); - vY3 = vY3 ^ EC_vec_permxor(vhi0, vlo0, vX3); - vY4 = vY4 ^ EC_vec_permxor(vhi0, vlo0, vX4); - - vec_xst(vY1, 0, t0 + i); - vec_xst(vY2, 16, t0 + i); - vec_xst(vY3, 32, t0 + i); - vec_xst(vY4, 48, t0 + i); - } - - return; + unsigned char *s, *t0; + vector unsigned char vX1, vY1; + vector unsigned char vX2, vY2; + vector unsigned char vX3, vY3; + vector unsigned char vX4, vY4; + vector unsigned char vhi0, vlo0; + int i, head; + + s = (unsigned char *) src; + t0 = (unsigned char *) dest; + + head = len % 64; + if (head != 0) { + gf_vect_mad_base(head, vec, vec_i, &gftbls[0 * 32 * vec], src, dest); + } + + vlo0 = EC_vec_xl(0, gftbls + (((0 * vec) << 5) + (vec_i << 5))); + vhi0 = EC_vec_xl(16, gftbls + (((0 * vec) << 5) + (vec_i << 5))); + + for (i = head; i < len - 63; i += 64) { + vX1 = vec_xl(0, s + i); + vX2 = vec_xl(16, s + i); + vX3 = vec_xl(32, s + i); + vX4 = vec_xl(48, s + i); + + vY1 = vec_xl(0, t0 + i); + vY2 = vec_xl(16, t0 + i); + vY3 = vec_xl(32, t0 + i); + vY4 = vec_xl(48, t0 + i); + + vY1 = vY1 ^ EC_vec_permxor(vhi0, vlo0, vX1); + vY2 = vY2 ^ EC_vec_permxor(vhi0, vlo0, vX2); + vY3 = vY3 ^ EC_vec_permxor(vhi0, vlo0, vX3); + vY4 = vY4 ^ EC_vec_permxor(vhi0, vlo0, vX4); + + vec_xst(vY1, 0, t0 + i); + vec_xst(vY2, 16, t0 + i); + vec_xst(vY3, 32, t0 + i); + vec_xst(vY4, 48, t0 + i); + } + + return; } diff --git a/erasure_code/ppc64le/gf_vect_mul_vsx.c b/erasure_code/ppc64le/gf_vect_mul_vsx.c index 718d96ce..c7f18c2f 100644 --- a/erasure_code/ppc64le/gf_vect_mul_vsx.c +++ b/erasure_code/ppc64le/gf_vect_mul_vsx.c @@ -3,73 +3,74 @@ /* * Same as gf_vect_mul_base in "ec_base.h" but without the size restriction. */ -static void _gf_vect_mul_base(int len, unsigned char *a, unsigned char *src, - unsigned char *dest) +static void +_gf_vect_mul_base(int len, unsigned char *a, unsigned char *src, unsigned char *dest) { - //2nd element of table array is ref value used to fill it in - unsigned char c = a[1]; + // 2nd element of table array is ref value used to fill it in + unsigned char c = a[1]; - while (len-- > 0) - *dest++ = gf_mul(c, *src++); - return; + while (len-- > 0) + *dest++ = gf_mul(c, *src++); + return; } -void gf_vect_mul_vsx(int len, unsigned char *gftbl, unsigned char *src, unsigned char *dest) +void +gf_vect_mul_vsx(int len, unsigned char *gftbl, unsigned char *src, unsigned char *dest) { - unsigned char *s, *t0; - vector unsigned char vX1, vY1; - vector unsigned char vX2, vY2; - vector unsigned char vX3, vY3; - vector unsigned char vX4, vY4; - vector unsigned char vX5, vY5; - vector unsigned char vX6, vY6; - vector unsigned char vX7, vY7; - vector unsigned char vX8, vY8; - vector unsigned char vhi0, vlo0; - int i, head; + unsigned char *s, *t0; + vector unsigned char vX1, vY1; + vector unsigned char vX2, vY2; + vector unsigned char vX3, vY3; + vector unsigned char vX4, vY4; + vector unsigned char vX5, vY5; + vector unsigned char vX6, vY6; + vector unsigned char vX7, vY7; + vector unsigned char vX8, vY8; + vector unsigned char vhi0, vlo0; + int i, head; - s = (unsigned char *)src; - t0 = (unsigned char *)dest; + s = (unsigned char *) src; + t0 = (unsigned char *) dest; - head = len % 128; - if (head != 0) { - _gf_vect_mul_base(head, gftbl, src, dest); - } + head = len % 128; + if (head != 0) { + _gf_vect_mul_base(head, gftbl, src, dest); + } - vlo0 = EC_vec_xl(0, gftbl); - vhi0 = EC_vec_xl(16, gftbl); + vlo0 = EC_vec_xl(0, gftbl); + vhi0 = EC_vec_xl(16, gftbl); - for (i = head; i < len - 127; i += 128) { - vX1 = vec_xl(0, s + i); - vX2 = vec_xl(16, s + i); - vX3 = vec_xl(32, s + i); - vX4 = vec_xl(48, s + i); + for (i = head; i < len - 127; i += 128) { + vX1 = vec_xl(0, s + i); + vX2 = vec_xl(16, s + i); + vX3 = vec_xl(32, s + i); + vX4 = vec_xl(48, s + i); - vX5 = vec_xl(64, s + i); - vX6 = vec_xl(80, s + i); - vX7 = vec_xl(96, s + i); - vX8 = vec_xl(112, s + i); + vX5 = vec_xl(64, s + i); + vX6 = vec_xl(80, s + i); + vX7 = vec_xl(96, s + i); + vX8 = vec_xl(112, s + i); - vY1 = EC_vec_permxor(vhi0, vlo0, vX1); - vY2 = EC_vec_permxor(vhi0, vlo0, vX2); - vY3 = EC_vec_permxor(vhi0, vlo0, vX3); - vY4 = EC_vec_permxor(vhi0, vlo0, vX4); + vY1 = EC_vec_permxor(vhi0, vlo0, vX1); + vY2 = EC_vec_permxor(vhi0, vlo0, vX2); + vY3 = EC_vec_permxor(vhi0, vlo0, vX3); + vY4 = EC_vec_permxor(vhi0, vlo0, vX4); - vY5 = EC_vec_permxor(vhi0, vlo0, vX5); - vY6 = EC_vec_permxor(vhi0, vlo0, vX6); - vY7 = EC_vec_permxor(vhi0, vlo0, vX7); - vY8 = EC_vec_permxor(vhi0, vlo0, vX8); + vY5 = EC_vec_permxor(vhi0, vlo0, vX5); + vY6 = EC_vec_permxor(vhi0, vlo0, vX6); + vY7 = EC_vec_permxor(vhi0, vlo0, vX7); + vY8 = EC_vec_permxor(vhi0, vlo0, vX8); - vec_xst(vY1, 0, t0 + i); - vec_xst(vY2, 16, t0 + i); - vec_xst(vY3, 32, t0 + i); - vec_xst(vY4, 48, t0 + i); + vec_xst(vY1, 0, t0 + i); + vec_xst(vY2, 16, t0 + i); + vec_xst(vY3, 32, t0 + i); + vec_xst(vY4, 48, t0 + i); - vec_xst(vY5, 64, t0 + i); - vec_xst(vY6, 80, t0 + i); - vec_xst(vY7, 96, t0 + i); - vec_xst(vY8, 112, t0 + i); - } + vec_xst(vY5, 64, t0 + i); + vec_xst(vY6, 80, t0 + i); + vec_xst(vY7, 96, t0 + i); + vec_xst(vY8, 112, t0 + i); + } - return; + return; } From 9d99f8215d315fe67f178ce3849b0f40e13ee704 Mon Sep 17 00:00:00 2001 From: Marcel Cornu Date: Fri, 19 Apr 2024 17:09:13 +0100 Subject: [PATCH 04/19] examples: reformat using new code style Signed-off-by: Marcel Cornu --- examples/crc/crc_combine_example.c | 640 +++++++++++---------- examples/ec/ec_piggyback_example.c | 876 ++++++++++++++--------------- examples/ec/ec_simple_example.c | 444 ++++++++------- 3 files changed, 984 insertions(+), 976 deletions(-) diff --git a/examples/crc/crc_combine_example.c b/examples/crc/crc_combine_example.c index ccabe044..a454c826 100644 --- a/examples/crc/crc_combine_example.c +++ b/examples/crc/crc_combine_example.c @@ -47,396 +47,412 @@ #include #include -int verbose; // Global for tests +int verbose; // Global for tests -#if defined (_MSC_VER) -# define __builtin_parity(x) (__popcnt64(x) & 1) +#if defined(_MSC_VER) +#define __builtin_parity(x) (__popcnt64(x) & 1) #endif -#if defined (__GNUC__) || defined (__clang__) -# define ATTRIBUTE_TARGET(x) __attribute__((target(x))) +#if defined(__GNUC__) || defined(__clang__) +#define ATTRIBUTE_TARGET(x) __attribute__((target(x))) #else -# define ATTRIBUTE_TARGET(x) +#define ATTRIBUTE_TARGET(x) #endif struct crc64_desc { - uint64_t poly; - uint64_t k5; - uint64_t k7; - uint64_t k8; + uint64_t poly; + uint64_t k5; + uint64_t k7; + uint64_t k8; }; -void gen_crc64_refl_consts(uint64_t poly, struct crc64_desc *c) +void +gen_crc64_refl_consts(uint64_t poly, struct crc64_desc *c) { - uint64_t quotienth = 0; - uint64_t div; - uint64_t rem = 1ull; - int i; - - for (i = 0; i < 64; i++) { - div = (rem & 1ull) != 0; - quotienth = (quotienth >> 1) | (div ? 0x8000000000000000ull : 0); - rem = (div ? poly : 0) ^ (rem >> 1); - } - c->k5 = rem; - c->poly = poly; - c->k7 = quotienth; - c->k8 = poly << 1; + uint64_t quotienth = 0; + uint64_t div; + uint64_t rem = 1ull; + int i; + + for (i = 0; i < 64; i++) { + div = (rem & 1ull) != 0; + quotienth = (quotienth >> 1) | (div ? 0x8000000000000000ull : 0); + rem = (div ? poly : 0) ^ (rem >> 1); + } + c->k5 = rem; + c->poly = poly; + c->k7 = quotienth; + c->k8 = poly << 1; } -void gen_crc64_norm_consts(uint64_t poly, struct crc64_desc *c) +void +gen_crc64_norm_consts(uint64_t poly, struct crc64_desc *c) { - uint64_t quotientl = 0; - uint64_t div; - uint64_t rem = 1ull << 63; - int i; - - for (i = 0; i < 65; i++) { - div = (rem & 0x8000000000000000ull) != 0; - quotientl = (quotientl << 1) | div; - rem = (div ? poly : 0) ^ (rem << 1); - } - - c->poly = poly; - c->k5 = rem; - c->k7 = quotientl; - c->k8 = poly; + uint64_t quotientl = 0; + uint64_t div; + uint64_t rem = 1ull << 63; + int i; + + for (i = 0; i < 65; i++) { + div = (rem & 0x8000000000000000ull) != 0; + quotientl = (quotientl << 1) | div; + rem = (div ? poly : 0) ^ (rem << 1); + } + + c->poly = poly; + c->k5 = rem; + c->k7 = quotientl; + c->k8 = poly; } -uint32_t calc_xi_mod(int n) +uint32_t +calc_xi_mod(int n) { - uint32_t rem = 0x1ul; - int i, j; + uint32_t rem = 0x1ul; + int i, j; - const uint32_t poly = 0x82f63b78; + const uint32_t poly = 0x82f63b78; - if (n < 16) - return 0; + if (n < 16) + return 0; - for (i = 0; i < n - 8; i++) - for (j = 0; j < 8; j++) - rem = (rem & 0x1ul) ? (rem >> 1) ^ poly : (rem >> 1); + for (i = 0; i < n - 8; i++) + for (j = 0; j < 8; j++) + rem = (rem & 0x1ul) ? (rem >> 1) ^ poly : (rem >> 1); - return rem; + return rem; } -uint64_t calc64_refl_xi_mod(int n, struct crc64_desc *c) +uint64_t +calc64_refl_xi_mod(int n, struct crc64_desc *c) { - uint64_t rem = 1ull; - int i, j; + uint64_t rem = 1ull; + int i, j; - const uint64_t poly = c->poly; + const uint64_t poly = c->poly; - if (n < 32) - return 0; + if (n < 32) + return 0; - for (i = 0; i < n - 16; i++) - for (j = 0; j < 8; j++) - rem = (rem & 0x1ull) ? (rem >> 1) ^ poly : (rem >> 1); + for (i = 0; i < n - 16; i++) + for (j = 0; j < 8; j++) + rem = (rem & 0x1ull) ? (rem >> 1) ^ poly : (rem >> 1); - return rem; + return rem; } -uint64_t calc64_norm_xi_mod(int n, struct crc64_desc *c) +uint64_t +calc64_norm_xi_mod(int n, struct crc64_desc *c) { - uint64_t rem = 1ull; - int i, j; + uint64_t rem = 1ull; + int i, j; - const uint64_t poly = c->poly; + const uint64_t poly = c->poly; - if (n < 32) - return 0; + if (n < 32) + return 0; - for (i = 0; i < n - 8; i++) - for (j = 0; j < 8; j++) - rem = (rem & 0x8000000000000000ull ? poly : 0) ^ (rem << 1); + for (i = 0; i < n - 8; i++) + for (j = 0; j < 8; j++) + rem = (rem & 0x8000000000000000ull ? poly : 0) ^ (rem << 1); - return rem; + return rem; } // Base function for crc32_iscsi_shiftx() if c++ multi-function versioning #ifdef __cplusplus -static inline uint32_t bit_reverse32(uint32_t x) +static inline uint32_t +bit_reverse32(uint32_t x) { - x = (((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1)); - x = (((x & 0xcccccccc) >> 2) | ((x & 0x33333333) << 2)); - x = (((x & 0xf0f0f0f0) >> 4) | ((x & 0x0f0f0f0f) << 4)); - x = (((x & 0xff00ff00) >> 8) | ((x & 0x00ff00ff) << 8)); - return ((x >> 16) | (x << 16)); + x = (((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1)); + x = (((x & 0xcccccccc) >> 2) | ((x & 0x33333333) << 2)); + x = (((x & 0xf0f0f0f0) >> 4) | ((x & 0x0f0f0f0f) << 4)); + x = (((x & 0xff00ff00) >> 8) | ((x & 0x00ff00ff) << 8)); + return ((x >> 16) | (x << 16)); } // Base function for crc32_iscsi_shiftx without clmul optimizations ATTRIBUTE_TARGET("default") -uint32_t crc32_iscsi_shiftx(uint32_t crc1, uint32_t x) +uint32_t +crc32_iscsi_shiftx(uint32_t crc1, uint32_t x) { - int i; - uint64_t xrev, q = 0; - union { - uint8_t a[8]; - uint64_t q; - } qu; + int i; + uint64_t xrev, q = 0; + union { + uint8_t a[8]; + uint64_t q; + } qu; - xrev = bit_reverse32(x); - xrev <<= 32; + xrev = bit_reverse32(x); + xrev <<= 32; - for (i = 0; i < 64; i++, xrev >>= 1) - q = (q << 1) | __builtin_parity(crc1 & xrev); + for (i = 0; i < 64; i++, xrev >>= 1) + q = (q << 1) | __builtin_parity(crc1 & xrev); - qu.q = q; - return crc32_iscsi(qu.a, 8, 0); + qu.q = q; + return crc32_iscsi(qu.a, 8, 0); } #endif // cplusplus ATTRIBUTE_TARGET("pclmul,sse4.2") -uint32_t crc32_iscsi_shiftx(uint32_t crc1, uint32_t x) +uint32_t +crc32_iscsi_shiftx(uint32_t crc1, uint32_t x) { - __m128i crc1x, constx; - uint64_t crc64; - - crc1x = _mm_setr_epi32(crc1, 0, 0, 0); - constx = _mm_setr_epi32(x, 0, 0, 0); - crc1x = _mm_clmulepi64_si128(crc1x, constx, 0); - crc64 = _mm_cvtsi128_si64(crc1x); - crc64 = _mm_crc32_u64(0, crc64); - return crc64 & 0xffffffff; + __m128i crc1x, constx; + uint64_t crc64; + + crc1x = _mm_setr_epi32(crc1, 0, 0, 0); + constx = _mm_setr_epi32(x, 0, 0, 0); + crc1x = _mm_clmulepi64_si128(crc1x, constx, 0); + crc64 = _mm_cvtsi128_si64(crc1x); + crc64 = _mm_crc32_u64(0, crc64); + return crc64 & 0xffffffff; } ATTRIBUTE_TARGET("pclmul,sse4.2") -uint64_t crc64_refl_shiftx(uint64_t crc1, uint64_t x, struct crc64_desc *c) +uint64_t +crc64_refl_shiftx(uint64_t crc1, uint64_t x, struct crc64_desc *c) { - __m128i crc1x, crc2x, crc3x, constx; - const __m128i rk5 = _mm_loadu_si64(&c->k5); - const __m128i rk7 = _mm_loadu_si128((__m128i *) & c->k7); - - crc1x = _mm_cvtsi64_si128(crc1); - constx = _mm_cvtsi64_si128(x); - crc1x = _mm_clmulepi64_si128(crc1x, constx, 0x00); - - // Fold to 64b - crc2x = _mm_clmulepi64_si128(crc1x, rk5, 0x00); - crc3x = _mm_bsrli_si128(crc1x, 8); - crc1x = _mm_xor_si128(crc2x, crc3x); - - // Reduce - crc2x = _mm_clmulepi64_si128(crc1x, rk7, 0x00); - crc3x = _mm_clmulepi64_si128(crc2x, rk7, 0x10); - crc2x = _mm_bslli_si128(crc2x, 8); - crc1x = _mm_xor_si128(crc1x, crc2x); - crc1x = _mm_xor_si128(crc1x, crc3x); - return _mm_extract_epi64(crc1x, 1); + __m128i crc1x, crc2x, crc3x, constx; + const __m128i rk5 = _mm_loadu_si64(&c->k5); + const __m128i rk7 = _mm_loadu_si128((__m128i *) &c->k7); + + crc1x = _mm_cvtsi64_si128(crc1); + constx = _mm_cvtsi64_si128(x); + crc1x = _mm_clmulepi64_si128(crc1x, constx, 0x00); + + // Fold to 64b + crc2x = _mm_clmulepi64_si128(crc1x, rk5, 0x00); + crc3x = _mm_bsrli_si128(crc1x, 8); + crc1x = _mm_xor_si128(crc2x, crc3x); + + // Reduce + crc2x = _mm_clmulepi64_si128(crc1x, rk7, 0x00); + crc3x = _mm_clmulepi64_si128(crc2x, rk7, 0x10); + crc2x = _mm_bslli_si128(crc2x, 8); + crc1x = _mm_xor_si128(crc1x, crc2x); + crc1x = _mm_xor_si128(crc1x, crc3x); + return _mm_extract_epi64(crc1x, 1); } ATTRIBUTE_TARGET("pclmul,sse4.2") -uint64_t crc64_norm_shiftx(uint64_t crc1, uint64_t x, struct crc64_desc *c) +uint64_t +crc64_norm_shiftx(uint64_t crc1, uint64_t x, struct crc64_desc *c) { - __m128i crc1x, crc2x, crc3x, constx; - const __m128i rk5 = _mm_loadu_si64(&c->k5); - const __m128i rk7 = _mm_loadu_si128((__m128i *) & c->k7); - - crc1x = _mm_cvtsi64_si128(crc1); - constx = _mm_cvtsi64_si128(x); - crc1x = _mm_clmulepi64_si128(crc1x, constx, 0x00); - - // Fold to 64b - crc2x = _mm_clmulepi64_si128(crc1x, rk5, 0x01); - crc3x = _mm_bslli_si128(crc1x, 8); - crc1x = _mm_xor_si128(crc2x, crc3x); - - // Reduce - crc2x = _mm_clmulepi64_si128(crc1x, rk7, 0x01); - crc2x = _mm_xor_si128(crc1x, crc2x); - crc3x = _mm_clmulepi64_si128(crc2x, rk7, 0x11); - crc1x = _mm_xor_si128(crc1x, crc3x); - return _mm_extract_epi64(crc1x, 0); + __m128i crc1x, crc2x, crc3x, constx; + const __m128i rk5 = _mm_loadu_si64(&c->k5); + const __m128i rk7 = _mm_loadu_si128((__m128i *) &c->k7); + + crc1x = _mm_cvtsi64_si128(crc1); + constx = _mm_cvtsi64_si128(x); + crc1x = _mm_clmulepi64_si128(crc1x, constx, 0x00); + + // Fold to 64b + crc2x = _mm_clmulepi64_si128(crc1x, rk5, 0x01); + crc3x = _mm_bslli_si128(crc1x, 8); + crc1x = _mm_xor_si128(crc2x, crc3x); + + // Reduce + crc2x = _mm_clmulepi64_si128(crc1x, rk7, 0x01); + crc2x = _mm_xor_si128(crc1x, crc2x); + crc3x = _mm_clmulepi64_si128(crc2x, rk7, 0x11); + crc1x = _mm_xor_si128(crc1x, crc3x); + return _mm_extract_epi64(crc1x, 0); } -uint32_t crc32_iscsi_combine_4k(uint32_t * crc_array, int n) +uint32_t +crc32_iscsi_combine_4k(uint32_t *crc_array, int n) { - const uint32_t cn4k = 0x82f89c77; //calc_xi_mod(4*1024); - int i; + const uint32_t cn4k = 0x82f89c77; // calc_xi_mod(4*1024); + int i; - if (n < 1) - return 0; + if (n < 1) + return 0; - uint32_t crc = crc_array[0]; + uint32_t crc = crc_array[0]; - for (i = 1; i < n; i++) - crc = crc32_iscsi_shiftx(crc, cn4k) ^ crc_array[i]; + for (i = 1; i < n; i++) + crc = crc32_iscsi_shiftx(crc, cn4k) ^ crc_array[i]; - return crc; + return crc; } // Tests -#define printv(...) {if (verbose) printf(__VA_ARGS__); else printf(".");} - -uint64_t test_combine64(uint8_t * inp, size_t len, uint64_t poly, int reflected, - uint64_t(*func) (uint64_t, const uint8_t *, uint64_t)) +#define printv(...) \ + { \ + if (verbose) \ + printf(__VA_ARGS__); \ + else \ + printf("."); \ + } + +uint64_t +test_combine64(uint8_t *inp, size_t len, uint64_t poly, int reflected, + uint64_t (*func)(uint64_t, const uint8_t *, uint64_t)) { - uint64_t crc64_init, crc64, crc64a, crc64b; - uint64_t crc64_1, crc64_2, crc64_3, crc64_n, err = 0; - uint64_t xi_mod; - struct crc64_desc crc64_c; - size_t l1, l2, l3; - - l1 = len / 2; - l2 = len - l1; - - crc64_init = rand(); - crc64 = func(crc64_init, inp, len); - printv("\ncrc64 all = 0x%" PRIx64 "\n", crc64); - - // Do a sequential crc update - crc64a = func(crc64_init, &inp[0], l1); - crc64b = func(crc64a, &inp[l1], l2); - printv("crc64 seq = 0x%" PRIx64 "\n", crc64b); - - // Split into 2 independent crc calc and combine - crc64_1 = func(crc64_init, &inp[0], l1); - crc64_2 = func(0, &inp[l1], l2); - - if (reflected) { - gen_crc64_refl_consts(poly, &crc64_c); - xi_mod = calc64_refl_xi_mod(l1, &crc64_c); - crc64_1 = crc64_refl_shiftx(crc64_1, xi_mod, &crc64_c); - } else { - gen_crc64_norm_consts(poly, &crc64_c); - xi_mod = calc64_norm_xi_mod(l1, &crc64_c); - crc64_1 = crc64_norm_shiftx(crc64_1, xi_mod, &crc64_c); - } - crc64_n = crc64_1 ^ crc64_2; - - printv("crc64 combined2 = 0x%" PRIx64 "\n", crc64_n); - err |= crc64_n ^ crc64; - if (err) - return err; - - // Split into 3 uneven segments and combine - l1 = len / 3; - l2 = (len / 3) - 3; - l3 = len - l2 - l1; - crc64_1 = func(crc64_init, &inp[0], l1); - crc64_2 = func(0, &inp[l1], l2); - crc64_3 = func(0, &inp[l1 + l2], l3); - if (reflected) { - xi_mod = calc64_refl_xi_mod(l3, &crc64_c); - crc64_2 = crc64_refl_shiftx(crc64_2, xi_mod, &crc64_c); - xi_mod = calc64_refl_xi_mod(len - l1, &crc64_c); - crc64_1 = crc64_refl_shiftx(crc64_1, xi_mod, &crc64_c); - } else { - xi_mod = calc64_norm_xi_mod(l3, &crc64_c); - crc64_2 = crc64_norm_shiftx(crc64_2, xi_mod, &crc64_c); - xi_mod = calc64_norm_xi_mod(len - l1, &crc64_c); - crc64_1 = crc64_norm_shiftx(crc64_1, xi_mod, &crc64_c); - } - crc64_n = crc64_1 ^ crc64_2 ^ crc64_3; - - printv("crc64 combined3 = 0x%" PRIx64 "\n", crc64_n); - err |= crc64_n ^ crc64; - - return err; + uint64_t crc64_init, crc64, crc64a, crc64b; + uint64_t crc64_1, crc64_2, crc64_3, crc64_n, err = 0; + uint64_t xi_mod; + struct crc64_desc crc64_c; + size_t l1, l2, l3; + + l1 = len / 2; + l2 = len - l1; + + crc64_init = rand(); + crc64 = func(crc64_init, inp, len); + printv("\ncrc64 all = 0x%" PRIx64 "\n", crc64); + + // Do a sequential crc update + crc64a = func(crc64_init, &inp[0], l1); + crc64b = func(crc64a, &inp[l1], l2); + printv("crc64 seq = 0x%" PRIx64 "\n", crc64b); + + // Split into 2 independent crc calc and combine + crc64_1 = func(crc64_init, &inp[0], l1); + crc64_2 = func(0, &inp[l1], l2); + + if (reflected) { + gen_crc64_refl_consts(poly, &crc64_c); + xi_mod = calc64_refl_xi_mod(l1, &crc64_c); + crc64_1 = crc64_refl_shiftx(crc64_1, xi_mod, &crc64_c); + } else { + gen_crc64_norm_consts(poly, &crc64_c); + xi_mod = calc64_norm_xi_mod(l1, &crc64_c); + crc64_1 = crc64_norm_shiftx(crc64_1, xi_mod, &crc64_c); + } + crc64_n = crc64_1 ^ crc64_2; + + printv("crc64 combined2 = 0x%" PRIx64 "\n", crc64_n); + err |= crc64_n ^ crc64; + if (err) + return err; + + // Split into 3 uneven segments and combine + l1 = len / 3; + l2 = (len / 3) - 3; + l3 = len - l2 - l1; + crc64_1 = func(crc64_init, &inp[0], l1); + crc64_2 = func(0, &inp[l1], l2); + crc64_3 = func(0, &inp[l1 + l2], l3); + if (reflected) { + xi_mod = calc64_refl_xi_mod(l3, &crc64_c); + crc64_2 = crc64_refl_shiftx(crc64_2, xi_mod, &crc64_c); + xi_mod = calc64_refl_xi_mod(len - l1, &crc64_c); + crc64_1 = crc64_refl_shiftx(crc64_1, xi_mod, &crc64_c); + } else { + xi_mod = calc64_norm_xi_mod(l3, &crc64_c); + crc64_2 = crc64_norm_shiftx(crc64_2, xi_mod, &crc64_c); + xi_mod = calc64_norm_xi_mod(len - l1, &crc64_c); + crc64_1 = crc64_norm_shiftx(crc64_1, xi_mod, &crc64_c); + } + crc64_n = crc64_1 ^ crc64_2 ^ crc64_3; + + printv("crc64 combined3 = 0x%" PRIx64 "\n", crc64_n); + err |= crc64_n ^ crc64; + + return err; } -#define N (1024) -#define B (2*N) -#define T (3*N) -#define N4k (4*1024) -#define NMAX 32 +#define N (1024) +#define B (2 * N) +#define T (3 * N) +#define N4k (4 * 1024) +#define NMAX 32 #define NMAX_SIZE (NMAX * N4k) -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - int i; - uint32_t crc, crca, crcb, crc1, crc2, crc3, crcn; - uint32_t crc_init = rand(); - uint32_t err = 0; - uint8_t *inp = (uint8_t *) malloc(NMAX_SIZE); - verbose = argc - 1; - - if (NULL == inp) - return -1; - - for (int i = 0; i < NMAX_SIZE; i++) - inp[i] = rand(); - - printf("crc_combine_test:"); - - // Calc crc all at once - crc = crc32_iscsi(inp, B, crc_init); - printv("\ncrcB all = 0x%" PRIx32 "\n", crc); - - // Do a sequential crc update - crca = crc32_iscsi(&inp[0], N, crc_init); - crcb = crc32_iscsi(&inp[N], N, crca); - printv("crcB seq = 0x%" PRIx32 "\n", crcb); - - // Split into 2 independent crc calc and combine - crc1 = crc32_iscsi(&inp[0], N, crc_init); - crc2 = crc32_iscsi(&inp[N], N, 0); - crcn = crc32_iscsi_shiftx(crc1, calc_xi_mod(N)) ^ crc2; - printv("crcB combined2 = 0x%" PRIx32 "\n", crcn); - err |= crcn ^ crc; - - // Split into 3 uneven segments and combine - crc1 = crc32_iscsi(&inp[0], 100, crc_init); - crc2 = crc32_iscsi(&inp[100], 100, 0); - crc3 = crc32_iscsi(&inp[200], B - 200, 0); - crcn = crc3 ^ - crc32_iscsi_shiftx(crc2, calc_xi_mod(B - 200)) ^ - crc32_iscsi_shiftx(crc1, calc_xi_mod(B - 100)); - printv("crcB combined3 = 0x%" PRIx32 "\n\n", crcn); - err |= crcn ^ crc; - - // Call all size T at once - crc = crc32_iscsi(inp, T, crc_init); - printv("crcT all = 0x%" PRIx32 "\n", crc); - - // Split into 3 segments and combine with 2 consts - crc1 = crc32_iscsi(&inp[0], N, crc_init); - crc2 = crc32_iscsi(&inp[N], N, 0); - crc3 = crc32_iscsi(&inp[2 * N], N, 0); - crcn = crc3 ^ - crc32_iscsi_shiftx(crc2, calc_xi_mod(N)) ^ - crc32_iscsi_shiftx(crc1, calc_xi_mod(2 * N)); - printv("crcT combined3 = 0x%" PRIx32 "\n", crcn); - err |= crcn ^ crc; - - // Combine 3 segments with one const by sequential shift - uint32_t xi_mod_n = calc_xi_mod(N); - crcn = crc3 ^ crc32_iscsi_shiftx(crc32_iscsi_shiftx(crc1, xi_mod_n) - ^ crc2, xi_mod_n); - printv("crcT comb3 seq = 0x%" PRIx32 "\n\n", crcn); - err |= crcn ^ crc; - - // Test 4k array function - crc = crc32_iscsi(inp, NMAX_SIZE, crc_init); - printv("crc 4k x n all = 0x%" PRIx32 "\n", crc); - - // Test crc 4k array combine function - uint32_t crcs[NMAX]; - crcs[0] = crc32_iscsi(&inp[0], N4k, crc_init); - for (i = 1; i < NMAX; i++) - crcs[i] = crc32_iscsi(&inp[i * N4k], N4k, 0); - - crcn = crc32_iscsi_combine_4k(crcs, NMAX); - printv("crc4k_array = 0x%" PRIx32 "\n", crcn); - err |= crcn ^ crc; - - // CRC64 generic poly tests - reflected - uint64_t len = NMAX_SIZE; - err |= test_combine64(inp, len, 0xc96c5795d7870f42ull, 1, crc64_ecma_refl); - err |= test_combine64(inp, len, 0xd800000000000000ull, 1, crc64_iso_refl); - err |= test_combine64(inp, len, 0x95ac9329ac4bc9b5ull, 1, crc64_jones_refl); - - // CRC64 non-reflected polynomial tests - err |= test_combine64(inp, len, 0x42f0e1eba9ea3693ull, 0, crc64_ecma_norm); - err |= test_combine64(inp, len, 0x000000000000001bull, 0, crc64_iso_norm); - err |= test_combine64(inp, len, 0xad93d23594c935a9ull, 0, crc64_jones_norm); - - printf(err == 0 ? "pass\n" : "fail\n"); - free(inp); - return err; + int i; + uint32_t crc, crca, crcb, crc1, crc2, crc3, crcn; + uint32_t crc_init = rand(); + uint32_t err = 0; + uint8_t *inp = (uint8_t *) malloc(NMAX_SIZE); + verbose = argc - 1; + + if (NULL == inp) + return -1; + + for (int i = 0; i < NMAX_SIZE; i++) + inp[i] = rand(); + + printf("crc_combine_test:"); + + // Calc crc all at once + crc = crc32_iscsi(inp, B, crc_init); + printv("\ncrcB all = 0x%" PRIx32 "\n", crc); + + // Do a sequential crc update + crca = crc32_iscsi(&inp[0], N, crc_init); + crcb = crc32_iscsi(&inp[N], N, crca); + printv("crcB seq = 0x%" PRIx32 "\n", crcb); + + // Split into 2 independent crc calc and combine + crc1 = crc32_iscsi(&inp[0], N, crc_init); + crc2 = crc32_iscsi(&inp[N], N, 0); + crcn = crc32_iscsi_shiftx(crc1, calc_xi_mod(N)) ^ crc2; + printv("crcB combined2 = 0x%" PRIx32 "\n", crcn); + err |= crcn ^ crc; + + // Split into 3 uneven segments and combine + crc1 = crc32_iscsi(&inp[0], 100, crc_init); + crc2 = crc32_iscsi(&inp[100], 100, 0); + crc3 = crc32_iscsi(&inp[200], B - 200, 0); + crcn = crc3 ^ crc32_iscsi_shiftx(crc2, calc_xi_mod(B - 200)) ^ + crc32_iscsi_shiftx(crc1, calc_xi_mod(B - 100)); + printv("crcB combined3 = 0x%" PRIx32 "\n\n", crcn); + err |= crcn ^ crc; + + // Call all size T at once + crc = crc32_iscsi(inp, T, crc_init); + printv("crcT all = 0x%" PRIx32 "\n", crc); + + // Split into 3 segments and combine with 2 consts + crc1 = crc32_iscsi(&inp[0], N, crc_init); + crc2 = crc32_iscsi(&inp[N], N, 0); + crc3 = crc32_iscsi(&inp[2 * N], N, 0); + crcn = crc3 ^ crc32_iscsi_shiftx(crc2, calc_xi_mod(N)) ^ + crc32_iscsi_shiftx(crc1, calc_xi_mod(2 * N)); + printv("crcT combined3 = 0x%" PRIx32 "\n", crcn); + err |= crcn ^ crc; + + // Combine 3 segments with one const by sequential shift + uint32_t xi_mod_n = calc_xi_mod(N); + crcn = crc3 ^ crc32_iscsi_shiftx(crc32_iscsi_shiftx(crc1, xi_mod_n) ^ crc2, xi_mod_n); + printv("crcT comb3 seq = 0x%" PRIx32 "\n\n", crcn); + err |= crcn ^ crc; + + // Test 4k array function + crc = crc32_iscsi(inp, NMAX_SIZE, crc_init); + printv("crc 4k x n all = 0x%" PRIx32 "\n", crc); + + // Test crc 4k array combine function + uint32_t crcs[NMAX]; + crcs[0] = crc32_iscsi(&inp[0], N4k, crc_init); + for (i = 1; i < NMAX; i++) + crcs[i] = crc32_iscsi(&inp[i * N4k], N4k, 0); + + crcn = crc32_iscsi_combine_4k(crcs, NMAX); + printv("crc4k_array = 0x%" PRIx32 "\n", crcn); + err |= crcn ^ crc; + + // CRC64 generic poly tests - reflected + uint64_t len = NMAX_SIZE; + err |= test_combine64(inp, len, 0xc96c5795d7870f42ull, 1, crc64_ecma_refl); + err |= test_combine64(inp, len, 0xd800000000000000ull, 1, crc64_iso_refl); + err |= test_combine64(inp, len, 0x95ac9329ac4bc9b5ull, 1, crc64_jones_refl); + + // CRC64 non-reflected polynomial tests + err |= test_combine64(inp, len, 0x42f0e1eba9ea3693ull, 0, crc64_ecma_norm); + err |= test_combine64(inp, len, 0x000000000000001bull, 0, crc64_iso_norm); + err |= test_combine64(inp, len, 0xad93d23594c935a9ull, 0, crc64_jones_norm); + + printf(err == 0 ? "pass\n" : "fail\n"); + free(inp); + return err; } diff --git a/examples/ec/ec_piggyback_example.c b/examples/ec/ec_piggyback_example.c index 6b9c11ba..9fb27ebb 100644 --- a/examples/ec/ec_piggyback_example.c +++ b/examples/ec/ec_piggyback_example.c @@ -31,7 +31,7 @@ #include #include #include -#include "erasure_code.h" // use instead when linking against installed +#include "erasure_code.h" // use instead when linking against installed #include "test.h" #define MMAX 255 @@ -40,467 +40,463 @@ typedef unsigned char u8; int verbose = 0; -int usage(void) +int +usage(void) { - fprintf(stderr, - "Usage: ec_piggyback_example [options]\n" - " -h Help\n" - " -k Number of source fragments\n" - " -p Number of parity fragments\n" - " -l Length of fragments\n" - " -e Simulate erasure on frag index val. Zero based. Can be repeated.\n" - " -v Verbose\n" - " -b Run timed benchmark\n" - " -s Toggle use of sparse matrix opt\n" - " -r Pick random (k, p) with seed\n"); - exit(0); + fprintf(stderr, + "Usage: ec_piggyback_example [options]\n" + " -h Help\n" + " -k Number of source fragments\n" + " -p Number of parity fragments\n" + " -l Length of fragments\n" + " -e Simulate erasure on frag index val. Zero based. Can be repeated.\n" + " -v Verbose\n" + " -b Run timed benchmark\n" + " -s Toggle use of sparse matrix opt\n" + " -r Pick random (k, p) with seed\n"); + exit(0); } // Cauchy-based matrix -void gf_gen_full_pb_cauchy_matrix(u8 * a, int m, int k) +void +gf_gen_full_pb_cauchy_matrix(u8 *a, int m, int k) { - int i, j, p = m - k; - - // Identity matrix in top k x k to indicate a symmetric code - memset(a, 0, k * m); - for (i = 0; i < k; i++) - a[k * i + i] = 1; - - for (i = k; i < (k + p / 2); i++) { - for (j = 0; j < k / 2; j++) - a[k * i + j] = gf_inv(i ^ j); - for (; j < k; j++) - a[k * i + j] = 0; - } - for (; i < m; i++) { - for (j = 0; j < k / 2; j++) - a[k * i + j] = 0; - for (; j < k; j++) - a[k * i + j] = gf_inv((i - p / 2) ^ (j - k / 2)); - } - - // Fill in mixture of B parity depending on a few localized A sources - int r = 0, c = 0; - int repeat_len = k / (p - 2); - int parity_rows = p / 2; - - for (i = 1 + k + parity_rows; i < m; i++, r++) { - if (r == (parity_rows - 1) - ((k / 2 % (parity_rows - 1)))) - repeat_len++; - - for (j = 0; j < repeat_len; j++, c++) - a[k * i + c] = gf_inv((k + 1) ^ c); - } + int i, j, p = m - k; + + // Identity matrix in top k x k to indicate a symmetric code + memset(a, 0, k * m); + for (i = 0; i < k; i++) + a[k * i + i] = 1; + + for (i = k; i < (k + p / 2); i++) { + for (j = 0; j < k / 2; j++) + a[k * i + j] = gf_inv(i ^ j); + for (; j < k; j++) + a[k * i + j] = 0; + } + for (; i < m; i++) { + for (j = 0; j < k / 2; j++) + a[k * i + j] = 0; + for (; j < k; j++) + a[k * i + j] = gf_inv((i - p / 2) ^ (j - k / 2)); + } + + // Fill in mixture of B parity depending on a few localized A sources + int r = 0, c = 0; + int repeat_len = k / (p - 2); + int parity_rows = p / 2; + + for (i = 1 + k + parity_rows; i < m; i++, r++) { + if (r == (parity_rows - 1) - ((k / 2 % (parity_rows - 1)))) + repeat_len++; + + for (j = 0; j < repeat_len; j++, c++) + a[k * i + c] = gf_inv((k + 1) ^ c); + } } // Vandermonde based matrix - not recommended due to limits when invertable -void gf_gen_full_pb_vand_matrix(u8 * a, int m, int k) +void +gf_gen_full_pb_vand_matrix(u8 *a, int m, int k) { - int i, j, p = m - k; - unsigned char q, gen = 1; - - // Identity matrix in top k x k to indicate a symmetric code - memset(a, 0, k * m); - for (i = 0; i < k; i++) - a[k * i + i] = 1; - - for (i = k; i < (k + (p / 2)); i++) { - q = 1; - for (j = 0; j < k / 2; j++) { - a[k * i + j] = q; - q = gf_mul(q, gen); - } - for (; j < k; j++) - a[k * i + j] = 0; - gen = gf_mul(gen, 2); - } - gen = 1; - for (; i < m; i++) { - q = 1; - for (j = 0; j < k / 2; j++) { - a[k * i + j] = 0; - } - for (; j < k; j++) { - a[k * i + j] = q; - q = gf_mul(q, gen); - } - gen = gf_mul(gen, 2); - } - - // Fill in mixture of B parity depending on a few localized A sources - int r = 0, c = 0; - int repeat_len = k / (p - 2); - int parity_rows = p / 2; - - for (i = 1 + k + parity_rows; i < m; i++, r++) { - if (r == (parity_rows - 1) - ((k / 2 % (parity_rows - 1)))) - repeat_len++; - - for (j = 0; j < repeat_len; j++) - a[k * i + c++] = 1; - } + int i, j, p = m - k; + unsigned char q, gen = 1; + + // Identity matrix in top k x k to indicate a symmetric code + memset(a, 0, k * m); + for (i = 0; i < k; i++) + a[k * i + i] = 1; + + for (i = k; i < (k + (p / 2)); i++) { + q = 1; + for (j = 0; j < k / 2; j++) { + a[k * i + j] = q; + q = gf_mul(q, gen); + } + for (; j < k; j++) + a[k * i + j] = 0; + gen = gf_mul(gen, 2); + } + gen = 1; + for (; i < m; i++) { + q = 1; + for (j = 0; j < k / 2; j++) { + a[k * i + j] = 0; + } + for (; j < k; j++) { + a[k * i + j] = q; + q = gf_mul(q, gen); + } + gen = gf_mul(gen, 2); + } + + // Fill in mixture of B parity depending on a few localized A sources + int r = 0, c = 0; + int repeat_len = k / (p - 2); + int parity_rows = p / 2; + + for (i = 1 + k + parity_rows; i < m; i++, r++) { + if (r == (parity_rows - 1) - ((k / 2 % (parity_rows - 1)))) + repeat_len++; + + for (j = 0; j < repeat_len; j++) + a[k * i + c++] = 1; + } } -void print_matrix(int m, int k, unsigned char *s, const char *msg) +void +print_matrix(int m, int k, unsigned char *s, const char *msg) { - int i, j; - - printf("%s:\n", msg); - for (i = 0; i < m; i++) { - printf("%3d- ", i); - for (j = 0; j < k; j++) { - printf(" %2x", 0xff & s[j + (i * k)]); - } - printf("\n"); - } - printf("\n"); + int i, j; + + printf("%s:\n", msg); + for (i = 0; i < m; i++) { + printf("%3d- ", i); + for (j = 0; j < k; j++) { + printf(" %2x", 0xff & s[j + (i * k)]); + } + printf("\n"); + } + printf("\n"); } -void print_list(int n, unsigned char *s, const char *msg) +void +print_list(int n, unsigned char *s, const char *msg) { - int i; - if (!verbose) - return; - - printf("%s: ", msg); - for (i = 0; i < n; i++) - printf(" %d", s[i]); - printf("\n"); + int i; + if (!verbose) + return; + + printf("%s: ", msg); + for (i = 0; i < n; i++) + printf(" %d", s[i]); + printf("\n"); } -static int gf_gen_decode_matrix(u8 * encode_matrix, - u8 * decode_matrix, - u8 * invert_matrix, - u8 * temp_matrix, - u8 * decode_index, - u8 * frag_err_list, int nerrs, int k, int m); +static int +gf_gen_decode_matrix(u8 *encode_matrix, u8 *decode_matrix, u8 *invert_matrix, u8 *temp_matrix, + u8 *decode_index, u8 *frag_err_list, int nerrs, int k, int m); -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - int i, j, m, c, e, ret; - int k = 10, p = 4, len = 8 * 1024; // Default params - int nerrs = 0; - int benchmark = 0; - int sparse_matrix_opt = 1; - - // Fragment buffer pointers - u8 *frag_ptrs[MMAX]; - u8 *parity_ptrs[KMAX]; - u8 *recover_srcs[KMAX]; - u8 *recover_outp[KMAX]; - u8 frag_err_list[MMAX]; - - // Coefficient matrices - u8 *encode_matrix, *decode_matrix; - u8 *invert_matrix, *temp_matrix; - u8 *g_tbls; - u8 decode_index[MMAX]; - - if (argc == 1) - for (i = 0; i < p; i++) - frag_err_list[nerrs++] = rand() % (k + p); - - while ((c = getopt(argc, argv, "k:p:l:e:r:hvbs")) != -1) { - switch (c) { - case 'k': - k = atoi(optarg); - break; - case 'p': - p = atoi(optarg); - break; - case 'l': - len = atoi(optarg); - if (len < 0) - usage(); - break; - case 'e': - e = atoi(optarg); - frag_err_list[nerrs++] = e; - break; - case 'r': - srand(atoi(optarg)); - k = (rand() % MMAX) / 4; - k = (k < 2) ? 2 : k; - p = (rand() % (MMAX - k)) / 4; - p = (p < 2) ? 2 : p; - for (i = 0; i < k && nerrs < p; i++) - if (rand() & 1) - frag_err_list[nerrs++] = i; - break; - case 'v': - verbose++; - break; - case 'b': - benchmark = 1; - break; - case 's': - sparse_matrix_opt = !sparse_matrix_opt; - break; - case 'h': - default: - usage(); - break; - } - } - m = k + p; - - // Check for valid parameters - if (m > (MMAX / 2) || k > (KMAX / 2) || m < 0 || p < 2 || k < 1) { - printf(" Input test parameter error m=%d, k=%d, p=%d, erasures=%d\n", - m, k, p, nerrs); - usage(); - } - if (nerrs > p) { - printf(" Number of erasures chosen exceeds power of code erasures=%d p=%d\n", - nerrs, p); - } - for (i = 0; i < nerrs; i++) { - if (frag_err_list[i] >= m) - printf(" fragment %d not in range\n", frag_err_list[i]); - } - - printf("ec_piggyback_example:\n"); - - /* - * One simple way to implement piggyback codes is to keep a 2x wide matrix - * that covers the how each parity is related to both A and B sources. This - * keeps it easy to generalize in parameters m,k and the resulting sparse - * matrix multiplication can be optimized by pre-removal of zero items. - */ - - int k2 = 2 * k; - int p2 = 2 * p; - int m2 = k2 + p2; - int nerrs2 = nerrs; - - encode_matrix = malloc(m2 * k2); - decode_matrix = malloc(m2 * k2); - invert_matrix = malloc(m2 * k2); - temp_matrix = malloc(m2 * k2); - g_tbls = malloc(k2 * p2 * 32); - - if (encode_matrix == NULL || decode_matrix == NULL - || invert_matrix == NULL || temp_matrix == NULL || g_tbls == NULL) { - printf("Test failure! Error with malloc\n"); - return -1; - } - // Allocate the src fragments - for (i = 0; i < k; i++) { - if (NULL == (frag_ptrs[i] = malloc(len))) { - printf("alloc error: Fail\n"); - return -1; - } - } - // Allocate the parity fragments - for (i = 0; i < p2; i++) { - if (NULL == (parity_ptrs[i] = malloc(len / 2))) { - printf("alloc error: Fail\n"); - return -1; - } - } - - // Allocate buffers for recovered data - for (i = 0; i < p2; i++) { - if (NULL == (recover_outp[i] = malloc(len / 2))) { - printf("alloc error: Fail\n"); - return -1; - } - } - - // Fill sources with random data - for (i = 0; i < k; i++) - for (j = 0; j < len; j++) - frag_ptrs[i][j] = rand(); - - printf(" encode (m,k,p)=(%d,%d,%d) len=%d\n", m, k, p, len); - - // Pick an encode matrix. - gf_gen_full_pb_cauchy_matrix(encode_matrix, m2, k2); - - if (verbose) - print_matrix(m2, k2, encode_matrix, "encode matrix"); - - // Initialize g_tbls from encode matrix - ec_init_tables(k2, p2, &encode_matrix[k2 * k2], g_tbls); - - // Fold A and B into single list of fragments - for (i = 0; i < k; i++) - frag_ptrs[i + k] = &frag_ptrs[i][len / 2]; - - if (!sparse_matrix_opt) { - // Standard encode using no assumptions on the encode matrix - - // Generate EC parity blocks from sources - ec_encode_data(len / 2, k2, p2, g_tbls, frag_ptrs, parity_ptrs); - - if (benchmark) { - struct perf start; - BENCHMARK(&start, BENCHMARK_TIME, - ec_encode_data(len / 2, k2, p2, g_tbls, frag_ptrs, - parity_ptrs)); - printf("ec_piggyback_encode_std: "); - perf_print(start, m2 * len / 2); - } - } else { - // Sparse matrix optimization - use fact that input matrix is sparse - - // Keep an encode matrix with some zero elements removed - u8 *encode_matrix_faster, *g_tbls_faster; - encode_matrix_faster = malloc(m * k); - g_tbls_faster = malloc(k * p * 32); - if (encode_matrix_faster == NULL || g_tbls_faster == NULL) { - printf("Test failure! Error with malloc\n"); - return -1; - } - - /* - * Pack with only the part that we know are non-zero. Alternatively - * we could search and keep track of non-zero elements but for - * simplicity we just skip the lower quadrant. - */ - for (i = k, j = k2; i < m; i++, j++) - memcpy(&encode_matrix_faster[k * i], &encode_matrix[k2 * j], k); - - if (verbose) { - print_matrix(p, k, &encode_matrix_faster[k * k], - "encode via sparse-opt"); - print_matrix(p2 / 2, k2, &encode_matrix[(k2 + p2 / 2) * k2], - "encode via sparse-opt"); - } - // Initialize g_tbls from encode matrix - ec_init_tables(k, p, &encode_matrix_faster[k * k], g_tbls_faster); - - // Generate EC parity blocks from sources - ec_encode_data(len / 2, k, p, g_tbls_faster, frag_ptrs, parity_ptrs); - ec_encode_data(len / 2, k2, p, &g_tbls[k2 * p * 32], frag_ptrs, - &parity_ptrs[p]); - - if (benchmark) { - struct perf start; - BENCHMARK(&start, BENCHMARK_TIME, - ec_encode_data(len / 2, k, p, g_tbls_faster, frag_ptrs, - parity_ptrs); - ec_encode_data(len / 2, k2, p, &g_tbls[k2 * p * 32], - frag_ptrs, &parity_ptrs[p])); - printf("ec_piggyback_encode_sparse: "); - perf_print(start, m2 * len / 2); - } - } - - if (nerrs <= 0) - return 0; - - printf(" recover %d fragments\n", nerrs); - - // Set frag pointers to correspond to parity - for (i = k2; i < m2; i++) - frag_ptrs[i] = parity_ptrs[i - k2]; - - print_list(nerrs2, frag_err_list, " frag err list"); - - // Find a decode matrix to regenerate all erasures from remaining frags - ret = gf_gen_decode_matrix(encode_matrix, decode_matrix, - invert_matrix, temp_matrix, decode_index, frag_err_list, - nerrs2, k2, m2); - - if (ret != 0) { - printf("Fail on generate decode matrix\n"); - return -1; - } - // Pack recovery array pointers as list of valid fragments - for (i = 0; i < k2; i++) - if (decode_index[i] < k2) - recover_srcs[i] = frag_ptrs[decode_index[i]]; - else - recover_srcs[i] = parity_ptrs[decode_index[i] - k2]; - - print_list(k2, decode_index, " decode index"); - - // Recover data - ec_init_tables(k2, nerrs2, decode_matrix, g_tbls); - ec_encode_data(len / 2, k2, nerrs2, g_tbls, recover_srcs, recover_outp); - - if (benchmark) { - struct perf start; - BENCHMARK(&start, BENCHMARK_TIME, - ec_encode_data(len / 2, k2, nerrs2, g_tbls, recover_srcs, - recover_outp)); - printf("ec_piggyback_decode: "); - perf_print(start, (k2 + nerrs2) * len / 2); - } - // Check that recovered buffers are the same as original - printf(" check recovery of block {"); - for (i = 0; i < nerrs2; i++) { - printf(" %d", frag_err_list[i]); - if (memcmp(recover_outp[i], frag_ptrs[frag_err_list[i]], len / 2)) { - printf(" Fail erasure recovery %d, frag %d\n", i, frag_err_list[i]); - return -1; - } - } - printf(" } done all: Pass\n"); - - return 0; + int i, j, m, c, e, ret; + int k = 10, p = 4, len = 8 * 1024; // Default params + int nerrs = 0; + int benchmark = 0; + int sparse_matrix_opt = 1; + + // Fragment buffer pointers + u8 *frag_ptrs[MMAX]; + u8 *parity_ptrs[KMAX]; + u8 *recover_srcs[KMAX]; + u8 *recover_outp[KMAX]; + u8 frag_err_list[MMAX]; + + // Coefficient matrices + u8 *encode_matrix, *decode_matrix; + u8 *invert_matrix, *temp_matrix; + u8 *g_tbls; + u8 decode_index[MMAX]; + + if (argc == 1) + for (i = 0; i < p; i++) + frag_err_list[nerrs++] = rand() % (k + p); + + while ((c = getopt(argc, argv, "k:p:l:e:r:hvbs")) != -1) { + switch (c) { + case 'k': + k = atoi(optarg); + break; + case 'p': + p = atoi(optarg); + break; + case 'l': + len = atoi(optarg); + if (len < 0) + usage(); + break; + case 'e': + e = atoi(optarg); + frag_err_list[nerrs++] = e; + break; + case 'r': + srand(atoi(optarg)); + k = (rand() % MMAX) / 4; + k = (k < 2) ? 2 : k; + p = (rand() % (MMAX - k)) / 4; + p = (p < 2) ? 2 : p; + for (i = 0; i < k && nerrs < p; i++) + if (rand() & 1) + frag_err_list[nerrs++] = i; + break; + case 'v': + verbose++; + break; + case 'b': + benchmark = 1; + break; + case 's': + sparse_matrix_opt = !sparse_matrix_opt; + break; + case 'h': + default: + usage(); + break; + } + } + m = k + p; + + // Check for valid parameters + if (m > (MMAX / 2) || k > (KMAX / 2) || m < 0 || p < 2 || k < 1) { + printf(" Input test parameter error m=%d, k=%d, p=%d, erasures=%d\n", m, k, p, + nerrs); + usage(); + } + if (nerrs > p) { + printf(" Number of erasures chosen exceeds power of code erasures=%d p=%d\n", nerrs, + p); + } + for (i = 0; i < nerrs; i++) { + if (frag_err_list[i] >= m) + printf(" fragment %d not in range\n", frag_err_list[i]); + } + + printf("ec_piggyback_example:\n"); + + /* + * One simple way to implement piggyback codes is to keep a 2x wide matrix + * that covers the how each parity is related to both A and B sources. This + * keeps it easy to generalize in parameters m,k and the resulting sparse + * matrix multiplication can be optimized by pre-removal of zero items. + */ + + int k2 = 2 * k; + int p2 = 2 * p; + int m2 = k2 + p2; + int nerrs2 = nerrs; + + encode_matrix = malloc(m2 * k2); + decode_matrix = malloc(m2 * k2); + invert_matrix = malloc(m2 * k2); + temp_matrix = malloc(m2 * k2); + g_tbls = malloc(k2 * p2 * 32); + + if (encode_matrix == NULL || decode_matrix == NULL || invert_matrix == NULL || + temp_matrix == NULL || g_tbls == NULL) { + printf("Test failure! Error with malloc\n"); + return -1; + } + // Allocate the src fragments + for (i = 0; i < k; i++) { + if (NULL == (frag_ptrs[i] = malloc(len))) { + printf("alloc error: Fail\n"); + return -1; + } + } + // Allocate the parity fragments + for (i = 0; i < p2; i++) { + if (NULL == (parity_ptrs[i] = malloc(len / 2))) { + printf("alloc error: Fail\n"); + return -1; + } + } + + // Allocate buffers for recovered data + for (i = 0; i < p2; i++) { + if (NULL == (recover_outp[i] = malloc(len / 2))) { + printf("alloc error: Fail\n"); + return -1; + } + } + + // Fill sources with random data + for (i = 0; i < k; i++) + for (j = 0; j < len; j++) + frag_ptrs[i][j] = rand(); + + printf(" encode (m,k,p)=(%d,%d,%d) len=%d\n", m, k, p, len); + + // Pick an encode matrix. + gf_gen_full_pb_cauchy_matrix(encode_matrix, m2, k2); + + if (verbose) + print_matrix(m2, k2, encode_matrix, "encode matrix"); + + // Initialize g_tbls from encode matrix + ec_init_tables(k2, p2, &encode_matrix[k2 * k2], g_tbls); + + // Fold A and B into single list of fragments + for (i = 0; i < k; i++) + frag_ptrs[i + k] = &frag_ptrs[i][len / 2]; + + if (!sparse_matrix_opt) { + // Standard encode using no assumptions on the encode matrix + + // Generate EC parity blocks from sources + ec_encode_data(len / 2, k2, p2, g_tbls, frag_ptrs, parity_ptrs); + + if (benchmark) { + struct perf start; + BENCHMARK(&start, BENCHMARK_TIME, + ec_encode_data(len / 2, k2, p2, g_tbls, frag_ptrs, parity_ptrs)); + printf("ec_piggyback_encode_std: "); + perf_print(start, m2 * len / 2); + } + } else { + // Sparse matrix optimization - use fact that input matrix is sparse + + // Keep an encode matrix with some zero elements removed + u8 *encode_matrix_faster, *g_tbls_faster; + encode_matrix_faster = malloc(m * k); + g_tbls_faster = malloc(k * p * 32); + if (encode_matrix_faster == NULL || g_tbls_faster == NULL) { + printf("Test failure! Error with malloc\n"); + return -1; + } + + /* + * Pack with only the part that we know are non-zero. Alternatively + * we could search and keep track of non-zero elements but for + * simplicity we just skip the lower quadrant. + */ + for (i = k, j = k2; i < m; i++, j++) + memcpy(&encode_matrix_faster[k * i], &encode_matrix[k2 * j], k); + + if (verbose) { + print_matrix(p, k, &encode_matrix_faster[k * k], "encode via sparse-opt"); + print_matrix(p2 / 2, k2, &encode_matrix[(k2 + p2 / 2) * k2], + "encode via sparse-opt"); + } + // Initialize g_tbls from encode matrix + ec_init_tables(k, p, &encode_matrix_faster[k * k], g_tbls_faster); + + // Generate EC parity blocks from sources + ec_encode_data(len / 2, k, p, g_tbls_faster, frag_ptrs, parity_ptrs); + ec_encode_data(len / 2, k2, p, &g_tbls[k2 * p * 32], frag_ptrs, &parity_ptrs[p]); + + if (benchmark) { + struct perf start; + BENCHMARK(&start, BENCHMARK_TIME, + ec_encode_data(len / 2, k, p, g_tbls_faster, frag_ptrs, + parity_ptrs); + ec_encode_data(len / 2, k2, p, &g_tbls[k2 * p * 32], frag_ptrs, + &parity_ptrs[p])); + printf("ec_piggyback_encode_sparse: "); + perf_print(start, m2 * len / 2); + } + } + + if (nerrs <= 0) + return 0; + + printf(" recover %d fragments\n", nerrs); + + // Set frag pointers to correspond to parity + for (i = k2; i < m2; i++) + frag_ptrs[i] = parity_ptrs[i - k2]; + + print_list(nerrs2, frag_err_list, " frag err list"); + + // Find a decode matrix to regenerate all erasures from remaining frags + ret = gf_gen_decode_matrix(encode_matrix, decode_matrix, invert_matrix, temp_matrix, + decode_index, frag_err_list, nerrs2, k2, m2); + + if (ret != 0) { + printf("Fail on generate decode matrix\n"); + return -1; + } + // Pack recovery array pointers as list of valid fragments + for (i = 0; i < k2; i++) + if (decode_index[i] < k2) + recover_srcs[i] = frag_ptrs[decode_index[i]]; + else + recover_srcs[i] = parity_ptrs[decode_index[i] - k2]; + + print_list(k2, decode_index, " decode index"); + + // Recover data + ec_init_tables(k2, nerrs2, decode_matrix, g_tbls); + ec_encode_data(len / 2, k2, nerrs2, g_tbls, recover_srcs, recover_outp); + + if (benchmark) { + struct perf start; + BENCHMARK(&start, BENCHMARK_TIME, + ec_encode_data(len / 2, k2, nerrs2, g_tbls, recover_srcs, recover_outp)); + printf("ec_piggyback_decode: "); + perf_print(start, (k2 + nerrs2) * len / 2); + } + // Check that recovered buffers are the same as original + printf(" check recovery of block {"); + for (i = 0; i < nerrs2; i++) { + printf(" %d", frag_err_list[i]); + if (memcmp(recover_outp[i], frag_ptrs[frag_err_list[i]], len / 2)) { + printf(" Fail erasure recovery %d, frag %d\n", i, frag_err_list[i]); + return -1; + } + } + printf(" } done all: Pass\n"); + + return 0; } // Generate decode matrix from encode matrix and erasure list -static int gf_gen_decode_matrix(u8 * encode_matrix, - u8 * decode_matrix, - u8 * invert_matrix, - u8 * temp_matrix, - u8 * decode_index, u8 * frag_err_list, int nerrs, int k, int m) +static int +gf_gen_decode_matrix(u8 *encode_matrix, u8 *decode_matrix, u8 *invert_matrix, u8 *temp_matrix, + u8 *decode_index, u8 *frag_err_list, int nerrs, int k, int m) { - int i, j, p, r; - int nsrcerrs = 0; - u8 s, *b = temp_matrix; - u8 frag_in_err[MMAX]; - - memset(frag_in_err, 0, sizeof(frag_in_err)); - - // Order the fragments in erasure for easier sorting - for (i = 0; i < nerrs; i++) { - if (frag_err_list[i] < k) - nsrcerrs++; - frag_in_err[frag_err_list[i]] = 1; - } - - // Construct b (matrix that encoded remaining frags) by removing erased rows - for (i = 0, r = 0; i < k; i++, r++) { - while (frag_in_err[r]) - r++; - for (j = 0; j < k; j++) - b[k * i + j] = encode_matrix[k * r + j]; - decode_index[i] = r; - } - if (verbose > 1) - print_matrix(k, k, b, "matrix to invert"); - - // Invert matrix to get recovery matrix - if (gf_invert_matrix(b, invert_matrix, k) < 0) - return -1; - - if (verbose > 2) - print_matrix(k, k, invert_matrix, "matrix inverted"); - - // Get decode matrix with only wanted recovery rows - for (i = 0; i < nsrcerrs; i++) { - for (j = 0; j < k; j++) { - decode_matrix[k * i + j] = invert_matrix[k * frag_err_list[i] + j]; - } - } - - // For non-src (parity) erasures need to multiply encode matrix * invert - for (p = nsrcerrs; p < nerrs; p++) { - for (i = 0; i < k; i++) { - s = 0; - for (j = 0; j < k; j++) - s ^= gf_mul(invert_matrix[j * k + i], - encode_matrix[k * frag_err_list[p] + j]); - - decode_matrix[k * p + i] = s; - } - } - if (verbose > 1) - print_matrix(nerrs, k, decode_matrix, "decode matrix"); - return 0; + int i, j, p, r; + int nsrcerrs = 0; + u8 s, *b = temp_matrix; + u8 frag_in_err[MMAX]; + + memset(frag_in_err, 0, sizeof(frag_in_err)); + + // Order the fragments in erasure for easier sorting + for (i = 0; i < nerrs; i++) { + if (frag_err_list[i] < k) + nsrcerrs++; + frag_in_err[frag_err_list[i]] = 1; + } + + // Construct b (matrix that encoded remaining frags) by removing erased rows + for (i = 0, r = 0; i < k; i++, r++) { + while (frag_in_err[r]) + r++; + for (j = 0; j < k; j++) + b[k * i + j] = encode_matrix[k * r + j]; + decode_index[i] = r; + } + if (verbose > 1) + print_matrix(k, k, b, "matrix to invert"); + + // Invert matrix to get recovery matrix + if (gf_invert_matrix(b, invert_matrix, k) < 0) + return -1; + + if (verbose > 2) + print_matrix(k, k, invert_matrix, "matrix inverted"); + + // Get decode matrix with only wanted recovery rows + for (i = 0; i < nsrcerrs; i++) { + for (j = 0; j < k; j++) { + decode_matrix[k * i + j] = invert_matrix[k * frag_err_list[i] + j]; + } + } + + // For non-src (parity) erasures need to multiply encode matrix * invert + for (p = nsrcerrs; p < nerrs; p++) { + for (i = 0; i < k; i++) { + s = 0; + for (j = 0; j < k; j++) + s ^= gf_mul(invert_matrix[j * k + i], + encode_matrix[k * frag_err_list[p] + j]); + + decode_matrix[k * p + i] = s; + } + } + if (verbose > 1) + print_matrix(nerrs, k, decode_matrix, "decode matrix"); + return 0; } diff --git a/examples/ec/ec_simple_example.c b/examples/ec/ec_simple_example.c index 82efa6b4..e93b3a30 100644 --- a/examples/ec/ec_simple_example.c +++ b/examples/ec/ec_simple_example.c @@ -31,187 +31,186 @@ #include #include #include -#include "erasure_code.h" // use instead when linking against installed +#include "erasure_code.h" // use instead when linking against installed #define MMAX 255 #define KMAX 255 typedef unsigned char u8; -int usage(void) +int +usage(void) { - fprintf(stderr, - "Usage: ec_simple_example [options]\n" - " -h Help\n" - " -k Number of source fragments\n" - " -p Number of parity fragments\n" - " -l Length of fragments\n" - " -e Simulate erasure on frag index val. Zero based. Can be repeated.\n" - " -r Pick random (k, p) with seed\n"); - exit(0); + fprintf(stderr, + "Usage: ec_simple_example [options]\n" + " -h Help\n" + " -k Number of source fragments\n" + " -p Number of parity fragments\n" + " -l Length of fragments\n" + " -e Simulate erasure on frag index val. Zero based. Can be repeated.\n" + " -r Pick random (k, p) with seed\n"); + exit(0); } -static int gf_gen_decode_matrix_simple(u8 * encode_matrix, - u8 * decode_matrix, - u8 * invert_matrix, - u8 * temp_matrix, - u8 * decode_index, - u8 * frag_err_list, int nerrs, int k, int m); +static int +gf_gen_decode_matrix_simple(u8 *encode_matrix, u8 *decode_matrix, u8 *invert_matrix, + u8 *temp_matrix, u8 *decode_index, u8 *frag_err_list, int nerrs, int k, + int m); -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - int i, j, m, c, e, ret; - int k = 10, p = 4, len = 8 * 1024; // Default params - int nerrs = 0; - - // Fragment buffer pointers - u8 *frag_ptrs[MMAX]; - u8 *recover_srcs[KMAX]; - u8 *recover_outp[KMAX]; - u8 frag_err_list[MMAX]; - - // Coefficient matrices - u8 *encode_matrix, *decode_matrix; - u8 *invert_matrix, *temp_matrix; - u8 *g_tbls; - u8 decode_index[MMAX]; - - if (argc == 1) - for (i = 0; i < p; i++) - frag_err_list[nerrs++] = rand() % (k + p); - - while ((c = getopt(argc, argv, "k:p:l:e:r:h")) != -1) { - switch (c) { - case 'k': - k = atoi(optarg); - break; - case 'p': - p = atoi(optarg); - break; - case 'l': - len = atoi(optarg); - if (len < 0) - usage(); - break; - case 'e': - e = atoi(optarg); - frag_err_list[nerrs++] = e; - break; - case 'r': - srand(atoi(optarg)); - k = (rand() % (MMAX - 1)) + 1; // Pick k {1 to MMAX - 1} - p = (rand() % (MMAX - k)) + 1; // Pick p {1 to MMAX - k} - - for (i = 0; i < k + p && nerrs < p; i++) - if (rand() & 1) - frag_err_list[nerrs++] = i; - break; - case 'h': - default: - usage(); - break; - } - } - m = k + p; - - // Check for valid parameters - if (m > MMAX || k > KMAX || m < 0 || p < 1 || k < 1) { - printf(" Input test parameter error m=%d, k=%d, p=%d, erasures=%d\n", - m, k, p, nerrs); - usage(); - } - if (nerrs > p) { - printf(" Number of erasures chosen exceeds power of code erasures=%d p=%d\n", - nerrs, p); - usage(); - } - for (i = 0; i < nerrs; i++) { - if (frag_err_list[i] >= m) { - printf(" fragment %d not in range\n", frag_err_list[i]); - usage(); - } - } - - printf("ec_simple_example:\n"); - - // Allocate coding matrices - encode_matrix = malloc(m * k); - decode_matrix = malloc(m * k); - invert_matrix = malloc(m * k); - temp_matrix = malloc(m * k); - g_tbls = malloc(k * p * 32); - - if (encode_matrix == NULL || decode_matrix == NULL - || invert_matrix == NULL || temp_matrix == NULL || g_tbls == NULL) { - printf("Test failure! Error with malloc\n"); - return -1; - } - // Allocate the src & parity buffers - for (i = 0; i < m; i++) { - if (NULL == (frag_ptrs[i] = malloc(len))) { - printf("alloc error: Fail\n"); - return -1; - } - } - - // Allocate buffers for recovered data - for (i = 0; i < p; i++) { - if (NULL == (recover_outp[i] = malloc(len))) { - printf("alloc error: Fail\n"); - return -1; - } - } - - // Fill sources with random data - for (i = 0; i < k; i++) - for (j = 0; j < len; j++) - frag_ptrs[i][j] = rand(); - - printf(" encode (m,k,p)=(%d,%d,%d) len=%d\n", m, k, p, len); - - // Pick an encode matrix. A Cauchy matrix is a good choice as even - // large k are always invertable keeping the recovery rule simple. - gf_gen_cauchy1_matrix(encode_matrix, m, k); - - // Initialize g_tbls from encode matrix - ec_init_tables(k, p, &encode_matrix[k * k], g_tbls); - - // Generate EC parity blocks from sources - ec_encode_data(len, k, p, g_tbls, frag_ptrs, &frag_ptrs[k]); - - if (nerrs <= 0) - return 0; - - printf(" recover %d fragments\n", nerrs); - - // Find a decode matrix to regenerate all erasures from remaining frags - ret = gf_gen_decode_matrix_simple(encode_matrix, decode_matrix, - invert_matrix, temp_matrix, decode_index, - frag_err_list, nerrs, k, m); - if (ret != 0) { - printf("Fail on generate decode matrix\n"); - return -1; - } - // Pack recovery array pointers as list of valid fragments - for (i = 0; i < k; i++) - recover_srcs[i] = frag_ptrs[decode_index[i]]; - - // Recover data - ec_init_tables(k, nerrs, decode_matrix, g_tbls); - ec_encode_data(len, k, nerrs, g_tbls, recover_srcs, recover_outp); - - // Check that recovered buffers are the same as original - printf(" check recovery of block {"); - for (i = 0; i < nerrs; i++) { - printf(" %d", frag_err_list[i]); - if (memcmp(recover_outp[i], frag_ptrs[frag_err_list[i]], len)) { - printf(" Fail erasure recovery %d, frag %d\n", i, frag_err_list[i]); - return -1; - } - } - - printf(" } done all: Pass\n"); - return 0; + int i, j, m, c, e, ret; + int k = 10, p = 4, len = 8 * 1024; // Default params + int nerrs = 0; + + // Fragment buffer pointers + u8 *frag_ptrs[MMAX]; + u8 *recover_srcs[KMAX]; + u8 *recover_outp[KMAX]; + u8 frag_err_list[MMAX]; + + // Coefficient matrices + u8 *encode_matrix, *decode_matrix; + u8 *invert_matrix, *temp_matrix; + u8 *g_tbls; + u8 decode_index[MMAX]; + + if (argc == 1) + for (i = 0; i < p; i++) + frag_err_list[nerrs++] = rand() % (k + p); + + while ((c = getopt(argc, argv, "k:p:l:e:r:h")) != -1) { + switch (c) { + case 'k': + k = atoi(optarg); + break; + case 'p': + p = atoi(optarg); + break; + case 'l': + len = atoi(optarg); + if (len < 0) + usage(); + break; + case 'e': + e = atoi(optarg); + frag_err_list[nerrs++] = e; + break; + case 'r': + srand(atoi(optarg)); + k = (rand() % (MMAX - 1)) + 1; // Pick k {1 to MMAX - 1} + p = (rand() % (MMAX - k)) + 1; // Pick p {1 to MMAX - k} + + for (i = 0; i < k + p && nerrs < p; i++) + if (rand() & 1) + frag_err_list[nerrs++] = i; + break; + case 'h': + default: + usage(); + break; + } + } + m = k + p; + + // Check for valid parameters + if (m > MMAX || k > KMAX || m < 0 || p < 1 || k < 1) { + printf(" Input test parameter error m=%d, k=%d, p=%d, erasures=%d\n", m, k, p, + nerrs); + usage(); + } + if (nerrs > p) { + printf(" Number of erasures chosen exceeds power of code erasures=%d p=%d\n", nerrs, + p); + usage(); + } + for (i = 0; i < nerrs; i++) { + if (frag_err_list[i] >= m) { + printf(" fragment %d not in range\n", frag_err_list[i]); + usage(); + } + } + + printf("ec_simple_example:\n"); + + // Allocate coding matrices + encode_matrix = malloc(m * k); + decode_matrix = malloc(m * k); + invert_matrix = malloc(m * k); + temp_matrix = malloc(m * k); + g_tbls = malloc(k * p * 32); + + if (encode_matrix == NULL || decode_matrix == NULL || invert_matrix == NULL || + temp_matrix == NULL || g_tbls == NULL) { + printf("Test failure! Error with malloc\n"); + return -1; + } + // Allocate the src & parity buffers + for (i = 0; i < m; i++) { + if (NULL == (frag_ptrs[i] = malloc(len))) { + printf("alloc error: Fail\n"); + return -1; + } + } + + // Allocate buffers for recovered data + for (i = 0; i < p; i++) { + if (NULL == (recover_outp[i] = malloc(len))) { + printf("alloc error: Fail\n"); + return -1; + } + } + + // Fill sources with random data + for (i = 0; i < k; i++) + for (j = 0; j < len; j++) + frag_ptrs[i][j] = rand(); + + printf(" encode (m,k,p)=(%d,%d,%d) len=%d\n", m, k, p, len); + + // Pick an encode matrix. A Cauchy matrix is a good choice as even + // large k are always invertable keeping the recovery rule simple. + gf_gen_cauchy1_matrix(encode_matrix, m, k); + + // Initialize g_tbls from encode matrix + ec_init_tables(k, p, &encode_matrix[k * k], g_tbls); + + // Generate EC parity blocks from sources + ec_encode_data(len, k, p, g_tbls, frag_ptrs, &frag_ptrs[k]); + + if (nerrs <= 0) + return 0; + + printf(" recover %d fragments\n", nerrs); + + // Find a decode matrix to regenerate all erasures from remaining frags + ret = gf_gen_decode_matrix_simple(encode_matrix, decode_matrix, invert_matrix, temp_matrix, + decode_index, frag_err_list, nerrs, k, m); + if (ret != 0) { + printf("Fail on generate decode matrix\n"); + return -1; + } + // Pack recovery array pointers as list of valid fragments + for (i = 0; i < k; i++) + recover_srcs[i] = frag_ptrs[decode_index[i]]; + + // Recover data + ec_init_tables(k, nerrs, decode_matrix, g_tbls); + ec_encode_data(len, k, nerrs, g_tbls, recover_srcs, recover_outp); + + // Check that recovered buffers are the same as original + printf(" check recovery of block {"); + for (i = 0; i < nerrs; i++) { + printf(" %d", frag_err_list[i]); + if (memcmp(recover_outp[i], frag_ptrs[frag_err_list[i]], len)) { + printf(" Fail erasure recovery %d, frag %d\n", i, frag_err_list[i]); + return -1; + } + } + + printf(" } done all: Pass\n"); + return 0; } /* @@ -219,59 +218,56 @@ int main(int argc, char *argv[]) * */ -static int gf_gen_decode_matrix_simple(u8 * encode_matrix, - u8 * decode_matrix, - u8 * invert_matrix, - u8 * temp_matrix, - u8 * decode_index, u8 * frag_err_list, int nerrs, int k, - int m) +static int +gf_gen_decode_matrix_simple(u8 *encode_matrix, u8 *decode_matrix, u8 *invert_matrix, + u8 *temp_matrix, u8 *decode_index, u8 *frag_err_list, int nerrs, int k, + int m) { - int i, j, p, r; - int nsrcerrs = 0; - u8 s, *b = temp_matrix; - u8 frag_in_err[MMAX]; - - memset(frag_in_err, 0, sizeof(frag_in_err)); - - // Order the fragments in erasure for easier sorting - for (i = 0; i < nerrs; i++) { - if (frag_err_list[i] < k) - nsrcerrs++; - frag_in_err[frag_err_list[i]] = 1; - } - - // Construct b (matrix that encoded remaining frags) by removing erased rows - for (i = 0, r = 0; i < k; i++, r++) { - while (frag_in_err[r]) - r++; - for (j = 0; j < k; j++) - b[k * i + j] = encode_matrix[k * r + j]; - decode_index[i] = r; - } - - // Invert matrix to get recovery matrix - if (gf_invert_matrix(b, invert_matrix, k) < 0) - return -1; - - // Get decode matrix with only wanted recovery rows - for (i = 0; i < nerrs; i++) { - if (frag_err_list[i] < k) // A src err - for (j = 0; j < k; j++) - decode_matrix[k * i + j] = - invert_matrix[k * frag_err_list[i] + j]; - } - - // For non-src (parity) erasures need to multiply encode matrix * invert - for (p = 0; p < nerrs; p++) { - if (frag_err_list[p] >= k) { // A parity err - for (i = 0; i < k; i++) { - s = 0; - for (j = 0; j < k; j++) - s ^= gf_mul(invert_matrix[j * k + i], - encode_matrix[k * frag_err_list[p] + j]); - decode_matrix[k * p + i] = s; - } - } - } - return 0; + int i, j, p, r; + int nsrcerrs = 0; + u8 s, *b = temp_matrix; + u8 frag_in_err[MMAX]; + + memset(frag_in_err, 0, sizeof(frag_in_err)); + + // Order the fragments in erasure for easier sorting + for (i = 0; i < nerrs; i++) { + if (frag_err_list[i] < k) + nsrcerrs++; + frag_in_err[frag_err_list[i]] = 1; + } + + // Construct b (matrix that encoded remaining frags) by removing erased rows + for (i = 0, r = 0; i < k; i++, r++) { + while (frag_in_err[r]) + r++; + for (j = 0; j < k; j++) + b[k * i + j] = encode_matrix[k * r + j]; + decode_index[i] = r; + } + + // Invert matrix to get recovery matrix + if (gf_invert_matrix(b, invert_matrix, k) < 0) + return -1; + + // Get decode matrix with only wanted recovery rows + for (i = 0; i < nerrs; i++) { + if (frag_err_list[i] < k) // A src err + for (j = 0; j < k; j++) + decode_matrix[k * i + j] = invert_matrix[k * frag_err_list[i] + j]; + } + + // For non-src (parity) erasures need to multiply encode matrix * invert + for (p = 0; p < nerrs; p++) { + if (frag_err_list[p] >= k) { // A parity err + for (i = 0; i < k; i++) { + s = 0; + for (j = 0; j < k; j++) + s ^= gf_mul(invert_matrix[j * k + i], + encode_matrix[k * frag_err_list[p] + j]); + decode_matrix[k * p + i] = s; + } + } + } + return 0; } From 55fbfabfc60f1002bc8133b730a59f6abd22cfce Mon Sep 17 00:00:00 2001 From: Marcel Cornu Date: Fri, 19 Apr 2024 17:09:21 +0100 Subject: [PATCH 05/19] igzip: reformat using new code style Signed-off-by: Marcel Cornu --- .../igzip_multibinary_aarch64_dispatcher.c | 202 +- igzip/adler32_base.c | 59 +- igzip/adler32_perf.c | 41 +- igzip/bitbuf2.h | 113 +- igzip/checksum32_funcs_test.c | 453 +- igzip/checksum_test_ref.h | 136 +- igzip/encode_df.c | 36 +- igzip/encode_df.h | 35 +- igzip/flatten_ll.c | 65 +- igzip/flatten_ll.h | 3 +- igzip/generate_custom_hufftables.c | 693 +- igzip/generate_static_inflate.c | 275 +- igzip/huff_codes.c | 2892 ++-- igzip/huff_codes.h | 162 +- igzip/huffman.h | 466 +- igzip/hufftables_c.c | 11946 +++++++--------- igzip/igzip.c | 3477 ++--- igzip/igzip_base.c | 394 +- igzip/igzip_base_aliases.c | 154 +- igzip/igzip_build_hash_table_perf.c | 43 +- igzip/igzip_checksums.h | 8 +- igzip/igzip_example.c | 99 +- igzip/igzip_file_perf.c | 534 +- igzip/igzip_hist_perf.c | 169 +- igzip/igzip_icf_base.c | 646 +- igzip/igzip_icf_body.c | 537 +- igzip/igzip_inflate.c | 4427 +++--- igzip/igzip_inflate_test.c | 514 +- igzip/igzip_level_buf_structs.h | 48 +- igzip/igzip_perf.c | 1517 +- igzip/igzip_rand_test.c | 5457 ++++--- igzip/igzip_semi_dyn_file_perf.c | 553 +- igzip/igzip_sync_flush_example.c | 79 +- igzip/igzip_wrapper.h | 24 +- igzip/igzip_wrapper_hdr_test.c | 1495 +- igzip/inflate_std_vects.h | 2402 ++-- igzip/proc_heap_base.c | 77 +- igzip/repeated_char_result.h | 19 +- igzip/static_inflate.h | 4887 +++---- 39 files changed, 21406 insertions(+), 23731 deletions(-) diff --git a/igzip/aarch64/igzip_multibinary_aarch64_dispatcher.c b/igzip/aarch64/igzip_multibinary_aarch64_dispatcher.c index 7b8a8811..cadec0c8 100644 --- a/igzip/aarch64/igzip_multibinary_aarch64_dispatcher.c +++ b/igzip/aarch64/igzip_multibinary_aarch64_dispatcher.c @@ -31,221 +31,215 @@ DEFINE_INTERFACE_DISPATCHER(isal_adler32) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_ASIMD) - return PROVIDER_INFO(adler32_neon); + unsigned long auxval = getauxval(AT_HWCAP); + if (auxval & HWCAP_ASIMD) + return PROVIDER_INFO(adler32_neon); #elif defined(__APPLE__) - return PROVIDER_INFO(adler32_neon); + return PROVIDER_INFO(adler32_neon); #endif - return PROVIDER_BASIC(adler32); - + return PROVIDER_BASIC(adler32); } DEFINE_INTERFACE_DISPATCHER(isal_deflate_body) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); + unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_CRC32) - return PROVIDER_INFO(isal_deflate_body_aarch64); + if (auxval & HWCAP_CRC32) + return PROVIDER_INFO(isal_deflate_body_aarch64); #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_CRC32_KEY)) - return PROVIDER_INFO(isal_deflate_body_aarch64); + if (sysctlEnabled(SYSCTL_CRC32_KEY)) + return PROVIDER_INFO(isal_deflate_body_aarch64); #endif - return PROVIDER_BASIC(isal_deflate_body); - + return PROVIDER_BASIC(isal_deflate_body); } DEFINE_INTERFACE_DISPATCHER(isal_deflate_finish) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_CRC32) - return PROVIDER_INFO(isal_deflate_finish_aarch64); + unsigned long auxval = getauxval(AT_HWCAP); + if (auxval & HWCAP_CRC32) + return PROVIDER_INFO(isal_deflate_finish_aarch64); #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_CRC32_KEY)) - return PROVIDER_INFO(isal_deflate_finish_aarch64); + if (sysctlEnabled(SYSCTL_CRC32_KEY)) + return PROVIDER_INFO(isal_deflate_finish_aarch64); #endif - return PROVIDER_BASIC(isal_deflate_finish); - + return PROVIDER_BASIC(isal_deflate_finish); } DEFINE_INTERFACE_DISPATCHER(isal_deflate_icf_body_lvl1) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_CRC32) - return PROVIDER_INFO(isal_deflate_icf_body_hash_hist_aarch64); + unsigned long auxval = getauxval(AT_HWCAP); + if (auxval & HWCAP_CRC32) + return PROVIDER_INFO(isal_deflate_icf_body_hash_hist_aarch64); #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_CRC32_KEY)) - return PROVIDER_INFO(isal_deflate_icf_body_hash_hist_aarch64); + if (sysctlEnabled(SYSCTL_CRC32_KEY)) + return PROVIDER_INFO(isal_deflate_icf_body_hash_hist_aarch64); #endif - return PROVIDER_BASIC(isal_deflate_icf_body_hash_hist); + return PROVIDER_BASIC(isal_deflate_icf_body_hash_hist); } DEFINE_INTERFACE_DISPATCHER(isal_deflate_icf_finish_lvl1) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_CRC32) - return PROVIDER_INFO(isal_deflate_icf_finish_hash_hist_aarch64); + unsigned long auxval = getauxval(AT_HWCAP); + if (auxval & HWCAP_CRC32) + return PROVIDER_INFO(isal_deflate_icf_finish_hash_hist_aarch64); #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_CRC32_KEY)) - return PROVIDER_INFO(isal_deflate_icf_finish_hash_hist_aarch64); + if (sysctlEnabled(SYSCTL_CRC32_KEY)) + return PROVIDER_INFO(isal_deflate_icf_finish_hash_hist_aarch64); #endif - return PROVIDER_BASIC(isal_deflate_icf_finish_hash_hist); + return PROVIDER_BASIC(isal_deflate_icf_finish_hash_hist); } DEFINE_INTERFACE_DISPATCHER(isal_deflate_icf_body_lvl2) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_CRC32) - return PROVIDER_INFO(isal_deflate_icf_body_hash_hist_aarch64); + unsigned long auxval = getauxval(AT_HWCAP); + if (auxval & HWCAP_CRC32) + return PROVIDER_INFO(isal_deflate_icf_body_hash_hist_aarch64); #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_CRC32_KEY)) - return PROVIDER_INFO(isal_deflate_icf_body_hash_hist_aarch64); + if (sysctlEnabled(SYSCTL_CRC32_KEY)) + return PROVIDER_INFO(isal_deflate_icf_body_hash_hist_aarch64); #endif - return PROVIDER_BASIC(isal_deflate_icf_body_hash_hist); + return PROVIDER_BASIC(isal_deflate_icf_body_hash_hist); } DEFINE_INTERFACE_DISPATCHER(isal_deflate_icf_finish_lvl2) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_CRC32) - return PROVIDER_INFO(isal_deflate_icf_finish_hash_hist_aarch64); + unsigned long auxval = getauxval(AT_HWCAP); + if (auxval & HWCAP_CRC32) + return PROVIDER_INFO(isal_deflate_icf_finish_hash_hist_aarch64); #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_CRC32_KEY)) - return PROVIDER_INFO(isal_deflate_icf_finish_hash_hist_aarch64); + if (sysctlEnabled(SYSCTL_CRC32_KEY)) + return PROVIDER_INFO(isal_deflate_icf_finish_hash_hist_aarch64); #endif - return PROVIDER_BASIC(isal_deflate_icf_finish_hash_hist); + return PROVIDER_BASIC(isal_deflate_icf_finish_hash_hist); } DEFINE_INTERFACE_DISPATCHER(isal_deflate_icf_body_lvl3) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_CRC32) - return PROVIDER_INFO(icf_body_hash1_fillgreedy_lazy); + unsigned long auxval = getauxval(AT_HWCAP); + if (auxval & HWCAP_CRC32) + return PROVIDER_INFO(icf_body_hash1_fillgreedy_lazy); #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_CRC32_KEY)) - return PROVIDER_INFO(icf_body_hash1_fillgreedy_lazy); + if (sysctlEnabled(SYSCTL_CRC32_KEY)) + return PROVIDER_INFO(icf_body_hash1_fillgreedy_lazy); #endif - return PROVIDER_INFO(icf_body_hash1_fillgreedy_lazy); + return PROVIDER_INFO(icf_body_hash1_fillgreedy_lazy); } DEFINE_INTERFACE_DISPATCHER(isal_deflate_icf_finish_lvl3) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_CRC32) - return PROVIDER_INFO(isal_deflate_icf_finish_hash_map_base); + unsigned long auxval = getauxval(AT_HWCAP); + if (auxval & HWCAP_CRC32) + return PROVIDER_INFO(isal_deflate_icf_finish_hash_map_base); #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_CRC32_KEY)) - return PROVIDER_INFO(isal_deflate_icf_finish_hash_map_base); + if (sysctlEnabled(SYSCTL_CRC32_KEY)) + return PROVIDER_INFO(isal_deflate_icf_finish_hash_map_base); #endif - return PROVIDER_BASIC(isal_deflate_icf_finish_hash_map); + return PROVIDER_BASIC(isal_deflate_icf_finish_hash_map); } -DEFINE_INTERFACE_DISPATCHER(set_long_icf_fg) -{ - return PROVIDER_INFO(set_long_icf_fg_aarch64); -} +DEFINE_INTERFACE_DISPATCHER(set_long_icf_fg) { return PROVIDER_INFO(set_long_icf_fg_aarch64); } DEFINE_INTERFACE_DISPATCHER(encode_deflate_icf) { - return PROVIDER_INFO(encode_deflate_icf_aarch64); + return PROVIDER_INFO(encode_deflate_icf_aarch64); } DEFINE_INTERFACE_DISPATCHER(isal_update_histogram) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_CRC32) - return PROVIDER_INFO(isal_update_histogram_aarch64); + unsigned long auxval = getauxval(AT_HWCAP); + if (auxval & HWCAP_CRC32) + return PROVIDER_INFO(isal_update_histogram_aarch64); #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_CRC32_KEY)) - return PROVIDER_INFO(isal_update_histogram_aarch64); + if (sysctlEnabled(SYSCTL_CRC32_KEY)) + return PROVIDER_INFO(isal_update_histogram_aarch64); #endif - return PROVIDER_BASIC(isal_update_histogram); + return PROVIDER_BASIC(isal_update_histogram); } DEFINE_INTERFACE_DISPATCHER(gen_icf_map_lh1) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_CRC32) { - return PROVIDER_INFO(gen_icf_map_h1_aarch64); - } + unsigned long auxval = getauxval(AT_HWCAP); + if (auxval & HWCAP_CRC32) { + return PROVIDER_INFO(gen_icf_map_h1_aarch64); + } #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_CRC32_KEY)) - return PROVIDER_INFO(gen_icf_map_h1_aarch64); + if (sysctlEnabled(SYSCTL_CRC32_KEY)) + return PROVIDER_INFO(gen_icf_map_h1_aarch64); #endif - return PROVIDER_BASIC(gen_icf_map_h1); + return PROVIDER_BASIC(gen_icf_map_h1); } DEFINE_INTERFACE_DISPATCHER(isal_deflate_hash_lvl0) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_CRC32) - return PROVIDER_INFO(isal_deflate_hash_aarch64); + unsigned long auxval = getauxval(AT_HWCAP); + if (auxval & HWCAP_CRC32) + return PROVIDER_INFO(isal_deflate_hash_aarch64); #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_CRC32_KEY)) - return PROVIDER_INFO(isal_deflate_hash_aarch64); + if (sysctlEnabled(SYSCTL_CRC32_KEY)) + return PROVIDER_INFO(isal_deflate_hash_aarch64); #endif - return PROVIDER_BASIC(isal_deflate_hash); + return PROVIDER_BASIC(isal_deflate_hash); } DEFINE_INTERFACE_DISPATCHER(isal_deflate_hash_lvl1) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_CRC32) - return PROVIDER_INFO(isal_deflate_hash_aarch64); + unsigned long auxval = getauxval(AT_HWCAP); + if (auxval & HWCAP_CRC32) + return PROVIDER_INFO(isal_deflate_hash_aarch64); #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_CRC32_KEY)) - return PROVIDER_INFO(isal_deflate_hash_aarch64); + if (sysctlEnabled(SYSCTL_CRC32_KEY)) + return PROVIDER_INFO(isal_deflate_hash_aarch64); #endif - return PROVIDER_BASIC(isal_deflate_hash); + return PROVIDER_BASIC(isal_deflate_hash); } DEFINE_INTERFACE_DISPATCHER(isal_deflate_hash_lvl2) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_CRC32) - return PROVIDER_INFO(isal_deflate_hash_aarch64); + unsigned long auxval = getauxval(AT_HWCAP); + if (auxval & HWCAP_CRC32) + return PROVIDER_INFO(isal_deflate_hash_aarch64); #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_CRC32_KEY)) - return PROVIDER_INFO(isal_deflate_hash_aarch64); + if (sysctlEnabled(SYSCTL_CRC32_KEY)) + return PROVIDER_INFO(isal_deflate_hash_aarch64); #endif - return PROVIDER_BASIC(isal_deflate_hash); + return PROVIDER_BASIC(isal_deflate_hash); } DEFINE_INTERFACE_DISPATCHER(isal_deflate_hash_lvl3) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_CRC32) - return PROVIDER_INFO(isal_deflate_hash_aarch64); + unsigned long auxval = getauxval(AT_HWCAP); + if (auxval & HWCAP_CRC32) + return PROVIDER_INFO(isal_deflate_hash_aarch64); #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_CRC32_KEY)) - return PROVIDER_INFO(isal_deflate_hash_aarch64); + if (sysctlEnabled(SYSCTL_CRC32_KEY)) + return PROVIDER_INFO(isal_deflate_hash_aarch64); #endif - return PROVIDER_BASIC(isal_deflate_hash); + return PROVIDER_BASIC(isal_deflate_hash); } DEFINE_INTERFACE_DISPATCHER(decode_huffman_code_block_stateless) { #if defined(__linux__) - unsigned long auxval = getauxval(AT_HWCAP); - if (auxval & HWCAP_CRC32) - return PROVIDER_INFO(decode_huffman_code_block_stateless_aarch64); + unsigned long auxval = getauxval(AT_HWCAP); + if (auxval & HWCAP_CRC32) + return PROVIDER_INFO(decode_huffman_code_block_stateless_aarch64); #elif defined(__APPLE__) - if (sysctlEnabled(SYSCTL_CRC32_KEY)) - return PROVIDER_INFO(decode_huffman_code_block_stateless_aarch64); + if (sysctlEnabled(SYSCTL_CRC32_KEY)) + return PROVIDER_INFO(decode_huffman_code_block_stateless_aarch64); #endif - return PROVIDER_BASIC(decode_huffman_code_block_stateless); + return PROVIDER_BASIC(decode_huffman_code_block_stateless); } diff --git a/igzip/adler32_base.c b/igzip/adler32_base.c index 034b71a4..504b8b12 100644 --- a/igzip/adler32_base.c +++ b/igzip/adler32_base.c @@ -30,34 +30,35 @@ #include #include "igzip_checksums.h" -uint32_t adler32_base(uint32_t adler32, uint8_t * start, uint32_t length) +uint32_t +adler32_base(uint32_t adler32, uint8_t *start, uint32_t length) { - uint8_t *end, *next = start; - uint64_t A, B; - - A = adler32 & 0xffff; - B = adler32 >> 16; - - while (length > MAX_ADLER_BUF) { - end = next + MAX_ADLER_BUF; - for (; next < end; next++) { - A += *next; - B += A; - } - - A = A % ADLER_MOD; - B = B % ADLER_MOD; - length -= MAX_ADLER_BUF; - } - - end = next + length; - for (; next < end; next++) { - A += *next; - B += A; - } - - A = A % ADLER_MOD; - B = B % ADLER_MOD; - - return B << 16 | A; + uint8_t *end, *next = start; + uint64_t A, B; + + A = adler32 & 0xffff; + B = adler32 >> 16; + + while (length > MAX_ADLER_BUF) { + end = next + MAX_ADLER_BUF; + for (; next < end; next++) { + A += *next; + B += A; + } + + A = A % ADLER_MOD; + B = B % ADLER_MOD; + length -= MAX_ADLER_BUF; + } + + end = next + length; + for (; next < end; next++) { + A += *next; + B += A; + } + + A = A % ADLER_MOD; + B = B % ADLER_MOD; + + return B << 16 | A; } diff --git a/igzip/adler32_perf.c b/igzip/adler32_perf.c index d770c5e5..1cda2b85 100644 --- a/igzip/adler32_perf.c +++ b/igzip/adler32_perf.c @@ -35,40 +35,41 @@ #include "test.h" #ifndef GT_L3_CACHE -# define GT_L3_CACHE 32*1024*1024 /* some number > last level cache */ +#define GT_L3_CACHE 32 * 1024 * 1024 /* some number > last level cache */ #endif #if !defined(COLD_TEST) && !defined(TEST_CUSTOM) // Cached test, loop many times over small dataset -# define TEST_LEN 8*1024 -# define TEST_TYPE_STR "_warm" -#elif defined (COLD_TEST) +#define TEST_LEN 8 * 1024 +#define TEST_TYPE_STR "_warm" +#elif defined(COLD_TEST) // Uncached test. Pull from large mem base. -# define TEST_LEN (2 * GT_L3_CACHE) -# define TEST_TYPE_STR "_cold" +#define TEST_LEN (2 * GT_L3_CACHE) +#define TEST_TYPE_STR "_cold" #endif #ifndef TEST_SEED #define TEST_SEED 0x1234 #endif -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - void *buf; - uint32_t checksum = 0; - struct perf start; + void *buf; + uint32_t checksum = 0; + struct perf start; - printf("adler32_perf:\n"); + printf("adler32_perf:\n"); - if (posix_memalign(&buf, 1024, TEST_LEN)) { - printf("alloc error: Fail"); - return -1; - } - memset(buf, 0, TEST_LEN); + if (posix_memalign(&buf, 1024, TEST_LEN)) { + printf("alloc error: Fail"); + return -1; + } + memset(buf, 0, TEST_LEN); - BENCHMARK(&start, BENCHMARK_TIME, checksum |= isal_adler32(TEST_SEED, buf, TEST_LEN)); - printf("adler32" TEST_TYPE_STR ": "); - perf_print(start, (long long)TEST_LEN); + BENCHMARK(&start, BENCHMARK_TIME, checksum |= isal_adler32(TEST_SEED, buf, TEST_LEN)); + printf("adler32" TEST_TYPE_STR ": "); + perf_print(start, (long long) TEST_LEN); - return 0; + return 0; } diff --git a/igzip/bitbuf2.h b/igzip/bitbuf2.h index 5d886c0b..9f9d34a4 100644 --- a/igzip/bitbuf2.h +++ b/igzip/bitbuf2.h @@ -41,89 +41,100 @@ * state that is possible at the exit of write_bits */ #define MAX_BITBUF_BIT_WRITE 56 -static inline void init(struct BitBuf2 *me) +static inline void +init(struct BitBuf2 *me) { - me->m_bits = 0; - me->m_bit_count = 0; + me->m_bits = 0; + me->m_bit_count = 0; } -static inline void set_buf(struct BitBuf2 *me, unsigned char *buf, unsigned int len) +static inline void +set_buf(struct BitBuf2 *me, unsigned char *buf, unsigned int len) { - unsigned int slop = 8; - me->m_out_buf = me->m_out_start = buf; - me->m_out_end = buf + len - slop; + unsigned int slop = 8; + me->m_out_buf = me->m_out_start = buf; + me->m_out_end = buf + len - slop; } -static inline int is_full(struct BitBuf2 *me) +static inline int +is_full(struct BitBuf2 *me) { - return (me->m_out_buf > me->m_out_end); + return (me->m_out_buf > me->m_out_end); } -static inline uint8_t *buffer_ptr(struct BitBuf2 *me) +static inline uint8_t * +buffer_ptr(struct BitBuf2 *me) { - return me->m_out_buf; + return me->m_out_buf; } -static inline uint32_t buffer_used(struct BitBuf2 *me) +static inline uint32_t +buffer_used(struct BitBuf2 *me) { - return (uint32_t) (me->m_out_buf - me->m_out_start); + return (uint32_t) (me->m_out_buf - me->m_out_start); } -static inline uint32_t buffer_bits_used(struct BitBuf2 *me) +static inline uint32_t +buffer_bits_used(struct BitBuf2 *me) { - return (8 * (uint32_t) (me->m_out_buf - me->m_out_start) + me->m_bit_count); + return (8 * (uint32_t) (me->m_out_buf - me->m_out_start) + me->m_bit_count); } -static inline void flush_bits(struct BitBuf2 *me) +static inline void +flush_bits(struct BitBuf2 *me) { - uint32_t bits; - store_le_u64(me->m_out_buf, me->m_bits); - bits = me->m_bit_count & ~7; - me->m_bit_count -= bits; - me->m_out_buf += bits / 8; - me->m_bits >>= bits; - + uint32_t bits; + store_le_u64(me->m_out_buf, me->m_bits); + bits = me->m_bit_count & ~7; + me->m_bit_count -= bits; + me->m_out_buf += bits / 8; + me->m_bits >>= bits; } /* Can write up to 8 bytes to output buffer */ -static inline void flush(struct BitBuf2 *me) +static inline void +flush(struct BitBuf2 *me) { - uint32_t bytes; - if (me->m_bit_count) { - store_le_u64(me->m_out_buf, me->m_bits); - bytes = (me->m_bit_count + 7) / 8; - me->m_out_buf += bytes; - } - me->m_bits = 0; - me->m_bit_count = 0; + uint32_t bytes; + if (me->m_bit_count) { + store_le_u64(me->m_out_buf, me->m_bits); + bytes = (me->m_bit_count + 7) / 8; + me->m_out_buf += bytes; + } + me->m_bits = 0; + me->m_bit_count = 0; } -static inline void check_space(struct BitBuf2 *me, uint32_t num_bits) +static inline void +check_space(struct BitBuf2 *me, uint32_t num_bits) { - /* Checks if bitbuf has num_bits extra space and flushes the bytes in - * the bitbuf if it doesn't. */ - if (63 - me->m_bit_count < num_bits) - flush_bits(me); + /* Checks if bitbuf has num_bits extra space and flushes the bytes in + * the bitbuf if it doesn't. */ + if (63 - me->m_bit_count < num_bits) + flush_bits(me); } -static inline void write_bits_unsafe(struct BitBuf2 *me, uint64_t code, uint32_t count) +static inline void +write_bits_unsafe(struct BitBuf2 *me, uint64_t code, uint32_t count) { - me->m_bits |= code << me->m_bit_count; - me->m_bit_count += count; + me->m_bits |= code << me->m_bit_count; + me->m_bit_count += count; } -static inline void write_bits(struct BitBuf2 *me, uint64_t code, uint32_t count) -{ /* Assumes there is space to fit code into m_bits. */ - me->m_bits |= code << me->m_bit_count; - me->m_bit_count += count; - flush_bits(me); +static inline void +write_bits(struct BitBuf2 *me, uint64_t code, uint32_t count) +{ /* Assumes there is space to fit code into m_bits. */ + me->m_bits |= code << me->m_bit_count; + me->m_bit_count += count; + flush_bits(me); } -static inline void write_bits_flush(struct BitBuf2 *me, uint64_t code, uint32_t count) -{ /* Assumes there is space to fit code into m_bits. */ - me->m_bits |= code << me->m_bit_count; - me->m_bit_count += count; - flush(me); +static inline void +write_bits_flush(struct BitBuf2 *me, uint64_t code, uint32_t count) +{ /* Assumes there is space to fit code into m_bits. */ + me->m_bits |= code << me->m_bit_count; + me->m_bit_count += count; + flush(me); } -#endif //BITBUF2_H +#endif // BITBUF2_H diff --git a/igzip/checksum32_funcs_test.c b/igzip/checksum32_funcs_test.c index e1b39b63..6354016f 100644 --- a/igzip/checksum32_funcs_test.c +++ b/igzip/checksum32_funcs_test.c @@ -36,294 +36,307 @@ #include "test.h" #ifndef TEST_SEED -# define TEST_SEED 0x1234 +#define TEST_SEED 0x1234 #endif #define MAX_BUF 512 -#define TEST_SIZE 20 +#define TEST_SIZE 20 -typedef uint32_t(*checksum32_func_t) (uint32_t, const unsigned char *, uint64_t); +typedef uint32_t (*checksum32_func_t)(uint32_t, const unsigned char *, uint64_t); typedef struct func_case { - char *note; - checksum32_func_t checksum32_func_call; - checksum32_func_t checksum32_ref_call; + char *note; + checksum32_func_t checksum32_func_call; + checksum32_func_t checksum32_ref_call; } func_case_t; func_case_t test_funcs[] = { - {"checksum32_adler", isal_adler32, adler_ref}, + { "checksum32_adler", isal_adler32, adler_ref }, }; // Generates pseudo-random data -void rand_buffer(unsigned char *buf, long buffer_size) +void +rand_buffer(unsigned char *buf, long buffer_size) { - long i; - for (i = 0; i < buffer_size; i++) - buf[i] = rand(); + long i; + for (i = 0; i < buffer_size; i++) + buf[i] = rand(); } // Test cases -int zeros_test(func_case_t * test_func); -int simple_pattern_test(func_case_t * test_func); -int seeds_sizes_test(func_case_t * test_func); -int eob_test(func_case_t * test_func); -int update_test(func_case_t * test_func); -int update_over_mod_test(func_case_t * test_func); +int +zeros_test(func_case_t *test_func); +int +simple_pattern_test(func_case_t *test_func); +int +seeds_sizes_test(func_case_t *test_func); +int +eob_test(func_case_t *test_func); +int +update_test(func_case_t *test_func); +int +update_over_mod_test(func_case_t *test_func); void *buf_alloc = NULL; -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - int fail = 0, fail_case; - int i, ret; - func_case_t *test_func; - - // Align to MAX_BUF boundary - ret = posix_memalign(&buf_alloc, MAX_BUF, MAX_BUF * TEST_SIZE); - if (ret) { - printf("alloc error: Fail"); - return -1; - } - srand(TEST_SEED); - printf("CHECKSUM32 Tests seed=0x%x\n", TEST_SEED); - - for (i = 0; i < sizeof(test_funcs) / sizeof(test_funcs[0]); i++) { - fail_case = 0; - test_func = &test_funcs[i]; - - printf("Test %s ", test_func->note); - fail_case += zeros_test(test_func); - fail_case += simple_pattern_test(test_func); - fail_case += seeds_sizes_test(test_func); - fail_case += eob_test(test_func); - fail_case += update_test(test_func); - fail_case += update_over_mod_test(test_func); - printf("Test %s done: %s\n", test_func->note, fail_case ? "Fail" : "Pass"); - - if (fail_case) { - printf("\n%s Failed %d tests\n", test_func->note, fail_case); - fail++; - } - } - - printf("CHECKSUM32 Tests all done: %s\n", fail ? "Fail" : "Pass"); - - aligned_free(buf_alloc); - - return fail; + int fail = 0, fail_case; + int i, ret; + func_case_t *test_func; + + // Align to MAX_BUF boundary + ret = posix_memalign(&buf_alloc, MAX_BUF, MAX_BUF * TEST_SIZE); + if (ret) { + printf("alloc error: Fail"); + return -1; + } + srand(TEST_SEED); + printf("CHECKSUM32 Tests seed=0x%x\n", TEST_SEED); + + for (i = 0; i < sizeof(test_funcs) / sizeof(test_funcs[0]); i++) { + fail_case = 0; + test_func = &test_funcs[i]; + + printf("Test %s ", test_func->note); + fail_case += zeros_test(test_func); + fail_case += simple_pattern_test(test_func); + fail_case += seeds_sizes_test(test_func); + fail_case += eob_test(test_func); + fail_case += update_test(test_func); + fail_case += update_over_mod_test(test_func); + printf("Test %s done: %s\n", test_func->note, fail_case ? "Fail" : "Pass"); + + if (fail_case) { + printf("\n%s Failed %d tests\n", test_func->note, fail_case); + fail++; + } + } + + printf("CHECKSUM32 Tests all done: %s\n", fail ? "Fail" : "Pass"); + + aligned_free(buf_alloc); + + return fail; } // Test of all zeros -int zeros_test(func_case_t * test_func) +int +zeros_test(func_case_t *test_func) { - uint32_t c_dut, c_ref; - int fail = 0; - unsigned char *buf = NULL; - - buf = (unsigned char *)buf_alloc; - memset(buf, 0, MAX_BUF * 10); - c_dut = test_func->checksum32_func_call(TEST_SEED, buf, MAX_BUF * 10); - c_ref = test_func->checksum32_ref_call(TEST_SEED, buf, MAX_BUF * 10); - - if (c_dut != c_ref) { - fail++; - printf("\n opt ref\n"); - printf(" ------ ------\n"); - printf("checksum zero = 0x%8x 0x%8x \n", c_dut, c_ref); - } + uint32_t c_dut, c_ref; + int fail = 0; + unsigned char *buf = NULL; + + buf = (unsigned char *) buf_alloc; + memset(buf, 0, MAX_BUF * 10); + c_dut = test_func->checksum32_func_call(TEST_SEED, buf, MAX_BUF * 10); + c_ref = test_func->checksum32_ref_call(TEST_SEED, buf, MAX_BUF * 10); + + if (c_dut != c_ref) { + fail++; + printf("\n opt ref\n"); + printf(" ------ ------\n"); + printf("checksum zero = 0x%8x 0x%8x \n", c_dut, c_ref); + } #ifdef TEST_VERBOSE - else - printf("."); + else + printf("."); #endif - return fail; + return fail; } // Another simple test pattern -int simple_pattern_test(func_case_t * test_func) +int +simple_pattern_test(func_case_t *test_func) { - uint32_t c_dut, c_ref; - int fail = 0; - unsigned char *buf = NULL; - - buf = (unsigned char *)buf_alloc; - memset(buf, 0x8a, MAX_BUF); - c_dut = test_func->checksum32_func_call(TEST_SEED, buf, MAX_BUF); - c_ref = test_func->checksum32_ref_call(TEST_SEED, buf, MAX_BUF); - if (c_dut != c_ref) { - fail++; - printf("fail checksum all 8a = 0x%8x 0x%8x\n", c_dut, c_ref); - } + uint32_t c_dut, c_ref; + int fail = 0; + unsigned char *buf = NULL; + + buf = (unsigned char *) buf_alloc; + memset(buf, 0x8a, MAX_BUF); + c_dut = test_func->checksum32_func_call(TEST_SEED, buf, MAX_BUF); + c_ref = test_func->checksum32_ref_call(TEST_SEED, buf, MAX_BUF); + if (c_dut != c_ref) { + fail++; + printf("fail checksum all 8a = 0x%8x 0x%8x\n", c_dut, c_ref); + } #ifdef TEST_VERBOSE - else - printf("."); + else + printf("."); #endif - return fail; + return fail; } -int seeds_sizes_test(func_case_t * test_func) +int +seeds_sizes_test(func_case_t *test_func) { - uint32_t c_dut, c_ref; - int fail = 0; - int i; - uint32_t r, s; - unsigned char *buf = NULL; - - // Do a few random tests - buf = (unsigned char *)buf_alloc; //reset buf - r = rand(); - rand_buffer(buf, MAX_BUF * TEST_SIZE); - - for (i = 0; i < TEST_SIZE; i++) { - c_dut = test_func->checksum32_func_call(r, buf, MAX_BUF); - c_ref = test_func->checksum32_ref_call(r, buf, MAX_BUF); - if (c_dut != c_ref) { - fail++; - printf("fail checksum rand%3d = 0x%8x 0x%8x\n", i, c_dut, c_ref); - } + uint32_t c_dut, c_ref; + int fail = 0; + int i; + uint32_t r, s; + unsigned char *buf = NULL; + + // Do a few random tests + buf = (unsigned char *) buf_alloc; // reset buf + r = rand(); + rand_buffer(buf, MAX_BUF * TEST_SIZE); + + for (i = 0; i < TEST_SIZE; i++) { + c_dut = test_func->checksum32_func_call(r, buf, MAX_BUF); + c_ref = test_func->checksum32_ref_call(r, buf, MAX_BUF); + if (c_dut != c_ref) { + fail++; + printf("fail checksum rand%3d = 0x%8x 0x%8x\n", i, c_dut, c_ref); + } #ifdef TEST_VERBOSE - else - printf("."); + else + printf("."); #endif - buf += MAX_BUF; - } - - // Do a few random sizes - buf = (unsigned char *)buf_alloc; //reset buf - r = rand(); - - for (i = MAX_BUF; i >= 0; i--) { - c_dut = test_func->checksum32_func_call(r, buf, i); - c_ref = test_func->checksum32_ref_call(r, buf, i); - if (c_dut != c_ref) { - fail++; - printf("fail random size%i 0x%8x 0x%8x\n", i, c_dut, c_ref); - } + buf += MAX_BUF; + } + + // Do a few random sizes + buf = (unsigned char *) buf_alloc; // reset buf + r = rand(); + + for (i = MAX_BUF; i >= 0; i--) { + c_dut = test_func->checksum32_func_call(r, buf, i); + c_ref = test_func->checksum32_ref_call(r, buf, i); + if (c_dut != c_ref) { + fail++; + printf("fail random size%i 0x%8x 0x%8x\n", i, c_dut, c_ref); + } #ifdef TEST_VERBOSE - else - printf("."); + else + printf("."); #endif - } + } - // Try different seeds - for (s = 0; s < 20; s++) { - buf = (unsigned char *)buf_alloc; //reset buf + // Try different seeds + for (s = 0; s < 20; s++) { + buf = (unsigned char *) buf_alloc; // reset buf - r = rand(); // just to get a new seed - rand_buffer(buf, MAX_BUF * TEST_SIZE); // new pseudo-rand data + r = rand(); // just to get a new seed + rand_buffer(buf, MAX_BUF * TEST_SIZE); // new pseudo-rand data #ifdef TEST_VERBOSE - printf("seed = 0x%x\n", r); + printf("seed = 0x%x\n", r); #endif - for (i = 0; i < TEST_SIZE; i++) { - c_dut = test_func->checksum32_func_call(r, buf, MAX_BUF); - c_ref = test_func->checksum32_ref_call(r, buf, MAX_BUF); - if (c_dut != c_ref) { - fail++; - printf("fail checksum rand%3d = 0x%8x 0x%8x\n", i, c_dut, - c_ref); - } + for (i = 0; i < TEST_SIZE; i++) { + c_dut = test_func->checksum32_func_call(r, buf, MAX_BUF); + c_ref = test_func->checksum32_ref_call(r, buf, MAX_BUF); + if (c_dut != c_ref) { + fail++; + printf("fail checksum rand%3d = 0x%8x 0x%8x\n", i, c_dut, c_ref); + } #ifdef TEST_VERBOSE - else - printf("."); + else + printf("."); #endif - buf += MAX_BUF; - } - } + buf += MAX_BUF; + } + } - return fail; + return fail; } // Run tests at end of buffer -int eob_test(func_case_t * test_func) +int +eob_test(func_case_t *test_func) { - uint32_t c_dut, c_ref; - int fail = 0; - int i; - unsigned char *buf = NULL; - - buf = (unsigned char *)buf_alloc; //reset buf - buf = buf + ((MAX_BUF - 1) * TEST_SIZE); //Line up TEST_SIZE from end - for (i = 0; i < TEST_SIZE; i++) { - c_dut = test_func->checksum32_func_call(TEST_SEED, buf + i, TEST_SIZE - i); - c_ref = test_func->checksum32_ref_call(TEST_SEED, buf + i, TEST_SIZE - i); - if (c_dut != c_ref) { - fail++; - printf("fail checksum eob rand%3d = 0x%8x 0x%8x\n", i, c_dut, c_ref); - } + uint32_t c_dut, c_ref; + int fail = 0; + int i; + unsigned char *buf = NULL; + + buf = (unsigned char *) buf_alloc; // reset buf + buf = buf + ((MAX_BUF - 1) * TEST_SIZE); // Line up TEST_SIZE from end + for (i = 0; i < TEST_SIZE; i++) { + c_dut = test_func->checksum32_func_call(TEST_SEED, buf + i, TEST_SIZE - i); + c_ref = test_func->checksum32_ref_call(TEST_SEED, buf + i, TEST_SIZE - i); + if (c_dut != c_ref) { + fail++; + printf("fail checksum eob rand%3d = 0x%8x 0x%8x\n", i, c_dut, c_ref); + } #ifdef TEST_VERBOSE - else - printf("."); + else + printf("."); #endif - } + } - return fail; + return fail; } -int update_test(func_case_t * test_func) +int +update_test(func_case_t *test_func) { - uint32_t c_dut, c_ref; - int fail = 0; - int i; - uint32_t r; - unsigned char *buf = NULL; - - buf = (unsigned char *)buf_alloc; //reset buf - r = rand(); - // Process the whole buf with reference func single call. - c_ref = test_func->checksum32_ref_call(r, buf, MAX_BUF * TEST_SIZE); - // Process buf with update method. - for (i = 0; i < TEST_SIZE; i++) { - c_dut = test_func->checksum32_func_call(r, buf, MAX_BUF); - // Update checksum seeds and buf pointer. - r = c_dut; - buf += MAX_BUF; - } - - if (c_dut != c_ref) { - fail++; - printf("checksum rand%3d = 0x%8x 0x%8x\n", i, c_dut, c_ref); - } + uint32_t c_dut, c_ref; + int fail = 0; + int i; + uint32_t r; + unsigned char *buf = NULL; + + buf = (unsigned char *) buf_alloc; // reset buf + r = rand(); + // Process the whole buf with reference func single call. + c_ref = test_func->checksum32_ref_call(r, buf, MAX_BUF * TEST_SIZE); + // Process buf with update method. + for (i = 0; i < TEST_SIZE; i++) { + c_dut = test_func->checksum32_func_call(r, buf, MAX_BUF); + // Update checksum seeds and buf pointer. + r = c_dut; + buf += MAX_BUF; + } + + if (c_dut != c_ref) { + fail++; + printf("checksum rand%3d = 0x%8x 0x%8x\n", i, c_dut, c_ref); + } #ifdef TEST_VERBOSE - else - printf("."); + else + printf("."); #endif - return fail; + return fail; } -int update_over_mod_test(func_case_t * test_func) +int +update_over_mod_test(func_case_t *test_func) { - uint32_t c_dut, c_ref; - int fail = 0; - int i; - unsigned char *buf = NULL; - - buf = malloc(ADLER_MOD); - if (buf == NULL) - return 1; - memset(buf, 0xff, ADLER_MOD); - - c_ref = c_dut = rand(); - - // Process buf with update method. - for (i = 0; i < 20; i++) { - c_ref = test_func->checksum32_ref_call(c_ref, buf, ADLER_MOD - 64); - c_dut = test_func->checksum32_func_call(c_dut, buf, ADLER_MOD - 64); - } - - if (c_dut != c_ref) { - fail++; - printf("checksum rand%3d = 0x%8x 0x%8x\n", i, c_dut, c_ref); - } + uint32_t c_dut, c_ref; + int fail = 0; + int i; + unsigned char *buf = NULL; + + buf = malloc(ADLER_MOD); + if (buf == NULL) + return 1; + memset(buf, 0xff, ADLER_MOD); + + c_ref = c_dut = rand(); + + // Process buf with update method. + for (i = 0; i < 20; i++) { + c_ref = test_func->checksum32_ref_call(c_ref, buf, ADLER_MOD - 64); + c_dut = test_func->checksum32_func_call(c_dut, buf, ADLER_MOD - 64); + } + + if (c_dut != c_ref) { + fail++; + printf("checksum rand%3d = 0x%8x 0x%8x\n", i, c_dut, c_ref); + } #ifdef TEST_VERBOSE - else - printf("."); + else + printf("."); #endif - free(buf); - return fail; + free(buf); + return fail; } diff --git a/igzip/checksum_test_ref.h b/igzip/checksum_test_ref.h index b561be97..74c1da73 100644 --- a/igzip/checksum_test_ref.h +++ b/igzip/checksum_test_ref.h @@ -8,95 +8,69 @@ #include uint32_t inflate_crc_table[256] = { - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, - 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, - 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, - 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, - 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, - 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, - 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, - 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, - 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, - 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, - 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, - 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, - 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, - 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, - 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, - 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, - 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, - 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, - 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, - 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, - 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, - 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, - 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, - 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, - 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, - 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, - 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, - 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, - 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, - 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, - 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, - 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, - 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, - 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, - 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, - 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, - 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, - 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, - 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, - 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, - 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, - 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, - 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, - 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, - 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, - 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, - 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, - 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, - 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, - 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, - 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, - 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, - 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, - 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, - 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, - 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, - 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, - 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, - 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, - 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d}; + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, + 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, + 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, + 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, + 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, + 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, + 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, + 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, + 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, + 0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, + 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, + 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, + 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, + 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, + 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, + 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, + 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, + 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, + 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, + 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, + 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2, 0x1e01f268, + 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, + 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, + 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, + 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, + 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, + 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, + 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, + 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, + 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, + 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, + 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, + 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, + 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, + 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, + 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d +}; - -uint32_t crc32_gzip_refl_ref(uint32_t crc, const unsigned char *buf, uint64_t len) +uint32_t +crc32_gzip_refl_ref(uint32_t crc, const unsigned char *buf, uint64_t len) { - uint64_t i; - crc = ~crc; - for (i = 0; i < len; i++) - crc = (crc >> 8) ^ inflate_crc_table[(crc & 0xff) ^ buf[i]]; - return ~crc; + uint64_t i; + crc = ~crc; + for (i = 0; i < len; i++) + crc = (crc >> 8) ^ inflate_crc_table[(crc & 0xff) ^ buf[i]]; + return ~crc; } #define ADLER_MOD 65521 - -uint32_t adler_ref(uint32_t init, const unsigned char *buf, uint64_t len) +uint32_t +adler_ref(uint32_t init, const unsigned char *buf, uint64_t len) { - uint64_t i; - uint32_t a = init & 0xffff; - uint32_t b = init >> 16; + uint64_t i; + uint32_t a = init & 0xffff; + uint32_t b = init >> 16; - for (i = 0; i < len; i++) { - a = (a + buf[i]) % ADLER_MOD; - b = (b + a) % ADLER_MOD; - } - return (b << 16) | a; + for (i = 0; i < len; i++) { + a = (a + buf[i]) % ADLER_MOD; + b = (b + a) % ADLER_MOD; + } + return (b << 16) | a; } #endif /* CHECKSUM_TEST_REF_H */ diff --git a/igzip/encode_df.c b/igzip/encode_df.c index d26d1c94..fb26c836 100644 --- a/igzip/encode_df.c +++ b/igzip/encode_df.c @@ -4,35 +4,35 @@ #include #include -#if __x86_64__ || __i386__ || _M_X64 || _M_IX86 +#if __x86_64__ || __i386__ || _M_X64 || _M_IX86 #ifdef _MSC_VER -# include +#include #else -# include +#include #endif #endif //__x86_64__ || __i386__ || _M_X64 || _M_IX86 #include "encode_df.h" #include "bitbuf2.h" -struct deflate_icf *encode_deflate_icf_base(struct deflate_icf *next_in, - struct deflate_icf *end_in, struct BitBuf2 *bb, - struct hufftables_icf *hufftables) +struct deflate_icf * +encode_deflate_icf_base(struct deflate_icf *next_in, struct deflate_icf *end_in, struct BitBuf2 *bb, + struct hufftables_icf *hufftables) { - struct huff_code lsym, dsym; + struct huff_code lsym, dsym; - while (next_in < end_in && !is_full(bb)) { - lsym = hufftables->lit_len_table[next_in->lit_len]; - dsym = hufftables->dist_lit_table[next_in->lit_dist]; + while (next_in < end_in && !is_full(bb)) { + lsym = hufftables->lit_len_table[next_in->lit_len]; + dsym = hufftables->dist_lit_table[next_in->lit_dist]; - // insert ll code, dist_code, and extra_bits - write_bits_unsafe(bb, lsym.code_and_extra, lsym.length); - write_bits_unsafe(bb, dsym.code, dsym.length); - write_bits_unsafe(bb, next_in->dist_extra, dsym.extra_bit_count); - flush_bits(bb); + // insert ll code, dist_code, and extra_bits + write_bits_unsafe(bb, lsym.code_and_extra, lsym.length); + write_bits_unsafe(bb, dsym.code, dsym.length); + write_bits_unsafe(bb, next_in->dist_extra, dsym.extra_bit_count); + flush_bits(bb); - next_in++; - } + next_in++; + } - return next_in; + return next_in; } diff --git a/igzip/encode_df.h b/igzip/encode_df.h index 0e25ccbd..d7428b0a 100644 --- a/igzip/encode_df.h +++ b/igzip/encode_df.h @@ -6,31 +6,32 @@ #include "huff_codes.h" /* Deflate Intermediate Compression Format */ -#define LIT_LEN_BIT_COUNT 10 -#define LIT_LEN_MASK ((1 << LIT_LEN_BIT_COUNT) - 1) +#define LIT_LEN_BIT_COUNT 10 +#define LIT_LEN_MASK ((1 << LIT_LEN_BIT_COUNT) - 1) #define DIST_LIT_BIT_COUNT 9 -#define DIST_LIT_MASK ((1 << DIST_LIT_BIT_COUNT) - 1) -#define ICF_DIST_OFFSET LIT_LEN_BIT_COUNT -#define NULL_DIST_SYM 30 +#define DIST_LIT_MASK ((1 << DIST_LIT_BIT_COUNT) - 1) +#define ICF_DIST_OFFSET LIT_LEN_BIT_COUNT +#define NULL_DIST_SYM 30 -#define LEN_START ISAL_DEF_LIT_SYMBOLS -#define LEN_OFFSET (LEN_START - ISAL_DEF_MIN_MATCH) -#define LEN_MAX (LEN_OFFSET + ISAL_DEF_MAX_MATCH) -#define LIT_START (NULL_DIST_SYM + 1) +#define LEN_START ISAL_DEF_LIT_SYMBOLS +#define LEN_OFFSET (LEN_START - ISAL_DEF_MIN_MATCH) +#define LEN_MAX (LEN_OFFSET + ISAL_DEF_MAX_MATCH) +#define LIT_START (NULL_DIST_SYM + 1) #define ICF_CODE_LEN 32 struct deflate_icf { #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ - uint32_t lit_len:LIT_LEN_BIT_COUNT; - uint32_t lit_dist:DIST_LIT_BIT_COUNT; - uint32_t dist_extra:ICF_CODE_LEN - DIST_LIT_BIT_COUNT - ICF_DIST_OFFSET; + uint32_t lit_len : LIT_LEN_BIT_COUNT; + uint32_t lit_dist : DIST_LIT_BIT_COUNT; + uint32_t dist_extra : ICF_CODE_LEN - DIST_LIT_BIT_COUNT - ICF_DIST_OFFSET; #else - uint32_t dist_extra:ICF_CODE_LEN - DIST_LIT_BIT_COUNT - ICF_DIST_OFFSET; - uint32_t lit_dist:DIST_LIT_BIT_COUNT; - uint32_t lit_len:LIT_LEN_BIT_COUNT; + uint32_t dist_extra : ICF_CODE_LEN - DIST_LIT_BIT_COUNT - ICF_DIST_OFFSET; + uint32_t lit_dist : DIST_LIT_BIT_COUNT; + uint32_t lit_len : LIT_LEN_BIT_COUNT; #endif }; -struct deflate_icf *encode_deflate_icf(struct deflate_icf *next_in, struct deflate_icf *end_in, - struct BitBuf2 *bb, struct hufftables_icf *hufftables); +struct deflate_icf * +encode_deflate_icf(struct deflate_icf *next_in, struct deflate_icf *end_in, struct BitBuf2 *bb, + struct hufftables_icf *hufftables); #endif diff --git a/igzip/flatten_ll.c b/igzip/flatten_ll.c index 1eb13b55..5d86fb1e 100644 --- a/igzip/flatten_ll.c +++ b/igzip/flatten_ll.c @@ -4,38 +4,39 @@ #include "flatten_ll.h" -void flatten_ll(uint32_t * ll_hist) +void +flatten_ll(uint32_t *ll_hist) { - uint32_t i, j; - uint32_t *s = ll_hist, x, *p; + uint32_t i, j; + uint32_t *s = ll_hist, x, *p; - s[265] += s[266]; - s[266] = s[267] + s[268]; - s[267] = s[269] + s[270]; - s[268] = s[271] + s[272]; - s[269] = s[273] + s[274] + s[275] + s[276]; - s[270] = s[277] + s[278] + s[279] + s[280]; - s[271] = s[281] + s[282] + s[283] + s[284]; - s[272] = s[285] + s[286] + s[287] + s[288]; - p = s + 289; - for (i = 273; i < 277; i++) { - x = *(p++); - for (j = 1; j < 8; j++) - x += *(p++); - s[i] = x; - } - for (; i < 281; i++) { - x = *(p++); - for (j = 1; j < 16; j++) - x += *(p++); - s[i] = x; - } - for (; i < 285; i++) { - x = *(p++); - for (j = 1; j < 32; j++) - x += *(p++); - s[i] = x; - } - s[284] -= s[512]; - s[285] = s[512]; + s[265] += s[266]; + s[266] = s[267] + s[268]; + s[267] = s[269] + s[270]; + s[268] = s[271] + s[272]; + s[269] = s[273] + s[274] + s[275] + s[276]; + s[270] = s[277] + s[278] + s[279] + s[280]; + s[271] = s[281] + s[282] + s[283] + s[284]; + s[272] = s[285] + s[286] + s[287] + s[288]; + p = s + 289; + for (i = 273; i < 277; i++) { + x = *(p++); + for (j = 1; j < 8; j++) + x += *(p++); + s[i] = x; + } + for (; i < 281; i++) { + x = *(p++); + for (j = 1; j < 16; j++) + x += *(p++); + s[i] = x; + } + for (; i < 285; i++) { + x = *(p++); + for (j = 1; j < 32; j++) + x += *(p++); + s[i] = x; + } + s[284] -= s[512]; + s[285] = s[512]; } diff --git a/igzip/flatten_ll.h b/igzip/flatten_ll.h index 9aaf8910..4402795c 100644 --- a/igzip/flatten_ll.h +++ b/igzip/flatten_ll.h @@ -1,3 +1,4 @@ #include -void flatten_ll(uint32_t *ll_hist); +void +flatten_ll(uint32_t *ll_hist); diff --git a/igzip/generate_custom_hufftables.c b/igzip/generate_custom_hufftables.c index 102fe923..622e4330 100644 --- a/igzip/generate_custom_hufftables.c +++ b/igzip/generate_custom_hufftables.c @@ -72,9 +72,9 @@ #define MAX_HEADER_SIZE ISAL_DEF_MAX_HDR_SIZE -#define GZIP_HEADER_SIZE 10 +#define GZIP_HEADER_SIZE 10 #define GZIP_TRAILER_SIZE 8 -#define ZLIB_HEADER_SIZE 2 +#define ZLIB_HEADER_SIZE 2 #define ZLIB_TRAILER_SIZE 4 /** @@ -86,26 +86,26 @@ * @param footer: footer to append at the end of the table. * @param begin_line: string printed at beginning of new line */ -void fprint_uint8_table(FILE * outfile, uint8_t * table, uint64_t length, char *header, - char *footer, char *begin_line) +void +fprint_uint8_table(FILE *outfile, uint8_t *table, uint64_t length, char *header, char *footer, + char *begin_line) { - int i; - fprintf(outfile, "%s", header); - for (i = 0; i < length - 1; i++) { - if ((i & 7) == 0) - fprintf(outfile, "\n%s", begin_line); - else - fprintf(outfile, " "); - fprintf(outfile, "0x%02x,", table[i]); - } - - if ((i & 7) == 0) - fprintf(outfile, "\n%s", begin_line); - else - fprintf(outfile, " "); - fprintf(outfile, "0x%02x", table[i]); - fprintf(outfile, "%s", footer); - + int i; + fprintf(outfile, "%s", header); + for (i = 0; i < length - 1; i++) { + if ((i & 7) == 0) + fprintf(outfile, "\n%s", begin_line); + else + fprintf(outfile, " "); + fprintf(outfile, "0x%02x,", table[i]); + } + + if ((i & 7) == 0) + fprintf(outfile, "\n%s", begin_line); + else + fprintf(outfile, " "); + fprintf(outfile, "0x%02x", table[i]); + fprintf(outfile, "%s", footer); } /** @@ -117,26 +117,26 @@ void fprint_uint8_table(FILE * outfile, uint8_t * table, uint64_t length, char * * @param footer: footer to append at the end of the table. * @param begin_line: string printed at beginning of new line */ -void fprint_uint16_table(FILE * outfile, uint16_t * table, uint64_t length, char *header, - char *footer, char *begin_line) +void +fprint_uint16_table(FILE *outfile, uint16_t *table, uint64_t length, char *header, char *footer, + char *begin_line) { - int i; - fprintf(outfile, "%s", header); - for (i = 0; i < length - 1; i++) { - if ((i & 7) == 0) - fprintf(outfile, "\n%s", begin_line); - else - fprintf(outfile, " "); - fprintf(outfile, "0x%04x,", table[i]); - } - - if ((i & 7) == 0) - fprintf(outfile, "\n%s", begin_line); - else - fprintf(outfile, " "); - fprintf(outfile, "0x%04x", table[i]); - fprintf(outfile, "%s", footer); - + int i; + fprintf(outfile, "%s", header); + for (i = 0; i < length - 1; i++) { + if ((i & 7) == 0) + fprintf(outfile, "\n%s", begin_line); + else + fprintf(outfile, " "); + fprintf(outfile, "0x%04x,", table[i]); + } + + if ((i & 7) == 0) + fprintf(outfile, "\n%s", begin_line); + else + fprintf(outfile, " "); + fprintf(outfile, "0x%04x", table[i]); + fprintf(outfile, "%s", footer); } /** @@ -148,341 +148,348 @@ void fprint_uint16_table(FILE * outfile, uint16_t * table, uint64_t length, char * @param footer: footer to append at the end of the table. * @param begin_line: string printed at beginning of new line */ -void fprint_uint32_table(FILE * outfile, uint32_t * table, uint64_t length, char *header, - char *footer, char *begin_line) +void +fprint_uint32_table(FILE *outfile, uint32_t *table, uint64_t length, char *header, char *footer, + char *begin_line) { - int i; - fprintf(outfile, "%s", header); - for (i = 0; i < length - 1; i++) { - if ((i & 3) == 0) - fprintf(outfile, "\n%s", begin_line); - else - fprintf(outfile, " "); - fprintf(outfile, "0x%08x,", table[i]); - } - - if ((i & 3) == 0) - fprintf(outfile, "%s", begin_line); - else - fprintf(outfile, " "); - fprintf(outfile, "0x%08x", table[i]); - fprintf(outfile, "%s", footer); - + int i; + fprintf(outfile, "%s", header); + for (i = 0; i < length - 1; i++) { + if ((i & 3) == 0) + fprintf(outfile, "\n%s", begin_line); + else + fprintf(outfile, " "); + fprintf(outfile, "0x%08x,", table[i]); + } + + if ((i & 3) == 0) + fprintf(outfile, "%s", begin_line); + else + fprintf(outfile, " "); + fprintf(outfile, "0x%08x", table[i]); + fprintf(outfile, "%s", footer); } -void fprint_hufftables(FILE * output_file, char *hufftables_name, - struct isal_hufftables *hufftables) +void +fprint_hufftables(FILE *output_file, char *hufftables_name, struct isal_hufftables *hufftables) { - fprintf(output_file, "struct isal_hufftables %s = {\n\n", hufftables_name); - - fprint_uint8_table(output_file, hufftables->deflate_hdr, - hufftables->deflate_hdr_count + - (hufftables->deflate_hdr_extra_bits + 7) / 8, - "\t.deflate_hdr = {", "},\n\n", "\t\t"); - - fprintf(output_file, "\t.deflate_hdr_count = %d,\n", hufftables->deflate_hdr_count); - fprintf(output_file, "\t.deflate_hdr_extra_bits = %d,\n\n", - hufftables->deflate_hdr_extra_bits); - - fprint_uint32_table(output_file, hufftables->dist_table, IGZIP_DIST_TABLE_SIZE, - "\t.dist_table = {", "},\n\n", "\t\t"); - - fprint_uint32_table(output_file, hufftables->len_table, IGZIP_LEN_TABLE_SIZE, - "\t.len_table = {", "},\n\n", "\t\t"); - - fprint_uint16_table(output_file, hufftables->lit_table, IGZIP_LIT_TABLE_SIZE, - "\t.lit_table = {", "},\n\n", "\t\t"); - fprint_uint8_table(output_file, hufftables->lit_table_sizes, IGZIP_LIT_TABLE_SIZE, - "\t.lit_table_sizes = {", "},\n\n", "\t\t"); - - fprint_uint16_table(output_file, hufftables->dcodes, - ISAL_DEF_DIST_SYMBOLS - IGZIP_DECODE_OFFSET, - "\t.dcodes = {", "},\n\n", "\t\t"); - fprint_uint8_table(output_file, hufftables->dcodes_sizes, - ISAL_DEF_DIST_SYMBOLS - IGZIP_DECODE_OFFSET, - "\t.dcodes_sizes = {", "}\n", "\t\t"); - fprintf(output_file, "};\n"); + fprintf(output_file, "struct isal_hufftables %s = {\n\n", hufftables_name); + + fprint_uint8_table(output_file, hufftables->deflate_hdr, + hufftables->deflate_hdr_count + + (hufftables->deflate_hdr_extra_bits + 7) / 8, + "\t.deflate_hdr = {", "},\n\n", "\t\t"); + + fprintf(output_file, "\t.deflate_hdr_count = %d,\n", hufftables->deflate_hdr_count); + fprintf(output_file, "\t.deflate_hdr_extra_bits = %d,\n\n", + hufftables->deflate_hdr_extra_bits); + + fprint_uint32_table(output_file, hufftables->dist_table, IGZIP_DIST_TABLE_SIZE, + "\t.dist_table = {", "},\n\n", "\t\t"); + + fprint_uint32_table(output_file, hufftables->len_table, IGZIP_LEN_TABLE_SIZE, + "\t.len_table = {", "},\n\n", "\t\t"); + + fprint_uint16_table(output_file, hufftables->lit_table, IGZIP_LIT_TABLE_SIZE, + "\t.lit_table = {", "},\n\n", "\t\t"); + fprint_uint8_table(output_file, hufftables->lit_table_sizes, IGZIP_LIT_TABLE_SIZE, + "\t.lit_table_sizes = {", "},\n\n", "\t\t"); + + fprint_uint16_table(output_file, hufftables->dcodes, + ISAL_DEF_DIST_SYMBOLS - IGZIP_DECODE_OFFSET, "\t.dcodes = {", "},\n\n", + "\t\t"); + fprint_uint8_table(output_file, hufftables->dcodes_sizes, + ISAL_DEF_DIST_SYMBOLS - IGZIP_DECODE_OFFSET, "\t.dcodes_sizes = {", + "}\n", "\t\t"); + fprintf(output_file, "};\n"); } -void fprint_header(FILE * output_file) +void +fprint_header(FILE *output_file) { - fprintf(output_file, "#include \n"); - fprintf(output_file, "#include \n\n"); + fprintf(output_file, "#include \n"); + fprintf(output_file, "#include \n\n"); - fprintf(output_file, "#if IGZIP_HIST_SIZE > %d\n" - "# error \"Invalid history size for the custom hufftable\"\n" - "#endif\n", IGZIP_HIST_SIZE); + fprintf(output_file, + "#if IGZIP_HIST_SIZE > %d\n" + "# error \"Invalid history size for the custom hufftable\"\n" + "#endif\n", + IGZIP_HIST_SIZE); #ifdef LONGER_HUFFTABLE - fprintf(output_file, "#ifndef LONGER_HUFFTABLE\n" - "# error \"Custom hufftable requires LONGER_HUFFTABLE to be defined \"\n" - "#endif\n"); + fprintf(output_file, + "#ifndef LONGER_HUFFTABLE\n" + "# error \"Custom hufftable requires LONGER_HUFFTABLE to be defined \"\n" + "#endif\n"); #else - fprintf(output_file, "#ifdef LONGER_HUFFTABLE\n" - "# error \"Custom hufftable requires LONGER_HUFFTABLE to not be defined \"\n" - "#endif\n"); + fprintf(output_file, + "#ifdef LONGER_HUFFTABLE\n" + "# error \"Custom hufftable requires LONGER_HUFFTABLE to not be defined \"\n" + "#endif\n"); #endif - fprintf(output_file, "\n"); + fprintf(output_file, "\n"); - fprintf(output_file, "const uint8_t gzip_hdr[] = {\n" - "\t0x1f, 0x8b, 0x08, 0x00, 0x00,\n" "\t0x00, 0x00, 0x00, 0x00, 0xff\t};\n\n"); + fprintf(output_file, "const uint8_t gzip_hdr[] = {\n" + "\t0x1f, 0x8b, 0x08, 0x00, 0x00,\n" + "\t0x00, 0x00, 0x00, 0x00, 0xff\t};\n\n"); - fprintf(output_file, "const uint32_t gzip_hdr_bytes = %d;\n", GZIP_HEADER_SIZE); - fprintf(output_file, "const uint32_t gzip_trl_bytes = %d;\n\n", GZIP_TRAILER_SIZE); + fprintf(output_file, "const uint32_t gzip_hdr_bytes = %d;\n", GZIP_HEADER_SIZE); + fprintf(output_file, "const uint32_t gzip_trl_bytes = %d;\n\n", GZIP_TRAILER_SIZE); - fprintf(output_file, "const uint8_t zlib_hdr[] = { 0x78, 0x01 };\n\n"); - fprintf(output_file, "const uint32_t zlib_hdr_bytes = %d;\n", ZLIB_HEADER_SIZE); - fprintf(output_file, "const uint32_t zlib_trl_bytes = %d;\n", ZLIB_TRAILER_SIZE); + fprintf(output_file, "const uint8_t zlib_hdr[] = { 0x78, 0x01 };\n\n"); + fprintf(output_file, "const uint32_t zlib_hdr_bytes = %d;\n", ZLIB_HEADER_SIZE); + fprintf(output_file, "const uint32_t zlib_trl_bytes = %d;\n", ZLIB_TRAILER_SIZE); } -static uint32_t convert_dist_to_dist_sym(uint32_t dist) +static uint32_t +convert_dist_to_dist_sym(uint32_t dist) { - assert(dist <= 32768 && dist > 0); - if (dist <= 32768) { - uint32_t msb = dist > 4 ? bsr(dist - 1) - 2 : 0; - return (msb * 2) + ((dist - 1) >> msb); - } else { - return ~0; - } + assert(dist <= 32768 && dist > 0); + if (dist <= 32768) { + uint32_t msb = dist > 4 ? bsr(dist - 1) - 2 : 0; + return (msb * 2) + ((dist - 1) >> msb); + } else { + return ~0; + } } /** * @brief Returns the deflate symbol value for a repeat length. */ -static uint32_t convert_length_to_len_sym(uint32_t length) +static uint32_t +convert_length_to_len_sym(uint32_t length) { - assert(length > 2 && length < 259); - - /* Based on tables on page 11 in RFC 1951 */ - if (length < 11) - return 257 + length - 3; - else if (length < 19) - return 261 + (length - 3) / 2; - else if (length < 35) - return 265 + (length - 3) / 4; - else if (length < 67) - return 269 + (length - 3) / 8; - else if (length < 131) - return 273 + (length - 3) / 16; - else if (length < 258) - return 277 + (length - 3) / 32; - else - return 285; + assert(length > 2 && length < 259); + + /* Based on tables on page 11 in RFC 1951 */ + if (length < 11) + return 257 + length - 3; + else if (length < 19) + return 261 + (length - 3) / 2; + else if (length < 35) + return 265 + (length - 3) / 4; + else if (length < 67) + return 269 + (length - 3) / 8; + else if (length < 131) + return 273 + (length - 3) / 16; + else if (length < 258) + return 277 + (length - 3) / 32; + else + return 285; } -void isal_update_histogram_dict(uint8_t * start_stream, int dict_length, int length, - struct isal_huff_histogram *histogram) +void +isal_update_histogram_dict(uint8_t *start_stream, int dict_length, int length, + struct isal_huff_histogram *histogram) { - uint32_t literal = 0, hash; - uint16_t seen, *last_seen = histogram->hash_table; - uint8_t *current, *end_stream, *next_hash, *end, *end_dict; - uint32_t match_length; - uint32_t dist; - uint64_t *lit_len_histogram = histogram->lit_len_histogram; - uint64_t *dist_histogram = histogram->dist_histogram; - - if (length <= 0) - return; - - end_stream = start_stream + dict_length + length; - end_dict = start_stream + dict_length; - - memset(last_seen, 0, sizeof(histogram->hash_table)); /* Initialize last_seen to be 0. */ - - for (current = start_stream; current < end_dict - 4; current++) { - literal = load_le_u32(current); - hash = compute_hash(literal) & LVL0_HASH_MASK; - last_seen[hash] = (current - start_stream) & 0xFFFF; - } - - for (current = start_stream + dict_length; current < end_stream - 3; current++) { - literal = load_le_u32(current); - hash = compute_hash(literal) & LVL0_HASH_MASK; - seen = last_seen[hash]; - last_seen[hash] = (current - start_stream) & 0xFFFF; - dist = (current - start_stream - seen) & 0xFFFF; - if (dist - 1 < D - 1) { - assert(start_stream <= current - dist); - match_length = - compare258(current - dist, current, end_stream - current); - if (match_length >= SHORTEST_MATCH) { - next_hash = current; + uint32_t literal = 0, hash; + uint16_t seen, *last_seen = histogram->hash_table; + uint8_t *current, *end_stream, *next_hash, *end, *end_dict; + uint32_t match_length; + uint32_t dist; + uint64_t *lit_len_histogram = histogram->lit_len_histogram; + uint64_t *dist_histogram = histogram->dist_histogram; + + if (length <= 0) + return; + + end_stream = start_stream + dict_length + length; + end_dict = start_stream + dict_length; + + memset(last_seen, 0, sizeof(histogram->hash_table)); /* Initialize last_seen to be 0. */ + + for (current = start_stream; current < end_dict - 4; current++) { + literal = load_le_u32(current); + hash = compute_hash(literal) & LVL0_HASH_MASK; + last_seen[hash] = (current - start_stream) & 0xFFFF; + } + + for (current = start_stream + dict_length; current < end_stream - 3; current++) { + literal = load_le_u32(current); + hash = compute_hash(literal) & LVL0_HASH_MASK; + seen = last_seen[hash]; + last_seen[hash] = (current - start_stream) & 0xFFFF; + dist = (current - start_stream - seen) & 0xFFFF; + if (dist - 1 < D - 1) { + assert(start_stream <= current - dist); + match_length = compare258(current - dist, current, end_stream - current); + if (match_length >= SHORTEST_MATCH) { + next_hash = current; #ifdef ISAL_LIMIT_HASH_UPDATE - end = next_hash + 3; + end = next_hash + 3; #else - end = next_hash + match_length; + end = next_hash + match_length; #endif - if (end > end_stream - 3) - end = end_stream - 3; - next_hash++; - for (; next_hash < end; next_hash++) { - literal = load_le_u32(next_hash); - hash = compute_hash(literal) & LVL0_HASH_MASK; - last_seen[hash] = (next_hash - start_stream) & 0xFFFF; - } - - dist_histogram[convert_dist_to_dist_sym(dist)] += 1; - lit_len_histogram[convert_length_to_len_sym(match_length)] += - 1; - current += match_length - 1; - continue; - } - } - lit_len_histogram[literal & 0xFF] += 1; - } - - for (; current < end_stream; current++) - lit_len_histogram[*current] += 1; - - lit_len_histogram[256] += 1; - return; + if (end > end_stream - 3) + end = end_stream - 3; + next_hash++; + for (; next_hash < end; next_hash++) { + literal = load_le_u32(next_hash); + hash = compute_hash(literal) & LVL0_HASH_MASK; + last_seen[hash] = (next_hash - start_stream) & 0xFFFF; + } + + dist_histogram[convert_dist_to_dist_sym(dist)] += 1; + lit_len_histogram[convert_length_to_len_sym(match_length)] += 1; + current += match_length - 1; + continue; + } + } + lit_len_histogram[literal & 0xFF] += 1; + } + + for (; current < end_stream; current++) + lit_len_histogram[*current] += 1; + + lit_len_histogram[256] += 1; + return; } -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - long int file_length; - int argi = 1; - uint8_t *stream = NULL; - struct isal_hufftables hufftables; - struct isal_huff_histogram histogram; - struct isal_zstream tmp_stream; - FILE *file = NULL; - FILE *dict_file = NULL; - FILE *hist_file = NULL; - long int dict_file_length = 0; - long int hist_file_length = 0; - uint8_t *dict_stream = NULL; - - if (argc == 1) { - printf("Error, no input file.\n"); - return 1; - } - - if (argc > 3 && argv[1][0] == '-' && argv[1][1] == 'd') { - dict_file = fopen(argv[2], "r"); - if (dict_file == NULL) { - printf("File \"%s\" open error!\n", argv[2]); - return 1; - } - - fseek(dict_file, 0, SEEK_END); - dict_file_length = ftell(dict_file); - fseek(dict_file, 0, SEEK_SET); - dict_file_length -= ftell(dict_file); - dict_stream = malloc(dict_file_length); - if (dict_stream == NULL) { - printf("Failed to allocate memory to read in dictionary file\n"); - fclose(dict_file); - return 1; - } - if (fread(dict_stream, 1, dict_file_length, dict_file) != dict_file_length) { - printf("Error occurred when reading dictionary file"); - fclose(dict_file); - free(dict_stream); - return 1; - } - isal_update_histogram(dict_stream, dict_file_length, &histogram); - - printf("Read %ld bytes of dictionary file %s\n", dict_file_length, argv[2]); - argi += 2; - fclose(dict_file); - free(dict_stream); - } - - if ((argc > argi + 1) && argv[argi][0] == '-' && argv[argi][1] == 'h') { - hist_file = fopen(argv[argi + 1], "r+"); - if (hist_file == NULL) { - printf("File \"%s\" open error!\n", argv[argi + 1]); - return 1; - } - fseek(hist_file, 0, SEEK_END); - hist_file_length = ftell(hist_file); - fseek(hist_file, 0, SEEK_SET); - hist_file_length -= ftell(hist_file); - if (hist_file_length > sizeof(histogram)) { - printf("Histogram file too long\n"); - return 1; - } - if (fread(&histogram, 1, hist_file_length, hist_file) != hist_file_length) { - printf("Error occurred when reading history file"); - fclose(hist_file); - return 1; - } - fseek(hist_file, 0, SEEK_SET); - - printf("Read %ld bytes of history file %s\n", hist_file_length, - argv[argi + 1]); - argi += 2; - } else - memset(&histogram, 0, sizeof(histogram)); /* Initialize histograms. */ - - while (argi < argc) { - printf("Processing %s\n", argv[argi]); - file = fopen(argv[argi], "r"); - if (file == NULL) { - printf("Error opening file\n"); - return 1; - } - fseek(file, 0, SEEK_END); - file_length = ftell(file); - fseek(file, 0, SEEK_SET); - file_length -= ftell(file); - stream = malloc(file_length + dict_file_length); - if (stream == NULL) { - printf("Failed to allocate memory to read in file\n"); - fclose(file); - return 1; - } - if (dict_file_length > 0) - memcpy(stream, dict_stream, dict_file_length); - - if (fread(&stream[dict_file_length], 1, file_length, file) != file_length) { - printf("Error occurred when reading file"); - fclose(file); - free(stream); - return 1; - } - - /* Create a histogram of frequency of symbols found in stream to - * generate the huffman tree.*/ - if (0 == dict_file_length) - isal_update_histogram(stream, file_length, &histogram); - else - isal_update_histogram_dict(stream, dict_file_length, file_length, - &histogram); - - fclose(file); - free(stream); - argi++; - } - - isal_create_hufftables(&hufftables, &histogram); - - file = fopen("hufftables_c.c", "w"); - if (file == NULL) { - printf("Error creating file hufftables_c.c\n"); - return 1; - } - - fprint_header(file); - - fprintf(file, "\n"); - - fprint_hufftables(file, "hufftables_default", &hufftables); - - fprintf(file, "\n"); - - isal_deflate_stateless_init(&tmp_stream); - isal_deflate_set_hufftables(&tmp_stream, NULL, IGZIP_HUFFTABLE_STATIC); - fprint_hufftables(file, "hufftables_static", tmp_stream.hufftables); - - fclose(file); - - if (hist_file) { - int len = fwrite(&histogram, 1, sizeof(histogram), hist_file); - printf("wrote %d bytes of histogram file\n", len); - fclose(hist_file); - } - return 0; + long int file_length; + int argi = 1; + uint8_t *stream = NULL; + struct isal_hufftables hufftables; + struct isal_huff_histogram histogram; + struct isal_zstream tmp_stream; + FILE *file = NULL; + FILE *dict_file = NULL; + FILE *hist_file = NULL; + long int dict_file_length = 0; + long int hist_file_length = 0; + uint8_t *dict_stream = NULL; + + if (argc == 1) { + printf("Error, no input file.\n"); + return 1; + } + + if (argc > 3 && argv[1][0] == '-' && argv[1][1] == 'd') { + dict_file = fopen(argv[2], "r"); + if (dict_file == NULL) { + printf("File \"%s\" open error!\n", argv[2]); + return 1; + } + + fseek(dict_file, 0, SEEK_END); + dict_file_length = ftell(dict_file); + fseek(dict_file, 0, SEEK_SET); + dict_file_length -= ftell(dict_file); + dict_stream = malloc(dict_file_length); + if (dict_stream == NULL) { + printf("Failed to allocate memory to read in dictionary file\n"); + fclose(dict_file); + return 1; + } + if (fread(dict_stream, 1, dict_file_length, dict_file) != dict_file_length) { + printf("Error occurred when reading dictionary file"); + fclose(dict_file); + free(dict_stream); + return 1; + } + isal_update_histogram(dict_stream, dict_file_length, &histogram); + + printf("Read %ld bytes of dictionary file %s\n", dict_file_length, argv[2]); + argi += 2; + fclose(dict_file); + free(dict_stream); + } + + if ((argc > argi + 1) && argv[argi][0] == '-' && argv[argi][1] == 'h') { + hist_file = fopen(argv[argi + 1], "r+"); + if (hist_file == NULL) { + printf("File \"%s\" open error!\n", argv[argi + 1]); + return 1; + } + fseek(hist_file, 0, SEEK_END); + hist_file_length = ftell(hist_file); + fseek(hist_file, 0, SEEK_SET); + hist_file_length -= ftell(hist_file); + if (hist_file_length > sizeof(histogram)) { + printf("Histogram file too long\n"); + return 1; + } + if (fread(&histogram, 1, hist_file_length, hist_file) != hist_file_length) { + printf("Error occurred when reading history file"); + fclose(hist_file); + return 1; + } + fseek(hist_file, 0, SEEK_SET); + + printf("Read %ld bytes of history file %s\n", hist_file_length, argv[argi + 1]); + argi += 2; + } else + memset(&histogram, 0, sizeof(histogram)); /* Initialize histograms. */ + + while (argi < argc) { + printf("Processing %s\n", argv[argi]); + file = fopen(argv[argi], "r"); + if (file == NULL) { + printf("Error opening file\n"); + return 1; + } + fseek(file, 0, SEEK_END); + file_length = ftell(file); + fseek(file, 0, SEEK_SET); + file_length -= ftell(file); + stream = malloc(file_length + dict_file_length); + if (stream == NULL) { + printf("Failed to allocate memory to read in file\n"); + fclose(file); + return 1; + } + if (dict_file_length > 0) + memcpy(stream, dict_stream, dict_file_length); + + if (fread(&stream[dict_file_length], 1, file_length, file) != file_length) { + printf("Error occurred when reading file"); + fclose(file); + free(stream); + return 1; + } + + /* Create a histogram of frequency of symbols found in stream to + * generate the huffman tree.*/ + if (0 == dict_file_length) + isal_update_histogram(stream, file_length, &histogram); + else + isal_update_histogram_dict(stream, dict_file_length, file_length, + &histogram); + + fclose(file); + free(stream); + argi++; + } + + isal_create_hufftables(&hufftables, &histogram); + + file = fopen("hufftables_c.c", "w"); + if (file == NULL) { + printf("Error creating file hufftables_c.c\n"); + return 1; + } + + fprint_header(file); + + fprintf(file, "\n"); + + fprint_hufftables(file, "hufftables_default", &hufftables); + + fprintf(file, "\n"); + + isal_deflate_stateless_init(&tmp_stream); + isal_deflate_set_hufftables(&tmp_stream, NULL, IGZIP_HUFFTABLE_STATIC); + fprint_hufftables(file, "hufftables_static", tmp_stream.hufftables); + + fclose(file); + + if (hist_file) { + int len = fwrite(&histogram, 1, sizeof(histogram), hist_file); + printf("wrote %d bytes of histogram file\n", len); + fclose(hist_file); + } + return 0; } diff --git a/igzip/generate_static_inflate.c b/igzip/generate_static_inflate.c index 39176776..4235d3ae 100644 --- a/igzip/generate_static_inflate.c +++ b/igzip/generate_static_inflate.c @@ -35,7 +35,7 @@ #include "igzip_lib.h" #define STATIC_INFLATE_FILE "static_inflate.h" -#define DOUBLE_SYM_THRESH (4 * 1024) +#define DOUBLE_SYM_THRESH (4 * 1024) extern struct isal_hufftables hufftables_default; @@ -48,26 +48,26 @@ extern struct isal_hufftables hufftables_default; * @param footer: footer to append at the end of the table. * @param begin_line: string printed at beginning of new line */ -void fprint_uint16_table(FILE * outfile, uint16_t * table, uint64_t length, char *header, - char *footer, char *begin_line) +void +fprint_uint16_table(FILE *outfile, uint16_t *table, uint64_t length, char *header, char *footer, + char *begin_line) { - int i; - fprintf(outfile, "%s", header); - for (i = 0; i < length - 1; i++) { - if ((i & 7) == 0) - fprintf(outfile, "\n%s", begin_line); - else - fprintf(outfile, " "); - fprintf(outfile, "0x%04x,", table[i]); - } - - if ((i & 7) == 0) - fprintf(outfile, "\n%s", begin_line); - else - fprintf(outfile, " "); - fprintf(outfile, "0x%04x", table[i]); - fprintf(outfile, "%s", footer); - + int i; + fprintf(outfile, "%s", header); + for (i = 0; i < length - 1; i++) { + if ((i & 7) == 0) + fprintf(outfile, "\n%s", begin_line); + else + fprintf(outfile, " "); + fprintf(outfile, "0x%04x,", table[i]); + } + + if ((i & 7) == 0) + fprintf(outfile, "\n%s", begin_line); + else + fprintf(outfile, " "); + fprintf(outfile, "0x%04x", table[i]); + fprintf(outfile, "%s", footer); } /** @@ -79,127 +79,130 @@ void fprint_uint16_table(FILE * outfile, uint16_t * table, uint64_t length, char * @param footer: footer to append at the end of the table. * @param begin_line: string printed at beginning of new line */ -void fprint_uint32_table(FILE * outfile, uint32_t * table, uint64_t length, char *header, - char *footer, char *begin_line) +void +fprint_uint32_table(FILE *outfile, uint32_t *table, uint64_t length, char *header, char *footer, + char *begin_line) { - int i; - fprintf(outfile, "%s", header); - for (i = 0; i < length - 1; i++) { - if ((i & 3) == 0) - fprintf(outfile, "\n%s", begin_line); - else - fprintf(outfile, " "); - fprintf(outfile, "0x%08x,", table[i]); - } - - if ((i & 3) == 0) - fprintf(outfile, "%s", begin_line); - else - fprintf(outfile, " "); - fprintf(outfile, "0x%08x", table[i]); - fprintf(outfile, "%s", footer); - + int i; + fprintf(outfile, "%s", header); + for (i = 0; i < length - 1; i++) { + if ((i & 3) == 0) + fprintf(outfile, "\n%s", begin_line); + else + fprintf(outfile, " "); + fprintf(outfile, "0x%08x,", table[i]); + } + + if ((i & 3) == 0) + fprintf(outfile, "%s", begin_line); + else + fprintf(outfile, " "); + fprintf(outfile, "0x%08x", table[i]); + fprintf(outfile, "%s", footer); } -void fprint_header(FILE * output_file) +void +fprint_header(FILE *output_file) { - fprintf(output_file, "#include \"igzip_lib.h\"\n\n"); - fprintf(output_file, "#define LONG_BITS_CHECK %d\n", ISAL_DECODE_LONG_BITS); - fprintf(output_file, "#define SHORT_BITS_CHECK %d\n", ISAL_DECODE_SHORT_BITS); - fprintf(output_file, - "#if (LONG_BITS_CHECK == ISAL_DECODE_LONG_BITS) && (SHORT_BITS_CHECK == ISAL_DECODE_SHORT_BITS)\n" - "# define ISAL_STATIC_INFLATE_TABLE\n" - "#else\n" - "# warning \"Incompatible compile time defines for optimized static inflate table.\"\n" - "#endif\n\n"); + fprintf(output_file, "#include \"igzip_lib.h\"\n\n"); + fprintf(output_file, "#define LONG_BITS_CHECK %d\n", ISAL_DECODE_LONG_BITS); + fprintf(output_file, "#define SHORT_BITS_CHECK %d\n", ISAL_DECODE_SHORT_BITS); + fprintf(output_file, "#if (LONG_BITS_CHECK == ISAL_DECODE_LONG_BITS) && (SHORT_BITS_CHECK " + "== ISAL_DECODE_SHORT_BITS)\n" + "# define ISAL_STATIC_INFLATE_TABLE\n" + "#else\n" + "# warning \"Incompatible compile time defines for optimized static " + "inflate table.\"\n" + "#endif\n\n"); } -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - struct inflate_state state; - FILE *file; - uint8_t static_deflate_hdr = 3; - uint8_t tmp_space[8], *in_buf; - - if (NULL == (in_buf = malloc(DOUBLE_SYM_THRESH + 1))) { - printf("Can not allocote memory\n"); - return 1; - } - - isal_inflate_init(&state); - - memcpy(in_buf, &static_deflate_hdr, sizeof(static_deflate_hdr)); - state.next_in = in_buf; - state.avail_in = DOUBLE_SYM_THRESH + 1; - state.next_out = tmp_space; - state.avail_out = sizeof(tmp_space); - - isal_inflate(&state); - - file = fopen(STATIC_INFLATE_FILE, "w"); - - if (file == NULL) { - printf("Error creating file hufftables_c.c\n"); - return 1; - } - // Add decode tables describing a type 2 static (fixed) header - - fprintf(file, "#ifndef STATIC_HEADER_H\n" "#define STATIC_HEADER_H\n\n"); - - fprint_header(file); - - fprintf(file, "struct inflate_huff_code_large static_lit_huff_code = {\n"); - fprint_uint32_table(file, state.lit_huff_code.short_code_lookup, - sizeof(state.lit_huff_code.short_code_lookup) / sizeof(uint32_t), - "\t.short_code_lookup = {", "\t},\n\n", "\t\t"); - fprint_uint16_table(file, state.lit_huff_code.long_code_lookup, - sizeof(state.lit_huff_code.long_code_lookup) / sizeof(uint16_t), - "\t.long_code_lookup = {", "\t}\n", "\t\t"); - fprintf(file, "};\n\n"); - - fprintf(file, "struct inflate_huff_code_small static_dist_huff_code = {\n"); - fprint_uint16_table(file, state.dist_huff_code.short_code_lookup, - sizeof(state.dist_huff_code.short_code_lookup) / sizeof(uint16_t), - "\t.short_code_lookup = {", "\t},\n\n", "\t\t"); - fprint_uint16_table(file, state.dist_huff_code.long_code_lookup, - sizeof(state.dist_huff_code.long_code_lookup) / sizeof(uint16_t), - "\t.long_code_lookup = {", "\t}\n", "\t\t"); - fprintf(file, "};\n\n"); - - fprintf(file, "#endif\n"); - - // Add other tables for known dynamic headers - level 0 - - isal_inflate_init(&state); - - memcpy(in_buf, &hufftables_default.deflate_hdr, - sizeof(hufftables_default.deflate_hdr)); - state.next_in = in_buf; - state.avail_in = DOUBLE_SYM_THRESH + 1; - state.next_out = tmp_space; - state.avail_out = sizeof(tmp_space); - - isal_inflate(&state); - - fprintf(file, "struct inflate_huff_code_large pregen_lit_huff_code = {\n"); - fprint_uint32_table(file, state.lit_huff_code.short_code_lookup, - sizeof(state.lit_huff_code.short_code_lookup) / sizeof(uint32_t), - "\t.short_code_lookup = {", "\t},\n\n", "\t\t"); - fprint_uint16_table(file, state.lit_huff_code.long_code_lookup, - sizeof(state.lit_huff_code.long_code_lookup) / sizeof(uint16_t), - "\t.long_code_lookup = {", "\t}\n", "\t\t"); - fprintf(file, "};\n\n"); - - fprintf(file, "struct inflate_huff_code_small pregen_dist_huff_code = {\n"); - fprint_uint16_table(file, state.dist_huff_code.short_code_lookup, - sizeof(state.dist_huff_code.short_code_lookup) / sizeof(uint16_t), - "\t.short_code_lookup = {", "\t},\n\n", "\t\t"); - fprint_uint16_table(file, state.dist_huff_code.long_code_lookup, - sizeof(state.dist_huff_code.long_code_lookup) / sizeof(uint16_t), - "\t.long_code_lookup = {", "\t}\n", "\t\t"); - fprintf(file, "};\n\n"); - - fclose(file); - free(in_buf); - return 0; + struct inflate_state state; + FILE *file; + uint8_t static_deflate_hdr = 3; + uint8_t tmp_space[8], *in_buf; + + if (NULL == (in_buf = malloc(DOUBLE_SYM_THRESH + 1))) { + printf("Can not allocote memory\n"); + return 1; + } + + isal_inflate_init(&state); + + memcpy(in_buf, &static_deflate_hdr, sizeof(static_deflate_hdr)); + state.next_in = in_buf; + state.avail_in = DOUBLE_SYM_THRESH + 1; + state.next_out = tmp_space; + state.avail_out = sizeof(tmp_space); + + isal_inflate(&state); + + file = fopen(STATIC_INFLATE_FILE, "w"); + + if (file == NULL) { + printf("Error creating file hufftables_c.c\n"); + return 1; + } + // Add decode tables describing a type 2 static (fixed) header + + fprintf(file, "#ifndef STATIC_HEADER_H\n" + "#define STATIC_HEADER_H\n\n"); + + fprint_header(file); + + fprintf(file, "struct inflate_huff_code_large static_lit_huff_code = {\n"); + fprint_uint32_table(file, state.lit_huff_code.short_code_lookup, + sizeof(state.lit_huff_code.short_code_lookup) / sizeof(uint32_t), + "\t.short_code_lookup = {", "\t},\n\n", "\t\t"); + fprint_uint16_table(file, state.lit_huff_code.long_code_lookup, + sizeof(state.lit_huff_code.long_code_lookup) / sizeof(uint16_t), + "\t.long_code_lookup = {", "\t}\n", "\t\t"); + fprintf(file, "};\n\n"); + + fprintf(file, "struct inflate_huff_code_small static_dist_huff_code = {\n"); + fprint_uint16_table(file, state.dist_huff_code.short_code_lookup, + sizeof(state.dist_huff_code.short_code_lookup) / sizeof(uint16_t), + "\t.short_code_lookup = {", "\t},\n\n", "\t\t"); + fprint_uint16_table(file, state.dist_huff_code.long_code_lookup, + sizeof(state.dist_huff_code.long_code_lookup) / sizeof(uint16_t), + "\t.long_code_lookup = {", "\t}\n", "\t\t"); + fprintf(file, "};\n\n"); + + fprintf(file, "#endif\n"); + + // Add other tables for known dynamic headers - level 0 + + isal_inflate_init(&state); + + memcpy(in_buf, &hufftables_default.deflate_hdr, sizeof(hufftables_default.deflate_hdr)); + state.next_in = in_buf; + state.avail_in = DOUBLE_SYM_THRESH + 1; + state.next_out = tmp_space; + state.avail_out = sizeof(tmp_space); + + isal_inflate(&state); + + fprintf(file, "struct inflate_huff_code_large pregen_lit_huff_code = {\n"); + fprint_uint32_table(file, state.lit_huff_code.short_code_lookup, + sizeof(state.lit_huff_code.short_code_lookup) / sizeof(uint32_t), + "\t.short_code_lookup = {", "\t},\n\n", "\t\t"); + fprint_uint16_table(file, state.lit_huff_code.long_code_lookup, + sizeof(state.lit_huff_code.long_code_lookup) / sizeof(uint16_t), + "\t.long_code_lookup = {", "\t}\n", "\t\t"); + fprintf(file, "};\n\n"); + + fprintf(file, "struct inflate_huff_code_small pregen_dist_huff_code = {\n"); + fprint_uint16_table(file, state.dist_huff_code.short_code_lookup, + sizeof(state.dist_huff_code.short_code_lookup) / sizeof(uint16_t), + "\t.short_code_lookup = {", "\t},\n\n", "\t\t"); + fprint_uint16_table(file, state.dist_huff_code.long_code_lookup, + sizeof(state.dist_huff_code.long_code_lookup) / sizeof(uint16_t), + "\t.long_code_lookup = {", "\t}\n", "\t\t"); + fprintf(file, "};\n\n"); + + fclose(file); + free(in_buf); + return 0; } diff --git a/igzip/huff_codes.c b/igzip/huff_codes.c index 06b8abcb..13d8231d 100644 --- a/igzip/huff_codes.c +++ b/igzip/huff_codes.c @@ -33,927 +33,911 @@ /* The order code length codes are written in the dynamic code header. This is * defined in RFC 1951 page 13 */ -static const uint8_t code_length_code_order[] = - { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; - -static const uint32_t len_code_extra_bits[] = { - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0x1, 0x1, 0x1, 0x2, 0x2, 0x2, 0x2, - 0x3, 0x3, 0x3, 0x3, 0x4, 0x4, 0x4, 0x4, - 0x5, 0x5, 0x5, 0x5, 0x0 -}; +static const uint8_t code_length_code_order[] = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, + 11, 4, 12, 3, 13, 2, 14, 1, 15 }; -static const uint32_t dist_code_extra_bits[] = { - 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x2, 0x2, - 0x3, 0x3, 0x4, 0x4, 0x5, 0x5, 0x6, 0x6, - 0x7, 0x7, 0x8, 0x8, 0x9, 0x9, 0xa, 0xa, - 0xb, 0xb, 0xc, 0xc, 0xd, 0xd -}; +static const uint32_t len_code_extra_bits[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, + 0x1, 0x1, 0x2, 0x2, 0x2, 0x2, 0x3, 0x3, 0x3, 0x3, + 0x4, 0x4, 0x4, 0x4, 0x5, 0x5, 0x5, 0x5, 0x0 }; + +static const uint32_t dist_code_extra_bits[] = { 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x2, 0x2, 0x3, 0x3, + 0x4, 0x4, 0x5, 0x5, 0x6, 0x6, 0x7, 0x7, 0x8, 0x8, + 0x9, 0x9, 0xa, 0xa, 0xb, 0xb, 0xc, 0xc, 0xd, 0xd }; static struct hufftables_icf static_hufftables = { - .lit_len_table = { - {{{.code_and_extra = 0x00c,.length2 = 0x8}}}, - {{{.code_and_extra = 0x08c,.length2 = 0x8}}}, - {{{.code_and_extra = 0x04c,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0cc,.length2 = 0x8}}}, - {{{.code_and_extra = 0x02c,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0ac,.length2 = 0x8}}}, - {{{.code_and_extra = 0x06c,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0ec,.length2 = 0x8}}}, - {{{.code_and_extra = 0x01c,.length2 = 0x8}}}, - {{{.code_and_extra = 0x09c,.length2 = 0x8}}}, - {{{.code_and_extra = 0x05c,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0dc,.length2 = 0x8}}}, - {{{.code_and_extra = 0x03c,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0bc,.length2 = 0x8}}}, - {{{.code_and_extra = 0x07c,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0fc,.length2 = 0x8}}}, - {{{.code_and_extra = 0x002,.length2 = 0x8}}}, - {{{.code_and_extra = 0x082,.length2 = 0x8}}}, - {{{.code_and_extra = 0x042,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0c2,.length2 = 0x8}}}, - {{{.code_and_extra = 0x022,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0a2,.length2 = 0x8}}}, - {{{.code_and_extra = 0x062,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0e2,.length2 = 0x8}}}, - {{{.code_and_extra = 0x012,.length2 = 0x8}}}, - {{{.code_and_extra = 0x092,.length2 = 0x8}}}, - {{{.code_and_extra = 0x052,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0d2,.length2 = 0x8}}}, - {{{.code_and_extra = 0x032,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0b2,.length2 = 0x8}}}, - {{{.code_and_extra = 0x072,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0f2,.length2 = 0x8}}}, - {{{.code_and_extra = 0x00a,.length2 = 0x8}}}, - {{{.code_and_extra = 0x08a,.length2 = 0x8}}}, - {{{.code_and_extra = 0x04a,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0ca,.length2 = 0x8}}}, - {{{.code_and_extra = 0x02a,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0aa,.length2 = 0x8}}}, - {{{.code_and_extra = 0x06a,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0ea,.length2 = 0x8}}}, - {{{.code_and_extra = 0x01a,.length2 = 0x8}}}, - {{{.code_and_extra = 0x09a,.length2 = 0x8}}}, - {{{.code_and_extra = 0x05a,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0da,.length2 = 0x8}}}, - {{{.code_and_extra = 0x03a,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0ba,.length2 = 0x8}}}, - {{{.code_and_extra = 0x07a,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0fa,.length2 = 0x8}}}, - {{{.code_and_extra = 0x006,.length2 = 0x8}}}, - {{{.code_and_extra = 0x086,.length2 = 0x8}}}, - {{{.code_and_extra = 0x046,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0c6,.length2 = 0x8}}}, - {{{.code_and_extra = 0x026,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0a6,.length2 = 0x8}}}, - {{{.code_and_extra = 0x066,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0e6,.length2 = 0x8}}}, - {{{.code_and_extra = 0x016,.length2 = 0x8}}}, - {{{.code_and_extra = 0x096,.length2 = 0x8}}}, - {{{.code_and_extra = 0x056,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0d6,.length2 = 0x8}}}, - {{{.code_and_extra = 0x036,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0b6,.length2 = 0x8}}}, - {{{.code_and_extra = 0x076,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0f6,.length2 = 0x8}}}, - {{{.code_and_extra = 0x00e,.length2 = 0x8}}}, - {{{.code_and_extra = 0x08e,.length2 = 0x8}}}, - {{{.code_and_extra = 0x04e,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0ce,.length2 = 0x8}}}, - {{{.code_and_extra = 0x02e,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0ae,.length2 = 0x8}}}, - {{{.code_and_extra = 0x06e,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0ee,.length2 = 0x8}}}, - {{{.code_and_extra = 0x01e,.length2 = 0x8}}}, - {{{.code_and_extra = 0x09e,.length2 = 0x8}}}, - {{{.code_and_extra = 0x05e,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0de,.length2 = 0x8}}}, - {{{.code_and_extra = 0x03e,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0be,.length2 = 0x8}}}, - {{{.code_and_extra = 0x07e,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0fe,.length2 = 0x8}}}, - {{{.code_and_extra = 0x001,.length2 = 0x8}}}, - {{{.code_and_extra = 0x081,.length2 = 0x8}}}, - {{{.code_and_extra = 0x041,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0c1,.length2 = 0x8}}}, - {{{.code_and_extra = 0x021,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0a1,.length2 = 0x8}}}, - {{{.code_and_extra = 0x061,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0e1,.length2 = 0x8}}}, - {{{.code_and_extra = 0x011,.length2 = 0x8}}}, - {{{.code_and_extra = 0x091,.length2 = 0x8}}}, - {{{.code_and_extra = 0x051,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0d1,.length2 = 0x8}}}, - {{{.code_and_extra = 0x031,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0b1,.length2 = 0x8}}}, - {{{.code_and_extra = 0x071,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0f1,.length2 = 0x8}}}, - {{{.code_and_extra = 0x009,.length2 = 0x8}}}, - {{{.code_and_extra = 0x089,.length2 = 0x8}}}, - {{{.code_and_extra = 0x049,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0c9,.length2 = 0x8}}}, - {{{.code_and_extra = 0x029,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0a9,.length2 = 0x8}}}, - {{{.code_and_extra = 0x069,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0e9,.length2 = 0x8}}}, - {{{.code_and_extra = 0x019,.length2 = 0x8}}}, - {{{.code_and_extra = 0x099,.length2 = 0x8}}}, - {{{.code_and_extra = 0x059,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0d9,.length2 = 0x8}}}, - {{{.code_and_extra = 0x039,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0b9,.length2 = 0x8}}}, - {{{.code_and_extra = 0x079,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0f9,.length2 = 0x8}}}, - {{{.code_and_extra = 0x005,.length2 = 0x8}}}, - {{{.code_and_extra = 0x085,.length2 = 0x8}}}, - {{{.code_and_extra = 0x045,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0c5,.length2 = 0x8}}}, - {{{.code_and_extra = 0x025,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0a5,.length2 = 0x8}}}, - {{{.code_and_extra = 0x065,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0e5,.length2 = 0x8}}}, - {{{.code_and_extra = 0x015,.length2 = 0x8}}}, - {{{.code_and_extra = 0x095,.length2 = 0x8}}}, - {{{.code_and_extra = 0x055,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0d5,.length2 = 0x8}}}, - {{{.code_and_extra = 0x035,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0b5,.length2 = 0x8}}}, - {{{.code_and_extra = 0x075,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0f5,.length2 = 0x8}}}, - {{{.code_and_extra = 0x00d,.length2 = 0x8}}}, - {{{.code_and_extra = 0x08d,.length2 = 0x8}}}, - {{{.code_and_extra = 0x04d,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0cd,.length2 = 0x8}}}, - {{{.code_and_extra = 0x02d,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0ad,.length2 = 0x8}}}, - {{{.code_and_extra = 0x06d,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0ed,.length2 = 0x8}}}, - {{{.code_and_extra = 0x01d,.length2 = 0x8}}}, - {{{.code_and_extra = 0x09d,.length2 = 0x8}}}, - {{{.code_and_extra = 0x05d,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0dd,.length2 = 0x8}}}, - {{{.code_and_extra = 0x03d,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0bd,.length2 = 0x8}}}, - {{{.code_and_extra = 0x07d,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0fd,.length2 = 0x8}}}, - {{{.code_and_extra = 0x013,.length2 = 0x9}}}, - {{{.code_and_extra = 0x113,.length2 = 0x9}}}, - {{{.code_and_extra = 0x093,.length2 = 0x9}}}, - {{{.code_and_extra = 0x193,.length2 = 0x9}}}, - {{{.code_and_extra = 0x053,.length2 = 0x9}}}, - {{{.code_and_extra = 0x153,.length2 = 0x9}}}, - {{{.code_and_extra = 0x0d3,.length2 = 0x9}}}, - {{{.code_and_extra = 0x1d3,.length2 = 0x9}}}, - {{{.code_and_extra = 0x033,.length2 = 0x9}}}, - {{{.code_and_extra = 0x133,.length2 = 0x9}}}, - {{{.code_and_extra = 0x0b3,.length2 = 0x9}}}, - {{{.code_and_extra = 0x1b3,.length2 = 0x9}}}, - {{{.code_and_extra = 0x073,.length2 = 0x9}}}, - {{{.code_and_extra = 0x173,.length2 = 0x9}}}, - {{{.code_and_extra = 0x0f3,.length2 = 0x9}}}, - {{{.code_and_extra = 0x1f3,.length2 = 0x9}}}, - {{{.code_and_extra = 0x00b,.length2 = 0x9}}}, - {{{.code_and_extra = 0x10b,.length2 = 0x9}}}, - {{{.code_and_extra = 0x08b,.length2 = 0x9}}}, - {{{.code_and_extra = 0x18b,.length2 = 0x9}}}, - {{{.code_and_extra = 0x04b,.length2 = 0x9}}}, - {{{.code_and_extra = 0x14b,.length2 = 0x9}}}, - {{{.code_and_extra = 0x0cb,.length2 = 0x9}}}, - {{{.code_and_extra = 0x1cb,.length2 = 0x9}}}, - {{{.code_and_extra = 0x02b,.length2 = 0x9}}}, - {{{.code_and_extra = 0x12b,.length2 = 0x9}}}, - {{{.code_and_extra = 0x0ab,.length2 = 0x9}}}, - {{{.code_and_extra = 0x1ab,.length2 = 0x9}}}, - {{{.code_and_extra = 0x06b,.length2 = 0x9}}}, - {{{.code_and_extra = 0x16b,.length2 = 0x9}}}, - {{{.code_and_extra = 0x0eb,.length2 = 0x9}}}, - {{{.code_and_extra = 0x1eb,.length2 = 0x9}}}, - {{{.code_and_extra = 0x01b,.length2 = 0x9}}}, - {{{.code_and_extra = 0x11b,.length2 = 0x9}}}, - {{{.code_and_extra = 0x09b,.length2 = 0x9}}}, - {{{.code_and_extra = 0x19b,.length2 = 0x9}}}, - {{{.code_and_extra = 0x05b,.length2 = 0x9}}}, - {{{.code_and_extra = 0x15b,.length2 = 0x9}}}, - {{{.code_and_extra = 0x0db,.length2 = 0x9}}}, - {{{.code_and_extra = 0x1db,.length2 = 0x9}}}, - {{{.code_and_extra = 0x03b,.length2 = 0x9}}}, - {{{.code_and_extra = 0x13b,.length2 = 0x9}}}, - {{{.code_and_extra = 0x0bb,.length2 = 0x9}}}, - {{{.code_and_extra = 0x1bb,.length2 = 0x9}}}, - {{{.code_and_extra = 0x07b,.length2 = 0x9}}}, - {{{.code_and_extra = 0x17b,.length2 = 0x9}}}, - {{{.code_and_extra = 0x0fb,.length2 = 0x9}}}, - {{{.code_and_extra = 0x1fb,.length2 = 0x9}}}, - {{{.code_and_extra = 0x007,.length2 = 0x9}}}, - {{{.code_and_extra = 0x107,.length2 = 0x9}}}, - {{{.code_and_extra = 0x087,.length2 = 0x9}}}, - {{{.code_and_extra = 0x187,.length2 = 0x9}}}, - {{{.code_and_extra = 0x047,.length2 = 0x9}}}, - {{{.code_and_extra = 0x147,.length2 = 0x9}}}, - {{{.code_and_extra = 0x0c7,.length2 = 0x9}}}, - {{{.code_and_extra = 0x1c7,.length2 = 0x9}}}, - {{{.code_and_extra = 0x027,.length2 = 0x9}}}, - {{{.code_and_extra = 0x127,.length2 = 0x9}}}, - {{{.code_and_extra = 0x0a7,.length2 = 0x9}}}, - {{{.code_and_extra = 0x1a7,.length2 = 0x9}}}, - {{{.code_and_extra = 0x067,.length2 = 0x9}}}, - {{{.code_and_extra = 0x167,.length2 = 0x9}}}, - {{{.code_and_extra = 0x0e7,.length2 = 0x9}}}, - {{{.code_and_extra = 0x1e7,.length2 = 0x9}}}, - {{{.code_and_extra = 0x017,.length2 = 0x9}}}, - {{{.code_and_extra = 0x117,.length2 = 0x9}}}, - {{{.code_and_extra = 0x097,.length2 = 0x9}}}, - {{{.code_and_extra = 0x197,.length2 = 0x9}}}, - {{{.code_and_extra = 0x057,.length2 = 0x9}}}, - {{{.code_and_extra = 0x157,.length2 = 0x9}}}, - {{{.code_and_extra = 0x0d7,.length2 = 0x9}}}, - {{{.code_and_extra = 0x1d7,.length2 = 0x9}}}, - {{{.code_and_extra = 0x037,.length2 = 0x9}}}, - {{{.code_and_extra = 0x137,.length2 = 0x9}}}, - {{{.code_and_extra = 0x0b7,.length2 = 0x9}}}, - {{{.code_and_extra = 0x1b7,.length2 = 0x9}}}, - {{{.code_and_extra = 0x077,.length2 = 0x9}}}, - {{{.code_and_extra = 0x177,.length2 = 0x9}}}, - {{{.code_and_extra = 0x0f7,.length2 = 0x9}}}, - {{{.code_and_extra = 0x1f7,.length2 = 0x9}}}, - {{{.code_and_extra = 0x00f,.length2 = 0x9}}}, - {{{.code_and_extra = 0x10f,.length2 = 0x9}}}, - {{{.code_and_extra = 0x08f,.length2 = 0x9}}}, - {{{.code_and_extra = 0x18f,.length2 = 0x9}}}, - {{{.code_and_extra = 0x04f,.length2 = 0x9}}}, - {{{.code_and_extra = 0x14f,.length2 = 0x9}}}, - {{{.code_and_extra = 0x0cf,.length2 = 0x9}}}, - {{{.code_and_extra = 0x1cf,.length2 = 0x9}}}, - {{{.code_and_extra = 0x02f,.length2 = 0x9}}}, - {{{.code_and_extra = 0x12f,.length2 = 0x9}}}, - {{{.code_and_extra = 0x0af,.length2 = 0x9}}}, - {{{.code_and_extra = 0x1af,.length2 = 0x9}}}, - {{{.code_and_extra = 0x06f,.length2 = 0x9}}}, - {{{.code_and_extra = 0x16f,.length2 = 0x9}}}, - {{{.code_and_extra = 0x0ef,.length2 = 0x9}}}, - {{{.code_and_extra = 0x1ef,.length2 = 0x9}}}, - {{{.code_and_extra = 0x01f,.length2 = 0x9}}}, - {{{.code_and_extra = 0x11f,.length2 = 0x9}}}, - {{{.code_and_extra = 0x09f,.length2 = 0x9}}}, - {{{.code_and_extra = 0x19f,.length2 = 0x9}}}, - {{{.code_and_extra = 0x05f,.length2 = 0x9}}}, - {{{.code_and_extra = 0x15f,.length2 = 0x9}}}, - {{{.code_and_extra = 0x0df,.length2 = 0x9}}}, - {{{.code_and_extra = 0x1df,.length2 = 0x9}}}, - {{{.code_and_extra = 0x03f,.length2 = 0x9}}}, - {{{.code_and_extra = 0x13f,.length2 = 0x9}}}, - {{{.code_and_extra = 0x0bf,.length2 = 0x9}}}, - {{{.code_and_extra = 0x1bf,.length2 = 0x9}}}, - {{{.code_and_extra = 0x07f,.length2 = 0x9}}}, - {{{.code_and_extra = 0x17f,.length2 = 0x9}}}, - {{{.code_and_extra = 0x0ff,.length2 = 0x9}}}, - {{{.code_and_extra = 0x1ff,.length2 = 0x9}}}, - {{{.code_and_extra = 0x000,.length2 = 0x7}}}, - {{{.code_and_extra = 0x040,.length2 = 0x7}}}, - {{{.code_and_extra = 0x020,.length2 = 0x7}}}, - {{{.code_and_extra = 0x060,.length2 = 0x7}}}, - {{{.code_and_extra = 0x010,.length2 = 0x7}}}, - {{{.code_and_extra = 0x050,.length2 = 0x7}}}, - {{{.code_and_extra = 0x030,.length2 = 0x7}}}, - {{{.code_and_extra = 0x070,.length2 = 0x7}}}, - {{{.code_and_extra = 0x008,.length2 = 0x7}}}, - {{{.code_and_extra = 0x048,.length2 = 0x7}}}, - {{{.code_and_extra = 0x028,.length2 = 0x7}}}, - {{{.code_and_extra = 0x068,.length2 = 0x7}}}, - {{{.code_and_extra = 0x018,.length2 = 0x7}}}, - {{{.code_and_extra = 0x058,.length2 = 0x7}}}, - {{{.code_and_extra = 0x038,.length2 = 0x7}}}, - {{{.code_and_extra = 0x078,.length2 = 0x7}}}, - {{{.code_and_extra = 0x004,.length2 = 0x7}}}, - {{{.code_and_extra = 0x044,.length2 = 0x7}}}, - {{{.code_and_extra = 0x024,.length2 = 0x7}}}, - {{{.code_and_extra = 0x064,.length2 = 0x7}}}, - {{{.code_and_extra = 0x014,.length2 = 0x7}}}, - {{{.code_and_extra = 0x054,.length2 = 0x7}}}, - {{{.code_and_extra = 0x034,.length2 = 0x7}}}, - {{{.code_and_extra = 0x074,.length2 = 0x7}}}, - {{{.code_and_extra = 0x003,.length2 = 0x8}}}, - {{{.code_and_extra = 0x083,.length2 = 0x8}}}, - {{{.code_and_extra = 0x043,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0c3,.length2 = 0x8}}}, - {{{.code_and_extra = 0x023,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0a3,.length2 = 0x8}}}, - {{{.code_and_extra = 0x063,.length2 = 0x8}}}, - {{{.code_and_extra = 0x0e3,.length2 = 0x8}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}}, - .dist_table = { - {{{.code_and_extra = 0x000,.length2 = 0x5}}}, - {{{.code_and_extra = 0x010,.length2 = 0x5}}}, - {{{.code_and_extra = 0x008,.length2 = 0x5}}}, - {{{.code_and_extra = 0x018,.length2 = 0x5}}}, - {{{.code_and_extra = 0x10004,.length2 = 0x5}}}, - {{{.code_and_extra = 0x10014,.length2 = 0x5}}}, - {{{.code_and_extra = 0x2000c,.length2 = 0x5}}}, - {{{.code_and_extra = 0x2001c,.length2 = 0x5}}}, - {{{.code_and_extra = 0x30002,.length2 = 0x5}}}, - {{{.code_and_extra = 0x30012,.length2 = 0x5}}}, - {{{.code_and_extra = 0x4000a,.length2 = 0x5}}}, - {{{.code_and_extra = 0x4001a,.length2 = 0x5}}}, - {{{.code_and_extra = 0x50006,.length2 = 0x5}}}, - {{{.code_and_extra = 0x50016,.length2 = 0x5}}}, - {{{.code_and_extra = 0x6000e,.length2 = 0x5}}}, - {{{.code_and_extra = 0x6001e,.length2 = 0x5}}}, - {{{.code_and_extra = 0x70001,.length2 = 0x5}}}, - {{{.code_and_extra = 0x70011,.length2 = 0x5}}}, - {{{.code_and_extra = 0x80009,.length2 = 0x5}}}, - {{{.code_and_extra = 0x80019,.length2 = 0x5}}}, - {{{.code_and_extra = 0x90005,.length2 = 0x5}}}, - {{{.code_and_extra = 0x90015,.length2 = 0x5}}}, - {{{.code_and_extra = 0xa000d,.length2 = 0x5}}}, - {{{.code_and_extra = 0xa001d,.length2 = 0x5}}}, - {{{.code_and_extra = 0xb0003,.length2 = 0x5}}}, - {{{.code_and_extra = 0xb0013,.length2 = 0x5}}}, - {{{.code_and_extra = 0xc000b,.length2 = 0x5}}}, - {{{.code_and_extra = 0xc001b,.length2 = 0x5}}}, - {{{.code_and_extra = 0xd0007,.length2 = 0x5}}}, - {{{.code_and_extra = 0xd0017,.length2 = 0x5}}}, - {{{.code_and_extra = 0x000,.length2 = 0x0}}}} + .lit_len_table = { { { { .code_and_extra = 0x00c, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x08c, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x04c, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0cc, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x02c, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0ac, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x06c, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0ec, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x01c, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x09c, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x05c, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0dc, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x03c, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0bc, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x07c, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0fc, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x002, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x082, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x042, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0c2, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x022, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0a2, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x062, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0e2, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x012, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x092, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x052, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0d2, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x032, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0b2, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x072, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0f2, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x00a, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x08a, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x04a, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0ca, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x02a, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0aa, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x06a, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0ea, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x01a, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x09a, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x05a, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0da, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x03a, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0ba, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x07a, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0fa, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x006, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x086, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x046, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0c6, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x026, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0a6, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x066, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0e6, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x016, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x096, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x056, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0d6, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x036, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0b6, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x076, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0f6, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x00e, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x08e, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x04e, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0ce, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x02e, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0ae, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x06e, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0ee, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x01e, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x09e, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x05e, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0de, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x03e, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0be, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x07e, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0fe, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x001, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x081, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x041, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0c1, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x021, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0a1, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x061, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0e1, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x011, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x091, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x051, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0d1, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x031, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0b1, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x071, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0f1, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x009, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x089, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x049, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0c9, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x029, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0a9, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x069, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0e9, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x019, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x099, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x059, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0d9, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x039, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0b9, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x079, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0f9, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x005, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x085, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x045, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0c5, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x025, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0a5, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x065, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0e5, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x015, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x095, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x055, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0d5, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x035, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0b5, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x075, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0f5, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x00d, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x08d, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x04d, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0cd, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x02d, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0ad, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x06d, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0ed, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x01d, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x09d, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x05d, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0dd, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x03d, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0bd, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x07d, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0fd, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x013, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x113, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x093, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x193, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x053, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x153, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x0d3, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x1d3, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x033, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x133, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x0b3, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x1b3, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x073, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x173, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x0f3, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x1f3, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x00b, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x10b, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x08b, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x18b, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x04b, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x14b, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x0cb, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x1cb, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x02b, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x12b, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x0ab, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x1ab, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x06b, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x16b, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x0eb, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x1eb, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x01b, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x11b, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x09b, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x19b, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x05b, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x15b, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x0db, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x1db, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x03b, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x13b, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x0bb, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x1bb, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x07b, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x17b, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x0fb, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x1fb, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x007, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x107, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x087, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x187, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x047, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x147, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x0c7, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x1c7, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x027, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x127, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x0a7, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x1a7, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x067, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x167, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x0e7, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x1e7, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x017, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x117, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x097, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x197, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x057, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x157, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x0d7, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x1d7, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x037, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x137, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x0b7, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x1b7, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x077, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x177, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x0f7, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x1f7, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x00f, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x10f, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x08f, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x18f, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x04f, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x14f, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x0cf, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x1cf, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x02f, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x12f, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x0af, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x1af, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x06f, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x16f, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x0ef, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x1ef, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x01f, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x11f, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x09f, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x19f, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x05f, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x15f, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x0df, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x1df, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x03f, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x13f, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x0bf, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x1bf, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x07f, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x17f, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x0ff, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x1ff, .length2 = 0x9 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x7 } } }, + { { { .code_and_extra = 0x040, .length2 = 0x7 } } }, + { { { .code_and_extra = 0x020, .length2 = 0x7 } } }, + { { { .code_and_extra = 0x060, .length2 = 0x7 } } }, + { { { .code_and_extra = 0x010, .length2 = 0x7 } } }, + { { { .code_and_extra = 0x050, .length2 = 0x7 } } }, + { { { .code_and_extra = 0x030, .length2 = 0x7 } } }, + { { { .code_and_extra = 0x070, .length2 = 0x7 } } }, + { { { .code_and_extra = 0x008, .length2 = 0x7 } } }, + { { { .code_and_extra = 0x048, .length2 = 0x7 } } }, + { { { .code_and_extra = 0x028, .length2 = 0x7 } } }, + { { { .code_and_extra = 0x068, .length2 = 0x7 } } }, + { { { .code_and_extra = 0x018, .length2 = 0x7 } } }, + { { { .code_and_extra = 0x058, .length2 = 0x7 } } }, + { { { .code_and_extra = 0x038, .length2 = 0x7 } } }, + { { { .code_and_extra = 0x078, .length2 = 0x7 } } }, + { { { .code_and_extra = 0x004, .length2 = 0x7 } } }, + { { { .code_and_extra = 0x044, .length2 = 0x7 } } }, + { { { .code_and_extra = 0x024, .length2 = 0x7 } } }, + { { { .code_and_extra = 0x064, .length2 = 0x7 } } }, + { { { .code_and_extra = 0x014, .length2 = 0x7 } } }, + { { { .code_and_extra = 0x054, .length2 = 0x7 } } }, + { { { .code_and_extra = 0x034, .length2 = 0x7 } } }, + { { { .code_and_extra = 0x074, .length2 = 0x7 } } }, + { { { .code_and_extra = 0x003, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x083, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x043, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0c3, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x023, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0a3, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x063, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x0e3, .length2 = 0x8 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } } }, + .dist_table = { { { { .code_and_extra = 0x000, .length2 = 0x5 } } }, + { { { .code_and_extra = 0x010, .length2 = 0x5 } } }, + { { { .code_and_extra = 0x008, .length2 = 0x5 } } }, + { { { .code_and_extra = 0x018, .length2 = 0x5 } } }, + { { { .code_and_extra = 0x10004, .length2 = 0x5 } } }, + { { { .code_and_extra = 0x10014, .length2 = 0x5 } } }, + { { { .code_and_extra = 0x2000c, .length2 = 0x5 } } }, + { { { .code_and_extra = 0x2001c, .length2 = 0x5 } } }, + { { { .code_and_extra = 0x30002, .length2 = 0x5 } } }, + { { { .code_and_extra = 0x30012, .length2 = 0x5 } } }, + { { { .code_and_extra = 0x4000a, .length2 = 0x5 } } }, + { { { .code_and_extra = 0x4001a, .length2 = 0x5 } } }, + { { { .code_and_extra = 0x50006, .length2 = 0x5 } } }, + { { { .code_and_extra = 0x50016, .length2 = 0x5 } } }, + { { { .code_and_extra = 0x6000e, .length2 = 0x5 } } }, + { { { .code_and_extra = 0x6001e, .length2 = 0x5 } } }, + { { { .code_and_extra = 0x70001, .length2 = 0x5 } } }, + { { { .code_and_extra = 0x70011, .length2 = 0x5 } } }, + { { { .code_and_extra = 0x80009, .length2 = 0x5 } } }, + { { { .code_and_extra = 0x80019, .length2 = 0x5 } } }, + { { { .code_and_extra = 0x90005, .length2 = 0x5 } } }, + { { { .code_and_extra = 0x90015, .length2 = 0x5 } } }, + { { { .code_and_extra = 0xa000d, .length2 = 0x5 } } }, + { { { .code_and_extra = 0xa001d, .length2 = 0x5 } } }, + { { { .code_and_extra = 0xb0003, .length2 = 0x5 } } }, + { { { .code_and_extra = 0xb0013, .length2 = 0x5 } } }, + { { { .code_and_extra = 0xc000b, .length2 = 0x5 } } }, + { { { .code_and_extra = 0xc001b, .length2 = 0x5 } } }, + { { { .code_and_extra = 0xd0007, .length2 = 0x5 } } }, + { { { .code_and_extra = 0xd0017, .length2 = 0x5 } } }, + { { { .code_and_extra = 0x000, .length2 = 0x0 } } } } }; -extern uint32_t build_huff_tree(struct heap_tree *heap, uint64_t heap_size, uint64_t node_ptr); -extern void build_heap(uint64_t * heap, uint64_t heap_size); +extern uint32_t +build_huff_tree(struct heap_tree *heap, uint64_t heap_size, uint64_t node_ptr); +extern void +build_heap(uint64_t *heap, uint64_t heap_size); -static uint32_t convert_dist_to_dist_sym(uint32_t dist); -static uint32_t convert_length_to_len_sym(uint32_t length); +static uint32_t +convert_dist_to_dist_sym(uint32_t dist); +static uint32_t +convert_length_to_len_sym(uint32_t length); static const uint8_t bitrev8[0x100] = { - 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, - 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0, - 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, - 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, - 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, - 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, - 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, - 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, - 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, - 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2, - 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, - 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA, - 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, - 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, - 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, - 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE, - 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, - 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1, - 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, - 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9, - 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, - 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5, - 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, - 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD, - 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, - 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3, - 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, - 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB, - 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, - 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7, - 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, - 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF + 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, + 0xF0, 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, + 0x78, 0xF8, 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, 0x14, 0x94, 0x54, 0xD4, 0x34, + 0xB4, 0x74, 0xF4, 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, 0x1C, 0x9C, 0x5C, 0xDC, + 0x3C, 0xBC, 0x7C, 0xFC, 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, 0x12, 0x92, 0x52, + 0xD2, 0x32, 0xB2, 0x72, 0xF2, 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, 0x1A, 0x9A, + 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA, 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, 0x16, + 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, + 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE, 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, + 0xE1, 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1, 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, + 0x69, 0xE9, 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9, 0x05, 0x85, 0x45, 0xC5, 0x25, + 0xA5, 0x65, 0xE5, 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5, 0x0D, 0x8D, 0x4D, 0xCD, + 0x2D, 0xAD, 0x6D, 0xED, 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD, 0x03, 0x83, 0x43, + 0xC3, 0x23, 0xA3, 0x63, 0xE3, 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3, 0x0B, 0x8B, + 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB, 0x07, + 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7, + 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, + 0xFF }; // bit reverse low order LENGTH bits in code, and return result in low order bits -static inline uint16_t bit_reverse(uint16_t code, uint32_t length) +static inline uint16_t +bit_reverse(uint16_t code, uint32_t length) { - code = (bitrev8[code & 0x00FF] << 8) | (bitrev8[code >> 8]); - return (code >> (16 - length)); + code = (bitrev8[code & 0x00FF] << 8) | (bitrev8[code >> 8]); + return (code >> (16 - length)); } -void isal_update_histogram_base(uint8_t * start_stream, int length, - struct isal_huff_histogram *histogram) +void +isal_update_histogram_base(uint8_t *start_stream, int length, struct isal_huff_histogram *histogram) { - uint32_t literal = 0, hash; - uint16_t seen, *last_seen = histogram->hash_table; - uint8_t *current, *end_stream, *next_hash, *end; - uint32_t match_length; - uint32_t dist; - uint64_t *lit_len_histogram = histogram->lit_len_histogram; - uint64_t *dist_histogram = histogram->dist_histogram; - - if (length <= 0) - return; - - end_stream = start_stream + length; - memset(last_seen, 0, sizeof(histogram->hash_table)); /* Initialize last_seen to be 0. */ - for (current = start_stream; current < end_stream - 3; current++) { - literal = load_le_u32(current); - hash = compute_hash(literal) & LVL0_HASH_MASK; - seen = last_seen[hash]; - last_seen[hash] = (current - start_stream) & 0xFFFF; - dist = (current - start_stream - seen) & 0xFFFF; - if (dist - 1 < D - 1) { - assert(start_stream <= current - dist); - match_length = - compare258(current - dist, current, end_stream - current); - if (match_length >= SHORTEST_MATCH) { - next_hash = current; + uint32_t literal = 0, hash; + uint16_t seen, *last_seen = histogram->hash_table; + uint8_t *current, *end_stream, *next_hash, *end; + uint32_t match_length; + uint32_t dist; + uint64_t *lit_len_histogram = histogram->lit_len_histogram; + uint64_t *dist_histogram = histogram->dist_histogram; + + if (length <= 0) + return; + + end_stream = start_stream + length; + memset(last_seen, 0, sizeof(histogram->hash_table)); /* Initialize last_seen to be 0. */ + for (current = start_stream; current < end_stream - 3; current++) { + literal = load_le_u32(current); + hash = compute_hash(literal) & LVL0_HASH_MASK; + seen = last_seen[hash]; + last_seen[hash] = (current - start_stream) & 0xFFFF; + dist = (current - start_stream - seen) & 0xFFFF; + if (dist - 1 < D - 1) { + assert(start_stream <= current - dist); + match_length = compare258(current - dist, current, end_stream - current); + if (match_length >= SHORTEST_MATCH) { + next_hash = current; #ifdef ISAL_LIMIT_HASH_UPDATE - end = next_hash + 3; + end = next_hash + 3; #else - end = next_hash + match_length; + end = next_hash + match_length; #endif - if (end > end_stream - 3) - end = end_stream - 3; - next_hash++; - for (; next_hash < end; next_hash++) { - literal = load_le_u32(next_hash); - hash = compute_hash(literal) & LVL0_HASH_MASK; - last_seen[hash] = (next_hash - start_stream) & 0xFFFF; - } - - dist_histogram[convert_dist_to_dist_sym(dist)] += 1; - lit_len_histogram[convert_length_to_len_sym(match_length)] += - 1; - current += match_length - 1; - continue; - } - } - lit_len_histogram[literal & 0xFF] += 1; - } - - for (; current < end_stream; current++) - lit_len_histogram[*current] += 1; - - lit_len_histogram[256] += 1; - return; + if (end > end_stream - 3) + end = end_stream - 3; + next_hash++; + for (; next_hash < end; next_hash++) { + literal = load_le_u32(next_hash); + hash = compute_hash(literal) & LVL0_HASH_MASK; + last_seen[hash] = (next_hash - start_stream) & 0xFFFF; + } + + dist_histogram[convert_dist_to_dist_sym(dist)] += 1; + lit_len_histogram[convert_length_to_len_sym(match_length)] += 1; + current += match_length - 1; + continue; + } + } + lit_len_histogram[literal & 0xFF] += 1; + } + + for (; current < end_stream; current++) + lit_len_histogram[*current] += 1; + + lit_len_histogram[256] += 1; + return; } /** * @brief Returns the deflate symbol value for a look back distance. */ -static uint32_t convert_dist_to_dist_sym(uint32_t dist) +static uint32_t +convert_dist_to_dist_sym(uint32_t dist) { - assert(dist <= 32768 && dist > 0); - if (dist <= 32768) { - uint32_t msb = dist > 4 ? bsr(dist - 1) - 2 : 0; - return (msb * 2) + ((dist - 1) >> msb); - } else { - return ~0; - } + assert(dist <= 32768 && dist > 0); + if (dist <= 32768) { + uint32_t msb = dist > 4 ? bsr(dist - 1) - 2 : 0; + return (msb * 2) + ((dist - 1) >> msb); + } else { + return ~0; + } } /** * @brief Returns the deflate symbol value for a repeat length. */ -static uint32_t convert_length_to_len_sym(uint32_t length) +static uint32_t +convert_length_to_len_sym(uint32_t length) { - assert(length > 2 && length < 259); - - /* Based on tables on page 11 in RFC 1951 */ - if (length < 11) - return 257 + length - 3; - else if (length < 19) - return 261 + (length - 3) / 2; - else if (length < 35) - return 265 + (length - 3) / 4; - else if (length < 67) - return 269 + (length - 3) / 8; - else if (length < 131) - return 273 + (length - 3) / 16; - else if (length < 258) - return 277 + (length - 3) / 32; - else - return 285; + assert(length > 2 && length < 259); + + /* Based on tables on page 11 in RFC 1951 */ + if (length < 11) + return 257 + length - 3; + else if (length < 19) + return 261 + (length - 3) / 2; + else if (length < 35) + return 265 + (length - 3) / 4; + else if (length < 67) + return 269 + (length - 3) / 8; + else if (length < 131) + return 273 + (length - 3) / 16; + else if (length < 258) + return 277 + (length - 3) / 32; + else + return 285; } // Upon return, codes[] contains the code lengths, // and bl_count is the count of the lengths /* Init heap with the histogram, and return the histogram size */ -static inline uint32_t init_heap32(struct heap_tree *heap_space, uint32_t * histogram, - uint32_t hist_size) +static inline uint32_t +init_heap32(struct heap_tree *heap_space, uint32_t *histogram, uint32_t hist_size) { - uint32_t heap_size, i; - - memset(heap_space, 0, sizeof(struct heap_tree)); - - heap_size = 0; - for (i = 0; i < hist_size; i++) { - if (histogram[i] != 0) - heap_space->heap[++heap_size] = - (((uint64_t) histogram[i]) << FREQ_SHIFT) | i; - } - - // make sure heap has at least two elements in it - if (heap_size < 2) { - if (heap_size == 0) { - heap_space->heap[1] = 1ULL << FREQ_SHIFT; - heap_space->heap[2] = (1ULL << FREQ_SHIFT) | 1; - heap_size = 2; - } else { - // heap size == 1 - if (histogram[0] == 0) - heap_space->heap[2] = 1ULL << FREQ_SHIFT; - else - heap_space->heap[2] = (1ULL << FREQ_SHIFT) | 1; - heap_size = 2; - } - } - - build_heap(heap_space->heap, heap_size); - - return heap_size; + uint32_t heap_size, i; + + memset(heap_space, 0, sizeof(struct heap_tree)); + + heap_size = 0; + for (i = 0; i < hist_size; i++) { + if (histogram[i] != 0) + heap_space->heap[++heap_size] = + (((uint64_t) histogram[i]) << FREQ_SHIFT) | i; + } + + // make sure heap has at least two elements in it + if (heap_size < 2) { + if (heap_size == 0) { + heap_space->heap[1] = 1ULL << FREQ_SHIFT; + heap_space->heap[2] = (1ULL << FREQ_SHIFT) | 1; + heap_size = 2; + } else { + // heap size == 1 + if (histogram[0] == 0) + heap_space->heap[2] = 1ULL << FREQ_SHIFT; + else + heap_space->heap[2] = (1ULL << FREQ_SHIFT) | 1; + heap_size = 2; + } + } + + build_heap(heap_space->heap, heap_size); + + return heap_size; } -static inline uint32_t init_heap64(struct heap_tree *heap_space, uint64_t * histogram, - uint64_t hist_size) +static inline uint32_t +init_heap64(struct heap_tree *heap_space, uint64_t *histogram, uint64_t hist_size) { - uint32_t heap_size, i; - - memset(heap_space, 0, sizeof(struct heap_tree)); - - heap_size = 0; - for (i = 0; i < hist_size; i++) { - if (histogram[i] != 0) - heap_space->heap[++heap_size] = ((histogram[i]) << FREQ_SHIFT) | i; - } - - // make sure heap has at least two elements in it - if (heap_size < 2) { - if (heap_size == 0) { - heap_space->heap[1] = 1ULL << FREQ_SHIFT; - heap_space->heap[2] = (1ULL << FREQ_SHIFT) | 1; - heap_size = 2; - } else { - // heap size == 1 - if (histogram[0] == 0) - heap_space->heap[2] = 1ULL << FREQ_SHIFT; - else - heap_space->heap[2] = (1ULL << FREQ_SHIFT) | 1; - heap_size = 2; - } - } - - build_heap(heap_space->heap, heap_size); - - return heap_size; + uint32_t heap_size, i; + + memset(heap_space, 0, sizeof(struct heap_tree)); + + heap_size = 0; + for (i = 0; i < hist_size; i++) { + if (histogram[i] != 0) + heap_space->heap[++heap_size] = ((histogram[i]) << FREQ_SHIFT) | i; + } + + // make sure heap has at least two elements in it + if (heap_size < 2) { + if (heap_size == 0) { + heap_space->heap[1] = 1ULL << FREQ_SHIFT; + heap_space->heap[2] = (1ULL << FREQ_SHIFT) | 1; + heap_size = 2; + } else { + // heap size == 1 + if (histogram[0] == 0) + heap_space->heap[2] = 1ULL << FREQ_SHIFT; + else + heap_space->heap[2] = (1ULL << FREQ_SHIFT) | 1; + heap_size = 2; + } + } + + build_heap(heap_space->heap, heap_size); + + return heap_size; } -static inline uint32_t init_heap64_semi_complete(struct heap_tree *heap_space, - uint64_t * histogram, uint64_t hist_size, - uint64_t complete_start) +static inline uint32_t +init_heap64_semi_complete(struct heap_tree *heap_space, uint64_t *histogram, uint64_t hist_size, + uint64_t complete_start) { - uint32_t heap_size, i; - - memset(heap_space, 0, sizeof(struct heap_tree)); - - heap_size = 0; - for (i = 0; i < complete_start; i++) { - if (histogram[i] != 0) - heap_space->heap[++heap_size] = ((histogram[i]) << FREQ_SHIFT) | i; - } - - for (; i < hist_size; i++) - heap_space->heap[++heap_size] = ((histogram[i]) << FREQ_SHIFT) | i; - - // make sure heap has at least two elements in it - if (heap_size < 2) { - if (heap_size == 0) { - heap_space->heap[1] = 1ULL << FREQ_SHIFT; - heap_space->heap[2] = (1ULL << FREQ_SHIFT) | 1; - heap_size = 2; - } else { - // heap size == 1 - if (histogram[0] == 0) - heap_space->heap[2] = 1ULL << FREQ_SHIFT; - else - heap_space->heap[2] = (1ULL << FREQ_SHIFT) | 1; - heap_size = 2; - } - } - - build_heap(heap_space->heap, heap_size); - - return heap_size; + uint32_t heap_size, i; + + memset(heap_space, 0, sizeof(struct heap_tree)); + + heap_size = 0; + for (i = 0; i < complete_start; i++) { + if (histogram[i] != 0) + heap_space->heap[++heap_size] = ((histogram[i]) << FREQ_SHIFT) | i; + } + + for (; i < hist_size; i++) + heap_space->heap[++heap_size] = ((histogram[i]) << FREQ_SHIFT) | i; + + // make sure heap has at least two elements in it + if (heap_size < 2) { + if (heap_size == 0) { + heap_space->heap[1] = 1ULL << FREQ_SHIFT; + heap_space->heap[2] = (1ULL << FREQ_SHIFT) | 1; + heap_size = 2; + } else { + // heap size == 1 + if (histogram[0] == 0) + heap_space->heap[2] = 1ULL << FREQ_SHIFT; + else + heap_space->heap[2] = (1ULL << FREQ_SHIFT) | 1; + heap_size = 2; + } + } + + build_heap(heap_space->heap, heap_size); + + return heap_size; } -static inline uint32_t init_heap64_complete(struct heap_tree *heap_space, uint64_t * histogram, - uint64_t hist_size) +static inline uint32_t +init_heap64_complete(struct heap_tree *heap_space, uint64_t *histogram, uint64_t hist_size) { - uint32_t heap_size, i; + uint32_t heap_size, i; - memset(heap_space, 0, sizeof(struct heap_tree)); + memset(heap_space, 0, sizeof(struct heap_tree)); - heap_size = 0; - for (i = 0; i < hist_size; i++) - heap_space->heap[++heap_size] = ((histogram[i]) << FREQ_SHIFT) | i; + heap_size = 0; + for (i = 0; i < hist_size; i++) + heap_space->heap[++heap_size] = ((histogram[i]) << FREQ_SHIFT) | i; - build_heap(heap_space->heap, heap_size); + build_heap(heap_space->heap, heap_size); - return heap_size; + return heap_size; } -static inline uint32_t fix_code_lens(struct heap_tree *heap_space, uint32_t root_node, - uint32_t * bl_count, uint32_t max_code_len) +static inline uint32_t +fix_code_lens(struct heap_tree *heap_space, uint32_t root_node, uint32_t *bl_count, + uint32_t max_code_len) { - struct tree_node *tree = heap_space->tree; - uint64_t *code_len_count = heap_space->code_len_count; - uint32_t i, j, k, child, depth, code_len; - - // compute code lengths and code length counts - code_len = 0; - j = root_node; - for (i = root_node; i <= HEAP_TREE_NODE_START; i++) { - child = tree[i].child; - if (child > MAX_HISTHEAP_SIZE) { - depth = 1 + tree[i].depth; - - tree[child].depth = depth; - tree[child - 1].depth = depth; - } else { - tree[j++] = tree[i]; - depth = tree[i].depth; - while (code_len < depth) { - code_len++; - code_len_count[code_len] = 0; - } - code_len_count[depth]++; - } - } - - if (code_len > max_code_len) { - while (code_len > max_code_len) { - assert(code_len_count[code_len] > 1); - for (i = max_code_len - 1; i != 0; i--) - if (code_len_count[i] != 0) - break; - assert(i != 0); - code_len_count[i]--; - code_len_count[i + 1] += 2; - code_len_count[code_len - 1]++; - code_len_count[code_len] -= 2; - if (code_len_count[code_len] == 0) - code_len--; - } - - bl_count[0] = 0; - for (i = 1; i <= code_len; i++) - bl_count[i] = code_len_count[i]; - for (; i <= max_code_len; i++) - bl_count[i] = 0; - - for (k = 1; code_len_count[k] == 0; k++) ; - for (i = root_node; i < j; i++) { - tree[i].depth = k; - code_len_count[k]--; - for (; code_len_count[k] == 0; k++) ; - } - } else { - bl_count[0] = 0; - for (i = 1; i <= code_len; i++) - bl_count[i] = code_len_count[i]; - for (; i <= max_code_len; i++) - bl_count[i] = 0; - } - - return j; - + struct tree_node *tree = heap_space->tree; + uint64_t *code_len_count = heap_space->code_len_count; + uint32_t i, j, k, child, depth, code_len; + + // compute code lengths and code length counts + code_len = 0; + j = root_node; + for (i = root_node; i <= HEAP_TREE_NODE_START; i++) { + child = tree[i].child; + if (child > MAX_HISTHEAP_SIZE) { + depth = 1 + tree[i].depth; + + tree[child].depth = depth; + tree[child - 1].depth = depth; + } else { + tree[j++] = tree[i]; + depth = tree[i].depth; + while (code_len < depth) { + code_len++; + code_len_count[code_len] = 0; + } + code_len_count[depth]++; + } + } + + if (code_len > max_code_len) { + while (code_len > max_code_len) { + assert(code_len_count[code_len] > 1); + for (i = max_code_len - 1; i != 0; i--) + if (code_len_count[i] != 0) + break; + assert(i != 0); + code_len_count[i]--; + code_len_count[i + 1] += 2; + code_len_count[code_len - 1]++; + code_len_count[code_len] -= 2; + if (code_len_count[code_len] == 0) + code_len--; + } + + bl_count[0] = 0; + for (i = 1; i <= code_len; i++) + bl_count[i] = code_len_count[i]; + for (; i <= max_code_len; i++) + bl_count[i] = 0; + + for (k = 1; code_len_count[k] == 0; k++) + ; + for (i = root_node; i < j; i++) { + tree[i].depth = k; + code_len_count[k]--; + for (; code_len_count[k] == 0; k++) + ; + } + } else { + bl_count[0] = 0; + for (i = 1; i <= code_len; i++) + bl_count[i] = code_len_count[i]; + for (; i <= max_code_len; i++) + bl_count[i] = 0; + } + + return j; } static inline void -gen_huff_code_lens(struct heap_tree *heap_space, uint32_t heap_size, uint32_t * bl_count, - struct huff_code *codes, uint32_t codes_count, uint32_t max_code_len) +gen_huff_code_lens(struct heap_tree *heap_space, uint32_t heap_size, uint32_t *bl_count, + struct huff_code *codes, uint32_t codes_count, uint32_t max_code_len) { - struct tree_node *tree = heap_space->tree; - uint32_t root_node = HEAP_TREE_NODE_START, node_ptr; - uint32_t end_node; - - root_node = build_huff_tree(heap_space, heap_size, root_node); + struct tree_node *tree = heap_space->tree; + uint32_t root_node = HEAP_TREE_NODE_START, node_ptr; + uint32_t end_node; - end_node = fix_code_lens(heap_space, root_node, bl_count, max_code_len); + root_node = build_huff_tree(heap_space, heap_size, root_node); - memset(codes, 0, codes_count * sizeof(*codes)); - for (node_ptr = root_node; node_ptr < end_node; node_ptr++) - codes[tree[node_ptr].child].length = tree[node_ptr].depth; + end_node = fix_code_lens(heap_space, root_node, bl_count, max_code_len); + memset(codes, 0, codes_count * sizeof(*codes)); + for (node_ptr = root_node; node_ptr < end_node; node_ptr++) + codes[tree[node_ptr].child].length = tree[node_ptr].depth; } /** @@ -964,31 +948,30 @@ gen_huff_code_lens(struct heap_tree *heap_space, uint32_t heap_size, uint32_t * * @param table_length: The length of table. * @param count: a histogram representing the number of occurrences of codes of a given length */ -static inline uint32_t set_huff_codes(struct huff_code *huff_code_table, int table_length, - uint32_t * count) +static inline uint32_t +set_huff_codes(struct huff_code *huff_code_table, int table_length, uint32_t *count) { - /* Uses the algorithm mentioned in the deflate standard, Rfc 1951. */ - int i; - uint16_t code = 0; - uint16_t next_code[MAX_HUFF_TREE_DEPTH + 1]; - uint32_t max_code = 0; - - next_code[0] = code; - - for (i = 1; i < MAX_HUFF_TREE_DEPTH + 1; i++) - next_code[i] = (next_code[i - 1] + count[i - 1]) << 1; - - for (i = 0; i < table_length; i++) { - if (huff_code_table[i].length != 0) { - huff_code_table[i].code = - bit_reverse(next_code[huff_code_table[i].length], - huff_code_table[i].length); - next_code[huff_code_table[i].length] += 1; - max_code = i; - } - } - - return max_code; + /* Uses the algorithm mentioned in the deflate standard, Rfc 1951. */ + int i; + uint16_t code = 0; + uint16_t next_code[MAX_HUFF_TREE_DEPTH + 1]; + uint32_t max_code = 0; + + next_code[0] = code; + + for (i = 1; i < MAX_HUFF_TREE_DEPTH + 1; i++) + next_code[i] = (next_code[i - 1] + count[i - 1]) << 1; + + for (i = 0; i < table_length; i++) { + if (huff_code_table[i].length != 0) { + huff_code_table[i].code = bit_reverse(next_code[huff_code_table[i].length], + huff_code_table[i].length); + next_code[huff_code_table[i].length] += 1; + max_code = i; + } + } + + return max_code; } // on input, codes contain the code lengths @@ -996,28 +979,29 @@ static inline uint32_t set_huff_codes(struct huff_code *huff_code_table, int tab // 23:16 code length // 15:0 code value in low order bits // returns max code value -static inline uint32_t set_dist_huff_codes(struct huff_code *codes, uint32_t * bl_count) +static inline uint32_t +set_dist_huff_codes(struct huff_code *codes, uint32_t *bl_count) { - uint32_t code, code_len, bits, i; - uint32_t next_code[MAX_DEFLATE_CODE_LEN + 1]; - uint32_t max_code = 0; - const uint32_t num_codes = DIST_LEN; - - code = bl_count[0] = 0; - for (bits = 1; bits <= MAX_HUFF_TREE_DEPTH; bits++) { - code = (code + bl_count[bits - 1]) << 1; - next_code[bits] = code; - } - for (i = 0; i < num_codes; i++) { - code_len = codes[i].length; - if (code_len != 0) { - codes[i].code = bit_reverse(next_code[code_len], code_len); - codes[i].extra_bit_count = dist_code_extra_bits[i]; - next_code[code_len] += 1; - max_code = i; - } - } - return max_code; + uint32_t code, code_len, bits, i; + uint32_t next_code[MAX_DEFLATE_CODE_LEN + 1]; + uint32_t max_code = 0; + const uint32_t num_codes = DIST_LEN; + + code = bl_count[0] = 0; + for (bits = 1; bits <= MAX_HUFF_TREE_DEPTH; bits++) { + code = (code + bl_count[bits - 1]) << 1; + next_code[bits] = code; + } + for (i = 0; i < num_codes; i++) { + code_len = codes[i].length; + if (code_len != 0) { + codes[i].code = bit_reverse(next_code[code_len], code_len); + codes[i].extra_bit_count = dist_code_extra_bits[i]; + next_code[code_len] += 1; + max_code = i; + } + } + return max_code; } /** @@ -1033,45 +1017,44 @@ static inline uint32_t set_dist_huff_codes(struct huff_code *codes, uint32_t * b * @param hlit: Length of literal/length table minus 257. * @param hdist: Length of distance table minus 1. */ -static int create_huffman_header(struct BitBuf2 *header_bitbuf, - struct huff_code *lookup_table, - struct rl_code *huffman_rep, - uint16_t huffman_rep_length, uint32_t end_of_block, - uint32_t hclen, uint32_t hlit, uint32_t hdist) +static int +create_huffman_header(struct BitBuf2 *header_bitbuf, struct huff_code *lookup_table, + struct rl_code *huffman_rep, uint16_t huffman_rep_length, + uint32_t end_of_block, uint32_t hclen, uint32_t hlit, uint32_t hdist) { - /* hlit, hdist, hclen are as defined in the deflate standard, head is the - * first three deflate header bits.*/ - int i; - uint64_t bit_count; - uint64_t data; - struct huff_code huffman_value; - const uint32_t extra_bits[3] = { 2, 3, 7 }; - - bit_count = buffer_bits_used(header_bitbuf); - - data = (end_of_block ? 5 : 4) | (hlit << 3) | (hdist << 8) | (hclen << 13); - data |= ((lookup_table[code_length_code_order[0]].length) << DYN_HDR_START_LEN); - write_bits(header_bitbuf, data, DYN_HDR_START_LEN + 3); - data = 0; - for (i = hclen + 3; i >= 1; i--) - data = (data << 3) | lookup_table[code_length_code_order[i]].length; - - write_bits(header_bitbuf, data, (hclen + 3) * 3); - - for (i = 0; i < huffman_rep_length; i++) { - huffman_value = lookup_table[huffman_rep[i].code]; - - write_bits(header_bitbuf, (uint64_t) huffman_value.code, - (uint32_t) huffman_value.length); - - if (huffman_rep[i].code > 15) { - write_bits(header_bitbuf, (uint64_t) huffman_rep[i].extra_bits, - (uint32_t) extra_bits[huffman_rep[i].code - 16]); - } - } - bit_count = buffer_bits_used(header_bitbuf) - bit_count; - - return bit_count; + /* hlit, hdist, hclen are as defined in the deflate standard, head is the + * first three deflate header bits.*/ + int i; + uint64_t bit_count; + uint64_t data; + struct huff_code huffman_value; + const uint32_t extra_bits[3] = { 2, 3, 7 }; + + bit_count = buffer_bits_used(header_bitbuf); + + data = (end_of_block ? 5 : 4) | (hlit << 3) | (hdist << 8) | (hclen << 13); + data |= ((lookup_table[code_length_code_order[0]].length) << DYN_HDR_START_LEN); + write_bits(header_bitbuf, data, DYN_HDR_START_LEN + 3); + data = 0; + for (i = hclen + 3; i >= 1; i--) + data = (data << 3) | lookup_table[code_length_code_order[i]].length; + + write_bits(header_bitbuf, data, (hclen + 3) * 3); + + for (i = 0; i < huffman_rep_length; i++) { + huffman_value = lookup_table[huffman_rep[i].code]; + + write_bits(header_bitbuf, (uint64_t) huffman_value.code, + (uint32_t) huffman_value.length); + + if (huffman_rep[i].code > 15) { + write_bits(header_bitbuf, (uint64_t) huffman_rep[i].extra_bits, + (uint32_t) extra_bits[huffman_rep[i].code - 16]); + } + } + bit_count = buffer_bits_used(header_bitbuf) - bit_count; + + return bit_count; } /** @@ -1084,118 +1067,117 @@ static int create_huffman_header(struct BitBuf2 *header_bitbuf, * @param end_of_block: Value determining whether end of block header is produced or not; * 0 corresponds to not end of block and all other inputs correspond to end of block. */ -static inline int create_header(struct BitBuf2 *header_bitbuf, struct rl_code *huffman_rep, - uint32_t length, uint64_t * histogram, uint32_t hlit, - uint32_t hdist, uint32_t end_of_block) +static inline int +create_header(struct BitBuf2 *header_bitbuf, struct rl_code *huffman_rep, uint32_t length, + uint64_t *histogram, uint32_t hlit, uint32_t hdist, uint32_t end_of_block) { - int i; + int i; - uint32_t heap_size; - struct heap_tree heap_space; - uint32_t code_len_count[MAX_HUFF_TREE_DEPTH + 1]; - struct huff_code lookup_table[HUFF_LEN]; + uint32_t heap_size; + struct heap_tree heap_space; + uint32_t code_len_count[MAX_HUFF_TREE_DEPTH + 1]; + struct huff_code lookup_table[HUFF_LEN]; - /* hlit, hdist, and hclen are defined in RFC 1951 page 13 */ - uint32_t hclen; - uint64_t bit_count; + /* hlit, hdist, and hclen are defined in RFC 1951 page 13 */ + uint32_t hclen; + uint64_t bit_count; - /* Create a huffman tree to encode run length encoded representation. */ - heap_size = init_heap64(&heap_space, histogram, HUFF_LEN); - gen_huff_code_lens(&heap_space, heap_size, code_len_count, - (struct huff_code *)lookup_table, HUFF_LEN, 7); - set_huff_codes(lookup_table, HUFF_LEN, code_len_count); + /* Create a huffman tree to encode run length encoded representation. */ + heap_size = init_heap64(&heap_space, histogram, HUFF_LEN); + gen_huff_code_lens(&heap_space, heap_size, code_len_count, + (struct huff_code *) lookup_table, HUFF_LEN, 7); + set_huff_codes(lookup_table, HUFF_LEN, code_len_count); - /* Calculate hclen */ - for (i = CODE_LEN_CODES - 1; i > 3; i--) /* i must be at least 4 */ - if (lookup_table[code_length_code_order[i]].length != 0) - break; + /* Calculate hclen */ + for (i = CODE_LEN_CODES - 1; i > 3; i--) /* i must be at least 4 */ + if (lookup_table[code_length_code_order[i]].length != 0) + break; - hclen = i - 3; + hclen = i - 3; - /* Generate actual header. */ - bit_count = create_huffman_header(header_bitbuf, lookup_table, huffman_rep, - length, end_of_block, hclen, hlit, hdist); + /* Generate actual header. */ + bit_count = create_huffman_header(header_bitbuf, lookup_table, huffman_rep, length, + end_of_block, hclen, hlit, hdist); - return bit_count; + return bit_count; } -static inline - struct rl_code *write_rl(struct rl_code *pout, uint16_t last_len, uint32_t run_len, - uint64_t * counts) +static inline struct rl_code * +write_rl(struct rl_code *pout, uint16_t last_len, uint32_t run_len, uint64_t *counts) { - if (last_len == 0) { - while (run_len > 138) { - pout->code = 18; - pout->extra_bits = 138 - 11; - pout++; - run_len -= 138; - counts[18]++; - } - // 1 <= run_len <= 138 - if (run_len > 10) { - pout->code = 18; - pout->extra_bits = run_len - 11; - pout++; - counts[18]++; - } else if (run_len > 2) { - pout->code = 17; - pout->extra_bits = run_len - 3; - pout++; - counts[17]++; - } else if (run_len == 1) { - pout->code = 0; - pout->extra_bits = 0; - pout++; - counts[0]++; - } else { - assert(run_len == 2); - pout[0].code = 0; - pout[0].extra_bits = 0; - pout[1].code = 0; - pout[1].extra_bits = 0; - pout += 2; - counts[0] += 2; - } - } else { - // last_len != 0 - pout->code = last_len; - pout->extra_bits = 0; - pout++; - counts[last_len]++; - run_len--; - if (run_len != 0) { - while (run_len > 6) { - pout->code = 16; - pout->extra_bits = 6 - 3; - pout++; - run_len -= 6; - counts[16]++; - } - // 1 <= run_len <= 6 - switch (run_len) { - case 1: - pout->code = last_len; - pout->extra_bits = 0; - pout++; - counts[last_len]++; - break; - case 2: - pout[0].code = last_len; - pout[0].extra_bits = 0; - pout[1].code = last_len; - pout[1].extra_bits = 0; - pout += 2; - counts[last_len] += 2; - break; - default: // 3...6 - pout->code = 16; - pout->extra_bits = run_len - 3; - pout++; - counts[16]++; - } - } - } - return pout; + if (last_len == 0) { + while (run_len > 138) { + pout->code = 18; + pout->extra_bits = 138 - 11; + pout++; + run_len -= 138; + counts[18]++; + } + // 1 <= run_len <= 138 + if (run_len > 10) { + pout->code = 18; + pout->extra_bits = run_len - 11; + pout++; + counts[18]++; + } else if (run_len > 2) { + pout->code = 17; + pout->extra_bits = run_len - 3; + pout++; + counts[17]++; + } else if (run_len == 1) { + pout->code = 0; + pout->extra_bits = 0; + pout++; + counts[0]++; + } else { + assert(run_len == 2); + pout[0].code = 0; + pout[0].extra_bits = 0; + pout[1].code = 0; + pout[1].extra_bits = 0; + pout += 2; + counts[0] += 2; + } + } else { + // last_len != 0 + pout->code = last_len; + pout->extra_bits = 0; + pout++; + counts[last_len]++; + run_len--; + if (run_len != 0) { + while (run_len > 6) { + pout->code = 16; + pout->extra_bits = 6 - 3; + pout++; + run_len -= 6; + counts[16]++; + } + // 1 <= run_len <= 6 + switch (run_len) { + case 1: + pout->code = last_len; + pout->extra_bits = 0; + pout++; + counts[last_len]++; + break; + case 2: + pout[0].code = last_len; + pout[0].extra_bits = 0; + pout[1].code = last_len; + pout[1].extra_bits = 0; + pout += 2; + counts[last_len] += 2; + break; + default: // 3...6 + pout->code = 16; + pout->extra_bits = run_len - 3; + pout++; + counts[16]++; + } + } + } + return pout; } // convert codes into run-length symbols, write symbols into OUT @@ -1204,29 +1186,29 @@ static inline // 4:0 code (0...18) // 15:8 Extra bits (0...127) // returns number of symbols in out -static inline uint32_t rl_encode(uint16_t * codes, uint32_t num_codes, uint64_t * counts, - struct rl_code *out) +static inline uint32_t +rl_encode(uint16_t *codes, uint32_t num_codes, uint64_t *counts, struct rl_code *out) { - uint32_t i, run_len; - uint16_t last_len, len; - struct rl_code *pout; - - pout = out; - last_len = codes[0]; - run_len = 1; - for (i = 1; i < num_codes; i++) { - len = codes[i]; - if (len == last_len) { - run_len++; - continue; - } - pout = write_rl(pout, last_len, run_len, counts); - last_len = len; - run_len = 1; - } - pout = write_rl(pout, last_len, run_len, counts); - - return (uint32_t) (pout - out); + uint32_t i, run_len; + uint16_t last_len, len; + struct rl_code *pout; + + pout = out; + last_len = codes[0]; + run_len = 1; + for (i = 1; i < num_codes; i++) { + len = codes[i]; + if (len == last_len) { + run_len++; + continue; + } + pout = write_rl(pout, last_len, run_len, counts); + last_len = len; + run_len = 1; + } + pout = write_rl(pout, last_len, run_len, counts); + + return (uint32_t) (pout - out); } /** @@ -1236,14 +1218,15 @@ static inline uint32_t rl_encode(uint16_t * codes, uint32_t num_codes, uint64_t * @param length: the length of hufftable * @param hufftable: a huffman lookup table */ -static void create_code_tables(uint16_t * code_table, uint8_t * code_length_table, - uint32_t length, struct huff_code *hufftable) +static void +create_code_tables(uint16_t *code_table, uint8_t *code_length_table, uint32_t length, + struct huff_code *hufftable) { - int i; - for (i = 0; i < length; i++) { - code_table[i] = hufftable[i].code; - code_length_table[i] = hufftable[i].length; - } + int i; + for (i = 0; i < length; i++) { + code_table[i] = hufftable[i].code; + code_length_table[i] = hufftable[i].length; + } } /** @@ -1254,35 +1237,35 @@ static void create_code_tables(uint16_t * code_table, uint8_t * code_length_tabl * @param length: the length of lit_len_hufftable * @param lit_len_hufftable: a literal/length huffman lookup table */ -static void create_packed_len_table(uint32_t * packed_table, - struct huff_code *lit_len_hufftable) +static void +create_packed_len_table(uint32_t *packed_table, struct huff_code *lit_len_hufftable) { - int i, count = 0; - uint16_t extra_bits; - uint16_t extra_bits_count = 0; - - /* Gain extra bits is the next place where the number of extra bits in - * length codes increases. */ - uint16_t gain_extra_bits = LEN_EXTRA_BITS_START; - - for (i = 257; i < LIT_LEN - 1; i++) { - for (extra_bits = 0; extra_bits < (1 << extra_bits_count); extra_bits++) { - if (count > 254) - break; - packed_table[count++] = - (extra_bits << (lit_len_hufftable[i].length + LENGTH_BITS)) | - (lit_len_hufftable[i].code << LENGTH_BITS) | - (lit_len_hufftable[i].length + extra_bits_count); - } - - if (i == gain_extra_bits) { - gain_extra_bits += LEN_EXTRA_BITS_INTERVAL; - extra_bits_count += 1; - } - } - - packed_table[count] = (lit_len_hufftable[LIT_LEN - 1].code << LENGTH_BITS) | - (lit_len_hufftable[LIT_LEN - 1].length); + int i, count = 0; + uint16_t extra_bits; + uint16_t extra_bits_count = 0; + + /* Gain extra bits is the next place where the number of extra bits in + * length codes increases. */ + uint16_t gain_extra_bits = LEN_EXTRA_BITS_START; + + for (i = 257; i < LIT_LEN - 1; i++) { + for (extra_bits = 0; extra_bits < (1 << extra_bits_count); extra_bits++) { + if (count > 254) + break; + packed_table[count++] = + (extra_bits << (lit_len_hufftable[i].length + LENGTH_BITS)) | + (lit_len_hufftable[i].code << LENGTH_BITS) | + (lit_len_hufftable[i].length + extra_bits_count); + } + + if (i == gain_extra_bits) { + gain_extra_bits += LEN_EXTRA_BITS_INTERVAL; + extra_bits_count += 1; + } + } + + packed_table[count] = (lit_len_hufftable[LIT_LEN - 1].code << LENGTH_BITS) | + (lit_len_hufftable[LIT_LEN - 1].length); } /** @@ -1293,34 +1276,33 @@ static void create_packed_len_table(uint32_t * packed_table, * @param length: the length of lit_len_hufftable * @param dist_hufftable: a distance huffman lookup table */ -static void create_packed_dist_table(uint32_t * packed_table, uint32_t length, - struct huff_code *dist_hufftable) +static void +create_packed_dist_table(uint32_t *packed_table, uint32_t length, struct huff_code *dist_hufftable) { - int i, count = 0; - uint16_t extra_bits; - uint16_t extra_bits_count = 0; - - /* Gain extra bits is the next place where the number of extra bits in - * distance codes increases. */ - uint16_t gain_extra_bits = DIST_EXTRA_BITS_START; - - for (i = 0; i < DIST_LEN; i++) { - for (extra_bits = 0; extra_bits < (1 << extra_bits_count); extra_bits++) { - if (count >= length) - return; - - packed_table[count++] = - (extra_bits << (dist_hufftable[i].length + LENGTH_BITS)) | - (dist_hufftable[i].code << LENGTH_BITS) | - (dist_hufftable[i].length + extra_bits_count); - - } - - if (i == gain_extra_bits) { - gain_extra_bits += DIST_EXTRA_BITS_INTERVAL; - extra_bits_count += 1; - } - } + int i, count = 0; + uint16_t extra_bits; + uint16_t extra_bits_count = 0; + + /* Gain extra bits is the next place where the number of extra bits in + * distance codes increases. */ + uint16_t gain_extra_bits = DIST_EXTRA_BITS_START; + + for (i = 0; i < DIST_LEN; i++) { + for (extra_bits = 0; extra_bits < (1 << extra_bits_count); extra_bits++) { + if (count >= length) + return; + + packed_table[count++] = + (extra_bits << (dist_hufftable[i].length + LENGTH_BITS)) | + (dist_hufftable[i].code << LENGTH_BITS) | + (dist_hufftable[i].length + extra_bits_count); + } + + if (i == gain_extra_bits) { + gain_extra_bits += DIST_EXTRA_BITS_INTERVAL; + extra_bits_count += 1; + } + } } /** @@ -1330,349 +1312,341 @@ static void create_packed_dist_table(uint32_t * packed_table, uint32_t length, * @param dist_hufftable: distance huffman code * @returns Returns 0 if the table is usable */ -static int are_hufftables_useable(struct huff_code *lit_len_hufftable, - struct huff_code *dist_hufftable) +static int +are_hufftables_useable(struct huff_code *lit_len_hufftable, struct huff_code *dist_hufftable) { - int max_lit_code_len = 0, max_len_code_len = 0, max_dist_code_len = 0; - int dist_extra_bits = 0, len_extra_bits = 0; - int gain_dist_extra_bits = DIST_EXTRA_BITS_START; - int gain_len_extra_bits = LEN_EXTRA_BITS_START; - int max_code_len; - int i; - - for (i = 0; i < LIT_LEN; i++) - if (lit_len_hufftable[i].length > max_lit_code_len) - max_lit_code_len = lit_len_hufftable[i].length; - - for (i = 257; i < LIT_LEN - 1; i++) { - if (lit_len_hufftable[i].length + len_extra_bits > max_len_code_len) - max_len_code_len = lit_len_hufftable[i].length + len_extra_bits; - - if (i == gain_len_extra_bits) { - gain_len_extra_bits += LEN_EXTRA_BITS_INTERVAL; - len_extra_bits += 1; - } - } - - for (i = 0; i < DIST_LEN; i++) { - if (dist_hufftable[i].length + dist_extra_bits > max_dist_code_len) - max_dist_code_len = dist_hufftable[i].length + dist_extra_bits; - - if (i == gain_dist_extra_bits) { - gain_dist_extra_bits += DIST_EXTRA_BITS_INTERVAL; - dist_extra_bits += 1; - } - } - - max_code_len = max_lit_code_len + max_len_code_len + max_dist_code_len; - - /* Some versions of igzip can write up to one literal, one length and one - * distance code at the same time. This checks to make sure that is - * always writeable in bitbuf*/ - return (max_code_len > MAX_BITBUF_BIT_WRITE); + int max_lit_code_len = 0, max_len_code_len = 0, max_dist_code_len = 0; + int dist_extra_bits = 0, len_extra_bits = 0; + int gain_dist_extra_bits = DIST_EXTRA_BITS_START; + int gain_len_extra_bits = LEN_EXTRA_BITS_START; + int max_code_len; + int i; + + for (i = 0; i < LIT_LEN; i++) + if (lit_len_hufftable[i].length > max_lit_code_len) + max_lit_code_len = lit_len_hufftable[i].length; + + for (i = 257; i < LIT_LEN - 1; i++) { + if (lit_len_hufftable[i].length + len_extra_bits > max_len_code_len) + max_len_code_len = lit_len_hufftable[i].length + len_extra_bits; + + if (i == gain_len_extra_bits) { + gain_len_extra_bits += LEN_EXTRA_BITS_INTERVAL; + len_extra_bits += 1; + } + } + + for (i = 0; i < DIST_LEN; i++) { + if (dist_hufftable[i].length + dist_extra_bits > max_dist_code_len) + max_dist_code_len = dist_hufftable[i].length + dist_extra_bits; + + if (i == gain_dist_extra_bits) { + gain_dist_extra_bits += DIST_EXTRA_BITS_INTERVAL; + dist_extra_bits += 1; + } + } + + max_code_len = max_lit_code_len + max_len_code_len + max_dist_code_len; + + /* Some versions of igzip can write up to one literal, one length and one + * distance code at the same time. This checks to make sure that is + * always writeable in bitbuf*/ + return (max_code_len > MAX_BITBUF_BIT_WRITE); } -int isal_create_hufftables(struct isal_hufftables *hufftables, - struct isal_huff_histogram *histogram) +int +isal_create_hufftables(struct isal_hufftables *hufftables, struct isal_huff_histogram *histogram) { - struct huff_code lit_huff_table[LIT_LEN], dist_huff_table[DIST_LEN]; - uint64_t bit_count; - int max_dist = convert_dist_to_dist_sym(IGZIP_HIST_SIZE); - struct heap_tree heap_space; - uint32_t heap_size; - uint32_t code_len_count[MAX_HUFF_TREE_DEPTH + 1]; - struct BitBuf2 header_bitbuf; - uint32_t max_lit_len_sym; - uint32_t max_dist_sym; - uint32_t hlit, hdist, i; - uint16_t combined_table[LIT_LEN + DIST_LEN]; - uint64_t count_histogram[HUFF_LEN]; - struct rl_code rl_huff[LIT_LEN + DIST_LEN]; - uint32_t rl_huff_len; - - uint32_t *dist_table = hufftables->dist_table; - uint32_t *len_table = hufftables->len_table; - uint16_t *lit_table = hufftables->lit_table; - uint16_t *dcodes = hufftables->dcodes; - uint8_t *lit_table_sizes = hufftables->lit_table_sizes; - uint8_t *dcodes_sizes = hufftables->dcodes_sizes; - uint64_t *lit_len_histogram = histogram->lit_len_histogram; - uint64_t *dist_histogram = histogram->dist_histogram; - - memset(hufftables, 0, sizeof(struct isal_hufftables)); - - heap_size = init_heap64_complete(&heap_space, lit_len_histogram, LIT_LEN); - gen_huff_code_lens(&heap_space, heap_size, code_len_count, - (struct huff_code *)lit_huff_table, LIT_LEN, MAX_DEFLATE_CODE_LEN); - max_lit_len_sym = set_huff_codes(lit_huff_table, LIT_LEN, code_len_count); - - heap_size = init_heap64_complete(&heap_space, dist_histogram, DIST_LEN); - gen_huff_code_lens(&heap_space, heap_size, code_len_count, - (struct huff_code *)dist_huff_table, max_dist, - MAX_DEFLATE_CODE_LEN); - max_dist_sym = set_huff_codes(dist_huff_table, DIST_LEN, code_len_count); - - if (are_hufftables_useable(lit_huff_table, dist_huff_table)) { - heap_size = init_heap64_complete(&heap_space, lit_len_histogram, LIT_LEN); - gen_huff_code_lens(&heap_space, heap_size, code_len_count, - (struct huff_code *)lit_huff_table, LIT_LEN, - MAX_SAFE_LIT_CODE_LEN); - max_lit_len_sym = set_huff_codes(lit_huff_table, LIT_LEN, code_len_count); - - heap_size = init_heap64_complete(&heap_space, dist_histogram, DIST_LEN); - gen_huff_code_lens(&heap_space, heap_size, code_len_count, - (struct huff_code *)dist_huff_table, max_dist, - MAX_SAFE_DIST_CODE_LEN); - max_dist_sym = set_huff_codes(dist_huff_table, DIST_LEN, code_len_count); - - } - - create_code_tables(dcodes, dcodes_sizes, DIST_LEN - DCODE_OFFSET, - dist_huff_table + DCODE_OFFSET); - - create_code_tables(lit_table, lit_table_sizes, IGZIP_LIT_TABLE_SIZE, lit_huff_table); - - create_packed_len_table(len_table, lit_huff_table); - create_packed_dist_table(dist_table, IGZIP_DIST_TABLE_SIZE, dist_huff_table); - - set_buf(&header_bitbuf, hufftables->deflate_hdr, sizeof(hufftables->deflate_hdr)); - init(&header_bitbuf); - - hlit = max_lit_len_sym - 256; - hdist = max_dist_sym; - - /* Run length encode the length and distance huffman codes */ - memset(count_histogram, 0, sizeof(count_histogram)); - for (i = 0; i < 257 + hlit; i++) - combined_table[i] = lit_huff_table[i].length; - for (i = 0; i < 1 + hdist; i++) - combined_table[i + hlit + 257] = dist_huff_table[i].length; - rl_huff_len = - rl_encode(combined_table, hlit + 257 + hdist + 1, count_histogram, rl_huff); - - /* Create header */ - bit_count = - create_header(&header_bitbuf, rl_huff, rl_huff_len, - count_histogram, hlit, hdist, LAST_BLOCK); - flush(&header_bitbuf); - - hufftables->deflate_hdr_count = bit_count / 8; - hufftables->deflate_hdr_extra_bits = bit_count % 8; - - return 0; + struct huff_code lit_huff_table[LIT_LEN], dist_huff_table[DIST_LEN]; + uint64_t bit_count; + int max_dist = convert_dist_to_dist_sym(IGZIP_HIST_SIZE); + struct heap_tree heap_space; + uint32_t heap_size; + uint32_t code_len_count[MAX_HUFF_TREE_DEPTH + 1]; + struct BitBuf2 header_bitbuf; + uint32_t max_lit_len_sym; + uint32_t max_dist_sym; + uint32_t hlit, hdist, i; + uint16_t combined_table[LIT_LEN + DIST_LEN]; + uint64_t count_histogram[HUFF_LEN]; + struct rl_code rl_huff[LIT_LEN + DIST_LEN]; + uint32_t rl_huff_len; + + uint32_t *dist_table = hufftables->dist_table; + uint32_t *len_table = hufftables->len_table; + uint16_t *lit_table = hufftables->lit_table; + uint16_t *dcodes = hufftables->dcodes; + uint8_t *lit_table_sizes = hufftables->lit_table_sizes; + uint8_t *dcodes_sizes = hufftables->dcodes_sizes; + uint64_t *lit_len_histogram = histogram->lit_len_histogram; + uint64_t *dist_histogram = histogram->dist_histogram; + + memset(hufftables, 0, sizeof(struct isal_hufftables)); + + heap_size = init_heap64_complete(&heap_space, lit_len_histogram, LIT_LEN); + gen_huff_code_lens(&heap_space, heap_size, code_len_count, + (struct huff_code *) lit_huff_table, LIT_LEN, MAX_DEFLATE_CODE_LEN); + max_lit_len_sym = set_huff_codes(lit_huff_table, LIT_LEN, code_len_count); + + heap_size = init_heap64_complete(&heap_space, dist_histogram, DIST_LEN); + gen_huff_code_lens(&heap_space, heap_size, code_len_count, + (struct huff_code *) dist_huff_table, max_dist, MAX_DEFLATE_CODE_LEN); + max_dist_sym = set_huff_codes(dist_huff_table, DIST_LEN, code_len_count); + + if (are_hufftables_useable(lit_huff_table, dist_huff_table)) { + heap_size = init_heap64_complete(&heap_space, lit_len_histogram, LIT_LEN); + gen_huff_code_lens(&heap_space, heap_size, code_len_count, + (struct huff_code *) lit_huff_table, LIT_LEN, + MAX_SAFE_LIT_CODE_LEN); + max_lit_len_sym = set_huff_codes(lit_huff_table, LIT_LEN, code_len_count); + + heap_size = init_heap64_complete(&heap_space, dist_histogram, DIST_LEN); + gen_huff_code_lens(&heap_space, heap_size, code_len_count, + (struct huff_code *) dist_huff_table, max_dist, + MAX_SAFE_DIST_CODE_LEN); + max_dist_sym = set_huff_codes(dist_huff_table, DIST_LEN, code_len_count); + } + + create_code_tables(dcodes, dcodes_sizes, DIST_LEN - DCODE_OFFSET, + dist_huff_table + DCODE_OFFSET); + + create_code_tables(lit_table, lit_table_sizes, IGZIP_LIT_TABLE_SIZE, lit_huff_table); + + create_packed_len_table(len_table, lit_huff_table); + create_packed_dist_table(dist_table, IGZIP_DIST_TABLE_SIZE, dist_huff_table); + + set_buf(&header_bitbuf, hufftables->deflate_hdr, sizeof(hufftables->deflate_hdr)); + init(&header_bitbuf); + + hlit = max_lit_len_sym - 256; + hdist = max_dist_sym; + + /* Run length encode the length and distance huffman codes */ + memset(count_histogram, 0, sizeof(count_histogram)); + for (i = 0; i < 257 + hlit; i++) + combined_table[i] = lit_huff_table[i].length; + for (i = 0; i < 1 + hdist; i++) + combined_table[i + hlit + 257] = dist_huff_table[i].length; + rl_huff_len = rl_encode(combined_table, hlit + 257 + hdist + 1, count_histogram, rl_huff); + + /* Create header */ + bit_count = create_header(&header_bitbuf, rl_huff, rl_huff_len, count_histogram, hlit, + hdist, LAST_BLOCK); + flush(&header_bitbuf); + + hufftables->deflate_hdr_count = bit_count / 8; + hufftables->deflate_hdr_extra_bits = bit_count % 8; + + return 0; } -int isal_create_hufftables_subset(struct isal_hufftables *hufftables, - struct isal_huff_histogram *histogram) +int +isal_create_hufftables_subset(struct isal_hufftables *hufftables, + struct isal_huff_histogram *histogram) { - struct huff_code lit_huff_table[LIT_LEN], dist_huff_table[DIST_LEN]; - uint64_t bit_count; - int max_dist = convert_dist_to_dist_sym(IGZIP_HIST_SIZE); - struct heap_tree heap_space; - uint32_t heap_size; - uint32_t code_len_count[MAX_HUFF_TREE_DEPTH + 1]; - struct BitBuf2 header_bitbuf; - uint32_t max_lit_len_sym; - uint32_t max_dist_sym; - uint32_t hlit, hdist, i; - uint16_t combined_table[LIT_LEN + DIST_LEN]; - uint64_t count_histogram[HUFF_LEN]; - struct rl_code rl_huff[LIT_LEN + DIST_LEN]; - uint32_t rl_huff_len; - - uint32_t *dist_table = hufftables->dist_table; - uint32_t *len_table = hufftables->len_table; - uint16_t *lit_table = hufftables->lit_table; - uint16_t *dcodes = hufftables->dcodes; - uint8_t *lit_table_sizes = hufftables->lit_table_sizes; - uint8_t *dcodes_sizes = hufftables->dcodes_sizes; - uint64_t *lit_len_histogram = histogram->lit_len_histogram; - uint64_t *dist_histogram = histogram->dist_histogram; - - memset(hufftables, 0, sizeof(struct isal_hufftables)); - - heap_size = - init_heap64_semi_complete(&heap_space, lit_len_histogram, LIT_LEN, - ISAL_DEF_LIT_SYMBOLS); - gen_huff_code_lens(&heap_space, heap_size, code_len_count, - (struct huff_code *)lit_huff_table, LIT_LEN, MAX_DEFLATE_CODE_LEN); - max_lit_len_sym = set_huff_codes(lit_huff_table, LIT_LEN, code_len_count); - - heap_size = init_heap64_complete(&heap_space, dist_histogram, DIST_LEN); - gen_huff_code_lens(&heap_space, heap_size, code_len_count, - (struct huff_code *)dist_huff_table, max_dist, - MAX_DEFLATE_CODE_LEN); - max_dist_sym = set_huff_codes(dist_huff_table, DIST_LEN, code_len_count); - - if (are_hufftables_useable(lit_huff_table, dist_huff_table)) { - heap_size = init_heap64_complete(&heap_space, lit_len_histogram, LIT_LEN); - gen_huff_code_lens(&heap_space, heap_size, code_len_count, - (struct huff_code *)lit_huff_table, LIT_LEN, - MAX_SAFE_LIT_CODE_LEN); - max_lit_len_sym = set_huff_codes(lit_huff_table, LIT_LEN, code_len_count); - - heap_size = init_heap64_complete(&heap_space, dist_histogram, DIST_LEN); - gen_huff_code_lens(&heap_space, heap_size, code_len_count, - (struct huff_code *)dist_huff_table, max_dist, - MAX_SAFE_DIST_CODE_LEN); - max_dist_sym = set_huff_codes(dist_huff_table, DIST_LEN, code_len_count); - - } - - create_code_tables(dcodes, dcodes_sizes, DIST_LEN - DCODE_OFFSET, - dist_huff_table + DCODE_OFFSET); - - create_code_tables(lit_table, lit_table_sizes, IGZIP_LIT_TABLE_SIZE, lit_huff_table); - - create_packed_len_table(len_table, lit_huff_table); - create_packed_dist_table(dist_table, IGZIP_DIST_TABLE_SIZE, dist_huff_table); - - set_buf(&header_bitbuf, hufftables->deflate_hdr, sizeof(hufftables->deflate_hdr)); - init(&header_bitbuf); - - hlit = max_lit_len_sym - 256; - hdist = max_dist_sym; - - /* Run length encode the length and distance huffman codes */ - memset(count_histogram, 0, sizeof(count_histogram)); - for (i = 0; i < 257 + hlit; i++) - combined_table[i] = lit_huff_table[i].length; - for (i = 0; i < 1 + hdist; i++) - combined_table[i + hlit + 257] = dist_huff_table[i].length; - rl_huff_len = - rl_encode(combined_table, hlit + 257 + hdist + 1, count_histogram, rl_huff); - - /* Create header */ - bit_count = - create_header(&header_bitbuf, rl_huff, rl_huff_len, - count_histogram, hlit, hdist, LAST_BLOCK); - flush(&header_bitbuf); - - hufftables->deflate_hdr_count = bit_count / 8; - hufftables->deflate_hdr_extra_bits = bit_count % 8; - - return 0; + struct huff_code lit_huff_table[LIT_LEN], dist_huff_table[DIST_LEN]; + uint64_t bit_count; + int max_dist = convert_dist_to_dist_sym(IGZIP_HIST_SIZE); + struct heap_tree heap_space; + uint32_t heap_size; + uint32_t code_len_count[MAX_HUFF_TREE_DEPTH + 1]; + struct BitBuf2 header_bitbuf; + uint32_t max_lit_len_sym; + uint32_t max_dist_sym; + uint32_t hlit, hdist, i; + uint16_t combined_table[LIT_LEN + DIST_LEN]; + uint64_t count_histogram[HUFF_LEN]; + struct rl_code rl_huff[LIT_LEN + DIST_LEN]; + uint32_t rl_huff_len; + + uint32_t *dist_table = hufftables->dist_table; + uint32_t *len_table = hufftables->len_table; + uint16_t *lit_table = hufftables->lit_table; + uint16_t *dcodes = hufftables->dcodes; + uint8_t *lit_table_sizes = hufftables->lit_table_sizes; + uint8_t *dcodes_sizes = hufftables->dcodes_sizes; + uint64_t *lit_len_histogram = histogram->lit_len_histogram; + uint64_t *dist_histogram = histogram->dist_histogram; + + memset(hufftables, 0, sizeof(struct isal_hufftables)); + + heap_size = init_heap64_semi_complete(&heap_space, lit_len_histogram, LIT_LEN, + ISAL_DEF_LIT_SYMBOLS); + gen_huff_code_lens(&heap_space, heap_size, code_len_count, + (struct huff_code *) lit_huff_table, LIT_LEN, MAX_DEFLATE_CODE_LEN); + max_lit_len_sym = set_huff_codes(lit_huff_table, LIT_LEN, code_len_count); + + heap_size = init_heap64_complete(&heap_space, dist_histogram, DIST_LEN); + gen_huff_code_lens(&heap_space, heap_size, code_len_count, + (struct huff_code *) dist_huff_table, max_dist, MAX_DEFLATE_CODE_LEN); + max_dist_sym = set_huff_codes(dist_huff_table, DIST_LEN, code_len_count); + + if (are_hufftables_useable(lit_huff_table, dist_huff_table)) { + heap_size = init_heap64_complete(&heap_space, lit_len_histogram, LIT_LEN); + gen_huff_code_lens(&heap_space, heap_size, code_len_count, + (struct huff_code *) lit_huff_table, LIT_LEN, + MAX_SAFE_LIT_CODE_LEN); + max_lit_len_sym = set_huff_codes(lit_huff_table, LIT_LEN, code_len_count); + + heap_size = init_heap64_complete(&heap_space, dist_histogram, DIST_LEN); + gen_huff_code_lens(&heap_space, heap_size, code_len_count, + (struct huff_code *) dist_huff_table, max_dist, + MAX_SAFE_DIST_CODE_LEN); + max_dist_sym = set_huff_codes(dist_huff_table, DIST_LEN, code_len_count); + } + + create_code_tables(dcodes, dcodes_sizes, DIST_LEN - DCODE_OFFSET, + dist_huff_table + DCODE_OFFSET); + + create_code_tables(lit_table, lit_table_sizes, IGZIP_LIT_TABLE_SIZE, lit_huff_table); + + create_packed_len_table(len_table, lit_huff_table); + create_packed_dist_table(dist_table, IGZIP_DIST_TABLE_SIZE, dist_huff_table); + + set_buf(&header_bitbuf, hufftables->deflate_hdr, sizeof(hufftables->deflate_hdr)); + init(&header_bitbuf); + + hlit = max_lit_len_sym - 256; + hdist = max_dist_sym; + + /* Run length encode the length and distance huffman codes */ + memset(count_histogram, 0, sizeof(count_histogram)); + for (i = 0; i < 257 + hlit; i++) + combined_table[i] = lit_huff_table[i].length; + for (i = 0; i < 1 + hdist; i++) + combined_table[i + hlit + 257] = dist_huff_table[i].length; + rl_huff_len = rl_encode(combined_table, hlit + 257 + hdist + 1, count_histogram, rl_huff); + + /* Create header */ + bit_count = create_header(&header_bitbuf, rl_huff, rl_huff_len, count_histogram, hlit, + hdist, LAST_BLOCK); + flush(&header_bitbuf); + + hufftables->deflate_hdr_count = bit_count / 8; + hufftables->deflate_hdr_extra_bits = bit_count % 8; + + return 0; } -static void expand_hufftables_icf(struct hufftables_icf *hufftables) +static void +expand_hufftables_icf(struct hufftables_icf *hufftables) { - uint32_t i, eb, j, k, len, code; - struct huff_code orig[21], *p_code; - struct huff_code *lit_len_codes = hufftables->lit_len_table; - struct huff_code *dist_codes = hufftables->dist_table; - - for (i = 0; i < 21; i++) - orig[i] = lit_len_codes[i + 265]; - - p_code = &lit_len_codes[265]; - - i = 0; - for (eb = 1; eb < 6; eb++) { - for (k = 0; k < 4; k++) { - len = orig[i].length; - code = orig[i++].code; - for (j = 0; j < (1u << eb); j++) { - p_code->code_and_extra = code | (j << len); - p_code->length = len + eb; - p_code++; - } - } // end for k - } // end for eb - // fix up last record - p_code[-1] = orig[i]; - - dist_codes[DIST_LEN].code_and_extra = 0; - dist_codes[DIST_LEN].length = 0; + uint32_t i, eb, j, k, len, code; + struct huff_code orig[21], *p_code; + struct huff_code *lit_len_codes = hufftables->lit_len_table; + struct huff_code *dist_codes = hufftables->dist_table; + + for (i = 0; i < 21; i++) + orig[i] = lit_len_codes[i + 265]; + + p_code = &lit_len_codes[265]; + + i = 0; + for (eb = 1; eb < 6; eb++) { + for (k = 0; k < 4; k++) { + len = orig[i].length; + code = orig[i++].code; + for (j = 0; j < (1u << eb); j++) { + p_code->code_and_extra = code | (j << len); + p_code->length = len + eb; + p_code++; + } + } // end for k + } // end for eb + // fix up last record + p_code[-1] = orig[i]; + + dist_codes[DIST_LEN].code_and_extra = 0; + dist_codes[DIST_LEN].length = 0; } uint64_t create_hufftables_icf(struct BitBuf2 *bb, struct hufftables_icf *hufftables, - struct isal_mod_hist *hist, uint32_t end_of_block) + struct isal_mod_hist *hist, uint32_t end_of_block) { - uint32_t bl_count[MAX_DEFLATE_CODE_LEN + 1]; - uint32_t max_ll_code, max_d_code; - struct heap_tree heap_space; - uint32_t heap_size; - struct rl_code cl_tokens[LIT_LEN + DIST_LEN]; - uint32_t num_cl_tokens; - uint64_t cl_counts[CODE_LEN_CODES]; - uint16_t combined_table[LIT_LEN + DIST_LEN]; - int i; - uint64_t compressed_len = 0; - uint64_t static_compressed_len = 3; /* The static header size */ - struct BitBuf2 bb_tmp; - - struct huff_code *ll_codes = hufftables->lit_len_table; - struct huff_code *d_codes = hufftables->dist_table; - uint32_t *ll_hist = hist->ll_hist; - uint32_t *d_hist = hist->d_hist; - struct huff_code *static_ll_codes = static_hufftables.lit_len_table; - struct huff_code *static_d_codes = static_hufftables.dist_table; - - memcpy(&bb_tmp, bb, sizeof(struct BitBuf2)); - - flatten_ll(hist->ll_hist); - - // make sure EOB is present - if (ll_hist[256] == 0) - ll_hist[256] = 1; - - heap_size = init_heap32(&heap_space, ll_hist, LIT_LEN); - gen_huff_code_lens(&heap_space, heap_size, bl_count, - ll_codes, LIT_LEN, MAX_DEFLATE_CODE_LEN); - max_ll_code = set_huff_codes(ll_codes, LIT_LEN, bl_count); - - heap_size = init_heap32(&heap_space, d_hist, DIST_LEN); - gen_huff_code_lens(&heap_space, heap_size, bl_count, d_codes, - DIST_LEN, MAX_DEFLATE_CODE_LEN); - max_d_code = set_dist_huff_codes(d_codes, bl_count); - - assert(max_ll_code >= 256); // must be EOB code - assert(max_d_code != 0); - - /* Run length encode the length and distance huffman codes */ - memset(cl_counts, 0, sizeof(cl_counts)); - - for (i = 0; i <= 256; i++) { - combined_table[i] = ll_codes[i].length; - compressed_len += ll_codes[i].length * ll_hist[i]; - static_compressed_len += static_ll_codes[i].length * ll_hist[i]; - } - - for (; i < max_ll_code + 1; i++) { - combined_table[i] = ll_codes[i].length; - compressed_len += - (ll_codes[i].length + len_code_extra_bits[i - 257]) * ll_hist[i]; - static_compressed_len += - (static_ll_codes[i].length + len_code_extra_bits[i - 257]) * ll_hist[i]; - } - - for (i = 0; i < max_d_code + 1; i++) { - combined_table[i + max_ll_code + 1] = d_codes[i].length; - compressed_len += (d_codes[i].length + dist_code_extra_bits[i]) * d_hist[i]; - static_compressed_len += - (static_d_codes[i].length + dist_code_extra_bits[i]) * d_hist[i]; - } - - if (static_compressed_len > compressed_len) { - num_cl_tokens = rl_encode(combined_table, max_ll_code + max_d_code + 2, - cl_counts, cl_tokens); - - /* Create header */ - create_header(bb, cl_tokens, num_cl_tokens, cl_counts, max_ll_code - 256, - max_d_code, end_of_block); - compressed_len += 8 * buffer_used(bb) + bb->m_bit_count; - } - - /* Substitute in static block since it creates smaller block */ - if (static_compressed_len <= compressed_len) { - memcpy(hufftables, &static_hufftables, sizeof(struct hufftables_icf)); - memcpy(bb, &bb_tmp, sizeof(struct BitBuf2)); - end_of_block = end_of_block ? 1 : 0; - write_bits(bb, 0x2 | end_of_block, 3); - compressed_len = static_compressed_len; - } - - expand_hufftables_icf(hufftables); - return compressed_len; + uint32_t bl_count[MAX_DEFLATE_CODE_LEN + 1]; + uint32_t max_ll_code, max_d_code; + struct heap_tree heap_space; + uint32_t heap_size; + struct rl_code cl_tokens[LIT_LEN + DIST_LEN]; + uint32_t num_cl_tokens; + uint64_t cl_counts[CODE_LEN_CODES]; + uint16_t combined_table[LIT_LEN + DIST_LEN]; + int i; + uint64_t compressed_len = 0; + uint64_t static_compressed_len = 3; /* The static header size */ + struct BitBuf2 bb_tmp; + + struct huff_code *ll_codes = hufftables->lit_len_table; + struct huff_code *d_codes = hufftables->dist_table; + uint32_t *ll_hist = hist->ll_hist; + uint32_t *d_hist = hist->d_hist; + struct huff_code *static_ll_codes = static_hufftables.lit_len_table; + struct huff_code *static_d_codes = static_hufftables.dist_table; + + memcpy(&bb_tmp, bb, sizeof(struct BitBuf2)); + + flatten_ll(hist->ll_hist); + + // make sure EOB is present + if (ll_hist[256] == 0) + ll_hist[256] = 1; + + heap_size = init_heap32(&heap_space, ll_hist, LIT_LEN); + gen_huff_code_lens(&heap_space, heap_size, bl_count, ll_codes, LIT_LEN, + MAX_DEFLATE_CODE_LEN); + max_ll_code = set_huff_codes(ll_codes, LIT_LEN, bl_count); + + heap_size = init_heap32(&heap_space, d_hist, DIST_LEN); + gen_huff_code_lens(&heap_space, heap_size, bl_count, d_codes, DIST_LEN, + MAX_DEFLATE_CODE_LEN); + max_d_code = set_dist_huff_codes(d_codes, bl_count); + + assert(max_ll_code >= 256); // must be EOB code + assert(max_d_code != 0); + + /* Run length encode the length and distance huffman codes */ + memset(cl_counts, 0, sizeof(cl_counts)); + + for (i = 0; i <= 256; i++) { + combined_table[i] = ll_codes[i].length; + compressed_len += ll_codes[i].length * ll_hist[i]; + static_compressed_len += static_ll_codes[i].length * ll_hist[i]; + } + + for (; i < max_ll_code + 1; i++) { + combined_table[i] = ll_codes[i].length; + compressed_len += (ll_codes[i].length + len_code_extra_bits[i - 257]) * ll_hist[i]; + static_compressed_len += + (static_ll_codes[i].length + len_code_extra_bits[i - 257]) * ll_hist[i]; + } + + for (i = 0; i < max_d_code + 1; i++) { + combined_table[i + max_ll_code + 1] = d_codes[i].length; + compressed_len += (d_codes[i].length + dist_code_extra_bits[i]) * d_hist[i]; + static_compressed_len += + (static_d_codes[i].length + dist_code_extra_bits[i]) * d_hist[i]; + } + + if (static_compressed_len > compressed_len) { + num_cl_tokens = rl_encode(combined_table, max_ll_code + max_d_code + 2, cl_counts, + cl_tokens); + + /* Create header */ + create_header(bb, cl_tokens, num_cl_tokens, cl_counts, max_ll_code - 256, + max_d_code, end_of_block); + compressed_len += 8 * buffer_used(bb) + bb->m_bit_count; + } + + /* Substitute in static block since it creates smaller block */ + if (static_compressed_len <= compressed_len) { + memcpy(hufftables, &static_hufftables, sizeof(struct hufftables_icf)); + memcpy(bb, &bb_tmp, sizeof(struct BitBuf2)); + end_of_block = end_of_block ? 1 : 0; + write_bits(bb, 0x2 | end_of_block, 3); + compressed_len = static_compressed_len; + } + + expand_hufftables_icf(hufftables); + return compressed_len; } diff --git a/igzip/huff_codes.h b/igzip/huff_codes.h index c4a946ae..a95d5158 100644 --- a/igzip/huff_codes.h +++ b/igzip/huff_codes.h @@ -36,135 +36,135 @@ #include "igzip_lib.h" #include "bitbuf2.h" -#if __x86_64__ || __i386__ || _M_X64 || _M_IX86 -# include +#if __x86_64__ || __i386__ || _M_X64 || _M_IX86 +#include #ifdef _MSC_VER -# include +#include #else -# include +#include #endif #endif //__x86_64__ || __i386__ || _M_X64 || _M_IX86 -#define LIT_LEN ISAL_DEF_LIT_LEN_SYMBOLS -#define DIST_LEN ISAL_DEF_DIST_SYMBOLS +#define LIT_LEN ISAL_DEF_LIT_LEN_SYMBOLS +#define DIST_LEN ISAL_DEF_DIST_SYMBOLS #define CODE_LEN_CODES 19 -#define HUFF_LEN 19 +#define HUFF_LEN 19 #ifdef LONGER_HUFFTABLE -# define DCODE_OFFSET 26 +#define DCODE_OFFSET 26 #else -# define DCODE_OFFSET 0 +#define DCODE_OFFSET 0 #endif -#define DYN_HDR_START_LEN 17 -#define MAX_HISTHEAP_SIZE LIT_LEN +#define DYN_HDR_START_LEN 17 +#define MAX_HISTHEAP_SIZE LIT_LEN #define MAX_HUFF_TREE_DEPTH 15 -#define D IGZIP_HIST_SIZE /* Amount of history */ +#define D IGZIP_HIST_SIZE /* Amount of history */ -#define MAX_DEFLATE_CODE_LEN 15 -#define MAX_SAFE_LIT_CODE_LEN 13 +#define MAX_DEFLATE_CODE_LEN 15 +#define MAX_SAFE_LIT_CODE_LEN 13 #define MAX_SAFE_DIST_CODE_LEN 12 -#define LONG_DIST_TABLE_SIZE 8192 +#define LONG_DIST_TABLE_SIZE 8192 #define SHORT_DIST_TABLE_SIZE 2 -#define LEN_TABLE_SIZE 256 -#define LIT_TABLE_SIZE 257 -#define LAST_BLOCK 1 +#define LEN_TABLE_SIZE 256 +#define LIT_TABLE_SIZE 257 +#define LAST_BLOCK 1 -#define LEN_EXTRA_BITS_START 264 -#define LEN_EXTRA_BITS_INTERVAL 4 -#define DIST_EXTRA_BITS_START 3 +#define LEN_EXTRA_BITS_START 264 +#define LEN_EXTRA_BITS_INTERVAL 4 +#define DIST_EXTRA_BITS_START 3 #define DIST_EXTRA_BITS_INTERVAL 2 #define INVALID_LIT_LEN_HUFFCODE 1 -#define INVALID_DIST_HUFFCODE 1 -#define INVALID_HUFFCODE 1 +#define INVALID_DIST_HUFFCODE 1 +#define INVALID_HUFFCODE 1 -#define HASH8K_HASH_MASK (IGZIP_HASH8K_HASH_SIZE - 1) -#define HASH_HIST_HASH_MASK (IGZIP_HASH_HIST_SIZE - 1) +#define HASH8K_HASH_MASK (IGZIP_HASH8K_HASH_SIZE - 1) +#define HASH_HIST_HASH_MASK (IGZIP_HASH_HIST_SIZE - 1) #define HASH_MAP_HASH_MASK (IGZIP_HASH_MAP_HASH_SIZE - 1) -#define LVL0_HASH_MASK (IGZIP_LVL0_HASH_SIZE - 1) -#define LVL1_HASH_MASK (IGZIP_LVL1_HASH_SIZE - 1) -#define LVL2_HASH_MASK (IGZIP_LVL2_HASH_SIZE - 1) -#define LVL3_HASH_MASK (IGZIP_LVL3_HASH_SIZE - 1) -#define SHORTEST_MATCH 4 - -#define LENGTH_BITS 5 -#define FREQ_SHIFT 16 -#define FREQ_MASK_HI (0xFFFFFFFFFFFF0000) -#define DEPTH_SHIFT 24 -#define DEPTH_MASK 0x7F -#define DEPTH_MASK_HI (DEPTH_MASK << DEPTH_SHIFT) -#define DEPTH_1 (1 << DEPTH_SHIFT) -#define HEAP_TREE_SIZE (3*MAX_HISTHEAP_SIZE + 1) -#define HEAP_TREE_NODE_START (HEAP_TREE_SIZE-1) -#define MAX_BL_CODE_LEN 7 +#define LVL0_HASH_MASK (IGZIP_LVL0_HASH_SIZE - 1) +#define LVL1_HASH_MASK (IGZIP_LVL1_HASH_SIZE - 1) +#define LVL2_HASH_MASK (IGZIP_LVL2_HASH_SIZE - 1) +#define LVL3_HASH_MASK (IGZIP_LVL3_HASH_SIZE - 1) +#define SHORTEST_MATCH 4 + +#define LENGTH_BITS 5 +#define FREQ_SHIFT 16 +#define FREQ_MASK_HI (0xFFFFFFFFFFFF0000) +#define DEPTH_SHIFT 24 +#define DEPTH_MASK 0x7F +#define DEPTH_MASK_HI (DEPTH_MASK << DEPTH_SHIFT) +#define DEPTH_1 (1 << DEPTH_SHIFT) +#define HEAP_TREE_SIZE (3 * MAX_HISTHEAP_SIZE + 1) +#define HEAP_TREE_NODE_START (HEAP_TREE_SIZE - 1) +#define MAX_BL_CODE_LEN 7 /** * @brief Structure used to store huffman codes */ struct huff_code { - union { - struct { + union { + struct { #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ - uint32_t code_and_extra:24; - uint32_t length2:8; + uint32_t code_and_extra : 24; + uint32_t length2 : 8; #else - uint32_t length2:8; - uint32_t code_and_extra:24; + uint32_t length2 : 8; + uint32_t code_and_extra : 24; #endif - }; + }; - struct { + struct { #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ - uint16_t code; - uint8_t extra_bit_count; - uint8_t length; + uint16_t code; + uint8_t extra_bit_count; + uint8_t length; #else - uint8_t length; - uint8_t extra_bit_count; - uint16_t code; + uint8_t length; + uint8_t extra_bit_count; + uint16_t code; #endif - }; + }; - uint32_t code_and_length; - }; + uint32_t code_and_length; + }; }; struct tree_node { #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ - uint32_t child; - uint32_t depth; + uint32_t child; + uint32_t depth; #else - uint32_t depth; - uint32_t child; + uint32_t depth; + uint32_t child; #endif }; struct heap_tree { - union { - uint64_t heap[HEAP_TREE_SIZE]; - uint64_t code_len_count[MAX_HUFF_TREE_DEPTH + 1]; - struct tree_node tree[HEAP_TREE_SIZE]; - }; + union { + uint64_t heap[HEAP_TREE_SIZE]; + uint64_t code_len_count[MAX_HUFF_TREE_DEPTH + 1]; + struct tree_node tree[HEAP_TREE_SIZE]; + }; }; struct rl_code { - uint8_t code; - uint8_t extra_bits; + uint8_t code; + uint8_t extra_bits; }; struct hufftables_icf { - union { - struct { - struct huff_code dist_lit_table[288]; - struct huff_code len_table[256]; - }; - - struct { - struct huff_code dist_table[31]; - struct huff_code lit_len_table[513]; - }; - }; + union { + struct { + struct huff_code dist_lit_table[288]; + struct huff_code len_table[256]; + }; + + struct { + struct huff_code dist_table[31]; + struct huff_code lit_len_table[513]; + }; + }; }; /** @@ -181,6 +181,6 @@ struct hufftables_icf { */ uint64_t create_hufftables_icf(struct BitBuf2 *bb, struct hufftables_icf *hufftables, - struct isal_mod_hist *hist, uint32_t end_of_block); + struct isal_mod_hist *hist, uint32_t end_of_block); #endif diff --git a/igzip/huffman.h b/igzip/huffman.h index 5b5c3592..067b1c5e 100644 --- a/igzip/huffman.h +++ b/igzip/huffman.h @@ -33,15 +33,15 @@ #include "igzip_lib.h" #include "unaligned.h" -#if __x86_64__ || __i386__ || _M_X64 || _M_IX86 +#if __x86_64__ || __i386__ || _M_X64 || _M_IX86 #ifdef _MSC_VER -# include -# define inline __inline +#include +#define inline __inline #else -# include +#include #endif #else -# define inline __inline +#define inline __inline #endif //__x86_64__ || __i386__ || _M_X64 || _M_IX86 /** @@ -50,195 +50,205 @@ * * @returns bit offset of msb starting at 1 for first bit */ -static inline uint32_t bsr(uint32_t val) +static inline uint32_t +bsr(uint32_t val) { - uint32_t msb; + uint32_t msb; #if defined(_MSC_VER) - unsigned long ret = 0; - if (val != 0) { - _BitScanReverse(&ret, val); - msb = ret + 1; - } else - msb = 0; -#elif defined( __LZCNT__) - msb = 32 - __lzcnt32(val); + unsigned long ret = 0; + if (val != 0) { + _BitScanReverse(&ret, val); + msb = ret + 1; + } else + msb = 0; +#elif defined(__LZCNT__) + msb = 32 - __lzcnt32(val); #elif defined(__x86_64__) || defined(__aarch64__) - msb = (val == 0) ? 0 : 32 - __builtin_clz(val); + msb = (val == 0) ? 0 : 32 - __builtin_clz(val); #else - for (msb = 0; val > 0; val >>= 1) - msb++; + for (msb = 0; val > 0; val >>= 1) + msb++; #endif - return msb; + return msb; } -static inline uint32_t tzbytecnt(uint64_t val) +static inline uint32_t +tzbytecnt(uint64_t val) { - uint32_t cnt; + uint32_t cnt; #ifdef __BMI__ - cnt = __tzcnt_u64(val); - cnt = cnt / 8; + cnt = __tzcnt_u64(val); + cnt = cnt / 8; #elif defined(__x86_64__) || defined(__aarch64__) - cnt = (val == 0) ? 64 : __builtin_ctzll(val); - cnt = cnt / 8; + cnt = (val == 0) ? 64 : __builtin_ctzll(val); + cnt = cnt / 8; #else - for (cnt = 8; val > 0; val <<= 8) - cnt -= 1; + for (cnt = 8; val > 0; val <<= 8) + cnt -= 1; #endif - return cnt; + return cnt; } -static void compute_dist_code(struct isal_hufftables *hufftables, uint16_t dist, - uint64_t * p_code, uint64_t * p_len) +static void +compute_dist_code(struct isal_hufftables *hufftables, uint16_t dist, uint64_t *p_code, + uint64_t *p_len) { - assert(dist > IGZIP_DIST_TABLE_SIZE); - - dist -= 1; - uint32_t msb; - uint32_t num_extra_bits; - uint32_t extra_bits; - uint32_t sym; - uint32_t len; - uint32_t code; - - msb = bsr(dist); - assert(msb >= 2); - num_extra_bits = msb - 2; - extra_bits = dist & ((1 << num_extra_bits) - 1); - dist >>= num_extra_bits; - sym = dist + 2 * num_extra_bits; - assert(sym < 30); - code = hufftables->dcodes[sym - IGZIP_DECODE_OFFSET]; - len = hufftables->dcodes_sizes[sym - IGZIP_DECODE_OFFSET]; - *p_code = code | (extra_bits << len); - *p_len = len + num_extra_bits; + assert(dist > IGZIP_DIST_TABLE_SIZE); + + dist -= 1; + uint32_t msb; + uint32_t num_extra_bits; + uint32_t extra_bits; + uint32_t sym; + uint32_t len; + uint32_t code; + + msb = bsr(dist); + assert(msb >= 2); + num_extra_bits = msb - 2; + extra_bits = dist & ((1 << num_extra_bits) - 1); + dist >>= num_extra_bits; + sym = dist + 2 * num_extra_bits; + assert(sym < 30); + code = hufftables->dcodes[sym - IGZIP_DECODE_OFFSET]; + len = hufftables->dcodes_sizes[sym - IGZIP_DECODE_OFFSET]; + *p_code = code | (extra_bits << len); + *p_len = len + num_extra_bits; } -static inline void get_dist_code(struct isal_hufftables *hufftables, uint32_t dist, - uint64_t * code, uint64_t * len) +static inline void +get_dist_code(struct isal_hufftables *hufftables, uint32_t dist, uint64_t *code, uint64_t *len) { - assert(dist >= 1); - assert(dist <= 32768); - if (dist <= IGZIP_DIST_TABLE_SIZE) { - uint64_t code_len; - code_len = hufftables->dist_table[dist - 1]; - *code = code_len >> 5; - *len = code_len & 0x1F; - } else { - compute_dist_code(hufftables, dist, code, len); - } + assert(dist >= 1); + assert(dist <= 32768); + if (dist <= IGZIP_DIST_TABLE_SIZE) { + uint64_t code_len; + code_len = hufftables->dist_table[dist - 1]; + *code = code_len >> 5; + *len = code_len & 0x1F; + } else { + compute_dist_code(hufftables, dist, code, len); + } } -static inline void get_len_code(struct isal_hufftables *hufftables, uint32_t length, - uint64_t * code, uint64_t * len) +static inline void +get_len_code(struct isal_hufftables *hufftables, uint32_t length, uint64_t *code, uint64_t *len) { - assert(length >= 3); - assert(length <= 258); + assert(length >= 3); + assert(length <= 258); - uint64_t code_len; - code_len = hufftables->len_table[length - 3]; - *code = code_len >> 5; - *len = code_len & 0x1F; + uint64_t code_len; + code_len = hufftables->len_table[length - 3]; + *code = code_len >> 5; + *len = code_len & 0x1F; } -static inline void get_lit_code(struct isal_hufftables *hufftables, uint32_t lit, - uint64_t * code, uint64_t * len) +static inline void +get_lit_code(struct isal_hufftables *hufftables, uint32_t lit, uint64_t *code, uint64_t *len) { - assert(lit <= 256); + assert(lit <= 256); - *code = hufftables->lit_table[lit]; - *len = hufftables->lit_table_sizes[lit]; + *code = hufftables->lit_table[lit]; + *len = hufftables->lit_table_sizes[lit]; } -static void compute_dist_icf_code(uint32_t dist, uint32_t * code, uint32_t * extra_bits) +static void +compute_dist_icf_code(uint32_t dist, uint32_t *code, uint32_t *extra_bits) { - uint32_t msb; - uint32_t num_extra_bits; - - dist -= 1; - msb = bsr(dist); - assert(msb >= 2); - num_extra_bits = msb - 2; - *extra_bits = dist & ((1 << num_extra_bits) - 1); - dist >>= num_extra_bits; - *code = dist + 2 * num_extra_bits; - assert(*code < 30); + uint32_t msb; + uint32_t num_extra_bits; + + dist -= 1; + msb = bsr(dist); + assert(msb >= 2); + num_extra_bits = msb - 2; + *extra_bits = dist & ((1 << num_extra_bits) - 1); + dist >>= num_extra_bits; + *code = dist + 2 * num_extra_bits; + assert(*code < 30); } -static inline void get_dist_icf_code(uint32_t dist, uint32_t * code, uint32_t * extra_bits) +static inline void +get_dist_icf_code(uint32_t dist, uint32_t *code, uint32_t *extra_bits) { - assert(dist >= 1); - assert(dist <= 32768); - if (dist <= 2) { - *code = dist - 1; - *extra_bits = 0; - } else { - compute_dist_icf_code(dist, code, extra_bits); - } + assert(dist >= 1); + assert(dist <= 32768); + if (dist <= 2) { + *code = dist - 1; + *extra_bits = 0; + } else { + compute_dist_icf_code(dist, code, extra_bits); + } } -static inline void get_len_icf_code(uint32_t length, uint32_t * code) +static inline void +get_len_icf_code(uint32_t length, uint32_t *code) { - assert(length >= 3); - assert(length <= 258); + assert(length >= 3); + assert(length <= 258); - *code = length + 254; + *code = length + 254; } -static inline void get_lit_icf_code(uint32_t lit, uint32_t * code) +static inline void +get_lit_icf_code(uint32_t lit, uint32_t *code) { - assert(lit <= 256); + assert(lit <= 256); - *code = lit; + *code = lit; } /** * @brief Returns a hash of the first 3 bytes of input data. */ -static inline uint32_t compute_hash(uint32_t data) +static inline uint32_t +compute_hash(uint32_t data) { #ifdef __SSE4_2__ - return _mm_crc32_u32(0, data); + return _mm_crc32_u32(0, data); #else - uint64_t hash; - /* Use multiplication to create a hash, 0xBDD06057 is a prime number */ - hash = data; - hash *= 0xB2D06057; - hash >>= 16; - hash *= 0xB2D06057; - hash >>= 16; + uint64_t hash; + /* Use multiplication to create a hash, 0xBDD06057 is a prime number */ + hash = data; + hash *= 0xB2D06057; + hash >>= 16; + hash *= 0xB2D06057; + hash >>= 16; - return hash; + return hash; #endif /* __SSE4_2__ */ } #define PROD1 0xFFFFE84B #define PROD2 0xFFFF97B1 -static inline uint32_t compute_hash_mad(uint32_t data) +static inline uint32_t +compute_hash_mad(uint32_t data) { - int16_t data_low; - int16_t data_high; + int16_t data_low; + int16_t data_high; - data_low = data; - data_high = data >> 16; - data = PROD1 * data_low + PROD2 * data_high; + data_low = data; + data_high = data >> 16; + data = PROD1 * data_low + PROD2 * data_high; - data_low = data; - data_high = data >> 16; - data = PROD1 * data_low + PROD2 * data_high; + data_low = data; + data_high = data >> 16; + data = PROD1 * data_low + PROD2 * data_high; - return data; + return data; } -static inline uint32_t compute_long_hash(uint64_t data) +static inline uint32_t +compute_long_hash(uint64_t data) { - return compute_hash(data >> 32) ^ compute_hash(data); + return compute_hash(data >> 32) ^ compute_hash(data); } /** @@ -247,59 +257,60 @@ static inline uint32_t compute_long_hash(uint64_t data) * @param str2: Second input string. * @param max_length: length of the smaller string. */ -static inline int compare258(uint8_t * str1, uint8_t * str2, uint32_t max_length) +static inline int +compare258(uint8_t *str1, uint8_t *str2, uint32_t max_length) { - uint32_t count; - uint64_t test; - uint64_t loop_length; - - if (max_length > 258) - max_length = 258; - - loop_length = max_length & ~0x7; - - for (count = 0; count < loop_length; count += 8) { - test = load_le_u64(str1); - test ^= load_le_u64(str2); - if (test != 0) - return count + tzbytecnt(test); - str1 += 8; - str2 += 8; - } - - switch (max_length % 8) { - - case 7: - if (*str1++ != *str2++) - return count; - count++; - case 6: - if (*str1++ != *str2++) - return count; - count++; - case 5: - if (*str1++ != *str2++) - return count; - count++; - case 4: - if (*str1++ != *str2++) - return count; - count++; - case 3: - if (*str1++ != *str2++) - return count; - count++; - case 2: - if (*str1++ != *str2++) - return count; - count++; - case 1: - if (*str1 != *str2) - return count; - count++; - } - - return count; + uint32_t count; + uint64_t test; + uint64_t loop_length; + + if (max_length > 258) + max_length = 258; + + loop_length = max_length & ~0x7; + + for (count = 0; count < loop_length; count += 8) { + test = load_le_u64(str1); + test ^= load_le_u64(str2); + if (test != 0) + return count + tzbytecnt(test); + str1 += 8; + str2 += 8; + } + + switch (max_length % 8) { + + case 7: + if (*str1++ != *str2++) + return count; + count++; + case 6: + if (*str1++ != *str2++) + return count; + count++; + case 5: + if (*str1++ != *str2++) + return count; + count++; + case 4: + if (*str1++ != *str2++) + return count; + count++; + case 3: + if (*str1++ != *str2++) + return count; + count++; + case 2: + if (*str1++ != *str2++) + return count; + count++; + case 1: + if (*str1 != *str2) + return count; + count++; + } + + return count; } /** @@ -308,54 +319,55 @@ static inline int compare258(uint8_t * str1, uint8_t * str2, uint32_t max_length * @param str2: Second input string. * @param max_length: length of the smaller string. */ -static inline int compare(uint8_t * str1, uint8_t * str2, uint32_t max_length) +static inline int +compare(uint8_t *str1, uint8_t *str2, uint32_t max_length) { - uint32_t count; - uint64_t test; - uint64_t loop_length; - - loop_length = max_length & ~0x7; - - for (count = 0; count < loop_length; count += 8) { - test = load_le_u64(str1); - test ^= load_le_u64(str2); - if (test != 0) - return count + tzbytecnt(test); - str1 += 8; - str2 += 8; - } - - switch (max_length % 8) { - - case 7: - if (*str1++ != *str2++) - return count; - count++; - case 6: - if (*str1++ != *str2++) - return count; - count++; - case 5: - if (*str1++ != *str2++) - return count; - count++; - case 4: - if (*str1++ != *str2++) - return count; - count++; - case 3: - if (*str1++ != *str2++) - return count; - count++; - case 2: - if (*str1++ != *str2++) - return count; - count++; - case 1: - if (*str1 != *str2) - return count; - count++; - } - - return count; + uint32_t count; + uint64_t test; + uint64_t loop_length; + + loop_length = max_length & ~0x7; + + for (count = 0; count < loop_length; count += 8) { + test = load_le_u64(str1); + test ^= load_le_u64(str2); + if (test != 0) + return count + tzbytecnt(test); + str1 += 8; + str2 += 8; + } + + switch (max_length % 8) { + + case 7: + if (*str1++ != *str2++) + return count; + count++; + case 6: + if (*str1++ != *str2++) + return count; + count++; + case 5: + if (*str1++ != *str2++) + return count; + count++; + case 4: + if (*str1++ != *str2++) + return count; + count++; + case 3: + if (*str1++ != *str2++) + return count; + count++; + case 2: + if (*str1++ != *str2++) + return count; + count++; + case 1: + if (*str1 != *str2) + return count; + count++; + } + + return count; } diff --git a/igzip/hufftables_c.c b/igzip/hufftables_c.c index 281f3e94..6a7e7b6a 100644 --- a/igzip/hufftables_c.c +++ b/igzip/hufftables_c.c @@ -31,10 +31,7 @@ #if (IGZIP_HIST_SIZE <= 8192) -const uint8_t gzip_hdr[] = { - 0x1f, 0x8b, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff -}; +const uint8_t gzip_hdr[] = { 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff }; const uint32_t gzip_hdr_bytes = 10; const uint32_t gzip_trl_bytes = 8; @@ -44,2229 +41,1789 @@ const uint8_t zlib_hdr[] = { 0x78, 0x01 }; const uint32_t zlib_hdr_bytes = 2; const uint32_t zlib_trl_bytes = 4; -struct isal_hufftables hufftables_default = { +struct isal_hufftables + hufftables_default = { - .deflate_hdr = { - 0xed, 0xf9, 0x09, 0x60, 0x54, 0xd5, 0xf9, 0x37, - 0x00, 0x9f, 0x90, 0x04, 0xc8, 0x40, 0x00, 0x77, - 0xdb, 0x5a, 0x38, 0x22, 0x4a, 0xd0, 0xc9, 0x98, - 0x15, 0x02, 0x20, 0x24, 0x09, 0x5b, 0x10, 0x20, - 0x12, 0x10, 0x77, 0x39, 0x33, 0xf7, 0xcc, 0xcc, - 0x25, 0x77, 0xee, 0x1d, 0xef, 0xbd, 0x37, 0xc3, - 0x50, 0x55, 0x5a, 0x6d, 0xb5, 0xb5, 0xad, 0x76, - 0xdf, 0x5b, 0xdb, 0x5a, 0x6b, 0x77, 0xdb, 0xda, - 0xbd, 0x56, 0x84, 0xb6, 0xda, 0x55, 0xbb, 0xef, - 0x2d, 0x56, 0x5b, 0xed, 0x2a, 0x56, 0xdb, 0x62, - 0x8b, 0xe4, 0xfb, 0x7e, 0xcf, 0x39, 0x77, 0xe6, - 0x24, 0x09, 0xae, 0xfd, 0xbf, 0xef, 0xff, 0xfd, - 0xbe, 0x22, 0x92, 0xdc, 0x7b, 0xcf, 0x79, 0xce, - 0xb3, 0x9f, 0xdf, 0xf3, 0x3c}, + .deflate_hdr = { 0xed, 0xf9, 0x09, 0x60, 0x54, 0xd5, 0xf9, 0x37, 0x00, 0x9f, 0x90, + 0x04, 0xc8, 0x40, 0x00, 0x77, 0xdb, 0x5a, 0x38, 0x22, 0x4a, 0xd0, + 0xc9, 0x98, 0x15, 0x02, 0x20, 0x24, 0x09, 0x5b, 0x10, 0x20, 0x12, + 0x10, 0x77, 0x39, 0x33, 0xf7, 0xcc, 0xcc, 0x25, 0x77, 0xee, 0x1d, + 0xef, 0xbd, 0x37, 0xc3, 0x50, 0x55, 0x5a, 0x6d, 0xb5, 0xb5, 0xad, + 0x76, 0xdf, 0x5b, 0xdb, 0x5a, 0x6b, 0x77, 0xdb, 0xda, 0xbd, 0x56, + 0x84, 0xb6, 0xda, 0x55, 0xbb, 0xef, 0x2d, 0x56, 0x5b, 0xed, 0x2a, + 0x56, 0xdb, 0x62, 0x8b, 0xe4, 0xfb, 0x7e, 0xcf, 0x39, 0x77, 0xe6, + 0x24, 0x09, 0xae, 0xfd, 0xbf, 0xef, 0xff, 0xfd, 0xbe, 0x22, 0x92, + 0xdc, 0x7b, 0xcf, 0x79, 0xce, 0xb3, 0x9f, 0xdf, 0xf3, 0x3c }, - .deflate_hdr_count = 109, - .deflate_hdr_extra_bits = 0, + .deflate_hdr_count = 109, + .deflate_hdr_extra_bits = 0, - .dist_table = { - 0x00000fe9, 0x00003fea, + .dist_table = { 0x00000fe9, 0x00003fea, #ifdef LONGER_HUFFTABLE - 0x00002fe9, 0x00007fea, 0x00001fea, 0x00005fea, - 0x000007e9, 0x000027e9, 0x000017ea, 0x000037ea, - 0x000057ea, 0x000077ea, 0x000001e8, 0x000009e8, - 0x000011e8, 0x000019e8, 0x000005e9, 0x00000de9, - 0x000015e9, 0x00001de9, 0x000025e9, 0x00002de9, - 0x000035e9, 0x00003de9, 0x000003e9, 0x00000be9, - 0x000013e9, 0x00001be9, 0x000023e9, 0x00002be9, - 0x000033e9, 0x00003be9, 0x00000169, 0x00000569, - 0x00000969, 0x00000d69, 0x00001169, 0x00001569, - 0x00001969, 0x00001d69, 0x00002169, 0x00002569, - 0x00002969, 0x00002d69, 0x00003169, 0x00003569, - 0x00003969, 0x00003d69, 0x00000369, 0x00000769, - 0x00000b69, 0x00000f69, 0x00001369, 0x00001769, - 0x00001b69, 0x00001f69, 0x00002369, 0x00002769, - 0x00002b69, 0x00002f69, 0x00003369, 0x00003769, - 0x00003b69, 0x00003f69, 0x00000089, 0x00000289, - 0x00000489, 0x00000689, 0x00000889, 0x00000a89, - 0x00000c89, 0x00000e89, 0x00001089, 0x00001289, - 0x00001489, 0x00001689, 0x00001889, 0x00001a89, - 0x00001c89, 0x00001e89, 0x00002089, 0x00002289, - 0x00002489, 0x00002689, 0x00002889, 0x00002a89, - 0x00002c89, 0x00002e89, 0x00003089, 0x00003289, - 0x00003489, 0x00003689, 0x00003889, 0x00003a89, - 0x00003c89, 0x00003e89, 0x000000ea, 0x000004ea, - 0x000008ea, 0x00000cea, 0x000010ea, 0x000014ea, - 0x000018ea, 0x00001cea, 0x000020ea, 0x000024ea, - 0x000028ea, 0x00002cea, 0x000030ea, 0x000034ea, - 0x000038ea, 0x00003cea, 0x000040ea, 0x000044ea, - 0x000048ea, 0x00004cea, 0x000050ea, 0x000054ea, - 0x000058ea, 0x00005cea, 0x000060ea, 0x000064ea, - 0x000068ea, 0x00006cea, 0x000070ea, 0x000074ea, - 0x000078ea, 0x00007cea, 0x0000018a, 0x0000038a, - 0x0000058a, 0x0000078a, 0x0000098a, 0x00000b8a, - 0x00000d8a, 0x00000f8a, 0x0000118a, 0x0000138a, - 0x0000158a, 0x0000178a, 0x0000198a, 0x00001b8a, - 0x00001d8a, 0x00001f8a, 0x0000218a, 0x0000238a, - 0x0000258a, 0x0000278a, 0x0000298a, 0x00002b8a, - 0x00002d8a, 0x00002f8a, 0x0000318a, 0x0000338a, - 0x0000358a, 0x0000378a, 0x0000398a, 0x00003b8a, - 0x00003d8a, 0x00003f8a, 0x0000418a, 0x0000438a, - 0x0000458a, 0x0000478a, 0x0000498a, 0x00004b8a, - 0x00004d8a, 0x00004f8a, 0x0000518a, 0x0000538a, - 0x0000558a, 0x0000578a, 0x0000598a, 0x00005b8a, - 0x00005d8a, 0x00005f8a, 0x0000618a, 0x0000638a, - 0x0000658a, 0x0000678a, 0x0000698a, 0x00006b8a, - 0x00006d8a, 0x00006f8a, 0x0000718a, 0x0000738a, - 0x0000758a, 0x0000778a, 0x0000798a, 0x00007b8a, - 0x00007d8a, 0x00007f8a, 0x0000004a, 0x0000024a, - 0x0000044a, 0x0000064a, 0x0000084a, 0x00000a4a, - 0x00000c4a, 0x00000e4a, 0x0000104a, 0x0000124a, - 0x0000144a, 0x0000164a, 0x0000184a, 0x00001a4a, - 0x00001c4a, 0x00001e4a, 0x0000204a, 0x0000224a, - 0x0000244a, 0x0000264a, 0x0000284a, 0x00002a4a, - 0x00002c4a, 0x00002e4a, 0x0000304a, 0x0000324a, - 0x0000344a, 0x0000364a, 0x0000384a, 0x00003a4a, - 0x00003c4a, 0x00003e4a, 0x0000404a, 0x0000424a, - 0x0000444a, 0x0000464a, 0x0000484a, 0x00004a4a, - 0x00004c4a, 0x00004e4a, 0x0000504a, 0x0000524a, - 0x0000544a, 0x0000564a, 0x0000584a, 0x00005a4a, - 0x00005c4a, 0x00005e4a, 0x0000604a, 0x0000624a, - 0x0000644a, 0x0000664a, 0x0000684a, 0x00006a4a, - 0x00006c4a, 0x00006e4a, 0x0000704a, 0x0000724a, - 0x0000744a, 0x0000764a, 0x0000784a, 0x00007a4a, - 0x00007c4a, 0x00007e4a, 0x0000014b, 0x0000034b, - 0x0000054b, 0x0000074b, 0x0000094b, 0x00000b4b, - 0x00000d4b, 0x00000f4b, 0x0000114b, 0x0000134b, - 0x0000154b, 0x0000174b, 0x0000194b, 0x00001b4b, - 0x00001d4b, 0x00001f4b, 0x0000214b, 0x0000234b, - 0x0000254b, 0x0000274b, 0x0000294b, 0x00002b4b, - 0x00002d4b, 0x00002f4b, 0x0000314b, 0x0000334b, - 0x0000354b, 0x0000374b, 0x0000394b, 0x00003b4b, - 0x00003d4b, 0x00003f4b, 0x0000414b, 0x0000434b, - 0x0000454b, 0x0000474b, 0x0000494b, 0x00004b4b, - 0x00004d4b, 0x00004f4b, 0x0000514b, 0x0000534b, - 0x0000554b, 0x0000574b, 0x0000594b, 0x00005b4b, - 0x00005d4b, 0x00005f4b, 0x0000614b, 0x0000634b, - 0x0000654b, 0x0000674b, 0x0000694b, 0x00006b4b, - 0x00006d4b, 0x00006f4b, 0x0000714b, 0x0000734b, - 0x0000754b, 0x0000774b, 0x0000794b, 0x00007b4b, - 0x00007d4b, 0x00007f4b, 0x0000814b, 0x0000834b, - 0x0000854b, 0x0000874b, 0x0000894b, 0x00008b4b, - 0x00008d4b, 0x00008f4b, 0x0000914b, 0x0000934b, - 0x0000954b, 0x0000974b, 0x0000994b, 0x00009b4b, - 0x00009d4b, 0x00009f4b, 0x0000a14b, 0x0000a34b, - 0x0000a54b, 0x0000a74b, 0x0000a94b, 0x0000ab4b, - 0x0000ad4b, 0x0000af4b, 0x0000b14b, 0x0000b34b, - 0x0000b54b, 0x0000b74b, 0x0000b94b, 0x0000bb4b, - 0x0000bd4b, 0x0000bf4b, 0x0000c14b, 0x0000c34b, - 0x0000c54b, 0x0000c74b, 0x0000c94b, 0x0000cb4b, - 0x0000cd4b, 0x0000cf4b, 0x0000d14b, 0x0000d34b, - 0x0000d54b, 0x0000d74b, 0x0000d94b, 0x0000db4b, - 0x0000dd4b, 0x0000df4b, 0x0000e14b, 0x0000e34b, - 0x0000e54b, 0x0000e74b, 0x0000e94b, 0x0000eb4b, - 0x0000ed4b, 0x0000ef4b, 0x0000f14b, 0x0000f34b, - 0x0000f54b, 0x0000f74b, 0x0000f94b, 0x0000fb4b, - 0x0000fd4b, 0x0000ff4b, 0x000000cb, 0x000002cb, - 0x000004cb, 0x000006cb, 0x000008cb, 0x00000acb, - 0x00000ccb, 0x00000ecb, 0x000010cb, 0x000012cb, - 0x000014cb, 0x000016cb, 0x000018cb, 0x00001acb, - 0x00001ccb, 0x00001ecb, 0x000020cb, 0x000022cb, - 0x000024cb, 0x000026cb, 0x000028cb, 0x00002acb, - 0x00002ccb, 0x00002ecb, 0x000030cb, 0x000032cb, - 0x000034cb, 0x000036cb, 0x000038cb, 0x00003acb, - 0x00003ccb, 0x00003ecb, 0x000040cb, 0x000042cb, - 0x000044cb, 0x000046cb, 0x000048cb, 0x00004acb, - 0x00004ccb, 0x00004ecb, 0x000050cb, 0x000052cb, - 0x000054cb, 0x000056cb, 0x000058cb, 0x00005acb, - 0x00005ccb, 0x00005ecb, 0x000060cb, 0x000062cb, - 0x000064cb, 0x000066cb, 0x000068cb, 0x00006acb, - 0x00006ccb, 0x00006ecb, 0x000070cb, 0x000072cb, - 0x000074cb, 0x000076cb, 0x000078cb, 0x00007acb, - 0x00007ccb, 0x00007ecb, 0x000080cb, 0x000082cb, - 0x000084cb, 0x000086cb, 0x000088cb, 0x00008acb, - 0x00008ccb, 0x00008ecb, 0x000090cb, 0x000092cb, - 0x000094cb, 0x000096cb, 0x000098cb, 0x00009acb, - 0x00009ccb, 0x00009ecb, 0x0000a0cb, 0x0000a2cb, - 0x0000a4cb, 0x0000a6cb, 0x0000a8cb, 0x0000aacb, - 0x0000accb, 0x0000aecb, 0x0000b0cb, 0x0000b2cb, - 0x0000b4cb, 0x0000b6cb, 0x0000b8cb, 0x0000bacb, - 0x0000bccb, 0x0000becb, 0x0000c0cb, 0x0000c2cb, - 0x0000c4cb, 0x0000c6cb, 0x0000c8cb, 0x0000cacb, - 0x0000cccb, 0x0000cecb, 0x0000d0cb, 0x0000d2cb, - 0x0000d4cb, 0x0000d6cb, 0x0000d8cb, 0x0000dacb, - 0x0000dccb, 0x0000decb, 0x0000e0cb, 0x0000e2cb, - 0x0000e4cb, 0x0000e6cb, 0x0000e8cb, 0x0000eacb, - 0x0000eccb, 0x0000eecb, 0x0000f0cb, 0x0000f2cb, - 0x0000f4cb, 0x0000f6cb, 0x0000f8cb, 0x0000facb, - 0x0000fccb, 0x0000fecb, 0x000001cc, 0x000003cc, - 0x000005cc, 0x000007cc, 0x000009cc, 0x00000bcc, - 0x00000dcc, 0x00000fcc, 0x000011cc, 0x000013cc, - 0x000015cc, 0x000017cc, 0x000019cc, 0x00001bcc, - 0x00001dcc, 0x00001fcc, 0x000021cc, 0x000023cc, - 0x000025cc, 0x000027cc, 0x000029cc, 0x00002bcc, - 0x00002dcc, 0x00002fcc, 0x000031cc, 0x000033cc, - 0x000035cc, 0x000037cc, 0x000039cc, 0x00003bcc, - 0x00003dcc, 0x00003fcc, 0x000041cc, 0x000043cc, - 0x000045cc, 0x000047cc, 0x000049cc, 0x00004bcc, - 0x00004dcc, 0x00004fcc, 0x000051cc, 0x000053cc, - 0x000055cc, 0x000057cc, 0x000059cc, 0x00005bcc, - 0x00005dcc, 0x00005fcc, 0x000061cc, 0x000063cc, - 0x000065cc, 0x000067cc, 0x000069cc, 0x00006bcc, - 0x00006dcc, 0x00006fcc, 0x000071cc, 0x000073cc, - 0x000075cc, 0x000077cc, 0x000079cc, 0x00007bcc, - 0x00007dcc, 0x00007fcc, 0x000081cc, 0x000083cc, - 0x000085cc, 0x000087cc, 0x000089cc, 0x00008bcc, - 0x00008dcc, 0x00008fcc, 0x000091cc, 0x000093cc, - 0x000095cc, 0x000097cc, 0x000099cc, 0x00009bcc, - 0x00009dcc, 0x00009fcc, 0x0000a1cc, 0x0000a3cc, - 0x0000a5cc, 0x0000a7cc, 0x0000a9cc, 0x0000abcc, - 0x0000adcc, 0x0000afcc, 0x0000b1cc, 0x0000b3cc, - 0x0000b5cc, 0x0000b7cc, 0x0000b9cc, 0x0000bbcc, - 0x0000bdcc, 0x0000bfcc, 0x0000c1cc, 0x0000c3cc, - 0x0000c5cc, 0x0000c7cc, 0x0000c9cc, 0x0000cbcc, - 0x0000cdcc, 0x0000cfcc, 0x0000d1cc, 0x0000d3cc, - 0x0000d5cc, 0x0000d7cc, 0x0000d9cc, 0x0000dbcc, - 0x0000ddcc, 0x0000dfcc, 0x0000e1cc, 0x0000e3cc, - 0x0000e5cc, 0x0000e7cc, 0x0000e9cc, 0x0000ebcc, - 0x0000edcc, 0x0000efcc, 0x0000f1cc, 0x0000f3cc, - 0x0000f5cc, 0x0000f7cc, 0x0000f9cc, 0x0000fbcc, - 0x0000fdcc, 0x0000ffcc, 0x000101cc, 0x000103cc, - 0x000105cc, 0x000107cc, 0x000109cc, 0x00010bcc, - 0x00010dcc, 0x00010fcc, 0x000111cc, 0x000113cc, - 0x000115cc, 0x000117cc, 0x000119cc, 0x00011bcc, - 0x00011dcc, 0x00011fcc, 0x000121cc, 0x000123cc, - 0x000125cc, 0x000127cc, 0x000129cc, 0x00012bcc, - 0x00012dcc, 0x00012fcc, 0x000131cc, 0x000133cc, - 0x000135cc, 0x000137cc, 0x000139cc, 0x00013bcc, - 0x00013dcc, 0x00013fcc, 0x000141cc, 0x000143cc, - 0x000145cc, 0x000147cc, 0x000149cc, 0x00014bcc, - 0x00014dcc, 0x00014fcc, 0x000151cc, 0x000153cc, - 0x000155cc, 0x000157cc, 0x000159cc, 0x00015bcc, - 0x00015dcc, 0x00015fcc, 0x000161cc, 0x000163cc, - 0x000165cc, 0x000167cc, 0x000169cc, 0x00016bcc, - 0x00016dcc, 0x00016fcc, 0x000171cc, 0x000173cc, - 0x000175cc, 0x000177cc, 0x000179cc, 0x00017bcc, - 0x00017dcc, 0x00017fcc, 0x000181cc, 0x000183cc, - 0x000185cc, 0x000187cc, 0x000189cc, 0x00018bcc, - 0x00018dcc, 0x00018fcc, 0x000191cc, 0x000193cc, - 0x000195cc, 0x000197cc, 0x000199cc, 0x00019bcc, - 0x00019dcc, 0x00019fcc, 0x0001a1cc, 0x0001a3cc, - 0x0001a5cc, 0x0001a7cc, 0x0001a9cc, 0x0001abcc, - 0x0001adcc, 0x0001afcc, 0x0001b1cc, 0x0001b3cc, - 0x0001b5cc, 0x0001b7cc, 0x0001b9cc, 0x0001bbcc, - 0x0001bdcc, 0x0001bfcc, 0x0001c1cc, 0x0001c3cc, - 0x0001c5cc, 0x0001c7cc, 0x0001c9cc, 0x0001cbcc, - 0x0001cdcc, 0x0001cfcc, 0x0001d1cc, 0x0001d3cc, - 0x0001d5cc, 0x0001d7cc, 0x0001d9cc, 0x0001dbcc, - 0x0001ddcc, 0x0001dfcc, 0x0001e1cc, 0x0001e3cc, - 0x0001e5cc, 0x0001e7cc, 0x0001e9cc, 0x0001ebcc, - 0x0001edcc, 0x0001efcc, 0x0001f1cc, 0x0001f3cc, - 0x0001f5cc, 0x0001f7cc, 0x0001f9cc, 0x0001fbcc, - 0x0001fdcc, 0x0001ffcc, 0x0000002c, 0x0000022c, - 0x0000042c, 0x0000062c, 0x0000082c, 0x00000a2c, - 0x00000c2c, 0x00000e2c, 0x0000102c, 0x0000122c, - 0x0000142c, 0x0000162c, 0x0000182c, 0x00001a2c, - 0x00001c2c, 0x00001e2c, 0x0000202c, 0x0000222c, - 0x0000242c, 0x0000262c, 0x0000282c, 0x00002a2c, - 0x00002c2c, 0x00002e2c, 0x0000302c, 0x0000322c, - 0x0000342c, 0x0000362c, 0x0000382c, 0x00003a2c, - 0x00003c2c, 0x00003e2c, 0x0000402c, 0x0000422c, - 0x0000442c, 0x0000462c, 0x0000482c, 0x00004a2c, - 0x00004c2c, 0x00004e2c, 0x0000502c, 0x0000522c, - 0x0000542c, 0x0000562c, 0x0000582c, 0x00005a2c, - 0x00005c2c, 0x00005e2c, 0x0000602c, 0x0000622c, - 0x0000642c, 0x0000662c, 0x0000682c, 0x00006a2c, - 0x00006c2c, 0x00006e2c, 0x0000702c, 0x0000722c, - 0x0000742c, 0x0000762c, 0x0000782c, 0x00007a2c, - 0x00007c2c, 0x00007e2c, 0x0000802c, 0x0000822c, - 0x0000842c, 0x0000862c, 0x0000882c, 0x00008a2c, - 0x00008c2c, 0x00008e2c, 0x0000902c, 0x0000922c, - 0x0000942c, 0x0000962c, 0x0000982c, 0x00009a2c, - 0x00009c2c, 0x00009e2c, 0x0000a02c, 0x0000a22c, - 0x0000a42c, 0x0000a62c, 0x0000a82c, 0x0000aa2c, - 0x0000ac2c, 0x0000ae2c, 0x0000b02c, 0x0000b22c, - 0x0000b42c, 0x0000b62c, 0x0000b82c, 0x0000ba2c, - 0x0000bc2c, 0x0000be2c, 0x0000c02c, 0x0000c22c, - 0x0000c42c, 0x0000c62c, 0x0000c82c, 0x0000ca2c, - 0x0000cc2c, 0x0000ce2c, 0x0000d02c, 0x0000d22c, - 0x0000d42c, 0x0000d62c, 0x0000d82c, 0x0000da2c, - 0x0000dc2c, 0x0000de2c, 0x0000e02c, 0x0000e22c, - 0x0000e42c, 0x0000e62c, 0x0000e82c, 0x0000ea2c, - 0x0000ec2c, 0x0000ee2c, 0x0000f02c, 0x0000f22c, - 0x0000f42c, 0x0000f62c, 0x0000f82c, 0x0000fa2c, - 0x0000fc2c, 0x0000fe2c, 0x0001002c, 0x0001022c, - 0x0001042c, 0x0001062c, 0x0001082c, 0x00010a2c, - 0x00010c2c, 0x00010e2c, 0x0001102c, 0x0001122c, - 0x0001142c, 0x0001162c, 0x0001182c, 0x00011a2c, - 0x00011c2c, 0x00011e2c, 0x0001202c, 0x0001222c, - 0x0001242c, 0x0001262c, 0x0001282c, 0x00012a2c, - 0x00012c2c, 0x00012e2c, 0x0001302c, 0x0001322c, - 0x0001342c, 0x0001362c, 0x0001382c, 0x00013a2c, - 0x00013c2c, 0x00013e2c, 0x0001402c, 0x0001422c, - 0x0001442c, 0x0001462c, 0x0001482c, 0x00014a2c, - 0x00014c2c, 0x00014e2c, 0x0001502c, 0x0001522c, - 0x0001542c, 0x0001562c, 0x0001582c, 0x00015a2c, - 0x00015c2c, 0x00015e2c, 0x0001602c, 0x0001622c, - 0x0001642c, 0x0001662c, 0x0001682c, 0x00016a2c, - 0x00016c2c, 0x00016e2c, 0x0001702c, 0x0001722c, - 0x0001742c, 0x0001762c, 0x0001782c, 0x00017a2c, - 0x00017c2c, 0x00017e2c, 0x0001802c, 0x0001822c, - 0x0001842c, 0x0001862c, 0x0001882c, 0x00018a2c, - 0x00018c2c, 0x00018e2c, 0x0001902c, 0x0001922c, - 0x0001942c, 0x0001962c, 0x0001982c, 0x00019a2c, - 0x00019c2c, 0x00019e2c, 0x0001a02c, 0x0001a22c, - 0x0001a42c, 0x0001a62c, 0x0001a82c, 0x0001aa2c, - 0x0001ac2c, 0x0001ae2c, 0x0001b02c, 0x0001b22c, - 0x0001b42c, 0x0001b62c, 0x0001b82c, 0x0001ba2c, - 0x0001bc2c, 0x0001be2c, 0x0001c02c, 0x0001c22c, - 0x0001c42c, 0x0001c62c, 0x0001c82c, 0x0001ca2c, - 0x0001cc2c, 0x0001ce2c, 0x0001d02c, 0x0001d22c, - 0x0001d42c, 0x0001d62c, 0x0001d82c, 0x0001da2c, - 0x0001dc2c, 0x0001de2c, 0x0001e02c, 0x0001e22c, - 0x0001e42c, 0x0001e62c, 0x0001e82c, 0x0001ea2c, - 0x0001ec2c, 0x0001ee2c, 0x0001f02c, 0x0001f22c, - 0x0001f42c, 0x0001f62c, 0x0001f82c, 0x0001fa2c, - 0x0001fc2c, 0x0001fe2c, 0x0000012d, 0x0000032d, - 0x0000052d, 0x0000072d, 0x0000092d, 0x00000b2d, - 0x00000d2d, 0x00000f2d, 0x0000112d, 0x0000132d, - 0x0000152d, 0x0000172d, 0x0000192d, 0x00001b2d, - 0x00001d2d, 0x00001f2d, 0x0000212d, 0x0000232d, - 0x0000252d, 0x0000272d, 0x0000292d, 0x00002b2d, - 0x00002d2d, 0x00002f2d, 0x0000312d, 0x0000332d, - 0x0000352d, 0x0000372d, 0x0000392d, 0x00003b2d, - 0x00003d2d, 0x00003f2d, 0x0000412d, 0x0000432d, - 0x0000452d, 0x0000472d, 0x0000492d, 0x00004b2d, - 0x00004d2d, 0x00004f2d, 0x0000512d, 0x0000532d, - 0x0000552d, 0x0000572d, 0x0000592d, 0x00005b2d, - 0x00005d2d, 0x00005f2d, 0x0000612d, 0x0000632d, - 0x0000652d, 0x0000672d, 0x0000692d, 0x00006b2d, - 0x00006d2d, 0x00006f2d, 0x0000712d, 0x0000732d, - 0x0000752d, 0x0000772d, 0x0000792d, 0x00007b2d, - 0x00007d2d, 0x00007f2d, 0x0000812d, 0x0000832d, - 0x0000852d, 0x0000872d, 0x0000892d, 0x00008b2d, - 0x00008d2d, 0x00008f2d, 0x0000912d, 0x0000932d, - 0x0000952d, 0x0000972d, 0x0000992d, 0x00009b2d, - 0x00009d2d, 0x00009f2d, 0x0000a12d, 0x0000a32d, - 0x0000a52d, 0x0000a72d, 0x0000a92d, 0x0000ab2d, - 0x0000ad2d, 0x0000af2d, 0x0000b12d, 0x0000b32d, - 0x0000b52d, 0x0000b72d, 0x0000b92d, 0x0000bb2d, - 0x0000bd2d, 0x0000bf2d, 0x0000c12d, 0x0000c32d, - 0x0000c52d, 0x0000c72d, 0x0000c92d, 0x0000cb2d, - 0x0000cd2d, 0x0000cf2d, 0x0000d12d, 0x0000d32d, - 0x0000d52d, 0x0000d72d, 0x0000d92d, 0x0000db2d, - 0x0000dd2d, 0x0000df2d, 0x0000e12d, 0x0000e32d, - 0x0000e52d, 0x0000e72d, 0x0000e92d, 0x0000eb2d, - 0x0000ed2d, 0x0000ef2d, 0x0000f12d, 0x0000f32d, - 0x0000f52d, 0x0000f72d, 0x0000f92d, 0x0000fb2d, - 0x0000fd2d, 0x0000ff2d, 0x0001012d, 0x0001032d, - 0x0001052d, 0x0001072d, 0x0001092d, 0x00010b2d, - 0x00010d2d, 0x00010f2d, 0x0001112d, 0x0001132d, - 0x0001152d, 0x0001172d, 0x0001192d, 0x00011b2d, - 0x00011d2d, 0x00011f2d, 0x0001212d, 0x0001232d, - 0x0001252d, 0x0001272d, 0x0001292d, 0x00012b2d, - 0x00012d2d, 0x00012f2d, 0x0001312d, 0x0001332d, - 0x0001352d, 0x0001372d, 0x0001392d, 0x00013b2d, - 0x00013d2d, 0x00013f2d, 0x0001412d, 0x0001432d, - 0x0001452d, 0x0001472d, 0x0001492d, 0x00014b2d, - 0x00014d2d, 0x00014f2d, 0x0001512d, 0x0001532d, - 0x0001552d, 0x0001572d, 0x0001592d, 0x00015b2d, - 0x00015d2d, 0x00015f2d, 0x0001612d, 0x0001632d, - 0x0001652d, 0x0001672d, 0x0001692d, 0x00016b2d, - 0x00016d2d, 0x00016f2d, 0x0001712d, 0x0001732d, - 0x0001752d, 0x0001772d, 0x0001792d, 0x00017b2d, - 0x00017d2d, 0x00017f2d, 0x0001812d, 0x0001832d, - 0x0001852d, 0x0001872d, 0x0001892d, 0x00018b2d, - 0x00018d2d, 0x00018f2d, 0x0001912d, 0x0001932d, - 0x0001952d, 0x0001972d, 0x0001992d, 0x00019b2d, - 0x00019d2d, 0x00019f2d, 0x0001a12d, 0x0001a32d, - 0x0001a52d, 0x0001a72d, 0x0001a92d, 0x0001ab2d, - 0x0001ad2d, 0x0001af2d, 0x0001b12d, 0x0001b32d, - 0x0001b52d, 0x0001b72d, 0x0001b92d, 0x0001bb2d, - 0x0001bd2d, 0x0001bf2d, 0x0001c12d, 0x0001c32d, - 0x0001c52d, 0x0001c72d, 0x0001c92d, 0x0001cb2d, - 0x0001cd2d, 0x0001cf2d, 0x0001d12d, 0x0001d32d, - 0x0001d52d, 0x0001d72d, 0x0001d92d, 0x0001db2d, - 0x0001dd2d, 0x0001df2d, 0x0001e12d, 0x0001e32d, - 0x0001e52d, 0x0001e72d, 0x0001e92d, 0x0001eb2d, - 0x0001ed2d, 0x0001ef2d, 0x0001f12d, 0x0001f32d, - 0x0001f52d, 0x0001f72d, 0x0001f92d, 0x0001fb2d, - 0x0001fd2d, 0x0001ff2d, 0x0002012d, 0x0002032d, - 0x0002052d, 0x0002072d, 0x0002092d, 0x00020b2d, - 0x00020d2d, 0x00020f2d, 0x0002112d, 0x0002132d, - 0x0002152d, 0x0002172d, 0x0002192d, 0x00021b2d, - 0x00021d2d, 0x00021f2d, 0x0002212d, 0x0002232d, - 0x0002252d, 0x0002272d, 0x0002292d, 0x00022b2d, - 0x00022d2d, 0x00022f2d, 0x0002312d, 0x0002332d, - 0x0002352d, 0x0002372d, 0x0002392d, 0x00023b2d, - 0x00023d2d, 0x00023f2d, 0x0002412d, 0x0002432d, - 0x0002452d, 0x0002472d, 0x0002492d, 0x00024b2d, - 0x00024d2d, 0x00024f2d, 0x0002512d, 0x0002532d, - 0x0002552d, 0x0002572d, 0x0002592d, 0x00025b2d, - 0x00025d2d, 0x00025f2d, 0x0002612d, 0x0002632d, - 0x0002652d, 0x0002672d, 0x0002692d, 0x00026b2d, - 0x00026d2d, 0x00026f2d, 0x0002712d, 0x0002732d, - 0x0002752d, 0x0002772d, 0x0002792d, 0x00027b2d, - 0x00027d2d, 0x00027f2d, 0x0002812d, 0x0002832d, - 0x0002852d, 0x0002872d, 0x0002892d, 0x00028b2d, - 0x00028d2d, 0x00028f2d, 0x0002912d, 0x0002932d, - 0x0002952d, 0x0002972d, 0x0002992d, 0x00029b2d, - 0x00029d2d, 0x00029f2d, 0x0002a12d, 0x0002a32d, - 0x0002a52d, 0x0002a72d, 0x0002a92d, 0x0002ab2d, - 0x0002ad2d, 0x0002af2d, 0x0002b12d, 0x0002b32d, - 0x0002b52d, 0x0002b72d, 0x0002b92d, 0x0002bb2d, - 0x0002bd2d, 0x0002bf2d, 0x0002c12d, 0x0002c32d, - 0x0002c52d, 0x0002c72d, 0x0002c92d, 0x0002cb2d, - 0x0002cd2d, 0x0002cf2d, 0x0002d12d, 0x0002d32d, - 0x0002d52d, 0x0002d72d, 0x0002d92d, 0x0002db2d, - 0x0002dd2d, 0x0002df2d, 0x0002e12d, 0x0002e32d, - 0x0002e52d, 0x0002e72d, 0x0002e92d, 0x0002eb2d, - 0x0002ed2d, 0x0002ef2d, 0x0002f12d, 0x0002f32d, - 0x0002f52d, 0x0002f72d, 0x0002f92d, 0x0002fb2d, - 0x0002fd2d, 0x0002ff2d, 0x0003012d, 0x0003032d, - 0x0003052d, 0x0003072d, 0x0003092d, 0x00030b2d, - 0x00030d2d, 0x00030f2d, 0x0003112d, 0x0003132d, - 0x0003152d, 0x0003172d, 0x0003192d, 0x00031b2d, - 0x00031d2d, 0x00031f2d, 0x0003212d, 0x0003232d, - 0x0003252d, 0x0003272d, 0x0003292d, 0x00032b2d, - 0x00032d2d, 0x00032f2d, 0x0003312d, 0x0003332d, - 0x0003352d, 0x0003372d, 0x0003392d, 0x00033b2d, - 0x00033d2d, 0x00033f2d, 0x0003412d, 0x0003432d, - 0x0003452d, 0x0003472d, 0x0003492d, 0x00034b2d, - 0x00034d2d, 0x00034f2d, 0x0003512d, 0x0003532d, - 0x0003552d, 0x0003572d, 0x0003592d, 0x00035b2d, - 0x00035d2d, 0x00035f2d, 0x0003612d, 0x0003632d, - 0x0003652d, 0x0003672d, 0x0003692d, 0x00036b2d, - 0x00036d2d, 0x00036f2d, 0x0003712d, 0x0003732d, - 0x0003752d, 0x0003772d, 0x0003792d, 0x00037b2d, - 0x00037d2d, 0x00037f2d, 0x0003812d, 0x0003832d, - 0x0003852d, 0x0003872d, 0x0003892d, 0x00038b2d, - 0x00038d2d, 0x00038f2d, 0x0003912d, 0x0003932d, - 0x0003952d, 0x0003972d, 0x0003992d, 0x00039b2d, - 0x00039d2d, 0x00039f2d, 0x0003a12d, 0x0003a32d, - 0x0003a52d, 0x0003a72d, 0x0003a92d, 0x0003ab2d, - 0x0003ad2d, 0x0003af2d, 0x0003b12d, 0x0003b32d, - 0x0003b52d, 0x0003b72d, 0x0003b92d, 0x0003bb2d, - 0x0003bd2d, 0x0003bf2d, 0x0003c12d, 0x0003c32d, - 0x0003c52d, 0x0003c72d, 0x0003c92d, 0x0003cb2d, - 0x0003cd2d, 0x0003cf2d, 0x0003d12d, 0x0003d32d, - 0x0003d52d, 0x0003d72d, 0x0003d92d, 0x0003db2d, - 0x0003dd2d, 0x0003df2d, 0x0003e12d, 0x0003e32d, - 0x0003e52d, 0x0003e72d, 0x0003e92d, 0x0003eb2d, - 0x0003ed2d, 0x0003ef2d, 0x0003f12d, 0x0003f32d, - 0x0003f52d, 0x0003f72d, 0x0003f92d, 0x0003fb2d, - 0x0003fd2d, 0x0003ff2d, 0x000002ee, 0x000006ee, - 0x00000aee, 0x00000eee, 0x000012ee, 0x000016ee, - 0x00001aee, 0x00001eee, 0x000022ee, 0x000026ee, - 0x00002aee, 0x00002eee, 0x000032ee, 0x000036ee, - 0x00003aee, 0x00003eee, 0x000042ee, 0x000046ee, - 0x00004aee, 0x00004eee, 0x000052ee, 0x000056ee, - 0x00005aee, 0x00005eee, 0x000062ee, 0x000066ee, - 0x00006aee, 0x00006eee, 0x000072ee, 0x000076ee, - 0x00007aee, 0x00007eee, 0x000082ee, 0x000086ee, - 0x00008aee, 0x00008eee, 0x000092ee, 0x000096ee, - 0x00009aee, 0x00009eee, 0x0000a2ee, 0x0000a6ee, - 0x0000aaee, 0x0000aeee, 0x0000b2ee, 0x0000b6ee, - 0x0000baee, 0x0000beee, 0x0000c2ee, 0x0000c6ee, - 0x0000caee, 0x0000ceee, 0x0000d2ee, 0x0000d6ee, - 0x0000daee, 0x0000deee, 0x0000e2ee, 0x0000e6ee, - 0x0000eaee, 0x0000eeee, 0x0000f2ee, 0x0000f6ee, - 0x0000faee, 0x0000feee, 0x000102ee, 0x000106ee, - 0x00010aee, 0x00010eee, 0x000112ee, 0x000116ee, - 0x00011aee, 0x00011eee, 0x000122ee, 0x000126ee, - 0x00012aee, 0x00012eee, 0x000132ee, 0x000136ee, - 0x00013aee, 0x00013eee, 0x000142ee, 0x000146ee, - 0x00014aee, 0x00014eee, 0x000152ee, 0x000156ee, - 0x00015aee, 0x00015eee, 0x000162ee, 0x000166ee, - 0x00016aee, 0x00016eee, 0x000172ee, 0x000176ee, - 0x00017aee, 0x00017eee, 0x000182ee, 0x000186ee, - 0x00018aee, 0x00018eee, 0x000192ee, 0x000196ee, - 0x00019aee, 0x00019eee, 0x0001a2ee, 0x0001a6ee, - 0x0001aaee, 0x0001aeee, 0x0001b2ee, 0x0001b6ee, - 0x0001baee, 0x0001beee, 0x0001c2ee, 0x0001c6ee, - 0x0001caee, 0x0001ceee, 0x0001d2ee, 0x0001d6ee, - 0x0001daee, 0x0001deee, 0x0001e2ee, 0x0001e6ee, - 0x0001eaee, 0x0001eeee, 0x0001f2ee, 0x0001f6ee, - 0x0001faee, 0x0001feee, 0x000202ee, 0x000206ee, - 0x00020aee, 0x00020eee, 0x000212ee, 0x000216ee, - 0x00021aee, 0x00021eee, 0x000222ee, 0x000226ee, - 0x00022aee, 0x00022eee, 0x000232ee, 0x000236ee, - 0x00023aee, 0x00023eee, 0x000242ee, 0x000246ee, - 0x00024aee, 0x00024eee, 0x000252ee, 0x000256ee, - 0x00025aee, 0x00025eee, 0x000262ee, 0x000266ee, - 0x00026aee, 0x00026eee, 0x000272ee, 0x000276ee, - 0x00027aee, 0x00027eee, 0x000282ee, 0x000286ee, - 0x00028aee, 0x00028eee, 0x000292ee, 0x000296ee, - 0x00029aee, 0x00029eee, 0x0002a2ee, 0x0002a6ee, - 0x0002aaee, 0x0002aeee, 0x0002b2ee, 0x0002b6ee, - 0x0002baee, 0x0002beee, 0x0002c2ee, 0x0002c6ee, - 0x0002caee, 0x0002ceee, 0x0002d2ee, 0x0002d6ee, - 0x0002daee, 0x0002deee, 0x0002e2ee, 0x0002e6ee, - 0x0002eaee, 0x0002eeee, 0x0002f2ee, 0x0002f6ee, - 0x0002faee, 0x0002feee, 0x000302ee, 0x000306ee, - 0x00030aee, 0x00030eee, 0x000312ee, 0x000316ee, - 0x00031aee, 0x00031eee, 0x000322ee, 0x000326ee, - 0x00032aee, 0x00032eee, 0x000332ee, 0x000336ee, - 0x00033aee, 0x00033eee, 0x000342ee, 0x000346ee, - 0x00034aee, 0x00034eee, 0x000352ee, 0x000356ee, - 0x00035aee, 0x00035eee, 0x000362ee, 0x000366ee, - 0x00036aee, 0x00036eee, 0x000372ee, 0x000376ee, - 0x00037aee, 0x00037eee, 0x000382ee, 0x000386ee, - 0x00038aee, 0x00038eee, 0x000392ee, 0x000396ee, - 0x00039aee, 0x00039eee, 0x0003a2ee, 0x0003a6ee, - 0x0003aaee, 0x0003aeee, 0x0003b2ee, 0x0003b6ee, - 0x0003baee, 0x0003beee, 0x0003c2ee, 0x0003c6ee, - 0x0003caee, 0x0003ceee, 0x0003d2ee, 0x0003d6ee, - 0x0003daee, 0x0003deee, 0x0003e2ee, 0x0003e6ee, - 0x0003eaee, 0x0003eeee, 0x0003f2ee, 0x0003f6ee, - 0x0003faee, 0x0003feee, 0x000402ee, 0x000406ee, - 0x00040aee, 0x00040eee, 0x000412ee, 0x000416ee, - 0x00041aee, 0x00041eee, 0x000422ee, 0x000426ee, - 0x00042aee, 0x00042eee, 0x000432ee, 0x000436ee, - 0x00043aee, 0x00043eee, 0x000442ee, 0x000446ee, - 0x00044aee, 0x00044eee, 0x000452ee, 0x000456ee, - 0x00045aee, 0x00045eee, 0x000462ee, 0x000466ee, - 0x00046aee, 0x00046eee, 0x000472ee, 0x000476ee, - 0x00047aee, 0x00047eee, 0x000482ee, 0x000486ee, - 0x00048aee, 0x00048eee, 0x000492ee, 0x000496ee, - 0x00049aee, 0x00049eee, 0x0004a2ee, 0x0004a6ee, - 0x0004aaee, 0x0004aeee, 0x0004b2ee, 0x0004b6ee, - 0x0004baee, 0x0004beee, 0x0004c2ee, 0x0004c6ee, - 0x0004caee, 0x0004ceee, 0x0004d2ee, 0x0004d6ee, - 0x0004daee, 0x0004deee, 0x0004e2ee, 0x0004e6ee, - 0x0004eaee, 0x0004eeee, 0x0004f2ee, 0x0004f6ee, - 0x0004faee, 0x0004feee, 0x000502ee, 0x000506ee, - 0x00050aee, 0x00050eee, 0x000512ee, 0x000516ee, - 0x00051aee, 0x00051eee, 0x000522ee, 0x000526ee, - 0x00052aee, 0x00052eee, 0x000532ee, 0x000536ee, - 0x00053aee, 0x00053eee, 0x000542ee, 0x000546ee, - 0x00054aee, 0x00054eee, 0x000552ee, 0x000556ee, - 0x00055aee, 0x00055eee, 0x000562ee, 0x000566ee, - 0x00056aee, 0x00056eee, 0x000572ee, 0x000576ee, - 0x00057aee, 0x00057eee, 0x000582ee, 0x000586ee, - 0x00058aee, 0x00058eee, 0x000592ee, 0x000596ee, - 0x00059aee, 0x00059eee, 0x0005a2ee, 0x0005a6ee, - 0x0005aaee, 0x0005aeee, 0x0005b2ee, 0x0005b6ee, - 0x0005baee, 0x0005beee, 0x0005c2ee, 0x0005c6ee, - 0x0005caee, 0x0005ceee, 0x0005d2ee, 0x0005d6ee, - 0x0005daee, 0x0005deee, 0x0005e2ee, 0x0005e6ee, - 0x0005eaee, 0x0005eeee, 0x0005f2ee, 0x0005f6ee, - 0x0005faee, 0x0005feee, 0x000602ee, 0x000606ee, - 0x00060aee, 0x00060eee, 0x000612ee, 0x000616ee, - 0x00061aee, 0x00061eee, 0x000622ee, 0x000626ee, - 0x00062aee, 0x00062eee, 0x000632ee, 0x000636ee, - 0x00063aee, 0x00063eee, 0x000642ee, 0x000646ee, - 0x00064aee, 0x00064eee, 0x000652ee, 0x000656ee, - 0x00065aee, 0x00065eee, 0x000662ee, 0x000666ee, - 0x00066aee, 0x00066eee, 0x000672ee, 0x000676ee, - 0x00067aee, 0x00067eee, 0x000682ee, 0x000686ee, - 0x00068aee, 0x00068eee, 0x000692ee, 0x000696ee, - 0x00069aee, 0x00069eee, 0x0006a2ee, 0x0006a6ee, - 0x0006aaee, 0x0006aeee, 0x0006b2ee, 0x0006b6ee, - 0x0006baee, 0x0006beee, 0x0006c2ee, 0x0006c6ee, - 0x0006caee, 0x0006ceee, 0x0006d2ee, 0x0006d6ee, - 0x0006daee, 0x0006deee, 0x0006e2ee, 0x0006e6ee, - 0x0006eaee, 0x0006eeee, 0x0006f2ee, 0x0006f6ee, - 0x0006faee, 0x0006feee, 0x000702ee, 0x000706ee, - 0x00070aee, 0x00070eee, 0x000712ee, 0x000716ee, - 0x00071aee, 0x00071eee, 0x000722ee, 0x000726ee, - 0x00072aee, 0x00072eee, 0x000732ee, 0x000736ee, - 0x00073aee, 0x00073eee, 0x000742ee, 0x000746ee, - 0x00074aee, 0x00074eee, 0x000752ee, 0x000756ee, - 0x00075aee, 0x00075eee, 0x000762ee, 0x000766ee, - 0x00076aee, 0x00076eee, 0x000772ee, 0x000776ee, - 0x00077aee, 0x00077eee, 0x000782ee, 0x000786ee, - 0x00078aee, 0x00078eee, 0x000792ee, 0x000796ee, - 0x00079aee, 0x00079eee, 0x0007a2ee, 0x0007a6ee, - 0x0007aaee, 0x0007aeee, 0x0007b2ee, 0x0007b6ee, - 0x0007baee, 0x0007beee, 0x0007c2ee, 0x0007c6ee, - 0x0007caee, 0x0007ceee, 0x0007d2ee, 0x0007d6ee, - 0x0007daee, 0x0007deee, 0x0007e2ee, 0x0007e6ee, - 0x0007eaee, 0x0007eeee, 0x0007f2ee, 0x0007f6ee, - 0x0007faee, 0x0007feee, 0x0000000d, 0x0000010d, - 0x0000020d, 0x0000030d, 0x0000040d, 0x0000050d, - 0x0000060d, 0x0000070d, 0x0000080d, 0x0000090d, - 0x00000a0d, 0x00000b0d, 0x00000c0d, 0x00000d0d, - 0x00000e0d, 0x00000f0d, 0x0000100d, 0x0000110d, - 0x0000120d, 0x0000130d, 0x0000140d, 0x0000150d, - 0x0000160d, 0x0000170d, 0x0000180d, 0x0000190d, - 0x00001a0d, 0x00001b0d, 0x00001c0d, 0x00001d0d, - 0x00001e0d, 0x00001f0d, 0x0000200d, 0x0000210d, - 0x0000220d, 0x0000230d, 0x0000240d, 0x0000250d, - 0x0000260d, 0x0000270d, 0x0000280d, 0x0000290d, - 0x00002a0d, 0x00002b0d, 0x00002c0d, 0x00002d0d, - 0x00002e0d, 0x00002f0d, 0x0000300d, 0x0000310d, - 0x0000320d, 0x0000330d, 0x0000340d, 0x0000350d, - 0x0000360d, 0x0000370d, 0x0000380d, 0x0000390d, - 0x00003a0d, 0x00003b0d, 0x00003c0d, 0x00003d0d, - 0x00003e0d, 0x00003f0d, 0x0000400d, 0x0000410d, - 0x0000420d, 0x0000430d, 0x0000440d, 0x0000450d, - 0x0000460d, 0x0000470d, 0x0000480d, 0x0000490d, - 0x00004a0d, 0x00004b0d, 0x00004c0d, 0x00004d0d, - 0x00004e0d, 0x00004f0d, 0x0000500d, 0x0000510d, - 0x0000520d, 0x0000530d, 0x0000540d, 0x0000550d, - 0x0000560d, 0x0000570d, 0x0000580d, 0x0000590d, - 0x00005a0d, 0x00005b0d, 0x00005c0d, 0x00005d0d, - 0x00005e0d, 0x00005f0d, 0x0000600d, 0x0000610d, - 0x0000620d, 0x0000630d, 0x0000640d, 0x0000650d, - 0x0000660d, 0x0000670d, 0x0000680d, 0x0000690d, - 0x00006a0d, 0x00006b0d, 0x00006c0d, 0x00006d0d, - 0x00006e0d, 0x00006f0d, 0x0000700d, 0x0000710d, - 0x0000720d, 0x0000730d, 0x0000740d, 0x0000750d, - 0x0000760d, 0x0000770d, 0x0000780d, 0x0000790d, - 0x00007a0d, 0x00007b0d, 0x00007c0d, 0x00007d0d, - 0x00007e0d, 0x00007f0d, 0x0000800d, 0x0000810d, - 0x0000820d, 0x0000830d, 0x0000840d, 0x0000850d, - 0x0000860d, 0x0000870d, 0x0000880d, 0x0000890d, - 0x00008a0d, 0x00008b0d, 0x00008c0d, 0x00008d0d, - 0x00008e0d, 0x00008f0d, 0x0000900d, 0x0000910d, - 0x0000920d, 0x0000930d, 0x0000940d, 0x0000950d, - 0x0000960d, 0x0000970d, 0x0000980d, 0x0000990d, - 0x00009a0d, 0x00009b0d, 0x00009c0d, 0x00009d0d, - 0x00009e0d, 0x00009f0d, 0x0000a00d, 0x0000a10d, - 0x0000a20d, 0x0000a30d, 0x0000a40d, 0x0000a50d, - 0x0000a60d, 0x0000a70d, 0x0000a80d, 0x0000a90d, - 0x0000aa0d, 0x0000ab0d, 0x0000ac0d, 0x0000ad0d, - 0x0000ae0d, 0x0000af0d, 0x0000b00d, 0x0000b10d, - 0x0000b20d, 0x0000b30d, 0x0000b40d, 0x0000b50d, - 0x0000b60d, 0x0000b70d, 0x0000b80d, 0x0000b90d, - 0x0000ba0d, 0x0000bb0d, 0x0000bc0d, 0x0000bd0d, - 0x0000be0d, 0x0000bf0d, 0x0000c00d, 0x0000c10d, - 0x0000c20d, 0x0000c30d, 0x0000c40d, 0x0000c50d, - 0x0000c60d, 0x0000c70d, 0x0000c80d, 0x0000c90d, - 0x0000ca0d, 0x0000cb0d, 0x0000cc0d, 0x0000cd0d, - 0x0000ce0d, 0x0000cf0d, 0x0000d00d, 0x0000d10d, - 0x0000d20d, 0x0000d30d, 0x0000d40d, 0x0000d50d, - 0x0000d60d, 0x0000d70d, 0x0000d80d, 0x0000d90d, - 0x0000da0d, 0x0000db0d, 0x0000dc0d, 0x0000dd0d, - 0x0000de0d, 0x0000df0d, 0x0000e00d, 0x0000e10d, - 0x0000e20d, 0x0000e30d, 0x0000e40d, 0x0000e50d, - 0x0000e60d, 0x0000e70d, 0x0000e80d, 0x0000e90d, - 0x0000ea0d, 0x0000eb0d, 0x0000ec0d, 0x0000ed0d, - 0x0000ee0d, 0x0000ef0d, 0x0000f00d, 0x0000f10d, - 0x0000f20d, 0x0000f30d, 0x0000f40d, 0x0000f50d, - 0x0000f60d, 0x0000f70d, 0x0000f80d, 0x0000f90d, - 0x0000fa0d, 0x0000fb0d, 0x0000fc0d, 0x0000fd0d, - 0x0000fe0d, 0x0000ff0d, 0x0001000d, 0x0001010d, - 0x0001020d, 0x0001030d, 0x0001040d, 0x0001050d, - 0x0001060d, 0x0001070d, 0x0001080d, 0x0001090d, - 0x00010a0d, 0x00010b0d, 0x00010c0d, 0x00010d0d, - 0x00010e0d, 0x00010f0d, 0x0001100d, 0x0001110d, - 0x0001120d, 0x0001130d, 0x0001140d, 0x0001150d, - 0x0001160d, 0x0001170d, 0x0001180d, 0x0001190d, - 0x00011a0d, 0x00011b0d, 0x00011c0d, 0x00011d0d, - 0x00011e0d, 0x00011f0d, 0x0001200d, 0x0001210d, - 0x0001220d, 0x0001230d, 0x0001240d, 0x0001250d, - 0x0001260d, 0x0001270d, 0x0001280d, 0x0001290d, - 0x00012a0d, 0x00012b0d, 0x00012c0d, 0x00012d0d, - 0x00012e0d, 0x00012f0d, 0x0001300d, 0x0001310d, - 0x0001320d, 0x0001330d, 0x0001340d, 0x0001350d, - 0x0001360d, 0x0001370d, 0x0001380d, 0x0001390d, - 0x00013a0d, 0x00013b0d, 0x00013c0d, 0x00013d0d, - 0x00013e0d, 0x00013f0d, 0x0001400d, 0x0001410d, - 0x0001420d, 0x0001430d, 0x0001440d, 0x0001450d, - 0x0001460d, 0x0001470d, 0x0001480d, 0x0001490d, - 0x00014a0d, 0x00014b0d, 0x00014c0d, 0x00014d0d, - 0x00014e0d, 0x00014f0d, 0x0001500d, 0x0001510d, - 0x0001520d, 0x0001530d, 0x0001540d, 0x0001550d, - 0x0001560d, 0x0001570d, 0x0001580d, 0x0001590d, - 0x00015a0d, 0x00015b0d, 0x00015c0d, 0x00015d0d, - 0x00015e0d, 0x00015f0d, 0x0001600d, 0x0001610d, - 0x0001620d, 0x0001630d, 0x0001640d, 0x0001650d, - 0x0001660d, 0x0001670d, 0x0001680d, 0x0001690d, - 0x00016a0d, 0x00016b0d, 0x00016c0d, 0x00016d0d, - 0x00016e0d, 0x00016f0d, 0x0001700d, 0x0001710d, - 0x0001720d, 0x0001730d, 0x0001740d, 0x0001750d, - 0x0001760d, 0x0001770d, 0x0001780d, 0x0001790d, - 0x00017a0d, 0x00017b0d, 0x00017c0d, 0x00017d0d, - 0x00017e0d, 0x00017f0d, 0x0001800d, 0x0001810d, - 0x0001820d, 0x0001830d, 0x0001840d, 0x0001850d, - 0x0001860d, 0x0001870d, 0x0001880d, 0x0001890d, - 0x00018a0d, 0x00018b0d, 0x00018c0d, 0x00018d0d, - 0x00018e0d, 0x00018f0d, 0x0001900d, 0x0001910d, - 0x0001920d, 0x0001930d, 0x0001940d, 0x0001950d, - 0x0001960d, 0x0001970d, 0x0001980d, 0x0001990d, - 0x00019a0d, 0x00019b0d, 0x00019c0d, 0x00019d0d, - 0x00019e0d, 0x00019f0d, 0x0001a00d, 0x0001a10d, - 0x0001a20d, 0x0001a30d, 0x0001a40d, 0x0001a50d, - 0x0001a60d, 0x0001a70d, 0x0001a80d, 0x0001a90d, - 0x0001aa0d, 0x0001ab0d, 0x0001ac0d, 0x0001ad0d, - 0x0001ae0d, 0x0001af0d, 0x0001b00d, 0x0001b10d, - 0x0001b20d, 0x0001b30d, 0x0001b40d, 0x0001b50d, - 0x0001b60d, 0x0001b70d, 0x0001b80d, 0x0001b90d, - 0x0001ba0d, 0x0001bb0d, 0x0001bc0d, 0x0001bd0d, - 0x0001be0d, 0x0001bf0d, 0x0001c00d, 0x0001c10d, - 0x0001c20d, 0x0001c30d, 0x0001c40d, 0x0001c50d, - 0x0001c60d, 0x0001c70d, 0x0001c80d, 0x0001c90d, - 0x0001ca0d, 0x0001cb0d, 0x0001cc0d, 0x0001cd0d, - 0x0001ce0d, 0x0001cf0d, 0x0001d00d, 0x0001d10d, - 0x0001d20d, 0x0001d30d, 0x0001d40d, 0x0001d50d, - 0x0001d60d, 0x0001d70d, 0x0001d80d, 0x0001d90d, - 0x0001da0d, 0x0001db0d, 0x0001dc0d, 0x0001dd0d, - 0x0001de0d, 0x0001df0d, 0x0001e00d, 0x0001e10d, - 0x0001e20d, 0x0001e30d, 0x0001e40d, 0x0001e50d, - 0x0001e60d, 0x0001e70d, 0x0001e80d, 0x0001e90d, - 0x0001ea0d, 0x0001eb0d, 0x0001ec0d, 0x0001ed0d, - 0x0001ee0d, 0x0001ef0d, 0x0001f00d, 0x0001f10d, - 0x0001f20d, 0x0001f30d, 0x0001f40d, 0x0001f50d, - 0x0001f60d, 0x0001f70d, 0x0001f80d, 0x0001f90d, - 0x0001fa0d, 0x0001fb0d, 0x0001fc0d, 0x0001fd0d, - 0x0001fe0d, 0x0001ff0d, 0x0002000d, 0x0002010d, - 0x0002020d, 0x0002030d, 0x0002040d, 0x0002050d, - 0x0002060d, 0x0002070d, 0x0002080d, 0x0002090d, - 0x00020a0d, 0x00020b0d, 0x00020c0d, 0x00020d0d, - 0x00020e0d, 0x00020f0d, 0x0002100d, 0x0002110d, - 0x0002120d, 0x0002130d, 0x0002140d, 0x0002150d, - 0x0002160d, 0x0002170d, 0x0002180d, 0x0002190d, - 0x00021a0d, 0x00021b0d, 0x00021c0d, 0x00021d0d, - 0x00021e0d, 0x00021f0d, 0x0002200d, 0x0002210d, - 0x0002220d, 0x0002230d, 0x0002240d, 0x0002250d, - 0x0002260d, 0x0002270d, 0x0002280d, 0x0002290d, - 0x00022a0d, 0x00022b0d, 0x00022c0d, 0x00022d0d, - 0x00022e0d, 0x00022f0d, 0x0002300d, 0x0002310d, - 0x0002320d, 0x0002330d, 0x0002340d, 0x0002350d, - 0x0002360d, 0x0002370d, 0x0002380d, 0x0002390d, - 0x00023a0d, 0x00023b0d, 0x00023c0d, 0x00023d0d, - 0x00023e0d, 0x00023f0d, 0x0002400d, 0x0002410d, - 0x0002420d, 0x0002430d, 0x0002440d, 0x0002450d, - 0x0002460d, 0x0002470d, 0x0002480d, 0x0002490d, - 0x00024a0d, 0x00024b0d, 0x00024c0d, 0x00024d0d, - 0x00024e0d, 0x00024f0d, 0x0002500d, 0x0002510d, - 0x0002520d, 0x0002530d, 0x0002540d, 0x0002550d, - 0x0002560d, 0x0002570d, 0x0002580d, 0x0002590d, - 0x00025a0d, 0x00025b0d, 0x00025c0d, 0x00025d0d, - 0x00025e0d, 0x00025f0d, 0x0002600d, 0x0002610d, - 0x0002620d, 0x0002630d, 0x0002640d, 0x0002650d, - 0x0002660d, 0x0002670d, 0x0002680d, 0x0002690d, - 0x00026a0d, 0x00026b0d, 0x00026c0d, 0x00026d0d, - 0x00026e0d, 0x00026f0d, 0x0002700d, 0x0002710d, - 0x0002720d, 0x0002730d, 0x0002740d, 0x0002750d, - 0x0002760d, 0x0002770d, 0x0002780d, 0x0002790d, - 0x00027a0d, 0x00027b0d, 0x00027c0d, 0x00027d0d, - 0x00027e0d, 0x00027f0d, 0x0002800d, 0x0002810d, - 0x0002820d, 0x0002830d, 0x0002840d, 0x0002850d, - 0x0002860d, 0x0002870d, 0x0002880d, 0x0002890d, - 0x00028a0d, 0x00028b0d, 0x00028c0d, 0x00028d0d, - 0x00028e0d, 0x00028f0d, 0x0002900d, 0x0002910d, - 0x0002920d, 0x0002930d, 0x0002940d, 0x0002950d, - 0x0002960d, 0x0002970d, 0x0002980d, 0x0002990d, - 0x00029a0d, 0x00029b0d, 0x00029c0d, 0x00029d0d, - 0x00029e0d, 0x00029f0d, 0x0002a00d, 0x0002a10d, - 0x0002a20d, 0x0002a30d, 0x0002a40d, 0x0002a50d, - 0x0002a60d, 0x0002a70d, 0x0002a80d, 0x0002a90d, - 0x0002aa0d, 0x0002ab0d, 0x0002ac0d, 0x0002ad0d, - 0x0002ae0d, 0x0002af0d, 0x0002b00d, 0x0002b10d, - 0x0002b20d, 0x0002b30d, 0x0002b40d, 0x0002b50d, - 0x0002b60d, 0x0002b70d, 0x0002b80d, 0x0002b90d, - 0x0002ba0d, 0x0002bb0d, 0x0002bc0d, 0x0002bd0d, - 0x0002be0d, 0x0002bf0d, 0x0002c00d, 0x0002c10d, - 0x0002c20d, 0x0002c30d, 0x0002c40d, 0x0002c50d, - 0x0002c60d, 0x0002c70d, 0x0002c80d, 0x0002c90d, - 0x0002ca0d, 0x0002cb0d, 0x0002cc0d, 0x0002cd0d, - 0x0002ce0d, 0x0002cf0d, 0x0002d00d, 0x0002d10d, - 0x0002d20d, 0x0002d30d, 0x0002d40d, 0x0002d50d, - 0x0002d60d, 0x0002d70d, 0x0002d80d, 0x0002d90d, - 0x0002da0d, 0x0002db0d, 0x0002dc0d, 0x0002dd0d, - 0x0002de0d, 0x0002df0d, 0x0002e00d, 0x0002e10d, - 0x0002e20d, 0x0002e30d, 0x0002e40d, 0x0002e50d, - 0x0002e60d, 0x0002e70d, 0x0002e80d, 0x0002e90d, - 0x0002ea0d, 0x0002eb0d, 0x0002ec0d, 0x0002ed0d, - 0x0002ee0d, 0x0002ef0d, 0x0002f00d, 0x0002f10d, - 0x0002f20d, 0x0002f30d, 0x0002f40d, 0x0002f50d, - 0x0002f60d, 0x0002f70d, 0x0002f80d, 0x0002f90d, - 0x0002fa0d, 0x0002fb0d, 0x0002fc0d, 0x0002fd0d, - 0x0002fe0d, 0x0002ff0d, 0x0003000d, 0x0003010d, - 0x0003020d, 0x0003030d, 0x0003040d, 0x0003050d, - 0x0003060d, 0x0003070d, 0x0003080d, 0x0003090d, - 0x00030a0d, 0x00030b0d, 0x00030c0d, 0x00030d0d, - 0x00030e0d, 0x00030f0d, 0x0003100d, 0x0003110d, - 0x0003120d, 0x0003130d, 0x0003140d, 0x0003150d, - 0x0003160d, 0x0003170d, 0x0003180d, 0x0003190d, - 0x00031a0d, 0x00031b0d, 0x00031c0d, 0x00031d0d, - 0x00031e0d, 0x00031f0d, 0x0003200d, 0x0003210d, - 0x0003220d, 0x0003230d, 0x0003240d, 0x0003250d, - 0x0003260d, 0x0003270d, 0x0003280d, 0x0003290d, - 0x00032a0d, 0x00032b0d, 0x00032c0d, 0x00032d0d, - 0x00032e0d, 0x00032f0d, 0x0003300d, 0x0003310d, - 0x0003320d, 0x0003330d, 0x0003340d, 0x0003350d, - 0x0003360d, 0x0003370d, 0x0003380d, 0x0003390d, - 0x00033a0d, 0x00033b0d, 0x00033c0d, 0x00033d0d, - 0x00033e0d, 0x00033f0d, 0x0003400d, 0x0003410d, - 0x0003420d, 0x0003430d, 0x0003440d, 0x0003450d, - 0x0003460d, 0x0003470d, 0x0003480d, 0x0003490d, - 0x00034a0d, 0x00034b0d, 0x00034c0d, 0x00034d0d, - 0x00034e0d, 0x00034f0d, 0x0003500d, 0x0003510d, - 0x0003520d, 0x0003530d, 0x0003540d, 0x0003550d, - 0x0003560d, 0x0003570d, 0x0003580d, 0x0003590d, - 0x00035a0d, 0x00035b0d, 0x00035c0d, 0x00035d0d, - 0x00035e0d, 0x00035f0d, 0x0003600d, 0x0003610d, - 0x0003620d, 0x0003630d, 0x0003640d, 0x0003650d, - 0x0003660d, 0x0003670d, 0x0003680d, 0x0003690d, - 0x00036a0d, 0x00036b0d, 0x00036c0d, 0x00036d0d, - 0x00036e0d, 0x00036f0d, 0x0003700d, 0x0003710d, - 0x0003720d, 0x0003730d, 0x0003740d, 0x0003750d, - 0x0003760d, 0x0003770d, 0x0003780d, 0x0003790d, - 0x00037a0d, 0x00037b0d, 0x00037c0d, 0x00037d0d, - 0x00037e0d, 0x00037f0d, 0x0003800d, 0x0003810d, - 0x0003820d, 0x0003830d, 0x0003840d, 0x0003850d, - 0x0003860d, 0x0003870d, 0x0003880d, 0x0003890d, - 0x00038a0d, 0x00038b0d, 0x00038c0d, 0x00038d0d, - 0x00038e0d, 0x00038f0d, 0x0003900d, 0x0003910d, - 0x0003920d, 0x0003930d, 0x0003940d, 0x0003950d, - 0x0003960d, 0x0003970d, 0x0003980d, 0x0003990d, - 0x00039a0d, 0x00039b0d, 0x00039c0d, 0x00039d0d, - 0x00039e0d, 0x00039f0d, 0x0003a00d, 0x0003a10d, - 0x0003a20d, 0x0003a30d, 0x0003a40d, 0x0003a50d, - 0x0003a60d, 0x0003a70d, 0x0003a80d, 0x0003a90d, - 0x0003aa0d, 0x0003ab0d, 0x0003ac0d, 0x0003ad0d, - 0x0003ae0d, 0x0003af0d, 0x0003b00d, 0x0003b10d, - 0x0003b20d, 0x0003b30d, 0x0003b40d, 0x0003b50d, - 0x0003b60d, 0x0003b70d, 0x0003b80d, 0x0003b90d, - 0x0003ba0d, 0x0003bb0d, 0x0003bc0d, 0x0003bd0d, - 0x0003be0d, 0x0003bf0d, 0x0003c00d, 0x0003c10d, - 0x0003c20d, 0x0003c30d, 0x0003c40d, 0x0003c50d, - 0x0003c60d, 0x0003c70d, 0x0003c80d, 0x0003c90d, - 0x0003ca0d, 0x0003cb0d, 0x0003cc0d, 0x0003cd0d, - 0x0003ce0d, 0x0003cf0d, 0x0003d00d, 0x0003d10d, - 0x0003d20d, 0x0003d30d, 0x0003d40d, 0x0003d50d, - 0x0003d60d, 0x0003d70d, 0x0003d80d, 0x0003d90d, - 0x0003da0d, 0x0003db0d, 0x0003dc0d, 0x0003dd0d, - 0x0003de0d, 0x0003df0d, 0x0003e00d, 0x0003e10d, - 0x0003e20d, 0x0003e30d, 0x0003e40d, 0x0003e50d, - 0x0003e60d, 0x0003e70d, 0x0003e80d, 0x0003e90d, - 0x0003ea0d, 0x0003eb0d, 0x0003ec0d, 0x0003ed0d, - 0x0003ee0d, 0x0003ef0d, 0x0003f00d, 0x0003f10d, - 0x0003f20d, 0x0003f30d, 0x0003f40d, 0x0003f50d, - 0x0003f60d, 0x0003f70d, 0x0003f80d, 0x0003f90d, - 0x0003fa0d, 0x0003fb0d, 0x0003fc0d, 0x0003fd0d, - 0x0003fe0d, 0x0003ff0d, 0x000000ae, 0x000002ae, - 0x000004ae, 0x000006ae, 0x000008ae, 0x00000aae, - 0x00000cae, 0x00000eae, 0x000010ae, 0x000012ae, - 0x000014ae, 0x000016ae, 0x000018ae, 0x00001aae, - 0x00001cae, 0x00001eae, 0x000020ae, 0x000022ae, - 0x000024ae, 0x000026ae, 0x000028ae, 0x00002aae, - 0x00002cae, 0x00002eae, 0x000030ae, 0x000032ae, - 0x000034ae, 0x000036ae, 0x000038ae, 0x00003aae, - 0x00003cae, 0x00003eae, 0x000040ae, 0x000042ae, - 0x000044ae, 0x000046ae, 0x000048ae, 0x00004aae, - 0x00004cae, 0x00004eae, 0x000050ae, 0x000052ae, - 0x000054ae, 0x000056ae, 0x000058ae, 0x00005aae, - 0x00005cae, 0x00005eae, 0x000060ae, 0x000062ae, - 0x000064ae, 0x000066ae, 0x000068ae, 0x00006aae, - 0x00006cae, 0x00006eae, 0x000070ae, 0x000072ae, - 0x000074ae, 0x000076ae, 0x000078ae, 0x00007aae, - 0x00007cae, 0x00007eae, 0x000080ae, 0x000082ae, - 0x000084ae, 0x000086ae, 0x000088ae, 0x00008aae, - 0x00008cae, 0x00008eae, 0x000090ae, 0x000092ae, - 0x000094ae, 0x000096ae, 0x000098ae, 0x00009aae, - 0x00009cae, 0x00009eae, 0x0000a0ae, 0x0000a2ae, - 0x0000a4ae, 0x0000a6ae, 0x0000a8ae, 0x0000aaae, - 0x0000acae, 0x0000aeae, 0x0000b0ae, 0x0000b2ae, - 0x0000b4ae, 0x0000b6ae, 0x0000b8ae, 0x0000baae, - 0x0000bcae, 0x0000beae, 0x0000c0ae, 0x0000c2ae, - 0x0000c4ae, 0x0000c6ae, 0x0000c8ae, 0x0000caae, - 0x0000ccae, 0x0000ceae, 0x0000d0ae, 0x0000d2ae, - 0x0000d4ae, 0x0000d6ae, 0x0000d8ae, 0x0000daae, - 0x0000dcae, 0x0000deae, 0x0000e0ae, 0x0000e2ae, - 0x0000e4ae, 0x0000e6ae, 0x0000e8ae, 0x0000eaae, - 0x0000ecae, 0x0000eeae, 0x0000f0ae, 0x0000f2ae, - 0x0000f4ae, 0x0000f6ae, 0x0000f8ae, 0x0000faae, - 0x0000fcae, 0x0000feae, 0x000100ae, 0x000102ae, - 0x000104ae, 0x000106ae, 0x000108ae, 0x00010aae, - 0x00010cae, 0x00010eae, 0x000110ae, 0x000112ae, - 0x000114ae, 0x000116ae, 0x000118ae, 0x00011aae, - 0x00011cae, 0x00011eae, 0x000120ae, 0x000122ae, - 0x000124ae, 0x000126ae, 0x000128ae, 0x00012aae, - 0x00012cae, 0x00012eae, 0x000130ae, 0x000132ae, - 0x000134ae, 0x000136ae, 0x000138ae, 0x00013aae, - 0x00013cae, 0x00013eae, 0x000140ae, 0x000142ae, - 0x000144ae, 0x000146ae, 0x000148ae, 0x00014aae, - 0x00014cae, 0x00014eae, 0x000150ae, 0x000152ae, - 0x000154ae, 0x000156ae, 0x000158ae, 0x00015aae, - 0x00015cae, 0x00015eae, 0x000160ae, 0x000162ae, - 0x000164ae, 0x000166ae, 0x000168ae, 0x00016aae, - 0x00016cae, 0x00016eae, 0x000170ae, 0x000172ae, - 0x000174ae, 0x000176ae, 0x000178ae, 0x00017aae, - 0x00017cae, 0x00017eae, 0x000180ae, 0x000182ae, - 0x000184ae, 0x000186ae, 0x000188ae, 0x00018aae, - 0x00018cae, 0x00018eae, 0x000190ae, 0x000192ae, - 0x000194ae, 0x000196ae, 0x000198ae, 0x00019aae, - 0x00019cae, 0x00019eae, 0x0001a0ae, 0x0001a2ae, - 0x0001a4ae, 0x0001a6ae, 0x0001a8ae, 0x0001aaae, - 0x0001acae, 0x0001aeae, 0x0001b0ae, 0x0001b2ae, - 0x0001b4ae, 0x0001b6ae, 0x0001b8ae, 0x0001baae, - 0x0001bcae, 0x0001beae, 0x0001c0ae, 0x0001c2ae, - 0x0001c4ae, 0x0001c6ae, 0x0001c8ae, 0x0001caae, - 0x0001ccae, 0x0001ceae, 0x0001d0ae, 0x0001d2ae, - 0x0001d4ae, 0x0001d6ae, 0x0001d8ae, 0x0001daae, - 0x0001dcae, 0x0001deae, 0x0001e0ae, 0x0001e2ae, - 0x0001e4ae, 0x0001e6ae, 0x0001e8ae, 0x0001eaae, - 0x0001ecae, 0x0001eeae, 0x0001f0ae, 0x0001f2ae, - 0x0001f4ae, 0x0001f6ae, 0x0001f8ae, 0x0001faae, - 0x0001fcae, 0x0001feae, 0x000200ae, 0x000202ae, - 0x000204ae, 0x000206ae, 0x000208ae, 0x00020aae, - 0x00020cae, 0x00020eae, 0x000210ae, 0x000212ae, - 0x000214ae, 0x000216ae, 0x000218ae, 0x00021aae, - 0x00021cae, 0x00021eae, 0x000220ae, 0x000222ae, - 0x000224ae, 0x000226ae, 0x000228ae, 0x00022aae, - 0x00022cae, 0x00022eae, 0x000230ae, 0x000232ae, - 0x000234ae, 0x000236ae, 0x000238ae, 0x00023aae, - 0x00023cae, 0x00023eae, 0x000240ae, 0x000242ae, - 0x000244ae, 0x000246ae, 0x000248ae, 0x00024aae, - 0x00024cae, 0x00024eae, 0x000250ae, 0x000252ae, - 0x000254ae, 0x000256ae, 0x000258ae, 0x00025aae, - 0x00025cae, 0x00025eae, 0x000260ae, 0x000262ae, - 0x000264ae, 0x000266ae, 0x000268ae, 0x00026aae, - 0x00026cae, 0x00026eae, 0x000270ae, 0x000272ae, - 0x000274ae, 0x000276ae, 0x000278ae, 0x00027aae, - 0x00027cae, 0x00027eae, 0x000280ae, 0x000282ae, - 0x000284ae, 0x000286ae, 0x000288ae, 0x00028aae, - 0x00028cae, 0x00028eae, 0x000290ae, 0x000292ae, - 0x000294ae, 0x000296ae, 0x000298ae, 0x00029aae, - 0x00029cae, 0x00029eae, 0x0002a0ae, 0x0002a2ae, - 0x0002a4ae, 0x0002a6ae, 0x0002a8ae, 0x0002aaae, - 0x0002acae, 0x0002aeae, 0x0002b0ae, 0x0002b2ae, - 0x0002b4ae, 0x0002b6ae, 0x0002b8ae, 0x0002baae, - 0x0002bcae, 0x0002beae, 0x0002c0ae, 0x0002c2ae, - 0x0002c4ae, 0x0002c6ae, 0x0002c8ae, 0x0002caae, - 0x0002ccae, 0x0002ceae, 0x0002d0ae, 0x0002d2ae, - 0x0002d4ae, 0x0002d6ae, 0x0002d8ae, 0x0002daae, - 0x0002dcae, 0x0002deae, 0x0002e0ae, 0x0002e2ae, - 0x0002e4ae, 0x0002e6ae, 0x0002e8ae, 0x0002eaae, - 0x0002ecae, 0x0002eeae, 0x0002f0ae, 0x0002f2ae, - 0x0002f4ae, 0x0002f6ae, 0x0002f8ae, 0x0002faae, - 0x0002fcae, 0x0002feae, 0x000300ae, 0x000302ae, - 0x000304ae, 0x000306ae, 0x000308ae, 0x00030aae, - 0x00030cae, 0x00030eae, 0x000310ae, 0x000312ae, - 0x000314ae, 0x000316ae, 0x000318ae, 0x00031aae, - 0x00031cae, 0x00031eae, 0x000320ae, 0x000322ae, - 0x000324ae, 0x000326ae, 0x000328ae, 0x00032aae, - 0x00032cae, 0x00032eae, 0x000330ae, 0x000332ae, - 0x000334ae, 0x000336ae, 0x000338ae, 0x00033aae, - 0x00033cae, 0x00033eae, 0x000340ae, 0x000342ae, - 0x000344ae, 0x000346ae, 0x000348ae, 0x00034aae, - 0x00034cae, 0x00034eae, 0x000350ae, 0x000352ae, - 0x000354ae, 0x000356ae, 0x000358ae, 0x00035aae, - 0x00035cae, 0x00035eae, 0x000360ae, 0x000362ae, - 0x000364ae, 0x000366ae, 0x000368ae, 0x00036aae, - 0x00036cae, 0x00036eae, 0x000370ae, 0x000372ae, - 0x000374ae, 0x000376ae, 0x000378ae, 0x00037aae, - 0x00037cae, 0x00037eae, 0x000380ae, 0x000382ae, - 0x000384ae, 0x000386ae, 0x000388ae, 0x00038aae, - 0x00038cae, 0x00038eae, 0x000390ae, 0x000392ae, - 0x000394ae, 0x000396ae, 0x000398ae, 0x00039aae, - 0x00039cae, 0x00039eae, 0x0003a0ae, 0x0003a2ae, - 0x0003a4ae, 0x0003a6ae, 0x0003a8ae, 0x0003aaae, - 0x0003acae, 0x0003aeae, 0x0003b0ae, 0x0003b2ae, - 0x0003b4ae, 0x0003b6ae, 0x0003b8ae, 0x0003baae, - 0x0003bcae, 0x0003beae, 0x0003c0ae, 0x0003c2ae, - 0x0003c4ae, 0x0003c6ae, 0x0003c8ae, 0x0003caae, - 0x0003ccae, 0x0003ceae, 0x0003d0ae, 0x0003d2ae, - 0x0003d4ae, 0x0003d6ae, 0x0003d8ae, 0x0003daae, - 0x0003dcae, 0x0003deae, 0x0003e0ae, 0x0003e2ae, - 0x0003e4ae, 0x0003e6ae, 0x0003e8ae, 0x0003eaae, - 0x0003ecae, 0x0003eeae, 0x0003f0ae, 0x0003f2ae, - 0x0003f4ae, 0x0003f6ae, 0x0003f8ae, 0x0003faae, - 0x0003fcae, 0x0003feae, 0x000400ae, 0x000402ae, - 0x000404ae, 0x000406ae, 0x000408ae, 0x00040aae, - 0x00040cae, 0x00040eae, 0x000410ae, 0x000412ae, - 0x000414ae, 0x000416ae, 0x000418ae, 0x00041aae, - 0x00041cae, 0x00041eae, 0x000420ae, 0x000422ae, - 0x000424ae, 0x000426ae, 0x000428ae, 0x00042aae, - 0x00042cae, 0x00042eae, 0x000430ae, 0x000432ae, - 0x000434ae, 0x000436ae, 0x000438ae, 0x00043aae, - 0x00043cae, 0x00043eae, 0x000440ae, 0x000442ae, - 0x000444ae, 0x000446ae, 0x000448ae, 0x00044aae, - 0x00044cae, 0x00044eae, 0x000450ae, 0x000452ae, - 0x000454ae, 0x000456ae, 0x000458ae, 0x00045aae, - 0x00045cae, 0x00045eae, 0x000460ae, 0x000462ae, - 0x000464ae, 0x000466ae, 0x000468ae, 0x00046aae, - 0x00046cae, 0x00046eae, 0x000470ae, 0x000472ae, - 0x000474ae, 0x000476ae, 0x000478ae, 0x00047aae, - 0x00047cae, 0x00047eae, 0x000480ae, 0x000482ae, - 0x000484ae, 0x000486ae, 0x000488ae, 0x00048aae, - 0x00048cae, 0x00048eae, 0x000490ae, 0x000492ae, - 0x000494ae, 0x000496ae, 0x000498ae, 0x00049aae, - 0x00049cae, 0x00049eae, 0x0004a0ae, 0x0004a2ae, - 0x0004a4ae, 0x0004a6ae, 0x0004a8ae, 0x0004aaae, - 0x0004acae, 0x0004aeae, 0x0004b0ae, 0x0004b2ae, - 0x0004b4ae, 0x0004b6ae, 0x0004b8ae, 0x0004baae, - 0x0004bcae, 0x0004beae, 0x0004c0ae, 0x0004c2ae, - 0x0004c4ae, 0x0004c6ae, 0x0004c8ae, 0x0004caae, - 0x0004ccae, 0x0004ceae, 0x0004d0ae, 0x0004d2ae, - 0x0004d4ae, 0x0004d6ae, 0x0004d8ae, 0x0004daae, - 0x0004dcae, 0x0004deae, 0x0004e0ae, 0x0004e2ae, - 0x0004e4ae, 0x0004e6ae, 0x0004e8ae, 0x0004eaae, - 0x0004ecae, 0x0004eeae, 0x0004f0ae, 0x0004f2ae, - 0x0004f4ae, 0x0004f6ae, 0x0004f8ae, 0x0004faae, - 0x0004fcae, 0x0004feae, 0x000500ae, 0x000502ae, - 0x000504ae, 0x000506ae, 0x000508ae, 0x00050aae, - 0x00050cae, 0x00050eae, 0x000510ae, 0x000512ae, - 0x000514ae, 0x000516ae, 0x000518ae, 0x00051aae, - 0x00051cae, 0x00051eae, 0x000520ae, 0x000522ae, - 0x000524ae, 0x000526ae, 0x000528ae, 0x00052aae, - 0x00052cae, 0x00052eae, 0x000530ae, 0x000532ae, - 0x000534ae, 0x000536ae, 0x000538ae, 0x00053aae, - 0x00053cae, 0x00053eae, 0x000540ae, 0x000542ae, - 0x000544ae, 0x000546ae, 0x000548ae, 0x00054aae, - 0x00054cae, 0x00054eae, 0x000550ae, 0x000552ae, - 0x000554ae, 0x000556ae, 0x000558ae, 0x00055aae, - 0x00055cae, 0x00055eae, 0x000560ae, 0x000562ae, - 0x000564ae, 0x000566ae, 0x000568ae, 0x00056aae, - 0x00056cae, 0x00056eae, 0x000570ae, 0x000572ae, - 0x000574ae, 0x000576ae, 0x000578ae, 0x00057aae, - 0x00057cae, 0x00057eae, 0x000580ae, 0x000582ae, - 0x000584ae, 0x000586ae, 0x000588ae, 0x00058aae, - 0x00058cae, 0x00058eae, 0x000590ae, 0x000592ae, - 0x000594ae, 0x000596ae, 0x000598ae, 0x00059aae, - 0x00059cae, 0x00059eae, 0x0005a0ae, 0x0005a2ae, - 0x0005a4ae, 0x0005a6ae, 0x0005a8ae, 0x0005aaae, - 0x0005acae, 0x0005aeae, 0x0005b0ae, 0x0005b2ae, - 0x0005b4ae, 0x0005b6ae, 0x0005b8ae, 0x0005baae, - 0x0005bcae, 0x0005beae, 0x0005c0ae, 0x0005c2ae, - 0x0005c4ae, 0x0005c6ae, 0x0005c8ae, 0x0005caae, - 0x0005ccae, 0x0005ceae, 0x0005d0ae, 0x0005d2ae, - 0x0005d4ae, 0x0005d6ae, 0x0005d8ae, 0x0005daae, - 0x0005dcae, 0x0005deae, 0x0005e0ae, 0x0005e2ae, - 0x0005e4ae, 0x0005e6ae, 0x0005e8ae, 0x0005eaae, - 0x0005ecae, 0x0005eeae, 0x0005f0ae, 0x0005f2ae, - 0x0005f4ae, 0x0005f6ae, 0x0005f8ae, 0x0005faae, - 0x0005fcae, 0x0005feae, 0x000600ae, 0x000602ae, - 0x000604ae, 0x000606ae, 0x000608ae, 0x00060aae, - 0x00060cae, 0x00060eae, 0x000610ae, 0x000612ae, - 0x000614ae, 0x000616ae, 0x000618ae, 0x00061aae, - 0x00061cae, 0x00061eae, 0x000620ae, 0x000622ae, - 0x000624ae, 0x000626ae, 0x000628ae, 0x00062aae, - 0x00062cae, 0x00062eae, 0x000630ae, 0x000632ae, - 0x000634ae, 0x000636ae, 0x000638ae, 0x00063aae, - 0x00063cae, 0x00063eae, 0x000640ae, 0x000642ae, - 0x000644ae, 0x000646ae, 0x000648ae, 0x00064aae, - 0x00064cae, 0x00064eae, 0x000650ae, 0x000652ae, - 0x000654ae, 0x000656ae, 0x000658ae, 0x00065aae, - 0x00065cae, 0x00065eae, 0x000660ae, 0x000662ae, - 0x000664ae, 0x000666ae, 0x000668ae, 0x00066aae, - 0x00066cae, 0x00066eae, 0x000670ae, 0x000672ae, - 0x000674ae, 0x000676ae, 0x000678ae, 0x00067aae, - 0x00067cae, 0x00067eae, 0x000680ae, 0x000682ae, - 0x000684ae, 0x000686ae, 0x000688ae, 0x00068aae, - 0x00068cae, 0x00068eae, 0x000690ae, 0x000692ae, - 0x000694ae, 0x000696ae, 0x000698ae, 0x00069aae, - 0x00069cae, 0x00069eae, 0x0006a0ae, 0x0006a2ae, - 0x0006a4ae, 0x0006a6ae, 0x0006a8ae, 0x0006aaae, - 0x0006acae, 0x0006aeae, 0x0006b0ae, 0x0006b2ae, - 0x0006b4ae, 0x0006b6ae, 0x0006b8ae, 0x0006baae, - 0x0006bcae, 0x0006beae, 0x0006c0ae, 0x0006c2ae, - 0x0006c4ae, 0x0006c6ae, 0x0006c8ae, 0x0006caae, - 0x0006ccae, 0x0006ceae, 0x0006d0ae, 0x0006d2ae, - 0x0006d4ae, 0x0006d6ae, 0x0006d8ae, 0x0006daae, - 0x0006dcae, 0x0006deae, 0x0006e0ae, 0x0006e2ae, - 0x0006e4ae, 0x0006e6ae, 0x0006e8ae, 0x0006eaae, - 0x0006ecae, 0x0006eeae, 0x0006f0ae, 0x0006f2ae, - 0x0006f4ae, 0x0006f6ae, 0x0006f8ae, 0x0006faae, - 0x0006fcae, 0x0006feae, 0x000700ae, 0x000702ae, - 0x000704ae, 0x000706ae, 0x000708ae, 0x00070aae, - 0x00070cae, 0x00070eae, 0x000710ae, 0x000712ae, - 0x000714ae, 0x000716ae, 0x000718ae, 0x00071aae, - 0x00071cae, 0x00071eae, 0x000720ae, 0x000722ae, - 0x000724ae, 0x000726ae, 0x000728ae, 0x00072aae, - 0x00072cae, 0x00072eae, 0x000730ae, 0x000732ae, - 0x000734ae, 0x000736ae, 0x000738ae, 0x00073aae, - 0x00073cae, 0x00073eae, 0x000740ae, 0x000742ae, - 0x000744ae, 0x000746ae, 0x000748ae, 0x00074aae, - 0x00074cae, 0x00074eae, 0x000750ae, 0x000752ae, - 0x000754ae, 0x000756ae, 0x000758ae, 0x00075aae, - 0x00075cae, 0x00075eae, 0x000760ae, 0x000762ae, - 0x000764ae, 0x000766ae, 0x000768ae, 0x00076aae, - 0x00076cae, 0x00076eae, 0x000770ae, 0x000772ae, - 0x000774ae, 0x000776ae, 0x000778ae, 0x00077aae, - 0x00077cae, 0x00077eae, 0x000780ae, 0x000782ae, - 0x000784ae, 0x000786ae, 0x000788ae, 0x00078aae, - 0x00078cae, 0x00078eae, 0x000790ae, 0x000792ae, - 0x000794ae, 0x000796ae, 0x000798ae, 0x00079aae, - 0x00079cae, 0x00079eae, 0x0007a0ae, 0x0007a2ae, - 0x0007a4ae, 0x0007a6ae, 0x0007a8ae, 0x0007aaae, - 0x0007acae, 0x0007aeae, 0x0007b0ae, 0x0007b2ae, - 0x0007b4ae, 0x0007b6ae, 0x0007b8ae, 0x0007baae, - 0x0007bcae, 0x0007beae, 0x0007c0ae, 0x0007c2ae, - 0x0007c4ae, 0x0007c6ae, 0x0007c8ae, 0x0007caae, - 0x0007ccae, 0x0007ceae, 0x0007d0ae, 0x0007d2ae, - 0x0007d4ae, 0x0007d6ae, 0x0007d8ae, 0x0007daae, - 0x0007dcae, 0x0007deae, 0x0007e0ae, 0x0007e2ae, - 0x0007e4ae, 0x0007e6ae, 0x0007e8ae, 0x0007eaae, - 0x0007ecae, 0x0007eeae, 0x0007f0ae, 0x0007f2ae, - 0x0007f4ae, 0x0007f6ae, 0x0007f8ae, 0x0007faae, - 0x0007fcae, 0x0007feae, 0x000001af, 0x000003af, - 0x000005af, 0x000007af, 0x000009af, 0x00000baf, - 0x00000daf, 0x00000faf, 0x000011af, 0x000013af, - 0x000015af, 0x000017af, 0x000019af, 0x00001baf, - 0x00001daf, 0x00001faf, 0x000021af, 0x000023af, - 0x000025af, 0x000027af, 0x000029af, 0x00002baf, - 0x00002daf, 0x00002faf, 0x000031af, 0x000033af, - 0x000035af, 0x000037af, 0x000039af, 0x00003baf, - 0x00003daf, 0x00003faf, 0x000041af, 0x000043af, - 0x000045af, 0x000047af, 0x000049af, 0x00004baf, - 0x00004daf, 0x00004faf, 0x000051af, 0x000053af, - 0x000055af, 0x000057af, 0x000059af, 0x00005baf, - 0x00005daf, 0x00005faf, 0x000061af, 0x000063af, - 0x000065af, 0x000067af, 0x000069af, 0x00006baf, - 0x00006daf, 0x00006faf, 0x000071af, 0x000073af, - 0x000075af, 0x000077af, 0x000079af, 0x00007baf, - 0x00007daf, 0x00007faf, 0x000081af, 0x000083af, - 0x000085af, 0x000087af, 0x000089af, 0x00008baf, - 0x00008daf, 0x00008faf, 0x000091af, 0x000093af, - 0x000095af, 0x000097af, 0x000099af, 0x00009baf, - 0x00009daf, 0x00009faf, 0x0000a1af, 0x0000a3af, - 0x0000a5af, 0x0000a7af, 0x0000a9af, 0x0000abaf, - 0x0000adaf, 0x0000afaf, 0x0000b1af, 0x0000b3af, - 0x0000b5af, 0x0000b7af, 0x0000b9af, 0x0000bbaf, - 0x0000bdaf, 0x0000bfaf, 0x0000c1af, 0x0000c3af, - 0x0000c5af, 0x0000c7af, 0x0000c9af, 0x0000cbaf, - 0x0000cdaf, 0x0000cfaf, 0x0000d1af, 0x0000d3af, - 0x0000d5af, 0x0000d7af, 0x0000d9af, 0x0000dbaf, - 0x0000ddaf, 0x0000dfaf, 0x0000e1af, 0x0000e3af, - 0x0000e5af, 0x0000e7af, 0x0000e9af, 0x0000ebaf, - 0x0000edaf, 0x0000efaf, 0x0000f1af, 0x0000f3af, - 0x0000f5af, 0x0000f7af, 0x0000f9af, 0x0000fbaf, - 0x0000fdaf, 0x0000ffaf, 0x000101af, 0x000103af, - 0x000105af, 0x000107af, 0x000109af, 0x00010baf, - 0x00010daf, 0x00010faf, 0x000111af, 0x000113af, - 0x000115af, 0x000117af, 0x000119af, 0x00011baf, - 0x00011daf, 0x00011faf, 0x000121af, 0x000123af, - 0x000125af, 0x000127af, 0x000129af, 0x00012baf, - 0x00012daf, 0x00012faf, 0x000131af, 0x000133af, - 0x000135af, 0x000137af, 0x000139af, 0x00013baf, - 0x00013daf, 0x00013faf, 0x000141af, 0x000143af, - 0x000145af, 0x000147af, 0x000149af, 0x00014baf, - 0x00014daf, 0x00014faf, 0x000151af, 0x000153af, - 0x000155af, 0x000157af, 0x000159af, 0x00015baf, - 0x00015daf, 0x00015faf, 0x000161af, 0x000163af, - 0x000165af, 0x000167af, 0x000169af, 0x00016baf, - 0x00016daf, 0x00016faf, 0x000171af, 0x000173af, - 0x000175af, 0x000177af, 0x000179af, 0x00017baf, - 0x00017daf, 0x00017faf, 0x000181af, 0x000183af, - 0x000185af, 0x000187af, 0x000189af, 0x00018baf, - 0x00018daf, 0x00018faf, 0x000191af, 0x000193af, - 0x000195af, 0x000197af, 0x000199af, 0x00019baf, - 0x00019daf, 0x00019faf, 0x0001a1af, 0x0001a3af, - 0x0001a5af, 0x0001a7af, 0x0001a9af, 0x0001abaf, - 0x0001adaf, 0x0001afaf, 0x0001b1af, 0x0001b3af, - 0x0001b5af, 0x0001b7af, 0x0001b9af, 0x0001bbaf, - 0x0001bdaf, 0x0001bfaf, 0x0001c1af, 0x0001c3af, - 0x0001c5af, 0x0001c7af, 0x0001c9af, 0x0001cbaf, - 0x0001cdaf, 0x0001cfaf, 0x0001d1af, 0x0001d3af, - 0x0001d5af, 0x0001d7af, 0x0001d9af, 0x0001dbaf, - 0x0001ddaf, 0x0001dfaf, 0x0001e1af, 0x0001e3af, - 0x0001e5af, 0x0001e7af, 0x0001e9af, 0x0001ebaf, - 0x0001edaf, 0x0001efaf, 0x0001f1af, 0x0001f3af, - 0x0001f5af, 0x0001f7af, 0x0001f9af, 0x0001fbaf, - 0x0001fdaf, 0x0001ffaf, 0x000201af, 0x000203af, - 0x000205af, 0x000207af, 0x000209af, 0x00020baf, - 0x00020daf, 0x00020faf, 0x000211af, 0x000213af, - 0x000215af, 0x000217af, 0x000219af, 0x00021baf, - 0x00021daf, 0x00021faf, 0x000221af, 0x000223af, - 0x000225af, 0x000227af, 0x000229af, 0x00022baf, - 0x00022daf, 0x00022faf, 0x000231af, 0x000233af, - 0x000235af, 0x000237af, 0x000239af, 0x00023baf, - 0x00023daf, 0x00023faf, 0x000241af, 0x000243af, - 0x000245af, 0x000247af, 0x000249af, 0x00024baf, - 0x00024daf, 0x00024faf, 0x000251af, 0x000253af, - 0x000255af, 0x000257af, 0x000259af, 0x00025baf, - 0x00025daf, 0x00025faf, 0x000261af, 0x000263af, - 0x000265af, 0x000267af, 0x000269af, 0x00026baf, - 0x00026daf, 0x00026faf, 0x000271af, 0x000273af, - 0x000275af, 0x000277af, 0x000279af, 0x00027baf, - 0x00027daf, 0x00027faf, 0x000281af, 0x000283af, - 0x000285af, 0x000287af, 0x000289af, 0x00028baf, - 0x00028daf, 0x00028faf, 0x000291af, 0x000293af, - 0x000295af, 0x000297af, 0x000299af, 0x00029baf, - 0x00029daf, 0x00029faf, 0x0002a1af, 0x0002a3af, - 0x0002a5af, 0x0002a7af, 0x0002a9af, 0x0002abaf, - 0x0002adaf, 0x0002afaf, 0x0002b1af, 0x0002b3af, - 0x0002b5af, 0x0002b7af, 0x0002b9af, 0x0002bbaf, - 0x0002bdaf, 0x0002bfaf, 0x0002c1af, 0x0002c3af, - 0x0002c5af, 0x0002c7af, 0x0002c9af, 0x0002cbaf, - 0x0002cdaf, 0x0002cfaf, 0x0002d1af, 0x0002d3af, - 0x0002d5af, 0x0002d7af, 0x0002d9af, 0x0002dbaf, - 0x0002ddaf, 0x0002dfaf, 0x0002e1af, 0x0002e3af, - 0x0002e5af, 0x0002e7af, 0x0002e9af, 0x0002ebaf, - 0x0002edaf, 0x0002efaf, 0x0002f1af, 0x0002f3af, - 0x0002f5af, 0x0002f7af, 0x0002f9af, 0x0002fbaf, - 0x0002fdaf, 0x0002ffaf, 0x000301af, 0x000303af, - 0x000305af, 0x000307af, 0x000309af, 0x00030baf, - 0x00030daf, 0x00030faf, 0x000311af, 0x000313af, - 0x000315af, 0x000317af, 0x000319af, 0x00031baf, - 0x00031daf, 0x00031faf, 0x000321af, 0x000323af, - 0x000325af, 0x000327af, 0x000329af, 0x00032baf, - 0x00032daf, 0x00032faf, 0x000331af, 0x000333af, - 0x000335af, 0x000337af, 0x000339af, 0x00033baf, - 0x00033daf, 0x00033faf, 0x000341af, 0x000343af, - 0x000345af, 0x000347af, 0x000349af, 0x00034baf, - 0x00034daf, 0x00034faf, 0x000351af, 0x000353af, - 0x000355af, 0x000357af, 0x000359af, 0x00035baf, - 0x00035daf, 0x00035faf, 0x000361af, 0x000363af, - 0x000365af, 0x000367af, 0x000369af, 0x00036baf, - 0x00036daf, 0x00036faf, 0x000371af, 0x000373af, - 0x000375af, 0x000377af, 0x000379af, 0x00037baf, - 0x00037daf, 0x00037faf, 0x000381af, 0x000383af, - 0x000385af, 0x000387af, 0x000389af, 0x00038baf, - 0x00038daf, 0x00038faf, 0x000391af, 0x000393af, - 0x000395af, 0x000397af, 0x000399af, 0x00039baf, - 0x00039daf, 0x00039faf, 0x0003a1af, 0x0003a3af, - 0x0003a5af, 0x0003a7af, 0x0003a9af, 0x0003abaf, - 0x0003adaf, 0x0003afaf, 0x0003b1af, 0x0003b3af, - 0x0003b5af, 0x0003b7af, 0x0003b9af, 0x0003bbaf, - 0x0003bdaf, 0x0003bfaf, 0x0003c1af, 0x0003c3af, - 0x0003c5af, 0x0003c7af, 0x0003c9af, 0x0003cbaf, - 0x0003cdaf, 0x0003cfaf, 0x0003d1af, 0x0003d3af, - 0x0003d5af, 0x0003d7af, 0x0003d9af, 0x0003dbaf, - 0x0003ddaf, 0x0003dfaf, 0x0003e1af, 0x0003e3af, - 0x0003e5af, 0x0003e7af, 0x0003e9af, 0x0003ebaf, - 0x0003edaf, 0x0003efaf, 0x0003f1af, 0x0003f3af, - 0x0003f5af, 0x0003f7af, 0x0003f9af, 0x0003fbaf, - 0x0003fdaf, 0x0003ffaf, 0x000401af, 0x000403af, - 0x000405af, 0x000407af, 0x000409af, 0x00040baf, - 0x00040daf, 0x00040faf, 0x000411af, 0x000413af, - 0x000415af, 0x000417af, 0x000419af, 0x00041baf, - 0x00041daf, 0x00041faf, 0x000421af, 0x000423af, - 0x000425af, 0x000427af, 0x000429af, 0x00042baf, - 0x00042daf, 0x00042faf, 0x000431af, 0x000433af, - 0x000435af, 0x000437af, 0x000439af, 0x00043baf, - 0x00043daf, 0x00043faf, 0x000441af, 0x000443af, - 0x000445af, 0x000447af, 0x000449af, 0x00044baf, - 0x00044daf, 0x00044faf, 0x000451af, 0x000453af, - 0x000455af, 0x000457af, 0x000459af, 0x00045baf, - 0x00045daf, 0x00045faf, 0x000461af, 0x000463af, - 0x000465af, 0x000467af, 0x000469af, 0x00046baf, - 0x00046daf, 0x00046faf, 0x000471af, 0x000473af, - 0x000475af, 0x000477af, 0x000479af, 0x00047baf, - 0x00047daf, 0x00047faf, 0x000481af, 0x000483af, - 0x000485af, 0x000487af, 0x000489af, 0x00048baf, - 0x00048daf, 0x00048faf, 0x000491af, 0x000493af, - 0x000495af, 0x000497af, 0x000499af, 0x00049baf, - 0x00049daf, 0x00049faf, 0x0004a1af, 0x0004a3af, - 0x0004a5af, 0x0004a7af, 0x0004a9af, 0x0004abaf, - 0x0004adaf, 0x0004afaf, 0x0004b1af, 0x0004b3af, - 0x0004b5af, 0x0004b7af, 0x0004b9af, 0x0004bbaf, - 0x0004bdaf, 0x0004bfaf, 0x0004c1af, 0x0004c3af, - 0x0004c5af, 0x0004c7af, 0x0004c9af, 0x0004cbaf, - 0x0004cdaf, 0x0004cfaf, 0x0004d1af, 0x0004d3af, - 0x0004d5af, 0x0004d7af, 0x0004d9af, 0x0004dbaf, - 0x0004ddaf, 0x0004dfaf, 0x0004e1af, 0x0004e3af, - 0x0004e5af, 0x0004e7af, 0x0004e9af, 0x0004ebaf, - 0x0004edaf, 0x0004efaf, 0x0004f1af, 0x0004f3af, - 0x0004f5af, 0x0004f7af, 0x0004f9af, 0x0004fbaf, - 0x0004fdaf, 0x0004ffaf, 0x000501af, 0x000503af, - 0x000505af, 0x000507af, 0x000509af, 0x00050baf, - 0x00050daf, 0x00050faf, 0x000511af, 0x000513af, - 0x000515af, 0x000517af, 0x000519af, 0x00051baf, - 0x00051daf, 0x00051faf, 0x000521af, 0x000523af, - 0x000525af, 0x000527af, 0x000529af, 0x00052baf, - 0x00052daf, 0x00052faf, 0x000531af, 0x000533af, - 0x000535af, 0x000537af, 0x000539af, 0x00053baf, - 0x00053daf, 0x00053faf, 0x000541af, 0x000543af, - 0x000545af, 0x000547af, 0x000549af, 0x00054baf, - 0x00054daf, 0x00054faf, 0x000551af, 0x000553af, - 0x000555af, 0x000557af, 0x000559af, 0x00055baf, - 0x00055daf, 0x00055faf, 0x000561af, 0x000563af, - 0x000565af, 0x000567af, 0x000569af, 0x00056baf, - 0x00056daf, 0x00056faf, 0x000571af, 0x000573af, - 0x000575af, 0x000577af, 0x000579af, 0x00057baf, - 0x00057daf, 0x00057faf, 0x000581af, 0x000583af, - 0x000585af, 0x000587af, 0x000589af, 0x00058baf, - 0x00058daf, 0x00058faf, 0x000591af, 0x000593af, - 0x000595af, 0x000597af, 0x000599af, 0x00059baf, - 0x00059daf, 0x00059faf, 0x0005a1af, 0x0005a3af, - 0x0005a5af, 0x0005a7af, 0x0005a9af, 0x0005abaf, - 0x0005adaf, 0x0005afaf, 0x0005b1af, 0x0005b3af, - 0x0005b5af, 0x0005b7af, 0x0005b9af, 0x0005bbaf, - 0x0005bdaf, 0x0005bfaf, 0x0005c1af, 0x0005c3af, - 0x0005c5af, 0x0005c7af, 0x0005c9af, 0x0005cbaf, - 0x0005cdaf, 0x0005cfaf, 0x0005d1af, 0x0005d3af, - 0x0005d5af, 0x0005d7af, 0x0005d9af, 0x0005dbaf, - 0x0005ddaf, 0x0005dfaf, 0x0005e1af, 0x0005e3af, - 0x0005e5af, 0x0005e7af, 0x0005e9af, 0x0005ebaf, - 0x0005edaf, 0x0005efaf, 0x0005f1af, 0x0005f3af, - 0x0005f5af, 0x0005f7af, 0x0005f9af, 0x0005fbaf, - 0x0005fdaf, 0x0005ffaf, 0x000601af, 0x000603af, - 0x000605af, 0x000607af, 0x000609af, 0x00060baf, - 0x00060daf, 0x00060faf, 0x000611af, 0x000613af, - 0x000615af, 0x000617af, 0x000619af, 0x00061baf, - 0x00061daf, 0x00061faf, 0x000621af, 0x000623af, - 0x000625af, 0x000627af, 0x000629af, 0x00062baf, - 0x00062daf, 0x00062faf, 0x000631af, 0x000633af, - 0x000635af, 0x000637af, 0x000639af, 0x00063baf, - 0x00063daf, 0x00063faf, 0x000641af, 0x000643af, - 0x000645af, 0x000647af, 0x000649af, 0x00064baf, - 0x00064daf, 0x00064faf, 0x000651af, 0x000653af, - 0x000655af, 0x000657af, 0x000659af, 0x00065baf, - 0x00065daf, 0x00065faf, 0x000661af, 0x000663af, - 0x000665af, 0x000667af, 0x000669af, 0x00066baf, - 0x00066daf, 0x00066faf, 0x000671af, 0x000673af, - 0x000675af, 0x000677af, 0x000679af, 0x00067baf, - 0x00067daf, 0x00067faf, 0x000681af, 0x000683af, - 0x000685af, 0x000687af, 0x000689af, 0x00068baf, - 0x00068daf, 0x00068faf, 0x000691af, 0x000693af, - 0x000695af, 0x000697af, 0x000699af, 0x00069baf, - 0x00069daf, 0x00069faf, 0x0006a1af, 0x0006a3af, - 0x0006a5af, 0x0006a7af, 0x0006a9af, 0x0006abaf, - 0x0006adaf, 0x0006afaf, 0x0006b1af, 0x0006b3af, - 0x0006b5af, 0x0006b7af, 0x0006b9af, 0x0006bbaf, - 0x0006bdaf, 0x0006bfaf, 0x0006c1af, 0x0006c3af, - 0x0006c5af, 0x0006c7af, 0x0006c9af, 0x0006cbaf, - 0x0006cdaf, 0x0006cfaf, 0x0006d1af, 0x0006d3af, - 0x0006d5af, 0x0006d7af, 0x0006d9af, 0x0006dbaf, - 0x0006ddaf, 0x0006dfaf, 0x0006e1af, 0x0006e3af, - 0x0006e5af, 0x0006e7af, 0x0006e9af, 0x0006ebaf, - 0x0006edaf, 0x0006efaf, 0x0006f1af, 0x0006f3af, - 0x0006f5af, 0x0006f7af, 0x0006f9af, 0x0006fbaf, - 0x0006fdaf, 0x0006ffaf, 0x000701af, 0x000703af, - 0x000705af, 0x000707af, 0x000709af, 0x00070baf, - 0x00070daf, 0x00070faf, 0x000711af, 0x000713af, - 0x000715af, 0x000717af, 0x000719af, 0x00071baf, - 0x00071daf, 0x00071faf, 0x000721af, 0x000723af, - 0x000725af, 0x000727af, 0x000729af, 0x00072baf, - 0x00072daf, 0x00072faf, 0x000731af, 0x000733af, - 0x000735af, 0x000737af, 0x000739af, 0x00073baf, - 0x00073daf, 0x00073faf, 0x000741af, 0x000743af, - 0x000745af, 0x000747af, 0x000749af, 0x00074baf, - 0x00074daf, 0x00074faf, 0x000751af, 0x000753af, - 0x000755af, 0x000757af, 0x000759af, 0x00075baf, - 0x00075daf, 0x00075faf, 0x000761af, 0x000763af, - 0x000765af, 0x000767af, 0x000769af, 0x00076baf, - 0x00076daf, 0x00076faf, 0x000771af, 0x000773af, - 0x000775af, 0x000777af, 0x000779af, 0x00077baf, - 0x00077daf, 0x00077faf, 0x000781af, 0x000783af, - 0x000785af, 0x000787af, 0x000789af, 0x00078baf, - 0x00078daf, 0x00078faf, 0x000791af, 0x000793af, - 0x000795af, 0x000797af, 0x000799af, 0x00079baf, - 0x00079daf, 0x00079faf, 0x0007a1af, 0x0007a3af, - 0x0007a5af, 0x0007a7af, 0x0007a9af, 0x0007abaf, - 0x0007adaf, 0x0007afaf, 0x0007b1af, 0x0007b3af, - 0x0007b5af, 0x0007b7af, 0x0007b9af, 0x0007bbaf, - 0x0007bdaf, 0x0007bfaf, 0x0007c1af, 0x0007c3af, - 0x0007c5af, 0x0007c7af, 0x0007c9af, 0x0007cbaf, - 0x0007cdaf, 0x0007cfaf, 0x0007d1af, 0x0007d3af, - 0x0007d5af, 0x0007d7af, 0x0007d9af, 0x0007dbaf, - 0x0007ddaf, 0x0007dfaf, 0x0007e1af, 0x0007e3af, - 0x0007e5af, 0x0007e7af, 0x0007e9af, 0x0007ebaf, - 0x0007edaf, 0x0007efaf, 0x0007f1af, 0x0007f3af, - 0x0007f5af, 0x0007f7af, 0x0007f9af, 0x0007fbaf, - 0x0007fdaf, 0x0007ffaf, 0x000801af, 0x000803af, - 0x000805af, 0x000807af, 0x000809af, 0x00080baf, - 0x00080daf, 0x00080faf, 0x000811af, 0x000813af, - 0x000815af, 0x000817af, 0x000819af, 0x00081baf, - 0x00081daf, 0x00081faf, 0x000821af, 0x000823af, - 0x000825af, 0x000827af, 0x000829af, 0x00082baf, - 0x00082daf, 0x00082faf, 0x000831af, 0x000833af, - 0x000835af, 0x000837af, 0x000839af, 0x00083baf, - 0x00083daf, 0x00083faf, 0x000841af, 0x000843af, - 0x000845af, 0x000847af, 0x000849af, 0x00084baf, - 0x00084daf, 0x00084faf, 0x000851af, 0x000853af, - 0x000855af, 0x000857af, 0x000859af, 0x00085baf, - 0x00085daf, 0x00085faf, 0x000861af, 0x000863af, - 0x000865af, 0x000867af, 0x000869af, 0x00086baf, - 0x00086daf, 0x00086faf, 0x000871af, 0x000873af, - 0x000875af, 0x000877af, 0x000879af, 0x00087baf, - 0x00087daf, 0x00087faf, 0x000881af, 0x000883af, - 0x000885af, 0x000887af, 0x000889af, 0x00088baf, - 0x00088daf, 0x00088faf, 0x000891af, 0x000893af, - 0x000895af, 0x000897af, 0x000899af, 0x00089baf, - 0x00089daf, 0x00089faf, 0x0008a1af, 0x0008a3af, - 0x0008a5af, 0x0008a7af, 0x0008a9af, 0x0008abaf, - 0x0008adaf, 0x0008afaf, 0x0008b1af, 0x0008b3af, - 0x0008b5af, 0x0008b7af, 0x0008b9af, 0x0008bbaf, - 0x0008bdaf, 0x0008bfaf, 0x0008c1af, 0x0008c3af, - 0x0008c5af, 0x0008c7af, 0x0008c9af, 0x0008cbaf, - 0x0008cdaf, 0x0008cfaf, 0x0008d1af, 0x0008d3af, - 0x0008d5af, 0x0008d7af, 0x0008d9af, 0x0008dbaf, - 0x0008ddaf, 0x0008dfaf, 0x0008e1af, 0x0008e3af, - 0x0008e5af, 0x0008e7af, 0x0008e9af, 0x0008ebaf, - 0x0008edaf, 0x0008efaf, 0x0008f1af, 0x0008f3af, - 0x0008f5af, 0x0008f7af, 0x0008f9af, 0x0008fbaf, - 0x0008fdaf, 0x0008ffaf, 0x000901af, 0x000903af, - 0x000905af, 0x000907af, 0x000909af, 0x00090baf, - 0x00090daf, 0x00090faf, 0x000911af, 0x000913af, - 0x000915af, 0x000917af, 0x000919af, 0x00091baf, - 0x00091daf, 0x00091faf, 0x000921af, 0x000923af, - 0x000925af, 0x000927af, 0x000929af, 0x00092baf, - 0x00092daf, 0x00092faf, 0x000931af, 0x000933af, - 0x000935af, 0x000937af, 0x000939af, 0x00093baf, - 0x00093daf, 0x00093faf, 0x000941af, 0x000943af, - 0x000945af, 0x000947af, 0x000949af, 0x00094baf, - 0x00094daf, 0x00094faf, 0x000951af, 0x000953af, - 0x000955af, 0x000957af, 0x000959af, 0x00095baf, - 0x00095daf, 0x00095faf, 0x000961af, 0x000963af, - 0x000965af, 0x000967af, 0x000969af, 0x00096baf, - 0x00096daf, 0x00096faf, 0x000971af, 0x000973af, - 0x000975af, 0x000977af, 0x000979af, 0x00097baf, - 0x00097daf, 0x00097faf, 0x000981af, 0x000983af, - 0x000985af, 0x000987af, 0x000989af, 0x00098baf, - 0x00098daf, 0x00098faf, 0x000991af, 0x000993af, - 0x000995af, 0x000997af, 0x000999af, 0x00099baf, - 0x00099daf, 0x00099faf, 0x0009a1af, 0x0009a3af, - 0x0009a5af, 0x0009a7af, 0x0009a9af, 0x0009abaf, - 0x0009adaf, 0x0009afaf, 0x0009b1af, 0x0009b3af, - 0x0009b5af, 0x0009b7af, 0x0009b9af, 0x0009bbaf, - 0x0009bdaf, 0x0009bfaf, 0x0009c1af, 0x0009c3af, - 0x0009c5af, 0x0009c7af, 0x0009c9af, 0x0009cbaf, - 0x0009cdaf, 0x0009cfaf, 0x0009d1af, 0x0009d3af, - 0x0009d5af, 0x0009d7af, 0x0009d9af, 0x0009dbaf, - 0x0009ddaf, 0x0009dfaf, 0x0009e1af, 0x0009e3af, - 0x0009e5af, 0x0009e7af, 0x0009e9af, 0x0009ebaf, - 0x0009edaf, 0x0009efaf, 0x0009f1af, 0x0009f3af, - 0x0009f5af, 0x0009f7af, 0x0009f9af, 0x0009fbaf, - 0x0009fdaf, 0x0009ffaf, 0x000a01af, 0x000a03af, - 0x000a05af, 0x000a07af, 0x000a09af, 0x000a0baf, - 0x000a0daf, 0x000a0faf, 0x000a11af, 0x000a13af, - 0x000a15af, 0x000a17af, 0x000a19af, 0x000a1baf, - 0x000a1daf, 0x000a1faf, 0x000a21af, 0x000a23af, - 0x000a25af, 0x000a27af, 0x000a29af, 0x000a2baf, - 0x000a2daf, 0x000a2faf, 0x000a31af, 0x000a33af, - 0x000a35af, 0x000a37af, 0x000a39af, 0x000a3baf, - 0x000a3daf, 0x000a3faf, 0x000a41af, 0x000a43af, - 0x000a45af, 0x000a47af, 0x000a49af, 0x000a4baf, - 0x000a4daf, 0x000a4faf, 0x000a51af, 0x000a53af, - 0x000a55af, 0x000a57af, 0x000a59af, 0x000a5baf, - 0x000a5daf, 0x000a5faf, 0x000a61af, 0x000a63af, - 0x000a65af, 0x000a67af, 0x000a69af, 0x000a6baf, - 0x000a6daf, 0x000a6faf, 0x000a71af, 0x000a73af, - 0x000a75af, 0x000a77af, 0x000a79af, 0x000a7baf, - 0x000a7daf, 0x000a7faf, 0x000a81af, 0x000a83af, - 0x000a85af, 0x000a87af, 0x000a89af, 0x000a8baf, - 0x000a8daf, 0x000a8faf, 0x000a91af, 0x000a93af, - 0x000a95af, 0x000a97af, 0x000a99af, 0x000a9baf, - 0x000a9daf, 0x000a9faf, 0x000aa1af, 0x000aa3af, - 0x000aa5af, 0x000aa7af, 0x000aa9af, 0x000aabaf, - 0x000aadaf, 0x000aafaf, 0x000ab1af, 0x000ab3af, - 0x000ab5af, 0x000ab7af, 0x000ab9af, 0x000abbaf, - 0x000abdaf, 0x000abfaf, 0x000ac1af, 0x000ac3af, - 0x000ac5af, 0x000ac7af, 0x000ac9af, 0x000acbaf, - 0x000acdaf, 0x000acfaf, 0x000ad1af, 0x000ad3af, - 0x000ad5af, 0x000ad7af, 0x000ad9af, 0x000adbaf, - 0x000addaf, 0x000adfaf, 0x000ae1af, 0x000ae3af, - 0x000ae5af, 0x000ae7af, 0x000ae9af, 0x000aebaf, - 0x000aedaf, 0x000aefaf, 0x000af1af, 0x000af3af, - 0x000af5af, 0x000af7af, 0x000af9af, 0x000afbaf, - 0x000afdaf, 0x000affaf, 0x000b01af, 0x000b03af, - 0x000b05af, 0x000b07af, 0x000b09af, 0x000b0baf, - 0x000b0daf, 0x000b0faf, 0x000b11af, 0x000b13af, - 0x000b15af, 0x000b17af, 0x000b19af, 0x000b1baf, - 0x000b1daf, 0x000b1faf, 0x000b21af, 0x000b23af, - 0x000b25af, 0x000b27af, 0x000b29af, 0x000b2baf, - 0x000b2daf, 0x000b2faf, 0x000b31af, 0x000b33af, - 0x000b35af, 0x000b37af, 0x000b39af, 0x000b3baf, - 0x000b3daf, 0x000b3faf, 0x000b41af, 0x000b43af, - 0x000b45af, 0x000b47af, 0x000b49af, 0x000b4baf, - 0x000b4daf, 0x000b4faf, 0x000b51af, 0x000b53af, - 0x000b55af, 0x000b57af, 0x000b59af, 0x000b5baf, - 0x000b5daf, 0x000b5faf, 0x000b61af, 0x000b63af, - 0x000b65af, 0x000b67af, 0x000b69af, 0x000b6baf, - 0x000b6daf, 0x000b6faf, 0x000b71af, 0x000b73af, - 0x000b75af, 0x000b77af, 0x000b79af, 0x000b7baf, - 0x000b7daf, 0x000b7faf, 0x000b81af, 0x000b83af, - 0x000b85af, 0x000b87af, 0x000b89af, 0x000b8baf, - 0x000b8daf, 0x000b8faf, 0x000b91af, 0x000b93af, - 0x000b95af, 0x000b97af, 0x000b99af, 0x000b9baf, - 0x000b9daf, 0x000b9faf, 0x000ba1af, 0x000ba3af, - 0x000ba5af, 0x000ba7af, 0x000ba9af, 0x000babaf, - 0x000badaf, 0x000bafaf, 0x000bb1af, 0x000bb3af, - 0x000bb5af, 0x000bb7af, 0x000bb9af, 0x000bbbaf, - 0x000bbdaf, 0x000bbfaf, 0x000bc1af, 0x000bc3af, - 0x000bc5af, 0x000bc7af, 0x000bc9af, 0x000bcbaf, - 0x000bcdaf, 0x000bcfaf, 0x000bd1af, 0x000bd3af, - 0x000bd5af, 0x000bd7af, 0x000bd9af, 0x000bdbaf, - 0x000bddaf, 0x000bdfaf, 0x000be1af, 0x000be3af, - 0x000be5af, 0x000be7af, 0x000be9af, 0x000bebaf, - 0x000bedaf, 0x000befaf, 0x000bf1af, 0x000bf3af, - 0x000bf5af, 0x000bf7af, 0x000bf9af, 0x000bfbaf, - 0x000bfdaf, 0x000bffaf, 0x000c01af, 0x000c03af, - 0x000c05af, 0x000c07af, 0x000c09af, 0x000c0baf, - 0x000c0daf, 0x000c0faf, 0x000c11af, 0x000c13af, - 0x000c15af, 0x000c17af, 0x000c19af, 0x000c1baf, - 0x000c1daf, 0x000c1faf, 0x000c21af, 0x000c23af, - 0x000c25af, 0x000c27af, 0x000c29af, 0x000c2baf, - 0x000c2daf, 0x000c2faf, 0x000c31af, 0x000c33af, - 0x000c35af, 0x000c37af, 0x000c39af, 0x000c3baf, - 0x000c3daf, 0x000c3faf, 0x000c41af, 0x000c43af, - 0x000c45af, 0x000c47af, 0x000c49af, 0x000c4baf, - 0x000c4daf, 0x000c4faf, 0x000c51af, 0x000c53af, - 0x000c55af, 0x000c57af, 0x000c59af, 0x000c5baf, - 0x000c5daf, 0x000c5faf, 0x000c61af, 0x000c63af, - 0x000c65af, 0x000c67af, 0x000c69af, 0x000c6baf, - 0x000c6daf, 0x000c6faf, 0x000c71af, 0x000c73af, - 0x000c75af, 0x000c77af, 0x000c79af, 0x000c7baf, - 0x000c7daf, 0x000c7faf, 0x000c81af, 0x000c83af, - 0x000c85af, 0x000c87af, 0x000c89af, 0x000c8baf, - 0x000c8daf, 0x000c8faf, 0x000c91af, 0x000c93af, - 0x000c95af, 0x000c97af, 0x000c99af, 0x000c9baf, - 0x000c9daf, 0x000c9faf, 0x000ca1af, 0x000ca3af, - 0x000ca5af, 0x000ca7af, 0x000ca9af, 0x000cabaf, - 0x000cadaf, 0x000cafaf, 0x000cb1af, 0x000cb3af, - 0x000cb5af, 0x000cb7af, 0x000cb9af, 0x000cbbaf, - 0x000cbdaf, 0x000cbfaf, 0x000cc1af, 0x000cc3af, - 0x000cc5af, 0x000cc7af, 0x000cc9af, 0x000ccbaf, - 0x000ccdaf, 0x000ccfaf, 0x000cd1af, 0x000cd3af, - 0x000cd5af, 0x000cd7af, 0x000cd9af, 0x000cdbaf, - 0x000cddaf, 0x000cdfaf, 0x000ce1af, 0x000ce3af, - 0x000ce5af, 0x000ce7af, 0x000ce9af, 0x000cebaf, - 0x000cedaf, 0x000cefaf, 0x000cf1af, 0x000cf3af, - 0x000cf5af, 0x000cf7af, 0x000cf9af, 0x000cfbaf, - 0x000cfdaf, 0x000cffaf, 0x000d01af, 0x000d03af, - 0x000d05af, 0x000d07af, 0x000d09af, 0x000d0baf, - 0x000d0daf, 0x000d0faf, 0x000d11af, 0x000d13af, - 0x000d15af, 0x000d17af, 0x000d19af, 0x000d1baf, - 0x000d1daf, 0x000d1faf, 0x000d21af, 0x000d23af, - 0x000d25af, 0x000d27af, 0x000d29af, 0x000d2baf, - 0x000d2daf, 0x000d2faf, 0x000d31af, 0x000d33af, - 0x000d35af, 0x000d37af, 0x000d39af, 0x000d3baf, - 0x000d3daf, 0x000d3faf, 0x000d41af, 0x000d43af, - 0x000d45af, 0x000d47af, 0x000d49af, 0x000d4baf, - 0x000d4daf, 0x000d4faf, 0x000d51af, 0x000d53af, - 0x000d55af, 0x000d57af, 0x000d59af, 0x000d5baf, - 0x000d5daf, 0x000d5faf, 0x000d61af, 0x000d63af, - 0x000d65af, 0x000d67af, 0x000d69af, 0x000d6baf, - 0x000d6daf, 0x000d6faf, 0x000d71af, 0x000d73af, - 0x000d75af, 0x000d77af, 0x000d79af, 0x000d7baf, - 0x000d7daf, 0x000d7faf, 0x000d81af, 0x000d83af, - 0x000d85af, 0x000d87af, 0x000d89af, 0x000d8baf, - 0x000d8daf, 0x000d8faf, 0x000d91af, 0x000d93af, - 0x000d95af, 0x000d97af, 0x000d99af, 0x000d9baf, - 0x000d9daf, 0x000d9faf, 0x000da1af, 0x000da3af, - 0x000da5af, 0x000da7af, 0x000da9af, 0x000dabaf, - 0x000dadaf, 0x000dafaf, 0x000db1af, 0x000db3af, - 0x000db5af, 0x000db7af, 0x000db9af, 0x000dbbaf, - 0x000dbdaf, 0x000dbfaf, 0x000dc1af, 0x000dc3af, - 0x000dc5af, 0x000dc7af, 0x000dc9af, 0x000dcbaf, - 0x000dcdaf, 0x000dcfaf, 0x000dd1af, 0x000dd3af, - 0x000dd5af, 0x000dd7af, 0x000dd9af, 0x000ddbaf, - 0x000dddaf, 0x000ddfaf, 0x000de1af, 0x000de3af, - 0x000de5af, 0x000de7af, 0x000de9af, 0x000debaf, - 0x000dedaf, 0x000defaf, 0x000df1af, 0x000df3af, - 0x000df5af, 0x000df7af, 0x000df9af, 0x000dfbaf, - 0x000dfdaf, 0x000dffaf, 0x000e01af, 0x000e03af, - 0x000e05af, 0x000e07af, 0x000e09af, 0x000e0baf, - 0x000e0daf, 0x000e0faf, 0x000e11af, 0x000e13af, - 0x000e15af, 0x000e17af, 0x000e19af, 0x000e1baf, - 0x000e1daf, 0x000e1faf, 0x000e21af, 0x000e23af, - 0x000e25af, 0x000e27af, 0x000e29af, 0x000e2baf, - 0x000e2daf, 0x000e2faf, 0x000e31af, 0x000e33af, - 0x000e35af, 0x000e37af, 0x000e39af, 0x000e3baf, - 0x000e3daf, 0x000e3faf, 0x000e41af, 0x000e43af, - 0x000e45af, 0x000e47af, 0x000e49af, 0x000e4baf, - 0x000e4daf, 0x000e4faf, 0x000e51af, 0x000e53af, - 0x000e55af, 0x000e57af, 0x000e59af, 0x000e5baf, - 0x000e5daf, 0x000e5faf, 0x000e61af, 0x000e63af, - 0x000e65af, 0x000e67af, 0x000e69af, 0x000e6baf, - 0x000e6daf, 0x000e6faf, 0x000e71af, 0x000e73af, - 0x000e75af, 0x000e77af, 0x000e79af, 0x000e7baf, - 0x000e7daf, 0x000e7faf, 0x000e81af, 0x000e83af, - 0x000e85af, 0x000e87af, 0x000e89af, 0x000e8baf, - 0x000e8daf, 0x000e8faf, 0x000e91af, 0x000e93af, - 0x000e95af, 0x000e97af, 0x000e99af, 0x000e9baf, - 0x000e9daf, 0x000e9faf, 0x000ea1af, 0x000ea3af, - 0x000ea5af, 0x000ea7af, 0x000ea9af, 0x000eabaf, - 0x000eadaf, 0x000eafaf, 0x000eb1af, 0x000eb3af, - 0x000eb5af, 0x000eb7af, 0x000eb9af, 0x000ebbaf, - 0x000ebdaf, 0x000ebfaf, 0x000ec1af, 0x000ec3af, - 0x000ec5af, 0x000ec7af, 0x000ec9af, 0x000ecbaf, - 0x000ecdaf, 0x000ecfaf, 0x000ed1af, 0x000ed3af, - 0x000ed5af, 0x000ed7af, 0x000ed9af, 0x000edbaf, - 0x000eddaf, 0x000edfaf, 0x000ee1af, 0x000ee3af, - 0x000ee5af, 0x000ee7af, 0x000ee9af, 0x000eebaf, - 0x000eedaf, 0x000eefaf, 0x000ef1af, 0x000ef3af, - 0x000ef5af, 0x000ef7af, 0x000ef9af, 0x000efbaf, - 0x000efdaf, 0x000effaf, 0x000f01af, 0x000f03af, - 0x000f05af, 0x000f07af, 0x000f09af, 0x000f0baf, - 0x000f0daf, 0x000f0faf, 0x000f11af, 0x000f13af, - 0x000f15af, 0x000f17af, 0x000f19af, 0x000f1baf, - 0x000f1daf, 0x000f1faf, 0x000f21af, 0x000f23af, - 0x000f25af, 0x000f27af, 0x000f29af, 0x000f2baf, - 0x000f2daf, 0x000f2faf, 0x000f31af, 0x000f33af, - 0x000f35af, 0x000f37af, 0x000f39af, 0x000f3baf, - 0x000f3daf, 0x000f3faf, 0x000f41af, 0x000f43af, - 0x000f45af, 0x000f47af, 0x000f49af, 0x000f4baf, - 0x000f4daf, 0x000f4faf, 0x000f51af, 0x000f53af, - 0x000f55af, 0x000f57af, 0x000f59af, 0x000f5baf, - 0x000f5daf, 0x000f5faf, 0x000f61af, 0x000f63af, - 0x000f65af, 0x000f67af, 0x000f69af, 0x000f6baf, - 0x000f6daf, 0x000f6faf, 0x000f71af, 0x000f73af, - 0x000f75af, 0x000f77af, 0x000f79af, 0x000f7baf, - 0x000f7daf, 0x000f7faf, 0x000f81af, 0x000f83af, - 0x000f85af, 0x000f87af, 0x000f89af, 0x000f8baf, - 0x000f8daf, 0x000f8faf, 0x000f91af, 0x000f93af, - 0x000f95af, 0x000f97af, 0x000f99af, 0x000f9baf, - 0x000f9daf, 0x000f9faf, 0x000fa1af, 0x000fa3af, - 0x000fa5af, 0x000fa7af, 0x000fa9af, 0x000fabaf, - 0x000fadaf, 0x000fafaf, 0x000fb1af, 0x000fb3af, - 0x000fb5af, 0x000fb7af, 0x000fb9af, 0x000fbbaf, - 0x000fbdaf, 0x000fbfaf, 0x000fc1af, 0x000fc3af, - 0x000fc5af, 0x000fc7af, 0x000fc9af, 0x000fcbaf, - 0x000fcdaf, 0x000fcfaf, 0x000fd1af, 0x000fd3af, - 0x000fd5af, 0x000fd7af, 0x000fd9af, 0x000fdbaf, - 0x000fddaf, 0x000fdfaf, 0x000fe1af, 0x000fe3af, - 0x000fe5af, 0x000fe7af, 0x000fe9af, 0x000febaf, - 0x000fedaf, 0x000fefaf, 0x000ff1af, 0x000ff3af, - 0x000ff5af, 0x000ff7af, 0x000ff9af, 0x000ffbaf, - 0x000ffdaf, 0x000fffaf, 0x0000006f, 0x0000026f, - 0x0000046f, 0x0000066f, 0x0000086f, 0x00000a6f, - 0x00000c6f, 0x00000e6f, 0x0000106f, 0x0000126f, - 0x0000146f, 0x0000166f, 0x0000186f, 0x00001a6f, - 0x00001c6f, 0x00001e6f, 0x0000206f, 0x0000226f, - 0x0000246f, 0x0000266f, 0x0000286f, 0x00002a6f, - 0x00002c6f, 0x00002e6f, 0x0000306f, 0x0000326f, - 0x0000346f, 0x0000366f, 0x0000386f, 0x00003a6f, - 0x00003c6f, 0x00003e6f, 0x0000406f, 0x0000426f, - 0x0000446f, 0x0000466f, 0x0000486f, 0x00004a6f, - 0x00004c6f, 0x00004e6f, 0x0000506f, 0x0000526f, - 0x0000546f, 0x0000566f, 0x0000586f, 0x00005a6f, - 0x00005c6f, 0x00005e6f, 0x0000606f, 0x0000626f, - 0x0000646f, 0x0000666f, 0x0000686f, 0x00006a6f, - 0x00006c6f, 0x00006e6f, 0x0000706f, 0x0000726f, - 0x0000746f, 0x0000766f, 0x0000786f, 0x00007a6f, - 0x00007c6f, 0x00007e6f, 0x0000806f, 0x0000826f, - 0x0000846f, 0x0000866f, 0x0000886f, 0x00008a6f, - 0x00008c6f, 0x00008e6f, 0x0000906f, 0x0000926f, - 0x0000946f, 0x0000966f, 0x0000986f, 0x00009a6f, - 0x00009c6f, 0x00009e6f, 0x0000a06f, 0x0000a26f, - 0x0000a46f, 0x0000a66f, 0x0000a86f, 0x0000aa6f, - 0x0000ac6f, 0x0000ae6f, 0x0000b06f, 0x0000b26f, - 0x0000b46f, 0x0000b66f, 0x0000b86f, 0x0000ba6f, - 0x0000bc6f, 0x0000be6f, 0x0000c06f, 0x0000c26f, - 0x0000c46f, 0x0000c66f, 0x0000c86f, 0x0000ca6f, - 0x0000cc6f, 0x0000ce6f, 0x0000d06f, 0x0000d26f, - 0x0000d46f, 0x0000d66f, 0x0000d86f, 0x0000da6f, - 0x0000dc6f, 0x0000de6f, 0x0000e06f, 0x0000e26f, - 0x0000e46f, 0x0000e66f, 0x0000e86f, 0x0000ea6f, - 0x0000ec6f, 0x0000ee6f, 0x0000f06f, 0x0000f26f, - 0x0000f46f, 0x0000f66f, 0x0000f86f, 0x0000fa6f, - 0x0000fc6f, 0x0000fe6f, 0x0001006f, 0x0001026f, - 0x0001046f, 0x0001066f, 0x0001086f, 0x00010a6f, - 0x00010c6f, 0x00010e6f, 0x0001106f, 0x0001126f, - 0x0001146f, 0x0001166f, 0x0001186f, 0x00011a6f, - 0x00011c6f, 0x00011e6f, 0x0001206f, 0x0001226f, - 0x0001246f, 0x0001266f, 0x0001286f, 0x00012a6f, - 0x00012c6f, 0x00012e6f, 0x0001306f, 0x0001326f, - 0x0001346f, 0x0001366f, 0x0001386f, 0x00013a6f, - 0x00013c6f, 0x00013e6f, 0x0001406f, 0x0001426f, - 0x0001446f, 0x0001466f, 0x0001486f, 0x00014a6f, - 0x00014c6f, 0x00014e6f, 0x0001506f, 0x0001526f, - 0x0001546f, 0x0001566f, 0x0001586f, 0x00015a6f, - 0x00015c6f, 0x00015e6f, 0x0001606f, 0x0001626f, - 0x0001646f, 0x0001666f, 0x0001686f, 0x00016a6f, - 0x00016c6f, 0x00016e6f, 0x0001706f, 0x0001726f, - 0x0001746f, 0x0001766f, 0x0001786f, 0x00017a6f, - 0x00017c6f, 0x00017e6f, 0x0001806f, 0x0001826f, - 0x0001846f, 0x0001866f, 0x0001886f, 0x00018a6f, - 0x00018c6f, 0x00018e6f, 0x0001906f, 0x0001926f, - 0x0001946f, 0x0001966f, 0x0001986f, 0x00019a6f, - 0x00019c6f, 0x00019e6f, 0x0001a06f, 0x0001a26f, - 0x0001a46f, 0x0001a66f, 0x0001a86f, 0x0001aa6f, - 0x0001ac6f, 0x0001ae6f, 0x0001b06f, 0x0001b26f, - 0x0001b46f, 0x0001b66f, 0x0001b86f, 0x0001ba6f, - 0x0001bc6f, 0x0001be6f, 0x0001c06f, 0x0001c26f, - 0x0001c46f, 0x0001c66f, 0x0001c86f, 0x0001ca6f, - 0x0001cc6f, 0x0001ce6f, 0x0001d06f, 0x0001d26f, - 0x0001d46f, 0x0001d66f, 0x0001d86f, 0x0001da6f, - 0x0001dc6f, 0x0001de6f, 0x0001e06f, 0x0001e26f, - 0x0001e46f, 0x0001e66f, 0x0001e86f, 0x0001ea6f, - 0x0001ec6f, 0x0001ee6f, 0x0001f06f, 0x0001f26f, - 0x0001f46f, 0x0001f66f, 0x0001f86f, 0x0001fa6f, - 0x0001fc6f, 0x0001fe6f, 0x0002006f, 0x0002026f, - 0x0002046f, 0x0002066f, 0x0002086f, 0x00020a6f, - 0x00020c6f, 0x00020e6f, 0x0002106f, 0x0002126f, - 0x0002146f, 0x0002166f, 0x0002186f, 0x00021a6f, - 0x00021c6f, 0x00021e6f, 0x0002206f, 0x0002226f, - 0x0002246f, 0x0002266f, 0x0002286f, 0x00022a6f, - 0x00022c6f, 0x00022e6f, 0x0002306f, 0x0002326f, - 0x0002346f, 0x0002366f, 0x0002386f, 0x00023a6f, - 0x00023c6f, 0x00023e6f, 0x0002406f, 0x0002426f, - 0x0002446f, 0x0002466f, 0x0002486f, 0x00024a6f, - 0x00024c6f, 0x00024e6f, 0x0002506f, 0x0002526f, - 0x0002546f, 0x0002566f, 0x0002586f, 0x00025a6f, - 0x00025c6f, 0x00025e6f, 0x0002606f, 0x0002626f, - 0x0002646f, 0x0002666f, 0x0002686f, 0x00026a6f, - 0x00026c6f, 0x00026e6f, 0x0002706f, 0x0002726f, - 0x0002746f, 0x0002766f, 0x0002786f, 0x00027a6f, - 0x00027c6f, 0x00027e6f, 0x0002806f, 0x0002826f, - 0x0002846f, 0x0002866f, 0x0002886f, 0x00028a6f, - 0x00028c6f, 0x00028e6f, 0x0002906f, 0x0002926f, - 0x0002946f, 0x0002966f, 0x0002986f, 0x00029a6f, - 0x00029c6f, 0x00029e6f, 0x0002a06f, 0x0002a26f, - 0x0002a46f, 0x0002a66f, 0x0002a86f, 0x0002aa6f, - 0x0002ac6f, 0x0002ae6f, 0x0002b06f, 0x0002b26f, - 0x0002b46f, 0x0002b66f, 0x0002b86f, 0x0002ba6f, - 0x0002bc6f, 0x0002be6f, 0x0002c06f, 0x0002c26f, - 0x0002c46f, 0x0002c66f, 0x0002c86f, 0x0002ca6f, - 0x0002cc6f, 0x0002ce6f, 0x0002d06f, 0x0002d26f, - 0x0002d46f, 0x0002d66f, 0x0002d86f, 0x0002da6f, - 0x0002dc6f, 0x0002de6f, 0x0002e06f, 0x0002e26f, - 0x0002e46f, 0x0002e66f, 0x0002e86f, 0x0002ea6f, - 0x0002ec6f, 0x0002ee6f, 0x0002f06f, 0x0002f26f, - 0x0002f46f, 0x0002f66f, 0x0002f86f, 0x0002fa6f, - 0x0002fc6f, 0x0002fe6f, 0x0003006f, 0x0003026f, - 0x0003046f, 0x0003066f, 0x0003086f, 0x00030a6f, - 0x00030c6f, 0x00030e6f, 0x0003106f, 0x0003126f, - 0x0003146f, 0x0003166f, 0x0003186f, 0x00031a6f, - 0x00031c6f, 0x00031e6f, 0x0003206f, 0x0003226f, - 0x0003246f, 0x0003266f, 0x0003286f, 0x00032a6f, - 0x00032c6f, 0x00032e6f, 0x0003306f, 0x0003326f, - 0x0003346f, 0x0003366f, 0x0003386f, 0x00033a6f, - 0x00033c6f, 0x00033e6f, 0x0003406f, 0x0003426f, - 0x0003446f, 0x0003466f, 0x0003486f, 0x00034a6f, - 0x00034c6f, 0x00034e6f, 0x0003506f, 0x0003526f, - 0x0003546f, 0x0003566f, 0x0003586f, 0x00035a6f, - 0x00035c6f, 0x00035e6f, 0x0003606f, 0x0003626f, - 0x0003646f, 0x0003666f, 0x0003686f, 0x00036a6f, - 0x00036c6f, 0x00036e6f, 0x0003706f, 0x0003726f, - 0x0003746f, 0x0003766f, 0x0003786f, 0x00037a6f, - 0x00037c6f, 0x00037e6f, 0x0003806f, 0x0003826f, - 0x0003846f, 0x0003866f, 0x0003886f, 0x00038a6f, - 0x00038c6f, 0x00038e6f, 0x0003906f, 0x0003926f, - 0x0003946f, 0x0003966f, 0x0003986f, 0x00039a6f, - 0x00039c6f, 0x00039e6f, 0x0003a06f, 0x0003a26f, - 0x0003a46f, 0x0003a66f, 0x0003a86f, 0x0003aa6f, - 0x0003ac6f, 0x0003ae6f, 0x0003b06f, 0x0003b26f, - 0x0003b46f, 0x0003b66f, 0x0003b86f, 0x0003ba6f, - 0x0003bc6f, 0x0003be6f, 0x0003c06f, 0x0003c26f, - 0x0003c46f, 0x0003c66f, 0x0003c86f, 0x0003ca6f, - 0x0003cc6f, 0x0003ce6f, 0x0003d06f, 0x0003d26f, - 0x0003d46f, 0x0003d66f, 0x0003d86f, 0x0003da6f, - 0x0003dc6f, 0x0003de6f, 0x0003e06f, 0x0003e26f, - 0x0003e46f, 0x0003e66f, 0x0003e86f, 0x0003ea6f, - 0x0003ec6f, 0x0003ee6f, 0x0003f06f, 0x0003f26f, - 0x0003f46f, 0x0003f66f, 0x0003f86f, 0x0003fa6f, - 0x0003fc6f, 0x0003fe6f, 0x0004006f, 0x0004026f, - 0x0004046f, 0x0004066f, 0x0004086f, 0x00040a6f, - 0x00040c6f, 0x00040e6f, 0x0004106f, 0x0004126f, - 0x0004146f, 0x0004166f, 0x0004186f, 0x00041a6f, - 0x00041c6f, 0x00041e6f, 0x0004206f, 0x0004226f, - 0x0004246f, 0x0004266f, 0x0004286f, 0x00042a6f, - 0x00042c6f, 0x00042e6f, 0x0004306f, 0x0004326f, - 0x0004346f, 0x0004366f, 0x0004386f, 0x00043a6f, - 0x00043c6f, 0x00043e6f, 0x0004406f, 0x0004426f, - 0x0004446f, 0x0004466f, 0x0004486f, 0x00044a6f, - 0x00044c6f, 0x00044e6f, 0x0004506f, 0x0004526f, - 0x0004546f, 0x0004566f, 0x0004586f, 0x00045a6f, - 0x00045c6f, 0x00045e6f, 0x0004606f, 0x0004626f, - 0x0004646f, 0x0004666f, 0x0004686f, 0x00046a6f, - 0x00046c6f, 0x00046e6f, 0x0004706f, 0x0004726f, - 0x0004746f, 0x0004766f, 0x0004786f, 0x00047a6f, - 0x00047c6f, 0x00047e6f, 0x0004806f, 0x0004826f, - 0x0004846f, 0x0004866f, 0x0004886f, 0x00048a6f, - 0x00048c6f, 0x00048e6f, 0x0004906f, 0x0004926f, - 0x0004946f, 0x0004966f, 0x0004986f, 0x00049a6f, - 0x00049c6f, 0x00049e6f, 0x0004a06f, 0x0004a26f, - 0x0004a46f, 0x0004a66f, 0x0004a86f, 0x0004aa6f, - 0x0004ac6f, 0x0004ae6f, 0x0004b06f, 0x0004b26f, - 0x0004b46f, 0x0004b66f, 0x0004b86f, 0x0004ba6f, - 0x0004bc6f, 0x0004be6f, 0x0004c06f, 0x0004c26f, - 0x0004c46f, 0x0004c66f, 0x0004c86f, 0x0004ca6f, - 0x0004cc6f, 0x0004ce6f, 0x0004d06f, 0x0004d26f, - 0x0004d46f, 0x0004d66f, 0x0004d86f, 0x0004da6f, - 0x0004dc6f, 0x0004de6f, 0x0004e06f, 0x0004e26f, - 0x0004e46f, 0x0004e66f, 0x0004e86f, 0x0004ea6f, - 0x0004ec6f, 0x0004ee6f, 0x0004f06f, 0x0004f26f, - 0x0004f46f, 0x0004f66f, 0x0004f86f, 0x0004fa6f, - 0x0004fc6f, 0x0004fe6f, 0x0005006f, 0x0005026f, - 0x0005046f, 0x0005066f, 0x0005086f, 0x00050a6f, - 0x00050c6f, 0x00050e6f, 0x0005106f, 0x0005126f, - 0x0005146f, 0x0005166f, 0x0005186f, 0x00051a6f, - 0x00051c6f, 0x00051e6f, 0x0005206f, 0x0005226f, - 0x0005246f, 0x0005266f, 0x0005286f, 0x00052a6f, - 0x00052c6f, 0x00052e6f, 0x0005306f, 0x0005326f, - 0x0005346f, 0x0005366f, 0x0005386f, 0x00053a6f, - 0x00053c6f, 0x00053e6f, 0x0005406f, 0x0005426f, - 0x0005446f, 0x0005466f, 0x0005486f, 0x00054a6f, - 0x00054c6f, 0x00054e6f, 0x0005506f, 0x0005526f, - 0x0005546f, 0x0005566f, 0x0005586f, 0x00055a6f, - 0x00055c6f, 0x00055e6f, 0x0005606f, 0x0005626f, - 0x0005646f, 0x0005666f, 0x0005686f, 0x00056a6f, - 0x00056c6f, 0x00056e6f, 0x0005706f, 0x0005726f, - 0x0005746f, 0x0005766f, 0x0005786f, 0x00057a6f, - 0x00057c6f, 0x00057e6f, 0x0005806f, 0x0005826f, - 0x0005846f, 0x0005866f, 0x0005886f, 0x00058a6f, - 0x00058c6f, 0x00058e6f, 0x0005906f, 0x0005926f, - 0x0005946f, 0x0005966f, 0x0005986f, 0x00059a6f, - 0x00059c6f, 0x00059e6f, 0x0005a06f, 0x0005a26f, - 0x0005a46f, 0x0005a66f, 0x0005a86f, 0x0005aa6f, - 0x0005ac6f, 0x0005ae6f, 0x0005b06f, 0x0005b26f, - 0x0005b46f, 0x0005b66f, 0x0005b86f, 0x0005ba6f, - 0x0005bc6f, 0x0005be6f, 0x0005c06f, 0x0005c26f, - 0x0005c46f, 0x0005c66f, 0x0005c86f, 0x0005ca6f, - 0x0005cc6f, 0x0005ce6f, 0x0005d06f, 0x0005d26f, - 0x0005d46f, 0x0005d66f, 0x0005d86f, 0x0005da6f, - 0x0005dc6f, 0x0005de6f, 0x0005e06f, 0x0005e26f, - 0x0005e46f, 0x0005e66f, 0x0005e86f, 0x0005ea6f, - 0x0005ec6f, 0x0005ee6f, 0x0005f06f, 0x0005f26f, - 0x0005f46f, 0x0005f66f, 0x0005f86f, 0x0005fa6f, - 0x0005fc6f, 0x0005fe6f, 0x0006006f, 0x0006026f, - 0x0006046f, 0x0006066f, 0x0006086f, 0x00060a6f, - 0x00060c6f, 0x00060e6f, 0x0006106f, 0x0006126f, - 0x0006146f, 0x0006166f, 0x0006186f, 0x00061a6f, - 0x00061c6f, 0x00061e6f, 0x0006206f, 0x0006226f, - 0x0006246f, 0x0006266f, 0x0006286f, 0x00062a6f, - 0x00062c6f, 0x00062e6f, 0x0006306f, 0x0006326f, - 0x0006346f, 0x0006366f, 0x0006386f, 0x00063a6f, - 0x00063c6f, 0x00063e6f, 0x0006406f, 0x0006426f, - 0x0006446f, 0x0006466f, 0x0006486f, 0x00064a6f, - 0x00064c6f, 0x00064e6f, 0x0006506f, 0x0006526f, - 0x0006546f, 0x0006566f, 0x0006586f, 0x00065a6f, - 0x00065c6f, 0x00065e6f, 0x0006606f, 0x0006626f, - 0x0006646f, 0x0006666f, 0x0006686f, 0x00066a6f, - 0x00066c6f, 0x00066e6f, 0x0006706f, 0x0006726f, - 0x0006746f, 0x0006766f, 0x0006786f, 0x00067a6f, - 0x00067c6f, 0x00067e6f, 0x0006806f, 0x0006826f, - 0x0006846f, 0x0006866f, 0x0006886f, 0x00068a6f, - 0x00068c6f, 0x00068e6f, 0x0006906f, 0x0006926f, - 0x0006946f, 0x0006966f, 0x0006986f, 0x00069a6f, - 0x00069c6f, 0x00069e6f, 0x0006a06f, 0x0006a26f, - 0x0006a46f, 0x0006a66f, 0x0006a86f, 0x0006aa6f, - 0x0006ac6f, 0x0006ae6f, 0x0006b06f, 0x0006b26f, - 0x0006b46f, 0x0006b66f, 0x0006b86f, 0x0006ba6f, - 0x0006bc6f, 0x0006be6f, 0x0006c06f, 0x0006c26f, - 0x0006c46f, 0x0006c66f, 0x0006c86f, 0x0006ca6f, - 0x0006cc6f, 0x0006ce6f, 0x0006d06f, 0x0006d26f, - 0x0006d46f, 0x0006d66f, 0x0006d86f, 0x0006da6f, - 0x0006dc6f, 0x0006de6f, 0x0006e06f, 0x0006e26f, - 0x0006e46f, 0x0006e66f, 0x0006e86f, 0x0006ea6f, - 0x0006ec6f, 0x0006ee6f, 0x0006f06f, 0x0006f26f, - 0x0006f46f, 0x0006f66f, 0x0006f86f, 0x0006fa6f, - 0x0006fc6f, 0x0006fe6f, 0x0007006f, 0x0007026f, - 0x0007046f, 0x0007066f, 0x0007086f, 0x00070a6f, - 0x00070c6f, 0x00070e6f, 0x0007106f, 0x0007126f, - 0x0007146f, 0x0007166f, 0x0007186f, 0x00071a6f, - 0x00071c6f, 0x00071e6f, 0x0007206f, 0x0007226f, - 0x0007246f, 0x0007266f, 0x0007286f, 0x00072a6f, - 0x00072c6f, 0x00072e6f, 0x0007306f, 0x0007326f, - 0x0007346f, 0x0007366f, 0x0007386f, 0x00073a6f, - 0x00073c6f, 0x00073e6f, 0x0007406f, 0x0007426f, - 0x0007446f, 0x0007466f, 0x0007486f, 0x00074a6f, - 0x00074c6f, 0x00074e6f, 0x0007506f, 0x0007526f, - 0x0007546f, 0x0007566f, 0x0007586f, 0x00075a6f, - 0x00075c6f, 0x00075e6f, 0x0007606f, 0x0007626f, - 0x0007646f, 0x0007666f, 0x0007686f, 0x00076a6f, - 0x00076c6f, 0x00076e6f, 0x0007706f, 0x0007726f, - 0x0007746f, 0x0007766f, 0x0007786f, 0x00077a6f, - 0x00077c6f, 0x00077e6f, 0x0007806f, 0x0007826f, - 0x0007846f, 0x0007866f, 0x0007886f, 0x00078a6f, - 0x00078c6f, 0x00078e6f, 0x0007906f, 0x0007926f, - 0x0007946f, 0x0007966f, 0x0007986f, 0x00079a6f, - 0x00079c6f, 0x00079e6f, 0x0007a06f, 0x0007a26f, - 0x0007a46f, 0x0007a66f, 0x0007a86f, 0x0007aa6f, - 0x0007ac6f, 0x0007ae6f, 0x0007b06f, 0x0007b26f, - 0x0007b46f, 0x0007b66f, 0x0007b86f, 0x0007ba6f, - 0x0007bc6f, 0x0007be6f, 0x0007c06f, 0x0007c26f, - 0x0007c46f, 0x0007c66f, 0x0007c86f, 0x0007ca6f, - 0x0007cc6f, 0x0007ce6f, 0x0007d06f, 0x0007d26f, - 0x0007d46f, 0x0007d66f, 0x0007d86f, 0x0007da6f, - 0x0007dc6f, 0x0007de6f, 0x0007e06f, 0x0007e26f, - 0x0007e46f, 0x0007e66f, 0x0007e86f, 0x0007ea6f, - 0x0007ec6f, 0x0007ee6f, 0x0007f06f, 0x0007f26f, - 0x0007f46f, 0x0007f66f, 0x0007f86f, 0x0007fa6f, - 0x0007fc6f, 0x0007fe6f, 0x0008006f, 0x0008026f, - 0x0008046f, 0x0008066f, 0x0008086f, 0x00080a6f, - 0x00080c6f, 0x00080e6f, 0x0008106f, 0x0008126f, - 0x0008146f, 0x0008166f, 0x0008186f, 0x00081a6f, - 0x00081c6f, 0x00081e6f, 0x0008206f, 0x0008226f, - 0x0008246f, 0x0008266f, 0x0008286f, 0x00082a6f, - 0x00082c6f, 0x00082e6f, 0x0008306f, 0x0008326f, - 0x0008346f, 0x0008366f, 0x0008386f, 0x00083a6f, - 0x00083c6f, 0x00083e6f, 0x0008406f, 0x0008426f, - 0x0008446f, 0x0008466f, 0x0008486f, 0x00084a6f, - 0x00084c6f, 0x00084e6f, 0x0008506f, 0x0008526f, - 0x0008546f, 0x0008566f, 0x0008586f, 0x00085a6f, - 0x00085c6f, 0x00085e6f, 0x0008606f, 0x0008626f, - 0x0008646f, 0x0008666f, 0x0008686f, 0x00086a6f, - 0x00086c6f, 0x00086e6f, 0x0008706f, 0x0008726f, - 0x0008746f, 0x0008766f, 0x0008786f, 0x00087a6f, - 0x00087c6f, 0x00087e6f, 0x0008806f, 0x0008826f, - 0x0008846f, 0x0008866f, 0x0008886f, 0x00088a6f, - 0x00088c6f, 0x00088e6f, 0x0008906f, 0x0008926f, - 0x0008946f, 0x0008966f, 0x0008986f, 0x00089a6f, - 0x00089c6f, 0x00089e6f, 0x0008a06f, 0x0008a26f, - 0x0008a46f, 0x0008a66f, 0x0008a86f, 0x0008aa6f, - 0x0008ac6f, 0x0008ae6f, 0x0008b06f, 0x0008b26f, - 0x0008b46f, 0x0008b66f, 0x0008b86f, 0x0008ba6f, - 0x0008bc6f, 0x0008be6f, 0x0008c06f, 0x0008c26f, - 0x0008c46f, 0x0008c66f, 0x0008c86f, 0x0008ca6f, - 0x0008cc6f, 0x0008ce6f, 0x0008d06f, 0x0008d26f, - 0x0008d46f, 0x0008d66f, 0x0008d86f, 0x0008da6f, - 0x0008dc6f, 0x0008de6f, 0x0008e06f, 0x0008e26f, - 0x0008e46f, 0x0008e66f, 0x0008e86f, 0x0008ea6f, - 0x0008ec6f, 0x0008ee6f, 0x0008f06f, 0x0008f26f, - 0x0008f46f, 0x0008f66f, 0x0008f86f, 0x0008fa6f, - 0x0008fc6f, 0x0008fe6f, 0x0009006f, 0x0009026f, - 0x0009046f, 0x0009066f, 0x0009086f, 0x00090a6f, - 0x00090c6f, 0x00090e6f, 0x0009106f, 0x0009126f, - 0x0009146f, 0x0009166f, 0x0009186f, 0x00091a6f, - 0x00091c6f, 0x00091e6f, 0x0009206f, 0x0009226f, - 0x0009246f, 0x0009266f, 0x0009286f, 0x00092a6f, - 0x00092c6f, 0x00092e6f, 0x0009306f, 0x0009326f, - 0x0009346f, 0x0009366f, 0x0009386f, 0x00093a6f, - 0x00093c6f, 0x00093e6f, 0x0009406f, 0x0009426f, - 0x0009446f, 0x0009466f, 0x0009486f, 0x00094a6f, - 0x00094c6f, 0x00094e6f, 0x0009506f, 0x0009526f, - 0x0009546f, 0x0009566f, 0x0009586f, 0x00095a6f, - 0x00095c6f, 0x00095e6f, 0x0009606f, 0x0009626f, - 0x0009646f, 0x0009666f, 0x0009686f, 0x00096a6f, - 0x00096c6f, 0x00096e6f, 0x0009706f, 0x0009726f, - 0x0009746f, 0x0009766f, 0x0009786f, 0x00097a6f, - 0x00097c6f, 0x00097e6f, 0x0009806f, 0x0009826f, - 0x0009846f, 0x0009866f, 0x0009886f, 0x00098a6f, - 0x00098c6f, 0x00098e6f, 0x0009906f, 0x0009926f, - 0x0009946f, 0x0009966f, 0x0009986f, 0x00099a6f, - 0x00099c6f, 0x00099e6f, 0x0009a06f, 0x0009a26f, - 0x0009a46f, 0x0009a66f, 0x0009a86f, 0x0009aa6f, - 0x0009ac6f, 0x0009ae6f, 0x0009b06f, 0x0009b26f, - 0x0009b46f, 0x0009b66f, 0x0009b86f, 0x0009ba6f, - 0x0009bc6f, 0x0009be6f, 0x0009c06f, 0x0009c26f, - 0x0009c46f, 0x0009c66f, 0x0009c86f, 0x0009ca6f, - 0x0009cc6f, 0x0009ce6f, 0x0009d06f, 0x0009d26f, - 0x0009d46f, 0x0009d66f, 0x0009d86f, 0x0009da6f, - 0x0009dc6f, 0x0009de6f, 0x0009e06f, 0x0009e26f, - 0x0009e46f, 0x0009e66f, 0x0009e86f, 0x0009ea6f, - 0x0009ec6f, 0x0009ee6f, 0x0009f06f, 0x0009f26f, - 0x0009f46f, 0x0009f66f, 0x0009f86f, 0x0009fa6f, - 0x0009fc6f, 0x0009fe6f, 0x000a006f, 0x000a026f, - 0x000a046f, 0x000a066f, 0x000a086f, 0x000a0a6f, - 0x000a0c6f, 0x000a0e6f, 0x000a106f, 0x000a126f, - 0x000a146f, 0x000a166f, 0x000a186f, 0x000a1a6f, - 0x000a1c6f, 0x000a1e6f, 0x000a206f, 0x000a226f, - 0x000a246f, 0x000a266f, 0x000a286f, 0x000a2a6f, - 0x000a2c6f, 0x000a2e6f, 0x000a306f, 0x000a326f, - 0x000a346f, 0x000a366f, 0x000a386f, 0x000a3a6f, - 0x000a3c6f, 0x000a3e6f, 0x000a406f, 0x000a426f, - 0x000a446f, 0x000a466f, 0x000a486f, 0x000a4a6f, - 0x000a4c6f, 0x000a4e6f, 0x000a506f, 0x000a526f, - 0x000a546f, 0x000a566f, 0x000a586f, 0x000a5a6f, - 0x000a5c6f, 0x000a5e6f, 0x000a606f, 0x000a626f, - 0x000a646f, 0x000a666f, 0x000a686f, 0x000a6a6f, - 0x000a6c6f, 0x000a6e6f, 0x000a706f, 0x000a726f, - 0x000a746f, 0x000a766f, 0x000a786f, 0x000a7a6f, - 0x000a7c6f, 0x000a7e6f, 0x000a806f, 0x000a826f, - 0x000a846f, 0x000a866f, 0x000a886f, 0x000a8a6f, - 0x000a8c6f, 0x000a8e6f, 0x000a906f, 0x000a926f, - 0x000a946f, 0x000a966f, 0x000a986f, 0x000a9a6f, - 0x000a9c6f, 0x000a9e6f, 0x000aa06f, 0x000aa26f, - 0x000aa46f, 0x000aa66f, 0x000aa86f, 0x000aaa6f, - 0x000aac6f, 0x000aae6f, 0x000ab06f, 0x000ab26f, - 0x000ab46f, 0x000ab66f, 0x000ab86f, 0x000aba6f, - 0x000abc6f, 0x000abe6f, 0x000ac06f, 0x000ac26f, - 0x000ac46f, 0x000ac66f, 0x000ac86f, 0x000aca6f, - 0x000acc6f, 0x000ace6f, 0x000ad06f, 0x000ad26f, - 0x000ad46f, 0x000ad66f, 0x000ad86f, 0x000ada6f, - 0x000adc6f, 0x000ade6f, 0x000ae06f, 0x000ae26f, - 0x000ae46f, 0x000ae66f, 0x000ae86f, 0x000aea6f, - 0x000aec6f, 0x000aee6f, 0x000af06f, 0x000af26f, - 0x000af46f, 0x000af66f, 0x000af86f, 0x000afa6f, - 0x000afc6f, 0x000afe6f, 0x000b006f, 0x000b026f, - 0x000b046f, 0x000b066f, 0x000b086f, 0x000b0a6f, - 0x000b0c6f, 0x000b0e6f, 0x000b106f, 0x000b126f, - 0x000b146f, 0x000b166f, 0x000b186f, 0x000b1a6f, - 0x000b1c6f, 0x000b1e6f, 0x000b206f, 0x000b226f, - 0x000b246f, 0x000b266f, 0x000b286f, 0x000b2a6f, - 0x000b2c6f, 0x000b2e6f, 0x000b306f, 0x000b326f, - 0x000b346f, 0x000b366f, 0x000b386f, 0x000b3a6f, - 0x000b3c6f, 0x000b3e6f, 0x000b406f, 0x000b426f, - 0x000b446f, 0x000b466f, 0x000b486f, 0x000b4a6f, - 0x000b4c6f, 0x000b4e6f, 0x000b506f, 0x000b526f, - 0x000b546f, 0x000b566f, 0x000b586f, 0x000b5a6f, - 0x000b5c6f, 0x000b5e6f, 0x000b606f, 0x000b626f, - 0x000b646f, 0x000b666f, 0x000b686f, 0x000b6a6f, - 0x000b6c6f, 0x000b6e6f, 0x000b706f, 0x000b726f, - 0x000b746f, 0x000b766f, 0x000b786f, 0x000b7a6f, - 0x000b7c6f, 0x000b7e6f, 0x000b806f, 0x000b826f, - 0x000b846f, 0x000b866f, 0x000b886f, 0x000b8a6f, - 0x000b8c6f, 0x000b8e6f, 0x000b906f, 0x000b926f, - 0x000b946f, 0x000b966f, 0x000b986f, 0x000b9a6f, - 0x000b9c6f, 0x000b9e6f, 0x000ba06f, 0x000ba26f, - 0x000ba46f, 0x000ba66f, 0x000ba86f, 0x000baa6f, - 0x000bac6f, 0x000bae6f, 0x000bb06f, 0x000bb26f, - 0x000bb46f, 0x000bb66f, 0x000bb86f, 0x000bba6f, - 0x000bbc6f, 0x000bbe6f, 0x000bc06f, 0x000bc26f, - 0x000bc46f, 0x000bc66f, 0x000bc86f, 0x000bca6f, - 0x000bcc6f, 0x000bce6f, 0x000bd06f, 0x000bd26f, - 0x000bd46f, 0x000bd66f, 0x000bd86f, 0x000bda6f, - 0x000bdc6f, 0x000bde6f, 0x000be06f, 0x000be26f, - 0x000be46f, 0x000be66f, 0x000be86f, 0x000bea6f, - 0x000bec6f, 0x000bee6f, 0x000bf06f, 0x000bf26f, - 0x000bf46f, 0x000bf66f, 0x000bf86f, 0x000bfa6f, - 0x000bfc6f, 0x000bfe6f, 0x000c006f, 0x000c026f, - 0x000c046f, 0x000c066f, 0x000c086f, 0x000c0a6f, - 0x000c0c6f, 0x000c0e6f, 0x000c106f, 0x000c126f, - 0x000c146f, 0x000c166f, 0x000c186f, 0x000c1a6f, - 0x000c1c6f, 0x000c1e6f, 0x000c206f, 0x000c226f, - 0x000c246f, 0x000c266f, 0x000c286f, 0x000c2a6f, - 0x000c2c6f, 0x000c2e6f, 0x000c306f, 0x000c326f, - 0x000c346f, 0x000c366f, 0x000c386f, 0x000c3a6f, - 0x000c3c6f, 0x000c3e6f, 0x000c406f, 0x000c426f, - 0x000c446f, 0x000c466f, 0x000c486f, 0x000c4a6f, - 0x000c4c6f, 0x000c4e6f, 0x000c506f, 0x000c526f, - 0x000c546f, 0x000c566f, 0x000c586f, 0x000c5a6f, - 0x000c5c6f, 0x000c5e6f, 0x000c606f, 0x000c626f, - 0x000c646f, 0x000c666f, 0x000c686f, 0x000c6a6f, - 0x000c6c6f, 0x000c6e6f, 0x000c706f, 0x000c726f, - 0x000c746f, 0x000c766f, 0x000c786f, 0x000c7a6f, - 0x000c7c6f, 0x000c7e6f, 0x000c806f, 0x000c826f, - 0x000c846f, 0x000c866f, 0x000c886f, 0x000c8a6f, - 0x000c8c6f, 0x000c8e6f, 0x000c906f, 0x000c926f, - 0x000c946f, 0x000c966f, 0x000c986f, 0x000c9a6f, - 0x000c9c6f, 0x000c9e6f, 0x000ca06f, 0x000ca26f, - 0x000ca46f, 0x000ca66f, 0x000ca86f, 0x000caa6f, - 0x000cac6f, 0x000cae6f, 0x000cb06f, 0x000cb26f, - 0x000cb46f, 0x000cb66f, 0x000cb86f, 0x000cba6f, - 0x000cbc6f, 0x000cbe6f, 0x000cc06f, 0x000cc26f, - 0x000cc46f, 0x000cc66f, 0x000cc86f, 0x000cca6f, - 0x000ccc6f, 0x000cce6f, 0x000cd06f, 0x000cd26f, - 0x000cd46f, 0x000cd66f, 0x000cd86f, 0x000cda6f, - 0x000cdc6f, 0x000cde6f, 0x000ce06f, 0x000ce26f, - 0x000ce46f, 0x000ce66f, 0x000ce86f, 0x000cea6f, - 0x000cec6f, 0x000cee6f, 0x000cf06f, 0x000cf26f, - 0x000cf46f, 0x000cf66f, 0x000cf86f, 0x000cfa6f, - 0x000cfc6f, 0x000cfe6f, 0x000d006f, 0x000d026f, - 0x000d046f, 0x000d066f, 0x000d086f, 0x000d0a6f, - 0x000d0c6f, 0x000d0e6f, 0x000d106f, 0x000d126f, - 0x000d146f, 0x000d166f, 0x000d186f, 0x000d1a6f, - 0x000d1c6f, 0x000d1e6f, 0x000d206f, 0x000d226f, - 0x000d246f, 0x000d266f, 0x000d286f, 0x000d2a6f, - 0x000d2c6f, 0x000d2e6f, 0x000d306f, 0x000d326f, - 0x000d346f, 0x000d366f, 0x000d386f, 0x000d3a6f, - 0x000d3c6f, 0x000d3e6f, 0x000d406f, 0x000d426f, - 0x000d446f, 0x000d466f, 0x000d486f, 0x000d4a6f, - 0x000d4c6f, 0x000d4e6f, 0x000d506f, 0x000d526f, - 0x000d546f, 0x000d566f, 0x000d586f, 0x000d5a6f, - 0x000d5c6f, 0x000d5e6f, 0x000d606f, 0x000d626f, - 0x000d646f, 0x000d666f, 0x000d686f, 0x000d6a6f, - 0x000d6c6f, 0x000d6e6f, 0x000d706f, 0x000d726f, - 0x000d746f, 0x000d766f, 0x000d786f, 0x000d7a6f, - 0x000d7c6f, 0x000d7e6f, 0x000d806f, 0x000d826f, - 0x000d846f, 0x000d866f, 0x000d886f, 0x000d8a6f, - 0x000d8c6f, 0x000d8e6f, 0x000d906f, 0x000d926f, - 0x000d946f, 0x000d966f, 0x000d986f, 0x000d9a6f, - 0x000d9c6f, 0x000d9e6f, 0x000da06f, 0x000da26f, - 0x000da46f, 0x000da66f, 0x000da86f, 0x000daa6f, - 0x000dac6f, 0x000dae6f, 0x000db06f, 0x000db26f, - 0x000db46f, 0x000db66f, 0x000db86f, 0x000dba6f, - 0x000dbc6f, 0x000dbe6f, 0x000dc06f, 0x000dc26f, - 0x000dc46f, 0x000dc66f, 0x000dc86f, 0x000dca6f, - 0x000dcc6f, 0x000dce6f, 0x000dd06f, 0x000dd26f, - 0x000dd46f, 0x000dd66f, 0x000dd86f, 0x000dda6f, - 0x000ddc6f, 0x000dde6f, 0x000de06f, 0x000de26f, - 0x000de46f, 0x000de66f, 0x000de86f, 0x000dea6f, - 0x000dec6f, 0x000dee6f, 0x000df06f, 0x000df26f, - 0x000df46f, 0x000df66f, 0x000df86f, 0x000dfa6f, - 0x000dfc6f, 0x000dfe6f, 0x000e006f, 0x000e026f, - 0x000e046f, 0x000e066f, 0x000e086f, 0x000e0a6f, - 0x000e0c6f, 0x000e0e6f, 0x000e106f, 0x000e126f, - 0x000e146f, 0x000e166f, 0x000e186f, 0x000e1a6f, - 0x000e1c6f, 0x000e1e6f, 0x000e206f, 0x000e226f, - 0x000e246f, 0x000e266f, 0x000e286f, 0x000e2a6f, - 0x000e2c6f, 0x000e2e6f, 0x000e306f, 0x000e326f, - 0x000e346f, 0x000e366f, 0x000e386f, 0x000e3a6f, - 0x000e3c6f, 0x000e3e6f, 0x000e406f, 0x000e426f, - 0x000e446f, 0x000e466f, 0x000e486f, 0x000e4a6f, - 0x000e4c6f, 0x000e4e6f, 0x000e506f, 0x000e526f, - 0x000e546f, 0x000e566f, 0x000e586f, 0x000e5a6f, - 0x000e5c6f, 0x000e5e6f, 0x000e606f, 0x000e626f, - 0x000e646f, 0x000e666f, 0x000e686f, 0x000e6a6f, - 0x000e6c6f, 0x000e6e6f, 0x000e706f, 0x000e726f, - 0x000e746f, 0x000e766f, 0x000e786f, 0x000e7a6f, - 0x000e7c6f, 0x000e7e6f, 0x000e806f, 0x000e826f, - 0x000e846f, 0x000e866f, 0x000e886f, 0x000e8a6f, - 0x000e8c6f, 0x000e8e6f, 0x000e906f, 0x000e926f, - 0x000e946f, 0x000e966f, 0x000e986f, 0x000e9a6f, - 0x000e9c6f, 0x000e9e6f, 0x000ea06f, 0x000ea26f, - 0x000ea46f, 0x000ea66f, 0x000ea86f, 0x000eaa6f, - 0x000eac6f, 0x000eae6f, 0x000eb06f, 0x000eb26f, - 0x000eb46f, 0x000eb66f, 0x000eb86f, 0x000eba6f, - 0x000ebc6f, 0x000ebe6f, 0x000ec06f, 0x000ec26f, - 0x000ec46f, 0x000ec66f, 0x000ec86f, 0x000eca6f, - 0x000ecc6f, 0x000ece6f, 0x000ed06f, 0x000ed26f, - 0x000ed46f, 0x000ed66f, 0x000ed86f, 0x000eda6f, - 0x000edc6f, 0x000ede6f, 0x000ee06f, 0x000ee26f, - 0x000ee46f, 0x000ee66f, 0x000ee86f, 0x000eea6f, - 0x000eec6f, 0x000eee6f, 0x000ef06f, 0x000ef26f, - 0x000ef46f, 0x000ef66f, 0x000ef86f, 0x000efa6f, - 0x000efc6f, 0x000efe6f, 0x000f006f, 0x000f026f, - 0x000f046f, 0x000f066f, 0x000f086f, 0x000f0a6f, - 0x000f0c6f, 0x000f0e6f, 0x000f106f, 0x000f126f, - 0x000f146f, 0x000f166f, 0x000f186f, 0x000f1a6f, - 0x000f1c6f, 0x000f1e6f, 0x000f206f, 0x000f226f, - 0x000f246f, 0x000f266f, 0x000f286f, 0x000f2a6f, - 0x000f2c6f, 0x000f2e6f, 0x000f306f, 0x000f326f, - 0x000f346f, 0x000f366f, 0x000f386f, 0x000f3a6f, - 0x000f3c6f, 0x000f3e6f, 0x000f406f, 0x000f426f, - 0x000f446f, 0x000f466f, 0x000f486f, 0x000f4a6f, - 0x000f4c6f, 0x000f4e6f, 0x000f506f, 0x000f526f, - 0x000f546f, 0x000f566f, 0x000f586f, 0x000f5a6f, - 0x000f5c6f, 0x000f5e6f, 0x000f606f, 0x000f626f, - 0x000f646f, 0x000f666f, 0x000f686f, 0x000f6a6f, - 0x000f6c6f, 0x000f6e6f, 0x000f706f, 0x000f726f, - 0x000f746f, 0x000f766f, 0x000f786f, 0x000f7a6f, - 0x000f7c6f, 0x000f7e6f, 0x000f806f, 0x000f826f, - 0x000f846f, 0x000f866f, 0x000f886f, 0x000f8a6f, - 0x000f8c6f, 0x000f8e6f, 0x000f906f, 0x000f926f, - 0x000f946f, 0x000f966f, 0x000f986f, 0x000f9a6f, - 0x000f9c6f, 0x000f9e6f, 0x000fa06f, 0x000fa26f, - 0x000fa46f, 0x000fa66f, 0x000fa86f, 0x000faa6f, - 0x000fac6f, 0x000fae6f, 0x000fb06f, 0x000fb26f, - 0x000fb46f, 0x000fb66f, 0x000fb86f, 0x000fba6f, - 0x000fbc6f, 0x000fbe6f, 0x000fc06f, 0x000fc26f, - 0x000fc46f, 0x000fc66f, 0x000fc86f, 0x000fca6f, - 0x000fcc6f, 0x000fce6f, 0x000fd06f, 0x000fd26f, - 0x000fd46f, 0x000fd66f, 0x000fd86f, 0x000fda6f, - 0x000fdc6f, 0x000fde6f, 0x000fe06f, 0x000fe26f, - 0x000fe46f, 0x000fe66f, 0x000fe86f, 0x000fea6f, - 0x000fec6f, 0x000fee6f, 0x000ff06f, 0x000ff26f, - 0x000ff46f, 0x000ff66f, 0x000ff86f, 0x000ffa6f, - 0x000ffc6f, 0x000ffe6f + 0x00002fe9, 0x00007fea, 0x00001fea, 0x00005fea, 0x000007e9, + 0x000027e9, 0x000017ea, 0x000037ea, 0x000057ea, 0x000077ea, + 0x000001e8, 0x000009e8, 0x000011e8, 0x000019e8, 0x000005e9, + 0x00000de9, 0x000015e9, 0x00001de9, 0x000025e9, 0x00002de9, + 0x000035e9, 0x00003de9, 0x000003e9, 0x00000be9, 0x000013e9, + 0x00001be9, 0x000023e9, 0x00002be9, 0x000033e9, 0x00003be9, + 0x00000169, 0x00000569, 0x00000969, 0x00000d69, 0x00001169, + 0x00001569, 0x00001969, 0x00001d69, 0x00002169, 0x00002569, + 0x00002969, 0x00002d69, 0x00003169, 0x00003569, 0x00003969, + 0x00003d69, 0x00000369, 0x00000769, 0x00000b69, 0x00000f69, + 0x00001369, 0x00001769, 0x00001b69, 0x00001f69, 0x00002369, + 0x00002769, 0x00002b69, 0x00002f69, 0x00003369, 0x00003769, + 0x00003b69, 0x00003f69, 0x00000089, 0x00000289, 0x00000489, + 0x00000689, 0x00000889, 0x00000a89, 0x00000c89, 0x00000e89, + 0x00001089, 0x00001289, 0x00001489, 0x00001689, 0x00001889, + 0x00001a89, 0x00001c89, 0x00001e89, 0x00002089, 0x00002289, + 0x00002489, 0x00002689, 0x00002889, 0x00002a89, 0x00002c89, + 0x00002e89, 0x00003089, 0x00003289, 0x00003489, 0x00003689, + 0x00003889, 0x00003a89, 0x00003c89, 0x00003e89, 0x000000ea, + 0x000004ea, 0x000008ea, 0x00000cea, 0x000010ea, 0x000014ea, + 0x000018ea, 0x00001cea, 0x000020ea, 0x000024ea, 0x000028ea, + 0x00002cea, 0x000030ea, 0x000034ea, 0x000038ea, 0x00003cea, + 0x000040ea, 0x000044ea, 0x000048ea, 0x00004cea, 0x000050ea, + 0x000054ea, 0x000058ea, 0x00005cea, 0x000060ea, 0x000064ea, + 0x000068ea, 0x00006cea, 0x000070ea, 0x000074ea, 0x000078ea, + 0x00007cea, 0x0000018a, 0x0000038a, 0x0000058a, 0x0000078a, + 0x0000098a, 0x00000b8a, 0x00000d8a, 0x00000f8a, 0x0000118a, + 0x0000138a, 0x0000158a, 0x0000178a, 0x0000198a, 0x00001b8a, + 0x00001d8a, 0x00001f8a, 0x0000218a, 0x0000238a, 0x0000258a, + 0x0000278a, 0x0000298a, 0x00002b8a, 0x00002d8a, 0x00002f8a, + 0x0000318a, 0x0000338a, 0x0000358a, 0x0000378a, 0x0000398a, + 0x00003b8a, 0x00003d8a, 0x00003f8a, 0x0000418a, 0x0000438a, + 0x0000458a, 0x0000478a, 0x0000498a, 0x00004b8a, 0x00004d8a, + 0x00004f8a, 0x0000518a, 0x0000538a, 0x0000558a, 0x0000578a, + 0x0000598a, 0x00005b8a, 0x00005d8a, 0x00005f8a, 0x0000618a, + 0x0000638a, 0x0000658a, 0x0000678a, 0x0000698a, 0x00006b8a, + 0x00006d8a, 0x00006f8a, 0x0000718a, 0x0000738a, 0x0000758a, + 0x0000778a, 0x0000798a, 0x00007b8a, 0x00007d8a, 0x00007f8a, + 0x0000004a, 0x0000024a, 0x0000044a, 0x0000064a, 0x0000084a, + 0x00000a4a, 0x00000c4a, 0x00000e4a, 0x0000104a, 0x0000124a, + 0x0000144a, 0x0000164a, 0x0000184a, 0x00001a4a, 0x00001c4a, + 0x00001e4a, 0x0000204a, 0x0000224a, 0x0000244a, 0x0000264a, + 0x0000284a, 0x00002a4a, 0x00002c4a, 0x00002e4a, 0x0000304a, + 0x0000324a, 0x0000344a, 0x0000364a, 0x0000384a, 0x00003a4a, + 0x00003c4a, 0x00003e4a, 0x0000404a, 0x0000424a, 0x0000444a, + 0x0000464a, 0x0000484a, 0x00004a4a, 0x00004c4a, 0x00004e4a, + 0x0000504a, 0x0000524a, 0x0000544a, 0x0000564a, 0x0000584a, + 0x00005a4a, 0x00005c4a, 0x00005e4a, 0x0000604a, 0x0000624a, + 0x0000644a, 0x0000664a, 0x0000684a, 0x00006a4a, 0x00006c4a, + 0x00006e4a, 0x0000704a, 0x0000724a, 0x0000744a, 0x0000764a, + 0x0000784a, 0x00007a4a, 0x00007c4a, 0x00007e4a, 0x0000014b, + 0x0000034b, 0x0000054b, 0x0000074b, 0x0000094b, 0x00000b4b, + 0x00000d4b, 0x00000f4b, 0x0000114b, 0x0000134b, 0x0000154b, + 0x0000174b, 0x0000194b, 0x00001b4b, 0x00001d4b, 0x00001f4b, + 0x0000214b, 0x0000234b, 0x0000254b, 0x0000274b, 0x0000294b, + 0x00002b4b, 0x00002d4b, 0x00002f4b, 0x0000314b, 0x0000334b, + 0x0000354b, 0x0000374b, 0x0000394b, 0x00003b4b, 0x00003d4b, + 0x00003f4b, 0x0000414b, 0x0000434b, 0x0000454b, 0x0000474b, + 0x0000494b, 0x00004b4b, 0x00004d4b, 0x00004f4b, 0x0000514b, + 0x0000534b, 0x0000554b, 0x0000574b, 0x0000594b, 0x00005b4b, + 0x00005d4b, 0x00005f4b, 0x0000614b, 0x0000634b, 0x0000654b, + 0x0000674b, 0x0000694b, 0x00006b4b, 0x00006d4b, 0x00006f4b, + 0x0000714b, 0x0000734b, 0x0000754b, 0x0000774b, 0x0000794b, + 0x00007b4b, 0x00007d4b, 0x00007f4b, 0x0000814b, 0x0000834b, + 0x0000854b, 0x0000874b, 0x0000894b, 0x00008b4b, 0x00008d4b, + 0x00008f4b, 0x0000914b, 0x0000934b, 0x0000954b, 0x0000974b, + 0x0000994b, 0x00009b4b, 0x00009d4b, 0x00009f4b, 0x0000a14b, + 0x0000a34b, 0x0000a54b, 0x0000a74b, 0x0000a94b, 0x0000ab4b, + 0x0000ad4b, 0x0000af4b, 0x0000b14b, 0x0000b34b, 0x0000b54b, + 0x0000b74b, 0x0000b94b, 0x0000bb4b, 0x0000bd4b, 0x0000bf4b, + 0x0000c14b, 0x0000c34b, 0x0000c54b, 0x0000c74b, 0x0000c94b, + 0x0000cb4b, 0x0000cd4b, 0x0000cf4b, 0x0000d14b, 0x0000d34b, + 0x0000d54b, 0x0000d74b, 0x0000d94b, 0x0000db4b, 0x0000dd4b, + 0x0000df4b, 0x0000e14b, 0x0000e34b, 0x0000e54b, 0x0000e74b, + 0x0000e94b, 0x0000eb4b, 0x0000ed4b, 0x0000ef4b, 0x0000f14b, + 0x0000f34b, 0x0000f54b, 0x0000f74b, 0x0000f94b, 0x0000fb4b, + 0x0000fd4b, 0x0000ff4b, 0x000000cb, 0x000002cb, 0x000004cb, + 0x000006cb, 0x000008cb, 0x00000acb, 0x00000ccb, 0x00000ecb, + 0x000010cb, 0x000012cb, 0x000014cb, 0x000016cb, 0x000018cb, + 0x00001acb, 0x00001ccb, 0x00001ecb, 0x000020cb, 0x000022cb, + 0x000024cb, 0x000026cb, 0x000028cb, 0x00002acb, 0x00002ccb, + 0x00002ecb, 0x000030cb, 0x000032cb, 0x000034cb, 0x000036cb, + 0x000038cb, 0x00003acb, 0x00003ccb, 0x00003ecb, 0x000040cb, + 0x000042cb, 0x000044cb, 0x000046cb, 0x000048cb, 0x00004acb, + 0x00004ccb, 0x00004ecb, 0x000050cb, 0x000052cb, 0x000054cb, + 0x000056cb, 0x000058cb, 0x00005acb, 0x00005ccb, 0x00005ecb, + 0x000060cb, 0x000062cb, 0x000064cb, 0x000066cb, 0x000068cb, + 0x00006acb, 0x00006ccb, 0x00006ecb, 0x000070cb, 0x000072cb, + 0x000074cb, 0x000076cb, 0x000078cb, 0x00007acb, 0x00007ccb, + 0x00007ecb, 0x000080cb, 0x000082cb, 0x000084cb, 0x000086cb, + 0x000088cb, 0x00008acb, 0x00008ccb, 0x00008ecb, 0x000090cb, + 0x000092cb, 0x000094cb, 0x000096cb, 0x000098cb, 0x00009acb, + 0x00009ccb, 0x00009ecb, 0x0000a0cb, 0x0000a2cb, 0x0000a4cb, + 0x0000a6cb, 0x0000a8cb, 0x0000aacb, 0x0000accb, 0x0000aecb, + 0x0000b0cb, 0x0000b2cb, 0x0000b4cb, 0x0000b6cb, 0x0000b8cb, + 0x0000bacb, 0x0000bccb, 0x0000becb, 0x0000c0cb, 0x0000c2cb, + 0x0000c4cb, 0x0000c6cb, 0x0000c8cb, 0x0000cacb, 0x0000cccb, + 0x0000cecb, 0x0000d0cb, 0x0000d2cb, 0x0000d4cb, 0x0000d6cb, + 0x0000d8cb, 0x0000dacb, 0x0000dccb, 0x0000decb, 0x0000e0cb, + 0x0000e2cb, 0x0000e4cb, 0x0000e6cb, 0x0000e8cb, 0x0000eacb, + 0x0000eccb, 0x0000eecb, 0x0000f0cb, 0x0000f2cb, 0x0000f4cb, + 0x0000f6cb, 0x0000f8cb, 0x0000facb, 0x0000fccb, 0x0000fecb, + 0x000001cc, 0x000003cc, 0x000005cc, 0x000007cc, 0x000009cc, + 0x00000bcc, 0x00000dcc, 0x00000fcc, 0x000011cc, 0x000013cc, + 0x000015cc, 0x000017cc, 0x000019cc, 0x00001bcc, 0x00001dcc, + 0x00001fcc, 0x000021cc, 0x000023cc, 0x000025cc, 0x000027cc, + 0x000029cc, 0x00002bcc, 0x00002dcc, 0x00002fcc, 0x000031cc, + 0x000033cc, 0x000035cc, 0x000037cc, 0x000039cc, 0x00003bcc, + 0x00003dcc, 0x00003fcc, 0x000041cc, 0x000043cc, 0x000045cc, + 0x000047cc, 0x000049cc, 0x00004bcc, 0x00004dcc, 0x00004fcc, + 0x000051cc, 0x000053cc, 0x000055cc, 0x000057cc, 0x000059cc, + 0x00005bcc, 0x00005dcc, 0x00005fcc, 0x000061cc, 0x000063cc, + 0x000065cc, 0x000067cc, 0x000069cc, 0x00006bcc, 0x00006dcc, + 0x00006fcc, 0x000071cc, 0x000073cc, 0x000075cc, 0x000077cc, + 0x000079cc, 0x00007bcc, 0x00007dcc, 0x00007fcc, 0x000081cc, + 0x000083cc, 0x000085cc, 0x000087cc, 0x000089cc, 0x00008bcc, + 0x00008dcc, 0x00008fcc, 0x000091cc, 0x000093cc, 0x000095cc, + 0x000097cc, 0x000099cc, 0x00009bcc, 0x00009dcc, 0x00009fcc, + 0x0000a1cc, 0x0000a3cc, 0x0000a5cc, 0x0000a7cc, 0x0000a9cc, + 0x0000abcc, 0x0000adcc, 0x0000afcc, 0x0000b1cc, 0x0000b3cc, + 0x0000b5cc, 0x0000b7cc, 0x0000b9cc, 0x0000bbcc, 0x0000bdcc, + 0x0000bfcc, 0x0000c1cc, 0x0000c3cc, 0x0000c5cc, 0x0000c7cc, + 0x0000c9cc, 0x0000cbcc, 0x0000cdcc, 0x0000cfcc, 0x0000d1cc, + 0x0000d3cc, 0x0000d5cc, 0x0000d7cc, 0x0000d9cc, 0x0000dbcc, + 0x0000ddcc, 0x0000dfcc, 0x0000e1cc, 0x0000e3cc, 0x0000e5cc, + 0x0000e7cc, 0x0000e9cc, 0x0000ebcc, 0x0000edcc, 0x0000efcc, + 0x0000f1cc, 0x0000f3cc, 0x0000f5cc, 0x0000f7cc, 0x0000f9cc, + 0x0000fbcc, 0x0000fdcc, 0x0000ffcc, 0x000101cc, 0x000103cc, + 0x000105cc, 0x000107cc, 0x000109cc, 0x00010bcc, 0x00010dcc, + 0x00010fcc, 0x000111cc, 0x000113cc, 0x000115cc, 0x000117cc, + 0x000119cc, 0x00011bcc, 0x00011dcc, 0x00011fcc, 0x000121cc, + 0x000123cc, 0x000125cc, 0x000127cc, 0x000129cc, 0x00012bcc, + 0x00012dcc, 0x00012fcc, 0x000131cc, 0x000133cc, 0x000135cc, + 0x000137cc, 0x000139cc, 0x00013bcc, 0x00013dcc, 0x00013fcc, + 0x000141cc, 0x000143cc, 0x000145cc, 0x000147cc, 0x000149cc, + 0x00014bcc, 0x00014dcc, 0x00014fcc, 0x000151cc, 0x000153cc, + 0x000155cc, 0x000157cc, 0x000159cc, 0x00015bcc, 0x00015dcc, + 0x00015fcc, 0x000161cc, 0x000163cc, 0x000165cc, 0x000167cc, + 0x000169cc, 0x00016bcc, 0x00016dcc, 0x00016fcc, 0x000171cc, + 0x000173cc, 0x000175cc, 0x000177cc, 0x000179cc, 0x00017bcc, + 0x00017dcc, 0x00017fcc, 0x000181cc, 0x000183cc, 0x000185cc, + 0x000187cc, 0x000189cc, 0x00018bcc, 0x00018dcc, 0x00018fcc, + 0x000191cc, 0x000193cc, 0x000195cc, 0x000197cc, 0x000199cc, + 0x00019bcc, 0x00019dcc, 0x00019fcc, 0x0001a1cc, 0x0001a3cc, + 0x0001a5cc, 0x0001a7cc, 0x0001a9cc, 0x0001abcc, 0x0001adcc, + 0x0001afcc, 0x0001b1cc, 0x0001b3cc, 0x0001b5cc, 0x0001b7cc, + 0x0001b9cc, 0x0001bbcc, 0x0001bdcc, 0x0001bfcc, 0x0001c1cc, + 0x0001c3cc, 0x0001c5cc, 0x0001c7cc, 0x0001c9cc, 0x0001cbcc, + 0x0001cdcc, 0x0001cfcc, 0x0001d1cc, 0x0001d3cc, 0x0001d5cc, + 0x0001d7cc, 0x0001d9cc, 0x0001dbcc, 0x0001ddcc, 0x0001dfcc, + 0x0001e1cc, 0x0001e3cc, 0x0001e5cc, 0x0001e7cc, 0x0001e9cc, + 0x0001ebcc, 0x0001edcc, 0x0001efcc, 0x0001f1cc, 0x0001f3cc, + 0x0001f5cc, 0x0001f7cc, 0x0001f9cc, 0x0001fbcc, 0x0001fdcc, + 0x0001ffcc, 0x0000002c, 0x0000022c, 0x0000042c, 0x0000062c, + 0x0000082c, 0x00000a2c, 0x00000c2c, 0x00000e2c, 0x0000102c, + 0x0000122c, 0x0000142c, 0x0000162c, 0x0000182c, 0x00001a2c, + 0x00001c2c, 0x00001e2c, 0x0000202c, 0x0000222c, 0x0000242c, + 0x0000262c, 0x0000282c, 0x00002a2c, 0x00002c2c, 0x00002e2c, + 0x0000302c, 0x0000322c, 0x0000342c, 0x0000362c, 0x0000382c, + 0x00003a2c, 0x00003c2c, 0x00003e2c, 0x0000402c, 0x0000422c, + 0x0000442c, 0x0000462c, 0x0000482c, 0x00004a2c, 0x00004c2c, + 0x00004e2c, 0x0000502c, 0x0000522c, 0x0000542c, 0x0000562c, + 0x0000582c, 0x00005a2c, 0x00005c2c, 0x00005e2c, 0x0000602c, + 0x0000622c, 0x0000642c, 0x0000662c, 0x0000682c, 0x00006a2c, + 0x00006c2c, 0x00006e2c, 0x0000702c, 0x0000722c, 0x0000742c, + 0x0000762c, 0x0000782c, 0x00007a2c, 0x00007c2c, 0x00007e2c, + 0x0000802c, 0x0000822c, 0x0000842c, 0x0000862c, 0x0000882c, + 0x00008a2c, 0x00008c2c, 0x00008e2c, 0x0000902c, 0x0000922c, + 0x0000942c, 0x0000962c, 0x0000982c, 0x00009a2c, 0x00009c2c, + 0x00009e2c, 0x0000a02c, 0x0000a22c, 0x0000a42c, 0x0000a62c, + 0x0000a82c, 0x0000aa2c, 0x0000ac2c, 0x0000ae2c, 0x0000b02c, + 0x0000b22c, 0x0000b42c, 0x0000b62c, 0x0000b82c, 0x0000ba2c, + 0x0000bc2c, 0x0000be2c, 0x0000c02c, 0x0000c22c, 0x0000c42c, + 0x0000c62c, 0x0000c82c, 0x0000ca2c, 0x0000cc2c, 0x0000ce2c, + 0x0000d02c, 0x0000d22c, 0x0000d42c, 0x0000d62c, 0x0000d82c, + 0x0000da2c, 0x0000dc2c, 0x0000de2c, 0x0000e02c, 0x0000e22c, + 0x0000e42c, 0x0000e62c, 0x0000e82c, 0x0000ea2c, 0x0000ec2c, + 0x0000ee2c, 0x0000f02c, 0x0000f22c, 0x0000f42c, 0x0000f62c, + 0x0000f82c, 0x0000fa2c, 0x0000fc2c, 0x0000fe2c, 0x0001002c, + 0x0001022c, 0x0001042c, 0x0001062c, 0x0001082c, 0x00010a2c, + 0x00010c2c, 0x00010e2c, 0x0001102c, 0x0001122c, 0x0001142c, + 0x0001162c, 0x0001182c, 0x00011a2c, 0x00011c2c, 0x00011e2c, + 0x0001202c, 0x0001222c, 0x0001242c, 0x0001262c, 0x0001282c, + 0x00012a2c, 0x00012c2c, 0x00012e2c, 0x0001302c, 0x0001322c, + 0x0001342c, 0x0001362c, 0x0001382c, 0x00013a2c, 0x00013c2c, + 0x00013e2c, 0x0001402c, 0x0001422c, 0x0001442c, 0x0001462c, + 0x0001482c, 0x00014a2c, 0x00014c2c, 0x00014e2c, 0x0001502c, + 0x0001522c, 0x0001542c, 0x0001562c, 0x0001582c, 0x00015a2c, + 0x00015c2c, 0x00015e2c, 0x0001602c, 0x0001622c, 0x0001642c, + 0x0001662c, 0x0001682c, 0x00016a2c, 0x00016c2c, 0x00016e2c, + 0x0001702c, 0x0001722c, 0x0001742c, 0x0001762c, 0x0001782c, + 0x00017a2c, 0x00017c2c, 0x00017e2c, 0x0001802c, 0x0001822c, + 0x0001842c, 0x0001862c, 0x0001882c, 0x00018a2c, 0x00018c2c, + 0x00018e2c, 0x0001902c, 0x0001922c, 0x0001942c, 0x0001962c, + 0x0001982c, 0x00019a2c, 0x00019c2c, 0x00019e2c, 0x0001a02c, + 0x0001a22c, 0x0001a42c, 0x0001a62c, 0x0001a82c, 0x0001aa2c, + 0x0001ac2c, 0x0001ae2c, 0x0001b02c, 0x0001b22c, 0x0001b42c, + 0x0001b62c, 0x0001b82c, 0x0001ba2c, 0x0001bc2c, 0x0001be2c, + 0x0001c02c, 0x0001c22c, 0x0001c42c, 0x0001c62c, 0x0001c82c, + 0x0001ca2c, 0x0001cc2c, 0x0001ce2c, 0x0001d02c, 0x0001d22c, + 0x0001d42c, 0x0001d62c, 0x0001d82c, 0x0001da2c, 0x0001dc2c, + 0x0001de2c, 0x0001e02c, 0x0001e22c, 0x0001e42c, 0x0001e62c, + 0x0001e82c, 0x0001ea2c, 0x0001ec2c, 0x0001ee2c, 0x0001f02c, + 0x0001f22c, 0x0001f42c, 0x0001f62c, 0x0001f82c, 0x0001fa2c, + 0x0001fc2c, 0x0001fe2c, 0x0000012d, 0x0000032d, 0x0000052d, + 0x0000072d, 0x0000092d, 0x00000b2d, 0x00000d2d, 0x00000f2d, + 0x0000112d, 0x0000132d, 0x0000152d, 0x0000172d, 0x0000192d, + 0x00001b2d, 0x00001d2d, 0x00001f2d, 0x0000212d, 0x0000232d, + 0x0000252d, 0x0000272d, 0x0000292d, 0x00002b2d, 0x00002d2d, + 0x00002f2d, 0x0000312d, 0x0000332d, 0x0000352d, 0x0000372d, + 0x0000392d, 0x00003b2d, 0x00003d2d, 0x00003f2d, 0x0000412d, + 0x0000432d, 0x0000452d, 0x0000472d, 0x0000492d, 0x00004b2d, + 0x00004d2d, 0x00004f2d, 0x0000512d, 0x0000532d, 0x0000552d, + 0x0000572d, 0x0000592d, 0x00005b2d, 0x00005d2d, 0x00005f2d, + 0x0000612d, 0x0000632d, 0x0000652d, 0x0000672d, 0x0000692d, + 0x00006b2d, 0x00006d2d, 0x00006f2d, 0x0000712d, 0x0000732d, + 0x0000752d, 0x0000772d, 0x0000792d, 0x00007b2d, 0x00007d2d, + 0x00007f2d, 0x0000812d, 0x0000832d, 0x0000852d, 0x0000872d, + 0x0000892d, 0x00008b2d, 0x00008d2d, 0x00008f2d, 0x0000912d, + 0x0000932d, 0x0000952d, 0x0000972d, 0x0000992d, 0x00009b2d, + 0x00009d2d, 0x00009f2d, 0x0000a12d, 0x0000a32d, 0x0000a52d, + 0x0000a72d, 0x0000a92d, 0x0000ab2d, 0x0000ad2d, 0x0000af2d, + 0x0000b12d, 0x0000b32d, 0x0000b52d, 0x0000b72d, 0x0000b92d, + 0x0000bb2d, 0x0000bd2d, 0x0000bf2d, 0x0000c12d, 0x0000c32d, + 0x0000c52d, 0x0000c72d, 0x0000c92d, 0x0000cb2d, 0x0000cd2d, + 0x0000cf2d, 0x0000d12d, 0x0000d32d, 0x0000d52d, 0x0000d72d, + 0x0000d92d, 0x0000db2d, 0x0000dd2d, 0x0000df2d, 0x0000e12d, + 0x0000e32d, 0x0000e52d, 0x0000e72d, 0x0000e92d, 0x0000eb2d, + 0x0000ed2d, 0x0000ef2d, 0x0000f12d, 0x0000f32d, 0x0000f52d, + 0x0000f72d, 0x0000f92d, 0x0000fb2d, 0x0000fd2d, 0x0000ff2d, + 0x0001012d, 0x0001032d, 0x0001052d, 0x0001072d, 0x0001092d, + 0x00010b2d, 0x00010d2d, 0x00010f2d, 0x0001112d, 0x0001132d, + 0x0001152d, 0x0001172d, 0x0001192d, 0x00011b2d, 0x00011d2d, + 0x00011f2d, 0x0001212d, 0x0001232d, 0x0001252d, 0x0001272d, + 0x0001292d, 0x00012b2d, 0x00012d2d, 0x00012f2d, 0x0001312d, + 0x0001332d, 0x0001352d, 0x0001372d, 0x0001392d, 0x00013b2d, + 0x00013d2d, 0x00013f2d, 0x0001412d, 0x0001432d, 0x0001452d, + 0x0001472d, 0x0001492d, 0x00014b2d, 0x00014d2d, 0x00014f2d, + 0x0001512d, 0x0001532d, 0x0001552d, 0x0001572d, 0x0001592d, + 0x00015b2d, 0x00015d2d, 0x00015f2d, 0x0001612d, 0x0001632d, + 0x0001652d, 0x0001672d, 0x0001692d, 0x00016b2d, 0x00016d2d, + 0x00016f2d, 0x0001712d, 0x0001732d, 0x0001752d, 0x0001772d, + 0x0001792d, 0x00017b2d, 0x00017d2d, 0x00017f2d, 0x0001812d, + 0x0001832d, 0x0001852d, 0x0001872d, 0x0001892d, 0x00018b2d, + 0x00018d2d, 0x00018f2d, 0x0001912d, 0x0001932d, 0x0001952d, + 0x0001972d, 0x0001992d, 0x00019b2d, 0x00019d2d, 0x00019f2d, + 0x0001a12d, 0x0001a32d, 0x0001a52d, 0x0001a72d, 0x0001a92d, + 0x0001ab2d, 0x0001ad2d, 0x0001af2d, 0x0001b12d, 0x0001b32d, + 0x0001b52d, 0x0001b72d, 0x0001b92d, 0x0001bb2d, 0x0001bd2d, + 0x0001bf2d, 0x0001c12d, 0x0001c32d, 0x0001c52d, 0x0001c72d, + 0x0001c92d, 0x0001cb2d, 0x0001cd2d, 0x0001cf2d, 0x0001d12d, + 0x0001d32d, 0x0001d52d, 0x0001d72d, 0x0001d92d, 0x0001db2d, + 0x0001dd2d, 0x0001df2d, 0x0001e12d, 0x0001e32d, 0x0001e52d, + 0x0001e72d, 0x0001e92d, 0x0001eb2d, 0x0001ed2d, 0x0001ef2d, + 0x0001f12d, 0x0001f32d, 0x0001f52d, 0x0001f72d, 0x0001f92d, + 0x0001fb2d, 0x0001fd2d, 0x0001ff2d, 0x0002012d, 0x0002032d, + 0x0002052d, 0x0002072d, 0x0002092d, 0x00020b2d, 0x00020d2d, + 0x00020f2d, 0x0002112d, 0x0002132d, 0x0002152d, 0x0002172d, + 0x0002192d, 0x00021b2d, 0x00021d2d, 0x00021f2d, 0x0002212d, + 0x0002232d, 0x0002252d, 0x0002272d, 0x0002292d, 0x00022b2d, + 0x00022d2d, 0x00022f2d, 0x0002312d, 0x0002332d, 0x0002352d, + 0x0002372d, 0x0002392d, 0x00023b2d, 0x00023d2d, 0x00023f2d, + 0x0002412d, 0x0002432d, 0x0002452d, 0x0002472d, 0x0002492d, + 0x00024b2d, 0x00024d2d, 0x00024f2d, 0x0002512d, 0x0002532d, + 0x0002552d, 0x0002572d, 0x0002592d, 0x00025b2d, 0x00025d2d, + 0x00025f2d, 0x0002612d, 0x0002632d, 0x0002652d, 0x0002672d, + 0x0002692d, 0x00026b2d, 0x00026d2d, 0x00026f2d, 0x0002712d, + 0x0002732d, 0x0002752d, 0x0002772d, 0x0002792d, 0x00027b2d, + 0x00027d2d, 0x00027f2d, 0x0002812d, 0x0002832d, 0x0002852d, + 0x0002872d, 0x0002892d, 0x00028b2d, 0x00028d2d, 0x00028f2d, + 0x0002912d, 0x0002932d, 0x0002952d, 0x0002972d, 0x0002992d, + 0x00029b2d, 0x00029d2d, 0x00029f2d, 0x0002a12d, 0x0002a32d, + 0x0002a52d, 0x0002a72d, 0x0002a92d, 0x0002ab2d, 0x0002ad2d, + 0x0002af2d, 0x0002b12d, 0x0002b32d, 0x0002b52d, 0x0002b72d, + 0x0002b92d, 0x0002bb2d, 0x0002bd2d, 0x0002bf2d, 0x0002c12d, + 0x0002c32d, 0x0002c52d, 0x0002c72d, 0x0002c92d, 0x0002cb2d, + 0x0002cd2d, 0x0002cf2d, 0x0002d12d, 0x0002d32d, 0x0002d52d, + 0x0002d72d, 0x0002d92d, 0x0002db2d, 0x0002dd2d, 0x0002df2d, + 0x0002e12d, 0x0002e32d, 0x0002e52d, 0x0002e72d, 0x0002e92d, + 0x0002eb2d, 0x0002ed2d, 0x0002ef2d, 0x0002f12d, 0x0002f32d, + 0x0002f52d, 0x0002f72d, 0x0002f92d, 0x0002fb2d, 0x0002fd2d, + 0x0002ff2d, 0x0003012d, 0x0003032d, 0x0003052d, 0x0003072d, + 0x0003092d, 0x00030b2d, 0x00030d2d, 0x00030f2d, 0x0003112d, + 0x0003132d, 0x0003152d, 0x0003172d, 0x0003192d, 0x00031b2d, + 0x00031d2d, 0x00031f2d, 0x0003212d, 0x0003232d, 0x0003252d, + 0x0003272d, 0x0003292d, 0x00032b2d, 0x00032d2d, 0x00032f2d, + 0x0003312d, 0x0003332d, 0x0003352d, 0x0003372d, 0x0003392d, + 0x00033b2d, 0x00033d2d, 0x00033f2d, 0x0003412d, 0x0003432d, + 0x0003452d, 0x0003472d, 0x0003492d, 0x00034b2d, 0x00034d2d, + 0x00034f2d, 0x0003512d, 0x0003532d, 0x0003552d, 0x0003572d, + 0x0003592d, 0x00035b2d, 0x00035d2d, 0x00035f2d, 0x0003612d, + 0x0003632d, 0x0003652d, 0x0003672d, 0x0003692d, 0x00036b2d, + 0x00036d2d, 0x00036f2d, 0x0003712d, 0x0003732d, 0x0003752d, + 0x0003772d, 0x0003792d, 0x00037b2d, 0x00037d2d, 0x00037f2d, + 0x0003812d, 0x0003832d, 0x0003852d, 0x0003872d, 0x0003892d, + 0x00038b2d, 0x00038d2d, 0x00038f2d, 0x0003912d, 0x0003932d, + 0x0003952d, 0x0003972d, 0x0003992d, 0x00039b2d, 0x00039d2d, + 0x00039f2d, 0x0003a12d, 0x0003a32d, 0x0003a52d, 0x0003a72d, + 0x0003a92d, 0x0003ab2d, 0x0003ad2d, 0x0003af2d, 0x0003b12d, + 0x0003b32d, 0x0003b52d, 0x0003b72d, 0x0003b92d, 0x0003bb2d, + 0x0003bd2d, 0x0003bf2d, 0x0003c12d, 0x0003c32d, 0x0003c52d, + 0x0003c72d, 0x0003c92d, 0x0003cb2d, 0x0003cd2d, 0x0003cf2d, + 0x0003d12d, 0x0003d32d, 0x0003d52d, 0x0003d72d, 0x0003d92d, + 0x0003db2d, 0x0003dd2d, 0x0003df2d, 0x0003e12d, 0x0003e32d, + 0x0003e52d, 0x0003e72d, 0x0003e92d, 0x0003eb2d, 0x0003ed2d, + 0x0003ef2d, 0x0003f12d, 0x0003f32d, 0x0003f52d, 0x0003f72d, + 0x0003f92d, 0x0003fb2d, 0x0003fd2d, 0x0003ff2d, 0x000002ee, + 0x000006ee, 0x00000aee, 0x00000eee, 0x000012ee, 0x000016ee, + 0x00001aee, 0x00001eee, 0x000022ee, 0x000026ee, 0x00002aee, + 0x00002eee, 0x000032ee, 0x000036ee, 0x00003aee, 0x00003eee, + 0x000042ee, 0x000046ee, 0x00004aee, 0x00004eee, 0x000052ee, + 0x000056ee, 0x00005aee, 0x00005eee, 0x000062ee, 0x000066ee, + 0x00006aee, 0x00006eee, 0x000072ee, 0x000076ee, 0x00007aee, + 0x00007eee, 0x000082ee, 0x000086ee, 0x00008aee, 0x00008eee, + 0x000092ee, 0x000096ee, 0x00009aee, 0x00009eee, 0x0000a2ee, + 0x0000a6ee, 0x0000aaee, 0x0000aeee, 0x0000b2ee, 0x0000b6ee, + 0x0000baee, 0x0000beee, 0x0000c2ee, 0x0000c6ee, 0x0000caee, + 0x0000ceee, 0x0000d2ee, 0x0000d6ee, 0x0000daee, 0x0000deee, + 0x0000e2ee, 0x0000e6ee, 0x0000eaee, 0x0000eeee, 0x0000f2ee, + 0x0000f6ee, 0x0000faee, 0x0000feee, 0x000102ee, 0x000106ee, + 0x00010aee, 0x00010eee, 0x000112ee, 0x000116ee, 0x00011aee, + 0x00011eee, 0x000122ee, 0x000126ee, 0x00012aee, 0x00012eee, + 0x000132ee, 0x000136ee, 0x00013aee, 0x00013eee, 0x000142ee, + 0x000146ee, 0x00014aee, 0x00014eee, 0x000152ee, 0x000156ee, + 0x00015aee, 0x00015eee, 0x000162ee, 0x000166ee, 0x00016aee, + 0x00016eee, 0x000172ee, 0x000176ee, 0x00017aee, 0x00017eee, + 0x000182ee, 0x000186ee, 0x00018aee, 0x00018eee, 0x000192ee, + 0x000196ee, 0x00019aee, 0x00019eee, 0x0001a2ee, 0x0001a6ee, + 0x0001aaee, 0x0001aeee, 0x0001b2ee, 0x0001b6ee, 0x0001baee, + 0x0001beee, 0x0001c2ee, 0x0001c6ee, 0x0001caee, 0x0001ceee, + 0x0001d2ee, 0x0001d6ee, 0x0001daee, 0x0001deee, 0x0001e2ee, + 0x0001e6ee, 0x0001eaee, 0x0001eeee, 0x0001f2ee, 0x0001f6ee, + 0x0001faee, 0x0001feee, 0x000202ee, 0x000206ee, 0x00020aee, + 0x00020eee, 0x000212ee, 0x000216ee, 0x00021aee, 0x00021eee, + 0x000222ee, 0x000226ee, 0x00022aee, 0x00022eee, 0x000232ee, + 0x000236ee, 0x00023aee, 0x00023eee, 0x000242ee, 0x000246ee, + 0x00024aee, 0x00024eee, 0x000252ee, 0x000256ee, 0x00025aee, + 0x00025eee, 0x000262ee, 0x000266ee, 0x00026aee, 0x00026eee, + 0x000272ee, 0x000276ee, 0x00027aee, 0x00027eee, 0x000282ee, + 0x000286ee, 0x00028aee, 0x00028eee, 0x000292ee, 0x000296ee, + 0x00029aee, 0x00029eee, 0x0002a2ee, 0x0002a6ee, 0x0002aaee, + 0x0002aeee, 0x0002b2ee, 0x0002b6ee, 0x0002baee, 0x0002beee, + 0x0002c2ee, 0x0002c6ee, 0x0002caee, 0x0002ceee, 0x0002d2ee, + 0x0002d6ee, 0x0002daee, 0x0002deee, 0x0002e2ee, 0x0002e6ee, + 0x0002eaee, 0x0002eeee, 0x0002f2ee, 0x0002f6ee, 0x0002faee, + 0x0002feee, 0x000302ee, 0x000306ee, 0x00030aee, 0x00030eee, + 0x000312ee, 0x000316ee, 0x00031aee, 0x00031eee, 0x000322ee, + 0x000326ee, 0x00032aee, 0x00032eee, 0x000332ee, 0x000336ee, + 0x00033aee, 0x00033eee, 0x000342ee, 0x000346ee, 0x00034aee, + 0x00034eee, 0x000352ee, 0x000356ee, 0x00035aee, 0x00035eee, + 0x000362ee, 0x000366ee, 0x00036aee, 0x00036eee, 0x000372ee, + 0x000376ee, 0x00037aee, 0x00037eee, 0x000382ee, 0x000386ee, + 0x00038aee, 0x00038eee, 0x000392ee, 0x000396ee, 0x00039aee, + 0x00039eee, 0x0003a2ee, 0x0003a6ee, 0x0003aaee, 0x0003aeee, + 0x0003b2ee, 0x0003b6ee, 0x0003baee, 0x0003beee, 0x0003c2ee, + 0x0003c6ee, 0x0003caee, 0x0003ceee, 0x0003d2ee, 0x0003d6ee, + 0x0003daee, 0x0003deee, 0x0003e2ee, 0x0003e6ee, 0x0003eaee, + 0x0003eeee, 0x0003f2ee, 0x0003f6ee, 0x0003faee, 0x0003feee, + 0x000402ee, 0x000406ee, 0x00040aee, 0x00040eee, 0x000412ee, + 0x000416ee, 0x00041aee, 0x00041eee, 0x000422ee, 0x000426ee, + 0x00042aee, 0x00042eee, 0x000432ee, 0x000436ee, 0x00043aee, + 0x00043eee, 0x000442ee, 0x000446ee, 0x00044aee, 0x00044eee, + 0x000452ee, 0x000456ee, 0x00045aee, 0x00045eee, 0x000462ee, + 0x000466ee, 0x00046aee, 0x00046eee, 0x000472ee, 0x000476ee, + 0x00047aee, 0x00047eee, 0x000482ee, 0x000486ee, 0x00048aee, + 0x00048eee, 0x000492ee, 0x000496ee, 0x00049aee, 0x00049eee, + 0x0004a2ee, 0x0004a6ee, 0x0004aaee, 0x0004aeee, 0x0004b2ee, + 0x0004b6ee, 0x0004baee, 0x0004beee, 0x0004c2ee, 0x0004c6ee, + 0x0004caee, 0x0004ceee, 0x0004d2ee, 0x0004d6ee, 0x0004daee, + 0x0004deee, 0x0004e2ee, 0x0004e6ee, 0x0004eaee, 0x0004eeee, + 0x0004f2ee, 0x0004f6ee, 0x0004faee, 0x0004feee, 0x000502ee, + 0x000506ee, 0x00050aee, 0x00050eee, 0x000512ee, 0x000516ee, + 0x00051aee, 0x00051eee, 0x000522ee, 0x000526ee, 0x00052aee, + 0x00052eee, 0x000532ee, 0x000536ee, 0x00053aee, 0x00053eee, + 0x000542ee, 0x000546ee, 0x00054aee, 0x00054eee, 0x000552ee, + 0x000556ee, 0x00055aee, 0x00055eee, 0x000562ee, 0x000566ee, + 0x00056aee, 0x00056eee, 0x000572ee, 0x000576ee, 0x00057aee, + 0x00057eee, 0x000582ee, 0x000586ee, 0x00058aee, 0x00058eee, + 0x000592ee, 0x000596ee, 0x00059aee, 0x00059eee, 0x0005a2ee, + 0x0005a6ee, 0x0005aaee, 0x0005aeee, 0x0005b2ee, 0x0005b6ee, + 0x0005baee, 0x0005beee, 0x0005c2ee, 0x0005c6ee, 0x0005caee, + 0x0005ceee, 0x0005d2ee, 0x0005d6ee, 0x0005daee, 0x0005deee, + 0x0005e2ee, 0x0005e6ee, 0x0005eaee, 0x0005eeee, 0x0005f2ee, + 0x0005f6ee, 0x0005faee, 0x0005feee, 0x000602ee, 0x000606ee, + 0x00060aee, 0x00060eee, 0x000612ee, 0x000616ee, 0x00061aee, + 0x00061eee, 0x000622ee, 0x000626ee, 0x00062aee, 0x00062eee, + 0x000632ee, 0x000636ee, 0x00063aee, 0x00063eee, 0x000642ee, + 0x000646ee, 0x00064aee, 0x00064eee, 0x000652ee, 0x000656ee, + 0x00065aee, 0x00065eee, 0x000662ee, 0x000666ee, 0x00066aee, + 0x00066eee, 0x000672ee, 0x000676ee, 0x00067aee, 0x00067eee, + 0x000682ee, 0x000686ee, 0x00068aee, 0x00068eee, 0x000692ee, + 0x000696ee, 0x00069aee, 0x00069eee, 0x0006a2ee, 0x0006a6ee, + 0x0006aaee, 0x0006aeee, 0x0006b2ee, 0x0006b6ee, 0x0006baee, + 0x0006beee, 0x0006c2ee, 0x0006c6ee, 0x0006caee, 0x0006ceee, + 0x0006d2ee, 0x0006d6ee, 0x0006daee, 0x0006deee, 0x0006e2ee, + 0x0006e6ee, 0x0006eaee, 0x0006eeee, 0x0006f2ee, 0x0006f6ee, + 0x0006faee, 0x0006feee, 0x000702ee, 0x000706ee, 0x00070aee, + 0x00070eee, 0x000712ee, 0x000716ee, 0x00071aee, 0x00071eee, + 0x000722ee, 0x000726ee, 0x00072aee, 0x00072eee, 0x000732ee, + 0x000736ee, 0x00073aee, 0x00073eee, 0x000742ee, 0x000746ee, + 0x00074aee, 0x00074eee, 0x000752ee, 0x000756ee, 0x00075aee, + 0x00075eee, 0x000762ee, 0x000766ee, 0x00076aee, 0x00076eee, + 0x000772ee, 0x000776ee, 0x00077aee, 0x00077eee, 0x000782ee, + 0x000786ee, 0x00078aee, 0x00078eee, 0x000792ee, 0x000796ee, + 0x00079aee, 0x00079eee, 0x0007a2ee, 0x0007a6ee, 0x0007aaee, + 0x0007aeee, 0x0007b2ee, 0x0007b6ee, 0x0007baee, 0x0007beee, + 0x0007c2ee, 0x0007c6ee, 0x0007caee, 0x0007ceee, 0x0007d2ee, + 0x0007d6ee, 0x0007daee, 0x0007deee, 0x0007e2ee, 0x0007e6ee, + 0x0007eaee, 0x0007eeee, 0x0007f2ee, 0x0007f6ee, 0x0007faee, + 0x0007feee, 0x0000000d, 0x0000010d, 0x0000020d, 0x0000030d, + 0x0000040d, 0x0000050d, 0x0000060d, 0x0000070d, 0x0000080d, + 0x0000090d, 0x00000a0d, 0x00000b0d, 0x00000c0d, 0x00000d0d, + 0x00000e0d, 0x00000f0d, 0x0000100d, 0x0000110d, 0x0000120d, + 0x0000130d, 0x0000140d, 0x0000150d, 0x0000160d, 0x0000170d, + 0x0000180d, 0x0000190d, 0x00001a0d, 0x00001b0d, 0x00001c0d, + 0x00001d0d, 0x00001e0d, 0x00001f0d, 0x0000200d, 0x0000210d, + 0x0000220d, 0x0000230d, 0x0000240d, 0x0000250d, 0x0000260d, + 0x0000270d, 0x0000280d, 0x0000290d, 0x00002a0d, 0x00002b0d, + 0x00002c0d, 0x00002d0d, 0x00002e0d, 0x00002f0d, 0x0000300d, + 0x0000310d, 0x0000320d, 0x0000330d, 0x0000340d, 0x0000350d, + 0x0000360d, 0x0000370d, 0x0000380d, 0x0000390d, 0x00003a0d, + 0x00003b0d, 0x00003c0d, 0x00003d0d, 0x00003e0d, 0x00003f0d, + 0x0000400d, 0x0000410d, 0x0000420d, 0x0000430d, 0x0000440d, + 0x0000450d, 0x0000460d, 0x0000470d, 0x0000480d, 0x0000490d, + 0x00004a0d, 0x00004b0d, 0x00004c0d, 0x00004d0d, 0x00004e0d, + 0x00004f0d, 0x0000500d, 0x0000510d, 0x0000520d, 0x0000530d, + 0x0000540d, 0x0000550d, 0x0000560d, 0x0000570d, 0x0000580d, + 0x0000590d, 0x00005a0d, 0x00005b0d, 0x00005c0d, 0x00005d0d, + 0x00005e0d, 0x00005f0d, 0x0000600d, 0x0000610d, 0x0000620d, + 0x0000630d, 0x0000640d, 0x0000650d, 0x0000660d, 0x0000670d, + 0x0000680d, 0x0000690d, 0x00006a0d, 0x00006b0d, 0x00006c0d, + 0x00006d0d, 0x00006e0d, 0x00006f0d, 0x0000700d, 0x0000710d, + 0x0000720d, 0x0000730d, 0x0000740d, 0x0000750d, 0x0000760d, + 0x0000770d, 0x0000780d, 0x0000790d, 0x00007a0d, 0x00007b0d, + 0x00007c0d, 0x00007d0d, 0x00007e0d, 0x00007f0d, 0x0000800d, + 0x0000810d, 0x0000820d, 0x0000830d, 0x0000840d, 0x0000850d, + 0x0000860d, 0x0000870d, 0x0000880d, 0x0000890d, 0x00008a0d, + 0x00008b0d, 0x00008c0d, 0x00008d0d, 0x00008e0d, 0x00008f0d, + 0x0000900d, 0x0000910d, 0x0000920d, 0x0000930d, 0x0000940d, + 0x0000950d, 0x0000960d, 0x0000970d, 0x0000980d, 0x0000990d, + 0x00009a0d, 0x00009b0d, 0x00009c0d, 0x00009d0d, 0x00009e0d, + 0x00009f0d, 0x0000a00d, 0x0000a10d, 0x0000a20d, 0x0000a30d, + 0x0000a40d, 0x0000a50d, 0x0000a60d, 0x0000a70d, 0x0000a80d, + 0x0000a90d, 0x0000aa0d, 0x0000ab0d, 0x0000ac0d, 0x0000ad0d, + 0x0000ae0d, 0x0000af0d, 0x0000b00d, 0x0000b10d, 0x0000b20d, + 0x0000b30d, 0x0000b40d, 0x0000b50d, 0x0000b60d, 0x0000b70d, + 0x0000b80d, 0x0000b90d, 0x0000ba0d, 0x0000bb0d, 0x0000bc0d, + 0x0000bd0d, 0x0000be0d, 0x0000bf0d, 0x0000c00d, 0x0000c10d, + 0x0000c20d, 0x0000c30d, 0x0000c40d, 0x0000c50d, 0x0000c60d, + 0x0000c70d, 0x0000c80d, 0x0000c90d, 0x0000ca0d, 0x0000cb0d, + 0x0000cc0d, 0x0000cd0d, 0x0000ce0d, 0x0000cf0d, 0x0000d00d, + 0x0000d10d, 0x0000d20d, 0x0000d30d, 0x0000d40d, 0x0000d50d, + 0x0000d60d, 0x0000d70d, 0x0000d80d, 0x0000d90d, 0x0000da0d, + 0x0000db0d, 0x0000dc0d, 0x0000dd0d, 0x0000de0d, 0x0000df0d, + 0x0000e00d, 0x0000e10d, 0x0000e20d, 0x0000e30d, 0x0000e40d, + 0x0000e50d, 0x0000e60d, 0x0000e70d, 0x0000e80d, 0x0000e90d, + 0x0000ea0d, 0x0000eb0d, 0x0000ec0d, 0x0000ed0d, 0x0000ee0d, + 0x0000ef0d, 0x0000f00d, 0x0000f10d, 0x0000f20d, 0x0000f30d, + 0x0000f40d, 0x0000f50d, 0x0000f60d, 0x0000f70d, 0x0000f80d, + 0x0000f90d, 0x0000fa0d, 0x0000fb0d, 0x0000fc0d, 0x0000fd0d, + 0x0000fe0d, 0x0000ff0d, 0x0001000d, 0x0001010d, 0x0001020d, + 0x0001030d, 0x0001040d, 0x0001050d, 0x0001060d, 0x0001070d, + 0x0001080d, 0x0001090d, 0x00010a0d, 0x00010b0d, 0x00010c0d, + 0x00010d0d, 0x00010e0d, 0x00010f0d, 0x0001100d, 0x0001110d, + 0x0001120d, 0x0001130d, 0x0001140d, 0x0001150d, 0x0001160d, + 0x0001170d, 0x0001180d, 0x0001190d, 0x00011a0d, 0x00011b0d, + 0x00011c0d, 0x00011d0d, 0x00011e0d, 0x00011f0d, 0x0001200d, + 0x0001210d, 0x0001220d, 0x0001230d, 0x0001240d, 0x0001250d, + 0x0001260d, 0x0001270d, 0x0001280d, 0x0001290d, 0x00012a0d, + 0x00012b0d, 0x00012c0d, 0x00012d0d, 0x00012e0d, 0x00012f0d, + 0x0001300d, 0x0001310d, 0x0001320d, 0x0001330d, 0x0001340d, + 0x0001350d, 0x0001360d, 0x0001370d, 0x0001380d, 0x0001390d, + 0x00013a0d, 0x00013b0d, 0x00013c0d, 0x00013d0d, 0x00013e0d, + 0x00013f0d, 0x0001400d, 0x0001410d, 0x0001420d, 0x0001430d, + 0x0001440d, 0x0001450d, 0x0001460d, 0x0001470d, 0x0001480d, + 0x0001490d, 0x00014a0d, 0x00014b0d, 0x00014c0d, 0x00014d0d, + 0x00014e0d, 0x00014f0d, 0x0001500d, 0x0001510d, 0x0001520d, + 0x0001530d, 0x0001540d, 0x0001550d, 0x0001560d, 0x0001570d, + 0x0001580d, 0x0001590d, 0x00015a0d, 0x00015b0d, 0x00015c0d, + 0x00015d0d, 0x00015e0d, 0x00015f0d, 0x0001600d, 0x0001610d, + 0x0001620d, 0x0001630d, 0x0001640d, 0x0001650d, 0x0001660d, + 0x0001670d, 0x0001680d, 0x0001690d, 0x00016a0d, 0x00016b0d, + 0x00016c0d, 0x00016d0d, 0x00016e0d, 0x00016f0d, 0x0001700d, + 0x0001710d, 0x0001720d, 0x0001730d, 0x0001740d, 0x0001750d, + 0x0001760d, 0x0001770d, 0x0001780d, 0x0001790d, 0x00017a0d, + 0x00017b0d, 0x00017c0d, 0x00017d0d, 0x00017e0d, 0x00017f0d, + 0x0001800d, 0x0001810d, 0x0001820d, 0x0001830d, 0x0001840d, + 0x0001850d, 0x0001860d, 0x0001870d, 0x0001880d, 0x0001890d, + 0x00018a0d, 0x00018b0d, 0x00018c0d, 0x00018d0d, 0x00018e0d, + 0x00018f0d, 0x0001900d, 0x0001910d, 0x0001920d, 0x0001930d, + 0x0001940d, 0x0001950d, 0x0001960d, 0x0001970d, 0x0001980d, + 0x0001990d, 0x00019a0d, 0x00019b0d, 0x00019c0d, 0x00019d0d, + 0x00019e0d, 0x00019f0d, 0x0001a00d, 0x0001a10d, 0x0001a20d, + 0x0001a30d, 0x0001a40d, 0x0001a50d, 0x0001a60d, 0x0001a70d, + 0x0001a80d, 0x0001a90d, 0x0001aa0d, 0x0001ab0d, 0x0001ac0d, + 0x0001ad0d, 0x0001ae0d, 0x0001af0d, 0x0001b00d, 0x0001b10d, + 0x0001b20d, 0x0001b30d, 0x0001b40d, 0x0001b50d, 0x0001b60d, + 0x0001b70d, 0x0001b80d, 0x0001b90d, 0x0001ba0d, 0x0001bb0d, + 0x0001bc0d, 0x0001bd0d, 0x0001be0d, 0x0001bf0d, 0x0001c00d, + 0x0001c10d, 0x0001c20d, 0x0001c30d, 0x0001c40d, 0x0001c50d, + 0x0001c60d, 0x0001c70d, 0x0001c80d, 0x0001c90d, 0x0001ca0d, + 0x0001cb0d, 0x0001cc0d, 0x0001cd0d, 0x0001ce0d, 0x0001cf0d, + 0x0001d00d, 0x0001d10d, 0x0001d20d, 0x0001d30d, 0x0001d40d, + 0x0001d50d, 0x0001d60d, 0x0001d70d, 0x0001d80d, 0x0001d90d, + 0x0001da0d, 0x0001db0d, 0x0001dc0d, 0x0001dd0d, 0x0001de0d, + 0x0001df0d, 0x0001e00d, 0x0001e10d, 0x0001e20d, 0x0001e30d, + 0x0001e40d, 0x0001e50d, 0x0001e60d, 0x0001e70d, 0x0001e80d, + 0x0001e90d, 0x0001ea0d, 0x0001eb0d, 0x0001ec0d, 0x0001ed0d, + 0x0001ee0d, 0x0001ef0d, 0x0001f00d, 0x0001f10d, 0x0001f20d, + 0x0001f30d, 0x0001f40d, 0x0001f50d, 0x0001f60d, 0x0001f70d, + 0x0001f80d, 0x0001f90d, 0x0001fa0d, 0x0001fb0d, 0x0001fc0d, + 0x0001fd0d, 0x0001fe0d, 0x0001ff0d, 0x0002000d, 0x0002010d, + 0x0002020d, 0x0002030d, 0x0002040d, 0x0002050d, 0x0002060d, + 0x0002070d, 0x0002080d, 0x0002090d, 0x00020a0d, 0x00020b0d, + 0x00020c0d, 0x00020d0d, 0x00020e0d, 0x00020f0d, 0x0002100d, + 0x0002110d, 0x0002120d, 0x0002130d, 0x0002140d, 0x0002150d, + 0x0002160d, 0x0002170d, 0x0002180d, 0x0002190d, 0x00021a0d, + 0x00021b0d, 0x00021c0d, 0x00021d0d, 0x00021e0d, 0x00021f0d, + 0x0002200d, 0x0002210d, 0x0002220d, 0x0002230d, 0x0002240d, + 0x0002250d, 0x0002260d, 0x0002270d, 0x0002280d, 0x0002290d, + 0x00022a0d, 0x00022b0d, 0x00022c0d, 0x00022d0d, 0x00022e0d, + 0x00022f0d, 0x0002300d, 0x0002310d, 0x0002320d, 0x0002330d, + 0x0002340d, 0x0002350d, 0x0002360d, 0x0002370d, 0x0002380d, + 0x0002390d, 0x00023a0d, 0x00023b0d, 0x00023c0d, 0x00023d0d, + 0x00023e0d, 0x00023f0d, 0x0002400d, 0x0002410d, 0x0002420d, + 0x0002430d, 0x0002440d, 0x0002450d, 0x0002460d, 0x0002470d, + 0x0002480d, 0x0002490d, 0x00024a0d, 0x00024b0d, 0x00024c0d, + 0x00024d0d, 0x00024e0d, 0x00024f0d, 0x0002500d, 0x0002510d, + 0x0002520d, 0x0002530d, 0x0002540d, 0x0002550d, 0x0002560d, + 0x0002570d, 0x0002580d, 0x0002590d, 0x00025a0d, 0x00025b0d, + 0x00025c0d, 0x00025d0d, 0x00025e0d, 0x00025f0d, 0x0002600d, + 0x0002610d, 0x0002620d, 0x0002630d, 0x0002640d, 0x0002650d, + 0x0002660d, 0x0002670d, 0x0002680d, 0x0002690d, 0x00026a0d, + 0x00026b0d, 0x00026c0d, 0x00026d0d, 0x00026e0d, 0x00026f0d, + 0x0002700d, 0x0002710d, 0x0002720d, 0x0002730d, 0x0002740d, + 0x0002750d, 0x0002760d, 0x0002770d, 0x0002780d, 0x0002790d, + 0x00027a0d, 0x00027b0d, 0x00027c0d, 0x00027d0d, 0x00027e0d, + 0x00027f0d, 0x0002800d, 0x0002810d, 0x0002820d, 0x0002830d, + 0x0002840d, 0x0002850d, 0x0002860d, 0x0002870d, 0x0002880d, + 0x0002890d, 0x00028a0d, 0x00028b0d, 0x00028c0d, 0x00028d0d, + 0x00028e0d, 0x00028f0d, 0x0002900d, 0x0002910d, 0x0002920d, + 0x0002930d, 0x0002940d, 0x0002950d, 0x0002960d, 0x0002970d, + 0x0002980d, 0x0002990d, 0x00029a0d, 0x00029b0d, 0x00029c0d, + 0x00029d0d, 0x00029e0d, 0x00029f0d, 0x0002a00d, 0x0002a10d, + 0x0002a20d, 0x0002a30d, 0x0002a40d, 0x0002a50d, 0x0002a60d, + 0x0002a70d, 0x0002a80d, 0x0002a90d, 0x0002aa0d, 0x0002ab0d, + 0x0002ac0d, 0x0002ad0d, 0x0002ae0d, 0x0002af0d, 0x0002b00d, + 0x0002b10d, 0x0002b20d, 0x0002b30d, 0x0002b40d, 0x0002b50d, + 0x0002b60d, 0x0002b70d, 0x0002b80d, 0x0002b90d, 0x0002ba0d, + 0x0002bb0d, 0x0002bc0d, 0x0002bd0d, 0x0002be0d, 0x0002bf0d, + 0x0002c00d, 0x0002c10d, 0x0002c20d, 0x0002c30d, 0x0002c40d, + 0x0002c50d, 0x0002c60d, 0x0002c70d, 0x0002c80d, 0x0002c90d, + 0x0002ca0d, 0x0002cb0d, 0x0002cc0d, 0x0002cd0d, 0x0002ce0d, + 0x0002cf0d, 0x0002d00d, 0x0002d10d, 0x0002d20d, 0x0002d30d, + 0x0002d40d, 0x0002d50d, 0x0002d60d, 0x0002d70d, 0x0002d80d, + 0x0002d90d, 0x0002da0d, 0x0002db0d, 0x0002dc0d, 0x0002dd0d, + 0x0002de0d, 0x0002df0d, 0x0002e00d, 0x0002e10d, 0x0002e20d, + 0x0002e30d, 0x0002e40d, 0x0002e50d, 0x0002e60d, 0x0002e70d, + 0x0002e80d, 0x0002e90d, 0x0002ea0d, 0x0002eb0d, 0x0002ec0d, + 0x0002ed0d, 0x0002ee0d, 0x0002ef0d, 0x0002f00d, 0x0002f10d, + 0x0002f20d, 0x0002f30d, 0x0002f40d, 0x0002f50d, 0x0002f60d, + 0x0002f70d, 0x0002f80d, 0x0002f90d, 0x0002fa0d, 0x0002fb0d, + 0x0002fc0d, 0x0002fd0d, 0x0002fe0d, 0x0002ff0d, 0x0003000d, + 0x0003010d, 0x0003020d, 0x0003030d, 0x0003040d, 0x0003050d, + 0x0003060d, 0x0003070d, 0x0003080d, 0x0003090d, 0x00030a0d, + 0x00030b0d, 0x00030c0d, 0x00030d0d, 0x00030e0d, 0x00030f0d, + 0x0003100d, 0x0003110d, 0x0003120d, 0x0003130d, 0x0003140d, + 0x0003150d, 0x0003160d, 0x0003170d, 0x0003180d, 0x0003190d, + 0x00031a0d, 0x00031b0d, 0x00031c0d, 0x00031d0d, 0x00031e0d, + 0x00031f0d, 0x0003200d, 0x0003210d, 0x0003220d, 0x0003230d, + 0x0003240d, 0x0003250d, 0x0003260d, 0x0003270d, 0x0003280d, + 0x0003290d, 0x00032a0d, 0x00032b0d, 0x00032c0d, 0x00032d0d, + 0x00032e0d, 0x00032f0d, 0x0003300d, 0x0003310d, 0x0003320d, + 0x0003330d, 0x0003340d, 0x0003350d, 0x0003360d, 0x0003370d, + 0x0003380d, 0x0003390d, 0x00033a0d, 0x00033b0d, 0x00033c0d, + 0x00033d0d, 0x00033e0d, 0x00033f0d, 0x0003400d, 0x0003410d, + 0x0003420d, 0x0003430d, 0x0003440d, 0x0003450d, 0x0003460d, + 0x0003470d, 0x0003480d, 0x0003490d, 0x00034a0d, 0x00034b0d, + 0x00034c0d, 0x00034d0d, 0x00034e0d, 0x00034f0d, 0x0003500d, + 0x0003510d, 0x0003520d, 0x0003530d, 0x0003540d, 0x0003550d, + 0x0003560d, 0x0003570d, 0x0003580d, 0x0003590d, 0x00035a0d, + 0x00035b0d, 0x00035c0d, 0x00035d0d, 0x00035e0d, 0x00035f0d, + 0x0003600d, 0x0003610d, 0x0003620d, 0x0003630d, 0x0003640d, + 0x0003650d, 0x0003660d, 0x0003670d, 0x0003680d, 0x0003690d, + 0x00036a0d, 0x00036b0d, 0x00036c0d, 0x00036d0d, 0x00036e0d, + 0x00036f0d, 0x0003700d, 0x0003710d, 0x0003720d, 0x0003730d, + 0x0003740d, 0x0003750d, 0x0003760d, 0x0003770d, 0x0003780d, + 0x0003790d, 0x00037a0d, 0x00037b0d, 0x00037c0d, 0x00037d0d, + 0x00037e0d, 0x00037f0d, 0x0003800d, 0x0003810d, 0x0003820d, + 0x0003830d, 0x0003840d, 0x0003850d, 0x0003860d, 0x0003870d, + 0x0003880d, 0x0003890d, 0x00038a0d, 0x00038b0d, 0x00038c0d, + 0x00038d0d, 0x00038e0d, 0x00038f0d, 0x0003900d, 0x0003910d, + 0x0003920d, 0x0003930d, 0x0003940d, 0x0003950d, 0x0003960d, + 0x0003970d, 0x0003980d, 0x0003990d, 0x00039a0d, 0x00039b0d, + 0x00039c0d, 0x00039d0d, 0x00039e0d, 0x00039f0d, 0x0003a00d, + 0x0003a10d, 0x0003a20d, 0x0003a30d, 0x0003a40d, 0x0003a50d, + 0x0003a60d, 0x0003a70d, 0x0003a80d, 0x0003a90d, 0x0003aa0d, + 0x0003ab0d, 0x0003ac0d, 0x0003ad0d, 0x0003ae0d, 0x0003af0d, + 0x0003b00d, 0x0003b10d, 0x0003b20d, 0x0003b30d, 0x0003b40d, + 0x0003b50d, 0x0003b60d, 0x0003b70d, 0x0003b80d, 0x0003b90d, + 0x0003ba0d, 0x0003bb0d, 0x0003bc0d, 0x0003bd0d, 0x0003be0d, + 0x0003bf0d, 0x0003c00d, 0x0003c10d, 0x0003c20d, 0x0003c30d, + 0x0003c40d, 0x0003c50d, 0x0003c60d, 0x0003c70d, 0x0003c80d, + 0x0003c90d, 0x0003ca0d, 0x0003cb0d, 0x0003cc0d, 0x0003cd0d, + 0x0003ce0d, 0x0003cf0d, 0x0003d00d, 0x0003d10d, 0x0003d20d, + 0x0003d30d, 0x0003d40d, 0x0003d50d, 0x0003d60d, 0x0003d70d, + 0x0003d80d, 0x0003d90d, 0x0003da0d, 0x0003db0d, 0x0003dc0d, + 0x0003dd0d, 0x0003de0d, 0x0003df0d, 0x0003e00d, 0x0003e10d, + 0x0003e20d, 0x0003e30d, 0x0003e40d, 0x0003e50d, 0x0003e60d, + 0x0003e70d, 0x0003e80d, 0x0003e90d, 0x0003ea0d, 0x0003eb0d, + 0x0003ec0d, 0x0003ed0d, 0x0003ee0d, 0x0003ef0d, 0x0003f00d, + 0x0003f10d, 0x0003f20d, 0x0003f30d, 0x0003f40d, 0x0003f50d, + 0x0003f60d, 0x0003f70d, 0x0003f80d, 0x0003f90d, 0x0003fa0d, + 0x0003fb0d, 0x0003fc0d, 0x0003fd0d, 0x0003fe0d, 0x0003ff0d, + 0x000000ae, 0x000002ae, 0x000004ae, 0x000006ae, 0x000008ae, + 0x00000aae, 0x00000cae, 0x00000eae, 0x000010ae, 0x000012ae, + 0x000014ae, 0x000016ae, 0x000018ae, 0x00001aae, 0x00001cae, + 0x00001eae, 0x000020ae, 0x000022ae, 0x000024ae, 0x000026ae, + 0x000028ae, 0x00002aae, 0x00002cae, 0x00002eae, 0x000030ae, + 0x000032ae, 0x000034ae, 0x000036ae, 0x000038ae, 0x00003aae, + 0x00003cae, 0x00003eae, 0x000040ae, 0x000042ae, 0x000044ae, + 0x000046ae, 0x000048ae, 0x00004aae, 0x00004cae, 0x00004eae, + 0x000050ae, 0x000052ae, 0x000054ae, 0x000056ae, 0x000058ae, + 0x00005aae, 0x00005cae, 0x00005eae, 0x000060ae, 0x000062ae, + 0x000064ae, 0x000066ae, 0x000068ae, 0x00006aae, 0x00006cae, + 0x00006eae, 0x000070ae, 0x000072ae, 0x000074ae, 0x000076ae, + 0x000078ae, 0x00007aae, 0x00007cae, 0x00007eae, 0x000080ae, + 0x000082ae, 0x000084ae, 0x000086ae, 0x000088ae, 0x00008aae, + 0x00008cae, 0x00008eae, 0x000090ae, 0x000092ae, 0x000094ae, + 0x000096ae, 0x000098ae, 0x00009aae, 0x00009cae, 0x00009eae, + 0x0000a0ae, 0x0000a2ae, 0x0000a4ae, 0x0000a6ae, 0x0000a8ae, + 0x0000aaae, 0x0000acae, 0x0000aeae, 0x0000b0ae, 0x0000b2ae, + 0x0000b4ae, 0x0000b6ae, 0x0000b8ae, 0x0000baae, 0x0000bcae, + 0x0000beae, 0x0000c0ae, 0x0000c2ae, 0x0000c4ae, 0x0000c6ae, + 0x0000c8ae, 0x0000caae, 0x0000ccae, 0x0000ceae, 0x0000d0ae, + 0x0000d2ae, 0x0000d4ae, 0x0000d6ae, 0x0000d8ae, 0x0000daae, + 0x0000dcae, 0x0000deae, 0x0000e0ae, 0x0000e2ae, 0x0000e4ae, + 0x0000e6ae, 0x0000e8ae, 0x0000eaae, 0x0000ecae, 0x0000eeae, + 0x0000f0ae, 0x0000f2ae, 0x0000f4ae, 0x0000f6ae, 0x0000f8ae, + 0x0000faae, 0x0000fcae, 0x0000feae, 0x000100ae, 0x000102ae, + 0x000104ae, 0x000106ae, 0x000108ae, 0x00010aae, 0x00010cae, + 0x00010eae, 0x000110ae, 0x000112ae, 0x000114ae, 0x000116ae, + 0x000118ae, 0x00011aae, 0x00011cae, 0x00011eae, 0x000120ae, + 0x000122ae, 0x000124ae, 0x000126ae, 0x000128ae, 0x00012aae, + 0x00012cae, 0x00012eae, 0x000130ae, 0x000132ae, 0x000134ae, + 0x000136ae, 0x000138ae, 0x00013aae, 0x00013cae, 0x00013eae, + 0x000140ae, 0x000142ae, 0x000144ae, 0x000146ae, 0x000148ae, + 0x00014aae, 0x00014cae, 0x00014eae, 0x000150ae, 0x000152ae, + 0x000154ae, 0x000156ae, 0x000158ae, 0x00015aae, 0x00015cae, + 0x00015eae, 0x000160ae, 0x000162ae, 0x000164ae, 0x000166ae, + 0x000168ae, 0x00016aae, 0x00016cae, 0x00016eae, 0x000170ae, + 0x000172ae, 0x000174ae, 0x000176ae, 0x000178ae, 0x00017aae, + 0x00017cae, 0x00017eae, 0x000180ae, 0x000182ae, 0x000184ae, + 0x000186ae, 0x000188ae, 0x00018aae, 0x00018cae, 0x00018eae, + 0x000190ae, 0x000192ae, 0x000194ae, 0x000196ae, 0x000198ae, + 0x00019aae, 0x00019cae, 0x00019eae, 0x0001a0ae, 0x0001a2ae, + 0x0001a4ae, 0x0001a6ae, 0x0001a8ae, 0x0001aaae, 0x0001acae, + 0x0001aeae, 0x0001b0ae, 0x0001b2ae, 0x0001b4ae, 0x0001b6ae, + 0x0001b8ae, 0x0001baae, 0x0001bcae, 0x0001beae, 0x0001c0ae, + 0x0001c2ae, 0x0001c4ae, 0x0001c6ae, 0x0001c8ae, 0x0001caae, + 0x0001ccae, 0x0001ceae, 0x0001d0ae, 0x0001d2ae, 0x0001d4ae, + 0x0001d6ae, 0x0001d8ae, 0x0001daae, 0x0001dcae, 0x0001deae, + 0x0001e0ae, 0x0001e2ae, 0x0001e4ae, 0x0001e6ae, 0x0001e8ae, + 0x0001eaae, 0x0001ecae, 0x0001eeae, 0x0001f0ae, 0x0001f2ae, + 0x0001f4ae, 0x0001f6ae, 0x0001f8ae, 0x0001faae, 0x0001fcae, + 0x0001feae, 0x000200ae, 0x000202ae, 0x000204ae, 0x000206ae, + 0x000208ae, 0x00020aae, 0x00020cae, 0x00020eae, 0x000210ae, + 0x000212ae, 0x000214ae, 0x000216ae, 0x000218ae, 0x00021aae, + 0x00021cae, 0x00021eae, 0x000220ae, 0x000222ae, 0x000224ae, + 0x000226ae, 0x000228ae, 0x00022aae, 0x00022cae, 0x00022eae, + 0x000230ae, 0x000232ae, 0x000234ae, 0x000236ae, 0x000238ae, + 0x00023aae, 0x00023cae, 0x00023eae, 0x000240ae, 0x000242ae, + 0x000244ae, 0x000246ae, 0x000248ae, 0x00024aae, 0x00024cae, + 0x00024eae, 0x000250ae, 0x000252ae, 0x000254ae, 0x000256ae, + 0x000258ae, 0x00025aae, 0x00025cae, 0x00025eae, 0x000260ae, + 0x000262ae, 0x000264ae, 0x000266ae, 0x000268ae, 0x00026aae, + 0x00026cae, 0x00026eae, 0x000270ae, 0x000272ae, 0x000274ae, + 0x000276ae, 0x000278ae, 0x00027aae, 0x00027cae, 0x00027eae, + 0x000280ae, 0x000282ae, 0x000284ae, 0x000286ae, 0x000288ae, + 0x00028aae, 0x00028cae, 0x00028eae, 0x000290ae, 0x000292ae, + 0x000294ae, 0x000296ae, 0x000298ae, 0x00029aae, 0x00029cae, + 0x00029eae, 0x0002a0ae, 0x0002a2ae, 0x0002a4ae, 0x0002a6ae, + 0x0002a8ae, 0x0002aaae, 0x0002acae, 0x0002aeae, 0x0002b0ae, + 0x0002b2ae, 0x0002b4ae, 0x0002b6ae, 0x0002b8ae, 0x0002baae, + 0x0002bcae, 0x0002beae, 0x0002c0ae, 0x0002c2ae, 0x0002c4ae, + 0x0002c6ae, 0x0002c8ae, 0x0002caae, 0x0002ccae, 0x0002ceae, + 0x0002d0ae, 0x0002d2ae, 0x0002d4ae, 0x0002d6ae, 0x0002d8ae, + 0x0002daae, 0x0002dcae, 0x0002deae, 0x0002e0ae, 0x0002e2ae, + 0x0002e4ae, 0x0002e6ae, 0x0002e8ae, 0x0002eaae, 0x0002ecae, + 0x0002eeae, 0x0002f0ae, 0x0002f2ae, 0x0002f4ae, 0x0002f6ae, + 0x0002f8ae, 0x0002faae, 0x0002fcae, 0x0002feae, 0x000300ae, + 0x000302ae, 0x000304ae, 0x000306ae, 0x000308ae, 0x00030aae, + 0x00030cae, 0x00030eae, 0x000310ae, 0x000312ae, 0x000314ae, + 0x000316ae, 0x000318ae, 0x00031aae, 0x00031cae, 0x00031eae, + 0x000320ae, 0x000322ae, 0x000324ae, 0x000326ae, 0x000328ae, + 0x00032aae, 0x00032cae, 0x00032eae, 0x000330ae, 0x000332ae, + 0x000334ae, 0x000336ae, 0x000338ae, 0x00033aae, 0x00033cae, + 0x00033eae, 0x000340ae, 0x000342ae, 0x000344ae, 0x000346ae, + 0x000348ae, 0x00034aae, 0x00034cae, 0x00034eae, 0x000350ae, + 0x000352ae, 0x000354ae, 0x000356ae, 0x000358ae, 0x00035aae, + 0x00035cae, 0x00035eae, 0x000360ae, 0x000362ae, 0x000364ae, + 0x000366ae, 0x000368ae, 0x00036aae, 0x00036cae, 0x00036eae, + 0x000370ae, 0x000372ae, 0x000374ae, 0x000376ae, 0x000378ae, + 0x00037aae, 0x00037cae, 0x00037eae, 0x000380ae, 0x000382ae, + 0x000384ae, 0x000386ae, 0x000388ae, 0x00038aae, 0x00038cae, + 0x00038eae, 0x000390ae, 0x000392ae, 0x000394ae, 0x000396ae, + 0x000398ae, 0x00039aae, 0x00039cae, 0x00039eae, 0x0003a0ae, + 0x0003a2ae, 0x0003a4ae, 0x0003a6ae, 0x0003a8ae, 0x0003aaae, + 0x0003acae, 0x0003aeae, 0x0003b0ae, 0x0003b2ae, 0x0003b4ae, + 0x0003b6ae, 0x0003b8ae, 0x0003baae, 0x0003bcae, 0x0003beae, + 0x0003c0ae, 0x0003c2ae, 0x0003c4ae, 0x0003c6ae, 0x0003c8ae, + 0x0003caae, 0x0003ccae, 0x0003ceae, 0x0003d0ae, 0x0003d2ae, + 0x0003d4ae, 0x0003d6ae, 0x0003d8ae, 0x0003daae, 0x0003dcae, + 0x0003deae, 0x0003e0ae, 0x0003e2ae, 0x0003e4ae, 0x0003e6ae, + 0x0003e8ae, 0x0003eaae, 0x0003ecae, 0x0003eeae, 0x0003f0ae, + 0x0003f2ae, 0x0003f4ae, 0x0003f6ae, 0x0003f8ae, 0x0003faae, + 0x0003fcae, 0x0003feae, 0x000400ae, 0x000402ae, 0x000404ae, + 0x000406ae, 0x000408ae, 0x00040aae, 0x00040cae, 0x00040eae, + 0x000410ae, 0x000412ae, 0x000414ae, 0x000416ae, 0x000418ae, + 0x00041aae, 0x00041cae, 0x00041eae, 0x000420ae, 0x000422ae, + 0x000424ae, 0x000426ae, 0x000428ae, 0x00042aae, 0x00042cae, + 0x00042eae, 0x000430ae, 0x000432ae, 0x000434ae, 0x000436ae, + 0x000438ae, 0x00043aae, 0x00043cae, 0x00043eae, 0x000440ae, + 0x000442ae, 0x000444ae, 0x000446ae, 0x000448ae, 0x00044aae, + 0x00044cae, 0x00044eae, 0x000450ae, 0x000452ae, 0x000454ae, + 0x000456ae, 0x000458ae, 0x00045aae, 0x00045cae, 0x00045eae, + 0x000460ae, 0x000462ae, 0x000464ae, 0x000466ae, 0x000468ae, + 0x00046aae, 0x00046cae, 0x00046eae, 0x000470ae, 0x000472ae, + 0x000474ae, 0x000476ae, 0x000478ae, 0x00047aae, 0x00047cae, + 0x00047eae, 0x000480ae, 0x000482ae, 0x000484ae, 0x000486ae, + 0x000488ae, 0x00048aae, 0x00048cae, 0x00048eae, 0x000490ae, + 0x000492ae, 0x000494ae, 0x000496ae, 0x000498ae, 0x00049aae, + 0x00049cae, 0x00049eae, 0x0004a0ae, 0x0004a2ae, 0x0004a4ae, + 0x0004a6ae, 0x0004a8ae, 0x0004aaae, 0x0004acae, 0x0004aeae, + 0x0004b0ae, 0x0004b2ae, 0x0004b4ae, 0x0004b6ae, 0x0004b8ae, + 0x0004baae, 0x0004bcae, 0x0004beae, 0x0004c0ae, 0x0004c2ae, + 0x0004c4ae, 0x0004c6ae, 0x0004c8ae, 0x0004caae, 0x0004ccae, + 0x0004ceae, 0x0004d0ae, 0x0004d2ae, 0x0004d4ae, 0x0004d6ae, + 0x0004d8ae, 0x0004daae, 0x0004dcae, 0x0004deae, 0x0004e0ae, + 0x0004e2ae, 0x0004e4ae, 0x0004e6ae, 0x0004e8ae, 0x0004eaae, + 0x0004ecae, 0x0004eeae, 0x0004f0ae, 0x0004f2ae, 0x0004f4ae, + 0x0004f6ae, 0x0004f8ae, 0x0004faae, 0x0004fcae, 0x0004feae, + 0x000500ae, 0x000502ae, 0x000504ae, 0x000506ae, 0x000508ae, + 0x00050aae, 0x00050cae, 0x00050eae, 0x000510ae, 0x000512ae, + 0x000514ae, 0x000516ae, 0x000518ae, 0x00051aae, 0x00051cae, + 0x00051eae, 0x000520ae, 0x000522ae, 0x000524ae, 0x000526ae, + 0x000528ae, 0x00052aae, 0x00052cae, 0x00052eae, 0x000530ae, + 0x000532ae, 0x000534ae, 0x000536ae, 0x000538ae, 0x00053aae, + 0x00053cae, 0x00053eae, 0x000540ae, 0x000542ae, 0x000544ae, + 0x000546ae, 0x000548ae, 0x00054aae, 0x00054cae, 0x00054eae, + 0x000550ae, 0x000552ae, 0x000554ae, 0x000556ae, 0x000558ae, + 0x00055aae, 0x00055cae, 0x00055eae, 0x000560ae, 0x000562ae, + 0x000564ae, 0x000566ae, 0x000568ae, 0x00056aae, 0x00056cae, + 0x00056eae, 0x000570ae, 0x000572ae, 0x000574ae, 0x000576ae, + 0x000578ae, 0x00057aae, 0x00057cae, 0x00057eae, 0x000580ae, + 0x000582ae, 0x000584ae, 0x000586ae, 0x000588ae, 0x00058aae, + 0x00058cae, 0x00058eae, 0x000590ae, 0x000592ae, 0x000594ae, + 0x000596ae, 0x000598ae, 0x00059aae, 0x00059cae, 0x00059eae, + 0x0005a0ae, 0x0005a2ae, 0x0005a4ae, 0x0005a6ae, 0x0005a8ae, + 0x0005aaae, 0x0005acae, 0x0005aeae, 0x0005b0ae, 0x0005b2ae, + 0x0005b4ae, 0x0005b6ae, 0x0005b8ae, 0x0005baae, 0x0005bcae, + 0x0005beae, 0x0005c0ae, 0x0005c2ae, 0x0005c4ae, 0x0005c6ae, + 0x0005c8ae, 0x0005caae, 0x0005ccae, 0x0005ceae, 0x0005d0ae, + 0x0005d2ae, 0x0005d4ae, 0x0005d6ae, 0x0005d8ae, 0x0005daae, + 0x0005dcae, 0x0005deae, 0x0005e0ae, 0x0005e2ae, 0x0005e4ae, + 0x0005e6ae, 0x0005e8ae, 0x0005eaae, 0x0005ecae, 0x0005eeae, + 0x0005f0ae, 0x0005f2ae, 0x0005f4ae, 0x0005f6ae, 0x0005f8ae, + 0x0005faae, 0x0005fcae, 0x0005feae, 0x000600ae, 0x000602ae, + 0x000604ae, 0x000606ae, 0x000608ae, 0x00060aae, 0x00060cae, + 0x00060eae, 0x000610ae, 0x000612ae, 0x000614ae, 0x000616ae, + 0x000618ae, 0x00061aae, 0x00061cae, 0x00061eae, 0x000620ae, + 0x000622ae, 0x000624ae, 0x000626ae, 0x000628ae, 0x00062aae, + 0x00062cae, 0x00062eae, 0x000630ae, 0x000632ae, 0x000634ae, + 0x000636ae, 0x000638ae, 0x00063aae, 0x00063cae, 0x00063eae, + 0x000640ae, 0x000642ae, 0x000644ae, 0x000646ae, 0x000648ae, + 0x00064aae, 0x00064cae, 0x00064eae, 0x000650ae, 0x000652ae, + 0x000654ae, 0x000656ae, 0x000658ae, 0x00065aae, 0x00065cae, + 0x00065eae, 0x000660ae, 0x000662ae, 0x000664ae, 0x000666ae, + 0x000668ae, 0x00066aae, 0x00066cae, 0x00066eae, 0x000670ae, + 0x000672ae, 0x000674ae, 0x000676ae, 0x000678ae, 0x00067aae, + 0x00067cae, 0x00067eae, 0x000680ae, 0x000682ae, 0x000684ae, + 0x000686ae, 0x000688ae, 0x00068aae, 0x00068cae, 0x00068eae, + 0x000690ae, 0x000692ae, 0x000694ae, 0x000696ae, 0x000698ae, + 0x00069aae, 0x00069cae, 0x00069eae, 0x0006a0ae, 0x0006a2ae, + 0x0006a4ae, 0x0006a6ae, 0x0006a8ae, 0x0006aaae, 0x0006acae, + 0x0006aeae, 0x0006b0ae, 0x0006b2ae, 0x0006b4ae, 0x0006b6ae, + 0x0006b8ae, 0x0006baae, 0x0006bcae, 0x0006beae, 0x0006c0ae, + 0x0006c2ae, 0x0006c4ae, 0x0006c6ae, 0x0006c8ae, 0x0006caae, + 0x0006ccae, 0x0006ceae, 0x0006d0ae, 0x0006d2ae, 0x0006d4ae, + 0x0006d6ae, 0x0006d8ae, 0x0006daae, 0x0006dcae, 0x0006deae, + 0x0006e0ae, 0x0006e2ae, 0x0006e4ae, 0x0006e6ae, 0x0006e8ae, + 0x0006eaae, 0x0006ecae, 0x0006eeae, 0x0006f0ae, 0x0006f2ae, + 0x0006f4ae, 0x0006f6ae, 0x0006f8ae, 0x0006faae, 0x0006fcae, + 0x0006feae, 0x000700ae, 0x000702ae, 0x000704ae, 0x000706ae, + 0x000708ae, 0x00070aae, 0x00070cae, 0x00070eae, 0x000710ae, + 0x000712ae, 0x000714ae, 0x000716ae, 0x000718ae, 0x00071aae, + 0x00071cae, 0x00071eae, 0x000720ae, 0x000722ae, 0x000724ae, + 0x000726ae, 0x000728ae, 0x00072aae, 0x00072cae, 0x00072eae, + 0x000730ae, 0x000732ae, 0x000734ae, 0x000736ae, 0x000738ae, + 0x00073aae, 0x00073cae, 0x00073eae, 0x000740ae, 0x000742ae, + 0x000744ae, 0x000746ae, 0x000748ae, 0x00074aae, 0x00074cae, + 0x00074eae, 0x000750ae, 0x000752ae, 0x000754ae, 0x000756ae, + 0x000758ae, 0x00075aae, 0x00075cae, 0x00075eae, 0x000760ae, + 0x000762ae, 0x000764ae, 0x000766ae, 0x000768ae, 0x00076aae, + 0x00076cae, 0x00076eae, 0x000770ae, 0x000772ae, 0x000774ae, + 0x000776ae, 0x000778ae, 0x00077aae, 0x00077cae, 0x00077eae, + 0x000780ae, 0x000782ae, 0x000784ae, 0x000786ae, 0x000788ae, + 0x00078aae, 0x00078cae, 0x00078eae, 0x000790ae, 0x000792ae, + 0x000794ae, 0x000796ae, 0x000798ae, 0x00079aae, 0x00079cae, + 0x00079eae, 0x0007a0ae, 0x0007a2ae, 0x0007a4ae, 0x0007a6ae, + 0x0007a8ae, 0x0007aaae, 0x0007acae, 0x0007aeae, 0x0007b0ae, + 0x0007b2ae, 0x0007b4ae, 0x0007b6ae, 0x0007b8ae, 0x0007baae, + 0x0007bcae, 0x0007beae, 0x0007c0ae, 0x0007c2ae, 0x0007c4ae, + 0x0007c6ae, 0x0007c8ae, 0x0007caae, 0x0007ccae, 0x0007ceae, + 0x0007d0ae, 0x0007d2ae, 0x0007d4ae, 0x0007d6ae, 0x0007d8ae, + 0x0007daae, 0x0007dcae, 0x0007deae, 0x0007e0ae, 0x0007e2ae, + 0x0007e4ae, 0x0007e6ae, 0x0007e8ae, 0x0007eaae, 0x0007ecae, + 0x0007eeae, 0x0007f0ae, 0x0007f2ae, 0x0007f4ae, 0x0007f6ae, + 0x0007f8ae, 0x0007faae, 0x0007fcae, 0x0007feae, 0x000001af, + 0x000003af, 0x000005af, 0x000007af, 0x000009af, 0x00000baf, + 0x00000daf, 0x00000faf, 0x000011af, 0x000013af, 0x000015af, + 0x000017af, 0x000019af, 0x00001baf, 0x00001daf, 0x00001faf, + 0x000021af, 0x000023af, 0x000025af, 0x000027af, 0x000029af, + 0x00002baf, 0x00002daf, 0x00002faf, 0x000031af, 0x000033af, + 0x000035af, 0x000037af, 0x000039af, 0x00003baf, 0x00003daf, + 0x00003faf, 0x000041af, 0x000043af, 0x000045af, 0x000047af, + 0x000049af, 0x00004baf, 0x00004daf, 0x00004faf, 0x000051af, + 0x000053af, 0x000055af, 0x000057af, 0x000059af, 0x00005baf, + 0x00005daf, 0x00005faf, 0x000061af, 0x000063af, 0x000065af, + 0x000067af, 0x000069af, 0x00006baf, 0x00006daf, 0x00006faf, + 0x000071af, 0x000073af, 0x000075af, 0x000077af, 0x000079af, + 0x00007baf, 0x00007daf, 0x00007faf, 0x000081af, 0x000083af, + 0x000085af, 0x000087af, 0x000089af, 0x00008baf, 0x00008daf, + 0x00008faf, 0x000091af, 0x000093af, 0x000095af, 0x000097af, + 0x000099af, 0x00009baf, 0x00009daf, 0x00009faf, 0x0000a1af, + 0x0000a3af, 0x0000a5af, 0x0000a7af, 0x0000a9af, 0x0000abaf, + 0x0000adaf, 0x0000afaf, 0x0000b1af, 0x0000b3af, 0x0000b5af, + 0x0000b7af, 0x0000b9af, 0x0000bbaf, 0x0000bdaf, 0x0000bfaf, + 0x0000c1af, 0x0000c3af, 0x0000c5af, 0x0000c7af, 0x0000c9af, + 0x0000cbaf, 0x0000cdaf, 0x0000cfaf, 0x0000d1af, 0x0000d3af, + 0x0000d5af, 0x0000d7af, 0x0000d9af, 0x0000dbaf, 0x0000ddaf, + 0x0000dfaf, 0x0000e1af, 0x0000e3af, 0x0000e5af, 0x0000e7af, + 0x0000e9af, 0x0000ebaf, 0x0000edaf, 0x0000efaf, 0x0000f1af, + 0x0000f3af, 0x0000f5af, 0x0000f7af, 0x0000f9af, 0x0000fbaf, + 0x0000fdaf, 0x0000ffaf, 0x000101af, 0x000103af, 0x000105af, + 0x000107af, 0x000109af, 0x00010baf, 0x00010daf, 0x00010faf, + 0x000111af, 0x000113af, 0x000115af, 0x000117af, 0x000119af, + 0x00011baf, 0x00011daf, 0x00011faf, 0x000121af, 0x000123af, + 0x000125af, 0x000127af, 0x000129af, 0x00012baf, 0x00012daf, + 0x00012faf, 0x000131af, 0x000133af, 0x000135af, 0x000137af, + 0x000139af, 0x00013baf, 0x00013daf, 0x00013faf, 0x000141af, + 0x000143af, 0x000145af, 0x000147af, 0x000149af, 0x00014baf, + 0x00014daf, 0x00014faf, 0x000151af, 0x000153af, 0x000155af, + 0x000157af, 0x000159af, 0x00015baf, 0x00015daf, 0x00015faf, + 0x000161af, 0x000163af, 0x000165af, 0x000167af, 0x000169af, + 0x00016baf, 0x00016daf, 0x00016faf, 0x000171af, 0x000173af, + 0x000175af, 0x000177af, 0x000179af, 0x00017baf, 0x00017daf, + 0x00017faf, 0x000181af, 0x000183af, 0x000185af, 0x000187af, + 0x000189af, 0x00018baf, 0x00018daf, 0x00018faf, 0x000191af, + 0x000193af, 0x000195af, 0x000197af, 0x000199af, 0x00019baf, + 0x00019daf, 0x00019faf, 0x0001a1af, 0x0001a3af, 0x0001a5af, + 0x0001a7af, 0x0001a9af, 0x0001abaf, 0x0001adaf, 0x0001afaf, + 0x0001b1af, 0x0001b3af, 0x0001b5af, 0x0001b7af, 0x0001b9af, + 0x0001bbaf, 0x0001bdaf, 0x0001bfaf, 0x0001c1af, 0x0001c3af, + 0x0001c5af, 0x0001c7af, 0x0001c9af, 0x0001cbaf, 0x0001cdaf, + 0x0001cfaf, 0x0001d1af, 0x0001d3af, 0x0001d5af, 0x0001d7af, + 0x0001d9af, 0x0001dbaf, 0x0001ddaf, 0x0001dfaf, 0x0001e1af, + 0x0001e3af, 0x0001e5af, 0x0001e7af, 0x0001e9af, 0x0001ebaf, + 0x0001edaf, 0x0001efaf, 0x0001f1af, 0x0001f3af, 0x0001f5af, + 0x0001f7af, 0x0001f9af, 0x0001fbaf, 0x0001fdaf, 0x0001ffaf, + 0x000201af, 0x000203af, 0x000205af, 0x000207af, 0x000209af, + 0x00020baf, 0x00020daf, 0x00020faf, 0x000211af, 0x000213af, + 0x000215af, 0x000217af, 0x000219af, 0x00021baf, 0x00021daf, + 0x00021faf, 0x000221af, 0x000223af, 0x000225af, 0x000227af, + 0x000229af, 0x00022baf, 0x00022daf, 0x00022faf, 0x000231af, + 0x000233af, 0x000235af, 0x000237af, 0x000239af, 0x00023baf, + 0x00023daf, 0x00023faf, 0x000241af, 0x000243af, 0x000245af, + 0x000247af, 0x000249af, 0x00024baf, 0x00024daf, 0x00024faf, + 0x000251af, 0x000253af, 0x000255af, 0x000257af, 0x000259af, + 0x00025baf, 0x00025daf, 0x00025faf, 0x000261af, 0x000263af, + 0x000265af, 0x000267af, 0x000269af, 0x00026baf, 0x00026daf, + 0x00026faf, 0x000271af, 0x000273af, 0x000275af, 0x000277af, + 0x000279af, 0x00027baf, 0x00027daf, 0x00027faf, 0x000281af, + 0x000283af, 0x000285af, 0x000287af, 0x000289af, 0x00028baf, + 0x00028daf, 0x00028faf, 0x000291af, 0x000293af, 0x000295af, + 0x000297af, 0x000299af, 0x00029baf, 0x00029daf, 0x00029faf, + 0x0002a1af, 0x0002a3af, 0x0002a5af, 0x0002a7af, 0x0002a9af, + 0x0002abaf, 0x0002adaf, 0x0002afaf, 0x0002b1af, 0x0002b3af, + 0x0002b5af, 0x0002b7af, 0x0002b9af, 0x0002bbaf, 0x0002bdaf, + 0x0002bfaf, 0x0002c1af, 0x0002c3af, 0x0002c5af, 0x0002c7af, + 0x0002c9af, 0x0002cbaf, 0x0002cdaf, 0x0002cfaf, 0x0002d1af, + 0x0002d3af, 0x0002d5af, 0x0002d7af, 0x0002d9af, 0x0002dbaf, + 0x0002ddaf, 0x0002dfaf, 0x0002e1af, 0x0002e3af, 0x0002e5af, + 0x0002e7af, 0x0002e9af, 0x0002ebaf, 0x0002edaf, 0x0002efaf, + 0x0002f1af, 0x0002f3af, 0x0002f5af, 0x0002f7af, 0x0002f9af, + 0x0002fbaf, 0x0002fdaf, 0x0002ffaf, 0x000301af, 0x000303af, + 0x000305af, 0x000307af, 0x000309af, 0x00030baf, 0x00030daf, + 0x00030faf, 0x000311af, 0x000313af, 0x000315af, 0x000317af, + 0x000319af, 0x00031baf, 0x00031daf, 0x00031faf, 0x000321af, + 0x000323af, 0x000325af, 0x000327af, 0x000329af, 0x00032baf, + 0x00032daf, 0x00032faf, 0x000331af, 0x000333af, 0x000335af, + 0x000337af, 0x000339af, 0x00033baf, 0x00033daf, 0x00033faf, + 0x000341af, 0x000343af, 0x000345af, 0x000347af, 0x000349af, + 0x00034baf, 0x00034daf, 0x00034faf, 0x000351af, 0x000353af, + 0x000355af, 0x000357af, 0x000359af, 0x00035baf, 0x00035daf, + 0x00035faf, 0x000361af, 0x000363af, 0x000365af, 0x000367af, + 0x000369af, 0x00036baf, 0x00036daf, 0x00036faf, 0x000371af, + 0x000373af, 0x000375af, 0x000377af, 0x000379af, 0x00037baf, + 0x00037daf, 0x00037faf, 0x000381af, 0x000383af, 0x000385af, + 0x000387af, 0x000389af, 0x00038baf, 0x00038daf, 0x00038faf, + 0x000391af, 0x000393af, 0x000395af, 0x000397af, 0x000399af, + 0x00039baf, 0x00039daf, 0x00039faf, 0x0003a1af, 0x0003a3af, + 0x0003a5af, 0x0003a7af, 0x0003a9af, 0x0003abaf, 0x0003adaf, + 0x0003afaf, 0x0003b1af, 0x0003b3af, 0x0003b5af, 0x0003b7af, + 0x0003b9af, 0x0003bbaf, 0x0003bdaf, 0x0003bfaf, 0x0003c1af, + 0x0003c3af, 0x0003c5af, 0x0003c7af, 0x0003c9af, 0x0003cbaf, + 0x0003cdaf, 0x0003cfaf, 0x0003d1af, 0x0003d3af, 0x0003d5af, + 0x0003d7af, 0x0003d9af, 0x0003dbaf, 0x0003ddaf, 0x0003dfaf, + 0x0003e1af, 0x0003e3af, 0x0003e5af, 0x0003e7af, 0x0003e9af, + 0x0003ebaf, 0x0003edaf, 0x0003efaf, 0x0003f1af, 0x0003f3af, + 0x0003f5af, 0x0003f7af, 0x0003f9af, 0x0003fbaf, 0x0003fdaf, + 0x0003ffaf, 0x000401af, 0x000403af, 0x000405af, 0x000407af, + 0x000409af, 0x00040baf, 0x00040daf, 0x00040faf, 0x000411af, + 0x000413af, 0x000415af, 0x000417af, 0x000419af, 0x00041baf, + 0x00041daf, 0x00041faf, 0x000421af, 0x000423af, 0x000425af, + 0x000427af, 0x000429af, 0x00042baf, 0x00042daf, 0x00042faf, + 0x000431af, 0x000433af, 0x000435af, 0x000437af, 0x000439af, + 0x00043baf, 0x00043daf, 0x00043faf, 0x000441af, 0x000443af, + 0x000445af, 0x000447af, 0x000449af, 0x00044baf, 0x00044daf, + 0x00044faf, 0x000451af, 0x000453af, 0x000455af, 0x000457af, + 0x000459af, 0x00045baf, 0x00045daf, 0x00045faf, 0x000461af, + 0x000463af, 0x000465af, 0x000467af, 0x000469af, 0x00046baf, + 0x00046daf, 0x00046faf, 0x000471af, 0x000473af, 0x000475af, + 0x000477af, 0x000479af, 0x00047baf, 0x00047daf, 0x00047faf, + 0x000481af, 0x000483af, 0x000485af, 0x000487af, 0x000489af, + 0x00048baf, 0x00048daf, 0x00048faf, 0x000491af, 0x000493af, + 0x000495af, 0x000497af, 0x000499af, 0x00049baf, 0x00049daf, + 0x00049faf, 0x0004a1af, 0x0004a3af, 0x0004a5af, 0x0004a7af, + 0x0004a9af, 0x0004abaf, 0x0004adaf, 0x0004afaf, 0x0004b1af, + 0x0004b3af, 0x0004b5af, 0x0004b7af, 0x0004b9af, 0x0004bbaf, + 0x0004bdaf, 0x0004bfaf, 0x0004c1af, 0x0004c3af, 0x0004c5af, + 0x0004c7af, 0x0004c9af, 0x0004cbaf, 0x0004cdaf, 0x0004cfaf, + 0x0004d1af, 0x0004d3af, 0x0004d5af, 0x0004d7af, 0x0004d9af, + 0x0004dbaf, 0x0004ddaf, 0x0004dfaf, 0x0004e1af, 0x0004e3af, + 0x0004e5af, 0x0004e7af, 0x0004e9af, 0x0004ebaf, 0x0004edaf, + 0x0004efaf, 0x0004f1af, 0x0004f3af, 0x0004f5af, 0x0004f7af, + 0x0004f9af, 0x0004fbaf, 0x0004fdaf, 0x0004ffaf, 0x000501af, + 0x000503af, 0x000505af, 0x000507af, 0x000509af, 0x00050baf, + 0x00050daf, 0x00050faf, 0x000511af, 0x000513af, 0x000515af, + 0x000517af, 0x000519af, 0x00051baf, 0x00051daf, 0x00051faf, + 0x000521af, 0x000523af, 0x000525af, 0x000527af, 0x000529af, + 0x00052baf, 0x00052daf, 0x00052faf, 0x000531af, 0x000533af, + 0x000535af, 0x000537af, 0x000539af, 0x00053baf, 0x00053daf, + 0x00053faf, 0x000541af, 0x000543af, 0x000545af, 0x000547af, + 0x000549af, 0x00054baf, 0x00054daf, 0x00054faf, 0x000551af, + 0x000553af, 0x000555af, 0x000557af, 0x000559af, 0x00055baf, + 0x00055daf, 0x00055faf, 0x000561af, 0x000563af, 0x000565af, + 0x000567af, 0x000569af, 0x00056baf, 0x00056daf, 0x00056faf, + 0x000571af, 0x000573af, 0x000575af, 0x000577af, 0x000579af, + 0x00057baf, 0x00057daf, 0x00057faf, 0x000581af, 0x000583af, + 0x000585af, 0x000587af, 0x000589af, 0x00058baf, 0x00058daf, + 0x00058faf, 0x000591af, 0x000593af, 0x000595af, 0x000597af, + 0x000599af, 0x00059baf, 0x00059daf, 0x00059faf, 0x0005a1af, + 0x0005a3af, 0x0005a5af, 0x0005a7af, 0x0005a9af, 0x0005abaf, + 0x0005adaf, 0x0005afaf, 0x0005b1af, 0x0005b3af, 0x0005b5af, + 0x0005b7af, 0x0005b9af, 0x0005bbaf, 0x0005bdaf, 0x0005bfaf, + 0x0005c1af, 0x0005c3af, 0x0005c5af, 0x0005c7af, 0x0005c9af, + 0x0005cbaf, 0x0005cdaf, 0x0005cfaf, 0x0005d1af, 0x0005d3af, + 0x0005d5af, 0x0005d7af, 0x0005d9af, 0x0005dbaf, 0x0005ddaf, + 0x0005dfaf, 0x0005e1af, 0x0005e3af, 0x0005e5af, 0x0005e7af, + 0x0005e9af, 0x0005ebaf, 0x0005edaf, 0x0005efaf, 0x0005f1af, + 0x0005f3af, 0x0005f5af, 0x0005f7af, 0x0005f9af, 0x0005fbaf, + 0x0005fdaf, 0x0005ffaf, 0x000601af, 0x000603af, 0x000605af, + 0x000607af, 0x000609af, 0x00060baf, 0x00060daf, 0x00060faf, + 0x000611af, 0x000613af, 0x000615af, 0x000617af, 0x000619af, + 0x00061baf, 0x00061daf, 0x00061faf, 0x000621af, 0x000623af, + 0x000625af, 0x000627af, 0x000629af, 0x00062baf, 0x00062daf, + 0x00062faf, 0x000631af, 0x000633af, 0x000635af, 0x000637af, + 0x000639af, 0x00063baf, 0x00063daf, 0x00063faf, 0x000641af, + 0x000643af, 0x000645af, 0x000647af, 0x000649af, 0x00064baf, + 0x00064daf, 0x00064faf, 0x000651af, 0x000653af, 0x000655af, + 0x000657af, 0x000659af, 0x00065baf, 0x00065daf, 0x00065faf, + 0x000661af, 0x000663af, 0x000665af, 0x000667af, 0x000669af, + 0x00066baf, 0x00066daf, 0x00066faf, 0x000671af, 0x000673af, + 0x000675af, 0x000677af, 0x000679af, 0x00067baf, 0x00067daf, + 0x00067faf, 0x000681af, 0x000683af, 0x000685af, 0x000687af, + 0x000689af, 0x00068baf, 0x00068daf, 0x00068faf, 0x000691af, + 0x000693af, 0x000695af, 0x000697af, 0x000699af, 0x00069baf, + 0x00069daf, 0x00069faf, 0x0006a1af, 0x0006a3af, 0x0006a5af, + 0x0006a7af, 0x0006a9af, 0x0006abaf, 0x0006adaf, 0x0006afaf, + 0x0006b1af, 0x0006b3af, 0x0006b5af, 0x0006b7af, 0x0006b9af, + 0x0006bbaf, 0x0006bdaf, 0x0006bfaf, 0x0006c1af, 0x0006c3af, + 0x0006c5af, 0x0006c7af, 0x0006c9af, 0x0006cbaf, 0x0006cdaf, + 0x0006cfaf, 0x0006d1af, 0x0006d3af, 0x0006d5af, 0x0006d7af, + 0x0006d9af, 0x0006dbaf, 0x0006ddaf, 0x0006dfaf, 0x0006e1af, + 0x0006e3af, 0x0006e5af, 0x0006e7af, 0x0006e9af, 0x0006ebaf, + 0x0006edaf, 0x0006efaf, 0x0006f1af, 0x0006f3af, 0x0006f5af, + 0x0006f7af, 0x0006f9af, 0x0006fbaf, 0x0006fdaf, 0x0006ffaf, + 0x000701af, 0x000703af, 0x000705af, 0x000707af, 0x000709af, + 0x00070baf, 0x00070daf, 0x00070faf, 0x000711af, 0x000713af, + 0x000715af, 0x000717af, 0x000719af, 0x00071baf, 0x00071daf, + 0x00071faf, 0x000721af, 0x000723af, 0x000725af, 0x000727af, + 0x000729af, 0x00072baf, 0x00072daf, 0x00072faf, 0x000731af, + 0x000733af, 0x000735af, 0x000737af, 0x000739af, 0x00073baf, + 0x00073daf, 0x00073faf, 0x000741af, 0x000743af, 0x000745af, + 0x000747af, 0x000749af, 0x00074baf, 0x00074daf, 0x00074faf, + 0x000751af, 0x000753af, 0x000755af, 0x000757af, 0x000759af, + 0x00075baf, 0x00075daf, 0x00075faf, 0x000761af, 0x000763af, + 0x000765af, 0x000767af, 0x000769af, 0x00076baf, 0x00076daf, + 0x00076faf, 0x000771af, 0x000773af, 0x000775af, 0x000777af, + 0x000779af, 0x00077baf, 0x00077daf, 0x00077faf, 0x000781af, + 0x000783af, 0x000785af, 0x000787af, 0x000789af, 0x00078baf, + 0x00078daf, 0x00078faf, 0x000791af, 0x000793af, 0x000795af, + 0x000797af, 0x000799af, 0x00079baf, 0x00079daf, 0x00079faf, + 0x0007a1af, 0x0007a3af, 0x0007a5af, 0x0007a7af, 0x0007a9af, + 0x0007abaf, 0x0007adaf, 0x0007afaf, 0x0007b1af, 0x0007b3af, + 0x0007b5af, 0x0007b7af, 0x0007b9af, 0x0007bbaf, 0x0007bdaf, + 0x0007bfaf, 0x0007c1af, 0x0007c3af, 0x0007c5af, 0x0007c7af, + 0x0007c9af, 0x0007cbaf, 0x0007cdaf, 0x0007cfaf, 0x0007d1af, + 0x0007d3af, 0x0007d5af, 0x0007d7af, 0x0007d9af, 0x0007dbaf, + 0x0007ddaf, 0x0007dfaf, 0x0007e1af, 0x0007e3af, 0x0007e5af, + 0x0007e7af, 0x0007e9af, 0x0007ebaf, 0x0007edaf, 0x0007efaf, + 0x0007f1af, 0x0007f3af, 0x0007f5af, 0x0007f7af, 0x0007f9af, + 0x0007fbaf, 0x0007fdaf, 0x0007ffaf, 0x000801af, 0x000803af, + 0x000805af, 0x000807af, 0x000809af, 0x00080baf, 0x00080daf, + 0x00080faf, 0x000811af, 0x000813af, 0x000815af, 0x000817af, + 0x000819af, 0x00081baf, 0x00081daf, 0x00081faf, 0x000821af, + 0x000823af, 0x000825af, 0x000827af, 0x000829af, 0x00082baf, + 0x00082daf, 0x00082faf, 0x000831af, 0x000833af, 0x000835af, + 0x000837af, 0x000839af, 0x00083baf, 0x00083daf, 0x00083faf, + 0x000841af, 0x000843af, 0x000845af, 0x000847af, 0x000849af, + 0x00084baf, 0x00084daf, 0x00084faf, 0x000851af, 0x000853af, + 0x000855af, 0x000857af, 0x000859af, 0x00085baf, 0x00085daf, + 0x00085faf, 0x000861af, 0x000863af, 0x000865af, 0x000867af, + 0x000869af, 0x00086baf, 0x00086daf, 0x00086faf, 0x000871af, + 0x000873af, 0x000875af, 0x000877af, 0x000879af, 0x00087baf, + 0x00087daf, 0x00087faf, 0x000881af, 0x000883af, 0x000885af, + 0x000887af, 0x000889af, 0x00088baf, 0x00088daf, 0x00088faf, + 0x000891af, 0x000893af, 0x000895af, 0x000897af, 0x000899af, + 0x00089baf, 0x00089daf, 0x00089faf, 0x0008a1af, 0x0008a3af, + 0x0008a5af, 0x0008a7af, 0x0008a9af, 0x0008abaf, 0x0008adaf, + 0x0008afaf, 0x0008b1af, 0x0008b3af, 0x0008b5af, 0x0008b7af, + 0x0008b9af, 0x0008bbaf, 0x0008bdaf, 0x0008bfaf, 0x0008c1af, + 0x0008c3af, 0x0008c5af, 0x0008c7af, 0x0008c9af, 0x0008cbaf, + 0x0008cdaf, 0x0008cfaf, 0x0008d1af, 0x0008d3af, 0x0008d5af, + 0x0008d7af, 0x0008d9af, 0x0008dbaf, 0x0008ddaf, 0x0008dfaf, + 0x0008e1af, 0x0008e3af, 0x0008e5af, 0x0008e7af, 0x0008e9af, + 0x0008ebaf, 0x0008edaf, 0x0008efaf, 0x0008f1af, 0x0008f3af, + 0x0008f5af, 0x0008f7af, 0x0008f9af, 0x0008fbaf, 0x0008fdaf, + 0x0008ffaf, 0x000901af, 0x000903af, 0x000905af, 0x000907af, + 0x000909af, 0x00090baf, 0x00090daf, 0x00090faf, 0x000911af, + 0x000913af, 0x000915af, 0x000917af, 0x000919af, 0x00091baf, + 0x00091daf, 0x00091faf, 0x000921af, 0x000923af, 0x000925af, + 0x000927af, 0x000929af, 0x00092baf, 0x00092daf, 0x00092faf, + 0x000931af, 0x000933af, 0x000935af, 0x000937af, 0x000939af, + 0x00093baf, 0x00093daf, 0x00093faf, 0x000941af, 0x000943af, + 0x000945af, 0x000947af, 0x000949af, 0x00094baf, 0x00094daf, + 0x00094faf, 0x000951af, 0x000953af, 0x000955af, 0x000957af, + 0x000959af, 0x00095baf, 0x00095daf, 0x00095faf, 0x000961af, + 0x000963af, 0x000965af, 0x000967af, 0x000969af, 0x00096baf, + 0x00096daf, 0x00096faf, 0x000971af, 0x000973af, 0x000975af, + 0x000977af, 0x000979af, 0x00097baf, 0x00097daf, 0x00097faf, + 0x000981af, 0x000983af, 0x000985af, 0x000987af, 0x000989af, + 0x00098baf, 0x00098daf, 0x00098faf, 0x000991af, 0x000993af, + 0x000995af, 0x000997af, 0x000999af, 0x00099baf, 0x00099daf, + 0x00099faf, 0x0009a1af, 0x0009a3af, 0x0009a5af, 0x0009a7af, + 0x0009a9af, 0x0009abaf, 0x0009adaf, 0x0009afaf, 0x0009b1af, + 0x0009b3af, 0x0009b5af, 0x0009b7af, 0x0009b9af, 0x0009bbaf, + 0x0009bdaf, 0x0009bfaf, 0x0009c1af, 0x0009c3af, 0x0009c5af, + 0x0009c7af, 0x0009c9af, 0x0009cbaf, 0x0009cdaf, 0x0009cfaf, + 0x0009d1af, 0x0009d3af, 0x0009d5af, 0x0009d7af, 0x0009d9af, + 0x0009dbaf, 0x0009ddaf, 0x0009dfaf, 0x0009e1af, 0x0009e3af, + 0x0009e5af, 0x0009e7af, 0x0009e9af, 0x0009ebaf, 0x0009edaf, + 0x0009efaf, 0x0009f1af, 0x0009f3af, 0x0009f5af, 0x0009f7af, + 0x0009f9af, 0x0009fbaf, 0x0009fdaf, 0x0009ffaf, 0x000a01af, + 0x000a03af, 0x000a05af, 0x000a07af, 0x000a09af, 0x000a0baf, + 0x000a0daf, 0x000a0faf, 0x000a11af, 0x000a13af, 0x000a15af, + 0x000a17af, 0x000a19af, 0x000a1baf, 0x000a1daf, 0x000a1faf, + 0x000a21af, 0x000a23af, 0x000a25af, 0x000a27af, 0x000a29af, + 0x000a2baf, 0x000a2daf, 0x000a2faf, 0x000a31af, 0x000a33af, + 0x000a35af, 0x000a37af, 0x000a39af, 0x000a3baf, 0x000a3daf, + 0x000a3faf, 0x000a41af, 0x000a43af, 0x000a45af, 0x000a47af, + 0x000a49af, 0x000a4baf, 0x000a4daf, 0x000a4faf, 0x000a51af, + 0x000a53af, 0x000a55af, 0x000a57af, 0x000a59af, 0x000a5baf, + 0x000a5daf, 0x000a5faf, 0x000a61af, 0x000a63af, 0x000a65af, + 0x000a67af, 0x000a69af, 0x000a6baf, 0x000a6daf, 0x000a6faf, + 0x000a71af, 0x000a73af, 0x000a75af, 0x000a77af, 0x000a79af, + 0x000a7baf, 0x000a7daf, 0x000a7faf, 0x000a81af, 0x000a83af, + 0x000a85af, 0x000a87af, 0x000a89af, 0x000a8baf, 0x000a8daf, + 0x000a8faf, 0x000a91af, 0x000a93af, 0x000a95af, 0x000a97af, + 0x000a99af, 0x000a9baf, 0x000a9daf, 0x000a9faf, 0x000aa1af, + 0x000aa3af, 0x000aa5af, 0x000aa7af, 0x000aa9af, 0x000aabaf, + 0x000aadaf, 0x000aafaf, 0x000ab1af, 0x000ab3af, 0x000ab5af, + 0x000ab7af, 0x000ab9af, 0x000abbaf, 0x000abdaf, 0x000abfaf, + 0x000ac1af, 0x000ac3af, 0x000ac5af, 0x000ac7af, 0x000ac9af, + 0x000acbaf, 0x000acdaf, 0x000acfaf, 0x000ad1af, 0x000ad3af, + 0x000ad5af, 0x000ad7af, 0x000ad9af, 0x000adbaf, 0x000addaf, + 0x000adfaf, 0x000ae1af, 0x000ae3af, 0x000ae5af, 0x000ae7af, + 0x000ae9af, 0x000aebaf, 0x000aedaf, 0x000aefaf, 0x000af1af, + 0x000af3af, 0x000af5af, 0x000af7af, 0x000af9af, 0x000afbaf, + 0x000afdaf, 0x000affaf, 0x000b01af, 0x000b03af, 0x000b05af, + 0x000b07af, 0x000b09af, 0x000b0baf, 0x000b0daf, 0x000b0faf, + 0x000b11af, 0x000b13af, 0x000b15af, 0x000b17af, 0x000b19af, + 0x000b1baf, 0x000b1daf, 0x000b1faf, 0x000b21af, 0x000b23af, + 0x000b25af, 0x000b27af, 0x000b29af, 0x000b2baf, 0x000b2daf, + 0x000b2faf, 0x000b31af, 0x000b33af, 0x000b35af, 0x000b37af, + 0x000b39af, 0x000b3baf, 0x000b3daf, 0x000b3faf, 0x000b41af, + 0x000b43af, 0x000b45af, 0x000b47af, 0x000b49af, 0x000b4baf, + 0x000b4daf, 0x000b4faf, 0x000b51af, 0x000b53af, 0x000b55af, + 0x000b57af, 0x000b59af, 0x000b5baf, 0x000b5daf, 0x000b5faf, + 0x000b61af, 0x000b63af, 0x000b65af, 0x000b67af, 0x000b69af, + 0x000b6baf, 0x000b6daf, 0x000b6faf, 0x000b71af, 0x000b73af, + 0x000b75af, 0x000b77af, 0x000b79af, 0x000b7baf, 0x000b7daf, + 0x000b7faf, 0x000b81af, 0x000b83af, 0x000b85af, 0x000b87af, + 0x000b89af, 0x000b8baf, 0x000b8daf, 0x000b8faf, 0x000b91af, + 0x000b93af, 0x000b95af, 0x000b97af, 0x000b99af, 0x000b9baf, + 0x000b9daf, 0x000b9faf, 0x000ba1af, 0x000ba3af, 0x000ba5af, + 0x000ba7af, 0x000ba9af, 0x000babaf, 0x000badaf, 0x000bafaf, + 0x000bb1af, 0x000bb3af, 0x000bb5af, 0x000bb7af, 0x000bb9af, + 0x000bbbaf, 0x000bbdaf, 0x000bbfaf, 0x000bc1af, 0x000bc3af, + 0x000bc5af, 0x000bc7af, 0x000bc9af, 0x000bcbaf, 0x000bcdaf, + 0x000bcfaf, 0x000bd1af, 0x000bd3af, 0x000bd5af, 0x000bd7af, + 0x000bd9af, 0x000bdbaf, 0x000bddaf, 0x000bdfaf, 0x000be1af, + 0x000be3af, 0x000be5af, 0x000be7af, 0x000be9af, 0x000bebaf, + 0x000bedaf, 0x000befaf, 0x000bf1af, 0x000bf3af, 0x000bf5af, + 0x000bf7af, 0x000bf9af, 0x000bfbaf, 0x000bfdaf, 0x000bffaf, + 0x000c01af, 0x000c03af, 0x000c05af, 0x000c07af, 0x000c09af, + 0x000c0baf, 0x000c0daf, 0x000c0faf, 0x000c11af, 0x000c13af, + 0x000c15af, 0x000c17af, 0x000c19af, 0x000c1baf, 0x000c1daf, + 0x000c1faf, 0x000c21af, 0x000c23af, 0x000c25af, 0x000c27af, + 0x000c29af, 0x000c2baf, 0x000c2daf, 0x000c2faf, 0x000c31af, + 0x000c33af, 0x000c35af, 0x000c37af, 0x000c39af, 0x000c3baf, + 0x000c3daf, 0x000c3faf, 0x000c41af, 0x000c43af, 0x000c45af, + 0x000c47af, 0x000c49af, 0x000c4baf, 0x000c4daf, 0x000c4faf, + 0x000c51af, 0x000c53af, 0x000c55af, 0x000c57af, 0x000c59af, + 0x000c5baf, 0x000c5daf, 0x000c5faf, 0x000c61af, 0x000c63af, + 0x000c65af, 0x000c67af, 0x000c69af, 0x000c6baf, 0x000c6daf, + 0x000c6faf, 0x000c71af, 0x000c73af, 0x000c75af, 0x000c77af, + 0x000c79af, 0x000c7baf, 0x000c7daf, 0x000c7faf, 0x000c81af, + 0x000c83af, 0x000c85af, 0x000c87af, 0x000c89af, 0x000c8baf, + 0x000c8daf, 0x000c8faf, 0x000c91af, 0x000c93af, 0x000c95af, + 0x000c97af, 0x000c99af, 0x000c9baf, 0x000c9daf, 0x000c9faf, + 0x000ca1af, 0x000ca3af, 0x000ca5af, 0x000ca7af, 0x000ca9af, + 0x000cabaf, 0x000cadaf, 0x000cafaf, 0x000cb1af, 0x000cb3af, + 0x000cb5af, 0x000cb7af, 0x000cb9af, 0x000cbbaf, 0x000cbdaf, + 0x000cbfaf, 0x000cc1af, 0x000cc3af, 0x000cc5af, 0x000cc7af, + 0x000cc9af, 0x000ccbaf, 0x000ccdaf, 0x000ccfaf, 0x000cd1af, + 0x000cd3af, 0x000cd5af, 0x000cd7af, 0x000cd9af, 0x000cdbaf, + 0x000cddaf, 0x000cdfaf, 0x000ce1af, 0x000ce3af, 0x000ce5af, + 0x000ce7af, 0x000ce9af, 0x000cebaf, 0x000cedaf, 0x000cefaf, + 0x000cf1af, 0x000cf3af, 0x000cf5af, 0x000cf7af, 0x000cf9af, + 0x000cfbaf, 0x000cfdaf, 0x000cffaf, 0x000d01af, 0x000d03af, + 0x000d05af, 0x000d07af, 0x000d09af, 0x000d0baf, 0x000d0daf, + 0x000d0faf, 0x000d11af, 0x000d13af, 0x000d15af, 0x000d17af, + 0x000d19af, 0x000d1baf, 0x000d1daf, 0x000d1faf, 0x000d21af, + 0x000d23af, 0x000d25af, 0x000d27af, 0x000d29af, 0x000d2baf, + 0x000d2daf, 0x000d2faf, 0x000d31af, 0x000d33af, 0x000d35af, + 0x000d37af, 0x000d39af, 0x000d3baf, 0x000d3daf, 0x000d3faf, + 0x000d41af, 0x000d43af, 0x000d45af, 0x000d47af, 0x000d49af, + 0x000d4baf, 0x000d4daf, 0x000d4faf, 0x000d51af, 0x000d53af, + 0x000d55af, 0x000d57af, 0x000d59af, 0x000d5baf, 0x000d5daf, + 0x000d5faf, 0x000d61af, 0x000d63af, 0x000d65af, 0x000d67af, + 0x000d69af, 0x000d6baf, 0x000d6daf, 0x000d6faf, 0x000d71af, + 0x000d73af, 0x000d75af, 0x000d77af, 0x000d79af, 0x000d7baf, + 0x000d7daf, 0x000d7faf, 0x000d81af, 0x000d83af, 0x000d85af, + 0x000d87af, 0x000d89af, 0x000d8baf, 0x000d8daf, 0x000d8faf, + 0x000d91af, 0x000d93af, 0x000d95af, 0x000d97af, 0x000d99af, + 0x000d9baf, 0x000d9daf, 0x000d9faf, 0x000da1af, 0x000da3af, + 0x000da5af, 0x000da7af, 0x000da9af, 0x000dabaf, 0x000dadaf, + 0x000dafaf, 0x000db1af, 0x000db3af, 0x000db5af, 0x000db7af, + 0x000db9af, 0x000dbbaf, 0x000dbdaf, 0x000dbfaf, 0x000dc1af, + 0x000dc3af, 0x000dc5af, 0x000dc7af, 0x000dc9af, 0x000dcbaf, + 0x000dcdaf, 0x000dcfaf, 0x000dd1af, 0x000dd3af, 0x000dd5af, + 0x000dd7af, 0x000dd9af, 0x000ddbaf, 0x000dddaf, 0x000ddfaf, + 0x000de1af, 0x000de3af, 0x000de5af, 0x000de7af, 0x000de9af, + 0x000debaf, 0x000dedaf, 0x000defaf, 0x000df1af, 0x000df3af, + 0x000df5af, 0x000df7af, 0x000df9af, 0x000dfbaf, 0x000dfdaf, + 0x000dffaf, 0x000e01af, 0x000e03af, 0x000e05af, 0x000e07af, + 0x000e09af, 0x000e0baf, 0x000e0daf, 0x000e0faf, 0x000e11af, + 0x000e13af, 0x000e15af, 0x000e17af, 0x000e19af, 0x000e1baf, + 0x000e1daf, 0x000e1faf, 0x000e21af, 0x000e23af, 0x000e25af, + 0x000e27af, 0x000e29af, 0x000e2baf, 0x000e2daf, 0x000e2faf, + 0x000e31af, 0x000e33af, 0x000e35af, 0x000e37af, 0x000e39af, + 0x000e3baf, 0x000e3daf, 0x000e3faf, 0x000e41af, 0x000e43af, + 0x000e45af, 0x000e47af, 0x000e49af, 0x000e4baf, 0x000e4daf, + 0x000e4faf, 0x000e51af, 0x000e53af, 0x000e55af, 0x000e57af, + 0x000e59af, 0x000e5baf, 0x000e5daf, 0x000e5faf, 0x000e61af, + 0x000e63af, 0x000e65af, 0x000e67af, 0x000e69af, 0x000e6baf, + 0x000e6daf, 0x000e6faf, 0x000e71af, 0x000e73af, 0x000e75af, + 0x000e77af, 0x000e79af, 0x000e7baf, 0x000e7daf, 0x000e7faf, + 0x000e81af, 0x000e83af, 0x000e85af, 0x000e87af, 0x000e89af, + 0x000e8baf, 0x000e8daf, 0x000e8faf, 0x000e91af, 0x000e93af, + 0x000e95af, 0x000e97af, 0x000e99af, 0x000e9baf, 0x000e9daf, + 0x000e9faf, 0x000ea1af, 0x000ea3af, 0x000ea5af, 0x000ea7af, + 0x000ea9af, 0x000eabaf, 0x000eadaf, 0x000eafaf, 0x000eb1af, + 0x000eb3af, 0x000eb5af, 0x000eb7af, 0x000eb9af, 0x000ebbaf, + 0x000ebdaf, 0x000ebfaf, 0x000ec1af, 0x000ec3af, 0x000ec5af, + 0x000ec7af, 0x000ec9af, 0x000ecbaf, 0x000ecdaf, 0x000ecfaf, + 0x000ed1af, 0x000ed3af, 0x000ed5af, 0x000ed7af, 0x000ed9af, + 0x000edbaf, 0x000eddaf, 0x000edfaf, 0x000ee1af, 0x000ee3af, + 0x000ee5af, 0x000ee7af, 0x000ee9af, 0x000eebaf, 0x000eedaf, + 0x000eefaf, 0x000ef1af, 0x000ef3af, 0x000ef5af, 0x000ef7af, + 0x000ef9af, 0x000efbaf, 0x000efdaf, 0x000effaf, 0x000f01af, + 0x000f03af, 0x000f05af, 0x000f07af, 0x000f09af, 0x000f0baf, + 0x000f0daf, 0x000f0faf, 0x000f11af, 0x000f13af, 0x000f15af, + 0x000f17af, 0x000f19af, 0x000f1baf, 0x000f1daf, 0x000f1faf, + 0x000f21af, 0x000f23af, 0x000f25af, 0x000f27af, 0x000f29af, + 0x000f2baf, 0x000f2daf, 0x000f2faf, 0x000f31af, 0x000f33af, + 0x000f35af, 0x000f37af, 0x000f39af, 0x000f3baf, 0x000f3daf, + 0x000f3faf, 0x000f41af, 0x000f43af, 0x000f45af, 0x000f47af, + 0x000f49af, 0x000f4baf, 0x000f4daf, 0x000f4faf, 0x000f51af, + 0x000f53af, 0x000f55af, 0x000f57af, 0x000f59af, 0x000f5baf, + 0x000f5daf, 0x000f5faf, 0x000f61af, 0x000f63af, 0x000f65af, + 0x000f67af, 0x000f69af, 0x000f6baf, 0x000f6daf, 0x000f6faf, + 0x000f71af, 0x000f73af, 0x000f75af, 0x000f77af, 0x000f79af, + 0x000f7baf, 0x000f7daf, 0x000f7faf, 0x000f81af, 0x000f83af, + 0x000f85af, 0x000f87af, 0x000f89af, 0x000f8baf, 0x000f8daf, + 0x000f8faf, 0x000f91af, 0x000f93af, 0x000f95af, 0x000f97af, + 0x000f99af, 0x000f9baf, 0x000f9daf, 0x000f9faf, 0x000fa1af, + 0x000fa3af, 0x000fa5af, 0x000fa7af, 0x000fa9af, 0x000fabaf, + 0x000fadaf, 0x000fafaf, 0x000fb1af, 0x000fb3af, 0x000fb5af, + 0x000fb7af, 0x000fb9af, 0x000fbbaf, 0x000fbdaf, 0x000fbfaf, + 0x000fc1af, 0x000fc3af, 0x000fc5af, 0x000fc7af, 0x000fc9af, + 0x000fcbaf, 0x000fcdaf, 0x000fcfaf, 0x000fd1af, 0x000fd3af, + 0x000fd5af, 0x000fd7af, 0x000fd9af, 0x000fdbaf, 0x000fddaf, + 0x000fdfaf, 0x000fe1af, 0x000fe3af, 0x000fe5af, 0x000fe7af, + 0x000fe9af, 0x000febaf, 0x000fedaf, 0x000fefaf, 0x000ff1af, + 0x000ff3af, 0x000ff5af, 0x000ff7af, 0x000ff9af, 0x000ffbaf, + 0x000ffdaf, 0x000fffaf, 0x0000006f, 0x0000026f, 0x0000046f, + 0x0000066f, 0x0000086f, 0x00000a6f, 0x00000c6f, 0x00000e6f, + 0x0000106f, 0x0000126f, 0x0000146f, 0x0000166f, 0x0000186f, + 0x00001a6f, 0x00001c6f, 0x00001e6f, 0x0000206f, 0x0000226f, + 0x0000246f, 0x0000266f, 0x0000286f, 0x00002a6f, 0x00002c6f, + 0x00002e6f, 0x0000306f, 0x0000326f, 0x0000346f, 0x0000366f, + 0x0000386f, 0x00003a6f, 0x00003c6f, 0x00003e6f, 0x0000406f, + 0x0000426f, 0x0000446f, 0x0000466f, 0x0000486f, 0x00004a6f, + 0x00004c6f, 0x00004e6f, 0x0000506f, 0x0000526f, 0x0000546f, + 0x0000566f, 0x0000586f, 0x00005a6f, 0x00005c6f, 0x00005e6f, + 0x0000606f, 0x0000626f, 0x0000646f, 0x0000666f, 0x0000686f, + 0x00006a6f, 0x00006c6f, 0x00006e6f, 0x0000706f, 0x0000726f, + 0x0000746f, 0x0000766f, 0x0000786f, 0x00007a6f, 0x00007c6f, + 0x00007e6f, 0x0000806f, 0x0000826f, 0x0000846f, 0x0000866f, + 0x0000886f, 0x00008a6f, 0x00008c6f, 0x00008e6f, 0x0000906f, + 0x0000926f, 0x0000946f, 0x0000966f, 0x0000986f, 0x00009a6f, + 0x00009c6f, 0x00009e6f, 0x0000a06f, 0x0000a26f, 0x0000a46f, + 0x0000a66f, 0x0000a86f, 0x0000aa6f, 0x0000ac6f, 0x0000ae6f, + 0x0000b06f, 0x0000b26f, 0x0000b46f, 0x0000b66f, 0x0000b86f, + 0x0000ba6f, 0x0000bc6f, 0x0000be6f, 0x0000c06f, 0x0000c26f, + 0x0000c46f, 0x0000c66f, 0x0000c86f, 0x0000ca6f, 0x0000cc6f, + 0x0000ce6f, 0x0000d06f, 0x0000d26f, 0x0000d46f, 0x0000d66f, + 0x0000d86f, 0x0000da6f, 0x0000dc6f, 0x0000de6f, 0x0000e06f, + 0x0000e26f, 0x0000e46f, 0x0000e66f, 0x0000e86f, 0x0000ea6f, + 0x0000ec6f, 0x0000ee6f, 0x0000f06f, 0x0000f26f, 0x0000f46f, + 0x0000f66f, 0x0000f86f, 0x0000fa6f, 0x0000fc6f, 0x0000fe6f, + 0x0001006f, 0x0001026f, 0x0001046f, 0x0001066f, 0x0001086f, + 0x00010a6f, 0x00010c6f, 0x00010e6f, 0x0001106f, 0x0001126f, + 0x0001146f, 0x0001166f, 0x0001186f, 0x00011a6f, 0x00011c6f, + 0x00011e6f, 0x0001206f, 0x0001226f, 0x0001246f, 0x0001266f, + 0x0001286f, 0x00012a6f, 0x00012c6f, 0x00012e6f, 0x0001306f, + 0x0001326f, 0x0001346f, 0x0001366f, 0x0001386f, 0x00013a6f, + 0x00013c6f, 0x00013e6f, 0x0001406f, 0x0001426f, 0x0001446f, + 0x0001466f, 0x0001486f, 0x00014a6f, 0x00014c6f, 0x00014e6f, + 0x0001506f, 0x0001526f, 0x0001546f, 0x0001566f, 0x0001586f, + 0x00015a6f, 0x00015c6f, 0x00015e6f, 0x0001606f, 0x0001626f, + 0x0001646f, 0x0001666f, 0x0001686f, 0x00016a6f, 0x00016c6f, + 0x00016e6f, 0x0001706f, 0x0001726f, 0x0001746f, 0x0001766f, + 0x0001786f, 0x00017a6f, 0x00017c6f, 0x00017e6f, 0x0001806f, + 0x0001826f, 0x0001846f, 0x0001866f, 0x0001886f, 0x00018a6f, + 0x00018c6f, 0x00018e6f, 0x0001906f, 0x0001926f, 0x0001946f, + 0x0001966f, 0x0001986f, 0x00019a6f, 0x00019c6f, 0x00019e6f, + 0x0001a06f, 0x0001a26f, 0x0001a46f, 0x0001a66f, 0x0001a86f, + 0x0001aa6f, 0x0001ac6f, 0x0001ae6f, 0x0001b06f, 0x0001b26f, + 0x0001b46f, 0x0001b66f, 0x0001b86f, 0x0001ba6f, 0x0001bc6f, + 0x0001be6f, 0x0001c06f, 0x0001c26f, 0x0001c46f, 0x0001c66f, + 0x0001c86f, 0x0001ca6f, 0x0001cc6f, 0x0001ce6f, 0x0001d06f, + 0x0001d26f, 0x0001d46f, 0x0001d66f, 0x0001d86f, 0x0001da6f, + 0x0001dc6f, 0x0001de6f, 0x0001e06f, 0x0001e26f, 0x0001e46f, + 0x0001e66f, 0x0001e86f, 0x0001ea6f, 0x0001ec6f, 0x0001ee6f, + 0x0001f06f, 0x0001f26f, 0x0001f46f, 0x0001f66f, 0x0001f86f, + 0x0001fa6f, 0x0001fc6f, 0x0001fe6f, 0x0002006f, 0x0002026f, + 0x0002046f, 0x0002066f, 0x0002086f, 0x00020a6f, 0x00020c6f, + 0x00020e6f, 0x0002106f, 0x0002126f, 0x0002146f, 0x0002166f, + 0x0002186f, 0x00021a6f, 0x00021c6f, 0x00021e6f, 0x0002206f, + 0x0002226f, 0x0002246f, 0x0002266f, 0x0002286f, 0x00022a6f, + 0x00022c6f, 0x00022e6f, 0x0002306f, 0x0002326f, 0x0002346f, + 0x0002366f, 0x0002386f, 0x00023a6f, 0x00023c6f, 0x00023e6f, + 0x0002406f, 0x0002426f, 0x0002446f, 0x0002466f, 0x0002486f, + 0x00024a6f, 0x00024c6f, 0x00024e6f, 0x0002506f, 0x0002526f, + 0x0002546f, 0x0002566f, 0x0002586f, 0x00025a6f, 0x00025c6f, + 0x00025e6f, 0x0002606f, 0x0002626f, 0x0002646f, 0x0002666f, + 0x0002686f, 0x00026a6f, 0x00026c6f, 0x00026e6f, 0x0002706f, + 0x0002726f, 0x0002746f, 0x0002766f, 0x0002786f, 0x00027a6f, + 0x00027c6f, 0x00027e6f, 0x0002806f, 0x0002826f, 0x0002846f, + 0x0002866f, 0x0002886f, 0x00028a6f, 0x00028c6f, 0x00028e6f, + 0x0002906f, 0x0002926f, 0x0002946f, 0x0002966f, 0x0002986f, + 0x00029a6f, 0x00029c6f, 0x00029e6f, 0x0002a06f, 0x0002a26f, + 0x0002a46f, 0x0002a66f, 0x0002a86f, 0x0002aa6f, 0x0002ac6f, + 0x0002ae6f, 0x0002b06f, 0x0002b26f, 0x0002b46f, 0x0002b66f, + 0x0002b86f, 0x0002ba6f, 0x0002bc6f, 0x0002be6f, 0x0002c06f, + 0x0002c26f, 0x0002c46f, 0x0002c66f, 0x0002c86f, 0x0002ca6f, + 0x0002cc6f, 0x0002ce6f, 0x0002d06f, 0x0002d26f, 0x0002d46f, + 0x0002d66f, 0x0002d86f, 0x0002da6f, 0x0002dc6f, 0x0002de6f, + 0x0002e06f, 0x0002e26f, 0x0002e46f, 0x0002e66f, 0x0002e86f, + 0x0002ea6f, 0x0002ec6f, 0x0002ee6f, 0x0002f06f, 0x0002f26f, + 0x0002f46f, 0x0002f66f, 0x0002f86f, 0x0002fa6f, 0x0002fc6f, + 0x0002fe6f, 0x0003006f, 0x0003026f, 0x0003046f, 0x0003066f, + 0x0003086f, 0x00030a6f, 0x00030c6f, 0x00030e6f, 0x0003106f, + 0x0003126f, 0x0003146f, 0x0003166f, 0x0003186f, 0x00031a6f, + 0x00031c6f, 0x00031e6f, 0x0003206f, 0x0003226f, 0x0003246f, + 0x0003266f, 0x0003286f, 0x00032a6f, 0x00032c6f, 0x00032e6f, + 0x0003306f, 0x0003326f, 0x0003346f, 0x0003366f, 0x0003386f, + 0x00033a6f, 0x00033c6f, 0x00033e6f, 0x0003406f, 0x0003426f, + 0x0003446f, 0x0003466f, 0x0003486f, 0x00034a6f, 0x00034c6f, + 0x00034e6f, 0x0003506f, 0x0003526f, 0x0003546f, 0x0003566f, + 0x0003586f, 0x00035a6f, 0x00035c6f, 0x00035e6f, 0x0003606f, + 0x0003626f, 0x0003646f, 0x0003666f, 0x0003686f, 0x00036a6f, + 0x00036c6f, 0x00036e6f, 0x0003706f, 0x0003726f, 0x0003746f, + 0x0003766f, 0x0003786f, 0x00037a6f, 0x00037c6f, 0x00037e6f, + 0x0003806f, 0x0003826f, 0x0003846f, 0x0003866f, 0x0003886f, + 0x00038a6f, 0x00038c6f, 0x00038e6f, 0x0003906f, 0x0003926f, + 0x0003946f, 0x0003966f, 0x0003986f, 0x00039a6f, 0x00039c6f, + 0x00039e6f, 0x0003a06f, 0x0003a26f, 0x0003a46f, 0x0003a66f, + 0x0003a86f, 0x0003aa6f, 0x0003ac6f, 0x0003ae6f, 0x0003b06f, + 0x0003b26f, 0x0003b46f, 0x0003b66f, 0x0003b86f, 0x0003ba6f, + 0x0003bc6f, 0x0003be6f, 0x0003c06f, 0x0003c26f, 0x0003c46f, + 0x0003c66f, 0x0003c86f, 0x0003ca6f, 0x0003cc6f, 0x0003ce6f, + 0x0003d06f, 0x0003d26f, 0x0003d46f, 0x0003d66f, 0x0003d86f, + 0x0003da6f, 0x0003dc6f, 0x0003de6f, 0x0003e06f, 0x0003e26f, + 0x0003e46f, 0x0003e66f, 0x0003e86f, 0x0003ea6f, 0x0003ec6f, + 0x0003ee6f, 0x0003f06f, 0x0003f26f, 0x0003f46f, 0x0003f66f, + 0x0003f86f, 0x0003fa6f, 0x0003fc6f, 0x0003fe6f, 0x0004006f, + 0x0004026f, 0x0004046f, 0x0004066f, 0x0004086f, 0x00040a6f, + 0x00040c6f, 0x00040e6f, 0x0004106f, 0x0004126f, 0x0004146f, + 0x0004166f, 0x0004186f, 0x00041a6f, 0x00041c6f, 0x00041e6f, + 0x0004206f, 0x0004226f, 0x0004246f, 0x0004266f, 0x0004286f, + 0x00042a6f, 0x00042c6f, 0x00042e6f, 0x0004306f, 0x0004326f, + 0x0004346f, 0x0004366f, 0x0004386f, 0x00043a6f, 0x00043c6f, + 0x00043e6f, 0x0004406f, 0x0004426f, 0x0004446f, 0x0004466f, + 0x0004486f, 0x00044a6f, 0x00044c6f, 0x00044e6f, 0x0004506f, + 0x0004526f, 0x0004546f, 0x0004566f, 0x0004586f, 0x00045a6f, + 0x00045c6f, 0x00045e6f, 0x0004606f, 0x0004626f, 0x0004646f, + 0x0004666f, 0x0004686f, 0x00046a6f, 0x00046c6f, 0x00046e6f, + 0x0004706f, 0x0004726f, 0x0004746f, 0x0004766f, 0x0004786f, + 0x00047a6f, 0x00047c6f, 0x00047e6f, 0x0004806f, 0x0004826f, + 0x0004846f, 0x0004866f, 0x0004886f, 0x00048a6f, 0x00048c6f, + 0x00048e6f, 0x0004906f, 0x0004926f, 0x0004946f, 0x0004966f, + 0x0004986f, 0x00049a6f, 0x00049c6f, 0x00049e6f, 0x0004a06f, + 0x0004a26f, 0x0004a46f, 0x0004a66f, 0x0004a86f, 0x0004aa6f, + 0x0004ac6f, 0x0004ae6f, 0x0004b06f, 0x0004b26f, 0x0004b46f, + 0x0004b66f, 0x0004b86f, 0x0004ba6f, 0x0004bc6f, 0x0004be6f, + 0x0004c06f, 0x0004c26f, 0x0004c46f, 0x0004c66f, 0x0004c86f, + 0x0004ca6f, 0x0004cc6f, 0x0004ce6f, 0x0004d06f, 0x0004d26f, + 0x0004d46f, 0x0004d66f, 0x0004d86f, 0x0004da6f, 0x0004dc6f, + 0x0004de6f, 0x0004e06f, 0x0004e26f, 0x0004e46f, 0x0004e66f, + 0x0004e86f, 0x0004ea6f, 0x0004ec6f, 0x0004ee6f, 0x0004f06f, + 0x0004f26f, 0x0004f46f, 0x0004f66f, 0x0004f86f, 0x0004fa6f, + 0x0004fc6f, 0x0004fe6f, 0x0005006f, 0x0005026f, 0x0005046f, + 0x0005066f, 0x0005086f, 0x00050a6f, 0x00050c6f, 0x00050e6f, + 0x0005106f, 0x0005126f, 0x0005146f, 0x0005166f, 0x0005186f, + 0x00051a6f, 0x00051c6f, 0x00051e6f, 0x0005206f, 0x0005226f, + 0x0005246f, 0x0005266f, 0x0005286f, 0x00052a6f, 0x00052c6f, + 0x00052e6f, 0x0005306f, 0x0005326f, 0x0005346f, 0x0005366f, + 0x0005386f, 0x00053a6f, 0x00053c6f, 0x00053e6f, 0x0005406f, + 0x0005426f, 0x0005446f, 0x0005466f, 0x0005486f, 0x00054a6f, + 0x00054c6f, 0x00054e6f, 0x0005506f, 0x0005526f, 0x0005546f, + 0x0005566f, 0x0005586f, 0x00055a6f, 0x00055c6f, 0x00055e6f, + 0x0005606f, 0x0005626f, 0x0005646f, 0x0005666f, 0x0005686f, + 0x00056a6f, 0x00056c6f, 0x00056e6f, 0x0005706f, 0x0005726f, + 0x0005746f, 0x0005766f, 0x0005786f, 0x00057a6f, 0x00057c6f, + 0x00057e6f, 0x0005806f, 0x0005826f, 0x0005846f, 0x0005866f, + 0x0005886f, 0x00058a6f, 0x00058c6f, 0x00058e6f, 0x0005906f, + 0x0005926f, 0x0005946f, 0x0005966f, 0x0005986f, 0x00059a6f, + 0x00059c6f, 0x00059e6f, 0x0005a06f, 0x0005a26f, 0x0005a46f, + 0x0005a66f, 0x0005a86f, 0x0005aa6f, 0x0005ac6f, 0x0005ae6f, + 0x0005b06f, 0x0005b26f, 0x0005b46f, 0x0005b66f, 0x0005b86f, + 0x0005ba6f, 0x0005bc6f, 0x0005be6f, 0x0005c06f, 0x0005c26f, + 0x0005c46f, 0x0005c66f, 0x0005c86f, 0x0005ca6f, 0x0005cc6f, + 0x0005ce6f, 0x0005d06f, 0x0005d26f, 0x0005d46f, 0x0005d66f, + 0x0005d86f, 0x0005da6f, 0x0005dc6f, 0x0005de6f, 0x0005e06f, + 0x0005e26f, 0x0005e46f, 0x0005e66f, 0x0005e86f, 0x0005ea6f, + 0x0005ec6f, 0x0005ee6f, 0x0005f06f, 0x0005f26f, 0x0005f46f, + 0x0005f66f, 0x0005f86f, 0x0005fa6f, 0x0005fc6f, 0x0005fe6f, + 0x0006006f, 0x0006026f, 0x0006046f, 0x0006066f, 0x0006086f, + 0x00060a6f, 0x00060c6f, 0x00060e6f, 0x0006106f, 0x0006126f, + 0x0006146f, 0x0006166f, 0x0006186f, 0x00061a6f, 0x00061c6f, + 0x00061e6f, 0x0006206f, 0x0006226f, 0x0006246f, 0x0006266f, + 0x0006286f, 0x00062a6f, 0x00062c6f, 0x00062e6f, 0x0006306f, + 0x0006326f, 0x0006346f, 0x0006366f, 0x0006386f, 0x00063a6f, + 0x00063c6f, 0x00063e6f, 0x0006406f, 0x0006426f, 0x0006446f, + 0x0006466f, 0x0006486f, 0x00064a6f, 0x00064c6f, 0x00064e6f, + 0x0006506f, 0x0006526f, 0x0006546f, 0x0006566f, 0x0006586f, + 0x00065a6f, 0x00065c6f, 0x00065e6f, 0x0006606f, 0x0006626f, + 0x0006646f, 0x0006666f, 0x0006686f, 0x00066a6f, 0x00066c6f, + 0x00066e6f, 0x0006706f, 0x0006726f, 0x0006746f, 0x0006766f, + 0x0006786f, 0x00067a6f, 0x00067c6f, 0x00067e6f, 0x0006806f, + 0x0006826f, 0x0006846f, 0x0006866f, 0x0006886f, 0x00068a6f, + 0x00068c6f, 0x00068e6f, 0x0006906f, 0x0006926f, 0x0006946f, + 0x0006966f, 0x0006986f, 0x00069a6f, 0x00069c6f, 0x00069e6f, + 0x0006a06f, 0x0006a26f, 0x0006a46f, 0x0006a66f, 0x0006a86f, + 0x0006aa6f, 0x0006ac6f, 0x0006ae6f, 0x0006b06f, 0x0006b26f, + 0x0006b46f, 0x0006b66f, 0x0006b86f, 0x0006ba6f, 0x0006bc6f, + 0x0006be6f, 0x0006c06f, 0x0006c26f, 0x0006c46f, 0x0006c66f, + 0x0006c86f, 0x0006ca6f, 0x0006cc6f, 0x0006ce6f, 0x0006d06f, + 0x0006d26f, 0x0006d46f, 0x0006d66f, 0x0006d86f, 0x0006da6f, + 0x0006dc6f, 0x0006de6f, 0x0006e06f, 0x0006e26f, 0x0006e46f, + 0x0006e66f, 0x0006e86f, 0x0006ea6f, 0x0006ec6f, 0x0006ee6f, + 0x0006f06f, 0x0006f26f, 0x0006f46f, 0x0006f66f, 0x0006f86f, + 0x0006fa6f, 0x0006fc6f, 0x0006fe6f, 0x0007006f, 0x0007026f, + 0x0007046f, 0x0007066f, 0x0007086f, 0x00070a6f, 0x00070c6f, + 0x00070e6f, 0x0007106f, 0x0007126f, 0x0007146f, 0x0007166f, + 0x0007186f, 0x00071a6f, 0x00071c6f, 0x00071e6f, 0x0007206f, + 0x0007226f, 0x0007246f, 0x0007266f, 0x0007286f, 0x00072a6f, + 0x00072c6f, 0x00072e6f, 0x0007306f, 0x0007326f, 0x0007346f, + 0x0007366f, 0x0007386f, 0x00073a6f, 0x00073c6f, 0x00073e6f, + 0x0007406f, 0x0007426f, 0x0007446f, 0x0007466f, 0x0007486f, + 0x00074a6f, 0x00074c6f, 0x00074e6f, 0x0007506f, 0x0007526f, + 0x0007546f, 0x0007566f, 0x0007586f, 0x00075a6f, 0x00075c6f, + 0x00075e6f, 0x0007606f, 0x0007626f, 0x0007646f, 0x0007666f, + 0x0007686f, 0x00076a6f, 0x00076c6f, 0x00076e6f, 0x0007706f, + 0x0007726f, 0x0007746f, 0x0007766f, 0x0007786f, 0x00077a6f, + 0x00077c6f, 0x00077e6f, 0x0007806f, 0x0007826f, 0x0007846f, + 0x0007866f, 0x0007886f, 0x00078a6f, 0x00078c6f, 0x00078e6f, + 0x0007906f, 0x0007926f, 0x0007946f, 0x0007966f, 0x0007986f, + 0x00079a6f, 0x00079c6f, 0x00079e6f, 0x0007a06f, 0x0007a26f, + 0x0007a46f, 0x0007a66f, 0x0007a86f, 0x0007aa6f, 0x0007ac6f, + 0x0007ae6f, 0x0007b06f, 0x0007b26f, 0x0007b46f, 0x0007b66f, + 0x0007b86f, 0x0007ba6f, 0x0007bc6f, 0x0007be6f, 0x0007c06f, + 0x0007c26f, 0x0007c46f, 0x0007c66f, 0x0007c86f, 0x0007ca6f, + 0x0007cc6f, 0x0007ce6f, 0x0007d06f, 0x0007d26f, 0x0007d46f, + 0x0007d66f, 0x0007d86f, 0x0007da6f, 0x0007dc6f, 0x0007de6f, + 0x0007e06f, 0x0007e26f, 0x0007e46f, 0x0007e66f, 0x0007e86f, + 0x0007ea6f, 0x0007ec6f, 0x0007ee6f, 0x0007f06f, 0x0007f26f, + 0x0007f46f, 0x0007f66f, 0x0007f86f, 0x0007fa6f, 0x0007fc6f, + 0x0007fe6f, 0x0008006f, 0x0008026f, 0x0008046f, 0x0008066f, + 0x0008086f, 0x00080a6f, 0x00080c6f, 0x00080e6f, 0x0008106f, + 0x0008126f, 0x0008146f, 0x0008166f, 0x0008186f, 0x00081a6f, + 0x00081c6f, 0x00081e6f, 0x0008206f, 0x0008226f, 0x0008246f, + 0x0008266f, 0x0008286f, 0x00082a6f, 0x00082c6f, 0x00082e6f, + 0x0008306f, 0x0008326f, 0x0008346f, 0x0008366f, 0x0008386f, + 0x00083a6f, 0x00083c6f, 0x00083e6f, 0x0008406f, 0x0008426f, + 0x0008446f, 0x0008466f, 0x0008486f, 0x00084a6f, 0x00084c6f, + 0x00084e6f, 0x0008506f, 0x0008526f, 0x0008546f, 0x0008566f, + 0x0008586f, 0x00085a6f, 0x00085c6f, 0x00085e6f, 0x0008606f, + 0x0008626f, 0x0008646f, 0x0008666f, 0x0008686f, 0x00086a6f, + 0x00086c6f, 0x00086e6f, 0x0008706f, 0x0008726f, 0x0008746f, + 0x0008766f, 0x0008786f, 0x00087a6f, 0x00087c6f, 0x00087e6f, + 0x0008806f, 0x0008826f, 0x0008846f, 0x0008866f, 0x0008886f, + 0x00088a6f, 0x00088c6f, 0x00088e6f, 0x0008906f, 0x0008926f, + 0x0008946f, 0x0008966f, 0x0008986f, 0x00089a6f, 0x00089c6f, + 0x00089e6f, 0x0008a06f, 0x0008a26f, 0x0008a46f, 0x0008a66f, + 0x0008a86f, 0x0008aa6f, 0x0008ac6f, 0x0008ae6f, 0x0008b06f, + 0x0008b26f, 0x0008b46f, 0x0008b66f, 0x0008b86f, 0x0008ba6f, + 0x0008bc6f, 0x0008be6f, 0x0008c06f, 0x0008c26f, 0x0008c46f, + 0x0008c66f, 0x0008c86f, 0x0008ca6f, 0x0008cc6f, 0x0008ce6f, + 0x0008d06f, 0x0008d26f, 0x0008d46f, 0x0008d66f, 0x0008d86f, + 0x0008da6f, 0x0008dc6f, 0x0008de6f, 0x0008e06f, 0x0008e26f, + 0x0008e46f, 0x0008e66f, 0x0008e86f, 0x0008ea6f, 0x0008ec6f, + 0x0008ee6f, 0x0008f06f, 0x0008f26f, 0x0008f46f, 0x0008f66f, + 0x0008f86f, 0x0008fa6f, 0x0008fc6f, 0x0008fe6f, 0x0009006f, + 0x0009026f, 0x0009046f, 0x0009066f, 0x0009086f, 0x00090a6f, + 0x00090c6f, 0x00090e6f, 0x0009106f, 0x0009126f, 0x0009146f, + 0x0009166f, 0x0009186f, 0x00091a6f, 0x00091c6f, 0x00091e6f, + 0x0009206f, 0x0009226f, 0x0009246f, 0x0009266f, 0x0009286f, + 0x00092a6f, 0x00092c6f, 0x00092e6f, 0x0009306f, 0x0009326f, + 0x0009346f, 0x0009366f, 0x0009386f, 0x00093a6f, 0x00093c6f, + 0x00093e6f, 0x0009406f, 0x0009426f, 0x0009446f, 0x0009466f, + 0x0009486f, 0x00094a6f, 0x00094c6f, 0x00094e6f, 0x0009506f, + 0x0009526f, 0x0009546f, 0x0009566f, 0x0009586f, 0x00095a6f, + 0x00095c6f, 0x00095e6f, 0x0009606f, 0x0009626f, 0x0009646f, + 0x0009666f, 0x0009686f, 0x00096a6f, 0x00096c6f, 0x00096e6f, + 0x0009706f, 0x0009726f, 0x0009746f, 0x0009766f, 0x0009786f, + 0x00097a6f, 0x00097c6f, 0x00097e6f, 0x0009806f, 0x0009826f, + 0x0009846f, 0x0009866f, 0x0009886f, 0x00098a6f, 0x00098c6f, + 0x00098e6f, 0x0009906f, 0x0009926f, 0x0009946f, 0x0009966f, + 0x0009986f, 0x00099a6f, 0x00099c6f, 0x00099e6f, 0x0009a06f, + 0x0009a26f, 0x0009a46f, 0x0009a66f, 0x0009a86f, 0x0009aa6f, + 0x0009ac6f, 0x0009ae6f, 0x0009b06f, 0x0009b26f, 0x0009b46f, + 0x0009b66f, 0x0009b86f, 0x0009ba6f, 0x0009bc6f, 0x0009be6f, + 0x0009c06f, 0x0009c26f, 0x0009c46f, 0x0009c66f, 0x0009c86f, + 0x0009ca6f, 0x0009cc6f, 0x0009ce6f, 0x0009d06f, 0x0009d26f, + 0x0009d46f, 0x0009d66f, 0x0009d86f, 0x0009da6f, 0x0009dc6f, + 0x0009de6f, 0x0009e06f, 0x0009e26f, 0x0009e46f, 0x0009e66f, + 0x0009e86f, 0x0009ea6f, 0x0009ec6f, 0x0009ee6f, 0x0009f06f, + 0x0009f26f, 0x0009f46f, 0x0009f66f, 0x0009f86f, 0x0009fa6f, + 0x0009fc6f, 0x0009fe6f, 0x000a006f, 0x000a026f, 0x000a046f, + 0x000a066f, 0x000a086f, 0x000a0a6f, 0x000a0c6f, 0x000a0e6f, + 0x000a106f, 0x000a126f, 0x000a146f, 0x000a166f, 0x000a186f, + 0x000a1a6f, 0x000a1c6f, 0x000a1e6f, 0x000a206f, 0x000a226f, + 0x000a246f, 0x000a266f, 0x000a286f, 0x000a2a6f, 0x000a2c6f, + 0x000a2e6f, 0x000a306f, 0x000a326f, 0x000a346f, 0x000a366f, + 0x000a386f, 0x000a3a6f, 0x000a3c6f, 0x000a3e6f, 0x000a406f, + 0x000a426f, 0x000a446f, 0x000a466f, 0x000a486f, 0x000a4a6f, + 0x000a4c6f, 0x000a4e6f, 0x000a506f, 0x000a526f, 0x000a546f, + 0x000a566f, 0x000a586f, 0x000a5a6f, 0x000a5c6f, 0x000a5e6f, + 0x000a606f, 0x000a626f, 0x000a646f, 0x000a666f, 0x000a686f, + 0x000a6a6f, 0x000a6c6f, 0x000a6e6f, 0x000a706f, 0x000a726f, + 0x000a746f, 0x000a766f, 0x000a786f, 0x000a7a6f, 0x000a7c6f, + 0x000a7e6f, 0x000a806f, 0x000a826f, 0x000a846f, 0x000a866f, + 0x000a886f, 0x000a8a6f, 0x000a8c6f, 0x000a8e6f, 0x000a906f, + 0x000a926f, 0x000a946f, 0x000a966f, 0x000a986f, 0x000a9a6f, + 0x000a9c6f, 0x000a9e6f, 0x000aa06f, 0x000aa26f, 0x000aa46f, + 0x000aa66f, 0x000aa86f, 0x000aaa6f, 0x000aac6f, 0x000aae6f, + 0x000ab06f, 0x000ab26f, 0x000ab46f, 0x000ab66f, 0x000ab86f, + 0x000aba6f, 0x000abc6f, 0x000abe6f, 0x000ac06f, 0x000ac26f, + 0x000ac46f, 0x000ac66f, 0x000ac86f, 0x000aca6f, 0x000acc6f, + 0x000ace6f, 0x000ad06f, 0x000ad26f, 0x000ad46f, 0x000ad66f, + 0x000ad86f, 0x000ada6f, 0x000adc6f, 0x000ade6f, 0x000ae06f, + 0x000ae26f, 0x000ae46f, 0x000ae66f, 0x000ae86f, 0x000aea6f, + 0x000aec6f, 0x000aee6f, 0x000af06f, 0x000af26f, 0x000af46f, + 0x000af66f, 0x000af86f, 0x000afa6f, 0x000afc6f, 0x000afe6f, + 0x000b006f, 0x000b026f, 0x000b046f, 0x000b066f, 0x000b086f, + 0x000b0a6f, 0x000b0c6f, 0x000b0e6f, 0x000b106f, 0x000b126f, + 0x000b146f, 0x000b166f, 0x000b186f, 0x000b1a6f, 0x000b1c6f, + 0x000b1e6f, 0x000b206f, 0x000b226f, 0x000b246f, 0x000b266f, + 0x000b286f, 0x000b2a6f, 0x000b2c6f, 0x000b2e6f, 0x000b306f, + 0x000b326f, 0x000b346f, 0x000b366f, 0x000b386f, 0x000b3a6f, + 0x000b3c6f, 0x000b3e6f, 0x000b406f, 0x000b426f, 0x000b446f, + 0x000b466f, 0x000b486f, 0x000b4a6f, 0x000b4c6f, 0x000b4e6f, + 0x000b506f, 0x000b526f, 0x000b546f, 0x000b566f, 0x000b586f, + 0x000b5a6f, 0x000b5c6f, 0x000b5e6f, 0x000b606f, 0x000b626f, + 0x000b646f, 0x000b666f, 0x000b686f, 0x000b6a6f, 0x000b6c6f, + 0x000b6e6f, 0x000b706f, 0x000b726f, 0x000b746f, 0x000b766f, + 0x000b786f, 0x000b7a6f, 0x000b7c6f, 0x000b7e6f, 0x000b806f, + 0x000b826f, 0x000b846f, 0x000b866f, 0x000b886f, 0x000b8a6f, + 0x000b8c6f, 0x000b8e6f, 0x000b906f, 0x000b926f, 0x000b946f, + 0x000b966f, 0x000b986f, 0x000b9a6f, 0x000b9c6f, 0x000b9e6f, + 0x000ba06f, 0x000ba26f, 0x000ba46f, 0x000ba66f, 0x000ba86f, + 0x000baa6f, 0x000bac6f, 0x000bae6f, 0x000bb06f, 0x000bb26f, + 0x000bb46f, 0x000bb66f, 0x000bb86f, 0x000bba6f, 0x000bbc6f, + 0x000bbe6f, 0x000bc06f, 0x000bc26f, 0x000bc46f, 0x000bc66f, + 0x000bc86f, 0x000bca6f, 0x000bcc6f, 0x000bce6f, 0x000bd06f, + 0x000bd26f, 0x000bd46f, 0x000bd66f, 0x000bd86f, 0x000bda6f, + 0x000bdc6f, 0x000bde6f, 0x000be06f, 0x000be26f, 0x000be46f, + 0x000be66f, 0x000be86f, 0x000bea6f, 0x000bec6f, 0x000bee6f, + 0x000bf06f, 0x000bf26f, 0x000bf46f, 0x000bf66f, 0x000bf86f, + 0x000bfa6f, 0x000bfc6f, 0x000bfe6f, 0x000c006f, 0x000c026f, + 0x000c046f, 0x000c066f, 0x000c086f, 0x000c0a6f, 0x000c0c6f, + 0x000c0e6f, 0x000c106f, 0x000c126f, 0x000c146f, 0x000c166f, + 0x000c186f, 0x000c1a6f, 0x000c1c6f, 0x000c1e6f, 0x000c206f, + 0x000c226f, 0x000c246f, 0x000c266f, 0x000c286f, 0x000c2a6f, + 0x000c2c6f, 0x000c2e6f, 0x000c306f, 0x000c326f, 0x000c346f, + 0x000c366f, 0x000c386f, 0x000c3a6f, 0x000c3c6f, 0x000c3e6f, + 0x000c406f, 0x000c426f, 0x000c446f, 0x000c466f, 0x000c486f, + 0x000c4a6f, 0x000c4c6f, 0x000c4e6f, 0x000c506f, 0x000c526f, + 0x000c546f, 0x000c566f, 0x000c586f, 0x000c5a6f, 0x000c5c6f, + 0x000c5e6f, 0x000c606f, 0x000c626f, 0x000c646f, 0x000c666f, + 0x000c686f, 0x000c6a6f, 0x000c6c6f, 0x000c6e6f, 0x000c706f, + 0x000c726f, 0x000c746f, 0x000c766f, 0x000c786f, 0x000c7a6f, + 0x000c7c6f, 0x000c7e6f, 0x000c806f, 0x000c826f, 0x000c846f, + 0x000c866f, 0x000c886f, 0x000c8a6f, 0x000c8c6f, 0x000c8e6f, + 0x000c906f, 0x000c926f, 0x000c946f, 0x000c966f, 0x000c986f, + 0x000c9a6f, 0x000c9c6f, 0x000c9e6f, 0x000ca06f, 0x000ca26f, + 0x000ca46f, 0x000ca66f, 0x000ca86f, 0x000caa6f, 0x000cac6f, + 0x000cae6f, 0x000cb06f, 0x000cb26f, 0x000cb46f, 0x000cb66f, + 0x000cb86f, 0x000cba6f, 0x000cbc6f, 0x000cbe6f, 0x000cc06f, + 0x000cc26f, 0x000cc46f, 0x000cc66f, 0x000cc86f, 0x000cca6f, + 0x000ccc6f, 0x000cce6f, 0x000cd06f, 0x000cd26f, 0x000cd46f, + 0x000cd66f, 0x000cd86f, 0x000cda6f, 0x000cdc6f, 0x000cde6f, + 0x000ce06f, 0x000ce26f, 0x000ce46f, 0x000ce66f, 0x000ce86f, + 0x000cea6f, 0x000cec6f, 0x000cee6f, 0x000cf06f, 0x000cf26f, + 0x000cf46f, 0x000cf66f, 0x000cf86f, 0x000cfa6f, 0x000cfc6f, + 0x000cfe6f, 0x000d006f, 0x000d026f, 0x000d046f, 0x000d066f, + 0x000d086f, 0x000d0a6f, 0x000d0c6f, 0x000d0e6f, 0x000d106f, + 0x000d126f, 0x000d146f, 0x000d166f, 0x000d186f, 0x000d1a6f, + 0x000d1c6f, 0x000d1e6f, 0x000d206f, 0x000d226f, 0x000d246f, + 0x000d266f, 0x000d286f, 0x000d2a6f, 0x000d2c6f, 0x000d2e6f, + 0x000d306f, 0x000d326f, 0x000d346f, 0x000d366f, 0x000d386f, + 0x000d3a6f, 0x000d3c6f, 0x000d3e6f, 0x000d406f, 0x000d426f, + 0x000d446f, 0x000d466f, 0x000d486f, 0x000d4a6f, 0x000d4c6f, + 0x000d4e6f, 0x000d506f, 0x000d526f, 0x000d546f, 0x000d566f, + 0x000d586f, 0x000d5a6f, 0x000d5c6f, 0x000d5e6f, 0x000d606f, + 0x000d626f, 0x000d646f, 0x000d666f, 0x000d686f, 0x000d6a6f, + 0x000d6c6f, 0x000d6e6f, 0x000d706f, 0x000d726f, 0x000d746f, + 0x000d766f, 0x000d786f, 0x000d7a6f, 0x000d7c6f, 0x000d7e6f, + 0x000d806f, 0x000d826f, 0x000d846f, 0x000d866f, 0x000d886f, + 0x000d8a6f, 0x000d8c6f, 0x000d8e6f, 0x000d906f, 0x000d926f, + 0x000d946f, 0x000d966f, 0x000d986f, 0x000d9a6f, 0x000d9c6f, + 0x000d9e6f, 0x000da06f, 0x000da26f, 0x000da46f, 0x000da66f, + 0x000da86f, 0x000daa6f, 0x000dac6f, 0x000dae6f, 0x000db06f, + 0x000db26f, 0x000db46f, 0x000db66f, 0x000db86f, 0x000dba6f, + 0x000dbc6f, 0x000dbe6f, 0x000dc06f, 0x000dc26f, 0x000dc46f, + 0x000dc66f, 0x000dc86f, 0x000dca6f, 0x000dcc6f, 0x000dce6f, + 0x000dd06f, 0x000dd26f, 0x000dd46f, 0x000dd66f, 0x000dd86f, + 0x000dda6f, 0x000ddc6f, 0x000dde6f, 0x000de06f, 0x000de26f, + 0x000de46f, 0x000de66f, 0x000de86f, 0x000dea6f, 0x000dec6f, + 0x000dee6f, 0x000df06f, 0x000df26f, 0x000df46f, 0x000df66f, + 0x000df86f, 0x000dfa6f, 0x000dfc6f, 0x000dfe6f, 0x000e006f, + 0x000e026f, 0x000e046f, 0x000e066f, 0x000e086f, 0x000e0a6f, + 0x000e0c6f, 0x000e0e6f, 0x000e106f, 0x000e126f, 0x000e146f, + 0x000e166f, 0x000e186f, 0x000e1a6f, 0x000e1c6f, 0x000e1e6f, + 0x000e206f, 0x000e226f, 0x000e246f, 0x000e266f, 0x000e286f, + 0x000e2a6f, 0x000e2c6f, 0x000e2e6f, 0x000e306f, 0x000e326f, + 0x000e346f, 0x000e366f, 0x000e386f, 0x000e3a6f, 0x000e3c6f, + 0x000e3e6f, 0x000e406f, 0x000e426f, 0x000e446f, 0x000e466f, + 0x000e486f, 0x000e4a6f, 0x000e4c6f, 0x000e4e6f, 0x000e506f, + 0x000e526f, 0x000e546f, 0x000e566f, 0x000e586f, 0x000e5a6f, + 0x000e5c6f, 0x000e5e6f, 0x000e606f, 0x000e626f, 0x000e646f, + 0x000e666f, 0x000e686f, 0x000e6a6f, 0x000e6c6f, 0x000e6e6f, + 0x000e706f, 0x000e726f, 0x000e746f, 0x000e766f, 0x000e786f, + 0x000e7a6f, 0x000e7c6f, 0x000e7e6f, 0x000e806f, 0x000e826f, + 0x000e846f, 0x000e866f, 0x000e886f, 0x000e8a6f, 0x000e8c6f, + 0x000e8e6f, 0x000e906f, 0x000e926f, 0x000e946f, 0x000e966f, + 0x000e986f, 0x000e9a6f, 0x000e9c6f, 0x000e9e6f, 0x000ea06f, + 0x000ea26f, 0x000ea46f, 0x000ea66f, 0x000ea86f, 0x000eaa6f, + 0x000eac6f, 0x000eae6f, 0x000eb06f, 0x000eb26f, 0x000eb46f, + 0x000eb66f, 0x000eb86f, 0x000eba6f, 0x000ebc6f, 0x000ebe6f, + 0x000ec06f, 0x000ec26f, 0x000ec46f, 0x000ec66f, 0x000ec86f, + 0x000eca6f, 0x000ecc6f, 0x000ece6f, 0x000ed06f, 0x000ed26f, + 0x000ed46f, 0x000ed66f, 0x000ed86f, 0x000eda6f, 0x000edc6f, + 0x000ede6f, 0x000ee06f, 0x000ee26f, 0x000ee46f, 0x000ee66f, + 0x000ee86f, 0x000eea6f, 0x000eec6f, 0x000eee6f, 0x000ef06f, + 0x000ef26f, 0x000ef46f, 0x000ef66f, 0x000ef86f, 0x000efa6f, + 0x000efc6f, 0x000efe6f, 0x000f006f, 0x000f026f, 0x000f046f, + 0x000f066f, 0x000f086f, 0x000f0a6f, 0x000f0c6f, 0x000f0e6f, + 0x000f106f, 0x000f126f, 0x000f146f, 0x000f166f, 0x000f186f, + 0x000f1a6f, 0x000f1c6f, 0x000f1e6f, 0x000f206f, 0x000f226f, + 0x000f246f, 0x000f266f, 0x000f286f, 0x000f2a6f, 0x000f2c6f, + 0x000f2e6f, 0x000f306f, 0x000f326f, 0x000f346f, 0x000f366f, + 0x000f386f, 0x000f3a6f, 0x000f3c6f, 0x000f3e6f, 0x000f406f, + 0x000f426f, 0x000f446f, 0x000f466f, 0x000f486f, 0x000f4a6f, + 0x000f4c6f, 0x000f4e6f, 0x000f506f, 0x000f526f, 0x000f546f, + 0x000f566f, 0x000f586f, 0x000f5a6f, 0x000f5c6f, 0x000f5e6f, + 0x000f606f, 0x000f626f, 0x000f646f, 0x000f666f, 0x000f686f, + 0x000f6a6f, 0x000f6c6f, 0x000f6e6f, 0x000f706f, 0x000f726f, + 0x000f746f, 0x000f766f, 0x000f786f, 0x000f7a6f, 0x000f7c6f, + 0x000f7e6f, 0x000f806f, 0x000f826f, 0x000f846f, 0x000f866f, + 0x000f886f, 0x000f8a6f, 0x000f8c6f, 0x000f8e6f, 0x000f906f, + 0x000f926f, 0x000f946f, 0x000f966f, 0x000f986f, 0x000f9a6f, + 0x000f9c6f, 0x000f9e6f, 0x000fa06f, 0x000fa26f, 0x000fa46f, + 0x000fa66f, 0x000fa86f, 0x000faa6f, 0x000fac6f, 0x000fae6f, + 0x000fb06f, 0x000fb26f, 0x000fb46f, 0x000fb66f, 0x000fb86f, + 0x000fba6f, 0x000fbc6f, 0x000fbe6f, 0x000fc06f, 0x000fc26f, + 0x000fc46f, 0x000fc66f, 0x000fc86f, 0x000fca6f, 0x000fcc6f, + 0x000fce6f, 0x000fd06f, 0x000fd26f, 0x000fd46f, 0x000fd66f, + 0x000fd86f, 0x000fda6f, 0x000fdc6f, 0x000fde6f, 0x000fe06f, + 0x000fe26f, 0x000fe46f, 0x000fe66f, 0x000fe86f, 0x000fea6f, + 0x000fec6f, 0x000fee6f, 0x000ff06f, 0x000ff26f, 0x000ff46f, + 0x000ff66f, 0x000ff86f, 0x000ffa6f, 0x000ffc6f, 0x000ffe6f #endif /* LONGER_HUFFTABLE */ - }, + }, - .len_table = { - 0x000bffef, 0x00000003, 0x00000084, 0x00000145, - 0x00000345, 0x00000626, 0x000002a7, 0x00000aa7, - 0x000000c6, 0x000004c6, 0x00001469, 0x00003469, - 0x00000c69, 0x00002c69, 0x00001c69, 0x00003c69, - 0x0000026a, 0x0000226a, 0x0000426a, 0x0000626a, - 0x000008eb, 0x000048eb, 0x000088eb, 0x0000c8eb, - 0x000029ec, 0x0000a9ec, 0x000129ec, 0x0001a9ec, - 0x000069ec, 0x0000e9ec, 0x000169ec, 0x0001e9ec, - 0x000019ed, 0x000099ed, 0x000119ed, 0x000199ed, - 0x000219ed, 0x000299ed, 0x000319ed, 0x000399ed, - 0x000059ed, 0x0000d9ed, 0x000159ed, 0x0001d9ed, - 0x000259ed, 0x0002d9ed, 0x000359ed, 0x0003d9ed, - 0x000039ed, 0x0000b9ed, 0x000139ed, 0x0001b9ed, - 0x000239ed, 0x0002b9ed, 0x000339ed, 0x0003b9ed, - 0x000079ed, 0x0000f9ed, 0x000179ed, 0x0001f9ed, - 0x000279ed, 0x0002f9ed, 0x000379ed, 0x0003f9ed, - 0x00003fef, 0x00013fef, 0x00023fef, 0x00033fef, - 0x00043fef, 0x00053fef, 0x00063fef, 0x00073fef, - 0x00083fef, 0x00093fef, 0x000a3fef, 0x000b3fef, - 0x000c3fef, 0x000d3fef, 0x000e3fef, 0x000f3fef, - 0x00007ff0, 0x00027ff0, 0x00047ff0, 0x00067ff0, - 0x00087ff0, 0x000a7ff0, 0x000c7ff0, 0x000e7ff0, - 0x00107ff0, 0x00127ff0, 0x00147ff0, 0x00167ff0, - 0x00187ff0, 0x001a7ff0, 0x001c7ff0, 0x001e7ff0, - 0x0000fff1, 0x0004fff1, 0x0008fff1, 0x000cfff1, - 0x0010fff1, 0x0014fff1, 0x0018fff1, 0x001cfff1, - 0x0020fff1, 0x0024fff1, 0x0028fff1, 0x002cfff1, - 0x0030fff1, 0x0034fff1, 0x0038fff1, 0x003cfff1, - 0x0002fff1, 0x0006fff1, 0x000afff1, 0x000efff1, - 0x0012fff1, 0x0016fff1, 0x001afff1, 0x001efff1, - 0x0022fff1, 0x0026fff1, 0x002afff1, 0x002efff1, - 0x0032fff1, 0x0036fff1, 0x003afff1, 0x003efff1, - 0x00017ff1, 0x00037ff1, 0x00057ff1, 0x00077ff1, - 0x00097ff1, 0x000b7ff1, 0x000d7ff1, 0x000f7ff1, - 0x00117ff1, 0x00137ff1, 0x00157ff1, 0x00177ff1, - 0x00197ff1, 0x001b7ff1, 0x001d7ff1, 0x001f7ff1, - 0x00217ff1, 0x00237ff1, 0x00257ff1, 0x00277ff1, - 0x00297ff1, 0x002b7ff1, 0x002d7ff1, 0x002f7ff1, - 0x00317ff1, 0x00337ff1, 0x00357ff1, 0x00377ff1, - 0x00397ff1, 0x003b7ff1, 0x003d7ff1, 0x003f7ff1, - 0x0001fff2, 0x0005fff2, 0x0009fff2, 0x000dfff2, - 0x0011fff2, 0x0015fff2, 0x0019fff2, 0x001dfff2, - 0x0021fff2, 0x0025fff2, 0x0029fff2, 0x002dfff2, - 0x0031fff2, 0x0035fff2, 0x0039fff2, 0x003dfff2, - 0x0041fff2, 0x0045fff2, 0x0049fff2, 0x004dfff2, - 0x0051fff2, 0x0055fff2, 0x0059fff2, 0x005dfff2, - 0x0061fff2, 0x0065fff2, 0x0069fff2, 0x006dfff2, - 0x0071fff2, 0x0075fff2, 0x0079fff2, 0x007dfff2, - 0x0007fff4, 0x0017fff4, 0x0027fff4, 0x0037fff4, - 0x0047fff4, 0x0057fff4, 0x0067fff4, 0x0077fff4, - 0x0087fff4, 0x0097fff4, 0x00a7fff4, 0x00b7fff4, - 0x00c7fff4, 0x00d7fff4, 0x00e7fff4, 0x00f7fff4, - 0x0107fff4, 0x0117fff4, 0x0127fff4, 0x0137fff4, - 0x0147fff4, 0x0157fff4, 0x0167fff4, 0x0177fff4, - 0x0187fff4, 0x0197fff4, 0x01a7fff4, 0x01b7fff4, - 0x01c7fff4, 0x01d7fff4, 0x01e7fff4, 0x01f7fff4, - 0x000ffff4, 0x001ffff4, 0x002ffff4, 0x003ffff4, - 0x004ffff4, 0x005ffff4, 0x006ffff4, 0x007ffff4, - 0x008ffff4, 0x009ffff4, 0x00affff4, 0x00bffff4, - 0x00cffff4, 0x00dffff4, 0x00effff4, 0x00fffff4, - 0x010ffff4, 0x011ffff4, 0x012ffff4, 0x013ffff4, - 0x014ffff4, 0x015ffff4, 0x016ffff4, 0x017ffff4, - 0x018ffff4, 0x019ffff4, 0x01affff4, 0x01bffff4, - 0x01cffff4, 0x01dffff4, 0x01effff4, 0x0000bfeb}, + .len_table = { 0x000bffef, 0x00000003, 0x00000084, 0x00000145, 0x00000345, + 0x00000626, 0x000002a7, 0x00000aa7, 0x000000c6, 0x000004c6, + 0x00001469, 0x00003469, 0x00000c69, 0x00002c69, 0x00001c69, + 0x00003c69, 0x0000026a, 0x0000226a, 0x0000426a, 0x0000626a, + 0x000008eb, 0x000048eb, 0x000088eb, 0x0000c8eb, 0x000029ec, + 0x0000a9ec, 0x000129ec, 0x0001a9ec, 0x000069ec, 0x0000e9ec, + 0x000169ec, 0x0001e9ec, 0x000019ed, 0x000099ed, 0x000119ed, + 0x000199ed, 0x000219ed, 0x000299ed, 0x000319ed, 0x000399ed, + 0x000059ed, 0x0000d9ed, 0x000159ed, 0x0001d9ed, 0x000259ed, + 0x0002d9ed, 0x000359ed, 0x0003d9ed, 0x000039ed, 0x0000b9ed, + 0x000139ed, 0x0001b9ed, 0x000239ed, 0x0002b9ed, 0x000339ed, + 0x0003b9ed, 0x000079ed, 0x0000f9ed, 0x000179ed, 0x0001f9ed, + 0x000279ed, 0x0002f9ed, 0x000379ed, 0x0003f9ed, 0x00003fef, + 0x00013fef, 0x00023fef, 0x00033fef, 0x00043fef, 0x00053fef, + 0x00063fef, 0x00073fef, 0x00083fef, 0x00093fef, 0x000a3fef, + 0x000b3fef, 0x000c3fef, 0x000d3fef, 0x000e3fef, 0x000f3fef, + 0x00007ff0, 0x00027ff0, 0x00047ff0, 0x00067ff0, 0x00087ff0, + 0x000a7ff0, 0x000c7ff0, 0x000e7ff0, 0x00107ff0, 0x00127ff0, + 0x00147ff0, 0x00167ff0, 0x00187ff0, 0x001a7ff0, 0x001c7ff0, + 0x001e7ff0, 0x0000fff1, 0x0004fff1, 0x0008fff1, 0x000cfff1, + 0x0010fff1, 0x0014fff1, 0x0018fff1, 0x001cfff1, 0x0020fff1, + 0x0024fff1, 0x0028fff1, 0x002cfff1, 0x0030fff1, 0x0034fff1, + 0x0038fff1, 0x003cfff1, 0x0002fff1, 0x0006fff1, 0x000afff1, + 0x000efff1, 0x0012fff1, 0x0016fff1, 0x001afff1, 0x001efff1, + 0x0022fff1, 0x0026fff1, 0x002afff1, 0x002efff1, 0x0032fff1, + 0x0036fff1, 0x003afff1, 0x003efff1, 0x00017ff1, 0x00037ff1, + 0x00057ff1, 0x00077ff1, 0x00097ff1, 0x000b7ff1, 0x000d7ff1, + 0x000f7ff1, 0x00117ff1, 0x00137ff1, 0x00157ff1, 0x00177ff1, + 0x00197ff1, 0x001b7ff1, 0x001d7ff1, 0x001f7ff1, 0x00217ff1, + 0x00237ff1, 0x00257ff1, 0x00277ff1, 0x00297ff1, 0x002b7ff1, + 0x002d7ff1, 0x002f7ff1, 0x00317ff1, 0x00337ff1, 0x00357ff1, + 0x00377ff1, 0x00397ff1, 0x003b7ff1, 0x003d7ff1, 0x003f7ff1, + 0x0001fff2, 0x0005fff2, 0x0009fff2, 0x000dfff2, 0x0011fff2, + 0x0015fff2, 0x0019fff2, 0x001dfff2, 0x0021fff2, 0x0025fff2, + 0x0029fff2, 0x002dfff2, 0x0031fff2, 0x0035fff2, 0x0039fff2, + 0x003dfff2, 0x0041fff2, 0x0045fff2, 0x0049fff2, 0x004dfff2, + 0x0051fff2, 0x0055fff2, 0x0059fff2, 0x005dfff2, 0x0061fff2, + 0x0065fff2, 0x0069fff2, 0x006dfff2, 0x0071fff2, 0x0075fff2, + 0x0079fff2, 0x007dfff2, 0x0007fff4, 0x0017fff4, 0x0027fff4, + 0x0037fff4, 0x0047fff4, 0x0057fff4, 0x0067fff4, 0x0077fff4, + 0x0087fff4, 0x0097fff4, 0x00a7fff4, 0x00b7fff4, 0x00c7fff4, + 0x00d7fff4, 0x00e7fff4, 0x00f7fff4, 0x0107fff4, 0x0117fff4, + 0x0127fff4, 0x0137fff4, 0x0147fff4, 0x0157fff4, 0x0167fff4, + 0x0177fff4, 0x0187fff4, 0x0197fff4, 0x01a7fff4, 0x01b7fff4, + 0x01c7fff4, 0x01d7fff4, 0x01e7fff4, 0x01f7fff4, 0x000ffff4, + 0x001ffff4, 0x002ffff4, 0x003ffff4, 0x004ffff4, 0x005ffff4, + 0x006ffff4, 0x007ffff4, 0x008ffff4, 0x009ffff4, 0x00affff4, + 0x00bffff4, 0x00cffff4, 0x00dffff4, 0x00effff4, 0x00fffff4, + 0x010ffff4, 0x011ffff4, 0x012ffff4, 0x013ffff4, 0x014ffff4, + 0x015ffff4, 0x016ffff4, 0x017ffff4, 0x018ffff4, 0x019ffff4, + 0x01affff4, 0x01bffff4, 0x01cffff4, 0x01dffff4, 0x01effff4, + 0x0000bfeb }, - .lit_table = { - 0x000c, 0x0035, 0x0093, 0x00b5, 0x0075, 0x00f5, 0x0193, 0x0053, - 0x0153, 0x000d, 0x0009, 0x00d3, 0x01d3, 0x008d, 0x0033, 0x0133, - 0x00b3, 0x0147, 0x0347, 0x00c7, 0x02c7, 0x01c7, 0x03c7, 0x0027, - 0x0227, 0x002f, 0x042f, 0x022f, 0x0127, 0x062f, 0x01b3, 0x0073, - 0x001c, 0x0327, 0x0173, 0x00a7, 0x00f3, 0x02a7, 0x01a7, 0x01f3, - 0x004d, 0x000b, 0x03a7, 0x0067, 0x0049, 0x00cd, 0x0029, 0x0267, - 0x002d, 0x00ad, 0x006d, 0x00ed, 0x001d, 0x009d, 0x010b, 0x008b, - 0x005d, 0x018b, 0x004b, 0x014b, 0x00cb, 0x0167, 0x01cb, 0x002b, - 0x00dd, 0x003d, 0x00bd, 0x007d, 0x012b, 0x00ab, 0x01ab, 0x006b, - 0x016b, 0x00fd, 0x00eb, 0x0367, 0x01eb, 0x001b, 0x011b, 0x009b, - 0x0003, 0x00e7, 0x019b, 0x0083, 0x005b, 0x015b, 0x02e7, 0x00db, - 0x01e7, 0x03e7, 0x0017, 0x0217, 0x0117, 0x0317, 0x0097, 0x0297, - 0x01db, 0x0002, 0x0069, 0x0019, 0x0016, 0x0012, 0x0059, 0x0039, - 0x0079, 0x0036, 0x003b, 0x0043, 0x000e, 0x0005, 0x002e, 0x001e, - 0x0045, 0x0197, 0x003e, 0x0001, 0x0021, 0x0011, 0x00c3, 0x0025, - 0x013b, 0x0065, 0x00bb, 0x012f, 0x0397, 0x0057, 0x0257, 0x0157, - 0x01bb, 0x052f, 0x032f, 0x0357, 0x00d7, 0x072f, 0x00af, 0x02d7, - 0x01d7, 0x04af, 0x02af, 0x03d7, 0x06af, 0x01af, 0x05af, 0x0037, - 0x0237, 0x03af, 0x07af, 0x006f, 0x046f, 0x026f, 0x066f, 0x016f, - 0x056f, 0x036f, 0x076f, 0x00ef, 0x04ef, 0x02ef, 0x06ef, 0x01ef, - 0x0137, 0x05ef, 0x03ef, 0x07ef, 0x0337, 0x001f, 0x00b7, 0x041f, - 0x02b7, 0x021f, 0x061f, 0x011f, 0x051f, 0x031f, 0x071f, 0x009f, - 0x01b7, 0x049f, 0x029f, 0x069f, 0x03b7, 0x019f, 0x059f, 0x039f, - 0x079f, 0x005f, 0x045f, 0x025f, 0x065f, 0x0077, 0x015f, 0x0277, - 0x007b, 0x0177, 0x017b, 0x00fb, 0x055f, 0x035f, 0x075f, 0x0377, - 0x00f7, 0x00df, 0x04df, 0x02df, 0x06df, 0x01df, 0x05df, 0x02f7, - 0x01f7, 0x03df, 0x07df, 0x003f, 0x043f, 0x023f, 0x063f, 0x013f, - 0x053f, 0x033f, 0x073f, 0x00bf, 0x04bf, 0x02bf, 0x06bf, 0x01bf, - 0x01fb, 0x03f7, 0x05bf, 0x000f, 0x020f, 0x03bf, 0x07bf, 0x010f, - 0x030f, 0x007f, 0x047f, 0x027f, 0x067f, 0x017f, 0x057f, 0x008f, - 0x0007, 0x028f, 0x037f, 0x018f, 0x038f, 0x077f, 0x00ff, 0x04ff, - 0x0107, 0x004f, 0x02ff, 0x06ff, 0x0087, 0x024f, 0x0187, 0x0023, - 0x1fff}, + .lit_table = { 0x000c, 0x0035, 0x0093, 0x00b5, 0x0075, 0x00f5, 0x0193, 0x0053, + 0x0153, 0x000d, 0x0009, 0x00d3, 0x01d3, 0x008d, 0x0033, 0x0133, + 0x00b3, 0x0147, 0x0347, 0x00c7, 0x02c7, 0x01c7, 0x03c7, 0x0027, + 0x0227, 0x002f, 0x042f, 0x022f, 0x0127, 0x062f, 0x01b3, 0x0073, + 0x001c, 0x0327, 0x0173, 0x00a7, 0x00f3, 0x02a7, 0x01a7, 0x01f3, + 0x004d, 0x000b, 0x03a7, 0x0067, 0x0049, 0x00cd, 0x0029, 0x0267, + 0x002d, 0x00ad, 0x006d, 0x00ed, 0x001d, 0x009d, 0x010b, 0x008b, + 0x005d, 0x018b, 0x004b, 0x014b, 0x00cb, 0x0167, 0x01cb, 0x002b, + 0x00dd, 0x003d, 0x00bd, 0x007d, 0x012b, 0x00ab, 0x01ab, 0x006b, + 0x016b, 0x00fd, 0x00eb, 0x0367, 0x01eb, 0x001b, 0x011b, 0x009b, + 0x0003, 0x00e7, 0x019b, 0x0083, 0x005b, 0x015b, 0x02e7, 0x00db, + 0x01e7, 0x03e7, 0x0017, 0x0217, 0x0117, 0x0317, 0x0097, 0x0297, + 0x01db, 0x0002, 0x0069, 0x0019, 0x0016, 0x0012, 0x0059, 0x0039, + 0x0079, 0x0036, 0x003b, 0x0043, 0x000e, 0x0005, 0x002e, 0x001e, + 0x0045, 0x0197, 0x003e, 0x0001, 0x0021, 0x0011, 0x00c3, 0x0025, + 0x013b, 0x0065, 0x00bb, 0x012f, 0x0397, 0x0057, 0x0257, 0x0157, + 0x01bb, 0x052f, 0x032f, 0x0357, 0x00d7, 0x072f, 0x00af, 0x02d7, + 0x01d7, 0x04af, 0x02af, 0x03d7, 0x06af, 0x01af, 0x05af, 0x0037, + 0x0237, 0x03af, 0x07af, 0x006f, 0x046f, 0x026f, 0x066f, 0x016f, + 0x056f, 0x036f, 0x076f, 0x00ef, 0x04ef, 0x02ef, 0x06ef, 0x01ef, + 0x0137, 0x05ef, 0x03ef, 0x07ef, 0x0337, 0x001f, 0x00b7, 0x041f, + 0x02b7, 0x021f, 0x061f, 0x011f, 0x051f, 0x031f, 0x071f, 0x009f, + 0x01b7, 0x049f, 0x029f, 0x069f, 0x03b7, 0x019f, 0x059f, 0x039f, + 0x079f, 0x005f, 0x045f, 0x025f, 0x065f, 0x0077, 0x015f, 0x0277, + 0x007b, 0x0177, 0x017b, 0x00fb, 0x055f, 0x035f, 0x075f, 0x0377, + 0x00f7, 0x00df, 0x04df, 0x02df, 0x06df, 0x01df, 0x05df, 0x02f7, + 0x01f7, 0x03df, 0x07df, 0x003f, 0x043f, 0x023f, 0x063f, 0x013f, + 0x053f, 0x033f, 0x073f, 0x00bf, 0x04bf, 0x02bf, 0x06bf, 0x01bf, + 0x01fb, 0x03f7, 0x05bf, 0x000f, 0x020f, 0x03bf, 0x07bf, 0x010f, + 0x030f, 0x007f, 0x047f, 0x027f, 0x067f, 0x017f, 0x057f, 0x008f, + 0x0007, 0x028f, 0x037f, 0x018f, 0x038f, 0x077f, 0x00ff, 0x04ff, + 0x0107, 0x004f, 0x02ff, 0x06ff, 0x0087, 0x024f, 0x0187, 0x0023, + 0x1fff }, - .lit_table_sizes = { - 0x05, 0x08, 0x09, 0x08, 0x08, 0x08, 0x09, 0x09, - 0x09, 0x08, 0x07, 0x09, 0x09, 0x08, 0x09, 0x09, - 0x09, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, - 0x0a, 0x0b, 0x0b, 0x0b, 0x0a, 0x0b, 0x09, 0x09, - 0x05, 0x0a, 0x09, 0x0a, 0x09, 0x0a, 0x0a, 0x09, - 0x08, 0x09, 0x0a, 0x0a, 0x07, 0x08, 0x07, 0x0a, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x09, 0x09, - 0x08, 0x09, 0x09, 0x09, 0x09, 0x0a, 0x09, 0x09, - 0x08, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x08, 0x09, 0x0a, 0x09, 0x09, 0x09, 0x09, - 0x08, 0x0a, 0x09, 0x08, 0x09, 0x09, 0x0a, 0x09, - 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, - 0x09, 0x05, 0x07, 0x07, 0x06, 0x05, 0x07, 0x07, - 0x07, 0x06, 0x09, 0x08, 0x06, 0x07, 0x06, 0x06, - 0x07, 0x0a, 0x06, 0x06, 0x06, 0x06, 0x08, 0x07, - 0x09, 0x07, 0x09, 0x0b, 0x0a, 0x0a, 0x0a, 0x0a, - 0x09, 0x0b, 0x0b, 0x0a, 0x0a, 0x0b, 0x0b, 0x0a, - 0x0a, 0x0b, 0x0b, 0x0a, 0x0b, 0x0b, 0x0b, 0x0a, - 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0a, 0x0b, 0x0b, 0x0b, 0x0a, 0x0b, 0x0a, 0x0b, - 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0a, 0x0b, 0x0b, 0x0b, 0x0a, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, 0x0b, 0x0a, - 0x09, 0x0a, 0x09, 0x09, 0x0b, 0x0b, 0x0b, 0x0a, - 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, - 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x09, 0x0a, 0x0b, 0x0a, 0x0a, 0x0b, 0x0b, 0x0a, - 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, - 0x09, 0x0a, 0x0b, 0x0a, 0x0a, 0x0b, 0x0b, 0x0b, - 0x09, 0x0a, 0x0b, 0x0b, 0x09, 0x0a, 0x09, 0x08, - 0x0f}, + .lit_table_sizes = { 0x05, 0x08, 0x09, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09, 0x08, + 0x07, 0x09, 0x09, 0x08, 0x09, 0x09, 0x09, 0x0a, 0x0a, 0x0a, + 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0b, 0x0b, 0x0b, 0x0a, 0x0b, + 0x09, 0x09, 0x05, 0x0a, 0x09, 0x0a, 0x09, 0x0a, 0x0a, 0x09, + 0x08, 0x09, 0x0a, 0x0a, 0x07, 0x08, 0x07, 0x0a, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x09, 0x09, 0x08, 0x09, 0x09, 0x09, + 0x09, 0x0a, 0x09, 0x09, 0x08, 0x08, 0x08, 0x08, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x08, 0x09, 0x0a, 0x09, 0x09, 0x09, 0x09, + 0x08, 0x0a, 0x09, 0x08, 0x09, 0x09, 0x0a, 0x09, 0x0a, 0x0a, + 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x09, 0x05, 0x07, 0x07, + 0x06, 0x05, 0x07, 0x07, 0x07, 0x06, 0x09, 0x08, 0x06, 0x07, + 0x06, 0x06, 0x07, 0x0a, 0x06, 0x06, 0x06, 0x06, 0x08, 0x07, + 0x09, 0x07, 0x09, 0x0b, 0x0a, 0x0a, 0x0a, 0x0a, 0x09, 0x0b, + 0x0b, 0x0a, 0x0a, 0x0b, 0x0b, 0x0a, 0x0a, 0x0b, 0x0b, 0x0a, + 0x0b, 0x0b, 0x0b, 0x0a, 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0a, 0x0b, 0x0b, 0x0b, 0x0a, 0x0b, 0x0a, 0x0b, 0x0a, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, 0x0b, 0x0b, 0x0b, + 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, + 0x0b, 0x0a, 0x09, 0x0a, 0x09, 0x09, 0x0b, 0x0b, 0x0b, 0x0a, + 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, 0x0a, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x09, 0x0a, 0x0b, 0x0a, 0x0a, 0x0b, + 0x0b, 0x0a, 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, + 0x09, 0x0a, 0x0b, 0x0a, 0x0a, 0x0b, 0x0b, 0x0b, 0x09, 0x0a, + 0x0b, 0x0b, 0x09, 0x0a, 0x09, 0x08, 0x0f }, #ifndef LONGER_HUFFTABLE - .dcodes = { - 0x007f, 0x01ff, 0x017f, 0x03ff, 0x00ff, 0x003f, 0x00bf, 0x000f, - 0x002f, 0x001f, 0x000b, 0x001b, 0x0004, 0x0007, 0x000c, 0x0002, - 0x000a, 0x0006, 0x000e, 0x0001, 0x0009, 0x0017, 0x0000, 0x0005, - 0x000d, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000}, + .dcodes = { 0x007f, 0x01ff, 0x017f, 0x03ff, 0x00ff, 0x003f, 0x00bf, 0x000f, + 0x002f, 0x001f, 0x000b, 0x001b, 0x0004, 0x0007, 0x000c, 0x0002, + 0x000a, 0x0006, 0x000e, 0x0001, 0x0009, 0x0017, 0x0000, 0x0005, + 0x000d, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000 }, - .dcodes_sizes = { - 0x09, 0x0a, 0x09, 0x0a, 0x09, 0x08, 0x08, 0x06, - 0x06, 0x06, 0x05, 0x05, 0x04, 0x05, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, 0x03, 0x04, - 0x04, 0x04, 0x00, 0x00, 0x00, 0x00} + .dcodes_sizes = { 0x09, 0x0a, 0x09, 0x0a, 0x09, 0x08, 0x08, 0x06, 0x06, 0x06, + 0x05, 0x05, 0x04, 0x05, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x05, 0x03, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00 } #else .dcodes = { 0x0000, 0x0000, 0x0000, 0x0000}, @@ -2274,14 +1831,11 @@ struct isal_hufftables hufftables_default = { .dcodes_sizes = { 0x00, 0x00, 0x00, 0x00} #endif -}; + }; #else // LARGE_WINDOW -const uint8_t gzip_hdr[] = { - 0x1f, 0x8b, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff -}; +const uint8_t gzip_hdr[] = { 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff }; const uint32_t gzip_hdr_bytes = 10; const uint32_t gzip_trl_bytes = 8; @@ -2291,2229 +1845,1790 @@ const uint8_t zlib_hdr[] = { 0x78, 0x01 }; const uint32_t zlib_hdr_bytes = 2; const uint32_t zlib_trl_bytes = 4; -struct isal_hufftables hufftables_default = { +struct isal_hufftables + hufftables_default = { - .deflate_hdr = { - 0xed, 0xfd, 0x09, 0x80, 0x1c, 0x45, 0xf9, 0xbf, - 0x81, 0xf7, 0x66, 0x37, 0xd7, 0x24, 0x9b, 0x04, - 0x40, 0x45, 0x45, 0x52, 0x04, 0x20, 0x09, 0xcc, - 0x2e, 0xbb, 0x9b, 0x3b, 0x81, 0x24, 0xbb, 0xb9, - 0x21, 0x17, 0x49, 0xb8, 0x04, 0x85, 0xde, 0x99, - 0xde, 0x9d, 0x26, 0x33, 0xd3, 0x43, 0xf7, 0x4c, - 0x36, 0x8b, 0x08, 0xf1, 0x56, 0x51, 0xc1, 0xfb, - 0x56, 0x54, 0xc4, 0x5b, 0x51, 0xf1, 0x16, 0x0d, - 0x89, 0x8a, 0x37, 0x78, 0xdf, 0x1a, 0x45, 0x05, - 0xef, 0x20, 0xaa, 0xa0, 0x90, 0xfd, 0xff, 0x9f, - 0xf7, 0xad, 0x9e, 0xa9, 0xdd, 0xdd, 0x70, 0xfa, - 0xfd, 0xfd, 0xbe, 0xbf, 0xff, 0xdf, 0xcd, 0x66, - 0x67, 0xba, 0xbb, 0xaa, 0xea, 0x7d, 0xdf, 0x7a, - 0xeb, 0xad, 0x4f, 0xbd, 0xf5, 0x56, 0x35}, + .deflate_hdr = { 0xed, 0xfd, 0x09, 0x80, 0x1c, 0x45, 0xf9, 0xbf, 0x81, 0xf7, 0x66, + 0x37, 0xd7, 0x24, 0x9b, 0x04, 0x40, 0x45, 0x45, 0x52, 0x04, 0x20, + 0x09, 0xcc, 0x2e, 0xbb, 0x9b, 0x3b, 0x81, 0x24, 0xbb, 0xb9, 0x21, + 0x17, 0x49, 0xb8, 0x04, 0x85, 0xde, 0x99, 0xde, 0x9d, 0x26, 0x33, + 0xd3, 0x43, 0xf7, 0x4c, 0x36, 0x8b, 0x08, 0xf1, 0x56, 0x51, 0xc1, + 0xfb, 0x56, 0x54, 0xc4, 0x5b, 0x51, 0xf1, 0x16, 0x0d, 0x89, 0x8a, + 0x37, 0x78, 0xdf, 0x1a, 0x45, 0x05, 0xef, 0x20, 0xaa, 0xa0, 0x90, + 0xfd, 0xff, 0x9f, 0xf7, 0xad, 0x9e, 0xa9, 0xdd, 0xdd, 0x70, 0xfa, + 0xfd, 0xfd, 0xbe, 0xbf, 0xff, 0xdf, 0xcd, 0x66, 0x67, 0xba, 0xbb, + 0xaa, 0xea, 0x7d, 0xdf, 0x7a, 0xeb, 0xad, 0x4f, 0xbd, 0xf5, 0x56, + 0x35 }, - .deflate_hdr_count = 110, - .deflate_hdr_extra_bits = 6, + .deflate_hdr_count = 110, + .deflate_hdr_extra_bits = 6, - .dist_table = { - 0x000007e8, 0x00001fe9, + .dist_table = { 0x000007e8, 0x00001fe9, #ifdef LONGER_HUFFTABLE - 0x000017e8, 0x00003fe9, 0x00000fe9, 0x00002fe9, - 0x000003e8, 0x000013e8, 0x00000be9, 0x00001be9, - 0x00002be9, 0x00003be9, 0x000002e8, 0x00000ae8, - 0x000012e8, 0x00001ae8, 0x000006e9, 0x00000ee9, - 0x000016e9, 0x00001ee9, 0x000026e9, 0x00002ee9, - 0x000036e9, 0x00003ee9, 0x000001e9, 0x000009e9, - 0x000011e9, 0x000019e9, 0x000021e9, 0x000029e9, - 0x000031e9, 0x000039e9, 0x00000129, 0x00000529, - 0x00000929, 0x00000d29, 0x00001129, 0x00001529, - 0x00001929, 0x00001d29, 0x00002129, 0x00002529, - 0x00002929, 0x00002d29, 0x00003129, 0x00003529, - 0x00003929, 0x00003d29, 0x00000329, 0x00000729, - 0x00000b29, 0x00000f29, 0x00001329, 0x00001729, - 0x00001b29, 0x00001f29, 0x00002329, 0x00002729, - 0x00002b29, 0x00002f29, 0x00003329, 0x00003729, - 0x00003b29, 0x00003f29, 0x000000aa, 0x000004aa, - 0x000008aa, 0x00000caa, 0x000010aa, 0x000014aa, - 0x000018aa, 0x00001caa, 0x000020aa, 0x000024aa, - 0x000028aa, 0x00002caa, 0x000030aa, 0x000034aa, - 0x000038aa, 0x00003caa, 0x000040aa, 0x000044aa, - 0x000048aa, 0x00004caa, 0x000050aa, 0x000054aa, - 0x000058aa, 0x00005caa, 0x000060aa, 0x000064aa, - 0x000068aa, 0x00006caa, 0x000070aa, 0x000074aa, - 0x000078aa, 0x00007caa, 0x000002aa, 0x000006aa, - 0x00000aaa, 0x00000eaa, 0x000012aa, 0x000016aa, - 0x00001aaa, 0x00001eaa, 0x000022aa, 0x000026aa, - 0x00002aaa, 0x00002eaa, 0x000032aa, 0x000036aa, - 0x00003aaa, 0x00003eaa, 0x000042aa, 0x000046aa, - 0x00004aaa, 0x00004eaa, 0x000052aa, 0x000056aa, - 0x00005aaa, 0x00005eaa, 0x000062aa, 0x000066aa, - 0x00006aaa, 0x00006eaa, 0x000072aa, 0x000076aa, - 0x00007aaa, 0x00007eaa, 0x0000008a, 0x0000028a, - 0x0000048a, 0x0000068a, 0x0000088a, 0x00000a8a, - 0x00000c8a, 0x00000e8a, 0x0000108a, 0x0000128a, - 0x0000148a, 0x0000168a, 0x0000188a, 0x00001a8a, - 0x00001c8a, 0x00001e8a, 0x0000208a, 0x0000228a, - 0x0000248a, 0x0000268a, 0x0000288a, 0x00002a8a, - 0x00002c8a, 0x00002e8a, 0x0000308a, 0x0000328a, - 0x0000348a, 0x0000368a, 0x0000388a, 0x00003a8a, - 0x00003c8a, 0x00003e8a, 0x0000408a, 0x0000428a, - 0x0000448a, 0x0000468a, 0x0000488a, 0x00004a8a, - 0x00004c8a, 0x00004e8a, 0x0000508a, 0x0000528a, - 0x0000548a, 0x0000568a, 0x0000588a, 0x00005a8a, - 0x00005c8a, 0x00005e8a, 0x0000608a, 0x0000628a, - 0x0000648a, 0x0000668a, 0x0000688a, 0x00006a8a, - 0x00006c8a, 0x00006e8a, 0x0000708a, 0x0000728a, - 0x0000748a, 0x0000768a, 0x0000788a, 0x00007a8a, - 0x00007c8a, 0x00007e8a, 0x0000018a, 0x0000038a, - 0x0000058a, 0x0000078a, 0x0000098a, 0x00000b8a, - 0x00000d8a, 0x00000f8a, 0x0000118a, 0x0000138a, - 0x0000158a, 0x0000178a, 0x0000198a, 0x00001b8a, - 0x00001d8a, 0x00001f8a, 0x0000218a, 0x0000238a, - 0x0000258a, 0x0000278a, 0x0000298a, 0x00002b8a, - 0x00002d8a, 0x00002f8a, 0x0000318a, 0x0000338a, - 0x0000358a, 0x0000378a, 0x0000398a, 0x00003b8a, - 0x00003d8a, 0x00003f8a, 0x0000418a, 0x0000438a, - 0x0000458a, 0x0000478a, 0x0000498a, 0x00004b8a, - 0x00004d8a, 0x00004f8a, 0x0000518a, 0x0000538a, - 0x0000558a, 0x0000578a, 0x0000598a, 0x00005b8a, - 0x00005d8a, 0x00005f8a, 0x0000618a, 0x0000638a, - 0x0000658a, 0x0000678a, 0x0000698a, 0x00006b8a, - 0x00006d8a, 0x00006f8a, 0x0000718a, 0x0000738a, - 0x0000758a, 0x0000778a, 0x0000798a, 0x00007b8a, - 0x00007d8a, 0x00007f8a, 0x0000004b, 0x0000024b, - 0x0000044b, 0x0000064b, 0x0000084b, 0x00000a4b, - 0x00000c4b, 0x00000e4b, 0x0000104b, 0x0000124b, - 0x0000144b, 0x0000164b, 0x0000184b, 0x00001a4b, - 0x00001c4b, 0x00001e4b, 0x0000204b, 0x0000224b, - 0x0000244b, 0x0000264b, 0x0000284b, 0x00002a4b, - 0x00002c4b, 0x00002e4b, 0x0000304b, 0x0000324b, - 0x0000344b, 0x0000364b, 0x0000384b, 0x00003a4b, - 0x00003c4b, 0x00003e4b, 0x0000404b, 0x0000424b, - 0x0000444b, 0x0000464b, 0x0000484b, 0x00004a4b, - 0x00004c4b, 0x00004e4b, 0x0000504b, 0x0000524b, - 0x0000544b, 0x0000564b, 0x0000584b, 0x00005a4b, - 0x00005c4b, 0x00005e4b, 0x0000604b, 0x0000624b, - 0x0000644b, 0x0000664b, 0x0000684b, 0x00006a4b, - 0x00006c4b, 0x00006e4b, 0x0000704b, 0x0000724b, - 0x0000744b, 0x0000764b, 0x0000784b, 0x00007a4b, - 0x00007c4b, 0x00007e4b, 0x0000804b, 0x0000824b, - 0x0000844b, 0x0000864b, 0x0000884b, 0x00008a4b, - 0x00008c4b, 0x00008e4b, 0x0000904b, 0x0000924b, - 0x0000944b, 0x0000964b, 0x0000984b, 0x00009a4b, - 0x00009c4b, 0x00009e4b, 0x0000a04b, 0x0000a24b, - 0x0000a44b, 0x0000a64b, 0x0000a84b, 0x0000aa4b, - 0x0000ac4b, 0x0000ae4b, 0x0000b04b, 0x0000b24b, - 0x0000b44b, 0x0000b64b, 0x0000b84b, 0x0000ba4b, - 0x0000bc4b, 0x0000be4b, 0x0000c04b, 0x0000c24b, - 0x0000c44b, 0x0000c64b, 0x0000c84b, 0x0000ca4b, - 0x0000cc4b, 0x0000ce4b, 0x0000d04b, 0x0000d24b, - 0x0000d44b, 0x0000d64b, 0x0000d84b, 0x0000da4b, - 0x0000dc4b, 0x0000de4b, 0x0000e04b, 0x0000e24b, - 0x0000e44b, 0x0000e64b, 0x0000e84b, 0x0000ea4b, - 0x0000ec4b, 0x0000ee4b, 0x0000f04b, 0x0000f24b, - 0x0000f44b, 0x0000f64b, 0x0000f84b, 0x0000fa4b, - 0x0000fc4b, 0x0000fe4b, 0x000001ac, 0x000005ac, - 0x000009ac, 0x00000dac, 0x000011ac, 0x000015ac, - 0x000019ac, 0x00001dac, 0x000021ac, 0x000025ac, - 0x000029ac, 0x00002dac, 0x000031ac, 0x000035ac, - 0x000039ac, 0x00003dac, 0x000041ac, 0x000045ac, - 0x000049ac, 0x00004dac, 0x000051ac, 0x000055ac, - 0x000059ac, 0x00005dac, 0x000061ac, 0x000065ac, - 0x000069ac, 0x00006dac, 0x000071ac, 0x000075ac, - 0x000079ac, 0x00007dac, 0x000081ac, 0x000085ac, - 0x000089ac, 0x00008dac, 0x000091ac, 0x000095ac, - 0x000099ac, 0x00009dac, 0x0000a1ac, 0x0000a5ac, - 0x0000a9ac, 0x0000adac, 0x0000b1ac, 0x0000b5ac, - 0x0000b9ac, 0x0000bdac, 0x0000c1ac, 0x0000c5ac, - 0x0000c9ac, 0x0000cdac, 0x0000d1ac, 0x0000d5ac, - 0x0000d9ac, 0x0000ddac, 0x0000e1ac, 0x0000e5ac, - 0x0000e9ac, 0x0000edac, 0x0000f1ac, 0x0000f5ac, - 0x0000f9ac, 0x0000fdac, 0x000101ac, 0x000105ac, - 0x000109ac, 0x00010dac, 0x000111ac, 0x000115ac, - 0x000119ac, 0x00011dac, 0x000121ac, 0x000125ac, - 0x000129ac, 0x00012dac, 0x000131ac, 0x000135ac, - 0x000139ac, 0x00013dac, 0x000141ac, 0x000145ac, - 0x000149ac, 0x00014dac, 0x000151ac, 0x000155ac, - 0x000159ac, 0x00015dac, 0x000161ac, 0x000165ac, - 0x000169ac, 0x00016dac, 0x000171ac, 0x000175ac, - 0x000179ac, 0x00017dac, 0x000181ac, 0x000185ac, - 0x000189ac, 0x00018dac, 0x000191ac, 0x000195ac, - 0x000199ac, 0x00019dac, 0x0001a1ac, 0x0001a5ac, - 0x0001a9ac, 0x0001adac, 0x0001b1ac, 0x0001b5ac, - 0x0001b9ac, 0x0001bdac, 0x0001c1ac, 0x0001c5ac, - 0x0001c9ac, 0x0001cdac, 0x0001d1ac, 0x0001d5ac, - 0x0001d9ac, 0x0001ddac, 0x0001e1ac, 0x0001e5ac, - 0x0001e9ac, 0x0001edac, 0x0001f1ac, 0x0001f5ac, - 0x0001f9ac, 0x0001fdac, 0x0000014c, 0x0000034c, - 0x0000054c, 0x0000074c, 0x0000094c, 0x00000b4c, - 0x00000d4c, 0x00000f4c, 0x0000114c, 0x0000134c, - 0x0000154c, 0x0000174c, 0x0000194c, 0x00001b4c, - 0x00001d4c, 0x00001f4c, 0x0000214c, 0x0000234c, - 0x0000254c, 0x0000274c, 0x0000294c, 0x00002b4c, - 0x00002d4c, 0x00002f4c, 0x0000314c, 0x0000334c, - 0x0000354c, 0x0000374c, 0x0000394c, 0x00003b4c, - 0x00003d4c, 0x00003f4c, 0x0000414c, 0x0000434c, - 0x0000454c, 0x0000474c, 0x0000494c, 0x00004b4c, - 0x00004d4c, 0x00004f4c, 0x0000514c, 0x0000534c, - 0x0000554c, 0x0000574c, 0x0000594c, 0x00005b4c, - 0x00005d4c, 0x00005f4c, 0x0000614c, 0x0000634c, - 0x0000654c, 0x0000674c, 0x0000694c, 0x00006b4c, - 0x00006d4c, 0x00006f4c, 0x0000714c, 0x0000734c, - 0x0000754c, 0x0000774c, 0x0000794c, 0x00007b4c, - 0x00007d4c, 0x00007f4c, 0x0000814c, 0x0000834c, - 0x0000854c, 0x0000874c, 0x0000894c, 0x00008b4c, - 0x00008d4c, 0x00008f4c, 0x0000914c, 0x0000934c, - 0x0000954c, 0x0000974c, 0x0000994c, 0x00009b4c, - 0x00009d4c, 0x00009f4c, 0x0000a14c, 0x0000a34c, - 0x0000a54c, 0x0000a74c, 0x0000a94c, 0x0000ab4c, - 0x0000ad4c, 0x0000af4c, 0x0000b14c, 0x0000b34c, - 0x0000b54c, 0x0000b74c, 0x0000b94c, 0x0000bb4c, - 0x0000bd4c, 0x0000bf4c, 0x0000c14c, 0x0000c34c, - 0x0000c54c, 0x0000c74c, 0x0000c94c, 0x0000cb4c, - 0x0000cd4c, 0x0000cf4c, 0x0000d14c, 0x0000d34c, - 0x0000d54c, 0x0000d74c, 0x0000d94c, 0x0000db4c, - 0x0000dd4c, 0x0000df4c, 0x0000e14c, 0x0000e34c, - 0x0000e54c, 0x0000e74c, 0x0000e94c, 0x0000eb4c, - 0x0000ed4c, 0x0000ef4c, 0x0000f14c, 0x0000f34c, - 0x0000f54c, 0x0000f74c, 0x0000f94c, 0x0000fb4c, - 0x0000fd4c, 0x0000ff4c, 0x0001014c, 0x0001034c, - 0x0001054c, 0x0001074c, 0x0001094c, 0x00010b4c, - 0x00010d4c, 0x00010f4c, 0x0001114c, 0x0001134c, - 0x0001154c, 0x0001174c, 0x0001194c, 0x00011b4c, - 0x00011d4c, 0x00011f4c, 0x0001214c, 0x0001234c, - 0x0001254c, 0x0001274c, 0x0001294c, 0x00012b4c, - 0x00012d4c, 0x00012f4c, 0x0001314c, 0x0001334c, - 0x0001354c, 0x0001374c, 0x0001394c, 0x00013b4c, - 0x00013d4c, 0x00013f4c, 0x0001414c, 0x0001434c, - 0x0001454c, 0x0001474c, 0x0001494c, 0x00014b4c, - 0x00014d4c, 0x00014f4c, 0x0001514c, 0x0001534c, - 0x0001554c, 0x0001574c, 0x0001594c, 0x00015b4c, - 0x00015d4c, 0x00015f4c, 0x0001614c, 0x0001634c, - 0x0001654c, 0x0001674c, 0x0001694c, 0x00016b4c, - 0x00016d4c, 0x00016f4c, 0x0001714c, 0x0001734c, - 0x0001754c, 0x0001774c, 0x0001794c, 0x00017b4c, - 0x00017d4c, 0x00017f4c, 0x0001814c, 0x0001834c, - 0x0001854c, 0x0001874c, 0x0001894c, 0x00018b4c, - 0x00018d4c, 0x00018f4c, 0x0001914c, 0x0001934c, - 0x0001954c, 0x0001974c, 0x0001994c, 0x00019b4c, - 0x00019d4c, 0x00019f4c, 0x0001a14c, 0x0001a34c, - 0x0001a54c, 0x0001a74c, 0x0001a94c, 0x0001ab4c, - 0x0001ad4c, 0x0001af4c, 0x0001b14c, 0x0001b34c, - 0x0001b54c, 0x0001b74c, 0x0001b94c, 0x0001bb4c, - 0x0001bd4c, 0x0001bf4c, 0x0001c14c, 0x0001c34c, - 0x0001c54c, 0x0001c74c, 0x0001c94c, 0x0001cb4c, - 0x0001cd4c, 0x0001cf4c, 0x0001d14c, 0x0001d34c, - 0x0001d54c, 0x0001d74c, 0x0001d94c, 0x0001db4c, - 0x0001dd4c, 0x0001df4c, 0x0001e14c, 0x0001e34c, - 0x0001e54c, 0x0001e74c, 0x0001e94c, 0x0001eb4c, - 0x0001ed4c, 0x0001ef4c, 0x0001f14c, 0x0001f34c, - 0x0001f54c, 0x0001f74c, 0x0001f94c, 0x0001fb4c, - 0x0001fd4c, 0x0001ff4c, 0x000003ad, 0x000007ad, - 0x00000bad, 0x00000fad, 0x000013ad, 0x000017ad, - 0x00001bad, 0x00001fad, 0x000023ad, 0x000027ad, - 0x00002bad, 0x00002fad, 0x000033ad, 0x000037ad, - 0x00003bad, 0x00003fad, 0x000043ad, 0x000047ad, - 0x00004bad, 0x00004fad, 0x000053ad, 0x000057ad, - 0x00005bad, 0x00005fad, 0x000063ad, 0x000067ad, - 0x00006bad, 0x00006fad, 0x000073ad, 0x000077ad, - 0x00007bad, 0x00007fad, 0x000083ad, 0x000087ad, - 0x00008bad, 0x00008fad, 0x000093ad, 0x000097ad, - 0x00009bad, 0x00009fad, 0x0000a3ad, 0x0000a7ad, - 0x0000abad, 0x0000afad, 0x0000b3ad, 0x0000b7ad, - 0x0000bbad, 0x0000bfad, 0x0000c3ad, 0x0000c7ad, - 0x0000cbad, 0x0000cfad, 0x0000d3ad, 0x0000d7ad, - 0x0000dbad, 0x0000dfad, 0x0000e3ad, 0x0000e7ad, - 0x0000ebad, 0x0000efad, 0x0000f3ad, 0x0000f7ad, - 0x0000fbad, 0x0000ffad, 0x000103ad, 0x000107ad, - 0x00010bad, 0x00010fad, 0x000113ad, 0x000117ad, - 0x00011bad, 0x00011fad, 0x000123ad, 0x000127ad, - 0x00012bad, 0x00012fad, 0x000133ad, 0x000137ad, - 0x00013bad, 0x00013fad, 0x000143ad, 0x000147ad, - 0x00014bad, 0x00014fad, 0x000153ad, 0x000157ad, - 0x00015bad, 0x00015fad, 0x000163ad, 0x000167ad, - 0x00016bad, 0x00016fad, 0x000173ad, 0x000177ad, - 0x00017bad, 0x00017fad, 0x000183ad, 0x000187ad, - 0x00018bad, 0x00018fad, 0x000193ad, 0x000197ad, - 0x00019bad, 0x00019fad, 0x0001a3ad, 0x0001a7ad, - 0x0001abad, 0x0001afad, 0x0001b3ad, 0x0001b7ad, - 0x0001bbad, 0x0001bfad, 0x0001c3ad, 0x0001c7ad, - 0x0001cbad, 0x0001cfad, 0x0001d3ad, 0x0001d7ad, - 0x0001dbad, 0x0001dfad, 0x0001e3ad, 0x0001e7ad, - 0x0001ebad, 0x0001efad, 0x0001f3ad, 0x0001f7ad, - 0x0001fbad, 0x0001ffad, 0x000203ad, 0x000207ad, - 0x00020bad, 0x00020fad, 0x000213ad, 0x000217ad, - 0x00021bad, 0x00021fad, 0x000223ad, 0x000227ad, - 0x00022bad, 0x00022fad, 0x000233ad, 0x000237ad, - 0x00023bad, 0x00023fad, 0x000243ad, 0x000247ad, - 0x00024bad, 0x00024fad, 0x000253ad, 0x000257ad, - 0x00025bad, 0x00025fad, 0x000263ad, 0x000267ad, - 0x00026bad, 0x00026fad, 0x000273ad, 0x000277ad, - 0x00027bad, 0x00027fad, 0x000283ad, 0x000287ad, - 0x00028bad, 0x00028fad, 0x000293ad, 0x000297ad, - 0x00029bad, 0x00029fad, 0x0002a3ad, 0x0002a7ad, - 0x0002abad, 0x0002afad, 0x0002b3ad, 0x0002b7ad, - 0x0002bbad, 0x0002bfad, 0x0002c3ad, 0x0002c7ad, - 0x0002cbad, 0x0002cfad, 0x0002d3ad, 0x0002d7ad, - 0x0002dbad, 0x0002dfad, 0x0002e3ad, 0x0002e7ad, - 0x0002ebad, 0x0002efad, 0x0002f3ad, 0x0002f7ad, - 0x0002fbad, 0x0002ffad, 0x000303ad, 0x000307ad, - 0x00030bad, 0x00030fad, 0x000313ad, 0x000317ad, - 0x00031bad, 0x00031fad, 0x000323ad, 0x000327ad, - 0x00032bad, 0x00032fad, 0x000333ad, 0x000337ad, - 0x00033bad, 0x00033fad, 0x000343ad, 0x000347ad, - 0x00034bad, 0x00034fad, 0x000353ad, 0x000357ad, - 0x00035bad, 0x00035fad, 0x000363ad, 0x000367ad, - 0x00036bad, 0x00036fad, 0x000373ad, 0x000377ad, - 0x00037bad, 0x00037fad, 0x000383ad, 0x000387ad, - 0x00038bad, 0x00038fad, 0x000393ad, 0x000397ad, - 0x00039bad, 0x00039fad, 0x0003a3ad, 0x0003a7ad, - 0x0003abad, 0x0003afad, 0x0003b3ad, 0x0003b7ad, - 0x0003bbad, 0x0003bfad, 0x0003c3ad, 0x0003c7ad, - 0x0003cbad, 0x0003cfad, 0x0003d3ad, 0x0003d7ad, - 0x0003dbad, 0x0003dfad, 0x0003e3ad, 0x0003e7ad, - 0x0003ebad, 0x0003efad, 0x0003f3ad, 0x0003f7ad, - 0x0003fbad, 0x0003ffad, 0x000000cd, 0x000002cd, - 0x000004cd, 0x000006cd, 0x000008cd, 0x00000acd, - 0x00000ccd, 0x00000ecd, 0x000010cd, 0x000012cd, - 0x000014cd, 0x000016cd, 0x000018cd, 0x00001acd, - 0x00001ccd, 0x00001ecd, 0x000020cd, 0x000022cd, - 0x000024cd, 0x000026cd, 0x000028cd, 0x00002acd, - 0x00002ccd, 0x00002ecd, 0x000030cd, 0x000032cd, - 0x000034cd, 0x000036cd, 0x000038cd, 0x00003acd, - 0x00003ccd, 0x00003ecd, 0x000040cd, 0x000042cd, - 0x000044cd, 0x000046cd, 0x000048cd, 0x00004acd, - 0x00004ccd, 0x00004ecd, 0x000050cd, 0x000052cd, - 0x000054cd, 0x000056cd, 0x000058cd, 0x00005acd, - 0x00005ccd, 0x00005ecd, 0x000060cd, 0x000062cd, - 0x000064cd, 0x000066cd, 0x000068cd, 0x00006acd, - 0x00006ccd, 0x00006ecd, 0x000070cd, 0x000072cd, - 0x000074cd, 0x000076cd, 0x000078cd, 0x00007acd, - 0x00007ccd, 0x00007ecd, 0x000080cd, 0x000082cd, - 0x000084cd, 0x000086cd, 0x000088cd, 0x00008acd, - 0x00008ccd, 0x00008ecd, 0x000090cd, 0x000092cd, - 0x000094cd, 0x000096cd, 0x000098cd, 0x00009acd, - 0x00009ccd, 0x00009ecd, 0x0000a0cd, 0x0000a2cd, - 0x0000a4cd, 0x0000a6cd, 0x0000a8cd, 0x0000aacd, - 0x0000accd, 0x0000aecd, 0x0000b0cd, 0x0000b2cd, - 0x0000b4cd, 0x0000b6cd, 0x0000b8cd, 0x0000bacd, - 0x0000bccd, 0x0000becd, 0x0000c0cd, 0x0000c2cd, - 0x0000c4cd, 0x0000c6cd, 0x0000c8cd, 0x0000cacd, - 0x0000cccd, 0x0000cecd, 0x0000d0cd, 0x0000d2cd, - 0x0000d4cd, 0x0000d6cd, 0x0000d8cd, 0x0000dacd, - 0x0000dccd, 0x0000decd, 0x0000e0cd, 0x0000e2cd, - 0x0000e4cd, 0x0000e6cd, 0x0000e8cd, 0x0000eacd, - 0x0000eccd, 0x0000eecd, 0x0000f0cd, 0x0000f2cd, - 0x0000f4cd, 0x0000f6cd, 0x0000f8cd, 0x0000facd, - 0x0000fccd, 0x0000fecd, 0x000100cd, 0x000102cd, - 0x000104cd, 0x000106cd, 0x000108cd, 0x00010acd, - 0x00010ccd, 0x00010ecd, 0x000110cd, 0x000112cd, - 0x000114cd, 0x000116cd, 0x000118cd, 0x00011acd, - 0x00011ccd, 0x00011ecd, 0x000120cd, 0x000122cd, - 0x000124cd, 0x000126cd, 0x000128cd, 0x00012acd, - 0x00012ccd, 0x00012ecd, 0x000130cd, 0x000132cd, - 0x000134cd, 0x000136cd, 0x000138cd, 0x00013acd, - 0x00013ccd, 0x00013ecd, 0x000140cd, 0x000142cd, - 0x000144cd, 0x000146cd, 0x000148cd, 0x00014acd, - 0x00014ccd, 0x00014ecd, 0x000150cd, 0x000152cd, - 0x000154cd, 0x000156cd, 0x000158cd, 0x00015acd, - 0x00015ccd, 0x00015ecd, 0x000160cd, 0x000162cd, - 0x000164cd, 0x000166cd, 0x000168cd, 0x00016acd, - 0x00016ccd, 0x00016ecd, 0x000170cd, 0x000172cd, - 0x000174cd, 0x000176cd, 0x000178cd, 0x00017acd, - 0x00017ccd, 0x00017ecd, 0x000180cd, 0x000182cd, - 0x000184cd, 0x000186cd, 0x000188cd, 0x00018acd, - 0x00018ccd, 0x00018ecd, 0x000190cd, 0x000192cd, - 0x000194cd, 0x000196cd, 0x000198cd, 0x00019acd, - 0x00019ccd, 0x00019ecd, 0x0001a0cd, 0x0001a2cd, - 0x0001a4cd, 0x0001a6cd, 0x0001a8cd, 0x0001aacd, - 0x0001accd, 0x0001aecd, 0x0001b0cd, 0x0001b2cd, - 0x0001b4cd, 0x0001b6cd, 0x0001b8cd, 0x0001bacd, - 0x0001bccd, 0x0001becd, 0x0001c0cd, 0x0001c2cd, - 0x0001c4cd, 0x0001c6cd, 0x0001c8cd, 0x0001cacd, - 0x0001cccd, 0x0001cecd, 0x0001d0cd, 0x0001d2cd, - 0x0001d4cd, 0x0001d6cd, 0x0001d8cd, 0x0001dacd, - 0x0001dccd, 0x0001decd, 0x0001e0cd, 0x0001e2cd, - 0x0001e4cd, 0x0001e6cd, 0x0001e8cd, 0x0001eacd, - 0x0001eccd, 0x0001eecd, 0x0001f0cd, 0x0001f2cd, - 0x0001f4cd, 0x0001f6cd, 0x0001f8cd, 0x0001facd, - 0x0001fccd, 0x0001fecd, 0x000200cd, 0x000202cd, - 0x000204cd, 0x000206cd, 0x000208cd, 0x00020acd, - 0x00020ccd, 0x00020ecd, 0x000210cd, 0x000212cd, - 0x000214cd, 0x000216cd, 0x000218cd, 0x00021acd, - 0x00021ccd, 0x00021ecd, 0x000220cd, 0x000222cd, - 0x000224cd, 0x000226cd, 0x000228cd, 0x00022acd, - 0x00022ccd, 0x00022ecd, 0x000230cd, 0x000232cd, - 0x000234cd, 0x000236cd, 0x000238cd, 0x00023acd, - 0x00023ccd, 0x00023ecd, 0x000240cd, 0x000242cd, - 0x000244cd, 0x000246cd, 0x000248cd, 0x00024acd, - 0x00024ccd, 0x00024ecd, 0x000250cd, 0x000252cd, - 0x000254cd, 0x000256cd, 0x000258cd, 0x00025acd, - 0x00025ccd, 0x00025ecd, 0x000260cd, 0x000262cd, - 0x000264cd, 0x000266cd, 0x000268cd, 0x00026acd, - 0x00026ccd, 0x00026ecd, 0x000270cd, 0x000272cd, - 0x000274cd, 0x000276cd, 0x000278cd, 0x00027acd, - 0x00027ccd, 0x00027ecd, 0x000280cd, 0x000282cd, - 0x000284cd, 0x000286cd, 0x000288cd, 0x00028acd, - 0x00028ccd, 0x00028ecd, 0x000290cd, 0x000292cd, - 0x000294cd, 0x000296cd, 0x000298cd, 0x00029acd, - 0x00029ccd, 0x00029ecd, 0x0002a0cd, 0x0002a2cd, - 0x0002a4cd, 0x0002a6cd, 0x0002a8cd, 0x0002aacd, - 0x0002accd, 0x0002aecd, 0x0002b0cd, 0x0002b2cd, - 0x0002b4cd, 0x0002b6cd, 0x0002b8cd, 0x0002bacd, - 0x0002bccd, 0x0002becd, 0x0002c0cd, 0x0002c2cd, - 0x0002c4cd, 0x0002c6cd, 0x0002c8cd, 0x0002cacd, - 0x0002cccd, 0x0002cecd, 0x0002d0cd, 0x0002d2cd, - 0x0002d4cd, 0x0002d6cd, 0x0002d8cd, 0x0002dacd, - 0x0002dccd, 0x0002decd, 0x0002e0cd, 0x0002e2cd, - 0x0002e4cd, 0x0002e6cd, 0x0002e8cd, 0x0002eacd, - 0x0002eccd, 0x0002eecd, 0x0002f0cd, 0x0002f2cd, - 0x0002f4cd, 0x0002f6cd, 0x0002f8cd, 0x0002facd, - 0x0002fccd, 0x0002fecd, 0x000300cd, 0x000302cd, - 0x000304cd, 0x000306cd, 0x000308cd, 0x00030acd, - 0x00030ccd, 0x00030ecd, 0x000310cd, 0x000312cd, - 0x000314cd, 0x000316cd, 0x000318cd, 0x00031acd, - 0x00031ccd, 0x00031ecd, 0x000320cd, 0x000322cd, - 0x000324cd, 0x000326cd, 0x000328cd, 0x00032acd, - 0x00032ccd, 0x00032ecd, 0x000330cd, 0x000332cd, - 0x000334cd, 0x000336cd, 0x000338cd, 0x00033acd, - 0x00033ccd, 0x00033ecd, 0x000340cd, 0x000342cd, - 0x000344cd, 0x000346cd, 0x000348cd, 0x00034acd, - 0x00034ccd, 0x00034ecd, 0x000350cd, 0x000352cd, - 0x000354cd, 0x000356cd, 0x000358cd, 0x00035acd, - 0x00035ccd, 0x00035ecd, 0x000360cd, 0x000362cd, - 0x000364cd, 0x000366cd, 0x000368cd, 0x00036acd, - 0x00036ccd, 0x00036ecd, 0x000370cd, 0x000372cd, - 0x000374cd, 0x000376cd, 0x000378cd, 0x00037acd, - 0x00037ccd, 0x00037ecd, 0x000380cd, 0x000382cd, - 0x000384cd, 0x000386cd, 0x000388cd, 0x00038acd, - 0x00038ccd, 0x00038ecd, 0x000390cd, 0x000392cd, - 0x000394cd, 0x000396cd, 0x000398cd, 0x00039acd, - 0x00039ccd, 0x00039ecd, 0x0003a0cd, 0x0003a2cd, - 0x0003a4cd, 0x0003a6cd, 0x0003a8cd, 0x0003aacd, - 0x0003accd, 0x0003aecd, 0x0003b0cd, 0x0003b2cd, - 0x0003b4cd, 0x0003b6cd, 0x0003b8cd, 0x0003bacd, - 0x0003bccd, 0x0003becd, 0x0003c0cd, 0x0003c2cd, - 0x0003c4cd, 0x0003c6cd, 0x0003c8cd, 0x0003cacd, - 0x0003cccd, 0x0003cecd, 0x0003d0cd, 0x0003d2cd, - 0x0003d4cd, 0x0003d6cd, 0x0003d8cd, 0x0003dacd, - 0x0003dccd, 0x0003decd, 0x0003e0cd, 0x0003e2cd, - 0x0003e4cd, 0x0003e6cd, 0x0003e8cd, 0x0003eacd, - 0x0003eccd, 0x0003eecd, 0x0003f0cd, 0x0003f2cd, - 0x0003f4cd, 0x0003f6cd, 0x0003f8cd, 0x0003facd, - 0x0003fccd, 0x0003fecd, 0x0000006e, 0x0000046e, - 0x0000086e, 0x00000c6e, 0x0000106e, 0x0000146e, - 0x0000186e, 0x00001c6e, 0x0000206e, 0x0000246e, - 0x0000286e, 0x00002c6e, 0x0000306e, 0x0000346e, - 0x0000386e, 0x00003c6e, 0x0000406e, 0x0000446e, - 0x0000486e, 0x00004c6e, 0x0000506e, 0x0000546e, - 0x0000586e, 0x00005c6e, 0x0000606e, 0x0000646e, - 0x0000686e, 0x00006c6e, 0x0000706e, 0x0000746e, - 0x0000786e, 0x00007c6e, 0x0000806e, 0x0000846e, - 0x0000886e, 0x00008c6e, 0x0000906e, 0x0000946e, - 0x0000986e, 0x00009c6e, 0x0000a06e, 0x0000a46e, - 0x0000a86e, 0x0000ac6e, 0x0000b06e, 0x0000b46e, - 0x0000b86e, 0x0000bc6e, 0x0000c06e, 0x0000c46e, - 0x0000c86e, 0x0000cc6e, 0x0000d06e, 0x0000d46e, - 0x0000d86e, 0x0000dc6e, 0x0000e06e, 0x0000e46e, - 0x0000e86e, 0x0000ec6e, 0x0000f06e, 0x0000f46e, - 0x0000f86e, 0x0000fc6e, 0x0001006e, 0x0001046e, - 0x0001086e, 0x00010c6e, 0x0001106e, 0x0001146e, - 0x0001186e, 0x00011c6e, 0x0001206e, 0x0001246e, - 0x0001286e, 0x00012c6e, 0x0001306e, 0x0001346e, - 0x0001386e, 0x00013c6e, 0x0001406e, 0x0001446e, - 0x0001486e, 0x00014c6e, 0x0001506e, 0x0001546e, - 0x0001586e, 0x00015c6e, 0x0001606e, 0x0001646e, - 0x0001686e, 0x00016c6e, 0x0001706e, 0x0001746e, - 0x0001786e, 0x00017c6e, 0x0001806e, 0x0001846e, - 0x0001886e, 0x00018c6e, 0x0001906e, 0x0001946e, - 0x0001986e, 0x00019c6e, 0x0001a06e, 0x0001a46e, - 0x0001a86e, 0x0001ac6e, 0x0001b06e, 0x0001b46e, - 0x0001b86e, 0x0001bc6e, 0x0001c06e, 0x0001c46e, - 0x0001c86e, 0x0001cc6e, 0x0001d06e, 0x0001d46e, - 0x0001d86e, 0x0001dc6e, 0x0001e06e, 0x0001e46e, - 0x0001e86e, 0x0001ec6e, 0x0001f06e, 0x0001f46e, - 0x0001f86e, 0x0001fc6e, 0x0002006e, 0x0002046e, - 0x0002086e, 0x00020c6e, 0x0002106e, 0x0002146e, - 0x0002186e, 0x00021c6e, 0x0002206e, 0x0002246e, - 0x0002286e, 0x00022c6e, 0x0002306e, 0x0002346e, - 0x0002386e, 0x00023c6e, 0x0002406e, 0x0002446e, - 0x0002486e, 0x00024c6e, 0x0002506e, 0x0002546e, - 0x0002586e, 0x00025c6e, 0x0002606e, 0x0002646e, - 0x0002686e, 0x00026c6e, 0x0002706e, 0x0002746e, - 0x0002786e, 0x00027c6e, 0x0002806e, 0x0002846e, - 0x0002886e, 0x00028c6e, 0x0002906e, 0x0002946e, - 0x0002986e, 0x00029c6e, 0x0002a06e, 0x0002a46e, - 0x0002a86e, 0x0002ac6e, 0x0002b06e, 0x0002b46e, - 0x0002b86e, 0x0002bc6e, 0x0002c06e, 0x0002c46e, - 0x0002c86e, 0x0002cc6e, 0x0002d06e, 0x0002d46e, - 0x0002d86e, 0x0002dc6e, 0x0002e06e, 0x0002e46e, - 0x0002e86e, 0x0002ec6e, 0x0002f06e, 0x0002f46e, - 0x0002f86e, 0x0002fc6e, 0x0003006e, 0x0003046e, - 0x0003086e, 0x00030c6e, 0x0003106e, 0x0003146e, - 0x0003186e, 0x00031c6e, 0x0003206e, 0x0003246e, - 0x0003286e, 0x00032c6e, 0x0003306e, 0x0003346e, - 0x0003386e, 0x00033c6e, 0x0003406e, 0x0003446e, - 0x0003486e, 0x00034c6e, 0x0003506e, 0x0003546e, - 0x0003586e, 0x00035c6e, 0x0003606e, 0x0003646e, - 0x0003686e, 0x00036c6e, 0x0003706e, 0x0003746e, - 0x0003786e, 0x00037c6e, 0x0003806e, 0x0003846e, - 0x0003886e, 0x00038c6e, 0x0003906e, 0x0003946e, - 0x0003986e, 0x00039c6e, 0x0003a06e, 0x0003a46e, - 0x0003a86e, 0x0003ac6e, 0x0003b06e, 0x0003b46e, - 0x0003b86e, 0x0003bc6e, 0x0003c06e, 0x0003c46e, - 0x0003c86e, 0x0003cc6e, 0x0003d06e, 0x0003d46e, - 0x0003d86e, 0x0003dc6e, 0x0003e06e, 0x0003e46e, - 0x0003e86e, 0x0003ec6e, 0x0003f06e, 0x0003f46e, - 0x0003f86e, 0x0003fc6e, 0x0004006e, 0x0004046e, - 0x0004086e, 0x00040c6e, 0x0004106e, 0x0004146e, - 0x0004186e, 0x00041c6e, 0x0004206e, 0x0004246e, - 0x0004286e, 0x00042c6e, 0x0004306e, 0x0004346e, - 0x0004386e, 0x00043c6e, 0x0004406e, 0x0004446e, - 0x0004486e, 0x00044c6e, 0x0004506e, 0x0004546e, - 0x0004586e, 0x00045c6e, 0x0004606e, 0x0004646e, - 0x0004686e, 0x00046c6e, 0x0004706e, 0x0004746e, - 0x0004786e, 0x00047c6e, 0x0004806e, 0x0004846e, - 0x0004886e, 0x00048c6e, 0x0004906e, 0x0004946e, - 0x0004986e, 0x00049c6e, 0x0004a06e, 0x0004a46e, - 0x0004a86e, 0x0004ac6e, 0x0004b06e, 0x0004b46e, - 0x0004b86e, 0x0004bc6e, 0x0004c06e, 0x0004c46e, - 0x0004c86e, 0x0004cc6e, 0x0004d06e, 0x0004d46e, - 0x0004d86e, 0x0004dc6e, 0x0004e06e, 0x0004e46e, - 0x0004e86e, 0x0004ec6e, 0x0004f06e, 0x0004f46e, - 0x0004f86e, 0x0004fc6e, 0x0005006e, 0x0005046e, - 0x0005086e, 0x00050c6e, 0x0005106e, 0x0005146e, - 0x0005186e, 0x00051c6e, 0x0005206e, 0x0005246e, - 0x0005286e, 0x00052c6e, 0x0005306e, 0x0005346e, - 0x0005386e, 0x00053c6e, 0x0005406e, 0x0005446e, - 0x0005486e, 0x00054c6e, 0x0005506e, 0x0005546e, - 0x0005586e, 0x00055c6e, 0x0005606e, 0x0005646e, - 0x0005686e, 0x00056c6e, 0x0005706e, 0x0005746e, - 0x0005786e, 0x00057c6e, 0x0005806e, 0x0005846e, - 0x0005886e, 0x00058c6e, 0x0005906e, 0x0005946e, - 0x0005986e, 0x00059c6e, 0x0005a06e, 0x0005a46e, - 0x0005a86e, 0x0005ac6e, 0x0005b06e, 0x0005b46e, - 0x0005b86e, 0x0005bc6e, 0x0005c06e, 0x0005c46e, - 0x0005c86e, 0x0005cc6e, 0x0005d06e, 0x0005d46e, - 0x0005d86e, 0x0005dc6e, 0x0005e06e, 0x0005e46e, - 0x0005e86e, 0x0005ec6e, 0x0005f06e, 0x0005f46e, - 0x0005f86e, 0x0005fc6e, 0x0006006e, 0x0006046e, - 0x0006086e, 0x00060c6e, 0x0006106e, 0x0006146e, - 0x0006186e, 0x00061c6e, 0x0006206e, 0x0006246e, - 0x0006286e, 0x00062c6e, 0x0006306e, 0x0006346e, - 0x0006386e, 0x00063c6e, 0x0006406e, 0x0006446e, - 0x0006486e, 0x00064c6e, 0x0006506e, 0x0006546e, - 0x0006586e, 0x00065c6e, 0x0006606e, 0x0006646e, - 0x0006686e, 0x00066c6e, 0x0006706e, 0x0006746e, - 0x0006786e, 0x00067c6e, 0x0006806e, 0x0006846e, - 0x0006886e, 0x00068c6e, 0x0006906e, 0x0006946e, - 0x0006986e, 0x00069c6e, 0x0006a06e, 0x0006a46e, - 0x0006a86e, 0x0006ac6e, 0x0006b06e, 0x0006b46e, - 0x0006b86e, 0x0006bc6e, 0x0006c06e, 0x0006c46e, - 0x0006c86e, 0x0006cc6e, 0x0006d06e, 0x0006d46e, - 0x0006d86e, 0x0006dc6e, 0x0006e06e, 0x0006e46e, - 0x0006e86e, 0x0006ec6e, 0x0006f06e, 0x0006f46e, - 0x0006f86e, 0x0006fc6e, 0x0007006e, 0x0007046e, - 0x0007086e, 0x00070c6e, 0x0007106e, 0x0007146e, - 0x0007186e, 0x00071c6e, 0x0007206e, 0x0007246e, - 0x0007286e, 0x00072c6e, 0x0007306e, 0x0007346e, - 0x0007386e, 0x00073c6e, 0x0007406e, 0x0007446e, - 0x0007486e, 0x00074c6e, 0x0007506e, 0x0007546e, - 0x0007586e, 0x00075c6e, 0x0007606e, 0x0007646e, - 0x0007686e, 0x00076c6e, 0x0007706e, 0x0007746e, - 0x0007786e, 0x00077c6e, 0x0007806e, 0x0007846e, - 0x0007886e, 0x00078c6e, 0x0007906e, 0x0007946e, - 0x0007986e, 0x00079c6e, 0x0007a06e, 0x0007a46e, - 0x0007a86e, 0x0007ac6e, 0x0007b06e, 0x0007b46e, - 0x0007b86e, 0x0007bc6e, 0x0007c06e, 0x0007c46e, - 0x0007c86e, 0x0007cc6e, 0x0007d06e, 0x0007d46e, - 0x0007d86e, 0x0007dc6e, 0x0007e06e, 0x0007e46e, - 0x0007e86e, 0x0007ec6e, 0x0007f06e, 0x0007f46e, - 0x0007f86e, 0x0007fc6e, 0x0000000d, 0x0000010d, - 0x0000020d, 0x0000030d, 0x0000040d, 0x0000050d, - 0x0000060d, 0x0000070d, 0x0000080d, 0x0000090d, - 0x00000a0d, 0x00000b0d, 0x00000c0d, 0x00000d0d, - 0x00000e0d, 0x00000f0d, 0x0000100d, 0x0000110d, - 0x0000120d, 0x0000130d, 0x0000140d, 0x0000150d, - 0x0000160d, 0x0000170d, 0x0000180d, 0x0000190d, - 0x00001a0d, 0x00001b0d, 0x00001c0d, 0x00001d0d, - 0x00001e0d, 0x00001f0d, 0x0000200d, 0x0000210d, - 0x0000220d, 0x0000230d, 0x0000240d, 0x0000250d, - 0x0000260d, 0x0000270d, 0x0000280d, 0x0000290d, - 0x00002a0d, 0x00002b0d, 0x00002c0d, 0x00002d0d, - 0x00002e0d, 0x00002f0d, 0x0000300d, 0x0000310d, - 0x0000320d, 0x0000330d, 0x0000340d, 0x0000350d, - 0x0000360d, 0x0000370d, 0x0000380d, 0x0000390d, - 0x00003a0d, 0x00003b0d, 0x00003c0d, 0x00003d0d, - 0x00003e0d, 0x00003f0d, 0x0000400d, 0x0000410d, - 0x0000420d, 0x0000430d, 0x0000440d, 0x0000450d, - 0x0000460d, 0x0000470d, 0x0000480d, 0x0000490d, - 0x00004a0d, 0x00004b0d, 0x00004c0d, 0x00004d0d, - 0x00004e0d, 0x00004f0d, 0x0000500d, 0x0000510d, - 0x0000520d, 0x0000530d, 0x0000540d, 0x0000550d, - 0x0000560d, 0x0000570d, 0x0000580d, 0x0000590d, - 0x00005a0d, 0x00005b0d, 0x00005c0d, 0x00005d0d, - 0x00005e0d, 0x00005f0d, 0x0000600d, 0x0000610d, - 0x0000620d, 0x0000630d, 0x0000640d, 0x0000650d, - 0x0000660d, 0x0000670d, 0x0000680d, 0x0000690d, - 0x00006a0d, 0x00006b0d, 0x00006c0d, 0x00006d0d, - 0x00006e0d, 0x00006f0d, 0x0000700d, 0x0000710d, - 0x0000720d, 0x0000730d, 0x0000740d, 0x0000750d, - 0x0000760d, 0x0000770d, 0x0000780d, 0x0000790d, - 0x00007a0d, 0x00007b0d, 0x00007c0d, 0x00007d0d, - 0x00007e0d, 0x00007f0d, 0x0000800d, 0x0000810d, - 0x0000820d, 0x0000830d, 0x0000840d, 0x0000850d, - 0x0000860d, 0x0000870d, 0x0000880d, 0x0000890d, - 0x00008a0d, 0x00008b0d, 0x00008c0d, 0x00008d0d, - 0x00008e0d, 0x00008f0d, 0x0000900d, 0x0000910d, - 0x0000920d, 0x0000930d, 0x0000940d, 0x0000950d, - 0x0000960d, 0x0000970d, 0x0000980d, 0x0000990d, - 0x00009a0d, 0x00009b0d, 0x00009c0d, 0x00009d0d, - 0x00009e0d, 0x00009f0d, 0x0000a00d, 0x0000a10d, - 0x0000a20d, 0x0000a30d, 0x0000a40d, 0x0000a50d, - 0x0000a60d, 0x0000a70d, 0x0000a80d, 0x0000a90d, - 0x0000aa0d, 0x0000ab0d, 0x0000ac0d, 0x0000ad0d, - 0x0000ae0d, 0x0000af0d, 0x0000b00d, 0x0000b10d, - 0x0000b20d, 0x0000b30d, 0x0000b40d, 0x0000b50d, - 0x0000b60d, 0x0000b70d, 0x0000b80d, 0x0000b90d, - 0x0000ba0d, 0x0000bb0d, 0x0000bc0d, 0x0000bd0d, - 0x0000be0d, 0x0000bf0d, 0x0000c00d, 0x0000c10d, - 0x0000c20d, 0x0000c30d, 0x0000c40d, 0x0000c50d, - 0x0000c60d, 0x0000c70d, 0x0000c80d, 0x0000c90d, - 0x0000ca0d, 0x0000cb0d, 0x0000cc0d, 0x0000cd0d, - 0x0000ce0d, 0x0000cf0d, 0x0000d00d, 0x0000d10d, - 0x0000d20d, 0x0000d30d, 0x0000d40d, 0x0000d50d, - 0x0000d60d, 0x0000d70d, 0x0000d80d, 0x0000d90d, - 0x0000da0d, 0x0000db0d, 0x0000dc0d, 0x0000dd0d, - 0x0000de0d, 0x0000df0d, 0x0000e00d, 0x0000e10d, - 0x0000e20d, 0x0000e30d, 0x0000e40d, 0x0000e50d, - 0x0000e60d, 0x0000e70d, 0x0000e80d, 0x0000e90d, - 0x0000ea0d, 0x0000eb0d, 0x0000ec0d, 0x0000ed0d, - 0x0000ee0d, 0x0000ef0d, 0x0000f00d, 0x0000f10d, - 0x0000f20d, 0x0000f30d, 0x0000f40d, 0x0000f50d, - 0x0000f60d, 0x0000f70d, 0x0000f80d, 0x0000f90d, - 0x0000fa0d, 0x0000fb0d, 0x0000fc0d, 0x0000fd0d, - 0x0000fe0d, 0x0000ff0d, 0x0001000d, 0x0001010d, - 0x0001020d, 0x0001030d, 0x0001040d, 0x0001050d, - 0x0001060d, 0x0001070d, 0x0001080d, 0x0001090d, - 0x00010a0d, 0x00010b0d, 0x00010c0d, 0x00010d0d, - 0x00010e0d, 0x00010f0d, 0x0001100d, 0x0001110d, - 0x0001120d, 0x0001130d, 0x0001140d, 0x0001150d, - 0x0001160d, 0x0001170d, 0x0001180d, 0x0001190d, - 0x00011a0d, 0x00011b0d, 0x00011c0d, 0x00011d0d, - 0x00011e0d, 0x00011f0d, 0x0001200d, 0x0001210d, - 0x0001220d, 0x0001230d, 0x0001240d, 0x0001250d, - 0x0001260d, 0x0001270d, 0x0001280d, 0x0001290d, - 0x00012a0d, 0x00012b0d, 0x00012c0d, 0x00012d0d, - 0x00012e0d, 0x00012f0d, 0x0001300d, 0x0001310d, - 0x0001320d, 0x0001330d, 0x0001340d, 0x0001350d, - 0x0001360d, 0x0001370d, 0x0001380d, 0x0001390d, - 0x00013a0d, 0x00013b0d, 0x00013c0d, 0x00013d0d, - 0x00013e0d, 0x00013f0d, 0x0001400d, 0x0001410d, - 0x0001420d, 0x0001430d, 0x0001440d, 0x0001450d, - 0x0001460d, 0x0001470d, 0x0001480d, 0x0001490d, - 0x00014a0d, 0x00014b0d, 0x00014c0d, 0x00014d0d, - 0x00014e0d, 0x00014f0d, 0x0001500d, 0x0001510d, - 0x0001520d, 0x0001530d, 0x0001540d, 0x0001550d, - 0x0001560d, 0x0001570d, 0x0001580d, 0x0001590d, - 0x00015a0d, 0x00015b0d, 0x00015c0d, 0x00015d0d, - 0x00015e0d, 0x00015f0d, 0x0001600d, 0x0001610d, - 0x0001620d, 0x0001630d, 0x0001640d, 0x0001650d, - 0x0001660d, 0x0001670d, 0x0001680d, 0x0001690d, - 0x00016a0d, 0x00016b0d, 0x00016c0d, 0x00016d0d, - 0x00016e0d, 0x00016f0d, 0x0001700d, 0x0001710d, - 0x0001720d, 0x0001730d, 0x0001740d, 0x0001750d, - 0x0001760d, 0x0001770d, 0x0001780d, 0x0001790d, - 0x00017a0d, 0x00017b0d, 0x00017c0d, 0x00017d0d, - 0x00017e0d, 0x00017f0d, 0x0001800d, 0x0001810d, - 0x0001820d, 0x0001830d, 0x0001840d, 0x0001850d, - 0x0001860d, 0x0001870d, 0x0001880d, 0x0001890d, - 0x00018a0d, 0x00018b0d, 0x00018c0d, 0x00018d0d, - 0x00018e0d, 0x00018f0d, 0x0001900d, 0x0001910d, - 0x0001920d, 0x0001930d, 0x0001940d, 0x0001950d, - 0x0001960d, 0x0001970d, 0x0001980d, 0x0001990d, - 0x00019a0d, 0x00019b0d, 0x00019c0d, 0x00019d0d, - 0x00019e0d, 0x00019f0d, 0x0001a00d, 0x0001a10d, - 0x0001a20d, 0x0001a30d, 0x0001a40d, 0x0001a50d, - 0x0001a60d, 0x0001a70d, 0x0001a80d, 0x0001a90d, - 0x0001aa0d, 0x0001ab0d, 0x0001ac0d, 0x0001ad0d, - 0x0001ae0d, 0x0001af0d, 0x0001b00d, 0x0001b10d, - 0x0001b20d, 0x0001b30d, 0x0001b40d, 0x0001b50d, - 0x0001b60d, 0x0001b70d, 0x0001b80d, 0x0001b90d, - 0x0001ba0d, 0x0001bb0d, 0x0001bc0d, 0x0001bd0d, - 0x0001be0d, 0x0001bf0d, 0x0001c00d, 0x0001c10d, - 0x0001c20d, 0x0001c30d, 0x0001c40d, 0x0001c50d, - 0x0001c60d, 0x0001c70d, 0x0001c80d, 0x0001c90d, - 0x0001ca0d, 0x0001cb0d, 0x0001cc0d, 0x0001cd0d, - 0x0001ce0d, 0x0001cf0d, 0x0001d00d, 0x0001d10d, - 0x0001d20d, 0x0001d30d, 0x0001d40d, 0x0001d50d, - 0x0001d60d, 0x0001d70d, 0x0001d80d, 0x0001d90d, - 0x0001da0d, 0x0001db0d, 0x0001dc0d, 0x0001dd0d, - 0x0001de0d, 0x0001df0d, 0x0001e00d, 0x0001e10d, - 0x0001e20d, 0x0001e30d, 0x0001e40d, 0x0001e50d, - 0x0001e60d, 0x0001e70d, 0x0001e80d, 0x0001e90d, - 0x0001ea0d, 0x0001eb0d, 0x0001ec0d, 0x0001ed0d, - 0x0001ee0d, 0x0001ef0d, 0x0001f00d, 0x0001f10d, - 0x0001f20d, 0x0001f30d, 0x0001f40d, 0x0001f50d, - 0x0001f60d, 0x0001f70d, 0x0001f80d, 0x0001f90d, - 0x0001fa0d, 0x0001fb0d, 0x0001fc0d, 0x0001fd0d, - 0x0001fe0d, 0x0001ff0d, 0x0002000d, 0x0002010d, - 0x0002020d, 0x0002030d, 0x0002040d, 0x0002050d, - 0x0002060d, 0x0002070d, 0x0002080d, 0x0002090d, - 0x00020a0d, 0x00020b0d, 0x00020c0d, 0x00020d0d, - 0x00020e0d, 0x00020f0d, 0x0002100d, 0x0002110d, - 0x0002120d, 0x0002130d, 0x0002140d, 0x0002150d, - 0x0002160d, 0x0002170d, 0x0002180d, 0x0002190d, - 0x00021a0d, 0x00021b0d, 0x00021c0d, 0x00021d0d, - 0x00021e0d, 0x00021f0d, 0x0002200d, 0x0002210d, - 0x0002220d, 0x0002230d, 0x0002240d, 0x0002250d, - 0x0002260d, 0x0002270d, 0x0002280d, 0x0002290d, - 0x00022a0d, 0x00022b0d, 0x00022c0d, 0x00022d0d, - 0x00022e0d, 0x00022f0d, 0x0002300d, 0x0002310d, - 0x0002320d, 0x0002330d, 0x0002340d, 0x0002350d, - 0x0002360d, 0x0002370d, 0x0002380d, 0x0002390d, - 0x00023a0d, 0x00023b0d, 0x00023c0d, 0x00023d0d, - 0x00023e0d, 0x00023f0d, 0x0002400d, 0x0002410d, - 0x0002420d, 0x0002430d, 0x0002440d, 0x0002450d, - 0x0002460d, 0x0002470d, 0x0002480d, 0x0002490d, - 0x00024a0d, 0x00024b0d, 0x00024c0d, 0x00024d0d, - 0x00024e0d, 0x00024f0d, 0x0002500d, 0x0002510d, - 0x0002520d, 0x0002530d, 0x0002540d, 0x0002550d, - 0x0002560d, 0x0002570d, 0x0002580d, 0x0002590d, - 0x00025a0d, 0x00025b0d, 0x00025c0d, 0x00025d0d, - 0x00025e0d, 0x00025f0d, 0x0002600d, 0x0002610d, - 0x0002620d, 0x0002630d, 0x0002640d, 0x0002650d, - 0x0002660d, 0x0002670d, 0x0002680d, 0x0002690d, - 0x00026a0d, 0x00026b0d, 0x00026c0d, 0x00026d0d, - 0x00026e0d, 0x00026f0d, 0x0002700d, 0x0002710d, - 0x0002720d, 0x0002730d, 0x0002740d, 0x0002750d, - 0x0002760d, 0x0002770d, 0x0002780d, 0x0002790d, - 0x00027a0d, 0x00027b0d, 0x00027c0d, 0x00027d0d, - 0x00027e0d, 0x00027f0d, 0x0002800d, 0x0002810d, - 0x0002820d, 0x0002830d, 0x0002840d, 0x0002850d, - 0x0002860d, 0x0002870d, 0x0002880d, 0x0002890d, - 0x00028a0d, 0x00028b0d, 0x00028c0d, 0x00028d0d, - 0x00028e0d, 0x00028f0d, 0x0002900d, 0x0002910d, - 0x0002920d, 0x0002930d, 0x0002940d, 0x0002950d, - 0x0002960d, 0x0002970d, 0x0002980d, 0x0002990d, - 0x00029a0d, 0x00029b0d, 0x00029c0d, 0x00029d0d, - 0x00029e0d, 0x00029f0d, 0x0002a00d, 0x0002a10d, - 0x0002a20d, 0x0002a30d, 0x0002a40d, 0x0002a50d, - 0x0002a60d, 0x0002a70d, 0x0002a80d, 0x0002a90d, - 0x0002aa0d, 0x0002ab0d, 0x0002ac0d, 0x0002ad0d, - 0x0002ae0d, 0x0002af0d, 0x0002b00d, 0x0002b10d, - 0x0002b20d, 0x0002b30d, 0x0002b40d, 0x0002b50d, - 0x0002b60d, 0x0002b70d, 0x0002b80d, 0x0002b90d, - 0x0002ba0d, 0x0002bb0d, 0x0002bc0d, 0x0002bd0d, - 0x0002be0d, 0x0002bf0d, 0x0002c00d, 0x0002c10d, - 0x0002c20d, 0x0002c30d, 0x0002c40d, 0x0002c50d, - 0x0002c60d, 0x0002c70d, 0x0002c80d, 0x0002c90d, - 0x0002ca0d, 0x0002cb0d, 0x0002cc0d, 0x0002cd0d, - 0x0002ce0d, 0x0002cf0d, 0x0002d00d, 0x0002d10d, - 0x0002d20d, 0x0002d30d, 0x0002d40d, 0x0002d50d, - 0x0002d60d, 0x0002d70d, 0x0002d80d, 0x0002d90d, - 0x0002da0d, 0x0002db0d, 0x0002dc0d, 0x0002dd0d, - 0x0002de0d, 0x0002df0d, 0x0002e00d, 0x0002e10d, - 0x0002e20d, 0x0002e30d, 0x0002e40d, 0x0002e50d, - 0x0002e60d, 0x0002e70d, 0x0002e80d, 0x0002e90d, - 0x0002ea0d, 0x0002eb0d, 0x0002ec0d, 0x0002ed0d, - 0x0002ee0d, 0x0002ef0d, 0x0002f00d, 0x0002f10d, - 0x0002f20d, 0x0002f30d, 0x0002f40d, 0x0002f50d, - 0x0002f60d, 0x0002f70d, 0x0002f80d, 0x0002f90d, - 0x0002fa0d, 0x0002fb0d, 0x0002fc0d, 0x0002fd0d, - 0x0002fe0d, 0x0002ff0d, 0x0003000d, 0x0003010d, - 0x0003020d, 0x0003030d, 0x0003040d, 0x0003050d, - 0x0003060d, 0x0003070d, 0x0003080d, 0x0003090d, - 0x00030a0d, 0x00030b0d, 0x00030c0d, 0x00030d0d, - 0x00030e0d, 0x00030f0d, 0x0003100d, 0x0003110d, - 0x0003120d, 0x0003130d, 0x0003140d, 0x0003150d, - 0x0003160d, 0x0003170d, 0x0003180d, 0x0003190d, - 0x00031a0d, 0x00031b0d, 0x00031c0d, 0x00031d0d, - 0x00031e0d, 0x00031f0d, 0x0003200d, 0x0003210d, - 0x0003220d, 0x0003230d, 0x0003240d, 0x0003250d, - 0x0003260d, 0x0003270d, 0x0003280d, 0x0003290d, - 0x00032a0d, 0x00032b0d, 0x00032c0d, 0x00032d0d, - 0x00032e0d, 0x00032f0d, 0x0003300d, 0x0003310d, - 0x0003320d, 0x0003330d, 0x0003340d, 0x0003350d, - 0x0003360d, 0x0003370d, 0x0003380d, 0x0003390d, - 0x00033a0d, 0x00033b0d, 0x00033c0d, 0x00033d0d, - 0x00033e0d, 0x00033f0d, 0x0003400d, 0x0003410d, - 0x0003420d, 0x0003430d, 0x0003440d, 0x0003450d, - 0x0003460d, 0x0003470d, 0x0003480d, 0x0003490d, - 0x00034a0d, 0x00034b0d, 0x00034c0d, 0x00034d0d, - 0x00034e0d, 0x00034f0d, 0x0003500d, 0x0003510d, - 0x0003520d, 0x0003530d, 0x0003540d, 0x0003550d, - 0x0003560d, 0x0003570d, 0x0003580d, 0x0003590d, - 0x00035a0d, 0x00035b0d, 0x00035c0d, 0x00035d0d, - 0x00035e0d, 0x00035f0d, 0x0003600d, 0x0003610d, - 0x0003620d, 0x0003630d, 0x0003640d, 0x0003650d, - 0x0003660d, 0x0003670d, 0x0003680d, 0x0003690d, - 0x00036a0d, 0x00036b0d, 0x00036c0d, 0x00036d0d, - 0x00036e0d, 0x00036f0d, 0x0003700d, 0x0003710d, - 0x0003720d, 0x0003730d, 0x0003740d, 0x0003750d, - 0x0003760d, 0x0003770d, 0x0003780d, 0x0003790d, - 0x00037a0d, 0x00037b0d, 0x00037c0d, 0x00037d0d, - 0x00037e0d, 0x00037f0d, 0x0003800d, 0x0003810d, - 0x0003820d, 0x0003830d, 0x0003840d, 0x0003850d, - 0x0003860d, 0x0003870d, 0x0003880d, 0x0003890d, - 0x00038a0d, 0x00038b0d, 0x00038c0d, 0x00038d0d, - 0x00038e0d, 0x00038f0d, 0x0003900d, 0x0003910d, - 0x0003920d, 0x0003930d, 0x0003940d, 0x0003950d, - 0x0003960d, 0x0003970d, 0x0003980d, 0x0003990d, - 0x00039a0d, 0x00039b0d, 0x00039c0d, 0x00039d0d, - 0x00039e0d, 0x00039f0d, 0x0003a00d, 0x0003a10d, - 0x0003a20d, 0x0003a30d, 0x0003a40d, 0x0003a50d, - 0x0003a60d, 0x0003a70d, 0x0003a80d, 0x0003a90d, - 0x0003aa0d, 0x0003ab0d, 0x0003ac0d, 0x0003ad0d, - 0x0003ae0d, 0x0003af0d, 0x0003b00d, 0x0003b10d, - 0x0003b20d, 0x0003b30d, 0x0003b40d, 0x0003b50d, - 0x0003b60d, 0x0003b70d, 0x0003b80d, 0x0003b90d, - 0x0003ba0d, 0x0003bb0d, 0x0003bc0d, 0x0003bd0d, - 0x0003be0d, 0x0003bf0d, 0x0003c00d, 0x0003c10d, - 0x0003c20d, 0x0003c30d, 0x0003c40d, 0x0003c50d, - 0x0003c60d, 0x0003c70d, 0x0003c80d, 0x0003c90d, - 0x0003ca0d, 0x0003cb0d, 0x0003cc0d, 0x0003cd0d, - 0x0003ce0d, 0x0003cf0d, 0x0003d00d, 0x0003d10d, - 0x0003d20d, 0x0003d30d, 0x0003d40d, 0x0003d50d, - 0x0003d60d, 0x0003d70d, 0x0003d80d, 0x0003d90d, - 0x0003da0d, 0x0003db0d, 0x0003dc0d, 0x0003dd0d, - 0x0003de0d, 0x0003df0d, 0x0003e00d, 0x0003e10d, - 0x0003e20d, 0x0003e30d, 0x0003e40d, 0x0003e50d, - 0x0003e60d, 0x0003e70d, 0x0003e80d, 0x0003e90d, - 0x0003ea0d, 0x0003eb0d, 0x0003ec0d, 0x0003ed0d, - 0x0003ee0d, 0x0003ef0d, 0x0003f00d, 0x0003f10d, - 0x0003f20d, 0x0003f30d, 0x0003f40d, 0x0003f50d, - 0x0003f60d, 0x0003f70d, 0x0003f80d, 0x0003f90d, - 0x0003fa0d, 0x0003fb0d, 0x0003fc0d, 0x0003fd0d, - 0x0003fe0d, 0x0003ff0d, 0x0000026f, 0x0000066f, - 0x00000a6f, 0x00000e6f, 0x0000126f, 0x0000166f, - 0x00001a6f, 0x00001e6f, 0x0000226f, 0x0000266f, - 0x00002a6f, 0x00002e6f, 0x0000326f, 0x0000366f, - 0x00003a6f, 0x00003e6f, 0x0000426f, 0x0000466f, - 0x00004a6f, 0x00004e6f, 0x0000526f, 0x0000566f, - 0x00005a6f, 0x00005e6f, 0x0000626f, 0x0000666f, - 0x00006a6f, 0x00006e6f, 0x0000726f, 0x0000766f, - 0x00007a6f, 0x00007e6f, 0x0000826f, 0x0000866f, - 0x00008a6f, 0x00008e6f, 0x0000926f, 0x0000966f, - 0x00009a6f, 0x00009e6f, 0x0000a26f, 0x0000a66f, - 0x0000aa6f, 0x0000ae6f, 0x0000b26f, 0x0000b66f, - 0x0000ba6f, 0x0000be6f, 0x0000c26f, 0x0000c66f, - 0x0000ca6f, 0x0000ce6f, 0x0000d26f, 0x0000d66f, - 0x0000da6f, 0x0000de6f, 0x0000e26f, 0x0000e66f, - 0x0000ea6f, 0x0000ee6f, 0x0000f26f, 0x0000f66f, - 0x0000fa6f, 0x0000fe6f, 0x0001026f, 0x0001066f, - 0x00010a6f, 0x00010e6f, 0x0001126f, 0x0001166f, - 0x00011a6f, 0x00011e6f, 0x0001226f, 0x0001266f, - 0x00012a6f, 0x00012e6f, 0x0001326f, 0x0001366f, - 0x00013a6f, 0x00013e6f, 0x0001426f, 0x0001466f, - 0x00014a6f, 0x00014e6f, 0x0001526f, 0x0001566f, - 0x00015a6f, 0x00015e6f, 0x0001626f, 0x0001666f, - 0x00016a6f, 0x00016e6f, 0x0001726f, 0x0001766f, - 0x00017a6f, 0x00017e6f, 0x0001826f, 0x0001866f, - 0x00018a6f, 0x00018e6f, 0x0001926f, 0x0001966f, - 0x00019a6f, 0x00019e6f, 0x0001a26f, 0x0001a66f, - 0x0001aa6f, 0x0001ae6f, 0x0001b26f, 0x0001b66f, - 0x0001ba6f, 0x0001be6f, 0x0001c26f, 0x0001c66f, - 0x0001ca6f, 0x0001ce6f, 0x0001d26f, 0x0001d66f, - 0x0001da6f, 0x0001de6f, 0x0001e26f, 0x0001e66f, - 0x0001ea6f, 0x0001ee6f, 0x0001f26f, 0x0001f66f, - 0x0001fa6f, 0x0001fe6f, 0x0002026f, 0x0002066f, - 0x00020a6f, 0x00020e6f, 0x0002126f, 0x0002166f, - 0x00021a6f, 0x00021e6f, 0x0002226f, 0x0002266f, - 0x00022a6f, 0x00022e6f, 0x0002326f, 0x0002366f, - 0x00023a6f, 0x00023e6f, 0x0002426f, 0x0002466f, - 0x00024a6f, 0x00024e6f, 0x0002526f, 0x0002566f, - 0x00025a6f, 0x00025e6f, 0x0002626f, 0x0002666f, - 0x00026a6f, 0x00026e6f, 0x0002726f, 0x0002766f, - 0x00027a6f, 0x00027e6f, 0x0002826f, 0x0002866f, - 0x00028a6f, 0x00028e6f, 0x0002926f, 0x0002966f, - 0x00029a6f, 0x00029e6f, 0x0002a26f, 0x0002a66f, - 0x0002aa6f, 0x0002ae6f, 0x0002b26f, 0x0002b66f, - 0x0002ba6f, 0x0002be6f, 0x0002c26f, 0x0002c66f, - 0x0002ca6f, 0x0002ce6f, 0x0002d26f, 0x0002d66f, - 0x0002da6f, 0x0002de6f, 0x0002e26f, 0x0002e66f, - 0x0002ea6f, 0x0002ee6f, 0x0002f26f, 0x0002f66f, - 0x0002fa6f, 0x0002fe6f, 0x0003026f, 0x0003066f, - 0x00030a6f, 0x00030e6f, 0x0003126f, 0x0003166f, - 0x00031a6f, 0x00031e6f, 0x0003226f, 0x0003266f, - 0x00032a6f, 0x00032e6f, 0x0003326f, 0x0003366f, - 0x00033a6f, 0x00033e6f, 0x0003426f, 0x0003466f, - 0x00034a6f, 0x00034e6f, 0x0003526f, 0x0003566f, - 0x00035a6f, 0x00035e6f, 0x0003626f, 0x0003666f, - 0x00036a6f, 0x00036e6f, 0x0003726f, 0x0003766f, - 0x00037a6f, 0x00037e6f, 0x0003826f, 0x0003866f, - 0x00038a6f, 0x00038e6f, 0x0003926f, 0x0003966f, - 0x00039a6f, 0x00039e6f, 0x0003a26f, 0x0003a66f, - 0x0003aa6f, 0x0003ae6f, 0x0003b26f, 0x0003b66f, - 0x0003ba6f, 0x0003be6f, 0x0003c26f, 0x0003c66f, - 0x0003ca6f, 0x0003ce6f, 0x0003d26f, 0x0003d66f, - 0x0003da6f, 0x0003de6f, 0x0003e26f, 0x0003e66f, - 0x0003ea6f, 0x0003ee6f, 0x0003f26f, 0x0003f66f, - 0x0003fa6f, 0x0003fe6f, 0x0004026f, 0x0004066f, - 0x00040a6f, 0x00040e6f, 0x0004126f, 0x0004166f, - 0x00041a6f, 0x00041e6f, 0x0004226f, 0x0004266f, - 0x00042a6f, 0x00042e6f, 0x0004326f, 0x0004366f, - 0x00043a6f, 0x00043e6f, 0x0004426f, 0x0004466f, - 0x00044a6f, 0x00044e6f, 0x0004526f, 0x0004566f, - 0x00045a6f, 0x00045e6f, 0x0004626f, 0x0004666f, - 0x00046a6f, 0x00046e6f, 0x0004726f, 0x0004766f, - 0x00047a6f, 0x00047e6f, 0x0004826f, 0x0004866f, - 0x00048a6f, 0x00048e6f, 0x0004926f, 0x0004966f, - 0x00049a6f, 0x00049e6f, 0x0004a26f, 0x0004a66f, - 0x0004aa6f, 0x0004ae6f, 0x0004b26f, 0x0004b66f, - 0x0004ba6f, 0x0004be6f, 0x0004c26f, 0x0004c66f, - 0x0004ca6f, 0x0004ce6f, 0x0004d26f, 0x0004d66f, - 0x0004da6f, 0x0004de6f, 0x0004e26f, 0x0004e66f, - 0x0004ea6f, 0x0004ee6f, 0x0004f26f, 0x0004f66f, - 0x0004fa6f, 0x0004fe6f, 0x0005026f, 0x0005066f, - 0x00050a6f, 0x00050e6f, 0x0005126f, 0x0005166f, - 0x00051a6f, 0x00051e6f, 0x0005226f, 0x0005266f, - 0x00052a6f, 0x00052e6f, 0x0005326f, 0x0005366f, - 0x00053a6f, 0x00053e6f, 0x0005426f, 0x0005466f, - 0x00054a6f, 0x00054e6f, 0x0005526f, 0x0005566f, - 0x00055a6f, 0x00055e6f, 0x0005626f, 0x0005666f, - 0x00056a6f, 0x00056e6f, 0x0005726f, 0x0005766f, - 0x00057a6f, 0x00057e6f, 0x0005826f, 0x0005866f, - 0x00058a6f, 0x00058e6f, 0x0005926f, 0x0005966f, - 0x00059a6f, 0x00059e6f, 0x0005a26f, 0x0005a66f, - 0x0005aa6f, 0x0005ae6f, 0x0005b26f, 0x0005b66f, - 0x0005ba6f, 0x0005be6f, 0x0005c26f, 0x0005c66f, - 0x0005ca6f, 0x0005ce6f, 0x0005d26f, 0x0005d66f, - 0x0005da6f, 0x0005de6f, 0x0005e26f, 0x0005e66f, - 0x0005ea6f, 0x0005ee6f, 0x0005f26f, 0x0005f66f, - 0x0005fa6f, 0x0005fe6f, 0x0006026f, 0x0006066f, - 0x00060a6f, 0x00060e6f, 0x0006126f, 0x0006166f, - 0x00061a6f, 0x00061e6f, 0x0006226f, 0x0006266f, - 0x00062a6f, 0x00062e6f, 0x0006326f, 0x0006366f, - 0x00063a6f, 0x00063e6f, 0x0006426f, 0x0006466f, - 0x00064a6f, 0x00064e6f, 0x0006526f, 0x0006566f, - 0x00065a6f, 0x00065e6f, 0x0006626f, 0x0006666f, - 0x00066a6f, 0x00066e6f, 0x0006726f, 0x0006766f, - 0x00067a6f, 0x00067e6f, 0x0006826f, 0x0006866f, - 0x00068a6f, 0x00068e6f, 0x0006926f, 0x0006966f, - 0x00069a6f, 0x00069e6f, 0x0006a26f, 0x0006a66f, - 0x0006aa6f, 0x0006ae6f, 0x0006b26f, 0x0006b66f, - 0x0006ba6f, 0x0006be6f, 0x0006c26f, 0x0006c66f, - 0x0006ca6f, 0x0006ce6f, 0x0006d26f, 0x0006d66f, - 0x0006da6f, 0x0006de6f, 0x0006e26f, 0x0006e66f, - 0x0006ea6f, 0x0006ee6f, 0x0006f26f, 0x0006f66f, - 0x0006fa6f, 0x0006fe6f, 0x0007026f, 0x0007066f, - 0x00070a6f, 0x00070e6f, 0x0007126f, 0x0007166f, - 0x00071a6f, 0x00071e6f, 0x0007226f, 0x0007266f, - 0x00072a6f, 0x00072e6f, 0x0007326f, 0x0007366f, - 0x00073a6f, 0x00073e6f, 0x0007426f, 0x0007466f, - 0x00074a6f, 0x00074e6f, 0x0007526f, 0x0007566f, - 0x00075a6f, 0x00075e6f, 0x0007626f, 0x0007666f, - 0x00076a6f, 0x00076e6f, 0x0007726f, 0x0007766f, - 0x00077a6f, 0x00077e6f, 0x0007826f, 0x0007866f, - 0x00078a6f, 0x00078e6f, 0x0007926f, 0x0007966f, - 0x00079a6f, 0x00079e6f, 0x0007a26f, 0x0007a66f, - 0x0007aa6f, 0x0007ae6f, 0x0007b26f, 0x0007b66f, - 0x0007ba6f, 0x0007be6f, 0x0007c26f, 0x0007c66f, - 0x0007ca6f, 0x0007ce6f, 0x0007d26f, 0x0007d66f, - 0x0007da6f, 0x0007de6f, 0x0007e26f, 0x0007e66f, - 0x0007ea6f, 0x0007ee6f, 0x0007f26f, 0x0007f66f, - 0x0007fa6f, 0x0007fe6f, 0x0008026f, 0x0008066f, - 0x00080a6f, 0x00080e6f, 0x0008126f, 0x0008166f, - 0x00081a6f, 0x00081e6f, 0x0008226f, 0x0008266f, - 0x00082a6f, 0x00082e6f, 0x0008326f, 0x0008366f, - 0x00083a6f, 0x00083e6f, 0x0008426f, 0x0008466f, - 0x00084a6f, 0x00084e6f, 0x0008526f, 0x0008566f, - 0x00085a6f, 0x00085e6f, 0x0008626f, 0x0008666f, - 0x00086a6f, 0x00086e6f, 0x0008726f, 0x0008766f, - 0x00087a6f, 0x00087e6f, 0x0008826f, 0x0008866f, - 0x00088a6f, 0x00088e6f, 0x0008926f, 0x0008966f, - 0x00089a6f, 0x00089e6f, 0x0008a26f, 0x0008a66f, - 0x0008aa6f, 0x0008ae6f, 0x0008b26f, 0x0008b66f, - 0x0008ba6f, 0x0008be6f, 0x0008c26f, 0x0008c66f, - 0x0008ca6f, 0x0008ce6f, 0x0008d26f, 0x0008d66f, - 0x0008da6f, 0x0008de6f, 0x0008e26f, 0x0008e66f, - 0x0008ea6f, 0x0008ee6f, 0x0008f26f, 0x0008f66f, - 0x0008fa6f, 0x0008fe6f, 0x0009026f, 0x0009066f, - 0x00090a6f, 0x00090e6f, 0x0009126f, 0x0009166f, - 0x00091a6f, 0x00091e6f, 0x0009226f, 0x0009266f, - 0x00092a6f, 0x00092e6f, 0x0009326f, 0x0009366f, - 0x00093a6f, 0x00093e6f, 0x0009426f, 0x0009466f, - 0x00094a6f, 0x00094e6f, 0x0009526f, 0x0009566f, - 0x00095a6f, 0x00095e6f, 0x0009626f, 0x0009666f, - 0x00096a6f, 0x00096e6f, 0x0009726f, 0x0009766f, - 0x00097a6f, 0x00097e6f, 0x0009826f, 0x0009866f, - 0x00098a6f, 0x00098e6f, 0x0009926f, 0x0009966f, - 0x00099a6f, 0x00099e6f, 0x0009a26f, 0x0009a66f, - 0x0009aa6f, 0x0009ae6f, 0x0009b26f, 0x0009b66f, - 0x0009ba6f, 0x0009be6f, 0x0009c26f, 0x0009c66f, - 0x0009ca6f, 0x0009ce6f, 0x0009d26f, 0x0009d66f, - 0x0009da6f, 0x0009de6f, 0x0009e26f, 0x0009e66f, - 0x0009ea6f, 0x0009ee6f, 0x0009f26f, 0x0009f66f, - 0x0009fa6f, 0x0009fe6f, 0x000a026f, 0x000a066f, - 0x000a0a6f, 0x000a0e6f, 0x000a126f, 0x000a166f, - 0x000a1a6f, 0x000a1e6f, 0x000a226f, 0x000a266f, - 0x000a2a6f, 0x000a2e6f, 0x000a326f, 0x000a366f, - 0x000a3a6f, 0x000a3e6f, 0x000a426f, 0x000a466f, - 0x000a4a6f, 0x000a4e6f, 0x000a526f, 0x000a566f, - 0x000a5a6f, 0x000a5e6f, 0x000a626f, 0x000a666f, - 0x000a6a6f, 0x000a6e6f, 0x000a726f, 0x000a766f, - 0x000a7a6f, 0x000a7e6f, 0x000a826f, 0x000a866f, - 0x000a8a6f, 0x000a8e6f, 0x000a926f, 0x000a966f, - 0x000a9a6f, 0x000a9e6f, 0x000aa26f, 0x000aa66f, - 0x000aaa6f, 0x000aae6f, 0x000ab26f, 0x000ab66f, - 0x000aba6f, 0x000abe6f, 0x000ac26f, 0x000ac66f, - 0x000aca6f, 0x000ace6f, 0x000ad26f, 0x000ad66f, - 0x000ada6f, 0x000ade6f, 0x000ae26f, 0x000ae66f, - 0x000aea6f, 0x000aee6f, 0x000af26f, 0x000af66f, - 0x000afa6f, 0x000afe6f, 0x000b026f, 0x000b066f, - 0x000b0a6f, 0x000b0e6f, 0x000b126f, 0x000b166f, - 0x000b1a6f, 0x000b1e6f, 0x000b226f, 0x000b266f, - 0x000b2a6f, 0x000b2e6f, 0x000b326f, 0x000b366f, - 0x000b3a6f, 0x000b3e6f, 0x000b426f, 0x000b466f, - 0x000b4a6f, 0x000b4e6f, 0x000b526f, 0x000b566f, - 0x000b5a6f, 0x000b5e6f, 0x000b626f, 0x000b666f, - 0x000b6a6f, 0x000b6e6f, 0x000b726f, 0x000b766f, - 0x000b7a6f, 0x000b7e6f, 0x000b826f, 0x000b866f, - 0x000b8a6f, 0x000b8e6f, 0x000b926f, 0x000b966f, - 0x000b9a6f, 0x000b9e6f, 0x000ba26f, 0x000ba66f, - 0x000baa6f, 0x000bae6f, 0x000bb26f, 0x000bb66f, - 0x000bba6f, 0x000bbe6f, 0x000bc26f, 0x000bc66f, - 0x000bca6f, 0x000bce6f, 0x000bd26f, 0x000bd66f, - 0x000bda6f, 0x000bde6f, 0x000be26f, 0x000be66f, - 0x000bea6f, 0x000bee6f, 0x000bf26f, 0x000bf66f, - 0x000bfa6f, 0x000bfe6f, 0x000c026f, 0x000c066f, - 0x000c0a6f, 0x000c0e6f, 0x000c126f, 0x000c166f, - 0x000c1a6f, 0x000c1e6f, 0x000c226f, 0x000c266f, - 0x000c2a6f, 0x000c2e6f, 0x000c326f, 0x000c366f, - 0x000c3a6f, 0x000c3e6f, 0x000c426f, 0x000c466f, - 0x000c4a6f, 0x000c4e6f, 0x000c526f, 0x000c566f, - 0x000c5a6f, 0x000c5e6f, 0x000c626f, 0x000c666f, - 0x000c6a6f, 0x000c6e6f, 0x000c726f, 0x000c766f, - 0x000c7a6f, 0x000c7e6f, 0x000c826f, 0x000c866f, - 0x000c8a6f, 0x000c8e6f, 0x000c926f, 0x000c966f, - 0x000c9a6f, 0x000c9e6f, 0x000ca26f, 0x000ca66f, - 0x000caa6f, 0x000cae6f, 0x000cb26f, 0x000cb66f, - 0x000cba6f, 0x000cbe6f, 0x000cc26f, 0x000cc66f, - 0x000cca6f, 0x000cce6f, 0x000cd26f, 0x000cd66f, - 0x000cda6f, 0x000cde6f, 0x000ce26f, 0x000ce66f, - 0x000cea6f, 0x000cee6f, 0x000cf26f, 0x000cf66f, - 0x000cfa6f, 0x000cfe6f, 0x000d026f, 0x000d066f, - 0x000d0a6f, 0x000d0e6f, 0x000d126f, 0x000d166f, - 0x000d1a6f, 0x000d1e6f, 0x000d226f, 0x000d266f, - 0x000d2a6f, 0x000d2e6f, 0x000d326f, 0x000d366f, - 0x000d3a6f, 0x000d3e6f, 0x000d426f, 0x000d466f, - 0x000d4a6f, 0x000d4e6f, 0x000d526f, 0x000d566f, - 0x000d5a6f, 0x000d5e6f, 0x000d626f, 0x000d666f, - 0x000d6a6f, 0x000d6e6f, 0x000d726f, 0x000d766f, - 0x000d7a6f, 0x000d7e6f, 0x000d826f, 0x000d866f, - 0x000d8a6f, 0x000d8e6f, 0x000d926f, 0x000d966f, - 0x000d9a6f, 0x000d9e6f, 0x000da26f, 0x000da66f, - 0x000daa6f, 0x000dae6f, 0x000db26f, 0x000db66f, - 0x000dba6f, 0x000dbe6f, 0x000dc26f, 0x000dc66f, - 0x000dca6f, 0x000dce6f, 0x000dd26f, 0x000dd66f, - 0x000dda6f, 0x000dde6f, 0x000de26f, 0x000de66f, - 0x000dea6f, 0x000dee6f, 0x000df26f, 0x000df66f, - 0x000dfa6f, 0x000dfe6f, 0x000e026f, 0x000e066f, - 0x000e0a6f, 0x000e0e6f, 0x000e126f, 0x000e166f, - 0x000e1a6f, 0x000e1e6f, 0x000e226f, 0x000e266f, - 0x000e2a6f, 0x000e2e6f, 0x000e326f, 0x000e366f, - 0x000e3a6f, 0x000e3e6f, 0x000e426f, 0x000e466f, - 0x000e4a6f, 0x000e4e6f, 0x000e526f, 0x000e566f, - 0x000e5a6f, 0x000e5e6f, 0x000e626f, 0x000e666f, - 0x000e6a6f, 0x000e6e6f, 0x000e726f, 0x000e766f, - 0x000e7a6f, 0x000e7e6f, 0x000e826f, 0x000e866f, - 0x000e8a6f, 0x000e8e6f, 0x000e926f, 0x000e966f, - 0x000e9a6f, 0x000e9e6f, 0x000ea26f, 0x000ea66f, - 0x000eaa6f, 0x000eae6f, 0x000eb26f, 0x000eb66f, - 0x000eba6f, 0x000ebe6f, 0x000ec26f, 0x000ec66f, - 0x000eca6f, 0x000ece6f, 0x000ed26f, 0x000ed66f, - 0x000eda6f, 0x000ede6f, 0x000ee26f, 0x000ee66f, - 0x000eea6f, 0x000eee6f, 0x000ef26f, 0x000ef66f, - 0x000efa6f, 0x000efe6f, 0x000f026f, 0x000f066f, - 0x000f0a6f, 0x000f0e6f, 0x000f126f, 0x000f166f, - 0x000f1a6f, 0x000f1e6f, 0x000f226f, 0x000f266f, - 0x000f2a6f, 0x000f2e6f, 0x000f326f, 0x000f366f, - 0x000f3a6f, 0x000f3e6f, 0x000f426f, 0x000f466f, - 0x000f4a6f, 0x000f4e6f, 0x000f526f, 0x000f566f, - 0x000f5a6f, 0x000f5e6f, 0x000f626f, 0x000f666f, - 0x000f6a6f, 0x000f6e6f, 0x000f726f, 0x000f766f, - 0x000f7a6f, 0x000f7e6f, 0x000f826f, 0x000f866f, - 0x000f8a6f, 0x000f8e6f, 0x000f926f, 0x000f966f, - 0x000f9a6f, 0x000f9e6f, 0x000fa26f, 0x000fa66f, - 0x000faa6f, 0x000fae6f, 0x000fb26f, 0x000fb66f, - 0x000fba6f, 0x000fbe6f, 0x000fc26f, 0x000fc66f, - 0x000fca6f, 0x000fce6f, 0x000fd26f, 0x000fd66f, - 0x000fda6f, 0x000fde6f, 0x000fe26f, 0x000fe66f, - 0x000fea6f, 0x000fee6f, 0x000ff26f, 0x000ff66f, - 0x000ffa6f, 0x000ffe6f, 0x000001cf, 0x000003cf, - 0x000005cf, 0x000007cf, 0x000009cf, 0x00000bcf, - 0x00000dcf, 0x00000fcf, 0x000011cf, 0x000013cf, - 0x000015cf, 0x000017cf, 0x000019cf, 0x00001bcf, - 0x00001dcf, 0x00001fcf, 0x000021cf, 0x000023cf, - 0x000025cf, 0x000027cf, 0x000029cf, 0x00002bcf, - 0x00002dcf, 0x00002fcf, 0x000031cf, 0x000033cf, - 0x000035cf, 0x000037cf, 0x000039cf, 0x00003bcf, - 0x00003dcf, 0x00003fcf, 0x000041cf, 0x000043cf, - 0x000045cf, 0x000047cf, 0x000049cf, 0x00004bcf, - 0x00004dcf, 0x00004fcf, 0x000051cf, 0x000053cf, - 0x000055cf, 0x000057cf, 0x000059cf, 0x00005bcf, - 0x00005dcf, 0x00005fcf, 0x000061cf, 0x000063cf, - 0x000065cf, 0x000067cf, 0x000069cf, 0x00006bcf, - 0x00006dcf, 0x00006fcf, 0x000071cf, 0x000073cf, - 0x000075cf, 0x000077cf, 0x000079cf, 0x00007bcf, - 0x00007dcf, 0x00007fcf, 0x000081cf, 0x000083cf, - 0x000085cf, 0x000087cf, 0x000089cf, 0x00008bcf, - 0x00008dcf, 0x00008fcf, 0x000091cf, 0x000093cf, - 0x000095cf, 0x000097cf, 0x000099cf, 0x00009bcf, - 0x00009dcf, 0x00009fcf, 0x0000a1cf, 0x0000a3cf, - 0x0000a5cf, 0x0000a7cf, 0x0000a9cf, 0x0000abcf, - 0x0000adcf, 0x0000afcf, 0x0000b1cf, 0x0000b3cf, - 0x0000b5cf, 0x0000b7cf, 0x0000b9cf, 0x0000bbcf, - 0x0000bdcf, 0x0000bfcf, 0x0000c1cf, 0x0000c3cf, - 0x0000c5cf, 0x0000c7cf, 0x0000c9cf, 0x0000cbcf, - 0x0000cdcf, 0x0000cfcf, 0x0000d1cf, 0x0000d3cf, - 0x0000d5cf, 0x0000d7cf, 0x0000d9cf, 0x0000dbcf, - 0x0000ddcf, 0x0000dfcf, 0x0000e1cf, 0x0000e3cf, - 0x0000e5cf, 0x0000e7cf, 0x0000e9cf, 0x0000ebcf, - 0x0000edcf, 0x0000efcf, 0x0000f1cf, 0x0000f3cf, - 0x0000f5cf, 0x0000f7cf, 0x0000f9cf, 0x0000fbcf, - 0x0000fdcf, 0x0000ffcf, 0x000101cf, 0x000103cf, - 0x000105cf, 0x000107cf, 0x000109cf, 0x00010bcf, - 0x00010dcf, 0x00010fcf, 0x000111cf, 0x000113cf, - 0x000115cf, 0x000117cf, 0x000119cf, 0x00011bcf, - 0x00011dcf, 0x00011fcf, 0x000121cf, 0x000123cf, - 0x000125cf, 0x000127cf, 0x000129cf, 0x00012bcf, - 0x00012dcf, 0x00012fcf, 0x000131cf, 0x000133cf, - 0x000135cf, 0x000137cf, 0x000139cf, 0x00013bcf, - 0x00013dcf, 0x00013fcf, 0x000141cf, 0x000143cf, - 0x000145cf, 0x000147cf, 0x000149cf, 0x00014bcf, - 0x00014dcf, 0x00014fcf, 0x000151cf, 0x000153cf, - 0x000155cf, 0x000157cf, 0x000159cf, 0x00015bcf, - 0x00015dcf, 0x00015fcf, 0x000161cf, 0x000163cf, - 0x000165cf, 0x000167cf, 0x000169cf, 0x00016bcf, - 0x00016dcf, 0x00016fcf, 0x000171cf, 0x000173cf, - 0x000175cf, 0x000177cf, 0x000179cf, 0x00017bcf, - 0x00017dcf, 0x00017fcf, 0x000181cf, 0x000183cf, - 0x000185cf, 0x000187cf, 0x000189cf, 0x00018bcf, - 0x00018dcf, 0x00018fcf, 0x000191cf, 0x000193cf, - 0x000195cf, 0x000197cf, 0x000199cf, 0x00019bcf, - 0x00019dcf, 0x00019fcf, 0x0001a1cf, 0x0001a3cf, - 0x0001a5cf, 0x0001a7cf, 0x0001a9cf, 0x0001abcf, - 0x0001adcf, 0x0001afcf, 0x0001b1cf, 0x0001b3cf, - 0x0001b5cf, 0x0001b7cf, 0x0001b9cf, 0x0001bbcf, - 0x0001bdcf, 0x0001bfcf, 0x0001c1cf, 0x0001c3cf, - 0x0001c5cf, 0x0001c7cf, 0x0001c9cf, 0x0001cbcf, - 0x0001cdcf, 0x0001cfcf, 0x0001d1cf, 0x0001d3cf, - 0x0001d5cf, 0x0001d7cf, 0x0001d9cf, 0x0001dbcf, - 0x0001ddcf, 0x0001dfcf, 0x0001e1cf, 0x0001e3cf, - 0x0001e5cf, 0x0001e7cf, 0x0001e9cf, 0x0001ebcf, - 0x0001edcf, 0x0001efcf, 0x0001f1cf, 0x0001f3cf, - 0x0001f5cf, 0x0001f7cf, 0x0001f9cf, 0x0001fbcf, - 0x0001fdcf, 0x0001ffcf, 0x000201cf, 0x000203cf, - 0x000205cf, 0x000207cf, 0x000209cf, 0x00020bcf, - 0x00020dcf, 0x00020fcf, 0x000211cf, 0x000213cf, - 0x000215cf, 0x000217cf, 0x000219cf, 0x00021bcf, - 0x00021dcf, 0x00021fcf, 0x000221cf, 0x000223cf, - 0x000225cf, 0x000227cf, 0x000229cf, 0x00022bcf, - 0x00022dcf, 0x00022fcf, 0x000231cf, 0x000233cf, - 0x000235cf, 0x000237cf, 0x000239cf, 0x00023bcf, - 0x00023dcf, 0x00023fcf, 0x000241cf, 0x000243cf, - 0x000245cf, 0x000247cf, 0x000249cf, 0x00024bcf, - 0x00024dcf, 0x00024fcf, 0x000251cf, 0x000253cf, - 0x000255cf, 0x000257cf, 0x000259cf, 0x00025bcf, - 0x00025dcf, 0x00025fcf, 0x000261cf, 0x000263cf, - 0x000265cf, 0x000267cf, 0x000269cf, 0x00026bcf, - 0x00026dcf, 0x00026fcf, 0x000271cf, 0x000273cf, - 0x000275cf, 0x000277cf, 0x000279cf, 0x00027bcf, - 0x00027dcf, 0x00027fcf, 0x000281cf, 0x000283cf, - 0x000285cf, 0x000287cf, 0x000289cf, 0x00028bcf, - 0x00028dcf, 0x00028fcf, 0x000291cf, 0x000293cf, - 0x000295cf, 0x000297cf, 0x000299cf, 0x00029bcf, - 0x00029dcf, 0x00029fcf, 0x0002a1cf, 0x0002a3cf, - 0x0002a5cf, 0x0002a7cf, 0x0002a9cf, 0x0002abcf, - 0x0002adcf, 0x0002afcf, 0x0002b1cf, 0x0002b3cf, - 0x0002b5cf, 0x0002b7cf, 0x0002b9cf, 0x0002bbcf, - 0x0002bdcf, 0x0002bfcf, 0x0002c1cf, 0x0002c3cf, - 0x0002c5cf, 0x0002c7cf, 0x0002c9cf, 0x0002cbcf, - 0x0002cdcf, 0x0002cfcf, 0x0002d1cf, 0x0002d3cf, - 0x0002d5cf, 0x0002d7cf, 0x0002d9cf, 0x0002dbcf, - 0x0002ddcf, 0x0002dfcf, 0x0002e1cf, 0x0002e3cf, - 0x0002e5cf, 0x0002e7cf, 0x0002e9cf, 0x0002ebcf, - 0x0002edcf, 0x0002efcf, 0x0002f1cf, 0x0002f3cf, - 0x0002f5cf, 0x0002f7cf, 0x0002f9cf, 0x0002fbcf, - 0x0002fdcf, 0x0002ffcf, 0x000301cf, 0x000303cf, - 0x000305cf, 0x000307cf, 0x000309cf, 0x00030bcf, - 0x00030dcf, 0x00030fcf, 0x000311cf, 0x000313cf, - 0x000315cf, 0x000317cf, 0x000319cf, 0x00031bcf, - 0x00031dcf, 0x00031fcf, 0x000321cf, 0x000323cf, - 0x000325cf, 0x000327cf, 0x000329cf, 0x00032bcf, - 0x00032dcf, 0x00032fcf, 0x000331cf, 0x000333cf, - 0x000335cf, 0x000337cf, 0x000339cf, 0x00033bcf, - 0x00033dcf, 0x00033fcf, 0x000341cf, 0x000343cf, - 0x000345cf, 0x000347cf, 0x000349cf, 0x00034bcf, - 0x00034dcf, 0x00034fcf, 0x000351cf, 0x000353cf, - 0x000355cf, 0x000357cf, 0x000359cf, 0x00035bcf, - 0x00035dcf, 0x00035fcf, 0x000361cf, 0x000363cf, - 0x000365cf, 0x000367cf, 0x000369cf, 0x00036bcf, - 0x00036dcf, 0x00036fcf, 0x000371cf, 0x000373cf, - 0x000375cf, 0x000377cf, 0x000379cf, 0x00037bcf, - 0x00037dcf, 0x00037fcf, 0x000381cf, 0x000383cf, - 0x000385cf, 0x000387cf, 0x000389cf, 0x00038bcf, - 0x00038dcf, 0x00038fcf, 0x000391cf, 0x000393cf, - 0x000395cf, 0x000397cf, 0x000399cf, 0x00039bcf, - 0x00039dcf, 0x00039fcf, 0x0003a1cf, 0x0003a3cf, - 0x0003a5cf, 0x0003a7cf, 0x0003a9cf, 0x0003abcf, - 0x0003adcf, 0x0003afcf, 0x0003b1cf, 0x0003b3cf, - 0x0003b5cf, 0x0003b7cf, 0x0003b9cf, 0x0003bbcf, - 0x0003bdcf, 0x0003bfcf, 0x0003c1cf, 0x0003c3cf, - 0x0003c5cf, 0x0003c7cf, 0x0003c9cf, 0x0003cbcf, - 0x0003cdcf, 0x0003cfcf, 0x0003d1cf, 0x0003d3cf, - 0x0003d5cf, 0x0003d7cf, 0x0003d9cf, 0x0003dbcf, - 0x0003ddcf, 0x0003dfcf, 0x0003e1cf, 0x0003e3cf, - 0x0003e5cf, 0x0003e7cf, 0x0003e9cf, 0x0003ebcf, - 0x0003edcf, 0x0003efcf, 0x0003f1cf, 0x0003f3cf, - 0x0003f5cf, 0x0003f7cf, 0x0003f9cf, 0x0003fbcf, - 0x0003fdcf, 0x0003ffcf, 0x000401cf, 0x000403cf, - 0x000405cf, 0x000407cf, 0x000409cf, 0x00040bcf, - 0x00040dcf, 0x00040fcf, 0x000411cf, 0x000413cf, - 0x000415cf, 0x000417cf, 0x000419cf, 0x00041bcf, - 0x00041dcf, 0x00041fcf, 0x000421cf, 0x000423cf, - 0x000425cf, 0x000427cf, 0x000429cf, 0x00042bcf, - 0x00042dcf, 0x00042fcf, 0x000431cf, 0x000433cf, - 0x000435cf, 0x000437cf, 0x000439cf, 0x00043bcf, - 0x00043dcf, 0x00043fcf, 0x000441cf, 0x000443cf, - 0x000445cf, 0x000447cf, 0x000449cf, 0x00044bcf, - 0x00044dcf, 0x00044fcf, 0x000451cf, 0x000453cf, - 0x000455cf, 0x000457cf, 0x000459cf, 0x00045bcf, - 0x00045dcf, 0x00045fcf, 0x000461cf, 0x000463cf, - 0x000465cf, 0x000467cf, 0x000469cf, 0x00046bcf, - 0x00046dcf, 0x00046fcf, 0x000471cf, 0x000473cf, - 0x000475cf, 0x000477cf, 0x000479cf, 0x00047bcf, - 0x00047dcf, 0x00047fcf, 0x000481cf, 0x000483cf, - 0x000485cf, 0x000487cf, 0x000489cf, 0x00048bcf, - 0x00048dcf, 0x00048fcf, 0x000491cf, 0x000493cf, - 0x000495cf, 0x000497cf, 0x000499cf, 0x00049bcf, - 0x00049dcf, 0x00049fcf, 0x0004a1cf, 0x0004a3cf, - 0x0004a5cf, 0x0004a7cf, 0x0004a9cf, 0x0004abcf, - 0x0004adcf, 0x0004afcf, 0x0004b1cf, 0x0004b3cf, - 0x0004b5cf, 0x0004b7cf, 0x0004b9cf, 0x0004bbcf, - 0x0004bdcf, 0x0004bfcf, 0x0004c1cf, 0x0004c3cf, - 0x0004c5cf, 0x0004c7cf, 0x0004c9cf, 0x0004cbcf, - 0x0004cdcf, 0x0004cfcf, 0x0004d1cf, 0x0004d3cf, - 0x0004d5cf, 0x0004d7cf, 0x0004d9cf, 0x0004dbcf, - 0x0004ddcf, 0x0004dfcf, 0x0004e1cf, 0x0004e3cf, - 0x0004e5cf, 0x0004e7cf, 0x0004e9cf, 0x0004ebcf, - 0x0004edcf, 0x0004efcf, 0x0004f1cf, 0x0004f3cf, - 0x0004f5cf, 0x0004f7cf, 0x0004f9cf, 0x0004fbcf, - 0x0004fdcf, 0x0004ffcf, 0x000501cf, 0x000503cf, - 0x000505cf, 0x000507cf, 0x000509cf, 0x00050bcf, - 0x00050dcf, 0x00050fcf, 0x000511cf, 0x000513cf, - 0x000515cf, 0x000517cf, 0x000519cf, 0x00051bcf, - 0x00051dcf, 0x00051fcf, 0x000521cf, 0x000523cf, - 0x000525cf, 0x000527cf, 0x000529cf, 0x00052bcf, - 0x00052dcf, 0x00052fcf, 0x000531cf, 0x000533cf, - 0x000535cf, 0x000537cf, 0x000539cf, 0x00053bcf, - 0x00053dcf, 0x00053fcf, 0x000541cf, 0x000543cf, - 0x000545cf, 0x000547cf, 0x000549cf, 0x00054bcf, - 0x00054dcf, 0x00054fcf, 0x000551cf, 0x000553cf, - 0x000555cf, 0x000557cf, 0x000559cf, 0x00055bcf, - 0x00055dcf, 0x00055fcf, 0x000561cf, 0x000563cf, - 0x000565cf, 0x000567cf, 0x000569cf, 0x00056bcf, - 0x00056dcf, 0x00056fcf, 0x000571cf, 0x000573cf, - 0x000575cf, 0x000577cf, 0x000579cf, 0x00057bcf, - 0x00057dcf, 0x00057fcf, 0x000581cf, 0x000583cf, - 0x000585cf, 0x000587cf, 0x000589cf, 0x00058bcf, - 0x00058dcf, 0x00058fcf, 0x000591cf, 0x000593cf, - 0x000595cf, 0x000597cf, 0x000599cf, 0x00059bcf, - 0x00059dcf, 0x00059fcf, 0x0005a1cf, 0x0005a3cf, - 0x0005a5cf, 0x0005a7cf, 0x0005a9cf, 0x0005abcf, - 0x0005adcf, 0x0005afcf, 0x0005b1cf, 0x0005b3cf, - 0x0005b5cf, 0x0005b7cf, 0x0005b9cf, 0x0005bbcf, - 0x0005bdcf, 0x0005bfcf, 0x0005c1cf, 0x0005c3cf, - 0x0005c5cf, 0x0005c7cf, 0x0005c9cf, 0x0005cbcf, - 0x0005cdcf, 0x0005cfcf, 0x0005d1cf, 0x0005d3cf, - 0x0005d5cf, 0x0005d7cf, 0x0005d9cf, 0x0005dbcf, - 0x0005ddcf, 0x0005dfcf, 0x0005e1cf, 0x0005e3cf, - 0x0005e5cf, 0x0005e7cf, 0x0005e9cf, 0x0005ebcf, - 0x0005edcf, 0x0005efcf, 0x0005f1cf, 0x0005f3cf, - 0x0005f5cf, 0x0005f7cf, 0x0005f9cf, 0x0005fbcf, - 0x0005fdcf, 0x0005ffcf, 0x000601cf, 0x000603cf, - 0x000605cf, 0x000607cf, 0x000609cf, 0x00060bcf, - 0x00060dcf, 0x00060fcf, 0x000611cf, 0x000613cf, - 0x000615cf, 0x000617cf, 0x000619cf, 0x00061bcf, - 0x00061dcf, 0x00061fcf, 0x000621cf, 0x000623cf, - 0x000625cf, 0x000627cf, 0x000629cf, 0x00062bcf, - 0x00062dcf, 0x00062fcf, 0x000631cf, 0x000633cf, - 0x000635cf, 0x000637cf, 0x000639cf, 0x00063bcf, - 0x00063dcf, 0x00063fcf, 0x000641cf, 0x000643cf, - 0x000645cf, 0x000647cf, 0x000649cf, 0x00064bcf, - 0x00064dcf, 0x00064fcf, 0x000651cf, 0x000653cf, - 0x000655cf, 0x000657cf, 0x000659cf, 0x00065bcf, - 0x00065dcf, 0x00065fcf, 0x000661cf, 0x000663cf, - 0x000665cf, 0x000667cf, 0x000669cf, 0x00066bcf, - 0x00066dcf, 0x00066fcf, 0x000671cf, 0x000673cf, - 0x000675cf, 0x000677cf, 0x000679cf, 0x00067bcf, - 0x00067dcf, 0x00067fcf, 0x000681cf, 0x000683cf, - 0x000685cf, 0x000687cf, 0x000689cf, 0x00068bcf, - 0x00068dcf, 0x00068fcf, 0x000691cf, 0x000693cf, - 0x000695cf, 0x000697cf, 0x000699cf, 0x00069bcf, - 0x00069dcf, 0x00069fcf, 0x0006a1cf, 0x0006a3cf, - 0x0006a5cf, 0x0006a7cf, 0x0006a9cf, 0x0006abcf, - 0x0006adcf, 0x0006afcf, 0x0006b1cf, 0x0006b3cf, - 0x0006b5cf, 0x0006b7cf, 0x0006b9cf, 0x0006bbcf, - 0x0006bdcf, 0x0006bfcf, 0x0006c1cf, 0x0006c3cf, - 0x0006c5cf, 0x0006c7cf, 0x0006c9cf, 0x0006cbcf, - 0x0006cdcf, 0x0006cfcf, 0x0006d1cf, 0x0006d3cf, - 0x0006d5cf, 0x0006d7cf, 0x0006d9cf, 0x0006dbcf, - 0x0006ddcf, 0x0006dfcf, 0x0006e1cf, 0x0006e3cf, - 0x0006e5cf, 0x0006e7cf, 0x0006e9cf, 0x0006ebcf, - 0x0006edcf, 0x0006efcf, 0x0006f1cf, 0x0006f3cf, - 0x0006f5cf, 0x0006f7cf, 0x0006f9cf, 0x0006fbcf, - 0x0006fdcf, 0x0006ffcf, 0x000701cf, 0x000703cf, - 0x000705cf, 0x000707cf, 0x000709cf, 0x00070bcf, - 0x00070dcf, 0x00070fcf, 0x000711cf, 0x000713cf, - 0x000715cf, 0x000717cf, 0x000719cf, 0x00071bcf, - 0x00071dcf, 0x00071fcf, 0x000721cf, 0x000723cf, - 0x000725cf, 0x000727cf, 0x000729cf, 0x00072bcf, - 0x00072dcf, 0x00072fcf, 0x000731cf, 0x000733cf, - 0x000735cf, 0x000737cf, 0x000739cf, 0x00073bcf, - 0x00073dcf, 0x00073fcf, 0x000741cf, 0x000743cf, - 0x000745cf, 0x000747cf, 0x000749cf, 0x00074bcf, - 0x00074dcf, 0x00074fcf, 0x000751cf, 0x000753cf, - 0x000755cf, 0x000757cf, 0x000759cf, 0x00075bcf, - 0x00075dcf, 0x00075fcf, 0x000761cf, 0x000763cf, - 0x000765cf, 0x000767cf, 0x000769cf, 0x00076bcf, - 0x00076dcf, 0x00076fcf, 0x000771cf, 0x000773cf, - 0x000775cf, 0x000777cf, 0x000779cf, 0x00077bcf, - 0x00077dcf, 0x00077fcf, 0x000781cf, 0x000783cf, - 0x000785cf, 0x000787cf, 0x000789cf, 0x00078bcf, - 0x00078dcf, 0x00078fcf, 0x000791cf, 0x000793cf, - 0x000795cf, 0x000797cf, 0x000799cf, 0x00079bcf, - 0x00079dcf, 0x00079fcf, 0x0007a1cf, 0x0007a3cf, - 0x0007a5cf, 0x0007a7cf, 0x0007a9cf, 0x0007abcf, - 0x0007adcf, 0x0007afcf, 0x0007b1cf, 0x0007b3cf, - 0x0007b5cf, 0x0007b7cf, 0x0007b9cf, 0x0007bbcf, - 0x0007bdcf, 0x0007bfcf, 0x0007c1cf, 0x0007c3cf, - 0x0007c5cf, 0x0007c7cf, 0x0007c9cf, 0x0007cbcf, - 0x0007cdcf, 0x0007cfcf, 0x0007d1cf, 0x0007d3cf, - 0x0007d5cf, 0x0007d7cf, 0x0007d9cf, 0x0007dbcf, - 0x0007ddcf, 0x0007dfcf, 0x0007e1cf, 0x0007e3cf, - 0x0007e5cf, 0x0007e7cf, 0x0007e9cf, 0x0007ebcf, - 0x0007edcf, 0x0007efcf, 0x0007f1cf, 0x0007f3cf, - 0x0007f5cf, 0x0007f7cf, 0x0007f9cf, 0x0007fbcf, - 0x0007fdcf, 0x0007ffcf, 0x000801cf, 0x000803cf, - 0x000805cf, 0x000807cf, 0x000809cf, 0x00080bcf, - 0x00080dcf, 0x00080fcf, 0x000811cf, 0x000813cf, - 0x000815cf, 0x000817cf, 0x000819cf, 0x00081bcf, - 0x00081dcf, 0x00081fcf, 0x000821cf, 0x000823cf, - 0x000825cf, 0x000827cf, 0x000829cf, 0x00082bcf, - 0x00082dcf, 0x00082fcf, 0x000831cf, 0x000833cf, - 0x000835cf, 0x000837cf, 0x000839cf, 0x00083bcf, - 0x00083dcf, 0x00083fcf, 0x000841cf, 0x000843cf, - 0x000845cf, 0x000847cf, 0x000849cf, 0x00084bcf, - 0x00084dcf, 0x00084fcf, 0x000851cf, 0x000853cf, - 0x000855cf, 0x000857cf, 0x000859cf, 0x00085bcf, - 0x00085dcf, 0x00085fcf, 0x000861cf, 0x000863cf, - 0x000865cf, 0x000867cf, 0x000869cf, 0x00086bcf, - 0x00086dcf, 0x00086fcf, 0x000871cf, 0x000873cf, - 0x000875cf, 0x000877cf, 0x000879cf, 0x00087bcf, - 0x00087dcf, 0x00087fcf, 0x000881cf, 0x000883cf, - 0x000885cf, 0x000887cf, 0x000889cf, 0x00088bcf, - 0x00088dcf, 0x00088fcf, 0x000891cf, 0x000893cf, - 0x000895cf, 0x000897cf, 0x000899cf, 0x00089bcf, - 0x00089dcf, 0x00089fcf, 0x0008a1cf, 0x0008a3cf, - 0x0008a5cf, 0x0008a7cf, 0x0008a9cf, 0x0008abcf, - 0x0008adcf, 0x0008afcf, 0x0008b1cf, 0x0008b3cf, - 0x0008b5cf, 0x0008b7cf, 0x0008b9cf, 0x0008bbcf, - 0x0008bdcf, 0x0008bfcf, 0x0008c1cf, 0x0008c3cf, - 0x0008c5cf, 0x0008c7cf, 0x0008c9cf, 0x0008cbcf, - 0x0008cdcf, 0x0008cfcf, 0x0008d1cf, 0x0008d3cf, - 0x0008d5cf, 0x0008d7cf, 0x0008d9cf, 0x0008dbcf, - 0x0008ddcf, 0x0008dfcf, 0x0008e1cf, 0x0008e3cf, - 0x0008e5cf, 0x0008e7cf, 0x0008e9cf, 0x0008ebcf, - 0x0008edcf, 0x0008efcf, 0x0008f1cf, 0x0008f3cf, - 0x0008f5cf, 0x0008f7cf, 0x0008f9cf, 0x0008fbcf, - 0x0008fdcf, 0x0008ffcf, 0x000901cf, 0x000903cf, - 0x000905cf, 0x000907cf, 0x000909cf, 0x00090bcf, - 0x00090dcf, 0x00090fcf, 0x000911cf, 0x000913cf, - 0x000915cf, 0x000917cf, 0x000919cf, 0x00091bcf, - 0x00091dcf, 0x00091fcf, 0x000921cf, 0x000923cf, - 0x000925cf, 0x000927cf, 0x000929cf, 0x00092bcf, - 0x00092dcf, 0x00092fcf, 0x000931cf, 0x000933cf, - 0x000935cf, 0x000937cf, 0x000939cf, 0x00093bcf, - 0x00093dcf, 0x00093fcf, 0x000941cf, 0x000943cf, - 0x000945cf, 0x000947cf, 0x000949cf, 0x00094bcf, - 0x00094dcf, 0x00094fcf, 0x000951cf, 0x000953cf, - 0x000955cf, 0x000957cf, 0x000959cf, 0x00095bcf, - 0x00095dcf, 0x00095fcf, 0x000961cf, 0x000963cf, - 0x000965cf, 0x000967cf, 0x000969cf, 0x00096bcf, - 0x00096dcf, 0x00096fcf, 0x000971cf, 0x000973cf, - 0x000975cf, 0x000977cf, 0x000979cf, 0x00097bcf, - 0x00097dcf, 0x00097fcf, 0x000981cf, 0x000983cf, - 0x000985cf, 0x000987cf, 0x000989cf, 0x00098bcf, - 0x00098dcf, 0x00098fcf, 0x000991cf, 0x000993cf, - 0x000995cf, 0x000997cf, 0x000999cf, 0x00099bcf, - 0x00099dcf, 0x00099fcf, 0x0009a1cf, 0x0009a3cf, - 0x0009a5cf, 0x0009a7cf, 0x0009a9cf, 0x0009abcf, - 0x0009adcf, 0x0009afcf, 0x0009b1cf, 0x0009b3cf, - 0x0009b5cf, 0x0009b7cf, 0x0009b9cf, 0x0009bbcf, - 0x0009bdcf, 0x0009bfcf, 0x0009c1cf, 0x0009c3cf, - 0x0009c5cf, 0x0009c7cf, 0x0009c9cf, 0x0009cbcf, - 0x0009cdcf, 0x0009cfcf, 0x0009d1cf, 0x0009d3cf, - 0x0009d5cf, 0x0009d7cf, 0x0009d9cf, 0x0009dbcf, - 0x0009ddcf, 0x0009dfcf, 0x0009e1cf, 0x0009e3cf, - 0x0009e5cf, 0x0009e7cf, 0x0009e9cf, 0x0009ebcf, - 0x0009edcf, 0x0009efcf, 0x0009f1cf, 0x0009f3cf, - 0x0009f5cf, 0x0009f7cf, 0x0009f9cf, 0x0009fbcf, - 0x0009fdcf, 0x0009ffcf, 0x000a01cf, 0x000a03cf, - 0x000a05cf, 0x000a07cf, 0x000a09cf, 0x000a0bcf, - 0x000a0dcf, 0x000a0fcf, 0x000a11cf, 0x000a13cf, - 0x000a15cf, 0x000a17cf, 0x000a19cf, 0x000a1bcf, - 0x000a1dcf, 0x000a1fcf, 0x000a21cf, 0x000a23cf, - 0x000a25cf, 0x000a27cf, 0x000a29cf, 0x000a2bcf, - 0x000a2dcf, 0x000a2fcf, 0x000a31cf, 0x000a33cf, - 0x000a35cf, 0x000a37cf, 0x000a39cf, 0x000a3bcf, - 0x000a3dcf, 0x000a3fcf, 0x000a41cf, 0x000a43cf, - 0x000a45cf, 0x000a47cf, 0x000a49cf, 0x000a4bcf, - 0x000a4dcf, 0x000a4fcf, 0x000a51cf, 0x000a53cf, - 0x000a55cf, 0x000a57cf, 0x000a59cf, 0x000a5bcf, - 0x000a5dcf, 0x000a5fcf, 0x000a61cf, 0x000a63cf, - 0x000a65cf, 0x000a67cf, 0x000a69cf, 0x000a6bcf, - 0x000a6dcf, 0x000a6fcf, 0x000a71cf, 0x000a73cf, - 0x000a75cf, 0x000a77cf, 0x000a79cf, 0x000a7bcf, - 0x000a7dcf, 0x000a7fcf, 0x000a81cf, 0x000a83cf, - 0x000a85cf, 0x000a87cf, 0x000a89cf, 0x000a8bcf, - 0x000a8dcf, 0x000a8fcf, 0x000a91cf, 0x000a93cf, - 0x000a95cf, 0x000a97cf, 0x000a99cf, 0x000a9bcf, - 0x000a9dcf, 0x000a9fcf, 0x000aa1cf, 0x000aa3cf, - 0x000aa5cf, 0x000aa7cf, 0x000aa9cf, 0x000aabcf, - 0x000aadcf, 0x000aafcf, 0x000ab1cf, 0x000ab3cf, - 0x000ab5cf, 0x000ab7cf, 0x000ab9cf, 0x000abbcf, - 0x000abdcf, 0x000abfcf, 0x000ac1cf, 0x000ac3cf, - 0x000ac5cf, 0x000ac7cf, 0x000ac9cf, 0x000acbcf, - 0x000acdcf, 0x000acfcf, 0x000ad1cf, 0x000ad3cf, - 0x000ad5cf, 0x000ad7cf, 0x000ad9cf, 0x000adbcf, - 0x000addcf, 0x000adfcf, 0x000ae1cf, 0x000ae3cf, - 0x000ae5cf, 0x000ae7cf, 0x000ae9cf, 0x000aebcf, - 0x000aedcf, 0x000aefcf, 0x000af1cf, 0x000af3cf, - 0x000af5cf, 0x000af7cf, 0x000af9cf, 0x000afbcf, - 0x000afdcf, 0x000affcf, 0x000b01cf, 0x000b03cf, - 0x000b05cf, 0x000b07cf, 0x000b09cf, 0x000b0bcf, - 0x000b0dcf, 0x000b0fcf, 0x000b11cf, 0x000b13cf, - 0x000b15cf, 0x000b17cf, 0x000b19cf, 0x000b1bcf, - 0x000b1dcf, 0x000b1fcf, 0x000b21cf, 0x000b23cf, - 0x000b25cf, 0x000b27cf, 0x000b29cf, 0x000b2bcf, - 0x000b2dcf, 0x000b2fcf, 0x000b31cf, 0x000b33cf, - 0x000b35cf, 0x000b37cf, 0x000b39cf, 0x000b3bcf, - 0x000b3dcf, 0x000b3fcf, 0x000b41cf, 0x000b43cf, - 0x000b45cf, 0x000b47cf, 0x000b49cf, 0x000b4bcf, - 0x000b4dcf, 0x000b4fcf, 0x000b51cf, 0x000b53cf, - 0x000b55cf, 0x000b57cf, 0x000b59cf, 0x000b5bcf, - 0x000b5dcf, 0x000b5fcf, 0x000b61cf, 0x000b63cf, - 0x000b65cf, 0x000b67cf, 0x000b69cf, 0x000b6bcf, - 0x000b6dcf, 0x000b6fcf, 0x000b71cf, 0x000b73cf, - 0x000b75cf, 0x000b77cf, 0x000b79cf, 0x000b7bcf, - 0x000b7dcf, 0x000b7fcf, 0x000b81cf, 0x000b83cf, - 0x000b85cf, 0x000b87cf, 0x000b89cf, 0x000b8bcf, - 0x000b8dcf, 0x000b8fcf, 0x000b91cf, 0x000b93cf, - 0x000b95cf, 0x000b97cf, 0x000b99cf, 0x000b9bcf, - 0x000b9dcf, 0x000b9fcf, 0x000ba1cf, 0x000ba3cf, - 0x000ba5cf, 0x000ba7cf, 0x000ba9cf, 0x000babcf, - 0x000badcf, 0x000bafcf, 0x000bb1cf, 0x000bb3cf, - 0x000bb5cf, 0x000bb7cf, 0x000bb9cf, 0x000bbbcf, - 0x000bbdcf, 0x000bbfcf, 0x000bc1cf, 0x000bc3cf, - 0x000bc5cf, 0x000bc7cf, 0x000bc9cf, 0x000bcbcf, - 0x000bcdcf, 0x000bcfcf, 0x000bd1cf, 0x000bd3cf, - 0x000bd5cf, 0x000bd7cf, 0x000bd9cf, 0x000bdbcf, - 0x000bddcf, 0x000bdfcf, 0x000be1cf, 0x000be3cf, - 0x000be5cf, 0x000be7cf, 0x000be9cf, 0x000bebcf, - 0x000bedcf, 0x000befcf, 0x000bf1cf, 0x000bf3cf, - 0x000bf5cf, 0x000bf7cf, 0x000bf9cf, 0x000bfbcf, - 0x000bfdcf, 0x000bffcf, 0x000c01cf, 0x000c03cf, - 0x000c05cf, 0x000c07cf, 0x000c09cf, 0x000c0bcf, - 0x000c0dcf, 0x000c0fcf, 0x000c11cf, 0x000c13cf, - 0x000c15cf, 0x000c17cf, 0x000c19cf, 0x000c1bcf, - 0x000c1dcf, 0x000c1fcf, 0x000c21cf, 0x000c23cf, - 0x000c25cf, 0x000c27cf, 0x000c29cf, 0x000c2bcf, - 0x000c2dcf, 0x000c2fcf, 0x000c31cf, 0x000c33cf, - 0x000c35cf, 0x000c37cf, 0x000c39cf, 0x000c3bcf, - 0x000c3dcf, 0x000c3fcf, 0x000c41cf, 0x000c43cf, - 0x000c45cf, 0x000c47cf, 0x000c49cf, 0x000c4bcf, - 0x000c4dcf, 0x000c4fcf, 0x000c51cf, 0x000c53cf, - 0x000c55cf, 0x000c57cf, 0x000c59cf, 0x000c5bcf, - 0x000c5dcf, 0x000c5fcf, 0x000c61cf, 0x000c63cf, - 0x000c65cf, 0x000c67cf, 0x000c69cf, 0x000c6bcf, - 0x000c6dcf, 0x000c6fcf, 0x000c71cf, 0x000c73cf, - 0x000c75cf, 0x000c77cf, 0x000c79cf, 0x000c7bcf, - 0x000c7dcf, 0x000c7fcf, 0x000c81cf, 0x000c83cf, - 0x000c85cf, 0x000c87cf, 0x000c89cf, 0x000c8bcf, - 0x000c8dcf, 0x000c8fcf, 0x000c91cf, 0x000c93cf, - 0x000c95cf, 0x000c97cf, 0x000c99cf, 0x000c9bcf, - 0x000c9dcf, 0x000c9fcf, 0x000ca1cf, 0x000ca3cf, - 0x000ca5cf, 0x000ca7cf, 0x000ca9cf, 0x000cabcf, - 0x000cadcf, 0x000cafcf, 0x000cb1cf, 0x000cb3cf, - 0x000cb5cf, 0x000cb7cf, 0x000cb9cf, 0x000cbbcf, - 0x000cbdcf, 0x000cbfcf, 0x000cc1cf, 0x000cc3cf, - 0x000cc5cf, 0x000cc7cf, 0x000cc9cf, 0x000ccbcf, - 0x000ccdcf, 0x000ccfcf, 0x000cd1cf, 0x000cd3cf, - 0x000cd5cf, 0x000cd7cf, 0x000cd9cf, 0x000cdbcf, - 0x000cddcf, 0x000cdfcf, 0x000ce1cf, 0x000ce3cf, - 0x000ce5cf, 0x000ce7cf, 0x000ce9cf, 0x000cebcf, - 0x000cedcf, 0x000cefcf, 0x000cf1cf, 0x000cf3cf, - 0x000cf5cf, 0x000cf7cf, 0x000cf9cf, 0x000cfbcf, - 0x000cfdcf, 0x000cffcf, 0x000d01cf, 0x000d03cf, - 0x000d05cf, 0x000d07cf, 0x000d09cf, 0x000d0bcf, - 0x000d0dcf, 0x000d0fcf, 0x000d11cf, 0x000d13cf, - 0x000d15cf, 0x000d17cf, 0x000d19cf, 0x000d1bcf, - 0x000d1dcf, 0x000d1fcf, 0x000d21cf, 0x000d23cf, - 0x000d25cf, 0x000d27cf, 0x000d29cf, 0x000d2bcf, - 0x000d2dcf, 0x000d2fcf, 0x000d31cf, 0x000d33cf, - 0x000d35cf, 0x000d37cf, 0x000d39cf, 0x000d3bcf, - 0x000d3dcf, 0x000d3fcf, 0x000d41cf, 0x000d43cf, - 0x000d45cf, 0x000d47cf, 0x000d49cf, 0x000d4bcf, - 0x000d4dcf, 0x000d4fcf, 0x000d51cf, 0x000d53cf, - 0x000d55cf, 0x000d57cf, 0x000d59cf, 0x000d5bcf, - 0x000d5dcf, 0x000d5fcf, 0x000d61cf, 0x000d63cf, - 0x000d65cf, 0x000d67cf, 0x000d69cf, 0x000d6bcf, - 0x000d6dcf, 0x000d6fcf, 0x000d71cf, 0x000d73cf, - 0x000d75cf, 0x000d77cf, 0x000d79cf, 0x000d7bcf, - 0x000d7dcf, 0x000d7fcf, 0x000d81cf, 0x000d83cf, - 0x000d85cf, 0x000d87cf, 0x000d89cf, 0x000d8bcf, - 0x000d8dcf, 0x000d8fcf, 0x000d91cf, 0x000d93cf, - 0x000d95cf, 0x000d97cf, 0x000d99cf, 0x000d9bcf, - 0x000d9dcf, 0x000d9fcf, 0x000da1cf, 0x000da3cf, - 0x000da5cf, 0x000da7cf, 0x000da9cf, 0x000dabcf, - 0x000dadcf, 0x000dafcf, 0x000db1cf, 0x000db3cf, - 0x000db5cf, 0x000db7cf, 0x000db9cf, 0x000dbbcf, - 0x000dbdcf, 0x000dbfcf, 0x000dc1cf, 0x000dc3cf, - 0x000dc5cf, 0x000dc7cf, 0x000dc9cf, 0x000dcbcf, - 0x000dcdcf, 0x000dcfcf, 0x000dd1cf, 0x000dd3cf, - 0x000dd5cf, 0x000dd7cf, 0x000dd9cf, 0x000ddbcf, - 0x000dddcf, 0x000ddfcf, 0x000de1cf, 0x000de3cf, - 0x000de5cf, 0x000de7cf, 0x000de9cf, 0x000debcf, - 0x000dedcf, 0x000defcf, 0x000df1cf, 0x000df3cf, - 0x000df5cf, 0x000df7cf, 0x000df9cf, 0x000dfbcf, - 0x000dfdcf, 0x000dffcf, 0x000e01cf, 0x000e03cf, - 0x000e05cf, 0x000e07cf, 0x000e09cf, 0x000e0bcf, - 0x000e0dcf, 0x000e0fcf, 0x000e11cf, 0x000e13cf, - 0x000e15cf, 0x000e17cf, 0x000e19cf, 0x000e1bcf, - 0x000e1dcf, 0x000e1fcf, 0x000e21cf, 0x000e23cf, - 0x000e25cf, 0x000e27cf, 0x000e29cf, 0x000e2bcf, - 0x000e2dcf, 0x000e2fcf, 0x000e31cf, 0x000e33cf, - 0x000e35cf, 0x000e37cf, 0x000e39cf, 0x000e3bcf, - 0x000e3dcf, 0x000e3fcf, 0x000e41cf, 0x000e43cf, - 0x000e45cf, 0x000e47cf, 0x000e49cf, 0x000e4bcf, - 0x000e4dcf, 0x000e4fcf, 0x000e51cf, 0x000e53cf, - 0x000e55cf, 0x000e57cf, 0x000e59cf, 0x000e5bcf, - 0x000e5dcf, 0x000e5fcf, 0x000e61cf, 0x000e63cf, - 0x000e65cf, 0x000e67cf, 0x000e69cf, 0x000e6bcf, - 0x000e6dcf, 0x000e6fcf, 0x000e71cf, 0x000e73cf, - 0x000e75cf, 0x000e77cf, 0x000e79cf, 0x000e7bcf, - 0x000e7dcf, 0x000e7fcf, 0x000e81cf, 0x000e83cf, - 0x000e85cf, 0x000e87cf, 0x000e89cf, 0x000e8bcf, - 0x000e8dcf, 0x000e8fcf, 0x000e91cf, 0x000e93cf, - 0x000e95cf, 0x000e97cf, 0x000e99cf, 0x000e9bcf, - 0x000e9dcf, 0x000e9fcf, 0x000ea1cf, 0x000ea3cf, - 0x000ea5cf, 0x000ea7cf, 0x000ea9cf, 0x000eabcf, - 0x000eadcf, 0x000eafcf, 0x000eb1cf, 0x000eb3cf, - 0x000eb5cf, 0x000eb7cf, 0x000eb9cf, 0x000ebbcf, - 0x000ebdcf, 0x000ebfcf, 0x000ec1cf, 0x000ec3cf, - 0x000ec5cf, 0x000ec7cf, 0x000ec9cf, 0x000ecbcf, - 0x000ecdcf, 0x000ecfcf, 0x000ed1cf, 0x000ed3cf, - 0x000ed5cf, 0x000ed7cf, 0x000ed9cf, 0x000edbcf, - 0x000eddcf, 0x000edfcf, 0x000ee1cf, 0x000ee3cf, - 0x000ee5cf, 0x000ee7cf, 0x000ee9cf, 0x000eebcf, - 0x000eedcf, 0x000eefcf, 0x000ef1cf, 0x000ef3cf, - 0x000ef5cf, 0x000ef7cf, 0x000ef9cf, 0x000efbcf, - 0x000efdcf, 0x000effcf, 0x000f01cf, 0x000f03cf, - 0x000f05cf, 0x000f07cf, 0x000f09cf, 0x000f0bcf, - 0x000f0dcf, 0x000f0fcf, 0x000f11cf, 0x000f13cf, - 0x000f15cf, 0x000f17cf, 0x000f19cf, 0x000f1bcf, - 0x000f1dcf, 0x000f1fcf, 0x000f21cf, 0x000f23cf, - 0x000f25cf, 0x000f27cf, 0x000f29cf, 0x000f2bcf, - 0x000f2dcf, 0x000f2fcf, 0x000f31cf, 0x000f33cf, - 0x000f35cf, 0x000f37cf, 0x000f39cf, 0x000f3bcf, - 0x000f3dcf, 0x000f3fcf, 0x000f41cf, 0x000f43cf, - 0x000f45cf, 0x000f47cf, 0x000f49cf, 0x000f4bcf, - 0x000f4dcf, 0x000f4fcf, 0x000f51cf, 0x000f53cf, - 0x000f55cf, 0x000f57cf, 0x000f59cf, 0x000f5bcf, - 0x000f5dcf, 0x000f5fcf, 0x000f61cf, 0x000f63cf, - 0x000f65cf, 0x000f67cf, 0x000f69cf, 0x000f6bcf, - 0x000f6dcf, 0x000f6fcf, 0x000f71cf, 0x000f73cf, - 0x000f75cf, 0x000f77cf, 0x000f79cf, 0x000f7bcf, - 0x000f7dcf, 0x000f7fcf, 0x000f81cf, 0x000f83cf, - 0x000f85cf, 0x000f87cf, 0x000f89cf, 0x000f8bcf, - 0x000f8dcf, 0x000f8fcf, 0x000f91cf, 0x000f93cf, - 0x000f95cf, 0x000f97cf, 0x000f99cf, 0x000f9bcf, - 0x000f9dcf, 0x000f9fcf, 0x000fa1cf, 0x000fa3cf, - 0x000fa5cf, 0x000fa7cf, 0x000fa9cf, 0x000fabcf, - 0x000fadcf, 0x000fafcf, 0x000fb1cf, 0x000fb3cf, - 0x000fb5cf, 0x000fb7cf, 0x000fb9cf, 0x000fbbcf, - 0x000fbdcf, 0x000fbfcf, 0x000fc1cf, 0x000fc3cf, - 0x000fc5cf, 0x000fc7cf, 0x000fc9cf, 0x000fcbcf, - 0x000fcdcf, 0x000fcfcf, 0x000fd1cf, 0x000fd3cf, - 0x000fd5cf, 0x000fd7cf, 0x000fd9cf, 0x000fdbcf, - 0x000fddcf, 0x000fdfcf, 0x000fe1cf, 0x000fe3cf, - 0x000fe5cf, 0x000fe7cf, 0x000fe9cf, 0x000febcf, - 0x000fedcf, 0x000fefcf, 0x000ff1cf, 0x000ff3cf, - 0x000ff5cf, 0x000ff7cf, 0x000ff9cf, 0x000ffbcf, - 0x000ffdcf, 0x000fffcf, 0x00000170, 0x00000570, - 0x00000970, 0x00000d70, 0x00001170, 0x00001570, - 0x00001970, 0x00001d70, 0x00002170, 0x00002570, - 0x00002970, 0x00002d70, 0x00003170, 0x00003570, - 0x00003970, 0x00003d70, 0x00004170, 0x00004570, - 0x00004970, 0x00004d70, 0x00005170, 0x00005570, - 0x00005970, 0x00005d70, 0x00006170, 0x00006570, - 0x00006970, 0x00006d70, 0x00007170, 0x00007570, - 0x00007970, 0x00007d70, 0x00008170, 0x00008570, - 0x00008970, 0x00008d70, 0x00009170, 0x00009570, - 0x00009970, 0x00009d70, 0x0000a170, 0x0000a570, - 0x0000a970, 0x0000ad70, 0x0000b170, 0x0000b570, - 0x0000b970, 0x0000bd70, 0x0000c170, 0x0000c570, - 0x0000c970, 0x0000cd70, 0x0000d170, 0x0000d570, - 0x0000d970, 0x0000dd70, 0x0000e170, 0x0000e570, - 0x0000e970, 0x0000ed70, 0x0000f170, 0x0000f570, - 0x0000f970, 0x0000fd70, 0x00010170, 0x00010570, - 0x00010970, 0x00010d70, 0x00011170, 0x00011570, - 0x00011970, 0x00011d70, 0x00012170, 0x00012570, - 0x00012970, 0x00012d70, 0x00013170, 0x00013570, - 0x00013970, 0x00013d70, 0x00014170, 0x00014570, - 0x00014970, 0x00014d70, 0x00015170, 0x00015570, - 0x00015970, 0x00015d70, 0x00016170, 0x00016570, - 0x00016970, 0x00016d70, 0x00017170, 0x00017570, - 0x00017970, 0x00017d70, 0x00018170, 0x00018570, - 0x00018970, 0x00018d70, 0x00019170, 0x00019570, - 0x00019970, 0x00019d70, 0x0001a170, 0x0001a570, - 0x0001a970, 0x0001ad70, 0x0001b170, 0x0001b570, - 0x0001b970, 0x0001bd70, 0x0001c170, 0x0001c570, - 0x0001c970, 0x0001cd70, 0x0001d170, 0x0001d570, - 0x0001d970, 0x0001dd70, 0x0001e170, 0x0001e570, - 0x0001e970, 0x0001ed70, 0x0001f170, 0x0001f570, - 0x0001f970, 0x0001fd70, 0x00020170, 0x00020570, - 0x00020970, 0x00020d70, 0x00021170, 0x00021570, - 0x00021970, 0x00021d70, 0x00022170, 0x00022570, - 0x00022970, 0x00022d70, 0x00023170, 0x00023570, - 0x00023970, 0x00023d70, 0x00024170, 0x00024570, - 0x00024970, 0x00024d70, 0x00025170, 0x00025570, - 0x00025970, 0x00025d70, 0x00026170, 0x00026570, - 0x00026970, 0x00026d70, 0x00027170, 0x00027570, - 0x00027970, 0x00027d70, 0x00028170, 0x00028570, - 0x00028970, 0x00028d70, 0x00029170, 0x00029570, - 0x00029970, 0x00029d70, 0x0002a170, 0x0002a570, - 0x0002a970, 0x0002ad70, 0x0002b170, 0x0002b570, - 0x0002b970, 0x0002bd70, 0x0002c170, 0x0002c570, - 0x0002c970, 0x0002cd70, 0x0002d170, 0x0002d570, - 0x0002d970, 0x0002dd70, 0x0002e170, 0x0002e570, - 0x0002e970, 0x0002ed70, 0x0002f170, 0x0002f570, - 0x0002f970, 0x0002fd70, 0x00030170, 0x00030570, - 0x00030970, 0x00030d70, 0x00031170, 0x00031570, - 0x00031970, 0x00031d70, 0x00032170, 0x00032570, - 0x00032970, 0x00032d70, 0x00033170, 0x00033570, - 0x00033970, 0x00033d70, 0x00034170, 0x00034570, - 0x00034970, 0x00034d70, 0x00035170, 0x00035570, - 0x00035970, 0x00035d70, 0x00036170, 0x00036570, - 0x00036970, 0x00036d70, 0x00037170, 0x00037570, - 0x00037970, 0x00037d70, 0x00038170, 0x00038570, - 0x00038970, 0x00038d70, 0x00039170, 0x00039570, - 0x00039970, 0x00039d70, 0x0003a170, 0x0003a570, - 0x0003a970, 0x0003ad70, 0x0003b170, 0x0003b570, - 0x0003b970, 0x0003bd70, 0x0003c170, 0x0003c570, - 0x0003c970, 0x0003cd70, 0x0003d170, 0x0003d570, - 0x0003d970, 0x0003dd70, 0x0003e170, 0x0003e570, - 0x0003e970, 0x0003ed70, 0x0003f170, 0x0003f570, - 0x0003f970, 0x0003fd70, 0x00040170, 0x00040570, - 0x00040970, 0x00040d70, 0x00041170, 0x00041570, - 0x00041970, 0x00041d70, 0x00042170, 0x00042570, - 0x00042970, 0x00042d70, 0x00043170, 0x00043570, - 0x00043970, 0x00043d70, 0x00044170, 0x00044570, - 0x00044970, 0x00044d70, 0x00045170, 0x00045570, - 0x00045970, 0x00045d70, 0x00046170, 0x00046570, - 0x00046970, 0x00046d70, 0x00047170, 0x00047570, - 0x00047970, 0x00047d70, 0x00048170, 0x00048570, - 0x00048970, 0x00048d70, 0x00049170, 0x00049570, - 0x00049970, 0x00049d70, 0x0004a170, 0x0004a570, - 0x0004a970, 0x0004ad70, 0x0004b170, 0x0004b570, - 0x0004b970, 0x0004bd70, 0x0004c170, 0x0004c570, - 0x0004c970, 0x0004cd70, 0x0004d170, 0x0004d570, - 0x0004d970, 0x0004dd70, 0x0004e170, 0x0004e570, - 0x0004e970, 0x0004ed70, 0x0004f170, 0x0004f570, - 0x0004f970, 0x0004fd70, 0x00050170, 0x00050570, - 0x00050970, 0x00050d70, 0x00051170, 0x00051570, - 0x00051970, 0x00051d70, 0x00052170, 0x00052570, - 0x00052970, 0x00052d70, 0x00053170, 0x00053570, - 0x00053970, 0x00053d70, 0x00054170, 0x00054570, - 0x00054970, 0x00054d70, 0x00055170, 0x00055570, - 0x00055970, 0x00055d70, 0x00056170, 0x00056570, - 0x00056970, 0x00056d70, 0x00057170, 0x00057570, - 0x00057970, 0x00057d70, 0x00058170, 0x00058570, - 0x00058970, 0x00058d70, 0x00059170, 0x00059570, - 0x00059970, 0x00059d70, 0x0005a170, 0x0005a570, - 0x0005a970, 0x0005ad70, 0x0005b170, 0x0005b570, - 0x0005b970, 0x0005bd70, 0x0005c170, 0x0005c570, - 0x0005c970, 0x0005cd70, 0x0005d170, 0x0005d570, - 0x0005d970, 0x0005dd70, 0x0005e170, 0x0005e570, - 0x0005e970, 0x0005ed70, 0x0005f170, 0x0005f570, - 0x0005f970, 0x0005fd70, 0x00060170, 0x00060570, - 0x00060970, 0x00060d70, 0x00061170, 0x00061570, - 0x00061970, 0x00061d70, 0x00062170, 0x00062570, - 0x00062970, 0x00062d70, 0x00063170, 0x00063570, - 0x00063970, 0x00063d70, 0x00064170, 0x00064570, - 0x00064970, 0x00064d70, 0x00065170, 0x00065570, - 0x00065970, 0x00065d70, 0x00066170, 0x00066570, - 0x00066970, 0x00066d70, 0x00067170, 0x00067570, - 0x00067970, 0x00067d70, 0x00068170, 0x00068570, - 0x00068970, 0x00068d70, 0x00069170, 0x00069570, - 0x00069970, 0x00069d70, 0x0006a170, 0x0006a570, - 0x0006a970, 0x0006ad70, 0x0006b170, 0x0006b570, - 0x0006b970, 0x0006bd70, 0x0006c170, 0x0006c570, - 0x0006c970, 0x0006cd70, 0x0006d170, 0x0006d570, - 0x0006d970, 0x0006dd70, 0x0006e170, 0x0006e570, - 0x0006e970, 0x0006ed70, 0x0006f170, 0x0006f570, - 0x0006f970, 0x0006fd70, 0x00070170, 0x00070570, - 0x00070970, 0x00070d70, 0x00071170, 0x00071570, - 0x00071970, 0x00071d70, 0x00072170, 0x00072570, - 0x00072970, 0x00072d70, 0x00073170, 0x00073570, - 0x00073970, 0x00073d70, 0x00074170, 0x00074570, - 0x00074970, 0x00074d70, 0x00075170, 0x00075570, - 0x00075970, 0x00075d70, 0x00076170, 0x00076570, - 0x00076970, 0x00076d70, 0x00077170, 0x00077570, - 0x00077970, 0x00077d70, 0x00078170, 0x00078570, - 0x00078970, 0x00078d70, 0x00079170, 0x00079570, - 0x00079970, 0x00079d70, 0x0007a170, 0x0007a570, - 0x0007a970, 0x0007ad70, 0x0007b170, 0x0007b570, - 0x0007b970, 0x0007bd70, 0x0007c170, 0x0007c570, - 0x0007c970, 0x0007cd70, 0x0007d170, 0x0007d570, - 0x0007d970, 0x0007dd70, 0x0007e170, 0x0007e570, - 0x0007e970, 0x0007ed70, 0x0007f170, 0x0007f570, - 0x0007f970, 0x0007fd70, 0x00080170, 0x00080570, - 0x00080970, 0x00080d70, 0x00081170, 0x00081570, - 0x00081970, 0x00081d70, 0x00082170, 0x00082570, - 0x00082970, 0x00082d70, 0x00083170, 0x00083570, - 0x00083970, 0x00083d70, 0x00084170, 0x00084570, - 0x00084970, 0x00084d70, 0x00085170, 0x00085570, - 0x00085970, 0x00085d70, 0x00086170, 0x00086570, - 0x00086970, 0x00086d70, 0x00087170, 0x00087570, - 0x00087970, 0x00087d70, 0x00088170, 0x00088570, - 0x00088970, 0x00088d70, 0x00089170, 0x00089570, - 0x00089970, 0x00089d70, 0x0008a170, 0x0008a570, - 0x0008a970, 0x0008ad70, 0x0008b170, 0x0008b570, - 0x0008b970, 0x0008bd70, 0x0008c170, 0x0008c570, - 0x0008c970, 0x0008cd70, 0x0008d170, 0x0008d570, - 0x0008d970, 0x0008dd70, 0x0008e170, 0x0008e570, - 0x0008e970, 0x0008ed70, 0x0008f170, 0x0008f570, - 0x0008f970, 0x0008fd70, 0x00090170, 0x00090570, - 0x00090970, 0x00090d70, 0x00091170, 0x00091570, - 0x00091970, 0x00091d70, 0x00092170, 0x00092570, - 0x00092970, 0x00092d70, 0x00093170, 0x00093570, - 0x00093970, 0x00093d70, 0x00094170, 0x00094570, - 0x00094970, 0x00094d70, 0x00095170, 0x00095570, - 0x00095970, 0x00095d70, 0x00096170, 0x00096570, - 0x00096970, 0x00096d70, 0x00097170, 0x00097570, - 0x00097970, 0x00097d70, 0x00098170, 0x00098570, - 0x00098970, 0x00098d70, 0x00099170, 0x00099570, - 0x00099970, 0x00099d70, 0x0009a170, 0x0009a570, - 0x0009a970, 0x0009ad70, 0x0009b170, 0x0009b570, - 0x0009b970, 0x0009bd70, 0x0009c170, 0x0009c570, - 0x0009c970, 0x0009cd70, 0x0009d170, 0x0009d570, - 0x0009d970, 0x0009dd70, 0x0009e170, 0x0009e570, - 0x0009e970, 0x0009ed70, 0x0009f170, 0x0009f570, - 0x0009f970, 0x0009fd70, 0x000a0170, 0x000a0570, - 0x000a0970, 0x000a0d70, 0x000a1170, 0x000a1570, - 0x000a1970, 0x000a1d70, 0x000a2170, 0x000a2570, - 0x000a2970, 0x000a2d70, 0x000a3170, 0x000a3570, - 0x000a3970, 0x000a3d70, 0x000a4170, 0x000a4570, - 0x000a4970, 0x000a4d70, 0x000a5170, 0x000a5570, - 0x000a5970, 0x000a5d70, 0x000a6170, 0x000a6570, - 0x000a6970, 0x000a6d70, 0x000a7170, 0x000a7570, - 0x000a7970, 0x000a7d70, 0x000a8170, 0x000a8570, - 0x000a8970, 0x000a8d70, 0x000a9170, 0x000a9570, - 0x000a9970, 0x000a9d70, 0x000aa170, 0x000aa570, - 0x000aa970, 0x000aad70, 0x000ab170, 0x000ab570, - 0x000ab970, 0x000abd70, 0x000ac170, 0x000ac570, - 0x000ac970, 0x000acd70, 0x000ad170, 0x000ad570, - 0x000ad970, 0x000add70, 0x000ae170, 0x000ae570, - 0x000ae970, 0x000aed70, 0x000af170, 0x000af570, - 0x000af970, 0x000afd70, 0x000b0170, 0x000b0570, - 0x000b0970, 0x000b0d70, 0x000b1170, 0x000b1570, - 0x000b1970, 0x000b1d70, 0x000b2170, 0x000b2570, - 0x000b2970, 0x000b2d70, 0x000b3170, 0x000b3570, - 0x000b3970, 0x000b3d70, 0x000b4170, 0x000b4570, - 0x000b4970, 0x000b4d70, 0x000b5170, 0x000b5570, - 0x000b5970, 0x000b5d70, 0x000b6170, 0x000b6570, - 0x000b6970, 0x000b6d70, 0x000b7170, 0x000b7570, - 0x000b7970, 0x000b7d70, 0x000b8170, 0x000b8570, - 0x000b8970, 0x000b8d70, 0x000b9170, 0x000b9570, - 0x000b9970, 0x000b9d70, 0x000ba170, 0x000ba570, - 0x000ba970, 0x000bad70, 0x000bb170, 0x000bb570, - 0x000bb970, 0x000bbd70, 0x000bc170, 0x000bc570, - 0x000bc970, 0x000bcd70, 0x000bd170, 0x000bd570, - 0x000bd970, 0x000bdd70, 0x000be170, 0x000be570, - 0x000be970, 0x000bed70, 0x000bf170, 0x000bf570, - 0x000bf970, 0x000bfd70, 0x000c0170, 0x000c0570, - 0x000c0970, 0x000c0d70, 0x000c1170, 0x000c1570, - 0x000c1970, 0x000c1d70, 0x000c2170, 0x000c2570, - 0x000c2970, 0x000c2d70, 0x000c3170, 0x000c3570, - 0x000c3970, 0x000c3d70, 0x000c4170, 0x000c4570, - 0x000c4970, 0x000c4d70, 0x000c5170, 0x000c5570, - 0x000c5970, 0x000c5d70, 0x000c6170, 0x000c6570, - 0x000c6970, 0x000c6d70, 0x000c7170, 0x000c7570, - 0x000c7970, 0x000c7d70, 0x000c8170, 0x000c8570, - 0x000c8970, 0x000c8d70, 0x000c9170, 0x000c9570, - 0x000c9970, 0x000c9d70, 0x000ca170, 0x000ca570, - 0x000ca970, 0x000cad70, 0x000cb170, 0x000cb570, - 0x000cb970, 0x000cbd70, 0x000cc170, 0x000cc570, - 0x000cc970, 0x000ccd70, 0x000cd170, 0x000cd570, - 0x000cd970, 0x000cdd70, 0x000ce170, 0x000ce570, - 0x000ce970, 0x000ced70, 0x000cf170, 0x000cf570, - 0x000cf970, 0x000cfd70, 0x000d0170, 0x000d0570, - 0x000d0970, 0x000d0d70, 0x000d1170, 0x000d1570, - 0x000d1970, 0x000d1d70, 0x000d2170, 0x000d2570, - 0x000d2970, 0x000d2d70, 0x000d3170, 0x000d3570, - 0x000d3970, 0x000d3d70, 0x000d4170, 0x000d4570, - 0x000d4970, 0x000d4d70, 0x000d5170, 0x000d5570, - 0x000d5970, 0x000d5d70, 0x000d6170, 0x000d6570, - 0x000d6970, 0x000d6d70, 0x000d7170, 0x000d7570, - 0x000d7970, 0x000d7d70, 0x000d8170, 0x000d8570, - 0x000d8970, 0x000d8d70, 0x000d9170, 0x000d9570, - 0x000d9970, 0x000d9d70, 0x000da170, 0x000da570, - 0x000da970, 0x000dad70, 0x000db170, 0x000db570, - 0x000db970, 0x000dbd70, 0x000dc170, 0x000dc570, - 0x000dc970, 0x000dcd70, 0x000dd170, 0x000dd570, - 0x000dd970, 0x000ddd70, 0x000de170, 0x000de570, - 0x000de970, 0x000ded70, 0x000df170, 0x000df570, - 0x000df970, 0x000dfd70, 0x000e0170, 0x000e0570, - 0x000e0970, 0x000e0d70, 0x000e1170, 0x000e1570, - 0x000e1970, 0x000e1d70, 0x000e2170, 0x000e2570, - 0x000e2970, 0x000e2d70, 0x000e3170, 0x000e3570, - 0x000e3970, 0x000e3d70, 0x000e4170, 0x000e4570, - 0x000e4970, 0x000e4d70, 0x000e5170, 0x000e5570, - 0x000e5970, 0x000e5d70, 0x000e6170, 0x000e6570, - 0x000e6970, 0x000e6d70, 0x000e7170, 0x000e7570, - 0x000e7970, 0x000e7d70, 0x000e8170, 0x000e8570, - 0x000e8970, 0x000e8d70, 0x000e9170, 0x000e9570, - 0x000e9970, 0x000e9d70, 0x000ea170, 0x000ea570, - 0x000ea970, 0x000ead70, 0x000eb170, 0x000eb570, - 0x000eb970, 0x000ebd70, 0x000ec170, 0x000ec570, - 0x000ec970, 0x000ecd70, 0x000ed170, 0x000ed570, - 0x000ed970, 0x000edd70, 0x000ee170, 0x000ee570, - 0x000ee970, 0x000eed70, 0x000ef170, 0x000ef570, - 0x000ef970, 0x000efd70, 0x000f0170, 0x000f0570, - 0x000f0970, 0x000f0d70, 0x000f1170, 0x000f1570, - 0x000f1970, 0x000f1d70, 0x000f2170, 0x000f2570, - 0x000f2970, 0x000f2d70, 0x000f3170, 0x000f3570, - 0x000f3970, 0x000f3d70, 0x000f4170, 0x000f4570, - 0x000f4970, 0x000f4d70, 0x000f5170, 0x000f5570, - 0x000f5970, 0x000f5d70, 0x000f6170, 0x000f6570, - 0x000f6970, 0x000f6d70, 0x000f7170, 0x000f7570, - 0x000f7970, 0x000f7d70, 0x000f8170, 0x000f8570, - 0x000f8970, 0x000f8d70, 0x000f9170, 0x000f9570, - 0x000f9970, 0x000f9d70, 0x000fa170, 0x000fa570, - 0x000fa970, 0x000fad70, 0x000fb170, 0x000fb570, - 0x000fb970, 0x000fbd70, 0x000fc170, 0x000fc570, - 0x000fc970, 0x000fcd70, 0x000fd170, 0x000fd570, - 0x000fd970, 0x000fdd70, 0x000fe170, 0x000fe570, - 0x000fe970, 0x000fed70, 0x000ff170, 0x000ff570, - 0x000ff970, 0x000ffd70, 0x00100170, 0x00100570, - 0x00100970, 0x00100d70, 0x00101170, 0x00101570, - 0x00101970, 0x00101d70, 0x00102170, 0x00102570, - 0x00102970, 0x00102d70, 0x00103170, 0x00103570, - 0x00103970, 0x00103d70, 0x00104170, 0x00104570, - 0x00104970, 0x00104d70, 0x00105170, 0x00105570, - 0x00105970, 0x00105d70, 0x00106170, 0x00106570, - 0x00106970, 0x00106d70, 0x00107170, 0x00107570, - 0x00107970, 0x00107d70, 0x00108170, 0x00108570, - 0x00108970, 0x00108d70, 0x00109170, 0x00109570, - 0x00109970, 0x00109d70, 0x0010a170, 0x0010a570, - 0x0010a970, 0x0010ad70, 0x0010b170, 0x0010b570, - 0x0010b970, 0x0010bd70, 0x0010c170, 0x0010c570, - 0x0010c970, 0x0010cd70, 0x0010d170, 0x0010d570, - 0x0010d970, 0x0010dd70, 0x0010e170, 0x0010e570, - 0x0010e970, 0x0010ed70, 0x0010f170, 0x0010f570, - 0x0010f970, 0x0010fd70, 0x00110170, 0x00110570, - 0x00110970, 0x00110d70, 0x00111170, 0x00111570, - 0x00111970, 0x00111d70, 0x00112170, 0x00112570, - 0x00112970, 0x00112d70, 0x00113170, 0x00113570, - 0x00113970, 0x00113d70, 0x00114170, 0x00114570, - 0x00114970, 0x00114d70, 0x00115170, 0x00115570, - 0x00115970, 0x00115d70, 0x00116170, 0x00116570, - 0x00116970, 0x00116d70, 0x00117170, 0x00117570, - 0x00117970, 0x00117d70, 0x00118170, 0x00118570, - 0x00118970, 0x00118d70, 0x00119170, 0x00119570, - 0x00119970, 0x00119d70, 0x0011a170, 0x0011a570, - 0x0011a970, 0x0011ad70, 0x0011b170, 0x0011b570, - 0x0011b970, 0x0011bd70, 0x0011c170, 0x0011c570, - 0x0011c970, 0x0011cd70, 0x0011d170, 0x0011d570, - 0x0011d970, 0x0011dd70, 0x0011e170, 0x0011e570, - 0x0011e970, 0x0011ed70, 0x0011f170, 0x0011f570, - 0x0011f970, 0x0011fd70, 0x00120170, 0x00120570, - 0x00120970, 0x00120d70, 0x00121170, 0x00121570, - 0x00121970, 0x00121d70, 0x00122170, 0x00122570, - 0x00122970, 0x00122d70, 0x00123170, 0x00123570, - 0x00123970, 0x00123d70, 0x00124170, 0x00124570, - 0x00124970, 0x00124d70, 0x00125170, 0x00125570, - 0x00125970, 0x00125d70, 0x00126170, 0x00126570, - 0x00126970, 0x00126d70, 0x00127170, 0x00127570, - 0x00127970, 0x00127d70, 0x00128170, 0x00128570, - 0x00128970, 0x00128d70, 0x00129170, 0x00129570, - 0x00129970, 0x00129d70, 0x0012a170, 0x0012a570, - 0x0012a970, 0x0012ad70, 0x0012b170, 0x0012b570, - 0x0012b970, 0x0012bd70, 0x0012c170, 0x0012c570, - 0x0012c970, 0x0012cd70, 0x0012d170, 0x0012d570, - 0x0012d970, 0x0012dd70, 0x0012e170, 0x0012e570, - 0x0012e970, 0x0012ed70, 0x0012f170, 0x0012f570, - 0x0012f970, 0x0012fd70, 0x00130170, 0x00130570, - 0x00130970, 0x00130d70, 0x00131170, 0x00131570, - 0x00131970, 0x00131d70, 0x00132170, 0x00132570, - 0x00132970, 0x00132d70, 0x00133170, 0x00133570, - 0x00133970, 0x00133d70, 0x00134170, 0x00134570, - 0x00134970, 0x00134d70, 0x00135170, 0x00135570, - 0x00135970, 0x00135d70, 0x00136170, 0x00136570, - 0x00136970, 0x00136d70, 0x00137170, 0x00137570, - 0x00137970, 0x00137d70, 0x00138170, 0x00138570, - 0x00138970, 0x00138d70, 0x00139170, 0x00139570, - 0x00139970, 0x00139d70, 0x0013a170, 0x0013a570, - 0x0013a970, 0x0013ad70, 0x0013b170, 0x0013b570, - 0x0013b970, 0x0013bd70, 0x0013c170, 0x0013c570, - 0x0013c970, 0x0013cd70, 0x0013d170, 0x0013d570, - 0x0013d970, 0x0013dd70, 0x0013e170, 0x0013e570, - 0x0013e970, 0x0013ed70, 0x0013f170, 0x0013f570, - 0x0013f970, 0x0013fd70, 0x00140170, 0x00140570, - 0x00140970, 0x00140d70, 0x00141170, 0x00141570, - 0x00141970, 0x00141d70, 0x00142170, 0x00142570, - 0x00142970, 0x00142d70, 0x00143170, 0x00143570, - 0x00143970, 0x00143d70, 0x00144170, 0x00144570, - 0x00144970, 0x00144d70, 0x00145170, 0x00145570, - 0x00145970, 0x00145d70, 0x00146170, 0x00146570, - 0x00146970, 0x00146d70, 0x00147170, 0x00147570, - 0x00147970, 0x00147d70, 0x00148170, 0x00148570, - 0x00148970, 0x00148d70, 0x00149170, 0x00149570, - 0x00149970, 0x00149d70, 0x0014a170, 0x0014a570, - 0x0014a970, 0x0014ad70, 0x0014b170, 0x0014b570, - 0x0014b970, 0x0014bd70, 0x0014c170, 0x0014c570, - 0x0014c970, 0x0014cd70, 0x0014d170, 0x0014d570, - 0x0014d970, 0x0014dd70, 0x0014e170, 0x0014e570, - 0x0014e970, 0x0014ed70, 0x0014f170, 0x0014f570, - 0x0014f970, 0x0014fd70, 0x00150170, 0x00150570, - 0x00150970, 0x00150d70, 0x00151170, 0x00151570, - 0x00151970, 0x00151d70, 0x00152170, 0x00152570, - 0x00152970, 0x00152d70, 0x00153170, 0x00153570, - 0x00153970, 0x00153d70, 0x00154170, 0x00154570, - 0x00154970, 0x00154d70, 0x00155170, 0x00155570, - 0x00155970, 0x00155d70, 0x00156170, 0x00156570, - 0x00156970, 0x00156d70, 0x00157170, 0x00157570, - 0x00157970, 0x00157d70, 0x00158170, 0x00158570, - 0x00158970, 0x00158d70, 0x00159170, 0x00159570, - 0x00159970, 0x00159d70, 0x0015a170, 0x0015a570, - 0x0015a970, 0x0015ad70, 0x0015b170, 0x0015b570, - 0x0015b970, 0x0015bd70, 0x0015c170, 0x0015c570, - 0x0015c970, 0x0015cd70, 0x0015d170, 0x0015d570, - 0x0015d970, 0x0015dd70, 0x0015e170, 0x0015e570, - 0x0015e970, 0x0015ed70, 0x0015f170, 0x0015f570, - 0x0015f970, 0x0015fd70, 0x00160170, 0x00160570, - 0x00160970, 0x00160d70, 0x00161170, 0x00161570, - 0x00161970, 0x00161d70, 0x00162170, 0x00162570, - 0x00162970, 0x00162d70, 0x00163170, 0x00163570, - 0x00163970, 0x00163d70, 0x00164170, 0x00164570, - 0x00164970, 0x00164d70, 0x00165170, 0x00165570, - 0x00165970, 0x00165d70, 0x00166170, 0x00166570, - 0x00166970, 0x00166d70, 0x00167170, 0x00167570, - 0x00167970, 0x00167d70, 0x00168170, 0x00168570, - 0x00168970, 0x00168d70, 0x00169170, 0x00169570, - 0x00169970, 0x00169d70, 0x0016a170, 0x0016a570, - 0x0016a970, 0x0016ad70, 0x0016b170, 0x0016b570, - 0x0016b970, 0x0016bd70, 0x0016c170, 0x0016c570, - 0x0016c970, 0x0016cd70, 0x0016d170, 0x0016d570, - 0x0016d970, 0x0016dd70, 0x0016e170, 0x0016e570, - 0x0016e970, 0x0016ed70, 0x0016f170, 0x0016f570, - 0x0016f970, 0x0016fd70, 0x00170170, 0x00170570, - 0x00170970, 0x00170d70, 0x00171170, 0x00171570, - 0x00171970, 0x00171d70, 0x00172170, 0x00172570, - 0x00172970, 0x00172d70, 0x00173170, 0x00173570, - 0x00173970, 0x00173d70, 0x00174170, 0x00174570, - 0x00174970, 0x00174d70, 0x00175170, 0x00175570, - 0x00175970, 0x00175d70, 0x00176170, 0x00176570, - 0x00176970, 0x00176d70, 0x00177170, 0x00177570, - 0x00177970, 0x00177d70, 0x00178170, 0x00178570, - 0x00178970, 0x00178d70, 0x00179170, 0x00179570, - 0x00179970, 0x00179d70, 0x0017a170, 0x0017a570, - 0x0017a970, 0x0017ad70, 0x0017b170, 0x0017b570, - 0x0017b970, 0x0017bd70, 0x0017c170, 0x0017c570, - 0x0017c970, 0x0017cd70, 0x0017d170, 0x0017d570, - 0x0017d970, 0x0017dd70, 0x0017e170, 0x0017e570, - 0x0017e970, 0x0017ed70, 0x0017f170, 0x0017f570, - 0x0017f970, 0x0017fd70, 0x00180170, 0x00180570, - 0x00180970, 0x00180d70, 0x00181170, 0x00181570, - 0x00181970, 0x00181d70, 0x00182170, 0x00182570, - 0x00182970, 0x00182d70, 0x00183170, 0x00183570, - 0x00183970, 0x00183d70, 0x00184170, 0x00184570, - 0x00184970, 0x00184d70, 0x00185170, 0x00185570, - 0x00185970, 0x00185d70, 0x00186170, 0x00186570, - 0x00186970, 0x00186d70, 0x00187170, 0x00187570, - 0x00187970, 0x00187d70, 0x00188170, 0x00188570, - 0x00188970, 0x00188d70, 0x00189170, 0x00189570, - 0x00189970, 0x00189d70, 0x0018a170, 0x0018a570, - 0x0018a970, 0x0018ad70, 0x0018b170, 0x0018b570, - 0x0018b970, 0x0018bd70, 0x0018c170, 0x0018c570, - 0x0018c970, 0x0018cd70, 0x0018d170, 0x0018d570, - 0x0018d970, 0x0018dd70, 0x0018e170, 0x0018e570, - 0x0018e970, 0x0018ed70, 0x0018f170, 0x0018f570, - 0x0018f970, 0x0018fd70, 0x00190170, 0x00190570, - 0x00190970, 0x00190d70, 0x00191170, 0x00191570, - 0x00191970, 0x00191d70, 0x00192170, 0x00192570, - 0x00192970, 0x00192d70, 0x00193170, 0x00193570, - 0x00193970, 0x00193d70, 0x00194170, 0x00194570, - 0x00194970, 0x00194d70, 0x00195170, 0x00195570, - 0x00195970, 0x00195d70, 0x00196170, 0x00196570, - 0x00196970, 0x00196d70, 0x00197170, 0x00197570, - 0x00197970, 0x00197d70, 0x00198170, 0x00198570, - 0x00198970, 0x00198d70, 0x00199170, 0x00199570, - 0x00199970, 0x00199d70, 0x0019a170, 0x0019a570, - 0x0019a970, 0x0019ad70, 0x0019b170, 0x0019b570, - 0x0019b970, 0x0019bd70, 0x0019c170, 0x0019c570, - 0x0019c970, 0x0019cd70, 0x0019d170, 0x0019d570, - 0x0019d970, 0x0019dd70, 0x0019e170, 0x0019e570, - 0x0019e970, 0x0019ed70, 0x0019f170, 0x0019f570, - 0x0019f970, 0x0019fd70, 0x001a0170, 0x001a0570, - 0x001a0970, 0x001a0d70, 0x001a1170, 0x001a1570, - 0x001a1970, 0x001a1d70, 0x001a2170, 0x001a2570, - 0x001a2970, 0x001a2d70, 0x001a3170, 0x001a3570, - 0x001a3970, 0x001a3d70, 0x001a4170, 0x001a4570, - 0x001a4970, 0x001a4d70, 0x001a5170, 0x001a5570, - 0x001a5970, 0x001a5d70, 0x001a6170, 0x001a6570, - 0x001a6970, 0x001a6d70, 0x001a7170, 0x001a7570, - 0x001a7970, 0x001a7d70, 0x001a8170, 0x001a8570, - 0x001a8970, 0x001a8d70, 0x001a9170, 0x001a9570, - 0x001a9970, 0x001a9d70, 0x001aa170, 0x001aa570, - 0x001aa970, 0x001aad70, 0x001ab170, 0x001ab570, - 0x001ab970, 0x001abd70, 0x001ac170, 0x001ac570, - 0x001ac970, 0x001acd70, 0x001ad170, 0x001ad570, - 0x001ad970, 0x001add70, 0x001ae170, 0x001ae570, - 0x001ae970, 0x001aed70, 0x001af170, 0x001af570, - 0x001af970, 0x001afd70, 0x001b0170, 0x001b0570, - 0x001b0970, 0x001b0d70, 0x001b1170, 0x001b1570, - 0x001b1970, 0x001b1d70, 0x001b2170, 0x001b2570, - 0x001b2970, 0x001b2d70, 0x001b3170, 0x001b3570, - 0x001b3970, 0x001b3d70, 0x001b4170, 0x001b4570, - 0x001b4970, 0x001b4d70, 0x001b5170, 0x001b5570, - 0x001b5970, 0x001b5d70, 0x001b6170, 0x001b6570, - 0x001b6970, 0x001b6d70, 0x001b7170, 0x001b7570, - 0x001b7970, 0x001b7d70, 0x001b8170, 0x001b8570, - 0x001b8970, 0x001b8d70, 0x001b9170, 0x001b9570, - 0x001b9970, 0x001b9d70, 0x001ba170, 0x001ba570, - 0x001ba970, 0x001bad70, 0x001bb170, 0x001bb570, - 0x001bb970, 0x001bbd70, 0x001bc170, 0x001bc570, - 0x001bc970, 0x001bcd70, 0x001bd170, 0x001bd570, - 0x001bd970, 0x001bdd70, 0x001be170, 0x001be570, - 0x001be970, 0x001bed70, 0x001bf170, 0x001bf570, - 0x001bf970, 0x001bfd70, 0x001c0170, 0x001c0570, - 0x001c0970, 0x001c0d70, 0x001c1170, 0x001c1570, - 0x001c1970, 0x001c1d70, 0x001c2170, 0x001c2570, - 0x001c2970, 0x001c2d70, 0x001c3170, 0x001c3570, - 0x001c3970, 0x001c3d70, 0x001c4170, 0x001c4570, - 0x001c4970, 0x001c4d70, 0x001c5170, 0x001c5570, - 0x001c5970, 0x001c5d70, 0x001c6170, 0x001c6570, - 0x001c6970, 0x001c6d70, 0x001c7170, 0x001c7570, - 0x001c7970, 0x001c7d70, 0x001c8170, 0x001c8570, - 0x001c8970, 0x001c8d70, 0x001c9170, 0x001c9570, - 0x001c9970, 0x001c9d70, 0x001ca170, 0x001ca570, - 0x001ca970, 0x001cad70, 0x001cb170, 0x001cb570, - 0x001cb970, 0x001cbd70, 0x001cc170, 0x001cc570, - 0x001cc970, 0x001ccd70, 0x001cd170, 0x001cd570, - 0x001cd970, 0x001cdd70, 0x001ce170, 0x001ce570, - 0x001ce970, 0x001ced70, 0x001cf170, 0x001cf570, - 0x001cf970, 0x001cfd70, 0x001d0170, 0x001d0570, - 0x001d0970, 0x001d0d70, 0x001d1170, 0x001d1570, - 0x001d1970, 0x001d1d70, 0x001d2170, 0x001d2570, - 0x001d2970, 0x001d2d70, 0x001d3170, 0x001d3570, - 0x001d3970, 0x001d3d70, 0x001d4170, 0x001d4570, - 0x001d4970, 0x001d4d70, 0x001d5170, 0x001d5570, - 0x001d5970, 0x001d5d70, 0x001d6170, 0x001d6570, - 0x001d6970, 0x001d6d70, 0x001d7170, 0x001d7570, - 0x001d7970, 0x001d7d70, 0x001d8170, 0x001d8570, - 0x001d8970, 0x001d8d70, 0x001d9170, 0x001d9570, - 0x001d9970, 0x001d9d70, 0x001da170, 0x001da570, - 0x001da970, 0x001dad70, 0x001db170, 0x001db570, - 0x001db970, 0x001dbd70, 0x001dc170, 0x001dc570, - 0x001dc970, 0x001dcd70, 0x001dd170, 0x001dd570, - 0x001dd970, 0x001ddd70, 0x001de170, 0x001de570, - 0x001de970, 0x001ded70, 0x001df170, 0x001df570, - 0x001df970, 0x001dfd70, 0x001e0170, 0x001e0570, - 0x001e0970, 0x001e0d70, 0x001e1170, 0x001e1570, - 0x001e1970, 0x001e1d70, 0x001e2170, 0x001e2570, - 0x001e2970, 0x001e2d70, 0x001e3170, 0x001e3570, - 0x001e3970, 0x001e3d70, 0x001e4170, 0x001e4570, - 0x001e4970, 0x001e4d70, 0x001e5170, 0x001e5570, - 0x001e5970, 0x001e5d70, 0x001e6170, 0x001e6570, - 0x001e6970, 0x001e6d70, 0x001e7170, 0x001e7570, - 0x001e7970, 0x001e7d70, 0x001e8170, 0x001e8570, - 0x001e8970, 0x001e8d70, 0x001e9170, 0x001e9570, - 0x001e9970, 0x001e9d70, 0x001ea170, 0x001ea570, - 0x001ea970, 0x001ead70, 0x001eb170, 0x001eb570, - 0x001eb970, 0x001ebd70, 0x001ec170, 0x001ec570, - 0x001ec970, 0x001ecd70, 0x001ed170, 0x001ed570, - 0x001ed970, 0x001edd70, 0x001ee170, 0x001ee570, - 0x001ee970, 0x001eed70, 0x001ef170, 0x001ef570, - 0x001ef970, 0x001efd70, 0x001f0170, 0x001f0570, - 0x001f0970, 0x001f0d70, 0x001f1170, 0x001f1570, - 0x001f1970, 0x001f1d70, 0x001f2170, 0x001f2570, - 0x001f2970, 0x001f2d70, 0x001f3170, 0x001f3570, - 0x001f3970, 0x001f3d70, 0x001f4170, 0x001f4570, - 0x001f4970, 0x001f4d70, 0x001f5170, 0x001f5570, - 0x001f5970, 0x001f5d70, 0x001f6170, 0x001f6570, - 0x001f6970, 0x001f6d70, 0x001f7170, 0x001f7570, - 0x001f7970, 0x001f7d70, 0x001f8170, 0x001f8570, - 0x001f8970, 0x001f8d70, 0x001f9170, 0x001f9570, - 0x001f9970, 0x001f9d70, 0x001fa170, 0x001fa570, - 0x001fa970, 0x001fad70, 0x001fb170, 0x001fb570, - 0x001fb970, 0x001fbd70, 0x001fc170, 0x001fc570, - 0x001fc970, 0x001fcd70, 0x001fd170, 0x001fd570, - 0x001fd970, 0x001fdd70, 0x001fe170, 0x001fe570, - 0x001fe970, 0x001fed70, 0x001ff170, 0x001ff570, - 0x001ff970, 0x001ffd70 + 0x000017e8, 0x00003fe9, 0x00000fe9, 0x00002fe9, 0x000003e8, + 0x000013e8, 0x00000be9, 0x00001be9, 0x00002be9, 0x00003be9, + 0x000002e8, 0x00000ae8, 0x000012e8, 0x00001ae8, 0x000006e9, + 0x00000ee9, 0x000016e9, 0x00001ee9, 0x000026e9, 0x00002ee9, + 0x000036e9, 0x00003ee9, 0x000001e9, 0x000009e9, 0x000011e9, + 0x000019e9, 0x000021e9, 0x000029e9, 0x000031e9, 0x000039e9, + 0x00000129, 0x00000529, 0x00000929, 0x00000d29, 0x00001129, + 0x00001529, 0x00001929, 0x00001d29, 0x00002129, 0x00002529, + 0x00002929, 0x00002d29, 0x00003129, 0x00003529, 0x00003929, + 0x00003d29, 0x00000329, 0x00000729, 0x00000b29, 0x00000f29, + 0x00001329, 0x00001729, 0x00001b29, 0x00001f29, 0x00002329, + 0x00002729, 0x00002b29, 0x00002f29, 0x00003329, 0x00003729, + 0x00003b29, 0x00003f29, 0x000000aa, 0x000004aa, 0x000008aa, + 0x00000caa, 0x000010aa, 0x000014aa, 0x000018aa, 0x00001caa, + 0x000020aa, 0x000024aa, 0x000028aa, 0x00002caa, 0x000030aa, + 0x000034aa, 0x000038aa, 0x00003caa, 0x000040aa, 0x000044aa, + 0x000048aa, 0x00004caa, 0x000050aa, 0x000054aa, 0x000058aa, + 0x00005caa, 0x000060aa, 0x000064aa, 0x000068aa, 0x00006caa, + 0x000070aa, 0x000074aa, 0x000078aa, 0x00007caa, 0x000002aa, + 0x000006aa, 0x00000aaa, 0x00000eaa, 0x000012aa, 0x000016aa, + 0x00001aaa, 0x00001eaa, 0x000022aa, 0x000026aa, 0x00002aaa, + 0x00002eaa, 0x000032aa, 0x000036aa, 0x00003aaa, 0x00003eaa, + 0x000042aa, 0x000046aa, 0x00004aaa, 0x00004eaa, 0x000052aa, + 0x000056aa, 0x00005aaa, 0x00005eaa, 0x000062aa, 0x000066aa, + 0x00006aaa, 0x00006eaa, 0x000072aa, 0x000076aa, 0x00007aaa, + 0x00007eaa, 0x0000008a, 0x0000028a, 0x0000048a, 0x0000068a, + 0x0000088a, 0x00000a8a, 0x00000c8a, 0x00000e8a, 0x0000108a, + 0x0000128a, 0x0000148a, 0x0000168a, 0x0000188a, 0x00001a8a, + 0x00001c8a, 0x00001e8a, 0x0000208a, 0x0000228a, 0x0000248a, + 0x0000268a, 0x0000288a, 0x00002a8a, 0x00002c8a, 0x00002e8a, + 0x0000308a, 0x0000328a, 0x0000348a, 0x0000368a, 0x0000388a, + 0x00003a8a, 0x00003c8a, 0x00003e8a, 0x0000408a, 0x0000428a, + 0x0000448a, 0x0000468a, 0x0000488a, 0x00004a8a, 0x00004c8a, + 0x00004e8a, 0x0000508a, 0x0000528a, 0x0000548a, 0x0000568a, + 0x0000588a, 0x00005a8a, 0x00005c8a, 0x00005e8a, 0x0000608a, + 0x0000628a, 0x0000648a, 0x0000668a, 0x0000688a, 0x00006a8a, + 0x00006c8a, 0x00006e8a, 0x0000708a, 0x0000728a, 0x0000748a, + 0x0000768a, 0x0000788a, 0x00007a8a, 0x00007c8a, 0x00007e8a, + 0x0000018a, 0x0000038a, 0x0000058a, 0x0000078a, 0x0000098a, + 0x00000b8a, 0x00000d8a, 0x00000f8a, 0x0000118a, 0x0000138a, + 0x0000158a, 0x0000178a, 0x0000198a, 0x00001b8a, 0x00001d8a, + 0x00001f8a, 0x0000218a, 0x0000238a, 0x0000258a, 0x0000278a, + 0x0000298a, 0x00002b8a, 0x00002d8a, 0x00002f8a, 0x0000318a, + 0x0000338a, 0x0000358a, 0x0000378a, 0x0000398a, 0x00003b8a, + 0x00003d8a, 0x00003f8a, 0x0000418a, 0x0000438a, 0x0000458a, + 0x0000478a, 0x0000498a, 0x00004b8a, 0x00004d8a, 0x00004f8a, + 0x0000518a, 0x0000538a, 0x0000558a, 0x0000578a, 0x0000598a, + 0x00005b8a, 0x00005d8a, 0x00005f8a, 0x0000618a, 0x0000638a, + 0x0000658a, 0x0000678a, 0x0000698a, 0x00006b8a, 0x00006d8a, + 0x00006f8a, 0x0000718a, 0x0000738a, 0x0000758a, 0x0000778a, + 0x0000798a, 0x00007b8a, 0x00007d8a, 0x00007f8a, 0x0000004b, + 0x0000024b, 0x0000044b, 0x0000064b, 0x0000084b, 0x00000a4b, + 0x00000c4b, 0x00000e4b, 0x0000104b, 0x0000124b, 0x0000144b, + 0x0000164b, 0x0000184b, 0x00001a4b, 0x00001c4b, 0x00001e4b, + 0x0000204b, 0x0000224b, 0x0000244b, 0x0000264b, 0x0000284b, + 0x00002a4b, 0x00002c4b, 0x00002e4b, 0x0000304b, 0x0000324b, + 0x0000344b, 0x0000364b, 0x0000384b, 0x00003a4b, 0x00003c4b, + 0x00003e4b, 0x0000404b, 0x0000424b, 0x0000444b, 0x0000464b, + 0x0000484b, 0x00004a4b, 0x00004c4b, 0x00004e4b, 0x0000504b, + 0x0000524b, 0x0000544b, 0x0000564b, 0x0000584b, 0x00005a4b, + 0x00005c4b, 0x00005e4b, 0x0000604b, 0x0000624b, 0x0000644b, + 0x0000664b, 0x0000684b, 0x00006a4b, 0x00006c4b, 0x00006e4b, + 0x0000704b, 0x0000724b, 0x0000744b, 0x0000764b, 0x0000784b, + 0x00007a4b, 0x00007c4b, 0x00007e4b, 0x0000804b, 0x0000824b, + 0x0000844b, 0x0000864b, 0x0000884b, 0x00008a4b, 0x00008c4b, + 0x00008e4b, 0x0000904b, 0x0000924b, 0x0000944b, 0x0000964b, + 0x0000984b, 0x00009a4b, 0x00009c4b, 0x00009e4b, 0x0000a04b, + 0x0000a24b, 0x0000a44b, 0x0000a64b, 0x0000a84b, 0x0000aa4b, + 0x0000ac4b, 0x0000ae4b, 0x0000b04b, 0x0000b24b, 0x0000b44b, + 0x0000b64b, 0x0000b84b, 0x0000ba4b, 0x0000bc4b, 0x0000be4b, + 0x0000c04b, 0x0000c24b, 0x0000c44b, 0x0000c64b, 0x0000c84b, + 0x0000ca4b, 0x0000cc4b, 0x0000ce4b, 0x0000d04b, 0x0000d24b, + 0x0000d44b, 0x0000d64b, 0x0000d84b, 0x0000da4b, 0x0000dc4b, + 0x0000de4b, 0x0000e04b, 0x0000e24b, 0x0000e44b, 0x0000e64b, + 0x0000e84b, 0x0000ea4b, 0x0000ec4b, 0x0000ee4b, 0x0000f04b, + 0x0000f24b, 0x0000f44b, 0x0000f64b, 0x0000f84b, 0x0000fa4b, + 0x0000fc4b, 0x0000fe4b, 0x000001ac, 0x000005ac, 0x000009ac, + 0x00000dac, 0x000011ac, 0x000015ac, 0x000019ac, 0x00001dac, + 0x000021ac, 0x000025ac, 0x000029ac, 0x00002dac, 0x000031ac, + 0x000035ac, 0x000039ac, 0x00003dac, 0x000041ac, 0x000045ac, + 0x000049ac, 0x00004dac, 0x000051ac, 0x000055ac, 0x000059ac, + 0x00005dac, 0x000061ac, 0x000065ac, 0x000069ac, 0x00006dac, + 0x000071ac, 0x000075ac, 0x000079ac, 0x00007dac, 0x000081ac, + 0x000085ac, 0x000089ac, 0x00008dac, 0x000091ac, 0x000095ac, + 0x000099ac, 0x00009dac, 0x0000a1ac, 0x0000a5ac, 0x0000a9ac, + 0x0000adac, 0x0000b1ac, 0x0000b5ac, 0x0000b9ac, 0x0000bdac, + 0x0000c1ac, 0x0000c5ac, 0x0000c9ac, 0x0000cdac, 0x0000d1ac, + 0x0000d5ac, 0x0000d9ac, 0x0000ddac, 0x0000e1ac, 0x0000e5ac, + 0x0000e9ac, 0x0000edac, 0x0000f1ac, 0x0000f5ac, 0x0000f9ac, + 0x0000fdac, 0x000101ac, 0x000105ac, 0x000109ac, 0x00010dac, + 0x000111ac, 0x000115ac, 0x000119ac, 0x00011dac, 0x000121ac, + 0x000125ac, 0x000129ac, 0x00012dac, 0x000131ac, 0x000135ac, + 0x000139ac, 0x00013dac, 0x000141ac, 0x000145ac, 0x000149ac, + 0x00014dac, 0x000151ac, 0x000155ac, 0x000159ac, 0x00015dac, + 0x000161ac, 0x000165ac, 0x000169ac, 0x00016dac, 0x000171ac, + 0x000175ac, 0x000179ac, 0x00017dac, 0x000181ac, 0x000185ac, + 0x000189ac, 0x00018dac, 0x000191ac, 0x000195ac, 0x000199ac, + 0x00019dac, 0x0001a1ac, 0x0001a5ac, 0x0001a9ac, 0x0001adac, + 0x0001b1ac, 0x0001b5ac, 0x0001b9ac, 0x0001bdac, 0x0001c1ac, + 0x0001c5ac, 0x0001c9ac, 0x0001cdac, 0x0001d1ac, 0x0001d5ac, + 0x0001d9ac, 0x0001ddac, 0x0001e1ac, 0x0001e5ac, 0x0001e9ac, + 0x0001edac, 0x0001f1ac, 0x0001f5ac, 0x0001f9ac, 0x0001fdac, + 0x0000014c, 0x0000034c, 0x0000054c, 0x0000074c, 0x0000094c, + 0x00000b4c, 0x00000d4c, 0x00000f4c, 0x0000114c, 0x0000134c, + 0x0000154c, 0x0000174c, 0x0000194c, 0x00001b4c, 0x00001d4c, + 0x00001f4c, 0x0000214c, 0x0000234c, 0x0000254c, 0x0000274c, + 0x0000294c, 0x00002b4c, 0x00002d4c, 0x00002f4c, 0x0000314c, + 0x0000334c, 0x0000354c, 0x0000374c, 0x0000394c, 0x00003b4c, + 0x00003d4c, 0x00003f4c, 0x0000414c, 0x0000434c, 0x0000454c, + 0x0000474c, 0x0000494c, 0x00004b4c, 0x00004d4c, 0x00004f4c, + 0x0000514c, 0x0000534c, 0x0000554c, 0x0000574c, 0x0000594c, + 0x00005b4c, 0x00005d4c, 0x00005f4c, 0x0000614c, 0x0000634c, + 0x0000654c, 0x0000674c, 0x0000694c, 0x00006b4c, 0x00006d4c, + 0x00006f4c, 0x0000714c, 0x0000734c, 0x0000754c, 0x0000774c, + 0x0000794c, 0x00007b4c, 0x00007d4c, 0x00007f4c, 0x0000814c, + 0x0000834c, 0x0000854c, 0x0000874c, 0x0000894c, 0x00008b4c, + 0x00008d4c, 0x00008f4c, 0x0000914c, 0x0000934c, 0x0000954c, + 0x0000974c, 0x0000994c, 0x00009b4c, 0x00009d4c, 0x00009f4c, + 0x0000a14c, 0x0000a34c, 0x0000a54c, 0x0000a74c, 0x0000a94c, + 0x0000ab4c, 0x0000ad4c, 0x0000af4c, 0x0000b14c, 0x0000b34c, + 0x0000b54c, 0x0000b74c, 0x0000b94c, 0x0000bb4c, 0x0000bd4c, + 0x0000bf4c, 0x0000c14c, 0x0000c34c, 0x0000c54c, 0x0000c74c, + 0x0000c94c, 0x0000cb4c, 0x0000cd4c, 0x0000cf4c, 0x0000d14c, + 0x0000d34c, 0x0000d54c, 0x0000d74c, 0x0000d94c, 0x0000db4c, + 0x0000dd4c, 0x0000df4c, 0x0000e14c, 0x0000e34c, 0x0000e54c, + 0x0000e74c, 0x0000e94c, 0x0000eb4c, 0x0000ed4c, 0x0000ef4c, + 0x0000f14c, 0x0000f34c, 0x0000f54c, 0x0000f74c, 0x0000f94c, + 0x0000fb4c, 0x0000fd4c, 0x0000ff4c, 0x0001014c, 0x0001034c, + 0x0001054c, 0x0001074c, 0x0001094c, 0x00010b4c, 0x00010d4c, + 0x00010f4c, 0x0001114c, 0x0001134c, 0x0001154c, 0x0001174c, + 0x0001194c, 0x00011b4c, 0x00011d4c, 0x00011f4c, 0x0001214c, + 0x0001234c, 0x0001254c, 0x0001274c, 0x0001294c, 0x00012b4c, + 0x00012d4c, 0x00012f4c, 0x0001314c, 0x0001334c, 0x0001354c, + 0x0001374c, 0x0001394c, 0x00013b4c, 0x00013d4c, 0x00013f4c, + 0x0001414c, 0x0001434c, 0x0001454c, 0x0001474c, 0x0001494c, + 0x00014b4c, 0x00014d4c, 0x00014f4c, 0x0001514c, 0x0001534c, + 0x0001554c, 0x0001574c, 0x0001594c, 0x00015b4c, 0x00015d4c, + 0x00015f4c, 0x0001614c, 0x0001634c, 0x0001654c, 0x0001674c, + 0x0001694c, 0x00016b4c, 0x00016d4c, 0x00016f4c, 0x0001714c, + 0x0001734c, 0x0001754c, 0x0001774c, 0x0001794c, 0x00017b4c, + 0x00017d4c, 0x00017f4c, 0x0001814c, 0x0001834c, 0x0001854c, + 0x0001874c, 0x0001894c, 0x00018b4c, 0x00018d4c, 0x00018f4c, + 0x0001914c, 0x0001934c, 0x0001954c, 0x0001974c, 0x0001994c, + 0x00019b4c, 0x00019d4c, 0x00019f4c, 0x0001a14c, 0x0001a34c, + 0x0001a54c, 0x0001a74c, 0x0001a94c, 0x0001ab4c, 0x0001ad4c, + 0x0001af4c, 0x0001b14c, 0x0001b34c, 0x0001b54c, 0x0001b74c, + 0x0001b94c, 0x0001bb4c, 0x0001bd4c, 0x0001bf4c, 0x0001c14c, + 0x0001c34c, 0x0001c54c, 0x0001c74c, 0x0001c94c, 0x0001cb4c, + 0x0001cd4c, 0x0001cf4c, 0x0001d14c, 0x0001d34c, 0x0001d54c, + 0x0001d74c, 0x0001d94c, 0x0001db4c, 0x0001dd4c, 0x0001df4c, + 0x0001e14c, 0x0001e34c, 0x0001e54c, 0x0001e74c, 0x0001e94c, + 0x0001eb4c, 0x0001ed4c, 0x0001ef4c, 0x0001f14c, 0x0001f34c, + 0x0001f54c, 0x0001f74c, 0x0001f94c, 0x0001fb4c, 0x0001fd4c, + 0x0001ff4c, 0x000003ad, 0x000007ad, 0x00000bad, 0x00000fad, + 0x000013ad, 0x000017ad, 0x00001bad, 0x00001fad, 0x000023ad, + 0x000027ad, 0x00002bad, 0x00002fad, 0x000033ad, 0x000037ad, + 0x00003bad, 0x00003fad, 0x000043ad, 0x000047ad, 0x00004bad, + 0x00004fad, 0x000053ad, 0x000057ad, 0x00005bad, 0x00005fad, + 0x000063ad, 0x000067ad, 0x00006bad, 0x00006fad, 0x000073ad, + 0x000077ad, 0x00007bad, 0x00007fad, 0x000083ad, 0x000087ad, + 0x00008bad, 0x00008fad, 0x000093ad, 0x000097ad, 0x00009bad, + 0x00009fad, 0x0000a3ad, 0x0000a7ad, 0x0000abad, 0x0000afad, + 0x0000b3ad, 0x0000b7ad, 0x0000bbad, 0x0000bfad, 0x0000c3ad, + 0x0000c7ad, 0x0000cbad, 0x0000cfad, 0x0000d3ad, 0x0000d7ad, + 0x0000dbad, 0x0000dfad, 0x0000e3ad, 0x0000e7ad, 0x0000ebad, + 0x0000efad, 0x0000f3ad, 0x0000f7ad, 0x0000fbad, 0x0000ffad, + 0x000103ad, 0x000107ad, 0x00010bad, 0x00010fad, 0x000113ad, + 0x000117ad, 0x00011bad, 0x00011fad, 0x000123ad, 0x000127ad, + 0x00012bad, 0x00012fad, 0x000133ad, 0x000137ad, 0x00013bad, + 0x00013fad, 0x000143ad, 0x000147ad, 0x00014bad, 0x00014fad, + 0x000153ad, 0x000157ad, 0x00015bad, 0x00015fad, 0x000163ad, + 0x000167ad, 0x00016bad, 0x00016fad, 0x000173ad, 0x000177ad, + 0x00017bad, 0x00017fad, 0x000183ad, 0x000187ad, 0x00018bad, + 0x00018fad, 0x000193ad, 0x000197ad, 0x00019bad, 0x00019fad, + 0x0001a3ad, 0x0001a7ad, 0x0001abad, 0x0001afad, 0x0001b3ad, + 0x0001b7ad, 0x0001bbad, 0x0001bfad, 0x0001c3ad, 0x0001c7ad, + 0x0001cbad, 0x0001cfad, 0x0001d3ad, 0x0001d7ad, 0x0001dbad, + 0x0001dfad, 0x0001e3ad, 0x0001e7ad, 0x0001ebad, 0x0001efad, + 0x0001f3ad, 0x0001f7ad, 0x0001fbad, 0x0001ffad, 0x000203ad, + 0x000207ad, 0x00020bad, 0x00020fad, 0x000213ad, 0x000217ad, + 0x00021bad, 0x00021fad, 0x000223ad, 0x000227ad, 0x00022bad, + 0x00022fad, 0x000233ad, 0x000237ad, 0x00023bad, 0x00023fad, + 0x000243ad, 0x000247ad, 0x00024bad, 0x00024fad, 0x000253ad, + 0x000257ad, 0x00025bad, 0x00025fad, 0x000263ad, 0x000267ad, + 0x00026bad, 0x00026fad, 0x000273ad, 0x000277ad, 0x00027bad, + 0x00027fad, 0x000283ad, 0x000287ad, 0x00028bad, 0x00028fad, + 0x000293ad, 0x000297ad, 0x00029bad, 0x00029fad, 0x0002a3ad, + 0x0002a7ad, 0x0002abad, 0x0002afad, 0x0002b3ad, 0x0002b7ad, + 0x0002bbad, 0x0002bfad, 0x0002c3ad, 0x0002c7ad, 0x0002cbad, + 0x0002cfad, 0x0002d3ad, 0x0002d7ad, 0x0002dbad, 0x0002dfad, + 0x0002e3ad, 0x0002e7ad, 0x0002ebad, 0x0002efad, 0x0002f3ad, + 0x0002f7ad, 0x0002fbad, 0x0002ffad, 0x000303ad, 0x000307ad, + 0x00030bad, 0x00030fad, 0x000313ad, 0x000317ad, 0x00031bad, + 0x00031fad, 0x000323ad, 0x000327ad, 0x00032bad, 0x00032fad, + 0x000333ad, 0x000337ad, 0x00033bad, 0x00033fad, 0x000343ad, + 0x000347ad, 0x00034bad, 0x00034fad, 0x000353ad, 0x000357ad, + 0x00035bad, 0x00035fad, 0x000363ad, 0x000367ad, 0x00036bad, + 0x00036fad, 0x000373ad, 0x000377ad, 0x00037bad, 0x00037fad, + 0x000383ad, 0x000387ad, 0x00038bad, 0x00038fad, 0x000393ad, + 0x000397ad, 0x00039bad, 0x00039fad, 0x0003a3ad, 0x0003a7ad, + 0x0003abad, 0x0003afad, 0x0003b3ad, 0x0003b7ad, 0x0003bbad, + 0x0003bfad, 0x0003c3ad, 0x0003c7ad, 0x0003cbad, 0x0003cfad, + 0x0003d3ad, 0x0003d7ad, 0x0003dbad, 0x0003dfad, 0x0003e3ad, + 0x0003e7ad, 0x0003ebad, 0x0003efad, 0x0003f3ad, 0x0003f7ad, + 0x0003fbad, 0x0003ffad, 0x000000cd, 0x000002cd, 0x000004cd, + 0x000006cd, 0x000008cd, 0x00000acd, 0x00000ccd, 0x00000ecd, + 0x000010cd, 0x000012cd, 0x000014cd, 0x000016cd, 0x000018cd, + 0x00001acd, 0x00001ccd, 0x00001ecd, 0x000020cd, 0x000022cd, + 0x000024cd, 0x000026cd, 0x000028cd, 0x00002acd, 0x00002ccd, + 0x00002ecd, 0x000030cd, 0x000032cd, 0x000034cd, 0x000036cd, + 0x000038cd, 0x00003acd, 0x00003ccd, 0x00003ecd, 0x000040cd, + 0x000042cd, 0x000044cd, 0x000046cd, 0x000048cd, 0x00004acd, + 0x00004ccd, 0x00004ecd, 0x000050cd, 0x000052cd, 0x000054cd, + 0x000056cd, 0x000058cd, 0x00005acd, 0x00005ccd, 0x00005ecd, + 0x000060cd, 0x000062cd, 0x000064cd, 0x000066cd, 0x000068cd, + 0x00006acd, 0x00006ccd, 0x00006ecd, 0x000070cd, 0x000072cd, + 0x000074cd, 0x000076cd, 0x000078cd, 0x00007acd, 0x00007ccd, + 0x00007ecd, 0x000080cd, 0x000082cd, 0x000084cd, 0x000086cd, + 0x000088cd, 0x00008acd, 0x00008ccd, 0x00008ecd, 0x000090cd, + 0x000092cd, 0x000094cd, 0x000096cd, 0x000098cd, 0x00009acd, + 0x00009ccd, 0x00009ecd, 0x0000a0cd, 0x0000a2cd, 0x0000a4cd, + 0x0000a6cd, 0x0000a8cd, 0x0000aacd, 0x0000accd, 0x0000aecd, + 0x0000b0cd, 0x0000b2cd, 0x0000b4cd, 0x0000b6cd, 0x0000b8cd, + 0x0000bacd, 0x0000bccd, 0x0000becd, 0x0000c0cd, 0x0000c2cd, + 0x0000c4cd, 0x0000c6cd, 0x0000c8cd, 0x0000cacd, 0x0000cccd, + 0x0000cecd, 0x0000d0cd, 0x0000d2cd, 0x0000d4cd, 0x0000d6cd, + 0x0000d8cd, 0x0000dacd, 0x0000dccd, 0x0000decd, 0x0000e0cd, + 0x0000e2cd, 0x0000e4cd, 0x0000e6cd, 0x0000e8cd, 0x0000eacd, + 0x0000eccd, 0x0000eecd, 0x0000f0cd, 0x0000f2cd, 0x0000f4cd, + 0x0000f6cd, 0x0000f8cd, 0x0000facd, 0x0000fccd, 0x0000fecd, + 0x000100cd, 0x000102cd, 0x000104cd, 0x000106cd, 0x000108cd, + 0x00010acd, 0x00010ccd, 0x00010ecd, 0x000110cd, 0x000112cd, + 0x000114cd, 0x000116cd, 0x000118cd, 0x00011acd, 0x00011ccd, + 0x00011ecd, 0x000120cd, 0x000122cd, 0x000124cd, 0x000126cd, + 0x000128cd, 0x00012acd, 0x00012ccd, 0x00012ecd, 0x000130cd, + 0x000132cd, 0x000134cd, 0x000136cd, 0x000138cd, 0x00013acd, + 0x00013ccd, 0x00013ecd, 0x000140cd, 0x000142cd, 0x000144cd, + 0x000146cd, 0x000148cd, 0x00014acd, 0x00014ccd, 0x00014ecd, + 0x000150cd, 0x000152cd, 0x000154cd, 0x000156cd, 0x000158cd, + 0x00015acd, 0x00015ccd, 0x00015ecd, 0x000160cd, 0x000162cd, + 0x000164cd, 0x000166cd, 0x000168cd, 0x00016acd, 0x00016ccd, + 0x00016ecd, 0x000170cd, 0x000172cd, 0x000174cd, 0x000176cd, + 0x000178cd, 0x00017acd, 0x00017ccd, 0x00017ecd, 0x000180cd, + 0x000182cd, 0x000184cd, 0x000186cd, 0x000188cd, 0x00018acd, + 0x00018ccd, 0x00018ecd, 0x000190cd, 0x000192cd, 0x000194cd, + 0x000196cd, 0x000198cd, 0x00019acd, 0x00019ccd, 0x00019ecd, + 0x0001a0cd, 0x0001a2cd, 0x0001a4cd, 0x0001a6cd, 0x0001a8cd, + 0x0001aacd, 0x0001accd, 0x0001aecd, 0x0001b0cd, 0x0001b2cd, + 0x0001b4cd, 0x0001b6cd, 0x0001b8cd, 0x0001bacd, 0x0001bccd, + 0x0001becd, 0x0001c0cd, 0x0001c2cd, 0x0001c4cd, 0x0001c6cd, + 0x0001c8cd, 0x0001cacd, 0x0001cccd, 0x0001cecd, 0x0001d0cd, + 0x0001d2cd, 0x0001d4cd, 0x0001d6cd, 0x0001d8cd, 0x0001dacd, + 0x0001dccd, 0x0001decd, 0x0001e0cd, 0x0001e2cd, 0x0001e4cd, + 0x0001e6cd, 0x0001e8cd, 0x0001eacd, 0x0001eccd, 0x0001eecd, + 0x0001f0cd, 0x0001f2cd, 0x0001f4cd, 0x0001f6cd, 0x0001f8cd, + 0x0001facd, 0x0001fccd, 0x0001fecd, 0x000200cd, 0x000202cd, + 0x000204cd, 0x000206cd, 0x000208cd, 0x00020acd, 0x00020ccd, + 0x00020ecd, 0x000210cd, 0x000212cd, 0x000214cd, 0x000216cd, + 0x000218cd, 0x00021acd, 0x00021ccd, 0x00021ecd, 0x000220cd, + 0x000222cd, 0x000224cd, 0x000226cd, 0x000228cd, 0x00022acd, + 0x00022ccd, 0x00022ecd, 0x000230cd, 0x000232cd, 0x000234cd, + 0x000236cd, 0x000238cd, 0x00023acd, 0x00023ccd, 0x00023ecd, + 0x000240cd, 0x000242cd, 0x000244cd, 0x000246cd, 0x000248cd, + 0x00024acd, 0x00024ccd, 0x00024ecd, 0x000250cd, 0x000252cd, + 0x000254cd, 0x000256cd, 0x000258cd, 0x00025acd, 0x00025ccd, + 0x00025ecd, 0x000260cd, 0x000262cd, 0x000264cd, 0x000266cd, + 0x000268cd, 0x00026acd, 0x00026ccd, 0x00026ecd, 0x000270cd, + 0x000272cd, 0x000274cd, 0x000276cd, 0x000278cd, 0x00027acd, + 0x00027ccd, 0x00027ecd, 0x000280cd, 0x000282cd, 0x000284cd, + 0x000286cd, 0x000288cd, 0x00028acd, 0x00028ccd, 0x00028ecd, + 0x000290cd, 0x000292cd, 0x000294cd, 0x000296cd, 0x000298cd, + 0x00029acd, 0x00029ccd, 0x00029ecd, 0x0002a0cd, 0x0002a2cd, + 0x0002a4cd, 0x0002a6cd, 0x0002a8cd, 0x0002aacd, 0x0002accd, + 0x0002aecd, 0x0002b0cd, 0x0002b2cd, 0x0002b4cd, 0x0002b6cd, + 0x0002b8cd, 0x0002bacd, 0x0002bccd, 0x0002becd, 0x0002c0cd, + 0x0002c2cd, 0x0002c4cd, 0x0002c6cd, 0x0002c8cd, 0x0002cacd, + 0x0002cccd, 0x0002cecd, 0x0002d0cd, 0x0002d2cd, 0x0002d4cd, + 0x0002d6cd, 0x0002d8cd, 0x0002dacd, 0x0002dccd, 0x0002decd, + 0x0002e0cd, 0x0002e2cd, 0x0002e4cd, 0x0002e6cd, 0x0002e8cd, + 0x0002eacd, 0x0002eccd, 0x0002eecd, 0x0002f0cd, 0x0002f2cd, + 0x0002f4cd, 0x0002f6cd, 0x0002f8cd, 0x0002facd, 0x0002fccd, + 0x0002fecd, 0x000300cd, 0x000302cd, 0x000304cd, 0x000306cd, + 0x000308cd, 0x00030acd, 0x00030ccd, 0x00030ecd, 0x000310cd, + 0x000312cd, 0x000314cd, 0x000316cd, 0x000318cd, 0x00031acd, + 0x00031ccd, 0x00031ecd, 0x000320cd, 0x000322cd, 0x000324cd, + 0x000326cd, 0x000328cd, 0x00032acd, 0x00032ccd, 0x00032ecd, + 0x000330cd, 0x000332cd, 0x000334cd, 0x000336cd, 0x000338cd, + 0x00033acd, 0x00033ccd, 0x00033ecd, 0x000340cd, 0x000342cd, + 0x000344cd, 0x000346cd, 0x000348cd, 0x00034acd, 0x00034ccd, + 0x00034ecd, 0x000350cd, 0x000352cd, 0x000354cd, 0x000356cd, + 0x000358cd, 0x00035acd, 0x00035ccd, 0x00035ecd, 0x000360cd, + 0x000362cd, 0x000364cd, 0x000366cd, 0x000368cd, 0x00036acd, + 0x00036ccd, 0x00036ecd, 0x000370cd, 0x000372cd, 0x000374cd, + 0x000376cd, 0x000378cd, 0x00037acd, 0x00037ccd, 0x00037ecd, + 0x000380cd, 0x000382cd, 0x000384cd, 0x000386cd, 0x000388cd, + 0x00038acd, 0x00038ccd, 0x00038ecd, 0x000390cd, 0x000392cd, + 0x000394cd, 0x000396cd, 0x000398cd, 0x00039acd, 0x00039ccd, + 0x00039ecd, 0x0003a0cd, 0x0003a2cd, 0x0003a4cd, 0x0003a6cd, + 0x0003a8cd, 0x0003aacd, 0x0003accd, 0x0003aecd, 0x0003b0cd, + 0x0003b2cd, 0x0003b4cd, 0x0003b6cd, 0x0003b8cd, 0x0003bacd, + 0x0003bccd, 0x0003becd, 0x0003c0cd, 0x0003c2cd, 0x0003c4cd, + 0x0003c6cd, 0x0003c8cd, 0x0003cacd, 0x0003cccd, 0x0003cecd, + 0x0003d0cd, 0x0003d2cd, 0x0003d4cd, 0x0003d6cd, 0x0003d8cd, + 0x0003dacd, 0x0003dccd, 0x0003decd, 0x0003e0cd, 0x0003e2cd, + 0x0003e4cd, 0x0003e6cd, 0x0003e8cd, 0x0003eacd, 0x0003eccd, + 0x0003eecd, 0x0003f0cd, 0x0003f2cd, 0x0003f4cd, 0x0003f6cd, + 0x0003f8cd, 0x0003facd, 0x0003fccd, 0x0003fecd, 0x0000006e, + 0x0000046e, 0x0000086e, 0x00000c6e, 0x0000106e, 0x0000146e, + 0x0000186e, 0x00001c6e, 0x0000206e, 0x0000246e, 0x0000286e, + 0x00002c6e, 0x0000306e, 0x0000346e, 0x0000386e, 0x00003c6e, + 0x0000406e, 0x0000446e, 0x0000486e, 0x00004c6e, 0x0000506e, + 0x0000546e, 0x0000586e, 0x00005c6e, 0x0000606e, 0x0000646e, + 0x0000686e, 0x00006c6e, 0x0000706e, 0x0000746e, 0x0000786e, + 0x00007c6e, 0x0000806e, 0x0000846e, 0x0000886e, 0x00008c6e, + 0x0000906e, 0x0000946e, 0x0000986e, 0x00009c6e, 0x0000a06e, + 0x0000a46e, 0x0000a86e, 0x0000ac6e, 0x0000b06e, 0x0000b46e, + 0x0000b86e, 0x0000bc6e, 0x0000c06e, 0x0000c46e, 0x0000c86e, + 0x0000cc6e, 0x0000d06e, 0x0000d46e, 0x0000d86e, 0x0000dc6e, + 0x0000e06e, 0x0000e46e, 0x0000e86e, 0x0000ec6e, 0x0000f06e, + 0x0000f46e, 0x0000f86e, 0x0000fc6e, 0x0001006e, 0x0001046e, + 0x0001086e, 0x00010c6e, 0x0001106e, 0x0001146e, 0x0001186e, + 0x00011c6e, 0x0001206e, 0x0001246e, 0x0001286e, 0x00012c6e, + 0x0001306e, 0x0001346e, 0x0001386e, 0x00013c6e, 0x0001406e, + 0x0001446e, 0x0001486e, 0x00014c6e, 0x0001506e, 0x0001546e, + 0x0001586e, 0x00015c6e, 0x0001606e, 0x0001646e, 0x0001686e, + 0x00016c6e, 0x0001706e, 0x0001746e, 0x0001786e, 0x00017c6e, + 0x0001806e, 0x0001846e, 0x0001886e, 0x00018c6e, 0x0001906e, + 0x0001946e, 0x0001986e, 0x00019c6e, 0x0001a06e, 0x0001a46e, + 0x0001a86e, 0x0001ac6e, 0x0001b06e, 0x0001b46e, 0x0001b86e, + 0x0001bc6e, 0x0001c06e, 0x0001c46e, 0x0001c86e, 0x0001cc6e, + 0x0001d06e, 0x0001d46e, 0x0001d86e, 0x0001dc6e, 0x0001e06e, + 0x0001e46e, 0x0001e86e, 0x0001ec6e, 0x0001f06e, 0x0001f46e, + 0x0001f86e, 0x0001fc6e, 0x0002006e, 0x0002046e, 0x0002086e, + 0x00020c6e, 0x0002106e, 0x0002146e, 0x0002186e, 0x00021c6e, + 0x0002206e, 0x0002246e, 0x0002286e, 0x00022c6e, 0x0002306e, + 0x0002346e, 0x0002386e, 0x00023c6e, 0x0002406e, 0x0002446e, + 0x0002486e, 0x00024c6e, 0x0002506e, 0x0002546e, 0x0002586e, + 0x00025c6e, 0x0002606e, 0x0002646e, 0x0002686e, 0x00026c6e, + 0x0002706e, 0x0002746e, 0x0002786e, 0x00027c6e, 0x0002806e, + 0x0002846e, 0x0002886e, 0x00028c6e, 0x0002906e, 0x0002946e, + 0x0002986e, 0x00029c6e, 0x0002a06e, 0x0002a46e, 0x0002a86e, + 0x0002ac6e, 0x0002b06e, 0x0002b46e, 0x0002b86e, 0x0002bc6e, + 0x0002c06e, 0x0002c46e, 0x0002c86e, 0x0002cc6e, 0x0002d06e, + 0x0002d46e, 0x0002d86e, 0x0002dc6e, 0x0002e06e, 0x0002e46e, + 0x0002e86e, 0x0002ec6e, 0x0002f06e, 0x0002f46e, 0x0002f86e, + 0x0002fc6e, 0x0003006e, 0x0003046e, 0x0003086e, 0x00030c6e, + 0x0003106e, 0x0003146e, 0x0003186e, 0x00031c6e, 0x0003206e, + 0x0003246e, 0x0003286e, 0x00032c6e, 0x0003306e, 0x0003346e, + 0x0003386e, 0x00033c6e, 0x0003406e, 0x0003446e, 0x0003486e, + 0x00034c6e, 0x0003506e, 0x0003546e, 0x0003586e, 0x00035c6e, + 0x0003606e, 0x0003646e, 0x0003686e, 0x00036c6e, 0x0003706e, + 0x0003746e, 0x0003786e, 0x00037c6e, 0x0003806e, 0x0003846e, + 0x0003886e, 0x00038c6e, 0x0003906e, 0x0003946e, 0x0003986e, + 0x00039c6e, 0x0003a06e, 0x0003a46e, 0x0003a86e, 0x0003ac6e, + 0x0003b06e, 0x0003b46e, 0x0003b86e, 0x0003bc6e, 0x0003c06e, + 0x0003c46e, 0x0003c86e, 0x0003cc6e, 0x0003d06e, 0x0003d46e, + 0x0003d86e, 0x0003dc6e, 0x0003e06e, 0x0003e46e, 0x0003e86e, + 0x0003ec6e, 0x0003f06e, 0x0003f46e, 0x0003f86e, 0x0003fc6e, + 0x0004006e, 0x0004046e, 0x0004086e, 0x00040c6e, 0x0004106e, + 0x0004146e, 0x0004186e, 0x00041c6e, 0x0004206e, 0x0004246e, + 0x0004286e, 0x00042c6e, 0x0004306e, 0x0004346e, 0x0004386e, + 0x00043c6e, 0x0004406e, 0x0004446e, 0x0004486e, 0x00044c6e, + 0x0004506e, 0x0004546e, 0x0004586e, 0x00045c6e, 0x0004606e, + 0x0004646e, 0x0004686e, 0x00046c6e, 0x0004706e, 0x0004746e, + 0x0004786e, 0x00047c6e, 0x0004806e, 0x0004846e, 0x0004886e, + 0x00048c6e, 0x0004906e, 0x0004946e, 0x0004986e, 0x00049c6e, + 0x0004a06e, 0x0004a46e, 0x0004a86e, 0x0004ac6e, 0x0004b06e, + 0x0004b46e, 0x0004b86e, 0x0004bc6e, 0x0004c06e, 0x0004c46e, + 0x0004c86e, 0x0004cc6e, 0x0004d06e, 0x0004d46e, 0x0004d86e, + 0x0004dc6e, 0x0004e06e, 0x0004e46e, 0x0004e86e, 0x0004ec6e, + 0x0004f06e, 0x0004f46e, 0x0004f86e, 0x0004fc6e, 0x0005006e, + 0x0005046e, 0x0005086e, 0x00050c6e, 0x0005106e, 0x0005146e, + 0x0005186e, 0x00051c6e, 0x0005206e, 0x0005246e, 0x0005286e, + 0x00052c6e, 0x0005306e, 0x0005346e, 0x0005386e, 0x00053c6e, + 0x0005406e, 0x0005446e, 0x0005486e, 0x00054c6e, 0x0005506e, + 0x0005546e, 0x0005586e, 0x00055c6e, 0x0005606e, 0x0005646e, + 0x0005686e, 0x00056c6e, 0x0005706e, 0x0005746e, 0x0005786e, + 0x00057c6e, 0x0005806e, 0x0005846e, 0x0005886e, 0x00058c6e, + 0x0005906e, 0x0005946e, 0x0005986e, 0x00059c6e, 0x0005a06e, + 0x0005a46e, 0x0005a86e, 0x0005ac6e, 0x0005b06e, 0x0005b46e, + 0x0005b86e, 0x0005bc6e, 0x0005c06e, 0x0005c46e, 0x0005c86e, + 0x0005cc6e, 0x0005d06e, 0x0005d46e, 0x0005d86e, 0x0005dc6e, + 0x0005e06e, 0x0005e46e, 0x0005e86e, 0x0005ec6e, 0x0005f06e, + 0x0005f46e, 0x0005f86e, 0x0005fc6e, 0x0006006e, 0x0006046e, + 0x0006086e, 0x00060c6e, 0x0006106e, 0x0006146e, 0x0006186e, + 0x00061c6e, 0x0006206e, 0x0006246e, 0x0006286e, 0x00062c6e, + 0x0006306e, 0x0006346e, 0x0006386e, 0x00063c6e, 0x0006406e, + 0x0006446e, 0x0006486e, 0x00064c6e, 0x0006506e, 0x0006546e, + 0x0006586e, 0x00065c6e, 0x0006606e, 0x0006646e, 0x0006686e, + 0x00066c6e, 0x0006706e, 0x0006746e, 0x0006786e, 0x00067c6e, + 0x0006806e, 0x0006846e, 0x0006886e, 0x00068c6e, 0x0006906e, + 0x0006946e, 0x0006986e, 0x00069c6e, 0x0006a06e, 0x0006a46e, + 0x0006a86e, 0x0006ac6e, 0x0006b06e, 0x0006b46e, 0x0006b86e, + 0x0006bc6e, 0x0006c06e, 0x0006c46e, 0x0006c86e, 0x0006cc6e, + 0x0006d06e, 0x0006d46e, 0x0006d86e, 0x0006dc6e, 0x0006e06e, + 0x0006e46e, 0x0006e86e, 0x0006ec6e, 0x0006f06e, 0x0006f46e, + 0x0006f86e, 0x0006fc6e, 0x0007006e, 0x0007046e, 0x0007086e, + 0x00070c6e, 0x0007106e, 0x0007146e, 0x0007186e, 0x00071c6e, + 0x0007206e, 0x0007246e, 0x0007286e, 0x00072c6e, 0x0007306e, + 0x0007346e, 0x0007386e, 0x00073c6e, 0x0007406e, 0x0007446e, + 0x0007486e, 0x00074c6e, 0x0007506e, 0x0007546e, 0x0007586e, + 0x00075c6e, 0x0007606e, 0x0007646e, 0x0007686e, 0x00076c6e, + 0x0007706e, 0x0007746e, 0x0007786e, 0x00077c6e, 0x0007806e, + 0x0007846e, 0x0007886e, 0x00078c6e, 0x0007906e, 0x0007946e, + 0x0007986e, 0x00079c6e, 0x0007a06e, 0x0007a46e, 0x0007a86e, + 0x0007ac6e, 0x0007b06e, 0x0007b46e, 0x0007b86e, 0x0007bc6e, + 0x0007c06e, 0x0007c46e, 0x0007c86e, 0x0007cc6e, 0x0007d06e, + 0x0007d46e, 0x0007d86e, 0x0007dc6e, 0x0007e06e, 0x0007e46e, + 0x0007e86e, 0x0007ec6e, 0x0007f06e, 0x0007f46e, 0x0007f86e, + 0x0007fc6e, 0x0000000d, 0x0000010d, 0x0000020d, 0x0000030d, + 0x0000040d, 0x0000050d, 0x0000060d, 0x0000070d, 0x0000080d, + 0x0000090d, 0x00000a0d, 0x00000b0d, 0x00000c0d, 0x00000d0d, + 0x00000e0d, 0x00000f0d, 0x0000100d, 0x0000110d, 0x0000120d, + 0x0000130d, 0x0000140d, 0x0000150d, 0x0000160d, 0x0000170d, + 0x0000180d, 0x0000190d, 0x00001a0d, 0x00001b0d, 0x00001c0d, + 0x00001d0d, 0x00001e0d, 0x00001f0d, 0x0000200d, 0x0000210d, + 0x0000220d, 0x0000230d, 0x0000240d, 0x0000250d, 0x0000260d, + 0x0000270d, 0x0000280d, 0x0000290d, 0x00002a0d, 0x00002b0d, + 0x00002c0d, 0x00002d0d, 0x00002e0d, 0x00002f0d, 0x0000300d, + 0x0000310d, 0x0000320d, 0x0000330d, 0x0000340d, 0x0000350d, + 0x0000360d, 0x0000370d, 0x0000380d, 0x0000390d, 0x00003a0d, + 0x00003b0d, 0x00003c0d, 0x00003d0d, 0x00003e0d, 0x00003f0d, + 0x0000400d, 0x0000410d, 0x0000420d, 0x0000430d, 0x0000440d, + 0x0000450d, 0x0000460d, 0x0000470d, 0x0000480d, 0x0000490d, + 0x00004a0d, 0x00004b0d, 0x00004c0d, 0x00004d0d, 0x00004e0d, + 0x00004f0d, 0x0000500d, 0x0000510d, 0x0000520d, 0x0000530d, + 0x0000540d, 0x0000550d, 0x0000560d, 0x0000570d, 0x0000580d, + 0x0000590d, 0x00005a0d, 0x00005b0d, 0x00005c0d, 0x00005d0d, + 0x00005e0d, 0x00005f0d, 0x0000600d, 0x0000610d, 0x0000620d, + 0x0000630d, 0x0000640d, 0x0000650d, 0x0000660d, 0x0000670d, + 0x0000680d, 0x0000690d, 0x00006a0d, 0x00006b0d, 0x00006c0d, + 0x00006d0d, 0x00006e0d, 0x00006f0d, 0x0000700d, 0x0000710d, + 0x0000720d, 0x0000730d, 0x0000740d, 0x0000750d, 0x0000760d, + 0x0000770d, 0x0000780d, 0x0000790d, 0x00007a0d, 0x00007b0d, + 0x00007c0d, 0x00007d0d, 0x00007e0d, 0x00007f0d, 0x0000800d, + 0x0000810d, 0x0000820d, 0x0000830d, 0x0000840d, 0x0000850d, + 0x0000860d, 0x0000870d, 0x0000880d, 0x0000890d, 0x00008a0d, + 0x00008b0d, 0x00008c0d, 0x00008d0d, 0x00008e0d, 0x00008f0d, + 0x0000900d, 0x0000910d, 0x0000920d, 0x0000930d, 0x0000940d, + 0x0000950d, 0x0000960d, 0x0000970d, 0x0000980d, 0x0000990d, + 0x00009a0d, 0x00009b0d, 0x00009c0d, 0x00009d0d, 0x00009e0d, + 0x00009f0d, 0x0000a00d, 0x0000a10d, 0x0000a20d, 0x0000a30d, + 0x0000a40d, 0x0000a50d, 0x0000a60d, 0x0000a70d, 0x0000a80d, + 0x0000a90d, 0x0000aa0d, 0x0000ab0d, 0x0000ac0d, 0x0000ad0d, + 0x0000ae0d, 0x0000af0d, 0x0000b00d, 0x0000b10d, 0x0000b20d, + 0x0000b30d, 0x0000b40d, 0x0000b50d, 0x0000b60d, 0x0000b70d, + 0x0000b80d, 0x0000b90d, 0x0000ba0d, 0x0000bb0d, 0x0000bc0d, + 0x0000bd0d, 0x0000be0d, 0x0000bf0d, 0x0000c00d, 0x0000c10d, + 0x0000c20d, 0x0000c30d, 0x0000c40d, 0x0000c50d, 0x0000c60d, + 0x0000c70d, 0x0000c80d, 0x0000c90d, 0x0000ca0d, 0x0000cb0d, + 0x0000cc0d, 0x0000cd0d, 0x0000ce0d, 0x0000cf0d, 0x0000d00d, + 0x0000d10d, 0x0000d20d, 0x0000d30d, 0x0000d40d, 0x0000d50d, + 0x0000d60d, 0x0000d70d, 0x0000d80d, 0x0000d90d, 0x0000da0d, + 0x0000db0d, 0x0000dc0d, 0x0000dd0d, 0x0000de0d, 0x0000df0d, + 0x0000e00d, 0x0000e10d, 0x0000e20d, 0x0000e30d, 0x0000e40d, + 0x0000e50d, 0x0000e60d, 0x0000e70d, 0x0000e80d, 0x0000e90d, + 0x0000ea0d, 0x0000eb0d, 0x0000ec0d, 0x0000ed0d, 0x0000ee0d, + 0x0000ef0d, 0x0000f00d, 0x0000f10d, 0x0000f20d, 0x0000f30d, + 0x0000f40d, 0x0000f50d, 0x0000f60d, 0x0000f70d, 0x0000f80d, + 0x0000f90d, 0x0000fa0d, 0x0000fb0d, 0x0000fc0d, 0x0000fd0d, + 0x0000fe0d, 0x0000ff0d, 0x0001000d, 0x0001010d, 0x0001020d, + 0x0001030d, 0x0001040d, 0x0001050d, 0x0001060d, 0x0001070d, + 0x0001080d, 0x0001090d, 0x00010a0d, 0x00010b0d, 0x00010c0d, + 0x00010d0d, 0x00010e0d, 0x00010f0d, 0x0001100d, 0x0001110d, + 0x0001120d, 0x0001130d, 0x0001140d, 0x0001150d, 0x0001160d, + 0x0001170d, 0x0001180d, 0x0001190d, 0x00011a0d, 0x00011b0d, + 0x00011c0d, 0x00011d0d, 0x00011e0d, 0x00011f0d, 0x0001200d, + 0x0001210d, 0x0001220d, 0x0001230d, 0x0001240d, 0x0001250d, + 0x0001260d, 0x0001270d, 0x0001280d, 0x0001290d, 0x00012a0d, + 0x00012b0d, 0x00012c0d, 0x00012d0d, 0x00012e0d, 0x00012f0d, + 0x0001300d, 0x0001310d, 0x0001320d, 0x0001330d, 0x0001340d, + 0x0001350d, 0x0001360d, 0x0001370d, 0x0001380d, 0x0001390d, + 0x00013a0d, 0x00013b0d, 0x00013c0d, 0x00013d0d, 0x00013e0d, + 0x00013f0d, 0x0001400d, 0x0001410d, 0x0001420d, 0x0001430d, + 0x0001440d, 0x0001450d, 0x0001460d, 0x0001470d, 0x0001480d, + 0x0001490d, 0x00014a0d, 0x00014b0d, 0x00014c0d, 0x00014d0d, + 0x00014e0d, 0x00014f0d, 0x0001500d, 0x0001510d, 0x0001520d, + 0x0001530d, 0x0001540d, 0x0001550d, 0x0001560d, 0x0001570d, + 0x0001580d, 0x0001590d, 0x00015a0d, 0x00015b0d, 0x00015c0d, + 0x00015d0d, 0x00015e0d, 0x00015f0d, 0x0001600d, 0x0001610d, + 0x0001620d, 0x0001630d, 0x0001640d, 0x0001650d, 0x0001660d, + 0x0001670d, 0x0001680d, 0x0001690d, 0x00016a0d, 0x00016b0d, + 0x00016c0d, 0x00016d0d, 0x00016e0d, 0x00016f0d, 0x0001700d, + 0x0001710d, 0x0001720d, 0x0001730d, 0x0001740d, 0x0001750d, + 0x0001760d, 0x0001770d, 0x0001780d, 0x0001790d, 0x00017a0d, + 0x00017b0d, 0x00017c0d, 0x00017d0d, 0x00017e0d, 0x00017f0d, + 0x0001800d, 0x0001810d, 0x0001820d, 0x0001830d, 0x0001840d, + 0x0001850d, 0x0001860d, 0x0001870d, 0x0001880d, 0x0001890d, + 0x00018a0d, 0x00018b0d, 0x00018c0d, 0x00018d0d, 0x00018e0d, + 0x00018f0d, 0x0001900d, 0x0001910d, 0x0001920d, 0x0001930d, + 0x0001940d, 0x0001950d, 0x0001960d, 0x0001970d, 0x0001980d, + 0x0001990d, 0x00019a0d, 0x00019b0d, 0x00019c0d, 0x00019d0d, + 0x00019e0d, 0x00019f0d, 0x0001a00d, 0x0001a10d, 0x0001a20d, + 0x0001a30d, 0x0001a40d, 0x0001a50d, 0x0001a60d, 0x0001a70d, + 0x0001a80d, 0x0001a90d, 0x0001aa0d, 0x0001ab0d, 0x0001ac0d, + 0x0001ad0d, 0x0001ae0d, 0x0001af0d, 0x0001b00d, 0x0001b10d, + 0x0001b20d, 0x0001b30d, 0x0001b40d, 0x0001b50d, 0x0001b60d, + 0x0001b70d, 0x0001b80d, 0x0001b90d, 0x0001ba0d, 0x0001bb0d, + 0x0001bc0d, 0x0001bd0d, 0x0001be0d, 0x0001bf0d, 0x0001c00d, + 0x0001c10d, 0x0001c20d, 0x0001c30d, 0x0001c40d, 0x0001c50d, + 0x0001c60d, 0x0001c70d, 0x0001c80d, 0x0001c90d, 0x0001ca0d, + 0x0001cb0d, 0x0001cc0d, 0x0001cd0d, 0x0001ce0d, 0x0001cf0d, + 0x0001d00d, 0x0001d10d, 0x0001d20d, 0x0001d30d, 0x0001d40d, + 0x0001d50d, 0x0001d60d, 0x0001d70d, 0x0001d80d, 0x0001d90d, + 0x0001da0d, 0x0001db0d, 0x0001dc0d, 0x0001dd0d, 0x0001de0d, + 0x0001df0d, 0x0001e00d, 0x0001e10d, 0x0001e20d, 0x0001e30d, + 0x0001e40d, 0x0001e50d, 0x0001e60d, 0x0001e70d, 0x0001e80d, + 0x0001e90d, 0x0001ea0d, 0x0001eb0d, 0x0001ec0d, 0x0001ed0d, + 0x0001ee0d, 0x0001ef0d, 0x0001f00d, 0x0001f10d, 0x0001f20d, + 0x0001f30d, 0x0001f40d, 0x0001f50d, 0x0001f60d, 0x0001f70d, + 0x0001f80d, 0x0001f90d, 0x0001fa0d, 0x0001fb0d, 0x0001fc0d, + 0x0001fd0d, 0x0001fe0d, 0x0001ff0d, 0x0002000d, 0x0002010d, + 0x0002020d, 0x0002030d, 0x0002040d, 0x0002050d, 0x0002060d, + 0x0002070d, 0x0002080d, 0x0002090d, 0x00020a0d, 0x00020b0d, + 0x00020c0d, 0x00020d0d, 0x00020e0d, 0x00020f0d, 0x0002100d, + 0x0002110d, 0x0002120d, 0x0002130d, 0x0002140d, 0x0002150d, + 0x0002160d, 0x0002170d, 0x0002180d, 0x0002190d, 0x00021a0d, + 0x00021b0d, 0x00021c0d, 0x00021d0d, 0x00021e0d, 0x00021f0d, + 0x0002200d, 0x0002210d, 0x0002220d, 0x0002230d, 0x0002240d, + 0x0002250d, 0x0002260d, 0x0002270d, 0x0002280d, 0x0002290d, + 0x00022a0d, 0x00022b0d, 0x00022c0d, 0x00022d0d, 0x00022e0d, + 0x00022f0d, 0x0002300d, 0x0002310d, 0x0002320d, 0x0002330d, + 0x0002340d, 0x0002350d, 0x0002360d, 0x0002370d, 0x0002380d, + 0x0002390d, 0x00023a0d, 0x00023b0d, 0x00023c0d, 0x00023d0d, + 0x00023e0d, 0x00023f0d, 0x0002400d, 0x0002410d, 0x0002420d, + 0x0002430d, 0x0002440d, 0x0002450d, 0x0002460d, 0x0002470d, + 0x0002480d, 0x0002490d, 0x00024a0d, 0x00024b0d, 0x00024c0d, + 0x00024d0d, 0x00024e0d, 0x00024f0d, 0x0002500d, 0x0002510d, + 0x0002520d, 0x0002530d, 0x0002540d, 0x0002550d, 0x0002560d, + 0x0002570d, 0x0002580d, 0x0002590d, 0x00025a0d, 0x00025b0d, + 0x00025c0d, 0x00025d0d, 0x00025e0d, 0x00025f0d, 0x0002600d, + 0x0002610d, 0x0002620d, 0x0002630d, 0x0002640d, 0x0002650d, + 0x0002660d, 0x0002670d, 0x0002680d, 0x0002690d, 0x00026a0d, + 0x00026b0d, 0x00026c0d, 0x00026d0d, 0x00026e0d, 0x00026f0d, + 0x0002700d, 0x0002710d, 0x0002720d, 0x0002730d, 0x0002740d, + 0x0002750d, 0x0002760d, 0x0002770d, 0x0002780d, 0x0002790d, + 0x00027a0d, 0x00027b0d, 0x00027c0d, 0x00027d0d, 0x00027e0d, + 0x00027f0d, 0x0002800d, 0x0002810d, 0x0002820d, 0x0002830d, + 0x0002840d, 0x0002850d, 0x0002860d, 0x0002870d, 0x0002880d, + 0x0002890d, 0x00028a0d, 0x00028b0d, 0x00028c0d, 0x00028d0d, + 0x00028e0d, 0x00028f0d, 0x0002900d, 0x0002910d, 0x0002920d, + 0x0002930d, 0x0002940d, 0x0002950d, 0x0002960d, 0x0002970d, + 0x0002980d, 0x0002990d, 0x00029a0d, 0x00029b0d, 0x00029c0d, + 0x00029d0d, 0x00029e0d, 0x00029f0d, 0x0002a00d, 0x0002a10d, + 0x0002a20d, 0x0002a30d, 0x0002a40d, 0x0002a50d, 0x0002a60d, + 0x0002a70d, 0x0002a80d, 0x0002a90d, 0x0002aa0d, 0x0002ab0d, + 0x0002ac0d, 0x0002ad0d, 0x0002ae0d, 0x0002af0d, 0x0002b00d, + 0x0002b10d, 0x0002b20d, 0x0002b30d, 0x0002b40d, 0x0002b50d, + 0x0002b60d, 0x0002b70d, 0x0002b80d, 0x0002b90d, 0x0002ba0d, + 0x0002bb0d, 0x0002bc0d, 0x0002bd0d, 0x0002be0d, 0x0002bf0d, + 0x0002c00d, 0x0002c10d, 0x0002c20d, 0x0002c30d, 0x0002c40d, + 0x0002c50d, 0x0002c60d, 0x0002c70d, 0x0002c80d, 0x0002c90d, + 0x0002ca0d, 0x0002cb0d, 0x0002cc0d, 0x0002cd0d, 0x0002ce0d, + 0x0002cf0d, 0x0002d00d, 0x0002d10d, 0x0002d20d, 0x0002d30d, + 0x0002d40d, 0x0002d50d, 0x0002d60d, 0x0002d70d, 0x0002d80d, + 0x0002d90d, 0x0002da0d, 0x0002db0d, 0x0002dc0d, 0x0002dd0d, + 0x0002de0d, 0x0002df0d, 0x0002e00d, 0x0002e10d, 0x0002e20d, + 0x0002e30d, 0x0002e40d, 0x0002e50d, 0x0002e60d, 0x0002e70d, + 0x0002e80d, 0x0002e90d, 0x0002ea0d, 0x0002eb0d, 0x0002ec0d, + 0x0002ed0d, 0x0002ee0d, 0x0002ef0d, 0x0002f00d, 0x0002f10d, + 0x0002f20d, 0x0002f30d, 0x0002f40d, 0x0002f50d, 0x0002f60d, + 0x0002f70d, 0x0002f80d, 0x0002f90d, 0x0002fa0d, 0x0002fb0d, + 0x0002fc0d, 0x0002fd0d, 0x0002fe0d, 0x0002ff0d, 0x0003000d, + 0x0003010d, 0x0003020d, 0x0003030d, 0x0003040d, 0x0003050d, + 0x0003060d, 0x0003070d, 0x0003080d, 0x0003090d, 0x00030a0d, + 0x00030b0d, 0x00030c0d, 0x00030d0d, 0x00030e0d, 0x00030f0d, + 0x0003100d, 0x0003110d, 0x0003120d, 0x0003130d, 0x0003140d, + 0x0003150d, 0x0003160d, 0x0003170d, 0x0003180d, 0x0003190d, + 0x00031a0d, 0x00031b0d, 0x00031c0d, 0x00031d0d, 0x00031e0d, + 0x00031f0d, 0x0003200d, 0x0003210d, 0x0003220d, 0x0003230d, + 0x0003240d, 0x0003250d, 0x0003260d, 0x0003270d, 0x0003280d, + 0x0003290d, 0x00032a0d, 0x00032b0d, 0x00032c0d, 0x00032d0d, + 0x00032e0d, 0x00032f0d, 0x0003300d, 0x0003310d, 0x0003320d, + 0x0003330d, 0x0003340d, 0x0003350d, 0x0003360d, 0x0003370d, + 0x0003380d, 0x0003390d, 0x00033a0d, 0x00033b0d, 0x00033c0d, + 0x00033d0d, 0x00033e0d, 0x00033f0d, 0x0003400d, 0x0003410d, + 0x0003420d, 0x0003430d, 0x0003440d, 0x0003450d, 0x0003460d, + 0x0003470d, 0x0003480d, 0x0003490d, 0x00034a0d, 0x00034b0d, + 0x00034c0d, 0x00034d0d, 0x00034e0d, 0x00034f0d, 0x0003500d, + 0x0003510d, 0x0003520d, 0x0003530d, 0x0003540d, 0x0003550d, + 0x0003560d, 0x0003570d, 0x0003580d, 0x0003590d, 0x00035a0d, + 0x00035b0d, 0x00035c0d, 0x00035d0d, 0x00035e0d, 0x00035f0d, + 0x0003600d, 0x0003610d, 0x0003620d, 0x0003630d, 0x0003640d, + 0x0003650d, 0x0003660d, 0x0003670d, 0x0003680d, 0x0003690d, + 0x00036a0d, 0x00036b0d, 0x00036c0d, 0x00036d0d, 0x00036e0d, + 0x00036f0d, 0x0003700d, 0x0003710d, 0x0003720d, 0x0003730d, + 0x0003740d, 0x0003750d, 0x0003760d, 0x0003770d, 0x0003780d, + 0x0003790d, 0x00037a0d, 0x00037b0d, 0x00037c0d, 0x00037d0d, + 0x00037e0d, 0x00037f0d, 0x0003800d, 0x0003810d, 0x0003820d, + 0x0003830d, 0x0003840d, 0x0003850d, 0x0003860d, 0x0003870d, + 0x0003880d, 0x0003890d, 0x00038a0d, 0x00038b0d, 0x00038c0d, + 0x00038d0d, 0x00038e0d, 0x00038f0d, 0x0003900d, 0x0003910d, + 0x0003920d, 0x0003930d, 0x0003940d, 0x0003950d, 0x0003960d, + 0x0003970d, 0x0003980d, 0x0003990d, 0x00039a0d, 0x00039b0d, + 0x00039c0d, 0x00039d0d, 0x00039e0d, 0x00039f0d, 0x0003a00d, + 0x0003a10d, 0x0003a20d, 0x0003a30d, 0x0003a40d, 0x0003a50d, + 0x0003a60d, 0x0003a70d, 0x0003a80d, 0x0003a90d, 0x0003aa0d, + 0x0003ab0d, 0x0003ac0d, 0x0003ad0d, 0x0003ae0d, 0x0003af0d, + 0x0003b00d, 0x0003b10d, 0x0003b20d, 0x0003b30d, 0x0003b40d, + 0x0003b50d, 0x0003b60d, 0x0003b70d, 0x0003b80d, 0x0003b90d, + 0x0003ba0d, 0x0003bb0d, 0x0003bc0d, 0x0003bd0d, 0x0003be0d, + 0x0003bf0d, 0x0003c00d, 0x0003c10d, 0x0003c20d, 0x0003c30d, + 0x0003c40d, 0x0003c50d, 0x0003c60d, 0x0003c70d, 0x0003c80d, + 0x0003c90d, 0x0003ca0d, 0x0003cb0d, 0x0003cc0d, 0x0003cd0d, + 0x0003ce0d, 0x0003cf0d, 0x0003d00d, 0x0003d10d, 0x0003d20d, + 0x0003d30d, 0x0003d40d, 0x0003d50d, 0x0003d60d, 0x0003d70d, + 0x0003d80d, 0x0003d90d, 0x0003da0d, 0x0003db0d, 0x0003dc0d, + 0x0003dd0d, 0x0003de0d, 0x0003df0d, 0x0003e00d, 0x0003e10d, + 0x0003e20d, 0x0003e30d, 0x0003e40d, 0x0003e50d, 0x0003e60d, + 0x0003e70d, 0x0003e80d, 0x0003e90d, 0x0003ea0d, 0x0003eb0d, + 0x0003ec0d, 0x0003ed0d, 0x0003ee0d, 0x0003ef0d, 0x0003f00d, + 0x0003f10d, 0x0003f20d, 0x0003f30d, 0x0003f40d, 0x0003f50d, + 0x0003f60d, 0x0003f70d, 0x0003f80d, 0x0003f90d, 0x0003fa0d, + 0x0003fb0d, 0x0003fc0d, 0x0003fd0d, 0x0003fe0d, 0x0003ff0d, + 0x0000026f, 0x0000066f, 0x00000a6f, 0x00000e6f, 0x0000126f, + 0x0000166f, 0x00001a6f, 0x00001e6f, 0x0000226f, 0x0000266f, + 0x00002a6f, 0x00002e6f, 0x0000326f, 0x0000366f, 0x00003a6f, + 0x00003e6f, 0x0000426f, 0x0000466f, 0x00004a6f, 0x00004e6f, + 0x0000526f, 0x0000566f, 0x00005a6f, 0x00005e6f, 0x0000626f, + 0x0000666f, 0x00006a6f, 0x00006e6f, 0x0000726f, 0x0000766f, + 0x00007a6f, 0x00007e6f, 0x0000826f, 0x0000866f, 0x00008a6f, + 0x00008e6f, 0x0000926f, 0x0000966f, 0x00009a6f, 0x00009e6f, + 0x0000a26f, 0x0000a66f, 0x0000aa6f, 0x0000ae6f, 0x0000b26f, + 0x0000b66f, 0x0000ba6f, 0x0000be6f, 0x0000c26f, 0x0000c66f, + 0x0000ca6f, 0x0000ce6f, 0x0000d26f, 0x0000d66f, 0x0000da6f, + 0x0000de6f, 0x0000e26f, 0x0000e66f, 0x0000ea6f, 0x0000ee6f, + 0x0000f26f, 0x0000f66f, 0x0000fa6f, 0x0000fe6f, 0x0001026f, + 0x0001066f, 0x00010a6f, 0x00010e6f, 0x0001126f, 0x0001166f, + 0x00011a6f, 0x00011e6f, 0x0001226f, 0x0001266f, 0x00012a6f, + 0x00012e6f, 0x0001326f, 0x0001366f, 0x00013a6f, 0x00013e6f, + 0x0001426f, 0x0001466f, 0x00014a6f, 0x00014e6f, 0x0001526f, + 0x0001566f, 0x00015a6f, 0x00015e6f, 0x0001626f, 0x0001666f, + 0x00016a6f, 0x00016e6f, 0x0001726f, 0x0001766f, 0x00017a6f, + 0x00017e6f, 0x0001826f, 0x0001866f, 0x00018a6f, 0x00018e6f, + 0x0001926f, 0x0001966f, 0x00019a6f, 0x00019e6f, 0x0001a26f, + 0x0001a66f, 0x0001aa6f, 0x0001ae6f, 0x0001b26f, 0x0001b66f, + 0x0001ba6f, 0x0001be6f, 0x0001c26f, 0x0001c66f, 0x0001ca6f, + 0x0001ce6f, 0x0001d26f, 0x0001d66f, 0x0001da6f, 0x0001de6f, + 0x0001e26f, 0x0001e66f, 0x0001ea6f, 0x0001ee6f, 0x0001f26f, + 0x0001f66f, 0x0001fa6f, 0x0001fe6f, 0x0002026f, 0x0002066f, + 0x00020a6f, 0x00020e6f, 0x0002126f, 0x0002166f, 0x00021a6f, + 0x00021e6f, 0x0002226f, 0x0002266f, 0x00022a6f, 0x00022e6f, + 0x0002326f, 0x0002366f, 0x00023a6f, 0x00023e6f, 0x0002426f, + 0x0002466f, 0x00024a6f, 0x00024e6f, 0x0002526f, 0x0002566f, + 0x00025a6f, 0x00025e6f, 0x0002626f, 0x0002666f, 0x00026a6f, + 0x00026e6f, 0x0002726f, 0x0002766f, 0x00027a6f, 0x00027e6f, + 0x0002826f, 0x0002866f, 0x00028a6f, 0x00028e6f, 0x0002926f, + 0x0002966f, 0x00029a6f, 0x00029e6f, 0x0002a26f, 0x0002a66f, + 0x0002aa6f, 0x0002ae6f, 0x0002b26f, 0x0002b66f, 0x0002ba6f, + 0x0002be6f, 0x0002c26f, 0x0002c66f, 0x0002ca6f, 0x0002ce6f, + 0x0002d26f, 0x0002d66f, 0x0002da6f, 0x0002de6f, 0x0002e26f, + 0x0002e66f, 0x0002ea6f, 0x0002ee6f, 0x0002f26f, 0x0002f66f, + 0x0002fa6f, 0x0002fe6f, 0x0003026f, 0x0003066f, 0x00030a6f, + 0x00030e6f, 0x0003126f, 0x0003166f, 0x00031a6f, 0x00031e6f, + 0x0003226f, 0x0003266f, 0x00032a6f, 0x00032e6f, 0x0003326f, + 0x0003366f, 0x00033a6f, 0x00033e6f, 0x0003426f, 0x0003466f, + 0x00034a6f, 0x00034e6f, 0x0003526f, 0x0003566f, 0x00035a6f, + 0x00035e6f, 0x0003626f, 0x0003666f, 0x00036a6f, 0x00036e6f, + 0x0003726f, 0x0003766f, 0x00037a6f, 0x00037e6f, 0x0003826f, + 0x0003866f, 0x00038a6f, 0x00038e6f, 0x0003926f, 0x0003966f, + 0x00039a6f, 0x00039e6f, 0x0003a26f, 0x0003a66f, 0x0003aa6f, + 0x0003ae6f, 0x0003b26f, 0x0003b66f, 0x0003ba6f, 0x0003be6f, + 0x0003c26f, 0x0003c66f, 0x0003ca6f, 0x0003ce6f, 0x0003d26f, + 0x0003d66f, 0x0003da6f, 0x0003de6f, 0x0003e26f, 0x0003e66f, + 0x0003ea6f, 0x0003ee6f, 0x0003f26f, 0x0003f66f, 0x0003fa6f, + 0x0003fe6f, 0x0004026f, 0x0004066f, 0x00040a6f, 0x00040e6f, + 0x0004126f, 0x0004166f, 0x00041a6f, 0x00041e6f, 0x0004226f, + 0x0004266f, 0x00042a6f, 0x00042e6f, 0x0004326f, 0x0004366f, + 0x00043a6f, 0x00043e6f, 0x0004426f, 0x0004466f, 0x00044a6f, + 0x00044e6f, 0x0004526f, 0x0004566f, 0x00045a6f, 0x00045e6f, + 0x0004626f, 0x0004666f, 0x00046a6f, 0x00046e6f, 0x0004726f, + 0x0004766f, 0x00047a6f, 0x00047e6f, 0x0004826f, 0x0004866f, + 0x00048a6f, 0x00048e6f, 0x0004926f, 0x0004966f, 0x00049a6f, + 0x00049e6f, 0x0004a26f, 0x0004a66f, 0x0004aa6f, 0x0004ae6f, + 0x0004b26f, 0x0004b66f, 0x0004ba6f, 0x0004be6f, 0x0004c26f, + 0x0004c66f, 0x0004ca6f, 0x0004ce6f, 0x0004d26f, 0x0004d66f, + 0x0004da6f, 0x0004de6f, 0x0004e26f, 0x0004e66f, 0x0004ea6f, + 0x0004ee6f, 0x0004f26f, 0x0004f66f, 0x0004fa6f, 0x0004fe6f, + 0x0005026f, 0x0005066f, 0x00050a6f, 0x00050e6f, 0x0005126f, + 0x0005166f, 0x00051a6f, 0x00051e6f, 0x0005226f, 0x0005266f, + 0x00052a6f, 0x00052e6f, 0x0005326f, 0x0005366f, 0x00053a6f, + 0x00053e6f, 0x0005426f, 0x0005466f, 0x00054a6f, 0x00054e6f, + 0x0005526f, 0x0005566f, 0x00055a6f, 0x00055e6f, 0x0005626f, + 0x0005666f, 0x00056a6f, 0x00056e6f, 0x0005726f, 0x0005766f, + 0x00057a6f, 0x00057e6f, 0x0005826f, 0x0005866f, 0x00058a6f, + 0x00058e6f, 0x0005926f, 0x0005966f, 0x00059a6f, 0x00059e6f, + 0x0005a26f, 0x0005a66f, 0x0005aa6f, 0x0005ae6f, 0x0005b26f, + 0x0005b66f, 0x0005ba6f, 0x0005be6f, 0x0005c26f, 0x0005c66f, + 0x0005ca6f, 0x0005ce6f, 0x0005d26f, 0x0005d66f, 0x0005da6f, + 0x0005de6f, 0x0005e26f, 0x0005e66f, 0x0005ea6f, 0x0005ee6f, + 0x0005f26f, 0x0005f66f, 0x0005fa6f, 0x0005fe6f, 0x0006026f, + 0x0006066f, 0x00060a6f, 0x00060e6f, 0x0006126f, 0x0006166f, + 0x00061a6f, 0x00061e6f, 0x0006226f, 0x0006266f, 0x00062a6f, + 0x00062e6f, 0x0006326f, 0x0006366f, 0x00063a6f, 0x00063e6f, + 0x0006426f, 0x0006466f, 0x00064a6f, 0x00064e6f, 0x0006526f, + 0x0006566f, 0x00065a6f, 0x00065e6f, 0x0006626f, 0x0006666f, + 0x00066a6f, 0x00066e6f, 0x0006726f, 0x0006766f, 0x00067a6f, + 0x00067e6f, 0x0006826f, 0x0006866f, 0x00068a6f, 0x00068e6f, + 0x0006926f, 0x0006966f, 0x00069a6f, 0x00069e6f, 0x0006a26f, + 0x0006a66f, 0x0006aa6f, 0x0006ae6f, 0x0006b26f, 0x0006b66f, + 0x0006ba6f, 0x0006be6f, 0x0006c26f, 0x0006c66f, 0x0006ca6f, + 0x0006ce6f, 0x0006d26f, 0x0006d66f, 0x0006da6f, 0x0006de6f, + 0x0006e26f, 0x0006e66f, 0x0006ea6f, 0x0006ee6f, 0x0006f26f, + 0x0006f66f, 0x0006fa6f, 0x0006fe6f, 0x0007026f, 0x0007066f, + 0x00070a6f, 0x00070e6f, 0x0007126f, 0x0007166f, 0x00071a6f, + 0x00071e6f, 0x0007226f, 0x0007266f, 0x00072a6f, 0x00072e6f, + 0x0007326f, 0x0007366f, 0x00073a6f, 0x00073e6f, 0x0007426f, + 0x0007466f, 0x00074a6f, 0x00074e6f, 0x0007526f, 0x0007566f, + 0x00075a6f, 0x00075e6f, 0x0007626f, 0x0007666f, 0x00076a6f, + 0x00076e6f, 0x0007726f, 0x0007766f, 0x00077a6f, 0x00077e6f, + 0x0007826f, 0x0007866f, 0x00078a6f, 0x00078e6f, 0x0007926f, + 0x0007966f, 0x00079a6f, 0x00079e6f, 0x0007a26f, 0x0007a66f, + 0x0007aa6f, 0x0007ae6f, 0x0007b26f, 0x0007b66f, 0x0007ba6f, + 0x0007be6f, 0x0007c26f, 0x0007c66f, 0x0007ca6f, 0x0007ce6f, + 0x0007d26f, 0x0007d66f, 0x0007da6f, 0x0007de6f, 0x0007e26f, + 0x0007e66f, 0x0007ea6f, 0x0007ee6f, 0x0007f26f, 0x0007f66f, + 0x0007fa6f, 0x0007fe6f, 0x0008026f, 0x0008066f, 0x00080a6f, + 0x00080e6f, 0x0008126f, 0x0008166f, 0x00081a6f, 0x00081e6f, + 0x0008226f, 0x0008266f, 0x00082a6f, 0x00082e6f, 0x0008326f, + 0x0008366f, 0x00083a6f, 0x00083e6f, 0x0008426f, 0x0008466f, + 0x00084a6f, 0x00084e6f, 0x0008526f, 0x0008566f, 0x00085a6f, + 0x00085e6f, 0x0008626f, 0x0008666f, 0x00086a6f, 0x00086e6f, + 0x0008726f, 0x0008766f, 0x00087a6f, 0x00087e6f, 0x0008826f, + 0x0008866f, 0x00088a6f, 0x00088e6f, 0x0008926f, 0x0008966f, + 0x00089a6f, 0x00089e6f, 0x0008a26f, 0x0008a66f, 0x0008aa6f, + 0x0008ae6f, 0x0008b26f, 0x0008b66f, 0x0008ba6f, 0x0008be6f, + 0x0008c26f, 0x0008c66f, 0x0008ca6f, 0x0008ce6f, 0x0008d26f, + 0x0008d66f, 0x0008da6f, 0x0008de6f, 0x0008e26f, 0x0008e66f, + 0x0008ea6f, 0x0008ee6f, 0x0008f26f, 0x0008f66f, 0x0008fa6f, + 0x0008fe6f, 0x0009026f, 0x0009066f, 0x00090a6f, 0x00090e6f, + 0x0009126f, 0x0009166f, 0x00091a6f, 0x00091e6f, 0x0009226f, + 0x0009266f, 0x00092a6f, 0x00092e6f, 0x0009326f, 0x0009366f, + 0x00093a6f, 0x00093e6f, 0x0009426f, 0x0009466f, 0x00094a6f, + 0x00094e6f, 0x0009526f, 0x0009566f, 0x00095a6f, 0x00095e6f, + 0x0009626f, 0x0009666f, 0x00096a6f, 0x00096e6f, 0x0009726f, + 0x0009766f, 0x00097a6f, 0x00097e6f, 0x0009826f, 0x0009866f, + 0x00098a6f, 0x00098e6f, 0x0009926f, 0x0009966f, 0x00099a6f, + 0x00099e6f, 0x0009a26f, 0x0009a66f, 0x0009aa6f, 0x0009ae6f, + 0x0009b26f, 0x0009b66f, 0x0009ba6f, 0x0009be6f, 0x0009c26f, + 0x0009c66f, 0x0009ca6f, 0x0009ce6f, 0x0009d26f, 0x0009d66f, + 0x0009da6f, 0x0009de6f, 0x0009e26f, 0x0009e66f, 0x0009ea6f, + 0x0009ee6f, 0x0009f26f, 0x0009f66f, 0x0009fa6f, 0x0009fe6f, + 0x000a026f, 0x000a066f, 0x000a0a6f, 0x000a0e6f, 0x000a126f, + 0x000a166f, 0x000a1a6f, 0x000a1e6f, 0x000a226f, 0x000a266f, + 0x000a2a6f, 0x000a2e6f, 0x000a326f, 0x000a366f, 0x000a3a6f, + 0x000a3e6f, 0x000a426f, 0x000a466f, 0x000a4a6f, 0x000a4e6f, + 0x000a526f, 0x000a566f, 0x000a5a6f, 0x000a5e6f, 0x000a626f, + 0x000a666f, 0x000a6a6f, 0x000a6e6f, 0x000a726f, 0x000a766f, + 0x000a7a6f, 0x000a7e6f, 0x000a826f, 0x000a866f, 0x000a8a6f, + 0x000a8e6f, 0x000a926f, 0x000a966f, 0x000a9a6f, 0x000a9e6f, + 0x000aa26f, 0x000aa66f, 0x000aaa6f, 0x000aae6f, 0x000ab26f, + 0x000ab66f, 0x000aba6f, 0x000abe6f, 0x000ac26f, 0x000ac66f, + 0x000aca6f, 0x000ace6f, 0x000ad26f, 0x000ad66f, 0x000ada6f, + 0x000ade6f, 0x000ae26f, 0x000ae66f, 0x000aea6f, 0x000aee6f, + 0x000af26f, 0x000af66f, 0x000afa6f, 0x000afe6f, 0x000b026f, + 0x000b066f, 0x000b0a6f, 0x000b0e6f, 0x000b126f, 0x000b166f, + 0x000b1a6f, 0x000b1e6f, 0x000b226f, 0x000b266f, 0x000b2a6f, + 0x000b2e6f, 0x000b326f, 0x000b366f, 0x000b3a6f, 0x000b3e6f, + 0x000b426f, 0x000b466f, 0x000b4a6f, 0x000b4e6f, 0x000b526f, + 0x000b566f, 0x000b5a6f, 0x000b5e6f, 0x000b626f, 0x000b666f, + 0x000b6a6f, 0x000b6e6f, 0x000b726f, 0x000b766f, 0x000b7a6f, + 0x000b7e6f, 0x000b826f, 0x000b866f, 0x000b8a6f, 0x000b8e6f, + 0x000b926f, 0x000b966f, 0x000b9a6f, 0x000b9e6f, 0x000ba26f, + 0x000ba66f, 0x000baa6f, 0x000bae6f, 0x000bb26f, 0x000bb66f, + 0x000bba6f, 0x000bbe6f, 0x000bc26f, 0x000bc66f, 0x000bca6f, + 0x000bce6f, 0x000bd26f, 0x000bd66f, 0x000bda6f, 0x000bde6f, + 0x000be26f, 0x000be66f, 0x000bea6f, 0x000bee6f, 0x000bf26f, + 0x000bf66f, 0x000bfa6f, 0x000bfe6f, 0x000c026f, 0x000c066f, + 0x000c0a6f, 0x000c0e6f, 0x000c126f, 0x000c166f, 0x000c1a6f, + 0x000c1e6f, 0x000c226f, 0x000c266f, 0x000c2a6f, 0x000c2e6f, + 0x000c326f, 0x000c366f, 0x000c3a6f, 0x000c3e6f, 0x000c426f, + 0x000c466f, 0x000c4a6f, 0x000c4e6f, 0x000c526f, 0x000c566f, + 0x000c5a6f, 0x000c5e6f, 0x000c626f, 0x000c666f, 0x000c6a6f, + 0x000c6e6f, 0x000c726f, 0x000c766f, 0x000c7a6f, 0x000c7e6f, + 0x000c826f, 0x000c866f, 0x000c8a6f, 0x000c8e6f, 0x000c926f, + 0x000c966f, 0x000c9a6f, 0x000c9e6f, 0x000ca26f, 0x000ca66f, + 0x000caa6f, 0x000cae6f, 0x000cb26f, 0x000cb66f, 0x000cba6f, + 0x000cbe6f, 0x000cc26f, 0x000cc66f, 0x000cca6f, 0x000cce6f, + 0x000cd26f, 0x000cd66f, 0x000cda6f, 0x000cde6f, 0x000ce26f, + 0x000ce66f, 0x000cea6f, 0x000cee6f, 0x000cf26f, 0x000cf66f, + 0x000cfa6f, 0x000cfe6f, 0x000d026f, 0x000d066f, 0x000d0a6f, + 0x000d0e6f, 0x000d126f, 0x000d166f, 0x000d1a6f, 0x000d1e6f, + 0x000d226f, 0x000d266f, 0x000d2a6f, 0x000d2e6f, 0x000d326f, + 0x000d366f, 0x000d3a6f, 0x000d3e6f, 0x000d426f, 0x000d466f, + 0x000d4a6f, 0x000d4e6f, 0x000d526f, 0x000d566f, 0x000d5a6f, + 0x000d5e6f, 0x000d626f, 0x000d666f, 0x000d6a6f, 0x000d6e6f, + 0x000d726f, 0x000d766f, 0x000d7a6f, 0x000d7e6f, 0x000d826f, + 0x000d866f, 0x000d8a6f, 0x000d8e6f, 0x000d926f, 0x000d966f, + 0x000d9a6f, 0x000d9e6f, 0x000da26f, 0x000da66f, 0x000daa6f, + 0x000dae6f, 0x000db26f, 0x000db66f, 0x000dba6f, 0x000dbe6f, + 0x000dc26f, 0x000dc66f, 0x000dca6f, 0x000dce6f, 0x000dd26f, + 0x000dd66f, 0x000dda6f, 0x000dde6f, 0x000de26f, 0x000de66f, + 0x000dea6f, 0x000dee6f, 0x000df26f, 0x000df66f, 0x000dfa6f, + 0x000dfe6f, 0x000e026f, 0x000e066f, 0x000e0a6f, 0x000e0e6f, + 0x000e126f, 0x000e166f, 0x000e1a6f, 0x000e1e6f, 0x000e226f, + 0x000e266f, 0x000e2a6f, 0x000e2e6f, 0x000e326f, 0x000e366f, + 0x000e3a6f, 0x000e3e6f, 0x000e426f, 0x000e466f, 0x000e4a6f, + 0x000e4e6f, 0x000e526f, 0x000e566f, 0x000e5a6f, 0x000e5e6f, + 0x000e626f, 0x000e666f, 0x000e6a6f, 0x000e6e6f, 0x000e726f, + 0x000e766f, 0x000e7a6f, 0x000e7e6f, 0x000e826f, 0x000e866f, + 0x000e8a6f, 0x000e8e6f, 0x000e926f, 0x000e966f, 0x000e9a6f, + 0x000e9e6f, 0x000ea26f, 0x000ea66f, 0x000eaa6f, 0x000eae6f, + 0x000eb26f, 0x000eb66f, 0x000eba6f, 0x000ebe6f, 0x000ec26f, + 0x000ec66f, 0x000eca6f, 0x000ece6f, 0x000ed26f, 0x000ed66f, + 0x000eda6f, 0x000ede6f, 0x000ee26f, 0x000ee66f, 0x000eea6f, + 0x000eee6f, 0x000ef26f, 0x000ef66f, 0x000efa6f, 0x000efe6f, + 0x000f026f, 0x000f066f, 0x000f0a6f, 0x000f0e6f, 0x000f126f, + 0x000f166f, 0x000f1a6f, 0x000f1e6f, 0x000f226f, 0x000f266f, + 0x000f2a6f, 0x000f2e6f, 0x000f326f, 0x000f366f, 0x000f3a6f, + 0x000f3e6f, 0x000f426f, 0x000f466f, 0x000f4a6f, 0x000f4e6f, + 0x000f526f, 0x000f566f, 0x000f5a6f, 0x000f5e6f, 0x000f626f, + 0x000f666f, 0x000f6a6f, 0x000f6e6f, 0x000f726f, 0x000f766f, + 0x000f7a6f, 0x000f7e6f, 0x000f826f, 0x000f866f, 0x000f8a6f, + 0x000f8e6f, 0x000f926f, 0x000f966f, 0x000f9a6f, 0x000f9e6f, + 0x000fa26f, 0x000fa66f, 0x000faa6f, 0x000fae6f, 0x000fb26f, + 0x000fb66f, 0x000fba6f, 0x000fbe6f, 0x000fc26f, 0x000fc66f, + 0x000fca6f, 0x000fce6f, 0x000fd26f, 0x000fd66f, 0x000fda6f, + 0x000fde6f, 0x000fe26f, 0x000fe66f, 0x000fea6f, 0x000fee6f, + 0x000ff26f, 0x000ff66f, 0x000ffa6f, 0x000ffe6f, 0x000001cf, + 0x000003cf, 0x000005cf, 0x000007cf, 0x000009cf, 0x00000bcf, + 0x00000dcf, 0x00000fcf, 0x000011cf, 0x000013cf, 0x000015cf, + 0x000017cf, 0x000019cf, 0x00001bcf, 0x00001dcf, 0x00001fcf, + 0x000021cf, 0x000023cf, 0x000025cf, 0x000027cf, 0x000029cf, + 0x00002bcf, 0x00002dcf, 0x00002fcf, 0x000031cf, 0x000033cf, + 0x000035cf, 0x000037cf, 0x000039cf, 0x00003bcf, 0x00003dcf, + 0x00003fcf, 0x000041cf, 0x000043cf, 0x000045cf, 0x000047cf, + 0x000049cf, 0x00004bcf, 0x00004dcf, 0x00004fcf, 0x000051cf, + 0x000053cf, 0x000055cf, 0x000057cf, 0x000059cf, 0x00005bcf, + 0x00005dcf, 0x00005fcf, 0x000061cf, 0x000063cf, 0x000065cf, + 0x000067cf, 0x000069cf, 0x00006bcf, 0x00006dcf, 0x00006fcf, + 0x000071cf, 0x000073cf, 0x000075cf, 0x000077cf, 0x000079cf, + 0x00007bcf, 0x00007dcf, 0x00007fcf, 0x000081cf, 0x000083cf, + 0x000085cf, 0x000087cf, 0x000089cf, 0x00008bcf, 0x00008dcf, + 0x00008fcf, 0x000091cf, 0x000093cf, 0x000095cf, 0x000097cf, + 0x000099cf, 0x00009bcf, 0x00009dcf, 0x00009fcf, 0x0000a1cf, + 0x0000a3cf, 0x0000a5cf, 0x0000a7cf, 0x0000a9cf, 0x0000abcf, + 0x0000adcf, 0x0000afcf, 0x0000b1cf, 0x0000b3cf, 0x0000b5cf, + 0x0000b7cf, 0x0000b9cf, 0x0000bbcf, 0x0000bdcf, 0x0000bfcf, + 0x0000c1cf, 0x0000c3cf, 0x0000c5cf, 0x0000c7cf, 0x0000c9cf, + 0x0000cbcf, 0x0000cdcf, 0x0000cfcf, 0x0000d1cf, 0x0000d3cf, + 0x0000d5cf, 0x0000d7cf, 0x0000d9cf, 0x0000dbcf, 0x0000ddcf, + 0x0000dfcf, 0x0000e1cf, 0x0000e3cf, 0x0000e5cf, 0x0000e7cf, + 0x0000e9cf, 0x0000ebcf, 0x0000edcf, 0x0000efcf, 0x0000f1cf, + 0x0000f3cf, 0x0000f5cf, 0x0000f7cf, 0x0000f9cf, 0x0000fbcf, + 0x0000fdcf, 0x0000ffcf, 0x000101cf, 0x000103cf, 0x000105cf, + 0x000107cf, 0x000109cf, 0x00010bcf, 0x00010dcf, 0x00010fcf, + 0x000111cf, 0x000113cf, 0x000115cf, 0x000117cf, 0x000119cf, + 0x00011bcf, 0x00011dcf, 0x00011fcf, 0x000121cf, 0x000123cf, + 0x000125cf, 0x000127cf, 0x000129cf, 0x00012bcf, 0x00012dcf, + 0x00012fcf, 0x000131cf, 0x000133cf, 0x000135cf, 0x000137cf, + 0x000139cf, 0x00013bcf, 0x00013dcf, 0x00013fcf, 0x000141cf, + 0x000143cf, 0x000145cf, 0x000147cf, 0x000149cf, 0x00014bcf, + 0x00014dcf, 0x00014fcf, 0x000151cf, 0x000153cf, 0x000155cf, + 0x000157cf, 0x000159cf, 0x00015bcf, 0x00015dcf, 0x00015fcf, + 0x000161cf, 0x000163cf, 0x000165cf, 0x000167cf, 0x000169cf, + 0x00016bcf, 0x00016dcf, 0x00016fcf, 0x000171cf, 0x000173cf, + 0x000175cf, 0x000177cf, 0x000179cf, 0x00017bcf, 0x00017dcf, + 0x00017fcf, 0x000181cf, 0x000183cf, 0x000185cf, 0x000187cf, + 0x000189cf, 0x00018bcf, 0x00018dcf, 0x00018fcf, 0x000191cf, + 0x000193cf, 0x000195cf, 0x000197cf, 0x000199cf, 0x00019bcf, + 0x00019dcf, 0x00019fcf, 0x0001a1cf, 0x0001a3cf, 0x0001a5cf, + 0x0001a7cf, 0x0001a9cf, 0x0001abcf, 0x0001adcf, 0x0001afcf, + 0x0001b1cf, 0x0001b3cf, 0x0001b5cf, 0x0001b7cf, 0x0001b9cf, + 0x0001bbcf, 0x0001bdcf, 0x0001bfcf, 0x0001c1cf, 0x0001c3cf, + 0x0001c5cf, 0x0001c7cf, 0x0001c9cf, 0x0001cbcf, 0x0001cdcf, + 0x0001cfcf, 0x0001d1cf, 0x0001d3cf, 0x0001d5cf, 0x0001d7cf, + 0x0001d9cf, 0x0001dbcf, 0x0001ddcf, 0x0001dfcf, 0x0001e1cf, + 0x0001e3cf, 0x0001e5cf, 0x0001e7cf, 0x0001e9cf, 0x0001ebcf, + 0x0001edcf, 0x0001efcf, 0x0001f1cf, 0x0001f3cf, 0x0001f5cf, + 0x0001f7cf, 0x0001f9cf, 0x0001fbcf, 0x0001fdcf, 0x0001ffcf, + 0x000201cf, 0x000203cf, 0x000205cf, 0x000207cf, 0x000209cf, + 0x00020bcf, 0x00020dcf, 0x00020fcf, 0x000211cf, 0x000213cf, + 0x000215cf, 0x000217cf, 0x000219cf, 0x00021bcf, 0x00021dcf, + 0x00021fcf, 0x000221cf, 0x000223cf, 0x000225cf, 0x000227cf, + 0x000229cf, 0x00022bcf, 0x00022dcf, 0x00022fcf, 0x000231cf, + 0x000233cf, 0x000235cf, 0x000237cf, 0x000239cf, 0x00023bcf, + 0x00023dcf, 0x00023fcf, 0x000241cf, 0x000243cf, 0x000245cf, + 0x000247cf, 0x000249cf, 0x00024bcf, 0x00024dcf, 0x00024fcf, + 0x000251cf, 0x000253cf, 0x000255cf, 0x000257cf, 0x000259cf, + 0x00025bcf, 0x00025dcf, 0x00025fcf, 0x000261cf, 0x000263cf, + 0x000265cf, 0x000267cf, 0x000269cf, 0x00026bcf, 0x00026dcf, + 0x00026fcf, 0x000271cf, 0x000273cf, 0x000275cf, 0x000277cf, + 0x000279cf, 0x00027bcf, 0x00027dcf, 0x00027fcf, 0x000281cf, + 0x000283cf, 0x000285cf, 0x000287cf, 0x000289cf, 0x00028bcf, + 0x00028dcf, 0x00028fcf, 0x000291cf, 0x000293cf, 0x000295cf, + 0x000297cf, 0x000299cf, 0x00029bcf, 0x00029dcf, 0x00029fcf, + 0x0002a1cf, 0x0002a3cf, 0x0002a5cf, 0x0002a7cf, 0x0002a9cf, + 0x0002abcf, 0x0002adcf, 0x0002afcf, 0x0002b1cf, 0x0002b3cf, + 0x0002b5cf, 0x0002b7cf, 0x0002b9cf, 0x0002bbcf, 0x0002bdcf, + 0x0002bfcf, 0x0002c1cf, 0x0002c3cf, 0x0002c5cf, 0x0002c7cf, + 0x0002c9cf, 0x0002cbcf, 0x0002cdcf, 0x0002cfcf, 0x0002d1cf, + 0x0002d3cf, 0x0002d5cf, 0x0002d7cf, 0x0002d9cf, 0x0002dbcf, + 0x0002ddcf, 0x0002dfcf, 0x0002e1cf, 0x0002e3cf, 0x0002e5cf, + 0x0002e7cf, 0x0002e9cf, 0x0002ebcf, 0x0002edcf, 0x0002efcf, + 0x0002f1cf, 0x0002f3cf, 0x0002f5cf, 0x0002f7cf, 0x0002f9cf, + 0x0002fbcf, 0x0002fdcf, 0x0002ffcf, 0x000301cf, 0x000303cf, + 0x000305cf, 0x000307cf, 0x000309cf, 0x00030bcf, 0x00030dcf, + 0x00030fcf, 0x000311cf, 0x000313cf, 0x000315cf, 0x000317cf, + 0x000319cf, 0x00031bcf, 0x00031dcf, 0x00031fcf, 0x000321cf, + 0x000323cf, 0x000325cf, 0x000327cf, 0x000329cf, 0x00032bcf, + 0x00032dcf, 0x00032fcf, 0x000331cf, 0x000333cf, 0x000335cf, + 0x000337cf, 0x000339cf, 0x00033bcf, 0x00033dcf, 0x00033fcf, + 0x000341cf, 0x000343cf, 0x000345cf, 0x000347cf, 0x000349cf, + 0x00034bcf, 0x00034dcf, 0x00034fcf, 0x000351cf, 0x000353cf, + 0x000355cf, 0x000357cf, 0x000359cf, 0x00035bcf, 0x00035dcf, + 0x00035fcf, 0x000361cf, 0x000363cf, 0x000365cf, 0x000367cf, + 0x000369cf, 0x00036bcf, 0x00036dcf, 0x00036fcf, 0x000371cf, + 0x000373cf, 0x000375cf, 0x000377cf, 0x000379cf, 0x00037bcf, + 0x00037dcf, 0x00037fcf, 0x000381cf, 0x000383cf, 0x000385cf, + 0x000387cf, 0x000389cf, 0x00038bcf, 0x00038dcf, 0x00038fcf, + 0x000391cf, 0x000393cf, 0x000395cf, 0x000397cf, 0x000399cf, + 0x00039bcf, 0x00039dcf, 0x00039fcf, 0x0003a1cf, 0x0003a3cf, + 0x0003a5cf, 0x0003a7cf, 0x0003a9cf, 0x0003abcf, 0x0003adcf, + 0x0003afcf, 0x0003b1cf, 0x0003b3cf, 0x0003b5cf, 0x0003b7cf, + 0x0003b9cf, 0x0003bbcf, 0x0003bdcf, 0x0003bfcf, 0x0003c1cf, + 0x0003c3cf, 0x0003c5cf, 0x0003c7cf, 0x0003c9cf, 0x0003cbcf, + 0x0003cdcf, 0x0003cfcf, 0x0003d1cf, 0x0003d3cf, 0x0003d5cf, + 0x0003d7cf, 0x0003d9cf, 0x0003dbcf, 0x0003ddcf, 0x0003dfcf, + 0x0003e1cf, 0x0003e3cf, 0x0003e5cf, 0x0003e7cf, 0x0003e9cf, + 0x0003ebcf, 0x0003edcf, 0x0003efcf, 0x0003f1cf, 0x0003f3cf, + 0x0003f5cf, 0x0003f7cf, 0x0003f9cf, 0x0003fbcf, 0x0003fdcf, + 0x0003ffcf, 0x000401cf, 0x000403cf, 0x000405cf, 0x000407cf, + 0x000409cf, 0x00040bcf, 0x00040dcf, 0x00040fcf, 0x000411cf, + 0x000413cf, 0x000415cf, 0x000417cf, 0x000419cf, 0x00041bcf, + 0x00041dcf, 0x00041fcf, 0x000421cf, 0x000423cf, 0x000425cf, + 0x000427cf, 0x000429cf, 0x00042bcf, 0x00042dcf, 0x00042fcf, + 0x000431cf, 0x000433cf, 0x000435cf, 0x000437cf, 0x000439cf, + 0x00043bcf, 0x00043dcf, 0x00043fcf, 0x000441cf, 0x000443cf, + 0x000445cf, 0x000447cf, 0x000449cf, 0x00044bcf, 0x00044dcf, + 0x00044fcf, 0x000451cf, 0x000453cf, 0x000455cf, 0x000457cf, + 0x000459cf, 0x00045bcf, 0x00045dcf, 0x00045fcf, 0x000461cf, + 0x000463cf, 0x000465cf, 0x000467cf, 0x000469cf, 0x00046bcf, + 0x00046dcf, 0x00046fcf, 0x000471cf, 0x000473cf, 0x000475cf, + 0x000477cf, 0x000479cf, 0x00047bcf, 0x00047dcf, 0x00047fcf, + 0x000481cf, 0x000483cf, 0x000485cf, 0x000487cf, 0x000489cf, + 0x00048bcf, 0x00048dcf, 0x00048fcf, 0x000491cf, 0x000493cf, + 0x000495cf, 0x000497cf, 0x000499cf, 0x00049bcf, 0x00049dcf, + 0x00049fcf, 0x0004a1cf, 0x0004a3cf, 0x0004a5cf, 0x0004a7cf, + 0x0004a9cf, 0x0004abcf, 0x0004adcf, 0x0004afcf, 0x0004b1cf, + 0x0004b3cf, 0x0004b5cf, 0x0004b7cf, 0x0004b9cf, 0x0004bbcf, + 0x0004bdcf, 0x0004bfcf, 0x0004c1cf, 0x0004c3cf, 0x0004c5cf, + 0x0004c7cf, 0x0004c9cf, 0x0004cbcf, 0x0004cdcf, 0x0004cfcf, + 0x0004d1cf, 0x0004d3cf, 0x0004d5cf, 0x0004d7cf, 0x0004d9cf, + 0x0004dbcf, 0x0004ddcf, 0x0004dfcf, 0x0004e1cf, 0x0004e3cf, + 0x0004e5cf, 0x0004e7cf, 0x0004e9cf, 0x0004ebcf, 0x0004edcf, + 0x0004efcf, 0x0004f1cf, 0x0004f3cf, 0x0004f5cf, 0x0004f7cf, + 0x0004f9cf, 0x0004fbcf, 0x0004fdcf, 0x0004ffcf, 0x000501cf, + 0x000503cf, 0x000505cf, 0x000507cf, 0x000509cf, 0x00050bcf, + 0x00050dcf, 0x00050fcf, 0x000511cf, 0x000513cf, 0x000515cf, + 0x000517cf, 0x000519cf, 0x00051bcf, 0x00051dcf, 0x00051fcf, + 0x000521cf, 0x000523cf, 0x000525cf, 0x000527cf, 0x000529cf, + 0x00052bcf, 0x00052dcf, 0x00052fcf, 0x000531cf, 0x000533cf, + 0x000535cf, 0x000537cf, 0x000539cf, 0x00053bcf, 0x00053dcf, + 0x00053fcf, 0x000541cf, 0x000543cf, 0x000545cf, 0x000547cf, + 0x000549cf, 0x00054bcf, 0x00054dcf, 0x00054fcf, 0x000551cf, + 0x000553cf, 0x000555cf, 0x000557cf, 0x000559cf, 0x00055bcf, + 0x00055dcf, 0x00055fcf, 0x000561cf, 0x000563cf, 0x000565cf, + 0x000567cf, 0x000569cf, 0x00056bcf, 0x00056dcf, 0x00056fcf, + 0x000571cf, 0x000573cf, 0x000575cf, 0x000577cf, 0x000579cf, + 0x00057bcf, 0x00057dcf, 0x00057fcf, 0x000581cf, 0x000583cf, + 0x000585cf, 0x000587cf, 0x000589cf, 0x00058bcf, 0x00058dcf, + 0x00058fcf, 0x000591cf, 0x000593cf, 0x000595cf, 0x000597cf, + 0x000599cf, 0x00059bcf, 0x00059dcf, 0x00059fcf, 0x0005a1cf, + 0x0005a3cf, 0x0005a5cf, 0x0005a7cf, 0x0005a9cf, 0x0005abcf, + 0x0005adcf, 0x0005afcf, 0x0005b1cf, 0x0005b3cf, 0x0005b5cf, + 0x0005b7cf, 0x0005b9cf, 0x0005bbcf, 0x0005bdcf, 0x0005bfcf, + 0x0005c1cf, 0x0005c3cf, 0x0005c5cf, 0x0005c7cf, 0x0005c9cf, + 0x0005cbcf, 0x0005cdcf, 0x0005cfcf, 0x0005d1cf, 0x0005d3cf, + 0x0005d5cf, 0x0005d7cf, 0x0005d9cf, 0x0005dbcf, 0x0005ddcf, + 0x0005dfcf, 0x0005e1cf, 0x0005e3cf, 0x0005e5cf, 0x0005e7cf, + 0x0005e9cf, 0x0005ebcf, 0x0005edcf, 0x0005efcf, 0x0005f1cf, + 0x0005f3cf, 0x0005f5cf, 0x0005f7cf, 0x0005f9cf, 0x0005fbcf, + 0x0005fdcf, 0x0005ffcf, 0x000601cf, 0x000603cf, 0x000605cf, + 0x000607cf, 0x000609cf, 0x00060bcf, 0x00060dcf, 0x00060fcf, + 0x000611cf, 0x000613cf, 0x000615cf, 0x000617cf, 0x000619cf, + 0x00061bcf, 0x00061dcf, 0x00061fcf, 0x000621cf, 0x000623cf, + 0x000625cf, 0x000627cf, 0x000629cf, 0x00062bcf, 0x00062dcf, + 0x00062fcf, 0x000631cf, 0x000633cf, 0x000635cf, 0x000637cf, + 0x000639cf, 0x00063bcf, 0x00063dcf, 0x00063fcf, 0x000641cf, + 0x000643cf, 0x000645cf, 0x000647cf, 0x000649cf, 0x00064bcf, + 0x00064dcf, 0x00064fcf, 0x000651cf, 0x000653cf, 0x000655cf, + 0x000657cf, 0x000659cf, 0x00065bcf, 0x00065dcf, 0x00065fcf, + 0x000661cf, 0x000663cf, 0x000665cf, 0x000667cf, 0x000669cf, + 0x00066bcf, 0x00066dcf, 0x00066fcf, 0x000671cf, 0x000673cf, + 0x000675cf, 0x000677cf, 0x000679cf, 0x00067bcf, 0x00067dcf, + 0x00067fcf, 0x000681cf, 0x000683cf, 0x000685cf, 0x000687cf, + 0x000689cf, 0x00068bcf, 0x00068dcf, 0x00068fcf, 0x000691cf, + 0x000693cf, 0x000695cf, 0x000697cf, 0x000699cf, 0x00069bcf, + 0x00069dcf, 0x00069fcf, 0x0006a1cf, 0x0006a3cf, 0x0006a5cf, + 0x0006a7cf, 0x0006a9cf, 0x0006abcf, 0x0006adcf, 0x0006afcf, + 0x0006b1cf, 0x0006b3cf, 0x0006b5cf, 0x0006b7cf, 0x0006b9cf, + 0x0006bbcf, 0x0006bdcf, 0x0006bfcf, 0x0006c1cf, 0x0006c3cf, + 0x0006c5cf, 0x0006c7cf, 0x0006c9cf, 0x0006cbcf, 0x0006cdcf, + 0x0006cfcf, 0x0006d1cf, 0x0006d3cf, 0x0006d5cf, 0x0006d7cf, + 0x0006d9cf, 0x0006dbcf, 0x0006ddcf, 0x0006dfcf, 0x0006e1cf, + 0x0006e3cf, 0x0006e5cf, 0x0006e7cf, 0x0006e9cf, 0x0006ebcf, + 0x0006edcf, 0x0006efcf, 0x0006f1cf, 0x0006f3cf, 0x0006f5cf, + 0x0006f7cf, 0x0006f9cf, 0x0006fbcf, 0x0006fdcf, 0x0006ffcf, + 0x000701cf, 0x000703cf, 0x000705cf, 0x000707cf, 0x000709cf, + 0x00070bcf, 0x00070dcf, 0x00070fcf, 0x000711cf, 0x000713cf, + 0x000715cf, 0x000717cf, 0x000719cf, 0x00071bcf, 0x00071dcf, + 0x00071fcf, 0x000721cf, 0x000723cf, 0x000725cf, 0x000727cf, + 0x000729cf, 0x00072bcf, 0x00072dcf, 0x00072fcf, 0x000731cf, + 0x000733cf, 0x000735cf, 0x000737cf, 0x000739cf, 0x00073bcf, + 0x00073dcf, 0x00073fcf, 0x000741cf, 0x000743cf, 0x000745cf, + 0x000747cf, 0x000749cf, 0x00074bcf, 0x00074dcf, 0x00074fcf, + 0x000751cf, 0x000753cf, 0x000755cf, 0x000757cf, 0x000759cf, + 0x00075bcf, 0x00075dcf, 0x00075fcf, 0x000761cf, 0x000763cf, + 0x000765cf, 0x000767cf, 0x000769cf, 0x00076bcf, 0x00076dcf, + 0x00076fcf, 0x000771cf, 0x000773cf, 0x000775cf, 0x000777cf, + 0x000779cf, 0x00077bcf, 0x00077dcf, 0x00077fcf, 0x000781cf, + 0x000783cf, 0x000785cf, 0x000787cf, 0x000789cf, 0x00078bcf, + 0x00078dcf, 0x00078fcf, 0x000791cf, 0x000793cf, 0x000795cf, + 0x000797cf, 0x000799cf, 0x00079bcf, 0x00079dcf, 0x00079fcf, + 0x0007a1cf, 0x0007a3cf, 0x0007a5cf, 0x0007a7cf, 0x0007a9cf, + 0x0007abcf, 0x0007adcf, 0x0007afcf, 0x0007b1cf, 0x0007b3cf, + 0x0007b5cf, 0x0007b7cf, 0x0007b9cf, 0x0007bbcf, 0x0007bdcf, + 0x0007bfcf, 0x0007c1cf, 0x0007c3cf, 0x0007c5cf, 0x0007c7cf, + 0x0007c9cf, 0x0007cbcf, 0x0007cdcf, 0x0007cfcf, 0x0007d1cf, + 0x0007d3cf, 0x0007d5cf, 0x0007d7cf, 0x0007d9cf, 0x0007dbcf, + 0x0007ddcf, 0x0007dfcf, 0x0007e1cf, 0x0007e3cf, 0x0007e5cf, + 0x0007e7cf, 0x0007e9cf, 0x0007ebcf, 0x0007edcf, 0x0007efcf, + 0x0007f1cf, 0x0007f3cf, 0x0007f5cf, 0x0007f7cf, 0x0007f9cf, + 0x0007fbcf, 0x0007fdcf, 0x0007ffcf, 0x000801cf, 0x000803cf, + 0x000805cf, 0x000807cf, 0x000809cf, 0x00080bcf, 0x00080dcf, + 0x00080fcf, 0x000811cf, 0x000813cf, 0x000815cf, 0x000817cf, + 0x000819cf, 0x00081bcf, 0x00081dcf, 0x00081fcf, 0x000821cf, + 0x000823cf, 0x000825cf, 0x000827cf, 0x000829cf, 0x00082bcf, + 0x00082dcf, 0x00082fcf, 0x000831cf, 0x000833cf, 0x000835cf, + 0x000837cf, 0x000839cf, 0x00083bcf, 0x00083dcf, 0x00083fcf, + 0x000841cf, 0x000843cf, 0x000845cf, 0x000847cf, 0x000849cf, + 0x00084bcf, 0x00084dcf, 0x00084fcf, 0x000851cf, 0x000853cf, + 0x000855cf, 0x000857cf, 0x000859cf, 0x00085bcf, 0x00085dcf, + 0x00085fcf, 0x000861cf, 0x000863cf, 0x000865cf, 0x000867cf, + 0x000869cf, 0x00086bcf, 0x00086dcf, 0x00086fcf, 0x000871cf, + 0x000873cf, 0x000875cf, 0x000877cf, 0x000879cf, 0x00087bcf, + 0x00087dcf, 0x00087fcf, 0x000881cf, 0x000883cf, 0x000885cf, + 0x000887cf, 0x000889cf, 0x00088bcf, 0x00088dcf, 0x00088fcf, + 0x000891cf, 0x000893cf, 0x000895cf, 0x000897cf, 0x000899cf, + 0x00089bcf, 0x00089dcf, 0x00089fcf, 0x0008a1cf, 0x0008a3cf, + 0x0008a5cf, 0x0008a7cf, 0x0008a9cf, 0x0008abcf, 0x0008adcf, + 0x0008afcf, 0x0008b1cf, 0x0008b3cf, 0x0008b5cf, 0x0008b7cf, + 0x0008b9cf, 0x0008bbcf, 0x0008bdcf, 0x0008bfcf, 0x0008c1cf, + 0x0008c3cf, 0x0008c5cf, 0x0008c7cf, 0x0008c9cf, 0x0008cbcf, + 0x0008cdcf, 0x0008cfcf, 0x0008d1cf, 0x0008d3cf, 0x0008d5cf, + 0x0008d7cf, 0x0008d9cf, 0x0008dbcf, 0x0008ddcf, 0x0008dfcf, + 0x0008e1cf, 0x0008e3cf, 0x0008e5cf, 0x0008e7cf, 0x0008e9cf, + 0x0008ebcf, 0x0008edcf, 0x0008efcf, 0x0008f1cf, 0x0008f3cf, + 0x0008f5cf, 0x0008f7cf, 0x0008f9cf, 0x0008fbcf, 0x0008fdcf, + 0x0008ffcf, 0x000901cf, 0x000903cf, 0x000905cf, 0x000907cf, + 0x000909cf, 0x00090bcf, 0x00090dcf, 0x00090fcf, 0x000911cf, + 0x000913cf, 0x000915cf, 0x000917cf, 0x000919cf, 0x00091bcf, + 0x00091dcf, 0x00091fcf, 0x000921cf, 0x000923cf, 0x000925cf, + 0x000927cf, 0x000929cf, 0x00092bcf, 0x00092dcf, 0x00092fcf, + 0x000931cf, 0x000933cf, 0x000935cf, 0x000937cf, 0x000939cf, + 0x00093bcf, 0x00093dcf, 0x00093fcf, 0x000941cf, 0x000943cf, + 0x000945cf, 0x000947cf, 0x000949cf, 0x00094bcf, 0x00094dcf, + 0x00094fcf, 0x000951cf, 0x000953cf, 0x000955cf, 0x000957cf, + 0x000959cf, 0x00095bcf, 0x00095dcf, 0x00095fcf, 0x000961cf, + 0x000963cf, 0x000965cf, 0x000967cf, 0x000969cf, 0x00096bcf, + 0x00096dcf, 0x00096fcf, 0x000971cf, 0x000973cf, 0x000975cf, + 0x000977cf, 0x000979cf, 0x00097bcf, 0x00097dcf, 0x00097fcf, + 0x000981cf, 0x000983cf, 0x000985cf, 0x000987cf, 0x000989cf, + 0x00098bcf, 0x00098dcf, 0x00098fcf, 0x000991cf, 0x000993cf, + 0x000995cf, 0x000997cf, 0x000999cf, 0x00099bcf, 0x00099dcf, + 0x00099fcf, 0x0009a1cf, 0x0009a3cf, 0x0009a5cf, 0x0009a7cf, + 0x0009a9cf, 0x0009abcf, 0x0009adcf, 0x0009afcf, 0x0009b1cf, + 0x0009b3cf, 0x0009b5cf, 0x0009b7cf, 0x0009b9cf, 0x0009bbcf, + 0x0009bdcf, 0x0009bfcf, 0x0009c1cf, 0x0009c3cf, 0x0009c5cf, + 0x0009c7cf, 0x0009c9cf, 0x0009cbcf, 0x0009cdcf, 0x0009cfcf, + 0x0009d1cf, 0x0009d3cf, 0x0009d5cf, 0x0009d7cf, 0x0009d9cf, + 0x0009dbcf, 0x0009ddcf, 0x0009dfcf, 0x0009e1cf, 0x0009e3cf, + 0x0009e5cf, 0x0009e7cf, 0x0009e9cf, 0x0009ebcf, 0x0009edcf, + 0x0009efcf, 0x0009f1cf, 0x0009f3cf, 0x0009f5cf, 0x0009f7cf, + 0x0009f9cf, 0x0009fbcf, 0x0009fdcf, 0x0009ffcf, 0x000a01cf, + 0x000a03cf, 0x000a05cf, 0x000a07cf, 0x000a09cf, 0x000a0bcf, + 0x000a0dcf, 0x000a0fcf, 0x000a11cf, 0x000a13cf, 0x000a15cf, + 0x000a17cf, 0x000a19cf, 0x000a1bcf, 0x000a1dcf, 0x000a1fcf, + 0x000a21cf, 0x000a23cf, 0x000a25cf, 0x000a27cf, 0x000a29cf, + 0x000a2bcf, 0x000a2dcf, 0x000a2fcf, 0x000a31cf, 0x000a33cf, + 0x000a35cf, 0x000a37cf, 0x000a39cf, 0x000a3bcf, 0x000a3dcf, + 0x000a3fcf, 0x000a41cf, 0x000a43cf, 0x000a45cf, 0x000a47cf, + 0x000a49cf, 0x000a4bcf, 0x000a4dcf, 0x000a4fcf, 0x000a51cf, + 0x000a53cf, 0x000a55cf, 0x000a57cf, 0x000a59cf, 0x000a5bcf, + 0x000a5dcf, 0x000a5fcf, 0x000a61cf, 0x000a63cf, 0x000a65cf, + 0x000a67cf, 0x000a69cf, 0x000a6bcf, 0x000a6dcf, 0x000a6fcf, + 0x000a71cf, 0x000a73cf, 0x000a75cf, 0x000a77cf, 0x000a79cf, + 0x000a7bcf, 0x000a7dcf, 0x000a7fcf, 0x000a81cf, 0x000a83cf, + 0x000a85cf, 0x000a87cf, 0x000a89cf, 0x000a8bcf, 0x000a8dcf, + 0x000a8fcf, 0x000a91cf, 0x000a93cf, 0x000a95cf, 0x000a97cf, + 0x000a99cf, 0x000a9bcf, 0x000a9dcf, 0x000a9fcf, 0x000aa1cf, + 0x000aa3cf, 0x000aa5cf, 0x000aa7cf, 0x000aa9cf, 0x000aabcf, + 0x000aadcf, 0x000aafcf, 0x000ab1cf, 0x000ab3cf, 0x000ab5cf, + 0x000ab7cf, 0x000ab9cf, 0x000abbcf, 0x000abdcf, 0x000abfcf, + 0x000ac1cf, 0x000ac3cf, 0x000ac5cf, 0x000ac7cf, 0x000ac9cf, + 0x000acbcf, 0x000acdcf, 0x000acfcf, 0x000ad1cf, 0x000ad3cf, + 0x000ad5cf, 0x000ad7cf, 0x000ad9cf, 0x000adbcf, 0x000addcf, + 0x000adfcf, 0x000ae1cf, 0x000ae3cf, 0x000ae5cf, 0x000ae7cf, + 0x000ae9cf, 0x000aebcf, 0x000aedcf, 0x000aefcf, 0x000af1cf, + 0x000af3cf, 0x000af5cf, 0x000af7cf, 0x000af9cf, 0x000afbcf, + 0x000afdcf, 0x000affcf, 0x000b01cf, 0x000b03cf, 0x000b05cf, + 0x000b07cf, 0x000b09cf, 0x000b0bcf, 0x000b0dcf, 0x000b0fcf, + 0x000b11cf, 0x000b13cf, 0x000b15cf, 0x000b17cf, 0x000b19cf, + 0x000b1bcf, 0x000b1dcf, 0x000b1fcf, 0x000b21cf, 0x000b23cf, + 0x000b25cf, 0x000b27cf, 0x000b29cf, 0x000b2bcf, 0x000b2dcf, + 0x000b2fcf, 0x000b31cf, 0x000b33cf, 0x000b35cf, 0x000b37cf, + 0x000b39cf, 0x000b3bcf, 0x000b3dcf, 0x000b3fcf, 0x000b41cf, + 0x000b43cf, 0x000b45cf, 0x000b47cf, 0x000b49cf, 0x000b4bcf, + 0x000b4dcf, 0x000b4fcf, 0x000b51cf, 0x000b53cf, 0x000b55cf, + 0x000b57cf, 0x000b59cf, 0x000b5bcf, 0x000b5dcf, 0x000b5fcf, + 0x000b61cf, 0x000b63cf, 0x000b65cf, 0x000b67cf, 0x000b69cf, + 0x000b6bcf, 0x000b6dcf, 0x000b6fcf, 0x000b71cf, 0x000b73cf, + 0x000b75cf, 0x000b77cf, 0x000b79cf, 0x000b7bcf, 0x000b7dcf, + 0x000b7fcf, 0x000b81cf, 0x000b83cf, 0x000b85cf, 0x000b87cf, + 0x000b89cf, 0x000b8bcf, 0x000b8dcf, 0x000b8fcf, 0x000b91cf, + 0x000b93cf, 0x000b95cf, 0x000b97cf, 0x000b99cf, 0x000b9bcf, + 0x000b9dcf, 0x000b9fcf, 0x000ba1cf, 0x000ba3cf, 0x000ba5cf, + 0x000ba7cf, 0x000ba9cf, 0x000babcf, 0x000badcf, 0x000bafcf, + 0x000bb1cf, 0x000bb3cf, 0x000bb5cf, 0x000bb7cf, 0x000bb9cf, + 0x000bbbcf, 0x000bbdcf, 0x000bbfcf, 0x000bc1cf, 0x000bc3cf, + 0x000bc5cf, 0x000bc7cf, 0x000bc9cf, 0x000bcbcf, 0x000bcdcf, + 0x000bcfcf, 0x000bd1cf, 0x000bd3cf, 0x000bd5cf, 0x000bd7cf, + 0x000bd9cf, 0x000bdbcf, 0x000bddcf, 0x000bdfcf, 0x000be1cf, + 0x000be3cf, 0x000be5cf, 0x000be7cf, 0x000be9cf, 0x000bebcf, + 0x000bedcf, 0x000befcf, 0x000bf1cf, 0x000bf3cf, 0x000bf5cf, + 0x000bf7cf, 0x000bf9cf, 0x000bfbcf, 0x000bfdcf, 0x000bffcf, + 0x000c01cf, 0x000c03cf, 0x000c05cf, 0x000c07cf, 0x000c09cf, + 0x000c0bcf, 0x000c0dcf, 0x000c0fcf, 0x000c11cf, 0x000c13cf, + 0x000c15cf, 0x000c17cf, 0x000c19cf, 0x000c1bcf, 0x000c1dcf, + 0x000c1fcf, 0x000c21cf, 0x000c23cf, 0x000c25cf, 0x000c27cf, + 0x000c29cf, 0x000c2bcf, 0x000c2dcf, 0x000c2fcf, 0x000c31cf, + 0x000c33cf, 0x000c35cf, 0x000c37cf, 0x000c39cf, 0x000c3bcf, + 0x000c3dcf, 0x000c3fcf, 0x000c41cf, 0x000c43cf, 0x000c45cf, + 0x000c47cf, 0x000c49cf, 0x000c4bcf, 0x000c4dcf, 0x000c4fcf, + 0x000c51cf, 0x000c53cf, 0x000c55cf, 0x000c57cf, 0x000c59cf, + 0x000c5bcf, 0x000c5dcf, 0x000c5fcf, 0x000c61cf, 0x000c63cf, + 0x000c65cf, 0x000c67cf, 0x000c69cf, 0x000c6bcf, 0x000c6dcf, + 0x000c6fcf, 0x000c71cf, 0x000c73cf, 0x000c75cf, 0x000c77cf, + 0x000c79cf, 0x000c7bcf, 0x000c7dcf, 0x000c7fcf, 0x000c81cf, + 0x000c83cf, 0x000c85cf, 0x000c87cf, 0x000c89cf, 0x000c8bcf, + 0x000c8dcf, 0x000c8fcf, 0x000c91cf, 0x000c93cf, 0x000c95cf, + 0x000c97cf, 0x000c99cf, 0x000c9bcf, 0x000c9dcf, 0x000c9fcf, + 0x000ca1cf, 0x000ca3cf, 0x000ca5cf, 0x000ca7cf, 0x000ca9cf, + 0x000cabcf, 0x000cadcf, 0x000cafcf, 0x000cb1cf, 0x000cb3cf, + 0x000cb5cf, 0x000cb7cf, 0x000cb9cf, 0x000cbbcf, 0x000cbdcf, + 0x000cbfcf, 0x000cc1cf, 0x000cc3cf, 0x000cc5cf, 0x000cc7cf, + 0x000cc9cf, 0x000ccbcf, 0x000ccdcf, 0x000ccfcf, 0x000cd1cf, + 0x000cd3cf, 0x000cd5cf, 0x000cd7cf, 0x000cd9cf, 0x000cdbcf, + 0x000cddcf, 0x000cdfcf, 0x000ce1cf, 0x000ce3cf, 0x000ce5cf, + 0x000ce7cf, 0x000ce9cf, 0x000cebcf, 0x000cedcf, 0x000cefcf, + 0x000cf1cf, 0x000cf3cf, 0x000cf5cf, 0x000cf7cf, 0x000cf9cf, + 0x000cfbcf, 0x000cfdcf, 0x000cffcf, 0x000d01cf, 0x000d03cf, + 0x000d05cf, 0x000d07cf, 0x000d09cf, 0x000d0bcf, 0x000d0dcf, + 0x000d0fcf, 0x000d11cf, 0x000d13cf, 0x000d15cf, 0x000d17cf, + 0x000d19cf, 0x000d1bcf, 0x000d1dcf, 0x000d1fcf, 0x000d21cf, + 0x000d23cf, 0x000d25cf, 0x000d27cf, 0x000d29cf, 0x000d2bcf, + 0x000d2dcf, 0x000d2fcf, 0x000d31cf, 0x000d33cf, 0x000d35cf, + 0x000d37cf, 0x000d39cf, 0x000d3bcf, 0x000d3dcf, 0x000d3fcf, + 0x000d41cf, 0x000d43cf, 0x000d45cf, 0x000d47cf, 0x000d49cf, + 0x000d4bcf, 0x000d4dcf, 0x000d4fcf, 0x000d51cf, 0x000d53cf, + 0x000d55cf, 0x000d57cf, 0x000d59cf, 0x000d5bcf, 0x000d5dcf, + 0x000d5fcf, 0x000d61cf, 0x000d63cf, 0x000d65cf, 0x000d67cf, + 0x000d69cf, 0x000d6bcf, 0x000d6dcf, 0x000d6fcf, 0x000d71cf, + 0x000d73cf, 0x000d75cf, 0x000d77cf, 0x000d79cf, 0x000d7bcf, + 0x000d7dcf, 0x000d7fcf, 0x000d81cf, 0x000d83cf, 0x000d85cf, + 0x000d87cf, 0x000d89cf, 0x000d8bcf, 0x000d8dcf, 0x000d8fcf, + 0x000d91cf, 0x000d93cf, 0x000d95cf, 0x000d97cf, 0x000d99cf, + 0x000d9bcf, 0x000d9dcf, 0x000d9fcf, 0x000da1cf, 0x000da3cf, + 0x000da5cf, 0x000da7cf, 0x000da9cf, 0x000dabcf, 0x000dadcf, + 0x000dafcf, 0x000db1cf, 0x000db3cf, 0x000db5cf, 0x000db7cf, + 0x000db9cf, 0x000dbbcf, 0x000dbdcf, 0x000dbfcf, 0x000dc1cf, + 0x000dc3cf, 0x000dc5cf, 0x000dc7cf, 0x000dc9cf, 0x000dcbcf, + 0x000dcdcf, 0x000dcfcf, 0x000dd1cf, 0x000dd3cf, 0x000dd5cf, + 0x000dd7cf, 0x000dd9cf, 0x000ddbcf, 0x000dddcf, 0x000ddfcf, + 0x000de1cf, 0x000de3cf, 0x000de5cf, 0x000de7cf, 0x000de9cf, + 0x000debcf, 0x000dedcf, 0x000defcf, 0x000df1cf, 0x000df3cf, + 0x000df5cf, 0x000df7cf, 0x000df9cf, 0x000dfbcf, 0x000dfdcf, + 0x000dffcf, 0x000e01cf, 0x000e03cf, 0x000e05cf, 0x000e07cf, + 0x000e09cf, 0x000e0bcf, 0x000e0dcf, 0x000e0fcf, 0x000e11cf, + 0x000e13cf, 0x000e15cf, 0x000e17cf, 0x000e19cf, 0x000e1bcf, + 0x000e1dcf, 0x000e1fcf, 0x000e21cf, 0x000e23cf, 0x000e25cf, + 0x000e27cf, 0x000e29cf, 0x000e2bcf, 0x000e2dcf, 0x000e2fcf, + 0x000e31cf, 0x000e33cf, 0x000e35cf, 0x000e37cf, 0x000e39cf, + 0x000e3bcf, 0x000e3dcf, 0x000e3fcf, 0x000e41cf, 0x000e43cf, + 0x000e45cf, 0x000e47cf, 0x000e49cf, 0x000e4bcf, 0x000e4dcf, + 0x000e4fcf, 0x000e51cf, 0x000e53cf, 0x000e55cf, 0x000e57cf, + 0x000e59cf, 0x000e5bcf, 0x000e5dcf, 0x000e5fcf, 0x000e61cf, + 0x000e63cf, 0x000e65cf, 0x000e67cf, 0x000e69cf, 0x000e6bcf, + 0x000e6dcf, 0x000e6fcf, 0x000e71cf, 0x000e73cf, 0x000e75cf, + 0x000e77cf, 0x000e79cf, 0x000e7bcf, 0x000e7dcf, 0x000e7fcf, + 0x000e81cf, 0x000e83cf, 0x000e85cf, 0x000e87cf, 0x000e89cf, + 0x000e8bcf, 0x000e8dcf, 0x000e8fcf, 0x000e91cf, 0x000e93cf, + 0x000e95cf, 0x000e97cf, 0x000e99cf, 0x000e9bcf, 0x000e9dcf, + 0x000e9fcf, 0x000ea1cf, 0x000ea3cf, 0x000ea5cf, 0x000ea7cf, + 0x000ea9cf, 0x000eabcf, 0x000eadcf, 0x000eafcf, 0x000eb1cf, + 0x000eb3cf, 0x000eb5cf, 0x000eb7cf, 0x000eb9cf, 0x000ebbcf, + 0x000ebdcf, 0x000ebfcf, 0x000ec1cf, 0x000ec3cf, 0x000ec5cf, + 0x000ec7cf, 0x000ec9cf, 0x000ecbcf, 0x000ecdcf, 0x000ecfcf, + 0x000ed1cf, 0x000ed3cf, 0x000ed5cf, 0x000ed7cf, 0x000ed9cf, + 0x000edbcf, 0x000eddcf, 0x000edfcf, 0x000ee1cf, 0x000ee3cf, + 0x000ee5cf, 0x000ee7cf, 0x000ee9cf, 0x000eebcf, 0x000eedcf, + 0x000eefcf, 0x000ef1cf, 0x000ef3cf, 0x000ef5cf, 0x000ef7cf, + 0x000ef9cf, 0x000efbcf, 0x000efdcf, 0x000effcf, 0x000f01cf, + 0x000f03cf, 0x000f05cf, 0x000f07cf, 0x000f09cf, 0x000f0bcf, + 0x000f0dcf, 0x000f0fcf, 0x000f11cf, 0x000f13cf, 0x000f15cf, + 0x000f17cf, 0x000f19cf, 0x000f1bcf, 0x000f1dcf, 0x000f1fcf, + 0x000f21cf, 0x000f23cf, 0x000f25cf, 0x000f27cf, 0x000f29cf, + 0x000f2bcf, 0x000f2dcf, 0x000f2fcf, 0x000f31cf, 0x000f33cf, + 0x000f35cf, 0x000f37cf, 0x000f39cf, 0x000f3bcf, 0x000f3dcf, + 0x000f3fcf, 0x000f41cf, 0x000f43cf, 0x000f45cf, 0x000f47cf, + 0x000f49cf, 0x000f4bcf, 0x000f4dcf, 0x000f4fcf, 0x000f51cf, + 0x000f53cf, 0x000f55cf, 0x000f57cf, 0x000f59cf, 0x000f5bcf, + 0x000f5dcf, 0x000f5fcf, 0x000f61cf, 0x000f63cf, 0x000f65cf, + 0x000f67cf, 0x000f69cf, 0x000f6bcf, 0x000f6dcf, 0x000f6fcf, + 0x000f71cf, 0x000f73cf, 0x000f75cf, 0x000f77cf, 0x000f79cf, + 0x000f7bcf, 0x000f7dcf, 0x000f7fcf, 0x000f81cf, 0x000f83cf, + 0x000f85cf, 0x000f87cf, 0x000f89cf, 0x000f8bcf, 0x000f8dcf, + 0x000f8fcf, 0x000f91cf, 0x000f93cf, 0x000f95cf, 0x000f97cf, + 0x000f99cf, 0x000f9bcf, 0x000f9dcf, 0x000f9fcf, 0x000fa1cf, + 0x000fa3cf, 0x000fa5cf, 0x000fa7cf, 0x000fa9cf, 0x000fabcf, + 0x000fadcf, 0x000fafcf, 0x000fb1cf, 0x000fb3cf, 0x000fb5cf, + 0x000fb7cf, 0x000fb9cf, 0x000fbbcf, 0x000fbdcf, 0x000fbfcf, + 0x000fc1cf, 0x000fc3cf, 0x000fc5cf, 0x000fc7cf, 0x000fc9cf, + 0x000fcbcf, 0x000fcdcf, 0x000fcfcf, 0x000fd1cf, 0x000fd3cf, + 0x000fd5cf, 0x000fd7cf, 0x000fd9cf, 0x000fdbcf, 0x000fddcf, + 0x000fdfcf, 0x000fe1cf, 0x000fe3cf, 0x000fe5cf, 0x000fe7cf, + 0x000fe9cf, 0x000febcf, 0x000fedcf, 0x000fefcf, 0x000ff1cf, + 0x000ff3cf, 0x000ff5cf, 0x000ff7cf, 0x000ff9cf, 0x000ffbcf, + 0x000ffdcf, 0x000fffcf, 0x00000170, 0x00000570, 0x00000970, + 0x00000d70, 0x00001170, 0x00001570, 0x00001970, 0x00001d70, + 0x00002170, 0x00002570, 0x00002970, 0x00002d70, 0x00003170, + 0x00003570, 0x00003970, 0x00003d70, 0x00004170, 0x00004570, + 0x00004970, 0x00004d70, 0x00005170, 0x00005570, 0x00005970, + 0x00005d70, 0x00006170, 0x00006570, 0x00006970, 0x00006d70, + 0x00007170, 0x00007570, 0x00007970, 0x00007d70, 0x00008170, + 0x00008570, 0x00008970, 0x00008d70, 0x00009170, 0x00009570, + 0x00009970, 0x00009d70, 0x0000a170, 0x0000a570, 0x0000a970, + 0x0000ad70, 0x0000b170, 0x0000b570, 0x0000b970, 0x0000bd70, + 0x0000c170, 0x0000c570, 0x0000c970, 0x0000cd70, 0x0000d170, + 0x0000d570, 0x0000d970, 0x0000dd70, 0x0000e170, 0x0000e570, + 0x0000e970, 0x0000ed70, 0x0000f170, 0x0000f570, 0x0000f970, + 0x0000fd70, 0x00010170, 0x00010570, 0x00010970, 0x00010d70, + 0x00011170, 0x00011570, 0x00011970, 0x00011d70, 0x00012170, + 0x00012570, 0x00012970, 0x00012d70, 0x00013170, 0x00013570, + 0x00013970, 0x00013d70, 0x00014170, 0x00014570, 0x00014970, + 0x00014d70, 0x00015170, 0x00015570, 0x00015970, 0x00015d70, + 0x00016170, 0x00016570, 0x00016970, 0x00016d70, 0x00017170, + 0x00017570, 0x00017970, 0x00017d70, 0x00018170, 0x00018570, + 0x00018970, 0x00018d70, 0x00019170, 0x00019570, 0x00019970, + 0x00019d70, 0x0001a170, 0x0001a570, 0x0001a970, 0x0001ad70, + 0x0001b170, 0x0001b570, 0x0001b970, 0x0001bd70, 0x0001c170, + 0x0001c570, 0x0001c970, 0x0001cd70, 0x0001d170, 0x0001d570, + 0x0001d970, 0x0001dd70, 0x0001e170, 0x0001e570, 0x0001e970, + 0x0001ed70, 0x0001f170, 0x0001f570, 0x0001f970, 0x0001fd70, + 0x00020170, 0x00020570, 0x00020970, 0x00020d70, 0x00021170, + 0x00021570, 0x00021970, 0x00021d70, 0x00022170, 0x00022570, + 0x00022970, 0x00022d70, 0x00023170, 0x00023570, 0x00023970, + 0x00023d70, 0x00024170, 0x00024570, 0x00024970, 0x00024d70, + 0x00025170, 0x00025570, 0x00025970, 0x00025d70, 0x00026170, + 0x00026570, 0x00026970, 0x00026d70, 0x00027170, 0x00027570, + 0x00027970, 0x00027d70, 0x00028170, 0x00028570, 0x00028970, + 0x00028d70, 0x00029170, 0x00029570, 0x00029970, 0x00029d70, + 0x0002a170, 0x0002a570, 0x0002a970, 0x0002ad70, 0x0002b170, + 0x0002b570, 0x0002b970, 0x0002bd70, 0x0002c170, 0x0002c570, + 0x0002c970, 0x0002cd70, 0x0002d170, 0x0002d570, 0x0002d970, + 0x0002dd70, 0x0002e170, 0x0002e570, 0x0002e970, 0x0002ed70, + 0x0002f170, 0x0002f570, 0x0002f970, 0x0002fd70, 0x00030170, + 0x00030570, 0x00030970, 0x00030d70, 0x00031170, 0x00031570, + 0x00031970, 0x00031d70, 0x00032170, 0x00032570, 0x00032970, + 0x00032d70, 0x00033170, 0x00033570, 0x00033970, 0x00033d70, + 0x00034170, 0x00034570, 0x00034970, 0x00034d70, 0x00035170, + 0x00035570, 0x00035970, 0x00035d70, 0x00036170, 0x00036570, + 0x00036970, 0x00036d70, 0x00037170, 0x00037570, 0x00037970, + 0x00037d70, 0x00038170, 0x00038570, 0x00038970, 0x00038d70, + 0x00039170, 0x00039570, 0x00039970, 0x00039d70, 0x0003a170, + 0x0003a570, 0x0003a970, 0x0003ad70, 0x0003b170, 0x0003b570, + 0x0003b970, 0x0003bd70, 0x0003c170, 0x0003c570, 0x0003c970, + 0x0003cd70, 0x0003d170, 0x0003d570, 0x0003d970, 0x0003dd70, + 0x0003e170, 0x0003e570, 0x0003e970, 0x0003ed70, 0x0003f170, + 0x0003f570, 0x0003f970, 0x0003fd70, 0x00040170, 0x00040570, + 0x00040970, 0x00040d70, 0x00041170, 0x00041570, 0x00041970, + 0x00041d70, 0x00042170, 0x00042570, 0x00042970, 0x00042d70, + 0x00043170, 0x00043570, 0x00043970, 0x00043d70, 0x00044170, + 0x00044570, 0x00044970, 0x00044d70, 0x00045170, 0x00045570, + 0x00045970, 0x00045d70, 0x00046170, 0x00046570, 0x00046970, + 0x00046d70, 0x00047170, 0x00047570, 0x00047970, 0x00047d70, + 0x00048170, 0x00048570, 0x00048970, 0x00048d70, 0x00049170, + 0x00049570, 0x00049970, 0x00049d70, 0x0004a170, 0x0004a570, + 0x0004a970, 0x0004ad70, 0x0004b170, 0x0004b570, 0x0004b970, + 0x0004bd70, 0x0004c170, 0x0004c570, 0x0004c970, 0x0004cd70, + 0x0004d170, 0x0004d570, 0x0004d970, 0x0004dd70, 0x0004e170, + 0x0004e570, 0x0004e970, 0x0004ed70, 0x0004f170, 0x0004f570, + 0x0004f970, 0x0004fd70, 0x00050170, 0x00050570, 0x00050970, + 0x00050d70, 0x00051170, 0x00051570, 0x00051970, 0x00051d70, + 0x00052170, 0x00052570, 0x00052970, 0x00052d70, 0x00053170, + 0x00053570, 0x00053970, 0x00053d70, 0x00054170, 0x00054570, + 0x00054970, 0x00054d70, 0x00055170, 0x00055570, 0x00055970, + 0x00055d70, 0x00056170, 0x00056570, 0x00056970, 0x00056d70, + 0x00057170, 0x00057570, 0x00057970, 0x00057d70, 0x00058170, + 0x00058570, 0x00058970, 0x00058d70, 0x00059170, 0x00059570, + 0x00059970, 0x00059d70, 0x0005a170, 0x0005a570, 0x0005a970, + 0x0005ad70, 0x0005b170, 0x0005b570, 0x0005b970, 0x0005bd70, + 0x0005c170, 0x0005c570, 0x0005c970, 0x0005cd70, 0x0005d170, + 0x0005d570, 0x0005d970, 0x0005dd70, 0x0005e170, 0x0005e570, + 0x0005e970, 0x0005ed70, 0x0005f170, 0x0005f570, 0x0005f970, + 0x0005fd70, 0x00060170, 0x00060570, 0x00060970, 0x00060d70, + 0x00061170, 0x00061570, 0x00061970, 0x00061d70, 0x00062170, + 0x00062570, 0x00062970, 0x00062d70, 0x00063170, 0x00063570, + 0x00063970, 0x00063d70, 0x00064170, 0x00064570, 0x00064970, + 0x00064d70, 0x00065170, 0x00065570, 0x00065970, 0x00065d70, + 0x00066170, 0x00066570, 0x00066970, 0x00066d70, 0x00067170, + 0x00067570, 0x00067970, 0x00067d70, 0x00068170, 0x00068570, + 0x00068970, 0x00068d70, 0x00069170, 0x00069570, 0x00069970, + 0x00069d70, 0x0006a170, 0x0006a570, 0x0006a970, 0x0006ad70, + 0x0006b170, 0x0006b570, 0x0006b970, 0x0006bd70, 0x0006c170, + 0x0006c570, 0x0006c970, 0x0006cd70, 0x0006d170, 0x0006d570, + 0x0006d970, 0x0006dd70, 0x0006e170, 0x0006e570, 0x0006e970, + 0x0006ed70, 0x0006f170, 0x0006f570, 0x0006f970, 0x0006fd70, + 0x00070170, 0x00070570, 0x00070970, 0x00070d70, 0x00071170, + 0x00071570, 0x00071970, 0x00071d70, 0x00072170, 0x00072570, + 0x00072970, 0x00072d70, 0x00073170, 0x00073570, 0x00073970, + 0x00073d70, 0x00074170, 0x00074570, 0x00074970, 0x00074d70, + 0x00075170, 0x00075570, 0x00075970, 0x00075d70, 0x00076170, + 0x00076570, 0x00076970, 0x00076d70, 0x00077170, 0x00077570, + 0x00077970, 0x00077d70, 0x00078170, 0x00078570, 0x00078970, + 0x00078d70, 0x00079170, 0x00079570, 0x00079970, 0x00079d70, + 0x0007a170, 0x0007a570, 0x0007a970, 0x0007ad70, 0x0007b170, + 0x0007b570, 0x0007b970, 0x0007bd70, 0x0007c170, 0x0007c570, + 0x0007c970, 0x0007cd70, 0x0007d170, 0x0007d570, 0x0007d970, + 0x0007dd70, 0x0007e170, 0x0007e570, 0x0007e970, 0x0007ed70, + 0x0007f170, 0x0007f570, 0x0007f970, 0x0007fd70, 0x00080170, + 0x00080570, 0x00080970, 0x00080d70, 0x00081170, 0x00081570, + 0x00081970, 0x00081d70, 0x00082170, 0x00082570, 0x00082970, + 0x00082d70, 0x00083170, 0x00083570, 0x00083970, 0x00083d70, + 0x00084170, 0x00084570, 0x00084970, 0x00084d70, 0x00085170, + 0x00085570, 0x00085970, 0x00085d70, 0x00086170, 0x00086570, + 0x00086970, 0x00086d70, 0x00087170, 0x00087570, 0x00087970, + 0x00087d70, 0x00088170, 0x00088570, 0x00088970, 0x00088d70, + 0x00089170, 0x00089570, 0x00089970, 0x00089d70, 0x0008a170, + 0x0008a570, 0x0008a970, 0x0008ad70, 0x0008b170, 0x0008b570, + 0x0008b970, 0x0008bd70, 0x0008c170, 0x0008c570, 0x0008c970, + 0x0008cd70, 0x0008d170, 0x0008d570, 0x0008d970, 0x0008dd70, + 0x0008e170, 0x0008e570, 0x0008e970, 0x0008ed70, 0x0008f170, + 0x0008f570, 0x0008f970, 0x0008fd70, 0x00090170, 0x00090570, + 0x00090970, 0x00090d70, 0x00091170, 0x00091570, 0x00091970, + 0x00091d70, 0x00092170, 0x00092570, 0x00092970, 0x00092d70, + 0x00093170, 0x00093570, 0x00093970, 0x00093d70, 0x00094170, + 0x00094570, 0x00094970, 0x00094d70, 0x00095170, 0x00095570, + 0x00095970, 0x00095d70, 0x00096170, 0x00096570, 0x00096970, + 0x00096d70, 0x00097170, 0x00097570, 0x00097970, 0x00097d70, + 0x00098170, 0x00098570, 0x00098970, 0x00098d70, 0x00099170, + 0x00099570, 0x00099970, 0x00099d70, 0x0009a170, 0x0009a570, + 0x0009a970, 0x0009ad70, 0x0009b170, 0x0009b570, 0x0009b970, + 0x0009bd70, 0x0009c170, 0x0009c570, 0x0009c970, 0x0009cd70, + 0x0009d170, 0x0009d570, 0x0009d970, 0x0009dd70, 0x0009e170, + 0x0009e570, 0x0009e970, 0x0009ed70, 0x0009f170, 0x0009f570, + 0x0009f970, 0x0009fd70, 0x000a0170, 0x000a0570, 0x000a0970, + 0x000a0d70, 0x000a1170, 0x000a1570, 0x000a1970, 0x000a1d70, + 0x000a2170, 0x000a2570, 0x000a2970, 0x000a2d70, 0x000a3170, + 0x000a3570, 0x000a3970, 0x000a3d70, 0x000a4170, 0x000a4570, + 0x000a4970, 0x000a4d70, 0x000a5170, 0x000a5570, 0x000a5970, + 0x000a5d70, 0x000a6170, 0x000a6570, 0x000a6970, 0x000a6d70, + 0x000a7170, 0x000a7570, 0x000a7970, 0x000a7d70, 0x000a8170, + 0x000a8570, 0x000a8970, 0x000a8d70, 0x000a9170, 0x000a9570, + 0x000a9970, 0x000a9d70, 0x000aa170, 0x000aa570, 0x000aa970, + 0x000aad70, 0x000ab170, 0x000ab570, 0x000ab970, 0x000abd70, + 0x000ac170, 0x000ac570, 0x000ac970, 0x000acd70, 0x000ad170, + 0x000ad570, 0x000ad970, 0x000add70, 0x000ae170, 0x000ae570, + 0x000ae970, 0x000aed70, 0x000af170, 0x000af570, 0x000af970, + 0x000afd70, 0x000b0170, 0x000b0570, 0x000b0970, 0x000b0d70, + 0x000b1170, 0x000b1570, 0x000b1970, 0x000b1d70, 0x000b2170, + 0x000b2570, 0x000b2970, 0x000b2d70, 0x000b3170, 0x000b3570, + 0x000b3970, 0x000b3d70, 0x000b4170, 0x000b4570, 0x000b4970, + 0x000b4d70, 0x000b5170, 0x000b5570, 0x000b5970, 0x000b5d70, + 0x000b6170, 0x000b6570, 0x000b6970, 0x000b6d70, 0x000b7170, + 0x000b7570, 0x000b7970, 0x000b7d70, 0x000b8170, 0x000b8570, + 0x000b8970, 0x000b8d70, 0x000b9170, 0x000b9570, 0x000b9970, + 0x000b9d70, 0x000ba170, 0x000ba570, 0x000ba970, 0x000bad70, + 0x000bb170, 0x000bb570, 0x000bb970, 0x000bbd70, 0x000bc170, + 0x000bc570, 0x000bc970, 0x000bcd70, 0x000bd170, 0x000bd570, + 0x000bd970, 0x000bdd70, 0x000be170, 0x000be570, 0x000be970, + 0x000bed70, 0x000bf170, 0x000bf570, 0x000bf970, 0x000bfd70, + 0x000c0170, 0x000c0570, 0x000c0970, 0x000c0d70, 0x000c1170, + 0x000c1570, 0x000c1970, 0x000c1d70, 0x000c2170, 0x000c2570, + 0x000c2970, 0x000c2d70, 0x000c3170, 0x000c3570, 0x000c3970, + 0x000c3d70, 0x000c4170, 0x000c4570, 0x000c4970, 0x000c4d70, + 0x000c5170, 0x000c5570, 0x000c5970, 0x000c5d70, 0x000c6170, + 0x000c6570, 0x000c6970, 0x000c6d70, 0x000c7170, 0x000c7570, + 0x000c7970, 0x000c7d70, 0x000c8170, 0x000c8570, 0x000c8970, + 0x000c8d70, 0x000c9170, 0x000c9570, 0x000c9970, 0x000c9d70, + 0x000ca170, 0x000ca570, 0x000ca970, 0x000cad70, 0x000cb170, + 0x000cb570, 0x000cb970, 0x000cbd70, 0x000cc170, 0x000cc570, + 0x000cc970, 0x000ccd70, 0x000cd170, 0x000cd570, 0x000cd970, + 0x000cdd70, 0x000ce170, 0x000ce570, 0x000ce970, 0x000ced70, + 0x000cf170, 0x000cf570, 0x000cf970, 0x000cfd70, 0x000d0170, + 0x000d0570, 0x000d0970, 0x000d0d70, 0x000d1170, 0x000d1570, + 0x000d1970, 0x000d1d70, 0x000d2170, 0x000d2570, 0x000d2970, + 0x000d2d70, 0x000d3170, 0x000d3570, 0x000d3970, 0x000d3d70, + 0x000d4170, 0x000d4570, 0x000d4970, 0x000d4d70, 0x000d5170, + 0x000d5570, 0x000d5970, 0x000d5d70, 0x000d6170, 0x000d6570, + 0x000d6970, 0x000d6d70, 0x000d7170, 0x000d7570, 0x000d7970, + 0x000d7d70, 0x000d8170, 0x000d8570, 0x000d8970, 0x000d8d70, + 0x000d9170, 0x000d9570, 0x000d9970, 0x000d9d70, 0x000da170, + 0x000da570, 0x000da970, 0x000dad70, 0x000db170, 0x000db570, + 0x000db970, 0x000dbd70, 0x000dc170, 0x000dc570, 0x000dc970, + 0x000dcd70, 0x000dd170, 0x000dd570, 0x000dd970, 0x000ddd70, + 0x000de170, 0x000de570, 0x000de970, 0x000ded70, 0x000df170, + 0x000df570, 0x000df970, 0x000dfd70, 0x000e0170, 0x000e0570, + 0x000e0970, 0x000e0d70, 0x000e1170, 0x000e1570, 0x000e1970, + 0x000e1d70, 0x000e2170, 0x000e2570, 0x000e2970, 0x000e2d70, + 0x000e3170, 0x000e3570, 0x000e3970, 0x000e3d70, 0x000e4170, + 0x000e4570, 0x000e4970, 0x000e4d70, 0x000e5170, 0x000e5570, + 0x000e5970, 0x000e5d70, 0x000e6170, 0x000e6570, 0x000e6970, + 0x000e6d70, 0x000e7170, 0x000e7570, 0x000e7970, 0x000e7d70, + 0x000e8170, 0x000e8570, 0x000e8970, 0x000e8d70, 0x000e9170, + 0x000e9570, 0x000e9970, 0x000e9d70, 0x000ea170, 0x000ea570, + 0x000ea970, 0x000ead70, 0x000eb170, 0x000eb570, 0x000eb970, + 0x000ebd70, 0x000ec170, 0x000ec570, 0x000ec970, 0x000ecd70, + 0x000ed170, 0x000ed570, 0x000ed970, 0x000edd70, 0x000ee170, + 0x000ee570, 0x000ee970, 0x000eed70, 0x000ef170, 0x000ef570, + 0x000ef970, 0x000efd70, 0x000f0170, 0x000f0570, 0x000f0970, + 0x000f0d70, 0x000f1170, 0x000f1570, 0x000f1970, 0x000f1d70, + 0x000f2170, 0x000f2570, 0x000f2970, 0x000f2d70, 0x000f3170, + 0x000f3570, 0x000f3970, 0x000f3d70, 0x000f4170, 0x000f4570, + 0x000f4970, 0x000f4d70, 0x000f5170, 0x000f5570, 0x000f5970, + 0x000f5d70, 0x000f6170, 0x000f6570, 0x000f6970, 0x000f6d70, + 0x000f7170, 0x000f7570, 0x000f7970, 0x000f7d70, 0x000f8170, + 0x000f8570, 0x000f8970, 0x000f8d70, 0x000f9170, 0x000f9570, + 0x000f9970, 0x000f9d70, 0x000fa170, 0x000fa570, 0x000fa970, + 0x000fad70, 0x000fb170, 0x000fb570, 0x000fb970, 0x000fbd70, + 0x000fc170, 0x000fc570, 0x000fc970, 0x000fcd70, 0x000fd170, + 0x000fd570, 0x000fd970, 0x000fdd70, 0x000fe170, 0x000fe570, + 0x000fe970, 0x000fed70, 0x000ff170, 0x000ff570, 0x000ff970, + 0x000ffd70, 0x00100170, 0x00100570, 0x00100970, 0x00100d70, + 0x00101170, 0x00101570, 0x00101970, 0x00101d70, 0x00102170, + 0x00102570, 0x00102970, 0x00102d70, 0x00103170, 0x00103570, + 0x00103970, 0x00103d70, 0x00104170, 0x00104570, 0x00104970, + 0x00104d70, 0x00105170, 0x00105570, 0x00105970, 0x00105d70, + 0x00106170, 0x00106570, 0x00106970, 0x00106d70, 0x00107170, + 0x00107570, 0x00107970, 0x00107d70, 0x00108170, 0x00108570, + 0x00108970, 0x00108d70, 0x00109170, 0x00109570, 0x00109970, + 0x00109d70, 0x0010a170, 0x0010a570, 0x0010a970, 0x0010ad70, + 0x0010b170, 0x0010b570, 0x0010b970, 0x0010bd70, 0x0010c170, + 0x0010c570, 0x0010c970, 0x0010cd70, 0x0010d170, 0x0010d570, + 0x0010d970, 0x0010dd70, 0x0010e170, 0x0010e570, 0x0010e970, + 0x0010ed70, 0x0010f170, 0x0010f570, 0x0010f970, 0x0010fd70, + 0x00110170, 0x00110570, 0x00110970, 0x00110d70, 0x00111170, + 0x00111570, 0x00111970, 0x00111d70, 0x00112170, 0x00112570, + 0x00112970, 0x00112d70, 0x00113170, 0x00113570, 0x00113970, + 0x00113d70, 0x00114170, 0x00114570, 0x00114970, 0x00114d70, + 0x00115170, 0x00115570, 0x00115970, 0x00115d70, 0x00116170, + 0x00116570, 0x00116970, 0x00116d70, 0x00117170, 0x00117570, + 0x00117970, 0x00117d70, 0x00118170, 0x00118570, 0x00118970, + 0x00118d70, 0x00119170, 0x00119570, 0x00119970, 0x00119d70, + 0x0011a170, 0x0011a570, 0x0011a970, 0x0011ad70, 0x0011b170, + 0x0011b570, 0x0011b970, 0x0011bd70, 0x0011c170, 0x0011c570, + 0x0011c970, 0x0011cd70, 0x0011d170, 0x0011d570, 0x0011d970, + 0x0011dd70, 0x0011e170, 0x0011e570, 0x0011e970, 0x0011ed70, + 0x0011f170, 0x0011f570, 0x0011f970, 0x0011fd70, 0x00120170, + 0x00120570, 0x00120970, 0x00120d70, 0x00121170, 0x00121570, + 0x00121970, 0x00121d70, 0x00122170, 0x00122570, 0x00122970, + 0x00122d70, 0x00123170, 0x00123570, 0x00123970, 0x00123d70, + 0x00124170, 0x00124570, 0x00124970, 0x00124d70, 0x00125170, + 0x00125570, 0x00125970, 0x00125d70, 0x00126170, 0x00126570, + 0x00126970, 0x00126d70, 0x00127170, 0x00127570, 0x00127970, + 0x00127d70, 0x00128170, 0x00128570, 0x00128970, 0x00128d70, + 0x00129170, 0x00129570, 0x00129970, 0x00129d70, 0x0012a170, + 0x0012a570, 0x0012a970, 0x0012ad70, 0x0012b170, 0x0012b570, + 0x0012b970, 0x0012bd70, 0x0012c170, 0x0012c570, 0x0012c970, + 0x0012cd70, 0x0012d170, 0x0012d570, 0x0012d970, 0x0012dd70, + 0x0012e170, 0x0012e570, 0x0012e970, 0x0012ed70, 0x0012f170, + 0x0012f570, 0x0012f970, 0x0012fd70, 0x00130170, 0x00130570, + 0x00130970, 0x00130d70, 0x00131170, 0x00131570, 0x00131970, + 0x00131d70, 0x00132170, 0x00132570, 0x00132970, 0x00132d70, + 0x00133170, 0x00133570, 0x00133970, 0x00133d70, 0x00134170, + 0x00134570, 0x00134970, 0x00134d70, 0x00135170, 0x00135570, + 0x00135970, 0x00135d70, 0x00136170, 0x00136570, 0x00136970, + 0x00136d70, 0x00137170, 0x00137570, 0x00137970, 0x00137d70, + 0x00138170, 0x00138570, 0x00138970, 0x00138d70, 0x00139170, + 0x00139570, 0x00139970, 0x00139d70, 0x0013a170, 0x0013a570, + 0x0013a970, 0x0013ad70, 0x0013b170, 0x0013b570, 0x0013b970, + 0x0013bd70, 0x0013c170, 0x0013c570, 0x0013c970, 0x0013cd70, + 0x0013d170, 0x0013d570, 0x0013d970, 0x0013dd70, 0x0013e170, + 0x0013e570, 0x0013e970, 0x0013ed70, 0x0013f170, 0x0013f570, + 0x0013f970, 0x0013fd70, 0x00140170, 0x00140570, 0x00140970, + 0x00140d70, 0x00141170, 0x00141570, 0x00141970, 0x00141d70, + 0x00142170, 0x00142570, 0x00142970, 0x00142d70, 0x00143170, + 0x00143570, 0x00143970, 0x00143d70, 0x00144170, 0x00144570, + 0x00144970, 0x00144d70, 0x00145170, 0x00145570, 0x00145970, + 0x00145d70, 0x00146170, 0x00146570, 0x00146970, 0x00146d70, + 0x00147170, 0x00147570, 0x00147970, 0x00147d70, 0x00148170, + 0x00148570, 0x00148970, 0x00148d70, 0x00149170, 0x00149570, + 0x00149970, 0x00149d70, 0x0014a170, 0x0014a570, 0x0014a970, + 0x0014ad70, 0x0014b170, 0x0014b570, 0x0014b970, 0x0014bd70, + 0x0014c170, 0x0014c570, 0x0014c970, 0x0014cd70, 0x0014d170, + 0x0014d570, 0x0014d970, 0x0014dd70, 0x0014e170, 0x0014e570, + 0x0014e970, 0x0014ed70, 0x0014f170, 0x0014f570, 0x0014f970, + 0x0014fd70, 0x00150170, 0x00150570, 0x00150970, 0x00150d70, + 0x00151170, 0x00151570, 0x00151970, 0x00151d70, 0x00152170, + 0x00152570, 0x00152970, 0x00152d70, 0x00153170, 0x00153570, + 0x00153970, 0x00153d70, 0x00154170, 0x00154570, 0x00154970, + 0x00154d70, 0x00155170, 0x00155570, 0x00155970, 0x00155d70, + 0x00156170, 0x00156570, 0x00156970, 0x00156d70, 0x00157170, + 0x00157570, 0x00157970, 0x00157d70, 0x00158170, 0x00158570, + 0x00158970, 0x00158d70, 0x00159170, 0x00159570, 0x00159970, + 0x00159d70, 0x0015a170, 0x0015a570, 0x0015a970, 0x0015ad70, + 0x0015b170, 0x0015b570, 0x0015b970, 0x0015bd70, 0x0015c170, + 0x0015c570, 0x0015c970, 0x0015cd70, 0x0015d170, 0x0015d570, + 0x0015d970, 0x0015dd70, 0x0015e170, 0x0015e570, 0x0015e970, + 0x0015ed70, 0x0015f170, 0x0015f570, 0x0015f970, 0x0015fd70, + 0x00160170, 0x00160570, 0x00160970, 0x00160d70, 0x00161170, + 0x00161570, 0x00161970, 0x00161d70, 0x00162170, 0x00162570, + 0x00162970, 0x00162d70, 0x00163170, 0x00163570, 0x00163970, + 0x00163d70, 0x00164170, 0x00164570, 0x00164970, 0x00164d70, + 0x00165170, 0x00165570, 0x00165970, 0x00165d70, 0x00166170, + 0x00166570, 0x00166970, 0x00166d70, 0x00167170, 0x00167570, + 0x00167970, 0x00167d70, 0x00168170, 0x00168570, 0x00168970, + 0x00168d70, 0x00169170, 0x00169570, 0x00169970, 0x00169d70, + 0x0016a170, 0x0016a570, 0x0016a970, 0x0016ad70, 0x0016b170, + 0x0016b570, 0x0016b970, 0x0016bd70, 0x0016c170, 0x0016c570, + 0x0016c970, 0x0016cd70, 0x0016d170, 0x0016d570, 0x0016d970, + 0x0016dd70, 0x0016e170, 0x0016e570, 0x0016e970, 0x0016ed70, + 0x0016f170, 0x0016f570, 0x0016f970, 0x0016fd70, 0x00170170, + 0x00170570, 0x00170970, 0x00170d70, 0x00171170, 0x00171570, + 0x00171970, 0x00171d70, 0x00172170, 0x00172570, 0x00172970, + 0x00172d70, 0x00173170, 0x00173570, 0x00173970, 0x00173d70, + 0x00174170, 0x00174570, 0x00174970, 0x00174d70, 0x00175170, + 0x00175570, 0x00175970, 0x00175d70, 0x00176170, 0x00176570, + 0x00176970, 0x00176d70, 0x00177170, 0x00177570, 0x00177970, + 0x00177d70, 0x00178170, 0x00178570, 0x00178970, 0x00178d70, + 0x00179170, 0x00179570, 0x00179970, 0x00179d70, 0x0017a170, + 0x0017a570, 0x0017a970, 0x0017ad70, 0x0017b170, 0x0017b570, + 0x0017b970, 0x0017bd70, 0x0017c170, 0x0017c570, 0x0017c970, + 0x0017cd70, 0x0017d170, 0x0017d570, 0x0017d970, 0x0017dd70, + 0x0017e170, 0x0017e570, 0x0017e970, 0x0017ed70, 0x0017f170, + 0x0017f570, 0x0017f970, 0x0017fd70, 0x00180170, 0x00180570, + 0x00180970, 0x00180d70, 0x00181170, 0x00181570, 0x00181970, + 0x00181d70, 0x00182170, 0x00182570, 0x00182970, 0x00182d70, + 0x00183170, 0x00183570, 0x00183970, 0x00183d70, 0x00184170, + 0x00184570, 0x00184970, 0x00184d70, 0x00185170, 0x00185570, + 0x00185970, 0x00185d70, 0x00186170, 0x00186570, 0x00186970, + 0x00186d70, 0x00187170, 0x00187570, 0x00187970, 0x00187d70, + 0x00188170, 0x00188570, 0x00188970, 0x00188d70, 0x00189170, + 0x00189570, 0x00189970, 0x00189d70, 0x0018a170, 0x0018a570, + 0x0018a970, 0x0018ad70, 0x0018b170, 0x0018b570, 0x0018b970, + 0x0018bd70, 0x0018c170, 0x0018c570, 0x0018c970, 0x0018cd70, + 0x0018d170, 0x0018d570, 0x0018d970, 0x0018dd70, 0x0018e170, + 0x0018e570, 0x0018e970, 0x0018ed70, 0x0018f170, 0x0018f570, + 0x0018f970, 0x0018fd70, 0x00190170, 0x00190570, 0x00190970, + 0x00190d70, 0x00191170, 0x00191570, 0x00191970, 0x00191d70, + 0x00192170, 0x00192570, 0x00192970, 0x00192d70, 0x00193170, + 0x00193570, 0x00193970, 0x00193d70, 0x00194170, 0x00194570, + 0x00194970, 0x00194d70, 0x00195170, 0x00195570, 0x00195970, + 0x00195d70, 0x00196170, 0x00196570, 0x00196970, 0x00196d70, + 0x00197170, 0x00197570, 0x00197970, 0x00197d70, 0x00198170, + 0x00198570, 0x00198970, 0x00198d70, 0x00199170, 0x00199570, + 0x00199970, 0x00199d70, 0x0019a170, 0x0019a570, 0x0019a970, + 0x0019ad70, 0x0019b170, 0x0019b570, 0x0019b970, 0x0019bd70, + 0x0019c170, 0x0019c570, 0x0019c970, 0x0019cd70, 0x0019d170, + 0x0019d570, 0x0019d970, 0x0019dd70, 0x0019e170, 0x0019e570, + 0x0019e970, 0x0019ed70, 0x0019f170, 0x0019f570, 0x0019f970, + 0x0019fd70, 0x001a0170, 0x001a0570, 0x001a0970, 0x001a0d70, + 0x001a1170, 0x001a1570, 0x001a1970, 0x001a1d70, 0x001a2170, + 0x001a2570, 0x001a2970, 0x001a2d70, 0x001a3170, 0x001a3570, + 0x001a3970, 0x001a3d70, 0x001a4170, 0x001a4570, 0x001a4970, + 0x001a4d70, 0x001a5170, 0x001a5570, 0x001a5970, 0x001a5d70, + 0x001a6170, 0x001a6570, 0x001a6970, 0x001a6d70, 0x001a7170, + 0x001a7570, 0x001a7970, 0x001a7d70, 0x001a8170, 0x001a8570, + 0x001a8970, 0x001a8d70, 0x001a9170, 0x001a9570, 0x001a9970, + 0x001a9d70, 0x001aa170, 0x001aa570, 0x001aa970, 0x001aad70, + 0x001ab170, 0x001ab570, 0x001ab970, 0x001abd70, 0x001ac170, + 0x001ac570, 0x001ac970, 0x001acd70, 0x001ad170, 0x001ad570, + 0x001ad970, 0x001add70, 0x001ae170, 0x001ae570, 0x001ae970, + 0x001aed70, 0x001af170, 0x001af570, 0x001af970, 0x001afd70, + 0x001b0170, 0x001b0570, 0x001b0970, 0x001b0d70, 0x001b1170, + 0x001b1570, 0x001b1970, 0x001b1d70, 0x001b2170, 0x001b2570, + 0x001b2970, 0x001b2d70, 0x001b3170, 0x001b3570, 0x001b3970, + 0x001b3d70, 0x001b4170, 0x001b4570, 0x001b4970, 0x001b4d70, + 0x001b5170, 0x001b5570, 0x001b5970, 0x001b5d70, 0x001b6170, + 0x001b6570, 0x001b6970, 0x001b6d70, 0x001b7170, 0x001b7570, + 0x001b7970, 0x001b7d70, 0x001b8170, 0x001b8570, 0x001b8970, + 0x001b8d70, 0x001b9170, 0x001b9570, 0x001b9970, 0x001b9d70, + 0x001ba170, 0x001ba570, 0x001ba970, 0x001bad70, 0x001bb170, + 0x001bb570, 0x001bb970, 0x001bbd70, 0x001bc170, 0x001bc570, + 0x001bc970, 0x001bcd70, 0x001bd170, 0x001bd570, 0x001bd970, + 0x001bdd70, 0x001be170, 0x001be570, 0x001be970, 0x001bed70, + 0x001bf170, 0x001bf570, 0x001bf970, 0x001bfd70, 0x001c0170, + 0x001c0570, 0x001c0970, 0x001c0d70, 0x001c1170, 0x001c1570, + 0x001c1970, 0x001c1d70, 0x001c2170, 0x001c2570, 0x001c2970, + 0x001c2d70, 0x001c3170, 0x001c3570, 0x001c3970, 0x001c3d70, + 0x001c4170, 0x001c4570, 0x001c4970, 0x001c4d70, 0x001c5170, + 0x001c5570, 0x001c5970, 0x001c5d70, 0x001c6170, 0x001c6570, + 0x001c6970, 0x001c6d70, 0x001c7170, 0x001c7570, 0x001c7970, + 0x001c7d70, 0x001c8170, 0x001c8570, 0x001c8970, 0x001c8d70, + 0x001c9170, 0x001c9570, 0x001c9970, 0x001c9d70, 0x001ca170, + 0x001ca570, 0x001ca970, 0x001cad70, 0x001cb170, 0x001cb570, + 0x001cb970, 0x001cbd70, 0x001cc170, 0x001cc570, 0x001cc970, + 0x001ccd70, 0x001cd170, 0x001cd570, 0x001cd970, 0x001cdd70, + 0x001ce170, 0x001ce570, 0x001ce970, 0x001ced70, 0x001cf170, + 0x001cf570, 0x001cf970, 0x001cfd70, 0x001d0170, 0x001d0570, + 0x001d0970, 0x001d0d70, 0x001d1170, 0x001d1570, 0x001d1970, + 0x001d1d70, 0x001d2170, 0x001d2570, 0x001d2970, 0x001d2d70, + 0x001d3170, 0x001d3570, 0x001d3970, 0x001d3d70, 0x001d4170, + 0x001d4570, 0x001d4970, 0x001d4d70, 0x001d5170, 0x001d5570, + 0x001d5970, 0x001d5d70, 0x001d6170, 0x001d6570, 0x001d6970, + 0x001d6d70, 0x001d7170, 0x001d7570, 0x001d7970, 0x001d7d70, + 0x001d8170, 0x001d8570, 0x001d8970, 0x001d8d70, 0x001d9170, + 0x001d9570, 0x001d9970, 0x001d9d70, 0x001da170, 0x001da570, + 0x001da970, 0x001dad70, 0x001db170, 0x001db570, 0x001db970, + 0x001dbd70, 0x001dc170, 0x001dc570, 0x001dc970, 0x001dcd70, + 0x001dd170, 0x001dd570, 0x001dd970, 0x001ddd70, 0x001de170, + 0x001de570, 0x001de970, 0x001ded70, 0x001df170, 0x001df570, + 0x001df970, 0x001dfd70, 0x001e0170, 0x001e0570, 0x001e0970, + 0x001e0d70, 0x001e1170, 0x001e1570, 0x001e1970, 0x001e1d70, + 0x001e2170, 0x001e2570, 0x001e2970, 0x001e2d70, 0x001e3170, + 0x001e3570, 0x001e3970, 0x001e3d70, 0x001e4170, 0x001e4570, + 0x001e4970, 0x001e4d70, 0x001e5170, 0x001e5570, 0x001e5970, + 0x001e5d70, 0x001e6170, 0x001e6570, 0x001e6970, 0x001e6d70, + 0x001e7170, 0x001e7570, 0x001e7970, 0x001e7d70, 0x001e8170, + 0x001e8570, 0x001e8970, 0x001e8d70, 0x001e9170, 0x001e9570, + 0x001e9970, 0x001e9d70, 0x001ea170, 0x001ea570, 0x001ea970, + 0x001ead70, 0x001eb170, 0x001eb570, 0x001eb970, 0x001ebd70, + 0x001ec170, 0x001ec570, 0x001ec970, 0x001ecd70, 0x001ed170, + 0x001ed570, 0x001ed970, 0x001edd70, 0x001ee170, 0x001ee570, + 0x001ee970, 0x001eed70, 0x001ef170, 0x001ef570, 0x001ef970, + 0x001efd70, 0x001f0170, 0x001f0570, 0x001f0970, 0x001f0d70, + 0x001f1170, 0x001f1570, 0x001f1970, 0x001f1d70, 0x001f2170, + 0x001f2570, 0x001f2970, 0x001f2d70, 0x001f3170, 0x001f3570, + 0x001f3970, 0x001f3d70, 0x001f4170, 0x001f4570, 0x001f4970, + 0x001f4d70, 0x001f5170, 0x001f5570, 0x001f5970, 0x001f5d70, + 0x001f6170, 0x001f6570, 0x001f6970, 0x001f6d70, 0x001f7170, + 0x001f7570, 0x001f7970, 0x001f7d70, 0x001f8170, 0x001f8570, + 0x001f8970, 0x001f8d70, 0x001f9170, 0x001f9570, 0x001f9970, + 0x001f9d70, 0x001fa170, 0x001fa570, 0x001fa970, 0x001fad70, + 0x001fb170, 0x001fb570, 0x001fb970, 0x001fbd70, 0x001fc170, + 0x001fc570, 0x001fc970, 0x001fcd70, 0x001fd170, 0x001fd570, + 0x001fd970, 0x001fdd70, 0x001fe170, 0x001fe570, 0x001fe970, + 0x001fed70, 0x001ff170, 0x001ff570, 0x001ff970, 0x001ffd70 #endif /* LONGER_HUFFTABLE */ - }, + }, - .len_table = { - 0x000bffef, 0x00000002, 0x00000044, 0x00000144, - 0x000002c5, 0x00000526, 0x00000ea7, 0x000001a7, - 0x000001c6, 0x000005c6, 0x00001869, 0x00003869, - 0x00000469, 0x00002469, 0x00001469, 0x00003469, - 0x00000c6a, 0x00002c6a, 0x00004c6a, 0x00006c6a, - 0x000030eb, 0x000070eb, 0x0000b0eb, 0x0000f0eb, - 0x000041ec, 0x0000c1ec, 0x000141ec, 0x0001c1ec, - 0x000021ec, 0x0000a1ec, 0x000121ec, 0x0001a1ec, - 0x000061ed, 0x0000e1ed, 0x000161ed, 0x0001e1ed, - 0x000261ed, 0x0002e1ed, 0x000361ed, 0x0003e1ed, - 0x000011ed, 0x000091ed, 0x000111ed, 0x000191ed, - 0x000211ed, 0x000291ed, 0x000311ed, 0x000391ed, - 0x000051ed, 0x0000d1ed, 0x000151ed, 0x0001d1ed, - 0x000251ed, 0x0002d1ed, 0x000351ed, 0x0003d1ed, - 0x000031ed, 0x0000b1ed, 0x000131ed, 0x0001b1ed, - 0x000231ed, 0x0002b1ed, 0x000331ed, 0x0003b1ed, - 0x00003fef, 0x00013fef, 0x00023fef, 0x00033fef, - 0x00043fef, 0x00053fef, 0x00063fef, 0x00073fef, - 0x00083fef, 0x00093fef, 0x000a3fef, 0x000b3fef, - 0x000c3fef, 0x000d3fef, 0x000e3fef, 0x000f3fef, - 0x00007ff0, 0x00027ff0, 0x00047ff0, 0x00067ff0, - 0x00087ff0, 0x000a7ff0, 0x000c7ff0, 0x000e7ff0, - 0x00107ff0, 0x00127ff0, 0x00147ff0, 0x00167ff0, - 0x00187ff0, 0x001a7ff0, 0x001c7ff0, 0x001e7ff0, - 0x0000fff1, 0x0004fff1, 0x0008fff1, 0x000cfff1, - 0x0010fff1, 0x0014fff1, 0x0018fff1, 0x001cfff1, - 0x0020fff1, 0x0024fff1, 0x0028fff1, 0x002cfff1, - 0x0030fff1, 0x0034fff1, 0x0038fff1, 0x003cfff1, - 0x0002fff1, 0x0006fff1, 0x000afff1, 0x000efff1, - 0x0012fff1, 0x0016fff1, 0x001afff1, 0x001efff1, - 0x0022fff1, 0x0026fff1, 0x002afff1, 0x002efff1, - 0x0032fff1, 0x0036fff1, 0x003afff1, 0x003efff1, - 0x00017ff1, 0x00037ff1, 0x00057ff1, 0x00077ff1, - 0x00097ff1, 0x000b7ff1, 0x000d7ff1, 0x000f7ff1, - 0x00117ff1, 0x00137ff1, 0x00157ff1, 0x00177ff1, - 0x00197ff1, 0x001b7ff1, 0x001d7ff1, 0x001f7ff1, - 0x00217ff1, 0x00237ff1, 0x00257ff1, 0x00277ff1, - 0x00297ff1, 0x002b7ff1, 0x002d7ff1, 0x002f7ff1, - 0x00317ff1, 0x00337ff1, 0x00357ff1, 0x00377ff1, - 0x00397ff1, 0x003b7ff1, 0x003d7ff1, 0x003f7ff1, - 0x0001fff2, 0x0005fff2, 0x0009fff2, 0x000dfff2, - 0x0011fff2, 0x0015fff2, 0x0019fff2, 0x001dfff2, - 0x0021fff2, 0x0025fff2, 0x0029fff2, 0x002dfff2, - 0x0031fff2, 0x0035fff2, 0x0039fff2, 0x003dfff2, - 0x0041fff2, 0x0045fff2, 0x0049fff2, 0x004dfff2, - 0x0051fff2, 0x0055fff2, 0x0059fff2, 0x005dfff2, - 0x0061fff2, 0x0065fff2, 0x0069fff2, 0x006dfff2, - 0x0071fff2, 0x0075fff2, 0x0079fff2, 0x007dfff2, - 0x0007fff4, 0x0017fff4, 0x0027fff4, 0x0037fff4, - 0x0047fff4, 0x0057fff4, 0x0067fff4, 0x0077fff4, - 0x0087fff4, 0x0097fff4, 0x00a7fff4, 0x00b7fff4, - 0x00c7fff4, 0x00d7fff4, 0x00e7fff4, 0x00f7fff4, - 0x0107fff4, 0x0117fff4, 0x0127fff4, 0x0137fff4, - 0x0147fff4, 0x0157fff4, 0x0167fff4, 0x0177fff4, - 0x0187fff4, 0x0197fff4, 0x01a7fff4, 0x01b7fff4, - 0x01c7fff4, 0x01d7fff4, 0x01e7fff4, 0x01f7fff4, - 0x000ffff4, 0x001ffff4, 0x002ffff4, 0x003ffff4, - 0x004ffff4, 0x005ffff4, 0x006ffff4, 0x007ffff4, - 0x008ffff4, 0x009ffff4, 0x00affff4, 0x00bffff4, - 0x00cffff4, 0x00dffff4, 0x00effff4, 0x00fffff4, - 0x010ffff4, 0x011ffff4, 0x012ffff4, 0x013ffff4, - 0x014ffff4, 0x015ffff4, 0x016ffff4, 0x017ffff4, - 0x018ffff4, 0x019ffff4, 0x01affff4, 0x01bffff4, - 0x01cffff4, 0x01dffff4, 0x01effff4, 0x0000bfeb}, + .len_table = { 0x000bffef, 0x00000002, 0x00000044, 0x00000144, 0x000002c5, + 0x00000526, 0x00000ea7, 0x000001a7, 0x000001c6, 0x000005c6, + 0x00001869, 0x00003869, 0x00000469, 0x00002469, 0x00001469, + 0x00003469, 0x00000c6a, 0x00002c6a, 0x00004c6a, 0x00006c6a, + 0x000030eb, 0x000070eb, 0x0000b0eb, 0x0000f0eb, 0x000041ec, + 0x0000c1ec, 0x000141ec, 0x0001c1ec, 0x000021ec, 0x0000a1ec, + 0x000121ec, 0x0001a1ec, 0x000061ed, 0x0000e1ed, 0x000161ed, + 0x0001e1ed, 0x000261ed, 0x0002e1ed, 0x000361ed, 0x0003e1ed, + 0x000011ed, 0x000091ed, 0x000111ed, 0x000191ed, 0x000211ed, + 0x000291ed, 0x000311ed, 0x000391ed, 0x000051ed, 0x0000d1ed, + 0x000151ed, 0x0001d1ed, 0x000251ed, 0x0002d1ed, 0x000351ed, + 0x0003d1ed, 0x000031ed, 0x0000b1ed, 0x000131ed, 0x0001b1ed, + 0x000231ed, 0x0002b1ed, 0x000331ed, 0x0003b1ed, 0x00003fef, + 0x00013fef, 0x00023fef, 0x00033fef, 0x00043fef, 0x00053fef, + 0x00063fef, 0x00073fef, 0x00083fef, 0x00093fef, 0x000a3fef, + 0x000b3fef, 0x000c3fef, 0x000d3fef, 0x000e3fef, 0x000f3fef, + 0x00007ff0, 0x00027ff0, 0x00047ff0, 0x00067ff0, 0x00087ff0, + 0x000a7ff0, 0x000c7ff0, 0x000e7ff0, 0x00107ff0, 0x00127ff0, + 0x00147ff0, 0x00167ff0, 0x00187ff0, 0x001a7ff0, 0x001c7ff0, + 0x001e7ff0, 0x0000fff1, 0x0004fff1, 0x0008fff1, 0x000cfff1, + 0x0010fff1, 0x0014fff1, 0x0018fff1, 0x001cfff1, 0x0020fff1, + 0x0024fff1, 0x0028fff1, 0x002cfff1, 0x0030fff1, 0x0034fff1, + 0x0038fff1, 0x003cfff1, 0x0002fff1, 0x0006fff1, 0x000afff1, + 0x000efff1, 0x0012fff1, 0x0016fff1, 0x001afff1, 0x001efff1, + 0x0022fff1, 0x0026fff1, 0x002afff1, 0x002efff1, 0x0032fff1, + 0x0036fff1, 0x003afff1, 0x003efff1, 0x00017ff1, 0x00037ff1, + 0x00057ff1, 0x00077ff1, 0x00097ff1, 0x000b7ff1, 0x000d7ff1, + 0x000f7ff1, 0x00117ff1, 0x00137ff1, 0x00157ff1, 0x00177ff1, + 0x00197ff1, 0x001b7ff1, 0x001d7ff1, 0x001f7ff1, 0x00217ff1, + 0x00237ff1, 0x00257ff1, 0x00277ff1, 0x00297ff1, 0x002b7ff1, + 0x002d7ff1, 0x002f7ff1, 0x00317ff1, 0x00337ff1, 0x00357ff1, + 0x00377ff1, 0x00397ff1, 0x003b7ff1, 0x003d7ff1, 0x003f7ff1, + 0x0001fff2, 0x0005fff2, 0x0009fff2, 0x000dfff2, 0x0011fff2, + 0x0015fff2, 0x0019fff2, 0x001dfff2, 0x0021fff2, 0x0025fff2, + 0x0029fff2, 0x002dfff2, 0x0031fff2, 0x0035fff2, 0x0039fff2, + 0x003dfff2, 0x0041fff2, 0x0045fff2, 0x0049fff2, 0x004dfff2, + 0x0051fff2, 0x0055fff2, 0x0059fff2, 0x005dfff2, 0x0061fff2, + 0x0065fff2, 0x0069fff2, 0x006dfff2, 0x0071fff2, 0x0075fff2, + 0x0079fff2, 0x007dfff2, 0x0007fff4, 0x0017fff4, 0x0027fff4, + 0x0037fff4, 0x0047fff4, 0x0057fff4, 0x0067fff4, 0x0077fff4, + 0x0087fff4, 0x0097fff4, 0x00a7fff4, 0x00b7fff4, 0x00c7fff4, + 0x00d7fff4, 0x00e7fff4, 0x00f7fff4, 0x0107fff4, 0x0117fff4, + 0x0127fff4, 0x0137fff4, 0x0147fff4, 0x0157fff4, 0x0167fff4, + 0x0177fff4, 0x0187fff4, 0x0197fff4, 0x01a7fff4, 0x01b7fff4, + 0x01c7fff4, 0x01d7fff4, 0x01e7fff4, 0x01f7fff4, 0x000ffff4, + 0x001ffff4, 0x002ffff4, 0x003ffff4, 0x004ffff4, 0x005ffff4, + 0x006ffff4, 0x007ffff4, 0x008ffff4, 0x009ffff4, 0x00affff4, + 0x00bffff4, 0x00cffff4, 0x00dffff4, 0x00effff4, 0x00fffff4, + 0x010ffff4, 0x011ffff4, 0x012ffff4, 0x013ffff4, 0x014ffff4, + 0x015ffff4, 0x016ffff4, 0x017ffff4, 0x018ffff4, 0x019ffff4, + 0x01affff4, 0x01bffff4, 0x01cffff4, 0x01dffff4, 0x01effff4, + 0x0000bfeb }, - .lit_table = { - 0x001e, 0x004d, 0x00e3, 0x00cd, 0x002d, 0x01e3, 0x0013, 0x0113, - 0x0093, 0x0193, 0x0019, 0x0053, 0x0153, 0x00ad, 0x00d3, 0x01d3, - 0x0033, 0x0047, 0x0247, 0x0147, 0x0347, 0x038f, 0x078f, 0x004f, - 0x00c7, 0x044f, 0x024f, 0x064f, 0x02c7, 0x014f, 0x01c7, 0x0133, - 0x0006, 0x03c7, 0x00b3, 0x0027, 0x0227, 0x0127, 0x0327, 0x01b3, - 0x0073, 0x0173, 0x00a7, 0x02a7, 0x0059, 0x006d, 0x00ed, 0x01a7, - 0x001d, 0x009d, 0x005d, 0x00f3, 0x01f3, 0x000b, 0x010b, 0x008b, - 0x018b, 0x004b, 0x014b, 0x00cb, 0x03a7, 0x0067, 0x01cb, 0x002b, - 0x012b, 0x00dd, 0x003d, 0x00ab, 0x01ab, 0x006b, 0x016b, 0x00eb, - 0x01eb, 0x001b, 0x0267, 0x0167, 0x011b, 0x009b, 0x019b, 0x005b, - 0x015b, 0x0367, 0x00db, 0x01db, 0x003b, 0x00e7, 0x02e7, 0x01e7, - 0x03e7, 0x0017, 0x054f, 0x0217, 0x0117, 0x034f, 0x074f, 0x0317, - 0x0097, 0x003e, 0x00bd, 0x0039, 0x0079, 0x0001, 0x007d, 0x00fd, - 0x0005, 0x0021, 0x0297, 0x013b, 0x0045, 0x0025, 0x0065, 0x0011, - 0x0015, 0x0197, 0x0031, 0x0009, 0x0055, 0x0035, 0x00bb, 0x0003, - 0x01bb, 0x0083, 0x0397, 0x00cf, 0x0057, 0x04cf, 0x0257, 0x0157, - 0x007b, 0x02cf, 0x06cf, 0x01cf, 0x05cf, 0x03cf, 0x07cf, 0x002f, - 0x042f, 0x022f, 0x062f, 0x0357, 0x012f, 0x052f, 0x032f, 0x00d7, - 0x02d7, 0x072f, 0x00af, 0x04af, 0x02af, 0x06af, 0x01af, 0x05af, - 0x03af, 0x07af, 0x006f, 0x046f, 0x026f, 0x066f, 0x016f, 0x056f, - 0x01d7, 0x036f, 0x076f, 0x00ef, 0x03d7, 0x04ef, 0x0037, 0x02ef, - 0x06ef, 0x01ef, 0x05ef, 0x03ef, 0x07ef, 0x001f, 0x041f, 0x021f, - 0x0237, 0x061f, 0x011f, 0x051f, 0x0137, 0x031f, 0x071f, 0x009f, - 0x049f, 0x029f, 0x069f, 0x019f, 0x059f, 0x0337, 0x039f, 0x079f, - 0x017b, 0x00b7, 0x00fb, 0x01fb, 0x005f, 0x045f, 0x025f, 0x02b7, - 0x065f, 0x015f, 0x055f, 0x035f, 0x075f, 0x00df, 0x04df, 0x01b7, - 0x03b7, 0x02df, 0x06df, 0x01df, 0x05df, 0x03df, 0x07df, 0x003f, - 0x043f, 0x023f, 0x063f, 0x013f, 0x053f, 0x033f, 0x073f, 0x00bf, - 0x0007, 0x04bf, 0x02bf, 0x0077, 0x06bf, 0x01bf, 0x05bf, 0x0277, - 0x0177, 0x03bf, 0x07bf, 0x007f, 0x047f, 0x027f, 0x067f, 0x017f, - 0x0107, 0x0377, 0x057f, 0x00f7, 0x037f, 0x077f, 0x00ff, 0x04ff, - 0x02f7, 0x01f7, 0x02ff, 0x06ff, 0x03f7, 0x000f, 0x0087, 0x0043, - 0x1fff}, + .lit_table = { 0x001e, 0x004d, 0x00e3, 0x00cd, 0x002d, 0x01e3, 0x0013, 0x0113, + 0x0093, 0x0193, 0x0019, 0x0053, 0x0153, 0x00ad, 0x00d3, 0x01d3, + 0x0033, 0x0047, 0x0247, 0x0147, 0x0347, 0x038f, 0x078f, 0x004f, + 0x00c7, 0x044f, 0x024f, 0x064f, 0x02c7, 0x014f, 0x01c7, 0x0133, + 0x0006, 0x03c7, 0x00b3, 0x0027, 0x0227, 0x0127, 0x0327, 0x01b3, + 0x0073, 0x0173, 0x00a7, 0x02a7, 0x0059, 0x006d, 0x00ed, 0x01a7, + 0x001d, 0x009d, 0x005d, 0x00f3, 0x01f3, 0x000b, 0x010b, 0x008b, + 0x018b, 0x004b, 0x014b, 0x00cb, 0x03a7, 0x0067, 0x01cb, 0x002b, + 0x012b, 0x00dd, 0x003d, 0x00ab, 0x01ab, 0x006b, 0x016b, 0x00eb, + 0x01eb, 0x001b, 0x0267, 0x0167, 0x011b, 0x009b, 0x019b, 0x005b, + 0x015b, 0x0367, 0x00db, 0x01db, 0x003b, 0x00e7, 0x02e7, 0x01e7, + 0x03e7, 0x0017, 0x054f, 0x0217, 0x0117, 0x034f, 0x074f, 0x0317, + 0x0097, 0x003e, 0x00bd, 0x0039, 0x0079, 0x0001, 0x007d, 0x00fd, + 0x0005, 0x0021, 0x0297, 0x013b, 0x0045, 0x0025, 0x0065, 0x0011, + 0x0015, 0x0197, 0x0031, 0x0009, 0x0055, 0x0035, 0x00bb, 0x0003, + 0x01bb, 0x0083, 0x0397, 0x00cf, 0x0057, 0x04cf, 0x0257, 0x0157, + 0x007b, 0x02cf, 0x06cf, 0x01cf, 0x05cf, 0x03cf, 0x07cf, 0x002f, + 0x042f, 0x022f, 0x062f, 0x0357, 0x012f, 0x052f, 0x032f, 0x00d7, + 0x02d7, 0x072f, 0x00af, 0x04af, 0x02af, 0x06af, 0x01af, 0x05af, + 0x03af, 0x07af, 0x006f, 0x046f, 0x026f, 0x066f, 0x016f, 0x056f, + 0x01d7, 0x036f, 0x076f, 0x00ef, 0x03d7, 0x04ef, 0x0037, 0x02ef, + 0x06ef, 0x01ef, 0x05ef, 0x03ef, 0x07ef, 0x001f, 0x041f, 0x021f, + 0x0237, 0x061f, 0x011f, 0x051f, 0x0137, 0x031f, 0x071f, 0x009f, + 0x049f, 0x029f, 0x069f, 0x019f, 0x059f, 0x0337, 0x039f, 0x079f, + 0x017b, 0x00b7, 0x00fb, 0x01fb, 0x005f, 0x045f, 0x025f, 0x02b7, + 0x065f, 0x015f, 0x055f, 0x035f, 0x075f, 0x00df, 0x04df, 0x01b7, + 0x03b7, 0x02df, 0x06df, 0x01df, 0x05df, 0x03df, 0x07df, 0x003f, + 0x043f, 0x023f, 0x063f, 0x013f, 0x053f, 0x033f, 0x073f, 0x00bf, + 0x0007, 0x04bf, 0x02bf, 0x0077, 0x06bf, 0x01bf, 0x05bf, 0x0277, + 0x0177, 0x03bf, 0x07bf, 0x007f, 0x047f, 0x027f, 0x067f, 0x017f, + 0x0107, 0x0377, 0x057f, 0x00f7, 0x037f, 0x077f, 0x00ff, 0x04ff, + 0x02f7, 0x01f7, 0x02ff, 0x06ff, 0x03f7, 0x000f, 0x0087, 0x0043, + 0x1fff }, - .lit_table_sizes = { - 0x06, 0x08, 0x09, 0x08, 0x08, 0x09, 0x09, 0x09, - 0x09, 0x09, 0x07, 0x09, 0x09, 0x08, 0x09, 0x09, - 0x09, 0x0a, 0x0a, 0x0a, 0x0a, 0x0b, 0x0b, 0x0b, - 0x0a, 0x0b, 0x0b, 0x0b, 0x0a, 0x0b, 0x0a, 0x09, - 0x05, 0x0a, 0x09, 0x0a, 0x0a, 0x0a, 0x0a, 0x09, - 0x09, 0x09, 0x0a, 0x0a, 0x07, 0x08, 0x08, 0x0a, - 0x08, 0x08, 0x08, 0x09, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x09, 0x09, 0x09, 0x0a, 0x0a, 0x09, 0x09, - 0x09, 0x08, 0x08, 0x09, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x09, 0x0a, 0x0a, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x0a, 0x09, 0x09, 0x09, 0x0a, 0x0a, 0x0a, - 0x0a, 0x0a, 0x0b, 0x0a, 0x0a, 0x0b, 0x0b, 0x0a, - 0x0a, 0x06, 0x08, 0x07, 0x07, 0x06, 0x08, 0x08, - 0x07, 0x06, 0x0a, 0x09, 0x07, 0x07, 0x07, 0x06, - 0x07, 0x0a, 0x06, 0x06, 0x07, 0x07, 0x09, 0x08, - 0x09, 0x08, 0x0a, 0x0b, 0x0a, 0x0b, 0x0a, 0x0a, - 0x09, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0a, 0x0b, 0x0b, 0x0b, 0x0a, - 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0a, 0x0b, 0x0b, 0x0b, 0x0a, 0x0b, 0x0a, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0a, 0x0b, 0x0b, 0x0b, 0x0a, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, 0x0b, 0x0b, - 0x09, 0x0a, 0x09, 0x09, 0x0b, 0x0b, 0x0b, 0x0a, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, - 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x09, 0x0b, 0x0b, 0x0a, 0x0b, 0x0b, 0x0b, 0x0a, - 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x09, 0x0a, 0x0b, 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0a, 0x0a, 0x0b, 0x0b, 0x0a, 0x0a, 0x09, 0x08, - 0x0f}, + .lit_table_sizes = { 0x06, 0x08, 0x09, 0x08, 0x08, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x07, 0x09, 0x09, 0x08, 0x09, 0x09, 0x09, 0x0a, 0x0a, 0x0a, + 0x0a, 0x0b, 0x0b, 0x0b, 0x0a, 0x0b, 0x0b, 0x0b, 0x0a, 0x0b, + 0x0a, 0x09, 0x05, 0x0a, 0x09, 0x0a, 0x0a, 0x0a, 0x0a, 0x09, + 0x09, 0x09, 0x0a, 0x0a, 0x07, 0x08, 0x08, 0x0a, 0x08, 0x08, + 0x08, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x0a, 0x0a, 0x09, 0x09, 0x09, 0x08, 0x08, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x0a, 0x0a, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x0a, 0x09, 0x09, 0x09, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, + 0x0b, 0x0a, 0x0a, 0x0b, 0x0b, 0x0a, 0x0a, 0x06, 0x08, 0x07, + 0x07, 0x06, 0x08, 0x08, 0x07, 0x06, 0x0a, 0x09, 0x07, 0x07, + 0x07, 0x06, 0x07, 0x0a, 0x06, 0x06, 0x07, 0x07, 0x09, 0x08, + 0x09, 0x08, 0x0a, 0x0b, 0x0a, 0x0b, 0x0a, 0x0a, 0x09, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, + 0x0b, 0x0b, 0x0b, 0x0a, 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0a, 0x0b, 0x0b, 0x0b, 0x0a, 0x0b, 0x0a, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, 0x0b, 0x0b, 0x0b, + 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, + 0x0b, 0x0b, 0x09, 0x0a, 0x09, 0x09, 0x0b, 0x0b, 0x0b, 0x0a, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, 0x0a, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x09, 0x0b, 0x0b, 0x0a, 0x0b, 0x0b, + 0x0b, 0x0a, 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x09, 0x0a, 0x0b, 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, 0x0a, + 0x0b, 0x0b, 0x0a, 0x0a, 0x09, 0x08, 0x0f }, #ifndef LONGER_HUFFTABLE - .dcodes = { - 0x003f, 0x00ff, 0x00bf, 0x01ff, 0x007f, 0x001f, 0x005f, 0x0017, - 0x0037, 0x000f, 0x0009, 0x0019, 0x0005, 0x0015, 0x0004, 0x000c, - 0x0002, 0x000d, 0x000a, 0x001d, 0x0006, 0x0003, 0x0000, 0x0013, - 0x000e, 0x000b, 0x0001, 0x001b, 0x0007, 0x002f}, + .dcodes = { 0x003f, 0x00ff, 0x00bf, 0x01ff, 0x007f, 0x001f, 0x005f, 0x0017, + 0x0037, 0x000f, 0x0009, 0x0019, 0x0005, 0x0015, 0x0004, 0x000c, + 0x0002, 0x000d, 0x000a, 0x001d, 0x0006, 0x0003, 0x0000, 0x0013, + 0x000e, 0x000b, 0x0001, 0x001b, 0x0007, 0x002f }, - .dcodes_sizes = { - 0x08, 0x09, 0x08, 0x09, 0x08, 0x07, 0x07, 0x06, - 0x06, 0x06, 0x05, 0x05, 0x05, 0x05, 0x04, 0x04, - 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x03, 0x05, - 0x04, 0x05, 0x04, 0x05, 0x05, 0x06} + .dcodes_sizes = { 0x08, 0x09, 0x08, 0x09, 0x08, 0x07, 0x07, 0x06, 0x06, 0x06, + 0x05, 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x05, 0x04, 0x05, + 0x04, 0x05, 0x03, 0x05, 0x04, 0x05, 0x04, 0x05, 0x05, 0x06 } #else .dcodes = { 0x0001, 0x001b, 0x0007, 0x002f}, @@ -4521,2217 +3636,1782 @@ struct isal_hufftables hufftables_default = { .dcodes_sizes = { 0x04, 0x05, 0x05, 0x06} #endif -}; + }; #endif // LARGE_WINDOW -struct isal_hufftables hufftables_static = { +struct isal_hufftables + hufftables_static = { - .deflate_hdr = {0x03}, - .deflate_hdr_count = 0, - .deflate_hdr_extra_bits = 3, + .deflate_hdr = { 0x03 }, + .deflate_hdr_count = 0, + .deflate_hdr_extra_bits = 3, - .dist_table = { - 0x00000005, 0x00000205, + .dist_table = { 0x00000005, 0x00000205, #ifdef LONGER_HUFFTABLE - 0x00000105, 0x00000305, 0x00000086, 0x00000486, - 0x00000286, 0x00000686, 0x00000187, 0x00000587, - 0x00000987, 0x00000d87, 0x00000387, 0x00000787, - 0x00000b87, 0x00000f87, 0x00000048, 0x00000448, - 0x00000848, 0x00000c48, 0x00001048, 0x00001448, - 0x00001848, 0x00001c48, 0x00000248, 0x00000648, - 0x00000a48, 0x00000e48, 0x00001248, 0x00001648, - 0x00001a48, 0x00001e48, 0x00000149, 0x00000549, - 0x00000949, 0x00000d49, 0x00001149, 0x00001549, - 0x00001949, 0x00001d49, 0x00002149, 0x00002549, - 0x00002949, 0x00002d49, 0x00003149, 0x00003549, - 0x00003949, 0x00003d49, 0x00000349, 0x00000749, - 0x00000b49, 0x00000f49, 0x00001349, 0x00001749, - 0x00001b49, 0x00001f49, 0x00002349, 0x00002749, - 0x00002b49, 0x00002f49, 0x00003349, 0x00003749, - 0x00003b49, 0x00003f49, 0x000000ca, 0x000004ca, - 0x000008ca, 0x00000cca, 0x000010ca, 0x000014ca, - 0x000018ca, 0x00001cca, 0x000020ca, 0x000024ca, - 0x000028ca, 0x00002cca, 0x000030ca, 0x000034ca, - 0x000038ca, 0x00003cca, 0x000040ca, 0x000044ca, - 0x000048ca, 0x00004cca, 0x000050ca, 0x000054ca, - 0x000058ca, 0x00005cca, 0x000060ca, 0x000064ca, - 0x000068ca, 0x00006cca, 0x000070ca, 0x000074ca, - 0x000078ca, 0x00007cca, 0x000002ca, 0x000006ca, - 0x00000aca, 0x00000eca, 0x000012ca, 0x000016ca, - 0x00001aca, 0x00001eca, 0x000022ca, 0x000026ca, - 0x00002aca, 0x00002eca, 0x000032ca, 0x000036ca, - 0x00003aca, 0x00003eca, 0x000042ca, 0x000046ca, - 0x00004aca, 0x00004eca, 0x000052ca, 0x000056ca, - 0x00005aca, 0x00005eca, 0x000062ca, 0x000066ca, - 0x00006aca, 0x00006eca, 0x000072ca, 0x000076ca, - 0x00007aca, 0x00007eca, 0x000001cb, 0x000005cb, - 0x000009cb, 0x00000dcb, 0x000011cb, 0x000015cb, - 0x000019cb, 0x00001dcb, 0x000021cb, 0x000025cb, - 0x000029cb, 0x00002dcb, 0x000031cb, 0x000035cb, - 0x000039cb, 0x00003dcb, 0x000041cb, 0x000045cb, - 0x000049cb, 0x00004dcb, 0x000051cb, 0x000055cb, - 0x000059cb, 0x00005dcb, 0x000061cb, 0x000065cb, - 0x000069cb, 0x00006dcb, 0x000071cb, 0x000075cb, - 0x000079cb, 0x00007dcb, 0x000081cb, 0x000085cb, - 0x000089cb, 0x00008dcb, 0x000091cb, 0x000095cb, - 0x000099cb, 0x00009dcb, 0x0000a1cb, 0x0000a5cb, - 0x0000a9cb, 0x0000adcb, 0x0000b1cb, 0x0000b5cb, - 0x0000b9cb, 0x0000bdcb, 0x0000c1cb, 0x0000c5cb, - 0x0000c9cb, 0x0000cdcb, 0x0000d1cb, 0x0000d5cb, - 0x0000d9cb, 0x0000ddcb, 0x0000e1cb, 0x0000e5cb, - 0x0000e9cb, 0x0000edcb, 0x0000f1cb, 0x0000f5cb, - 0x0000f9cb, 0x0000fdcb, 0x000003cb, 0x000007cb, - 0x00000bcb, 0x00000fcb, 0x000013cb, 0x000017cb, - 0x00001bcb, 0x00001fcb, 0x000023cb, 0x000027cb, - 0x00002bcb, 0x00002fcb, 0x000033cb, 0x000037cb, - 0x00003bcb, 0x00003fcb, 0x000043cb, 0x000047cb, - 0x00004bcb, 0x00004fcb, 0x000053cb, 0x000057cb, - 0x00005bcb, 0x00005fcb, 0x000063cb, 0x000067cb, - 0x00006bcb, 0x00006fcb, 0x000073cb, 0x000077cb, - 0x00007bcb, 0x00007fcb, 0x000083cb, 0x000087cb, - 0x00008bcb, 0x00008fcb, 0x000093cb, 0x000097cb, - 0x00009bcb, 0x00009fcb, 0x0000a3cb, 0x0000a7cb, - 0x0000abcb, 0x0000afcb, 0x0000b3cb, 0x0000b7cb, - 0x0000bbcb, 0x0000bfcb, 0x0000c3cb, 0x0000c7cb, - 0x0000cbcb, 0x0000cfcb, 0x0000d3cb, 0x0000d7cb, - 0x0000dbcb, 0x0000dfcb, 0x0000e3cb, 0x0000e7cb, - 0x0000ebcb, 0x0000efcb, 0x0000f3cb, 0x0000f7cb, - 0x0000fbcb, 0x0000ffcb, 0x0000002c, 0x0000042c, - 0x0000082c, 0x00000c2c, 0x0000102c, 0x0000142c, - 0x0000182c, 0x00001c2c, 0x0000202c, 0x0000242c, - 0x0000282c, 0x00002c2c, 0x0000302c, 0x0000342c, - 0x0000382c, 0x00003c2c, 0x0000402c, 0x0000442c, - 0x0000482c, 0x00004c2c, 0x0000502c, 0x0000542c, - 0x0000582c, 0x00005c2c, 0x0000602c, 0x0000642c, - 0x0000682c, 0x00006c2c, 0x0000702c, 0x0000742c, - 0x0000782c, 0x00007c2c, 0x0000802c, 0x0000842c, - 0x0000882c, 0x00008c2c, 0x0000902c, 0x0000942c, - 0x0000982c, 0x00009c2c, 0x0000a02c, 0x0000a42c, - 0x0000a82c, 0x0000ac2c, 0x0000b02c, 0x0000b42c, - 0x0000b82c, 0x0000bc2c, 0x0000c02c, 0x0000c42c, - 0x0000c82c, 0x0000cc2c, 0x0000d02c, 0x0000d42c, - 0x0000d82c, 0x0000dc2c, 0x0000e02c, 0x0000e42c, - 0x0000e82c, 0x0000ec2c, 0x0000f02c, 0x0000f42c, - 0x0000f82c, 0x0000fc2c, 0x0001002c, 0x0001042c, - 0x0001082c, 0x00010c2c, 0x0001102c, 0x0001142c, - 0x0001182c, 0x00011c2c, 0x0001202c, 0x0001242c, - 0x0001282c, 0x00012c2c, 0x0001302c, 0x0001342c, - 0x0001382c, 0x00013c2c, 0x0001402c, 0x0001442c, - 0x0001482c, 0x00014c2c, 0x0001502c, 0x0001542c, - 0x0001582c, 0x00015c2c, 0x0001602c, 0x0001642c, - 0x0001682c, 0x00016c2c, 0x0001702c, 0x0001742c, - 0x0001782c, 0x00017c2c, 0x0001802c, 0x0001842c, - 0x0001882c, 0x00018c2c, 0x0001902c, 0x0001942c, - 0x0001982c, 0x00019c2c, 0x0001a02c, 0x0001a42c, - 0x0001a82c, 0x0001ac2c, 0x0001b02c, 0x0001b42c, - 0x0001b82c, 0x0001bc2c, 0x0001c02c, 0x0001c42c, - 0x0001c82c, 0x0001cc2c, 0x0001d02c, 0x0001d42c, - 0x0001d82c, 0x0001dc2c, 0x0001e02c, 0x0001e42c, - 0x0001e82c, 0x0001ec2c, 0x0001f02c, 0x0001f42c, - 0x0001f82c, 0x0001fc2c, 0x0000022c, 0x0000062c, - 0x00000a2c, 0x00000e2c, 0x0000122c, 0x0000162c, - 0x00001a2c, 0x00001e2c, 0x0000222c, 0x0000262c, - 0x00002a2c, 0x00002e2c, 0x0000322c, 0x0000362c, - 0x00003a2c, 0x00003e2c, 0x0000422c, 0x0000462c, - 0x00004a2c, 0x00004e2c, 0x0000522c, 0x0000562c, - 0x00005a2c, 0x00005e2c, 0x0000622c, 0x0000662c, - 0x00006a2c, 0x00006e2c, 0x0000722c, 0x0000762c, - 0x00007a2c, 0x00007e2c, 0x0000822c, 0x0000862c, - 0x00008a2c, 0x00008e2c, 0x0000922c, 0x0000962c, - 0x00009a2c, 0x00009e2c, 0x0000a22c, 0x0000a62c, - 0x0000aa2c, 0x0000ae2c, 0x0000b22c, 0x0000b62c, - 0x0000ba2c, 0x0000be2c, 0x0000c22c, 0x0000c62c, - 0x0000ca2c, 0x0000ce2c, 0x0000d22c, 0x0000d62c, - 0x0000da2c, 0x0000de2c, 0x0000e22c, 0x0000e62c, - 0x0000ea2c, 0x0000ee2c, 0x0000f22c, 0x0000f62c, - 0x0000fa2c, 0x0000fe2c, 0x0001022c, 0x0001062c, - 0x00010a2c, 0x00010e2c, 0x0001122c, 0x0001162c, - 0x00011a2c, 0x00011e2c, 0x0001222c, 0x0001262c, - 0x00012a2c, 0x00012e2c, 0x0001322c, 0x0001362c, - 0x00013a2c, 0x00013e2c, 0x0001422c, 0x0001462c, - 0x00014a2c, 0x00014e2c, 0x0001522c, 0x0001562c, - 0x00015a2c, 0x00015e2c, 0x0001622c, 0x0001662c, - 0x00016a2c, 0x00016e2c, 0x0001722c, 0x0001762c, - 0x00017a2c, 0x00017e2c, 0x0001822c, 0x0001862c, - 0x00018a2c, 0x00018e2c, 0x0001922c, 0x0001962c, - 0x00019a2c, 0x00019e2c, 0x0001a22c, 0x0001a62c, - 0x0001aa2c, 0x0001ae2c, 0x0001b22c, 0x0001b62c, - 0x0001ba2c, 0x0001be2c, 0x0001c22c, 0x0001c62c, - 0x0001ca2c, 0x0001ce2c, 0x0001d22c, 0x0001d62c, - 0x0001da2c, 0x0001de2c, 0x0001e22c, 0x0001e62c, - 0x0001ea2c, 0x0001ee2c, 0x0001f22c, 0x0001f62c, - 0x0001fa2c, 0x0001fe2c, 0x0000012d, 0x0000052d, - 0x0000092d, 0x00000d2d, 0x0000112d, 0x0000152d, - 0x0000192d, 0x00001d2d, 0x0000212d, 0x0000252d, - 0x0000292d, 0x00002d2d, 0x0000312d, 0x0000352d, - 0x0000392d, 0x00003d2d, 0x0000412d, 0x0000452d, - 0x0000492d, 0x00004d2d, 0x0000512d, 0x0000552d, - 0x0000592d, 0x00005d2d, 0x0000612d, 0x0000652d, - 0x0000692d, 0x00006d2d, 0x0000712d, 0x0000752d, - 0x0000792d, 0x00007d2d, 0x0000812d, 0x0000852d, - 0x0000892d, 0x00008d2d, 0x0000912d, 0x0000952d, - 0x0000992d, 0x00009d2d, 0x0000a12d, 0x0000a52d, - 0x0000a92d, 0x0000ad2d, 0x0000b12d, 0x0000b52d, - 0x0000b92d, 0x0000bd2d, 0x0000c12d, 0x0000c52d, - 0x0000c92d, 0x0000cd2d, 0x0000d12d, 0x0000d52d, - 0x0000d92d, 0x0000dd2d, 0x0000e12d, 0x0000e52d, - 0x0000e92d, 0x0000ed2d, 0x0000f12d, 0x0000f52d, - 0x0000f92d, 0x0000fd2d, 0x0001012d, 0x0001052d, - 0x0001092d, 0x00010d2d, 0x0001112d, 0x0001152d, - 0x0001192d, 0x00011d2d, 0x0001212d, 0x0001252d, - 0x0001292d, 0x00012d2d, 0x0001312d, 0x0001352d, - 0x0001392d, 0x00013d2d, 0x0001412d, 0x0001452d, - 0x0001492d, 0x00014d2d, 0x0001512d, 0x0001552d, - 0x0001592d, 0x00015d2d, 0x0001612d, 0x0001652d, - 0x0001692d, 0x00016d2d, 0x0001712d, 0x0001752d, - 0x0001792d, 0x00017d2d, 0x0001812d, 0x0001852d, - 0x0001892d, 0x00018d2d, 0x0001912d, 0x0001952d, - 0x0001992d, 0x00019d2d, 0x0001a12d, 0x0001a52d, - 0x0001a92d, 0x0001ad2d, 0x0001b12d, 0x0001b52d, - 0x0001b92d, 0x0001bd2d, 0x0001c12d, 0x0001c52d, - 0x0001c92d, 0x0001cd2d, 0x0001d12d, 0x0001d52d, - 0x0001d92d, 0x0001dd2d, 0x0001e12d, 0x0001e52d, - 0x0001e92d, 0x0001ed2d, 0x0001f12d, 0x0001f52d, - 0x0001f92d, 0x0001fd2d, 0x0002012d, 0x0002052d, - 0x0002092d, 0x00020d2d, 0x0002112d, 0x0002152d, - 0x0002192d, 0x00021d2d, 0x0002212d, 0x0002252d, - 0x0002292d, 0x00022d2d, 0x0002312d, 0x0002352d, - 0x0002392d, 0x00023d2d, 0x0002412d, 0x0002452d, - 0x0002492d, 0x00024d2d, 0x0002512d, 0x0002552d, - 0x0002592d, 0x00025d2d, 0x0002612d, 0x0002652d, - 0x0002692d, 0x00026d2d, 0x0002712d, 0x0002752d, - 0x0002792d, 0x00027d2d, 0x0002812d, 0x0002852d, - 0x0002892d, 0x00028d2d, 0x0002912d, 0x0002952d, - 0x0002992d, 0x00029d2d, 0x0002a12d, 0x0002a52d, - 0x0002a92d, 0x0002ad2d, 0x0002b12d, 0x0002b52d, - 0x0002b92d, 0x0002bd2d, 0x0002c12d, 0x0002c52d, - 0x0002c92d, 0x0002cd2d, 0x0002d12d, 0x0002d52d, - 0x0002d92d, 0x0002dd2d, 0x0002e12d, 0x0002e52d, - 0x0002e92d, 0x0002ed2d, 0x0002f12d, 0x0002f52d, - 0x0002f92d, 0x0002fd2d, 0x0003012d, 0x0003052d, - 0x0003092d, 0x00030d2d, 0x0003112d, 0x0003152d, - 0x0003192d, 0x00031d2d, 0x0003212d, 0x0003252d, - 0x0003292d, 0x00032d2d, 0x0003312d, 0x0003352d, - 0x0003392d, 0x00033d2d, 0x0003412d, 0x0003452d, - 0x0003492d, 0x00034d2d, 0x0003512d, 0x0003552d, - 0x0003592d, 0x00035d2d, 0x0003612d, 0x0003652d, - 0x0003692d, 0x00036d2d, 0x0003712d, 0x0003752d, - 0x0003792d, 0x00037d2d, 0x0003812d, 0x0003852d, - 0x0003892d, 0x00038d2d, 0x0003912d, 0x0003952d, - 0x0003992d, 0x00039d2d, 0x0003a12d, 0x0003a52d, - 0x0003a92d, 0x0003ad2d, 0x0003b12d, 0x0003b52d, - 0x0003b92d, 0x0003bd2d, 0x0003c12d, 0x0003c52d, - 0x0003c92d, 0x0003cd2d, 0x0003d12d, 0x0003d52d, - 0x0003d92d, 0x0003dd2d, 0x0003e12d, 0x0003e52d, - 0x0003e92d, 0x0003ed2d, 0x0003f12d, 0x0003f52d, - 0x0003f92d, 0x0003fd2d, 0x0000032d, 0x0000072d, - 0x00000b2d, 0x00000f2d, 0x0000132d, 0x0000172d, - 0x00001b2d, 0x00001f2d, 0x0000232d, 0x0000272d, - 0x00002b2d, 0x00002f2d, 0x0000332d, 0x0000372d, - 0x00003b2d, 0x00003f2d, 0x0000432d, 0x0000472d, - 0x00004b2d, 0x00004f2d, 0x0000532d, 0x0000572d, - 0x00005b2d, 0x00005f2d, 0x0000632d, 0x0000672d, - 0x00006b2d, 0x00006f2d, 0x0000732d, 0x0000772d, - 0x00007b2d, 0x00007f2d, 0x0000832d, 0x0000872d, - 0x00008b2d, 0x00008f2d, 0x0000932d, 0x0000972d, - 0x00009b2d, 0x00009f2d, 0x0000a32d, 0x0000a72d, - 0x0000ab2d, 0x0000af2d, 0x0000b32d, 0x0000b72d, - 0x0000bb2d, 0x0000bf2d, 0x0000c32d, 0x0000c72d, - 0x0000cb2d, 0x0000cf2d, 0x0000d32d, 0x0000d72d, - 0x0000db2d, 0x0000df2d, 0x0000e32d, 0x0000e72d, - 0x0000eb2d, 0x0000ef2d, 0x0000f32d, 0x0000f72d, - 0x0000fb2d, 0x0000ff2d, 0x0001032d, 0x0001072d, - 0x00010b2d, 0x00010f2d, 0x0001132d, 0x0001172d, - 0x00011b2d, 0x00011f2d, 0x0001232d, 0x0001272d, - 0x00012b2d, 0x00012f2d, 0x0001332d, 0x0001372d, - 0x00013b2d, 0x00013f2d, 0x0001432d, 0x0001472d, - 0x00014b2d, 0x00014f2d, 0x0001532d, 0x0001572d, - 0x00015b2d, 0x00015f2d, 0x0001632d, 0x0001672d, - 0x00016b2d, 0x00016f2d, 0x0001732d, 0x0001772d, - 0x00017b2d, 0x00017f2d, 0x0001832d, 0x0001872d, - 0x00018b2d, 0x00018f2d, 0x0001932d, 0x0001972d, - 0x00019b2d, 0x00019f2d, 0x0001a32d, 0x0001a72d, - 0x0001ab2d, 0x0001af2d, 0x0001b32d, 0x0001b72d, - 0x0001bb2d, 0x0001bf2d, 0x0001c32d, 0x0001c72d, - 0x0001cb2d, 0x0001cf2d, 0x0001d32d, 0x0001d72d, - 0x0001db2d, 0x0001df2d, 0x0001e32d, 0x0001e72d, - 0x0001eb2d, 0x0001ef2d, 0x0001f32d, 0x0001f72d, - 0x0001fb2d, 0x0001ff2d, 0x0002032d, 0x0002072d, - 0x00020b2d, 0x00020f2d, 0x0002132d, 0x0002172d, - 0x00021b2d, 0x00021f2d, 0x0002232d, 0x0002272d, - 0x00022b2d, 0x00022f2d, 0x0002332d, 0x0002372d, - 0x00023b2d, 0x00023f2d, 0x0002432d, 0x0002472d, - 0x00024b2d, 0x00024f2d, 0x0002532d, 0x0002572d, - 0x00025b2d, 0x00025f2d, 0x0002632d, 0x0002672d, - 0x00026b2d, 0x00026f2d, 0x0002732d, 0x0002772d, - 0x00027b2d, 0x00027f2d, 0x0002832d, 0x0002872d, - 0x00028b2d, 0x00028f2d, 0x0002932d, 0x0002972d, - 0x00029b2d, 0x00029f2d, 0x0002a32d, 0x0002a72d, - 0x0002ab2d, 0x0002af2d, 0x0002b32d, 0x0002b72d, - 0x0002bb2d, 0x0002bf2d, 0x0002c32d, 0x0002c72d, - 0x0002cb2d, 0x0002cf2d, 0x0002d32d, 0x0002d72d, - 0x0002db2d, 0x0002df2d, 0x0002e32d, 0x0002e72d, - 0x0002eb2d, 0x0002ef2d, 0x0002f32d, 0x0002f72d, - 0x0002fb2d, 0x0002ff2d, 0x0003032d, 0x0003072d, - 0x00030b2d, 0x00030f2d, 0x0003132d, 0x0003172d, - 0x00031b2d, 0x00031f2d, 0x0003232d, 0x0003272d, - 0x00032b2d, 0x00032f2d, 0x0003332d, 0x0003372d, - 0x00033b2d, 0x00033f2d, 0x0003432d, 0x0003472d, - 0x00034b2d, 0x00034f2d, 0x0003532d, 0x0003572d, - 0x00035b2d, 0x00035f2d, 0x0003632d, 0x0003672d, - 0x00036b2d, 0x00036f2d, 0x0003732d, 0x0003772d, - 0x00037b2d, 0x00037f2d, 0x0003832d, 0x0003872d, - 0x00038b2d, 0x00038f2d, 0x0003932d, 0x0003972d, - 0x00039b2d, 0x00039f2d, 0x0003a32d, 0x0003a72d, - 0x0003ab2d, 0x0003af2d, 0x0003b32d, 0x0003b72d, - 0x0003bb2d, 0x0003bf2d, 0x0003c32d, 0x0003c72d, - 0x0003cb2d, 0x0003cf2d, 0x0003d32d, 0x0003d72d, - 0x0003db2d, 0x0003df2d, 0x0003e32d, 0x0003e72d, - 0x0003eb2d, 0x0003ef2d, 0x0003f32d, 0x0003f72d, - 0x0003fb2d, 0x0003ff2d, 0x000000ae, 0x000004ae, - 0x000008ae, 0x00000cae, 0x000010ae, 0x000014ae, - 0x000018ae, 0x00001cae, 0x000020ae, 0x000024ae, - 0x000028ae, 0x00002cae, 0x000030ae, 0x000034ae, - 0x000038ae, 0x00003cae, 0x000040ae, 0x000044ae, - 0x000048ae, 0x00004cae, 0x000050ae, 0x000054ae, - 0x000058ae, 0x00005cae, 0x000060ae, 0x000064ae, - 0x000068ae, 0x00006cae, 0x000070ae, 0x000074ae, - 0x000078ae, 0x00007cae, 0x000080ae, 0x000084ae, - 0x000088ae, 0x00008cae, 0x000090ae, 0x000094ae, - 0x000098ae, 0x00009cae, 0x0000a0ae, 0x0000a4ae, - 0x0000a8ae, 0x0000acae, 0x0000b0ae, 0x0000b4ae, - 0x0000b8ae, 0x0000bcae, 0x0000c0ae, 0x0000c4ae, - 0x0000c8ae, 0x0000ccae, 0x0000d0ae, 0x0000d4ae, - 0x0000d8ae, 0x0000dcae, 0x0000e0ae, 0x0000e4ae, - 0x0000e8ae, 0x0000ecae, 0x0000f0ae, 0x0000f4ae, - 0x0000f8ae, 0x0000fcae, 0x000100ae, 0x000104ae, - 0x000108ae, 0x00010cae, 0x000110ae, 0x000114ae, - 0x000118ae, 0x00011cae, 0x000120ae, 0x000124ae, - 0x000128ae, 0x00012cae, 0x000130ae, 0x000134ae, - 0x000138ae, 0x00013cae, 0x000140ae, 0x000144ae, - 0x000148ae, 0x00014cae, 0x000150ae, 0x000154ae, - 0x000158ae, 0x00015cae, 0x000160ae, 0x000164ae, - 0x000168ae, 0x00016cae, 0x000170ae, 0x000174ae, - 0x000178ae, 0x00017cae, 0x000180ae, 0x000184ae, - 0x000188ae, 0x00018cae, 0x000190ae, 0x000194ae, - 0x000198ae, 0x00019cae, 0x0001a0ae, 0x0001a4ae, - 0x0001a8ae, 0x0001acae, 0x0001b0ae, 0x0001b4ae, - 0x0001b8ae, 0x0001bcae, 0x0001c0ae, 0x0001c4ae, - 0x0001c8ae, 0x0001ccae, 0x0001d0ae, 0x0001d4ae, - 0x0001d8ae, 0x0001dcae, 0x0001e0ae, 0x0001e4ae, - 0x0001e8ae, 0x0001ecae, 0x0001f0ae, 0x0001f4ae, - 0x0001f8ae, 0x0001fcae, 0x000200ae, 0x000204ae, - 0x000208ae, 0x00020cae, 0x000210ae, 0x000214ae, - 0x000218ae, 0x00021cae, 0x000220ae, 0x000224ae, - 0x000228ae, 0x00022cae, 0x000230ae, 0x000234ae, - 0x000238ae, 0x00023cae, 0x000240ae, 0x000244ae, - 0x000248ae, 0x00024cae, 0x000250ae, 0x000254ae, - 0x000258ae, 0x00025cae, 0x000260ae, 0x000264ae, - 0x000268ae, 0x00026cae, 0x000270ae, 0x000274ae, - 0x000278ae, 0x00027cae, 0x000280ae, 0x000284ae, - 0x000288ae, 0x00028cae, 0x000290ae, 0x000294ae, - 0x000298ae, 0x00029cae, 0x0002a0ae, 0x0002a4ae, - 0x0002a8ae, 0x0002acae, 0x0002b0ae, 0x0002b4ae, - 0x0002b8ae, 0x0002bcae, 0x0002c0ae, 0x0002c4ae, - 0x0002c8ae, 0x0002ccae, 0x0002d0ae, 0x0002d4ae, - 0x0002d8ae, 0x0002dcae, 0x0002e0ae, 0x0002e4ae, - 0x0002e8ae, 0x0002ecae, 0x0002f0ae, 0x0002f4ae, - 0x0002f8ae, 0x0002fcae, 0x000300ae, 0x000304ae, - 0x000308ae, 0x00030cae, 0x000310ae, 0x000314ae, - 0x000318ae, 0x00031cae, 0x000320ae, 0x000324ae, - 0x000328ae, 0x00032cae, 0x000330ae, 0x000334ae, - 0x000338ae, 0x00033cae, 0x000340ae, 0x000344ae, - 0x000348ae, 0x00034cae, 0x000350ae, 0x000354ae, - 0x000358ae, 0x00035cae, 0x000360ae, 0x000364ae, - 0x000368ae, 0x00036cae, 0x000370ae, 0x000374ae, - 0x000378ae, 0x00037cae, 0x000380ae, 0x000384ae, - 0x000388ae, 0x00038cae, 0x000390ae, 0x000394ae, - 0x000398ae, 0x00039cae, 0x0003a0ae, 0x0003a4ae, - 0x0003a8ae, 0x0003acae, 0x0003b0ae, 0x0003b4ae, - 0x0003b8ae, 0x0003bcae, 0x0003c0ae, 0x0003c4ae, - 0x0003c8ae, 0x0003ccae, 0x0003d0ae, 0x0003d4ae, - 0x0003d8ae, 0x0003dcae, 0x0003e0ae, 0x0003e4ae, - 0x0003e8ae, 0x0003ecae, 0x0003f0ae, 0x0003f4ae, - 0x0003f8ae, 0x0003fcae, 0x000400ae, 0x000404ae, - 0x000408ae, 0x00040cae, 0x000410ae, 0x000414ae, - 0x000418ae, 0x00041cae, 0x000420ae, 0x000424ae, - 0x000428ae, 0x00042cae, 0x000430ae, 0x000434ae, - 0x000438ae, 0x00043cae, 0x000440ae, 0x000444ae, - 0x000448ae, 0x00044cae, 0x000450ae, 0x000454ae, - 0x000458ae, 0x00045cae, 0x000460ae, 0x000464ae, - 0x000468ae, 0x00046cae, 0x000470ae, 0x000474ae, - 0x000478ae, 0x00047cae, 0x000480ae, 0x000484ae, - 0x000488ae, 0x00048cae, 0x000490ae, 0x000494ae, - 0x000498ae, 0x00049cae, 0x0004a0ae, 0x0004a4ae, - 0x0004a8ae, 0x0004acae, 0x0004b0ae, 0x0004b4ae, - 0x0004b8ae, 0x0004bcae, 0x0004c0ae, 0x0004c4ae, - 0x0004c8ae, 0x0004ccae, 0x0004d0ae, 0x0004d4ae, - 0x0004d8ae, 0x0004dcae, 0x0004e0ae, 0x0004e4ae, - 0x0004e8ae, 0x0004ecae, 0x0004f0ae, 0x0004f4ae, - 0x0004f8ae, 0x0004fcae, 0x000500ae, 0x000504ae, - 0x000508ae, 0x00050cae, 0x000510ae, 0x000514ae, - 0x000518ae, 0x00051cae, 0x000520ae, 0x000524ae, - 0x000528ae, 0x00052cae, 0x000530ae, 0x000534ae, - 0x000538ae, 0x00053cae, 0x000540ae, 0x000544ae, - 0x000548ae, 0x00054cae, 0x000550ae, 0x000554ae, - 0x000558ae, 0x00055cae, 0x000560ae, 0x000564ae, - 0x000568ae, 0x00056cae, 0x000570ae, 0x000574ae, - 0x000578ae, 0x00057cae, 0x000580ae, 0x000584ae, - 0x000588ae, 0x00058cae, 0x000590ae, 0x000594ae, - 0x000598ae, 0x00059cae, 0x0005a0ae, 0x0005a4ae, - 0x0005a8ae, 0x0005acae, 0x0005b0ae, 0x0005b4ae, - 0x0005b8ae, 0x0005bcae, 0x0005c0ae, 0x0005c4ae, - 0x0005c8ae, 0x0005ccae, 0x0005d0ae, 0x0005d4ae, - 0x0005d8ae, 0x0005dcae, 0x0005e0ae, 0x0005e4ae, - 0x0005e8ae, 0x0005ecae, 0x0005f0ae, 0x0005f4ae, - 0x0005f8ae, 0x0005fcae, 0x000600ae, 0x000604ae, - 0x000608ae, 0x00060cae, 0x000610ae, 0x000614ae, - 0x000618ae, 0x00061cae, 0x000620ae, 0x000624ae, - 0x000628ae, 0x00062cae, 0x000630ae, 0x000634ae, - 0x000638ae, 0x00063cae, 0x000640ae, 0x000644ae, - 0x000648ae, 0x00064cae, 0x000650ae, 0x000654ae, - 0x000658ae, 0x00065cae, 0x000660ae, 0x000664ae, - 0x000668ae, 0x00066cae, 0x000670ae, 0x000674ae, - 0x000678ae, 0x00067cae, 0x000680ae, 0x000684ae, - 0x000688ae, 0x00068cae, 0x000690ae, 0x000694ae, - 0x000698ae, 0x00069cae, 0x0006a0ae, 0x0006a4ae, - 0x0006a8ae, 0x0006acae, 0x0006b0ae, 0x0006b4ae, - 0x0006b8ae, 0x0006bcae, 0x0006c0ae, 0x0006c4ae, - 0x0006c8ae, 0x0006ccae, 0x0006d0ae, 0x0006d4ae, - 0x0006d8ae, 0x0006dcae, 0x0006e0ae, 0x0006e4ae, - 0x0006e8ae, 0x0006ecae, 0x0006f0ae, 0x0006f4ae, - 0x0006f8ae, 0x0006fcae, 0x000700ae, 0x000704ae, - 0x000708ae, 0x00070cae, 0x000710ae, 0x000714ae, - 0x000718ae, 0x00071cae, 0x000720ae, 0x000724ae, - 0x000728ae, 0x00072cae, 0x000730ae, 0x000734ae, - 0x000738ae, 0x00073cae, 0x000740ae, 0x000744ae, - 0x000748ae, 0x00074cae, 0x000750ae, 0x000754ae, - 0x000758ae, 0x00075cae, 0x000760ae, 0x000764ae, - 0x000768ae, 0x00076cae, 0x000770ae, 0x000774ae, - 0x000778ae, 0x00077cae, 0x000780ae, 0x000784ae, - 0x000788ae, 0x00078cae, 0x000790ae, 0x000794ae, - 0x000798ae, 0x00079cae, 0x0007a0ae, 0x0007a4ae, - 0x0007a8ae, 0x0007acae, 0x0007b0ae, 0x0007b4ae, - 0x0007b8ae, 0x0007bcae, 0x0007c0ae, 0x0007c4ae, - 0x0007c8ae, 0x0007ccae, 0x0007d0ae, 0x0007d4ae, - 0x0007d8ae, 0x0007dcae, 0x0007e0ae, 0x0007e4ae, - 0x0007e8ae, 0x0007ecae, 0x0007f0ae, 0x0007f4ae, - 0x0007f8ae, 0x0007fcae, 0x000002ae, 0x000006ae, - 0x00000aae, 0x00000eae, 0x000012ae, 0x000016ae, - 0x00001aae, 0x00001eae, 0x000022ae, 0x000026ae, - 0x00002aae, 0x00002eae, 0x000032ae, 0x000036ae, - 0x00003aae, 0x00003eae, 0x000042ae, 0x000046ae, - 0x00004aae, 0x00004eae, 0x000052ae, 0x000056ae, - 0x00005aae, 0x00005eae, 0x000062ae, 0x000066ae, - 0x00006aae, 0x00006eae, 0x000072ae, 0x000076ae, - 0x00007aae, 0x00007eae, 0x000082ae, 0x000086ae, - 0x00008aae, 0x00008eae, 0x000092ae, 0x000096ae, - 0x00009aae, 0x00009eae, 0x0000a2ae, 0x0000a6ae, - 0x0000aaae, 0x0000aeae, 0x0000b2ae, 0x0000b6ae, - 0x0000baae, 0x0000beae, 0x0000c2ae, 0x0000c6ae, - 0x0000caae, 0x0000ceae, 0x0000d2ae, 0x0000d6ae, - 0x0000daae, 0x0000deae, 0x0000e2ae, 0x0000e6ae, - 0x0000eaae, 0x0000eeae, 0x0000f2ae, 0x0000f6ae, - 0x0000faae, 0x0000feae, 0x000102ae, 0x000106ae, - 0x00010aae, 0x00010eae, 0x000112ae, 0x000116ae, - 0x00011aae, 0x00011eae, 0x000122ae, 0x000126ae, - 0x00012aae, 0x00012eae, 0x000132ae, 0x000136ae, - 0x00013aae, 0x00013eae, 0x000142ae, 0x000146ae, - 0x00014aae, 0x00014eae, 0x000152ae, 0x000156ae, - 0x00015aae, 0x00015eae, 0x000162ae, 0x000166ae, - 0x00016aae, 0x00016eae, 0x000172ae, 0x000176ae, - 0x00017aae, 0x00017eae, 0x000182ae, 0x000186ae, - 0x00018aae, 0x00018eae, 0x000192ae, 0x000196ae, - 0x00019aae, 0x00019eae, 0x0001a2ae, 0x0001a6ae, - 0x0001aaae, 0x0001aeae, 0x0001b2ae, 0x0001b6ae, - 0x0001baae, 0x0001beae, 0x0001c2ae, 0x0001c6ae, - 0x0001caae, 0x0001ceae, 0x0001d2ae, 0x0001d6ae, - 0x0001daae, 0x0001deae, 0x0001e2ae, 0x0001e6ae, - 0x0001eaae, 0x0001eeae, 0x0001f2ae, 0x0001f6ae, - 0x0001faae, 0x0001feae, 0x000202ae, 0x000206ae, - 0x00020aae, 0x00020eae, 0x000212ae, 0x000216ae, - 0x00021aae, 0x00021eae, 0x000222ae, 0x000226ae, - 0x00022aae, 0x00022eae, 0x000232ae, 0x000236ae, - 0x00023aae, 0x00023eae, 0x000242ae, 0x000246ae, - 0x00024aae, 0x00024eae, 0x000252ae, 0x000256ae, - 0x00025aae, 0x00025eae, 0x000262ae, 0x000266ae, - 0x00026aae, 0x00026eae, 0x000272ae, 0x000276ae, - 0x00027aae, 0x00027eae, 0x000282ae, 0x000286ae, - 0x00028aae, 0x00028eae, 0x000292ae, 0x000296ae, - 0x00029aae, 0x00029eae, 0x0002a2ae, 0x0002a6ae, - 0x0002aaae, 0x0002aeae, 0x0002b2ae, 0x0002b6ae, - 0x0002baae, 0x0002beae, 0x0002c2ae, 0x0002c6ae, - 0x0002caae, 0x0002ceae, 0x0002d2ae, 0x0002d6ae, - 0x0002daae, 0x0002deae, 0x0002e2ae, 0x0002e6ae, - 0x0002eaae, 0x0002eeae, 0x0002f2ae, 0x0002f6ae, - 0x0002faae, 0x0002feae, 0x000302ae, 0x000306ae, - 0x00030aae, 0x00030eae, 0x000312ae, 0x000316ae, - 0x00031aae, 0x00031eae, 0x000322ae, 0x000326ae, - 0x00032aae, 0x00032eae, 0x000332ae, 0x000336ae, - 0x00033aae, 0x00033eae, 0x000342ae, 0x000346ae, - 0x00034aae, 0x00034eae, 0x000352ae, 0x000356ae, - 0x00035aae, 0x00035eae, 0x000362ae, 0x000366ae, - 0x00036aae, 0x00036eae, 0x000372ae, 0x000376ae, - 0x00037aae, 0x00037eae, 0x000382ae, 0x000386ae, - 0x00038aae, 0x00038eae, 0x000392ae, 0x000396ae, - 0x00039aae, 0x00039eae, 0x0003a2ae, 0x0003a6ae, - 0x0003aaae, 0x0003aeae, 0x0003b2ae, 0x0003b6ae, - 0x0003baae, 0x0003beae, 0x0003c2ae, 0x0003c6ae, - 0x0003caae, 0x0003ceae, 0x0003d2ae, 0x0003d6ae, - 0x0003daae, 0x0003deae, 0x0003e2ae, 0x0003e6ae, - 0x0003eaae, 0x0003eeae, 0x0003f2ae, 0x0003f6ae, - 0x0003faae, 0x0003feae, 0x000402ae, 0x000406ae, - 0x00040aae, 0x00040eae, 0x000412ae, 0x000416ae, - 0x00041aae, 0x00041eae, 0x000422ae, 0x000426ae, - 0x00042aae, 0x00042eae, 0x000432ae, 0x000436ae, - 0x00043aae, 0x00043eae, 0x000442ae, 0x000446ae, - 0x00044aae, 0x00044eae, 0x000452ae, 0x000456ae, - 0x00045aae, 0x00045eae, 0x000462ae, 0x000466ae, - 0x00046aae, 0x00046eae, 0x000472ae, 0x000476ae, - 0x00047aae, 0x00047eae, 0x000482ae, 0x000486ae, - 0x00048aae, 0x00048eae, 0x000492ae, 0x000496ae, - 0x00049aae, 0x00049eae, 0x0004a2ae, 0x0004a6ae, - 0x0004aaae, 0x0004aeae, 0x0004b2ae, 0x0004b6ae, - 0x0004baae, 0x0004beae, 0x0004c2ae, 0x0004c6ae, - 0x0004caae, 0x0004ceae, 0x0004d2ae, 0x0004d6ae, - 0x0004daae, 0x0004deae, 0x0004e2ae, 0x0004e6ae, - 0x0004eaae, 0x0004eeae, 0x0004f2ae, 0x0004f6ae, - 0x0004faae, 0x0004feae, 0x000502ae, 0x000506ae, - 0x00050aae, 0x00050eae, 0x000512ae, 0x000516ae, - 0x00051aae, 0x00051eae, 0x000522ae, 0x000526ae, - 0x00052aae, 0x00052eae, 0x000532ae, 0x000536ae, - 0x00053aae, 0x00053eae, 0x000542ae, 0x000546ae, - 0x00054aae, 0x00054eae, 0x000552ae, 0x000556ae, - 0x00055aae, 0x00055eae, 0x000562ae, 0x000566ae, - 0x00056aae, 0x00056eae, 0x000572ae, 0x000576ae, - 0x00057aae, 0x00057eae, 0x000582ae, 0x000586ae, - 0x00058aae, 0x00058eae, 0x000592ae, 0x000596ae, - 0x00059aae, 0x00059eae, 0x0005a2ae, 0x0005a6ae, - 0x0005aaae, 0x0005aeae, 0x0005b2ae, 0x0005b6ae, - 0x0005baae, 0x0005beae, 0x0005c2ae, 0x0005c6ae, - 0x0005caae, 0x0005ceae, 0x0005d2ae, 0x0005d6ae, - 0x0005daae, 0x0005deae, 0x0005e2ae, 0x0005e6ae, - 0x0005eaae, 0x0005eeae, 0x0005f2ae, 0x0005f6ae, - 0x0005faae, 0x0005feae, 0x000602ae, 0x000606ae, - 0x00060aae, 0x00060eae, 0x000612ae, 0x000616ae, - 0x00061aae, 0x00061eae, 0x000622ae, 0x000626ae, - 0x00062aae, 0x00062eae, 0x000632ae, 0x000636ae, - 0x00063aae, 0x00063eae, 0x000642ae, 0x000646ae, - 0x00064aae, 0x00064eae, 0x000652ae, 0x000656ae, - 0x00065aae, 0x00065eae, 0x000662ae, 0x000666ae, - 0x00066aae, 0x00066eae, 0x000672ae, 0x000676ae, - 0x00067aae, 0x00067eae, 0x000682ae, 0x000686ae, - 0x00068aae, 0x00068eae, 0x000692ae, 0x000696ae, - 0x00069aae, 0x00069eae, 0x0006a2ae, 0x0006a6ae, - 0x0006aaae, 0x0006aeae, 0x0006b2ae, 0x0006b6ae, - 0x0006baae, 0x0006beae, 0x0006c2ae, 0x0006c6ae, - 0x0006caae, 0x0006ceae, 0x0006d2ae, 0x0006d6ae, - 0x0006daae, 0x0006deae, 0x0006e2ae, 0x0006e6ae, - 0x0006eaae, 0x0006eeae, 0x0006f2ae, 0x0006f6ae, - 0x0006faae, 0x0006feae, 0x000702ae, 0x000706ae, - 0x00070aae, 0x00070eae, 0x000712ae, 0x000716ae, - 0x00071aae, 0x00071eae, 0x000722ae, 0x000726ae, - 0x00072aae, 0x00072eae, 0x000732ae, 0x000736ae, - 0x00073aae, 0x00073eae, 0x000742ae, 0x000746ae, - 0x00074aae, 0x00074eae, 0x000752ae, 0x000756ae, - 0x00075aae, 0x00075eae, 0x000762ae, 0x000766ae, - 0x00076aae, 0x00076eae, 0x000772ae, 0x000776ae, - 0x00077aae, 0x00077eae, 0x000782ae, 0x000786ae, - 0x00078aae, 0x00078eae, 0x000792ae, 0x000796ae, - 0x00079aae, 0x00079eae, 0x0007a2ae, 0x0007a6ae, - 0x0007aaae, 0x0007aeae, 0x0007b2ae, 0x0007b6ae, - 0x0007baae, 0x0007beae, 0x0007c2ae, 0x0007c6ae, - 0x0007caae, 0x0007ceae, 0x0007d2ae, 0x0007d6ae, - 0x0007daae, 0x0007deae, 0x0007e2ae, 0x0007e6ae, - 0x0007eaae, 0x0007eeae, 0x0007f2ae, 0x0007f6ae, - 0x0007faae, 0x0007feae, 0x000001af, 0x000005af, - 0x000009af, 0x00000daf, 0x000011af, 0x000015af, - 0x000019af, 0x00001daf, 0x000021af, 0x000025af, - 0x000029af, 0x00002daf, 0x000031af, 0x000035af, - 0x000039af, 0x00003daf, 0x000041af, 0x000045af, - 0x000049af, 0x00004daf, 0x000051af, 0x000055af, - 0x000059af, 0x00005daf, 0x000061af, 0x000065af, - 0x000069af, 0x00006daf, 0x000071af, 0x000075af, - 0x000079af, 0x00007daf, 0x000081af, 0x000085af, - 0x000089af, 0x00008daf, 0x000091af, 0x000095af, - 0x000099af, 0x00009daf, 0x0000a1af, 0x0000a5af, - 0x0000a9af, 0x0000adaf, 0x0000b1af, 0x0000b5af, - 0x0000b9af, 0x0000bdaf, 0x0000c1af, 0x0000c5af, - 0x0000c9af, 0x0000cdaf, 0x0000d1af, 0x0000d5af, - 0x0000d9af, 0x0000ddaf, 0x0000e1af, 0x0000e5af, - 0x0000e9af, 0x0000edaf, 0x0000f1af, 0x0000f5af, - 0x0000f9af, 0x0000fdaf, 0x000101af, 0x000105af, - 0x000109af, 0x00010daf, 0x000111af, 0x000115af, - 0x000119af, 0x00011daf, 0x000121af, 0x000125af, - 0x000129af, 0x00012daf, 0x000131af, 0x000135af, - 0x000139af, 0x00013daf, 0x000141af, 0x000145af, - 0x000149af, 0x00014daf, 0x000151af, 0x000155af, - 0x000159af, 0x00015daf, 0x000161af, 0x000165af, - 0x000169af, 0x00016daf, 0x000171af, 0x000175af, - 0x000179af, 0x00017daf, 0x000181af, 0x000185af, - 0x000189af, 0x00018daf, 0x000191af, 0x000195af, - 0x000199af, 0x00019daf, 0x0001a1af, 0x0001a5af, - 0x0001a9af, 0x0001adaf, 0x0001b1af, 0x0001b5af, - 0x0001b9af, 0x0001bdaf, 0x0001c1af, 0x0001c5af, - 0x0001c9af, 0x0001cdaf, 0x0001d1af, 0x0001d5af, - 0x0001d9af, 0x0001ddaf, 0x0001e1af, 0x0001e5af, - 0x0001e9af, 0x0001edaf, 0x0001f1af, 0x0001f5af, - 0x0001f9af, 0x0001fdaf, 0x000201af, 0x000205af, - 0x000209af, 0x00020daf, 0x000211af, 0x000215af, - 0x000219af, 0x00021daf, 0x000221af, 0x000225af, - 0x000229af, 0x00022daf, 0x000231af, 0x000235af, - 0x000239af, 0x00023daf, 0x000241af, 0x000245af, - 0x000249af, 0x00024daf, 0x000251af, 0x000255af, - 0x000259af, 0x00025daf, 0x000261af, 0x000265af, - 0x000269af, 0x00026daf, 0x000271af, 0x000275af, - 0x000279af, 0x00027daf, 0x000281af, 0x000285af, - 0x000289af, 0x00028daf, 0x000291af, 0x000295af, - 0x000299af, 0x00029daf, 0x0002a1af, 0x0002a5af, - 0x0002a9af, 0x0002adaf, 0x0002b1af, 0x0002b5af, - 0x0002b9af, 0x0002bdaf, 0x0002c1af, 0x0002c5af, - 0x0002c9af, 0x0002cdaf, 0x0002d1af, 0x0002d5af, - 0x0002d9af, 0x0002ddaf, 0x0002e1af, 0x0002e5af, - 0x0002e9af, 0x0002edaf, 0x0002f1af, 0x0002f5af, - 0x0002f9af, 0x0002fdaf, 0x000301af, 0x000305af, - 0x000309af, 0x00030daf, 0x000311af, 0x000315af, - 0x000319af, 0x00031daf, 0x000321af, 0x000325af, - 0x000329af, 0x00032daf, 0x000331af, 0x000335af, - 0x000339af, 0x00033daf, 0x000341af, 0x000345af, - 0x000349af, 0x00034daf, 0x000351af, 0x000355af, - 0x000359af, 0x00035daf, 0x000361af, 0x000365af, - 0x000369af, 0x00036daf, 0x000371af, 0x000375af, - 0x000379af, 0x00037daf, 0x000381af, 0x000385af, - 0x000389af, 0x00038daf, 0x000391af, 0x000395af, - 0x000399af, 0x00039daf, 0x0003a1af, 0x0003a5af, - 0x0003a9af, 0x0003adaf, 0x0003b1af, 0x0003b5af, - 0x0003b9af, 0x0003bdaf, 0x0003c1af, 0x0003c5af, - 0x0003c9af, 0x0003cdaf, 0x0003d1af, 0x0003d5af, - 0x0003d9af, 0x0003ddaf, 0x0003e1af, 0x0003e5af, - 0x0003e9af, 0x0003edaf, 0x0003f1af, 0x0003f5af, - 0x0003f9af, 0x0003fdaf, 0x000401af, 0x000405af, - 0x000409af, 0x00040daf, 0x000411af, 0x000415af, - 0x000419af, 0x00041daf, 0x000421af, 0x000425af, - 0x000429af, 0x00042daf, 0x000431af, 0x000435af, - 0x000439af, 0x00043daf, 0x000441af, 0x000445af, - 0x000449af, 0x00044daf, 0x000451af, 0x000455af, - 0x000459af, 0x00045daf, 0x000461af, 0x000465af, - 0x000469af, 0x00046daf, 0x000471af, 0x000475af, - 0x000479af, 0x00047daf, 0x000481af, 0x000485af, - 0x000489af, 0x00048daf, 0x000491af, 0x000495af, - 0x000499af, 0x00049daf, 0x0004a1af, 0x0004a5af, - 0x0004a9af, 0x0004adaf, 0x0004b1af, 0x0004b5af, - 0x0004b9af, 0x0004bdaf, 0x0004c1af, 0x0004c5af, - 0x0004c9af, 0x0004cdaf, 0x0004d1af, 0x0004d5af, - 0x0004d9af, 0x0004ddaf, 0x0004e1af, 0x0004e5af, - 0x0004e9af, 0x0004edaf, 0x0004f1af, 0x0004f5af, - 0x0004f9af, 0x0004fdaf, 0x000501af, 0x000505af, - 0x000509af, 0x00050daf, 0x000511af, 0x000515af, - 0x000519af, 0x00051daf, 0x000521af, 0x000525af, - 0x000529af, 0x00052daf, 0x000531af, 0x000535af, - 0x000539af, 0x00053daf, 0x000541af, 0x000545af, - 0x000549af, 0x00054daf, 0x000551af, 0x000555af, - 0x000559af, 0x00055daf, 0x000561af, 0x000565af, - 0x000569af, 0x00056daf, 0x000571af, 0x000575af, - 0x000579af, 0x00057daf, 0x000581af, 0x000585af, - 0x000589af, 0x00058daf, 0x000591af, 0x000595af, - 0x000599af, 0x00059daf, 0x0005a1af, 0x0005a5af, - 0x0005a9af, 0x0005adaf, 0x0005b1af, 0x0005b5af, - 0x0005b9af, 0x0005bdaf, 0x0005c1af, 0x0005c5af, - 0x0005c9af, 0x0005cdaf, 0x0005d1af, 0x0005d5af, - 0x0005d9af, 0x0005ddaf, 0x0005e1af, 0x0005e5af, - 0x0005e9af, 0x0005edaf, 0x0005f1af, 0x0005f5af, - 0x0005f9af, 0x0005fdaf, 0x000601af, 0x000605af, - 0x000609af, 0x00060daf, 0x000611af, 0x000615af, - 0x000619af, 0x00061daf, 0x000621af, 0x000625af, - 0x000629af, 0x00062daf, 0x000631af, 0x000635af, - 0x000639af, 0x00063daf, 0x000641af, 0x000645af, - 0x000649af, 0x00064daf, 0x000651af, 0x000655af, - 0x000659af, 0x00065daf, 0x000661af, 0x000665af, - 0x000669af, 0x00066daf, 0x000671af, 0x000675af, - 0x000679af, 0x00067daf, 0x000681af, 0x000685af, - 0x000689af, 0x00068daf, 0x000691af, 0x000695af, - 0x000699af, 0x00069daf, 0x0006a1af, 0x0006a5af, - 0x0006a9af, 0x0006adaf, 0x0006b1af, 0x0006b5af, - 0x0006b9af, 0x0006bdaf, 0x0006c1af, 0x0006c5af, - 0x0006c9af, 0x0006cdaf, 0x0006d1af, 0x0006d5af, - 0x0006d9af, 0x0006ddaf, 0x0006e1af, 0x0006e5af, - 0x0006e9af, 0x0006edaf, 0x0006f1af, 0x0006f5af, - 0x0006f9af, 0x0006fdaf, 0x000701af, 0x000705af, - 0x000709af, 0x00070daf, 0x000711af, 0x000715af, - 0x000719af, 0x00071daf, 0x000721af, 0x000725af, - 0x000729af, 0x00072daf, 0x000731af, 0x000735af, - 0x000739af, 0x00073daf, 0x000741af, 0x000745af, - 0x000749af, 0x00074daf, 0x000751af, 0x000755af, - 0x000759af, 0x00075daf, 0x000761af, 0x000765af, - 0x000769af, 0x00076daf, 0x000771af, 0x000775af, - 0x000779af, 0x00077daf, 0x000781af, 0x000785af, - 0x000789af, 0x00078daf, 0x000791af, 0x000795af, - 0x000799af, 0x00079daf, 0x0007a1af, 0x0007a5af, - 0x0007a9af, 0x0007adaf, 0x0007b1af, 0x0007b5af, - 0x0007b9af, 0x0007bdaf, 0x0007c1af, 0x0007c5af, - 0x0007c9af, 0x0007cdaf, 0x0007d1af, 0x0007d5af, - 0x0007d9af, 0x0007ddaf, 0x0007e1af, 0x0007e5af, - 0x0007e9af, 0x0007edaf, 0x0007f1af, 0x0007f5af, - 0x0007f9af, 0x0007fdaf, 0x000801af, 0x000805af, - 0x000809af, 0x00080daf, 0x000811af, 0x000815af, - 0x000819af, 0x00081daf, 0x000821af, 0x000825af, - 0x000829af, 0x00082daf, 0x000831af, 0x000835af, - 0x000839af, 0x00083daf, 0x000841af, 0x000845af, - 0x000849af, 0x00084daf, 0x000851af, 0x000855af, - 0x000859af, 0x00085daf, 0x000861af, 0x000865af, - 0x000869af, 0x00086daf, 0x000871af, 0x000875af, - 0x000879af, 0x00087daf, 0x000881af, 0x000885af, - 0x000889af, 0x00088daf, 0x000891af, 0x000895af, - 0x000899af, 0x00089daf, 0x0008a1af, 0x0008a5af, - 0x0008a9af, 0x0008adaf, 0x0008b1af, 0x0008b5af, - 0x0008b9af, 0x0008bdaf, 0x0008c1af, 0x0008c5af, - 0x0008c9af, 0x0008cdaf, 0x0008d1af, 0x0008d5af, - 0x0008d9af, 0x0008ddaf, 0x0008e1af, 0x0008e5af, - 0x0008e9af, 0x0008edaf, 0x0008f1af, 0x0008f5af, - 0x0008f9af, 0x0008fdaf, 0x000901af, 0x000905af, - 0x000909af, 0x00090daf, 0x000911af, 0x000915af, - 0x000919af, 0x00091daf, 0x000921af, 0x000925af, - 0x000929af, 0x00092daf, 0x000931af, 0x000935af, - 0x000939af, 0x00093daf, 0x000941af, 0x000945af, - 0x000949af, 0x00094daf, 0x000951af, 0x000955af, - 0x000959af, 0x00095daf, 0x000961af, 0x000965af, - 0x000969af, 0x00096daf, 0x000971af, 0x000975af, - 0x000979af, 0x00097daf, 0x000981af, 0x000985af, - 0x000989af, 0x00098daf, 0x000991af, 0x000995af, - 0x000999af, 0x00099daf, 0x0009a1af, 0x0009a5af, - 0x0009a9af, 0x0009adaf, 0x0009b1af, 0x0009b5af, - 0x0009b9af, 0x0009bdaf, 0x0009c1af, 0x0009c5af, - 0x0009c9af, 0x0009cdaf, 0x0009d1af, 0x0009d5af, - 0x0009d9af, 0x0009ddaf, 0x0009e1af, 0x0009e5af, - 0x0009e9af, 0x0009edaf, 0x0009f1af, 0x0009f5af, - 0x0009f9af, 0x0009fdaf, 0x000a01af, 0x000a05af, - 0x000a09af, 0x000a0daf, 0x000a11af, 0x000a15af, - 0x000a19af, 0x000a1daf, 0x000a21af, 0x000a25af, - 0x000a29af, 0x000a2daf, 0x000a31af, 0x000a35af, - 0x000a39af, 0x000a3daf, 0x000a41af, 0x000a45af, - 0x000a49af, 0x000a4daf, 0x000a51af, 0x000a55af, - 0x000a59af, 0x000a5daf, 0x000a61af, 0x000a65af, - 0x000a69af, 0x000a6daf, 0x000a71af, 0x000a75af, - 0x000a79af, 0x000a7daf, 0x000a81af, 0x000a85af, - 0x000a89af, 0x000a8daf, 0x000a91af, 0x000a95af, - 0x000a99af, 0x000a9daf, 0x000aa1af, 0x000aa5af, - 0x000aa9af, 0x000aadaf, 0x000ab1af, 0x000ab5af, - 0x000ab9af, 0x000abdaf, 0x000ac1af, 0x000ac5af, - 0x000ac9af, 0x000acdaf, 0x000ad1af, 0x000ad5af, - 0x000ad9af, 0x000addaf, 0x000ae1af, 0x000ae5af, - 0x000ae9af, 0x000aedaf, 0x000af1af, 0x000af5af, - 0x000af9af, 0x000afdaf, 0x000b01af, 0x000b05af, - 0x000b09af, 0x000b0daf, 0x000b11af, 0x000b15af, - 0x000b19af, 0x000b1daf, 0x000b21af, 0x000b25af, - 0x000b29af, 0x000b2daf, 0x000b31af, 0x000b35af, - 0x000b39af, 0x000b3daf, 0x000b41af, 0x000b45af, - 0x000b49af, 0x000b4daf, 0x000b51af, 0x000b55af, - 0x000b59af, 0x000b5daf, 0x000b61af, 0x000b65af, - 0x000b69af, 0x000b6daf, 0x000b71af, 0x000b75af, - 0x000b79af, 0x000b7daf, 0x000b81af, 0x000b85af, - 0x000b89af, 0x000b8daf, 0x000b91af, 0x000b95af, - 0x000b99af, 0x000b9daf, 0x000ba1af, 0x000ba5af, - 0x000ba9af, 0x000badaf, 0x000bb1af, 0x000bb5af, - 0x000bb9af, 0x000bbdaf, 0x000bc1af, 0x000bc5af, - 0x000bc9af, 0x000bcdaf, 0x000bd1af, 0x000bd5af, - 0x000bd9af, 0x000bddaf, 0x000be1af, 0x000be5af, - 0x000be9af, 0x000bedaf, 0x000bf1af, 0x000bf5af, - 0x000bf9af, 0x000bfdaf, 0x000c01af, 0x000c05af, - 0x000c09af, 0x000c0daf, 0x000c11af, 0x000c15af, - 0x000c19af, 0x000c1daf, 0x000c21af, 0x000c25af, - 0x000c29af, 0x000c2daf, 0x000c31af, 0x000c35af, - 0x000c39af, 0x000c3daf, 0x000c41af, 0x000c45af, - 0x000c49af, 0x000c4daf, 0x000c51af, 0x000c55af, - 0x000c59af, 0x000c5daf, 0x000c61af, 0x000c65af, - 0x000c69af, 0x000c6daf, 0x000c71af, 0x000c75af, - 0x000c79af, 0x000c7daf, 0x000c81af, 0x000c85af, - 0x000c89af, 0x000c8daf, 0x000c91af, 0x000c95af, - 0x000c99af, 0x000c9daf, 0x000ca1af, 0x000ca5af, - 0x000ca9af, 0x000cadaf, 0x000cb1af, 0x000cb5af, - 0x000cb9af, 0x000cbdaf, 0x000cc1af, 0x000cc5af, - 0x000cc9af, 0x000ccdaf, 0x000cd1af, 0x000cd5af, - 0x000cd9af, 0x000cddaf, 0x000ce1af, 0x000ce5af, - 0x000ce9af, 0x000cedaf, 0x000cf1af, 0x000cf5af, - 0x000cf9af, 0x000cfdaf, 0x000d01af, 0x000d05af, - 0x000d09af, 0x000d0daf, 0x000d11af, 0x000d15af, - 0x000d19af, 0x000d1daf, 0x000d21af, 0x000d25af, - 0x000d29af, 0x000d2daf, 0x000d31af, 0x000d35af, - 0x000d39af, 0x000d3daf, 0x000d41af, 0x000d45af, - 0x000d49af, 0x000d4daf, 0x000d51af, 0x000d55af, - 0x000d59af, 0x000d5daf, 0x000d61af, 0x000d65af, - 0x000d69af, 0x000d6daf, 0x000d71af, 0x000d75af, - 0x000d79af, 0x000d7daf, 0x000d81af, 0x000d85af, - 0x000d89af, 0x000d8daf, 0x000d91af, 0x000d95af, - 0x000d99af, 0x000d9daf, 0x000da1af, 0x000da5af, - 0x000da9af, 0x000dadaf, 0x000db1af, 0x000db5af, - 0x000db9af, 0x000dbdaf, 0x000dc1af, 0x000dc5af, - 0x000dc9af, 0x000dcdaf, 0x000dd1af, 0x000dd5af, - 0x000dd9af, 0x000dddaf, 0x000de1af, 0x000de5af, - 0x000de9af, 0x000dedaf, 0x000df1af, 0x000df5af, - 0x000df9af, 0x000dfdaf, 0x000e01af, 0x000e05af, - 0x000e09af, 0x000e0daf, 0x000e11af, 0x000e15af, - 0x000e19af, 0x000e1daf, 0x000e21af, 0x000e25af, - 0x000e29af, 0x000e2daf, 0x000e31af, 0x000e35af, - 0x000e39af, 0x000e3daf, 0x000e41af, 0x000e45af, - 0x000e49af, 0x000e4daf, 0x000e51af, 0x000e55af, - 0x000e59af, 0x000e5daf, 0x000e61af, 0x000e65af, - 0x000e69af, 0x000e6daf, 0x000e71af, 0x000e75af, - 0x000e79af, 0x000e7daf, 0x000e81af, 0x000e85af, - 0x000e89af, 0x000e8daf, 0x000e91af, 0x000e95af, - 0x000e99af, 0x000e9daf, 0x000ea1af, 0x000ea5af, - 0x000ea9af, 0x000eadaf, 0x000eb1af, 0x000eb5af, - 0x000eb9af, 0x000ebdaf, 0x000ec1af, 0x000ec5af, - 0x000ec9af, 0x000ecdaf, 0x000ed1af, 0x000ed5af, - 0x000ed9af, 0x000eddaf, 0x000ee1af, 0x000ee5af, - 0x000ee9af, 0x000eedaf, 0x000ef1af, 0x000ef5af, - 0x000ef9af, 0x000efdaf, 0x000f01af, 0x000f05af, - 0x000f09af, 0x000f0daf, 0x000f11af, 0x000f15af, - 0x000f19af, 0x000f1daf, 0x000f21af, 0x000f25af, - 0x000f29af, 0x000f2daf, 0x000f31af, 0x000f35af, - 0x000f39af, 0x000f3daf, 0x000f41af, 0x000f45af, - 0x000f49af, 0x000f4daf, 0x000f51af, 0x000f55af, - 0x000f59af, 0x000f5daf, 0x000f61af, 0x000f65af, - 0x000f69af, 0x000f6daf, 0x000f71af, 0x000f75af, - 0x000f79af, 0x000f7daf, 0x000f81af, 0x000f85af, - 0x000f89af, 0x000f8daf, 0x000f91af, 0x000f95af, - 0x000f99af, 0x000f9daf, 0x000fa1af, 0x000fa5af, - 0x000fa9af, 0x000fadaf, 0x000fb1af, 0x000fb5af, - 0x000fb9af, 0x000fbdaf, 0x000fc1af, 0x000fc5af, - 0x000fc9af, 0x000fcdaf, 0x000fd1af, 0x000fd5af, - 0x000fd9af, 0x000fddaf, 0x000fe1af, 0x000fe5af, - 0x000fe9af, 0x000fedaf, 0x000ff1af, 0x000ff5af, - 0x000ff9af, 0x000ffdaf, 0x000003af, 0x000007af, - 0x00000baf, 0x00000faf, 0x000013af, 0x000017af, - 0x00001baf, 0x00001faf, 0x000023af, 0x000027af, - 0x00002baf, 0x00002faf, 0x000033af, 0x000037af, - 0x00003baf, 0x00003faf, 0x000043af, 0x000047af, - 0x00004baf, 0x00004faf, 0x000053af, 0x000057af, - 0x00005baf, 0x00005faf, 0x000063af, 0x000067af, - 0x00006baf, 0x00006faf, 0x000073af, 0x000077af, - 0x00007baf, 0x00007faf, 0x000083af, 0x000087af, - 0x00008baf, 0x00008faf, 0x000093af, 0x000097af, - 0x00009baf, 0x00009faf, 0x0000a3af, 0x0000a7af, - 0x0000abaf, 0x0000afaf, 0x0000b3af, 0x0000b7af, - 0x0000bbaf, 0x0000bfaf, 0x0000c3af, 0x0000c7af, - 0x0000cbaf, 0x0000cfaf, 0x0000d3af, 0x0000d7af, - 0x0000dbaf, 0x0000dfaf, 0x0000e3af, 0x0000e7af, - 0x0000ebaf, 0x0000efaf, 0x0000f3af, 0x0000f7af, - 0x0000fbaf, 0x0000ffaf, 0x000103af, 0x000107af, - 0x00010baf, 0x00010faf, 0x000113af, 0x000117af, - 0x00011baf, 0x00011faf, 0x000123af, 0x000127af, - 0x00012baf, 0x00012faf, 0x000133af, 0x000137af, - 0x00013baf, 0x00013faf, 0x000143af, 0x000147af, - 0x00014baf, 0x00014faf, 0x000153af, 0x000157af, - 0x00015baf, 0x00015faf, 0x000163af, 0x000167af, - 0x00016baf, 0x00016faf, 0x000173af, 0x000177af, - 0x00017baf, 0x00017faf, 0x000183af, 0x000187af, - 0x00018baf, 0x00018faf, 0x000193af, 0x000197af, - 0x00019baf, 0x00019faf, 0x0001a3af, 0x0001a7af, - 0x0001abaf, 0x0001afaf, 0x0001b3af, 0x0001b7af, - 0x0001bbaf, 0x0001bfaf, 0x0001c3af, 0x0001c7af, - 0x0001cbaf, 0x0001cfaf, 0x0001d3af, 0x0001d7af, - 0x0001dbaf, 0x0001dfaf, 0x0001e3af, 0x0001e7af, - 0x0001ebaf, 0x0001efaf, 0x0001f3af, 0x0001f7af, - 0x0001fbaf, 0x0001ffaf, 0x000203af, 0x000207af, - 0x00020baf, 0x00020faf, 0x000213af, 0x000217af, - 0x00021baf, 0x00021faf, 0x000223af, 0x000227af, - 0x00022baf, 0x00022faf, 0x000233af, 0x000237af, - 0x00023baf, 0x00023faf, 0x000243af, 0x000247af, - 0x00024baf, 0x00024faf, 0x000253af, 0x000257af, - 0x00025baf, 0x00025faf, 0x000263af, 0x000267af, - 0x00026baf, 0x00026faf, 0x000273af, 0x000277af, - 0x00027baf, 0x00027faf, 0x000283af, 0x000287af, - 0x00028baf, 0x00028faf, 0x000293af, 0x000297af, - 0x00029baf, 0x00029faf, 0x0002a3af, 0x0002a7af, - 0x0002abaf, 0x0002afaf, 0x0002b3af, 0x0002b7af, - 0x0002bbaf, 0x0002bfaf, 0x0002c3af, 0x0002c7af, - 0x0002cbaf, 0x0002cfaf, 0x0002d3af, 0x0002d7af, - 0x0002dbaf, 0x0002dfaf, 0x0002e3af, 0x0002e7af, - 0x0002ebaf, 0x0002efaf, 0x0002f3af, 0x0002f7af, - 0x0002fbaf, 0x0002ffaf, 0x000303af, 0x000307af, - 0x00030baf, 0x00030faf, 0x000313af, 0x000317af, - 0x00031baf, 0x00031faf, 0x000323af, 0x000327af, - 0x00032baf, 0x00032faf, 0x000333af, 0x000337af, - 0x00033baf, 0x00033faf, 0x000343af, 0x000347af, - 0x00034baf, 0x00034faf, 0x000353af, 0x000357af, - 0x00035baf, 0x00035faf, 0x000363af, 0x000367af, - 0x00036baf, 0x00036faf, 0x000373af, 0x000377af, - 0x00037baf, 0x00037faf, 0x000383af, 0x000387af, - 0x00038baf, 0x00038faf, 0x000393af, 0x000397af, - 0x00039baf, 0x00039faf, 0x0003a3af, 0x0003a7af, - 0x0003abaf, 0x0003afaf, 0x0003b3af, 0x0003b7af, - 0x0003bbaf, 0x0003bfaf, 0x0003c3af, 0x0003c7af, - 0x0003cbaf, 0x0003cfaf, 0x0003d3af, 0x0003d7af, - 0x0003dbaf, 0x0003dfaf, 0x0003e3af, 0x0003e7af, - 0x0003ebaf, 0x0003efaf, 0x0003f3af, 0x0003f7af, - 0x0003fbaf, 0x0003ffaf, 0x000403af, 0x000407af, - 0x00040baf, 0x00040faf, 0x000413af, 0x000417af, - 0x00041baf, 0x00041faf, 0x000423af, 0x000427af, - 0x00042baf, 0x00042faf, 0x000433af, 0x000437af, - 0x00043baf, 0x00043faf, 0x000443af, 0x000447af, - 0x00044baf, 0x00044faf, 0x000453af, 0x000457af, - 0x00045baf, 0x00045faf, 0x000463af, 0x000467af, - 0x00046baf, 0x00046faf, 0x000473af, 0x000477af, - 0x00047baf, 0x00047faf, 0x000483af, 0x000487af, - 0x00048baf, 0x00048faf, 0x000493af, 0x000497af, - 0x00049baf, 0x00049faf, 0x0004a3af, 0x0004a7af, - 0x0004abaf, 0x0004afaf, 0x0004b3af, 0x0004b7af, - 0x0004bbaf, 0x0004bfaf, 0x0004c3af, 0x0004c7af, - 0x0004cbaf, 0x0004cfaf, 0x0004d3af, 0x0004d7af, - 0x0004dbaf, 0x0004dfaf, 0x0004e3af, 0x0004e7af, - 0x0004ebaf, 0x0004efaf, 0x0004f3af, 0x0004f7af, - 0x0004fbaf, 0x0004ffaf, 0x000503af, 0x000507af, - 0x00050baf, 0x00050faf, 0x000513af, 0x000517af, - 0x00051baf, 0x00051faf, 0x000523af, 0x000527af, - 0x00052baf, 0x00052faf, 0x000533af, 0x000537af, - 0x00053baf, 0x00053faf, 0x000543af, 0x000547af, - 0x00054baf, 0x00054faf, 0x000553af, 0x000557af, - 0x00055baf, 0x00055faf, 0x000563af, 0x000567af, - 0x00056baf, 0x00056faf, 0x000573af, 0x000577af, - 0x00057baf, 0x00057faf, 0x000583af, 0x000587af, - 0x00058baf, 0x00058faf, 0x000593af, 0x000597af, - 0x00059baf, 0x00059faf, 0x0005a3af, 0x0005a7af, - 0x0005abaf, 0x0005afaf, 0x0005b3af, 0x0005b7af, - 0x0005bbaf, 0x0005bfaf, 0x0005c3af, 0x0005c7af, - 0x0005cbaf, 0x0005cfaf, 0x0005d3af, 0x0005d7af, - 0x0005dbaf, 0x0005dfaf, 0x0005e3af, 0x0005e7af, - 0x0005ebaf, 0x0005efaf, 0x0005f3af, 0x0005f7af, - 0x0005fbaf, 0x0005ffaf, 0x000603af, 0x000607af, - 0x00060baf, 0x00060faf, 0x000613af, 0x000617af, - 0x00061baf, 0x00061faf, 0x000623af, 0x000627af, - 0x00062baf, 0x00062faf, 0x000633af, 0x000637af, - 0x00063baf, 0x00063faf, 0x000643af, 0x000647af, - 0x00064baf, 0x00064faf, 0x000653af, 0x000657af, - 0x00065baf, 0x00065faf, 0x000663af, 0x000667af, - 0x00066baf, 0x00066faf, 0x000673af, 0x000677af, - 0x00067baf, 0x00067faf, 0x000683af, 0x000687af, - 0x00068baf, 0x00068faf, 0x000693af, 0x000697af, - 0x00069baf, 0x00069faf, 0x0006a3af, 0x0006a7af, - 0x0006abaf, 0x0006afaf, 0x0006b3af, 0x0006b7af, - 0x0006bbaf, 0x0006bfaf, 0x0006c3af, 0x0006c7af, - 0x0006cbaf, 0x0006cfaf, 0x0006d3af, 0x0006d7af, - 0x0006dbaf, 0x0006dfaf, 0x0006e3af, 0x0006e7af, - 0x0006ebaf, 0x0006efaf, 0x0006f3af, 0x0006f7af, - 0x0006fbaf, 0x0006ffaf, 0x000703af, 0x000707af, - 0x00070baf, 0x00070faf, 0x000713af, 0x000717af, - 0x00071baf, 0x00071faf, 0x000723af, 0x000727af, - 0x00072baf, 0x00072faf, 0x000733af, 0x000737af, - 0x00073baf, 0x00073faf, 0x000743af, 0x000747af, - 0x00074baf, 0x00074faf, 0x000753af, 0x000757af, - 0x00075baf, 0x00075faf, 0x000763af, 0x000767af, - 0x00076baf, 0x00076faf, 0x000773af, 0x000777af, - 0x00077baf, 0x00077faf, 0x000783af, 0x000787af, - 0x00078baf, 0x00078faf, 0x000793af, 0x000797af, - 0x00079baf, 0x00079faf, 0x0007a3af, 0x0007a7af, - 0x0007abaf, 0x0007afaf, 0x0007b3af, 0x0007b7af, - 0x0007bbaf, 0x0007bfaf, 0x0007c3af, 0x0007c7af, - 0x0007cbaf, 0x0007cfaf, 0x0007d3af, 0x0007d7af, - 0x0007dbaf, 0x0007dfaf, 0x0007e3af, 0x0007e7af, - 0x0007ebaf, 0x0007efaf, 0x0007f3af, 0x0007f7af, - 0x0007fbaf, 0x0007ffaf, 0x000803af, 0x000807af, - 0x00080baf, 0x00080faf, 0x000813af, 0x000817af, - 0x00081baf, 0x00081faf, 0x000823af, 0x000827af, - 0x00082baf, 0x00082faf, 0x000833af, 0x000837af, - 0x00083baf, 0x00083faf, 0x000843af, 0x000847af, - 0x00084baf, 0x00084faf, 0x000853af, 0x000857af, - 0x00085baf, 0x00085faf, 0x000863af, 0x000867af, - 0x00086baf, 0x00086faf, 0x000873af, 0x000877af, - 0x00087baf, 0x00087faf, 0x000883af, 0x000887af, - 0x00088baf, 0x00088faf, 0x000893af, 0x000897af, - 0x00089baf, 0x00089faf, 0x0008a3af, 0x0008a7af, - 0x0008abaf, 0x0008afaf, 0x0008b3af, 0x0008b7af, - 0x0008bbaf, 0x0008bfaf, 0x0008c3af, 0x0008c7af, - 0x0008cbaf, 0x0008cfaf, 0x0008d3af, 0x0008d7af, - 0x0008dbaf, 0x0008dfaf, 0x0008e3af, 0x0008e7af, - 0x0008ebaf, 0x0008efaf, 0x0008f3af, 0x0008f7af, - 0x0008fbaf, 0x0008ffaf, 0x000903af, 0x000907af, - 0x00090baf, 0x00090faf, 0x000913af, 0x000917af, - 0x00091baf, 0x00091faf, 0x000923af, 0x000927af, - 0x00092baf, 0x00092faf, 0x000933af, 0x000937af, - 0x00093baf, 0x00093faf, 0x000943af, 0x000947af, - 0x00094baf, 0x00094faf, 0x000953af, 0x000957af, - 0x00095baf, 0x00095faf, 0x000963af, 0x000967af, - 0x00096baf, 0x00096faf, 0x000973af, 0x000977af, - 0x00097baf, 0x00097faf, 0x000983af, 0x000987af, - 0x00098baf, 0x00098faf, 0x000993af, 0x000997af, - 0x00099baf, 0x00099faf, 0x0009a3af, 0x0009a7af, - 0x0009abaf, 0x0009afaf, 0x0009b3af, 0x0009b7af, - 0x0009bbaf, 0x0009bfaf, 0x0009c3af, 0x0009c7af, - 0x0009cbaf, 0x0009cfaf, 0x0009d3af, 0x0009d7af, - 0x0009dbaf, 0x0009dfaf, 0x0009e3af, 0x0009e7af, - 0x0009ebaf, 0x0009efaf, 0x0009f3af, 0x0009f7af, - 0x0009fbaf, 0x0009ffaf, 0x000a03af, 0x000a07af, - 0x000a0baf, 0x000a0faf, 0x000a13af, 0x000a17af, - 0x000a1baf, 0x000a1faf, 0x000a23af, 0x000a27af, - 0x000a2baf, 0x000a2faf, 0x000a33af, 0x000a37af, - 0x000a3baf, 0x000a3faf, 0x000a43af, 0x000a47af, - 0x000a4baf, 0x000a4faf, 0x000a53af, 0x000a57af, - 0x000a5baf, 0x000a5faf, 0x000a63af, 0x000a67af, - 0x000a6baf, 0x000a6faf, 0x000a73af, 0x000a77af, - 0x000a7baf, 0x000a7faf, 0x000a83af, 0x000a87af, - 0x000a8baf, 0x000a8faf, 0x000a93af, 0x000a97af, - 0x000a9baf, 0x000a9faf, 0x000aa3af, 0x000aa7af, - 0x000aabaf, 0x000aafaf, 0x000ab3af, 0x000ab7af, - 0x000abbaf, 0x000abfaf, 0x000ac3af, 0x000ac7af, - 0x000acbaf, 0x000acfaf, 0x000ad3af, 0x000ad7af, - 0x000adbaf, 0x000adfaf, 0x000ae3af, 0x000ae7af, - 0x000aebaf, 0x000aefaf, 0x000af3af, 0x000af7af, - 0x000afbaf, 0x000affaf, 0x000b03af, 0x000b07af, - 0x000b0baf, 0x000b0faf, 0x000b13af, 0x000b17af, - 0x000b1baf, 0x000b1faf, 0x000b23af, 0x000b27af, - 0x000b2baf, 0x000b2faf, 0x000b33af, 0x000b37af, - 0x000b3baf, 0x000b3faf, 0x000b43af, 0x000b47af, - 0x000b4baf, 0x000b4faf, 0x000b53af, 0x000b57af, - 0x000b5baf, 0x000b5faf, 0x000b63af, 0x000b67af, - 0x000b6baf, 0x000b6faf, 0x000b73af, 0x000b77af, - 0x000b7baf, 0x000b7faf, 0x000b83af, 0x000b87af, - 0x000b8baf, 0x000b8faf, 0x000b93af, 0x000b97af, - 0x000b9baf, 0x000b9faf, 0x000ba3af, 0x000ba7af, - 0x000babaf, 0x000bafaf, 0x000bb3af, 0x000bb7af, - 0x000bbbaf, 0x000bbfaf, 0x000bc3af, 0x000bc7af, - 0x000bcbaf, 0x000bcfaf, 0x000bd3af, 0x000bd7af, - 0x000bdbaf, 0x000bdfaf, 0x000be3af, 0x000be7af, - 0x000bebaf, 0x000befaf, 0x000bf3af, 0x000bf7af, - 0x000bfbaf, 0x000bffaf, 0x000c03af, 0x000c07af, - 0x000c0baf, 0x000c0faf, 0x000c13af, 0x000c17af, - 0x000c1baf, 0x000c1faf, 0x000c23af, 0x000c27af, - 0x000c2baf, 0x000c2faf, 0x000c33af, 0x000c37af, - 0x000c3baf, 0x000c3faf, 0x000c43af, 0x000c47af, - 0x000c4baf, 0x000c4faf, 0x000c53af, 0x000c57af, - 0x000c5baf, 0x000c5faf, 0x000c63af, 0x000c67af, - 0x000c6baf, 0x000c6faf, 0x000c73af, 0x000c77af, - 0x000c7baf, 0x000c7faf, 0x000c83af, 0x000c87af, - 0x000c8baf, 0x000c8faf, 0x000c93af, 0x000c97af, - 0x000c9baf, 0x000c9faf, 0x000ca3af, 0x000ca7af, - 0x000cabaf, 0x000cafaf, 0x000cb3af, 0x000cb7af, - 0x000cbbaf, 0x000cbfaf, 0x000cc3af, 0x000cc7af, - 0x000ccbaf, 0x000ccfaf, 0x000cd3af, 0x000cd7af, - 0x000cdbaf, 0x000cdfaf, 0x000ce3af, 0x000ce7af, - 0x000cebaf, 0x000cefaf, 0x000cf3af, 0x000cf7af, - 0x000cfbaf, 0x000cffaf, 0x000d03af, 0x000d07af, - 0x000d0baf, 0x000d0faf, 0x000d13af, 0x000d17af, - 0x000d1baf, 0x000d1faf, 0x000d23af, 0x000d27af, - 0x000d2baf, 0x000d2faf, 0x000d33af, 0x000d37af, - 0x000d3baf, 0x000d3faf, 0x000d43af, 0x000d47af, - 0x000d4baf, 0x000d4faf, 0x000d53af, 0x000d57af, - 0x000d5baf, 0x000d5faf, 0x000d63af, 0x000d67af, - 0x000d6baf, 0x000d6faf, 0x000d73af, 0x000d77af, - 0x000d7baf, 0x000d7faf, 0x000d83af, 0x000d87af, - 0x000d8baf, 0x000d8faf, 0x000d93af, 0x000d97af, - 0x000d9baf, 0x000d9faf, 0x000da3af, 0x000da7af, - 0x000dabaf, 0x000dafaf, 0x000db3af, 0x000db7af, - 0x000dbbaf, 0x000dbfaf, 0x000dc3af, 0x000dc7af, - 0x000dcbaf, 0x000dcfaf, 0x000dd3af, 0x000dd7af, - 0x000ddbaf, 0x000ddfaf, 0x000de3af, 0x000de7af, - 0x000debaf, 0x000defaf, 0x000df3af, 0x000df7af, - 0x000dfbaf, 0x000dffaf, 0x000e03af, 0x000e07af, - 0x000e0baf, 0x000e0faf, 0x000e13af, 0x000e17af, - 0x000e1baf, 0x000e1faf, 0x000e23af, 0x000e27af, - 0x000e2baf, 0x000e2faf, 0x000e33af, 0x000e37af, - 0x000e3baf, 0x000e3faf, 0x000e43af, 0x000e47af, - 0x000e4baf, 0x000e4faf, 0x000e53af, 0x000e57af, - 0x000e5baf, 0x000e5faf, 0x000e63af, 0x000e67af, - 0x000e6baf, 0x000e6faf, 0x000e73af, 0x000e77af, - 0x000e7baf, 0x000e7faf, 0x000e83af, 0x000e87af, - 0x000e8baf, 0x000e8faf, 0x000e93af, 0x000e97af, - 0x000e9baf, 0x000e9faf, 0x000ea3af, 0x000ea7af, - 0x000eabaf, 0x000eafaf, 0x000eb3af, 0x000eb7af, - 0x000ebbaf, 0x000ebfaf, 0x000ec3af, 0x000ec7af, - 0x000ecbaf, 0x000ecfaf, 0x000ed3af, 0x000ed7af, - 0x000edbaf, 0x000edfaf, 0x000ee3af, 0x000ee7af, - 0x000eebaf, 0x000eefaf, 0x000ef3af, 0x000ef7af, - 0x000efbaf, 0x000effaf, 0x000f03af, 0x000f07af, - 0x000f0baf, 0x000f0faf, 0x000f13af, 0x000f17af, - 0x000f1baf, 0x000f1faf, 0x000f23af, 0x000f27af, - 0x000f2baf, 0x000f2faf, 0x000f33af, 0x000f37af, - 0x000f3baf, 0x000f3faf, 0x000f43af, 0x000f47af, - 0x000f4baf, 0x000f4faf, 0x000f53af, 0x000f57af, - 0x000f5baf, 0x000f5faf, 0x000f63af, 0x000f67af, - 0x000f6baf, 0x000f6faf, 0x000f73af, 0x000f77af, - 0x000f7baf, 0x000f7faf, 0x000f83af, 0x000f87af, - 0x000f8baf, 0x000f8faf, 0x000f93af, 0x000f97af, - 0x000f9baf, 0x000f9faf, 0x000fa3af, 0x000fa7af, - 0x000fabaf, 0x000fafaf, 0x000fb3af, 0x000fb7af, - 0x000fbbaf, 0x000fbfaf, 0x000fc3af, 0x000fc7af, - 0x000fcbaf, 0x000fcfaf, 0x000fd3af, 0x000fd7af, - 0x000fdbaf, 0x000fdfaf, 0x000fe3af, 0x000fe7af, - 0x000febaf, 0x000fefaf, 0x000ff3af, 0x000ff7af, - 0x000ffbaf, 0x000fffaf, 0x00000070, 0x00000470, - 0x00000870, 0x00000c70, 0x00001070, 0x00001470, - 0x00001870, 0x00001c70, 0x00002070, 0x00002470, - 0x00002870, 0x00002c70, 0x00003070, 0x00003470, - 0x00003870, 0x00003c70, 0x00004070, 0x00004470, - 0x00004870, 0x00004c70, 0x00005070, 0x00005470, - 0x00005870, 0x00005c70, 0x00006070, 0x00006470, - 0x00006870, 0x00006c70, 0x00007070, 0x00007470, - 0x00007870, 0x00007c70, 0x00008070, 0x00008470, - 0x00008870, 0x00008c70, 0x00009070, 0x00009470, - 0x00009870, 0x00009c70, 0x0000a070, 0x0000a470, - 0x0000a870, 0x0000ac70, 0x0000b070, 0x0000b470, - 0x0000b870, 0x0000bc70, 0x0000c070, 0x0000c470, - 0x0000c870, 0x0000cc70, 0x0000d070, 0x0000d470, - 0x0000d870, 0x0000dc70, 0x0000e070, 0x0000e470, - 0x0000e870, 0x0000ec70, 0x0000f070, 0x0000f470, - 0x0000f870, 0x0000fc70, 0x00010070, 0x00010470, - 0x00010870, 0x00010c70, 0x00011070, 0x00011470, - 0x00011870, 0x00011c70, 0x00012070, 0x00012470, - 0x00012870, 0x00012c70, 0x00013070, 0x00013470, - 0x00013870, 0x00013c70, 0x00014070, 0x00014470, - 0x00014870, 0x00014c70, 0x00015070, 0x00015470, - 0x00015870, 0x00015c70, 0x00016070, 0x00016470, - 0x00016870, 0x00016c70, 0x00017070, 0x00017470, - 0x00017870, 0x00017c70, 0x00018070, 0x00018470, - 0x00018870, 0x00018c70, 0x00019070, 0x00019470, - 0x00019870, 0x00019c70, 0x0001a070, 0x0001a470, - 0x0001a870, 0x0001ac70, 0x0001b070, 0x0001b470, - 0x0001b870, 0x0001bc70, 0x0001c070, 0x0001c470, - 0x0001c870, 0x0001cc70, 0x0001d070, 0x0001d470, - 0x0001d870, 0x0001dc70, 0x0001e070, 0x0001e470, - 0x0001e870, 0x0001ec70, 0x0001f070, 0x0001f470, - 0x0001f870, 0x0001fc70, 0x00020070, 0x00020470, - 0x00020870, 0x00020c70, 0x00021070, 0x00021470, - 0x00021870, 0x00021c70, 0x00022070, 0x00022470, - 0x00022870, 0x00022c70, 0x00023070, 0x00023470, - 0x00023870, 0x00023c70, 0x00024070, 0x00024470, - 0x00024870, 0x00024c70, 0x00025070, 0x00025470, - 0x00025870, 0x00025c70, 0x00026070, 0x00026470, - 0x00026870, 0x00026c70, 0x00027070, 0x00027470, - 0x00027870, 0x00027c70, 0x00028070, 0x00028470, - 0x00028870, 0x00028c70, 0x00029070, 0x00029470, - 0x00029870, 0x00029c70, 0x0002a070, 0x0002a470, - 0x0002a870, 0x0002ac70, 0x0002b070, 0x0002b470, - 0x0002b870, 0x0002bc70, 0x0002c070, 0x0002c470, - 0x0002c870, 0x0002cc70, 0x0002d070, 0x0002d470, - 0x0002d870, 0x0002dc70, 0x0002e070, 0x0002e470, - 0x0002e870, 0x0002ec70, 0x0002f070, 0x0002f470, - 0x0002f870, 0x0002fc70, 0x00030070, 0x00030470, - 0x00030870, 0x00030c70, 0x00031070, 0x00031470, - 0x00031870, 0x00031c70, 0x00032070, 0x00032470, - 0x00032870, 0x00032c70, 0x00033070, 0x00033470, - 0x00033870, 0x00033c70, 0x00034070, 0x00034470, - 0x00034870, 0x00034c70, 0x00035070, 0x00035470, - 0x00035870, 0x00035c70, 0x00036070, 0x00036470, - 0x00036870, 0x00036c70, 0x00037070, 0x00037470, - 0x00037870, 0x00037c70, 0x00038070, 0x00038470, - 0x00038870, 0x00038c70, 0x00039070, 0x00039470, - 0x00039870, 0x00039c70, 0x0003a070, 0x0003a470, - 0x0003a870, 0x0003ac70, 0x0003b070, 0x0003b470, - 0x0003b870, 0x0003bc70, 0x0003c070, 0x0003c470, - 0x0003c870, 0x0003cc70, 0x0003d070, 0x0003d470, - 0x0003d870, 0x0003dc70, 0x0003e070, 0x0003e470, - 0x0003e870, 0x0003ec70, 0x0003f070, 0x0003f470, - 0x0003f870, 0x0003fc70, 0x00040070, 0x00040470, - 0x00040870, 0x00040c70, 0x00041070, 0x00041470, - 0x00041870, 0x00041c70, 0x00042070, 0x00042470, - 0x00042870, 0x00042c70, 0x00043070, 0x00043470, - 0x00043870, 0x00043c70, 0x00044070, 0x00044470, - 0x00044870, 0x00044c70, 0x00045070, 0x00045470, - 0x00045870, 0x00045c70, 0x00046070, 0x00046470, - 0x00046870, 0x00046c70, 0x00047070, 0x00047470, - 0x00047870, 0x00047c70, 0x00048070, 0x00048470, - 0x00048870, 0x00048c70, 0x00049070, 0x00049470, - 0x00049870, 0x00049c70, 0x0004a070, 0x0004a470, - 0x0004a870, 0x0004ac70, 0x0004b070, 0x0004b470, - 0x0004b870, 0x0004bc70, 0x0004c070, 0x0004c470, - 0x0004c870, 0x0004cc70, 0x0004d070, 0x0004d470, - 0x0004d870, 0x0004dc70, 0x0004e070, 0x0004e470, - 0x0004e870, 0x0004ec70, 0x0004f070, 0x0004f470, - 0x0004f870, 0x0004fc70, 0x00050070, 0x00050470, - 0x00050870, 0x00050c70, 0x00051070, 0x00051470, - 0x00051870, 0x00051c70, 0x00052070, 0x00052470, - 0x00052870, 0x00052c70, 0x00053070, 0x00053470, - 0x00053870, 0x00053c70, 0x00054070, 0x00054470, - 0x00054870, 0x00054c70, 0x00055070, 0x00055470, - 0x00055870, 0x00055c70, 0x00056070, 0x00056470, - 0x00056870, 0x00056c70, 0x00057070, 0x00057470, - 0x00057870, 0x00057c70, 0x00058070, 0x00058470, - 0x00058870, 0x00058c70, 0x00059070, 0x00059470, - 0x00059870, 0x00059c70, 0x0005a070, 0x0005a470, - 0x0005a870, 0x0005ac70, 0x0005b070, 0x0005b470, - 0x0005b870, 0x0005bc70, 0x0005c070, 0x0005c470, - 0x0005c870, 0x0005cc70, 0x0005d070, 0x0005d470, - 0x0005d870, 0x0005dc70, 0x0005e070, 0x0005e470, - 0x0005e870, 0x0005ec70, 0x0005f070, 0x0005f470, - 0x0005f870, 0x0005fc70, 0x00060070, 0x00060470, - 0x00060870, 0x00060c70, 0x00061070, 0x00061470, - 0x00061870, 0x00061c70, 0x00062070, 0x00062470, - 0x00062870, 0x00062c70, 0x00063070, 0x00063470, - 0x00063870, 0x00063c70, 0x00064070, 0x00064470, - 0x00064870, 0x00064c70, 0x00065070, 0x00065470, - 0x00065870, 0x00065c70, 0x00066070, 0x00066470, - 0x00066870, 0x00066c70, 0x00067070, 0x00067470, - 0x00067870, 0x00067c70, 0x00068070, 0x00068470, - 0x00068870, 0x00068c70, 0x00069070, 0x00069470, - 0x00069870, 0x00069c70, 0x0006a070, 0x0006a470, - 0x0006a870, 0x0006ac70, 0x0006b070, 0x0006b470, - 0x0006b870, 0x0006bc70, 0x0006c070, 0x0006c470, - 0x0006c870, 0x0006cc70, 0x0006d070, 0x0006d470, - 0x0006d870, 0x0006dc70, 0x0006e070, 0x0006e470, - 0x0006e870, 0x0006ec70, 0x0006f070, 0x0006f470, - 0x0006f870, 0x0006fc70, 0x00070070, 0x00070470, - 0x00070870, 0x00070c70, 0x00071070, 0x00071470, - 0x00071870, 0x00071c70, 0x00072070, 0x00072470, - 0x00072870, 0x00072c70, 0x00073070, 0x00073470, - 0x00073870, 0x00073c70, 0x00074070, 0x00074470, - 0x00074870, 0x00074c70, 0x00075070, 0x00075470, - 0x00075870, 0x00075c70, 0x00076070, 0x00076470, - 0x00076870, 0x00076c70, 0x00077070, 0x00077470, - 0x00077870, 0x00077c70, 0x00078070, 0x00078470, - 0x00078870, 0x00078c70, 0x00079070, 0x00079470, - 0x00079870, 0x00079c70, 0x0007a070, 0x0007a470, - 0x0007a870, 0x0007ac70, 0x0007b070, 0x0007b470, - 0x0007b870, 0x0007bc70, 0x0007c070, 0x0007c470, - 0x0007c870, 0x0007cc70, 0x0007d070, 0x0007d470, - 0x0007d870, 0x0007dc70, 0x0007e070, 0x0007e470, - 0x0007e870, 0x0007ec70, 0x0007f070, 0x0007f470, - 0x0007f870, 0x0007fc70, 0x00080070, 0x00080470, - 0x00080870, 0x00080c70, 0x00081070, 0x00081470, - 0x00081870, 0x00081c70, 0x00082070, 0x00082470, - 0x00082870, 0x00082c70, 0x00083070, 0x00083470, - 0x00083870, 0x00083c70, 0x00084070, 0x00084470, - 0x00084870, 0x00084c70, 0x00085070, 0x00085470, - 0x00085870, 0x00085c70, 0x00086070, 0x00086470, - 0x00086870, 0x00086c70, 0x00087070, 0x00087470, - 0x00087870, 0x00087c70, 0x00088070, 0x00088470, - 0x00088870, 0x00088c70, 0x00089070, 0x00089470, - 0x00089870, 0x00089c70, 0x0008a070, 0x0008a470, - 0x0008a870, 0x0008ac70, 0x0008b070, 0x0008b470, - 0x0008b870, 0x0008bc70, 0x0008c070, 0x0008c470, - 0x0008c870, 0x0008cc70, 0x0008d070, 0x0008d470, - 0x0008d870, 0x0008dc70, 0x0008e070, 0x0008e470, - 0x0008e870, 0x0008ec70, 0x0008f070, 0x0008f470, - 0x0008f870, 0x0008fc70, 0x00090070, 0x00090470, - 0x00090870, 0x00090c70, 0x00091070, 0x00091470, - 0x00091870, 0x00091c70, 0x00092070, 0x00092470, - 0x00092870, 0x00092c70, 0x00093070, 0x00093470, - 0x00093870, 0x00093c70, 0x00094070, 0x00094470, - 0x00094870, 0x00094c70, 0x00095070, 0x00095470, - 0x00095870, 0x00095c70, 0x00096070, 0x00096470, - 0x00096870, 0x00096c70, 0x00097070, 0x00097470, - 0x00097870, 0x00097c70, 0x00098070, 0x00098470, - 0x00098870, 0x00098c70, 0x00099070, 0x00099470, - 0x00099870, 0x00099c70, 0x0009a070, 0x0009a470, - 0x0009a870, 0x0009ac70, 0x0009b070, 0x0009b470, - 0x0009b870, 0x0009bc70, 0x0009c070, 0x0009c470, - 0x0009c870, 0x0009cc70, 0x0009d070, 0x0009d470, - 0x0009d870, 0x0009dc70, 0x0009e070, 0x0009e470, - 0x0009e870, 0x0009ec70, 0x0009f070, 0x0009f470, - 0x0009f870, 0x0009fc70, 0x000a0070, 0x000a0470, - 0x000a0870, 0x000a0c70, 0x000a1070, 0x000a1470, - 0x000a1870, 0x000a1c70, 0x000a2070, 0x000a2470, - 0x000a2870, 0x000a2c70, 0x000a3070, 0x000a3470, - 0x000a3870, 0x000a3c70, 0x000a4070, 0x000a4470, - 0x000a4870, 0x000a4c70, 0x000a5070, 0x000a5470, - 0x000a5870, 0x000a5c70, 0x000a6070, 0x000a6470, - 0x000a6870, 0x000a6c70, 0x000a7070, 0x000a7470, - 0x000a7870, 0x000a7c70, 0x000a8070, 0x000a8470, - 0x000a8870, 0x000a8c70, 0x000a9070, 0x000a9470, - 0x000a9870, 0x000a9c70, 0x000aa070, 0x000aa470, - 0x000aa870, 0x000aac70, 0x000ab070, 0x000ab470, - 0x000ab870, 0x000abc70, 0x000ac070, 0x000ac470, - 0x000ac870, 0x000acc70, 0x000ad070, 0x000ad470, - 0x000ad870, 0x000adc70, 0x000ae070, 0x000ae470, - 0x000ae870, 0x000aec70, 0x000af070, 0x000af470, - 0x000af870, 0x000afc70, 0x000b0070, 0x000b0470, - 0x000b0870, 0x000b0c70, 0x000b1070, 0x000b1470, - 0x000b1870, 0x000b1c70, 0x000b2070, 0x000b2470, - 0x000b2870, 0x000b2c70, 0x000b3070, 0x000b3470, - 0x000b3870, 0x000b3c70, 0x000b4070, 0x000b4470, - 0x000b4870, 0x000b4c70, 0x000b5070, 0x000b5470, - 0x000b5870, 0x000b5c70, 0x000b6070, 0x000b6470, - 0x000b6870, 0x000b6c70, 0x000b7070, 0x000b7470, - 0x000b7870, 0x000b7c70, 0x000b8070, 0x000b8470, - 0x000b8870, 0x000b8c70, 0x000b9070, 0x000b9470, - 0x000b9870, 0x000b9c70, 0x000ba070, 0x000ba470, - 0x000ba870, 0x000bac70, 0x000bb070, 0x000bb470, - 0x000bb870, 0x000bbc70, 0x000bc070, 0x000bc470, - 0x000bc870, 0x000bcc70, 0x000bd070, 0x000bd470, - 0x000bd870, 0x000bdc70, 0x000be070, 0x000be470, - 0x000be870, 0x000bec70, 0x000bf070, 0x000bf470, - 0x000bf870, 0x000bfc70, 0x000c0070, 0x000c0470, - 0x000c0870, 0x000c0c70, 0x000c1070, 0x000c1470, - 0x000c1870, 0x000c1c70, 0x000c2070, 0x000c2470, - 0x000c2870, 0x000c2c70, 0x000c3070, 0x000c3470, - 0x000c3870, 0x000c3c70, 0x000c4070, 0x000c4470, - 0x000c4870, 0x000c4c70, 0x000c5070, 0x000c5470, - 0x000c5870, 0x000c5c70, 0x000c6070, 0x000c6470, - 0x000c6870, 0x000c6c70, 0x000c7070, 0x000c7470, - 0x000c7870, 0x000c7c70, 0x000c8070, 0x000c8470, - 0x000c8870, 0x000c8c70, 0x000c9070, 0x000c9470, - 0x000c9870, 0x000c9c70, 0x000ca070, 0x000ca470, - 0x000ca870, 0x000cac70, 0x000cb070, 0x000cb470, - 0x000cb870, 0x000cbc70, 0x000cc070, 0x000cc470, - 0x000cc870, 0x000ccc70, 0x000cd070, 0x000cd470, - 0x000cd870, 0x000cdc70, 0x000ce070, 0x000ce470, - 0x000ce870, 0x000cec70, 0x000cf070, 0x000cf470, - 0x000cf870, 0x000cfc70, 0x000d0070, 0x000d0470, - 0x000d0870, 0x000d0c70, 0x000d1070, 0x000d1470, - 0x000d1870, 0x000d1c70, 0x000d2070, 0x000d2470, - 0x000d2870, 0x000d2c70, 0x000d3070, 0x000d3470, - 0x000d3870, 0x000d3c70, 0x000d4070, 0x000d4470, - 0x000d4870, 0x000d4c70, 0x000d5070, 0x000d5470, - 0x000d5870, 0x000d5c70, 0x000d6070, 0x000d6470, - 0x000d6870, 0x000d6c70, 0x000d7070, 0x000d7470, - 0x000d7870, 0x000d7c70, 0x000d8070, 0x000d8470, - 0x000d8870, 0x000d8c70, 0x000d9070, 0x000d9470, - 0x000d9870, 0x000d9c70, 0x000da070, 0x000da470, - 0x000da870, 0x000dac70, 0x000db070, 0x000db470, - 0x000db870, 0x000dbc70, 0x000dc070, 0x000dc470, - 0x000dc870, 0x000dcc70, 0x000dd070, 0x000dd470, - 0x000dd870, 0x000ddc70, 0x000de070, 0x000de470, - 0x000de870, 0x000dec70, 0x000df070, 0x000df470, - 0x000df870, 0x000dfc70, 0x000e0070, 0x000e0470, - 0x000e0870, 0x000e0c70, 0x000e1070, 0x000e1470, - 0x000e1870, 0x000e1c70, 0x000e2070, 0x000e2470, - 0x000e2870, 0x000e2c70, 0x000e3070, 0x000e3470, - 0x000e3870, 0x000e3c70, 0x000e4070, 0x000e4470, - 0x000e4870, 0x000e4c70, 0x000e5070, 0x000e5470, - 0x000e5870, 0x000e5c70, 0x000e6070, 0x000e6470, - 0x000e6870, 0x000e6c70, 0x000e7070, 0x000e7470, - 0x000e7870, 0x000e7c70, 0x000e8070, 0x000e8470, - 0x000e8870, 0x000e8c70, 0x000e9070, 0x000e9470, - 0x000e9870, 0x000e9c70, 0x000ea070, 0x000ea470, - 0x000ea870, 0x000eac70, 0x000eb070, 0x000eb470, - 0x000eb870, 0x000ebc70, 0x000ec070, 0x000ec470, - 0x000ec870, 0x000ecc70, 0x000ed070, 0x000ed470, - 0x000ed870, 0x000edc70, 0x000ee070, 0x000ee470, - 0x000ee870, 0x000eec70, 0x000ef070, 0x000ef470, - 0x000ef870, 0x000efc70, 0x000f0070, 0x000f0470, - 0x000f0870, 0x000f0c70, 0x000f1070, 0x000f1470, - 0x000f1870, 0x000f1c70, 0x000f2070, 0x000f2470, - 0x000f2870, 0x000f2c70, 0x000f3070, 0x000f3470, - 0x000f3870, 0x000f3c70, 0x000f4070, 0x000f4470, - 0x000f4870, 0x000f4c70, 0x000f5070, 0x000f5470, - 0x000f5870, 0x000f5c70, 0x000f6070, 0x000f6470, - 0x000f6870, 0x000f6c70, 0x000f7070, 0x000f7470, - 0x000f7870, 0x000f7c70, 0x000f8070, 0x000f8470, - 0x000f8870, 0x000f8c70, 0x000f9070, 0x000f9470, - 0x000f9870, 0x000f9c70, 0x000fa070, 0x000fa470, - 0x000fa870, 0x000fac70, 0x000fb070, 0x000fb470, - 0x000fb870, 0x000fbc70, 0x000fc070, 0x000fc470, - 0x000fc870, 0x000fcc70, 0x000fd070, 0x000fd470, - 0x000fd870, 0x000fdc70, 0x000fe070, 0x000fe470, - 0x000fe870, 0x000fec70, 0x000ff070, 0x000ff470, - 0x000ff870, 0x000ffc70, 0x00100070, 0x00100470, - 0x00100870, 0x00100c70, 0x00101070, 0x00101470, - 0x00101870, 0x00101c70, 0x00102070, 0x00102470, - 0x00102870, 0x00102c70, 0x00103070, 0x00103470, - 0x00103870, 0x00103c70, 0x00104070, 0x00104470, - 0x00104870, 0x00104c70, 0x00105070, 0x00105470, - 0x00105870, 0x00105c70, 0x00106070, 0x00106470, - 0x00106870, 0x00106c70, 0x00107070, 0x00107470, - 0x00107870, 0x00107c70, 0x00108070, 0x00108470, - 0x00108870, 0x00108c70, 0x00109070, 0x00109470, - 0x00109870, 0x00109c70, 0x0010a070, 0x0010a470, - 0x0010a870, 0x0010ac70, 0x0010b070, 0x0010b470, - 0x0010b870, 0x0010bc70, 0x0010c070, 0x0010c470, - 0x0010c870, 0x0010cc70, 0x0010d070, 0x0010d470, - 0x0010d870, 0x0010dc70, 0x0010e070, 0x0010e470, - 0x0010e870, 0x0010ec70, 0x0010f070, 0x0010f470, - 0x0010f870, 0x0010fc70, 0x00110070, 0x00110470, - 0x00110870, 0x00110c70, 0x00111070, 0x00111470, - 0x00111870, 0x00111c70, 0x00112070, 0x00112470, - 0x00112870, 0x00112c70, 0x00113070, 0x00113470, - 0x00113870, 0x00113c70, 0x00114070, 0x00114470, - 0x00114870, 0x00114c70, 0x00115070, 0x00115470, - 0x00115870, 0x00115c70, 0x00116070, 0x00116470, - 0x00116870, 0x00116c70, 0x00117070, 0x00117470, - 0x00117870, 0x00117c70, 0x00118070, 0x00118470, - 0x00118870, 0x00118c70, 0x00119070, 0x00119470, - 0x00119870, 0x00119c70, 0x0011a070, 0x0011a470, - 0x0011a870, 0x0011ac70, 0x0011b070, 0x0011b470, - 0x0011b870, 0x0011bc70, 0x0011c070, 0x0011c470, - 0x0011c870, 0x0011cc70, 0x0011d070, 0x0011d470, - 0x0011d870, 0x0011dc70, 0x0011e070, 0x0011e470, - 0x0011e870, 0x0011ec70, 0x0011f070, 0x0011f470, - 0x0011f870, 0x0011fc70, 0x00120070, 0x00120470, - 0x00120870, 0x00120c70, 0x00121070, 0x00121470, - 0x00121870, 0x00121c70, 0x00122070, 0x00122470, - 0x00122870, 0x00122c70, 0x00123070, 0x00123470, - 0x00123870, 0x00123c70, 0x00124070, 0x00124470, - 0x00124870, 0x00124c70, 0x00125070, 0x00125470, - 0x00125870, 0x00125c70, 0x00126070, 0x00126470, - 0x00126870, 0x00126c70, 0x00127070, 0x00127470, - 0x00127870, 0x00127c70, 0x00128070, 0x00128470, - 0x00128870, 0x00128c70, 0x00129070, 0x00129470, - 0x00129870, 0x00129c70, 0x0012a070, 0x0012a470, - 0x0012a870, 0x0012ac70, 0x0012b070, 0x0012b470, - 0x0012b870, 0x0012bc70, 0x0012c070, 0x0012c470, - 0x0012c870, 0x0012cc70, 0x0012d070, 0x0012d470, - 0x0012d870, 0x0012dc70, 0x0012e070, 0x0012e470, - 0x0012e870, 0x0012ec70, 0x0012f070, 0x0012f470, - 0x0012f870, 0x0012fc70, 0x00130070, 0x00130470, - 0x00130870, 0x00130c70, 0x00131070, 0x00131470, - 0x00131870, 0x00131c70, 0x00132070, 0x00132470, - 0x00132870, 0x00132c70, 0x00133070, 0x00133470, - 0x00133870, 0x00133c70, 0x00134070, 0x00134470, - 0x00134870, 0x00134c70, 0x00135070, 0x00135470, - 0x00135870, 0x00135c70, 0x00136070, 0x00136470, - 0x00136870, 0x00136c70, 0x00137070, 0x00137470, - 0x00137870, 0x00137c70, 0x00138070, 0x00138470, - 0x00138870, 0x00138c70, 0x00139070, 0x00139470, - 0x00139870, 0x00139c70, 0x0013a070, 0x0013a470, - 0x0013a870, 0x0013ac70, 0x0013b070, 0x0013b470, - 0x0013b870, 0x0013bc70, 0x0013c070, 0x0013c470, - 0x0013c870, 0x0013cc70, 0x0013d070, 0x0013d470, - 0x0013d870, 0x0013dc70, 0x0013e070, 0x0013e470, - 0x0013e870, 0x0013ec70, 0x0013f070, 0x0013f470, - 0x0013f870, 0x0013fc70, 0x00140070, 0x00140470, - 0x00140870, 0x00140c70, 0x00141070, 0x00141470, - 0x00141870, 0x00141c70, 0x00142070, 0x00142470, - 0x00142870, 0x00142c70, 0x00143070, 0x00143470, - 0x00143870, 0x00143c70, 0x00144070, 0x00144470, - 0x00144870, 0x00144c70, 0x00145070, 0x00145470, - 0x00145870, 0x00145c70, 0x00146070, 0x00146470, - 0x00146870, 0x00146c70, 0x00147070, 0x00147470, - 0x00147870, 0x00147c70, 0x00148070, 0x00148470, - 0x00148870, 0x00148c70, 0x00149070, 0x00149470, - 0x00149870, 0x00149c70, 0x0014a070, 0x0014a470, - 0x0014a870, 0x0014ac70, 0x0014b070, 0x0014b470, - 0x0014b870, 0x0014bc70, 0x0014c070, 0x0014c470, - 0x0014c870, 0x0014cc70, 0x0014d070, 0x0014d470, - 0x0014d870, 0x0014dc70, 0x0014e070, 0x0014e470, - 0x0014e870, 0x0014ec70, 0x0014f070, 0x0014f470, - 0x0014f870, 0x0014fc70, 0x00150070, 0x00150470, - 0x00150870, 0x00150c70, 0x00151070, 0x00151470, - 0x00151870, 0x00151c70, 0x00152070, 0x00152470, - 0x00152870, 0x00152c70, 0x00153070, 0x00153470, - 0x00153870, 0x00153c70, 0x00154070, 0x00154470, - 0x00154870, 0x00154c70, 0x00155070, 0x00155470, - 0x00155870, 0x00155c70, 0x00156070, 0x00156470, - 0x00156870, 0x00156c70, 0x00157070, 0x00157470, - 0x00157870, 0x00157c70, 0x00158070, 0x00158470, - 0x00158870, 0x00158c70, 0x00159070, 0x00159470, - 0x00159870, 0x00159c70, 0x0015a070, 0x0015a470, - 0x0015a870, 0x0015ac70, 0x0015b070, 0x0015b470, - 0x0015b870, 0x0015bc70, 0x0015c070, 0x0015c470, - 0x0015c870, 0x0015cc70, 0x0015d070, 0x0015d470, - 0x0015d870, 0x0015dc70, 0x0015e070, 0x0015e470, - 0x0015e870, 0x0015ec70, 0x0015f070, 0x0015f470, - 0x0015f870, 0x0015fc70, 0x00160070, 0x00160470, - 0x00160870, 0x00160c70, 0x00161070, 0x00161470, - 0x00161870, 0x00161c70, 0x00162070, 0x00162470, - 0x00162870, 0x00162c70, 0x00163070, 0x00163470, - 0x00163870, 0x00163c70, 0x00164070, 0x00164470, - 0x00164870, 0x00164c70, 0x00165070, 0x00165470, - 0x00165870, 0x00165c70, 0x00166070, 0x00166470, - 0x00166870, 0x00166c70, 0x00167070, 0x00167470, - 0x00167870, 0x00167c70, 0x00168070, 0x00168470, - 0x00168870, 0x00168c70, 0x00169070, 0x00169470, - 0x00169870, 0x00169c70, 0x0016a070, 0x0016a470, - 0x0016a870, 0x0016ac70, 0x0016b070, 0x0016b470, - 0x0016b870, 0x0016bc70, 0x0016c070, 0x0016c470, - 0x0016c870, 0x0016cc70, 0x0016d070, 0x0016d470, - 0x0016d870, 0x0016dc70, 0x0016e070, 0x0016e470, - 0x0016e870, 0x0016ec70, 0x0016f070, 0x0016f470, - 0x0016f870, 0x0016fc70, 0x00170070, 0x00170470, - 0x00170870, 0x00170c70, 0x00171070, 0x00171470, - 0x00171870, 0x00171c70, 0x00172070, 0x00172470, - 0x00172870, 0x00172c70, 0x00173070, 0x00173470, - 0x00173870, 0x00173c70, 0x00174070, 0x00174470, - 0x00174870, 0x00174c70, 0x00175070, 0x00175470, - 0x00175870, 0x00175c70, 0x00176070, 0x00176470, - 0x00176870, 0x00176c70, 0x00177070, 0x00177470, - 0x00177870, 0x00177c70, 0x00178070, 0x00178470, - 0x00178870, 0x00178c70, 0x00179070, 0x00179470, - 0x00179870, 0x00179c70, 0x0017a070, 0x0017a470, - 0x0017a870, 0x0017ac70, 0x0017b070, 0x0017b470, - 0x0017b870, 0x0017bc70, 0x0017c070, 0x0017c470, - 0x0017c870, 0x0017cc70, 0x0017d070, 0x0017d470, - 0x0017d870, 0x0017dc70, 0x0017e070, 0x0017e470, - 0x0017e870, 0x0017ec70, 0x0017f070, 0x0017f470, - 0x0017f870, 0x0017fc70, 0x00180070, 0x00180470, - 0x00180870, 0x00180c70, 0x00181070, 0x00181470, - 0x00181870, 0x00181c70, 0x00182070, 0x00182470, - 0x00182870, 0x00182c70, 0x00183070, 0x00183470, - 0x00183870, 0x00183c70, 0x00184070, 0x00184470, - 0x00184870, 0x00184c70, 0x00185070, 0x00185470, - 0x00185870, 0x00185c70, 0x00186070, 0x00186470, - 0x00186870, 0x00186c70, 0x00187070, 0x00187470, - 0x00187870, 0x00187c70, 0x00188070, 0x00188470, - 0x00188870, 0x00188c70, 0x00189070, 0x00189470, - 0x00189870, 0x00189c70, 0x0018a070, 0x0018a470, - 0x0018a870, 0x0018ac70, 0x0018b070, 0x0018b470, - 0x0018b870, 0x0018bc70, 0x0018c070, 0x0018c470, - 0x0018c870, 0x0018cc70, 0x0018d070, 0x0018d470, - 0x0018d870, 0x0018dc70, 0x0018e070, 0x0018e470, - 0x0018e870, 0x0018ec70, 0x0018f070, 0x0018f470, - 0x0018f870, 0x0018fc70, 0x00190070, 0x00190470, - 0x00190870, 0x00190c70, 0x00191070, 0x00191470, - 0x00191870, 0x00191c70, 0x00192070, 0x00192470, - 0x00192870, 0x00192c70, 0x00193070, 0x00193470, - 0x00193870, 0x00193c70, 0x00194070, 0x00194470, - 0x00194870, 0x00194c70, 0x00195070, 0x00195470, - 0x00195870, 0x00195c70, 0x00196070, 0x00196470, - 0x00196870, 0x00196c70, 0x00197070, 0x00197470, - 0x00197870, 0x00197c70, 0x00198070, 0x00198470, - 0x00198870, 0x00198c70, 0x00199070, 0x00199470, - 0x00199870, 0x00199c70, 0x0019a070, 0x0019a470, - 0x0019a870, 0x0019ac70, 0x0019b070, 0x0019b470, - 0x0019b870, 0x0019bc70, 0x0019c070, 0x0019c470, - 0x0019c870, 0x0019cc70, 0x0019d070, 0x0019d470, - 0x0019d870, 0x0019dc70, 0x0019e070, 0x0019e470, - 0x0019e870, 0x0019ec70, 0x0019f070, 0x0019f470, - 0x0019f870, 0x0019fc70, 0x001a0070, 0x001a0470, - 0x001a0870, 0x001a0c70, 0x001a1070, 0x001a1470, - 0x001a1870, 0x001a1c70, 0x001a2070, 0x001a2470, - 0x001a2870, 0x001a2c70, 0x001a3070, 0x001a3470, - 0x001a3870, 0x001a3c70, 0x001a4070, 0x001a4470, - 0x001a4870, 0x001a4c70, 0x001a5070, 0x001a5470, - 0x001a5870, 0x001a5c70, 0x001a6070, 0x001a6470, - 0x001a6870, 0x001a6c70, 0x001a7070, 0x001a7470, - 0x001a7870, 0x001a7c70, 0x001a8070, 0x001a8470, - 0x001a8870, 0x001a8c70, 0x001a9070, 0x001a9470, - 0x001a9870, 0x001a9c70, 0x001aa070, 0x001aa470, - 0x001aa870, 0x001aac70, 0x001ab070, 0x001ab470, - 0x001ab870, 0x001abc70, 0x001ac070, 0x001ac470, - 0x001ac870, 0x001acc70, 0x001ad070, 0x001ad470, - 0x001ad870, 0x001adc70, 0x001ae070, 0x001ae470, - 0x001ae870, 0x001aec70, 0x001af070, 0x001af470, - 0x001af870, 0x001afc70, 0x001b0070, 0x001b0470, - 0x001b0870, 0x001b0c70, 0x001b1070, 0x001b1470, - 0x001b1870, 0x001b1c70, 0x001b2070, 0x001b2470, - 0x001b2870, 0x001b2c70, 0x001b3070, 0x001b3470, - 0x001b3870, 0x001b3c70, 0x001b4070, 0x001b4470, - 0x001b4870, 0x001b4c70, 0x001b5070, 0x001b5470, - 0x001b5870, 0x001b5c70, 0x001b6070, 0x001b6470, - 0x001b6870, 0x001b6c70, 0x001b7070, 0x001b7470, - 0x001b7870, 0x001b7c70, 0x001b8070, 0x001b8470, - 0x001b8870, 0x001b8c70, 0x001b9070, 0x001b9470, - 0x001b9870, 0x001b9c70, 0x001ba070, 0x001ba470, - 0x001ba870, 0x001bac70, 0x001bb070, 0x001bb470, - 0x001bb870, 0x001bbc70, 0x001bc070, 0x001bc470, - 0x001bc870, 0x001bcc70, 0x001bd070, 0x001bd470, - 0x001bd870, 0x001bdc70, 0x001be070, 0x001be470, - 0x001be870, 0x001bec70, 0x001bf070, 0x001bf470, - 0x001bf870, 0x001bfc70, 0x001c0070, 0x001c0470, - 0x001c0870, 0x001c0c70, 0x001c1070, 0x001c1470, - 0x001c1870, 0x001c1c70, 0x001c2070, 0x001c2470, - 0x001c2870, 0x001c2c70, 0x001c3070, 0x001c3470, - 0x001c3870, 0x001c3c70, 0x001c4070, 0x001c4470, - 0x001c4870, 0x001c4c70, 0x001c5070, 0x001c5470, - 0x001c5870, 0x001c5c70, 0x001c6070, 0x001c6470, - 0x001c6870, 0x001c6c70, 0x001c7070, 0x001c7470, - 0x001c7870, 0x001c7c70, 0x001c8070, 0x001c8470, - 0x001c8870, 0x001c8c70, 0x001c9070, 0x001c9470, - 0x001c9870, 0x001c9c70, 0x001ca070, 0x001ca470, - 0x001ca870, 0x001cac70, 0x001cb070, 0x001cb470, - 0x001cb870, 0x001cbc70, 0x001cc070, 0x001cc470, - 0x001cc870, 0x001ccc70, 0x001cd070, 0x001cd470, - 0x001cd870, 0x001cdc70, 0x001ce070, 0x001ce470, - 0x001ce870, 0x001cec70, 0x001cf070, 0x001cf470, - 0x001cf870, 0x001cfc70, 0x001d0070, 0x001d0470, - 0x001d0870, 0x001d0c70, 0x001d1070, 0x001d1470, - 0x001d1870, 0x001d1c70, 0x001d2070, 0x001d2470, - 0x001d2870, 0x001d2c70, 0x001d3070, 0x001d3470, - 0x001d3870, 0x001d3c70, 0x001d4070, 0x001d4470, - 0x001d4870, 0x001d4c70, 0x001d5070, 0x001d5470, - 0x001d5870, 0x001d5c70, 0x001d6070, 0x001d6470, - 0x001d6870, 0x001d6c70, 0x001d7070, 0x001d7470, - 0x001d7870, 0x001d7c70, 0x001d8070, 0x001d8470, - 0x001d8870, 0x001d8c70, 0x001d9070, 0x001d9470, - 0x001d9870, 0x001d9c70, 0x001da070, 0x001da470, - 0x001da870, 0x001dac70, 0x001db070, 0x001db470, - 0x001db870, 0x001dbc70, 0x001dc070, 0x001dc470, - 0x001dc870, 0x001dcc70, 0x001dd070, 0x001dd470, - 0x001dd870, 0x001ddc70, 0x001de070, 0x001de470, - 0x001de870, 0x001dec70, 0x001df070, 0x001df470, - 0x001df870, 0x001dfc70, 0x001e0070, 0x001e0470, - 0x001e0870, 0x001e0c70, 0x001e1070, 0x001e1470, - 0x001e1870, 0x001e1c70, 0x001e2070, 0x001e2470, - 0x001e2870, 0x001e2c70, 0x001e3070, 0x001e3470, - 0x001e3870, 0x001e3c70, 0x001e4070, 0x001e4470, - 0x001e4870, 0x001e4c70, 0x001e5070, 0x001e5470, - 0x001e5870, 0x001e5c70, 0x001e6070, 0x001e6470, - 0x001e6870, 0x001e6c70, 0x001e7070, 0x001e7470, - 0x001e7870, 0x001e7c70, 0x001e8070, 0x001e8470, - 0x001e8870, 0x001e8c70, 0x001e9070, 0x001e9470, - 0x001e9870, 0x001e9c70, 0x001ea070, 0x001ea470, - 0x001ea870, 0x001eac70, 0x001eb070, 0x001eb470, - 0x001eb870, 0x001ebc70, 0x001ec070, 0x001ec470, - 0x001ec870, 0x001ecc70, 0x001ed070, 0x001ed470, - 0x001ed870, 0x001edc70, 0x001ee070, 0x001ee470, - 0x001ee870, 0x001eec70, 0x001ef070, 0x001ef470, - 0x001ef870, 0x001efc70, 0x001f0070, 0x001f0470, - 0x001f0870, 0x001f0c70, 0x001f1070, 0x001f1470, - 0x001f1870, 0x001f1c70, 0x001f2070, 0x001f2470, - 0x001f2870, 0x001f2c70, 0x001f3070, 0x001f3470, - 0x001f3870, 0x001f3c70, 0x001f4070, 0x001f4470, - 0x001f4870, 0x001f4c70, 0x001f5070, 0x001f5470, - 0x001f5870, 0x001f5c70, 0x001f6070, 0x001f6470, - 0x001f6870, 0x001f6c70, 0x001f7070, 0x001f7470, - 0x001f7870, 0x001f7c70, 0x001f8070, 0x001f8470, - 0x001f8870, 0x001f8c70, 0x001f9070, 0x001f9470, - 0x001f9870, 0x001f9c70, 0x001fa070, 0x001fa470, - 0x001fa870, 0x001fac70, 0x001fb070, 0x001fb470, - 0x001fb870, 0x001fbc70, 0x001fc070, 0x001fc470, - 0x001fc870, 0x001fcc70, 0x001fd070, 0x001fd470, - 0x001fd870, 0x001fdc70, 0x001fe070, 0x001fe470, - 0x001fe870, 0x001fec70, 0x001ff070, 0x001ff470, - 0x001ff870, 0x001ffc70, 0x00000270, 0x00000670, - 0x00000a70, 0x00000e70, 0x00001270, 0x00001670, - 0x00001a70, 0x00001e70, 0x00002270, 0x00002670, - 0x00002a70, 0x00002e70, 0x00003270, 0x00003670, - 0x00003a70, 0x00003e70, 0x00004270, 0x00004670, - 0x00004a70, 0x00004e70, 0x00005270, 0x00005670, - 0x00005a70, 0x00005e70, 0x00006270, 0x00006670, - 0x00006a70, 0x00006e70, 0x00007270, 0x00007670, - 0x00007a70, 0x00007e70, 0x00008270, 0x00008670, - 0x00008a70, 0x00008e70, 0x00009270, 0x00009670, - 0x00009a70, 0x00009e70, 0x0000a270, 0x0000a670, - 0x0000aa70, 0x0000ae70, 0x0000b270, 0x0000b670, - 0x0000ba70, 0x0000be70, 0x0000c270, 0x0000c670, - 0x0000ca70, 0x0000ce70, 0x0000d270, 0x0000d670, - 0x0000da70, 0x0000de70, 0x0000e270, 0x0000e670, - 0x0000ea70, 0x0000ee70, 0x0000f270, 0x0000f670, - 0x0000fa70, 0x0000fe70, 0x00010270, 0x00010670, - 0x00010a70, 0x00010e70, 0x00011270, 0x00011670, - 0x00011a70, 0x00011e70, 0x00012270, 0x00012670, - 0x00012a70, 0x00012e70, 0x00013270, 0x00013670, - 0x00013a70, 0x00013e70, 0x00014270, 0x00014670, - 0x00014a70, 0x00014e70, 0x00015270, 0x00015670, - 0x00015a70, 0x00015e70, 0x00016270, 0x00016670, - 0x00016a70, 0x00016e70, 0x00017270, 0x00017670, - 0x00017a70, 0x00017e70, 0x00018270, 0x00018670, - 0x00018a70, 0x00018e70, 0x00019270, 0x00019670, - 0x00019a70, 0x00019e70, 0x0001a270, 0x0001a670, - 0x0001aa70, 0x0001ae70, 0x0001b270, 0x0001b670, - 0x0001ba70, 0x0001be70, 0x0001c270, 0x0001c670, - 0x0001ca70, 0x0001ce70, 0x0001d270, 0x0001d670, - 0x0001da70, 0x0001de70, 0x0001e270, 0x0001e670, - 0x0001ea70, 0x0001ee70, 0x0001f270, 0x0001f670, - 0x0001fa70, 0x0001fe70, 0x00020270, 0x00020670, - 0x00020a70, 0x00020e70, 0x00021270, 0x00021670, - 0x00021a70, 0x00021e70, 0x00022270, 0x00022670, - 0x00022a70, 0x00022e70, 0x00023270, 0x00023670, - 0x00023a70, 0x00023e70, 0x00024270, 0x00024670, - 0x00024a70, 0x00024e70, 0x00025270, 0x00025670, - 0x00025a70, 0x00025e70, 0x00026270, 0x00026670, - 0x00026a70, 0x00026e70, 0x00027270, 0x00027670, - 0x00027a70, 0x00027e70, 0x00028270, 0x00028670, - 0x00028a70, 0x00028e70, 0x00029270, 0x00029670, - 0x00029a70, 0x00029e70, 0x0002a270, 0x0002a670, - 0x0002aa70, 0x0002ae70, 0x0002b270, 0x0002b670, - 0x0002ba70, 0x0002be70, 0x0002c270, 0x0002c670, - 0x0002ca70, 0x0002ce70, 0x0002d270, 0x0002d670, - 0x0002da70, 0x0002de70, 0x0002e270, 0x0002e670, - 0x0002ea70, 0x0002ee70, 0x0002f270, 0x0002f670, - 0x0002fa70, 0x0002fe70, 0x00030270, 0x00030670, - 0x00030a70, 0x00030e70, 0x00031270, 0x00031670, - 0x00031a70, 0x00031e70, 0x00032270, 0x00032670, - 0x00032a70, 0x00032e70, 0x00033270, 0x00033670, - 0x00033a70, 0x00033e70, 0x00034270, 0x00034670, - 0x00034a70, 0x00034e70, 0x00035270, 0x00035670, - 0x00035a70, 0x00035e70, 0x00036270, 0x00036670, - 0x00036a70, 0x00036e70, 0x00037270, 0x00037670, - 0x00037a70, 0x00037e70, 0x00038270, 0x00038670, - 0x00038a70, 0x00038e70, 0x00039270, 0x00039670, - 0x00039a70, 0x00039e70, 0x0003a270, 0x0003a670, - 0x0003aa70, 0x0003ae70, 0x0003b270, 0x0003b670, - 0x0003ba70, 0x0003be70, 0x0003c270, 0x0003c670, - 0x0003ca70, 0x0003ce70, 0x0003d270, 0x0003d670, - 0x0003da70, 0x0003de70, 0x0003e270, 0x0003e670, - 0x0003ea70, 0x0003ee70, 0x0003f270, 0x0003f670, - 0x0003fa70, 0x0003fe70, 0x00040270, 0x00040670, - 0x00040a70, 0x00040e70, 0x00041270, 0x00041670, - 0x00041a70, 0x00041e70, 0x00042270, 0x00042670, - 0x00042a70, 0x00042e70, 0x00043270, 0x00043670, - 0x00043a70, 0x00043e70, 0x00044270, 0x00044670, - 0x00044a70, 0x00044e70, 0x00045270, 0x00045670, - 0x00045a70, 0x00045e70, 0x00046270, 0x00046670, - 0x00046a70, 0x00046e70, 0x00047270, 0x00047670, - 0x00047a70, 0x00047e70, 0x00048270, 0x00048670, - 0x00048a70, 0x00048e70, 0x00049270, 0x00049670, - 0x00049a70, 0x00049e70, 0x0004a270, 0x0004a670, - 0x0004aa70, 0x0004ae70, 0x0004b270, 0x0004b670, - 0x0004ba70, 0x0004be70, 0x0004c270, 0x0004c670, - 0x0004ca70, 0x0004ce70, 0x0004d270, 0x0004d670, - 0x0004da70, 0x0004de70, 0x0004e270, 0x0004e670, - 0x0004ea70, 0x0004ee70, 0x0004f270, 0x0004f670, - 0x0004fa70, 0x0004fe70, 0x00050270, 0x00050670, - 0x00050a70, 0x00050e70, 0x00051270, 0x00051670, - 0x00051a70, 0x00051e70, 0x00052270, 0x00052670, - 0x00052a70, 0x00052e70, 0x00053270, 0x00053670, - 0x00053a70, 0x00053e70, 0x00054270, 0x00054670, - 0x00054a70, 0x00054e70, 0x00055270, 0x00055670, - 0x00055a70, 0x00055e70, 0x00056270, 0x00056670, - 0x00056a70, 0x00056e70, 0x00057270, 0x00057670, - 0x00057a70, 0x00057e70, 0x00058270, 0x00058670, - 0x00058a70, 0x00058e70, 0x00059270, 0x00059670, - 0x00059a70, 0x00059e70, 0x0005a270, 0x0005a670, - 0x0005aa70, 0x0005ae70, 0x0005b270, 0x0005b670, - 0x0005ba70, 0x0005be70, 0x0005c270, 0x0005c670, - 0x0005ca70, 0x0005ce70, 0x0005d270, 0x0005d670, - 0x0005da70, 0x0005de70, 0x0005e270, 0x0005e670, - 0x0005ea70, 0x0005ee70, 0x0005f270, 0x0005f670, - 0x0005fa70, 0x0005fe70, 0x00060270, 0x00060670, - 0x00060a70, 0x00060e70, 0x00061270, 0x00061670, - 0x00061a70, 0x00061e70, 0x00062270, 0x00062670, - 0x00062a70, 0x00062e70, 0x00063270, 0x00063670, - 0x00063a70, 0x00063e70, 0x00064270, 0x00064670, - 0x00064a70, 0x00064e70, 0x00065270, 0x00065670, - 0x00065a70, 0x00065e70, 0x00066270, 0x00066670, - 0x00066a70, 0x00066e70, 0x00067270, 0x00067670, - 0x00067a70, 0x00067e70, 0x00068270, 0x00068670, - 0x00068a70, 0x00068e70, 0x00069270, 0x00069670, - 0x00069a70, 0x00069e70, 0x0006a270, 0x0006a670, - 0x0006aa70, 0x0006ae70, 0x0006b270, 0x0006b670, - 0x0006ba70, 0x0006be70, 0x0006c270, 0x0006c670, - 0x0006ca70, 0x0006ce70, 0x0006d270, 0x0006d670, - 0x0006da70, 0x0006de70, 0x0006e270, 0x0006e670, - 0x0006ea70, 0x0006ee70, 0x0006f270, 0x0006f670, - 0x0006fa70, 0x0006fe70, 0x00070270, 0x00070670, - 0x00070a70, 0x00070e70, 0x00071270, 0x00071670, - 0x00071a70, 0x00071e70, 0x00072270, 0x00072670, - 0x00072a70, 0x00072e70, 0x00073270, 0x00073670, - 0x00073a70, 0x00073e70, 0x00074270, 0x00074670, - 0x00074a70, 0x00074e70, 0x00075270, 0x00075670, - 0x00075a70, 0x00075e70, 0x00076270, 0x00076670, - 0x00076a70, 0x00076e70, 0x00077270, 0x00077670, - 0x00077a70, 0x00077e70, 0x00078270, 0x00078670, - 0x00078a70, 0x00078e70, 0x00079270, 0x00079670, - 0x00079a70, 0x00079e70, 0x0007a270, 0x0007a670, - 0x0007aa70, 0x0007ae70, 0x0007b270, 0x0007b670, - 0x0007ba70, 0x0007be70, 0x0007c270, 0x0007c670, - 0x0007ca70, 0x0007ce70, 0x0007d270, 0x0007d670, - 0x0007da70, 0x0007de70, 0x0007e270, 0x0007e670, - 0x0007ea70, 0x0007ee70, 0x0007f270, 0x0007f670, - 0x0007fa70, 0x0007fe70, 0x00080270, 0x00080670, - 0x00080a70, 0x00080e70, 0x00081270, 0x00081670, - 0x00081a70, 0x00081e70, 0x00082270, 0x00082670, - 0x00082a70, 0x00082e70, 0x00083270, 0x00083670, - 0x00083a70, 0x00083e70, 0x00084270, 0x00084670, - 0x00084a70, 0x00084e70, 0x00085270, 0x00085670, - 0x00085a70, 0x00085e70, 0x00086270, 0x00086670, - 0x00086a70, 0x00086e70, 0x00087270, 0x00087670, - 0x00087a70, 0x00087e70, 0x00088270, 0x00088670, - 0x00088a70, 0x00088e70, 0x00089270, 0x00089670, - 0x00089a70, 0x00089e70, 0x0008a270, 0x0008a670, - 0x0008aa70, 0x0008ae70, 0x0008b270, 0x0008b670, - 0x0008ba70, 0x0008be70, 0x0008c270, 0x0008c670, - 0x0008ca70, 0x0008ce70, 0x0008d270, 0x0008d670, - 0x0008da70, 0x0008de70, 0x0008e270, 0x0008e670, - 0x0008ea70, 0x0008ee70, 0x0008f270, 0x0008f670, - 0x0008fa70, 0x0008fe70, 0x00090270, 0x00090670, - 0x00090a70, 0x00090e70, 0x00091270, 0x00091670, - 0x00091a70, 0x00091e70, 0x00092270, 0x00092670, - 0x00092a70, 0x00092e70, 0x00093270, 0x00093670, - 0x00093a70, 0x00093e70, 0x00094270, 0x00094670, - 0x00094a70, 0x00094e70, 0x00095270, 0x00095670, - 0x00095a70, 0x00095e70, 0x00096270, 0x00096670, - 0x00096a70, 0x00096e70, 0x00097270, 0x00097670, - 0x00097a70, 0x00097e70, 0x00098270, 0x00098670, - 0x00098a70, 0x00098e70, 0x00099270, 0x00099670, - 0x00099a70, 0x00099e70, 0x0009a270, 0x0009a670, - 0x0009aa70, 0x0009ae70, 0x0009b270, 0x0009b670, - 0x0009ba70, 0x0009be70, 0x0009c270, 0x0009c670, - 0x0009ca70, 0x0009ce70, 0x0009d270, 0x0009d670, - 0x0009da70, 0x0009de70, 0x0009e270, 0x0009e670, - 0x0009ea70, 0x0009ee70, 0x0009f270, 0x0009f670, - 0x0009fa70, 0x0009fe70, 0x000a0270, 0x000a0670, - 0x000a0a70, 0x000a0e70, 0x000a1270, 0x000a1670, - 0x000a1a70, 0x000a1e70, 0x000a2270, 0x000a2670, - 0x000a2a70, 0x000a2e70, 0x000a3270, 0x000a3670, - 0x000a3a70, 0x000a3e70, 0x000a4270, 0x000a4670, - 0x000a4a70, 0x000a4e70, 0x000a5270, 0x000a5670, - 0x000a5a70, 0x000a5e70, 0x000a6270, 0x000a6670, - 0x000a6a70, 0x000a6e70, 0x000a7270, 0x000a7670, - 0x000a7a70, 0x000a7e70, 0x000a8270, 0x000a8670, - 0x000a8a70, 0x000a8e70, 0x000a9270, 0x000a9670, - 0x000a9a70, 0x000a9e70, 0x000aa270, 0x000aa670, - 0x000aaa70, 0x000aae70, 0x000ab270, 0x000ab670, - 0x000aba70, 0x000abe70, 0x000ac270, 0x000ac670, - 0x000aca70, 0x000ace70, 0x000ad270, 0x000ad670, - 0x000ada70, 0x000ade70, 0x000ae270, 0x000ae670, - 0x000aea70, 0x000aee70, 0x000af270, 0x000af670, - 0x000afa70, 0x000afe70, 0x000b0270, 0x000b0670, - 0x000b0a70, 0x000b0e70, 0x000b1270, 0x000b1670, - 0x000b1a70, 0x000b1e70, 0x000b2270, 0x000b2670, - 0x000b2a70, 0x000b2e70, 0x000b3270, 0x000b3670, - 0x000b3a70, 0x000b3e70, 0x000b4270, 0x000b4670, - 0x000b4a70, 0x000b4e70, 0x000b5270, 0x000b5670, - 0x000b5a70, 0x000b5e70, 0x000b6270, 0x000b6670, - 0x000b6a70, 0x000b6e70, 0x000b7270, 0x000b7670, - 0x000b7a70, 0x000b7e70, 0x000b8270, 0x000b8670, - 0x000b8a70, 0x000b8e70, 0x000b9270, 0x000b9670, - 0x000b9a70, 0x000b9e70, 0x000ba270, 0x000ba670, - 0x000baa70, 0x000bae70, 0x000bb270, 0x000bb670, - 0x000bba70, 0x000bbe70, 0x000bc270, 0x000bc670, - 0x000bca70, 0x000bce70, 0x000bd270, 0x000bd670, - 0x000bda70, 0x000bde70, 0x000be270, 0x000be670, - 0x000bea70, 0x000bee70, 0x000bf270, 0x000bf670, - 0x000bfa70, 0x000bfe70, 0x000c0270, 0x000c0670, - 0x000c0a70, 0x000c0e70, 0x000c1270, 0x000c1670, - 0x000c1a70, 0x000c1e70, 0x000c2270, 0x000c2670, - 0x000c2a70, 0x000c2e70, 0x000c3270, 0x000c3670, - 0x000c3a70, 0x000c3e70, 0x000c4270, 0x000c4670, - 0x000c4a70, 0x000c4e70, 0x000c5270, 0x000c5670, - 0x000c5a70, 0x000c5e70, 0x000c6270, 0x000c6670, - 0x000c6a70, 0x000c6e70, 0x000c7270, 0x000c7670, - 0x000c7a70, 0x000c7e70, 0x000c8270, 0x000c8670, - 0x000c8a70, 0x000c8e70, 0x000c9270, 0x000c9670, - 0x000c9a70, 0x000c9e70, 0x000ca270, 0x000ca670, - 0x000caa70, 0x000cae70, 0x000cb270, 0x000cb670, - 0x000cba70, 0x000cbe70, 0x000cc270, 0x000cc670, - 0x000cca70, 0x000cce70, 0x000cd270, 0x000cd670, - 0x000cda70, 0x000cde70, 0x000ce270, 0x000ce670, - 0x000cea70, 0x000cee70, 0x000cf270, 0x000cf670, - 0x000cfa70, 0x000cfe70, 0x000d0270, 0x000d0670, - 0x000d0a70, 0x000d0e70, 0x000d1270, 0x000d1670, - 0x000d1a70, 0x000d1e70, 0x000d2270, 0x000d2670, - 0x000d2a70, 0x000d2e70, 0x000d3270, 0x000d3670, - 0x000d3a70, 0x000d3e70, 0x000d4270, 0x000d4670, - 0x000d4a70, 0x000d4e70, 0x000d5270, 0x000d5670, - 0x000d5a70, 0x000d5e70, 0x000d6270, 0x000d6670, - 0x000d6a70, 0x000d6e70, 0x000d7270, 0x000d7670, - 0x000d7a70, 0x000d7e70, 0x000d8270, 0x000d8670, - 0x000d8a70, 0x000d8e70, 0x000d9270, 0x000d9670, - 0x000d9a70, 0x000d9e70, 0x000da270, 0x000da670, - 0x000daa70, 0x000dae70, 0x000db270, 0x000db670, - 0x000dba70, 0x000dbe70, 0x000dc270, 0x000dc670, - 0x000dca70, 0x000dce70, 0x000dd270, 0x000dd670, - 0x000dda70, 0x000dde70, 0x000de270, 0x000de670, - 0x000dea70, 0x000dee70, 0x000df270, 0x000df670, - 0x000dfa70, 0x000dfe70, 0x000e0270, 0x000e0670, - 0x000e0a70, 0x000e0e70, 0x000e1270, 0x000e1670, - 0x000e1a70, 0x000e1e70, 0x000e2270, 0x000e2670, - 0x000e2a70, 0x000e2e70, 0x000e3270, 0x000e3670, - 0x000e3a70, 0x000e3e70, 0x000e4270, 0x000e4670, - 0x000e4a70, 0x000e4e70, 0x000e5270, 0x000e5670, - 0x000e5a70, 0x000e5e70, 0x000e6270, 0x000e6670, - 0x000e6a70, 0x000e6e70, 0x000e7270, 0x000e7670, - 0x000e7a70, 0x000e7e70, 0x000e8270, 0x000e8670, - 0x000e8a70, 0x000e8e70, 0x000e9270, 0x000e9670, - 0x000e9a70, 0x000e9e70, 0x000ea270, 0x000ea670, - 0x000eaa70, 0x000eae70, 0x000eb270, 0x000eb670, - 0x000eba70, 0x000ebe70, 0x000ec270, 0x000ec670, - 0x000eca70, 0x000ece70, 0x000ed270, 0x000ed670, - 0x000eda70, 0x000ede70, 0x000ee270, 0x000ee670, - 0x000eea70, 0x000eee70, 0x000ef270, 0x000ef670, - 0x000efa70, 0x000efe70, 0x000f0270, 0x000f0670, - 0x000f0a70, 0x000f0e70, 0x000f1270, 0x000f1670, - 0x000f1a70, 0x000f1e70, 0x000f2270, 0x000f2670, - 0x000f2a70, 0x000f2e70, 0x000f3270, 0x000f3670, - 0x000f3a70, 0x000f3e70, 0x000f4270, 0x000f4670, - 0x000f4a70, 0x000f4e70, 0x000f5270, 0x000f5670, - 0x000f5a70, 0x000f5e70, 0x000f6270, 0x000f6670, - 0x000f6a70, 0x000f6e70, 0x000f7270, 0x000f7670, - 0x000f7a70, 0x000f7e70, 0x000f8270, 0x000f8670, - 0x000f8a70, 0x000f8e70, 0x000f9270, 0x000f9670, - 0x000f9a70, 0x000f9e70, 0x000fa270, 0x000fa670, - 0x000faa70, 0x000fae70, 0x000fb270, 0x000fb670, - 0x000fba70, 0x000fbe70, 0x000fc270, 0x000fc670, - 0x000fca70, 0x000fce70, 0x000fd270, 0x000fd670, - 0x000fda70, 0x000fde70, 0x000fe270, 0x000fe670, - 0x000fea70, 0x000fee70, 0x000ff270, 0x000ff670, - 0x000ffa70, 0x000ffe70, 0x00100270, 0x00100670, - 0x00100a70, 0x00100e70, 0x00101270, 0x00101670, - 0x00101a70, 0x00101e70, 0x00102270, 0x00102670, - 0x00102a70, 0x00102e70, 0x00103270, 0x00103670, - 0x00103a70, 0x00103e70, 0x00104270, 0x00104670, - 0x00104a70, 0x00104e70, 0x00105270, 0x00105670, - 0x00105a70, 0x00105e70, 0x00106270, 0x00106670, - 0x00106a70, 0x00106e70, 0x00107270, 0x00107670, - 0x00107a70, 0x00107e70, 0x00108270, 0x00108670, - 0x00108a70, 0x00108e70, 0x00109270, 0x00109670, - 0x00109a70, 0x00109e70, 0x0010a270, 0x0010a670, - 0x0010aa70, 0x0010ae70, 0x0010b270, 0x0010b670, - 0x0010ba70, 0x0010be70, 0x0010c270, 0x0010c670, - 0x0010ca70, 0x0010ce70, 0x0010d270, 0x0010d670, - 0x0010da70, 0x0010de70, 0x0010e270, 0x0010e670, - 0x0010ea70, 0x0010ee70, 0x0010f270, 0x0010f670, - 0x0010fa70, 0x0010fe70, 0x00110270, 0x00110670, - 0x00110a70, 0x00110e70, 0x00111270, 0x00111670, - 0x00111a70, 0x00111e70, 0x00112270, 0x00112670, - 0x00112a70, 0x00112e70, 0x00113270, 0x00113670, - 0x00113a70, 0x00113e70, 0x00114270, 0x00114670, - 0x00114a70, 0x00114e70, 0x00115270, 0x00115670, - 0x00115a70, 0x00115e70, 0x00116270, 0x00116670, - 0x00116a70, 0x00116e70, 0x00117270, 0x00117670, - 0x00117a70, 0x00117e70, 0x00118270, 0x00118670, - 0x00118a70, 0x00118e70, 0x00119270, 0x00119670, - 0x00119a70, 0x00119e70, 0x0011a270, 0x0011a670, - 0x0011aa70, 0x0011ae70, 0x0011b270, 0x0011b670, - 0x0011ba70, 0x0011be70, 0x0011c270, 0x0011c670, - 0x0011ca70, 0x0011ce70, 0x0011d270, 0x0011d670, - 0x0011da70, 0x0011de70, 0x0011e270, 0x0011e670, - 0x0011ea70, 0x0011ee70, 0x0011f270, 0x0011f670, - 0x0011fa70, 0x0011fe70, 0x00120270, 0x00120670, - 0x00120a70, 0x00120e70, 0x00121270, 0x00121670, - 0x00121a70, 0x00121e70, 0x00122270, 0x00122670, - 0x00122a70, 0x00122e70, 0x00123270, 0x00123670, - 0x00123a70, 0x00123e70, 0x00124270, 0x00124670, - 0x00124a70, 0x00124e70, 0x00125270, 0x00125670, - 0x00125a70, 0x00125e70, 0x00126270, 0x00126670, - 0x00126a70, 0x00126e70, 0x00127270, 0x00127670, - 0x00127a70, 0x00127e70, 0x00128270, 0x00128670, - 0x00128a70, 0x00128e70, 0x00129270, 0x00129670, - 0x00129a70, 0x00129e70, 0x0012a270, 0x0012a670, - 0x0012aa70, 0x0012ae70, 0x0012b270, 0x0012b670, - 0x0012ba70, 0x0012be70, 0x0012c270, 0x0012c670, - 0x0012ca70, 0x0012ce70, 0x0012d270, 0x0012d670, - 0x0012da70, 0x0012de70, 0x0012e270, 0x0012e670, - 0x0012ea70, 0x0012ee70, 0x0012f270, 0x0012f670, - 0x0012fa70, 0x0012fe70, 0x00130270, 0x00130670, - 0x00130a70, 0x00130e70, 0x00131270, 0x00131670, - 0x00131a70, 0x00131e70, 0x00132270, 0x00132670, - 0x00132a70, 0x00132e70, 0x00133270, 0x00133670, - 0x00133a70, 0x00133e70, 0x00134270, 0x00134670, - 0x00134a70, 0x00134e70, 0x00135270, 0x00135670, - 0x00135a70, 0x00135e70, 0x00136270, 0x00136670, - 0x00136a70, 0x00136e70, 0x00137270, 0x00137670, - 0x00137a70, 0x00137e70, 0x00138270, 0x00138670, - 0x00138a70, 0x00138e70, 0x00139270, 0x00139670, - 0x00139a70, 0x00139e70, 0x0013a270, 0x0013a670, - 0x0013aa70, 0x0013ae70, 0x0013b270, 0x0013b670, - 0x0013ba70, 0x0013be70, 0x0013c270, 0x0013c670, - 0x0013ca70, 0x0013ce70, 0x0013d270, 0x0013d670, - 0x0013da70, 0x0013de70, 0x0013e270, 0x0013e670, - 0x0013ea70, 0x0013ee70, 0x0013f270, 0x0013f670, - 0x0013fa70, 0x0013fe70, 0x00140270, 0x00140670, - 0x00140a70, 0x00140e70, 0x00141270, 0x00141670, - 0x00141a70, 0x00141e70, 0x00142270, 0x00142670, - 0x00142a70, 0x00142e70, 0x00143270, 0x00143670, - 0x00143a70, 0x00143e70, 0x00144270, 0x00144670, - 0x00144a70, 0x00144e70, 0x00145270, 0x00145670, - 0x00145a70, 0x00145e70, 0x00146270, 0x00146670, - 0x00146a70, 0x00146e70, 0x00147270, 0x00147670, - 0x00147a70, 0x00147e70, 0x00148270, 0x00148670, - 0x00148a70, 0x00148e70, 0x00149270, 0x00149670, - 0x00149a70, 0x00149e70, 0x0014a270, 0x0014a670, - 0x0014aa70, 0x0014ae70, 0x0014b270, 0x0014b670, - 0x0014ba70, 0x0014be70, 0x0014c270, 0x0014c670, - 0x0014ca70, 0x0014ce70, 0x0014d270, 0x0014d670, - 0x0014da70, 0x0014de70, 0x0014e270, 0x0014e670, - 0x0014ea70, 0x0014ee70, 0x0014f270, 0x0014f670, - 0x0014fa70, 0x0014fe70, 0x00150270, 0x00150670, - 0x00150a70, 0x00150e70, 0x00151270, 0x00151670, - 0x00151a70, 0x00151e70, 0x00152270, 0x00152670, - 0x00152a70, 0x00152e70, 0x00153270, 0x00153670, - 0x00153a70, 0x00153e70, 0x00154270, 0x00154670, - 0x00154a70, 0x00154e70, 0x00155270, 0x00155670, - 0x00155a70, 0x00155e70, 0x00156270, 0x00156670, - 0x00156a70, 0x00156e70, 0x00157270, 0x00157670, - 0x00157a70, 0x00157e70, 0x00158270, 0x00158670, - 0x00158a70, 0x00158e70, 0x00159270, 0x00159670, - 0x00159a70, 0x00159e70, 0x0015a270, 0x0015a670, - 0x0015aa70, 0x0015ae70, 0x0015b270, 0x0015b670, - 0x0015ba70, 0x0015be70, 0x0015c270, 0x0015c670, - 0x0015ca70, 0x0015ce70, 0x0015d270, 0x0015d670, - 0x0015da70, 0x0015de70, 0x0015e270, 0x0015e670, - 0x0015ea70, 0x0015ee70, 0x0015f270, 0x0015f670, - 0x0015fa70, 0x0015fe70, 0x00160270, 0x00160670, - 0x00160a70, 0x00160e70, 0x00161270, 0x00161670, - 0x00161a70, 0x00161e70, 0x00162270, 0x00162670, - 0x00162a70, 0x00162e70, 0x00163270, 0x00163670, - 0x00163a70, 0x00163e70, 0x00164270, 0x00164670, - 0x00164a70, 0x00164e70, 0x00165270, 0x00165670, - 0x00165a70, 0x00165e70, 0x00166270, 0x00166670, - 0x00166a70, 0x00166e70, 0x00167270, 0x00167670, - 0x00167a70, 0x00167e70, 0x00168270, 0x00168670, - 0x00168a70, 0x00168e70, 0x00169270, 0x00169670, - 0x00169a70, 0x00169e70, 0x0016a270, 0x0016a670, - 0x0016aa70, 0x0016ae70, 0x0016b270, 0x0016b670, - 0x0016ba70, 0x0016be70, 0x0016c270, 0x0016c670, - 0x0016ca70, 0x0016ce70, 0x0016d270, 0x0016d670, - 0x0016da70, 0x0016de70, 0x0016e270, 0x0016e670, - 0x0016ea70, 0x0016ee70, 0x0016f270, 0x0016f670, - 0x0016fa70, 0x0016fe70, 0x00170270, 0x00170670, - 0x00170a70, 0x00170e70, 0x00171270, 0x00171670, - 0x00171a70, 0x00171e70, 0x00172270, 0x00172670, - 0x00172a70, 0x00172e70, 0x00173270, 0x00173670, - 0x00173a70, 0x00173e70, 0x00174270, 0x00174670, - 0x00174a70, 0x00174e70, 0x00175270, 0x00175670, - 0x00175a70, 0x00175e70, 0x00176270, 0x00176670, - 0x00176a70, 0x00176e70, 0x00177270, 0x00177670, - 0x00177a70, 0x00177e70, 0x00178270, 0x00178670, - 0x00178a70, 0x00178e70, 0x00179270, 0x00179670, - 0x00179a70, 0x00179e70, 0x0017a270, 0x0017a670, - 0x0017aa70, 0x0017ae70, 0x0017b270, 0x0017b670, - 0x0017ba70, 0x0017be70, 0x0017c270, 0x0017c670, - 0x0017ca70, 0x0017ce70, 0x0017d270, 0x0017d670, - 0x0017da70, 0x0017de70, 0x0017e270, 0x0017e670, - 0x0017ea70, 0x0017ee70, 0x0017f270, 0x0017f670, - 0x0017fa70, 0x0017fe70, 0x00180270, 0x00180670, - 0x00180a70, 0x00180e70, 0x00181270, 0x00181670, - 0x00181a70, 0x00181e70, 0x00182270, 0x00182670, - 0x00182a70, 0x00182e70, 0x00183270, 0x00183670, - 0x00183a70, 0x00183e70, 0x00184270, 0x00184670, - 0x00184a70, 0x00184e70, 0x00185270, 0x00185670, - 0x00185a70, 0x00185e70, 0x00186270, 0x00186670, - 0x00186a70, 0x00186e70, 0x00187270, 0x00187670, - 0x00187a70, 0x00187e70, 0x00188270, 0x00188670, - 0x00188a70, 0x00188e70, 0x00189270, 0x00189670, - 0x00189a70, 0x00189e70, 0x0018a270, 0x0018a670, - 0x0018aa70, 0x0018ae70, 0x0018b270, 0x0018b670, - 0x0018ba70, 0x0018be70, 0x0018c270, 0x0018c670, - 0x0018ca70, 0x0018ce70, 0x0018d270, 0x0018d670, - 0x0018da70, 0x0018de70, 0x0018e270, 0x0018e670, - 0x0018ea70, 0x0018ee70, 0x0018f270, 0x0018f670, - 0x0018fa70, 0x0018fe70, 0x00190270, 0x00190670, - 0x00190a70, 0x00190e70, 0x00191270, 0x00191670, - 0x00191a70, 0x00191e70, 0x00192270, 0x00192670, - 0x00192a70, 0x00192e70, 0x00193270, 0x00193670, - 0x00193a70, 0x00193e70, 0x00194270, 0x00194670, - 0x00194a70, 0x00194e70, 0x00195270, 0x00195670, - 0x00195a70, 0x00195e70, 0x00196270, 0x00196670, - 0x00196a70, 0x00196e70, 0x00197270, 0x00197670, - 0x00197a70, 0x00197e70, 0x00198270, 0x00198670, - 0x00198a70, 0x00198e70, 0x00199270, 0x00199670, - 0x00199a70, 0x00199e70, 0x0019a270, 0x0019a670, - 0x0019aa70, 0x0019ae70, 0x0019b270, 0x0019b670, - 0x0019ba70, 0x0019be70, 0x0019c270, 0x0019c670, - 0x0019ca70, 0x0019ce70, 0x0019d270, 0x0019d670, - 0x0019da70, 0x0019de70, 0x0019e270, 0x0019e670, - 0x0019ea70, 0x0019ee70, 0x0019f270, 0x0019f670, - 0x0019fa70, 0x0019fe70, 0x001a0270, 0x001a0670, - 0x001a0a70, 0x001a0e70, 0x001a1270, 0x001a1670, - 0x001a1a70, 0x001a1e70, 0x001a2270, 0x001a2670, - 0x001a2a70, 0x001a2e70, 0x001a3270, 0x001a3670, - 0x001a3a70, 0x001a3e70, 0x001a4270, 0x001a4670, - 0x001a4a70, 0x001a4e70, 0x001a5270, 0x001a5670, - 0x001a5a70, 0x001a5e70, 0x001a6270, 0x001a6670, - 0x001a6a70, 0x001a6e70, 0x001a7270, 0x001a7670, - 0x001a7a70, 0x001a7e70, 0x001a8270, 0x001a8670, - 0x001a8a70, 0x001a8e70, 0x001a9270, 0x001a9670, - 0x001a9a70, 0x001a9e70, 0x001aa270, 0x001aa670, - 0x001aaa70, 0x001aae70, 0x001ab270, 0x001ab670, - 0x001aba70, 0x001abe70, 0x001ac270, 0x001ac670, - 0x001aca70, 0x001ace70, 0x001ad270, 0x001ad670, - 0x001ada70, 0x001ade70, 0x001ae270, 0x001ae670, - 0x001aea70, 0x001aee70, 0x001af270, 0x001af670, - 0x001afa70, 0x001afe70, 0x001b0270, 0x001b0670, - 0x001b0a70, 0x001b0e70, 0x001b1270, 0x001b1670, - 0x001b1a70, 0x001b1e70, 0x001b2270, 0x001b2670, - 0x001b2a70, 0x001b2e70, 0x001b3270, 0x001b3670, - 0x001b3a70, 0x001b3e70, 0x001b4270, 0x001b4670, - 0x001b4a70, 0x001b4e70, 0x001b5270, 0x001b5670, - 0x001b5a70, 0x001b5e70, 0x001b6270, 0x001b6670, - 0x001b6a70, 0x001b6e70, 0x001b7270, 0x001b7670, - 0x001b7a70, 0x001b7e70, 0x001b8270, 0x001b8670, - 0x001b8a70, 0x001b8e70, 0x001b9270, 0x001b9670, - 0x001b9a70, 0x001b9e70, 0x001ba270, 0x001ba670, - 0x001baa70, 0x001bae70, 0x001bb270, 0x001bb670, - 0x001bba70, 0x001bbe70, 0x001bc270, 0x001bc670, - 0x001bca70, 0x001bce70, 0x001bd270, 0x001bd670, - 0x001bda70, 0x001bde70, 0x001be270, 0x001be670, - 0x001bea70, 0x001bee70, 0x001bf270, 0x001bf670, - 0x001bfa70, 0x001bfe70, 0x001c0270, 0x001c0670, - 0x001c0a70, 0x001c0e70, 0x001c1270, 0x001c1670, - 0x001c1a70, 0x001c1e70, 0x001c2270, 0x001c2670, - 0x001c2a70, 0x001c2e70, 0x001c3270, 0x001c3670, - 0x001c3a70, 0x001c3e70, 0x001c4270, 0x001c4670, - 0x001c4a70, 0x001c4e70, 0x001c5270, 0x001c5670, - 0x001c5a70, 0x001c5e70, 0x001c6270, 0x001c6670, - 0x001c6a70, 0x001c6e70, 0x001c7270, 0x001c7670, - 0x001c7a70, 0x001c7e70, 0x001c8270, 0x001c8670, - 0x001c8a70, 0x001c8e70, 0x001c9270, 0x001c9670, - 0x001c9a70, 0x001c9e70, 0x001ca270, 0x001ca670, - 0x001caa70, 0x001cae70, 0x001cb270, 0x001cb670, - 0x001cba70, 0x001cbe70, 0x001cc270, 0x001cc670, - 0x001cca70, 0x001cce70, 0x001cd270, 0x001cd670, - 0x001cda70, 0x001cde70, 0x001ce270, 0x001ce670, - 0x001cea70, 0x001cee70, 0x001cf270, 0x001cf670, - 0x001cfa70, 0x001cfe70, 0x001d0270, 0x001d0670, - 0x001d0a70, 0x001d0e70, 0x001d1270, 0x001d1670, - 0x001d1a70, 0x001d1e70, 0x001d2270, 0x001d2670, - 0x001d2a70, 0x001d2e70, 0x001d3270, 0x001d3670, - 0x001d3a70, 0x001d3e70, 0x001d4270, 0x001d4670, - 0x001d4a70, 0x001d4e70, 0x001d5270, 0x001d5670, - 0x001d5a70, 0x001d5e70, 0x001d6270, 0x001d6670, - 0x001d6a70, 0x001d6e70, 0x001d7270, 0x001d7670, - 0x001d7a70, 0x001d7e70, 0x001d8270, 0x001d8670, - 0x001d8a70, 0x001d8e70, 0x001d9270, 0x001d9670, - 0x001d9a70, 0x001d9e70, 0x001da270, 0x001da670, - 0x001daa70, 0x001dae70, 0x001db270, 0x001db670, - 0x001dba70, 0x001dbe70, 0x001dc270, 0x001dc670, - 0x001dca70, 0x001dce70, 0x001dd270, 0x001dd670, - 0x001dda70, 0x001dde70, 0x001de270, 0x001de670, - 0x001dea70, 0x001dee70, 0x001df270, 0x001df670, - 0x001dfa70, 0x001dfe70, 0x001e0270, 0x001e0670, - 0x001e0a70, 0x001e0e70, 0x001e1270, 0x001e1670, - 0x001e1a70, 0x001e1e70, 0x001e2270, 0x001e2670, - 0x001e2a70, 0x001e2e70, 0x001e3270, 0x001e3670, - 0x001e3a70, 0x001e3e70, 0x001e4270, 0x001e4670, - 0x001e4a70, 0x001e4e70, 0x001e5270, 0x001e5670, - 0x001e5a70, 0x001e5e70, 0x001e6270, 0x001e6670, - 0x001e6a70, 0x001e6e70, 0x001e7270, 0x001e7670, - 0x001e7a70, 0x001e7e70, 0x001e8270, 0x001e8670, - 0x001e8a70, 0x001e8e70, 0x001e9270, 0x001e9670, - 0x001e9a70, 0x001e9e70, 0x001ea270, 0x001ea670, - 0x001eaa70, 0x001eae70, 0x001eb270, 0x001eb670, - 0x001eba70, 0x001ebe70, 0x001ec270, 0x001ec670, - 0x001eca70, 0x001ece70, 0x001ed270, 0x001ed670, - 0x001eda70, 0x001ede70, 0x001ee270, 0x001ee670, - 0x001eea70, 0x001eee70, 0x001ef270, 0x001ef670, - 0x001efa70, 0x001efe70, 0x001f0270, 0x001f0670, - 0x001f0a70, 0x001f0e70, 0x001f1270, 0x001f1670, - 0x001f1a70, 0x001f1e70, 0x001f2270, 0x001f2670, - 0x001f2a70, 0x001f2e70, 0x001f3270, 0x001f3670, - 0x001f3a70, 0x001f3e70, 0x001f4270, 0x001f4670, - 0x001f4a70, 0x001f4e70, 0x001f5270, 0x001f5670, - 0x001f5a70, 0x001f5e70, 0x001f6270, 0x001f6670, - 0x001f6a70, 0x001f6e70, 0x001f7270, 0x001f7670, - 0x001f7a70, 0x001f7e70, 0x001f8270, 0x001f8670, - 0x001f8a70, 0x001f8e70, 0x001f9270, 0x001f9670, - 0x001f9a70, 0x001f9e70, 0x001fa270, 0x001fa670, - 0x001faa70, 0x001fae70, 0x001fb270, 0x001fb670, - 0x001fba70, 0x001fbe70, 0x001fc270, 0x001fc670, - 0x001fca70, 0x001fce70, 0x001fd270, 0x001fd670, - 0x001fda70, 0x001fde70, 0x001fe270, 0x001fe670, - 0x001fea70, 0x001fee70, 0x001ff270, 0x001ff670, - 0x001ffa70, 0x001ffe70 + 0x00000105, 0x00000305, 0x00000086, 0x00000486, 0x00000286, + 0x00000686, 0x00000187, 0x00000587, 0x00000987, 0x00000d87, + 0x00000387, 0x00000787, 0x00000b87, 0x00000f87, 0x00000048, + 0x00000448, 0x00000848, 0x00000c48, 0x00001048, 0x00001448, + 0x00001848, 0x00001c48, 0x00000248, 0x00000648, 0x00000a48, + 0x00000e48, 0x00001248, 0x00001648, 0x00001a48, 0x00001e48, + 0x00000149, 0x00000549, 0x00000949, 0x00000d49, 0x00001149, + 0x00001549, 0x00001949, 0x00001d49, 0x00002149, 0x00002549, + 0x00002949, 0x00002d49, 0x00003149, 0x00003549, 0x00003949, + 0x00003d49, 0x00000349, 0x00000749, 0x00000b49, 0x00000f49, + 0x00001349, 0x00001749, 0x00001b49, 0x00001f49, 0x00002349, + 0x00002749, 0x00002b49, 0x00002f49, 0x00003349, 0x00003749, + 0x00003b49, 0x00003f49, 0x000000ca, 0x000004ca, 0x000008ca, + 0x00000cca, 0x000010ca, 0x000014ca, 0x000018ca, 0x00001cca, + 0x000020ca, 0x000024ca, 0x000028ca, 0x00002cca, 0x000030ca, + 0x000034ca, 0x000038ca, 0x00003cca, 0x000040ca, 0x000044ca, + 0x000048ca, 0x00004cca, 0x000050ca, 0x000054ca, 0x000058ca, + 0x00005cca, 0x000060ca, 0x000064ca, 0x000068ca, 0x00006cca, + 0x000070ca, 0x000074ca, 0x000078ca, 0x00007cca, 0x000002ca, + 0x000006ca, 0x00000aca, 0x00000eca, 0x000012ca, 0x000016ca, + 0x00001aca, 0x00001eca, 0x000022ca, 0x000026ca, 0x00002aca, + 0x00002eca, 0x000032ca, 0x000036ca, 0x00003aca, 0x00003eca, + 0x000042ca, 0x000046ca, 0x00004aca, 0x00004eca, 0x000052ca, + 0x000056ca, 0x00005aca, 0x00005eca, 0x000062ca, 0x000066ca, + 0x00006aca, 0x00006eca, 0x000072ca, 0x000076ca, 0x00007aca, + 0x00007eca, 0x000001cb, 0x000005cb, 0x000009cb, 0x00000dcb, + 0x000011cb, 0x000015cb, 0x000019cb, 0x00001dcb, 0x000021cb, + 0x000025cb, 0x000029cb, 0x00002dcb, 0x000031cb, 0x000035cb, + 0x000039cb, 0x00003dcb, 0x000041cb, 0x000045cb, 0x000049cb, + 0x00004dcb, 0x000051cb, 0x000055cb, 0x000059cb, 0x00005dcb, + 0x000061cb, 0x000065cb, 0x000069cb, 0x00006dcb, 0x000071cb, + 0x000075cb, 0x000079cb, 0x00007dcb, 0x000081cb, 0x000085cb, + 0x000089cb, 0x00008dcb, 0x000091cb, 0x000095cb, 0x000099cb, + 0x00009dcb, 0x0000a1cb, 0x0000a5cb, 0x0000a9cb, 0x0000adcb, + 0x0000b1cb, 0x0000b5cb, 0x0000b9cb, 0x0000bdcb, 0x0000c1cb, + 0x0000c5cb, 0x0000c9cb, 0x0000cdcb, 0x0000d1cb, 0x0000d5cb, + 0x0000d9cb, 0x0000ddcb, 0x0000e1cb, 0x0000e5cb, 0x0000e9cb, + 0x0000edcb, 0x0000f1cb, 0x0000f5cb, 0x0000f9cb, 0x0000fdcb, + 0x000003cb, 0x000007cb, 0x00000bcb, 0x00000fcb, 0x000013cb, + 0x000017cb, 0x00001bcb, 0x00001fcb, 0x000023cb, 0x000027cb, + 0x00002bcb, 0x00002fcb, 0x000033cb, 0x000037cb, 0x00003bcb, + 0x00003fcb, 0x000043cb, 0x000047cb, 0x00004bcb, 0x00004fcb, + 0x000053cb, 0x000057cb, 0x00005bcb, 0x00005fcb, 0x000063cb, + 0x000067cb, 0x00006bcb, 0x00006fcb, 0x000073cb, 0x000077cb, + 0x00007bcb, 0x00007fcb, 0x000083cb, 0x000087cb, 0x00008bcb, + 0x00008fcb, 0x000093cb, 0x000097cb, 0x00009bcb, 0x00009fcb, + 0x0000a3cb, 0x0000a7cb, 0x0000abcb, 0x0000afcb, 0x0000b3cb, + 0x0000b7cb, 0x0000bbcb, 0x0000bfcb, 0x0000c3cb, 0x0000c7cb, + 0x0000cbcb, 0x0000cfcb, 0x0000d3cb, 0x0000d7cb, 0x0000dbcb, + 0x0000dfcb, 0x0000e3cb, 0x0000e7cb, 0x0000ebcb, 0x0000efcb, + 0x0000f3cb, 0x0000f7cb, 0x0000fbcb, 0x0000ffcb, 0x0000002c, + 0x0000042c, 0x0000082c, 0x00000c2c, 0x0000102c, 0x0000142c, + 0x0000182c, 0x00001c2c, 0x0000202c, 0x0000242c, 0x0000282c, + 0x00002c2c, 0x0000302c, 0x0000342c, 0x0000382c, 0x00003c2c, + 0x0000402c, 0x0000442c, 0x0000482c, 0x00004c2c, 0x0000502c, + 0x0000542c, 0x0000582c, 0x00005c2c, 0x0000602c, 0x0000642c, + 0x0000682c, 0x00006c2c, 0x0000702c, 0x0000742c, 0x0000782c, + 0x00007c2c, 0x0000802c, 0x0000842c, 0x0000882c, 0x00008c2c, + 0x0000902c, 0x0000942c, 0x0000982c, 0x00009c2c, 0x0000a02c, + 0x0000a42c, 0x0000a82c, 0x0000ac2c, 0x0000b02c, 0x0000b42c, + 0x0000b82c, 0x0000bc2c, 0x0000c02c, 0x0000c42c, 0x0000c82c, + 0x0000cc2c, 0x0000d02c, 0x0000d42c, 0x0000d82c, 0x0000dc2c, + 0x0000e02c, 0x0000e42c, 0x0000e82c, 0x0000ec2c, 0x0000f02c, + 0x0000f42c, 0x0000f82c, 0x0000fc2c, 0x0001002c, 0x0001042c, + 0x0001082c, 0x00010c2c, 0x0001102c, 0x0001142c, 0x0001182c, + 0x00011c2c, 0x0001202c, 0x0001242c, 0x0001282c, 0x00012c2c, + 0x0001302c, 0x0001342c, 0x0001382c, 0x00013c2c, 0x0001402c, + 0x0001442c, 0x0001482c, 0x00014c2c, 0x0001502c, 0x0001542c, + 0x0001582c, 0x00015c2c, 0x0001602c, 0x0001642c, 0x0001682c, + 0x00016c2c, 0x0001702c, 0x0001742c, 0x0001782c, 0x00017c2c, + 0x0001802c, 0x0001842c, 0x0001882c, 0x00018c2c, 0x0001902c, + 0x0001942c, 0x0001982c, 0x00019c2c, 0x0001a02c, 0x0001a42c, + 0x0001a82c, 0x0001ac2c, 0x0001b02c, 0x0001b42c, 0x0001b82c, + 0x0001bc2c, 0x0001c02c, 0x0001c42c, 0x0001c82c, 0x0001cc2c, + 0x0001d02c, 0x0001d42c, 0x0001d82c, 0x0001dc2c, 0x0001e02c, + 0x0001e42c, 0x0001e82c, 0x0001ec2c, 0x0001f02c, 0x0001f42c, + 0x0001f82c, 0x0001fc2c, 0x0000022c, 0x0000062c, 0x00000a2c, + 0x00000e2c, 0x0000122c, 0x0000162c, 0x00001a2c, 0x00001e2c, + 0x0000222c, 0x0000262c, 0x00002a2c, 0x00002e2c, 0x0000322c, + 0x0000362c, 0x00003a2c, 0x00003e2c, 0x0000422c, 0x0000462c, + 0x00004a2c, 0x00004e2c, 0x0000522c, 0x0000562c, 0x00005a2c, + 0x00005e2c, 0x0000622c, 0x0000662c, 0x00006a2c, 0x00006e2c, + 0x0000722c, 0x0000762c, 0x00007a2c, 0x00007e2c, 0x0000822c, + 0x0000862c, 0x00008a2c, 0x00008e2c, 0x0000922c, 0x0000962c, + 0x00009a2c, 0x00009e2c, 0x0000a22c, 0x0000a62c, 0x0000aa2c, + 0x0000ae2c, 0x0000b22c, 0x0000b62c, 0x0000ba2c, 0x0000be2c, + 0x0000c22c, 0x0000c62c, 0x0000ca2c, 0x0000ce2c, 0x0000d22c, + 0x0000d62c, 0x0000da2c, 0x0000de2c, 0x0000e22c, 0x0000e62c, + 0x0000ea2c, 0x0000ee2c, 0x0000f22c, 0x0000f62c, 0x0000fa2c, + 0x0000fe2c, 0x0001022c, 0x0001062c, 0x00010a2c, 0x00010e2c, + 0x0001122c, 0x0001162c, 0x00011a2c, 0x00011e2c, 0x0001222c, + 0x0001262c, 0x00012a2c, 0x00012e2c, 0x0001322c, 0x0001362c, + 0x00013a2c, 0x00013e2c, 0x0001422c, 0x0001462c, 0x00014a2c, + 0x00014e2c, 0x0001522c, 0x0001562c, 0x00015a2c, 0x00015e2c, + 0x0001622c, 0x0001662c, 0x00016a2c, 0x00016e2c, 0x0001722c, + 0x0001762c, 0x00017a2c, 0x00017e2c, 0x0001822c, 0x0001862c, + 0x00018a2c, 0x00018e2c, 0x0001922c, 0x0001962c, 0x00019a2c, + 0x00019e2c, 0x0001a22c, 0x0001a62c, 0x0001aa2c, 0x0001ae2c, + 0x0001b22c, 0x0001b62c, 0x0001ba2c, 0x0001be2c, 0x0001c22c, + 0x0001c62c, 0x0001ca2c, 0x0001ce2c, 0x0001d22c, 0x0001d62c, + 0x0001da2c, 0x0001de2c, 0x0001e22c, 0x0001e62c, 0x0001ea2c, + 0x0001ee2c, 0x0001f22c, 0x0001f62c, 0x0001fa2c, 0x0001fe2c, + 0x0000012d, 0x0000052d, 0x0000092d, 0x00000d2d, 0x0000112d, + 0x0000152d, 0x0000192d, 0x00001d2d, 0x0000212d, 0x0000252d, + 0x0000292d, 0x00002d2d, 0x0000312d, 0x0000352d, 0x0000392d, + 0x00003d2d, 0x0000412d, 0x0000452d, 0x0000492d, 0x00004d2d, + 0x0000512d, 0x0000552d, 0x0000592d, 0x00005d2d, 0x0000612d, + 0x0000652d, 0x0000692d, 0x00006d2d, 0x0000712d, 0x0000752d, + 0x0000792d, 0x00007d2d, 0x0000812d, 0x0000852d, 0x0000892d, + 0x00008d2d, 0x0000912d, 0x0000952d, 0x0000992d, 0x00009d2d, + 0x0000a12d, 0x0000a52d, 0x0000a92d, 0x0000ad2d, 0x0000b12d, + 0x0000b52d, 0x0000b92d, 0x0000bd2d, 0x0000c12d, 0x0000c52d, + 0x0000c92d, 0x0000cd2d, 0x0000d12d, 0x0000d52d, 0x0000d92d, + 0x0000dd2d, 0x0000e12d, 0x0000e52d, 0x0000e92d, 0x0000ed2d, + 0x0000f12d, 0x0000f52d, 0x0000f92d, 0x0000fd2d, 0x0001012d, + 0x0001052d, 0x0001092d, 0x00010d2d, 0x0001112d, 0x0001152d, + 0x0001192d, 0x00011d2d, 0x0001212d, 0x0001252d, 0x0001292d, + 0x00012d2d, 0x0001312d, 0x0001352d, 0x0001392d, 0x00013d2d, + 0x0001412d, 0x0001452d, 0x0001492d, 0x00014d2d, 0x0001512d, + 0x0001552d, 0x0001592d, 0x00015d2d, 0x0001612d, 0x0001652d, + 0x0001692d, 0x00016d2d, 0x0001712d, 0x0001752d, 0x0001792d, + 0x00017d2d, 0x0001812d, 0x0001852d, 0x0001892d, 0x00018d2d, + 0x0001912d, 0x0001952d, 0x0001992d, 0x00019d2d, 0x0001a12d, + 0x0001a52d, 0x0001a92d, 0x0001ad2d, 0x0001b12d, 0x0001b52d, + 0x0001b92d, 0x0001bd2d, 0x0001c12d, 0x0001c52d, 0x0001c92d, + 0x0001cd2d, 0x0001d12d, 0x0001d52d, 0x0001d92d, 0x0001dd2d, + 0x0001e12d, 0x0001e52d, 0x0001e92d, 0x0001ed2d, 0x0001f12d, + 0x0001f52d, 0x0001f92d, 0x0001fd2d, 0x0002012d, 0x0002052d, + 0x0002092d, 0x00020d2d, 0x0002112d, 0x0002152d, 0x0002192d, + 0x00021d2d, 0x0002212d, 0x0002252d, 0x0002292d, 0x00022d2d, + 0x0002312d, 0x0002352d, 0x0002392d, 0x00023d2d, 0x0002412d, + 0x0002452d, 0x0002492d, 0x00024d2d, 0x0002512d, 0x0002552d, + 0x0002592d, 0x00025d2d, 0x0002612d, 0x0002652d, 0x0002692d, + 0x00026d2d, 0x0002712d, 0x0002752d, 0x0002792d, 0x00027d2d, + 0x0002812d, 0x0002852d, 0x0002892d, 0x00028d2d, 0x0002912d, + 0x0002952d, 0x0002992d, 0x00029d2d, 0x0002a12d, 0x0002a52d, + 0x0002a92d, 0x0002ad2d, 0x0002b12d, 0x0002b52d, 0x0002b92d, + 0x0002bd2d, 0x0002c12d, 0x0002c52d, 0x0002c92d, 0x0002cd2d, + 0x0002d12d, 0x0002d52d, 0x0002d92d, 0x0002dd2d, 0x0002e12d, + 0x0002e52d, 0x0002e92d, 0x0002ed2d, 0x0002f12d, 0x0002f52d, + 0x0002f92d, 0x0002fd2d, 0x0003012d, 0x0003052d, 0x0003092d, + 0x00030d2d, 0x0003112d, 0x0003152d, 0x0003192d, 0x00031d2d, + 0x0003212d, 0x0003252d, 0x0003292d, 0x00032d2d, 0x0003312d, + 0x0003352d, 0x0003392d, 0x00033d2d, 0x0003412d, 0x0003452d, + 0x0003492d, 0x00034d2d, 0x0003512d, 0x0003552d, 0x0003592d, + 0x00035d2d, 0x0003612d, 0x0003652d, 0x0003692d, 0x00036d2d, + 0x0003712d, 0x0003752d, 0x0003792d, 0x00037d2d, 0x0003812d, + 0x0003852d, 0x0003892d, 0x00038d2d, 0x0003912d, 0x0003952d, + 0x0003992d, 0x00039d2d, 0x0003a12d, 0x0003a52d, 0x0003a92d, + 0x0003ad2d, 0x0003b12d, 0x0003b52d, 0x0003b92d, 0x0003bd2d, + 0x0003c12d, 0x0003c52d, 0x0003c92d, 0x0003cd2d, 0x0003d12d, + 0x0003d52d, 0x0003d92d, 0x0003dd2d, 0x0003e12d, 0x0003e52d, + 0x0003e92d, 0x0003ed2d, 0x0003f12d, 0x0003f52d, 0x0003f92d, + 0x0003fd2d, 0x0000032d, 0x0000072d, 0x00000b2d, 0x00000f2d, + 0x0000132d, 0x0000172d, 0x00001b2d, 0x00001f2d, 0x0000232d, + 0x0000272d, 0x00002b2d, 0x00002f2d, 0x0000332d, 0x0000372d, + 0x00003b2d, 0x00003f2d, 0x0000432d, 0x0000472d, 0x00004b2d, + 0x00004f2d, 0x0000532d, 0x0000572d, 0x00005b2d, 0x00005f2d, + 0x0000632d, 0x0000672d, 0x00006b2d, 0x00006f2d, 0x0000732d, + 0x0000772d, 0x00007b2d, 0x00007f2d, 0x0000832d, 0x0000872d, + 0x00008b2d, 0x00008f2d, 0x0000932d, 0x0000972d, 0x00009b2d, + 0x00009f2d, 0x0000a32d, 0x0000a72d, 0x0000ab2d, 0x0000af2d, + 0x0000b32d, 0x0000b72d, 0x0000bb2d, 0x0000bf2d, 0x0000c32d, + 0x0000c72d, 0x0000cb2d, 0x0000cf2d, 0x0000d32d, 0x0000d72d, + 0x0000db2d, 0x0000df2d, 0x0000e32d, 0x0000e72d, 0x0000eb2d, + 0x0000ef2d, 0x0000f32d, 0x0000f72d, 0x0000fb2d, 0x0000ff2d, + 0x0001032d, 0x0001072d, 0x00010b2d, 0x00010f2d, 0x0001132d, + 0x0001172d, 0x00011b2d, 0x00011f2d, 0x0001232d, 0x0001272d, + 0x00012b2d, 0x00012f2d, 0x0001332d, 0x0001372d, 0x00013b2d, + 0x00013f2d, 0x0001432d, 0x0001472d, 0x00014b2d, 0x00014f2d, + 0x0001532d, 0x0001572d, 0x00015b2d, 0x00015f2d, 0x0001632d, + 0x0001672d, 0x00016b2d, 0x00016f2d, 0x0001732d, 0x0001772d, + 0x00017b2d, 0x00017f2d, 0x0001832d, 0x0001872d, 0x00018b2d, + 0x00018f2d, 0x0001932d, 0x0001972d, 0x00019b2d, 0x00019f2d, + 0x0001a32d, 0x0001a72d, 0x0001ab2d, 0x0001af2d, 0x0001b32d, + 0x0001b72d, 0x0001bb2d, 0x0001bf2d, 0x0001c32d, 0x0001c72d, + 0x0001cb2d, 0x0001cf2d, 0x0001d32d, 0x0001d72d, 0x0001db2d, + 0x0001df2d, 0x0001e32d, 0x0001e72d, 0x0001eb2d, 0x0001ef2d, + 0x0001f32d, 0x0001f72d, 0x0001fb2d, 0x0001ff2d, 0x0002032d, + 0x0002072d, 0x00020b2d, 0x00020f2d, 0x0002132d, 0x0002172d, + 0x00021b2d, 0x00021f2d, 0x0002232d, 0x0002272d, 0x00022b2d, + 0x00022f2d, 0x0002332d, 0x0002372d, 0x00023b2d, 0x00023f2d, + 0x0002432d, 0x0002472d, 0x00024b2d, 0x00024f2d, 0x0002532d, + 0x0002572d, 0x00025b2d, 0x00025f2d, 0x0002632d, 0x0002672d, + 0x00026b2d, 0x00026f2d, 0x0002732d, 0x0002772d, 0x00027b2d, + 0x00027f2d, 0x0002832d, 0x0002872d, 0x00028b2d, 0x00028f2d, + 0x0002932d, 0x0002972d, 0x00029b2d, 0x00029f2d, 0x0002a32d, + 0x0002a72d, 0x0002ab2d, 0x0002af2d, 0x0002b32d, 0x0002b72d, + 0x0002bb2d, 0x0002bf2d, 0x0002c32d, 0x0002c72d, 0x0002cb2d, + 0x0002cf2d, 0x0002d32d, 0x0002d72d, 0x0002db2d, 0x0002df2d, + 0x0002e32d, 0x0002e72d, 0x0002eb2d, 0x0002ef2d, 0x0002f32d, + 0x0002f72d, 0x0002fb2d, 0x0002ff2d, 0x0003032d, 0x0003072d, + 0x00030b2d, 0x00030f2d, 0x0003132d, 0x0003172d, 0x00031b2d, + 0x00031f2d, 0x0003232d, 0x0003272d, 0x00032b2d, 0x00032f2d, + 0x0003332d, 0x0003372d, 0x00033b2d, 0x00033f2d, 0x0003432d, + 0x0003472d, 0x00034b2d, 0x00034f2d, 0x0003532d, 0x0003572d, + 0x00035b2d, 0x00035f2d, 0x0003632d, 0x0003672d, 0x00036b2d, + 0x00036f2d, 0x0003732d, 0x0003772d, 0x00037b2d, 0x00037f2d, + 0x0003832d, 0x0003872d, 0x00038b2d, 0x00038f2d, 0x0003932d, + 0x0003972d, 0x00039b2d, 0x00039f2d, 0x0003a32d, 0x0003a72d, + 0x0003ab2d, 0x0003af2d, 0x0003b32d, 0x0003b72d, 0x0003bb2d, + 0x0003bf2d, 0x0003c32d, 0x0003c72d, 0x0003cb2d, 0x0003cf2d, + 0x0003d32d, 0x0003d72d, 0x0003db2d, 0x0003df2d, 0x0003e32d, + 0x0003e72d, 0x0003eb2d, 0x0003ef2d, 0x0003f32d, 0x0003f72d, + 0x0003fb2d, 0x0003ff2d, 0x000000ae, 0x000004ae, 0x000008ae, + 0x00000cae, 0x000010ae, 0x000014ae, 0x000018ae, 0x00001cae, + 0x000020ae, 0x000024ae, 0x000028ae, 0x00002cae, 0x000030ae, + 0x000034ae, 0x000038ae, 0x00003cae, 0x000040ae, 0x000044ae, + 0x000048ae, 0x00004cae, 0x000050ae, 0x000054ae, 0x000058ae, + 0x00005cae, 0x000060ae, 0x000064ae, 0x000068ae, 0x00006cae, + 0x000070ae, 0x000074ae, 0x000078ae, 0x00007cae, 0x000080ae, + 0x000084ae, 0x000088ae, 0x00008cae, 0x000090ae, 0x000094ae, + 0x000098ae, 0x00009cae, 0x0000a0ae, 0x0000a4ae, 0x0000a8ae, + 0x0000acae, 0x0000b0ae, 0x0000b4ae, 0x0000b8ae, 0x0000bcae, + 0x0000c0ae, 0x0000c4ae, 0x0000c8ae, 0x0000ccae, 0x0000d0ae, + 0x0000d4ae, 0x0000d8ae, 0x0000dcae, 0x0000e0ae, 0x0000e4ae, + 0x0000e8ae, 0x0000ecae, 0x0000f0ae, 0x0000f4ae, 0x0000f8ae, + 0x0000fcae, 0x000100ae, 0x000104ae, 0x000108ae, 0x00010cae, + 0x000110ae, 0x000114ae, 0x000118ae, 0x00011cae, 0x000120ae, + 0x000124ae, 0x000128ae, 0x00012cae, 0x000130ae, 0x000134ae, + 0x000138ae, 0x00013cae, 0x000140ae, 0x000144ae, 0x000148ae, + 0x00014cae, 0x000150ae, 0x000154ae, 0x000158ae, 0x00015cae, + 0x000160ae, 0x000164ae, 0x000168ae, 0x00016cae, 0x000170ae, + 0x000174ae, 0x000178ae, 0x00017cae, 0x000180ae, 0x000184ae, + 0x000188ae, 0x00018cae, 0x000190ae, 0x000194ae, 0x000198ae, + 0x00019cae, 0x0001a0ae, 0x0001a4ae, 0x0001a8ae, 0x0001acae, + 0x0001b0ae, 0x0001b4ae, 0x0001b8ae, 0x0001bcae, 0x0001c0ae, + 0x0001c4ae, 0x0001c8ae, 0x0001ccae, 0x0001d0ae, 0x0001d4ae, + 0x0001d8ae, 0x0001dcae, 0x0001e0ae, 0x0001e4ae, 0x0001e8ae, + 0x0001ecae, 0x0001f0ae, 0x0001f4ae, 0x0001f8ae, 0x0001fcae, + 0x000200ae, 0x000204ae, 0x000208ae, 0x00020cae, 0x000210ae, + 0x000214ae, 0x000218ae, 0x00021cae, 0x000220ae, 0x000224ae, + 0x000228ae, 0x00022cae, 0x000230ae, 0x000234ae, 0x000238ae, + 0x00023cae, 0x000240ae, 0x000244ae, 0x000248ae, 0x00024cae, + 0x000250ae, 0x000254ae, 0x000258ae, 0x00025cae, 0x000260ae, + 0x000264ae, 0x000268ae, 0x00026cae, 0x000270ae, 0x000274ae, + 0x000278ae, 0x00027cae, 0x000280ae, 0x000284ae, 0x000288ae, + 0x00028cae, 0x000290ae, 0x000294ae, 0x000298ae, 0x00029cae, + 0x0002a0ae, 0x0002a4ae, 0x0002a8ae, 0x0002acae, 0x0002b0ae, + 0x0002b4ae, 0x0002b8ae, 0x0002bcae, 0x0002c0ae, 0x0002c4ae, + 0x0002c8ae, 0x0002ccae, 0x0002d0ae, 0x0002d4ae, 0x0002d8ae, + 0x0002dcae, 0x0002e0ae, 0x0002e4ae, 0x0002e8ae, 0x0002ecae, + 0x0002f0ae, 0x0002f4ae, 0x0002f8ae, 0x0002fcae, 0x000300ae, + 0x000304ae, 0x000308ae, 0x00030cae, 0x000310ae, 0x000314ae, + 0x000318ae, 0x00031cae, 0x000320ae, 0x000324ae, 0x000328ae, + 0x00032cae, 0x000330ae, 0x000334ae, 0x000338ae, 0x00033cae, + 0x000340ae, 0x000344ae, 0x000348ae, 0x00034cae, 0x000350ae, + 0x000354ae, 0x000358ae, 0x00035cae, 0x000360ae, 0x000364ae, + 0x000368ae, 0x00036cae, 0x000370ae, 0x000374ae, 0x000378ae, + 0x00037cae, 0x000380ae, 0x000384ae, 0x000388ae, 0x00038cae, + 0x000390ae, 0x000394ae, 0x000398ae, 0x00039cae, 0x0003a0ae, + 0x0003a4ae, 0x0003a8ae, 0x0003acae, 0x0003b0ae, 0x0003b4ae, + 0x0003b8ae, 0x0003bcae, 0x0003c0ae, 0x0003c4ae, 0x0003c8ae, + 0x0003ccae, 0x0003d0ae, 0x0003d4ae, 0x0003d8ae, 0x0003dcae, + 0x0003e0ae, 0x0003e4ae, 0x0003e8ae, 0x0003ecae, 0x0003f0ae, + 0x0003f4ae, 0x0003f8ae, 0x0003fcae, 0x000400ae, 0x000404ae, + 0x000408ae, 0x00040cae, 0x000410ae, 0x000414ae, 0x000418ae, + 0x00041cae, 0x000420ae, 0x000424ae, 0x000428ae, 0x00042cae, + 0x000430ae, 0x000434ae, 0x000438ae, 0x00043cae, 0x000440ae, + 0x000444ae, 0x000448ae, 0x00044cae, 0x000450ae, 0x000454ae, + 0x000458ae, 0x00045cae, 0x000460ae, 0x000464ae, 0x000468ae, + 0x00046cae, 0x000470ae, 0x000474ae, 0x000478ae, 0x00047cae, + 0x000480ae, 0x000484ae, 0x000488ae, 0x00048cae, 0x000490ae, + 0x000494ae, 0x000498ae, 0x00049cae, 0x0004a0ae, 0x0004a4ae, + 0x0004a8ae, 0x0004acae, 0x0004b0ae, 0x0004b4ae, 0x0004b8ae, + 0x0004bcae, 0x0004c0ae, 0x0004c4ae, 0x0004c8ae, 0x0004ccae, + 0x0004d0ae, 0x0004d4ae, 0x0004d8ae, 0x0004dcae, 0x0004e0ae, + 0x0004e4ae, 0x0004e8ae, 0x0004ecae, 0x0004f0ae, 0x0004f4ae, + 0x0004f8ae, 0x0004fcae, 0x000500ae, 0x000504ae, 0x000508ae, + 0x00050cae, 0x000510ae, 0x000514ae, 0x000518ae, 0x00051cae, + 0x000520ae, 0x000524ae, 0x000528ae, 0x00052cae, 0x000530ae, + 0x000534ae, 0x000538ae, 0x00053cae, 0x000540ae, 0x000544ae, + 0x000548ae, 0x00054cae, 0x000550ae, 0x000554ae, 0x000558ae, + 0x00055cae, 0x000560ae, 0x000564ae, 0x000568ae, 0x00056cae, + 0x000570ae, 0x000574ae, 0x000578ae, 0x00057cae, 0x000580ae, + 0x000584ae, 0x000588ae, 0x00058cae, 0x000590ae, 0x000594ae, + 0x000598ae, 0x00059cae, 0x0005a0ae, 0x0005a4ae, 0x0005a8ae, + 0x0005acae, 0x0005b0ae, 0x0005b4ae, 0x0005b8ae, 0x0005bcae, + 0x0005c0ae, 0x0005c4ae, 0x0005c8ae, 0x0005ccae, 0x0005d0ae, + 0x0005d4ae, 0x0005d8ae, 0x0005dcae, 0x0005e0ae, 0x0005e4ae, + 0x0005e8ae, 0x0005ecae, 0x0005f0ae, 0x0005f4ae, 0x0005f8ae, + 0x0005fcae, 0x000600ae, 0x000604ae, 0x000608ae, 0x00060cae, + 0x000610ae, 0x000614ae, 0x000618ae, 0x00061cae, 0x000620ae, + 0x000624ae, 0x000628ae, 0x00062cae, 0x000630ae, 0x000634ae, + 0x000638ae, 0x00063cae, 0x000640ae, 0x000644ae, 0x000648ae, + 0x00064cae, 0x000650ae, 0x000654ae, 0x000658ae, 0x00065cae, + 0x000660ae, 0x000664ae, 0x000668ae, 0x00066cae, 0x000670ae, + 0x000674ae, 0x000678ae, 0x00067cae, 0x000680ae, 0x000684ae, + 0x000688ae, 0x00068cae, 0x000690ae, 0x000694ae, 0x000698ae, + 0x00069cae, 0x0006a0ae, 0x0006a4ae, 0x0006a8ae, 0x0006acae, + 0x0006b0ae, 0x0006b4ae, 0x0006b8ae, 0x0006bcae, 0x0006c0ae, + 0x0006c4ae, 0x0006c8ae, 0x0006ccae, 0x0006d0ae, 0x0006d4ae, + 0x0006d8ae, 0x0006dcae, 0x0006e0ae, 0x0006e4ae, 0x0006e8ae, + 0x0006ecae, 0x0006f0ae, 0x0006f4ae, 0x0006f8ae, 0x0006fcae, + 0x000700ae, 0x000704ae, 0x000708ae, 0x00070cae, 0x000710ae, + 0x000714ae, 0x000718ae, 0x00071cae, 0x000720ae, 0x000724ae, + 0x000728ae, 0x00072cae, 0x000730ae, 0x000734ae, 0x000738ae, + 0x00073cae, 0x000740ae, 0x000744ae, 0x000748ae, 0x00074cae, + 0x000750ae, 0x000754ae, 0x000758ae, 0x00075cae, 0x000760ae, + 0x000764ae, 0x000768ae, 0x00076cae, 0x000770ae, 0x000774ae, + 0x000778ae, 0x00077cae, 0x000780ae, 0x000784ae, 0x000788ae, + 0x00078cae, 0x000790ae, 0x000794ae, 0x000798ae, 0x00079cae, + 0x0007a0ae, 0x0007a4ae, 0x0007a8ae, 0x0007acae, 0x0007b0ae, + 0x0007b4ae, 0x0007b8ae, 0x0007bcae, 0x0007c0ae, 0x0007c4ae, + 0x0007c8ae, 0x0007ccae, 0x0007d0ae, 0x0007d4ae, 0x0007d8ae, + 0x0007dcae, 0x0007e0ae, 0x0007e4ae, 0x0007e8ae, 0x0007ecae, + 0x0007f0ae, 0x0007f4ae, 0x0007f8ae, 0x0007fcae, 0x000002ae, + 0x000006ae, 0x00000aae, 0x00000eae, 0x000012ae, 0x000016ae, + 0x00001aae, 0x00001eae, 0x000022ae, 0x000026ae, 0x00002aae, + 0x00002eae, 0x000032ae, 0x000036ae, 0x00003aae, 0x00003eae, + 0x000042ae, 0x000046ae, 0x00004aae, 0x00004eae, 0x000052ae, + 0x000056ae, 0x00005aae, 0x00005eae, 0x000062ae, 0x000066ae, + 0x00006aae, 0x00006eae, 0x000072ae, 0x000076ae, 0x00007aae, + 0x00007eae, 0x000082ae, 0x000086ae, 0x00008aae, 0x00008eae, + 0x000092ae, 0x000096ae, 0x00009aae, 0x00009eae, 0x0000a2ae, + 0x0000a6ae, 0x0000aaae, 0x0000aeae, 0x0000b2ae, 0x0000b6ae, + 0x0000baae, 0x0000beae, 0x0000c2ae, 0x0000c6ae, 0x0000caae, + 0x0000ceae, 0x0000d2ae, 0x0000d6ae, 0x0000daae, 0x0000deae, + 0x0000e2ae, 0x0000e6ae, 0x0000eaae, 0x0000eeae, 0x0000f2ae, + 0x0000f6ae, 0x0000faae, 0x0000feae, 0x000102ae, 0x000106ae, + 0x00010aae, 0x00010eae, 0x000112ae, 0x000116ae, 0x00011aae, + 0x00011eae, 0x000122ae, 0x000126ae, 0x00012aae, 0x00012eae, + 0x000132ae, 0x000136ae, 0x00013aae, 0x00013eae, 0x000142ae, + 0x000146ae, 0x00014aae, 0x00014eae, 0x000152ae, 0x000156ae, + 0x00015aae, 0x00015eae, 0x000162ae, 0x000166ae, 0x00016aae, + 0x00016eae, 0x000172ae, 0x000176ae, 0x00017aae, 0x00017eae, + 0x000182ae, 0x000186ae, 0x00018aae, 0x00018eae, 0x000192ae, + 0x000196ae, 0x00019aae, 0x00019eae, 0x0001a2ae, 0x0001a6ae, + 0x0001aaae, 0x0001aeae, 0x0001b2ae, 0x0001b6ae, 0x0001baae, + 0x0001beae, 0x0001c2ae, 0x0001c6ae, 0x0001caae, 0x0001ceae, + 0x0001d2ae, 0x0001d6ae, 0x0001daae, 0x0001deae, 0x0001e2ae, + 0x0001e6ae, 0x0001eaae, 0x0001eeae, 0x0001f2ae, 0x0001f6ae, + 0x0001faae, 0x0001feae, 0x000202ae, 0x000206ae, 0x00020aae, + 0x00020eae, 0x000212ae, 0x000216ae, 0x00021aae, 0x00021eae, + 0x000222ae, 0x000226ae, 0x00022aae, 0x00022eae, 0x000232ae, + 0x000236ae, 0x00023aae, 0x00023eae, 0x000242ae, 0x000246ae, + 0x00024aae, 0x00024eae, 0x000252ae, 0x000256ae, 0x00025aae, + 0x00025eae, 0x000262ae, 0x000266ae, 0x00026aae, 0x00026eae, + 0x000272ae, 0x000276ae, 0x00027aae, 0x00027eae, 0x000282ae, + 0x000286ae, 0x00028aae, 0x00028eae, 0x000292ae, 0x000296ae, + 0x00029aae, 0x00029eae, 0x0002a2ae, 0x0002a6ae, 0x0002aaae, + 0x0002aeae, 0x0002b2ae, 0x0002b6ae, 0x0002baae, 0x0002beae, + 0x0002c2ae, 0x0002c6ae, 0x0002caae, 0x0002ceae, 0x0002d2ae, + 0x0002d6ae, 0x0002daae, 0x0002deae, 0x0002e2ae, 0x0002e6ae, + 0x0002eaae, 0x0002eeae, 0x0002f2ae, 0x0002f6ae, 0x0002faae, + 0x0002feae, 0x000302ae, 0x000306ae, 0x00030aae, 0x00030eae, + 0x000312ae, 0x000316ae, 0x00031aae, 0x00031eae, 0x000322ae, + 0x000326ae, 0x00032aae, 0x00032eae, 0x000332ae, 0x000336ae, + 0x00033aae, 0x00033eae, 0x000342ae, 0x000346ae, 0x00034aae, + 0x00034eae, 0x000352ae, 0x000356ae, 0x00035aae, 0x00035eae, + 0x000362ae, 0x000366ae, 0x00036aae, 0x00036eae, 0x000372ae, + 0x000376ae, 0x00037aae, 0x00037eae, 0x000382ae, 0x000386ae, + 0x00038aae, 0x00038eae, 0x000392ae, 0x000396ae, 0x00039aae, + 0x00039eae, 0x0003a2ae, 0x0003a6ae, 0x0003aaae, 0x0003aeae, + 0x0003b2ae, 0x0003b6ae, 0x0003baae, 0x0003beae, 0x0003c2ae, + 0x0003c6ae, 0x0003caae, 0x0003ceae, 0x0003d2ae, 0x0003d6ae, + 0x0003daae, 0x0003deae, 0x0003e2ae, 0x0003e6ae, 0x0003eaae, + 0x0003eeae, 0x0003f2ae, 0x0003f6ae, 0x0003faae, 0x0003feae, + 0x000402ae, 0x000406ae, 0x00040aae, 0x00040eae, 0x000412ae, + 0x000416ae, 0x00041aae, 0x00041eae, 0x000422ae, 0x000426ae, + 0x00042aae, 0x00042eae, 0x000432ae, 0x000436ae, 0x00043aae, + 0x00043eae, 0x000442ae, 0x000446ae, 0x00044aae, 0x00044eae, + 0x000452ae, 0x000456ae, 0x00045aae, 0x00045eae, 0x000462ae, + 0x000466ae, 0x00046aae, 0x00046eae, 0x000472ae, 0x000476ae, + 0x00047aae, 0x00047eae, 0x000482ae, 0x000486ae, 0x00048aae, + 0x00048eae, 0x000492ae, 0x000496ae, 0x00049aae, 0x00049eae, + 0x0004a2ae, 0x0004a6ae, 0x0004aaae, 0x0004aeae, 0x0004b2ae, + 0x0004b6ae, 0x0004baae, 0x0004beae, 0x0004c2ae, 0x0004c6ae, + 0x0004caae, 0x0004ceae, 0x0004d2ae, 0x0004d6ae, 0x0004daae, + 0x0004deae, 0x0004e2ae, 0x0004e6ae, 0x0004eaae, 0x0004eeae, + 0x0004f2ae, 0x0004f6ae, 0x0004faae, 0x0004feae, 0x000502ae, + 0x000506ae, 0x00050aae, 0x00050eae, 0x000512ae, 0x000516ae, + 0x00051aae, 0x00051eae, 0x000522ae, 0x000526ae, 0x00052aae, + 0x00052eae, 0x000532ae, 0x000536ae, 0x00053aae, 0x00053eae, + 0x000542ae, 0x000546ae, 0x00054aae, 0x00054eae, 0x000552ae, + 0x000556ae, 0x00055aae, 0x00055eae, 0x000562ae, 0x000566ae, + 0x00056aae, 0x00056eae, 0x000572ae, 0x000576ae, 0x00057aae, + 0x00057eae, 0x000582ae, 0x000586ae, 0x00058aae, 0x00058eae, + 0x000592ae, 0x000596ae, 0x00059aae, 0x00059eae, 0x0005a2ae, + 0x0005a6ae, 0x0005aaae, 0x0005aeae, 0x0005b2ae, 0x0005b6ae, + 0x0005baae, 0x0005beae, 0x0005c2ae, 0x0005c6ae, 0x0005caae, + 0x0005ceae, 0x0005d2ae, 0x0005d6ae, 0x0005daae, 0x0005deae, + 0x0005e2ae, 0x0005e6ae, 0x0005eaae, 0x0005eeae, 0x0005f2ae, + 0x0005f6ae, 0x0005faae, 0x0005feae, 0x000602ae, 0x000606ae, + 0x00060aae, 0x00060eae, 0x000612ae, 0x000616ae, 0x00061aae, + 0x00061eae, 0x000622ae, 0x000626ae, 0x00062aae, 0x00062eae, + 0x000632ae, 0x000636ae, 0x00063aae, 0x00063eae, 0x000642ae, + 0x000646ae, 0x00064aae, 0x00064eae, 0x000652ae, 0x000656ae, + 0x00065aae, 0x00065eae, 0x000662ae, 0x000666ae, 0x00066aae, + 0x00066eae, 0x000672ae, 0x000676ae, 0x00067aae, 0x00067eae, + 0x000682ae, 0x000686ae, 0x00068aae, 0x00068eae, 0x000692ae, + 0x000696ae, 0x00069aae, 0x00069eae, 0x0006a2ae, 0x0006a6ae, + 0x0006aaae, 0x0006aeae, 0x0006b2ae, 0x0006b6ae, 0x0006baae, + 0x0006beae, 0x0006c2ae, 0x0006c6ae, 0x0006caae, 0x0006ceae, + 0x0006d2ae, 0x0006d6ae, 0x0006daae, 0x0006deae, 0x0006e2ae, + 0x0006e6ae, 0x0006eaae, 0x0006eeae, 0x0006f2ae, 0x0006f6ae, + 0x0006faae, 0x0006feae, 0x000702ae, 0x000706ae, 0x00070aae, + 0x00070eae, 0x000712ae, 0x000716ae, 0x00071aae, 0x00071eae, + 0x000722ae, 0x000726ae, 0x00072aae, 0x00072eae, 0x000732ae, + 0x000736ae, 0x00073aae, 0x00073eae, 0x000742ae, 0x000746ae, + 0x00074aae, 0x00074eae, 0x000752ae, 0x000756ae, 0x00075aae, + 0x00075eae, 0x000762ae, 0x000766ae, 0x00076aae, 0x00076eae, + 0x000772ae, 0x000776ae, 0x00077aae, 0x00077eae, 0x000782ae, + 0x000786ae, 0x00078aae, 0x00078eae, 0x000792ae, 0x000796ae, + 0x00079aae, 0x00079eae, 0x0007a2ae, 0x0007a6ae, 0x0007aaae, + 0x0007aeae, 0x0007b2ae, 0x0007b6ae, 0x0007baae, 0x0007beae, + 0x0007c2ae, 0x0007c6ae, 0x0007caae, 0x0007ceae, 0x0007d2ae, + 0x0007d6ae, 0x0007daae, 0x0007deae, 0x0007e2ae, 0x0007e6ae, + 0x0007eaae, 0x0007eeae, 0x0007f2ae, 0x0007f6ae, 0x0007faae, + 0x0007feae, 0x000001af, 0x000005af, 0x000009af, 0x00000daf, + 0x000011af, 0x000015af, 0x000019af, 0x00001daf, 0x000021af, + 0x000025af, 0x000029af, 0x00002daf, 0x000031af, 0x000035af, + 0x000039af, 0x00003daf, 0x000041af, 0x000045af, 0x000049af, + 0x00004daf, 0x000051af, 0x000055af, 0x000059af, 0x00005daf, + 0x000061af, 0x000065af, 0x000069af, 0x00006daf, 0x000071af, + 0x000075af, 0x000079af, 0x00007daf, 0x000081af, 0x000085af, + 0x000089af, 0x00008daf, 0x000091af, 0x000095af, 0x000099af, + 0x00009daf, 0x0000a1af, 0x0000a5af, 0x0000a9af, 0x0000adaf, + 0x0000b1af, 0x0000b5af, 0x0000b9af, 0x0000bdaf, 0x0000c1af, + 0x0000c5af, 0x0000c9af, 0x0000cdaf, 0x0000d1af, 0x0000d5af, + 0x0000d9af, 0x0000ddaf, 0x0000e1af, 0x0000e5af, 0x0000e9af, + 0x0000edaf, 0x0000f1af, 0x0000f5af, 0x0000f9af, 0x0000fdaf, + 0x000101af, 0x000105af, 0x000109af, 0x00010daf, 0x000111af, + 0x000115af, 0x000119af, 0x00011daf, 0x000121af, 0x000125af, + 0x000129af, 0x00012daf, 0x000131af, 0x000135af, 0x000139af, + 0x00013daf, 0x000141af, 0x000145af, 0x000149af, 0x00014daf, + 0x000151af, 0x000155af, 0x000159af, 0x00015daf, 0x000161af, + 0x000165af, 0x000169af, 0x00016daf, 0x000171af, 0x000175af, + 0x000179af, 0x00017daf, 0x000181af, 0x000185af, 0x000189af, + 0x00018daf, 0x000191af, 0x000195af, 0x000199af, 0x00019daf, + 0x0001a1af, 0x0001a5af, 0x0001a9af, 0x0001adaf, 0x0001b1af, + 0x0001b5af, 0x0001b9af, 0x0001bdaf, 0x0001c1af, 0x0001c5af, + 0x0001c9af, 0x0001cdaf, 0x0001d1af, 0x0001d5af, 0x0001d9af, + 0x0001ddaf, 0x0001e1af, 0x0001e5af, 0x0001e9af, 0x0001edaf, + 0x0001f1af, 0x0001f5af, 0x0001f9af, 0x0001fdaf, 0x000201af, + 0x000205af, 0x000209af, 0x00020daf, 0x000211af, 0x000215af, + 0x000219af, 0x00021daf, 0x000221af, 0x000225af, 0x000229af, + 0x00022daf, 0x000231af, 0x000235af, 0x000239af, 0x00023daf, + 0x000241af, 0x000245af, 0x000249af, 0x00024daf, 0x000251af, + 0x000255af, 0x000259af, 0x00025daf, 0x000261af, 0x000265af, + 0x000269af, 0x00026daf, 0x000271af, 0x000275af, 0x000279af, + 0x00027daf, 0x000281af, 0x000285af, 0x000289af, 0x00028daf, + 0x000291af, 0x000295af, 0x000299af, 0x00029daf, 0x0002a1af, + 0x0002a5af, 0x0002a9af, 0x0002adaf, 0x0002b1af, 0x0002b5af, + 0x0002b9af, 0x0002bdaf, 0x0002c1af, 0x0002c5af, 0x0002c9af, + 0x0002cdaf, 0x0002d1af, 0x0002d5af, 0x0002d9af, 0x0002ddaf, + 0x0002e1af, 0x0002e5af, 0x0002e9af, 0x0002edaf, 0x0002f1af, + 0x0002f5af, 0x0002f9af, 0x0002fdaf, 0x000301af, 0x000305af, + 0x000309af, 0x00030daf, 0x000311af, 0x000315af, 0x000319af, + 0x00031daf, 0x000321af, 0x000325af, 0x000329af, 0x00032daf, + 0x000331af, 0x000335af, 0x000339af, 0x00033daf, 0x000341af, + 0x000345af, 0x000349af, 0x00034daf, 0x000351af, 0x000355af, + 0x000359af, 0x00035daf, 0x000361af, 0x000365af, 0x000369af, + 0x00036daf, 0x000371af, 0x000375af, 0x000379af, 0x00037daf, + 0x000381af, 0x000385af, 0x000389af, 0x00038daf, 0x000391af, + 0x000395af, 0x000399af, 0x00039daf, 0x0003a1af, 0x0003a5af, + 0x0003a9af, 0x0003adaf, 0x0003b1af, 0x0003b5af, 0x0003b9af, + 0x0003bdaf, 0x0003c1af, 0x0003c5af, 0x0003c9af, 0x0003cdaf, + 0x0003d1af, 0x0003d5af, 0x0003d9af, 0x0003ddaf, 0x0003e1af, + 0x0003e5af, 0x0003e9af, 0x0003edaf, 0x0003f1af, 0x0003f5af, + 0x0003f9af, 0x0003fdaf, 0x000401af, 0x000405af, 0x000409af, + 0x00040daf, 0x000411af, 0x000415af, 0x000419af, 0x00041daf, + 0x000421af, 0x000425af, 0x000429af, 0x00042daf, 0x000431af, + 0x000435af, 0x000439af, 0x00043daf, 0x000441af, 0x000445af, + 0x000449af, 0x00044daf, 0x000451af, 0x000455af, 0x000459af, + 0x00045daf, 0x000461af, 0x000465af, 0x000469af, 0x00046daf, + 0x000471af, 0x000475af, 0x000479af, 0x00047daf, 0x000481af, + 0x000485af, 0x000489af, 0x00048daf, 0x000491af, 0x000495af, + 0x000499af, 0x00049daf, 0x0004a1af, 0x0004a5af, 0x0004a9af, + 0x0004adaf, 0x0004b1af, 0x0004b5af, 0x0004b9af, 0x0004bdaf, + 0x0004c1af, 0x0004c5af, 0x0004c9af, 0x0004cdaf, 0x0004d1af, + 0x0004d5af, 0x0004d9af, 0x0004ddaf, 0x0004e1af, 0x0004e5af, + 0x0004e9af, 0x0004edaf, 0x0004f1af, 0x0004f5af, 0x0004f9af, + 0x0004fdaf, 0x000501af, 0x000505af, 0x000509af, 0x00050daf, + 0x000511af, 0x000515af, 0x000519af, 0x00051daf, 0x000521af, + 0x000525af, 0x000529af, 0x00052daf, 0x000531af, 0x000535af, + 0x000539af, 0x00053daf, 0x000541af, 0x000545af, 0x000549af, + 0x00054daf, 0x000551af, 0x000555af, 0x000559af, 0x00055daf, + 0x000561af, 0x000565af, 0x000569af, 0x00056daf, 0x000571af, + 0x000575af, 0x000579af, 0x00057daf, 0x000581af, 0x000585af, + 0x000589af, 0x00058daf, 0x000591af, 0x000595af, 0x000599af, + 0x00059daf, 0x0005a1af, 0x0005a5af, 0x0005a9af, 0x0005adaf, + 0x0005b1af, 0x0005b5af, 0x0005b9af, 0x0005bdaf, 0x0005c1af, + 0x0005c5af, 0x0005c9af, 0x0005cdaf, 0x0005d1af, 0x0005d5af, + 0x0005d9af, 0x0005ddaf, 0x0005e1af, 0x0005e5af, 0x0005e9af, + 0x0005edaf, 0x0005f1af, 0x0005f5af, 0x0005f9af, 0x0005fdaf, + 0x000601af, 0x000605af, 0x000609af, 0x00060daf, 0x000611af, + 0x000615af, 0x000619af, 0x00061daf, 0x000621af, 0x000625af, + 0x000629af, 0x00062daf, 0x000631af, 0x000635af, 0x000639af, + 0x00063daf, 0x000641af, 0x000645af, 0x000649af, 0x00064daf, + 0x000651af, 0x000655af, 0x000659af, 0x00065daf, 0x000661af, + 0x000665af, 0x000669af, 0x00066daf, 0x000671af, 0x000675af, + 0x000679af, 0x00067daf, 0x000681af, 0x000685af, 0x000689af, + 0x00068daf, 0x000691af, 0x000695af, 0x000699af, 0x00069daf, + 0x0006a1af, 0x0006a5af, 0x0006a9af, 0x0006adaf, 0x0006b1af, + 0x0006b5af, 0x0006b9af, 0x0006bdaf, 0x0006c1af, 0x0006c5af, + 0x0006c9af, 0x0006cdaf, 0x0006d1af, 0x0006d5af, 0x0006d9af, + 0x0006ddaf, 0x0006e1af, 0x0006e5af, 0x0006e9af, 0x0006edaf, + 0x0006f1af, 0x0006f5af, 0x0006f9af, 0x0006fdaf, 0x000701af, + 0x000705af, 0x000709af, 0x00070daf, 0x000711af, 0x000715af, + 0x000719af, 0x00071daf, 0x000721af, 0x000725af, 0x000729af, + 0x00072daf, 0x000731af, 0x000735af, 0x000739af, 0x00073daf, + 0x000741af, 0x000745af, 0x000749af, 0x00074daf, 0x000751af, + 0x000755af, 0x000759af, 0x00075daf, 0x000761af, 0x000765af, + 0x000769af, 0x00076daf, 0x000771af, 0x000775af, 0x000779af, + 0x00077daf, 0x000781af, 0x000785af, 0x000789af, 0x00078daf, + 0x000791af, 0x000795af, 0x000799af, 0x00079daf, 0x0007a1af, + 0x0007a5af, 0x0007a9af, 0x0007adaf, 0x0007b1af, 0x0007b5af, + 0x0007b9af, 0x0007bdaf, 0x0007c1af, 0x0007c5af, 0x0007c9af, + 0x0007cdaf, 0x0007d1af, 0x0007d5af, 0x0007d9af, 0x0007ddaf, + 0x0007e1af, 0x0007e5af, 0x0007e9af, 0x0007edaf, 0x0007f1af, + 0x0007f5af, 0x0007f9af, 0x0007fdaf, 0x000801af, 0x000805af, + 0x000809af, 0x00080daf, 0x000811af, 0x000815af, 0x000819af, + 0x00081daf, 0x000821af, 0x000825af, 0x000829af, 0x00082daf, + 0x000831af, 0x000835af, 0x000839af, 0x00083daf, 0x000841af, + 0x000845af, 0x000849af, 0x00084daf, 0x000851af, 0x000855af, + 0x000859af, 0x00085daf, 0x000861af, 0x000865af, 0x000869af, + 0x00086daf, 0x000871af, 0x000875af, 0x000879af, 0x00087daf, + 0x000881af, 0x000885af, 0x000889af, 0x00088daf, 0x000891af, + 0x000895af, 0x000899af, 0x00089daf, 0x0008a1af, 0x0008a5af, + 0x0008a9af, 0x0008adaf, 0x0008b1af, 0x0008b5af, 0x0008b9af, + 0x0008bdaf, 0x0008c1af, 0x0008c5af, 0x0008c9af, 0x0008cdaf, + 0x0008d1af, 0x0008d5af, 0x0008d9af, 0x0008ddaf, 0x0008e1af, + 0x0008e5af, 0x0008e9af, 0x0008edaf, 0x0008f1af, 0x0008f5af, + 0x0008f9af, 0x0008fdaf, 0x000901af, 0x000905af, 0x000909af, + 0x00090daf, 0x000911af, 0x000915af, 0x000919af, 0x00091daf, + 0x000921af, 0x000925af, 0x000929af, 0x00092daf, 0x000931af, + 0x000935af, 0x000939af, 0x00093daf, 0x000941af, 0x000945af, + 0x000949af, 0x00094daf, 0x000951af, 0x000955af, 0x000959af, + 0x00095daf, 0x000961af, 0x000965af, 0x000969af, 0x00096daf, + 0x000971af, 0x000975af, 0x000979af, 0x00097daf, 0x000981af, + 0x000985af, 0x000989af, 0x00098daf, 0x000991af, 0x000995af, + 0x000999af, 0x00099daf, 0x0009a1af, 0x0009a5af, 0x0009a9af, + 0x0009adaf, 0x0009b1af, 0x0009b5af, 0x0009b9af, 0x0009bdaf, + 0x0009c1af, 0x0009c5af, 0x0009c9af, 0x0009cdaf, 0x0009d1af, + 0x0009d5af, 0x0009d9af, 0x0009ddaf, 0x0009e1af, 0x0009e5af, + 0x0009e9af, 0x0009edaf, 0x0009f1af, 0x0009f5af, 0x0009f9af, + 0x0009fdaf, 0x000a01af, 0x000a05af, 0x000a09af, 0x000a0daf, + 0x000a11af, 0x000a15af, 0x000a19af, 0x000a1daf, 0x000a21af, + 0x000a25af, 0x000a29af, 0x000a2daf, 0x000a31af, 0x000a35af, + 0x000a39af, 0x000a3daf, 0x000a41af, 0x000a45af, 0x000a49af, + 0x000a4daf, 0x000a51af, 0x000a55af, 0x000a59af, 0x000a5daf, + 0x000a61af, 0x000a65af, 0x000a69af, 0x000a6daf, 0x000a71af, + 0x000a75af, 0x000a79af, 0x000a7daf, 0x000a81af, 0x000a85af, + 0x000a89af, 0x000a8daf, 0x000a91af, 0x000a95af, 0x000a99af, + 0x000a9daf, 0x000aa1af, 0x000aa5af, 0x000aa9af, 0x000aadaf, + 0x000ab1af, 0x000ab5af, 0x000ab9af, 0x000abdaf, 0x000ac1af, + 0x000ac5af, 0x000ac9af, 0x000acdaf, 0x000ad1af, 0x000ad5af, + 0x000ad9af, 0x000addaf, 0x000ae1af, 0x000ae5af, 0x000ae9af, + 0x000aedaf, 0x000af1af, 0x000af5af, 0x000af9af, 0x000afdaf, + 0x000b01af, 0x000b05af, 0x000b09af, 0x000b0daf, 0x000b11af, + 0x000b15af, 0x000b19af, 0x000b1daf, 0x000b21af, 0x000b25af, + 0x000b29af, 0x000b2daf, 0x000b31af, 0x000b35af, 0x000b39af, + 0x000b3daf, 0x000b41af, 0x000b45af, 0x000b49af, 0x000b4daf, + 0x000b51af, 0x000b55af, 0x000b59af, 0x000b5daf, 0x000b61af, + 0x000b65af, 0x000b69af, 0x000b6daf, 0x000b71af, 0x000b75af, + 0x000b79af, 0x000b7daf, 0x000b81af, 0x000b85af, 0x000b89af, + 0x000b8daf, 0x000b91af, 0x000b95af, 0x000b99af, 0x000b9daf, + 0x000ba1af, 0x000ba5af, 0x000ba9af, 0x000badaf, 0x000bb1af, + 0x000bb5af, 0x000bb9af, 0x000bbdaf, 0x000bc1af, 0x000bc5af, + 0x000bc9af, 0x000bcdaf, 0x000bd1af, 0x000bd5af, 0x000bd9af, + 0x000bddaf, 0x000be1af, 0x000be5af, 0x000be9af, 0x000bedaf, + 0x000bf1af, 0x000bf5af, 0x000bf9af, 0x000bfdaf, 0x000c01af, + 0x000c05af, 0x000c09af, 0x000c0daf, 0x000c11af, 0x000c15af, + 0x000c19af, 0x000c1daf, 0x000c21af, 0x000c25af, 0x000c29af, + 0x000c2daf, 0x000c31af, 0x000c35af, 0x000c39af, 0x000c3daf, + 0x000c41af, 0x000c45af, 0x000c49af, 0x000c4daf, 0x000c51af, + 0x000c55af, 0x000c59af, 0x000c5daf, 0x000c61af, 0x000c65af, + 0x000c69af, 0x000c6daf, 0x000c71af, 0x000c75af, 0x000c79af, + 0x000c7daf, 0x000c81af, 0x000c85af, 0x000c89af, 0x000c8daf, + 0x000c91af, 0x000c95af, 0x000c99af, 0x000c9daf, 0x000ca1af, + 0x000ca5af, 0x000ca9af, 0x000cadaf, 0x000cb1af, 0x000cb5af, + 0x000cb9af, 0x000cbdaf, 0x000cc1af, 0x000cc5af, 0x000cc9af, + 0x000ccdaf, 0x000cd1af, 0x000cd5af, 0x000cd9af, 0x000cddaf, + 0x000ce1af, 0x000ce5af, 0x000ce9af, 0x000cedaf, 0x000cf1af, + 0x000cf5af, 0x000cf9af, 0x000cfdaf, 0x000d01af, 0x000d05af, + 0x000d09af, 0x000d0daf, 0x000d11af, 0x000d15af, 0x000d19af, + 0x000d1daf, 0x000d21af, 0x000d25af, 0x000d29af, 0x000d2daf, + 0x000d31af, 0x000d35af, 0x000d39af, 0x000d3daf, 0x000d41af, + 0x000d45af, 0x000d49af, 0x000d4daf, 0x000d51af, 0x000d55af, + 0x000d59af, 0x000d5daf, 0x000d61af, 0x000d65af, 0x000d69af, + 0x000d6daf, 0x000d71af, 0x000d75af, 0x000d79af, 0x000d7daf, + 0x000d81af, 0x000d85af, 0x000d89af, 0x000d8daf, 0x000d91af, + 0x000d95af, 0x000d99af, 0x000d9daf, 0x000da1af, 0x000da5af, + 0x000da9af, 0x000dadaf, 0x000db1af, 0x000db5af, 0x000db9af, + 0x000dbdaf, 0x000dc1af, 0x000dc5af, 0x000dc9af, 0x000dcdaf, + 0x000dd1af, 0x000dd5af, 0x000dd9af, 0x000dddaf, 0x000de1af, + 0x000de5af, 0x000de9af, 0x000dedaf, 0x000df1af, 0x000df5af, + 0x000df9af, 0x000dfdaf, 0x000e01af, 0x000e05af, 0x000e09af, + 0x000e0daf, 0x000e11af, 0x000e15af, 0x000e19af, 0x000e1daf, + 0x000e21af, 0x000e25af, 0x000e29af, 0x000e2daf, 0x000e31af, + 0x000e35af, 0x000e39af, 0x000e3daf, 0x000e41af, 0x000e45af, + 0x000e49af, 0x000e4daf, 0x000e51af, 0x000e55af, 0x000e59af, + 0x000e5daf, 0x000e61af, 0x000e65af, 0x000e69af, 0x000e6daf, + 0x000e71af, 0x000e75af, 0x000e79af, 0x000e7daf, 0x000e81af, + 0x000e85af, 0x000e89af, 0x000e8daf, 0x000e91af, 0x000e95af, + 0x000e99af, 0x000e9daf, 0x000ea1af, 0x000ea5af, 0x000ea9af, + 0x000eadaf, 0x000eb1af, 0x000eb5af, 0x000eb9af, 0x000ebdaf, + 0x000ec1af, 0x000ec5af, 0x000ec9af, 0x000ecdaf, 0x000ed1af, + 0x000ed5af, 0x000ed9af, 0x000eddaf, 0x000ee1af, 0x000ee5af, + 0x000ee9af, 0x000eedaf, 0x000ef1af, 0x000ef5af, 0x000ef9af, + 0x000efdaf, 0x000f01af, 0x000f05af, 0x000f09af, 0x000f0daf, + 0x000f11af, 0x000f15af, 0x000f19af, 0x000f1daf, 0x000f21af, + 0x000f25af, 0x000f29af, 0x000f2daf, 0x000f31af, 0x000f35af, + 0x000f39af, 0x000f3daf, 0x000f41af, 0x000f45af, 0x000f49af, + 0x000f4daf, 0x000f51af, 0x000f55af, 0x000f59af, 0x000f5daf, + 0x000f61af, 0x000f65af, 0x000f69af, 0x000f6daf, 0x000f71af, + 0x000f75af, 0x000f79af, 0x000f7daf, 0x000f81af, 0x000f85af, + 0x000f89af, 0x000f8daf, 0x000f91af, 0x000f95af, 0x000f99af, + 0x000f9daf, 0x000fa1af, 0x000fa5af, 0x000fa9af, 0x000fadaf, + 0x000fb1af, 0x000fb5af, 0x000fb9af, 0x000fbdaf, 0x000fc1af, + 0x000fc5af, 0x000fc9af, 0x000fcdaf, 0x000fd1af, 0x000fd5af, + 0x000fd9af, 0x000fddaf, 0x000fe1af, 0x000fe5af, 0x000fe9af, + 0x000fedaf, 0x000ff1af, 0x000ff5af, 0x000ff9af, 0x000ffdaf, + 0x000003af, 0x000007af, 0x00000baf, 0x00000faf, 0x000013af, + 0x000017af, 0x00001baf, 0x00001faf, 0x000023af, 0x000027af, + 0x00002baf, 0x00002faf, 0x000033af, 0x000037af, 0x00003baf, + 0x00003faf, 0x000043af, 0x000047af, 0x00004baf, 0x00004faf, + 0x000053af, 0x000057af, 0x00005baf, 0x00005faf, 0x000063af, + 0x000067af, 0x00006baf, 0x00006faf, 0x000073af, 0x000077af, + 0x00007baf, 0x00007faf, 0x000083af, 0x000087af, 0x00008baf, + 0x00008faf, 0x000093af, 0x000097af, 0x00009baf, 0x00009faf, + 0x0000a3af, 0x0000a7af, 0x0000abaf, 0x0000afaf, 0x0000b3af, + 0x0000b7af, 0x0000bbaf, 0x0000bfaf, 0x0000c3af, 0x0000c7af, + 0x0000cbaf, 0x0000cfaf, 0x0000d3af, 0x0000d7af, 0x0000dbaf, + 0x0000dfaf, 0x0000e3af, 0x0000e7af, 0x0000ebaf, 0x0000efaf, + 0x0000f3af, 0x0000f7af, 0x0000fbaf, 0x0000ffaf, 0x000103af, + 0x000107af, 0x00010baf, 0x00010faf, 0x000113af, 0x000117af, + 0x00011baf, 0x00011faf, 0x000123af, 0x000127af, 0x00012baf, + 0x00012faf, 0x000133af, 0x000137af, 0x00013baf, 0x00013faf, + 0x000143af, 0x000147af, 0x00014baf, 0x00014faf, 0x000153af, + 0x000157af, 0x00015baf, 0x00015faf, 0x000163af, 0x000167af, + 0x00016baf, 0x00016faf, 0x000173af, 0x000177af, 0x00017baf, + 0x00017faf, 0x000183af, 0x000187af, 0x00018baf, 0x00018faf, + 0x000193af, 0x000197af, 0x00019baf, 0x00019faf, 0x0001a3af, + 0x0001a7af, 0x0001abaf, 0x0001afaf, 0x0001b3af, 0x0001b7af, + 0x0001bbaf, 0x0001bfaf, 0x0001c3af, 0x0001c7af, 0x0001cbaf, + 0x0001cfaf, 0x0001d3af, 0x0001d7af, 0x0001dbaf, 0x0001dfaf, + 0x0001e3af, 0x0001e7af, 0x0001ebaf, 0x0001efaf, 0x0001f3af, + 0x0001f7af, 0x0001fbaf, 0x0001ffaf, 0x000203af, 0x000207af, + 0x00020baf, 0x00020faf, 0x000213af, 0x000217af, 0x00021baf, + 0x00021faf, 0x000223af, 0x000227af, 0x00022baf, 0x00022faf, + 0x000233af, 0x000237af, 0x00023baf, 0x00023faf, 0x000243af, + 0x000247af, 0x00024baf, 0x00024faf, 0x000253af, 0x000257af, + 0x00025baf, 0x00025faf, 0x000263af, 0x000267af, 0x00026baf, + 0x00026faf, 0x000273af, 0x000277af, 0x00027baf, 0x00027faf, + 0x000283af, 0x000287af, 0x00028baf, 0x00028faf, 0x000293af, + 0x000297af, 0x00029baf, 0x00029faf, 0x0002a3af, 0x0002a7af, + 0x0002abaf, 0x0002afaf, 0x0002b3af, 0x0002b7af, 0x0002bbaf, + 0x0002bfaf, 0x0002c3af, 0x0002c7af, 0x0002cbaf, 0x0002cfaf, + 0x0002d3af, 0x0002d7af, 0x0002dbaf, 0x0002dfaf, 0x0002e3af, + 0x0002e7af, 0x0002ebaf, 0x0002efaf, 0x0002f3af, 0x0002f7af, + 0x0002fbaf, 0x0002ffaf, 0x000303af, 0x000307af, 0x00030baf, + 0x00030faf, 0x000313af, 0x000317af, 0x00031baf, 0x00031faf, + 0x000323af, 0x000327af, 0x00032baf, 0x00032faf, 0x000333af, + 0x000337af, 0x00033baf, 0x00033faf, 0x000343af, 0x000347af, + 0x00034baf, 0x00034faf, 0x000353af, 0x000357af, 0x00035baf, + 0x00035faf, 0x000363af, 0x000367af, 0x00036baf, 0x00036faf, + 0x000373af, 0x000377af, 0x00037baf, 0x00037faf, 0x000383af, + 0x000387af, 0x00038baf, 0x00038faf, 0x000393af, 0x000397af, + 0x00039baf, 0x00039faf, 0x0003a3af, 0x0003a7af, 0x0003abaf, + 0x0003afaf, 0x0003b3af, 0x0003b7af, 0x0003bbaf, 0x0003bfaf, + 0x0003c3af, 0x0003c7af, 0x0003cbaf, 0x0003cfaf, 0x0003d3af, + 0x0003d7af, 0x0003dbaf, 0x0003dfaf, 0x0003e3af, 0x0003e7af, + 0x0003ebaf, 0x0003efaf, 0x0003f3af, 0x0003f7af, 0x0003fbaf, + 0x0003ffaf, 0x000403af, 0x000407af, 0x00040baf, 0x00040faf, + 0x000413af, 0x000417af, 0x00041baf, 0x00041faf, 0x000423af, + 0x000427af, 0x00042baf, 0x00042faf, 0x000433af, 0x000437af, + 0x00043baf, 0x00043faf, 0x000443af, 0x000447af, 0x00044baf, + 0x00044faf, 0x000453af, 0x000457af, 0x00045baf, 0x00045faf, + 0x000463af, 0x000467af, 0x00046baf, 0x00046faf, 0x000473af, + 0x000477af, 0x00047baf, 0x00047faf, 0x000483af, 0x000487af, + 0x00048baf, 0x00048faf, 0x000493af, 0x000497af, 0x00049baf, + 0x00049faf, 0x0004a3af, 0x0004a7af, 0x0004abaf, 0x0004afaf, + 0x0004b3af, 0x0004b7af, 0x0004bbaf, 0x0004bfaf, 0x0004c3af, + 0x0004c7af, 0x0004cbaf, 0x0004cfaf, 0x0004d3af, 0x0004d7af, + 0x0004dbaf, 0x0004dfaf, 0x0004e3af, 0x0004e7af, 0x0004ebaf, + 0x0004efaf, 0x0004f3af, 0x0004f7af, 0x0004fbaf, 0x0004ffaf, + 0x000503af, 0x000507af, 0x00050baf, 0x00050faf, 0x000513af, + 0x000517af, 0x00051baf, 0x00051faf, 0x000523af, 0x000527af, + 0x00052baf, 0x00052faf, 0x000533af, 0x000537af, 0x00053baf, + 0x00053faf, 0x000543af, 0x000547af, 0x00054baf, 0x00054faf, + 0x000553af, 0x000557af, 0x00055baf, 0x00055faf, 0x000563af, + 0x000567af, 0x00056baf, 0x00056faf, 0x000573af, 0x000577af, + 0x00057baf, 0x00057faf, 0x000583af, 0x000587af, 0x00058baf, + 0x00058faf, 0x000593af, 0x000597af, 0x00059baf, 0x00059faf, + 0x0005a3af, 0x0005a7af, 0x0005abaf, 0x0005afaf, 0x0005b3af, + 0x0005b7af, 0x0005bbaf, 0x0005bfaf, 0x0005c3af, 0x0005c7af, + 0x0005cbaf, 0x0005cfaf, 0x0005d3af, 0x0005d7af, 0x0005dbaf, + 0x0005dfaf, 0x0005e3af, 0x0005e7af, 0x0005ebaf, 0x0005efaf, + 0x0005f3af, 0x0005f7af, 0x0005fbaf, 0x0005ffaf, 0x000603af, + 0x000607af, 0x00060baf, 0x00060faf, 0x000613af, 0x000617af, + 0x00061baf, 0x00061faf, 0x000623af, 0x000627af, 0x00062baf, + 0x00062faf, 0x000633af, 0x000637af, 0x00063baf, 0x00063faf, + 0x000643af, 0x000647af, 0x00064baf, 0x00064faf, 0x000653af, + 0x000657af, 0x00065baf, 0x00065faf, 0x000663af, 0x000667af, + 0x00066baf, 0x00066faf, 0x000673af, 0x000677af, 0x00067baf, + 0x00067faf, 0x000683af, 0x000687af, 0x00068baf, 0x00068faf, + 0x000693af, 0x000697af, 0x00069baf, 0x00069faf, 0x0006a3af, + 0x0006a7af, 0x0006abaf, 0x0006afaf, 0x0006b3af, 0x0006b7af, + 0x0006bbaf, 0x0006bfaf, 0x0006c3af, 0x0006c7af, 0x0006cbaf, + 0x0006cfaf, 0x0006d3af, 0x0006d7af, 0x0006dbaf, 0x0006dfaf, + 0x0006e3af, 0x0006e7af, 0x0006ebaf, 0x0006efaf, 0x0006f3af, + 0x0006f7af, 0x0006fbaf, 0x0006ffaf, 0x000703af, 0x000707af, + 0x00070baf, 0x00070faf, 0x000713af, 0x000717af, 0x00071baf, + 0x00071faf, 0x000723af, 0x000727af, 0x00072baf, 0x00072faf, + 0x000733af, 0x000737af, 0x00073baf, 0x00073faf, 0x000743af, + 0x000747af, 0x00074baf, 0x00074faf, 0x000753af, 0x000757af, + 0x00075baf, 0x00075faf, 0x000763af, 0x000767af, 0x00076baf, + 0x00076faf, 0x000773af, 0x000777af, 0x00077baf, 0x00077faf, + 0x000783af, 0x000787af, 0x00078baf, 0x00078faf, 0x000793af, + 0x000797af, 0x00079baf, 0x00079faf, 0x0007a3af, 0x0007a7af, + 0x0007abaf, 0x0007afaf, 0x0007b3af, 0x0007b7af, 0x0007bbaf, + 0x0007bfaf, 0x0007c3af, 0x0007c7af, 0x0007cbaf, 0x0007cfaf, + 0x0007d3af, 0x0007d7af, 0x0007dbaf, 0x0007dfaf, 0x0007e3af, + 0x0007e7af, 0x0007ebaf, 0x0007efaf, 0x0007f3af, 0x0007f7af, + 0x0007fbaf, 0x0007ffaf, 0x000803af, 0x000807af, 0x00080baf, + 0x00080faf, 0x000813af, 0x000817af, 0x00081baf, 0x00081faf, + 0x000823af, 0x000827af, 0x00082baf, 0x00082faf, 0x000833af, + 0x000837af, 0x00083baf, 0x00083faf, 0x000843af, 0x000847af, + 0x00084baf, 0x00084faf, 0x000853af, 0x000857af, 0x00085baf, + 0x00085faf, 0x000863af, 0x000867af, 0x00086baf, 0x00086faf, + 0x000873af, 0x000877af, 0x00087baf, 0x00087faf, 0x000883af, + 0x000887af, 0x00088baf, 0x00088faf, 0x000893af, 0x000897af, + 0x00089baf, 0x00089faf, 0x0008a3af, 0x0008a7af, 0x0008abaf, + 0x0008afaf, 0x0008b3af, 0x0008b7af, 0x0008bbaf, 0x0008bfaf, + 0x0008c3af, 0x0008c7af, 0x0008cbaf, 0x0008cfaf, 0x0008d3af, + 0x0008d7af, 0x0008dbaf, 0x0008dfaf, 0x0008e3af, 0x0008e7af, + 0x0008ebaf, 0x0008efaf, 0x0008f3af, 0x0008f7af, 0x0008fbaf, + 0x0008ffaf, 0x000903af, 0x000907af, 0x00090baf, 0x00090faf, + 0x000913af, 0x000917af, 0x00091baf, 0x00091faf, 0x000923af, + 0x000927af, 0x00092baf, 0x00092faf, 0x000933af, 0x000937af, + 0x00093baf, 0x00093faf, 0x000943af, 0x000947af, 0x00094baf, + 0x00094faf, 0x000953af, 0x000957af, 0x00095baf, 0x00095faf, + 0x000963af, 0x000967af, 0x00096baf, 0x00096faf, 0x000973af, + 0x000977af, 0x00097baf, 0x00097faf, 0x000983af, 0x000987af, + 0x00098baf, 0x00098faf, 0x000993af, 0x000997af, 0x00099baf, + 0x00099faf, 0x0009a3af, 0x0009a7af, 0x0009abaf, 0x0009afaf, + 0x0009b3af, 0x0009b7af, 0x0009bbaf, 0x0009bfaf, 0x0009c3af, + 0x0009c7af, 0x0009cbaf, 0x0009cfaf, 0x0009d3af, 0x0009d7af, + 0x0009dbaf, 0x0009dfaf, 0x0009e3af, 0x0009e7af, 0x0009ebaf, + 0x0009efaf, 0x0009f3af, 0x0009f7af, 0x0009fbaf, 0x0009ffaf, + 0x000a03af, 0x000a07af, 0x000a0baf, 0x000a0faf, 0x000a13af, + 0x000a17af, 0x000a1baf, 0x000a1faf, 0x000a23af, 0x000a27af, + 0x000a2baf, 0x000a2faf, 0x000a33af, 0x000a37af, 0x000a3baf, + 0x000a3faf, 0x000a43af, 0x000a47af, 0x000a4baf, 0x000a4faf, + 0x000a53af, 0x000a57af, 0x000a5baf, 0x000a5faf, 0x000a63af, + 0x000a67af, 0x000a6baf, 0x000a6faf, 0x000a73af, 0x000a77af, + 0x000a7baf, 0x000a7faf, 0x000a83af, 0x000a87af, 0x000a8baf, + 0x000a8faf, 0x000a93af, 0x000a97af, 0x000a9baf, 0x000a9faf, + 0x000aa3af, 0x000aa7af, 0x000aabaf, 0x000aafaf, 0x000ab3af, + 0x000ab7af, 0x000abbaf, 0x000abfaf, 0x000ac3af, 0x000ac7af, + 0x000acbaf, 0x000acfaf, 0x000ad3af, 0x000ad7af, 0x000adbaf, + 0x000adfaf, 0x000ae3af, 0x000ae7af, 0x000aebaf, 0x000aefaf, + 0x000af3af, 0x000af7af, 0x000afbaf, 0x000affaf, 0x000b03af, + 0x000b07af, 0x000b0baf, 0x000b0faf, 0x000b13af, 0x000b17af, + 0x000b1baf, 0x000b1faf, 0x000b23af, 0x000b27af, 0x000b2baf, + 0x000b2faf, 0x000b33af, 0x000b37af, 0x000b3baf, 0x000b3faf, + 0x000b43af, 0x000b47af, 0x000b4baf, 0x000b4faf, 0x000b53af, + 0x000b57af, 0x000b5baf, 0x000b5faf, 0x000b63af, 0x000b67af, + 0x000b6baf, 0x000b6faf, 0x000b73af, 0x000b77af, 0x000b7baf, + 0x000b7faf, 0x000b83af, 0x000b87af, 0x000b8baf, 0x000b8faf, + 0x000b93af, 0x000b97af, 0x000b9baf, 0x000b9faf, 0x000ba3af, + 0x000ba7af, 0x000babaf, 0x000bafaf, 0x000bb3af, 0x000bb7af, + 0x000bbbaf, 0x000bbfaf, 0x000bc3af, 0x000bc7af, 0x000bcbaf, + 0x000bcfaf, 0x000bd3af, 0x000bd7af, 0x000bdbaf, 0x000bdfaf, + 0x000be3af, 0x000be7af, 0x000bebaf, 0x000befaf, 0x000bf3af, + 0x000bf7af, 0x000bfbaf, 0x000bffaf, 0x000c03af, 0x000c07af, + 0x000c0baf, 0x000c0faf, 0x000c13af, 0x000c17af, 0x000c1baf, + 0x000c1faf, 0x000c23af, 0x000c27af, 0x000c2baf, 0x000c2faf, + 0x000c33af, 0x000c37af, 0x000c3baf, 0x000c3faf, 0x000c43af, + 0x000c47af, 0x000c4baf, 0x000c4faf, 0x000c53af, 0x000c57af, + 0x000c5baf, 0x000c5faf, 0x000c63af, 0x000c67af, 0x000c6baf, + 0x000c6faf, 0x000c73af, 0x000c77af, 0x000c7baf, 0x000c7faf, + 0x000c83af, 0x000c87af, 0x000c8baf, 0x000c8faf, 0x000c93af, + 0x000c97af, 0x000c9baf, 0x000c9faf, 0x000ca3af, 0x000ca7af, + 0x000cabaf, 0x000cafaf, 0x000cb3af, 0x000cb7af, 0x000cbbaf, + 0x000cbfaf, 0x000cc3af, 0x000cc7af, 0x000ccbaf, 0x000ccfaf, + 0x000cd3af, 0x000cd7af, 0x000cdbaf, 0x000cdfaf, 0x000ce3af, + 0x000ce7af, 0x000cebaf, 0x000cefaf, 0x000cf3af, 0x000cf7af, + 0x000cfbaf, 0x000cffaf, 0x000d03af, 0x000d07af, 0x000d0baf, + 0x000d0faf, 0x000d13af, 0x000d17af, 0x000d1baf, 0x000d1faf, + 0x000d23af, 0x000d27af, 0x000d2baf, 0x000d2faf, 0x000d33af, + 0x000d37af, 0x000d3baf, 0x000d3faf, 0x000d43af, 0x000d47af, + 0x000d4baf, 0x000d4faf, 0x000d53af, 0x000d57af, 0x000d5baf, + 0x000d5faf, 0x000d63af, 0x000d67af, 0x000d6baf, 0x000d6faf, + 0x000d73af, 0x000d77af, 0x000d7baf, 0x000d7faf, 0x000d83af, + 0x000d87af, 0x000d8baf, 0x000d8faf, 0x000d93af, 0x000d97af, + 0x000d9baf, 0x000d9faf, 0x000da3af, 0x000da7af, 0x000dabaf, + 0x000dafaf, 0x000db3af, 0x000db7af, 0x000dbbaf, 0x000dbfaf, + 0x000dc3af, 0x000dc7af, 0x000dcbaf, 0x000dcfaf, 0x000dd3af, + 0x000dd7af, 0x000ddbaf, 0x000ddfaf, 0x000de3af, 0x000de7af, + 0x000debaf, 0x000defaf, 0x000df3af, 0x000df7af, 0x000dfbaf, + 0x000dffaf, 0x000e03af, 0x000e07af, 0x000e0baf, 0x000e0faf, + 0x000e13af, 0x000e17af, 0x000e1baf, 0x000e1faf, 0x000e23af, + 0x000e27af, 0x000e2baf, 0x000e2faf, 0x000e33af, 0x000e37af, + 0x000e3baf, 0x000e3faf, 0x000e43af, 0x000e47af, 0x000e4baf, + 0x000e4faf, 0x000e53af, 0x000e57af, 0x000e5baf, 0x000e5faf, + 0x000e63af, 0x000e67af, 0x000e6baf, 0x000e6faf, 0x000e73af, + 0x000e77af, 0x000e7baf, 0x000e7faf, 0x000e83af, 0x000e87af, + 0x000e8baf, 0x000e8faf, 0x000e93af, 0x000e97af, 0x000e9baf, + 0x000e9faf, 0x000ea3af, 0x000ea7af, 0x000eabaf, 0x000eafaf, + 0x000eb3af, 0x000eb7af, 0x000ebbaf, 0x000ebfaf, 0x000ec3af, + 0x000ec7af, 0x000ecbaf, 0x000ecfaf, 0x000ed3af, 0x000ed7af, + 0x000edbaf, 0x000edfaf, 0x000ee3af, 0x000ee7af, 0x000eebaf, + 0x000eefaf, 0x000ef3af, 0x000ef7af, 0x000efbaf, 0x000effaf, + 0x000f03af, 0x000f07af, 0x000f0baf, 0x000f0faf, 0x000f13af, + 0x000f17af, 0x000f1baf, 0x000f1faf, 0x000f23af, 0x000f27af, + 0x000f2baf, 0x000f2faf, 0x000f33af, 0x000f37af, 0x000f3baf, + 0x000f3faf, 0x000f43af, 0x000f47af, 0x000f4baf, 0x000f4faf, + 0x000f53af, 0x000f57af, 0x000f5baf, 0x000f5faf, 0x000f63af, + 0x000f67af, 0x000f6baf, 0x000f6faf, 0x000f73af, 0x000f77af, + 0x000f7baf, 0x000f7faf, 0x000f83af, 0x000f87af, 0x000f8baf, + 0x000f8faf, 0x000f93af, 0x000f97af, 0x000f9baf, 0x000f9faf, + 0x000fa3af, 0x000fa7af, 0x000fabaf, 0x000fafaf, 0x000fb3af, + 0x000fb7af, 0x000fbbaf, 0x000fbfaf, 0x000fc3af, 0x000fc7af, + 0x000fcbaf, 0x000fcfaf, 0x000fd3af, 0x000fd7af, 0x000fdbaf, + 0x000fdfaf, 0x000fe3af, 0x000fe7af, 0x000febaf, 0x000fefaf, + 0x000ff3af, 0x000ff7af, 0x000ffbaf, 0x000fffaf, 0x00000070, + 0x00000470, 0x00000870, 0x00000c70, 0x00001070, 0x00001470, + 0x00001870, 0x00001c70, 0x00002070, 0x00002470, 0x00002870, + 0x00002c70, 0x00003070, 0x00003470, 0x00003870, 0x00003c70, + 0x00004070, 0x00004470, 0x00004870, 0x00004c70, 0x00005070, + 0x00005470, 0x00005870, 0x00005c70, 0x00006070, 0x00006470, + 0x00006870, 0x00006c70, 0x00007070, 0x00007470, 0x00007870, + 0x00007c70, 0x00008070, 0x00008470, 0x00008870, 0x00008c70, + 0x00009070, 0x00009470, 0x00009870, 0x00009c70, 0x0000a070, + 0x0000a470, 0x0000a870, 0x0000ac70, 0x0000b070, 0x0000b470, + 0x0000b870, 0x0000bc70, 0x0000c070, 0x0000c470, 0x0000c870, + 0x0000cc70, 0x0000d070, 0x0000d470, 0x0000d870, 0x0000dc70, + 0x0000e070, 0x0000e470, 0x0000e870, 0x0000ec70, 0x0000f070, + 0x0000f470, 0x0000f870, 0x0000fc70, 0x00010070, 0x00010470, + 0x00010870, 0x00010c70, 0x00011070, 0x00011470, 0x00011870, + 0x00011c70, 0x00012070, 0x00012470, 0x00012870, 0x00012c70, + 0x00013070, 0x00013470, 0x00013870, 0x00013c70, 0x00014070, + 0x00014470, 0x00014870, 0x00014c70, 0x00015070, 0x00015470, + 0x00015870, 0x00015c70, 0x00016070, 0x00016470, 0x00016870, + 0x00016c70, 0x00017070, 0x00017470, 0x00017870, 0x00017c70, + 0x00018070, 0x00018470, 0x00018870, 0x00018c70, 0x00019070, + 0x00019470, 0x00019870, 0x00019c70, 0x0001a070, 0x0001a470, + 0x0001a870, 0x0001ac70, 0x0001b070, 0x0001b470, 0x0001b870, + 0x0001bc70, 0x0001c070, 0x0001c470, 0x0001c870, 0x0001cc70, + 0x0001d070, 0x0001d470, 0x0001d870, 0x0001dc70, 0x0001e070, + 0x0001e470, 0x0001e870, 0x0001ec70, 0x0001f070, 0x0001f470, + 0x0001f870, 0x0001fc70, 0x00020070, 0x00020470, 0x00020870, + 0x00020c70, 0x00021070, 0x00021470, 0x00021870, 0x00021c70, + 0x00022070, 0x00022470, 0x00022870, 0x00022c70, 0x00023070, + 0x00023470, 0x00023870, 0x00023c70, 0x00024070, 0x00024470, + 0x00024870, 0x00024c70, 0x00025070, 0x00025470, 0x00025870, + 0x00025c70, 0x00026070, 0x00026470, 0x00026870, 0x00026c70, + 0x00027070, 0x00027470, 0x00027870, 0x00027c70, 0x00028070, + 0x00028470, 0x00028870, 0x00028c70, 0x00029070, 0x00029470, + 0x00029870, 0x00029c70, 0x0002a070, 0x0002a470, 0x0002a870, + 0x0002ac70, 0x0002b070, 0x0002b470, 0x0002b870, 0x0002bc70, + 0x0002c070, 0x0002c470, 0x0002c870, 0x0002cc70, 0x0002d070, + 0x0002d470, 0x0002d870, 0x0002dc70, 0x0002e070, 0x0002e470, + 0x0002e870, 0x0002ec70, 0x0002f070, 0x0002f470, 0x0002f870, + 0x0002fc70, 0x00030070, 0x00030470, 0x00030870, 0x00030c70, + 0x00031070, 0x00031470, 0x00031870, 0x00031c70, 0x00032070, + 0x00032470, 0x00032870, 0x00032c70, 0x00033070, 0x00033470, + 0x00033870, 0x00033c70, 0x00034070, 0x00034470, 0x00034870, + 0x00034c70, 0x00035070, 0x00035470, 0x00035870, 0x00035c70, + 0x00036070, 0x00036470, 0x00036870, 0x00036c70, 0x00037070, + 0x00037470, 0x00037870, 0x00037c70, 0x00038070, 0x00038470, + 0x00038870, 0x00038c70, 0x00039070, 0x00039470, 0x00039870, + 0x00039c70, 0x0003a070, 0x0003a470, 0x0003a870, 0x0003ac70, + 0x0003b070, 0x0003b470, 0x0003b870, 0x0003bc70, 0x0003c070, + 0x0003c470, 0x0003c870, 0x0003cc70, 0x0003d070, 0x0003d470, + 0x0003d870, 0x0003dc70, 0x0003e070, 0x0003e470, 0x0003e870, + 0x0003ec70, 0x0003f070, 0x0003f470, 0x0003f870, 0x0003fc70, + 0x00040070, 0x00040470, 0x00040870, 0x00040c70, 0x00041070, + 0x00041470, 0x00041870, 0x00041c70, 0x00042070, 0x00042470, + 0x00042870, 0x00042c70, 0x00043070, 0x00043470, 0x00043870, + 0x00043c70, 0x00044070, 0x00044470, 0x00044870, 0x00044c70, + 0x00045070, 0x00045470, 0x00045870, 0x00045c70, 0x00046070, + 0x00046470, 0x00046870, 0x00046c70, 0x00047070, 0x00047470, + 0x00047870, 0x00047c70, 0x00048070, 0x00048470, 0x00048870, + 0x00048c70, 0x00049070, 0x00049470, 0x00049870, 0x00049c70, + 0x0004a070, 0x0004a470, 0x0004a870, 0x0004ac70, 0x0004b070, + 0x0004b470, 0x0004b870, 0x0004bc70, 0x0004c070, 0x0004c470, + 0x0004c870, 0x0004cc70, 0x0004d070, 0x0004d470, 0x0004d870, + 0x0004dc70, 0x0004e070, 0x0004e470, 0x0004e870, 0x0004ec70, + 0x0004f070, 0x0004f470, 0x0004f870, 0x0004fc70, 0x00050070, + 0x00050470, 0x00050870, 0x00050c70, 0x00051070, 0x00051470, + 0x00051870, 0x00051c70, 0x00052070, 0x00052470, 0x00052870, + 0x00052c70, 0x00053070, 0x00053470, 0x00053870, 0x00053c70, + 0x00054070, 0x00054470, 0x00054870, 0x00054c70, 0x00055070, + 0x00055470, 0x00055870, 0x00055c70, 0x00056070, 0x00056470, + 0x00056870, 0x00056c70, 0x00057070, 0x00057470, 0x00057870, + 0x00057c70, 0x00058070, 0x00058470, 0x00058870, 0x00058c70, + 0x00059070, 0x00059470, 0x00059870, 0x00059c70, 0x0005a070, + 0x0005a470, 0x0005a870, 0x0005ac70, 0x0005b070, 0x0005b470, + 0x0005b870, 0x0005bc70, 0x0005c070, 0x0005c470, 0x0005c870, + 0x0005cc70, 0x0005d070, 0x0005d470, 0x0005d870, 0x0005dc70, + 0x0005e070, 0x0005e470, 0x0005e870, 0x0005ec70, 0x0005f070, + 0x0005f470, 0x0005f870, 0x0005fc70, 0x00060070, 0x00060470, + 0x00060870, 0x00060c70, 0x00061070, 0x00061470, 0x00061870, + 0x00061c70, 0x00062070, 0x00062470, 0x00062870, 0x00062c70, + 0x00063070, 0x00063470, 0x00063870, 0x00063c70, 0x00064070, + 0x00064470, 0x00064870, 0x00064c70, 0x00065070, 0x00065470, + 0x00065870, 0x00065c70, 0x00066070, 0x00066470, 0x00066870, + 0x00066c70, 0x00067070, 0x00067470, 0x00067870, 0x00067c70, + 0x00068070, 0x00068470, 0x00068870, 0x00068c70, 0x00069070, + 0x00069470, 0x00069870, 0x00069c70, 0x0006a070, 0x0006a470, + 0x0006a870, 0x0006ac70, 0x0006b070, 0x0006b470, 0x0006b870, + 0x0006bc70, 0x0006c070, 0x0006c470, 0x0006c870, 0x0006cc70, + 0x0006d070, 0x0006d470, 0x0006d870, 0x0006dc70, 0x0006e070, + 0x0006e470, 0x0006e870, 0x0006ec70, 0x0006f070, 0x0006f470, + 0x0006f870, 0x0006fc70, 0x00070070, 0x00070470, 0x00070870, + 0x00070c70, 0x00071070, 0x00071470, 0x00071870, 0x00071c70, + 0x00072070, 0x00072470, 0x00072870, 0x00072c70, 0x00073070, + 0x00073470, 0x00073870, 0x00073c70, 0x00074070, 0x00074470, + 0x00074870, 0x00074c70, 0x00075070, 0x00075470, 0x00075870, + 0x00075c70, 0x00076070, 0x00076470, 0x00076870, 0x00076c70, + 0x00077070, 0x00077470, 0x00077870, 0x00077c70, 0x00078070, + 0x00078470, 0x00078870, 0x00078c70, 0x00079070, 0x00079470, + 0x00079870, 0x00079c70, 0x0007a070, 0x0007a470, 0x0007a870, + 0x0007ac70, 0x0007b070, 0x0007b470, 0x0007b870, 0x0007bc70, + 0x0007c070, 0x0007c470, 0x0007c870, 0x0007cc70, 0x0007d070, + 0x0007d470, 0x0007d870, 0x0007dc70, 0x0007e070, 0x0007e470, + 0x0007e870, 0x0007ec70, 0x0007f070, 0x0007f470, 0x0007f870, + 0x0007fc70, 0x00080070, 0x00080470, 0x00080870, 0x00080c70, + 0x00081070, 0x00081470, 0x00081870, 0x00081c70, 0x00082070, + 0x00082470, 0x00082870, 0x00082c70, 0x00083070, 0x00083470, + 0x00083870, 0x00083c70, 0x00084070, 0x00084470, 0x00084870, + 0x00084c70, 0x00085070, 0x00085470, 0x00085870, 0x00085c70, + 0x00086070, 0x00086470, 0x00086870, 0x00086c70, 0x00087070, + 0x00087470, 0x00087870, 0x00087c70, 0x00088070, 0x00088470, + 0x00088870, 0x00088c70, 0x00089070, 0x00089470, 0x00089870, + 0x00089c70, 0x0008a070, 0x0008a470, 0x0008a870, 0x0008ac70, + 0x0008b070, 0x0008b470, 0x0008b870, 0x0008bc70, 0x0008c070, + 0x0008c470, 0x0008c870, 0x0008cc70, 0x0008d070, 0x0008d470, + 0x0008d870, 0x0008dc70, 0x0008e070, 0x0008e470, 0x0008e870, + 0x0008ec70, 0x0008f070, 0x0008f470, 0x0008f870, 0x0008fc70, + 0x00090070, 0x00090470, 0x00090870, 0x00090c70, 0x00091070, + 0x00091470, 0x00091870, 0x00091c70, 0x00092070, 0x00092470, + 0x00092870, 0x00092c70, 0x00093070, 0x00093470, 0x00093870, + 0x00093c70, 0x00094070, 0x00094470, 0x00094870, 0x00094c70, + 0x00095070, 0x00095470, 0x00095870, 0x00095c70, 0x00096070, + 0x00096470, 0x00096870, 0x00096c70, 0x00097070, 0x00097470, + 0x00097870, 0x00097c70, 0x00098070, 0x00098470, 0x00098870, + 0x00098c70, 0x00099070, 0x00099470, 0x00099870, 0x00099c70, + 0x0009a070, 0x0009a470, 0x0009a870, 0x0009ac70, 0x0009b070, + 0x0009b470, 0x0009b870, 0x0009bc70, 0x0009c070, 0x0009c470, + 0x0009c870, 0x0009cc70, 0x0009d070, 0x0009d470, 0x0009d870, + 0x0009dc70, 0x0009e070, 0x0009e470, 0x0009e870, 0x0009ec70, + 0x0009f070, 0x0009f470, 0x0009f870, 0x0009fc70, 0x000a0070, + 0x000a0470, 0x000a0870, 0x000a0c70, 0x000a1070, 0x000a1470, + 0x000a1870, 0x000a1c70, 0x000a2070, 0x000a2470, 0x000a2870, + 0x000a2c70, 0x000a3070, 0x000a3470, 0x000a3870, 0x000a3c70, + 0x000a4070, 0x000a4470, 0x000a4870, 0x000a4c70, 0x000a5070, + 0x000a5470, 0x000a5870, 0x000a5c70, 0x000a6070, 0x000a6470, + 0x000a6870, 0x000a6c70, 0x000a7070, 0x000a7470, 0x000a7870, + 0x000a7c70, 0x000a8070, 0x000a8470, 0x000a8870, 0x000a8c70, + 0x000a9070, 0x000a9470, 0x000a9870, 0x000a9c70, 0x000aa070, + 0x000aa470, 0x000aa870, 0x000aac70, 0x000ab070, 0x000ab470, + 0x000ab870, 0x000abc70, 0x000ac070, 0x000ac470, 0x000ac870, + 0x000acc70, 0x000ad070, 0x000ad470, 0x000ad870, 0x000adc70, + 0x000ae070, 0x000ae470, 0x000ae870, 0x000aec70, 0x000af070, + 0x000af470, 0x000af870, 0x000afc70, 0x000b0070, 0x000b0470, + 0x000b0870, 0x000b0c70, 0x000b1070, 0x000b1470, 0x000b1870, + 0x000b1c70, 0x000b2070, 0x000b2470, 0x000b2870, 0x000b2c70, + 0x000b3070, 0x000b3470, 0x000b3870, 0x000b3c70, 0x000b4070, + 0x000b4470, 0x000b4870, 0x000b4c70, 0x000b5070, 0x000b5470, + 0x000b5870, 0x000b5c70, 0x000b6070, 0x000b6470, 0x000b6870, + 0x000b6c70, 0x000b7070, 0x000b7470, 0x000b7870, 0x000b7c70, + 0x000b8070, 0x000b8470, 0x000b8870, 0x000b8c70, 0x000b9070, + 0x000b9470, 0x000b9870, 0x000b9c70, 0x000ba070, 0x000ba470, + 0x000ba870, 0x000bac70, 0x000bb070, 0x000bb470, 0x000bb870, + 0x000bbc70, 0x000bc070, 0x000bc470, 0x000bc870, 0x000bcc70, + 0x000bd070, 0x000bd470, 0x000bd870, 0x000bdc70, 0x000be070, + 0x000be470, 0x000be870, 0x000bec70, 0x000bf070, 0x000bf470, + 0x000bf870, 0x000bfc70, 0x000c0070, 0x000c0470, 0x000c0870, + 0x000c0c70, 0x000c1070, 0x000c1470, 0x000c1870, 0x000c1c70, + 0x000c2070, 0x000c2470, 0x000c2870, 0x000c2c70, 0x000c3070, + 0x000c3470, 0x000c3870, 0x000c3c70, 0x000c4070, 0x000c4470, + 0x000c4870, 0x000c4c70, 0x000c5070, 0x000c5470, 0x000c5870, + 0x000c5c70, 0x000c6070, 0x000c6470, 0x000c6870, 0x000c6c70, + 0x000c7070, 0x000c7470, 0x000c7870, 0x000c7c70, 0x000c8070, + 0x000c8470, 0x000c8870, 0x000c8c70, 0x000c9070, 0x000c9470, + 0x000c9870, 0x000c9c70, 0x000ca070, 0x000ca470, 0x000ca870, + 0x000cac70, 0x000cb070, 0x000cb470, 0x000cb870, 0x000cbc70, + 0x000cc070, 0x000cc470, 0x000cc870, 0x000ccc70, 0x000cd070, + 0x000cd470, 0x000cd870, 0x000cdc70, 0x000ce070, 0x000ce470, + 0x000ce870, 0x000cec70, 0x000cf070, 0x000cf470, 0x000cf870, + 0x000cfc70, 0x000d0070, 0x000d0470, 0x000d0870, 0x000d0c70, + 0x000d1070, 0x000d1470, 0x000d1870, 0x000d1c70, 0x000d2070, + 0x000d2470, 0x000d2870, 0x000d2c70, 0x000d3070, 0x000d3470, + 0x000d3870, 0x000d3c70, 0x000d4070, 0x000d4470, 0x000d4870, + 0x000d4c70, 0x000d5070, 0x000d5470, 0x000d5870, 0x000d5c70, + 0x000d6070, 0x000d6470, 0x000d6870, 0x000d6c70, 0x000d7070, + 0x000d7470, 0x000d7870, 0x000d7c70, 0x000d8070, 0x000d8470, + 0x000d8870, 0x000d8c70, 0x000d9070, 0x000d9470, 0x000d9870, + 0x000d9c70, 0x000da070, 0x000da470, 0x000da870, 0x000dac70, + 0x000db070, 0x000db470, 0x000db870, 0x000dbc70, 0x000dc070, + 0x000dc470, 0x000dc870, 0x000dcc70, 0x000dd070, 0x000dd470, + 0x000dd870, 0x000ddc70, 0x000de070, 0x000de470, 0x000de870, + 0x000dec70, 0x000df070, 0x000df470, 0x000df870, 0x000dfc70, + 0x000e0070, 0x000e0470, 0x000e0870, 0x000e0c70, 0x000e1070, + 0x000e1470, 0x000e1870, 0x000e1c70, 0x000e2070, 0x000e2470, + 0x000e2870, 0x000e2c70, 0x000e3070, 0x000e3470, 0x000e3870, + 0x000e3c70, 0x000e4070, 0x000e4470, 0x000e4870, 0x000e4c70, + 0x000e5070, 0x000e5470, 0x000e5870, 0x000e5c70, 0x000e6070, + 0x000e6470, 0x000e6870, 0x000e6c70, 0x000e7070, 0x000e7470, + 0x000e7870, 0x000e7c70, 0x000e8070, 0x000e8470, 0x000e8870, + 0x000e8c70, 0x000e9070, 0x000e9470, 0x000e9870, 0x000e9c70, + 0x000ea070, 0x000ea470, 0x000ea870, 0x000eac70, 0x000eb070, + 0x000eb470, 0x000eb870, 0x000ebc70, 0x000ec070, 0x000ec470, + 0x000ec870, 0x000ecc70, 0x000ed070, 0x000ed470, 0x000ed870, + 0x000edc70, 0x000ee070, 0x000ee470, 0x000ee870, 0x000eec70, + 0x000ef070, 0x000ef470, 0x000ef870, 0x000efc70, 0x000f0070, + 0x000f0470, 0x000f0870, 0x000f0c70, 0x000f1070, 0x000f1470, + 0x000f1870, 0x000f1c70, 0x000f2070, 0x000f2470, 0x000f2870, + 0x000f2c70, 0x000f3070, 0x000f3470, 0x000f3870, 0x000f3c70, + 0x000f4070, 0x000f4470, 0x000f4870, 0x000f4c70, 0x000f5070, + 0x000f5470, 0x000f5870, 0x000f5c70, 0x000f6070, 0x000f6470, + 0x000f6870, 0x000f6c70, 0x000f7070, 0x000f7470, 0x000f7870, + 0x000f7c70, 0x000f8070, 0x000f8470, 0x000f8870, 0x000f8c70, + 0x000f9070, 0x000f9470, 0x000f9870, 0x000f9c70, 0x000fa070, + 0x000fa470, 0x000fa870, 0x000fac70, 0x000fb070, 0x000fb470, + 0x000fb870, 0x000fbc70, 0x000fc070, 0x000fc470, 0x000fc870, + 0x000fcc70, 0x000fd070, 0x000fd470, 0x000fd870, 0x000fdc70, + 0x000fe070, 0x000fe470, 0x000fe870, 0x000fec70, 0x000ff070, + 0x000ff470, 0x000ff870, 0x000ffc70, 0x00100070, 0x00100470, + 0x00100870, 0x00100c70, 0x00101070, 0x00101470, 0x00101870, + 0x00101c70, 0x00102070, 0x00102470, 0x00102870, 0x00102c70, + 0x00103070, 0x00103470, 0x00103870, 0x00103c70, 0x00104070, + 0x00104470, 0x00104870, 0x00104c70, 0x00105070, 0x00105470, + 0x00105870, 0x00105c70, 0x00106070, 0x00106470, 0x00106870, + 0x00106c70, 0x00107070, 0x00107470, 0x00107870, 0x00107c70, + 0x00108070, 0x00108470, 0x00108870, 0x00108c70, 0x00109070, + 0x00109470, 0x00109870, 0x00109c70, 0x0010a070, 0x0010a470, + 0x0010a870, 0x0010ac70, 0x0010b070, 0x0010b470, 0x0010b870, + 0x0010bc70, 0x0010c070, 0x0010c470, 0x0010c870, 0x0010cc70, + 0x0010d070, 0x0010d470, 0x0010d870, 0x0010dc70, 0x0010e070, + 0x0010e470, 0x0010e870, 0x0010ec70, 0x0010f070, 0x0010f470, + 0x0010f870, 0x0010fc70, 0x00110070, 0x00110470, 0x00110870, + 0x00110c70, 0x00111070, 0x00111470, 0x00111870, 0x00111c70, + 0x00112070, 0x00112470, 0x00112870, 0x00112c70, 0x00113070, + 0x00113470, 0x00113870, 0x00113c70, 0x00114070, 0x00114470, + 0x00114870, 0x00114c70, 0x00115070, 0x00115470, 0x00115870, + 0x00115c70, 0x00116070, 0x00116470, 0x00116870, 0x00116c70, + 0x00117070, 0x00117470, 0x00117870, 0x00117c70, 0x00118070, + 0x00118470, 0x00118870, 0x00118c70, 0x00119070, 0x00119470, + 0x00119870, 0x00119c70, 0x0011a070, 0x0011a470, 0x0011a870, + 0x0011ac70, 0x0011b070, 0x0011b470, 0x0011b870, 0x0011bc70, + 0x0011c070, 0x0011c470, 0x0011c870, 0x0011cc70, 0x0011d070, + 0x0011d470, 0x0011d870, 0x0011dc70, 0x0011e070, 0x0011e470, + 0x0011e870, 0x0011ec70, 0x0011f070, 0x0011f470, 0x0011f870, + 0x0011fc70, 0x00120070, 0x00120470, 0x00120870, 0x00120c70, + 0x00121070, 0x00121470, 0x00121870, 0x00121c70, 0x00122070, + 0x00122470, 0x00122870, 0x00122c70, 0x00123070, 0x00123470, + 0x00123870, 0x00123c70, 0x00124070, 0x00124470, 0x00124870, + 0x00124c70, 0x00125070, 0x00125470, 0x00125870, 0x00125c70, + 0x00126070, 0x00126470, 0x00126870, 0x00126c70, 0x00127070, + 0x00127470, 0x00127870, 0x00127c70, 0x00128070, 0x00128470, + 0x00128870, 0x00128c70, 0x00129070, 0x00129470, 0x00129870, + 0x00129c70, 0x0012a070, 0x0012a470, 0x0012a870, 0x0012ac70, + 0x0012b070, 0x0012b470, 0x0012b870, 0x0012bc70, 0x0012c070, + 0x0012c470, 0x0012c870, 0x0012cc70, 0x0012d070, 0x0012d470, + 0x0012d870, 0x0012dc70, 0x0012e070, 0x0012e470, 0x0012e870, + 0x0012ec70, 0x0012f070, 0x0012f470, 0x0012f870, 0x0012fc70, + 0x00130070, 0x00130470, 0x00130870, 0x00130c70, 0x00131070, + 0x00131470, 0x00131870, 0x00131c70, 0x00132070, 0x00132470, + 0x00132870, 0x00132c70, 0x00133070, 0x00133470, 0x00133870, + 0x00133c70, 0x00134070, 0x00134470, 0x00134870, 0x00134c70, + 0x00135070, 0x00135470, 0x00135870, 0x00135c70, 0x00136070, + 0x00136470, 0x00136870, 0x00136c70, 0x00137070, 0x00137470, + 0x00137870, 0x00137c70, 0x00138070, 0x00138470, 0x00138870, + 0x00138c70, 0x00139070, 0x00139470, 0x00139870, 0x00139c70, + 0x0013a070, 0x0013a470, 0x0013a870, 0x0013ac70, 0x0013b070, + 0x0013b470, 0x0013b870, 0x0013bc70, 0x0013c070, 0x0013c470, + 0x0013c870, 0x0013cc70, 0x0013d070, 0x0013d470, 0x0013d870, + 0x0013dc70, 0x0013e070, 0x0013e470, 0x0013e870, 0x0013ec70, + 0x0013f070, 0x0013f470, 0x0013f870, 0x0013fc70, 0x00140070, + 0x00140470, 0x00140870, 0x00140c70, 0x00141070, 0x00141470, + 0x00141870, 0x00141c70, 0x00142070, 0x00142470, 0x00142870, + 0x00142c70, 0x00143070, 0x00143470, 0x00143870, 0x00143c70, + 0x00144070, 0x00144470, 0x00144870, 0x00144c70, 0x00145070, + 0x00145470, 0x00145870, 0x00145c70, 0x00146070, 0x00146470, + 0x00146870, 0x00146c70, 0x00147070, 0x00147470, 0x00147870, + 0x00147c70, 0x00148070, 0x00148470, 0x00148870, 0x00148c70, + 0x00149070, 0x00149470, 0x00149870, 0x00149c70, 0x0014a070, + 0x0014a470, 0x0014a870, 0x0014ac70, 0x0014b070, 0x0014b470, + 0x0014b870, 0x0014bc70, 0x0014c070, 0x0014c470, 0x0014c870, + 0x0014cc70, 0x0014d070, 0x0014d470, 0x0014d870, 0x0014dc70, + 0x0014e070, 0x0014e470, 0x0014e870, 0x0014ec70, 0x0014f070, + 0x0014f470, 0x0014f870, 0x0014fc70, 0x00150070, 0x00150470, + 0x00150870, 0x00150c70, 0x00151070, 0x00151470, 0x00151870, + 0x00151c70, 0x00152070, 0x00152470, 0x00152870, 0x00152c70, + 0x00153070, 0x00153470, 0x00153870, 0x00153c70, 0x00154070, + 0x00154470, 0x00154870, 0x00154c70, 0x00155070, 0x00155470, + 0x00155870, 0x00155c70, 0x00156070, 0x00156470, 0x00156870, + 0x00156c70, 0x00157070, 0x00157470, 0x00157870, 0x00157c70, + 0x00158070, 0x00158470, 0x00158870, 0x00158c70, 0x00159070, + 0x00159470, 0x00159870, 0x00159c70, 0x0015a070, 0x0015a470, + 0x0015a870, 0x0015ac70, 0x0015b070, 0x0015b470, 0x0015b870, + 0x0015bc70, 0x0015c070, 0x0015c470, 0x0015c870, 0x0015cc70, + 0x0015d070, 0x0015d470, 0x0015d870, 0x0015dc70, 0x0015e070, + 0x0015e470, 0x0015e870, 0x0015ec70, 0x0015f070, 0x0015f470, + 0x0015f870, 0x0015fc70, 0x00160070, 0x00160470, 0x00160870, + 0x00160c70, 0x00161070, 0x00161470, 0x00161870, 0x00161c70, + 0x00162070, 0x00162470, 0x00162870, 0x00162c70, 0x00163070, + 0x00163470, 0x00163870, 0x00163c70, 0x00164070, 0x00164470, + 0x00164870, 0x00164c70, 0x00165070, 0x00165470, 0x00165870, + 0x00165c70, 0x00166070, 0x00166470, 0x00166870, 0x00166c70, + 0x00167070, 0x00167470, 0x00167870, 0x00167c70, 0x00168070, + 0x00168470, 0x00168870, 0x00168c70, 0x00169070, 0x00169470, + 0x00169870, 0x00169c70, 0x0016a070, 0x0016a470, 0x0016a870, + 0x0016ac70, 0x0016b070, 0x0016b470, 0x0016b870, 0x0016bc70, + 0x0016c070, 0x0016c470, 0x0016c870, 0x0016cc70, 0x0016d070, + 0x0016d470, 0x0016d870, 0x0016dc70, 0x0016e070, 0x0016e470, + 0x0016e870, 0x0016ec70, 0x0016f070, 0x0016f470, 0x0016f870, + 0x0016fc70, 0x00170070, 0x00170470, 0x00170870, 0x00170c70, + 0x00171070, 0x00171470, 0x00171870, 0x00171c70, 0x00172070, + 0x00172470, 0x00172870, 0x00172c70, 0x00173070, 0x00173470, + 0x00173870, 0x00173c70, 0x00174070, 0x00174470, 0x00174870, + 0x00174c70, 0x00175070, 0x00175470, 0x00175870, 0x00175c70, + 0x00176070, 0x00176470, 0x00176870, 0x00176c70, 0x00177070, + 0x00177470, 0x00177870, 0x00177c70, 0x00178070, 0x00178470, + 0x00178870, 0x00178c70, 0x00179070, 0x00179470, 0x00179870, + 0x00179c70, 0x0017a070, 0x0017a470, 0x0017a870, 0x0017ac70, + 0x0017b070, 0x0017b470, 0x0017b870, 0x0017bc70, 0x0017c070, + 0x0017c470, 0x0017c870, 0x0017cc70, 0x0017d070, 0x0017d470, + 0x0017d870, 0x0017dc70, 0x0017e070, 0x0017e470, 0x0017e870, + 0x0017ec70, 0x0017f070, 0x0017f470, 0x0017f870, 0x0017fc70, + 0x00180070, 0x00180470, 0x00180870, 0x00180c70, 0x00181070, + 0x00181470, 0x00181870, 0x00181c70, 0x00182070, 0x00182470, + 0x00182870, 0x00182c70, 0x00183070, 0x00183470, 0x00183870, + 0x00183c70, 0x00184070, 0x00184470, 0x00184870, 0x00184c70, + 0x00185070, 0x00185470, 0x00185870, 0x00185c70, 0x00186070, + 0x00186470, 0x00186870, 0x00186c70, 0x00187070, 0x00187470, + 0x00187870, 0x00187c70, 0x00188070, 0x00188470, 0x00188870, + 0x00188c70, 0x00189070, 0x00189470, 0x00189870, 0x00189c70, + 0x0018a070, 0x0018a470, 0x0018a870, 0x0018ac70, 0x0018b070, + 0x0018b470, 0x0018b870, 0x0018bc70, 0x0018c070, 0x0018c470, + 0x0018c870, 0x0018cc70, 0x0018d070, 0x0018d470, 0x0018d870, + 0x0018dc70, 0x0018e070, 0x0018e470, 0x0018e870, 0x0018ec70, + 0x0018f070, 0x0018f470, 0x0018f870, 0x0018fc70, 0x00190070, + 0x00190470, 0x00190870, 0x00190c70, 0x00191070, 0x00191470, + 0x00191870, 0x00191c70, 0x00192070, 0x00192470, 0x00192870, + 0x00192c70, 0x00193070, 0x00193470, 0x00193870, 0x00193c70, + 0x00194070, 0x00194470, 0x00194870, 0x00194c70, 0x00195070, + 0x00195470, 0x00195870, 0x00195c70, 0x00196070, 0x00196470, + 0x00196870, 0x00196c70, 0x00197070, 0x00197470, 0x00197870, + 0x00197c70, 0x00198070, 0x00198470, 0x00198870, 0x00198c70, + 0x00199070, 0x00199470, 0x00199870, 0x00199c70, 0x0019a070, + 0x0019a470, 0x0019a870, 0x0019ac70, 0x0019b070, 0x0019b470, + 0x0019b870, 0x0019bc70, 0x0019c070, 0x0019c470, 0x0019c870, + 0x0019cc70, 0x0019d070, 0x0019d470, 0x0019d870, 0x0019dc70, + 0x0019e070, 0x0019e470, 0x0019e870, 0x0019ec70, 0x0019f070, + 0x0019f470, 0x0019f870, 0x0019fc70, 0x001a0070, 0x001a0470, + 0x001a0870, 0x001a0c70, 0x001a1070, 0x001a1470, 0x001a1870, + 0x001a1c70, 0x001a2070, 0x001a2470, 0x001a2870, 0x001a2c70, + 0x001a3070, 0x001a3470, 0x001a3870, 0x001a3c70, 0x001a4070, + 0x001a4470, 0x001a4870, 0x001a4c70, 0x001a5070, 0x001a5470, + 0x001a5870, 0x001a5c70, 0x001a6070, 0x001a6470, 0x001a6870, + 0x001a6c70, 0x001a7070, 0x001a7470, 0x001a7870, 0x001a7c70, + 0x001a8070, 0x001a8470, 0x001a8870, 0x001a8c70, 0x001a9070, + 0x001a9470, 0x001a9870, 0x001a9c70, 0x001aa070, 0x001aa470, + 0x001aa870, 0x001aac70, 0x001ab070, 0x001ab470, 0x001ab870, + 0x001abc70, 0x001ac070, 0x001ac470, 0x001ac870, 0x001acc70, + 0x001ad070, 0x001ad470, 0x001ad870, 0x001adc70, 0x001ae070, + 0x001ae470, 0x001ae870, 0x001aec70, 0x001af070, 0x001af470, + 0x001af870, 0x001afc70, 0x001b0070, 0x001b0470, 0x001b0870, + 0x001b0c70, 0x001b1070, 0x001b1470, 0x001b1870, 0x001b1c70, + 0x001b2070, 0x001b2470, 0x001b2870, 0x001b2c70, 0x001b3070, + 0x001b3470, 0x001b3870, 0x001b3c70, 0x001b4070, 0x001b4470, + 0x001b4870, 0x001b4c70, 0x001b5070, 0x001b5470, 0x001b5870, + 0x001b5c70, 0x001b6070, 0x001b6470, 0x001b6870, 0x001b6c70, + 0x001b7070, 0x001b7470, 0x001b7870, 0x001b7c70, 0x001b8070, + 0x001b8470, 0x001b8870, 0x001b8c70, 0x001b9070, 0x001b9470, + 0x001b9870, 0x001b9c70, 0x001ba070, 0x001ba470, 0x001ba870, + 0x001bac70, 0x001bb070, 0x001bb470, 0x001bb870, 0x001bbc70, + 0x001bc070, 0x001bc470, 0x001bc870, 0x001bcc70, 0x001bd070, + 0x001bd470, 0x001bd870, 0x001bdc70, 0x001be070, 0x001be470, + 0x001be870, 0x001bec70, 0x001bf070, 0x001bf470, 0x001bf870, + 0x001bfc70, 0x001c0070, 0x001c0470, 0x001c0870, 0x001c0c70, + 0x001c1070, 0x001c1470, 0x001c1870, 0x001c1c70, 0x001c2070, + 0x001c2470, 0x001c2870, 0x001c2c70, 0x001c3070, 0x001c3470, + 0x001c3870, 0x001c3c70, 0x001c4070, 0x001c4470, 0x001c4870, + 0x001c4c70, 0x001c5070, 0x001c5470, 0x001c5870, 0x001c5c70, + 0x001c6070, 0x001c6470, 0x001c6870, 0x001c6c70, 0x001c7070, + 0x001c7470, 0x001c7870, 0x001c7c70, 0x001c8070, 0x001c8470, + 0x001c8870, 0x001c8c70, 0x001c9070, 0x001c9470, 0x001c9870, + 0x001c9c70, 0x001ca070, 0x001ca470, 0x001ca870, 0x001cac70, + 0x001cb070, 0x001cb470, 0x001cb870, 0x001cbc70, 0x001cc070, + 0x001cc470, 0x001cc870, 0x001ccc70, 0x001cd070, 0x001cd470, + 0x001cd870, 0x001cdc70, 0x001ce070, 0x001ce470, 0x001ce870, + 0x001cec70, 0x001cf070, 0x001cf470, 0x001cf870, 0x001cfc70, + 0x001d0070, 0x001d0470, 0x001d0870, 0x001d0c70, 0x001d1070, + 0x001d1470, 0x001d1870, 0x001d1c70, 0x001d2070, 0x001d2470, + 0x001d2870, 0x001d2c70, 0x001d3070, 0x001d3470, 0x001d3870, + 0x001d3c70, 0x001d4070, 0x001d4470, 0x001d4870, 0x001d4c70, + 0x001d5070, 0x001d5470, 0x001d5870, 0x001d5c70, 0x001d6070, + 0x001d6470, 0x001d6870, 0x001d6c70, 0x001d7070, 0x001d7470, + 0x001d7870, 0x001d7c70, 0x001d8070, 0x001d8470, 0x001d8870, + 0x001d8c70, 0x001d9070, 0x001d9470, 0x001d9870, 0x001d9c70, + 0x001da070, 0x001da470, 0x001da870, 0x001dac70, 0x001db070, + 0x001db470, 0x001db870, 0x001dbc70, 0x001dc070, 0x001dc470, + 0x001dc870, 0x001dcc70, 0x001dd070, 0x001dd470, 0x001dd870, + 0x001ddc70, 0x001de070, 0x001de470, 0x001de870, 0x001dec70, + 0x001df070, 0x001df470, 0x001df870, 0x001dfc70, 0x001e0070, + 0x001e0470, 0x001e0870, 0x001e0c70, 0x001e1070, 0x001e1470, + 0x001e1870, 0x001e1c70, 0x001e2070, 0x001e2470, 0x001e2870, + 0x001e2c70, 0x001e3070, 0x001e3470, 0x001e3870, 0x001e3c70, + 0x001e4070, 0x001e4470, 0x001e4870, 0x001e4c70, 0x001e5070, + 0x001e5470, 0x001e5870, 0x001e5c70, 0x001e6070, 0x001e6470, + 0x001e6870, 0x001e6c70, 0x001e7070, 0x001e7470, 0x001e7870, + 0x001e7c70, 0x001e8070, 0x001e8470, 0x001e8870, 0x001e8c70, + 0x001e9070, 0x001e9470, 0x001e9870, 0x001e9c70, 0x001ea070, + 0x001ea470, 0x001ea870, 0x001eac70, 0x001eb070, 0x001eb470, + 0x001eb870, 0x001ebc70, 0x001ec070, 0x001ec470, 0x001ec870, + 0x001ecc70, 0x001ed070, 0x001ed470, 0x001ed870, 0x001edc70, + 0x001ee070, 0x001ee470, 0x001ee870, 0x001eec70, 0x001ef070, + 0x001ef470, 0x001ef870, 0x001efc70, 0x001f0070, 0x001f0470, + 0x001f0870, 0x001f0c70, 0x001f1070, 0x001f1470, 0x001f1870, + 0x001f1c70, 0x001f2070, 0x001f2470, 0x001f2870, 0x001f2c70, + 0x001f3070, 0x001f3470, 0x001f3870, 0x001f3c70, 0x001f4070, + 0x001f4470, 0x001f4870, 0x001f4c70, 0x001f5070, 0x001f5470, + 0x001f5870, 0x001f5c70, 0x001f6070, 0x001f6470, 0x001f6870, + 0x001f6c70, 0x001f7070, 0x001f7470, 0x001f7870, 0x001f7c70, + 0x001f8070, 0x001f8470, 0x001f8870, 0x001f8c70, 0x001f9070, + 0x001f9470, 0x001f9870, 0x001f9c70, 0x001fa070, 0x001fa470, + 0x001fa870, 0x001fac70, 0x001fb070, 0x001fb470, 0x001fb870, + 0x001fbc70, 0x001fc070, 0x001fc470, 0x001fc870, 0x001fcc70, + 0x001fd070, 0x001fd470, 0x001fd870, 0x001fdc70, 0x001fe070, + 0x001fe470, 0x001fe870, 0x001fec70, 0x001ff070, 0x001ff470, + 0x001ff870, 0x001ffc70, 0x00000270, 0x00000670, 0x00000a70, + 0x00000e70, 0x00001270, 0x00001670, 0x00001a70, 0x00001e70, + 0x00002270, 0x00002670, 0x00002a70, 0x00002e70, 0x00003270, + 0x00003670, 0x00003a70, 0x00003e70, 0x00004270, 0x00004670, + 0x00004a70, 0x00004e70, 0x00005270, 0x00005670, 0x00005a70, + 0x00005e70, 0x00006270, 0x00006670, 0x00006a70, 0x00006e70, + 0x00007270, 0x00007670, 0x00007a70, 0x00007e70, 0x00008270, + 0x00008670, 0x00008a70, 0x00008e70, 0x00009270, 0x00009670, + 0x00009a70, 0x00009e70, 0x0000a270, 0x0000a670, 0x0000aa70, + 0x0000ae70, 0x0000b270, 0x0000b670, 0x0000ba70, 0x0000be70, + 0x0000c270, 0x0000c670, 0x0000ca70, 0x0000ce70, 0x0000d270, + 0x0000d670, 0x0000da70, 0x0000de70, 0x0000e270, 0x0000e670, + 0x0000ea70, 0x0000ee70, 0x0000f270, 0x0000f670, 0x0000fa70, + 0x0000fe70, 0x00010270, 0x00010670, 0x00010a70, 0x00010e70, + 0x00011270, 0x00011670, 0x00011a70, 0x00011e70, 0x00012270, + 0x00012670, 0x00012a70, 0x00012e70, 0x00013270, 0x00013670, + 0x00013a70, 0x00013e70, 0x00014270, 0x00014670, 0x00014a70, + 0x00014e70, 0x00015270, 0x00015670, 0x00015a70, 0x00015e70, + 0x00016270, 0x00016670, 0x00016a70, 0x00016e70, 0x00017270, + 0x00017670, 0x00017a70, 0x00017e70, 0x00018270, 0x00018670, + 0x00018a70, 0x00018e70, 0x00019270, 0x00019670, 0x00019a70, + 0x00019e70, 0x0001a270, 0x0001a670, 0x0001aa70, 0x0001ae70, + 0x0001b270, 0x0001b670, 0x0001ba70, 0x0001be70, 0x0001c270, + 0x0001c670, 0x0001ca70, 0x0001ce70, 0x0001d270, 0x0001d670, + 0x0001da70, 0x0001de70, 0x0001e270, 0x0001e670, 0x0001ea70, + 0x0001ee70, 0x0001f270, 0x0001f670, 0x0001fa70, 0x0001fe70, + 0x00020270, 0x00020670, 0x00020a70, 0x00020e70, 0x00021270, + 0x00021670, 0x00021a70, 0x00021e70, 0x00022270, 0x00022670, + 0x00022a70, 0x00022e70, 0x00023270, 0x00023670, 0x00023a70, + 0x00023e70, 0x00024270, 0x00024670, 0x00024a70, 0x00024e70, + 0x00025270, 0x00025670, 0x00025a70, 0x00025e70, 0x00026270, + 0x00026670, 0x00026a70, 0x00026e70, 0x00027270, 0x00027670, + 0x00027a70, 0x00027e70, 0x00028270, 0x00028670, 0x00028a70, + 0x00028e70, 0x00029270, 0x00029670, 0x00029a70, 0x00029e70, + 0x0002a270, 0x0002a670, 0x0002aa70, 0x0002ae70, 0x0002b270, + 0x0002b670, 0x0002ba70, 0x0002be70, 0x0002c270, 0x0002c670, + 0x0002ca70, 0x0002ce70, 0x0002d270, 0x0002d670, 0x0002da70, + 0x0002de70, 0x0002e270, 0x0002e670, 0x0002ea70, 0x0002ee70, + 0x0002f270, 0x0002f670, 0x0002fa70, 0x0002fe70, 0x00030270, + 0x00030670, 0x00030a70, 0x00030e70, 0x00031270, 0x00031670, + 0x00031a70, 0x00031e70, 0x00032270, 0x00032670, 0x00032a70, + 0x00032e70, 0x00033270, 0x00033670, 0x00033a70, 0x00033e70, + 0x00034270, 0x00034670, 0x00034a70, 0x00034e70, 0x00035270, + 0x00035670, 0x00035a70, 0x00035e70, 0x00036270, 0x00036670, + 0x00036a70, 0x00036e70, 0x00037270, 0x00037670, 0x00037a70, + 0x00037e70, 0x00038270, 0x00038670, 0x00038a70, 0x00038e70, + 0x00039270, 0x00039670, 0x00039a70, 0x00039e70, 0x0003a270, + 0x0003a670, 0x0003aa70, 0x0003ae70, 0x0003b270, 0x0003b670, + 0x0003ba70, 0x0003be70, 0x0003c270, 0x0003c670, 0x0003ca70, + 0x0003ce70, 0x0003d270, 0x0003d670, 0x0003da70, 0x0003de70, + 0x0003e270, 0x0003e670, 0x0003ea70, 0x0003ee70, 0x0003f270, + 0x0003f670, 0x0003fa70, 0x0003fe70, 0x00040270, 0x00040670, + 0x00040a70, 0x00040e70, 0x00041270, 0x00041670, 0x00041a70, + 0x00041e70, 0x00042270, 0x00042670, 0x00042a70, 0x00042e70, + 0x00043270, 0x00043670, 0x00043a70, 0x00043e70, 0x00044270, + 0x00044670, 0x00044a70, 0x00044e70, 0x00045270, 0x00045670, + 0x00045a70, 0x00045e70, 0x00046270, 0x00046670, 0x00046a70, + 0x00046e70, 0x00047270, 0x00047670, 0x00047a70, 0x00047e70, + 0x00048270, 0x00048670, 0x00048a70, 0x00048e70, 0x00049270, + 0x00049670, 0x00049a70, 0x00049e70, 0x0004a270, 0x0004a670, + 0x0004aa70, 0x0004ae70, 0x0004b270, 0x0004b670, 0x0004ba70, + 0x0004be70, 0x0004c270, 0x0004c670, 0x0004ca70, 0x0004ce70, + 0x0004d270, 0x0004d670, 0x0004da70, 0x0004de70, 0x0004e270, + 0x0004e670, 0x0004ea70, 0x0004ee70, 0x0004f270, 0x0004f670, + 0x0004fa70, 0x0004fe70, 0x00050270, 0x00050670, 0x00050a70, + 0x00050e70, 0x00051270, 0x00051670, 0x00051a70, 0x00051e70, + 0x00052270, 0x00052670, 0x00052a70, 0x00052e70, 0x00053270, + 0x00053670, 0x00053a70, 0x00053e70, 0x00054270, 0x00054670, + 0x00054a70, 0x00054e70, 0x00055270, 0x00055670, 0x00055a70, + 0x00055e70, 0x00056270, 0x00056670, 0x00056a70, 0x00056e70, + 0x00057270, 0x00057670, 0x00057a70, 0x00057e70, 0x00058270, + 0x00058670, 0x00058a70, 0x00058e70, 0x00059270, 0x00059670, + 0x00059a70, 0x00059e70, 0x0005a270, 0x0005a670, 0x0005aa70, + 0x0005ae70, 0x0005b270, 0x0005b670, 0x0005ba70, 0x0005be70, + 0x0005c270, 0x0005c670, 0x0005ca70, 0x0005ce70, 0x0005d270, + 0x0005d670, 0x0005da70, 0x0005de70, 0x0005e270, 0x0005e670, + 0x0005ea70, 0x0005ee70, 0x0005f270, 0x0005f670, 0x0005fa70, + 0x0005fe70, 0x00060270, 0x00060670, 0x00060a70, 0x00060e70, + 0x00061270, 0x00061670, 0x00061a70, 0x00061e70, 0x00062270, + 0x00062670, 0x00062a70, 0x00062e70, 0x00063270, 0x00063670, + 0x00063a70, 0x00063e70, 0x00064270, 0x00064670, 0x00064a70, + 0x00064e70, 0x00065270, 0x00065670, 0x00065a70, 0x00065e70, + 0x00066270, 0x00066670, 0x00066a70, 0x00066e70, 0x00067270, + 0x00067670, 0x00067a70, 0x00067e70, 0x00068270, 0x00068670, + 0x00068a70, 0x00068e70, 0x00069270, 0x00069670, 0x00069a70, + 0x00069e70, 0x0006a270, 0x0006a670, 0x0006aa70, 0x0006ae70, + 0x0006b270, 0x0006b670, 0x0006ba70, 0x0006be70, 0x0006c270, + 0x0006c670, 0x0006ca70, 0x0006ce70, 0x0006d270, 0x0006d670, + 0x0006da70, 0x0006de70, 0x0006e270, 0x0006e670, 0x0006ea70, + 0x0006ee70, 0x0006f270, 0x0006f670, 0x0006fa70, 0x0006fe70, + 0x00070270, 0x00070670, 0x00070a70, 0x00070e70, 0x00071270, + 0x00071670, 0x00071a70, 0x00071e70, 0x00072270, 0x00072670, + 0x00072a70, 0x00072e70, 0x00073270, 0x00073670, 0x00073a70, + 0x00073e70, 0x00074270, 0x00074670, 0x00074a70, 0x00074e70, + 0x00075270, 0x00075670, 0x00075a70, 0x00075e70, 0x00076270, + 0x00076670, 0x00076a70, 0x00076e70, 0x00077270, 0x00077670, + 0x00077a70, 0x00077e70, 0x00078270, 0x00078670, 0x00078a70, + 0x00078e70, 0x00079270, 0x00079670, 0x00079a70, 0x00079e70, + 0x0007a270, 0x0007a670, 0x0007aa70, 0x0007ae70, 0x0007b270, + 0x0007b670, 0x0007ba70, 0x0007be70, 0x0007c270, 0x0007c670, + 0x0007ca70, 0x0007ce70, 0x0007d270, 0x0007d670, 0x0007da70, + 0x0007de70, 0x0007e270, 0x0007e670, 0x0007ea70, 0x0007ee70, + 0x0007f270, 0x0007f670, 0x0007fa70, 0x0007fe70, 0x00080270, + 0x00080670, 0x00080a70, 0x00080e70, 0x00081270, 0x00081670, + 0x00081a70, 0x00081e70, 0x00082270, 0x00082670, 0x00082a70, + 0x00082e70, 0x00083270, 0x00083670, 0x00083a70, 0x00083e70, + 0x00084270, 0x00084670, 0x00084a70, 0x00084e70, 0x00085270, + 0x00085670, 0x00085a70, 0x00085e70, 0x00086270, 0x00086670, + 0x00086a70, 0x00086e70, 0x00087270, 0x00087670, 0x00087a70, + 0x00087e70, 0x00088270, 0x00088670, 0x00088a70, 0x00088e70, + 0x00089270, 0x00089670, 0x00089a70, 0x00089e70, 0x0008a270, + 0x0008a670, 0x0008aa70, 0x0008ae70, 0x0008b270, 0x0008b670, + 0x0008ba70, 0x0008be70, 0x0008c270, 0x0008c670, 0x0008ca70, + 0x0008ce70, 0x0008d270, 0x0008d670, 0x0008da70, 0x0008de70, + 0x0008e270, 0x0008e670, 0x0008ea70, 0x0008ee70, 0x0008f270, + 0x0008f670, 0x0008fa70, 0x0008fe70, 0x00090270, 0x00090670, + 0x00090a70, 0x00090e70, 0x00091270, 0x00091670, 0x00091a70, + 0x00091e70, 0x00092270, 0x00092670, 0x00092a70, 0x00092e70, + 0x00093270, 0x00093670, 0x00093a70, 0x00093e70, 0x00094270, + 0x00094670, 0x00094a70, 0x00094e70, 0x00095270, 0x00095670, + 0x00095a70, 0x00095e70, 0x00096270, 0x00096670, 0x00096a70, + 0x00096e70, 0x00097270, 0x00097670, 0x00097a70, 0x00097e70, + 0x00098270, 0x00098670, 0x00098a70, 0x00098e70, 0x00099270, + 0x00099670, 0x00099a70, 0x00099e70, 0x0009a270, 0x0009a670, + 0x0009aa70, 0x0009ae70, 0x0009b270, 0x0009b670, 0x0009ba70, + 0x0009be70, 0x0009c270, 0x0009c670, 0x0009ca70, 0x0009ce70, + 0x0009d270, 0x0009d670, 0x0009da70, 0x0009de70, 0x0009e270, + 0x0009e670, 0x0009ea70, 0x0009ee70, 0x0009f270, 0x0009f670, + 0x0009fa70, 0x0009fe70, 0x000a0270, 0x000a0670, 0x000a0a70, + 0x000a0e70, 0x000a1270, 0x000a1670, 0x000a1a70, 0x000a1e70, + 0x000a2270, 0x000a2670, 0x000a2a70, 0x000a2e70, 0x000a3270, + 0x000a3670, 0x000a3a70, 0x000a3e70, 0x000a4270, 0x000a4670, + 0x000a4a70, 0x000a4e70, 0x000a5270, 0x000a5670, 0x000a5a70, + 0x000a5e70, 0x000a6270, 0x000a6670, 0x000a6a70, 0x000a6e70, + 0x000a7270, 0x000a7670, 0x000a7a70, 0x000a7e70, 0x000a8270, + 0x000a8670, 0x000a8a70, 0x000a8e70, 0x000a9270, 0x000a9670, + 0x000a9a70, 0x000a9e70, 0x000aa270, 0x000aa670, 0x000aaa70, + 0x000aae70, 0x000ab270, 0x000ab670, 0x000aba70, 0x000abe70, + 0x000ac270, 0x000ac670, 0x000aca70, 0x000ace70, 0x000ad270, + 0x000ad670, 0x000ada70, 0x000ade70, 0x000ae270, 0x000ae670, + 0x000aea70, 0x000aee70, 0x000af270, 0x000af670, 0x000afa70, + 0x000afe70, 0x000b0270, 0x000b0670, 0x000b0a70, 0x000b0e70, + 0x000b1270, 0x000b1670, 0x000b1a70, 0x000b1e70, 0x000b2270, + 0x000b2670, 0x000b2a70, 0x000b2e70, 0x000b3270, 0x000b3670, + 0x000b3a70, 0x000b3e70, 0x000b4270, 0x000b4670, 0x000b4a70, + 0x000b4e70, 0x000b5270, 0x000b5670, 0x000b5a70, 0x000b5e70, + 0x000b6270, 0x000b6670, 0x000b6a70, 0x000b6e70, 0x000b7270, + 0x000b7670, 0x000b7a70, 0x000b7e70, 0x000b8270, 0x000b8670, + 0x000b8a70, 0x000b8e70, 0x000b9270, 0x000b9670, 0x000b9a70, + 0x000b9e70, 0x000ba270, 0x000ba670, 0x000baa70, 0x000bae70, + 0x000bb270, 0x000bb670, 0x000bba70, 0x000bbe70, 0x000bc270, + 0x000bc670, 0x000bca70, 0x000bce70, 0x000bd270, 0x000bd670, + 0x000bda70, 0x000bde70, 0x000be270, 0x000be670, 0x000bea70, + 0x000bee70, 0x000bf270, 0x000bf670, 0x000bfa70, 0x000bfe70, + 0x000c0270, 0x000c0670, 0x000c0a70, 0x000c0e70, 0x000c1270, + 0x000c1670, 0x000c1a70, 0x000c1e70, 0x000c2270, 0x000c2670, + 0x000c2a70, 0x000c2e70, 0x000c3270, 0x000c3670, 0x000c3a70, + 0x000c3e70, 0x000c4270, 0x000c4670, 0x000c4a70, 0x000c4e70, + 0x000c5270, 0x000c5670, 0x000c5a70, 0x000c5e70, 0x000c6270, + 0x000c6670, 0x000c6a70, 0x000c6e70, 0x000c7270, 0x000c7670, + 0x000c7a70, 0x000c7e70, 0x000c8270, 0x000c8670, 0x000c8a70, + 0x000c8e70, 0x000c9270, 0x000c9670, 0x000c9a70, 0x000c9e70, + 0x000ca270, 0x000ca670, 0x000caa70, 0x000cae70, 0x000cb270, + 0x000cb670, 0x000cba70, 0x000cbe70, 0x000cc270, 0x000cc670, + 0x000cca70, 0x000cce70, 0x000cd270, 0x000cd670, 0x000cda70, + 0x000cde70, 0x000ce270, 0x000ce670, 0x000cea70, 0x000cee70, + 0x000cf270, 0x000cf670, 0x000cfa70, 0x000cfe70, 0x000d0270, + 0x000d0670, 0x000d0a70, 0x000d0e70, 0x000d1270, 0x000d1670, + 0x000d1a70, 0x000d1e70, 0x000d2270, 0x000d2670, 0x000d2a70, + 0x000d2e70, 0x000d3270, 0x000d3670, 0x000d3a70, 0x000d3e70, + 0x000d4270, 0x000d4670, 0x000d4a70, 0x000d4e70, 0x000d5270, + 0x000d5670, 0x000d5a70, 0x000d5e70, 0x000d6270, 0x000d6670, + 0x000d6a70, 0x000d6e70, 0x000d7270, 0x000d7670, 0x000d7a70, + 0x000d7e70, 0x000d8270, 0x000d8670, 0x000d8a70, 0x000d8e70, + 0x000d9270, 0x000d9670, 0x000d9a70, 0x000d9e70, 0x000da270, + 0x000da670, 0x000daa70, 0x000dae70, 0x000db270, 0x000db670, + 0x000dba70, 0x000dbe70, 0x000dc270, 0x000dc670, 0x000dca70, + 0x000dce70, 0x000dd270, 0x000dd670, 0x000dda70, 0x000dde70, + 0x000de270, 0x000de670, 0x000dea70, 0x000dee70, 0x000df270, + 0x000df670, 0x000dfa70, 0x000dfe70, 0x000e0270, 0x000e0670, + 0x000e0a70, 0x000e0e70, 0x000e1270, 0x000e1670, 0x000e1a70, + 0x000e1e70, 0x000e2270, 0x000e2670, 0x000e2a70, 0x000e2e70, + 0x000e3270, 0x000e3670, 0x000e3a70, 0x000e3e70, 0x000e4270, + 0x000e4670, 0x000e4a70, 0x000e4e70, 0x000e5270, 0x000e5670, + 0x000e5a70, 0x000e5e70, 0x000e6270, 0x000e6670, 0x000e6a70, + 0x000e6e70, 0x000e7270, 0x000e7670, 0x000e7a70, 0x000e7e70, + 0x000e8270, 0x000e8670, 0x000e8a70, 0x000e8e70, 0x000e9270, + 0x000e9670, 0x000e9a70, 0x000e9e70, 0x000ea270, 0x000ea670, + 0x000eaa70, 0x000eae70, 0x000eb270, 0x000eb670, 0x000eba70, + 0x000ebe70, 0x000ec270, 0x000ec670, 0x000eca70, 0x000ece70, + 0x000ed270, 0x000ed670, 0x000eda70, 0x000ede70, 0x000ee270, + 0x000ee670, 0x000eea70, 0x000eee70, 0x000ef270, 0x000ef670, + 0x000efa70, 0x000efe70, 0x000f0270, 0x000f0670, 0x000f0a70, + 0x000f0e70, 0x000f1270, 0x000f1670, 0x000f1a70, 0x000f1e70, + 0x000f2270, 0x000f2670, 0x000f2a70, 0x000f2e70, 0x000f3270, + 0x000f3670, 0x000f3a70, 0x000f3e70, 0x000f4270, 0x000f4670, + 0x000f4a70, 0x000f4e70, 0x000f5270, 0x000f5670, 0x000f5a70, + 0x000f5e70, 0x000f6270, 0x000f6670, 0x000f6a70, 0x000f6e70, + 0x000f7270, 0x000f7670, 0x000f7a70, 0x000f7e70, 0x000f8270, + 0x000f8670, 0x000f8a70, 0x000f8e70, 0x000f9270, 0x000f9670, + 0x000f9a70, 0x000f9e70, 0x000fa270, 0x000fa670, 0x000faa70, + 0x000fae70, 0x000fb270, 0x000fb670, 0x000fba70, 0x000fbe70, + 0x000fc270, 0x000fc670, 0x000fca70, 0x000fce70, 0x000fd270, + 0x000fd670, 0x000fda70, 0x000fde70, 0x000fe270, 0x000fe670, + 0x000fea70, 0x000fee70, 0x000ff270, 0x000ff670, 0x000ffa70, + 0x000ffe70, 0x00100270, 0x00100670, 0x00100a70, 0x00100e70, + 0x00101270, 0x00101670, 0x00101a70, 0x00101e70, 0x00102270, + 0x00102670, 0x00102a70, 0x00102e70, 0x00103270, 0x00103670, + 0x00103a70, 0x00103e70, 0x00104270, 0x00104670, 0x00104a70, + 0x00104e70, 0x00105270, 0x00105670, 0x00105a70, 0x00105e70, + 0x00106270, 0x00106670, 0x00106a70, 0x00106e70, 0x00107270, + 0x00107670, 0x00107a70, 0x00107e70, 0x00108270, 0x00108670, + 0x00108a70, 0x00108e70, 0x00109270, 0x00109670, 0x00109a70, + 0x00109e70, 0x0010a270, 0x0010a670, 0x0010aa70, 0x0010ae70, + 0x0010b270, 0x0010b670, 0x0010ba70, 0x0010be70, 0x0010c270, + 0x0010c670, 0x0010ca70, 0x0010ce70, 0x0010d270, 0x0010d670, + 0x0010da70, 0x0010de70, 0x0010e270, 0x0010e670, 0x0010ea70, + 0x0010ee70, 0x0010f270, 0x0010f670, 0x0010fa70, 0x0010fe70, + 0x00110270, 0x00110670, 0x00110a70, 0x00110e70, 0x00111270, + 0x00111670, 0x00111a70, 0x00111e70, 0x00112270, 0x00112670, + 0x00112a70, 0x00112e70, 0x00113270, 0x00113670, 0x00113a70, + 0x00113e70, 0x00114270, 0x00114670, 0x00114a70, 0x00114e70, + 0x00115270, 0x00115670, 0x00115a70, 0x00115e70, 0x00116270, + 0x00116670, 0x00116a70, 0x00116e70, 0x00117270, 0x00117670, + 0x00117a70, 0x00117e70, 0x00118270, 0x00118670, 0x00118a70, + 0x00118e70, 0x00119270, 0x00119670, 0x00119a70, 0x00119e70, + 0x0011a270, 0x0011a670, 0x0011aa70, 0x0011ae70, 0x0011b270, + 0x0011b670, 0x0011ba70, 0x0011be70, 0x0011c270, 0x0011c670, + 0x0011ca70, 0x0011ce70, 0x0011d270, 0x0011d670, 0x0011da70, + 0x0011de70, 0x0011e270, 0x0011e670, 0x0011ea70, 0x0011ee70, + 0x0011f270, 0x0011f670, 0x0011fa70, 0x0011fe70, 0x00120270, + 0x00120670, 0x00120a70, 0x00120e70, 0x00121270, 0x00121670, + 0x00121a70, 0x00121e70, 0x00122270, 0x00122670, 0x00122a70, + 0x00122e70, 0x00123270, 0x00123670, 0x00123a70, 0x00123e70, + 0x00124270, 0x00124670, 0x00124a70, 0x00124e70, 0x00125270, + 0x00125670, 0x00125a70, 0x00125e70, 0x00126270, 0x00126670, + 0x00126a70, 0x00126e70, 0x00127270, 0x00127670, 0x00127a70, + 0x00127e70, 0x00128270, 0x00128670, 0x00128a70, 0x00128e70, + 0x00129270, 0x00129670, 0x00129a70, 0x00129e70, 0x0012a270, + 0x0012a670, 0x0012aa70, 0x0012ae70, 0x0012b270, 0x0012b670, + 0x0012ba70, 0x0012be70, 0x0012c270, 0x0012c670, 0x0012ca70, + 0x0012ce70, 0x0012d270, 0x0012d670, 0x0012da70, 0x0012de70, + 0x0012e270, 0x0012e670, 0x0012ea70, 0x0012ee70, 0x0012f270, + 0x0012f670, 0x0012fa70, 0x0012fe70, 0x00130270, 0x00130670, + 0x00130a70, 0x00130e70, 0x00131270, 0x00131670, 0x00131a70, + 0x00131e70, 0x00132270, 0x00132670, 0x00132a70, 0x00132e70, + 0x00133270, 0x00133670, 0x00133a70, 0x00133e70, 0x00134270, + 0x00134670, 0x00134a70, 0x00134e70, 0x00135270, 0x00135670, + 0x00135a70, 0x00135e70, 0x00136270, 0x00136670, 0x00136a70, + 0x00136e70, 0x00137270, 0x00137670, 0x00137a70, 0x00137e70, + 0x00138270, 0x00138670, 0x00138a70, 0x00138e70, 0x00139270, + 0x00139670, 0x00139a70, 0x00139e70, 0x0013a270, 0x0013a670, + 0x0013aa70, 0x0013ae70, 0x0013b270, 0x0013b670, 0x0013ba70, + 0x0013be70, 0x0013c270, 0x0013c670, 0x0013ca70, 0x0013ce70, + 0x0013d270, 0x0013d670, 0x0013da70, 0x0013de70, 0x0013e270, + 0x0013e670, 0x0013ea70, 0x0013ee70, 0x0013f270, 0x0013f670, + 0x0013fa70, 0x0013fe70, 0x00140270, 0x00140670, 0x00140a70, + 0x00140e70, 0x00141270, 0x00141670, 0x00141a70, 0x00141e70, + 0x00142270, 0x00142670, 0x00142a70, 0x00142e70, 0x00143270, + 0x00143670, 0x00143a70, 0x00143e70, 0x00144270, 0x00144670, + 0x00144a70, 0x00144e70, 0x00145270, 0x00145670, 0x00145a70, + 0x00145e70, 0x00146270, 0x00146670, 0x00146a70, 0x00146e70, + 0x00147270, 0x00147670, 0x00147a70, 0x00147e70, 0x00148270, + 0x00148670, 0x00148a70, 0x00148e70, 0x00149270, 0x00149670, + 0x00149a70, 0x00149e70, 0x0014a270, 0x0014a670, 0x0014aa70, + 0x0014ae70, 0x0014b270, 0x0014b670, 0x0014ba70, 0x0014be70, + 0x0014c270, 0x0014c670, 0x0014ca70, 0x0014ce70, 0x0014d270, + 0x0014d670, 0x0014da70, 0x0014de70, 0x0014e270, 0x0014e670, + 0x0014ea70, 0x0014ee70, 0x0014f270, 0x0014f670, 0x0014fa70, + 0x0014fe70, 0x00150270, 0x00150670, 0x00150a70, 0x00150e70, + 0x00151270, 0x00151670, 0x00151a70, 0x00151e70, 0x00152270, + 0x00152670, 0x00152a70, 0x00152e70, 0x00153270, 0x00153670, + 0x00153a70, 0x00153e70, 0x00154270, 0x00154670, 0x00154a70, + 0x00154e70, 0x00155270, 0x00155670, 0x00155a70, 0x00155e70, + 0x00156270, 0x00156670, 0x00156a70, 0x00156e70, 0x00157270, + 0x00157670, 0x00157a70, 0x00157e70, 0x00158270, 0x00158670, + 0x00158a70, 0x00158e70, 0x00159270, 0x00159670, 0x00159a70, + 0x00159e70, 0x0015a270, 0x0015a670, 0x0015aa70, 0x0015ae70, + 0x0015b270, 0x0015b670, 0x0015ba70, 0x0015be70, 0x0015c270, + 0x0015c670, 0x0015ca70, 0x0015ce70, 0x0015d270, 0x0015d670, + 0x0015da70, 0x0015de70, 0x0015e270, 0x0015e670, 0x0015ea70, + 0x0015ee70, 0x0015f270, 0x0015f670, 0x0015fa70, 0x0015fe70, + 0x00160270, 0x00160670, 0x00160a70, 0x00160e70, 0x00161270, + 0x00161670, 0x00161a70, 0x00161e70, 0x00162270, 0x00162670, + 0x00162a70, 0x00162e70, 0x00163270, 0x00163670, 0x00163a70, + 0x00163e70, 0x00164270, 0x00164670, 0x00164a70, 0x00164e70, + 0x00165270, 0x00165670, 0x00165a70, 0x00165e70, 0x00166270, + 0x00166670, 0x00166a70, 0x00166e70, 0x00167270, 0x00167670, + 0x00167a70, 0x00167e70, 0x00168270, 0x00168670, 0x00168a70, + 0x00168e70, 0x00169270, 0x00169670, 0x00169a70, 0x00169e70, + 0x0016a270, 0x0016a670, 0x0016aa70, 0x0016ae70, 0x0016b270, + 0x0016b670, 0x0016ba70, 0x0016be70, 0x0016c270, 0x0016c670, + 0x0016ca70, 0x0016ce70, 0x0016d270, 0x0016d670, 0x0016da70, + 0x0016de70, 0x0016e270, 0x0016e670, 0x0016ea70, 0x0016ee70, + 0x0016f270, 0x0016f670, 0x0016fa70, 0x0016fe70, 0x00170270, + 0x00170670, 0x00170a70, 0x00170e70, 0x00171270, 0x00171670, + 0x00171a70, 0x00171e70, 0x00172270, 0x00172670, 0x00172a70, + 0x00172e70, 0x00173270, 0x00173670, 0x00173a70, 0x00173e70, + 0x00174270, 0x00174670, 0x00174a70, 0x00174e70, 0x00175270, + 0x00175670, 0x00175a70, 0x00175e70, 0x00176270, 0x00176670, + 0x00176a70, 0x00176e70, 0x00177270, 0x00177670, 0x00177a70, + 0x00177e70, 0x00178270, 0x00178670, 0x00178a70, 0x00178e70, + 0x00179270, 0x00179670, 0x00179a70, 0x00179e70, 0x0017a270, + 0x0017a670, 0x0017aa70, 0x0017ae70, 0x0017b270, 0x0017b670, + 0x0017ba70, 0x0017be70, 0x0017c270, 0x0017c670, 0x0017ca70, + 0x0017ce70, 0x0017d270, 0x0017d670, 0x0017da70, 0x0017de70, + 0x0017e270, 0x0017e670, 0x0017ea70, 0x0017ee70, 0x0017f270, + 0x0017f670, 0x0017fa70, 0x0017fe70, 0x00180270, 0x00180670, + 0x00180a70, 0x00180e70, 0x00181270, 0x00181670, 0x00181a70, + 0x00181e70, 0x00182270, 0x00182670, 0x00182a70, 0x00182e70, + 0x00183270, 0x00183670, 0x00183a70, 0x00183e70, 0x00184270, + 0x00184670, 0x00184a70, 0x00184e70, 0x00185270, 0x00185670, + 0x00185a70, 0x00185e70, 0x00186270, 0x00186670, 0x00186a70, + 0x00186e70, 0x00187270, 0x00187670, 0x00187a70, 0x00187e70, + 0x00188270, 0x00188670, 0x00188a70, 0x00188e70, 0x00189270, + 0x00189670, 0x00189a70, 0x00189e70, 0x0018a270, 0x0018a670, + 0x0018aa70, 0x0018ae70, 0x0018b270, 0x0018b670, 0x0018ba70, + 0x0018be70, 0x0018c270, 0x0018c670, 0x0018ca70, 0x0018ce70, + 0x0018d270, 0x0018d670, 0x0018da70, 0x0018de70, 0x0018e270, + 0x0018e670, 0x0018ea70, 0x0018ee70, 0x0018f270, 0x0018f670, + 0x0018fa70, 0x0018fe70, 0x00190270, 0x00190670, 0x00190a70, + 0x00190e70, 0x00191270, 0x00191670, 0x00191a70, 0x00191e70, + 0x00192270, 0x00192670, 0x00192a70, 0x00192e70, 0x00193270, + 0x00193670, 0x00193a70, 0x00193e70, 0x00194270, 0x00194670, + 0x00194a70, 0x00194e70, 0x00195270, 0x00195670, 0x00195a70, + 0x00195e70, 0x00196270, 0x00196670, 0x00196a70, 0x00196e70, + 0x00197270, 0x00197670, 0x00197a70, 0x00197e70, 0x00198270, + 0x00198670, 0x00198a70, 0x00198e70, 0x00199270, 0x00199670, + 0x00199a70, 0x00199e70, 0x0019a270, 0x0019a670, 0x0019aa70, + 0x0019ae70, 0x0019b270, 0x0019b670, 0x0019ba70, 0x0019be70, + 0x0019c270, 0x0019c670, 0x0019ca70, 0x0019ce70, 0x0019d270, + 0x0019d670, 0x0019da70, 0x0019de70, 0x0019e270, 0x0019e670, + 0x0019ea70, 0x0019ee70, 0x0019f270, 0x0019f670, 0x0019fa70, + 0x0019fe70, 0x001a0270, 0x001a0670, 0x001a0a70, 0x001a0e70, + 0x001a1270, 0x001a1670, 0x001a1a70, 0x001a1e70, 0x001a2270, + 0x001a2670, 0x001a2a70, 0x001a2e70, 0x001a3270, 0x001a3670, + 0x001a3a70, 0x001a3e70, 0x001a4270, 0x001a4670, 0x001a4a70, + 0x001a4e70, 0x001a5270, 0x001a5670, 0x001a5a70, 0x001a5e70, + 0x001a6270, 0x001a6670, 0x001a6a70, 0x001a6e70, 0x001a7270, + 0x001a7670, 0x001a7a70, 0x001a7e70, 0x001a8270, 0x001a8670, + 0x001a8a70, 0x001a8e70, 0x001a9270, 0x001a9670, 0x001a9a70, + 0x001a9e70, 0x001aa270, 0x001aa670, 0x001aaa70, 0x001aae70, + 0x001ab270, 0x001ab670, 0x001aba70, 0x001abe70, 0x001ac270, + 0x001ac670, 0x001aca70, 0x001ace70, 0x001ad270, 0x001ad670, + 0x001ada70, 0x001ade70, 0x001ae270, 0x001ae670, 0x001aea70, + 0x001aee70, 0x001af270, 0x001af670, 0x001afa70, 0x001afe70, + 0x001b0270, 0x001b0670, 0x001b0a70, 0x001b0e70, 0x001b1270, + 0x001b1670, 0x001b1a70, 0x001b1e70, 0x001b2270, 0x001b2670, + 0x001b2a70, 0x001b2e70, 0x001b3270, 0x001b3670, 0x001b3a70, + 0x001b3e70, 0x001b4270, 0x001b4670, 0x001b4a70, 0x001b4e70, + 0x001b5270, 0x001b5670, 0x001b5a70, 0x001b5e70, 0x001b6270, + 0x001b6670, 0x001b6a70, 0x001b6e70, 0x001b7270, 0x001b7670, + 0x001b7a70, 0x001b7e70, 0x001b8270, 0x001b8670, 0x001b8a70, + 0x001b8e70, 0x001b9270, 0x001b9670, 0x001b9a70, 0x001b9e70, + 0x001ba270, 0x001ba670, 0x001baa70, 0x001bae70, 0x001bb270, + 0x001bb670, 0x001bba70, 0x001bbe70, 0x001bc270, 0x001bc670, + 0x001bca70, 0x001bce70, 0x001bd270, 0x001bd670, 0x001bda70, + 0x001bde70, 0x001be270, 0x001be670, 0x001bea70, 0x001bee70, + 0x001bf270, 0x001bf670, 0x001bfa70, 0x001bfe70, 0x001c0270, + 0x001c0670, 0x001c0a70, 0x001c0e70, 0x001c1270, 0x001c1670, + 0x001c1a70, 0x001c1e70, 0x001c2270, 0x001c2670, 0x001c2a70, + 0x001c2e70, 0x001c3270, 0x001c3670, 0x001c3a70, 0x001c3e70, + 0x001c4270, 0x001c4670, 0x001c4a70, 0x001c4e70, 0x001c5270, + 0x001c5670, 0x001c5a70, 0x001c5e70, 0x001c6270, 0x001c6670, + 0x001c6a70, 0x001c6e70, 0x001c7270, 0x001c7670, 0x001c7a70, + 0x001c7e70, 0x001c8270, 0x001c8670, 0x001c8a70, 0x001c8e70, + 0x001c9270, 0x001c9670, 0x001c9a70, 0x001c9e70, 0x001ca270, + 0x001ca670, 0x001caa70, 0x001cae70, 0x001cb270, 0x001cb670, + 0x001cba70, 0x001cbe70, 0x001cc270, 0x001cc670, 0x001cca70, + 0x001cce70, 0x001cd270, 0x001cd670, 0x001cda70, 0x001cde70, + 0x001ce270, 0x001ce670, 0x001cea70, 0x001cee70, 0x001cf270, + 0x001cf670, 0x001cfa70, 0x001cfe70, 0x001d0270, 0x001d0670, + 0x001d0a70, 0x001d0e70, 0x001d1270, 0x001d1670, 0x001d1a70, + 0x001d1e70, 0x001d2270, 0x001d2670, 0x001d2a70, 0x001d2e70, + 0x001d3270, 0x001d3670, 0x001d3a70, 0x001d3e70, 0x001d4270, + 0x001d4670, 0x001d4a70, 0x001d4e70, 0x001d5270, 0x001d5670, + 0x001d5a70, 0x001d5e70, 0x001d6270, 0x001d6670, 0x001d6a70, + 0x001d6e70, 0x001d7270, 0x001d7670, 0x001d7a70, 0x001d7e70, + 0x001d8270, 0x001d8670, 0x001d8a70, 0x001d8e70, 0x001d9270, + 0x001d9670, 0x001d9a70, 0x001d9e70, 0x001da270, 0x001da670, + 0x001daa70, 0x001dae70, 0x001db270, 0x001db670, 0x001dba70, + 0x001dbe70, 0x001dc270, 0x001dc670, 0x001dca70, 0x001dce70, + 0x001dd270, 0x001dd670, 0x001dda70, 0x001dde70, 0x001de270, + 0x001de670, 0x001dea70, 0x001dee70, 0x001df270, 0x001df670, + 0x001dfa70, 0x001dfe70, 0x001e0270, 0x001e0670, 0x001e0a70, + 0x001e0e70, 0x001e1270, 0x001e1670, 0x001e1a70, 0x001e1e70, + 0x001e2270, 0x001e2670, 0x001e2a70, 0x001e2e70, 0x001e3270, + 0x001e3670, 0x001e3a70, 0x001e3e70, 0x001e4270, 0x001e4670, + 0x001e4a70, 0x001e4e70, 0x001e5270, 0x001e5670, 0x001e5a70, + 0x001e5e70, 0x001e6270, 0x001e6670, 0x001e6a70, 0x001e6e70, + 0x001e7270, 0x001e7670, 0x001e7a70, 0x001e7e70, 0x001e8270, + 0x001e8670, 0x001e8a70, 0x001e8e70, 0x001e9270, 0x001e9670, + 0x001e9a70, 0x001e9e70, 0x001ea270, 0x001ea670, 0x001eaa70, + 0x001eae70, 0x001eb270, 0x001eb670, 0x001eba70, 0x001ebe70, + 0x001ec270, 0x001ec670, 0x001eca70, 0x001ece70, 0x001ed270, + 0x001ed670, 0x001eda70, 0x001ede70, 0x001ee270, 0x001ee670, + 0x001eea70, 0x001eee70, 0x001ef270, 0x001ef670, 0x001efa70, + 0x001efe70, 0x001f0270, 0x001f0670, 0x001f0a70, 0x001f0e70, + 0x001f1270, 0x001f1670, 0x001f1a70, 0x001f1e70, 0x001f2270, + 0x001f2670, 0x001f2a70, 0x001f2e70, 0x001f3270, 0x001f3670, + 0x001f3a70, 0x001f3e70, 0x001f4270, 0x001f4670, 0x001f4a70, + 0x001f4e70, 0x001f5270, 0x001f5670, 0x001f5a70, 0x001f5e70, + 0x001f6270, 0x001f6670, 0x001f6a70, 0x001f6e70, 0x001f7270, + 0x001f7670, 0x001f7a70, 0x001f7e70, 0x001f8270, 0x001f8670, + 0x001f8a70, 0x001f8e70, 0x001f9270, 0x001f9670, 0x001f9a70, + 0x001f9e70, 0x001fa270, 0x001fa670, 0x001faa70, 0x001fae70, + 0x001fb270, 0x001fb670, 0x001fba70, 0x001fbe70, 0x001fc270, + 0x001fc670, 0x001fca70, 0x001fce70, 0x001fd270, 0x001fd670, + 0x001fda70, 0x001fde70, 0x001fe270, 0x001fe670, 0x001fea70, + 0x001fee70, 0x001ff270, 0x001ff670, 0x001ffa70, 0x001ffe70 #endif /* LONGER_HUFFTABLE */ - }, + }, - .len_table = { - 0x00000807, 0x00000407, 0x00000c07, 0x00000207, - 0x00000a07, 0x00000607, 0x00000e07, 0x00000107, - 0x00000908, 0x00001908, 0x00000508, 0x00001508, - 0x00000d08, 0x00001d08, 0x00000308, 0x00001308, - 0x00000b09, 0x00001b09, 0x00002b09, 0x00003b09, - 0x00000709, 0x00001709, 0x00002709, 0x00003709, - 0x00000f09, 0x00001f09, 0x00002f09, 0x00003f09, - 0x00000089, 0x00001089, 0x00002089, 0x00003089, - 0x0000088a, 0x0000188a, 0x0000288a, 0x0000388a, - 0x0000488a, 0x0000588a, 0x0000688a, 0x0000788a, - 0x0000048a, 0x0000148a, 0x0000248a, 0x0000348a, - 0x0000448a, 0x0000548a, 0x0000648a, 0x0000748a, - 0x00000c8a, 0x00001c8a, 0x00002c8a, 0x00003c8a, - 0x00004c8a, 0x00005c8a, 0x00006c8a, 0x00007c8a, - 0x0000028a, 0x0000128a, 0x0000228a, 0x0000328a, - 0x0000428a, 0x0000528a, 0x0000628a, 0x0000728a, - 0x00000a8b, 0x00001a8b, 0x00002a8b, 0x00003a8b, - 0x00004a8b, 0x00005a8b, 0x00006a8b, 0x00007a8b, - 0x00008a8b, 0x00009a8b, 0x0000aa8b, 0x0000ba8b, - 0x0000ca8b, 0x0000da8b, 0x0000ea8b, 0x0000fa8b, - 0x0000068b, 0x0000168b, 0x0000268b, 0x0000368b, - 0x0000468b, 0x0000568b, 0x0000668b, 0x0000768b, - 0x0000868b, 0x0000968b, 0x0000a68b, 0x0000b68b, - 0x0000c68b, 0x0000d68b, 0x0000e68b, 0x0000f68b, - 0x00000e8b, 0x00001e8b, 0x00002e8b, 0x00003e8b, - 0x00004e8b, 0x00005e8b, 0x00006e8b, 0x00007e8b, - 0x00008e8b, 0x00009e8b, 0x0000ae8b, 0x0000be8b, - 0x0000ce8b, 0x0000de8b, 0x0000ee8b, 0x0000fe8b, - 0x0000006c, 0x0000206c, 0x0000406c, 0x0000606c, - 0x0000806c, 0x0000a06c, 0x0000c06c, 0x0000e06c, - 0x0001006c, 0x0001206c, 0x0001406c, 0x0001606c, - 0x0001806c, 0x0001a06c, 0x0001c06c, 0x0001e06c, - 0x0000106d, 0x0000306d, 0x0000506d, 0x0000706d, - 0x0000906d, 0x0000b06d, 0x0000d06d, 0x0000f06d, - 0x0001106d, 0x0001306d, 0x0001506d, 0x0001706d, - 0x0001906d, 0x0001b06d, 0x0001d06d, 0x0001f06d, - 0x0002106d, 0x0002306d, 0x0002506d, 0x0002706d, - 0x0002906d, 0x0002b06d, 0x0002d06d, 0x0002f06d, - 0x0003106d, 0x0003306d, 0x0003506d, 0x0003706d, - 0x0003906d, 0x0003b06d, 0x0003d06d, 0x0003f06d, - 0x0000086d, 0x0000286d, 0x0000486d, 0x0000686d, - 0x0000886d, 0x0000a86d, 0x0000c86d, 0x0000e86d, - 0x0001086d, 0x0001286d, 0x0001486d, 0x0001686d, - 0x0001886d, 0x0001a86d, 0x0001c86d, 0x0001e86d, - 0x0002086d, 0x0002286d, 0x0002486d, 0x0002686d, - 0x0002886d, 0x0002a86d, 0x0002c86d, 0x0002e86d, - 0x0003086d, 0x0003286d, 0x0003486d, 0x0003686d, - 0x0003886d, 0x0003a86d, 0x0003c86d, 0x0003e86d, - 0x0000186d, 0x0000386d, 0x0000586d, 0x0000786d, - 0x0000986d, 0x0000b86d, 0x0000d86d, 0x0000f86d, - 0x0001186d, 0x0001386d, 0x0001586d, 0x0001786d, - 0x0001986d, 0x0001b86d, 0x0001d86d, 0x0001f86d, - 0x0002186d, 0x0002386d, 0x0002586d, 0x0002786d, - 0x0002986d, 0x0002b86d, 0x0002d86d, 0x0002f86d, - 0x0003186d, 0x0003386d, 0x0003586d, 0x0003786d, - 0x0003986d, 0x0003b86d, 0x0003d86d, 0x0003f86d, - 0x0000046d, 0x0000246d, 0x0000446d, 0x0000646d, - 0x0000846d, 0x0000a46d, 0x0000c46d, 0x0000e46d, - 0x0001046d, 0x0001246d, 0x0001446d, 0x0001646d, - 0x0001846d, 0x0001a46d, 0x0001c46d, 0x0001e46d, - 0x0002046d, 0x0002246d, 0x0002446d, 0x0002646d, - 0x0002846d, 0x0002a46d, 0x0002c46d, 0x0002e46d, - 0x0003046d, 0x0003246d, 0x0003446d, 0x0003646d, - 0x0003846d, 0x0003a46d, 0x0003c46d, 0x00001468}, + .len_table = { 0x00000807, 0x00000407, 0x00000c07, 0x00000207, 0x00000a07, + 0x00000607, 0x00000e07, 0x00000107, 0x00000908, 0x00001908, + 0x00000508, 0x00001508, 0x00000d08, 0x00001d08, 0x00000308, + 0x00001308, 0x00000b09, 0x00001b09, 0x00002b09, 0x00003b09, + 0x00000709, 0x00001709, 0x00002709, 0x00003709, 0x00000f09, + 0x00001f09, 0x00002f09, 0x00003f09, 0x00000089, 0x00001089, + 0x00002089, 0x00003089, 0x0000088a, 0x0000188a, 0x0000288a, + 0x0000388a, 0x0000488a, 0x0000588a, 0x0000688a, 0x0000788a, + 0x0000048a, 0x0000148a, 0x0000248a, 0x0000348a, 0x0000448a, + 0x0000548a, 0x0000648a, 0x0000748a, 0x00000c8a, 0x00001c8a, + 0x00002c8a, 0x00003c8a, 0x00004c8a, 0x00005c8a, 0x00006c8a, + 0x00007c8a, 0x0000028a, 0x0000128a, 0x0000228a, 0x0000328a, + 0x0000428a, 0x0000528a, 0x0000628a, 0x0000728a, 0x00000a8b, + 0x00001a8b, 0x00002a8b, 0x00003a8b, 0x00004a8b, 0x00005a8b, + 0x00006a8b, 0x00007a8b, 0x00008a8b, 0x00009a8b, 0x0000aa8b, + 0x0000ba8b, 0x0000ca8b, 0x0000da8b, 0x0000ea8b, 0x0000fa8b, + 0x0000068b, 0x0000168b, 0x0000268b, 0x0000368b, 0x0000468b, + 0x0000568b, 0x0000668b, 0x0000768b, 0x0000868b, 0x0000968b, + 0x0000a68b, 0x0000b68b, 0x0000c68b, 0x0000d68b, 0x0000e68b, + 0x0000f68b, 0x00000e8b, 0x00001e8b, 0x00002e8b, 0x00003e8b, + 0x00004e8b, 0x00005e8b, 0x00006e8b, 0x00007e8b, 0x00008e8b, + 0x00009e8b, 0x0000ae8b, 0x0000be8b, 0x0000ce8b, 0x0000de8b, + 0x0000ee8b, 0x0000fe8b, 0x0000006c, 0x0000206c, 0x0000406c, + 0x0000606c, 0x0000806c, 0x0000a06c, 0x0000c06c, 0x0000e06c, + 0x0001006c, 0x0001206c, 0x0001406c, 0x0001606c, 0x0001806c, + 0x0001a06c, 0x0001c06c, 0x0001e06c, 0x0000106d, 0x0000306d, + 0x0000506d, 0x0000706d, 0x0000906d, 0x0000b06d, 0x0000d06d, + 0x0000f06d, 0x0001106d, 0x0001306d, 0x0001506d, 0x0001706d, + 0x0001906d, 0x0001b06d, 0x0001d06d, 0x0001f06d, 0x0002106d, + 0x0002306d, 0x0002506d, 0x0002706d, 0x0002906d, 0x0002b06d, + 0x0002d06d, 0x0002f06d, 0x0003106d, 0x0003306d, 0x0003506d, + 0x0003706d, 0x0003906d, 0x0003b06d, 0x0003d06d, 0x0003f06d, + 0x0000086d, 0x0000286d, 0x0000486d, 0x0000686d, 0x0000886d, + 0x0000a86d, 0x0000c86d, 0x0000e86d, 0x0001086d, 0x0001286d, + 0x0001486d, 0x0001686d, 0x0001886d, 0x0001a86d, 0x0001c86d, + 0x0001e86d, 0x0002086d, 0x0002286d, 0x0002486d, 0x0002686d, + 0x0002886d, 0x0002a86d, 0x0002c86d, 0x0002e86d, 0x0003086d, + 0x0003286d, 0x0003486d, 0x0003686d, 0x0003886d, 0x0003a86d, + 0x0003c86d, 0x0003e86d, 0x0000186d, 0x0000386d, 0x0000586d, + 0x0000786d, 0x0000986d, 0x0000b86d, 0x0000d86d, 0x0000f86d, + 0x0001186d, 0x0001386d, 0x0001586d, 0x0001786d, 0x0001986d, + 0x0001b86d, 0x0001d86d, 0x0001f86d, 0x0002186d, 0x0002386d, + 0x0002586d, 0x0002786d, 0x0002986d, 0x0002b86d, 0x0002d86d, + 0x0002f86d, 0x0003186d, 0x0003386d, 0x0003586d, 0x0003786d, + 0x0003986d, 0x0003b86d, 0x0003d86d, 0x0003f86d, 0x0000046d, + 0x0000246d, 0x0000446d, 0x0000646d, 0x0000846d, 0x0000a46d, + 0x0000c46d, 0x0000e46d, 0x0001046d, 0x0001246d, 0x0001446d, + 0x0001646d, 0x0001846d, 0x0001a46d, 0x0001c46d, 0x0001e46d, + 0x0002046d, 0x0002246d, 0x0002446d, 0x0002646d, 0x0002846d, + 0x0002a46d, 0x0002c46d, 0x0002e46d, 0x0003046d, 0x0003246d, + 0x0003446d, 0x0003646d, 0x0003846d, 0x0003a46d, 0x0003c46d, + 0x00001468 }, - .lit_table = { - 0x000c, 0x008c, 0x004c, 0x00cc, 0x002c, 0x00ac, 0x006c, 0x00ec, - 0x001c, 0x009c, 0x005c, 0x00dc, 0x003c, 0x00bc, 0x007c, 0x00fc, - 0x0002, 0x0082, 0x0042, 0x00c2, 0x0022, 0x00a2, 0x0062, 0x00e2, - 0x0012, 0x0092, 0x0052, 0x00d2, 0x0032, 0x00b2, 0x0072, 0x00f2, - 0x000a, 0x008a, 0x004a, 0x00ca, 0x002a, 0x00aa, 0x006a, 0x00ea, - 0x001a, 0x009a, 0x005a, 0x00da, 0x003a, 0x00ba, 0x007a, 0x00fa, - 0x0006, 0x0086, 0x0046, 0x00c6, 0x0026, 0x00a6, 0x0066, 0x00e6, - 0x0016, 0x0096, 0x0056, 0x00d6, 0x0036, 0x00b6, 0x0076, 0x00f6, - 0x000e, 0x008e, 0x004e, 0x00ce, 0x002e, 0x00ae, 0x006e, 0x00ee, - 0x001e, 0x009e, 0x005e, 0x00de, 0x003e, 0x00be, 0x007e, 0x00fe, - 0x0001, 0x0081, 0x0041, 0x00c1, 0x0021, 0x00a1, 0x0061, 0x00e1, - 0x0011, 0x0091, 0x0051, 0x00d1, 0x0031, 0x00b1, 0x0071, 0x00f1, - 0x0009, 0x0089, 0x0049, 0x00c9, 0x0029, 0x00a9, 0x0069, 0x00e9, - 0x0019, 0x0099, 0x0059, 0x00d9, 0x0039, 0x00b9, 0x0079, 0x00f9, - 0x0005, 0x0085, 0x0045, 0x00c5, 0x0025, 0x00a5, 0x0065, 0x00e5, - 0x0015, 0x0095, 0x0055, 0x00d5, 0x0035, 0x00b5, 0x0075, 0x00f5, - 0x000d, 0x008d, 0x004d, 0x00cd, 0x002d, 0x00ad, 0x006d, 0x00ed, - 0x001d, 0x009d, 0x005d, 0x00dd, 0x003d, 0x00bd, 0x007d, 0x00fd, - 0x0013, 0x0113, 0x0093, 0x0193, 0x0053, 0x0153, 0x00d3, 0x01d3, - 0x0033, 0x0133, 0x00b3, 0x01b3, 0x0073, 0x0173, 0x00f3, 0x01f3, - 0x000b, 0x010b, 0x008b, 0x018b, 0x004b, 0x014b, 0x00cb, 0x01cb, - 0x002b, 0x012b, 0x00ab, 0x01ab, 0x006b, 0x016b, 0x00eb, 0x01eb, - 0x001b, 0x011b, 0x009b, 0x019b, 0x005b, 0x015b, 0x00db, 0x01db, - 0x003b, 0x013b, 0x00bb, 0x01bb, 0x007b, 0x017b, 0x00fb, 0x01fb, - 0x0007, 0x0107, 0x0087, 0x0187, 0x0047, 0x0147, 0x00c7, 0x01c7, - 0x0027, 0x0127, 0x00a7, 0x01a7, 0x0067, 0x0167, 0x00e7, 0x01e7, - 0x0017, 0x0117, 0x0097, 0x0197, 0x0057, 0x0157, 0x00d7, 0x01d7, - 0x0037, 0x0137, 0x00b7, 0x01b7, 0x0077, 0x0177, 0x00f7, 0x01f7, - 0x000f, 0x010f, 0x008f, 0x018f, 0x004f, 0x014f, 0x00cf, 0x01cf, - 0x002f, 0x012f, 0x00af, 0x01af, 0x006f, 0x016f, 0x00ef, 0x01ef, - 0x001f, 0x011f, 0x009f, 0x019f, 0x005f, 0x015f, 0x00df, 0x01df, - 0x003f, 0x013f, 0x00bf, 0x01bf, 0x007f, 0x017f, 0x00ff, 0x01ff, - 0x0000}, + .lit_table = { 0x000c, 0x008c, 0x004c, 0x00cc, 0x002c, 0x00ac, 0x006c, 0x00ec, + 0x001c, 0x009c, 0x005c, 0x00dc, 0x003c, 0x00bc, 0x007c, 0x00fc, + 0x0002, 0x0082, 0x0042, 0x00c2, 0x0022, 0x00a2, 0x0062, 0x00e2, + 0x0012, 0x0092, 0x0052, 0x00d2, 0x0032, 0x00b2, 0x0072, 0x00f2, + 0x000a, 0x008a, 0x004a, 0x00ca, 0x002a, 0x00aa, 0x006a, 0x00ea, + 0x001a, 0x009a, 0x005a, 0x00da, 0x003a, 0x00ba, 0x007a, 0x00fa, + 0x0006, 0x0086, 0x0046, 0x00c6, 0x0026, 0x00a6, 0x0066, 0x00e6, + 0x0016, 0x0096, 0x0056, 0x00d6, 0x0036, 0x00b6, 0x0076, 0x00f6, + 0x000e, 0x008e, 0x004e, 0x00ce, 0x002e, 0x00ae, 0x006e, 0x00ee, + 0x001e, 0x009e, 0x005e, 0x00de, 0x003e, 0x00be, 0x007e, 0x00fe, + 0x0001, 0x0081, 0x0041, 0x00c1, 0x0021, 0x00a1, 0x0061, 0x00e1, + 0x0011, 0x0091, 0x0051, 0x00d1, 0x0031, 0x00b1, 0x0071, 0x00f1, + 0x0009, 0x0089, 0x0049, 0x00c9, 0x0029, 0x00a9, 0x0069, 0x00e9, + 0x0019, 0x0099, 0x0059, 0x00d9, 0x0039, 0x00b9, 0x0079, 0x00f9, + 0x0005, 0x0085, 0x0045, 0x00c5, 0x0025, 0x00a5, 0x0065, 0x00e5, + 0x0015, 0x0095, 0x0055, 0x00d5, 0x0035, 0x00b5, 0x0075, 0x00f5, + 0x000d, 0x008d, 0x004d, 0x00cd, 0x002d, 0x00ad, 0x006d, 0x00ed, + 0x001d, 0x009d, 0x005d, 0x00dd, 0x003d, 0x00bd, 0x007d, 0x00fd, + 0x0013, 0x0113, 0x0093, 0x0193, 0x0053, 0x0153, 0x00d3, 0x01d3, + 0x0033, 0x0133, 0x00b3, 0x01b3, 0x0073, 0x0173, 0x00f3, 0x01f3, + 0x000b, 0x010b, 0x008b, 0x018b, 0x004b, 0x014b, 0x00cb, 0x01cb, + 0x002b, 0x012b, 0x00ab, 0x01ab, 0x006b, 0x016b, 0x00eb, 0x01eb, + 0x001b, 0x011b, 0x009b, 0x019b, 0x005b, 0x015b, 0x00db, 0x01db, + 0x003b, 0x013b, 0x00bb, 0x01bb, 0x007b, 0x017b, 0x00fb, 0x01fb, + 0x0007, 0x0107, 0x0087, 0x0187, 0x0047, 0x0147, 0x00c7, 0x01c7, + 0x0027, 0x0127, 0x00a7, 0x01a7, 0x0067, 0x0167, 0x00e7, 0x01e7, + 0x0017, 0x0117, 0x0097, 0x0197, 0x0057, 0x0157, 0x00d7, 0x01d7, + 0x0037, 0x0137, 0x00b7, 0x01b7, 0x0077, 0x0177, 0x00f7, 0x01f7, + 0x000f, 0x010f, 0x008f, 0x018f, 0x004f, 0x014f, 0x00cf, 0x01cf, + 0x002f, 0x012f, 0x00af, 0x01af, 0x006f, 0x016f, 0x00ef, 0x01ef, + 0x001f, 0x011f, 0x009f, 0x019f, 0x005f, 0x015f, 0x00df, 0x01df, + 0x003f, 0x013f, 0x00bf, 0x01bf, 0x007f, 0x017f, 0x00ff, 0x01ff, + 0x0000 }, - .lit_table_sizes = { - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, - 0x07}, + .lit_table_sizes = { 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x07 }, #ifndef LONGER_HUFFTABLE - .dcodes = { - 0x0000, 0x0010, 0x0008, 0x0018, 0x0004, 0x0014, 0x000c, 0x001c, - 0x0002, 0x0012, 0x000a, 0x001a, 0x0006, 0x0016, 0x000e, 0x001e, - 0x0001, 0x0011, 0x0009, 0x0019, 0x0005, 0x0015, 0x000d, 0x001d, - 0x0003, 0x0013, 0x000b, 0x001b, 0x0007, 0x0017}, + .dcodes = { 0x0000, 0x0010, 0x0008, 0x0018, 0x0004, 0x0014, 0x000c, 0x001c, + 0x0002, 0x0012, 0x000a, 0x001a, 0x0006, 0x0016, 0x000e, 0x001e, + 0x0001, 0x0011, 0x0009, 0x0019, 0x0005, 0x0015, 0x000d, 0x001d, + 0x0003, 0x0013, 0x000b, 0x001b, 0x0007, 0x0017 }, - .dcodes_sizes = { - 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x05} + .dcodes_sizes = { 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05 } #else .dcodes = { 0x000b, 0x001b, 0x0007, 0x0017}, @@ -6739,4 +5419,4 @@ struct isal_hufftables hufftables_static = { .dcodes_sizes = { 0x05, 0x05, 0x05, 0x05} #endif -}; + }; diff --git a/igzip/igzip.c b/igzip/igzip.c index 49a22f79..8568814e 100644 --- a/igzip/igzip.c +++ b/igzip/igzip.c @@ -33,14 +33,14 @@ #include #include #ifdef _WIN32 -# include +#include #endif -#define MAX_WRITE_BITS_SIZE 8 -#define FORCE_FLUSH 64 -#define MIN_OBUF_SIZE 224 +#define MAX_WRITE_BITS_SIZE 8 +#define FORCE_FLUSH 64 +#define MIN_OBUF_SIZE 224 #define NON_EMPTY_BLOCK_SIZE 6 -#define MAX_SYNC_FLUSH_SIZE NON_EMPTY_BLOCK_SIZE + MAX_WRITE_BITS_SIZE +#define MAX_SYNC_FLUSH_SIZE NON_EMPTY_BLOCK_SIZE + MAX_WRITE_BITS_SIZE #include "huffman.h" #include "bitbuf2.h" @@ -54,10 +54,14 @@ #include "igzip_wrapper.h" #include "unaligned.h" -extern void isal_deflate_hash_lvl0(uint16_t *, uint32_t, uint32_t, uint8_t *, uint32_t); -extern void isal_deflate_hash_lvl1(uint16_t *, uint32_t, uint32_t, uint8_t *, uint32_t); -extern void isal_deflate_hash_lvl2(uint16_t *, uint32_t, uint32_t, uint8_t *, uint32_t); -extern void isal_deflate_hash_lvl3(uint16_t *, uint32_t, uint32_t, uint8_t *, uint32_t); +extern void +isal_deflate_hash_lvl0(uint16_t *, uint32_t, uint32_t, uint8_t *, uint32_t); +extern void +isal_deflate_hash_lvl1(uint16_t *, uint32_t, uint32_t, uint8_t *, uint32_t); +extern void +isal_deflate_hash_lvl2(uint16_t *, uint32_t, uint32_t, uint8_t *, uint32_t); +extern void +isal_deflate_hash_lvl3(uint16_t *, uint32_t, uint32_t, uint8_t *, uint32_t); extern const uint8_t gzip_hdr[]; extern const uint32_t gzip_hdr_bytes; extern const uint32_t gzip_trl_bytes; @@ -67,1964 +71,1985 @@ extern const uint32_t zlib_trl_bytes; extern const struct isal_hufftables hufftables_default; extern const struct isal_hufftables hufftables_static; -static uint32_t write_stored_block(struct isal_zstream *stream); +static uint32_t +write_stored_block(struct isal_zstream *stream); -static int write_stream_header_stateless(struct isal_zstream *stream); -static void write_stream_header(struct isal_zstream *stream); -static int write_deflate_header_stateless(struct isal_zstream *stream); -static int write_deflate_header_unaligned_stateless(struct isal_zstream *stream); +static int +write_stream_header_stateless(struct isal_zstream *stream); +static void +write_stream_header(struct isal_zstream *stream); +static int +write_deflate_header_stateless(struct isal_zstream *stream); +static int +write_deflate_header_unaligned_stateless(struct isal_zstream *stream); -#define TYPE0_HDR_LEN 4 +#define TYPE0_HDR_LEN 4 #define TYPE0_BLK_HDR_LEN 5 #define TYPE0_MAX_BLK_LEN 65535 -void isal_deflate_body(struct isal_zstream *stream); -void isal_deflate_finish(struct isal_zstream *stream); - -void isal_deflate_icf_body(struct isal_zstream *stream); -void isal_deflate_icf_finish_lvl1(struct isal_zstream *stream); -void isal_deflate_icf_finish_lvl2(struct isal_zstream *stream); -void isal_deflate_icf_finish_lvl3(struct isal_zstream *stream); +void +isal_deflate_body(struct isal_zstream *stream); +void +isal_deflate_finish(struct isal_zstream *stream); + +void +isal_deflate_icf_body(struct isal_zstream *stream); +void +isal_deflate_icf_finish_lvl1(struct isal_zstream *stream); +void +isal_deflate_icf_finish_lvl2(struct isal_zstream *stream); +void +isal_deflate_icf_finish_lvl3(struct isal_zstream *stream); /*****************************************************************/ /* Forward declarations */ -static inline void reset_match_history(struct isal_zstream *stream); -static void write_header(struct isal_zstream *stream, uint8_t * deflate_hdr, - uint32_t deflate_hdr_count, uint32_t extra_bits_count, - uint32_t next_state, uint32_t toggle_end_of_stream); -static void write_trailer(struct isal_zstream *stream); +static inline void +reset_match_history(struct isal_zstream *stream); +static void +write_header(struct isal_zstream *stream, uint8_t *deflate_hdr, uint32_t deflate_hdr_count, + uint32_t extra_bits_count, uint32_t next_state, uint32_t toggle_end_of_stream); +static void +write_trailer(struct isal_zstream *stream); /*****************************************************************/ // isal_adler32_bam1 - adler with (B | A minus 1) storage -uint32_t isal_adler32_bam1(uint32_t adler32, const unsigned char *start, uint64_t length) +uint32_t +isal_adler32_bam1(uint32_t adler32, const unsigned char *start, uint64_t length) { - uint64_t a; + uint64_t a; - /* Internally the checksum is being stored as B | (A-1) so crc and - * addler have same init value */ - a = adler32 & 0xffff; - a = (a == ADLER_MOD - 1) ? 0 : a + 1; - adler32 = isal_adler32((adler32 & 0xffff0000) | a, start, length); - a = (adler32 & 0xffff); - a = (a == 0) ? ADLER_MOD - 1 : a - 1; + /* Internally the checksum is being stored as B | (A-1) so crc and + * addler have same init value */ + a = adler32 & 0xffff; + a = (a == ADLER_MOD - 1) ? 0 : a + 1; + adler32 = isal_adler32((adler32 & 0xffff0000) | a, start, length); + a = (adler32 & 0xffff); + a = (a == 0) ? ADLER_MOD - 1 : a - 1; - return (adler32 & 0xffff0000) | a; + return (adler32 & 0xffff0000) | a; } -static void update_checksum(struct isal_zstream *stream, uint8_t * start_in, uint64_t length) +static void +update_checksum(struct isal_zstream *stream, uint8_t *start_in, uint64_t length) { - struct isal_zstate *state = &stream->internal_state; - switch (stream->gzip_flag) { - case IGZIP_GZIP: - case IGZIP_GZIP_NO_HDR: - state->crc = crc32_gzip_refl(state->crc, start_in, length); - break; - case IGZIP_ZLIB: - case IGZIP_ZLIB_NO_HDR: - state->crc = isal_adler32_bam1(state->crc, start_in, length); - break; - } + struct isal_zstate *state = &stream->internal_state; + switch (stream->gzip_flag) { + case IGZIP_GZIP: + case IGZIP_GZIP_NO_HDR: + state->crc = crc32_gzip_refl(state->crc, start_in, length); + break; + case IGZIP_ZLIB: + case IGZIP_ZLIB_NO_HDR: + state->crc = isal_adler32_bam1(state->crc, start_in, length); + break; + } } -static -void sync_flush(struct isal_zstream *stream) +static void +sync_flush(struct isal_zstream *stream) { - struct isal_zstate *state = &stream->internal_state; - uint64_t bits_to_write = 0xFFFF0000, bits_len; - uint64_t bytes; - int flush_size; + struct isal_zstate *state = &stream->internal_state; + uint64_t bits_to_write = 0xFFFF0000, bits_len; + uint64_t bytes; + int flush_size; - if (stream->avail_out >= 8) { - set_buf(&state->bitbuf, stream->next_out, stream->avail_out); + if (stream->avail_out >= 8) { + set_buf(&state->bitbuf, stream->next_out, stream->avail_out); - flush_size = (-(state->bitbuf.m_bit_count + 3)) % 8; + flush_size = (-(state->bitbuf.m_bit_count + 3)) % 8; - bits_to_write <<= flush_size + 3; - bits_len = 32 + flush_size + 3; + bits_to_write <<= flush_size + 3; + bits_len = 32 + flush_size + 3; - state->state = ZSTATE_NEW_HDR; - state->has_eob = 0; + state->state = ZSTATE_NEW_HDR; + state->has_eob = 0; - write_bits(&state->bitbuf, bits_to_write, bits_len); + write_bits(&state->bitbuf, bits_to_write, bits_len); - bytes = buffer_used(&state->bitbuf); - stream->next_out = buffer_ptr(&state->bitbuf); - stream->avail_out -= bytes; - stream->total_out += bytes; + bytes = buffer_used(&state->bitbuf); + stream->next_out = buffer_ptr(&state->bitbuf); + stream->avail_out -= bytes; + stream->total_out += bytes; - if (stream->flush == FULL_FLUSH) { - /* Clear match history so there are no cross - * block length distance pairs */ - state->has_hist = IGZIP_NO_HIST; - } - } + if (stream->flush == FULL_FLUSH) { + /* Clear match history so there are no cross + * block length distance pairs */ + state->has_hist = IGZIP_NO_HIST; + } + } } -static void flush_write_buffer(struct isal_zstream *stream) +static void +flush_write_buffer(struct isal_zstream *stream) { - struct isal_zstate *state = &stream->internal_state; - int bytes = 0; - if (stream->avail_out >= 8) { - set_buf(&state->bitbuf, stream->next_out, stream->avail_out); - flush(&state->bitbuf); - stream->next_out = buffer_ptr(&state->bitbuf); - bytes = buffer_used(&state->bitbuf); - stream->avail_out -= bytes; - stream->total_out += bytes; - state->state = ZSTATE_NEW_HDR; - } + struct isal_zstate *state = &stream->internal_state; + int bytes = 0; + if (stream->avail_out >= 8) { + set_buf(&state->bitbuf, stream->next_out, stream->avail_out); + flush(&state->bitbuf); + stream->next_out = buffer_ptr(&state->bitbuf); + bytes = buffer_used(&state->bitbuf); + stream->avail_out -= bytes; + stream->total_out += bytes; + state->state = ZSTATE_NEW_HDR; + } } -static void flush_icf_block(struct isal_zstream *stream) +static void +flush_icf_block(struct isal_zstream *stream) { - struct isal_zstate *state = &stream->internal_state; - struct level_buf *level_buf = (struct level_buf *)stream->level_buf; - struct BitBuf2 *write_buf = &state->bitbuf; - struct deflate_icf *icf_buf_encoded_next; - - set_buf(write_buf, stream->next_out, stream->avail_out); - - icf_buf_encoded_next = encode_deflate_icf(level_buf->icf_buf_start + state->count, - level_buf->icf_buf_next, write_buf, - &level_buf->encode_tables); - - state->count = icf_buf_encoded_next - level_buf->icf_buf_start; - stream->next_out = buffer_ptr(write_buf); - stream->total_out += buffer_used(write_buf); - stream->avail_out -= buffer_used(write_buf); - - if (level_buf->icf_buf_next <= icf_buf_encoded_next) { - state->count = 0; - if (stream->avail_in == 0 && stream->end_of_stream) - state->state = ZSTATE_TRL; - else if (stream->avail_in == 0 && stream->flush != NO_FLUSH) - state->state = ZSTATE_SYNC_FLUSH; - else - state->state = ZSTATE_NEW_HDR; - } + struct isal_zstate *state = &stream->internal_state; + struct level_buf *level_buf = (struct level_buf *) stream->level_buf; + struct BitBuf2 *write_buf = &state->bitbuf; + struct deflate_icf *icf_buf_encoded_next; + + set_buf(write_buf, stream->next_out, stream->avail_out); + + icf_buf_encoded_next = + encode_deflate_icf(level_buf->icf_buf_start + state->count, level_buf->icf_buf_next, + write_buf, &level_buf->encode_tables); + + state->count = icf_buf_encoded_next - level_buf->icf_buf_start; + stream->next_out = buffer_ptr(write_buf); + stream->total_out += buffer_used(write_buf); + stream->avail_out -= buffer_used(write_buf); + + if (level_buf->icf_buf_next <= icf_buf_encoded_next) { + state->count = 0; + if (stream->avail_in == 0 && stream->end_of_stream) + state->state = ZSTATE_TRL; + else if (stream->avail_in == 0 && stream->flush != NO_FLUSH) + state->state = ZSTATE_SYNC_FLUSH; + else + state->state = ZSTATE_NEW_HDR; + } } -static int check_level_req(struct isal_zstream *stream) +static int +check_level_req(struct isal_zstream *stream) { - if (stream->level == 0) - return 0; - - if (stream->level_buf == NULL) - return ISAL_INVALID_LEVEL_BUF; - - switch (stream->level) { - case 3: - if (stream->level_buf_size < ISAL_DEF_LVL3_MIN) - return ISAL_INVALID_LEVEL; - break; - - case 2: - if (stream->level_buf_size < ISAL_DEF_LVL2_MIN) - return ISAL_INVALID_LEVEL; - break; - case 1: - if (stream->level_buf_size < ISAL_DEF_LVL1_MIN) - return ISAL_INVALID_LEVEL; - break; - default: - return ISAL_INVALID_LEVEL; - } - - return 0; + if (stream->level == 0) + return 0; + + if (stream->level_buf == NULL) + return ISAL_INVALID_LEVEL_BUF; + + switch (stream->level) { + case 3: + if (stream->level_buf_size < ISAL_DEF_LVL3_MIN) + return ISAL_INVALID_LEVEL; + break; + + case 2: + if (stream->level_buf_size < ISAL_DEF_LVL2_MIN) + return ISAL_INVALID_LEVEL; + break; + case 1: + if (stream->level_buf_size < ISAL_DEF_LVL1_MIN) + return ISAL_INVALID_LEVEL; + break; + default: + return ISAL_INVALID_LEVEL; + } + + return 0; } -static int init_hash8k_buf(struct isal_zstream *stream) +static int +init_hash8k_buf(struct isal_zstream *stream) { - struct isal_zstate *state = &stream->internal_state; - struct level_buf *level_buf = (struct level_buf *)stream->level_buf; - state->has_level_buf_init = 1; - return sizeof(struct level_buf) - MAX_LVL_BUF_SIZE + sizeof(level_buf->hash8k); + struct isal_zstate *state = &stream->internal_state; + struct level_buf *level_buf = (struct level_buf *) stream->level_buf; + state->has_level_buf_init = 1; + return sizeof(struct level_buf) - MAX_LVL_BUF_SIZE + sizeof(level_buf->hash8k); } -static int init_hash_hist_buf(struct isal_zstream *stream) +static int +init_hash_hist_buf(struct isal_zstream *stream) { - struct isal_zstate *state = &stream->internal_state; - struct level_buf *level_buf = (struct level_buf *)stream->level_buf; - state->has_level_buf_init = 1; - return sizeof(struct level_buf) - MAX_LVL_BUF_SIZE + sizeof(level_buf->hash_hist); + struct isal_zstate *state = &stream->internal_state; + struct level_buf *level_buf = (struct level_buf *) stream->level_buf; + state->has_level_buf_init = 1; + return sizeof(struct level_buf) - MAX_LVL_BUF_SIZE + sizeof(level_buf->hash_hist); } -static int init_hash_map_buf(struct isal_zstream *stream) +static int +init_hash_map_buf(struct isal_zstream *stream) { - struct isal_zstate *state = &stream->internal_state; - struct level_buf *level_buf = (struct level_buf *)stream->level_buf; - if (!state->has_level_buf_init) { - level_buf->hash_map.matches_next = level_buf->hash_map.matches; - level_buf->hash_map.matches_end = level_buf->hash_map.matches; - } - state->has_level_buf_init = 1; - - return sizeof(struct level_buf) - MAX_LVL_BUF_SIZE + sizeof(level_buf->hash_map); - + struct isal_zstate *state = &stream->internal_state; + struct level_buf *level_buf = (struct level_buf *) stream->level_buf; + if (!state->has_level_buf_init) { + level_buf->hash_map.matches_next = level_buf->hash_map.matches; + level_buf->hash_map.matches_end = level_buf->hash_map.matches; + } + state->has_level_buf_init = 1; + + return sizeof(struct level_buf) - MAX_LVL_BUF_SIZE + sizeof(level_buf->hash_map); } /* returns the size of the level specific buffer */ -static int init_lvlX_buf(struct isal_zstream *stream) +static int +init_lvlX_buf(struct isal_zstream *stream) { - switch (stream->level) { - case 3: - return init_hash_map_buf(stream); - case 2: - return init_hash_hist_buf(stream); - default: - return init_hash8k_buf(stream); - } - + switch (stream->level) { + case 3: + return init_hash_map_buf(stream); + case 2: + return init_hash_hist_buf(stream); + default: + return init_hash8k_buf(stream); + } } -static void init_new_icf_block(struct isal_zstream *stream) +static void +init_new_icf_block(struct isal_zstream *stream) { - struct isal_zstate *state = &stream->internal_state; - struct level_buf *level_buf = (struct level_buf *)stream->level_buf; - int level_struct_size; + struct isal_zstate *state = &stream->internal_state; + struct level_buf *level_buf = (struct level_buf *) stream->level_buf; + int level_struct_size; - level_struct_size = init_lvlX_buf(stream); + level_struct_size = init_lvlX_buf(stream); - state->block_next = state->block_end; - level_buf->icf_buf_start = - (struct deflate_icf *)(stream->level_buf + level_struct_size); + state->block_next = state->block_end; + level_buf->icf_buf_start = (struct deflate_icf *) (stream->level_buf + level_struct_size); - level_buf->icf_buf_next = level_buf->icf_buf_start; - level_buf->icf_buf_avail_out = - stream->level_buf_size - level_struct_size - sizeof(struct deflate_icf); + level_buf->icf_buf_next = level_buf->icf_buf_start; + level_buf->icf_buf_avail_out = + stream->level_buf_size - level_struct_size - sizeof(struct deflate_icf); - memset(&level_buf->hist, 0, sizeof(struct isal_mod_hist)); - state->state = ZSTATE_BODY; + memset(&level_buf->hist, 0, sizeof(struct isal_mod_hist)); + state->state = ZSTATE_BODY; } -static int are_buffers_empty_hashX(struct isal_zstream *stream) +static int +are_buffers_empty_hashX(struct isal_zstream *stream) { - return !stream->avail_in; + return !stream->avail_in; } -static int are_buffers_empty_hash_map(struct isal_zstream *stream) +static int +are_buffers_empty_hash_map(struct isal_zstream *stream) { - struct level_buf *level_buf = (struct level_buf *)stream->level_buf; + struct level_buf *level_buf = (struct level_buf *) stream->level_buf; - return (!stream->avail_in - && level_buf->hash_map.matches_next >= level_buf->hash_map.matches_end); + return (!stream->avail_in && + level_buf->hash_map.matches_next >= level_buf->hash_map.matches_end); } -static int are_buffers_empty(struct isal_zstream *stream) +static int +are_buffers_empty(struct isal_zstream *stream) { - switch (stream->level) { - case 3: - return are_buffers_empty_hash_map(stream); - case 2: - return are_buffers_empty_hashX(stream); - default: - return are_buffers_empty_hashX(stream); - } + switch (stream->level) { + case 3: + return are_buffers_empty_hash_map(stream); + case 2: + return are_buffers_empty_hashX(stream); + default: + return are_buffers_empty_hashX(stream); + } } -static void create_icf_block_hdr(struct isal_zstream *stream, uint8_t * start_in) +static void +create_icf_block_hdr(struct isal_zstream *stream, uint8_t *start_in) { - struct isal_zstate *state = &stream->internal_state; - struct level_buf *level_buf = (struct level_buf *)stream->level_buf; - struct BitBuf2 *write_buf = &state->bitbuf; - struct BitBuf2 write_buf_tmp; - uint32_t out_size = stream->avail_out; - uint32_t avail_output, block_start_offset; - uint8_t *end_out = stream->next_out + out_size; - uint64_t cur_in_processed; - uint64_t bit_count; - uint64_t block_in_size = state->block_end - state->block_next; - uint64_t block_size; - int buffer_header = 0; - - memcpy(&write_buf_tmp, write_buf, sizeof(struct BitBuf2)); - - /* Calculate the bytes required to store a type 0 block. Need to account - * for bits stored in the bitbuf. Since 3 bits correspond to the deflate - * type 0 header, we need to add one byte more when the number of bits - * is at least 6 mod 8. */ - block_size = (TYPE0_BLK_HDR_LEN) * ((block_in_size + TYPE0_MAX_BLK_LEN - 1) / - TYPE0_MAX_BLK_LEN) + block_in_size; - block_size = block_size ? block_size : TYPE0_BLK_HDR_LEN; - block_size += (write_buf->m_bit_count + 2) / 8; - - /* Write EOB in icf_buf */ - level_buf->hist.ll_hist[256] = 1; - level_buf->icf_buf_next->lit_len = 0x100; - level_buf->icf_buf_next->lit_dist = NULL_DIST_SYM; - level_buf->icf_buf_next->dist_extra = 0; - level_buf->icf_buf_next++; - - state->has_eob_hdr = (stream->end_of_stream && are_buffers_empty(stream)) ? 1 : 0; - - if (end_out - stream->next_out >= ISAL_DEF_MAX_HDR_SIZE) { - /* Assumes ISAL_DEF_MAX_HDR_SIZE is large enough to contain a - * max length header and a gzip header */ - if (stream->gzip_flag == IGZIP_GZIP || stream->gzip_flag == IGZIP_ZLIB) - write_stream_header_stateless(stream); - set_buf(write_buf, stream->next_out, stream->avail_out); - buffer_header = 0; - - } else { - /* Start writing into temporary buffer */ - set_buf(write_buf, level_buf->deflate_hdr, ISAL_DEF_MAX_HDR_SIZE); - buffer_header = 1; - } - - bit_count = create_hufftables_icf(write_buf, &level_buf->encode_tables, - &level_buf->hist, state->has_eob_hdr); - - /* Assumes that type 0 block has size less than 4G */ - block_start_offset = (stream->total_in - state->block_next); - cur_in_processed = stream->next_in - start_in; - avail_output = stream->avail_out + sizeof(state->buffer) - - (stream->total_in - state->block_end); - - if (bit_count / 8 >= block_size && cur_in_processed >= block_start_offset - && block_size <= avail_output) { - /* Reset stream for writing out a type0 block */ - state->has_eob_hdr = 0; - memcpy(write_buf, &write_buf_tmp, sizeof(struct BitBuf2)); - state->state = ZSTATE_TYPE0_HDR; - - } else if (buffer_header) { - /* Setup stream to write out a buffered header */ - level_buf->deflate_hdr_count = buffer_used(write_buf); - level_buf->deflate_hdr_extra_bits = write_buf->m_bit_count; - flush(write_buf); - memcpy(write_buf, &write_buf_tmp, sizeof(struct BitBuf2)); - write_buf->m_bits = 0; - write_buf->m_bit_count = 0; - state->state = ZSTATE_HDR; - - } else { - stream->next_out = buffer_ptr(write_buf); - stream->total_out += buffer_used(write_buf); - stream->avail_out -= buffer_used(write_buf); - state->state = ZSTATE_FLUSH_ICF_BUFFER; - } + struct isal_zstate *state = &stream->internal_state; + struct level_buf *level_buf = (struct level_buf *) stream->level_buf; + struct BitBuf2 *write_buf = &state->bitbuf; + struct BitBuf2 write_buf_tmp; + uint32_t out_size = stream->avail_out; + uint32_t avail_output, block_start_offset; + uint8_t *end_out = stream->next_out + out_size; + uint64_t cur_in_processed; + uint64_t bit_count; + uint64_t block_in_size = state->block_end - state->block_next; + uint64_t block_size; + int buffer_header = 0; + + memcpy(&write_buf_tmp, write_buf, sizeof(struct BitBuf2)); + + /* Calculate the bytes required to store a type 0 block. Need to account + * for bits stored in the bitbuf. Since 3 bits correspond to the deflate + * type 0 header, we need to add one byte more when the number of bits + * is at least 6 mod 8. */ + block_size = (TYPE0_BLK_HDR_LEN) * + ((block_in_size + TYPE0_MAX_BLK_LEN - 1) / TYPE0_MAX_BLK_LEN) + + block_in_size; + block_size = block_size ? block_size : TYPE0_BLK_HDR_LEN; + block_size += (write_buf->m_bit_count + 2) / 8; + + /* Write EOB in icf_buf */ + level_buf->hist.ll_hist[256] = 1; + level_buf->icf_buf_next->lit_len = 0x100; + level_buf->icf_buf_next->lit_dist = NULL_DIST_SYM; + level_buf->icf_buf_next->dist_extra = 0; + level_buf->icf_buf_next++; + + state->has_eob_hdr = (stream->end_of_stream && are_buffers_empty(stream)) ? 1 : 0; + + if (end_out - stream->next_out >= ISAL_DEF_MAX_HDR_SIZE) { + /* Assumes ISAL_DEF_MAX_HDR_SIZE is large enough to contain a + * max length header and a gzip header */ + if (stream->gzip_flag == IGZIP_GZIP || stream->gzip_flag == IGZIP_ZLIB) + write_stream_header_stateless(stream); + set_buf(write_buf, stream->next_out, stream->avail_out); + buffer_header = 0; + + } else { + /* Start writing into temporary buffer */ + set_buf(write_buf, level_buf->deflate_hdr, ISAL_DEF_MAX_HDR_SIZE); + buffer_header = 1; + } + + bit_count = create_hufftables_icf(write_buf, &level_buf->encode_tables, &level_buf->hist, + state->has_eob_hdr); + + /* Assumes that type 0 block has size less than 4G */ + block_start_offset = (stream->total_in - state->block_next); + cur_in_processed = stream->next_in - start_in; + avail_output = + stream->avail_out + sizeof(state->buffer) - (stream->total_in - state->block_end); + + if (bit_count / 8 >= block_size && cur_in_processed >= block_start_offset && + block_size <= avail_output) { + /* Reset stream for writing out a type0 block */ + state->has_eob_hdr = 0; + memcpy(write_buf, &write_buf_tmp, sizeof(struct BitBuf2)); + state->state = ZSTATE_TYPE0_HDR; + + } else if (buffer_header) { + /* Setup stream to write out a buffered header */ + level_buf->deflate_hdr_count = buffer_used(write_buf); + level_buf->deflate_hdr_extra_bits = write_buf->m_bit_count; + flush(write_buf); + memcpy(write_buf, &write_buf_tmp, sizeof(struct BitBuf2)); + write_buf->m_bits = 0; + write_buf->m_bit_count = 0; + state->state = ZSTATE_HDR; + + } else { + stream->next_out = buffer_ptr(write_buf); + stream->total_out += buffer_used(write_buf); + stream->avail_out -= buffer_used(write_buf); + state->state = ZSTATE_FLUSH_ICF_BUFFER; + } } -static void isal_deflate_pass(struct isal_zstream *stream) +static void +isal_deflate_pass(struct isal_zstream *stream) { - struct isal_zstate *state = &stream->internal_state; - struct isal_hufftables *hufftables = stream->hufftables; - uint8_t *start_in = stream->next_in; - - if (state->state == ZSTATE_NEW_HDR || state->state == ZSTATE_HDR) { - if (state->count == 0) - /* Assume the final header is being written since the header - * stored in hufftables is the final header. */ - state->has_eob_hdr = 1; - write_header(stream, hufftables->deflate_hdr, hufftables->deflate_hdr_count, - hufftables->deflate_hdr_extra_bits, ZSTATE_BODY, - !stream->end_of_stream); - } - - if (state->state == ZSTATE_BODY) - isal_deflate_body(stream); - - if (state->state == ZSTATE_FLUSH_READ_BUFFER) - isal_deflate_finish(stream); - if (state->state == ZSTATE_SYNC_FLUSH) - sync_flush(stream); - - if (state->state == ZSTATE_FLUSH_WRITE_BUFFER) - flush_write_buffer(stream); - - if (stream->gzip_flag) - update_checksum(stream, start_in, stream->next_in - start_in); - - if (state->state == ZSTATE_TRL) - write_trailer(stream); + struct isal_zstate *state = &stream->internal_state; + struct isal_hufftables *hufftables = stream->hufftables; + uint8_t *start_in = stream->next_in; + + if (state->state == ZSTATE_NEW_HDR || state->state == ZSTATE_HDR) { + if (state->count == 0) + /* Assume the final header is being written since the header + * stored in hufftables is the final header. */ + state->has_eob_hdr = 1; + write_header(stream, hufftables->deflate_hdr, hufftables->deflate_hdr_count, + hufftables->deflate_hdr_extra_bits, ZSTATE_BODY, + !stream->end_of_stream); + } + + if (state->state == ZSTATE_BODY) + isal_deflate_body(stream); + + if (state->state == ZSTATE_FLUSH_READ_BUFFER) + isal_deflate_finish(stream); + if (state->state == ZSTATE_SYNC_FLUSH) + sync_flush(stream); + + if (state->state == ZSTATE_FLUSH_WRITE_BUFFER) + flush_write_buffer(stream); + + if (stream->gzip_flag) + update_checksum(stream, start_in, stream->next_in - start_in); + + if (state->state == ZSTATE_TRL) + write_trailer(stream); } -static void isal_deflate_icf_finish(struct isal_zstream *stream) +static void +isal_deflate_icf_finish(struct isal_zstream *stream) { - switch (stream->level) { - case 3: - isal_deflate_icf_finish_lvl3(stream); - break; - case 2: - isal_deflate_icf_finish_lvl2(stream); - break; - default: - isal_deflate_icf_finish_lvl1(stream); - } + switch (stream->level) { + case 3: + isal_deflate_icf_finish_lvl3(stream); + break; + case 2: + isal_deflate_icf_finish_lvl2(stream); + break; + default: + isal_deflate_icf_finish_lvl1(stream); + } } -static void isal_deflate_icf_pass(struct isal_zstream *stream, uint8_t * inbuf_start) +static void +isal_deflate_icf_pass(struct isal_zstream *stream, uint8_t *inbuf_start) { - uint8_t *start_in = stream->next_in; - struct isal_zstate *state = &stream->internal_state; - struct level_buf *level_buf = (struct level_buf *)stream->level_buf; + uint8_t *start_in = stream->next_in; + struct isal_zstate *state = &stream->internal_state; + struct level_buf *level_buf = (struct level_buf *) stream->level_buf; - do { - if (state->state == ZSTATE_NEW_HDR) - init_new_icf_block(stream); + do { + if (state->state == ZSTATE_NEW_HDR) + init_new_icf_block(stream); - if (state->state == ZSTATE_BODY) - isal_deflate_icf_body(stream); + if (state->state == ZSTATE_BODY) + isal_deflate_icf_body(stream); - if (state->state == ZSTATE_FLUSH_READ_BUFFER) - isal_deflate_icf_finish(stream); + if (state->state == ZSTATE_FLUSH_READ_BUFFER) + isal_deflate_icf_finish(stream); - if (state->state == ZSTATE_CREATE_HDR) - create_icf_block_hdr(stream, inbuf_start); + if (state->state == ZSTATE_CREATE_HDR) + create_icf_block_hdr(stream, inbuf_start); - if (state->state == ZSTATE_HDR) - /* Note that the header may be prepended by the - * remaining bits in the previous block, as such the - * toggle header flag cannot be used */ - write_header(stream, level_buf->deflate_hdr, - level_buf->deflate_hdr_count, - level_buf->deflate_hdr_extra_bits, - ZSTATE_FLUSH_ICF_BUFFER, 0); + if (state->state == ZSTATE_HDR) + /* Note that the header may be prepended by the + * remaining bits in the previous block, as such the + * toggle header flag cannot be used */ + write_header(stream, level_buf->deflate_hdr, level_buf->deflate_hdr_count, + level_buf->deflate_hdr_extra_bits, ZSTATE_FLUSH_ICF_BUFFER, 0); - if (state->state == ZSTATE_FLUSH_ICF_BUFFER) - flush_icf_block(stream); + if (state->state == ZSTATE_FLUSH_ICF_BUFFER) + flush_icf_block(stream); - if (state->state == ZSTATE_TYPE0_HDR || state->state == ZSTATE_TYPE0_BODY) { - if (stream->gzip_flag == IGZIP_GZIP || stream->gzip_flag == IGZIP_ZLIB) - write_stream_header(stream); - write_stored_block(stream); - } + if (state->state == ZSTATE_TYPE0_HDR || state->state == ZSTATE_TYPE0_BODY) { + if (stream->gzip_flag == IGZIP_GZIP || stream->gzip_flag == IGZIP_ZLIB) + write_stream_header(stream); + write_stored_block(stream); + } - } - while (state->state == ZSTATE_NEW_HDR); + } while (state->state == ZSTATE_NEW_HDR); - if (state->state == ZSTATE_SYNC_FLUSH) - sync_flush(stream); + if (state->state == ZSTATE_SYNC_FLUSH) + sync_flush(stream); - if (state->state == ZSTATE_FLUSH_WRITE_BUFFER) - flush_write_buffer(stream); + if (state->state == ZSTATE_FLUSH_WRITE_BUFFER) + flush_write_buffer(stream); - if (stream->gzip_flag) - update_checksum(stream, start_in, stream->next_in - start_in); + if (stream->gzip_flag) + update_checksum(stream, start_in, stream->next_in - start_in); - if (state->state == ZSTATE_TRL) - write_trailer(stream); + if (state->state == ZSTATE_TRL) + write_trailer(stream); } -static void isal_deflate_int(struct isal_zstream *stream, uint8_t * start_in) +static void +isal_deflate_int(struct isal_zstream *stream, uint8_t *start_in) { - struct isal_zstate *state = &stream->internal_state; - uint32_t size; - - /* Move data from temporary output buffer to output buffer */ - if (state->state >= ZSTATE_TMP_OFFSET) { - size = state->tmp_out_end - state->tmp_out_start; - if (size > stream->avail_out) - size = stream->avail_out; - memcpy(stream->next_out, state->tmp_out_buff + state->tmp_out_start, size); - stream->next_out += size; - stream->avail_out -= size; - stream->total_out += size; - state->tmp_out_start += size; - - if (state->tmp_out_start == state->tmp_out_end) - state->state -= ZSTATE_TMP_OFFSET; - - if (stream->avail_out == 0 || state->state == ZSTATE_END - // or do not write out empty blocks since the outbuffer was processed - || (state->state == ZSTATE_NEW_HDR && stream->avail_out == 0)) - return; - } - assert(state->tmp_out_start == state->tmp_out_end); - - if (stream->level == 0) - isal_deflate_pass(stream); - else - isal_deflate_icf_pass(stream, start_in); - - /* Fill temporary output buffer then complete filling output buffer */ - if (stream->avail_out > 0 && stream->avail_out < 8 && state->state != ZSTATE_NEW_HDR) { - uint8_t *next_out; - uint32_t avail_out; - uint32_t total_out; - - next_out = stream->next_out; - avail_out = stream->avail_out; - total_out = stream->total_out; - - stream->next_out = state->tmp_out_buff; - stream->avail_out = sizeof(state->tmp_out_buff); - stream->total_out = 0; - - if (stream->level == 0) - isal_deflate_pass(stream); - else - isal_deflate_icf_pass(stream, start_in); - - state->tmp_out_start = 0; - state->tmp_out_end = stream->total_out; - - stream->next_out = next_out; - stream->avail_out = avail_out; - stream->total_out = total_out; - if (state->tmp_out_end) { - size = state->tmp_out_end; - if (size > stream->avail_out) - size = stream->avail_out; - memcpy(stream->next_out, state->tmp_out_buff, size); - stream->next_out += size; - stream->avail_out -= size; - stream->total_out += size; - state->tmp_out_start += size; - if (state->tmp_out_start != state->tmp_out_end) - state->state += ZSTATE_TMP_OFFSET; - - } - } - + struct isal_zstate *state = &stream->internal_state; + uint32_t size; + + /* Move data from temporary output buffer to output buffer */ + if (state->state >= ZSTATE_TMP_OFFSET) { + size = state->tmp_out_end - state->tmp_out_start; + if (size > stream->avail_out) + size = stream->avail_out; + memcpy(stream->next_out, state->tmp_out_buff + state->tmp_out_start, size); + stream->next_out += size; + stream->avail_out -= size; + stream->total_out += size; + state->tmp_out_start += size; + + if (state->tmp_out_start == state->tmp_out_end) + state->state -= ZSTATE_TMP_OFFSET; + + if (stream->avail_out == 0 || + state->state == ZSTATE_END + // or do not write out empty blocks since the outbuffer was processed + || (state->state == ZSTATE_NEW_HDR && stream->avail_out == 0)) + return; + } + assert(state->tmp_out_start == state->tmp_out_end); + + if (stream->level == 0) + isal_deflate_pass(stream); + else + isal_deflate_icf_pass(stream, start_in); + + /* Fill temporary output buffer then complete filling output buffer */ + if (stream->avail_out > 0 && stream->avail_out < 8 && state->state != ZSTATE_NEW_HDR) { + uint8_t *next_out; + uint32_t avail_out; + uint32_t total_out; + + next_out = stream->next_out; + avail_out = stream->avail_out; + total_out = stream->total_out; + + stream->next_out = state->tmp_out_buff; + stream->avail_out = sizeof(state->tmp_out_buff); + stream->total_out = 0; + + if (stream->level == 0) + isal_deflate_pass(stream); + else + isal_deflate_icf_pass(stream, start_in); + + state->tmp_out_start = 0; + state->tmp_out_end = stream->total_out; + + stream->next_out = next_out; + stream->avail_out = avail_out; + stream->total_out = total_out; + if (state->tmp_out_end) { + size = state->tmp_out_end; + if (size > stream->avail_out) + size = stream->avail_out; + memcpy(stream->next_out, state->tmp_out_buff, size); + stream->next_out += size; + stream->avail_out -= size; + stream->total_out += size; + state->tmp_out_start += size; + if (state->tmp_out_start != state->tmp_out_end) + state->state += ZSTATE_TMP_OFFSET; + } + } } -static void write_constant_compressed_stateless(struct isal_zstream *stream, - uint32_t repeated_length) +static void +write_constant_compressed_stateless(struct isal_zstream *stream, uint32_t repeated_length) { - /* Assumes repeated_length is at least 1. - * Assumes the input end_of_stream is either 0 or 1. */ - struct isal_zstate *state = &stream->internal_state; - uint32_t rep_bits = ((repeated_length - 1) / 258) * 2; - uint32_t rep_bytes = rep_bits / 8; - uint32_t rep_extra = (repeated_length - 1) % 258; - uint32_t bytes; - uint32_t repeated_char = *stream->next_in; - uint8_t *start_in = stream->next_in; - - /* Guarantee there is enough space for the header even in the worst case */ - if (stream->avail_out < HEADER_LENGTH + MAX_FIXUP_CODE_LENGTH + rep_bytes + 8) - return; - - /* Assumes the repeated char is either 0 or 0xFF. */ - memcpy(stream->next_out, repeated_char_header[repeated_char & 1], HEADER_LENGTH); - - if (stream->avail_in == repeated_length && stream->end_of_stream > 0) { - stream->next_out[0] |= 1; - state->has_eob_hdr = 1; - state->has_eob = 1; - state->state = ZSTATE_TRL; - } else { - state->state = ZSTATE_NEW_HDR; - } - - memset(stream->next_out + HEADER_LENGTH, 0, rep_bytes); - stream->avail_out -= HEADER_LENGTH + rep_bytes; - stream->next_out += HEADER_LENGTH + rep_bytes; - stream->total_out += HEADER_LENGTH + rep_bytes; - - set_buf(&state->bitbuf, stream->next_out, stream->avail_out); - - /* These two lines are basically a modified version of init. */ - state->bitbuf.m_bits = 0; - state->bitbuf.m_bit_count = rep_bits % 8; - - /* Add smaller repeat codes as necessary. Code280 can describe repeat - * lengths of 115-130 bits. Code10 can describe repeat lengths of 10 - * bits. If more than 230 bits, fill code with two code280s. Else if - * more than 115 repeats, fill with code10s until one code280 can - * finish the rest of the repeats. Else, fill with code10s and - * literals */ - if (rep_extra > 115) { - while (rep_extra > 130 && rep_extra < 230) { - write_bits(&state->bitbuf, CODE_10, CODE_10_LENGTH); - rep_extra -= 10; - } - - if (rep_extra >= 230) { - write_bits(&state->bitbuf, - CODE_280 | ((rep_extra / 2 - 115) << - CODE_280_LENGTH), CODE_280_TOTAL_LENGTH); - rep_extra -= rep_extra / 2; - } - - write_bits(&state->bitbuf, - CODE_280 | ((rep_extra - 115) << CODE_280_LENGTH), - CODE_280_TOTAL_LENGTH); - - } else { - while (rep_extra >= 10) { - - write_bits(&state->bitbuf, CODE_10, CODE_10_LENGTH); - rep_extra -= 10; - } - - for (; rep_extra > 0; rep_extra--) - write_bits(&state->bitbuf, CODE_LIT, CODE_LIT_LENGTH); - } - - write_bits(&state->bitbuf, END_OF_BLOCK, END_OF_BLOCK_LEN); - - stream->next_in += repeated_length; - stream->avail_in -= repeated_length; - stream->total_in += repeated_length; - state->block_end += repeated_length; - - bytes = buffer_used(&state->bitbuf); - stream->next_out = buffer_ptr(&state->bitbuf); - stream->avail_out -= bytes; - stream->total_out += bytes; - - if (stream->gzip_flag) - update_checksum(stream, start_in, stream->next_in - start_in); - - return; + /* Assumes repeated_length is at least 1. + * Assumes the input end_of_stream is either 0 or 1. */ + struct isal_zstate *state = &stream->internal_state; + uint32_t rep_bits = ((repeated_length - 1) / 258) * 2; + uint32_t rep_bytes = rep_bits / 8; + uint32_t rep_extra = (repeated_length - 1) % 258; + uint32_t bytes; + uint32_t repeated_char = *stream->next_in; + uint8_t *start_in = stream->next_in; + + /* Guarantee there is enough space for the header even in the worst case */ + if (stream->avail_out < HEADER_LENGTH + MAX_FIXUP_CODE_LENGTH + rep_bytes + 8) + return; + + /* Assumes the repeated char is either 0 or 0xFF. */ + memcpy(stream->next_out, repeated_char_header[repeated_char & 1], HEADER_LENGTH); + + if (stream->avail_in == repeated_length && stream->end_of_stream > 0) { + stream->next_out[0] |= 1; + state->has_eob_hdr = 1; + state->has_eob = 1; + state->state = ZSTATE_TRL; + } else { + state->state = ZSTATE_NEW_HDR; + } + + memset(stream->next_out + HEADER_LENGTH, 0, rep_bytes); + stream->avail_out -= HEADER_LENGTH + rep_bytes; + stream->next_out += HEADER_LENGTH + rep_bytes; + stream->total_out += HEADER_LENGTH + rep_bytes; + + set_buf(&state->bitbuf, stream->next_out, stream->avail_out); + + /* These two lines are basically a modified version of init. */ + state->bitbuf.m_bits = 0; + state->bitbuf.m_bit_count = rep_bits % 8; + + /* Add smaller repeat codes as necessary. Code280 can describe repeat + * lengths of 115-130 bits. Code10 can describe repeat lengths of 10 + * bits. If more than 230 bits, fill code with two code280s. Else if + * more than 115 repeats, fill with code10s until one code280 can + * finish the rest of the repeats. Else, fill with code10s and + * literals */ + if (rep_extra > 115) { + while (rep_extra > 130 && rep_extra < 230) { + write_bits(&state->bitbuf, CODE_10, CODE_10_LENGTH); + rep_extra -= 10; + } + + if (rep_extra >= 230) { + write_bits(&state->bitbuf, + CODE_280 | ((rep_extra / 2 - 115) << CODE_280_LENGTH), + CODE_280_TOTAL_LENGTH); + rep_extra -= rep_extra / 2; + } + + write_bits(&state->bitbuf, CODE_280 | ((rep_extra - 115) << CODE_280_LENGTH), + CODE_280_TOTAL_LENGTH); + + } else { + while (rep_extra >= 10) { + + write_bits(&state->bitbuf, CODE_10, CODE_10_LENGTH); + rep_extra -= 10; + } + + for (; rep_extra > 0; rep_extra--) + write_bits(&state->bitbuf, CODE_LIT, CODE_LIT_LENGTH); + } + + write_bits(&state->bitbuf, END_OF_BLOCK, END_OF_BLOCK_LEN); + + stream->next_in += repeated_length; + stream->avail_in -= repeated_length; + stream->total_in += repeated_length; + state->block_end += repeated_length; + + bytes = buffer_used(&state->bitbuf); + stream->next_out = buffer_ptr(&state->bitbuf); + stream->avail_out -= bytes; + stream->total_out += bytes; + + if (stream->gzip_flag) + update_checksum(stream, start_in, stream->next_in - start_in); + + return; } -static int detect_repeated_char_length(uint8_t * in, uint32_t length) +static int +detect_repeated_char_length(uint8_t *in, uint32_t length) { - /* This currently assumes the first 8 bytes are the same character. - * This won't work effectively if the input stream isn't aligned well. */ - uint8_t *p_8, *end = in + length; - uint64_t *p_64 = (uint64_t *) in; - uint64_t w = *p_64; - uint8_t c = (uint8_t) w; + /* This currently assumes the first 8 bytes are the same character. + * This won't work effectively if the input stream isn't aligned well. */ + uint8_t *p_8, *end = in + length; + uint64_t *p_64 = (uint64_t *) in; + uint64_t w = *p_64; + uint8_t c = (uint8_t) w; - for (; (p_64 <= (uint64_t *) (end - 8)) && (w == *p_64); p_64++) ; + for (; (p_64 <= (uint64_t *) (end - 8)) && (w == *p_64); p_64++) + ; - p_8 = (uint8_t *) p_64; + p_8 = (uint8_t *) p_64; - for (; (p_8 < end) && (c == *p_8); p_8++) ; + for (; (p_8 < end) && (c == *p_8); p_8++) + ; - return p_8 - in; + return p_8 - in; } -static int isal_deflate_int_stateless(struct isal_zstream *stream) +static int +isal_deflate_int_stateless(struct isal_zstream *stream) { - uint32_t repeat_length; - struct isal_zstate *state = &stream->internal_state; + uint32_t repeat_length; + struct isal_zstate *state = &stream->internal_state; - if (stream->gzip_flag == IGZIP_GZIP || stream->gzip_flag == IGZIP_ZLIB) - if (write_stream_header_stateless(stream)) - return STATELESS_OVERFLOW; + if (stream->gzip_flag == IGZIP_GZIP || stream->gzip_flag == IGZIP_ZLIB) + if (write_stream_header_stateless(stream)) + return STATELESS_OVERFLOW; - if (stream->avail_in >= 8 - && (load_native_u64(stream->next_in) == 0 - || load_native_u64(stream->next_in) == ~(uint64_t) 0)) { - repeat_length = detect_repeated_char_length(stream->next_in, stream->avail_in); + if (stream->avail_in >= 8 && (load_native_u64(stream->next_in) == 0 || + load_native_u64(stream->next_in) == ~(uint64_t) 0)) { + repeat_length = detect_repeated_char_length(stream->next_in, stream->avail_in); - if (stream->avail_in == repeat_length || repeat_length >= MIN_REPEAT_LEN) - write_constant_compressed_stateless(stream, repeat_length); - } + if (stream->avail_in == repeat_length || repeat_length >= MIN_REPEAT_LEN) + write_constant_compressed_stateless(stream, repeat_length); + } - if (stream->level == 0) { - if (state->state == ZSTATE_NEW_HDR || state->state == ZSTATE_HDR) { - write_deflate_header_unaligned_stateless(stream); - if (state->state == ZSTATE_NEW_HDR || state->state == ZSTATE_HDR) - return STATELESS_OVERFLOW; + if (stream->level == 0) { + if (state->state == ZSTATE_NEW_HDR || state->state == ZSTATE_HDR) { + write_deflate_header_unaligned_stateless(stream); + if (state->state == ZSTATE_NEW_HDR || state->state == ZSTATE_HDR) + return STATELESS_OVERFLOW; - reset_match_history(stream); - } + reset_match_history(stream); + } - isal_deflate_pass(stream); + isal_deflate_pass(stream); - } else if (stream->level <= ISAL_DEF_MAX_LEVEL) { - if (state->state == ZSTATE_NEW_HDR || state->state == ZSTATE_HDR) - reset_match_history(stream); + } else if (stream->level <= ISAL_DEF_MAX_LEVEL) { + if (state->state == ZSTATE_NEW_HDR || state->state == ZSTATE_HDR) + reset_match_history(stream); - state->count = 0; - isal_deflate_icf_pass(stream, stream->next_in); + state->count = 0; + isal_deflate_icf_pass(stream, stream->next_in); + } - } - - if (state->state == ZSTATE_END - || (state->state == ZSTATE_NEW_HDR && stream->flush == FULL_FLUSH)) - return COMP_OK; - else - return STATELESS_OVERFLOW; + if (state->state == ZSTATE_END || + (state->state == ZSTATE_NEW_HDR && stream->flush == FULL_FLUSH)) + return COMP_OK; + else + return STATELESS_OVERFLOW; } -static void write_type0_header(struct isal_zstream *stream) +static void +write_type0_header(struct isal_zstream *stream) { - struct isal_zstate *state = &stream->internal_state; - uint64_t stored_blk_hdr; - uint32_t copy_size; - uint32_t memcpy_len, avail_in; - uint32_t block_in_size = state->block_end - state->block_next; - uint32_t block_next_offset; - struct BitBuf2 *bitbuf = &stream->internal_state.bitbuf; - - if (block_in_size > TYPE0_MAX_BLK_LEN) { - stored_blk_hdr = 0xFFFF; - copy_size = TYPE0_MAX_BLK_LEN; - } else { - stored_blk_hdr = ~block_in_size; - stored_blk_hdr <<= 16; - stored_blk_hdr |= (block_in_size & 0xFFFF); - copy_size = block_in_size; - - /* Handle BFINAL bit */ - block_next_offset = stream->total_in - state->block_next; - avail_in = stream->avail_in + block_next_offset; - if (stream->end_of_stream && avail_in == block_in_size) - stream->internal_state.has_eob_hdr = 1; - } - - if (bitbuf->m_bit_count == 0 && stream->avail_out >= TYPE0_HDR_LEN + 1) { - stored_blk_hdr = stored_blk_hdr << 8; - stored_blk_hdr |= stream->internal_state.has_eob_hdr; - memcpy_len = TYPE0_HDR_LEN + 1; - stored_blk_hdr = to_le64(stored_blk_hdr); - memcpy(stream->next_out, &stored_blk_hdr, memcpy_len); - } else if (stream->avail_out >= 8) { - set_buf(bitbuf, stream->next_out, stream->avail_out); - write_bits_flush(bitbuf, stream->internal_state.has_eob_hdr, 3); - stream->next_out = buffer_ptr(bitbuf); - stream->total_out += buffer_used(bitbuf); - stream->avail_out -= buffer_used(bitbuf); - memcpy_len = TYPE0_HDR_LEN; - stored_blk_hdr = to_le64(stored_blk_hdr); - memcpy(stream->next_out, &stored_blk_hdr, memcpy_len); - } else { - stream->internal_state.has_eob_hdr = 0; - return; - } - - stream->next_out += memcpy_len; - stream->avail_out -= memcpy_len; - stream->total_out += memcpy_len; - stream->internal_state.state = ZSTATE_TYPE0_BODY; - - stream->internal_state.count = copy_size; + struct isal_zstate *state = &stream->internal_state; + uint64_t stored_blk_hdr; + uint32_t copy_size; + uint32_t memcpy_len, avail_in; + uint32_t block_in_size = state->block_end - state->block_next; + uint32_t block_next_offset; + struct BitBuf2 *bitbuf = &stream->internal_state.bitbuf; + + if (block_in_size > TYPE0_MAX_BLK_LEN) { + stored_blk_hdr = 0xFFFF; + copy_size = TYPE0_MAX_BLK_LEN; + } else { + stored_blk_hdr = ~block_in_size; + stored_blk_hdr <<= 16; + stored_blk_hdr |= (block_in_size & 0xFFFF); + copy_size = block_in_size; + + /* Handle BFINAL bit */ + block_next_offset = stream->total_in - state->block_next; + avail_in = stream->avail_in + block_next_offset; + if (stream->end_of_stream && avail_in == block_in_size) + stream->internal_state.has_eob_hdr = 1; + } + + if (bitbuf->m_bit_count == 0 && stream->avail_out >= TYPE0_HDR_LEN + 1) { + stored_blk_hdr = stored_blk_hdr << 8; + stored_blk_hdr |= stream->internal_state.has_eob_hdr; + memcpy_len = TYPE0_HDR_LEN + 1; + stored_blk_hdr = to_le64(stored_blk_hdr); + memcpy(stream->next_out, &stored_blk_hdr, memcpy_len); + } else if (stream->avail_out >= 8) { + set_buf(bitbuf, stream->next_out, stream->avail_out); + write_bits_flush(bitbuf, stream->internal_state.has_eob_hdr, 3); + stream->next_out = buffer_ptr(bitbuf); + stream->total_out += buffer_used(bitbuf); + stream->avail_out -= buffer_used(bitbuf); + memcpy_len = TYPE0_HDR_LEN; + stored_blk_hdr = to_le64(stored_blk_hdr); + memcpy(stream->next_out, &stored_blk_hdr, memcpy_len); + } else { + stream->internal_state.has_eob_hdr = 0; + return; + } + + stream->next_out += memcpy_len; + stream->avail_out -= memcpy_len; + stream->total_out += memcpy_len; + stream->internal_state.state = ZSTATE_TYPE0_BODY; + + stream->internal_state.count = copy_size; } -static uint32_t write_stored_block(struct isal_zstream *stream) +static uint32_t +write_stored_block(struct isal_zstream *stream) { - uint32_t copy_size, avail_in, block_next_offset; - uint8_t *next_in; - struct isal_zstate *state = &stream->internal_state; - - do { - if (state->state == ZSTATE_TYPE0_HDR) { - write_type0_header(stream); - if (state->state == ZSTATE_TYPE0_HDR) - break; - } - - assert(state->count <= state->block_end - state->block_next); - copy_size = state->count; - - block_next_offset = stream->total_in - state->block_next; - next_in = stream->next_in - block_next_offset; - avail_in = stream->avail_in + block_next_offset; - - if (copy_size > stream->avail_out || copy_size > avail_in) { - state->count = copy_size; - copy_size = (stream->avail_out <= avail_in) ? - stream->avail_out : avail_in; - - memcpy(stream->next_out, next_in, copy_size); - state->count -= copy_size; - } else { - memcpy(stream->next_out, next_in, copy_size); - - state->count = 0; - state->state = ZSTATE_TYPE0_HDR; - } - - state->block_next += copy_size; - stream->next_out += copy_size; - stream->avail_out -= copy_size; - stream->total_out += copy_size; - - if (state->block_next == state->block_end) { - state->state = state->has_eob_hdr ? ZSTATE_TRL : ZSTATE_NEW_HDR; - if (stream->flush == FULL_FLUSH && state->state == ZSTATE_NEW_HDR - && are_buffers_empty(stream)) { - /* Clear match history so there are no cross - * block length distance pairs */ - reset_match_history(stream); - } - } - } while (state->state == ZSTATE_TYPE0_HDR); - - return state->block_end - state->block_next; + uint32_t copy_size, avail_in, block_next_offset; + uint8_t *next_in; + struct isal_zstate *state = &stream->internal_state; + + do { + if (state->state == ZSTATE_TYPE0_HDR) { + write_type0_header(stream); + if (state->state == ZSTATE_TYPE0_HDR) + break; + } + + assert(state->count <= state->block_end - state->block_next); + copy_size = state->count; + + block_next_offset = stream->total_in - state->block_next; + next_in = stream->next_in - block_next_offset; + avail_in = stream->avail_in + block_next_offset; + + if (copy_size > stream->avail_out || copy_size > avail_in) { + state->count = copy_size; + copy_size = (stream->avail_out <= avail_in) ? stream->avail_out : avail_in; + + memcpy(stream->next_out, next_in, copy_size); + state->count -= copy_size; + } else { + memcpy(stream->next_out, next_in, copy_size); + + state->count = 0; + state->state = ZSTATE_TYPE0_HDR; + } + + state->block_next += copy_size; + stream->next_out += copy_size; + stream->avail_out -= copy_size; + stream->total_out += copy_size; + + if (state->block_next == state->block_end) { + state->state = state->has_eob_hdr ? ZSTATE_TRL : ZSTATE_NEW_HDR; + if (stream->flush == FULL_FLUSH && state->state == ZSTATE_NEW_HDR && + are_buffers_empty(stream)) { + /* Clear match history so there are no cross + * block length distance pairs */ + reset_match_history(stream); + } + } + } while (state->state == ZSTATE_TYPE0_HDR); + + return state->block_end - state->block_next; } -static inline void reset_match_history(struct isal_zstream *stream) +static inline void +reset_match_history(struct isal_zstream *stream) { - struct isal_zstate *state = &stream->internal_state; - struct level_buf *level_buf = (struct level_buf *)stream->level_buf; - uint16_t *hash_table; - uint32_t hash_table_size; - - hash_table_size = 2 * (state->hash_mask + 1); - - switch (stream->level) { - case 3: - hash_table = level_buf->lvl3.hash_table; - break; - case 2: - hash_table = level_buf->lvl2.hash_table; - break; - case 1: - hash_table = level_buf->lvl1.hash_table; - break; - default: - hash_table = state->head; - } - - state->has_hist = IGZIP_NO_HIST; - - /* There is definitely more than 16 bytes in the hash table. Set this - * minimum to avoid a wmemset of size 0 */ - if (hash_table_size <= sizeof(wchar_t)) - hash_table_size = sizeof(wchar_t); - - if (sizeof(wchar_t) == 2) { - uint16_t hash_init_val; - - hash_init_val = stream->total_in & 0xffff; - wmemset((wchar_t *)hash_table, hash_init_val, - hash_table_size / sizeof(wchar_t)); - - } else if (sizeof(wchar_t) == 4) { - uint32_t hash_init_val; - int rep_bits; - - hash_init_val = stream->total_in & 0xffff; - for (rep_bits = sizeof(uint16_t) * 8; rep_bits < sizeof(wchar_t) * 8; - rep_bits *= 2) - hash_init_val |= hash_init_val << rep_bits; - - wmemset((wchar_t *)hash_table, hash_init_val, - hash_table_size / sizeof(wchar_t)); - } else { - if ((stream->total_in & 0xFFFF) == 0) - memset(hash_table, 0, hash_table_size); - else { - int i; - for (i = 0; i < hash_table_size / 2; i++) { - hash_table[i] = (uint16_t) (stream->total_in); - } - } - } - + struct isal_zstate *state = &stream->internal_state; + struct level_buf *level_buf = (struct level_buf *) stream->level_buf; + uint16_t *hash_table; + uint32_t hash_table_size; + + hash_table_size = 2 * (state->hash_mask + 1); + + switch (stream->level) { + case 3: + hash_table = level_buf->lvl3.hash_table; + break; + case 2: + hash_table = level_buf->lvl2.hash_table; + break; + case 1: + hash_table = level_buf->lvl1.hash_table; + break; + default: + hash_table = state->head; + } + + state->has_hist = IGZIP_NO_HIST; + + /* There is definitely more than 16 bytes in the hash table. Set this + * minimum to avoid a wmemset of size 0 */ + if (hash_table_size <= sizeof(wchar_t)) + hash_table_size = sizeof(wchar_t); + + if (sizeof(wchar_t) == 2) { + uint16_t hash_init_val; + + hash_init_val = stream->total_in & 0xffff; + wmemset((wchar_t *) hash_table, hash_init_val, hash_table_size / sizeof(wchar_t)); + + } else if (sizeof(wchar_t) == 4) { + uint32_t hash_init_val; + int rep_bits; + + hash_init_val = stream->total_in & 0xffff; + for (rep_bits = sizeof(uint16_t) * 8; rep_bits < sizeof(wchar_t) * 8; rep_bits *= 2) + hash_init_val |= hash_init_val << rep_bits; + + wmemset((wchar_t *) hash_table, hash_init_val, hash_table_size / sizeof(wchar_t)); + } else { + if ((stream->total_in & 0xFFFF) == 0) + memset(hash_table, 0, hash_table_size); + else { + int i; + for (i = 0; i < hash_table_size / 2; i++) { + hash_table[i] = (uint16_t) (stream->total_in); + } + } + } } static void inline set_dist_mask(struct isal_zstream *stream) { - struct isal_zstate *state = &stream->internal_state; - uint32_t hist_size; + struct isal_zstate *state = &stream->internal_state; + uint32_t hist_size; - if (stream->hist_bits > ISAL_DEF_MAX_HIST_BITS || stream->hist_bits == 0) - stream->hist_bits = ISAL_DEF_MAX_HIST_BITS; + if (stream->hist_bits > ISAL_DEF_MAX_HIST_BITS || stream->hist_bits == 0) + stream->hist_bits = ISAL_DEF_MAX_HIST_BITS; - hist_size = (1 << (stream->hist_bits)); - state->dist_mask = hist_size - 1; + hist_size = (1 << (stream->hist_bits)); + state->dist_mask = hist_size - 1; - if (IGZIP_HIST_SIZE < ISAL_DEF_HIST_SIZE && state->dist_mask > IGZIP_HIST_SIZE - 1) - state->dist_mask = IGZIP_HIST_SIZE - 1; + if (IGZIP_HIST_SIZE < ISAL_DEF_HIST_SIZE && state->dist_mask > IGZIP_HIST_SIZE - 1) + state->dist_mask = IGZIP_HIST_SIZE - 1; } static void inline set_hash_mask(struct isal_zstream *stream) { - struct isal_zstate *state = &stream->internal_state; - - switch (stream->level) { - case 3: - state->hash_mask = LVL3_HASH_MASK; - break; - case 2: - state->hash_mask = LVL2_HASH_MASK; - break; - case 1: - state->hash_mask = LVL1_HASH_MASK; - break; - case 0: - state->hash_mask = LVL0_HASH_MASK; - } + struct isal_zstate *state = &stream->internal_state; + + switch (stream->level) { + case 3: + state->hash_mask = LVL3_HASH_MASK; + break; + case 2: + state->hash_mask = LVL2_HASH_MASK; + break; + case 1: + state->hash_mask = LVL1_HASH_MASK; + break; + case 0: + state->hash_mask = LVL0_HASH_MASK; + } } -void isal_deflate_init(struct isal_zstream *stream) +void +isal_deflate_init(struct isal_zstream *stream) { - struct isal_zstate *state = &stream->internal_state; - - stream->total_in = 0; - stream->total_out = 0; - stream->hufftables = (struct isal_hufftables *)&hufftables_default; - stream->level = 0; - stream->level_buf = NULL; - stream->level_buf_size = 0; - stream->end_of_stream = 0; - stream->flush = NO_FLUSH; - stream->gzip_flag = 0; - stream->hist_bits = 0; - - state->block_next = 0; - state->block_end = 0; - state->b_bytes_valid = 0; - state->b_bytes_processed = 0; - state->total_in_start = 0; - state->has_wrap_hdr = 0; - state->has_eob = 0; - state->has_eob_hdr = 0; - state->has_hist = IGZIP_NO_HIST; - state->has_level_buf_init = 0; - state->state = ZSTATE_NEW_HDR; - state->count = 0; - - state->tmp_out_start = 0; - state->tmp_out_end = 0; - - init(&state->bitbuf); - - state->crc = 0; - - return; + struct isal_zstate *state = &stream->internal_state; + + stream->total_in = 0; + stream->total_out = 0; + stream->hufftables = (struct isal_hufftables *) &hufftables_default; + stream->level = 0; + stream->level_buf = NULL; + stream->level_buf_size = 0; + stream->end_of_stream = 0; + stream->flush = NO_FLUSH; + stream->gzip_flag = 0; + stream->hist_bits = 0; + + state->block_next = 0; + state->block_end = 0; + state->b_bytes_valid = 0; + state->b_bytes_processed = 0; + state->total_in_start = 0; + state->has_wrap_hdr = 0; + state->has_eob = 0; + state->has_eob_hdr = 0; + state->has_hist = IGZIP_NO_HIST; + state->has_level_buf_init = 0; + state->state = ZSTATE_NEW_HDR; + state->count = 0; + + state->tmp_out_start = 0; + state->tmp_out_end = 0; + + init(&state->bitbuf); + + state->crc = 0; + + return; } -void isal_deflate_reset(struct isal_zstream *stream) +void +isal_deflate_reset(struct isal_zstream *stream) { - struct isal_zstate *state = &stream->internal_state; - - stream->total_in = 0; - stream->total_out = 0; - - state->block_next = 0; - state->block_end = 0; - state->b_bytes_valid = 0; - state->b_bytes_processed = 0; - state->total_in_start = 0; - state->has_wrap_hdr = 0; - state->has_eob = 0; - state->has_level_buf_init = 0; - state->has_eob_hdr = 0; - state->has_hist = IGZIP_NO_HIST; - state->state = ZSTATE_NEW_HDR; - state->count = 0; - - state->tmp_out_start = 0; - state->tmp_out_end = 0; - - init(&state->bitbuf); - - state->crc = 0; - + struct isal_zstate *state = &stream->internal_state; + + stream->total_in = 0; + stream->total_out = 0; + + state->block_next = 0; + state->block_end = 0; + state->b_bytes_valid = 0; + state->b_bytes_processed = 0; + state->total_in_start = 0; + state->has_wrap_hdr = 0; + state->has_eob = 0; + state->has_level_buf_init = 0; + state->has_eob_hdr = 0; + state->has_hist = IGZIP_NO_HIST; + state->state = ZSTATE_NEW_HDR; + state->count = 0; + + state->tmp_out_start = 0; + state->tmp_out_end = 0; + + init(&state->bitbuf); + + state->crc = 0; } -void isal_gzip_header_init(struct isal_gzip_header *gz_hdr) +void +isal_gzip_header_init(struct isal_gzip_header *gz_hdr) { - gz_hdr->text = 0; - gz_hdr->time = 0; - gz_hdr->xflags = 0; - gz_hdr->os = 0xff; - gz_hdr->extra = NULL; - gz_hdr->extra_buf_len = 0; - gz_hdr->extra_len = 0; - gz_hdr->name = NULL; - gz_hdr->name_buf_len = 0; - gz_hdr->comment = NULL; - gz_hdr->comment_buf_len = 0; - gz_hdr->hcrc = 0; - gz_hdr->flags = 0; + gz_hdr->text = 0; + gz_hdr->time = 0; + gz_hdr->xflags = 0; + gz_hdr->os = 0xff; + gz_hdr->extra = NULL; + gz_hdr->extra_buf_len = 0; + gz_hdr->extra_len = 0; + gz_hdr->name = NULL; + gz_hdr->name_buf_len = 0; + gz_hdr->comment = NULL; + gz_hdr->comment_buf_len = 0; + gz_hdr->hcrc = 0; + gz_hdr->flags = 0; } -void isal_zlib_header_init(struct isal_zlib_header *z_hdr) +void +isal_zlib_header_init(struct isal_zlib_header *z_hdr) { - z_hdr->info = 0; - z_hdr->level = 0; - z_hdr->dict_id = 0; - z_hdr->dict_flag = 0; + z_hdr->info = 0; + z_hdr->level = 0; + z_hdr->dict_id = 0; + z_hdr->dict_flag = 0; } -uint32_t isal_write_gzip_header(struct isal_zstream *stream, struct isal_gzip_header *gz_hdr) +uint32_t +isal_write_gzip_header(struct isal_zstream *stream, struct isal_gzip_header *gz_hdr) { - uint32_t flags = 0, hcrc, hdr_size = GZIP_HDR_BASE; - uint8_t *out_buf = stream->next_out, *out_buf_start = stream->next_out; - uint32_t name_len = 0, comment_len = 0; - - if (gz_hdr->text) - flags |= TEXT_FLAG; - if (gz_hdr->extra) { - flags |= EXTRA_FLAG; - hdr_size += GZIP_EXTRA_LEN + gz_hdr->extra_len; - } - if (gz_hdr->name) { - flags |= NAME_FLAG; - name_len = strnlen(gz_hdr->name, gz_hdr->name_buf_len); - if (name_len < gz_hdr->name_buf_len) - name_len++; - hdr_size += name_len; - } - if (gz_hdr->comment) { - flags |= COMMENT_FLAG; - comment_len = strnlen(gz_hdr->comment, gz_hdr->comment_buf_len); - if (comment_len < gz_hdr->comment_buf_len) - comment_len++; - hdr_size += comment_len; - } - if (gz_hdr->hcrc) { - flags |= HCRC_FLAG; - hdr_size += GZIP_HCRC_LEN; - } - - if (stream->avail_out < hdr_size) - return hdr_size; - - out_buf[0] = 0x1f; - out_buf[1] = 0x8b; - out_buf[2] = DEFLATE_METHOD; - out_buf[3] = flags; - store_le_u32(out_buf + 4, gz_hdr->time); - out_buf[8] = gz_hdr->xflags; - out_buf[9] = gz_hdr->os; - - out_buf += GZIP_HDR_BASE; - if (flags & EXTRA_FLAG) { - store_le_u16(out_buf, gz_hdr->extra_len); - out_buf += GZIP_EXTRA_LEN; - - memcpy(out_buf, gz_hdr->extra, gz_hdr->extra_len); - out_buf += gz_hdr->extra_len; - } - - if (flags & NAME_FLAG) { - memcpy(out_buf, gz_hdr->name, name_len); - out_buf += name_len; - } - - if (flags & COMMENT_FLAG) { - memcpy(out_buf, gz_hdr->comment, comment_len); - out_buf += comment_len; - } - - if (flags & HCRC_FLAG) { - hcrc = crc32_gzip_refl(0, out_buf_start, out_buf - out_buf_start); - store_le_u16(out_buf, hcrc); - out_buf += GZIP_HCRC_LEN; - } - - stream->next_out += hdr_size; - stream->total_out += hdr_size; - stream->avail_out -= hdr_size; - - return ISAL_DECOMP_OK; + uint32_t flags = 0, hcrc, hdr_size = GZIP_HDR_BASE; + uint8_t *out_buf = stream->next_out, *out_buf_start = stream->next_out; + uint32_t name_len = 0, comment_len = 0; + + if (gz_hdr->text) + flags |= TEXT_FLAG; + if (gz_hdr->extra) { + flags |= EXTRA_FLAG; + hdr_size += GZIP_EXTRA_LEN + gz_hdr->extra_len; + } + if (gz_hdr->name) { + flags |= NAME_FLAG; + name_len = strnlen(gz_hdr->name, gz_hdr->name_buf_len); + if (name_len < gz_hdr->name_buf_len) + name_len++; + hdr_size += name_len; + } + if (gz_hdr->comment) { + flags |= COMMENT_FLAG; + comment_len = strnlen(gz_hdr->comment, gz_hdr->comment_buf_len); + if (comment_len < gz_hdr->comment_buf_len) + comment_len++; + hdr_size += comment_len; + } + if (gz_hdr->hcrc) { + flags |= HCRC_FLAG; + hdr_size += GZIP_HCRC_LEN; + } + + if (stream->avail_out < hdr_size) + return hdr_size; + + out_buf[0] = 0x1f; + out_buf[1] = 0x8b; + out_buf[2] = DEFLATE_METHOD; + out_buf[3] = flags; + store_le_u32(out_buf + 4, gz_hdr->time); + out_buf[8] = gz_hdr->xflags; + out_buf[9] = gz_hdr->os; + + out_buf += GZIP_HDR_BASE; + if (flags & EXTRA_FLAG) { + store_le_u16(out_buf, gz_hdr->extra_len); + out_buf += GZIP_EXTRA_LEN; + + memcpy(out_buf, gz_hdr->extra, gz_hdr->extra_len); + out_buf += gz_hdr->extra_len; + } + + if (flags & NAME_FLAG) { + memcpy(out_buf, gz_hdr->name, name_len); + out_buf += name_len; + } + + if (flags & COMMENT_FLAG) { + memcpy(out_buf, gz_hdr->comment, comment_len); + out_buf += comment_len; + } + + if (flags & HCRC_FLAG) { + hcrc = crc32_gzip_refl(0, out_buf_start, out_buf - out_buf_start); + store_le_u16(out_buf, hcrc); + out_buf += GZIP_HCRC_LEN; + } + + stream->next_out += hdr_size; + stream->total_out += hdr_size; + stream->avail_out -= hdr_size; + + return ISAL_DECOMP_OK; } -uint32_t isal_write_zlib_header(struct isal_zstream *stream, struct isal_zlib_header *z_hdr) +uint32_t +isal_write_zlib_header(struct isal_zstream *stream, struct isal_zlib_header *z_hdr) { - uint32_t cmf, flg, dict_flag = 0, hdr_size = ZLIB_HDR_BASE; - uint8_t *out_buf = stream->next_out; + uint32_t cmf, flg, dict_flag = 0, hdr_size = ZLIB_HDR_BASE; + uint8_t *out_buf = stream->next_out; - if (z_hdr->dict_flag) { - dict_flag = ZLIB_DICT_FLAG; - hdr_size = ZLIB_HDR_BASE + ZLIB_DICT_LEN; - } + if (z_hdr->dict_flag) { + dict_flag = ZLIB_DICT_FLAG; + hdr_size = ZLIB_HDR_BASE + ZLIB_DICT_LEN; + } - if (stream->avail_out < hdr_size) - return hdr_size; + if (stream->avail_out < hdr_size) + return hdr_size; - cmf = DEFLATE_METHOD | (z_hdr->info << 4); - flg = (z_hdr->level << 6) | dict_flag; + cmf = DEFLATE_METHOD | (z_hdr->info << 4); + flg = (z_hdr->level << 6) | dict_flag; - flg += 31 - ((256 * cmf + flg) % 31); + flg += 31 - ((256 * cmf + flg) % 31); - out_buf[0] = cmf; - out_buf[1] = flg; + out_buf[0] = cmf; + out_buf[1] = flg; - if (dict_flag) - store_le_u32(out_buf + 2, z_hdr->dict_id); + if (dict_flag) + store_le_u32(out_buf + 2, z_hdr->dict_id); - stream->next_out += hdr_size; - stream->total_out += hdr_size; - stream->avail_out -= hdr_size; + stream->next_out += hdr_size; + stream->total_out += hdr_size; + stream->avail_out -= hdr_size; - return ISAL_DECOMP_OK; + return ISAL_DECOMP_OK; } -int isal_deflate_set_hufftables(struct isal_zstream *stream, - struct isal_hufftables *hufftables, int type) +int +isal_deflate_set_hufftables(struct isal_zstream *stream, struct isal_hufftables *hufftables, + int type) { - if (stream->internal_state.state != ZSTATE_NEW_HDR) - return ISAL_INVALID_OPERATION; - - switch (type) { - case IGZIP_HUFFTABLE_DEFAULT: - stream->hufftables = (struct isal_hufftables *)&hufftables_default; - break; - case IGZIP_HUFFTABLE_STATIC: - stream->hufftables = (struct isal_hufftables *)&hufftables_static; - break; - case IGZIP_HUFFTABLE_CUSTOM: - if (hufftables != NULL) { - stream->hufftables = hufftables; - break; - } - default: - return ISAL_INVALID_OPERATION; - } - - return COMP_OK; + if (stream->internal_state.state != ZSTATE_NEW_HDR) + return ISAL_INVALID_OPERATION; + + switch (type) { + case IGZIP_HUFFTABLE_DEFAULT: + stream->hufftables = (struct isal_hufftables *) &hufftables_default; + break; + case IGZIP_HUFFTABLE_STATIC: + stream->hufftables = (struct isal_hufftables *) &hufftables_static; + break; + case IGZIP_HUFFTABLE_CUSTOM: + if (hufftables != NULL) { + stream->hufftables = hufftables; + break; + } + default: + return ISAL_INVALID_OPERATION; + } + + return COMP_OK; } -void isal_deflate_stateless_init(struct isal_zstream *stream) +void +isal_deflate_stateless_init(struct isal_zstream *stream) { - stream->total_in = 0; - stream->total_out = 0; - stream->hufftables = (struct isal_hufftables *)&hufftables_default; - stream->level = 0; - stream->level_buf = NULL; - stream->level_buf_size = 0; - stream->end_of_stream = 0; - stream->flush = NO_FLUSH; - stream->gzip_flag = 0; - stream->hist_bits = 0; - stream->internal_state.has_wrap_hdr = 0; - stream->internal_state.state = ZSTATE_NEW_HDR; - return; + stream->total_in = 0; + stream->total_out = 0; + stream->hufftables = (struct isal_hufftables *) &hufftables_default; + stream->level = 0; + stream->level_buf = NULL; + stream->level_buf_size = 0; + stream->end_of_stream = 0; + stream->flush = NO_FLUSH; + stream->gzip_flag = 0; + stream->hist_bits = 0; + stream->internal_state.has_wrap_hdr = 0; + stream->internal_state.state = ZSTATE_NEW_HDR; + return; } -void isal_deflate_hash(struct isal_zstream *stream, uint8_t * dict, uint32_t dict_len) +void +isal_deflate_hash(struct isal_zstream *stream, uint8_t *dict, uint32_t dict_len) { - /* Reset history to prevent out of bounds matches this works because - * dictionary must set at least 1 element in the history */ - struct level_buf *level_buf = (struct level_buf *)stream->level_buf; - uint32_t hash_mask = stream->internal_state.hash_mask; - - switch (stream->level) { - case 3: - memset(level_buf->lvl3.hash_table, -1, sizeof(level_buf->lvl3.hash_table)); - isal_deflate_hash_lvl3(level_buf->lvl3.hash_table, hash_mask, - stream->total_in, dict, dict_len); - break; - - case 2: - memset(level_buf->lvl2.hash_table, -1, sizeof(level_buf->lvl2.hash_table)); - isal_deflate_hash_lvl2(level_buf->lvl2.hash_table, hash_mask, - stream->total_in, dict, dict_len); - break; - case 1: - memset(level_buf->lvl1.hash_table, -1, sizeof(level_buf->lvl1.hash_table)); - isal_deflate_hash_lvl1(level_buf->lvl1.hash_table, hash_mask, - stream->total_in, dict, dict_len); - break; - default: - memset(stream->internal_state.head, -1, sizeof(stream->internal_state.head)); - isal_deflate_hash_lvl0(stream->internal_state.head, hash_mask, - stream->total_in, dict, dict_len); - } - - stream->internal_state.has_hist = IGZIP_HIST; + /* Reset history to prevent out of bounds matches this works because + * dictionary must set at least 1 element in the history */ + struct level_buf *level_buf = (struct level_buf *) stream->level_buf; + uint32_t hash_mask = stream->internal_state.hash_mask; + + switch (stream->level) { + case 3: + memset(level_buf->lvl3.hash_table, -1, sizeof(level_buf->lvl3.hash_table)); + isal_deflate_hash_lvl3(level_buf->lvl3.hash_table, hash_mask, stream->total_in, + dict, dict_len); + break; + + case 2: + memset(level_buf->lvl2.hash_table, -1, sizeof(level_buf->lvl2.hash_table)); + isal_deflate_hash_lvl2(level_buf->lvl2.hash_table, hash_mask, stream->total_in, + dict, dict_len); + break; + case 1: + memset(level_buf->lvl1.hash_table, -1, sizeof(level_buf->lvl1.hash_table)); + isal_deflate_hash_lvl1(level_buf->lvl1.hash_table, hash_mask, stream->total_in, + dict, dict_len); + break; + default: + memset(stream->internal_state.head, -1, sizeof(stream->internal_state.head)); + isal_deflate_hash_lvl0(stream->internal_state.head, hash_mask, stream->total_in, + dict, dict_len); + } + + stream->internal_state.has_hist = IGZIP_HIST; } -int isal_deflate_process_dict(struct isal_zstream *stream, struct isal_dict *dict, - uint8_t * dict_data, uint32_t dict_len) +int +isal_deflate_process_dict(struct isal_zstream *stream, struct isal_dict *dict, uint8_t *dict_data, + uint32_t dict_len) { - if ((dict == NULL) - || (dict_len == 0) - || (dict->level > ISAL_DEF_MAX_LEVEL)) - return ISAL_INVALID_STATE; - - if (dict_len > IGZIP_HIST_SIZE) { - dict_data = dict_data + dict_len - IGZIP_HIST_SIZE; - dict_len = IGZIP_HIST_SIZE; - } - - dict->level = stream->level; - dict->hist_size = dict_len; - memcpy(dict->history, dict_data, dict_len); - memset(dict->hashtable, -1, sizeof(dict->hashtable)); - - switch (stream->level) { - case 3: - dict->hash_size = IGZIP_LVL3_HASH_SIZE; - isal_deflate_hash_lvl3(dict->hashtable, LVL3_HASH_MASK, - 0, dict_data, dict_len); - break; - - case 2: - dict->hash_size = IGZIP_LVL2_HASH_SIZE; - isal_deflate_hash_lvl2(dict->hashtable, LVL2_HASH_MASK, - 0, dict_data, dict_len); - break; - case 1: - dict->hash_size = IGZIP_LVL1_HASH_SIZE; - isal_deflate_hash_lvl1(dict->hashtable, LVL1_HASH_MASK, - 0, dict_data, dict_len); - break; - default: - dict->hash_size = IGZIP_LVL0_HASH_SIZE; - isal_deflate_hash_lvl0(dict->hashtable, LVL0_HASH_MASK, - 0, dict_data, dict_len); - } - return COMP_OK; + if ((dict == NULL) || (dict_len == 0) || (dict->level > ISAL_DEF_MAX_LEVEL)) + return ISAL_INVALID_STATE; + + if (dict_len > IGZIP_HIST_SIZE) { + dict_data = dict_data + dict_len - IGZIP_HIST_SIZE; + dict_len = IGZIP_HIST_SIZE; + } + + dict->level = stream->level; + dict->hist_size = dict_len; + memcpy(dict->history, dict_data, dict_len); + memset(dict->hashtable, -1, sizeof(dict->hashtable)); + + switch (stream->level) { + case 3: + dict->hash_size = IGZIP_LVL3_HASH_SIZE; + isal_deflate_hash_lvl3(dict->hashtable, LVL3_HASH_MASK, 0, dict_data, dict_len); + break; + + case 2: + dict->hash_size = IGZIP_LVL2_HASH_SIZE; + isal_deflate_hash_lvl2(dict->hashtable, LVL2_HASH_MASK, 0, dict_data, dict_len); + break; + case 1: + dict->hash_size = IGZIP_LVL1_HASH_SIZE; + isal_deflate_hash_lvl1(dict->hashtable, LVL1_HASH_MASK, 0, dict_data, dict_len); + break; + default: + dict->hash_size = IGZIP_LVL0_HASH_SIZE; + isal_deflate_hash_lvl0(dict->hashtable, LVL0_HASH_MASK, 0, dict_data, dict_len); + } + return COMP_OK; } -int isal_deflate_reset_dict(struct isal_zstream *stream, struct isal_dict *dict) +int +isal_deflate_reset_dict(struct isal_zstream *stream, struct isal_dict *dict) { - struct isal_zstate *state = &stream->internal_state; - struct level_buf *level_buf = (struct level_buf *)stream->level_buf; - int ret; - - if ((state->state != ZSTATE_NEW_HDR) - || (state->b_bytes_processed != state->b_bytes_valid) - || (dict->level != stream->level) - || (dict->hist_size == 0) - || (dict->hist_size > IGZIP_HIST_SIZE) - || (dict->hash_size > IGZIP_LVL3_HASH_SIZE)) - return ISAL_INVALID_STATE; - - ret = check_level_req(stream); - if (ret) - return ret; - - memcpy(state->buffer, dict->history, dict->hist_size); - state->b_bytes_processed = dict->hist_size; - state->b_bytes_valid = dict->hist_size; - state->has_hist = IGZIP_DICT_HASH_SET; - - switch (stream->level) { - case 3: - memcpy(level_buf->lvl3.hash_table, dict->hashtable, - sizeof(level_buf->lvl3.hash_table)); - break; - - case 2: - memcpy(level_buf->lvl2.hash_table, dict->hashtable, - sizeof(level_buf->lvl2.hash_table)); - break; - case 1: - memcpy(level_buf->lvl1.hash_table, dict->hashtable, - sizeof(level_buf->lvl1.hash_table)); - break; - default: - memcpy(stream->internal_state.head, dict->hashtable, - sizeof(stream->internal_state.head)); - } - - return COMP_OK; + struct isal_zstate *state = &stream->internal_state; + struct level_buf *level_buf = (struct level_buf *) stream->level_buf; + int ret; + + if ((state->state != ZSTATE_NEW_HDR) || + (state->b_bytes_processed != state->b_bytes_valid) || (dict->level != stream->level) || + (dict->hist_size == 0) || (dict->hist_size > IGZIP_HIST_SIZE) || + (dict->hash_size > IGZIP_LVL3_HASH_SIZE)) + return ISAL_INVALID_STATE; + + ret = check_level_req(stream); + if (ret) + return ret; + + memcpy(state->buffer, dict->history, dict->hist_size); + state->b_bytes_processed = dict->hist_size; + state->b_bytes_valid = dict->hist_size; + state->has_hist = IGZIP_DICT_HASH_SET; + + switch (stream->level) { + case 3: + memcpy(level_buf->lvl3.hash_table, dict->hashtable, + sizeof(level_buf->lvl3.hash_table)); + break; + + case 2: + memcpy(level_buf->lvl2.hash_table, dict->hashtable, + sizeof(level_buf->lvl2.hash_table)); + break; + case 1: + memcpy(level_buf->lvl1.hash_table, dict->hashtable, + sizeof(level_buf->lvl1.hash_table)); + break; + default: + memcpy(stream->internal_state.head, dict->hashtable, + sizeof(stream->internal_state.head)); + } + + return COMP_OK; } -int isal_deflate_set_dict(struct isal_zstream *stream, uint8_t * dict, uint32_t dict_len) +int +isal_deflate_set_dict(struct isal_zstream *stream, uint8_t *dict, uint32_t dict_len) { - struct isal_zstate *state = &stream->internal_state; + struct isal_zstate *state = &stream->internal_state; - if (state->state != ZSTATE_NEW_HDR || state->b_bytes_processed != state->b_bytes_valid) - return ISAL_INVALID_STATE; + if (state->state != ZSTATE_NEW_HDR || state->b_bytes_processed != state->b_bytes_valid) + return ISAL_INVALID_STATE; - if (dict_len <= 0) - return COMP_OK; + if (dict_len <= 0) + return COMP_OK; - if (dict_len > IGZIP_HIST_SIZE) { - dict = dict + dict_len - IGZIP_HIST_SIZE; - dict_len = IGZIP_HIST_SIZE; - } + if (dict_len > IGZIP_HIST_SIZE) { + dict = dict + dict_len - IGZIP_HIST_SIZE; + dict_len = IGZIP_HIST_SIZE; + } - memcpy(state->buffer, dict, dict_len); - state->b_bytes_processed = dict_len; - state->b_bytes_valid = dict_len; + memcpy(state->buffer, dict, dict_len); + state->b_bytes_processed = dict_len; + state->b_bytes_valid = dict_len; - state->has_hist = IGZIP_DICT_HIST; + state->has_hist = IGZIP_DICT_HIST; - return COMP_OK; + return COMP_OK; } -int isal_deflate_stateless(struct isal_zstream *stream) +int +isal_deflate_stateless(struct isal_zstream *stream) { - struct isal_zstate *state = &stream->internal_state; - uint8_t *next_in = stream->next_in; - const uint32_t avail_in = stream->avail_in; - const uint32_t total_in = stream->total_in; - - uint8_t *next_out = stream->next_out; - const uint32_t avail_out = stream->avail_out; - const uint32_t total_out = stream->total_out; - const uint32_t gzip_flag = stream->gzip_flag; - const uint32_t has_wrap_hdr = state->has_wrap_hdr; - - int level_check; - uint64_t stored_len; - - /* Final block has already been written */ - state->block_next = stream->total_in; - state->block_end = stream->total_in; - state->has_eob_hdr = 0; - init(&state->bitbuf); - state->state = ZSTATE_NEW_HDR; - state->crc = 0; - state->has_level_buf_init = 0; - set_dist_mask(stream); - - if (stream->flush == NO_FLUSH) - stream->end_of_stream = 1; - - if (stream->flush != NO_FLUSH && stream->flush != FULL_FLUSH) - return INVALID_FLUSH; - - level_check = check_level_req(stream); - if (level_check) { - if (stream->level == 1 && stream->level_buf == NULL) { - /* Default to internal buffer if invalid size is supplied */ - stream->level_buf = state->buffer; - stream->level_buf_size = sizeof(state->buffer) + sizeof(state->head); - } else - return level_check; - } - - set_hash_mask(stream); - - if (state->hash_mask > 2 * avail_in) - state->hash_mask = (1 << bsr(avail_in)) - 1; - - if (avail_in == 0) - stored_len = TYPE0_BLK_HDR_LEN; - else { - stored_len = TYPE0_BLK_HDR_LEN * ((avail_in + TYPE0_MAX_BLK_LEN - 1) / - TYPE0_MAX_BLK_LEN); - stored_len += avail_in; - } - - /* - at least 1 byte compressed data in the case of empty dynamic block which only - contains the EOB - */ - if (stream->gzip_flag == IGZIP_GZIP) - stored_len += gzip_hdr_bytes + gzip_trl_bytes; - else if (stream->gzip_flag == IGZIP_GZIP_NO_HDR) - stored_len += gzip_trl_bytes; - - else if (stream->gzip_flag == IGZIP_ZLIB) - stored_len += zlib_hdr_bytes + zlib_trl_bytes; - - else if (stream->gzip_flag == IGZIP_ZLIB_NO_HDR) - stored_len += zlib_trl_bytes; - - if (avail_out >= stored_len) - stream->avail_out = stored_len; - - if (isal_deflate_int_stateless(stream) == COMP_OK) { - if (avail_out >= stored_len) - stream->avail_out += avail_out - stored_len; - return COMP_OK; - } else { - if (avail_out >= stored_len) - stream->avail_out += avail_out - stored_len; - if (stream->flush == FULL_FLUSH) { - reset_match_history(stream); - } - stream->internal_state.has_eob_hdr = 0; - } - - if (avail_out < stored_len) - return STATELESS_OVERFLOW; - - stream->next_in = next_in + avail_in; - stream->avail_in = 0; - stream->total_in = avail_in; - - state->block_next = stream->total_in - avail_in; - state->block_end = stream->total_in; - - stream->next_out = next_out; - stream->avail_out = avail_out; - stream->total_out = total_out; - - stream->gzip_flag = gzip_flag; - state->has_wrap_hdr = has_wrap_hdr; - init(&stream->internal_state.bitbuf); - stream->internal_state.count = 0; - - if (stream->gzip_flag == IGZIP_GZIP || stream->gzip_flag == IGZIP_ZLIB) - write_stream_header_stateless(stream); - - stream->internal_state.state = ZSTATE_TYPE0_HDR; - - write_stored_block(stream); - - stream->total_in = total_in + avail_in; - - if (stream->gzip_flag) { - stream->internal_state.crc = 0; - update_checksum(stream, next_in, avail_in); - } - - if (stream->end_of_stream) - write_trailer(stream); - - return COMP_OK; - + struct isal_zstate *state = &stream->internal_state; + uint8_t *next_in = stream->next_in; + const uint32_t avail_in = stream->avail_in; + const uint32_t total_in = stream->total_in; + + uint8_t *next_out = stream->next_out; + const uint32_t avail_out = stream->avail_out; + const uint32_t total_out = stream->total_out; + const uint32_t gzip_flag = stream->gzip_flag; + const uint32_t has_wrap_hdr = state->has_wrap_hdr; + + int level_check; + uint64_t stored_len; + + /* Final block has already been written */ + state->block_next = stream->total_in; + state->block_end = stream->total_in; + state->has_eob_hdr = 0; + init(&state->bitbuf); + state->state = ZSTATE_NEW_HDR; + state->crc = 0; + state->has_level_buf_init = 0; + set_dist_mask(stream); + + if (stream->flush == NO_FLUSH) + stream->end_of_stream = 1; + + if (stream->flush != NO_FLUSH && stream->flush != FULL_FLUSH) + return INVALID_FLUSH; + + level_check = check_level_req(stream); + if (level_check) { + if (stream->level == 1 && stream->level_buf == NULL) { + /* Default to internal buffer if invalid size is supplied */ + stream->level_buf = state->buffer; + stream->level_buf_size = sizeof(state->buffer) + sizeof(state->head); + } else + return level_check; + } + + set_hash_mask(stream); + + if (state->hash_mask > 2 * avail_in) + state->hash_mask = (1 << bsr(avail_in)) - 1; + + if (avail_in == 0) + stored_len = TYPE0_BLK_HDR_LEN; + else { + stored_len = TYPE0_BLK_HDR_LEN * + ((avail_in + TYPE0_MAX_BLK_LEN - 1) / TYPE0_MAX_BLK_LEN); + stored_len += avail_in; + } + + /* + at least 1 byte compressed data in the case of empty dynamic block which only + contains the EOB + */ + if (stream->gzip_flag == IGZIP_GZIP) + stored_len += gzip_hdr_bytes + gzip_trl_bytes; + else if (stream->gzip_flag == IGZIP_GZIP_NO_HDR) + stored_len += gzip_trl_bytes; + + else if (stream->gzip_flag == IGZIP_ZLIB) + stored_len += zlib_hdr_bytes + zlib_trl_bytes; + + else if (stream->gzip_flag == IGZIP_ZLIB_NO_HDR) + stored_len += zlib_trl_bytes; + + if (avail_out >= stored_len) + stream->avail_out = stored_len; + + if (isal_deflate_int_stateless(stream) == COMP_OK) { + if (avail_out >= stored_len) + stream->avail_out += avail_out - stored_len; + return COMP_OK; + } else { + if (avail_out >= stored_len) + stream->avail_out += avail_out - stored_len; + if (stream->flush == FULL_FLUSH) { + reset_match_history(stream); + } + stream->internal_state.has_eob_hdr = 0; + } + + if (avail_out < stored_len) + return STATELESS_OVERFLOW; + + stream->next_in = next_in + avail_in; + stream->avail_in = 0; + stream->total_in = avail_in; + + state->block_next = stream->total_in - avail_in; + state->block_end = stream->total_in; + + stream->next_out = next_out; + stream->avail_out = avail_out; + stream->total_out = total_out; + + stream->gzip_flag = gzip_flag; + state->has_wrap_hdr = has_wrap_hdr; + init(&stream->internal_state.bitbuf); + stream->internal_state.count = 0; + + if (stream->gzip_flag == IGZIP_GZIP || stream->gzip_flag == IGZIP_ZLIB) + write_stream_header_stateless(stream); + + stream->internal_state.state = ZSTATE_TYPE0_HDR; + + write_stored_block(stream); + + stream->total_in = total_in + avail_in; + + if (stream->gzip_flag) { + stream->internal_state.crc = 0; + update_checksum(stream, next_in, avail_in); + } + + if (stream->end_of_stream) + write_trailer(stream); + + return COMP_OK; } -static inline uint32_t get_hist_size(struct isal_zstream *stream, uint8_t * start_in, - int32_t buf_hist_start) +static inline uint32_t +get_hist_size(struct isal_zstream *stream, uint8_t *start_in, int32_t buf_hist_start) { - struct isal_zstate *state = &stream->internal_state; - uint32_t history_size; - uint32_t buffered_history; - uint32_t buffered_size = state->b_bytes_valid - state->b_bytes_processed; - uint32_t input_history; - - buffered_history = (state->has_hist) ? state->b_bytes_processed - buf_hist_start : 0; - input_history = stream->next_in - start_in; - - /* Calculate history required for deflate window */ - history_size = (buffered_history >= input_history) ? buffered_history : input_history; - if (history_size > IGZIP_HIST_SIZE) - history_size = IGZIP_HIST_SIZE; - - /* Calculate history required based on internal state */ - if (state->state == ZSTATE_TYPE0_HDR - || state->state == ZSTATE_TYPE0_BODY - || state->state == ZSTATE_TMP_TYPE0_HDR || state->state == ZSTATE_TMP_TYPE0_BODY) { - if (stream->total_in - state->block_next > history_size) { - history_size = (stream->total_in - state->block_next); - } - } else if (stream->avail_in + buffered_size == 0 - && (stream->end_of_stream || stream->flush == FULL_FLUSH)) { - history_size = 0; - } - return history_size; + struct isal_zstate *state = &stream->internal_state; + uint32_t history_size; + uint32_t buffered_history; + uint32_t buffered_size = state->b_bytes_valid - state->b_bytes_processed; + uint32_t input_history; + + buffered_history = (state->has_hist) ? state->b_bytes_processed - buf_hist_start : 0; + input_history = stream->next_in - start_in; + + /* Calculate history required for deflate window */ + history_size = (buffered_history >= input_history) ? buffered_history : input_history; + if (history_size > IGZIP_HIST_SIZE) + history_size = IGZIP_HIST_SIZE; + + /* Calculate history required based on internal state */ + if (state->state == ZSTATE_TYPE0_HDR || state->state == ZSTATE_TYPE0_BODY || + state->state == ZSTATE_TMP_TYPE0_HDR || state->state == ZSTATE_TMP_TYPE0_BODY) { + if (stream->total_in - state->block_next > history_size) { + history_size = (stream->total_in - state->block_next); + } + } else if (stream->avail_in + buffered_size == 0 && + (stream->end_of_stream || stream->flush == FULL_FLUSH)) { + history_size = 0; + } + return history_size; } -int isal_deflate(struct isal_zstream *stream) +int +isal_deflate(struct isal_zstream *stream) { - struct isal_zstate *state = &stream->internal_state; - int ret = COMP_OK; - uint8_t *next_in, *start_in, *buf_start_in, *next_in_pre; - uint32_t avail_in, total_start, hist_size, future_size; - uint32_t in_size, in_size_initial, out_size, out_size_initial; - uint32_t processed, buffered_size = state->b_bytes_valid - state->b_bytes_processed; - uint32_t flush_type = stream->flush; - uint32_t end_of_stream = stream->end_of_stream; - uint32_t size = 0; - int32_t buf_hist_start = 0; - uint8_t *copy_down_src = NULL; - uint64_t copy_down_size = 0, copy_start_offset; - int internal; - - if (stream->flush >= 3) - return INVALID_FLUSH; - - ret = check_level_req(stream); - if (ret) - return ret; - - start_in = stream->next_in; - total_start = stream->total_in; - - hist_size = get_hist_size(stream, start_in, buf_hist_start); - - if (state->has_hist == IGZIP_NO_HIST) { - set_dist_mask(stream); - set_hash_mask(stream); - if (state->hash_mask > 2 * stream->avail_in - && (stream->flush == FULL_FLUSH || stream->end_of_stream)) - state->hash_mask = (1 << bsr(2 * stream->avail_in)) - 1; - stream->total_in -= buffered_size; - reset_match_history(stream); - stream->total_in += buffered_size; - buf_hist_start = state->b_bytes_processed; - - } else if (state->has_hist == IGZIP_DICT_HIST) { - set_dist_mask(stream); - set_hash_mask(stream); - isal_deflate_hash(stream, state->buffer, state->b_bytes_processed); - } else if (state->has_hist == IGZIP_DICT_HASH_SET) { - set_dist_mask(stream); - set_hash_mask(stream); - } - - in_size = stream->avail_in + buffered_size; - out_size = stream->total_out; - do { - in_size_initial = in_size; - out_size_initial = out_size; - buf_start_in = start_in; - internal = 0; - - /* Setup to compress from internal buffer if insufficient history */ - if (stream->total_in - total_start < hist_size + buffered_size) { - /* On entry there should always be sufficient history bufferd */ - /* assert(state->b_bytes_processed >= hist_size); */ - - internal = 1; - /* Shift down internal buffer if it contains more data - * than required */ - if (state->b_bytes_processed > hist_size) { - copy_start_offset = state->b_bytes_processed - hist_size; - - copy_down_src = &state->buffer[copy_start_offset]; - copy_down_size = state->b_bytes_valid - copy_start_offset; - memmove(state->buffer, copy_down_src, copy_down_size); - - state->b_bytes_valid -= copy_down_src - state->buffer; - state->b_bytes_processed -= copy_down_src - state->buffer; - buf_hist_start -= copy_down_src - state->buffer; - if (buf_hist_start < 0) - buf_hist_start = 0; - } - - size = stream->avail_in; - if (size > sizeof(state->buffer) - state->b_bytes_valid) - size = sizeof(state->buffer) - state->b_bytes_valid; - - memcpy(&state->buffer[state->b_bytes_valid], stream->next_in, size); - - stream->next_in += size; - stream->avail_in -= size; - stream->total_in += size; - state->b_bytes_valid += size; - buffered_size += size; - - /* Save off next_in and avail_in if compression is - * performed in internal buffer, total_in can be - * recovered from knowledge of the size of the buffered - * input */ - next_in = stream->next_in; - avail_in = stream->avail_in; - - /* If not much data is buffered and there is no need to - * flush the buffer, just continue rather than attempt - * to compress */ - if (avail_in == 0 && buffered_size <= IGZIP_HIST_SIZE - && stream->total_in - buffered_size - state->block_next <= - IGZIP_HIST_SIZE && !stream->end_of_stream - && stream->flush == NO_FLUSH) - continue; - - if (avail_in) { - stream->flush = NO_FLUSH; - stream->end_of_stream = 0; - } - - stream->next_in = &state->buffer[state->b_bytes_processed]; - stream->avail_in = buffered_size; - stream->total_in -= buffered_size; - - buf_start_in = state->buffer; - - } else if (buffered_size) { - /* The user provided buffer has sufficient data, reset - * the user supplied buffer to included any data already - * buffered */ - stream->next_in -= buffered_size; - stream->avail_in += buffered_size; - stream->total_in -= buffered_size; - state->b_bytes_valid = 0; - state->b_bytes_processed = 0; - buffered_size = 0; - } - - next_in_pre = stream->next_in; - isal_deflate_int(stream, buf_start_in); - processed = stream->next_in - next_in_pre; - hist_size = get_hist_size(stream, buf_start_in, buf_hist_start); - - /* Restore compression to unbuffered input when compressing to internal buffer */ - if (internal) { - state->b_bytes_processed += processed; - buffered_size -= processed; - - stream->flush = flush_type; - stream->end_of_stream = end_of_stream; - stream->total_in += buffered_size; - - stream->next_in = next_in; - stream->avail_in = avail_in; - } - - in_size = stream->avail_in + buffered_size; - out_size = stream->total_out; - - } while (internal && stream->avail_in > 0 && stream->avail_out > 0 - && (in_size_initial != in_size || out_size_initial != out_size)); - - /* Buffer history if data was pulled from the external buffer and future - * calls to deflate will be required */ - if (!internal && (state->state != ZSTATE_END && state->state != ZSTATE_TRL)) { - /* If the external buffer was used, sufficient history must - * exist in the user input buffer */ - /* assert(stream->total_in - total_start >= */ - /* hist_size + buffered_size); */ - - stream->next_in -= buffered_size; - stream->avail_in += buffered_size; - stream->total_in -= buffered_size; - - memmove(state->buffer, stream->next_in - hist_size, hist_size); - state->b_bytes_processed = hist_size; - state->b_bytes_valid = hist_size; - buffered_size = 0; - } - - /* Buffer input data if it is necessary for continued execution */ - if (stream->avail_in > 0 && (stream->avail_out > 0 || stream->level == 3)) { - /* Determine how much data to buffer */ - future_size = sizeof(state->buffer) - state->b_bytes_valid; - if (stream->avail_in < future_size) - /* Buffer all data if it fits as it will need to be buffered - * on the next call anyways*/ - future_size = stream->avail_in; - else if (ISAL_LOOK_AHEAD < future_size) - /* Buffer a minimum look ahead required for level 3 */ - future_size = ISAL_LOOK_AHEAD; - - memcpy(&state->buffer[state->b_bytes_valid], stream->next_in, future_size); - - state->b_bytes_valid += future_size; - buffered_size += future_size; - stream->next_in += future_size; - stream->total_in += future_size; - stream->avail_in -= future_size; - - } - - return ret; + struct isal_zstate *state = &stream->internal_state; + int ret = COMP_OK; + uint8_t *next_in, *start_in, *buf_start_in, *next_in_pre; + uint32_t avail_in, total_start, hist_size, future_size; + uint32_t in_size, in_size_initial, out_size, out_size_initial; + uint32_t processed, buffered_size = state->b_bytes_valid - state->b_bytes_processed; + uint32_t flush_type = stream->flush; + uint32_t end_of_stream = stream->end_of_stream; + uint32_t size = 0; + int32_t buf_hist_start = 0; + uint8_t *copy_down_src = NULL; + uint64_t copy_down_size = 0, copy_start_offset; + int internal; + + if (stream->flush >= 3) + return INVALID_FLUSH; + + ret = check_level_req(stream); + if (ret) + return ret; + + start_in = stream->next_in; + total_start = stream->total_in; + + hist_size = get_hist_size(stream, start_in, buf_hist_start); + + if (state->has_hist == IGZIP_NO_HIST) { + set_dist_mask(stream); + set_hash_mask(stream); + if (state->hash_mask > 2 * stream->avail_in && + (stream->flush == FULL_FLUSH || stream->end_of_stream)) + state->hash_mask = (1 << bsr(2 * stream->avail_in)) - 1; + stream->total_in -= buffered_size; + reset_match_history(stream); + stream->total_in += buffered_size; + buf_hist_start = state->b_bytes_processed; + + } else if (state->has_hist == IGZIP_DICT_HIST) { + set_dist_mask(stream); + set_hash_mask(stream); + isal_deflate_hash(stream, state->buffer, state->b_bytes_processed); + } else if (state->has_hist == IGZIP_DICT_HASH_SET) { + set_dist_mask(stream); + set_hash_mask(stream); + } + + in_size = stream->avail_in + buffered_size; + out_size = stream->total_out; + do { + in_size_initial = in_size; + out_size_initial = out_size; + buf_start_in = start_in; + internal = 0; + + /* Setup to compress from internal buffer if insufficient history */ + if (stream->total_in - total_start < hist_size + buffered_size) { + /* On entry there should always be sufficient history bufferd */ + /* assert(state->b_bytes_processed >= hist_size); */ + + internal = 1; + /* Shift down internal buffer if it contains more data + * than required */ + if (state->b_bytes_processed > hist_size) { + copy_start_offset = state->b_bytes_processed - hist_size; + + copy_down_src = &state->buffer[copy_start_offset]; + copy_down_size = state->b_bytes_valid - copy_start_offset; + memmove(state->buffer, copy_down_src, copy_down_size); + + state->b_bytes_valid -= copy_down_src - state->buffer; + state->b_bytes_processed -= copy_down_src - state->buffer; + buf_hist_start -= copy_down_src - state->buffer; + if (buf_hist_start < 0) + buf_hist_start = 0; + } + + size = stream->avail_in; + if (size > sizeof(state->buffer) - state->b_bytes_valid) + size = sizeof(state->buffer) - state->b_bytes_valid; + + memcpy(&state->buffer[state->b_bytes_valid], stream->next_in, size); + + stream->next_in += size; + stream->avail_in -= size; + stream->total_in += size; + state->b_bytes_valid += size; + buffered_size += size; + + /* Save off next_in and avail_in if compression is + * performed in internal buffer, total_in can be + * recovered from knowledge of the size of the buffered + * input */ + next_in = stream->next_in; + avail_in = stream->avail_in; + + /* If not much data is buffered and there is no need to + * flush the buffer, just continue rather than attempt + * to compress */ + if (avail_in == 0 && buffered_size <= IGZIP_HIST_SIZE && + stream->total_in - buffered_size - state->block_next <= + IGZIP_HIST_SIZE && + !stream->end_of_stream && stream->flush == NO_FLUSH) + continue; + + if (avail_in) { + stream->flush = NO_FLUSH; + stream->end_of_stream = 0; + } + + stream->next_in = &state->buffer[state->b_bytes_processed]; + stream->avail_in = buffered_size; + stream->total_in -= buffered_size; + + buf_start_in = state->buffer; + + } else if (buffered_size) { + /* The user provided buffer has sufficient data, reset + * the user supplied buffer to included any data already + * buffered */ + stream->next_in -= buffered_size; + stream->avail_in += buffered_size; + stream->total_in -= buffered_size; + state->b_bytes_valid = 0; + state->b_bytes_processed = 0; + buffered_size = 0; + } + + next_in_pre = stream->next_in; + isal_deflate_int(stream, buf_start_in); + processed = stream->next_in - next_in_pre; + hist_size = get_hist_size(stream, buf_start_in, buf_hist_start); + + /* Restore compression to unbuffered input when compressing to internal buffer */ + if (internal) { + state->b_bytes_processed += processed; + buffered_size -= processed; + + stream->flush = flush_type; + stream->end_of_stream = end_of_stream; + stream->total_in += buffered_size; + + stream->next_in = next_in; + stream->avail_in = avail_in; + } + + in_size = stream->avail_in + buffered_size; + out_size = stream->total_out; + + } while (internal && stream->avail_in > 0 && stream->avail_out > 0 && + (in_size_initial != in_size || out_size_initial != out_size)); + + /* Buffer history if data was pulled from the external buffer and future + * calls to deflate will be required */ + if (!internal && (state->state != ZSTATE_END && state->state != ZSTATE_TRL)) { + /* If the external buffer was used, sufficient history must + * exist in the user input buffer */ + /* assert(stream->total_in - total_start >= */ + /* hist_size + buffered_size); */ + + stream->next_in -= buffered_size; + stream->avail_in += buffered_size; + stream->total_in -= buffered_size; + + memmove(state->buffer, stream->next_in - hist_size, hist_size); + state->b_bytes_processed = hist_size; + state->b_bytes_valid = hist_size; + buffered_size = 0; + } + + /* Buffer input data if it is necessary for continued execution */ + if (stream->avail_in > 0 && (stream->avail_out > 0 || stream->level == 3)) { + /* Determine how much data to buffer */ + future_size = sizeof(state->buffer) - state->b_bytes_valid; + if (stream->avail_in < future_size) + /* Buffer all data if it fits as it will need to be buffered + * on the next call anyways*/ + future_size = stream->avail_in; + else if (ISAL_LOOK_AHEAD < future_size) + /* Buffer a minimum look ahead required for level 3 */ + future_size = ISAL_LOOK_AHEAD; + + memcpy(&state->buffer[state->b_bytes_valid], stream->next_in, future_size); + + state->b_bytes_valid += future_size; + buffered_size += future_size; + stream->next_in += future_size; + stream->total_in += future_size; + stream->avail_in -= future_size; + } + + return ret; } // Helper function to avoid code duplication. -static void _zlib_header_in_buffer(struct isal_zstream *stream, uint8_t * buffer) +static void +_zlib_header_in_buffer(struct isal_zstream *stream, uint8_t *buffer) { - uint8_t hist_bits, info, level, cmf, flg; - uint8_t dict_flag = 0; - - if (stream->hist_bits == 0) // default hist_bits - hist_bits = ISAL_DEF_MAX_HIST_BITS; - else - hist_bits = stream->hist_bits; - if (hist_bits > 8) - info = hist_bits - 8; - else - info = 0; // For low window sizes ensure correct cmf flag. - if (stream->level == 0) - level = 0; // Fastest algorithm - else - level = 1; // ISA-L levels 1-3 are fast algorithms. - - cmf = DEFLATE_METHOD | (info << 4); - flg = (level << 6) | dict_flag; - flg += 31 - ((256 * cmf + flg) % 31); - buffer[0] = cmf; - buffer[1] = flg; - return; + uint8_t hist_bits, info, level, cmf, flg; + uint8_t dict_flag = 0; + + if (stream->hist_bits == 0) // default hist_bits + hist_bits = ISAL_DEF_MAX_HIST_BITS; + else + hist_bits = stream->hist_bits; + if (hist_bits > 8) + info = hist_bits - 8; + else + info = 0; // For low window sizes ensure correct cmf flag. + if (stream->level == 0) + level = 0; // Fastest algorithm + else + level = 1; // ISA-L levels 1-3 are fast algorithms. + + cmf = DEFLATE_METHOD | (info << 4); + flg = (level << 6) | dict_flag; + flg += 31 - ((256 * cmf + flg) % 31); + buffer[0] = cmf; + buffer[1] = flg; + return; } -static int write_stream_header_stateless(struct isal_zstream *stream) +static int +write_stream_header_stateless(struct isal_zstream *stream) { - uint32_t hdr_bytes; - // Create a 10-byte buffer. Since the gzip header is almost fixed (9 of 10 - // bytes are fixed) use it to initialize the buffer. - uint8_t buffer[10] = { - 0x1f, 0x8b, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff - }; - uint32_t next_flag; - - if (stream->internal_state.has_wrap_hdr) - return COMP_OK; - - if (stream->gzip_flag == IGZIP_ZLIB) { - hdr_bytes = zlib_hdr_bytes; - _zlib_header_in_buffer(stream, buffer); - next_flag = IGZIP_ZLIB_NO_HDR; - } else { - hdr_bytes = gzip_hdr_bytes; - if (stream->level == 0) - buffer[8] = 0x04; // Fastest algorithm in xfl flag - next_flag = IGZIP_GZIP_NO_HDR; - } - - if (hdr_bytes >= stream->avail_out) - return STATELESS_OVERFLOW; - - stream->avail_out -= hdr_bytes; - stream->total_out += hdr_bytes; - - memcpy(stream->next_out, buffer, hdr_bytes); - - stream->next_out += hdr_bytes; - stream->internal_state.has_wrap_hdr = 1; - stream->gzip_flag = next_flag; - - return COMP_OK; + uint32_t hdr_bytes; + // Create a 10-byte buffer. Since the gzip header is almost fixed (9 of 10 + // bytes are fixed) use it to initialize the buffer. + uint8_t buffer[10] = { 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff }; + uint32_t next_flag; + + if (stream->internal_state.has_wrap_hdr) + return COMP_OK; + + if (stream->gzip_flag == IGZIP_ZLIB) { + hdr_bytes = zlib_hdr_bytes; + _zlib_header_in_buffer(stream, buffer); + next_flag = IGZIP_ZLIB_NO_HDR; + } else { + hdr_bytes = gzip_hdr_bytes; + if (stream->level == 0) + buffer[8] = 0x04; // Fastest algorithm in xfl flag + next_flag = IGZIP_GZIP_NO_HDR; + } + + if (hdr_bytes >= stream->avail_out) + return STATELESS_OVERFLOW; + + stream->avail_out -= hdr_bytes; + stream->total_out += hdr_bytes; + + memcpy(stream->next_out, buffer, hdr_bytes); + + stream->next_out += hdr_bytes; + stream->internal_state.has_wrap_hdr = 1; + stream->gzip_flag = next_flag; + + return COMP_OK; } -static void write_stream_header(struct isal_zstream *stream) +static void +write_stream_header(struct isal_zstream *stream) { - struct isal_zstate *state = &stream->internal_state; - int bytes_to_write; - uint32_t hdr_bytes; - // Create a 10-byte buffer. Since the gzip header is almost fixed (9 of 10 - // bytes are fixed) use it to initialize the buffer. - uint8_t buffer[10] = { - 0x1f, 0x8b, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff - }; - - if (stream->internal_state.has_wrap_hdr) - return; - - if (stream->gzip_flag == IGZIP_ZLIB) { - hdr_bytes = zlib_hdr_bytes; - _zlib_header_in_buffer(stream, buffer); - } else { - if (stream->level == 0) - buffer[8] = 0x04; // Fastest algorithm in xfl flag - hdr_bytes = gzip_hdr_bytes; - } - - bytes_to_write = hdr_bytes; - bytes_to_write -= state->count; - - if (bytes_to_write > stream->avail_out) - bytes_to_write = stream->avail_out; - - memcpy(stream->next_out, buffer + state->count, bytes_to_write); - state->count += bytes_to_write; - - if (state->count == hdr_bytes) { - state->count = 0; - state->has_wrap_hdr = 1; - } - - stream->avail_out -= bytes_to_write; - stream->total_out += bytes_to_write; - stream->next_out += bytes_to_write; - + struct isal_zstate *state = &stream->internal_state; + int bytes_to_write; + uint32_t hdr_bytes; + // Create a 10-byte buffer. Since the gzip header is almost fixed (9 of 10 + // bytes are fixed) use it to initialize the buffer. + uint8_t buffer[10] = { 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff }; + + if (stream->internal_state.has_wrap_hdr) + return; + + if (stream->gzip_flag == IGZIP_ZLIB) { + hdr_bytes = zlib_hdr_bytes; + _zlib_header_in_buffer(stream, buffer); + } else { + if (stream->level == 0) + buffer[8] = 0x04; // Fastest algorithm in xfl flag + hdr_bytes = gzip_hdr_bytes; + } + + bytes_to_write = hdr_bytes; + bytes_to_write -= state->count; + + if (bytes_to_write > stream->avail_out) + bytes_to_write = stream->avail_out; + + memcpy(stream->next_out, buffer + state->count, bytes_to_write); + state->count += bytes_to_write; + + if (state->count == hdr_bytes) { + state->count = 0; + state->has_wrap_hdr = 1; + } + + stream->avail_out -= bytes_to_write; + stream->total_out += bytes_to_write; + stream->next_out += bytes_to_write; } -static int write_deflate_header_stateless(struct isal_zstream *stream) +static int +write_deflate_header_stateless(struct isal_zstream *stream) { - struct isal_zstate *state = &stream->internal_state; - struct isal_hufftables *hufftables = stream->hufftables; - uint64_t hdr_extra_bits = hufftables->deflate_hdr[hufftables->deflate_hdr_count]; - uint32_t count; + struct isal_zstate *state = &stream->internal_state; + struct isal_hufftables *hufftables = stream->hufftables; + uint64_t hdr_extra_bits = hufftables->deflate_hdr[hufftables->deflate_hdr_count]; + uint32_t count; - if (hufftables->deflate_hdr_count + 8 >= stream->avail_out) - return STATELESS_OVERFLOW; + if (hufftables->deflate_hdr_count + 8 >= stream->avail_out) + return STATELESS_OVERFLOW; - memcpy(stream->next_out, hufftables->deflate_hdr, hufftables->deflate_hdr_count); + memcpy(stream->next_out, hufftables->deflate_hdr, hufftables->deflate_hdr_count); - if (stream->end_of_stream == 0) { - if (hufftables->deflate_hdr_count > 0) - *stream->next_out -= 1; - else - hdr_extra_bits -= 1; - } else - state->has_eob_hdr = 1; + if (stream->end_of_stream == 0) { + if (hufftables->deflate_hdr_count > 0) + *stream->next_out -= 1; + else + hdr_extra_bits -= 1; + } else + state->has_eob_hdr = 1; - stream->avail_out -= hufftables->deflate_hdr_count; - stream->total_out += hufftables->deflate_hdr_count; - stream->next_out += hufftables->deflate_hdr_count; + stream->avail_out -= hufftables->deflate_hdr_count; + stream->total_out += hufftables->deflate_hdr_count; + stream->next_out += hufftables->deflate_hdr_count; - set_buf(&state->bitbuf, stream->next_out, stream->avail_out); + set_buf(&state->bitbuf, stream->next_out, stream->avail_out); - write_bits(&state->bitbuf, hdr_extra_bits, hufftables->deflate_hdr_extra_bits); + write_bits(&state->bitbuf, hdr_extra_bits, hufftables->deflate_hdr_extra_bits); - count = buffer_used(&state->bitbuf); - stream->next_out = buffer_ptr(&state->bitbuf); - stream->avail_out -= count; - stream->total_out += count; + count = buffer_used(&state->bitbuf); + stream->next_out = buffer_ptr(&state->bitbuf); + stream->avail_out -= count; + stream->total_out += count; - state->state = ZSTATE_BODY; + state->state = ZSTATE_BODY; - return COMP_OK; + return COMP_OK; } -static int write_deflate_header_unaligned_stateless(struct isal_zstream *stream) +static int +write_deflate_header_unaligned_stateless(struct isal_zstream *stream) { - struct isal_zstate *state = &stream->internal_state; - struct isal_hufftables *hufftables = stream->hufftables; - unsigned int count; - uint64_t bit_count; - uint8_t *header_next; - uint8_t *header_end; - uint64_t header_bits; + struct isal_zstate *state = &stream->internal_state; + struct isal_hufftables *hufftables = stream->hufftables; + unsigned int count; + uint64_t bit_count; + uint8_t *header_next; + uint8_t *header_end; + uint64_t header_bits; - if (state->bitbuf.m_bit_count == 0) - return write_deflate_header_stateless(stream); + if (state->bitbuf.m_bit_count == 0) + return write_deflate_header_stateless(stream); - if (hufftables->deflate_hdr_count + 16 >= stream->avail_out) - return STATELESS_OVERFLOW; + if (hufftables->deflate_hdr_count + 16 >= stream->avail_out) + return STATELESS_OVERFLOW; - set_buf(&state->bitbuf, stream->next_out, stream->avail_out); + set_buf(&state->bitbuf, stream->next_out, stream->avail_out); - header_next = hufftables->deflate_hdr; - header_end = header_next + - (hufftables->deflate_hdr_count / sizeof(header_bits)) * sizeof(header_bits); + header_next = hufftables->deflate_hdr; + header_end = header_next + + (hufftables->deflate_hdr_count / sizeof(header_bits)) * sizeof(header_bits); - header_bits = load_le_u64(header_next); + header_bits = load_le_u64(header_next); - if (stream->end_of_stream == 0) - header_bits--; - else - state->has_eob_hdr = 1; + if (stream->end_of_stream == 0) + header_bits--; + else + state->has_eob_hdr = 1; - header_next += sizeof(header_bits); + header_next += sizeof(header_bits); - /* Write out Complete Header bits */ - for (; header_next <= header_end; header_next += sizeof(header_bits)) { - write_bits(&state->bitbuf, header_bits, 32); - header_bits >>= 32; - write_bits(&state->bitbuf, header_bits, 32); - header_bits = load_le_u64(header_next); - } - bit_count = - (hufftables->deflate_hdr_count & 0x7) * 8 + hufftables->deflate_hdr_extra_bits; + /* Write out Complete Header bits */ + for (; header_next <= header_end; header_next += sizeof(header_bits)) { + write_bits(&state->bitbuf, header_bits, 32); + header_bits >>= 32; + write_bits(&state->bitbuf, header_bits, 32); + header_bits = load_le_u64(header_next); + } + bit_count = (hufftables->deflate_hdr_count & 0x7) * 8 + hufftables->deflate_hdr_extra_bits; - if (bit_count > MAX_BITBUF_BIT_WRITE) { - write_bits(&state->bitbuf, header_bits, MAX_BITBUF_BIT_WRITE); - header_bits >>= MAX_BITBUF_BIT_WRITE; - bit_count -= MAX_BITBUF_BIT_WRITE; + if (bit_count > MAX_BITBUF_BIT_WRITE) { + write_bits(&state->bitbuf, header_bits, MAX_BITBUF_BIT_WRITE); + header_bits >>= MAX_BITBUF_BIT_WRITE; + bit_count -= MAX_BITBUF_BIT_WRITE; + } - } + write_bits(&state->bitbuf, header_bits, bit_count); - write_bits(&state->bitbuf, header_bits, bit_count); + /* check_space flushes extra bytes in bitbuf. Required because + * write_bits_always fails when the next commit makes the buffer + * length exceed 64 bits */ + check_space(&state->bitbuf, FORCE_FLUSH); - /* check_space flushes extra bytes in bitbuf. Required because - * write_bits_always fails when the next commit makes the buffer - * length exceed 64 bits */ - check_space(&state->bitbuf, FORCE_FLUSH); + count = buffer_used(&state->bitbuf); + stream->next_out = buffer_ptr(&state->bitbuf); + stream->avail_out -= count; + stream->total_out += count; - count = buffer_used(&state->bitbuf); - stream->next_out = buffer_ptr(&state->bitbuf); - stream->avail_out -= count; - stream->total_out += count; + state->state = ZSTATE_BODY; - state->state = ZSTATE_BODY; - - return COMP_OK; + return COMP_OK; } /* Toggle end of stream only works when deflate header is aligned */ -static void write_header(struct isal_zstream *stream, uint8_t * deflate_hdr, - uint32_t deflate_hdr_count, uint32_t extra_bits_count, - uint32_t next_state, uint32_t toggle_end_of_stream) +static void +write_header(struct isal_zstream *stream, uint8_t *deflate_hdr, uint32_t deflate_hdr_count, + uint32_t extra_bits_count, uint32_t next_state, uint32_t toggle_end_of_stream) { - struct isal_zstate *state = &stream->internal_state; - uint32_t hdr_extra_bits = deflate_hdr[deflate_hdr_count]; - uint32_t count; - state->state = ZSTATE_HDR; - - if (state->bitbuf.m_bit_count != 0) { - if (stream->avail_out < 8) - return; - set_buf(&state->bitbuf, stream->next_out, stream->avail_out); - flush(&state->bitbuf); - count = buffer_used(&state->bitbuf); - stream->next_out = buffer_ptr(&state->bitbuf); - stream->avail_out -= count; - stream->total_out += count; - } - - if (stream->gzip_flag == IGZIP_GZIP || stream->gzip_flag == IGZIP_ZLIB) - write_stream_header(stream); - - count = deflate_hdr_count - state->count; - - if (count != 0) { - if (count > stream->avail_out) - count = stream->avail_out; - - memcpy(stream->next_out, deflate_hdr + state->count, count); - - if (toggle_end_of_stream && state->count == 0 && count > 0) { - /* Assumes the final block bit is the first bit */ - *stream->next_out ^= 1; - state->has_eob_hdr = !state->has_eob_hdr; - } - - stream->next_out += count; - stream->avail_out -= count; - stream->total_out += count; - state->count += count; - - count = deflate_hdr_count - state->count; - } else if (toggle_end_of_stream && deflate_hdr_count == 0) { - /* Assumes the final block bit is the first bit */ - hdr_extra_bits ^= 1; - state->has_eob_hdr = !state->has_eob_hdr; - } - - if ((count == 0) && (stream->avail_out >= 8)) { - - set_buf(&state->bitbuf, stream->next_out, stream->avail_out); - - write_bits(&state->bitbuf, hdr_extra_bits, extra_bits_count); - - state->state = next_state; - state->count = 0; - - count = buffer_used(&state->bitbuf); - stream->next_out = buffer_ptr(&state->bitbuf); - stream->avail_out -= count; - stream->total_out += count; - } - + struct isal_zstate *state = &stream->internal_state; + uint32_t hdr_extra_bits = deflate_hdr[deflate_hdr_count]; + uint32_t count; + state->state = ZSTATE_HDR; + + if (state->bitbuf.m_bit_count != 0) { + if (stream->avail_out < 8) + return; + set_buf(&state->bitbuf, stream->next_out, stream->avail_out); + flush(&state->bitbuf); + count = buffer_used(&state->bitbuf); + stream->next_out = buffer_ptr(&state->bitbuf); + stream->avail_out -= count; + stream->total_out += count; + } + + if (stream->gzip_flag == IGZIP_GZIP || stream->gzip_flag == IGZIP_ZLIB) + write_stream_header(stream); + + count = deflate_hdr_count - state->count; + + if (count != 0) { + if (count > stream->avail_out) + count = stream->avail_out; + + memcpy(stream->next_out, deflate_hdr + state->count, count); + + if (toggle_end_of_stream && state->count == 0 && count > 0) { + /* Assumes the final block bit is the first bit */ + *stream->next_out ^= 1; + state->has_eob_hdr = !state->has_eob_hdr; + } + + stream->next_out += count; + stream->avail_out -= count; + stream->total_out += count; + state->count += count; + + count = deflate_hdr_count - state->count; + } else if (toggle_end_of_stream && deflate_hdr_count == 0) { + /* Assumes the final block bit is the first bit */ + hdr_extra_bits ^= 1; + state->has_eob_hdr = !state->has_eob_hdr; + } + + if ((count == 0) && (stream->avail_out >= 8)) { + + set_buf(&state->bitbuf, stream->next_out, stream->avail_out); + + write_bits(&state->bitbuf, hdr_extra_bits, extra_bits_count); + + state->state = next_state; + state->count = 0; + + count = buffer_used(&state->bitbuf); + stream->next_out = buffer_ptr(&state->bitbuf); + stream->avail_out -= count; + stream->total_out += count; + } } -static void write_trailer(struct isal_zstream *stream) +static void +write_trailer(struct isal_zstream *stream) { - struct isal_zstate *state = &stream->internal_state; - unsigned int bytes = 0; - uint32_t crc = state->crc; - - set_buf(&state->bitbuf, stream->next_out, stream->avail_out); - - if (!state->has_eob_hdr) { - /* If the final header has not been written, write a - * final block. This block is a static huffman block - * which only contains the end of block symbol. The code - * that happens to do this is the fist 10 bits of - * 0x003 */ - if (stream->avail_out < 8) - return; - - state->has_eob_hdr = 1; - write_bits(&state->bitbuf, 0x003, 10); - if (is_full(&state->bitbuf)) { - stream->next_out = buffer_ptr(&state->bitbuf); - bytes = buffer_used(&state->bitbuf); - stream->avail_out -= bytes; - stream->total_out += bytes; - return; - } - } - - if (state->bitbuf.m_bit_count) { - /* the flush() will pad to the next byte and write up to 8 bytes - * to the output stream/buffer. - */ - if (stream->avail_out < 8) - return; - - flush(&state->bitbuf); - } - - stream->next_out = buffer_ptr(&state->bitbuf); - bytes = buffer_used(&state->bitbuf); - - switch (stream->gzip_flag) { - case IGZIP_GZIP: - case IGZIP_GZIP_NO_HDR: - if (stream->avail_out - bytes >= gzip_trl_bytes) { - store_le_u64(stream->next_out, - ((uint64_t) stream->total_in << 32) | crc); - stream->next_out += gzip_trl_bytes; - bytes += gzip_trl_bytes; - state->state = ZSTATE_END; - } - break; - - case IGZIP_ZLIB: - case IGZIP_ZLIB_NO_HDR: - if (stream->avail_out - bytes >= zlib_trl_bytes) { - store_be_u32(stream->next_out, - (crc & 0xFFFF0000) | ((crc & 0xFFFF) + 1) % ADLER_MOD); - stream->next_out += zlib_trl_bytes; - bytes += zlib_trl_bytes; - state->state = ZSTATE_END; - } - break; - - default: - state->state = ZSTATE_END; - } - - stream->avail_out -= bytes; - stream->total_out += bytes; + struct isal_zstate *state = &stream->internal_state; + unsigned int bytes = 0; + uint32_t crc = state->crc; + + set_buf(&state->bitbuf, stream->next_out, stream->avail_out); + + if (!state->has_eob_hdr) { + /* If the final header has not been written, write a + * final block. This block is a static huffman block + * which only contains the end of block symbol. The code + * that happens to do this is the fist 10 bits of + * 0x003 */ + if (stream->avail_out < 8) + return; + + state->has_eob_hdr = 1; + write_bits(&state->bitbuf, 0x003, 10); + if (is_full(&state->bitbuf)) { + stream->next_out = buffer_ptr(&state->bitbuf); + bytes = buffer_used(&state->bitbuf); + stream->avail_out -= bytes; + stream->total_out += bytes; + return; + } + } + + if (state->bitbuf.m_bit_count) { + /* the flush() will pad to the next byte and write up to 8 bytes + * to the output stream/buffer. + */ + if (stream->avail_out < 8) + return; + + flush(&state->bitbuf); + } + + stream->next_out = buffer_ptr(&state->bitbuf); + bytes = buffer_used(&state->bitbuf); + + switch (stream->gzip_flag) { + case IGZIP_GZIP: + case IGZIP_GZIP_NO_HDR: + if (stream->avail_out - bytes >= gzip_trl_bytes) { + store_le_u64(stream->next_out, ((uint64_t) stream->total_in << 32) | crc); + stream->next_out += gzip_trl_bytes; + bytes += gzip_trl_bytes; + state->state = ZSTATE_END; + } + break; + + case IGZIP_ZLIB: + case IGZIP_ZLIB_NO_HDR: + if (stream->avail_out - bytes >= zlib_trl_bytes) { + store_be_u32(stream->next_out, + (crc & 0xFFFF0000) | ((crc & 0xFFFF) + 1) % ADLER_MOD); + stream->next_out += zlib_trl_bytes; + bytes += zlib_trl_bytes; + state->state = ZSTATE_END; + } + break; + + default: + state->state = ZSTATE_END; + } + + stream->avail_out -= bytes; + stream->total_out += bytes; } diff --git a/igzip/igzip_base.c b/igzip/igzip_base.c index 925d0800..156a3a99 100644 --- a/igzip/igzip_base.c +++ b/igzip/igzip_base.c @@ -6,231 +6,229 @@ extern const struct isal_hufftables hufftables_default; -static inline void update_state(struct isal_zstream *stream, uint8_t * start_in, - uint8_t * next_in, uint8_t * end_in) +static inline void +update_state(struct isal_zstream *stream, uint8_t *start_in, uint8_t *next_in, uint8_t *end_in) { - struct isal_zstate *state = &stream->internal_state; - uint32_t bytes_written; + struct isal_zstate *state = &stream->internal_state; + uint32_t bytes_written; - if (next_in - start_in > 0) - state->has_hist = IGZIP_HIST; + if (next_in - start_in > 0) + state->has_hist = IGZIP_HIST; - stream->next_in = next_in; - stream->total_in += next_in - start_in; - stream->avail_in = end_in - next_in; - - bytes_written = buffer_used(&state->bitbuf); - stream->total_out += bytes_written; - stream->next_out += bytes_written; - stream->avail_out -= bytes_written; + stream->next_in = next_in; + stream->total_in += next_in - start_in; + stream->avail_in = end_in - next_in; + bytes_written = buffer_used(&state->bitbuf); + stream->total_out += bytes_written; + stream->next_out += bytes_written; + stream->avail_out -= bytes_written; } -void isal_deflate_body_base(struct isal_zstream *stream) +void +isal_deflate_body_base(struct isal_zstream *stream) { - uint32_t literal, hash; - uint8_t *start_in, *next_in, *end_in, *end, *next_hash; - uint16_t match_length; - uint32_t dist; - uint64_t code, code_len, code2, code_len2; - struct isal_zstate *state = &stream->internal_state; - uint16_t *last_seen = state->head; - uint8_t *file_start = (uint8_t *) ((uintptr_t) stream->next_in - stream->total_in); - uint32_t hist_size = state->dist_mask; - uint32_t hash_mask = state->hash_mask; - - if (stream->avail_in == 0) { - if (stream->end_of_stream || stream->flush != NO_FLUSH) - state->state = ZSTATE_FLUSH_READ_BUFFER; - return; - } - - set_buf(&state->bitbuf, stream->next_out, stream->avail_out); - - start_in = stream->next_in; - end_in = start_in + stream->avail_in; - next_in = start_in; - - while (next_in + ISAL_LOOK_AHEAD < end_in) { - - if (is_full(&state->bitbuf)) { - update_state(stream, start_in, next_in, end_in); - return; - } - - literal = load_le_u32(next_in); - hash = compute_hash(literal) & hash_mask; - dist = (next_in - file_start - last_seen[hash]) & 0xFFFF; - last_seen[hash] = (uint64_t) (next_in - file_start); - - /* The -1 are to handle the case when dist = 0 */ - if (dist - 1 < hist_size) { - assert(dist != 0); - - match_length = compare258(next_in - dist, next_in, 258); - - if (match_length >= SHORTEST_MATCH) { - next_hash = next_in; + uint32_t literal, hash; + uint8_t *start_in, *next_in, *end_in, *end, *next_hash; + uint16_t match_length; + uint32_t dist; + uint64_t code, code_len, code2, code_len2; + struct isal_zstate *state = &stream->internal_state; + uint16_t *last_seen = state->head; + uint8_t *file_start = (uint8_t *) ((uintptr_t) stream->next_in - stream->total_in); + uint32_t hist_size = state->dist_mask; + uint32_t hash_mask = state->hash_mask; + + if (stream->avail_in == 0) { + if (stream->end_of_stream || stream->flush != NO_FLUSH) + state->state = ZSTATE_FLUSH_READ_BUFFER; + return; + } + + set_buf(&state->bitbuf, stream->next_out, stream->avail_out); + + start_in = stream->next_in; + end_in = start_in + stream->avail_in; + next_in = start_in; + + while (next_in + ISAL_LOOK_AHEAD < end_in) { + + if (is_full(&state->bitbuf)) { + update_state(stream, start_in, next_in, end_in); + return; + } + + literal = load_le_u32(next_in); + hash = compute_hash(literal) & hash_mask; + dist = (next_in - file_start - last_seen[hash]) & 0xFFFF; + last_seen[hash] = (uint64_t) (next_in - file_start); + + /* The -1 are to handle the case when dist = 0 */ + if (dist - 1 < hist_size) { + assert(dist != 0); + + match_length = compare258(next_in - dist, next_in, 258); + + if (match_length >= SHORTEST_MATCH) { + next_hash = next_in; #ifdef ISAL_LIMIT_HASH_UPDATE - end = next_hash + 3; + end = next_hash + 3; #else - end = next_hash + match_length; + end = next_hash + match_length; #endif - next_hash++; - - for (; next_hash < end; next_hash++) { - literal = load_le_u32(next_hash); - hash = compute_hash(literal) & hash_mask; - last_seen[hash] = (uint64_t) (next_hash - file_start); - } + next_hash++; - get_len_code(stream->hufftables, match_length, &code, - &code_len); - get_dist_code(stream->hufftables, dist, &code2, &code_len2); + for (; next_hash < end; next_hash++) { + literal = load_le_u32(next_hash); + hash = compute_hash(literal) & hash_mask; + last_seen[hash] = (uint64_t) (next_hash - file_start); + } - code |= code2 << code_len; - code_len += code_len2; + get_len_code(stream->hufftables, match_length, &code, &code_len); + get_dist_code(stream->hufftables, dist, &code2, &code_len2); - write_bits(&state->bitbuf, code, code_len); + code |= code2 << code_len; + code_len += code_len2; - next_in += match_length; + write_bits(&state->bitbuf, code, code_len); - continue; - } - } + next_in += match_length; - get_lit_code(stream->hufftables, literal & 0xFF, &code, &code_len); - write_bits(&state->bitbuf, code, code_len); - next_in++; - } + continue; + } + } - update_state(stream, start_in, next_in, end_in); + get_lit_code(stream->hufftables, literal & 0xFF, &code, &code_len); + write_bits(&state->bitbuf, code, code_len); + next_in++; + } - assert(stream->avail_in <= ISAL_LOOK_AHEAD); - if (stream->end_of_stream || stream->flush != NO_FLUSH) - state->state = ZSTATE_FLUSH_READ_BUFFER; + update_state(stream, start_in, next_in, end_in); - return; + assert(stream->avail_in <= ISAL_LOOK_AHEAD); + if (stream->end_of_stream || stream->flush != NO_FLUSH) + state->state = ZSTATE_FLUSH_READ_BUFFER; + return; } -void isal_deflate_finish_base(struct isal_zstream *stream) +void +isal_deflate_finish_base(struct isal_zstream *stream) { - uint32_t literal = 0, hash; - uint8_t *start_in, *next_in, *end_in, *end, *next_hash; - uint16_t match_length; - uint32_t dist; - uint64_t code, code_len, code2, code_len2; - struct isal_zstate *state = &stream->internal_state; - uint16_t *last_seen = state->head; - uint8_t *file_start = (uint8_t *) ((uintptr_t) stream->next_in - stream->total_in); - uint32_t hist_size = state->dist_mask; - uint32_t hash_mask = state->hash_mask; - - set_buf(&state->bitbuf, stream->next_out, stream->avail_out); - - start_in = stream->next_in; - end_in = start_in + stream->avail_in; - next_in = start_in; - - if (stream->avail_in != 0) { - while (next_in + 3 < end_in) { - if (is_full(&state->bitbuf)) { - update_state(stream, start_in, next_in, end_in); - return; - } - - literal = load_le_u32(next_in); - hash = compute_hash(literal) & hash_mask; - dist = (next_in - file_start - last_seen[hash]) & 0xFFFF; - last_seen[hash] = (uint64_t) (next_in - file_start); - - if (dist - 1 < hist_size) { /* The -1 are to handle the case when dist = 0 */ - match_length = - compare258(next_in - dist, next_in, end_in - next_in); - - if (match_length >= SHORTEST_MATCH) { - next_hash = next_in; + uint32_t literal = 0, hash; + uint8_t *start_in, *next_in, *end_in, *end, *next_hash; + uint16_t match_length; + uint32_t dist; + uint64_t code, code_len, code2, code_len2; + struct isal_zstate *state = &stream->internal_state; + uint16_t *last_seen = state->head; + uint8_t *file_start = (uint8_t *) ((uintptr_t) stream->next_in - stream->total_in); + uint32_t hist_size = state->dist_mask; + uint32_t hash_mask = state->hash_mask; + + set_buf(&state->bitbuf, stream->next_out, stream->avail_out); + + start_in = stream->next_in; + end_in = start_in + stream->avail_in; + next_in = start_in; + + if (stream->avail_in != 0) { + while (next_in + 3 < end_in) { + if (is_full(&state->bitbuf)) { + update_state(stream, start_in, next_in, end_in); + return; + } + + literal = load_le_u32(next_in); + hash = compute_hash(literal) & hash_mask; + dist = (next_in - file_start - last_seen[hash]) & 0xFFFF; + last_seen[hash] = (uint64_t) (next_in - file_start); + + if (dist - 1 < + hist_size) { /* The -1 are to handle the case when dist = 0 */ + match_length = + compare258(next_in - dist, next_in, end_in - next_in); + + if (match_length >= SHORTEST_MATCH) { + next_hash = next_in; #ifdef ISAL_LIMIT_HASH_UPDATE - end = next_hash + 3; + end = next_hash + 3; #else - end = next_hash + match_length; + end = next_hash + match_length; #endif - next_hash++; - - for (; next_hash < end - 3; next_hash++) { - literal = load_le_u32(next_hash); - hash = compute_hash(literal) & hash_mask; - last_seen[hash] = - (uint64_t) (next_hash - file_start); - } - - get_len_code(stream->hufftables, match_length, &code, - &code_len); - get_dist_code(stream->hufftables, dist, &code2, - &code_len2); - - code |= code2 << code_len; - code_len += code_len2; - - write_bits(&state->bitbuf, code, code_len); - - next_in += match_length; - - continue; - } - } - - get_lit_code(stream->hufftables, literal & 0xFF, &code, &code_len); - write_bits(&state->bitbuf, code, code_len); - next_in++; - - } - - while (next_in < end_in) { - if (is_full(&state->bitbuf)) { - update_state(stream, start_in, next_in, end_in); - return; - } - - literal = *next_in; - get_lit_code(stream->hufftables, literal & 0xFF, &code, &code_len); - write_bits(&state->bitbuf, code, code_len); - next_in++; - - } - } - - if (!is_full(&state->bitbuf)) { - get_lit_code(stream->hufftables, 256, &code, &code_len); - write_bits(&state->bitbuf, code, code_len); - state->has_eob = 1; - - if (stream->end_of_stream == 1) - state->state = ZSTATE_TRL; - else - state->state = ZSTATE_SYNC_FLUSH; - } - - update_state(stream, start_in, next_in, end_in); - - return; + next_hash++; + + for (; next_hash < end - 3; next_hash++) { + literal = load_le_u32(next_hash); + hash = compute_hash(literal) & hash_mask; + last_seen[hash] = + (uint64_t) (next_hash - file_start); + } + + get_len_code(stream->hufftables, match_length, &code, + &code_len); + get_dist_code(stream->hufftables, dist, &code2, &code_len2); + + code |= code2 << code_len; + code_len += code_len2; + + write_bits(&state->bitbuf, code, code_len); + + next_in += match_length; + + continue; + } + } + + get_lit_code(stream->hufftables, literal & 0xFF, &code, &code_len); + write_bits(&state->bitbuf, code, code_len); + next_in++; + } + + while (next_in < end_in) { + if (is_full(&state->bitbuf)) { + update_state(stream, start_in, next_in, end_in); + return; + } + + literal = *next_in; + get_lit_code(stream->hufftables, literal & 0xFF, &code, &code_len); + write_bits(&state->bitbuf, code, code_len); + next_in++; + } + } + + if (!is_full(&state->bitbuf)) { + get_lit_code(stream->hufftables, 256, &code, &code_len); + write_bits(&state->bitbuf, code, code_len); + state->has_eob = 1; + + if (stream->end_of_stream == 1) + state->state = ZSTATE_TRL; + else + state->state = ZSTATE_SYNC_FLUSH; + } + + update_state(stream, start_in, next_in, end_in); + + return; } -void isal_deflate_hash_base(uint16_t * hash_table, uint32_t hash_mask, - uint32_t current_index, uint8_t * dict, uint32_t dict_len) +void +isal_deflate_hash_base(uint16_t *hash_table, uint32_t hash_mask, uint32_t current_index, + uint8_t *dict, uint32_t dict_len) { - uint8_t *next_in = dict; - uint8_t *end_in = dict + dict_len - SHORTEST_MATCH; - uint32_t literal; - uint32_t hash; - uint16_t index = current_index - dict_len; - - while (next_in <= end_in) { - literal = load_le_u32(next_in); - hash = compute_hash(literal) & hash_mask; - hash_table[hash] = index; - index++; - next_in++; - } + uint8_t *next_in = dict; + uint8_t *end_in = dict + dict_len - SHORTEST_MATCH; + uint32_t literal; + uint32_t hash; + uint16_t index = current_index - dict_len; + + while (next_in <= end_in) { + literal = load_le_u32(next_in); + hash = compute_hash(literal) & hash_mask; + hash_table[hash] = index; + index++; + next_in++; + } } diff --git a/igzip/igzip_base_aliases.c b/igzip/igzip_base_aliases.c index 486ed8e3..93240b3f 100644 --- a/igzip/igzip_base_aliases.c +++ b/igzip/igzip_base_aliases.c @@ -32,122 +32,150 @@ #include "encode_df.h" #include "igzip_level_buf_structs.h" -void isal_deflate_body_base(struct isal_zstream *stream); -void isal_deflate_finish_base(struct isal_zstream *stream); -void isal_deflate_icf_body_hash_hist_base(struct isal_zstream *stream); -void icf_body_hash1_fillgreedy_lazy(struct isal_zstream *stream); -void isal_deflate_icf_finish_hash_hist_base(struct isal_zstream *stream); -void isal_deflate_icf_finish_hash_map_base(struct isal_zstream *stream); -void isal_update_histogram_base(uint8_t * start_stream, int length, - struct isal_huff_histogram *histogram); -struct deflate_icf *encode_deflate_icf_base(struct deflate_icf *next_in, - struct deflate_icf *end_in, struct BitBuf2 *bb, - struct hufftables_icf *hufftables); -uint32_t adler32_base(uint32_t init, const unsigned char *buf, uint64_t len); -int decode_huffman_code_block_stateless_base(struct inflate_state *s, uint8_t * start_out); +void +isal_deflate_body_base(struct isal_zstream *stream); +void +isal_deflate_finish_base(struct isal_zstream *stream); +void +isal_deflate_icf_body_hash_hist_base(struct isal_zstream *stream); +void +icf_body_hash1_fillgreedy_lazy(struct isal_zstream *stream); +void +isal_deflate_icf_finish_hash_hist_base(struct isal_zstream *stream); +void +isal_deflate_icf_finish_hash_map_base(struct isal_zstream *stream); +void +isal_update_histogram_base(uint8_t *start_stream, int length, + struct isal_huff_histogram *histogram); +struct deflate_icf * +encode_deflate_icf_base(struct deflate_icf *next_in, struct deflate_icf *end_in, struct BitBuf2 *bb, + struct hufftables_icf *hufftables); +uint32_t +adler32_base(uint32_t init, const unsigned char *buf, uint64_t len); +int +decode_huffman_code_block_stateless_base(struct inflate_state *s, uint8_t *start_out); -extern void isal_deflate_hash_base(uint16_t *, uint32_t, uint32_t, uint8_t *, uint32_t); +extern void +isal_deflate_hash_base(uint16_t *, uint32_t, uint32_t, uint8_t *, uint32_t); -void set_long_icf_fg_base(uint8_t * next_in, uint8_t * end_in, - struct deflate_icf *match_lookup, struct level_buf *level_buf); -void gen_icf_map_h1_base(struct isal_zstream *stream, - struct deflate_icf *matches_icf_lookup, uint64_t input_size); +void +set_long_icf_fg_base(uint8_t *next_in, uint8_t *end_in, struct deflate_icf *match_lookup, + struct level_buf *level_buf); +void +gen_icf_map_h1_base(struct isal_zstream *stream, struct deflate_icf *matches_icf_lookup, + uint64_t input_size); -void isal_deflate_body(struct isal_zstream *stream) +void +isal_deflate_body(struct isal_zstream *stream) { - isal_deflate_body_base(stream); + isal_deflate_body_base(stream); } -void isal_deflate_finish(struct isal_zstream *stream) +void +isal_deflate_finish(struct isal_zstream *stream) { - isal_deflate_finish_base(stream); + isal_deflate_finish_base(stream); } -void isal_deflate_icf_body_lvl1(struct isal_zstream *stream) +void +isal_deflate_icf_body_lvl1(struct isal_zstream *stream) { - isal_deflate_icf_body_hash_hist_base(stream); + isal_deflate_icf_body_hash_hist_base(stream); } -void isal_deflate_icf_body_lvl2(struct isal_zstream *stream) +void +isal_deflate_icf_body_lvl2(struct isal_zstream *stream) { - isal_deflate_icf_body_hash_hist_base(stream); + isal_deflate_icf_body_hash_hist_base(stream); } -void isal_deflate_icf_body_lvl3(struct isal_zstream *stream) +void +isal_deflate_icf_body_lvl3(struct isal_zstream *stream) { - icf_body_hash1_fillgreedy_lazy(stream); + icf_body_hash1_fillgreedy_lazy(stream); } -void isal_deflate_icf_finish_lvl1(struct isal_zstream *stream) +void +isal_deflate_icf_finish_lvl1(struct isal_zstream *stream) { - isal_deflate_icf_finish_hash_hist_base(stream); + isal_deflate_icf_finish_hash_hist_base(stream); } -void isal_deflate_icf_finish_lvl2(struct isal_zstream *stream) +void +isal_deflate_icf_finish_lvl2(struct isal_zstream *stream) { - isal_deflate_icf_finish_hash_hist_base(stream); + isal_deflate_icf_finish_hash_hist_base(stream); } -void isal_deflate_icf_finish_lvl3(struct isal_zstream *stream) +void +isal_deflate_icf_finish_lvl3(struct isal_zstream *stream) { - isal_deflate_icf_finish_hash_map_base(stream); + isal_deflate_icf_finish_hash_map_base(stream); } -void isal_update_histogram(uint8_t * start_stream, int length, - struct isal_huff_histogram *histogram) +void +isal_update_histogram(uint8_t *start_stream, int length, struct isal_huff_histogram *histogram) { - isal_update_histogram_base(start_stream, length, histogram); + isal_update_histogram_base(start_stream, length, histogram); } -struct deflate_icf *encode_deflate_icf(struct deflate_icf *next_in, - struct deflate_icf *end_in, struct BitBuf2 *bb, - struct hufftables_icf *hufftables) +struct deflate_icf * +encode_deflate_icf(struct deflate_icf *next_in, struct deflate_icf *end_in, struct BitBuf2 *bb, + struct hufftables_icf *hufftables) { - return encode_deflate_icf_base(next_in, end_in, bb, hufftables); + return encode_deflate_icf_base(next_in, end_in, bb, hufftables); } -uint32_t isal_adler32(uint32_t init, const unsigned char *buf, uint64_t len) +uint32_t +isal_adler32(uint32_t init, const unsigned char *buf, uint64_t len) { - return adler32_base(init, buf, len); + return adler32_base(init, buf, len); } -int decode_huffman_code_block_stateless(struct inflate_state *s, uint8_t * start_out) +int +decode_huffman_code_block_stateless(struct inflate_state *s, uint8_t *start_out) { - return decode_huffman_code_block_stateless_base(s, start_out); + return decode_huffman_code_block_stateless_base(s, start_out); } -void isal_deflate_hash_lvl0(uint16_t * hash_table, uint32_t hash_mask, - uint32_t current_index, uint8_t * dict, uint32_t dict_len) +void +isal_deflate_hash_lvl0(uint16_t *hash_table, uint32_t hash_mask, uint32_t current_index, + uint8_t *dict, uint32_t dict_len) { - isal_deflate_hash_base(hash_table, hash_mask, current_index, dict, dict_len); + isal_deflate_hash_base(hash_table, hash_mask, current_index, dict, dict_len); } -void isal_deflate_hash_lvl1(uint16_t * hash_table, uint32_t hash_mask, - uint32_t current_index, uint8_t * dict, uint32_t dict_len) +void +isal_deflate_hash_lvl1(uint16_t *hash_table, uint32_t hash_mask, uint32_t current_index, + uint8_t *dict, uint32_t dict_len) { - isal_deflate_hash_base(hash_table, hash_mask, current_index, dict, dict_len); + isal_deflate_hash_base(hash_table, hash_mask, current_index, dict, dict_len); } -void isal_deflate_hash_lvl2(uint16_t * hash_table, uint32_t hash_mask, - uint32_t current_index, uint8_t * dict, uint32_t dict_len) +void +isal_deflate_hash_lvl2(uint16_t *hash_table, uint32_t hash_mask, uint32_t current_index, + uint8_t *dict, uint32_t dict_len) { - isal_deflate_hash_base(hash_table, hash_mask, current_index, dict, dict_len); + isal_deflate_hash_base(hash_table, hash_mask, current_index, dict, dict_len); } -void isal_deflate_hash_lvl3(uint16_t * hash_table, uint32_t hash_mask, - uint32_t current_index, uint8_t * dict, uint32_t dict_len) +void +isal_deflate_hash_lvl3(uint16_t *hash_table, uint32_t hash_mask, uint32_t current_index, + uint8_t *dict, uint32_t dict_len) { - isal_deflate_hash_base(hash_table, hash_mask, current_index, dict, dict_len); + isal_deflate_hash_base(hash_table, hash_mask, current_index, dict, dict_len); } -void set_long_icf_fg(uint8_t * next_in, uint8_t * end_in, - struct deflate_icf *match_lookup, struct level_buf *level_buf) +void +set_long_icf_fg(uint8_t *next_in, uint8_t *end_in, struct deflate_icf *match_lookup, + struct level_buf *level_buf) { - set_long_icf_fg_base(next_in, end_in, match_lookup, level_buf); + set_long_icf_fg_base(next_in, end_in, match_lookup, level_buf); } -void gen_icf_map_lh1(struct isal_zstream *stream, - struct deflate_icf *matches_icf_lookup, uint64_t input_size) +void +gen_icf_map_lh1(struct isal_zstream *stream, struct deflate_icf *matches_icf_lookup, + uint64_t input_size) { - gen_icf_map_h1_base(stream, matches_icf_lookup, input_size); + gen_icf_map_h1_base(stream, matches_icf_lookup, input_size); } diff --git a/igzip/igzip_build_hash_table_perf.c b/igzip/igzip_build_hash_table_perf.c index aee20fd5..420361e3 100644 --- a/igzip/igzip_build_hash_table_perf.c +++ b/igzip/igzip_build_hash_table_perf.c @@ -7,34 +7,37 @@ #include "test.h" #include "huff_codes.h" -#define DICT_LEN 32*1024 +#define DICT_LEN 32 * 1024 -extern void isal_deflate_hash(struct isal_zstream *stream, uint8_t * dict, int dict_len); +extern void +isal_deflate_hash(struct isal_zstream *stream, uint8_t *dict, int dict_len); -void create_rand_data(uint8_t * data, uint32_t size) +void +create_rand_data(uint8_t *data, uint32_t size) { - int i; - for (i = 0; i < size; i++) { - data[i] = rand() % 256; - } + int i; + for (i = 0; i < size; i++) { + data[i] = rand() % 256; + } } -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - int time = BENCHMARK_TIME; - struct isal_zstream stream; - uint8_t dict[DICT_LEN]; - uint32_t dict_len = DICT_LEN; + int time = BENCHMARK_TIME; + struct isal_zstream stream; + uint8_t dict[DICT_LEN]; + uint32_t dict_len = DICT_LEN; - stream.level = 0; - stream.internal_state.hash_mask = LVL0_HASH_MASK; - create_rand_data(dict, dict_len); + stream.level = 0; + stream.internal_state.hash_mask = LVL0_HASH_MASK; + create_rand_data(dict, dict_len); - struct perf start; - BENCHMARK(&start, time, isal_deflate_hash(&stream, dict, dict_len)); + struct perf start; + BENCHMARK(&start, time, isal_deflate_hash(&stream, dict, dict_len)); - printf("igzip_build_hash_table_perf: in_size=%u ", dict_len); - perf_print(start, (long long)dict_len); + printf("igzip_build_hash_table_perf: in_size=%u ", dict_len); + perf_print(start, (long long) dict_len); - return 0; + return 0; } diff --git a/igzip/igzip_checksums.h b/igzip/igzip_checksums.h index e09a1f16..4af147f5 100644 --- a/igzip/igzip_checksums.h +++ b/igzip/igzip_checksums.h @@ -4,9 +4,11 @@ #include #define MAX_ADLER_BUF (1 << 28) -#define ADLER_MOD 65521 +#define ADLER_MOD 65521 -uint32_t isal_adler32(uint32_t init_crc, const unsigned char *buf, uint64_t len); -uint32_t isal_adler32_bam1(uint32_t init_crc, const unsigned char *buf, uint64_t len); +uint32_t +isal_adler32(uint32_t init_crc, const unsigned char *buf, uint64_t len); +uint32_t +isal_adler32_bam1(uint32_t init_crc, const unsigned char *buf, uint64_t len); #endif diff --git a/igzip/igzip_example.c b/igzip/igzip_example.c index 5930c717..fee35b34 100644 --- a/igzip/igzip_example.c +++ b/igzip/igzip_example.c @@ -33,69 +33,70 @@ #define BUF_SIZE 8192 #ifndef LEVEL -# define LEVEL 0 +#define LEVEL 0 #else -# define LEVEL 1 +#define LEVEL 1 #endif struct isal_zstream stream; -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - uint8_t inbuf[BUF_SIZE], outbuf[BUF_SIZE]; - FILE *in, *out; + uint8_t inbuf[BUF_SIZE], outbuf[BUF_SIZE]; + FILE *in, *out; - if (argc != 3) { - fprintf(stderr, "Usage: igzip_example infile outfile\n"); - exit(0); - } - in = fopen(argv[1], "rb"); - if (!in) { - fprintf(stderr, "Can't open %s for reading\n", argv[1]); - exit(0); - } - out = fopen(argv[2], "wb"); - if (!out) { - fprintf(stderr, "Can't open %s for writing\n", argv[2]); - exit(0); - } + if (argc != 3) { + fprintf(stderr, "Usage: igzip_example infile outfile\n"); + exit(0); + } + in = fopen(argv[1], "rb"); + if (!in) { + fprintf(stderr, "Can't open %s for reading\n", argv[1]); + exit(0); + } + out = fopen(argv[2], "wb"); + if (!out) { + fprintf(stderr, "Can't open %s for writing\n", argv[2]); + exit(0); + } - printf("igzip_example\nWindow Size: %d K\n", IGZIP_HIST_SIZE / 1024); - fflush(0); + printf("igzip_example\nWindow Size: %d K\n", IGZIP_HIST_SIZE / 1024); + fflush(0); - isal_deflate_init(&stream); - stream.end_of_stream = 0; - stream.flush = NO_FLUSH; + isal_deflate_init(&stream); + stream.end_of_stream = 0; + stream.flush = NO_FLUSH; - if (LEVEL == 1) { - stream.level = 1; - stream.level_buf = malloc(ISAL_DEF_LVL1_DEFAULT); - stream.level_buf_size = ISAL_DEF_LVL1_DEFAULT; - if (stream.level_buf == 0) { - printf("Failed to allocate level compression buffer\n"); - exit(0); - } - } + if (LEVEL == 1) { + stream.level = 1; + stream.level_buf = malloc(ISAL_DEF_LVL1_DEFAULT); + stream.level_buf_size = ISAL_DEF_LVL1_DEFAULT; + if (stream.level_buf == 0) { + printf("Failed to allocate level compression buffer\n"); + exit(0); + } + } - do { - stream.avail_in = (uint32_t) fread(inbuf, 1, BUF_SIZE, in); - stream.end_of_stream = feof(in) ? 1 : 0; - stream.next_in = inbuf; - do { - stream.avail_out = BUF_SIZE; - stream.next_out = outbuf; + do { + stream.avail_in = (uint32_t) fread(inbuf, 1, BUF_SIZE, in); + stream.end_of_stream = feof(in) ? 1 : 0; + stream.next_in = inbuf; + do { + stream.avail_out = BUF_SIZE; + stream.next_out = outbuf; - isal_deflate(&stream); + isal_deflate(&stream); - fwrite(outbuf, 1, BUF_SIZE - stream.avail_out, out); - } while (stream.avail_out == 0); + fwrite(outbuf, 1, BUF_SIZE - stream.avail_out, out); + } while (stream.avail_out == 0); - assert(stream.avail_in == 0); - } while (stream.internal_state.state != ZSTATE_END); + assert(stream.avail_in == 0); + } while (stream.internal_state.state != ZSTATE_END); - fclose(out); - fclose(in); + fclose(out); + fclose(in); - printf("End of igzip_example\n\n"); - return 0; + printf("End of igzip_example\n\n"); + return 0; } diff --git a/igzip/igzip_file_perf.c b/igzip/igzip_file_perf.c index c48eae98..7fb910cf 100644 --- a/igzip/igzip_file_perf.c +++ b/igzip/igzip_file_perf.c @@ -40,309 +40,309 @@ int level_size_buf[10] = { #ifdef ISAL_DEF_LVL0_DEFAULT - ISAL_DEF_LVL0_DEFAULT, + ISAL_DEF_LVL0_DEFAULT, #else - 0, + 0, #endif #ifdef ISAL_DEF_LVL1_DEFAULT - ISAL_DEF_LVL1_DEFAULT, + ISAL_DEF_LVL1_DEFAULT, #else - 0, + 0, #endif #ifdef ISAL_DEF_LVL2_DEFAULT - ISAL_DEF_LVL2_DEFAULT, + ISAL_DEF_LVL2_DEFAULT, #else - 0, + 0, #endif #ifdef ISAL_DEF_LVL3_DEFAULT - ISAL_DEF_LVL3_DEFAULT, + ISAL_DEF_LVL3_DEFAULT, #else - 0, + 0, #endif #ifdef ISAL_DEF_LVL4_DEFAULT - ISAL_DEF_LVL4_DEFAULT, + ISAL_DEF_LVL4_DEFAULT, #else - 0, + 0, #endif #ifdef ISAL_DEF_LVL5_DEFAULT - ISAL_DEF_LVL5_DEFAULT, + ISAL_DEF_LVL5_DEFAULT, #else - 0, + 0, #endif #ifdef ISAL_DEF_LVL6_DEFAULT - ISAL_DEF_LVL6_DEFAULT, + ISAL_DEF_LVL6_DEFAULT, #else - 0, + 0, #endif #ifdef ISAL_DEF_LVL7_DEFAULT - ISAL_DEF_LVL7_DEFAULT, + ISAL_DEF_LVL7_DEFAULT, #else - 0, + 0, #endif #ifdef ISAL_DEF_LVL8_DEFAULT - ISAL_DEF_LVL8_DEFAULT, + ISAL_DEF_LVL8_DEFAULT, #else - 0, + 0, #endif #ifdef ISAL_DEF_LVL9_DEFAULT - ISAL_DEF_LVL9_DEFAULT, + ISAL_DEF_LVL9_DEFAULT, #else - 0, + 0, #endif }; -int usage(void) +int +usage(void) { - fprintf(stderr, - "Usage: igzip_file_perf [options] \n" - " -h help\n" - " -X use compression level X with 0 <= X <= 1\n" - " -b input buffer size, 0 buffers all the input\n" - " -i