From: Mike Stepanek (mstepane) Date: Fri, 26 Jul 2019 20:14:27 +0000 (-0400) Subject: Merge pull request #1687 in SNORT/snort3 from ~MIREDDEN/snort3:huffman_rebased to... X-Git-Tag: 3.0.0-259~29 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6479da6d2e904733de04ac9f1ce924d4bf741b14;p=thirdparty%2Fsnort3.git Merge pull request #1687 in SNORT/snort3 from ~MIREDDEN/snort3:huffman_rebased to master Squashed commit of the following: commit 4a07fd650fbe3cbd5f67c93af793653270704e79 Author: mdagon Date: Wed Jul 10 08:51:33 2019 -0400 http2: huffman string decode lookup table, first level only --- diff --git a/src/service_inspectors/http2_inspect/CMakeLists.txt b/src/service_inspectors/http2_inspect/CMakeLists.txt index b9406e634..4c54912d7 100644 --- a/src/service_inspectors/http2_inspect/CMakeLists.txt +++ b/src/service_inspectors/http2_inspect/CMakeLists.txt @@ -8,7 +8,9 @@ set (FILE_LIST http2_hpack_int_decode.cc http2_hpack_int_decode.h http2_hpack_string_decode.cc - http2_hpack_string_decode.h + http2_hpack_string_decode.h + http2_huffman_state_machine.cc + http2_huffman_state_machine.h http2_inspect.cc http2_inspect_impl.cc http2_inspect.h diff --git a/src/service_inspectors/http2_inspect/http2_enum.h b/src/service_inspectors/http2_inspect/http2_enum.h index 63a255732..3ce94d8ed 100644 --- a/src/service_inspectors/http2_inspect/http2_enum.h +++ b/src/service_inspectors/http2_inspect/http2_enum.h @@ -66,6 +66,9 @@ enum Infraction INF_STRING_EMPTY_BUFF = 4, INF_STRING_MISSING_BYTES = 5, INF_OUT_BUFF_OUT_OF_SPACE = 6, + INF_HUFFMAN_BAD_PADDING = 7, + INF_HUFFMAN_DECODED_EOS = 8, + INF_HUFFMAN_INCOMPLETE_CODE_PADDING = 9, INF__MAX_VALUE }; diff --git a/src/service_inspectors/http2_inspect/http2_hpack_string_decode.cc b/src/service_inspectors/http2_inspect/http2_hpack_string_decode.cc index 2c24afc6c..5d9ea2ded 100644 --- a/src/service_inspectors/http2_inspect/http2_hpack_string_decode.cc +++ b/src/service_inspectors/http2_inspect/http2_hpack_string_decode.cc @@ -24,11 +24,18 @@ #include "http2_hpack_string_decode.h" #include "http2_enum.h" +#include "http2_huffman_state_machine.h" + +#include using namespace Http2Enums; static const uint8_t HUFFMAN_FLAG = 0x80; +// Minimum bit length for each lookup table +static const uint8_t min_decode_len[HUFFMAN_LOOKUP_MAX + 1] = + {5, 2, 2, 3, 5, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4}; + Http2HpackStringDecode::Http2HpackStringDecode(Http2EventGen* events, Http2Infractions* infractions) : decode7(new Http2HpackIntDecode(7, events, infractions)), events(events), infractions(infractions) @@ -93,6 +100,145 @@ bool Http2HpackStringDecode::get_string(const uint8_t* in_buff, const uint32_t e return true; } -bool Http2HpackStringDecode::get_huffman_string(const uint8_t*, const uint32_t, uint32_t&, - uint8_t*, const uint32_t, uint32_t&) { return false; } +// return is tail/padding +bool Http2HpackStringDecode::get_next_byte(const uint8_t* in_buff, const uint32_t last_byte, + uint32_t& bytes_consumed, uint8_t& cur_bit, uint8_t match_len, uint8_t& byte, + bool& another_search) +{ + another_search = true; + cur_bit += match_len; + + if (cur_bit >= 8) // done with current bit + { + bytes_consumed++; + cur_bit -= 8; + } + + bool tail = false; + uint8_t msb, lsb = 0xff; + if (bytes_consumed == last_byte) + { + // bytes consumed must be bigger than 1 - int length is at least 1 + msb = in_buff[bytes_consumed-1]; + another_search = false; + tail = true; + } + else if ((bytes_consumed + 1) == last_byte) + { + if (cur_bit != 0) + { + msb = in_buff[bytes_consumed++]; + tail = true; + } + else + { + byte = in_buff[bytes_consumed]; + return false; + } + } + else + { + msb = in_buff[bytes_consumed]; + lsb = in_buff[bytes_consumed+1]; + } + + const uint16_t tmp = (uint16_t)(msb << 8) | lsb; + byte = (tmp & (0xff00 >> cur_bit)) >> (8 - cur_bit); + return tail; +} + +bool Http2HpackStringDecode::get_huffman_string(const uint8_t* in_buff, const uint32_t encoded_len, + uint32_t& bytes_consumed, uint8_t* out_buff, const uint32_t out_len, uint32_t& bytes_written) +{ + const uint32_t last_encoded_byte = bytes_consumed + encoded_len; + uint8_t byte; + uint8_t cur_bit = 0; + HuffmanEntry result = { 0, 0, HUFFMAN_LOOKUP_1 }; + bool another_search = false; + HuffmanState state = HUFFMAN_LOOKUP_1; + + // Check length + const uint32_t max_length = floor(encoded_len * 8.0/5.0); + if (max_length > out_len) + { + *infractions += INF_OUT_BUFF_OUT_OF_SPACE; + events->create_event(EVENT_STRING_DECODE_FAILURE); + return false; + } + + while (!get_next_byte(in_buff, last_encoded_byte, bytes_consumed, cur_bit, result.len, byte, + another_search)) + { + result = huffman_decode[state][byte]; + + switch (result.state) { + + case HUFFMAN_MATCH: + out_buff[bytes_written++] = result.symbol; + state = HUFFMAN_LOOKUP_1; + break; + + case HUFFMAN_LOOKUP_2: + case HUFFMAN_LOOKUP_3: + case HUFFMAN_LOOKUP_4: + case HUFFMAN_LOOKUP_5: + case HUFFMAN_LOOKUP_6: + case HUFFMAN_LOOKUP_7: + case HUFFMAN_LOOKUP_8: + case HUFFMAN_LOOKUP_9: + case HUFFMAN_LOOKUP_10: + case HUFFMAN_LOOKUP_11: + case HUFFMAN_LOOKUP_12: + case HUFFMAN_LOOKUP_13: + case HUFFMAN_LOOKUP_14: + case HUFFMAN_LOOKUP_15: + state = result.state; + break; + + case HUFFMAN_FAILURE: + *infractions += INF_HUFFMAN_DECODED_EOS; + events->create_event(EVENT_STRING_DECODE_FAILURE); + return false; + break; + + default: + break; + } + } + + // Tail needs 1 last lookup in case the leftover is big enough for a match. + // Make sure match length <= available length + uint8_t leftover_len = 8 - cur_bit; + uint8_t old_result = result.len; + if (another_search && (leftover_len >= min_decode_len[state])) + { + result = huffman_decode[state][byte]; + if ((result.state == HUFFMAN_MATCH) && (result.len <= leftover_len)) + { + out_buff[bytes_written++] = result.symbol; + byte = (byte << result.len) | (((uint16_t)1 << result.len) - 1); + } + else + result.len = old_result; + } + + // Padding check + if (result.len < 8) + { + if (byte != 0xff) + { + *infractions += INF_HUFFMAN_BAD_PADDING; + events->create_event(EVENT_STRING_DECODE_FAILURE); + return false; + } + } + else if (result.state != HUFFMAN_MATCH) + { + *infractions += INF_HUFFMAN_INCOMPLETE_CODE_PADDING; + events->create_event(EVENT_STRING_DECODE_FAILURE); + return false; + } + + return true; +} diff --git a/src/service_inspectors/http2_inspect/http2_hpack_string_decode.h b/src/service_inspectors/http2_inspect/http2_hpack_string_decode.h index 172d76831..464bf6ba6 100644 --- a/src/service_inspectors/http2_inspect/http2_hpack_string_decode.h +++ b/src/service_inspectors/http2_inspect/http2_hpack_string_decode.h @@ -40,7 +40,9 @@ private: uint8_t* out_buff, const uint32_t out_len, uint32_t& bytes_written); bool get_huffman_string(const uint8_t* in_buff, const uint32_t encoded_len, uint32_t& bytes_consumed, uint8_t* out_buff, const uint32_t out_len, uint32_t& bytes_written); - + bool get_next_byte(const uint8_t* in_buff, const uint32_t last_byte, + uint32_t& bytes_consumed, uint8_t& cur_bit, uint8_t match_len, uint8_t& byte, bool& another_search); + Http2HpackIntDecode* const decode7; Http2EventGen* const events; Http2Infractions* const infractions; diff --git a/src/service_inspectors/http2_inspect/http2_huffman_state_machine.cc b/src/service_inspectors/http2_inspect/http2_huffman_state_machine.cc new file mode 100644 index 000000000..36a74db76 --- /dev/null +++ b/src/service_inspectors/http2_inspect/http2_huffman_state_machine.cc @@ -0,0 +1,1851 @@ +//-------------------------------------------------------------------------- +// Copyright (C) 2019-2019 Cisco and/or its affiliates. All rights reserved. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License Version 2 as published +// by the Free Software Foundation. You may not use, modify or distribute +// this program under any other version of the GNU General Public License. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +//-------------------------------------------------------------------------- +// http2_huffman_state_machine.cc author Maya Dagon + +#include "http2_huffman_state_machine.h" + +const HuffmanEntry huffman_decode[HUFFMAN_LOOKUP_MAX+1] [UINT8_MAX+1] = +{ + { // HUFFMAN_LOOKUP_1 + {5, '0', HUFFMAN_MATCH}, {5, '0', HUFFMAN_MATCH}, {5, '0', HUFFMAN_MATCH}, {5, '0', HUFFMAN_MATCH}, + {5, '0', HUFFMAN_MATCH}, {5, '0', HUFFMAN_MATCH}, {5, '0', HUFFMAN_MATCH}, {5, '0', HUFFMAN_MATCH}, + {5, '1', HUFFMAN_MATCH}, {5, '1', HUFFMAN_MATCH}, {5, '1', HUFFMAN_MATCH}, {5, '1', HUFFMAN_MATCH}, + {5, '1', HUFFMAN_MATCH}, {5, '1', HUFFMAN_MATCH}, {5, '1', HUFFMAN_MATCH}, {5, '1', HUFFMAN_MATCH}, + {5, '2', HUFFMAN_MATCH}, {5, '2', HUFFMAN_MATCH}, {5, '2', HUFFMAN_MATCH}, {5, '2', HUFFMAN_MATCH}, + {5, '2', HUFFMAN_MATCH}, {5, '2', HUFFMAN_MATCH}, {5, '2', HUFFMAN_MATCH}, {5, '2', HUFFMAN_MATCH}, + {5, 'a', HUFFMAN_MATCH}, {5, 'a', HUFFMAN_MATCH}, {5, 'a', HUFFMAN_MATCH}, {5, 'a', HUFFMAN_MATCH}, + {5, 'a', HUFFMAN_MATCH}, {5, 'a', HUFFMAN_MATCH}, {5, 'a', HUFFMAN_MATCH}, {5, 'a', HUFFMAN_MATCH}, + {5, 'c', HUFFMAN_MATCH}, {5, 'c', HUFFMAN_MATCH}, {5, 'c', HUFFMAN_MATCH}, {5, 'c', HUFFMAN_MATCH}, + {5, 'c', HUFFMAN_MATCH}, {5, 'c', HUFFMAN_MATCH}, {5, 'c', HUFFMAN_MATCH}, {5, 'c', HUFFMAN_MATCH}, + {5, 'e', HUFFMAN_MATCH}, {5, 'e', HUFFMAN_MATCH}, {5, 'e', HUFFMAN_MATCH}, {5, 'e', HUFFMAN_MATCH}, + {5, 'e', HUFFMAN_MATCH}, {5, 'e', HUFFMAN_MATCH}, {5, 'e', HUFFMAN_MATCH}, {5, 'e', HUFFMAN_MATCH}, + {5, 'i', HUFFMAN_MATCH}, {5, 'i', HUFFMAN_MATCH}, {5, 'i', HUFFMAN_MATCH}, {5, 'i', HUFFMAN_MATCH}, + {5, 'i', HUFFMAN_MATCH}, {5, 'i', HUFFMAN_MATCH}, {5, 'i', HUFFMAN_MATCH}, {5, 'i', HUFFMAN_MATCH}, + {5, 'o', HUFFMAN_MATCH}, {5, 'o', HUFFMAN_MATCH}, {5, 'o', HUFFMAN_MATCH}, {5, 'o', HUFFMAN_MATCH}, + {5, 'o', HUFFMAN_MATCH}, {5, 'o', HUFFMAN_MATCH}, {5, 'o', HUFFMAN_MATCH}, {5, 'o', HUFFMAN_MATCH}, + {5, 's', HUFFMAN_MATCH}, {5, 's', HUFFMAN_MATCH}, {5, 's', HUFFMAN_MATCH}, {5, 's', HUFFMAN_MATCH}, + {5, 's', HUFFMAN_MATCH}, {5, 's', HUFFMAN_MATCH}, {5, 's', HUFFMAN_MATCH}, {5, 's', HUFFMAN_MATCH}, + {5, 't', HUFFMAN_MATCH}, {5, 't', HUFFMAN_MATCH}, {5, 't', HUFFMAN_MATCH}, {5, 't', HUFFMAN_MATCH}, + {5, 't', HUFFMAN_MATCH}, {5, 't', HUFFMAN_MATCH}, {5, 't', HUFFMAN_MATCH}, {5, 't', HUFFMAN_MATCH}, + {6, ' ', HUFFMAN_MATCH}, {6, ' ', HUFFMAN_MATCH}, {6, ' ', HUFFMAN_MATCH}, {6, ' ', HUFFMAN_MATCH}, + {6, '%', HUFFMAN_MATCH}, {6, '%', HUFFMAN_MATCH}, {6, '%', HUFFMAN_MATCH}, {6, '%', HUFFMAN_MATCH}, + {6, '-', HUFFMAN_MATCH}, {6, '-', HUFFMAN_MATCH}, {6, '-', HUFFMAN_MATCH}, {6, '-', HUFFMAN_MATCH}, + {6, '.', HUFFMAN_MATCH}, {6, '.', HUFFMAN_MATCH}, {6, '.', HUFFMAN_MATCH}, {6, '.', HUFFMAN_MATCH}, + {6, '/', HUFFMAN_MATCH}, {6, '/', HUFFMAN_MATCH}, {6, '/', HUFFMAN_MATCH}, {6, '/', HUFFMAN_MATCH}, + {6, '3', HUFFMAN_MATCH}, {6, '3', HUFFMAN_MATCH}, {6, '3', HUFFMAN_MATCH}, {6, '3', HUFFMAN_MATCH}, + {6, '4', HUFFMAN_MATCH}, {6, '4', HUFFMAN_MATCH}, {6, '4', HUFFMAN_MATCH}, {6, '4', HUFFMAN_MATCH}, + {6, '5', HUFFMAN_MATCH}, {6, '5', HUFFMAN_MATCH}, {6, '5', HUFFMAN_MATCH}, {6, '5', HUFFMAN_MATCH}, + {6, '6', HUFFMAN_MATCH}, {6, '6', HUFFMAN_MATCH}, {6, '6', HUFFMAN_MATCH}, {6, '6', HUFFMAN_MATCH}, + {6, '7', HUFFMAN_MATCH}, {6, '7', HUFFMAN_MATCH}, {6, '7', HUFFMAN_MATCH}, {6, '7', HUFFMAN_MATCH}, + {6, '8', HUFFMAN_MATCH}, {6, '8', HUFFMAN_MATCH}, {6, '8', HUFFMAN_MATCH}, {6, '8', HUFFMAN_MATCH}, + {6, '9', HUFFMAN_MATCH}, {6, '9', HUFFMAN_MATCH}, {6, '9', HUFFMAN_MATCH}, {6, '9', HUFFMAN_MATCH}, + {6, '=', HUFFMAN_MATCH}, {6, '=', HUFFMAN_MATCH}, {6, '=', HUFFMAN_MATCH}, {6, '=', HUFFMAN_MATCH}, + {6, 'A', HUFFMAN_MATCH}, {6, 'A', HUFFMAN_MATCH}, {6, 'A', HUFFMAN_MATCH}, {6, 'A', HUFFMAN_MATCH}, + {6, '_', HUFFMAN_MATCH}, {6, '_', HUFFMAN_MATCH}, {6, '_', HUFFMAN_MATCH}, {6, '_', HUFFMAN_MATCH}, + {6, 'b', HUFFMAN_MATCH}, {6, 'b', HUFFMAN_MATCH}, {6, 'b', HUFFMAN_MATCH}, {6, 'b', HUFFMAN_MATCH}, + {6, 'd', HUFFMAN_MATCH}, {6, 'd', HUFFMAN_MATCH}, {6, 'd', HUFFMAN_MATCH}, {6, 'd', HUFFMAN_MATCH}, + {6, 'f', HUFFMAN_MATCH}, {6, 'f', HUFFMAN_MATCH}, {6, 'f', HUFFMAN_MATCH}, {6, 'f', HUFFMAN_MATCH}, + {6, 'g', HUFFMAN_MATCH}, {6, 'g', HUFFMAN_MATCH}, {6, 'g', HUFFMAN_MATCH}, {6, 'g', HUFFMAN_MATCH}, + {6, 'h', HUFFMAN_MATCH}, {6, 'h', HUFFMAN_MATCH}, {6, 'h', HUFFMAN_MATCH}, {6, 'h', HUFFMAN_MATCH}, + {6, 'l', HUFFMAN_MATCH}, {6, 'l', HUFFMAN_MATCH}, {6, 'l', HUFFMAN_MATCH}, {6, 'l', HUFFMAN_MATCH}, + {6, 'm', HUFFMAN_MATCH}, {6, 'm', HUFFMAN_MATCH}, {6, 'm', HUFFMAN_MATCH}, {6, 'm', HUFFMAN_MATCH}, + {6, 'n', HUFFMAN_MATCH}, {6, 'n', HUFFMAN_MATCH}, {6, 'n', HUFFMAN_MATCH}, {6, 'n', HUFFMAN_MATCH}, + {6, 'p', HUFFMAN_MATCH}, {6, 'p', HUFFMAN_MATCH}, {6, 'p', HUFFMAN_MATCH}, {6, 'p', HUFFMAN_MATCH}, + {6, 'r', HUFFMAN_MATCH}, {6, 'r', HUFFMAN_MATCH}, {6, 'r', HUFFMAN_MATCH}, {6, 'r', HUFFMAN_MATCH}, + {6, 'u', HUFFMAN_MATCH}, {6, 'u', HUFFMAN_MATCH}, {6, 'u', HUFFMAN_MATCH}, {6, 'u', HUFFMAN_MATCH}, + {7, ':', HUFFMAN_MATCH}, {7, ':', HUFFMAN_MATCH}, {7, 'B', HUFFMAN_MATCH}, {7, 'B', HUFFMAN_MATCH}, + {7, 'C', HUFFMAN_MATCH}, {7, 'C', HUFFMAN_MATCH}, {7, 'D', HUFFMAN_MATCH}, {7, 'D', HUFFMAN_MATCH}, + {7, 'E', HUFFMAN_MATCH}, {7, 'E', HUFFMAN_MATCH}, {7, 'F', HUFFMAN_MATCH}, {7, 'F', HUFFMAN_MATCH}, + {7, 'G', HUFFMAN_MATCH}, {7, 'G', HUFFMAN_MATCH}, {7, 'H', HUFFMAN_MATCH}, {7, 'H', HUFFMAN_MATCH}, + {7, 'I', HUFFMAN_MATCH}, {7, 'I', HUFFMAN_MATCH}, {7, 'J', HUFFMAN_MATCH}, {7, 'J', HUFFMAN_MATCH}, + {7, 'K', HUFFMAN_MATCH}, {7, 'K', HUFFMAN_MATCH}, {7, 'L', HUFFMAN_MATCH}, {7, 'L', HUFFMAN_MATCH}, + {7, 'M', HUFFMAN_MATCH}, {7, 'M', HUFFMAN_MATCH}, {7, 'N', HUFFMAN_MATCH}, {7, 'N', HUFFMAN_MATCH}, + {7, 'O', HUFFMAN_MATCH}, {7, 'O', HUFFMAN_MATCH}, {7, 'P', HUFFMAN_MATCH}, {7, 'P', HUFFMAN_MATCH}, + {7, 'Q', HUFFMAN_MATCH}, {7, 'Q', HUFFMAN_MATCH}, {7, 'R', HUFFMAN_MATCH}, {7, 'R', HUFFMAN_MATCH}, + {7, 'S', HUFFMAN_MATCH}, {7, 'S', HUFFMAN_MATCH}, {7, 'T', HUFFMAN_MATCH}, {7, 'T', HUFFMAN_MATCH}, + {7, 'U', HUFFMAN_MATCH}, {7, 'U', HUFFMAN_MATCH}, {7, 'V', HUFFMAN_MATCH}, {7, 'V', HUFFMAN_MATCH}, + {7, 'W', HUFFMAN_MATCH}, {7, 'W', HUFFMAN_MATCH}, {7, 'Y', HUFFMAN_MATCH}, {7, 'Y', HUFFMAN_MATCH}, + {7, 'j', HUFFMAN_MATCH}, {7, 'j', HUFFMAN_MATCH}, {7, 'k', HUFFMAN_MATCH}, {7, 'k', HUFFMAN_MATCH}, + {7, 'q', HUFFMAN_MATCH}, {7, 'q', HUFFMAN_MATCH}, {7, 'v', HUFFMAN_MATCH}, {7, 'v', HUFFMAN_MATCH}, + {7, 'w', HUFFMAN_MATCH}, {7, 'w', HUFFMAN_MATCH}, {7, 'x', HUFFMAN_MATCH}, {7, 'x', HUFFMAN_MATCH}, + {7, 'y', HUFFMAN_MATCH}, {7, 'y', HUFFMAN_MATCH}, {7, 'z', HUFFMAN_MATCH}, {7, 'z', HUFFMAN_MATCH}, + {8, '&', HUFFMAN_MATCH}, {8, '*', HUFFMAN_MATCH}, {8, ',', HUFFMAN_MATCH}, {8, ';', HUFFMAN_MATCH}, + {8, 'X', HUFFMAN_MATCH}, {8, 'Z', HUFFMAN_MATCH}, {8, 0, HUFFMAN_LOOKUP_2}, {8, 0, HUFFMAN_LOOKUP_3} + }, + { // HUFFMAN_LOOKUP_2 + // 00 + {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, + {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, + {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, + {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, + {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, + {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, + {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, + {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, + {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, + {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, + {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, + {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, + {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, + {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, + {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, + {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, {2, '!', HUFFMAN_MATCH}, + // 01 + {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, + {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, + {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, + {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, + {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, + {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, + {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, + {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, + {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, + {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, + {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, + {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, + {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, + {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, + {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, + {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, {2, '"', HUFFMAN_MATCH}, + // 10 + {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, + {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, + {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, + {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, + {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, + {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, + {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, + {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, + {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, + {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, + {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, + {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, + {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, + {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, + {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, + {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, {2, '(', HUFFMAN_MATCH}, + // 11 + {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, + {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, + {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, + {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, + {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, + {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, + {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, + {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, + {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, + {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, + {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, + {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, + {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, + {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, + {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, + {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH}, {2, ')', HUFFMAN_MATCH} + }, + { // HUFFMAN_LOOKUP_3 + // 00 + {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, + {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, + {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, + {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, + {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, + {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, + {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, + {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, + {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, + {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, + {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, + {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, + {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, + {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, + {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, + {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, {2, '?', HUFFMAN_MATCH}, + // 010 + {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, + {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, + {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, + {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, + {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, + {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, + {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, + {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, {3, '\'', HUFFMAN_MATCH}, + // 011 + {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, + {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, + {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, + {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, + {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, + {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, + {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, + {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, {3, '+', HUFFMAN_MATCH}, + // 100 + {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, + {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, + {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, + {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, + {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, + {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, + {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, + {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, {3, '|', HUFFMAN_MATCH}, + // 1010 + {4, '#', HUFFMAN_MATCH}, {4, '#', HUFFMAN_MATCH}, {4, '#', HUFFMAN_MATCH}, {4, '#', HUFFMAN_MATCH}, + {4, '#', HUFFMAN_MATCH}, {4, '#', HUFFMAN_MATCH}, {4, '#', HUFFMAN_MATCH}, {4, '#', HUFFMAN_MATCH}, + {4, '#', HUFFMAN_MATCH}, {4, '#', HUFFMAN_MATCH}, {4, '#', HUFFMAN_MATCH}, {4, '#', HUFFMAN_MATCH}, + {4, '#', HUFFMAN_MATCH}, {4, '#', HUFFMAN_MATCH}, {4, '#', HUFFMAN_MATCH}, {4, '#', HUFFMAN_MATCH}, + // 1011 + {4, '>', HUFFMAN_MATCH}, {4, '>', HUFFMAN_MATCH}, {4, '>', HUFFMAN_MATCH}, {4, '>', HUFFMAN_MATCH}, + {4, '>', HUFFMAN_MATCH}, {4, '>', HUFFMAN_MATCH}, {4, '>', HUFFMAN_MATCH}, {4, '>', HUFFMAN_MATCH}, + {4, '>', HUFFMAN_MATCH}, {4, '>', HUFFMAN_MATCH}, {4, '>', HUFFMAN_MATCH}, {4, '>', HUFFMAN_MATCH}, + {4, '>', HUFFMAN_MATCH}, {4, '>', HUFFMAN_MATCH}, {4, '>', HUFFMAN_MATCH}, {4, '>', HUFFMAN_MATCH}, + // 11000 + {5, 0, HUFFMAN_MATCH}, {5, 0, HUFFMAN_MATCH}, {5, 0, HUFFMAN_MATCH}, {5, 0, HUFFMAN_MATCH}, + {5, 0, HUFFMAN_MATCH}, {5, 0, HUFFMAN_MATCH}, {5, 0, HUFFMAN_MATCH}, {5, 0, HUFFMAN_MATCH}, + // 11001 + {5, '$', HUFFMAN_MATCH}, {5, '$', HUFFMAN_MATCH}, {5, '$', HUFFMAN_MATCH}, {5, '$', HUFFMAN_MATCH}, + {5, '$', HUFFMAN_MATCH}, {5, '$', HUFFMAN_MATCH}, {5, '$', HUFFMAN_MATCH}, {5, '$', HUFFMAN_MATCH}, + // 11010 + {5, '@', HUFFMAN_MATCH}, {5, '@', HUFFMAN_MATCH}, {5, '@', HUFFMAN_MATCH}, {5, '@', HUFFMAN_MATCH}, + {5, '@', HUFFMAN_MATCH}, {5, '@', HUFFMAN_MATCH}, {5, '@', HUFFMAN_MATCH}, {5, '@', HUFFMAN_MATCH}, + // 11011 + {5, '[', HUFFMAN_MATCH}, {5, '[', HUFFMAN_MATCH}, {5, '[', HUFFMAN_MATCH}, {5, '[', HUFFMAN_MATCH}, + {5, '[', HUFFMAN_MATCH}, {5, '[', HUFFMAN_MATCH}, {5, '[', HUFFMAN_MATCH}, {5, '[', HUFFMAN_MATCH}, + // 11100 + {5, ']', HUFFMAN_MATCH}, {5, ']', HUFFMAN_MATCH}, {5, ']', HUFFMAN_MATCH}, {5, ']', HUFFMAN_MATCH}, + {5, ']', HUFFMAN_MATCH}, {5, ']', HUFFMAN_MATCH}, {5, ']', HUFFMAN_MATCH}, {5, ']', HUFFMAN_MATCH}, + // 11101 + {5, '~', HUFFMAN_MATCH}, {5, '~', HUFFMAN_MATCH}, {5, '~', HUFFMAN_MATCH}, {5, '~', HUFFMAN_MATCH}, + {5, '~', HUFFMAN_MATCH}, {5, '~', HUFFMAN_MATCH}, {5, '~', HUFFMAN_MATCH}, {5, '~', HUFFMAN_MATCH}, + // 111100 + {6, '^', HUFFMAN_MATCH}, {6, '^', HUFFMAN_MATCH}, {6, '^', HUFFMAN_MATCH}, {6, '^', HUFFMAN_MATCH}, + // 111101 + {6, '}', HUFFMAN_MATCH}, {6, '}', HUFFMAN_MATCH}, {6, '}', HUFFMAN_MATCH}, {6, '}', HUFFMAN_MATCH}, + // 1111100 + {7, '<', HUFFMAN_MATCH}, {7, '<', HUFFMAN_MATCH}, + // 1111101 + {7, '`', HUFFMAN_MATCH}, {7, '`', HUFFMAN_MATCH}, + // 1111110 + {7, '{', HUFFMAN_MATCH}, {7, '{', HUFFMAN_MATCH}, + // 11111110 + {8, 0, HUFFMAN_LOOKUP_4}, + // 11111111 + {8, 0, HUFFMAN_LOOKUP_5} + }, + { // HUFFMAN_LOOKUP_4 + // 000 + {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, + {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, + {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, + {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, + {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, + {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, + {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, + {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, {3, '\\', HUFFMAN_MATCH}, + // 001 + {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, + {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, + {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, + {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, + {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, + {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, + {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, + {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, {3, (char)195, HUFFMAN_MATCH}, + // 010 + {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, + {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, + {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, + {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, + {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, + {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, + {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, + {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, {3, (char)208, HUFFMAN_MATCH}, + // 0110 + {4, (char)128, HUFFMAN_MATCH}, {4, (char)128, HUFFMAN_MATCH}, {4, (char)128, HUFFMAN_MATCH}, {4, (char)128, HUFFMAN_MATCH}, + {4, (char)128, HUFFMAN_MATCH}, {4, (char)128, HUFFMAN_MATCH}, {4, (char)128, HUFFMAN_MATCH}, {4, (char)128, HUFFMAN_MATCH}, + {4, (char)128, HUFFMAN_MATCH}, {4, (char)128, HUFFMAN_MATCH}, {4, (char)128, HUFFMAN_MATCH}, {4, (char)128, HUFFMAN_MATCH}, + {4, (char)128, HUFFMAN_MATCH}, {4, (char)128, HUFFMAN_MATCH}, {4, (char)128, HUFFMAN_MATCH}, {4, (char)128, HUFFMAN_MATCH}, + // 0111 + {4, (char)130, HUFFMAN_MATCH}, {4, (char)130, HUFFMAN_MATCH}, {4, (char)130, HUFFMAN_MATCH}, {4, (char)130, HUFFMAN_MATCH}, + {4, (char)130, HUFFMAN_MATCH}, {4, (char)130, HUFFMAN_MATCH}, {4, (char)130, HUFFMAN_MATCH}, {4, (char)130, HUFFMAN_MATCH}, + {4, (char)130, HUFFMAN_MATCH}, {4, (char)130, HUFFMAN_MATCH}, {4, (char)130, HUFFMAN_MATCH}, {4, (char)130, HUFFMAN_MATCH}, + {4, (char)130, HUFFMAN_MATCH}, {4, (char)130, HUFFMAN_MATCH}, {4, (char)130, HUFFMAN_MATCH}, {4, (char)130, HUFFMAN_MATCH}, + // 1000 + {4, (char)131, HUFFMAN_MATCH}, {4, (char)131, HUFFMAN_MATCH}, {4, (char)131, HUFFMAN_MATCH}, {4, (char)131, HUFFMAN_MATCH}, + {4, (char)131, HUFFMAN_MATCH}, {4, (char)131, HUFFMAN_MATCH}, {4, (char)131, HUFFMAN_MATCH}, {4, (char)131, HUFFMAN_MATCH}, + {4, (char)131, HUFFMAN_MATCH}, {4, (char)131, HUFFMAN_MATCH}, {4, (char)131, HUFFMAN_MATCH}, {4, (char)131, HUFFMAN_MATCH}, + {4, (char)131, HUFFMAN_MATCH}, {4, (char)131, HUFFMAN_MATCH}, {4, (char)131, HUFFMAN_MATCH}, {4, (char)131, HUFFMAN_MATCH}, + // 1001 + {4, (char)162, HUFFMAN_MATCH}, {4, (char)162, HUFFMAN_MATCH}, {4, (char)162, HUFFMAN_MATCH}, {4, (char)162, HUFFMAN_MATCH}, + {4, (char)162, HUFFMAN_MATCH}, {4, (char)162, HUFFMAN_MATCH}, {4, (char)162, HUFFMAN_MATCH}, {4, (char)162, HUFFMAN_MATCH}, + {4, (char)162, HUFFMAN_MATCH}, {4, (char)162, HUFFMAN_MATCH}, {4, (char)162, HUFFMAN_MATCH}, {4, (char)162, HUFFMAN_MATCH}, + {4, (char)162, HUFFMAN_MATCH}, {4, (char)162, HUFFMAN_MATCH}, {4, (char)162, HUFFMAN_MATCH}, {4, (char)162, HUFFMAN_MATCH}, + // 1010 + {4, (char)184, HUFFMAN_MATCH}, {4, (char)184, HUFFMAN_MATCH}, {4, (char)184, HUFFMAN_MATCH}, {4, (char)184, HUFFMAN_MATCH}, + {4, (char)184, HUFFMAN_MATCH}, {4, (char)184, HUFFMAN_MATCH}, {4, (char)184, HUFFMAN_MATCH}, {4, (char)184, HUFFMAN_MATCH}, + {4, (char)184, HUFFMAN_MATCH}, {4, (char)184, HUFFMAN_MATCH}, {4, (char)184, HUFFMAN_MATCH}, {4, (char)184, HUFFMAN_MATCH}, + {4, (char)184, HUFFMAN_MATCH}, {4, (char)184, HUFFMAN_MATCH}, {4, (char)184, HUFFMAN_MATCH}, {4, (char)184, HUFFMAN_MATCH}, + // 1011 + {4, (char)194, HUFFMAN_MATCH}, {4, (char)194, HUFFMAN_MATCH}, {4, (char)194, HUFFMAN_MATCH}, {4, (char)194, HUFFMAN_MATCH}, + {4, (char)194, HUFFMAN_MATCH}, {4, (char)194, HUFFMAN_MATCH}, {4, (char)194, HUFFMAN_MATCH}, {4, (char)194, HUFFMAN_MATCH}, + {4, (char)194, HUFFMAN_MATCH}, {4, (char)194, HUFFMAN_MATCH}, {4, (char)194, HUFFMAN_MATCH}, {4, (char)194, HUFFMAN_MATCH}, + {4, (char)194, HUFFMAN_MATCH}, {4, (char)194, HUFFMAN_MATCH}, {4, (char)194, HUFFMAN_MATCH}, {4, (char)194, HUFFMAN_MATCH}, + // 1100 + {4, (char)224, HUFFMAN_MATCH}, {4, (char)224, HUFFMAN_MATCH}, {4, (char)224, HUFFMAN_MATCH}, {4, (char)224, HUFFMAN_MATCH}, + {4, (char)224, HUFFMAN_MATCH}, {4, (char)224, HUFFMAN_MATCH}, {4, (char)224, HUFFMAN_MATCH}, {4, (char)224, HUFFMAN_MATCH}, + {4, (char)224, HUFFMAN_MATCH}, {4, (char)224, HUFFMAN_MATCH}, {4, (char)224, HUFFMAN_MATCH}, {4, (char)224, HUFFMAN_MATCH}, + {4, (char)224, HUFFMAN_MATCH}, {4, (char)224, HUFFMAN_MATCH}, {4, (char)224, HUFFMAN_MATCH}, {4, (char)224, HUFFMAN_MATCH}, + // 1101 + {4, (char)226, HUFFMAN_MATCH}, {4, (char)226, HUFFMAN_MATCH}, {4, (char)226, HUFFMAN_MATCH}, {4, (char)226, HUFFMAN_MATCH}, + {4, (char)226, HUFFMAN_MATCH}, {4, (char)226, HUFFMAN_MATCH}, {4, (char)226, HUFFMAN_MATCH}, {4, (char)226, HUFFMAN_MATCH}, + {4, (char)226, HUFFMAN_MATCH}, {4, (char)226, HUFFMAN_MATCH}, {4, (char)226, HUFFMAN_MATCH}, {4, (char)226, HUFFMAN_MATCH}, + {4, (char)226, HUFFMAN_MATCH}, {4, (char)226, HUFFMAN_MATCH}, {4, (char)226, HUFFMAN_MATCH}, {4, (char)226, HUFFMAN_MATCH}, + // 11100 + {5, (char)153, HUFFMAN_MATCH}, {5, (char)153, HUFFMAN_MATCH}, {5, (char)153, HUFFMAN_MATCH}, {5, (char)153, HUFFMAN_MATCH}, + {5, (char)153, HUFFMAN_MATCH}, {5, (char)153, HUFFMAN_MATCH}, {5, (char)153, HUFFMAN_MATCH}, {5, (char)153, HUFFMAN_MATCH}, + // 11101 + {5, (char)161, HUFFMAN_MATCH}, {5, (char)161, HUFFMAN_MATCH}, {5, (char)161, HUFFMAN_MATCH}, {5, (char)161, HUFFMAN_MATCH}, + {5, (char)161, HUFFMAN_MATCH}, {5, (char)161, HUFFMAN_MATCH}, {5, (char)161, HUFFMAN_MATCH}, {5, (char)161, HUFFMAN_MATCH}, + // 11110 + {5, (char)167, HUFFMAN_MATCH}, {5, (char)167, HUFFMAN_MATCH}, {5, (char)167, HUFFMAN_MATCH}, {5, (char)167, HUFFMAN_MATCH}, + {5, (char)167, HUFFMAN_MATCH}, {5, (char)167, HUFFMAN_MATCH}, {5, (char)167, HUFFMAN_MATCH}, {5, (char)167, HUFFMAN_MATCH}, + // 11111 + {5, (char)172, HUFFMAN_MATCH}, {5, (char)172, HUFFMAN_MATCH}, {5, (char)172, HUFFMAN_MATCH}, {5, (char)172, HUFFMAN_MATCH}, + {5, (char)172, HUFFMAN_MATCH}, {5, (char)172, HUFFMAN_MATCH}, {5, (char)172, HUFFMAN_MATCH}, {5, (char)172, HUFFMAN_MATCH} + }, + { // HUFFMAN_LOOKUP_5 + // 00000 + {5, (char)176, HUFFMAN_MATCH}, {5, (char)176, HUFFMAN_MATCH}, {5, (char)176, HUFFMAN_MATCH}, {5, (char)176, HUFFMAN_MATCH}, + {5, (char)176, HUFFMAN_MATCH}, {5, (char)176, HUFFMAN_MATCH}, {5, (char)176, HUFFMAN_MATCH}, {5, (char)176, HUFFMAN_MATCH}, + // 00001 + {5, (char)177, HUFFMAN_MATCH}, {5, (char)177, HUFFMAN_MATCH}, {5, (char)177, HUFFMAN_MATCH}, {5, (char)177, HUFFMAN_MATCH}, + {5, (char)177, HUFFMAN_MATCH}, {5, (char)177, HUFFMAN_MATCH}, {5, (char)177, HUFFMAN_MATCH}, {5, (char)177, HUFFMAN_MATCH}, + // 00010 + {5, (char)179, HUFFMAN_MATCH}, {5, (char)179, HUFFMAN_MATCH}, {5, (char)179, HUFFMAN_MATCH}, {5, (char)179, HUFFMAN_MATCH}, + {5, (char)179, HUFFMAN_MATCH}, {5, (char)179, HUFFMAN_MATCH}, {5, (char)179, HUFFMAN_MATCH}, {5, (char)179, HUFFMAN_MATCH}, + // 00011 + {5, (char)209, HUFFMAN_MATCH}, {5, (char)209, HUFFMAN_MATCH}, {5, (char)209, HUFFMAN_MATCH}, {5, (char)209, HUFFMAN_MATCH}, + {5, (char)209, HUFFMAN_MATCH}, {5, (char)209, HUFFMAN_MATCH}, {5, (char)209, HUFFMAN_MATCH}, {5, (char)209, HUFFMAN_MATCH}, + // 00100 + {5, (char)216, HUFFMAN_MATCH}, {5, (char)216, HUFFMAN_MATCH}, {5, (char)216, HUFFMAN_MATCH}, {5, (char)216, HUFFMAN_MATCH}, + {5, (char)216, HUFFMAN_MATCH}, {5, (char)216, HUFFMAN_MATCH}, {5, (char)216, HUFFMAN_MATCH}, {5, (char)216, HUFFMAN_MATCH}, + // 00101 + {5, (char)217, HUFFMAN_MATCH}, {5, (char)217, HUFFMAN_MATCH}, {5, (char)217, HUFFMAN_MATCH}, {5, (char)217, HUFFMAN_MATCH}, + {5, (char)217, HUFFMAN_MATCH}, {5, (char)217, HUFFMAN_MATCH}, {5, (char)217, HUFFMAN_MATCH}, {5, (char)217, HUFFMAN_MATCH}, + // 00110 + {5, (char)227, HUFFMAN_MATCH}, {5, (char)227, HUFFMAN_MATCH}, {5, (char)227, HUFFMAN_MATCH}, {5, (char)227, HUFFMAN_MATCH}, + {5, (char)227, HUFFMAN_MATCH}, {5, (char)227, HUFFMAN_MATCH}, {5, (char)227, HUFFMAN_MATCH}, {5, (char)227, HUFFMAN_MATCH}, + // 00111 + {5, (char)229, HUFFMAN_MATCH}, {5, (char)229, HUFFMAN_MATCH}, {5, (char)229, HUFFMAN_MATCH}, {5, (char)229, HUFFMAN_MATCH}, + {5, (char)229, HUFFMAN_MATCH}, {5, (char)229, HUFFMAN_MATCH}, {5, (char)229, HUFFMAN_MATCH}, {5, (char)229, HUFFMAN_MATCH}, + // 01000 + {5, (char)230, HUFFMAN_MATCH}, {5, (char)230, HUFFMAN_MATCH}, {5, (char)230, HUFFMAN_MATCH}, {5, (char)230, HUFFMAN_MATCH}, + {5, (char)230, HUFFMAN_MATCH}, {5, (char)230, HUFFMAN_MATCH}, {5, (char)230, HUFFMAN_MATCH}, {5, (char)230, HUFFMAN_MATCH}, + // 010010 + {6, (char)129, HUFFMAN_MATCH}, {6, (char)129, HUFFMAN_MATCH}, {6, (char)129, HUFFMAN_MATCH}, {6, (char)129, HUFFMAN_MATCH}, + // 010011 + {6, (char)132, HUFFMAN_MATCH}, {6, (char)132, HUFFMAN_MATCH}, {6, (char)132, HUFFMAN_MATCH}, {6, (char)132, HUFFMAN_MATCH}, + // 010100 + {6, (char)133, HUFFMAN_MATCH}, {6, (char)133, HUFFMAN_MATCH}, {6, (char)133, HUFFMAN_MATCH}, {6, (char)133, HUFFMAN_MATCH}, + // 010101 + {6, (char)134, HUFFMAN_MATCH}, {6, (char)134, HUFFMAN_MATCH}, {6, (char)134, HUFFMAN_MATCH}, {6, (char)134, HUFFMAN_MATCH}, + // 010110 + {6, (char)136, HUFFMAN_MATCH}, {6, (char)136, HUFFMAN_MATCH}, {6, (char)136, HUFFMAN_MATCH}, {6, (char)136, HUFFMAN_MATCH}, + // 010111 + {6, (char)146, HUFFMAN_MATCH}, {6, (char)146, HUFFMAN_MATCH}, {6, (char)146, HUFFMAN_MATCH}, {6, (char)146, HUFFMAN_MATCH}, + // 011000 + {6, (char)154, HUFFMAN_MATCH}, {6, (char)154, HUFFMAN_MATCH}, {6, (char)154, HUFFMAN_MATCH}, {6, (char)154, HUFFMAN_MATCH}, + // 011001 + {6, (char)156, HUFFMAN_MATCH}, {6, (char)156, HUFFMAN_MATCH}, {6, (char)156, HUFFMAN_MATCH}, {6, (char)156, HUFFMAN_MATCH}, + // 011010 + {6, (char)160, HUFFMAN_MATCH}, {6, (char)160, HUFFMAN_MATCH}, {6, (char)160, HUFFMAN_MATCH}, {6, (char)160, HUFFMAN_MATCH}, + // 011011 + {6, (char)163, HUFFMAN_MATCH}, {6, (char)163, HUFFMAN_MATCH}, {6, (char)163, HUFFMAN_MATCH}, {6, (char)163, HUFFMAN_MATCH}, + // 011100 + {6, (char)164, HUFFMAN_MATCH}, {6, (char)164, HUFFMAN_MATCH}, {6, (char)164, HUFFMAN_MATCH}, {6, (char)164, HUFFMAN_MATCH}, + // 011101 + {6, (char)169, HUFFMAN_MATCH}, {6, (char)169, HUFFMAN_MATCH}, {6, (char)169, HUFFMAN_MATCH}, {6, (char)169, HUFFMAN_MATCH}, + // 011110 + {6, (char)170, HUFFMAN_MATCH}, {6, (char)170, HUFFMAN_MATCH}, {6, (char)170, HUFFMAN_MATCH}, {6, (char)170, HUFFMAN_MATCH}, + // 011111 + {6, (char)173, HUFFMAN_MATCH}, {6, (char)173, HUFFMAN_MATCH}, {6, (char)173, HUFFMAN_MATCH}, {6, (char)173, HUFFMAN_MATCH}, + // 100000 + {6, (char)178, HUFFMAN_MATCH}, {6, (char)178, HUFFMAN_MATCH}, {6, (char)178, HUFFMAN_MATCH}, {6, (char)178, HUFFMAN_MATCH}, + // 100001 + {6, (char)181, HUFFMAN_MATCH}, {6, (char)181, HUFFMAN_MATCH}, {6, (char)181, HUFFMAN_MATCH}, {6, (char)181, HUFFMAN_MATCH}, + // 100010 + {6, (char)185, HUFFMAN_MATCH}, {6, (char)185, HUFFMAN_MATCH}, {6, (char)185, HUFFMAN_MATCH}, {6, (char)185, HUFFMAN_MATCH}, + // 100011 + {6, (char)186, HUFFMAN_MATCH}, {6, (char)186, HUFFMAN_MATCH}, {6, (char)186, HUFFMAN_MATCH}, {6, (char)186, HUFFMAN_MATCH}, + // 100100 + {6, (char)187, HUFFMAN_MATCH}, {6, (char)187, HUFFMAN_MATCH}, {6, (char)187, HUFFMAN_MATCH}, {6, (char)187, HUFFMAN_MATCH}, + // 100101 + {6, (char)189, HUFFMAN_MATCH}, {6, (char)189, HUFFMAN_MATCH}, {6, (char)189, HUFFMAN_MATCH}, {6, (char)189, HUFFMAN_MATCH}, + // 100110 + {6, (char)190, HUFFMAN_MATCH}, {6, (char)190, HUFFMAN_MATCH}, {6, (char)190, HUFFMAN_MATCH}, {6, (char)190, HUFFMAN_MATCH}, + // 100111 + {6, (char)196, HUFFMAN_MATCH}, {6, (char)196, HUFFMAN_MATCH}, {6, (char)196, HUFFMAN_MATCH}, {6, (char)196, HUFFMAN_MATCH}, + // 101000 + {6, (char)198, HUFFMAN_MATCH}, {6, (char)198, HUFFMAN_MATCH}, {6, (char)198, HUFFMAN_MATCH}, {6, (char)198, HUFFMAN_MATCH}, + // 101001 + {6, (char)228, HUFFMAN_MATCH}, {6, (char)228, HUFFMAN_MATCH}, {6, (char)228, HUFFMAN_MATCH}, {6, (char)228, HUFFMAN_MATCH}, + // 101010 + {6, (char)232, HUFFMAN_MATCH}, {6, (char)232, HUFFMAN_MATCH}, {6, (char)232, HUFFMAN_MATCH}, {6, (char)232, HUFFMAN_MATCH}, + // 101011 + {6, (char)233, HUFFMAN_MATCH}, {6, (char)233, HUFFMAN_MATCH}, {6, (char)233, HUFFMAN_MATCH}, {6, (char)233, HUFFMAN_MATCH}, + // 1011000 + {7, (char)1, HUFFMAN_MATCH}, {7, (char)1, HUFFMAN_MATCH}, + // 1011001 + {7, (char)135, HUFFMAN_MATCH}, {7, (char)135, HUFFMAN_MATCH}, + // 1011010 + {7, (char)137, HUFFMAN_MATCH}, {7, (char)137, HUFFMAN_MATCH}, + // 1011011 + {7, (char)138, HUFFMAN_MATCH}, {7, (char)138, HUFFMAN_MATCH}, + // 1011100 + {7, (char)139, HUFFMAN_MATCH}, {7, (char)139, HUFFMAN_MATCH}, + // 1011101 + {7, (char)140, HUFFMAN_MATCH}, {7, (char)140, HUFFMAN_MATCH}, + // 1011110 + {7, (char)141, HUFFMAN_MATCH}, {7, (char)141, HUFFMAN_MATCH}, + // 1011111 + {7, (char)143, HUFFMAN_MATCH}, {7, (char)143, HUFFMAN_MATCH}, + // 1100000 + {7, (char)147, HUFFMAN_MATCH}, {7, (char)147, HUFFMAN_MATCH}, + // 1100001 + {7, (char)149, HUFFMAN_MATCH}, {7, (char)149, HUFFMAN_MATCH}, + // 1100010 + {7, (char)150, HUFFMAN_MATCH}, {7, (char)150, HUFFMAN_MATCH}, + // 1100011 + {7, (char)151, HUFFMAN_MATCH}, {7, (char)151, HUFFMAN_MATCH}, + // 1100100 + {7, (char)152, HUFFMAN_MATCH}, {7, (char)152, HUFFMAN_MATCH}, + // 1100101 + {7, (char)155, HUFFMAN_MATCH}, {7, (char)155, HUFFMAN_MATCH}, + // 1100110 + {7, (char)157, HUFFMAN_MATCH}, {7, (char)157, HUFFMAN_MATCH}, + // 1100111 + {7, (char)158, HUFFMAN_MATCH}, {7, (char)158, HUFFMAN_MATCH}, + // 1101000 + {7, (char)165, HUFFMAN_MATCH}, {7, (char)165, HUFFMAN_MATCH}, + // 1101001 + {7, (char)166, HUFFMAN_MATCH}, {7, (char)166, HUFFMAN_MATCH}, + // 1101010 + {7, (char)168, HUFFMAN_MATCH}, {7, (char)168, HUFFMAN_MATCH}, + // 1101011 + {7, (char)174, HUFFMAN_MATCH}, {7, (char)174, HUFFMAN_MATCH}, + // 1101100 + {7, (char)175, HUFFMAN_MATCH}, {7, (char)175, HUFFMAN_MATCH}, + // 1101101 + {7, (char)180, HUFFMAN_MATCH}, {7, (char)180, HUFFMAN_MATCH}, + // 1101110 + {7, (char)182, HUFFMAN_MATCH}, {7, (char)182, HUFFMAN_MATCH}, + // 1101111 + {7, (char)183, HUFFMAN_MATCH}, {7, (char)183, HUFFMAN_MATCH}, + // 1110000 + {7, (char)188, HUFFMAN_MATCH}, {7, (char)188, HUFFMAN_MATCH}, + // 1110001 + {7, (char)191, HUFFMAN_MATCH}, {7, (char)191, HUFFMAN_MATCH}, + // 1110010 + {7, (char)197, HUFFMAN_MATCH}, {7, (char)197, HUFFMAN_MATCH}, + // 1100111 + {7, (char)231, HUFFMAN_MATCH}, {7, (char)231, HUFFMAN_MATCH}, + // 1110100 + {7, (char)239, HUFFMAN_MATCH}, {7, (char)239, HUFFMAN_MATCH}, + // 11101010 + {8, (char)9, HUFFMAN_MATCH}, {8, (char)142, HUFFMAN_MATCH}, + {8, (char)144, HUFFMAN_MATCH}, {8, (char)145, HUFFMAN_MATCH}, + {8, (char)148, HUFFMAN_MATCH}, {8, (char)159, HUFFMAN_MATCH}, + {8, (char)171, HUFFMAN_MATCH}, {8, (char)206, HUFFMAN_MATCH}, + {8, (char)215, HUFFMAN_MATCH}, {8, (char)225, HUFFMAN_MATCH}, + {8, (char)236, HUFFMAN_MATCH}, {8, (char)237, HUFFMAN_MATCH}, + {8, 0, HUFFMAN_LOOKUP_6}, {8, 0, HUFFMAN_LOOKUP_7}, + {8, 0, HUFFMAN_LOOKUP_8}, {8, 0, HUFFMAN_LOOKUP_9}, + {8, 0, HUFFMAN_LOOKUP_10}, {8, 0, HUFFMAN_LOOKUP_11}, + {8, 0, HUFFMAN_LOOKUP_12}, {8, 0, HUFFMAN_LOOKUP_13}, + {8, 0, HUFFMAN_LOOKUP_14}, {8, 0, HUFFMAN_LOOKUP_15} + }, + { // HUFFMAN_LOOKUP_6 + // 0 + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + {1, (char)199, HUFFMAN_MATCH}, {1, (char)199, HUFFMAN_MATCH}, + // 1 + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + {1, (char)207, HUFFMAN_MATCH}, {1, (char)207, HUFFMAN_MATCH}, + }, + { // HUFFMAN_LOOKUP_7 + // 0 + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + {1, (char)234, HUFFMAN_MATCH}, {1, (char)234, HUFFMAN_MATCH}, + // 1 + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + {1, (char)235, HUFFMAN_MATCH}, {1, (char)235, HUFFMAN_MATCH}, + }, + { // HUFFMAN_LOOKUP_8 + // 00 + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + {2, (char)192, HUFFMAN_MATCH}, {2, (char)192, HUFFMAN_MATCH}, + // 01 + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + {2, (char)193, HUFFMAN_MATCH}, {2, (char)193, HUFFMAN_MATCH}, + // 10 + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + {2, (char)200, HUFFMAN_MATCH}, {2, (char)200, HUFFMAN_MATCH}, + // 11 + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + {2, (char)201, HUFFMAN_MATCH}, {2, (char)201, HUFFMAN_MATCH}, + }, + { // HUFFMAN_LOOKUP_9 + // 00 + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + {2, (char)202, HUFFMAN_MATCH}, {2, (char)202, HUFFMAN_MATCH}, + // 01 + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + {2, (char)205, HUFFMAN_MATCH}, {2, (char)205, HUFFMAN_MATCH}, + // 10 + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + {2, (char)210, HUFFMAN_MATCH}, {2, (char)210, HUFFMAN_MATCH}, + // 11 + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + {2, (char)213, HUFFMAN_MATCH}, {2, (char)213, HUFFMAN_MATCH}, + }, + { // HUFFMAN_LOOKUP_10 + // 00 + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + {2, (char)218, HUFFMAN_MATCH}, {2, (char)218, HUFFMAN_MATCH}, + // 01 + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + {2, (char)219, HUFFMAN_MATCH}, {2, (char)219, HUFFMAN_MATCH}, + // 10 + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + {2, (char)238, HUFFMAN_MATCH}, {2, (char)238, HUFFMAN_MATCH}, + // 11 + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + {2, (char)240, HUFFMAN_MATCH}, {2, (char)240, HUFFMAN_MATCH}, + }, + { // HUFFMAN_LOOKUP_11 + // 00 + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + {2, (char)242, HUFFMAN_MATCH}, {2, (char)242, HUFFMAN_MATCH}, + // 01 + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + {2, (char)243, HUFFMAN_MATCH}, {2, (char)243, HUFFMAN_MATCH}, + // 10 + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + {2, (char)255, HUFFMAN_MATCH}, {2, (char)255, HUFFMAN_MATCH}, + // 110 + {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH}, + {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH}, + {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH}, + {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH}, + {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH}, + {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH}, + {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH}, + {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH}, + {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH}, + {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH}, + {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH}, + {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH}, + {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH}, + {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH}, + {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH}, + {3, (char)203, HUFFMAN_MATCH}, {3, (char)203, HUFFMAN_MATCH}, + //111 + {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH}, + {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH}, + {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH}, + {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH}, + {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH}, + {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH}, + {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH}, + {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH}, + {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH}, + {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH}, + {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH}, + {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH}, + {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH}, + {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH}, + {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH}, + {3, (char)204, HUFFMAN_MATCH}, {3, (char)204, HUFFMAN_MATCH}, + }, + { // HUFFMAN_LOOKUP_12 + // 000 + {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH}, + {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH}, + {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH}, + {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH}, + {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH}, + {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH}, + {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH}, + {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH}, + {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH}, + {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH}, + {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH}, + {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH}, + {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH}, + {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH}, + {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH}, + {3, (char)211, HUFFMAN_MATCH}, {3, (char)211, HUFFMAN_MATCH}, + // 001 + {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH}, + {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH}, + {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH}, + {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH}, + {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH}, + {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH}, + {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH}, + {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH}, + {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH}, + {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH}, + {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH}, + {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH}, + {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH}, + {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH}, + {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH}, + {3, (char)212, HUFFMAN_MATCH}, {3, (char)212, HUFFMAN_MATCH}, + // 010 + {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH}, + {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH}, + {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH}, + {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH}, + {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH}, + {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH}, + {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH}, + {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH}, + {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH}, + {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH}, + {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH}, + {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH}, + {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH}, + {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH}, + {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH}, + {3, (char)214, HUFFMAN_MATCH}, {3, (char)214, HUFFMAN_MATCH}, + // 011 + {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH}, + {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH}, + {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH}, + {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH}, + {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH}, + {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH}, + {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH}, + {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH}, + {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH}, + {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH}, + {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH}, + {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH}, + {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH}, + {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH}, + {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH}, + {3, (char)221, HUFFMAN_MATCH}, {3, (char)221, HUFFMAN_MATCH}, + // 100 + {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH}, + {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH}, + {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH}, + {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH}, + {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH}, + {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH}, + {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH}, + {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH}, + {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH}, + {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH}, + {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH}, + {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH}, + {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH}, + {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH}, + {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH}, + {3, (char)222, HUFFMAN_MATCH}, {3, (char)222, HUFFMAN_MATCH}, + // 101 + {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH}, + {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH}, + {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH}, + {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH}, + {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH}, + {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH}, + {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH}, + {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH}, + {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH}, + {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH}, + {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH}, + {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH}, + {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH}, + {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH}, + {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH}, + {3, (char)223, HUFFMAN_MATCH}, {3, (char)223, HUFFMAN_MATCH}, + // 110 + {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH}, + {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH}, + {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH}, + {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH}, + {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH}, + {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH}, + {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH}, + {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH}, + {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH}, + {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH}, + {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH}, + {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH}, + {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH}, + {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH}, + {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH}, + {3, (char)241, HUFFMAN_MATCH}, {3, (char)241, HUFFMAN_MATCH}, + // 111 + {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH}, + {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH}, + {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH}, + {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH}, + {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH}, + {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH}, + {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH}, + {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH}, + {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH}, + {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH}, + {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH}, + {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH}, + {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH}, + {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH}, + {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH}, + {3, (char)244, HUFFMAN_MATCH}, {3, (char)244, HUFFMAN_MATCH}, + }, + { // HUFFMAN_LOOKUP_13 + // 000 + {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH}, + {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH}, + {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH}, + {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH}, + {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH}, + {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH}, + {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH}, + {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH}, + {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH}, + {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH}, + {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH}, + {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH}, + {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH}, + {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH}, + {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH}, + {3, (char)245, HUFFMAN_MATCH}, {3, (char)245, HUFFMAN_MATCH}, + // 001 + {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH}, + {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH}, + {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH}, + {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH}, + {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH}, + {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH}, + {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH}, + {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH}, + {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH}, + {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH}, + {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH}, + {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH}, + {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH}, + {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH}, + {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH}, + {3, (char)246, HUFFMAN_MATCH}, {3, (char)246, HUFFMAN_MATCH}, + // 010 + {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH}, + {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH}, + {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH}, + {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH}, + {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH}, + {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH}, + {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH}, + {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH}, + {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH}, + {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH}, + {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH}, + {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH}, + {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH}, + {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH}, + {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH}, + {3, (char)247, HUFFMAN_MATCH}, {3, (char)247, HUFFMAN_MATCH}, + // 011 + {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH}, + {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH}, + {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH}, + {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH}, + {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH}, + {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH}, + {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH}, + {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH}, + {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH}, + {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH}, + {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH}, + {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH}, + {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH}, + {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH}, + {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH}, + {3, (char)248, HUFFMAN_MATCH}, {3, (char)248, HUFFMAN_MATCH}, + // 100 + {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH}, + {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH}, + {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH}, + {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH}, + {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH}, + {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH}, + {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH}, + {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH}, + {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH}, + {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH}, + {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH}, + {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH}, + {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH}, + {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH}, + {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH}, + {3, (char)250, HUFFMAN_MATCH}, {3, (char)250, HUFFMAN_MATCH}, + // 101 + {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH}, + {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH}, + {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH}, + {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH}, + {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH}, + {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH}, + {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH}, + {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH}, + {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH}, + {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH}, + {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH}, + {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH}, + {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH}, + {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH}, + {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH}, + {3, (char)251, HUFFMAN_MATCH}, {3, (char)251, HUFFMAN_MATCH}, + // 110 + {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH}, + {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH}, + {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH}, + {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH}, + {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH}, + {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH}, + {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH}, + {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH}, + {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH}, + {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH}, + {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH}, + {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH}, + {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH}, + {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH}, + {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH}, + {3, (char)252, HUFFMAN_MATCH}, {3, (char)252, HUFFMAN_MATCH}, + // 111 + {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH}, + {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH}, + {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH}, + {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH}, + {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH}, + {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH}, + {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH}, + {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH}, + {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH}, + {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH}, + {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH}, + {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH}, + {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH}, + {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH}, + {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH}, + {3, (char)253, HUFFMAN_MATCH}, {3, (char)253, HUFFMAN_MATCH}, + }, + { // HUFFMAN_LOOKUP_14 + // 000 + {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH}, + {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH}, + {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH}, + {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH}, + {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH}, + {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH}, + {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH}, + {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH}, + {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH}, + {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH}, + {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH}, + {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH}, + {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH}, + {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH}, + {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH}, + {3, (char)254, HUFFMAN_MATCH}, {3, (char)254, HUFFMAN_MATCH}, + // 0010 + {4, (char)2, HUFFMAN_MATCH}, {4, (char)2, HUFFMAN_MATCH}, + {4, (char)2, HUFFMAN_MATCH}, {4, (char)2, HUFFMAN_MATCH}, + {4, (char)2, HUFFMAN_MATCH}, {4, (char)2, HUFFMAN_MATCH}, + {4, (char)2, HUFFMAN_MATCH}, {4, (char)2, HUFFMAN_MATCH}, + {4, (char)2, HUFFMAN_MATCH}, {4, (char)2, HUFFMAN_MATCH}, + {4, (char)2, HUFFMAN_MATCH}, {4, (char)2, HUFFMAN_MATCH}, + {4, (char)2, HUFFMAN_MATCH}, {4, (char)2, HUFFMAN_MATCH}, + {4, (char)2, HUFFMAN_MATCH}, {4, (char)2, HUFFMAN_MATCH}, + // 0011 + {4, (char)3, HUFFMAN_MATCH}, {4, (char)3, HUFFMAN_MATCH}, + {4, (char)3, HUFFMAN_MATCH}, {4, (char)3, HUFFMAN_MATCH}, + {4, (char)3, HUFFMAN_MATCH}, {4, (char)3, HUFFMAN_MATCH}, + {4, (char)3, HUFFMAN_MATCH}, {4, (char)3, HUFFMAN_MATCH}, + {4, (char)3, HUFFMAN_MATCH}, {4, (char)3, HUFFMAN_MATCH}, + {4, (char)3, HUFFMAN_MATCH}, {4, (char)3, HUFFMAN_MATCH}, + {4, (char)3, HUFFMAN_MATCH}, {4, (char)3, HUFFMAN_MATCH}, + {4, (char)3, HUFFMAN_MATCH}, {4, (char)3, HUFFMAN_MATCH}, + // 0100 + {4, (char)4, HUFFMAN_MATCH}, {4, (char)4, HUFFMAN_MATCH}, + {4, (char)4, HUFFMAN_MATCH}, {4, (char)4, HUFFMAN_MATCH}, + {4, (char)4, HUFFMAN_MATCH}, {4, (char)4, HUFFMAN_MATCH}, + {4, (char)4, HUFFMAN_MATCH}, {4, (char)4, HUFFMAN_MATCH}, + {4, (char)4, HUFFMAN_MATCH}, {4, (char)4, HUFFMAN_MATCH}, + {4, (char)4, HUFFMAN_MATCH}, {4, (char)4, HUFFMAN_MATCH}, + {4, (char)4, HUFFMAN_MATCH}, {4, (char)4, HUFFMAN_MATCH}, + {4, (char)4, HUFFMAN_MATCH}, {4, (char)4, HUFFMAN_MATCH}, + // 0101 + {4, (char)5, HUFFMAN_MATCH}, {4, (char)5, HUFFMAN_MATCH}, + {4, (char)5, HUFFMAN_MATCH}, {4, (char)5, HUFFMAN_MATCH}, + {4, (char)5, HUFFMAN_MATCH}, {4, (char)5, HUFFMAN_MATCH}, + {4, (char)5, HUFFMAN_MATCH}, {4, (char)5, HUFFMAN_MATCH}, + {4, (char)5, HUFFMAN_MATCH}, {4, (char)5, HUFFMAN_MATCH}, + {4, (char)5, HUFFMAN_MATCH}, {4, (char)5, HUFFMAN_MATCH}, + {4, (char)5, HUFFMAN_MATCH}, {4, (char)5, HUFFMAN_MATCH}, + {4, (char)5, HUFFMAN_MATCH}, {4, (char)5, HUFFMAN_MATCH}, + // 0110 + {4, (char)6, HUFFMAN_MATCH}, {4, (char)6, HUFFMAN_MATCH}, + {4, (char)6, HUFFMAN_MATCH}, {4, (char)6, HUFFMAN_MATCH}, + {4, (char)6, HUFFMAN_MATCH}, {4, (char)6, HUFFMAN_MATCH}, + {4, (char)6, HUFFMAN_MATCH}, {4, (char)6, HUFFMAN_MATCH}, + {4, (char)6, HUFFMAN_MATCH}, {4, (char)6, HUFFMAN_MATCH}, + {4, (char)6, HUFFMAN_MATCH}, {4, (char)6, HUFFMAN_MATCH}, + {4, (char)6, HUFFMAN_MATCH}, {4, (char)6, HUFFMAN_MATCH}, + {4, (char)6, HUFFMAN_MATCH}, {4, (char)6, HUFFMAN_MATCH}, + // 0111 + {4, (char)7, HUFFMAN_MATCH}, {4, (char)7, HUFFMAN_MATCH}, + {4, (char)7, HUFFMAN_MATCH}, {4, (char)7, HUFFMAN_MATCH}, + {4, (char)7, HUFFMAN_MATCH}, {4, (char)7, HUFFMAN_MATCH}, + {4, (char)7, HUFFMAN_MATCH}, {4, (char)7, HUFFMAN_MATCH}, + {4, (char)7, HUFFMAN_MATCH}, {4, (char)7, HUFFMAN_MATCH}, + {4, (char)7, HUFFMAN_MATCH}, {4, (char)7, HUFFMAN_MATCH}, + {4, (char)7, HUFFMAN_MATCH}, {4, (char)7, HUFFMAN_MATCH}, + {4, (char)7, HUFFMAN_MATCH}, {4, (char)7, HUFFMAN_MATCH}, + // 1000 + {4, (char)8, HUFFMAN_MATCH}, {4, (char)8, HUFFMAN_MATCH}, + {4, (char)8, HUFFMAN_MATCH}, {4, (char)8, HUFFMAN_MATCH}, + {4, (char)8, HUFFMAN_MATCH}, {4, (char)8, HUFFMAN_MATCH}, + {4, (char)8, HUFFMAN_MATCH}, {4, (char)8, HUFFMAN_MATCH}, + {4, (char)8, HUFFMAN_MATCH}, {4, (char)8, HUFFMAN_MATCH}, + {4, (char)8, HUFFMAN_MATCH}, {4, (char)8, HUFFMAN_MATCH}, + {4, (char)8, HUFFMAN_MATCH}, {4, (char)8, HUFFMAN_MATCH}, + {4, (char)8, HUFFMAN_MATCH}, {4, (char)8, HUFFMAN_MATCH}, + // 1001 + {4, (char)11, HUFFMAN_MATCH}, {4, (char)11, HUFFMAN_MATCH}, + {4, (char)11, HUFFMAN_MATCH}, {4, (char)11, HUFFMAN_MATCH}, + {4, (char)11, HUFFMAN_MATCH}, {4, (char)11, HUFFMAN_MATCH}, + {4, (char)11, HUFFMAN_MATCH}, {4, (char)11, HUFFMAN_MATCH}, + {4, (char)11, HUFFMAN_MATCH}, {4, (char)11, HUFFMAN_MATCH}, + {4, (char)11, HUFFMAN_MATCH}, {4, (char)11, HUFFMAN_MATCH}, + {4, (char)11, HUFFMAN_MATCH}, {4, (char)11, HUFFMAN_MATCH}, + {4, (char)11, HUFFMAN_MATCH}, {4, (char)11, HUFFMAN_MATCH}, + // 1010 + {4, (char)12, HUFFMAN_MATCH}, {4, (char)12, HUFFMAN_MATCH}, + {4, (char)12, HUFFMAN_MATCH}, {4, (char)12, HUFFMAN_MATCH}, + {4, (char)12, HUFFMAN_MATCH}, {4, (char)12, HUFFMAN_MATCH}, + {4, (char)12, HUFFMAN_MATCH}, {4, (char)12, HUFFMAN_MATCH}, + {4, (char)12, HUFFMAN_MATCH}, {4, (char)12, HUFFMAN_MATCH}, + {4, (char)12, HUFFMAN_MATCH}, {4, (char)12, HUFFMAN_MATCH}, + {4, (char)12, HUFFMAN_MATCH}, {4, (char)12, HUFFMAN_MATCH}, + {4, (char)12, HUFFMAN_MATCH}, {4, (char)12, HUFFMAN_MATCH}, + // 1011 + {4, (char)14, HUFFMAN_MATCH}, {4, (char)14, HUFFMAN_MATCH}, + {4, (char)14, HUFFMAN_MATCH}, {4, (char)14, HUFFMAN_MATCH}, + {4, (char)14, HUFFMAN_MATCH}, {4, (char)14, HUFFMAN_MATCH}, + {4, (char)14, HUFFMAN_MATCH}, {4, (char)14, HUFFMAN_MATCH}, + {4, (char)14, HUFFMAN_MATCH}, {4, (char)14, HUFFMAN_MATCH}, + {4, (char)14, HUFFMAN_MATCH}, {4, (char)14, HUFFMAN_MATCH}, + {4, (char)14, HUFFMAN_MATCH}, {4, (char)14, HUFFMAN_MATCH}, + {4, (char)14, HUFFMAN_MATCH}, {4, (char)14, HUFFMAN_MATCH}, + // 1100 + {4, (char)15, HUFFMAN_MATCH}, {4, (char)15, HUFFMAN_MATCH}, + {4, (char)15, HUFFMAN_MATCH}, {4, (char)15, HUFFMAN_MATCH}, + {4, (char)15, HUFFMAN_MATCH}, {4, (char)15, HUFFMAN_MATCH}, + {4, (char)15, HUFFMAN_MATCH}, {4, (char)15, HUFFMAN_MATCH}, + {4, (char)15, HUFFMAN_MATCH}, {4, (char)15, HUFFMAN_MATCH}, + {4, (char)15, HUFFMAN_MATCH}, {4, (char)15, HUFFMAN_MATCH}, + {4, (char)15, HUFFMAN_MATCH}, {4, (char)15, HUFFMAN_MATCH}, + {4, (char)15, HUFFMAN_MATCH}, {4, (char)15, HUFFMAN_MATCH}, + // 1101 + {4, (char)16, HUFFMAN_MATCH}, {4, (char)16, HUFFMAN_MATCH}, + {4, (char)16, HUFFMAN_MATCH}, {4, (char)16, HUFFMAN_MATCH}, + {4, (char)16, HUFFMAN_MATCH}, {4, (char)16, HUFFMAN_MATCH}, + {4, (char)16, HUFFMAN_MATCH}, {4, (char)16, HUFFMAN_MATCH}, + {4, (char)16, HUFFMAN_MATCH}, {4, (char)16, HUFFMAN_MATCH}, + {4, (char)16, HUFFMAN_MATCH}, {4, (char)16, HUFFMAN_MATCH}, + {4, (char)16, HUFFMAN_MATCH}, {4, (char)16, HUFFMAN_MATCH}, + {4, (char)16, HUFFMAN_MATCH}, {4, (char)16, HUFFMAN_MATCH}, + // 1110 + {4, (char)17, HUFFMAN_MATCH}, {4, (char)17, HUFFMAN_MATCH}, + {4, (char)17, HUFFMAN_MATCH}, {4, (char)17, HUFFMAN_MATCH}, + {4, (char)17, HUFFMAN_MATCH}, {4, (char)17, HUFFMAN_MATCH}, + {4, (char)17, HUFFMAN_MATCH}, {4, (char)17, HUFFMAN_MATCH}, + {4, (char)17, HUFFMAN_MATCH}, {4, (char)17, HUFFMAN_MATCH}, + {4, (char)17, HUFFMAN_MATCH}, {4, (char)17, HUFFMAN_MATCH}, + {4, (char)17, HUFFMAN_MATCH}, {4, (char)17, HUFFMAN_MATCH}, + {4, (char)17, HUFFMAN_MATCH}, {4, (char)17, HUFFMAN_MATCH}, + // 1111 + {4, (char)18, HUFFMAN_MATCH}, {4, (char)18, HUFFMAN_MATCH}, + {4, (char)18, HUFFMAN_MATCH}, {4, (char)18, HUFFMAN_MATCH}, + {4, (char)18, HUFFMAN_MATCH}, {4, (char)18, HUFFMAN_MATCH}, + {4, (char)18, HUFFMAN_MATCH}, {4, (char)18, HUFFMAN_MATCH}, + {4, (char)18, HUFFMAN_MATCH}, {4, (char)18, HUFFMAN_MATCH}, + {4, (char)18, HUFFMAN_MATCH}, {4, (char)18, HUFFMAN_MATCH}, + {4, (char)18, HUFFMAN_MATCH}, {4, (char)18, HUFFMAN_MATCH}, + {4, (char)18, HUFFMAN_MATCH}, {4, (char)18, HUFFMAN_MATCH}, + }, + { // HUFFMAN_LOOKUP_15 + // 0000 + {4, (char)19, HUFFMAN_MATCH}, {4, (char)19, HUFFMAN_MATCH}, + {4, (char)19, HUFFMAN_MATCH}, {4, (char)19, HUFFMAN_MATCH}, + {4, (char)19, HUFFMAN_MATCH}, {4, (char)19, HUFFMAN_MATCH}, + {4, (char)19, HUFFMAN_MATCH}, {4, (char)19, HUFFMAN_MATCH}, + {4, (char)19, HUFFMAN_MATCH}, {4, (char)19, HUFFMAN_MATCH}, + {4, (char)19, HUFFMAN_MATCH}, {4, (char)19, HUFFMAN_MATCH}, + {4, (char)19, HUFFMAN_MATCH}, {4, (char)19, HUFFMAN_MATCH}, + {4, (char)19, HUFFMAN_MATCH}, {4, (char)19, HUFFMAN_MATCH}, + // 0001 + {4, (char)20, HUFFMAN_MATCH}, {4, (char)20, HUFFMAN_MATCH}, + {4, (char)20, HUFFMAN_MATCH}, {4, (char)20, HUFFMAN_MATCH}, + {4, (char)20, HUFFMAN_MATCH}, {4, (char)20, HUFFMAN_MATCH}, + {4, (char)20, HUFFMAN_MATCH}, {4, (char)20, HUFFMAN_MATCH}, + {4, (char)20, HUFFMAN_MATCH}, {4, (char)20, HUFFMAN_MATCH}, + {4, (char)20, HUFFMAN_MATCH}, {4, (char)20, HUFFMAN_MATCH}, + {4, (char)20, HUFFMAN_MATCH}, {4, (char)20, HUFFMAN_MATCH}, + {4, (char)20, HUFFMAN_MATCH}, {4, (char)20, HUFFMAN_MATCH}, + // 0010 + {4, (char)21, HUFFMAN_MATCH}, {4, (char)21, HUFFMAN_MATCH}, + {4, (char)21, HUFFMAN_MATCH}, {4, (char)21, HUFFMAN_MATCH}, + {4, (char)21, HUFFMAN_MATCH}, {4, (char)21, HUFFMAN_MATCH}, + {4, (char)21, HUFFMAN_MATCH}, {4, (char)21, HUFFMAN_MATCH}, + {4, (char)21, HUFFMAN_MATCH}, {4, (char)21, HUFFMAN_MATCH}, + {4, (char)21, HUFFMAN_MATCH}, {4, (char)21, HUFFMAN_MATCH}, + {4, (char)21, HUFFMAN_MATCH}, {4, (char)21, HUFFMAN_MATCH}, + {4, (char)21, HUFFMAN_MATCH}, {4, (char)21, HUFFMAN_MATCH}, + // 0011 + {4, (char)23, HUFFMAN_MATCH}, {4, (char)23, HUFFMAN_MATCH}, + {4, (char)23, HUFFMAN_MATCH}, {4, (char)23, HUFFMAN_MATCH}, + {4, (char)23, HUFFMAN_MATCH}, {4, (char)23, HUFFMAN_MATCH}, + {4, (char)23, HUFFMAN_MATCH}, {4, (char)23, HUFFMAN_MATCH}, + {4, (char)23, HUFFMAN_MATCH}, {4, (char)23, HUFFMAN_MATCH}, + {4, (char)23, HUFFMAN_MATCH}, {4, (char)23, HUFFMAN_MATCH}, + {4, (char)23, HUFFMAN_MATCH}, {4, (char)23, HUFFMAN_MATCH}, + {4, (char)23, HUFFMAN_MATCH}, {4, (char)23, HUFFMAN_MATCH}, + // 0100 + {4, (char)24, HUFFMAN_MATCH}, {4, (char)24, HUFFMAN_MATCH}, + {4, (char)24, HUFFMAN_MATCH}, {4, (char)24, HUFFMAN_MATCH}, + {4, (char)24, HUFFMAN_MATCH}, {4, (char)24, HUFFMAN_MATCH}, + {4, (char)24, HUFFMAN_MATCH}, {4, (char)24, HUFFMAN_MATCH}, + {4, (char)24, HUFFMAN_MATCH}, {4, (char)24, HUFFMAN_MATCH}, + {4, (char)24, HUFFMAN_MATCH}, {4, (char)24, HUFFMAN_MATCH}, + {4, (char)24, HUFFMAN_MATCH}, {4, (char)24, HUFFMAN_MATCH}, + {4, (char)24, HUFFMAN_MATCH}, {4, (char)24, HUFFMAN_MATCH}, + // 0101 + {4, (char)25, HUFFMAN_MATCH}, {4, (char)25, HUFFMAN_MATCH}, + {4, (char)25, HUFFMAN_MATCH}, {4, (char)25, HUFFMAN_MATCH}, + {4, (char)25, HUFFMAN_MATCH}, {4, (char)25, HUFFMAN_MATCH}, + {4, (char)25, HUFFMAN_MATCH}, {4, (char)25, HUFFMAN_MATCH}, + {4, (char)25, HUFFMAN_MATCH}, {4, (char)25, HUFFMAN_MATCH}, + {4, (char)25, HUFFMAN_MATCH}, {4, (char)25, HUFFMAN_MATCH}, + {4, (char)25, HUFFMAN_MATCH}, {4, (char)25, HUFFMAN_MATCH}, + {4, (char)25, HUFFMAN_MATCH}, {4, (char)25, HUFFMAN_MATCH}, + // 0110 + {4, (char)26, HUFFMAN_MATCH}, {4, (char)26, HUFFMAN_MATCH}, + {4, (char)26, HUFFMAN_MATCH}, {4, (char)26, HUFFMAN_MATCH}, + {4, (char)26, HUFFMAN_MATCH}, {4, (char)26, HUFFMAN_MATCH}, + {4, (char)26, HUFFMAN_MATCH}, {4, (char)26, HUFFMAN_MATCH}, + {4, (char)26, HUFFMAN_MATCH}, {4, (char)26, HUFFMAN_MATCH}, + {4, (char)26, HUFFMAN_MATCH}, {4, (char)26, HUFFMAN_MATCH}, + {4, (char)26, HUFFMAN_MATCH}, {4, (char)26, HUFFMAN_MATCH}, + {4, (char)26, HUFFMAN_MATCH}, {4, (char)26, HUFFMAN_MATCH}, + // 0111 + {4, (char)27, HUFFMAN_MATCH}, {4, (char)27, HUFFMAN_MATCH}, + {4, (char)27, HUFFMAN_MATCH}, {4, (char)27, HUFFMAN_MATCH}, + {4, (char)27, HUFFMAN_MATCH}, {4, (char)27, HUFFMAN_MATCH}, + {4, (char)27, HUFFMAN_MATCH}, {4, (char)27, HUFFMAN_MATCH}, + {4, (char)27, HUFFMAN_MATCH}, {4, (char)27, HUFFMAN_MATCH}, + {4, (char)27, HUFFMAN_MATCH}, {4, (char)27, HUFFMAN_MATCH}, + {4, (char)27, HUFFMAN_MATCH}, {4, (char)27, HUFFMAN_MATCH}, + {4, (char)27, HUFFMAN_MATCH}, {4, (char)27, HUFFMAN_MATCH}, + // 1000 + {4, (char)28, HUFFMAN_MATCH}, {4, (char)28, HUFFMAN_MATCH}, + {4, (char)28, HUFFMAN_MATCH}, {4, (char)28, HUFFMAN_MATCH}, + {4, (char)28, HUFFMAN_MATCH}, {4, (char)28, HUFFMAN_MATCH}, + {4, (char)28, HUFFMAN_MATCH}, {4, (char)28, HUFFMAN_MATCH}, + {4, (char)28, HUFFMAN_MATCH}, {4, (char)28, HUFFMAN_MATCH}, + {4, (char)28, HUFFMAN_MATCH}, {4, (char)28, HUFFMAN_MATCH}, + {4, (char)28, HUFFMAN_MATCH}, {4, (char)28, HUFFMAN_MATCH}, + {4, (char)28, HUFFMAN_MATCH}, {4, (char)28, HUFFMAN_MATCH}, + // 1001 + {4, (char)29, HUFFMAN_MATCH}, {4, (char)29, HUFFMAN_MATCH}, + {4, (char)29, HUFFMAN_MATCH}, {4, (char)29, HUFFMAN_MATCH}, + {4, (char)29, HUFFMAN_MATCH}, {4, (char)29, HUFFMAN_MATCH}, + {4, (char)29, HUFFMAN_MATCH}, {4, (char)29, HUFFMAN_MATCH}, + {4, (char)29, HUFFMAN_MATCH}, {4, (char)29, HUFFMAN_MATCH}, + {4, (char)29, HUFFMAN_MATCH}, {4, (char)29, HUFFMAN_MATCH}, + {4, (char)29, HUFFMAN_MATCH}, {4, (char)29, HUFFMAN_MATCH}, + {4, (char)29, HUFFMAN_MATCH}, {4, (char)29, HUFFMAN_MATCH}, + // 1010 + {4, (char)30, HUFFMAN_MATCH}, {4, (char)30, HUFFMAN_MATCH}, + {4, (char)30, HUFFMAN_MATCH}, {4, (char)30, HUFFMAN_MATCH}, + {4, (char)30, HUFFMAN_MATCH}, {4, (char)30, HUFFMAN_MATCH}, + {4, (char)30, HUFFMAN_MATCH}, {4, (char)30, HUFFMAN_MATCH}, + {4, (char)30, HUFFMAN_MATCH}, {4, (char)30, HUFFMAN_MATCH}, + {4, (char)30, HUFFMAN_MATCH}, {4, (char)30, HUFFMAN_MATCH}, + {4, (char)30, HUFFMAN_MATCH}, {4, (char)30, HUFFMAN_MATCH}, + {4, (char)30, HUFFMAN_MATCH}, {4, (char)30, HUFFMAN_MATCH}, + // 1011 + {4, (char)31, HUFFMAN_MATCH}, {4, (char)31, HUFFMAN_MATCH}, + {4, (char)31, HUFFMAN_MATCH}, {4, (char)31, HUFFMAN_MATCH}, + {4, (char)31, HUFFMAN_MATCH}, {4, (char)31, HUFFMAN_MATCH}, + {4, (char)31, HUFFMAN_MATCH}, {4, (char)31, HUFFMAN_MATCH}, + {4, (char)31, HUFFMAN_MATCH}, {4, (char)31, HUFFMAN_MATCH}, + {4, (char)31, HUFFMAN_MATCH}, {4, (char)31, HUFFMAN_MATCH}, + {4, (char)31, HUFFMAN_MATCH}, {4, (char)31, HUFFMAN_MATCH}, + {4, (char)31, HUFFMAN_MATCH}, {4, (char)31, HUFFMAN_MATCH}, + // 1100 + {4, (char)127, HUFFMAN_MATCH}, {4, (char)127, HUFFMAN_MATCH}, + {4, (char)127, HUFFMAN_MATCH}, {4, (char)127, HUFFMAN_MATCH}, + {4, (char)127, HUFFMAN_MATCH}, {4, (char)127, HUFFMAN_MATCH}, + {4, (char)127, HUFFMAN_MATCH}, {4, (char)127, HUFFMAN_MATCH}, + {4, (char)127, HUFFMAN_MATCH}, {4, (char)127, HUFFMAN_MATCH}, + {4, (char)127, HUFFMAN_MATCH}, {4, (char)127, HUFFMAN_MATCH}, + {4, (char)127, HUFFMAN_MATCH}, {4, (char)127, HUFFMAN_MATCH}, + {4, (char)127, HUFFMAN_MATCH}, {4, (char)127, HUFFMAN_MATCH}, + // 1101 + {4, (char)220, HUFFMAN_MATCH}, {4, (char)220, HUFFMAN_MATCH}, + {4, (char)220, HUFFMAN_MATCH}, {4, (char)220, HUFFMAN_MATCH}, + {4, (char)220, HUFFMAN_MATCH}, {4, (char)220, HUFFMAN_MATCH}, + {4, (char)220, HUFFMAN_MATCH}, {4, (char)220, HUFFMAN_MATCH}, + {4, (char)220, HUFFMAN_MATCH}, {4, (char)220, HUFFMAN_MATCH}, + {4, (char)220, HUFFMAN_MATCH}, {4, (char)220, HUFFMAN_MATCH}, + {4, (char)220, HUFFMAN_MATCH}, {4, (char)220, HUFFMAN_MATCH}, + {4, (char)220, HUFFMAN_MATCH}, {4, (char)220, HUFFMAN_MATCH}, + // 1110 + {4, (char)249, HUFFMAN_MATCH}, {4, (char)249, HUFFMAN_MATCH}, + {4, (char)249, HUFFMAN_MATCH}, {4, (char)249, HUFFMAN_MATCH}, + {4, (char)249, HUFFMAN_MATCH}, {4, (char)249, HUFFMAN_MATCH}, + {4, (char)249, HUFFMAN_MATCH}, {4, (char)249, HUFFMAN_MATCH}, + {4, (char)249, HUFFMAN_MATCH}, {4, (char)249, HUFFMAN_MATCH}, + {4, (char)249, HUFFMAN_MATCH}, {4, (char)249, HUFFMAN_MATCH}, + {4, (char)249, HUFFMAN_MATCH}, {4, (char)249, HUFFMAN_MATCH}, + {4, (char)249, HUFFMAN_MATCH}, {4, (char)249, HUFFMAN_MATCH}, + // 111100 + {6, (char)10, HUFFMAN_MATCH}, {6, (char)10, HUFFMAN_MATCH}, + {6, (char)10, HUFFMAN_MATCH}, {6, (char)10, HUFFMAN_MATCH}, + // 111101 + {6, (char)13, HUFFMAN_MATCH}, {6, (char)13, HUFFMAN_MATCH}, + {6, (char)13, HUFFMAN_MATCH}, {6, (char)13, HUFFMAN_MATCH}, + // 111110 + {6, (char)22, HUFFMAN_MATCH}, {6, (char)22, HUFFMAN_MATCH}, + {6, (char)22, HUFFMAN_MATCH}, {6, (char)22, HUFFMAN_MATCH}, + // 111111 + {6, (char)0, HUFFMAN_FAILURE}, {6, (char)0, HUFFMAN_FAILURE}, + {6, (char)0, HUFFMAN_FAILURE}, {6, (char)0, HUFFMAN_FAILURE}, + }, +}; diff --git a/src/service_inspectors/http2_inspect/http2_huffman_state_machine.h b/src/service_inspectors/http2_inspect/http2_huffman_state_machine.h new file mode 100644 index 000000000..869be6580 --- /dev/null +++ b/src/service_inspectors/http2_inspect/http2_huffman_state_machine.h @@ -0,0 +1,57 @@ +//-------------------------------------------------------------------------- +// Copyright (C) 2019-2019 Cisco and/or its affiliates. All rights reserved. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License Version 2 as published +// by the Free Software Foundation. You may not use, modify or distribute +// this program under any other version of the GNU General Public License. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +//-------------------------------------------------------------------------- +// http2_huffman_state_machine.h author Maya Dagon + +#ifndef HTTP2_HUFFMAN_STATE_MACHINE_H +#define HTTP2_HUFFMAN_STATE_MACHINE_H + +#include "main/snort_types.h" + +enum HuffmanState +{ + HUFFMAN_LOOKUP_1 = 0, + HUFFMAN_LOOKUP_2 = 1, + HUFFMAN_LOOKUP_3 = 2, + HUFFMAN_LOOKUP_4 = 3, + HUFFMAN_LOOKUP_5 = 4, + HUFFMAN_LOOKUP_6 = 5, + HUFFMAN_LOOKUP_7 = 6, + HUFFMAN_LOOKUP_8 = 7, + HUFFMAN_LOOKUP_9 = 8, + HUFFMAN_LOOKUP_10 = 9, + HUFFMAN_LOOKUP_11 = 10, + HUFFMAN_LOOKUP_12 = 11, + HUFFMAN_LOOKUP_13 = 12, + HUFFMAN_LOOKUP_14 = 13, + HUFFMAN_LOOKUP_15 = 14, + HUFFMAN_LOOKUP_MAX = HUFFMAN_LOOKUP_15, + HUFFMAN_MATCH = HUFFMAN_LOOKUP_MAX + 1, + HUFFMAN_FAILURE = HUFFMAN_MATCH + 1 +}; + +struct HuffmanEntry +{ + uint8_t len; + char symbol; + HuffmanState state; +}; + +extern const HuffmanEntry huffman_decode[][UINT8_MAX+1]; + +#endif + diff --git a/src/service_inspectors/http2_inspect/test/CMakeLists.txt b/src/service_inspectors/http2_inspect/test/CMakeLists.txt index 37e0ed038..81320eea2 100644 --- a/src/service_inspectors/http2_inspect/test/CMakeLists.txt +++ b/src/service_inspectors/http2_inspect/test/CMakeLists.txt @@ -19,7 +19,8 @@ add_cpputest( http2_hpack_int_decode_test ../http2_hpack_int_decode.cc ) add_cpputest( http2_hpack_string_decode_test - SOURCES + SOURCES + ../http2_huffman_state_machine.cc ../http2_hpack_int_decode.cc ../http2_hpack_string_decode.cc ) diff --git a/src/service_inspectors/http2_inspect/test/http2_hpack_string_decode_test.cc b/src/service_inspectors/http2_inspect/test/http2_hpack_string_decode_test.cc index 478fef0ac..1cb648e64 100644 --- a/src/service_inspectors/http2_inspect/test/http2_hpack_string_decode_test.cc +++ b/src/service_inspectors/http2_inspect/test/http2_hpack_string_decode_test.cc @@ -23,6 +23,7 @@ #endif #include "../http2_enum.h" +#include "../http2_huffman_state_machine.h" #include "../http2_hpack_string_decode.h" #include "../../http_inspect/http_enum.h" @@ -154,6 +155,403 @@ TEST(http2_hpack_string_decode_success, max_field_length) CHECK(memcmp(res, &buf[4], bytes_written) == 0); } +TEST(http2_hpack_string_decode_success, huffman_1_byte) +{ + // prepare buf to decode - Huffman '%' + uint8_t buf[2] = {0x81, 0x57}; + // decode + uint32_t bytes_processed = 0, bytes_written = 0; + uint8_t res[1]; + bool success = decode->translate(buf, 2, bytes_processed, res, 1, bytes_written); + // check results + CHECK(success == true); + CHECK(bytes_processed == 2); + CHECK(bytes_written == 1); + CHECK(res[0] == '%'); +} + +TEST(http2_hpack_string_decode_success, huffman_1_byte_star) +{ + // prepare buf to decode - Huffman '*' + uint8_t buf[2] = {0x81, 0xf9}; + // decode + uint32_t bytes_processed = 0, bytes_written = 0; + uint8_t res[1]; + bool success = decode->translate(buf, 2, bytes_processed, res, 1, bytes_written); + // check results + CHECK(success == true); + CHECK(bytes_processed == 2); + CHECK(bytes_written == 1); + CHECK(res[0] == '*'); +} + +TEST(http2_hpack_string_decode_success, huffman_2_bytes_aligned) +{ + // prepare buf to decode - Huffman "&&" + uint8_t buf[3] = {0x82, 0xf8, 0xf8}; + // decode + uint32_t bytes_processed = 0, bytes_written = 0; + uint8_t res[3]; + bool success = decode->translate(buf, 3, bytes_processed, res, 3, bytes_written); + // check results + CHECK(success == true); + CHECK(bytes_processed == 3); + CHECK(bytes_written == 2); + CHECK(memcmp(res, "&&", 2) == 0); +} + +TEST(http2_hpack_string_decode_success, huffman_2_bytes_unaligned) +{ + // prepare buf to decode - Huffman "%%" + uint8_t buf[3] = {0x82, 0x55, 0x5f}; + // decode + uint32_t bytes_processed = 0, bytes_written = 0; + uint8_t res[3]; + bool success = decode->translate(buf, 3, bytes_processed, res, 3, bytes_written); + // check results + CHECK(success == true); + CHECK(bytes_processed == 3); + CHECK(bytes_written == 2); + CHECK(memcmp(res, "%%", 2) == 0); +} + +TEST(http2_hpack_string_decode_success, huffman_rfc_example1) +{ + // prepare buf to decode - Huffman "www.example.com" , RFC c.4.1 + uint8_t buf[13] = {0x8c, 0xf1, 0xe3, 0xc2, 0xe5, 0xf2, 0x3a, 0x6b, 0xa0, 0xab, 0x90, 0xf4, 0xff}; + // decode + uint32_t bytes_processed = 0, bytes_written = 0; + uint8_t res[19]; + bool success = decode->translate(buf, 13, bytes_processed, res, 19, bytes_written); + // check results + CHECK(success == true); + CHECK(bytes_processed == 13); + CHECK(bytes_written == 15); + CHECK(memcmp(res, "www.example.com", 15) == 0); +} + +TEST(http2_hpack_string_decode_success, huffman_rfc_example2) +{ + // prepare buf to decode - Huffman "no-cache" , RFC c.4.2 + uint8_t buf[7] = {0x86, 0xa8, 0xeb, 0x10, 0x64, 0x9c, 0xbf}; + // decode + uint32_t bytes_processed = 0, bytes_written = 0; + uint8_t res[9]; + bool success = decode->translate(buf, 7, bytes_processed, res, 9, bytes_written); + // check results + CHECK(success == true); + CHECK(bytes_processed == 7); + CHECK(bytes_written == 8); + CHECK(memcmp(res, "no-cache", 8) == 0); +} + +TEST(http2_hpack_string_decode_success, huffman_rfc_example3) +{ + // prepare buf to decode - Huffman "custom-key" , RFC c.4.3 + uint8_t buf[9] = {0x88, 0x25, 0xa8, 0x49, 0xe9, 0x5b, 0xa9, 0x7d, 0x7f}; + // decode + uint32_t bytes_processed = 0, bytes_written = 0; + uint8_t res[12]; + bool success = decode->translate(buf, 9, bytes_processed, res, 12, bytes_written); + // check results + CHECK(success == true); + CHECK(bytes_processed == 9); + CHECK(bytes_written == 10); + CHECK(memcmp(res, "custom-key", 10) == 0); +} + +TEST(http2_hpack_string_decode_success, huffman_rfc_example4) +{ + // prepare buf to decode - Huffman "custom-value" , RFC c.4.3 + uint8_t buf[10] = {0x89, 0x25, 0xa8, 0x49, 0xe9, 0x5b, 0xb8, 0xe8, 0xb4, 0xbf}; + // decode + uint32_t bytes_processed = 0, bytes_written = 0; + uint8_t res[14]; + bool success = decode->translate(buf, 10, bytes_processed, res, 14, bytes_written); + // check results + CHECK(success == true); + CHECK(bytes_processed == 10); + CHECK(bytes_written == 12); + CHECK(memcmp(res, "custom-value", 12) == 0); +} + +TEST(http2_hpack_string_decode_success, huffman_rfc_example5) +{ + // prepare buf to decode - Huffman "Mon, 21 Oct 2013 20:13:21 GMT" , RFC c.6.1 + uint8_t buf[23] = {0x96, 0xd0, 0x7a, 0xbe, 0x94, 0x10, 0x54, 0xd4, 0x44, 0xa8, 0x20, + 0x05, 0x95, 0x04, 0x0b, 0x81, 0x66, 0xe0, 0x82, 0xa6, 0x2d, 0x1b, 0xff}; + // decode + uint32_t bytes_processed = 0, bytes_written = 0; + uint8_t res[35]; + bool success = decode->translate(buf, 23, bytes_processed, res, 35, bytes_written); + // check results + CHECK(success == true); + CHECK(bytes_processed == 23); + CHECK(bytes_written == 29); + CHECK(memcmp(res, "Mon, 21 Oct 2013 20:13:21 GMT", 29) == 0); +} + +TEST(http2_hpack_string_decode_success, huffman_rfc_example6) +{ + // prepare buf to decode - Huffman "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1" , RFC c.6.3 + uint8_t buf[46] = {0xad, 0x94, 0xe7, 0x82, 0x1d, 0xd7, 0xf2, 0xe6, 0xc7, 0xb3, 0x35, 0xdf, + 0xdf, 0xcd, 0x5b, 0x39, 0x60, 0xd5, 0xaf, 0x27, 0x08, 0x7f, 0x36, 0x72, + 0xc1, 0xab, 0x27, 0x0f, 0xb5, 0x29, 0x1f, 0x95, 0x87, 0x31, 0x60, 0x65, + 0xc0, 0x03, 0xed, 0x4e, 0xe5, 0xb1, 0x06, 0x3d, 0x50, 0x07}; + // decode + uint32_t bytes_processed = 0, bytes_written = 0; + uint8_t res[73]; + bool success = decode->translate(buf, 46, bytes_processed, res, 73, bytes_written); + // check results + CHECK(success == true); + CHECK(bytes_processed == 46); + CHECK(bytes_written == 56); + CHECK(memcmp(res, "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1", 56) == 0); +} + +TEST(http2_hpack_string_decode_success, huffman_unaligned_then_aligned) +{ + // prepare buf to decode - Huffman first 4 symbols are 6 bit each, followed by 8 bit + uint8_t buf[5] = {0x84, 0x59, 0x76, 0x19, 0xfa}; + // decode + uint32_t bytes_processed = 0, bytes_written = 0; + uint8_t res[6]; + bool success = decode->translate(buf, 5, bytes_processed, res, 6, bytes_written); + // check results + CHECK(success == true); + CHECK(bytes_processed == 5); + CHECK(bytes_written == 5); + CHECK(memcmp(res, "-./3,", 5) == 0); +} + +TEST(http2_hpack_string_decode_success, huffman_decoding_all_possible_symbols_1) +{ + // prepare buf to decode - "abcdefghijklmnopqrstuvwxyz" + uint8_t buf[21] = {0x94, 0x1c, 0x64, 0x90, 0xb2, 0xcd, 0x39, 0xba, 0x75, 0xa2, 0x9a, 0x8f, 0x5f, 0x6b, + 0x10, 0x9b, 0x7b, 0xf8, 0xf3, 0xeb, 0xdf}; + // decode + uint32_t bytes_processed = 0, bytes_written = 0; + uint8_t res[32]; + bool success = decode->translate(buf, 21, bytes_processed, res, 32, bytes_written); + // check results + CHECK(success == true); + CHECK(bytes_processed == 21); + CHECK(bytes_written == 26); + CHECK(memcmp(res, "abcdefghijklmnopqrstuvwxyz", 26) == 0); +} + +TEST(http2_hpack_string_decode_success, huffman_decoding_all_possible_symbols_2) +{ + // prepare buf to decode - "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + uint8_t buf[24] = {0x97, 0x86, 0xed, 0xeb, 0xf8, 0x30, 0xe2, 0xc7, 0x93, 0x2e, 0x6c, 0xfa, 0x34, 0xea, + 0xd7, 0xb3, 0x6e, 0xed, 0xfc, 0x38, 0xf2, 0xfc, 0xe7, 0xfb}; + // decode + uint32_t bytes_processed = 0, bytes_written = 0; + uint8_t res[36]; + bool success = decode->translate(buf, 24, bytes_processed, res, 36, bytes_written); + // check results + CHECK(success == true); + CHECK(bytes_processed == 24); + CHECK(bytes_written == 26); + CHECK(memcmp(res, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 26) == 0); +} + +TEST(http2_hpack_string_decode_success, huffman_decoding_all_possible_symbols_3) +{ + // prepare buf to decode - "0123456789" + uint8_t buf[9] = {0x88, 0x00, 0x44, 0xcb, 0x4d, 0xb8, 0xeb, 0xcf, 0xff}; + // decode + uint32_t bytes_processed = 0, bytes_written = 0; + uint8_t res[12]; + bool success = decode->translate(buf, 9, bytes_processed, res, 12, bytes_written); + // check results + CHECK(success == true); + CHECK(bytes_processed == 9); + CHECK(bytes_written == 10); + CHECK(memcmp(res, "0123456789", 10) == 0); +} + +TEST(http2_hpack_string_decode_success, huffman_decoding_all_possible_symbols_4) +{ + // prepare buf to decode - ' !"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~' + uint8_t buf[45] = {0xAC, 0x53, 0xF8, 0xFE, 0x7F, 0xEB, 0xFF, 0x2A, 0xFC, 0X7F, 0xAF, 0xEB, 0xFB, 0xF9, 0xFF, 0x7F, 0x4B, 0x2E, 0xC5, 0xCF, 0xBF, 0xFF, 0x90, 0x7F, 0xDF, 0xF9, 0xFF, 0xAF, 0xFD, 0xFF, 0xFF, 0x0F, 0xFE, 0x7F, 0xF9, 0x17, 0xFF, 0xDF, 0xFF, 0xDF, 0xF3, 0xFF, 0xDF, 0xFE, 0xFF}; + // decode + uint32_t bytes_processed = 0, bytes_written = 0; + uint8_t res[70]; + bool success = decode->translate(buf, 45, bytes_processed, res, 70, bytes_written); + // check results + CHECK(success == true); + CHECK(bytes_processed == 45); + CHECK(bytes_written == 33); + CHECK(memcmp(res, " !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", 33) == 0); +} + +TEST(http2_hpack_string_decode_success, huffman_decoding_all_possible_symbols_hex_00_0F) +{ + // prepare buf to decode - encoded 0x00-0x0F + uint8_t buf[55] = {0xB6, 0xFF, 0xC7, 0xFF, 0xFD, 0x8F, 0xFF, 0xFF, 0xE2, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xE4, 0xFF, 0xFF, 0xFE, 0x5F, 0xFF, 0xFF, 0xE6, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xE8, 0xFF, 0xFF, 0xEA, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFA, 0x7F, 0xFF, 0xFF, 0xAB, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xEB, 0xFF, 0xFF, 0xFE, 0xCF}; + // decode + uint32_t bytes_processed = 0, bytes_written = 0; + uint8_t res[88]; + uint8_t expected[16] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F}; + bool success = decode->translate(buf, 55, bytes_processed, res, 88, bytes_written); + // check results + CHECK(success == true); + CHECK(bytes_processed == 55); + CHECK(bytes_written == 16); + CHECK(memcmp(res, expected, 16) == 0); +} + +TEST(http2_hpack_string_decode_success, huffman_decoding_all_possible_symbols_hex_10_1F) +{ + // prepare buf to decode - encoded 0x10-0x1F + uint8_t buf[58] = {0xB9, 0xFF, 0xFF, 0xFE, 0xDF, 0xFF, 0xFF, 0xEE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xF2, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xD3, 0xFF, 0xFF, 0xFD, 0x7F, 0xFF, 0xFF, 0xDB, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xEB, 0xFF, 0xFF, 0xFE, 0xFF}; + // decode + uint32_t bytes_processed = 0, bytes_written = 0; + uint8_t res[93]; + uint8_t expected[16] = {0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F}; + bool success = decode->translate(buf, 58, bytes_processed, res, 93, bytes_written); + // check results + CHECK(success == true); + CHECK(bytes_processed == 58); + CHECK(bytes_written == 16); + CHECK(memcmp(res, expected, 16) == 0); +} + +TEST(http2_hpack_string_decode_success, huffman_decoding_all_possible_symbols_hex_7F_8F) +{ + // prepare buf to decode - encoded 0x7F-0x8F + uint8_t buf[49] = {0xB0, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xE6, 0xFF, 0xFF, 0x4B, 0xFF, 0xF9, 0xFF, 0xFF, 0xA3, 0xFF, 0xFD, 0x3F, 0xFF, 0xF5, 0x3F, 0xFF, 0xD5, 0xFF, 0xFF, 0xB3, 0xFF, 0xFE, 0xB7, 0xFF, 0xFD, 0xAF, 0xFF, 0xFB, 0x7F, 0xFF, 0xF7, 0x3F, 0xFF, 0xEE, 0xFF, 0xFF, 0xDE, 0xFF, 0xFF, 0xEB, 0xFF, 0xFF, 0xBF}; + // decode + uint32_t bytes_processed = 0, bytes_written = 0; + uint8_t res[79]; + uint8_t expected[17] = {0x7F, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F}; + bool success = decode->translate(buf, 49, bytes_processed, res, 79, bytes_written); + // check results + CHECK(success == true); + CHECK(bytes_processed == 49); + CHECK(bytes_written == 17); + CHECK(memcmp(res, expected, 17) == 0); +} + +TEST(http2_hpack_string_decode_success, huffman_decoding_all_possible_symbols_hex_90_9F) +{ + // prepare buf to decode - encoded 0x90-0x9F + uint8_t buf[47] = {0xAE, 0xFF, 0xFF, 0xEC, 0xFF, 0xFF, 0xED, 0xFF, 0xFF, 0x5F, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0x77, 0xFF, 0xFE, 0x1F, 0xFF, 0xFC, 0x5F, 0xFF, 0xF8, 0xFF, 0xFF, 0xF2, 0x7F, 0xFF, 0x73, 0xFF, 0xFD, 0x8F, 0xFF, 0xFC, 0xBF, 0xFF, 0xEC, 0xFF, 0xFF, 0xE6, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xDF}; + + // decode + uint32_t bytes_processed = 0, bytes_written = 0; + uint8_t res[76]; + uint8_t expected[16] = {0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F}; + bool success = decode->translate(buf, 47, bytes_processed, res, 76, bytes_written); + // check results + CHECK(success == true); + CHECK(bytes_processed == 47); + CHECK(bytes_written == 16); + CHECK(memcmp(res, expected, 16) == 0); +} +TEST(http2_hpack_string_decode_success, huffman_decoding_all_possible_symbols_hex_A0_AF) +{ + // prepare buf to decode - encoded 0xA0-0xAF + uint8_t buf[46] = {0xAD, 0xFF, 0xFF, 0x6B, 0xFF, 0xFB, 0xBF, 0xFF, 0xD3, 0xFF, 0xFE, 0xDF, 0xFF, 0xFB, 0x9F, 0xFF, 0xFA, 0x3F, 0xFF, 0xF4, 0xFF, 0xFF, 0x7B, 0xFF, 0xFF, 0x57, 0xFF, 0xFB, 0xBF, 0xFF, 0xEF, 0x7F, 0xFF, 0xF8, 0x7F, 0xFF, 0x7F, 0xFF, 0xFD, 0xFF, 0xFF, 0xFD, 0x7F, 0xFF, 0xFB, 0x3F}; + + // decode + uint32_t bytes_processed = 0, bytes_written = 0; + uint8_t res[74]; + uint8_t expected[16] = {0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF}; + bool success = decode->translate(buf, 46, bytes_processed, res, 74, bytes_written); + // check results + CHECK(success == true); + CHECK(bytes_processed == 46); + CHECK(bytes_written == 16); + CHECK(memcmp(res, expected, 16) == 0); +} + +TEST(http2_hpack_string_decode_success, huffman_decoding_all_possible_symbols_hex_B0_BF) +{ + // prepare buf to decode - encoded 0xB0-0xBF + uint8_t buf[45] = {0xAC, 0xFF, 0xFF, 0x07, 0xFF, 0xF8, 0x7F, 0xFF, 0xE0, 0xFF, 0xFF, 0x17, 0xFF, 0xFE, 0xDF, 0xFF, 0xF8, 0x7F, 0xFF, 0xF7, 0x7F, 0xFF, 0xEF, 0xFF, 0xFE, 0xAF, 0xFF, 0xF8, 0xBF, 0xFF, 0xE3, 0xFF, 0xFF, 0x93, 0xFF, 0xFF, 0x87, 0xFF, 0xFC, 0xBF, 0xFF, 0xF3, 0x7F, 0xFF, 0xF1}; + + // decode + uint32_t bytes_processed = 0, bytes_written = 0; + uint8_t res[73]; + uint8_t expected[16] = {0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF}; + bool success = decode->translate(buf, 45, bytes_processed, res, 73, bytes_written); + // check results + CHECK(success == true); + CHECK(bytes_processed == 45); + CHECK(bytes_written == 16); + CHECK(memcmp(res, expected, 16) == 0); +} + +TEST(http2_hpack_string_decode_success, huffman_decoding_all_possible_symbols_hex_C0_CF) +{ + // prepare buf to decode - encoded 0xC0-0xCF + uint8_t buf[50] = {0xB1, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFE, 0x1F, 0xFF, 0xEB, 0xFF, 0xFE, 0x3F, 0xFF, 0xF3, 0xFF, 0xFF, 0xF2, 0xFF, 0xFF, 0xA3, 0xFF, 0xFF, 0xD9, 0xFF, 0xFF, 0xF1, 0x7F, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0x27, 0xFF, 0xFF, 0xDE, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0x2F, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xB7}; + + // decode + uint32_t bytes_processed = 0, bytes_written = 0; + uint8_t res[80]; + uint8_t expected[16] = {0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF}; + bool success = decode->translate(buf, 50, bytes_processed, res, 80, bytes_written); + // check results + CHECK(success == true); + CHECK(bytes_processed == 50); + CHECK(bytes_written == 16); + CHECK(memcmp(res, expected, 16) == 0); +} + +TEST(http2_hpack_string_decode_success, huffman_decoding_all_possible_symbols_hex_D0_DF) +{ + // prepare buf to decode - encoded 0xD0-0xDF + uint8_t buf[51] = {0xB2, 0xFF, 0xFE, 0x5F, 0xFF, 0xE3, 0xFF, 0xFF, 0xF9, 0xBF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xE1, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0x17, 0xFF, 0xFF, 0x97, 0xFF, 0xF9, 0x3F, 0xFF, 0xCB, 0xFF, 0xFF, 0xF4, 0x7F, 0xFF, 0xFD, 0x3F, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x27, 0xFF, 0xFF, 0xE5}; + + // decode + uint32_t bytes_processed = 0, bytes_written = 0; + uint8_t res[82]; + uint8_t expected[16] = {0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF}; + bool success = decode->translate(buf, 51, bytes_processed, res, 82, bytes_written); + // check results + CHECK(success == true); + CHECK(bytes_processed == 51); + CHECK(bytes_written == 16); + CHECK(memcmp(res, expected, 16) == 0); +} + +TEST(http2_hpack_string_decode_success, huffman_decoding_all_possible_symbols_hex_E0_EF) +{ + // prepare buf to decode - encoded 0xE0-0xEF + uint8_t buf[47] = {0xAE, 0xFF, 0xFE, 0xCF, 0xFF, 0xFF, 0x3F, 0xFF, 0xED, 0xFF, 0xFF, 0x37, 0xFF, 0xFD, 0x3F, 0xFF, 0xE7, 0xFF, 0xFF, 0x47, 0xFF, 0xFF, 0x3F, 0xFF, 0xFA, 0xBF, 0xFF, 0xEB, 0xFF, 0xFF, 0xF7, 0x7F, 0xFF, 0xFB, 0xFF, 0xFF, 0xFD, 0x3F, 0xFF, 0xFD, 0x7F, 0xFF, 0xFE, 0xAF, 0xFF, 0xFE, 0x9F}; + + // decode + uint32_t bytes_processed = 0, bytes_written = 0; + uint8_t res[76]; + uint8_t expected[16] = {0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF}; + bool success = decode->translate(buf, 47, bytes_processed, res, 76, bytes_written); + // check results + CHECK(success == true); + CHECK(bytes_processed == 47); + CHECK(bytes_written == 16); + CHECK(memcmp(res, expected, 16) == 0); +} + +TEST(http2_hpack_string_decode_success, huffman_decoding_all_possible_symbols_hex_F0_FF) +{ + // prepare buf to decode - encoded 0xF0-0xFF + uint8_t buf[55] = {0xB6, 0xFF, 0xFF, 0xFA, 0xFF, 0xFF, 0xFF, 0x37, 0xFF, 0xFF, 0xD9, 0xFF, 0xFF, 0xF6, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xD1, 0xFF, 0xFF, 0xFA, 0x7F, 0xFF, 0xFF, 0x57, 0xFF, 0xFF, 0xEB, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xD9, 0xFF, 0xFF, 0xFB, 0x7F, 0xFF, 0xFF, 0x77, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0x77}; + + // decode + uint32_t bytes_processed = 0, bytes_written = 0; + uint8_t res[88]; + uint8_t expected[16] = {0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF}; + bool success = decode->translate(buf, 55, bytes_processed, res, 88, bytes_written); + // check results + CHECK(success == true); + CHECK(bytes_processed == 55); + CHECK(bytes_written == 16); + CHECK(memcmp(res, expected, 16) == 0); +} + // // The following tests should trigger infractions/events // @@ -253,7 +651,7 @@ TEST(http2_hpack_string_decode_infractions, out_buf_out_of_space) Http2EventGen local_events; Http2Infractions local_inf; Http2HpackStringDecode local_decode(&local_events, &local_inf); - // prepare buf to decode + // prepare buf to decode uint8_t buf[HttpEnums::MAX_OCTETS]; buf[0] = 0x7F; buf[1] = 0xA1; @@ -273,6 +671,168 @@ TEST(http2_hpack_string_decode_infractions, out_buf_out_of_space) CHECK(local_events.get_raw() == (1<<(EVENT_STRING_DECODE_FAILURE-1))); } +TEST(http2_hpack_string_decode_infractions, huffman_1_byte_bad_padding) +{ + // prepare decode object + Http2EventGen local_events; + Http2Infractions local_inf; + Http2HpackStringDecode local_decode(&local_events, &local_inf); + // prepare buf to decode - bad padding + uint8_t buf[2] = { 0x81, 0x54 }; + // decode + uint32_t bytes_processed = 0, bytes_written = 0; + uint8_t res[2]; + bool success = local_decode.translate(buf, 2, bytes_processed, res, 2, bytes_written); + // check results + CHECK(success == false); + CHECK(bytes_processed == 2); + CHECK(bytes_written == 1); + CHECK(local_inf.get_raw() == (1<