]> git.sesse.net Git - ffmpeg/blob - libavcodec/atrac3plus_data.h
avformat/mpegts: never discard PAT pid
[ffmpeg] / libavcodec / atrac3plus_data.h
1 /*
2  * ATRAC3+ compatible decoder
3  *
4  * Copyright (c) 2010-2013 Maxim Poliakovski
5  *
6  * This file is part of FFmpeg.
7  *
8  * FFmpeg is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * FFmpeg is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with FFmpeg; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22
23 #ifndef AVCODEC_ATRAC3PLUS_DATA_H
24 #define AVCODEC_ATRAC3PLUS_DATA_H
25
26 #include <stddef.h>
27 #include <stdint.h>
28
29 /** VLC tables for wordlen */
30 static const uint8_t atrac3p_wl_cbs[][12] = {
31     {  1,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
32     {  1,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
33     {  1,  0,  2,  3,  2,  0,  0,  0,  0,  0,  0,  0 },
34     {  1,  0,  2,  3,  2,  0,  0,  0,  0,  0,  0,  0 },
35 };
36
37 /** VLC tables for code table indexes */
38 static const uint8_t atrac3p_ct_cbs[][12] = {
39     {  1,  1,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
40     {  0,  1,  5,  2,  0,  0,  0,  0,  0,  0,  0,  0 },
41     {  0,  1,  5,  2,  0,  0,  0,  0,  0,  0,  0,  0 },
42     {  1,  0,  1,  6,  0,  0,  0,  0,  0,  0,  0,  0 },
43 };
44 /* Symbols for wordlen interleaved with symbols for code table */
45 static const uint8_t atrac3p_wl_ct_xlats[] = {
46     /* wordlen table 1 - 3 entries */
47     0,  1,  7,
48     /* code table 1    - 4 entries */
49     0,  1,  2,  3,
50     /* wordlen table 2 - 5 entries */
51     0,  1,  2,  6,  7,
52     /* code table 2    - 8 entries */
53     0,  1,  2,  3,  4,  5,  6,  7,
54     /* wordlen table 3 - 8 entries */
55     0,  1,  7,  2,  5,  6,  3,  4,
56     /* code table 3    - 8 entries */
57     0,  1,  2,  3,  6,  7,  4,  5,
58     /* wordlen table 4 - 8 entries */
59     0,  1,  7,  2,  3,  6,  4,  5,
60     /* code table 4    - 8 entries */
61     0,  1,  2,  3,  4,  5,  6,  7,
62 };
63
64 /** VLC tables for scale factor indexes */
65 static const uint8_t atrac3p_sf_cbs[][12] = {
66     {  0,  1,  4,  2,  0,  0,  0,  7, 50,  0,  0,  0 },
67     {  0,  1,  4,  2,  0,  0,  0,  7, 50,  0,  0,  0 },
68     {  1,  0,  2,  0,  4,  0,  2,  1, 54,  0,  0,  0 },
69     {  0,  1,  4,  0,  4,  0,  3,  0, 52,  0,  0,  0 },
70     {  0,  1,  4,  2,  0,  8,  0,  0,  0,  0,  0,  0 },
71     {  0,  1,  4,  2,  0,  8,  0,  0,  0,  0,  0,  0 },
72     {  1,  0,  2,  2,  2,  0,  8,  0,  0,  0,  0,  0 },
73     {  0,  1,  4,  2,  2,  2,  4,  0,  0,  0,  0,  0 },
74 };
75
76 static const uint8_t atrac3p_sf_xlats[] = {
77     /* Scale factor index 1 - 64 entries */
78      0,  1, 61, 62, 63,  2, 60,  3,  4,  5,  6, 57, 58, 59,  7,  8,
79      9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
80     25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
81     41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
82     /* Scale factor index 2 - 64 entries */
83      0,  1,  2, 62, 63,  3, 61,  4,  5,  6, 57, 58, 59, 60,  7,  8,
84      9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
85     25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
86     41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
87     /* Scale factor index 3 - 64 entries */
88      0,  1, 63,  2,  3, 61, 62,  4, 60, 59,  5,  6,  7,  8,  9, 10,
89     11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
90     27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
91     43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
92     /* Scale factor index 4 - 64 entries */
93      0,  1,  2, 62, 63,  3,  4, 60, 61,  5, 58, 59,  6,  7,  8,  9,
94     10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
95     26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
96     42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
97     /* Scale factor index 5 - 15 entries */
98      0,  1, 13, 14, 15,  2, 12,  3,  4,  5,  6,  7,  9, 10, 11,
99     /* Scale factor index 6 - 15 entries */
100      0,  1,  2, 14, 15,  3, 13,  4,  5,  6,  7,  9, 10, 11, 12,
101     /* Scale factor index 7 - 15 entries */
102      0,  1, 15,  2, 14,  3, 13,  4,  5,  6,  7,  9, 10, 11, 12,
103     /* Scale factor index 8 - 15 entries */
104      0,  1,  2, 14, 15,  3, 13,  4, 12,  5, 11,  6,  7,  9, 10,
105 };
106
107 static const uint8_t atrac3p_ct_huff1[4][2] = {
108     { 0, 1 }, { 1, 2 }, { 2, 3 }, { 3, 3 },
109 };
110
111 static const uint8_t atrac3p_ct_huff2[8][2] = {
112     { 0, 2 }, { 1, 3 }, { 2, 3 }, { 3, 3 }, { 4, 3 }, { 5, 3 }, { 6, 4 },
113     { 7, 4 },
114 };
115
116 static const uint8_t atrac3p_ct_huff3[8][2] = {
117     { 0, 2 }, { 1, 3 }, { 2, 3 }, { 3, 3 }, { 6, 3 }, { 7, 3 }, { 4, 4 },
118     { 5, 4 },
119 };
120
121 static const uint8_t atrac3p_ct_huff4[8][2] = {
122     { 0, 1 }, { 1, 3 }, { 2, 4 }, { 3, 4 }, { 4, 4 }, { 5, 4 }, { 6, 4 },
123     { 7, 4 },
124 };
125
126 /* weights for quantized word lengths */
127 static const int8_t atrac3p_wl_weights[6][32] = {
128     { 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0,
129       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
130     { 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 1, 1, 1, 0,
131       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
132     { 6, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 2, 2, 1, 1,
133       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 },
134     { 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0,
135       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
136     { 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 1, 1, 1, 0,
137       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
138     { 6, 5, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 2, 2, 1, 1,
139       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
140 };
141
142 /* weights for quantized scale factors
143  * sf_weights[i] = i / (tab_idx + 1)
144  * where tab_idx = [1,2] */
145 static const int8_t atrac3p_sf_weights[2][32] = {
146     { 0, 0, 1, 1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,
147       8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15 },
148     { 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4,  4,  5,
149       5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10 }
150 };
151
152 /** Ungroup table for word length segments.
153  *  Numbers in this table tell which coeff belongs to which segment. */
154 static const uint8_t atrac3p_qu_num_to_seg[32] = {
155     0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5,
156     5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9
157 };
158
159 /** Map quant unit number to subband number */
160 static const uint8_t atrac3p_qu_to_subband[32] = {
161     0, 0, 0, 0, 0, 0, 0, 0, 1, 1,  1,  1,  2,  2,  2, 2,
162     3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
163 };
164
165 /** Map subband number to number of power compensation groups */
166 static const int atrac3p_subband_to_num_powgrps[16] = {
167     1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5
168 };
169
170 /** 3D base shape tables. The values are grouped together as follows:
171  *  [num_start_values = 8][num_shape_tables = 16][num_seg_coeffs = 9]
172  *  For each of the 8 start values there are 16 different shapes each
173  *  9 coefficients long. */
174 static const int8_t atrac3p_wl_shapes[8][16][9] = {
175     { {  0,  0,  0,  0,  0,  0,  0, -2, -1 },
176       {  0,  0,  0,  0,  0,  0,  0, -5, -1 },
177       {  0,  0,  0, -7,  0,  0,  0,  0,  0 },
178       {  0,  0,  0,  0,  0, -7,  0,  0,  0 },
179       {  0,  0,  0,  0,  0,  0, -5,  0,  0 },
180       {  0,  0,  0,  0, -5,  0,  0,  0,  0 },
181       { -7, -7,  0,  0,  0,  0,  0,  0,  0 },
182       {  0, -7,  0,  0,  0,  0,  0,  0,  0 },
183       { -2, -2, -5,  0,  0,  0,  0,  0,  0 },
184       {  0,  0,  0, -2, -5,  0,  0,  0,  0 },
185       {  0,  0,  0,  0,  0, -2, -5,  0,  0 },
186       {  0,  0,  0, -5,  0,  0,  0,  0,  0 },
187       {  0, -2, -7, -2,  0,  0,  0,  0,  0 },
188       {  0,  0,  0,  0, -2, -5,  0,  0,  0 },
189       {  0,  0,  0, -5, -5,  0,  0,  0,  0 },
190       {  0,  0,  0, -5, -2,  0,  0,  0,  0 } },
191     { { -1, -5, -3, -2, -1, -1,  0,  0,  0 },
192       { -2, -5, -3, -3, -2, -1, -1,  0,  0 },
193       {  0, -1, -1, -1,  0,  0,  0,  0,  0 },
194       { -1, -3,  0,  0,  0,  0,  0,  0,  0 },
195       { -1, -2,  0,  0,  0,  0,  0,  0,  0 },
196       { -1, -3, -1,  0,  0,  0,  0,  1,  1 },
197       { -1, -5, -3, -3, -2, -1,  0,  0,  0 },
198       { -1, -1, -4, -2, -2, -1, -1,  0,  0 },
199       { -1, -1, -3, -2, -3, -1, -1, -1,  0 },
200       { -1, -4, -2, -3, -1,  0,  0,  0,  0 },
201       {  0, -1, -2, -2, -1, -1,  0,  0,  0 },
202       {  0, -2, -1,  0,  0,  0,  0,  0,  0 },
203       { -1, -1,  0,  0,  0,  0,  0,  0,  0 },
204       { -1, -1, -3, -2, -2, -1, -1, -1,  0 },
205       {  0,  0,  0,  0,  0,  0,  0,  0,  0 },
206       {  0, -1, -3, -2, -2, -1, -1, -1,  0 }, },
207     { { -1, -2,  0,  1,  1,  1,  1,  1,  1 },
208       {  0, -1,  1,  1,  1,  1,  1,  1,  1 },
209       {  0, -2,  1,  1,  1,  1,  1,  1,  1 },
210       {  0, -2,  0,  1,  1,  1,  1,  1,  1 },
211       { -1, -1,  0,  1,  1,  1,  1,  1,  1 },
212       {  0,  0, -1,  0,  1,  1,  1,  1,  1 },
213       { -1, -1,  1,  1,  1,  1,  1,  1,  1 },
214       {  0,  0, -1,  1,  1,  1,  1,  1,  1 },
215       {  0, -1,  0,  1,  1,  1,  1,  1,  1 },
216       { -1, -1, -1,  1,  1,  1,  1,  1,  1 },
217       {  0,  0,  0,  0,  1,  1,  1,  1,  1 },
218       {  0,  0,  0,  1,  1,  1,  1,  1,  1 },
219       {  0, -1, -1,  1,  1,  1,  1,  1,  1 },
220       {  0,  1,  0,  1,  1,  1,  1,  1,  1 },
221       {  0, -3, -2,  1,  1,  1,  1,  2,  2 },
222       { -3, -5, -3,  2,  2,  2,  2,  2,  2 }, },
223     { { -1, -2,  0,  2,  2,  2,  2,  2,  2 },
224       { -1, -2,  0,  1,  2,  2,  2,  2,  2 },
225       {  0, -2,  0,  2,  2,  2,  2,  2,  2 },
226       { -1,  0,  1,  2,  2,  2,  2,  2,  2 },
227       {  0,  0,  1,  2,  2,  2,  2,  2,  2 },
228       {  0, -2,  0,  1,  2,  2,  2,  2,  2 },
229       {  0, -1,  1,  2,  2,  2,  2,  2,  2 },
230       { -1, -1,  0,  2,  2,  2,  2,  2,  2 },
231       { -1, -1,  0,  1,  2,  2,  2,  2,  2 },
232       { -1, -2, -1,  2,  2,  2,  2,  2,  2 },
233       {  0, -1,  0,  2,  2,  2,  2,  2,  2 },
234       {  1,  1,  0,  1,  2,  2,  2,  2,  2 },
235       {  0,  1,  2,  2,  2,  2,  2,  2,  2 },
236       {  1,  0,  0,  1,  2,  2,  2,  2,  2 },
237       {  0,  0,  0,  1,  2,  2,  2,  2,  2 },
238       { -1, -1, -1,  1,  2,  2,  2,  2,  2 }, },
239     { {  0,  1,  2,  3,  3,  3,  3,  3,  3 },
240       {  1,  1,  2,  3,  3,  3,  3,  3,  3 },
241       { -1,  0,  1,  2,  3,  3,  3,  3,  3 },
242       {  0,  0,  2,  3,  3,  3,  3,  3,  3 },
243       { -1,  0,  1,  3,  3,  3,  3,  3,  3 },
244       {  0,  0,  1,  3,  3,  3,  3,  3,  3 },
245       {  1,  2,  3,  3,  3,  3,  3,  3,  3 },
246       {  1,  2,  2,  3,  3,  3,  3,  3,  3 },
247       {  0,  1,  1,  3,  3,  3,  3,  3,  3 },
248       {  0,  0,  1,  2,  3,  3,  3,  3,  3 },
249       { -1,  1,  2,  3,  3,  3,  3,  3,  3 },
250       { -1,  0,  2,  3,  3,  3,  3,  3,  3 },
251       {  2,  2,  3,  3,  3,  3,  3,  3,  3 },
252       {  1,  1,  3,  3,  3,  3,  3,  3,  3 },
253       {  0,  2,  3,  3,  3,  3,  3,  3,  3 },
254       {  0,  1,  1,  2,  3,  3,  3,  3,  3 }, },
255     { {  0,  1,  2,  3,  4,  4,  4,  4,  4 },
256       {  1,  2,  3,  4,  4,  4,  4,  4,  4 },
257       {  0,  0,  2,  3,  4,  4,  4,  4,  4 },
258       {  1,  1,  2,  4,  4,  4,  4,  4,  4 },
259       {  0,  1,  2,  4,  4,  4,  4,  4,  4 },
260       { -1,  0,  1,  3,  4,  4,  4,  4,  4 },
261       {  0,  0,  1,  3,  4,  4,  4,  4,  4 },
262       {  1,  1,  2,  3,  4,  4,  4,  4,  4 },
263       {  0,  1,  1,  3,  4,  4,  4,  4,  4 },
264       {  2,  2,  3,  4,  4,  4,  4,  4,  4 },
265       {  1,  1,  3,  4,  4,  4,  4,  4,  4 },
266       {  1,  2,  2,  4,  4,  4,  4,  4,  4 },
267       { -1,  0,  2,  3,  4,  4,  4,  4,  4 },
268       {  0,  1,  3,  4,  4,  4,  4,  4,  4 },
269       {  1,  2,  2,  3,  4,  4,  4,  4,  4 },
270       {  0,  2,  3,  4,  4,  4,  4,  4,  4 }, },
271     { {  1,  2,  3,  4,  5,  5,  5,  5,  5 },
272       {  0,  1,  2,  3,  4,  5,  5,  5,  5 },
273       {  0,  1,  2,  3,  5,  5,  5,  5,  5 },
274       {  1,  1,  3,  4,  5,  5,  5,  5,  5 },
275       {  1,  1,  2,  4,  5,  5,  5,  5,  5 },
276       {  1,  2,  2,  4,  5,  5,  5,  5,  5 },
277       {  1,  1,  2,  3,  5,  5,  5,  5,  5 },
278       {  2,  2,  3,  4,  5,  5,  5,  5,  5 },
279       {  0,  1,  2,  4,  5,  5,  5,  5,  5 },
280       {  2,  2,  3,  5,  5,  5,  5,  5,  5 },
281       {  1,  2,  3,  5,  5,  5,  5,  5,  5 },
282       {  0,  1,  3,  4,  5,  5,  5,  5,  5 },
283       {  1,  2,  2,  3,  5,  5,  5,  5,  5 },
284       {  2,  3,  4,  5,  5,  5,  5,  5,  5 },
285       {  0,  2,  3,  4,  5,  5,  5,  5,  5 },
286       {  1,  1,  1,  3,  4,  5,  5,  5,  5 }, },
287     { {  1,  2,  3,  4,  5,  5,  5,  6,  6 },
288       {  1,  2,  3,  4,  5,  6,  6,  6,  6 },
289       {  2,  3,  4,  5,  6,  6,  6,  6,  6 },
290       {  1,  2,  3,  4,  6,  6,  6,  6,  6 },
291       {  2,  2,  3,  4,  5,  5,  5,  6,  6 },
292       {  1,  2,  3,  4,  5,  5,  6,  6,  6 },
293       {  2,  2,  3,  4,  6,  6,  6,  6,  6 },
294       {  2,  2,  3,  4,  5,  6,  6,  6,  6 },
295       {  2,  2,  4,  5,  6,  6,  6,  6,  6 },
296       {  2,  2,  3,  5,  6,  6,  6,  6,  6 },
297       {  1,  2,  3,  5,  6,  6,  6,  6,  6 },
298       {  2,  3,  3,  5,  6,  6,  6,  6,  6 },
299       {  1,  2,  4,  5,  6,  6,  6,  6,  6 },
300       {  2,  2,  3,  4,  5,  5,  6,  6,  6 },
301       {  2,  3,  3,  4,  6,  6,  6,  6,  6 },
302       {  1,  3,  4,  5,  6,  6,  6,  6,  6 } }
303 };
304
305 /** 2D base shape tables for scale factor coding.
306  *  The values are grouped together as follows:
307  *  [num_shape_tables = 64][num_seg_coeffs = 9] */
308 static const int8_t atrac3p_sf_shapes[64][9] = {
309     { -3, -2, -1,  0,  3,  5,  6,  8, 40 },
310     { -3, -2,  0,  1,  7,  9, 11, 13, 20 },
311     { -1,  0,  0,  1,  6,  8, 10, 13, 41 },
312     {  0,  0,  0,  2,  5,  5,  6,  8, 14 },
313     {  0,  0,  0,  2,  6,  7,  8, 11, 47 },
314     {  0,  0,  1,  2,  5,  7,  8, 10, 32 },
315     {  0,  0,  1,  3,  8, 10, 12, 14, 47 },
316     {  0,  0,  2,  4,  9, 10, 12, 14, 40 },
317     {  0,  0,  3,  5,  9, 10, 12, 14, 22 },
318     {  0,  1,  3,  5, 10, 14, 18, 22, 31 },
319     {  0,  2,  5,  6, 10, 10, 10, 12, 46 },
320     {  0,  2,  5,  7, 12, 14, 15, 18, 44 },
321     {  1,  1,  4,  5,  7,  7,  8,  9, 15 },
322     {  1,  2,  2,  2,  4,  5,  7,  9, 26 },
323     {  1,  2,  2,  3,  6,  7,  7,  8, 47 },
324     {  1,  2,  2,  3,  6,  8, 10, 13, 22 },
325     {  1,  3,  4,  7, 13, 17, 21, 24, 41 },
326     {  1,  4,  0,  4, 10, 12, 13, 14, 17 },
327     {  2,  3,  3,  3,  6,  8, 10, 13, 48 },
328     {  2,  3,  3,  4,  9, 12, 14, 17, 47 },
329     {  2,  3,  3,  5, 10, 12, 14, 17, 25 },
330     {  2,  3,  5,  7,  8,  9,  9,  9, 13 },
331     {  2,  3,  5,  9, 16, 21, 25, 28, 33 },
332     {  2,  4,  5,  8, 12, 14, 17, 19, 26 },
333     {  2,  4,  6,  8, 12, 13, 13, 15, 20 },
334     {  2,  4,  7, 12, 20, 26, 30, 32, 35 },
335     {  3,  3,  5,  6, 12, 14, 16, 19, 34 },
336     {  3,  4,  4,  5,  7,  9, 10, 11, 48 },
337     {  3,  4,  5,  6,  8,  9, 10, 11, 16 },
338     {  3,  5,  5,  5,  7,  9, 10, 13, 35 },
339     {  3,  5,  5,  7, 10, 12, 13, 15, 49 },
340     {  3,  5,  7,  7,  8,  7,  9, 12, 21 },
341     {  3,  5,  7,  8, 12, 14, 15, 15, 24 },
342     {  3,  5,  7, 10, 16, 21, 24, 27, 44 },
343     {  3,  5,  8, 14, 21, 26, 28, 29, 42 },
344     {  3,  6, 10, 13, 18, 19, 20, 22, 27 },
345     {  3,  6, 11, 16, 24, 27, 28, 29, 31 },
346     {  4,  5,  4,  3,  4,  6,  8, 11, 18 },
347     {  4,  6,  5,  6,  9, 10, 12, 14, 20 },
348     {  4,  6,  7,  6,  6,  6,  7,  8, 46 },
349     {  4,  6,  7,  9, 13, 16, 18, 20, 48 },
350     {  4,  6,  7,  9, 14, 17, 20, 23, 31 },
351     {  4,  6,  9, 11, 14, 15, 15, 17, 21 },
352     {  4,  8, 13, 20, 27, 32, 35, 36, 38 },
353     {  5,  6,  6,  4,  5,  6,  7,  6,  6 },
354     {  5,  7,  7,  8,  9,  9, 10, 12, 49 },
355     {  5,  8,  9,  9, 10, 11, 12, 13, 42 },
356     {  5,  8, 10, 12, 15, 16, 17, 19, 42 },
357     {  5,  8, 12, 17, 26, 31, 32, 33, 44 },
358     {  5,  9, 13, 16, 20, 22, 23, 23, 35 },
359     {  6,  8,  8,  7,  6,  5,  6,  8, 15 },
360     {  6,  8,  8,  8,  9, 10, 12, 16, 24 },
361     {  6,  8,  8,  9, 10, 10, 11, 11, 13 },
362     {  6,  8, 10, 13, 19, 21, 24, 26, 32 },
363     {  6,  9, 10, 11, 13, 13, 14, 16, 49 },
364     {  7,  9,  9, 10, 13, 14, 16, 19, 27 },
365     {  7, 10, 12, 13, 16, 16, 17, 17, 27 },
366     {  7, 10, 12, 14, 17, 19, 20, 22, 48 },
367     {  8,  9, 10,  9, 10, 11, 11, 11, 19 },
368     {  8, 11, 12, 12, 13, 13, 13, 13, 17 },
369     {  8, 11, 13, 14, 16, 17, 19, 20, 27 },
370     {  8, 12, 17, 22, 26, 28, 29, 30, 33 },
371     { 10, 14, 16, 19, 21, 22, 22, 24, 28 },
372     { 10, 15, 17, 18, 21, 22, 23, 25, 43 }
373 };
374
375 static const uint8_t atrac3p_ct_restricted_to_full[2][7][4] = {
376     { { 0, 5, 4, 1 },
377       { 0, 1, 2, 3 },
378       { 3, 0, 4, 2 },
379       { 4, 0, 1, 2 },
380       { 1, 0, 4, 3 },
381       { 3, 0, 2, 1 },
382       { 0, 3, 1, 2 } },
383     { { 4, 0, 1, 2 },
384       { 0, 3, 2, 1 },
385       { 0, 1, 2, 3 },
386       { 0, 1, 2, 4 },
387       { 0, 1, 2, 3 },
388       { 1, 4, 2, 0 },
389       { 0, 1, 2, 3 } }
390 };
391
392 /** Tables for spectrum coding */
393
394 /* If the first entry of a subtable is negative, it means
395  * that another VLC is to be reused. */
396 static const int8_t atrac3p_spectra_cbs[][12] = {
397     {  1,  0,  0,  1,  7,  0, 19,  5, 13, 21,  6,  8 },
398     {  0,  1,  0,  4, 11,  0,  1, 29,  6, 20,  7,  2 },
399     {  0,  0,  1,  8,  0, 13, 18,  7,  2,  0,  0,  0 },
400     {  0,  2,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
401     {  0,  0,  1,  3,  5,  8, 12, 23, 72, 68, 31,  2 },
402     {  0,  1,  3,  2,  6,  4,  0,  0,  0,  0,  0,  0 },
403     {  0,  1,  2,  2,  2,  6, 14, 21, 13,  2,  0,  0 },
404     {  1,  0,  0,  0,  8,  1, 18,  9, 22, 10, 12,  0 },
405     {  0,  0,  0,  0, 16, 11, 32, 19,  1,  2,  0,  0 },
406     {  1,  0,  0,  4,  2,  2,  9, 15, 12,  4,  0,  0 },
407     {  0,  1,  0,  4,  3,  5, 16, 28, 34, 26,  4,  0 },
408     {  0,  0,  0,  0,  9, 12, 16, 44, 98, 42,  4,  0 },
409     {  0,  1,  1,  2,  2,  5,  7, 21, 54, 85, 62, 16 },
410     {  0,  0,  3,  2,  5,  7, 17, 23,  6,  0,  0,  0 },
411     {  1,  0,  0,  2,  6,  0,  7, 21, 15, 17,  8,  4 },
412     {  0,  1,  4,  0,  4,  3,  8,  3,  2,  0,  0,  0 },
413     {  0,  0,  5,  0,  4,  6, 10, 16,  8,  0,  0,  0 },
414     {  0,  3,  1,  2,  0,  0,  0,  0,  0,  0,  0,  0 },
415     {  0,  1,  5,  2,  0,  0,  0,  0,  0,  0,  0,  0 },
416     {  0,  0,  0,  3,  4, 12, 15, 34, 83, 75, 30,  0 },
417     {  0,  0,  0,  3, 14, 10, 20, 16,  0,  0,  0,  0 },
418     {  1,  0,  3,  1,  0,  4,  0,  0,  0,  0,  0,  0 },
419     {  1,  0,  0,  2,  2,  6, 12, 18, 19, 15,  6,  0 },
420     {  0,  0,  1,  1, 13,  1, 14, 28, 33, 81, 32, 52 },
421     {  1,  1,  1,  1,  2,  0,  0,  0,  0,  0,  0,  0 },
422     {  0,  1,  0,  2,  3,  6, 19,  9, 75, 110, 0,  0 },
423     {  0,  0,  1,  3,  5,  5, 13, 27, 69, 96, 35,  2 },
424     {  0,  0,  0,  7,  6,  8, 22, 20,  0,  0,  0,  0 },
425     {  1,  0,  0,  6,  2,  0,  0,  0, 19,  9, 24, 20 },
426     {  0,  0,  1,  2, 13,  1, 31, 13, 16,  4,  0,  0 },
427     {  0,  2,  3,  2,  0,  0,  0,  0,  0,  0,  0,  0 },
428     {  0,  0,  0,  5,  4, 12, 17, 47, 24, 12,  0,  0 },
429     {  0,  2,  2,  4,  0,  0,  0,  0,  0,  0,  0,  0 },
430     {  0,  0,  0,  0,  1, 16, 31, 36, 172, 0,  0,  0 },
431     {  0,  0,  0,  5, 12,  9, 12, 15, 10,  0,  0,  0 },
432     {  0,  1,  0,  6,  2,  6, 18,  4, 26,  6, 12,  0 },
433     {  1,  0,  2,  2,  0,  4,  3,  8,  3,  2,  0,  0 },
434     {  0,  2,  3,  2,  0,  0,  0,  0,  0,  0,  0,  0 },
435     {  0,  0,  0,  4,  7, 12, 19, 21, 58,  0,  0,  0 },
436     {  1,  1,  1,  0,  3,  2,  0,  0,  0,  0,  0,  0 },
437     {  0,  0,  1,  8,  6,  8,  8,  0,  0,  0,  0,  0 },
438     {  0,  0,  1,  5,  7,  8, 16, 22,  4,  0,  0,  0 },
439     {  0,  1,  0,  8,  0,  1, 16, 10, 29, 12,  4,  0 },
440     {  0,  0,  5,  2,  2,  9,  5,  2,  0,  0,  0,  0 },
441     {  0,  0,  1,  1, 10,  4, 16, 29, 46, 75, 74,  0 },
442     {  0,  0,  0,  1,  7, 12, 36, 63,  2,  0,  0,  0 },
443     {  0,  3,  0,  1,  3,  4,  4,  0,  0,  0,  0,  0 },
444     {  0,  1,  2,  2,  6,  8,  6,  3,  1,  2,  0,  0 },
445     {  0,  1,  1,  3,  4,  6, 13, 25, 10,  0,  0,  0 },
446     {  1,  1,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
447     {  0,  1,  0,  4,  8,  3,  8, 24, 17, 12,  4,  0 },
448     {  0,  1,  1,  5,  2,  8,  7, 13,  8,  4,  0,  0 },
449     {  1,  0,  0,  4,  0,  4,  5,  9, 30, 45, 21,  2 },
450     {  0,  1,  3,  3,  4,  4,  0,  0,  0,  0,  0,  0 },
451     {  0,  0,  1,  3,  4,  8, 10, 36, 60, 78, 48,  8 },
452     { -6 },
453     {  1,  0,  0,  2,  6,  0, 11, 13, 12, 24,  4,  8 },
454     {  1,  0,  0,  4,  0,  8,  4,  9, 19, 13, 13, 10 },
455     {  1,  0,  0,  4,  0,  5, 12, 13, 14,  0,  0,  0 },
456     {  0,  1,  0,  4,  4,  5,  9, 30, 45, 21,  2,  0 },
457     {  0,  0,  1,  4,  4,  4, 12, 30, 73, 75, 22,  0 },
458     { -5 },
459     {  0,  0,  3,  2,  4,  8, 23, 13, 10,  0,  0,  0 },
460     { -14 },
461     {  0,  0,  1,  3, 12,  0, 30,  9, 18,  8,  0,  0 },
462     { -9 },
463     {  1,  0,  0,  4,  0,  3,  5, 16, 28, 34, 26,  4 },
464     { -11 },
465     {  0,  0,  0,  4,  4,  9, 13, 37, 76, 72, 39,  2 },
466     { -6 },
467     { -28 },
468     { -22 },
469     { -2 },
470     { -31 },
471     { -60 },
472     {  0,  0,  2,  2,  4,  5, 11, 26, 67, 78, 51, 10 },
473     { -6 },
474     { -35 },
475     {  0,  1,  0,  4,  6,  7, 10, 22, 11, 16,  4,  0 },
476     {  0,  1,  0,  0,  4, 11,  8, 28, 92, 97, 13,  2 },
477     { -59 },
478     {  1,  0,  0,  0,  4,  6,  6, 14, 42, 63, 59, 30 },
479     { -75 },
480     {  1,  0,  2,  0,  2,  2,  6, 17, 14, 13,  6,  0 },
481     {  1,  0,  0,  1,  7,  0, 20,  4, 10, 24,  2, 12 },
482     {  1,  0,  1,  3,  2,  3,  7,  4,  4,  0,  0,  0 },
483     {  0,  1,  1,  3,  4,  9, 15, 12,  4,  0,  0,  0 },
484     { -66 },
485     { -32 },
486     { -12 },
487     {  0,  1,  1,  3,  4,  6, 14, 22, 12,  0,  0,  0 },
488     { -42 },
489     {  1,  0,  1,  3,  2,  3,  7,  4,  4,  0,  0,  0 },
490     {  1,  1,  1,  0,  4,  0,  0,  0,  0,  0,  0,  0 },
491     { -17 },
492     { -39 },
493     {  1,  0,  2,  0,  2,  4, 11,  9,  2,  0,  0,  0 },
494     { -62 },
495     { -28 },
496     {  1,  0,  0,  2,  3,  5, 12, 14, 18, 15,  9,  2 },
497     {  1,  1,  1,  0,  4,  0,  0,  0,  0,  0,  0,  0 },
498     {  1,  1,  1,  1,  2,  0,  0,  0,  0,  0,  0,  0 },
499     {  1,  0,  0,  2,  2,  2,  6, 12, 34, 92, 54, 20 },
500     {  1,  0,  0,  3,  0,  3,  3, 10, 40, 85, 61, 50 },
501     {  0,  1,  2,  1,  4,  7, 10, 26, 12,  0,  0,  0 },
502     {  1,  0,  0,  1,  7,  0, 19,  5, 13, 23,  0, 12 },
503     { -78 },
504     {  1,  0,  0,  0,  1,  4,  9, 4, 103, 110, 24, 0 },
505     {  1,  0,  2,  2,  2,  4,  0,  0,  0,  0,  0,  0 },
506     {  0,  1,  4,  0,  0,  0,  8, 11, 24, 53, 64, 60 },
507     { -47 },
508     {  0,  1,  0,  4,  6, 10, 12,  7, 15,  4,  4,  0 },
509 };
510
511 static const uint8_t atrac3p_spectra_xlats[] = {
512     /* Table set A, code table 0, wordlen 1 - 81 entries */
513     0x00, 0x03, 0x40, 0xC0, 0x10, 0x30, 0x04, 0x0C, 0x01, 0x50, 0xD0, 0x70,
514     0xF0, 0xC4, 0x14, 0x34, 0x4C, 0x1C, 0x3C, 0x41, 0xC1, 0x31, 0x05, 0x0D,
515     0xC3, 0x13, 0x07, 0x0F, 0x44, 0xCC, 0x11, 0x43, 0x33, 0x54, 0x74, 0xDC,
516     0xFC, 0x71, 0x15, 0x4D, 0xCD, 0x1D, 0xD3, 0xC7, 0x37, 0x3F, 0xD4, 0xF4,
517     0x5C, 0x7C, 0x51, 0xD1, 0xF1, 0x45, 0xC5, 0x35, 0xDD, 0x3D, 0x53, 0x73,
518     0xF3, 0x47, 0x17, 0x77, 0x4F, 0xCF, 0x1F, 0x55, 0xF5, 0x7D, 0xD7, 0x5F,
519     0xFF, 0xD5, 0x75, 0x5D, 0xFD, 0x57, 0xF7, 0xDF, 0x7F,
520     /* Table set A, code table 0, wordlen 2 - 81 entries */
521     0x00, 0x40, 0x10, 0x04, 0x01, 0x50, 0x44, 0x14, 0x54, 0x41, 0x11, 0x51,
522     0x05, 0x45, 0x15, 0x55, 0x90, 0x80, 0x20, 0x60, 0x84, 0x94, 0x24, 0x64,
523     0x08, 0x48, 0x18, 0x58, 0x81, 0x91, 0x21, 0x85, 0x95, 0x65, 0x09, 0x49,
524     0x19, 0x59, 0x02, 0x42, 0x12, 0x52, 0x06, 0x46, 0x16, 0x56, 0x88, 0x61,
525     0x25, 0x29, 0x69, 0x5A, 0xA0, 0xA4, 0x98, 0x28, 0x68, 0xA1, 0xA5, 0x89,
526     0x99, 0xA9, 0x82, 0x92, 0x22, 0x62, 0x96, 0x26, 0x66, 0x0A, 0x4A, 0x1A,
527     0xA8, 0x86, 0xA6, 0x8A, 0x9A, 0x2A, 0x6A, 0xA2, 0xAA,
528     /* Table set A, code table 0, wordlen 3 - 49 entries */
529     0x00, 0x08, 0x38, 0x01, 0x09, 0x39, 0x07, 0x0F, 0x3F, 0x10, 0x30, 0x11,
530     0x31, 0x02, 0x0A, 0x3A, 0x05, 0x06, 0x0E, 0x3E, 0x17, 0x37, 0x18, 0x28,
531     0x19, 0x29, 0x2A, 0x32, 0x03, 0x0B, 0x33, 0x3B, 0x0D, 0x15, 0x3D, 0x16,
532     0x1E, 0x36, 0x1F, 0x2F, 0x12, 0x1A, 0x13, 0x2B, 0x1D, 0x35, 0x2E, 0x1B,
533     0x2D,
534     /* Table set A, code table 0, wordlen 4 - 6 entries */
535     0x01, 0x02, 0x00, 0x03, 0x04, 0x05,
536     /* Table set A, code table 0, wordlen 5 - 225 entries */
537     0x00, 0x10, 0xF0, 0x01, 0x11, 0xF1, 0x0F, 0x1F, 0xFF, 0x20, 0xE0, 0xE1,
538     0x02, 0xF2, 0x0E, 0x1E, 0x2F, 0x30, 0xD0, 0x21, 0x12, 0x22, 0xE2, 0x03,
539     0x0D, 0x2E, 0xEE, 0xFE, 0xEF, 0x40, 0xC0, 0x31, 0xC1, 0xD1, 0x32, 0xD2,
540     0x13, 0x23, 0xE3, 0xF3, 0x04, 0xF4, 0x0C, 0x1C, 0x1D, 0x2D, 0xED, 0xFD,
541     0x3E, 0xDE, 0x3F, 0xDF, 0x50, 0x60, 0x70, 0x90, 0xA0, 0xB0, 0x41, 0x51,
542     0x61, 0x71, 0x91, 0xA1, 0xB1, 0x42, 0x62, 0x92, 0xA2, 0xC2, 0x33, 0xC3,
543     0xD3, 0x14, 0x24, 0x34, 0xD4, 0xE4, 0x05, 0x15, 0xF5, 0x06, 0x16, 0x26,
544     0xE6, 0xF6, 0x07, 0x17, 0xE7, 0xF7, 0x09, 0x19, 0x29, 0xF9, 0x0A, 0x1A,
545     0x2A, 0xEA, 0xFA, 0x0B, 0x1B, 0xFB, 0x2C, 0x3C, 0xDC, 0xEC, 0xFC, 0x3D,
546     0x4D, 0xCD, 0xDD, 0x4E, 0x6E, 0x7E, 0xAE, 0xCE, 0x4F, 0x5F, 0x6F, 0x7F,
547     0x9F, 0xAF, 0xBF, 0xCF, 0x52, 0x72, 0xB2, 0x43, 0x53, 0x63, 0x73, 0x93,
548     0xA3, 0xB3, 0x44, 0x64, 0x74, 0x94, 0xA4, 0xB4, 0xC4, 0x25, 0x35, 0xA5,
549     0xC5, 0xD5, 0xE5, 0x36, 0x46, 0xB6, 0xC6, 0xD6, 0x27, 0x37, 0x47, 0xB7,
550     0xC7, 0xD7, 0x39, 0x49, 0x59, 0xC9, 0xD9, 0xE9, 0x3A, 0x4A, 0x5A, 0xCA,
551     0xDA, 0x2B, 0x3B, 0x4B, 0x6B, 0x7B, 0xDB, 0xEB, 0x4C, 0x5C, 0x6C, 0x7C,
552     0x9C, 0xAC, 0xCC, 0x5D, 0x6D, 0x7D, 0x9D, 0xAD, 0xBD, 0x5E, 0x9E, 0xBE,
553     0x54, 0x45, 0x55, 0x65, 0x75, 0x95, 0xB5, 0x56, 0x66, 0x76, 0x96, 0xA6,
554     0x57, 0x67, 0x97, 0xA7, 0x69, 0x79, 0xA9, 0xB9, 0x6A, 0x7A, 0x9A, 0xAA,
555     0xBA, 0x5B, 0x9B, 0xAB, 0xBB, 0xCB, 0xBC, 0x77, 0x99,
556     /* Table set A, code table 0, wordlen 6 - 16 entries */
557     0x01, 0x00, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0D, 0x0E,
558     0x0A, 0x0B, 0x0C, 0x0F,
559     /* Table set A, code table 0, wordlen 7 - 63 entries */
560     0x00, 0x01, 0x3F, 0x02, 0x3E, 0x03, 0x3D, 0x04, 0x05, 0x06, 0x3A, 0x3B,
561     0x3C, 0x07, 0x08, 0x09, 0x0A, 0x1A, 0x1B, 0x1C, 0x24, 0x25, 0x26, 0x36,
562     0x37, 0x38, 0x39, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x19, 0x1D, 0x1E,
563     0x1F, 0x21, 0x22, 0x23, 0x27, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35,
564     0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x29, 0x2A, 0x2B, 0x2C, 0x2D,
565     0x2E, 0x18, 0x28,
566     /* Table set A, code table 1, wordlen 1 - 81 entries */
567     0x00, 0x40, 0xC0, 0x10, 0x30, 0x04, 0x0C, 0x01, 0x03, 0xD0, 0x50, 0x70,
568     0xF0, 0xC4, 0x34, 0x4C, 0xCC, 0x1C, 0x41, 0xC1, 0x31, 0x05, 0x0D, 0x43,
569     0xC3, 0x13, 0x07, 0x0F, 0x44, 0x14, 0x74, 0xDC, 0x3C, 0x11, 0x1D, 0x33,
570     0x37, 0x54, 0xD4, 0xF4, 0x5C, 0x7C, 0xFC, 0xD1, 0x71, 0xF1, 0x15, 0x35,
571     0x4D, 0xCD, 0xDD, 0x3D, 0xD3, 0x73, 0x47, 0xC7, 0x17, 0x77, 0x3F, 0x51,
572     0x45, 0xC5, 0x55, 0x53, 0xF3, 0x4F, 0xCF, 0x1F, 0xFF, 0xD5, 0x75, 0xF5,
573     0x5D, 0x7D, 0xFD, 0x57, 0xD7, 0xF7, 0x5F, 0xDF, 0x7F,
574     /* Table set A, code table 1, wordlen 2 - 81 entries */
575     0x00, 0x40, 0x10, 0x50, 0x04, 0x44, 0x14, 0x54, 0x01, 0x41, 0x11, 0x51,
576     0x05, 0x45, 0x15, 0x55, 0x90, 0x94, 0x58, 0x91, 0x95, 0x19, 0x59, 0x06,
577     0x46, 0x16, 0x56, 0x80, 0x60, 0x84, 0x24, 0x64, 0xA4, 0x08, 0x48, 0x18,
578     0x68, 0x81, 0x21, 0x61, 0xA1, 0x85, 0x25, 0x65, 0xA5, 0x09, 0x49, 0x99,
579     0x69, 0xA9, 0x02, 0x42, 0x12, 0x52, 0x96, 0x26, 0x66, 0x1A, 0x5A, 0x20,
580     0xA0, 0x88, 0x98, 0x28, 0xA8, 0x89, 0x29, 0x82, 0x92, 0x22, 0x62, 0x86,
581     0xA6, 0x0A, 0x4A, 0x9A, 0x6A, 0xAA, 0xA2, 0x8A, 0x2A,
582     /* Table set A, code table 1, wordlen 3 - 49 entries */
583     0x00, 0x08, 0x38, 0x01, 0x07, 0x39, 0x0F, 0x09, 0x3F, 0x10, 0x30, 0x31,
584     0x02, 0x3A, 0x06, 0x0E, 0x3E, 0x17, 0x18, 0x28, 0x11, 0x29, 0x0A, 0x32,
585     0x03, 0x0B, 0x3B, 0x05, 0x0D, 0x3D, 0x16, 0x1F, 0x37, 0x19, 0x12, 0x1A,
586     0x2A, 0x13, 0x33, 0x15, 0x35, 0x1E, 0x2E, 0x36, 0x2F, 0x1B, 0x2B, 0x1D,
587     0x2D,
588     /* Table set A, code table 1, wordlen 4 - 121 entries */
589     0x00, 0x10, 0xF0, 0x01, 0x0F, 0xF1, 0x1F, 0xFF, 0x20, 0xE0, 0x11, 0x02,
590     0x0E, 0x30, 0x50, 0xB0, 0xD0, 0x21, 0xE1, 0x12, 0xF2, 0x03, 0x05, 0x0B,
591     0x0D, 0x1E, 0xFE, 0x2F, 0xEF, 0x40, 0xC0, 0x31, 0x51, 0xB1, 0xC1, 0xD1,
592     0x22, 0x52, 0xE2, 0x13, 0xF3, 0x04, 0x15, 0xF5, 0x1B, 0xEB, 0xFB, 0x0C,
593     0x1D, 0xFD, 0x2E, 0x5E, 0xEE, 0x3F, 0x5F, 0xBF, 0xDF, 0x41, 0x32, 0x42,
594     0xB2, 0xD2, 0x23, 0x53, 0xB3, 0xE3, 0x14, 0x24, 0xE4, 0xF4, 0x25, 0x35,
595     0xD5, 0xE5, 0x2B, 0x3B, 0xDB, 0x1C, 0x2C, 0xBC, 0xEC, 0xFC, 0x2D, 0xBD,
596     0xED, 0x3E, 0x4E, 0xBE, 0xDE, 0x4F, 0xCF, 0xC2, 0x33, 0x43, 0xC3, 0xD3,
597     0x34, 0x44, 0x54, 0xB4, 0xD4, 0x45, 0x55, 0xC5, 0x4B, 0xCB, 0x3C, 0x4C,
598     0x5C, 0xCC, 0xDC, 0x3D, 0x4D, 0x5D, 0xCD, 0xDD, 0xCE, 0xC4, 0xB5, 0x5B,
599     0xBB,
600     /* Table set A, code table 1, wordlen 5 - 225 entries */
601     0x00, 0x10, 0xF0, 0x01, 0x11, 0xF1, 0x0F, 0x1F, 0xFF, 0x20, 0xE0, 0x21,
602     0xE1, 0x02, 0x12, 0xF2, 0x0E, 0x1E, 0xFE, 0x2F, 0xEF, 0x30, 0xD0, 0x31,
603     0xD1, 0x22, 0xE2, 0x03, 0x13, 0xF3, 0x0D, 0x1D, 0xFD, 0x2E, 0xEE, 0x3F,
604     0xDF, 0x40, 0x60, 0x70, 0x90, 0xA0, 0xC0, 0x41, 0xC1, 0x32, 0x42, 0xC2,
605     0xD2, 0x23, 0x33, 0xD3, 0xE3, 0x04, 0x14, 0x24, 0xE4, 0xF4, 0x06, 0x16,
606     0xF6, 0x07, 0x09, 0x0A, 0x1A, 0xFA, 0x0C, 0x1C, 0x2C, 0xEC, 0xFC, 0x2D,
607     0x3D, 0xDD, 0xED, 0x3E, 0x4E, 0xCE, 0xDE, 0x4F, 0xCF, 0x50, 0xB0, 0x51,
608     0x61, 0x71, 0x91, 0xA1, 0xB1, 0x52, 0x62, 0x72, 0x92, 0xA2, 0xB2, 0x43,
609     0x53, 0x63, 0x73, 0x93, 0xA3, 0xC3, 0x34, 0x44, 0x64, 0xA4, 0xC4, 0xD4,
610     0x05, 0x15, 0x25, 0x35, 0xD5, 0xE5, 0xF5, 0x26, 0x36, 0x46, 0xC6, 0xD6,
611     0xE6, 0x17, 0x27, 0x37, 0xC7, 0xD7, 0xE7, 0xF7, 0x19, 0x29, 0x39, 0xC9,
612     0xD9, 0xE9, 0xF9, 0x2A, 0x3A, 0x4A, 0x5A, 0xCA, 0xDA, 0xEA, 0x0B, 0x1B,
613     0x2B, 0x3B, 0xCB, 0xDB, 0xEB, 0xFB, 0x3C, 0x4C, 0x6C, 0x7C, 0x9C, 0xAC,
614     0xBC, 0xCC, 0xDC, 0x4D, 0x5D, 0x6D, 0x7D, 0x9D, 0xAD, 0xBD, 0xCD, 0x5E,
615     0x6E, 0x7E, 0x9E, 0xAE, 0xBE, 0x5F, 0x6F, 0x7F, 0x9F, 0xAF, 0xBF, 0xB3,
616     0x54, 0x74, 0x94, 0xB4, 0x45, 0x55, 0x65, 0x75, 0x95, 0xA5, 0xB5, 0xC5,
617     0x56, 0x66, 0x76, 0x96, 0xA6, 0xB6, 0x47, 0x57, 0x67, 0xA7, 0xB7, 0x49,
618     0x59, 0x69, 0xA9, 0xB9, 0x6A, 0x7A, 0x9A, 0xAA, 0xBA, 0x4B, 0x5B, 0x6B,
619     0x7B, 0x9B, 0xAB, 0xBB, 0x5C, 0x77, 0x97, 0x79, 0x99,
620     /* Table set A, code table 1, wordlen 6 - 256 entries */
621     0x00, 0x01, 0x10, 0x11, 0x21, 0x12, 0x20, 0x31, 0x02, 0x22, 0x13, 0x30,
622     0x41, 0x32, 0x03, 0x23, 0x14, 0x24, 0x40, 0x51, 0x61, 0xD1, 0xE1, 0x42,
623     0x52, 0xD2, 0x33, 0x43, 0xD3, 0x04, 0x34, 0x05, 0x15, 0x25, 0x16, 0x1D,
624     0x2D, 0x1E, 0x2E, 0x50, 0x60, 0xD0, 0xE0, 0xF0, 0x71, 0x81, 0xF1, 0x62,
625     0x72, 0xE2, 0xF2, 0x53, 0x63, 0xE3, 0xF3, 0x44, 0x54, 0xD4, 0xE4, 0xF4,
626     0x35, 0x45, 0x55, 0xD5, 0xE5, 0xF5, 0x06, 0x26, 0x36, 0xD6, 0x07, 0x17,
627     0x27, 0x37, 0xD7, 0x18, 0x28, 0x1C, 0x0D, 0x3D, 0x4D, 0x5D, 0x6D, 0x8D,
628     0x0E, 0x3E, 0x4E, 0x5E, 0x0F, 0x1F, 0x2F, 0x3F, 0x5F, 0x70, 0x80, 0x90,
629     0xC0, 0x91, 0xA1, 0xB1, 0xC1, 0x82, 0x92, 0xA2, 0xC2, 0x73, 0x83, 0x93,
630     0xA3, 0xC3, 0x64, 0x74, 0x84, 0x94, 0xA4, 0xC4, 0x65, 0x75, 0x85, 0x46,
631     0x56, 0x66, 0xC6, 0xE6, 0xF6, 0x47, 0x57, 0xE7, 0xF7, 0x08, 0x38, 0x48,
632     0x58, 0x68, 0xD8, 0xE8, 0xF8, 0x09, 0x19, 0x29, 0x39, 0x59, 0xD9, 0xE9,
633     0xF9, 0x1A, 0x2A, 0x3A, 0xDA, 0xEA, 0xFA, 0x1B, 0x2B, 0xDB, 0xEB, 0xFB,
634     0x0C, 0x2C, 0x3C, 0xDC, 0xEC, 0x7D, 0x9D, 0xAD, 0xBD, 0xCD, 0x6E, 0x7E,
635     0x8E, 0x9E, 0xAE, 0xBE, 0xCE, 0x4F, 0x6F, 0x7F, 0x8F, 0xAF, 0xA0, 0xB2,
636     0xB3, 0xB4, 0x95, 0xA5, 0xB5, 0xC5, 0x76, 0x86, 0x96, 0xA6, 0xB6, 0x67,
637     0x77, 0x87, 0x97, 0xC7, 0x78, 0x88, 0x98, 0xC8, 0x49, 0x69, 0x79, 0x89,
638     0x99, 0xC9, 0x0A, 0x4A, 0x5A, 0x6A, 0x7A, 0xCA, 0x0B, 0x3B, 0x4B, 0x5B,
639     0x6B, 0xCB, 0x4C, 0x5C, 0x6C, 0x7C, 0x8C, 0x9C, 0xAC, 0xBC, 0xCC, 0xFC,
640     0xDD, 0xED, 0xFD, 0xDE, 0xEE, 0xFE, 0x9F, 0xBF, 0xCF, 0xDF, 0xEF, 0xFF,
641     0xB0, 0xA7, 0xB7, 0xA8, 0xB8, 0xA9, 0xB9, 0x8A, 0x9A, 0xAA, 0xBA, 0x7B,
642     0x8B, 0x9B, 0xAB, 0xBB,
643     /* Table set A, code table 1, wordlen 7 - 63 entries */
644     0x00, 0x01, 0x3F, 0x02, 0x3E, 0x03, 0x04, 0x3B, 0x3C, 0x3D, 0x05, 0x06,
645     0x07, 0x08, 0x38, 0x39, 0x3A, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x1A,
646     0x1B, 0x24, 0x25, 0x26, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x0F, 0x10,
647     0x11, 0x12, 0x13, 0x14, 0x15, 0x19, 0x1C, 0x1D, 0x1E, 0x1F, 0x21, 0x22,
648     0x23, 0x27, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x16, 0x17, 0x18,
649     0x28, 0x29, 0x2A,
650     /* Table set A, code table 2, wordlen 1 - 81 entries */
651     0x00, 0x40, 0xC0, 0x10, 0x30, 0x04, 0x0C, 0x01, 0x03, 0xD0, 0x70, 0x34,
652     0x1C, 0x0D, 0x13, 0x07, 0x50, 0xF0, 0x44, 0xC4, 0x14, 0x74, 0x4C, 0xCC,
653     0xDC, 0x3C, 0x41, 0xC1, 0x11, 0x31, 0x05, 0x1D, 0x43, 0xC3, 0x33, 0x37,
654     0x0F, 0x54, 0xF4, 0xFC, 0xD1, 0x71, 0x15, 0x4D, 0xCD, 0xDD, 0xD3, 0x73,
655     0x47, 0xC7, 0x77, 0x3F, 0xD4, 0x5C, 0x7C, 0x51, 0xF1, 0x45, 0xC5, 0x55,
656     0x35, 0x3D, 0x53, 0xF3, 0x17, 0x4F, 0xCF, 0x1F, 0xFF, 0x75, 0xF5, 0x5D,
657     0x7D, 0xD7, 0xF7, 0x5F, 0xDF, 0xD5, 0xFD, 0x57, 0x7F,
658     /* Table set A, code table 2, wordlen 2 - 25 entries */
659     0x00, 0x08, 0x38, 0x01, 0x07, 0x09, 0x39, 0x0F, 0x3F, 0x10, 0x02, 0x06,
660     0x30, 0x11, 0x31, 0x0A, 0x3A, 0x0E, 0x17, 0x37, 0x32, 0x16, 0x3E, 0x12,
661     0x36,
662     /* Table set A, code table 2, wordlen 3 - 49 entries */
663     0x00, 0x08, 0x38, 0x01, 0x07, 0x09, 0x39, 0x0F, 0x3F, 0x10, 0x30, 0x02,
664     0x3A, 0x06, 0x0E, 0x18, 0x28, 0x11, 0x31, 0x0A, 0x03, 0x05, 0x3E, 0x17,
665     0x37, 0x19, 0x29, 0x12, 0x2A, 0x32, 0x0B, 0x33, 0x3B, 0x0D, 0x15, 0x3D,
666     0x16, 0x1E, 0x36, 0x1F, 0x2F, 0x1A, 0x13, 0x1B, 0x2B, 0x1D, 0x2D, 0x35,
667     0x2E,
668     /* Table set A, code table 2, wordlen 4 - 6 entries */
669     0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
670     /* Table set A, code table 2, wordlen 5 - 8 entries */
671     0x01, 0x00, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
672     /* Table set A, code table 2, wordlen 6 - 256 entries */
673     0x00, 0x01, 0x11, 0x10, 0x21, 0x12, 0x22, 0x20, 0x30, 0x31, 0x41, 0x02,
674     0x32, 0x03, 0x13, 0x23, 0x33, 0x14, 0x24, 0x40, 0x51, 0x61, 0x42, 0x52,
675     0x43, 0x53, 0x04, 0x34, 0x44, 0x15, 0x25, 0x35, 0x16, 0x26, 0x50, 0x60,
676     0x71, 0x81, 0xD1, 0x62, 0x72, 0x82, 0xD2, 0x63, 0x73, 0xD3, 0x54, 0x64,
677     0x05, 0x45, 0x55, 0x65, 0x06, 0x36, 0x46, 0x56, 0x17, 0x27, 0x37, 0x47,
678     0x18, 0x28, 0x38, 0x19, 0x1D, 0x2D, 0x3D, 0x1E, 0x70, 0x80, 0x90, 0xD0,
679     0xE0, 0x91, 0xA1, 0xB1, 0xC1, 0xE1, 0xF1, 0x92, 0xA2, 0xC2, 0xE2, 0xF2,
680     0x83, 0x93, 0xA3, 0xC3, 0xE3, 0xF3, 0x74, 0x84, 0x94, 0xA4, 0xC4, 0xD4,
681     0xE4, 0xF4, 0x75, 0x85, 0x95, 0xD5, 0xE5, 0x66, 0x76, 0x86, 0xD6, 0xE6,
682     0x07, 0x57, 0x67, 0x77, 0xD7, 0x08, 0x48, 0x58, 0x68, 0xD8, 0x09, 0x29,
683     0x39, 0x49, 0x59, 0x69, 0x1A, 0x2A, 0x3A, 0x4A, 0x1B, 0x2B, 0x1C, 0x2C,
684     0x3C, 0x4C, 0x0D, 0x4D, 0x5D, 0x6D, 0x7D, 0x8D, 0x0E, 0x2E, 0x3E, 0x4E,
685     0x5E, 0x6E, 0x1F, 0x2F, 0x3F, 0x4F, 0x5F, 0xA0, 0xB0, 0xC0, 0xF0, 0xB2,
686     0xB3, 0xB4, 0xA5, 0xB5, 0xC5, 0xF5, 0x96, 0xA6, 0xB6, 0xC6, 0xF6, 0x87,
687     0x97, 0xA7, 0xB7, 0xC7, 0xE7, 0xF7, 0x78, 0x88, 0x98, 0xA8, 0xC8, 0xE8,
688     0xF8, 0x79, 0x89, 0x99, 0xC9, 0xD9, 0xE9, 0xF9, 0x0A, 0x5A, 0x6A, 0x7A,
689     0x8A, 0xDA, 0xEA, 0xFA, 0x0B, 0x3B, 0x4B, 0x5B, 0x6B, 0x7B, 0x8B, 0xDB,
690     0x0C, 0x5C, 0x6C, 0x7C, 0x8C, 0x9C, 0xDC, 0x9D, 0xAD, 0xBD, 0xCD, 0x7E,
691     0x8E, 0x9E, 0xAE, 0xBE, 0x0F, 0x6F, 0x7F, 0x8F, 0x9F, 0xAF, 0xB8, 0xA9,
692     0xB9, 0x9A, 0xAA, 0xBA, 0xCA, 0x9B, 0xAB, 0xBB, 0xCB, 0xEB, 0xFB, 0xAC,
693     0xBC, 0xCC, 0xEC, 0xFC, 0xDD, 0xED, 0xFD, 0xCE, 0xDE, 0xEE, 0xFE, 0xBF,
694     0xCF, 0xDF, 0xEF, 0xFF,
695     /* Table set A, code table 2, wordlen 7 - 63 entries */
696     0x00, 0x02, 0x03, 0x01, 0x05, 0x06, 0x07, 0x09, 0x36, 0x37, 0x38, 0x3A,
697     0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x04, 0x08, 0x0A, 0x0B, 0x0C, 0x0E, 0x31,
698     0x34, 0x35, 0x39, 0x0D, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x16, 0x17, 0x19,
699     0x1A, 0x1E, 0x27, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x32, 0x33, 0x14,
700     0x15, 0x18, 0x1B, 0x1C, 0x1D, 0x1F, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,
701     0x28, 0x29, 0x2A,
702     /* Table set A, code table 3, wordlen 1 - 9 entries */
703     0x00, 0x04, 0x0C, 0x01, 0x03, 0x05, 0x0D, 0x07, 0x0F,
704     /* Table set A, code table 3, wordlen 2 - 81 entries */
705     0x00, 0x40, 0x01, 0x10, 0x04, 0x80, 0x50, 0x20, 0x14, 0x05, 0x02, 0x90,
706     0x60, 0x44, 0x54, 0x24, 0x08, 0x18, 0x41, 0x11, 0x15, 0x09, 0x06, 0xA0,
707     0x84, 0x94, 0x64, 0xA4, 0x48, 0x58, 0x28, 0x51, 0x21, 0x45, 0x55, 0x25,
708     0x19, 0x12, 0x16, 0x0A, 0x1A, 0x68, 0xA8, 0x81, 0x91, 0x61, 0xA1, 0x85,
709     0x95, 0x65, 0xA5, 0x49, 0x59, 0x29, 0x69, 0x42, 0x52, 0x46, 0x56, 0x2A,
710     0x88, 0x98, 0x89, 0x99, 0xA9, 0x82, 0x92, 0x22, 0x62, 0x86, 0x26, 0x66,
711     0x4A, 0x5A, 0x6A, 0xA2, 0x96, 0xA6, 0x8A, 0x9A, 0xAA,
712     /* Table set A, code table 3, wordlen 3 - 256 entries */
713     0x00, 0x10, 0x40, 0x50, 0x04, 0x44, 0x14, 0x54, 0x01, 0x41, 0x11, 0x51,
714     0x05, 0x45, 0x15, 0x55, 0x90, 0x20, 0x94, 0x64, 0x18, 0x21, 0x95, 0x19,
715     0x69, 0x02, 0x52, 0x06, 0x46, 0x16, 0x80, 0x60, 0x84, 0xD4, 0x24, 0x08,
716     0x48, 0x58, 0x68, 0x81, 0x91, 0x61, 0x85, 0x25, 0x65, 0xA5, 0x09, 0x49,
717     0x59, 0x29, 0x42, 0x12, 0x56, 0x96, 0xA6, 0x0A, 0x17, 0x1B, 0xD0, 0xC4,
718     0x74, 0xF4, 0x88, 0xC8, 0x28, 0xA1, 0x71, 0xC5, 0xD5, 0x75, 0x99, 0xB9,
719     0x4D, 0x1D, 0x2D, 0x6D, 0x22, 0x62, 0x66, 0x4A, 0x1A, 0x9A, 0x6A, 0x8E,
720     0x5E, 0x43, 0x23, 0x07, 0x47, 0x57, 0x6B, 0xC0, 0xA0, 0xE0, 0x70, 0xB0,
721     0xA4, 0xE4, 0x34, 0xB4, 0x98, 0xD8, 0xA8, 0x38, 0x78, 0x0C, 0x4C, 0x1C,
722     0x5C, 0x9C, 0x6C, 0x7C, 0xC1, 0xD1, 0xE1, 0x31, 0xE5, 0x35, 0xB5, 0xF5,
723     0x89, 0xA9, 0x79, 0xF9, 0x0D, 0xCD, 0x9D, 0xDD, 0xAD, 0x3D, 0x7D, 0x82,
724     0xC2, 0x92, 0xD2, 0xE2, 0x72, 0xF2, 0x86, 0xD6, 0xE6, 0x76, 0xB6, 0x8A,
725     0x5A, 0xDA, 0xEA, 0xFA, 0x4E, 0x1E, 0x9E, 0xEE, 0x03, 0x13, 0x53, 0x97,
726     0xB7, 0x0B, 0x4B, 0x8B, 0x5B, 0x9B, 0xEB, 0x7B, 0x0F, 0x4F, 0x1F, 0x5F,
727     0x9F, 0x2F, 0x3F, 0xBF, 0xE8, 0xB8, 0xF8, 0x8C, 0x2C, 0x3C, 0xFC, 0xB1,
728     0xC9, 0xD9, 0xE9, 0x39, 0x5D, 0xED, 0xBD, 0xA2, 0x32, 0x26, 0x36, 0x2A,
729     0xAA, 0xBA, 0x0E, 0x2E, 0x6E, 0x83, 0xC3, 0x93, 0x63, 0xB3, 0xA7, 0x37,
730     0x30, 0xF0, 0xCC, 0xDC, 0xAC, 0xEC, 0xBC, 0xF1, 0x8D, 0xFD, 0xB2, 0xC6,
731     0xF6, 0xCA, 0x3A, 0x7A, 0xCE, 0xDE, 0xAE, 0x3E, 0x7E, 0xBE, 0xFE, 0xD3,
732     0xA3, 0xE3, 0x33, 0x73, 0xF3, 0x87, 0xC7, 0xD7, 0x27, 0x67, 0xE7, 0x77,
733     0xF7, 0xCB, 0xDB, 0x2B, 0xAB, 0x3B, 0xBB, 0xFB, 0x8F, 0xCF, 0xDF, 0x6F,
734     0xAF, 0xEF, 0x7F, 0xFF,
735     /* Table set A, code table 3, wordlen 4 - 6 entries */
736     0x01, 0x00, 0x02, 0x03, 0x04, 0x05,
737     /* Table set A, code table 3, wordlen 5 - 225 entries */
738     0x00, 0xF0, 0x0F, 0x10, 0x01, 0xFF, 0x20, 0xE0, 0x11, 0xF1, 0x0E, 0x1F,
739     0x30, 0x40, 0xD0, 0x21, 0xE1, 0x02, 0x12, 0x22, 0xE2, 0xF2, 0x03, 0x13,
740     0x1E, 0x2E, 0x3E, 0xEE, 0xFE, 0x2F, 0xEF, 0xD2, 0x43, 0xF3, 0x04, 0x0D,
741     0x2D, 0x3D, 0x3F, 0xDF, 0x50, 0x60, 0x70, 0x90, 0xB0, 0x31, 0x41, 0x91,
742     0xA1, 0xC1, 0xD1, 0x42, 0xA2, 0xC2, 0x23, 0x33, 0xE3, 0x24, 0x34, 0xB4,
743     0xD4, 0xF4, 0x05, 0x15, 0x45, 0xE5, 0x16, 0x36, 0x56, 0xA6, 0xC6, 0xD6,
744     0xF6, 0x57, 0xC7, 0xF7, 0x09, 0x29, 0x49, 0x59, 0x69, 0xF9, 0x0A, 0x2A,
745     0x3A, 0x4A, 0xDA, 0xEA, 0xFA, 0x0B, 0x2B, 0xAB, 0xEB, 0xFB, 0x0C, 0x1C,
746     0x2C, 0x3C, 0x4C, 0x5C, 0xCC, 0xDC, 0xFC, 0x1D, 0x4D, 0x6D, 0xBD, 0xCD,
747     0xED, 0xFD, 0x4E, 0x6E, 0xCE, 0xDE, 0x7F, 0xA0, 0xC0, 0x51, 0x61, 0x71,
748     0xB1, 0x32, 0x52, 0x62, 0x72, 0x92, 0xB2, 0x53, 0x63, 0x73, 0x93, 0xA3,
749     0xB3, 0xC3, 0xD3, 0x14, 0x44, 0x54, 0x64, 0x74, 0x94, 0xA4, 0xC4, 0xE4,
750     0x25, 0x35, 0x55, 0x65, 0x75, 0x95, 0xA5, 0xB5, 0xC5, 0xD5, 0xF5, 0x06,
751     0x26, 0x46, 0x66, 0x76, 0x96, 0xB6, 0xE6, 0x07, 0x17, 0x27, 0x37, 0x47,
752     0x67, 0x77, 0x97, 0xA7, 0xB7, 0xD7, 0xE7, 0x19, 0x39, 0x79, 0x99, 0xA9,
753     0xB9, 0xC9, 0xD9, 0xE9, 0x1A, 0x5A, 0x6A, 0x7A, 0x9A, 0xAA, 0xBA, 0xCA,
754     0x1B, 0x3B, 0x4B, 0x5B, 0x6B, 0x7B, 0x9B, 0xBB, 0xCB, 0xDB, 0x6C, 0x7C,
755     0x9C, 0xAC, 0xBC, 0xEC, 0x5D, 0x7D, 0x9D, 0xAD, 0xDD, 0x5E, 0x7E, 0x9E,
756     0xAE, 0xBE, 0x4F, 0x5F, 0x6F, 0x9F, 0xAF, 0xBF, 0xCF,
757     /* Table set A, code table 3, wordlen 6 - 256 entries */
758     0x00, 0x10, 0x01, 0x11, 0x20, 0x21, 0x02, 0x12, 0x22, 0x31, 0x41, 0x32,
759     0x13, 0x23, 0x30, 0x40, 0x51, 0x42, 0x03, 0x33, 0x43, 0x04, 0x14, 0x24,
760     0x34, 0x15, 0x25, 0x50, 0x61, 0x71, 0xD1, 0x52, 0x62, 0x72, 0xD2, 0x53,
761     0x63, 0xD3, 0x44, 0x54, 0x64, 0x05, 0x35, 0x45, 0x55, 0x16, 0x26, 0x36,
762     0x46, 0x17, 0x27, 0x1D, 0x2D, 0x3D, 0x60, 0x70, 0xD0, 0x81, 0x91, 0xA1,
763     0xC1, 0xE1, 0xF1, 0x82, 0x92, 0xC2, 0xE2, 0xF2, 0x73, 0x83, 0xE3, 0xF3,
764     0x74, 0x84, 0xC4, 0xD4, 0xE4, 0xF4, 0x65, 0x75, 0x85, 0xD5, 0xE5, 0x06,
765     0x56, 0x66, 0xD6, 0xE6, 0x07, 0x37, 0x47, 0x57, 0x67, 0xD7, 0xE7, 0x18,
766     0x28, 0x38, 0x48, 0x58, 0xD8, 0x19, 0x29, 0x2A, 0x1C, 0x2C, 0x0D, 0x4D,
767     0x5D, 0x6D, 0x7D, 0x8D, 0x9D, 0x1E, 0x2E, 0x3E, 0x4E, 0x5E, 0x6E, 0x7E,
768     0x1F, 0x2F, 0x3F, 0x80, 0x90, 0xA0, 0xC0, 0xE0, 0xF0, 0xB1, 0xA2, 0xB2,
769     0x93, 0xA3, 0xB3, 0xC3, 0x94, 0xA4, 0xB4, 0x95, 0xA5, 0xB5, 0xC5, 0xF5,
770     0x76, 0x86, 0x96, 0xA6, 0xC6, 0xF6, 0x77, 0x87, 0x97, 0xA7, 0xC7, 0xF7,
771     0x08, 0x68, 0x78, 0x88, 0x98, 0xC8, 0xE8, 0xF8, 0x09, 0x39, 0x49, 0x59,
772     0x69, 0x79, 0x89, 0xD9, 0xE9, 0xF9, 0x0A, 0x1A, 0x3A, 0x4A, 0x5A, 0x6A,
773     0xDA, 0xEA, 0xFA, 0x1B, 0x2B, 0x3B, 0x4B, 0x5B, 0xDB, 0xEB, 0xFB, 0x0C,
774     0x3C, 0x4C, 0x5C, 0x6C, 0x7C, 0x8C, 0x9C, 0xDC, 0xEC, 0xAD, 0xBD, 0xCD,
775     0xDD, 0xED, 0x0E, 0x8E, 0x9E, 0xAE, 0xBE, 0x0F, 0x4F, 0x5F, 0x6F, 0x7F,
776     0x8F, 0x9F, 0xAF, 0xB0, 0xB6, 0xB7, 0xA8, 0xB8, 0x99, 0xA9, 0xB9, 0xC9,
777     0x7A, 0x8A, 0x9A, 0xAA, 0xBA, 0xCA, 0x0B, 0x6B, 0x7B, 0x8B, 0x9B, 0xCB,
778     0xAC, 0xBC, 0xCC, 0xFC, 0xFD, 0xCE, 0xDE, 0xEE, 0xFE, 0xBF, 0xCF, 0xDF,
779     0xEF, 0xFF, 0xAB, 0xBB,
780     /* Table set A, code table 3, wordlen 7 - 63 entries */
781     0x00, 0x01, 0x02, 0x03, 0x3D, 0x3E, 0x3F, 0x04, 0x05, 0x06, 0x3A, 0x3B,
782     0x3C, 0x07, 0x08, 0x09, 0x0A, 0x36, 0x37, 0x38, 0x39, 0x0B, 0x0C, 0x0D,
783     0x0E, 0x0F, 0x10, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x23, 0x24, 0x25,
784     0x26, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x11, 0x12, 0x13, 0x14, 0x15,
785     0x16, 0x17, 0x18, 0x1F, 0x21, 0x22, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,
786     0x2D, 0x2E, 0x2F,
787     /* Table set A, code table 4, wordlen 1 - 81 entries */
788     0x00, 0x40, 0xC0, 0x10, 0x30, 0x04, 0x0C, 0x01, 0x03, 0x50, 0xD0, 0x70,
789     0xF0, 0xC4, 0x34, 0x4C, 0xCC, 0x1C, 0x41, 0xC1, 0x31, 0x05, 0x0D, 0x43,
790     0xC3, 0x13, 0x07, 0x0F, 0x44, 0x14, 0x74, 0xDC, 0x3C, 0x11, 0x1D, 0x33,
791     0x37, 0x54, 0xD4, 0xF4, 0x5C, 0x7C, 0xFC, 0xD1, 0x71, 0xF1, 0xC5, 0x15,
792     0x35, 0x4D, 0xCD, 0xDD, 0x3D, 0xD3, 0x73, 0x47, 0xC7, 0x17, 0x77, 0x1F,
793     0x3F, 0x51, 0x45, 0x55, 0xD5, 0x75, 0xF5, 0x5D, 0x7D, 0xFD, 0x53, 0xF3,
794     0x57, 0xD7, 0xF7, 0x4F, 0xCF, 0x5F, 0xDF, 0x7F, 0xFF,
795     /* Table set A, code table 4, wordlen 2 - 81 entries */
796     0x00, 0x40, 0x01, 0x10, 0x50, 0x04, 0x44, 0x14, 0x54, 0x41, 0x11, 0x51,
797     0x05, 0x45, 0x15, 0x55, 0x59, 0x80, 0x90, 0x20, 0x60, 0x84, 0x94, 0x24,
798     0x64, 0x08, 0x48, 0x18, 0x58, 0x81, 0x91, 0x21, 0x61, 0x85, 0x95, 0x25,
799     0x65, 0x09, 0x49, 0x19, 0x02, 0x42, 0x12, 0x52, 0x06, 0x46, 0x16, 0x56,
800     0xA0, 0xA4, 0x68, 0xA1, 0xA5, 0x99, 0x29, 0x69, 0x96, 0x66, 0x4A, 0x1A,
801     0x5A, 0x88, 0x98, 0x28, 0x89, 0xA9, 0x82, 0x92, 0x22, 0x62, 0x86, 0x26,
802     0xA6, 0x0A, 0x9A, 0x2A, 0x6A, 0xA8, 0xA2, 0x8A, 0xAA,
803     /* Table set A, code table 4, wordlen 3 - 7 entries */
804     0x00, 0x07, 0x01, 0x02, 0x06, 0x03, 0x05,
805     /* Table set A, code table 4, wordlen 4 - 121 entries */
806     0x00, 0x10, 0xF0, 0x01, 0x0F, 0x11, 0xF1, 0x1F, 0xFF, 0x20, 0xE0, 0x21,
807     0xE1, 0x02, 0x12, 0xF2, 0x0E, 0x1E, 0xFE, 0x2F, 0xEF, 0x30, 0x50, 0xD0,
808     0xD1, 0x22, 0xE2, 0x03, 0x13, 0xF3, 0x0D, 0x1D, 0x2D, 0xFD, 0x2E, 0xEE,
809     0x3F, 0xDF, 0x40, 0xB0, 0xC0, 0x31, 0x41, 0x51, 0xB1, 0xC1, 0x32, 0xB2,
810     0xC2, 0xD2, 0x23, 0xB3, 0xD3, 0xE3, 0x04, 0x14, 0xE4, 0xF4, 0x05, 0x15,
811     0xD5, 0xE5, 0xF5, 0x0B, 0x1B, 0x2B, 0x3B, 0xEB, 0xFB, 0x0C, 0x1C, 0x2C,
812     0xFC, 0x3D, 0x5D, 0xED, 0x3E, 0x4E, 0x5E, 0xBE, 0xDE, 0x4F, 0x5F, 0xBF,
813     0xCF, 0x42, 0x52, 0x33, 0x53, 0xC3, 0x24, 0xB4, 0xD4, 0x25, 0x35, 0xC5,
814     0x4B, 0xCB, 0xDB, 0x3C, 0x4C, 0x5C, 0xDC, 0xEC, 0x4D, 0xBD, 0xCD, 0xDD,
815     0xCE, 0x43, 0x34, 0x44, 0x54, 0xC4, 0x45, 0x55, 0xB5, 0x5B, 0xBB, 0xBC,
816     0xCC,
817     /* Table set A, code table 4, wordlen 5 - 8 entries */
818     0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x06, 0x07,
819     /* Table set A, code table 4, wordlen 6 - 256 entries */
820     0x02, 0x00, 0x30, 0x21, 0x31, 0x41, 0x61, 0x12, 0x22, 0x42, 0x62, 0x43,
821     0x53, 0x24, 0x45, 0x26, 0x27, 0x10, 0x40, 0xB0, 0x01, 0x11, 0x81, 0x32,
822     0x52, 0x72, 0x92, 0x03, 0x13, 0x33, 0x63, 0x14, 0x34, 0x54, 0x64, 0x74,
823     0x05, 0x15, 0x25, 0x35, 0x55, 0x65, 0x06, 0x46, 0x56, 0x57, 0x67, 0x88,
824     0x20, 0x51, 0x91, 0xD1, 0xF2, 0x23, 0x83, 0x93, 0x04, 0x44, 0x84, 0x94,
825     0x75, 0x85, 0xC5, 0x36, 0x66, 0x96, 0xB6, 0x07, 0x37, 0x97, 0x08, 0x28,
826     0x38, 0x48, 0x68, 0x09, 0x69, 0x79, 0x0A, 0x2A, 0x1B, 0x9B, 0x2C, 0x4D,
827     0x50, 0x60, 0x70, 0x80, 0x90, 0xA0, 0xC0, 0xD0, 0xE0, 0xF0, 0x71, 0xA1,
828     0xB1, 0xC1, 0xE1, 0xF1, 0x82, 0xA2, 0xB2, 0xC2, 0xD2, 0xE2, 0x73, 0xA3,
829     0xB3, 0xC3, 0xD3, 0xE3, 0xF3, 0xA4, 0xB4, 0xC4, 0xD4, 0xE4, 0xF4, 0x95,
830     0xA5, 0xB5, 0xD5, 0xE5, 0xF5, 0x16, 0x76, 0x86, 0xA6, 0xC6, 0xD6, 0xE6,
831     0xF6, 0x17, 0x47, 0x77, 0x87, 0xA7, 0xB7, 0xC7, 0xD7, 0xE7, 0xF7, 0x18,
832     0x58, 0x78, 0x98, 0xA8, 0xB8, 0xC8, 0xD8, 0xE8, 0xF8, 0x19, 0x29, 0x39,
833     0x49, 0x59, 0x89, 0x99, 0xA9, 0xB9, 0xC9, 0xD9, 0xE9, 0xF9, 0x1A, 0x3A,
834     0x4A, 0x5A, 0x6A, 0x7A, 0x8A, 0x9A, 0xAA, 0xBA, 0xCA, 0xDA, 0xEA, 0xFA,
835     0x0B, 0x2B, 0x3B, 0x4B, 0x5B, 0x6B, 0x7B, 0x8B, 0xAB, 0xBB, 0xCB, 0xDB,
836     0xEB, 0xFB, 0x0C, 0x1C, 0x3C, 0x4C, 0x5C, 0x6C, 0x7C, 0x8C, 0x9C, 0xAC,
837     0xBC, 0xCC, 0xDC, 0xEC, 0xFC, 0x0D, 0x1D, 0x2D, 0x3D, 0x5D, 0x6D, 0x7D,
838     0x8D, 0x9D, 0xAD, 0xBD, 0xCD, 0xDD, 0xED, 0xFD, 0x0E, 0x1E, 0x2E, 0x3E,
839     0x4E, 0x5E, 0x6E, 0x7E, 0x8E, 0x9E, 0xAE, 0xBE, 0xCE, 0xDE, 0xEE, 0xFE,
840     0x0F, 0x1F, 0x2F, 0x3F, 0x4F, 0x5F, 0x6F, 0x7F, 0x8F, 0x9F, 0xAF, 0xBF,
841     0xCF, 0xDF, 0xEF, 0xFF,
842     /* Table set A, code table 4, wordlen 7 - 63 entries */
843     0x00, 0x01, 0x02, 0x3E, 0x3F, 0x03, 0x04, 0x05, 0x06, 0x08, 0x36, 0x38,
844     0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x07, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E,
845     0x35, 0x37, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x24, 0x25, 0x27,
846     0x2A, 0x34, 0x16, 0x19, 0x1C, 0x23, 0x26, 0x28, 0x29, 0x2B, 0x2D, 0x2E,
847     0x2F, 0x30, 0x31, 0x32, 0x33, 0x17, 0x18, 0x1A, 0x1B, 0x1D, 0x1E, 0x1F,
848     0x21, 0x22, 0x2C,
849     /* Table set A, code table 5, wordlen 1 - 81 entries */
850     0x00, 0x40, 0xC0, 0x30, 0x04, 0x01, 0x03, 0x10, 0x0C, 0xD0, 0x70, 0x34,
851     0x1C, 0x0D, 0x07, 0x50, 0xF0, 0x44, 0xC4, 0x14, 0x4C, 0xCC, 0x3C, 0x41,
852     0xC1, 0x11, 0x31, 0x05, 0x43, 0xC3, 0x13, 0x33, 0x0F, 0x74, 0xDC, 0x1D,
853     0x37, 0x54, 0xD4, 0xF4, 0x5C, 0x7C, 0xFC, 0xD1, 0x71, 0xF1, 0xC5, 0x15,
854     0x35, 0x4D, 0xCD, 0xDD, 0x3D, 0x53, 0xD3, 0x73, 0x47, 0xC7, 0x17, 0x77,
855     0x4F, 0x1F, 0x3F, 0x51, 0x45, 0x55, 0xF3, 0xCF, 0xFF, 0xD5, 0x75, 0xF5,
856     0x5D, 0x7D, 0xFD, 0x57, 0xD7, 0xF7, 0x5F, 0xDF, 0x7F,
857     /* Table set A, code table 5, wordlen 2 - 25 entries */
858     0x00, 0x08, 0x38, 0x01, 0x07, 0x09, 0x39, 0x0F, 0x3F, 0x10, 0x02, 0x06,
859     0x30, 0x11, 0x31, 0x0A, 0x3A, 0x0E, 0x17, 0x37, 0x32, 0x16, 0x3E, 0x12,
860     0x36,
861     /* Table set A, code table 5, wordlen 3 - 7 entries */
862     0x00, 0x01, 0x02, 0x06, 0x07, 0x03, 0x05,
863     /* Table set A, code table 5, wordlen 4 - 121 entries */
864     0x00, 0x01, 0x0F, 0x1F, 0x10, 0xE0, 0xF0, 0x11, 0xF1, 0x2F, 0xFF, 0x20,
865     0x21, 0xE1, 0x02, 0x12, 0xF2, 0x03, 0xF3, 0x0E, 0x2E, 0xFE, 0x3F, 0x30,
866     0x40, 0xD0, 0xC1, 0xD1, 0x22, 0xC2, 0x33, 0xE3, 0x0C, 0xCC, 0x0D, 0x1D,
867     0x2D, 0xFD, 0x1E, 0x3E, 0x5E, 0xEF, 0xC0, 0x52, 0xB2, 0xD2, 0x43, 0xC3,
868     0xD3, 0x24, 0x45, 0xF5, 0x4B, 0x5B, 0xFB, 0x1C, 0x3D, 0xBD, 0xDD, 0xEE,
869     0xBF, 0xCF, 0xDF, 0x50, 0xB0, 0x31, 0x41, 0x51, 0xB1, 0x32, 0x42, 0xE2,
870     0x13, 0x23, 0x53, 0xB3, 0x04, 0x14, 0x34, 0x44, 0x54, 0xB4, 0xC4, 0xD4,
871     0xE4, 0xF4, 0x05, 0x15, 0x25, 0x35, 0x55, 0xB5, 0xC5, 0xD5, 0xE5, 0x0B,
872     0x1B, 0x2B, 0x3B, 0xBB, 0xCB, 0xDB, 0xEB, 0x2C, 0x3C, 0x4C, 0x5C, 0xBC,
873     0xDC, 0xEC, 0xFC, 0x4D, 0x5D, 0xCD, 0xED, 0x4E, 0xBE, 0xCE, 0xDE, 0x4F,
874     0x5F,
875     /* Table set A, code table 5, wordlen 5 - 8 entries */
876     0x00, 0x01, 0x02, 0x03, 0x06, 0x07, 0x04, 0x05,
877     /* Table set A, code table 5, wordlen 6 - 31 entries */
878     0x04, 0x00, 0x01, 0x02, 0x03, 0x1C, 0x1D, 0x1E, 0x1F, 0x05, 0x06, 0x07,
879     0x18, 0x19, 0x1B, 0x08, 0x09, 0x0E, 0x13, 0x15, 0x16, 0x17, 0x1A, 0x0A,
880     0x0B, 0x0C, 0x0D, 0x0F, 0x11, 0x12, 0x14,
881     /* Table set A, code table 5, wordlen 7 - 63 entries */
882     0x00, 0x01, 0x02, 0x3D, 0x3E, 0x3F, 0x03, 0x04, 0x05, 0x06, 0x3A, 0x3B,
883     0x3C, 0x07, 0x08, 0x09, 0x0A, 0x36, 0x37, 0x38, 0x39, 0x0B, 0x0C, 0x0D,
884     0x0E, 0x0F, 0x1A, 0x1B, 0x1C, 0x24, 0x25, 0x26, 0x31, 0x32, 0x33, 0x34,
885     0x35, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x17, 0x18, 0x19, 0x1D, 0x1E,
886     0x1F, 0x21, 0x22, 0x23, 0x27, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x16,
887     0x28, 0x29, 0x2A,
888     /* Table set A, code table 6, wordlen 1 - 81 entries */
889     0x00, 0x40, 0xC0, 0x10, 0x30, 0x04, 0x0C, 0x01, 0x03, 0x70, 0x50, 0xD0,
890     0xF0, 0x44, 0xC4, 0x14, 0x34, 0x4C, 0x1C, 0x3C, 0x31, 0x05, 0x0D, 0x13,
891     0x07, 0x0F, 0x74, 0xCC, 0xDC, 0xFC, 0x41, 0xC1, 0x11, 0x43, 0xC3, 0x33,
892     0x54, 0xD4, 0xF4, 0x5C, 0x7C, 0x51, 0xD1, 0x71, 0xF1, 0x45, 0xC5, 0x15,
893     0x35, 0x4D, 0xCD, 0x1D, 0x3D, 0x53, 0xD3, 0x73, 0xF3, 0x47, 0xC7, 0x17,
894     0x37, 0x4F, 0xCF, 0x1F, 0x3F, 0x55, 0xD5, 0x75, 0xF5, 0x5D, 0xDD, 0xFD,
895     0x57, 0xD7, 0x77, 0xF7, 0xFF, 0x7D, 0x5F, 0xDF, 0x7F,
896     /* Table set A, code table 6, wordlen 2 - 25 entries */
897     0x00, 0x08, 0x38, 0x01, 0x07, 0x39, 0x0F, 0x09, 0x3F, 0x10, 0x30, 0x31,
898     0x02, 0x3A, 0x06, 0x0E, 0x17, 0x37, 0x11, 0x0A, 0x32, 0x16, 0x3E, 0x12,
899     0x36,
900     /* Table set A, code table 6, wordlen 3 - 256 entries */
901     0x00, 0x40, 0x10, 0x50, 0x04, 0x44, 0x14, 0x01, 0x41, 0x05, 0x45, 0x55,
902     0x54, 0x11, 0x51, 0x15, 0x80, 0x90, 0x60, 0x24, 0x64, 0xA4, 0x48, 0x61,
903     0x95, 0x25, 0xA5, 0x02, 0x42, 0x52, 0x16, 0x56, 0x20, 0x84, 0x94, 0x18,
904     0x58, 0x81, 0x91, 0x85, 0x65, 0x09, 0x49, 0x19, 0x59, 0x99, 0x29, 0x69,
905     0x79, 0x5D, 0x12, 0x62, 0x06, 0x46, 0x86, 0x66, 0x1A, 0x5A, 0x6A, 0x47,
906     0x17, 0xC0, 0xA0, 0xE0, 0xC4, 0xD4, 0x74, 0x08, 0x78, 0x0C, 0x4C, 0x1C,
907     0x5C, 0xD1, 0x21, 0xE1, 0x71, 0xC5, 0xE5, 0x75, 0xB5, 0x89, 0xBD, 0x92,
908     0x22, 0x96, 0xA6, 0x36, 0x0A, 0x4A, 0x8A, 0x9A, 0x2A, 0x7A, 0xDE, 0x6E,
909     0x43, 0x13, 0x53, 0x23, 0x07, 0x77, 0x4B, 0x1B, 0x9B, 0x6B, 0x2F, 0xD0,
910     0x30, 0x70, 0xE4, 0x34, 0xF4, 0xC8, 0x98, 0x28, 0x68, 0xA8, 0xE8, 0x38,
911     0xB8, 0xF8, 0x9C, 0x2C, 0x6C, 0x7C, 0xA1, 0xB1, 0xD5, 0x35, 0xC9, 0xD9,
912     0xA9, 0xE9, 0x39, 0xB9, 0xF9, 0xCD, 0x1D, 0x2D, 0xAD, 0x7D, 0xC2, 0xD2,
913     0xA2, 0xB2, 0xF2, 0xC6, 0x26, 0x76, 0xB6, 0xDA, 0xAA, 0xEA, 0x3A, 0xFA,
914     0x0E, 0x4E, 0x2E, 0x7E, 0xBE, 0xFE, 0x03, 0x83, 0x63, 0xA3, 0xB3, 0x87,
915     0x57, 0x97, 0xD7, 0x27, 0x0B, 0x8B, 0x5B, 0x2B, 0xAB, 0xCF, 0x1F, 0x9F,
916     0x7F, 0xBF, 0xB0, 0xF0, 0xB4, 0x88, 0xD8, 0x8C, 0xCC, 0xDC, 0xAC, 0xEC,
917     0x3C, 0xBC, 0xFC, 0xC1, 0x31, 0xF1, 0xF5, 0x0D, 0x4D, 0x8D, 0x9D, 0xDD,
918     0x6D, 0xED, 0x3D, 0xFD, 0x82, 0xE2, 0x32, 0x72, 0xD6, 0xE6, 0xF6, 0xCA,
919     0xBA, 0x8E, 0xCE, 0x1E, 0x5E, 0x9E, 0xAE, 0xEE, 0x3E, 0xC3, 0x93, 0xD3,
920     0xE3, 0x33, 0x73, 0xF3, 0xC7, 0x67, 0xA7, 0xE7, 0x37, 0xB7, 0xF7, 0xCB,
921     0xDB, 0xEB, 0x3B, 0x7B, 0xBB, 0xFB, 0x0F, 0x4F, 0x8F, 0x5F, 0xDF, 0x6F,
922     0xAF, 0xEF, 0x3F, 0xFF,
923     /* Table set A, code table 6, wordlen 4 - 121 entries */
924     0x00, 0x10, 0x20, 0xE0, 0xF0, 0x02, 0x0E, 0xEF, 0x30, 0x01, 0x11, 0x21,
925     0x31, 0xF1, 0x12, 0xF2, 0x1E, 0xEE, 0xDF, 0xFF, 0x40, 0xC0, 0xD0, 0xD1,
926     0xE1, 0x22, 0x32, 0x42, 0xD2, 0xE2, 0x03, 0x13, 0x23, 0xB3, 0xC3, 0xE3,
927     0xF3, 0xE4, 0x05, 0xF5, 0x2B, 0x0C, 0xFC, 0x1D, 0x2D, 0xBD, 0xDD, 0xFD,
928     0x2E, 0x4E, 0xDE, 0xFE, 0x0F, 0x1F, 0x2F, 0x3F, 0x50, 0xB0, 0x41, 0x51,
929     0xB1, 0xC1, 0x52, 0xB2, 0xC2, 0x33, 0x43, 0x53, 0xD3, 0x04, 0x14, 0x24,
930     0x34, 0x44, 0x54, 0xB4, 0xC4, 0xD4, 0xF4, 0x15, 0x25, 0x35, 0x45, 0x55,
931     0xB5, 0xC5, 0xD5, 0xE5, 0x0B, 0x1B, 0x3B, 0x4B, 0x5B, 0xBB, 0xCB, 0xDB,
932     0xEB, 0xFB, 0x1C, 0x2C, 0x3C, 0x4C, 0x5C, 0xBC, 0xCC, 0xDC, 0xEC, 0x0D,
933     0x3D, 0x4D, 0x5D, 0xCD, 0xED, 0x3E, 0x5E, 0xBE, 0xCE, 0x4F, 0xCF, 0x5F,
934     0xBF,
935     /* Table set A, code table 6, wordlen 5 - 15 entries */
936     0x00, 0x01, 0x0F, 0x0E, 0x02, 0x03, 0x0D, 0x04, 0x06, 0x0A, 0x0C, 0x05,
937     0x07, 0x09, 0x0B,
938     /* Table set A, code table 6, wordlen 6 - 31 entries */
939     0x00, 0x01, 0x1F, 0x02, 0x1E, 0x03, 0x04, 0x0F, 0x11, 0x1C, 0x1D, 0x05,
940     0x06, 0x07, 0x08, 0x18, 0x19, 0x1A, 0x1B, 0x09, 0x0A, 0x0B, 0x15, 0x16,
941     0x17, 0x0C, 0x13, 0x14, 0x0D, 0x0E, 0x12,
942     /* Table set A, code table 6, wordlen 7 - 63 entries */
943     0x00, 0x01, 0x02, 0x3E, 0x3F, 0x03, 0x04, 0x3C, 0x3D, 0x05, 0x06, 0x07,
944     0x39, 0x3A, 0x3B, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x1A, 0x26, 0x34,
945     0x35, 0x36, 0x37, 0x38, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x19, 0x1B,
946     0x1C, 0x1D, 0x1E, 0x1F, 0x21, 0x22, 0x23, 0x24, 0x25, 0x27, 0x2D, 0x2E,
947     0x2F, 0x30, 0x31, 0x32, 0x33, 0x14, 0x15, 0x16, 0x17, 0x18, 0x28, 0x29,
948     0x2A, 0x2B, 0x2C,
949     /* Table set A, code table 7, wordlen 1 - 4 entries */
950     0x00, 0x01, 0x02, 0x03,
951     /* Table set A, code table 7, wordlen 2 - 81 entries */
952     0x00, 0x40, 0x10, 0x04, 0x01, 0x50, 0x44, 0x14, 0x54, 0x41, 0x11, 0x05,
953     0x15, 0x51, 0x45, 0x55, 0x80, 0x90, 0x20, 0x64, 0x08, 0x19, 0x02, 0x06,
954     0x60, 0x84, 0x94, 0x24, 0x48, 0x18, 0x58, 0x81, 0x91, 0x21, 0x61, 0x85,
955     0x95, 0x25, 0x65, 0x09, 0x49, 0x59, 0x42, 0x12, 0x52, 0x46, 0x16, 0x56,
956     0xA0, 0xA4, 0x98, 0x28, 0x68, 0xA1, 0xA5, 0x99, 0x29, 0x69, 0x96, 0x26,
957     0x66, 0x0A, 0x4A, 0x1A, 0x5A, 0x88, 0xA8, 0x89, 0xA9, 0x82, 0x92, 0x22,
958     0x62, 0x86, 0xA6, 0x2A, 0x6A, 0xA2, 0x8A, 0x9A, 0xAA,
959     /* Table set A, code table 7, wordlen 3 - 49 entries */
960     0x00, 0x08, 0x38, 0x01, 0x39, 0x07, 0x0F, 0x09, 0x3F, 0x10, 0x30, 0x31,
961     0x02, 0x3A, 0x06, 0x0E, 0x17, 0x11, 0x0A, 0x32, 0x0D, 0x16, 0x3E, 0x37,
962     0x18, 0x28, 0x19, 0x29, 0x12, 0x2A, 0x03, 0x3B, 0x05, 0x15, 0x1E, 0x1F,
963     0x2F, 0x1A, 0x0B, 0x2B, 0x33, 0x35, 0x3D, 0x2E, 0x36, 0x13, 0x1B, 0x1D,
964     0x2D,
965     /* Table set A, code table 7, wordlen 4 - 121 entries */
966     0x00, 0x10, 0xF0, 0x01, 0x0F, 0x11, 0xF1, 0x1F, 0xFF, 0x20, 0xE0, 0x02,
967     0xF2, 0x0E, 0x21, 0xE1, 0x12, 0xE2, 0x1E, 0x2E, 0xFE, 0x2F, 0xEF, 0x30,
968     0x50, 0xB0, 0xC0, 0xD0, 0x31, 0xB1, 0xD1, 0x22, 0xD2, 0x03, 0x13, 0xE3,
969     0xF3, 0xF4, 0x05, 0xE5, 0xF5, 0x0B, 0x1B, 0x0C, 0x0D, 0x1D, 0x2D, 0xFD,
970     0x3E, 0xEE, 0x3F, 0x5F, 0xDF, 0x40, 0x41, 0x51, 0xC1, 0x32, 0x42, 0x52,
971     0xB2, 0xC2, 0x23, 0x33, 0xB3, 0xC3, 0xD3, 0x04, 0x14, 0x24, 0xD4, 0xE4,
972     0x15, 0x25, 0xC5, 0xD5, 0x2B, 0x3B, 0xEB, 0xFB, 0x1C, 0x2C, 0x3C, 0x5C,
973     0xEC, 0xFC, 0x3D, 0x5D, 0xDD, 0xED, 0x4E, 0x5E, 0xBE, 0xCE, 0xDE, 0x4F,
974     0xBF, 0xCF, 0x43, 0x53, 0x34, 0x54, 0xB4, 0xC4, 0x35, 0x45, 0x55, 0xB5,
975     0x4B, 0x5B, 0xCB, 0xDB, 0x4C, 0xBC, 0xCC, 0xDC, 0x4D, 0xBD, 0xCD, 0x44,
976     0xBB,
977     /* Table set A, code table 7, wordlen 5 - 15 entries */
978     0x00, 0x01, 0x0E, 0x0F, 0x02, 0x03, 0x0D, 0x04, 0x06, 0x0A, 0x0C, 0x05,
979     0x07, 0x09, 0x0B,
980     /* Table set A, code table 7, wordlen 6 - 256 entries */
981     0x00, 0x10, 0x01, 0x11, 0x20, 0x21, 0x02, 0x12, 0x30, 0x31, 0x41, 0x22,
982     0x03, 0x13, 0x23, 0x14, 0x40, 0x51, 0x61, 0x32, 0x42, 0x33, 0x04, 0x24,
983     0x15, 0x16, 0x50, 0x60, 0xD0, 0x71, 0x81, 0xD1, 0xE1, 0xF1, 0x52, 0x62,
984     0x72, 0xD2, 0x43, 0x53, 0x63, 0xD3, 0x34, 0x44, 0x54, 0x05, 0x25, 0x35,
985     0x45, 0x06, 0x26, 0x36, 0x17, 0x27, 0x18, 0x0D, 0x1D, 0x2D, 0x3D, 0x1E,
986     0x2E, 0x1F, 0x70, 0x80, 0xE0, 0xF0, 0x91, 0xA1, 0xC1, 0x82, 0x92, 0xC2,
987     0xE2, 0xF2, 0x73, 0x83, 0x93, 0xE3, 0xF3, 0x64, 0x74, 0x84, 0xD4, 0xE4,
988     0xF4, 0x55, 0x65, 0xD5, 0xE5, 0xF5, 0x46, 0x56, 0x66, 0xD6, 0x07, 0x37,
989     0x47, 0x57, 0x08, 0x28, 0x38, 0x48, 0x19, 0x29, 0x39, 0x1A, 0x2A, 0x1B,
990     0x1C, 0x2C, 0x3C, 0x4D, 0x5D, 0x6D, 0x0E, 0x3E, 0x4E, 0x5E, 0x0F, 0x2F,
991     0x3F, 0x4F, 0x90, 0xA0, 0xB0, 0xC0, 0xB1, 0xA2, 0xB2, 0xA3, 0xB3, 0xC3,
992     0x94, 0xA4, 0xB4, 0xC4, 0x75, 0x85, 0x95, 0xA5, 0xC5, 0x76, 0x86, 0x96,
993     0xE6, 0xF6, 0x67, 0x77, 0x87, 0xD7, 0xE7, 0xF7, 0x58, 0x68, 0x78, 0x88,
994     0xD8, 0xE8, 0xF8, 0x09, 0x49, 0x59, 0x69, 0xD9, 0xE9, 0xF9, 0x0A, 0x3A,
995     0x4A, 0x5A, 0xDA, 0xEA, 0x0B, 0x2B, 0x3B, 0x4B, 0xDB, 0x0C, 0x4C, 0x5C,
996     0x6C, 0xDC, 0x7D, 0x8D, 0x9D, 0xAD, 0xBD, 0xCD, 0x6E, 0x7E, 0x8E, 0x9E,
997     0xAE, 0xBE, 0x5F, 0x6F, 0x7F, 0x8F, 0x9F, 0xAF, 0xB5, 0xA6, 0xB6, 0xC6,
998     0x97, 0xA7, 0xC7, 0x98, 0xA8, 0xB8, 0xC8, 0x79, 0x89, 0x99, 0xA9, 0xB9,
999     0xC9, 0x6A, 0x7A, 0x8A, 0x9A, 0xAA, 0xCA, 0xFA, 0x5B, 0x6B, 0x7B, 0x8B,
1000     0xCB, 0xEB, 0xFB, 0x7C, 0x8C, 0x9C, 0xAC, 0xBC, 0xEC, 0xFC, 0xDD, 0xED,
1001     0xFD, 0xCE, 0xDE, 0xEE, 0xFE, 0xBF, 0xCF, 0xDF, 0xB7, 0xBA, 0x9B, 0xAB,
1002     0xBB, 0xCC, 0xEF, 0xFF,
1003     /* Table set B, code table 0, wordlen 1 - 81 entries */
1004     0x00, 0x01, 0x03, 0x40, 0xC0, 0x10, 0x30, 0x04, 0x0C, 0x50, 0xD0, 0x70,
1005     0xF0, 0x34, 0x1C, 0x05, 0x0D, 0x13, 0x07, 0x0F, 0x44, 0xC4, 0x14, 0x4C,
1006     0xCC, 0x3C, 0x41, 0xC1, 0x11, 0x31, 0x43, 0xC3, 0x33, 0x54, 0x74, 0xDC,
1007     0xFC, 0x71, 0x15, 0x4D, 0x1D, 0xD3, 0xC7, 0x37, 0x3F, 0xD4, 0xF4, 0x5C,
1008     0x7C, 0x51, 0xD1, 0xF1, 0x45, 0xC5, 0x55, 0x35, 0xCD, 0xDD, 0x3D, 0x53,
1009     0x73, 0xF3, 0x47, 0x17, 0x77, 0x4F, 0xCF, 0x1F, 0xFF, 0xF5, 0x7D, 0xD7,
1010     0x5F, 0xD5, 0x75, 0x5D, 0xFD, 0x57, 0xF7, 0xDF, 0x7F,
1011     /* Table set B, code table 0, wordlen 2 - 81 entries */
1012     0x00, 0x40, 0x10, 0x04, 0x01, 0x50, 0x44, 0x14, 0x54, 0x41, 0x11, 0x05,
1013     0x15, 0x80, 0x51, 0x45, 0x55, 0x90, 0x20, 0x60, 0x24, 0x08, 0x18, 0x09,
1014     0x02, 0x06, 0x84, 0x94, 0x64, 0x48, 0x58, 0x81, 0x91, 0x21, 0x61, 0x95,
1015     0x25, 0x65, 0x19, 0x59, 0x42, 0x12, 0x46, 0x16, 0x56, 0xA0, 0xA4, 0x28,
1016     0x68, 0x85, 0xA5, 0x49, 0x29, 0x69, 0x52, 0x0A, 0x1A, 0x5A, 0x88, 0x98,
1017     0xA1, 0x89, 0x99, 0xA9, 0x22, 0x62, 0x96, 0x26, 0x66, 0x4A, 0x6A, 0xA8,
1018     0x82, 0x92, 0xA2, 0x86, 0xA6, 0x8A, 0x9A, 0x2A, 0xAA,
1019     /* Table set B, code table 0, wordlen 3 - 49 entries */
1020     0x00, 0x08, 0x38, 0x01, 0x07, 0x30, 0x09, 0x39, 0x0F, 0x3F, 0x10, 0x18,
1021     0x28, 0x31, 0x02, 0x3A, 0x03, 0x05, 0x06, 0x0E, 0x17, 0x37, 0x11, 0x19,
1022     0x29, 0x0A, 0x32, 0x0B, 0x3B, 0x0D, 0x15, 0x3D, 0x3E, 0x1F, 0x2F, 0x12,
1023     0x1A, 0x2A, 0x13, 0x1B, 0x2B, 0x33, 0x1D, 0x2D, 0x35, 0x16, 0x1E, 0x2E,
1024     0x36,
1025     /* Table set B, code table 0, wordlen 4 - 121 entries */
1026     0x00, 0x10, 0xF0, 0x01, 0x0F, 0x11, 0xF1, 0x1F, 0xFF, 0x20, 0xE0, 0x02,
1027     0xF2, 0x0E, 0x21, 0xE1, 0x12, 0xE2, 0x1E, 0x2E, 0xFE, 0x2F, 0xEF, 0x30,
1028     0x50, 0xB0, 0xC0, 0xD0, 0x31, 0xB1, 0xD1, 0x22, 0xD2, 0x03, 0x13, 0xE3,
1029     0xF3, 0xF4, 0x05, 0xE5, 0xF5, 0x0B, 0x1B, 0x0C, 0x0D, 0x1D, 0x2D, 0xFD,
1030     0x3E, 0xEE, 0x3F, 0x5F, 0xDF, 0x40, 0x41, 0x51, 0xC1, 0x32, 0x42, 0x52,
1031     0xB2, 0xC2, 0x23, 0x33, 0xB3, 0xC3, 0xD3, 0x04, 0x14, 0x24, 0xD4, 0xE4,
1032     0x15, 0x25, 0xC5, 0xD5, 0x2B, 0x3B, 0xEB, 0xFB, 0x1C, 0x2C, 0x3C, 0x5C,
1033     0xEC, 0xFC, 0x3D, 0x5D, 0xDD, 0xED, 0x4E, 0x5E, 0xBE, 0xCE, 0xDE, 0x4F,
1034     0xBF, 0xCF, 0x43, 0x53, 0x34, 0x54, 0xB4, 0xC4, 0x35, 0x45, 0x55, 0xB5,
1035     0x4B, 0x5B, 0xCB, 0xDB, 0x4C, 0xBC, 0xCC, 0xDC, 0x4D, 0xBD, 0xCD, 0x44,
1036     0xBB,
1037     /* Table set B, code table 0, wordlen 5 - 225 entries */
1038     0x00, 0x10, 0xF0, 0x01, 0x0F, 0x11, 0xF1, 0x1F, 0xFF, 0x20, 0xE0, 0x02,
1039     0x0E, 0x30, 0xD0, 0x21, 0xE1, 0x12, 0xF2, 0x03, 0x0D, 0x1E, 0xFE, 0x2F,
1040     0xEF, 0x40, 0x60, 0x70, 0x90, 0xA0, 0xC0, 0x31, 0xD1, 0x22, 0x32, 0xD2,
1041     0xE2, 0x13, 0x23, 0xE3, 0xF3, 0x04, 0x06, 0x07, 0x09, 0x0A, 0x0C, 0x1D,
1042     0x2D, 0xFD, 0x2E, 0x3E, 0xEE, 0x3F, 0xDF, 0x50, 0xB0, 0x41, 0x51, 0x61,
1043     0x71, 0x91, 0xA1, 0xB1, 0xC1, 0x42, 0x62, 0x72, 0x92, 0xA2, 0xC2, 0x33,
1044     0x93, 0xA3, 0xD3, 0x14, 0x24, 0xE4, 0xF4, 0x05, 0x15, 0xF5, 0x16, 0x26,
1045     0xD6, 0xE6, 0xF6, 0x17, 0x27, 0xD7, 0xE7, 0xF7, 0x19, 0x29, 0x39, 0xE9,
1046     0xF9, 0x1A, 0x2A, 0xEA, 0xFA, 0x0B, 0x1B, 0xFB, 0x1C, 0x2C, 0xEC, 0xFC,
1047     0x3D, 0x7D, 0x9D, 0xDD, 0xED, 0x4E, 0x6E, 0x7E, 0x9E, 0xAE, 0xCE, 0xDE,
1048     0x4F, 0x5F, 0x6F, 0x7F, 0x9F, 0xAF, 0xBF, 0xCF, 0x52, 0xB2, 0x43, 0x53,
1049     0x63, 0x73, 0xB3, 0xC3, 0x34, 0x44, 0x64, 0x74, 0x94, 0xA4, 0xB4, 0xC4,
1050     0xD4, 0x25, 0x35, 0x65, 0x75, 0x95, 0xA5, 0xD5, 0xE5, 0x36, 0x46, 0x56,
1051     0x66, 0xA6, 0xB6, 0xC6, 0x37, 0x47, 0x57, 0xB7, 0xC7, 0x49, 0x59, 0x69,
1052     0xB9, 0xC9, 0xD9, 0x3A, 0x4A, 0x5A, 0x6A, 0xAA, 0xBA, 0xCA, 0xDA, 0x2B,
1053     0x3B, 0x6B, 0x7B, 0x9B, 0xAB, 0xDB, 0xEB, 0x3C, 0x4C, 0x6C, 0x7C, 0x9C,
1054     0xAC, 0xCC, 0xDC, 0x4D, 0x5D, 0x6D, 0xAD, 0xBD, 0xCD, 0x5E, 0xBE, 0x54,
1055     0x45, 0x55, 0xB5, 0xC5, 0x76, 0x96, 0x67, 0x77, 0x97, 0xA7, 0x79, 0x99,
1056     0xA9, 0x7A, 0x9A, 0x4B, 0x5B, 0xBB, 0xCB, 0x5C, 0xBC,
1057     /* Table set B, code table 0, wordlen 7 - 63 entries */
1058     0x00, 0x01, 0x3F, 0x02, 0x3E, 0x03, 0x04, 0x3C, 0x3D, 0x05, 0x06, 0x07,
1059     0x08, 0x38, 0x39, 0x3A, 0x3B, 0x09, 0x0A, 0x0B, 0x0C, 0x19, 0x1A, 0x1B,
1060     0x1C, 0x1D, 0x1E, 0x1F, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x33,
1061     0x34, 0x35, 0x36, 0x37, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x2D,
1062     0x2E, 0x2F, 0x30, 0x31, 0x32, 0x14, 0x15, 0x16, 0x17, 0x18, 0x28, 0x29,
1063     0x2A, 0x2B, 0x2C,
1064     /* Table set B, code table 1, wordlen 2 - 81 entries */
1065     0x00, 0x40, 0x04, 0x01, 0x10, 0x50, 0x44, 0x14, 0x54, 0x41, 0x11, 0x51,
1066     0x05, 0x45, 0x15, 0x55, 0x80, 0x90, 0x20, 0x60, 0x84, 0x94, 0x24, 0x64,
1067     0x08, 0x48, 0x18, 0x81, 0x91, 0x61, 0x85, 0x95, 0x25, 0x65, 0x09, 0x49,
1068     0x19, 0x59, 0x02, 0x42, 0x12, 0x52, 0x06, 0x46, 0x16, 0x56, 0xA4, 0x58,
1069     0x68, 0x21, 0xA5, 0x29, 0x69, 0x1A, 0x5A, 0xA0, 0x88, 0x98, 0x28, 0xA1,
1070     0x89, 0x99, 0xA9, 0x92, 0x22, 0x62, 0x86, 0x96, 0x26, 0x66, 0x0A, 0x4A,
1071     0x6A, 0xA8, 0x82, 0xA2, 0xA6, 0x8A, 0x9A, 0x2A, 0xAA,
1072     /* Table set B, code table 1, wordlen 4 - 121 entries */
1073     0x00, 0x10, 0xF0, 0x01, 0x0F, 0xF1, 0x1F, 0xFF, 0x20, 0xE0, 0x11, 0x02,
1074     0x0E, 0x30, 0x50, 0xB0, 0xD0, 0x21, 0xE1, 0x12, 0xF2, 0x03, 0x05, 0x0B,
1075     0x0D, 0x1E, 0xFE, 0x2F, 0xEF, 0x40, 0xC0, 0x31, 0x51, 0xB1, 0xC1, 0xD1,
1076     0x22, 0x52, 0xE2, 0x13, 0xF3, 0x04, 0x15, 0xF5, 0x1B, 0xEB, 0xFB, 0x0C,
1077     0x1D, 0xFD, 0x2E, 0x5E, 0xEE, 0x3F, 0x5F, 0xBF, 0xDF, 0x41, 0x32, 0x42,
1078     0xB2, 0xD2, 0x23, 0x53, 0xB3, 0xE3, 0x14, 0x24, 0xE4, 0xF4, 0x25, 0x35,
1079     0xD5, 0xE5, 0x2B, 0x3B, 0xDB, 0x1C, 0x2C, 0xBC, 0xEC, 0xFC, 0x2D, 0xBD,
1080     0xED, 0x3E, 0x4E, 0xBE, 0xDE, 0x4F, 0xCF, 0xC2, 0x33, 0x43, 0xC3, 0xD3,
1081     0x34, 0x44, 0x54, 0xB4, 0xD4, 0x45, 0x55, 0xC5, 0x4B, 0xCB, 0x3C, 0x4C,
1082     0x5C, 0xCC, 0xDC, 0x3D, 0x4D, 0x5D, 0xCD, 0xDD, 0xCE, 0xC4, 0xB5, 0x5B,
1083     0xBB,
1084     /* Table set B, code table 1, wordlen 6 - 256 entries */
1085     0x00, 0x10, 0x01, 0x11, 0x20, 0x21, 0x02, 0x12, 0x30, 0x31, 0x41, 0x22,
1086     0x32, 0x03, 0x13, 0x23, 0x14, 0x40, 0x51, 0x61, 0x42, 0x52, 0x33, 0x43,
1087     0x04, 0x24, 0x34, 0x15, 0x25, 0x16, 0x50, 0x60, 0x70, 0x71, 0x81, 0xD1,
1088     0xE1, 0x62, 0x72, 0x82, 0xD2, 0x53, 0x63, 0x73, 0xD3, 0x44, 0x54, 0x05,
1089     0x35, 0x45, 0x55, 0x06, 0x26, 0x36, 0x07, 0x17, 0x27, 0x37, 0x18, 0x28,
1090     0x19, 0x1D, 0x2D, 0x3D, 0x1E, 0x2E, 0x1F, 0x80, 0x90, 0xD0, 0xE0, 0xF0,
1091     0x91, 0xA1, 0xB1, 0xC1, 0xF1, 0x92, 0xA2, 0xB2, 0xC2, 0xE2, 0xF2, 0x83,
1092     0x93, 0xA3, 0xC3, 0xE3, 0xF3, 0x64, 0x74, 0x84, 0x94, 0xD4, 0xE4, 0xF4,
1093     0x65, 0x75, 0x85, 0xD5, 0xE5, 0x46, 0x56, 0x66, 0x76, 0xD6, 0xE6, 0x47,
1094     0x57, 0x67, 0xD7, 0x08, 0x38, 0x48, 0x58, 0x09, 0x29, 0x39, 0x49, 0x0A,
1095     0x1A, 0x2A, 0x3A, 0x1B, 0x2B, 0x0C, 0x1C, 0x2C, 0x3C, 0x0D, 0x4D, 0x5D,
1096     0x6D, 0x7D, 0x0E, 0x3E, 0x4E, 0x5E, 0x6E, 0x0F, 0x2F, 0x3F, 0x4F, 0xA0,
1097     0xB0, 0xC0, 0xB3, 0xA4, 0xB4, 0xC4, 0x95, 0xA5, 0xB5, 0xC5, 0xF5, 0x86,
1098     0x96, 0xA6, 0xB6, 0xC6, 0xF6, 0x77, 0x87, 0x97, 0xA7, 0xC7, 0xE7, 0xF7,
1099     0x68, 0x78, 0x88, 0x98, 0xD8, 0xE8, 0xF8, 0x59, 0x69, 0x79, 0x89, 0xD9,
1100     0xE9, 0xF9, 0x4A, 0x5A, 0x6A, 0x7A, 0xDA, 0xEA, 0x0B, 0x3B, 0x4B, 0x5B,
1101     0xDB, 0xEB, 0x4C, 0x5C, 0x6C, 0x7C, 0x8C, 0xDC, 0x8D, 0x9D, 0xAD, 0xBD,
1102     0xCD, 0x7E, 0x8E, 0x9E, 0xAE, 0xBE, 0x5F, 0x6F, 0x7F, 0x8F, 0x9F, 0xB7,
1103     0xA8, 0xB8, 0xC8, 0x99, 0xA9, 0xB9, 0xC9, 0x8A, 0x9A, 0xAA, 0xBA, 0xCA,
1104     0xFA, 0x6B, 0x7B, 0x8B, 0x9B, 0xAB, 0xBB, 0xCB, 0xFB, 0x9C, 0xAC, 0xBC,
1105     0xCC, 0xEC, 0xFC, 0xDD, 0xED, 0xFD, 0xCE, 0xDE, 0xEE, 0xFE, 0xAF, 0xBF,
1106     0xCF, 0xDF, 0xEF, 0xFF,
1107     /* Table set B, code table 2, wordlen 6 - 256 entries */
1108     0x00, 0x01, 0x10, 0x11, 0x20, 0x21, 0x02, 0x12, 0x30, 0x31, 0x22, 0x03,
1109     0x13, 0x40, 0x41, 0x51, 0x32, 0x42, 0x23, 0x33, 0x04, 0x14, 0x24, 0x15,
1110     0x50, 0x61, 0x71, 0xD1, 0xE1, 0x52, 0x62, 0xD2, 0x43, 0x53, 0xD3, 0x34,
1111     0x44, 0x05, 0x25, 0x35, 0x06, 0x16, 0x26, 0x17, 0x18, 0x1D, 0x2D, 0x3D,
1112     0x1E, 0x2E, 0x60, 0x70, 0x80, 0xD0, 0xE0, 0xF0, 0x81, 0x91, 0xA1, 0xC1,
1113     0xF1, 0x72, 0x82, 0x92, 0xC2, 0xE2, 0xF2, 0x63, 0x73, 0xE3, 0xF3, 0x54,
1114     0x64, 0x74, 0xD4, 0xE4, 0xF4, 0x45, 0x55, 0x65, 0xD5, 0xE5, 0xF5, 0x36,
1115     0x46, 0x56, 0xD6, 0xE6, 0x07, 0x27, 0x37, 0x47, 0xD7, 0x08, 0x28, 0x38,
1116     0x19, 0x29, 0x1A, 0x1B, 0x1C, 0x2C, 0x0D, 0x4D, 0x5D, 0x6D, 0x7D, 0x0E,
1117     0x3E, 0x4E, 0x5E, 0x6E, 0x0F, 0x1F, 0x2F, 0x3F, 0x4F, 0x90, 0xA0, 0xC0,
1118     0xB1, 0xA2, 0xB2, 0x83, 0x93, 0xA3, 0xB3, 0xC3, 0x84, 0x94, 0xA4, 0xC4,
1119     0x75, 0x85, 0x95, 0xC5, 0x66, 0x76, 0x86, 0x96, 0xC6, 0xF6, 0x57, 0x67,
1120     0x77, 0xE7, 0xF7, 0x48, 0x58, 0x68, 0x78, 0xD8, 0xE8, 0xF8, 0x09, 0x39,
1121     0x49, 0x59, 0xD9, 0xE9, 0xF9, 0x0A, 0x2A, 0x3A, 0x4A, 0xDA, 0xEA, 0x0B,
1122     0x2B, 0x3B, 0xDB, 0xEB, 0x0C, 0x3C, 0x4C, 0x5C, 0x6C, 0xDC, 0x8D, 0x9D,
1123     0xAD, 0xBD, 0xCD, 0x7E, 0x8E, 0x9E, 0xAE, 0xBE, 0xCE, 0x5F, 0x6F, 0x7F,
1124     0x8F, 0x9F, 0xAF, 0xB0, 0xB4, 0xA5, 0xB5, 0xA6, 0xB6, 0x87, 0x97, 0xA7,
1125     0xB7, 0xC7, 0x88, 0x98, 0xA8, 0xC8, 0x69, 0x79, 0x89, 0x99, 0xA9, 0xC9,
1126     0x5A, 0x6A, 0x7A, 0x9A, 0xCA, 0xFA, 0x4B, 0x5B, 0x6B, 0x7B, 0xCB, 0xFB,
1127     0x7C, 0x8C, 0x9C, 0xAC, 0xBC, 0xCC, 0xEC, 0xFC, 0xDD, 0xED, 0xFD, 0xDE,
1128     0xEE, 0xFE, 0xBF, 0xCF, 0xDF, 0xEF, 0xB8, 0xB9, 0x8A, 0xAA, 0xBA, 0x8B,
1129     0x9B, 0xAB, 0xBB, 0xFF,
1130     /* Table set B, code table 3, wordlen 2 - 81 entries */
1131     0x00, 0x40, 0x10, 0x04, 0x01, 0x50, 0x44, 0x14, 0x41, 0x11, 0x05, 0x80,
1132     0x54, 0x51, 0x45, 0x15, 0x55, 0x02, 0x90, 0x20, 0x60, 0x84, 0x24, 0x08,
1133     0x18, 0x09, 0x12, 0x06, 0xA0, 0x94, 0x64, 0x48, 0x58, 0x81, 0x91, 0x21,
1134     0x61, 0x85, 0x95, 0x25, 0x65, 0x49, 0x19, 0x59, 0x42, 0x52, 0x46, 0x16,
1135     0x56, 0x0A, 0xA4, 0x28, 0x68, 0xA1, 0xA5, 0x29, 0x69, 0x26, 0x4A, 0x1A,
1136     0x5A, 0x88, 0x98, 0xA8, 0x89, 0x99, 0xA9, 0x82, 0x92, 0x22, 0x62, 0x86,
1137     0x96, 0x66, 0x9A, 0x2A, 0x6A, 0xA2, 0xA6, 0x8A, 0xAA,
1138     /* Table set B, code table 3, wordlen 3 - 256 entries */
1139     0x00, 0x40, 0x10, 0x04, 0x01, 0x50, 0x44, 0x14, 0x54, 0x41, 0x11, 0x51,
1140     0x05, 0x45, 0x15, 0x55, 0x20, 0x95, 0x65, 0x49, 0x59, 0x52, 0x46, 0x16,
1141     0x80, 0x90, 0x60, 0x84, 0x94, 0x24, 0x64, 0xA4, 0x08, 0x48, 0x18, 0x58,
1142     0x81, 0x91, 0x21, 0x61, 0x85, 0x25, 0x09, 0x19, 0x69, 0x02, 0x42, 0x12,
1143     0x06, 0x56, 0x5A, 0x57, 0xD0, 0x74, 0x68, 0x5C, 0xC1, 0xD5, 0xA5, 0xE5,
1144     0x75, 0xB5, 0xF5, 0x99, 0xD9, 0xA9, 0xE9, 0x79, 0xB9, 0xF9, 0x1D, 0x5D,
1145     0x9D, 0xDD, 0x6D, 0xAD, 0xED, 0x7D, 0xBD, 0xFD, 0x82, 0x92, 0xD2, 0x62,
1146     0x96, 0xD6, 0x26, 0x66, 0xA6, 0xE6, 0x76, 0xB6, 0xF6, 0x0A, 0x4A, 0x1A,
1147     0x9A, 0xDA, 0x2A, 0x6A, 0xAA, 0xEA, 0x7A, 0xBA, 0xFA, 0x5E, 0x9E, 0xDE,
1148     0x6E, 0xAE, 0xEE, 0x7E, 0xBE, 0xFE, 0x03, 0x13, 0x53, 0x17, 0x97, 0xD7,
1149     0x67, 0xA7, 0xE7, 0x77, 0xB7, 0xF7, 0x5B, 0x9B, 0xDB, 0x6B, 0xAB, 0xEB,
1150     0x7B, 0xBB, 0xFB, 0x5F, 0x9F, 0xDF, 0x6F, 0xAF, 0xEF, 0x7F, 0xBF, 0xFF,
1151     0xC0, 0xA0, 0xE0, 0x30, 0xC4, 0xD4, 0xE4, 0x34, 0xB4, 0xF4, 0x88, 0xC8,
1152     0x98, 0xD8, 0x28, 0xA8, 0xE8, 0x38, 0x78, 0xB8, 0xF8, 0x0C, 0x4C, 0x1C,
1153     0x9C, 0xDC, 0x6C, 0xAC, 0xEC, 0x7C, 0xBC, 0xFC, 0xD1, 0xA1, 0xE1, 0x31,
1154     0x71, 0xB1, 0xF1, 0xC5, 0x35, 0x89, 0xC9, 0x29, 0x39, 0x0D, 0x4D, 0x8D,
1155     0xCD, 0x2D, 0x3D, 0x22, 0xA2, 0xE2, 0x72, 0xB2, 0xF2, 0x86, 0xC6, 0x36,
1156     0x8A, 0xCA, 0x3A, 0x0E, 0x4E, 0x8E, 0xCE, 0x1E, 0x2E, 0x3E, 0x43, 0x83,
1157     0x93, 0xD3, 0x23, 0x63, 0xA3, 0xE3, 0x73, 0xB3, 0xF3, 0x07, 0x47, 0x87,
1158     0xC7, 0x27, 0x37, 0x4B, 0x8B, 0xCB, 0x1B, 0x2B, 0x3B, 0x4F, 0x8F, 0xCF,
1159     0x1F, 0x70, 0xB0, 0xF0, 0x8C, 0xCC, 0x2C, 0x3C, 0xC2, 0x32, 0xC3, 0x0F,
1160     0x2F, 0x3F, 0x33, 0x0B,
1161     /* Table set B, code table 3, wordlen 5 - 225 entries */
1162     0x00, 0x10, 0xF0, 0x01, 0x0F, 0x11, 0xF1, 0x02, 0x0E, 0x1F, 0xFF, 0x20,
1163     0xE0, 0x21, 0xF2, 0xFE, 0xEF, 0x30, 0xD0, 0xE1, 0x12, 0x22, 0xE2, 0x03,
1164     0x0D, 0x1D, 0x1E, 0x2E, 0xEE, 0x2F, 0xDF, 0x40, 0x60, 0x70, 0x90, 0xA0,
1165     0xB0, 0xC0, 0x31, 0x71, 0x91, 0xC1, 0xD1, 0x32, 0xD2, 0x13, 0xE3, 0xF3,
1166     0x04, 0x05, 0x06, 0x07, 0x17, 0xF7, 0x09, 0x19, 0x0A, 0x1A, 0xFA, 0x0C,
1167     0x1C, 0x2D, 0xED, 0xFD, 0x3E, 0x7E, 0xDE, 0x3F, 0x6F, 0x7F, 0x9F, 0xAF,
1168     0xCF, 0x50, 0x41, 0x51, 0x61, 0xA1, 0xB1, 0x62, 0x72, 0x92, 0xA2, 0xC2,
1169     0x23, 0x33, 0x63, 0x73, 0x93, 0xA3, 0xD3, 0x14, 0x24, 0x34, 0xD4, 0xE4,
1170     0xF4, 0x15, 0xF5, 0x16, 0x26, 0xD6, 0xE6, 0xF6, 0x27, 0x37, 0x47, 0xE7,
1171     0x29, 0x39, 0xC9, 0xD9, 0xE9, 0xF9, 0x2A, 0xEA, 0x0B, 0x1B, 0xFB, 0x2C,
1172     0x7C, 0xEC, 0xFC, 0x3D, 0x4D, 0x6D, 0x7D, 0xDD, 0x4E, 0x5E, 0x6E, 0x9E,
1173     0xAE, 0xCE, 0x4F, 0x5F, 0x42, 0x52, 0xB2, 0x43, 0xB3, 0xC3, 0x44, 0x64,
1174     0x74, 0x94, 0xA4, 0x25, 0x35, 0x65, 0x75, 0x95, 0xA5, 0xE5, 0x36, 0x46,
1175     0x66, 0x76, 0x96, 0xA6, 0xB6, 0xC6, 0x57, 0xA7, 0xB7, 0xC7, 0xD7, 0x59,
1176     0xA9, 0xB9, 0x3A, 0x4A, 0x6A, 0xCA, 0xDA, 0x2B, 0x3B, 0x6B, 0x9B, 0xAB,
1177     0xDB, 0xEB, 0x3C, 0x6C, 0x9C, 0xAC, 0xCC, 0xDC, 0x5D, 0x9D, 0xAD, 0xBD,
1178     0xCD, 0xBE, 0xBF, 0x53, 0x54, 0xB4, 0xC4, 0x45, 0x55, 0xB5, 0xC5, 0xD5,
1179     0x56, 0x67, 0x77, 0x97, 0x49, 0x69, 0x79, 0x99, 0x5A, 0x7A, 0x9A, 0xAA,
1180     0xBA, 0x4B, 0x5B, 0x7B, 0xBB, 0xCB, 0x4C, 0x5C, 0xBC,
1181     /* Table set B, code table 3, wordlen 7 - 63 entries */
1182     0x00, 0x01, 0x3F, 0x02, 0x3E, 0x03, 0x3D, 0x04, 0x05, 0x06, 0x3A, 0x3B,
1183     0x3C, 0x07, 0x08, 0x09, 0x0A, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x22, 0x23,
1184     0x25, 0x26, 0x27, 0x37, 0x38, 0x39, 0x0B, 0x0D, 0x0E, 0x0F, 0x1E, 0x1F,
1185     0x21, 0x24, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x0C, 0x10, 0x11, 0x12,
1186     0x13, 0x15, 0x29, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x14, 0x16, 0x17,
1187     0x18, 0x28, 0x2A,
1188     /* Table set B, code table 4, wordlen 1 - 81 entries */
1189     0x00, 0x01, 0x40, 0xC0, 0x10, 0x30, 0x04, 0x0C, 0x03, 0x50, 0xD0, 0x70,
1190     0xF0, 0xC4, 0x14, 0x34, 0x4C, 0x1C, 0x3C, 0xC1, 0x11, 0x31, 0x05, 0x0D,
1191     0xC3, 0x13, 0x33, 0x07, 0x0F, 0x44, 0xCC, 0x41, 0x43, 0x54, 0x74, 0xDC,
1192     0xFC, 0x71, 0x15, 0x4D, 0x1D, 0x37, 0x3F, 0xD4, 0xF4, 0x5C, 0x7C, 0x51,
1193     0xD1, 0xF1, 0x45, 0xC5, 0x35, 0xCD, 0xDD, 0x3D, 0x53, 0xD3, 0x73, 0xF3,
1194     0x47, 0xC7, 0x17, 0x77, 0x4F, 0xCF, 0x1F, 0x55, 0xFF, 0xD5, 0x75, 0xF5,
1195     0x5D, 0x7D, 0xFD, 0x57, 0xD7, 0xF7, 0x5F, 0xDF, 0x7F,
1196     /* Table set B, code table 4, wordlen 2 - 25 entries */
1197     0x00, 0x07, 0x08, 0x38, 0x01, 0x39, 0x0F, 0x10, 0x09, 0x3F, 0x30, 0x31,
1198     0x02, 0x3A, 0x06, 0x0E, 0x17, 0x11, 0x0A, 0x3E, 0x37, 0x12, 0x32, 0x16,
1199     0x36,
1200     /* Table set B, code table 4, wordlen 3 - 49 entries */
1201     0x00, 0x07, 0x08, 0x38, 0x01, 0x09, 0x39, 0x0F, 0x3F, 0x10, 0x30, 0x31,
1202     0x02, 0x3A, 0x06, 0x0E, 0x17, 0x37, 0x18, 0x28, 0x11, 0x19, 0x29, 0x0A,
1203     0x03, 0x0B, 0x3B, 0x05, 0x0D, 0x3D, 0x3E, 0x1F, 0x2F, 0x12, 0x1A, 0x2A,
1204     0x32, 0x13, 0x33, 0x15, 0x35, 0x16, 0x1E, 0x2E, 0x36, 0x1B, 0x2B, 0x1D,
1205     0x2D,
1206     /* Table set B, code table 4, wordlen 7 - 63 entries */
1207     0x00, 0x01, 0x02, 0x3E, 0x3F, 0x03, 0x04, 0x3C, 0x3D, 0x05, 0x06, 0x07,
1208     0x39, 0x3A, 0x3B, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x1A, 0x1B, 0x25, 0x26,
1209     0x34, 0x35, 0x36, 0x37, 0x38, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x19,
1210     0x1C, 0x1D, 0x1E, 0x1F, 0x21, 0x22, 0x23, 0x24, 0x27, 0x2E, 0x2F, 0x30,
1211     0x31, 0x32, 0x33, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x28, 0x29, 0x2A,
1212     0x2B, 0x2C, 0x2D,
1213     /* Table set B, code table 5, wordlen 2 - 25 entries */
1214     0x00, 0x01, 0x08, 0x38, 0x07, 0x39, 0x0F, 0x30, 0x09, 0x3F, 0x10, 0x31,
1215     0x02, 0x3A, 0x06, 0x0E, 0x17, 0x11, 0x0A, 0x3E, 0x37, 0x12, 0x32, 0x16,
1216     0x36,
1217     /* Table set B, code table 5, wordlen 3 - 7 entries */
1218     0x00, 0x07, 0x01, 0x02, 0x03, 0x05, 0x06,
1219     /* Table set B, code table 5, wordlen 6 - 31 entries */
1220     0x00, 0x01, 0x1F, 0x02, 0x1E, 0x03, 0x04, 0x0D, 0x1D, 0x05, 0x06, 0x07,
1221     0x0E, 0x0F, 0x11, 0x12, 0x13, 0x1A, 0x1B, 0x1C, 0x08, 0x09, 0x0C, 0x14,
1222     0x15, 0x16, 0x17, 0x18, 0x19, 0x0A, 0x0B,
1223     /* Table set B, code table 6, wordlen 2 - 81 entries */
1224     0x00, 0x40, 0x01, 0x10, 0x04, 0x02, 0x80, 0x50, 0x90, 0x05, 0x06, 0x20,
1225     0x60, 0x44, 0x14, 0x54, 0x24, 0x08, 0x18, 0x41, 0x11, 0x15, 0x09, 0xA0,
1226     0x84, 0x94, 0x64, 0xA4, 0x28, 0x51, 0x45, 0x55, 0x19, 0x12, 0x16, 0x0A,
1227     0x1A, 0x48, 0x58, 0x68, 0x81, 0x91, 0x21, 0x61, 0x85, 0x95, 0x25, 0x65,
1228     0x49, 0x59, 0x29, 0x69, 0x42, 0x46, 0x56, 0x88, 0x98, 0xA8, 0xA1, 0xA5,
1229     0x99, 0xA9, 0x52, 0x22, 0x26, 0x66, 0x4A, 0x5A, 0x2A, 0x6A, 0x89, 0x82,
1230     0x92, 0x62, 0x86, 0x96, 0xA6, 0x8A, 0xAA, 0xA2, 0x9A,
1231     /* Table set B, code table 6, wordlen 3 - 7 entries */
1232     0x00, 0x01, 0x07, 0x02, 0x03, 0x05, 0x06,
1233     /* Table set B, code table 6, wordlen 4 - 6 entries */
1234     0x01, 0x00, 0x02, 0x05, 0x03, 0x04,
1235     /* Table set B, code table 6, wordlen 5 - 225 entries */
1236     0x00, 0xF0, 0x01, 0x10, 0x0F, 0x11, 0xF1, 0x20, 0xE0, 0x02, 0x0E, 0x1F,
1237     0xFF, 0xD0, 0x21, 0xE1, 0x12, 0xF2, 0x07, 0x0A, 0x0D, 0x1E, 0xFE, 0x2F,
1238     0xEF, 0x30, 0x70, 0x90, 0xA0, 0xC0, 0x71, 0x91, 0xC1, 0xD1, 0x32, 0x92,
1239     0xE2, 0x03, 0x13, 0x63, 0x04, 0x06, 0xE6, 0xE7, 0xF7, 0x09, 0x19, 0x39,
1240     0xFA, 0x0C, 0x1C, 0xDD, 0xED, 0xFD, 0x2E, 0x7E, 0x9E, 0x3F, 0x9F, 0x40,
1241     0x50, 0x60, 0xB0, 0x31, 0x41, 0x61, 0xA1, 0xB1, 0x22, 0x42, 0x72, 0xA2,
1242     0xB2, 0xC2, 0xD2, 0x23, 0x33, 0x73, 0xA3, 0xC3, 0xD3, 0xE3, 0xF3, 0x14,
1243     0x24, 0x34, 0x44, 0x74, 0xD4, 0xE4, 0x05, 0x25, 0x45, 0x65, 0x95, 0xA5,
1244     0x16, 0x26, 0x46, 0x76, 0xA6, 0xB6, 0xC6, 0xD6, 0xF6, 0x17, 0x27, 0x37,
1245     0x47, 0x67, 0xA7, 0xD7, 0x29, 0x69, 0xB9, 0xD9, 0xE9, 0xF9, 0x1A, 0x2A,
1246     0x3A, 0x9A, 0xCA, 0xDA, 0xEA, 0x0B, 0x1B, 0x3B, 0x6B, 0xEB, 0xFB, 0x2C,
1247     0x6C, 0xEC, 0xFC, 0x1D, 0x2D, 0x4D, 0x6D, 0x9D, 0xAD, 0x3E, 0x4E, 0x6E,
1248     0xAE, 0xCE, 0xEE, 0x4F, 0x5F, 0x6F, 0xDF, 0x51, 0x52, 0x62, 0x43, 0x93,
1249     0xB3, 0x54, 0x94, 0xA4, 0xF4, 0x15, 0x75, 0xB5, 0xE5, 0xF5, 0x36, 0x56,
1250     0x66, 0x96, 0x57, 0x77, 0x49, 0x59, 0xA9, 0xC9, 0x4A, 0x5A, 0x6A, 0x7A,
1251     0xAA, 0xBA, 0x2B, 0x4B, 0x7B, 0x9B, 0xAB, 0xDB, 0x3C, 0x4C, 0x7C, 0x9C,
1252     0xAC, 0xBC, 0xCC, 0x3D, 0x5D, 0x7D, 0xBD, 0xCD, 0x5E, 0xBE, 0xDE, 0xBF,
1253     0xCF, 0x53, 0x64, 0xB4, 0xC4, 0x35, 0x55, 0xC5, 0xD5, 0x97, 0xB7, 0xC7,
1254     0x79, 0x99, 0x5B, 0xBB, 0xCB, 0x5C, 0xDC, 0x7F, 0xAF,
1255     /* Table set B, code table 6, wordlen 6 - 256 entries */
1256     0x00, 0x10, 0x01, 0x11, 0x21, 0x02, 0x12, 0x20, 0x22, 0x13, 0x30, 0x31,
1257     0x41, 0xD1, 0xE1, 0x32, 0x52, 0x03, 0x23, 0x2D, 0x40, 0x50, 0x60, 0x80,
1258     0xD0, 0xE0, 0x51, 0x61, 0xF1, 0x42, 0x62, 0xD2, 0xE2, 0xF2, 0x33, 0x43,
1259     0xC3, 0xD3, 0xE3, 0x04, 0x14, 0xD4, 0xF4, 0x25, 0x35, 0x16, 0x17, 0xF7,
1260     0xD8, 0x1C, 0x3C, 0x0D, 0x1D, 0x3D, 0x5D, 0x0E, 0x1E, 0x2E, 0x7E, 0x2F,
1261     0xC0, 0xF0, 0x71, 0x81, 0x91, 0xC1, 0x72, 0x82, 0x92, 0xB2, 0xC2, 0x53,
1262     0x63, 0x73, 0x93, 0xA3, 0xF3, 0x24, 0x44, 0x64, 0x84, 0xA4, 0xB4, 0x05,
1263     0x15, 0x95, 0xD5, 0x06, 0x26, 0x36, 0x46, 0x96, 0xD6, 0xE6, 0xF6, 0x07,
1264     0x27, 0x37, 0xD7, 0xE7, 0x08, 0x18, 0x28, 0x38, 0xE8, 0xF8, 0x09, 0x19,
1265     0x29, 0xE9, 0xF9, 0x0A, 0x1A, 0xCA, 0xDA, 0xEA, 0x0B, 0x1B, 0xDB, 0xEB,
1266     0xFB, 0x2C, 0x4C, 0x5C, 0x7C, 0x8C, 0x4D, 0x6D, 0x8D, 0x9D, 0xFD, 0x3E,
1267     0x5E, 0x6E, 0x8E, 0x9E, 0xEE, 0x0F, 0x1F, 0x3F, 0x4F, 0x5F, 0x6F, 0x7F,
1268     0xCF, 0x70, 0xA1, 0xA2, 0x83, 0xB3, 0x34, 0x74, 0xC4, 0xE4, 0x55, 0x65,
1269     0x85, 0xA5, 0xC5, 0xE5, 0xF5, 0x56, 0x66, 0x76, 0x86, 0xA6, 0xC6, 0x57,
1270     0x67, 0x77, 0x97, 0xA7, 0x48, 0x88, 0x98, 0x49, 0x59, 0x79, 0x99, 0x3A,
1271     0x4A, 0x8A, 0xBA, 0xFA, 0x2B, 0x7B, 0x0C, 0xAC, 0xBC, 0xCC, 0xEC, 0x7D,
1272     0xAD, 0xBD, 0xDD, 0x4E, 0xBE, 0xCE, 0xFE, 0x8F, 0x9F, 0xAF, 0xBF, 0xDF,
1273     0xEF, 0xFF, 0x90, 0xA0, 0xB0, 0xB1, 0x54, 0x94, 0x45, 0x75, 0xB5, 0xB6,
1274     0x47, 0x87, 0xB7, 0xC7, 0x58, 0x68, 0x78, 0xA8, 0xB8, 0xC8, 0x39, 0x69,
1275     0x89, 0xA9, 0xB9, 0xC9, 0xD9, 0x2A, 0x5A, 0x6A, 0x7A, 0x9A, 0xAA, 0x3B,
1276     0x4B, 0x5B, 0x6B, 0x8B, 0x9B, 0xAB, 0xBB, 0xCB, 0x6C, 0x9C, 0xDC, 0xFC,
1277     0xCD, 0xED, 0xAE, 0xDE,
1278     /* Table set B, code table 6, wordlen 7 - 63 entries */
1279     0x00, 0x01, 0x3F, 0x3E, 0x02, 0x03, 0x3C, 0x3D, 0x04, 0x05, 0x06, 0x07,
1280     0x39, 0x3A, 0x3B, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x34, 0x35, 0x36, 0x37,
1281     0x38, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x19, 0x1A, 0x1B, 0x1C, 0x1D,
1282     0x1E, 0x1F, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x2E, 0x2F, 0x30,
1283     0x31, 0x32, 0x33, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x28, 0x29, 0x2A,
1284     0x2B, 0x2C, 0x2D,
1285     /* Table set B, code table 7, wordlen 1 - 81 entries */
1286     0x00, 0x03, 0x40, 0xC0, 0x10, 0x30, 0x04, 0x0C, 0x01, 0x50, 0xD0, 0x70,
1287     0xF0, 0xC4, 0x14, 0x34, 0x4C, 0x1C, 0x3C, 0xC1, 0x11, 0x31, 0x05, 0x0D,
1288     0x13, 0x33, 0x07, 0x0F, 0x44, 0xCC, 0x41, 0x43, 0xC3, 0x54, 0x74, 0xDC,
1289     0xFC, 0xF1, 0xC5, 0x15, 0x1D, 0x53, 0xC7, 0x37, 0x4F, 0x3F, 0xD4, 0xF4,
1290     0x5C, 0x7C, 0x51, 0xD1, 0x71, 0x45, 0x55, 0x35, 0x4D, 0xCD, 0xDD, 0x3D,
1291     0xD3, 0x73, 0xF3, 0x47, 0x17, 0x77, 0xCF, 0x1F, 0xFF, 0xD5, 0x75, 0xF5,
1292     0x5D, 0x7D, 0xFD, 0x57, 0xD7, 0xF7, 0x5F, 0xDF, 0x7F,
1293     /* Table set B, code table 7, wordlen 3 - 256 entries */
1294     0x00, 0x40, 0x10, 0x04, 0x01, 0x05, 0x50, 0x14, 0x54, 0x41, 0x11, 0x51,
1295     0x45, 0x15, 0x55, 0x44, 0x95, 0x6A, 0x03, 0x80, 0xC0, 0x90, 0xD0, 0x94,
1296     0xD4, 0x24, 0x64, 0x58, 0x91, 0xA1, 0x85, 0xD5, 0x25, 0x65, 0xA5, 0xE5,
1297     0x75, 0xB5, 0xF5, 0x19, 0x59, 0x99, 0xD9, 0x69, 0xA9, 0xE9, 0x79, 0xB9,
1298     0xF9, 0x4D, 0x5D, 0x9D, 0xDD, 0x6D, 0xAD, 0xED, 0x7D, 0xBD, 0xFD, 0x02,
1299     0x42, 0x52, 0x06, 0x46, 0x16, 0x56, 0x96, 0xD6, 0x26, 0x66, 0xA6, 0xE6,
1300     0x76, 0xB6, 0xF6, 0x1A, 0x5A, 0x9A, 0xDA, 0xAA, 0xEA, 0x7A, 0xBA, 0xFA,
1301     0x5E, 0x9E, 0xDE, 0x6E, 0xAE, 0xEE, 0x7E, 0xBE, 0xFE, 0x07, 0x47, 0x57,
1302     0x97, 0xD7, 0x67, 0xA7, 0xE7, 0x77, 0xB7, 0xF7, 0x5B, 0x9B, 0xDB, 0x6B,
1303     0xAB, 0xEB, 0x7B, 0xBB, 0xFB, 0x5F, 0x9F, 0xDF, 0x6F, 0xAF, 0xEF, 0x7F,
1304     0xBF, 0xFF, 0x20, 0x60, 0x70, 0xB0, 0xF0, 0x84, 0xC4, 0xA4, 0xE4, 0x74,
1305     0xB4, 0xF4, 0x08, 0x88, 0x18, 0x98, 0xD8, 0x68, 0xA8, 0xE8, 0x78, 0xB8,
1306     0xF8, 0x1C, 0x5C, 0x9C, 0xDC, 0x6C, 0xAC, 0xEC, 0x3C, 0x7C, 0xBC, 0xFC,
1307     0x81, 0xD1, 0x21, 0x61, 0xE1, 0x71, 0xB1, 0xF1, 0xC5, 0x35, 0x09, 0x49,
1308     0x89, 0xC9, 0x29, 0x39, 0x0D, 0x8D, 0xCD, 0x1D, 0x2D, 0x3D, 0x92, 0xD2,
1309     0x22, 0x62, 0xA2, 0xE2, 0x72, 0xB2, 0xF2, 0x86, 0xC6, 0x36, 0x0A, 0x4A,
1310     0x8A, 0xCA, 0x2A, 0x3A, 0x0E, 0x4E, 0x8E, 0xCE, 0x1E, 0x2E, 0x3E, 0x13,
1311     0x53, 0x93, 0xD3, 0x63, 0xA3, 0xE3, 0x73, 0xB3, 0xF3, 0x87, 0xC7, 0x17,
1312     0x27, 0x37, 0x0B, 0x4B, 0x8B, 0xCB, 0x1B, 0x2B, 0x3B, 0x0F, 0x4F, 0x8F,
1313     0xCF, 0x1F, 0x2F, 0x3F, 0xA0, 0xE0, 0x30, 0x34, 0x48, 0xC8, 0x28, 0x38,
1314     0x0C, 0x4C, 0x8C, 0xCC, 0x2C, 0xC1, 0x31, 0x82, 0xC2, 0x12, 0x32, 0x43,
1315     0x83, 0xC3, 0x23, 0x33,
1316     /* Table set B, code table 7, wordlen 4 - 11 entries */
1317     0x00, 0x01, 0x0F, 0x02, 0x0E, 0x05, 0x0D, 0x03, 0x04, 0x0B, 0x0C,
1318     /* Table set B, code table 7, wordlen 5 - 225 entries */
1319     0x00, 0x10, 0xF0, 0x01, 0x0F, 0x20, 0xE0, 0x11, 0xF1, 0x02, 0x0E, 0x1F,
1320     0xFF, 0xD0, 0x21, 0xE1, 0x12, 0xF2, 0x03, 0x0D, 0x1E, 0xFE, 0x2F, 0xEF,
1321     0x30, 0x40, 0x60, 0x70, 0x90, 0xA0, 0xC0, 0x31, 0xD1, 0x22, 0xE2, 0x13,
1322     0xF3, 0x04, 0x06, 0x07, 0x09, 0x0C, 0x1D, 0xFD, 0x2E, 0xEE, 0x3F, 0xDF,
1323     0x50, 0xB0, 0x41, 0x61, 0x71, 0x91, 0xA1, 0xC1, 0x32, 0x62, 0x72, 0x92,
1324     0xA2, 0xD2, 0x23, 0xD3, 0xE3, 0x14, 0xF4, 0x05, 0x16, 0x26, 0xE6, 0xF6,
1325     0x17, 0x27, 0xE7, 0xF7, 0x19, 0x29, 0xF9, 0x0A, 0x1A, 0x2A, 0xFA, 0x0B,
1326     0x1C, 0x2C, 0xFC, 0x2D, 0x3D, 0xED, 0x3E, 0x4E, 0x7E, 0x9E, 0xDE, 0x4F,
1327     0x6F, 0x7F, 0x9F, 0xAF, 0xCF, 0x51, 0xB1, 0x42, 0x52, 0xB2, 0xC2, 0x33,
1328     0x63, 0x73, 0x93, 0xA3, 0xB3, 0xC3, 0x24, 0x34, 0x74, 0xA4, 0xD4, 0xE4,
1329     0x15, 0x25, 0x65, 0x95, 0xE5, 0xF5, 0x36, 0xD6, 0x37, 0x47, 0xC7, 0xD7,
1330     0x39, 0x59, 0xB9, 0xC9, 0xD9, 0xE9, 0x3A, 0x6A, 0xDA, 0xEA, 0x1B, 0x2B,
1331     0x9B, 0xAB, 0xEB, 0xFB, 0x6C, 0x7C, 0x9C, 0xAC, 0xEC, 0x4D, 0x6D, 0x7D,
1332     0x9D, 0xAD, 0xBD, 0xDD, 0x5E, 0x6E, 0xAE, 0xCE, 0x5F, 0x43, 0x53, 0x44,
1333     0x54, 0x64, 0x94, 0xB4, 0xC4, 0x35, 0x45, 0x55, 0x75, 0xA5, 0xB5, 0xC5,
1334     0xD5, 0x46, 0x56, 0x66, 0x76, 0x96, 0xA6, 0xB6, 0xC6, 0x57, 0x67, 0x77,
1335     0x97, 0xA7, 0xB7, 0x49, 0x69, 0x79, 0x99, 0xA9, 0x4A, 0x5A, 0x7A, 0x9A,
1336     0xAA, 0xBA, 0xCA, 0x3B, 0x4B, 0x5B, 0x6B, 0x7B, 0xBB, 0xCB, 0xDB, 0x3C,
1337     0x4C, 0x5C, 0xBC, 0xCC, 0xDC, 0x5D, 0xCD, 0xBE, 0xBF,
1338     /* Table set B, code table 7, wordlen 7 - 63 entries */
1339     0x00, 0x01, 0x02, 0x3E, 0x3F, 0x03, 0x04, 0x05, 0x3B, 0x3C, 0x3D, 0x06,
1340     0x07, 0x08, 0x09, 0x0A, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x0B, 0x0C, 0x0D,
1341     0x0E, 0x0F, 0x10, 0x2F, 0x31, 0x32, 0x33, 0x34, 0x35, 0x11, 0x12, 0x13,
1342     0x14, 0x2D, 0x2E, 0x30, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x25,
1343     0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x1C, 0x1D, 0x1E, 0x23, 0x1F,
1344     0x21, 0x22, 0x24,
1345     /* Table set B, code table 7, wordlen 7 - 8 entries */
1346     0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1347     /* Table set B, code table 7, wordlen 7 - 8 entries */
1348     0x00, 0x01, 0x07, 0x02, 0x06, 0x03, 0x04, 0x05,
1349     /* Table set B, code table 7, wordlen 7 - 16 entries */
1350     0x07, 0x05, 0x08, 0x06, 0x09, 0x04, 0x0A, 0x0B, 0x00, 0x01, 0x02, 0x03,
1351     0x0C, 0x0D, 0x0E, 0x0F,
1352     /* Table set B, code table 7, wordlen 7 - 15 entries */
1353     0x0F, 0x0E, 0x01, 0x0D, 0x02, 0x03, 0x0C, 0x04, 0x05, 0x06, 0x07, 0x08,
1354     0x09, 0x0A, 0x0B,
1355     /* Table set B, code table 7, wordlen 7 - 16 entries */
1356     0x00, 0x01, 0x0E, 0x0F, 0x02, 0x0D, 0x03, 0x0C, 0x04, 0x05, 0x06, 0x07,
1357     0x08, 0x09, 0x0A, 0x0B,
1358     /* Table set B, code table 7, wordlen 7 - 16 entries */
1359     0x00, 0x01, 0x0F, 0x0E, 0x02, 0x0D, 0x03, 0x0C, 0x04, 0x05, 0x06, 0x07,
1360     0x08, 0x09, 0x0A, 0x0B,
1361     /* Table set B, code table 7, wordlen 7 - 32 entries */
1362     0x00, 0x01, 0x1F, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x1A, 0x1B, 0x1C,
1363     0x1D, 0x1E, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11,
1364     0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,
1365     /* Table set B, code table 7, wordlen 7 - 31 entries */
1366     0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
1367     0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
1368     0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
1369     /* Table set B, code table 7, wordlen 7 - 32 entries */
1370     0x00, 0x1C, 0x1D, 0x01, 0x02, 0x03, 0x04, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
1371     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B,
1372     0x1E, 0x1F, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A,
1373     /* Table set B, code table 7, wordlen 7 - 31 entries */
1374     0x02, 0x03, 0x04, 0x05, 0x06, 0x01, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
1375     0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
1376     0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
1377     /* Table set B, code table 7, wordlen 7 - 32 entries */
1378     0x00, 0x01, 0x02, 0x1F, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x1D, 0x1E,
1379     0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14,
1380     0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,
1381     /* Table set B, code table 7, wordlen 7 - 16 entries */
1382     0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B,
1383     0x0C, 0x0D, 0x0E, 0x0F,
1384     /* Table set B, code table 7, wordlen 7 - 8 entries */
1385     0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1386     /* Table set B, code table 7, wordlen 7 - 8 entries */
1387     0x00, 0x01, 0x07, 0x02, 0x03, 0x04, 0x05, 0x06,
1388     /* Table set B, code table 7, wordlen 7 - 32 entries */
1389     0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x05, 0x06,
1390     0x07, 0x12, 0x13, 0x14, 0x15, 0x16, 0x04, 0x17, 0x18, 0x19, 0x1A, 0x1B,
1391     0x00, 0x01, 0x02, 0x03, 0x1C, 0x1D, 0x1E, 0x1F,
1392     /* Table set B, code table 7, wordlen 7 - 32 entries */
1393     0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x0E,
1394     0x0F, 0x10, 0x11, 0x1D, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x1E, 0x04, 0x05,
1395     0x06, 0x07, 0x08, 0x1F, 0x00, 0x01, 0x02, 0x03,
1396     /* Table set B, code table 7, wordlen 7 - 32 entries */
1397     0x00, 0x01, 0x02, 0x1F, 0x03, 0x1D, 0x1E, 0x04, 0x05, 0x06, 0x1B, 0x1C,
1398     0x07, 0x18, 0x19, 0x1A, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
1399     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
1400     /* Table set B, code table 7, wordlen 7 - 256 entries */
1401     0x00, 0x01, 0xFF, 0x02, 0xFE, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0xFB,
1402     0xFC, 0xFD, 0x09, 0x0A, 0x0B, 0x0C, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0x0D,
1403     0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,
1404     0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25,
1405     0x26, 0xF3, 0xF4, 0xF5, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E,
1406     0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A,
1407     0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46,
1408     0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52,
1409     0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0xC2,
1410     0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE,
1411     0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA,
1412     0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6,
1413     0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2,
1414     0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
1415     0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75,
1416     0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x80, 0x81,
1417     0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D,
1418     0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
1419     0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5,
1420     0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1,
1421     0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD,
1422     0xBE, 0xBF, 0xC0, 0xC1,
1423 };
1424
1425 /** Tables for spectrum coding. */
1426 typedef struct Atrac3pSpecCodeTab {
1427     uint8_t group_size;  ///< number of coefficients grouped together
1428     uint8_t num_coeffs;  ///< 1 - map index to a single value, > 1 - map index to a vector of values
1429     uint8_t bits;        ///< number of bits a single coefficient occupy
1430     uint8_t is_signed;   ///< 1 - values in that table are signed ones, otherwise - absolute ones
1431 } Atrac3pSpecCodeTab;
1432
1433 static const Atrac3pSpecCodeTab atrac3p_spectra_tabs[112] = {
1434     /* table set = A */
1435     /* code table = 0 */
1436     { 1, 4, 2, 1 }, // wordlen = 1
1437     { 1, 4, 2, 0 }, // wordlen = 2
1438     { 1, 2, 3, 1 }, // wordlen = 3
1439     { 1, 1, 3, 0 }, // wordlen = 4
1440     { 1, 2, 4, 1 }, // wordlen = 5
1441     { 1, 1, 4, 0 }, // wordlen = 6
1442     { 1, 1, 6, 1 }, // wordlen = 7
1443
1444     /* code table = 1 */
1445     { 4, 4, 2, 1 }, // wordlen = 1
1446     { 1, 4, 2, 0 }, // wordlen = 2
1447     { 1, 2, 3, 1 }, // wordlen = 3
1448     { 1, 2, 4, 1 }, // wordlen = 4
1449     { 1, 2, 4, 1 }, // wordlen = 5
1450     { 1, 2, 4, 0 }, // wordlen = 6
1451     { 1, 1, 6, 1 }, // wordlen = 7
1452
1453     /* code table = 2 */
1454     { 1, 4, 2, 1 }, // wordlen = 1
1455     { 1, 2, 3, 1 }, // wordlen = 2
1456     { 1, 2, 3, 1 }, // wordlen = 3
1457     { 1, 1, 3, 0 }, // wordlen = 4
1458     { 1, 1, 3, 0 }, // wordlen = 5
1459     { 1, 2, 4, 0 }, // wordlen = 6
1460     { 1, 1, 6, 1 }, // wordlen = 7
1461
1462     /* code table = 3 */
1463     { 1, 2, 2, 1 }, // wordlen = 1
1464     { 1, 4, 2, 0 }, // wordlen = 2
1465     { 1, 4, 2, 0 }, // wordlen = 3
1466     { 1, 1, 3, 0 }, // wordlen = 4
1467     { 1, 2, 4, 1 }, // wordlen = 5
1468     { 1, 2, 4, 0 }, // wordlen = 6
1469     { 1, 1, 6, 1 }, // wordlen = 7
1470
1471     /* code table = 4 */
1472     { 1, 4, 2, 1 }, // wordlen = 1
1473     { 1, 4, 2, 0 }, // wordlen = 2
1474     { 1, 1, 3, 1 }, // wordlen = 3
1475     { 1, 2, 4, 1 }, // wordlen = 4
1476     { 1, 1, 3, 0 }, // wordlen = 5
1477     { 1, 2, 4, 0 }, // wordlen = 6
1478     { 1, 1, 6, 1 }, // wordlen = 7
1479
1480     /* code table = 5 */
1481     { 1, 4, 2, 1 }, // wordlen = 1
1482     { 1, 2, 3, 1 }, // wordlen = 2
1483     { 1, 1, 3, 1 }, // wordlen = 3
1484     { 1, 2, 4, 1 }, // wordlen = 4
1485     { 1, 1, 3, 0 }, // wordlen = 5
1486     { 1, 1, 5, 1 }, // wordlen = 6
1487     { 1, 1, 6, 1 }, // wordlen = 7
1488
1489     /* code table = 6 */
1490     { 2, 4, 2, 1 }, // wordlen = 1
1491     { 1, 2, 3, 1 }, // wordlen = 2
1492     { 1, 4, 2, 0 }, // wordlen = 3
1493     { 1, 2, 4, 1 }, // wordlen = 4
1494     { 1, 1, 4, 1 }, // wordlen = 5
1495     { 1, 1, 5, 1 }, // wordlen = 6
1496     { 1, 1, 6, 1 }, // wordlen = 7
1497
1498     /* code table = 7 */
1499     { 1, 2, 1, 0 }, // wordlen = 1
1500     { 2, 4, 2, 0 }, // wordlen = 2
1501     { 1, 2, 3, 1 }, // wordlen = 3
1502     { 1, 2, 4, 1 }, // wordlen = 4
1503     { 1, 1, 4, 1 }, // wordlen = 5
1504     { 2, 2, 4, 0 }, // wordlen = 6
1505     { 4, 1, 6, 1 }, // wordlen = 7
1506
1507     /* table set = B */
1508     /* code table = 0 */
1509     { 4, 4, 2, 1 }, // wordlen = 1
1510     { 1, 4, 2, 0 }, // wordlen = 2
1511     { 4, 2, 3, 1 }, // wordlen = 3
1512     { 1, 2, 4, 1 }, // wordlen = 4
1513     { 1, 2, 4, 1 }, // wordlen = 5
1514     { 1, 1, 4, 0 }, // wordlen = 6
1515     { 1, 1, 6, 1 }, // wordlen = 7
1516
1517     /* code table = 1 */
1518     { 1, 4, 2, 1 }, // wordlen = 1
1519     { 1, 4, 2, 0 }, // wordlen = 2
1520     { 1, 2, 3, 1 }, // wordlen = 3
1521     { 1, 2, 4, 1 }, // wordlen = 4
1522     { 1, 2, 4, 1 }, // wordlen = 5
1523     { 1, 2, 4, 0 }, // wordlen = 6
1524     { 1, 1, 6, 1 }, // wordlen = 7
1525
1526     /* code table = 2 */
1527     { 4, 4, 2, 1 }, // wordlen = 1
1528     { 4, 4, 2, 0 }, // wordlen = 2
1529     { 1, 2, 3, 1 }, // wordlen = 3
1530     { 1, 2, 4, 1 }, // wordlen = 4
1531     { 2, 2, 4, 1 }, // wordlen = 5
1532     { 2, 2, 4, 0 }, // wordlen = 6
1533     { 4, 1, 6, 1 }, // wordlen = 7
1534
1535     /* code table = 3 */
1536     { 1, 4, 2, 1 }, // wordlen = 1
1537     { 1, 4, 2, 0 }, // wordlen = 2
1538     { 1, 4, 2, 0 }, // wordlen = 3
1539     { 2, 2, 4, 1 }, // wordlen = 4
1540     { 1, 2, 4, 1 }, // wordlen = 5
1541     { 1, 2, 4, 0 }, // wordlen = 6
1542     { 1, 1, 6, 1 }, // wordlen = 7
1543
1544     /* code table = 4 */
1545     { 1, 4, 2, 1 }, // wordlen = 1
1546     { 4, 2, 3, 1 }, // wordlen = 2
1547     { 1, 2, 3, 1 }, // wordlen = 3
1548     { 4, 2, 4, 1 }, // wordlen = 4
1549     { 1, 1, 3, 0 }, // wordlen = 5
1550     { 1, 2, 4, 0 }, // wordlen = 6
1551     { 1, 1, 6, 1 }, // wordlen = 7
1552
1553     /* code table = 5 */
1554     { 2, 4, 2, 1 }, // wordlen = 1
1555     { 1, 2, 3, 1 }, // wordlen = 2
1556     { 4, 1, 3, 1 }, // wordlen = 3
1557     { 1, 1, 3, 0 }, // wordlen = 4
1558     { 1, 1, 3, 0 }, // wordlen = 5
1559     { 1, 1, 5, 1 }, // wordlen = 6
1560     { 2, 1, 6, 1 }, // wordlen = 7
1561
1562     /* code table = 6 */
1563     { 1, 4, 2, 1 }, // wordlen = 1
1564     { 1, 4, 2, 0 }, // wordlen = 2
1565     { 1, 1, 3, 1 }, // wordlen = 3
1566     { 1, 1, 3, 0 }, // wordlen = 4
1567     { 4, 2, 4, 1 }, // wordlen = 5
1568     { 1, 2, 4, 0 }, // wordlen = 6
1569     { 1, 1, 6, 1 }, // wordlen = 7
1570
1571     /* code table = 7 */
1572     { 1, 4, 2, 1 }, // wordlen = 1
1573     { 4, 4, 2, 0 }, // wordlen = 2
1574     { 4, 4, 2, 0 }, // wordlen = 3
1575     { 1, 1, 4, 1 }, // wordlen = 4
1576     { 1, 2, 4, 1 }, // wordlen = 5
1577     { 1, 1, 5, 1 }, // wordlen = 6
1578     { 1, 1, 6, 1 }, // wordlen = 7
1579 };
1580
1581 /* Huffman tables for gain control data. */
1582 static const uint8_t atrac3p_gain_cbs[][12] = {
1583     {  1,  1,  1,  1,  1,  1,  2,  0,  0,  0,  0,  0 },
1584     {  1,  1,  1,  1,  1,  1,  2,  0,  0,  0,  0,  0 },
1585     {  1,  0,  2,  2,  1,  2,  8,  0,  0,  0,  0,  0 },
1586     {  1,  1,  1,  1,  1,  0,  2,  0,  8,  0,  0,  0 },
1587     {  1,  0,  3,  1,  1,  0,  2,  0,  8,  0,  0,  0 },
1588     {  1,  1,  1,  1,  1,  0,  1,  2,  8,  0,  0,  0 },
1589     {  0,  1,  0,  2, 11, 18,  0,  0,  0,  0,  0,  0 },
1590     {  0,  1,  2,  4,  4,  4,  0, 16,  0,  0,  0,  0 },
1591     {  0,  0,  0,  3, 23,  6,  0,  0,  0,  0,  0,  0 },
1592     {  0,  0,  5,  3,  2,  3,  2, 16,  0,  0,  0,  0 },
1593     {  1,  0,  0,  3,  2,  6, 20,  0,  0,  0,  0,  0 },
1594 };
1595
1596 static const uint8_t atrac3p_gain_xlats[] = {
1597     /* Number of gain control points 1 - 8 entries */
1598      0,  1,  2,  3,  4,  5,  6,  7,
1599     /* Number of gain control points 2 - 8 entries */
1600      0,  1,  7,  2,  6,  3,  4,  5,
1601     /* Gain compensation level 1 - 16 entries */
1602      7,  5,  8,  6,  9,  4, 10, 11,  0,  1,  2,  3, 12, 13, 14, 15,
1603     /* Gain compensation level 2 - 15 entries */
1604     15, 14,  1, 13,  2,  3, 12,  4,  5,  6,  7,  8,  9, 10, 11,
1605     /* Gain compensation level 3 - 16 entries */
1606      0,  1, 14, 15,  2, 13,  3, 12,  4,  5,  6,  7,  8,  9, 10, 11,
1607     /* Gain compensation level 4 - 16 entries */
1608      0,  1, 15, 14,  2, 13,  3, 12,  4,  5,  6,  7,  8,  9, 10, 11,
1609     /* Gain compensation location 3 - 32 entries */
1610      0,  1, 31,  2,  3,  4,  5,  6,  7, 26, 27, 28, 29, 30,  8,  9, 10, 11, 12,
1611     13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
1612     /* Gain compensation location 1 - 31 entries */
1613      1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
1614     20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
1615     /* Gain compensation location 4 - 32 entries */
1616      0, 28, 29,  1,  2,  3,  4, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
1617     23, 24, 25, 26, 27, 30, 31,  5,  6,  7,  8,  9, 10,
1618     /* Gain compensation location 2 - 31 entries */
1619      2,  3,  4,  5,  6,  1,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
1620     20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
1621     /* Gain compensation location 5 - 32 entries */
1622      0,  1,  2, 31,  3,  4,  5,  6,  7,  8, 29, 30,  9, 10, 11, 12, 13, 14, 15,
1623     16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
1624 };
1625
1626 /* Huffman tables for GHA waves data. */
1627 static const uint8_t atrac3p_tone_cbs[][12] = {
1628     {  1,  0,  1,  2,  4,  8,  0,  0,  0,  0,  0,  0 },
1629     {  1,  1,  1,  1,  1,  1,  2,  0,  0,  0,  0,  0 },
1630     {  1,  1,  1,  1,  0,  4,  0,  0,  0,  0,  0,  0 },
1631     {  0,  0,  0, 10,  8,  6,  0,  8,  0,  0,  0,  0 },
1632     {  0,  0,  0, 11,  5,  6,  6,  4,  0,  0,  0,  0 },
1633     {  0,  1,  3,  3,  1,  4,  4, 16,  0,  0,  0,  0 },
1634     {  1,  0,  0,  2,  2,  0,  9,  9, 29,104, 100, 0 },
1635 };
1636
1637 static const uint8_t atrac3p_tone_xlats[] = {
1638     /* Number of tone bands - 16 entries */
1639       0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,
1640      15,
1641     /* Number of tones 1 - 8 entries */
1642       0,   1,   2,   3,   4,   5,   6,   7,
1643     /* Number of tones 2 - 8 entries */
1644       0,   1,   7,   2,   3,   4,   5,   6,
1645     /* Amplitude information 1 - 32 entries */
1646       8,   9,  10,  11,  12,  13,  14,  15,  16,  17,   5,   6,   7,  18,  19,
1647      20,  21,  22,   4,  23,  24,  25,  26,  27,   0,   1,   2,   3,  28,  29,
1648      30,  31,
1649     /* Amplitude information 2 - 32 entries */
1650      18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  14,  15,  16,  17,
1651      29,   9,  10,  11,  12,  13,  30,   4,   5,   6,   7,   8,  31,   0,   1,
1652       2,   3,
1653     /* Amplitude information 3 - 32 entries */
1654       0,   1,   2,  31,   3,  29,  30,   4,   5,   6,  27,  28,   7,  24,  25,
1655      26,   8,   9,  10,  11,  12,  13,  14,  15,  16,  17,  18,  19,  20,  21,
1656      22,  23,
1657     /* Frequencies - 256 entries */
1658       0,   1, 255,   2, 254,   3,   4,   5,   6,   7,   8, 251, 252, 253,   9,
1659      10,  11,  12, 246, 247, 248, 249, 250,  13,  14,  15,  16,  17,  18,  19,
1660      20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,  32,  33,  34,
1661      35,  36,  37,  38, 243, 244, 245,  39,  40,  41,  42,  43,  44,  45,  46,
1662      47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,
1663      62,  63,  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,
1664      77,  78,  79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,
1665      92,  93, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206,
1666     207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221,
1667     222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236,
1668     237, 238, 239, 240, 241, 242,  94,  95,  96,  97,  98,  99, 100, 101, 102,
1669     103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
1670     118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
1671     133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
1672     148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
1673     163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
1674     178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
1675     193,
1676 };
1677
1678 #endif /* AVCODEC_ATRAC3PLUS_DATA_H */