Unescape HTML · C++ 🤝 qwen3.8-27b:8bit

SHA-256 a689ee5197d2f9a4cb4aa8d35aed387349b949f1696d7174141e33c8e2911971

View source (98.2 KiB of C++)
/* SPDX-License-Identifier: MIT
 * unescape_html: decode every HTML character reference in UTF-8 text, the way
 * Python's html.unescape does, except that references to control characters and
 * noncharacters (such as  or ) decode to that code point instead of
 * being deleted.
 *
 * One self-contained C++ file, no standard library. The entity table (Python's
 * html.entities.html5, 2,231 names, digest-pinned) is injected at the @@TABLE@@
 * marker by gen_table_cpp.py.
 *
 * Memory layout (20 pages = 1,310,720 bytes): one buffer of 1,258,304 bytes.
 * Output is written from buffer[0]; input is read from buffer + GAP, where
 * GAP = 209,728. The output can outgrow the consumed input by at most
 * floor(1 MiB / 5) = 209,715 bytes (worst case ≫⃒, 5 bytes -> 6), so the
 * write pointer never reaches unread input. Plus table and 16 KiB stack.
 *
 * Build:
 *   python3 gen_table_cpp.py unescape.cpp build/unescape_full.cpp
 *   zig c++ -target wasm32-freestanding -O2 -fno-exceptions -fno-rtti -nostdlib \
 *     -Wl,--no-entry -Wl,--export-memory -Wl,-z,stack-size=16384 \
 *     -Wl,--initial-memory=1310720 -Wl,--max-memory=1310720 \
 *     -Wl,--export=input_ptr -Wl,--export=input_utf8_cap \
 *     -Wl,--export=output_utf8_cap -Wl,--export=render \
 *     -Wl,--strip-all build/unescape_full.cpp -o unescape.wasm
 */
#include <stdint.h>

static constexpr uint32_t GAP = 209728;
static constexpr uint32_t INPUT_CAP = 1048576;
/* floor(INPUT_CAP/5)*6 + INPUT_CAP%5: the proven maximum output size. */
static constexpr uint32_t OUTPUT_CAP = 1258291;

static unsigned char buffer[GAP + INPUT_CAP];
static uint32_t out_len = 0;

extern "C" uint32_t input_ptr() {
    return (uint32_t)(buffer + GAP);
}
extern "C" uint32_t input_utf8_cap() {
    return INPUT_CAP;
}
extern "C" uint32_t output_utf8_cap() {
    return OUTPUT_CAP;
}

/* Windows-1252 remapping for references to 0x80-0x9F; 0 means keep the code point. */
static const uint32_t c1[32] = {0x20AC, 0, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 0x02C6,
                                0x2030, 0x0160, 0x2039, 0x0152, 0, 0x017D, 0, 0, 0x2018, 0x2019,
                                0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x02DC, 0x2122, 0x0161,
                                0x203A, 0x0153, 0, 0x017E, 0x0178};

static inline void emit_byte(uint8_t b) {
    buffer[out_len++] = b;
}

static inline void emit(const unsigned char* p, uint32_t n) {
    for (uint32_t k = 0; k < n; k++) buffer[out_len++] = p[k];
}

static void emit_code_point(uint32_t cp) {
    if (cp < 0x80) {
        emit_byte((uint8_t)cp);
    } else if (cp < 0x800) {
        emit_byte((uint8_t)(0xC0 | (cp >> 6)));
        emit_byte((uint8_t)(0x80 | (cp & 0x3F)));
    } else if (cp < 0x10000) {
        emit_byte((uint8_t)(0xE0 | (cp >> 12)));
        emit_byte((uint8_t)(0x80 | ((cp >> 6) & 0x3F)));
        emit_byte((uint8_t)(0x80 | (cp & 0x3F)));
    } else {
        emit_byte((uint8_t)(0xF0 | (cp >> 18)));
        emit_byte((uint8_t)(0x80 | ((cp >> 12) & 0x3F)));
        emit_byte((uint8_t)(0x80 | ((cp >> 6) & 0x3F)));
        emit_byte((uint8_t)(0x80 | (cp & 0x3F)));
    }
}

/* The reference's named character class: anything but \t \n \f space < & # ;. */
static inline bool name_char(uint8_t c) {
    return c != '\t' && c != '\n' && c != 0x0C && c != ' ' && c != '<' && c != '&' && c != '#' && c != ';';
}

/* Front-coded sorted names in blocks of eight: each record is
 * [prefix length][suffix bytes][0]; the first record of each block
 * has prefix 0. table_groups[b] is the offset of block b in
 * table_names. table_refs[i] = value offset | legacy bit (0x8000).
 * Values are LEB128 code points, NUL-terminated (code point 0 never
 * occurs). */
static const unsigned char table_names[] = {
    0, 65, 69, 108, 105, 103, 0, 1, 77, 80, 0, 1, 97, 99, 117, 116,
    101, 0, 1, 98, 114, 101, 118, 101, 0, 1, 99, 105, 114, 99, 0, 2,
    121, 0, 1, 102, 114, 0, 1, 103, 114, 97, 118, 101, 0, 0, 65, 108,
    112, 104, 97, 0, 1, 109, 97, 99, 114, 0, 1, 110, 100, 0, 1, 111,
    103, 111, 110, 0, 2, 112, 102, 0, 1, 112, 112, 108, 121, 70, 117, 110,
    99, 116, 105, 111, 110, 0, 1, 114, 105, 110, 103, 0, 1, 115, 99, 114,
    0, 0, 65, 115, 115, 105, 103, 110, 0, 1, 116, 105, 108, 100, 101, 0,
    1, 117, 109, 108, 0, 0, 66, 97, 99, 107, 115, 108, 97, 115, 104, 0,
    2, 114, 118, 0, 3, 119, 101, 100, 0, 1, 99, 121, 0, 1, 101, 99,
    97, 117, 115, 101, 0, 0, 66, 101, 114, 110, 111, 117, 108, 108, 105, 115,
    0, 2, 116, 97, 0, 1, 102, 114, 0, 1, 111, 112, 102, 0, 1, 114,
    101, 118, 101, 0, 1, 115, 99, 114, 0, 1, 117, 109, 112, 101, 113, 0,
    0, 67, 72, 99, 121, 0, 0, 67, 79, 80, 89, 0, 1, 97, 99, 117,
    116, 101, 0, 2, 112, 0, 3, 105, 116, 97, 108, 68, 105, 102, 102, 101,
    114, 101, 110, 116, 105, 97, 108, 68, 0, 2, 121, 108, 101, 121, 115, 0,
    1, 99, 97, 114, 111, 110, 0, 2, 101, 100, 105, 108, 0, 2, 105, 114,
    99, 0, 0, 67, 99, 111, 110, 105, 110, 116, 0, 1, 100, 111, 116, 0,
    1, 101, 100, 105, 108, 108, 97, 0, 2, 110, 116, 101, 114, 68, 111, 116,
    0, 1, 102, 114, 0, 1, 104, 105, 0, 1, 105, 114, 99, 108, 101, 68,
    111, 116, 0, 6, 77, 105, 110, 117, 115, 0, 0, 67, 105, 114, 99, 108,
    101, 80, 108, 117, 115, 0, 6, 84, 105, 109, 101, 115, 0, 1, 108, 111,
    99, 107, 119, 105, 115, 101, 67, 111, 110, 116, 111, 117, 114, 73, 110, 116,
    101, 103, 114, 97, 108, 0, 3, 115, 101, 67, 117, 114, 108, 121, 68, 111,
    117, 98, 108, 101, 81, 117, 111, 116, 101, 0, 10, 81, 117, 111, 116, 101,
    0, 1, 111, 108, 111, 110, 0, 5, 101, 0, 2, 110, 103, 114, 117, 101,
    110, 116, 0, 0, 67, 111, 110, 105, 110, 116, 0, 3, 116, 111, 117, 114,
    73, 110, 116, 101, 103, 114, 97, 108, 0, 2, 112, 102, 0, 3, 114, 111,
    100, 117, 99, 116, 0, 2, 117, 110, 116, 101, 114, 67, 108, 111, 99, 107,
    119, 105, 115, 101, 67, 111, 110, 116, 111, 117, 114, 73, 110, 116, 101, 103,
    114, 97, 108, 0, 1, 114, 111, 115, 115, 0, 1, 115, 99, 114, 0, 1,
    117, 112, 0, 0, 67, 117, 112, 67, 97, 112, 0, 0, 68, 68, 0, 2,
    111, 116, 114, 97, 104, 100, 0, 1, 74, 99, 121, 0, 1, 83, 99, 121,
    0, 1, 90, 99, 121, 0, 1, 97, 103, 103, 101, 114, 0, 2, 114, 114,
    0, 0, 68, 97, 115, 104, 118, 0, 1, 99, 97, 114, 111, 110, 0, 2,
    121, 0, 1, 101, 108, 0, 3, 116, 97, 0, 1, 102, 114, 0, 1, 105,
    97, 99, 114, 105, 116, 105, 99, 97, 108, 65, 99, 117, 116, 101, 0, 11,
    68, 111, 116, 0, 0, 68, 105, 97, 99, 114, 105, 116, 105, 99, 97, 108,
    68, 111, 117, 98, 108, 101, 65, 99, 117, 116, 101, 0, 11, 71, 114, 97,
    118, 101, 0, 11, 84, 105, 108, 100, 101, 0, 3, 109, 111, 110, 100, 0,
    2, 102, 102, 101, 114, 101, 110, 116, 105, 97, 108, 68, 0, 1, 111, 112,
    102, 0, 2, 116, 0, 3, 68, 111, 116, 0, 0, 68, 111, 116, 69, 113,
    117, 97, 108, 0, 2, 117, 98, 108, 101, 67, 111, 110, 116, 111, 117, 114,
    73, 110, 116, 101, 103, 114, 97, 108, 0, 6, 68, 111, 116, 0, 8, 119,
    110, 65, 114, 114, 111, 119, 0, 6, 76, 101, 102, 116, 65, 114, 114, 111,
    119, 0, 10, 82, 105, 103, 104, 116, 65, 114, 114, 111, 119, 0, 10, 84,
    101, 101, 0, 7, 111, 110, 103, 76, 101, 102, 116, 65, 114, 114, 111, 119,
    0, 0, 68, 111, 117, 98, 108, 101, 76, 111, 110, 103, 76, 101, 102, 116,
    82, 105, 103, 104, 116, 65, 114, 114, 111, 119, 0, 10, 82, 105, 103, 104,
    116, 65, 114, 114, 111, 119, 0, 6, 82, 105, 103, 104, 116, 65, 114, 114,
    111, 119, 0, 11, 84, 101, 101, 0, 6, 85, 112, 65, 114, 114, 111, 119,
    0, 8, 68, 111, 119, 110, 65, 114, 114, 111, 119, 0, 6, 86, 101, 114,
    116, 105, 99, 97, 108, 66, 97, 114, 0, 2, 119, 110, 65, 114, 114, 111,
    119, 0, 0, 68, 111, 119, 110, 65, 114, 114, 111, 119, 66, 97, 114, 0,
    9, 85, 112, 65, 114, 114, 111, 119, 0, 4, 66, 114, 101, 118, 101, 0,
    4, 76, 101, 102, 116, 82, 105, 103, 104, 116, 86, 101, 99, 116, 111, 114,
    0, 8, 84, 101, 101, 86, 101, 99, 116, 111, 114, 0, 8, 86, 101, 99,
    116, 111, 114, 0, 14, 66, 97, 114, 0, 4, 82, 105, 103, 104, 116, 84,
    101, 101, 86, 101, 99, 116, 111, 114, 0, 0, 68, 111, 119, 110, 82, 105,
    103, 104, 116, 86, 101, 99, 116, 111, 114, 0, 15, 66, 97, 114, 0, 4,
    84, 101, 101, 0, 7, 65, 114, 114, 111, 119, 0, 4, 97, 114, 114, 111,
    119, 0, 1, 115, 99, 114, 0, 2, 116, 114, 111, 107, 0, 0, 69, 78,
    71, 0, 0, 69, 84, 72, 0, 1, 97, 99, 117, 116, 101, 0, 1, 99,
    97, 114, 111, 110, 0, 2, 105, 114, 99, 0, 2, 121, 0, 1, 100, 111,
    116, 0, 1, 102, 114, 0, 1, 103, 114, 97, 118, 101, 0, 0, 69, 108,
    101, 109, 101, 110, 116, 0, 1, 109, 97, 99, 114, 0, 2, 112, 116, 121,
    83, 109, 97, 108, 108, 83, 113, 117, 97, 114, 101, 0, 5, 86, 101, 114,
    121, 83, 109, 97, 108, 108, 83, 113, 117, 97, 114, 101, 0, 1, 111, 103,
    111, 110, 0, 2, 112, 102, 0, 1, 112, 115, 105, 108, 111, 110, 0, 1,
    113, 117, 97, 108, 0, 0, 69, 113, 117, 97, 108, 84, 105, 108, 100, 101,
    0, 3, 105, 108, 105, 98, 114, 105, 117, 109, 0, 1, 115, 99, 114, 0,
    2, 105, 109, 0, 1, 116, 97, 0, 1, 117, 109, 108, 0, 1, 120, 105,
    115, 116, 115, 0, 2, 112, 111, 110, 101, 110, 116, 105, 97, 108, 69, 0,
    0, 70, 99, 121, 0, 1, 102, 114, 0, 1, 105, 108, 108, 101, 100, 83,
    109, 97, 108, 108, 83, 113, 117, 97, 114, 101, 0, 6, 86, 101, 114, 121,
    83, 109, 97, 108, 108, 83, 113, 117, 97, 114, 101, 0, 1, 111, 112, 102,
    0, 2, 114, 65, 108, 108, 0, 2, 117, 114, 105, 101, 114, 116, 114, 102,
    0, 1, 115, 99, 114, 0, 0, 71, 74, 99, 121, 0, 1, 84, 0, 1,
    97, 109, 109, 97, 0, 5, 100, 0, 1, 98, 114, 101, 118, 101, 0, 1,
    99, 101, 100, 105, 108, 0, 2, 105, 114, 99, 0, 2, 121, 0, 0, 71,
    100, 111, 116, 0, 1, 102, 114, 0, 1, 103, 0, 1, 111, 112, 102, 0,
    1, 114, 101, 97, 116, 101, 114, 69, 113, 117, 97, 108, 0, 12, 76, 101,
    115, 115, 0, 7, 70, 117, 108, 108, 69, 113, 117, 97, 108, 0, 7, 71,
    114, 101, 97, 116, 101, 114, 0, 0, 71, 114, 101, 97, 116, 101, 114, 76,
    101, 115, 115, 0, 7, 83, 108, 97, 110, 116, 69, 113, 117, 97, 108, 0,
    7, 84, 105, 108, 100, 101, 0, 1, 115, 99, 114, 0, 1, 116, 0, 0,
    72, 65, 82, 68, 99, 121, 0, 1, 97, 99, 101, 107, 0, 2, 116, 0,
    0, 72, 99, 105, 114, 99, 0, 1, 102, 114, 0, 1, 105, 108, 98, 101,
    114, 116, 83, 112, 97, 99, 101, 0, 1, 111, 112, 102, 0, 2, 114, 105,
    122, 111, 110, 116, 97, 108, 76, 105, 110, 101, 0, 1, 115, 99, 114, 0,
    2, 116, 114, 111, 107, 0, 1, 117, 109, 112, 68, 111, 119, 110, 72, 117,
    109, 112, 0, 0, 72, 117, 109, 112, 69, 113, 117, 97, 108, 0, 0, 73,
    69, 99, 121, 0, 1, 74, 108, 105, 103, 0, 1, 79, 99, 121, 0, 1,
    97, 99, 117, 116, 101, 0, 1, 99, 105, 114, 99, 0, 2, 121, 0, 1,
    100, 111, 116, 0, 0, 73, 102, 114, 0, 1, 103, 114, 97, 118, 101, 0,
    1, 109, 0, 2, 97, 99, 114, 0, 3, 103, 105, 110, 97, 114, 121, 73,
    0, 2, 112, 108, 105, 101, 115, 0, 1, 110, 116, 0, 3, 101, 103, 114,
    97, 108, 0, 0, 73, 110, 116, 101, 114, 115, 101, 99, 116, 105, 111, 110,
    0, 2, 118, 105, 115, 105, 98, 108, 101, 67, 111, 109, 109, 97, 0, 9,
    84, 105, 109, 101, 115, 0, 1, 111, 103, 111, 110, 0, 2, 112, 102, 0,
    2, 116, 97, 0, 1, 115, 99, 114, 0, 1, 116, 105, 108, 100, 101, 0,
    0, 73, 117, 107, 99, 121, 0, 2, 109, 108, 0, 0, 74, 99, 105, 114,
    99, 0, 2, 121, 0, 1, 102, 114, 0, 1, 111, 112, 102, 0, 1, 115,
    99, 114, 0, 2, 101, 114, 99, 121, 0, 0, 74, 117, 107, 99, 121, 0,
    0, 75, 72, 99, 121, 0, 1, 74, 99, 121, 0, 1, 97, 112, 112, 97,
    0, 1, 99, 101, 100, 105, 108, 0, 2, 121, 0, 1, 102, 114, 0, 1,
    111, 112, 102, 0, 0, 75, 115, 99, 114, 0, 0, 76, 74, 99, 121, 0,
    1, 84, 0, 1, 97, 99, 117, 116, 101, 0, 2, 109, 98, 100, 97, 0,
    2, 110, 103, 0, 2, 112, 108, 97, 99, 101, 116, 114, 102, 0, 2, 114,
    114, 0, 0, 76, 99, 97, 114, 111, 110, 0, 2, 101, 100, 105, 108, 0,
    2, 121, 0, 1, 101, 102, 116, 65, 110, 103, 108, 101, 66, 114, 97, 99,
    107, 101, 116, 0, 5, 114, 114, 111, 119, 0, 9, 66, 97, 114, 0, 9,
    82, 105, 103, 104, 116, 65, 114, 114, 111, 119, 0, 4, 67, 101, 105, 108,
    105, 110, 103, 0, 0, 76, 101, 102, 116, 68, 111, 117, 98, 108, 101, 66,
    114, 97, 99, 107, 101, 116, 0, 6, 119, 110, 84, 101, 101, 86, 101, 99,
    116, 111, 114, 0, 8, 86, 101, 99, 116, 111, 114, 0, 14, 66, 97, 114,
    0, 4, 70, 108, 111, 111, 114, 0, 4, 82, 105, 103, 104, 116, 65, 114,
    114, 111, 119, 0, 9, 86, 101, 99, 116, 111, 114, 0, 4, 84, 101, 101,
    0, 0, 76, 101, 102, 116, 84, 101, 101, 65, 114, 114, 111, 119, 0, 7,
    86, 101, 99, 116, 111, 114, 0, 5, 114, 105, 97, 110, 103, 108, 101, 0,
    12, 66, 97, 114, 0, 12, 69, 113, 117, 97, 108, 0, 4, 85, 112, 68,
    111, 119, 110, 86, 101, 99, 116, 111, 114, 0, 6, 84, 101, 101, 86, 101,
    99, 116, 111, 114, 0, 6, 86, 101, 99, 116, 111, 114, 0, 0, 76, 101,
    102, 116, 85, 112, 86, 101, 99, 116, 111, 114, 66, 97, 114, 0, 4, 86,
    101, 99, 116, 111, 114, 0, 10, 66, 97, 114, 0, 4, 97, 114, 114, 111,
    119, 0, 4, 114, 105, 103, 104, 116, 97, 114, 114, 111, 119, 0, 2, 115,
    115, 69, 113, 117, 97, 108, 71, 114, 101, 97, 116, 101, 114, 0, 4, 70,
    117, 108, 108, 69, 113, 117, 97, 108, 0, 4, 71, 114, 101, 97, 116, 101,
    114, 0, 0, 76, 101, 115, 115, 76, 101, 115, 115, 0, 4, 83, 108, 97,
    110, 116, 69, 113, 117, 97, 108, 0, 4, 84, 105, 108, 100, 101, 0, 1,
    102, 114, 0, 1, 108, 0, 2, 101, 102, 116, 97, 114, 114, 111, 119, 0,
    1, 109, 105, 100, 111, 116, 0, 1, 111, 110, 103, 76, 101, 102, 116, 65,
    114, 114, 111, 119, 0, 0, 76, 111, 110, 103, 76, 101, 102, 116, 82, 105,
    103, 104, 116, 65, 114, 114, 111, 119, 0, 4, 82, 105, 103, 104, 116, 65,
    114, 114, 111, 119, 0, 4, 108, 101, 102, 116, 97, 114, 114, 111, 119, 0,
    8, 114, 105, 103, 104, 116, 97, 114, 114, 111, 119, 0, 4, 114, 105, 103,
    104, 116, 97, 114, 114, 111, 119, 0, 2, 112, 102, 0, 2, 119, 101, 114,
    76, 101, 102, 116, 65, 114, 114, 111, 119, 0, 5, 82, 105, 103, 104, 116,
    65, 114, 114, 111, 119, 0, 0, 76, 115, 99, 114, 0, 2, 104, 0, 2,
    116, 114, 111, 107, 0, 1, 116, 0, 0, 77, 97, 112, 0, 1, 99, 121,
    0, 1, 101, 100, 105, 117, 109, 83, 112, 97, 99, 101, 0, 2, 108, 108,
    105, 110, 116, 114, 102, 0, 0, 77, 102, 114, 0, 1, 105, 110, 117, 115,
    80, 108, 117, 115, 0, 1, 111, 112, 102, 0, 1, 115, 99, 114, 0, 1,
    117, 0, 0, 78, 74, 99, 121, 0, 1, 97, 99, 117, 116, 101, 0, 1,
    99, 97, 114, 111, 110, 0, 0, 78, 99, 101, 100, 105, 108, 0, 2, 121,
    0, 1, 101, 103, 97, 116, 105, 118, 101, 77, 101, 100, 105, 117, 109, 83,
    112, 97, 99, 101, 0, 8, 84, 104, 105, 99, 107, 83, 112, 97, 99, 101,
    0, 11, 110, 83, 112, 97, 99, 101, 0, 8, 86, 101, 114, 121, 84, 104,
    105, 110, 83, 112, 97, 99, 101, 0, 2, 115, 116, 101, 100, 71, 114, 101,
    97, 116, 101, 114, 71, 114, 101, 97, 116, 101, 114, 0, 6, 76, 101, 115,
    115, 76, 101, 115, 115, 0, 0, 78, 101, 119, 76, 105, 110, 101, 0, 1,
    102, 114, 0, 1, 111, 66, 114, 101, 97, 107, 0, 2, 110, 66, 114, 101,
    97, 107, 105, 110, 103, 83, 112, 97, 99, 101, 0, 2, 112, 102, 0, 2,
    116, 0, 3, 67, 111, 110, 103, 114, 117, 101, 110, 116, 0, 4, 117, 112,
    67, 97, 112, 0, 0, 78, 111, 116, 68, 111, 117, 98, 108, 101, 86, 101,
    114, 116, 105, 99, 97, 108, 66, 97, 114, 0, 3, 69, 108, 101, 109, 101,
    110, 116, 0, 4, 113, 117, 97, 108, 0, 8, 84, 105, 108, 100, 101, 0,
    4, 120, 105, 115, 116, 115, 0, 3, 71, 114, 101, 97, 116, 101, 114, 0,
    10, 69, 113, 117, 97, 108, 0, 10, 70, 117, 108, 108, 69, 113, 117, 97,
    108, 0, 0, 78, 111, 116, 71, 114, 101, 97, 116, 101, 114, 71, 114, 101,
    97, 116, 101, 114, 0, 10, 76, 101, 115, 115, 0, 10, 83, 108, 97, 110,
    116, 69, 113, 117, 97, 108, 0, 10, 84, 105, 108, 100, 101, 0, 3, 72,
    117, 109, 112, 68, 111, 119, 110, 72, 117, 109, 112, 0, 7, 69, 113, 117,
    97, 108, 0, 3, 76, 101, 102, 116, 84, 114, 105, 97, 110, 103, 108, 101,
    0, 15, 66, 97, 114, 0, 0, 78, 111, 116, 76, 101, 102, 116, 84, 114,
    105, 97, 110, 103, 108, 101, 69, 113, 117, 97, 108, 0, 5, 115, 115, 0,
    7, 69, 113, 117, 97, 108, 0, 7, 71, 114, 101, 97, 116, 101, 114, 0,
    7, 76, 101, 115, 115, 0, 7, 83, 108, 97, 110, 116, 69, 113, 117, 97,
    108, 0, 7, 84, 105, 108, 100, 101, 0, 3, 78, 101, 115, 116, 101, 100,
    71, 114, 101, 97, 116, 101, 114, 71, 114, 101, 97, 116, 101, 114, 0, 0,
    78, 111, 116, 78, 101, 115, 116, 101, 100, 76, 101, 115, 115, 76, 101, 115,
    115, 0, 3, 80, 114, 101, 99, 101, 100, 101, 115, 0, 11, 69, 113, 117,
    97, 108, 0, 11, 83, 108, 97, 110, 116, 69, 113, 117, 97, 108, 0, 3,
    82, 101, 118, 101, 114, 115, 101, 69, 108, 101, 109, 101, 110, 116, 0, 4,
    105, 103, 104, 116, 84, 114, 105, 97, 110, 103, 108, 101, 0, 16, 66, 97,
    114, 0, 16, 69, 113, 117, 97, 108, 0, 0, 78, 111, 116, 83, 113, 117,
    97, 114, 101, 83, 117, 98, 115, 101, 116, 0, 15, 69, 113, 117, 97, 108,
    0, 11, 112, 101, 114, 115, 101, 116, 0, 17, 69, 113, 117, 97, 108, 0,
    4, 117, 98, 115, 101, 116, 0, 9, 69, 113, 117, 97, 108, 0, 5, 99,
    99, 101, 101, 100, 115, 0, 11, 69, 113, 117, 97, 108, 0, 0, 78, 111,
    116, 83, 117, 99, 99, 101, 101, 100, 115, 83, 108, 97, 110, 116, 69, 113,
    117, 97, 108, 0, 11, 84, 105, 108, 100, 101, 0, 5, 112, 101, 114, 115,
    101, 116, 0, 11, 69, 113, 117, 97, 108, 0, 3, 84, 105, 108, 100, 101,
    0, 8, 69, 113, 117, 97, 108, 0, 8, 70, 117, 108, 108, 69, 113, 117,
    97, 108, 0, 8, 84, 105, 108, 100, 101, 0, 0, 78, 111, 116, 86, 101,
    114, 116, 105, 99, 97, 108, 66, 97, 114, 0, 1, 115, 99, 114, 0, 1,
    116, 105, 108, 100, 101, 0, 1, 117, 0, 0, 79, 69, 108, 105, 103, 0,
    1, 97, 99, 117, 116, 101, 0, 1, 99, 105, 114, 99, 0, 2, 121, 0,
    0, 79, 100, 98, 108, 97, 99, 0, 1, 102, 114, 0, 1, 103, 114, 97,
    118, 101, 0, 1, 109, 97, 99, 114, 0, 2, 101, 103, 97, 0, 2, 105,
    99, 114, 111, 110, 0, 1, 111, 112, 102, 0, 1, 112, 101, 110, 67, 117,
    114, 108, 121, 68, 111, 117, 98, 108, 101, 81, 117, 111, 116, 101, 0, 0,
    79, 112, 101, 110, 67, 117, 114, 108, 121, 81, 117, 111, 116, 101, 0, 1,
    114, 0, 1, 115, 99, 114, 0, 2, 108, 97, 115, 104, 0, 1, 116, 105,
    108, 100, 101, 0, 3, 109, 101, 115, 0, 1, 117, 109, 108, 0, 1, 118,
    101, 114, 66, 97, 114, 0, 0, 79, 118, 101, 114, 66, 114, 97, 99, 101,
    0, 8, 107, 101, 116, 0, 4, 80, 97, 114, 101, 110, 116, 104, 101, 115,
    105, 115, 0, 0, 80, 97, 114, 116, 105, 97, 108, 68, 0, 1, 99, 121,
    0, 1, 102, 114, 0, 1, 104, 105, 0, 1, 105, 0, 0, 80, 108, 117,
    115, 77, 105, 110, 117, 115, 0, 1, 111, 105, 110, 99, 97, 114, 101, 112,
    108, 97, 110, 101, 0, 2, 112, 102, 0, 1, 114, 0, 2, 101, 99, 101,
    100, 101, 115, 0, 8, 69, 113, 117, 97, 108, 0, 8, 83, 108, 97, 110,
    116, 69, 113, 117, 97, 108, 0, 8, 84, 105, 108, 100, 101, 0, 0, 80,
    114, 105, 109, 101, 0, 2, 111, 100, 117, 99, 116, 0, 3, 112, 111, 114,
    116, 105, 111, 110, 0, 10, 97, 108, 0, 1, 115, 99, 114, 0, 2, 105,
    0, 0, 81, 85, 79, 84, 0, 1, 102, 114, 0, 0, 81, 111, 112, 102,
    0, 1, 115, 99, 114, 0, 0, 82, 66, 97, 114, 114, 0, 1, 69, 71,
    0, 1, 97, 99, 117, 116, 101, 0, 2, 110, 103, 0, 2, 114, 114, 0,
    4, 116, 108, 0, 0, 82, 99, 97, 114, 111, 110, 0, 2, 101, 100, 105,
    108, 0, 2, 121, 0, 1, 101, 0, 2, 118, 101, 114, 115, 101, 69, 108,
    101, 109, 101, 110, 116, 0, 8, 113, 117, 105, 108, 105, 98, 114, 105, 117,
    109, 0, 7, 85, 112, 69, 113, 117, 105, 108, 105, 98, 114, 105, 117, 109,
    0, 1, 102, 114, 0, 0, 82, 104, 111, 0, 1, 105, 103, 104, 116, 65,
    110, 103, 108, 101, 66, 114, 97, 99, 107, 101, 116, 0, 6, 114, 114, 111,
    119, 0, 10, 66, 97, 114, 0, 10, 76, 101, 102, 116, 65, 114, 114, 111,
    119, 0, 5, 67, 101, 105, 108, 105, 110, 103, 0, 5, 68, 111, 117, 98,
    108, 101, 66, 114, 97, 99, 107, 101, 116, 0, 7, 119, 110, 84, 101, 101,
    86, 101, 99, 116, 111, 114, 0, 0, 82, 105, 103, 104, 116, 68, 111, 119,
    110, 86, 101, 99, 116, 111, 114, 0, 15, 66, 97, 114, 0, 5, 70, 108,
    111, 111, 114, 0, 5, 84, 101, 101, 0, 8, 65, 114, 114, 111, 119, 0,
    8, 86, 101, 99, 116, 111, 114, 0, 6, 114, 105, 97, 110, 103, 108, 101,
    0, 13, 66, 97, 114, 0, 0, 82, 105, 103, 104, 116, 84, 114, 105, 97,
    110, 103, 108, 101, 69, 113, 117, 97, 108, 0, 5, 85, 112, 68, 111, 119,
    110, 86, 101, 99, 116, 111, 114, 0, 7, 84, 101, 101, 86, 101, 99, 116,
    111, 114, 0, 7, 86, 101, 99, 116, 111, 114, 0, 13, 66, 97, 114, 0,
    5, 86, 101, 99, 116, 111, 114, 0, 11, 66, 97, 114, 0, 5, 97, 114,
    114, 111, 119, 0, 0, 82, 111, 112, 102, 0, 2, 117, 110, 100, 73, 109,
    112, 108, 105, 101, 115, 0, 1, 114, 105, 103, 104, 116, 97, 114, 114, 111,
    119, 0, 1, 115, 99, 114, 0, 2, 104, 0, 1, 117, 108, 101, 68, 101,
    108, 97, 121, 101, 100, 0, 0, 83, 72, 67, 72, 99, 121, 0, 2, 99,
    121, 0, 0, 83, 79, 70, 84, 99, 121, 0, 1, 97, 99, 117, 116, 101,
    0, 1, 99, 0, 2, 97, 114, 111, 110, 0, 2, 101, 100, 105, 108, 0,
    2, 105, 114, 99, 0, 2, 121, 0, 1, 102, 114, 0, 0, 83, 104, 111,
    114, 116, 68, 111, 119, 110, 65, 114, 114, 111, 119, 0, 5, 76, 101, 102,
    116, 65, 114, 114, 111, 119, 0, 5, 82, 105, 103, 104, 116, 65, 114, 114,
    111, 119, 0, 5, 85, 112, 65, 114, 114, 111, 119, 0, 1, 105, 103, 109,
    97, 0, 1, 109, 97, 108, 108, 67, 105, 114, 99, 108, 101, 0, 1, 111,
    112, 102, 0, 1, 113, 114, 116, 0, 0, 83, 113, 117, 97, 114, 101, 0,
    6, 73, 110, 116, 101, 114, 115, 101, 99, 116, 105, 111, 110, 0, 6, 83,
    117, 98, 115, 101, 116, 0, 12, 69, 113, 117, 97, 108, 0, 8, 112, 101,
    114, 115, 101, 116, 0, 14, 69, 113, 117, 97, 108, 0, 6, 85, 110, 105,
    111, 110, 0, 1, 115, 99, 114, 0, 0, 83, 116, 97, 114, 0, 1, 117,
    98, 0, 3, 115, 101, 116, 0, 6, 69, 113, 117, 97, 108, 0, 2, 99,
    99, 101, 101, 100, 115, 0, 8, 69, 113, 117, 97, 108, 0, 8, 83, 108,
    97, 110, 116, 69, 113, 117, 97, 108, 0, 8, 84, 105, 108, 100, 101, 0,
    0, 83, 117, 99, 104, 84, 104, 97, 116, 0, 2, 109, 0, 2, 112, 0,
    3, 101, 114, 115, 101, 116, 0, 8, 69, 113, 117, 97, 108, 0, 3, 115,
    101, 116, 0, 0, 84, 72, 79, 82, 78, 0, 1, 82, 65, 68, 69, 0,
    0, 84, 83, 72, 99, 121, 0, 2, 99, 121, 0, 1, 97, 98, 0, 2,
    117, 0, 1, 99, 97, 114, 111, 110, 0, 2, 101, 100, 105, 108, 0, 2,
    121, 0, 1, 102, 114, 0, 0, 84, 104, 101, 114, 101, 102, 111, 114, 101,
    0, 3, 116, 97, 0, 2, 105, 99, 107, 83, 112, 97, 99, 101, 0, 3,
    110, 83, 112, 97, 99, 101, 0, 1, 105, 108, 100, 101, 0, 5, 69, 113,
    117, 97, 108, 0, 5, 70, 117, 108, 108, 69, 113, 117, 97, 108, 0, 5,
    84, 105, 108, 100, 101, 0, 0, 84, 111, 112, 102, 0, 1, 114, 105, 112,
    108, 101, 68, 111, 116, 0, 1, 115, 99, 114, 0, 2, 116, 114, 111, 107,
    0, 0, 85, 97, 99, 117, 116, 101, 0, 2, 114, 114, 0, 4, 111, 99,
    105, 114, 0, 1, 98, 114, 99, 121, 0, 0, 85, 98, 114, 101, 118, 101,
    0, 1, 99, 105, 114, 99, 0, 2, 121, 0, 1, 100, 98, 108, 97, 99,
    0, 1, 102, 114, 0, 1, 103, 114, 97, 118, 101, 0, 1, 109, 97, 99,
    114, 0, 1, 110, 100, 101, 114, 66, 97, 114, 0, 0, 85, 110, 100, 101,
    114, 66, 114, 97, 99, 101, 0, 9, 107, 101, 116, 0, 5, 80, 97, 114,
    101, 110, 116, 104, 101, 115, 105, 115, 0, 2, 105, 111, 110, 0, 5, 80,
    108, 117, 115, 0, 1, 111, 103, 111, 110, 0, 2, 112, 102, 0, 1, 112,
    65, 114, 114, 111, 119, 0, 0, 85, 112, 65, 114, 114, 111, 119, 66, 97,
    114, 0, 7, 68, 111, 119, 110, 65, 114, 114, 111, 119, 0, 2, 68, 111,
    119, 110, 65, 114, 114, 111, 119, 0, 2, 69, 113, 117, 105, 108, 105, 98,
    114, 105, 117, 109, 0, 2, 84, 101, 101, 0, 5, 65, 114, 114, 111, 119,
    0, 2, 97, 114, 114, 111, 119, 0, 2, 100, 111, 119, 110, 97, 114, 114,
    111, 119, 0, 0, 85, 112, 112, 101, 114, 76, 101, 102, 116, 65, 114, 114,
    111, 119, 0, 5, 82, 105, 103, 104, 116, 65, 114, 114, 111, 119, 0, 2,
    115, 105, 0, 4, 108, 111, 110, 0, 1, 114, 105, 110, 103, 0, 1, 115,
    99, 114, 0, 1, 116, 105, 108, 100, 101, 0, 1, 117, 109, 108, 0, 0,
    86, 68, 97, 115, 104, 0, 1, 98, 97, 114, 0, 1, 99, 121, 0, 1,
    100, 97, 115, 104, 0, 5, 108, 0, 1, 101, 101, 0, 2, 114, 98, 97,
    114, 0, 3, 116, 0, 0, 86, 101, 114, 116, 105, 99, 97, 108, 66, 97,
    114, 0, 8, 76, 105, 110, 101, 0, 8, 83, 101, 112, 97, 114, 97, 116,
    111, 114, 0, 8, 84, 105, 108, 100, 101, 0, 3, 121, 84, 104, 105, 110,
    83, 112, 97, 99, 101, 0, 1, 102, 114, 0, 1, 111, 112, 102, 0, 1,
    115, 99, 114, 0, 0, 86, 118, 100, 97, 115, 104, 0, 0, 87, 99, 105,
    114, 99, 0, 1, 101, 100, 103, 101, 0, 1, 102, 114, 0, 1, 111, 112,
    102, 0, 1, 115, 99, 114, 0, 0, 88, 102, 114, 0, 1, 105, 0, 0,
    88, 111, 112, 102, 0, 1, 115, 99, 114, 0, 0, 89, 65, 99, 121, 0,
    1, 73, 99, 121, 0, 1, 85, 99, 121, 0, 1, 97, 99, 117, 116, 101,
    0, 1, 99, 105, 114, 99, 0, 2, 121, 0, 0, 89, 102, 114, 0, 1,
    111, 112, 102, 0, 1, 115, 99, 114, 0, 1, 117, 109, 108, 0, 0, 90,
    72, 99, 121, 0, 1, 97, 99, 117, 116, 101, 0, 1, 99, 97, 114, 111,
    110, 0, 2, 121, 0, 0, 90, 100, 111, 116, 0, 1, 101, 114, 111, 87,
    105, 100, 116, 104, 83, 112, 97, 99, 101, 0, 2, 116, 97, 0, 1, 102,
    114, 0, 1, 111, 112, 102, 0, 1, 115, 99, 114, 0, 0, 97, 97, 99,
    117, 116, 101, 0, 1, 98, 114, 101, 118, 101, 0, 0, 97, 99, 0, 2,
    69, 0, 2, 100, 0, 2, 105, 114, 99, 0, 2, 117, 116, 101, 0, 2,
    121, 0, 1, 101, 108, 105, 103, 0, 1, 102, 0, 0, 97, 102, 114, 0,
    1, 103, 114, 97, 118, 101, 0, 1, 108, 101, 102, 115, 121, 109, 0, 3,
    112, 104, 0, 2, 112, 104, 97, 0, 1, 109, 97, 99, 114, 0, 3, 108,
    103, 0, 2, 112, 0, 0, 97, 110, 100, 0, 3, 97, 110, 100, 0, 3,
    100, 0, 3, 115, 108, 111, 112, 101, 0, 3, 118, 0, 2, 103, 0, 3,
    101, 0, 3, 108, 101, 0, 0, 97, 110, 103, 109, 115, 100, 0, 6, 97,
    97, 0, 7, 98, 0, 7, 99, 0, 7, 100, 0, 7, 101, 0, 7, 102,
    0, 7, 103, 0, 0, 97, 110, 103, 109, 115, 100, 97, 104, 0, 3, 114,
    116, 0, 5, 118, 98, 0, 7, 100, 0, 3, 115, 112, 104, 0, 4, 116,
    0, 3, 122, 97, 114, 114, 0, 1, 111, 103, 111, 110, 0, 0, 97, 111,
    112, 102, 0, 1, 112, 0, 2, 69, 0, 2, 97, 99, 105, 114, 0, 2,
    101, 0, 2, 105, 100, 0, 2, 111, 115, 0, 2, 112, 114, 111, 120, 0,
    0, 97, 112, 112, 114, 111, 120, 101, 113, 0, 1, 114, 105, 110, 103, 0,
    1, 115, 99, 114, 0, 2, 116, 0, 2, 121, 109, 112, 0, 5, 101, 113,
    0, 1, 116, 105, 108, 100, 101, 0, 1, 117, 109, 108, 0, 0, 97, 119,
    99, 111, 110, 105, 110, 116, 0, 2, 105, 110, 116, 0, 0, 98, 78, 111,
    116, 0, 1, 97, 99, 107, 99, 111, 110, 103, 0, 4, 101, 112, 115, 105,
    108, 111, 110, 0, 4, 112, 114, 105, 109, 101, 0, 4, 115, 105, 109, 0,
    7, 101, 113, 0, 0, 98, 97, 114, 118, 101, 101, 0, 3, 119, 101, 100,
    0, 6, 103, 101, 0, 1, 98, 114, 107, 0, 4, 116, 98, 114, 107, 0,
    1, 99, 111, 110, 103, 0, 2, 121, 0, 1, 100, 113, 117, 111, 0, 0,
    98, 101, 99, 97, 117, 115, 0, 6, 101, 0, 2, 109, 112, 116, 121, 118,
    0, 2, 112, 115, 105, 0, 2, 114, 110, 111, 117, 0, 2, 116, 97, 0,
    3, 104, 0, 3, 119, 101, 101, 110, 0, 0, 98, 102, 114, 0, 1, 105,
    103, 99, 97, 112, 0, 4, 105, 114, 99, 0, 4, 117, 112, 0, 3, 111,
    100, 111, 116, 0, 4, 112, 108, 117, 115, 0, 4, 116, 105, 109, 101, 115,
    0, 3, 115, 113, 99, 117, 112, 0, 0, 98, 105, 103, 115, 116, 97, 114,
    0, 3, 116, 114, 105, 97, 110, 103, 108, 101, 100, 111, 119, 110, 0, 11,
    117, 112, 0, 3, 117, 112, 108, 117, 115, 0, 3, 118, 101, 101, 0, 3,
    119, 101, 100, 103, 101, 0, 1, 107, 97, 114, 111, 119, 0, 1, 108, 97,
    99, 107, 108, 111, 122, 101, 110, 103, 101, 0, 0, 98, 108, 97, 99, 107,
    115, 113, 117, 97, 114, 101, 0, 5, 116, 114, 105, 97, 110, 103, 108, 101,
    0, 13, 100, 111, 119, 110, 0, 13, 108, 101, 102, 116, 0, 13, 114, 105,
    103, 104, 116, 0, 3, 110, 107, 0, 2, 107, 49, 50, 0, 4, 52, 0,
    0, 98, 108, 107, 51, 52, 0, 2, 111, 99, 107, 0, 1, 110, 101, 0,
    3, 113, 117, 105, 118, 0, 2, 111, 116, 0, 1, 111, 112, 102, 0, 2,
    116, 0, 3, 116, 111, 109, 0, 0, 98, 111, 119, 116, 105, 101, 0, 2,
    120, 68, 76, 0, 4, 82, 0, 4, 108, 0, 4, 114, 0, 3, 72, 0,
    4, 68, 0, 4, 85, 0, 0, 98, 111, 120, 72, 100, 0, 4, 117, 0,
    3, 85, 76, 0, 4, 82, 0, 4, 108, 0, 4, 114, 0, 3, 86, 0,
    4, 72, 0, 0, 98, 111, 120, 86, 76, 0, 4, 82, 0, 4, 104, 0,
    4, 108, 0, 4, 114, 0, 3, 98, 111, 120, 0, 3, 100, 76, 0, 4,
    82, 0, 0, 98, 111, 120, 100, 108, 0, 4, 114, 0, 3, 104, 0, 4,
    68, 0, 4, 85, 0, 4, 100, 0, 4, 117, 0, 3, 109, 105, 110, 117,
    115, 0, 0, 98, 111, 120, 112, 108, 117, 115, 0, 3, 116, 105, 109, 101,
    115, 0, 3, 117, 76, 0, 4, 82, 0, 4, 108, 0, 4, 114, 0, 3,
    118, 0, 4, 72, 0, 0, 98, 111, 120, 118, 76, 0, 4, 82, 0, 4,
    104, 0, 4, 108, 0, 4, 114, 0, 1, 112, 114, 105, 109, 101, 0, 1,
    114, 101, 118, 101, 0, 2, 118, 98, 97, 114, 0, 0, 98, 115, 99, 114,
    0, 2, 101, 109, 105, 0, 2, 105, 109, 0, 4, 101, 0, 2, 111, 108,
    0, 4, 98, 0, 4, 104, 115, 117, 98, 0, 1, 117, 108, 108, 0, 0,
    98, 117, 108, 108, 101, 116, 0, 2, 109, 112, 0, 4, 69, 0, 4, 101,
    0, 5, 113, 0, 0, 99, 97, 99, 117, 116, 101, 0, 2, 112, 0, 3,
    97, 110, 100, 0, 0, 99, 97, 112, 98, 114, 99, 117, 112, 0, 3, 99,
    97, 112, 0, 4, 117, 112, 0, 3, 100, 111, 116, 0, 3, 115, 0, 2,
    114, 101, 116, 0, 3, 111, 110, 0, 1, 99, 97, 112, 115, 0, 0, 99,
    99, 97, 114, 111, 110, 0, 2, 101, 100, 105, 108, 0, 2, 105, 114, 99,
    0, 2, 117, 112, 115, 0, 5, 115, 109, 0, 1, 100, 111, 116, 0, 1,
    101, 100, 105, 108, 0, 2, 109, 112, 116, 121, 118, 0, 0, 99, 101, 110,
    116, 0, 4, 101, 114, 100, 111, 116, 0, 1, 102, 114, 0, 1, 104, 99,
    121, 0, 2, 101, 99, 107, 0, 5, 109, 97, 114, 107, 0, 2, 105, 0,
    1, 105, 114, 0, 0, 99, 105, 114, 69, 0, 3, 99, 0, 4, 101, 113,
    0, 4, 108, 101, 97, 114, 114, 111, 119, 108, 101, 102, 116, 0, 11, 114,
    105, 103, 104, 116, 0, 6, 100, 82, 0, 7, 83, 0, 7, 97, 115, 116,
    0, 0, 99, 105, 114, 99, 108, 101, 100, 99, 105, 114, 99, 0, 7, 100,
    97, 115, 104, 0, 3, 101, 0, 3, 102, 110, 105, 110, 116, 0, 3, 109,
    105, 100, 0, 3, 115, 99, 105, 114, 0, 1, 108, 117, 98, 115, 0, 5,
    117, 105, 116, 0, 0, 99, 111, 108, 111, 110, 0, 5, 101, 0, 6, 113,
    0, 2, 109, 109, 97, 0, 5, 116, 0, 3, 112, 0, 4, 102, 110, 0,
    4, 108, 101, 109, 101, 110, 116, 0, 0, 99, 111, 109, 112, 108, 101, 120,
    101, 115, 0, 2, 110, 103, 0, 4, 100, 111, 116, 0, 3, 105, 110, 116,
    0, 2, 112, 102, 0, 3, 114, 111, 100, 0, 3, 121, 0, 4, 115, 114,
    0, 0, 99, 114, 97, 114, 114, 0, 2, 111, 115, 115, 0, 1, 115, 99,
    114, 0, 2, 117, 98, 0, 4, 101, 0, 3, 112, 0, 4, 101, 0, 1,
    116, 100, 111, 116, 0, 0, 99, 117, 100, 97, 114, 114, 108, 0, 6, 114,
    0, 2, 101, 112, 114, 0, 3, 115, 99, 0, 2, 108, 97, 114, 114, 0,
    6, 112, 0, 2, 112, 0, 3, 98, 114, 99, 97, 112, 0, 0, 99, 117,
    112, 99, 97, 112, 0, 4, 117, 112, 0, 3, 100, 111, 116, 0, 3, 111,
    114, 0, 3, 115, 0, 2, 114, 97, 114, 114, 0, 6, 109, 0, 3, 108,
    121, 101, 113, 112, 114, 101, 99, 0, 0, 99, 117, 114, 108, 121, 101, 113,
    115, 117, 99, 99, 0, 5, 118, 101, 101, 0, 5, 119, 101, 100, 103, 101,
    0, 3, 114, 101, 110, 0, 3, 118, 101, 97, 114, 114, 111, 119, 108, 101,
    102, 116, 0, 10, 114, 105, 103, 104, 116, 0, 2, 118, 101, 101, 0, 2,
    119, 101, 100, 0, 0, 99, 119, 99, 111, 110, 105, 110, 116, 0, 2, 105,
    110, 116, 0, 1, 121, 108, 99, 116, 121, 0, 0, 100, 65, 114, 114, 0,
    1, 72, 97, 114, 0, 1, 97, 103, 103, 101, 114, 0, 2, 108, 101, 116,
    104, 0, 2, 114, 114, 0, 0, 100, 97, 115, 104, 0, 4, 118, 0, 1,
    98, 107, 97, 114, 111, 119, 0, 2, 108, 97, 99, 0, 1, 99, 97, 114,
    111, 110, 0, 2, 121, 0, 1, 100, 0, 2, 97, 103, 103, 101, 114, 0,
    0, 100, 100, 97, 114, 114, 0, 2, 111, 116, 115, 101, 113, 0, 1, 101,
    103, 0, 2, 108, 116, 97, 0, 2, 109, 112, 116, 121, 118, 0, 1, 102,
    105, 115, 104, 116, 0, 2, 114, 0, 1, 104, 97, 114, 108, 0, 0, 100,
    104, 97, 114, 114, 0, 1, 105, 97, 109, 0, 4, 111, 110, 100, 0, 7,
    115, 117, 105, 116, 0, 4, 115, 0, 2, 101, 0, 2, 103, 97, 109, 109,
    97, 0, 2, 115, 105, 110, 0, 0, 100, 105, 118, 0, 3, 105, 100, 101,
    0, 6, 111, 110, 116, 105, 109, 101, 115, 0, 3, 111, 110, 120, 0, 1,
    106, 99, 121, 0, 1, 108, 99, 111, 114, 110, 0, 3, 114, 111, 112, 0,
    1, 111, 108, 108, 97, 114, 0, 0, 100, 111, 112, 102, 0, 2, 116, 0,
    3, 101, 113, 0, 5, 100, 111, 116, 0, 3, 109, 105, 110, 117, 115, 0,
    3, 112, 108, 117, 115, 0, 3, 115, 113, 117, 97, 114, 101, 0, 2, 117,
    98, 108, 101, 98, 97, 114, 119, 101, 100, 103, 101, 0, 0, 100, 111, 119,
    110, 97, 114, 114, 111, 119, 0, 4, 100, 111, 119, 110, 97, 114, 114, 111,
    119, 115, 0, 4, 104, 97, 114, 112, 111, 111, 110, 108, 101, 102, 116, 0,
    11, 114, 105, 103, 104, 116, 0, 1, 114, 98, 107, 97, 114, 111, 119, 0,
    2, 99, 111, 114, 110, 0, 3, 114, 111, 112, 0, 1, 115, 99, 114, 0,
    0, 100, 115, 99, 121, 0, 2, 111, 108, 0, 2, 116, 114, 111, 107, 0,
    1, 116, 100, 111, 116, 0, 2, 114, 105, 0, 4, 102, 0, 1, 117, 97,
    114, 114, 0, 2, 104, 97, 114, 0, 0, 100, 119, 97, 110, 103, 108, 101,
    0, 1, 122, 99, 121, 0, 2, 105, 103, 114, 97, 114, 114, 0, 0, 101,
    68, 68, 111, 116, 0, 2, 111, 116, 0, 1, 97, 99, 117, 116, 101, 0,
    2, 115, 116, 101, 114, 0, 1, 99, 97, 114, 111, 110, 0, 0, 101, 99,
    105, 114, 0, 4, 99, 0, 2, 111, 108, 111, 110, 0, 2, 121, 0, 1,
    100, 111, 116, 0, 1, 101, 0, 1, 102, 68, 111, 116, 0, 2, 114, 0,
    0, 101, 103, 0, 2, 114, 97, 118, 101, 0, 2, 115, 0, 3, 100, 111,
    116, 0, 1, 108, 0, 2, 105, 110, 116, 101, 114, 115, 0, 2, 108, 0,
    2, 115, 0, 0, 101, 108, 115, 100, 111, 116, 0, 1, 109, 97, 99, 114,
    0, 2, 112, 116, 121, 0, 5, 115, 101, 116, 0, 5, 118, 0, 2, 115,
    112, 0, 4, 49, 51, 0, 5, 52, 0, 0, 101, 110, 103, 0, 2, 115,
    112, 0, 1, 111, 103, 111, 110, 0, 2, 112, 102, 0, 1, 112, 97, 114,
    0, 4, 115, 108, 0, 2, 108, 117, 115, 0, 2, 115, 105, 0, 0, 101,
    112, 115, 105, 108, 111, 110, 0, 4, 118, 0, 1, 113, 99, 105, 114, 99,
    0, 3, 111, 108, 111, 110, 0, 2, 115, 105, 109, 0, 3, 108, 97, 110,
    116, 103, 116, 114, 0, 7, 108, 101, 115, 115, 0, 2, 117, 97, 108, 115,
    0, 0, 101, 113, 117, 101, 115, 116, 0, 3, 105, 118, 0, 5, 68, 68,
    0, 2, 118, 112, 97, 114, 115, 108, 0, 1, 114, 68, 111, 116, 0, 2,
    97, 114, 114, 0, 1, 115, 99, 114, 0, 2, 100, 111, 116, 0, 0, 101,
    115, 105, 109, 0, 1, 116, 97, 0, 2, 104, 0, 1, 117, 109, 108, 0,
    2, 114, 111, 0, 1, 120, 99, 108, 0, 2, 105, 115, 116, 0, 2, 112,
    101, 99, 116, 97, 116, 105, 111, 110, 0, 0, 101, 120, 112, 111, 110, 101,
    110, 116, 105, 97, 108, 101, 0, 0, 102, 97, 108, 108, 105, 110, 103, 100,
    111, 116, 115, 101, 113, 0, 1, 99, 121, 0, 1, 101, 109, 97, 108, 101,
    0, 1, 102, 105, 108, 105, 103, 0, 2, 108, 105, 103, 0, 3, 108, 105,
    103, 0, 2, 114, 0, 0, 102, 105, 108, 105, 103, 0, 1, 106, 108, 105,
    103, 0, 1, 108, 97, 116, 0, 2, 108, 105, 103, 0, 2, 116, 110, 115,
    0, 1, 110, 111, 102, 0, 1, 111, 112, 102, 0, 2, 114, 97, 108, 108,
    0, 0, 102, 111, 114, 107, 0, 4, 118, 0, 1, 112, 97, 114, 116, 105,
    110, 116, 0, 1, 114, 97, 99, 49, 50, 0, 5, 51, 0, 5, 52, 0,
    5, 53, 0, 5, 54, 0, 0, 102, 114, 97, 99, 49, 56, 0, 4, 50,
    51, 0, 5, 53, 0, 4, 51, 52, 0, 5, 53, 0, 5, 56, 0, 4,
    52, 53, 0, 4, 53, 54, 0, 0, 102, 114, 97, 99, 53, 56, 0, 4,
    55, 56, 0, 3, 115, 108, 0, 2, 111, 119, 110, 0, 1, 115, 99, 114,
    0, 0, 103, 69, 0, 2, 108, 0, 1, 97, 99, 117, 116, 101, 0, 0,
    103, 97, 109, 109, 97, 0, 5, 100, 0, 2, 112, 0, 1, 98, 114, 101,
    118, 101, 0, 1, 99, 105, 114, 99, 0, 2, 121, 0, 1, 100, 111, 116,
    0, 1, 101, 0, 0, 103, 101, 108, 0, 2, 113, 0, 3, 113, 0, 3,
    115, 108, 97, 110, 116, 0, 2, 115, 0, 3, 99, 99, 0, 3, 100, 111,
    116, 0, 6, 111, 0, 0, 103, 101, 115, 100, 111, 116, 111, 108, 0, 3,
    108, 0, 4, 101, 115, 0, 1, 102, 114, 0, 1, 103, 0, 2, 103, 0,
    1, 105, 109, 101, 108, 0, 1, 106, 99, 121, 0, 0, 103, 108, 0, 2,
    69, 0, 2, 97, 0, 2, 106, 0, 1, 110, 69, 0, 2, 97, 112, 0,
    4, 112, 114, 111, 120, 0, 2, 101, 0, 0, 103, 110, 101, 113, 0, 4,
    113, 0, 2, 115, 105, 109, 0, 1, 111, 112, 102, 0, 1, 114, 97, 118,
    101, 0, 1, 115, 99, 114, 0, 2, 105, 109, 0, 4, 101, 0, 0, 103,
    115, 105, 109, 108, 0, 1, 116, 0, 2, 99, 99, 0, 3, 105, 114, 0,
    2, 100, 111, 116, 0, 2, 108, 80, 97, 114, 0, 2, 113, 117, 101, 115,
    116, 0, 2, 114, 97, 112, 112, 114, 111, 120, 0, 0, 103, 116, 114, 97,
    114, 114, 0, 3, 100, 111, 116, 0, 3, 101, 113, 108, 101, 115, 115, 0,
    5, 113, 108, 101, 115, 115, 0, 3, 108, 101, 115, 115, 0, 3, 115, 105,
    109, 0, 1, 118, 101, 114, 116, 110, 101, 113, 113, 0, 2, 110, 69, 0,
    0, 104, 65, 114, 114, 0, 1, 97, 105, 114, 115, 112, 0, 2, 108, 102,
    0, 2, 109, 105, 108, 116, 0, 2, 114, 100, 99, 121, 0, 3, 114, 0,
    4, 99, 105, 114, 0, 4, 119, 0, 0, 104, 98, 97, 114, 0, 1, 99,
    105, 114, 99, 0, 1, 101, 97, 114, 116, 115, 0, 6, 117, 105, 116, 0,
    2, 108, 108, 105, 112, 0, 2, 114, 99, 111, 110, 0, 1, 102, 114, 0,
    1, 107, 115, 101, 97, 114, 111, 119, 0, 0, 104, 107, 115, 119, 97, 114,
    111, 119, 0, 1, 111, 97, 114, 114, 0, 2, 109, 116, 104, 116, 0, 2,
    111, 107, 108, 101, 102, 116, 97, 114, 114, 111, 119, 0, 4, 114, 105, 103,
    104, 116, 97, 114, 114, 111, 119, 0, 2, 112, 102, 0, 2, 114, 98, 97,
    114, 0, 1, 115, 99, 114, 0, 0, 104, 115, 108, 97, 115, 104, 0, 2,
    116, 114, 111, 107, 0, 1, 121, 98, 117, 108, 108, 0, 2, 112, 104, 101,
    110, 0, 0, 105, 97, 99, 117, 116, 101, 0, 1, 99, 0, 2, 105, 114,
    99, 0, 2, 121, 0, 0, 105, 101, 99, 121, 0, 2, 120, 99, 108, 0,
    1, 102, 102, 0, 2, 114, 0, 1, 103, 114, 97, 118, 101, 0, 1, 105,
    0, 2, 105, 105, 110, 116, 0, 3, 110, 116, 0, 0, 105, 105, 110, 102,
    105, 110, 0, 2, 111, 116, 97, 0, 1, 106, 108, 105, 103, 0, 1, 109,
    97, 99, 114, 0, 3, 103, 101, 0, 4, 108, 105, 110, 101, 0, 4, 112,
    97, 114, 116, 0, 3, 116, 104, 0, 0, 105, 109, 111, 102, 0, 2, 112,
    101, 100, 0, 1, 110, 0, 2, 99, 97, 114, 101, 0, 2, 102, 105, 110,
    0, 5, 116, 105, 101, 0, 2, 111, 100, 111, 116, 0, 2, 116, 0, 0,
    105, 110, 116, 99, 97, 108, 0, 3, 101, 103, 101, 114, 115, 0, 4, 114,
    99, 97, 108, 0, 3, 108, 97, 114, 104, 107, 0, 3, 112, 114, 111, 100,
    0, 1, 111, 99, 121, 0, 2, 103, 111, 110, 0, 2, 112, 102, 0, 0,
    105, 111, 116, 97, 0, 1, 112, 114, 111, 100, 0, 1, 113, 117, 101, 115,
    116, 0, 1, 115, 99, 114, 0, 2, 105, 110, 0, 4, 69, 0, 4, 100,
    111, 116, 0, 4, 115, 0, 0, 105, 115, 105, 110, 115, 118, 0, 4, 118,
    0, 1, 116, 0, 2, 105, 108, 100, 101, 0, 1, 117, 107, 99, 121, 0,
    2, 109, 108, 0, 0, 106, 99, 105, 114, 99, 0, 2, 121, 0, 0, 106,
    102, 114, 0, 1, 109, 97, 116, 104, 0, 1, 111, 112, 102, 0, 1, 115,
    99, 114, 0, 2, 101, 114, 99, 121, 0, 1, 117, 107, 99, 121, 0, 0,
    107, 97, 112, 112, 97, 0, 5, 118, 0, 0, 107, 99, 101, 100, 105, 108,
    0, 2, 121, 0, 1, 102, 114, 0, 1, 103, 114, 101, 101, 110, 0, 1,
    104, 99, 121, 0, 1, 106, 99, 121, 0, 1, 111, 112, 102, 0, 1, 115,
    99, 114, 0, 0, 108, 65, 97, 114, 114, 0, 2, 114, 114, 0, 2, 116,
    97, 105, 108, 0, 1, 66, 97, 114, 114, 0, 1, 69, 0, 2, 103, 0,
    1, 72, 97, 114, 0, 1, 97, 99, 117, 116, 101, 0, 0, 108, 97, 101,
    109, 112, 116, 121, 118, 0, 2, 103, 114, 97, 110, 0, 2, 109, 98, 100,
    97, 0, 2, 110, 103, 0, 4, 100, 0, 4, 108, 101, 0, 2, 112, 0,
    2, 113, 117, 111, 0, 0, 108, 97, 114, 114, 0, 4, 98, 0, 5, 102,
    115, 0, 4, 102, 115, 0, 4, 104, 107, 0, 4, 108, 112, 0, 4, 112,
    108, 0, 4, 115, 105, 109, 0, 0, 108, 97, 114, 114, 116, 108, 0, 2,
    116, 0, 3, 97, 105, 108, 0, 3, 101, 0, 4, 115, 0, 1, 98, 97,
    114, 114, 0, 2, 98, 114, 107, 0, 2, 114, 97, 99, 101, 0, 0, 108,
    98, 114, 97, 99, 107, 0, 3, 107, 101, 0, 4, 115, 108, 100, 0, 6,
    117, 0, 1, 99, 97, 114, 111, 110, 0, 2, 101, 100, 105, 108, 0, 3,
    105, 108, 0, 2, 117, 98, 0, 0, 108, 99, 121, 0, 1, 100, 99, 97,
    0, 2, 113, 117, 111, 0, 5, 114, 0, 2, 114, 100, 104, 97, 114, 0,
    3, 117, 115, 104, 97, 114, 0, 2, 115, 104, 0, 1, 101, 0, 0, 108,
    101, 102, 116, 97, 114, 114, 111, 119, 0, 9, 116, 97, 105, 108, 0, 4,
    104, 97, 114, 112, 111, 111, 110, 100, 111, 119, 110, 0, 11, 117, 112, 0,
    4, 108, 101, 102, 116, 97, 114, 114, 111, 119, 115, 0, 4, 114, 105, 103,
    104, 116, 97, 114, 114, 111, 119, 0, 14, 115, 0, 9, 104, 97, 114, 112,
    111, 111, 110, 115, 0, 0, 108, 101, 102, 116, 114, 105, 103, 104, 116, 115,
    113, 117, 105, 103, 97, 114, 114, 111, 119, 0, 4, 116, 104, 114, 101, 101,
    116, 105, 109, 101, 115, 0, 2, 103, 0, 2, 113, 0, 3, 113, 0, 3,
    115, 108, 97, 110, 116, 0, 2, 115, 0, 3, 99, 99, 0, 0, 108, 101,
    115, 100, 111, 116, 0, 6, 111, 0, 7, 114, 0, 3, 103, 0, 4, 101,
    115, 0, 3, 115, 97, 112, 112, 114, 111, 120, 0, 4, 100, 111, 116, 0,
    4, 101, 113, 103, 116, 114, 0, 0, 108, 101, 115, 115, 101, 113, 113, 103,
    116, 114, 0, 4, 103, 116, 114, 0, 4, 115, 105, 109, 0, 1, 102, 105,
    115, 104, 116, 0, 2, 108, 111, 111, 114, 0, 2, 114, 0, 1, 103, 0,
    2, 69, 0, 0, 108, 104, 97, 114, 100, 0, 4, 117, 0, 5, 108, 0,
    2, 98, 108, 107, 0, 1, 106, 99, 121, 0, 1, 108, 0, 2, 97, 114,
    114, 0, 2, 99, 111, 114, 110, 101, 114, 0, 0, 108, 108, 104, 97, 114,
    100, 0, 2, 116, 114, 105, 0, 1, 109, 105, 100, 111, 116, 0, 2, 111,
    117, 115, 116, 0, 6, 97, 99, 104, 101, 0, 1, 110, 69, 0, 2, 97,
    112, 0, 4, 112, 114, 111, 120, 0, 0, 108, 110, 101, 0, 3, 113, 0,
    4, 113, 0, 2, 115, 105, 109, 0, 1, 111, 97, 110, 103, 0, 3, 114,
    114, 0, 2, 98, 114, 107, 0, 2, 110, 103, 108, 101, 102, 116, 97, 114,
    114, 111, 119, 0, 0, 108, 111, 110, 103, 108, 101, 102, 116, 114, 105, 103,
    104, 116, 97, 114, 114, 111, 119, 0, 4, 109, 97, 112, 115, 116, 111, 0,
    4, 114, 105, 103, 104, 116, 97, 114, 114, 111, 119, 0, 2, 111, 112, 97,
    114, 114, 111, 119, 108, 101, 102, 116, 0, 9, 114, 105, 103, 104, 116, 0,
    2, 112, 97, 114, 0, 3, 102, 0, 3, 108, 117, 115, 0, 0, 108, 111,
    116, 105, 109, 101, 115, 0, 2, 119, 97, 115, 116, 0, 3, 98, 97, 114,
    0, 2, 122, 0, 3, 101, 110, 103, 101, 0, 3, 102, 0, 1, 112, 97,
    114, 0, 4, 108, 116, 0, 0, 108, 114, 97, 114, 114, 0, 2, 99, 111,
    114, 110, 101, 114, 0, 2, 104, 97, 114, 0, 5, 100, 0, 2, 109, 0,
    2, 116, 114, 105, 0, 1, 115, 97, 113, 117, 111, 0, 2, 99, 114, 0,
    0, 108, 115, 104, 0, 2, 105, 109, 0, 4, 101, 0, 4, 103, 0, 2,
    113, 98, 0, 3, 117, 111, 0, 5, 114, 0, 2, 116, 114, 111, 107, 0,
    0, 108, 116, 0, 2, 99, 99, 0, 3, 105, 114, 0, 2, 100, 111, 116,
    0, 2, 104, 114, 101, 101, 0, 2, 105, 109, 101, 115, 0, 2, 108, 97,
    114, 114, 0, 2, 113, 117, 101, 115, 116, 0, 0, 108, 116, 114, 80, 97,
    114, 0, 3, 105, 0, 4, 101, 0, 4, 102, 0, 1, 117, 114, 100, 115,
    104, 97, 114, 0, 3, 117, 104, 97, 114, 0, 1, 118, 101, 114, 116, 110,
    101, 113, 113, 0, 2, 110, 69, 0, 0, 109, 68, 68, 111, 116, 0, 1,
    97, 99, 114, 0, 2, 108, 101, 0, 3, 116, 0, 4, 101, 115, 101, 0,
    2, 112, 0, 3, 115, 116, 111, 0, 6, 100, 111, 119, 110, 0, 0, 109,
    97, 112, 115, 116, 111, 108, 101, 102, 116, 0, 6, 117, 112, 0, 2, 114,
    107, 101, 114, 0, 1, 99, 111, 109, 109, 97, 0, 2, 121, 0, 1, 100,
    97, 115, 104, 0, 1, 101, 97, 115, 117, 114, 101, 100, 97, 110, 103, 108,
    101, 0, 1, 102, 114, 0, 0, 109, 104, 111, 0, 1, 105, 99, 114, 111,
    0, 2, 100, 0, 3, 97, 115, 116, 0, 3, 99, 105, 114, 0, 3, 100,
    111, 116, 0, 2, 110, 117, 115, 0, 5, 98, 0, 0, 109, 105, 110, 117,
    115, 100, 0, 6, 117, 0, 1, 108, 99, 112, 0, 2, 100, 114, 0, 1,
    110, 112, 108, 117, 115, 0, 1, 111, 100, 101, 108, 115, 0, 2, 112, 102,
    0, 1, 112, 0, 0, 109, 115, 99, 114, 0, 2, 116, 112, 111, 115, 0,
    1, 117, 0, 2, 108, 116, 105, 109, 97, 112, 0, 2, 109, 97, 112, 0,
    0, 110, 71, 103, 0, 2, 116, 0, 3, 118, 0, 0, 110, 76, 101, 102,
    116, 97, 114, 114, 111, 119, 0, 5, 114, 105, 103, 104, 116, 97, 114, 114,
    111, 119, 0, 2, 108, 0, 2, 116, 0, 3, 118, 0, 1, 82, 105, 103,
    104, 116, 97, 114, 114, 111, 119, 0, 1, 86, 68, 97, 115, 104, 0, 2,
    100, 97, 115, 104, 0, 0, 110, 97, 98, 108, 97, 0, 2, 99, 117, 116,
    101, 0, 2, 110, 103, 0, 2, 112, 0, 3, 69, 0, 3, 105, 100, 0,
    3, 111, 115, 0, 3, 112, 114, 111, 120, 0, 0, 110, 97, 116, 117, 114,
    0, 5, 97, 108, 0, 7, 115, 0, 1, 98, 115, 112, 0, 2, 117, 109,
    112, 0, 5, 101, 0, 1, 99, 97, 112, 0, 3, 114, 111, 110, 0, 0,
    110, 99, 101, 100, 105, 108, 0, 2, 111, 110, 103, 0, 5, 100, 111, 116,
    0, 2, 117, 112, 0, 2, 121, 0, 1, 100, 97, 115, 104, 0, 1, 101,
    0, 2, 65, 114, 114, 0, 0, 110, 101, 97, 114, 104, 107, 0, 4, 114,
    0, 5, 111, 119, 0, 2, 100, 111, 116, 0, 2, 113, 117, 105, 118, 0,
    2, 115, 101, 97, 114, 0, 3, 105, 109, 0, 2, 120, 105, 115, 116, 0,
    0, 110, 101, 120, 105, 115, 116, 115, 0, 1, 102, 114, 0, 1, 103, 69,
    0, 2, 101, 0, 3, 113, 0, 4, 113, 0, 4, 115, 108, 97, 110, 116,
    0, 3, 115, 0, 0, 110, 103, 115, 105, 109, 0, 2, 116, 0, 3, 114,
    0, 1, 104, 65, 114, 114, 0, 2, 97, 114, 114, 0, 2, 112, 97, 114,
    0, 1, 105, 0, 2, 115, 0, 0, 110, 105, 115, 100, 0, 2, 118, 0,
    1, 106, 99, 121, 0, 1, 108, 65, 114, 114, 0, 2, 69, 0, 2, 97,
    114, 114, 0, 2, 100, 114, 0, 2, 101, 0, 0, 110, 108, 101, 102, 116,
    97, 114, 114, 111, 119, 0, 5, 114, 105, 103, 104, 116, 97, 114, 114, 111,
    119, 0, 3, 113, 0, 4, 113, 0, 4, 115, 108, 97, 110, 116, 0, 3,
    115, 0, 4, 115, 0, 2, 115, 105, 109, 0, 0, 110, 108, 116, 0, 3,
    114, 105, 0, 5, 101, 0, 1, 109, 105, 100, 0, 1, 111, 112, 102, 0,
    2, 116, 0, 3, 105, 110, 0, 5, 69, 0, 0, 110, 111, 116, 105, 110,
    100, 111, 116, 0, 5, 118, 97, 0, 6, 98, 0, 6, 99, 0, 3, 110,
    105, 0, 5, 118, 97, 0, 6, 98, 0, 6, 99, 0, 0, 110, 112, 97,
    114, 0, 4, 97, 108, 108, 101, 108, 0, 4, 115, 108, 0, 4, 116, 0,
    2, 111, 108, 105, 110, 116, 0, 2, 114, 0, 3, 99, 117, 101, 0, 3,
    101, 0, 0, 110, 112, 114, 101, 99, 0, 5, 101, 113, 0, 1, 114, 65,
    114, 114, 0, 2, 97, 114, 114, 0, 5, 99, 0, 5, 119, 0, 2, 105,
    103, 104, 116, 97, 114, 114, 111, 119, 0, 2, 116, 114, 105, 0, 0, 110,
    114, 116, 114, 105, 101, 0, 1, 115, 99, 0, 3, 99, 117, 101, 0, 3,
    101, 0, 3, 114, 0, 2, 104, 111, 114, 116, 109, 105, 100, 0, 6, 112,
    97, 114, 97, 108, 108, 101, 108, 0, 2, 105, 109, 0, 0, 110, 115, 105,
    109, 101, 0, 5, 113, 0, 2, 109, 105, 100, 0, 2, 112, 97, 114, 0,
    2, 113, 115, 117, 98, 101, 0, 5, 112, 101, 0, 2, 117, 98, 0, 4,
    69, 0, 0, 110, 115, 117, 98, 101, 0, 4, 115, 101, 116, 0, 7, 101,
    113, 0, 9, 113, 0, 3, 99, 99, 0, 5, 101, 113, 0, 3, 112, 0,
    4, 69, 0, 0, 110, 115, 117, 112, 101, 0, 4, 115, 101, 116, 0, 7,
    101, 113, 0, 9, 113, 0, 1, 116, 103, 108, 0, 2, 105, 108, 100, 101,
    0, 2, 108, 103, 0, 2, 114, 105, 97, 110, 103, 108, 101, 108, 101, 102,
    116, 0, 0, 110, 116, 114, 105, 97, 110, 103, 108, 101, 108, 101, 102, 116,
    101, 113, 0, 9, 114, 105, 103, 104, 116, 0, 14, 101, 113, 0, 1, 117,
    0, 2, 109, 0, 3, 101, 114, 111, 0, 3, 115, 112, 0, 1, 118, 68,
    97, 115, 104, 0, 0, 110, 118, 72, 97, 114, 114, 0, 2, 97, 112, 0,
    2, 100, 97, 115, 104, 0, 2, 103, 101, 0, 3, 116, 0, 2, 105, 110,
    102, 105, 110, 0, 2, 108, 65, 114, 114, 0, 3, 101, 0, 0, 110, 118,
    108, 116, 0, 4, 114, 105, 101, 0, 2, 114, 65, 114, 114, 0, 3, 116,
    114, 105, 101, 0, 2, 115, 105, 109, 0, 1, 119, 65, 114, 114, 0, 2,
    97, 114, 104, 107, 0, 4, 114, 0, 0, 110, 119, 97, 114, 114, 111, 119,
    0, 2, 110, 101, 97, 114, 0, 0, 111, 83, 0, 1, 97, 99, 117, 116,
    101, 0, 2, 115, 116, 0, 1, 99, 105, 114, 0, 4, 99, 0, 2, 121,
    0, 0, 111, 100, 97, 115, 104, 0, 2, 98, 108, 97, 99, 0, 2, 105,
    118, 0, 2, 111, 116, 0, 2, 115, 111, 108, 100, 0, 1, 101, 108, 105,
    103, 0, 1, 102, 99, 105, 114, 0, 2, 114, 0, 0, 111, 103, 111, 110,
    0, 2, 114, 97, 118, 101, 0, 2, 116, 0, 1, 104, 98, 97, 114, 0,
    2, 109, 0, 1, 105, 110, 116, 0, 1, 108, 97, 114, 114, 0, 2, 99,
    105, 114, 0, 0, 111, 108, 99, 114, 111, 115, 115, 0, 2, 105, 110, 101,
    0, 2, 116, 0, 1, 109, 97, 99, 114, 0, 2, 101, 103, 97, 0, 2,
    105, 99, 114, 111, 110, 0, 3, 100, 0, 3, 110, 117, 115, 0, 0, 111,
    111, 112, 102, 0, 1, 112, 97, 114, 0, 2, 101, 114, 112, 0, 2, 108,
    117, 115, 0, 1, 114, 0, 2, 97, 114, 114, 0, 2, 100, 0, 3, 101,
    114, 0, 0, 111, 114, 100, 101, 114, 111, 102, 0, 3, 102, 0, 3, 109,
    0, 2, 105, 103, 111, 102, 0, 2, 111, 114, 0, 2, 115, 108, 111, 112,
    101, 0, 2, 118, 0, 1, 115, 99, 114, 0, 0, 111, 115, 108, 97, 115,
    104, 0, 2, 111, 108, 0, 1, 116, 105, 108, 100, 101, 0, 3, 109, 101,
    115, 0, 6, 97, 115, 0, 1, 117, 109, 108, 0, 1, 118, 98, 97, 114,
    0, 0, 112, 97, 114, 0, 0, 112, 97, 114, 97, 0, 4, 108, 108, 101,
    108, 0, 3, 115, 105, 109, 0, 4, 108, 0, 3, 116, 0, 1, 99, 121,
    0, 1, 101, 114, 99, 110, 116, 0, 3, 105, 111, 100, 0, 0, 112, 101,
    114, 109, 105, 108, 0, 3, 112, 0, 3, 116, 101, 110, 107, 0, 1, 102,
    114, 0, 1, 104, 105, 0, 3, 118, 0, 2, 109, 109, 97, 116, 0, 2,
    111, 110, 101, 0, 0, 112, 105, 0, 2, 116, 99, 104, 102, 111, 114, 107,
    0, 2, 118, 0, 1, 108, 97, 110, 99, 107, 0, 6, 104, 0, 4, 107,
    118, 0, 2, 117, 115, 0, 4, 97, 99, 105, 114, 0, 0, 112, 108, 117,
    115, 98, 0, 4, 99, 105, 114, 0, 4, 100, 111, 0, 5, 117, 0, 4,
    101, 0, 4, 109, 110, 0, 4, 115, 105, 109, 0, 4, 116, 119, 111, 0,
    0, 112, 109, 0, 1, 111, 105, 110, 116, 105, 110, 116, 0, 2, 112, 102,
    0, 2, 117, 110, 100, 0, 1, 114, 0, 2, 69, 0, 2, 97, 112, 0,
    2, 99, 117, 101, 0, 0, 112, 114, 101, 0, 3, 99, 0, 4, 97, 112,
    112, 114, 111, 120, 0, 4, 99, 117, 114, 108, 121, 101, 113, 0, 4, 101,
    113, 0, 4, 110, 97, 112, 112, 114, 111, 120, 0, 5, 101, 113, 113, 0,
    5, 115, 105, 109, 0, 0, 112, 114, 101, 99, 115, 105, 109, 0, 2, 105,
    109, 101, 0, 5, 115, 0, 2, 110, 69, 0, 3, 97, 112, 0, 3, 115,
    105, 109, 0, 2, 111, 100, 0, 3, 102, 97, 108, 97, 114, 0, 0, 112,
    114, 111, 102, 108, 105, 110, 101, 0, 4, 115, 117, 114, 102, 0, 3, 112,
    0, 4, 116, 111, 0, 2, 115, 105, 109, 0, 2, 117, 114, 101, 108, 0,
    1, 115, 99, 114, 0, 2, 105, 0, 0, 112, 117, 110, 99, 115, 112, 0,
    0, 113, 102, 114, 0, 1, 105, 110, 116, 0, 1, 111, 112, 102, 0, 1,
    112, 114, 105, 109, 101, 0, 1, 115, 99, 114, 0, 1, 117, 97, 116, 101,
    114, 110, 105, 111, 110, 115, 0, 4, 105, 110, 116, 0, 0, 113, 117, 101,
    115, 116, 0, 5, 101, 113, 0, 2, 111, 116, 0, 0, 114, 65, 97, 114,
    114, 0, 2, 114, 114, 0, 2, 116, 97, 105, 108, 0, 1, 66, 97, 114,
    114, 0, 1, 72, 97, 114, 0, 0, 114, 97, 99, 101, 0, 3, 117, 116,
    101, 0, 2, 100, 105, 99, 0, 2, 101, 109, 112, 116, 121, 118, 0, 2,
    110, 103, 0, 4, 100, 0, 4, 101, 0, 4, 108, 101, 0, 0, 114, 97,
    113, 117, 111, 0, 2, 114, 114, 0, 4, 97, 112, 0, 4, 98, 0, 5,
    102, 115, 0, 4, 99, 0, 4, 102, 115, 0, 4, 104, 107, 0, 0, 114,
    97, 114, 114, 108, 112, 0, 4, 112, 108, 0, 4, 115, 105, 109, 0, 4,
    116, 108, 0, 4, 119, 0, 2, 116, 97, 105, 108, 0, 3, 105, 111, 0,
    5, 110, 97, 108, 115, 0, 0, 114, 98, 97, 114, 114, 0, 2, 98, 114,
    107, 0, 2, 114, 97, 99, 101, 0, 5, 107, 0, 3, 107, 101, 0, 4,
    115, 108, 100, 0, 6, 117, 0, 1, 99, 97, 114, 111, 110, 0, 0, 114,
    99, 101, 100, 105, 108, 0, 3, 105, 108, 0, 2, 117, 98, 0, 2, 121,
    0, 1, 100, 99, 97, 0, 2, 108, 100, 104, 97, 114, 0, 2, 113, 117,
    111, 0, 5, 114, 0, 0, 114, 100, 115, 104, 0, 1, 101, 97, 108, 0,
    4, 105, 110, 101, 0, 4, 112, 97, 114, 116, 0, 4, 115, 0, 2, 99,
    116, 0, 2, 103, 0, 1, 102, 105, 115, 104, 116, 0, 0, 114, 102, 108,
    111, 111, 114, 0, 2, 114, 0, 1, 104, 97, 114, 100, 0, 4, 117, 0,
    5, 108, 0, 2, 111, 0, 3, 118, 0, 1, 105, 103, 104, 116, 97, 114,
    114, 111, 119, 0, 0, 114, 105, 103, 104, 116, 97, 114, 114, 111, 119, 116,
    97, 105, 108, 0, 5, 104, 97, 114, 112, 111, 111, 110, 100, 111, 119, 110,
    0, 12, 117, 112, 0, 5, 108, 101, 102, 116, 97, 114, 114, 111, 119, 115,
    0, 9, 104, 97, 114, 112, 111, 111, 110, 115, 0, 5, 114, 105, 103, 104,
    116, 97, 114, 114, 111, 119, 115, 0, 5, 115, 113, 117, 105, 103, 97, 114,
    114, 111, 119, 0, 5, 116, 104, 114, 101, 101, 116, 105, 109, 101, 115, 0,
    0, 114, 105, 110, 103, 0, 2, 115, 105, 110, 103, 100, 111, 116, 115, 101,
    113, 0, 1, 108, 97, 114, 114, 0, 2, 104, 97, 114, 0, 2, 109, 0,
    1, 109, 111, 117, 115, 116, 0, 6, 97, 99, 104, 101, 0, 1, 110, 109,
    105, 100, 0, 0, 114, 111, 97, 110, 103, 0, 3, 114, 114, 0, 2, 98,
    114, 107, 0, 2, 112, 97, 114, 0, 3, 102, 0, 3, 108, 117, 115, 0,
    2, 116, 105, 109, 101, 115, 0, 1, 112, 97, 114, 0, 0, 114, 112, 97,
    114, 103, 116, 0, 2, 112, 111, 108, 105, 110, 116, 0, 1, 114, 97, 114,
    114, 0, 1, 115, 97, 113, 117, 111, 0, 2, 99, 114, 0, 2, 104, 0,
    2, 113, 98, 0, 3, 117, 111, 0, 0, 114, 115, 113, 117, 111, 114, 0,
    1, 116, 104, 114, 101, 101, 0, 2, 105, 109, 101, 115, 0, 2, 114, 105,
    0, 4, 101, 0, 4, 102, 0, 4, 108, 116, 114, 105, 0, 1, 117, 108,
    117, 104, 97, 114, 0, 0, 114, 120, 0, 0, 115, 97, 99, 117, 116, 101,
    0, 1, 98, 113, 117, 111, 0, 1, 99, 0, 2, 69, 0, 2, 97, 112,
    0, 3, 114, 111, 110, 0, 2, 99, 117, 101, 0, 0, 115, 99, 101, 0,
    3, 100, 105, 108, 0, 2, 105, 114, 99, 0, 2, 110, 69, 0, 3, 97,
    112, 0, 3, 115, 105, 109, 0, 2, 112, 111, 108, 105, 110, 116, 0, 2,
    115, 105, 109, 0, 0, 115, 99, 121, 0, 1, 100, 111, 116, 0, 4, 98,
    0, 4, 101, 0, 1, 101, 65, 114, 114, 0, 2, 97, 114, 104, 107, 0,
    4, 114, 0, 5, 111, 119, 0, 0, 115, 101, 99, 116, 0, 2, 109, 105,
    0, 2, 115, 119, 97, 114, 0, 2, 116, 109, 105, 110, 117, 115, 0, 4,
    110, 0, 2, 120, 116, 0, 1, 102, 114, 0, 3, 111, 119, 110, 0, 0,
    115, 104, 97, 114, 112, 0, 2, 99, 104, 99, 121, 0, 3, 121, 0, 2,
    111, 114, 116, 109, 105, 100, 0, 5, 112, 97, 114, 97, 108, 108, 101, 108,
    0, 2, 121, 0, 1, 105, 103, 109, 97, 0, 5, 102, 0, 0, 115, 105,
    103, 109, 97, 118, 0, 2, 109, 0, 3, 100, 111, 116, 0, 3, 101, 0,
    4, 113, 0, 3, 103, 0, 4, 69, 0, 3, 108, 0, 0, 115, 105, 109,
    108, 69, 0, 3, 110, 101, 0, 3, 112, 108, 117, 115, 0, 3, 114, 97,
    114, 114, 0, 1, 108, 97, 114, 114, 0, 1, 109, 97, 108, 108, 115, 101,
    116, 109, 105, 110, 117, 115, 0, 3, 115, 104, 112, 0, 2, 101, 112, 97,
    114, 115, 108, 0, 0, 115, 109, 105, 100, 0, 3, 108, 101, 0, 2, 116,
    0, 3, 101, 0, 4, 115, 0, 1, 111, 102, 116, 99, 121, 0, 2, 108,
    0, 3, 98, 0, 0, 115, 111, 108, 98, 97, 114, 0, 2, 112, 102, 0,
    1, 112, 97, 100, 101, 115, 0, 6, 117, 105, 116, 0, 3, 114, 0, 1,
    113, 99, 97, 112, 0, 5, 115, 0, 3, 117, 112, 0, 0, 115, 113, 99,
    117, 112, 115, 0, 2, 115, 117, 98, 0, 5, 101, 0, 5, 115, 101, 116,
    0, 8, 101, 113, 0, 4, 112, 0, 5, 101, 0, 5, 115, 101, 116, 0,
    0, 115, 113, 115, 117, 112, 115, 101, 116, 101, 113, 0, 2, 117, 0, 3,
    97, 114, 101, 0, 5, 102, 0, 3, 102, 0, 1, 114, 97, 114, 114, 0,
    1, 115, 99, 114, 0, 2, 101, 116, 109, 110, 0, 0, 115, 115, 109, 105,
    108, 101, 0, 2, 116, 97, 114, 102, 0, 1, 116, 97, 114, 0, 4, 102,
    0, 2, 114, 97, 105, 103, 104, 116, 101, 112, 115, 105, 108, 111, 110, 0,
    8, 112, 104, 105, 0, 3, 110, 115, 0, 1, 117, 98, 0, 0, 115, 117,
    98, 69, 0, 3, 100, 111, 116, 0, 3, 101, 0, 4, 100, 111, 116, 0,
    3, 109, 117, 108, 116, 0, 3, 110, 69, 0, 4, 101, 0, 3, 112, 108,
    117, 115, 0, 0, 115, 117, 98, 114, 97, 114, 114, 0, 3, 115, 101, 116,
    0, 6, 101, 113, 0, 8, 113, 0, 6, 110, 101, 113, 0, 9, 113, 0,
    4, 105, 109, 0, 4, 117, 98, 0, 0, 115, 117, 98, 115, 117, 112, 0,
    2, 99, 99, 0, 4, 97, 112, 112, 114, 111, 120, 0, 4, 99, 117, 114,
    108, 121, 101, 113, 0, 4, 101, 113, 0, 4, 110, 97, 112, 112, 114, 111,
    120, 0, 5, 101, 113, 113, 0, 5, 115, 105, 109, 0, 0, 115, 117, 99,
    99, 115, 105, 109, 0, 2, 109, 0, 2, 110, 103, 0, 2, 112, 0, 3,
    49, 0, 3, 50, 0, 3, 51, 0, 3, 69, 0, 0, 115, 117, 112, 100,
    111, 116, 0, 4, 115, 117, 98, 0, 3, 101, 0, 4, 100, 111, 116, 0,
    3, 104, 115, 111, 108, 0, 5, 117, 98, 0, 3, 108, 97, 114, 114, 0,
    3, 109, 117, 108, 116, 0, 0, 115, 117, 112, 110, 69, 0, 4, 101, 0,
    3, 112, 108, 117, 115, 0, 3, 115, 101, 116, 0, 6, 101, 113, 0, 8,
    113, 0, 6, 110, 101, 113, 0, 9, 113, 0, 0, 115, 117, 112, 115, 105,
    109, 0, 4, 117, 98, 0, 5, 112, 0, 1, 119, 65, 114, 114, 0, 2,
    97, 114, 104, 107, 0, 4, 114, 0, 5, 111, 119, 0, 2, 110, 119, 97,
    114, 0, 0, 115, 122, 108, 105, 103, 0, 0, 116, 97, 114, 103, 101, 116,
    0, 2, 117, 0, 1, 98, 114, 107, 0, 1, 99, 97, 114, 111, 110, 0,
    2, 101, 100, 105, 108, 0, 2, 121, 0, 1, 100, 111, 116, 0, 0, 116,
    101, 108, 114, 101, 99, 0, 1, 102, 114, 0, 1, 104, 101, 114, 101, 52,
    0, 5, 102, 111, 114, 101, 0, 3, 116, 97, 0, 5, 115, 121, 109, 0,
    5, 118, 0, 2, 105, 99, 107, 97, 112, 112, 114, 111, 120, 0, 0, 116,
    104, 105, 99, 107, 115, 105, 109, 0, 3, 110, 115, 112, 0, 2, 107, 97,
    112, 0, 3, 115, 105, 109, 0, 2, 111, 114, 110, 0, 1, 105, 108, 100,
    101, 0, 2, 109, 101, 115, 0, 5, 98, 0, 0, 116, 105, 109, 101, 115,
    98, 97, 114, 0, 5, 100, 0, 2, 110, 116, 0, 1, 111, 101, 97, 0,
    2, 112, 0, 3, 98, 111, 116, 0, 3, 99, 105, 114, 0, 3, 102, 0,
    0, 116, 111, 112, 102, 111, 114, 107, 0, 2, 115, 97, 0, 1, 112, 114,
    105, 109, 101, 0, 1, 114, 97, 100, 101, 0, 2, 105, 97, 110, 103, 108,
    101, 0, 8, 100, 111, 119, 110, 0, 8, 108, 101, 102, 116, 0, 12, 101,
    113, 0, 0, 116, 114, 105, 97, 110, 103, 108, 101, 113, 0, 8, 114, 105,
    103, 104, 116, 0, 13, 101, 113, 0, 3, 100, 111, 116, 0, 3, 101, 0,
    3, 109, 105, 110, 117, 115, 0, 3, 112, 108, 117, 115, 0, 3, 115, 98,
    0, 0, 116, 114, 105, 116, 105, 109, 101, 0, 2, 112, 101, 122, 105, 117,
    109, 0, 1, 115, 99, 114, 0, 3, 121, 0, 2, 104, 99, 121, 0, 2,
    116, 114, 111, 107, 0, 1, 119, 105, 120, 116, 0, 2, 111, 104, 101, 97,
    100, 108, 101, 102, 116, 97, 114, 114, 111, 119, 0, 0, 116, 119, 111, 104,
    101, 97, 100, 114, 105, 103, 104, 116, 97, 114, 114, 111, 119, 0, 0, 117,
    65, 114, 114, 0, 1, 72, 97, 114, 0, 1, 97, 99, 117, 116, 101, 0,
    2, 114, 114, 0, 1, 98, 114, 99, 121, 0, 3, 101, 118, 101, 0, 1,
    99, 105, 114, 99, 0, 0, 117, 99, 121, 0, 1, 100, 97, 114, 114, 0,
    2, 98, 108, 97, 99, 0, 2, 104, 97, 114, 0, 1, 102, 105, 115, 104,
    116, 0, 2, 114, 0, 1, 103, 114, 97, 118, 101, 0, 1, 104, 97, 114,
    108, 0, 0, 117, 104, 97, 114, 114, 0, 2, 98, 108, 107, 0, 1, 108,
    99, 111, 114, 110, 0, 6, 101, 114, 0, 3, 114, 111, 112, 0, 2, 116,
    114, 105, 0, 1, 109, 97, 99, 114, 0, 2, 108, 0, 0, 117, 111, 103,
    111, 110, 0, 2, 112, 102, 0, 1, 112, 97, 114, 114, 111, 119, 0, 2,
    100, 111, 119, 110, 97, 114, 114, 111, 119, 0, 2, 104, 97, 114, 112, 111,
    111, 110, 108, 101, 102, 116, 0, 9, 114, 105, 103, 104, 116, 0, 2, 108,
    117, 115, 0, 2, 115, 105, 0, 0, 117, 112, 115, 105, 104, 0, 4, 108,
    111, 110, 0, 2, 117, 112, 97, 114, 114, 111, 119, 115, 0, 1, 114, 99,
    111, 114, 110, 0, 6, 101, 114, 0, 3, 114, 111, 112, 0, 2, 105, 110,
    103, 0, 2, 116, 114, 105, 0, 0, 117, 115, 99, 114, 0, 1, 116, 100,
    111, 116, 0, 2, 105, 108, 100, 101, 0, 2, 114, 105, 0, 4, 102, 0,
    1, 117, 97, 114, 114, 0, 2, 109, 108, 0, 1, 119, 97, 110, 103, 108,
    101, 0, 0, 118, 65, 114, 114, 0, 1, 66, 97, 114, 0, 4, 118, 0,
    1, 68, 97, 115, 104, 0, 1, 97, 110, 103, 114, 116, 0, 2, 114, 101,
    112, 115, 105, 108, 111, 110, 0, 3, 107, 97, 112, 112, 97, 0, 3, 110,
    111, 116, 104, 105, 110, 103, 0, 0, 118, 97, 114, 112, 104, 105, 0, 4,
    105, 0, 4, 114, 111, 112, 116, 111, 0, 3, 114, 0, 4, 104, 111, 0,
    3, 115, 105, 103, 109, 97, 0, 4, 117, 98, 115, 101, 116, 110, 101, 113,
    0, 12, 113, 0, 0, 118, 97, 114, 115, 117, 112, 115, 101, 116, 110, 101,
    113, 0, 12, 113, 0, 3, 116, 104, 101, 116, 97, 0, 4, 114, 105, 97,
    110, 103, 108, 101, 108, 101, 102, 116, 0, 11, 114, 105, 103, 104, 116, 0,
    1, 99, 121, 0, 1, 100, 97, 115, 104, 0, 1, 101, 101, 0, 0, 118,
    101, 101, 98, 97, 114, 0, 3, 101, 113, 0, 2, 108, 108, 105, 112, 0,
    2, 114, 98, 97, 114, 0, 3, 116, 0, 1, 102, 114, 0, 1, 108, 116,
    114, 105, 0, 1, 110, 115, 117, 98, 0, 0, 118, 110, 115, 117, 112, 0,
    1, 111, 112, 102, 0, 1, 112, 114, 111, 112, 0, 1, 114, 116, 114, 105,
    0, 1, 115, 99, 114, 0, 2, 117, 98, 110, 69, 0, 5, 101, 0, 3,
    112, 110, 69, 0, 0, 118, 115, 117, 112, 110, 101, 0, 1, 122, 105, 103,
    122, 97, 103, 0, 0, 119, 99, 105, 114, 99, 0, 1, 101, 100, 98, 97,
    114, 0, 3, 103, 101, 0, 5, 113, 0, 2, 105, 101, 114, 112, 0, 1,
    102, 114, 0, 0, 119, 111, 112, 102, 0, 1, 112, 0, 1, 114, 0, 2,
    101, 97, 116, 104, 0, 1, 115, 99, 114, 0, 0, 120, 99, 97, 112, 0,
    2, 105, 114, 99, 0, 2, 117, 112, 0, 0, 120, 100, 116, 114, 105, 0,
    1, 102, 114, 0, 1, 104, 65, 114, 114, 0, 2, 97, 114, 114, 0, 1,
    105, 0, 1, 108, 65, 114, 114, 0, 2, 97, 114, 114, 0, 1, 109, 97,
    112, 0, 0, 120, 110, 105, 115, 0, 1, 111, 100, 111, 116, 0, 2, 112,
    102, 0, 3, 108, 117, 115, 0, 2, 116, 105, 109, 101, 0, 1, 114, 65,
    114, 114, 0, 2, 97, 114, 114, 0, 1, 115, 99, 114, 0, 0, 120, 115,
    113, 99, 117, 112, 0, 1, 117, 112, 108, 117, 115, 0, 2, 116, 114, 105,
    0, 1, 118, 101, 101, 0, 1, 119, 101, 100, 103, 101, 0, 0, 121, 97,
    99, 117, 116, 101, 0, 3, 121, 0, 1, 99, 105, 114, 99, 0, 0, 121,
    99, 121, 0, 1, 101, 110, 0, 1, 102, 114, 0, 1, 105, 99, 121, 0,
    1, 111, 112, 102, 0, 1, 115, 99, 114, 0, 1, 117, 99, 121, 0, 2,
    109, 108, 0, 0, 122, 97, 99, 117, 116, 101, 0, 1, 99, 97, 114, 111,
    110, 0, 2, 121, 0, 1, 100, 111, 116, 0, 1, 101, 101, 116, 114, 102,
    0, 2, 116, 97, 0, 1, 102, 114, 0, 1, 104, 99, 121, 0, 0, 122,
    105, 103, 114, 97, 114, 114, 0, 1, 111, 112, 102, 0, 1, 115, 99, 114,
    0, 1, 119, 106, 0, 2, 110, 106, 0,
};
static const uint16_t table_groups[] = {
    0, 45, 97, 149, 198, 258, 314, 403, 483, 529, 580, 650, 737, 834, 921, 978,
    1021, 1093, 1152, 1222, 1262, 1319, 1376, 1443, 1492, 1539, 1600, 1641, 1684, 1730, 1796, 1873,
    1949, 2034, 2101, 2198, 2246, 2294, 2390, 2452, 2530, 2614, 2703, 2793, 2861, 2938, 2992, 3055,
    3110, 3164, 3230, 3275, 3316, 3381, 3463, 3526, 3604, 3666, 3708, 3784, 3848, 3904, 3952, 3990,
    4054, 4105, 4155, 4214, 4291, 4351, 4389, 4452, 4495, 4538, 4581, 4635, 4667, 4709, 4742, 4772,
    4813, 4848, 4893, 4948, 4991, 5033, 5080, 5146, 5200, 5239, 5270, 5299, 5330, 5362, 5397, 5435,
    5471, 5508, 5550, 5596, 5636, 5681, 5732, 5768, 5809, 5845, 5885, 5928, 5988, 6038, 6080, 6126,
    6167, 6215, 6268, 6336, 6376, 6429, 6464, 6499, 6537, 6574, 6625, 6670, 6713, 6773, 6817, 6854,
    6887, 6927, 6964, 6997, 7035, 7065, 7102, 7147, 7200, 7240, 7289, 7351, 7397, 7435, 7480, 7519,
    7567, 7606, 7646, 7689, 7731, 7772, 7813, 7847, 7886, 7927, 7966, 8037, 8093, 8135, 8179, 8218,
    8264, 8308, 8381, 8422, 8464, 8496, 8538, 8584, 8622, 8678, 8715, 8756, 8795, 8853, 8890, 8927,
    8966, 9008, 9044, 9079, 9114, 9162, 9194, 9228, 9266, 9310, 9356, 9394, 9427, 9474, 9524, 9565,
    9608, 9649, 9691, 9731, 9774, 9810, 9850, 9894, 9933, 9972, 10012, 10048, 10085, 10133, 10174, 10216,
    10268, 10311, 10349, 10382, 10422, 10462, 10501, 10540, 10580, 10672, 10723, 10764, 10808, 10853, 10891, 10932,
    10967, 11007, 11053, 11084, 11140, 11172, 11212, 11248, 11291, 11341, 11379, 11416, 11468, 11499, 11542, 11578,
    11618, 11662, 11710, 11754, 11792, 11842, 11889, 11947, 12005, 12050, 12092, 12151, 12199, 12242, 12295, 12340,
    12398, 12441, 12484, 12531, 12569, 12610, 12653, 12702, 12739, 12782,
};
static const uint16_t table_refs[] = {
    32768, 32771, 32773, 8, 32779, 14, 17, 32789, 24, 27, 30, 33, 36, 40, 32811, 46,
    50, 32821, 32824, 59, 62, 65, 68, 71, 74, 77, 80, 84, 88, 74, 91, 94,
    32865, 100, 103, 106, 109, 112, 32883, 118, 121, 124, 127, 130, 109, 133, 136, 139,
    142, 145, 148, 151, 154, 157, 160, 163, 166, 169, 172, 175, 178, 181, 184, 188,
    191, 106, 194, 197, 200, 203, 206, 209, 212, 215, 218, 221, 224, 227, 231, 234,
    237, 240, 242, 245, 248, 251, 255, 258, 261, 166, 255, 264, 267, 270, 212, 273,
    276, 279, 282, 285, 288, 291, 294, 297, 300, 303, 306, 309, 312, 315, 318, 321,
    324, 327, 330, 333, 264, 336, 340, 343, 33114, 33117, 352, 33123, 358, 361, 364, 33136,
    371, 374, 377, 380, 383, 386, 390, 393, 396, 399, 402, 405, 408, 33179, 414, 417,
    420, 423, 427, 430, 433, 437, 440, 440, 443, 33214, 448, 451, 454, 457, 460, 463,
    466, 469, 473, 476, 480, 483, 486, 489, 492, 495, 498, 501, 505, 508, 511, 514,
    516, 519, 522, 525, 528, 522, 531, 91, 534, 537, 540, 543, 33314, 33317, 552, 555,
    558, 33329, 558, 564, 567, 282, 570, 573, 576, 579, 582, 585, 588, 592, 595, 598,
    601, 33372, 607, 610, 613, 617, 621, 625, 628, 631, 634, 637, 640, 643, 646, 650,
    654, 658, 33429, 663, 666, 669, 672, 675, 678, 681, 684, 687, 690, 693, 696, 699,
    702, 705, 708, 711, 714, 717, 720, 723, 726, 729, 732, 735, 738, 741, 744, 747,
    750, 753, 756, 267, 270, 759, 762, 765, 768, 771, 774, 777, 781, 784, 787, 790,
    793, 796, 273, 276, 279, 799, 803, 806, 672, 809, 812, 815, 818, 821, 824, 827,
    830, 834, 837, 827, 841, 844, 847, 850, 853, 856, 859, 859, 859, 859, 505, 815,
    862, 864, 868, 871, 874, 877, 880, 883, 886, 889, 892, 895, 900, 903, 906, 909,
    914, 919, 922, 927, 930, 935, 940, 943, 948, 951, 954, 957, 960, 965, 970, 973,
    978, 983, 986, 991, 994, 997, 1000, 1005, 1008, 1013, 1016, 1021, 1024, 1029, 1032, 1035,
    1040, 1043, 1048, 1053, 1056, 1059, 1062, 1065, 1068, 1071, 33843, 1078, 1081, 33852, 33855, 1090,
    1093, 1096, 33868, 1103, 1106, 1109, 1112, 1116, 1119, 1122, 1125, 33897, 33900, 1135, 33906, 1141,
    1144, 1147, 1150, 1153, 1156, 1159, 1163, 1166, 1169, 519, 1172, 1175, 1178, 1181, 1184, 1187,
    1190, 1193, 157, 1196, 1199, 1203, 33974, 1208, 1212, 1215, 1219, 33990, 1225, 1228, 1231, 1234,
    1237, 1240, 1243, 1246, 1249, 1252, 1255, 1246, 1258, 1261, 1264, 1267, 1270, 1273, 1276, 1279,
    1282, 1285, 1288, 1291, 1294, 1297, 1300, 1303, 1306, 1309, 1312, 1315, 1318, 1321, 1324, 282,
    1327, 1330, 1333, 1336, 1339, 1342, 1345, 1348, 1351, 1354, 1357, 1360, 1363, 1366, 1369, 1372,
    297, 690, 1264, 1376, 1379, 1382, 1385, 1389, 1392, 1395, 1398, 1401, 1404, 1407, 1410, 1413,
    1417, 1420, 1420, 1423, 1426, 1429, 1432, 1435, 1249, 1438, 1441, 1444, 1447, 1441, 34218, 1453,
    1456, 1459, 1462, 1464, 1467, 1470, 1473, 1476, 1480, 1483, 1486, 1491, 1494, 1497, 1500, 1503,
    1506, 1510, 1513, 1517, 34288, 1523, 1526, 1529, 1532, 34303, 1538, 1541, 1544, 34316, 1551, 1554,
    1556, 1559, 1562, 1565, 1568, 1571, 1574, 1376, 1578, 1581, 1584, 1587, 1590, 1593, 288, 291,
    1596, 1599, 1602, 1605, 1608, 1611, 1615, 34386, 1621, 1624, 1627, 1630, 1633, 1636, 1639, 1639,
    1642, 1645, 1647, 1650, 1653, 1656, 1660, 1664, 1668, 1671, 1674, 1677, 1681, 1685, 1689, 1693,
    1696, 1700, 1704, 1707, 1710, 34481, 1716, 1719, 1722, 1726, 1730, 1734, 1737, 1740, 1743, 1746,
    1749, 859, 1752, 1755, 1758, 1761, 34533, 1768, 1771, 1774, 1779, 34550, 32999, 1785, 34556, 40,
    1791, 34563, 1798, 1798, 1801, 1804, 1807, 32771, 1810, 1813, 1816, 1819, 1822, 1825, 1828, 1825,
    1831, 1834, 1837, 1840, 1843, 1846, 1849, 1852, 1855, 1858, 1861, 1864, 1867, 43, 1870, 1873,
    1876, 1503, 1880, 1883, 1886, 1889, 1892, 1503, 1886, 34662, 1897, 1901, 1503, 191, 34671, 34674,
    178, 1909, 1912, 1915, 1918, 1921, 1924, 1927, 1930, 1933, 1933, 1559, 1936, 1915, 1939, 1942,
    71, 71, 1945, 1918, 74, 1948, 1951, 1954, 1957, 576, 1961, 1565, 1964, 1967, 1970, 1973,
    1976, 1979, 1982, 1985, 1636, 1674, 1988, 1991, 430, 1994, 1997, 2000, 2003, 2006, 2009, 2012,
    2015, 2018, 2021, 2025, 2030, 2033, 1590, 1590, 2037, 2040, 2043, 2046, 2049, 2052, 2055, 2058,
    2061, 2064, 2067, 2070, 2073, 2076, 2079, 2082, 2085, 2088, 2091, 2094, 2097, 2100, 2103, 2106,
    2109, 2112, 528, 2115, 2118, 2121, 2124, 2127, 2130, 2133, 2136, 2139, 2142, 2145, 2148, 2151,
    2154, 2157, 2160, 2163, 2166, 1921, 88, 34937, 2172, 2176, 1924, 1927, 2179, 2181, 2184, 2187,
    2187, 91, 2190, 534, 534, 2193, 2196, 2199, 2202, 2205, 2208, 2211, 2214, 2220, 511, 2223,
    2226, 34997, 2232, 2235, 2238, 2241, 32895, 2244, 35015, 130, 2250, 2254, 2257, 2257, 2260, 2263,
    2266, 2269, 2272, 2275, 2278, 1222, 2281, 2284, 2287, 2290, 2272, 2293, 2296, 2299, 2302, 2302,
    2305, 50, 50, 2307, 2309, 2311, 1382, 2311, 172, 1500, 2314, 169, 2317, 175, 32865, 2321,
    2324, 2327, 2330, 2334, 2337, 2340, 2343, 2346, 2349, 2352, 2355, 2358, 2361, 2364, 2367, 2370,
    2373, 2376, 2379, 2382, 2385, 2391, 2394, 2355, 2358, 2397, 2400, 35171, 2361, 2391, 2397, 2400,
    148, 2406, 2409, 264, 2412, 2415, 2418, 297, 2421, 723, 2424, 237, 2427, 2430, 248, 206,
    2433, 2436, 35207, 2442, 2445, 2448, 2451, 708, 1282, 245, 245, 2455, 2455, 255, 2458, 2461,
    2464, 35232, 2467, 2467, 2470, 2473, 2476, 2479, 2481, 234, 261, 2485, 2488, 2491, 2494, 65,
    297, 2433, 708, 1282, 1219, 2497, 2500, 2503, 2507, 2510, 2513, 2516, 2519, 1997, 303, 1255,
    2522, 2525, 2528, 2436, 2485, 35299, 2534, 2537, 2540, 35311, 2546, 2549, 2552, 417, 2555, 2558,
    2562, 35333, 2568, 2571, 2574, 2577, 2580, 2583, 2586, 2589, 2592, 2592, 2592, 2595, 2598, 2601,
    2604, 2607, 2610, 2613, 2617, 2620, 2623, 2626, 2626, 2629, 2540, 2546, 396, 2568, 2583, 2632,
    2634, 163, 2637, 2640, 2643, 2646, 2649, 261, 396, 2652, 35423, 35426, 2661, 2664, 414, 402,
    417, 2555, 2666, 2669, 2672, 2676, 2680, 2684, 2688, 2692, 2695, 2698, 2702, 2705, 2708, 437,
    2712, 2715, 2718, 35489, 2724, 35495, 2730, 2733, 2736, 2739, 2742, 35513, 2748, 2751, 2754, 2757,
    2760, 2763, 2766, 2769, 2772, 486, 2776, 2779, 2782, 2458, 2785, 2788, 2791, 2794, 2797, 480,
    483, 480, 486, 495, 495, 2800, 2803, 2806, 2809, 2812, 2818, 2821, 505, 473, 2825, 2828,
    492, 2831, 2834, 2837, 2840, 2843, 2843, 2846, 2846, 2840, 2849, 2852, 240, 2856, 498, 2859,
    2862, 33214, 2865, 2868, 2871, 2874, 2877, 2785, 2880, 2871, 483, 2776, 492, 498, 2883, 2883,
    270, 1653, 2721, 522, 2889, 717, 2892, 2895, 2898, 2901, 2904, 2904, 2907, 2910, 2913, 2917,
    2920, 2923, 2926, 2929, 2932, 2935, 2939, 2942, 2898, 2946, 2949, 2421, 35720, 579, 35723, 2958,
    2961, 35732, 270, 2967, 35739, 567, 2974, 2977, 2980, 2983, 2986, 2989, 558, 595, 558, 2992,
    2995, 2998, 371, 3001, 3004, 3007, 2992, 573, 3010, 1758, 3010, 3013, 3016, 3019, 3022, 3025,
    3029, 3016, 35800, 3035, 371, 3039, 3042, 3045, 3048, 371, 582, 3051, 3054, 35825, 3060, 3063,
    3066, 3070, 3073, 3077, 3081, 3084, 3087, 3090, 3093, 3096, 3099, 3103, 3106, 3109, 3112, 3116,
    784, 267, 3120, 3123, 762, 3126, 3129, 3132, 3135, 672, 3138, 687, 3141, 687, 3144, 35915,
    690, 693, 3150, 3153, 2929, 3156, 3159, 3162, 3165, 3168, 3171, 3174, 3177, 3183, 3186, 3189,
    3191, 3193, 3196, 3199, 3202, 3205, 699, 3189, 3208, 3211, 1116, 1942, 3214, 3217, 3220, 3223,
    690, 3165, 315, 753, 3226, 717, 696, 1252, 2895, 3229, 759, 3223, 762, 771, 771, 3232,
    3235, 3238, 3241, 3244, 3250, 3144, 3253, 759, 3126, 765, 774, 3256, 714, 3259, 765, 3263,
    315, 753, 3266, 3269, 3272, 815, 3226, 2473, 3275, 3278, 3281, 3284, 3284, 3287, 3290, 3290,
    3293, 3293, 3287, 3296, 3299, 3302, 702, 790, 793, 3305, 796, 3156, 3308, 3311, 3314, 3318,
    3321, 3324, 1554, 3327, 3327, 1991, 3330, 3332, 696, 2497, 1252, 3335, 3338, 3341, 3344, 3347,
    809, 774, 3351, 3354, 3191, 1119, 3357, 3360, 33429, 3363, 3366, 3253, 3229, 3369, 3372, 3375,
    3378, 3381, 738, 2000, 3384, 3387, 3390, 3390, 3396, 36167, 3402, 3405, 3405, 1294, 1294, 333,
    726, 1593, 3408, 3411, 3414, 3417, 1831, 3420, 3424, 36195, 1642, 1901, 3430, 32898, 3433, 2127,
    2488, 3436, 3439, 2907, 834, 3442, 3445, 834, 3449, 1771, 3453, 3456, 3456, 3459, 3464, 914,
    3469, 3472, 3475, 3480, 960, 3485, 3488, 3491, 221, 3494, 3497, 1065, 3502, 3507, 3512, 1065,
    3515, 3515, 874, 33639, 930, 935, 3518, 3521, 3524, 1062, 3527, 3532, 3535, 3538, 892, 3541,
    3544, 1599, 1599, 3547, 880, 3552, 895, 900, 900, 3555, 909, 906, 906, 909, 922, 922,
    927, 903, 903, 3472, 3559, 3562, 1249, 3565, 3568, 1249, 3571, 3469, 3574, 3579, 3582, 954,
    3579, 3559, 954, 3574, 965, 965, 951, 970, 951, 940, 948, 1068, 3585, 36357, 889, 3592,
    3597, 889, 3602, 3605, 994, 994, 3608, 3611, 886, 886, 3614, 3619, 3624, 983, 991, 986,
    983, 986, 3485, 3627, 3630, 3635, 3627, 997, 1005, 1032, 1040, 1035, 3640, 1068, 886, 1056,
    1059, 1059, 1068, 886, 1013, 1021, 3644, 3647, 1029, 1024, 1029, 3647, 1032, 1035, 3652, 3655,
    1053, 1048, 1053, 3655, 919, 36428, 957, 940, 948, 997, 1005, 3663, 3666, 3668, 3671, 3674,
    3677, 3680, 3685, 3688, 3693, 3697, 3700, 3703, 3708, 3712, 3717, 3720, 3725, 3730, 3733, 1596,
    1596, 3736, 2281, 36507, 2284, 2287, 36510, 3745, 2290, 3748, 3751, 136, 3754, 3757, 3760, 3763,
    3767, 36538, 3773, 3776, 1106, 169, 2275, 3779, 3782, 1141, 3785, 3788, 3791, 3794, 3797, 139,
    3800, 3804, 3807, 142, 3810, 2278, 3813, 3816, 3816, 36587, 36590, 3825, 3828, 3831, 3834, 3816,
    36605, 3840, 36611, 145, 3846, 36617, 3852, 294, 36623, 294, 3858, 3861, 1153, 3864, 3867, 3869,
    3871, 1590, 3874, 3877, 3881, 3884, 827, 3887, 3890, 2712, 3893, 2898, 3896, 2898, 3899, 3901,
    2130, 3904, 2491, 3907, 3910, 33937, 3913, 3916, 1169, 3919, 3922, 36694, 1178, 3929, 3932, 1184,
    1181, 1178, 3932, 1184, 1181, 3935, 3938, 3941, 1187, 3944, 1172, 3938, 3935, 3941, 1193, 3947,
    3950, 3953, 1196, 1196, 1187, 3956, 3959, 3963, 3966, 3969, 2974, 3973, 3977, 3980, 525, 3984,
    3987, 2634, 33974, 1333, 282, 3989, 2424, 3992, 3995, 4000, 1389, 4003, 1261, 4006, 4009, 1261,
    36780, 1264, 4015, 1267, 4018, 4021, 4024, 2932, 3308, 4027, 4030, 4033, 4036, 4039, 4042, 1212,
    1988, 4045, 4048, 4050, 4052, 4055, 4058, 4061, 4064, 1273, 4048, 4067, 4070, 4073, 151, 151,
    4076, 1246, 1336, 1246, 1327, 4079, 33990, 4082, 1288, 4085, 324, 1321, 4089, 4092, 4095, 1264,
    4033, 324, 1321, 1270, 399, 4098, 4036, 4101, 4104, 2643, 1270, 399, 4107, 4110, 4110, 4113,
    4116, 4119, 1276, 4122, 4125, 4129, 4132, 4135, 4137, 4140, 4098, 4143, 4146, 1339, 4050, 154,
    154, 4101, 4150, 4153, 1306, 2003, 4156, 4159, 4162, 4165, 3357, 1426, 4168, 4171, 4174, 1432,
    1429, 4177, 4180, 4183, 4186, 4189, 4192, 1435, 4195, 4198, 2494, 4201, 4204, 2917, 806, 806,
    36975, 4210, 4212, 59, 59, 4215, 4218, 2769, 4222, 4225, 4228, 1642, 294, 36999, 4234, 4237,
    4237, 1494, 4240, 1497, 1497, 4243, 4246, 4249, 4252, 4255, 4258, 4261, 690, 59, 4264, 4267,
    1642, 4270, 4273, 4276, 4279, 4285, 4288, 4290, 4293, 4296, 4300, 4300, 294, 1395, 4303, 1410,
    4309, 1398, 1401, 1398, 1401, 1404, 1407, 1404, 1407, 1392, 1392, 430, 430, 1264, 4315, 59,
    4270, 1417, 4319, 1976, 2629, 3884, 3399, 4322, 4325, 4328, 1423, 4331, 4334, 4337, 4340, 4343,
    4346, 4322, 1423, 4325, 4340, 4337, 4349, 4352, 4355, 1426, 4171, 1432, 1429, 4186, 4183, 4189,
    1435, 1438, 4358, 1444, 37129, 37132, 37135, 4370, 4373, 4376, 1447, 4379, 4382, 4385, 4388, 4391,
    4394, 4397, 4400, 1444, 1447, 4370, 4397, 4394, 4403, 4406, 4409, 4412, 2920, 803, 803, 4415,
    37186, 4421, 4424, 1147, 4427, 4430, 4433, 1510, 4436, 4439, 1480, 1480, 4443, 4446, 4446, 1503,
    1494, 1491, 1503, 1494, 37217, 242, 37220, 2133, 4455, 4458, 2977, 3552, 330, 4461, 4464, 4467,
    4471, 4212, 4474, 1453, 4477, 2519, 3381, 738, 4480, 4153, 1306, 4483, 4480, 4486, 4489, 4492,
    4495, 4498, 4501, 4505, 4508, 4511, 1954, 675, 1231, 288, 4514, 37285, 1376, 4520, 4523, 37294,
    4529, 1581, 4532, 1587, 4535, 4538, 37310, 747, 1315, 4545, 4548, 4548, 4551, 4554, 4557, 33023,
    4560, 4563, 1376, 1584, 747, 1315, 1568, 4567, 1602, 4567, 4570, 4573, 4573, 4576, 4579, 4582,
    4585, 4589, 4592, 4477, 1994, 4570, 37363, 4598, 291, 4601, 4604, 285, 4607, 2629, 3090, 2592,
    3884, 3893, 1196, 1584, 4095, 4237, 4610, 4616, 4622, 4628, 4446, 732, 1300, 4634, 1291, 3810,
    4637, 4640, 4643, 1645, 1645, 4646, 732, 1024, 1048, 4650, 1196, 1300, 4654, 4616, 4610, 4628,
    4622, 4658, 4661, 4664, 1810, 4667, 4670, 4673, 4677, 4670, 1650, 1650, 4681, 576, 1961, 1565,
    1979, 4685, 276, 793, 4689, 273, 790, 3305, 4692, 1964, 4695, 1967, 1970, 279, 796, 4699,
    1973, 1985, 1982, 1636, 1674, 37471, 4706, 4709, 4712, 37483, 4718, 4722, 4725, 4729, 4733, 37504,
    4739, 4742, 4745, 4748, 1755, 4751, 4754, 4758, 4761, 4764, 4768, 4772, 4775,
};
static const unsigned char table_values[] = {
    198, 1, 0, 38, 0, 193, 1, 0, 130, 2, 0, 194, 1, 0, 144, 8,
    0, 132, 170, 7, 0, 192, 1, 0, 145, 7, 0, 128, 2, 0, 211, 84,
    0, 132, 2, 0, 184, 170, 7, 0, 225, 64, 0, 197, 1, 0, 156, 169,
    7, 0, 212, 68, 0, 195, 1, 0, 196, 1, 0, 150, 68, 0, 231, 85,
    0, 134, 70, 0, 145, 8, 0, 181, 68, 0, 172, 66, 0, 146, 7, 0,
    133, 170, 7, 0, 185, 170, 7, 0, 216, 5, 0, 206, 68, 0, 167, 8,
    0, 169, 1, 0, 134, 2, 0, 210, 69, 0, 197, 66, 0, 173, 66, 0,
    140, 2, 0, 199, 1, 0, 136, 2, 0, 176, 68, 0, 138, 2, 0, 184,
    1, 0, 183, 1, 0, 167, 7, 0, 153, 69, 0, 150, 69, 0, 149, 69,
    0, 151, 69, 0, 178, 68, 0, 157, 64, 0, 153, 64, 0, 183, 68, 0,
    244, 84, 0, 225, 68, 0, 175, 68, 0, 174, 68, 0, 130, 66, 0, 144,
    68, 0, 179, 68, 0, 175, 84, 0, 158, 169, 7, 0, 211, 69, 0, 205,
    68, 0, 145, 82, 0, 130, 8, 0, 133, 8, 0, 143, 8, 0, 161, 64,
    0, 161, 67, 0, 228, 85, 0, 142, 2, 0, 148, 8, 0, 135, 68, 0,
    148, 7, 0, 135, 170, 7, 0, 180, 1, 0, 217, 5, 0, 221, 5, 0,
    96, 0, 220, 5, 0, 196, 69, 0, 198, 66, 0, 187, 170, 7, 0, 168,
    1, 0, 220, 65, 0, 208, 68, 0, 211, 67, 0, 208, 67, 0, 212, 67,
    0, 248, 79, 0, 250, 79, 0, 249, 79, 0, 210, 67, 0, 168, 69, 0,
    209, 67, 0, 213, 67, 0, 165, 68, 0, 147, 67, 0, 147, 82, 0, 245,
    67, 0, 145, 6, 0, 208, 82, 0, 222, 82, 0, 189, 67, 0, 214, 82,
    0, 223, 82, 0, 193, 67, 0, 215, 82, 0, 164, 69, 0, 167, 67, 0,
    159, 169, 7, 0, 144, 2, 0, 202, 2, 0, 208, 1, 0, 201, 1, 0,
    154, 2, 0, 202, 1, 0, 173, 8, 0, 150, 2, 0, 136, 170, 7, 0,
    200, 1, 0, 136, 68, 0, 146, 2, 0, 251, 75, 0, 171, 75, 0, 152,
    2, 0, 188, 170, 7, 0, 149, 7, 0, 245, 84, 0, 194, 68, 0, 204,
    67, 0, 176, 66, 0, 243, 84, 0, 151, 7, 0, 203, 1, 0, 131, 68,
    0, 199, 66, 0, 164, 8, 0, 137, 170, 7, 0, 252, 75, 0, 170, 75,
    0, 189, 170, 7, 0, 128, 68, 0, 177, 66, 0, 131, 8, 0, 62, 0,
    147, 7, 0, 220, 7, 0, 158, 2, 0, 162, 2, 0, 156, 2, 0, 147,
    8, 0, 160, 2, 0, 138, 170, 7, 0, 217, 69, 0, 190, 170, 7, 0,
    229, 68, 0, 219, 69, 0, 231, 68, 0, 162, 85, 0, 247, 68, 0, 254,
    84, 0, 243, 68, 0, 162, 169, 7, 0, 235, 68, 0, 170, 8, 0, 199,
    5, 0, 94, 0, 164, 2, 0, 140, 66, 0, 139, 66, 0, 141, 66, 0,
    128, 74, 0, 166, 2, 0, 207, 68, 0, 149, 8, 0, 178, 2, 0, 129,
    8, 0, 205, 1, 0, 206, 1, 0, 152, 8, 0, 176, 2, 0, 145, 66,
    0, 204, 1, 0, 170, 2, 0, 200, 66, 0, 172, 68, 0, 171, 68, 0,
    194, 69, 0, 227, 64, 0, 226, 64, 0, 174, 2, 0, 192, 170, 7, 0,
    153, 7, 0, 144, 66, 0, 168, 2, 0, 134, 8, 0, 207, 1, 0, 180,
    2, 0, 153, 8, 0, 141, 170, 7, 0, 193, 170, 7, 0, 165, 169, 7,
    0, 136, 8, 0, 132, 8, 0, 165, 8, 0, 140, 8, 0, 154, 7, 0,
    182, 2, 0, 154, 8, 0, 142, 170, 7, 0, 194, 170, 7, 0, 166, 169,
    7, 0, 137, 8, 0, 60, 0, 185, 2, 0, 155, 7, 0, 234, 79, 0,
    146, 66, 0, 158, 67, 0, 189, 2, 0, 187, 2, 0, 155, 8, 0, 232,
    79, 0, 144, 67, 0, 228, 67, 0, 198, 67, 0, 136, 70, 0, 230, 79,
    0, 225, 82, 0, 195, 67, 0, 217, 82, 0, 138, 70, 0, 148, 67, 0,
    206, 82, 0, 163, 69, 0, 164, 67, 0, 218, 82, 0, 178, 69, 0, 207,
    83, 0, 180, 69, 0, 209, 82, 0, 224, 82, 0, 191, 67, 0, 216, 82,
    0, 188, 67, 0, 210, 82, 0, 218, 69, 0, 230, 68, 0, 246, 68, 0,
    161, 85, 0, 253, 84, 0, 242, 68, 0, 143, 170, 7, 0, 216, 69, 0,
    218, 67, 0, 191, 2, 0, 245, 79, 0, 247, 79, 0, 246, 79, 0, 195,
    170, 7, 0, 153, 67, 0, 152, 67, 0, 176, 67, 0, 193, 2, 0, 234,
    68, 0, 133, 82, 0, 156, 8, 0, 223, 64, 0, 179, 66, 0, 144, 170,
    7, 0, 147, 68, 0, 196, 170, 7, 0, 156, 7, 0, 138, 8, 0, 195,
    2, 0, 199, 2, 0, 197, 2, 0, 157, 8, 0, 139, 64, 0, 10, 0,
    145, 170, 7, 0, 224, 64, 0, 160, 1, 0, 149, 66, 0, 236, 85, 0,
    226, 68, 0, 237, 68, 0, 166, 68, 0, 137, 68, 0, 224, 68, 0, 194,
    68, 184, 6, 0, 132, 68, 0, 239, 68, 0, 241, 68, 0, 231, 68, 184,
    6, 0, 235, 68, 184, 6, 0, 249, 68, 0, 254, 84, 184, 6, 0, 245,
    68, 0, 206, 68, 184, 6, 0, 207, 68, 184, 6, 0, 234, 69, 0, 207,
    83, 184, 6, 0, 236, 69, 0, 238, 68, 0, 240, 68, 0, 248, 68, 0,
    234, 68, 184, 6, 0, 253, 84, 184, 6, 0, 244, 68, 0, 162, 85, 184,
    6, 0, 161, 85, 184, 6, 0, 128, 69, 0, 175, 85, 184, 6, 0, 224,
    69, 0, 140, 68, 0, 235, 69, 0, 208, 83, 184, 6, 0, 237, 69, 0,
    143, 69, 184, 6, 0, 226, 69, 0, 144, 69, 184, 6, 0, 227, 69, 0,
    130, 69, 210, 65, 0, 136, 69, 0, 129, 69, 0, 176, 85, 184, 6, 0,
    225, 69, 0, 255, 68, 184, 6, 0, 131, 69, 210, 65, 0, 137, 69, 0,
    193, 68, 0, 196, 68, 0, 199, 68, 0, 201, 68, 0, 164, 68, 0, 169,
    169, 7, 0, 209, 1, 0, 157, 7, 0, 210, 2, 0, 211, 1, 0, 212,
    1, 0, 158, 8, 0, 208, 2, 0, 146, 170, 7, 0, 210, 1, 0, 204,
    2, 0, 169, 7, 0, 159, 7, 0, 198, 170, 7, 0, 156, 64, 0, 152,
    64, 0, 212, 84, 0, 170, 169, 7, 0, 216, 1, 0, 213, 1, 0, 183,
    84, 0, 214, 1, 0, 190, 64, 0, 222, 71, 0, 180, 71, 0, 220, 71,
    0, 130, 68, 0, 159, 8, 0, 147, 170, 7, 0, 166, 7, 0, 160, 7,
    0, 177, 1, 0, 153, 66, 0, 187, 85, 0, 250, 68, 0, 175, 85, 0,
    252, 68, 0, 254, 68, 0, 179, 64, 0, 143, 68, 0, 157, 68, 0, 171,
    169, 7, 0, 168, 7, 0, 34, 0, 148, 170, 7, 0, 154, 66, 0, 172,
    169, 7, 0, 144, 82, 0, 174, 1, 0, 212, 2, 0, 235, 79, 0, 160,
    67, 0, 150, 82, 0, 216, 2, 0, 214, 2, 0, 160, 8, 0, 156, 66,
    0, 139, 68, 0, 203, 67, 0, 239, 82, 0, 161, 7, 0, 233, 79, 0,
    146, 67, 0, 229, 67, 0, 196, 67, 0, 137, 70, 0, 231, 79, 0, 221,
    82, 0, 194, 67, 0, 213, 82, 0, 139, 70, 0, 162, 69, 0, 166, 67,
    0, 219, 82, 0, 179, 69, 0, 208, 83, 0, 181, 69, 0, 207, 82, 0,
    220, 82, 0, 190, 67, 0, 212, 82, 0, 192, 67, 0, 211, 82, 0, 157,
    66, 0, 240, 82, 0, 219, 67, 0, 155, 66, 0, 177, 67, 0, 244, 83,
    0, 169, 8, 0, 168, 8, 0, 172, 8, 0, 218, 2, 0, 188, 85, 0,
    224, 2, 0, 222, 2, 0, 220, 2, 0, 161, 8, 0, 150, 170, 7, 0,
    145, 67, 0, 163, 7, 0, 152, 68, 0, 202, 170, 7, 0, 154, 68, 0,
    161, 75, 0, 147, 69, 0, 143, 69, 0, 145, 69, 0, 144, 69, 0, 146,
    69, 0, 148, 69, 0, 174, 169, 7, 0, 198, 69, 0, 208, 69, 0, 134,
    69, 0, 251, 68, 0, 176, 85, 0, 253, 68, 0, 255, 68, 0, 145, 68,
    0, 209, 69, 0, 131, 69, 0, 135, 69, 0, 222, 1, 0, 162, 66, 0,
    139, 8, 0, 166, 8, 0, 9, 0, 164, 7, 0, 228, 2, 0, 226, 2,
    0, 162, 8, 0, 151, 170, 7, 0, 180, 68, 0, 152, 7, 0, 223, 64,
    138, 64, 0, 137, 64, 0, 188, 68, 0, 195, 68, 0, 197, 68, 0, 200,
    68, 0, 203, 170, 7, 0, 219, 65, 0, 175, 169, 7, 0, 230, 2, 0,
    218, 1, 0, 159, 67, 0, 201, 82, 0, 142, 8, 0, 236, 2, 0, 219,
    1, 0, 163, 8, 0, 240, 2, 0, 152, 170, 7, 0, 217, 1, 0, 234,
    2, 0, 95, 0, 223, 71, 0, 181, 71, 0, 221, 71, 0, 195, 69, 0,
    142, 69, 0, 242, 2, 0, 204, 170, 7, 0, 146, 82, 0, 197, 67, 0,
    149, 67, 0, 238, 82, 0, 165, 69, 0, 165, 67, 0, 150, 67, 0, 151,
    67, 0, 210, 7, 0, 165, 7, 0, 238, 2, 0, 176, 169, 7, 0, 232,
    2, 0, 220, 1, 0, 171, 69, 0, 235, 85, 0, 146, 8, 0, 169, 69,
    0, 230, 85, 0, 193, 69, 0, 150, 64, 0, 163, 68, 0, 124, 0, 216,
    78, 0, 192, 68, 0, 138, 64, 0, 153, 170, 7, 0, 205, 170, 7, 0,
    177, 169, 7, 0, 170, 69, 0, 244, 2, 0, 192, 69, 0, 154, 170, 7,
    0, 206, 170, 7, 0, 178, 169, 7, 0, 155, 170, 7, 0, 158, 7, 0,
    207, 170, 7, 0, 179, 169, 7, 0, 175, 8, 0, 135, 8, 0, 174, 8,
    0, 221, 1, 0, 246, 2, 0, 171, 8, 0, 156, 170, 7, 0, 208, 170,
    7, 0, 180, 169, 7, 0, 248, 2, 0, 150, 8, 0, 249, 2, 0, 253,
    2, 0, 151, 8, 0, 251, 2, 0, 150, 7, 0, 168, 66, 0, 164, 66,
    0, 181, 169, 7, 0, 225, 1, 0, 131, 2, 0, 190, 68, 0, 190, 68,
    179, 6, 0, 191, 68, 0, 226, 1, 0, 176, 8, 0, 230, 1, 0, 158,
    170, 7, 0, 224, 1, 0, 181, 66, 0, 177, 7, 0, 129, 2, 0, 191,
    84, 0, 167, 68, 0, 213, 84, 0, 220, 84, 0, 216, 84, 0, 218, 84,
    0, 160, 68, 0, 164, 83, 0, 161, 68, 0, 168, 83, 0, 169, 83, 0,
    170, 83, 0, 171, 83, 0, 172, 83, 0, 173, 83, 0, 174, 83, 0, 175,
    83, 0, 159, 68, 0, 190, 69, 0, 157, 83, 0, 162, 68, 0, 252, 70,
    0, 133, 2, 0, 210, 170, 7, 0, 240, 84, 0, 239, 84, 0, 202, 68,
    0, 203, 68, 0, 39, 0, 229, 1, 0, 182, 169, 7, 0, 42, 0, 227,
    1, 0, 228, 1, 0, 145, 84, 0, 237, 85, 0, 204, 68, 0, 246, 7,
    0, 181, 64, 0, 189, 68, 0, 205, 69, 0, 189, 69, 0, 133, 70, 0,
    182, 71, 0, 177, 8, 0, 158, 64, 0, 176, 83, 0, 178, 7, 0, 182,
    66, 0, 236, 68, 0, 159, 170, 7, 0, 239, 75, 0, 128, 84, 0, 129,
    84, 0, 130, 84, 0, 134, 84, 0, 133, 76, 0, 189, 75, 0, 179, 75,
    0, 132, 84, 0, 141, 82, 0, 235, 83, 0, 180, 75, 0, 190, 75, 0,
    194, 75, 0, 184, 75, 0, 163, 72, 0, 146, 75, 0, 145, 75, 0, 147,
    75, 0, 136, 75, 0, 61, 229, 65, 0, 225, 68, 229, 65, 0, 144, 70,
    0, 211, 170, 7, 0, 200, 69, 0, 215, 74, 0, 212, 74, 0, 214, 74,
    0, 211, 74, 0, 208, 74, 0, 230, 74, 0, 233, 74, 0, 228, 74, 0,
    231, 74, 0, 221, 74, 0, 218, 74, 0, 220, 74, 0, 217, 74, 0, 209,
    74, 0, 236, 74, 0, 227, 74, 0, 224, 74, 0, 235, 74, 0, 226, 74,
    0, 223, 74, 0, 201, 83, 0, 213, 74, 0, 210, 74, 0, 144, 74, 0,
    140, 74, 0, 229, 74, 0, 232, 74, 0, 172, 74, 0, 180, 74, 0, 159,
    69, 0, 158, 69, 0, 160, 69, 0, 219, 74, 0, 216, 74, 0, 152, 74,
    0, 148, 74, 0, 130, 74, 0, 234, 74, 0, 225, 74, 0, 222, 74, 0,
    188, 74, 0, 164, 74, 0, 156, 74, 0, 166, 1, 0, 183, 169, 7, 0,
    207, 64, 0, 92, 0, 197, 83, 0, 200, 79, 0, 162, 64, 0, 174, 85,
    0, 135, 2, 0, 169, 68, 0, 196, 84, 0, 201, 84, 0, 203, 84, 0,
    199, 84, 0, 192, 84, 0, 169, 68, 128, 252, 3, 0, 193, 64, 0, 205,
    84, 0, 141, 2, 0, 231, 1, 0, 137, 2, 0, 204, 84, 0, 208, 84,
    0, 139, 2, 0, 178, 83, 0, 162, 1, 0, 160, 170, 7, 0, 199, 8,
    0, 147, 78, 0, 199, 7, 0, 203, 75, 0, 195, 83, 0, 198, 5, 0,
    215, 68, 0, 186, 67, 0, 187, 67, 0, 200, 73, 0, 155, 69, 0, 154,
    69, 0, 157, 69, 0, 144, 84, 0, 239, 85, 0, 194, 83, 0, 227, 76,
    0, 58, 0, 44, 0, 64, 0, 129, 68, 0, 237, 84, 0, 212, 170, 7,
    0, 151, 66, 0, 181, 67, 0, 151, 78, 0, 184, 169, 7, 0, 207, 85,
    0, 209, 85, 0, 208, 85, 0, 210, 85, 0, 239, 69, 0, 184, 82, 0,
    181, 82, 0, 222, 69, 0, 223, 69, 0, 182, 67, 0, 189, 82, 0, 170,
    68, 0, 200, 84, 0, 198, 84, 0, 202, 84, 0, 141, 69, 0, 197, 84,
    0, 170, 68, 128, 252, 3, 0, 183, 67, 0, 188, 82, 0, 206, 69, 0,
    207, 69, 0, 164, 1, 0, 177, 68, 0, 173, 70, 0, 229, 82, 0, 160,
    64, 0, 184, 66, 0, 144, 64, 0, 143, 82, 0, 143, 2, 0, 180, 8,
    0, 202, 67, 0, 247, 84, 0, 176, 1, 0, 180, 7, 0, 177, 83, 0,
    255, 82, 0, 161, 170, 7, 0, 230, 76, 0, 221, 7, 0, 242, 69, 0,
    247, 1, 0, 199, 69, 0, 210, 8, 0, 158, 70, 0, 141, 70, 0, 36,
    0, 213, 170, 7, 0, 209, 68, 0, 184, 68, 0, 148, 68, 0, 161, 69,
    0, 159, 70, 0, 140, 70, 0, 185, 169, 7, 0, 213, 8, 0, 246, 83,
    0, 145, 2, 0, 241, 69, 0, 191, 75, 0, 166, 83, 0, 223, 8, 0,
    255, 79, 0, 233, 1, 0, 238, 84, 0, 155, 2, 0, 214, 68, 0, 234,
    1, 0, 213, 68, 0, 205, 8, 0, 151, 2, 0, 210, 68, 0, 162, 170,
    7, 0, 154, 85, 0, 232, 1, 0, 150, 85, 0, 152, 85, 0, 153, 85,
    0, 231, 71, 0, 147, 66, 0, 149, 85, 0, 151, 85, 0, 147, 2, 0,
    133, 68, 0, 131, 64, 0, 132, 64, 0, 133, 64, 0, 203, 2, 0, 130,
    64, 0, 153, 2, 0, 214, 170, 7, 0, 213, 69, 0, 227, 83, 0, 241,
    84, 0, 181, 7, 0, 245, 7, 0, 61, 0, 223, 68, 0, 248, 84, 0,
    229, 83, 0, 211, 68, 0, 241, 82, 0, 175, 66, 0, 183, 7, 0, 240,
    1, 0, 235, 1, 0, 172, 65, 0, 33, 0, 196, 8, 0, 192, 76, 0,
    131, 246, 3, 0, 128, 246, 3, 0, 132, 246, 3, 0, 163, 170, 7, 0,
    129, 246, 3, 0, 102, 106, 0, 237, 76, 0, 130, 246, 3, 0, 177, 75,
    0, 146, 3, 0, 215, 170, 7, 0, 212, 69, 0, 217, 85, 0, 141, 84,
    0, 189, 1, 0, 211, 66, 0, 188, 1, 0, 213, 66, 0, 217, 66, 0,
    219, 66, 0, 212, 66, 0, 214, 66, 0, 190, 1, 0, 215, 66, 0, 220,
    66, 0, 216, 66, 0, 218, 66, 0, 221, 66, 0, 222, 66, 0, 196, 64,
    0, 162, 70, 0, 187, 169, 7, 0, 140, 85, 0, 245, 3, 0, 179, 7,
    0, 134, 85, 0, 159, 2, 0, 157, 2, 0, 179, 8, 0, 161, 2, 0,
    169, 85, 0, 128, 85, 0, 130, 85, 0, 132, 85, 0, 219, 69, 128, 252,
    3, 0, 148, 85, 0, 164, 170, 7, 0, 183, 66, 0, 211, 8, 0, 146,
    85, 0, 165, 85, 0, 164, 85, 0, 233, 68, 0, 138, 85, 0, 136, 85,
    0, 231, 69, 0, 216, 170, 7, 0, 138, 66, 0, 142, 85, 0, 144, 85,
    0, 167, 85, 0, 250, 84, 0, 215, 69, 0, 149, 83, 0, 252, 84, 0,
    248, 82, 0, 233, 68, 128, 252, 3, 0, 202, 8, 0, 200, 82, 0, 173,
    67, 0, 143, 66, 0, 165, 2, 0, 229, 76, 0, 166, 64, 0, 185, 69,
    0, 165, 170, 7, 0, 165, 82, 0, 166, 82, 0, 255, 67, 0, 187, 68,
    0, 169, 67, 0, 170, 67, 0, 217, 170, 7, 0, 149, 64, 0, 189, 169,
    7, 0, 167, 2, 0, 195, 64, 0, 237, 1, 0, 238, 1, 0, 184, 8,
    0, 181, 8, 0, 161, 1, 0, 166, 170, 7, 0, 236, 1, 0, 140, 84,
    0, 173, 68, 0, 220, 83, 0, 169, 66, 0, 179, 2, 0, 171, 2, 0,
    177, 2, 0, 183, 69, 0, 181, 3, 0, 133, 66, 0, 158, 68, 0, 221,
    83, 0, 186, 69, 0, 151, 84, 0, 188, 84, 0, 209, 8, 0, 175, 2,
    0, 218, 170, 7, 0, 185, 7, 0, 191, 1, 0, 190, 169, 7, 0, 249,
    69, 0, 245, 69, 0, 244, 69, 0, 243, 69, 0, 169, 2, 0, 214, 8,
    0, 239, 1, 0, 181, 2, 0, 185, 8, 0, 167, 170, 7, 0, 183, 4,
    0, 219, 170, 7, 0, 191, 169, 7, 0, 216, 8, 0, 212, 8, 0, 186,
    7, 0, 240, 7, 0, 183, 2, 0, 186, 8, 0, 168, 170, 7, 0, 184,
    2, 0, 197, 8, 0, 220, 8, 0, 220, 170, 7, 0, 192, 169, 7, 0,
    155, 82, 0, 142, 82, 0, 139, 85, 0, 226, 82, 0, 186, 2, 0, 180,
    83, 0, 187, 7, 0, 145, 83, 0, 133, 85, 0, 171, 1, 0, 159, 82,
    0, 157, 82, 0, 171, 67, 0, 185, 82, 0, 243, 82, 0, 162, 67, 0,
    171, 85, 0, 153, 82, 0, 173, 85, 0, 173, 85, 128, 252, 3, 0, 140,
    82, 0, 242, 78, 0, 123, 0, 91, 0, 139, 83, 0, 143, 83, 0, 141,
    83, 0, 190, 2, 0, 188, 2, 0, 187, 8, 0, 182, 82, 0, 231, 82,
    0, 203, 82, 0, 178, 67, 0, 228, 68, 0, 199, 67, 0, 203, 69, 0,
    168, 85, 0, 255, 84, 0, 129, 85, 0, 131, 85, 0, 218, 69, 128, 252,
    3, 0, 147, 85, 0, 214, 69, 0, 252, 82, 0, 169, 170, 7, 0, 145,
    85, 0, 234, 82, 0, 132, 75, 0, 217, 8, 0, 235, 82, 0, 250, 75,
    0, 192, 2, 0, 176, 71, 0, 232, 68, 0, 137, 85, 0, 135, 85, 0,
    230, 69, 0, 236, 79, 0, 253, 67, 0, 252, 79, 0, 172, 67, 0, 133,
    83, 0, 221, 170, 7, 0, 173, 84, 0, 180, 84, 0, 151, 68, 0, 202,
    75, 0, 40, 0, 147, 83, 0, 237, 82, 0, 142, 64, 0, 191, 69, 0,
    185, 64, 0, 193, 169, 7, 0, 141, 85, 0, 143, 85, 0, 154, 64, 0,
    194, 2, 0, 166, 85, 0, 249, 84, 0, 201, 69, 0, 246, 82, 0, 251,
    84, 0, 150, 83, 0, 195, 75, 0, 202, 82, 0, 230, 82, 0, 232, 68,
    128, 252, 3, 0, 186, 68, 0, 175, 1, 0, 194, 76, 0, 160, 78, 0,
    174, 75, 0, 169, 84, 0, 188, 8, 0, 148, 64, 0, 170, 170, 7, 0,
    167, 66, 0, 181, 1, 0, 240, 85, 0, 146, 68, 0, 170, 84, 0, 219,
    85, 0, 167, 69, 0, 222, 170, 7, 0, 194, 169, 7, 0, 188, 7, 0,
    184, 69, 0, 217, 69, 184, 6, 0, 235, 68, 210, 65, 0, 205, 67, 0,
    206, 67, 0, 216, 69, 184, 6, 0, 234, 68, 210, 65, 0, 207, 67, 0,
    175, 69, 0, 174, 69, 0, 196, 2, 0, 160, 68, 210, 65, 0, 240, 84,
    184, 6, 0, 203, 68, 184, 6, 0, 201, 2, 0, 238, 76, 0, 195, 84,
    0, 200, 2, 0, 198, 2, 0, 237, 84, 184, 6, 0, 194, 84, 0, 189,
    8, 0, 147, 64, 0, 215, 67, 0, 164, 82, 0, 208, 68, 184, 6, 0,
    168, 82, 0, 171, 170, 7, 0, 174, 67, 0, 242, 85, 0, 252, 69, 0,
    250, 69, 0, 218, 8, 0, 230, 68, 184, 6, 0, 154, 67, 0, 165, 64,
    0, 223, 170, 7, 0, 172, 1, 0, 249, 69, 184, 6, 0, 245, 69, 184,
    6, 0, 247, 69, 0, 246, 69, 0, 254, 69, 0, 253, 69, 0, 253, 85,
    229, 65, 0, 130, 68, 184, 6, 0, 148, 84, 0, 155, 67, 0, 179, 82,
    184, 6, 0, 157, 67, 184, 6, 0, 195, 169, 7, 0, 132, 69, 0, 197,
    85, 184, 6, 0, 133, 69, 0, 198, 85, 184, 6, 0, 241, 1, 0, 189,
    7, 0, 35, 0, 150, 66, 0, 135, 64, 0, 173, 69, 0, 132, 82, 0,
    205, 68, 210, 65, 0, 172, 69, 0, 229, 68, 210, 65, 0, 62, 210, 65,
    0, 222, 83, 0, 130, 82, 0, 228, 68, 210, 65, 0, 60, 210, 65, 0,
    180, 69, 210, 65, 0, 131, 82, 0, 181, 69, 210, 65, 0, 188, 68, 210,
    65, 0, 214, 67, 0, 163, 82, 0, 167, 82, 0, 243, 1, 0, 244, 1,
    0, 190, 8, 0, 209, 2, 0, 184, 84, 0, 188, 83, 0, 211, 2, 0,
    191, 83, 0, 172, 170, 7, 0, 219, 5, 0, 242, 1, 0, 193, 83, 0,
    181, 83, 0, 190, 83, 0, 187, 83, 0, 192, 83, 0, 205, 2, 0, 201,
    7, 0, 191, 7, 0, 182, 83, 0, 224, 170, 7, 0, 183, 83, 0, 185,
    83, 0, 168, 68, 0, 221, 84, 0, 180, 66, 0, 170, 1, 0, 186, 1,
    0, 182, 69, 0, 214, 84, 0, 215, 84, 0, 219, 84, 0, 248, 1, 0,
    152, 69, 0, 245, 1, 0, 182, 84, 0, 246, 1, 0, 189, 70, 0, 182,
    1, 0, 243, 85, 0, 253, 85, 0, 191, 8, 0, 37, 0, 46, 0, 176,
    64, 0, 177, 64, 0, 173, 170, 7, 0, 198, 7, 0, 213, 7, 0, 142,
    76, 0, 192, 7, 0, 214, 7, 0, 142, 66, 0, 43, 0, 163, 84, 0,
    162, 84, 0, 165, 84, 0, 242, 84, 0, 166, 84, 0, 167, 84, 0, 149,
    84, 0, 225, 170, 7, 0, 163, 1, 0, 179, 85, 0, 183, 85, 0, 185,
    85, 0, 181, 85, 0, 232, 69, 0, 178, 64, 0, 174, 70, 0, 146, 70,
    0, 147, 70, 0, 176, 69, 0, 197, 169, 7, 0, 200, 7, 0, 136, 64,
    0, 174, 170, 7, 0, 226, 170, 7, 0, 215, 64, 0, 198, 169, 7, 0,
    150, 84, 0, 63, 0, 156, 82, 0, 228, 82, 0, 189, 68, 177, 6, 0,
    213, 2, 0, 179, 83, 0, 146, 83, 0, 165, 83, 0, 187, 1, 0, 245,
    82, 0, 160, 82, 0, 179, 82, 0, 158, 82, 0, 197, 82, 0, 244, 82,
    0, 163, 67, 0, 157, 67, 0, 154, 82, 0, 182, 68, 0, 243, 78, 0,
    125, 0, 93, 0, 140, 83, 0, 142, 83, 0, 144, 83, 0, 217, 2, 0,
    215, 2, 0, 192, 8, 0, 183, 82, 0, 233, 82, 0, 179, 67, 0, 173,
    75, 0, 253, 82, 0, 175, 170, 7, 0, 236, 82, 0, 193, 7, 0, 241,
    7, 0, 201, 67, 0, 204, 69, 0, 218, 5, 0, 143, 64, 0, 177, 71,
    0, 238, 85, 0, 237, 79, 0, 254, 67, 0, 134, 83, 0, 227, 170, 7,
    0, 174, 84, 0, 181, 84, 0, 41, 0, 148, 83, 0, 146, 84, 0, 186,
    64, 0, 199, 169, 7, 0, 202, 69, 0, 185, 75, 0, 206, 83, 0, 232,
    82, 0, 158, 66, 0, 219, 2, 0, 180, 85, 0, 184, 85, 0, 225, 2,
    0, 223, 2, 0, 221, 2, 0, 182, 85, 0, 186, 85, 0, 233, 69, 0,
    147, 84, 0, 193, 8, 0, 197, 69, 0, 230, 84, 0, 216, 67, 0, 167,
    1, 0, 59, 0, 169, 82, 0, 182, 78, 0, 176, 170, 7, 0, 239, 76,
    0, 201, 8, 0, 200, 8, 0, 173, 1, 0, 195, 7, 0, 194, 7, 0,
    234, 84, 0, 158, 85, 0, 160, 85, 0, 157, 85, 0, 159, 85, 0, 198,
    68, 0, 164, 84, 0, 242, 82, 0, 179, 84, 0, 228, 83, 0, 163, 70,
    0, 170, 85, 0, 172, 85, 0, 172, 85, 128, 252, 3, 0, 204, 8, 0,
    47, 0, 196, 83, 0, 191, 70, 0, 228, 170, 7, 0, 224, 76, 0, 147,
    69, 128, 252, 3, 0, 148, 69, 128, 252, 3, 0, 200, 169, 7, 0, 134,
    76, 0, 130, 69, 0, 197, 85, 0, 189, 85, 0, 195, 85, 0, 193, 85,
    0, 203, 85, 0, 138, 69, 0, 191, 85, 0, 249, 82, 0, 199, 85, 0,
    213, 85, 0, 211, 85, 0, 234, 76, 0, 185, 1, 0, 178, 1, 0, 179,
    1, 0, 198, 85, 0, 190, 85, 0, 216, 85, 0, 196, 85, 0, 201, 79,
    0, 215, 85, 0, 251, 82, 0, 194, 85, 0, 204, 85, 0, 139, 69, 0,
    192, 85, 0, 200, 85, 0, 212, 85, 0, 214, 85, 0, 217, 67, 0, 170,
    82, 0, 223, 1, 0, 150, 70, 0, 196, 7, 0, 229, 2, 0, 227, 2,
    0, 194, 8, 0, 149, 70, 0, 177, 170, 7, 0, 184, 7, 0, 209, 7,
    0, 254, 1, 0, 215, 1, 0, 177, 84, 0, 176, 84, 0, 182, 70, 0,
    241, 85, 0, 229, 170, 7, 0, 218, 85, 0, 180, 64, 0, 181, 75, 0,
    220, 68, 0, 236, 75, 0, 186, 84, 0, 185, 84, 0, 205, 83, 0, 187,
    84, 0, 226, 71, 0, 201, 169, 7, 0, 198, 8, 0, 219, 8, 0, 231,
    2, 0, 227, 82, 0, 250, 1, 0, 222, 8, 0, 237, 2, 0, 251, 1,
    0, 195, 8, 0, 241, 2, 0, 254, 82, 0, 178, 170, 7, 0, 249, 1,
    0, 128, 75, 0, 156, 70, 0, 143, 70, 0, 248, 75, 0, 235, 2, 0,
    243, 2, 0, 230, 170, 7, 0, 197, 7, 0, 200, 67, 0, 157, 70, 0,
    142, 70, 0, 239, 2, 0, 249, 75, 0, 202, 169, 7, 0, 240, 69, 0,
    233, 2, 0, 252, 1, 0, 167, 83, 0, 232, 85, 0, 233, 85, 0, 156,
    83, 0, 138, 69, 128, 252, 3, 0, 203, 85, 128, 252, 3, 0, 139, 69,
    128, 252, 3, 0, 204, 85, 128, 252, 3, 0, 178, 8, 0, 187, 69, 0,
    218, 68, 0, 238, 69, 0, 179, 170, 7, 0, 231, 170, 7, 0, 203, 169,
    7, 0, 154, 83, 0, 245, 2, 0, 223, 84, 0, 217, 68, 0, 152, 66,
    0, 180, 170, 7, 0, 232, 170, 7, 0, 204, 169, 7, 0, 181, 170, 7,
    0, 190, 7, 0, 251, 69, 0, 233, 170, 7, 0, 205, 169, 7, 0, 253,
    1, 0, 207, 8, 0, 247, 2, 0, 203, 8, 0, 165, 1, 0, 182, 170,
    7, 0, 215, 8, 0, 234, 170, 7, 0, 206, 169, 7, 0, 206, 8, 0,
    255, 1, 0, 250, 2, 0, 254, 2, 0, 183, 8, 0, 252, 2, 0, 182,
    7, 0, 183, 170, 7, 0, 182, 8, 0, 221, 67, 0, 235, 170, 7, 0,
    207, 169, 7, 0, 141, 64, 0, 140, 64, 0,
};
static constexpr uint32_t ENTITY_COUNT = 2125;

static uint32_t digit(const unsigned char* text, uint32_t len, uint32_t i, bool hex);

/* text[at] is '&' and text[at+1] is '#'. Returns the index after what was consumed. */
static uint32_t numeric_ref(const unsigned char* text, uint32_t len, uint32_t at) {
    uint32_t i = at + 2;
    bool hex = false;
    if (i < len && (text[i] == 'x' || text[i] == 'X')) {
        hex = true;
        i += 1;
    }
    uint32_t first = digit(text, len, i, hex);
    if (first == 0xFFFFFFFFu) {
        emit_byte('&');
        return at + 1;
    }
    uint32_t value = first;
    uint32_t mult = hex ? 16 : 10;
    i += 1;
    while (i < len) {
        uint32_t d = digit(text, len, i, hex);
        if (d == 0xFFFFFFFFu) break;
        /* Saturate: anything past U+10FFFF becomes U+FFFD the same way. */
        value = value * mult + d;
        if (value > 0x110000u) value = 0x110000u;
        i += 1;
    }
    if (i < len && text[i] == ';') i += 1;
    uint32_t v = value;
    if (v >= 0x80 && v <= 0x9F && c1[v - 0x80] != 0) v = c1[v - 0x80];
    if (v == 0 || (v >= 0xD800 && v <= 0xDFFF) || v > 0x10FFFF) v = 0xFFFD;
    emit_code_point(v);
    return i;
}

static uint32_t digit(const unsigned char* text, uint32_t len, uint32_t i, bool hex) {
    if (i >= len) return 0xFFFFFFFFu;
    uint8_t c = text[i];
    if (c >= '0' && c <= '9') return c - '0';
    if (hex && c >= 'a' && c <= 'f') return c - 'a' + 10;
    if (hex && c >= 'A' && c <= 'F') return c - 'A' + 10;
    return 0xFFFFFFFFu;
}

/* Binary search over the sorted records; returns the record index when the
 * name matches exactly. Record names are front-coded in blocks of eight, so
 * the mid record's name is rebuilt from its block start. */
static uint32_t find_record(const unsigned char* key, uint32_t key_len) {
    uint32_t lo = 0, hi = ENTITY_COUNT;
    while (lo < hi) {
        uint32_t mid = lo + (hi - lo) / 2;
        const unsigned char* p = table_names + table_groups[mid / 8];
        unsigned char key_buf[32];
        uint32_t len = 0;
        for (uint32_t k = 0; k <= mid % 8; k++) {
            len = *p++;
            while (*p) key_buf[len++] = *p++;
            p++;
        }
        int cmp = 0;
        uint32_t n = len < key_len ? len : key_len;
        for (uint32_t k = 0; k < n; k++) {
            if (key_buf[k] != key[k]) {
                cmp = key_buf[k] < key[k] ? -1 : 1;
                break;
            }
        }
        if (cmp == 0) {
            if (len != key_len) cmp = len < key_len ? -1 : 1;
            else return mid;
        }
        /* cmp is table-minus-query: negative means the table name is smaller,
         * so the target is to the right. */
        if (cmp < 0) lo = mid + 1;
        else hi = mid;
    }
    return 0xFFFFFFFFu;
}

/* Writes the value of record idx (LEB128 code points) to the output. */
static void emit_value(uint32_t idx) {
    uint32_t ref = table_refs[idx];
    const unsigned char* p = table_values + (ref & 0x7FFF);
    for (;;) {
        uint32_t c = 0;
        uint32_t s = 0;
        uint8_t b = *p++;
        while (b & 0x80) {
            c |= (uint32_t)(b & 0x7F) << s;
            s += 7;
            b = *p++;
        }
        c |= (uint32_t)b << s;
        if (c == 0) break;
        emit_code_point(c);
    }
}

/* text[at] is '&' and the next byte is a name character. */
static uint32_t named_ref(const unsigned char* text, uint32_t len, uint32_t at) {
    uint32_t end = at + 1;
    while (end < len && end - (at + 1) < 32 && name_char(text[end])) end += 1;
    const unsigned char* name = text + at + 1;
    uint32_t name_len = end - (at + 1);
    bool semi = end < len && text[end] == ';';
    if (semi) {
        uint32_t idx = find_record(name, name_len);
        if (idx != 0xFFFFFFFFu) {
            emit_value(idx);
            return end + 1;
        }
    }
    /* Without ';', only legacy names match (the only semicolon-less table
     * entries), longest first, and none is longer than 6 bytes. */
    uint32_t max_x = name_len < 6 ? name_len : 6;
    for (uint32_t x = max_x; x >= 2; x -= 1) {
        uint32_t idx = find_record(name, x);
        if (idx != 0xFFFFFFFFu && (table_refs[idx] & 0x8000)) {
            emit_value(idx);
            return at + 1 + x;
        }
    }
    emit_byte('&');
    return at + 1;
}

/* text[at] is '&'. Returns the index after what was consumed. */
static uint32_t handle_ref(const unsigned char* text, uint32_t len, uint32_t at) {
    if (at + 1 >= len) {
        emit_byte('&');
        return at + 1;
    }
    uint8_t c = text[at + 1];
    if (c == '#') return numeric_ref(text, len, at);
    if (name_char(c)) return named_ref(text, len, at);
    emit_byte('&');
    return at + 1;
}

extern "C" uint64_t render(uint32_t len) {
    if (len > INPUT_CAP) len = INPUT_CAP;
    const unsigned char* text = buffer + GAP;
    out_len = 0;
    uint32_t i = 0;
    while (i < len) {
        if (text[i] != '&') {
            buffer[out_len++] = text[i];
            i += 1;
        } else {
            i = handle_ref(text, len, i);
        }
    }
    return ((uint64_t)(uint32_t)buffer << 32) | out_len;
}

Run it on the example input with qipdo (Node.js 22 or newer):

printf '%s' 'Fish &amp; chips &mdash; caf&eacute; &lt;3 &#x1F600; &copy 2026 &notit;' | npx qipdo calculated.world components/a689ee5197d2f9a4cb4aa8d35aed387349b949f1696d7174141e33c8e2911971.wasm

Size-optimised rebuild of the 20-page C++ submission. The entity table is replaced by the compact design from the C submission fa176a59: front-coded sorted names in blocks of eight (each name stores only the suffix after its predecessor's shared prefix, 12,809 bytes), a u16 offset per block (266 entries), u16 refs (15-bit value offset | legacy bit, 2,125 entries), and a deduplicated value pool stored as LEB128 code points, NUL-terminated (code point 0 never occurs, 4,778 bytes). Binary search rebuilds the mid record's name from its block start, and the value loop decodes LEB128 code points through the existing emit_code_point helper. The named-reference scan now checks the legacy bit explicitly and caps the longest-prefix search at 6 bytes (no legacy name is longer). Unchanged: the scalar left-to-right scanner, the one 1,258,304-byte buffer (output from byte 0, input from byte GAP=209,728), numeric references saturating at U+110000, Windows-1252 remapping of 0x80-0x9F, and U+FFFD for 0/surrogates/>U+10FFFF. 26,321 bytes, 20 pages, 16 KiB stack.

Builds on
Direct derivative of the first submitter's own C++ submission 81174e02: same scalar scanner and buffer layout. New here: the front-coded name blocks and LEB128 code-point value pool (the table design of the C submission fa176a59, itself derived from e9ed850e).

Build details

Compiler, size, memory and checksum
Submitted
4 November 2026 at 06:21 UTC
Language
C++
Compiler
Zig 0.15.2 (Clang 20.1.2) zig c++ -target wasm32-freestanding -O2 -fno-exceptions -fno-rtti -nostdlib -Wl,--no-entry -Wl,--export-memory -Wl,-z,stack-size=16384 -Wl,--initial-memory=1310720 -Wl,--max-memory=1310720 -Wl,--export=input_ptr -Wl,--export=input_utf8_cap -Wl,--export=output_utf8_cap -Wl,--export=render -Wl,--strip-all
Size
25.7 KiB, gzip 15.1 KiB
Download
~300 ms on Slow 4G (Lighthouse’s 1.6 Mbps, 150 ms round trips)
Memory
20 pages (1.3 MiB)
SIMD
no
AI models
qwen3.8-27b:8bit
Functions, loops, branches and other static counts
Functions
5
Instructions
1,775
Loops
28
Conditional branches
99
Indirect calls
0
Memory loads
78
Memory stores
41
SIMD instructions
0
Potentially trapping instructions
119

Instruction sites in the binary, not executions, counted by qip.dev’s wasm-counts.