1 /* ------------------------------------------------------------------
2 * Copyright (C) 1998-2009 PacketVideo
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
14 * See the License for the specific language governing permissions
15 * and limitations under the License.
16 * -------------------------------------------------------------------
19 ------------------------------------------------------------------------------
24 Filename: pvmp3_tables.cpp
28 ------------------------------------------------------------------------------
35 ------------------------------------------------------------------------------
38 ------------------------------------------------------------------------------
41 [1] ISO MPEG Audio Subgroup Software Simulation Group (1996)
42 ISO 13818-3 MPEG-2 Audio Decoder - Lower Sampling Frequency Extension
44 ------------------------------------------------------------------------------
48 /*----------------------------------------------------------------------------
50 ----------------------------------------------------------------------------*/
52 #include "pvmp3_tables.h"
54 /*----------------------------------------------------------------------------
56 ; Define module specific macros here
57 ----------------------------------------------------------------------------*/
60 /*----------------------------------------------------------------------------
62 ; Include all pre-processor statements here. Include conditional
63 ; compile variables also.
64 ----------------------------------------------------------------------------*/
66 /*----------------------------------------------------------------------------
67 ; LOCAL FUNCTION DEFINITIONS
68 ; Function Prototype declaration
69 ----------------------------------------------------------------------------*/
71 /*----------------------------------------------------------------------------
72 ; LOCAL STORE/BUFFER/POINTER DEFINITIONS
73 ; Variable declaration - defined here and used outside this module
74 ----------------------------------------------------------------------------*/
76 const int32 mp3_s_freq[4][4] =
78 {44100, 48000, 32000, 0},
79 {22050, 24000, 16000, 0},
80 {11025, 12000, 8000, 0}
87 const int32 inv_sfreq[4] =
89 Qfmt_28(3.26530612244898),
96 /* 1: MPEG-1, 0: MPEG-2 LSF, 1995-07-11 shn */
99 const int16 mp3_bitrate[3][15] =
101 {0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320},
102 {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160},
103 {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160}
107 const mp3_scaleFactorBandIndex mp3_sfBandIndex[9] =
112 {{0, 4, 8, 12, 16, 20, 24, 30, 36, 44, 52, 62, 74, 90, 110, 134, 162, 196, 238, 288, 342, 418, 576},
113 {0, 4, 8, 12, 16, 22, 30, 40, 52, 66, 84, 106, 136, 192}},
114 {{0, 4, 8, 12, 16, 20, 24, 30, 36, 42, 50, 60, 72, 88, 106, 128, 156, 190, 230, 276, 330, 384, 576},
115 {0, 4, 8, 12, 16, 22, 28, 38, 50, 64, 80, 100, 126, 192}},
116 {{0, 4, 8, 12, 16, 20, 24, 30, 36, 44, 54, 66, 82, 102, 126, 156, 194, 240, 296, 364, 448, 550, 576},
117 {0, 4, 8, 12, 16, 22, 30, 42, 58, 78, 104, 138, 180, 192}},
121 {{0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576},
122 {0, 4, 8, 12, 18, 24, 32, 42, 56, 74, 100, 132, 174, 192}},
123 {{0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 114, 136, 162, 194, 232, 278, 332, 394, 464, 540, 576},
124 {0, 4, 8, 12, 18, 26, 36, 48, 62, 80, 104, 136, 180, 192}},
125 {{0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576},
126 {0, 4, 8, 12, 18, 26, 36, 48, 62, 80, 104, 134, 174, 192}},
128 /* MPEG 2.5 extension */
130 {{0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576},
131 {0, 4, 8, 12, 18, 26, 36, 48, 62, 80, 104, 134, 174, 192}},
132 {{0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576},
133 {0, 4, 8, 12, 18, 26, 36, 48, 62, 80, 104, 134, 174, 192}},
134 {{0, 12, 24, 36, 48, 60, 72, 88, 108, 132, 160, 192, 232, 280, 336, 400, 476, 566, 568, 570, 572, 574, 576},
135 {0, 8, 16, 24, 36, 52, 72, 96, 124, 160, 162, 164, 166, 192}}
139 #define INV_Q31( x) (int32)(0x7FFFFFFF/(float)x - 1.0f)
141 const int32 mp3_shortwindBandWidths[9][13] =
143 { INV_Q31(4), INV_Q31(4), INV_Q31(4), INV_Q31(4), INV_Q31(6), INV_Q31(8), INV_Q31(10),
144 INV_Q31(12), INV_Q31(14), INV_Q31(18), INV_Q31(22), INV_Q31(30), INV_Q31(56)},
145 { INV_Q31(4), INV_Q31(4), INV_Q31(4), INV_Q31(4), INV_Q31(6), INV_Q31(6), INV_Q31(10),
146 INV_Q31(12), INV_Q31(14), INV_Q31(16), INV_Q31(20), INV_Q31(26), INV_Q31(66)},
147 { INV_Q31(4), INV_Q31(4), INV_Q31(4), INV_Q31(4), INV_Q31(6), INV_Q31(8), INV_Q31(12),
148 INV_Q31(16), INV_Q31(20), INV_Q31(26), INV_Q31(34), INV_Q31(42), INV_Q31(12)},
149 { INV_Q31(4), INV_Q31(4), INV_Q31(4), INV_Q31(6), INV_Q31(6), INV_Q31(8), INV_Q31(10),
150 INV_Q31(14), INV_Q31(18), INV_Q31(26), INV_Q31(32), INV_Q31(42), INV_Q31(18)},
151 { INV_Q31(4), INV_Q31(4), INV_Q31(4), INV_Q31(6), INV_Q31(8), INV_Q31(10), INV_Q31(12),
152 INV_Q31(14), INV_Q31(18), INV_Q31(24), INV_Q31(32), INV_Q31(44), INV_Q31(12)},
153 { INV_Q31(4), INV_Q31(4), INV_Q31(4), INV_Q31(6), INV_Q31(8), INV_Q31(10), INV_Q31(12),
154 INV_Q31(14), INV_Q31(18), INV_Q31(24), INV_Q31(30), INV_Q31(40), INV_Q31(18)},
155 { INV_Q31(4), INV_Q31(4), INV_Q31(4), INV_Q31(6), INV_Q31(8), INV_Q31(10), INV_Q31(12),
156 INV_Q31(14), INV_Q31(18), INV_Q31(24), INV_Q31(30), INV_Q31(40), INV_Q31(18)},
157 { INV_Q31(4), INV_Q31(4), INV_Q31(4), INV_Q31(6), INV_Q31(8), INV_Q31(10), INV_Q31(12),
158 INV_Q31(14), INV_Q31(18), INV_Q31(24), INV_Q31(30), INV_Q31(40), INV_Q31(18)},
159 { INV_Q31(8), INV_Q31(8), INV_Q31(8), INV_Q31(12), INV_Q31(16), INV_Q31(20), INV_Q31(24),
160 INV_Q31(28), INV_Q31(36), INV_Q31(2), INV_Q31(2), INV_Q31(2), INV_Q31(26)}
164 #define Q30_fmt(a) (int32((0x40000000)*a))
166 const int32 pqmfSynthWin[(HAN_SIZE/2) + 8] =
168 Q30_fmt(-0.000015259F), Q30_fmt(0.000396729F), Q30_fmt(0.000473022F), Q30_fmt(0.003173828F),
169 Q30_fmt(0.003326416F), Q30_fmt(0.006118770F), Q30_fmt(0.007919310F), Q30_fmt(0.031478880F),
170 Q30_fmt(0.030517578F), Q30_fmt(0.073059080F), Q30_fmt(0.084182740F), Q30_fmt(0.108856200F),
171 Q30_fmt(0.090927124F), Q30_fmt(0.543823240F), Q30_fmt(0.600219727F), Q30_fmt(1.144287109F),
173 Q30_fmt(-0.000015259F), Q30_fmt(0.000366211F), Q30_fmt(0.000534058F), Q30_fmt(0.003082275F),
174 Q30_fmt(0.003387451F), Q30_fmt(0.005294800F), Q30_fmt(0.008865360F), Q30_fmt(0.031738280F),
175 Q30_fmt(0.029785160F), Q30_fmt(0.067520140F), Q30_fmt(0.089706420F), Q30_fmt(0.116577150F),
176 Q30_fmt(0.080688480F), Q30_fmt(0.515609740F), Q30_fmt(0.628295900F), Q30_fmt(1.142211914F),
178 Q30_fmt(-0.000015259F), Q30_fmt(0.000320435F), Q30_fmt(0.000579834F), Q30_fmt(0.002990723F),
179 Q30_fmt(0.003433228F), Q30_fmt(0.004486080F), Q30_fmt(0.009841920F), Q30_fmt(0.031845090F),
180 Q30_fmt(0.028884890F), Q30_fmt(0.061996460F), Q30_fmt(0.095169070F), Q30_fmt(0.123474120F),
181 Q30_fmt(0.069595340F), Q30_fmt(0.487472530F), Q30_fmt(0.656219480F), Q30_fmt(1.138763428F),
183 Q30_fmt(-0.000015259F), Q30_fmt(0.000289917F), Q30_fmt(0.000625610F), Q30_fmt(0.002899170F),
184 Q30_fmt(0.003463745F), Q30_fmt(0.003723140F), Q30_fmt(0.010849000F), Q30_fmt(0.031814580F),
185 Q30_fmt(0.027801510F), Q30_fmt(0.056533810F), Q30_fmt(0.100540160F), Q30_fmt(0.129577640F),
186 Q30_fmt(0.057617190F), Q30_fmt(0.459472660F), Q30_fmt(0.683914180F), Q30_fmt(1.133926392F),
188 Q30_fmt(-0.000015259F), Q30_fmt(0.000259399F), Q30_fmt(0.000686646F), Q30_fmt(0.002792358F),
189 Q30_fmt(0.003479004F), Q30_fmt(0.003005981F), Q30_fmt(0.011886600F), Q30_fmt(0.031661990F),
190 Q30_fmt(0.026535030F), Q30_fmt(0.051132200F), Q30_fmt(0.105819700F), Q30_fmt(0.134887700F),
191 Q30_fmt(0.044784550F), Q30_fmt(0.431655880F), Q30_fmt(0.711318970F), Q30_fmt(1.127746582F),
193 Q30_fmt(-0.000015259F), Q30_fmt(0.000244141F), Q30_fmt(0.000747681F), Q30_fmt(0.002685547F),
194 Q30_fmt(0.003479004F), Q30_fmt(0.002334595F), Q30_fmt(0.012939450F), Q30_fmt(0.031387330F),
195 Q30_fmt(0.025085450F), Q30_fmt(0.045837400F), Q30_fmt(0.110946660F), Q30_fmt(0.139450070F),
196 Q30_fmt(0.031082153F), Q30_fmt(0.404083250F), Q30_fmt(0.738372800F), Q30_fmt(1.120223999F),
198 Q30_fmt(-0.000030518F), Q30_fmt(0.000213623F), Q30_fmt(0.000808716F), Q30_fmt(0.002578735F),
199 Q30_fmt(0.003463745F), Q30_fmt(0.001693726F), Q30_fmt(0.014022830F), Q30_fmt(0.031005860F),
200 Q30_fmt(0.023422240F), Q30_fmt(0.040634160F), Q30_fmt(0.115921020F), Q30_fmt(0.143264770F),
201 Q30_fmt(0.016510010F), Q30_fmt(0.376800540F), Q30_fmt(0.765029907F), Q30_fmt(1.111373901F),
203 Q30_fmt(-0.000030518F), Q30_fmt(0.000198364F), Q30_fmt(0.000885010F), Q30_fmt(0.002456665F),
204 Q30_fmt(0.003417969F), Q30_fmt(0.001098633F), Q30_fmt(0.015121460F), Q30_fmt(0.030532840F),
205 Q30_fmt(0.021575930F), Q30_fmt(0.035552980F), Q30_fmt(0.120697020F), Q30_fmt(0.146362300F),
206 Q30_fmt(0.001068120F), Q30_fmt(0.349868770F), Q30_fmt(0.791213990F), Q30_fmt(1.101211548F),
208 Q30_fmt(-0.000030518F), Q30_fmt(0.000167847F), Q30_fmt(0.000961304F), Q30_fmt(0.002349854F),
209 Q30_fmt(0.003372192F), Q30_fmt(0.000549316F), Q30_fmt(0.016235350F), Q30_fmt(0.029937740F),
210 Q30_fmt(0.019531250F), Q30_fmt(0.030609130F), Q30_fmt(0.125259400F), Q30_fmt(0.148773190F),
211 Q30_fmt(-0.015228270F), Q30_fmt(0.323318480F), Q30_fmt(0.816864010F), Q30_fmt(1.089782715F),
213 Q30_fmt(-0.000030518F), Q30_fmt(0.000152588F), Q30_fmt(0.001037598F), Q30_fmt(0.002243042F),
214 Q30_fmt(0.003280640F), Q30_fmt(0.000030518F), Q30_fmt(0.017349240F), Q30_fmt(0.029281620F),
215 Q30_fmt(0.017257690F), Q30_fmt(0.025817870F), Q30_fmt(0.129562380F), Q30_fmt(0.150497440F),
216 Q30_fmt(-0.032379150F), Q30_fmt(0.297210693F), Q30_fmt(0.841949463F), Q30_fmt(1.077117920F),
218 Q30_fmt(-0.000045776F), Q30_fmt(0.000137329F), Q30_fmt(0.001113892F), Q30_fmt(0.002120972F),
219 Q30_fmt(0.003173828F), Q30_fmt(-0.000442505F), Q30_fmt(0.018463130F), Q30_fmt(0.028533940F),
220 Q30_fmt(0.014801030F), Q30_fmt(0.021179200F), Q30_fmt(0.133590700F), Q30_fmt(0.151596070F),
221 Q30_fmt(-0.050354000F), Q30_fmt(0.271591190F), Q30_fmt(0.866363530F), Q30_fmt(1.063217163F),
223 Q30_fmt(-0.000045776F), Q30_fmt(0.000122070F), Q30_fmt(0.001205444F), Q30_fmt(0.002014160F),
224 Q30_fmt(0.003051758F), Q30_fmt(-0.000869751F), Q30_fmt(0.019577030F), Q30_fmt(0.027725220F),
225 Q30_fmt(0.012115480F), Q30_fmt(0.016708370F), Q30_fmt(0.137298580F), Q30_fmt(0.152069090F),
226 Q30_fmt(-0.069168090F), Q30_fmt(0.246505740F), Q30_fmt(0.890090940F), Q30_fmt(1.048156738F),
228 Q30_fmt(-0.000061035F), Q30_fmt(0.000106812F), Q30_fmt(0.001296997F), Q30_fmt(0.001907349F),
229 Q30_fmt(0.002883911F), Q30_fmt(-0.001266479F), Q30_fmt(0.020690920F), Q30_fmt(0.026840210F),
230 Q30_fmt(0.009231570F), Q30_fmt(0.012420650F), Q30_fmt(0.140670780F), Q30_fmt(0.151962280F),
231 Q30_fmt(-0.088775630F), Q30_fmt(0.221984860F), Q30_fmt(0.913055420F), Q30_fmt(1.031936646F),
233 Q30_fmt(-0.000061035F), Q30_fmt(0.000106812F), Q30_fmt(0.001388550F), Q30_fmt(0.001785278F),
234 Q30_fmt(0.002700806F), Q30_fmt(-0.001617432F), Q30_fmt(0.021789550F), Q30_fmt(0.025909420F),
235 Q30_fmt(0.006134030F), Q30_fmt(0.008316040F), Q30_fmt(0.143676760F), Q30_fmt(0.151306150F),
236 Q30_fmt(-0.109161380F), Q30_fmt(0.198059080F), Q30_fmt(0.935195920F), Q30_fmt(1.014617920F),
238 Q30_fmt(-0.000076294F), Q30_fmt(0.000091553F), Q30_fmt(0.001480103F), Q30_fmt(0.001693726F),
239 Q30_fmt(0.002487183F), Q30_fmt(-0.001937866F), Q30_fmt(0.022857670F), Q30_fmt(0.024932860F),
240 Q30_fmt(0.002822880F), Q30_fmt(0.004394530F), Q30_fmt(0.146255490F), Q30_fmt(0.150115970F),
241 Q30_fmt(-0.130310060F), Q30_fmt(0.174789430F), Q30_fmt(0.956481930F), Q30_fmt(0.996246338F),
243 Q30_fmt(0.000000000F), Q30_fmt(0.000442505F), Q30_fmt(0.001586910F), Q30_fmt(0.003250122F),
244 Q30_fmt(0.007003780F), Q30_fmt(0.023910525F), Q30_fmt(0.031082153F), Q30_fmt(0.078628545F),
245 Q30_fmt(0.148422240F), Q30_fmt(0.100311279F), Q30_fmt(0.572036740F), Q30_fmt(0.976852417F),
246 Q30_fmt(1.144989014F), Q30_fmt(-0.572036745F), Q30_fmt(-0.152206421F), Q30_fmt(0.100311279F),
248 Q30_fmt(-0.078628540F), Q30_fmt(-0.000686646F), Q30_fmt(0.031082153F), Q30_fmt(-0.007003785F),
249 Q30_fmt(0.002227783F), Q30_fmt(0.003250122F), Q30_fmt(-0.000442500F), Q30_fmt(-0.000076294F),
256 const uint16 huffTable_1[8] =
258 0x1103, 0x0103, 0x1002, 0x1002,
259 0x0001, 0x0001, 0x0001, 0x0001
262 const uint16 huffTable_2[15] =
264 0x1103, 0x0103, 0x1003, 0x0001,
265 0x0001, 0x0001, 0x0001, 0x2206,
266 0x0206, 0x1205, 0x1205, 0x2105,
267 0x2105, 0x2005, 0x2005
270 const uint16 huffTable_3[15] =
273 0x1003, 0x1102, 0x1102, 0x0102,
274 0x0102, 0x0002, 0x0002, 0x2206,
275 0x0206, 0x1205, 0x1205, 0x2105,
276 0x2105, 0x2005, 0x2005
279 const uint16 huffTable_5[25] =
282 0x1103, 0x0103, 0x1003, 0x0001,
283 0x0001, 0x0001, 0x0001, 0x3106,
284 0x3106, 0x1307, 0x0307, 0x3007,
285 0x2207, 0x1206, 0x1206, 0x2106,
286 0x2106, 0x0206, 0x0206, 0x2006,
287 0x2006, 0x3308, 0x2308, 0x3207,
292 const uint16 huffTable_6[26] =
295 0x1204, 0x2104, 0x2004, 0x0103,
296 0x0103, 0x1102, 0x1102, 0x1102,
297 0x1102, 0x1003, 0x1003, 0x0003,
298 0x0003, 0x2306, 0x3206, 0x3006,
299 0x1305, 0x1305, 0x3105, 0x3105,
300 0x2205, 0x2205, 0x0205, 0x0205,
306 const uint16 huffTable_7[73] =
383 const uint16 huffTable_8[66] =
455 const uint16 huffTable_9[53] =
514 const uint16 huffTable_10[96] =
615 const uint16 huffTable_11[116] =
655 0x6409, /* 000 110 */
736 const uint16 huffTable_12[134] =
851 0x4709, /* 0000 01 */
865 0x7309, /* 000 100 */
877 const uint16 huffTable_13[491] =
1020 0x090a, /* 00 10100 */
1022 0x900a, /* 00 10101 */
1024 0x480a, /* 00 10110 */
1026 0x840a, /* 00 10111 */
1028 0x720a, /* 00 11000 */
1030 0x460b, /* 00 11 0 */
1045 0xc10b, /* 000 0000 */
1047 0x0c0c, /* 000 00 1 */
1051 0x6a0c, /* 000 0 11 */
1059 0x5a0c, /* 000 111 */
1061 0x2b0b, /* 000 0100 */
1063 0x690c, /* 000 01 1 */
1065 0xa40b, /* 000 0101 */
1069 0x940b, /* 000 0110 */
1071 0x760c, /* 000 011011 */
1073 0xb20a, /* 000 011 */
1075 0xb20a, /* 000 011 */
1077 0x1b0a, /* 000 100 */
1079 0x1b0a, /* 000 100 */
1082 0xb10a, /* 000 100 */
1083 0xb10a, /* 000 100 */
1084 0x0b0b, /* 000 10100 */
1085 0x0b0b, /* 000 1010 */
1087 0xb00b, /* 000 1010 */
1088 0x960b, /* 000 10110 */
1089 0x960b, /* 000 1011 */
1091 0x4a0b, /* 000 1011 */
1092 0x3a0b, /* 000 11000 */
1093 0x3a0b, /* 000 1100 */
1094 0xa30b, /* 000 11 */
1095 0xa30b, /* 000 1100 */
1097 0x590b, /* 000 1101 */
1098 0x950b, /* 000 11011 */
1099 0x950b, /* 000 1101 */
1149 0xb70c, /* 0000 0 */
1151 0xc50d, /* 0000 011 */
1155 0xc30c, /* 0000 1 */
1162 0xd10b, /* 0000 010 */
1177 0x6b0c, /* 0000 1 */
1178 0xb60c, /* 0000 1 1 */
1179 0xb60c, /* 0000 1 */
1184 0x2c0b, /* 0000 1011 */
1185 0x2c0b, /* 0000 101 */
1186 0x2c0b, /* 0000 101 */
1187 0x2c0b, /* 0000 101 */
1192 0x5b0b, /* 0000 1101 */
1194 0x5b0b, /* 0000 110 */
1195 0x5b0b, /* 0000 110 */
1199 0x890c, /* 0000 1110 */
1243 0xd90e, /* 0000000 */
1254 0xf40e, /* 0000000 1 */
1259 0xf30e, /* 0000000 101 */
1261 0x3f0d, /* 0000000 11 */
1263 0x3f0d, /* 0000000 11 */
1266 0xd80e, /* 0000000 1111 */
1269 0x8f0f, /* 00000000 000 */
1270 0xf80f, /* 00000000 0 */
1272 0xcc0f, /* 00000000 0 */
1275 0x9e10, /* 00000000 11 */
1280 0xf70e, /* 00000000 011 */
1283 0xf70e, /* 00000000 01 */
1285 0xda0e, /* 00000000 10 */
1287 0xda0e, /* 00000000 10 */
1289 0xad0f, /* 00000000 101 */
1291 0xbc0f, /* 00000000 101 */
1293 0xcb0f, /* 00000000 110 */
1295 0xf60f, /* 00000000 110 */
1297 0x6f0e, /* 00000000 11 */
1298 0x6f0e, /* 00000000 11 */
1299 0x6f0e, /* 00000000 11 */
1303 0xef10, /* 000000000000 */
1304 0xdf10, /* 000000000000 1 */
1305 0xdf10, /* 000000000000 */
1306 0xee10, /* 00000000000 00 */
1307 0xee10, /* 00000000000 0 */
1308 0xcf10, /* 00000000000 01 */
1310 0xde10, /* 00000000000 10 */
1312 0xbf10, /* 00000000000 11 */
1313 0xbf10, /* 00000000000 1 */
1317 0xce10, /* 0000000000 00 */
1318 0xdc10, /* 0000000000 010 */
1322 0xec0f, /* 0000000000 10 */
1323 0xec0f, /* 0000000000 1 */
1324 0xec0f, /* 0000000000 1 */
1325 0xec0f, /* 0000000000 1 */
1326 0xdd0f, /* 0000000000 11 */
1327 0xdd0f, /* 0000000000 1 */
1328 0xdd0f, /* 0000000000 1 */
1329 0xdd0f, /* 0000000000 1 */
1330 0xfa10, /* 000000000 0000 */
1331 0xfa10, /* 000000000 000 */
1332 0xcd10, /* 000000000 0 */
1333 0xcd10, /* 000000000 000 */
1334 0xbe0f, /* 000000000 */
1341 0xeb0f, /* 000000000 01 */
1342 0x9f0f, /* 000000000 011 */
1343 0x9f0f, /* 000000000 01 */
1346 0xf90f, /* 000000000 100 */
1347 0xf90f, /* 000000000 10 */
1348 0xf90f, /* 000000000 10 */
1349 0xf90f, /* 000000000 10 */
1350 0xea0f, /* 000000000 101 */
1351 0xea0f, /* 000000000 10 */
1352 0xea0f, /* 000000000 10 */
1353 0xea0f, /* 000000000 10 */
1354 0xbd0f, /* 000000000 110 */
1355 0xbd0f, /* 000000000 11 */
1356 0xbd0f, /* 000000000 11 */
1357 0xbd0f, /* 000000000 11 */
1358 0xdb0f, /* 000000000 111 */
1359 0xdb0f, /* 000000000 11 */
1360 0xdb0f, /* 000000000 11 */
1361 0xdb0f, /* 000000000 11 */
1375 const uint16 huffTable_15[421] =
1386 0x4207, /* 0101010 */
1388 0x4106, /* 010110 */
1390 0x1407, /* 0101110 */
1392 0x2306, /* 011000 */
1398 0x1306, /* 011011 */
1400 0x3106, /* 011100 */
1402 0x3006, /* 011101 */
1452 0x8009, /* 011010 */
1454 0x6509, /* 011100 */
1456 0x7309, /* 011110 */
1470 0x0709, /* 101100 */
1471 0x7009, /* 101101 */
1486 0x0609, /* 111100 */
1487 0x6009, /* 111101 */
1494 0x5308, /* 0100 0 */
1496 0x4408, /* 0100 1 */
1514 0x0508, /* 01 100 */
1516 0x5008, /* 01 101 */
1520 0x2c0a, /* 00 11110 */
1524 0x890a, /* 0 00 0 */
1526 0xc10a, /* 0 0 00 */
1527 0x4b0a, /* 0 0 01 */
1528 0xb40a, /* 0 0 10 */
1529 0x6a0a, /* 0 0 11 */
1538 0xb209, /* 0 01000 */
1539 0xb209, /* 0 0100 */
1540 0xa50a, /* 0 01 0 */
1541 0x1b0a, /* 0 01 1 */
1542 0xb109, /* 0 01010 */
1543 0xb109, /* 0 0101 */
1544 0xb00a, /* 0 010110 */
1545 0x690a, /* 0 010111 */
1546 0x960a, /* 0 011000 */
1548 0xa40a, /* 0 011010 */
1549 0x780a, /* 0 011011 */
1550 0x870a, /* 0 011100 */
1551 0x3a0a, /* 0 011101 */
1552 0xa309, /* 0 01111 */
1553 0xa309, /* 0 0111 */
1554 0x5909, /* 0 10000 */
1555 0x5909, /* 0 1000 */
1557 0x9509, /* 0 1000 */
1562 0x1a09, /* 0 10100 */
1563 0x1a09, /* 0 1010 */
1564 0xa109, /* 0 10101 */
1565 0xa109, /* 0 1010 */
1566 0x0a0a, /* 0 101100 */
1567 0xa00a, /* 0 101101 */
1568 0x6809, /* 0 10111 */
1569 0x6809, /* 0 1011 */
1570 0x8609, /* 0 11000 */
1571 0x8609, /* 0 1100 */
1573 0x4909, /* 0 1100 */
1574 0x9409, /* 0 11010 */
1575 0x9409, /* 0 1101 */
1576 0x3909, /* 0 11011 */
1577 0x3909, /* 0 1101 */
1578 0x9309, /* 0 11100 */
1579 0x9309, /* 0 1110 */
1580 0x770a, /* 0 111010 */
1581 0x090a, /* 0 111011 */
1583 0xc70b, /* 00 000 */
1584 0x4d0b, /* 00 00 0 */
1585 0x8b0b, /* 00 00 1 */
1586 0xd40a, /* 00 0 0 */
1588 0xb80b, /* 00 0 10 */
1589 0x9a0b, /* 00 0 11 */
1590 0xa90b, /* 00 000 */
1592 0xc60b, /* 00 010 */
1593 0x3d0b, /* 00 011 */
1598 0x2d0b, /* 00 010000 */
1599 0x0d0b, /* 00 010 */
1601 0x1d0a, /* 00 0100 */
1602 0x7b0a, /* 00 01010 */
1603 0x7b0a, /* 00 0101 */
1604 0xb70a, /* 00 01011 */
1605 0xb70a, /* 00 0101 */
1606 0xd10a, /* 00 01100 */
1607 0xd10a, /* 00 0110 */
1608 0x5c0b, /* 00 011010 */
1609 0xd00b, /* 00 011011 */
1610 0xc50a, /* 00 01110 */
1611 0xc50a, /* 00 0111 */
1612 0x8a0a, /* 00 01111 */
1613 0x8a0a, /* 00 0111 */
1614 0xa80a, /* 00 10000 */
1615 0xa80a, /* 00 1000 */
1617 0x4c0a, /* 00 1000 */
1618 0xc40a, /* 00 1 0 */
1620 0x6b0a, /* 00 1 1 */
1622 0xb60a, /* 00 10100 */
1623 0xb60a, /* 00 1010 */
1624 0x990b, /* 00 101010 */
1625 0x0c0b, /* 00 101011 */
1626 0x3c0a, /* 00 10110 */
1627 0x3c0a, /* 00 1011 */
1628 0xc30a, /* 00 10111 */
1629 0xc30a, /* 00 1011 */
1630 0x7a0a, /* 00 11000 */
1631 0x7a0a, /* 00 1100 */
1633 0xa70a, /* 00 1100 */
1634 0xa60a, /* 00 11010 */
1635 0xa60a, /* 00 1101 */
1636 0xc00b, /* 00 110110 */
1637 0x0b0b, /* 00 110111 */
1639 0xcb0b, /* 0000 000 */
1640 0xf60b, /* 0000 0 */
1641 0xf60b, /* 0000 000 */
1642 0x8e0c, /* 0000 00 */
1643 0xe80c, /* 0000 01 */
1644 0x5f0c, /* 0000 10 */
1645 0x9d0c, /* 0000 11 */
1646 0xf50b, /* 0000 0100 */
1647 0xf50b, /* 0000 010 */
1648 0x7e0b, /* 0000 0101 */
1649 0x7e0b, /* 0000 010 */
1650 0xe70b, /* 0000 0110 */
1651 0xe70b, /* 0000 011 */
1652 0xac0b, /* 0000 0111 */
1653 0xac0b, /* 0000 011 */
1654 0xca0b, /* 0000 1000 */
1655 0xca0b, /* 0000 100 */
1656 0xbb0b, /* 0000 1 */
1657 0xbb0b, /* 0000 100 */
1658 0xd90c, /* 0000 10100 */
1659 0x8d0c, /* 0000 10101 */
1660 0x4f0b, /* 0000 1011 */
1661 0x4f0b, /* 0000 101 */
1662 0xf40b, /* 0000 1100 */
1663 0xf40b, /* 0000 110 */
1664 0x3f0b, /* 0000 1101 */
1665 0x3f0b, /* 0000 110 */
1666 0xf30b, /* 0000 1110 */
1667 0xf30b, /* 0000 111 */
1668 0xd80b, /* 0000 1111 */
1669 0xd80b, /* 0000 111 */
1671 0xe60b, /* 000 0000 */
1672 0x2f0b, /* 000 00 */
1673 0x2f0b, /* 000 0000 */
1674 0xf20b, /* 000 0 0 */
1676 0x6e0c, /* 000 0 10 */
1677 0xf00c, /* 000 0 11 */
1678 0x1f0b, /* 000 00 */
1680 0xf10b, /* 000 01 */
1682 0x9c0b, /* 000 10 */
1684 0xc90b, /* 000 11 */
1686 0x5e0b, /* 000 01000 */
1687 0x5e0b, /* 000 0100 */
1688 0xab0b, /* 000 01 */
1689 0xab0b, /* 000 0100 */
1690 0xba0b, /* 000 01010 */
1691 0xba0b, /* 000 0101 */
1692 0xe50b, /* 000 01011 */
1693 0xe50b, /* 000 0101 */
1694 0x7d0b, /* 000 01100 */
1695 0x7d0b, /* 000 0110 */
1696 0xd70b, /* 000 01101 */
1698 0x4e0b, /* 000 01110 */
1700 0xe40b, /* 000 01111 */
1701 0xe40b, /* 000 0111 */
1703 0x8c0b, /* 000 1000 */
1704 0xc80b, /* 000 10 */
1706 0x3e0b, /* 000 1 0 */
1710 0xd60b, /* 000 10100 */
1711 0xd60b, /* 000 1010 */
1713 0xe30b, /* 000 1010 */
1714 0x9b0b, /* 000 10110 */
1715 0x9b0b, /* 000 1011 */
1717 0xb90b, /* 000 1011 */
1718 0x2e0b, /* 000 11000 */
1719 0x2e0b, /* 000 1100 */
1721 0xaa0b, /* 000 1100 */
1723 0xe20b, /* 000 1101 */
1725 0x1e0b, /* 000 1101 */
1727 0xe10b, /* 000 1110 */
1729 0xe00c, /* 000 111011 */
1731 0x5d0b, /* 000 1111 */
1733 0xd50b, /* 000 1111 */
1800 const uint16 huffTable_16[465] =
1834 0x1709, /* 0 0111 */
1835 0x7109, /* 0 10000 */
1836 0x7109, /* 0 1000 */
1837 0x700a, /* 0 10 0 */
1838 0x360a, /* 0 10 1 */
1839 0x630a, /* 0 1 00 */
1840 0x450a, /* 0 1 01 */
1841 0x540a, /* 0 1 10 */
1842 0x260a, /* 0 1 11 */
1843 0x6209, /* 0 10100 */
1844 0x6209, /* 0 1010 */
1847 0x6109, /* 0 10110 */
1848 0x6109, /* 0 1011 */
1849 0x060a, /* 0 101110 */
1852 0x5309, /* 0 1100 */
1853 0x350a, /* 0 11 0 */
1854 0x440a, /* 0 11 1 */
1855 0x2509, /* 0 11010 */
1856 0x2509, /* 0 1101 */
1857 0x5209, /* 0 11011 */
1858 0x5209, /* 0 1101 */
1864 0x1509, /* 0 1111 */
1865 0x0509, /* 0 11111 */
1866 0x0509, /* 0 1111 */
1892 0x1d0b, /* 00 10101 */
1893 0xc40c, /* 00 1011000 */
1894 0x6b0c, /* 00 1011 */
1895 0xc30c, /* 00 1011010 */
1896 0xa70c, /* 00 1011011 */
1897 0x2c0b, /* 00 101110 */
1898 0x2c0b, /* 00 10111 */
1899 0xc20c, /* 00 1011110 */
1900 0xb50c, /* 00 1011111 */
1901 0xc10c, /* 00 1100000 */
1902 0x0c0c, /* 00 1100 */
1903 0x4b0c, /* 00 110 0 */
1904 0xb40c, /* 00 110 1 */
1905 0x6a0c, /* 00 11 00 */
1906 0xa60c, /* 00 11 01 */
1907 0xb30b, /* 00 11 1 */
1909 0x5a0c, /* 00 1101000 */
1910 0xa50c, /* 00 1101 */
1911 0x2b0b, /* 00 110101 */
1912 0x2b0b, /* 00 11010 */
1913 0xb20b, /* 00 110110 */
1914 0xb20b, /* 00 11011 */
1915 0x1b0b, /* 00 110111 */
1916 0x1b0b, /* 00 11011 */
1917 0xb10b, /* 00 111000 */
1918 0xb10b, /* 00 11100 */
1919 0x0b0c, /* 00 111 0 */
1920 0xb00c, /* 00 111 1 */
1921 0x690c, /* 00 1110100 */
1922 0x960c, /* 00 1110101 */
1923 0x4a0c, /* 00 1110110 */
1924 0xa40c, /* 00 1110111 */
1925 0x780c, /* 00 1111000 */
1926 0x870c, /* 00 1111 */
1927 0xa30b, /* 00 111101 */
1928 0xa30b, /* 00 11110 */
1929 0x3a0c, /* 00 1111100 */
1930 0x590c, /* 00 1111101 */
1931 0x2a0b, /* 00 111111 */
1932 0x2a0b, /* 00 11111 */
1933 0x950c, /* 0 00000000 */
1935 0xa10b, /* 0 0000 */
1937 0x860c, /* 0 000 00 */
1938 0x770c, /* 0 000 01 */
1939 0x940b, /* 0 000 1 */
1941 0x490c, /* 0 00 000 */
1943 0x670b, /* 0 00 01 */
1944 0x670b, /* 0 00 0 */
1945 0xa20a, /* 0 00 1 */
1949 0x1a0a, /* 0 0 00 */
1953 0x0a0b, /* 0 0 010 */
1954 0x0a0b, /* 0 0 01 */
1955 0xa00b, /* 0 0 011 */
1956 0xa00b, /* 0 0 01 */
1957 0x390b, /* 0 0 100 */
1958 0x390b, /* 0 0 10 */
1959 0x930b, /* 0 0 101 */
1960 0x930b, /* 0 0 10 */
1961 0x580b, /* 0 0 110 */
1962 0x580b, /* 0 0 11 */
1963 0x850b, /* 0 0 111 */
1964 0x850b, /* 0 0 11 */
1973 0x760b, /* 0 0100 */
1975 0x090b, /* 0 0101 */
1985 0x900b, /* 0 1010 */
1987 0x480b, /* 0 1011 */
1989 0x840b, /* 0 1100 */
1991 0x750b, /* 0 1101 */
1993 0x380b, /* 0 1110 */
1995 0x830b, /* 0 1111 */
1997 0x660b, /* 0 0100000 */
1998 0x660b, /* 0 010000 */
1999 0x280b, /* 0 0100 */
2000 0x280b, /* 0 010000 */
2002 0x820a, /* 0 01000 */
2003 0x820a, /* 0 01000 */
2004 0x820a, /* 0 01000 */
2005 0x470b, /* 0 01 00 */
2006 0x470b, /* 0 01 0 */
2007 0x740b, /* 0 01 01 */
2008 0x740b, /* 0 01 0 */
2009 0x180a, /* 0 01 1 */
2013 0x810a, /* 0 010100 */
2014 0x810a, /* 0 01010 */
2015 0x810a, /* 0 01010 */
2016 0x810a, /* 0 01010 */
2017 0x800a, /* 0 010101 */
2018 0x800a, /* 0 01010 */
2019 0x800a, /* 0 01010 */
2020 0x800a, /* 0 01010 */
2021 0x080b, /* 0 0101100 */
2022 0x080b, /* 0 010110 */
2023 0x560b, /* 0 0101101 */
2024 0x560b, /* 0 010110 */
2025 0x370a, /* 0 010111 */
2026 0x370a, /* 0 01011 */
2027 0x370a, /* 0 01011 */
2028 0x370a, /* 0 01011 */
2029 0x730a, /* 0 011000 */
2030 0x730a, /* 0 01100 */
2031 0x730a, /* 0 01100 */
2032 0x730a, /* 0 01100 */
2033 0x650b, /* 0 011 0 */
2035 0x460b, /* 0 011 1 */
2037 0x270a, /* 0 011010 */
2038 0x270a, /* 0 01101 */
2039 0x270a, /* 0 01101 */
2040 0x270a, /* 0 01101 */
2041 0x720a, /* 0 011011 */
2042 0x720a, /* 0 01101 */
2043 0x720a, /* 0 01101 */
2044 0x720a, /* 0 01101 */
2045 0x640b, /* 0 0111000 */
2046 0x640b, /* 0 011100 */
2047 0x550b, /* 0 0111 */
2048 0x550b, /* 0 011100 */
2049 0x070a, /* 0 011101 */
2050 0x070a, /* 0 01110 */
2051 0x070a, /* 0 01110 */
2052 0x070a, /* 0 01110 */
2054 0x9e0d, /* 00 0110000 */
2055 0xbc0e, /* 00 01100 0 */
2056 0xcb0e, /* 00 01100 1 */
2057 0x8e0e, /* 00 0110 00 */
2058 0xe80e, /* 00 0110 01 */
2059 0x9d0e, /* 00 0110 10 */
2060 0xe70e, /* 00 0110 11 */
2061 0xbb0e, /* 00 011 000 */
2062 0x8d0e, /* 00 011 */
2063 0xd80e, /* 00 011 010 */
2064 0x6e0e, /* 00 011 011 */
2065 0xe60d, /* 00 011 10 */
2066 0xe60d, /* 00 011 1 */
2067 0x9c0d, /* 00 011 11 */
2068 0x9c0d, /* 00 011 1 */
2069 0xab0e, /* 00 011010000 */
2070 0xba0e, /* 00 011010 */
2071 0xe50e, /* 00 01101 0 */
2072 0xd70e, /* 00 01101 1 */
2073 0x4e0d, /* 00 01101010 */
2074 0x4e0d, /* 00 0110101 */
2075 0xe40e, /* 00 011010110 */
2076 0x8c0e, /* 00 011010111 */
2077 0xc80d, /* 00 01101100 */
2078 0xc80d, /* 00 0110110 */
2079 0x3e0d, /* 00 01101101 */
2080 0x3e0d, /* 00 0110110 */
2081 0x6d0d, /* 00 01101110 */
2082 0x6d0d, /* 00 0110111 */
2083 0xd60e, /* 00 011011110 */
2084 0x9b0e, /* 00 011011111 */
2085 0xb90e, /* 00 011100000 */
2086 0xaa0e, /* 00 011100 */
2087 0xe10d, /* 00 01110 */
2088 0xe10d, /* 00 0111000 */
2089 0xd40d, /* 00 0111 0 */
2090 0xd40d, /* 00 0111 */
2091 0xb80e, /* 00 0111 10 */
2092 0xa90e, /* 00 0111 11 */
2093 0x7b0d, /* 00 01110100 */
2094 0x7b0d, /* 00 0111010 */
2095 0xb70e, /* 00 011101010 */
2096 0xd00e, /* 00 011101011 */
2097 0xe30c, /* 00 0111011 */
2098 0xe30c, /* 00 011101 */
2099 0xe30c, /* 00 011101 */
2100 0xe30c, /* 00 011101 */
2101 0x0e0d, /* 00 01111000 */
2102 0x0e0d, /* 00 0111100 */
2103 0xe00d, /* 00 01111 */
2104 0xe00d, /* 00 0111100 */
2105 0x5d0d, /* 00 01111010 */
2106 0x5d0d, /* 00 0111101 */
2107 0xd50d, /* 00 01111011 */
2108 0xd50d, /* 00 0111101 */
2109 0x7c0d, /* 00 01111100 */
2110 0x7c0d, /* 00 0111110 */
2111 0xc70d, /* 00 01111101 */
2112 0xc70d, /* 00 0111110 */
2113 0x4d0d, /* 00 01111110 */
2114 0x4d0d, /* 00 0111111 */
2115 0x8b0d, /* 00 01111111 */
2116 0x8b0d, /* 00 0111111 */
2118 0x6c0d, /* 00 10000 */
2119 0xc60d, /* 00 1000 0 */
2120 0x3d0d, /* 00 1000 1 */
2121 0x5c0d, /* 00 100 00 */
2122 0xc50d, /* 00 100 01 */
2123 0x0d0c, /* 00 100 1 */
2124 0x0d0c, /* 00 100 */
2125 0x8a0d, /* 00 10 000 */
2127 0x990d, /* 00 10 010 */
2128 0x4c0d, /* 00 10 011 */
2129 0xb60d, /* 00 10 100 */
2130 0x7a0d, /* 00 10 101 */
2131 0x3c0c, /* 00 10 11 */
2132 0x3c0c, /* 00 10 1 */
2133 0x5b0d, /* 00 1 0000 */
2134 0x890d, /* 00 1 0 */
2136 0x1c0c, /* 00 1 00 */
2137 0xc00c, /* 00 1 010 */
2138 0xc00c, /* 00 1 01 */
2139 0x980d, /* 00 1 0110 */
2140 0x790d, /* 00 1 0111 */
2141 0xe20b, /* 00 1 10 */
2142 0xe20b, /* 00 1 1 */
2143 0xe20b, /* 00 1 1 */
2144 0xe20b, /* 00 1 1 */
2145 0x2e0c, /* 00 1 110 */
2146 0x2e0c, /* 00 1 11 */
2147 0x1e0c, /* 00 1 111 */
2148 0x1e0c, /* 00 1 11 */
2149 0xd30c, /* 00 1010000 */
2150 0xd30c, /* 00 101000 */
2151 0x2d0c, /* 00 1010 */
2152 0x2d0c, /* 00 101000 */
2153 0xd20c, /* 00 101 0 */
2154 0xd20c, /* 00 101 */
2155 0xd10c, /* 00 101 1 */
2156 0xd10c, /* 00 101 */
2157 0x3b0c, /* 00 1010100 */
2158 0x3b0c, /* 00 101010 */
2159 0x970d, /* 00 10101010 */
2160 0x880d, /* 00 10101011 */
2163 0x2f09, /* 00 0000 */
2167 0xf108, /* 00 010 */
2170 0xce10, /* 000 101100000 */
2171 0xec11, /* 000 1011000 0 */
2172 0xdd11, /* 000 1011000 1 */
2173 0xde0f, /* 000 101100 */
2174 0xde0f, /* 000 10110000 */
2175 0xde0f, /* 000 10110000 */
2176 0xde0f, /* 000 10110000 */
2177 0xe90f, /* 000 10110 0 */
2178 0xe90f, /* 000 10110 */
2179 0xe90f, /* 000 10110 */
2180 0xe90f, /* 000 10110 */
2181 0xea10, /* 000 10110 10 */
2182 0xea10, /* 000 10110 1 */
2183 0xd910, /* 000 10110 11 */
2184 0xd910, /* 000 10110 1 */
2186 0xee0e, /* 000 1011 */
2187 0xed0f, /* 000 1011 10 */
2188 0xeb0f, /* 000 1011 11 */
2189 0xbe0e, /* 000 10110100 */
2190 0xbe0e, /* 000 1011010 */
2191 0xcd0e, /* 000 10110101 */
2192 0xcd0e, /* 000 1011010 */
2193 0xdc0f, /* 000 101101100 */
2194 0xdb0f, /* 000 101101101 */
2195 0xae0e, /* 000 10110111 */
2196 0xae0e, /* 000 1011011 */
2197 0xcc0e, /* 000 10111000 */
2198 0xcc0e, /* 000 1011100 */
2199 0xad0f, /* 000 10111 0 */
2200 0xda0f, /* 000 10111 1 */
2201 0x7e0f, /* 000 101110100 */
2202 0xac0f, /* 000 101110101 */
2203 0xca0e, /* 000 10111011 */
2204 0xca0e, /* 000 1011101 */
2205 0xc90f, /* 000 101111000 */
2206 0x7d0f, /* 000 101111 */
2207 0x5e0e, /* 000 10111101 */
2208 0x5e0e, /* 000 1011110 */
2209 0xbd0d, /* 000 1011111 */
2210 0xbd0d, /* 000 101111 */
2211 0xbd0d, /* 000 101111 */
2212 0xbd0d, /* 000 101111 */
2214 0xfe0b, /* 00000000 */
2215 0xdf0b, /* 0000000 0 */
2216 0xfd0b, /* 0000000 1 */
2229 0x7f0a, /* 0000 000 */
2230 0x7f0a, /* 0000 00 */
2232 0xf70a, /* 0000 00 */
2233 0x6f0a, /* 0000 010 */
2234 0x6f0a, /* 0000 01 */
2235 0xf60a, /* 0000 011 */
2236 0xf60a, /* 0000 01 */
2237 0xff08, /* 0000 1 */
2245 0x5f0a, /* 000 0000 */
2246 0x5f0a, /* 000 000 */
2248 0xf50a, /* 000 000 */
2250 0x4f09, /* 000 00 */
2251 0x4f09, /* 000 00 */
2252 0x4f09, /* 000 00 */
2253 0xf409, /* 000 010 */
2254 0xf409, /* 000 01 */
2255 0xf409, /* 000 01 */
2256 0xf409, /* 000 01 */
2257 0xf309, /* 000 011 */
2258 0xf309, /* 000 01 */
2259 0xf309, /* 000 01 */
2260 0xf309, /* 000 01 */
2261 0xf009, /* 000 100 */
2262 0xf009, /* 000 10 */
2263 0xf009, /* 000 10 */
2264 0xf009, /* 000 10 */
2271 const uint16 huffTable_24[478] =
2279 0x0206, /* 101110 */
2280 0x2006, /* 101111 */
2303 0x4608, /* 01110000 */
2304 0x4608, /* 0111000 */
2306 0x6408, /* 0111000 */
2307 0x5508, /* 0111 0 */
2309 0x7108, /* 0111 1 */
2311 0x3608, /* 01110100 */
2312 0x3608, /* 0111010 */
2313 0x6308, /* 01110101 */
2314 0x6308, /* 0111010 */
2315 0x4508, /* 01110110 */
2316 0x4508, /* 0111011 */
2317 0x5408, /* 01110111 */
2318 0x5408, /* 0111011 */
2319 0x2608, /* 01111000 */
2320 0x2608, /* 0111100 */
2322 0x6208, /* 0111100 */
2323 0x1608, /* 01111010 */
2324 0x1608, /* 0111101 */
2325 0x6108, /* 01111011 */
2326 0x6108, /* 0111101 */
2327 0x0609, /* 011111000 */
2328 0x6009, /* 011111 */
2329 0x3508, /* 01111101 */
2330 0x3508, /* 0111110 */
2331 0x5308, /* 01111110 */
2332 0x5308, /* 0111111 */
2333 0x4408, /* 01111111 */
2334 0x4408, /* 0111111 */
2335 0x2508, /* 10000000 */
2336 0x2508, /* 1000000 */
2338 0x5208, /* 1000000 */
2339 0x1508, /* 1000 0 */
2341 0x0509, /* 1000 10 */
2342 0x5009, /* 1000 11 */
2347 0x3408, /* 100 10 */
2349 0x4308, /* 100 11 */
2399 0x0307, /* 1010000 */
2400 0x0307, /* 101000 */
2401 0x0307, /* 101000 */
2402 0x0307, /* 101000 */
2404 0x3007, /* 101000 */
2405 0x3007, /* 101000 */
2406 0x3007, /* 101000 */
2409 0x8809, /* 010101 */
2410 0x8809, /* 01010100 */
2411 0x2b0a, /* 0101010100 */
2412 0x5a0a, /* 0101010101 */
2413 0xb209, /* 010101011 */
2414 0xb209, /* 01010101 */
2415 0xa50a, /* 0101011000 */
2416 0x1b0a, /* 0101011 */
2417 0xb10a, /* 0101011010 */
2418 0x690a, /* 0101011011 */
2419 0x9609, /* 010101110 */
2420 0x9609, /* 01010111 */
2421 0xa409, /* 010101111 */
2422 0xa409, /* 01010111 */
2423 0x4a0a, /* 0101100000 */
2424 0x780a, /* 0101100 */
2425 0x8709, /* 010110 */
2426 0x8709, /* 01011000 */
2427 0x3a09, /* 01011 0 */
2429 0xa309, /* 01011 1 */
2431 0x5909, /* 010110100 */
2432 0x5909, /* 01011010 */
2433 0x9509, /* 010110101 */
2434 0x9509, /* 01011010 */
2435 0x2a09, /* 010110110 */
2436 0x2a09, /* 01011011 */
2437 0xa209, /* 010110111 */
2438 0xa209, /* 01011011 */
2439 0xa109, /* 010111000 */
2440 0xa109, /* 01011100 */
2441 0x6809, /* 010111 */
2442 0x6809, /* 01011100 */
2443 0x8609, /* 010111010 */
2444 0x8609, /* 01011101 */
2445 0x7709, /* 010111011 */
2446 0x7709, /* 01011101 */
2447 0x4909, /* 010111100 */
2448 0x4909, /* 01011110 */
2449 0x9409, /* 010111101 */
2450 0x9409, /* 01011110 */
2451 0x3909, /* 010111110 */
2452 0x3909, /* 01011111 */
2453 0x9309, /* 010111111 */
2454 0x9309, /* 01011111 */
2455 0x5809, /* 011000000 */
2456 0x5809, /* 01100000 */
2457 0x8509, /* 011000 */
2458 0x8509, /* 01100000 */
2459 0x2909, /* 01100 0 */
2461 0x6709, /* 01100 1 */
2463 0x7609, /* 0110 00 */
2464 0x7609, /* 0110 0 */
2465 0x9209, /* 0110 01 */
2466 0x9209, /* 0110 0 */
2467 0x1909, /* 0110 10 */
2468 0x1909, /* 0110 1 */
2469 0x9109, /* 0110 11 */
2470 0x9109, /* 0110 1 */
2471 0x4809, /* 011 000 */
2472 0x4809, /* 011 00 */
2474 0x8409, /* 011 00 */
2475 0x5709, /* 011 010 */
2476 0x5709, /* 011 01 */
2477 0x7509, /* 011 011 */
2478 0x7509, /* 011 01 */
2479 0x3809, /* 011 100 */
2480 0x3809, /* 011 10 */
2481 0x8309, /* 011 101 */
2482 0x8309, /* 011 10 */
2483 0x6609, /* 011 110 */
2484 0x6609, /* 011 11 */
2485 0x2809, /* 011 111 */
2486 0x2809, /* 011 11 */
2487 0x8209, /* 011010000 */
2488 0x8209, /* 01101000 */
2489 0x1809, /* 011010 */
2490 0x1809, /* 01101000 */
2491 0x4709, /* 01101 0 */
2493 0x7409, /* 01101 1 */
2495 0x8109, /* 011010100 */
2496 0x8109, /* 01101010 */
2497 0x080a, /* 0110101010 */
2498 0x800a, /* 0110101011 */
2499 0x5609, /* 011010110 */
2500 0x5609, /* 01101011 */
2501 0x6509, /* 011010111 */
2502 0x6509, /* 01101011 */
2503 0x1709, /* 011011000 */
2504 0x1709, /* 01101100 */
2505 0x070a, /* 011011 0 */
2506 0x700a, /* 011011 1 */
2509 0xc90a, /* 01000 01 */
2510 0xc90a, /* 01000 0 */
2511 0x5e0a, /* 01000 10 */
2512 0x5e0a, /* 01000 1 */
2513 0xba0a, /* 01000 11 */
2514 0xba0a, /* 01000 1 */
2515 0xe50a, /* 0100 000 */
2516 0xe50a, /* 0100 00 */
2517 0xab0b, /* 0100 0 */
2518 0x7d0b, /* 0100 1 */
2519 0xd70a, /* 0100 010 */
2520 0xd70a, /* 0100 01 */
2521 0xe40a, /* 0100 011 */
2522 0xe40a, /* 0100 01 */
2523 0x8c0a, /* 0100 100 */
2527 0x4e0b, /* 0100 1100 */
2528 0x2e0b, /* 0100 1101 */
2529 0x3e0a, /* 0100 111 */
2530 0x3e0a, /* 0100 11 */
2531 0x6d0a, /* 010 0000 */
2532 0x6d0a, /* 010 000 */
2534 0xd60a, /* 010 000 */
2539 0xb90a, /* 010 0100 */
2540 0xb90a, /* 010 010 */
2541 0xaa0a, /* 010 0101 */
2567 0xa90a, /* 01 0 0 */
2569 0x6c0a, /* 01 0 1 */
2582 0x1d0a, /* 01 0100 */
2583 0x7b0a, /* 01 01010 */
2584 0x7b0a, /* 01 0101 */
2585 0xb70a, /* 01 01011 */
2588 0xd10a, /* 01 0110 */
2589 0x5c0a, /* 01 01101 */
2590 0x5c0a, /* 01 0110 */
2591 0xc50a, /* 01 01110 */
2592 0xc50a, /* 01 0111 */
2593 0x8a0a, /* 01 01111 */
2594 0x8a0a, /* 01 0111 */
2595 0xa80a, /* 01 10000 */
2596 0xa80a, /* 01 1000 */
2598 0x990a, /* 01 1000 */
2599 0x4c0a, /* 01 1 0 */
2601 0xc40a, /* 01 1 1 */
2603 0x6b0a, /* 01 10100 */
2604 0x6b0a, /* 01 1010 */
2605 0xb60a, /* 01 10101 */
2606 0xb60a, /* 01 1010 */
2607 0xd00b, /* 01 101100 */
2608 0x0c0b, /* 01 101101 */
2609 0x3c0a, /* 01 10111 */
2610 0x3c0a, /* 01 1011 */
2611 0xc30a, /* 01 11000 */
2612 0xc30a, /* 01 1100 */
2614 0x7a0a, /* 01 1100 */
2615 0xa70a, /* 01 11010 */
2616 0xa70a, /* 01 1101 */
2617 0x2c0a, /* 01 11011 */
2618 0x2c0a, /* 01 1101 */
2619 0xc20a, /* 01 11100 */
2620 0xc20a, /* 01 1110 */
2621 0x5b0a, /* 01 11101 */
2622 0x5b0a, /* 01 1110 */
2623 0xb50a, /* 01 11110 */
2624 0xb50a, /* 01 1111 */
2631 0xc10a, /* 010100 0 */
2632 0xc10a, /* 010100 */
2633 0x4b0a, /* 010100 1 */
2634 0x4b0a, /* 010100 */
2635 0xc00b, /* 01010 000 */
2637 0x3b0a, /* 01010 01 */
2638 0x3b0a, /* 01010 0 */
2639 0xb00b, /* 01010 100 */
2640 0x0a0b, /* 01010 101 */
2641 0x1a0a, /* 01010 11 */
2642 0x1a0a, /* 01010 1 */
2643 0xb409, /* 0101 00 */
2644 0xb409, /* 0101 0 */
2645 0xb409, /* 0101 0 */
2646 0xb409, /* 0101 0 */
2647 0x6a0a, /* 0101 010 */
2648 0x6a0a, /* 0101 01 */
2649 0xa60a, /* 0101 011 */
2650 0xa60a, /* 0101 01 */
2651 0x790a, /* 0101 100 */
2652 0x790a, /* 0101 10 */
2653 0x970a, /* 0101 101 */
2654 0x970a, /* 0101 10 */
2655 0xa00b, /* 0101 1100 */
2656 0x090b, /* 0101 1101 */
2657 0x900a, /* 0101 111 */
2658 0x900a, /* 0101 11 */
2664 0x8d0b, /* 0100000 */
2665 0xd80b, /* 0100000 1 */
2666 0xd80b, /* 0100000 */
2667 0x0e0c, /* 010000 000 */
2668 0xe00c, /* 010000 */
2669 0x0d0b, /* 010000 01 */
2670 0x0d0b, /* 010000 0 */
2671 0xe60a, /* 010000 1 */
2672 0xe60a, /* 010000 */
2673 0xe60a, /* 010000 */
2674 0xe60a, /* 010000 */
2675 0x0f09, /* 011000 401 */
2679 0xee0b, /* 011 00 */
2680 0xde0b, /* 011 01 */
2681 0xed0b, /* 011 10 */
2682 0xce0b, /* 011 11 */
2683 0xec0b, /* 01101000 */
2685 0xbe0b, /* 01101010 */
2686 0xeb0b, /* 01101011 */
2687 0xcd0b, /* 01101100 */
2688 0xdc0b, /* 01101101 */
2689 0xae0b, /* 01101110 */
2690 0xea0b, /* 01101111 */
2691 0xbd0b, /* 01110000 */
2693 0xcc0b, /* 0111 0 */
2694 0x9e0b, /* 0111 1 */
2695 0xe90b, /* 01110100 */
2696 0xad0b, /* 01110101 */
2697 0xda0b, /* 01110110 */
2698 0xbc0b, /* 01110111 */
2699 0xcb0b, /* 01111000 */
2710 0xdf08, /* 0000 0 */
2711 0xfd08, /* 0000 1 */
2712 0xcf08, /* 000 00 */
2713 0xfc08, /* 000 01 */
2714 0xbf08, /* 000 10 */
2715 0xfb08, /* 000 11 */
2718 0xaf08, /* 00 010 */
2719 0x9f08, /* 00 011 */
2756 const uint16 huffTable_32[33] =
2797 * MM = 512; z = [0:(MM)]; a = z.^(1/3);
2800 const int32 power_one_third[513] =
2803 0x00000000, 0x08000000, 0x0A14517D, 0x0B89BA25,
2804 0x0CB2FF53, 0x0DAE07DE, 0x0E897685, 0x0F4DAEDD,
2805 0x10000000, 0x10A402FD, 0x113C4841, 0x11CAB613,
2806 0x1250BFE2, 0x12CF8890, 0x1347F8AB, 0x13BACD65,
2807 0x1428A2FA, 0x1491FC15, 0x14F74744, 0x1558E2F7,
2808 0x15B72095, 0x161246D7, 0x166A9399, 0x16C03D55,
2809 0x17137449, 0x17646369, 0x17B33124, 0x18000000,
2810 0x184AEF29, 0x18941AD8, 0x18DB9CB7, 0x19218C2E,
2811 0x1965FEA5, 0x19A907C2, 0x19EAB998, 0x1A2B24D0,
2812 0x1A6A58D5, 0x1AA863EE, 0x1AE5535D, 0x1B213377,
2813 0x1B5C0FBD, 0x1B95F2EC, 0x1BCEE70F, 0x1C06F590,
2814 0x1C3E2745, 0x1C74847A, 0x1CAA1501, 0x1CDEE035,
2815 0x1D12ED0B, 0x1D464212, 0x1D78E582, 0x1DAADD3A,
2816 0x1DDC2ECF, 0x1E0CDF8C, 0x1E3CF476, 0x1E6C7257,
2817 0x1E9B5DBA, 0x1EC9BAF6, 0x1EF78E2C, 0x1F24DB4E,
2818 0x1F51A620, 0x1F7DF23C, 0x1FA9C314, 0x1FD51BF2,
2819 0x20000000, 0x202A7244, 0x205475A6, 0x207E0CEE,
2820 0x20A73ACA, 0x20D001CC, 0x20F8646D, 0x2120650E,
2821 0x214805FA, 0x216F4963, 0x2196316C, 0x21BCC020,
2822 0x21E2F77A, 0x2208D961, 0x222E67AD, 0x2253A425,
2823 0x22789082, 0x229D2E6E, 0x22C17F82, 0x22E5854F,
2824 0x23094155, 0x232CB509, 0x234FE1D5, 0x2372C918,
2825 0x23956C26, 0x23B7CC47, 0x23D9EABB, 0x23FBC8B9,
2826 0x241D676E, 0x243EC7FF, 0x245FEB86, 0x2480D319,
2827 0x24A17FC3, 0x24C1F28B, 0x24E22C6C, 0x25022E5F,
2828 0x2521F954, 0x25418E33, 0x2560EDE2, 0x2580193E,
2829 0x259F111F, 0x25BDD657, 0x25DC69B4, 0x25FACBFE,
2830 0x2618FDF8, 0x26370060, 0x2654D3EF, 0x2672795C,
2831 0x268FF156, 0x26AD3C8A, 0x26CA5BA2, 0x26E74F41,
2832 0x27041808, 0x2720B695, 0x273D2B81, 0x27597762,
2833 0x27759ACB, 0x2791964B, 0x27AD6A6F, 0x27C917C0,
2834 0x27E49EC5, 0x28000000, 0x281B3BF3, 0x2836531B,
2835 0x285145F3, 0x286C14F5, 0x2886C096, 0x28A1494B,
2836 0x28BBAF85, 0x28D5F3B3, 0x28F01641, 0x290A179B,
2837 0x2923F82A, 0x293DB854, 0x2957587E, 0x2970D90A,
2838 0x298A3A59, 0x29A37CCA, 0x29BCA0BB, 0x29D5A687,
2839 0x29EE8E87, 0x2A075914, 0x2A200684, 0x2A38972C,
2840 0x2A510B5F, 0x2A696370, 0x2A819FAE, 0x2A99C069,
2841 0x2AB1C5ED, 0x2AC9B088, 0x2AE18085, 0x2AF9362C,
2842 0x2B10D1C6, 0x2B28539B, 0x2B3FBBEF, 0x2B570B09,
2843 0x2B6E412B, 0x2B855E97, 0x2B9C6390, 0x2BB35056,
2844 0x2BCA2527, 0x2BE0E242, 0x2BF787E4, 0x2C0E1649,
2845 0x2C248DAD, 0x2C3AEE4A, 0x2C513859, 0x2C676C13,
2846 0x2C7D89AF, 0x2C939164, 0x2CA98368, 0x2CBF5FF1,
2847 0x2CD52731, 0x2CEAD95E, 0x2D0076A9, 0x2D15FF45,
2848 0x2D2B7363, 0x2D40D332, 0x2D561EE4, 0x2D6B56A7,
2849 0x2D807AAA, 0x2D958B19, 0x2DAA8823, 0x2DBF71F4,
2850 0x2DD448B7, 0x2DE90C98, 0x2DFDBDC0, 0x2E125C5C,
2851 0x2E26E892, 0x2E3B628D, 0x2E4FCA75, 0x2E642070,
2852 0x2E7864A8, 0x2E8C9741, 0x2EA0B862, 0x2EB4C831,
2853 0x2EC8C6D3, 0x2EDCB46C, 0x2EF09121, 0x2F045D14,
2854 0x2F18186A, 0x2F2BC345, 0x2F3F5DC7, 0x2F52E812,
2855 0x2F666247, 0x2F79CC88, 0x2F8D26F4, 0x2FA071AC,
2856 0x2FB3ACD0, 0x2FC6D87F, 0x2FD9F4D7, 0x2FED01F8,
2857 0x30000000, 0x3012EF0C, 0x3025CF39, 0x3038A0A6,
2858 0x304B636D, 0x305E17AD, 0x3070BD81, 0x30835504,
2859 0x3095DE51, 0x30A85985, 0x30BAC6B9, 0x30CD2609,
2860 0x30DF778D, 0x30F1BB60, 0x3103F19C, 0x31161A59,
2861 0x312835B0, 0x313A43BA, 0x314C4490, 0x315E3849,
2862 0x31701EFD, 0x3181F8C4, 0x3193C5B4, 0x31A585E6,
2863 0x31B7396F, 0x31C8E066, 0x31DA7AE1, 0x31EC08F6,
2864 0x31FD8ABC, 0x320F0047, 0x322069AC, 0x3231C702,
2865 0x3243185C, 0x32545DCF, 0x32659770, 0x3276C552,
2866 0x3287E78A, 0x3298FE2C, 0x32AA094A, 0x32BB08F9,
2867 0x32CBFD4A, 0x32DCE652, 0x32EDC423, 0x32FE96D0,
2868 0x330F5E6A, 0x33201B04, 0x3330CCB0, 0x33417380,
2869 0x33520F85, 0x3362A0D0, 0x33732774, 0x3383A380,
2870 0x33941506, 0x33A47C17, 0x33B4D8C4, 0x33C52B1B,
2871 0x33D5732F, 0x33E5B10F, 0x33F5E4CA, 0x34060E71,
2872 0x34162E14, 0x342643C1, 0x34364F88, 0x34465178,
2873 0x345649A1, 0x34663810, 0x34761CD6, 0x3485F800,
2874 0x3495C99D, 0x34A591BB, 0x34B55069, 0x34C505B4,
2875 0x34D4B1AB, 0x34E4545B, 0x34F3EDD2, 0x35037E1D,
2876 0x3513054B, 0x35228367, 0x3531F881, 0x354164A3,
2877 0x3550C7DC, 0x35602239, 0x356F73C5, 0x357EBC8E,
2878 0x358DFCA0, 0x359D3408, 0x35AC62D1, 0x35BB8908,
2879 0x35CAA6B9, 0x35D9BBF0, 0x35E8C8B9, 0x35F7CD20,
2880 0x3606C92F, 0x3615BCF3, 0x3624A878, 0x36338BC8,
2881 0x364266EE, 0x365139F6, 0x366004EC, 0x366EC7D9,
2882 0x367D82C9, 0x368C35C6, 0x369AE0DC, 0x36A98414,
2883 0x36B81F7A, 0x36C6B317, 0x36D53EF7, 0x36E3C323,
2884 0x36F23FA5, 0x3700B488, 0x370F21D5, 0x371D8797,
2885 0x372BE5D7, 0x373A3CA0, 0x37488BF9, 0x3756D3EF,
2886 0x37651489, 0x37734DD1, 0x37817FD1, 0x378FAA92,
2887 0x379DCE1D, 0x37ABEA7C, 0x37B9FFB7, 0x37C80DD7,
2888 0x37D614E6, 0x37E414EC, 0x37F20DF1, 0x38000000,
2889 0x380DEB20, 0x381BCF5A, 0x3829ACB6, 0x3837833D,
2890 0x384552F8, 0x38531BEE, 0x3860DE28, 0x386E99AF,
2891 0x387C4E89, 0x3889FCC0, 0x3897A45B, 0x38A54563,
2892 0x38B2DFDF, 0x38C073D7, 0x38CE0152, 0x38DB885A,
2893 0x38E908F4, 0x38F68329, 0x3903F701, 0x39116483,
2894 0x391ECBB6, 0x392C2CA1, 0x3939874D, 0x3946DBC0,
2895 0x39542A01, 0x39617218, 0x396EB40C, 0x397BEFE4,
2896 0x398925A7, 0x3996555C, 0x39A37F09, 0x39B0A2B7,
2897 0x39BDC06A, 0x39CAD82B, 0x39D7EA01, 0x39E4F5F0,
2898 0x39F1FC01, 0x39FEFC3A, 0x3A0BF6A2, 0x3A18EB3E,
2899 0x3A25DA16, 0x3A32C32F, 0x3A3FA691, 0x3A4C8441,
2900 0x3A595C46, 0x3A662EA6, 0x3A72FB67, 0x3A7FC28F,
2901 0x3A8C8425, 0x3A99402E, 0x3AA5F6B1, 0x3AB2A7B3,
2902 0x3ABF533A, 0x3ACBF94D, 0x3AD899F1, 0x3AE5352C,
2903 0x3AF1CB03, 0x3AFE5B7D, 0x3B0AE6A0, 0x3B176C70,
2904 0x3B23ECF3, 0x3B306830, 0x3B3CDE2C, 0x3B494EEB,
2905 0x3B55BA74, 0x3B6220CC, 0x3B6E81F9, 0x3B7ADE00,
2906 0x3B8734E5, 0x3B9386B0, 0x3B9FD364, 0x3BAC1B07,
2907 0x3BB85D9E, 0x3BC49B2F, 0x3BD0D3BE, 0x3BDD0751,
2908 0x3BE935ED, 0x3BF55F97, 0x3C018453, 0x3C0DA427,
2909 0x3C19BF17, 0x3C25D52A, 0x3C31E662, 0x3C3DF2C6,
2910 0x3C49FA5B, 0x3C55FD24, 0x3C61FB27, 0x3C6DF468,
2911 0x3C79E8ED, 0x3C85D8B9, 0x3C91C3D2, 0x3C9DAA3C,
2912 0x3CA98BFC, 0x3CB56915, 0x3CC1418E, 0x3CCD156A,
2913 0x3CD8E4AE, 0x3CE4AF5E, 0x3CF0757F, 0x3CFC3714,
2914 0x3D07F423, 0x3D13ACB0, 0x3D1F60BF, 0x3D2B1055,
2915 0x3D36BB75, 0x3D426224, 0x3D4E0466, 0x3D59A23F,
2916 0x3D653BB4, 0x3D70D0C8, 0x3D7C6180, 0x3D87EDE0,
2917 0x3D9375EC, 0x3D9EF9A8, 0x3DAA7918, 0x3DB5F43F,
2918 0x3DC16B23, 0x3DCCDDC7, 0x3DD84C2E, 0x3DE3B65D,
2919 0x3DEF1C58, 0x3DFA7E22, 0x3E05DBC0, 0x3E113535,
2920 0x3E1C8A85, 0x3E27DBB3, 0x3E3328C4, 0x3E3E71BB,
2921 0x3E49B69C, 0x3E54F76B, 0x3E60342B, 0x3E6B6CE0,
2922 0x3E76A18D, 0x3E81D237, 0x3E8CFEE0, 0x3E98278D,
2923 0x3EA34C40, 0x3EAE6CFE, 0x3EB989CA, 0x3EC4A2A8,
2924 0x3ECFB79A, 0x3EDAC8A5, 0x3EE5D5CB, 0x3EF0DF10,
2925 0x3EFBE478, 0x3F06E606, 0x3F11E3BE, 0x3F1CDDA2,
2926 0x3F27D3B6, 0x3F32C5FD, 0x3F3DB47B, 0x3F489F32,
2927 0x3F538627, 0x3F5E695C, 0x3F6948D5, 0x3F742494,
2928 0x3F7EFC9D, 0x3F89D0F3, 0x3F94A19A, 0x3F9F6E94,
2929 0x3FAA37E4, 0x3FB4FD8E, 0x3FBFBF94, 0x3FCA7DFB,
2930 0x3FD538C4, 0x3FDFEFF3, 0x3FEAA38A, 0x3FF5538E,