Skip to main content

dsi_bitstream/codes/
zeta_tables.rs

1#![doc(hidden)]
2// THIS FILE HAS BEEN GENERATED BY THE SCRIPT gen_code_tables.py
3// ~~~~~~~~~~~~~~~~~~~ DO NOT MODIFY ~~~~~~~~~~~~~~~~~~~~~~
4// Methods for reading and writing values using precomputed tables for zeta codes
5use crate::traits::{BE, BitRead, BitWrite, LE};
6use num_primitive::PrimitiveNumber;
7/// How many bits are needed to read the tables
8pub const READ_BITS: usize = 12;
9/// Maximum value writable using the table(s)
10pub const WRITE_MAX: u64 = 1023;
11
12/// Reads a value using a decoding table.
13///
14/// If the result is `Some` the decoding was successful, and
15/// the decoded value and the length of the code are returned.
16#[inline(always)]
17pub fn read_table_le<B: BitRead<LE>>(backend: &mut B) -> Option<(u64, usize)> {
18    if let Ok(idx) = backend.peek_bits(READ_BITS) {
19        let idx: usize = idx.as_to();
20        let len = READ_LEN_LE[idx];
21        if len != MISSING_VALUE_LEN_LE {
22            backend.skip_bits_after_peek(len as usize);
23            return Some((READ_LE[idx] as u64, len as usize));
24        }
25    }
26    None
27}
28
29/// Writes a value using an encoding table.
30///
31/// If the result is `Some` the encoding was successful, and
32/// length of the code is returned.
33#[inline(always)]
34pub fn write_table_le<B: BitWrite<LE>>(backend: &mut B, n: u64) -> Result<Option<usize>, B::Error> {
35    // We cannot use .get() here because n is a u64
36    if n >= WRITE_LE.len() as u64 {
37        return Ok(None);
38    }
39    let n = n as usize;
40    let len = WRITE_LEN_LE[n] as usize;
41    backend.write_bits(WRITE_LE[n] as u64, len)?;
42    Ok(Some(len))
43}
44
45/// Reads a value using a decoding table.
46///
47/// If the result is `Some` the decoding was successful, and
48/// the decoded value and the length of the code are returned.
49#[inline(always)]
50pub fn read_table_be<B: BitRead<BE>>(backend: &mut B) -> Option<(u64, usize)> {
51    if let Ok(idx) = backend.peek_bits(READ_BITS) {
52        let idx: usize = idx.as_to();
53        let len = READ_LEN_BE[idx];
54        if len != MISSING_VALUE_LEN_BE {
55            backend.skip_bits_after_peek(len as usize);
56            return Some((READ_BE[idx] as u64, len as usize));
57        }
58    }
59    None
60}
61
62/// Writes a value using an encoding table.
63///
64/// If the result is `Some` the encoding was successful, and
65/// length of the code is returned.
66#[inline(always)]
67pub fn write_table_be<B: BitWrite<BE>>(backend: &mut B, n: u64) -> Result<Option<usize>, B::Error> {
68    // We cannot use .get() here because n is a u64
69    if n >= WRITE_BE.len() as u64 {
70        return Ok(None);
71    }
72    let n = n as usize;
73    let len = WRITE_LEN_BE[n] as usize;
74    backend.write_bits(WRITE_BE[n] as u64, len)?;
75    Ok(Some(len))
76}
77/// The len we assign to a code that cannot be decoded through the table
78pub const MISSING_VALUE_LEN_BE: u8 = 13;
79/// Precomputed table for reading zeta codes
80pub const READ_BE: &[u16] = &[
81    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
82    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
83    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
84    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
85    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
86    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
87    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
88    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
89    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
90    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
91    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
92    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
93    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
94    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
95    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
96    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
97    63, 63, 64, 64, 65, 65, 66, 66, 67, 67, 68, 68, 69, 69, 70, 70, 71, 71, 72, 72, 73, 73, 74, 74,
98    75, 75, 76, 76, 77, 77, 78, 78, 79, 79, 80, 80, 81, 81, 82, 82, 83, 83, 84, 84, 85, 85, 86, 86,
99    87, 87, 88, 88, 89, 89, 90, 90, 91, 91, 92, 92, 93, 93, 94, 94, 95, 95, 96, 96, 97, 97, 98, 98,
100    99, 99, 100, 100, 101, 101, 102, 102, 103, 103, 104, 104, 105, 105, 106, 106, 107, 107, 108,
101    108, 109, 109, 110, 110, 111, 111, 112, 112, 113, 113, 114, 114, 115, 115, 116, 116, 117, 117,
102    118, 118, 119, 119, 120, 120, 121, 121, 122, 122, 123, 123, 124, 124, 125, 125, 126, 126, 127,
103    128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
104    147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
105    166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
106    185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203,
107    204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222,
108    223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241,
109    242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260,
110    261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
111    280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
112    299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317,
113    318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336,
114    337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355,
115    356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
116    375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393,
117    394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412,
118    413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431,
119    432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450,
120    451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469,
121    470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488,
122    489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507,
123    508, 509, 510, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
124    7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
125    8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
126    9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
127    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
128    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12,
129    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
130    12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
131    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
132    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15,
133    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
134    16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18,
135    18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
136    19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21,
137    21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
138    22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24,
139    24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
140    25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27,
141    27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
142    28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 30, 30, 30, 30,
143    30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
144    31, 31, 31, 31, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 33, 33, 33, 33,
145    33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
146    34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 36, 36, 36, 36,
147    36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
148    37, 37, 37, 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39,
149    39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
150    40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 42, 42, 42, 42,
151    42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
152    43, 43, 43, 43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, 45, 45, 45,
153    45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,
154    46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48, 48, 48,
155    48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
156    49, 49, 49, 49, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 51, 51, 51, 51,
157    51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,
158    52, 52, 52, 52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 54, 54, 54, 54,
159    54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
160    55, 55, 55, 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57,
161    57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
162    58, 58, 58, 58, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 60, 60, 60, 60,
163    60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
164    61, 61, 61, 61, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 0, 0, 0, 0, 0,
165    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
166    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
167    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
168    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
169    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
170    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
171    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
172    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
173    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
174    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
175    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
176    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
177    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
178    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
179    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
180    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
181    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
182    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
183    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
184    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
185    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
186    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
187    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
188    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
189    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
190    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
191    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
192    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
193    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
194    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
195    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
196    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3,
197    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
198    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
199    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
200    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
201    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
202    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
203    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
204    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4,
205    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
206    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
207    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
208    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
209    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
210    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
211    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
212    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5,
213    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
214    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
215    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
216    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
217    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
218    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
219    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
220    5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6,
221    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
222    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
223    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
224    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
225    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
226    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
227    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
228    6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
229];
230/// Precomputed lengths table for reading zeta codes
231pub const READ_LEN_BE: &[u8] = &[
232    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
233    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
234    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
235    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
236    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
237    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
238    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
239    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
240    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
241    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
242    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
243    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
244    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
245    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
246    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
247    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
248    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
249    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
250    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
251    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
252    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
253    13, 13, 13, 13, 13, 13, 13, 13, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
254    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
255    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
256    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
257    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
258    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12,
259    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
260    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
261    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
262    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
263    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
264    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
265    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
266    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
267    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
268    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
269    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
270    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
271    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
272    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
273    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
274    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
275    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
276    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
277    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
278    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
279    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
280    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
281    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
282    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
283    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
284    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
285    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
286    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
287    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
288    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
289    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
290    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
291    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
292    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
293    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
294    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
295    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
296    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
297    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
298    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
299    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
300    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
301    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
302    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
303    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
304    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
305    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
306    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
307    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
308    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
309    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
310    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
311    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
312    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
313    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
314    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
315    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
316    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
317    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
318    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
319    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
320    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
321    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
322    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
323    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
324    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
325    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
326    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
327    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
328    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
329    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
330    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
331    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
332    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
333    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
334    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
335    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
336    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
337    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
338    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
339    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
340    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
341    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
342    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
343    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
344    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
345    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
346    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
347    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
348    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
349    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
350    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
351    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
352    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
353    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
354    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
355    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
356    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
357    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
358    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
359    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
360    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
361    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
362    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
363    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
364    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
365    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
366    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
367    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
368    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
369    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
370    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
371];
372/// The len we assign to a code that cannot be decoded through the table
373pub const MISSING_VALUE_LEN_LE: u8 = 13;
374/// Precomputed table for reading zeta codes
375pub const READ_LE: &[u16] = &[
376    0, 0, 7, 1, 63, 3, 8, 5, 0, 0, 9, 2, 64, 4, 10, 6, 0, 0, 11, 1, 65, 3, 12, 5, 0, 0, 13, 2, 66,
377    4, 14, 6, 0, 0, 15, 1, 67, 3, 17, 5, 0, 0, 19, 2, 68, 4, 21, 6, 0, 0, 23, 1, 69, 3, 25, 5, 0,
378    0, 27, 2, 70, 4, 29, 6, 0, 0, 31, 1, 71, 3, 33, 5, 0, 0, 35, 2, 72, 4, 37, 6, 0, 0, 39, 1, 73,
379    3, 41, 5, 0, 0, 43, 2, 74, 4, 45, 6, 0, 0, 47, 1, 75, 3, 49, 5, 0, 0, 51, 2, 76, 4, 53, 6, 0,
380    0, 55, 1, 77, 3, 57, 5, 0, 0, 59, 2, 78, 4, 61, 6, 0, 0, 7, 1, 79, 3, 8, 5, 0, 0, 9, 2, 80, 4,
381    10, 6, 0, 0, 11, 1, 81, 3, 12, 5, 0, 0, 13, 2, 82, 4, 14, 6, 0, 0, 16, 1, 83, 3, 18, 5, 0, 0,
382    20, 2, 84, 4, 22, 6, 0, 0, 24, 1, 85, 3, 26, 5, 0, 0, 28, 2, 86, 4, 30, 6, 0, 0, 32, 1, 87, 3,
383    34, 5, 0, 0, 36, 2, 88, 4, 38, 6, 0, 0, 40, 1, 89, 3, 42, 5, 0, 0, 44, 2, 90, 4, 46, 6, 0, 0,
384    48, 1, 91, 3, 50, 5, 0, 0, 52, 2, 92, 4, 54, 6, 0, 0, 56, 1, 93, 3, 58, 5, 0, 0, 60, 2, 94, 4,
385    62, 6, 0, 0, 7, 1, 95, 3, 8, 5, 0, 0, 9, 2, 96, 4, 10, 6, 0, 0, 11, 1, 97, 3, 12, 5, 0, 0, 13,
386    2, 98, 4, 14, 6, 0, 0, 15, 1, 99, 3, 17, 5, 0, 0, 19, 2, 100, 4, 21, 6, 0, 0, 23, 1, 101, 3,
387    25, 5, 0, 0, 27, 2, 102, 4, 29, 6, 0, 0, 31, 1, 103, 3, 33, 5, 0, 0, 35, 2, 104, 4, 37, 6, 0,
388    0, 39, 1, 105, 3, 41, 5, 0, 0, 43, 2, 106, 4, 45, 6, 0, 0, 47, 1, 107, 3, 49, 5, 0, 0, 51, 2,
389    108, 4, 53, 6, 0, 0, 55, 1, 109, 3, 57, 5, 0, 0, 59, 2, 110, 4, 61, 6, 0, 0, 7, 1, 111, 3, 8,
390    5, 0, 0, 9, 2, 112, 4, 10, 6, 0, 0, 11, 1, 113, 3, 12, 5, 0, 0, 13, 2, 114, 4, 14, 6, 0, 0, 16,
391    1, 115, 3, 18, 5, 0, 0, 20, 2, 116, 4, 22, 6, 0, 0, 24, 1, 117, 3, 26, 5, 0, 0, 28, 2, 118, 4,
392    30, 6, 0, 0, 32, 1, 119, 3, 34, 5, 0, 0, 36, 2, 120, 4, 38, 6, 0, 0, 40, 1, 121, 3, 42, 5, 0,
393    0, 44, 2, 122, 4, 46, 6, 0, 0, 48, 1, 123, 3, 50, 5, 0, 0, 52, 2, 124, 4, 54, 6, 0, 0, 56, 1,
394    125, 3, 58, 5, 0, 0, 60, 2, 126, 4, 62, 6, 0, 0, 7, 1, 127, 3, 8, 5, 0, 0, 9, 2, 129, 4, 10, 6,
395    0, 0, 11, 1, 131, 3, 12, 5, 0, 0, 13, 2, 133, 4, 14, 6, 0, 0, 15, 1, 135, 3, 17, 5, 0, 0, 19,
396    2, 137, 4, 21, 6, 0, 0, 23, 1, 139, 3, 25, 5, 0, 0, 27, 2, 141, 4, 29, 6, 0, 0, 31, 1, 143, 3,
397    33, 5, 0, 0, 35, 2, 145, 4, 37, 6, 0, 0, 39, 1, 147, 3, 41, 5, 0, 0, 43, 2, 149, 4, 45, 6, 0,
398    0, 47, 1, 151, 3, 49, 5, 0, 0, 51, 2, 153, 4, 53, 6, 0, 0, 55, 1, 155, 3, 57, 5, 0, 0, 59, 2,
399    157, 4, 61, 6, 0, 0, 7, 1, 159, 3, 8, 5, 0, 0, 9, 2, 161, 4, 10, 6, 0, 0, 11, 1, 163, 3, 12, 5,
400    0, 0, 13, 2, 165, 4, 14, 6, 0, 0, 16, 1, 167, 3, 18, 5, 0, 0, 20, 2, 169, 4, 22, 6, 0, 0, 24,
401    1, 171, 3, 26, 5, 0, 0, 28, 2, 173, 4, 30, 6, 0, 0, 32, 1, 175, 3, 34, 5, 0, 0, 36, 2, 177, 4,
402    38, 6, 0, 0, 40, 1, 179, 3, 42, 5, 0, 0, 44, 2, 181, 4, 46, 6, 0, 0, 48, 1, 183, 3, 50, 5, 0,
403    0, 52, 2, 185, 4, 54, 6, 0, 0, 56, 1, 187, 3, 58, 5, 0, 0, 60, 2, 189, 4, 62, 6, 0, 0, 7, 1,
404    191, 3, 8, 5, 0, 0, 9, 2, 193, 4, 10, 6, 0, 0, 11, 1, 195, 3, 12, 5, 0, 0, 13, 2, 197, 4, 14,
405    6, 0, 0, 15, 1, 199, 3, 17, 5, 0, 0, 19, 2, 201, 4, 21, 6, 0, 0, 23, 1, 203, 3, 25, 5, 0, 0,
406    27, 2, 205, 4, 29, 6, 0, 0, 31, 1, 207, 3, 33, 5, 0, 0, 35, 2, 209, 4, 37, 6, 0, 0, 39, 1, 211,
407    3, 41, 5, 0, 0, 43, 2, 213, 4, 45, 6, 0, 0, 47, 1, 215, 3, 49, 5, 0, 0, 51, 2, 217, 4, 53, 6,
408    0, 0, 55, 1, 219, 3, 57, 5, 0, 0, 59, 2, 221, 4, 61, 6, 0, 0, 7, 1, 223, 3, 8, 5, 0, 0, 9, 2,
409    225, 4, 10, 6, 0, 0, 11, 1, 227, 3, 12, 5, 0, 0, 13, 2, 229, 4, 14, 6, 0, 0, 16, 1, 231, 3, 18,
410    5, 0, 0, 20, 2, 233, 4, 22, 6, 0, 0, 24, 1, 235, 3, 26, 5, 0, 0, 28, 2, 237, 4, 30, 6, 0, 0,
411    32, 1, 239, 3, 34, 5, 0, 0, 36, 2, 241, 4, 38, 6, 0, 0, 40, 1, 243, 3, 42, 5, 0, 0, 44, 2, 245,
412    4, 46, 6, 0, 0, 48, 1, 247, 3, 50, 5, 0, 0, 52, 2, 249, 4, 54, 6, 0, 0, 56, 1, 251, 3, 58, 5,
413    0, 0, 60, 2, 253, 4, 62, 6, 0, 0, 7, 1, 255, 3, 8, 5, 0, 0, 9, 2, 257, 4, 10, 6, 0, 0, 11, 1,
414    259, 3, 12, 5, 0, 0, 13, 2, 261, 4, 14, 6, 0, 0, 15, 1, 263, 3, 17, 5, 0, 0, 19, 2, 265, 4, 21,
415    6, 0, 0, 23, 1, 267, 3, 25, 5, 0, 0, 27, 2, 269, 4, 29, 6, 0, 0, 31, 1, 271, 3, 33, 5, 0, 0,
416    35, 2, 273, 4, 37, 6, 0, 0, 39, 1, 275, 3, 41, 5, 0, 0, 43, 2, 277, 4, 45, 6, 0, 0, 47, 1, 279,
417    3, 49, 5, 0, 0, 51, 2, 281, 4, 53, 6, 0, 0, 55, 1, 283, 3, 57, 5, 0, 0, 59, 2, 285, 4, 61, 6,
418    0, 0, 7, 1, 287, 3, 8, 5, 0, 0, 9, 2, 289, 4, 10, 6, 0, 0, 11, 1, 291, 3, 12, 5, 0, 0, 13, 2,
419    293, 4, 14, 6, 0, 0, 16, 1, 295, 3, 18, 5, 0, 0, 20, 2, 297, 4, 22, 6, 0, 0, 24, 1, 299, 3, 26,
420    5, 0, 0, 28, 2, 301, 4, 30, 6, 0, 0, 32, 1, 303, 3, 34, 5, 0, 0, 36, 2, 305, 4, 38, 6, 0, 0,
421    40, 1, 307, 3, 42, 5, 0, 0, 44, 2, 309, 4, 46, 6, 0, 0, 48, 1, 311, 3, 50, 5, 0, 0, 52, 2, 313,
422    4, 54, 6, 0, 0, 56, 1, 315, 3, 58, 5, 0, 0, 60, 2, 317, 4, 62, 6, 0, 0, 7, 1, 319, 3, 8, 5, 0,
423    0, 9, 2, 321, 4, 10, 6, 0, 0, 11, 1, 323, 3, 12, 5, 0, 0, 13, 2, 325, 4, 14, 6, 0, 0, 15, 1,
424    327, 3, 17, 5, 0, 0, 19, 2, 329, 4, 21, 6, 0, 0, 23, 1, 331, 3, 25, 5, 0, 0, 27, 2, 333, 4, 29,
425    6, 0, 0, 31, 1, 335, 3, 33, 5, 0, 0, 35, 2, 337, 4, 37, 6, 0, 0, 39, 1, 339, 3, 41, 5, 0, 0,
426    43, 2, 341, 4, 45, 6, 0, 0, 47, 1, 343, 3, 49, 5, 0, 0, 51, 2, 345, 4, 53, 6, 0, 0, 55, 1, 347,
427    3, 57, 5, 0, 0, 59, 2, 349, 4, 61, 6, 0, 0, 7, 1, 351, 3, 8, 5, 0, 0, 9, 2, 353, 4, 10, 6, 0,
428    0, 11, 1, 355, 3, 12, 5, 0, 0, 13, 2, 357, 4, 14, 6, 0, 0, 16, 1, 359, 3, 18, 5, 0, 0, 20, 2,
429    361, 4, 22, 6, 0, 0, 24, 1, 363, 3, 26, 5, 0, 0, 28, 2, 365, 4, 30, 6, 0, 0, 32, 1, 367, 3, 34,
430    5, 0, 0, 36, 2, 369, 4, 38, 6, 0, 0, 40, 1, 371, 3, 42, 5, 0, 0, 44, 2, 373, 4, 46, 6, 0, 0,
431    48, 1, 375, 3, 50, 5, 0, 0, 52, 2, 377, 4, 54, 6, 0, 0, 56, 1, 379, 3, 58, 5, 0, 0, 60, 2, 381,
432    4, 62, 6, 0, 0, 7, 1, 383, 3, 8, 5, 0, 0, 9, 2, 385, 4, 10, 6, 0, 0, 11, 1, 387, 3, 12, 5, 0,
433    0, 13, 2, 389, 4, 14, 6, 0, 0, 15, 1, 391, 3, 17, 5, 0, 0, 19, 2, 393, 4, 21, 6, 0, 0, 23, 1,
434    395, 3, 25, 5, 0, 0, 27, 2, 397, 4, 29, 6, 0, 0, 31, 1, 399, 3, 33, 5, 0, 0, 35, 2, 401, 4, 37,
435    6, 0, 0, 39, 1, 403, 3, 41, 5, 0, 0, 43, 2, 405, 4, 45, 6, 0, 0, 47, 1, 407, 3, 49, 5, 0, 0,
436    51, 2, 409, 4, 53, 6, 0, 0, 55, 1, 411, 3, 57, 5, 0, 0, 59, 2, 413, 4, 61, 6, 0, 0, 7, 1, 415,
437    3, 8, 5, 0, 0, 9, 2, 417, 4, 10, 6, 0, 0, 11, 1, 419, 3, 12, 5, 0, 0, 13, 2, 421, 4, 14, 6, 0,
438    0, 16, 1, 423, 3, 18, 5, 0, 0, 20, 2, 425, 4, 22, 6, 0, 0, 24, 1, 427, 3, 26, 5, 0, 0, 28, 2,
439    429, 4, 30, 6, 0, 0, 32, 1, 431, 3, 34, 5, 0, 0, 36, 2, 433, 4, 38, 6, 0, 0, 40, 1, 435, 3, 42,
440    5, 0, 0, 44, 2, 437, 4, 46, 6, 0, 0, 48, 1, 439, 3, 50, 5, 0, 0, 52, 2, 441, 4, 54, 6, 0, 0,
441    56, 1, 443, 3, 58, 5, 0, 0, 60, 2, 445, 4, 62, 6, 0, 0, 7, 1, 447, 3, 8, 5, 0, 0, 9, 2, 449, 4,
442    10, 6, 0, 0, 11, 1, 451, 3, 12, 5, 0, 0, 13, 2, 453, 4, 14, 6, 0, 0, 15, 1, 455, 3, 17, 5, 0,
443    0, 19, 2, 457, 4, 21, 6, 0, 0, 23, 1, 459, 3, 25, 5, 0, 0, 27, 2, 461, 4, 29, 6, 0, 0, 31, 1,
444    463, 3, 33, 5, 0, 0, 35, 2, 465, 4, 37, 6, 0, 0, 39, 1, 467, 3, 41, 5, 0, 0, 43, 2, 469, 4, 45,
445    6, 0, 0, 47, 1, 471, 3, 49, 5, 0, 0, 51, 2, 473, 4, 53, 6, 0, 0, 55, 1, 475, 3, 57, 5, 0, 0,
446    59, 2, 477, 4, 61, 6, 0, 0, 7, 1, 479, 3, 8, 5, 0, 0, 9, 2, 481, 4, 10, 6, 0, 0, 11, 1, 483, 3,
447    12, 5, 0, 0, 13, 2, 485, 4, 14, 6, 0, 0, 16, 1, 487, 3, 18, 5, 0, 0, 20, 2, 489, 4, 22, 6, 0,
448    0, 24, 1, 491, 3, 26, 5, 0, 0, 28, 2, 493, 4, 30, 6, 0, 0, 32, 1, 495, 3, 34, 5, 0, 0, 36, 2,
449    497, 4, 38, 6, 0, 0, 40, 1, 499, 3, 42, 5, 0, 0, 44, 2, 501, 4, 46, 6, 0, 0, 48, 1, 503, 3, 50,
450    5, 0, 0, 52, 2, 505, 4, 54, 6, 0, 0, 56, 1, 507, 3, 58, 5, 0, 0, 60, 2, 509, 4, 62, 6, 0, 0, 7,
451    1, 63, 3, 8, 5, 0, 0, 9, 2, 64, 4, 10, 6, 0, 0, 11, 1, 65, 3, 12, 5, 0, 0, 13, 2, 66, 4, 14, 6,
452    0, 0, 15, 1, 67, 3, 17, 5, 0, 0, 19, 2, 68, 4, 21, 6, 0, 0, 23, 1, 69, 3, 25, 5, 0, 0, 27, 2,
453    70, 4, 29, 6, 0, 0, 31, 1, 71, 3, 33, 5, 0, 0, 35, 2, 72, 4, 37, 6, 0, 0, 39, 1, 73, 3, 41, 5,
454    0, 0, 43, 2, 74, 4, 45, 6, 0, 0, 47, 1, 75, 3, 49, 5, 0, 0, 51, 2, 76, 4, 53, 6, 0, 0, 55, 1,
455    77, 3, 57, 5, 0, 0, 59, 2, 78, 4, 61, 6, 0, 0, 7, 1, 79, 3, 8, 5, 0, 0, 9, 2, 80, 4, 10, 6, 0,
456    0, 11, 1, 81, 3, 12, 5, 0, 0, 13, 2, 82, 4, 14, 6, 0, 0, 16, 1, 83, 3, 18, 5, 0, 0, 20, 2, 84,
457    4, 22, 6, 0, 0, 24, 1, 85, 3, 26, 5, 0, 0, 28, 2, 86, 4, 30, 6, 0, 0, 32, 1, 87, 3, 34, 5, 0,
458    0, 36, 2, 88, 4, 38, 6, 0, 0, 40, 1, 89, 3, 42, 5, 0, 0, 44, 2, 90, 4, 46, 6, 0, 0, 48, 1, 91,
459    3, 50, 5, 0, 0, 52, 2, 92, 4, 54, 6, 0, 0, 56, 1, 93, 3, 58, 5, 0, 0, 60, 2, 94, 4, 62, 6, 0,
460    0, 7, 1, 95, 3, 8, 5, 0, 0, 9, 2, 96, 4, 10, 6, 0, 0, 11, 1, 97, 3, 12, 5, 0, 0, 13, 2, 98, 4,
461    14, 6, 0, 0, 15, 1, 99, 3, 17, 5, 0, 0, 19, 2, 100, 4, 21, 6, 0, 0, 23, 1, 101, 3, 25, 5, 0, 0,
462    27, 2, 102, 4, 29, 6, 0, 0, 31, 1, 103, 3, 33, 5, 0, 0, 35, 2, 104, 4, 37, 6, 0, 0, 39, 1, 105,
463    3, 41, 5, 0, 0, 43, 2, 106, 4, 45, 6, 0, 0, 47, 1, 107, 3, 49, 5, 0, 0, 51, 2, 108, 4, 53, 6,
464    0, 0, 55, 1, 109, 3, 57, 5, 0, 0, 59, 2, 110, 4, 61, 6, 0, 0, 7, 1, 111, 3, 8, 5, 0, 0, 9, 2,
465    112, 4, 10, 6, 0, 0, 11, 1, 113, 3, 12, 5, 0, 0, 13, 2, 114, 4, 14, 6, 0, 0, 16, 1, 115, 3, 18,
466    5, 0, 0, 20, 2, 116, 4, 22, 6, 0, 0, 24, 1, 117, 3, 26, 5, 0, 0, 28, 2, 118, 4, 30, 6, 0, 0,
467    32, 1, 119, 3, 34, 5, 0, 0, 36, 2, 120, 4, 38, 6, 0, 0, 40, 1, 121, 3, 42, 5, 0, 0, 44, 2, 122,
468    4, 46, 6, 0, 0, 48, 1, 123, 3, 50, 5, 0, 0, 52, 2, 124, 4, 54, 6, 0, 0, 56, 1, 125, 3, 58, 5,
469    0, 0, 60, 2, 126, 4, 62, 6, 0, 0, 7, 1, 128, 3, 8, 5, 0, 0, 9, 2, 130, 4, 10, 6, 0, 0, 11, 1,
470    132, 3, 12, 5, 0, 0, 13, 2, 134, 4, 14, 6, 0, 0, 15, 1, 136, 3, 17, 5, 0, 0, 19, 2, 138, 4, 21,
471    6, 0, 0, 23, 1, 140, 3, 25, 5, 0, 0, 27, 2, 142, 4, 29, 6, 0, 0, 31, 1, 144, 3, 33, 5, 0, 0,
472    35, 2, 146, 4, 37, 6, 0, 0, 39, 1, 148, 3, 41, 5, 0, 0, 43, 2, 150, 4, 45, 6, 0, 0, 47, 1, 152,
473    3, 49, 5, 0, 0, 51, 2, 154, 4, 53, 6, 0, 0, 55, 1, 156, 3, 57, 5, 0, 0, 59, 2, 158, 4, 61, 6,
474    0, 0, 7, 1, 160, 3, 8, 5, 0, 0, 9, 2, 162, 4, 10, 6, 0, 0, 11, 1, 164, 3, 12, 5, 0, 0, 13, 2,
475    166, 4, 14, 6, 0, 0, 16, 1, 168, 3, 18, 5, 0, 0, 20, 2, 170, 4, 22, 6, 0, 0, 24, 1, 172, 3, 26,
476    5, 0, 0, 28, 2, 174, 4, 30, 6, 0, 0, 32, 1, 176, 3, 34, 5, 0, 0, 36, 2, 178, 4, 38, 6, 0, 0,
477    40, 1, 180, 3, 42, 5, 0, 0, 44, 2, 182, 4, 46, 6, 0, 0, 48, 1, 184, 3, 50, 5, 0, 0, 52, 2, 186,
478    4, 54, 6, 0, 0, 56, 1, 188, 3, 58, 5, 0, 0, 60, 2, 190, 4, 62, 6, 0, 0, 7, 1, 192, 3, 8, 5, 0,
479    0, 9, 2, 194, 4, 10, 6, 0, 0, 11, 1, 196, 3, 12, 5, 0, 0, 13, 2, 198, 4, 14, 6, 0, 0, 15, 1,
480    200, 3, 17, 5, 0, 0, 19, 2, 202, 4, 21, 6, 0, 0, 23, 1, 204, 3, 25, 5, 0, 0, 27, 2, 206, 4, 29,
481    6, 0, 0, 31, 1, 208, 3, 33, 5, 0, 0, 35, 2, 210, 4, 37, 6, 0, 0, 39, 1, 212, 3, 41, 5, 0, 0,
482    43, 2, 214, 4, 45, 6, 0, 0, 47, 1, 216, 3, 49, 5, 0, 0, 51, 2, 218, 4, 53, 6, 0, 0, 55, 1, 220,
483    3, 57, 5, 0, 0, 59, 2, 222, 4, 61, 6, 0, 0, 7, 1, 224, 3, 8, 5, 0, 0, 9, 2, 226, 4, 10, 6, 0,
484    0, 11, 1, 228, 3, 12, 5, 0, 0, 13, 2, 230, 4, 14, 6, 0, 0, 16, 1, 232, 3, 18, 5, 0, 0, 20, 2,
485    234, 4, 22, 6, 0, 0, 24, 1, 236, 3, 26, 5, 0, 0, 28, 2, 238, 4, 30, 6, 0, 0, 32, 1, 240, 3, 34,
486    5, 0, 0, 36, 2, 242, 4, 38, 6, 0, 0, 40, 1, 244, 3, 42, 5, 0, 0, 44, 2, 246, 4, 46, 6, 0, 0,
487    48, 1, 248, 3, 50, 5, 0, 0, 52, 2, 250, 4, 54, 6, 0, 0, 56, 1, 252, 3, 58, 5, 0, 0, 60, 2, 254,
488    4, 62, 6, 0, 0, 7, 1, 256, 3, 8, 5, 0, 0, 9, 2, 258, 4, 10, 6, 0, 0, 11, 1, 260, 3, 12, 5, 0,
489    0, 13, 2, 262, 4, 14, 6, 0, 0, 15, 1, 264, 3, 17, 5, 0, 0, 19, 2, 266, 4, 21, 6, 0, 0, 23, 1,
490    268, 3, 25, 5, 0, 0, 27, 2, 270, 4, 29, 6, 0, 0, 31, 1, 272, 3, 33, 5, 0, 0, 35, 2, 274, 4, 37,
491    6, 0, 0, 39, 1, 276, 3, 41, 5, 0, 0, 43, 2, 278, 4, 45, 6, 0, 0, 47, 1, 280, 3, 49, 5, 0, 0,
492    51, 2, 282, 4, 53, 6, 0, 0, 55, 1, 284, 3, 57, 5, 0, 0, 59, 2, 286, 4, 61, 6, 0, 0, 7, 1, 288,
493    3, 8, 5, 0, 0, 9, 2, 290, 4, 10, 6, 0, 0, 11, 1, 292, 3, 12, 5, 0, 0, 13, 2, 294, 4, 14, 6, 0,
494    0, 16, 1, 296, 3, 18, 5, 0, 0, 20, 2, 298, 4, 22, 6, 0, 0, 24, 1, 300, 3, 26, 5, 0, 0, 28, 2,
495    302, 4, 30, 6, 0, 0, 32, 1, 304, 3, 34, 5, 0, 0, 36, 2, 306, 4, 38, 6, 0, 0, 40, 1, 308, 3, 42,
496    5, 0, 0, 44, 2, 310, 4, 46, 6, 0, 0, 48, 1, 312, 3, 50, 5, 0, 0, 52, 2, 314, 4, 54, 6, 0, 0,
497    56, 1, 316, 3, 58, 5, 0, 0, 60, 2, 318, 4, 62, 6, 0, 0, 7, 1, 320, 3, 8, 5, 0, 0, 9, 2, 322, 4,
498    10, 6, 0, 0, 11, 1, 324, 3, 12, 5, 0, 0, 13, 2, 326, 4, 14, 6, 0, 0, 15, 1, 328, 3, 17, 5, 0,
499    0, 19, 2, 330, 4, 21, 6, 0, 0, 23, 1, 332, 3, 25, 5, 0, 0, 27, 2, 334, 4, 29, 6, 0, 0, 31, 1,
500    336, 3, 33, 5, 0, 0, 35, 2, 338, 4, 37, 6, 0, 0, 39, 1, 340, 3, 41, 5, 0, 0, 43, 2, 342, 4, 45,
501    6, 0, 0, 47, 1, 344, 3, 49, 5, 0, 0, 51, 2, 346, 4, 53, 6, 0, 0, 55, 1, 348, 3, 57, 5, 0, 0,
502    59, 2, 350, 4, 61, 6, 0, 0, 7, 1, 352, 3, 8, 5, 0, 0, 9, 2, 354, 4, 10, 6, 0, 0, 11, 1, 356, 3,
503    12, 5, 0, 0, 13, 2, 358, 4, 14, 6, 0, 0, 16, 1, 360, 3, 18, 5, 0, 0, 20, 2, 362, 4, 22, 6, 0,
504    0, 24, 1, 364, 3, 26, 5, 0, 0, 28, 2, 366, 4, 30, 6, 0, 0, 32, 1, 368, 3, 34, 5, 0, 0, 36, 2,
505    370, 4, 38, 6, 0, 0, 40, 1, 372, 3, 42, 5, 0, 0, 44, 2, 374, 4, 46, 6, 0, 0, 48, 1, 376, 3, 50,
506    5, 0, 0, 52, 2, 378, 4, 54, 6, 0, 0, 56, 1, 380, 3, 58, 5, 0, 0, 60, 2, 382, 4, 62, 6, 0, 0, 7,
507    1, 384, 3, 8, 5, 0, 0, 9, 2, 386, 4, 10, 6, 0, 0, 11, 1, 388, 3, 12, 5, 0, 0, 13, 2, 390, 4,
508    14, 6, 0, 0, 15, 1, 392, 3, 17, 5, 0, 0, 19, 2, 394, 4, 21, 6, 0, 0, 23, 1, 396, 3, 25, 5, 0,
509    0, 27, 2, 398, 4, 29, 6, 0, 0, 31, 1, 400, 3, 33, 5, 0, 0, 35, 2, 402, 4, 37, 6, 0, 0, 39, 1,
510    404, 3, 41, 5, 0, 0, 43, 2, 406, 4, 45, 6, 0, 0, 47, 1, 408, 3, 49, 5, 0, 0, 51, 2, 410, 4, 53,
511    6, 0, 0, 55, 1, 412, 3, 57, 5, 0, 0, 59, 2, 414, 4, 61, 6, 0, 0, 7, 1, 416, 3, 8, 5, 0, 0, 9,
512    2, 418, 4, 10, 6, 0, 0, 11, 1, 420, 3, 12, 5, 0, 0, 13, 2, 422, 4, 14, 6, 0, 0, 16, 1, 424, 3,
513    18, 5, 0, 0, 20, 2, 426, 4, 22, 6, 0, 0, 24, 1, 428, 3, 26, 5, 0, 0, 28, 2, 430, 4, 30, 6, 0,
514    0, 32, 1, 432, 3, 34, 5, 0, 0, 36, 2, 434, 4, 38, 6, 0, 0, 40, 1, 436, 3, 42, 5, 0, 0, 44, 2,
515    438, 4, 46, 6, 0, 0, 48, 1, 440, 3, 50, 5, 0, 0, 52, 2, 442, 4, 54, 6, 0, 0, 56, 1, 444, 3, 58,
516    5, 0, 0, 60, 2, 446, 4, 62, 6, 0, 0, 7, 1, 448, 3, 8, 5, 0, 0, 9, 2, 450, 4, 10, 6, 0, 0, 11,
517    1, 452, 3, 12, 5, 0, 0, 13, 2, 454, 4, 14, 6, 0, 0, 15, 1, 456, 3, 17, 5, 0, 0, 19, 2, 458, 4,
518    21, 6, 0, 0, 23, 1, 460, 3, 25, 5, 0, 0, 27, 2, 462, 4, 29, 6, 0, 0, 31, 1, 464, 3, 33, 5, 0,
519    0, 35, 2, 466, 4, 37, 6, 0, 0, 39, 1, 468, 3, 41, 5, 0, 0, 43, 2, 470, 4, 45, 6, 0, 0, 47, 1,
520    472, 3, 49, 5, 0, 0, 51, 2, 474, 4, 53, 6, 0, 0, 55, 1, 476, 3, 57, 5, 0, 0, 59, 2, 478, 4, 61,
521    6, 0, 0, 7, 1, 480, 3, 8, 5, 0, 0, 9, 2, 482, 4, 10, 6, 0, 0, 11, 1, 484, 3, 12, 5, 0, 0, 13,
522    2, 486, 4, 14, 6, 0, 0, 16, 1, 488, 3, 18, 5, 0, 0, 20, 2, 490, 4, 22, 6, 0, 0, 24, 1, 492, 3,
523    26, 5, 0, 0, 28, 2, 494, 4, 30, 6, 0, 0, 32, 1, 496, 3, 34, 5, 0, 0, 36, 2, 498, 4, 38, 6, 0,
524    0, 40, 1, 500, 3, 42, 5, 0, 0, 44, 2, 502, 4, 46, 6, 0, 0, 48, 1, 504, 3, 50, 5, 0, 0, 52, 2,
525    506, 4, 54, 6, 0, 0, 56, 1, 508, 3, 58, 5, 0, 0, 60, 2, 510, 4, 62, 6,
526];
527/// Precomputed lengths table for reading zeta codes
528pub const READ_LEN_LE: &[u8] = &[
529    13, 3, 7, 4, 11, 4, 7, 4, 13, 3, 7, 4, 11, 4, 7, 4, 13, 3, 7, 4, 11, 4, 7, 4, 13, 3, 7, 4, 11,
530    4, 7, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3,
531    8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8,
532    4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4,
533    11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 7, 4, 11, 4, 7, 4, 13, 3, 7, 4, 11, 4, 7, 4, 13,
534    3, 7, 4, 11, 4, 7, 4, 13, 3, 7, 4, 11, 4, 7, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4,
535    8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8,
536    4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4,
537    13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 7, 4, 11,
538    4, 7, 4, 13, 3, 7, 4, 11, 4, 7, 4, 13, 3, 7, 4, 11, 4, 7, 4, 13, 3, 7, 4, 11, 4, 7, 4, 13, 3,
539    8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8,
540    4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4,
541    11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13,
542    3, 8, 4, 11, 4, 8, 4, 13, 3, 7, 4, 11, 4, 7, 4, 13, 3, 7, 4, 11, 4, 7, 4, 13, 3, 7, 4, 11, 4,
543    7, 4, 13, 3, 7, 4, 11, 4, 7, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8,
544    4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4,
545    13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11,
546    4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3,
547    7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 8, 4, 12, 4, 8,
548    4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4,
549    12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13,
550    3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4,
551    8, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7,
552    4, 12, 4, 7, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4,
553    13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12,
554    4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3,
555    8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7,
556    4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4,
557    12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13,
558    3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4,
559    8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 7,
560    4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4,
561    13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12,
562    4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3,
563    8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8,
564    4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4,
565    12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13,
566    3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4,
567    8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8,
568    4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 7, 4, 12, 4, 7, 4,
569    13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 8, 4, 12,
570    4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3,
571    8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8,
572    4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4,
573    12, 4, 8, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13,
574    3, 7, 4, 12, 4, 7, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4,
575    8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8,
576    4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4,
577    13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12,
578    4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3,
579    8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8,
580    4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4,
581    12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13,
582    3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4,
583    7, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8,
584    4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4,
585    13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12,
586    4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3,
587    7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8,
588    4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4,
589    12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13,
590    3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 7, 4, 12, 4,
591    7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 8,
592    4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4,
593    13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12,
594    4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3,
595    8, 4, 12, 4, 8, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7,
596    4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4,
597    12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13,
598    3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4,
599    8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 7, 4, 11, 4, 7, 4, 13, 3, 7,
600    4, 11, 4, 7, 4, 13, 3, 7, 4, 11, 4, 7, 4, 13, 3, 7, 4, 11, 4, 7, 4, 13, 3, 8, 4, 11, 4, 8, 4,
601    13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11,
602    4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3,
603    8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8,
604    4, 13, 3, 7, 4, 11, 4, 7, 4, 13, 3, 7, 4, 11, 4, 7, 4, 13, 3, 7, 4, 11, 4, 7, 4, 13, 3, 7, 4,
605    11, 4, 7, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13,
606    3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4,
607    8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8,
608    4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 7, 4, 11, 4, 7, 4, 13, 3, 7, 4, 11, 4, 7, 4,
609    13, 3, 7, 4, 11, 4, 7, 4, 13, 3, 7, 4, 11, 4, 7, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11,
610    4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3,
611    8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8,
612    4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 7, 4,
613    11, 4, 7, 4, 13, 3, 7, 4, 11, 4, 7, 4, 13, 3, 7, 4, 11, 4, 7, 4, 13, 3, 7, 4, 11, 4, 7, 4, 13,
614    3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4,
615    8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8,
616    4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 8, 4, 11, 4, 8, 4,
617    13, 3, 8, 4, 11, 4, 8, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12,
618    4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3,
619    8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8,
620    4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4,
621    12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13,
622    3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 8, 4, 12, 4,
623    8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8,
624    4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4,
625    13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12,
626    4, 8, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3,
627    7, 4, 12, 4, 7, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8,
628    4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4,
629    12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13,
630    3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4,
631    7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8,
632    4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4,
633    13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12,
634    4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3,
635    7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7,
636    4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4,
637    12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13,
638    3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4,
639    8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7,
640    4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4,
641    13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12,
642    4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3,
643    8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 7, 4, 12, 4, 7,
644    4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 8, 4,
645    12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13,
646    3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4,
647    8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8,
648    4, 12, 4, 8, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4,
649    13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12,
650    4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3,
651    8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8,
652    4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4,
653    12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13,
654    3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4,
655    8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8,
656    4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4,
657    13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12,
658    4, 7, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3,
659    8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8,
660    4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4,
661    12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13,
662    3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4,
663    8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8,
664    4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4,
665    13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 7, 4, 12,
666    4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3, 7, 4, 12, 4, 7, 4, 13, 3,
667    8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8,
668    4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4,
669    12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13, 3, 8, 4, 12, 4, 8, 4, 13,
670    3, 8, 4, 12, 4, 8, 4,
671];
672/// Table used to speed up the writing of zeta codes
673pub const WRITE_BE: &[u16] = &[
674    4, 10, 11, 12, 13, 14, 15, 32, 33, 34, 35, 36, 37, 38, 39, 80, 81, 82, 83, 84, 85, 86, 87, 88,
675    89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
676    110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 256,
677    257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
678    276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
679    295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313,
680    314, 315, 316, 317, 318, 319, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652,
681    653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671,
682    672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690,
683    691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709,
684    710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728,
685    729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747,
686    748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766,
687    767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785,
688    786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804,
689    805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823,
690    824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842,
691    843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861,
692    862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880,
693    881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899,
694    900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918,
695    919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937,
696    938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956,
697    957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975,
698    976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994,
699    995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010,
700    1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 2048, 2049, 2050,
701    2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066,
702    2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082,
703    2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098,
704    2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114,
705    2115, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130,
706    2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146,
707    2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162,
708    2163, 2164, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178,
709    2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, 2194,
710    2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210,
711    2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226,
712    2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240, 2241, 2242,
713    2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2258,
714    2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274,
715    2275, 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287, 2288, 2289, 2290,
716    2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305, 2306,
717    2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322,
718    2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 2337, 2338,
719    2339, 2340, 2341, 2342, 2343, 2344, 2345, 2346, 2347, 2348, 2349, 2350, 2351, 2352, 2353, 2354,
720    2355, 2356, 2357, 2358, 2359, 2360, 2361, 2362, 2363, 2364, 2365, 2366, 2367, 2368, 2369, 2370,
721    2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2384, 2385, 2386,
722    2387, 2388, 2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398, 2399, 2400, 2401, 2402,
723    2403, 2404, 2405, 2406, 2407, 2408, 2409, 2410, 2411, 2412, 2413, 2414, 2415, 2416, 2417, 2418,
724    2419, 2420, 2421, 2422, 2423, 2424, 2425, 2426, 2427, 2428, 2429, 2430, 2431, 2432, 2433, 2434,
725    2435, 2436, 2437, 2438, 2439, 2440, 2441, 2442, 2443, 2444, 2445, 2446, 2447, 2448, 2449, 2450,
726    2451, 2452, 2453, 2454, 2455, 2456, 2457, 2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466,
727    2467, 2468, 2469, 2470, 2471, 2472, 2473, 2474, 2475, 2476, 2477, 2478, 2479, 2480, 2481, 2482,
728    2483, 2484, 2485, 2486, 2487, 2488, 2489, 2490, 2491, 2492, 2493, 2494, 2495, 2496, 2497, 2498,
729    2499, 2500, 2501, 2502, 2503, 2504, 2505, 2506, 2507, 2508, 2509, 2510, 2511, 2512, 2513, 2514,
730    2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 2523, 2524, 2525, 2526, 2527, 2528, 2529, 2530,
731    2531, 2532, 2533, 2534, 2535, 2536, 2537, 2538, 2539, 2540, 2541, 2542, 2543, 2544, 2545, 2546,
732    2547, 2548, 2549, 2550, 2551, 2552, 2553, 2554, 2555, 2556, 2557, 2558, 2559, 5120,
733];
734/// Table used to speed up the writing of zeta codes
735pub const WRITE_LEN_BE: &[u16] = &[
736    3, 4, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
737    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
738    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
739    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
740    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12,
741    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
742    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
743    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
744    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
745    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
746    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
747    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
748    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
749    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
750    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
751    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
752    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
753    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
754    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
755    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
756    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 15, 15, 15, 15, 15, 15, 15, 15,
757    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
758    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
759    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
760    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
761    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
762    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
763    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
764    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
765    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
766    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
767    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
768    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
769    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
770    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
771    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
772    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
773    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
774    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
775    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
776    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
777    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
778    16,
779];
780/// Table used to speed up the writing of zeta codes
781pub const WRITE_LE: &[u16] = &[
782    1, 3, 11, 5, 13, 7, 15, 2, 6, 10, 14, 18, 22, 26, 30, 34, 162, 38, 166, 42, 170, 46, 174, 50,
783    178, 54, 182, 58, 186, 62, 190, 66, 194, 70, 198, 74, 202, 78, 206, 82, 210, 86, 214, 90, 218,
784    94, 222, 98, 226, 102, 230, 106, 234, 110, 238, 114, 242, 118, 246, 122, 250, 126, 254, 4, 12,
785    20, 28, 36, 44, 52, 60, 68, 76, 84, 92, 100, 108, 116, 124, 132, 140, 148, 156, 164, 172, 180,
786    188, 196, 204, 212, 220, 228, 236, 244, 252, 260, 268, 276, 284, 292, 300, 308, 316, 324, 332,
787    340, 348, 356, 364, 372, 380, 388, 396, 404, 412, 420, 428, 436, 444, 452, 460, 468, 476, 484,
788    492, 500, 508, 516, 2564, 524, 2572, 532, 2580, 540, 2588, 548, 2596, 556, 2604, 564, 2612,
789    572, 2620, 580, 2628, 588, 2636, 596, 2644, 604, 2652, 612, 2660, 620, 2668, 628, 2676, 636,
790    2684, 644, 2692, 652, 2700, 660, 2708, 668, 2716, 676, 2724, 684, 2732, 692, 2740, 700, 2748,
791    708, 2756, 716, 2764, 724, 2772, 732, 2780, 740, 2788, 748, 2796, 756, 2804, 764, 2812, 772,
792    2820, 780, 2828, 788, 2836, 796, 2844, 804, 2852, 812, 2860, 820, 2868, 828, 2876, 836, 2884,
793    844, 2892, 852, 2900, 860, 2908, 868, 2916, 876, 2924, 884, 2932, 892, 2940, 900, 2948, 908,
794    2956, 916, 2964, 924, 2972, 932, 2980, 940, 2988, 948, 2996, 956, 3004, 964, 3012, 972, 3020,
795    980, 3028, 988, 3036, 996, 3044, 1004, 3052, 1012, 3060, 1020, 3068, 1028, 3076, 1036, 3084,
796    1044, 3092, 1052, 3100, 1060, 3108, 1068, 3116, 1076, 3124, 1084, 3132, 1092, 3140, 1100, 3148,
797    1108, 3156, 1116, 3164, 1124, 3172, 1132, 3180, 1140, 3188, 1148, 3196, 1156, 3204, 1164, 3212,
798    1172, 3220, 1180, 3228, 1188, 3236, 1196, 3244, 1204, 3252, 1212, 3260, 1220, 3268, 1228, 3276,
799    1236, 3284, 1244, 3292, 1252, 3300, 1260, 3308, 1268, 3316, 1276, 3324, 1284, 3332, 1292, 3340,
800    1300, 3348, 1308, 3356, 1316, 3364, 1324, 3372, 1332, 3380, 1340, 3388, 1348, 3396, 1356, 3404,
801    1364, 3412, 1372, 3420, 1380, 3428, 1388, 3436, 1396, 3444, 1404, 3452, 1412, 3460, 1420, 3468,
802    1428, 3476, 1436, 3484, 1444, 3492, 1452, 3500, 1460, 3508, 1468, 3516, 1476, 3524, 1484, 3532,
803    1492, 3540, 1500, 3548, 1508, 3556, 1516, 3564, 1524, 3572, 1532, 3580, 1540, 3588, 1548, 3596,
804    1556, 3604, 1564, 3612, 1572, 3620, 1580, 3628, 1588, 3636, 1596, 3644, 1604, 3652, 1612, 3660,
805    1620, 3668, 1628, 3676, 1636, 3684, 1644, 3692, 1652, 3700, 1660, 3708, 1668, 3716, 1676, 3724,
806    1684, 3732, 1692, 3740, 1700, 3748, 1708, 3756, 1716, 3764, 1724, 3772, 1732, 3780, 1740, 3788,
807    1748, 3796, 1756, 3804, 1764, 3812, 1772, 3820, 1780, 3828, 1788, 3836, 1796, 3844, 1804, 3852,
808    1812, 3860, 1820, 3868, 1828, 3876, 1836, 3884, 1844, 3892, 1852, 3900, 1860, 3908, 1868, 3916,
809    1876, 3924, 1884, 3932, 1892, 3940, 1900, 3948, 1908, 3956, 1916, 3964, 1924, 3972, 1932, 3980,
810    1940, 3988, 1948, 3996, 1956, 4004, 1964, 4012, 1972, 4020, 1980, 4028, 1988, 4036, 1996, 4044,
811    2004, 4052, 2012, 4060, 2020, 4068, 2028, 4076, 2036, 4084, 2044, 4092, 8, 24, 40, 56, 72, 88,
812    104, 120, 136, 152, 168, 184, 200, 216, 232, 248, 264, 280, 296, 312, 328, 344, 360, 376, 392,
813    408, 424, 440, 456, 472, 488, 504, 520, 536, 552, 568, 584, 600, 616, 632, 648, 664, 680, 696,
814    712, 728, 744, 760, 776, 792, 808, 824, 840, 856, 872, 888, 904, 920, 936, 952, 968, 984, 1000,
815    1016, 1032, 1048, 1064, 1080, 1096, 1112, 1128, 1144, 1160, 1176, 1192, 1208, 1224, 1240, 1256,
816    1272, 1288, 1304, 1320, 1336, 1352, 1368, 1384, 1400, 1416, 1432, 1448, 1464, 1480, 1496, 1512,
817    1528, 1544, 1560, 1576, 1592, 1608, 1624, 1640, 1656, 1672, 1688, 1704, 1720, 1736, 1752, 1768,
818    1784, 1800, 1816, 1832, 1848, 1864, 1880, 1896, 1912, 1928, 1944, 1960, 1976, 1992, 2008, 2024,
819    2040, 2056, 2072, 2088, 2104, 2120, 2136, 2152, 2168, 2184, 2200, 2216, 2232, 2248, 2264, 2280,
820    2296, 2312, 2328, 2344, 2360, 2376, 2392, 2408, 2424, 2440, 2456, 2472, 2488, 2504, 2520, 2536,
821    2552, 2568, 2584, 2600, 2616, 2632, 2648, 2664, 2680, 2696, 2712, 2728, 2744, 2760, 2776, 2792,
822    2808, 2824, 2840, 2856, 2872, 2888, 2904, 2920, 2936, 2952, 2968, 2984, 3000, 3016, 3032, 3048,
823    3064, 3080, 3096, 3112, 3128, 3144, 3160, 3176, 3192, 3208, 3224, 3240, 3256, 3272, 3288, 3304,
824    3320, 3336, 3352, 3368, 3384, 3400, 3416, 3432, 3448, 3464, 3480, 3496, 3512, 3528, 3544, 3560,
825    3576, 3592, 3608, 3624, 3640, 3656, 3672, 3688, 3704, 3720, 3736, 3752, 3768, 3784, 3800, 3816,
826    3832, 3848, 3864, 3880, 3896, 3912, 3928, 3944, 3960, 3976, 3992, 4008, 4024, 4040, 4056, 4072,
827    4088, 4104, 4120, 4136, 4152, 4168, 4184, 4200, 4216, 4232, 4248, 4264, 4280, 4296, 4312, 4328,
828    4344, 4360, 4376, 4392, 4408, 4424, 4440, 4456, 4472, 4488, 4504, 4520, 4536, 4552, 4568, 4584,
829    4600, 4616, 4632, 4648, 4664, 4680, 4696, 4712, 4728, 4744, 4760, 4776, 4792, 4808, 4824, 4840,
830    4856, 4872, 4888, 4904, 4920, 4936, 4952, 4968, 4984, 5000, 5016, 5032, 5048, 5064, 5080, 5096,
831    5112, 5128, 5144, 5160, 5176, 5192, 5208, 5224, 5240, 5256, 5272, 5288, 5304, 5320, 5336, 5352,
832    5368, 5384, 5400, 5416, 5432, 5448, 5464, 5480, 5496, 5512, 5528, 5544, 5560, 5576, 5592, 5608,
833    5624, 5640, 5656, 5672, 5688, 5704, 5720, 5736, 5752, 5768, 5784, 5800, 5816, 5832, 5848, 5864,
834    5880, 5896, 5912, 5928, 5944, 5960, 5976, 5992, 6008, 6024, 6040, 6056, 6072, 6088, 6104, 6120,
835    6136, 6152, 6168, 6184, 6200, 6216, 6232, 6248, 6264, 6280, 6296, 6312, 6328, 6344, 6360, 6376,
836    6392, 6408, 6424, 6440, 6456, 6472, 6488, 6504, 6520, 6536, 6552, 6568, 6584, 6600, 6616, 6632,
837    6648, 6664, 6680, 6696, 6712, 6728, 6744, 6760, 6776, 6792, 6808, 6824, 6840, 6856, 6872, 6888,
838    6904, 6920, 6936, 6952, 6968, 6984, 7000, 7016, 7032, 7048, 7064, 7080, 7096, 7112, 7128, 7144,
839    7160, 7176, 7192, 7208, 7224, 7240, 7256, 7272, 7288, 7304, 7320, 7336, 7352, 7368, 7384, 7400,
840    7416, 7432, 7448, 7464, 7480, 7496, 7512, 7528, 7544, 7560, 7576, 7592, 7608, 7624, 7640, 7656,
841    7672, 7688, 7704, 7720, 7736, 7752, 7768, 7784, 7800, 7816, 7832, 7848, 7864, 7880, 7896, 7912,
842    7928, 7944, 7960, 7976, 7992, 8008, 8024, 8040, 8056, 8072, 8088, 8104, 8120, 8136, 8152, 8168,
843    8184, 8200,
844];
845/// Table used to speed up the writing of zeta codes
846pub const WRITE_LEN_LE: &[u16] = &[
847    3, 4, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
848    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
849    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
850    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
851    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12,
852    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
853    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
854    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
855    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
856    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
857    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
858    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
859    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
860    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
861    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
862    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
863    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
864    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
865    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
866    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
867    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 15, 15, 15, 15, 15, 15, 15, 15,
868    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
869    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
870    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
871    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
872    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
873    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
874    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
875    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
876    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
877    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
878    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
879    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
880    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
881    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
882    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
883    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
884    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
885    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
886    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
887    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
888    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
889    16,
890];
891/// Table used to speed up the skipping of zeta codes
892pub const LEN: &[u8] = &[
893    3, 4, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
894    8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
895    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
896    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
897    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12,
898    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
899    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
900    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
901    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
902    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
903    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
904    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
905    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
906    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
907    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
908    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
909    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
910    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
911    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
912    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
913    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 15, 15, 15, 15, 15, 15, 15, 15,
914    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
915    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
916    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
917    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
918    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
919    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
920    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
921    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
922    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
923    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
924    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
925    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
926    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
927    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
928    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
929    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
930    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
931    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
932    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
933    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
934    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
935    16,
936];
937/// Asserts at compile time that `peek_bits` is large enough for these tables.
938pub const fn check_read_table(peek_bits: usize) {
939    assert!(
940        peek_bits >= READ_BITS,
941        "BitRead peek word too small for zeta code read tables (12 bits required)"
942    );
943}
944/// The K of the zeta codes for these tables
945pub const K: usize = 3;