summaryrefslogtreecommitdiff
path: root/core/multimedia/opieplayer/libmad
Unidiff
Diffstat (limited to 'core/multimedia/opieplayer/libmad') (more/less context) (ignore whitespace changes)
-rw-r--r--core/multimedia/opieplayer/libmad/.cvsignore2
-rw-r--r--core/multimedia/opieplayer/libmad/D.dat607
-rw-r--r--core/multimedia/opieplayer/libmad/Makefile.in226
-rw-r--r--core/multimedia/opieplayer/libmad/bit.c220
-rw-r--r--core/multimedia/opieplayer/libmad/bit.h47
-rw-r--r--core/multimedia/opieplayer/libmad/decoder.c554
-rw-r--r--core/multimedia/opieplayer/libmad/decoder.h87
-rwxr-xr-xcore/multimedia/opieplayer/libmad/fix_headers_problem25
-rw-r--r--core/multimedia/opieplayer/libmad/fixed.c37
-rw-r--r--core/multimedia/opieplayer/libmad/fixed.h413
-rw-r--r--core/multimedia/opieplayer/libmad/frame.c499
-rw-r--r--core/multimedia/opieplayer/libmad/frame.h115
-rw-r--r--core/multimedia/opieplayer/libmad/huffman.c3087
-rw-r--r--core/multimedia/opieplayer/libmad/huffman.h66
-rw-r--r--core/multimedia/opieplayer/libmad/imdct_l_arm.S1000
-rw-r--r--core/multimedia/opieplayer/libmad/imdct_s.dat62
-rw-r--r--core/multimedia/opieplayer/libmad/layer12.c496
-rw-r--r--core/multimedia/opieplayer/libmad/layer12.h31
-rw-r--r--core/multimedia/opieplayer/libmad/layer3.c2492
-rw-r--r--core/multimedia/opieplayer/libmad/layer3.h30
-rw-r--r--core/multimedia/opieplayer/libmad/libmad.pro12
-rw-r--r--core/multimedia/opieplayer/libmad/libmad_global.h45
-rw-r--r--core/multimedia/opieplayer/libmad/libmad_version.h47
-rw-r--r--core/multimedia/opieplayer/libmad/libmadplugin.cpp578
-rw-r--r--core/multimedia/opieplayer/libmad/libmadplugin.h101
-rw-r--r--core/multimedia/opieplayer/libmad/libmadpluginimpl.cpp70
-rw-r--r--core/multimedia/opieplayer/libmad/libmadpluginimpl.h53
-rw-r--r--core/multimedia/opieplayer/libmad/mad.h830
-rw-r--r--core/multimedia/opieplayer/libmad/qc_table.dat77
-rw-r--r--core/multimedia/opieplayer/libmad/qpe-libmadplugin.control9
-rw-r--r--core/multimedia/opieplayer/libmad/rq_table.dat8747
-rw-r--r--core/multimedia/opieplayer/libmad/sf_table.dat100
-rw-r--r--core/multimedia/opieplayer/libmad/stream.c123
-rw-r--r--core/multimedia/opieplayer/libmad/stream.h102
-rw-r--r--core/multimedia/opieplayer/libmad/synth.c855
-rw-r--r--core/multimedia/opieplayer/libmad/synth.h50
-rw-r--r--core/multimedia/opieplayer/libmad/timer.c480
-rw-r--r--core/multimedia/opieplayer/libmad/timer.h100
-rw-r--r--core/multimedia/opieplayer/libmad/version.c91
39 files changed, 22566 insertions, 0 deletions
diff --git a/core/multimedia/opieplayer/libmad/.cvsignore b/core/multimedia/opieplayer/libmad/.cvsignore
new file mode 100644
index 0000000..6fe2396
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/.cvsignore
@@ -0,0 +1,2 @@
1moc_*
2Makefile
diff --git a/core/multimedia/opieplayer/libmad/D.dat b/core/multimedia/opieplayer/libmad/D.dat
new file mode 100644
index 0000000..f33d30c
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/D.dat
@@ -0,0 +1,607 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22/*
23 * These are the coefficients for the subband synthesis window. This is a
24 * reordered version of Table B.3 from ISO/IEC 11172-3.
25 *
26 * Every value is parameterized so that shift optimizations can be made at
27 * compile-time. For example, every value can be right-shifted 12 bits to
28 * minimize multiply instruction times without any loss of accuracy.
29 */
30
31 { PRESHIFT(0x00000000) /* 0.000000000 */,/* 0 */
32 -PRESHIFT(0x0001d000) /* -0.000442505 */,
33 PRESHIFT(0x000d5000) /* 0.003250122 */,
34 -PRESHIFT(0x001cb000) /* -0.007003784 */,
35 PRESHIFT(0x007f5000) /* 0.031082153 */,
36 -PRESHIFT(0x01421000) /* -0.078628540 */,
37 PRESHIFT(0x019ae000) /* 0.100311279 */,
38 -PRESHIFT(0x09271000) /* -0.572036743 */,
39 PRESHIFT(0x1251e000) /* 1.144989014 */,
40 PRESHIFT(0x09271000) /* 0.572036743 */,
41 PRESHIFT(0x019ae000) /* 0.100311279 */,
42 PRESHIFT(0x01421000) /* 0.078628540 */,
43 PRESHIFT(0x007f5000) /* 0.031082153 */,
44 PRESHIFT(0x001cb000) /* 0.007003784 */,
45 PRESHIFT(0x000d5000) /* 0.003250122 */,
46 PRESHIFT(0x0001d000) /* 0.000442505 */,
47
48 PRESHIFT(0x00000000) /* 0.000000000 */,
49 -PRESHIFT(0x0001d000) /* -0.000442505 */,
50 PRESHIFT(0x000d5000) /* 0.003250122 */,
51 -PRESHIFT(0x001cb000) /* -0.007003784 */,
52 PRESHIFT(0x007f5000) /* 0.031082153 */,
53 -PRESHIFT(0x01421000) /* -0.078628540 */,
54 PRESHIFT(0x019ae000) /* 0.100311279 */,
55 -PRESHIFT(0x09271000) /* -0.572036743 */,
56 PRESHIFT(0x1251e000) /* 1.144989014 */,
57 PRESHIFT(0x09271000) /* 0.572036743 */,
58 PRESHIFT(0x019ae000) /* 0.100311279 */,
59 PRESHIFT(0x01421000) /* 0.078628540 */,
60 PRESHIFT(0x007f5000) /* 0.031082153 */,
61 PRESHIFT(0x001cb000) /* 0.007003784 */,
62 PRESHIFT(0x000d5000) /* 0.003250122 */,
63 PRESHIFT(0x0001d000) /* 0.000442505 */ },
64
65 { -PRESHIFT(0x00001000) /* -0.000015259 */,/* 1 */
66 -PRESHIFT(0x0001f000) /* -0.000473022 */,
67 PRESHIFT(0x000da000) /* 0.003326416 */,
68 -PRESHIFT(0x00207000) /* -0.007919312 */,
69 PRESHIFT(0x007d0000) /* 0.030517578 */,
70 -PRESHIFT(0x0158d000) /* -0.084182739 */,
71 PRESHIFT(0x01747000) /* 0.090927124 */,
72 -PRESHIFT(0x099a8000) /* -0.600219727 */,
73 PRESHIFT(0x124f0000) /* 1.144287109 */,
74 PRESHIFT(0x08b38000) /* 0.543823242 */,
75 PRESHIFT(0x01bde000) /* 0.108856201 */,
76 PRESHIFT(0x012b4000) /* 0.073059082 */,
77 PRESHIFT(0x0080f000) /* 0.031478882 */,
78 PRESHIFT(0x00191000) /* 0.006118774 */,
79 PRESHIFT(0x000d0000) /* 0.003173828 */,
80 PRESHIFT(0x0001a000) /* 0.000396729 */,
81
82 -PRESHIFT(0x00001000) /* -0.000015259 */,
83 -PRESHIFT(0x0001f000) /* -0.000473022 */,
84 PRESHIFT(0x000da000) /* 0.003326416 */,
85 -PRESHIFT(0x00207000) /* -0.007919312 */,
86 PRESHIFT(0x007d0000) /* 0.030517578 */,
87 -PRESHIFT(0x0158d000) /* -0.084182739 */,
88 PRESHIFT(0x01747000) /* 0.090927124 */,
89 -PRESHIFT(0x099a8000) /* -0.600219727 */,
90 PRESHIFT(0x124f0000) /* 1.144287109 */,
91 PRESHIFT(0x08b38000) /* 0.543823242 */,
92 PRESHIFT(0x01bde000) /* 0.108856201 */,
93 PRESHIFT(0x012b4000) /* 0.073059082 */,
94 PRESHIFT(0x0080f000) /* 0.031478882 */,
95 PRESHIFT(0x00191000) /* 0.006118774 */,
96 PRESHIFT(0x000d0000) /* 0.003173828 */,
97 PRESHIFT(0x0001a000) /* 0.000396729 */ },
98
99 { -PRESHIFT(0x00001000) /* -0.000015259 */,/* 2 */
100 -PRESHIFT(0x00023000) /* -0.000534058 */,
101 PRESHIFT(0x000de000) /* 0.003387451 */,
102 -PRESHIFT(0x00245000) /* -0.008865356 */,
103 PRESHIFT(0x007a0000) /* 0.029785156 */,
104 -PRESHIFT(0x016f7000) /* -0.089706421 */,
105 PRESHIFT(0x014a8000) /* 0.080688477 */,
106 -PRESHIFT(0x0a0d8000) /* -0.628295898 */,
107 PRESHIFT(0x12468000) /* 1.142211914 */,
108 PRESHIFT(0x083ff000) /* 0.515609741 */,
109 PRESHIFT(0x01dd8000) /* 0.116577148 */,
110 PRESHIFT(0x01149000) /* 0.067520142 */,
111 PRESHIFT(0x00820000) /* 0.031738281 */,
112 PRESHIFT(0x0015b000) /* 0.005294800 */,
113 PRESHIFT(0x000ca000) /* 0.003082275 */,
114 PRESHIFT(0x00018000) /* 0.000366211 */,
115
116 -PRESHIFT(0x00001000) /* -0.000015259 */,
117 -PRESHIFT(0x00023000) /* -0.000534058 */,
118 PRESHIFT(0x000de000) /* 0.003387451 */,
119 -PRESHIFT(0x00245000) /* -0.008865356 */,
120 PRESHIFT(0x007a0000) /* 0.029785156 */,
121 -PRESHIFT(0x016f7000) /* -0.089706421 */,
122 PRESHIFT(0x014a8000) /* 0.080688477 */,
123 -PRESHIFT(0x0a0d8000) /* -0.628295898 */,
124 PRESHIFT(0x12468000) /* 1.142211914 */,
125 PRESHIFT(0x083ff000) /* 0.515609741 */,
126 PRESHIFT(0x01dd8000) /* 0.116577148 */,
127 PRESHIFT(0x01149000) /* 0.067520142 */,
128 PRESHIFT(0x00820000) /* 0.031738281 */,
129 PRESHIFT(0x0015b000) /* 0.005294800 */,
130 PRESHIFT(0x000ca000) /* 0.003082275 */,
131 PRESHIFT(0x00018000) /* 0.000366211 */ },
132
133 { -PRESHIFT(0x00001000) /* -0.000015259 */,/* 3 */
134 -PRESHIFT(0x00026000) /* -0.000579834 */,
135 PRESHIFT(0x000e1000) /* 0.003433228 */,
136 -PRESHIFT(0x00285000) /* -0.009841919 */,
137 PRESHIFT(0x00765000) /* 0.028884888 */,
138 -PRESHIFT(0x0185d000) /* -0.095169067 */,
139 PRESHIFT(0x011d1000) /* 0.069595337 */,
140 -PRESHIFT(0x0a7fe000) /* -0.656219482 */,
141 PRESHIFT(0x12386000) /* 1.138763428 */,
142 PRESHIFT(0x07ccb000) /* 0.487472534 */,
143 PRESHIFT(0x01f9c000) /* 0.123474121 */,
144 PRESHIFT(0x00fdf000) /* 0.061996460 */,
145 PRESHIFT(0x00827000) /* 0.031845093 */,
146 PRESHIFT(0x00126000) /* 0.004486084 */,
147 PRESHIFT(0x000c4000) /* 0.002990723 */,
148 PRESHIFT(0x00015000) /* 0.000320435 */,
149
150 -PRESHIFT(0x00001000) /* -0.000015259 */,
151 -PRESHIFT(0x00026000) /* -0.000579834 */,
152 PRESHIFT(0x000e1000) /* 0.003433228 */,
153 -PRESHIFT(0x00285000) /* -0.009841919 */,
154 PRESHIFT(0x00765000) /* 0.028884888 */,
155 -PRESHIFT(0x0185d000) /* -0.095169067 */,
156 PRESHIFT(0x011d1000) /* 0.069595337 */,
157 -PRESHIFT(0x0a7fe000) /* -0.656219482 */,
158 PRESHIFT(0x12386000) /* 1.138763428 */,
159 PRESHIFT(0x07ccb000) /* 0.487472534 */,
160 PRESHIFT(0x01f9c000) /* 0.123474121 */,
161 PRESHIFT(0x00fdf000) /* 0.061996460 */,
162 PRESHIFT(0x00827000) /* 0.031845093 */,
163 PRESHIFT(0x00126000) /* 0.004486084 */,
164 PRESHIFT(0x000c4000) /* 0.002990723 */,
165 PRESHIFT(0x00015000) /* 0.000320435 */ },
166
167 { -PRESHIFT(0x00001000) /* -0.000015259 */,/* 4 */
168 -PRESHIFT(0x00029000) /* -0.000625610 */,
169 PRESHIFT(0x000e3000) /* 0.003463745 */,
170 -PRESHIFT(0x002c7000) /* -0.010848999 */,
171 PRESHIFT(0x0071e000) /* 0.027801514 */,
172 -PRESHIFT(0x019bd000) /* -0.100540161 */,
173 PRESHIFT(0x00ec0000) /* 0.057617187 */,
174 -PRESHIFT(0x0af15000) /* -0.683914185 */,
175 PRESHIFT(0x12249000) /* 1.133926392 */,
176 PRESHIFT(0x075a0000) /* 0.459472656 */,
177 PRESHIFT(0x0212c000) /* 0.129577637 */,
178 PRESHIFT(0x00e79000) /* 0.056533813 */,
179 PRESHIFT(0x00825000) /* 0.031814575 */,
180 PRESHIFT(0x000f4000) /* 0.003723145 */,
181 PRESHIFT(0x000be000) /* 0.002899170 */,
182 PRESHIFT(0x00013000) /* 0.000289917 */,
183
184 -PRESHIFT(0x00001000) /* -0.000015259 */,
185 -PRESHIFT(0x00029000) /* -0.000625610 */,
186 PRESHIFT(0x000e3000) /* 0.003463745 */,
187 -PRESHIFT(0x002c7000) /* -0.010848999 */,
188 PRESHIFT(0x0071e000) /* 0.027801514 */,
189 -PRESHIFT(0x019bd000) /* -0.100540161 */,
190 PRESHIFT(0x00ec0000) /* 0.057617187 */,
191 -PRESHIFT(0x0af15000) /* -0.683914185 */,
192 PRESHIFT(0x12249000) /* 1.133926392 */,
193 PRESHIFT(0x075a0000) /* 0.459472656 */,
194 PRESHIFT(0x0212c000) /* 0.129577637 */,
195 PRESHIFT(0x00e79000) /* 0.056533813 */,
196 PRESHIFT(0x00825000) /* 0.031814575 */,
197 PRESHIFT(0x000f4000) /* 0.003723145 */,
198 PRESHIFT(0x000be000) /* 0.002899170 */,
199 PRESHIFT(0x00013000) /* 0.000289917 */ },
200
201 { -PRESHIFT(0x00001000) /* -0.000015259 */,/* 5 */
202 -PRESHIFT(0x0002d000) /* -0.000686646 */,
203 PRESHIFT(0x000e4000) /* 0.003479004 */,
204 -PRESHIFT(0x0030b000) /* -0.011886597 */,
205 PRESHIFT(0x006cb000) /* 0.026535034 */,
206 -PRESHIFT(0x01b17000) /* -0.105819702 */,
207 PRESHIFT(0x00b77000) /* 0.044784546 */,
208 -PRESHIFT(0x0b619000) /* -0.711318970 */,
209 PRESHIFT(0x120b4000) /* 1.127746582 */,
210 PRESHIFT(0x06e81000) /* 0.431655884 */,
211 PRESHIFT(0x02288000) /* 0.134887695 */,
212 PRESHIFT(0x00d17000) /* 0.051132202 */,
213 PRESHIFT(0x0081b000) /* 0.031661987 */,
214 PRESHIFT(0x000c5000) /* 0.003005981 */,
215 PRESHIFT(0x000b7000) /* 0.002792358 */,
216 PRESHIFT(0x00011000) /* 0.000259399 */,
217
218 -PRESHIFT(0x00001000) /* -0.000015259 */,
219 -PRESHIFT(0x0002d000) /* -0.000686646 */,
220 PRESHIFT(0x000e4000) /* 0.003479004 */,
221 -PRESHIFT(0x0030b000) /* -0.011886597 */,
222 PRESHIFT(0x006cb000) /* 0.026535034 */,
223 -PRESHIFT(0x01b17000) /* -0.105819702 */,
224 PRESHIFT(0x00b77000) /* 0.044784546 */,
225 -PRESHIFT(0x0b619000) /* -0.711318970 */,
226 PRESHIFT(0x120b4000) /* 1.127746582 */,
227 PRESHIFT(0x06e81000) /* 0.431655884 */,
228 PRESHIFT(0x02288000) /* 0.134887695 */,
229 PRESHIFT(0x00d17000) /* 0.051132202 */,
230 PRESHIFT(0x0081b000) /* 0.031661987 */,
231 PRESHIFT(0x000c5000) /* 0.003005981 */,
232 PRESHIFT(0x000b7000) /* 0.002792358 */,
233 PRESHIFT(0x00011000) /* 0.000259399 */ },
234
235 { -PRESHIFT(0x00001000) /* -0.000015259 */,/* 6 */
236 -PRESHIFT(0x00031000) /* -0.000747681 */,
237 PRESHIFT(0x000e4000) /* 0.003479004 */,
238 -PRESHIFT(0x00350000) /* -0.012939453 */,
239 PRESHIFT(0x0066c000) /* 0.025085449 */,
240 -PRESHIFT(0x01c67000) /* -0.110946655 */,
241 PRESHIFT(0x007f5000) /* 0.031082153 */,
242 -PRESHIFT(0x0bd06000) /* -0.738372803 */,
243 PRESHIFT(0x11ec7000) /* 1.120223999 */,
244 PRESHIFT(0x06772000) /* 0.404083252 */,
245 PRESHIFT(0x023b3000) /* 0.139450073 */,
246 PRESHIFT(0x00bbc000) /* 0.045837402 */,
247 PRESHIFT(0x00809000) /* 0.031387329 */,
248 PRESHIFT(0x00099000) /* 0.002334595 */,
249 PRESHIFT(0x000b0000) /* 0.002685547 */,
250 PRESHIFT(0x00010000) /* 0.000244141 */,
251
252 -PRESHIFT(0x00001000) /* -0.000015259 */,
253 -PRESHIFT(0x00031000) /* -0.000747681 */,
254 PRESHIFT(0x000e4000) /* 0.003479004 */,
255 -PRESHIFT(0x00350000) /* -0.012939453 */,
256 PRESHIFT(0x0066c000) /* 0.025085449 */,
257 -PRESHIFT(0x01c67000) /* -0.110946655 */,
258 PRESHIFT(0x007f5000) /* 0.031082153 */,
259 -PRESHIFT(0x0bd06000) /* -0.738372803 */,
260 PRESHIFT(0x11ec7000) /* 1.120223999 */,
261 PRESHIFT(0x06772000) /* 0.404083252 */,
262 PRESHIFT(0x023b3000) /* 0.139450073 */,
263 PRESHIFT(0x00bbc000) /* 0.045837402 */,
264 PRESHIFT(0x00809000) /* 0.031387329 */,
265 PRESHIFT(0x00099000) /* 0.002334595 */,
266 PRESHIFT(0x000b0000) /* 0.002685547 */,
267 PRESHIFT(0x00010000) /* 0.000244141 */ },
268
269 { -PRESHIFT(0x00002000) /* -0.000030518 */,/* 7 */
270 -PRESHIFT(0x00035000) /* -0.000808716 */,
271 PRESHIFT(0x000e3000) /* 0.003463745 */,
272 -PRESHIFT(0x00397000) /* -0.014022827 */,
273 PRESHIFT(0x005ff000) /* 0.023422241 */,
274 -PRESHIFT(0x01dad000) /* -0.115921021 */,
275 PRESHIFT(0x0043a000) /* 0.016510010 */,
276 -PRESHIFT(0x0c3d9000) /* -0.765029907 */,
277 PRESHIFT(0x11c83000) /* 1.111373901 */,
278 PRESHIFT(0x06076000) /* 0.376800537 */,
279 PRESHIFT(0x024ad000) /* 0.143264771 */,
280 PRESHIFT(0x00a67000) /* 0.040634155 */,
281 PRESHIFT(0x007f0000) /* 0.031005859 */,
282 PRESHIFT(0x0006f000) /* 0.001693726 */,
283 PRESHIFT(0x000a9000) /* 0.002578735 */,
284 PRESHIFT(0x0000e000) /* 0.000213623 */,
285
286 -PRESHIFT(0x00002000) /* -0.000030518 */,
287 -PRESHIFT(0x00035000) /* -0.000808716 */,
288 PRESHIFT(0x000e3000) /* 0.003463745 */,
289 -PRESHIFT(0x00397000) /* -0.014022827 */,
290 PRESHIFT(0x005ff000) /* 0.023422241 */,
291 -PRESHIFT(0x01dad000) /* -0.115921021 */,
292 PRESHIFT(0x0043a000) /* 0.016510010 */,
293 -PRESHIFT(0x0c3d9000) /* -0.765029907 */,
294 PRESHIFT(0x11c83000) /* 1.111373901 */,
295 PRESHIFT(0x06076000) /* 0.376800537 */,
296 PRESHIFT(0x024ad000) /* 0.143264771 */,
297 PRESHIFT(0x00a67000) /* 0.040634155 */,
298 PRESHIFT(0x007f0000) /* 0.031005859 */,
299 PRESHIFT(0x0006f000) /* 0.001693726 */,
300 PRESHIFT(0x000a9000) /* 0.002578735 */,
301 PRESHIFT(0x0000e000) /* 0.000213623 */ },
302
303 { -PRESHIFT(0x00002000) /* -0.000030518 */,/* 8 */
304 -PRESHIFT(0x0003a000) /* -0.000885010 */,
305 PRESHIFT(0x000e0000) /* 0.003417969 */,
306 -PRESHIFT(0x003df000) /* -0.015121460 */,
307 PRESHIFT(0x00586000) /* 0.021575928 */,
308 -PRESHIFT(0x01ee6000) /* -0.120697021 */,
309 PRESHIFT(0x00046000) /* 0.001068115 */,
310 -PRESHIFT(0x0ca8d000) /* -0.791213989 */,
311 PRESHIFT(0x119e9000) /* 1.101211548 */,
312 PRESHIFT(0x05991000) /* 0.349868774 */,
313 PRESHIFT(0x02578000) /* 0.146362305 */,
314 PRESHIFT(0x0091a000) /* 0.035552979 */,
315 PRESHIFT(0x007d1000) /* 0.030532837 */,
316 PRESHIFT(0x00048000) /* 0.001098633 */,
317 PRESHIFT(0x000a1000) /* 0.002456665 */,
318 PRESHIFT(0x0000d000) /* 0.000198364 */,
319
320 -PRESHIFT(0x00002000) /* -0.000030518 */,
321 -PRESHIFT(0x0003a000) /* -0.000885010 */,
322 PRESHIFT(0x000e0000) /* 0.003417969 */,
323 -PRESHIFT(0x003df000) /* -0.015121460 */,
324 PRESHIFT(0x00586000) /* 0.021575928 */,
325 -PRESHIFT(0x01ee6000) /* -0.120697021 */,
326 PRESHIFT(0x00046000) /* 0.001068115 */,
327 -PRESHIFT(0x0ca8d000) /* -0.791213989 */,
328 PRESHIFT(0x119e9000) /* 1.101211548 */,
329 PRESHIFT(0x05991000) /* 0.349868774 */,
330 PRESHIFT(0x02578000) /* 0.146362305 */,
331 PRESHIFT(0x0091a000) /* 0.035552979 */,
332 PRESHIFT(0x007d1000) /* 0.030532837 */,
333 PRESHIFT(0x00048000) /* 0.001098633 */,
334 PRESHIFT(0x000a1000) /* 0.002456665 */,
335 PRESHIFT(0x0000d000) /* 0.000198364 */ },
336
337 { -PRESHIFT(0x00002000) /* -0.000030518 */,/* 9 */
338 -PRESHIFT(0x0003f000) /* -0.000961304 */,
339 PRESHIFT(0x000dd000) /* 0.003372192 */,
340 -PRESHIFT(0x00428000) /* -0.016235352 */,
341 PRESHIFT(0x00500000) /* 0.019531250 */,
342 -PRESHIFT(0x02011000) /* -0.125259399 */,
343 -PRESHIFT(0x003e6000) /* -0.015228271 */,
344 -PRESHIFT(0x0d11e000) /* -0.816864014 */,
345 PRESHIFT(0x116fc000) /* 1.089782715 */,
346 PRESHIFT(0x052c5000) /* 0.323318481 */,
347 PRESHIFT(0x02616000) /* 0.148773193 */,
348 PRESHIFT(0x007d6000) /* 0.030609131 */,
349 PRESHIFT(0x007aa000) /* 0.029937744 */,
350 PRESHIFT(0x00024000) /* 0.000549316 */,
351 PRESHIFT(0x0009a000) /* 0.002349854 */,
352 PRESHIFT(0x0000b000) /* 0.000167847 */,
353
354 -PRESHIFT(0x00002000) /* -0.000030518 */,
355 -PRESHIFT(0x0003f000) /* -0.000961304 */,
356 PRESHIFT(0x000dd000) /* 0.003372192 */,
357 -PRESHIFT(0x00428000) /* -0.016235352 */,
358 PRESHIFT(0x00500000) /* 0.019531250 */,
359 -PRESHIFT(0x02011000) /* -0.125259399 */,
360 -PRESHIFT(0x003e6000) /* -0.015228271 */,
361 -PRESHIFT(0x0d11e000) /* -0.816864014 */,
362 PRESHIFT(0x116fc000) /* 1.089782715 */,
363 PRESHIFT(0x052c5000) /* 0.323318481 */,
364 PRESHIFT(0x02616000) /* 0.148773193 */,
365 PRESHIFT(0x007d6000) /* 0.030609131 */,
366 PRESHIFT(0x007aa000) /* 0.029937744 */,
367 PRESHIFT(0x00024000) /* 0.000549316 */,
368 PRESHIFT(0x0009a000) /* 0.002349854 */,
369 PRESHIFT(0x0000b000) /* 0.000167847 */ },
370
371 { -PRESHIFT(0x00002000) /* -0.000030518 */,/* 10 */
372 -PRESHIFT(0x00044000) /* -0.001037598 */,
373 PRESHIFT(0x000d7000) /* 0.003280640 */,
374 -PRESHIFT(0x00471000) /* -0.017349243 */,
375 PRESHIFT(0x0046b000) /* 0.017257690 */,
376 -PRESHIFT(0x0212b000) /* -0.129562378 */,
377 -PRESHIFT(0x0084a000) /* -0.032379150 */,
378 -PRESHIFT(0x0d78a000) /* -0.841949463 */,
379 PRESHIFT(0x113be000) /* 1.077117920 */,
380 PRESHIFT(0x04c16000) /* 0.297210693 */,
381 PRESHIFT(0x02687000) /* 0.150497437 */,
382 PRESHIFT(0x0069c000) /* 0.025817871 */,
383 PRESHIFT(0x0077f000) /* 0.029281616 */,
384 PRESHIFT(0x00002000) /* 0.000030518 */,
385 PRESHIFT(0x00093000) /* 0.002243042 */,
386 PRESHIFT(0x0000a000) /* 0.000152588 */,
387
388 -PRESHIFT(0x00002000) /* -0.000030518 */,
389 -PRESHIFT(0x00044000) /* -0.001037598 */,
390 PRESHIFT(0x000d7000) /* 0.003280640 */,
391 -PRESHIFT(0x00471000) /* -0.017349243 */,
392 PRESHIFT(0x0046b000) /* 0.017257690 */,
393 -PRESHIFT(0x0212b000) /* -0.129562378 */,
394 -PRESHIFT(0x0084a000) /* -0.032379150 */,
395 -PRESHIFT(0x0d78a000) /* -0.841949463 */,
396 PRESHIFT(0x113be000) /* 1.077117920 */,
397 PRESHIFT(0x04c16000) /* 0.297210693 */,
398 PRESHIFT(0x02687000) /* 0.150497437 */,
399 PRESHIFT(0x0069c000) /* 0.025817871 */,
400 PRESHIFT(0x0077f000) /* 0.029281616 */,
401 PRESHIFT(0x00002000) /* 0.000030518 */,
402 PRESHIFT(0x00093000) /* 0.002243042 */,
403 PRESHIFT(0x0000a000) /* 0.000152588 */ },
404
405 { -PRESHIFT(0x00003000) /* -0.000045776 */,/* 11 */
406 -PRESHIFT(0x00049000) /* -0.001113892 */,
407 PRESHIFT(0x000d0000) /* 0.003173828 */,
408 -PRESHIFT(0x004ba000) /* -0.018463135 */,
409 PRESHIFT(0x003ca000) /* 0.014801025 */,
410 -PRESHIFT(0x02233000) /* -0.133590698 */,
411 -PRESHIFT(0x00ce4000) /* -0.050354004 */,
412 -PRESHIFT(0x0ddca000) /* -0.866363525 */,
413 PRESHIFT(0x1102f000) /* 1.063217163 */,
414 PRESHIFT(0x04587000) /* 0.271591187 */,
415 PRESHIFT(0x026cf000) /* 0.151596069 */,
416 PRESHIFT(0x0056c000) /* 0.021179199 */,
417 PRESHIFT(0x0074e000) /* 0.028533936 */,
418 -PRESHIFT(0x0001d000) /* -0.000442505 */,
419 PRESHIFT(0x0008b000) /* 0.002120972 */,
420 PRESHIFT(0x00009000) /* 0.000137329 */,
421
422 -PRESHIFT(0x00003000) /* -0.000045776 */,
423 -PRESHIFT(0x00049000) /* -0.001113892 */,
424 PRESHIFT(0x000d0000) /* 0.003173828 */,
425 -PRESHIFT(0x004ba000) /* -0.018463135 */,
426 PRESHIFT(0x003ca000) /* 0.014801025 */,
427 -PRESHIFT(0x02233000) /* -0.133590698 */,
428 -PRESHIFT(0x00ce4000) /* -0.050354004 */,
429 -PRESHIFT(0x0ddca000) /* -0.866363525 */,
430 PRESHIFT(0x1102f000) /* 1.063217163 */,
431 PRESHIFT(0x04587000) /* 0.271591187 */,
432 PRESHIFT(0x026cf000) /* 0.151596069 */,
433 PRESHIFT(0x0056c000) /* 0.021179199 */,
434 PRESHIFT(0x0074e000) /* 0.028533936 */,
435 -PRESHIFT(0x0001d000) /* -0.000442505 */,
436 PRESHIFT(0x0008b000) /* 0.002120972 */,
437 PRESHIFT(0x00009000) /* 0.000137329 */ },
438
439 { -PRESHIFT(0x00003000) /* -0.000045776 */,/* 12 */
440 -PRESHIFT(0x0004f000) /* -0.001205444 */,
441 PRESHIFT(0x000c8000) /* 0.003051758 */,
442 -PRESHIFT(0x00503000) /* -0.019577026 */,
443 PRESHIFT(0x0031a000) /* 0.012115479 */,
444 -PRESHIFT(0x02326000) /* -0.137298584 */,
445 -PRESHIFT(0x011b5000) /* -0.069168091 */,
446 -PRESHIFT(0x0e3dd000) /* -0.890090942 */,
447 PRESHIFT(0x10c54000) /* 1.048156738 */,
448 PRESHIFT(0x03f1b000) /* 0.246505737 */,
449 PRESHIFT(0x026ee000) /* 0.152069092 */,
450 PRESHIFT(0x00447000) /* 0.016708374 */,
451 PRESHIFT(0x00719000) /* 0.027725220 */,
452 -PRESHIFT(0x00039000) /* -0.000869751 */,
453 PRESHIFT(0x00084000) /* 0.002014160 */,
454 PRESHIFT(0x00008000) /* 0.000122070 */,
455
456 -PRESHIFT(0x00003000) /* -0.000045776 */,
457 -PRESHIFT(0x0004f000) /* -0.001205444 */,
458 PRESHIFT(0x000c8000) /* 0.003051758 */,
459 -PRESHIFT(0x00503000) /* -0.019577026 */,
460 PRESHIFT(0x0031a000) /* 0.012115479 */,
461 -PRESHIFT(0x02326000) /* -0.137298584 */,
462 -PRESHIFT(0x011b5000) /* -0.069168091 */,
463 -PRESHIFT(0x0e3dd000) /* -0.890090942 */,
464 PRESHIFT(0x10c54000) /* 1.048156738 */,
465 PRESHIFT(0x03f1b000) /* 0.246505737 */,
466 PRESHIFT(0x026ee000) /* 0.152069092 */,
467 PRESHIFT(0x00447000) /* 0.016708374 */,
468 PRESHIFT(0x00719000) /* 0.027725220 */,
469 -PRESHIFT(0x00039000) /* -0.000869751 */,
470 PRESHIFT(0x00084000) /* 0.002014160 */,
471 PRESHIFT(0x00008000) /* 0.000122070 */ },
472
473 { -PRESHIFT(0x00004000) /* -0.000061035 */,/* 13 */
474 -PRESHIFT(0x00055000) /* -0.001296997 */,
475 PRESHIFT(0x000bd000) /* 0.002883911 */,
476 -PRESHIFT(0x0054c000) /* -0.020690918 */,
477 PRESHIFT(0x0025d000) /* 0.009231567 */,
478 -PRESHIFT(0x02403000) /* -0.140670776 */,
479 -PRESHIFT(0x016ba000) /* -0.088775635 */,
480 -PRESHIFT(0x0e9be000) /* -0.913055420 */,
481 PRESHIFT(0x1082d000) /* 1.031936646 */,
482 PRESHIFT(0x038d4000) /* 0.221984863 */,
483 PRESHIFT(0x026e7000) /* 0.151962280 */,
484 PRESHIFT(0x0032e000) /* 0.012420654 */,
485 PRESHIFT(0x006df000) /* 0.026840210 */,
486 -PRESHIFT(0x00053000) /* -0.001266479 */,
487 PRESHIFT(0x0007d000) /* 0.001907349 */,
488 PRESHIFT(0x00007000) /* 0.000106812 */,
489
490 -PRESHIFT(0x00004000) /* -0.000061035 */,
491 -PRESHIFT(0x00055000) /* -0.001296997 */,
492 PRESHIFT(0x000bd000) /* 0.002883911 */,
493 -PRESHIFT(0x0054c000) /* -0.020690918 */,
494 PRESHIFT(0x0025d000) /* 0.009231567 */,
495 -PRESHIFT(0x02403000) /* -0.140670776 */,
496 -PRESHIFT(0x016ba000) /* -0.088775635 */,
497 -PRESHIFT(0x0e9be000) /* -0.913055420 */,
498 PRESHIFT(0x1082d000) /* 1.031936646 */,
499 PRESHIFT(0x038d4000) /* 0.221984863 */,
500 PRESHIFT(0x026e7000) /* 0.151962280 */,
501 PRESHIFT(0x0032e000) /* 0.012420654 */,
502 PRESHIFT(0x006df000) /* 0.026840210 */,
503 -PRESHIFT(0x00053000) /* -0.001266479 */,
504 PRESHIFT(0x0007d000) /* 0.001907349 */,
505 PRESHIFT(0x00007000) /* 0.000106812 */ },
506
507 { -PRESHIFT(0x00004000) /* -0.000061035 */,/* 14 */
508 -PRESHIFT(0x0005b000) /* -0.001388550 */,
509 PRESHIFT(0x000b1000) /* 0.002700806 */,
510 -PRESHIFT(0x00594000) /* -0.021789551 */,
511 PRESHIFT(0x00192000) /* 0.006134033 */,
512 -PRESHIFT(0x024c8000) /* -0.143676758 */,
513 -PRESHIFT(0x01bf2000) /* -0.109161377 */,
514 -PRESHIFT(0x0ef69000) /* -0.935195923 */,
515 PRESHIFT(0x103be000) /* 1.014617920 */,
516 PRESHIFT(0x032b4000) /* 0.198059082 */,
517 PRESHIFT(0x026bc000) /* 0.151306152 */,
518 PRESHIFT(0x00221000) /* 0.008316040 */,
519 PRESHIFT(0x006a2000) /* 0.025909424 */,
520 -PRESHIFT(0x0006a000) /* -0.001617432 */,
521 PRESHIFT(0x00075000) /* 0.001785278 */,
522 PRESHIFT(0x00007000) /* 0.000106812 */,
523
524 -PRESHIFT(0x00004000) /* -0.000061035 */,
525 -PRESHIFT(0x0005b000) /* -0.001388550 */,
526 PRESHIFT(0x000b1000) /* 0.002700806 */,
527 -PRESHIFT(0x00594000) /* -0.021789551 */,
528 PRESHIFT(0x00192000) /* 0.006134033 */,
529 -PRESHIFT(0x024c8000) /* -0.143676758 */,
530 -PRESHIFT(0x01bf2000) /* -0.109161377 */,
531 -PRESHIFT(0x0ef69000) /* -0.935195923 */,
532 PRESHIFT(0x103be000) /* 1.014617920 */,
533 PRESHIFT(0x032b4000) /* 0.198059082 */,
534 PRESHIFT(0x026bc000) /* 0.151306152 */,
535 PRESHIFT(0x00221000) /* 0.008316040 */,
536 PRESHIFT(0x006a2000) /* 0.025909424 */,
537 -PRESHIFT(0x0006a000) /* -0.001617432 */,
538 PRESHIFT(0x00075000) /* 0.001785278 */,
539 PRESHIFT(0x00007000) /* 0.000106812 */ },
540
541 { -PRESHIFT(0x00005000) /* -0.000076294 */,/* 15 */
542 -PRESHIFT(0x00061000) /* -0.001480103 */,
543 PRESHIFT(0x000a3000) /* 0.002487183 */,
544 -PRESHIFT(0x005da000) /* -0.022857666 */,
545 PRESHIFT(0x000b9000) /* 0.002822876 */,
546 -PRESHIFT(0x02571000) /* -0.146255493 */,
547 -PRESHIFT(0x0215c000) /* -0.130310059 */,
548 -PRESHIFT(0x0f4dc000) /* -0.956481934 */,
549 PRESHIFT(0x0ff0a000) /* 0.996246338 */,
550 PRESHIFT(0x02cbf000) /* 0.174789429 */,
551 PRESHIFT(0x0266e000) /* 0.150115967 */,
552 PRESHIFT(0x00120000) /* 0.004394531 */,
553 PRESHIFT(0x00662000) /* 0.024932861 */,
554 -PRESHIFT(0x0007f000) /* -0.001937866 */,
555 PRESHIFT(0x0006f000) /* 0.001693726 */,
556 PRESHIFT(0x00006000) /* 0.000091553 */,
557
558 -PRESHIFT(0x00005000) /* -0.000076294 */,
559 -PRESHIFT(0x00061000) /* -0.001480103 */,
560 PRESHIFT(0x000a3000) /* 0.002487183 */,
561 -PRESHIFT(0x005da000) /* -0.022857666 */,
562 PRESHIFT(0x000b9000) /* 0.002822876 */,
563 -PRESHIFT(0x02571000) /* -0.146255493 */,
564 -PRESHIFT(0x0215c000) /* -0.130310059 */,
565 -PRESHIFT(0x0f4dc000) /* -0.956481934 */,
566 PRESHIFT(0x0ff0a000) /* 0.996246338 */,
567 PRESHIFT(0x02cbf000) /* 0.174789429 */,
568 PRESHIFT(0x0266e000) /* 0.150115967 */,
569 PRESHIFT(0x00120000) /* 0.004394531 */,
570 PRESHIFT(0x00662000) /* 0.024932861 */,
571 -PRESHIFT(0x0007f000) /* -0.001937866 */,
572 PRESHIFT(0x0006f000) /* 0.001693726 */,
573 PRESHIFT(0x00006000) /* 0.000091553 */ },
574
575 { -PRESHIFT(0x00005000) /* -0.000076294 */,/* 16 */
576 -PRESHIFT(0x00068000) /* -0.001586914 */,
577 PRESHIFT(0x00092000) /* 0.002227783 */,
578 -PRESHIFT(0x0061f000) /* -0.023910522 */,
579 -PRESHIFT(0x0002d000) /* -0.000686646 */,
580 -PRESHIFT(0x025ff000) /* -0.148422241 */,
581 -PRESHIFT(0x026f7000) /* -0.152206421 */,
582 -PRESHIFT(0x0fa13000) /* -0.976852417 */,
583 PRESHIFT(0x0fa13000) /* 0.976852417 */,
584 PRESHIFT(0x026f7000) /* 0.152206421 */,
585 PRESHIFT(0x025ff000) /* 0.148422241 */,
586 PRESHIFT(0x0002d000) /* 0.000686646 */,
587 PRESHIFT(0x0061f000) /* 0.023910522 */,
588 -PRESHIFT(0x00092000) /* -0.002227783 */,
589 PRESHIFT(0x00068000) /* 0.001586914 */,
590 PRESHIFT(0x00005000) /* 0.000076294 */,
591
592 -PRESHIFT(0x00005000) /* -0.000076294 */,
593 -PRESHIFT(0x00068000) /* -0.001586914 */,
594 PRESHIFT(0x00092000) /* 0.002227783 */,
595 -PRESHIFT(0x0061f000) /* -0.023910522 */,
596 -PRESHIFT(0x0002d000) /* -0.000686646 */,
597 -PRESHIFT(0x025ff000) /* -0.148422241 */,
598 -PRESHIFT(0x026f7000) /* -0.152206421 */,
599 -PRESHIFT(0x0fa13000) /* -0.976852417 */,
600 PRESHIFT(0x0fa13000) /* 0.976852417 */,
601 PRESHIFT(0x026f7000) /* 0.152206421 */,
602 PRESHIFT(0x025ff000) /* 0.148422241 */,
603 PRESHIFT(0x0002d000) /* 0.000686646 */,
604 PRESHIFT(0x0061f000) /* 0.023910522 */,
605 -PRESHIFT(0x00092000) /* -0.002227783 */,
606 PRESHIFT(0x00068000) /* 0.001586914 */,
607 PRESHIFT(0x00005000) /* 0.000076294 */ }
diff --git a/core/multimedia/opieplayer/libmad/Makefile.in b/core/multimedia/opieplayer/libmad/Makefile.in
new file mode 100644
index 0000000..9e17769
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/Makefile.in
@@ -0,0 +1,226 @@
1#############################################################################
2
3####### Compiler, tools and options
4
5 CXX =$(SYSCONF_CXX) $(QT_CXX_MT)
6 CXXFLAGS=$(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS) $(SYSCONF_CXXFLAGS_LIB) -DQCONFIG=\"qpe\"
7 CC =$(SYSCONF_CC) $(QT_C_MT)
8 CFLAGS =$(SYSCONF_CFLAGS) $(SYSCONF_CFLAGS_LIB) -DQCONFIG=\"qpe\"
9 INCPATH =-I$(QPEDIR)/include -I..
10 LFLAGS =$(SYSCONF_LFLAGS_QT) $(SYSCONF_RPATH_QT) $(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
11 LIBS =$(SUBLIBS) -lqpe -lm $(SYSCONF_LIBS_QT) $(SYSCONF_LIBS_QTAPP)
12 MOC =$(SYSCONF_MOC)
13 UIC =$(SYSCONF_UIC)
14
15####### Target
16
17DESTDIR = ../../plugins/codecs/
18VER_MAJ = 1
19VER_MIN = 0
20VER_PATCH = 0
21 TARGET= madplugin
22TARGET1 = lib$(TARGET).so.$(VER_MAJ)
23
24####### Files
25
26 HEADERS =libmad_version.h \
27 fixed.h \
28 bit.h \
29 timer.h \
30 stream.h \
31 frame.h \
32 synth.h \
33 decoder.h \
34 layer12.h \
35 layer3.h \
36 huffman.h \
37 libmad_global.h \
38 mad.h \
39 libmadplugin.h \
40 libmadpluginimpl.h
41 SOURCES =version.c \
42 fixed.c \
43 bit.c \
44 timer.c \
45 stream.c \
46 frame.c \
47 synth.c \
48 decoder.c \
49 layer12.c \
50 layer3.c \
51 huffman.c \
52 libmadplugin.cpp \
53 libmadpluginimpl.cpp
54 OBJECTS =version.o \
55 fixed.o \
56 bit.o \
57 timer.o \
58 stream.o \
59 frame.o \
60 synth.o \
61 decoder.o \
62 layer12.o \
63 layer3.o \
64 huffman.o \
65 libmadplugin.o \
66 libmadpluginimpl.o
67INTERFACES =
68UICDECLS =
69UICIMPLS =
70 SRCMOC =
71 OBJMOC =
72
73
74####### Implicit rules
75
76.SUFFIXES: .cpp .cxx .cc .C .c
77
78.cpp.o:
79 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
80
81.cxx.o:
82 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
83
84.cc.o:
85 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
86
87.C.o:
88 $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
89
90.c.o:
91 $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
92
93####### Build rules
94
95
96all: $(DESTDIR)$(SYSCONF_LINK_TARGET)
97
98$(DESTDIR)$(SYSCONF_LINK_TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS)
99 $(SYSCONF_LINK_LIB)
100
101moc: $(SRCMOC)
102
103tmake:
104 tmake libmad.pro
105
106clean:
107 -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS)
108 -rm -f *~ core
109 -rm -f allmoc.cpp
110
111####### Extension Modules
112
113listpromodules:
114 @echo
115
116listallmodules:
117 @echo
118
119listaddonpromodules:
120 @echo
121
122listaddonentmodules:
123 @echo
124
125
126REQUIRES=
127
128####### Sub-libraries
129
130
131###### Combined headers
132
133
134
135####### Compile
136
137version.o: version.c \
138 libmad_global.h \
139 libmad_version.h
140
141fixed.o: fixed.c \
142 libmad_global.h \
143 fixed.h
144
145bit.o: bit.c \
146 libmad_global.h \
147 bit.h
148
149timer.o: timer.c \
150 libmad_global.h \
151 timer.h
152
153stream.o: stream.c \
154 libmad_global.h \
155 bit.h \
156 stream.h
157
158frame.o: frame.c \
159 libmad_global.h \
160 bit.h \
161 stream.h \
162 frame.h \
163 fixed.h \
164 timer.h \
165 layer12.h \
166 layer3.h
167
168synth.o: synth.c \
169 libmad_global.h \
170 fixed.h \
171 frame.h \
172 timer.h \
173 stream.h \
174 bit.h \
175 synth.h \
176 D.dat
177
178decoder.o: decoder.c \
179 libmad_global.h \
180 stream.h \
181 bit.h \
182 frame.h \
183 fixed.h \
184 timer.h \
185 synth.h \
186 decoder.h
187
188layer12.o: layer12.c \
189 libmad_global.h \
190 fixed.h \
191 bit.h \
192 stream.h \
193 frame.h \
194 timer.h \
195 layer12.h \
196 sf_table.dat \
197 qc_table.dat
198
199layer3.o: layer3.c \
200 libmad_global.h \
201 fixed.h \
202 bit.h \
203 stream.h \
204 frame.h \
205 timer.h \
206 huffman.h \
207 layer3.h \
208 rq_table.dat \
209 imdct_s.dat
210
211huffman.o: huffman.c \
212 libmad_global.h \
213 huffman.h
214
215libmadplugin.o: libmadplugin.cpp \
216 libmadplugin.h \
217 ../mediaplayerplugininterface.h \
218 mad.h
219
220libmadpluginimpl.o: libmadpluginimpl.cpp \
221 libmadplugin.h \
222 ../mediaplayerplugininterface.h \
223 libmadpluginimpl.h \
224 ../mediaplayerplugininterface.h
225
226
diff --git a/core/multimedia/opieplayer/libmad/bit.c b/core/multimedia/opieplayer/libmad/bit.c
new file mode 100644
index 0000000..2466c5f
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/bit.c
@@ -0,0 +1,220 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifdef HAVE_CONFIG_H
23# include "libmad_config.h"
24# endif
25
26# include "libmad_global.h"
27
28# ifdef HAVE_LIMITS_H
29# include <limits.h>
30# else
31# define CHAR_BIT 8
32# endif
33
34# include "bit.h"
35
36/*
37 * This is the lookup table for computing the CRC-check word.
38 * As described in section 2.4.3.1 and depicted in Figure A.9
39 * of ISO/IEC 11172-3, the generator polynomial is:
40 *
41 * G(X) = X^16 + X^15 + X^2 + 1
42 */
43static
44unsigned short const crc_table[256] = {
45 0x0000, 0x8005, 0x800f, 0x000a, 0x801b, 0x001e, 0x0014, 0x8011,
46 0x8033, 0x0036, 0x003c, 0x8039, 0x0028, 0x802d, 0x8027, 0x0022,
47 0x8063, 0x0066, 0x006c, 0x8069, 0x0078, 0x807d, 0x8077, 0x0072,
48 0x0050, 0x8055, 0x805f, 0x005a, 0x804b, 0x004e, 0x0044, 0x8041,
49 0x80c3, 0x00c6, 0x00cc, 0x80c9, 0x00d8, 0x80dd, 0x80d7, 0x00d2,
50 0x00f0, 0x80f5, 0x80ff, 0x00fa, 0x80eb, 0x00ee, 0x00e4, 0x80e1,
51 0x00a0, 0x80a5, 0x80af, 0x00aa, 0x80bb, 0x00be, 0x00b4, 0x80b1,
52 0x8093, 0x0096, 0x009c, 0x8099, 0x0088, 0x808d, 0x8087, 0x0082,
53
54 0x8183, 0x0186, 0x018c, 0x8189, 0x0198, 0x819d, 0x8197, 0x0192,
55 0x01b0, 0x81b5, 0x81bf, 0x01ba, 0x81ab, 0x01ae, 0x01a4, 0x81a1,
56 0x01e0, 0x81e5, 0x81ef, 0x01ea, 0x81fb, 0x01fe, 0x01f4, 0x81f1,
57 0x81d3, 0x01d6, 0x01dc, 0x81d9, 0x01c8, 0x81cd, 0x81c7, 0x01c2,
58 0x0140, 0x8145, 0x814f, 0x014a, 0x815b, 0x015e, 0x0154, 0x8151,
59 0x8173, 0x0176, 0x017c, 0x8179, 0x0168, 0x816d, 0x8167, 0x0162,
60 0x8123, 0x0126, 0x012c, 0x8129, 0x0138, 0x813d, 0x8137, 0x0132,
61 0x0110, 0x8115, 0x811f, 0x011a, 0x810b, 0x010e, 0x0104, 0x8101,
62
63 0x8303, 0x0306, 0x030c, 0x8309, 0x0318, 0x831d, 0x8317, 0x0312,
64 0x0330, 0x8335, 0x833f, 0x033a, 0x832b, 0x032e, 0x0324, 0x8321,
65 0x0360, 0x8365, 0x836f, 0x036a, 0x837b, 0x037e, 0x0374, 0x8371,
66 0x8353, 0x0356, 0x035c, 0x8359, 0x0348, 0x834d, 0x8347, 0x0342,
67 0x03c0, 0x83c5, 0x83cf, 0x03ca, 0x83db, 0x03de, 0x03d4, 0x83d1,
68 0x83f3, 0x03f6, 0x03fc, 0x83f9, 0x03e8, 0x83ed, 0x83e7, 0x03e2,
69 0x83a3, 0x03a6, 0x03ac, 0x83a9, 0x03b8, 0x83bd, 0x83b7, 0x03b2,
70 0x0390, 0x8395, 0x839f, 0x039a, 0x838b, 0x038e, 0x0384, 0x8381,
71
72 0x0280, 0x8285, 0x828f, 0x028a, 0x829b, 0x029e, 0x0294, 0x8291,
73 0x82b3, 0x02b6, 0x02bc, 0x82b9, 0x02a8, 0x82ad, 0x82a7, 0x02a2,
74 0x82e3, 0x02e6, 0x02ec, 0x82e9, 0x02f8, 0x82fd, 0x82f7, 0x02f2,
75 0x02d0, 0x82d5, 0x82df, 0x02da, 0x82cb, 0x02ce, 0x02c4, 0x82c1,
76 0x8243, 0x0246, 0x024c, 0x8249, 0x0258, 0x825d, 0x8257, 0x0252,
77 0x0270, 0x8275, 0x827f, 0x027a, 0x826b, 0x026e, 0x0264, 0x8261,
78 0x0220, 0x8225, 0x822f, 0x022a, 0x823b, 0x023e, 0x0234, 0x8231,
79 0x8213, 0x0216, 0x021c, 0x8219, 0x0208, 0x820d, 0x8207, 0x0202
80};
81
82# define CRC_POLY 0x8005
83
84/*
85 * NAME:bit->init()
86 * DESCRIPTION:initialize bit pointer struct
87 */
88void mad_bit_init(struct mad_bitptr *bitptr, unsigned char const *byte)
89{
90 bitptr->byte = byte;
91 bitptr->cache = 0;
92 bitptr->left = CHAR_BIT;
93}
94
95/*
96 * NAME:bit->length()
97 * DESCRIPTION:return number of bits between start and end points
98 */
99unsigned int mad_bit_length(struct mad_bitptr const *begin,
100 struct mad_bitptr const *end)
101{
102 return begin->left +
103 CHAR_BIT * (end->byte - (begin->byte + 1)) + (CHAR_BIT - end->left);
104}
105
106/*
107 * NAME:bit->nextbyte()
108 * DESCRIPTION:return pointer to next unprocessed byte
109 */
110unsigned char const *mad_bit_nextbyte(struct mad_bitptr const *bitptr)
111{
112 return bitptr->left == CHAR_BIT ? bitptr->byte : bitptr->byte + 1;
113}
114
115/*
116 * NAME:bit->skip()
117 * DESCRIPTION:advance bit pointer
118 */
119void mad_bit_skip(struct mad_bitptr *bitptr, unsigned int len)
120{
121 bitptr->byte += len / CHAR_BIT;
122 bitptr->left -= len % CHAR_BIT;
123
124 if (bitptr->left > CHAR_BIT) {
125 bitptr->byte++;
126 bitptr->left += CHAR_BIT;
127 }
128
129 if (bitptr->left < CHAR_BIT)
130 bitptr->cache = *bitptr->byte;
131}
132
133/*
134 * NAME:bit->read()
135 * DESCRIPTION:read an arbitrary number of bits and return their UIMSBF value
136 */
137unsigned long mad_bit_read(struct mad_bitptr *bitptr, unsigned int len)
138{
139 register unsigned long value;
140
141 if (bitptr->left == CHAR_BIT)
142 bitptr->cache = *bitptr->byte;
143
144 if (len < bitptr->left) {
145 value = (bitptr->cache & ((1 << bitptr->left) - 1)) >>
146 (bitptr->left - len);
147 bitptr->left -= len;
148
149 return value;
150 }
151
152 /* remaining bits in current byte */
153
154 value = bitptr->cache & ((1 << bitptr->left) - 1);
155 len -= bitptr->left;
156
157 bitptr->byte++;
158 bitptr->left = CHAR_BIT;
159
160 /* more bytes */
161
162 while (len >= CHAR_BIT) {
163 value = (value << CHAR_BIT) | *bitptr->byte++;
164 len -= CHAR_BIT;
165 }
166
167 if (len > 0) {
168 bitptr->cache = *bitptr->byte;
169
170 value = (value << len) | (bitptr->cache >> (CHAR_BIT - len));
171 bitptr->left -= len;
172 }
173
174 return value;
175}
176
177# if 0
178/*
179 * NAME:bit->write()
180 * DESCRIPTION:write an arbitrary number of bits
181 */
182void mad_bit_write(struct mad_bitptr *bitptr, unsigned int len,
183 unsigned long value)
184{
185 unsigned char *ptr;
186
187 ptr = (unsigned char *) bitptr->byte;
188
189 /* ... */
190}
191# endif
192
193/*
194 * NAME:bit->crc()
195 * DESCRIPTION:compute CRC-check word
196 */
197unsigned short mad_bit_crc(struct mad_bitptr bitptr, unsigned int len,
198 unsigned short init)
199{
200 register unsigned int crc, data;
201
202# if CHAR_BIT == 8
203 for (crc = init; len >= 8; len -= 8) {
204 crc = (crc << 8) ^
205 crc_table[((crc >> 8) ^ mad_bit_read(&bitptr, 8)) & 0xff];
206 }
207# else
208 crc = init;
209# endif
210
211 while (len--) {
212 data = mad_bit_read(&bitptr, 1) ^ (crc >> 15);
213
214 crc <<= 1;
215 if (data & 1)
216 crc ^= CRC_POLY;
217 }
218
219 return crc & 0xffff;
220}
diff --git a/core/multimedia/opieplayer/libmad/bit.h b/core/multimedia/opieplayer/libmad/bit.h
new file mode 100644
index 0000000..f315bc9
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/bit.h
@@ -0,0 +1,47 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifndef LIBMAD_BIT_H
23# define LIBMAD_BIT_H
24
25struct mad_bitptr {
26 unsigned char const *byte;
27 unsigned short cache;
28 unsigned short left;
29};
30
31void mad_bit_init(struct mad_bitptr *, unsigned char const *);
32
33 # define mad_bit_finish(bitptr) /* nothing */
34
35unsigned int mad_bit_length(struct mad_bitptr const *,
36 struct mad_bitptr const *);
37
38# define mad_bit_bitsleft(bitptr) ((bitptr)->left)
39unsigned char const *mad_bit_nextbyte(struct mad_bitptr const *);
40
41void mad_bit_skip(struct mad_bitptr *, unsigned int);
42unsigned long mad_bit_read(struct mad_bitptr *, unsigned int);
43void mad_bit_write(struct mad_bitptr *, unsigned int, unsigned long);
44
45unsigned short mad_bit_crc(struct mad_bitptr, unsigned int, unsigned short);
46
47# endif
diff --git a/core/multimedia/opieplayer/libmad/decoder.c b/core/multimedia/opieplayer/libmad/decoder.c
new file mode 100644
index 0000000..dcf7cf3
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/decoder.c
@@ -0,0 +1,554 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifdef HAVE_CONFIG_H
23# include "libmad_config.h"
24# else
25# ifndef WEXITSTATUS
26# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
27# endif
28# ifndef WIFEXITED
29# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
30# endif
31# endif
32
33# include "libmad_global.h"
34
35# include <sys/types.h>
36
37# ifdef HAVE_SYS_WAIT_H
38# include <sys/wait.h>
39# endif
40
41# ifdef HAVE_UNISTD_H
42# include <unistd.h>
43# endif
44
45# include <fcntl.h>
46# include <stdlib.h>
47# include <errno.h>
48
49# include "stream.h"
50# include "frame.h"
51# include "synth.h"
52# include "decoder.h"
53
54void mad_decoder_init(struct mad_decoder *decoder, void *data,
55 enum mad_flow (*input_func)(void *, struct mad_stream *),
56 enum mad_flow (*header_func)(void *,
57 struct mad_header const *),
58 enum mad_flow (*filter_func)(void *, struct mad_frame *),
59 enum mad_flow (*output_func)(void *,
60 struct mad_header const *,
61 struct mad_pcm *),
62 enum mad_flow (*error_func)(void *, struct mad_stream *,
63 struct mad_frame *),
64 enum mad_flow (*message_func)(void *,
65 void *, unsigned int *))
66{
67 decoder->mode = -1;
68
69 decoder->options = 0;
70
71 decoder->async.pid = 0;
72 decoder->async.in = -1;
73 decoder->async.out = -1;
74
75 decoder->sync = 0;
76
77 decoder->cb_data = data;
78
79 decoder->input_func = input_func;
80 decoder->header_func = header_func;
81 decoder->filter_func = filter_func;
82 decoder->output_func = output_func;
83 decoder->error_func = error_func;
84 decoder->message_func = message_func;
85}
86
87int mad_decoder_finish(struct mad_decoder *decoder)
88{
89 if (decoder->mode == MAD_DECODER_MODE_ASYNC && decoder->async.pid) {
90 pid_t pid;
91 int status;
92
93 close(decoder->async.in);
94
95 do {
96 pid = waitpid(decoder->async.pid, &status, 0);
97 }
98 while (pid == -1 && errno == EINTR);
99
100 decoder->mode = -1;
101
102 close(decoder->async.out);
103
104 decoder->async.pid = 0;
105 decoder->async.in = -1;
106 decoder->async.out = -1;
107
108 if (pid == -1)
109 return -1;
110
111 return (!WIFEXITED(status) || WEXITSTATUS(status)) ? -1 : 0;
112 }
113
114 return 0;
115}
116
117static
118enum mad_flow send_io(int fd, void const *data, size_t len)
119{
120 char const *ptr = data;
121 ssize_t count;
122
123 while (len) {
124 do {
125 count = write(fd, ptr, len);
126 }
127 while (count == -1 && errno == EINTR);
128
129 if (count == -1)
130 return MAD_FLOW_BREAK;
131
132 len -= count;
133 ptr += count;
134 }
135
136 return MAD_FLOW_CONTINUE;
137}
138
139static
140enum mad_flow receive_io(int fd, void *buffer, size_t len)
141{
142 char *ptr = buffer;
143 ssize_t count;
144
145 while (len) {
146 do {
147 count = read(fd, ptr, len);
148 }
149 while (count == -1 && errno == EINTR);
150
151 if (count == -1)
152 return (errno == EAGAIN) ? MAD_FLOW_IGNORE : MAD_FLOW_BREAK;
153 else if (count == 0)
154 return MAD_FLOW_STOP;
155
156 len -= count;
157 ptr += count;
158 }
159
160 return MAD_FLOW_CONTINUE;
161}
162
163static
164enum mad_flow receive_io_blocking(int fd, void *buffer, size_t len)
165{
166 int flags, blocking;
167 enum mad_flow result;
168
169 flags = fcntl(fd, F_GETFL);
170 if (flags == -1)
171 return MAD_FLOW_BREAK;
172
173 blocking = flags & ~O_NONBLOCK;
174
175 if (blocking != flags &&
176 fcntl(fd, F_SETFL, blocking) == -1)
177 return MAD_FLOW_BREAK;
178
179 result = receive_io(fd, buffer, len);
180
181 if (flags != blocking &&
182 fcntl(fd, F_SETFL, flags) == -1)
183 return MAD_FLOW_BREAK;
184
185 return result;
186}
187
188static
189enum mad_flow send(int fd, void const *message, unsigned int size)
190{
191 enum mad_flow result;
192
193 /* send size */
194
195 result = send_io(fd, &size, sizeof(size));
196
197 /* send message */
198
199 if (result == MAD_FLOW_CONTINUE)
200 result = send_io(fd, message, size);
201
202 return result;
203}
204
205static
206enum mad_flow receive(int fd, void **message, unsigned int *size)
207{
208 enum mad_flow result;
209 unsigned int actual;
210
211 if (*message == 0)
212 *size = 0;
213
214 /* receive size */
215
216 result = receive_io(fd, &actual, sizeof(actual));
217
218 /* receive message */
219
220 if (result == MAD_FLOW_CONTINUE) {
221 if (actual > *size)
222 actual -= *size;
223 else {
224 *size = actual;
225 actual = 0;
226 }
227
228 if (*size > 0) {
229 if (*message == 0) {
230 *message = malloc(*size);
231 if (*message == 0)
232 return MAD_FLOW_BREAK;
233 }
234
235 result = receive_io_blocking(fd, *message, *size);
236 }
237
238 /* throw away remainder of message */
239
240 while (actual && result == MAD_FLOW_CONTINUE) {
241 char sink[256];
242 unsigned int len;
243
244 len = actual > sizeof(sink) ? sizeof(sink) : actual;
245
246 result = receive_io_blocking(fd, sink, len);
247
248 actual -= len;
249 }
250 }
251
252 return result;
253}
254
255static
256enum mad_flow check_message(struct mad_decoder *decoder)
257{
258 enum mad_flow result;
259 void *message = 0;
260 unsigned int size;
261
262 result = receive(decoder->async.in, &message, &size);
263
264 if (result == MAD_FLOW_CONTINUE) {
265 if (decoder->message_func == 0)
266 size = 0;
267 else {
268 result = decoder->message_func(decoder->cb_data, message, &size);
269
270 if (result == MAD_FLOW_IGNORE ||
271 result == MAD_FLOW_BREAK)
272 size = 0;
273 }
274
275 if (send(decoder->async.out, message, size) != MAD_FLOW_CONTINUE)
276 result = MAD_FLOW_BREAK;
277 }
278
279 if (message)
280 free(message);
281
282 return result;
283}
284
285static
286enum mad_flow error_default(void *data, struct mad_stream *stream,
287 struct mad_frame *frame)
288{
289 int *bad_last_frame = data;
290
291 switch (stream->error) {
292 case MAD_ERROR_BADCRC:
293 if (*bad_last_frame)
294 mad_frame_mute(frame);
295 else
296 *bad_last_frame = 1;
297
298 return MAD_FLOW_IGNORE;
299
300 default:
301 return MAD_FLOW_CONTINUE;
302 }
303}
304
305static
306int run_sync(struct mad_decoder *decoder)
307{
308 enum mad_flow (*error_func)(void *, struct mad_stream *, struct mad_frame *);
309 void *error_data;
310 int bad_last_frame = 0;
311 struct mad_stream *stream;
312 struct mad_frame *frame;
313 struct mad_synth *synth;
314 int result = 0;
315
316 if (decoder->input_func == 0)
317 return 0;
318
319 if (decoder->error_func) {
320 error_func = decoder->error_func;
321 error_data = decoder->cb_data;
322 }
323 else {
324 error_func = error_default;
325 error_data = &bad_last_frame;
326 }
327
328 stream = &decoder->sync->stream;
329 frame = &decoder->sync->frame;
330 synth = &decoder->sync->synth;
331
332 mad_stream_init(stream);
333 mad_frame_init(frame);
334 mad_synth_init(synth);
335
336 mad_stream_options(stream, decoder->options);
337
338 do {
339 switch (decoder->input_func(decoder->cb_data, stream)) {
340 case MAD_FLOW_STOP:
341 goto done;
342 case MAD_FLOW_BREAK:
343 goto fail;
344 case MAD_FLOW_IGNORE:
345 continue;
346 case MAD_FLOW_CONTINUE:
347 break;
348 }
349
350 while (1) {
351 if (decoder->mode == MAD_DECODER_MODE_ASYNC) {
352 switch (check_message(decoder)) {
353 case MAD_FLOW_IGNORE:
354 case MAD_FLOW_CONTINUE:
355 break;
356 case MAD_FLOW_BREAK:
357 goto fail;
358 case MAD_FLOW_STOP:
359 goto done;
360 }
361 }
362
363 if (decoder->header_func) {
364 if (mad_header_decode(&frame->header, stream) == -1) {
365 if (!MAD_RECOVERABLE(stream->error))
366 break;
367
368 switch (error_func(error_data, stream, frame)) {
369 case MAD_FLOW_STOP:
370 goto done;
371 case MAD_FLOW_BREAK:
372 goto fail;
373 case MAD_FLOW_IGNORE:
374 case MAD_FLOW_CONTINUE:
375 default:
376 continue;
377 }
378 }
379
380 switch (decoder->header_func(decoder->cb_data, &frame->header)) {
381 case MAD_FLOW_STOP:
382 goto done;
383 case MAD_FLOW_BREAK:
384 goto fail;
385 case MAD_FLOW_IGNORE:
386 continue;
387 case MAD_FLOW_CONTINUE:
388 break;
389 }
390 }
391
392 if (mad_frame_decode(frame, stream) == -1) {
393 if (!MAD_RECOVERABLE(stream->error))
394 break;
395
396 switch (error_func(error_data, stream, frame)) {
397 case MAD_FLOW_STOP:
398 goto done;
399 case MAD_FLOW_BREAK:
400 goto fail;
401 case MAD_FLOW_IGNORE:
402 break;
403 case MAD_FLOW_CONTINUE:
404 default:
405 continue;
406 }
407 }
408 else
409 bad_last_frame = 0;
410
411 if (decoder->filter_func) {
412 switch (decoder->filter_func(decoder->cb_data, frame)) {
413 case MAD_FLOW_STOP:
414 goto done;
415 case MAD_FLOW_BREAK:
416 goto fail;
417 case MAD_FLOW_IGNORE:
418 continue;
419 case MAD_FLOW_CONTINUE:
420 break;
421 }
422 }
423
424 mad_synth_frame(synth, frame);
425
426 if (decoder->output_func) {
427 switch (decoder->output_func(decoder->cb_data,
428 &frame->header, &synth->pcm)) {
429 case MAD_FLOW_STOP:
430 goto done;
431 case MAD_FLOW_BREAK:
432 goto fail;
433 case MAD_FLOW_IGNORE:
434 case MAD_FLOW_CONTINUE:
435 break;
436 }
437 }
438 }
439 }
440 while (stream->error == MAD_ERROR_BUFLEN);
441
442 fail:
443 result = -1;
444
445 done:
446 mad_synth_finish(synth);
447 mad_frame_finish(frame);
448 mad_stream_finish(stream);
449
450 return result;
451}
452
453static
454int run_async(struct mad_decoder *decoder)
455{
456 pid_t pid;
457 int ptoc[2], ctop[2], flags;
458
459 if (pipe(ptoc) == -1)
460 return -1;
461
462 if (pipe(ctop) == -1) {
463 close(ptoc[0]);
464 close(ptoc[1]);
465 return -1;
466 }
467
468 flags = fcntl(ptoc[0], F_GETFL);
469 if (flags == -1 ||
470 fcntl(ptoc[0], F_SETFL, flags | O_NONBLOCK) == -1) {
471 close(ctop[0]);
472 close(ctop[1]);
473 close(ptoc[0]);
474 close(ptoc[1]);
475 return -1;
476 }
477
478 pid = fork();
479 if (pid == -1) {
480 close(ctop[0]);
481 close(ctop[1]);
482 close(ptoc[0]);
483 close(ptoc[1]);
484 return -1;
485 }
486
487 decoder->async.pid = pid;
488
489 if (pid) {
490 /* parent */
491
492 close(ptoc[0]);
493 close(ctop[1]);
494
495 decoder->async.in = ctop[0];
496 decoder->async.out = ptoc[1];
497
498 return 0;
499 }
500
501 /* child */
502
503 close(ptoc[1]);
504 close(ctop[0]);
505
506 decoder->async.in = ptoc[0];
507 decoder->async.out = ctop[1];
508
509 _exit(run_sync(decoder));
510
511 /* not reached */
512 return -1;
513}
514
515int mad_decoder_run(struct mad_decoder *decoder, enum mad_decoder_mode mode)
516{
517 int result;
518 int (*run)(struct mad_decoder *) = 0;
519
520 switch (decoder->mode = mode) {
521 case MAD_DECODER_MODE_SYNC:
522 run = run_sync;
523 break;
524
525 case MAD_DECODER_MODE_ASYNC:
526 run = run_async;
527 break;
528 }
529
530 if (run == 0)
531 return -1;
532
533 decoder->sync = malloc(sizeof(*decoder->sync));
534 if (decoder->sync == 0)
535 return -1;
536
537 result = run(decoder);
538
539 free(decoder->sync);
540 decoder->sync = 0;
541
542 return result;
543}
544
545int mad_decoder_message(struct mad_decoder *decoder,
546 void *message, unsigned int *len)
547{
548 if (decoder->mode != MAD_DECODER_MODE_ASYNC ||
549 send(decoder->async.out, message, *len) != MAD_FLOW_CONTINUE ||
550 receive(decoder->async.in, &message, len) != MAD_FLOW_CONTINUE)
551 return -1;
552
553 return 0;
554}
diff --git a/core/multimedia/opieplayer/libmad/decoder.h b/core/multimedia/opieplayer/libmad/decoder.h
new file mode 100644
index 0000000..dbacc1a
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/decoder.h
@@ -0,0 +1,87 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifndef LIBMAD_DECODER_H
23# define LIBMAD_DECODER_H
24
25# include "stream.h"
26# include "frame.h"
27# include "synth.h"
28
29enum mad_decoder_mode {
30 MAD_DECODER_MODE_SYNC = 0,
31 MAD_DECODER_MODE_ASYNC
32};
33
34enum mad_flow {
35 MAD_FLOW_CONTINUE = 0x0000,
36 MAD_FLOW_STOP = 0x0010,
37 MAD_FLOW_BREAK = 0x0011,
38 MAD_FLOW_IGNORE = 0x0020
39};
40
41struct mad_decoder {
42 enum mad_decoder_mode mode;
43
44 int options;
45
46 struct {
47 long pid;
48 int in;
49 int out;
50 } async;
51
52 struct {
53 struct mad_stream stream;
54 struct mad_frame frame;
55 struct mad_synth synth;
56 } *sync;
57
58 void *cb_data;
59
60 enum mad_flow (*input_func)(void *, struct mad_stream *);
61 enum mad_flow (*header_func)(void *, struct mad_header const *);
62 enum mad_flow (*filter_func)(void *, struct mad_frame *);
63 enum mad_flow (*output_func)(void *,
64 struct mad_header const *, struct mad_pcm *);
65 enum mad_flow (*error_func)(void *, struct mad_stream *, struct mad_frame *);
66 enum mad_flow (*message_func)(void *, void *, unsigned int *);
67};
68
69void mad_decoder_init(struct mad_decoder *, void *,
70 enum mad_flow (*)(void *, struct mad_stream *),
71 enum mad_flow (*)(void *, struct mad_header const *),
72 enum mad_flow (*)(void *, struct mad_frame *),
73 enum mad_flow (*)(void *,
74 struct mad_header const *,
75 struct mad_pcm *),
76 enum mad_flow (*)(void *,
77 struct mad_stream *,
78 struct mad_frame *),
79 enum mad_flow (*)(void *, void *, unsigned int *));
80int mad_decoder_finish(struct mad_decoder *);
81
82# define mad_decoder_options(decoder, opts) ((decoder)->options = (opts))
83
84int mad_decoder_run(struct mad_decoder *, enum mad_decoder_mode);
85int mad_decoder_message(struct mad_decoder *, void *, unsigned int *);
86
87# endif
diff --git a/core/multimedia/opieplayer/libmad/fix_headers_problem b/core/multimedia/opieplayer/libmad/fix_headers_problem
new file mode 100755
index 0000000..6a5595c
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/fix_headers_problem
@@ -0,0 +1,25 @@
1#!/bin/sh
2
3#
4# This is needed to ensure the single build will work
5# The names of the header files clash with names of other headers in Qt/Palmtop
6#
7
8
9for file in *.c
10do
11
12 echo "fixing $file"
13 sed "s/global.h/libmad_global.h/" $file > $file.tmp
14 sed "s/version.h/libmad_version.h/" $file.tmp > $file
15 sed "s/config.h/libmad_config.h/" $file > $file.tmp
16 mv $file.tmp $file
17
18done
19
20
21mv global.h libmad_global.h
22mv version.h libmad_version.h
23mv config.h libmad_config.h
24
25
diff --git a/core/multimedia/opieplayer/libmad/fixed.c b/core/multimedia/opieplayer/libmad/fixed.c
new file mode 100644
index 0000000..be5c94e
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/fixed.c
@@ -0,0 +1,37 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifdef HAVE_CONFIG_H
23# include "libmad_config.h"
24# endif
25
26# include "libmad_global.h"
27
28# include "fixed.h"
29
30/*
31 * NAME:fixed->abs()
32 * DESCRIPTION:return absolute value of a fixed-point number
33 */
34mad_fixed_t mad_f_abs(mad_fixed_t x)
35{
36 return x < 0 ? -x : x;
37}
diff --git a/core/multimedia/opieplayer/libmad/fixed.h b/core/multimedia/opieplayer/libmad/fixed.h
new file mode 100644
index 0000000..00ade62
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/fixed.h
@@ -0,0 +1,413 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifndef LIBMAD_FIXED_H
23# define LIBMAD_FIXED_H
24
25# if SIZEOF_INT >= 4
26typedef signed int mad_fixed_t;
27
28typedef signed int mad_fixed64hi_t;
29typedef unsigned int mad_fixed64lo_t;
30# else
31typedef signed long mad_fixed_t;
32
33typedef signed long mad_fixed64hi_t;
34typedef unsigned long mad_fixed64lo_t;
35# endif
36
37/*
38 * Fixed-point format: 0xABBBBBBB
39 * A == whole part (sign + 3 bits)
40 * B == fractional part (28 bits)
41 *
42 * Values are signed two's complement, so the effective range is:
43 * 0x80000000 to 0x7fffffff
44 * -8.0 to +7.9999999962747097015380859375
45 *
46 * The smallest representable value is:
47 * 0x00000001 == 0.0000000037252902984619140625 (i.e. about 3.725e-9)
48 *
49 * 28 bits of fractional accuracy represent about
50 * 8.6 digits of decimal accuracy.
51 *
52 * Fixed-point numbers can be added or subtracted as normal
53 * integers, but multiplication requires shifting the 64-bit result
54 * from 56 fractional bits back to 28 (and rounding.)
55 *
56 * Changing the definition of MAD_F_FRACBITS is only partially
57 * supported, and must be done with care.
58 */
59
60 # define MAD_F_FRACBITS 28
61
62# if MAD_F_FRACBITS == 28
63 # define MAD_F(x) ((mad_fixed_t) (x##L))
64# else
65# if MAD_F_FRACBITS < 28
66# warning "MAD_F_FRACBITS < 28"
67 # define MAD_F(x) ((mad_fixed_t) \
68 (((x##L) + \
69 (1L << (28 - MAD_F_FRACBITS - 1))) >> \
70 (28 - MAD_F_FRACBITS)))
71# elif MAD_F_FRACBITS > 28
72# error "MAD_F_FRACBITS > 28 not currently supported"
73 # define MAD_F(x) ((mad_fixed_t) \
74 ((x##L) << (MAD_F_FRACBITS - 28)))
75# endif
76# endif
77
78 # define MAD_F_MIN ((mad_fixed_t) -0x80000000L)
79 # define MAD_F_MAX ((mad_fixed_t) +0x7fffffffL)
80
81 # define MAD_F_ONE MAD_F(0x10000000)
82
83 # define mad_f_tofixed(x)((mad_fixed_t) \
84 ((x) * (double) (1L << MAD_F_FRACBITS) + 0.5))
85 # define mad_f_todouble(x)((double) \
86 ((x) / (double) (1L << MAD_F_FRACBITS)))
87
88 # define mad_f_intpart(x)((x) >> MAD_F_FRACBITS)
89 # define mad_f_fracpart(x)((x) & ((1L << MAD_F_FRACBITS) - 1))
90 /* (x should be positive) */
91
92 # define mad_f_fromint(x)((x) << MAD_F_FRACBITS)
93
94 # define mad_f_add(x, y)((x) + (y))
95 # define mad_f_sub(x, y)((x) - (y))
96
97# if defined(FPM_64BIT)
98
99/*
100 * This version should be the most accurate if 64-bit (long long) types are
101 * supported by the compiler, although it may not be the most efficient.
102 */
103# if defined(OPT_ACCURACY)
104# define mad_f_mul(x, y) \
105 ((mad_fixed_t) \
106 ((((signed long long) (x) * (y)) + \
107 (1L << (MAD_F_SCALEBITS - 1))) >> MAD_F_SCALEBITS))
108# else
109# define mad_f_mul(x, y) \
110 ((mad_fixed_t) (((signed long long) (x) * (y)) >> MAD_F_SCALEBITS))
111# endif
112
113# define MAD_F_SCALEBITS MAD_F_FRACBITS
114
115/* --- Intel --------------------------------------------------------------- */
116
117# elif defined(FPM_INTEL)
118
119/*
120 * This Intel version is fast and accurate; the disposition of the least
121 * significant bit depends on OPT_ACCURACY via mad_f_scale64().
122 */
123# define MAD_F_MLX(hi, lo, x, y) \
124 asm ("imull %3" \
125 : "=a" (lo), "=d" (hi) \
126 : "%a" (x), "rm" (y) \
127 : "cc")
128
129# if defined(OPT_ACCURACY)
130/*
131 * This gives best accuracy but is not very fast.
132 */
133# define MAD_F_MLA(hi, lo, x, y) \
134 ({ mad_fixed64hi_t __hi; \
135 mad_fixed64lo_t __lo; \
136 MAD_F_MLX(__hi, __lo, (x), (y)); \
137 asm ("addl %2,%0\n\t" \
138 "adcl %3,%1" \
139 : "=rm" (lo), "=rm" (hi) \
140 : "r" (__lo), "r" (__hi), "0" (lo), "1" (hi) \
141 : "cc"); \
142 })
143# endif /* OPT_ACCURACY */
144
145# if defined(OPT_ACCURACY)
146/*
147 * Surprisingly, this is faster than SHRD followed by ADC.
148 */
149# define mad_f_scale64(hi, lo) \
150 ({ mad_fixed64hi_t __hi_; \
151 mad_fixed64lo_t __lo_; \
152 mad_fixed_t __result; \
153 asm ("addl %4,%2\n\t" \
154 "adcl %5,%3" \
155 : "=rm" (__lo_), "=rm" (__hi_) \
156 : "0" (lo), "1" (hi), \
157 "ir" (1L << (MAD_F_SCALEBITS - 1)), "ir" (0) \
158 : "cc"); \
159 asm ("shrdl %3,%2,%1" \
160 : "=rm" (__result) \
161 : "0" (__lo_), "r" (__hi_), "I" (MAD_F_SCALEBITS) \
162 : "cc"); \
163 __result; \
164 })
165# else
166# define mad_f_scale64(hi, lo) \
167 ({ mad_fixed_t __result; \
168 asm ("shrdl %3,%2,%1" \
169 : "=rm" (__result) \
170 : "0" (lo), "r" (hi), "I" (MAD_F_SCALEBITS) \
171 : "cc"); \
172 __result; \
173 })
174# endif /* OPT_ACCURACY */
175
176# define MAD_F_SCALEBITS MAD_F_FRACBITS
177
178/* --- ARM ----------------------------------------------------------------- */
179
180# elif defined(FPM_ARM)
181
182/*
183 * This ARM V4 version is as accurate as FPM_64BIT but much faster. The
184 * least significant bit is properly rounded at no CPU cycle cost!
185 */
186# if 1
187/*
188 * There's a bug somewhere, possibly in the compiler, that sometimes makes
189 * this necessary instead of the default implementation via MAD_F_MLX and
190 * mad_f_scale64. It may be related to the use (or lack) of
191 * -finline-functions and/or -fstrength-reduce.
192 *
193 * This is also apparently faster than MAD_F_MLX/mad_f_scale64.
194 */
195# define mad_f_mul(x, y) \
196 ({ mad_fixed64hi_t __hi; \
197 mad_fixed64lo_t __lo; \
198 mad_fixed_t __result; \
199 asm ("smull%0, %1, %3, %4\n\t" \
200 "movs%0, %0, lsr %5\n\t" \
201 "adc%2, %0, %1, lsl %6" \
202 : "=&r" (__lo), "=&r" (__hi), "=r" (__result) \
203 : "%r" (x), "r" (y), \
204 "M" (MAD_F_SCALEBITS), "M" (32 - MAD_F_SCALEBITS) \
205 : "cc"); \
206 __result; \
207 })
208# endif
209
210# define MAD_F_MLX(hi, lo, x, y) \
211 asm ("smull%0, %1, %2, %3" \
212 : "=&r" (lo), "=&r" (hi) \
213 : "%r" (x), "r" (y))
214
215# define MAD_F_MLA(hi, lo, x, y) \
216 asm ("smlal%0, %1, %2, %3" \
217 : "+r" (lo), "+r" (hi) \
218 : "%r" (x), "r" (y))
219
220# define mad_f_scale64(hi, lo) \
221 ({ mad_fixed_t __result; \
222 asm ("movs%0, %1, lsr %3\n\t" \
223 "adc%0, %0, %2, lsl %4" \
224 : "=r" (__result) \
225 : "r" (lo), "r" (hi), \
226 "M" (MAD_F_SCALEBITS), "M" (32 - MAD_F_SCALEBITS) \
227 : "cc"); \
228 __result; \
229 })
230
231# define MAD_F_SCALEBITS MAD_F_FRACBITS
232
233/* --- MIPS ---------------------------------------------------------------- */
234
235# elif defined(FPM_MIPS)
236
237/*
238 * This MIPS version is fast and accurate; the disposition of the least
239 * significant bit depends on OPT_ACCURACY via mad_f_scale64().
240 */
241# define MAD_F_MLX(hi, lo, x, y) \
242 asm ("mult%2,%3" \
243 : "=l" (lo), "=h" (hi) \
244 : "%r" (x), "r" (y))
245
246# if defined(HAVE_MADD_ASM)
247# define MAD_F_MLA(hi, lo, x, y) \
248 asm ("madd%2,%3" \
249 : "+l" (lo), "+h" (hi) \
250 : "%r" (x), "r" (y))
251# elif defined(HAVE_MADD16_ASM)
252/*
253 * This loses significant accuracy due to the 16-bit integer limit in the
254 * multiply/accumulate instruction.
255 */
256# define MAD_F_ML0(hi, lo, x, y) \
257 asm ("mult%2,%3" \
258 : "=l" (lo), "=h" (hi) \
259 : "%r" ((x) >> 12), "r" ((y) >> 16))
260# define MAD_F_MLA(hi, lo, x, y) \
261 asm ("madd16%2,%3" \
262 : "+l" (lo), "+h" (hi) \
263 : "%r" ((x) >> 12), "r" ((y) >> 16))
264# define MAD_F_MLZ(hi, lo) ((mad_fixed_t) (lo))
265# endif
266
267# if defined(OPT_SPEED)
268# define mad_f_scale64(hi, lo) \
269 ((mad_fixed_t) ((hi) << (32 - MAD_F_SCALEBITS)))
270# define MAD_F_SCALEBITS MAD_F_FRACBITS
271# endif
272
273/* --- SPARC --------------------------------------------------------------- */
274
275# elif defined(FPM_SPARC)
276
277/*
278 * This SPARC V8 version is fast and accurate; the disposition of the least
279 * significant bit depends on OPT_ACCURACY via mad_f_scale64().
280 */
281# define MAD_F_MLX(hi, lo, x, y) \
282 asm ("smul %2, %3, %0\n\t" \
283 "rd %%y, %1" \
284 : "=r" (lo), "=r" (hi) \
285 : "%r" (x), "rI" (y))
286
287/* --- PowerPC ------------------------------------------------------------- */
288
289# elif defined(FPM_PPC)
290
291/*
292 * This PowerPC version is tuned for the 4xx embedded processors. It is
293 * effectively a tuned version of FPM_64BIT. It is a little faster and just
294 * as accurate. The disposition of the least significant bit depends on
295 * OPT_ACCURACY via mad_f_scale64().
296 */
297# define MAD_F_MLX(hi, lo, x, y) \
298 asm ("mulhw %1, %2, %3\n\t" \
299 "mullw %0, %2, %3" \
300 : "=&r" (lo), "=&r" (hi) \
301 : "%r" (x), "r" (y))
302
303# define MAD_F_MLA(hi, lo, x, y) \
304 ({ mad_fixed64hi_t __hi; \
305 mad_fixed64lo_t __lo; \
306 MAD_F_MLX(__hi, __lo, (x), (y)); \
307 asm ("addc %0, %2, %3\n\t" \
308 "adde %1, %4, %5" \
309 : "=r" (lo), "=r" (hi) \
310 : "%r" (__lo), "0" (lo), "%r" (__hi), "1" (hi)); \
311 })
312
313# if defined(OPT_ACCURACY)
314/*
315 * This is accurate and ~2 - 2.5 times slower than the unrounded version.
316 *
317 * The __volatile__ improves the generated code by another 5% (fewer spills
318 * to memory); eventually they should be removed.
319 */
320# define mad_f_scale64(hi, lo) \
321 ({ mad_fixed_t __result; \
322 mad_fixed64hi_t __hi_; \
323 mad_fixed64lo_t __lo_; \
324 asm __volatile__ ("addc %0, %2, %4\n\t" \
325 "addze %1, %3" \
326 : "=r" (__lo_), "=r" (__hi_) \
327 : "r" (lo), "r" (hi), "r" (1 << (MAD_F_SCALEBITS - 1))); \
328 asm __volatile__ ("rlwinm %0, %2,32-%3,0,%3-1\n\t" \
329 "rlwimi %0, %1,32-%3,%3,31" \
330 : "=&r" (__result) \
331 : "r" (__lo_), "r" (__hi_), "I" (MAD_F_SCALEBITS)); \
332 __result; \
333 })
334# else
335# define mad_f_scale64(hi, lo) \
336 ({ mad_fixed_t __result; \
337 asm ("rlwinm %0, %2,32-%3,0,%3-1\n\t" \
338 "rlwimi %0, %1,32-%3,%3,31" \
339 : "=r" (__result) \
340 : "r" (lo), "r" (hi), "I" (MAD_F_SCALEBITS)); \
341 __result; \
342 })
343# endif /* OPT_ACCURACY */
344
345# define MAD_F_SCALEBITS MAD_F_FRACBITS
346
347/* --- Default ------------------------------------------------------------- */
348
349# elif defined(FPM_DEFAULT)
350
351/*
352 * This version is the most portable but it loses significant accuracy.
353 * Furthermore, accuracy is biased against the second argument, so care
354 * should be taken when ordering operands.
355 *
356 * The scale factors are constant as this is not used with SSO.
357 *
358 * Pre-rounding is required to stay within the limits of compliance.
359 */
360 # define mad_f_mul(x, y)((((x) + (1L << 11)) >> 12) * \
361 (((y) + (1L << 15)) >> 16))
362
363/* ------------------------------------------------------------------------- */
364
365# else
366# error "no FPM selected"
367# endif
368
369/* default implementations */
370
371# if !defined(mad_f_mul)
372# define mad_f_mul(x, y) \
373 ({ mad_fixed64hi_t __hi; \
374 mad_fixed64lo_t __lo; \
375 MAD_F_MLX(__hi, __lo, (x), (y)); \
376 mad_f_scale64(__hi, __lo); \
377 })
378# endif
379
380# if !defined(MAD_F_MLA)
381 # define MAD_F_ML0(hi, lo, x, y)((lo) = mad_f_mul((x), (y)))
382 # define MAD_F_MLA(hi, lo, x, y)((lo) += mad_f_mul((x), (y)))
383 # define MAD_F_MLZ(hi, lo) ((void) (hi), (mad_fixed_t) (lo))
384# endif
385
386# if !defined(MAD_F_ML0)
387 # define MAD_F_ML0(hi, lo, x, y)MAD_F_MLX((hi), (lo), (x), (y))
388# endif
389
390# if !defined(MAD_F_MLZ)
391 # define MAD_F_MLZ(hi, lo) mad_f_scale64((hi), (lo))
392# endif
393
394# if !defined(mad_f_scale64)
395# if defined(OPT_ACCURACY)
396# define mad_f_scale64(hi, lo) \
397 ((((mad_fixed_t) \
398 (((hi) << (32 - (MAD_F_SCALEBITS - 1))) | \
399 ((lo) >> (MAD_F_SCALEBITS - 1)))) + 1) >> 1)
400# else
401# define mad_f_scale64(hi, lo) \
402 ((mad_fixed_t) \
403 (((hi) << (32 - MAD_F_SCALEBITS)) | \
404 ((lo) >> MAD_F_SCALEBITS)))
405# endif
406# define MAD_F_SCALEBITS MAD_F_FRACBITS
407# endif
408
409/* miscellaneous C routines */
410
411mad_fixed_t mad_f_abs(mad_fixed_t);
412
413# endif
diff --git a/core/multimedia/opieplayer/libmad/frame.c b/core/multimedia/opieplayer/libmad/frame.c
new file mode 100644
index 0000000..4ebb80c
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/frame.c
@@ -0,0 +1,499 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifdef HAVE_CONFIG_H
23# include "libmad_config.h"
24# endif
25
26# include "libmad_global.h"
27
28# include <stdlib.h>
29
30# include "bit.h"
31# include "stream.h"
32# include "frame.h"
33# include "timer.h"
34# include "layer12.h"
35# include "layer3.h"
36
37static
38unsigned long const bitrate_table[5][15] = {
39 /* MPEG-1 */
40 { 0, 32000, 64000, 96000, 128000, 160000, 192000, 224000, /* Layer I */
41 256000, 288000, 320000, 352000, 384000, 416000, 448000 },
42 { 0, 32000, 48000, 56000, 64000, 80000, 96000, 112000, /* Layer II */
43 128000, 160000, 192000, 224000, 256000, 320000, 384000 },
44 { 0, 32000, 40000, 48000, 56000, 64000, 80000, 96000, /* Layer III */
45 112000, 128000, 160000, 192000, 224000, 256000, 320000 },
46
47 /* MPEG-2 LSF */
48 { 0, 32000, 48000, 56000, 64000, 80000, 96000, 112000, /* Layer I */
49 128000, 144000, 160000, 176000, 192000, 224000, 256000 },
50 { 0, 8000, 16000, 24000, 32000, 40000, 48000, 56000, /* Layers */
51 64000, 80000, 96000, 112000, 128000, 144000, 160000 } /* II & III */
52};
53
54static
55unsigned int const samplerate_table[3] = { 44100, 48000, 32000 };
56
57static
58int (*const decoder_table[3])(struct mad_stream *, struct mad_frame *) = {
59 mad_layer_I,
60 mad_layer_II,
61 mad_layer_III
62};
63
64/*
65 * NAME:header->init()
66 * DESCRIPTION:initialize header struct
67 */
68void mad_header_init(struct mad_header *header)
69{
70 header->layer = 0;
71 header->mode = 0;
72 header->mode_extension = 0;
73 header->emphasis = 0;
74
75 header->bitrate = 0;
76 header->samplerate = 0;
77
78 header->crc_check = 0;
79 header->crc_target = 0;
80
81 header->flags = 0;
82 header->private_bits = 0;
83
84 header->duration = mad_timer_zero;
85}
86
87/*
88 * NAME:frame->init()
89 * DESCRIPTION:initialize frame struct
90 */
91void mad_frame_init(struct mad_frame *frame)
92{
93 mad_header_init(&frame->header);
94
95 frame->options = 0;
96
97 frame->overlap = 0;
98 mad_frame_mute(frame);
99}
100
101/*
102 * NAME:frame->finish()
103 * DESCRIPTION:deallocate any dynamic memory associated with frame
104 */
105void mad_frame_finish(struct mad_frame *frame)
106{
107 mad_header_finish(&frame->header);
108
109 if (frame->overlap) {
110 free(frame->overlap);
111 frame->overlap = 0;
112 }
113}
114
115/*
116 * NAME:decode_header()
117 * DESCRIPTION:read header data and following CRC word
118 */
119static
120int decode_header(struct mad_header *header, struct mad_stream *stream)
121{
122 unsigned int index;
123
124 header->flags = 0;
125 header->private_bits = 0;
126
127 /* header() */
128
129 /* syncword */
130 mad_bit_skip(&stream->ptr, 11);
131
132 /* MPEG 2.5 indicator (really part of syncword) */
133 if (mad_bit_read(&stream->ptr, 1) == 0)
134 header->flags |= MAD_FLAG_MPEG_2_5_EXT;
135
136 /* ID */
137 if (mad_bit_read(&stream->ptr, 1) == 0)
138 header->flags |= MAD_FLAG_LSF_EXT;
139 else if (header->flags & MAD_FLAG_MPEG_2_5_EXT) {
140 stream->error = MAD_ERROR_LOSTSYNC;
141 return -1;
142 }
143
144 /* layer */
145 header->layer = 4 - mad_bit_read(&stream->ptr, 2);
146
147 if (header->layer == 4) {
148 stream->error = MAD_ERROR_BADLAYER;
149 return -1;
150 }
151
152 /* protection_bit */
153 if (mad_bit_read(&stream->ptr, 1) == 0) {
154 header->flags |= MAD_FLAG_PROTECTION;
155 header->crc_check = mad_bit_crc(stream->ptr, 16, 0xffff);
156 }
157
158 /* bitrate_index */
159 index = mad_bit_read(&stream->ptr, 4);
160
161 if (index == 15) {
162 stream->error = MAD_ERROR_BADBITRATE;
163 return -1;
164 }
165
166 if (header->flags & MAD_FLAG_LSF_EXT)
167 header->bitrate = bitrate_table[3 + (header->layer >> 1)][index];
168 else
169 header->bitrate = bitrate_table[header->layer - 1][index];
170
171 /* sampling_frequency */
172 index = mad_bit_read(&stream->ptr, 2);
173
174 if (index == 3) {
175 stream->error = MAD_ERROR_BADSAMPLERATE;
176 return -1;
177 }
178
179 header->samplerate = samplerate_table[index];
180
181 if (header->flags & MAD_FLAG_LSF_EXT) {
182 header->samplerate /= 2;
183
184 if (header->flags & MAD_FLAG_MPEG_2_5_EXT)
185 header->samplerate /= 2;
186 }
187
188 /* padding_bit */
189 if (mad_bit_read(&stream->ptr, 1))
190 header->flags |= MAD_FLAG_PADDING;
191
192 /* private_bit */
193 if (mad_bit_read(&stream->ptr, 1))
194 header->private_bits |= MAD_PRIVATE_HEADER;
195
196 /* mode */
197 header->mode = 3 - mad_bit_read(&stream->ptr, 2);
198
199 /* mode_extension */
200 header->mode_extension = mad_bit_read(&stream->ptr, 2);
201
202 /* copyright */
203 if (mad_bit_read(&stream->ptr, 1))
204 header->flags |= MAD_FLAG_COPYRIGHT;
205
206 /* original/copy */
207 if (mad_bit_read(&stream->ptr, 1))
208 header->flags |= MAD_FLAG_ORIGINAL;
209
210 /* emphasis */
211 header->emphasis = mad_bit_read(&stream->ptr, 2);
212
213 if (header->emphasis == 2) {
214 stream->error = MAD_ERROR_BADEMPHASIS;
215 return -1;
216 }
217
218 /* error_check() */
219
220 /* crc_check */
221 if (header->flags & MAD_FLAG_PROTECTION)
222 header->crc_target = mad_bit_read(&stream->ptr, 16);
223
224 return 0;
225}
226
227/*
228 * NAME:free_bitrate()
229 * DESCRIPTION:attempt to discover the bitstream's free bitrate
230 */
231static
232int free_bitrate(struct mad_stream *stream, struct mad_header const *header)
233{
234 struct mad_bitptr keep_ptr;
235 unsigned long rate = 0;
236 unsigned int pad_slot, slots_per_frame;
237 unsigned char const *ptr = 0;
238
239 keep_ptr = stream->ptr;
240
241 pad_slot = (header->flags & MAD_FLAG_PADDING) ? 1 : 0;
242 slots_per_frame = (header->layer == MAD_LAYER_III &&
243 (header->flags & MAD_FLAG_LSF_EXT)) ? 72 : 144;
244
245 while (mad_stream_sync(stream) == 0) {
246 struct mad_stream peek_stream;
247 struct mad_header peek_header;
248
249 peek_stream = *stream;
250 peek_header = *header;
251
252 if (decode_header(&peek_header, &peek_stream) == 0 &&
253 peek_header.layer == header->layer &&
254 peek_header.samplerate == header->samplerate) {
255 unsigned int N;
256
257 ptr = mad_bit_nextbyte(&stream->ptr);
258
259 N = ptr - stream->this_frame;
260
261 if (header->layer == MAD_LAYER_I) {
262 rate = (unsigned long) header->samplerate *
263 (N - 4 * pad_slot + 4) / 48 / 1000;
264 }
265 else {
266 rate = (unsigned long) header->samplerate *
267 (N - pad_slot + 1) / slots_per_frame / 1000;
268 }
269
270 if (rate >= 8)
271 break;
272 }
273
274 mad_bit_skip(&stream->ptr, 8);
275 }
276
277 stream->ptr = keep_ptr;
278
279 if (rate < 8 || (header->layer == MAD_LAYER_III && rate > 640)) {
280 stream->error = MAD_ERROR_LOSTSYNC;
281 return -1;
282 }
283
284 stream->freerate = rate * 1000;
285
286# if 0 && defined(DEBUG)
287 fprintf(stderr, "free bitrate == %lu\n", stream->freerate);
288# endif
289
290 return 0;
291}
292
293/*
294 * NAME:header->decode()
295 * DESCRIPTION:read the next frame header from the stream
296 */
297int mad_header_decode(struct mad_header *header, struct mad_stream *stream)
298{
299 register unsigned char const *ptr, *end;
300 unsigned int pad_slot, N;
301
302 ptr = stream->next_frame;
303 end = stream->bufend;
304
305 if (ptr == 0) {
306 stream->error = MAD_ERROR_BUFPTR;
307 goto fail;
308 }
309
310 /* stream skip */
311 if (stream->skiplen) {
312 if (!stream->sync)
313 ptr = stream->this_frame;
314
315 if (end - ptr < stream->skiplen) {
316 stream->skiplen -= end - ptr;
317 stream->next_frame = end;
318
319 stream->error = MAD_ERROR_BUFLEN;
320 goto fail;
321 }
322
323 ptr += stream->skiplen;
324 stream->skiplen = 0;
325
326 stream->sync = 1;
327 }
328
329 sync:
330 /* synchronize */
331 if (stream->sync) {
332 if (end - ptr < MAD_BUFFER_GUARD) {
333 stream->next_frame = ptr;
334
335 stream->error = MAD_ERROR_BUFLEN;
336 goto fail;
337 }
338 else if (!(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0)) {
339 /* mark point where frame sync word was expected */
340 stream->this_frame = ptr;
341 stream->next_frame = ptr + 1;
342
343 stream->error = MAD_ERROR_LOSTSYNC;
344 goto fail;
345 }
346 }
347 else {
348 mad_bit_init(&stream->ptr, ptr);
349
350 if (mad_stream_sync(stream) == -1) {
351 if (end - stream->next_frame >= MAD_BUFFER_GUARD)
352 stream->next_frame = end - MAD_BUFFER_GUARD;
353
354 stream->error = MAD_ERROR_BUFLEN;
355 goto fail;
356 }
357
358 ptr = mad_bit_nextbyte(&stream->ptr);
359 }
360
361 /* begin processing */
362 stream->this_frame = ptr;
363 stream->next_frame = ptr + 1; /* possibly bogus sync word */
364
365 mad_bit_init(&stream->ptr, stream->this_frame);
366
367 if (decode_header(header, stream) == -1)
368 goto fail;
369
370 /* calculate frame duration */
371 mad_timer_set(&header->duration, 0,
372 32 * MAD_NSBSAMPLES(header), header->samplerate);
373
374 /* calculate free bit rate */
375 if (header->bitrate == 0) {
376 if ((!stream->sync || !stream->freerate) &&
377 free_bitrate(stream, header) == -1)
378 goto fail;
379
380 header->bitrate = stream->freerate;
381 header->flags |= MAD_FLAG_FREEFORMAT;
382 }
383
384 /* calculate beginning of next frame */
385 pad_slot = (header->flags & MAD_FLAG_PADDING) ? 1 : 0;
386
387 if (header->layer == MAD_LAYER_I)
388 N = ((12 * header->bitrate / header->samplerate) + pad_slot) * 4;
389 else {
390 unsigned int slots_per_frame;
391
392 slots_per_frame = (header->layer == MAD_LAYER_III &&
393 (header->flags & MAD_FLAG_LSF_EXT)) ? 72 : 144;
394
395 N = (slots_per_frame * header->bitrate / header->samplerate) + pad_slot;
396 }
397
398 /* verify there is enough data left in buffer to decode this frame */
399 if (N + MAD_BUFFER_GUARD > end - stream->this_frame) {
400 stream->next_frame = stream->this_frame;
401
402 stream->error = MAD_ERROR_BUFLEN;
403 goto fail;
404 }
405
406 stream->next_frame = stream->this_frame + N;
407
408 if (!stream->sync) {
409 /* check that a valid frame header follows this frame */
410
411 ptr = stream->next_frame;
412 if (!(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0)) {
413 ptr = stream->next_frame = stream->this_frame + 1;
414 goto sync;
415 }
416
417 stream->sync = 1;
418 }
419
420 header->flags |= MAD_FLAG_INCOMPLETE;
421
422 return 0;
423
424 fail:
425 stream->sync = 0;
426
427 return -1;
428}
429
430/*
431 * NAME:frame->decode()
432 * DESCRIPTION:decode a single frame from a bitstream
433 */
434int mad_frame_decode(struct mad_frame *frame, struct mad_stream *stream)
435{
436 frame->options = stream->options;
437
438 /* header() */
439 /* error_check() */
440
441 if (!(frame->header.flags & MAD_FLAG_INCOMPLETE) &&
442 mad_header_decode(&frame->header, stream) == -1)
443 goto fail;
444
445 /* audio_data() */
446
447 frame->header.flags &= ~MAD_FLAG_INCOMPLETE;
448
449 if (decoder_table[frame->header.layer - 1](stream, frame) == -1) {
450 if (!MAD_RECOVERABLE(stream->error))
451 stream->next_frame = stream->this_frame;
452
453 goto fail;
454 }
455
456 /* ancillary_data() */
457
458 if (frame->header.layer != MAD_LAYER_III) {
459 struct mad_bitptr next_frame;
460
461 mad_bit_init(&next_frame, stream->next_frame);
462
463 stream->anc_ptr = stream->ptr;
464 stream->anc_bitlen = mad_bit_length(&stream->ptr, &next_frame);
465
466 mad_bit_finish(&next_frame);
467 }
468
469 return 0;
470
471 fail:
472 stream->anc_bitlen = 0;
473 return -1;
474}
475
476/*
477 * NAME:frame->mute()
478 * DESCRIPTION:zero all subband values so the frame becomes silent
479 */
480void mad_frame_mute(struct mad_frame *frame)
481{
482 unsigned int s, sb;
483
484 for (s = 0; s < 36; ++s) {
485 for (sb = 0; sb < 32; ++sb) {
486 frame->sbsample[0][s][sb] =
487 frame->sbsample[1][s][sb] = 0;
488 }
489 }
490
491 if (frame->overlap) {
492 for (s = 0; s < 18; ++s) {
493 for (sb = 0; sb < 32; ++sb) {
494 (*frame->overlap)[0][sb][s] =
495 (*frame->overlap)[1][sb][s] = 0;
496 }
497 }
498 }
499}
diff --git a/core/multimedia/opieplayer/libmad/frame.h b/core/multimedia/opieplayer/libmad/frame.h
new file mode 100644
index 0000000..e88d0c8
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/frame.h
@@ -0,0 +1,115 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifndef LIBMAD_FRAME_H
23# define LIBMAD_FRAME_H
24
25# include "fixed.h"
26# include "timer.h"
27# include "stream.h"
28
29enum mad_layer {
30 MAD_LAYER_I = 1, /* Layer I */
31 MAD_LAYER_II = 2, /* Layer II */
32 MAD_LAYER_III = 3 /* Layer III */
33};
34
35enum mad_mode {
36 MAD_MODE_SINGLE_CHANNEL = 0, /* single channel */
37 MAD_MODE_DUAL_CHANNEL = 1, /* dual channel */
38 MAD_MODE_JOINT_STEREO = 2, /* joint (MS/intensity) stereo */
39 MAD_MODE_STEREO = 3 /* normal LR stereo */
40};
41
42enum mad_emphasis {
43 MAD_EMPHASIS_NONE = 0, /* no emphasis */
44 MAD_EMPHASIS_50_15_US = 1, /* 50/15 microseconds emphasis */
45 MAD_EMPHASIS_CCITT_J_17 = 3 /* CCITT J.17 emphasis */
46};
47
48struct mad_frame {
49 struct mad_header {
50 enum mad_layer layer; /* audio layer (1, 2, or 3) */
51 enum mad_mode mode; /* channel mode (see above) */
52 int mode_extension; /* additional mode info */
53 enum mad_emphasis emphasis; /* de-emphasis to use (see above) */
54
55 unsigned long bitrate; /* stream bitrate (bps) */
56 unsigned int samplerate; /* sampling frequency (Hz) */
57
58 unsigned short crc_check; /* frame CRC accumulator */
59 unsigned short crc_target; /* final target CRC checksum */
60
61 int flags; /* flags (see below) */
62 int private_bits; /* private bits (see below) */
63
64 mad_timer_t duration; /* audio playing time of frame */
65 } header;
66
67 int options; /* decoding options (from stream) */
68
69 mad_fixed_t sbsample[2][36][32];/* synthesis subband filter samples */
70 mad_fixed_t (*overlap)[2][32][18];/* Layer III block overlap data */
71};
72
73 # define MAD_NCHANNELS(header) ((header)->mode ? 2 : 1)
74# define MAD_NSBSAMPLES(header) \
75 ((header)->layer == MAD_LAYER_I ? 12 : \
76 (((header)->layer == MAD_LAYER_III && \
77 ((header)->flags & MAD_FLAG_LSF_EXT)) ? 18 : 36))
78
79enum {
80 MAD_FLAG_NPRIVATE_III = 0x0007,/* number of Layer III private bits */
81 MAD_FLAG_INCOMPLETE = 0x0008,/* header but not data is decoded */
82
83 MAD_FLAG_PROTECTION = 0x0010,/* frame has CRC protection */
84 MAD_FLAG_COPYRIGHT = 0x0020,/* frame is copyright */
85 MAD_FLAG_ORIGINAL = 0x0040,/* frame is original (else copy) */
86 MAD_FLAG_PADDING = 0x0080,/* frame has additional slot */
87
88 MAD_FLAG_I_STEREO = 0x0100,/* uses intensity joint stereo */
89 MAD_FLAG_MS_STEREO = 0x0200,/* uses middle/side joint stereo */
90 MAD_FLAG_FREEFORMAT = 0x0400,/* uses free format bitrate */
91
92 MAD_FLAG_LSF_EXT = 0x1000,/* lower sampling freq. extension */
93 MAD_FLAG_MC_EXT = 0x2000,/* multichannel audio extension */
94 MAD_FLAG_MPEG_2_5_EXT = 0x4000/* MPEG 2.5 (unofficial) extension */
95};
96
97enum {
98 MAD_PRIVATE_HEADER = 0x0100,/* header private bit */
99 MAD_PRIVATE_III = 0x001f/* Layer III private bits (up to 5) */
100};
101
102void mad_header_init(struct mad_header *);
103
104# define mad_header_finish(header) /* nothing */
105
106int mad_header_decode(struct mad_header *, struct mad_stream *);
107
108void mad_frame_init(struct mad_frame *);
109void mad_frame_finish(struct mad_frame *);
110
111int mad_frame_decode(struct mad_frame *, struct mad_stream *);
112
113void mad_frame_mute(struct mad_frame *);
114
115# endif
diff --git a/core/multimedia/opieplayer/libmad/huffman.c b/core/multimedia/opieplayer/libmad/huffman.c
new file mode 100644
index 0000000..8ec9499
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/huffman.c
@@ -0,0 +1,3087 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifdef HAVE_CONFIG_H
23# include "libmad_config.h"
24# endif
25
26# include "libmad_global.h"
27
28# include "huffman.h"
29
30/*
31 * These are the Huffman code words for Layer III.
32 * The data for these tables are derived from Table B.7 of ISO/IEC 11172-3.
33 *
34 * These tables support decoding up to 4 Huffman code bits at a time.
35 */
36
37 # define V(v, w, x, y, hlen){ { 1, hlen, v, w, x, y } }
38 # define PTR(offs, bits){ ptr: { 0, bits, offs } }
39
40static
41union huffquad const hufftabA[] = {
42 /* 0000 */ PTR(16, 2),
43 /* 0001 */ PTR(20, 2),
44 /* 0010 */ PTR(24, 1),
45 /* 0011 */ PTR(26, 1),
46 /* 0100 */ V(0, 0, 1, 0, 4),
47 /* 0101 */ V(0, 0, 0, 1, 4),
48 /* 0110 */ V(0, 1, 0, 0, 4),
49 /* 0111 */ V(1, 0, 0, 0, 4),
50 /* 1000 */ V(0, 0, 0, 0, 1),
51 /* 1001 */ V(0, 0, 0, 0, 1),
52 /* 1010 */ V(0, 0, 0, 0, 1),
53 /* 1011 */ V(0, 0, 0, 0, 1),
54 /* 1100 */ V(0, 0, 0, 0, 1),
55 /* 1101 */ V(0, 0, 0, 0, 1),
56 /* 1110 */ V(0, 0, 0, 0, 1),
57 /* 1111 */ V(0, 0, 0, 0, 1),
58
59 /* 0000 ... */
60 /* 00 */ V(1, 0, 1, 1, 2),/* 16 */
61 /* 01 */ V(1, 1, 1, 1, 2),
62 /* 10 */ V(1, 1, 0, 1, 2),
63 /* 11 */ V(1, 1, 1, 0, 2),
64
65 /* 0001 ... */
66 /* 00 */ V(0, 1, 1, 1, 2),/* 20 */
67 /* 01 */ V(0, 1, 0, 1, 2),
68 /* 10 */ V(1, 0, 0, 1, 1),
69 /* 11 */ V(1, 0, 0, 1, 1),
70
71 /* 0010 ... */
72 /* 0 */ V(0, 1, 1, 0, 1),/* 24 */
73 /* 1 */ V(0, 0, 1, 1, 1),
74
75 /* 0011 ... */
76 /* 0 */ V(1, 0, 1, 0, 1),/* 26 */
77 /* 1 */ V(1, 1, 0, 0, 1)
78};
79
80static
81union huffquad const hufftabB[] = {
82 /* 0000 */ V(1, 1, 1, 1, 4),
83 /* 0001 */ V(1, 1, 1, 0, 4),
84 /* 0010 */ V(1, 1, 0, 1, 4),
85 /* 0011 */ V(1, 1, 0, 0, 4),
86 /* 0100 */ V(1, 0, 1, 1, 4),
87 /* 0101 */ V(1, 0, 1, 0, 4),
88 /* 0110 */ V(1, 0, 0, 1, 4),
89 /* 0111 */ V(1, 0, 0, 0, 4),
90 /* 1000 */ V(0, 1, 1, 1, 4),
91 /* 1001 */ V(0, 1, 1, 0, 4),
92 /* 1010 */ V(0, 1, 0, 1, 4),
93 /* 1011 */ V(0, 1, 0, 0, 4),
94 /* 1100 */ V(0, 0, 1, 1, 4),
95 /* 1101 */ V(0, 0, 1, 0, 4),
96 /* 1110 */ V(0, 0, 0, 1, 4),
97 /* 1111 */ V(0, 0, 0, 0, 4)
98};
99
100# undef V
101# undef PTR
102
103 # define V(x, y, hlen) { { 1, hlen, x, y } }
104 # define PTR(offs, bits){ ptr: { 0, bits, offs } }
105
106static
107union huffpair const hufftab0[] = {
108 /* */ V(0, 0, 0)
109};
110
111static
112union huffpair const hufftab1[] = {
113 /* 000 */ V(1, 1, 3),
114 /* 001 */ V(0, 1, 3),
115 /* 010 */ V(1, 0, 2),
116 /* 011 */ V(1, 0, 2),
117 /* 100 */ V(0, 0, 1),
118 /* 101 */ V(0, 0, 1),
119 /* 110 */ V(0, 0, 1),
120 /* 111 */ V(0, 0, 1)
121};
122
123static
124union huffpair const hufftab2[] = {
125 /* 000 */ PTR(8, 3),
126 /* 001 */ V(1, 1, 3),
127 /* 010 */ V(0, 1, 3),
128 /* 011 */ V(1, 0, 3),
129 /* 100 */ V(0, 0, 1),
130 /* 101 */ V(0, 0, 1),
131 /* 110 */ V(0, 0, 1),
132 /* 111 */ V(0, 0, 1),
133
134 /* 000 ... */
135 /* 000 */ V(2, 2, 3),/* 8 */
136 /* 001 */ V(0, 2, 3),
137 /* 010 */ V(1, 2, 2),
138 /* 011 */ V(1, 2, 2),
139 /* 100 */ V(2, 1, 2),
140 /* 101 */ V(2, 1, 2),
141 /* 110 */ V(2, 0, 2),
142 /* 111 */ V(2, 0, 2)
143};
144
145static
146union huffpair const hufftab3[] = {
147 /* 000 */ PTR(8, 3),
148 /* 001 */ V(1, 0, 3),
149 /* 010 */ V(1, 1, 2),
150 /* 011 */ V(1, 1, 2),
151 /* 100 */ V(0, 1, 2),
152 /* 101 */ V(0, 1, 2),
153 /* 110 */ V(0, 0, 2),
154 /* 111 */ V(0, 0, 2),
155
156 /* 000 ... */
157 /* 000 */ V(2, 2, 3),/* 8 */
158 /* 001 */ V(0, 2, 3),
159 /* 010 */ V(1, 2, 2),
160 /* 011 */ V(1, 2, 2),
161 /* 100 */ V(2, 1, 2),
162 /* 101 */ V(2, 1, 2),
163 /* 110 */ V(2, 0, 2),
164 /* 111 */ V(2, 0, 2)
165};
166
167static
168union huffpair const hufftab5[] = {
169 /* 000 */ PTR(8, 4),
170 /* 001 */ V(1, 1, 3),
171 /* 010 */ V(0, 1, 3),
172 /* 011 */ V(1, 0, 3),
173 /* 100 */ V(0, 0, 1),
174 /* 101 */ V(0, 0, 1),
175 /* 110 */ V(0, 0, 1),
176 /* 111 */ V(0, 0, 1),
177
178 /* 000 ... */
179 /* 0000 */ PTR(24, 1),/* 8 */
180 /* 0001 */ V(3, 2, 4),
181 /* 0010 */ V(3, 1, 3),
182 /* 0011 */ V(3, 1, 3),
183 /* 0100 */ V(1, 3, 4),
184 /* 0101 */ V(0, 3, 4),
185 /* 0110 */ V(3, 0, 4),
186 /* 0111 */ V(2, 2, 4),
187 /* 1000 */ V(1, 2, 3),
188 /* 1001 */ V(1, 2, 3),
189 /* 1010 */ V(2, 1, 3),
190 /* 1011 */ V(2, 1, 3),
191 /* 1100 */ V(0, 2, 3),
192 /* 1101 */ V(0, 2, 3),
193 /* 1110 */ V(2, 0, 3),
194 /* 1111 */ V(2, 0, 3),
195
196 /* 000 0000 ... */
197 /* 0 */ V(3, 3, 1),/* 24 */
198 /* 1 */ V(2, 3, 1)
199};
200
201static
202union huffpair const hufftab6[] = {
203 /* 0000 */ PTR(16, 3),
204 /* 0001 */ PTR(24, 1),
205 /* 0010 */ PTR(26, 1),
206 /* 0011 */ V(1, 2, 4),
207 /* 0100 */ V(2, 1, 4),
208 /* 0101 */ V(2, 0, 4),
209 /* 0110 */ V(0, 1, 3),
210 /* 0111 */ V(0, 1, 3),
211 /* 1000 */ V(1, 1, 2),
212 /* 1001 */ V(1, 1, 2),
213 /* 1010 */ V(1, 1, 2),
214 /* 1011 */ V(1, 1, 2),
215 /* 1100 */ V(1, 0, 3),
216 /* 1101 */ V(1, 0, 3),
217 /* 1110 */ V(0, 0, 3),
218 /* 1111 */ V(0, 0, 3),
219
220 /* 0000 ... */
221 /* 000 */ V(3, 3, 3),/* 16 */
222 /* 001 */ V(0, 3, 3),
223 /* 010 */ V(2, 3, 2),
224 /* 011 */ V(2, 3, 2),
225 /* 100 */ V(3, 2, 2),
226 /* 101 */ V(3, 2, 2),
227 /* 110 */ V(3, 0, 2),
228 /* 111 */ V(3, 0, 2),
229
230 /* 0001 ... */
231 /* 0 */ V(1, 3, 1),/* 24 */
232 /* 1 */ V(3, 1, 1),
233
234 /* 0010 ... */
235 /* 0 */ V(2, 2, 1),/* 26 */
236 /* 1 */ V(0, 2, 1)
237};
238
239static
240union huffpair const hufftab7[] = {
241 /* 0000 */ PTR(16, 4),
242 /* 0001 */ PTR(32, 4),
243 /* 0010 */ PTR(48, 2),
244 /* 0011 */ V(1, 1, 4),
245 /* 0100 */ V(0, 1, 3),
246 /* 0101 */ V(0, 1, 3),
247 /* 0110 */ V(1, 0, 3),
248 /* 0111 */ V(1, 0, 3),
249 /* 1000 */ V(0, 0, 1),
250 /* 1001 */ V(0, 0, 1),
251 /* 1010 */ V(0, 0, 1),
252 /* 1011 */ V(0, 0, 1),
253 /* 1100 */ V(0, 0, 1),
254 /* 1101 */ V(0, 0, 1),
255 /* 1110 */ V(0, 0, 1),
256 /* 1111 */ V(0, 0, 1),
257
258 /* 0000 ... */
259 /* 0000 */ PTR(52, 2),/* 16 */
260 /* 0001 */ PTR(56, 1),
261 /* 0010 */ PTR(58, 1),
262 /* 0011 */ V(1, 5, 4),
263 /* 0100 */ V(5, 1, 4),
264 /* 0101 */ PTR(60, 1),
265 /* 0110 */ V(5, 0, 4),
266 /* 0111 */ PTR(62, 1),
267 /* 1000 */ V(2, 4, 4),
268 /* 1001 */ V(4, 2, 4),
269 /* 1010 */ V(1, 4, 3),
270 /* 1011 */ V(1, 4, 3),
271 /* 1100 */ V(4, 1, 3),
272 /* 1101 */ V(4, 1, 3),
273 /* 1110 */ V(4, 0, 3),
274 /* 1111 */ V(4, 0, 3),
275
276 /* 0001 ... */
277 /* 0000 */ V(0, 4, 4),/* 32 */
278 /* 0001 */ V(2, 3, 4),
279 /* 0010 */ V(3, 2, 4),
280 /* 0011 */ V(0, 3, 4),
281 /* 0100 */ V(1, 3, 3),
282 /* 0101 */ V(1, 3, 3),
283 /* 0110 */ V(3, 1, 3),
284 /* 0111 */ V(3, 1, 3),
285 /* 1000 */ V(3, 0, 3),
286 /* 1001 */ V(3, 0, 3),
287 /* 1010 */ V(2, 2, 3),
288 /* 1011 */ V(2, 2, 3),
289 /* 1100 */ V(1, 2, 2),
290 /* 1101 */ V(1, 2, 2),
291 /* 1110 */ V(1, 2, 2),
292 /* 1111 */ V(1, 2, 2),
293
294 /* 0010 ... */
295 /* 00 */ V(2, 1, 1),/* 48 */
296 /* 01 */ V(2, 1, 1),
297 /* 10 */ V(0, 2, 2),
298 /* 11 */ V(2, 0, 2),
299
300 /* 0000 0000 ... */
301 /* 00 */ V(5, 5, 2),/* 52 */
302 /* 01 */ V(4, 5, 2),
303 /* 10 */ V(5, 4, 2),
304 /* 11 */ V(5, 3, 2),
305
306 /* 0000 0001 ... */
307 /* 0 */ V(3, 5, 1),/* 56 */
308 /* 1 */ V(4, 4, 1),
309
310 /* 0000 0010 ... */
311 /* 0 */ V(2, 5, 1),/* 58 */
312 /* 1 */ V(5, 2, 1),
313
314 /* 0000 0101 ... */
315 /* 0 */ V(0, 5, 1),/* 60 */
316 /* 1 */ V(3, 4, 1),
317
318 /* 0000 0111 ... */
319 /* 0 */ V(4, 3, 1),/* 62 */
320 /* 1 */ V(3, 3, 1)
321};
322
323# if 0
324/* this version saves 8 entries (16 bytes) at the expense of
325 an extra lookup in 4 out of 36 cases */
326static
327union huffpair const hufftab8[] = {
328 /* 0000 */ PTR(16, 4),
329 /* 0001 */ PTR(32, 2),
330 /* 0010 */ V(1, 2, 4),
331 /* 0011 */ V(2, 1, 4),
332 /* 0100 */ V(1, 1, 2),
333 /* 0101 */ V(1, 1, 2),
334 /* 0110 */ V(1, 1, 2),
335 /* 0111 */ V(1, 1, 2),
336 /* 1000 */ V(0, 1, 3),
337 /* 1001 */ V(0, 1, 3),
338 /* 1010 */ V(1, 0, 3),
339 /* 1011 */ V(1, 0, 3),
340 /* 1100 */ V(0, 0, 2),
341 /* 1101 */ V(0, 0, 2),
342 /* 1110 */ V(0, 0, 2),
343 /* 1111 */ V(0, 0, 2),
344
345 /* 0000 ... */
346 /* 0000 */ PTR(36, 3),/* 16 */
347 /* 0001 */ PTR(44, 2),
348 /* 0010 */ PTR(48, 1),
349 /* 0011 */ V(1, 5, 4),
350 /* 0100 */ V(5, 1, 4),
351 /* 0101 */ PTR(50, 1),
352 /* 0110 */ PTR(52, 1),
353 /* 0111 */ V(2, 4, 4),
354 /* 1000 */ V(4, 2, 4),
355 /* 1001 */ V(1, 4, 4),
356 /* 1010 */ V(4, 1, 3),
357 /* 1011 */ V(4, 1, 3),
358 /* 1100 */ V(0, 4, 4),
359 /* 1101 */ V(4, 0, 4),
360 /* 1110 */ V(2, 3, 4),
361 /* 1111 */ V(3, 2, 4),
362
363 /* 0001 ... */
364 /* 00 */ PTR(54, 2),/* 32 */
365 /* 01 */ V(2, 2, 2),
366 /* 10 */ V(0, 2, 2),
367 /* 11 */ V(2, 0, 2),
368
369 /* 0000 0000 ... */
370 /* 000 */ V(5, 5, 3),/* 36 */
371 /* 001 */ V(5, 4, 3),
372 /* 010 */ V(4, 5, 2),
373 /* 011 */ V(4, 5, 2),
374 /* 100 */ V(5, 3, 1),
375 /* 101 */ V(5, 3, 1),
376 /* 110 */ V(5, 3, 1),
377 /* 111 */ V(5, 3, 1),
378
379 /* 0000 0001 ... */
380 /* 00 */ V(3, 5, 2),/* 44 */
381 /* 01 */ V(4, 4, 2),
382 /* 10 */ V(2, 5, 1),
383 /* 11 */ V(2, 5, 1),
384
385 /* 0000 0010 ... */
386 /* 0 */ V(5, 2, 1),/* 48 */
387 /* 1 */ V(0, 5, 1),
388
389 /* 0000 0101 ... */
390 /* 0 */ V(3, 4, 1),/* 50 */
391 /* 1 */ V(4, 3, 1),
392
393 /* 0000 0110 ... */
394 /* 0 */ V(5, 0, 1),/* 52 */
395 /* 1 */ V(3, 3, 1),
396
397 /* 0001 00 ... */
398 /* 00 */ V(1, 3, 2),/* 54 */
399 /* 01 */ V(3, 1, 2),
400 /* 10 */ V(0, 3, 2),
401 /* 11 */ V(3, 0, 2),
402};
403# else
404static
405union huffpair const hufftab8[] = {
406 /* 0000 */ PTR(16, 4),
407 /* 0001 */ PTR(32, 4),
408 /* 0010 */ V(1, 2, 4),
409 /* 0011 */ V(2, 1, 4),
410 /* 0100 */ V(1, 1, 2),
411 /* 0101 */ V(1, 1, 2),
412 /* 0110 */ V(1, 1, 2),
413 /* 0111 */ V(1, 1, 2),
414 /* 1000 */ V(0, 1, 3),
415 /* 1001 */ V(0, 1, 3),
416 /* 1010 */ V(1, 0, 3),
417 /* 1011 */ V(1, 0, 3),
418 /* 1100 */ V(0, 0, 2),
419 /* 1101 */ V(0, 0, 2),
420 /* 1110 */ V(0, 0, 2),
421 /* 1111 */ V(0, 0, 2),
422
423 /* 0000 ... */
424 /* 0000 */ PTR(48, 3),/* 16 */
425 /* 0001 */ PTR(56, 2),
426 /* 0010 */ PTR(60, 1),
427 /* 0011 */ V(1, 5, 4),
428 /* 0100 */ V(5, 1, 4),
429 /* 0101 */ PTR(62, 1),
430 /* 0110 */ PTR(64, 1),
431 /* 0111 */ V(2, 4, 4),
432 /* 1000 */ V(4, 2, 4),
433 /* 1001 */ V(1, 4, 4),
434 /* 1010 */ V(4, 1, 3),
435 /* 1011 */ V(4, 1, 3),
436 /* 1100 */ V(0, 4, 4),
437 /* 1101 */ V(4, 0, 4),
438 /* 1110 */ V(2, 3, 4),
439 /* 1111 */ V(3, 2, 4),
440
441 /* 0001 ... */
442 /* 0000 */ V(1, 3, 4),/* 32 */
443 /* 0001 */ V(3, 1, 4),
444 /* 0010 */ V(0, 3, 4),
445 /* 0011 */ V(3, 0, 4),
446 /* 0100 */ V(2, 2, 2),
447 /* 0101 */ V(2, 2, 2),
448 /* 0110 */ V(2, 2, 2),
449 /* 0111 */ V(2, 2, 2),
450 /* 1000 */ V(0, 2, 2),
451 /* 1001 */ V(0, 2, 2),
452 /* 1010 */ V(0, 2, 2),
453 /* 1011 */ V(0, 2, 2),
454 /* 1100 */ V(2, 0, 2),
455 /* 1101 */ V(2, 0, 2),
456 /* 1110 */ V(2, 0, 2),
457 /* 1111 */ V(2, 0, 2),
458
459 /* 0000 0000 ... */
460 /* 000 */ V(5, 5, 3),/* 48 */
461 /* 001 */ V(5, 4, 3),
462 /* 010 */ V(4, 5, 2),
463 /* 011 */ V(4, 5, 2),
464 /* 100 */ V(5, 3, 1),
465 /* 101 */ V(5, 3, 1),
466 /* 110 */ V(5, 3, 1),
467 /* 111 */ V(5, 3, 1),
468
469 /* 0000 0001 ... */
470 /* 00 */ V(3, 5, 2),/* 56 */
471 /* 01 */ V(4, 4, 2),
472 /* 10 */ V(2, 5, 1),
473 /* 11 */ V(2, 5, 1),
474
475 /* 0000 0010 ... */
476 /* 0 */ V(5, 2, 1),/* 60 */
477 /* 1 */ V(0, 5, 1),
478
479 /* 0000 0101 ... */
480 /* 0 */ V(3, 4, 1),/* 62 */
481 /* 1 */ V(4, 3, 1),
482
483 /* 0000 0110 ... */
484 /* 0 */ V(5, 0, 1),/* 64 */
485 /* 1 */ V(3, 3, 1)
486};
487# endif
488
489static
490union huffpair const hufftab9[] = {
491 /* 0000 */ PTR(16, 4),
492 /* 0001 */ PTR(32, 3),
493 /* 0010 */ PTR(40, 2),
494 /* 0011 */ PTR(44, 2),
495 /* 0100 */ PTR(48, 1),
496 /* 0101 */ V(1, 2, 4),
497 /* 0110 */ V(2, 1, 4),
498 /* 0111 */ V(2, 0, 4),
499 /* 1000 */ V(1, 1, 3),
500 /* 1001 */ V(1, 1, 3),
501 /* 1010 */ V(0, 1, 3),
502 /* 1011 */ V(0, 1, 3),
503 /* 1100 */ V(1, 0, 3),
504 /* 1101 */ V(1, 0, 3),
505 /* 1110 */ V(0, 0, 3),
506 /* 1111 */ V(0, 0, 3),
507
508 /* 0000 ... */
509 /* 0000 */ PTR(50, 1),/* 16 */
510 /* 0001 */ V(3, 5, 4),
511 /* 0010 */ V(5, 3, 4),
512 /* 0011 */ PTR(52, 1),
513 /* 0100 */ V(4, 4, 4),
514 /* 0101 */ V(2, 5, 4),
515 /* 0110 */ V(5, 2, 4),
516 /* 0111 */ V(1, 5, 4),
517 /* 1000 */ V(5, 1, 3),
518 /* 1001 */ V(5, 1, 3),
519 /* 1010 */ V(3, 4, 3),
520 /* 1011 */ V(3, 4, 3),
521 /* 1100 */ V(4, 3, 3),
522 /* 1101 */ V(4, 3, 3),
523 /* 1110 */ V(5, 0, 4),
524 /* 1111 */ V(0, 4, 4),
525
526 /* 0001 ... */
527 /* 000 */ V(2, 4, 3),/* 32 */
528 /* 001 */ V(4, 2, 3),
529 /* 010 */ V(3, 3, 3),
530 /* 011 */ V(4, 0, 3),
531 /* 100 */ V(1, 4, 2),
532 /* 101 */ V(1, 4, 2),
533 /* 110 */ V(4, 1, 2),
534 /* 111 */ V(4, 1, 2),
535
536 /* 0010 ... */
537 /* 00 */ V(2, 3, 2),/* 40 */
538 /* 01 */ V(3, 2, 2),
539 /* 10 */ V(1, 3, 1),
540 /* 11 */ V(1, 3, 1),
541
542 /* 0011 ... */
543 /* 00 */ V(3, 1, 1),/* 44 */
544 /* 01 */ V(3, 1, 1),
545 /* 10 */ V(0, 3, 2),
546 /* 11 */ V(3, 0, 2),
547
548 /* 0100 ... */
549 /* 0 */ V(2, 2, 1),/* 48 */
550 /* 1 */ V(0, 2, 1),
551
552 /* 0000 0000 ... */
553 /* 0 */ V(5, 5, 1),/* 50 */
554 /* 1 */ V(4, 5, 1),
555
556 /* 0000 0011 ... */
557 /* 0 */ V(5, 4, 1),/* 52 */
558 /* 1 */ V(0, 5, 1)
559};
560
561static
562union huffpair const hufftab10[] = {
563 /* 0000 */ PTR(16, 4),
564 /* 0001 */ PTR(32, 4),
565 /* 0010 */ PTR(48, 2),
566 /* 0011 */ V(1, 1, 4),
567 /* 0100 */ V(0, 1, 3),
568 /* 0101 */ V(0, 1, 3),
569 /* 0110 */ V(1, 0, 3),
570 /* 0111 */ V(1, 0, 3),
571 /* 1000 */ V(0, 0, 1),
572 /* 1001 */ V(0, 0, 1),
573 /* 1010 */ V(0, 0, 1),
574 /* 1011 */ V(0, 0, 1),
575 /* 1100 */ V(0, 0, 1),
576 /* 1101 */ V(0, 0, 1),
577 /* 1110 */ V(0, 0, 1),
578 /* 1111 */ V(0, 0, 1),
579
580 /* 0000 ... */
581 /* 0000 */ PTR(52, 3),/* 16 */
582 /* 0001 */ PTR(60, 2),
583 /* 0010 */ PTR(64, 3),
584 /* 0011 */ PTR(72, 1),
585 /* 0100 */ PTR(74, 2),
586 /* 0101 */ PTR(78, 2),
587 /* 0110 */ PTR(82, 2),
588 /* 0111 */ V(1, 7, 4),
589 /* 1000 */ V(7, 1, 4),
590 /* 1001 */ PTR(86, 1),
591 /* 1010 */ PTR(88, 2),
592 /* 1011 */ PTR(92, 2),
593 /* 1100 */ V(1, 6, 4),
594 /* 1101 */ V(6, 1, 4),
595 /* 1110 */ V(6, 0, 4),
596 /* 1111 */ PTR(96, 1),
597
598 /* 0001 ... */
599 /* 0000 */ PTR(98, 1),/* 32 */
600 /* 0001 */ PTR(100, 1),
601 /* 0010 */ V(1, 4, 4),
602 /* 0011 */ V(4, 1, 4),
603 /* 0100 */ V(4, 0, 4),
604 /* 0101 */ V(2, 3, 4),
605 /* 0110 */ V(3, 2, 4),
606 /* 0111 */ V(0, 3, 4),
607 /* 1000 */ V(1, 3, 3),
608 /* 1001 */ V(1, 3, 3),
609 /* 1010 */ V(3, 1, 3),
610 /* 1011 */ V(3, 1, 3),
611 /* 1100 */ V(3, 0, 3),
612 /* 1101 */ V(3, 0, 3),
613 /* 1110 */ V(2, 2, 3),
614 /* 1111 */ V(2, 2, 3),
615
616 /* 0010 ... */
617 /* 00 */ V(1, 2, 2),/* 48 */
618 /* 01 */ V(2, 1, 2),
619 /* 10 */ V(0, 2, 2),
620 /* 11 */ V(2, 0, 2),
621
622 /* 0000 0000 ... */
623 /* 000 */ V(7, 7, 3),/* 52 */
624 /* 001 */ V(6, 7, 3),
625 /* 010 */ V(7, 6, 3),
626 /* 011 */ V(5, 7, 3),
627 /* 100 */ V(7, 5, 3),
628 /* 101 */ V(6, 6, 3),
629 /* 110 */ V(4, 7, 2),
630 /* 111 */ V(4, 7, 2),
631
632 /* 0000 0001 ... */
633 /* 00 */ V(7, 4, 2),/* 60 */
634 /* 01 */ V(5, 6, 2),
635 /* 10 */ V(6, 5, 2),
636 /* 11 */ V(3, 7, 2),
637
638 /* 0000 0010 ... */
639 /* 000 */ V(7, 3, 2),/* 64 */
640 /* 001 */ V(7, 3, 2),
641 /* 010 */ V(4, 6, 2),
642 /* 011 */ V(4, 6, 2),
643 /* 100 */ V(5, 5, 3),
644 /* 101 */ V(5, 4, 3),
645 /* 110 */ V(6, 3, 2),
646 /* 111 */ V(6, 3, 2),
647
648 /* 0000 0011 ... */
649 /* 0 */ V(2, 7, 1),/* 72 */
650 /* 1 */ V(7, 2, 1),
651
652 /* 0000 0100 ... */
653 /* 00 */ V(6, 4, 2),/* 74 */
654 /* 01 */ V(0, 7, 2),
655 /* 10 */ V(7, 0, 1),
656 /* 11 */ V(7, 0, 1),
657
658 /* 0000 0101 ... */
659 /* 00 */ V(6, 2, 1),/* 78 */
660 /* 01 */ V(6, 2, 1),
661 /* 10 */ V(4, 5, 2),
662 /* 11 */ V(3, 5, 2),
663
664 /* 0000 0110 ... */
665 /* 00 */ V(0, 6, 1),/* 82 */
666 /* 01 */ V(0, 6, 1),
667 /* 10 */ V(5, 3, 2),
668 /* 11 */ V(4, 4, 2),
669
670 /* 0000 1001 ... */
671 /* 0 */ V(3, 6, 1),/* 86 */
672 /* 1 */ V(2, 6, 1),
673
674 /* 0000 1010 ... */
675 /* 00 */ V(2, 5, 2),/* 88 */
676 /* 01 */ V(5, 2, 2),
677 /* 10 */ V(1, 5, 1),
678 /* 11 */ V(1, 5, 1),
679
680 /* 0000 1011 ... */
681 /* 00 */ V(5, 1, 1),/* 92 */
682 /* 01 */ V(5, 1, 1),
683 /* 10 */ V(3, 4, 2),
684 /* 11 */ V(4, 3, 2),
685
686 /* 0000 1111 ... */
687 /* 0 */ V(0, 5, 1),/* 96 */
688 /* 1 */ V(5, 0, 1),
689
690 /* 0001 0000 ... */
691 /* 0 */ V(2, 4, 1),/* 98 */
692 /* 1 */ V(4, 2, 1),
693
694 /* 0001 0001 ... */
695 /* 0 */ V(3, 3, 1),/* 100 */
696 /* 1 */ V(0, 4, 1)
697};
698
699static
700union huffpair const hufftab11[] = {
701 /* 0000 */ PTR(16, 4),
702 /* 0001 */ PTR(32, 4),
703 /* 0010 */ PTR(48, 4),
704 /* 0011 */ PTR(64, 3),
705 /* 0100 */ V(1, 2, 4),
706 /* 0101 */ PTR(72, 1),
707 /* 0110 */ V(1, 1, 3),
708 /* 0111 */ V(1, 1, 3),
709 /* 1000 */ V(0, 1, 3),
710 /* 1001 */ V(0, 1, 3),
711 /* 1010 */ V(1, 0, 3),
712 /* 1011 */ V(1, 0, 3),
713 /* 1100 */ V(0, 0, 2),
714 /* 1101 */ V(0, 0, 2),
715 /* 1110 */ V(0, 0, 2),
716 /* 1111 */ V(0, 0, 2),
717
718 /* 0000 ... */
719 /* 0000 */ PTR(74, 2),/* 16 */
720 /* 0001 */ PTR(78, 3),
721 /* 0010 */ PTR(86, 2),
722 /* 0011 */ PTR(90, 1),
723 /* 0100 */ PTR(92, 2),
724 /* 0101 */ V(2, 7, 4),
725 /* 0110 */ V(7, 2, 4),
726 /* 0111 */ PTR(96, 1),
727 /* 1000 */ V(7, 1, 3),
728 /* 1001 */ V(7, 1, 3),
729 /* 1010 */ V(1, 7, 4),
730 /* 1011 */ V(7, 0, 4),
731 /* 1100 */ V(3, 6, 4),
732 /* 1101 */ V(6, 3, 4),
733 /* 1110 */ V(6, 0, 4),
734 /* 1111 */ PTR(98, 1),
735
736 /* 0001 ... */
737 /* 0000 */ PTR(100, 1),/* 32 */
738 /* 0001 */ V(1, 5, 4),
739 /* 0010 */ V(6, 2, 3),
740 /* 0011 */ V(6, 2, 3),
741 /* 0100 */ V(2, 6, 4),
742 /* 0101 */ V(0, 6, 4),
743 /* 0110 */ V(1, 6, 3),
744 /* 0111 */ V(1, 6, 3),
745 /* 1000 */ V(6, 1, 3),
746 /* 1001 */ V(6, 1, 3),
747 /* 1010 */ V(5, 1, 4),
748 /* 1011 */ V(3, 4, 4),
749 /* 1100 */ V(5, 0, 4),
750 /* 1101 */ PTR(102, 1),
751 /* 1110 */ V(2, 4, 4),
752 /* 1111 */ V(4, 2, 4),
753
754 /* 0010 ... */
755 /* 0000 */ V(1, 4, 4),/* 48 */
756 /* 0001 */ V(4, 1, 4),
757 /* 0010 */ V(0, 4, 4),
758 /* 0011 */ V(4, 0, 4),
759 /* 0100 */ V(2, 3, 3),
760 /* 0101 */ V(2, 3, 3),
761 /* 0110 */ V(3, 2, 3),
762 /* 0111 */ V(3, 2, 3),
763 /* 1000 */ V(1, 3, 2),
764 /* 1001 */ V(1, 3, 2),
765 /* 1010 */ V(1, 3, 2),
766 /* 1011 */ V(1, 3, 2),
767 /* 1100 */ V(3, 1, 2),
768 /* 1101 */ V(3, 1, 2),
769 /* 1110 */ V(3, 1, 2),
770 /* 1111 */ V(3, 1, 2),
771
772 /* 0011 ... */
773 /* 000 */ V(0, 3, 3),/* 64 */
774 /* 001 */ V(3, 0, 3),
775 /* 010 */ V(2, 2, 2),
776 /* 011 */ V(2, 2, 2),
777 /* 100 */ V(2, 1, 1),
778 /* 101 */ V(2, 1, 1),
779 /* 110 */ V(2, 1, 1),
780 /* 111 */ V(2, 1, 1),
781
782 /* 0101 ... */
783 /* 0 */ V(0, 2, 1),/* 72 */
784 /* 1 */ V(2, 0, 1),
785
786 /* 0000 0000 ... */
787 /* 00 */ V(7, 7, 2),/* 74 */
788 /* 01 */ V(6, 7, 2),
789 /* 10 */ V(7, 6, 2),
790 /* 11 */ V(7, 5, 2),
791
792 /* 0000 0001 ... */
793 /* 000 */ V(6, 6, 2),/* 78 */
794 /* 001 */ V(6, 6, 2),
795 /* 010 */ V(4, 7, 2),
796 /* 011 */ V(4, 7, 2),
797 /* 100 */ V(7, 4, 2),
798 /* 101 */ V(7, 4, 2),
799 /* 110 */ V(5, 7, 3),
800 /* 111 */ V(5, 5, 3),
801
802 /* 0000 0010 ... */
803 /* 00 */ V(5, 6, 2),/* 86 */
804 /* 01 */ V(6, 5, 2),
805 /* 10 */ V(3, 7, 1),
806 /* 11 */ V(3, 7, 1),
807
808 /* 0000 0011 ... */
809 /* 0 */ V(7, 3, 1),/* 90 */
810 /* 1 */ V(4, 6, 1),
811
812 /* 0000 0100 ... */
813 /* 00 */ V(4, 5, 2),/* 92 */
814 /* 01 */ V(5, 4, 2),
815 /* 10 */ V(3, 5, 2),
816 /* 11 */ V(5, 3, 2),
817
818 /* 0000 0111 ... */
819 /* 0 */ V(6, 4, 1),/* 96 */
820 /* 1 */ V(0, 7, 1),
821
822 /* 0000 1111 ... */
823 /* 0 */ V(4, 4, 1),/* 98 */
824 /* 1 */ V(2, 5, 1),
825
826 /* 0001 0000 ... */
827 /* 0 */ V(5, 2, 1),/* 100 */
828 /* 1 */ V(0, 5, 1),
829
830 /* 0001 1101 ... */
831 /* 0 */ V(4, 3, 1),/* 102 */
832 /* 1 */ V(3, 3, 1)
833};
834
835static
836union huffpair const hufftab12[] = {
837 /* 0000 */ PTR(16, 4),
838 /* 0001 */ PTR(32, 4),
839 /* 0010 */ PTR(48, 4),
840 /* 0011 */ PTR(64, 2),
841 /* 0100 */ PTR(68, 3),
842 /* 0101 */ PTR(76, 1),
843 /* 0110 */ V(1, 2, 4),
844 /* 0111 */ V(2, 1, 4),
845 /* 1000 */ PTR(78, 1),
846 /* 1001 */ V(0, 0, 4),
847 /* 1010 */ V(1, 1, 3),
848 /* 1011 */ V(1, 1, 3),
849 /* 1100 */ V(0, 1, 3),
850 /* 1101 */ V(0, 1, 3),
851 /* 1110 */ V(1, 0, 3),
852 /* 1111 */ V(1, 0, 3),
853
854 /* 0000 ... */
855 /* 0000 */ PTR(80, 2),/* 16 */
856 /* 0001 */ PTR(84, 1),
857 /* 0010 */ PTR(86, 1),
858 /* 0011 */ PTR(88, 1),
859 /* 0100 */ V(5, 6, 4),
860 /* 0101 */ V(3, 7, 4),
861 /* 0110 */ PTR(90, 1),
862 /* 0111 */ V(2, 7, 4),
863 /* 1000 */ V(7, 2, 4),
864 /* 1001 */ V(4, 6, 4),
865 /* 1010 */ V(6, 4, 4),
866 /* 1011 */ V(1, 7, 4),
867 /* 1100 */ V(7, 1, 4),
868 /* 1101 */ PTR(92, 1),
869 /* 1110 */ V(3, 6, 4),
870 /* 1111 */ V(6, 3, 4),
871
872 /* 0001 ... */
873 /* 0000 */ V(4, 5, 4),/* 32 */
874 /* 0001 */ V(5, 4, 4),
875 /* 0010 */ V(4, 4, 4),
876 /* 0011 */ PTR(94, 1),
877 /* 0100 */ V(2, 6, 3),
878 /* 0101 */ V(2, 6, 3),
879 /* 0110 */ V(6, 2, 3),
880 /* 0111 */ V(6, 2, 3),
881 /* 1000 */ V(6, 1, 3),
882 /* 1001 */ V(6, 1, 3),
883 /* 1010 */ V(1, 6, 4),
884 /* 1011 */ V(6, 0, 4),
885 /* 1100 */ V(3, 5, 4),
886 /* 1101 */ V(5, 3, 4),
887 /* 1110 */ V(2, 5, 4),
888 /* 1111 */ V(5, 2, 4),
889
890 /* 0010 ... */
891 /* 0000 */ V(1, 5, 3),/* 48 */
892 /* 0001 */ V(1, 5, 3),
893 /* 0010 */ V(5, 1, 3),
894 /* 0011 */ V(5, 1, 3),
895 /* 0100 */ V(3, 4, 3),
896 /* 0101 */ V(3, 4, 3),
897 /* 0110 */ V(4, 3, 3),
898 /* 0111 */ V(4, 3, 3),
899 /* 1000 */ V(5, 0, 4),
900 /* 1001 */ V(0, 4, 4),
901 /* 1010 */ V(2, 4, 3),
902 /* 1011 */ V(2, 4, 3),
903 /* 1100 */ V(4, 2, 3),
904 /* 1101 */ V(4, 2, 3),
905 /* 1110 */ V(1, 4, 3),
906 /* 1111 */ V(1, 4, 3),
907
908 /* 0011 ... */
909 /* 00 */ V(3, 3, 2),/* 64 */
910 /* 01 */ V(4, 1, 2),
911 /* 10 */ V(2, 3, 2),
912 /* 11 */ V(3, 2, 2),
913
914 /* 0100 ... */
915 /* 000 */ V(4, 0, 3),/* 68 */
916 /* 001 */ V(0, 3, 3),
917 /* 010 */ V(3, 0, 2),
918 /* 011 */ V(3, 0, 2),
919 /* 100 */ V(1, 3, 1),
920 /* 101 */ V(1, 3, 1),
921 /* 110 */ V(1, 3, 1),
922 /* 111 */ V(1, 3, 1),
923
924 /* 0101 ... */
925 /* 0 */ V(3, 1, 1),/* 76 */
926 /* 1 */ V(2, 2, 1),
927
928 /* 1000 ... */
929 /* 0 */ V(0, 2, 1),/* 78 */
930 /* 1 */ V(2, 0, 1),
931
932 /* 0000 0000 ... */
933 /* 00 */ V(7, 7, 2),/* 80 */
934 /* 01 */ V(6, 7, 2),
935 /* 10 */ V(7, 6, 1),
936 /* 11 */ V(7, 6, 1),
937
938 /* 0000 0001 ... */
939 /* 0 */ V(5, 7, 1),/* 84 */
940 /* 1 */ V(7, 5, 1),
941
942 /* 0000 0010 ... */
943 /* 0 */ V(6, 6, 1),/* 86 */
944 /* 1 */ V(4, 7, 1),
945
946 /* 0000 0011 ... */
947 /* 0 */ V(7, 4, 1),/* 88 */
948 /* 1 */ V(6, 5, 1),
949
950 /* 0000 0110 ... */
951 /* 0 */ V(7, 3, 1),/* 90 */
952 /* 1 */ V(5, 5, 1),
953
954 /* 0000 1101 ... */
955 /* 0 */ V(0, 7, 1),/* 92 */
956 /* 1 */ V(7, 0, 1),
957
958 /* 0001 0011 ... */
959 /* 0 */ V(0, 6, 1),/* 94 */
960 /* 1 */ V(0, 5, 1)
961};
962
963static
964union huffpair const hufftab13[] = {
965 /* 0000 */ PTR(16, 4),
966 /* 0001 */ PTR(32, 4),
967 /* 0010 */ PTR(48, 4),
968 /* 0011 */ PTR(64, 2),
969 /* 0100 */ V(1, 1, 4),
970 /* 0101 */ V(0, 1, 4),
971 /* 0110 */ V(1, 0, 3),
972 /* 0111 */ V(1, 0, 3),
973 /* 1000 */ V(0, 0, 1),
974 /* 1001 */ V(0, 0, 1),
975 /* 1010 */ V(0, 0, 1),
976 /* 1011 */ V(0, 0, 1),
977 /* 1100 */ V(0, 0, 1),
978 /* 1101 */ V(0, 0, 1),
979 /* 1110 */ V(0, 0, 1),
980 /* 1111 */ V(0, 0, 1),
981
982 /* 0000 ... */
983 /* 0000 */ PTR(68, 4),/* 16 */
984 /* 0001 */ PTR(84, 4),
985 /* 0010 */ PTR(100, 4),
986 /* 0011 */ PTR(116, 4),
987 /* 0100 */ PTR(132, 4),
988 /* 0101 */ PTR(148, 4),
989 /* 0110 */ PTR(164, 3),
990 /* 0111 */ PTR(172, 3),
991 /* 1000 */ PTR(180, 3),
992 /* 1001 */ PTR(188, 3),
993 /* 1010 */ PTR(196, 3),
994 /* 1011 */ PTR(204, 3),
995 /* 1100 */ PTR(212, 1),
996 /* 1101 */ PTR(214, 2),
997 /* 1110 */ PTR(218, 3),
998 /* 1111 */ PTR(226, 1),
999
1000 /* 0001 ... */
1001 /* 0000 */ PTR(228, 2),/* 32 */
1002 /* 0001 */ PTR(232, 2),
1003 /* 0010 */ PTR(236, 2),
1004 /* 0011 */ PTR(240, 2),
1005 /* 0100 */ V(8, 1, 4),
1006 /* 0101 */ PTR(244, 1),
1007 /* 0110 */ PTR(246, 1),
1008 /* 0111 */ PTR(248, 1),
1009 /* 1000 */ PTR(250, 2),
1010 /* 1001 */ PTR(254, 1),
1011 /* 1010 */ V(1, 5, 4),
1012 /* 1011 */ V(5, 1, 4),
1013 /* 1100 */ PTR(256, 1),
1014 /* 1101 */ PTR(258, 1),
1015 /* 1110 */ PTR(260, 1),
1016 /* 1111 */ V(1, 4, 4),
1017
1018 /* 0010 ... */
1019 /* 0000 */ V(4, 1, 3),/* 48 */
1020 /* 0001 */ V(4, 1, 3),
1021 /* 0010 */ V(0, 4, 4),
1022 /* 0011 */ V(4, 0, 4),
1023 /* 0100 */ V(2, 3, 4),
1024 /* 0101 */ V(3, 2, 4),
1025 /* 0110 */ V(1, 3, 3),
1026 /* 0111 */ V(1, 3, 3),
1027 /* 1000 */ V(3, 1, 3),
1028 /* 1001 */ V(3, 1, 3),
1029 /* 1010 */ V(0, 3, 3),
1030 /* 1011 */ V(0, 3, 3),
1031 /* 1100 */ V(3, 0, 3),
1032 /* 1101 */ V(3, 0, 3),
1033 /* 1110 */ V(2, 2, 3),
1034 /* 1111 */ V(2, 2, 3),
1035
1036 /* 0011 ... */
1037 /* 00 */ V(1, 2, 2),/* 64 */
1038 /* 01 */ V(2, 1, 2),
1039 /* 10 */ V(0, 2, 2),
1040 /* 11 */ V(2, 0, 2),
1041
1042 /* 0000 0000 ... */
1043 /* 0000 */ PTR(262, 4),/* 68 */
1044 /* 0001 */ PTR(278, 4),
1045 /* 0010 */ PTR(294, 4),
1046 /* 0011 */ PTR(310, 3),
1047 /* 0100 */ PTR(318, 2),
1048 /* 0101 */ PTR(322, 2),
1049 /* 0110 */ PTR(326, 3),
1050 /* 0111 */ PTR(334, 2),
1051 /* 1000 */ PTR(338, 1),
1052 /* 1001 */ PTR(340, 2),
1053 /* 1010 */ PTR(344, 2),
1054 /* 1011 */ PTR(348, 2),
1055 /* 1100 */ PTR(352, 2),
1056 /* 1101 */ PTR(356, 2),
1057 /* 1110 */ V(1, 15, 4),
1058 /* 1111 */ V(15, 1, 4),
1059
1060 /* 0000 0001 ... */
1061 /* 0000 */ V(15, 0, 4),/* 84 */
1062 /* 0001 */ PTR(360, 1),
1063 /* 0010 */ PTR(362, 1),
1064 /* 0011 */ PTR(364, 1),
1065 /* 0100 */ V(14, 2, 4),
1066 /* 0101 */ PTR(366, 1),
1067 /* 0110 */ V(1, 14, 4),
1068 /* 0111 */ V(14, 1, 4),
1069 /* 1000 */ PTR(368, 1),
1070 /* 1001 */ PTR(370, 1),
1071 /* 1010 */ PTR(372, 1),
1072 /* 1011 */ PTR(374, 1),
1073 /* 1100 */ PTR(376, 1),
1074 /* 1101 */ PTR(378, 1),
1075 /* 1110 */ V(12, 6, 4),
1076 /* 1111 */ V(3, 13, 4),
1077
1078 /* 0000 0010 ... */
1079 /* 0000 */ PTR(380, 1),/* 100 */
1080 /* 0001 */ V(2, 13, 4),
1081 /* 0010 */ V(13, 2, 4),
1082 /* 0011 */ V(1, 13, 4),
1083 /* 0100 */ V(11, 7, 4),
1084 /* 0101 */ PTR(382, 1),
1085 /* 0110 */ PTR(384, 1),
1086 /* 0111 */ V(12, 3, 4),
1087 /* 1000 */ PTR(386, 1),
1088 /* 1001 */ V(4, 11, 4),
1089 /* 1010 */ V(13, 1, 3),
1090 /* 1011 */ V(13, 1, 3),
1091 /* 1100 */ V(0, 13, 4),
1092 /* 1101 */ V(13, 0, 4),
1093 /* 1110 */ V(8, 10, 4),
1094 /* 1111 */ V(10, 8, 4),
1095
1096 /* 0000 0011 ... */
1097 /* 0000 */ V(4, 12, 4),/* 116 */
1098 /* 0001 */ V(12, 4, 4),
1099 /* 0010 */ V(6, 11, 4),
1100 /* 0011 */ V(11, 6, 4),
1101 /* 0100 */ V(3, 12, 3),
1102 /* 0101 */ V(3, 12, 3),
1103 /* 0110 */ V(2, 12, 3),
1104 /* 0111 */ V(2, 12, 3),
1105 /* 1000 */ V(12, 2, 3),
1106 /* 1001 */ V(12, 2, 3),
1107 /* 1010 */ V(5, 11, 3),
1108 /* 1011 */ V(5, 11, 3),
1109 /* 1100 */ V(11, 5, 4),
1110 /* 1101 */ V(8, 9, 4),
1111 /* 1110 */ V(1, 12, 3),
1112 /* 1111 */ V(1, 12, 3),
1113
1114 /* 0000 0100 ... */
1115 /* 0000 */ V(12, 1, 3),/* 132 */
1116 /* 0001 */ V(12, 1, 3),
1117 /* 0010 */ V(9, 8, 4),
1118 /* 0011 */ V(0, 12, 4),
1119 /* 0100 */ V(12, 0, 3),
1120 /* 0101 */ V(12, 0, 3),
1121 /* 0110 */ V(11, 4, 4),
1122 /* 0111 */ V(6, 10, 4),
1123 /* 1000 */ V(10, 6, 4),
1124 /* 1001 */ V(7, 9, 4),
1125 /* 1010 */ V(3, 11, 3),
1126 /* 1011 */ V(3, 11, 3),
1127 /* 1100 */ V(11, 3, 3),
1128 /* 1101 */ V(11, 3, 3),
1129 /* 1110 */ V(8, 8, 4),
1130 /* 1111 */ V(5, 10, 4),
1131
1132 /* 0000 0101 ... */
1133 /* 0000 */ V(2, 11, 3),/* 148 */
1134 /* 0001 */ V(2, 11, 3),
1135 /* 0010 */ V(10, 5, 4),
1136 /* 0011 */ V(6, 9, 4),
1137 /* 0100 */ V(10, 4, 3),
1138 /* 0101 */ V(10, 4, 3),
1139 /* 0110 */ V(7, 8, 4),
1140 /* 0111 */ V(8, 7, 4),
1141 /* 1000 */ V(9, 4, 3),
1142 /* 1001 */ V(9, 4, 3),
1143 /* 1010 */ V(7, 7, 4),
1144 /* 1011 */ V(7, 6, 4),
1145 /* 1100 */ V(11, 2, 2),
1146 /* 1101 */ V(11, 2, 2),
1147 /* 1110 */ V(11, 2, 2),
1148 /* 1111 */ V(11, 2, 2),
1149
1150 /* 0000 0110 ... */
1151 /* 000 */ V(1, 11, 2),/* 164 */
1152 /* 001 */ V(1, 11, 2),
1153 /* 010 */ V(11, 1, 2),
1154 /* 011 */ V(11, 1, 2),
1155 /* 100 */ V(0, 11, 3),
1156 /* 101 */ V(11, 0, 3),
1157 /* 110 */ V(9, 6, 3),
1158 /* 111 */ V(4, 10, 3),
1159
1160 /* 0000 0111 ... */
1161 /* 000 */ V(3, 10, 3),/* 172 */
1162 /* 001 */ V(10, 3, 3),
1163 /* 010 */ V(5, 9, 3),
1164 /* 011 */ V(9, 5, 3),
1165 /* 100 */ V(2, 10, 2),
1166 /* 101 */ V(2, 10, 2),
1167 /* 110 */ V(10, 2, 2),
1168 /* 111 */ V(10, 2, 2),
1169
1170 /* 0000 1000 ... */
1171 /* 000 */ V(1, 10, 2),/* 180 */
1172 /* 001 */ V(1, 10, 2),
1173 /* 010 */ V(10, 1, 2),
1174 /* 011 */ V(10, 1, 2),
1175 /* 100 */ V(0, 10, 3),
1176 /* 101 */ V(6, 8, 3),
1177 /* 110 */ V(10, 0, 2),
1178 /* 111 */ V(10, 0, 2),
1179
1180 /* 0000 1001 ... */
1181 /* 000 */ V(8, 6, 3),/* 188 */
1182 /* 001 */ V(4, 9, 3),
1183 /* 010 */ V(9, 3, 2),
1184 /* 011 */ V(9, 3, 2),
1185 /* 100 */ V(3, 9, 3),
1186 /* 101 */ V(5, 8, 3),
1187 /* 110 */ V(8, 5, 3),
1188 /* 111 */ V(6, 7, 3),
1189
1190 /* 0000 1010 ... */
1191 /* 000 */ V(2, 9, 2),/* 196 */
1192 /* 001 */ V(2, 9, 2),
1193 /* 010 */ V(9, 2, 2),
1194 /* 011 */ V(9, 2, 2),
1195 /* 100 */ V(5, 7, 3),
1196 /* 101 */ V(7, 5, 3),
1197 /* 110 */ V(3, 8, 2),
1198 /* 111 */ V(3, 8, 2),
1199
1200 /* 0000 1011 ... */
1201 /* 000 */ V(8, 3, 2),/* 204 */
1202 /* 001 */ V(8, 3, 2),
1203 /* 010 */ V(6, 6, 3),
1204 /* 011 */ V(4, 7, 3),
1205 /* 100 */ V(7, 4, 3),
1206 /* 101 */ V(5, 6, 3),
1207 /* 110 */ V(6, 5, 3),
1208 /* 111 */ V(7, 3, 3),
1209
1210 /* 0000 1100 ... */
1211 /* 0 */ V(1, 9, 1),/* 212 */
1212 /* 1 */ V(9, 1, 1),
1213
1214 /* 0000 1101 ... */
1215 /* 00 */ V(0, 9, 2),/* 214 */
1216 /* 01 */ V(9, 0, 2),
1217 /* 10 */ V(4, 8, 2),
1218 /* 11 */ V(8, 4, 2),
1219
1220 /* 0000 1110 ... */
1221 /* 000 */ V(7, 2, 2),/* 218 */
1222 /* 001 */ V(7, 2, 2),
1223 /* 010 */ V(4, 6, 3),
1224 /* 011 */ V(6, 4, 3),
1225 /* 100 */ V(2, 8, 1),
1226 /* 101 */ V(2, 8, 1),
1227 /* 110 */ V(2, 8, 1),
1228 /* 111 */ V(2, 8, 1),
1229
1230 /* 0000 1111 ... */
1231 /* 0 */ V(8, 2, 1),/* 226 */
1232 /* 1 */ V(1, 8, 1),
1233
1234 /* 0001 0000 ... */
1235 /* 00 */ V(3, 7, 2),/* 228 */
1236 /* 01 */ V(2, 7, 2),
1237 /* 10 */ V(1, 7, 1),
1238 /* 11 */ V(1, 7, 1),
1239
1240 /* 0001 0001 ... */
1241 /* 00 */ V(7, 1, 1),/* 232 */
1242 /* 01 */ V(7, 1, 1),
1243 /* 10 */ V(5, 5, 2),
1244 /* 11 */ V(0, 7, 2),
1245
1246 /* 0001 0010 ... */
1247 /* 00 */ V(7, 0, 2),/* 236 */
1248 /* 01 */ V(3, 6, 2),
1249 /* 10 */ V(6, 3, 2),
1250 /* 11 */ V(4, 5, 2),
1251
1252 /* 0001 0011 ... */
1253 /* 00 */ V(5, 4, 2),/* 240 */
1254 /* 01 */ V(2, 6, 2),
1255 /* 10 */ V(6, 2, 2),
1256 /* 11 */ V(3, 5, 2),
1257
1258 /* 0001 0101 ... */
1259 /* 0 */ V(0, 8, 1),/* 244 */
1260 /* 1 */ V(8, 0, 1),
1261
1262 /* 0001 0110 ... */
1263 /* 0 */ V(1, 6, 1),/* 246 */
1264 /* 1 */ V(6, 1, 1),
1265
1266 /* 0001 0111 ... */
1267 /* 0 */ V(0, 6, 1),/* 248 */
1268 /* 1 */ V(6, 0, 1),
1269
1270 /* 0001 1000 ... */
1271 /* 00 */ V(5, 3, 2),/* 250 */
1272 /* 01 */ V(4, 4, 2),
1273 /* 10 */ V(2, 5, 1),
1274 /* 11 */ V(2, 5, 1),
1275
1276 /* 0001 1001 ... */
1277 /* 0 */ V(5, 2, 1),/* 254 */
1278 /* 1 */ V(0, 5, 1),
1279
1280 /* 0001 1100 ... */
1281 /* 0 */ V(3, 4, 1),/* 256 */
1282 /* 1 */ V(4, 3, 1),
1283
1284 /* 0001 1101 ... */
1285 /* 0 */ V(5, 0, 1),/* 258 */
1286 /* 1 */ V(2, 4, 1),
1287
1288 /* 0001 1110 ... */
1289 /* 0 */ V(4, 2, 1),/* 260 */
1290 /* 1 */ V(3, 3, 1),
1291
1292 /* 0000 0000 0000 ... */
1293 /* 0000 */ PTR(388, 3),/* 262 */
1294 /* 0001 */ V(15, 15, 4),
1295 /* 0010 */ V(14, 15, 4),
1296 /* 0011 */ V(13, 15, 4),
1297 /* 0100 */ V(14, 14, 4),
1298 /* 0101 */ V(12, 15, 4),
1299 /* 0110 */ V(13, 14, 4),
1300 /* 0111 */ V(11, 15, 4),
1301 /* 1000 */ V(15, 11, 4),
1302 /* 1001 */ V(12, 14, 4),
1303 /* 1010 */ V(13, 12, 4),
1304 /* 1011 */ PTR(396, 1),
1305 /* 1100 */ V(14, 12, 3),
1306 /* 1101 */ V(14, 12, 3),
1307 /* 1110 */ V(13, 13, 3),
1308 /* 1111 */ V(13, 13, 3),
1309
1310 /* 0000 0000 0001 ... */
1311 /* 0000 */ V(15, 10, 4),/* 278 */
1312 /* 0001 */ V(12, 13, 4),
1313 /* 0010 */ V(11, 14, 3),
1314 /* 0011 */ V(11, 14, 3),
1315 /* 0100 */ V(14, 11, 3),
1316 /* 0101 */ V(14, 11, 3),
1317 /* 0110 */ V(9, 15, 3),
1318 /* 0111 */ V(9, 15, 3),
1319 /* 1000 */ V(15, 9, 3),
1320 /* 1001 */ V(15, 9, 3),
1321 /* 1010 */ V(14, 10, 3),
1322 /* 1011 */ V(14, 10, 3),
1323 /* 1100 */ V(11, 13, 3),
1324 /* 1101 */ V(11, 13, 3),
1325 /* 1110 */ V(13, 11, 3),
1326 /* 1111 */ V(13, 11, 3),
1327
1328 /* 0000 0000 0010 ... */
1329 /* 0000 */ V(8, 15, 3),/* 294 */
1330 /* 0001 */ V(8, 15, 3),
1331 /* 0010 */ V(15, 8, 3),
1332 /* 0011 */ V(15, 8, 3),
1333 /* 0100 */ V(12, 12, 3),
1334 /* 0101 */ V(12, 12, 3),
1335 /* 0110 */ V(10, 14, 4),
1336 /* 0111 */ V(9, 14, 4),
1337 /* 1000 */ V(8, 14, 3),
1338 /* 1001 */ V(8, 14, 3),
1339 /* 1010 */ V(7, 15, 4),
1340 /* 1011 */ V(7, 14, 4),
1341 /* 1100 */ V(15, 7, 2),
1342 /* 1101 */ V(15, 7, 2),
1343 /* 1110 */ V(15, 7, 2),
1344 /* 1111 */ V(15, 7, 2),
1345
1346 /* 0000 0000 0011 ... */
1347 /* 000 */ V(13, 10, 2),/* 310 */
1348 /* 001 */ V(13, 10, 2),
1349 /* 010 */ V(10, 13, 3),
1350 /* 011 */ V(11, 12, 3),
1351 /* 100 */ V(12, 11, 3),
1352 /* 101 */ V(15, 6, 3),
1353 /* 110 */ V(6, 15, 2),
1354 /* 111 */ V(6, 15, 2),
1355
1356 /* 0000 0000 0100 ... */
1357 /* 00 */ V(14, 8, 2),/* 318 */
1358 /* 01 */ V(5, 15, 2),
1359 /* 10 */ V(9, 13, 2),
1360 /* 11 */ V(13, 9, 2),
1361
1362 /* 0000 0000 0101 ... */
1363 /* 00 */ V(15, 5, 2),/* 322 */
1364 /* 01 */ V(14, 7, 2),
1365 /* 10 */ V(10, 12, 2),
1366 /* 11 */ V(11, 11, 2),
1367
1368 /* 0000 0000 0110 ... */
1369 /* 000 */ V(4, 15, 2),/* 326 */
1370 /* 001 */ V(4, 15, 2),
1371 /* 010 */ V(15, 4, 2),
1372 /* 011 */ V(15, 4, 2),
1373 /* 100 */ V(12, 10, 3),
1374 /* 101 */ V(14, 6, 3),
1375 /* 110 */ V(15, 3, 2),
1376 /* 111 */ V(15, 3, 2),
1377
1378 /* 0000 0000 0111 ... */
1379 /* 00 */ V(3, 15, 1),/* 334 */
1380 /* 01 */ V(3, 15, 1),
1381 /* 10 */ V(8, 13, 2),
1382 /* 11 */ V(13, 8, 2),
1383
1384 /* 0000 0000 1000 ... */
1385 /* 0 */ V(2, 15, 1),/* 338 */
1386 /* 1 */ V(15, 2, 1),
1387
1388 /* 0000 0000 1001 ... */
1389 /* 00 */ V(6, 14, 2),/* 340 */
1390 /* 01 */ V(9, 12, 2),
1391 /* 10 */ V(0, 15, 1),
1392 /* 11 */ V(0, 15, 1),
1393
1394 /* 0000 0000 1010 ... */
1395 /* 00 */ V(12, 9, 2),/* 344 */
1396 /* 01 */ V(5, 14, 2),
1397 /* 10 */ V(10, 11, 1),
1398 /* 11 */ V(10, 11, 1),
1399
1400 /* 0000 0000 1011 ... */
1401 /* 00 */ V(7, 13, 2),/* 348 */
1402 /* 01 */ V(13, 7, 2),
1403 /* 10 */ V(4, 14, 1),
1404 /* 11 */ V(4, 14, 1),
1405
1406 /* 0000 0000 1100 ... */
1407 /* 00 */ V(12, 8, 2),/* 352 */
1408 /* 01 */ V(13, 6, 2),
1409 /* 10 */ V(3, 14, 1),
1410 /* 11 */ V(3, 14, 1),
1411
1412 /* 0000 0000 1101 ... */
1413 /* 00 */ V(11, 9, 1),/* 356 */
1414 /* 01 */ V(11, 9, 1),
1415 /* 10 */ V(9, 11, 2),
1416 /* 11 */ V(10, 10, 2),
1417
1418 /* 0000 0001 0001 ... */
1419 /* 0 */ V(11, 10, 1),/* 360 */
1420 /* 1 */ V(14, 5, 1),
1421
1422 /* 0000 0001 0010 ... */
1423 /* 0 */ V(14, 4, 1),/* 362 */
1424 /* 1 */ V(8, 12, 1),
1425
1426 /* 0000 0001 0011 ... */
1427 /* 0 */ V(6, 13, 1),/* 364 */
1428 /* 1 */ V(14, 3, 1),
1429
1430 /* 0000 0001 0101 ... */
1431 /* 0 */ V(2, 14, 1),/* 366 */
1432 /* 1 */ V(0, 14, 1),
1433
1434 /* 0000 0001 1000 ... */
1435 /* 0 */ V(14, 0, 1),/* 368 */
1436 /* 1 */ V(5, 13, 1),
1437
1438 /* 0000 0001 1001 ... */
1439 /* 0 */ V(13, 5, 1),/* 370 */
1440 /* 1 */ V(7, 12, 1),
1441
1442 /* 0000 0001 1010 ... */
1443 /* 0 */ V(12, 7, 1),/* 372 */
1444 /* 1 */ V(4, 13, 1),
1445
1446 /* 0000 0001 1011 ... */
1447 /* 0 */ V(8, 11, 1),/* 374 */
1448 /* 1 */ V(11, 8, 1),
1449
1450 /* 0000 0001 1100 ... */
1451 /* 0 */ V(13, 4, 1),/* 376 */
1452 /* 1 */ V(9, 10, 1),
1453
1454 /* 0000 0001 1101 ... */
1455 /* 0 */ V(10, 9, 1),/* 378 */
1456 /* 1 */ V(6, 12, 1),
1457
1458 /* 0000 0010 0000 ... */
1459 /* 0 */ V(13, 3, 1),/* 380 */
1460 /* 1 */ V(7, 11, 1),
1461
1462 /* 0000 0010 0101 ... */
1463 /* 0 */ V(5, 12, 1),/* 382 */
1464 /* 1 */ V(12, 5, 1),
1465
1466 /* 0000 0010 0110 ... */
1467 /* 0 */ V(9, 9, 1),/* 384 */
1468 /* 1 */ V(7, 10, 1),
1469
1470 /* 0000 0010 1000 ... */
1471 /* 0 */ V(10, 7, 1),/* 386 */
1472 /* 1 */ V(9, 7, 1),
1473
1474 /* 0000 0000 0000 0000 ... */
1475 /* 000 */ V(15, 14, 3),/* 388 */
1476 /* 001 */ V(15, 12, 3),
1477 /* 010 */ V(15, 13, 2),
1478 /* 011 */ V(15, 13, 2),
1479 /* 100 */ V(14, 13, 1),
1480 /* 101 */ V(14, 13, 1),
1481 /* 110 */ V(14, 13, 1),
1482 /* 111 */ V(14, 13, 1),
1483
1484 /* 0000 0000 0000 1011 ... */
1485 /* 0 */ V(10, 15, 1),/* 396 */
1486 /* 1 */ V(14, 9, 1)
1487};
1488
1489static
1490union huffpair const hufftab15[] = {
1491 /* 0000 */ PTR(16, 4),
1492 /* 0001 */ PTR(32, 4),
1493 /* 0010 */ PTR(48, 4),
1494 /* 0011 */ PTR(64, 4),
1495 /* 0100 */ PTR(80, 4),
1496 /* 0101 */ PTR(96, 3),
1497 /* 0110 */ PTR(104, 3),
1498 /* 0111 */ PTR(112, 2),
1499 /* 1000 */ PTR(116, 1),
1500 /* 1001 */ PTR(118, 1),
1501 /* 1010 */ V(1, 1, 3),
1502 /* 1011 */ V(1, 1, 3),
1503 /* 1100 */ V(0, 1, 4),
1504 /* 1101 */ V(1, 0, 4),
1505 /* 1110 */ V(0, 0, 3),
1506 /* 1111 */ V(0, 0, 3),
1507
1508 /* 0000 ... */
1509 /* 0000 */ PTR(120, 4),/* 16 */
1510 /* 0001 */ PTR(136, 4),
1511 /* 0010 */ PTR(152, 4),
1512 /* 0011 */ PTR(168, 4),
1513 /* 0100 */ PTR(184, 4),
1514 /* 0101 */ PTR(200, 3),
1515 /* 0110 */ PTR(208, 3),
1516 /* 0111 */ PTR(216, 4),
1517 /* 1000 */ PTR(232, 3),
1518 /* 1001 */ PTR(240, 3),
1519 /* 1010 */ PTR(248, 3),
1520 /* 1011 */ PTR(256, 3),
1521 /* 1100 */ PTR(264, 2),
1522 /* 1101 */ PTR(268, 3),
1523 /* 1110 */ PTR(276, 3),
1524 /* 1111 */ PTR(284, 2),
1525
1526 /* 0001 ... */
1527 /* 0000 */ PTR(288, 2),/* 32 */
1528 /* 0001 */ PTR(292, 2),
1529 /* 0010 */ PTR(296, 2),
1530 /* 0011 */ PTR(300, 2),
1531 /* 0100 */ PTR(304, 2),
1532 /* 0101 */ PTR(308, 2),
1533 /* 0110 */ PTR(312, 2),
1534 /* 0111 */ PTR(316, 2),
1535 /* 1000 */ PTR(320, 1),
1536 /* 1001 */ PTR(322, 1),
1537 /* 1010 */ PTR(324, 1),
1538 /* 1011 */ PTR(326, 2),
1539 /* 1100 */ PTR(330, 1),
1540 /* 1101 */ PTR(332, 1),
1541 /* 1110 */ PTR(334, 2),
1542 /* 1111 */ PTR(338, 1),
1543
1544 /* 0010 ... */
1545 /* 0000 */ PTR(340, 1),/* 48 */
1546 /* 0001 */ PTR(342, 1),
1547 /* 0010 */ V(9, 1, 4),
1548 /* 0011 */ PTR(344, 1),
1549 /* 0100 */ PTR(346, 1),
1550 /* 0101 */ PTR(348, 1),
1551 /* 0110 */ PTR(350, 1),
1552 /* 0111 */ PTR(352, 1),
1553 /* 1000 */ V(2, 8, 4),
1554 /* 1001 */ V(8, 2, 4),
1555 /* 1010 */ V(1, 8, 4),
1556 /* 1011 */ V(8, 1, 4),
1557 /* 1100 */ PTR(354, 1),
1558 /* 1101 */ PTR(356, 1),
1559 /* 1110 */ PTR(358, 1),
1560 /* 1111 */ PTR(360, 1),
1561
1562 /* 0011 ... */
1563 /* 0000 */ V(2, 7, 4),/* 64 */
1564 /* 0001 */ V(7, 2, 4),
1565 /* 0010 */ V(6, 4, 4),
1566 /* 0011 */ V(1, 7, 4),
1567 /* 0100 */ V(5, 5, 4),
1568 /* 0101 */ V(7, 1, 4),
1569 /* 0110 */ PTR(362, 1),
1570 /* 0111 */ V(3, 6, 4),
1571 /* 1000 */ V(6, 3, 4),
1572 /* 1001 */ V(4, 5, 4),
1573 /* 1010 */ V(5, 4, 4),
1574 /* 1011 */ V(2, 6, 4),
1575 /* 1100 */ V(6, 2, 4),
1576 /* 1101 */ V(1, 6, 4),
1577 /* 1110 */ PTR(364, 1),
1578 /* 1111 */ V(3, 5, 4),
1579
1580 /* 0100 ... */
1581 /* 0000 */ V(6, 1, 3),/* 80 */
1582 /* 0001 */ V(6, 1, 3),
1583 /* 0010 */ V(5, 3, 4),
1584 /* 0011 */ V(4, 4, 4),
1585 /* 0100 */ V(2, 5, 3),
1586 /* 0101 */ V(2, 5, 3),
1587 /* 0110 */ V(5, 2, 3),
1588 /* 0111 */ V(5, 2, 3),
1589 /* 1000 */ V(1, 5, 3),
1590 /* 1001 */ V(1, 5, 3),
1591 /* 1010 */ V(5, 1, 3),
1592 /* 1011 */ V(5, 1, 3),
1593 /* 1100 */ V(0, 5, 4),
1594 /* 1101 */ V(5, 0, 4),
1595 /* 1110 */ V(3, 4, 3),
1596 /* 1111 */ V(3, 4, 3),
1597
1598 /* 0101 ... */
1599 /* 000 */ V(4, 3, 3),/* 96 */
1600 /* 001 */ V(2, 4, 3),
1601 /* 010 */ V(4, 2, 3),
1602 /* 011 */ V(3, 3, 3),
1603 /* 100 */ V(4, 1, 2),
1604 /* 101 */ V(4, 1, 2),
1605 /* 110 */ V(1, 4, 3),
1606 /* 111 */ V(0, 4, 3),
1607
1608 /* 0110 ... */
1609 /* 000 */ V(2, 3, 2),/* 104 */
1610 /* 001 */ V(2, 3, 2),
1611 /* 010 */ V(3, 2, 2),
1612 /* 011 */ V(3, 2, 2),
1613 /* 100 */ V(4, 0, 3),
1614 /* 101 */ V(0, 3, 3),
1615 /* 110 */ V(1, 3, 2),
1616 /* 111 */ V(1, 3, 2),
1617
1618 /* 0111 ... */
1619 /* 00 */ V(3, 1, 2),/* 112 */
1620 /* 01 */ V(3, 0, 2),
1621 /* 10 */ V(2, 2, 1),
1622 /* 11 */ V(2, 2, 1),
1623
1624 /* 1000 ... */
1625 /* 0 */ V(1, 2, 1),/* 116 */
1626 /* 1 */ V(2, 1, 1),
1627
1628 /* 1001 ... */
1629 /* 0 */ V(0, 2, 1),/* 118 */
1630 /* 1 */ V(2, 0, 1),
1631
1632 /* 0000 0000 ... */
1633 /* 0000 */ PTR(366, 1),/* 120 */
1634 /* 0001 */ PTR(368, 1),
1635 /* 0010 */ V(14, 14, 4),
1636 /* 0011 */ PTR(370, 1),
1637 /* 0100 */ PTR(372, 1),
1638 /* 0101 */ PTR(374, 1),
1639 /* 0110 */ V(15, 11, 4),
1640 /* 0111 */ PTR(376, 1),
1641 /* 1000 */ V(13, 13, 4),
1642 /* 1001 */ V(10, 15, 4),
1643 /* 1010 */ V(15, 10, 4),
1644 /* 1011 */ V(11, 14, 4),
1645 /* 1100 */ V(14, 11, 4),
1646 /* 1101 */ V(12, 13, 4),
1647 /* 1110 */ V(13, 12, 4),
1648 /* 1111 */ V(9, 15, 4),
1649
1650 /* 0000 0001 ... */
1651 /* 0000 */ V(15, 9, 4),/* 136 */
1652 /* 0001 */ V(14, 10, 4),
1653 /* 0010 */ V(11, 13, 4),
1654 /* 0011 */ V(13, 11, 4),
1655 /* 0100 */ V(8, 15, 4),
1656 /* 0101 */ V(15, 8, 4),
1657 /* 0110 */ V(12, 12, 4),
1658 /* 0111 */ V(9, 14, 4),
1659 /* 1000 */ V(14, 9, 4),
1660 /* 1001 */ V(7, 15, 4),
1661 /* 1010 */ V(15, 7, 4),
1662 /* 1011 */ V(10, 13, 4),
1663 /* 1100 */ V(13, 10, 4),
1664 /* 1101 */ V(11, 12, 4),
1665 /* 1110 */ V(6, 15, 4),
1666 /* 1111 */ PTR(378, 1),
1667
1668 /* 0000 0010 ... */
1669 /* 0000 */ V(12, 11, 3),/* 152 */
1670 /* 0001 */ V(12, 11, 3),
1671 /* 0010 */ V(15, 6, 3),
1672 /* 0011 */ V(15, 6, 3),
1673 /* 0100 */ V(8, 14, 4),
1674 /* 0101 */ V(14, 8, 4),
1675 /* 0110 */ V(5, 15, 4),
1676 /* 0111 */ V(9, 13, 4),
1677 /* 1000 */ V(15, 5, 3),
1678 /* 1001 */ V(15, 5, 3),
1679 /* 1010 */ V(7, 14, 3),
1680 /* 1011 */ V(7, 14, 3),
1681 /* 1100 */ V(14, 7, 3),
1682 /* 1101 */ V(14, 7, 3),
1683 /* 1110 */ V(10, 12, 3),
1684 /* 1111 */ V(10, 12, 3),
1685
1686 /* 0000 0011 ... */
1687 /* 0000 */ V(12, 10, 3),/* 168 */
1688 /* 0001 */ V(12, 10, 3),
1689 /* 0010 */ V(11, 11, 3),
1690 /* 0011 */ V(11, 11, 3),
1691 /* 0100 */ V(13, 9, 4),
1692 /* 0101 */ V(8, 13, 4),
1693 /* 0110 */ V(4, 15, 3),
1694 /* 0111 */ V(4, 15, 3),
1695 /* 1000 */ V(15, 4, 3),
1696 /* 1001 */ V(15, 4, 3),
1697 /* 1010 */ V(3, 15, 3),
1698 /* 1011 */ V(3, 15, 3),
1699 /* 1100 */ V(15, 3, 3),
1700 /* 1101 */ V(15, 3, 3),
1701 /* 1110 */ V(13, 8, 3),
1702 /* 1111 */ V(13, 8, 3),
1703
1704 /* 0000 0100 ... */
1705 /* 0000 */ V(14, 6, 3),/* 184 */
1706 /* 0001 */ V(14, 6, 3),
1707 /* 0010 */ V(2, 15, 3),
1708 /* 0011 */ V(2, 15, 3),
1709 /* 0100 */ V(15, 2, 3),
1710 /* 0101 */ V(15, 2, 3),
1711 /* 0110 */ V(6, 14, 4),
1712 /* 0111 */ V(15, 0, 4),
1713 /* 1000 */ V(1, 15, 3),
1714 /* 1001 */ V(1, 15, 3),
1715 /* 1010 */ V(15, 1, 3),
1716 /* 1011 */ V(15, 1, 3),
1717 /* 1100 */ V(9, 12, 3),
1718 /* 1101 */ V(9, 12, 3),
1719 /* 1110 */ V(12, 9, 3),
1720 /* 1111 */ V(12, 9, 3),
1721
1722 /* 0000 0101 ... */
1723 /* 000 */ V(5, 14, 3),/* 200 */
1724 /* 001 */ V(10, 11, 3),
1725 /* 010 */ V(11, 10, 3),
1726 /* 011 */ V(14, 5, 3),
1727 /* 100 */ V(7, 13, 3),
1728 /* 101 */ V(13, 7, 3),
1729 /* 110 */ V(4, 14, 3),
1730 /* 111 */ V(14, 4, 3),
1731
1732 /* 0000 0110 ... */
1733 /* 000 */ V(8, 12, 3),/* 208 */
1734 /* 001 */ V(12, 8, 3),
1735 /* 010 */ V(3, 14, 3),
1736 /* 011 */ V(6, 13, 3),
1737 /* 100 */ V(13, 6, 3),
1738 /* 101 */ V(14, 3, 3),
1739 /* 110 */ V(9, 11, 3),
1740 /* 111 */ V(11, 9, 3),
1741
1742 /* 0000 0111 ... */
1743 /* 0000 */ V(2, 14, 3),/* 216 */
1744 /* 0001 */ V(2, 14, 3),
1745 /* 0010 */ V(10, 10, 3),
1746 /* 0011 */ V(10, 10, 3),
1747 /* 0100 */ V(14, 2, 3),
1748 /* 0101 */ V(14, 2, 3),
1749 /* 0110 */ V(1, 14, 3),
1750 /* 0111 */ V(1, 14, 3),
1751 /* 1000 */ V(14, 1, 3),
1752 /* 1001 */ V(14, 1, 3),
1753 /* 1010 */ V(0, 14, 4),
1754 /* 1011 */ V(14, 0, 4),
1755 /* 1100 */ V(5, 13, 3),
1756 /* 1101 */ V(5, 13, 3),
1757 /* 1110 */ V(13, 5, 3),
1758 /* 1111 */ V(13, 5, 3),
1759
1760 /* 0000 1000 ... */
1761 /* 000 */ V(7, 12, 3),/* 232 */
1762 /* 001 */ V(12, 7, 3),
1763 /* 010 */ V(4, 13, 3),
1764 /* 011 */ V(8, 11, 3),
1765 /* 100 */ V(13, 4, 2),
1766 /* 101 */ V(13, 4, 2),
1767 /* 110 */ V(11, 8, 3),
1768 /* 111 */ V(9, 10, 3),
1769
1770 /* 0000 1001 ... */
1771 /* 000 */ V(10, 9, 3),/* 240 */
1772 /* 001 */ V(6, 12, 3),
1773 /* 010 */ V(12, 6, 3),
1774 /* 011 */ V(3, 13, 3),
1775 /* 100 */ V(13, 3, 2),
1776 /* 101 */ V(13, 3, 2),
1777 /* 110 */ V(13, 2, 2),
1778 /* 111 */ V(13, 2, 2),
1779
1780 /* 0000 1010 ... */
1781 /* 000 */ V(2, 13, 3),/* 248 */
1782 /* 001 */ V(0, 13, 3),
1783 /* 010 */ V(1, 13, 2),
1784 /* 011 */ V(1, 13, 2),
1785 /* 100 */ V(7, 11, 2),
1786 /* 101 */ V(7, 11, 2),
1787 /* 110 */ V(11, 7, 2),
1788 /* 111 */ V(11, 7, 2),
1789
1790 /* 0000 1011 ... */
1791 /* 000 */ V(13, 1, 2),/* 256 */
1792 /* 001 */ V(13, 1, 2),
1793 /* 010 */ V(5, 12, 3),
1794 /* 011 */ V(13, 0, 3),
1795 /* 100 */ V(12, 5, 2),
1796 /* 101 */ V(12, 5, 2),
1797 /* 110 */ V(8, 10, 2),
1798 /* 111 */ V(8, 10, 2),
1799
1800 /* 0000 1100 ... */
1801 /* 00 */ V(10, 8, 2),/* 264 */
1802 /* 01 */ V(4, 12, 2),
1803 /* 10 */ V(12, 4, 2),
1804 /* 11 */ V(6, 11, 2),
1805
1806 /* 0000 1101 ... */
1807 /* 000 */ V(11, 6, 2),/* 268 */
1808 /* 001 */ V(11, 6, 2),
1809 /* 010 */ V(9, 9, 3),
1810 /* 011 */ V(0, 12, 3),
1811 /* 100 */ V(3, 12, 2),
1812 /* 101 */ V(3, 12, 2),
1813 /* 110 */ V(12, 3, 2),
1814 /* 111 */ V(12, 3, 2),
1815
1816 /* 0000 1110 ... */
1817 /* 000 */ V(7, 10, 2),/* 276 */
1818 /* 001 */ V(7, 10, 2),
1819 /* 010 */ V(10, 7, 2),
1820 /* 011 */ V(10, 7, 2),
1821 /* 100 */ V(10, 6, 2),
1822 /* 101 */ V(10, 6, 2),
1823 /* 110 */ V(12, 0, 3),
1824 /* 111 */ V(0, 11, 3),
1825
1826 /* 0000 1111 ... */
1827 /* 00 */ V(12, 2, 1),/* 284 */
1828 /* 01 */ V(12, 2, 1),
1829 /* 10 */ V(2, 12, 2),
1830 /* 11 */ V(5, 11, 2),
1831
1832 /* 0001 0000 ... */
1833 /* 00 */ V(11, 5, 2),/* 288 */
1834 /* 01 */ V(1, 12, 2),
1835 /* 10 */ V(8, 9, 2),
1836 /* 11 */ V(9, 8, 2),
1837
1838 /* 0001 0001 ... */
1839 /* 00 */ V(12, 1, 2),/* 292 */
1840 /* 01 */ V(4, 11, 2),
1841 /* 10 */ V(11, 4, 2),
1842 /* 11 */ V(6, 10, 2),
1843
1844 /* 0001 0010 ... */
1845 /* 00 */ V(3, 11, 2),/* 296 */
1846 /* 01 */ V(7, 9, 2),
1847 /* 10 */ V(11, 3, 1),
1848 /* 11 */ V(11, 3, 1),
1849
1850 /* 0001 0011 ... */
1851 /* 00 */ V(9, 7, 2),/* 300 */
1852 /* 01 */ V(8, 8, 2),
1853 /* 10 */ V(2, 11, 2),
1854 /* 11 */ V(5, 10, 2),
1855
1856 /* 0001 0100 ... */
1857 /* 00 */ V(11, 2, 1),/* 304 */
1858 /* 01 */ V(11, 2, 1),
1859 /* 10 */ V(10, 5, 2),
1860 /* 11 */ V(1, 11, 2),
1861
1862 /* 0001 0101 ... */
1863 /* 00 */ V(11, 1, 1),/* 308 */
1864 /* 01 */ V(11, 1, 1),
1865 /* 10 */ V(11, 0, 2),
1866 /* 11 */ V(6, 9, 2),
1867
1868 /* 0001 0110 ... */
1869 /* 00 */ V(9, 6, 2),/* 312 */
1870 /* 01 */ V(4, 10, 2),
1871 /* 10 */ V(10, 4, 2),
1872 /* 11 */ V(7, 8, 2),
1873
1874 /* 0001 0111 ... */
1875 /* 00 */ V(8, 7, 2),/* 316 */
1876 /* 01 */ V(3, 10, 2),
1877 /* 10 */ V(10, 3, 1),
1878 /* 11 */ V(10, 3, 1),
1879
1880 /* 0001 1000 ... */
1881 /* 0 */ V(5, 9, 1),/* 320 */
1882 /* 1 */ V(9, 5, 1),
1883
1884 /* 0001 1001 ... */
1885 /* 0 */ V(2, 10, 1),/* 322 */
1886 /* 1 */ V(10, 2, 1),
1887
1888 /* 0001 1010 ... */
1889 /* 0 */ V(1, 10, 1),/* 324 */
1890 /* 1 */ V(10, 1, 1),
1891
1892 /* 0001 1011 ... */
1893 /* 00 */ V(0, 10, 2),/* 326 */
1894 /* 01 */ V(10, 0, 2),
1895 /* 10 */ V(6, 8, 1),
1896 /* 11 */ V(6, 8, 1),
1897
1898 /* 0001 1100 ... */
1899 /* 0 */ V(8, 6, 1),/* 330 */
1900 /* 1 */ V(4, 9, 1),
1901
1902 /* 0001 1101 ... */
1903 /* 0 */ V(9, 4, 1),/* 332 */
1904 /* 1 */ V(3, 9, 1),
1905
1906 /* 0001 1110 ... */
1907 /* 00 */ V(9, 3, 1),/* 334 */
1908 /* 01 */ V(9, 3, 1),
1909 /* 10 */ V(7, 7, 2),
1910 /* 11 */ V(0, 9, 2),
1911
1912 /* 0001 1111 ... */
1913 /* 0 */ V(5, 8, 1),/* 338 */
1914 /* 1 */ V(8, 5, 1),
1915
1916 /* 0010 0000 ... */
1917 /* 0 */ V(2, 9, 1),/* 340 */
1918 /* 1 */ V(6, 7, 1),
1919
1920 /* 0010 0001 ... */
1921 /* 0 */ V(7, 6, 1),/* 342 */
1922 /* 1 */ V(9, 2, 1),
1923
1924 /* 0010 0011 ... */
1925 /* 0 */ V(1, 9, 1),/* 344 */
1926 /* 1 */ V(9, 0, 1),
1927
1928 /* 0010 0100 ... */
1929 /* 0 */ V(4, 8, 1),/* 346 */
1930 /* 1 */ V(8, 4, 1),
1931
1932 /* 0010 0101 ... */
1933 /* 0 */ V(5, 7, 1),/* 348 */
1934 /* 1 */ V(7, 5, 1),
1935
1936 /* 0010 0110 ... */
1937 /* 0 */ V(3, 8, 1),/* 350 */
1938 /* 1 */ V(8, 3, 1),
1939
1940 /* 0010 0111 ... */
1941 /* 0 */ V(6, 6, 1),/* 352 */
1942 /* 1 */ V(4, 7, 1),
1943
1944 /* 0010 1100 ... */
1945 /* 0 */ V(7, 4, 1),/* 354 */
1946 /* 1 */ V(0, 8, 1),
1947
1948 /* 0010 1101 ... */
1949 /* 0 */ V(8, 0, 1),/* 356 */
1950 /* 1 */ V(5, 6, 1),
1951
1952 /* 0010 1110 ... */
1953 /* 0 */ V(6, 5, 1),/* 358 */
1954 /* 1 */ V(3, 7, 1),
1955
1956 /* 0010 1111 ... */
1957 /* 0 */ V(7, 3, 1),/* 360 */
1958 /* 1 */ V(4, 6, 1),
1959
1960 /* 0011 0110 ... */
1961 /* 0 */ V(0, 7, 1),/* 362 */
1962 /* 1 */ V(7, 0, 1),
1963
1964 /* 0011 1110 ... */
1965 /* 0 */ V(0, 6, 1),/* 364 */
1966 /* 1 */ V(6, 0, 1),
1967
1968 /* 0000 0000 0000 ... */
1969 /* 0 */ V(15, 15, 1),/* 366 */
1970 /* 1 */ V(14, 15, 1),
1971
1972 /* 0000 0000 0001 ... */
1973 /* 0 */ V(15, 14, 1),/* 368 */
1974 /* 1 */ V(13, 15, 1),
1975
1976 /* 0000 0000 0011 ... */
1977 /* 0 */ V(15, 13, 1),/* 370 */
1978 /* 1 */ V(12, 15, 1),
1979
1980 /* 0000 0000 0100 ... */
1981 /* 0 */ V(15, 12, 1),/* 372 */
1982 /* 1 */ V(13, 14, 1),
1983
1984 /* 0000 0000 0101 ... */
1985 /* 0 */ V(14, 13, 1),/* 374 */
1986 /* 1 */ V(11, 15, 1),
1987
1988 /* 0000 0000 0111 ... */
1989 /* 0 */ V(12, 14, 1),/* 376 */
1990 /* 1 */ V(14, 12, 1),
1991
1992 /* 0000 0001 1111 ... */
1993 /* 0 */ V(10, 14, 1),/* 378 */
1994 /* 1 */ V(0, 15, 1)
1995};
1996
1997static
1998union huffpair const hufftab16[] = {
1999 /* 0000 */ PTR(16, 4),
2000 /* 0001 */ PTR(32, 4),
2001 /* 0010 */ PTR(48, 4),
2002 /* 0011 */ PTR(64, 2),
2003 /* 0100 */ V(1, 1, 4),
2004 /* 0101 */ V(0, 1, 4),
2005 /* 0110 */ V(1, 0, 3),
2006 /* 0111 */ V(1, 0, 3),
2007 /* 1000 */ V(0, 0, 1),
2008 /* 1001 */ V(0, 0, 1),
2009 /* 1010 */ V(0, 0, 1),
2010 /* 1011 */ V(0, 0, 1),
2011 /* 1100 */ V(0, 0, 1),
2012 /* 1101 */ V(0, 0, 1),
2013 /* 1110 */ V(0, 0, 1),
2014 /* 1111 */ V(0, 0, 1),
2015
2016 /* 0000 ... */
2017 /* 0000 */ PTR(68, 3),/* 16 */
2018 /* 0001 */ PTR(76, 3),
2019 /* 0010 */ PTR(84, 2),
2020 /* 0011 */ V(15, 15, 4),
2021 /* 0100 */ PTR(88, 2),
2022 /* 0101 */ PTR(92, 1),
2023 /* 0110 */ PTR(94, 4),
2024 /* 0111 */ V(15, 2, 4),
2025 /* 1000 */ PTR(110, 1),
2026 /* 1001 */ V(1, 15, 4),
2027 /* 1010 */ V(15, 1, 4),
2028 /* 1011 */ PTR(112, 4),
2029 /* 1100 */ PTR(128, 4),
2030 /* 1101 */ PTR(144, 4),
2031 /* 1110 */ PTR(160, 4),
2032 /* 1111 */ PTR(176, 4),
2033
2034 /* 0001 ... */
2035 /* 0000 */ PTR(192, 4),/* 32 */
2036 /* 0001 */ PTR(208, 3),
2037 /* 0010 */ PTR(216, 3),
2038 /* 0011 */ PTR(224, 3),
2039 /* 0100 */ PTR(232, 3),
2040 /* 0101 */ PTR(240, 3),
2041 /* 0110 */ PTR(248, 3),
2042 /* 0111 */ PTR(256, 3),
2043 /* 1000 */ PTR(264, 2),
2044 /* 1001 */ PTR(268, 2),
2045 /* 1010 */ PTR(272, 1),
2046 /* 1011 */ PTR(274, 2),
2047 /* 1100 */ PTR(278, 2),
2048 /* 1101 */ PTR(282, 1),
2049 /* 1110 */ V(5, 1, 4),
2050 /* 1111 */ PTR(284, 1),
2051
2052 /* 0010 ... */
2053 /* 0000 */ PTR(286, 1),/* 48 */
2054 /* 0001 */ PTR(288, 1),
2055 /* 0010 */ PTR(290, 1),
2056 /* 0011 */ V(1, 4, 4),
2057 /* 0100 */ V(4, 1, 4),
2058 /* 0101 */ PTR(292, 1),
2059 /* 0110 */ V(2, 3, 4),
2060 /* 0111 */ V(3, 2, 4),
2061 /* 1000 */ V(1, 3, 3),
2062 /* 1001 */ V(1, 3, 3),
2063 /* 1010 */ V(3, 1, 3),
2064 /* 1011 */ V(3, 1, 3),
2065 /* 1100 */ V(0, 3, 4),
2066 /* 1101 */ V(3, 0, 4),
2067 /* 1110 */ V(2, 2, 3),
2068 /* 1111 */ V(2, 2, 3),
2069
2070 /* 0011 ... */
2071 /* 00 */ V(1, 2, 2),/* 64 */
2072 /* 01 */ V(2, 1, 2),
2073 /* 10 */ V(0, 2, 2),
2074 /* 11 */ V(2, 0, 2),
2075
2076 /* 0000 0000 ... */
2077 /* 000 */ V(14, 15, 3),/* 68 */
2078 /* 001 */ V(15, 14, 3),
2079 /* 010 */ V(13, 15, 3),
2080 /* 011 */ V(15, 13, 3),
2081 /* 100 */ V(12, 15, 3),
2082 /* 101 */ V(15, 12, 3),
2083 /* 110 */ V(11, 15, 3),
2084 /* 111 */ V(15, 11, 3),
2085
2086 /* 0000 0001 ... */
2087 /* 000 */ V(10, 15, 2),/* 76 */
2088 /* 001 */ V(10, 15, 2),
2089 /* 010 */ V(15, 10, 3),
2090 /* 011 */ V(9, 15, 3),
2091 /* 100 */ V(15, 9, 3),
2092 /* 101 */ V(15, 8, 3),
2093 /* 110 */ V(8, 15, 2),
2094 /* 111 */ V(8, 15, 2),
2095
2096 /* 0000 0010 ... */
2097 /* 00 */ V(7, 15, 2),/* 84 */
2098 /* 01 */ V(15, 7, 2),
2099 /* 10 */ V(6, 15, 2),
2100 /* 11 */ V(15, 6, 2),
2101
2102 /* 0000 0100 ... */
2103 /* 00 */ V(5, 15, 2),/* 88 */
2104 /* 01 */ V(15, 5, 2),
2105 /* 10 */ V(4, 15, 1),
2106 /* 11 */ V(4, 15, 1),
2107
2108 /* 0000 0101 ... */
2109 /* 0 */ V(15, 4, 1),/* 92 */
2110 /* 1 */ V(15, 3, 1),
2111
2112 /* 0000 0110 ... */
2113 /* 0000 */ V(15, 0, 1),/* 94 */
2114 /* 0001 */ V(15, 0, 1),
2115 /* 0010 */ V(15, 0, 1),
2116 /* 0011 */ V(15, 0, 1),
2117 /* 0100 */ V(15, 0, 1),
2118 /* 0101 */ V(15, 0, 1),
2119 /* 0110 */ V(15, 0, 1),
2120 /* 0111 */ V(15, 0, 1),
2121 /* 1000 */ V(3, 15, 2),
2122 /* 1001 */ V(3, 15, 2),
2123 /* 1010 */ V(3, 15, 2),
2124 /* 1011 */ V(3, 15, 2),
2125 /* 1100 */ PTR(294, 4),
2126 /* 1101 */ PTR(310, 3),
2127 /* 1110 */ PTR(318, 3),
2128 /* 1111 */ PTR(326, 3),
2129
2130 /* 0000 1000 ... */
2131 /* 0 */ V(2, 15, 1),/* 110 */
2132 /* 1 */ V(0, 15, 1),
2133
2134 /* 0000 1011 ... */
2135 /* 0000 */ PTR(334, 2),/* 112 */
2136 /* 0001 */ PTR(338, 2),
2137 /* 0010 */ PTR(342, 2),
2138 /* 0011 */ PTR(346, 1),
2139 /* 0100 */ PTR(348, 2),
2140 /* 0101 */ PTR(352, 2),
2141 /* 0110 */ PTR(356, 1),
2142 /* 0111 */ PTR(358, 2),
2143 /* 1000 */ PTR(362, 2),
2144 /* 1001 */ PTR(366, 2),
2145 /* 1010 */ PTR(370, 2),
2146 /* 1011 */ V(14, 3, 4),
2147 /* 1100 */ PTR(374, 1),
2148 /* 1101 */ PTR(376, 1),
2149 /* 1110 */ PTR(378, 1),
2150 /* 1111 */ PTR(380, 1),
2151
2152 /* 0000 1100 ... */
2153 /* 0000 */ PTR(382, 1),/* 128 */
2154 /* 0001 */ PTR(384, 1),
2155 /* 0010 */ PTR(386, 1),
2156 /* 0011 */ V(0, 13, 4),
2157 /* 0100 */ PTR(388, 1),
2158 /* 0101 */ PTR(390, 1),
2159 /* 0110 */ PTR(392, 1),
2160 /* 0111 */ V(3, 12, 4),
2161 /* 1000 */ PTR(394, 1),
2162 /* 1001 */ V(1, 12, 4),
2163 /* 1010 */ V(12, 0, 4),
2164 /* 1011 */ PTR(396, 1),
2165 /* 1100 */ V(14, 2, 3),
2166 /* 1101 */ V(14, 2, 3),
2167 /* 1110 */ V(2, 14, 4),
2168 /* 1111 */ V(1, 14, 4),
2169
2170 /* 0000 1101 ... */
2171 /* 0000 */ V(13, 3, 4),/* 144 */
2172 /* 0001 */ V(2, 13, 4),
2173 /* 0010 */ V(13, 2, 4),
2174 /* 0011 */ V(13, 1, 4),
2175 /* 0100 */ V(3, 11, 4),
2176 /* 0101 */ PTR(398, 1),
2177 /* 0110 */ V(1, 13, 3),
2178 /* 0111 */ V(1, 13, 3),
2179 /* 1000 */ V(12, 4, 4),
2180 /* 1001 */ V(6, 11, 4),
2181 /* 1010 */ V(12, 3, 4),
2182 /* 1011 */ V(10, 7, 4),
2183 /* 1100 */ V(2, 12, 3),
2184 /* 1101 */ V(2, 12, 3),
2185 /* 1110 */ V(12, 2, 4),
2186 /* 1111 */ V(11, 5, 4),
2187
2188 /* 0000 1110 ... */
2189 /* 0000 */ V(12, 1, 4),/* 160 */
2190 /* 0001 */ V(0, 12, 4),
2191 /* 0010 */ V(4, 11, 4),
2192 /* 0011 */ V(11, 4, 4),
2193 /* 0100 */ V(6, 10, 4),
2194 /* 0101 */ V(10, 6, 4),
2195 /* 0110 */ V(11, 3, 3),
2196 /* 0111 */ V(11, 3, 3),
2197 /* 1000 */ V(5, 10, 4),
2198 /* 1001 */ V(10, 5, 4),
2199 /* 1010 */ V(2, 11, 3),
2200 /* 1011 */ V(2, 11, 3),
2201 /* 1100 */ V(11, 2, 3),
2202 /* 1101 */ V(11, 2, 3),
2203 /* 1110 */ V(1, 11, 3),
2204 /* 1111 */ V(1, 11, 3),
2205
2206 /* 0000 1111 ... */
2207 /* 0000 */ V(11, 1, 3),/* 176 */
2208 /* 0001 */ V(11, 1, 3),
2209 /* 0010 */ V(0, 11, 4),
2210 /* 0011 */ V(11, 0, 4),
2211 /* 0100 */ V(6, 9, 4),
2212 /* 0101 */ V(9, 6, 4),
2213 /* 0110 */ V(4, 10, 4),
2214 /* 0111 */ V(10, 4, 4),
2215 /* 1000 */ V(7, 8, 4),
2216 /* 1001 */ V(8, 7, 4),
2217 /* 1010 */ V(10, 3, 3),
2218 /* 1011 */ V(10, 3, 3),
2219 /* 1100 */ V(3, 10, 4),
2220 /* 1101 */ V(5, 9, 4),
2221 /* 1110 */ V(2, 10, 3),
2222 /* 1111 */ V(2, 10, 3),
2223
2224 /* 0001 0000 ... */
2225 /* 0000 */ V(9, 5, 4),/* 192 */
2226 /* 0001 */ V(6, 8, 4),
2227 /* 0010 */ V(10, 1, 3),
2228 /* 0011 */ V(10, 1, 3),
2229 /* 0100 */ V(8, 6, 4),
2230 /* 0101 */ V(7, 7, 4),
2231 /* 0110 */ V(9, 4, 3),
2232 /* 0111 */ V(9, 4, 3),
2233 /* 1000 */ V(4, 9, 4),
2234 /* 1001 */ V(5, 7, 4),
2235 /* 1010 */ V(6, 7, 3),
2236 /* 1011 */ V(6, 7, 3),
2237 /* 1100 */ V(10, 2, 2),
2238 /* 1101 */ V(10, 2, 2),
2239 /* 1110 */ V(10, 2, 2),
2240 /* 1111 */ V(10, 2, 2),
2241
2242 /* 0001 0001 ... */
2243 /* 000 */ V(1, 10, 2),/* 208 */
2244 /* 001 */ V(1, 10, 2),
2245 /* 010 */ V(0, 10, 3),
2246 /* 011 */ V(10, 0, 3),
2247 /* 100 */ V(3, 9, 3),
2248 /* 101 */ V(9, 3, 3),
2249 /* 110 */ V(5, 8, 3),
2250 /* 111 */ V(8, 5, 3),
2251
2252 /* 0001 0010 ... */
2253 /* 000 */ V(2, 9, 2),/* 216 */
2254 /* 001 */ V(2, 9, 2),
2255 /* 010 */ V(9, 2, 2),
2256 /* 011 */ V(9, 2, 2),
2257 /* 100 */ V(7, 6, 3),
2258 /* 101 */ V(0, 9, 3),
2259 /* 110 */ V(1, 9, 2),
2260 /* 111 */ V(1, 9, 2),
2261
2262 /* 0001 0011 ... */
2263 /* 000 */ V(9, 1, 2),/* 224 */
2264 /* 001 */ V(9, 1, 2),
2265 /* 010 */ V(9, 0, 3),
2266 /* 011 */ V(4, 8, 3),
2267 /* 100 */ V(8, 4, 3),
2268 /* 101 */ V(7, 5, 3),
2269 /* 110 */ V(3, 8, 3),
2270 /* 111 */ V(8, 3, 3),
2271
2272 /* 0001 0100 ... */
2273 /* 000 */ V(6, 6, 3),/* 232 */
2274 /* 001 */ V(2, 8, 3),
2275 /* 010 */ V(8, 2, 2),
2276 /* 011 */ V(8, 2, 2),
2277 /* 100 */ V(4, 7, 3),
2278 /* 101 */ V(7, 4, 3),
2279 /* 110 */ V(1, 8, 2),
2280 /* 111 */ V(1, 8, 2),
2281
2282 /* 0001 0101 ... */
2283 /* 000 */ V(8, 1, 2),/* 240 */
2284 /* 001 */ V(8, 1, 2),
2285 /* 010 */ V(8, 0, 2),
2286 /* 011 */ V(8, 0, 2),
2287 /* 100 */ V(0, 8, 3),
2288 /* 101 */ V(5, 6, 3),
2289 /* 110 */ V(3, 7, 2),
2290 /* 111 */ V(3, 7, 2),
2291
2292 /* 0001 0110 ... */
2293 /* 000 */ V(7, 3, 2),/* 248 */
2294 /* 001 */ V(7, 3, 2),
2295 /* 010 */ V(6, 5, 3),
2296 /* 011 */ V(4, 6, 3),
2297 /* 100 */ V(2, 7, 2),
2298 /* 101 */ V(2, 7, 2),
2299 /* 110 */ V(7, 2, 2),
2300 /* 111 */ V(7, 2, 2),
2301
2302 /* 0001 0111 ... */
2303 /* 000 */ V(6, 4, 3),/* 256 */
2304 /* 001 */ V(5, 5, 3),
2305 /* 010 */ V(0, 7, 2),
2306 /* 011 */ V(0, 7, 2),
2307 /* 100 */ V(1, 7, 1),
2308 /* 101 */ V(1, 7, 1),
2309 /* 110 */ V(1, 7, 1),
2310 /* 111 */ V(1, 7, 1),
2311
2312 /* 0001 1000 ... */
2313 /* 00 */ V(7, 1, 1),/* 264 */
2314 /* 01 */ V(7, 1, 1),
2315 /* 10 */ V(7, 0, 2),
2316 /* 11 */ V(3, 6, 2),
2317
2318 /* 0001 1001 ... */
2319 /* 00 */ V(6, 3, 2),/* 268 */
2320 /* 01 */ V(4, 5, 2),
2321 /* 10 */ V(5, 4, 2),
2322 /* 11 */ V(2, 6, 2),
2323
2324 /* 0001 1010 ... */
2325 /* 0 */ V(6, 2, 1),/* 272 */
2326 /* 1 */ V(1, 6, 1),
2327
2328 /* 0001 1011 ... */
2329 /* 00 */ V(6, 1, 1),/* 274 */
2330 /* 01 */ V(6, 1, 1),
2331 /* 10 */ V(0, 6, 2),
2332 /* 11 */ V(6, 0, 2),
2333
2334 /* 0001 1100 ... */
2335 /* 00 */ V(5, 3, 1),/* 278 */
2336 /* 01 */ V(5, 3, 1),
2337 /* 10 */ V(3, 5, 2),
2338 /* 11 */ V(4, 4, 2),
2339
2340 /* 0001 1101 ... */
2341 /* 0 */ V(2, 5, 1),/* 282 */
2342 /* 1 */ V(5, 2, 1),
2343
2344 /* 0001 1111 ... */
2345 /* 0 */ V(1, 5, 1),/* 284 */
2346 /* 1 */ V(0, 5, 1),
2347
2348 /* 0010 0000 ... */
2349 /* 0 */ V(3, 4, 1),/* 286 */
2350 /* 1 */ V(4, 3, 1),
2351
2352 /* 0010 0001 ... */
2353 /* 0 */ V(5, 0, 1),/* 288 */
2354 /* 1 */ V(2, 4, 1),
2355
2356 /* 0010 0010 ... */
2357 /* 0 */ V(4, 2, 1),/* 290 */
2358 /* 1 */ V(3, 3, 1),
2359
2360 /* 0010 0101 ... */
2361 /* 0 */ V(0, 4, 1),/* 292 */
2362 /* 1 */ V(4, 0, 1),
2363
2364 /* 0000 0110 1100 ... */
2365 /* 0000 */ V(12, 14, 4),/* 294 */
2366 /* 0001 */ PTR(400, 1),
2367 /* 0010 */ V(13, 14, 3),
2368 /* 0011 */ V(13, 14, 3),
2369 /* 0100 */ V(14, 9, 3),
2370 /* 0101 */ V(14, 9, 3),
2371 /* 0110 */ V(14, 10, 4),
2372 /* 0111 */ V(13, 9, 4),
2373 /* 1000 */ V(14, 14, 2),
2374 /* 1001 */ V(14, 14, 2),
2375 /* 1010 */ V(14, 14, 2),
2376 /* 1011 */ V(14, 14, 2),
2377 /* 1100 */ V(14, 13, 3),
2378 /* 1101 */ V(14, 13, 3),
2379 /* 1110 */ V(14, 11, 3),
2380 /* 1111 */ V(14, 11, 3),
2381
2382 /* 0000 0110 1101 ... */
2383 /* 000 */ V(11, 14, 2),/* 310 */
2384 /* 001 */ V(11, 14, 2),
2385 /* 010 */ V(12, 13, 2),
2386 /* 011 */ V(12, 13, 2),
2387 /* 100 */ V(13, 12, 3),
2388 /* 101 */ V(13, 11, 3),
2389 /* 110 */ V(10, 14, 2),
2390 /* 111 */ V(10, 14, 2),
2391
2392 /* 0000 0110 1110 ... */
2393 /* 000 */ V(12, 12, 2),/* 318 */
2394 /* 001 */ V(12, 12, 2),
2395 /* 010 */ V(10, 13, 3),
2396 /* 011 */ V(13, 10, 3),
2397 /* 100 */ V(7, 14, 3),
2398 /* 101 */ V(10, 12, 3),
2399 /* 110 */ V(12, 10, 2),
2400 /* 111 */ V(12, 10, 2),
2401
2402 /* 0000 0110 1111 ... */
2403 /* 000 */ V(12, 9, 3),/* 326 */
2404 /* 001 */ V(7, 13, 3),
2405 /* 010 */ V(5, 14, 2),
2406 /* 011 */ V(5, 14, 2),
2407 /* 100 */ V(11, 13, 1),
2408 /* 101 */ V(11, 13, 1),
2409 /* 110 */ V(11, 13, 1),
2410 /* 111 */ V(11, 13, 1),
2411
2412 /* 0000 1011 0000 ... */
2413 /* 00 */ V(9, 14, 1),/* 334 */
2414 /* 01 */ V(9, 14, 1),
2415 /* 10 */ V(11, 12, 2),
2416 /* 11 */ V(12, 11, 2),
2417
2418 /* 0000 1011 0001 ... */
2419 /* 00 */ V(8, 14, 2),/* 338 */
2420 /* 01 */ V(14, 8, 2),
2421 /* 10 */ V(9, 13, 2),
2422 /* 11 */ V(14, 7, 2),
2423
2424 /* 0000 1011 0010 ... */
2425 /* 00 */ V(11, 11, 2),/* 342 */
2426 /* 01 */ V(8, 13, 2),
2427 /* 10 */ V(13, 8, 2),
2428 /* 11 */ V(6, 14, 2),
2429
2430 /* 0000 1011 0011 ... */
2431 /* 0 */ V(14, 6, 1),/* 346 */
2432 /* 1 */ V(9, 12, 1),
2433
2434 /* 0000 1011 0100 ... */
2435 /* 00 */ V(10, 11, 2),/* 348 */
2436 /* 01 */ V(11, 10, 2),
2437 /* 10 */ V(14, 5, 2),
2438 /* 11 */ V(13, 7, 2),
2439
2440 /* 0000 1011 0101 ... */
2441 /* 00 */ V(4, 14, 1),/* 352 */
2442 /* 01 */ V(4, 14, 1),
2443 /* 10 */ V(14, 4, 2),
2444 /* 11 */ V(8, 12, 2),
2445
2446 /* 0000 1011 0110 ... */
2447 /* 0 */ V(12, 8, 1),/* 356 */
2448 /* 1 */ V(3, 14, 1),
2449
2450 /* 0000 1011 0111 ... */
2451 /* 00 */ V(6, 13, 1),/* 358 */
2452 /* 01 */ V(6, 13, 1),
2453 /* 10 */ V(13, 6, 2),
2454 /* 11 */ V(9, 11, 2),
2455
2456 /* 0000 1011 1000 ... */
2457 /* 00 */ V(11, 9, 2),/* 362 */
2458 /* 01 */ V(10, 10, 2),
2459 /* 10 */ V(14, 1, 1),
2460 /* 11 */ V(14, 1, 1),
2461
2462 /* 0000 1011 1001 ... */
2463 /* 00 */ V(13, 4, 1),/* 366 */
2464 /* 01 */ V(13, 4, 1),
2465 /* 10 */ V(11, 8, 2),
2466 /* 11 */ V(10, 9, 2),
2467
2468 /* 0000 1011 1010 ... */
2469 /* 00 */ V(7, 11, 1),/* 370 */
2470 /* 01 */ V(7, 11, 1),
2471 /* 10 */ V(11, 7, 2),
2472 /* 11 */ V(13, 0, 2),
2473
2474 /* 0000 1011 1100 ... */
2475 /* 0 */ V(0, 14, 1),/* 374 */
2476 /* 1 */ V(14, 0, 1),
2477
2478 /* 0000 1011 1101 ... */
2479 /* 0 */ V(5, 13, 1),/* 376 */
2480 /* 1 */ V(13, 5, 1),
2481
2482 /* 0000 1011 1110 ... */
2483 /* 0 */ V(7, 12, 1),/* 378 */
2484 /* 1 */ V(12, 7, 1),
2485
2486 /* 0000 1011 1111 ... */
2487 /* 0 */ V(4, 13, 1),/* 380 */
2488 /* 1 */ V(8, 11, 1),
2489
2490 /* 0000 1100 0000 ... */
2491 /* 0 */ V(9, 10, 1),/* 382 */
2492 /* 1 */ V(6, 12, 1),
2493
2494 /* 0000 1100 0001 ... */
2495 /* 0 */ V(12, 6, 1),/* 384 */
2496 /* 1 */ V(3, 13, 1),
2497
2498 /* 0000 1100 0010 ... */
2499 /* 0 */ V(5, 12, 1),/* 386 */
2500 /* 1 */ V(12, 5, 1),
2501
2502 /* 0000 1100 0100 ... */
2503 /* 0 */ V(8, 10, 1),/* 388 */
2504 /* 1 */ V(10, 8, 1),
2505
2506 /* 0000 1100 0101 ... */
2507 /* 0 */ V(9, 9, 1),/* 390 */
2508 /* 1 */ V(4, 12, 1),
2509
2510 /* 0000 1100 0110 ... */
2511 /* 0 */ V(11, 6, 1),/* 392 */
2512 /* 1 */ V(7, 10, 1),
2513
2514 /* 0000 1100 1000 ... */
2515 /* 0 */ V(5, 11, 1),/* 394 */
2516 /* 1 */ V(8, 9, 1),
2517
2518 /* 0000 1100 1011 ... */
2519 /* 0 */ V(9, 8, 1),/* 396 */
2520 /* 1 */ V(7, 9, 1),
2521
2522 /* 0000 1101 0101 ... */
2523 /* 0 */ V(9, 7, 1),/* 398 */
2524 /* 1 */ V(8, 8, 1),
2525
2526 /* 0000 0110 1100 0001 ... */
2527 /* 0 */ V(14, 12, 1),/* 400 */
2528 /* 1 */ V(13, 13, 1)
2529};
2530
2531static
2532union huffpair const hufftab24[] = {
2533 /* 0000 */ PTR(16, 4),
2534 /* 0001 */ PTR(32, 4),
2535 /* 0010 */ PTR(48, 4),
2536 /* 0011 */ V(15, 15, 4),
2537 /* 0100 */ PTR(64, 4),
2538 /* 0101 */ PTR(80, 4),
2539 /* 0110 */ PTR(96, 4),
2540 /* 0111 */ PTR(112, 4),
2541 /* 1000 */ PTR(128, 4),
2542 /* 1001 */ PTR(144, 4),
2543 /* 1010 */ PTR(160, 3),
2544 /* 1011 */ PTR(168, 2),
2545 /* 1100 */ V(1, 1, 4),
2546 /* 1101 */ V(0, 1, 4),
2547 /* 1110 */ V(1, 0, 4),
2548 /* 1111 */ V(0, 0, 4),
2549
2550 /* 0000 ... */
2551 /* 0000 */ V(14, 15, 4),/* 16 */
2552 /* 0001 */ V(15, 14, 4),
2553 /* 0010 */ V(13, 15, 4),
2554 /* 0011 */ V(15, 13, 4),
2555 /* 0100 */ V(12, 15, 4),
2556 /* 0101 */ V(15, 12, 4),
2557 /* 0110 */ V(11, 15, 4),
2558 /* 0111 */ V(15, 11, 4),
2559 /* 1000 */ V(15, 10, 3),
2560 /* 1001 */ V(15, 10, 3),
2561 /* 1010 */ V(10, 15, 4),
2562 /* 1011 */ V(9, 15, 4),
2563 /* 1100 */ V(15, 9, 3),
2564 /* 1101 */ V(15, 9, 3),
2565 /* 1110 */ V(15, 8, 3),
2566 /* 1111 */ V(15, 8, 3),
2567
2568 /* 0001 ... */
2569 /* 0000 */ V(8, 15, 4),/* 32 */
2570 /* 0001 */ V(7, 15, 4),
2571 /* 0010 */ V(15, 7, 3),
2572 /* 0011 */ V(15, 7, 3),
2573 /* 0100 */ V(6, 15, 3),
2574 /* 0101 */ V(6, 15, 3),
2575 /* 0110 */ V(15, 6, 3),
2576 /* 0111 */ V(15, 6, 3),
2577 /* 1000 */ V(5, 15, 3),
2578 /* 1001 */ V(5, 15, 3),
2579 /* 1010 */ V(15, 5, 3),
2580 /* 1011 */ V(15, 5, 3),
2581 /* 1100 */ V(4, 15, 3),
2582 /* 1101 */ V(4, 15, 3),
2583 /* 1110 */ V(15, 4, 3),
2584 /* 1111 */ V(15, 4, 3),
2585
2586 /* 0010 ... */
2587 /* 0000 */ V(3, 15, 3),/* 48 */
2588 /* 0001 */ V(3, 15, 3),
2589 /* 0010 */ V(15, 3, 3),
2590 /* 0011 */ V(15, 3, 3),
2591 /* 0100 */ V(2, 15, 3),
2592 /* 0101 */ V(2, 15, 3),
2593 /* 0110 */ V(15, 2, 3),
2594 /* 0111 */ V(15, 2, 3),
2595 /* 1000 */ V(15, 1, 3),
2596 /* 1001 */ V(15, 1, 3),
2597 /* 1010 */ V(1, 15, 4),
2598 /* 1011 */ V(15, 0, 4),
2599 /* 1100 */ PTR(172, 3),
2600 /* 1101 */ PTR(180, 3),
2601 /* 1110 */ PTR(188, 3),
2602 /* 1111 */ PTR(196, 3),
2603
2604 /* 0100 ... */
2605 /* 0000 */ PTR(204, 4),/* 64 */
2606 /* 0001 */ PTR(220, 3),
2607 /* 0010 */ PTR(228, 3),
2608 /* 0011 */ PTR(236, 3),
2609 /* 0100 */ PTR(244, 2),
2610 /* 0101 */ PTR(248, 2),
2611 /* 0110 */ PTR(252, 2),
2612 /* 0111 */ PTR(256, 2),
2613 /* 1000 */ PTR(260, 2),
2614 /* 1001 */ PTR(264, 2),
2615 /* 1010 */ PTR(268, 2),
2616 /* 1011 */ PTR(272, 2),
2617 /* 1100 */ PTR(276, 2),
2618 /* 1101 */ PTR(280, 3),
2619 /* 1110 */ PTR(288, 2),
2620 /* 1111 */ PTR(292, 2),
2621
2622 /* 0101 ... */
2623 /* 0000 */ PTR(296, 2),/* 80 */
2624 /* 0001 */ PTR(300, 3),
2625 /* 0010 */ PTR(308, 2),
2626 /* 0011 */ PTR(312, 3),
2627 /* 0100 */ PTR(320, 1),
2628 /* 0101 */ PTR(322, 2),
2629 /* 0110 */ PTR(326, 2),
2630 /* 0111 */ PTR(330, 1),
2631 /* 1000 */ PTR(332, 2),
2632 /* 1001 */ PTR(336, 1),
2633 /* 1010 */ PTR(338, 1),
2634 /* 1011 */ PTR(340, 1),
2635 /* 1100 */ PTR(342, 1),
2636 /* 1101 */ PTR(344, 1),
2637 /* 1110 */ PTR(346, 1),
2638 /* 1111 */ PTR(348, 1),
2639
2640 /* 0110 ... */
2641 /* 0000 */ PTR(350, 1),/* 96 */
2642 /* 0001 */ PTR(352, 1),
2643 /* 0010 */ PTR(354, 1),
2644 /* 0011 */ PTR(356, 1),
2645 /* 0100 */ PTR(358, 1),
2646 /* 0101 */ PTR(360, 1),
2647 /* 0110 */ PTR(362, 1),
2648 /* 0111 */ PTR(364, 1),
2649 /* 1000 */ PTR(366, 1),
2650 /* 1001 */ PTR(368, 1),
2651 /* 1010 */ PTR(370, 2),
2652 /* 1011 */ PTR(374, 1),
2653 /* 1100 */ PTR(376, 2),
2654 /* 1101 */ V(7, 3, 4),
2655 /* 1110 */ PTR(380, 1),
2656 /* 1111 */ V(7, 2, 4),
2657
2658 /* 0111 ... */
2659 /* 0000 */ V(4, 6, 4),/* 112 */
2660 /* 0001 */ V(6, 4, 4),
2661 /* 0010 */ V(5, 5, 4),
2662 /* 0011 */ V(7, 1, 4),
2663 /* 0100 */ V(3, 6, 4),
2664 /* 0101 */ V(6, 3, 4),
2665 /* 0110 */ V(4, 5, 4),
2666 /* 0111 */ V(5, 4, 4),
2667 /* 1000 */ V(2, 6, 4),
2668 /* 1001 */ V(6, 2, 4),
2669 /* 1010 */ V(1, 6, 4),
2670 /* 1011 */ V(6, 1, 4),
2671 /* 1100 */ PTR(382, 1),
2672 /* 1101 */ V(3, 5, 4),
2673 /* 1110 */ V(5, 3, 4),
2674 /* 1111 */ V(4, 4, 4),
2675
2676 /* 1000 ... */
2677 /* 0000 */ V(2, 5, 4),/* 128 */
2678 /* 0001 */ V(5, 2, 4),
2679 /* 0010 */ V(1, 5, 4),
2680 /* 0011 */ PTR(384, 1),
2681 /* 0100 */ V(5, 1, 3),
2682 /* 0101 */ V(5, 1, 3),
2683 /* 0110 */ V(3, 4, 4),
2684 /* 0111 */ V(4, 3, 4),
2685 /* 1000 */ V(2, 4, 3),
2686 /* 1001 */ V(2, 4, 3),
2687 /* 1010 */ V(4, 2, 3),
2688 /* 1011 */ V(4, 2, 3),
2689 /* 1100 */ V(3, 3, 3),
2690 /* 1101 */ V(3, 3, 3),
2691 /* 1110 */ V(1, 4, 3),
2692 /* 1111 */ V(1, 4, 3),
2693
2694 /* 1001 ... */
2695 /* 0000 */ V(4, 1, 3),/* 144 */
2696 /* 0001 */ V(4, 1, 3),
2697 /* 0010 */ V(0, 4, 4),
2698 /* 0011 */ V(4, 0, 4),
2699 /* 0100 */ V(2, 3, 3),
2700 /* 0101 */ V(2, 3, 3),
2701 /* 0110 */ V(3, 2, 3),
2702 /* 0111 */ V(3, 2, 3),
2703 /* 1000 */ V(1, 3, 2),
2704 /* 1001 */ V(1, 3, 2),
2705 /* 1010 */ V(1, 3, 2),
2706 /* 1011 */ V(1, 3, 2),
2707 /* 1100 */ V(3, 1, 2),
2708 /* 1101 */ V(3, 1, 2),
2709 /* 1110 */ V(3, 1, 2),
2710 /* 1111 */ V(3, 1, 2),
2711
2712 /* 1010 ... */
2713 /* 000 */ V(0, 3, 3),/* 160 */
2714 /* 001 */ V(3, 0, 3),
2715 /* 010 */ V(2, 2, 2),
2716 /* 011 */ V(2, 2, 2),
2717 /* 100 */ V(1, 2, 1),
2718 /* 101 */ V(1, 2, 1),
2719 /* 110 */ V(1, 2, 1),
2720 /* 111 */ V(1, 2, 1),
2721
2722 /* 1011 ... */
2723 /* 00 */ V(2, 1, 1),/* 168 */
2724 /* 01 */ V(2, 1, 1),
2725 /* 10 */ V(0, 2, 2),
2726 /* 11 */ V(2, 0, 2),
2727
2728 /* 0010 1100 ... */
2729 /* 000 */ V(0, 15, 1),/* 172 */
2730 /* 001 */ V(0, 15, 1),
2731 /* 010 */ V(0, 15, 1),
2732 /* 011 */ V(0, 15, 1),
2733 /* 100 */ V(14, 14, 3),
2734 /* 101 */ V(13, 14, 3),
2735 /* 110 */ V(14, 13, 3),
2736 /* 111 */ V(12, 14, 3),
2737
2738 /* 0010 1101 ... */
2739 /* 000 */ V(14, 12, 3),/* 180 */
2740 /* 001 */ V(13, 13, 3),
2741 /* 010 */ V(11, 14, 3),
2742 /* 011 */ V(14, 11, 3),
2743 /* 100 */ V(12, 13, 3),
2744 /* 101 */ V(13, 12, 3),
2745 /* 110 */ V(10, 14, 3),
2746 /* 111 */ V(14, 10, 3),
2747
2748 /* 0010 1110 ... */
2749 /* 000 */ V(11, 13, 3),/* 188 */
2750 /* 001 */ V(13, 11, 3),
2751 /* 010 */ V(12, 12, 3),
2752 /* 011 */ V(9, 14, 3),
2753 /* 100 */ V(14, 9, 3),
2754 /* 101 */ V(10, 13, 3),
2755 /* 110 */ V(13, 10, 3),
2756 /* 111 */ V(11, 12, 3),
2757
2758 /* 0010 1111 ... */
2759 /* 000 */ V(12, 11, 3),/* 196 */
2760 /* 001 */ V(8, 14, 3),
2761 /* 010 */ V(14, 8, 3),
2762 /* 011 */ V(9, 13, 3),
2763 /* 100 */ V(13, 9, 3),
2764 /* 101 */ V(7, 14, 3),
2765 /* 110 */ V(14, 7, 3),
2766 /* 111 */ V(10, 12, 3),
2767
2768 /* 0100 0000 ... */
2769 /* 0000 */ V(12, 10, 3),/* 204 */
2770 /* 0001 */ V(12, 10, 3),
2771 /* 0010 */ V(11, 11, 3),
2772 /* 0011 */ V(11, 11, 3),
2773 /* 0100 */ V(8, 13, 3),
2774 /* 0101 */ V(8, 13, 3),
2775 /* 0110 */ V(13, 8, 3),
2776 /* 0111 */ V(13, 8, 3),
2777 /* 1000 */ V(0, 14, 4),
2778 /* 1001 */ V(14, 0, 4),
2779 /* 1010 */ V(0, 13, 3),
2780 /* 1011 */ V(0, 13, 3),
2781 /* 1100 */ V(14, 6, 2),
2782 /* 1101 */ V(14, 6, 2),
2783 /* 1110 */ V(14, 6, 2),
2784 /* 1111 */ V(14, 6, 2),
2785
2786 /* 0100 0001 ... */
2787 /* 000 */ V(6, 14, 3),/* 220 */
2788 /* 001 */ V(9, 12, 3),
2789 /* 010 */ V(12, 9, 2),
2790 /* 011 */ V(12, 9, 2),
2791 /* 100 */ V(5, 14, 2),
2792 /* 101 */ V(5, 14, 2),
2793 /* 110 */ V(11, 10, 2),
2794 /* 111 */ V(11, 10, 2),
2795
2796 /* 0100 0010 ... */
2797 /* 000 */ V(14, 5, 2),/* 228 */
2798 /* 001 */ V(14, 5, 2),
2799 /* 010 */ V(10, 11, 3),
2800 /* 011 */ V(7, 13, 3),
2801 /* 100 */ V(13, 7, 2),
2802 /* 101 */ V(13, 7, 2),
2803 /* 110 */ V(14, 4, 2),
2804 /* 111 */ V(14, 4, 2),
2805
2806 /* 0100 0011 ... */
2807 /* 000 */ V(8, 12, 2),/* 236 */
2808 /* 001 */ V(8, 12, 2),
2809 /* 010 */ V(12, 8, 2),
2810 /* 011 */ V(12, 8, 2),
2811 /* 100 */ V(4, 14, 3),
2812 /* 101 */ V(2, 14, 3),
2813 /* 110 */ V(3, 14, 2),
2814 /* 111 */ V(3, 14, 2),
2815
2816 /* 0100 0100 ... */
2817 /* 00 */ V(6, 13, 2),/* 244 */
2818 /* 01 */ V(13, 6, 2),
2819 /* 10 */ V(14, 3, 2),
2820 /* 11 */ V(9, 11, 2),
2821
2822 /* 0100 0101 ... */
2823 /* 00 */ V(11, 9, 2),/* 248 */
2824 /* 01 */ V(10, 10, 2),
2825 /* 10 */ V(14, 2, 2),
2826 /* 11 */ V(1, 14, 2),
2827
2828 /* 0100 0110 ... */
2829 /* 00 */ V(14, 1, 2),/* 252 */
2830 /* 01 */ V(5, 13, 2),
2831 /* 10 */ V(13, 5, 2),
2832 /* 11 */ V(7, 12, 2),
2833
2834 /* 0100 0111 ... */
2835 /* 00 */ V(12, 7, 2),/* 256 */
2836 /* 01 */ V(4, 13, 2),
2837 /* 10 */ V(8, 11, 2),
2838 /* 11 */ V(11, 8, 2),
2839
2840 /* 0100 1000 ... */
2841 /* 00 */ V(13, 4, 2),/* 260 */
2842 /* 01 */ V(9, 10, 2),
2843 /* 10 */ V(10, 9, 2),
2844 /* 11 */ V(6, 12, 2),
2845
2846 /* 0100 1001 ... */
2847 /* 00 */ V(12, 6, 2),/* 264 */
2848 /* 01 */ V(3, 13, 2),
2849 /* 10 */ V(13, 3, 2),
2850 /* 11 */ V(2, 13, 2),
2851
2852 /* 0100 1010 ... */
2853 /* 00 */ V(13, 2, 2),/* 268 */
2854 /* 01 */ V(1, 13, 2),
2855 /* 10 */ V(7, 11, 2),
2856 /* 11 */ V(11, 7, 2),
2857
2858 /* 0100 1011 ... */
2859 /* 00 */ V(13, 1, 2),/* 272 */
2860 /* 01 */ V(5, 12, 2),
2861 /* 10 */ V(12, 5, 2),
2862 /* 11 */ V(8, 10, 2),
2863
2864 /* 0100 1100 ... */
2865 /* 00 */ V(10, 8, 2),/* 276 */
2866 /* 01 */ V(9, 9, 2),
2867 /* 10 */ V(4, 12, 2),
2868 /* 11 */ V(12, 4, 2),
2869
2870 /* 0100 1101 ... */
2871 /* 000 */ V(6, 11, 2),/* 280 */
2872 /* 001 */ V(6, 11, 2),
2873 /* 010 */ V(11, 6, 2),
2874 /* 011 */ V(11, 6, 2),
2875 /* 100 */ V(13, 0, 3),
2876 /* 101 */ V(0, 12, 3),
2877 /* 110 */ V(3, 12, 2),
2878 /* 111 */ V(3, 12, 2),
2879
2880 /* 0100 1110 ... */
2881 /* 00 */ V(12, 3, 2),/* 288 */
2882 /* 01 */ V(7, 10, 2),
2883 /* 10 */ V(10, 7, 2),
2884 /* 11 */ V(2, 12, 2),
2885
2886 /* 0100 1111 ... */
2887 /* 00 */ V(12, 2, 2),/* 292 */
2888 /* 01 */ V(5, 11, 2),
2889 /* 10 */ V(11, 5, 2),
2890 /* 11 */ V(1, 12, 2),
2891
2892 /* 0101 0000 ... */
2893 /* 00 */ V(8, 9, 2),/* 296 */
2894 /* 01 */ V(9, 8, 2),
2895 /* 10 */ V(12, 1, 2),
2896 /* 11 */ V(4, 11, 2),
2897
2898 /* 0101 0001 ... */
2899 /* 000 */ V(12, 0, 3),/* 300 */
2900 /* 001 */ V(0, 11, 3),
2901 /* 010 */ V(3, 11, 2),
2902 /* 011 */ V(3, 11, 2),
2903 /* 100 */ V(11, 0, 3),
2904 /* 101 */ V(0, 10, 3),
2905 /* 110 */ V(1, 10, 2),
2906 /* 111 */ V(1, 10, 2),
2907
2908 /* 0101 0010 ... */
2909 /* 00 */ V(11, 4, 1),/* 308 */
2910 /* 01 */ V(11, 4, 1),
2911 /* 10 */ V(6, 10, 2),
2912 /* 11 */ V(10, 6, 2),
2913
2914 /* 0101 0011 ... */
2915 /* 000 */ V(7, 9, 2),/* 312 */
2916 /* 001 */ V(7, 9, 2),
2917 /* 010 */ V(9, 7, 2),
2918 /* 011 */ V(9, 7, 2),
2919 /* 100 */ V(10, 0, 3),
2920 /* 101 */ V(0, 9, 3),
2921 /* 110 */ V(9, 0, 2),
2922 /* 111 */ V(9, 0, 2),
2923
2924 /* 0101 0100 ... */
2925 /* 0 */ V(11, 3, 1),/* 320 */
2926 /* 1 */ V(8, 8, 1),
2927
2928 /* 0101 0101 ... */
2929 /* 00 */ V(2, 11, 2),/* 322 */
2930 /* 01 */ V(5, 10, 2),
2931 /* 10 */ V(11, 2, 1),
2932 /* 11 */ V(11, 2, 1),
2933
2934 /* 0101 0110 ... */
2935 /* 00 */ V(10, 5, 2),/* 326 */
2936 /* 01 */ V(1, 11, 2),
2937 /* 10 */ V(11, 1, 2),
2938 /* 11 */ V(6, 9, 2),
2939
2940 /* 0101 0111 ... */
2941 /* 0 */ V(9, 6, 1),/* 330 */
2942 /* 1 */ V(10, 4, 1),
2943
2944 /* 0101 1000 ... */
2945 /* 00 */ V(4, 10, 2),/* 332 */
2946 /* 01 */ V(7, 8, 2),
2947 /* 10 */ V(8, 7, 1),
2948 /* 11 */ V(8, 7, 1),
2949
2950 /* 0101 1001 ... */
2951 /* 0 */ V(3, 10, 1),/* 336 */
2952 /* 1 */ V(10, 3, 1),
2953
2954 /* 0101 1010 ... */
2955 /* 0 */ V(5, 9, 1),/* 338 */
2956 /* 1 */ V(9, 5, 1),
2957
2958 /* 0101 1011 ... */
2959 /* 0 */ V(2, 10, 1),/* 340 */
2960 /* 1 */ V(10, 2, 1),
2961
2962 /* 0101 1100 ... */
2963 /* 0 */ V(10, 1, 1),/* 342 */
2964 /* 1 */ V(6, 8, 1),
2965
2966 /* 0101 1101 ... */
2967 /* 0 */ V(8, 6, 1),/* 344 */
2968 /* 1 */ V(7, 7, 1),
2969
2970 /* 0101 1110 ... */
2971 /* 0 */ V(4, 9, 1),/* 346 */
2972 /* 1 */ V(9, 4, 1),
2973
2974 /* 0101 1111 ... */
2975 /* 0 */ V(3, 9, 1),/* 348 */
2976 /* 1 */ V(9, 3, 1),
2977
2978 /* 0110 0000 ... */
2979 /* 0 */ V(5, 8, 1),/* 350 */
2980 /* 1 */ V(8, 5, 1),
2981
2982 /* 0110 0001 ... */
2983 /* 0 */ V(2, 9, 1),/* 352 */
2984 /* 1 */ V(6, 7, 1),
2985
2986 /* 0110 0010 ... */
2987 /* 0 */ V(7, 6, 1),/* 354 */
2988 /* 1 */ V(9, 2, 1),
2989
2990 /* 0110 0011 ... */
2991 /* 0 */ V(1, 9, 1),/* 356 */
2992 /* 1 */ V(9, 1, 1),
2993
2994 /* 0110 0100 ... */
2995 /* 0 */ V(4, 8, 1),/* 358 */
2996 /* 1 */ V(8, 4, 1),
2997
2998 /* 0110 0101 ... */
2999 /* 0 */ V(5, 7, 1),/* 360 */
3000 /* 1 */ V(7, 5, 1),
3001
3002 /* 0110 0110 ... */
3003 /* 0 */ V(3, 8, 1),/* 362 */
3004 /* 1 */ V(8, 3, 1),
3005
3006 /* 0110 0111 ... */
3007 /* 0 */ V(6, 6, 1),/* 364 */
3008 /* 1 */ V(2, 8, 1),
3009
3010 /* 0110 1000 ... */
3011 /* 0 */ V(8, 2, 1),/* 366 */
3012 /* 1 */ V(1, 8, 1),
3013
3014 /* 0110 1001 ... */
3015 /* 0 */ V(4, 7, 1),/* 368 */
3016 /* 1 */ V(7, 4, 1),
3017
3018 /* 0110 1010 ... */
3019 /* 00 */ V(8, 1, 1),/* 370 */
3020 /* 01 */ V(8, 1, 1),
3021 /* 10 */ V(0, 8, 2),
3022 /* 11 */ V(8, 0, 2),
3023
3024 /* 0110 1011 ... */
3025 /* 0 */ V(5, 6, 1),/* 374 */
3026 /* 1 */ V(6, 5, 1),
3027
3028 /* 0110 1100 ... */
3029 /* 00 */ V(1, 7, 1),/* 376 */
3030 /* 01 */ V(1, 7, 1),
3031 /* 10 */ V(0, 7, 2),
3032 /* 11 */ V(7, 0, 2),
3033
3034 /* 0110 1110 ... */
3035 /* 0 */ V(3, 7, 1),/* 380 */
3036 /* 1 */ V(2, 7, 1),
3037
3038 /* 0111 1100 ... */
3039 /* 0 */ V(0, 6, 1),/* 382 */
3040 /* 1 */ V(6, 0, 1),
3041
3042 /* 1000 0011 ... */
3043 /* 0 */ V(0, 5, 1),/* 384 */
3044 /* 1 */ V(5, 0, 1)
3045};
3046
3047# undef V
3048# undef PTR
3049
3050/* external tables */
3051
3052union huffquad const *const mad_huff_quad_table[2] = { hufftabA, hufftabB };
3053
3054struct hufftable const mad_huff_pair_table[32] = {
3055 /* 0 */ { hufftab0, 0, 0 },
3056 /* 1 */ { hufftab1, 0, 3 },
3057 /* 2 */ { hufftab2, 0, 3 },
3058 /* 3 */ { hufftab3, 0, 3 },
3059 /* 4 */ { 0 /* not used */ },
3060 /* 5 */ { hufftab5, 0, 3 },
3061 /* 6 */ { hufftab6, 0, 4 },
3062 /* 7 */ { hufftab7, 0, 4 },
3063 /* 8 */ { hufftab8, 0, 4 },
3064 /* 9 */ { hufftab9, 0, 4 },
3065 /* 10 */ { hufftab10, 0, 4 },
3066 /* 11 */ { hufftab11, 0, 4 },
3067 /* 12 */ { hufftab12, 0, 4 },
3068 /* 13 */ { hufftab13, 0, 4 },
3069 /* 14 */ { 0 /* not used */ },
3070 /* 15 */ { hufftab15, 0, 4 },
3071 /* 16 */ { hufftab16, 1, 4 },
3072 /* 17 */ { hufftab16, 2, 4 },
3073 /* 18 */ { hufftab16, 3, 4 },
3074 /* 19 */ { hufftab16, 4, 4 },
3075 /* 20 */ { hufftab16, 6, 4 },
3076 /* 21 */ { hufftab16, 8, 4 },
3077 /* 22 */ { hufftab16, 10, 4 },
3078 /* 23 */ { hufftab16, 13, 4 },
3079 /* 24 */ { hufftab24, 4, 4 },
3080 /* 25 */ { hufftab24, 5, 4 },
3081 /* 26 */ { hufftab24, 6, 4 },
3082 /* 27 */ { hufftab24, 7, 4 },
3083 /* 28 */ { hufftab24, 8, 4 },
3084 /* 29 */ { hufftab24, 9, 4 },
3085 /* 30 */ { hufftab24, 11, 4 },
3086 /* 31 */ { hufftab24, 13, 4 }
3087};
diff --git a/core/multimedia/opieplayer/libmad/huffman.h b/core/multimedia/opieplayer/libmad/huffman.h
new file mode 100644
index 0000000..1801210
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/huffman.h
@@ -0,0 +1,66 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifndef LIBMAD_HUFFMAN_H
23# define LIBMAD_HUFFMAN_H
24
25union huffquad {
26 struct {
27 unsigned short final : 1;
28 unsigned short hlen : 3;
29 unsigned short v : 1;
30 unsigned short w : 1;
31 unsigned short x : 1;
32 unsigned short y : 1;
33 } value;
34 struct {
35 unsigned short final : 1;
36 unsigned short bits : 3;
37 unsigned short offset : 12;
38 } ptr;
39 unsigned short final : 1;
40};
41
42union huffpair {
43 struct {
44 unsigned short final : 1;
45 unsigned short hlen : 3;
46 unsigned short x : 4;
47 unsigned short y : 4;
48 } value;
49 struct {
50 unsigned short final : 1;
51 unsigned short bits : 3;
52 unsigned short offset : 12;
53 } ptr;
54 unsigned short final : 1;
55};
56
57struct hufftable {
58 union huffpair const *table;
59 unsigned short linbits;
60 unsigned short startbits;
61};
62
63extern union huffquad const *const mad_huff_quad_table[2];
64extern struct hufftable const mad_huff_pair_table[32];
65
66# endif
diff --git a/core/multimedia/opieplayer/libmad/imdct_l_arm.S b/core/multimedia/opieplayer/libmad/imdct_l_arm.S
new file mode 100644
index 0000000..b86ba11
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/imdct_l_arm.S
@@ -0,0 +1,1000 @@
1/*****************************************************************************
2* Copyright (C) 2000-2001 Andre McCurdy <armccurdy@yahoo.co.uk>
3*
4* This program is free software. you can redistribute it and/or modify
5* it under the terms of the GNU General Public License as published by
6* the Free Software Foundation@ either version 2 of the License, or
7* (at your option) any later version.
8*
9* This program is distributed in the hope that it will be useful,
10* but WITHOUT ANY WARRANTY, without even the implied warranty of
11* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12* GNU General Public License for more details.
13*
14* You should have received a copy of the GNU General Public License
15* along with this program@ if not, write to the Free Software
16* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17*
18*****************************************************************************
19*
20* Notes:
21*
22*
23*****************************************************************************
24*
25* $Id$
26*
27* 2001/03/24: Andre McCurdy <armccurdy@yahoo.co.uk>
28* - Corrected PIC unsafe loading of address of 'imdct36_long_karray'
29*
30* 2000/09/20: Robert Leslie <rob@mars.org>
31* - Added a global symbol with leading underscore per suggestion of
32* Simon Burge to support linking with the a.out format.
33*
34* 2000/09/15: Robert Leslie <rob@mars.org>
35* - Fixed a small bug where flags were changed before a conditional branch.
36*
37* 2000/09/15: Andre McCurdy <armccurdy@yahoo.co.uk>
38* - Applied Nicolas Pitre's rounding optimisation in all remaining places.
39*
40* 2000/09/09: Nicolas Pitre <nico@cam.org>
41* - Optimized rounding + scaling operations.
42*
43* 2000/08/09: Andre McCurdy <armccurdy@yahoo.co.uk>
44* - Original created.
45*
46****************************************************************************/
47
48
49/*
50 On entry:
51
52 r0 = pointer to 18 element input array
53 r1 = pointer to 36 element output array
54 r2 = windowing block type
55
56
57 Stack frame created during execution of the function:
58
59 Initial Holds:
60 Stack
61 pointer
62 minus:
63
64 0
65 4 lr
66 8 r11
67 12 r10
68 16 r9
69 20 r8
70 24 r7
71 28 r6
72 32 r5
73 36 r4
74
75 40 r2 : windowing block type
76
77 44 ct00 high
78 48 ct00 low
79 52 ct01 high
80 56 ct01 low
81 60 ct04 high
82 64 ct04 low
83 68 ct06 high
84 72 ct06 low
85 76 ct05 high
86 80 ct05 low
87 84 ct03 high
88 88 ct03 low
89 92 -ct05 high
90 96 -ct05 low
91 100 -ct07 high
92 104 -ct07 low
93 108 ct07 high
94 112 ct07 low
95 116 ct02 high
96 120 ct02 low
97*/
98
99#define BLOCK_MODE_NORMAL 0
100#define BLOCK_MODE_START 1
101#define BLOCK_MODE_STOP 3
102
103
104#define X0 0x00
105#define X1 0x04
106#define X2 0x08
107#define X3 0x0C
108#define X4 0x10
109#define X5 0x14
110#define X6 0x18
111#define X7 0x1c
112#define X8 0x20
113#define X9 0x24
114#define X10 0x28
115#define X11 0x2c
116#define X12 0x30
117#define X13 0x34
118#define X14 0x38
119#define X15 0x3c
120#define X16 0x40
121#define X17 0x44
122
123#define x0 0x00
124#define x1 0x04
125#define x2 0x08
126#define x3 0x0C
127#define x4 0x10
128#define x5 0x14
129#define x6 0x18
130#define x7 0x1c
131#define x8 0x20
132#define x9 0x24
133#define x10 0x28
134#define x11 0x2c
135#define x12 0x30
136#define x13 0x34
137#define x14 0x38
138#define x15 0x3c
139#define x16 0x40
140#define x17 0x44
141#define x18 0x48
142#define x19 0x4c
143#define x20 0x50
144#define x21 0x54
145#define x22 0x58
146#define x23 0x5c
147#define x24 0x60
148#define x25 0x64
149#define x26 0x68
150#define x27 0x6c
151#define x28 0x70
152#define x29 0x74
153#define x30 0x78
154#define x31 0x7c
155#define x32 0x80
156#define x33 0x84
157#define x34 0x88
158#define x35 0x8c
159
160#define K00 0x0ffc19fd
161#define K01 0x00b2aa3e
162#define K02 0x0fdcf549
163#define K03 0x0216a2a2
164#define K04 0x0f9ee890
165#define K05 0x03768962
166#define K06 0x0f426cb5
167#define K07 0x04cfb0e2
168#define K08 0x0ec835e8
169#define K09 0x061f78aa
170#define K10 0x0e313245
171#define K11 0x07635284
172#define K12 0x0d7e8807
173#define K13 0x0898c779
174#define K14 0x0cb19346
175#define K15 0x09bd7ca0
176#define K16 0x0bcbe352
177#define K17 0x0acf37ad
178
179#define minus_K02 0xf0230ab7
180
181#define WL0 0x00b2aa3e
182#define WL1 0x0216a2a2
183#define WL2 0x03768962
184#define WL3 0x04cfb0e2
185#define WL4 0x061f78aa
186#define WL5 0x07635284
187#define WL6 0x0898c779
188#define WL7 0x09bd7ca0
189#define WL8 0x0acf37ad
190#define WL9 0x0bcbe352
191#define WL10 0x0cb19346
192#define WL11 0x0d7e8807
193#define WL12 0x0e313245
194#define WL13 0x0ec835e8
195#define WL14 0x0f426cb5
196#define WL15 0x0f9ee890
197#define WL16 0x0fdcf549
198#define WL17 0x0ffc19fd
199
200
201@*****************************************************************************
202
203
204 .text
205 .align
206
207 .global III_imdct_l
208 .global _III_imdct_l
209
210III_imdct_l:
211_III_imdct_l:
212
213 stmdb sp!, { r2, r4 - r11, lr } @ all callee saved regs, plus arg3
214
215 ldr r4, =K08 @ r4 = K08
216 ldr r5, =K09 @ r5 = K09
217 ldr r8, [r0, #X4] @ r8 = X4
218 ldr r9, [r0, #X13] @ r9 = X13
219 rsb r6, r4, #0 @ r6 = -K08
220 rsb r7, r5, #0 @ r7 = -K09
221
222 smull r2, r3, r4, r8 @ r2..r3 = (X4 * K08)
223 smlal r2, r3, r5, r9 @ r2..r3 = (X4 * K08) + (X13 * K09) = ct01
224
225 smull r10, lr, r8, r5 @ r10..lr = (X4 * K09)
226 smlal r10, lr, r9, r6 @ r10..lr = (X4 * K09) + (X13 * -K08) = ct00
227
228 ldr r8, [r0, #X7] @ r8 = X7
229 ldr r9, [r0, #X16] @ r9 = X16
230
231 stmdb sp!, { r2, r3, r10, lr } @ stack ct00_h, ct00_l, ct01_h, ct01_l
232
233 add r8, r8, r9 @ r8 = (X7 + X16)
234 ldr r9, [r0, #X1] @ r9 = X1
235
236 smlal r2, r3, r6, r8 @ r2..r3 = ct01 + ((X7 + X16) * -K08)
237 smlal r2, r3, r7, r9 @ r2..r3 += (X1 * -K09)
238
239 ldr r7, [r0, #X10] @ r7 = X10
240
241 rsbs r10, r10, #0
242 rsc lr, lr, #0 @ r10..lr = -ct00
243
244 smlal r2, r3, r5, r7 @ r2..r3 += (X10 * K09) = ct06
245
246 smlal r10, lr, r9, r6 @ r10..lr = -ct00 + ( X1 * -K08)
247 smlal r10, lr, r8, r5 @ r10..lr += ((X7 + X16) * K09)
248 smlal r10, lr, r7, r4 @ r10..lr += ( X10 * K08) = ct04
249
250 stmdb sp!, { r2, r3, r10, lr } @ stack ct04_h, ct04_l, ct06_h, ct06_l
251
252 @----
253
254 ldr r7, [r0, #X0]
255 ldr r8, [r0, #X11]
256 ldr r9, [r0, #X12]
257 sub r7, r7, r8
258 sub r7, r7, r9 @ r7 = (X0 - X11 -X12) = ct14
259
260 ldr r9, [r0, #X3]
261 ldr r8, [r0, #X8]
262 ldr r11, [r0, #X15]
263 sub r8, r8, r9
264 add r8, r8, r11 @ r8 = (X8 - X3 + X15) = ct16
265
266 add r11, r7, r8 @ r11 = ct14 + ct16 = ct18
267
268 smlal r2, r3, r6, r11 @ r2..r3 = ct06 + ((X0 - X11 - X3 + X15 + X8 - X12) * -K08)
269
270 ldr r6, [r0, #X2]
271 ldr r9, [r0, #X9]
272 ldr r12, [r0, #X14]
273 sub r6, r6, r9
274 sub r6, r6, r12 @ r6 = (X2 - X9 - X14) = ct15
275
276 ldr r9, [r0, #X5]
277 ldr r12, [r0, #X6]
278 sub r9, r9, r12
279 ldr r12, [r0, #X17]
280 sub r9, r9, r12 @ r9 = (X5 - X6 - X17) = ct17
281
282 add r12, r9, r6 @ r12 = ct15 + ct17 = ct19
283
284 smlal r2, r3, r5, r12 @ r2..r3 += ((X2 - X9 + X5 - X6 - X17 - X14) * K09)
285
286 smlal r10, lr, r11, r5 @ r10..lr = ct04 + (ct18 * K09)
287 smlal r10, lr, r12, r4 @ r10..lr = ct04 + (ct18 * K09) + (ct19 * K08)
288
289 movs r2, r2, lsr #28
290 adc r2, r2, r3, lsl #4 @ r2 = bits[59..28] of r2..r3
291 str r2, [r1, #x22] @ store result x22
292
293 movs r10, r10, lsr #28
294 adc r10, r10, lr, lsl #4 @ r10 = bits[59..28] of r10..lr
295 str r10, [r1, #x4] @ store result x4
296
297 @----
298
299 ldmia sp, { r2, r3, r4, r5 } @ r2..r3 = ct06, r4..r5 = ct04 (dont update sp)
300
301 @ r2..r3 = ct06
302 @ r4..r5 = ct04
303 @ r6 = ct15
304 @ r7 = ct14
305 @ r8 = ct16
306 @ r9 = ct17
307 @ r10 = .
308 @ r11 = .
309 @ r12 = .
310 @ lr = .
311
312 ldr r10, =K03 @ r10 = K03
313 ldr lr, =K15 @ lr = K15
314
315 smlal r2, r3, r10, r7 @ r2..r3 = ct06 + (ct14 * K03)
316 smlal r4, r5, lr, r7 @ r4..r5 = ct04 + (ct14 * K15)
317
318 ldr r12, =K14 @ r12 = K14
319 rsb r10, r10, #0 @ r10 = -K03
320
321 smlal r2, r3, lr, r6 @ r2..r3 += (ct15 * K15)
322 smlal r4, r5, r10, r6 @ r4..r5 += (ct15 * -K03)
323 smlal r2, r3, r12, r8 @ r2..r3 += (ct16 * K14)
324
325 ldr r11, =minus_K02 @ r11 = -K02
326 rsb r12, r12, #0 @ r12 = -K14
327
328 smlal r4, r5, r12, r9 @ r4..r5 += (ct17 * -K14)
329 smlal r2, r3, r11, r9 @ r2..r3 += (ct17 * -K02)
330 smlal r4, r5, r11, r8 @ r4..r5 += (ct16 * -K02)
331
332 movs r2, r2, lsr #28
333 adc r2, r2, r3, lsl #4 @ r2 = bits[59..28] of r2..r3
334 str r2, [r1, #x7] @ store result x7
335
336 movs r4, r4, lsr #28
337 adc r4, r4, r5, lsl #4 @ r4 = bits[59..28] of r4..r5
338 str r4, [r1, #x1] @ store result x1
339
340 @----
341
342 ldmia sp, { r2, r3, r4, r5 } @ r2..r3 = ct06, r4..r5 = ct04 (dont update sp)
343
344 @ r2..r3 = ct06
345 @ r4..r5 = ct04
346 @ r6 = ct15
347 @ r7 = ct14
348 @ r8 = ct16
349 @ r9 = ct17
350 @ r10 = -K03
351 @ r11 = -K02
352 @ r12 = -K14
353 @ lr = K15
354
355 rsbs r2, r2, #0
356 rsc r3, r3, #0 @ r2..r3 = -ct06
357
358 smlal r2, r3, r12, r7 @ r2..r3 = -ct06 + (ct14 * -K14)
359 smlal r2, r3, r10, r8 @ r2..r3 += (ct16 * -K03)
360
361 smlal r4, r5, r12, r6 @ r4..r5 = ct04 + (ct15 * -K14)
362 smlal r4, r5, r10, r9 @ r4..r5 += (ct17 * -K03)
363 smlal r4, r5, lr, r8 @ r4..r5 += (ct16 * K15)
364 smlal r4, r5, r11, r7 @ r4..r5 += (ct14 * -K02)
365
366 rsb lr, lr, #0 @ lr = -K15
367 rsb r11, r11, #0 @ r11 = K02
368
369 smlal r2, r3, lr, r9 @ r2..r3 += (ct17 * -K15)
370 smlal r2, r3, r11, r6 @ r2..r3 += (ct15 * K02)
371
372 movs r4, r4, lsr #28
373 adc r4, r4, r5, lsl #4 @ r4 = bits[59..28] of r4..r5
374 str r4, [r1, #x25] @ store result x25
375
376 movs r2, r2, lsr #28
377 adc r2, r2, r3, lsl #4 @ r2 = bits[59..28] of r2..r3
378 str r2, [r1, #x19] @ store result x19
379
380 @----
381
382 ldr r2, [sp, #16] @ r2 = ct01_l
383 ldr r3, [sp, #20] @ r3 = ct01_h
384
385 ldr r6, [r0, #X1]
386 ldr r8, [r0, #X7]
387 ldr r9, [r0, #X10]
388 ldr r7, [r0, #X16]
389
390 rsbs r2, r2, #0
391 rsc r3, r3, #0 @ r2..r3 = -ct01
392
393 mov r4, r2
394 mov r5, r3 @ r4..r5 = -ct01
395
396 @ r2..r3 = -ct01
397 @ r4..r5 = -ct01
398 @ r6 = X1
399 @ r7 = X16
400 @ r8 = X7
401 @ r9 = X10
402 @ r10 = -K03
403 @ r11 = K02
404 @ r12 = -K14
405 @ lr = -K15
406
407 smlal r4, r5, r12, r7 @ r4..r5 = -ct01 + (X16 * -K14)
408 smlal r2, r3, lr, r9 @ r2..r3 = -ct01 + (X10 * -K15)
409
410 smlal r4, r5, r10, r8 @ r4..r5 += (X7 * -K03)
411 smlal r2, r3, r10, r7 @ r2..r3 += (X16 * -K03)
412
413 smlal r4, r5, r11, r9 @ r4..r5 += (X10 * K02)
414 smlal r2, r3, r12, r8 @ r2..r3 += (X7 * -K14)
415
416 rsb lr, lr, #0 @ lr = K15
417 rsb r11, r11, #0 @ r11 = -K02
418
419 smlal r4, r5, lr, r6 @ r4..r5 += (X1 * K15) = ct05
420 smlal r2, r3, r11, r6 @ r2..r3 += (X1 * -K02) = ct03
421
422 stmdb sp!, { r2, r3, r4, r5 } @ stack ct05_h, ct05_l, ct03_h, ct03_l
423
424 rsbs r4, r4, #0
425 rsc r5, r5, #0 @ r4..r5 = -ct05
426
427 stmdb sp!, { r4, r5 } @ stack -ct05_h, -ct05_l
428
429 ldr r2, [sp, #48] @ r2 = ct00_l
430 ldr r3, [sp, #52] @ r3 = ct00_h
431
432 rsb r10, r10, #0 @ r10 = K03
433
434 rsbs r4, r2, #0
435 rsc r5, r3, #0 @ r4..r5 = -ct00
436
437 @ r2..r3 = ct00
438 @ r4..r5 = -ct00
439 @ r6 = X1
440 @ r7 = X16
441 @ r8 = X7
442 @ r9 = X10
443 @ r10 = K03
444 @ r11 = -K02
445 @ r12 = -K14
446 @ lr = K15
447
448 smlal r4, r5, r10, r6 @ r4..r5 = -ct00 + (X1 * K03)
449 smlal r2, r3, r10, r9 @ r2..r3 = ct00 + (X10 * K03)
450
451 smlal r4, r5, r12, r9 @ r4..r5 += (X10 * -K14)
452 smlal r2, r3, r12, r6 @ r2..r3 += (X1 * -K14)
453
454 smlal r4, r5, r11, r7 @ r4..r5 += (X16 * -K02)
455 smlal r4, r5, lr, r8 @ r4..r5 += (X7 * K15) = ct07
456
457 rsb lr, lr, #0 @ lr = -K15
458 rsb r11, r11, #0 @ r11 = K02
459
460 smlal r2, r3, r11, r8 @ r2..r3 += (X7 * K02)
461 smlal r2, r3, lr, r7 @ r2..r3 += (X16 * -K15) = ct02
462
463 rsbs r6, r4, #0
464 rsc r7, r5, #0 @ r6..r7 = -ct07
465
466 stmdb sp!, { r2 - r7 } @ stack -ct07_h, -ct07_l, ct07_h, ct07_l, ct02_h, ct02_l
467
468
469 @----
470
471 add r2, pc, #(imdct36_long_karray-.-8) @ r2 = base address of Knn array (PIC safe ?)
472
473
474loop:
475 ldr r12, [r0, #X0]
476
477 ldmia r2!, { r5 - r11 } @ first 7 words from Karray element
478
479 smull r3, r4, r5, r12 @ sum = (Kxx * X0)
480 ldr r12, [r0, #X2]
481 ldr r5, [r0, #X3]
482 smlal r3, r4, r6, r12 @ sum += (Kxx * X2)
483 ldr r12, [r0, #X5]
484 ldr r6, [r0, #X6]
485 smlal r3, r4, r7, r5 @ sum += (Kxx * X3)
486 smlal r3, r4, r8, r12 @ sum += (Kxx * X5)
487 ldr r12, [r0, #X8]
488 ldr r5, [r0, #X9]
489 smlal r3, r4, r9, r6 @ sum += (Kxx * X6)
490 smlal r3, r4, r10, r12 @ sum += (Kxx * X8)
491 smlal r3, r4, r11, r5 @ sum += (Kxx * X9)
492
493 ldmia r2!, { r5 - r10 } @ final 6 words from Karray element
494
495 ldr r11, [r0, #X11]
496 ldr r12, [r0, #X12]
497 smlal r3, r4, r5, r11 @ sum += (Kxx * X11)
498 ldr r11, [r0, #X14]
499 ldr r5, [r0, #X15]
500 smlal r3, r4, r6, r12 @ sum += (Kxx * X12)
501 smlal r3, r4, r7, r11 @ sum += (Kxx * X14)
502 ldr r11, [r0, #X17]
503 smlal r3, r4, r8, r5 @ sum += (Kxx * X15)
504 smlal r3, r4, r9, r11 @ sum += (Kxx * X17)
505
506 add r5, sp, r10, lsr #16 @ create index back into stack for required ctxx
507
508 ldmia r5, { r6, r7 } @ r6..r7 = ctxx
509
510 mov r8, r10, lsl #16 @ push ctxx index off the top end
511
512 adds r3, r3, r6 @ add low words
513 adc r4, r4, r7 @ add high words, with carry
514 movs r3, r3, lsr #28
515 adc r3, r3, r4, lsl #4 @ r3 = bits[59..28] of r3..r4
516
517 str r3, [r1, r8, lsr #24] @ push completion flag off the bottom end
518
519 movs r8, r8, lsl #8 @ push result location index off the top end
520 beq loop @ loop back if completion flag not set
521 b imdct_l_windowing @ branch to windowing stage if looping finished
522
523imdct36_long_karray:
524
525 .word K17, -K13, K10, -K06, -K05, K01, -K00, K04, -K07, K11, K12, -K16, 0x00000000
526 .word K13, K07, K16, K01, K10, -K05, K04, -K11, K00, -K17, K06, -K12, 0x00200800
527 .word K11, K17, K05, K12, -K01, K06, -K07, K00, -K13, K04, -K16, K10, 0x00200c00
528 .word K07, K00, -K12, K05, -K16, -K10, K11, -K17, K04, K13, K01, K06, 0x00001400
529 .word K05, K10, -K00, -K17, K07, -K13, K12, K06, -K16, K01, -K11, -K04, 0x00181800
530 .word K01, K05, -K07, -K11, K13, K17, -K16, -K12, K10, K06, -K04, -K00, 0x00102000
531 .word -K16, K12, -K11, K07, K04, -K00, -K01, K05, -K06, K10, K13, -K17, 0x00284800
532 .word -K12, K06, K17, -K00, -K11, K04, K05, -K10, K01, K16, -K07, -K13, 0x00085000
533 .word -K10, K16, K04, -K13, -K00, K07, K06, -K01, -K12, -K05, K17, K11, 0x00105400
534 .word -K06, -K01, K13, K04, K17, -K11, -K10, -K16, -K05, K12, K00, K07, 0x00185c00
535 .word -K04, -K11, -K01, K16, K06, K12, K13, -K07, -K17, -K00, -K10, -K05, 0x00006000
536 .word -K00, -K04, -K06, -K10, -K12, -K16, -K17, -K13, -K11, -K07, -K05, -K01, 0x00206801
537
538
539 @----
540 @-------------------------------------------------------------------------
541 @----
542
543imdct_l_windowing:
544
545 ldr r11, [sp, #80] @ fetch function parameter 3 from out of the stack
546 ldmia r1!, { r0, r2 - r9 } @ load 9 words from x0, update pointer
547
548 @ r0 = x0
549 @ r1 = &x[9]
550 @ r2 = x1
551 @ r3 = x2
552 @ r4 = x3
553 @ r5 = x4
554 @ r6 = x5
555 @ r7 = x6
556 @ r8 = x7
557 @ r9 = x8
558 @ r10 = .
559 @ r11 = window mode: (0 == normal), (1 == start block), (3 == stop block)
560 @ r12 = .
561 @ lr = .
562
563 cmp r11, #BLOCK_MODE_STOP @ setup flags
564 rsb r10, r0, #0 @ r10 = -x0 (DONT change flags !!)
565 beq stop_block_x0_to_x17
566
567
568 @ start and normal blocks are treated the same for x[0]..x[17]
569
570normal_block_x0_to_x17:
571
572 ldr r12, =WL9 @ r12 = window_l[9]
573
574 rsb r0, r9, #0 @ r0 = -x8
575 rsb r9, r2, #0 @ r9 = -x1
576 rsb r2, r8, #0 @ r2 = -x7
577 rsb r8, r3, #0 @ r8 = -x2
578 rsb r3, r7, #0 @ r3 = -x6
579 rsb r7, r4, #0 @ r7 = -x3
580 rsb r4, r6, #0 @ r4 = -x5
581 rsb r6, r5, #0 @ r6 = -x4
582
583 @ r0 = -x8
584 @ r1 = &x[9]
585 @ r2 = -x7
586 @ r3 = -x6
587 @ r4 = -x5
588 @ r5 = .
589 @ r6 = -x4
590 @ r7 = -x3
591 @ r8 = -x2
592 @ r9 = -x1
593 @ r10 = -x0
594 @ r11 = window mode: (0 == normal), (1 == start block), (3 == stop block)
595 @ r12 = window_l[9]
596 @ lr = .
597
598 smull r5, lr, r12, r0 @ r5..lr = (window_l[9] * (x[9] == -x[8]))
599 ldr r12, =WL10 @ r12 = window_l[10]
600 movs r5, r5, lsr #28
601 adc r0, r5, lr, lsl #4 @ r0 = bits[59..28] of windowed x9
602
603 smull r5, lr, r12, r2 @ r5..lr = (window_l[10] * (x[10] == -x[7]))
604 ldr r12, =WL11 @ r12 = window_l[11]
605 movs r5, r5, lsr #28
606 adc r2, r5, lr, lsl #4 @ r2 = bits[59..28] of windowed x10
607
608 smull r5, lr, r12, r3 @ r5..lr = (window_l[11] * (x[11] == -x[6]))
609 ldr r12, =WL12 @ r12 = window_l[12]
610 movs r5, r5, lsr #28
611 adc r3, r5, lr, lsl #4 @ r3 = bits[59..28] of windowed x11
612
613 smull r5, lr, r12, r4 @ r5..lr = (window_l[12] * (x[12] == -x[5]))
614 ldr r12, =WL13 @ r12 = window_l[13]
615 movs r5, r5, lsr #28
616 adc r4, r5, lr, lsl #4 @ r4 = bits[59..28] of windowed x12
617
618 smull r5, lr, r12, r6 @ r5..lr = (window_l[13] * (x[13] == -x[4]))
619 ldr r12, =WL14 @ r12 = window_l[14]
620 movs r5, r5, lsr #28
621 adc r6, r5, lr, lsl #4 @ r6 = bits[59..28] of windowed x13
622
623 smull r5, lr, r12, r7 @ r5..lr = (window_l[14] * (x[14] == -x[3]))
624 ldr r12, =WL15 @ r12 = window_l[15]
625 movs r5, r5, lsr #28
626 adc r7, r5, lr, lsl #4 @ r7 = bits[59..28] of windowed x14
627
628 smull r5, lr, r12, r8 @ r5..lr = (window_l[15] * (x[15] == -x[2]))
629 ldr r12, =WL16 @ r12 = window_l[16]
630 movs r5, r5, lsr #28
631 adc r8, r5, lr, lsl #4 @ r8 = bits[59..28] of windowed x15
632
633 smull r5, lr, r12, r9 @ r5..lr = (window_l[16] * (x[16] == -x[1]))
634 ldr r12, =WL17 @ r12 = window_l[17]
635 movs r5, r5, lsr #28
636 adc r9, r5, lr, lsl #4 @ r9 = bits[59..28] of windowed x16
637
638 smull r5, lr, r12, r10 @ r5..lr = (window_l[17] * (x[17] == -x[0]))
639 ldr r12, =WL0 @ r12 = window_l[0]
640 movs r5, r5, lsr #28
641 adc r10, r5, lr, lsl #4 @ r10 = bits[59..28] of windowed x17
642
643
644 stmia r1, { r0, r2 - r4, r6 - r10 } @ store windowed x[9] .. x[17]
645 ldmdb r1!, { r0, r2 - r9 } @ load 9 words downto (and including) x0
646
647
648 smull r10, lr, r12, r0 @ r10..lr = (window_l[0] * x[0])
649 ldr r12, =WL1 @ r12 = window_l[1]
650 movs r10, r10, lsr #28
651 adc r0, r10, lr, lsl #4 @ r0 = bits[59..28] of windowed x0
652
653 smull r10, lr, r12, r2 @ r10..lr = (window_l[1] * x[1])
654 ldr r12, =WL2 @ r12 = window_l[2]
655 movs r10, r10, lsr #28
656 adc r2, r10, lr, lsl #4 @ r2 = bits[59..28] of windowed x1
657
658 smull r10, lr, r12, r3 @ r10..lr = (window_l[2] * x[2])
659 ldr r12, =WL3 @ r12 = window_l[3]
660 movs r10, r10, lsr #28
661 adc r3, r10, lr, lsl #4 @ r3 = bits[59..28] of windowed x2
662
663 smull r10, lr, r12, r4 @ r10..lr = (window_l[3] * x[3])
664 ldr r12, =WL4 @ r12 = window_l[4]
665 movs r10, r10, lsr #28
666 adc r4, r10, lr, lsl #4 @ r4 = bits[59..28] of windowed x3
667
668 smull r10, lr, r12, r5 @ r10..lr = (window_l[4] * x[4])
669 ldr r12, =WL5 @ r12 = window_l[5]
670 movs r10, r10, lsr #28
671 adc r5, r10, lr, lsl #4 @ r5 = bits[59..28] of windowed x4
672
673 smull r10, lr, r12, r6 @ r10..lr = (window_l[5] * x[5])
674 ldr r12, =WL6 @ r12 = window_l[6]
675 movs r10, r10, lsr #28
676 adc r6, r10, lr, lsl #4 @ r6 = bits[59..28] of windowed x5
677
678 smull r10, lr, r12, r7 @ r10..lr = (window_l[6] * x[6])
679 ldr r12, =WL7 @ r12 = window_l[7]
680 movs r10, r10, lsr #28
681 adc r7, r10, lr, lsl #4 @ r7 = bits[59..28] of windowed x6
682
683 smull r10, lr, r12, r8 @ r10..lr = (window_l[7] * x[7])
684 ldr r12, =WL8 @ r12 = window_l[8]
685 movs r10, r10, lsr #28
686 adc r8, r10, lr, lsl #4 @ r8 = bits[59..28] of windowed x7
687
688 smull r10, lr, r12, r9 @ r10..lr = (window_l[8] * x[8])
689 movs r10, r10, lsr #28
690 adc r9, r10, lr, lsl #4 @ r9 = bits[59..28] of windowed x8
691
692 stmia r1, { r0, r2 - r9 } @ store windowed x[0] .. x[8]
693
694 cmp r11, #BLOCK_MODE_START
695 beq start_block_x18_to_x35
696
697
698 @----
699
700
701normal_block_x18_to_x35:
702
703 ldr r11, =WL3 @ r11 = window_l[3]
704 ldr r12, =WL4 @ r12 = window_l[4]
705
706 add r1, r1, #(18*4) @ r1 = &x[18]
707
708 ldmia r1!, { r0, r2 - r4, r6 - r10 } @ load 9 words from x18, update pointer
709
710 @ r0 = x18
711 @ r1 = &x[27]
712 @ r2 = x19
713 @ r3 = x20
714 @ r4 = x21
715 @ r5 = .
716 @ r6 = x22
717 @ r7 = x23
718 @ r8 = x24
719 @ r9 = x25
720 @ r10 = x26
721 @ r11 = window_l[3]
722 @ r12 = window_l[4]
723 @ lr = .
724
725 smull r5, lr, r12, r6 @ r5..lr = (window_l[4] * (x[22] == x[31]))
726 movs r5, r5, lsr #28
727 adc r5, r5, lr, lsl #4 @ r5 = bits[59..28] of windowed x31
728
729 smull r6, lr, r11, r4 @ r5..lr = (window_l[3] * (x[21] == x[32]))
730 ldr r12, =WL5 @ r12 = window_l[5]
731 movs r6, r6, lsr #28
732 adc r6, r6, lr, lsl #4 @ r6 = bits[59..28] of windowed x32
733
734 smull r4, lr, r12, r7 @ r4..lr = (window_l[5] * (x[23] == x[30]))
735 ldr r11, =WL1 @ r11 = window_l[1]
736 ldr r12, =WL2 @ r12 = window_l[2]
737 movs r4, r4, lsr #28
738 adc r4, r4, lr, lsl #4 @ r4 = bits[59..28] of windowed x30
739
740 smull r7, lr, r12, r3 @ r7..lr = (window_l[2] * (x[20] == x[33]))
741 ldr r12, =WL6 @ r12 = window_l[6]
742 movs r7, r7, lsr #28
743 adc r7, r7, lr, lsl #4 @ r7 = bits[59..28] of windowed x33
744
745 smull r3, lr, r12, r8 @ r3..lr = (window_l[6] * (x[24] == x[29]))
746 movs r3, r3, lsr #28
747 adc r3, r3, lr, lsl #4 @ r3 = bits[59..28] of windowed x29
748
749 smull r8, lr, r11, r2 @ r7..lr = (window_l[1] * (x[19] == x[34]))
750 ldr r12, =WL7 @ r12 = window_l[7]
751 ldr r11, =WL8 @ r11 = window_l[8]
752 movs r8, r8, lsr #28
753 adc r8, r8, lr, lsl #4 @ r8 = bits[59..28] of windowed x34
754
755 smull r2, lr, r12, r9 @ r7..lr = (window_l[7] * (x[25] == x[28]))
756 ldr r12, =WL0 @ r12 = window_l[0]
757 movs r2, r2, lsr #28
758 adc r2, r2, lr, lsl #4 @ r2 = bits[59..28] of windowed x28
759
760 smull r9, lr, r12, r0 @ r3..lr = (window_l[0] * (x[18] == x[35]))
761 movs r9, r9, lsr #28
762 adc r9, r9, lr, lsl #4 @ r9 = bits[59..28] of windowed x35
763
764 smull r0, lr, r11, r10 @ r7..lr = (window_l[8] * (x[26] == x[27]))
765 ldr r11, =WL16 @ r11 = window_l[16]
766 ldr r12, =WL17 @ r12 = window_l[17]
767 movs r0, r0, lsr #28
768 adc r0, r0, lr, lsl #4 @ r0 = bits[59..28] of windowed x27
769
770
771 stmia r1, { r0, r2 - r9 } @ store windowed x[27] .. x[35]
772 ldmdb r1!, { r0, r2 - r9 } @ load 9 words downto (and including) x18
773
774
775 smull r10, lr, r12, r0 @ r10..lr = (window_l[17] * x[18])
776 movs r10, r10, lsr #28
777 adc r0, r10, lr, lsl #4 @ r0 = bits[59..28] of windowed x0
778
779 smull r10, lr, r11, r2 @ r10..lr = (window_l[16] * x[19])
780 ldr r11, =WL14 @ r11 = window_l[14]
781 ldr r12, =WL15 @ r12 = window_l[15]
782 movs r10, r10, lsr #28
783 adc r2, r10, lr, lsl #4 @ r2 = bits[59..28] of windowed x1
784
785 smull r10, lr, r12, r3 @ r10..lr = (window_l[15] * x[20])
786 movs r10, r10, lsr #28
787 adc r3, r10, lr, lsl #4 @ r3 = bits[59..28] of windowed x2
788
789 smull r10, lr, r11, r4 @ r10..lr = (window_l[14] * x[21])
790 ldr r11, =WL12 @ r11 = window_l[12]
791 ldr r12, =WL13 @ r12 = window_l[13]
792 movs r10, r10, lsr #28
793 adc r4, r10, lr, lsl #4 @ r4 = bits[59..28] of windowed x3
794
795 smull r10, lr, r12, r5 @ r10..lr = (window_l[13] * x[22])
796 movs r10, r10, lsr #28
797 adc r5, r10, lr, lsl #4 @ r5 = bits[59..28] of windowed x4
798
799 smull r10, lr, r11, r6 @ r10..lr = (window_l[12] * x[23])
800 ldr r11, =WL10 @ r12 = window_l[10]
801 ldr r12, =WL11 @ r12 = window_l[11]
802 movs r10, r10, lsr #28
803 adc r6, r10, lr, lsl #4 @ r6 = bits[59..28] of windowed x5
804
805 smull r10, lr, r12, r7 @ r10..lr = (window_l[11] * x[24])
806 movs r10, r10, lsr #28
807 adc r7, r10, lr, lsl #4 @ r7 = bits[59..28] of windowed x6
808
809 smull r10, lr, r11, r8 @ r10..lr = (window_l[10] * x[25])
810 ldr r12, =WL9 @ r12 = window_l[9]
811 movs r10, r10, lsr #28
812 adc r8, r10, lr, lsl #4 @ r8 = bits[59..28] of windowed x7
813
814 smull r10, lr, r12, r9 @ r10..lr = (window_l[9] * x[26])
815
816 movs r10, r10, lsr #28
817 adc r9, r10, lr, lsl #4 @ r9 = bits[59..28] of windowed x8
818
819 stmia r1, { r0, r2 - r9 } @ store windowed x[18] .. x[26]
820
821 @----
822 @ NB there are 2 possible exits from this function - this is only one of them
823 @----
824
825 add sp, sp, #(21*4) @ return stack frame
826 ldmia sp!, { r4 - r11, pc } @ restore callee saved regs, and return
827
828 @----
829
830
831stop_block_x0_to_x17:
832
833 @ r0 = x0
834 @ r1 = &x[9]
835 @ r2 = x1
836 @ r3 = x2
837 @ r4 = x3
838 @ r5 = x4
839 @ r6 = x5
840 @ r7 = x6
841 @ r8 = x7
842 @ r9 = x8
843 @ r10 = -x0
844 @ r11 = window mode: (0 == normal), (1 == start block), (3 == stop block)
845 @ r12 = .
846 @ lr = .
847
848 rsb r0, r6, #0 @ r0 = -x5
849 rsb r6, r2, #0 @ r6 = -x1
850 rsb r2, r5, #0 @ r2 = -x4
851 rsb r5, r3, #0 @ r5 = -x2
852 rsb r3, r4, #0 @ r3 = -x3
853
854 add r1, r1, #(3*4) @ r1 = &x[12]
855 stmia r1, { r0, r2, r3, r5, r6, r10 } @ store unchanged x[12] .. x[17]
856
857 ldr r0, =WL1 @ r0 = window_l[1] == window_s[0]
858
859 rsb r10, r9, #0 @ r10 = -x8
860 rsb r12, r8, #0 @ r12 = -x7
861 rsb lr, r7, #0 @ lr = -x6
862
863 @ r0 = WL1
864 @ r1 = &x[12]
865 @ r2 = .
866 @ r3 = .
867 @ r4 = .
868 @ r5 = .
869 @ r6 = .
870 @ r7 = x6
871 @ r8 = x7
872 @ r9 = x8
873 @ r10 = -x8
874 @ r11 = window mode: (0 == normal), (1 == start block), (3 == stop block)
875 @ r12 = -x7
876 @ lr = -x6
877
878 smull r5, r6, r0, r7 @ r5..r6 = (window_l[1] * x[6])
879 ldr r2, =WL4 @ r2 = window_l[4] == window_s[1]
880 movs r5, r5, lsr #28
881 adc r7, r5, r6, lsl #4 @ r7 = bits[59..28] of windowed x6
882
883 smull r5, r6, r2, r8 @ r5..r6 = (window_l[4] * x[7])
884 ldr r3, =WL7 @ r3 = window_l[7] == window_s[2]
885 movs r5, r5, lsr #28
886 adc r8, r5, r6, lsl #4 @ r8 = bits[59..28] of windowed x7
887
888 smull r5, r6, r3, r9 @ r5..r6 = (window_l[7] * x[8])
889 ldr r4, =WL10 @ r4 = window_l[10] == window_s[3]
890 movs r5, r5, lsr #28
891 adc r9, r5, r6, lsl #4 @ r9 = bits[59..28] of windowed x8
892
893 smull r5, r6, r4, r10 @ r5..r6 = (window_l[10] * (x[9] == -x[8]))
894 ldr r0, =WL13 @ r0 = window_l[13] == window_s[4]
895 movs r5, r5, lsr #28
896 adc r10, r5, r6, lsl #4 @ r10 = bits[59..28] of windowed x9
897
898 smull r5, r6, r0, r12 @ r5..r6 = (window_l[13] * (x[10] == -x[7]))
899 ldr r2, =WL16 @ r2 = window_l[16] == window_s[5]
900 movs r5, r5, lsr #28
901 adc r12, r5, r6, lsl #4 @ r10 = bits[59..28] of windowed x9
902
903 smull r5, r6, r2, lr @ r5..r6 = (window_l[16] * (x[11] == -x[6]))
904
905 ldr r0, =0x00
906
907 movs r5, r5, lsr #28
908 adc lr, r5, r6, lsl #4 @ r10 = bits[59..28] of windowed x9
909
910 stmdb r1!, { r7 - r10, r12, lr } @ store windowed x[6] .. x[11]
911
912 ldr r5, =0x00
913 ldr r6, =0x00
914 ldr r2, =0x00
915 ldr r3, =0x00
916 ldr r4, =0x00
917
918 stmdb r1!, { r0, r2 - r6 } @ store windowed x[0] .. x[5]
919
920 b normal_block_x18_to_x35
921
922
923 @----
924
925
926start_block_x18_to_x35:
927
928 ldr r4, =WL1 @ r0 = window_l[1] == window_s[0]
929
930 add r1, r1, #(24*4) @ r1 = &x[24]
931
932 ldmia r1, { r0, r2, r3 } @ load 3 words from x24, dont update pointer
933
934 @ r0 = x24
935 @ r1 = &x[24]
936 @ r2 = x25
937 @ r3 = x26
938 @ r4 = WL1
939 @ r5 = WL4
940 @ r6 = WL7
941 @ r7 = WL10
942 @ r8 = WL13
943 @ r9 = WL16
944 @ r10 = .
945 @ r11 = .
946 @ r12 = .
947 @ lr = .
948
949 ldr r5, =WL4 @ r5 = window_l[4] == window_s[1]
950
951 smull r10, r11, r4, r0 @ r10..r11 = (window_l[1] * (x[24] == x[29]))
952 ldr r6, =WL7 @ r6 = window_l[7] == window_s[2]
953 movs r10, r10, lsr #28
954 adc lr, r10, r11, lsl #4 @ lr = bits[59..28] of windowed x29
955
956 smull r10, r11, r5, r2 @ r10..r11 = (window_l[4] * (x[25] == x[28]))
957 ldr r7, =WL10 @ r7 = window_l[10] == window_s[3]
958 movs r10, r10, lsr #28
959 adc r12, r10, r11, lsl #4 @ r12 = bits[59..28] of windowed x28
960
961 smull r10, r11, r6, r3 @ r10..r11 = (window_l[7] * (x[26] == x[27]))
962 ldr r8, =WL13 @ r8 = window_l[13] == window_s[4]
963 movs r10, r10, lsr #28
964 adc r4, r10, r11, lsl #4 @ r4 = bits[59..28] of windowed x27
965
966 smull r10, r11, r7, r3 @ r10..r11 = (window_l[10] * x[26])
967 ldr r9, =WL16 @ r9 = window_l[16] == window_s[5]
968 movs r10, r10, lsr #28
969 adc r3, r10, r11, lsl #4 @ r3 = bits[59..28] of windowed x26
970
971 smull r10, r11, r8, r2 @ r10..r11 = (window_l[13] * x[25])
972 ldr r5, =0x00
973 movs r10, r10, lsr #28
974 adc r2, r10, r11, lsl #4 @ r2 = bits[59..28] of windowed x25
975
976 smull r10, r11, r9, r0 @ r10..r11 = (window_l[16] * x[24])
977 ldr r6, =0x00
978 movs r10, r10, lsr #28
979 adc r0, r10, r11, lsl #4 @ r0 = bits[59..28] of windowed x24
980
981 stmia r1!, { r0, r2, r3, r4, r12, lr } @ store windowed x[24] .. x[29]
982
983 ldr r7, =0x00
984 ldr r8, =0x00
985 ldr r9, =0x00
986 ldr r10, =0x00
987
988 stmia r1!, { r5 - r10 } @ store windowed x[30] .. x[35]
989
990 @----
991 @ NB there are 2 possible exits from this function - this is only one of them
992 @----
993
994 add sp, sp, #(21*4) @ return stack frame
995 ldmia sp!, { r4 - r11, pc } @ restore callee saved regs, and return
996
997 @----
998 @END
999 @----
1000
diff --git a/core/multimedia/opieplayer/libmad/imdct_s.dat b/core/multimedia/opieplayer/libmad/imdct_s.dat
new file mode 100644
index 0000000..00d62eb
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/imdct_s.dat
@@ -0,0 +1,62 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22 /* 0 */ { MAD_F(0x09bd7ca0) /* 0.608761429 */,
23 -MAD_F(0x0ec835e8) /* -0.923879533 */,
24 -MAD_F(0x0216a2a2) /* -0.130526192 */,
25 MAD_F(0x0fdcf549) /* 0.991444861 */,
26 -MAD_F(0x061f78aa) /* -0.382683432 */,
27 -MAD_F(0x0cb19346) /* -0.793353340 */ },
28
29 /* 6 */ { -MAD_F(0x0cb19346) /* -0.793353340 */,
30 MAD_F(0x061f78aa) /* 0.382683432 */,
31 MAD_F(0x0fdcf549) /* 0.991444861 */,
32 MAD_F(0x0216a2a2) /* 0.130526192 */,
33 -MAD_F(0x0ec835e8) /* -0.923879533 */,
34 -MAD_F(0x09bd7ca0) /* -0.608761429 */ },
35
36 /* 1 */ { MAD_F(0x061f78aa) /* 0.382683432 */,
37 -MAD_F(0x0ec835e8) /* -0.923879533 */,
38 MAD_F(0x0ec835e8) /* 0.923879533 */,
39 -MAD_F(0x061f78aa) /* -0.382683432 */,
40 -MAD_F(0x061f78aa) /* -0.382683432 */,
41 MAD_F(0x0ec835e8) /* 0.923879533 */ },
42
43 /* 7 */ { -MAD_F(0x0ec835e8) /* -0.923879533 */,
44 -MAD_F(0x061f78aa) /* -0.382683432 */,
45 MAD_F(0x061f78aa) /* 0.382683432 */,
46 MAD_F(0x0ec835e8) /* 0.923879533 */,
47 MAD_F(0x0ec835e8) /* 0.923879533 */,
48 MAD_F(0x061f78aa) /* 0.382683432 */ },
49
50 /* 2 */ { MAD_F(0x0216a2a2) /* 0.130526192 */,
51 -MAD_F(0x061f78aa) /* -0.382683432 */,
52 MAD_F(0x09bd7ca0) /* 0.608761429 */,
53 -MAD_F(0x0cb19346) /* -0.793353340 */,
54 MAD_F(0x0ec835e8) /* 0.923879533 */,
55 -MAD_F(0x0fdcf549) /* -0.991444861 */ },
56
57 /* 8 */ { -MAD_F(0x0fdcf549) /* -0.991444861 */,
58 -MAD_F(0x0ec835e8) /* -0.923879533 */,
59 -MAD_F(0x0cb19346) /* -0.793353340 */,
60 -MAD_F(0x09bd7ca0) /* -0.608761429 */,
61 -MAD_F(0x061f78aa) /* -0.382683432 */,
62 -MAD_F(0x0216a2a2) /* -0.130526192 */ }
diff --git a/core/multimedia/opieplayer/libmad/layer12.c b/core/multimedia/opieplayer/libmad/layer12.c
new file mode 100644
index 0000000..41b17ca
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/layer12.c
@@ -0,0 +1,496 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifdef HAVE_CONFIG_H
23# include "libmad_config.h"
24# endif
25
26# include "libmad_global.h"
27
28# ifdef HAVE_LIMITS_H
29# include <limits.h>
30# else
31# define CHAR_BIT 8
32# endif
33
34# include "fixed.h"
35# include "bit.h"
36# include "stream.h"
37# include "frame.h"
38# include "layer12.h"
39
40/*
41 * scalefactor table
42 * used in both Layer I and Layer II decoding
43 */
44static
45mad_fixed_t const sf_table[63] = {
46# include "sf_table.dat"
47};
48
49/* --- Layer I ------------------------------------------------------------- */
50
51/* linear scaling table */
52static
53mad_fixed_t const linear_table[14] = {
54 MAD_F(0x15555555), /* 2^2 / (2^2 - 1) == 1.33333333333333 */
55 MAD_F(0x12492492), /* 2^3 / (2^3 - 1) == 1.14285714285714 */
56 MAD_F(0x11111111), /* 2^4 / (2^4 - 1) == 1.06666666666667 */
57 MAD_F(0x10842108), /* 2^5 / (2^5 - 1) == 1.03225806451613 */
58 MAD_F(0x10410410), /* 2^6 / (2^6 - 1) == 1.01587301587302 */
59 MAD_F(0x10204081), /* 2^7 / (2^7 - 1) == 1.00787401574803 */
60 MAD_F(0x10101010), /* 2^8 / (2^8 - 1) == 1.00392156862745 */
61 MAD_F(0x10080402), /* 2^9 / (2^9 - 1) == 1.00195694716243 */
62 MAD_F(0x10040100), /* 2^10 / (2^10 - 1) == 1.00097751710655 */
63 MAD_F(0x10020040), /* 2^11 / (2^11 - 1) == 1.00048851978505 */
64 MAD_F(0x10010010), /* 2^12 / (2^12 - 1) == 1.00024420024420 */
65 MAD_F(0x10008004), /* 2^13 / (2^13 - 1) == 1.00012208521548 */
66 MAD_F(0x10004001), /* 2^14 / (2^14 - 1) == 1.00006103888177 */
67 MAD_F(0x10002000) /* 2^15 / (2^15 - 1) == 1.00003051850948 */
68};
69
70/*
71 * NAME:I_sample()
72 * DESCRIPTION:decode one requantized Layer I sample from a bitstream
73 */
74static
75mad_fixed_t I_sample(struct mad_bitptr *ptr, unsigned int nb)
76{
77 mad_fixed_t sample;
78
79 sample = mad_bit_read(ptr, nb);
80
81 /* invert most significant bit, extend sign, then scale to fixed format */
82
83 sample ^= 1 << (nb - 1);
84 sample |= -(sample & (1 << (nb - 1)));
85
86 sample <<= MAD_F_FRACBITS - (nb - 1);
87
88 /* requantize the sample */
89
90 /* s'' = (2^nb / (2^nb - 1)) * (s''' + 2^(-nb + 1)) */
91
92 sample += MAD_F_ONE >> (nb - 1);
93
94 return mad_f_mul(sample, linear_table[nb - 2]);
95
96 /* s' = factor * s'' */
97 /* (to be performed by caller) */
98}
99
100/*
101 * NAME:layer->I()
102 * DESCRIPTION:decode a single Layer I frame
103 */
104int mad_layer_I(struct mad_stream *stream, struct mad_frame *frame)
105{
106 struct mad_header *header = &frame->header;
107 unsigned int nch, bound, ch, s, sb, nb;
108 unsigned char allocation[2][32], scalefactor[2][32];
109
110 nch = MAD_NCHANNELS(header);
111
112 bound = 32;
113 if (header->mode == MAD_MODE_JOINT_STEREO) {
114 header->flags |= MAD_FLAG_I_STEREO;
115 bound = 4 + header->mode_extension * 4;
116 }
117
118 /* check CRC word */
119
120 if (header->flags & MAD_FLAG_PROTECTION) {
121 header->crc_check =
122 mad_bit_crc(stream->ptr, 4 * (bound * nch + (32 - bound)),
123 header->crc_check);
124
125 if (header->crc_check != header->crc_target &&
126 !(frame->options & MAD_OPTION_IGNORECRC)) {
127 stream->error = MAD_ERROR_BADCRC;
128 return -1;
129 }
130 }
131
132 /* decode bit allocations */
133
134 for (sb = 0; sb < bound; ++sb) {
135 for (ch = 0; ch < nch; ++ch) {
136 nb = mad_bit_read(&stream->ptr, 4);
137
138 if (nb == 15) {
139 stream->error = MAD_ERROR_BADBITALLOC;
140 return -1;
141 }
142
143 allocation[ch][sb] = nb ? nb + 1 : 0;
144 }
145 }
146
147 for (sb = bound; sb < 32; ++sb) {
148 nb = mad_bit_read(&stream->ptr, 4);
149
150 if (nb == 15) {
151 stream->error = MAD_ERROR_BADBITALLOC;
152 return -1;
153 }
154
155 allocation[0][sb] =
156 allocation[1][sb] = nb ? nb + 1 : 0;
157 }
158
159 /* decode scalefactors */
160
161 for (sb = 0; sb < 32; ++sb) {
162 for (ch = 0; ch < nch; ++ch) {
163 if (allocation[ch][sb]) {
164 scalefactor[ch][sb] = mad_bit_read(&stream->ptr, 6);
165
166 if (scalefactor[ch][sb] == 63) {
167 stream->error = MAD_ERROR_BADSCALEFACTOR;
168 return -1;
169 }
170 }
171 }
172 }
173
174 /* decode samples */
175
176 for (s = 0; s < 12; ++s) {
177 for (sb = 0; sb < bound; ++sb) {
178 for (ch = 0; ch < nch; ++ch) {
179 nb = allocation[ch][sb];
180 frame->sbsample[ch][s][sb] = nb ?
181 mad_f_mul(I_sample(&stream->ptr, nb),
182 sf_table[scalefactor[ch][sb]]) : 0;
183 }
184 }
185
186 for (sb = bound; sb < 32; ++sb) {
187 if ((nb = allocation[0][sb])) {
188 mad_fixed_t sample;
189
190 sample = I_sample(&stream->ptr, nb);
191
192 for (ch = 0; ch < nch; ++ch) {
193 frame->sbsample[ch][s][sb] =
194 mad_f_mul(sample, sf_table[scalefactor[ch][sb]]);
195 }
196 }
197 else {
198 for (ch = 0; ch < nch; ++ch)
199 frame->sbsample[ch][s][sb] = 0;
200 }
201 }
202 }
203
204 return 0;
205}
206
207/* --- Layer II ------------------------------------------------------------ */
208
209/* possible quantization per subband table */
210static
211struct {
212 unsigned int sblimit;
213 unsigned char const offsets[30];
214} const sbquant_table[5] = {
215 /* ISO/IEC 11172-3 Table B.2a */
216 { 27, { 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3,/* 0 */
217 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0 } },
218 /* ISO/IEC 11172-3 Table B.2b */
219 { 30, { 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3,/* 1 */
220 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0 } },
221 /* ISO/IEC 11172-3 Table B.2c */
222 { 8, { 5, 5, 2, 2, 2, 2, 2, 2 } }, /* 2 */
223 /* ISO/IEC 11172-3 Table B.2d */
224 { 12, { 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 } }, /* 3 */
225 /* ISO/IEC 13818-3 Table B.1 */
226 { 30, { 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,/* 4 */
227 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } }
228};
229
230/* bit allocation table */
231static
232struct {
233 unsigned short nbal;
234 unsigned short offset;
235} const bitalloc_table[8] = {
236 { 2, 0 }, /* 0 */
237 { 2, 3 }, /* 1 */
238 { 3, 3 }, /* 2 */
239 { 3, 1 }, /* 3 */
240 { 4, 2 }, /* 4 */
241 { 4, 3 }, /* 5 */
242 { 4, 4 }, /* 6 */
243 { 4, 5 } /* 7 */
244};
245
246/* offsets into quantization class table */
247static
248unsigned char const offset_table[6][15] = {
249 { 0, 1, 16 }, /* 0 */
250 { 0, 1, 2, 3, 4, 5, 16 }, /* 1 */
251 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }, /* 2 */
252 { 0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, /* 3 */
253 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16 }, /* 4 */
254 { 0, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 } /* 5 */
255};
256
257/* quantization class table */
258static
259struct quantclass {
260 unsigned short nlevels;
261 unsigned char group;
262 unsigned char bits;
263 mad_fixed_t C;
264 mad_fixed_t D;
265} const qc_table[17] = {
266# include "qc_table.dat"
267};
268
269/*
270 * NAME:II_samples()
271 * DESCRIPTION:decode three requantized Layer II samples from a bitstream
272 */
273static
274void II_samples(struct mad_bitptr *ptr,
275 struct quantclass const *quantclass,
276 mad_fixed_t output[3])
277{
278 unsigned int nb, s, sample[3];
279
280 if ((nb = quantclass->group)) {
281 unsigned int c, nlevels;
282
283 /* degrouping */
284 c = mad_bit_read(ptr, quantclass->bits);
285 nlevels = quantclass->nlevels;
286
287 for (s = 0; s < 3; ++s) {
288 sample[s] = c % nlevels;
289 c /= nlevels;
290 }
291 }
292 else {
293 nb = quantclass->bits;
294
295 for (s = 0; s < 3; ++s)
296 sample[s] = mad_bit_read(ptr, nb);
297 }
298
299 for (s = 0; s < 3; ++s) {
300 mad_fixed_t requantized;
301
302 /* invert most significant bit, extend sign, then scale to fixed format */
303
304 requantized = sample[s] ^ (1 << (nb - 1));
305 requantized |= -(requantized & (1 << (nb - 1)));
306
307 requantized <<= MAD_F_FRACBITS - (nb - 1);
308
309 /* requantize the sample */
310
311 /* s'' = C * (s''' + D) */
312
313 output[s] = mad_f_mul(requantized + quantclass->D, quantclass->C);
314
315 /* s' = factor * s'' */
316 /* (to be performed by caller) */
317 }
318}
319
320/*
321 * NAME:layer->II()
322 * DESCRIPTION:decode a single Layer II frame
323 */
324int mad_layer_II(struct mad_stream *stream, struct mad_frame *frame)
325{
326 struct mad_header *header = &frame->header;
327 struct mad_bitptr start;
328 unsigned int index, sblimit, nbal, nch, bound, gr, ch, s, sb;
329 unsigned char const *offsets;
330 unsigned char allocation[2][32], scfsi[2][32], scalefactor[2][32][3];
331 mad_fixed_t samples[3];
332
333 nch = MAD_NCHANNELS(header);
334
335 if (header->flags & MAD_FLAG_LSF_EXT)
336 index = 4;
337 else {
338 switch (nch == 2 ? header->bitrate / 2 : header->bitrate) {
339 case 32000:
340 case 48000:
341 index = (header->samplerate == 32000) ? 3 : 2;
342 break;
343
344 case 56000:
345 case 64000:
346 case 80000:
347 index = 0;
348 break;
349
350 default:
351 index = (header->samplerate == 48000) ? 0 : 1;
352 }
353 }
354
355 sblimit = sbquant_table[index].sblimit;
356 offsets = sbquant_table[index].offsets;
357
358 bound = 32;
359 if (header->mode == MAD_MODE_JOINT_STEREO) {
360 header->flags |= MAD_FLAG_I_STEREO;
361 bound = 4 + header->mode_extension * 4;
362 }
363
364 if (bound > sblimit)
365 bound = sblimit;
366
367 start = stream->ptr;
368
369 /* decode bit allocations */
370
371 for (sb = 0; sb < bound; ++sb) {
372 nbal = bitalloc_table[offsets[sb]].nbal;
373
374 for (ch = 0; ch < nch; ++ch)
375 allocation[ch][sb] = mad_bit_read(&stream->ptr, nbal);
376 }
377
378 for (sb = bound; sb < sblimit; ++sb) {
379 nbal = bitalloc_table[offsets[sb]].nbal;
380
381 allocation[0][sb] =
382 allocation[1][sb] = mad_bit_read(&stream->ptr, nbal);
383 }
384
385 /* decode scalefactor selection info */
386
387 for (sb = 0; sb < sblimit; ++sb) {
388 for (ch = 0; ch < nch; ++ch) {
389 if (allocation[ch][sb])
390 scfsi[ch][sb] = mad_bit_read(&stream->ptr, 2);
391 }
392 }
393
394 /* check CRC word */
395
396 if (header->flags & MAD_FLAG_PROTECTION) {
397 header->crc_check =
398 mad_bit_crc(start, mad_bit_length(&start, &stream->ptr),
399 header->crc_check);
400
401 if (header->crc_check != header->crc_target &&
402 !(frame->options & MAD_OPTION_IGNORECRC)) {
403 stream->error = MAD_ERROR_BADCRC;
404 return -1;
405 }
406 }
407
408 /* decode scalefactors */
409
410 for (sb = 0; sb < sblimit; ++sb) {
411 for (ch = 0; ch < nch; ++ch) {
412 if (allocation[ch][sb]) {
413 scalefactor[ch][sb][0] = mad_bit_read(&stream->ptr, 6);
414
415 switch (scfsi[ch][sb]) {
416 case 2:
417 scalefactor[ch][sb][2] =
418 scalefactor[ch][sb][1] =
419 scalefactor[ch][sb][0];
420 break;
421
422 case 0:
423 scalefactor[ch][sb][1] = mad_bit_read(&stream->ptr, 6);
424 /* fall through */
425
426 case 1:
427 case 3:
428 scalefactor[ch][sb][2] = mad_bit_read(&stream->ptr, 6);
429 }
430
431 if (scfsi[ch][sb] & 1)
432 scalefactor[ch][sb][1] = scalefactor[ch][sb][scfsi[ch][sb] - 1];
433
434 if (scalefactor[ch][sb][0] == 63 ||
435 scalefactor[ch][sb][1] == 63 ||
436 scalefactor[ch][sb][2] == 63) {
437 stream->error = MAD_ERROR_BADSCALEFACTOR;
438 return -1;
439 }
440 }
441 }
442 }
443
444 /* decode samples */
445
446 for (gr = 0; gr < 12; ++gr) {
447 for (sb = 0; sb < bound; ++sb) {
448 for (ch = 0; ch < nch; ++ch) {
449 if ((index = allocation[ch][sb])) {
450 index = offset_table[bitalloc_table[offsets[sb]].offset][index - 1];
451
452 II_samples(&stream->ptr, &qc_table[index], samples);
453
454 for (s = 0; s < 3; ++s) {
455 frame->sbsample[ch][3 * gr + s][sb] =
456 mad_f_mul(samples[s], sf_table[scalefactor[ch][sb][gr / 4]]);
457 }
458 }
459 else {
460 for (s = 0; s < 3; ++s)
461 frame->sbsample[ch][3 * gr + s][sb] = 0;
462 }
463 }
464 }
465
466 for (sb = bound; sb < sblimit; ++sb) {
467 if ((index = allocation[0][sb])) {
468 index = offset_table[bitalloc_table[offsets[sb]].offset][index - 1];
469
470 II_samples(&stream->ptr, &qc_table[index], samples);
471
472 for (ch = 0; ch < nch; ++ch) {
473 for (s = 0; s < 3; ++s) {
474 frame->sbsample[ch][3 * gr + s][sb] =
475 mad_f_mul(samples[s], sf_table[scalefactor[ch][sb][gr / 4]]);
476 }
477 }
478 }
479 else {
480 for (ch = 0; ch < nch; ++ch) {
481 for (s = 0; s < 3; ++s)
482 frame->sbsample[ch][3 * gr + s][sb] = 0;
483 }
484 }
485 }
486
487 for (ch = 0; ch < nch; ++ch) {
488 for (s = 0; s < 3; ++s) {
489 for (sb = sblimit; sb < 32; ++sb)
490 frame->sbsample[ch][3 * gr + s][sb] = 0;
491 }
492 }
493 }
494
495 return 0;
496}
diff --git a/core/multimedia/opieplayer/libmad/layer12.h b/core/multimedia/opieplayer/libmad/layer12.h
new file mode 100644
index 0000000..d2c81ac
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/layer12.h
@@ -0,0 +1,31 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifndef LIBMAD_LAYER12_H
23# define LIBMAD_LAYER12_H
24
25# include "stream.h"
26# include "frame.h"
27
28int mad_layer_I(struct mad_stream *, struct mad_frame *);
29int mad_layer_II(struct mad_stream *, struct mad_frame *);
30
31# endif
diff --git a/core/multimedia/opieplayer/libmad/layer3.c b/core/multimedia/opieplayer/libmad/layer3.c
new file mode 100644
index 0000000..194fc7e
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/layer3.c
@@ -0,0 +1,2492 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifdef HAVE_CONFIG_H
23# include "libmad_config.h"
24# endif
25
26# include "libmad_global.h"
27
28# include <stdlib.h>
29# include <string.h>
30# include <assert.h>
31
32# ifdef HAVE_LIMITS_H
33# include <limits.h>
34# else
35# define CHAR_BIT 8
36# endif
37
38# include "fixed.h"
39# include "bit.h"
40# include "stream.h"
41# include "frame.h"
42# include "huffman.h"
43# include "layer3.h"
44
45/* --- Layer III ----------------------------------------------------------- */
46
47enum {
48 count1table_select = 0x01,
49 scalefac_scale = 0x02,
50 preflag = 0x04,
51 mixed_block_flag = 0x08
52};
53
54struct sideinfo {
55 unsigned int main_data_begin;
56 unsigned int private_bits;
57
58 unsigned char scfsi[2];
59
60 struct granule {
61 struct channel {
62 /* from side info */
63 unsigned short part2_3_length;
64 unsigned short big_values;
65 unsigned short global_gain;
66 unsigned short scalefac_compress;
67
68 unsigned char flags;
69 unsigned char block_type;
70 unsigned char table_select[3];
71 unsigned char subblock_gain[3];
72 unsigned char region0_count;
73 unsigned char region1_count;
74
75 /* from main_data */
76 unsigned char scalefac[39];/* scalefac_l and/or scalefac_s */
77 } ch[2];
78 } gr[2];
79};
80
81/*
82 * scalefactor bit lengths
83 * derived from section 2.4.2.7 of ISO/IEC 11172-3
84 */
85static
86struct {
87 unsigned char slen1;
88 unsigned char slen2;
89} const sflen_table[16] = {
90 { 0, 0 }, { 0, 1 }, { 0, 2 }, { 0, 3 },
91 { 3, 0 }, { 1, 1 }, { 1, 2 }, { 1, 3 },
92 { 2, 1 }, { 2, 2 }, { 2, 3 }, { 3, 1 },
93 { 3, 2 }, { 3, 3 }, { 4, 2 }, { 4, 3 }
94};
95
96/*
97 * number of LSF scalefactor band values
98 * derived from section 2.4.3.2 of ISO/IEC 13818-3
99 */
100static
101unsigned char const nsfb_table[6][3][4] = {
102 { { 6, 5, 5, 5 },
103 { 9, 9, 9, 9 },
104 { 6, 9, 9, 9 } },
105
106 { { 6, 5, 7, 3 },
107 { 9, 9, 12, 6 },
108 { 6, 9, 12, 6 } },
109
110 { { 11, 10, 0, 0 },
111 { 18, 18, 0, 0 },
112 { 15, 18, 0, 0 } },
113
114 { { 7, 7, 7, 0 },
115 { 12, 12, 12, 0 },
116 { 6, 15, 12, 0 } },
117
118 { { 6, 6, 6, 3 },
119 { 12, 9, 9, 6 },
120 { 6, 12, 9, 6 } },
121
122 { { 8, 8, 5, 0 },
123 { 15, 12, 9, 0 },
124 { 6, 18, 9, 0 } }
125};
126
127/*
128 * MPEG-1 scalefactor band widths
129 * derived from Table B.8 of ISO/IEC 11172-3
130 */
131static
132unsigned char const sfb_48000_long[] = {
133 4, 4, 4, 4, 4, 4, 6, 6, 6, 8, 10,
134 12, 16, 18, 22, 28, 34, 40, 46, 54, 54, 192
135};
136
137static
138unsigned char const sfb_44100_long[] = {
139 4, 4, 4, 4, 4, 4, 6, 6, 8, 8, 10,
140 12, 16, 20, 24, 28, 34, 42, 50, 54, 76, 158
141};
142
143static
144unsigned char const sfb_32000_long[] = {
145 4, 4, 4, 4, 4, 4, 6, 6, 8, 10, 12,
146 16, 20, 24, 30, 38, 46, 56, 68, 84, 102, 26
147};
148
149static
150unsigned char const sfb_48000_short[] = {
151 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6,
152 6, 6, 6, 6, 6, 10, 10, 10, 12, 12, 12, 14, 14,
153 14, 16, 16, 16, 20, 20, 20, 26, 26, 26, 66, 66, 66
154};
155
156static
157unsigned char const sfb_44100_short[] = {
158 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6,
159 6, 6, 8, 8, 8, 10, 10, 10, 12, 12, 12, 14, 14,
160 14, 18, 18, 18, 22, 22, 22, 30, 30, 30, 56, 56, 56
161};
162
163static
164unsigned char const sfb_32000_short[] = {
165 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6,
166 6, 6, 8, 8, 8, 12, 12, 12, 16, 16, 16, 20, 20,
167 20, 26, 26, 26, 34, 34, 34, 42, 42, 42, 12, 12, 12
168};
169
170static
171unsigned char const sfb_48000_mixed[] = {
172 /* long */ 4, 4, 4, 4, 4, 4, 6, 6,
173 /* short */ 4, 4, 4, 6, 6, 6, 6, 6, 6, 10,
174 10, 10, 12, 12, 12, 14, 14, 14, 16, 16,
175 16, 20, 20, 20, 26, 26, 26, 66, 66, 66
176};
177
178static
179unsigned char const sfb_44100_mixed[] = {
180 /* long */ 4, 4, 4, 4, 4, 4, 6, 6,
181 /* short */ 4, 4, 4, 6, 6, 6, 8, 8, 8, 10,
182 10, 10, 12, 12, 12, 14, 14, 14, 18, 18,
183 18, 22, 22, 22, 30, 30, 30, 56, 56, 56
184};
185
186static
187unsigned char const sfb_32000_mixed[] = {
188 /* long */ 4, 4, 4, 4, 4, 4, 6, 6,
189 /* short */ 4, 4, 4, 6, 6, 6, 8, 8, 8, 12,
190 12, 12, 16, 16, 16, 20, 20, 20, 26, 26,
191 26, 34, 34, 34, 42, 42, 42, 12, 12, 12
192};
193
194/*
195 * MPEG-2 scalefactor band widths
196 * derived from Table B.2 of ISO/IEC 13818-3
197 */
198static
199unsigned char const sfb_24000_long[] = {
200 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
201 18, 22, 26, 32, 38, 46, 54, 62, 70, 76, 36
202};
203
204static
205unsigned char const sfb_22050_long[] = {
206 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
207 20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54
208};
209
210# define sfb_16000_long sfb_22050_long
211
212static
213unsigned char const sfb_24000_short[] = {
214 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 8,
215 8, 8, 10, 10, 10, 12, 12, 12, 14, 14, 14, 18, 18,
216 18, 24, 24, 24, 32, 32, 32, 44, 44, 44, 12, 12, 12
217};
218
219static
220unsigned char const sfb_22050_short[] = {
221 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 6,
222 6, 6, 8, 8, 8, 10, 10, 10, 14, 14, 14, 18, 18,
223 18, 26, 26, 26, 32, 32, 32, 42, 42, 42, 18, 18, 18
224};
225
226static
227unsigned char const sfb_16000_short[] = {
228 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 8,
229 8, 8, 10, 10, 10, 12, 12, 12, 14, 14, 14, 18, 18,
230 18, 24, 24, 24, 30, 30, 30, 40, 40, 40, 18, 18, 18
231};
232
233static
234unsigned char const sfb_24000_mixed[] = {
235 /* long */ 6, 6, 6, 6, 6, 6,
236 /* short */ 6, 6, 6, 8, 8, 8, 10, 10, 10, 12,
237 12, 12, 14, 14, 14, 18, 18, 18, 24, 24,
238 24, 32, 32, 32, 44, 44, 44, 12, 12, 12
239};
240
241static
242unsigned char const sfb_22050_mixed[] = {
243 /* long */ 6, 6, 6, 6, 6, 6,
244 /* short */ 6, 6, 6, 6, 6, 6, 8, 8, 8, 10,
245 10, 10, 14, 14, 14, 18, 18, 18, 26, 26,
246 26, 32, 32, 32, 42, 42, 42, 18, 18, 18
247};
248
249static
250unsigned char const sfb_16000_mixed[] = {
251 /* long */ 6, 6, 6, 6, 6, 6,
252 /* short */ 6, 6, 6, 8, 8, 8, 10, 10, 10, 12,
253 12, 12, 14, 14, 14, 18, 18, 18, 24, 24,
254 24, 30, 30, 30, 40, 40, 40, 18, 18, 18
255};
256
257/*
258 * MPEG 2.5 scalefactor band widths
259 * derived from public sources
260 */
261# define sfb_12000_long sfb_16000_long
262# define sfb_11025_long sfb_12000_long
263
264static
265unsigned char const sfb_8000_long[] = {
266 12, 12, 12, 12, 12, 12, 16, 20, 24, 28, 32,
267 40, 48, 56, 64, 76, 90, 2, 2, 2, 2, 2
268};
269
270# define sfb_12000_short sfb_16000_short
271# define sfb_11025_short sfb_12000_short
272
273static
274unsigned char const sfb_8000_short[] = {
275 8, 8, 8, 8, 8, 8, 8, 8, 8, 12, 12, 12, 16,
276 16, 16, 20, 20, 20, 24, 24, 24, 28, 28, 28, 36, 36,
277 36, 2, 2, 2, 2, 2, 2, 2, 2, 2, 26, 26, 26
278};
279
280# define sfb_12000_mixed sfb_16000_mixed
281# define sfb_11025_mixed sfb_12000_mixed
282
283/* the 8000 Hz short block scalefactor bands do not break after the first 36
284 frequency lines, so this is probably wrong */
285static
286unsigned char const sfb_8000_mixed[] = {
287 /* long */ 12, 12, 12,
288 /* short */ 4, 4, 4, 8, 8, 8, 12, 12, 12, 16, 16, 16,
289 20, 20, 20, 24, 24, 24, 28, 28, 28, 36, 36, 36,
290 2, 2, 2, 2, 2, 2, 2, 2, 2, 26, 26, 26
291};
292
293static
294struct {
295 unsigned char const *l;
296 unsigned char const *s;
297 unsigned char const *m;
298} const sfbwidth_table[9] = {
299 { sfb_48000_long, sfb_48000_short, sfb_48000_mixed },
300 { sfb_44100_long, sfb_44100_short, sfb_44100_mixed },
301 { sfb_32000_long, sfb_32000_short, sfb_32000_mixed },
302 { sfb_24000_long, sfb_24000_short, sfb_24000_mixed },
303 { sfb_22050_long, sfb_22050_short, sfb_22050_mixed },
304 { sfb_16000_long, sfb_16000_short, sfb_16000_mixed },
305 { sfb_12000_long, sfb_12000_short, sfb_12000_mixed },
306 { sfb_11025_long, sfb_11025_short, sfb_11025_mixed },
307 { sfb_8000_long, sfb_8000_short, sfb_8000_mixed }
308};
309
310/*
311 * scalefactor band preemphasis (used only when preflag is set)
312 * derived from Table B.6 of ISO/IEC 11172-3
313 */
314static
315unsigned char const pretab[22] = {
316 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 3, 2, 0
317};
318
319/*
320 * table for requantization
321 *
322 * rq_table[x].mantissa * 2^(rq_table[x].exponent) = x^(4/3)
323 */
324static
325struct fixedfloat {
326 unsigned long mantissa : 27;
327 unsigned short exponent : 5;
328} const rq_table[8207] = {
329# include "rq_table.dat"
330};
331
332/*
333 * fractional powers of two
334 * used for requantization and joint stereo decoding
335 *
336 * root_table[3 + x] = 2^(x/4)
337 */
338static
339mad_fixed_t const root_table[7] = {
340 MAD_F(0x09837f05) /* 2^(-3/4) == 0.59460355750136 */,
341 MAD_F(0x0b504f33) /* 2^(-2/4) == 0.70710678118655 */,
342 MAD_F(0x0d744fcd) /* 2^(-1/4) == 0.84089641525371 */,
343 MAD_F(0x10000000) /* 2^( 0/4) == 1.00000000000000 */,
344 MAD_F(0x1306fe0a) /* 2^(+1/4) == 1.18920711500272 */,
345 MAD_F(0x16a09e66) /* 2^(+2/4) == 1.41421356237310 */,
346 MAD_F(0x1ae89f99) /* 2^(+3/4) == 1.68179283050743 */
347};
348
349/*
350 * coefficients for aliasing reduction
351 * derived from Table B.9 of ISO/IEC 11172-3
352 *
353 * c[] = { -0.6, -0.535, -0.33, -0.185, -0.095, -0.041, -0.0142, -0.0037 }
354 * cs[i] = 1 / sqrt(1 + c[i]^2)
355 * ca[i] = c[i] / sqrt(1 + c[i]^2)
356 */
357static
358mad_fixed_t const cs[8] = {
359 +MAD_F(0x0db84a81) /* +0.857492926 */, +MAD_F(0x0e1b9d7f) /* +0.881741997 */,
360 +MAD_F(0x0f31adcf) /* +0.949628649 */, +MAD_F(0x0fbba815) /* +0.983314592 */,
361 +MAD_F(0x0feda417) /* +0.995517816 */, +MAD_F(0x0ffc8fc8) /* +0.999160558 */,
362 +MAD_F(0x0fff964c) /* +0.999899195 */, +MAD_F(0x0ffff8d3) /* +0.999993155 */
363};
364
365static
366mad_fixed_t const ca[8] = {
367 -MAD_F(0x083b5fe7) /* -0.514495755 */, -MAD_F(0x078c36d2) /* -0.471731969 */,
368 -MAD_F(0x05039814) /* -0.313377454 */, -MAD_F(0x02e91dd1) /* -0.181913200 */,
369 -MAD_F(0x0183603a) /* -0.094574193 */, -MAD_F(0x00a7cb87) /* -0.040965583 */,
370 -MAD_F(0x003a2847) /* -0.014198569 */, -MAD_F(0x000f27b4) /* -0.003699975 */
371};
372
373/*
374 * IMDCT coefficients for short blocks
375 * derived from section 2.4.3.4.10.2 of ISO/IEC 11172-3
376 *
377 * imdct_s[i/even][k] = cos((PI / 24) * (2 * (i / 2) + 7) * (2 * k + 1))
378 * imdct_s[i /odd][k] = cos((PI / 24) * (2 * (6 + (i-1)/2) + 7) * (2 * k + 1))
379 */
380static
381mad_fixed_t const imdct_s[6][6] = {
382# include "imdct_s.dat"
383};
384
385# if !defined(ASO_IMDCT)
386/*
387 * windowing coefficients for long blocks
388 * derived from section 2.4.3.4.10.3 of ISO/IEC 11172-3
389 *
390 * window_l[i] = sin((PI / 36) * (i + 1/2))
391 */
392static
393mad_fixed_t const window_l[36] = {
394 MAD_F(0x00b2aa3e) /* 0.043619387 */, MAD_F(0x0216a2a2) /* 0.130526192 */,
395 MAD_F(0x03768962) /* 0.216439614 */, MAD_F(0x04cfb0e2) /* 0.300705800 */,
396 MAD_F(0x061f78aa) /* 0.382683432 */, MAD_F(0x07635284) /* 0.461748613 */,
397 MAD_F(0x0898c779) /* 0.537299608 */, MAD_F(0x09bd7ca0) /* 0.608761429 */,
398 MAD_F(0x0acf37ad) /* 0.675590208 */, MAD_F(0x0bcbe352) /* 0.737277337 */,
399 MAD_F(0x0cb19346) /* 0.793353340 */, MAD_F(0x0d7e8807) /* 0.843391446 */,
400
401 MAD_F(0x0e313245) /* 0.887010833 */, MAD_F(0x0ec835e8) /* 0.923879533 */,
402 MAD_F(0x0f426cb5) /* 0.953716951 */, MAD_F(0x0f9ee890) /* 0.976296007 */,
403 MAD_F(0x0fdcf549) /* 0.991444861 */, MAD_F(0x0ffc19fd) /* 0.999048222 */,
404 MAD_F(0x0ffc19fd) /* 0.999048222 */, MAD_F(0x0fdcf549) /* 0.991444861 */,
405 MAD_F(0x0f9ee890) /* 0.976296007 */, MAD_F(0x0f426cb5) /* 0.953716951 */,
406 MAD_F(0x0ec835e8) /* 0.923879533 */, MAD_F(0x0e313245) /* 0.887010833 */,
407
408 MAD_F(0x0d7e8807) /* 0.843391446 */, MAD_F(0x0cb19346) /* 0.793353340 */,
409 MAD_F(0x0bcbe352) /* 0.737277337 */, MAD_F(0x0acf37ad) /* 0.675590208 */,
410 MAD_F(0x09bd7ca0) /* 0.608761429 */, MAD_F(0x0898c779) /* 0.537299608 */,
411 MAD_F(0x07635284) /* 0.461748613 */, MAD_F(0x061f78aa) /* 0.382683432 */,
412 MAD_F(0x04cfb0e2) /* 0.300705800 */, MAD_F(0x03768962) /* 0.216439614 */,
413 MAD_F(0x0216a2a2) /* 0.130526192 */, MAD_F(0x00b2aa3e) /* 0.043619387 */,
414};
415# endif /* ASO_IMDCT */
416
417/*
418 * windowing coefficients for short blocks
419 * derived from section 2.4.3.4.10.3 of ISO/IEC 11172-3
420 *
421 * window_s[i] = sin((PI / 12) * (i + 1/2))
422 */
423static
424mad_fixed_t const window_s[12] = {
425 MAD_F(0x0216a2a2) /* 0.130526192 */, MAD_F(0x061f78aa) /* 0.382683432 */,
426 MAD_F(0x09bd7ca0) /* 0.608761429 */, MAD_F(0x0cb19346) /* 0.793353340 */,
427 MAD_F(0x0ec835e8) /* 0.923879533 */, MAD_F(0x0fdcf549) /* 0.991444861 */,
428 MAD_F(0x0fdcf549) /* 0.991444861 */, MAD_F(0x0ec835e8) /* 0.923879533 */,
429 MAD_F(0x0cb19346) /* 0.793353340 */, MAD_F(0x09bd7ca0) /* 0.608761429 */,
430 MAD_F(0x061f78aa) /* 0.382683432 */, MAD_F(0x0216a2a2) /* 0.130526192 */,
431};
432
433/*
434 * coefficients for intensity stereo processing
435 * derived from section 2.4.3.4.9.3 of ISO/IEC 11172-3
436 *
437 * is_ratio[i] = tan(i * (PI / 12))
438 * is_table[i] = is_ratio[i] / (1 + is_ratio[i])
439 */
440static
441mad_fixed_t const is_table[7] = {
442 MAD_F(0x00000000) /* 0.000000000 */,
443 MAD_F(0x0361962f) /* 0.211324865 */,
444 MAD_F(0x05db3d74) /* 0.366025404 */,
445 MAD_F(0x08000000) /* 0.500000000 */,
446 MAD_F(0x0a24c28c) /* 0.633974596 */,
447 MAD_F(0x0c9e69d1) /* 0.788675135 */,
448 MAD_F(0x10000000) /* 1.000000000 */
449};
450
451/*
452 * coefficients for LSF intensity stereo processing
453 * derived from section 2.4.3.2 of ISO/IEC 13818-3
454 *
455 * is_lsf_table[0][i] = (1 / sqrt(sqrt(2)))^(i + 1)
456 * is_lsf_table[1][i] = (1 / sqrt(2))^(i + 1)
457 */
458static
459mad_fixed_t const is_lsf_table[2][15] = {
460 {
461 MAD_F(0x0d744fcd) /* 0.840896415 */,
462 MAD_F(0x0b504f33) /* 0.707106781 */,
463 MAD_F(0x09837f05) /* 0.594603558 */,
464 MAD_F(0x08000000) /* 0.500000000 */,
465 MAD_F(0x06ba27e6) /* 0.420448208 */,
466 MAD_F(0x05a8279a) /* 0.353553391 */,
467 MAD_F(0x04c1bf83) /* 0.297301779 */,
468 MAD_F(0x04000000) /* 0.250000000 */,
469 MAD_F(0x035d13f3) /* 0.210224104 */,
470 MAD_F(0x02d413cd) /* 0.176776695 */,
471 MAD_F(0x0260dfc1) /* 0.148650889 */,
472 MAD_F(0x02000000) /* 0.125000000 */,
473 MAD_F(0x01ae89fa) /* 0.105112052 */,
474 MAD_F(0x016a09e6) /* 0.088388348 */,
475 MAD_F(0x01306fe1) /* 0.074325445 */
476 }, {
477 MAD_F(0x0b504f33) /* 0.707106781 */,
478 MAD_F(0x08000000) /* 0.500000000 */,
479 MAD_F(0x05a8279a) /* 0.353553391 */,
480 MAD_F(0x04000000) /* 0.250000000 */,
481 MAD_F(0x02d413cd) /* 0.176776695 */,
482 MAD_F(0x02000000) /* 0.125000000 */,
483 MAD_F(0x016a09e6) /* 0.088388348 */,
484 MAD_F(0x01000000) /* 0.062500000 */,
485 MAD_F(0x00b504f3) /* 0.044194174 */,
486 MAD_F(0x00800000) /* 0.031250000 */,
487 MAD_F(0x005a827a) /* 0.022097087 */,
488 MAD_F(0x00400000) /* 0.015625000 */,
489 MAD_F(0x002d413d) /* 0.011048543 */,
490 MAD_F(0x00200000) /* 0.007812500 */,
491 MAD_F(0x0016a09e) /* 0.005524272 */
492 }
493};
494
495/*
496 * NAME:III_sideinfo()
497 * DESCRIPTION:decode frame side information from a bitstream
498 */
499static
500enum mad_error III_sideinfo(struct mad_bitptr *ptr, unsigned int nch,
501 int lsf, struct sideinfo *si,
502 unsigned int *data_bitlen,
503 unsigned int *priv_bitlen)
504{
505 unsigned int ngr, gr, ch, i;
506 enum mad_error result = 0;
507
508 *data_bitlen = 0;
509 *priv_bitlen = lsf ? ((nch == 1) ? 1 : 2) : ((nch == 1) ? 5 : 3);
510
511 si->main_data_begin = mad_bit_read(ptr, lsf ? 8 : 9);
512 si->private_bits = mad_bit_read(ptr, *priv_bitlen);
513
514 ngr = 1;
515 if (!lsf) {
516 ngr = 2;
517
518 for (ch = 0; ch < nch; ++ch)
519 si->scfsi[ch] = mad_bit_read(ptr, 4);
520 }
521
522 for (gr = 0; gr < ngr; ++gr) {
523 struct granule *granule = &si->gr[gr];
524
525 for (ch = 0; ch < nch; ++ch) {
526 struct channel *channel = &granule->ch[ch];
527
528 channel->part2_3_length = mad_bit_read(ptr, 12);
529 channel->big_values = mad_bit_read(ptr, 9);
530 channel->global_gain = mad_bit_read(ptr, 8);
531 channel->scalefac_compress = mad_bit_read(ptr, lsf ? 9 : 4);
532
533 *data_bitlen += channel->part2_3_length;
534
535 if (channel->big_values > 288 && result == 0)
536 result = MAD_ERROR_BADBIGVALUES;
537
538 channel->flags = 0;
539
540 /* window_switching_flag */
541 if (mad_bit_read(ptr, 1)) {
542 channel->block_type = mad_bit_read(ptr, 2);
543
544 if (channel->block_type == 0 && result == 0)
545 result = MAD_ERROR_BADBLOCKTYPE;
546
547 if (!lsf && channel->block_type == 2 && si->scfsi[ch] && result == 0)
548 result = MAD_ERROR_BADSCFSI;
549
550 channel->region0_count = 7;
551 channel->region1_count = 36;
552
553 if (mad_bit_read(ptr, 1))
554 channel->flags |= mixed_block_flag;
555 else if (channel->block_type == 2)
556 channel->region0_count = 8;
557
558 for (i = 0; i < 2; ++i)
559 channel->table_select[i] = mad_bit_read(ptr, 5);
560
561# if defined(DEBUG)
562 channel->table_select[2] = 4; /* not used */
563# endif
564
565 for (i = 0; i < 3; ++i)
566 channel->subblock_gain[i] = mad_bit_read(ptr, 3);
567 }
568 else {
569 channel->block_type = 0;
570
571 for (i = 0; i < 3; ++i)
572 channel->table_select[i] = mad_bit_read(ptr, 5);
573
574 channel->region0_count = mad_bit_read(ptr, 4);
575 channel->region1_count = mad_bit_read(ptr, 3);
576 }
577
578 /* [preflag,] scalefac_scale, count1table_select */
579 channel->flags |= mad_bit_read(ptr, lsf ? 2 : 3);
580 }
581 }
582
583 return result;
584}
585
586/*
587 * NAME:III_scalefactors_lsf()
588 * DESCRIPTION:decode channel scalefactors for LSF from a bitstream
589 */
590static
591unsigned int III_scalefactors_lsf(struct mad_bitptr *ptr,
592 struct channel *channel,
593 struct channel *gr1ch, int mode_extension)
594{
595 struct mad_bitptr start;
596 unsigned int scalefac_compress, index, slen[4], part, n, i;
597 unsigned char const *nsfb;
598
599 start = *ptr;
600
601 scalefac_compress = channel->scalefac_compress;
602 index = (channel->block_type == 2) ?
603 ((channel->flags & mixed_block_flag) ? 2 : 1) : 0;
604
605 if (!((mode_extension & 0x1) && gr1ch)) {
606 if (scalefac_compress < 400) {
607 slen[0] = (scalefac_compress >> 4) / 5;
608 slen[1] = (scalefac_compress >> 4) % 5;
609 slen[2] = (scalefac_compress % 16) >> 2;
610 slen[3] = scalefac_compress % 4;
611
612 nsfb = nsfb_table[0][index];
613 }
614 else if (scalefac_compress < 500) {
615 scalefac_compress -= 400;
616
617 slen[0] = (scalefac_compress >> 2) / 5;
618 slen[1] = (scalefac_compress >> 2) % 5;
619 slen[2] = scalefac_compress % 4;
620 slen[3] = 0;
621
622 nsfb = nsfb_table[1][index];
623 }
624 else {
625 scalefac_compress -= 500;
626
627 slen[0] = scalefac_compress / 3;
628 slen[1] = scalefac_compress % 3;
629 slen[2] = 0;
630 slen[3] = 0;
631
632 channel->flags |= preflag;
633
634 nsfb = nsfb_table[2][index];
635 }
636
637 n = 0;
638 for (part = 0; part < 4; ++part) {
639 for (i = 0; i < nsfb[part]; ++i)
640 channel->scalefac[n++] = mad_bit_read(ptr, slen[part]);
641 }
642
643 while (n < 39)
644 channel->scalefac[n++] = 0;
645 }
646 else { /* (mode_extension & 0x1) && gr1ch (i.e. ch == 1) */
647 scalefac_compress >>= 1;
648
649 if (scalefac_compress < 180) {
650 slen[0] = scalefac_compress / 36;
651 slen[1] = (scalefac_compress % 36) / 6;
652 slen[2] = (scalefac_compress % 36) % 6;
653 slen[3] = 0;
654
655 nsfb = nsfb_table[3][index];
656 }
657 else if (scalefac_compress < 244) {
658 scalefac_compress -= 180;
659
660 slen[0] = (scalefac_compress % 64) >> 4;
661 slen[1] = (scalefac_compress % 16) >> 2;
662 slen[2] = scalefac_compress % 4;
663 slen[3] = 0;
664
665 nsfb = nsfb_table[4][index];
666 }
667 else {
668 scalefac_compress -= 244;
669
670 slen[0] = scalefac_compress / 3;
671 slen[1] = scalefac_compress % 3;
672 slen[2] = 0;
673 slen[3] = 0;
674
675 nsfb = nsfb_table[5][index];
676 }
677
678 n = 0;
679 for (part = 0; part < 4; ++part) {
680 unsigned int max, is_pos;
681
682 max = (1 << slen[part]) - 1;
683
684 for (i = 0; i < nsfb[part]; ++i) {
685 is_pos = mad_bit_read(ptr, slen[part]);
686
687 channel->scalefac[n] = is_pos;
688 gr1ch->scalefac[n++] = (is_pos == max);
689 }
690 }
691
692 while (n < 39) {
693 channel->scalefac[n] = 0;
694 gr1ch->scalefac[n++] = 0; /* apparently not illegal */
695 }
696 }
697
698 return mad_bit_length(&start, ptr);
699}
700
701/*
702 * NAME:III_scalefactors()
703 * DESCRIPTION:decode channel scalefactors of one granule from a bitstream
704 */
705static
706unsigned int III_scalefactors(struct mad_bitptr *ptr, struct channel *channel,
707 struct channel const *gr0ch, unsigned int scfsi)
708{
709 struct mad_bitptr start;
710 unsigned int slen1, slen2, sfbi;
711
712 start = *ptr;
713
714 slen1 = sflen_table[channel->scalefac_compress].slen1;
715 slen2 = sflen_table[channel->scalefac_compress].slen2;
716
717 if (channel->block_type == 2) {
718 unsigned int nsfb;
719
720 sfbi = 0;
721
722 nsfb = (channel->flags & mixed_block_flag) ? 8 + 3 * 3 : 6 * 3;
723 while (nsfb--)
724 channel->scalefac[sfbi++] = mad_bit_read(ptr, slen1);
725
726 nsfb = 6 * 3;
727 while (nsfb--)
728 channel->scalefac[sfbi++] = mad_bit_read(ptr, slen2);
729
730 nsfb = 1 * 3;
731 while (nsfb--)
732 channel->scalefac[sfbi++] = 0;
733 }
734 else { /* channel->block_type != 2 */
735 if (scfsi & 0x8) {
736 for (sfbi = 0; sfbi < 6; ++sfbi)
737 channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
738 }
739 else {
740 for (sfbi = 0; sfbi < 6; ++sfbi)
741 channel->scalefac[sfbi] = mad_bit_read(ptr, slen1);
742 }
743
744 if (scfsi & 0x4) {
745 for (sfbi = 6; sfbi < 11; ++sfbi)
746 channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
747 }
748 else {
749 for (sfbi = 6; sfbi < 11; ++sfbi)
750 channel->scalefac[sfbi] = mad_bit_read(ptr, slen1);
751 }
752
753 if (scfsi & 0x2) {
754 for (sfbi = 11; sfbi < 16; ++sfbi)
755 channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
756 }
757 else {
758 for (sfbi = 11; sfbi < 16; ++sfbi)
759 channel->scalefac[sfbi] = mad_bit_read(ptr, slen2);
760 }
761
762 if (scfsi & 0x1) {
763 for (sfbi = 16; sfbi < 21; ++sfbi)
764 channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
765 }
766 else {
767 for (sfbi = 16; sfbi < 21; ++sfbi)
768 channel->scalefac[sfbi] = mad_bit_read(ptr, slen2);
769 }
770
771 channel->scalefac[21] = 0;
772 }
773
774 return mad_bit_length(&start, ptr);
775}
776
777/*
778 * NAME:III_exponents()
779 * DESCRIPTION:calculate scalefactor exponents
780 */
781static
782void III_exponents(struct channel const *channel,
783 unsigned char const *sfbwidth, signed int exponents[39])
784{
785 signed int gain;
786 unsigned int scalefac_multiplier, sfbi;
787
788 gain = (signed int) channel->global_gain - 210;
789 scalefac_multiplier = (channel->flags & scalefac_scale) ? 2 : 1;
790
791 if (channel->block_type == 2) {
792 unsigned int l;
793 signed int gain0, gain1, gain2;
794
795 sfbi = l = 0;
796
797 if (channel->flags & mixed_block_flag) {
798 unsigned int premask;
799
800 premask = (channel->flags & preflag) ? ~0 : 0;
801
802 /* long block subbands 0-1 */
803
804 while (l < 36) {
805 exponents[sfbi] = gain -
806 (signed int) ((channel->scalefac[sfbi] + (pretab[sfbi] & premask)) <<
807 scalefac_multiplier);
808
809 l += sfbwidth[sfbi++];
810 }
811 }
812
813 /* this is probably wrong for 8000 Hz short/mixed blocks */
814
815 gain0 = gain - 8 * (signed int) channel->subblock_gain[0];
816 gain1 = gain - 8 * (signed int) channel->subblock_gain[1];
817 gain2 = gain - 8 * (signed int) channel->subblock_gain[2];
818
819 while (l < 576) {
820 exponents[sfbi + 0] = gain0 -
821 (signed int) (channel->scalefac[sfbi + 0] << scalefac_multiplier);
822 exponents[sfbi + 1] = gain1 -
823 (signed int) (channel->scalefac[sfbi + 1] << scalefac_multiplier);
824 exponents[sfbi + 2] = gain2 -
825 (signed int) (channel->scalefac[sfbi + 2] << scalefac_multiplier);
826
827 l += 3 * sfbwidth[sfbi];
828 sfbi += 3;
829 }
830 }
831 else { /* channel->block_type != 2 */
832 if (channel->flags & preflag) {
833 for (sfbi = 0; sfbi < 22; ++sfbi) {
834 exponents[sfbi] = gain -
835 (signed int) ((channel->scalefac[sfbi] + pretab[sfbi]) <<
836 scalefac_multiplier);
837 }
838 }
839 else {
840 for (sfbi = 0; sfbi < 22; ++sfbi) {
841 exponents[sfbi] = gain -
842 (signed int) (channel->scalefac[sfbi] << scalefac_multiplier);
843 }
844 }
845 }
846}
847
848/*
849 * NAME:III_requantize()
850 * DESCRIPTION:requantize one (positive) value
851 */
852static
853mad_fixed_t III_requantize(unsigned int value, signed int exp)
854{
855 mad_fixed_t requantized;
856 signed int frac;
857 struct fixedfloat const *power;
858
859 /*
860 * long blocks:
861 * xr[i] = sign(is[i]) * abs(is[i])^(4/3) *
862 * 2^((1/4) * (global_gain - 210)) *
863 * 2^-(scalefac_multiplier *
864 * (scalefac_l[sfb] + preflag * pretab[sfb]))
865 *
866 * short blocks:
867 * xr[i] = sign(is[i]) * abs(is[i])^(4/3) *
868 * 2^((1/4) * (global_gain - 210 - 8 * subblock_gain[w])) *
869 * 2^-(scalefac_multiplier * scalefac_s[sfb][w])
870 *
871 * where:
872 * scalefac_multiplier = (scalefac_scale + 1) / 2
873 */
874
875 frac = exp % 4;
876 exp /= 4;
877
878 power = &rq_table[value];
879 requantized = power->mantissa;
880 exp += power->exponent;
881
882 if (exp < 0) {
883 if (-exp >= sizeof(mad_fixed_t) * CHAR_BIT) {
884 /* underflow */
885 requantized = 0;
886 }
887 else
888 requantized >>= -exp;
889 }
890 else {
891 if (exp >= 5) {
892 /* overflow */
893# if defined(DEBUG)
894 fprintf(stderr, "requantize overflow (%f * 2^%d)\n",
895 mad_f_todouble(requantized), exp);
896# endif
897 requantized = MAD_F_MAX;
898 }
899 else
900 requantized <<= exp;
901 }
902
903 return frac ? mad_f_mul(requantized, root_table[3 + frac]) : requantized;
904}
905
906/* we must take care that sz >= bits and sz < sizeof(long) lest bits == 0 */
907 # define MASK(cache, sz, bits)\
908 (((cache) >> ((sz) - (bits))) & ((1 << (bits)) - 1))
909# define MASK1BIT(cache, sz) \
910 ((cache) & (1 << ((sz) - 1)))
911
912/*
913 * NAME:III_huffdecode()
914 * DESCRIPTION:decode Huffman code words of one channel of one granule
915 */
916static
917enum mad_error III_huffdecode(struct mad_bitptr *ptr, mad_fixed_t xr[576],
918 struct channel *channel,
919 unsigned char const *sfbwidth,
920 unsigned int part2_length)
921{
922 signed int exponents[39], exp;
923 signed int const *expptr;
924 struct mad_bitptr peek;
925 signed int bits_left, cachesz;
926 register mad_fixed_t *xrptr;
927 mad_fixed_t const *sfbound;
928 register unsigned long bitcache;
929
930 bits_left = (signed) channel->part2_3_length - (signed) part2_length;
931 if (bits_left < 0)
932 return MAD_ERROR_BADPART3LEN;
933
934 III_exponents(channel, sfbwidth, exponents);
935
936 peek = *ptr;
937 mad_bit_skip(ptr, bits_left);
938
939 /* align bit reads to byte boundaries */
940 cachesz = mad_bit_bitsleft(&peek);
941 cachesz += ((32 - 1 - 24) + (24 - cachesz)) & ~7;
942
943 bitcache = mad_bit_read(&peek, cachesz);
944 bits_left -= cachesz;
945
946 xrptr = &xr[0];
947
948 /* big_values */
949 {
950 unsigned int region, rcount;
951 struct hufftable const *entry;
952 union huffpair const *table;
953 unsigned int linbits, startbits, big_values, reqhits;
954 mad_fixed_t reqcache[16];
955
956 sfbound = xrptr + *sfbwidth++;
957 rcount = channel->region0_count + 1;
958
959 entry = &mad_huff_pair_table[channel->table_select[region = 0]];
960 table = entry->table;
961 linbits = entry->linbits;
962 startbits = entry->startbits;
963
964 if (table == 0)
965 return MAD_ERROR_BADHUFFTABLE;
966
967 expptr = &exponents[0];
968 exp = *expptr++;
969 reqhits = 0;
970
971 big_values = channel->big_values;
972
973 while (big_values-- && cachesz + bits_left > 0) {
974 union huffpair const *pair;
975 unsigned int clumpsz, value;
976 register mad_fixed_t requantized;
977
978 if (xrptr == sfbound) {
979 sfbound += *sfbwidth++;
980
981 /* change table if region boundary */
982
983 if (--rcount == 0) {
984 if (region == 0)
985 rcount = channel->region1_count + 1;
986 else
987 rcount = 0; /* all remaining */
988
989 entry = &mad_huff_pair_table[channel->table_select[++region]];
990 table = entry->table;
991 linbits = entry->linbits;
992 startbits = entry->startbits;
993
994 if (table == 0)
995 return MAD_ERROR_BADHUFFTABLE;
996 }
997
998 if (exp != *expptr) {
999 exp = *expptr;
1000 reqhits = 0;
1001 }
1002
1003 ++expptr;
1004 }
1005
1006 if (cachesz < 21) {
1007 unsigned int bits;
1008
1009 bits = ((32 - 1 - 21) + (21 - cachesz)) & ~7;
1010 bitcache = (bitcache << bits) | mad_bit_read(&peek, bits);
1011 cachesz += bits;
1012 bits_left -= bits;
1013 }
1014
1015 /* hcod (0..19) */
1016
1017 clumpsz = startbits;
1018 pair = &table[MASK(bitcache, cachesz, clumpsz)];
1019
1020 while (!pair->final) {
1021 cachesz -= clumpsz;
1022
1023 clumpsz = pair->ptr.bits;
1024 pair = &table[pair->ptr.offset + MASK(bitcache, cachesz, clumpsz)];
1025 }
1026
1027 cachesz -= pair->value.hlen;
1028
1029 if (linbits) {
1030 /* x (0..14) */
1031
1032 value = pair->value.x;
1033
1034 switch (value) {
1035 case 0:
1036 xrptr[0] = 0;
1037 break;
1038
1039 case 15:
1040 if (cachesz < linbits + 2) {
1041 bitcache = (bitcache << 16) | mad_bit_read(&peek, 16);
1042 cachesz += 16;
1043 bits_left -= 16;
1044 }
1045
1046 value += MASK(bitcache, cachesz, linbits);
1047 cachesz -= linbits;
1048
1049 requantized = III_requantize(value, exp);
1050 goto x_final;
1051
1052 default:
1053 if (reqhits & (1 << value))
1054 requantized = reqcache[value];
1055 else {
1056 reqhits |= (1 << value);
1057 requantized = reqcache[value] = III_requantize(value, exp);
1058 }
1059
1060 x_final:
1061 xrptr[0] = MASK1BIT(bitcache, cachesz--) ?
1062 -requantized : requantized;
1063 }
1064
1065 /* y (0..14) */
1066
1067 value = pair->value.y;
1068
1069 switch (value) {
1070 case 0:
1071 xrptr[1] = 0;
1072 break;
1073
1074 case 15:
1075 if (cachesz < linbits + 1) {
1076 bitcache = (bitcache << 16) | mad_bit_read(&peek, 16);
1077 cachesz += 16;
1078 bits_left -= 16;
1079 }
1080
1081 value += MASK(bitcache, cachesz, linbits);
1082 cachesz -= linbits;
1083
1084 requantized = III_requantize(value, exp);
1085 goto y_final;
1086
1087 default:
1088 if (reqhits & (1 << value))
1089 requantized = reqcache[value];
1090 else {
1091 reqhits |= (1 << value);
1092 requantized = reqcache[value] = III_requantize(value, exp);
1093 }
1094
1095 y_final:
1096 xrptr[1] = MASK1BIT(bitcache, cachesz--) ?
1097 -requantized : requantized;
1098 }
1099 }
1100 else {
1101 /* x (0..1) */
1102
1103 value = pair->value.x;
1104
1105 if (value == 0)
1106 xrptr[0] = 0;
1107 else {
1108 if (reqhits & (1 << value))
1109 requantized = reqcache[value];
1110 else {
1111 reqhits |= (1 << value);
1112 requantized = reqcache[value] = III_requantize(value, exp);
1113 }
1114
1115 xrptr[0] = MASK1BIT(bitcache, cachesz--) ?
1116 -requantized : requantized;
1117 }
1118
1119 /* y (0..1) */
1120
1121 value = pair->value.y;
1122
1123 if (value == 0)
1124 xrptr[1] = 0;
1125 else {
1126 if (reqhits & (1 << value))
1127 requantized = reqcache[value];
1128 else {
1129 reqhits |= (1 << value);
1130 requantized = reqcache[value] = III_requantize(value, exp);
1131 }
1132
1133 xrptr[1] = MASK1BIT(bitcache, cachesz--) ?
1134 -requantized : requantized;
1135 }
1136 }
1137
1138 xrptr += 2;
1139 }
1140 }
1141
1142 if (cachesz + bits_left < 0)
1143 return MAD_ERROR_BADHUFFDATA; /* big_values overrun */
1144
1145 /* count1 */
1146 {
1147 union huffquad const *table;
1148 register mad_fixed_t requantized;
1149
1150 table = mad_huff_quad_table[channel->flags & count1table_select];
1151
1152 requantized = III_requantize(1, exp);
1153
1154 while (cachesz + bits_left > 0 && xrptr <= &xr[572]) {
1155 union huffquad const *quad;
1156
1157 /* hcod (1..6) */
1158
1159 if (cachesz < 10) {
1160 bitcache = (bitcache << 16) | mad_bit_read(&peek, 16);
1161 cachesz += 16;
1162 bits_left -= 16;
1163 }
1164
1165 quad = &table[MASK(bitcache, cachesz, 4)];
1166
1167 /* quad tables guaranteed to have at most one extra lookup */
1168 if (!quad->final) {
1169 cachesz -= 4;
1170
1171 quad = &table[quad->ptr.offset +
1172 MASK(bitcache, cachesz, quad->ptr.bits)];
1173 }
1174
1175 cachesz -= quad->value.hlen;
1176
1177 if (xrptr == sfbound) {
1178 sfbound += *sfbwidth++;
1179
1180 if (exp != *expptr) {
1181 exp = *expptr;
1182 requantized = III_requantize(1, exp);
1183 }
1184
1185 ++expptr;
1186 }
1187
1188 /* v (0..1) */
1189
1190 xrptr[0] = quad->value.v ?
1191 (MASK1BIT(bitcache, cachesz--) ? -requantized : requantized) : 0;
1192
1193 /* w (0..1) */
1194
1195 xrptr[1] = quad->value.w ?
1196 (MASK1BIT(bitcache, cachesz--) ? -requantized : requantized) : 0;
1197
1198 xrptr += 2;
1199
1200 if (xrptr == sfbound) {
1201 sfbound += *sfbwidth++;
1202
1203 if (exp != *expptr) {
1204 exp = *expptr;
1205 requantized = III_requantize(1, exp);
1206 }
1207
1208 ++expptr;
1209 }
1210
1211 /* x (0..1) */
1212
1213 xrptr[0] = quad->value.x ?
1214 (MASK1BIT(bitcache, cachesz--) ? -requantized : requantized) : 0;
1215
1216 /* y (0..1) */
1217
1218 xrptr[1] = quad->value.y ?
1219 (MASK1BIT(bitcache, cachesz--) ? -requantized : requantized) : 0;
1220
1221 xrptr += 2;
1222 }
1223
1224 if (cachesz + bits_left < 0) {
1225# if 0 && defined(DEBUG)
1226 fprintf(stderr, "huffman count1 overrun (%d bits)\n",
1227 -(cachesz + bits_left));
1228# endif
1229
1230 /* technically the bitstream is misformatted, but apparently
1231 some encoders are just a bit sloppy with stuffing bits */
1232
1233 xrptr -= 4;
1234 }
1235 }
1236
1237 assert(-bits_left <= MAD_BUFFER_GUARD * CHAR_BIT);
1238
1239# if 0 && defined(DEBUG)
1240 if (bits_left < 0)
1241 fprintf(stderr, "read %d bits too many\n", -bits_left);
1242 else if (cachesz + bits_left > 0)
1243 fprintf(stderr, "%d stuffing bits\n", cachesz + bits_left);
1244# endif
1245
1246 /* rzero */
1247 while (xrptr < &xr[576]) {
1248 xrptr[0] = 0;
1249 xrptr[1] = 0;
1250
1251 xrptr += 2;
1252 }
1253
1254 return 0;
1255}
1256
1257# undef MASK
1258# undef MASK1BIT
1259
1260/*
1261 * NAME:III_reorder()
1262 * DESCRIPTION:reorder frequency lines of a short block into subband order
1263 */
1264static
1265void III_reorder(mad_fixed_t xr[576], struct channel const *channel,
1266 unsigned char const sfbwidth[39])
1267{
1268 mad_fixed_t tmp[32][3][6];
1269 unsigned int sb, l, sfbi, f, w, sbw[3], sw[3];
1270
1271 /* this is probably wrong for 8000 Hz mixed blocks */
1272
1273 if (channel->flags & mixed_block_flag)
1274 sb = 2, sfbi = 3 * 3;
1275 else
1276 sb = 0, sfbi = 0;
1277
1278 for (w = 0; w < 3; ++w) {
1279 sbw[w] = sb;
1280 sw[w] = 0;
1281 }
1282
1283 f = sfbwidth[sfbi];
1284 w = 0;
1285
1286 for (l = 18 * sb; l < 576; ++l) {
1287 tmp[sbw[w]][w][sw[w]++] = xr[l];
1288
1289 if (sw[w] == 6) {
1290 sw[w] = 0;
1291 ++sbw[w];
1292 }
1293
1294 if (--f == 0) {
1295 if (++w == 3)
1296 w = 0;
1297
1298 f = sfbwidth[++sfbi];
1299 }
1300 }
1301
1302 memcpy(&xr[18 * sb], &tmp[sb], (576 - 18 * sb) * sizeof(mad_fixed_t));
1303}
1304
1305/*
1306 * NAME:III_stereo()
1307 * DESCRIPTION:perform joint stereo processing on a granule
1308 */
1309static
1310enum mad_error III_stereo(mad_fixed_t xr[2][576],
1311 struct granule const *granule,
1312 struct mad_header *header,
1313 unsigned char const *sfbwidth)
1314{
1315 short modes[39];
1316 unsigned int sfbi, l, n, i;
1317
1318 enum {
1319 i_stereo = 0x1,
1320 ms_stereo = 0x2
1321 };
1322
1323 if (granule->ch[0].block_type !=
1324 granule->ch[1].block_type ||
1325 (granule->ch[0].flags & mixed_block_flag) !=
1326 (granule->ch[1].flags & mixed_block_flag))
1327 return MAD_ERROR_BADSTEREO;
1328
1329 for (i = 0; i < 39; ++i)
1330 modes[i] = header->mode_extension;
1331
1332 /* intensity stereo */
1333
1334 if (header->mode_extension & i_stereo) {
1335 struct channel const *right_ch = &granule->ch[1];
1336 mad_fixed_t const *right_xr = xr[1];
1337 unsigned int is_pos;
1338
1339 header->flags |= MAD_FLAG_I_STEREO;
1340
1341 /* first determine which scalefactor bands are to be processed */
1342
1343 if (right_ch->block_type == 2) {
1344 unsigned int lower, start, max, bound[3], w;
1345
1346 lower = start = max = bound[0] = bound[1] = bound[2] = 0;
1347
1348 sfbi = l = 0;
1349
1350 if (right_ch->flags & mixed_block_flag) {
1351 while (l < 36) {
1352 n = sfbwidth[sfbi++];
1353
1354 for (i = 0; i < n; ++i) {
1355 if (right_xr[i]) {
1356 lower = sfbi;
1357 break;
1358 }
1359 }
1360
1361 right_xr += n;
1362 l += n;
1363 }
1364
1365 start = sfbi;
1366 }
1367
1368 w = 0;
1369 while (l < 576) {
1370 n = sfbwidth[sfbi++];
1371
1372 for (i = 0; i < n; ++i) {
1373 if (right_xr[i]) {
1374 max = bound[w] = sfbi;
1375 break;
1376 }
1377 }
1378
1379 right_xr += n;
1380 l += n;
1381 w = (w + 1) % 3;
1382 }
1383
1384 if (max)
1385 lower = start;
1386
1387 /* long blocks */
1388
1389 for (i = 0; i < lower; ++i)
1390 modes[i] = header->mode_extension & ~i_stereo;
1391
1392 /* short blocks */
1393
1394 w = 0;
1395 for (i = start; i < max; ++i) {
1396 if (i < bound[w])
1397 modes[i] = header->mode_extension & ~i_stereo;
1398
1399 w = (w + 1) % 3;
1400 }
1401 }
1402 else { /* right_ch->block_type != 2 */
1403 unsigned int bound;
1404
1405 bound = 0;
1406 for (sfbi = l = 0; l < 576; l += n) {
1407 n = sfbwidth[sfbi++];
1408
1409 for (i = 0; i < n; ++i) {
1410 if (right_xr[i]) {
1411 bound = sfbi;
1412 break;
1413 }
1414 }
1415
1416 right_xr += n;
1417 }
1418
1419 for (i = 0; i < bound; ++i)
1420 modes[i] = header->mode_extension & ~i_stereo;
1421 }
1422
1423 /* now do the actual processing */
1424
1425 if (header->flags & MAD_FLAG_LSF_EXT) {
1426 unsigned char const *illegal_pos = granule[1].ch[1].scalefac;
1427 mad_fixed_t const *lsf_scale;
1428
1429 /* intensity_scale */
1430 lsf_scale = is_lsf_table[right_ch->scalefac_compress & 0x1];
1431
1432 for (sfbi = l = 0; l < 576; ++sfbi, l += n) {
1433 n = sfbwidth[sfbi];
1434
1435 if (!(modes[sfbi] & i_stereo))
1436 continue;
1437
1438 if (illegal_pos[sfbi]) {
1439 modes[sfbi] &= ~i_stereo;
1440 continue;
1441 }
1442
1443 is_pos = right_ch->scalefac[sfbi];
1444
1445 for (i = 0; i < n; ++i) {
1446 register mad_fixed_t left;
1447
1448 left = xr[0][l + i];
1449
1450 if (is_pos == 0)
1451 xr[1][l + i] = left;
1452 else {
1453 register mad_fixed_t opposite;
1454
1455 opposite = mad_f_mul(left, lsf_scale[(is_pos - 1) / 2]);
1456
1457 if (is_pos & 1) {
1458 xr[0][l + i] = opposite;
1459 xr[1][l + i] = left;
1460 }
1461 else
1462 xr[1][l + i] = opposite;
1463 }
1464 }
1465 }
1466 }
1467 else { /* !(header->flags & MAD_FLAG_LSF_EXT) */
1468 for (sfbi = l = 0; l < 576; ++sfbi, l += n) {
1469 n = sfbwidth[sfbi];
1470
1471 if (!(modes[sfbi] & i_stereo))
1472 continue;
1473
1474 is_pos = right_ch->scalefac[sfbi];
1475
1476 if (is_pos >= 7) { /* illegal intensity position */
1477 modes[sfbi] &= ~i_stereo;
1478 continue;
1479 }
1480
1481 for (i = 0; i < n; ++i) {
1482 register mad_fixed_t left;
1483
1484 left = xr[0][l + i];
1485
1486 xr[0][l + i] = mad_f_mul(left, is_table[ is_pos]);
1487 xr[1][l + i] = mad_f_mul(left, is_table[6 - is_pos]);
1488 }
1489 }
1490 }
1491 }
1492
1493 /* middle/side stereo */
1494
1495 if (header->mode_extension & ms_stereo) {
1496 register mad_fixed_t invsqrt2;
1497
1498 header->flags |= MAD_FLAG_MS_STEREO;
1499
1500 invsqrt2 = root_table[3 + -2];
1501
1502 for (sfbi = l = 0; l < 576; ++sfbi, l += n) {
1503 n = sfbwidth[sfbi];
1504
1505 if (modes[sfbi] != ms_stereo)
1506 continue;
1507
1508 for (i = 0; i < n; ++i) {
1509 register mad_fixed_t m, s;
1510
1511 m = xr[0][l + i];
1512 s = xr[1][l + i];
1513
1514 xr[0][l + i] = mad_f_mul(m + s, invsqrt2); /* l = (m + s) / sqrt(2) */
1515 xr[1][l + i] = mad_f_mul(m - s, invsqrt2); /* r = (m - s) / sqrt(2) */
1516 }
1517 }
1518 }
1519
1520 return 0;
1521}
1522
1523/*
1524 * NAME:III_aliasreduce()
1525 * DESCRIPTION:perform frequency line alias reduction
1526 */
1527static
1528void III_aliasreduce(mad_fixed_t xr[576], int lines)
1529{
1530 mad_fixed_t const *bound;
1531 int i;
1532
1533 bound = &xr[lines];
1534 for (xr += 18; xr < bound; xr += 18) {
1535 for (i = 0; i < 8; ++i) {
1536 register mad_fixed_t *aptr, *bptr, a, b;
1537 register mad_fixed64hi_t hi;
1538 register mad_fixed64lo_t lo;
1539
1540 aptr = &xr[-1 - i];
1541 bptr = &xr[ i];
1542
1543 a = *aptr;
1544 b = *bptr;
1545
1546# if defined(ASO_ZEROCHECK)
1547 if (a | b) {
1548# endif
1549 MAD_F_ML0(hi, lo, a, cs[i]);
1550 MAD_F_MLA(hi, lo, -b, ca[i]);
1551
1552 *aptr = MAD_F_MLZ(hi, lo);
1553
1554 MAD_F_ML0(hi, lo, b, cs[i]);
1555 MAD_F_MLA(hi, lo, a, ca[i]);
1556
1557 *bptr = MAD_F_MLZ(hi, lo);
1558# if defined(ASO_ZEROCHECK)
1559 }
1560# endif
1561 }
1562 }
1563}
1564
1565# if defined(ASO_IMDCT)
1566void III_imdct_l(mad_fixed_t const [18], mad_fixed_t [36], unsigned int);
1567# else
1568/*
1569 * NAME:imdct36
1570 * DESCRIPTION:perform X[18]->x[36] IMDCT
1571 */
1572static inline
1573void imdct36(mad_fixed_t const X[18], mad_fixed_t x[36])
1574{
1575 mad_fixed_t t0, t1, t2, t3, t4, t5, t6, t7;
1576 mad_fixed_t t8, t9, t10, t11, t12, t13, t14, t15;
1577 register mad_fixed64hi_t hi;
1578 register mad_fixed64lo_t lo;
1579
1580 MAD_F_ML0(hi, lo, X[4], MAD_F(0x0ec835e8));
1581 MAD_F_MLA(hi, lo, X[13], MAD_F(0x061f78aa));
1582
1583 t6 = MAD_F_MLZ(hi, lo);
1584
1585 MAD_F_MLA(hi, lo, (t14 = X[1] - X[10]), -MAD_F(0x061f78aa));
1586 MAD_F_MLA(hi, lo, (t15 = X[7] + X[16]), -MAD_F(0x0ec835e8));
1587
1588 t0 = MAD_F_MLZ(hi, lo);
1589
1590 MAD_F_MLA(hi, lo, (t8 = X[0] - X[11] - X[12]), MAD_F(0x0216a2a2));
1591 MAD_F_MLA(hi, lo, (t9 = X[2] - X[9] - X[14]), MAD_F(0x09bd7ca0));
1592 MAD_F_MLA(hi, lo, (t10 = X[3] - X[8] - X[15]), -MAD_F(0x0cb19346));
1593 MAD_F_MLA(hi, lo, (t11 = X[5] - X[6] - X[17]), -MAD_F(0x0fdcf549));
1594
1595 x[7] = MAD_F_MLZ(hi, lo);
1596 x[10] = -x[7];
1597
1598 MAD_F_ML0(hi, lo, t8, -MAD_F(0x0cb19346));
1599 MAD_F_MLA(hi, lo, t9, MAD_F(0x0fdcf549));
1600 MAD_F_MLA(hi, lo, t10, MAD_F(0x0216a2a2));
1601 MAD_F_MLA(hi, lo, t11, -MAD_F(0x09bd7ca0));
1602
1603 x[19] = x[34] = MAD_F_MLZ(hi, lo) - t0;
1604
1605 t12 = X[0] - X[3] + X[8] - X[11] - X[12] + X[15];
1606 t13 = X[2] + X[5] - X[6] - X[9] - X[14] - X[17];
1607
1608 MAD_F_ML0(hi, lo, t12, -MAD_F(0x0ec835e8));
1609 MAD_F_MLA(hi, lo, t13, MAD_F(0x061f78aa));
1610
1611 x[22] = x[31] = MAD_F_MLZ(hi, lo) + t0;
1612
1613 MAD_F_ML0(hi, lo, X[1], -MAD_F(0x09bd7ca0));
1614 MAD_F_MLA(hi, lo, X[7], MAD_F(0x0216a2a2));
1615 MAD_F_MLA(hi, lo, X[10], -MAD_F(0x0fdcf549));
1616 MAD_F_MLA(hi, lo, X[16], MAD_F(0x0cb19346));
1617
1618 t1 = MAD_F_MLZ(hi, lo) + t6;
1619
1620 MAD_F_ML0(hi, lo, X[0], MAD_F(0x03768962));
1621 MAD_F_MLA(hi, lo, X[2], MAD_F(0x0e313245));
1622 MAD_F_MLA(hi, lo, X[3], -MAD_F(0x0ffc19fd));
1623 MAD_F_MLA(hi, lo, X[5], -MAD_F(0x0acf37ad));
1624 MAD_F_MLA(hi, lo, X[6], MAD_F(0x04cfb0e2));
1625 MAD_F_MLA(hi, lo, X[8], -MAD_F(0x0898c779));
1626 MAD_F_MLA(hi, lo, X[9], MAD_F(0x0d7e8807));
1627 MAD_F_MLA(hi, lo, X[11], MAD_F(0x0f426cb5));
1628 MAD_F_MLA(hi, lo, X[12], -MAD_F(0x0bcbe352));
1629 MAD_F_MLA(hi, lo, X[14], MAD_F(0x00b2aa3e));
1630 MAD_F_MLA(hi, lo, X[15], -MAD_F(0x07635284));
1631 MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0f9ee890));
1632
1633 x[6] = MAD_F_MLZ(hi, lo) + t1;
1634 x[11] = -x[6];
1635
1636 MAD_F_ML0(hi, lo, X[0], -MAD_F(0x0f426cb5));
1637 MAD_F_MLA(hi, lo, X[2], -MAD_F(0x00b2aa3e));
1638 MAD_F_MLA(hi, lo, X[3], MAD_F(0x0898c779));
1639 MAD_F_MLA(hi, lo, X[5], MAD_F(0x0f9ee890));
1640 MAD_F_MLA(hi, lo, X[6], MAD_F(0x0acf37ad));
1641 MAD_F_MLA(hi, lo, X[8], -MAD_F(0x07635284));
1642 MAD_F_MLA(hi, lo, X[9], -MAD_F(0x0e313245));
1643 MAD_F_MLA(hi, lo, X[11], -MAD_F(0x0bcbe352));
1644 MAD_F_MLA(hi, lo, X[12], -MAD_F(0x03768962));
1645 MAD_F_MLA(hi, lo, X[14], MAD_F(0x0d7e8807));
1646 MAD_F_MLA(hi, lo, X[15], MAD_F(0x0ffc19fd));
1647 MAD_F_MLA(hi, lo, X[17], MAD_F(0x04cfb0e2));
1648
1649 x[23] = x[30] = MAD_F_MLZ(hi, lo) + t1;
1650
1651 MAD_F_ML0(hi, lo, X[0], -MAD_F(0x0bcbe352));
1652 MAD_F_MLA(hi, lo, X[2], MAD_F(0x0d7e8807));
1653 MAD_F_MLA(hi, lo, X[3], -MAD_F(0x07635284));
1654 MAD_F_MLA(hi, lo, X[5], MAD_F(0x04cfb0e2));
1655 MAD_F_MLA(hi, lo, X[6], MAD_F(0x0f9ee890));
1656 MAD_F_MLA(hi, lo, X[8], -MAD_F(0x0ffc19fd));
1657 MAD_F_MLA(hi, lo, X[9], -MAD_F(0x00b2aa3e));
1658 MAD_F_MLA(hi, lo, X[11], MAD_F(0x03768962));
1659 MAD_F_MLA(hi, lo, X[12], -MAD_F(0x0f426cb5));
1660 MAD_F_MLA(hi, lo, X[14], MAD_F(0x0e313245));
1661 MAD_F_MLA(hi, lo, X[15], MAD_F(0x0898c779));
1662 MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0acf37ad));
1663
1664 x[18] = x[35] = MAD_F_MLZ(hi, lo) - t1;
1665
1666 MAD_F_ML0(hi, lo, X[4], MAD_F(0x061f78aa));
1667 MAD_F_MLA(hi, lo, X[13], -MAD_F(0x0ec835e8));
1668
1669 t7 = MAD_F_MLZ(hi, lo);
1670
1671 MAD_F_MLA(hi, lo, X[1], -MAD_F(0x0cb19346));
1672 MAD_F_MLA(hi, lo, X[7], MAD_F(0x0fdcf549));
1673 MAD_F_MLA(hi, lo, X[10], MAD_F(0x0216a2a2));
1674 MAD_F_MLA(hi, lo, X[16], -MAD_F(0x09bd7ca0));
1675
1676 t2 = MAD_F_MLZ(hi, lo);
1677
1678 MAD_F_MLA(hi, lo, X[0], MAD_F(0x04cfb0e2));
1679 MAD_F_MLA(hi, lo, X[2], MAD_F(0x0ffc19fd));
1680 MAD_F_MLA(hi, lo, X[3], -MAD_F(0x0d7e8807));
1681 MAD_F_MLA(hi, lo, X[5], MAD_F(0x03768962));
1682 MAD_F_MLA(hi, lo, X[6], -MAD_F(0x0bcbe352));
1683 MAD_F_MLA(hi, lo, X[8], -MAD_F(0x0e313245));
1684 MAD_F_MLA(hi, lo, X[9], MAD_F(0x07635284));
1685 MAD_F_MLA(hi, lo, X[11], -MAD_F(0x0acf37ad));
1686 MAD_F_MLA(hi, lo, X[12], MAD_F(0x0f9ee890));
1687 MAD_F_MLA(hi, lo, X[14], MAD_F(0x0898c779));
1688 MAD_F_MLA(hi, lo, X[15], MAD_F(0x00b2aa3e));
1689 MAD_F_MLA(hi, lo, X[17], MAD_F(0x0f426cb5));
1690
1691 x[5] = MAD_F_MLZ(hi, lo);
1692 x[12] = -x[5];
1693
1694 MAD_F_ML0(hi, lo, X[0], MAD_F(0x0acf37ad));
1695 MAD_F_MLA(hi, lo, X[2], -MAD_F(0x0898c779));
1696 MAD_F_MLA(hi, lo, X[3], MAD_F(0x0e313245));
1697 MAD_F_MLA(hi, lo, X[5], -MAD_F(0x0f426cb5));
1698 MAD_F_MLA(hi, lo, X[6], -MAD_F(0x03768962));
1699 MAD_F_MLA(hi, lo, X[8], MAD_F(0x00b2aa3e));
1700 MAD_F_MLA(hi, lo, X[9], -MAD_F(0x0ffc19fd));
1701 MAD_F_MLA(hi, lo, X[11], MAD_F(0x0f9ee890));
1702 MAD_F_MLA(hi, lo, X[12], -MAD_F(0x04cfb0e2));
1703 MAD_F_MLA(hi, lo, X[14], MAD_F(0x07635284));
1704 MAD_F_MLA(hi, lo, X[15], MAD_F(0x0d7e8807));
1705 MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0bcbe352));
1706
1707 x[0] = MAD_F_MLZ(hi, lo) + t2;
1708 x[17] = -x[0];
1709
1710 MAD_F_ML0(hi, lo, X[0], -MAD_F(0x0f9ee890));
1711 MAD_F_MLA(hi, lo, X[2], -MAD_F(0x07635284));
1712 MAD_F_MLA(hi, lo, X[3], -MAD_F(0x00b2aa3e));
1713 MAD_F_MLA(hi, lo, X[5], MAD_F(0x0bcbe352));
1714 MAD_F_MLA(hi, lo, X[6], MAD_F(0x0f426cb5));
1715 MAD_F_MLA(hi, lo, X[8], MAD_F(0x0d7e8807));
1716 MAD_F_MLA(hi, lo, X[9], MAD_F(0x0898c779));
1717 MAD_F_MLA(hi, lo, X[11], -MAD_F(0x04cfb0e2));
1718 MAD_F_MLA(hi, lo, X[12], -MAD_F(0x0acf37ad));
1719 MAD_F_MLA(hi, lo, X[14], -MAD_F(0x0ffc19fd));
1720 MAD_F_MLA(hi, lo, X[15], -MAD_F(0x0e313245));
1721 MAD_F_MLA(hi, lo, X[17], -MAD_F(0x03768962));
1722
1723 x[24] = x[29] = MAD_F_MLZ(hi, lo) + t2;
1724
1725 MAD_F_ML0(hi, lo, X[1], -MAD_F(0x0216a2a2));
1726 MAD_F_MLA(hi, lo, X[7], -MAD_F(0x09bd7ca0));
1727 MAD_F_MLA(hi, lo, X[10], MAD_F(0x0cb19346));
1728 MAD_F_MLA(hi, lo, X[16], MAD_F(0x0fdcf549));
1729
1730 t3 = MAD_F_MLZ(hi, lo) + t7;
1731
1732 MAD_F_ML0(hi, lo, X[0], MAD_F(0x00b2aa3e));
1733 MAD_F_MLA(hi, lo, X[2], MAD_F(0x03768962));
1734 MAD_F_MLA(hi, lo, X[3], -MAD_F(0x04cfb0e2));
1735 MAD_F_MLA(hi, lo, X[5], -MAD_F(0x07635284));
1736 MAD_F_MLA(hi, lo, X[6], MAD_F(0x0898c779));
1737 MAD_F_MLA(hi, lo, X[8], MAD_F(0x0acf37ad));
1738 MAD_F_MLA(hi, lo, X[9], -MAD_F(0x0bcbe352));
1739 MAD_F_MLA(hi, lo, X[11], -MAD_F(0x0d7e8807));
1740 MAD_F_MLA(hi, lo, X[12], MAD_F(0x0e313245));
1741 MAD_F_MLA(hi, lo, X[14], MAD_F(0x0f426cb5));
1742 MAD_F_MLA(hi, lo, X[15], -MAD_F(0x0f9ee890));
1743 MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0ffc19fd));
1744
1745 x[8] = MAD_F_MLZ(hi, lo) + t3;
1746 x[9] = -x[8];
1747
1748 MAD_F_ML0(hi, lo, X[0], -MAD_F(0x0e313245));
1749 MAD_F_MLA(hi, lo, X[2], MAD_F(0x0bcbe352));
1750 MAD_F_MLA(hi, lo, X[3], MAD_F(0x0f9ee890));
1751 MAD_F_MLA(hi, lo, X[5], -MAD_F(0x0898c779));
1752 MAD_F_MLA(hi, lo, X[6], -MAD_F(0x0ffc19fd));
1753 MAD_F_MLA(hi, lo, X[8], MAD_F(0x04cfb0e2));
1754 MAD_F_MLA(hi, lo, X[9], MAD_F(0x0f426cb5));
1755 MAD_F_MLA(hi, lo, X[11], -MAD_F(0x00b2aa3e));
1756 MAD_F_MLA(hi, lo, X[12], -MAD_F(0x0d7e8807));
1757 MAD_F_MLA(hi, lo, X[14], -MAD_F(0x03768962));
1758 MAD_F_MLA(hi, lo, X[15], MAD_F(0x0acf37ad));
1759 MAD_F_MLA(hi, lo, X[17], MAD_F(0x07635284));
1760
1761 x[21] = x[32] = MAD_F_MLZ(hi, lo) + t3;
1762
1763 MAD_F_ML0(hi, lo, X[0], -MAD_F(0x0d7e8807));
1764 MAD_F_MLA(hi, lo, X[2], MAD_F(0x0f426cb5));
1765 MAD_F_MLA(hi, lo, X[3], MAD_F(0x0acf37ad));
1766 MAD_F_MLA(hi, lo, X[5], -MAD_F(0x0ffc19fd));
1767 MAD_F_MLA(hi, lo, X[6], -MAD_F(0x07635284));
1768 MAD_F_MLA(hi, lo, X[8], MAD_F(0x0f9ee890));
1769 MAD_F_MLA(hi, lo, X[9], MAD_F(0x03768962));
1770 MAD_F_MLA(hi, lo, X[11], -MAD_F(0x0e313245));
1771 MAD_F_MLA(hi, lo, X[12], MAD_F(0x00b2aa3e));
1772 MAD_F_MLA(hi, lo, X[14], MAD_F(0x0bcbe352));
1773 MAD_F_MLA(hi, lo, X[15], -MAD_F(0x04cfb0e2));
1774 MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0898c779));
1775
1776 x[20] = x[33] = MAD_F_MLZ(hi, lo) - t3;
1777
1778 MAD_F_ML0(hi, lo, t14, -MAD_F(0x0ec835e8));
1779 MAD_F_MLA(hi, lo, t15, MAD_F(0x061f78aa));
1780
1781 t4 = MAD_F_MLZ(hi, lo) - t7;
1782
1783 MAD_F_ML0(hi, lo, t12, MAD_F(0x061f78aa));
1784 MAD_F_MLA(hi, lo, t13, MAD_F(0x0ec835e8));
1785
1786 x[4] = MAD_F_MLZ(hi, lo) + t4;
1787 x[13] = -x[4];
1788
1789 MAD_F_ML0(hi, lo, t8, MAD_F(0x09bd7ca0));
1790 MAD_F_MLA(hi, lo, t9, -MAD_F(0x0216a2a2));
1791 MAD_F_MLA(hi, lo, t10, MAD_F(0x0fdcf549));
1792 MAD_F_MLA(hi, lo, t11, -MAD_F(0x0cb19346));
1793
1794 x[1] = MAD_F_MLZ(hi, lo) + t4;
1795 x[16] = -x[1];
1796
1797 MAD_F_ML0(hi, lo, t8, -MAD_F(0x0fdcf549));
1798 MAD_F_MLA(hi, lo, t9, -MAD_F(0x0cb19346));
1799 MAD_F_MLA(hi, lo, t10, -MAD_F(0x09bd7ca0));
1800 MAD_F_MLA(hi, lo, t11, -MAD_F(0x0216a2a2));
1801
1802 x[25] = x[28] = MAD_F_MLZ(hi, lo) + t4;
1803
1804 MAD_F_ML0(hi, lo, X[1], -MAD_F(0x0fdcf549));
1805 MAD_F_MLA(hi, lo, X[7], -MAD_F(0x0cb19346));
1806 MAD_F_MLA(hi, lo, X[10], -MAD_F(0x09bd7ca0));
1807 MAD_F_MLA(hi, lo, X[16], -MAD_F(0x0216a2a2));
1808
1809 t5 = MAD_F_MLZ(hi, lo) - t6;
1810
1811 MAD_F_ML0(hi, lo, X[0], MAD_F(0x0898c779));
1812 MAD_F_MLA(hi, lo, X[2], MAD_F(0x04cfb0e2));
1813 MAD_F_MLA(hi, lo, X[3], MAD_F(0x0bcbe352));
1814 MAD_F_MLA(hi, lo, X[5], MAD_F(0x00b2aa3e));
1815 MAD_F_MLA(hi, lo, X[6], MAD_F(0x0e313245));
1816 MAD_F_MLA(hi, lo, X[8], -MAD_F(0x03768962));
1817 MAD_F_MLA(hi, lo, X[9], MAD_F(0x0f9ee890));
1818 MAD_F_MLA(hi, lo, X[11], -MAD_F(0x07635284));
1819 MAD_F_MLA(hi, lo, X[12], MAD_F(0x0ffc19fd));
1820 MAD_F_MLA(hi, lo, X[14], -MAD_F(0x0acf37ad));
1821 MAD_F_MLA(hi, lo, X[15], MAD_F(0x0f426cb5));
1822 MAD_F_MLA(hi, lo, X[17], -MAD_F(0x0d7e8807));
1823
1824 x[2] = MAD_F_MLZ(hi, lo) + t5;
1825 x[15] = -x[2];
1826
1827 MAD_F_ML0(hi, lo, X[0], MAD_F(0x07635284));
1828 MAD_F_MLA(hi, lo, X[2], MAD_F(0x0acf37ad));
1829 MAD_F_MLA(hi, lo, X[3], MAD_F(0x03768962));
1830 MAD_F_MLA(hi, lo, X[5], MAD_F(0x0d7e8807));
1831 MAD_F_MLA(hi, lo, X[6], -MAD_F(0x00b2aa3e));
1832 MAD_F_MLA(hi, lo, X[8], MAD_F(0x0f426cb5));
1833 MAD_F_MLA(hi, lo, X[9], -MAD_F(0x04cfb0e2));
1834 MAD_F_MLA(hi, lo, X[11], MAD_F(0x0ffc19fd));
1835 MAD_F_MLA(hi, lo, X[12], -MAD_F(0x0898c779));
1836 MAD_F_MLA(hi, lo, X[14], MAD_F(0x0f9ee890));
1837 MAD_F_MLA(hi, lo, X[15], -MAD_F(0x0bcbe352));
1838 MAD_F_MLA(hi, lo, X[17], MAD_F(0x0e313245));
1839
1840 x[3] = MAD_F_MLZ(hi, lo) + t5;
1841 x[14] = -x[3];
1842
1843 MAD_F_ML0(hi, lo, X[0], -MAD_F(0x0ffc19fd));
1844 MAD_F_MLA(hi, lo, X[2], -MAD_F(0x0f9ee890));
1845 MAD_F_MLA(hi, lo, X[3], -MAD_F(0x0f426cb5));
1846 MAD_F_MLA(hi, lo, X[5], -MAD_F(0x0e313245));
1847 MAD_F_MLA(hi, lo, X[6], -MAD_F(0x0d7e8807));
1848 MAD_F_MLA(hi, lo, X[8], -MAD_F(0x0bcbe352));
1849 MAD_F_MLA(hi, lo, X[9], -MAD_F(0x0acf37ad));
1850 MAD_F_MLA(hi, lo, X[11], -MAD_F(0x0898c779));
1851 MAD_F_MLA(hi, lo, X[12], -MAD_F(0x07635284));
1852 MAD_F_MLA(hi, lo, X[14], -MAD_F(0x04cfb0e2));
1853 MAD_F_MLA(hi, lo, X[15], -MAD_F(0x03768962));
1854 MAD_F_MLA(hi, lo, X[17], -MAD_F(0x00b2aa3e));
1855
1856 x[26] = x[27] = MAD_F_MLZ(hi, lo) + t5;
1857}
1858
1859/*
1860 * NAME:III_imdct_l()
1861 * DESCRIPTION:perform IMDCT and windowing for long blocks
1862 */
1863static
1864void III_imdct_l(mad_fixed_t const X[18], mad_fixed_t z[36],
1865 unsigned int block_type)
1866{
1867 unsigned int i;
1868
1869 /* IMDCT */
1870
1871 imdct36(X, z);
1872
1873 /* windowing */
1874
1875 switch (block_type) {
1876 case 0: /* normal window */
1877# if defined(ASO_INTERLEAVE1)
1878 {
1879 register mad_fixed_t tmp1, tmp2;
1880
1881 tmp1 = window_l[0];
1882 tmp2 = window_l[1];
1883
1884 for (i = 0; i < 34; i += 2) {
1885 z[i + 0] = mad_f_mul(z[i + 0], tmp1);
1886 tmp1 = window_l[i + 2];
1887 z[i + 1] = mad_f_mul(z[i + 1], tmp2);
1888 tmp2 = window_l[i + 3];
1889 }
1890
1891 z[34] = mad_f_mul(z[34], tmp1);
1892 z[35] = mad_f_mul(z[35], tmp2);
1893 }
1894# elif defined(ASO_INTERLEAVE2)
1895 {
1896 register mad_fixed_t tmp1, tmp2;
1897
1898 tmp1 = z[0];
1899 tmp2 = window_l[0];
1900
1901 for (i = 0; i < 35; ++i) {
1902 z[i] = mad_f_mul(tmp1, tmp2);
1903 tmp1 = z[i + 1];
1904 tmp2 = window_l[i + 1];
1905 }
1906
1907 z[35] = mad_f_mul(tmp1, tmp2);
1908 }
1909# elif 1
1910 for (i = 0; i < 36; i += 4) {
1911 z[i + 0] = mad_f_mul(z[i + 0], window_l[i + 0]);
1912 z[i + 1] = mad_f_mul(z[i + 1], window_l[i + 1]);
1913 z[i + 2] = mad_f_mul(z[i + 2], window_l[i + 2]);
1914 z[i + 3] = mad_f_mul(z[i + 3], window_l[i + 3]);
1915 }
1916# else
1917 for (i = 0; i < 36; ++i) z[i] = mad_f_mul(z[i], window_l[i]);
1918# endif
1919 break;
1920
1921 case 1: /* start block */
1922 for (i = 0; i < 18; ++i) z[i] = mad_f_mul(z[i], window_l[i]);
1923 /* (i = 18; i < 24; ++i) z[i] unchanged */
1924 for (i = 24; i < 30; ++i) z[i] = mad_f_mul(z[i], window_s[i - 18]);
1925 for (i = 30; i < 36; ++i) z[i] = 0;
1926 break;
1927
1928 case 3: /* stop block */
1929 for (i = 0; i < 6; ++i) z[i] = 0;
1930 for (i = 6; i < 12; ++i) z[i] = mad_f_mul(z[i], window_s[i - 6]);
1931 /* (i = 12; i < 18; ++i) z[i] unchanged */
1932 for (i = 18; i < 36; ++i) z[i] = mad_f_mul(z[i], window_l[i]);
1933 break;
1934 }
1935}
1936# endif /* ASO_IMDCT */
1937
1938/*
1939 * NAME:III_imdct_s()
1940 * DESCRIPTION:perform IMDCT and windowing for short blocks
1941 */
1942static
1943void III_imdct_s(mad_fixed_t const X[18], mad_fixed_t z[36])
1944{
1945 mad_fixed_t y[36], *yptr;
1946 mad_fixed_t const *wptr;
1947 int w, i;
1948 register mad_fixed64hi_t hi;
1949 register mad_fixed64lo_t lo;
1950
1951 /* IMDCT */
1952
1953 yptr = &y[0];
1954
1955 for (w = 0; w < 3; ++w) {
1956 register mad_fixed_t const (*s)[6];
1957
1958 s = imdct_s;
1959
1960 for (i = 0; i < 3; ++i) {
1961 MAD_F_ML0(hi, lo, X[0], (*s)[0]);
1962 MAD_F_MLA(hi, lo, X[1], (*s)[1]);
1963 MAD_F_MLA(hi, lo, X[2], (*s)[2]);
1964 MAD_F_MLA(hi, lo, X[3], (*s)[3]);
1965 MAD_F_MLA(hi, lo, X[4], (*s)[4]);
1966 MAD_F_MLA(hi, lo, X[5], (*s)[5]);
1967
1968 yptr[i + 0] = MAD_F_MLZ(hi, lo);
1969 yptr[5 - i] = -yptr[i + 0];
1970
1971 ++s;
1972
1973 MAD_F_ML0(hi, lo, X[0], (*s)[0]);
1974 MAD_F_MLA(hi, lo, X[1], (*s)[1]);
1975 MAD_F_MLA(hi, lo, X[2], (*s)[2]);
1976 MAD_F_MLA(hi, lo, X[3], (*s)[3]);
1977 MAD_F_MLA(hi, lo, X[4], (*s)[4]);
1978 MAD_F_MLA(hi, lo, X[5], (*s)[5]);
1979
1980 yptr[ i + 6] = MAD_F_MLZ(hi, lo);
1981 yptr[11 - i] = yptr[i + 6];
1982
1983 ++s;
1984 }
1985
1986 yptr += 12;
1987 X += 6;
1988 }
1989
1990 /* windowing, overlapping and concatenation */
1991
1992 yptr = &y[0];
1993 wptr = &window_s[0];
1994
1995 for (i = 0; i < 6; ++i) {
1996 z[i + 0] = 0;
1997 z[i + 6] = mad_f_mul(yptr[ 0 + 0], wptr[0]);
1998
1999 MAD_F_ML0(hi, lo, yptr[ 0 + 6], wptr[6]);
2000 MAD_F_MLA(hi, lo, yptr[12 + 0], wptr[0]);
2001
2002 z[i + 12] = MAD_F_MLZ(hi, lo);
2003
2004 MAD_F_ML0(hi, lo, yptr[12 + 6], wptr[6]);
2005 MAD_F_MLA(hi, lo, yptr[24 + 0], wptr[0]);
2006
2007 z[i + 18] = MAD_F_MLZ(hi, lo);
2008
2009 z[i + 24] = mad_f_mul(yptr[24 + 6], wptr[6]);
2010 z[i + 30] = 0;
2011
2012 ++yptr;
2013 ++wptr;
2014 }
2015}
2016
2017/*
2018 * NAME:III_overlap()
2019 * DESCRIPTION:perform overlap-add of windowed IMDCT outputs
2020 */
2021static
2022void III_overlap(mad_fixed_t const output[36], mad_fixed_t overlap[18],
2023 mad_fixed_t sample[18][32], unsigned int sb)
2024{
2025 unsigned int i;
2026
2027# if defined(ASO_INTERLEAVE2)
2028 {
2029 register mad_fixed_t tmp1, tmp2;
2030
2031 tmp1 = overlap[0];
2032 tmp2 = overlap[1];
2033
2034 for (i = 0; i < 16; i += 2) {
2035 sample[i + 0][sb] = output[i + 0] + tmp1;
2036 overlap[i + 0] = output[i + 0 + 18];
2037 tmp1 = overlap[i + 2];
2038
2039 sample[i + 1][sb] = output[i + 1] + tmp2;
2040 overlap[i + 1] = output[i + 1 + 18];
2041 tmp2 = overlap[i + 3];
2042 }
2043
2044 sample[16][sb] = output[16] + tmp1;
2045 overlap[16] = output[16 + 18];
2046 sample[17][sb] = output[17] + tmp2;
2047 overlap[17] = output[17 + 18];
2048 }
2049# elif 0
2050 for (i = 0; i < 18; i += 2) {
2051 sample[i + 0][sb] = output[i + 0] + overlap[i + 0];
2052 overlap[i + 0] = output[i + 0 + 18];
2053
2054 sample[i + 1][sb] = output[i + 1] + overlap[i + 1];
2055 overlap[i + 1] = output[i + 1 + 18];
2056 }
2057# else
2058 for (i = 0; i < 18; ++i) {
2059 sample[i][sb] = output[i] + overlap[i];
2060 overlap[i] = output[i + 18];
2061 }
2062# endif
2063}
2064
2065/*
2066 * NAME:III_overlap_z()
2067 * DESCRIPTION:perform "overlap-add" of zero IMDCT outputs
2068 */
2069static inline
2070void III_overlap_z(mad_fixed_t overlap[18],
2071 mad_fixed_t sample[18][32], unsigned int sb)
2072{
2073 unsigned int i;
2074
2075# if defined(ASO_INTERLEAVE2)
2076 {
2077 register mad_fixed_t tmp1, tmp2;
2078
2079 tmp1 = overlap[0];
2080 tmp2 = overlap[1];
2081
2082 for (i = 0; i < 16; i += 2) {
2083 sample[i + 0][sb] = tmp1;
2084 overlap[i + 0] = 0;
2085 tmp1 = overlap[i + 2];
2086
2087 sample[i + 1][sb] = tmp2;
2088 overlap[i + 1] = 0;
2089 tmp2 = overlap[i + 3];
2090 }
2091
2092 sample[16][sb] = tmp1;
2093 overlap[16] = 0;
2094 sample[17][sb] = tmp2;
2095 overlap[17] = 0;
2096 }
2097# else
2098 for (i = 0; i < 18; ++i) {
2099 sample[i][sb] = overlap[i];
2100 overlap[i] = 0;
2101 }
2102# endif
2103}
2104
2105/*
2106 * NAME:III_freqinver()
2107 * DESCRIPTION:perform subband frequency inversion for odd sample lines
2108 */
2109static
2110void III_freqinver(mad_fixed_t sample[18][32], unsigned int sb)
2111{
2112 unsigned int i;
2113
2114# if 1 || defined(ASO_INTERLEAVE1) || defined(ASO_INTERLEAVE2)
2115 {
2116 register mad_fixed_t tmp1, tmp2;
2117
2118 tmp1 = sample[1][sb];
2119 tmp2 = sample[3][sb];
2120
2121 for (i = 1; i < 13; i += 4) {
2122 sample[i + 0][sb] = -tmp1;
2123 tmp1 = sample[i + 4][sb];
2124 sample[i + 2][sb] = -tmp2;
2125 tmp2 = sample[i + 6][sb];
2126 }
2127
2128 sample[13][sb] = -tmp1;
2129 tmp1 = sample[17][sb];
2130 sample[15][sb] = -tmp2;
2131 sample[17][sb] = -tmp1;
2132 }
2133# else
2134 for (i = 1; i < 18; i += 2)
2135 sample[i][sb] = -sample[i][sb];
2136# endif
2137}
2138
2139/*
2140 * NAME:III_decode()
2141 * DESCRIPTION:decode frame main_data
2142 */
2143static
2144int III_decode(struct mad_bitptr *ptr, struct mad_frame *frame,
2145 struct sideinfo *si, unsigned int nch)
2146{
2147 struct mad_header *header = &frame->header;
2148 unsigned int sfreqi, ngr, gr;
2149
2150 {
2151 unsigned int sfreq;
2152
2153 sfreq = header->samplerate;
2154 if (header->flags & MAD_FLAG_MPEG_2_5_EXT)
2155 sfreq *= 2;
2156
2157 /* 48000 => 0, 44100 => 1, 32000 => 2,
2158 24000 => 3, 22050 => 4, 16000 => 5 */
2159 sfreqi = ((sfreq >> 7) & 0x000f) +
2160 ((sfreq >> 15) & 0x0001) - 8;
2161
2162 if (header->flags & MAD_FLAG_MPEG_2_5_EXT)
2163 sfreqi += 3;
2164 }
2165
2166 /* scalefactors, Huffman decoding, requantization */
2167
2168 ngr = (header->flags & MAD_FLAG_LSF_EXT) ? 1 : 2;
2169
2170 for (gr = 0; gr < ngr; ++gr) {
2171 struct granule *granule = &si->gr[gr];
2172 unsigned char const *sfbwidth = 0;
2173 mad_fixed_t xr[2][576];
2174 unsigned int ch;
2175 enum mad_error error;
2176
2177 for (ch = 0; ch < nch; ++ch) {
2178 struct channel *channel = &granule->ch[ch];
2179 unsigned int part2_length;
2180
2181 sfbwidth = sfbwidth_table[sfreqi].l;
2182 if (channel->block_type == 2) {
2183 sfbwidth = (channel->flags & mixed_block_flag) ?
2184 sfbwidth_table[sfreqi].m : sfbwidth_table[sfreqi].s;
2185 }
2186
2187 if (header->flags & MAD_FLAG_LSF_EXT) {
2188 part2_length = III_scalefactors_lsf(ptr, channel,
2189 ch == 0 ? 0 : &si->gr[1].ch[1],
2190 header->mode_extension);
2191 }
2192 else {
2193 part2_length = III_scalefactors(ptr, channel, &si->gr[0].ch[ch],
2194 gr == 0 ? 0 : si->scfsi[ch]);
2195 }
2196
2197 error = III_huffdecode(ptr, xr[ch], channel, sfbwidth, part2_length);
2198 if (error)
2199 return error;
2200 }
2201
2202 /* joint stereo processing */
2203
2204 if (header->mode == MAD_MODE_JOINT_STEREO && header->mode_extension) {
2205 error = III_stereo(xr, granule, header, sfbwidth);
2206 if (error)
2207 return error;
2208 }
2209
2210 /* reordering, alias reduction, IMDCT, overlap-add, frequency inversion */
2211
2212 for (ch = 0; ch < nch; ++ch) {
2213 struct channel const *channel = &granule->ch[ch];
2214 mad_fixed_t (*sample)[32] = &frame->sbsample[ch][18 * gr];
2215 unsigned int sb, l, i, sblimit;
2216 mad_fixed_t output[36];
2217
2218 if (channel->block_type == 2) {
2219 III_reorder(xr[ch], channel, sfbwidth_table[sfreqi].s);
2220
2221# if !defined(OPT_STRICT)
2222 /*
2223 * According to ISO/IEC 11172-3, "Alias reduction is not applied for
2224 * granules with block_type == 2 (short block)." However, other
2225 * sources suggest alias reduction should indeed be performed on the
2226 * lower two subbands of mixed blocks. Most other implementations do
2227 * this, so by default we will too.
2228 */
2229 if (channel->flags & mixed_block_flag)
2230 III_aliasreduce(xr[ch], 36);
2231# endif
2232 }
2233 else
2234 III_aliasreduce(xr[ch], 576);
2235
2236 l = 0;
2237
2238 /* subbands 0-1 */
2239
2240 if (channel->block_type != 2 || (channel->flags & mixed_block_flag)) {
2241 unsigned int block_type;
2242
2243 block_type = channel->block_type;
2244 if (channel->flags & mixed_block_flag)
2245 block_type = 0;
2246
2247 /* long blocks */
2248 for (sb = 0; sb < 2; ++sb, l += 18) {
2249 III_imdct_l(&xr[ch][l], output, block_type);
2250 III_overlap(output, (*frame->overlap)[ch][sb], sample, sb);
2251 }
2252 }
2253 else {
2254 /* short blocks */
2255 for (sb = 0; sb < 2; ++sb, l += 18) {
2256 III_imdct_s(&xr[ch][l], output);
2257 III_overlap(output, (*frame->overlap)[ch][sb], sample, sb);
2258 }
2259 }
2260
2261 III_freqinver(sample, 1);
2262
2263 /* (nonzero) subbands 2-31 */
2264
2265 i = 576;
2266 while (i > 36 && xr[ch][i - 1] == 0)
2267 --i;
2268
2269 sblimit = 32 - (576 - i) / 18;
2270
2271 if (channel->block_type != 2) {
2272 /* long blocks */
2273 for (sb = 2; sb < sblimit; ++sb, l += 18) {
2274 III_imdct_l(&xr[ch][l], output, channel->block_type);
2275 III_overlap(output, (*frame->overlap)[ch][sb], sample, sb);
2276
2277 if (sb & 1)
2278 III_freqinver(sample, sb);
2279 }
2280 }
2281 else {
2282 /* short blocks */
2283 for (sb = 2; sb < sblimit; ++sb, l += 18) {
2284 III_imdct_s(&xr[ch][l], output);
2285 III_overlap(output, (*frame->overlap)[ch][sb], sample, sb);
2286
2287 if (sb & 1)
2288 III_freqinver(sample, sb);
2289 }
2290 }
2291
2292 /* remaining (zero) subbands */
2293
2294 for (sb = sblimit; sb < 32; ++sb) {
2295 III_overlap_z((*frame->overlap)[ch][sb], sample, sb);
2296
2297 if (sb & 1)
2298 III_freqinver(sample, sb);
2299 }
2300 }
2301 }
2302
2303 return 0;
2304}
2305
2306/*
2307 * NAME:layer->III()
2308 * DESCRIPTION:decode a single Layer III frame
2309 */
2310int mad_layer_III(struct mad_stream *stream, struct mad_frame *frame)
2311{
2312 struct mad_header *header = &frame->header;
2313 unsigned int nch, priv_bitlen, next_md_begin = 0;
2314 unsigned int si_len, data_bitlen, md_len;
2315 unsigned int frame_space, frame_used, frame_free;
2316 struct mad_bitptr ptr;
2317 struct sideinfo si;
2318 enum mad_error error;
2319 int result = 0;
2320
2321 /* allocate Layer III dynamic structures */
2322
2323 if (stream->main_data == 0) {
2324 stream->main_data = malloc(MAD_BUFFER_MDLEN);
2325 if (stream->main_data == 0) {
2326 stream->error = MAD_ERROR_NOMEM;
2327 return -1;
2328 }
2329 }
2330
2331 if (frame->overlap == 0) {
2332 frame->overlap = calloc(2 * 32 * 18, sizeof(mad_fixed_t));
2333 if (frame->overlap == 0) {
2334 stream->error = MAD_ERROR_NOMEM;
2335 return -1;
2336 }
2337 }
2338
2339 nch = MAD_NCHANNELS(header);
2340 si_len = (header->flags & MAD_FLAG_LSF_EXT) ?
2341 (nch == 1 ? 9 : 17) : (nch == 1 ? 17 : 32);
2342
2343 /* check frame sanity */
2344
2345 if (stream->next_frame - mad_bit_nextbyte(&stream->ptr) <
2346 (signed int) si_len) {
2347 stream->error = MAD_ERROR_BADFRAMELEN;
2348 stream->md_len = 0;
2349 return -1;
2350 }
2351
2352 /* check CRC word */
2353
2354 if (header->flags & MAD_FLAG_PROTECTION) {
2355 header->crc_check =
2356 mad_bit_crc(stream->ptr, si_len * CHAR_BIT, header->crc_check);
2357
2358 if (header->crc_check != header->crc_target &&
2359 !(frame->options & MAD_OPTION_IGNORECRC)) {
2360 stream->error = MAD_ERROR_BADCRC;
2361 result = -1;
2362 }
2363 }
2364
2365 /* decode frame side information */
2366
2367 error = III_sideinfo(&stream->ptr, nch, header->flags & MAD_FLAG_LSF_EXT,
2368 &si, &data_bitlen, &priv_bitlen);
2369 if (error && result == 0) {
2370 stream->error = error;
2371 result = -1;
2372 }
2373
2374 header->flags |= priv_bitlen;
2375 header->private_bits |= si.private_bits;
2376
2377 /* find main_data of next frame */
2378
2379 {
2380 struct mad_bitptr peek;
2381 unsigned long header;
2382
2383 mad_bit_init(&peek, stream->next_frame);
2384
2385 header = mad_bit_read(&peek, 32);
2386 if ((header & 0xffe60000L) /* syncword | layer */ == 0xffe20000L) {
2387 if (!(header & 0x00010000L)) /* protection_bit */
2388 mad_bit_skip(&peek, 16); /* crc_check */
2389
2390 next_md_begin =
2391 mad_bit_read(&peek, (header & 0x00080000L) /* ID */ ? 9 : 8);
2392 }
2393
2394 mad_bit_finish(&peek);
2395 }
2396
2397 /* find main_data of this frame */
2398
2399 frame_space = stream->next_frame - mad_bit_nextbyte(&stream->ptr);
2400
2401 if (next_md_begin > si.main_data_begin + frame_space)
2402 next_md_begin = 0;
2403
2404 md_len = si.main_data_begin + frame_space - next_md_begin;
2405
2406 frame_used = 0;
2407
2408 if (si.main_data_begin == 0) {
2409 ptr = stream->ptr;
2410 stream->md_len = 0;
2411
2412 frame_used = md_len;
2413 }
2414 else {
2415 if (si.main_data_begin > stream->md_len) {
2416 if (result == 0) {
2417 stream->error = MAD_ERROR_BADDATAPTR;
2418 result = -1;
2419 }
2420 }
2421 else {
2422 mad_bit_init(&ptr,
2423 *stream->main_data + stream->md_len - si.main_data_begin);
2424
2425 if (md_len > si.main_data_begin) {
2426 assert(stream->md_len + md_len -
2427 si.main_data_begin <= MAD_BUFFER_MDLEN);
2428
2429 memcpy(*stream->main_data + stream->md_len,
2430 mad_bit_nextbyte(&stream->ptr),
2431 frame_used = md_len - si.main_data_begin);
2432 stream->md_len += frame_used;
2433 }
2434 }
2435 }
2436
2437 frame_free = frame_space - frame_used;
2438
2439 /* decode main_data */
2440
2441 if (result == 0) {
2442 error = III_decode(&ptr, frame, &si, nch);
2443 if (error) {
2444 stream->error = error;
2445 result = -1;
2446 }
2447 }
2448
2449 /* designate ancillary bits */
2450
2451 stream->anc_ptr = ptr;
2452 stream->anc_bitlen = md_len * CHAR_BIT - data_bitlen;
2453
2454# if 0 && defined(DEBUG)
2455 fprintf(stderr,
2456 "main_data_begin:%u, md_len:%u, frame_free:%u, "
2457 "data_bitlen:%u, anc_bitlen: %u\n",
2458 si.main_data_begin, md_len, frame_free,
2459 data_bitlen, stream->anc_bitlen);
2460# endif
2461
2462 /* preload main_data buffer with up to 511 bytes for next frame(s) */
2463
2464 if (frame_free >= next_md_begin) {
2465 memcpy(*stream->main_data,
2466 stream->next_frame - next_md_begin, next_md_begin);
2467 stream->md_len = next_md_begin;
2468 }
2469 else {
2470 if (md_len < si.main_data_begin) {
2471 unsigned int extra;
2472
2473 extra = si.main_data_begin - md_len;
2474 if (extra + frame_free > next_md_begin)
2475 extra = next_md_begin - frame_free;
2476
2477 if (extra < stream->md_len) {
2478 memmove(*stream->main_data,
2479 *stream->main_data + stream->md_len - extra, extra);
2480 stream->md_len = extra;
2481 }
2482 }
2483 else
2484 stream->md_len = 0;
2485
2486 memcpy(*stream->main_data + stream->md_len,
2487 stream->next_frame - frame_free, frame_free);
2488 stream->md_len += frame_free;
2489 }
2490
2491 return result;
2492}
diff --git a/core/multimedia/opieplayer/libmad/layer3.h b/core/multimedia/opieplayer/libmad/layer3.h
new file mode 100644
index 0000000..1fd83e2
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/layer3.h
@@ -0,0 +1,30 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifndef LIBMAD_LAYER3_H
23# define LIBMAD_LAYER3_H
24
25# include "stream.h"
26# include "frame.h"
27
28int mad_layer_III(struct mad_stream *, struct mad_frame *);
29
30# endif
diff --git a/core/multimedia/opieplayer/libmad/libmad.pro b/core/multimedia/opieplayer/libmad/libmad.pro
new file mode 100644
index 0000000..e3f75b7
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/libmad.pro
@@ -0,0 +1,12 @@
1 TEMPLATE= lib
2 CONFIG += qt warn_on release
3 HEADERS = libmad_version.h fixed.h bit.h timer.h stream.h frame.h synth.h decoder.h \
4 layer12.h layer3.h huffman.h libmad_global.h mad.h libmadplugin.h libmadpluginimpl.h
5 SOURCES = version.c fixed.c bit.c timer.c stream.c frame.c synth.c decoder.c \
6 layer12.c layer3.c huffman.c libmadplugin.cpp libmadpluginimpl.cpp
7 TARGET = madplugin
8 DESTDIR = ../../plugins/codecs
9INCLUDEPATH += $(QPEDIR)/include ..
10DEPENDPATH += ../$(QPEDIR)/include ..
11LIBS += -lqpe -lm
12 VERSION = 1.0.0
diff --git a/core/multimedia/opieplayer/libmad/libmad_global.h b/core/multimedia/opieplayer/libmad/libmad_global.h
new file mode 100644
index 0000000..f2a2a71
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/libmad_global.h
@@ -0,0 +1,45 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifndef LIBMAD_GLOBAL_H
23# define LIBMAD_GLOBAL_H
24
25/* conditional debugging */
26
27# if defined(DEBUG) && defined(NDEBUG)
28# error "cannot define both DEBUG and NDEBUG"
29# endif
30
31# if defined(DEBUG)
32# include <stdio.h>
33# endif
34
35/* conditional features */
36
37# if defined(OPT_SPEED) && defined(OPT_ACCURACY)
38# error "cannot optimize for both speed and accuracy"
39# endif
40
41# if defined(OPT_SPEED) && !defined(OPT_SSO)
42# define OPT_SSO 1
43# endif
44
45# endif
diff --git a/core/multimedia/opieplayer/libmad/libmad_version.h b/core/multimedia/opieplayer/libmad/libmad_version.h
new file mode 100644
index 0000000..f8ee1fa
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/libmad_version.h
@@ -0,0 +1,47 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifndef LIBMAD_VERSION_H
23# define LIBMAD_VERSION_H
24
25 # define MAD_VERSION_MAJOR0
26 # define MAD_VERSION_MINOR13
27 # define MAD_VERSION_PATCH0
28 # define MAD_VERSION_EXTRA" (beta)"
29
30 # define MAD_VERSION_STRINGIZE(str)#str
31 # define MAD_VERSION_STRING(num)MAD_VERSION_STRINGIZE(num)
32
33 # define MAD_VERSION MAD_VERSION_STRING(MAD_VERSION_MAJOR) "." \
34 MAD_VERSION_STRING(MAD_VERSION_MINOR) "." \
35 MAD_VERSION_STRING(MAD_VERSION_PATCH) \
36 MAD_VERSION_EXTRA
37
38 # define MAD_PUBLISHYEAR"2000-2001"
39 # define MAD_AUTHOR "Robert Leslie"
40 # define MAD_EMAIL "rob@mars.org"
41
42extern char const mad_version[];
43extern char const mad_copyright[];
44extern char const mad_author[];
45extern char const mad_build[];
46
47# endif
diff --git a/core/multimedia/opieplayer/libmad/libmadplugin.cpp b/core/multimedia/opieplayer/libmad/libmadplugin.cpp
new file mode 100644
index 0000000..b2b876f
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/libmadplugin.cpp
@@ -0,0 +1,578 @@
1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3**
4** This file is part of Qtopia Environment.
5**
6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file.
10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15**
16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you.
18**
19**********************************************************************/
20#include <stdio.h>
21#include <stdarg.h>
22#include <stdlib.h>
23#include <sys/types.h>
24#include <sys/stat.h>
25#include <fcntl.h>
26#include <unistd.h>
27#include <string.h>
28#include <ctype.h>
29#include <errno.h>
30#include <time.h>
31#include <locale.h>
32#include <math.h>
33#include <assert.h>
34#include <qapplication.h>
35
36//#define HAVE_MMAP
37
38#if defined(HAVE_MMAP)
39# include <sys/mman.h>
40#endif
41#include "libmadplugin.h"
42
43
44extern "C" {
45#include "mad.h"
46}
47
48
49#define MPEG_BUFFER_SIZE 65536
50 //#define debugMsg(a) qDebug(a)
51#define debugMsg(a)
52
53
54class Input {
55public:
56 char const *path;
57 int fd;
58#if defined(HAVE_MMAP)
59 void *fdm;
60#endif
61 unsigned char *data;
62 unsigned long length;
63 int eof;
64};
65
66
67class Output {
68public:
69 mad_fixed_t attenuate;
70 struct filter *filters;
71 unsigned int channels_in;
72 unsigned int channels_out;
73 unsigned int speed_in;
74 unsigned int speed_out;
75 const char *path;
76};
77
78
79# if defined(HAVE_MMAP)
80static void *map_file(int fd, unsigned long *length)
81{
82 void *fdm;
83
84 *length += MAD_BUFFER_GUARD;
85
86 fdm = mmap(0, *length, PROT_READ, MAP_SHARED, fd, 0);
87 if (fdm == MAP_FAILED)
88 return 0;
89
90# if defined(HAVE_MADVISE)
91 madvise(fdm, *length, MADV_SEQUENTIAL);
92# endif
93
94 return fdm;
95}
96
97
98static int unmap_file(void *fdm, unsigned long length)
99{
100 if (munmap(fdm, length) == -1)
101 return -1;
102
103 return 0;
104}
105# endif
106
107
108static inline QString tr( const char *str ) {
109 // Apparently this is okay from a plugin as it runs in the process space of the owner of the plugin
110 return qApp->translate( "MediaPlayer", str, "libmad strings for mp3 file info" );
111}
112
113
114class LibMadPluginData {
115public:
116 Input input;
117 Output output;
118 int bad_last_frame;
119 struct mad_stream stream;
120 struct mad_frame frame;
121 struct mad_synth synth;
122 bool flush;
123};
124
125
126LibMadPlugin::LibMadPlugin() {
127 d = new LibMadPluginData;
128 d->input.fd = 0;
129#if defined(HAVE_MMAP)
130 d->input.fdm = 0;
131#endif
132 d->input.data = 0;
133 d->flush = TRUE;
134 info = tr( "No Song Open" );
135}
136
137
138LibMadPlugin::~LibMadPlugin() {
139 close();
140 delete d;
141}
142
143
144bool LibMadPlugin::isFileSupported( const QString& path ) {
145 debugMsg( "LibMadPlugin::isFileSupported" );
146
147 // Mpeg file extensions
148 //"mp2","mp3","m1v","m2v","m2s","mpg","vob","mpeg","ac3"
149 // Other media extensions
150 // "wav","mid","mod","s3m","ogg","avi","mov","sid"
151
152 char *ext = strrchr( path.latin1(), '.' );
153
154 // Test file extension
155 if ( ext ) {
156 if ( strncasecmp(ext, ".mp2", 4) == 0 )
157 return TRUE;
158 if ( strncasecmp(ext, ".mp3", 4) == 0 )
159 return TRUE;
160 }
161
162 return FALSE;
163}
164
165
166bool LibMadPlugin::open( const QString& path ) {
167 debugMsg( "LibMadPlugin::open" );
168
169 d->bad_last_frame = 0;
170 d->flush = TRUE;
171 info = QString( "" );
172
173 //qDebug( "Opening %s", path.latin1() );
174
175 d->input.path = path.latin1();
176 d->input.fd = ::open( d->input.path, O_RDONLY );
177 if (d->input.fd == -1) {
178 qDebug("error opening %s", d->input.path );
179 return FALSE;
180 }
181
182 printID3Tags();
183
184#if defined(HAVE_MMAP)
185 struct stat stat;
186 if (fstat(d->input.fd, &stat) == -1) {
187 qDebug("error calling fstat"); return FALSE;
188 }
189 if (S_ISREG(stat.st_mode) && stat.st_size > 0) {
190 d->input.length = stat.st_size;
191 d->input.fdm = map_file(d->input.fd, &d->input.length);
192 if (d->input.fdm == 0) {
193 qDebug("error mmapping file"); return FALSE;
194 }
195 d->input.data = (unsigned char *)d->input.fdm;
196 }
197#endif
198
199 if (d->input.data == 0) {
200 d->input.data = (unsigned char *)malloc(MPEG_BUFFER_SIZE);
201 if (d->input.data == 0) {
202 qDebug("error allocating input buffer");
203 return FALSE;
204 }
205 d->input.length = 0;
206 }
207
208 d->input.eof = 0;
209
210 mad_stream_init(&d->stream);
211 mad_frame_init(&d->frame);
212 mad_synth_init(&d->synth);
213
214 return TRUE;
215}
216
217
218bool LibMadPlugin::close() {
219 debugMsg( "LibMadPlugin::close" );
220
221 int result = TRUE;
222
223 mad_synth_finish(&d->synth);
224 mad_frame_finish(&d->frame);
225 mad_stream_finish(&d->stream);
226
227#if defined(HAVE_MMAP)
228 if (d->input.fdm) {
229 if (unmap_file(d->input.fdm, d->input.length) == -1) {
230 qDebug("error munmapping file");
231 result = FALSE;
232 }
233 d->input.fdm = 0;
234 d->input.data = 0;
235 }
236#endif
237
238 if (d->input.data) {
239 free(d->input.data);
240 d->input.data = 0;
241 }
242
243 if (::close(d->input.fd) == -1) {
244 qDebug("error closing file %s", d->input.path);
245 result = FALSE;
246 }
247
248 d->input.fd = 0;
249
250 return result;
251}
252
253
254bool LibMadPlugin::isOpen() {
255 debugMsg( "LibMadPlugin::isOpen" );
256 return ( d->input.fd != 0 );
257}
258
259
260int LibMadPlugin::audioStreams() {
261 debugMsg( "LibMadPlugin::audioStreams" );
262 return 1;
263}
264
265
266int LibMadPlugin::audioChannels( int ) {
267 debugMsg( "LibMadPlugin::audioChannels" );
268/*
269 long t; short t1[5]; audioReadSamples( t1, 2, 1, t, 0 );
270 qDebug( "LibMadPlugin::audioChannels: %i", d->frame.header.mode > 0 ? 2 : 1 );
271 return d->frame.header.mode > 0 ? 2 : 1;
272*/
273 return 2;
274}
275
276
277int LibMadPlugin::audioFrequency( int ) {
278 debugMsg( "LibMadPlugin::audioFrequency" );
279 long t; short t1[5]; audioReadSamples( t1, 2, 1, t, 0 );
280 qDebug( "LibMadPlugin::audioFrequency: %i", d->frame.header.samplerate );
281 return d->frame.header.samplerate;
282}
283
284
285int LibMadPlugin::audioSamples( int ) {
286 debugMsg( "LibMadPlugin::audioSamples" );
287/*
288 long t; short t1[5]; audioReadSamples( t1, 2, 1, t, 0 );
289 mad_header_decode( (struct mad_header *)&d->frame.header, &d->stream );
290 qDebug( "LibMadPlugin::audioSamples: %i*%i", d->frame.header.duration.seconds, d->frame.header.samplerate );
291 return d->frame.header.duration.seconds * d->frame.header.samplerate;
292*/
293 return 10000000;
294}
295
296
297bool LibMadPlugin::audioSetSample( long, int ) {
298 debugMsg( "LibMadPlugin::audioSetSample" );
299 return FALSE;
300}
301
302
303long LibMadPlugin::audioGetSample( int ) {
304 debugMsg( "LibMadPlugin::audioGetSample" );
305 return 0;
306}
307
308/*
309bool LibMadPlugin::audioReadSamples( short *, int, long, int ) {
310 debugMsg( "LibMadPlugin::audioReadSamples" );
311 return FALSE;
312}
313
314
315bool LibMadPlugin::audioReReadSamples( short *, int, long, int ) {
316 debugMsg( "LibMadPlugin::audioReReadSamples" );
317 return FALSE;
318}
319*/
320
321bool LibMadPlugin::read() {
322 debugMsg( "LibMadPlugin::read" );
323 int len;
324
325 if (d->input.eof)
326 return FALSE;
327
328#if defined(HAVE_MMAP)
329 if (d->input.fdm) {
330 unsigned long skip = 0;
331
332 if (d->stream.next_frame) {
333 struct stat stat;
334
335 if (fstat(d->input.fd, &stat) == -1)
336 return FALSE;
337
338 if (stat.st_size + MAD_BUFFER_GUARD <= (signed)d->input.length)
339 return FALSE;
340
341 // file size changed; update memory map
342 skip = d->stream.next_frame - d->input.data;
343
344 if (unmap_file(d->input.fdm, d->input.length) == -1) {
345 d->input.fdm = 0;
346 d->input.data = 0;
347 return FALSE;
348 }
349
350 d->input.length = stat.st_size;
351
352 d->input.fdm = map_file(d->input.fd, &d->input.length);
353 if (d->input.fdm == 0) {
354 d->input.data = 0;
355 return FALSE;
356 }
357
358 d->input.data = (unsigned char *)d->input.fdm;
359 }
360
361 mad_stream_buffer(&d->stream, d->input.data + skip, d->input.length - skip);
362
363 } else
364#endif
365 {
366 if (d->stream.next_frame) {
367 memmove(d->input.data, d->stream.next_frame,
368 d->input.length = &d->input.data[d->input.length] - d->stream.next_frame);
369 }
370
371 do {
372 len = ::read(d->input.fd, d->input.data + d->input.length, MPEG_BUFFER_SIZE - d->input.length);
373 }
374 while (len == -1 && errno == EINTR);
375
376 if (len == -1) {
377 qDebug("error reading audio");
378 return FALSE;
379 }
380 else if (len == 0) {
381 d->input.eof = 1;
382
383 assert(MPEG_BUFFER_SIZE - d->input.length >= MAD_BUFFER_GUARD);
384
385 while (len < MAD_BUFFER_GUARD)
386 d->input.data[d->input.length + len++] = 0;
387 }
388
389 mad_stream_buffer(&d->stream, d->input.data, d->input.length += len);
390 }
391
392 return TRUE;
393}
394
395
396static mad_fixed_t left_err, right_err;
397static const int bits = 16;
398static const int shift = MAD_F_FRACBITS + 1 - bits;
399
400
401inline long audio_linear_dither( mad_fixed_t sample, mad_fixed_t& error )
402{
403 sample += error;
404 mad_fixed_t quantized = (sample >= MAD_F_ONE) ? MAD_F_ONE - 1 : ( (sample < -MAD_F_ONE) ? -MAD_F_ONE : sample );
405 quantized &= ~((1L << shift) - 1);
406 error = sample - quantized;
407 return quantized >> shift;
408}
409
410
411inline void audio_pcm( short *data, unsigned int nsamples, mad_fixed_t *left, mad_fixed_t *right )
412{
413 if ( right ) {
414 while (nsamples--) {
415 data[0] = audio_linear_dither( *left++, left_err );
416 data[1] = audio_linear_dither( *right++, right_err );
417 data += 2;
418 }
419 } else {
420 while (nsamples--) {
421 data[0] = data[1] = audio_linear_dither( *left++, left_err );
422 data += 2;
423 }
424 }
425}
426
427
428bool LibMadPlugin::decode( short *output, long samples, long& samplesMade ) {
429 debugMsg( "LibMadPlugin::decode" );
430
431 static int buffered = 0;
432 static mad_fixed_t buffer[2][65536 * 2];
433 int offset = buffered;
434 samplesMade = 0;
435
436 static int maxBuffered = 8000; // 65536;
437
438 if ( samples > maxBuffered )
439 samples = maxBuffered;
440
441 if ( d->flush ) {
442 buffered = 0;
443 offset = 0;
444 d->flush = FALSE;
445 }
446
447 while ( buffered < maxBuffered ) {
448
449 while (mad_frame_decode(&d->frame, &d->stream) == -1) {
450 if (!MAD_RECOVERABLE(d->stream.error)) {
451 debugMsg( "feed me" );
452 return FALSE; // Feed me
453 }
454 if ( d->stream.error == MAD_ERROR_BADCRC ) {
455 mad_frame_mute(&d->frame);
456 qDebug( "error decoding, bad crc" );
457 }
458 }
459
460 mad_synth_frame(&d->synth, &d->frame);
461 int decodedSamples = d->synth.pcm.length;
462 memcpy( &(buffer[0][offset]), d->synth.pcm.samples[0], decodedSamples * sizeof(mad_fixed_t) );
463 if ( d->synth.pcm.channels == 2 )
464 memcpy( &(buffer[1][offset]), d->synth.pcm.samples[1], decodedSamples * sizeof(mad_fixed_t) );
465 offset += decodedSamples;
466 buffered += decodedSamples;
467 }
468
469 audio_pcm( output, samples, buffer[0], (d->synth.pcm.channels == 2) ? buffer[1] : 0 );
470// audio_pcm( output, samples, buffer[1], buffer[0] );
471// audio_pcm( output, samples, buffer[0], buffer[1] );
472 samplesMade = samples;
473 memmove( buffer[0], &(buffer[0][samples]), (buffered - samples) * sizeof(mad_fixed_t) );
474 if ( d->synth.pcm.channels == 2 )
475 memmove( buffer[1], &(buffer[1][samples]), (buffered - samples) * sizeof(mad_fixed_t) );
476 buffered -= samples;
477
478 return TRUE;
479}
480
481/*
482bool LibMadPlugin::audioReadMonoSamples( short *, long, long&, int ) {
483 debugMsg( "LibMadPlugin::audioReadMonoSamples" );
484 return FALSE;
485}
486
487
488bool LibMadPlugin::audioReadStereoSamples( short *output, long samples, long& samplesMade, int ) {
489*/
490bool LibMadPlugin::audioReadSamples( short *output, int /*channels*/, long samples, long& samplesMade, int ) {
491 debugMsg( "LibMadPlugin::audioReadStereoSamples" );
492
493 static bool needInput = TRUE;
494
495 if ( samples == 0 )
496 return TRUE;
497
498 do {
499 if ( needInput )
500 if ( !read() ) {
501 // if ( d->input.eof )
502 // needInput = FALSE;
503 // else
504 return TRUE;
505 }
506
507 needInput = FALSE;
508
509 if ( decode( output, samples, samplesMade ) )
510 return FALSE;
511 else
512 needInput = TRUE;
513 }
514 while ( ( samplesMade < samples ) && ( !d->input.eof ) );
515/*
516 static bool firstTimeThru = TRUE;
517
518 if ( firstTimeThru ) {
519 firstTimeThru = FALSE;
520 decode( output, samples, samplesMade );
521 return FALSE;
522 } else
523*/
524 return TRUE;
525}
526
527
528double LibMadPlugin::getTime() {
529 debugMsg( "LibMadPlugin::getTime" );
530 return 0.0;
531}
532
533
534void LibMadPlugin::printID3Tags() {
535 debugMsg( "LibMadPlugin::printID3Tags" );
536
537 char id3v1[128 + 1];
538
539 if ( ::lseek( d->input.fd, -128, SEEK_END ) == -1 ) {
540 qDebug( "error seeking to id3 tags" );
541 return;
542 }
543
544 if ( ::read( d->input.fd, id3v1, 128 ) != 128 ) {
545 qDebug( "error reading in id3 tags" );
546 return;
547 }
548
549 if ( ::strncmp( (const char *)id3v1, "TAG", 3 ) != 0 ) {
550 debugMsg( "sorry, no id3 tags" );
551 } else {
552 int len[5] = { 30, 30, 30, 4, 30 };
553 QString label[5] = { tr( "Title" ), tr( "Artist" ), tr( "Album" ), tr( "Year" ), tr( "Comment" ) };
554 char *ptr = id3v1 + 3, *ptr2 = ptr + len[0];
555 qDebug( "ID3 tags in file:" );
556 info = "";
557 for ( int i = 0; i < 5; ptr += len[i], i++, ptr2 += len[i] ) {
558 char push = *ptr2;
559 *ptr2 = '\0';
560 char *ptr3 = ptr2;
561 while ( ptr3-1 >= ptr && isspace(ptr3[-1]) ) ptr3--;
562 char push2 = *ptr3; *ptr3 = '\0';
563 if ( strcmp( ptr, "" ) )
564 info += ( i != 0 ? ", " : "" ) + label[i] + ": " + ptr;
565 //qDebug( info.latin1() );
566 *ptr3 = push2;
567 *ptr2 = push;
568 }
569 if (id3v1[126] == 0 && id3v1[127] != 0)
570 info += tr( ", Track: " ) + id3v1[127];
571 }
572
573 if ( ::lseek(d->input.fd, 0, SEEK_SET) == -1 ) {
574 qDebug( "error seeking back to beginning" );
575 return;
576 }
577}
578
diff --git a/core/multimedia/opieplayer/libmad/libmadplugin.h b/core/multimedia/opieplayer/libmad/libmadplugin.h
new file mode 100644
index 0000000..88647ae
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/libmadplugin.h
@@ -0,0 +1,101 @@
1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3**
4** This file is part of Qtopia Environment.
5**
6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file.
10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15**
16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you.
18**
19**********************************************************************/
20#ifndef LIBMAD_PLUGIN_H
21#define LIBMAD_PLUGIN_H
22
23
24#include <qstring.h>
25#include "mediaplayerplugininterface.h"
26
27
28class LibMadPluginData;
29
30
31class LibMadPlugin : public MediaPlayerDecoder {
32
33public:
34 LibMadPlugin();
35 ~LibMadPlugin();
36
37 const char *pluginName() { return "LibMadPlugin"; }
38 const char *pluginComment() { return "This is the libmad library that has been wrapped as a plugin"; }
39 double pluginVersion() { return 1.0; }
40
41 bool isFileSupported( const QString& );
42 bool open( const QString& );
43 bool close();
44 bool isOpen();
45 const QString &fileInfo() { return info; }
46
47 // If decoder doesn't support audio then return 0 here
48 int audioStreams();
49 int audioChannels( int stream );
50 int audioFrequency( int stream );
51 int audioSamples( int stream );
52 bool audioSetSample( long sample, int stream );
53 long audioGetSample( int stream );
54// bool audioReadMonoSamples( short *output, long samples, long& samplesRead, int stream );
55// bool audioReadStereoSamples( short *output, long samples, long& samplesRead, int stream );
56 bool audioReadSamples( short *output, int channels, long samples, long& samplesRead, int stream );
57// bool audioReadSamples( short *output, int channel, long samples, int stream );
58// bool audioReReadSamples( short *output, int channel, long samples, int stream );
59
60
61 bool read();
62 bool decode( short *output, long samples, long& samplesRead );
63 void printID3Tags();
64
65
66 // If decoder doesn't support video then return 0 here
67 int videoStreams() { return 0; }
68 int videoWidth( int ) { return 0; }
69 int videoHeight( int ) { return 0; }
70 double videoFrameRate( int ) { return 0.0; }
71 int videoFrames( int ) { return 0; }
72 bool videoSetFrame( long, int ) { return FALSE; }
73 long videoGetFrame( int ) { return 0; }
74 bool videoReadFrame( unsigned char **, int, int, int, int, ColorFormat, int ) { return FALSE; }
75 bool videoReadScaledFrame( unsigned char **, int, int, int, int, int, int, ColorFormat, int ) { return FALSE; }
76 bool videoReadYUVFrame( char *, char *, char *, int, int, int, int, int ) { return FALSE; }
77
78 // Profiling
79 double getTime();
80
81 // Ignore if these aren't supported
82 bool setSMP( int ) { return FALSE; }
83 bool setMMX( bool ) { return FALSE; }
84
85 // Capabilities
86 bool supportsAudio() { return TRUE; }
87 bool supportsVideo() { return FALSE; }
88 bool supportsYUV() { return FALSE; }
89 bool supportsMMX() { return TRUE; }
90 bool supportsSMP() { return FALSE; }
91 bool supportsStereo() { return TRUE; }
92 bool supportsScaling() { return FALSE; }
93
94private:
95 LibMadPluginData *d;
96 QString info;
97
98};
99
100
101#endif
diff --git a/core/multimedia/opieplayer/libmad/libmadpluginimpl.cpp b/core/multimedia/opieplayer/libmad/libmadpluginimpl.cpp
new file mode 100644
index 0000000..028c658
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/libmadpluginimpl.cpp
@@ -0,0 +1,70 @@
1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3**
4** This file is part of Qtopia Environment.
5**
6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file.
10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15**
16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you.
18**
19**********************************************************************/
20#include "libmadplugin.h"
21#include "libmadpluginimpl.h"
22
23
24LibMadPluginImpl::LibMadPluginImpl()
25 : libmadplugin(0), ref(0)
26{
27}
28
29
30LibMadPluginImpl::~LibMadPluginImpl()
31{
32 if ( libmadplugin )
33 delete libmadplugin;
34}
35
36
37MediaPlayerDecoder *LibMadPluginImpl::decoder()
38{
39 if ( !libmadplugin )
40 libmadplugin = new LibMadPlugin;
41 return libmadplugin;
42}
43
44
45MediaPlayerEncoder *LibMadPluginImpl::encoder()
46{
47 return NULL;
48}
49
50
51#ifndef QT_NO_COMPONENT
52
53
54QRESULT LibMadPluginImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface )
55{
56 *iface = 0;
57 if ( ( uuid == IID_QUnknown ) || ( uuid == IID_MediaPlayerPlugin ) )
58 *iface = this, (*iface)->addRef();
59 return QS_OK;
60}
61
62
63Q_EXPORT_INTERFACE()
64{
65 Q_CREATE_INSTANCE( LibMadPluginImpl )
66}
67
68
69#endif
70
diff --git a/core/multimedia/opieplayer/libmad/libmadpluginimpl.h b/core/multimedia/opieplayer/libmad/libmadpluginimpl.h
new file mode 100644
index 0000000..a26b421
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/libmadpluginimpl.h
@@ -0,0 +1,53 @@
1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3**
4** This file is part of Qtopia Environment.
5**
6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file.
10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15**
16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you.
18**
19**********************************************************************/
20#ifndef LIBMAD_PLUGIN_IMPL_H
21#define LIBMAD_PLUGIN_IMPL_H
22
23
24#include "../mediaplayerplugininterface.h"
25
26
27class LibMadPlugin;
28
29
30class LibMadPluginImpl : public MediaPlayerPluginInterface
31{
32public:
33 LibMadPluginImpl();
34 virtual ~LibMadPluginImpl();
35
36#ifndef QT_NO_COMPONENT
37
38 QRESULT queryInterface( const QUuid&, QUnknownInterface** );
39 Q_REFCOUNT
40
41#endif
42
43 virtual MediaPlayerDecoder *decoder();
44 virtual MediaPlayerEncoder *encoder();
45
46private:
47 LibMadPlugin *libmadplugin;
48 ulong ref;
49};
50
51
52#endif
53
diff --git a/core/multimedia/opieplayer/libmad/mad.h b/core/multimedia/opieplayer/libmad/mad.h
new file mode 100644
index 0000000..9db9da3
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/mad.h
@@ -0,0 +1,830 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * If you would like to negotiate alternate licensing terms, you may do
20 * so by contacting the author: Robert Leslie <rob@mars.org>
21 */
22
23# define SIZEOF_INT 4
24# define SIZEOF_LONG 4
25# define SIZEOF_LONG_LONG 8
26
27/* Id: version.h,v 1.16 2001/04/05 04:57:11 rob Exp */
28
29# ifndef LIBMAD_VERSION_H
30# define LIBMAD_VERSION_H
31
32 # define MAD_VERSION_MAJOR0
33 # define MAD_VERSION_MINOR13
34 # define MAD_VERSION_PATCH0
35 # define MAD_VERSION_EXTRA" (beta)"
36
37 # define MAD_VERSION_STRINGIZE(str)#str
38 # define MAD_VERSION_STRING(num)MAD_VERSION_STRINGIZE(num)
39
40 # define MAD_VERSION MAD_VERSION_STRING(MAD_VERSION_MAJOR) "." \
41 MAD_VERSION_STRING(MAD_VERSION_MINOR) "." \
42 MAD_VERSION_STRING(MAD_VERSION_PATCH) \
43 MAD_VERSION_EXTRA
44
45 # define MAD_PUBLISHYEAR"2000-2001"
46 # define MAD_AUTHOR "Robert Leslie"
47 # define MAD_EMAIL "rob@mars.org"
48
49extern char const mad_version[];
50extern char const mad_copyright[];
51extern char const mad_author[];
52extern char const mad_build[];
53
54# endif
55
56/* Id: fixed.h,v 1.23 2001/04/05 04:57:11 rob Exp */
57
58# ifndef LIBMAD_FIXED_H
59# define LIBMAD_FIXED_H
60
61# if SIZEOF_INT >= 4
62typedef signed int mad_fixed_t;
63
64typedef signed int mad_fixed64hi_t;
65typedef unsigned int mad_fixed64lo_t;
66# else
67typedef signed long mad_fixed_t;
68
69typedef signed long mad_fixed64hi_t;
70typedef unsigned long mad_fixed64lo_t;
71# endif
72
73/*
74 * Fixed-point format: 0xABBBBBBB
75 * A == whole part (sign + 3 bits)
76 * B == fractional part (28 bits)
77 *
78 * Values are signed two's complement, so the effective range is:
79 * 0x80000000 to 0x7fffffff
80 * -8.0 to +7.9999999962747097015380859375
81 *
82 * The smallest representable value is:
83 * 0x00000001 == 0.0000000037252902984619140625 (i.e. about 3.725e-9)
84 *
85 * 28 bits of fractional accuracy represent about
86 * 8.6 digits of decimal accuracy.
87 *
88 * Fixed-point numbers can be added or subtracted as normal
89 * integers, but multiplication requires shifting the 64-bit result
90 * from 56 fractional bits back to 28 (and rounding.)
91 *
92 * Changing the definition of MAD_F_FRACBITS is only partially
93 * supported, and must be done with care.
94 */
95
96 # define MAD_F_FRACBITS 28
97
98# if MAD_F_FRACBITS == 28
99 # define MAD_F(x) ((mad_fixed_t) (x##L))
100# else
101# if MAD_F_FRACBITS < 28
102# warning "MAD_F_FRACBITS < 28"
103 # define MAD_F(x) ((mad_fixed_t) \
104 (((x##L) + \
105 (1L << (28 - MAD_F_FRACBITS - 1))) >> \
106 (28 - MAD_F_FRACBITS)))
107# elif MAD_F_FRACBITS > 28
108# error "MAD_F_FRACBITS > 28 not currently supported"
109 # define MAD_F(x) ((mad_fixed_t) \
110 ((x##L) << (MAD_F_FRACBITS - 28)))
111# endif
112# endif
113
114 # define MAD_F_MIN ((mad_fixed_t) -0x80000000L)
115 # define MAD_F_MAX ((mad_fixed_t) +0x7fffffffL)
116
117 # define MAD_F_ONE MAD_F(0x10000000)
118
119 # define mad_f_tofixed(x)((mad_fixed_t) \
120 ((x) * (double) (1L << MAD_F_FRACBITS) + 0.5))
121 # define mad_f_todouble(x)((double) \
122 ((x) / (double) (1L << MAD_F_FRACBITS)))
123
124 # define mad_f_intpart(x)((x) >> MAD_F_FRACBITS)
125 # define mad_f_fracpart(x)((x) & ((1L << MAD_F_FRACBITS) - 1))
126 /* (x should be positive) */
127
128 # define mad_f_fromint(x)((x) << MAD_F_FRACBITS)
129
130 # define mad_f_add(x, y)((x) + (y))
131 # define mad_f_sub(x, y)((x) - (y))
132
133# if defined(FPM_64BIT)
134
135/*
136 * This version should be the most accurate if 64-bit (long long) types are
137 * supported by the compiler, although it may not be the most efficient.
138 */
139# if defined(OPT_ACCURACY)
140# define mad_f_mul(x, y) \
141 ((mad_fixed_t) \
142 ((((signed long long) (x) * (y)) + \
143 (1L << (MAD_F_SCALEBITS - 1))) >> MAD_F_SCALEBITS))
144# else
145# define mad_f_mul(x, y) \
146 ((mad_fixed_t) (((signed long long) (x) * (y)) >> MAD_F_SCALEBITS))
147# endif
148
149# define MAD_F_SCALEBITS MAD_F_FRACBITS
150
151/* --- Intel --------------------------------------------------------------- */
152
153# elif defined(FPM_INTEL)
154
155/*
156 * This Intel version is fast and accurate; the disposition of the least
157 * significant bit depends on OPT_ACCURACY via mad_f_scale64().
158 */
159# define MAD_F_MLX(hi, lo, x, y) \
160 asm ("imull %3" \
161 : "=a" (lo), "=d" (hi) \
162 : "%a" (x), "rm" (y) \
163 : "cc")
164
165# if defined(OPT_ACCURACY)
166/*
167 * This gives best accuracy but is not very fast.
168 */
169# define MAD_F_MLA(hi, lo, x, y) \
170 ({ mad_fixed64hi_t __hi; \
171 mad_fixed64lo_t __lo; \
172 MAD_F_MLX(__hi, __lo, (x), (y)); \
173 asm ("addl %2,%0\n\t" \
174 "adcl %3,%1" \
175 : "=rm" (lo), "=rm" (hi) \
176 : "r" (__lo), "r" (__hi), "0" (lo), "1" (hi) \
177 : "cc"); \
178 })
179# endif /* OPT_ACCURACY */
180
181# if defined(OPT_ACCURACY)
182/*
183 * Surprisingly, this is faster than SHRD followed by ADC.
184 */
185# define mad_f_scale64(hi, lo) \
186 ({ mad_fixed64hi_t __hi_; \
187 mad_fixed64lo_t __lo_; \
188 mad_fixed_t __result; \
189 asm ("addl %4,%2\n\t" \
190 "adcl %5,%3" \
191 : "=rm" (__lo_), "=rm" (__hi_) \
192 : "0" (lo), "1" (hi), \
193 "ir" (1L << (MAD_F_SCALEBITS - 1)), "ir" (0) \
194 : "cc"); \
195 asm ("shrdl %3,%2,%1" \
196 : "=rm" (__result) \
197 : "0" (__lo_), "r" (__hi_), "I" (MAD_F_SCALEBITS) \
198 : "cc"); \
199 __result; \
200 })
201# else
202# define mad_f_scale64(hi, lo) \
203 ({ mad_fixed_t __result; \
204 asm ("shrdl %3,%2,%1" \
205 : "=rm" (__result) \
206 : "0" (lo), "r" (hi), "I" (MAD_F_SCALEBITS) \
207 : "cc"); \
208 __result; \
209 })
210# endif /* OPT_ACCURACY */
211
212# define MAD_F_SCALEBITS MAD_F_FRACBITS
213
214/* --- ARM ----------------------------------------------------------------- */
215
216# elif defined(FPM_ARM)
217
218/*
219 * This ARM V4 version is as accurate as FPM_64BIT but much faster. The
220 * least significant bit is properly rounded at no CPU cycle cost!
221 */
222# if 1
223/*
224 * There's a bug somewhere, possibly in the compiler, that sometimes makes
225 * this necessary instead of the default implementation via MAD_F_MLX and
226 * mad_f_scale64. It may be related to the use (or lack) of
227 * -finline-functions and/or -fstrength-reduce.
228 *
229 * This is also apparently faster than MAD_F_MLX/mad_f_scale64.
230 */
231# define mad_f_mul(x, y) \
232 ({ mad_fixed64hi_t __hi; \
233 mad_fixed64lo_t __lo; \
234 mad_fixed_t __result; \
235 asm ("smull%0, %1, %3, %4\n\t" \
236 "movs%0, %0, lsr %5\n\t" \
237 "adc%2, %0, %1, lsl %6" \
238 : "=&r" (__lo), "=&r" (__hi), "=r" (__result) \
239 : "%r" (x), "r" (y), \
240 "M" (MAD_F_SCALEBITS), "M" (32 - MAD_F_SCALEBITS) \
241 : "cc"); \
242 __result; \
243 })
244# endif
245
246# define MAD_F_MLX(hi, lo, x, y) \
247 asm ("smull%0, %1, %2, %3" \
248 : "=&r" (lo), "=&r" (hi) \
249 : "%r" (x), "r" (y))
250
251# define MAD_F_MLA(hi, lo, x, y) \
252 asm ("smlal%0, %1, %2, %3" \
253 : "+r" (lo), "+r" (hi) \
254 : "%r" (x), "r" (y))
255
256# define mad_f_scale64(hi, lo) \
257 ({ mad_fixed_t __result; \
258 asm ("movs%0, %1, lsr %3\n\t" \
259 "adc%0, %0, %2, lsl %4" \
260 : "=r" (__result) \
261 : "r" (lo), "r" (hi), \
262 "M" (MAD_F_SCALEBITS), "M" (32 - MAD_F_SCALEBITS) \
263 : "cc"); \
264 __result; \
265 })
266
267# define MAD_F_SCALEBITS MAD_F_FRACBITS
268
269/* --- MIPS ---------------------------------------------------------------- */
270
271# elif defined(FPM_MIPS)
272
273/*
274 * This MIPS version is fast and accurate; the disposition of the least
275 * significant bit depends on OPT_ACCURACY via mad_f_scale64().
276 */
277# define MAD_F_MLX(hi, lo, x, y) \
278 asm ("mult%2,%3" \
279 : "=l" (lo), "=h" (hi) \
280 : "%r" (x), "r" (y))
281
282# if defined(HAVE_MADD_ASM)
283# define MAD_F_MLA(hi, lo, x, y) \
284 asm ("madd%2,%3" \
285 : "+l" (lo), "+h" (hi) \
286 : "%r" (x), "r" (y))
287# elif defined(HAVE_MADD16_ASM)
288/*
289 * This loses significant accuracy due to the 16-bit integer limit in the
290 * multiply/accumulate instruction.
291 */
292# define MAD_F_ML0(hi, lo, x, y) \
293 asm ("mult%2,%3" \
294 : "=l" (lo), "=h" (hi) \
295 : "%r" ((x) >> 12), "r" ((y) >> 16))
296# define MAD_F_MLA(hi, lo, x, y) \
297 asm ("madd16%2,%3" \
298 : "+l" (lo), "+h" (hi) \
299 : "%r" ((x) >> 12), "r" ((y) >> 16))
300# define MAD_F_MLZ(hi, lo) ((mad_fixed_t) (lo))
301# endif
302
303# if defined(OPT_SPEED)
304# define mad_f_scale64(hi, lo) \
305 ((mad_fixed_t) ((hi) << (32 - MAD_F_SCALEBITS)))
306# define MAD_F_SCALEBITS MAD_F_FRACBITS
307# endif
308
309/* --- SPARC --------------------------------------------------------------- */
310
311# elif defined(FPM_SPARC)
312
313/*
314 * This SPARC V8 version is fast and accurate; the disposition of the least
315 * significant bit depends on OPT_ACCURACY via mad_f_scale64().
316 */
317# define MAD_F_MLX(hi, lo, x, y) \
318 asm ("smul %2, %3, %0\n\t" \
319 "rd %%y, %1" \
320 : "=r" (lo), "=r" (hi) \
321 : "%r" (x), "rI" (y))
322
323/* --- PowerPC ------------------------------------------------------------- */
324
325# elif defined(FPM_PPC)
326
327/*
328 * This PowerPC version is tuned for the 4xx embedded processors. It is
329 * effectively a tuned version of FPM_64BIT. It is a little faster and just
330 * as accurate. The disposition of the least significant bit depends on
331 * OPT_ACCURACY via mad_f_scale64().
332 */
333# define MAD_F_MLX(hi, lo, x, y) \
334 asm ("mulhw %1, %2, %3\n\t" \
335 "mullw %0, %2, %3" \
336 : "=&r" (lo), "=&r" (hi) \
337 : "%r" (x), "r" (y))
338
339# define MAD_F_MLA(hi, lo, x, y) \
340 ({ mad_fixed64hi_t __hi; \
341 mad_fixed64lo_t __lo; \
342 MAD_F_MLX(__hi, __lo, (x), (y)); \
343 asm ("addc %0, %2, %3\n\t" \
344 "adde %1, %4, %5" \
345 : "=r" (lo), "=r" (hi) \
346 : "%r" (__lo), "0" (lo), "%r" (__hi), "1" (hi)); \
347 })
348
349# if defined(OPT_ACCURACY)
350/*
351 * This is accurate and ~2 - 2.5 times slower than the unrounded version.
352 *
353 * The __volatile__ improves the generated code by another 5% (fewer spills
354 * to memory); eventually they should be removed.
355 */
356# define mad_f_scale64(hi, lo) \
357 ({ mad_fixed_t __result; \
358 mad_fixed64hi_t __hi_; \
359 mad_fixed64lo_t __lo_; \
360 asm __volatile__ ("addc %0, %2, %4\n\t" \
361 "addze %1, %3" \
362 : "=r" (__lo_), "=r" (__hi_) \
363 : "r" (lo), "r" (hi), "r" (1 << (MAD_F_SCALEBITS - 1))); \
364 asm __volatile__ ("rlwinm %0, %2,32-%3,0,%3-1\n\t" \
365 "rlwimi %0, %1,32-%3,%3,31" \
366 : "=&r" (__result) \
367 : "r" (__lo_), "r" (__hi_), "I" (MAD_F_SCALEBITS)); \
368 __result; \
369 })
370# else
371# define mad_f_scale64(hi, lo) \
372 ({ mad_fixed_t __result; \
373 asm ("rlwinm %0, %2,32-%3,0,%3-1\n\t" \
374 "rlwimi %0, %1,32-%3,%3,31" \
375 : "=r" (__result) \
376 : "r" (lo), "r" (hi), "I" (MAD_F_SCALEBITS)); \
377 __result; \
378 })
379# endif /* OPT_ACCURACY */
380
381# define MAD_F_SCALEBITS MAD_F_FRACBITS
382
383/* --- Default ------------------------------------------------------------- */
384
385# elif defined(FPM_DEFAULT)
386
387/*
388 * This version is the most portable but it loses significant accuracy.
389 * Furthermore, accuracy is biased against the second argument, so care
390 * should be taken when ordering operands.
391 *
392 * The scale factors are constant as this is not used with SSO.
393 *
394 * Pre-rounding is required to stay within the limits of compliance.
395 */
396 # define mad_f_mul(x, y)((((x) + (1L << 11)) >> 12) * \
397 (((y) + (1L << 15)) >> 16))
398
399/* ------------------------------------------------------------------------- */
400
401# else
402# error "no FPM selected"
403# endif
404
405/* default implementations */
406
407# if !defined(mad_f_mul)
408# define mad_f_mul(x, y) \
409 ({ mad_fixed64hi_t __hi; \
410 mad_fixed64lo_t __lo; \
411 MAD_F_MLX(__hi, __lo, (x), (y)); \
412 mad_f_scale64(__hi, __lo); \
413 })
414# endif
415
416# if !defined(MAD_F_MLA)
417 # define MAD_F_ML0(hi, lo, x, y)((lo) = mad_f_mul((x), (y)))
418 # define MAD_F_MLA(hi, lo, x, y)((lo) += mad_f_mul((x), (y)))
419 # define MAD_F_MLZ(hi, lo) ((void) (hi), (mad_fixed_t) (lo))
420# endif
421
422# if !defined(MAD_F_ML0)
423 # define MAD_F_ML0(hi, lo, x, y)MAD_F_MLX((hi), (lo), (x), (y))
424# endif
425
426# if !defined(MAD_F_MLZ)
427 # define MAD_F_MLZ(hi, lo) mad_f_scale64((hi), (lo))
428# endif
429
430# if !defined(mad_f_scale64)
431# if defined(OPT_ACCURACY)
432# define mad_f_scale64(hi, lo) \
433 ((((mad_fixed_t) \
434 (((hi) << (32 - (MAD_F_SCALEBITS - 1))) | \
435 ((lo) >> (MAD_F_SCALEBITS - 1)))) + 1) >> 1)
436# else
437# define mad_f_scale64(hi, lo) \
438 ((mad_fixed_t) \
439 (((hi) << (32 - MAD_F_SCALEBITS)) | \
440 ((lo) >> MAD_F_SCALEBITS)))
441# endif
442# define MAD_F_SCALEBITS MAD_F_FRACBITS
443# endif
444
445/* miscellaneous C routines */
446
447mad_fixed_t mad_f_abs(mad_fixed_t);
448
449# endif
450
451/* Id: bit.h,v 1.7 2001/04/05 04:57:11 rob Exp */
452
453# ifndef LIBMAD_BIT_H
454# define LIBMAD_BIT_H
455
456struct mad_bitptr {
457 unsigned char const *byte;
458 unsigned short cache;
459 unsigned short left;
460};
461
462void mad_bit_init(struct mad_bitptr *, unsigned char const *);
463
464 # define mad_bit_finish(bitptr) /* nothing */
465
466unsigned int mad_bit_length(struct mad_bitptr const *,
467 struct mad_bitptr const *);
468
469# define mad_bit_bitsleft(bitptr) ((bitptr)->left)
470unsigned char const *mad_bit_nextbyte(struct mad_bitptr const *);
471
472void mad_bit_skip(struct mad_bitptr *, unsigned int);
473unsigned long mad_bit_read(struct mad_bitptr *, unsigned int);
474void mad_bit_write(struct mad_bitptr *, unsigned int, unsigned long);
475
476unsigned short mad_bit_crc(struct mad_bitptr, unsigned int, unsigned short);
477
478# endif
479
480/* Id: timer.h,v 1.10 2001/04/05 04:57:11 rob Exp */
481
482# ifndef LIBMAD_TIMER_H
483# define LIBMAD_TIMER_H
484
485typedef struct {
486 signed long seconds; /* whole seconds */
487 unsigned long fraction;/* 1/MAD_TIMER_RESOLUTION seconds */
488} mad_timer_t;
489
490extern mad_timer_t const mad_timer_zero;
491
492 # define MAD_TIMER_RESOLUTION352800000UL
493
494enum mad_units {
495 MAD_UNITS_HOURS = -2,
496 MAD_UNITS_MINUTES = -1,
497 MAD_UNITS_SECONDS = 0,
498
499 /* metric units */
500
501 MAD_UNITS_DECISECONDS = 10,
502 MAD_UNITS_CENTISECONDS = 100,
503 MAD_UNITS_MILLISECONDS = 1000,
504
505 /* audio sample units */
506
507 MAD_UNITS_8000_HZ = 8000,
508 MAD_UNITS_11025_HZ = 11025,
509 MAD_UNITS_12000_HZ = 12000,
510
511 MAD_UNITS_16000_HZ = 16000,
512 MAD_UNITS_22050_HZ = 22050,
513 MAD_UNITS_24000_HZ = 24000,
514
515 MAD_UNITS_32000_HZ = 32000,
516 MAD_UNITS_44100_HZ = 44100,
517 MAD_UNITS_48000_HZ = 48000,
518
519 /* video frame/field units */
520
521 MAD_UNITS_24_FPS = 24,
522 MAD_UNITS_25_FPS = 25,
523 MAD_UNITS_30_FPS = 30,
524 MAD_UNITS_48_FPS = 48,
525 MAD_UNITS_50_FPS = 50,
526 MAD_UNITS_60_FPS = 60,
527
528 /* CD audio frames */
529
530 MAD_UNITS_75_FPS = 75,
531
532 /* video drop-frame units */
533
534 MAD_UNITS_23_976_FPS = -24,
535 MAD_UNITS_24_975_FPS = -25,
536 MAD_UNITS_29_97_FPS = -30,
537 MAD_UNITS_47_952_FPS = -48,
538 MAD_UNITS_49_95_FPS = -50,
539 MAD_UNITS_59_94_FPS = -60
540};
541
542 # define mad_timer_reset(timer)(*(timer) = mad_timer_zero)
543
544int mad_timer_compare(mad_timer_t, mad_timer_t);
545
546 # define mad_timer_sign(timer)mad_timer_compare((timer), mad_timer_zero)
547
548void mad_timer_negate(mad_timer_t *);
549mad_timer_t mad_timer_abs(mad_timer_t);
550
551void mad_timer_set(mad_timer_t *, unsigned long, unsigned long, unsigned long);
552void mad_timer_add(mad_timer_t *, mad_timer_t);
553void mad_timer_multiply(mad_timer_t *, signed long);
554
555signed long mad_timer_count(mad_timer_t, enum mad_units);
556unsigned long mad_timer_fraction(mad_timer_t, unsigned long);
557void mad_timer_string(mad_timer_t, char *, char const *,
558 enum mad_units, enum mad_units, unsigned long);
559
560# endif
561
562/* Id: stream.h,v 1.12 2001/04/10 05:18:21 rob Exp */
563
564# ifndef LIBMAD_STREAM_H
565# define LIBMAD_STREAM_H
566
567 # define MAD_BUFFER_GUARD8
568 # define MAD_BUFFER_MDLEN(511 + 2048 + MAD_BUFFER_GUARD)
569
570enum mad_error {
571 MAD_ERROR_BUFLEN = 0x0001,/* input buffer too small (or EOF) */
572 MAD_ERROR_BUFPTR = 0x0002,/* invalid (null) buffer pointer */
573
574 MAD_ERROR_NOMEM = 0x0031,/* not enough memory */
575
576 MAD_ERROR_LOSTSYNC = 0x0101,/* lost synchronization */
577 MAD_ERROR_BADLAYER = 0x0102,/* reserved header layer value */
578 MAD_ERROR_BADBITRATE = 0x0103,/* forbidden bitrate value */
579 MAD_ERROR_BADSAMPLERATE = 0x0104,/* reserved sample frequency value */
580 MAD_ERROR_BADEMPHASIS = 0x0105,/* reserved emphasis value */
581
582 MAD_ERROR_BADCRC = 0x0201,/* CRC check failed */
583 MAD_ERROR_BADBITALLOC = 0x0211,/* forbidden bit allocation value */
584 MAD_ERROR_BADSCALEFACTOR = 0x0221,/* bad scalefactor index */
585 MAD_ERROR_BADFRAMELEN = 0x0231,/* bad frame length */
586 MAD_ERROR_BADBIGVALUES = 0x0232,/* bad big_values count */
587 MAD_ERROR_BADBLOCKTYPE = 0x0233,/* reserved block_type */
588 MAD_ERROR_BADSCFSI = 0x0234,/* bad scalefactor selection info */
589 MAD_ERROR_BADDATAPTR = 0x0235,/* bad main_data_begin pointer */
590 MAD_ERROR_BADPART3LEN = 0x0236,/* bad audio data length */
591 MAD_ERROR_BADHUFFTABLE = 0x0237,/* bad Huffman table select */
592 MAD_ERROR_BADHUFFDATA = 0x0238,/* Huffman data overrun */
593 MAD_ERROR_BADSTEREO = 0x0239/* incompatible block_type for JS */
594};
595
596 # define MAD_RECOVERABLE(error)((error) & 0xff00)
597
598struct mad_stream {
599 unsigned char const *buffer; /* input bitstream buffer */
600 unsigned char const *bufend; /* end of buffer */
601 unsigned long skiplen; /* bytes to skip before next frame */
602
603 int sync; /* stream sync found */
604 unsigned long freerate; /* free bitrate (fixed) */
605
606 unsigned char const *this_frame;/* start of current frame */
607 unsigned char const *next_frame;/* start of next frame */
608 struct mad_bitptr ptr; /* current processing bit pointer */
609
610 struct mad_bitptr anc_ptr; /* ancillary bits pointer */
611 unsigned int anc_bitlen; /* number of ancillary bits */
612
613 unsigned char (*main_data)[MAD_BUFFER_MDLEN];
614 /* Layer III main_data() */
615 unsigned int md_len; /* bytes in main_data */
616
617 int options; /* decoding options (see below) */
618 enum mad_error error; /* error code (see above) */
619};
620
621enum {
622 MAD_OPTION_IGNORECRC = 0x0001,/* ignore CRC errors */
623 MAD_OPTION_HALFSAMPLERATE = 0x0002,/* generate PCM at 1/2 sample rate */
624# if 0 /* not yet implemented */
625 MAD_OPTION_LEFTCHANNEL = 0x0010,/* decode left channel only */
626 MAD_OPTION_RIGHTCHANNEL = 0x0020,/* decode right channel only */
627 MAD_OPTION_SINGLECHANNEL = 0x0030,/* combine channels */
628# endif
629};
630
631void mad_stream_init(struct mad_stream *);
632void mad_stream_finish(struct mad_stream *);
633
634# define mad_stream_options(stream, opts) ((stream)->options = (opts))
635
636void mad_stream_buffer(struct mad_stream *,
637 unsigned char const *, unsigned long);
638void mad_stream_skip(struct mad_stream *, unsigned long);
639
640int mad_stream_sync(struct mad_stream *);
641
642# endif
643
644/* Id: frame.h,v 1.13 2001/04/05 04:57:11 rob Exp */
645
646# ifndef LIBMAD_FRAME_H
647# define LIBMAD_FRAME_H
648
649enum mad_layer {
650 MAD_LAYER_I = 1, /* Layer I */
651 MAD_LAYER_II = 2, /* Layer II */
652 MAD_LAYER_III = 3 /* Layer III */
653};
654
655enum mad_mode {
656 MAD_MODE_SINGLE_CHANNEL = 0, /* single channel */
657 MAD_MODE_DUAL_CHANNEL = 1, /* dual channel */
658 MAD_MODE_JOINT_STEREO = 2, /* joint (MS/intensity) stereo */
659 MAD_MODE_STEREO = 3 /* normal LR stereo */
660};
661
662enum mad_emphasis {
663 MAD_EMPHASIS_NONE = 0, /* no emphasis */
664 MAD_EMPHASIS_50_15_US = 1, /* 50/15 microseconds emphasis */
665 MAD_EMPHASIS_CCITT_J_17 = 3 /* CCITT J.17 emphasis */
666};
667
668struct mad_frame {
669 struct mad_header {
670 enum mad_layer layer; /* audio layer (1, 2, or 3) */
671 enum mad_mode mode; /* channel mode (see above) */
672 int mode_extension; /* additional mode info */
673 enum mad_emphasis emphasis; /* de-emphasis to use (see above) */
674
675 unsigned long bitrate; /* stream bitrate (bps) */
676 unsigned int samplerate; /* sampling frequency (Hz) */
677
678 unsigned short crc_check; /* frame CRC accumulator */
679 unsigned short crc_target; /* final target CRC checksum */
680
681 int flags; /* flags (see below) */
682 int private_bits; /* private bits (see below) */
683
684 mad_timer_t duration; /* audio playing time of frame */
685 } header;
686
687 int options; /* decoding options (from stream) */
688
689 mad_fixed_t sbsample[2][36][32];/* synthesis subband filter samples */
690 mad_fixed_t (*overlap)[2][32][18];/* Layer III block overlap data */
691};
692
693 # define MAD_NCHANNELS(header) ((header)->mode ? 2 : 1)
694# define MAD_NSBSAMPLES(header) \
695 ((header)->layer == MAD_LAYER_I ? 12 : \
696 (((header)->layer == MAD_LAYER_III && \
697 ((header)->flags & MAD_FLAG_LSF_EXT)) ? 18 : 36))
698
699enum {
700 MAD_FLAG_NPRIVATE_III = 0x0007,/* number of Layer III private bits */
701 MAD_FLAG_INCOMPLETE = 0x0008,/* header but not data is decoded */
702
703 MAD_FLAG_PROTECTION = 0x0010,/* frame has CRC protection */
704 MAD_FLAG_COPYRIGHT = 0x0020,/* frame is copyright */
705 MAD_FLAG_ORIGINAL = 0x0040,/* frame is original (else copy) */
706 MAD_FLAG_PADDING = 0x0080,/* frame has additional slot */
707
708 MAD_FLAG_I_STEREO = 0x0100,/* uses intensity joint stereo */
709 MAD_FLAG_MS_STEREO = 0x0200,/* uses middle/side joint stereo */
710 MAD_FLAG_FREEFORMAT = 0x0400,/* uses free format bitrate */
711
712 MAD_FLAG_LSF_EXT = 0x1000,/* lower sampling freq. extension */
713 MAD_FLAG_MC_EXT = 0x2000,/* multichannel audio extension */
714 MAD_FLAG_MPEG_2_5_EXT = 0x4000/* MPEG 2.5 (unofficial) extension */
715};
716
717enum {
718 MAD_PRIVATE_HEADER = 0x0100,/* header private bit */
719 MAD_PRIVATE_III = 0x001f/* Layer III private bits (up to 5) */
720};
721
722void mad_header_init(struct mad_header *);
723
724# define mad_header_finish(header) /* nothing */
725
726int mad_header_decode(struct mad_header *, struct mad_stream *);
727
728void mad_frame_init(struct mad_frame *);
729void mad_frame_finish(struct mad_frame *);
730
731int mad_frame_decode(struct mad_frame *, struct mad_stream *);
732
733void mad_frame_mute(struct mad_frame *);
734
735# endif
736
737/* Id: synth.h,v 1.8 2001/04/05 04:57:11 rob Exp */
738
739# ifndef LIBMAD_SYNTH_H
740# define LIBMAD_SYNTH_H
741
742struct mad_synth {
743 mad_fixed_t filter[2][2][2][16][8];/* polyphase filterbank outputs */
744 /* [ch][eo][peo][s][v] */
745
746 unsigned int phase; /* current processing phase */
747
748 struct mad_pcm {
749 unsigned int samplerate; /* sampling frequency (Hz) */
750 unsigned short channels; /* number of channels */
751 unsigned short length; /* number of samples per channel */
752 mad_fixed_t samples[2][1152];/* PCM output samples */
753 } pcm;
754};
755
756void mad_synth_init(struct mad_synth *);
757
758# define mad_synth_finish(synth) /* nothing */
759
760void mad_synth_mute(struct mad_synth *);
761
762void mad_synth_frame(struct mad_synth *, struct mad_frame const *);
763
764# endif
765
766/* Id: decoder.h,v 1.9 2001/04/05 04:57:11 rob Exp */
767
768# ifndef LIBMAD_DECODER_H
769# define LIBMAD_DECODER_H
770
771enum mad_decoder_mode {
772 MAD_DECODER_MODE_SYNC = 0,
773 MAD_DECODER_MODE_ASYNC
774};
775
776enum mad_flow {
777 MAD_FLOW_CONTINUE = 0x0000,
778 MAD_FLOW_STOP = 0x0010,
779 MAD_FLOW_BREAK = 0x0011,
780 MAD_FLOW_IGNORE = 0x0020
781};
782
783struct mad_decoder {
784 enum mad_decoder_mode mode;
785
786 int options;
787
788 struct {
789 long pid;
790 int in;
791 int out;
792 } async;
793
794 struct {
795 struct mad_stream stream;
796 struct mad_frame frame;
797 struct mad_synth synth;
798 } *sync;
799
800 void *cb_data;
801
802 enum mad_flow (*input_func)(void *, struct mad_stream *);
803 enum mad_flow (*header_func)(void *, struct mad_header const *);
804 enum mad_flow (*filter_func)(void *, struct mad_frame *);
805 enum mad_flow (*output_func)(void *,
806 struct mad_header const *, struct mad_pcm *);
807 enum mad_flow (*error_func)(void *, struct mad_stream *, struct mad_frame *);
808 enum mad_flow (*message_func)(void *, void *, unsigned int *);
809};
810
811void mad_decoder_init(struct mad_decoder *, void *,
812 enum mad_flow (*)(void *, struct mad_stream *),
813 enum mad_flow (*)(void *, struct mad_header const *),
814 enum mad_flow (*)(void *, struct mad_frame *),
815 enum mad_flow (*)(void *,
816 struct mad_header const *,
817 struct mad_pcm *),
818 enum mad_flow (*)(void *,
819 struct mad_stream *,
820 struct mad_frame *),
821 enum mad_flow (*)(void *, void *, unsigned int *));
822int mad_decoder_finish(struct mad_decoder *);
823
824# define mad_decoder_options(decoder, opts) ((decoder)->options = (opts))
825
826int mad_decoder_run(struct mad_decoder *, enum mad_decoder_mode);
827int mad_decoder_message(struct mad_decoder *, void *, unsigned int *);
828
829# endif
830
diff --git a/core/multimedia/opieplayer/libmad/qc_table.dat b/core/multimedia/opieplayer/libmad/qc_table.dat
new file mode 100644
index 0000000..92b7f38
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/qc_table.dat
@@ -0,0 +1,77 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22/*
23 * These are the Layer II classes of quantization.
24 * The table is derived from Table B.4 of ISO/IEC 11172-3.
25 */
26
27 { 3, 2, 5,
28 MAD_F(0x15555555) /* 1.33333333333 => 1.33333333209, e 0.00000000124 */,
29 MAD_F(0x08000000) /* 0.50000000000 => 0.50000000000, e 0.00000000000 */ },
30 { 5, 3, 7,
31 MAD_F(0x1999999a) /* 1.60000000000 => 1.60000000149, e -0.00000000149 */,
32 MAD_F(0x08000000) /* 0.50000000000 => 0.50000000000, e 0.00000000000 */ },
33 { 7, 0, 3,
34 MAD_F(0x12492492) /* 1.14285714286 => 1.14285714179, e 0.00000000107 */,
35 MAD_F(0x04000000) /* 0.25000000000 => 0.25000000000, e 0.00000000000 */ },
36 { 9, 4, 10,
37 MAD_F(0x1c71c71c) /* 1.77777777777 => 1.77777777612, e 0.00000000165 */,
38 MAD_F(0x08000000) /* 0.50000000000 => 0.50000000000, e 0.00000000000 */ },
39 { 15, 0, 4,
40 MAD_F(0x11111111) /* 1.06666666666 => 1.06666666642, e 0.00000000024 */,
41 MAD_F(0x02000000) /* 0.12500000000 => 0.12500000000, e 0.00000000000 */ },
42 { 31, 0, 5,
43 MAD_F(0x10842108) /* 1.03225806452 => 1.03225806355, e 0.00000000097 */,
44 MAD_F(0x01000000) /* 0.06250000000 => 0.06250000000, e 0.00000000000 */ },
45 { 63, 0, 6,
46 MAD_F(0x10410410) /* 1.01587301587 => 1.01587301493, e 0.00000000094 */,
47 MAD_F(0x00800000) /* 0.03125000000 => 0.03125000000, e 0.00000000000 */ },
48 { 127, 0, 7,
49 MAD_F(0x10204081) /* 1.00787401575 => 1.00787401572, e 0.00000000003 */,
50 MAD_F(0x00400000) /* 0.01562500000 => 0.01562500000, e 0.00000000000 */ },
51 { 255, 0, 8,
52 MAD_F(0x10101010) /* 1.00392156863 => 1.00392156839, e 0.00000000024 */,
53 MAD_F(0x00200000) /* 0.00781250000 => 0.00781250000, e 0.00000000000 */ },
54 { 511, 0, 9,
55 MAD_F(0x10080402) /* 1.00195694716 => 1.00195694715, e 0.00000000001 */,
56 MAD_F(0x00100000) /* 0.00390625000 => 0.00390625000, e 0.00000000000 */ },
57 { 1023, 0, 10,
58 MAD_F(0x10040100) /* 1.00097751711 => 1.00097751617, e 0.00000000094 */,
59 MAD_F(0x00080000) /* 0.00195312500 => 0.00195312500, e 0.00000000000 */ },
60 { 2047, 0, 11,
61 MAD_F(0x10020040) /* 1.00048851979 => 1.00048851967, e 0.00000000012 */,
62 MAD_F(0x00040000) /* 0.00097656250 => 0.00097656250, e 0.00000000000 */ },
63 { 4095, 0, 12,
64 MAD_F(0x10010010) /* 1.00024420024 => 1.00024420023, e 0.00000000001 */,
65 MAD_F(0x00020000) /* 0.00048828125 => 0.00048828125, e 0.00000000000 */ },
66 { 8191, 0, 13,
67 MAD_F(0x10008004) /* 1.00012208522 => 1.00012208521, e 0.00000000001 */,
68 MAD_F(0x00010000) /* 0.00024414063 => 0.00024414062, e 0.00000000000 */ },
69 { 16383, 0, 14,
70 MAD_F(0x10004001) /* 1.00006103888 => 1.00006103888, e -0.00000000000 */,
71 MAD_F(0x00008000) /* 0.00012207031 => 0.00012207031, e -0.00000000000 */ },
72 { 32767, 0, 15,
73 MAD_F(0x10002000) /* 1.00003051851 => 1.00003051758, e 0.00000000093 */,
74 MAD_F(0x00004000) /* 0.00006103516 => 0.00006103516, e 0.00000000000 */ },
75 { 65535, 0, 16,
76 MAD_F(0x10001000) /* 1.00001525902 => 1.00001525879, e 0.00000000023 */,
77 MAD_F(0x00002000) /* 0.00003051758 => 0.00003051758, e 0.00000000000 */ }
diff --git a/core/multimedia/opieplayer/libmad/qpe-libmadplugin.control b/core/multimedia/opieplayer/libmad/qpe-libmadplugin.control
new file mode 100644
index 0000000..077350c
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/qpe-libmadplugin.control
@@ -0,0 +1,9 @@
1Files: plugins/codecs/libmadplugin.so.1.0.0 plugins/codecs/libmadplugin.so.1.0 plugins/codecs/libmadplugin.so.1 plugins/codecs/libmadplugin.so
2Priority: optional
3Section: qpe/plugins
4Maintainer: John Ryland <jryland@trolltech.com>
5Architecture: arm
6Version: $QPE_VERSION-3
7Depends: qpe-base ($QPE_VERSION)
8Description: MP3 file plugin using libmad
9 Plugin to play MP3 files with the mediaplayer in the Qtopia environment.
diff --git a/core/multimedia/opieplayer/libmad/rq_table.dat b/core/multimedia/opieplayer/libmad/rq_table.dat
new file mode 100644
index 0000000..b6d1634
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/rq_table.dat
@@ -0,0 +1,8747 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22/*
23 * This is the lookup table used to compute x^(4/3) for Layer III
24 * requantization. To maintain the best possible accuracy, the value is
25 * stored as a normalized mantissa with exponent. The requantization
26 * algorithm recombines these parts with appropriate scaling.
27 */
28
29 /* 0 */ { MAD_F(0x00000000) /* 0.000000000 */, 0 },
30 /* 1 */ { MAD_F(0x04000000) /* 0.250000000 */, 2 },
31 /* 2 */ { MAD_F(0x050a28be) /* 0.314980262 */, 3 },
32 /* 3 */ { MAD_F(0x0453a5cd) /* 0.270421794 */, 4 },
33 /* 4 */ { MAD_F(0x06597fa9) /* 0.396850263 */, 4 },
34 /* 5 */ { MAD_F(0x04466275) /* 0.267183742 */, 5 },
35 /* 6 */ { MAD_F(0x05738c72) /* 0.340710111 */, 5 },
36 /* 7 */ { MAD_F(0x06b1fc81) /* 0.418453696 */, 5 },
37 /* 8 */ { MAD_F(0x04000000) /* 0.250000000 */, 6 },
38 /* 9 */ { MAD_F(0x04ae20d7) /* 0.292511788 */, 6 },
39 /* 10 */ { MAD_F(0x0562d694) /* 0.336630420 */, 6 },
40 /* 11 */ { MAD_F(0x061dae96) /* 0.382246578 */, 6 },
41 /* 12 */ { MAD_F(0x06de47f4) /* 0.429267841 */, 6 },
42 /* 13 */ { MAD_F(0x07a44f7a) /* 0.477614858 */, 6 },
43 /* 14 */ { MAD_F(0x0437be65) /* 0.263609310 */, 7 },
44 /* 15 */ { MAD_F(0x049fc824) /* 0.289009227 */, 7 },
45
46 /* 16 */ { MAD_F(0x050a28be) /* 0.314980262 */, 7 },
47 /* 17 */ { MAD_F(0x0576c6f5) /* 0.341498336 */, 7 },
48 /* 18 */ { MAD_F(0x05e58c0b) /* 0.368541759 */, 7 },
49 /* 19 */ { MAD_F(0x06566361) /* 0.396090870 */, 7 },
50 /* 20 */ { MAD_F(0x06c93a2e) /* 0.424127753 */, 7 },
51 /* 21 */ { MAD_F(0x073dff3e) /* 0.452635998 */, 7 },
52 /* 22 */ { MAD_F(0x07b4a2bc) /* 0.481600510 */, 7 },
53 /* 23 */ { MAD_F(0x04168b05) /* 0.255503674 */, 8 },
54 /* 24 */ { MAD_F(0x0453a5cd) /* 0.270421794 */, 8 },
55 /* 25 */ { MAD_F(0x04919b6a) /* 0.285548607 */, 8 },
56 /* 26 */ { MAD_F(0x04d065fb) /* 0.300878507 */, 8 },
57 /* 27 */ { MAD_F(0x05100000) /* 0.316406250 */, 8 },
58 /* 28 */ { MAD_F(0x05506451) /* 0.332126919 */, 8 },
59 /* 29 */ { MAD_F(0x05918e15) /* 0.348035890 */, 8 },
60 /* 30 */ { MAD_F(0x05d378bb) /* 0.364128809 */, 8 },
61 /* 31 */ { MAD_F(0x06161ff3) /* 0.380401563 */, 8 },
62
63 /* 32 */ { MAD_F(0x06597fa9) /* 0.396850263 */, 8 },
64 /* 33 */ { MAD_F(0x069d9400) /* 0.413471222 */, 8 },
65 /* 34 */ { MAD_F(0x06e2594c) /* 0.430260942 */, 8 },
66 /* 35 */ { MAD_F(0x0727cc11) /* 0.447216097 */, 8 },
67 /* 36 */ { MAD_F(0x076de8fc) /* 0.464333519 */, 8 },
68 /* 37 */ { MAD_F(0x07b4ace3) /* 0.481610189 */, 8 },
69 /* 38 */ { MAD_F(0x07fc14bf) /* 0.499043224 */, 8 },
70 /* 39 */ { MAD_F(0x04220ed7) /* 0.258314934 */, 9 },
71 /* 40 */ { MAD_F(0x04466275) /* 0.267183742 */, 9 },
72 /* 41 */ { MAD_F(0x046b03e7) /* 0.276126771 */, 9 },
73 /* 42 */ { MAD_F(0x048ff1e8) /* 0.285142811 */, 9 },
74 /* 43 */ { MAD_F(0x04b52b3f) /* 0.294230696 */, 9 },
75 /* 44 */ { MAD_F(0x04daaec0) /* 0.303389310 */, 9 },
76 /* 45 */ { MAD_F(0x05007b49) /* 0.312617576 */, 9 },
77 /* 46 */ { MAD_F(0x05268fc6) /* 0.321914457 */, 9 },
78 /* 47 */ { MAD_F(0x054ceb2a) /* 0.331278957 */, 9 },
79
80 /* 48 */ { MAD_F(0x05738c72) /* 0.340710111 */, 9 },
81 /* 49 */ { MAD_F(0x059a72a5) /* 0.350206992 */, 9 },
82 /* 50 */ { MAD_F(0x05c19cd3) /* 0.359768701 */, 9 },
83 /* 51 */ { MAD_F(0x05e90a12) /* 0.369394372 */, 9 },
84 /* 52 */ { MAD_F(0x0610b982) /* 0.379083164 */, 9 },
85 /* 53 */ { MAD_F(0x0638aa48) /* 0.388834268 */, 9 },
86 /* 54 */ { MAD_F(0x0660db91) /* 0.398646895 */, 9 },
87 /* 55 */ { MAD_F(0x06894c90) /* 0.408520284 */, 9 },
88 /* 56 */ { MAD_F(0x06b1fc81) /* 0.418453696 */, 9 },
89 /* 57 */ { MAD_F(0x06daeaa1) /* 0.428446415 */, 9 },
90 /* 58 */ { MAD_F(0x07041636) /* 0.438497744 */, 9 },
91 /* 59 */ { MAD_F(0x072d7e8b) /* 0.448607009 */, 9 },
92 /* 60 */ { MAD_F(0x075722ef) /* 0.458773552 */, 9 },
93 /* 61 */ { MAD_F(0x078102b8) /* 0.468996735 */, 9 },
94 /* 62 */ { MAD_F(0x07ab1d3e) /* 0.479275937 */, 9 },
95 /* 63 */ { MAD_F(0x07d571e0) /* 0.489610555 */, 9 },
96
97 /* 64 */ { MAD_F(0x04000000) /* 0.250000000 */, 10 },
98 /* 65 */ { MAD_F(0x04156381) /* 0.255221850 */, 10 },
99 /* 66 */ { MAD_F(0x042ae32a) /* 0.260470548 */, 10 },
100 /* 67 */ { MAD_F(0x04407eb1) /* 0.265745823 */, 10 },
101 /* 68 */ { MAD_F(0x045635cf) /* 0.271047409 */, 10 },
102 /* 69 */ { MAD_F(0x046c083e) /* 0.276375048 */, 10 },
103 /* 70 */ { MAD_F(0x0481f5bb) /* 0.281728487 */, 10 },
104 /* 71 */ { MAD_F(0x0497fe03) /* 0.287107481 */, 10 },
105 /* 72 */ { MAD_F(0x04ae20d7) /* 0.292511788 */, 10 },
106 /* 73 */ { MAD_F(0x04c45df6) /* 0.297941173 */, 10 },
107 /* 74 */ { MAD_F(0x04dab524) /* 0.303395408 */, 10 },
108 /* 75 */ { MAD_F(0x04f12624) /* 0.308874267 */, 10 },
109 /* 76 */ { MAD_F(0x0507b0bc) /* 0.314377532 */, 10 },
110 /* 77 */ { MAD_F(0x051e54b1) /* 0.319904987 */, 10 },
111 /* 78 */ { MAD_F(0x053511cb) /* 0.325456423 */, 10 },
112 /* 79 */ { MAD_F(0x054be7d4) /* 0.331031635 */, 10 },
113
114 /* 80 */ { MAD_F(0x0562d694) /* 0.336630420 */, 10 },
115 /* 81 */ { MAD_F(0x0579ddd8) /* 0.342252584 */, 10 },
116 /* 82 */ { MAD_F(0x0590fd6c) /* 0.347897931 */, 10 },
117 /* 83 */ { MAD_F(0x05a8351c) /* 0.353566275 */, 10 },
118 /* 84 */ { MAD_F(0x05bf84b8) /* 0.359257429 */, 10 },
119 /* 85 */ { MAD_F(0x05d6ec0e) /* 0.364971213 */, 10 },
120 /* 86 */ { MAD_F(0x05ee6aef) /* 0.370707448 */, 10 },
121 /* 87 */ { MAD_F(0x0606012b) /* 0.376465960 */, 10 },
122 /* 88 */ { MAD_F(0x061dae96) /* 0.382246578 */, 10 },
123 /* 89 */ { MAD_F(0x06357302) /* 0.388049134 */, 10 },
124 /* 90 */ { MAD_F(0x064d4e43) /* 0.393873464 */, 10 },
125 /* 91 */ { MAD_F(0x0665402d) /* 0.399719406 */, 10 },
126 /* 92 */ { MAD_F(0x067d4896) /* 0.405586801 */, 10 },
127 /* 93 */ { MAD_F(0x06956753) /* 0.411475493 */, 10 },
128 /* 94 */ { MAD_F(0x06ad9c3d) /* 0.417385331 */, 10 },
129 /* 95 */ { MAD_F(0x06c5e72b) /* 0.423316162 */, 10 },
130
131 /* 96 */ { MAD_F(0x06de47f4) /* 0.429267841 */, 10 },
132 /* 97 */ { MAD_F(0x06f6be73) /* 0.435240221 */, 10 },
133 /* 98 */ { MAD_F(0x070f4a80) /* 0.441233161 */, 10 },
134 /* 99 */ { MAD_F(0x0727ebf7) /* 0.447246519 */, 10 },
135 /* 100 */ { MAD_F(0x0740a2b2) /* 0.453280160 */, 10 },
136 /* 101 */ { MAD_F(0x07596e8d) /* 0.459333946 */, 10 },
137 /* 102 */ { MAD_F(0x07724f64) /* 0.465407744 */, 10 },
138 /* 103 */ { MAD_F(0x078b4514) /* 0.471501425 */, 10 },
139 /* 104 */ { MAD_F(0x07a44f7a) /* 0.477614858 */, 10 },
140 /* 105 */ { MAD_F(0x07bd6e75) /* 0.483747918 */, 10 },
141 /* 106 */ { MAD_F(0x07d6a1e2) /* 0.489900479 */, 10 },
142 /* 107 */ { MAD_F(0x07efe9a1) /* 0.496072418 */, 10 },
143 /* 108 */ { MAD_F(0x0404a2c9) /* 0.251131807 */, 11 },
144 /* 109 */ { MAD_F(0x04115aca) /* 0.254236974 */, 11 },
145 /* 110 */ { MAD_F(0x041e1cc4) /* 0.257351652 */, 11 },
146 /* 111 */ { MAD_F(0x042ae8a7) /* 0.260475783 */, 11 },
147
148 /* 112 */ { MAD_F(0x0437be65) /* 0.263609310 */, 11 },
149 /* 113 */ { MAD_F(0x04449dee) /* 0.266752177 */, 11 },
150 /* 114 */ { MAD_F(0x04518733) /* 0.269904329 */, 11 },
151 /* 115 */ { MAD_F(0x045e7a26) /* 0.273065710 */, 11 },
152 /* 116 */ { MAD_F(0x046b76b9) /* 0.276236269 */, 11 },
153 /* 117 */ { MAD_F(0x04787cdc) /* 0.279415952 */, 11 },
154 /* 118 */ { MAD_F(0x04858c83) /* 0.282604707 */, 11 },
155 /* 119 */ { MAD_F(0x0492a59f) /* 0.285802482 */, 11 },
156 /* 120 */ { MAD_F(0x049fc824) /* 0.289009227 */, 11 },
157 /* 121 */ { MAD_F(0x04acf402) /* 0.292224893 */, 11 },
158 /* 122 */ { MAD_F(0x04ba292e) /* 0.295449429 */, 11 },
159 /* 123 */ { MAD_F(0x04c7679a) /* 0.298682788 */, 11 },
160 /* 124 */ { MAD_F(0x04d4af3a) /* 0.301924921 */, 11 },
161 /* 125 */ { MAD_F(0x04e20000) /* 0.305175781 */, 11 },
162 /* 126 */ { MAD_F(0x04ef59e0) /* 0.308435322 */, 11 },
163 /* 127 */ { MAD_F(0x04fcbcce) /* 0.311703498 */, 11 },
164
165 /* 128 */ { MAD_F(0x050a28be) /* 0.314980262 */, 11 },
166 /* 129 */ { MAD_F(0x05179da4) /* 0.318265572 */, 11 },
167 /* 130 */ { MAD_F(0x05251b73) /* 0.321559381 */, 11 },
168 /* 131 */ { MAD_F(0x0532a220) /* 0.324861647 */, 11 },
169 /* 132 */ { MAD_F(0x054031a0) /* 0.328172327 */, 11 },
170 /* 133 */ { MAD_F(0x054dc9e7) /* 0.331491377 */, 11 },
171 /* 134 */ { MAD_F(0x055b6ae9) /* 0.334818756 */, 11 },
172 /* 135 */ { MAD_F(0x0569149c) /* 0.338154423 */, 11 },
173 /* 136 */ { MAD_F(0x0576c6f5) /* 0.341498336 */, 11 },
174 /* 137 */ { MAD_F(0x058481e9) /* 0.344850455 */, 11 },
175 /* 138 */ { MAD_F(0x0592456d) /* 0.348210741 */, 11 },
176 /* 139 */ { MAD_F(0x05a01176) /* 0.351579152 */, 11 },
177 /* 140 */ { MAD_F(0x05ade5fa) /* 0.354955651 */, 11 },
178 /* 141 */ { MAD_F(0x05bbc2ef) /* 0.358340200 */, 11 },
179 /* 142 */ { MAD_F(0x05c9a84a) /* 0.361732758 */, 11 },
180 /* 143 */ { MAD_F(0x05d79601) /* 0.365133291 */, 11 },
181
182 /* 144 */ { MAD_F(0x05e58c0b) /* 0.368541759 */, 11 },
183 /* 145 */ { MAD_F(0x05f38a5d) /* 0.371958126 */, 11 },
184 /* 146 */ { MAD_F(0x060190ee) /* 0.375382356 */, 11 },
185 /* 147 */ { MAD_F(0x060f9fb3) /* 0.378814413 */, 11 },
186 /* 148 */ { MAD_F(0x061db6a5) /* 0.382254261 */, 11 },
187 /* 149 */ { MAD_F(0x062bd5b8) /* 0.385701865 */, 11 },
188 /* 150 */ { MAD_F(0x0639fce4) /* 0.389157191 */, 11 },
189 /* 151 */ { MAD_F(0x06482c1f) /* 0.392620204 */, 11 },
190 /* 152 */ { MAD_F(0x06566361) /* 0.396090870 */, 11 },
191 /* 153 */ { MAD_F(0x0664a2a0) /* 0.399569155 */, 11 },
192 /* 154 */ { MAD_F(0x0672e9d4) /* 0.403055027 */, 11 },
193 /* 155 */ { MAD_F(0x068138f3) /* 0.406548452 */, 11 },
194 /* 156 */ { MAD_F(0x068f8ff5) /* 0.410049398 */, 11 },
195 /* 157 */ { MAD_F(0x069deed1) /* 0.413557833 */, 11 },
196 /* 158 */ { MAD_F(0x06ac557f) /* 0.417073724 */, 11 },
197 /* 159 */ { MAD_F(0x06bac3f6) /* 0.420597041 */, 11 },
198
199 /* 160 */ { MAD_F(0x06c93a2e) /* 0.424127753 */, 11 },
200 /* 161 */ { MAD_F(0x06d7b81f) /* 0.427665827 */, 11 },
201 /* 162 */ { MAD_F(0x06e63dc0) /* 0.431211234 */, 11 },
202 /* 163 */ { MAD_F(0x06f4cb09) /* 0.434763944 */, 11 },
203 /* 164 */ { MAD_F(0x07035ff3) /* 0.438323927 */, 11 },
204 /* 165 */ { MAD_F(0x0711fc75) /* 0.441891153 */, 11 },
205 /* 166 */ { MAD_F(0x0720a087) /* 0.445465593 */, 11 },
206 /* 167 */ { MAD_F(0x072f4c22) /* 0.449047217 */, 11 },
207 /* 168 */ { MAD_F(0x073dff3e) /* 0.452635998 */, 11 },
208 /* 169 */ { MAD_F(0x074cb9d3) /* 0.456231906 */, 11 },
209 /* 170 */ { MAD_F(0x075b7bdb) /* 0.459834914 */, 11 },
210 /* 171 */ { MAD_F(0x076a454c) /* 0.463444993 */, 11 },
211 /* 172 */ { MAD_F(0x07791620) /* 0.467062117 */, 11 },
212 /* 173 */ { MAD_F(0x0787ee50) /* 0.470686258 */, 11 },
213 /* 174 */ { MAD_F(0x0796cdd4) /* 0.474317388 */, 11 },
214 /* 175 */ { MAD_F(0x07a5b4a5) /* 0.477955481 */, 11 },
215
216 /* 176 */ { MAD_F(0x07b4a2bc) /* 0.481600510 */, 11 },
217 /* 177 */ { MAD_F(0x07c39812) /* 0.485252449 */, 11 },
218 /* 178 */ { MAD_F(0x07d294a0) /* 0.488911273 */, 11 },
219 /* 179 */ { MAD_F(0x07e1985f) /* 0.492576954 */, 11 },
220 /* 180 */ { MAD_F(0x07f0a348) /* 0.496249468 */, 11 },
221 /* 181 */ { MAD_F(0x07ffb554) /* 0.499928790 */, 11 },
222 /* 182 */ { MAD_F(0x0407673f) /* 0.251807447 */, 12 },
223 /* 183 */ { MAD_F(0x040ef75e) /* 0.253653877 */, 12 },
224 /* 184 */ { MAD_F(0x04168b05) /* 0.255503674 */, 12 },
225 /* 185 */ { MAD_F(0x041e2230) /* 0.257356825 */, 12 },
226 /* 186 */ { MAD_F(0x0425bcdd) /* 0.259213318 */, 12 },
227 /* 187 */ { MAD_F(0x042d5b07) /* 0.261073141 */, 12 },
228 /* 188 */ { MAD_F(0x0434fcad) /* 0.262936282 */, 12 },
229 /* 189 */ { MAD_F(0x043ca1c9) /* 0.264802730 */, 12 },
230 /* 190 */ { MAD_F(0x04444a5a) /* 0.266672472 */, 12 },
231 /* 191 */ { MAD_F(0x044bf65d) /* 0.268545497 */, 12 },
232
233 /* 192 */ { MAD_F(0x0453a5cd) /* 0.270421794 */, 12 },
234 /* 193 */ { MAD_F(0x045b58a9) /* 0.272301352 */, 12 },
235 /* 194 */ { MAD_F(0x04630eed) /* 0.274184158 */, 12 },
236 /* 195 */ { MAD_F(0x046ac896) /* 0.276070203 */, 12 },
237 /* 196 */ { MAD_F(0x047285a2) /* 0.277959474 */, 12 },
238 /* 197 */ { MAD_F(0x047a460c) /* 0.279851960 */, 12 },
239 /* 198 */ { MAD_F(0x048209d3) /* 0.281747652 */, 12 },
240 /* 199 */ { MAD_F(0x0489d0f4) /* 0.283646538 */, 12 },
241 /* 200 */ { MAD_F(0x04919b6a) /* 0.285548607 */, 12 },
242 /* 201 */ { MAD_F(0x04996935) /* 0.287453849 */, 12 },
243 /* 202 */ { MAD_F(0x04a13a50) /* 0.289362253 */, 12 },
244 /* 203 */ { MAD_F(0x04a90eba) /* 0.291273810 */, 12 },
245 /* 204 */ { MAD_F(0x04b0e66e) /* 0.293188507 */, 12 },
246 /* 205 */ { MAD_F(0x04b8c16c) /* 0.295106336 */, 12 },
247 /* 206 */ { MAD_F(0x04c09faf) /* 0.297027285 */, 12 },
248 /* 207 */ { MAD_F(0x04c88135) /* 0.298951346 */, 12 },
249
250 /* 208 */ { MAD_F(0x04d065fb) /* 0.300878507 */, 12 },
251 /* 209 */ { MAD_F(0x04d84dff) /* 0.302808759 */, 12 },
252 /* 210 */ { MAD_F(0x04e0393e) /* 0.304742092 */, 12 },
253 /* 211 */ { MAD_F(0x04e827b6) /* 0.306678497 */, 12 },
254 /* 212 */ { MAD_F(0x04f01963) /* 0.308617963 */, 12 },
255 /* 213 */ { MAD_F(0x04f80e44) /* 0.310560480 */, 12 },
256 /* 214 */ { MAD_F(0x05000655) /* 0.312506041 */, 12 },
257 /* 215 */ { MAD_F(0x05080195) /* 0.314454634 */, 12 },
258 /* 216 */ { MAD_F(0x05100000) /* 0.316406250 */, 12 },
259 /* 217 */ { MAD_F(0x05180194) /* 0.318360880 */, 12 },
260 /* 218 */ { MAD_F(0x0520064f) /* 0.320318516 */, 12 },
261 /* 219 */ { MAD_F(0x05280e2d) /* 0.322279147 */, 12 },
262 /* 220 */ { MAD_F(0x0530192e) /* 0.324242764 */, 12 },
263 /* 221 */ { MAD_F(0x0538274e) /* 0.326209359 */, 12 },
264 /* 222 */ { MAD_F(0x0540388a) /* 0.328178922 */, 12 },
265 /* 223 */ { MAD_F(0x05484ce2) /* 0.330151445 */, 12 },
266
267 /* 224 */ { MAD_F(0x05506451) /* 0.332126919 */, 12 },
268 /* 225 */ { MAD_F(0x05587ed5) /* 0.334105334 */, 12 },
269 /* 226 */ { MAD_F(0x05609c6e) /* 0.336086683 */, 12 },
270 /* 227 */ { MAD_F(0x0568bd17) /* 0.338070956 */, 12 },
271 /* 228 */ { MAD_F(0x0570e0cf) /* 0.340058145 */, 12 },
272 /* 229 */ { MAD_F(0x05790793) /* 0.342048241 */, 12 },
273 /* 230 */ { MAD_F(0x05813162) /* 0.344041237 */, 12 },
274 /* 231 */ { MAD_F(0x05895e39) /* 0.346037122 */, 12 },
275 /* 232 */ { MAD_F(0x05918e15) /* 0.348035890 */, 12 },
276 /* 233 */ { MAD_F(0x0599c0f4) /* 0.350037532 */, 12 },
277 /* 234 */ { MAD_F(0x05a1f6d5) /* 0.352042040 */, 12 },
278 /* 235 */ { MAD_F(0x05aa2fb5) /* 0.354049405 */, 12 },
279 /* 236 */ { MAD_F(0x05b26b92) /* 0.356059619 */, 12 },
280 /* 237 */ { MAD_F(0x05baaa69) /* 0.358072674 */, 12 },
281 /* 238 */ { MAD_F(0x05c2ec39) /* 0.360088563 */, 12 },
282 /* 239 */ { MAD_F(0x05cb3100) /* 0.362107278 */, 12 },
283
284 /* 240 */ { MAD_F(0x05d378bb) /* 0.364128809 */, 12 },
285 /* 241 */ { MAD_F(0x05dbc368) /* 0.366153151 */, 12 },
286 /* 242 */ { MAD_F(0x05e41105) /* 0.368180294 */, 12 },
287 /* 243 */ { MAD_F(0x05ec6190) /* 0.370210231 */, 12 },
288 /* 244 */ { MAD_F(0x05f4b507) /* 0.372242955 */, 12 },
289 /* 245 */ { MAD_F(0x05fd0b68) /* 0.374278458 */, 12 },
290 /* 246 */ { MAD_F(0x060564b1) /* 0.376316732 */, 12 },
291 /* 247 */ { MAD_F(0x060dc0e0) /* 0.378357769 */, 12 },
292 /* 248 */ { MAD_F(0x06161ff3) /* 0.380401563 */, 12 },
293 /* 249 */ { MAD_F(0x061e81e8) /* 0.382448106 */, 12 },
294 /* 250 */ { MAD_F(0x0626e6bc) /* 0.384497391 */, 12 },
295 /* 251 */ { MAD_F(0x062f4e6f) /* 0.386549409 */, 12 },
296 /* 252 */ { MAD_F(0x0637b8fd) /* 0.388604155 */, 12 },
297 /* 253 */ { MAD_F(0x06402666) /* 0.390661620 */, 12 },
298 /* 254 */ { MAD_F(0x064896a7) /* 0.392721798 */, 12 },
299 /* 255 */ { MAD_F(0x065109be) /* 0.394784681 */, 12 },
300
301 /* 256 */ { MAD_F(0x06597fa9) /* 0.396850263 */, 12 },
302 /* 257 */ { MAD_F(0x0661f867) /* 0.398918536 */, 12 },
303 /* 258 */ { MAD_F(0x066a73f5) /* 0.400989493 */, 12 },
304 /* 259 */ { MAD_F(0x0672f252) /* 0.403063128 */, 12 },
305 /* 260 */ { MAD_F(0x067b737c) /* 0.405139433 */, 12 },
306 /* 261 */ { MAD_F(0x0683f771) /* 0.407218402 */, 12 },
307 /* 262 */ { MAD_F(0x068c7e2f) /* 0.409300027 */, 12 },
308 /* 263 */ { MAD_F(0x069507b5) /* 0.411384303 */, 12 },
309 /* 264 */ { MAD_F(0x069d9400) /* 0.413471222 */, 12 },
310 /* 265 */ { MAD_F(0x06a6230f) /* 0.415560778 */, 12 },
311 /* 266 */ { MAD_F(0x06aeb4e0) /* 0.417652964 */, 12 },
312 /* 267 */ { MAD_F(0x06b74971) /* 0.419747773 */, 12 },
313 /* 268 */ { MAD_F(0x06bfe0c0) /* 0.421845199 */, 12 },
314 /* 269 */ { MAD_F(0x06c87acc) /* 0.423945235 */, 12 },
315 /* 270 */ { MAD_F(0x06d11794) /* 0.426047876 */, 12 },
316 /* 271 */ { MAD_F(0x06d9b714) /* 0.428153114 */, 12 },
317
318 /* 272 */ { MAD_F(0x06e2594c) /* 0.430260942 */, 12 },
319 /* 273 */ { MAD_F(0x06eafe3a) /* 0.432371356 */, 12 },
320 /* 274 */ { MAD_F(0x06f3a5dc) /* 0.434484348 */, 12 },
321 /* 275 */ { MAD_F(0x06fc5030) /* 0.436599912 */, 12 },
322 /* 276 */ { MAD_F(0x0704fd35) /* 0.438718042 */, 12 },
323 /* 277 */ { MAD_F(0x070dacea) /* 0.440838732 */, 12 },
324 /* 278 */ { MAD_F(0x07165f4b) /* 0.442961975 */, 12 },
325 /* 279 */ { MAD_F(0x071f1459) /* 0.445087765 */, 12 },
326 /* 280 */ { MAD_F(0x0727cc11) /* 0.447216097 */, 12 },
327 /* 281 */ { MAD_F(0x07308671) /* 0.449346964 */, 12 },
328 /* 282 */ { MAD_F(0x07394378) /* 0.451480360 */, 12 },
329 /* 283 */ { MAD_F(0x07420325) /* 0.453616280 */, 12 },
330 /* 284 */ { MAD_F(0x074ac575) /* 0.455754717 */, 12 },
331 /* 285 */ { MAD_F(0x07538a67) /* 0.457895665 */, 12 },
332 /* 286 */ { MAD_F(0x075c51fa) /* 0.460039119 */, 12 },
333 /* 287 */ { MAD_F(0x07651c2c) /* 0.462185072 */, 12 },
334
335 /* 288 */ { MAD_F(0x076de8fc) /* 0.464333519 */, 12 },
336 /* 289 */ { MAD_F(0x0776b867) /* 0.466484455 */, 12 },
337 /* 290 */ { MAD_F(0x077f8a6d) /* 0.468637872 */, 12 },
338 /* 291 */ { MAD_F(0x07885f0b) /* 0.470793767 */, 12 },
339 /* 292 */ { MAD_F(0x07913641) /* 0.472952132 */, 12 },
340 /* 293 */ { MAD_F(0x079a100c) /* 0.475112962 */, 12 },
341 /* 294 */ { MAD_F(0x07a2ec6c) /* 0.477276252 */, 12 },
342 /* 295 */ { MAD_F(0x07abcb5f) /* 0.479441997 */, 12 },
343 /* 296 */ { MAD_F(0x07b4ace3) /* 0.481610189 */, 12 },
344 /* 297 */ { MAD_F(0x07bd90f6) /* 0.483780825 */, 12 },
345 /* 298 */ { MAD_F(0x07c67798) /* 0.485953899 */, 12 },
346 /* 299 */ { MAD_F(0x07cf60c7) /* 0.488129404 */, 12 },
347 /* 300 */ { MAD_F(0x07d84c81) /* 0.490307336 */, 12 },
348 /* 301 */ { MAD_F(0x07e13ac5) /* 0.492487690 */, 12 },
349 /* 302 */ { MAD_F(0x07ea2b92) /* 0.494670459 */, 12 },
350 /* 303 */ { MAD_F(0x07f31ee6) /* 0.496855639 */, 12 },
351
352 /* 304 */ { MAD_F(0x07fc14bf) /* 0.499043224 */, 12 },
353 /* 305 */ { MAD_F(0x0402868e) /* 0.250616605 */, 13 },
354 /* 306 */ { MAD_F(0x040703ff) /* 0.251712795 */, 13 },
355 /* 307 */ { MAD_F(0x040b82b0) /* 0.252810180 */, 13 },
356 /* 308 */ { MAD_F(0x041002a1) /* 0.253908756 */, 13 },
357 /* 309 */ { MAD_F(0x041483d1) /* 0.255008523 */, 13 },
358 /* 310 */ { MAD_F(0x04190640) /* 0.256109476 */, 13 },
359 /* 311 */ { MAD_F(0x041d89ed) /* 0.257211614 */, 13 },
360 /* 312 */ { MAD_F(0x04220ed7) /* 0.258314934 */, 13 },
361 /* 313 */ { MAD_F(0x042694fe) /* 0.259419433 */, 13 },
362 /* 314 */ { MAD_F(0x042b1c60) /* 0.260525110 */, 13 },
363 /* 315 */ { MAD_F(0x042fa4fe) /* 0.261631960 */, 13 },
364 /* 316 */ { MAD_F(0x04342ed7) /* 0.262739982 */, 13 },
365 /* 317 */ { MAD_F(0x0438b9e9) /* 0.263849174 */, 13 },
366 /* 318 */ { MAD_F(0x043d4635) /* 0.264959533 */, 13 },
367 /* 319 */ { MAD_F(0x0441d3b9) /* 0.266071056 */, 13 },
368
369 /* 320 */ { MAD_F(0x04466275) /* 0.267183742 */, 13 },
370 /* 321 */ { MAD_F(0x044af269) /* 0.268297587 */, 13 },
371 /* 322 */ { MAD_F(0x044f8393) /* 0.269412589 */, 13 },
372 /* 323 */ { MAD_F(0x045415f3) /* 0.270528746 */, 13 },
373 /* 324 */ { MAD_F(0x0458a989) /* 0.271646056 */, 13 },
374 /* 325 */ { MAD_F(0x045d3e53) /* 0.272764515 */, 13 },
375 /* 326 */ { MAD_F(0x0461d451) /* 0.273884123 */, 13 },
376 /* 327 */ { MAD_F(0x04666b83) /* 0.275004875 */, 13 },
377 /* 328 */ { MAD_F(0x046b03e7) /* 0.276126771 */, 13 },
378 /* 329 */ { MAD_F(0x046f9d7e) /* 0.277249808 */, 13 },
379 /* 330 */ { MAD_F(0x04743847) /* 0.278373983 */, 13 },
380 /* 331 */ { MAD_F(0x0478d440) /* 0.279499294 */, 13 },
381 /* 332 */ { MAD_F(0x047d716a) /* 0.280625739 */, 13 },
382 /* 333 */ { MAD_F(0x04820fc3) /* 0.281753315 */, 13 },
383 /* 334 */ { MAD_F(0x0486af4c) /* 0.282882021 */, 13 },
384 /* 335 */ { MAD_F(0x048b5003) /* 0.284011853 */, 13 },
385
386 /* 336 */ { MAD_F(0x048ff1e8) /* 0.285142811 */, 13 },
387 /* 337 */ { MAD_F(0x049494fb) /* 0.286274891 */, 13 },
388 /* 338 */ { MAD_F(0x0499393a) /* 0.287408091 */, 13 },
389 /* 339 */ { MAD_F(0x049ddea5) /* 0.288542409 */, 13 },
390 /* 340 */ { MAD_F(0x04a2853c) /* 0.289677844 */, 13 },
391 /* 341 */ { MAD_F(0x04a72cfe) /* 0.290814392 */, 13 },
392 /* 342 */ { MAD_F(0x04abd5ea) /* 0.291952051 */, 13 },
393 /* 343 */ { MAD_F(0x04b08000) /* 0.293090820 */, 13 },
394 /* 344 */ { MAD_F(0x04b52b3f) /* 0.294230696 */, 13 },
395 /* 345 */ { MAD_F(0x04b9d7a7) /* 0.295371678 */, 13 },
396 /* 346 */ { MAD_F(0x04be8537) /* 0.296513762 */, 13 },
397 /* 347 */ { MAD_F(0x04c333ee) /* 0.297656947 */, 13 },
398 /* 348 */ { MAD_F(0x04c7e3cc) /* 0.298801231 */, 13 },
399 /* 349 */ { MAD_F(0x04cc94d1) /* 0.299946611 */, 13 },
400 /* 350 */ { MAD_F(0x04d146fb) /* 0.301093085 */, 13 },
401 /* 351 */ { MAD_F(0x04d5fa4b) /* 0.302240653 */, 13 },
402
403 /* 352 */ { MAD_F(0x04daaec0) /* 0.303389310 */, 13 },
404 /* 353 */ { MAD_F(0x04df6458) /* 0.304539056 */, 13 },
405 /* 354 */ { MAD_F(0x04e41b14) /* 0.305689888 */, 13 },
406 /* 355 */ { MAD_F(0x04e8d2f3) /* 0.306841804 */, 13 },
407 /* 356 */ { MAD_F(0x04ed8bf5) /* 0.307994802 */, 13 },
408 /* 357 */ { MAD_F(0x04f24618) /* 0.309148880 */, 13 },
409 /* 358 */ { MAD_F(0x04f7015d) /* 0.310304037 */, 13 },
410 /* 359 */ { MAD_F(0x04fbbdc3) /* 0.311460269 */, 13 },
411 /* 360 */ { MAD_F(0x05007b49) /* 0.312617576 */, 13 },
412 /* 361 */ { MAD_F(0x050539ef) /* 0.313775954 */, 13 },
413 /* 362 */ { MAD_F(0x0509f9b4) /* 0.314935403 */, 13 },
414 /* 363 */ { MAD_F(0x050eba98) /* 0.316095920 */, 13 },
415 /* 364 */ { MAD_F(0x05137c9a) /* 0.317257503 */, 13 },
416 /* 365 */ { MAD_F(0x05183fba) /* 0.318420150 */, 13 },
417 /* 366 */ { MAD_F(0x051d03f7) /* 0.319583859 */, 13 },
418 /* 367 */ { MAD_F(0x0521c950) /* 0.320748629 */, 13 },
419
420 /* 368 */ { MAD_F(0x05268fc6) /* 0.321914457 */, 13 },
421 /* 369 */ { MAD_F(0x052b5757) /* 0.323081342 */, 13 },
422 /* 370 */ { MAD_F(0x05302003) /* 0.324249281 */, 13 },
423 /* 371 */ { MAD_F(0x0534e9ca) /* 0.325418273 */, 13 },
424 /* 372 */ { MAD_F(0x0539b4ab) /* 0.326588316 */, 13 },
425 /* 373 */ { MAD_F(0x053e80a6) /* 0.327759407 */, 13 },
426 /* 374 */ { MAD_F(0x05434db9) /* 0.328931546 */, 13 },
427 /* 375 */ { MAD_F(0x05481be5) /* 0.330104730 */, 13 },
428 /* 376 */ { MAD_F(0x054ceb2a) /* 0.331278957 */, 13 },
429 /* 377 */ { MAD_F(0x0551bb85) /* 0.332454225 */, 13 },
430 /* 378 */ { MAD_F(0x05568cf8) /* 0.333630533 */, 13 },
431 /* 379 */ { MAD_F(0x055b5f81) /* 0.334807879 */, 13 },
432 /* 380 */ { MAD_F(0x05603321) /* 0.335986261 */, 13 },
433 /* 381 */ { MAD_F(0x056507d6) /* 0.337165677 */, 13 },
434 /* 382 */ { MAD_F(0x0569dda0) /* 0.338346125 */, 13 },
435 /* 383 */ { MAD_F(0x056eb47f) /* 0.339527604 */, 13 },
436
437 /* 384 */ { MAD_F(0x05738c72) /* 0.340710111 */, 13 },
438 /* 385 */ { MAD_F(0x05786578) /* 0.341893646 */, 13 },
439 /* 386 */ { MAD_F(0x057d3f92) /* 0.343078205 */, 13 },
440 /* 387 */ { MAD_F(0x05821abf) /* 0.344263788 */, 13 },
441 /* 388 */ { MAD_F(0x0586f6fd) /* 0.345450393 */, 13 },
442 /* 389 */ { MAD_F(0x058bd44e) /* 0.346638017 */, 13 },
443 /* 390 */ { MAD_F(0x0590b2b0) /* 0.347826659 */, 13 },
444 /* 391 */ { MAD_F(0x05959222) /* 0.349016318 */, 13 },
445 /* 392 */ { MAD_F(0x059a72a5) /* 0.350206992 */, 13 },
446 /* 393 */ { MAD_F(0x059f5438) /* 0.351398678 */, 13 },
447 /* 394 */ { MAD_F(0x05a436da) /* 0.352591376 */, 13 },
448 /* 395 */ { MAD_F(0x05a91a8c) /* 0.353785083 */, 13 },
449 /* 396 */ { MAD_F(0x05adff4c) /* 0.354979798 */, 13 },
450 /* 397 */ { MAD_F(0x05b2e51a) /* 0.356175519 */, 13 },
451 /* 398 */ { MAD_F(0x05b7cbf5) /* 0.357372244 */, 13 },
452 /* 399 */ { MAD_F(0x05bcb3de) /* 0.358569972 */, 13 },
453
454 /* 400 */ { MAD_F(0x05c19cd3) /* 0.359768701 */, 13 },
455 /* 401 */ { MAD_F(0x05c686d5) /* 0.360968429 */, 13 },
456 /* 402 */ { MAD_F(0x05cb71e2) /* 0.362169156 */, 13 },
457 /* 403 */ { MAD_F(0x05d05dfb) /* 0.363370878 */, 13 },
458 /* 404 */ { MAD_F(0x05d54b1f) /* 0.364573594 */, 13 },
459 /* 405 */ { MAD_F(0x05da394d) /* 0.365777304 */, 13 },
460 /* 406 */ { MAD_F(0x05df2885) /* 0.366982004 */, 13 },
461 /* 407 */ { MAD_F(0x05e418c7) /* 0.368187694 */, 13 },
462 /* 408 */ { MAD_F(0x05e90a12) /* 0.369394372 */, 13 },
463 /* 409 */ { MAD_F(0x05edfc66) /* 0.370602036 */, 13 },
464 /* 410 */ { MAD_F(0x05f2efc2) /* 0.371810684 */, 13 },
465 /* 411 */ { MAD_F(0x05f7e426) /* 0.373020316 */, 13 },
466 /* 412 */ { MAD_F(0x05fcd992) /* 0.374230929 */, 13 },
467 /* 413 */ { MAD_F(0x0601d004) /* 0.375442522 */, 13 },
468 /* 414 */ { MAD_F(0x0606c77d) /* 0.376655093 */, 13 },
469 /* 415 */ { MAD_F(0x060bbffd) /* 0.377868641 */, 13 },
470
471 /* 416 */ { MAD_F(0x0610b982) /* 0.379083164 */, 13 },
472 /* 417 */ { MAD_F(0x0615b40c) /* 0.380298661 */, 13 },
473 /* 418 */ { MAD_F(0x061aaf9c) /* 0.381515130 */, 13 },
474 /* 419 */ { MAD_F(0x061fac2f) /* 0.382732569 */, 13 },
475 /* 420 */ { MAD_F(0x0624a9c7) /* 0.383950977 */, 13 },
476 /* 421 */ { MAD_F(0x0629a863) /* 0.385170352 */, 13 },
477 /* 422 */ { MAD_F(0x062ea802) /* 0.386390694 */, 13 },
478 /* 423 */ { MAD_F(0x0633a8a3) /* 0.387611999 */, 13 },
479 /* 424 */ { MAD_F(0x0638aa48) /* 0.388834268 */, 13 },
480 /* 425 */ { MAD_F(0x063dacee) /* 0.390057497 */, 13 },
481 /* 426 */ { MAD_F(0x0642b096) /* 0.391281687 */, 13 },
482 /* 427 */ { MAD_F(0x0647b53f) /* 0.392506834 */, 13 },
483 /* 428 */ { MAD_F(0x064cbae9) /* 0.393732939 */, 13 },
484 /* 429 */ { MAD_F(0x0651c193) /* 0.394959999 */, 13 },
485 /* 430 */ { MAD_F(0x0656c93d) /* 0.396188012 */, 13 },
486 /* 431 */ { MAD_F(0x065bd1e7) /* 0.397416978 */, 13 },
487
488 /* 432 */ { MAD_F(0x0660db91) /* 0.398646895 */, 13 },
489 /* 433 */ { MAD_F(0x0665e639) /* 0.399877761 */, 13 },
490 /* 434 */ { MAD_F(0x066af1df) /* 0.401109575 */, 13 },
491 /* 435 */ { MAD_F(0x066ffe84) /* 0.402342335 */, 13 },
492 /* 436 */ { MAD_F(0x06750c26) /* 0.403576041 */, 13 },
493 /* 437 */ { MAD_F(0x067a1ac6) /* 0.404810690 */, 13 },
494 /* 438 */ { MAD_F(0x067f2a62) /* 0.406046281 */, 13 },
495 /* 439 */ { MAD_F(0x06843afb) /* 0.407282813 */, 13 },
496 /* 440 */ { MAD_F(0x06894c90) /* 0.408520284 */, 13 },
497 /* 441 */ { MAD_F(0x068e5f21) /* 0.409758693 */, 13 },
498 /* 442 */ { MAD_F(0x069372ae) /* 0.410998038 */, 13 },
499 /* 443 */ { MAD_F(0x06988735) /* 0.412238319 */, 13 },
500 /* 444 */ { MAD_F(0x069d9cb7) /* 0.413479532 */, 13 },
501 /* 445 */ { MAD_F(0x06a2b333) /* 0.414721679 */, 13 },
502 /* 446 */ { MAD_F(0x06a7caa9) /* 0.415964756 */, 13 },
503 /* 447 */ { MAD_F(0x06ace318) /* 0.417208762 */, 13 },
504
505 /* 448 */ { MAD_F(0x06b1fc81) /* 0.418453696 */, 13 },
506 /* 449 */ { MAD_F(0x06b716e2) /* 0.419699557 */, 13 },
507 /* 450 */ { MAD_F(0x06bc323b) /* 0.420946343 */, 13 },
508 /* 451 */ { MAD_F(0x06c14e8d) /* 0.422194054 */, 13 },
509 /* 452 */ { MAD_F(0x06c66bd6) /* 0.423442686 */, 13 },
510 /* 453 */ { MAD_F(0x06cb8a17) /* 0.424692240 */, 13 },
511 /* 454 */ { MAD_F(0x06d0a94e) /* 0.425942714 */, 13 },
512 /* 455 */ { MAD_F(0x06d5c97c) /* 0.427194106 */, 13 },
513 /* 456 */ { MAD_F(0x06daeaa1) /* 0.428446415 */, 13 },
514 /* 457 */ { MAD_F(0x06e00cbb) /* 0.429699640 */, 13 },
515 /* 458 */ { MAD_F(0x06e52fca) /* 0.430953779 */, 13 },
516 /* 459 */ { MAD_F(0x06ea53cf) /* 0.432208832 */, 13 },
517 /* 460 */ { MAD_F(0x06ef78c8) /* 0.433464796 */, 13 },
518 /* 461 */ { MAD_F(0x06f49eb6) /* 0.434721671 */, 13 },
519 /* 462 */ { MAD_F(0x06f9c597) /* 0.435979455 */, 13 },
520 /* 463 */ { MAD_F(0x06feed6d) /* 0.437238146 */, 13 },
521
522 /* 464 */ { MAD_F(0x07041636) /* 0.438497744 */, 13 },
523 /* 465 */ { MAD_F(0x07093ff2) /* 0.439758248 */, 13 },
524 /* 466 */ { MAD_F(0x070e6aa0) /* 0.441019655 */, 13 },
525 /* 467 */ { MAD_F(0x07139641) /* 0.442281965 */, 13 },
526 /* 468 */ { MAD_F(0x0718c2d3) /* 0.443545176 */, 13 },
527 /* 469 */ { MAD_F(0x071df058) /* 0.444809288 */, 13 },
528 /* 470 */ { MAD_F(0x07231ecd) /* 0.446074298 */, 13 },
529 /* 471 */ { MAD_F(0x07284e34) /* 0.447340205 */, 13 },
530 /* 472 */ { MAD_F(0x072d7e8b) /* 0.448607009 */, 13 },
531 /* 473 */ { MAD_F(0x0732afd2) /* 0.449874708 */, 13 },
532 /* 474 */ { MAD_F(0x0737e209) /* 0.451143300 */, 13 },
533 /* 475 */ { MAD_F(0x073d1530) /* 0.452412785 */, 13 },
534 /* 476 */ { MAD_F(0x07424946) /* 0.453683161 */, 13 },
535 /* 477 */ { MAD_F(0x07477e4b) /* 0.454954427 */, 13 },
536 /* 478 */ { MAD_F(0x074cb43e) /* 0.456226581 */, 13 },
537 /* 479 */ { MAD_F(0x0751eb20) /* 0.457499623 */, 13 },
538
539 /* 480 */ { MAD_F(0x075722ef) /* 0.458773552 */, 13 },
540 /* 481 */ { MAD_F(0x075c5bac) /* 0.460048365 */, 13 },
541 /* 482 */ { MAD_F(0x07619557) /* 0.461324062 */, 13 },
542 /* 483 */ { MAD_F(0x0766cfee) /* 0.462600642 */, 13 },
543 /* 484 */ { MAD_F(0x076c0b72) /* 0.463878102 */, 13 },
544 /* 485 */ { MAD_F(0x077147e2) /* 0.465156443 */, 13 },
545 /* 486 */ { MAD_F(0x0776853e) /* 0.466435663 */, 13 },
546 /* 487 */ { MAD_F(0x077bc385) /* 0.467715761 */, 13 },
547 /* 488 */ { MAD_F(0x078102b8) /* 0.468996735 */, 13 },
548 /* 489 */ { MAD_F(0x078642d6) /* 0.470278584 */, 13 },
549 /* 490 */ { MAD_F(0x078b83de) /* 0.471561307 */, 13 },
550 /* 491 */ { MAD_F(0x0790c5d1) /* 0.472844904 */, 13 },
551 /* 492 */ { MAD_F(0x079608ae) /* 0.474129372 */, 13 },
552 /* 493 */ { MAD_F(0x079b4c74) /* 0.475414710 */, 13 },
553 /* 494 */ { MAD_F(0x07a09124) /* 0.476700918 */, 13 },
554 /* 495 */ { MAD_F(0x07a5d6bd) /* 0.477987994 */, 13 },
555
556 /* 496 */ { MAD_F(0x07ab1d3e) /* 0.479275937 */, 13 },
557 /* 497 */ { MAD_F(0x07b064a8) /* 0.480564746 */, 13 },
558 /* 498 */ { MAD_F(0x07b5acfb) /* 0.481854420 */, 13 },
559 /* 499 */ { MAD_F(0x07baf635) /* 0.483144957 */, 13 },
560 /* 500 */ { MAD_F(0x07c04056) /* 0.484436356 */, 13 },
561 /* 501 */ { MAD_F(0x07c58b5f) /* 0.485728617 */, 13 },
562 /* 502 */ { MAD_F(0x07cad74e) /* 0.487021738 */, 13 },
563 /* 503 */ { MAD_F(0x07d02424) /* 0.488315717 */, 13 },
564 /* 504 */ { MAD_F(0x07d571e0) /* 0.489610555 */, 13 },
565 /* 505 */ { MAD_F(0x07dac083) /* 0.490906249 */, 13 },
566 /* 506 */ { MAD_F(0x07e0100a) /* 0.492202799 */, 13 },
567 /* 507 */ { MAD_F(0x07e56078) /* 0.493500203 */, 13 },
568 /* 508 */ { MAD_F(0x07eab1ca) /* 0.494798460 */, 13 },
569 /* 509 */ { MAD_F(0x07f00401) /* 0.496097570 */, 13 },
570 /* 510 */ { MAD_F(0x07f5571d) /* 0.497397530 */, 13 },
571 /* 511 */ { MAD_F(0x07faab1c) /* 0.498698341 */, 13 },
572
573 /* 512 */ { MAD_F(0x04000000) /* 0.250000000 */, 14 },
574 /* 513 */ { MAD_F(0x0402aae3) /* 0.250651254 */, 14 },
575 /* 514 */ { MAD_F(0x04055638) /* 0.251302930 */, 14 },
576 /* 515 */ { MAD_F(0x040801ff) /* 0.251955030 */, 14 },
577 /* 516 */ { MAD_F(0x040aae37) /* 0.252607552 */, 14 },
578 /* 517 */ { MAD_F(0x040d5ae0) /* 0.253260495 */, 14 },
579 /* 518 */ { MAD_F(0x041007fa) /* 0.253913860 */, 14 },
580 /* 519 */ { MAD_F(0x0412b586) /* 0.254567645 */, 14 },
581 /* 520 */ { MAD_F(0x04156381) /* 0.255221850 */, 14 },
582 /* 521 */ { MAD_F(0x041811ee) /* 0.255876475 */, 14 },
583 /* 522 */ { MAD_F(0x041ac0cb) /* 0.256531518 */, 14 },
584 /* 523 */ { MAD_F(0x041d7018) /* 0.257186980 */, 14 },
585 /* 524 */ { MAD_F(0x04201fd5) /* 0.257842860 */, 14 },
586 /* 525 */ { MAD_F(0x0422d003) /* 0.258499157 */, 14 },
587 /* 526 */ { MAD_F(0x042580a0) /* 0.259155872 */, 14 },
588 /* 527 */ { MAD_F(0x042831ad) /* 0.259813002 */, 14 },
589
590 /* 528 */ { MAD_F(0x042ae32a) /* 0.260470548 */, 14 },
591 /* 529 */ { MAD_F(0x042d9516) /* 0.261128510 */, 14 },
592 /* 530 */ { MAD_F(0x04304772) /* 0.261786886 */, 14 },
593 /* 531 */ { MAD_F(0x0432fa3d) /* 0.262445676 */, 14 },
594 /* 532 */ { MAD_F(0x0435ad76) /* 0.263104880 */, 14 },
595 /* 533 */ { MAD_F(0x0438611f) /* 0.263764497 */, 14 },
596 /* 534 */ { MAD_F(0x043b1536) /* 0.264424527 */, 14 },
597 /* 535 */ { MAD_F(0x043dc9bc) /* 0.265084969 */, 14 },
598 /* 536 */ { MAD_F(0x04407eb1) /* 0.265745823 */, 14 },
599 /* 537 */ { MAD_F(0x04433414) /* 0.266407088 */, 14 },
600 /* 538 */ { MAD_F(0x0445e9e5) /* 0.267068763 */, 14 },
601 /* 539 */ { MAD_F(0x0448a024) /* 0.267730848 */, 14 },
602 /* 540 */ { MAD_F(0x044b56d1) /* 0.268393343 */, 14 },
603 /* 541 */ { MAD_F(0x044e0dec) /* 0.269056248 */, 14 },
604 /* 542 */ { MAD_F(0x0450c575) /* 0.269719560 */, 14 },
605 /* 543 */ { MAD_F(0x04537d6b) /* 0.270383281 */, 14 },
606
607 /* 544 */ { MAD_F(0x045635cf) /* 0.271047409 */, 14 },
608 /* 545 */ { MAD_F(0x0458ee9f) /* 0.271711944 */, 14 },
609 /* 546 */ { MAD_F(0x045ba7dd) /* 0.272376886 */, 14 },
610 /* 547 */ { MAD_F(0x045e6188) /* 0.273042234 */, 14 },
611 /* 548 */ { MAD_F(0x04611ba0) /* 0.273707988 */, 14 },
612 /* 549 */ { MAD_F(0x0463d625) /* 0.274374147 */, 14 },
613 /* 550 */ { MAD_F(0x04669116) /* 0.275040710 */, 14 },
614 /* 551 */ { MAD_F(0x04694c74) /* 0.275707677 */, 14 },
615 /* 552 */ { MAD_F(0x046c083e) /* 0.276375048 */, 14 },
616 /* 553 */ { MAD_F(0x046ec474) /* 0.277042822 */, 14 },
617 /* 554 */ { MAD_F(0x04718116) /* 0.277710999 */, 14 },
618 /* 555 */ { MAD_F(0x04743e25) /* 0.278379578 */, 14 },
619 /* 556 */ { MAD_F(0x0476fb9f) /* 0.279048558 */, 14 },
620 /* 557 */ { MAD_F(0x0479b984) /* 0.279717940 */, 14 },
621 /* 558 */ { MAD_F(0x047c77d6) /* 0.280387722 */, 14 },
622 /* 559 */ { MAD_F(0x047f3693) /* 0.281057905 */, 14 },
623
624 /* 560 */ { MAD_F(0x0481f5bb) /* 0.281728487 */, 14 },
625 /* 561 */ { MAD_F(0x0484b54e) /* 0.282399469 */, 14 },
626 /* 562 */ { MAD_F(0x0487754c) /* 0.283070849 */, 14 },
627 /* 563 */ { MAD_F(0x048a35b6) /* 0.283742628 */, 14 },
628 /* 564 */ { MAD_F(0x048cf68a) /* 0.284414805 */, 14 },
629 /* 565 */ { MAD_F(0x048fb7c8) /* 0.285087379 */, 14 },
630 /* 566 */ { MAD_F(0x04927972) /* 0.285760350 */, 14 },
631 /* 567 */ { MAD_F(0x04953b85) /* 0.286433717 */, 14 },
632 /* 568 */ { MAD_F(0x0497fe03) /* 0.287107481 */, 14 },
633 /* 569 */ { MAD_F(0x049ac0eb) /* 0.287781640 */, 14 },
634 /* 570 */ { MAD_F(0x049d843e) /* 0.288456194 */, 14 },
635 /* 571 */ { MAD_F(0x04a047fa) /* 0.289131142 */, 14 },
636 /* 572 */ { MAD_F(0x04a30c20) /* 0.289806485 */, 14 },
637 /* 573 */ { MAD_F(0x04a5d0af) /* 0.290482221 */, 14 },
638 /* 574 */ { MAD_F(0x04a895a8) /* 0.291158351 */, 14 },
639 /* 575 */ { MAD_F(0x04ab5b0b) /* 0.291834873 */, 14 },
640
641 /* 576 */ { MAD_F(0x04ae20d7) /* 0.292511788 */, 14 },
642 /* 577 */ { MAD_F(0x04b0e70c) /* 0.293189094 */, 14 },
643 /* 578 */ { MAD_F(0x04b3adaa) /* 0.293866792 */, 14 },
644 /* 579 */ { MAD_F(0x04b674b1) /* 0.294544881 */, 14 },
645 /* 580 */ { MAD_F(0x04b93c21) /* 0.295223360 */, 14 },
646 /* 581 */ { MAD_F(0x04bc03fa) /* 0.295902229 */, 14 },
647 /* 582 */ { MAD_F(0x04becc3b) /* 0.296581488 */, 14 },
648 /* 583 */ { MAD_F(0x04c194e4) /* 0.297261136 */, 14 },
649 /* 584 */ { MAD_F(0x04c45df6) /* 0.297941173 */, 14 },
650 /* 585 */ { MAD_F(0x04c72771) /* 0.298621598 */, 14 },
651 /* 586 */ { MAD_F(0x04c9f153) /* 0.299302411 */, 14 },
652 /* 587 */ { MAD_F(0x04ccbb9d) /* 0.299983611 */, 14 },
653 /* 588 */ { MAD_F(0x04cf864f) /* 0.300665198 */, 14 },
654 /* 589 */ { MAD_F(0x04d25169) /* 0.301347172 */, 14 },
655 /* 590 */ { MAD_F(0x04d51ceb) /* 0.302029532 */, 14 },
656 /* 591 */ { MAD_F(0x04d7e8d4) /* 0.302712277 */, 14 },
657
658 /* 592 */ { MAD_F(0x04dab524) /* 0.303395408 */, 14 },
659 /* 593 */ { MAD_F(0x04dd81dc) /* 0.304078923 */, 14 },
660 /* 594 */ { MAD_F(0x04e04efb) /* 0.304762823 */, 14 },
661 /* 595 */ { MAD_F(0x04e31c81) /* 0.305447106 */, 14 },
662 /* 596 */ { MAD_F(0x04e5ea6e) /* 0.306131773 */, 14 },
663 /* 597 */ { MAD_F(0x04e8b8c2) /* 0.306816823 */, 14 },
664 /* 598 */ { MAD_F(0x04eb877c) /* 0.307502256 */, 14 },
665 /* 599 */ { MAD_F(0x04ee569d) /* 0.308188071 */, 14 },
666 /* 600 */ { MAD_F(0x04f12624) /* 0.308874267 */, 14 },
667 /* 601 */ { MAD_F(0x04f3f612) /* 0.309560845 */, 14 },
668 /* 602 */ { MAD_F(0x04f6c666) /* 0.310247804 */, 14 },
669 /* 603 */ { MAD_F(0x04f99721) /* 0.310935143 */, 14 },
670 /* 604 */ { MAD_F(0x04fc6841) /* 0.311622862 */, 14 },
671 /* 605 */ { MAD_F(0x04ff39c7) /* 0.312310961 */, 14 },
672 /* 606 */ { MAD_F(0x05020bb3) /* 0.312999439 */, 14 },
673 /* 607 */ { MAD_F(0x0504de05) /* 0.313688296 */, 14 },
674
675 /* 608 */ { MAD_F(0x0507b0bc) /* 0.314377532 */, 14 },
676 /* 609 */ { MAD_F(0x050a83d8) /* 0.315067145 */, 14 },
677 /* 610 */ { MAD_F(0x050d575b) /* 0.315757136 */, 14 },
678 /* 611 */ { MAD_F(0x05102b42) /* 0.316447504 */, 14 },
679 /* 612 */ { MAD_F(0x0512ff8e) /* 0.317138249 */, 14 },
680 /* 613 */ { MAD_F(0x0515d440) /* 0.317829370 */, 14 },
681 /* 614 */ { MAD_F(0x0518a956) /* 0.318520867 */, 14 },
682 /* 615 */ { MAD_F(0x051b7ed1) /* 0.319212739 */, 14 },
683 /* 616 */ { MAD_F(0x051e54b1) /* 0.319904987 */, 14 },
684 /* 617 */ { MAD_F(0x05212af5) /* 0.320597609 */, 14 },
685 /* 618 */ { MAD_F(0x0524019e) /* 0.321290606 */, 14 },
686 /* 619 */ { MAD_F(0x0526d8ab) /* 0.321983976 */, 14 },
687 /* 620 */ { MAD_F(0x0529b01d) /* 0.322677720 */, 14 },
688 /* 621 */ { MAD_F(0x052c87f2) /* 0.323371837 */, 14 },
689 /* 622 */ { MAD_F(0x052f602c) /* 0.324066327 */, 14 },
690 /* 623 */ { MAD_F(0x053238ca) /* 0.324761189 */, 14 },
691
692 /* 624 */ { MAD_F(0x053511cb) /* 0.325456423 */, 14 },
693 /* 625 */ { MAD_F(0x0537eb30) /* 0.326152028 */, 14 },
694 /* 626 */ { MAD_F(0x053ac4f9) /* 0.326848005 */, 14 },
695 /* 627 */ { MAD_F(0x053d9f25) /* 0.327544352 */, 14 },
696 /* 628 */ { MAD_F(0x054079b5) /* 0.328241070 */, 14 },
697 /* 629 */ { MAD_F(0x054354a8) /* 0.328938157 */, 14 },
698 /* 630 */ { MAD_F(0x05462ffe) /* 0.329635614 */, 14 },
699 /* 631 */ { MAD_F(0x05490bb7) /* 0.330333440 */, 14 },
700 /* 632 */ { MAD_F(0x054be7d4) /* 0.331031635 */, 14 },
701 /* 633 */ { MAD_F(0x054ec453) /* 0.331730198 */, 14 },
702 /* 634 */ { MAD_F(0x0551a134) /* 0.332429129 */, 14 },
703 /* 635 */ { MAD_F(0x05547e79) /* 0.333128427 */, 14 },
704 /* 636 */ { MAD_F(0x05575c20) /* 0.333828093 */, 14 },
705 /* 637 */ { MAD_F(0x055a3a2a) /* 0.334528126 */, 14 },
706 /* 638 */ { MAD_F(0x055d1896) /* 0.335228525 */, 14 },
707 /* 639 */ { MAD_F(0x055ff764) /* 0.335929290 */, 14 },
708
709 /* 640 */ { MAD_F(0x0562d694) /* 0.336630420 */, 14 },
710 /* 641 */ { MAD_F(0x0565b627) /* 0.337331916 */, 14 },
711 /* 642 */ { MAD_F(0x0568961b) /* 0.338033777 */, 14 },
712 /* 643 */ { MAD_F(0x056b7671) /* 0.338736002 */, 14 },
713 /* 644 */ { MAD_F(0x056e5729) /* 0.339438592 */, 14 },
714 /* 645 */ { MAD_F(0x05713843) /* 0.340141545 */, 14 },
715 /* 646 */ { MAD_F(0x057419be) /* 0.340844862 */, 14 },
716 /* 647 */ { MAD_F(0x0576fb9a) /* 0.341548541 */, 14 },
717 /* 648 */ { MAD_F(0x0579ddd8) /* 0.342252584 */, 14 },
718 /* 649 */ { MAD_F(0x057cc077) /* 0.342956988 */, 14 },
719 /* 650 */ { MAD_F(0x057fa378) /* 0.343661754 */, 14 },
720 /* 651 */ { MAD_F(0x058286d9) /* 0.344366882 */, 14 },
721 /* 652 */ { MAD_F(0x05856a9b) /* 0.345072371 */, 14 },
722 /* 653 */ { MAD_F(0x05884ebe) /* 0.345778221 */, 14 },
723 /* 654 */ { MAD_F(0x058b3342) /* 0.346484431 */, 14 },
724 /* 655 */ { MAD_F(0x058e1827) /* 0.347191002 */, 14 },
725
726 /* 656 */ { MAD_F(0x0590fd6c) /* 0.347897931 */, 14 },
727 /* 657 */ { MAD_F(0x0593e311) /* 0.348605221 */, 14 },
728 /* 658 */ { MAD_F(0x0596c917) /* 0.349312869 */, 14 },
729 /* 659 */ { MAD_F(0x0599af7d) /* 0.350020876 */, 14 },
730 /* 660 */ { MAD_F(0x059c9643) /* 0.350729240 */, 14 },
731 /* 661 */ { MAD_F(0x059f7d6a) /* 0.351437963 */, 14 },
732 /* 662 */ { MAD_F(0x05a264f0) /* 0.352147044 */, 14 },
733 /* 663 */ { MAD_F(0x05a54cd6) /* 0.352856481 */, 14 },
734 /* 664 */ { MAD_F(0x05a8351c) /* 0.353566275 */, 14 },
735 /* 665 */ { MAD_F(0x05ab1dc2) /* 0.354276426 */, 14 },
736 /* 666 */ { MAD_F(0x05ae06c7) /* 0.354986932 */, 14 },
737 /* 667 */ { MAD_F(0x05b0f02b) /* 0.355697795 */, 14 },
738 /* 668 */ { MAD_F(0x05b3d9f0) /* 0.356409012 */, 14 },
739 /* 669 */ { MAD_F(0x05b6c413) /* 0.357120585 */, 14 },
740 /* 670 */ { MAD_F(0x05b9ae95) /* 0.357832512 */, 14 },
741 /* 671 */ { MAD_F(0x05bc9977) /* 0.358544794 */, 14 },
742
743 /* 672 */ { MAD_F(0x05bf84b8) /* 0.359257429 */, 14 },
744 /* 673 */ { MAD_F(0x05c27057) /* 0.359970419 */, 14 },
745 /* 674 */ { MAD_F(0x05c55c56) /* 0.360683761 */, 14 },
746 /* 675 */ { MAD_F(0x05c848b3) /* 0.361397456 */, 14 },
747 /* 676 */ { MAD_F(0x05cb356e) /* 0.362111504 */, 14 },
748 /* 677 */ { MAD_F(0x05ce2289) /* 0.362825904 */, 14 },
749 /* 678 */ { MAD_F(0x05d11001) /* 0.363540655 */, 14 },
750 /* 679 */ { MAD_F(0x05d3fdd8) /* 0.364255759 */, 14 },
751 /* 680 */ { MAD_F(0x05d6ec0e) /* 0.364971213 */, 14 },
752 /* 681 */ { MAD_F(0x05d9daa1) /* 0.365687018 */, 14 },
753 /* 682 */ { MAD_F(0x05dcc993) /* 0.366403174 */, 14 },
754 /* 683 */ { MAD_F(0x05dfb8e2) /* 0.367119680 */, 14 },
755 /* 684 */ { MAD_F(0x05e2a890) /* 0.367836535 */, 14 },
756 /* 685 */ { MAD_F(0x05e5989b) /* 0.368553740 */, 14 },
757 /* 686 */ { MAD_F(0x05e88904) /* 0.369271294 */, 14 },
758 /* 687 */ { MAD_F(0x05eb79cb) /* 0.369989197 */, 14 },
759
760 /* 688 */ { MAD_F(0x05ee6aef) /* 0.370707448 */, 14 },
761 /* 689 */ { MAD_F(0x05f15c70) /* 0.371426047 */, 14 },
762 /* 690 */ { MAD_F(0x05f44e4f) /* 0.372144994 */, 14 },
763 /* 691 */ { MAD_F(0x05f7408b) /* 0.372864289 */, 14 },
764 /* 692 */ { MAD_F(0x05fa3324) /* 0.373583930 */, 14 },
765 /* 693 */ { MAD_F(0x05fd261b) /* 0.374303918 */, 14 },
766 /* 694 */ { MAD_F(0x0600196e) /* 0.375024253 */, 14 },
767 /* 695 */ { MAD_F(0x06030d1e) /* 0.375744934 */, 14 },
768 /* 696 */ { MAD_F(0x0606012b) /* 0.376465960 */, 14 },
769 /* 697 */ { MAD_F(0x0608f595) /* 0.377187332 */, 14 },
770 /* 698 */ { MAD_F(0x060bea5c) /* 0.377909049 */, 14 },
771 /* 699 */ { MAD_F(0x060edf7f) /* 0.378631110 */, 14 },
772 /* 700 */ { MAD_F(0x0611d4fe) /* 0.379353516 */, 14 },
773 /* 701 */ { MAD_F(0x0614cada) /* 0.380076266 */, 14 },
774 /* 702 */ { MAD_F(0x0617c112) /* 0.380799360 */, 14 },
775 /* 703 */ { MAD_F(0x061ab7a6) /* 0.381522798 */, 14 },
776
777 /* 704 */ { MAD_F(0x061dae96) /* 0.382246578 */, 14 },
778 /* 705 */ { MAD_F(0x0620a5e3) /* 0.382970701 */, 14 },
779 /* 706 */ { MAD_F(0x06239d8b) /* 0.383695167 */, 14 },
780 /* 707 */ { MAD_F(0x0626958f) /* 0.384419975 */, 14 },
781 /* 708 */ { MAD_F(0x06298def) /* 0.385145124 */, 14 },
782 /* 709 */ { MAD_F(0x062c86aa) /* 0.385870615 */, 14 },
783 /* 710 */ { MAD_F(0x062f7fc1) /* 0.386596448 */, 14 },
784 /* 711 */ { MAD_F(0x06327934) /* 0.387322621 */, 14 },
785 /* 712 */ { MAD_F(0x06357302) /* 0.388049134 */, 14 },
786 /* 713 */ { MAD_F(0x06386d2b) /* 0.388775988 */, 14 },
787 /* 714 */ { MAD_F(0x063b67b0) /* 0.389503182 */, 14 },
788 /* 715 */ { MAD_F(0x063e6290) /* 0.390230715 */, 14 },
789 /* 716 */ { MAD_F(0x06415dcb) /* 0.390958588 */, 14 },
790 /* 717 */ { MAD_F(0x06445960) /* 0.391686799 */, 14 },
791 /* 718 */ { MAD_F(0x06475551) /* 0.392415349 */, 14 },
792 /* 719 */ { MAD_F(0x064a519c) /* 0.393144238 */, 14 },
793
794 /* 720 */ { MAD_F(0x064d4e43) /* 0.393873464 */, 14 },
795 /* 721 */ { MAD_F(0x06504b44) /* 0.394603028 */, 14 },
796 /* 722 */ { MAD_F(0x0653489f) /* 0.395332930 */, 14 },
797 /* 723 */ { MAD_F(0x06564655) /* 0.396063168 */, 14 },
798 /* 724 */ { MAD_F(0x06594465) /* 0.396793743 */, 14 },
799 /* 725 */ { MAD_F(0x065c42d0) /* 0.397524655 */, 14 },
800 /* 726 */ { MAD_F(0x065f4195) /* 0.398255903 */, 14 },
801 /* 727 */ { MAD_F(0x066240b4) /* 0.398987487 */, 14 },
802 /* 728 */ { MAD_F(0x0665402d) /* 0.399719406 */, 14 },
803 /* 729 */ { MAD_F(0x06684000) /* 0.400451660 */, 14 },
804 /* 730 */ { MAD_F(0x066b402d) /* 0.401184249 */, 14 },
805 /* 731 */ { MAD_F(0x066e40b3) /* 0.401917173 */, 14 },
806 /* 732 */ { MAD_F(0x06714194) /* 0.402650431 */, 14 },
807 /* 733 */ { MAD_F(0x067442ce) /* 0.403384024 */, 14 },
808 /* 734 */ { MAD_F(0x06774462) /* 0.404117949 */, 14 },
809 /* 735 */ { MAD_F(0x067a464f) /* 0.404852209 */, 14 },
810
811 /* 736 */ { MAD_F(0x067d4896) /* 0.405586801 */, 14 },
812 /* 737 */ { MAD_F(0x06804b36) /* 0.406321726 */, 14 },
813 /* 738 */ { MAD_F(0x06834e2f) /* 0.407056983 */, 14 },
814 /* 739 */ { MAD_F(0x06865181) /* 0.407792573 */, 14 },
815 /* 740 */ { MAD_F(0x0689552c) /* 0.408528495 */, 14 },
816 /* 741 */ { MAD_F(0x068c5931) /* 0.409264748 */, 14 },
817 /* 742 */ { MAD_F(0x068f5d8e) /* 0.410001332 */, 14 },
818 /* 743 */ { MAD_F(0x06926245) /* 0.410738247 */, 14 },
819 /* 744 */ { MAD_F(0x06956753) /* 0.411475493 */, 14 },
820 /* 745 */ { MAD_F(0x06986cbb) /* 0.412213070 */, 14 },
821 /* 746 */ { MAD_F(0x069b727b) /* 0.412950976 */, 14 },
822 /* 747 */ { MAD_F(0x069e7894) /* 0.413689213 */, 14 },
823 /* 748 */ { MAD_F(0x06a17f05) /* 0.414427779 */, 14 },
824 /* 749 */ { MAD_F(0x06a485cf) /* 0.415166674 */, 14 },
825 /* 750 */ { MAD_F(0x06a78cf1) /* 0.415905897 */, 14 },
826 /* 751 */ { MAD_F(0x06aa946b) /* 0.416645450 */, 14 },
827
828 /* 752 */ { MAD_F(0x06ad9c3d) /* 0.417385331 */, 14 },
829 /* 753 */ { MAD_F(0x06b0a468) /* 0.418125540 */, 14 },
830 /* 754 */ { MAD_F(0x06b3acea) /* 0.418866076 */, 14 },
831 /* 755 */ { MAD_F(0x06b6b5c4) /* 0.419606940 */, 14 },
832 /* 756 */ { MAD_F(0x06b9bef6) /* 0.420348132 */, 14 },
833 /* 757 */ { MAD_F(0x06bcc880) /* 0.421089650 */, 14 },
834 /* 758 */ { MAD_F(0x06bfd261) /* 0.421831494 */, 14 },
835 /* 759 */ { MAD_F(0x06c2dc9a) /* 0.422573665 */, 14 },
836 /* 760 */ { MAD_F(0x06c5e72b) /* 0.423316162 */, 14 },
837 /* 761 */ { MAD_F(0x06c8f213) /* 0.424058985 */, 14 },
838 /* 762 */ { MAD_F(0x06cbfd52) /* 0.424802133 */, 14 },
839 /* 763 */ { MAD_F(0x06cf08e9) /* 0.425545607 */, 14 },
840 /* 764 */ { MAD_F(0x06d214d7) /* 0.426289405 */, 14 },
841 /* 765 */ { MAD_F(0x06d5211c) /* 0.427033528 */, 14 },
842 /* 766 */ { MAD_F(0x06d82db8) /* 0.427777975 */, 14 },
843 /* 767 */ { MAD_F(0x06db3aaa) /* 0.428522746 */, 14 },
844
845 /* 768 */ { MAD_F(0x06de47f4) /* 0.429267841 */, 14 },
846 /* 769 */ { MAD_F(0x06e15595) /* 0.430013259 */, 14 },
847 /* 770 */ { MAD_F(0x06e4638d) /* 0.430759001 */, 14 },
848 /* 771 */ { MAD_F(0x06e771db) /* 0.431505065 */, 14 },
849 /* 772 */ { MAD_F(0x06ea807f) /* 0.432251452 */, 14 },
850 /* 773 */ { MAD_F(0x06ed8f7b) /* 0.432998162 */, 14 },
851 /* 774 */ { MAD_F(0x06f09ecc) /* 0.433745193 */, 14 },
852 /* 775 */ { MAD_F(0x06f3ae75) /* 0.434492546 */, 14 },
853 /* 776 */ { MAD_F(0x06f6be73) /* 0.435240221 */, 14 },
854 /* 777 */ { MAD_F(0x06f9cec8) /* 0.435988217 */, 14 },
855 /* 778 */ { MAD_F(0x06fcdf72) /* 0.436736534 */, 14 },
856 /* 779 */ { MAD_F(0x06fff073) /* 0.437485172 */, 14 },
857 /* 780 */ { MAD_F(0x070301ca) /* 0.438234130 */, 14 },
858 /* 781 */ { MAD_F(0x07061377) /* 0.438983408 */, 14 },
859 /* 782 */ { MAD_F(0x0709257a) /* 0.439733006 */, 14 },
860 /* 783 */ { MAD_F(0x070c37d2) /* 0.440482924 */, 14 },
861
862 /* 784 */ { MAD_F(0x070f4a80) /* 0.441233161 */, 14 },
863 /* 785 */ { MAD_F(0x07125d84) /* 0.441983717 */, 14 },
864 /* 786 */ { MAD_F(0x071570de) /* 0.442734592 */, 14 },
865 /* 787 */ { MAD_F(0x0718848d) /* 0.443485785 */, 14 },
866 /* 788 */ { MAD_F(0x071b9891) /* 0.444237296 */, 14 },
867 /* 789 */ { MAD_F(0x071eaceb) /* 0.444989126 */, 14 },
868 /* 790 */ { MAD_F(0x0721c19a) /* 0.445741273 */, 14 },
869 /* 791 */ { MAD_F(0x0724d69e) /* 0.446493738 */, 14 },
870 /* 792 */ { MAD_F(0x0727ebf7) /* 0.447246519 */, 14 },
871 /* 793 */ { MAD_F(0x072b01a6) /* 0.447999618 */, 14 },
872 /* 794 */ { MAD_F(0x072e17a9) /* 0.448753033 */, 14 },
873 /* 795 */ { MAD_F(0x07312e01) /* 0.449506765 */, 14 },
874 /* 796 */ { MAD_F(0x073444ae) /* 0.450260813 */, 14 },
875 /* 797 */ { MAD_F(0x07375bb0) /* 0.451015176 */, 14 },
876 /* 798 */ { MAD_F(0x073a7307) /* 0.451769856 */, 14 },
877 /* 799 */ { MAD_F(0x073d8ab2) /* 0.452524850 */, 14 },
878
879 /* 800 */ { MAD_F(0x0740a2b2) /* 0.453280160 */, 14 },
880 /* 801 */ { MAD_F(0x0743bb06) /* 0.454035784 */, 14 },
881 /* 802 */ { MAD_F(0x0746d3af) /* 0.454791723 */, 14 },
882 /* 803 */ { MAD_F(0x0749ecac) /* 0.455547976 */, 14 },
883 /* 804 */ { MAD_F(0x074d05fe) /* 0.456304543 */, 14 },
884 /* 805 */ { MAD_F(0x07501fa3) /* 0.457061423 */, 14 },
885 /* 806 */ { MAD_F(0x0753399d) /* 0.457818618 */, 14 },
886 /* 807 */ { MAD_F(0x075653eb) /* 0.458576125 */, 14 },
887 /* 808 */ { MAD_F(0x07596e8d) /* 0.459333946 */, 14 },
888 /* 809 */ { MAD_F(0x075c8983) /* 0.460092079 */, 14 },
889 /* 810 */ { MAD_F(0x075fa4cc) /* 0.460850524 */, 14 },
890 /* 811 */ { MAD_F(0x0762c06a) /* 0.461609282 */, 14 },
891 /* 812 */ { MAD_F(0x0765dc5b) /* 0.462368352 */, 14 },
892 /* 813 */ { MAD_F(0x0768f8a0) /* 0.463127733 */, 14 },
893 /* 814 */ { MAD_F(0x076c1538) /* 0.463887426 */, 14 },
894 /* 815 */ { MAD_F(0x076f3224) /* 0.464647430 */, 14 },
895
896 /* 816 */ { MAD_F(0x07724f64) /* 0.465407744 */, 14 },
897 /* 817 */ { MAD_F(0x07756cf7) /* 0.466168370 */, 14 },
898 /* 818 */ { MAD_F(0x07788add) /* 0.466929306 */, 14 },
899 /* 819 */ { MAD_F(0x077ba916) /* 0.467690552 */, 14 },
900 /* 820 */ { MAD_F(0x077ec7a3) /* 0.468452108 */, 14 },
901 /* 821 */ { MAD_F(0x0781e683) /* 0.469213973 */, 14 },
902 /* 822 */ { MAD_F(0x078505b5) /* 0.469976148 */, 14 },
903 /* 823 */ { MAD_F(0x0788253b) /* 0.470738632 */, 14 },
904 /* 824 */ { MAD_F(0x078b4514) /* 0.471501425 */, 14 },
905 /* 825 */ { MAD_F(0x078e653f) /* 0.472264527 */, 14 },
906 /* 826 */ { MAD_F(0x079185be) /* 0.473027937 */, 14 },
907 /* 827 */ { MAD_F(0x0794a68f) /* 0.473791655 */, 14 },
908 /* 828 */ { MAD_F(0x0797c7b2) /* 0.474555681 */, 14 },
909 /* 829 */ { MAD_F(0x079ae929) /* 0.475320014 */, 14 },
910 /* 830 */ { MAD_F(0x079e0af1) /* 0.476084655 */, 14 },
911 /* 831 */ { MAD_F(0x07a12d0c) /* 0.476849603 */, 14 },
912
913 /* 832 */ { MAD_F(0x07a44f7a) /* 0.477614858 */, 14 },
914 /* 833 */ { MAD_F(0x07a7723a) /* 0.478380420 */, 14 },
915 /* 834 */ { MAD_F(0x07aa954c) /* 0.479146288 */, 14 },
916 /* 835 */ { MAD_F(0x07adb8b0) /* 0.479912463 */, 14 },
917 /* 836 */ { MAD_F(0x07b0dc67) /* 0.480678943 */, 14 },
918 /* 837 */ { MAD_F(0x07b4006f) /* 0.481445729 */, 14 },
919 /* 838 */ { MAD_F(0x07b724ca) /* 0.482212820 */, 14 },
920 /* 839 */ { MAD_F(0x07ba4976) /* 0.482980216 */, 14 },
921 /* 840 */ { MAD_F(0x07bd6e75) /* 0.483747918 */, 14 },
922 /* 841 */ { MAD_F(0x07c093c5) /* 0.484515924 */, 14 },
923 /* 842 */ { MAD_F(0x07c3b967) /* 0.485284235 */, 14 },
924 /* 843 */ { MAD_F(0x07c6df5a) /* 0.486052849 */, 14 },
925 /* 844 */ { MAD_F(0x07ca059f) /* 0.486821768 */, 14 },
926 /* 845 */ { MAD_F(0x07cd2c36) /* 0.487590991 */, 14 },
927 /* 846 */ { MAD_F(0x07d0531e) /* 0.488360517 */, 14 },
928 /* 847 */ { MAD_F(0x07d37a57) /* 0.489130346 */, 14 },
929
930 /* 848 */ { MAD_F(0x07d6a1e2) /* 0.489900479 */, 14 },
931 /* 849 */ { MAD_F(0x07d9c9be) /* 0.490670914 */, 14 },
932 /* 850 */ { MAD_F(0x07dcf1ec) /* 0.491441651 */, 14 },
933 /* 851 */ { MAD_F(0x07e01a6a) /* 0.492212691 */, 14 },
934 /* 852 */ { MAD_F(0x07e3433a) /* 0.492984033 */, 14 },
935 /* 853 */ { MAD_F(0x07e66c5a) /* 0.493755677 */, 14 },
936 /* 854 */ { MAD_F(0x07e995cc) /* 0.494527623 */, 14 },
937 /* 855 */ { MAD_F(0x07ecbf8e) /* 0.495299870 */, 14 },
938 /* 856 */ { MAD_F(0x07efe9a1) /* 0.496072418 */, 14 },
939 /* 857 */ { MAD_F(0x07f31405) /* 0.496845266 */, 14 },
940 /* 858 */ { MAD_F(0x07f63eba) /* 0.497618416 */, 14 },
941 /* 859 */ { MAD_F(0x07f969c0) /* 0.498391866 */, 14 },
942 /* 860 */ { MAD_F(0x07fc9516) /* 0.499165616 */, 14 },
943 /* 861 */ { MAD_F(0x07ffc0bc) /* 0.499939666 */, 14 },
944 /* 862 */ { MAD_F(0x04017659) /* 0.250357008 */, 15 },
945 /* 863 */ { MAD_F(0x04030c7d) /* 0.250744333 */, 15 },
946
947 /* 864 */ { MAD_F(0x0404a2c9) /* 0.251131807 */, 15 },
948 /* 865 */ { MAD_F(0x0406393d) /* 0.251519431 */, 15 },
949 /* 866 */ { MAD_F(0x0407cfd9) /* 0.251907204 */, 15 },
950 /* 867 */ { MAD_F(0x0409669d) /* 0.252295127 */, 15 },
951 /* 868 */ { MAD_F(0x040afd89) /* 0.252683198 */, 15 },
952 /* 869 */ { MAD_F(0x040c949e) /* 0.253071419 */, 15 },
953 /* 870 */ { MAD_F(0x040e2bda) /* 0.253459789 */, 15 },
954 /* 871 */ { MAD_F(0x040fc33e) /* 0.253848307 */, 15 },
955 /* 872 */ { MAD_F(0x04115aca) /* 0.254236974 */, 15 },
956 /* 873 */ { MAD_F(0x0412f27e) /* 0.254625790 */, 15 },
957 /* 874 */ { MAD_F(0x04148a5a) /* 0.255014755 */, 15 },
958 /* 875 */ { MAD_F(0x0416225d) /* 0.255403867 */, 15 },
959 /* 876 */ { MAD_F(0x0417ba89) /* 0.255793128 */, 15 },
960 /* 877 */ { MAD_F(0x041952dc) /* 0.256182537 */, 15 },
961 /* 878 */ { MAD_F(0x041aeb57) /* 0.256572095 */, 15 },
962 /* 879 */ { MAD_F(0x041c83fa) /* 0.256961800 */, 15 },
963
964 /* 880 */ { MAD_F(0x041e1cc4) /* 0.257351652 */, 15 },
965 /* 881 */ { MAD_F(0x041fb5b6) /* 0.257741653 */, 15 },
966 /* 882 */ { MAD_F(0x04214ed0) /* 0.258131801 */, 15 },
967 /* 883 */ { MAD_F(0x0422e811) /* 0.258522097 */, 15 },
968 /* 884 */ { MAD_F(0x04248179) /* 0.258912540 */, 15 },
969 /* 885 */ { MAD_F(0x04261b0a) /* 0.259303130 */, 15 },
970 /* 886 */ { MAD_F(0x0427b4c2) /* 0.259693868 */, 15 },
971 /* 887 */ { MAD_F(0x04294ea1) /* 0.260084752 */, 15 },
972 /* 888 */ { MAD_F(0x042ae8a7) /* 0.260475783 */, 15 },
973 /* 889 */ { MAD_F(0x042c82d6) /* 0.260866961 */, 15 },
974 /* 890 */ { MAD_F(0x042e1d2b) /* 0.261258286 */, 15 },
975 /* 891 */ { MAD_F(0x042fb7a8) /* 0.261649758 */, 15 },
976 /* 892 */ { MAD_F(0x0431524c) /* 0.262041376 */, 15 },
977 /* 893 */ { MAD_F(0x0432ed17) /* 0.262433140 */, 15 },
978 /* 894 */ { MAD_F(0x0434880a) /* 0.262825051 */, 15 },
979 /* 895 */ { MAD_F(0x04362324) /* 0.263217107 */, 15 },
980
981 /* 896 */ { MAD_F(0x0437be65) /* 0.263609310 */, 15 },
982 /* 897 */ { MAD_F(0x043959cd) /* 0.264001659 */, 15 },
983 /* 898 */ { MAD_F(0x043af55d) /* 0.264394153 */, 15 },
984 /* 899 */ { MAD_F(0x043c9113) /* 0.264786794 */, 15 },
985 /* 900 */ { MAD_F(0x043e2cf1) /* 0.265179580 */, 15 },
986 /* 901 */ { MAD_F(0x043fc8f6) /* 0.265572511 */, 15 },
987 /* 902 */ { MAD_F(0x04416522) /* 0.265965588 */, 15 },
988 /* 903 */ { MAD_F(0x04430174) /* 0.266358810 */, 15 },
989 /* 904 */ { MAD_F(0x04449dee) /* 0.266752177 */, 15 },
990 /* 905 */ { MAD_F(0x04463a8f) /* 0.267145689 */, 15 },
991 /* 906 */ { MAD_F(0x0447d756) /* 0.267539347 */, 15 },
992 /* 907 */ { MAD_F(0x04497445) /* 0.267933149 */, 15 },
993 /* 908 */ { MAD_F(0x044b115a) /* 0.268327096 */, 15 },
994 /* 909 */ { MAD_F(0x044cae96) /* 0.268721187 */, 15 },
995 /* 910 */ { MAD_F(0x044e4bf9) /* 0.269115423 */, 15 },
996 /* 911 */ { MAD_F(0x044fe983) /* 0.269509804 */, 15 },
997
998 /* 912 */ { MAD_F(0x04518733) /* 0.269904329 */, 15 },
999 /* 913 */ { MAD_F(0x0453250a) /* 0.270298998 */, 15 },
1000 /* 914 */ { MAD_F(0x0454c308) /* 0.270693811 */, 15 },
1001 /* 915 */ { MAD_F(0x0456612d) /* 0.271088768 */, 15 },
1002 /* 916 */ { MAD_F(0x0457ff78) /* 0.271483869 */, 15 },
1003 /* 917 */ { MAD_F(0x04599dea) /* 0.271879114 */, 15 },
1004 /* 918 */ { MAD_F(0x045b3c82) /* 0.272274503 */, 15 },
1005 /* 919 */ { MAD_F(0x045cdb41) /* 0.272670035 */, 15 },
1006 /* 920 */ { MAD_F(0x045e7a26) /* 0.273065710 */, 15 },
1007 /* 921 */ { MAD_F(0x04601932) /* 0.273461530 */, 15 },
1008 /* 922 */ { MAD_F(0x0461b864) /* 0.273857492 */, 15 },
1009 /* 923 */ { MAD_F(0x046357bd) /* 0.274253597 */, 15 },
1010 /* 924 */ { MAD_F(0x0464f73c) /* 0.274649846 */, 15 },
1011 /* 925 */ { MAD_F(0x046696e2) /* 0.275046238 */, 15 },
1012 /* 926 */ { MAD_F(0x046836ae) /* 0.275442772 */, 15 },
1013 /* 927 */ { MAD_F(0x0469d6a0) /* 0.275839449 */, 15 },
1014
1015 /* 928 */ { MAD_F(0x046b76b9) /* 0.276236269 */, 15 },
1016 /* 929 */ { MAD_F(0x046d16f7) /* 0.276633232 */, 15 },
1017 /* 930 */ { MAD_F(0x046eb75c) /* 0.277030337 */, 15 },
1018 /* 931 */ { MAD_F(0x047057e8) /* 0.277427584 */, 15 },
1019 /* 932 */ { MAD_F(0x0471f899) /* 0.277824973 */, 15 },
1020 /* 933 */ { MAD_F(0x04739971) /* 0.278222505 */, 15 },
1021 /* 934 */ { MAD_F(0x04753a6f) /* 0.278620179 */, 15 },
1022 /* 935 */ { MAD_F(0x0476db92) /* 0.279017995 */, 15 },
1023 /* 936 */ { MAD_F(0x04787cdc) /* 0.279415952 */, 15 },
1024 /* 937 */ { MAD_F(0x047a1e4c) /* 0.279814051 */, 15 },
1025 /* 938 */ { MAD_F(0x047bbfe2) /* 0.280212292 */, 15 },
1026 /* 939 */ { MAD_F(0x047d619e) /* 0.280610675 */, 15 },
1027 /* 940 */ { MAD_F(0x047f0380) /* 0.281009199 */, 15 },
1028 /* 941 */ { MAD_F(0x0480a588) /* 0.281407864 */, 15 },
1029 /* 942 */ { MAD_F(0x048247b6) /* 0.281806670 */, 15 },
1030 /* 943 */ { MAD_F(0x0483ea0a) /* 0.282205618 */, 15 },
1031
1032 /* 944 */ { MAD_F(0x04858c83) /* 0.282604707 */, 15 },
1033 /* 945 */ { MAD_F(0x04872f22) /* 0.283003936 */, 15 },
1034 /* 946 */ { MAD_F(0x0488d1e8) /* 0.283403307 */, 15 },
1035 /* 947 */ { MAD_F(0x048a74d3) /* 0.283802818 */, 15 },
1036 /* 948 */ { MAD_F(0x048c17e3) /* 0.284202470 */, 15 },
1037 /* 949 */ { MAD_F(0x048dbb1a) /* 0.284602263 */, 15 },
1038 /* 950 */ { MAD_F(0x048f5e76) /* 0.285002195 */, 15 },
1039 /* 951 */ { MAD_F(0x049101f8) /* 0.285402269 */, 15 },
1040 /* 952 */ { MAD_F(0x0492a59f) /* 0.285802482 */, 15 },
1041 /* 953 */ { MAD_F(0x0494496c) /* 0.286202836 */, 15 },
1042 /* 954 */ { MAD_F(0x0495ed5f) /* 0.286603329 */, 15 },
1043 /* 955 */ { MAD_F(0x04979177) /* 0.287003963 */, 15 },
1044 /* 956 */ { MAD_F(0x049935b5) /* 0.287404737 */, 15 },
1045 /* 957 */ { MAD_F(0x049ada19) /* 0.287805650 */, 15 },
1046 /* 958 */ { MAD_F(0x049c7ea1) /* 0.288206703 */, 15 },
1047 /* 959 */ { MAD_F(0x049e2350) /* 0.288607895 */, 15 },
1048
1049 /* 960 */ { MAD_F(0x049fc824) /* 0.289009227 */, 15 },
1050 /* 961 */ { MAD_F(0x04a16d1d) /* 0.289410699 */, 15 },
1051 /* 962 */ { MAD_F(0x04a3123b) /* 0.289812309 */, 15 },
1052 /* 963 */ { MAD_F(0x04a4b77f) /* 0.290214059 */, 15 },
1053 /* 964 */ { MAD_F(0x04a65ce8) /* 0.290615948 */, 15 },
1054 /* 965 */ { MAD_F(0x04a80277) /* 0.291017976 */, 15 },
1055 /* 966 */ { MAD_F(0x04a9a82b) /* 0.291420143 */, 15 },
1056 /* 967 */ { MAD_F(0x04ab4e04) /* 0.291822449 */, 15 },
1057 /* 968 */ { MAD_F(0x04acf402) /* 0.292224893 */, 15 },
1058 /* 969 */ { MAD_F(0x04ae9a26) /* 0.292627476 */, 15 },
1059 /* 970 */ { MAD_F(0x04b0406e) /* 0.293030197 */, 15 },
1060 /* 971 */ { MAD_F(0x04b1e6dc) /* 0.293433057 */, 15 },
1061 /* 972 */ { MAD_F(0x04b38d6f) /* 0.293836055 */, 15 },
1062 /* 973 */ { MAD_F(0x04b53427) /* 0.294239192 */, 15 },
1063 /* 974 */ { MAD_F(0x04b6db05) /* 0.294642466 */, 15 },
1064 /* 975 */ { MAD_F(0x04b88207) /* 0.295045879 */, 15 },
1065
1066 /* 976 */ { MAD_F(0x04ba292e) /* 0.295449429 */, 15 },
1067 /* 977 */ { MAD_F(0x04bbd07a) /* 0.295853118 */, 15 },
1068 /* 978 */ { MAD_F(0x04bd77ec) /* 0.296256944 */, 15 },
1069 /* 979 */ { MAD_F(0x04bf1f82) /* 0.296660907 */, 15 },
1070 /* 980 */ { MAD_F(0x04c0c73d) /* 0.297065009 */, 15 },
1071 /* 981 */ { MAD_F(0x04c26f1d) /* 0.297469248 */, 15 },
1072 /* 982 */ { MAD_F(0x04c41722) /* 0.297873624 */, 15 },
1073 /* 983 */ { MAD_F(0x04c5bf4c) /* 0.298278137 */, 15 },
1074 /* 984 */ { MAD_F(0x04c7679a) /* 0.298682788 */, 15 },
1075 /* 985 */ { MAD_F(0x04c9100d) /* 0.299087576 */, 15 },
1076 /* 986 */ { MAD_F(0x04cab8a6) /* 0.299492500 */, 15 },
1077 /* 987 */ { MAD_F(0x04cc6163) /* 0.299897562 */, 15 },
1078 /* 988 */ { MAD_F(0x04ce0a44) /* 0.300302761 */, 15 },
1079 /* 989 */ { MAD_F(0x04cfb34b) /* 0.300708096 */, 15 },
1080 /* 990 */ { MAD_F(0x04d15c76) /* 0.301113568 */, 15 },
1081 /* 991 */ { MAD_F(0x04d305c5) /* 0.301519176 */, 15 },
1082
1083 /* 992 */ { MAD_F(0x04d4af3a) /* 0.301924921 */, 15 },
1084 /* 993 */ { MAD_F(0x04d658d2) /* 0.302330802 */, 15 },
1085 /* 994 */ { MAD_F(0x04d80290) /* 0.302736820 */, 15 },
1086 /* 995 */ { MAD_F(0x04d9ac72) /* 0.303142973 */, 15 },
1087 /* 996 */ { MAD_F(0x04db5679) /* 0.303549263 */, 15 },
1088 /* 997 */ { MAD_F(0x04dd00a4) /* 0.303955689 */, 15 },
1089 /* 998 */ { MAD_F(0x04deaaf3) /* 0.304362251 */, 15 },
1090 /* 999 */ { MAD_F(0x04e05567) /* 0.304768948 */, 15 },
1091 /* 1000 */ { MAD_F(0x04e20000) /* 0.305175781 */, 15 },
1092 /* 1001 */ { MAD_F(0x04e3aabd) /* 0.305582750 */, 15 },
1093 /* 1002 */ { MAD_F(0x04e5559e) /* 0.305989854 */, 15 },
1094 /* 1003 */ { MAD_F(0x04e700a3) /* 0.306397094 */, 15 },
1095 /* 1004 */ { MAD_F(0x04e8abcd) /* 0.306804470 */, 15 },
1096 /* 1005 */ { MAD_F(0x04ea571c) /* 0.307211980 */, 15 },
1097 /* 1006 */ { MAD_F(0x04ec028e) /* 0.307619626 */, 15 },
1098 /* 1007 */ { MAD_F(0x04edae25) /* 0.308027406 */, 15 },
1099
1100 /* 1008 */ { MAD_F(0x04ef59e0) /* 0.308435322 */, 15 },
1101 /* 1009 */ { MAD_F(0x04f105bf) /* 0.308843373 */, 15 },
1102 /* 1010 */ { MAD_F(0x04f2b1c3) /* 0.309251558 */, 15 },
1103 /* 1011 */ { MAD_F(0x04f45dea) /* 0.309659879 */, 15 },
1104 /* 1012 */ { MAD_F(0x04f60a36) /* 0.310068333 */, 15 },
1105 /* 1013 */ { MAD_F(0x04f7b6a6) /* 0.310476923 */, 15 },
1106 /* 1014 */ { MAD_F(0x04f9633a) /* 0.310885647 */, 15 },
1107 /* 1015 */ { MAD_F(0x04fb0ff2) /* 0.311294505 */, 15 },
1108 /* 1016 */ { MAD_F(0x04fcbcce) /* 0.311703498 */, 15 },
1109 /* 1017 */ { MAD_F(0x04fe69ce) /* 0.312112625 */, 15 },
1110 /* 1018 */ { MAD_F(0x050016f3) /* 0.312521885 */, 15 },
1111 /* 1019 */ { MAD_F(0x0501c43b) /* 0.312931280 */, 15 },
1112 /* 1020 */ { MAD_F(0x050371a7) /* 0.313340809 */, 15 },
1113 /* 1021 */ { MAD_F(0x05051f37) /* 0.313750472 */, 15 },
1114 /* 1022 */ { MAD_F(0x0506cceb) /* 0.314160269 */, 15 },
1115 /* 1023 */ { MAD_F(0x05087ac2) /* 0.314570199 */, 15 },
1116
1117 /* 1024 */ { MAD_F(0x050a28be) /* 0.314980262 */, 15 },
1118 /* 1025 */ { MAD_F(0x050bd6de) /* 0.315390460 */, 15 },
1119 /* 1026 */ { MAD_F(0x050d8521) /* 0.315800790 */, 15 },
1120 /* 1027 */ { MAD_F(0x050f3388) /* 0.316211255 */, 15 },
1121 /* 1028 */ { MAD_F(0x0510e213) /* 0.316621852 */, 15 },
1122 /* 1029 */ { MAD_F(0x051290c2) /* 0.317032582 */, 15 },
1123 /* 1030 */ { MAD_F(0x05143f94) /* 0.317443446 */, 15 },
1124 /* 1031 */ { MAD_F(0x0515ee8a) /* 0.317854442 */, 15 },
1125 /* 1032 */ { MAD_F(0x05179da4) /* 0.318265572 */, 15 },
1126 /* 1033 */ { MAD_F(0x05194ce1) /* 0.318676834 */, 15 },
1127 /* 1034 */ { MAD_F(0x051afc42) /* 0.319088229 */, 15 },
1128 /* 1035 */ { MAD_F(0x051cabc7) /* 0.319499756 */, 15 },
1129 /* 1036 */ { MAD_F(0x051e5b6f) /* 0.319911417 */, 15 },
1130 /* 1037 */ { MAD_F(0x05200b3a) /* 0.320323209 */, 15 },
1131 /* 1038 */ { MAD_F(0x0521bb2a) /* 0.320735134 */, 15 },
1132 /* 1039 */ { MAD_F(0x05236b3d) /* 0.321147192 */, 15 },
1133
1134 /* 1040 */ { MAD_F(0x05251b73) /* 0.321559381 */, 15 },
1135 /* 1041 */ { MAD_F(0x0526cbcd) /* 0.321971703 */, 15 },
1136 /* 1042 */ { MAD_F(0x05287c4a) /* 0.322384156 */, 15 },
1137 /* 1043 */ { MAD_F(0x052a2cea) /* 0.322796742 */, 15 },
1138 /* 1044 */ { MAD_F(0x052bddae) /* 0.323209460 */, 15 },
1139 /* 1045 */ { MAD_F(0x052d8e96) /* 0.323622309 */, 15 },
1140 /* 1046 */ { MAD_F(0x052f3fa1) /* 0.324035290 */, 15 },
1141 /* 1047 */ { MAD_F(0x0530f0cf) /* 0.324448403 */, 15 },
1142 /* 1048 */ { MAD_F(0x0532a220) /* 0.324861647 */, 15 },
1143 /* 1049 */ { MAD_F(0x05345395) /* 0.325275023 */, 15 },
1144 /* 1050 */ { MAD_F(0x0536052d) /* 0.325688530 */, 15 },
1145 /* 1051 */ { MAD_F(0x0537b6e8) /* 0.326102168 */, 15 },
1146 /* 1052 */ { MAD_F(0x053968c6) /* 0.326515938 */, 15 },
1147 /* 1053 */ { MAD_F(0x053b1ac8) /* 0.326929839 */, 15 },
1148 /* 1054 */ { MAD_F(0x053ccced) /* 0.327343870 */, 15 },
1149 /* 1055 */ { MAD_F(0x053e7f35) /* 0.327758033 */, 15 },
1150
1151 /* 1056 */ { MAD_F(0x054031a0) /* 0.328172327 */, 15 },
1152 /* 1057 */ { MAD_F(0x0541e42e) /* 0.328586751 */, 15 },
1153 /* 1058 */ { MAD_F(0x054396df) /* 0.329001306 */, 15 },
1154 /* 1059 */ { MAD_F(0x054549b4) /* 0.329415992 */, 15 },
1155 /* 1060 */ { MAD_F(0x0546fcab) /* 0.329830808 */, 15 },
1156 /* 1061 */ { MAD_F(0x0548afc6) /* 0.330245755 */, 15 },
1157 /* 1062 */ { MAD_F(0x054a6303) /* 0.330660832 */, 15 },
1158 /* 1063 */ { MAD_F(0x054c1663) /* 0.331076039 */, 15 },
1159 /* 1064 */ { MAD_F(0x054dc9e7) /* 0.331491377 */, 15 },
1160 /* 1065 */ { MAD_F(0x054f7d8d) /* 0.331906845 */, 15 },
1161 /* 1066 */ { MAD_F(0x05513156) /* 0.332322443 */, 15 },
1162 /* 1067 */ { MAD_F(0x0552e542) /* 0.332738170 */, 15 },
1163 /* 1068 */ { MAD_F(0x05549951) /* 0.333154028 */, 15 },
1164 /* 1069 */ { MAD_F(0x05564d83) /* 0.333570016 */, 15 },
1165 /* 1070 */ { MAD_F(0x055801d8) /* 0.333986133 */, 15 },
1166 /* 1071 */ { MAD_F(0x0559b64f) /* 0.334402380 */, 15 },
1167
1168 /* 1072 */ { MAD_F(0x055b6ae9) /* 0.334818756 */, 15 },
1169 /* 1073 */ { MAD_F(0x055d1fa6) /* 0.335235262 */, 15 },
1170 /* 1074 */ { MAD_F(0x055ed486) /* 0.335651898 */, 15 },
1171 /* 1075 */ { MAD_F(0x05608988) /* 0.336068662 */, 15 },
1172 /* 1076 */ { MAD_F(0x05623ead) /* 0.336485556 */, 15 },
1173 /* 1077 */ { MAD_F(0x0563f3f5) /* 0.336902579 */, 15 },
1174 /* 1078 */ { MAD_F(0x0565a960) /* 0.337319732 */, 15 },
1175 /* 1079 */ { MAD_F(0x05675eed) /* 0.337737013 */, 15 },
1176 /* 1080 */ { MAD_F(0x0569149c) /* 0.338154423 */, 15 },
1177 /* 1081 */ { MAD_F(0x056aca6f) /* 0.338571962 */, 15 },
1178 /* 1082 */ { MAD_F(0x056c8064) /* 0.338989630 */, 15 },
1179 /* 1083 */ { MAD_F(0x056e367b) /* 0.339407426 */, 15 },
1180 /* 1084 */ { MAD_F(0x056fecb5) /* 0.339825351 */, 15 },
1181 /* 1085 */ { MAD_F(0x0571a311) /* 0.340243405 */, 15 },
1182 /* 1086 */ { MAD_F(0x05735990) /* 0.340661587 */, 15 },
1183 /* 1087 */ { MAD_F(0x05751032) /* 0.341079898 */, 15 },
1184
1185 /* 1088 */ { MAD_F(0x0576c6f5) /* 0.341498336 */, 15 },
1186 /* 1089 */ { MAD_F(0x05787ddc) /* 0.341916903 */, 15 },
1187 /* 1090 */ { MAD_F(0x057a34e4) /* 0.342335598 */, 15 },
1188 /* 1091 */ { MAD_F(0x057bec0f) /* 0.342754421 */, 15 },
1189 /* 1092 */ { MAD_F(0x057da35d) /* 0.343173373 */, 15 },
1190 /* 1093 */ { MAD_F(0x057f5acc) /* 0.343592452 */, 15 },
1191 /* 1094 */ { MAD_F(0x0581125e) /* 0.344011659 */, 15 },
1192 /* 1095 */ { MAD_F(0x0582ca12) /* 0.344430993 */, 15 },
1193 /* 1096 */ { MAD_F(0x058481e9) /* 0.344850455 */, 15 },
1194 /* 1097 */ { MAD_F(0x058639e2) /* 0.345270045 */, 15 },
1195 /* 1098 */ { MAD_F(0x0587f1fd) /* 0.345689763 */, 15 },
1196 /* 1099 */ { MAD_F(0x0589aa3a) /* 0.346109608 */, 15 },
1197 /* 1100 */ { MAD_F(0x058b629a) /* 0.346529580 */, 15 },
1198 /* 1101 */ { MAD_F(0x058d1b1b) /* 0.346949679 */, 15 },
1199 /* 1102 */ { MAD_F(0x058ed3bf) /* 0.347369906 */, 15 },
1200 /* 1103 */ { MAD_F(0x05908c85) /* 0.347790260 */, 15 },
1201
1202 /* 1104 */ { MAD_F(0x0592456d) /* 0.348210741 */, 15 },
1203 /* 1105 */ { MAD_F(0x0593fe77) /* 0.348631348 */, 15 },
1204 /* 1106 */ { MAD_F(0x0595b7a3) /* 0.349052083 */, 15 },
1205 /* 1107 */ { MAD_F(0x059770f1) /* 0.349472945 */, 15 },
1206 /* 1108 */ { MAD_F(0x05992a61) /* 0.349893933 */, 15 },
1207 /* 1109 */ { MAD_F(0x059ae3f3) /* 0.350315048 */, 15 },
1208 /* 1110 */ { MAD_F(0x059c9da8) /* 0.350736290 */, 15 },
1209 /* 1111 */ { MAD_F(0x059e577e) /* 0.351157658 */, 15 },
1210 /* 1112 */ { MAD_F(0x05a01176) /* 0.351579152 */, 15 },
1211 /* 1113 */ { MAD_F(0x05a1cb90) /* 0.352000773 */, 15 },
1212 /* 1114 */ { MAD_F(0x05a385cc) /* 0.352422520 */, 15 },
1213 /* 1115 */ { MAD_F(0x05a5402a) /* 0.352844394 */, 15 },
1214 /* 1116 */ { MAD_F(0x05a6faa9) /* 0.353266393 */, 15 },
1215 /* 1117 */ { MAD_F(0x05a8b54b) /* 0.353688519 */, 15 },
1216 /* 1118 */ { MAD_F(0x05aa700e) /* 0.354110771 */, 15 },
1217 /* 1119 */ { MAD_F(0x05ac2af3) /* 0.354533148 */, 15 },
1218
1219 /* 1120 */ { MAD_F(0x05ade5fa) /* 0.354955651 */, 15 },
1220 /* 1121 */ { MAD_F(0x05afa123) /* 0.355378281 */, 15 },
1221 /* 1122 */ { MAD_F(0x05b15c6d) /* 0.355801035 */, 15 },
1222 /* 1123 */ { MAD_F(0x05b317d9) /* 0.356223916 */, 15 },
1223 /* 1124 */ { MAD_F(0x05b4d367) /* 0.356646922 */, 15 },
1224 /* 1125 */ { MAD_F(0x05b68f16) /* 0.357070053 */, 15 },
1225 /* 1126 */ { MAD_F(0x05b84ae7) /* 0.357493310 */, 15 },
1226 /* 1127 */ { MAD_F(0x05ba06da) /* 0.357916692 */, 15 },
1227 /* 1128 */ { MAD_F(0x05bbc2ef) /* 0.358340200 */, 15 },
1228 /* 1129 */ { MAD_F(0x05bd7f25) /* 0.358763832 */, 15 },
1229 /* 1130 */ { MAD_F(0x05bf3b7c) /* 0.359187590 */, 15 },
1230 /* 1131 */ { MAD_F(0x05c0f7f5) /* 0.359611472 */, 15 },
1231 /* 1132 */ { MAD_F(0x05c2b490) /* 0.360035480 */, 15 },
1232 /* 1133 */ { MAD_F(0x05c4714c) /* 0.360459613 */, 15 },
1233 /* 1134 */ { MAD_F(0x05c62e2a) /* 0.360883870 */, 15 },
1234 /* 1135 */ { MAD_F(0x05c7eb29) /* 0.361308252 */, 15 },
1235
1236 /* 1136 */ { MAD_F(0x05c9a84a) /* 0.361732758 */, 15 },
1237 /* 1137 */ { MAD_F(0x05cb658c) /* 0.362157390 */, 15 },
1238 /* 1138 */ { MAD_F(0x05cd22ef) /* 0.362582145 */, 15 },
1239 /* 1139 */ { MAD_F(0x05cee074) /* 0.363007026 */, 15 },
1240 /* 1140 */ { MAD_F(0x05d09e1b) /* 0.363432030 */, 15 },
1241 /* 1141 */ { MAD_F(0x05d25be2) /* 0.363857159 */, 15 },
1242 /* 1142 */ { MAD_F(0x05d419cb) /* 0.364282412 */, 15 },
1243 /* 1143 */ { MAD_F(0x05d5d7d5) /* 0.364707789 */, 15 },
1244 /* 1144 */ { MAD_F(0x05d79601) /* 0.365133291 */, 15 },
1245 /* 1145 */ { MAD_F(0x05d9544e) /* 0.365558916 */, 15 },
1246 /* 1146 */ { MAD_F(0x05db12bc) /* 0.365984665 */, 15 },
1247 /* 1147 */ { MAD_F(0x05dcd14c) /* 0.366410538 */, 15 },
1248 /* 1148 */ { MAD_F(0x05de8ffc) /* 0.366836535 */, 15 },
1249 /* 1149 */ { MAD_F(0x05e04ece) /* 0.367262655 */, 15 },
1250 /* 1150 */ { MAD_F(0x05e20dc1) /* 0.367688900 */, 15 },
1251 /* 1151 */ { MAD_F(0x05e3ccd5) /* 0.368115267 */, 15 },
1252
1253 /* 1152 */ { MAD_F(0x05e58c0b) /* 0.368541759 */, 15 },
1254 /* 1153 */ { MAD_F(0x05e74b61) /* 0.368968373 */, 15 },
1255 /* 1154 */ { MAD_F(0x05e90ad9) /* 0.369395111 */, 15 },
1256 /* 1155 */ { MAD_F(0x05eaca72) /* 0.369821973 */, 15 },
1257 /* 1156 */ { MAD_F(0x05ec8a2b) /* 0.370248957 */, 15 },
1258 /* 1157 */ { MAD_F(0x05ee4a06) /* 0.370676065 */, 15 },
1259 /* 1158 */ { MAD_F(0x05f00a02) /* 0.371103295 */, 15 },
1260 /* 1159 */ { MAD_F(0x05f1ca1f) /* 0.371530649 */, 15 },
1261 /* 1160 */ { MAD_F(0x05f38a5d) /* 0.371958126 */, 15 },
1262 /* 1161 */ { MAD_F(0x05f54abc) /* 0.372385725 */, 15 },
1263 /* 1162 */ { MAD_F(0x05f70b3c) /* 0.372813448 */, 15 },
1264 /* 1163 */ { MAD_F(0x05f8cbdc) /* 0.373241292 */, 15 },
1265 /* 1164 */ { MAD_F(0x05fa8c9e) /* 0.373669260 */, 15 },
1266 /* 1165 */ { MAD_F(0x05fc4d81) /* 0.374097350 */, 15 },
1267 /* 1166 */ { MAD_F(0x05fe0e84) /* 0.374525563 */, 15 },
1268 /* 1167 */ { MAD_F(0x05ffcfa8) /* 0.374953898 */, 15 },
1269
1270 /* 1168 */ { MAD_F(0x060190ee) /* 0.375382356 */, 15 },
1271 /* 1169 */ { MAD_F(0x06035254) /* 0.375810936 */, 15 },
1272 /* 1170 */ { MAD_F(0x060513da) /* 0.376239638 */, 15 },
1273 /* 1171 */ { MAD_F(0x0606d582) /* 0.376668462 */, 15 },
1274 /* 1172 */ { MAD_F(0x0608974a) /* 0.377097408 */, 15 },
1275 /* 1173 */ { MAD_F(0x060a5934) /* 0.377526476 */, 15 },
1276 /* 1174 */ { MAD_F(0x060c1b3d) /* 0.377955667 */, 15 },
1277 /* 1175 */ { MAD_F(0x060ddd68) /* 0.378384979 */, 15 },
1278 /* 1176 */ { MAD_F(0x060f9fb3) /* 0.378814413 */, 15 },
1279 /* 1177 */ { MAD_F(0x0611621f) /* 0.379243968 */, 15 },
1280 /* 1178 */ { MAD_F(0x061324ac) /* 0.379673646 */, 15 },
1281 /* 1179 */ { MAD_F(0x0614e759) /* 0.380103444 */, 15 },
1282 /* 1180 */ { MAD_F(0x0616aa27) /* 0.380533365 */, 15 },
1283 /* 1181 */ { MAD_F(0x06186d16) /* 0.380963407 */, 15 },
1284 /* 1182 */ { MAD_F(0x061a3025) /* 0.381393570 */, 15 },
1285 /* 1183 */ { MAD_F(0x061bf354) /* 0.381823855 */, 15 },
1286
1287 /* 1184 */ { MAD_F(0x061db6a5) /* 0.382254261 */, 15 },
1288 /* 1185 */ { MAD_F(0x061f7a15) /* 0.382684788 */, 15 },
1289 /* 1186 */ { MAD_F(0x06213da7) /* 0.383115436 */, 15 },
1290 /* 1187 */ { MAD_F(0x06230158) /* 0.383546205 */, 15 },
1291 /* 1188 */ { MAD_F(0x0624c52a) /* 0.383977096 */, 15 },
1292 /* 1189 */ { MAD_F(0x0626891d) /* 0.384408107 */, 15 },
1293 /* 1190 */ { MAD_F(0x06284d30) /* 0.384839239 */, 15 },
1294 /* 1191 */ { MAD_F(0x062a1164) /* 0.385270492 */, 15 },
1295 /* 1192 */ { MAD_F(0x062bd5b8) /* 0.385701865 */, 15 },
1296 /* 1193 */ { MAD_F(0x062d9a2c) /* 0.386133359 */, 15 },
1297 /* 1194 */ { MAD_F(0x062f5ec1) /* 0.386564974 */, 15 },
1298 /* 1195 */ { MAD_F(0x06312376) /* 0.386996709 */, 15 },
1299 /* 1196 */ { MAD_F(0x0632e84b) /* 0.387428565 */, 15 },
1300 /* 1197 */ { MAD_F(0x0634ad41) /* 0.387860541 */, 15 },
1301 /* 1198 */ { MAD_F(0x06367257) /* 0.388292637 */, 15 },
1302 /* 1199 */ { MAD_F(0x0638378d) /* 0.388724854 */, 15 },
1303
1304 /* 1200 */ { MAD_F(0x0639fce4) /* 0.389157191 */, 15 },
1305 /* 1201 */ { MAD_F(0x063bc25b) /* 0.389589648 */, 15 },
1306 /* 1202 */ { MAD_F(0x063d87f2) /* 0.390022225 */, 15 },
1307 /* 1203 */ { MAD_F(0x063f4da9) /* 0.390454922 */, 15 },
1308 /* 1204 */ { MAD_F(0x06411380) /* 0.390887739 */, 15 },
1309 /* 1205 */ { MAD_F(0x0642d978) /* 0.391320675 */, 15 },
1310 /* 1206 */ { MAD_F(0x06449f8f) /* 0.391753732 */, 15 },
1311 /* 1207 */ { MAD_F(0x064665c7) /* 0.392186908 */, 15 },
1312 /* 1208 */ { MAD_F(0x06482c1f) /* 0.392620204 */, 15 },
1313 /* 1209 */ { MAD_F(0x0649f297) /* 0.393053619 */, 15 },
1314 /* 1210 */ { MAD_F(0x064bb92f) /* 0.393487154 */, 15 },
1315 /* 1211 */ { MAD_F(0x064d7fe8) /* 0.393920808 */, 15 },
1316 /* 1212 */ { MAD_F(0x064f46c0) /* 0.394354582 */, 15 },
1317 /* 1213 */ { MAD_F(0x06510db8) /* 0.394788475 */, 15 },
1318 /* 1214 */ { MAD_F(0x0652d4d0) /* 0.395222488 */, 15 },
1319 /* 1215 */ { MAD_F(0x06549c09) /* 0.395656619 */, 15 },
1320
1321 /* 1216 */ { MAD_F(0x06566361) /* 0.396090870 */, 15 },
1322 /* 1217 */ { MAD_F(0x06582ad9) /* 0.396525239 */, 15 },
1323 /* 1218 */ { MAD_F(0x0659f271) /* 0.396959728 */, 15 },
1324 /* 1219 */ { MAD_F(0x065bba29) /* 0.397394336 */, 15 },
1325 /* 1220 */ { MAD_F(0x065d8201) /* 0.397829062 */, 15 },
1326 /* 1221 */ { MAD_F(0x065f49f9) /* 0.398263907 */, 15 },
1327 /* 1222 */ { MAD_F(0x06611211) /* 0.398698871 */, 15 },
1328 /* 1223 */ { MAD_F(0x0662da49) /* 0.399133954 */, 15 },
1329 /* 1224 */ { MAD_F(0x0664a2a0) /* 0.399569155 */, 15 },
1330 /* 1225 */ { MAD_F(0x06666b17) /* 0.400004475 */, 15 },
1331 /* 1226 */ { MAD_F(0x066833ae) /* 0.400439913 */, 15 },
1332 /* 1227 */ { MAD_F(0x0669fc65) /* 0.400875470 */, 15 },
1333 /* 1228 */ { MAD_F(0x066bc53c) /* 0.401311145 */, 15 },
1334 /* 1229 */ { MAD_F(0x066d8e32) /* 0.401746938 */, 15 },
1335 /* 1230 */ { MAD_F(0x066f5748) /* 0.402182850 */, 15 },
1336 /* 1231 */ { MAD_F(0x0671207e) /* 0.402618879 */, 15 },
1337
1338 /* 1232 */ { MAD_F(0x0672e9d4) /* 0.403055027 */, 15 },
1339 /* 1233 */ { MAD_F(0x0674b349) /* 0.403491293 */, 15 },
1340 /* 1234 */ { MAD_F(0x06767cde) /* 0.403927676 */, 15 },
1341 /* 1235 */ { MAD_F(0x06784692) /* 0.404364178 */, 15 },
1342 /* 1236 */ { MAD_F(0x067a1066) /* 0.404800797 */, 15 },
1343 /* 1237 */ { MAD_F(0x067bda5a) /* 0.405237535 */, 15 },
1344 /* 1238 */ { MAD_F(0x067da46d) /* 0.405674390 */, 15 },
1345 /* 1239 */ { MAD_F(0x067f6ea0) /* 0.406111362 */, 15 },
1346 /* 1240 */ { MAD_F(0x068138f3) /* 0.406548452 */, 15 },
1347 /* 1241 */ { MAD_F(0x06830365) /* 0.406985660 */, 15 },
1348 /* 1242 */ { MAD_F(0x0684cdf6) /* 0.407422985 */, 15 },
1349 /* 1243 */ { MAD_F(0x068698a8) /* 0.407860427 */, 15 },
1350 /* 1244 */ { MAD_F(0x06886378) /* 0.408297987 */, 15 },
1351 /* 1245 */ { MAD_F(0x068a2e68) /* 0.408735664 */, 15 },
1352 /* 1246 */ { MAD_F(0x068bf978) /* 0.409173458 */, 15 },
1353 /* 1247 */ { MAD_F(0x068dc4a7) /* 0.409611370 */, 15 },
1354
1355 /* 1248 */ { MAD_F(0x068f8ff5) /* 0.410049398 */, 15 },
1356 /* 1249 */ { MAD_F(0x06915b63) /* 0.410487544 */, 15 },
1357 /* 1250 */ { MAD_F(0x069326f0) /* 0.410925806 */, 15 },
1358 /* 1251 */ { MAD_F(0x0694f29c) /* 0.411364185 */, 15 },
1359 /* 1252 */ { MAD_F(0x0696be68) /* 0.411802681 */, 15 },
1360 /* 1253 */ { MAD_F(0x06988a54) /* 0.412241294 */, 15 },
1361 /* 1254 */ { MAD_F(0x069a565e) /* 0.412680024 */, 15 },
1362 /* 1255 */ { MAD_F(0x069c2288) /* 0.413118870 */, 15 },
1363 /* 1256 */ { MAD_F(0x069deed1) /* 0.413557833 */, 15 },
1364 /* 1257 */ { MAD_F(0x069fbb3a) /* 0.413996912 */, 15 },
1365 /* 1258 */ { MAD_F(0x06a187c1) /* 0.414436108 */, 15 },
1366 /* 1259 */ { MAD_F(0x06a35468) /* 0.414875420 */, 15 },
1367 /* 1260 */ { MAD_F(0x06a5212f) /* 0.415314849 */, 15 },
1368 /* 1261 */ { MAD_F(0x06a6ee14) /* 0.415754393 */, 15 },
1369 /* 1262 */ { MAD_F(0x06a8bb18) /* 0.416194054 */, 15 },
1370 /* 1263 */ { MAD_F(0x06aa883c) /* 0.416633831 */, 15 },
1371
1372 /* 1264 */ { MAD_F(0x06ac557f) /* 0.417073724 */, 15 },
1373 /* 1265 */ { MAD_F(0x06ae22e1) /* 0.417513734 */, 15 },
1374 /* 1266 */ { MAD_F(0x06aff062) /* 0.417953859 */, 15 },
1375 /* 1267 */ { MAD_F(0x06b1be03) /* 0.418394100 */, 15 },
1376 /* 1268 */ { MAD_F(0x06b38bc2) /* 0.418834457 */, 15 },
1377 /* 1269 */ { MAD_F(0x06b559a1) /* 0.419274929 */, 15 },
1378 /* 1270 */ { MAD_F(0x06b7279e) /* 0.419715518 */, 15 },
1379 /* 1271 */ { MAD_F(0x06b8f5bb) /* 0.420156222 */, 15 },
1380 /* 1272 */ { MAD_F(0x06bac3f6) /* 0.420597041 */, 15 },
1381 /* 1273 */ { MAD_F(0x06bc9251) /* 0.421037977 */, 15 },
1382 /* 1274 */ { MAD_F(0x06be60cb) /* 0.421479027 */, 15 },
1383 /* 1275 */ { MAD_F(0x06c02f63) /* 0.421920193 */, 15 },
1384 /* 1276 */ { MAD_F(0x06c1fe1b) /* 0.422361475 */, 15 },
1385 /* 1277 */ { MAD_F(0x06c3ccf1) /* 0.422802871 */, 15 },
1386 /* 1278 */ { MAD_F(0x06c59be7) /* 0.423244383 */, 15 },
1387 /* 1279 */ { MAD_F(0x06c76afb) /* 0.423686010 */, 15 },
1388
1389 /* 1280 */ { MAD_F(0x06c93a2e) /* 0.424127753 */, 15 },
1390 /* 1281 */ { MAD_F(0x06cb0981) /* 0.424569610 */, 15 },
1391 /* 1282 */ { MAD_F(0x06ccd8f2) /* 0.425011582 */, 15 },
1392 /* 1283 */ { MAD_F(0x06cea881) /* 0.425453669 */, 15 },
1393 /* 1284 */ { MAD_F(0x06d07830) /* 0.425895871 */, 15 },
1394 /* 1285 */ { MAD_F(0x06d247fe) /* 0.426338188 */, 15 },
1395 /* 1286 */ { MAD_F(0x06d417ea) /* 0.426780620 */, 15 },
1396 /* 1287 */ { MAD_F(0x06d5e7f5) /* 0.427223166 */, 15 },
1397 /* 1288 */ { MAD_F(0x06d7b81f) /* 0.427665827 */, 15 },
1398 /* 1289 */ { MAD_F(0x06d98868) /* 0.428108603 */, 15 },
1399 /* 1290 */ { MAD_F(0x06db58cf) /* 0.428551493 */, 15 },
1400 /* 1291 */ { MAD_F(0x06dd2955) /* 0.428994497 */, 15 },
1401 /* 1292 */ { MAD_F(0x06def9fa) /* 0.429437616 */, 15 },
1402 /* 1293 */ { MAD_F(0x06e0cabe) /* 0.429880849 */, 15 },
1403 /* 1294 */ { MAD_F(0x06e29ba0) /* 0.430324197 */, 15 },
1404 /* 1295 */ { MAD_F(0x06e46ca1) /* 0.430767659 */, 15 },
1405
1406 /* 1296 */ { MAD_F(0x06e63dc0) /* 0.431211234 */, 15 },
1407 /* 1297 */ { MAD_F(0x06e80efe) /* 0.431654924 */, 15 },
1408 /* 1298 */ { MAD_F(0x06e9e05b) /* 0.432098728 */, 15 },
1409 /* 1299 */ { MAD_F(0x06ebb1d6) /* 0.432542647 */, 15 },
1410 /* 1300 */ { MAD_F(0x06ed8370) /* 0.432986678 */, 15 },
1411 /* 1301 */ { MAD_F(0x06ef5529) /* 0.433430824 */, 15 },
1412 /* 1302 */ { MAD_F(0x06f12700) /* 0.433875084 */, 15 },
1413 /* 1303 */ { MAD_F(0x06f2f8f5) /* 0.434319457 */, 15 },
1414 /* 1304 */ { MAD_F(0x06f4cb09) /* 0.434763944 */, 15 },
1415 /* 1305 */ { MAD_F(0x06f69d3c) /* 0.435208545 */, 15 },
1416 /* 1306 */ { MAD_F(0x06f86f8d) /* 0.435653259 */, 15 },
1417 /* 1307 */ { MAD_F(0x06fa41fd) /* 0.436098087 */, 15 },
1418 /* 1308 */ { MAD_F(0x06fc148b) /* 0.436543029 */, 15 },
1419 /* 1309 */ { MAD_F(0x06fde737) /* 0.436988083 */, 15 },
1420 /* 1310 */ { MAD_F(0x06ffba02) /* 0.437433251 */, 15 },
1421 /* 1311 */ { MAD_F(0x07018ceb) /* 0.437878533 */, 15 },
1422
1423 /* 1312 */ { MAD_F(0x07035ff3) /* 0.438323927 */, 15 },
1424 /* 1313 */ { MAD_F(0x07053319) /* 0.438769435 */, 15 },
1425 /* 1314 */ { MAD_F(0x0707065d) /* 0.439215056 */, 15 },
1426 /* 1315 */ { MAD_F(0x0708d9c0) /* 0.439660790 */, 15 },
1427 /* 1316 */ { MAD_F(0x070aad41) /* 0.440106636 */, 15 },
1428 /* 1317 */ { MAD_F(0x070c80e1) /* 0.440552596 */, 15 },
1429 /* 1318 */ { MAD_F(0x070e549f) /* 0.440998669 */, 15 },
1430 /* 1319 */ { MAD_F(0x0710287b) /* 0.441444855 */, 15 },
1431 /* 1320 */ { MAD_F(0x0711fc75) /* 0.441891153 */, 15 },
1432 /* 1321 */ { MAD_F(0x0713d08d) /* 0.442337564 */, 15 },
1433 /* 1322 */ { MAD_F(0x0715a4c4) /* 0.442784088 */, 15 },
1434 /* 1323 */ { MAD_F(0x07177919) /* 0.443230724 */, 15 },
1435 /* 1324 */ { MAD_F(0x07194d8c) /* 0.443677473 */, 15 },
1436 /* 1325 */ { MAD_F(0x071b221e) /* 0.444124334 */, 15 },
1437 /* 1326 */ { MAD_F(0x071cf6ce) /* 0.444571308 */, 15 },
1438 /* 1327 */ { MAD_F(0x071ecb9b) /* 0.445018394 */, 15 },
1439
1440 /* 1328 */ { MAD_F(0x0720a087) /* 0.445465593 */, 15 },
1441 /* 1329 */ { MAD_F(0x07227591) /* 0.445912903 */, 15 },
1442 /* 1330 */ { MAD_F(0x07244ab9) /* 0.446360326 */, 15 },
1443 /* 1331 */ { MAD_F(0x07262000) /* 0.446807861 */, 15 },
1444 /* 1332 */ { MAD_F(0x0727f564) /* 0.447255509 */, 15 },
1445 /* 1333 */ { MAD_F(0x0729cae7) /* 0.447703268 */, 15 },
1446 /* 1334 */ { MAD_F(0x072ba087) /* 0.448151139 */, 15 },
1447 /* 1335 */ { MAD_F(0x072d7646) /* 0.448599122 */, 15 },
1448 /* 1336 */ { MAD_F(0x072f4c22) /* 0.449047217 */, 15 },
1449 /* 1337 */ { MAD_F(0x0731221d) /* 0.449495424 */, 15 },
1450 /* 1338 */ { MAD_F(0x0732f835) /* 0.449943742 */, 15 },
1451 /* 1339 */ { MAD_F(0x0734ce6c) /* 0.450392173 */, 15 },
1452 /* 1340 */ { MAD_F(0x0736a4c1) /* 0.450840715 */, 15 },
1453 /* 1341 */ { MAD_F(0x07387b33) /* 0.451289368 */, 15 },
1454 /* 1342 */ { MAD_F(0x073a51c4) /* 0.451738133 */, 15 },
1455 /* 1343 */ { MAD_F(0x073c2872) /* 0.452187010 */, 15 },
1456
1457 /* 1344 */ { MAD_F(0x073dff3e) /* 0.452635998 */, 15 },
1458 /* 1345 */ { MAD_F(0x073fd628) /* 0.453085097 */, 15 },
1459 /* 1346 */ { MAD_F(0x0741ad30) /* 0.453534308 */, 15 },
1460 /* 1347 */ { MAD_F(0x07438456) /* 0.453983630 */, 15 },
1461 /* 1348 */ { MAD_F(0x07455b9a) /* 0.454433063 */, 15 },
1462 /* 1349 */ { MAD_F(0x074732fc) /* 0.454882607 */, 15 },
1463 /* 1350 */ { MAD_F(0x07490a7b) /* 0.455332262 */, 15 },
1464 /* 1351 */ { MAD_F(0x074ae218) /* 0.455782029 */, 15 },
1465 /* 1352 */ { MAD_F(0x074cb9d3) /* 0.456231906 */, 15 },
1466 /* 1353 */ { MAD_F(0x074e91ac) /* 0.456681894 */, 15 },
1467 /* 1354 */ { MAD_F(0x075069a3) /* 0.457131993 */, 15 },
1468 /* 1355 */ { MAD_F(0x075241b7) /* 0.457582203 */, 15 },
1469 /* 1356 */ { MAD_F(0x075419e9) /* 0.458032524 */, 15 },
1470 /* 1357 */ { MAD_F(0x0755f239) /* 0.458482956 */, 15 },
1471 /* 1358 */ { MAD_F(0x0757caa7) /* 0.458933498 */, 15 },
1472 /* 1359 */ { MAD_F(0x0759a332) /* 0.459384151 */, 15 },
1473
1474 /* 1360 */ { MAD_F(0x075b7bdb) /* 0.459834914 */, 15 },
1475 /* 1361 */ { MAD_F(0x075d54a1) /* 0.460285788 */, 15 },
1476 /* 1362 */ { MAD_F(0x075f2d85) /* 0.460736772 */, 15 },
1477 /* 1363 */ { MAD_F(0x07610687) /* 0.461187867 */, 15 },
1478 /* 1364 */ { MAD_F(0x0762dfa6) /* 0.461639071 */, 15 },
1479 /* 1365 */ { MAD_F(0x0764b8e3) /* 0.462090387 */, 15 },
1480 /* 1366 */ { MAD_F(0x0766923e) /* 0.462541812 */, 15 },
1481 /* 1367 */ { MAD_F(0x07686bb6) /* 0.462993348 */, 15 },
1482 /* 1368 */ { MAD_F(0x076a454c) /* 0.463444993 */, 15 },
1483 /* 1369 */ { MAD_F(0x076c1eff) /* 0.463896749 */, 15 },
1484 /* 1370 */ { MAD_F(0x076df8d0) /* 0.464348615 */, 15 },
1485 /* 1371 */ { MAD_F(0x076fd2be) /* 0.464800591 */, 15 },
1486 /* 1372 */ { MAD_F(0x0771acca) /* 0.465252676 */, 15 },
1487 /* 1373 */ { MAD_F(0x077386f3) /* 0.465704872 */, 15 },
1488 /* 1374 */ { MAD_F(0x0775613a) /* 0.466157177 */, 15 },
1489 /* 1375 */ { MAD_F(0x07773b9e) /* 0.466609592 */, 15 },
1490
1491 /* 1376 */ { MAD_F(0x07791620) /* 0.467062117 */, 15 },
1492 /* 1377 */ { MAD_F(0x077af0bf) /* 0.467514751 */, 15 },
1493 /* 1378 */ { MAD_F(0x077ccb7c) /* 0.467967495 */, 15 },
1494 /* 1379 */ { MAD_F(0x077ea656) /* 0.468420349 */, 15 },
1495 /* 1380 */ { MAD_F(0x0780814d) /* 0.468873312 */, 15 },
1496 /* 1381 */ { MAD_F(0x07825c62) /* 0.469326384 */, 15 },
1497 /* 1382 */ { MAD_F(0x07843794) /* 0.469779566 */, 15 },
1498 /* 1383 */ { MAD_F(0x078612e3) /* 0.470232857 */, 15 },
1499 /* 1384 */ { MAD_F(0x0787ee50) /* 0.470686258 */, 15 },
1500 /* 1385 */ { MAD_F(0x0789c9da) /* 0.471139767 */, 15 },
1501 /* 1386 */ { MAD_F(0x078ba581) /* 0.471593386 */, 15 },
1502 /* 1387 */ { MAD_F(0x078d8146) /* 0.472047114 */, 15 },
1503 /* 1388 */ { MAD_F(0x078f5d28) /* 0.472500951 */, 15 },
1504 /* 1389 */ { MAD_F(0x07913927) /* 0.472954896 */, 15 },
1505 /* 1390 */ { MAD_F(0x07931543) /* 0.473408951 */, 15 },
1506 /* 1391 */ { MAD_F(0x0794f17d) /* 0.473863115 */, 15 },
1507
1508 /* 1392 */ { MAD_F(0x0796cdd4) /* 0.474317388 */, 15 },
1509 /* 1393 */ { MAD_F(0x0798aa48) /* 0.474771769 */, 15 },
1510 /* 1394 */ { MAD_F(0x079a86d9) /* 0.475226259 */, 15 },
1511 /* 1395 */ { MAD_F(0x079c6388) /* 0.475680858 */, 15 },
1512 /* 1396 */ { MAD_F(0x079e4053) /* 0.476135565 */, 15 },
1513 /* 1397 */ { MAD_F(0x07a01d3c) /* 0.476590381 */, 15 },
1514 /* 1398 */ { MAD_F(0x07a1fa42) /* 0.477045306 */, 15 },
1515 /* 1399 */ { MAD_F(0x07a3d765) /* 0.477500339 */, 15 },
1516 /* 1400 */ { MAD_F(0x07a5b4a5) /* 0.477955481 */, 15 },
1517 /* 1401 */ { MAD_F(0x07a79202) /* 0.478410731 */, 15 },
1518 /* 1402 */ { MAD_F(0x07a96f7d) /* 0.478866089 */, 15 },
1519 /* 1403 */ { MAD_F(0x07ab4d14) /* 0.479321555 */, 15 },
1520 /* 1404 */ { MAD_F(0x07ad2ac8) /* 0.479777130 */, 15 },
1521 /* 1405 */ { MAD_F(0x07af089a) /* 0.480232813 */, 15 },
1522 /* 1406 */ { MAD_F(0x07b0e688) /* 0.480688604 */, 15 },
1523 /* 1407 */ { MAD_F(0x07b2c494) /* 0.481144503 */, 15 },
1524
1525 /* 1408 */ { MAD_F(0x07b4a2bc) /* 0.481600510 */, 15 },
1526 /* 1409 */ { MAD_F(0x07b68102) /* 0.482056625 */, 15 },
1527 /* 1410 */ { MAD_F(0x07b85f64) /* 0.482512848 */, 15 },
1528 /* 1411 */ { MAD_F(0x07ba3de4) /* 0.482969179 */, 15 },
1529 /* 1412 */ { MAD_F(0x07bc1c80) /* 0.483425618 */, 15 },
1530 /* 1413 */ { MAD_F(0x07bdfb39) /* 0.483882164 */, 15 },
1531 /* 1414 */ { MAD_F(0x07bfda0f) /* 0.484338818 */, 15 },
1532 /* 1415 */ { MAD_F(0x07c1b902) /* 0.484795580 */, 15 },
1533 /* 1416 */ { MAD_F(0x07c39812) /* 0.485252449 */, 15 },
1534 /* 1417 */ { MAD_F(0x07c5773f) /* 0.485709426 */, 15 },
1535 /* 1418 */ { MAD_F(0x07c75689) /* 0.486166511 */, 15 },
1536 /* 1419 */ { MAD_F(0x07c935ef) /* 0.486623703 */, 15 },
1537 /* 1420 */ { MAD_F(0x07cb1573) /* 0.487081002 */, 15 },
1538 /* 1421 */ { MAD_F(0x07ccf513) /* 0.487538409 */, 15 },
1539 /* 1422 */ { MAD_F(0x07ced4d0) /* 0.487995923 */, 15 },
1540 /* 1423 */ { MAD_F(0x07d0b4aa) /* 0.488453544 */, 15 },
1541
1542 /* 1424 */ { MAD_F(0x07d294a0) /* 0.488911273 */, 15 },
1543 /* 1425 */ { MAD_F(0x07d474b3) /* 0.489369108 */, 15 },
1544 /* 1426 */ { MAD_F(0x07d654e4) /* 0.489827051 */, 15 },
1545 /* 1427 */ { MAD_F(0x07d83530) /* 0.490285101 */, 15 },
1546 /* 1428 */ { MAD_F(0x07da159a) /* 0.490743258 */, 15 },
1547 /* 1429 */ { MAD_F(0x07dbf620) /* 0.491201522 */, 15 },
1548 /* 1430 */ { MAD_F(0x07ddd6c3) /* 0.491659892 */, 15 },
1549 /* 1431 */ { MAD_F(0x07dfb783) /* 0.492118370 */, 15 },
1550 /* 1432 */ { MAD_F(0x07e1985f) /* 0.492576954 */, 15 },
1551 /* 1433 */ { MAD_F(0x07e37958) /* 0.493035645 */, 15 },
1552 /* 1434 */ { MAD_F(0x07e55a6e) /* 0.493494443 */, 15 },
1553 /* 1435 */ { MAD_F(0x07e73ba0) /* 0.493953348 */, 15 },
1554 /* 1436 */ { MAD_F(0x07e91cef) /* 0.494412359 */, 15 },
1555 /* 1437 */ { MAD_F(0x07eafe5a) /* 0.494871476 */, 15 },
1556 /* 1438 */ { MAD_F(0x07ecdfe2) /* 0.495330701 */, 15 },
1557 /* 1439 */ { MAD_F(0x07eec187) /* 0.495790031 */, 15 },
1558
1559 /* 1440 */ { MAD_F(0x07f0a348) /* 0.496249468 */, 15 },
1560 /* 1441 */ { MAD_F(0x07f28526) /* 0.496709012 */, 15 },
1561 /* 1442 */ { MAD_F(0x07f46720) /* 0.497168662 */, 15 },
1562 /* 1443 */ { MAD_F(0x07f64937) /* 0.497628418 */, 15 },
1563 /* 1444 */ { MAD_F(0x07f82b6a) /* 0.498088280 */, 15 },
1564 /* 1445 */ { MAD_F(0x07fa0dba) /* 0.498548248 */, 15 },
1565 /* 1446 */ { MAD_F(0x07fbf026) /* 0.499008323 */, 15 },
1566 /* 1447 */ { MAD_F(0x07fdd2af) /* 0.499468503 */, 15 },
1567 /* 1448 */ { MAD_F(0x07ffb554) /* 0.499928790 */, 15 },
1568 /* 1449 */ { MAD_F(0x0400cc0b) /* 0.250194591 */, 16 },
1569 /* 1450 */ { MAD_F(0x0401bd7a) /* 0.250424840 */, 16 },
1570 /* 1451 */ { MAD_F(0x0402aef7) /* 0.250655143 */, 16 },
1571 /* 1452 */ { MAD_F(0x0403a083) /* 0.250885498 */, 16 },
1572 /* 1453 */ { MAD_F(0x0404921c) /* 0.251115906 */, 16 },
1573 /* 1454 */ { MAD_F(0x040583c4) /* 0.251346367 */, 16 },
1574 /* 1455 */ { MAD_F(0x0406757a) /* 0.251576880 */, 16 },
1575
1576 /* 1456 */ { MAD_F(0x0407673f) /* 0.251807447 */, 16 },
1577 /* 1457 */ { MAD_F(0x04085911) /* 0.252038066 */, 16 },
1578 /* 1458 */ { MAD_F(0x04094af1) /* 0.252268738 */, 16 },
1579 /* 1459 */ { MAD_F(0x040a3ce0) /* 0.252499463 */, 16 },
1580 /* 1460 */ { MAD_F(0x040b2edd) /* 0.252730240 */, 16 },
1581 /* 1461 */ { MAD_F(0x040c20e8) /* 0.252961071 */, 16 },
1582 /* 1462 */ { MAD_F(0x040d1301) /* 0.253191953 */, 16 },
1583 /* 1463 */ { MAD_F(0x040e0529) /* 0.253422889 */, 16 },
1584 /* 1464 */ { MAD_F(0x040ef75e) /* 0.253653877 */, 16 },
1585 /* 1465 */ { MAD_F(0x040fe9a1) /* 0.253884918 */, 16 },
1586 /* 1466 */ { MAD_F(0x0410dbf3) /* 0.254116011 */, 16 },
1587 /* 1467 */ { MAD_F(0x0411ce53) /* 0.254347157 */, 16 },
1588 /* 1468 */ { MAD_F(0x0412c0c1) /* 0.254578356 */, 16 },
1589 /* 1469 */ { MAD_F(0x0413b33d) /* 0.254809606 */, 16 },
1590 /* 1470 */ { MAD_F(0x0414a5c7) /* 0.255040910 */, 16 },
1591 /* 1471 */ { MAD_F(0x0415985f) /* 0.255272266 */, 16 },
1592
1593 /* 1472 */ { MAD_F(0x04168b05) /* 0.255503674 */, 16 },
1594 /* 1473 */ { MAD_F(0x04177db9) /* 0.255735135 */, 16 },
1595 /* 1474 */ { MAD_F(0x0418707c) /* 0.255966648 */, 16 },
1596 /* 1475 */ { MAD_F(0x0419634c) /* 0.256198213 */, 16 },
1597 /* 1476 */ { MAD_F(0x041a562a) /* 0.256429831 */, 16 },
1598 /* 1477 */ { MAD_F(0x041b4917) /* 0.256661501 */, 16 },
1599 /* 1478 */ { MAD_F(0x041c3c11) /* 0.256893223 */, 16 },
1600 /* 1479 */ { MAD_F(0x041d2f1a) /* 0.257124998 */, 16 },
1601 /* 1480 */ { MAD_F(0x041e2230) /* 0.257356825 */, 16 },
1602 /* 1481 */ { MAD_F(0x041f1555) /* 0.257588704 */, 16 },
1603 /* 1482 */ { MAD_F(0x04200888) /* 0.257820635 */, 16 },
1604 /* 1483 */ { MAD_F(0x0420fbc8) /* 0.258052619 */, 16 },
1605 /* 1484 */ { MAD_F(0x0421ef17) /* 0.258284654 */, 16 },
1606 /* 1485 */ { MAD_F(0x0422e273) /* 0.258516742 */, 16 },
1607 /* 1486 */ { MAD_F(0x0423d5de) /* 0.258748882 */, 16 },
1608 /* 1487 */ { MAD_F(0x0424c956) /* 0.258981074 */, 16 },
1609
1610 /* 1488 */ { MAD_F(0x0425bcdd) /* 0.259213318 */, 16 },
1611 /* 1489 */ { MAD_F(0x0426b071) /* 0.259445614 */, 16 },
1612 /* 1490 */ { MAD_F(0x0427a414) /* 0.259677962 */, 16 },
1613 /* 1491 */ { MAD_F(0x042897c4) /* 0.259910362 */, 16 },
1614 /* 1492 */ { MAD_F(0x04298b83) /* 0.260142814 */, 16 },
1615 /* 1493 */ { MAD_F(0x042a7f4f) /* 0.260375318 */, 16 },
1616 /* 1494 */ { MAD_F(0x042b7329) /* 0.260607874 */, 16 },
1617 /* 1495 */ { MAD_F(0x042c6711) /* 0.260840481 */, 16 },
1618 /* 1496 */ { MAD_F(0x042d5b07) /* 0.261073141 */, 16 },
1619 /* 1497 */ { MAD_F(0x042e4f0b) /* 0.261305852 */, 16 },
1620 /* 1498 */ { MAD_F(0x042f431d) /* 0.261538616 */, 16 },
1621 /* 1499 */ { MAD_F(0x0430373d) /* 0.261771431 */, 16 },
1622 /* 1500 */ { MAD_F(0x04312b6b) /* 0.262004297 */, 16 },
1623 /* 1501 */ { MAD_F(0x04321fa6) /* 0.262237216 */, 16 },
1624 /* 1502 */ { MAD_F(0x043313f0) /* 0.262470186 */, 16 },
1625 /* 1503 */ { MAD_F(0x04340847) /* 0.262703208 */, 16 },
1626
1627 /* 1504 */ { MAD_F(0x0434fcad) /* 0.262936282 */, 16 },
1628 /* 1505 */ { MAD_F(0x0435f120) /* 0.263169407 */, 16 },
1629 /* 1506 */ { MAD_F(0x0436e5a1) /* 0.263402584 */, 16 },
1630 /* 1507 */ { MAD_F(0x0437da2f) /* 0.263635813 */, 16 },
1631 /* 1508 */ { MAD_F(0x0438cecc) /* 0.263869093 */, 16 },
1632 /* 1509 */ { MAD_F(0x0439c377) /* 0.264102425 */, 16 },
1633 /* 1510 */ { MAD_F(0x043ab82f) /* 0.264335808 */, 16 },
1634 /* 1511 */ { MAD_F(0x043bacf5) /* 0.264569243 */, 16 },
1635 /* 1512 */ { MAD_F(0x043ca1c9) /* 0.264802730 */, 16 },
1636 /* 1513 */ { MAD_F(0x043d96ab) /* 0.265036267 */, 16 },
1637 /* 1514 */ { MAD_F(0x043e8b9b) /* 0.265269857 */, 16 },
1638 /* 1515 */ { MAD_F(0x043f8098) /* 0.265503498 */, 16 },
1639 /* 1516 */ { MAD_F(0x044075a3) /* 0.265737190 */, 16 },
1640 /* 1517 */ { MAD_F(0x04416abc) /* 0.265970933 */, 16 },
1641 /* 1518 */ { MAD_F(0x04425fe3) /* 0.266204728 */, 16 },
1642 /* 1519 */ { MAD_F(0x04435518) /* 0.266438574 */, 16 },
1643
1644 /* 1520 */ { MAD_F(0x04444a5a) /* 0.266672472 */, 16 },
1645 /* 1521 */ { MAD_F(0x04453fab) /* 0.266906421 */, 16 },
1646 /* 1522 */ { MAD_F(0x04463508) /* 0.267140421 */, 16 },
1647 /* 1523 */ { MAD_F(0x04472a74) /* 0.267374472 */, 16 },
1648 /* 1524 */ { MAD_F(0x04481fee) /* 0.267608575 */, 16 },
1649 /* 1525 */ { MAD_F(0x04491575) /* 0.267842729 */, 16 },
1650 /* 1526 */ { MAD_F(0x044a0b0a) /* 0.268076934 */, 16 },
1651 /* 1527 */ { MAD_F(0x044b00ac) /* 0.268311190 */, 16 },
1652 /* 1528 */ { MAD_F(0x044bf65d) /* 0.268545497 */, 16 },
1653 /* 1529 */ { MAD_F(0x044cec1b) /* 0.268779856 */, 16 },
1654 /* 1530 */ { MAD_F(0x044de1e7) /* 0.269014265 */, 16 },
1655 /* 1531 */ { MAD_F(0x044ed7c0) /* 0.269248726 */, 16 },
1656 /* 1532 */ { MAD_F(0x044fcda8) /* 0.269483238 */, 16 },
1657 /* 1533 */ { MAD_F(0x0450c39c) /* 0.269717800 */, 16 },
1658 /* 1534 */ { MAD_F(0x0451b99f) /* 0.269952414 */, 16 },
1659 /* 1535 */ { MAD_F(0x0452afaf) /* 0.270187079 */, 16 },
1660
1661 /* 1536 */ { MAD_F(0x0453a5cd) /* 0.270421794 */, 16 },
1662 /* 1537 */ { MAD_F(0x04549bf9) /* 0.270656561 */, 16 },
1663 /* 1538 */ { MAD_F(0x04559232) /* 0.270891379 */, 16 },
1664 /* 1539 */ { MAD_F(0x04568879) /* 0.271126247 */, 16 },
1665 /* 1540 */ { MAD_F(0x04577ece) /* 0.271361166 */, 16 },
1666 /* 1541 */ { MAD_F(0x04587530) /* 0.271596136 */, 16 },
1667 /* 1542 */ { MAD_F(0x04596ba0) /* 0.271831157 */, 16 },
1668 /* 1543 */ { MAD_F(0x045a621e) /* 0.272066229 */, 16 },
1669 /* 1544 */ { MAD_F(0x045b58a9) /* 0.272301352 */, 16 },
1670 /* 1545 */ { MAD_F(0x045c4f42) /* 0.272536525 */, 16 },
1671 /* 1546 */ { MAD_F(0x045d45e9) /* 0.272771749 */, 16 },
1672 /* 1547 */ { MAD_F(0x045e3c9d) /* 0.273007024 */, 16 },
1673 /* 1548 */ { MAD_F(0x045f335e) /* 0.273242350 */, 16 },
1674 /* 1549 */ { MAD_F(0x04602a2e) /* 0.273477726 */, 16 },
1675 /* 1550 */ { MAD_F(0x0461210b) /* 0.273713153 */, 16 },
1676 /* 1551 */ { MAD_F(0x046217f5) /* 0.273948630 */, 16 },
1677
1678 /* 1552 */ { MAD_F(0x04630eed) /* 0.274184158 */, 16 },
1679 /* 1553 */ { MAD_F(0x046405f3) /* 0.274419737 */, 16 },
1680 /* 1554 */ { MAD_F(0x0464fd06) /* 0.274655366 */, 16 },
1681 /* 1555 */ { MAD_F(0x0465f427) /* 0.274891046 */, 16 },
1682 /* 1556 */ { MAD_F(0x0466eb55) /* 0.275126776 */, 16 },
1683 /* 1557 */ { MAD_F(0x0467e291) /* 0.275362557 */, 16 },
1684 /* 1558 */ { MAD_F(0x0468d9db) /* 0.275598389 */, 16 },
1685 /* 1559 */ { MAD_F(0x0469d132) /* 0.275834270 */, 16 },
1686 /* 1560 */ { MAD_F(0x046ac896) /* 0.276070203 */, 16 },
1687 /* 1561 */ { MAD_F(0x046bc009) /* 0.276306185 */, 16 },
1688 /* 1562 */ { MAD_F(0x046cb788) /* 0.276542218 */, 16 },
1689 /* 1563 */ { MAD_F(0x046daf15) /* 0.276778302 */, 16 },
1690 /* 1564 */ { MAD_F(0x046ea6b0) /* 0.277014435 */, 16 },
1691 /* 1565 */ { MAD_F(0x046f9e58) /* 0.277250619 */, 16 },
1692 /* 1566 */ { MAD_F(0x0470960e) /* 0.277486854 */, 16 },
1693 /* 1567 */ { MAD_F(0x04718dd1) /* 0.277723139 */, 16 },
1694
1695 /* 1568 */ { MAD_F(0x047285a2) /* 0.277959474 */, 16 },
1696 /* 1569 */ { MAD_F(0x04737d80) /* 0.278195859 */, 16 },
1697 /* 1570 */ { MAD_F(0x0474756c) /* 0.278432294 */, 16 },
1698 /* 1571 */ { MAD_F(0x04756d65) /* 0.278668780 */, 16 },
1699 /* 1572 */ { MAD_F(0x0476656b) /* 0.278905316 */, 16 },
1700 /* 1573 */ { MAD_F(0x04775d7f) /* 0.279141902 */, 16 },
1701 /* 1574 */ { MAD_F(0x047855a1) /* 0.279378538 */, 16 },
1702 /* 1575 */ { MAD_F(0x04794dd0) /* 0.279615224 */, 16 },
1703 /* 1576 */ { MAD_F(0x047a460c) /* 0.279851960 */, 16 },
1704 /* 1577 */ { MAD_F(0x047b3e56) /* 0.280088747 */, 16 },
1705 /* 1578 */ { MAD_F(0x047c36ae) /* 0.280325583 */, 16 },
1706 /* 1579 */ { MAD_F(0x047d2f12) /* 0.280562470 */, 16 },
1707 /* 1580 */ { MAD_F(0x047e2784) /* 0.280799406 */, 16 },
1708 /* 1581 */ { MAD_F(0x047f2004) /* 0.281036393 */, 16 },
1709 /* 1582 */ { MAD_F(0x04801891) /* 0.281273429 */, 16 },
1710 /* 1583 */ { MAD_F(0x0481112b) /* 0.281510516 */, 16 },
1711
1712 /* 1584 */ { MAD_F(0x048209d3) /* 0.281747652 */, 16 },
1713 /* 1585 */ { MAD_F(0x04830288) /* 0.281984838 */, 16 },
1714 /* 1586 */ { MAD_F(0x0483fb4b) /* 0.282222075 */, 16 },
1715 /* 1587 */ { MAD_F(0x0484f41b) /* 0.282459361 */, 16 },
1716 /* 1588 */ { MAD_F(0x0485ecf8) /* 0.282696697 */, 16 },
1717 /* 1589 */ { MAD_F(0x0486e5e3) /* 0.282934082 */, 16 },
1718 /* 1590 */ { MAD_F(0x0487dedb) /* 0.283171518 */, 16 },
1719 /* 1591 */ { MAD_F(0x0488d7e1) /* 0.283409003 */, 16 },
1720 /* 1592 */ { MAD_F(0x0489d0f4) /* 0.283646538 */, 16 },
1721 /* 1593 */ { MAD_F(0x048aca14) /* 0.283884123 */, 16 },
1722 /* 1594 */ { MAD_F(0x048bc341) /* 0.284121757 */, 16 },
1723 /* 1595 */ { MAD_F(0x048cbc7c) /* 0.284359441 */, 16 },
1724 /* 1596 */ { MAD_F(0x048db5c4) /* 0.284597175 */, 16 },
1725 /* 1597 */ { MAD_F(0x048eaf1a) /* 0.284834959 */, 16 },
1726 /* 1598 */ { MAD_F(0x048fa87d) /* 0.285072792 */, 16 },
1727 /* 1599 */ { MAD_F(0x0490a1ed) /* 0.285310675 */, 16 },
1728
1729 /* 1600 */ { MAD_F(0x04919b6a) /* 0.285548607 */, 16 },
1730 /* 1601 */ { MAD_F(0x049294f5) /* 0.285786589 */, 16 },
1731 /* 1602 */ { MAD_F(0x04938e8d) /* 0.286024621 */, 16 },
1732 /* 1603 */ { MAD_F(0x04948833) /* 0.286262702 */, 16 },
1733 /* 1604 */ { MAD_F(0x049581e5) /* 0.286500832 */, 16 },
1734 /* 1605 */ { MAD_F(0x04967ba5) /* 0.286739012 */, 16 },
1735 /* 1606 */ { MAD_F(0x04977573) /* 0.286977242 */, 16 },
1736 /* 1607 */ { MAD_F(0x04986f4d) /* 0.287215521 */, 16 },
1737 /* 1608 */ { MAD_F(0x04996935) /* 0.287453849 */, 16 },
1738 /* 1609 */ { MAD_F(0x049a632a) /* 0.287692227 */, 16 },
1739 /* 1610 */ { MAD_F(0x049b5d2c) /* 0.287930654 */, 16 },
1740 /* 1611 */ { MAD_F(0x049c573c) /* 0.288169131 */, 16 },
1741 /* 1612 */ { MAD_F(0x049d5159) /* 0.288407657 */, 16 },
1742 /* 1613 */ { MAD_F(0x049e4b83) /* 0.288646232 */, 16 },
1743 /* 1614 */ { MAD_F(0x049f45ba) /* 0.288884857 */, 16 },
1744 /* 1615 */ { MAD_F(0x04a03ffe) /* 0.289123530 */, 16 },
1745
1746 /* 1616 */ { MAD_F(0x04a13a50) /* 0.289362253 */, 16 },
1747 /* 1617 */ { MAD_F(0x04a234af) /* 0.289601026 */, 16 },
1748 /* 1618 */ { MAD_F(0x04a32f1b) /* 0.289839847 */, 16 },
1749 /* 1619 */ { MAD_F(0x04a42995) /* 0.290078718 */, 16 },
1750 /* 1620 */ { MAD_F(0x04a5241b) /* 0.290317638 */, 16 },
1751 /* 1621 */ { MAD_F(0x04a61eaf) /* 0.290556607 */, 16 },
1752 /* 1622 */ { MAD_F(0x04a71950) /* 0.290795626 */, 16 },
1753 /* 1623 */ { MAD_F(0x04a813fe) /* 0.291034693 */, 16 },
1754 /* 1624 */ { MAD_F(0x04a90eba) /* 0.291273810 */, 16 },
1755 /* 1625 */ { MAD_F(0x04aa0982) /* 0.291512975 */, 16 },
1756 /* 1626 */ { MAD_F(0x04ab0458) /* 0.291752190 */, 16 },
1757 /* 1627 */ { MAD_F(0x04abff3b) /* 0.291991453 */, 16 },
1758 /* 1628 */ { MAD_F(0x04acfa2b) /* 0.292230766 */, 16 },
1759 /* 1629 */ { MAD_F(0x04adf528) /* 0.292470128 */, 16 },
1760 /* 1630 */ { MAD_F(0x04aef032) /* 0.292709539 */, 16 },
1761 /* 1631 */ { MAD_F(0x04afeb4a) /* 0.292948998 */, 16 },
1762
1763 /* 1632 */ { MAD_F(0x04b0e66e) /* 0.293188507 */, 16 },
1764 /* 1633 */ { MAD_F(0x04b1e1a0) /* 0.293428065 */, 16 },
1765 /* 1634 */ { MAD_F(0x04b2dcdf) /* 0.293667671 */, 16 },
1766 /* 1635 */ { MAD_F(0x04b3d82b) /* 0.293907326 */, 16 },
1767 /* 1636 */ { MAD_F(0x04b4d384) /* 0.294147031 */, 16 },
1768 /* 1637 */ { MAD_F(0x04b5ceea) /* 0.294386784 */, 16 },
1769 /* 1638 */ { MAD_F(0x04b6ca5e) /* 0.294626585 */, 16 },
1770 /* 1639 */ { MAD_F(0x04b7c5de) /* 0.294866436 */, 16 },
1771 /* 1640 */ { MAD_F(0x04b8c16c) /* 0.295106336 */, 16 },
1772 /* 1641 */ { MAD_F(0x04b9bd06) /* 0.295346284 */, 16 },
1773 /* 1642 */ { MAD_F(0x04bab8ae) /* 0.295586281 */, 16 },
1774 /* 1643 */ { MAD_F(0x04bbb463) /* 0.295826327 */, 16 },
1775 /* 1644 */ { MAD_F(0x04bcb024) /* 0.296066421 */, 16 },
1776 /* 1645 */ { MAD_F(0x04bdabf3) /* 0.296306564 */, 16 },
1777 /* 1646 */ { MAD_F(0x04bea7cf) /* 0.296546756 */, 16 },
1778 /* 1647 */ { MAD_F(0x04bfa3b8) /* 0.296786996 */, 16 },
1779
1780 /* 1648 */ { MAD_F(0x04c09faf) /* 0.297027285 */, 16 },
1781 /* 1649 */ { MAD_F(0x04c19bb2) /* 0.297267623 */, 16 },
1782 /* 1650 */ { MAD_F(0x04c297c2) /* 0.297508009 */, 16 },
1783 /* 1651 */ { MAD_F(0x04c393df) /* 0.297748444 */, 16 },
1784 /* 1652 */ { MAD_F(0x04c49009) /* 0.297988927 */, 16 },
1785 /* 1653 */ { MAD_F(0x04c58c41) /* 0.298229459 */, 16 },
1786 /* 1654 */ { MAD_F(0x04c68885) /* 0.298470039 */, 16 },
1787 /* 1655 */ { MAD_F(0x04c784d6) /* 0.298710668 */, 16 },
1788 /* 1656 */ { MAD_F(0x04c88135) /* 0.298951346 */, 16 },
1789 /* 1657 */ { MAD_F(0x04c97da0) /* 0.299192071 */, 16 },
1790 /* 1658 */ { MAD_F(0x04ca7a18) /* 0.299432846 */, 16 },
1791 /* 1659 */ { MAD_F(0x04cb769e) /* 0.299673668 */, 16 },
1792 /* 1660 */ { MAD_F(0x04cc7330) /* 0.299914539 */, 16 },
1793 /* 1661 */ { MAD_F(0x04cd6fcf) /* 0.300155459 */, 16 },
1794 /* 1662 */ { MAD_F(0x04ce6c7b) /* 0.300396426 */, 16 },
1795 /* 1663 */ { MAD_F(0x04cf6935) /* 0.300637443 */, 16 },
1796
1797 /* 1664 */ { MAD_F(0x04d065fb) /* 0.300878507 */, 16 },
1798 /* 1665 */ { MAD_F(0x04d162ce) /* 0.301119620 */, 16 },
1799 /* 1666 */ { MAD_F(0x04d25fae) /* 0.301360781 */, 16 },
1800 /* 1667 */ { MAD_F(0x04d35c9b) /* 0.301601990 */, 16 },
1801 /* 1668 */ { MAD_F(0x04d45995) /* 0.301843247 */, 16 },
1802 /* 1669 */ { MAD_F(0x04d5569c) /* 0.302084553 */, 16 },
1803 /* 1670 */ { MAD_F(0x04d653b0) /* 0.302325907 */, 16 },
1804 /* 1671 */ { MAD_F(0x04d750d1) /* 0.302567309 */, 16 },
1805 /* 1672 */ { MAD_F(0x04d84dff) /* 0.302808759 */, 16 },
1806 /* 1673 */ { MAD_F(0x04d94b3a) /* 0.303050257 */, 16 },
1807 /* 1674 */ { MAD_F(0x04da4881) /* 0.303291804 */, 16 },
1808 /* 1675 */ { MAD_F(0x04db45d6) /* 0.303533399 */, 16 },
1809 /* 1676 */ { MAD_F(0x04dc4337) /* 0.303775041 */, 16 },
1810 /* 1677 */ { MAD_F(0x04dd40a6) /* 0.304016732 */, 16 },
1811 /* 1678 */ { MAD_F(0x04de3e21) /* 0.304258471 */, 16 },
1812 /* 1679 */ { MAD_F(0x04df3ba9) /* 0.304500257 */, 16 },
1813
1814 /* 1680 */ { MAD_F(0x04e0393e) /* 0.304742092 */, 16 },
1815 /* 1681 */ { MAD_F(0x04e136e0) /* 0.304983975 */, 16 },
1816 /* 1682 */ { MAD_F(0x04e2348f) /* 0.305225906 */, 16 },
1817 /* 1683 */ { MAD_F(0x04e3324b) /* 0.305467885 */, 16 },
1818 /* 1684 */ { MAD_F(0x04e43013) /* 0.305709911 */, 16 },
1819 /* 1685 */ { MAD_F(0x04e52de9) /* 0.305951986 */, 16 },
1820 /* 1686 */ { MAD_F(0x04e62bcb) /* 0.306194108 */, 16 },
1821 /* 1687 */ { MAD_F(0x04e729ba) /* 0.306436279 */, 16 },
1822 /* 1688 */ { MAD_F(0x04e827b6) /* 0.306678497 */, 16 },
1823 /* 1689 */ { MAD_F(0x04e925bf) /* 0.306920763 */, 16 },
1824 /* 1690 */ { MAD_F(0x04ea23d4) /* 0.307163077 */, 16 },
1825 /* 1691 */ { MAD_F(0x04eb21f7) /* 0.307405438 */, 16 },
1826 /* 1692 */ { MAD_F(0x04ec2026) /* 0.307647848 */, 16 },
1827 /* 1693 */ { MAD_F(0x04ed1e62) /* 0.307890305 */, 16 },
1828 /* 1694 */ { MAD_F(0x04ee1cab) /* 0.308132810 */, 16 },
1829 /* 1695 */ { MAD_F(0x04ef1b01) /* 0.308375362 */, 16 },
1830
1831 /* 1696 */ { MAD_F(0x04f01963) /* 0.308617963 */, 16 },
1832 /* 1697 */ { MAD_F(0x04f117d3) /* 0.308860611 */, 16 },
1833 /* 1698 */ { MAD_F(0x04f2164f) /* 0.309103306 */, 16 },
1834 /* 1699 */ { MAD_F(0x04f314d8) /* 0.309346050 */, 16 },
1835 /* 1700 */ { MAD_F(0x04f4136d) /* 0.309588841 */, 16 },
1836 /* 1701 */ { MAD_F(0x04f51210) /* 0.309831679 */, 16 },
1837 /* 1702 */ { MAD_F(0x04f610bf) /* 0.310074565 */, 16 },
1838 /* 1703 */ { MAD_F(0x04f70f7b) /* 0.310317499 */, 16 },
1839 /* 1704 */ { MAD_F(0x04f80e44) /* 0.310560480 */, 16 },
1840 /* 1705 */ { MAD_F(0x04f90d19) /* 0.310803509 */, 16 },
1841 /* 1706 */ { MAD_F(0x04fa0bfc) /* 0.311046586 */, 16 },
1842 /* 1707 */ { MAD_F(0x04fb0aeb) /* 0.311289710 */, 16 },
1843 /* 1708 */ { MAD_F(0x04fc09e7) /* 0.311532881 */, 16 },
1844 /* 1709 */ { MAD_F(0x04fd08ef) /* 0.311776100 */, 16 },
1845 /* 1710 */ { MAD_F(0x04fe0805) /* 0.312019366 */, 16 },
1846 /* 1711 */ { MAD_F(0x04ff0727) /* 0.312262680 */, 16 },
1847
1848 /* 1712 */ { MAD_F(0x05000655) /* 0.312506041 */, 16 },
1849 /* 1713 */ { MAD_F(0x05010591) /* 0.312749449 */, 16 },
1850 /* 1714 */ { MAD_F(0x050204d9) /* 0.312992905 */, 16 },
1851 /* 1715 */ { MAD_F(0x0503042e) /* 0.313236408 */, 16 },
1852 /* 1716 */ { MAD_F(0x0504038f) /* 0.313479959 */, 16 },
1853 /* 1717 */ { MAD_F(0x050502fe) /* 0.313723556 */, 16 },
1854 /* 1718 */ { MAD_F(0x05060279) /* 0.313967202 */, 16 },
1855 /* 1719 */ { MAD_F(0x05070200) /* 0.314210894 */, 16 },
1856 /* 1720 */ { MAD_F(0x05080195) /* 0.314454634 */, 16 },
1857 /* 1721 */ { MAD_F(0x05090136) /* 0.314698420 */, 16 },
1858 /* 1722 */ { MAD_F(0x050a00e3) /* 0.314942255 */, 16 },
1859 /* 1723 */ { MAD_F(0x050b009e) /* 0.315186136 */, 16 },
1860 /* 1724 */ { MAD_F(0x050c0065) /* 0.315430064 */, 16 },
1861 /* 1725 */ { MAD_F(0x050d0039) /* 0.315674040 */, 16 },
1862 /* 1726 */ { MAD_F(0x050e0019) /* 0.315918063 */, 16 },
1863 /* 1727 */ { MAD_F(0x050f0006) /* 0.316162133 */, 16 },
1864
1865 /* 1728 */ { MAD_F(0x05100000) /* 0.316406250 */, 16 },
1866 /* 1729 */ { MAD_F(0x05110006) /* 0.316650414 */, 16 },
1867 /* 1730 */ { MAD_F(0x05120019) /* 0.316894625 */, 16 },
1868 /* 1731 */ { MAD_F(0x05130039) /* 0.317138884 */, 16 },
1869 /* 1732 */ { MAD_F(0x05140065) /* 0.317383189 */, 16 },
1870 /* 1733 */ { MAD_F(0x0515009e) /* 0.317627541 */, 16 },
1871 /* 1734 */ { MAD_F(0x051600e3) /* 0.317871941 */, 16 },
1872 /* 1735 */ { MAD_F(0x05170135) /* 0.318116387 */, 16 },
1873 /* 1736 */ { MAD_F(0x05180194) /* 0.318360880 */, 16 },
1874 /* 1737 */ { MAD_F(0x051901ff) /* 0.318605421 */, 16 },
1875 /* 1738 */ { MAD_F(0x051a0277) /* 0.318850008 */, 16 },
1876 /* 1739 */ { MAD_F(0x051b02fc) /* 0.319094642 */, 16 },
1877 /* 1740 */ { MAD_F(0x051c038d) /* 0.319339323 */, 16 },
1878 /* 1741 */ { MAD_F(0x051d042a) /* 0.319584051 */, 16 },
1879 /* 1742 */ { MAD_F(0x051e04d4) /* 0.319828826 */, 16 },
1880 /* 1743 */ { MAD_F(0x051f058b) /* 0.320073647 */, 16 },
1881
1882 /* 1744 */ { MAD_F(0x0520064f) /* 0.320318516 */, 16 },
1883 /* 1745 */ { MAD_F(0x0521071f) /* 0.320563431 */, 16 },
1884 /* 1746 */ { MAD_F(0x052207fb) /* 0.320808393 */, 16 },
1885 /* 1747 */ { MAD_F(0x052308e4) /* 0.321053402 */, 16 },
1886 /* 1748 */ { MAD_F(0x052409da) /* 0.321298457 */, 16 },
1887 /* 1749 */ { MAD_F(0x05250adc) /* 0.321543560 */, 16 },
1888 /* 1750 */ { MAD_F(0x05260bea) /* 0.321788709 */, 16 },
1889 /* 1751 */ { MAD_F(0x05270d06) /* 0.322033904 */, 16 },
1890 /* 1752 */ { MAD_F(0x05280e2d) /* 0.322279147 */, 16 },
1891 /* 1753 */ { MAD_F(0x05290f62) /* 0.322524436 */, 16 },
1892 /* 1754 */ { MAD_F(0x052a10a3) /* 0.322769771 */, 16 },
1893 /* 1755 */ { MAD_F(0x052b11f0) /* 0.323015154 */, 16 },
1894 /* 1756 */ { MAD_F(0x052c134a) /* 0.323260583 */, 16 },
1895 /* 1757 */ { MAD_F(0x052d14b0) /* 0.323506058 */, 16 },
1896 /* 1758 */ { MAD_F(0x052e1623) /* 0.323751580 */, 16 },
1897 /* 1759 */ { MAD_F(0x052f17a2) /* 0.323997149 */, 16 },
1898
1899 /* 1760 */ { MAD_F(0x0530192e) /* 0.324242764 */, 16 },
1900 /* 1761 */ { MAD_F(0x05311ac6) /* 0.324488426 */, 16 },
1901 /* 1762 */ { MAD_F(0x05321c6b) /* 0.324734134 */, 16 },
1902 /* 1763 */ { MAD_F(0x05331e1c) /* 0.324979889 */, 16 },
1903 /* 1764 */ { MAD_F(0x05341fda) /* 0.325225690 */, 16 },
1904 /* 1765 */ { MAD_F(0x053521a4) /* 0.325471538 */, 16 },
1905 /* 1766 */ { MAD_F(0x0536237b) /* 0.325717432 */, 16 },
1906 /* 1767 */ { MAD_F(0x0537255e) /* 0.325963372 */, 16 },
1907 /* 1768 */ { MAD_F(0x0538274e) /* 0.326209359 */, 16 },
1908 /* 1769 */ { MAD_F(0x0539294a) /* 0.326455392 */, 16 },
1909 /* 1770 */ { MAD_F(0x053a2b52) /* 0.326701472 */, 16 },
1910 /* 1771 */ { MAD_F(0x053b2d67) /* 0.326947598 */, 16 },
1911 /* 1772 */ { MAD_F(0x053c2f89) /* 0.327193770 */, 16 },
1912 /* 1773 */ { MAD_F(0x053d31b6) /* 0.327439989 */, 16 },
1913 /* 1774 */ { MAD_F(0x053e33f1) /* 0.327686254 */, 16 },
1914 /* 1775 */ { MAD_F(0x053f3637) /* 0.327932565 */, 16 },
1915
1916 /* 1776 */ { MAD_F(0x0540388a) /* 0.328178922 */, 16 },
1917 /* 1777 */ { MAD_F(0x05413aea) /* 0.328425326 */, 16 },
1918 /* 1778 */ { MAD_F(0x05423d56) /* 0.328671776 */, 16 },
1919 /* 1779 */ { MAD_F(0x05433fce) /* 0.328918272 */, 16 },
1920 /* 1780 */ { MAD_F(0x05444253) /* 0.329164814 */, 16 },
1921 /* 1781 */ { MAD_F(0x054544e4) /* 0.329411403 */, 16 },
1922 /* 1782 */ { MAD_F(0x05464781) /* 0.329658038 */, 16 },
1923 /* 1783 */ { MAD_F(0x05474a2b) /* 0.329904718 */, 16 },
1924 /* 1784 */ { MAD_F(0x05484ce2) /* 0.330151445 */, 16 },
1925 /* 1785 */ { MAD_F(0x05494fa4) /* 0.330398218 */, 16 },
1926 /* 1786 */ { MAD_F(0x054a5273) /* 0.330645037 */, 16 },
1927 /* 1787 */ { MAD_F(0x054b554e) /* 0.330891903 */, 16 },
1928 /* 1788 */ { MAD_F(0x054c5836) /* 0.331138814 */, 16 },
1929 /* 1789 */ { MAD_F(0x054d5b2a) /* 0.331385771 */, 16 },
1930 /* 1790 */ { MAD_F(0x054e5e2b) /* 0.331632774 */, 16 },
1931 /* 1791 */ { MAD_F(0x054f6138) /* 0.331879824 */, 16 },
1932
1933 /* 1792 */ { MAD_F(0x05506451) /* 0.332126919 */, 16 },
1934 /* 1793 */ { MAD_F(0x05516776) /* 0.332374060 */, 16 },
1935 /* 1794 */ { MAD_F(0x05526aa8) /* 0.332621247 */, 16 },
1936 /* 1795 */ { MAD_F(0x05536de6) /* 0.332868480 */, 16 },
1937 /* 1796 */ { MAD_F(0x05547131) /* 0.333115759 */, 16 },
1938 /* 1797 */ { MAD_F(0x05557487) /* 0.333363084 */, 16 },
1939 /* 1798 */ { MAD_F(0x055677ea) /* 0.333610455 */, 16 },
1940 /* 1799 */ { MAD_F(0x05577b5a) /* 0.333857872 */, 16 },
1941 /* 1800 */ { MAD_F(0x05587ed5) /* 0.334105334 */, 16 },
1942 /* 1801 */ { MAD_F(0x0559825e) /* 0.334352843 */, 16 },
1943 /* 1802 */ { MAD_F(0x055a85f2) /* 0.334600397 */, 16 },
1944 /* 1803 */ { MAD_F(0x055b8992) /* 0.334847997 */, 16 },
1945 /* 1804 */ { MAD_F(0x055c8d3f) /* 0.335095642 */, 16 },
1946 /* 1805 */ { MAD_F(0x055d90f9) /* 0.335343334 */, 16 },
1947 /* 1806 */ { MAD_F(0x055e94be) /* 0.335591071 */, 16 },
1948 /* 1807 */ { MAD_F(0x055f9890) /* 0.335838854 */, 16 },
1949
1950 /* 1808 */ { MAD_F(0x05609c6e) /* 0.336086683 */, 16 },
1951 /* 1809 */ { MAD_F(0x0561a058) /* 0.336334557 */, 16 },
1952 /* 1810 */ { MAD_F(0x0562a44f) /* 0.336582477 */, 16 },
1953 /* 1811 */ { MAD_F(0x0563a851) /* 0.336830443 */, 16 },
1954 /* 1812 */ { MAD_F(0x0564ac60) /* 0.337078454 */, 16 },
1955 /* 1813 */ { MAD_F(0x0565b07c) /* 0.337326511 */, 16 },
1956 /* 1814 */ { MAD_F(0x0566b4a3) /* 0.337574614 */, 16 },
1957 /* 1815 */ { MAD_F(0x0567b8d7) /* 0.337822762 */, 16 },
1958 /* 1816 */ { MAD_F(0x0568bd17) /* 0.338070956 */, 16 },
1959 /* 1817 */ { MAD_F(0x0569c163) /* 0.338319195 */, 16 },
1960 /* 1818 */ { MAD_F(0x056ac5bc) /* 0.338567480 */, 16 },
1961 /* 1819 */ { MAD_F(0x056bca20) /* 0.338815811 */, 16 },
1962 /* 1820 */ { MAD_F(0x056cce91) /* 0.339064186 */, 16 },
1963 /* 1821 */ { MAD_F(0x056dd30e) /* 0.339312608 */, 16 },
1964 /* 1822 */ { MAD_F(0x056ed798) /* 0.339561075 */, 16 },
1965 /* 1823 */ { MAD_F(0x056fdc2d) /* 0.339809587 */, 16 },
1966
1967 /* 1824 */ { MAD_F(0x0570e0cf) /* 0.340058145 */, 16 },
1968 /* 1825 */ { MAD_F(0x0571e57d) /* 0.340306748 */, 16 },
1969 /* 1826 */ { MAD_F(0x0572ea37) /* 0.340555397 */, 16 },
1970 /* 1827 */ { MAD_F(0x0573eefd) /* 0.340804091 */, 16 },
1971 /* 1828 */ { MAD_F(0x0574f3d0) /* 0.341052830 */, 16 },
1972 /* 1829 */ { MAD_F(0x0575f8ae) /* 0.341301615 */, 16 },
1973 /* 1830 */ { MAD_F(0x0576fd99) /* 0.341550445 */, 16 },
1974 /* 1831 */ { MAD_F(0x05780290) /* 0.341799321 */, 16 },
1975 /* 1832 */ { MAD_F(0x05790793) /* 0.342048241 */, 16 },
1976 /* 1833 */ { MAD_F(0x057a0ca3) /* 0.342297207 */, 16 },
1977 /* 1834 */ { MAD_F(0x057b11be) /* 0.342546219 */, 16 },
1978 /* 1835 */ { MAD_F(0x057c16e6) /* 0.342795275 */, 16 },
1979 /* 1836 */ { MAD_F(0x057d1c1a) /* 0.343044377 */, 16 },
1980 /* 1837 */ { MAD_F(0x057e2159) /* 0.343293524 */, 16 },
1981 /* 1838 */ { MAD_F(0x057f26a6) /* 0.343542717 */, 16 },
1982 /* 1839 */ { MAD_F(0x05802bfe) /* 0.343791954 */, 16 },
1983
1984 /* 1840 */ { MAD_F(0x05813162) /* 0.344041237 */, 16 },
1985 /* 1841 */ { MAD_F(0x058236d2) /* 0.344290564 */, 16 },
1986 /* 1842 */ { MAD_F(0x05833c4f) /* 0.344539937 */, 16 },
1987 /* 1843 */ { MAD_F(0x058441d8) /* 0.344789356 */, 16 },
1988 /* 1844 */ { MAD_F(0x0585476c) /* 0.345038819 */, 16 },
1989 /* 1845 */ { MAD_F(0x05864d0d) /* 0.345288327 */, 16 },
1990 /* 1846 */ { MAD_F(0x058752ba) /* 0.345537880 */, 16 },
1991 /* 1847 */ { MAD_F(0x05885873) /* 0.345787479 */, 16 },
1992 /* 1848 */ { MAD_F(0x05895e39) /* 0.346037122 */, 16 },
1993 /* 1849 */ { MAD_F(0x058a640a) /* 0.346286811 */, 16 },
1994 /* 1850 */ { MAD_F(0x058b69e7) /* 0.346536545 */, 16 },
1995 /* 1851 */ { MAD_F(0x058c6fd1) /* 0.346786323 */, 16 },
1996 /* 1852 */ { MAD_F(0x058d75c6) /* 0.347036147 */, 16 },
1997 /* 1853 */ { MAD_F(0x058e7bc8) /* 0.347286015 */, 16 },
1998 /* 1854 */ { MAD_F(0x058f81d5) /* 0.347535929 */, 16 },
1999 /* 1855 */ { MAD_F(0x059087ef) /* 0.347785887 */, 16 },
2000
2001 /* 1856 */ { MAD_F(0x05918e15) /* 0.348035890 */, 16 },
2002 /* 1857 */ { MAD_F(0x05929447) /* 0.348285939 */, 16 },
2003 /* 1858 */ { MAD_F(0x05939a84) /* 0.348536032 */, 16 },
2004 /* 1859 */ { MAD_F(0x0594a0ce) /* 0.348786170 */, 16 },
2005 /* 1860 */ { MAD_F(0x0595a724) /* 0.349036353 */, 16 },
2006 /* 1861 */ { MAD_F(0x0596ad86) /* 0.349286580 */, 16 },
2007 /* 1862 */ { MAD_F(0x0597b3f4) /* 0.349536853 */, 16 },
2008 /* 1863 */ { MAD_F(0x0598ba6e) /* 0.349787170 */, 16 },
2009 /* 1864 */ { MAD_F(0x0599c0f4) /* 0.350037532 */, 16 },
2010 /* 1865 */ { MAD_F(0x059ac786) /* 0.350287939 */, 16 },
2011 /* 1866 */ { MAD_F(0x059bce25) /* 0.350538391 */, 16 },
2012 /* 1867 */ { MAD_F(0x059cd4cf) /* 0.350788887 */, 16 },
2013 /* 1868 */ { MAD_F(0x059ddb85) /* 0.351039428 */, 16 },
2014 /* 1869 */ { MAD_F(0x059ee247) /* 0.351290014 */, 16 },
2015 /* 1870 */ { MAD_F(0x059fe915) /* 0.351540645 */, 16 },
2016 /* 1871 */ { MAD_F(0x05a0efef) /* 0.351791320 */, 16 },
2017
2018 /* 1872 */ { MAD_F(0x05a1f6d5) /* 0.352042040 */, 16 },
2019 /* 1873 */ { MAD_F(0x05a2fdc7) /* 0.352292804 */, 16 },
2020 /* 1874 */ { MAD_F(0x05a404c5) /* 0.352543613 */, 16 },
2021 /* 1875 */ { MAD_F(0x05a50bcf) /* 0.352794467 */, 16 },
2022 /* 1876 */ { MAD_F(0x05a612e5) /* 0.353045365 */, 16 },
2023 /* 1877 */ { MAD_F(0x05a71a07) /* 0.353296308 */, 16 },
2024 /* 1878 */ { MAD_F(0x05a82135) /* 0.353547296 */, 16 },
2025 /* 1879 */ { MAD_F(0x05a9286f) /* 0.353798328 */, 16 },
2026 /* 1880 */ { MAD_F(0x05aa2fb5) /* 0.354049405 */, 16 },
2027 /* 1881 */ { MAD_F(0x05ab3707) /* 0.354300526 */, 16 },
2028 /* 1882 */ { MAD_F(0x05ac3e65) /* 0.354551691 */, 16 },
2029 /* 1883 */ { MAD_F(0x05ad45ce) /* 0.354802901 */, 16 },
2030 /* 1884 */ { MAD_F(0x05ae4d44) /* 0.355054156 */, 16 },
2031 /* 1885 */ { MAD_F(0x05af54c6) /* 0.355305455 */, 16 },
2032 /* 1886 */ { MAD_F(0x05b05c53) /* 0.355556799 */, 16 },
2033 /* 1887 */ { MAD_F(0x05b163ed) /* 0.355808187 */, 16 },
2034
2035 /* 1888 */ { MAD_F(0x05b26b92) /* 0.356059619 */, 16 },
2036 /* 1889 */ { MAD_F(0x05b37343) /* 0.356311096 */, 16 },
2037 /* 1890 */ { MAD_F(0x05b47b00) /* 0.356562617 */, 16 },
2038 /* 1891 */ { MAD_F(0x05b582c9) /* 0.356814182 */, 16 },
2039 /* 1892 */ { MAD_F(0x05b68a9e) /* 0.357065792 */, 16 },
2040 /* 1893 */ { MAD_F(0x05b7927f) /* 0.357317446 */, 16 },
2041 /* 1894 */ { MAD_F(0x05b89a6c) /* 0.357569145 */, 16 },
2042 /* 1895 */ { MAD_F(0x05b9a265) /* 0.357820887 */, 16 },
2043 /* 1896 */ { MAD_F(0x05baaa69) /* 0.358072674 */, 16 },
2044 /* 1897 */ { MAD_F(0x05bbb27a) /* 0.358324506 */, 16 },
2045 /* 1898 */ { MAD_F(0x05bcba96) /* 0.358576381 */, 16 },
2046 /* 1899 */ { MAD_F(0x05bdc2be) /* 0.358828301 */, 16 },
2047 /* 1900 */ { MAD_F(0x05becaf2) /* 0.359080265 */, 16 },
2048 /* 1901 */ { MAD_F(0x05bfd332) /* 0.359332273 */, 16 },
2049 /* 1902 */ { MAD_F(0x05c0db7e) /* 0.359584326 */, 16 },
2050 /* 1903 */ { MAD_F(0x05c1e3d6) /* 0.359836423 */, 16 },
2051
2052 /* 1904 */ { MAD_F(0x05c2ec39) /* 0.360088563 */, 16 },
2053 /* 1905 */ { MAD_F(0x05c3f4a9) /* 0.360340748 */, 16 },
2054 /* 1906 */ { MAD_F(0x05c4fd24) /* 0.360592977 */, 16 },
2055 /* 1907 */ { MAD_F(0x05c605ab) /* 0.360845251 */, 16 },
2056 /* 1908 */ { MAD_F(0x05c70e3e) /* 0.361097568 */, 16 },
2057 /* 1909 */ { MAD_F(0x05c816dd) /* 0.361349929 */, 16 },
2058 /* 1910 */ { MAD_F(0x05c91f87) /* 0.361602335 */, 16 },
2059 /* 1911 */ { MAD_F(0x05ca283e) /* 0.361854784 */, 16 },
2060 /* 1912 */ { MAD_F(0x05cb3100) /* 0.362107278 */, 16 },
2061 /* 1913 */ { MAD_F(0x05cc39ce) /* 0.362359815 */, 16 },
2062 /* 1914 */ { MAD_F(0x05cd42a8) /* 0.362612397 */, 16 },
2063 /* 1915 */ { MAD_F(0x05ce4b8d) /* 0.362865022 */, 16 },
2064 /* 1916 */ { MAD_F(0x05cf547f) /* 0.363117692 */, 16 },
2065 /* 1917 */ { MAD_F(0x05d05d7c) /* 0.363370405 */, 16 },
2066 /* 1918 */ { MAD_F(0x05d16685) /* 0.363623163 */, 16 },
2067 /* 1919 */ { MAD_F(0x05d26f9a) /* 0.363875964 */, 16 },
2068
2069 /* 1920 */ { MAD_F(0x05d378bb) /* 0.364128809 */, 16 },
2070 /* 1921 */ { MAD_F(0x05d481e7) /* 0.364381698 */, 16 },
2071 /* 1922 */ { MAD_F(0x05d58b1f) /* 0.364634632 */, 16 },
2072 /* 1923 */ { MAD_F(0x05d69463) /* 0.364887608 */, 16 },
2073 /* 1924 */ { MAD_F(0x05d79db3) /* 0.365140629 */, 16 },
2074 /* 1925 */ { MAD_F(0x05d8a70f) /* 0.365393694 */, 16 },
2075 /* 1926 */ { MAD_F(0x05d9b076) /* 0.365646802 */, 16 },
2076 /* 1927 */ { MAD_F(0x05dab9e9) /* 0.365899955 */, 16 },
2077 /* 1928 */ { MAD_F(0x05dbc368) /* 0.366153151 */, 16 },
2078 /* 1929 */ { MAD_F(0x05dcccf2) /* 0.366406390 */, 16 },
2079 /* 1930 */ { MAD_F(0x05ddd689) /* 0.366659674 */, 16 },
2080 /* 1931 */ { MAD_F(0x05dee02b) /* 0.366913001 */, 16 },
2081 /* 1932 */ { MAD_F(0x05dfe9d8) /* 0.367166372 */, 16 },
2082 /* 1933 */ { MAD_F(0x05e0f392) /* 0.367419787 */, 16 },
2083 /* 1934 */ { MAD_F(0x05e1fd57) /* 0.367673246 */, 16 },
2084 /* 1935 */ { MAD_F(0x05e30728) /* 0.367926748 */, 16 },
2085
2086 /* 1936 */ { MAD_F(0x05e41105) /* 0.368180294 */, 16 },
2087 /* 1937 */ { MAD_F(0x05e51aed) /* 0.368433883 */, 16 },
2088 /* 1938 */ { MAD_F(0x05e624e1) /* 0.368687517 */, 16 },
2089 /* 1939 */ { MAD_F(0x05e72ee1) /* 0.368941193 */, 16 },
2090 /* 1940 */ { MAD_F(0x05e838ed) /* 0.369194914 */, 16 },
2091 /* 1941 */ { MAD_F(0x05e94304) /* 0.369448678 */, 16 },
2092 /* 1942 */ { MAD_F(0x05ea4d27) /* 0.369702485 */, 16 },
2093 /* 1943 */ { MAD_F(0x05eb5756) /* 0.369956336 */, 16 },
2094 /* 1944 */ { MAD_F(0x05ec6190) /* 0.370210231 */, 16 },
2095 /* 1945 */ { MAD_F(0x05ed6bd6) /* 0.370464169 */, 16 },
2096 /* 1946 */ { MAD_F(0x05ee7628) /* 0.370718151 */, 16 },
2097 /* 1947 */ { MAD_F(0x05ef8085) /* 0.370972177 */, 16 },
2098 /* 1948 */ { MAD_F(0x05f08aee) /* 0.371226245 */, 16 },
2099 /* 1949 */ { MAD_F(0x05f19563) /* 0.371480358 */, 16 },
2100 /* 1950 */ { MAD_F(0x05f29fe3) /* 0.371734513 */, 16 },
2101 /* 1951 */ { MAD_F(0x05f3aa6f) /* 0.371988712 */, 16 },
2102
2103 /* 1952 */ { MAD_F(0x05f4b507) /* 0.372242955 */, 16 },
2104 /* 1953 */ { MAD_F(0x05f5bfab) /* 0.372497241 */, 16 },
2105 /* 1954 */ { MAD_F(0x05f6ca5a) /* 0.372751570 */, 16 },
2106 /* 1955 */ { MAD_F(0x05f7d514) /* 0.373005943 */, 16 },
2107 /* 1956 */ { MAD_F(0x05f8dfdb) /* 0.373260359 */, 16 },
2108 /* 1957 */ { MAD_F(0x05f9eaad) /* 0.373514819 */, 16 },
2109 /* 1958 */ { MAD_F(0x05faf58a) /* 0.373769322 */, 16 },
2110 /* 1959 */ { MAD_F(0x05fc0073) /* 0.374023868 */, 16 },
2111 /* 1960 */ { MAD_F(0x05fd0b68) /* 0.374278458 */, 16 },
2112 /* 1961 */ { MAD_F(0x05fe1669) /* 0.374533091 */, 16 },
2113 /* 1962 */ { MAD_F(0x05ff2175) /* 0.374787767 */, 16 },
2114 /* 1963 */ { MAD_F(0x06002c8d) /* 0.375042486 */, 16 },
2115 /* 1964 */ { MAD_F(0x060137b0) /* 0.375297249 */, 16 },
2116 /* 1965 */ { MAD_F(0x060242df) /* 0.375552055 */, 16 },
2117 /* 1966 */ { MAD_F(0x06034e19) /* 0.375806904 */, 16 },
2118 /* 1967 */ { MAD_F(0x0604595f) /* 0.376061796 */, 16 },
2119
2120 /* 1968 */ { MAD_F(0x060564b1) /* 0.376316732 */, 16 },
2121 /* 1969 */ { MAD_F(0x0606700f) /* 0.376571710 */, 16 },
2122 /* 1970 */ { MAD_F(0x06077b77) /* 0.376826732 */, 16 },
2123 /* 1971 */ { MAD_F(0x060886ec) /* 0.377081797 */, 16 },
2124 /* 1972 */ { MAD_F(0x0609926c) /* 0.377336905 */, 16 },
2125 /* 1973 */ { MAD_F(0x060a9df8) /* 0.377592057 */, 16 },
2126 /* 1974 */ { MAD_F(0x060ba98f) /* 0.377847251 */, 16 },
2127 /* 1975 */ { MAD_F(0x060cb532) /* 0.378102489 */, 16 },
2128 /* 1976 */ { MAD_F(0x060dc0e0) /* 0.378357769 */, 16 },
2129 /* 1977 */ { MAD_F(0x060ecc9a) /* 0.378613093 */, 16 },
2130 /* 1978 */ { MAD_F(0x060fd860) /* 0.378868460 */, 16 },
2131 /* 1979 */ { MAD_F(0x0610e431) /* 0.379123870 */, 16 },
2132 /* 1980 */ { MAD_F(0x0611f00d) /* 0.379379322 */, 16 },
2133 /* 1981 */ { MAD_F(0x0612fbf5) /* 0.379634818 */, 16 },
2134 /* 1982 */ { MAD_F(0x061407e9) /* 0.379890357 */, 16 },
2135 /* 1983 */ { MAD_F(0x061513e8) /* 0.380145939 */, 16 },
2136
2137 /* 1984 */ { MAD_F(0x06161ff3) /* 0.380401563 */, 16 },
2138 /* 1985 */ { MAD_F(0x06172c09) /* 0.380657231 */, 16 },
2139 /* 1986 */ { MAD_F(0x0618382b) /* 0.380912942 */, 16 },
2140 /* 1987 */ { MAD_F(0x06194458) /* 0.381168695 */, 16 },
2141 /* 1988 */ { MAD_F(0x061a5091) /* 0.381424492 */, 16 },
2142 /* 1989 */ { MAD_F(0x061b5cd5) /* 0.381680331 */, 16 },
2143 /* 1990 */ { MAD_F(0x061c6925) /* 0.381936213 */, 16 },
2144 /* 1991 */ { MAD_F(0x061d7581) /* 0.382192138 */, 16 },
2145 /* 1992 */ { MAD_F(0x061e81e8) /* 0.382448106 */, 16 },
2146 /* 1993 */ { MAD_F(0x061f8e5a) /* 0.382704117 */, 16 },
2147 /* 1994 */ { MAD_F(0x06209ad8) /* 0.382960171 */, 16 },
2148 /* 1995 */ { MAD_F(0x0621a761) /* 0.383216267 */, 16 },
2149 /* 1996 */ { MAD_F(0x0622b3f6) /* 0.383472406 */, 16 },
2150 /* 1997 */ { MAD_F(0x0623c096) /* 0.383728588 */, 16 },
2151 /* 1998 */ { MAD_F(0x0624cd42) /* 0.383984813 */, 16 },
2152 /* 1999 */ { MAD_F(0x0625d9f9) /* 0.384241080 */, 16 },
2153
2154 /* 2000 */ { MAD_F(0x0626e6bc) /* 0.384497391 */, 16 },
2155 /* 2001 */ { MAD_F(0x0627f38a) /* 0.384753744 */, 16 },
2156 /* 2002 */ { MAD_F(0x06290064) /* 0.385010139 */, 16 },
2157 /* 2003 */ { MAD_F(0x062a0d49) /* 0.385266578 */, 16 },
2158 /* 2004 */ { MAD_F(0x062b1a3a) /* 0.385523059 */, 16 },
2159 /* 2005 */ { MAD_F(0x062c2736) /* 0.385779582 */, 16 },
2160 /* 2006 */ { MAD_F(0x062d343d) /* 0.386036149 */, 16 },
2161 /* 2007 */ { MAD_F(0x062e4150) /* 0.386292758 */, 16 },
2162 /* 2008 */ { MAD_F(0x062f4e6f) /* 0.386549409 */, 16 },
2163 /* 2009 */ { MAD_F(0x06305b99) /* 0.386806104 */, 16 },
2164 /* 2010 */ { MAD_F(0x063168ce) /* 0.387062840 */, 16 },
2165 /* 2011 */ { MAD_F(0x0632760f) /* 0.387319620 */, 16 },
2166 /* 2012 */ { MAD_F(0x0633835b) /* 0.387576442 */, 16 },
2167 /* 2013 */ { MAD_F(0x063490b2) /* 0.387833306 */, 16 },
2168 /* 2014 */ { MAD_F(0x06359e15) /* 0.388090213 */, 16 },
2169 /* 2015 */ { MAD_F(0x0636ab83) /* 0.388347163 */, 16 },
2170
2171 /* 2016 */ { MAD_F(0x0637b8fd) /* 0.388604155 */, 16 },
2172 /* 2017 */ { MAD_F(0x0638c682) /* 0.388861190 */, 16 },
2173 /* 2018 */ { MAD_F(0x0639d413) /* 0.389118267 */, 16 },
2174 /* 2019 */ { MAD_F(0x063ae1af) /* 0.389375386 */, 16 },
2175 /* 2020 */ { MAD_F(0x063bef56) /* 0.389632548 */, 16 },
2176 /* 2021 */ { MAD_F(0x063cfd09) /* 0.389889752 */, 16 },
2177 /* 2022 */ { MAD_F(0x063e0ac7) /* 0.390146999 */, 16 },
2178 /* 2023 */ { MAD_F(0x063f1891) /* 0.390404289 */, 16 },
2179 /* 2024 */ { MAD_F(0x06402666) /* 0.390661620 */, 16 },
2180 /* 2025 */ { MAD_F(0x06413446) /* 0.390918994 */, 16 },
2181 /* 2026 */ { MAD_F(0x06424232) /* 0.391176411 */, 16 },
2182 /* 2027 */ { MAD_F(0x06435029) /* 0.391433869 */, 16 },
2183 /* 2028 */ { MAD_F(0x06445e2b) /* 0.391691371 */, 16 },
2184 /* 2029 */ { MAD_F(0x06456c39) /* 0.391948914 */, 16 },
2185 /* 2030 */ { MAD_F(0x06467a52) /* 0.392206500 */, 16 },
2186 /* 2031 */ { MAD_F(0x06478877) /* 0.392464128 */, 16 },
2187
2188 /* 2032 */ { MAD_F(0x064896a7) /* 0.392721798 */, 16 },
2189 /* 2033 */ { MAD_F(0x0649a4e2) /* 0.392979511 */, 16 },
2190 /* 2034 */ { MAD_F(0x064ab328) /* 0.393237266 */, 16 },
2191 /* 2035 */ { MAD_F(0x064bc17a) /* 0.393495063 */, 16 },
2192 /* 2036 */ { MAD_F(0x064ccfd8) /* 0.393752902 */, 16 },
2193 /* 2037 */ { MAD_F(0x064dde40) /* 0.394010784 */, 16 },
2194 /* 2038 */ { MAD_F(0x064eecb4) /* 0.394268707 */, 16 },
2195 /* 2039 */ { MAD_F(0x064ffb33) /* 0.394526673 */, 16 },
2196 /* 2040 */ { MAD_F(0x065109be) /* 0.394784681 */, 16 },
2197 /* 2041 */ { MAD_F(0x06521854) /* 0.395042732 */, 16 },
2198 /* 2042 */ { MAD_F(0x065326f5) /* 0.395300824 */, 16 },
2199 /* 2043 */ { MAD_F(0x065435a1) /* 0.395558959 */, 16 },
2200 /* 2044 */ { MAD_F(0x06554459) /* 0.395817135 */, 16 },
2201 /* 2045 */ { MAD_F(0x0656531c) /* 0.396075354 */, 16 },
2202 /* 2046 */ { MAD_F(0x065761ea) /* 0.396333615 */, 16 },
2203 /* 2047 */ { MAD_F(0x065870c4) /* 0.396591918 */, 16 },
2204
2205 /* 2048 */ { MAD_F(0x06597fa9) /* 0.396850263 */, 16 },
2206 /* 2049 */ { MAD_F(0x065a8e99) /* 0.397108650 */, 16 },
2207 /* 2050 */ { MAD_F(0x065b9d95) /* 0.397367079 */, 16 },
2208 /* 2051 */ { MAD_F(0x065cac9c) /* 0.397625550 */, 16 },
2209 /* 2052 */ { MAD_F(0x065dbbae) /* 0.397884063 */, 16 },
2210 /* 2053 */ { MAD_F(0x065ecacb) /* 0.398142619 */, 16 },
2211 /* 2054 */ { MAD_F(0x065fd9f4) /* 0.398401216 */, 16 },
2212 /* 2055 */ { MAD_F(0x0660e928) /* 0.398659855 */, 16 },
2213 /* 2056 */ { MAD_F(0x0661f867) /* 0.398918536 */, 16 },
2214 /* 2057 */ { MAD_F(0x066307b1) /* 0.399177259 */, 16 },
2215 /* 2058 */ { MAD_F(0x06641707) /* 0.399436024 */, 16 },
2216 /* 2059 */ { MAD_F(0x06652668) /* 0.399694831 */, 16 },
2217 /* 2060 */ { MAD_F(0x066635d4) /* 0.399953679 */, 16 },
2218 /* 2061 */ { MAD_F(0x0667454c) /* 0.400212570 */, 16 },
2219 /* 2062 */ { MAD_F(0x066854ce) /* 0.400471503 */, 16 },
2220 /* 2063 */ { MAD_F(0x0669645c) /* 0.400730477 */, 16 },
2221
2222 /* 2064 */ { MAD_F(0x066a73f5) /* 0.400989493 */, 16 },
2223 /* 2065 */ { MAD_F(0x066b839a) /* 0.401248551 */, 16 },
2224 /* 2066 */ { MAD_F(0x066c9349) /* 0.401507651 */, 16 },
2225 /* 2067 */ { MAD_F(0x066da304) /* 0.401766793 */, 16 },
2226 /* 2068 */ { MAD_F(0x066eb2ca) /* 0.402025976 */, 16 },
2227 /* 2069 */ { MAD_F(0x066fc29b) /* 0.402285202 */, 16 },
2228 /* 2070 */ { MAD_F(0x0670d278) /* 0.402544469 */, 16 },
2229 /* 2071 */ { MAD_F(0x0671e25f) /* 0.402803777 */, 16 },
2230 /* 2072 */ { MAD_F(0x0672f252) /* 0.403063128 */, 16 },
2231 /* 2073 */ { MAD_F(0x06740250) /* 0.403322520 */, 16 },
2232 /* 2074 */ { MAD_F(0x0675125a) /* 0.403581954 */, 16 },
2233 /* 2075 */ { MAD_F(0x0676226e) /* 0.403841430 */, 16 },
2234 /* 2076 */ { MAD_F(0x0677328e) /* 0.404100947 */, 16 },
2235 /* 2077 */ { MAD_F(0x067842b9) /* 0.404360506 */, 16 },
2236 /* 2078 */ { MAD_F(0x067952ef) /* 0.404620107 */, 16 },
2237 /* 2079 */ { MAD_F(0x067a6330) /* 0.404879749 */, 16 },
2238
2239 /* 2080 */ { MAD_F(0x067b737c) /* 0.405139433 */, 16 },
2240 /* 2081 */ { MAD_F(0x067c83d4) /* 0.405399159 */, 16 },
2241 /* 2082 */ { MAD_F(0x067d9436) /* 0.405658926 */, 16 },
2242 /* 2083 */ { MAD_F(0x067ea4a4) /* 0.405918735 */, 16 },
2243 /* 2084 */ { MAD_F(0x067fb51d) /* 0.406178585 */, 16 },
2244 /* 2085 */ { MAD_F(0x0680c5a2) /* 0.406438477 */, 16 },
2245 /* 2086 */ { MAD_F(0x0681d631) /* 0.406698410 */, 16 },
2246 /* 2087 */ { MAD_F(0x0682e6cb) /* 0.406958385 */, 16 },
2247 /* 2088 */ { MAD_F(0x0683f771) /* 0.407218402 */, 16 },
2248 /* 2089 */ { MAD_F(0x06850822) /* 0.407478460 */, 16 },
2249 /* 2090 */ { MAD_F(0x068618de) /* 0.407738559 */, 16 },
2250 /* 2091 */ { MAD_F(0x068729a5) /* 0.407998700 */, 16 },
2251 /* 2092 */ { MAD_F(0x06883a77) /* 0.408258883 */, 16 },
2252 /* 2093 */ { MAD_F(0x06894b55) /* 0.408519107 */, 16 },
2253 /* 2094 */ { MAD_F(0x068a5c3d) /* 0.408779372 */, 16 },
2254 /* 2095 */ { MAD_F(0x068b6d31) /* 0.409039679 */, 16 },
2255
2256 /* 2096 */ { MAD_F(0x068c7e2f) /* 0.409300027 */, 16 },
2257 /* 2097 */ { MAD_F(0x068d8f39) /* 0.409560417 */, 16 },
2258 /* 2098 */ { MAD_F(0x068ea04e) /* 0.409820848 */, 16 },
2259 /* 2099 */ { MAD_F(0x068fb16e) /* 0.410081321 */, 16 },
2260 /* 2100 */ { MAD_F(0x0690c299) /* 0.410341834 */, 16 },
2261 /* 2101 */ { MAD_F(0x0691d3cf) /* 0.410602390 */, 16 },
2262 /* 2102 */ { MAD_F(0x0692e511) /* 0.410862986 */, 16 },
2263 /* 2103 */ { MAD_F(0x0693f65d) /* 0.411123624 */, 16 },
2264 /* 2104 */ { MAD_F(0x069507b5) /* 0.411384303 */, 16 },
2265 /* 2105 */ { MAD_F(0x06961917) /* 0.411645024 */, 16 },
2266 /* 2106 */ { MAD_F(0x06972a85) /* 0.411905785 */, 16 },
2267 /* 2107 */ { MAD_F(0x06983bfe) /* 0.412166588 */, 16 },
2268 /* 2108 */ { MAD_F(0x06994d82) /* 0.412427433 */, 16 },
2269 /* 2109 */ { MAD_F(0x069a5f11) /* 0.412688318 */, 16 },
2270 /* 2110 */ { MAD_F(0x069b70ab) /* 0.412949245 */, 16 },
2271 /* 2111 */ { MAD_F(0x069c8250) /* 0.413210213 */, 16 },
2272
2273 /* 2112 */ { MAD_F(0x069d9400) /* 0.413471222 */, 16 },
2274 /* 2113 */ { MAD_F(0x069ea5bb) /* 0.413732273 */, 16 },
2275 /* 2114 */ { MAD_F(0x069fb781) /* 0.413993364 */, 16 },
2276 /* 2115 */ { MAD_F(0x06a0c953) /* 0.414254497 */, 16 },
2277 /* 2116 */ { MAD_F(0x06a1db2f) /* 0.414515671 */, 16 },
2278 /* 2117 */ { MAD_F(0x06a2ed16) /* 0.414776886 */, 16 },
2279 /* 2118 */ { MAD_F(0x06a3ff09) /* 0.415038142 */, 16 },
2280 /* 2119 */ { MAD_F(0x06a51106) /* 0.415299440 */, 16 },
2281 /* 2120 */ { MAD_F(0x06a6230f) /* 0.415560778 */, 16 },
2282 /* 2121 */ { MAD_F(0x06a73522) /* 0.415822157 */, 16 },
2283 /* 2122 */ { MAD_F(0x06a84741) /* 0.416083578 */, 16 },
2284 /* 2123 */ { MAD_F(0x06a9596a) /* 0.416345040 */, 16 },
2285 /* 2124 */ { MAD_F(0x06aa6b9f) /* 0.416606542 */, 16 },
2286 /* 2125 */ { MAD_F(0x06ab7ddf) /* 0.416868086 */, 16 },
2287 /* 2126 */ { MAD_F(0x06ac9029) /* 0.417129671 */, 16 },
2288 /* 2127 */ { MAD_F(0x06ada27f) /* 0.417391297 */, 16 },
2289
2290 /* 2128 */ { MAD_F(0x06aeb4e0) /* 0.417652964 */, 16 },
2291 /* 2129 */ { MAD_F(0x06afc74b) /* 0.417914672 */, 16 },
2292 /* 2130 */ { MAD_F(0x06b0d9c2) /* 0.418176420 */, 16 },
2293 /* 2131 */ { MAD_F(0x06b1ec43) /* 0.418438210 */, 16 },
2294 /* 2132 */ { MAD_F(0x06b2fed0) /* 0.418700041 */, 16 },
2295 /* 2133 */ { MAD_F(0x06b41168) /* 0.418961912 */, 16 },
2296 /* 2134 */ { MAD_F(0x06b5240a) /* 0.419223825 */, 16 },
2297 /* 2135 */ { MAD_F(0x06b636b8) /* 0.419485778 */, 16 },
2298 /* 2136 */ { MAD_F(0x06b74971) /* 0.419747773 */, 16 },
2299 /* 2137 */ { MAD_F(0x06b85c34) /* 0.420009808 */, 16 },
2300 /* 2138 */ { MAD_F(0x06b96f03) /* 0.420271884 */, 16 },
2301 /* 2139 */ { MAD_F(0x06ba81dc) /* 0.420534001 */, 16 },
2302 /* 2140 */ { MAD_F(0x06bb94c1) /* 0.420796159 */, 16 },
2303 /* 2141 */ { MAD_F(0x06bca7b0) /* 0.421058358 */, 16 },
2304 /* 2142 */ { MAD_F(0x06bdbaaa) /* 0.421320597 */, 16 },
2305 /* 2143 */ { MAD_F(0x06becdb0) /* 0.421582878 */, 16 },
2306
2307 /* 2144 */ { MAD_F(0x06bfe0c0) /* 0.421845199 */, 16 },
2308 /* 2145 */ { MAD_F(0x06c0f3db) /* 0.422107561 */, 16 },
2309 /* 2146 */ { MAD_F(0x06c20702) /* 0.422369964 */, 16 },
2310 /* 2147 */ { MAD_F(0x06c31a33) /* 0.422632407 */, 16 },
2311 /* 2148 */ { MAD_F(0x06c42d6f) /* 0.422894891 */, 16 },
2312 /* 2149 */ { MAD_F(0x06c540b6) /* 0.423157416 */, 16 },
2313 /* 2150 */ { MAD_F(0x06c65408) /* 0.423419982 */, 16 },
2314 /* 2151 */ { MAD_F(0x06c76765) /* 0.423682588 */, 16 },
2315 /* 2152 */ { MAD_F(0x06c87acc) /* 0.423945235 */, 16 },
2316 /* 2153 */ { MAD_F(0x06c98e3f) /* 0.424207923 */, 16 },
2317 /* 2154 */ { MAD_F(0x06caa1bd) /* 0.424470652 */, 16 },
2318 /* 2155 */ { MAD_F(0x06cbb545) /* 0.424733421 */, 16 },
2319 /* 2156 */ { MAD_F(0x06ccc8d9) /* 0.424996230 */, 16 },
2320 /* 2157 */ { MAD_F(0x06cddc77) /* 0.425259081 */, 16 },
2321 /* 2158 */ { MAD_F(0x06cef020) /* 0.425521972 */, 16 },
2322 /* 2159 */ { MAD_F(0x06d003d4) /* 0.425784903 */, 16 },
2323
2324 /* 2160 */ { MAD_F(0x06d11794) /* 0.426047876 */, 16 },
2325 /* 2161 */ { MAD_F(0x06d22b5e) /* 0.426310889 */, 16 },
2326 /* 2162 */ { MAD_F(0x06d33f32) /* 0.426573942 */, 16 },
2327 /* 2163 */ { MAD_F(0x06d45312) /* 0.426837036 */, 16 },
2328 /* 2164 */ { MAD_F(0x06d566fd) /* 0.427100170 */, 16 },
2329 /* 2165 */ { MAD_F(0x06d67af2) /* 0.427363345 */, 16 },
2330 /* 2166 */ { MAD_F(0x06d78ef3) /* 0.427626561 */, 16 },
2331 /* 2167 */ { MAD_F(0x06d8a2fe) /* 0.427889817 */, 16 },
2332 /* 2168 */ { MAD_F(0x06d9b714) /* 0.428153114 */, 16 },
2333 /* 2169 */ { MAD_F(0x06dacb35) /* 0.428416451 */, 16 },
2334 /* 2170 */ { MAD_F(0x06dbdf61) /* 0.428679828 */, 16 },
2335 /* 2171 */ { MAD_F(0x06dcf398) /* 0.428943246 */, 16 },
2336 /* 2172 */ { MAD_F(0x06de07d9) /* 0.429206704 */, 16 },
2337 /* 2173 */ { MAD_F(0x06df1c26) /* 0.429470203 */, 16 },
2338 /* 2174 */ { MAD_F(0x06e0307d) /* 0.429733743 */, 16 },
2339 /* 2175 */ { MAD_F(0x06e144df) /* 0.429997322 */, 16 },
2340
2341 /* 2176 */ { MAD_F(0x06e2594c) /* 0.430260942 */, 16 },
2342 /* 2177 */ { MAD_F(0x06e36dc4) /* 0.430524603 */, 16 },
2343 /* 2178 */ { MAD_F(0x06e48246) /* 0.430788304 */, 16 },
2344 /* 2179 */ { MAD_F(0x06e596d4) /* 0.431052045 */, 16 },
2345 /* 2180 */ { MAD_F(0x06e6ab6c) /* 0.431315826 */, 16 },
2346 /* 2181 */ { MAD_F(0x06e7c00f) /* 0.431579648 */, 16 },
2347 /* 2182 */ { MAD_F(0x06e8d4bd) /* 0.431843511 */, 16 },
2348 /* 2183 */ { MAD_F(0x06e9e976) /* 0.432107413 */, 16 },
2349 /* 2184 */ { MAD_F(0x06eafe3a) /* 0.432371356 */, 16 },
2350 /* 2185 */ { MAD_F(0x06ec1308) /* 0.432635339 */, 16 },
2351 /* 2186 */ { MAD_F(0x06ed27e2) /* 0.432899362 */, 16 },
2352 /* 2187 */ { MAD_F(0x06ee3cc6) /* 0.433163426 */, 16 },
2353 /* 2188 */ { MAD_F(0x06ef51b4) /* 0.433427530 */, 16 },
2354 /* 2189 */ { MAD_F(0x06f066ae) /* 0.433691674 */, 16 },
2355 /* 2190 */ { MAD_F(0x06f17bb3) /* 0.433955859 */, 16 },
2356 /* 2191 */ { MAD_F(0x06f290c2) /* 0.434220083 */, 16 },
2357
2358 /* 2192 */ { MAD_F(0x06f3a5dc) /* 0.434484348 */, 16 },
2359 /* 2193 */ { MAD_F(0x06f4bb01) /* 0.434748653 */, 16 },
2360 /* 2194 */ { MAD_F(0x06f5d030) /* 0.435012998 */, 16 },
2361 /* 2195 */ { MAD_F(0x06f6e56b) /* 0.435277383 */, 16 },
2362 /* 2196 */ { MAD_F(0x06f7fab0) /* 0.435541809 */, 16 },
2363 /* 2197 */ { MAD_F(0x06f91000) /* 0.435806274 */, 16 },
2364 /* 2198 */ { MAD_F(0x06fa255a) /* 0.436070780 */, 16 },
2365 /* 2199 */ { MAD_F(0x06fb3ac0) /* 0.436335326 */, 16 },
2366 /* 2200 */ { MAD_F(0x06fc5030) /* 0.436599912 */, 16 },
2367 /* 2201 */ { MAD_F(0x06fd65ab) /* 0.436864538 */, 16 },
2368 /* 2202 */ { MAD_F(0x06fe7b31) /* 0.437129204 */, 16 },
2369 /* 2203 */ { MAD_F(0x06ff90c2) /* 0.437393910 */, 16 },
2370 /* 2204 */ { MAD_F(0x0700a65d) /* 0.437658657 */, 16 },
2371 /* 2205 */ { MAD_F(0x0701bc03) /* 0.437923443 */, 16 },
2372 /* 2206 */ { MAD_F(0x0702d1b4) /* 0.438188269 */, 16 },
2373 /* 2207 */ { MAD_F(0x0703e76f) /* 0.438453136 */, 16 },
2374
2375 /* 2208 */ { MAD_F(0x0704fd35) /* 0.438718042 */, 16 },
2376 /* 2209 */ { MAD_F(0x07061306) /* 0.438982988 */, 16 },
2377 /* 2210 */ { MAD_F(0x070728e2) /* 0.439247975 */, 16 },
2378 /* 2211 */ { MAD_F(0x07083ec9) /* 0.439513001 */, 16 },
2379 /* 2212 */ { MAD_F(0x070954ba) /* 0.439778067 */, 16 },
2380 /* 2213 */ { MAD_F(0x070a6ab6) /* 0.440043173 */, 16 },
2381 /* 2214 */ { MAD_F(0x070b80bc) /* 0.440308320 */, 16 },
2382 /* 2215 */ { MAD_F(0x070c96ce) /* 0.440573506 */, 16 },
2383 /* 2216 */ { MAD_F(0x070dacea) /* 0.440838732 */, 16 },
2384 /* 2217 */ { MAD_F(0x070ec310) /* 0.441103997 */, 16 },
2385 /* 2218 */ { MAD_F(0x070fd942) /* 0.441369303 */, 16 },
2386 /* 2219 */ { MAD_F(0x0710ef7e) /* 0.441634649 */, 16 },
2387 /* 2220 */ { MAD_F(0x071205c5) /* 0.441900034 */, 16 },
2388 /* 2221 */ { MAD_F(0x07131c17) /* 0.442165460 */, 16 },
2389 /* 2222 */ { MAD_F(0x07143273) /* 0.442430925 */, 16 },
2390 /* 2223 */ { MAD_F(0x071548da) /* 0.442696430 */, 16 },
2391
2392 /* 2224 */ { MAD_F(0x07165f4b) /* 0.442961975 */, 16 },
2393 /* 2225 */ { MAD_F(0x071775c8) /* 0.443227559 */, 16 },
2394 /* 2226 */ { MAD_F(0x07188c4f) /* 0.443493184 */, 16 },
2395 /* 2227 */ { MAD_F(0x0719a2e0) /* 0.443758848 */, 16 },
2396 /* 2228 */ { MAD_F(0x071ab97d) /* 0.444024552 */, 16 },
2397 /* 2229 */ { MAD_F(0x071bd024) /* 0.444290296 */, 16 },
2398 /* 2230 */ { MAD_F(0x071ce6d6) /* 0.444556079 */, 16 },
2399 /* 2231 */ { MAD_F(0x071dfd92) /* 0.444821902 */, 16 },
2400 /* 2232 */ { MAD_F(0x071f1459) /* 0.445087765 */, 16 },
2401 /* 2233 */ { MAD_F(0x07202b2b) /* 0.445353668 */, 16 },
2402 /* 2234 */ { MAD_F(0x07214207) /* 0.445619610 */, 16 },
2403 /* 2235 */ { MAD_F(0x072258ee) /* 0.445885592 */, 16 },
2404 /* 2236 */ { MAD_F(0x07236fe0) /* 0.446151614 */, 16 },
2405 /* 2237 */ { MAD_F(0x072486dc) /* 0.446417675 */, 16 },
2406 /* 2238 */ { MAD_F(0x07259de3) /* 0.446683776 */, 16 },
2407 /* 2239 */ { MAD_F(0x0726b4f4) /* 0.446949917 */, 16 },
2408
2409 /* 2240 */ { MAD_F(0x0727cc11) /* 0.447216097 */, 16 },
2410 /* 2241 */ { MAD_F(0x0728e338) /* 0.447482317 */, 16 },
2411 /* 2242 */ { MAD_F(0x0729fa69) /* 0.447748576 */, 16 },
2412 /* 2243 */ { MAD_F(0x072b11a5) /* 0.448014875 */, 16 },
2413 /* 2244 */ { MAD_F(0x072c28ec) /* 0.448281214 */, 16 },
2414 /* 2245 */ { MAD_F(0x072d403d) /* 0.448547592 */, 16 },
2415 /* 2246 */ { MAD_F(0x072e5799) /* 0.448814010 */, 16 },
2416 /* 2247 */ { MAD_F(0x072f6f00) /* 0.449080467 */, 16 },
2417 /* 2248 */ { MAD_F(0x07308671) /* 0.449346964 */, 16 },
2418 /* 2249 */ { MAD_F(0x07319ded) /* 0.449613501 */, 16 },
2419 /* 2250 */ { MAD_F(0x0732b573) /* 0.449880076 */, 16 },
2420 /* 2251 */ { MAD_F(0x0733cd04) /* 0.450146692 */, 16 },
2421 /* 2252 */ { MAD_F(0x0734e4a0) /* 0.450413347 */, 16 },
2422 /* 2253 */ { MAD_F(0x0735fc46) /* 0.450680041 */, 16 },
2423 /* 2254 */ { MAD_F(0x073713f7) /* 0.450946775 */, 16 },
2424 /* 2255 */ { MAD_F(0x07382bb2) /* 0.451213548 */, 16 },
2425
2426 /* 2256 */ { MAD_F(0x07394378) /* 0.451480360 */, 16 },
2427 /* 2257 */ { MAD_F(0x073a5b49) /* 0.451747213 */, 16 },
2428 /* 2258 */ { MAD_F(0x073b7324) /* 0.452014104 */, 16 },
2429 /* 2259 */ { MAD_F(0x073c8b0a) /* 0.452281035 */, 16 },
2430 /* 2260 */ { MAD_F(0x073da2fa) /* 0.452548005 */, 16 },
2431 /* 2261 */ { MAD_F(0x073ebaf5) /* 0.452815015 */, 16 },
2432 /* 2262 */ { MAD_F(0x073fd2fa) /* 0.453082064 */, 16 },
2433 /* 2263 */ { MAD_F(0x0740eb0a) /* 0.453349152 */, 16 },
2434 /* 2264 */ { MAD_F(0x07420325) /* 0.453616280 */, 16 },
2435 /* 2265 */ { MAD_F(0x07431b4a) /* 0.453883447 */, 16 },
2436 /* 2266 */ { MAD_F(0x0744337a) /* 0.454150653 */, 16 },
2437 /* 2267 */ { MAD_F(0x07454bb4) /* 0.454417899 */, 16 },
2438 /* 2268 */ { MAD_F(0x074663f8) /* 0.454685184 */, 16 },
2439 /* 2269 */ { MAD_F(0x07477c48) /* 0.454952508 */, 16 },
2440 /* 2270 */ { MAD_F(0x074894a2) /* 0.455219872 */, 16 },
2441 /* 2271 */ { MAD_F(0x0749ad06) /* 0.455487275 */, 16 },
2442
2443 /* 2272 */ { MAD_F(0x074ac575) /* 0.455754717 */, 16 },
2444 /* 2273 */ { MAD_F(0x074bddee) /* 0.456022198 */, 16 },
2445 /* 2274 */ { MAD_F(0x074cf672) /* 0.456289719 */, 16 },
2446 /* 2275 */ { MAD_F(0x074e0f01) /* 0.456557278 */, 16 },
2447 /* 2276 */ { MAD_F(0x074f279a) /* 0.456824877 */, 16 },
2448 /* 2277 */ { MAD_F(0x0750403e) /* 0.457092516 */, 16 },
2449 /* 2278 */ { MAD_F(0x075158ec) /* 0.457360193 */, 16 },
2450 /* 2279 */ { MAD_F(0x075271a4) /* 0.457627909 */, 16 },
2451 /* 2280 */ { MAD_F(0x07538a67) /* 0.457895665 */, 16 },
2452 /* 2281 */ { MAD_F(0x0754a335) /* 0.458163460 */, 16 },
2453 /* 2282 */ { MAD_F(0x0755bc0d) /* 0.458431294 */, 16 },
2454 /* 2283 */ { MAD_F(0x0756d4f0) /* 0.458699167 */, 16 },
2455 /* 2284 */ { MAD_F(0x0757eddd) /* 0.458967079 */, 16 },
2456 /* 2285 */ { MAD_F(0x075906d5) /* 0.459235030 */, 16 },
2457 /* 2286 */ { MAD_F(0x075a1fd7) /* 0.459503021 */, 16 },
2458 /* 2287 */ { MAD_F(0x075b38e3) /* 0.459771050 */, 16 },
2459
2460 /* 2288 */ { MAD_F(0x075c51fa) /* 0.460039119 */, 16 },
2461 /* 2289 */ { MAD_F(0x075d6b1c) /* 0.460307226 */, 16 },
2462 /* 2290 */ { MAD_F(0x075e8448) /* 0.460575373 */, 16 },
2463 /* 2291 */ { MAD_F(0x075f9d7f) /* 0.460843559 */, 16 },
2464 /* 2292 */ { MAD_F(0x0760b6c0) /* 0.461111783 */, 16 },
2465 /* 2293 */ { MAD_F(0x0761d00b) /* 0.461380047 */, 16 },
2466 /* 2294 */ { MAD_F(0x0762e961) /* 0.461648350 */, 16 },
2467 /* 2295 */ { MAD_F(0x076402c1) /* 0.461916691 */, 16 },
2468 /* 2296 */ { MAD_F(0x07651c2c) /* 0.462185072 */, 16 },
2469 /* 2297 */ { MAD_F(0x076635a2) /* 0.462453492 */, 16 },
2470 /* 2298 */ { MAD_F(0x07674f22) /* 0.462721950 */, 16 },
2471 /* 2299 */ { MAD_F(0x076868ac) /* 0.462990448 */, 16 },
2472 /* 2300 */ { MAD_F(0x07698240) /* 0.463258984 */, 16 },
2473 /* 2301 */ { MAD_F(0x076a9be0) /* 0.463527560 */, 16 },
2474 /* 2302 */ { MAD_F(0x076bb589) /* 0.463796174 */, 16 },
2475 /* 2303 */ { MAD_F(0x076ccf3d) /* 0.464064827 */, 16 },
2476
2477 /* 2304 */ { MAD_F(0x076de8fc) /* 0.464333519 */, 16 },
2478 /* 2305 */ { MAD_F(0x076f02c5) /* 0.464602250 */, 16 },
2479 /* 2306 */ { MAD_F(0x07701c98) /* 0.464871020 */, 16 },
2480 /* 2307 */ { MAD_F(0x07713676) /* 0.465139829 */, 16 },
2481 /* 2308 */ { MAD_F(0x0772505e) /* 0.465408676 */, 16 },
2482 /* 2309 */ { MAD_F(0x07736a51) /* 0.465677563 */, 16 },
2483 /* 2310 */ { MAD_F(0x0774844e) /* 0.465946488 */, 16 },
2484 /* 2311 */ { MAD_F(0x07759e55) /* 0.466215452 */, 16 },
2485 /* 2312 */ { MAD_F(0x0776b867) /* 0.466484455 */, 16 },
2486 /* 2313 */ { MAD_F(0x0777d283) /* 0.466753496 */, 16 },
2487 /* 2314 */ { MAD_F(0x0778ecaa) /* 0.467022577 */, 16 },
2488 /* 2315 */ { MAD_F(0x077a06db) /* 0.467291696 */, 16 },
2489 /* 2316 */ { MAD_F(0x077b2117) /* 0.467560854 */, 16 },
2490 /* 2317 */ { MAD_F(0x077c3b5d) /* 0.467830050 */, 16 },
2491 /* 2318 */ { MAD_F(0x077d55ad) /* 0.468099285 */, 16 },
2492 /* 2319 */ { MAD_F(0x077e7008) /* 0.468368560 */, 16 },
2493
2494 /* 2320 */ { MAD_F(0x077f8a6d) /* 0.468637872 */, 16 },
2495 /* 2321 */ { MAD_F(0x0780a4dc) /* 0.468907224 */, 16 },
2496 /* 2322 */ { MAD_F(0x0781bf56) /* 0.469176614 */, 16 },
2497 /* 2323 */ { MAD_F(0x0782d9da) /* 0.469446043 */, 16 },
2498 /* 2324 */ { MAD_F(0x0783f469) /* 0.469715510 */, 16 },
2499 /* 2325 */ { MAD_F(0x07850f02) /* 0.469985016 */, 16 },
2500 /* 2326 */ { MAD_F(0x078629a5) /* 0.470254561 */, 16 },
2501 /* 2327 */ { MAD_F(0x07874453) /* 0.470524145 */, 16 },
2502 /* 2328 */ { MAD_F(0x07885f0b) /* 0.470793767 */, 16 },
2503 /* 2329 */ { MAD_F(0x078979ce) /* 0.471063427 */, 16 },
2504 /* 2330 */ { MAD_F(0x078a949a) /* 0.471333126 */, 16 },
2505 /* 2331 */ { MAD_F(0x078baf72) /* 0.471602864 */, 16 },
2506 /* 2332 */ { MAD_F(0x078cca53) /* 0.471872641 */, 16 },
2507 /* 2333 */ { MAD_F(0x078de53f) /* 0.472142456 */, 16 },
2508 /* 2334 */ { MAD_F(0x078f0035) /* 0.472412309 */, 16 },
2509 /* 2335 */ { MAD_F(0x07901b36) /* 0.472682201 */, 16 },
2510
2511 /* 2336 */ { MAD_F(0x07913641) /* 0.472952132 */, 16 },
2512 /* 2337 */ { MAD_F(0x07925156) /* 0.473222101 */, 16 },
2513 /* 2338 */ { MAD_F(0x07936c76) /* 0.473492108 */, 16 },
2514 /* 2339 */ { MAD_F(0x079487a0) /* 0.473762155 */, 16 },
2515 /* 2340 */ { MAD_F(0x0795a2d4) /* 0.474032239 */, 16 },
2516 /* 2341 */ { MAD_F(0x0796be13) /* 0.474302362 */, 16 },
2517 /* 2342 */ { MAD_F(0x0797d95c) /* 0.474572524 */, 16 },
2518 /* 2343 */ { MAD_F(0x0798f4af) /* 0.474842724 */, 16 },
2519 /* 2344 */ { MAD_F(0x079a100c) /* 0.475112962 */, 16 },
2520 /* 2345 */ { MAD_F(0x079b2b74) /* 0.475383239 */, 16 },
2521 /* 2346 */ { MAD_F(0x079c46e7) /* 0.475653554 */, 16 },
2522 /* 2347 */ { MAD_F(0x079d6263) /* 0.475923908 */, 16 },
2523 /* 2348 */ { MAD_F(0x079e7dea) /* 0.476194300 */, 16 },
2524 /* 2349 */ { MAD_F(0x079f997b) /* 0.476464731 */, 16 },
2525 /* 2350 */ { MAD_F(0x07a0b516) /* 0.476735200 */, 16 },
2526 /* 2351 */ { MAD_F(0x07a1d0bc) /* 0.477005707 */, 16 },
2527
2528 /* 2352 */ { MAD_F(0x07a2ec6c) /* 0.477276252 */, 16 },
2529 /* 2353 */ { MAD_F(0x07a40827) /* 0.477546836 */, 16 },
2530 /* 2354 */ { MAD_F(0x07a523eb) /* 0.477817459 */, 16 },
2531 /* 2355 */ { MAD_F(0x07a63fba) /* 0.478088119 */, 16 },
2532 /* 2356 */ { MAD_F(0x07a75b93) /* 0.478358818 */, 16 },
2533 /* 2357 */ { MAD_F(0x07a87777) /* 0.478629555 */, 16 },
2534 /* 2358 */ { MAD_F(0x07a99364) /* 0.478900331 */, 16 },
2535 /* 2359 */ { MAD_F(0x07aaaf5c) /* 0.479171145 */, 16 },
2536 /* 2360 */ { MAD_F(0x07abcb5f) /* 0.479441997 */, 16 },
2537 /* 2361 */ { MAD_F(0x07ace76b) /* 0.479712887 */, 16 },
2538 /* 2362 */ { MAD_F(0x07ae0382) /* 0.479983816 */, 16 },
2539 /* 2363 */ { MAD_F(0x07af1fa3) /* 0.480254782 */, 16 },
2540 /* 2364 */ { MAD_F(0x07b03bcf) /* 0.480525787 */, 16 },
2541 /* 2365 */ { MAD_F(0x07b15804) /* 0.480796831 */, 16 },
2542 /* 2366 */ { MAD_F(0x07b27444) /* 0.481067912 */, 16 },
2543 /* 2367 */ { MAD_F(0x07b3908e) /* 0.481339032 */, 16 },
2544
2545 /* 2368 */ { MAD_F(0x07b4ace3) /* 0.481610189 */, 16 },
2546 /* 2369 */ { MAD_F(0x07b5c941) /* 0.481881385 */, 16 },
2547 /* 2370 */ { MAD_F(0x07b6e5aa) /* 0.482152620 */, 16 },
2548 /* 2371 */ { MAD_F(0x07b8021d) /* 0.482423892 */, 16 },
2549 /* 2372 */ { MAD_F(0x07b91e9b) /* 0.482695202 */, 16 },
2550 /* 2373 */ { MAD_F(0x07ba3b22) /* 0.482966551 */, 16 },
2551 /* 2374 */ { MAD_F(0x07bb57b4) /* 0.483237938 */, 16 },
2552 /* 2375 */ { MAD_F(0x07bc7450) /* 0.483509362 */, 16 },
2553 /* 2376 */ { MAD_F(0x07bd90f6) /* 0.483780825 */, 16 },
2554 /* 2377 */ { MAD_F(0x07beada7) /* 0.484052326 */, 16 },
2555 /* 2378 */ { MAD_F(0x07bfca61) /* 0.484323865 */, 16 },
2556 /* 2379 */ { MAD_F(0x07c0e726) /* 0.484595443 */, 16 },
2557 /* 2380 */ { MAD_F(0x07c203f5) /* 0.484867058 */, 16 },
2558 /* 2381 */ { MAD_F(0x07c320cf) /* 0.485138711 */, 16 },
2559 /* 2382 */ { MAD_F(0x07c43db2) /* 0.485410402 */, 16 },
2560 /* 2383 */ { MAD_F(0x07c55aa0) /* 0.485682131 */, 16 },
2561
2562 /* 2384 */ { MAD_F(0x07c67798) /* 0.485953899 */, 16 },
2563 /* 2385 */ { MAD_F(0x07c7949a) /* 0.486225704 */, 16 },
2564 /* 2386 */ { MAD_F(0x07c8b1a7) /* 0.486497547 */, 16 },
2565 /* 2387 */ { MAD_F(0x07c9cebd) /* 0.486769429 */, 16 },
2566 /* 2388 */ { MAD_F(0x07caebde) /* 0.487041348 */, 16 },
2567 /* 2389 */ { MAD_F(0x07cc0909) /* 0.487313305 */, 16 },
2568 /* 2390 */ { MAD_F(0x07cd263e) /* 0.487585300 */, 16 },
2569 /* 2391 */ { MAD_F(0x07ce437d) /* 0.487857333 */, 16 },
2570 /* 2392 */ { MAD_F(0x07cf60c7) /* 0.488129404 */, 16 },
2571 /* 2393 */ { MAD_F(0x07d07e1b) /* 0.488401513 */, 16 },
2572 /* 2394 */ { MAD_F(0x07d19b79) /* 0.488673660 */, 16 },
2573 /* 2395 */ { MAD_F(0x07d2b8e1) /* 0.488945845 */, 16 },
2574 /* 2396 */ { MAD_F(0x07d3d653) /* 0.489218067 */, 16 },
2575 /* 2397 */ { MAD_F(0x07d4f3cf) /* 0.489490328 */, 16 },
2576 /* 2398 */ { MAD_F(0x07d61156) /* 0.489762626 */, 16 },
2577 /* 2399 */ { MAD_F(0x07d72ee6) /* 0.490034962 */, 16 },
2578
2579 /* 2400 */ { MAD_F(0x07d84c81) /* 0.490307336 */, 16 },
2580 /* 2401 */ { MAD_F(0x07d96a26) /* 0.490579748 */, 16 },
2581 /* 2402 */ { MAD_F(0x07da87d5) /* 0.490852198 */, 16 },
2582 /* 2403 */ { MAD_F(0x07dba58f) /* 0.491124686 */, 16 },
2583 /* 2404 */ { MAD_F(0x07dcc352) /* 0.491397211 */, 16 },
2584 /* 2405 */ { MAD_F(0x07dde120) /* 0.491669774 */, 16 },
2585 /* 2406 */ { MAD_F(0x07defef7) /* 0.491942375 */, 16 },
2586 /* 2407 */ { MAD_F(0x07e01cd9) /* 0.492215014 */, 16 },
2587 /* 2408 */ { MAD_F(0x07e13ac5) /* 0.492487690 */, 16 },
2588 /* 2409 */ { MAD_F(0x07e258bc) /* 0.492760404 */, 16 },
2589 /* 2410 */ { MAD_F(0x07e376bc) /* 0.493033156 */, 16 },
2590 /* 2411 */ { MAD_F(0x07e494c6) /* 0.493305946 */, 16 },
2591 /* 2412 */ { MAD_F(0x07e5b2db) /* 0.493578773 */, 16 },
2592 /* 2413 */ { MAD_F(0x07e6d0f9) /* 0.493851638 */, 16 },
2593 /* 2414 */ { MAD_F(0x07e7ef22) /* 0.494124541 */, 16 },
2594 /* 2415 */ { MAD_F(0x07e90d55) /* 0.494397481 */, 16 },
2595
2596 /* 2416 */ { MAD_F(0x07ea2b92) /* 0.494670459 */, 16 },
2597 /* 2417 */ { MAD_F(0x07eb49d9) /* 0.494943475 */, 16 },
2598 /* 2418 */ { MAD_F(0x07ec682a) /* 0.495216529 */, 16 },
2599 /* 2419 */ { MAD_F(0x07ed8686) /* 0.495489620 */, 16 },
2600 /* 2420 */ { MAD_F(0x07eea4eb) /* 0.495762748 */, 16 },
2601 /* 2421 */ { MAD_F(0x07efc35b) /* 0.496035915 */, 16 },
2602 /* 2422 */ { MAD_F(0x07f0e1d4) /* 0.496309119 */, 16 },
2603 /* 2423 */ { MAD_F(0x07f20058) /* 0.496582360 */, 16 },
2604 /* 2424 */ { MAD_F(0x07f31ee6) /* 0.496855639 */, 16 },
2605 /* 2425 */ { MAD_F(0x07f43d7e) /* 0.497128956 */, 16 },
2606 /* 2426 */ { MAD_F(0x07f55c20) /* 0.497402310 */, 16 },
2607 /* 2427 */ { MAD_F(0x07f67acc) /* 0.497675702 */, 16 },
2608 /* 2428 */ { MAD_F(0x07f79982) /* 0.497949132 */, 16 },
2609 /* 2429 */ { MAD_F(0x07f8b842) /* 0.498222598 */, 16 },
2610 /* 2430 */ { MAD_F(0x07f9d70c) /* 0.498496103 */, 16 },
2611 /* 2431 */ { MAD_F(0x07faf5e1) /* 0.498769645 */, 16 },
2612
2613 /* 2432 */ { MAD_F(0x07fc14bf) /* 0.499043224 */, 16 },
2614 /* 2433 */ { MAD_F(0x07fd33a8) /* 0.499316841 */, 16 },
2615 /* 2434 */ { MAD_F(0x07fe529a) /* 0.499590496 */, 16 },
2616 /* 2435 */ { MAD_F(0x07ff7197) /* 0.499864188 */, 16 },
2617 /* 2436 */ { MAD_F(0x0400484f) /* 0.250068959 */, 17 },
2618 /* 2437 */ { MAD_F(0x0400d7d7) /* 0.250205842 */, 17 },
2619 /* 2438 */ { MAD_F(0x04016764) /* 0.250342744 */, 17 },
2620 /* 2439 */ { MAD_F(0x0401f6f7) /* 0.250479665 */, 17 },
2621 /* 2440 */ { MAD_F(0x0402868e) /* 0.250616605 */, 17 },
2622 /* 2441 */ { MAD_F(0x0403162b) /* 0.250753563 */, 17 },
2623 /* 2442 */ { MAD_F(0x0403a5cc) /* 0.250890540 */, 17 },
2624 /* 2443 */ { MAD_F(0x04043573) /* 0.251027536 */, 17 },
2625 /* 2444 */ { MAD_F(0x0404c51e) /* 0.251164550 */, 17 },
2626 /* 2445 */ { MAD_F(0x040554cf) /* 0.251301583 */, 17 },
2627 /* 2446 */ { MAD_F(0x0405e484) /* 0.251438635 */, 17 },
2628 /* 2447 */ { MAD_F(0x0406743f) /* 0.251575706 */, 17 },
2629
2630 /* 2448 */ { MAD_F(0x040703ff) /* 0.251712795 */, 17 },
2631 /* 2449 */ { MAD_F(0x040793c3) /* 0.251849903 */, 17 },
2632 /* 2450 */ { MAD_F(0x0408238d) /* 0.251987029 */, 17 },
2633 /* 2451 */ { MAD_F(0x0408b35b) /* 0.252124174 */, 17 },
2634 /* 2452 */ { MAD_F(0x0409432f) /* 0.252261338 */, 17 },
2635 /* 2453 */ { MAD_F(0x0409d308) /* 0.252398520 */, 17 },
2636 /* 2454 */ { MAD_F(0x040a62e5) /* 0.252535721 */, 17 },
2637 /* 2455 */ { MAD_F(0x040af2c8) /* 0.252672941 */, 17 },
2638 /* 2456 */ { MAD_F(0x040b82b0) /* 0.252810180 */, 17 },
2639 /* 2457 */ { MAD_F(0x040c129c) /* 0.252947436 */, 17 },
2640 /* 2458 */ { MAD_F(0x040ca28e) /* 0.253084712 */, 17 },
2641 /* 2459 */ { MAD_F(0x040d3284) /* 0.253222006 */, 17 },
2642 /* 2460 */ { MAD_F(0x040dc280) /* 0.253359319 */, 17 },
2643 /* 2461 */ { MAD_F(0x040e5281) /* 0.253496651 */, 17 },
2644 /* 2462 */ { MAD_F(0x040ee286) /* 0.253634001 */, 17 },
2645 /* 2463 */ { MAD_F(0x040f7291) /* 0.253771369 */, 17 },
2646
2647 /* 2464 */ { MAD_F(0x041002a1) /* 0.253908756 */, 17 },
2648 /* 2465 */ { MAD_F(0x041092b5) /* 0.254046162 */, 17 },
2649 /* 2466 */ { MAD_F(0x041122cf) /* 0.254183587 */, 17 },
2650 /* 2467 */ { MAD_F(0x0411b2ed) /* 0.254321030 */, 17 },
2651 /* 2468 */ { MAD_F(0x04124311) /* 0.254458491 */, 17 },
2652 /* 2469 */ { MAD_F(0x0412d339) /* 0.254595971 */, 17 },
2653 /* 2470 */ { MAD_F(0x04136367) /* 0.254733470 */, 17 },
2654 /* 2471 */ { MAD_F(0x0413f399) /* 0.254870987 */, 17 },
2655 /* 2472 */ { MAD_F(0x041483d1) /* 0.255008523 */, 17 },
2656 /* 2473 */ { MAD_F(0x0415140d) /* 0.255146077 */, 17 },
2657 /* 2474 */ { MAD_F(0x0415a44f) /* 0.255283650 */, 17 },
2658 /* 2475 */ { MAD_F(0x04163495) /* 0.255421241 */, 17 },
2659 /* 2476 */ { MAD_F(0x0416c4e1) /* 0.255558851 */, 17 },
2660 /* 2477 */ { MAD_F(0x04175531) /* 0.255696480 */, 17 },
2661 /* 2478 */ { MAD_F(0x0417e586) /* 0.255834127 */, 17 },
2662 /* 2479 */ { MAD_F(0x041875e1) /* 0.255971792 */, 17 },
2663
2664 /* 2480 */ { MAD_F(0x04190640) /* 0.256109476 */, 17 },
2665 /* 2481 */ { MAD_F(0x041996a4) /* 0.256247179 */, 17 },
2666 /* 2482 */ { MAD_F(0x041a270d) /* 0.256384900 */, 17 },
2667 /* 2483 */ { MAD_F(0x041ab77b) /* 0.256522639 */, 17 },
2668 /* 2484 */ { MAD_F(0x041b47ef) /* 0.256660397 */, 17 },
2669 /* 2485 */ { MAD_F(0x041bd867) /* 0.256798174 */, 17 },
2670 /* 2486 */ { MAD_F(0x041c68e4) /* 0.256935969 */, 17 },
2671 /* 2487 */ { MAD_F(0x041cf966) /* 0.257073782 */, 17 },
2672 /* 2488 */ { MAD_F(0x041d89ed) /* 0.257211614 */, 17 },
2673 /* 2489 */ { MAD_F(0x041e1a79) /* 0.257349465 */, 17 },
2674 /* 2490 */ { MAD_F(0x041eab0a) /* 0.257487334 */, 17 },
2675 /* 2491 */ { MAD_F(0x041f3b9f) /* 0.257625221 */, 17 },
2676 /* 2492 */ { MAD_F(0x041fcc3a) /* 0.257763127 */, 17 },
2677 /* 2493 */ { MAD_F(0x04205cda) /* 0.257901051 */, 17 },
2678 /* 2494 */ { MAD_F(0x0420ed7f) /* 0.258038994 */, 17 },
2679 /* 2495 */ { MAD_F(0x04217e28) /* 0.258176955 */, 17 },
2680
2681 /* 2496 */ { MAD_F(0x04220ed7) /* 0.258314934 */, 17 },
2682 /* 2497 */ { MAD_F(0x04229f8a) /* 0.258452932 */, 17 },
2683 /* 2498 */ { MAD_F(0x04233043) /* 0.258590948 */, 17 },
2684 /* 2499 */ { MAD_F(0x0423c100) /* 0.258728983 */, 17 },
2685 /* 2500 */ { MAD_F(0x042451c3) /* 0.258867036 */, 17 },
2686 /* 2501 */ { MAD_F(0x0424e28a) /* 0.259005108 */, 17 },
2687 /* 2502 */ { MAD_F(0x04257356) /* 0.259143198 */, 17 },
2688 /* 2503 */ { MAD_F(0x04260428) /* 0.259281307 */, 17 },
2689 /* 2504 */ { MAD_F(0x042694fe) /* 0.259419433 */, 17 },
2690 /* 2505 */ { MAD_F(0x042725d9) /* 0.259557579 */, 17 },
2691 /* 2506 */ { MAD_F(0x0427b6b9) /* 0.259695742 */, 17 },
2692 /* 2507 */ { MAD_F(0x0428479e) /* 0.259833924 */, 17 },
2693 /* 2508 */ { MAD_F(0x0428d888) /* 0.259972124 */, 17 },
2694 /* 2509 */ { MAD_F(0x04296976) /* 0.260110343 */, 17 },
2695 /* 2510 */ { MAD_F(0x0429fa6a) /* 0.260248580 */, 17 },
2696 /* 2511 */ { MAD_F(0x042a8b63) /* 0.260386836 */, 17 },
2697
2698 /* 2512 */ { MAD_F(0x042b1c60) /* 0.260525110 */, 17 },
2699 /* 2513 */ { MAD_F(0x042bad63) /* 0.260663402 */, 17 },
2700 /* 2514 */ { MAD_F(0x042c3e6a) /* 0.260801712 */, 17 },
2701 /* 2515 */ { MAD_F(0x042ccf77) /* 0.260940041 */, 17 },
2702 /* 2516 */ { MAD_F(0x042d6088) /* 0.261078388 */, 17 },
2703 /* 2517 */ { MAD_F(0x042df19e) /* 0.261216754 */, 17 },
2704 /* 2518 */ { MAD_F(0x042e82b9) /* 0.261355137 */, 17 },
2705 /* 2519 */ { MAD_F(0x042f13d9) /* 0.261493540 */, 17 },
2706 /* 2520 */ { MAD_F(0x042fa4fe) /* 0.261631960 */, 17 },
2707 /* 2521 */ { MAD_F(0x04303628) /* 0.261770399 */, 17 },
2708 /* 2522 */ { MAD_F(0x0430c757) /* 0.261908856 */, 17 },
2709 /* 2523 */ { MAD_F(0x0431588b) /* 0.262047331 */, 17 },
2710 /* 2524 */ { MAD_F(0x0431e9c3) /* 0.262185825 */, 17 },
2711 /* 2525 */ { MAD_F(0x04327b01) /* 0.262324337 */, 17 },
2712 /* 2526 */ { MAD_F(0x04330c43) /* 0.262462867 */, 17 },
2713 /* 2527 */ { MAD_F(0x04339d8a) /* 0.262601416 */, 17 },
2714
2715 /* 2528 */ { MAD_F(0x04342ed7) /* 0.262739982 */, 17 },
2716 /* 2529 */ { MAD_F(0x0434c028) /* 0.262878568 */, 17 },
2717 /* 2530 */ { MAD_F(0x0435517e) /* 0.263017171 */, 17 },
2718 /* 2531 */ { MAD_F(0x0435e2d9) /* 0.263155792 */, 17 },
2719 /* 2532 */ { MAD_F(0x04367439) /* 0.263294432 */, 17 },
2720 /* 2533 */ { MAD_F(0x0437059e) /* 0.263433090 */, 17 },
2721 /* 2534 */ { MAD_F(0x04379707) /* 0.263571767 */, 17 },
2722 /* 2535 */ { MAD_F(0x04382876) /* 0.263710461 */, 17 },
2723 /* 2536 */ { MAD_F(0x0438b9e9) /* 0.263849174 */, 17 },
2724 /* 2537 */ { MAD_F(0x04394b61) /* 0.263987905 */, 17 },
2725 /* 2538 */ { MAD_F(0x0439dcdf) /* 0.264126655 */, 17 },
2726 /* 2539 */ { MAD_F(0x043a6e61) /* 0.264265422 */, 17 },
2727 /* 2540 */ { MAD_F(0x043affe8) /* 0.264404208 */, 17 },
2728 /* 2541 */ { MAD_F(0x043b9174) /* 0.264543012 */, 17 },
2729 /* 2542 */ { MAD_F(0x043c2305) /* 0.264681834 */, 17 },
2730 /* 2543 */ { MAD_F(0x043cb49a) /* 0.264820674 */, 17 },
2731
2732 /* 2544 */ { MAD_F(0x043d4635) /* 0.264959533 */, 17 },
2733 /* 2545 */ { MAD_F(0x043dd7d4) /* 0.265098410 */, 17 },
2734 /* 2546 */ { MAD_F(0x043e6979) /* 0.265237305 */, 17 },
2735 /* 2547 */ { MAD_F(0x043efb22) /* 0.265376218 */, 17 },
2736 /* 2548 */ { MAD_F(0x043f8cd0) /* 0.265515149 */, 17 },
2737 /* 2549 */ { MAD_F(0x04401e83) /* 0.265654099 */, 17 },
2738 /* 2550 */ { MAD_F(0x0440b03b) /* 0.265793066 */, 17 },
2739 /* 2551 */ { MAD_F(0x044141f7) /* 0.265932052 */, 17 },
2740 /* 2552 */ { MAD_F(0x0441d3b9) /* 0.266071056 */, 17 },
2741 /* 2553 */ { MAD_F(0x04426580) /* 0.266210078 */, 17 },
2742 /* 2554 */ { MAD_F(0x0442f74b) /* 0.266349119 */, 17 },
2743 /* 2555 */ { MAD_F(0x0443891b) /* 0.266488177 */, 17 },
2744 /* 2556 */ { MAD_F(0x04441af0) /* 0.266627254 */, 17 },
2745 /* 2557 */ { MAD_F(0x0444acca) /* 0.266766349 */, 17 },
2746 /* 2558 */ { MAD_F(0x04453ea9) /* 0.266905462 */, 17 },
2747 /* 2559 */ { MAD_F(0x0445d08d) /* 0.267044593 */, 17 },
2748
2749 /* 2560 */ { MAD_F(0x04466275) /* 0.267183742 */, 17 },
2750 /* 2561 */ { MAD_F(0x0446f463) /* 0.267322909 */, 17 },
2751 /* 2562 */ { MAD_F(0x04478655) /* 0.267462094 */, 17 },
2752 /* 2563 */ { MAD_F(0x0448184c) /* 0.267601298 */, 17 },
2753 /* 2564 */ { MAD_F(0x0448aa48) /* 0.267740519 */, 17 },
2754 /* 2565 */ { MAD_F(0x04493c49) /* 0.267879759 */, 17 },
2755 /* 2566 */ { MAD_F(0x0449ce4f) /* 0.268019017 */, 17 },
2756 /* 2567 */ { MAD_F(0x044a6059) /* 0.268158293 */, 17 },
2757 /* 2568 */ { MAD_F(0x044af269) /* 0.268297587 */, 17 },
2758 /* 2569 */ { MAD_F(0x044b847d) /* 0.268436899 */, 17 },
2759 /* 2570 */ { MAD_F(0x044c1696) /* 0.268576229 */, 17 },
2760 /* 2571 */ { MAD_F(0x044ca8b4) /* 0.268715577 */, 17 },
2761 /* 2572 */ { MAD_F(0x044d3ad7) /* 0.268854943 */, 17 },
2762 /* 2573 */ { MAD_F(0x044dccff) /* 0.268994328 */, 17 },
2763 /* 2574 */ { MAD_F(0x044e5f2b) /* 0.269133730 */, 17 },
2764 /* 2575 */ { MAD_F(0x044ef15d) /* 0.269273150 */, 17 },
2765
2766 /* 2576 */ { MAD_F(0x044f8393) /* 0.269412589 */, 17 },
2767 /* 2577 */ { MAD_F(0x045015ce) /* 0.269552045 */, 17 },
2768 /* 2578 */ { MAD_F(0x0450a80e) /* 0.269691520 */, 17 },
2769 /* 2579 */ { MAD_F(0x04513a53) /* 0.269831013 */, 17 },
2770 /* 2580 */ { MAD_F(0x0451cc9c) /* 0.269970523 */, 17 },
2771 /* 2581 */ { MAD_F(0x04525eeb) /* 0.270110052 */, 17 },
2772 /* 2582 */ { MAD_F(0x0452f13e) /* 0.270249599 */, 17 },
2773 /* 2583 */ { MAD_F(0x04538396) /* 0.270389163 */, 17 },
2774 /* 2584 */ { MAD_F(0x045415f3) /* 0.270528746 */, 17 },
2775 /* 2585 */ { MAD_F(0x0454a855) /* 0.270668347 */, 17 },
2776 /* 2586 */ { MAD_F(0x04553abb) /* 0.270807965 */, 17 },
2777 /* 2587 */ { MAD_F(0x0455cd27) /* 0.270947602 */, 17 },
2778 /* 2588 */ { MAD_F(0x04565f97) /* 0.271087257 */, 17 },
2779 /* 2589 */ { MAD_F(0x0456f20c) /* 0.271226930 */, 17 },
2780 /* 2590 */ { MAD_F(0x04578486) /* 0.271366620 */, 17 },
2781 /* 2591 */ { MAD_F(0x04581705) /* 0.271506329 */, 17 },
2782
2783 /* 2592 */ { MAD_F(0x0458a989) /* 0.271646056 */, 17 },
2784 /* 2593 */ { MAD_F(0x04593c11) /* 0.271785800 */, 17 },
2785 /* 2594 */ { MAD_F(0x0459ce9e) /* 0.271925563 */, 17 },
2786 /* 2595 */ { MAD_F(0x045a6130) /* 0.272065343 */, 17 },
2787 /* 2596 */ { MAD_F(0x045af3c7) /* 0.272205142 */, 17 },
2788 /* 2597 */ { MAD_F(0x045b8663) /* 0.272344958 */, 17 },
2789 /* 2598 */ { MAD_F(0x045c1903) /* 0.272484793 */, 17 },
2790 /* 2599 */ { MAD_F(0x045caba9) /* 0.272624645 */, 17 },
2791 /* 2600 */ { MAD_F(0x045d3e53) /* 0.272764515 */, 17 },
2792 /* 2601 */ { MAD_F(0x045dd102) /* 0.272904403 */, 17 },
2793 /* 2602 */ { MAD_F(0x045e63b6) /* 0.273044310 */, 17 },
2794 /* 2603 */ { MAD_F(0x045ef66e) /* 0.273184234 */, 17 },
2795 /* 2604 */ { MAD_F(0x045f892b) /* 0.273324176 */, 17 },
2796 /* 2605 */ { MAD_F(0x04601bee) /* 0.273464136 */, 17 },
2797 /* 2606 */ { MAD_F(0x0460aeb5) /* 0.273604113 */, 17 },
2798 /* 2607 */ { MAD_F(0x04614180) /* 0.273744109 */, 17 },
2799
2800 /* 2608 */ { MAD_F(0x0461d451) /* 0.273884123 */, 17 },
2801 /* 2609 */ { MAD_F(0x04626727) /* 0.274024154 */, 17 },
2802 /* 2610 */ { MAD_F(0x0462fa01) /* 0.274164204 */, 17 },
2803 /* 2611 */ { MAD_F(0x04638ce0) /* 0.274304271 */, 17 },
2804 /* 2612 */ { MAD_F(0x04641fc4) /* 0.274444356 */, 17 },
2805 /* 2613 */ { MAD_F(0x0464b2ac) /* 0.274584459 */, 17 },
2806 /* 2614 */ { MAD_F(0x0465459a) /* 0.274724580 */, 17 },
2807 /* 2615 */ { MAD_F(0x0465d88c) /* 0.274864719 */, 17 },
2808 /* 2616 */ { MAD_F(0x04666b83) /* 0.275004875 */, 17 },
2809 /* 2617 */ { MAD_F(0x0466fe7f) /* 0.275145050 */, 17 },
2810 /* 2618 */ { MAD_F(0x0467917f) /* 0.275285242 */, 17 },
2811 /* 2619 */ { MAD_F(0x04682485) /* 0.275425452 */, 17 },
2812 /* 2620 */ { MAD_F(0x0468b78f) /* 0.275565681 */, 17 },
2813 /* 2621 */ { MAD_F(0x04694a9e) /* 0.275705926 */, 17 },
2814 /* 2622 */ { MAD_F(0x0469ddb2) /* 0.275846190 */, 17 },
2815 /* 2623 */ { MAD_F(0x046a70ca) /* 0.275986472 */, 17 },
2816
2817 /* 2624 */ { MAD_F(0x046b03e7) /* 0.276126771 */, 17 },
2818 /* 2625 */ { MAD_F(0x046b970a) /* 0.276267088 */, 17 },
2819 /* 2626 */ { MAD_F(0x046c2a31) /* 0.276407423 */, 17 },
2820 /* 2627 */ { MAD_F(0x046cbd5c) /* 0.276547776 */, 17 },
2821 /* 2628 */ { MAD_F(0x046d508d) /* 0.276688147 */, 17 },
2822 /* 2629 */ { MAD_F(0x046de3c2) /* 0.276828535 */, 17 },
2823 /* 2630 */ { MAD_F(0x046e76fc) /* 0.276968942 */, 17 },
2824 /* 2631 */ { MAD_F(0x046f0a3b) /* 0.277109366 */, 17 },
2825 /* 2632 */ { MAD_F(0x046f9d7e) /* 0.277249808 */, 17 },
2826 /* 2633 */ { MAD_F(0x047030c7) /* 0.277390267 */, 17 },
2827 /* 2634 */ { MAD_F(0x0470c414) /* 0.277530745 */, 17 },
2828 /* 2635 */ { MAD_F(0x04715766) /* 0.277671240 */, 17 },
2829 /* 2636 */ { MAD_F(0x0471eabc) /* 0.277811753 */, 17 },
2830 /* 2637 */ { MAD_F(0x04727e18) /* 0.277952284 */, 17 },
2831 /* 2638 */ { MAD_F(0x04731178) /* 0.278092832 */, 17 },
2832 /* 2639 */ { MAD_F(0x0473a4dd) /* 0.278233399 */, 17 },
2833
2834 /* 2640 */ { MAD_F(0x04743847) /* 0.278373983 */, 17 },
2835 /* 2641 */ { MAD_F(0x0474cbb5) /* 0.278514584 */, 17 },
2836 /* 2642 */ { MAD_F(0x04755f29) /* 0.278655204 */, 17 },
2837 /* 2643 */ { MAD_F(0x0475f2a1) /* 0.278795841 */, 17 },
2838 /* 2644 */ { MAD_F(0x0476861d) /* 0.278936496 */, 17 },
2839 /* 2645 */ { MAD_F(0x0477199f) /* 0.279077169 */, 17 },
2840 /* 2646 */ { MAD_F(0x0477ad25) /* 0.279217860 */, 17 },
2841 /* 2647 */ { MAD_F(0x047840b0) /* 0.279358568 */, 17 },
2842 /* 2648 */ { MAD_F(0x0478d440) /* 0.279499294 */, 17 },
2843 /* 2649 */ { MAD_F(0x047967d5) /* 0.279640037 */, 17 },
2844 /* 2650 */ { MAD_F(0x0479fb6e) /* 0.279780799 */, 17 },
2845 /* 2651 */ { MAD_F(0x047a8f0c) /* 0.279921578 */, 17 },
2846 /* 2652 */ { MAD_F(0x047b22af) /* 0.280062375 */, 17 },
2847 /* 2653 */ { MAD_F(0x047bb657) /* 0.280203189 */, 17 },
2848 /* 2654 */ { MAD_F(0x047c4a03) /* 0.280344021 */, 17 },
2849 /* 2655 */ { MAD_F(0x047cddb4) /* 0.280484871 */, 17 },
2850
2851 /* 2656 */ { MAD_F(0x047d716a) /* 0.280625739 */, 17 },
2852 /* 2657 */ { MAD_F(0x047e0524) /* 0.280766624 */, 17 },
2853 /* 2658 */ { MAD_F(0x047e98e4) /* 0.280907527 */, 17 },
2854 /* 2659 */ { MAD_F(0x047f2ca8) /* 0.281048447 */, 17 },
2855 /* 2660 */ { MAD_F(0x047fc071) /* 0.281189385 */, 17 },
2856 /* 2661 */ { MAD_F(0x0480543e) /* 0.281330341 */, 17 },
2857 /* 2662 */ { MAD_F(0x0480e811) /* 0.281471315 */, 17 },
2858 /* 2663 */ { MAD_F(0x04817be8) /* 0.281612306 */, 17 },
2859 /* 2664 */ { MAD_F(0x04820fc3) /* 0.281753315 */, 17 },
2860 /* 2665 */ { MAD_F(0x0482a3a4) /* 0.281894341 */, 17 },
2861 /* 2666 */ { MAD_F(0x04833789) /* 0.282035386 */, 17 },
2862 /* 2667 */ { MAD_F(0x0483cb73) /* 0.282176447 */, 17 },
2863 /* 2668 */ { MAD_F(0x04845f62) /* 0.282317527 */, 17 },
2864 /* 2669 */ { MAD_F(0x0484f355) /* 0.282458624 */, 17 },
2865 /* 2670 */ { MAD_F(0x0485874d) /* 0.282599738 */, 17 },
2866 /* 2671 */ { MAD_F(0x04861b4a) /* 0.282740871 */, 17 },
2867
2868 /* 2672 */ { MAD_F(0x0486af4c) /* 0.282882021 */, 17 },
2869 /* 2673 */ { MAD_F(0x04874352) /* 0.283023188 */, 17 },
2870 /* 2674 */ { MAD_F(0x0487d75d) /* 0.283164373 */, 17 },
2871 /* 2675 */ { MAD_F(0x04886b6d) /* 0.283305576 */, 17 },
2872 /* 2676 */ { MAD_F(0x0488ff82) /* 0.283446796 */, 17 },
2873 /* 2677 */ { MAD_F(0x0489939b) /* 0.283588034 */, 17 },
2874 /* 2678 */ { MAD_F(0x048a27b9) /* 0.283729290 */, 17 },
2875 /* 2679 */ { MAD_F(0x048abbdc) /* 0.283870563 */, 17 },
2876 /* 2680 */ { MAD_F(0x048b5003) /* 0.284011853 */, 17 },
2877 /* 2681 */ { MAD_F(0x048be42f) /* 0.284153161 */, 17 },
2878 /* 2682 */ { MAD_F(0x048c7860) /* 0.284294487 */, 17 },
2879 /* 2683 */ { MAD_F(0x048d0c96) /* 0.284435831 */, 17 },
2880 /* 2684 */ { MAD_F(0x048da0d0) /* 0.284577192 */, 17 },
2881 /* 2685 */ { MAD_F(0x048e350f) /* 0.284718570 */, 17 },
2882 /* 2686 */ { MAD_F(0x048ec953) /* 0.284859966 */, 17 },
2883 /* 2687 */ { MAD_F(0x048f5d9b) /* 0.285001380 */, 17 },
2884
2885 /* 2688 */ { MAD_F(0x048ff1e8) /* 0.285142811 */, 17 },
2886 /* 2689 */ { MAD_F(0x0490863a) /* 0.285284259 */, 17 },
2887 /* 2690 */ { MAD_F(0x04911a91) /* 0.285425726 */, 17 },
2888 /* 2691 */ { MAD_F(0x0491aeec) /* 0.285567209 */, 17 },
2889 /* 2692 */ { MAD_F(0x0492434c) /* 0.285708711 */, 17 },
2890 /* 2693 */ { MAD_F(0x0492d7b0) /* 0.285850229 */, 17 },
2891 /* 2694 */ { MAD_F(0x04936c1a) /* 0.285991766 */, 17 },
2892 /* 2695 */ { MAD_F(0x04940088) /* 0.286133319 */, 17 },
2893 /* 2696 */ { MAD_F(0x049494fb) /* 0.286274891 */, 17 },
2894 /* 2697 */ { MAD_F(0x04952972) /* 0.286416480 */, 17 },
2895 /* 2698 */ { MAD_F(0x0495bdee) /* 0.286558086 */, 17 },
2896 /* 2699 */ { MAD_F(0x0496526f) /* 0.286699710 */, 17 },
2897 /* 2700 */ { MAD_F(0x0496e6f5) /* 0.286841351 */, 17 },
2898 /* 2701 */ { MAD_F(0x04977b7f) /* 0.286983010 */, 17 },
2899 /* 2702 */ { MAD_F(0x0498100e) /* 0.287124686 */, 17 },
2900 /* 2703 */ { MAD_F(0x0498a4a1) /* 0.287266380 */, 17 },
2901
2902 /* 2704 */ { MAD_F(0x0499393a) /* 0.287408091 */, 17 },
2903 /* 2705 */ { MAD_F(0x0499cdd7) /* 0.287549820 */, 17 },
2904 /* 2706 */ { MAD_F(0x049a6278) /* 0.287691566 */, 17 },
2905 /* 2707 */ { MAD_F(0x049af71f) /* 0.287833330 */, 17 },
2906 /* 2708 */ { MAD_F(0x049b8bca) /* 0.287975111 */, 17 },
2907 /* 2709 */ { MAD_F(0x049c207a) /* 0.288116909 */, 17 },
2908 /* 2710 */ { MAD_F(0x049cb52e) /* 0.288258725 */, 17 },
2909 /* 2711 */ { MAD_F(0x049d49e7) /* 0.288400559 */, 17 },
2910 /* 2712 */ { MAD_F(0x049ddea5) /* 0.288542409 */, 17 },
2911 /* 2713 */ { MAD_F(0x049e7367) /* 0.288684278 */, 17 },
2912 /* 2714 */ { MAD_F(0x049f082f) /* 0.288826163 */, 17 },
2913 /* 2715 */ { MAD_F(0x049f9cfa) /* 0.288968067 */, 17 },
2914 /* 2716 */ { MAD_F(0x04a031cb) /* 0.289109987 */, 17 },
2915 /* 2717 */ { MAD_F(0x04a0c6a0) /* 0.289251925 */, 17 },
2916 /* 2718 */ { MAD_F(0x04a15b7a) /* 0.289393881 */, 17 },
2917 /* 2719 */ { MAD_F(0x04a1f059) /* 0.289535854 */, 17 },
2918
2919 /* 2720 */ { MAD_F(0x04a2853c) /* 0.289677844 */, 17 },
2920 /* 2721 */ { MAD_F(0x04a31a24) /* 0.289819851 */, 17 },
2921 /* 2722 */ { MAD_F(0x04a3af10) /* 0.289961876 */, 17 },
2922 /* 2723 */ { MAD_F(0x04a44401) /* 0.290103919 */, 17 },
2923 /* 2724 */ { MAD_F(0x04a4d8f7) /* 0.290245979 */, 17 },
2924 /* 2725 */ { MAD_F(0x04a56df2) /* 0.290388056 */, 17 },
2925 /* 2726 */ { MAD_F(0x04a602f1) /* 0.290530150 */, 17 },
2926 /* 2727 */ { MAD_F(0x04a697f5) /* 0.290672262 */, 17 },
2927 /* 2728 */ { MAD_F(0x04a72cfe) /* 0.290814392 */, 17 },
2928 /* 2729 */ { MAD_F(0x04a7c20b) /* 0.290956538 */, 17 },
2929 /* 2730 */ { MAD_F(0x04a8571d) /* 0.291098703 */, 17 },
2930 /* 2731 */ { MAD_F(0x04a8ec33) /* 0.291240884 */, 17 },
2931 /* 2732 */ { MAD_F(0x04a9814e) /* 0.291383083 */, 17 },
2932 /* 2733 */ { MAD_F(0x04aa166e) /* 0.291525299 */, 17 },
2933 /* 2734 */ { MAD_F(0x04aaab93) /* 0.291667532 */, 17 },
2934 /* 2735 */ { MAD_F(0x04ab40bc) /* 0.291809783 */, 17 },
2935
2936 /* 2736 */ { MAD_F(0x04abd5ea) /* 0.291952051 */, 17 },
2937 /* 2737 */ { MAD_F(0x04ac6b1c) /* 0.292094337 */, 17 },
2938 /* 2738 */ { MAD_F(0x04ad0053) /* 0.292236640 */, 17 },
2939 /* 2739 */ { MAD_F(0x04ad958f) /* 0.292378960 */, 17 },
2940 /* 2740 */ { MAD_F(0x04ae2ad0) /* 0.292521297 */, 17 },
2941 /* 2741 */ { MAD_F(0x04aec015) /* 0.292663652 */, 17 },
2942 /* 2742 */ { MAD_F(0x04af555e) /* 0.292806024 */, 17 },
2943 /* 2743 */ { MAD_F(0x04afeaad) /* 0.292948414 */, 17 },
2944 /* 2744 */ { MAD_F(0x04b08000) /* 0.293090820 */, 17 },
2945 /* 2745 */ { MAD_F(0x04b11557) /* 0.293233244 */, 17 },
2946 /* 2746 */ { MAD_F(0x04b1aab4) /* 0.293375686 */, 17 },
2947 /* 2747 */ { MAD_F(0x04b24015) /* 0.293518144 */, 17 },
2948 /* 2748 */ { MAD_F(0x04b2d57a) /* 0.293660620 */, 17 },
2949 /* 2749 */ { MAD_F(0x04b36ae4) /* 0.293803113 */, 17 },
2950 /* 2750 */ { MAD_F(0x04b40053) /* 0.293945624 */, 17 },
2951 /* 2751 */ { MAD_F(0x04b495c7) /* 0.294088151 */, 17 },
2952
2953 /* 2752 */ { MAD_F(0x04b52b3f) /* 0.294230696 */, 17 },
2954 /* 2753 */ { MAD_F(0x04b5c0bc) /* 0.294373259 */, 17 },
2955 /* 2754 */ { MAD_F(0x04b6563d) /* 0.294515838 */, 17 },
2956 /* 2755 */ { MAD_F(0x04b6ebc3) /* 0.294658435 */, 17 },
2957 /* 2756 */ { MAD_F(0x04b7814e) /* 0.294801049 */, 17 },
2958 /* 2757 */ { MAD_F(0x04b816dd) /* 0.294943680 */, 17 },
2959 /* 2758 */ { MAD_F(0x04b8ac71) /* 0.295086329 */, 17 },
2960 /* 2759 */ { MAD_F(0x04b9420a) /* 0.295228995 */, 17 },
2961 /* 2760 */ { MAD_F(0x04b9d7a7) /* 0.295371678 */, 17 },
2962 /* 2761 */ { MAD_F(0x04ba6d49) /* 0.295514378 */, 17 },
2963 /* 2762 */ { MAD_F(0x04bb02ef) /* 0.295657095 */, 17 },
2964 /* 2763 */ { MAD_F(0x04bb989a) /* 0.295799830 */, 17 },
2965 /* 2764 */ { MAD_F(0x04bc2e4a) /* 0.295942582 */, 17 },
2966 /* 2765 */ { MAD_F(0x04bcc3fe) /* 0.296085351 */, 17 },
2967 /* 2766 */ { MAD_F(0x04bd59b7) /* 0.296228138 */, 17 },
2968 /* 2767 */ { MAD_F(0x04bdef74) /* 0.296370941 */, 17 },
2969
2970 /* 2768 */ { MAD_F(0x04be8537) /* 0.296513762 */, 17 },
2971 /* 2769 */ { MAD_F(0x04bf1afd) /* 0.296656600 */, 17 },
2972 /* 2770 */ { MAD_F(0x04bfb0c9) /* 0.296799455 */, 17 },
2973 /* 2771 */ { MAD_F(0x04c04699) /* 0.296942327 */, 17 },
2974 /* 2772 */ { MAD_F(0x04c0dc6d) /* 0.297085217 */, 17 },
2975 /* 2773 */ { MAD_F(0x04c17247) /* 0.297228124 */, 17 },
2976 /* 2774 */ { MAD_F(0x04c20824) /* 0.297371048 */, 17 },
2977 /* 2775 */ { MAD_F(0x04c29e07) /* 0.297513989 */, 17 },
2978 /* 2776 */ { MAD_F(0x04c333ee) /* 0.297656947 */, 17 },
2979 /* 2777 */ { MAD_F(0x04c3c9da) /* 0.297799922 */, 17 },
2980 /* 2778 */ { MAD_F(0x04c45fca) /* 0.297942915 */, 17 },
2981 /* 2779 */ { MAD_F(0x04c4f5bf) /* 0.298085925 */, 17 },
2982 /* 2780 */ { MAD_F(0x04c58bb8) /* 0.298228951 */, 17 },
2983 /* 2781 */ { MAD_F(0x04c621b6) /* 0.298371996 */, 17 },
2984 /* 2782 */ { MAD_F(0x04c6b7b9) /* 0.298515057 */, 17 },
2985 /* 2783 */ { MAD_F(0x04c74dc0) /* 0.298658135 */, 17 },
2986
2987 /* 2784 */ { MAD_F(0x04c7e3cc) /* 0.298801231 */, 17 },
2988 /* 2785 */ { MAD_F(0x04c879dd) /* 0.298944343 */, 17 },
2989 /* 2786 */ { MAD_F(0x04c90ff2) /* 0.299087473 */, 17 },
2990 /* 2787 */ { MAD_F(0x04c9a60c) /* 0.299230620 */, 17 },
2991 /* 2788 */ { MAD_F(0x04ca3c2a) /* 0.299373784 */, 17 },
2992 /* 2789 */ { MAD_F(0x04cad24d) /* 0.299516965 */, 17 },
2993 /* 2790 */ { MAD_F(0x04cb6874) /* 0.299660163 */, 17 },
2994 /* 2791 */ { MAD_F(0x04cbfea0) /* 0.299803378 */, 17 },
2995 /* 2792 */ { MAD_F(0x04cc94d1) /* 0.299946611 */, 17 },
2996 /* 2793 */ { MAD_F(0x04cd2b06) /* 0.300089860 */, 17 },
2997 /* 2794 */ { MAD_F(0x04cdc140) /* 0.300233127 */, 17 },
2998 /* 2795 */ { MAD_F(0x04ce577f) /* 0.300376411 */, 17 },
2999 /* 2796 */ { MAD_F(0x04ceedc2) /* 0.300519711 */, 17 },
3000 /* 2797 */ { MAD_F(0x04cf8409) /* 0.300663029 */, 17 },
3001 /* 2798 */ { MAD_F(0x04d01a55) /* 0.300806364 */, 17 },
3002 /* 2799 */ { MAD_F(0x04d0b0a6) /* 0.300949716 */, 17 },
3003
3004 /* 2800 */ { MAD_F(0x04d146fb) /* 0.301093085 */, 17 },
3005 /* 2801 */ { MAD_F(0x04d1dd55) /* 0.301236472 */, 17 },
3006 /* 2802 */ { MAD_F(0x04d273b4) /* 0.301379875 */, 17 },
3007 /* 2803 */ { MAD_F(0x04d30a17) /* 0.301523295 */, 17 },
3008 /* 2804 */ { MAD_F(0x04d3a07f) /* 0.301666733 */, 17 },
3009 /* 2805 */ { MAD_F(0x04d436eb) /* 0.301810187 */, 17 },
3010 /* 2806 */ { MAD_F(0x04d4cd5c) /* 0.301953659 */, 17 },
3011 /* 2807 */ { MAD_F(0x04d563d1) /* 0.302097147 */, 17 },
3012 /* 2808 */ { MAD_F(0x04d5fa4b) /* 0.302240653 */, 17 },
3013 /* 2809 */ { MAD_F(0x04d690ca) /* 0.302384175 */, 17 },
3014 /* 2810 */ { MAD_F(0x04d7274d) /* 0.302527715 */, 17 },
3015 /* 2811 */ { MAD_F(0x04d7bdd5) /* 0.302671271 */, 17 },
3016 /* 2812 */ { MAD_F(0x04d85461) /* 0.302814845 */, 17 },
3017 /* 2813 */ { MAD_F(0x04d8eaf2) /* 0.302958436 */, 17 },
3018 /* 2814 */ { MAD_F(0x04d98187) /* 0.303102044 */, 17 },
3019 /* 2815 */ { MAD_F(0x04da1821) /* 0.303245668 */, 17 },
3020
3021 /* 2816 */ { MAD_F(0x04daaec0) /* 0.303389310 */, 17 },
3022 /* 2817 */ { MAD_F(0x04db4563) /* 0.303532969 */, 17 },
3023 /* 2818 */ { MAD_F(0x04dbdc0a) /* 0.303676645 */, 17 },
3024 /* 2819 */ { MAD_F(0x04dc72b7) /* 0.303820337 */, 17 },
3025 /* 2820 */ { MAD_F(0x04dd0967) /* 0.303964047 */, 17 },
3026 /* 2821 */ { MAD_F(0x04dda01d) /* 0.304107774 */, 17 },
3027 /* 2822 */ { MAD_F(0x04de36d7) /* 0.304251517 */, 17 },
3028 /* 2823 */ { MAD_F(0x04decd95) /* 0.304395278 */, 17 },
3029 /* 2824 */ { MAD_F(0x04df6458) /* 0.304539056 */, 17 },
3030 /* 2825 */ { MAD_F(0x04dffb20) /* 0.304682850 */, 17 },
3031 /* 2826 */ { MAD_F(0x04e091ec) /* 0.304826662 */, 17 },
3032 /* 2827 */ { MAD_F(0x04e128bc) /* 0.304970491 */, 17 },
3033 /* 2828 */ { MAD_F(0x04e1bf92) /* 0.305114336 */, 17 },
3034 /* 2829 */ { MAD_F(0x04e2566b) /* 0.305258199 */, 17 },
3035 /* 2830 */ { MAD_F(0x04e2ed4a) /* 0.305402078 */, 17 },
3036 /* 2831 */ { MAD_F(0x04e3842d) /* 0.305545974 */, 17 },
3037
3038 /* 2832 */ { MAD_F(0x04e41b14) /* 0.305689888 */, 17 },
3039 /* 2833 */ { MAD_F(0x04e4b200) /* 0.305833818 */, 17 },
3040 /* 2834 */ { MAD_F(0x04e548f1) /* 0.305977765 */, 17 },
3041 /* 2835 */ { MAD_F(0x04e5dfe6) /* 0.306121729 */, 17 },
3042 /* 2836 */ { MAD_F(0x04e676df) /* 0.306265710 */, 17 },
3043 /* 2837 */ { MAD_F(0x04e70dde) /* 0.306409708 */, 17 },
3044 /* 2838 */ { MAD_F(0x04e7a4e0) /* 0.306553723 */, 17 },
3045 /* 2839 */ { MAD_F(0x04e83be7) /* 0.306697755 */, 17 },
3046 /* 2840 */ { MAD_F(0x04e8d2f3) /* 0.306841804 */, 17 },
3047 /* 2841 */ { MAD_F(0x04e96a04) /* 0.306985869 */, 17 },
3048 /* 2842 */ { MAD_F(0x04ea0118) /* 0.307129952 */, 17 },
3049 /* 2843 */ { MAD_F(0x04ea9832) /* 0.307274051 */, 17 },
3050 /* 2844 */ { MAD_F(0x04eb2f50) /* 0.307418168 */, 17 },
3051 /* 2845 */ { MAD_F(0x04ebc672) /* 0.307562301 */, 17 },
3052 /* 2846 */ { MAD_F(0x04ec5d99) /* 0.307706451 */, 17 },
3053 /* 2847 */ { MAD_F(0x04ecf4c5) /* 0.307850618 */, 17 },
3054
3055 /* 2848 */ { MAD_F(0x04ed8bf5) /* 0.307994802 */, 17 },
3056 /* 2849 */ { MAD_F(0x04ee2329) /* 0.308139003 */, 17 },
3057 /* 2850 */ { MAD_F(0x04eeba63) /* 0.308283220 */, 17 },
3058 /* 2851 */ { MAD_F(0x04ef51a0) /* 0.308427455 */, 17 },
3059 /* 2852 */ { MAD_F(0x04efe8e2) /* 0.308571706 */, 17 },
3060 /* 2853 */ { MAD_F(0x04f08029) /* 0.308715974 */, 17 },
3061 /* 2854 */ { MAD_F(0x04f11774) /* 0.308860260 */, 17 },
3062 /* 2855 */ { MAD_F(0x04f1aec4) /* 0.309004561 */, 17 },
3063 /* 2856 */ { MAD_F(0x04f24618) /* 0.309148880 */, 17 },
3064 /* 2857 */ { MAD_F(0x04f2dd71) /* 0.309293216 */, 17 },
3065 /* 2858 */ { MAD_F(0x04f374cf) /* 0.309437568 */, 17 },
3066 /* 2859 */ { MAD_F(0x04f40c30) /* 0.309581938 */, 17 },
3067 /* 2860 */ { MAD_F(0x04f4a397) /* 0.309726324 */, 17 },
3068 /* 2861 */ { MAD_F(0x04f53b02) /* 0.309870727 */, 17 },
3069 /* 2862 */ { MAD_F(0x04f5d271) /* 0.310015147 */, 17 },
3070 /* 2863 */ { MAD_F(0x04f669e5) /* 0.310159583 */, 17 },
3071
3072 /* 2864 */ { MAD_F(0x04f7015d) /* 0.310304037 */, 17 },
3073 /* 2865 */ { MAD_F(0x04f798da) /* 0.310448507 */, 17 },
3074 /* 2866 */ { MAD_F(0x04f8305c) /* 0.310592994 */, 17 },
3075 /* 2867 */ { MAD_F(0x04f8c7e2) /* 0.310737498 */, 17 },
3076 /* 2868 */ { MAD_F(0x04f95f6c) /* 0.310882018 */, 17 },
3077 /* 2869 */ { MAD_F(0x04f9f6fb) /* 0.311026556 */, 17 },
3078 /* 2870 */ { MAD_F(0x04fa8e8f) /* 0.311171110 */, 17 },
3079 /* 2871 */ { MAD_F(0x04fb2627) /* 0.311315681 */, 17 },
3080 /* 2872 */ { MAD_F(0x04fbbdc3) /* 0.311460269 */, 17 },
3081 /* 2873 */ { MAD_F(0x04fc5564) /* 0.311604874 */, 17 },
3082 /* 2874 */ { MAD_F(0x04fced0a) /* 0.311749495 */, 17 },
3083 /* 2875 */ { MAD_F(0x04fd84b4) /* 0.311894133 */, 17 },
3084 /* 2876 */ { MAD_F(0x04fe1c62) /* 0.312038788 */, 17 },
3085 /* 2877 */ { MAD_F(0x04feb415) /* 0.312183460 */, 17 },
3086 /* 2878 */ { MAD_F(0x04ff4bcd) /* 0.312328148 */, 17 },
3087 /* 2879 */ { MAD_F(0x04ffe389) /* 0.312472854 */, 17 },
3088
3089 /* 2880 */ { MAD_F(0x05007b49) /* 0.312617576 */, 17 },
3090 /* 2881 */ { MAD_F(0x0501130e) /* 0.312762314 */, 17 },
3091 /* 2882 */ { MAD_F(0x0501aad8) /* 0.312907070 */, 17 },
3092 /* 2883 */ { MAD_F(0x050242a6) /* 0.313051842 */, 17 },
3093 /* 2884 */ { MAD_F(0x0502da78) /* 0.313196631 */, 17 },
3094 /* 2885 */ { MAD_F(0x0503724f) /* 0.313341437 */, 17 },
3095 /* 2886 */ { MAD_F(0x05040a2b) /* 0.313486259 */, 17 },
3096 /* 2887 */ { MAD_F(0x0504a20b) /* 0.313631098 */, 17 },
3097 /* 2888 */ { MAD_F(0x050539ef) /* 0.313775954 */, 17 },
3098 /* 2889 */ { MAD_F(0x0505d1d8) /* 0.313920827 */, 17 },
3099 /* 2890 */ { MAD_F(0x050669c5) /* 0.314065716 */, 17 },
3100 /* 2891 */ { MAD_F(0x050701b7) /* 0.314210622 */, 17 },
3101 /* 2892 */ { MAD_F(0x050799ae) /* 0.314355545 */, 17 },
3102 /* 2893 */ { MAD_F(0x050831a9) /* 0.314500484 */, 17 },
3103 /* 2894 */ { MAD_F(0x0508c9a8) /* 0.314645440 */, 17 },
3104 /* 2895 */ { MAD_F(0x050961ac) /* 0.314790413 */, 17 },
3105
3106 /* 2896 */ { MAD_F(0x0509f9b4) /* 0.314935403 */, 17 },
3107 /* 2897 */ { MAD_F(0x050a91c1) /* 0.315080409 */, 17 },
3108 /* 2898 */ { MAD_F(0x050b29d2) /* 0.315225432 */, 17 },
3109 /* 2899 */ { MAD_F(0x050bc1e8) /* 0.315370472 */, 17 },
3110 /* 2900 */ { MAD_F(0x050c5a02) /* 0.315515528 */, 17 },
3111 /* 2901 */ { MAD_F(0x050cf221) /* 0.315660601 */, 17 },
3112 /* 2902 */ { MAD_F(0x050d8a44) /* 0.315805690 */, 17 },
3113 /* 2903 */ { MAD_F(0x050e226c) /* 0.315950797 */, 17 },
3114 /* 2904 */ { MAD_F(0x050eba98) /* 0.316095920 */, 17 },
3115 /* 2905 */ { MAD_F(0x050f52c9) /* 0.316241059 */, 17 },
3116 /* 2906 */ { MAD_F(0x050feafe) /* 0.316386216 */, 17 },
3117 /* 2907 */ { MAD_F(0x05108337) /* 0.316531388 */, 17 },
3118 /* 2908 */ { MAD_F(0x05111b75) /* 0.316676578 */, 17 },
3119 /* 2909 */ { MAD_F(0x0511b3b8) /* 0.316821784 */, 17 },
3120 /* 2910 */ { MAD_F(0x05124bff) /* 0.316967007 */, 17 },
3121 /* 2911 */ { MAD_F(0x0512e44a) /* 0.317112247 */, 17 },
3122
3123 /* 2912 */ { MAD_F(0x05137c9a) /* 0.317257503 */, 17 },
3124 /* 2913 */ { MAD_F(0x051414ee) /* 0.317402775 */, 17 },
3125 /* 2914 */ { MAD_F(0x0514ad47) /* 0.317548065 */, 17 },
3126 /* 2915 */ { MAD_F(0x051545a5) /* 0.317693371 */, 17 },
3127 /* 2916 */ { MAD_F(0x0515de06) /* 0.317838693 */, 17 },
3128 /* 2917 */ { MAD_F(0x0516766d) /* 0.317984033 */, 17 },
3129 /* 2918 */ { MAD_F(0x05170ed7) /* 0.318129388 */, 17 },
3130 /* 2919 */ { MAD_F(0x0517a746) /* 0.318274761 */, 17 },
3131 /* 2920 */ { MAD_F(0x05183fba) /* 0.318420150 */, 17 },
3132 /* 2921 */ { MAD_F(0x0518d832) /* 0.318565555 */, 17 },
3133 /* 2922 */ { MAD_F(0x051970ae) /* 0.318710978 */, 17 },
3134 /* 2923 */ { MAD_F(0x051a092f) /* 0.318856416 */, 17 },
3135 /* 2924 */ { MAD_F(0x051aa1b5) /* 0.319001872 */, 17 },
3136 /* 2925 */ { MAD_F(0x051b3a3f) /* 0.319147344 */, 17 },
3137 /* 2926 */ { MAD_F(0x051bd2cd) /* 0.319292832 */, 17 },
3138 /* 2927 */ { MAD_F(0x051c6b60) /* 0.319438338 */, 17 },
3139
3140 /* 2928 */ { MAD_F(0x051d03f7) /* 0.319583859 */, 17 },
3141 /* 2929 */ { MAD_F(0x051d9c92) /* 0.319729398 */, 17 },
3142 /* 2930 */ { MAD_F(0x051e3532) /* 0.319874952 */, 17 },
3143 /* 2931 */ { MAD_F(0x051ecdd7) /* 0.320020524 */, 17 },
3144 /* 2932 */ { MAD_F(0x051f6680) /* 0.320166112 */, 17 },
3145 /* 2933 */ { MAD_F(0x051fff2d) /* 0.320311716 */, 17 },
3146 /* 2934 */ { MAD_F(0x052097df) /* 0.320457337 */, 17 },
3147 /* 2935 */ { MAD_F(0x05213095) /* 0.320602975 */, 17 },
3148 /* 2936 */ { MAD_F(0x0521c950) /* 0.320748629 */, 17 },
3149 /* 2937 */ { MAD_F(0x0522620f) /* 0.320894300 */, 17 },
3150 /* 2938 */ { MAD_F(0x0522fad3) /* 0.321039987 */, 17 },
3151 /* 2939 */ { MAD_F(0x0523939b) /* 0.321185691 */, 17 },
3152 /* 2940 */ { MAD_F(0x05242c68) /* 0.321331411 */, 17 },
3153 /* 2941 */ { MAD_F(0x0524c538) /* 0.321477148 */, 17 },
3154 /* 2942 */ { MAD_F(0x05255e0e) /* 0.321622901 */, 17 },
3155 /* 2943 */ { MAD_F(0x0525f6e8) /* 0.321768671 */, 17 },
3156
3157 /* 2944 */ { MAD_F(0x05268fc6) /* 0.321914457 */, 17 },
3158 /* 2945 */ { MAD_F(0x052728a9) /* 0.322060260 */, 17 },
3159 /* 2946 */ { MAD_F(0x0527c190) /* 0.322206079 */, 17 },
3160 /* 2947 */ { MAD_F(0x05285a7b) /* 0.322351915 */, 17 },
3161 /* 2948 */ { MAD_F(0x0528f36b) /* 0.322497768 */, 17 },
3162 /* 2949 */ { MAD_F(0x05298c5f) /* 0.322643636 */, 17 },
3163 /* 2950 */ { MAD_F(0x052a2558) /* 0.322789522 */, 17 },
3164 /* 2951 */ { MAD_F(0x052abe55) /* 0.322935424 */, 17 },
3165 /* 2952 */ { MAD_F(0x052b5757) /* 0.323081342 */, 17 },
3166 /* 2953 */ { MAD_F(0x052bf05d) /* 0.323227277 */, 17 },
3167 /* 2954 */ { MAD_F(0x052c8968) /* 0.323373228 */, 17 },
3168 /* 2955 */ { MAD_F(0x052d2277) /* 0.323519196 */, 17 },
3169 /* 2956 */ { MAD_F(0x052dbb8a) /* 0.323665180 */, 17 },
3170 /* 2957 */ { MAD_F(0x052e54a2) /* 0.323811180 */, 17 },
3171 /* 2958 */ { MAD_F(0x052eedbe) /* 0.323957197 */, 17 },
3172 /* 2959 */ { MAD_F(0x052f86de) /* 0.324103231 */, 17 },
3173
3174 /* 2960 */ { MAD_F(0x05302003) /* 0.324249281 */, 17 },
3175 /* 2961 */ { MAD_F(0x0530b92d) /* 0.324395347 */, 17 },
3176 /* 2962 */ { MAD_F(0x0531525b) /* 0.324541430 */, 17 },
3177 /* 2963 */ { MAD_F(0x0531eb8d) /* 0.324687530 */, 17 },
3178 /* 2964 */ { MAD_F(0x053284c4) /* 0.324833646 */, 17 },
3179 /* 2965 */ { MAD_F(0x05331dff) /* 0.324979778 */, 17 },
3180 /* 2966 */ { MAD_F(0x0533b73e) /* 0.325125926 */, 17 },
3181 /* 2967 */ { MAD_F(0x05345082) /* 0.325272091 */, 17 },
3182 /* 2968 */ { MAD_F(0x0534e9ca) /* 0.325418273 */, 17 },
3183 /* 2969 */ { MAD_F(0x05358317) /* 0.325564471 */, 17 },
3184 /* 2970 */ { MAD_F(0x05361c68) /* 0.325710685 */, 17 },
3185 /* 2971 */ { MAD_F(0x0536b5be) /* 0.325856916 */, 17 },
3186 /* 2972 */ { MAD_F(0x05374f17) /* 0.326003163 */, 17 },
3187 /* 2973 */ { MAD_F(0x0537e876) /* 0.326149427 */, 17 },
3188 /* 2974 */ { MAD_F(0x053881d9) /* 0.326295707 */, 17 },
3189 /* 2975 */ { MAD_F(0x05391b40) /* 0.326442003 */, 17 },
3190
3191 /* 2976 */ { MAD_F(0x0539b4ab) /* 0.326588316 */, 17 },
3192 /* 2977 */ { MAD_F(0x053a4e1b) /* 0.326734645 */, 17 },
3193 /* 2978 */ { MAD_F(0x053ae78f) /* 0.326880990 */, 17 },
3194 /* 2979 */ { MAD_F(0x053b8108) /* 0.327027352 */, 17 },
3195 /* 2980 */ { MAD_F(0x053c1a85) /* 0.327173730 */, 17 },
3196 /* 2981 */ { MAD_F(0x053cb407) /* 0.327320125 */, 17 },
3197 /* 2982 */ { MAD_F(0x053d4d8d) /* 0.327466536 */, 17 },
3198 /* 2983 */ { MAD_F(0x053de717) /* 0.327612963 */, 17 },
3199 /* 2984 */ { MAD_F(0x053e80a6) /* 0.327759407 */, 17 },
3200 /* 2985 */ { MAD_F(0x053f1a39) /* 0.327905867 */, 17 },
3201 /* 2986 */ { MAD_F(0x053fb3d0) /* 0.328052344 */, 17 },
3202 /* 2987 */ { MAD_F(0x05404d6c) /* 0.328198837 */, 17 },
3203 /* 2988 */ { MAD_F(0x0540e70c) /* 0.328345346 */, 17 },
3204 /* 2989 */ { MAD_F(0x054180b1) /* 0.328491871 */, 17 },
3205 /* 2990 */ { MAD_F(0x05421a5a) /* 0.328638413 */, 17 },
3206 /* 2991 */ { MAD_F(0x0542b407) /* 0.328784971 */, 17 },
3207
3208 /* 2992 */ { MAD_F(0x05434db9) /* 0.328931546 */, 17 },
3209 /* 2993 */ { MAD_F(0x0543e76f) /* 0.329078137 */, 17 },
3210 /* 2994 */ { MAD_F(0x0544812a) /* 0.329224744 */, 17 },
3211 /* 2995 */ { MAD_F(0x05451ae9) /* 0.329371367 */, 17 },
3212 /* 2996 */ { MAD_F(0x0545b4ac) /* 0.329518007 */, 17 },
3213 /* 2997 */ { MAD_F(0x05464e74) /* 0.329664663 */, 17 },
3214 /* 2998 */ { MAD_F(0x0546e840) /* 0.329811336 */, 17 },
3215 /* 2999 */ { MAD_F(0x05478211) /* 0.329958024 */, 17 },
3216 /* 3000 */ { MAD_F(0x05481be5) /* 0.330104730 */, 17 },
3217 /* 3001 */ { MAD_F(0x0548b5bf) /* 0.330251451 */, 17 },
3218 /* 3002 */ { MAD_F(0x05494f9c) /* 0.330398189 */, 17 },
3219 /* 3003 */ { MAD_F(0x0549e97e) /* 0.330544943 */, 17 },
3220 /* 3004 */ { MAD_F(0x054a8364) /* 0.330691713 */, 17 },
3221 /* 3005 */ { MAD_F(0x054b1d4f) /* 0.330838499 */, 17 },
3222 /* 3006 */ { MAD_F(0x054bb73e) /* 0.330985302 */, 17 },
3223 /* 3007 */ { MAD_F(0x054c5132) /* 0.331132121 */, 17 },
3224
3225 /* 3008 */ { MAD_F(0x054ceb2a) /* 0.331278957 */, 17 },
3226 /* 3009 */ { MAD_F(0x054d8526) /* 0.331425808 */, 17 },
3227 /* 3010 */ { MAD_F(0x054e1f26) /* 0.331572676 */, 17 },
3228 /* 3011 */ { MAD_F(0x054eb92b) /* 0.331719560 */, 17 },
3229 /* 3012 */ { MAD_F(0x054f5334) /* 0.331866461 */, 17 },
3230 /* 3013 */ { MAD_F(0x054fed42) /* 0.332013377 */, 17 },
3231 /* 3014 */ { MAD_F(0x05508754) /* 0.332160310 */, 17 },
3232 /* 3015 */ { MAD_F(0x0551216b) /* 0.332307260 */, 17 },
3233 /* 3016 */ { MAD_F(0x0551bb85) /* 0.332454225 */, 17 },
3234 /* 3017 */ { MAD_F(0x055255a4) /* 0.332601207 */, 17 },
3235 /* 3018 */ { MAD_F(0x0552efc8) /* 0.332748205 */, 17 },
3236 /* 3019 */ { MAD_F(0x055389f0) /* 0.332895219 */, 17 },
3237 /* 3020 */ { MAD_F(0x0554241c) /* 0.333042249 */, 17 },
3238 /* 3021 */ { MAD_F(0x0554be4c) /* 0.333189296 */, 17 },
3239 /* 3022 */ { MAD_F(0x05555881) /* 0.333336359 */, 17 },
3240 /* 3023 */ { MAD_F(0x0555f2ba) /* 0.333483438 */, 17 },
3241
3242 /* 3024 */ { MAD_F(0x05568cf8) /* 0.333630533 */, 17 },
3243 /* 3025 */ { MAD_F(0x0557273a) /* 0.333777645 */, 17 },
3244 /* 3026 */ { MAD_F(0x0557c180) /* 0.333924772 */, 17 },
3245 /* 3027 */ { MAD_F(0x05585bcb) /* 0.334071916 */, 17 },
3246 /* 3028 */ { MAD_F(0x0558f61a) /* 0.334219076 */, 17 },
3247 /* 3029 */ { MAD_F(0x0559906d) /* 0.334366253 */, 17 },
3248 /* 3030 */ { MAD_F(0x055a2ac5) /* 0.334513445 */, 17 },
3249 /* 3031 */ { MAD_F(0x055ac521) /* 0.334660654 */, 17 },
3250 /* 3032 */ { MAD_F(0x055b5f81) /* 0.334807879 */, 17 },
3251 /* 3033 */ { MAD_F(0x055bf9e6) /* 0.334955120 */, 17 },
3252 /* 3034 */ { MAD_F(0x055c944f) /* 0.335102377 */, 17 },
3253 /* 3035 */ { MAD_F(0x055d2ebd) /* 0.335249651 */, 17 },
3254 /* 3036 */ { MAD_F(0x055dc92e) /* 0.335396941 */, 17 },
3255 /* 3037 */ { MAD_F(0x055e63a5) /* 0.335544246 */, 17 },
3256 /* 3038 */ { MAD_F(0x055efe1f) /* 0.335691568 */, 17 },
3257 /* 3039 */ { MAD_F(0x055f989e) /* 0.335838906 */, 17 },
3258
3259 /* 3040 */ { MAD_F(0x05603321) /* 0.335986261 */, 17 },
3260 /* 3041 */ { MAD_F(0x0560cda8) /* 0.336133631 */, 17 },
3261 /* 3042 */ { MAD_F(0x05616834) /* 0.336281018 */, 17 },
3262 /* 3043 */ { MAD_F(0x056202c4) /* 0.336428421 */, 17 },
3263 /* 3044 */ { MAD_F(0x05629d59) /* 0.336575840 */, 17 },
3264 /* 3045 */ { MAD_F(0x056337f2) /* 0.336723275 */, 17 },
3265 /* 3046 */ { MAD_F(0x0563d28f) /* 0.336870726 */, 17 },
3266 /* 3047 */ { MAD_F(0x05646d30) /* 0.337018193 */, 17 },
3267 /* 3048 */ { MAD_F(0x056507d6) /* 0.337165677 */, 17 },
3268 /* 3049 */ { MAD_F(0x0565a280) /* 0.337313176 */, 17 },
3269 /* 3050 */ { MAD_F(0x05663d2f) /* 0.337460692 */, 17 },
3270 /* 3051 */ { MAD_F(0x0566d7e1) /* 0.337608224 */, 17 },
3271 /* 3052 */ { MAD_F(0x05677298) /* 0.337755772 */, 17 },
3272 /* 3053 */ { MAD_F(0x05680d54) /* 0.337903336 */, 17 },
3273 /* 3054 */ { MAD_F(0x0568a814) /* 0.338050916 */, 17 },
3274 /* 3055 */ { MAD_F(0x056942d8) /* 0.338198513 */, 17 },
3275
3276 /* 3056 */ { MAD_F(0x0569dda0) /* 0.338346125 */, 17 },
3277 /* 3057 */ { MAD_F(0x056a786d) /* 0.338493753 */, 17 },
3278 /* 3058 */ { MAD_F(0x056b133e) /* 0.338641398 */, 17 },
3279 /* 3059 */ { MAD_F(0x056bae13) /* 0.338789059 */, 17 },
3280 /* 3060 */ { MAD_F(0x056c48ed) /* 0.338936736 */, 17 },
3281 /* 3061 */ { MAD_F(0x056ce3cb) /* 0.339084429 */, 17 },
3282 /* 3062 */ { MAD_F(0x056d7ead) /* 0.339232138 */, 17 },
3283 /* 3063 */ { MAD_F(0x056e1994) /* 0.339379863 */, 17 },
3284 /* 3064 */ { MAD_F(0x056eb47f) /* 0.339527604 */, 17 },
3285 /* 3065 */ { MAD_F(0x056f4f6e) /* 0.339675361 */, 17 },
3286 /* 3066 */ { MAD_F(0x056fea62) /* 0.339823134 */, 17 },
3287 /* 3067 */ { MAD_F(0x0570855a) /* 0.339970924 */, 17 },
3288 /* 3068 */ { MAD_F(0x05712056) /* 0.340118729 */, 17 },
3289 /* 3069 */ { MAD_F(0x0571bb56) /* 0.340266550 */, 17 },
3290 /* 3070 */ { MAD_F(0x0572565b) /* 0.340414388 */, 17 },
3291 /* 3071 */ { MAD_F(0x0572f164) /* 0.340562242 */, 17 },
3292
3293 /* 3072 */ { MAD_F(0x05738c72) /* 0.340710111 */, 17 },
3294 /* 3073 */ { MAD_F(0x05742784) /* 0.340857997 */, 17 },
3295 /* 3074 */ { MAD_F(0x0574c29a) /* 0.341005899 */, 17 },
3296 /* 3075 */ { MAD_F(0x05755db4) /* 0.341153816 */, 17 },
3297 /* 3076 */ { MAD_F(0x0575f8d3) /* 0.341301750 */, 17 },
3298 /* 3077 */ { MAD_F(0x057693f6) /* 0.341449700 */, 17 },
3299 /* 3078 */ { MAD_F(0x05772f1d) /* 0.341597666 */, 17 },
3300 /* 3079 */ { MAD_F(0x0577ca49) /* 0.341745648 */, 17 },
3301 /* 3080 */ { MAD_F(0x05786578) /* 0.341893646 */, 17 },
3302 /* 3081 */ { MAD_F(0x057900ad) /* 0.342041659 */, 17 },
3303 /* 3082 */ { MAD_F(0x05799be5) /* 0.342189689 */, 17 },
3304 /* 3083 */ { MAD_F(0x057a3722) /* 0.342337735 */, 17 },
3305 /* 3084 */ { MAD_F(0x057ad263) /* 0.342485797 */, 17 },
3306 /* 3085 */ { MAD_F(0x057b6da8) /* 0.342633875 */, 17 },
3307 /* 3086 */ { MAD_F(0x057c08f2) /* 0.342781969 */, 17 },
3308 /* 3087 */ { MAD_F(0x057ca440) /* 0.342930079 */, 17 },
3309
3310 /* 3088 */ { MAD_F(0x057d3f92) /* 0.343078205 */, 17 },
3311 /* 3089 */ { MAD_F(0x057ddae9) /* 0.343226347 */, 17 },
3312 /* 3090 */ { MAD_F(0x057e7644) /* 0.343374505 */, 17 },
3313 /* 3091 */ { MAD_F(0x057f11a3) /* 0.343522679 */, 17 },
3314 /* 3092 */ { MAD_F(0x057fad06) /* 0.343670869 */, 17 },
3315 /* 3093 */ { MAD_F(0x0580486e) /* 0.343819075 */, 17 },
3316 /* 3094 */ { MAD_F(0x0580e3da) /* 0.343967296 */, 17 },
3317 /* 3095 */ { MAD_F(0x05817f4a) /* 0.344115534 */, 17 },
3318 /* 3096 */ { MAD_F(0x05821abf) /* 0.344263788 */, 17 },
3319 /* 3097 */ { MAD_F(0x0582b638) /* 0.344412058 */, 17 },
3320 /* 3098 */ { MAD_F(0x058351b5) /* 0.344560343 */, 17 },
3321 /* 3099 */ { MAD_F(0x0583ed36) /* 0.344708645 */, 17 },
3322 /* 3100 */ { MAD_F(0x058488bc) /* 0.344856963 */, 17 },
3323 /* 3101 */ { MAD_F(0x05852446) /* 0.345005296 */, 17 },
3324 /* 3102 */ { MAD_F(0x0585bfd4) /* 0.345153646 */, 17 },
3325 /* 3103 */ { MAD_F(0x05865b67) /* 0.345302011 */, 17 },
3326
3327 /* 3104 */ { MAD_F(0x0586f6fd) /* 0.345450393 */, 17 },
3328 /* 3105 */ { MAD_F(0x05879298) /* 0.345598790 */, 17 },
3329 /* 3106 */ { MAD_F(0x05882e38) /* 0.345747203 */, 17 },
3330 /* 3107 */ { MAD_F(0x0588c9dc) /* 0.345895632 */, 17 },
3331 /* 3108 */ { MAD_F(0x05896583) /* 0.346044077 */, 17 },
3332 /* 3109 */ { MAD_F(0x058a0130) /* 0.346192538 */, 17 },
3333 /* 3110 */ { MAD_F(0x058a9ce0) /* 0.346341015 */, 17 },
3334 /* 3111 */ { MAD_F(0x058b3895) /* 0.346489508 */, 17 },
3335 /* 3112 */ { MAD_F(0x058bd44e) /* 0.346638017 */, 17 },
3336 /* 3113 */ { MAD_F(0x058c700b) /* 0.346786542 */, 17 },
3337 /* 3114 */ { MAD_F(0x058d0bcd) /* 0.346935082 */, 17 },
3338 /* 3115 */ { MAD_F(0x058da793) /* 0.347083639 */, 17 },
3339 /* 3116 */ { MAD_F(0x058e435d) /* 0.347232211 */, 17 },
3340 /* 3117 */ { MAD_F(0x058edf2b) /* 0.347380799 */, 17 },
3341 /* 3118 */ { MAD_F(0x058f7afe) /* 0.347529403 */, 17 },
3342 /* 3119 */ { MAD_F(0x059016d5) /* 0.347678023 */, 17 },
3343
3344 /* 3120 */ { MAD_F(0x0590b2b0) /* 0.347826659 */, 17 },
3345 /* 3121 */ { MAD_F(0x05914e8f) /* 0.347975311 */, 17 },
3346 /* 3122 */ { MAD_F(0x0591ea73) /* 0.348123979 */, 17 },
3347 /* 3123 */ { MAD_F(0x0592865b) /* 0.348272662 */, 17 },
3348 /* 3124 */ { MAD_F(0x05932247) /* 0.348421362 */, 17 },
3349 /* 3125 */ { MAD_F(0x0593be37) /* 0.348570077 */, 17 },
3350 /* 3126 */ { MAD_F(0x05945a2c) /* 0.348718808 */, 17 },
3351 /* 3127 */ { MAD_F(0x0594f625) /* 0.348867555 */, 17 },
3352 /* 3128 */ { MAD_F(0x05959222) /* 0.349016318 */, 17 },
3353 /* 3129 */ { MAD_F(0x05962e24) /* 0.349165097 */, 17 },
3354 /* 3130 */ { MAD_F(0x0596ca2a) /* 0.349313892 */, 17 },
3355 /* 3131 */ { MAD_F(0x05976634) /* 0.349462702 */, 17 },
3356 /* 3132 */ { MAD_F(0x05980242) /* 0.349611528 */, 17 },
3357 /* 3133 */ { MAD_F(0x05989e54) /* 0.349760370 */, 17 },
3358 /* 3134 */ { MAD_F(0x05993a6b) /* 0.349909228 */, 17 },
3359 /* 3135 */ { MAD_F(0x0599d686) /* 0.350058102 */, 17 },
3360
3361 /* 3136 */ { MAD_F(0x059a72a5) /* 0.350206992 */, 17 },
3362 /* 3137 */ { MAD_F(0x059b0ec9) /* 0.350355897 */, 17 },
3363 /* 3138 */ { MAD_F(0x059baaf1) /* 0.350504818 */, 17 },
3364 /* 3139 */ { MAD_F(0x059c471d) /* 0.350653756 */, 17 },
3365 /* 3140 */ { MAD_F(0x059ce34d) /* 0.350802708 */, 17 },
3366 /* 3141 */ { MAD_F(0x059d7f81) /* 0.350951677 */, 17 },
3367 /* 3142 */ { MAD_F(0x059e1bba) /* 0.351100662 */, 17 },
3368 /* 3143 */ { MAD_F(0x059eb7f7) /* 0.351249662 */, 17 },
3369 /* 3144 */ { MAD_F(0x059f5438) /* 0.351398678 */, 17 },
3370 /* 3145 */ { MAD_F(0x059ff07e) /* 0.351547710 */, 17 },
3371 /* 3146 */ { MAD_F(0x05a08cc7) /* 0.351696758 */, 17 },
3372 /* 3147 */ { MAD_F(0x05a12915) /* 0.351845821 */, 17 },
3373 /* 3148 */ { MAD_F(0x05a1c567) /* 0.351994901 */, 17 },
3374 /* 3149 */ { MAD_F(0x05a261be) /* 0.352143996 */, 17 },
3375 /* 3150 */ { MAD_F(0x05a2fe18) /* 0.352293107 */, 17 },
3376 /* 3151 */ { MAD_F(0x05a39a77) /* 0.352442233 */, 17 },
3377
3378 /* 3152 */ { MAD_F(0x05a436da) /* 0.352591376 */, 17 },
3379 /* 3153 */ { MAD_F(0x05a4d342) /* 0.352740534 */, 17 },
3380 /* 3154 */ { MAD_F(0x05a56fad) /* 0.352889708 */, 17 },
3381 /* 3155 */ { MAD_F(0x05a60c1d) /* 0.353038898 */, 17 },
3382 /* 3156 */ { MAD_F(0x05a6a891) /* 0.353188103 */, 17 },
3383 /* 3157 */ { MAD_F(0x05a7450a) /* 0.353337325 */, 17 },
3384 /* 3158 */ { MAD_F(0x05a7e186) /* 0.353486562 */, 17 },
3385 /* 3159 */ { MAD_F(0x05a87e07) /* 0.353635814 */, 17 },
3386 /* 3160 */ { MAD_F(0x05a91a8c) /* 0.353785083 */, 17 },
3387 /* 3161 */ { MAD_F(0x05a9b715) /* 0.353934367 */, 17 },
3388 /* 3162 */ { MAD_F(0x05aa53a2) /* 0.354083667 */, 17 },
3389 /* 3163 */ { MAD_F(0x05aaf034) /* 0.354232983 */, 17 },
3390 /* 3164 */ { MAD_F(0x05ab8cca) /* 0.354382314 */, 17 },
3391 /* 3165 */ { MAD_F(0x05ac2964) /* 0.354531662 */, 17 },
3392 /* 3166 */ { MAD_F(0x05acc602) /* 0.354681025 */, 17 },
3393 /* 3167 */ { MAD_F(0x05ad62a5) /* 0.354830403 */, 17 },
3394
3395 /* 3168 */ { MAD_F(0x05adff4c) /* 0.354979798 */, 17 },
3396 /* 3169 */ { MAD_F(0x05ae9bf7) /* 0.355129208 */, 17 },
3397 /* 3170 */ { MAD_F(0x05af38a6) /* 0.355278634 */, 17 },
3398 /* 3171 */ { MAD_F(0x05afd559) /* 0.355428075 */, 17 },
3399 /* 3172 */ { MAD_F(0x05b07211) /* 0.355577533 */, 17 },
3400 /* 3173 */ { MAD_F(0x05b10ecd) /* 0.355727006 */, 17 },
3401 /* 3174 */ { MAD_F(0x05b1ab8d) /* 0.355876494 */, 17 },
3402 /* 3175 */ { MAD_F(0x05b24851) /* 0.356025999 */, 17 },
3403 /* 3176 */ { MAD_F(0x05b2e51a) /* 0.356175519 */, 17 },
3404 /* 3177 */ { MAD_F(0x05b381e6) /* 0.356325054 */, 17 },
3405 /* 3178 */ { MAD_F(0x05b41eb7) /* 0.356474606 */, 17 },
3406 /* 3179 */ { MAD_F(0x05b4bb8c) /* 0.356624173 */, 17 },
3407 /* 3180 */ { MAD_F(0x05b55866) /* 0.356773756 */, 17 },
3408 /* 3181 */ { MAD_F(0x05b5f543) /* 0.356923354 */, 17 },
3409 /* 3182 */ { MAD_F(0x05b69225) /* 0.357072969 */, 17 },
3410 /* 3183 */ { MAD_F(0x05b72f0b) /* 0.357222598 */, 17 },
3411
3412 /* 3184 */ { MAD_F(0x05b7cbf5) /* 0.357372244 */, 17 },
3413 /* 3185 */ { MAD_F(0x05b868e3) /* 0.357521905 */, 17 },
3414 /* 3186 */ { MAD_F(0x05b905d6) /* 0.357671582 */, 17 },
3415 /* 3187 */ { MAD_F(0x05b9a2cd) /* 0.357821275 */, 17 },
3416 /* 3188 */ { MAD_F(0x05ba3fc8) /* 0.357970983 */, 17 },
3417 /* 3189 */ { MAD_F(0x05badcc7) /* 0.358120707 */, 17 },
3418 /* 3190 */ { MAD_F(0x05bb79ca) /* 0.358270446 */, 17 },
3419 /* 3191 */ { MAD_F(0x05bc16d2) /* 0.358420201 */, 17 },
3420 /* 3192 */ { MAD_F(0x05bcb3de) /* 0.358569972 */, 17 },
3421 /* 3193 */ { MAD_F(0x05bd50ee) /* 0.358719758 */, 17 },
3422 /* 3194 */ { MAD_F(0x05bdee02) /* 0.358869560 */, 17 },
3423 /* 3195 */ { MAD_F(0x05be8b1a) /* 0.359019378 */, 17 },
3424 /* 3196 */ { MAD_F(0x05bf2837) /* 0.359169211 */, 17 },
3425 /* 3197 */ { MAD_F(0x05bfc558) /* 0.359319060 */, 17 },
3426 /* 3198 */ { MAD_F(0x05c0627d) /* 0.359468925 */, 17 },
3427 /* 3199 */ { MAD_F(0x05c0ffa6) /* 0.359618805 */, 17 },
3428
3429 /* 3200 */ { MAD_F(0x05c19cd3) /* 0.359768701 */, 17 },
3430 /* 3201 */ { MAD_F(0x05c23a05) /* 0.359918612 */, 17 },
3431 /* 3202 */ { MAD_F(0x05c2d73a) /* 0.360068540 */, 17 },
3432 /* 3203 */ { MAD_F(0x05c37474) /* 0.360218482 */, 17 },
3433 /* 3204 */ { MAD_F(0x05c411b2) /* 0.360368440 */, 17 },
3434 /* 3205 */ { MAD_F(0x05c4aef5) /* 0.360518414 */, 17 },
3435 /* 3206 */ { MAD_F(0x05c54c3b) /* 0.360668404 */, 17 },
3436 /* 3207 */ { MAD_F(0x05c5e986) /* 0.360818409 */, 17 },
3437 /* 3208 */ { MAD_F(0x05c686d5) /* 0.360968429 */, 17 },
3438 /* 3209 */ { MAD_F(0x05c72428) /* 0.361118466 */, 17 },
3439 /* 3210 */ { MAD_F(0x05c7c17f) /* 0.361268517 */, 17 },
3440 /* 3211 */ { MAD_F(0x05c85eda) /* 0.361418585 */, 17 },
3441 /* 3212 */ { MAD_F(0x05c8fc3a) /* 0.361568668 */, 17 },
3442 /* 3213 */ { MAD_F(0x05c9999e) /* 0.361718766 */, 17 },
3443 /* 3214 */ { MAD_F(0x05ca3706) /* 0.361868881 */, 17 },
3444 /* 3215 */ { MAD_F(0x05cad472) /* 0.362019010 */, 17 },
3445
3446 /* 3216 */ { MAD_F(0x05cb71e2) /* 0.362169156 */, 17 },
3447 /* 3217 */ { MAD_F(0x05cc0f57) /* 0.362319316 */, 17 },
3448 /* 3218 */ { MAD_F(0x05ccaccf) /* 0.362469493 */, 17 },
3449 /* 3219 */ { MAD_F(0x05cd4a4c) /* 0.362619685 */, 17 },
3450 /* 3220 */ { MAD_F(0x05cde7cd) /* 0.362769892 */, 17 },
3451 /* 3221 */ { MAD_F(0x05ce8552) /* 0.362920115 */, 17 },
3452 /* 3222 */ { MAD_F(0x05cf22dc) /* 0.363070354 */, 17 },
3453 /* 3223 */ { MAD_F(0x05cfc069) /* 0.363220608 */, 17 },
3454 /* 3224 */ { MAD_F(0x05d05dfb) /* 0.363370878 */, 17 },
3455 /* 3225 */ { MAD_F(0x05d0fb91) /* 0.363521163 */, 17 },
3456 /* 3226 */ { MAD_F(0x05d1992b) /* 0.363671464 */, 17 },
3457 /* 3227 */ { MAD_F(0x05d236c9) /* 0.363821780 */, 17 },
3458 /* 3228 */ { MAD_F(0x05d2d46c) /* 0.363972112 */, 17 },
3459 /* 3229 */ { MAD_F(0x05d37212) /* 0.364122459 */, 17 },
3460 /* 3230 */ { MAD_F(0x05d40fbd) /* 0.364272822 */, 17 },
3461 /* 3231 */ { MAD_F(0x05d4ad6c) /* 0.364423200 */, 17 },
3462
3463 /* 3232 */ { MAD_F(0x05d54b1f) /* 0.364573594 */, 17 },
3464 /* 3233 */ { MAD_F(0x05d5e8d6) /* 0.364724004 */, 17 },
3465 /* 3234 */ { MAD_F(0x05d68691) /* 0.364874429 */, 17 },
3466 /* 3235 */ { MAD_F(0x05d72451) /* 0.365024869 */, 17 },
3467 /* 3236 */ { MAD_F(0x05d7c215) /* 0.365175325 */, 17 },
3468 /* 3237 */ { MAD_F(0x05d85fdc) /* 0.365325796 */, 17 },
3469 /* 3238 */ { MAD_F(0x05d8fda8) /* 0.365476283 */, 17 },
3470 /* 3239 */ { MAD_F(0x05d99b79) /* 0.365626786 */, 17 },
3471 /* 3240 */ { MAD_F(0x05da394d) /* 0.365777304 */, 17 },
3472 /* 3241 */ { MAD_F(0x05dad726) /* 0.365927837 */, 17 },
3473 /* 3242 */ { MAD_F(0x05db7502) /* 0.366078386 */, 17 },
3474 /* 3243 */ { MAD_F(0x05dc12e3) /* 0.366228950 */, 17 },
3475 /* 3244 */ { MAD_F(0x05dcb0c8) /* 0.366379530 */, 17 },
3476 /* 3245 */ { MAD_F(0x05dd4eb1) /* 0.366530125 */, 17 },
3477 /* 3246 */ { MAD_F(0x05ddec9e) /* 0.366680736 */, 17 },
3478 /* 3247 */ { MAD_F(0x05de8a90) /* 0.366831362 */, 17 },
3479
3480 /* 3248 */ { MAD_F(0x05df2885) /* 0.366982004 */, 17 },
3481 /* 3249 */ { MAD_F(0x05dfc67f) /* 0.367132661 */, 17 },
3482 /* 3250 */ { MAD_F(0x05e0647d) /* 0.367283334 */, 17 },
3483 /* 3251 */ { MAD_F(0x05e1027f) /* 0.367434022 */, 17 },
3484 /* 3252 */ { MAD_F(0x05e1a085) /* 0.367584725 */, 17 },
3485 /* 3253 */ { MAD_F(0x05e23e8f) /* 0.367735444 */, 17 },
3486 /* 3254 */ { MAD_F(0x05e2dc9e) /* 0.367886179 */, 17 },
3487 /* 3255 */ { MAD_F(0x05e37ab0) /* 0.368036929 */, 17 },
3488 /* 3256 */ { MAD_F(0x05e418c7) /* 0.368187694 */, 17 },
3489 /* 3257 */ { MAD_F(0x05e4b6e2) /* 0.368338475 */, 17 },
3490 /* 3258 */ { MAD_F(0x05e55501) /* 0.368489271 */, 17 },
3491 /* 3259 */ { MAD_F(0x05e5f324) /* 0.368640082 */, 17 },
3492 /* 3260 */ { MAD_F(0x05e6914c) /* 0.368790909 */, 17 },
3493 /* 3261 */ { MAD_F(0x05e72f77) /* 0.368941752 */, 17 },
3494 /* 3262 */ { MAD_F(0x05e7cda7) /* 0.369092610 */, 17 },
3495 /* 3263 */ { MAD_F(0x05e86bda) /* 0.369243483 */, 17 },
3496
3497 /* 3264 */ { MAD_F(0x05e90a12) /* 0.369394372 */, 17 },
3498 /* 3265 */ { MAD_F(0x05e9a84e) /* 0.369545276 */, 17 },
3499 /* 3266 */ { MAD_F(0x05ea468e) /* 0.369696195 */, 17 },
3500 /* 3267 */ { MAD_F(0x05eae4d3) /* 0.369847130 */, 17 },
3501 /* 3268 */ { MAD_F(0x05eb831b) /* 0.369998080 */, 17 },
3502 /* 3269 */ { MAD_F(0x05ec2168) /* 0.370149046 */, 17 },
3503 /* 3270 */ { MAD_F(0x05ecbfb8) /* 0.370300027 */, 17 },
3504 /* 3271 */ { MAD_F(0x05ed5e0d) /* 0.370451024 */, 17 },
3505 /* 3272 */ { MAD_F(0x05edfc66) /* 0.370602036 */, 17 },
3506 /* 3273 */ { MAD_F(0x05ee9ac3) /* 0.370753063 */, 17 },
3507 /* 3274 */ { MAD_F(0x05ef3924) /* 0.370904105 */, 17 },
3508 /* 3275 */ { MAD_F(0x05efd78a) /* 0.371055163 */, 17 },
3509 /* 3276 */ { MAD_F(0x05f075f3) /* 0.371206237 */, 17 },
3510 /* 3277 */ { MAD_F(0x05f11461) /* 0.371357326 */, 17 },
3511 /* 3278 */ { MAD_F(0x05f1b2d3) /* 0.371508430 */, 17 },
3512 /* 3279 */ { MAD_F(0x05f25148) /* 0.371659549 */, 17 },
3513
3514 /* 3280 */ { MAD_F(0x05f2efc2) /* 0.371810684 */, 17 },
3515 /* 3281 */ { MAD_F(0x05f38e40) /* 0.371961834 */, 17 },
3516 /* 3282 */ { MAD_F(0x05f42cc3) /* 0.372113000 */, 17 },
3517 /* 3283 */ { MAD_F(0x05f4cb49) /* 0.372264181 */, 17 },
3518 /* 3284 */ { MAD_F(0x05f569d3) /* 0.372415377 */, 17 },
3519 /* 3285 */ { MAD_F(0x05f60862) /* 0.372566589 */, 17 },
3520 /* 3286 */ { MAD_F(0x05f6a6f5) /* 0.372717816 */, 17 },
3521 /* 3287 */ { MAD_F(0x05f7458b) /* 0.372869058 */, 17 },
3522 /* 3288 */ { MAD_F(0x05f7e426) /* 0.373020316 */, 17 },
3523 /* 3289 */ { MAD_F(0x05f882c5) /* 0.373171589 */, 17 },
3524 /* 3290 */ { MAD_F(0x05f92169) /* 0.373322877 */, 17 },
3525 /* 3291 */ { MAD_F(0x05f9c010) /* 0.373474181 */, 17 },
3526 /* 3292 */ { MAD_F(0x05fa5ebb) /* 0.373625500 */, 17 },
3527 /* 3293 */ { MAD_F(0x05fafd6b) /* 0.373776834 */, 17 },
3528 /* 3294 */ { MAD_F(0x05fb9c1e) /* 0.373928184 */, 17 },
3529 /* 3295 */ { MAD_F(0x05fc3ad6) /* 0.374079549 */, 17 },
3530
3531 /* 3296 */ { MAD_F(0x05fcd992) /* 0.374230929 */, 17 },
3532 /* 3297 */ { MAD_F(0x05fd7852) /* 0.374382325 */, 17 },
3533 /* 3298 */ { MAD_F(0x05fe1716) /* 0.374533735 */, 17 },
3534 /* 3299 */ { MAD_F(0x05feb5de) /* 0.374685162 */, 17 },
3535 /* 3300 */ { MAD_F(0x05ff54aa) /* 0.374836603 */, 17 },
3536 /* 3301 */ { MAD_F(0x05fff37b) /* 0.374988060 */, 17 },
3537 /* 3302 */ { MAD_F(0x0600924f) /* 0.375139532 */, 17 },
3538 /* 3303 */ { MAD_F(0x06013128) /* 0.375291019 */, 17 },
3539 /* 3304 */ { MAD_F(0x0601d004) /* 0.375442522 */, 17 },
3540 /* 3305 */ { MAD_F(0x06026ee5) /* 0.375594040 */, 17 },
3541 /* 3306 */ { MAD_F(0x06030dca) /* 0.375745573 */, 17 },
3542 /* 3307 */ { MAD_F(0x0603acb3) /* 0.375897122 */, 17 },
3543 /* 3308 */ { MAD_F(0x06044ba0) /* 0.376048685 */, 17 },
3544 /* 3309 */ { MAD_F(0x0604ea91) /* 0.376200265 */, 17 },
3545 /* 3310 */ { MAD_F(0x06058987) /* 0.376351859 */, 17 },
3546 /* 3311 */ { MAD_F(0x06062880) /* 0.376503468 */, 17 },
3547
3548 /* 3312 */ { MAD_F(0x0606c77d) /* 0.376655093 */, 17 },
3549 /* 3313 */ { MAD_F(0x0607667f) /* 0.376806733 */, 17 },
3550 /* 3314 */ { MAD_F(0x06080585) /* 0.376958389 */, 17 },
3551 /* 3315 */ { MAD_F(0x0608a48f) /* 0.377110059 */, 17 },
3552 /* 3316 */ { MAD_F(0x0609439c) /* 0.377261745 */, 17 },
3553 /* 3317 */ { MAD_F(0x0609e2ae) /* 0.377413446 */, 17 },
3554 /* 3318 */ { MAD_F(0x060a81c4) /* 0.377565163 */, 17 },
3555 /* 3319 */ { MAD_F(0x060b20df) /* 0.377716894 */, 17 },
3556 /* 3320 */ { MAD_F(0x060bbffd) /* 0.377868641 */, 17 },
3557 /* 3321 */ { MAD_F(0x060c5f1f) /* 0.378020403 */, 17 },
3558 /* 3322 */ { MAD_F(0x060cfe46) /* 0.378172181 */, 17 },
3559 /* 3323 */ { MAD_F(0x060d9d70) /* 0.378323973 */, 17 },
3560 /* 3324 */ { MAD_F(0x060e3c9f) /* 0.378475781 */, 17 },
3561 /* 3325 */ { MAD_F(0x060edbd1) /* 0.378627604 */, 17 },
3562 /* 3326 */ { MAD_F(0x060f7b08) /* 0.378779442 */, 17 },
3563 /* 3327 */ { MAD_F(0x06101a43) /* 0.378931296 */, 17 },
3564
3565 /* 3328 */ { MAD_F(0x0610b982) /* 0.379083164 */, 17 },
3566 /* 3329 */ { MAD_F(0x061158c5) /* 0.379235048 */, 17 },
3567 /* 3330 */ { MAD_F(0x0611f80c) /* 0.379386947 */, 17 },
3568 /* 3331 */ { MAD_F(0x06129757) /* 0.379538862 */, 17 },
3569 /* 3332 */ { MAD_F(0x061336a6) /* 0.379690791 */, 17 },
3570 /* 3333 */ { MAD_F(0x0613d5fa) /* 0.379842736 */, 17 },
3571 /* 3334 */ { MAD_F(0x06147551) /* 0.379994696 */, 17 },
3572 /* 3335 */ { MAD_F(0x061514ad) /* 0.380146671 */, 17 },
3573 /* 3336 */ { MAD_F(0x0615b40c) /* 0.380298661 */, 17 },
3574 /* 3337 */ { MAD_F(0x06165370) /* 0.380450666 */, 17 },
3575 /* 3338 */ { MAD_F(0x0616f2d8) /* 0.380602687 */, 17 },
3576 /* 3339 */ { MAD_F(0x06179243) /* 0.380754723 */, 17 },
3577 /* 3340 */ { MAD_F(0x061831b3) /* 0.380906774 */, 17 },
3578 /* 3341 */ { MAD_F(0x0618d127) /* 0.381058840 */, 17 },
3579 /* 3342 */ { MAD_F(0x0619709f) /* 0.381210921 */, 17 },
3580 /* 3343 */ { MAD_F(0x061a101b) /* 0.381363018 */, 17 },
3581
3582 /* 3344 */ { MAD_F(0x061aaf9c) /* 0.381515130 */, 17 },
3583 /* 3345 */ { MAD_F(0x061b4f20) /* 0.381667257 */, 17 },
3584 /* 3346 */ { MAD_F(0x061beea8) /* 0.381819399 */, 17 },
3585 /* 3347 */ { MAD_F(0x061c8e34) /* 0.381971556 */, 17 },
3586 /* 3348 */ { MAD_F(0x061d2dc5) /* 0.382123728 */, 17 },
3587 /* 3349 */ { MAD_F(0x061dcd59) /* 0.382275916 */, 17 },
3588 /* 3350 */ { MAD_F(0x061e6cf2) /* 0.382428118 */, 17 },
3589 /* 3351 */ { MAD_F(0x061f0c8f) /* 0.382580336 */, 17 },
3590 /* 3352 */ { MAD_F(0x061fac2f) /* 0.382732569 */, 17 },
3591 /* 3353 */ { MAD_F(0x06204bd4) /* 0.382884817 */, 17 },
3592 /* 3354 */ { MAD_F(0x0620eb7d) /* 0.383037080 */, 17 },
3593 /* 3355 */ { MAD_F(0x06218b2a) /* 0.383189358 */, 17 },
3594 /* 3356 */ { MAD_F(0x06222adb) /* 0.383341652 */, 17 },
3595 /* 3357 */ { MAD_F(0x0622ca90) /* 0.383493960 */, 17 },
3596 /* 3358 */ { MAD_F(0x06236a49) /* 0.383646284 */, 17 },
3597 /* 3359 */ { MAD_F(0x06240a06) /* 0.383798623 */, 17 },
3598
3599 /* 3360 */ { MAD_F(0x0624a9c7) /* 0.383950977 */, 17 },
3600 /* 3361 */ { MAD_F(0x0625498d) /* 0.384103346 */, 17 },
3601 /* 3362 */ { MAD_F(0x0625e956) /* 0.384255730 */, 17 },
3602 /* 3363 */ { MAD_F(0x06268923) /* 0.384408129 */, 17 },
3603 /* 3364 */ { MAD_F(0x062728f5) /* 0.384560544 */, 17 },
3604 /* 3365 */ { MAD_F(0x0627c8ca) /* 0.384712973 */, 17 },
3605 /* 3366 */ { MAD_F(0x062868a4) /* 0.384865418 */, 17 },
3606 /* 3367 */ { MAD_F(0x06290881) /* 0.385017878 */, 17 },
3607 /* 3368 */ { MAD_F(0x0629a863) /* 0.385170352 */, 17 },
3608 /* 3369 */ { MAD_F(0x062a4849) /* 0.385322842 */, 17 },
3609 /* 3370 */ { MAD_F(0x062ae832) /* 0.385475347 */, 17 },
3610 /* 3371 */ { MAD_F(0x062b8820) /* 0.385627867 */, 17 },
3611 /* 3372 */ { MAD_F(0x062c2812) /* 0.385780402 */, 17 },
3612 /* 3373 */ { MAD_F(0x062cc808) /* 0.385932953 */, 17 },
3613 /* 3374 */ { MAD_F(0x062d6802) /* 0.386085518 */, 17 },
3614 /* 3375 */ { MAD_F(0x062e0800) /* 0.386238098 */, 17 },
3615
3616 /* 3376 */ { MAD_F(0x062ea802) /* 0.386390694 */, 17 },
3617 /* 3377 */ { MAD_F(0x062f4808) /* 0.386543304 */, 17 },
3618 /* 3378 */ { MAD_F(0x062fe812) /* 0.386695930 */, 17 },
3619 /* 3379 */ { MAD_F(0x06308820) /* 0.386848570 */, 17 },
3620 /* 3380 */ { MAD_F(0x06312832) /* 0.387001226 */, 17 },
3621 /* 3381 */ { MAD_F(0x0631c849) /* 0.387153897 */, 17 },
3622 /* 3382 */ { MAD_F(0x06326863) /* 0.387306582 */, 17 },
3623 /* 3383 */ { MAD_F(0x06330881) /* 0.387459283 */, 17 },
3624 /* 3384 */ { MAD_F(0x0633a8a3) /* 0.387611999 */, 17 },
3625 /* 3385 */ { MAD_F(0x063448ca) /* 0.387764730 */, 17 },
3626 /* 3386 */ { MAD_F(0x0634e8f4) /* 0.387917476 */, 17 },
3627 /* 3387 */ { MAD_F(0x06358923) /* 0.388070237 */, 17 },
3628 /* 3388 */ { MAD_F(0x06362955) /* 0.388223013 */, 17 },
3629 /* 3389 */ { MAD_F(0x0636c98c) /* 0.388375804 */, 17 },
3630 /* 3390 */ { MAD_F(0x063769c6) /* 0.388528610 */, 17 },
3631 /* 3391 */ { MAD_F(0x06380a05) /* 0.388681431 */, 17 },
3632
3633 /* 3392 */ { MAD_F(0x0638aa48) /* 0.388834268 */, 17 },
3634 /* 3393 */ { MAD_F(0x06394a8e) /* 0.388987119 */, 17 },
3635 /* 3394 */ { MAD_F(0x0639ead9) /* 0.389139985 */, 17 },
3636 /* 3395 */ { MAD_F(0x063a8b28) /* 0.389292866 */, 17 },
3637 /* 3396 */ { MAD_F(0x063b2b7b) /* 0.389445762 */, 17 },
3638 /* 3397 */ { MAD_F(0x063bcbd1) /* 0.389598674 */, 17 },
3639 /* 3398 */ { MAD_F(0x063c6c2c) /* 0.389751600 */, 17 },
3640 /* 3399 */ { MAD_F(0x063d0c8b) /* 0.389904541 */, 17 },
3641 /* 3400 */ { MAD_F(0x063dacee) /* 0.390057497 */, 17 },
3642 /* 3401 */ { MAD_F(0x063e4d55) /* 0.390210468 */, 17 },
3643 /* 3402 */ { MAD_F(0x063eedc0) /* 0.390363455 */, 17 },
3644 /* 3403 */ { MAD_F(0x063f8e2f) /* 0.390516456 */, 17 },
3645 /* 3404 */ { MAD_F(0x06402ea2) /* 0.390669472 */, 17 },
3646 /* 3405 */ { MAD_F(0x0640cf19) /* 0.390822503 */, 17 },
3647 /* 3406 */ { MAD_F(0x06416f94) /* 0.390975549 */, 17 },
3648 /* 3407 */ { MAD_F(0x06421013) /* 0.391128611 */, 17 },
3649
3650 /* 3408 */ { MAD_F(0x0642b096) /* 0.391281687 */, 17 },
3651 /* 3409 */ { MAD_F(0x0643511d) /* 0.391434778 */, 17 },
3652 /* 3410 */ { MAD_F(0x0643f1a8) /* 0.391587884 */, 17 },
3653 /* 3411 */ { MAD_F(0x06449237) /* 0.391741005 */, 17 },
3654 /* 3412 */ { MAD_F(0x064532ca) /* 0.391894141 */, 17 },
3655 /* 3413 */ { MAD_F(0x0645d361) /* 0.392047292 */, 17 },
3656 /* 3414 */ { MAD_F(0x064673fc) /* 0.392200458 */, 17 },
3657 /* 3415 */ { MAD_F(0x0647149c) /* 0.392353638 */, 17 },
3658 /* 3416 */ { MAD_F(0x0647b53f) /* 0.392506834 */, 17 },
3659 /* 3417 */ { MAD_F(0x064855e6) /* 0.392660045 */, 17 },
3660 /* 3418 */ { MAD_F(0x0648f691) /* 0.392813271 */, 17 },
3661 /* 3419 */ { MAD_F(0x06499740) /* 0.392966511 */, 17 },
3662 /* 3420 */ { MAD_F(0x064a37f4) /* 0.393119767 */, 17 },
3663 /* 3421 */ { MAD_F(0x064ad8ab) /* 0.393273038 */, 17 },
3664 /* 3422 */ { MAD_F(0x064b7966) /* 0.393426323 */, 17 },
3665 /* 3423 */ { MAD_F(0x064c1a25) /* 0.393579623 */, 17 },
3666
3667 /* 3424 */ { MAD_F(0x064cbae9) /* 0.393732939 */, 17 },
3668 /* 3425 */ { MAD_F(0x064d5bb0) /* 0.393886269 */, 17 },
3669 /* 3426 */ { MAD_F(0x064dfc7b) /* 0.394039614 */, 17 },
3670 /* 3427 */ { MAD_F(0x064e9d4b) /* 0.394192974 */, 17 },
3671 /* 3428 */ { MAD_F(0x064f3e1e) /* 0.394346349 */, 17 },
3672 /* 3429 */ { MAD_F(0x064fdef5) /* 0.394499739 */, 17 },
3673 /* 3430 */ { MAD_F(0x06507fd0) /* 0.394653144 */, 17 },
3674 /* 3431 */ { MAD_F(0x065120b0) /* 0.394806564 */, 17 },
3675 /* 3432 */ { MAD_F(0x0651c193) /* 0.394959999 */, 17 },
3676 /* 3433 */ { MAD_F(0x0652627a) /* 0.395113448 */, 17 },
3677 /* 3434 */ { MAD_F(0x06530366) /* 0.395266913 */, 17 },
3678 /* 3435 */ { MAD_F(0x0653a455) /* 0.395420392 */, 17 },
3679 /* 3436 */ { MAD_F(0x06544548) /* 0.395573886 */, 17 },
3680 /* 3437 */ { MAD_F(0x0654e640) /* 0.395727395 */, 17 },
3681 /* 3438 */ { MAD_F(0x0655873b) /* 0.395880919 */, 17 },
3682 /* 3439 */ { MAD_F(0x0656283a) /* 0.396034458 */, 17 },
3683
3684 /* 3440 */ { MAD_F(0x0656c93d) /* 0.396188012 */, 17 },
3685 /* 3441 */ { MAD_F(0x06576a45) /* 0.396341581 */, 17 },
3686 /* 3442 */ { MAD_F(0x06580b50) /* 0.396495164 */, 17 },
3687 /* 3443 */ { MAD_F(0x0658ac5f) /* 0.396648763 */, 17 },
3688 /* 3444 */ { MAD_F(0x06594d73) /* 0.396802376 */, 17 },
3689 /* 3445 */ { MAD_F(0x0659ee8a) /* 0.396956004 */, 17 },
3690 /* 3446 */ { MAD_F(0x065a8fa5) /* 0.397109647 */, 17 },
3691 /* 3447 */ { MAD_F(0x065b30c4) /* 0.397263305 */, 17 },
3692 /* 3448 */ { MAD_F(0x065bd1e7) /* 0.397416978 */, 17 },
3693 /* 3449 */ { MAD_F(0x065c730f) /* 0.397570666 */, 17 },
3694 /* 3450 */ { MAD_F(0x065d143a) /* 0.397724368 */, 17 },
3695 /* 3451 */ { MAD_F(0x065db569) /* 0.397878085 */, 17 },
3696 /* 3452 */ { MAD_F(0x065e569c) /* 0.398031818 */, 17 },
3697 /* 3453 */ { MAD_F(0x065ef7d3) /* 0.398185565 */, 17 },
3698 /* 3454 */ { MAD_F(0x065f990e) /* 0.398339326 */, 17 },
3699 /* 3455 */ { MAD_F(0x06603a4e) /* 0.398493103 */, 17 },
3700
3701 /* 3456 */ { MAD_F(0x0660db91) /* 0.398646895 */, 17 },
3702 /* 3457 */ { MAD_F(0x06617cd8) /* 0.398800701 */, 17 },
3703 /* 3458 */ { MAD_F(0x06621e23) /* 0.398954522 */, 17 },
3704 /* 3459 */ { MAD_F(0x0662bf72) /* 0.399108358 */, 17 },
3705 /* 3460 */ { MAD_F(0x066360c5) /* 0.399262209 */, 17 },
3706 /* 3461 */ { MAD_F(0x0664021c) /* 0.399416075 */, 17 },
3707 /* 3462 */ { MAD_F(0x0664a377) /* 0.399569955 */, 17 },
3708 /* 3463 */ { MAD_F(0x066544d6) /* 0.399723851 */, 17 },
3709 /* 3464 */ { MAD_F(0x0665e639) /* 0.399877761 */, 17 },
3710 /* 3465 */ { MAD_F(0x066687a0) /* 0.400031686 */, 17 },
3711 /* 3466 */ { MAD_F(0x0667290b) /* 0.400185625 */, 17 },
3712 /* 3467 */ { MAD_F(0x0667ca79) /* 0.400339580 */, 17 },
3713 /* 3468 */ { MAD_F(0x06686bec) /* 0.400493549 */, 17 },
3714 /* 3469 */ { MAD_F(0x06690d63) /* 0.400647534 */, 17 },
3715 /* 3470 */ { MAD_F(0x0669aede) /* 0.400801533 */, 17 },
3716 /* 3471 */ { MAD_F(0x066a505d) /* 0.400955546 */, 17 },
3717
3718 /* 3472 */ { MAD_F(0x066af1df) /* 0.401109575 */, 17 },
3719 /* 3473 */ { MAD_F(0x066b9366) /* 0.401263618 */, 17 },
3720 /* 3474 */ { MAD_F(0x066c34f1) /* 0.401417676 */, 17 },
3721 /* 3475 */ { MAD_F(0x066cd67f) /* 0.401571749 */, 17 },
3722 /* 3476 */ { MAD_F(0x066d7812) /* 0.401725837 */, 17 },
3723 /* 3477 */ { MAD_F(0x066e19a9) /* 0.401879939 */, 17 },
3724 /* 3478 */ { MAD_F(0x066ebb43) /* 0.402034056 */, 17 },
3725 /* 3479 */ { MAD_F(0x066f5ce2) /* 0.402188188 */, 17 },
3726 /* 3480 */ { MAD_F(0x066ffe84) /* 0.402342335 */, 17 },
3727 /* 3481 */ { MAD_F(0x0670a02a) /* 0.402496497 */, 17 },
3728 /* 3482 */ { MAD_F(0x067141d5) /* 0.402650673 */, 17 },
3729 /* 3483 */ { MAD_F(0x0671e383) /* 0.402804864 */, 17 },
3730 /* 3484 */ { MAD_F(0x06728535) /* 0.402959070 */, 17 },
3731 /* 3485 */ { MAD_F(0x067326ec) /* 0.403113291 */, 17 },
3732 /* 3486 */ { MAD_F(0x0673c8a6) /* 0.403267526 */, 17 },
3733 /* 3487 */ { MAD_F(0x06746a64) /* 0.403421776 */, 17 },
3734
3735 /* 3488 */ { MAD_F(0x06750c26) /* 0.403576041 */, 17 },
3736 /* 3489 */ { MAD_F(0x0675adec) /* 0.403730320 */, 17 },
3737 /* 3490 */ { MAD_F(0x06764fb6) /* 0.403884615 */, 17 },
3738 /* 3491 */ { MAD_F(0x0676f184) /* 0.404038924 */, 17 },
3739 /* 3492 */ { MAD_F(0x06779356) /* 0.404193247 */, 17 },
3740 /* 3493 */ { MAD_F(0x0678352c) /* 0.404347586 */, 17 },
3741 /* 3494 */ { MAD_F(0x0678d706) /* 0.404501939 */, 17 },
3742 /* 3495 */ { MAD_F(0x067978e4) /* 0.404656307 */, 17 },
3743 /* 3496 */ { MAD_F(0x067a1ac6) /* 0.404810690 */, 17 },
3744 /* 3497 */ { MAD_F(0x067abcac) /* 0.404965087 */, 17 },
3745 /* 3498 */ { MAD_F(0x067b5e95) /* 0.405119499 */, 17 },
3746 /* 3499 */ { MAD_F(0x067c0083) /* 0.405273926 */, 17 },
3747 /* 3500 */ { MAD_F(0x067ca275) /* 0.405428368 */, 17 },
3748 /* 3501 */ { MAD_F(0x067d446a) /* 0.405582824 */, 17 },
3749 /* 3502 */ { MAD_F(0x067de664) /* 0.405737295 */, 17 },
3750 /* 3503 */ { MAD_F(0x067e8861) /* 0.405891781 */, 17 },
3751
3752 /* 3504 */ { MAD_F(0x067f2a62) /* 0.406046281 */, 17 },
3753 /* 3505 */ { MAD_F(0x067fcc68) /* 0.406200796 */, 17 },
3754 /* 3506 */ { MAD_F(0x06806e71) /* 0.406355326 */, 17 },
3755 /* 3507 */ { MAD_F(0x0681107e) /* 0.406509870 */, 17 },
3756 /* 3508 */ { MAD_F(0x0681b28f) /* 0.406664429 */, 17 },
3757 /* 3509 */ { MAD_F(0x068254a4) /* 0.406819003 */, 17 },
3758 /* 3510 */ { MAD_F(0x0682f6bd) /* 0.406973592 */, 17 },
3759 /* 3511 */ { MAD_F(0x068398da) /* 0.407128195 */, 17 },
3760 /* 3512 */ { MAD_F(0x06843afb) /* 0.407282813 */, 17 },
3761 /* 3513 */ { MAD_F(0x0684dd20) /* 0.407437445 */, 17 },
3762 /* 3514 */ { MAD_F(0x06857f49) /* 0.407592093 */, 17 },
3763 /* 3515 */ { MAD_F(0x06862176) /* 0.407746754 */, 17 },
3764 /* 3516 */ { MAD_F(0x0686c3a6) /* 0.407901431 */, 17 },
3765 /* 3517 */ { MAD_F(0x068765db) /* 0.408056122 */, 17 },
3766 /* 3518 */ { MAD_F(0x06880814) /* 0.408210828 */, 17 },
3767 /* 3519 */ { MAD_F(0x0688aa50) /* 0.408365549 */, 17 },
3768
3769 /* 3520 */ { MAD_F(0x06894c90) /* 0.408520284 */, 17 },
3770 /* 3521 */ { MAD_F(0x0689eed5) /* 0.408675034 */, 17 },
3771 /* 3522 */ { MAD_F(0x068a911d) /* 0.408829798 */, 17 },
3772 /* 3523 */ { MAD_F(0x068b3369) /* 0.408984577 */, 17 },
3773 /* 3524 */ { MAD_F(0x068bd5b9) /* 0.409139371 */, 17 },
3774 /* 3525 */ { MAD_F(0x068c780e) /* 0.409294180 */, 17 },
3775 /* 3526 */ { MAD_F(0x068d1a66) /* 0.409449003 */, 17 },
3776 /* 3527 */ { MAD_F(0x068dbcc1) /* 0.409603840 */, 17 },
3777 /* 3528 */ { MAD_F(0x068e5f21) /* 0.409758693 */, 17 },
3778 /* 3529 */ { MAD_F(0x068f0185) /* 0.409913560 */, 17 },
3779 /* 3530 */ { MAD_F(0x068fa3ed) /* 0.410068441 */, 17 },
3780 /* 3531 */ { MAD_F(0x06904658) /* 0.410223338 */, 17 },
3781 /* 3532 */ { MAD_F(0x0690e8c8) /* 0.410378249 */, 17 },
3782 /* 3533 */ { MAD_F(0x06918b3c) /* 0.410533174 */, 17 },
3783 /* 3534 */ { MAD_F(0x06922db3) /* 0.410688114 */, 17 },
3784 /* 3535 */ { MAD_F(0x0692d02e) /* 0.410843069 */, 17 },
3785
3786 /* 3536 */ { MAD_F(0x069372ae) /* 0.410998038 */, 17 },
3787 /* 3537 */ { MAD_F(0x06941531) /* 0.411153022 */, 17 },
3788 /* 3538 */ { MAD_F(0x0694b7b8) /* 0.411308021 */, 17 },
3789 /* 3539 */ { MAD_F(0x06955a43) /* 0.411463034 */, 17 },
3790 /* 3540 */ { MAD_F(0x0695fcd2) /* 0.411618062 */, 17 },
3791 /* 3541 */ { MAD_F(0x06969f65) /* 0.411773104 */, 17 },
3792 /* 3542 */ { MAD_F(0x069741fb) /* 0.411928161 */, 17 },
3793 /* 3543 */ { MAD_F(0x0697e496) /* 0.412083232 */, 17 },
3794 /* 3544 */ { MAD_F(0x06988735) /* 0.412238319 */, 17 },
3795 /* 3545 */ { MAD_F(0x069929d7) /* 0.412393419 */, 17 },
3796 /* 3546 */ { MAD_F(0x0699cc7e) /* 0.412548535 */, 17 },
3797 /* 3547 */ { MAD_F(0x069a6f28) /* 0.412703664 */, 17 },
3798 /* 3548 */ { MAD_F(0x069b11d6) /* 0.412858809 */, 17 },
3799 /* 3549 */ { MAD_F(0x069bb489) /* 0.413013968 */, 17 },
3800 /* 3550 */ { MAD_F(0x069c573f) /* 0.413169142 */, 17 },
3801 /* 3551 */ { MAD_F(0x069cf9f9) /* 0.413324330 */, 17 },
3802
3803 /* 3552 */ { MAD_F(0x069d9cb7) /* 0.413479532 */, 17 },
3804 /* 3553 */ { MAD_F(0x069e3f78) /* 0.413634750 */, 17 },
3805 /* 3554 */ { MAD_F(0x069ee23e) /* 0.413789982 */, 17 },
3806 /* 3555 */ { MAD_F(0x069f8508) /* 0.413945228 */, 17 },
3807 /* 3556 */ { MAD_F(0x06a027d5) /* 0.414100489 */, 17 },
3808 /* 3557 */ { MAD_F(0x06a0caa7) /* 0.414255765 */, 17 },
3809 /* 3558 */ { MAD_F(0x06a16d7c) /* 0.414411055 */, 17 },
3810 /* 3559 */ { MAD_F(0x06a21055) /* 0.414566359 */, 17 },
3811 /* 3560 */ { MAD_F(0x06a2b333) /* 0.414721679 */, 17 },
3812 /* 3561 */ { MAD_F(0x06a35614) /* 0.414877012 */, 17 },
3813 /* 3562 */ { MAD_F(0x06a3f8f9) /* 0.415032361 */, 17 },
3814 /* 3563 */ { MAD_F(0x06a49be2) /* 0.415187723 */, 17 },
3815 /* 3564 */ { MAD_F(0x06a53ece) /* 0.415343101 */, 17 },
3816 /* 3565 */ { MAD_F(0x06a5e1bf) /* 0.415498493 */, 17 },
3817 /* 3566 */ { MAD_F(0x06a684b4) /* 0.415653899 */, 17 },
3818 /* 3567 */ { MAD_F(0x06a727ac) /* 0.415809320 */, 17 },
3819
3820 /* 3568 */ { MAD_F(0x06a7caa9) /* 0.415964756 */, 17 },
3821 /* 3569 */ { MAD_F(0x06a86da9) /* 0.416120206 */, 17 },
3822 /* 3570 */ { MAD_F(0x06a910ad) /* 0.416275670 */, 17 },
3823 /* 3571 */ { MAD_F(0x06a9b3b5) /* 0.416431149 */, 17 },
3824 /* 3572 */ { MAD_F(0x06aa56c1) /* 0.416586643 */, 17 },
3825 /* 3573 */ { MAD_F(0x06aaf9d1) /* 0.416742151 */, 17 },
3826 /* 3574 */ { MAD_F(0x06ab9ce5) /* 0.416897673 */, 17 },
3827 /* 3575 */ { MAD_F(0x06ac3ffc) /* 0.417053210 */, 17 },
3828 /* 3576 */ { MAD_F(0x06ace318) /* 0.417208762 */, 17 },
3829 /* 3577 */ { MAD_F(0x06ad8637) /* 0.417364328 */, 17 },
3830 /* 3578 */ { MAD_F(0x06ae295b) /* 0.417519909 */, 17 },
3831 /* 3579 */ { MAD_F(0x06aecc82) /* 0.417675504 */, 17 },
3832 /* 3580 */ { MAD_F(0x06af6fad) /* 0.417831113 */, 17 },
3833 /* 3581 */ { MAD_F(0x06b012dc) /* 0.417986737 */, 17 },
3834 /* 3582 */ { MAD_F(0x06b0b60f) /* 0.418142376 */, 17 },
3835 /* 3583 */ { MAD_F(0x06b15946) /* 0.418298029 */, 17 },
3836
3837 /* 3584 */ { MAD_F(0x06b1fc81) /* 0.418453696 */, 17 },
3838 /* 3585 */ { MAD_F(0x06b29fbf) /* 0.418609378 */, 17 },
3839 /* 3586 */ { MAD_F(0x06b34302) /* 0.418765075 */, 17 },
3840 /* 3587 */ { MAD_F(0x06b3e648) /* 0.418920786 */, 17 },
3841 /* 3588 */ { MAD_F(0x06b48992) /* 0.419076511 */, 17 },
3842 /* 3589 */ { MAD_F(0x06b52ce0) /* 0.419232251 */, 17 },
3843 /* 3590 */ { MAD_F(0x06b5d032) /* 0.419388005 */, 17 },
3844 /* 3591 */ { MAD_F(0x06b67388) /* 0.419543774 */, 17 },
3845 /* 3592 */ { MAD_F(0x06b716e2) /* 0.419699557 */, 17 },
3846 /* 3593 */ { MAD_F(0x06b7ba3f) /* 0.419855355 */, 17 },
3847 /* 3594 */ { MAD_F(0x06b85da1) /* 0.420011167 */, 17 },
3848 /* 3595 */ { MAD_F(0x06b90106) /* 0.420166994 */, 17 },
3849 /* 3596 */ { MAD_F(0x06b9a470) /* 0.420322835 */, 17 },
3850 /* 3597 */ { MAD_F(0x06ba47dd) /* 0.420478690 */, 17 },
3851 /* 3598 */ { MAD_F(0x06baeb4e) /* 0.420634560 */, 17 },
3852 /* 3599 */ { MAD_F(0x06bb8ec3) /* 0.420790445 */, 17 },
3853
3854 /* 3600 */ { MAD_F(0x06bc323b) /* 0.420946343 */, 17 },
3855 /* 3601 */ { MAD_F(0x06bcd5b8) /* 0.421102257 */, 17 },
3856 /* 3602 */ { MAD_F(0x06bd7939) /* 0.421258184 */, 17 },
3857 /* 3603 */ { MAD_F(0x06be1cbd) /* 0.421414127 */, 17 },
3858 /* 3604 */ { MAD_F(0x06bec045) /* 0.421570083 */, 17 },
3859 /* 3605 */ { MAD_F(0x06bf63d1) /* 0.421726054 */, 17 },
3860 /* 3606 */ { MAD_F(0x06c00761) /* 0.421882040 */, 17 },
3861 /* 3607 */ { MAD_F(0x06c0aaf5) /* 0.422038039 */, 17 },
3862 /* 3608 */ { MAD_F(0x06c14e8d) /* 0.422194054 */, 17 },
3863 /* 3609 */ { MAD_F(0x06c1f229) /* 0.422350082 */, 17 },
3864 /* 3610 */ { MAD_F(0x06c295c8) /* 0.422506125 */, 17 },
3865 /* 3611 */ { MAD_F(0x06c3396c) /* 0.422662183 */, 17 },
3866 /* 3612 */ { MAD_F(0x06c3dd13) /* 0.422818255 */, 17 },
3867 /* 3613 */ { MAD_F(0x06c480be) /* 0.422974341 */, 17 },
3868 /* 3614 */ { MAD_F(0x06c5246d) /* 0.423130442 */, 17 },
3869 /* 3615 */ { MAD_F(0x06c5c820) /* 0.423286557 */, 17 },
3870
3871 /* 3616 */ { MAD_F(0x06c66bd6) /* 0.423442686 */, 17 },
3872 /* 3617 */ { MAD_F(0x06c70f91) /* 0.423598830 */, 17 },
3873 /* 3618 */ { MAD_F(0x06c7b34f) /* 0.423754988 */, 17 },
3874 /* 3619 */ { MAD_F(0x06c85712) /* 0.423911161 */, 17 },
3875 /* 3620 */ { MAD_F(0x06c8fad8) /* 0.424067348 */, 17 },
3876 /* 3621 */ { MAD_F(0x06c99ea2) /* 0.424223550 */, 17 },
3877 /* 3622 */ { MAD_F(0x06ca4270) /* 0.424379765 */, 17 },
3878 /* 3623 */ { MAD_F(0x06cae641) /* 0.424535996 */, 17 },
3879 /* 3624 */ { MAD_F(0x06cb8a17) /* 0.424692240 */, 17 },
3880 /* 3625 */ { MAD_F(0x06cc2df0) /* 0.424848499 */, 17 },
3881 /* 3626 */ { MAD_F(0x06ccd1ce) /* 0.425004772 */, 17 },
3882 /* 3627 */ { MAD_F(0x06cd75af) /* 0.425161060 */, 17 },
3883 /* 3628 */ { MAD_F(0x06ce1994) /* 0.425317362 */, 17 },
3884 /* 3629 */ { MAD_F(0x06cebd7d) /* 0.425473678 */, 17 },
3885 /* 3630 */ { MAD_F(0x06cf6169) /* 0.425630009 */, 17 },
3886 /* 3631 */ { MAD_F(0x06d0055a) /* 0.425786354 */, 17 },
3887
3888 /* 3632 */ { MAD_F(0x06d0a94e) /* 0.425942714 */, 17 },
3889 /* 3633 */ { MAD_F(0x06d14d47) /* 0.426099088 */, 17 },
3890 /* 3634 */ { MAD_F(0x06d1f143) /* 0.426255476 */, 17 },
3891 /* 3635 */ { MAD_F(0x06d29543) /* 0.426411878 */, 17 },
3892 /* 3636 */ { MAD_F(0x06d33947) /* 0.426568295 */, 17 },
3893 /* 3637 */ { MAD_F(0x06d3dd4e) /* 0.426724726 */, 17 },
3894 /* 3638 */ { MAD_F(0x06d4815a) /* 0.426881172 */, 17 },
3895 /* 3639 */ { MAD_F(0x06d52569) /* 0.427037632 */, 17 },
3896 /* 3640 */ { MAD_F(0x06d5c97c) /* 0.427194106 */, 17 },
3897 /* 3641 */ { MAD_F(0x06d66d93) /* 0.427350594 */, 17 },
3898 /* 3642 */ { MAD_F(0x06d711ae) /* 0.427507097 */, 17 },
3899 /* 3643 */ { MAD_F(0x06d7b5cd) /* 0.427663614 */, 17 },
3900 /* 3644 */ { MAD_F(0x06d859f0) /* 0.427820146 */, 17 },
3901 /* 3645 */ { MAD_F(0x06d8fe16) /* 0.427976692 */, 17 },
3902 /* 3646 */ { MAD_F(0x06d9a240) /* 0.428133252 */, 17 },
3903 /* 3647 */ { MAD_F(0x06da466f) /* 0.428289826 */, 17 },
3904
3905 /* 3648 */ { MAD_F(0x06daeaa1) /* 0.428446415 */, 17 },
3906 /* 3649 */ { MAD_F(0x06db8ed6) /* 0.428603018 */, 17 },
3907 /* 3650 */ { MAD_F(0x06dc3310) /* 0.428759635 */, 17 },
3908 /* 3651 */ { MAD_F(0x06dcd74d) /* 0.428916267 */, 17 },
3909 /* 3652 */ { MAD_F(0x06dd7b8f) /* 0.429072913 */, 17 },
3910 /* 3653 */ { MAD_F(0x06de1fd4) /* 0.429229573 */, 17 },
3911 /* 3654 */ { MAD_F(0x06dec41d) /* 0.429386248 */, 17 },
3912 /* 3655 */ { MAD_F(0x06df686a) /* 0.429542937 */, 17 },
3913 /* 3656 */ { MAD_F(0x06e00cbb) /* 0.429699640 */, 17 },
3914 /* 3657 */ { MAD_F(0x06e0b10f) /* 0.429856357 */, 17 },
3915 /* 3658 */ { MAD_F(0x06e15567) /* 0.430013089 */, 17 },
3916 /* 3659 */ { MAD_F(0x06e1f9c4) /* 0.430169835 */, 17 },
3917 /* 3660 */ { MAD_F(0x06e29e24) /* 0.430326595 */, 17 },
3918 /* 3661 */ { MAD_F(0x06e34287) /* 0.430483370 */, 17 },
3919 /* 3662 */ { MAD_F(0x06e3e6ef) /* 0.430640159 */, 17 },
3920 /* 3663 */ { MAD_F(0x06e48b5b) /* 0.430796962 */, 17 },
3921
3922 /* 3664 */ { MAD_F(0x06e52fca) /* 0.430953779 */, 17 },
3923 /* 3665 */ { MAD_F(0x06e5d43d) /* 0.431110611 */, 17 },
3924 /* 3666 */ { MAD_F(0x06e678b4) /* 0.431267457 */, 17 },
3925 /* 3667 */ { MAD_F(0x06e71d2f) /* 0.431424317 */, 17 },
3926 /* 3668 */ { MAD_F(0x06e7c1ae) /* 0.431581192 */, 17 },
3927 /* 3669 */ { MAD_F(0x06e86630) /* 0.431738080 */, 17 },
3928 /* 3670 */ { MAD_F(0x06e90ab7) /* 0.431894983 */, 17 },
3929 /* 3671 */ { MAD_F(0x06e9af41) /* 0.432051900 */, 17 },
3930 /* 3672 */ { MAD_F(0x06ea53cf) /* 0.432208832 */, 17 },
3931 /* 3673 */ { MAD_F(0x06eaf860) /* 0.432365778 */, 17 },
3932 /* 3674 */ { MAD_F(0x06eb9cf6) /* 0.432522737 */, 17 },
3933 /* 3675 */ { MAD_F(0x06ec418f) /* 0.432679712 */, 17 },
3934 /* 3676 */ { MAD_F(0x06ece62d) /* 0.432836700 */, 17 },
3935 /* 3677 */ { MAD_F(0x06ed8ace) /* 0.432993703 */, 17 },
3936 /* 3678 */ { MAD_F(0x06ee2f73) /* 0.433150720 */, 17 },
3937 /* 3679 */ { MAD_F(0x06eed41b) /* 0.433307751 */, 17 },
3938
3939 /* 3680 */ { MAD_F(0x06ef78c8) /* 0.433464796 */, 17 },
3940 /* 3681 */ { MAD_F(0x06f01d78) /* 0.433621856 */, 17 },
3941 /* 3682 */ { MAD_F(0x06f0c22c) /* 0.433778929 */, 17 },
3942 /* 3683 */ { MAD_F(0x06f166e4) /* 0.433936017 */, 17 },
3943 /* 3684 */ { MAD_F(0x06f20ba0) /* 0.434093120 */, 17 },
3944 /* 3685 */ { MAD_F(0x06f2b060) /* 0.434250236 */, 17 },
3945 /* 3686 */ { MAD_F(0x06f35523) /* 0.434407367 */, 17 },
3946 /* 3687 */ { MAD_F(0x06f3f9eb) /* 0.434564512 */, 17 },
3947 /* 3688 */ { MAD_F(0x06f49eb6) /* 0.434721671 */, 17 },
3948 /* 3689 */ { MAD_F(0x06f54385) /* 0.434878844 */, 17 },
3949 /* 3690 */ { MAD_F(0x06f5e857) /* 0.435036032 */, 17 },
3950 /* 3691 */ { MAD_F(0x06f68d2e) /* 0.435193233 */, 17 },
3951 /* 3692 */ { MAD_F(0x06f73208) /* 0.435350449 */, 17 },
3952 /* 3693 */ { MAD_F(0x06f7d6e6) /* 0.435507679 */, 17 },
3953 /* 3694 */ { MAD_F(0x06f87bc8) /* 0.435664924 */, 17 },
3954 /* 3695 */ { MAD_F(0x06f920ae) /* 0.435822182 */, 17 },
3955
3956 /* 3696 */ { MAD_F(0x06f9c597) /* 0.435979455 */, 17 },
3957 /* 3697 */ { MAD_F(0x06fa6a85) /* 0.436136741 */, 17 },
3958 /* 3698 */ { MAD_F(0x06fb0f76) /* 0.436294042 */, 17 },
3959 /* 3699 */ { MAD_F(0x06fbb46b) /* 0.436451358 */, 17 },
3960 /* 3700 */ { MAD_F(0x06fc5964) /* 0.436608687 */, 17 },
3961 /* 3701 */ { MAD_F(0x06fcfe60) /* 0.436766031 */, 17 },
3962 /* 3702 */ { MAD_F(0x06fda361) /* 0.436923388 */, 17 },
3963 /* 3703 */ { MAD_F(0x06fe4865) /* 0.437080760 */, 17 },
3964 /* 3704 */ { MAD_F(0x06feed6d) /* 0.437238146 */, 17 },
3965 /* 3705 */ { MAD_F(0x06ff9279) /* 0.437395547 */, 17 },
3966 /* 3706 */ { MAD_F(0x07003788) /* 0.437552961 */, 17 },
3967 /* 3707 */ { MAD_F(0x0700dc9c) /* 0.437710389 */, 17 },
3968 /* 3708 */ { MAD_F(0x070181b3) /* 0.437867832 */, 17 },
3969 /* 3709 */ { MAD_F(0x070226ce) /* 0.438025289 */, 17 },
3970 /* 3710 */ { MAD_F(0x0702cbed) /* 0.438182760 */, 17 },
3971 /* 3711 */ { MAD_F(0x0703710f) /* 0.438340245 */, 17 },
3972
3973 /* 3712 */ { MAD_F(0x07041636) /* 0.438497744 */, 17 },
3974 /* 3713 */ { MAD_F(0x0704bb60) /* 0.438655258 */, 17 },
3975 /* 3714 */ { MAD_F(0x0705608e) /* 0.438812785 */, 17 },
3976 /* 3715 */ { MAD_F(0x070605c0) /* 0.438970327 */, 17 },
3977 /* 3716 */ { MAD_F(0x0706aaf5) /* 0.439127883 */, 17 },
3978 /* 3717 */ { MAD_F(0x0707502f) /* 0.439285453 */, 17 },
3979 /* 3718 */ { MAD_F(0x0707f56c) /* 0.439443037 */, 17 },
3980 /* 3719 */ { MAD_F(0x07089aad) /* 0.439600635 */, 17 },
3981 /* 3720 */ { MAD_F(0x07093ff2) /* 0.439758248 */, 17 },
3982 /* 3721 */ { MAD_F(0x0709e53a) /* 0.439915874 */, 17 },
3983 /* 3722 */ { MAD_F(0x070a8a86) /* 0.440073515 */, 17 },
3984 /* 3723 */ { MAD_F(0x070b2fd7) /* 0.440231170 */, 17 },
3985 /* 3724 */ { MAD_F(0x070bd52a) /* 0.440388839 */, 17 },
3986 /* 3725 */ { MAD_F(0x070c7a82) /* 0.440546522 */, 17 },
3987 /* 3726 */ { MAD_F(0x070d1fde) /* 0.440704219 */, 17 },
3988 /* 3727 */ { MAD_F(0x070dc53d) /* 0.440861930 */, 17 },
3989
3990 /* 3728 */ { MAD_F(0x070e6aa0) /* 0.441019655 */, 17 },
3991 /* 3729 */ { MAD_F(0x070f1007) /* 0.441177395 */, 17 },
3992 /* 3730 */ { MAD_F(0x070fb571) /* 0.441335148 */, 17 },
3993 /* 3731 */ { MAD_F(0x07105ae0) /* 0.441492916 */, 17 },
3994 /* 3732 */ { MAD_F(0x07110052) /* 0.441650697 */, 17 },
3995 /* 3733 */ { MAD_F(0x0711a5c8) /* 0.441808493 */, 17 },
3996 /* 3734 */ { MAD_F(0x07124b42) /* 0.441966303 */, 17 },
3997 /* 3735 */ { MAD_F(0x0712f0bf) /* 0.442124127 */, 17 },
3998 /* 3736 */ { MAD_F(0x07139641) /* 0.442281965 */, 17 },
3999 /* 3737 */ { MAD_F(0x07143bc6) /* 0.442439817 */, 17 },
4000 /* 3738 */ { MAD_F(0x0714e14f) /* 0.442597683 */, 17 },
4001 /* 3739 */ { MAD_F(0x071586db) /* 0.442755564 */, 17 },
4002 /* 3740 */ { MAD_F(0x07162c6c) /* 0.442913458 */, 17 },
4003 /* 3741 */ { MAD_F(0x0716d200) /* 0.443071366 */, 17 },
4004 /* 3742 */ { MAD_F(0x07177798) /* 0.443229289 */, 17 },
4005 /* 3743 */ { MAD_F(0x07181d34) /* 0.443387226 */, 17 },
4006
4007 /* 3744 */ { MAD_F(0x0718c2d3) /* 0.443545176 */, 17 },
4008 /* 3745 */ { MAD_F(0x07196877) /* 0.443703141 */, 17 },
4009 /* 3746 */ { MAD_F(0x071a0e1e) /* 0.443861120 */, 17 },
4010 /* 3747 */ { MAD_F(0x071ab3c9) /* 0.444019113 */, 17 },
4011 /* 3748 */ { MAD_F(0x071b5977) /* 0.444177119 */, 17 },
4012 /* 3749 */ { MAD_F(0x071bff2a) /* 0.444335140 */, 17 },
4013 /* 3750 */ { MAD_F(0x071ca4e0) /* 0.444493175 */, 17 },
4014 /* 3751 */ { MAD_F(0x071d4a9a) /* 0.444651224 */, 17 },
4015 /* 3752 */ { MAD_F(0x071df058) /* 0.444809288 */, 17 },
4016 /* 3753 */ { MAD_F(0x071e9619) /* 0.444967365 */, 17 },
4017 /* 3754 */ { MAD_F(0x071f3bde) /* 0.445125456 */, 17 },
4018 /* 3755 */ { MAD_F(0x071fe1a8) /* 0.445283561 */, 17 },
4019 /* 3756 */ { MAD_F(0x07208774) /* 0.445441680 */, 17 },
4020 /* 3757 */ { MAD_F(0x07212d45) /* 0.445599814 */, 17 },
4021 /* 3758 */ { MAD_F(0x0721d319) /* 0.445757961 */, 17 },
4022 /* 3759 */ { MAD_F(0x072278f1) /* 0.445916122 */, 17 },
4023
4024 /* 3760 */ { MAD_F(0x07231ecd) /* 0.446074298 */, 17 },
4025 /* 3761 */ { MAD_F(0x0723c4ad) /* 0.446232487 */, 17 },
4026 /* 3762 */ { MAD_F(0x07246a90) /* 0.446390690 */, 17 },
4027 /* 3763 */ { MAD_F(0x07251077) /* 0.446548908 */, 17 },
4028 /* 3764 */ { MAD_F(0x0725b662) /* 0.446707139 */, 17 },
4029 /* 3765 */ { MAD_F(0x07265c51) /* 0.446865385 */, 17 },
4030 /* 3766 */ { MAD_F(0x07270244) /* 0.447023644 */, 17 },
4031 /* 3767 */ { MAD_F(0x0727a83a) /* 0.447181918 */, 17 },
4032 /* 3768 */ { MAD_F(0x07284e34) /* 0.447340205 */, 17 },
4033 /* 3769 */ { MAD_F(0x0728f431) /* 0.447498507 */, 17 },
4034 /* 3770 */ { MAD_F(0x07299a33) /* 0.447656822 */, 17 },
4035 /* 3771 */ { MAD_F(0x072a4038) /* 0.447815152 */, 17 },
4036 /* 3772 */ { MAD_F(0x072ae641) /* 0.447973495 */, 17 },
4037 /* 3773 */ { MAD_F(0x072b8c4e) /* 0.448131853 */, 17 },
4038 /* 3774 */ { MAD_F(0x072c325e) /* 0.448290224 */, 17 },
4039 /* 3775 */ { MAD_F(0x072cd873) /* 0.448448609 */, 17 },
4040
4041 /* 3776 */ { MAD_F(0x072d7e8b) /* 0.448607009 */, 17 },
4042 /* 3777 */ { MAD_F(0x072e24a7) /* 0.448765422 */, 17 },
4043 /* 3778 */ { MAD_F(0x072ecac6) /* 0.448923850 */, 17 },
4044 /* 3779 */ { MAD_F(0x072f70e9) /* 0.449082291 */, 17 },
4045 /* 3780 */ { MAD_F(0x07301710) /* 0.449240746 */, 17 },
4046 /* 3781 */ { MAD_F(0x0730bd3b) /* 0.449399216 */, 17 },
4047 /* 3782 */ { MAD_F(0x0731636a) /* 0.449557699 */, 17 },
4048 /* 3783 */ { MAD_F(0x0732099c) /* 0.449716196 */, 17 },
4049 /* 3784 */ { MAD_F(0x0732afd2) /* 0.449874708 */, 17 },
4050 /* 3785 */ { MAD_F(0x0733560c) /* 0.450033233 */, 17 },
4051 /* 3786 */ { MAD_F(0x0733fc49) /* 0.450191772 */, 17 },
4052 /* 3787 */ { MAD_F(0x0734a28b) /* 0.450350325 */, 17 },
4053 /* 3788 */ { MAD_F(0x073548d0) /* 0.450508892 */, 17 },
4054 /* 3789 */ { MAD_F(0x0735ef18) /* 0.450667473 */, 17 },
4055 /* 3790 */ { MAD_F(0x07369565) /* 0.450826068 */, 17 },
4056 /* 3791 */ { MAD_F(0x07373bb5) /* 0.450984677 */, 17 },
4057
4058 /* 3792 */ { MAD_F(0x0737e209) /* 0.451143300 */, 17 },
4059 /* 3793 */ { MAD_F(0x07388861) /* 0.451301937 */, 17 },
4060 /* 3794 */ { MAD_F(0x07392ebc) /* 0.451460588 */, 17 },
4061 /* 3795 */ { MAD_F(0x0739d51c) /* 0.451619252 */, 17 },
4062 /* 3796 */ { MAD_F(0x073a7b7f) /* 0.451777931 */, 17 },
4063 /* 3797 */ { MAD_F(0x073b21e5) /* 0.451936623 */, 17 },
4064 /* 3798 */ { MAD_F(0x073bc850) /* 0.452095330 */, 17 },
4065 /* 3799 */ { MAD_F(0x073c6ebe) /* 0.452254050 */, 17 },
4066 /* 3800 */ { MAD_F(0x073d1530) /* 0.452412785 */, 17 },
4067 /* 3801 */ { MAD_F(0x073dbba6) /* 0.452571533 */, 17 },
4068 /* 3802 */ { MAD_F(0x073e621f) /* 0.452730295 */, 17 },
4069 /* 3803 */ { MAD_F(0x073f089c) /* 0.452889071 */, 17 },
4070 /* 3804 */ { MAD_F(0x073faf1d) /* 0.453047861 */, 17 },
4071 /* 3805 */ { MAD_F(0x074055a2) /* 0.453206665 */, 17 },
4072 /* 3806 */ { MAD_F(0x0740fc2a) /* 0.453365483 */, 17 },
4073 /* 3807 */ { MAD_F(0x0741a2b6) /* 0.453524315 */, 17 },
4074
4075 /* 3808 */ { MAD_F(0x07424946) /* 0.453683161 */, 17 },
4076 /* 3809 */ { MAD_F(0x0742efd9) /* 0.453842020 */, 17 },
4077 /* 3810 */ { MAD_F(0x07439671) /* 0.454000894 */, 17 },
4078 /* 3811 */ { MAD_F(0x07443d0c) /* 0.454159781 */, 17 },
4079 /* 3812 */ { MAD_F(0x0744e3aa) /* 0.454318683 */, 17 },
4080 /* 3813 */ { MAD_F(0x07458a4d) /* 0.454477598 */, 17 },
4081 /* 3814 */ { MAD_F(0x074630f3) /* 0.454636527 */, 17 },
4082 /* 3815 */ { MAD_F(0x0746d79d) /* 0.454795470 */, 17 },
4083 /* 3816 */ { MAD_F(0x07477e4b) /* 0.454954427 */, 17 },
4084 /* 3817 */ { MAD_F(0x074824fc) /* 0.455113397 */, 17 },
4085 /* 3818 */ { MAD_F(0x0748cbb1) /* 0.455272382 */, 17 },
4086 /* 3819 */ { MAD_F(0x0749726a) /* 0.455431381 */, 17 },
4087 /* 3820 */ { MAD_F(0x074a1927) /* 0.455590393 */, 17 },
4088 /* 3821 */ { MAD_F(0x074abfe7) /* 0.455749419 */, 17 },
4089 /* 3822 */ { MAD_F(0x074b66ab) /* 0.455908459 */, 17 },
4090 /* 3823 */ { MAD_F(0x074c0d73) /* 0.456067513 */, 17 },
4091
4092 /* 3824 */ { MAD_F(0x074cb43e) /* 0.456226581 */, 17 },
4093 /* 3825 */ { MAD_F(0x074d5b0d) /* 0.456385663 */, 17 },
4094 /* 3826 */ { MAD_F(0x074e01e0) /* 0.456544759 */, 17 },
4095 /* 3827 */ { MAD_F(0x074ea8b7) /* 0.456703868 */, 17 },
4096 /* 3828 */ { MAD_F(0x074f4f91) /* 0.456862992 */, 17 },
4097 /* 3829 */ { MAD_F(0x074ff66f) /* 0.457022129 */, 17 },
4098 /* 3830 */ { MAD_F(0x07509d51) /* 0.457181280 */, 17 },
4099 /* 3831 */ { MAD_F(0x07514437) /* 0.457340445 */, 17 },
4100 /* 3832 */ { MAD_F(0x0751eb20) /* 0.457499623 */, 17 },
4101 /* 3833 */ { MAD_F(0x0752920d) /* 0.457658816 */, 17 },
4102 /* 3834 */ { MAD_F(0x075338fd) /* 0.457818022 */, 17 },
4103 /* 3835 */ { MAD_F(0x0753dff2) /* 0.457977243 */, 17 },
4104 /* 3836 */ { MAD_F(0x075486ea) /* 0.458136477 */, 17 },
4105 /* 3837 */ { MAD_F(0x07552de6) /* 0.458295725 */, 17 },
4106 /* 3838 */ { MAD_F(0x0755d4e5) /* 0.458454987 */, 17 },
4107 /* 3839 */ { MAD_F(0x07567be8) /* 0.458614262 */, 17 },
4108
4109 /* 3840 */ { MAD_F(0x075722ef) /* 0.458773552 */, 17 },
4110 /* 3841 */ { MAD_F(0x0757c9fa) /* 0.458932855 */, 17 },
4111 /* 3842 */ { MAD_F(0x07587108) /* 0.459092172 */, 17 },
4112 /* 3843 */ { MAD_F(0x0759181a) /* 0.459251503 */, 17 },
4113 /* 3844 */ { MAD_F(0x0759bf30) /* 0.459410848 */, 17 },
4114 /* 3845 */ { MAD_F(0x075a664a) /* 0.459570206 */, 17 },
4115 /* 3846 */ { MAD_F(0x075b0d67) /* 0.459729579 */, 17 },
4116 /* 3847 */ { MAD_F(0x075bb488) /* 0.459888965 */, 17 },
4117 /* 3848 */ { MAD_F(0x075c5bac) /* 0.460048365 */, 17 },
4118 /* 3849 */ { MAD_F(0x075d02d5) /* 0.460207779 */, 17 },
4119 /* 3850 */ { MAD_F(0x075daa01) /* 0.460367206 */, 17 },
4120 /* 3851 */ { MAD_F(0x075e5130) /* 0.460526648 */, 17 },
4121 /* 3852 */ { MAD_F(0x075ef864) /* 0.460686103 */, 17 },
4122 /* 3853 */ { MAD_F(0x075f9f9b) /* 0.460845572 */, 17 },
4123 /* 3854 */ { MAD_F(0x076046d6) /* 0.461005055 */, 17 },
4124 /* 3855 */ { MAD_F(0x0760ee14) /* 0.461164552 */, 17 },
4125
4126 /* 3856 */ { MAD_F(0x07619557) /* 0.461324062 */, 17 },
4127 /* 3857 */ { MAD_F(0x07623c9d) /* 0.461483586 */, 17 },
4128 /* 3858 */ { MAD_F(0x0762e3e6) /* 0.461643124 */, 17 },
4129 /* 3859 */ { MAD_F(0x07638b34) /* 0.461802676 */, 17 },
4130 /* 3860 */ { MAD_F(0x07643285) /* 0.461962242 */, 17 },
4131 /* 3861 */ { MAD_F(0x0764d9d9) /* 0.462121821 */, 17 },
4132 /* 3862 */ { MAD_F(0x07658132) /* 0.462281414 */, 17 },
4133 /* 3863 */ { MAD_F(0x0766288e) /* 0.462441021 */, 17 },
4134 /* 3864 */ { MAD_F(0x0766cfee) /* 0.462600642 */, 17 },
4135 /* 3865 */ { MAD_F(0x07677751) /* 0.462760276 */, 17 },
4136 /* 3866 */ { MAD_F(0x07681eb9) /* 0.462919924 */, 17 },
4137 /* 3867 */ { MAD_F(0x0768c624) /* 0.463079586 */, 17 },
4138 /* 3868 */ { MAD_F(0x07696d92) /* 0.463239262 */, 17 },
4139 /* 3869 */ { MAD_F(0x076a1505) /* 0.463398951 */, 17 },
4140 /* 3870 */ { MAD_F(0x076abc7b) /* 0.463558655 */, 17 },
4141 /* 3871 */ { MAD_F(0x076b63f4) /* 0.463718372 */, 17 },
4142
4143 /* 3872 */ { MAD_F(0x076c0b72) /* 0.463878102 */, 17 },
4144 /* 3873 */ { MAD_F(0x076cb2f3) /* 0.464037847 */, 17 },
4145 /* 3874 */ { MAD_F(0x076d5a78) /* 0.464197605 */, 17 },
4146 /* 3875 */ { MAD_F(0x076e0200) /* 0.464357377 */, 17 },
4147 /* 3876 */ { MAD_F(0x076ea98c) /* 0.464517163 */, 17 },
4148 /* 3877 */ { MAD_F(0x076f511c) /* 0.464676962 */, 17 },
4149 /* 3878 */ { MAD_F(0x076ff8b0) /* 0.464836776 */, 17 },
4150 /* 3879 */ { MAD_F(0x0770a047) /* 0.464996603 */, 17 },
4151 /* 3880 */ { MAD_F(0x077147e2) /* 0.465156443 */, 17 },
4152 /* 3881 */ { MAD_F(0x0771ef80) /* 0.465316298 */, 17 },
4153 /* 3882 */ { MAD_F(0x07729723) /* 0.465476166 */, 17 },
4154 /* 3883 */ { MAD_F(0x07733ec9) /* 0.465636048 */, 17 },
4155 /* 3884 */ { MAD_F(0x0773e672) /* 0.465795943 */, 17 },
4156 /* 3885 */ { MAD_F(0x07748e20) /* 0.465955853 */, 17 },
4157 /* 3886 */ { MAD_F(0x077535d1) /* 0.466115776 */, 17 },
4158 /* 3887 */ { MAD_F(0x0775dd85) /* 0.466275713 */, 17 },
4159
4160 /* 3888 */ { MAD_F(0x0776853e) /* 0.466435663 */, 17 },
4161 /* 3889 */ { MAD_F(0x07772cfa) /* 0.466595627 */, 17 },
4162 /* 3890 */ { MAD_F(0x0777d4ba) /* 0.466755605 */, 17 },
4163 /* 3891 */ { MAD_F(0x07787c7d) /* 0.466915597 */, 17 },
4164 /* 3892 */ { MAD_F(0x07792444) /* 0.467075602 */, 17 },
4165 /* 3893 */ { MAD_F(0x0779cc0f) /* 0.467235621 */, 17 },
4166 /* 3894 */ { MAD_F(0x077a73dd) /* 0.467395654 */, 17 },
4167 /* 3895 */ { MAD_F(0x077b1baf) /* 0.467555701 */, 17 },
4168 /* 3896 */ { MAD_F(0x077bc385) /* 0.467715761 */, 17 },
4169 /* 3897 */ { MAD_F(0x077c6b5f) /* 0.467875835 */, 17 },
4170 /* 3898 */ { MAD_F(0x077d133c) /* 0.468035922 */, 17 },
4171 /* 3899 */ { MAD_F(0x077dbb1d) /* 0.468196023 */, 17 },
4172 /* 3900 */ { MAD_F(0x077e6301) /* 0.468356138 */, 17 },
4173 /* 3901 */ { MAD_F(0x077f0ae9) /* 0.468516267 */, 17 },
4174 /* 3902 */ { MAD_F(0x077fb2d5) /* 0.468676409 */, 17 },
4175 /* 3903 */ { MAD_F(0x07805ac5) /* 0.468836565 */, 17 },
4176
4177 /* 3904 */ { MAD_F(0x078102b8) /* 0.468996735 */, 17 },
4178 /* 3905 */ { MAD_F(0x0781aaaf) /* 0.469156918 */, 17 },
4179 /* 3906 */ { MAD_F(0x078252aa) /* 0.469317115 */, 17 },
4180 /* 3907 */ { MAD_F(0x0782faa8) /* 0.469477326 */, 17 },
4181 /* 3908 */ { MAD_F(0x0783a2aa) /* 0.469637550 */, 17 },
4182 /* 3909 */ { MAD_F(0x07844aaf) /* 0.469797788 */, 17 },
4183 /* 3910 */ { MAD_F(0x0784f2b8) /* 0.469958040 */, 17 },
4184 /* 3911 */ { MAD_F(0x07859ac5) /* 0.470118305 */, 17 },
4185 /* 3912 */ { MAD_F(0x078642d6) /* 0.470278584 */, 17 },
4186 /* 3913 */ { MAD_F(0x0786eaea) /* 0.470438877 */, 17 },
4187 /* 3914 */ { MAD_F(0x07879302) /* 0.470599183 */, 17 },
4188 /* 3915 */ { MAD_F(0x07883b1e) /* 0.470759503 */, 17 },
4189 /* 3916 */ { MAD_F(0x0788e33d) /* 0.470919836 */, 17 },
4190 /* 3917 */ { MAD_F(0x07898b60) /* 0.471080184 */, 17 },
4191 /* 3918 */ { MAD_F(0x078a3386) /* 0.471240545 */, 17 },
4192 /* 3919 */ { MAD_F(0x078adbb0) /* 0.471400919 */, 17 },
4193
4194 /* 3920 */ { MAD_F(0x078b83de) /* 0.471561307 */, 17 },
4195 /* 3921 */ { MAD_F(0x078c2c10) /* 0.471721709 */, 17 },
4196 /* 3922 */ { MAD_F(0x078cd445) /* 0.471882125 */, 17 },
4197 /* 3923 */ { MAD_F(0x078d7c7e) /* 0.472042554 */, 17 },
4198 /* 3924 */ { MAD_F(0x078e24ba) /* 0.472202996 */, 17 },
4199 /* 3925 */ { MAD_F(0x078eccfb) /* 0.472363453 */, 17 },
4200 /* 3926 */ { MAD_F(0x078f753e) /* 0.472523923 */, 17 },
4201 /* 3927 */ { MAD_F(0x07901d86) /* 0.472684406 */, 17 },
4202 /* 3928 */ { MAD_F(0x0790c5d1) /* 0.472844904 */, 17 },
4203 /* 3929 */ { MAD_F(0x07916e20) /* 0.473005414 */, 17 },
4204 /* 3930 */ { MAD_F(0x07921672) /* 0.473165939 */, 17 },
4205 /* 3931 */ { MAD_F(0x0792bec8) /* 0.473326477 */, 17 },
4206 /* 3932 */ { MAD_F(0x07936722) /* 0.473487029 */, 17 },
4207 /* 3933 */ { MAD_F(0x07940f80) /* 0.473647594 */, 17 },
4208 /* 3934 */ { MAD_F(0x0794b7e1) /* 0.473808173 */, 17 },
4209 /* 3935 */ { MAD_F(0x07956045) /* 0.473968765 */, 17 },
4210
4211 /* 3936 */ { MAD_F(0x079608ae) /* 0.474129372 */, 17 },
4212 /* 3937 */ { MAD_F(0x0796b11a) /* 0.474289991 */, 17 },
4213 /* 3938 */ { MAD_F(0x0797598a) /* 0.474450625 */, 17 },
4214 /* 3939 */ { MAD_F(0x079801fd) /* 0.474611272 */, 17 },
4215 /* 3940 */ { MAD_F(0x0798aa74) /* 0.474771932 */, 17 },
4216 /* 3941 */ { MAD_F(0x079952ee) /* 0.474932606 */, 17 },
4217 /* 3942 */ { MAD_F(0x0799fb6d) /* 0.475093294 */, 17 },
4218 /* 3943 */ { MAD_F(0x079aa3ef) /* 0.475253995 */, 17 },
4219 /* 3944 */ { MAD_F(0x079b4c74) /* 0.475414710 */, 17 },
4220 /* 3945 */ { MAD_F(0x079bf4fd) /* 0.475575439 */, 17 },
4221 /* 3946 */ { MAD_F(0x079c9d8a) /* 0.475736181 */, 17 },
4222 /* 3947 */ { MAD_F(0x079d461b) /* 0.475896936 */, 17 },
4223 /* 3948 */ { MAD_F(0x079deeaf) /* 0.476057705 */, 17 },
4224 /* 3949 */ { MAD_F(0x079e9747) /* 0.476218488 */, 17 },
4225 /* 3950 */ { MAD_F(0x079f3fe2) /* 0.476379285 */, 17 },
4226 /* 3951 */ { MAD_F(0x079fe881) /* 0.476540095 */, 17 },
4227
4228 /* 3952 */ { MAD_F(0x07a09124) /* 0.476700918 */, 17 },
4229 /* 3953 */ { MAD_F(0x07a139ca) /* 0.476861755 */, 17 },
4230 /* 3954 */ { MAD_F(0x07a1e274) /* 0.477022606 */, 17 },
4231 /* 3955 */ { MAD_F(0x07a28b22) /* 0.477183470 */, 17 },
4232 /* 3956 */ { MAD_F(0x07a333d3) /* 0.477344348 */, 17 },
4233 /* 3957 */ { MAD_F(0x07a3dc88) /* 0.477505239 */, 17 },
4234 /* 3958 */ { MAD_F(0x07a48541) /* 0.477666144 */, 17 },
4235 /* 3959 */ { MAD_F(0x07a52dfd) /* 0.477827062 */, 17 },
4236 /* 3960 */ { MAD_F(0x07a5d6bd) /* 0.477987994 */, 17 },
4237 /* 3961 */ { MAD_F(0x07a67f80) /* 0.478148940 */, 17 },
4238 /* 3962 */ { MAD_F(0x07a72847) /* 0.478309899 */, 17 },
4239 /* 3963 */ { MAD_F(0x07a7d112) /* 0.478470871 */, 17 },
4240 /* 3964 */ { MAD_F(0x07a879e1) /* 0.478631857 */, 17 },
4241 /* 3965 */ { MAD_F(0x07a922b3) /* 0.478792857 */, 17 },
4242 /* 3966 */ { MAD_F(0x07a9cb88) /* 0.478953870 */, 17 },
4243 /* 3967 */ { MAD_F(0x07aa7462) /* 0.479114897 */, 17 },
4244
4245 /* 3968 */ { MAD_F(0x07ab1d3e) /* 0.479275937 */, 17 },
4246 /* 3969 */ { MAD_F(0x07abc61f) /* 0.479436991 */, 17 },
4247 /* 3970 */ { MAD_F(0x07ac6f03) /* 0.479598058 */, 17 },
4248 /* 3971 */ { MAD_F(0x07ad17eb) /* 0.479759139 */, 17 },
4249 /* 3972 */ { MAD_F(0x07adc0d6) /* 0.479920233 */, 17 },
4250 /* 3973 */ { MAD_F(0x07ae69c6) /* 0.480081341 */, 17 },
4251 /* 3974 */ { MAD_F(0x07af12b8) /* 0.480242463 */, 17 },
4252 /* 3975 */ { MAD_F(0x07afbbaf) /* 0.480403598 */, 17 },
4253 /* 3976 */ { MAD_F(0x07b064a8) /* 0.480564746 */, 17 },
4254 /* 3977 */ { MAD_F(0x07b10da6) /* 0.480725908 */, 17 },
4255 /* 3978 */ { MAD_F(0x07b1b6a7) /* 0.480887083 */, 17 },
4256 /* 3979 */ { MAD_F(0x07b25fac) /* 0.481048272 */, 17 },
4257 /* 3980 */ { MAD_F(0x07b308b5) /* 0.481209475 */, 17 },
4258 /* 3981 */ { MAD_F(0x07b3b1c1) /* 0.481370691 */, 17 },
4259 /* 3982 */ { MAD_F(0x07b45ad0) /* 0.481531920 */, 17 },
4260 /* 3983 */ { MAD_F(0x07b503e4) /* 0.481693163 */, 17 },
4261
4262 /* 3984 */ { MAD_F(0x07b5acfb) /* 0.481854420 */, 17 },
4263 /* 3985 */ { MAD_F(0x07b65615) /* 0.482015690 */, 17 },
4264 /* 3986 */ { MAD_F(0x07b6ff33) /* 0.482176973 */, 17 },
4265 /* 3987 */ { MAD_F(0x07b7a855) /* 0.482338270 */, 17 },
4266 /* 3988 */ { MAD_F(0x07b8517b) /* 0.482499580 */, 17 },
4267 /* 3989 */ { MAD_F(0x07b8faa4) /* 0.482660904 */, 17 },
4268 /* 3990 */ { MAD_F(0x07b9a3d0) /* 0.482822242 */, 17 },
4269 /* 3991 */ { MAD_F(0x07ba4d01) /* 0.482983592 */, 17 },
4270 /* 3992 */ { MAD_F(0x07baf635) /* 0.483144957 */, 17 },
4271 /* 3993 */ { MAD_F(0x07bb9f6c) /* 0.483306335 */, 17 },
4272 /* 3994 */ { MAD_F(0x07bc48a7) /* 0.483467726 */, 17 },
4273 /* 3995 */ { MAD_F(0x07bcf1e6) /* 0.483629131 */, 17 },
4274 /* 3996 */ { MAD_F(0x07bd9b28) /* 0.483790549 */, 17 },
4275 /* 3997 */ { MAD_F(0x07be446e) /* 0.483951980 */, 17 },
4276 /* 3998 */ { MAD_F(0x07beedb8) /* 0.484113426 */, 17 },
4277 /* 3999 */ { MAD_F(0x07bf9705) /* 0.484274884 */, 17 },
4278
4279 /* 4000 */ { MAD_F(0x07c04056) /* 0.484436356 */, 17 },
4280 /* 4001 */ { MAD_F(0x07c0e9aa) /* 0.484597842 */, 17 },
4281 /* 4002 */ { MAD_F(0x07c19302) /* 0.484759341 */, 17 },
4282 /* 4003 */ { MAD_F(0x07c23c5e) /* 0.484920853 */, 17 },
4283 /* 4004 */ { MAD_F(0x07c2e5bd) /* 0.485082379 */, 17 },
4284 /* 4005 */ { MAD_F(0x07c38f20) /* 0.485243918 */, 17 },
4285 /* 4006 */ { MAD_F(0x07c43887) /* 0.485405471 */, 17 },
4286 /* 4007 */ { MAD_F(0x07c4e1f1) /* 0.485567037 */, 17 },
4287 /* 4008 */ { MAD_F(0x07c58b5f) /* 0.485728617 */, 17 },
4288 /* 4009 */ { MAD_F(0x07c634d0) /* 0.485890210 */, 17 },
4289 /* 4010 */ { MAD_F(0x07c6de45) /* 0.486051817 */, 17 },
4290 /* 4011 */ { MAD_F(0x07c787bd) /* 0.486213436 */, 17 },
4291 /* 4012 */ { MAD_F(0x07c83139) /* 0.486375070 */, 17 },
4292 /* 4013 */ { MAD_F(0x07c8dab9) /* 0.486536717 */, 17 },
4293 /* 4014 */ { MAD_F(0x07c9843c) /* 0.486698377 */, 17 },
4294 /* 4015 */ { MAD_F(0x07ca2dc3) /* 0.486860051 */, 17 },
4295
4296 /* 4016 */ { MAD_F(0x07cad74e) /* 0.487021738 */, 17 },
4297 /* 4017 */ { MAD_F(0x07cb80dc) /* 0.487183438 */, 17 },
4298 /* 4018 */ { MAD_F(0x07cc2a6e) /* 0.487345152 */, 17 },
4299 /* 4019 */ { MAD_F(0x07ccd403) /* 0.487506879 */, 17 },
4300 /* 4020 */ { MAD_F(0x07cd7d9c) /* 0.487668620 */, 17 },
4301 /* 4021 */ { MAD_F(0x07ce2739) /* 0.487830374 */, 17 },
4302 /* 4022 */ { MAD_F(0x07ced0d9) /* 0.487992142 */, 17 },
4303 /* 4023 */ { MAD_F(0x07cf7a7d) /* 0.488153923 */, 17 },
4304 /* 4024 */ { MAD_F(0x07d02424) /* 0.488315717 */, 17 },
4305 /* 4025 */ { MAD_F(0x07d0cdcf) /* 0.488477525 */, 17 },
4306 /* 4026 */ { MAD_F(0x07d1777e) /* 0.488639346 */, 17 },
4307 /* 4027 */ { MAD_F(0x07d22130) /* 0.488801181 */, 17 },
4308 /* 4028 */ { MAD_F(0x07d2cae5) /* 0.488963029 */, 17 },
4309 /* 4029 */ { MAD_F(0x07d3749f) /* 0.489124890 */, 17 },
4310 /* 4030 */ { MAD_F(0x07d41e5c) /* 0.489286765 */, 17 },
4311 /* 4031 */ { MAD_F(0x07d4c81c) /* 0.489448653 */, 17 },
4312
4313 /* 4032 */ { MAD_F(0x07d571e0) /* 0.489610555 */, 17 },
4314 /* 4033 */ { MAD_F(0x07d61ba8) /* 0.489772470 */, 17 },
4315 /* 4034 */ { MAD_F(0x07d6c573) /* 0.489934398 */, 17 },
4316 /* 4035 */ { MAD_F(0x07d76f42) /* 0.490096340 */, 17 },
4317 /* 4036 */ { MAD_F(0x07d81915) /* 0.490258295 */, 17 },
4318 /* 4037 */ { MAD_F(0x07d8c2eb) /* 0.490420263 */, 17 },
4319 /* 4038 */ { MAD_F(0x07d96cc4) /* 0.490582245 */, 17 },
4320 /* 4039 */ { MAD_F(0x07da16a2) /* 0.490744240 */, 17 },
4321 /* 4040 */ { MAD_F(0x07dac083) /* 0.490906249 */, 17 },
4322 /* 4041 */ { MAD_F(0x07db6a67) /* 0.491068271 */, 17 },
4323 /* 4042 */ { MAD_F(0x07dc144f) /* 0.491230306 */, 17 },
4324 /* 4043 */ { MAD_F(0x07dcbe3b) /* 0.491392355 */, 17 },
4325 /* 4044 */ { MAD_F(0x07dd682a) /* 0.491554417 */, 17 },
4326 /* 4045 */ { MAD_F(0x07de121d) /* 0.491716492 */, 17 },
4327 /* 4046 */ { MAD_F(0x07debc13) /* 0.491878581 */, 17 },
4328 /* 4047 */ { MAD_F(0x07df660d) /* 0.492040683 */, 17 },
4329
4330 /* 4048 */ { MAD_F(0x07e0100a) /* 0.492202799 */, 17 },
4331 /* 4049 */ { MAD_F(0x07e0ba0c) /* 0.492364928 */, 17 },
4332 /* 4050 */ { MAD_F(0x07e16410) /* 0.492527070 */, 17 },
4333 /* 4051 */ { MAD_F(0x07e20e19) /* 0.492689225 */, 17 },
4334 /* 4052 */ { MAD_F(0x07e2b824) /* 0.492851394 */, 17 },
4335 /* 4053 */ { MAD_F(0x07e36234) /* 0.493013576 */, 17 },
4336 /* 4054 */ { MAD_F(0x07e40c47) /* 0.493175772 */, 17 },
4337 /* 4055 */ { MAD_F(0x07e4b65e) /* 0.493337981 */, 17 },
4338 /* 4056 */ { MAD_F(0x07e56078) /* 0.493500203 */, 17 },
4339 /* 4057 */ { MAD_F(0x07e60a95) /* 0.493662438 */, 17 },
4340 /* 4058 */ { MAD_F(0x07e6b4b7) /* 0.493824687 */, 17 },
4341 /* 4059 */ { MAD_F(0x07e75edc) /* 0.493986949 */, 17 },
4342 /* 4060 */ { MAD_F(0x07e80904) /* 0.494149225 */, 17 },
4343 /* 4061 */ { MAD_F(0x07e8b330) /* 0.494311514 */, 17 },
4344 /* 4062 */ { MAD_F(0x07e95d60) /* 0.494473816 */, 17 },
4345 /* 4063 */ { MAD_F(0x07ea0793) /* 0.494636131 */, 17 },
4346
4347 /* 4064 */ { MAD_F(0x07eab1ca) /* 0.494798460 */, 17 },
4348 /* 4065 */ { MAD_F(0x07eb5c04) /* 0.494960802 */, 17 },
4349 /* 4066 */ { MAD_F(0x07ec0642) /* 0.495123158 */, 17 },
4350 /* 4067 */ { MAD_F(0x07ecb084) /* 0.495285526 */, 17 },
4351 /* 4068 */ { MAD_F(0x07ed5ac9) /* 0.495447908 */, 17 },
4352 /* 4069 */ { MAD_F(0x07ee0512) /* 0.495610304 */, 17 },
4353 /* 4070 */ { MAD_F(0x07eeaf5e) /* 0.495772712 */, 17 },
4354 /* 4071 */ { MAD_F(0x07ef59ae) /* 0.495935134 */, 17 },
4355 /* 4072 */ { MAD_F(0x07f00401) /* 0.496097570 */, 17 },
4356 /* 4073 */ { MAD_F(0x07f0ae58) /* 0.496260018 */, 17 },
4357 /* 4074 */ { MAD_F(0x07f158b3) /* 0.496422480 */, 17 },
4358 /* 4075 */ { MAD_F(0x07f20311) /* 0.496584955 */, 17 },
4359 /* 4076 */ { MAD_F(0x07f2ad72) /* 0.496747444 */, 17 },
4360 /* 4077 */ { MAD_F(0x07f357d8) /* 0.496909945 */, 17 },
4361 /* 4078 */ { MAD_F(0x07f40240) /* 0.497072460 */, 17 },
4362 /* 4079 */ { MAD_F(0x07f4acad) /* 0.497234989 */, 17 },
4363
4364 /* 4080 */ { MAD_F(0x07f5571d) /* 0.497397530 */, 17 },
4365 /* 4081 */ { MAD_F(0x07f60190) /* 0.497560085 */, 17 },
4366 /* 4082 */ { MAD_F(0x07f6ac07) /* 0.497722653 */, 17 },
4367 /* 4083 */ { MAD_F(0x07f75682) /* 0.497885235 */, 17 },
4368 /* 4084 */ { MAD_F(0x07f80100) /* 0.498047829 */, 17 },
4369 /* 4085 */ { MAD_F(0x07f8ab82) /* 0.498210437 */, 17 },
4370 /* 4086 */ { MAD_F(0x07f95607) /* 0.498373058 */, 17 },
4371 /* 4087 */ { MAD_F(0x07fa0090) /* 0.498535693 */, 17 },
4372 /* 4088 */ { MAD_F(0x07faab1c) /* 0.498698341 */, 17 },
4373 /* 4089 */ { MAD_F(0x07fb55ac) /* 0.498861002 */, 17 },
4374 /* 4090 */ { MAD_F(0x07fc0040) /* 0.499023676 */, 17 },
4375 /* 4091 */ { MAD_F(0x07fcaad7) /* 0.499186364 */, 17 },
4376 /* 4092 */ { MAD_F(0x07fd5572) /* 0.499349064 */, 17 },
4377 /* 4093 */ { MAD_F(0x07fe0010) /* 0.499511778 */, 17 },
4378 /* 4094 */ { MAD_F(0x07feaab2) /* 0.499674506 */, 17 },
4379 /* 4095 */ { MAD_F(0x07ff5557) /* 0.499837246 */, 17 },
4380
4381 /* 4096 */ { MAD_F(0x04000000) /* 0.250000000 */, 18 },
4382 /* 4097 */ { MAD_F(0x04005556) /* 0.250081384 */, 18 },
4383 /* 4098 */ { MAD_F(0x0400aaae) /* 0.250162774 */, 18 },
4384 /* 4099 */ { MAD_F(0x04010008) /* 0.250244170 */, 18 },
4385 /* 4100 */ { MAD_F(0x04015563) /* 0.250325574 */, 18 },
4386 /* 4101 */ { MAD_F(0x0401aac1) /* 0.250406984 */, 18 },
4387 /* 4102 */ { MAD_F(0x04020020) /* 0.250488400 */, 18 },
4388 /* 4103 */ { MAD_F(0x04025581) /* 0.250569824 */, 18 },
4389 /* 4104 */ { MAD_F(0x0402aae3) /* 0.250651254 */, 18 },
4390 /* 4105 */ { MAD_F(0x04030048) /* 0.250732690 */, 18 },
4391 /* 4106 */ { MAD_F(0x040355ae) /* 0.250814133 */, 18 },
4392 /* 4107 */ { MAD_F(0x0403ab16) /* 0.250895583 */, 18 },
4393 /* 4108 */ { MAD_F(0x04040080) /* 0.250977039 */, 18 },
4394 /* 4109 */ { MAD_F(0x040455eb) /* 0.251058502 */, 18 },
4395 /* 4110 */ { MAD_F(0x0404ab59) /* 0.251139971 */, 18 },
4396 /* 4111 */ { MAD_F(0x040500c8) /* 0.251221448 */, 18 },
4397
4398 /* 4112 */ { MAD_F(0x04055638) /* 0.251302930 */, 18 },
4399 /* 4113 */ { MAD_F(0x0405abab) /* 0.251384420 */, 18 },
4400 /* 4114 */ { MAD_F(0x0406011f) /* 0.251465916 */, 18 },
4401 /* 4115 */ { MAD_F(0x04065696) /* 0.251547418 */, 18 },
4402 /* 4116 */ { MAD_F(0x0406ac0e) /* 0.251628927 */, 18 },
4403 /* 4117 */ { MAD_F(0x04070187) /* 0.251710443 */, 18 },
4404 /* 4118 */ { MAD_F(0x04075703) /* 0.251791965 */, 18 },
4405 /* 4119 */ { MAD_F(0x0407ac80) /* 0.251873494 */, 18 },
4406 /* 4120 */ { MAD_F(0x040801ff) /* 0.251955030 */, 18 },
4407 /* 4121 */ { MAD_F(0x04085780) /* 0.252036572 */, 18 },
4408 /* 4122 */ { MAD_F(0x0408ad02) /* 0.252118121 */, 18 },
4409 /* 4123 */ { MAD_F(0x04090287) /* 0.252199676 */, 18 },
4410 /* 4124 */ { MAD_F(0x0409580d) /* 0.252281238 */, 18 },
4411 /* 4125 */ { MAD_F(0x0409ad95) /* 0.252362807 */, 18 },
4412 /* 4126 */ { MAD_F(0x040a031e) /* 0.252444382 */, 18 },
4413 /* 4127 */ { MAD_F(0x040a58aa) /* 0.252525963 */, 18 },
4414
4415 /* 4128 */ { MAD_F(0x040aae37) /* 0.252607552 */, 18 },
4416 /* 4129 */ { MAD_F(0x040b03c6) /* 0.252689147 */, 18 },
4417 /* 4130 */ { MAD_F(0x040b5957) /* 0.252770748 */, 18 },
4418 /* 4131 */ { MAD_F(0x040baee9) /* 0.252852356 */, 18 },
4419 /* 4132 */ { MAD_F(0x040c047e) /* 0.252933971 */, 18 },
4420 /* 4133 */ { MAD_F(0x040c5a14) /* 0.253015592 */, 18 },
4421 /* 4134 */ { MAD_F(0x040cafab) /* 0.253097220 */, 18 },
4422 /* 4135 */ { MAD_F(0x040d0545) /* 0.253178854 */, 18 },
4423 /* 4136 */ { MAD_F(0x040d5ae0) /* 0.253260495 */, 18 },
4424 /* 4137 */ { MAD_F(0x040db07d) /* 0.253342143 */, 18 },
4425 /* 4138 */ { MAD_F(0x040e061c) /* 0.253423797 */, 18 },
4426 /* 4139 */ { MAD_F(0x040e5bbd) /* 0.253505457 */, 18 },
4427 /* 4140 */ { MAD_F(0x040eb15f) /* 0.253587125 */, 18 },
4428 /* 4141 */ { MAD_F(0x040f0703) /* 0.253668799 */, 18 },
4429 /* 4142 */ { MAD_F(0x040f5ca9) /* 0.253750479 */, 18 },
4430 /* 4143 */ { MAD_F(0x040fb251) /* 0.253832166 */, 18 },
4431
4432 /* 4144 */ { MAD_F(0x041007fa) /* 0.253913860 */, 18 },
4433 /* 4145 */ { MAD_F(0x04105da6) /* 0.253995560 */, 18 },
4434 /* 4146 */ { MAD_F(0x0410b353) /* 0.254077266 */, 18 },
4435 /* 4147 */ { MAD_F(0x04110901) /* 0.254158980 */, 18 },
4436 /* 4148 */ { MAD_F(0x04115eb2) /* 0.254240700 */, 18 },
4437 /* 4149 */ { MAD_F(0x0411b464) /* 0.254322426 */, 18 },
4438 /* 4150 */ { MAD_F(0x04120a18) /* 0.254404159 */, 18 },
4439 /* 4151 */ { MAD_F(0x04125fce) /* 0.254485899 */, 18 },
4440 /* 4152 */ { MAD_F(0x0412b586) /* 0.254567645 */, 18 },
4441 /* 4153 */ { MAD_F(0x04130b3f) /* 0.254649397 */, 18 },
4442 /* 4154 */ { MAD_F(0x041360fa) /* 0.254731157 */, 18 },
4443 /* 4155 */ { MAD_F(0x0413b6b7) /* 0.254812922 */, 18 },
4444 /* 4156 */ { MAD_F(0x04140c75) /* 0.254894695 */, 18 },
4445 /* 4157 */ { MAD_F(0x04146236) /* 0.254976474 */, 18 },
4446 /* 4158 */ { MAD_F(0x0414b7f8) /* 0.255058259 */, 18 },
4447 /* 4159 */ { MAD_F(0x04150dbc) /* 0.255140051 */, 18 },
4448
4449 /* 4160 */ { MAD_F(0x04156381) /* 0.255221850 */, 18 },
4450 /* 4161 */ { MAD_F(0x0415b949) /* 0.255303655 */, 18 },
4451 /* 4162 */ { MAD_F(0x04160f12) /* 0.255385467 */, 18 },
4452 /* 4163 */ { MAD_F(0x041664dd) /* 0.255467285 */, 18 },
4453 /* 4164 */ { MAD_F(0x0416baaa) /* 0.255549110 */, 18 },
4454 /* 4165 */ { MAD_F(0x04171078) /* 0.255630941 */, 18 },
4455 /* 4166 */ { MAD_F(0x04176648) /* 0.255712779 */, 18 },
4456 /* 4167 */ { MAD_F(0x0417bc1a) /* 0.255794624 */, 18 },
4457 /* 4168 */ { MAD_F(0x041811ee) /* 0.255876475 */, 18 },
4458 /* 4169 */ { MAD_F(0x041867c3) /* 0.255958332 */, 18 },
4459 /* 4170 */ { MAD_F(0x0418bd9b) /* 0.256040196 */, 18 },
4460 /* 4171 */ { MAD_F(0x04191374) /* 0.256122067 */, 18 },
4461 /* 4172 */ { MAD_F(0x0419694e) /* 0.256203944 */, 18 },
4462 /* 4173 */ { MAD_F(0x0419bf2b) /* 0.256285828 */, 18 },
4463 /* 4174 */ { MAD_F(0x041a1509) /* 0.256367718 */, 18 },
4464 /* 4175 */ { MAD_F(0x041a6ae9) /* 0.256449615 */, 18 },
4465
4466 /* 4176 */ { MAD_F(0x041ac0cb) /* 0.256531518 */, 18 },
4467 /* 4177 */ { MAD_F(0x041b16ae) /* 0.256613428 */, 18 },
4468 /* 4178 */ { MAD_F(0x041b6c94) /* 0.256695344 */, 18 },
4469 /* 4179 */ { MAD_F(0x041bc27b) /* 0.256777267 */, 18 },
4470 /* 4180 */ { MAD_F(0x041c1863) /* 0.256859197 */, 18 },
4471 /* 4181 */ { MAD_F(0x041c6e4e) /* 0.256941133 */, 18 },
4472 /* 4182 */ { MAD_F(0x041cc43a) /* 0.257023076 */, 18 },
4473 /* 4183 */ { MAD_F(0x041d1a28) /* 0.257105025 */, 18 },
4474 /* 4184 */ { MAD_F(0x041d7018) /* 0.257186980 */, 18 },
4475 /* 4185 */ { MAD_F(0x041dc60a) /* 0.257268942 */, 18 },
4476 /* 4186 */ { MAD_F(0x041e1bfd) /* 0.257350911 */, 18 },
4477 /* 4187 */ { MAD_F(0x041e71f2) /* 0.257432886 */, 18 },
4478 /* 4188 */ { MAD_F(0x041ec7e9) /* 0.257514868 */, 18 },
4479 /* 4189 */ { MAD_F(0x041f1de1) /* 0.257596856 */, 18 },
4480 /* 4190 */ { MAD_F(0x041f73dc) /* 0.257678851 */, 18 },
4481 /* 4191 */ { MAD_F(0x041fc9d8) /* 0.257760852 */, 18 },
4482
4483 /* 4192 */ { MAD_F(0x04201fd5) /* 0.257842860 */, 18 },
4484 /* 4193 */ { MAD_F(0x042075d5) /* 0.257924875 */, 18 },
4485 /* 4194 */ { MAD_F(0x0420cbd6) /* 0.258006895 */, 18 },
4486 /* 4195 */ { MAD_F(0x042121d9) /* 0.258088923 */, 18 },
4487 /* 4196 */ { MAD_F(0x042177de) /* 0.258170957 */, 18 },
4488 /* 4197 */ { MAD_F(0x0421cde5) /* 0.258252997 */, 18 },
4489 /* 4198 */ { MAD_F(0x042223ed) /* 0.258335044 */, 18 },
4490 /* 4199 */ { MAD_F(0x042279f7) /* 0.258417097 */, 18 },
4491 /* 4200 */ { MAD_F(0x0422d003) /* 0.258499157 */, 18 },
4492 /* 4201 */ { MAD_F(0x04232611) /* 0.258581224 */, 18 },
4493 /* 4202 */ { MAD_F(0x04237c20) /* 0.258663297 */, 18 },
4494 /* 4203 */ { MAD_F(0x0423d231) /* 0.258745376 */, 18 },
4495 /* 4204 */ { MAD_F(0x04242844) /* 0.258827462 */, 18 },
4496 /* 4205 */ { MAD_F(0x04247e58) /* 0.258909555 */, 18 },
4497 /* 4206 */ { MAD_F(0x0424d46e) /* 0.258991654 */, 18 },
4498 /* 4207 */ { MAD_F(0x04252a87) /* 0.259073760 */, 18 },
4499
4500 /* 4208 */ { MAD_F(0x042580a0) /* 0.259155872 */, 18 },
4501 /* 4209 */ { MAD_F(0x0425d6bc) /* 0.259237990 */, 18 },
4502 /* 4210 */ { MAD_F(0x04262cd9) /* 0.259320115 */, 18 },
4503 /* 4211 */ { MAD_F(0x042682f8) /* 0.259402247 */, 18 },
4504 /* 4212 */ { MAD_F(0x0426d919) /* 0.259484385 */, 18 },
4505 /* 4213 */ { MAD_F(0x04272f3b) /* 0.259566529 */, 18 },
4506 /* 4214 */ { MAD_F(0x04278560) /* 0.259648680 */, 18 },
4507 /* 4215 */ { MAD_F(0x0427db86) /* 0.259730838 */, 18 },
4508 /* 4216 */ { MAD_F(0x042831ad) /* 0.259813002 */, 18 },
4509 /* 4217 */ { MAD_F(0x042887d7) /* 0.259895173 */, 18 },
4510 /* 4218 */ { MAD_F(0x0428de02) /* 0.259977350 */, 18 },
4511 /* 4219 */ { MAD_F(0x0429342f) /* 0.260059533 */, 18 },
4512 /* 4220 */ { MAD_F(0x04298a5e) /* 0.260141723 */, 18 },
4513 /* 4221 */ { MAD_F(0x0429e08e) /* 0.260223920 */, 18 },
4514 /* 4222 */ { MAD_F(0x042a36c0) /* 0.260306123 */, 18 },
4515 /* 4223 */ { MAD_F(0x042a8cf4) /* 0.260388332 */, 18 },
4516
4517 /* 4224 */ { MAD_F(0x042ae32a) /* 0.260470548 */, 18 },
4518 /* 4225 */ { MAD_F(0x042b3962) /* 0.260552771 */, 18 },
4519 /* 4226 */ { MAD_F(0x042b8f9b) /* 0.260635000 */, 18 },
4520 /* 4227 */ { MAD_F(0x042be5d6) /* 0.260717235 */, 18 },
4521 /* 4228 */ { MAD_F(0x042c3c12) /* 0.260799477 */, 18 },
4522 /* 4229 */ { MAD_F(0x042c9251) /* 0.260881725 */, 18 },
4523 /* 4230 */ { MAD_F(0x042ce891) /* 0.260963980 */, 18 },
4524 /* 4231 */ { MAD_F(0x042d3ed3) /* 0.261046242 */, 18 },
4525 /* 4232 */ { MAD_F(0x042d9516) /* 0.261128510 */, 18 },
4526 /* 4233 */ { MAD_F(0x042deb5c) /* 0.261210784 */, 18 },
4527 /* 4234 */ { MAD_F(0x042e41a3) /* 0.261293065 */, 18 },
4528 /* 4235 */ { MAD_F(0x042e97ec) /* 0.261375352 */, 18 },
4529 /* 4236 */ { MAD_F(0x042eee36) /* 0.261457646 */, 18 },
4530 /* 4237 */ { MAD_F(0x042f4482) /* 0.261539946 */, 18 },
4531 /* 4238 */ { MAD_F(0x042f9ad1) /* 0.261622253 */, 18 },
4532 /* 4239 */ { MAD_F(0x042ff120) /* 0.261704566 */, 18 },
4533
4534 /* 4240 */ { MAD_F(0x04304772) /* 0.261786886 */, 18 },
4535 /* 4241 */ { MAD_F(0x04309dc5) /* 0.261869212 */, 18 },
4536 /* 4242 */ { MAD_F(0x0430f41a) /* 0.261951545 */, 18 },
4537 /* 4243 */ { MAD_F(0x04314a71) /* 0.262033884 */, 18 },
4538 /* 4244 */ { MAD_F(0x0431a0c9) /* 0.262116229 */, 18 },
4539 /* 4245 */ { MAD_F(0x0431f723) /* 0.262198581 */, 18 },
4540 /* 4246 */ { MAD_F(0x04324d7f) /* 0.262280940 */, 18 },
4541 /* 4247 */ { MAD_F(0x0432a3dd) /* 0.262363305 */, 18 },
4542 /* 4248 */ { MAD_F(0x0432fa3d) /* 0.262445676 */, 18 },
4543 /* 4249 */ { MAD_F(0x0433509e) /* 0.262528054 */, 18 },
4544 /* 4250 */ { MAD_F(0x0433a701) /* 0.262610438 */, 18 },
4545 /* 4251 */ { MAD_F(0x0433fd65) /* 0.262692829 */, 18 },
4546 /* 4252 */ { MAD_F(0x043453cc) /* 0.262775227 */, 18 },
4547 /* 4253 */ { MAD_F(0x0434aa34) /* 0.262857630 */, 18 },
4548 /* 4254 */ { MAD_F(0x0435009d) /* 0.262940040 */, 18 },
4549 /* 4255 */ { MAD_F(0x04355709) /* 0.263022457 */, 18 },
4550
4551 /* 4256 */ { MAD_F(0x0435ad76) /* 0.263104880 */, 18 },
4552 /* 4257 */ { MAD_F(0x043603e5) /* 0.263187310 */, 18 },
4553 /* 4258 */ { MAD_F(0x04365a56) /* 0.263269746 */, 18 },
4554 /* 4259 */ { MAD_F(0x0436b0c9) /* 0.263352188 */, 18 },
4555 /* 4260 */ { MAD_F(0x0437073d) /* 0.263434637 */, 18 },
4556 /* 4261 */ { MAD_F(0x04375db3) /* 0.263517093 */, 18 },
4557 /* 4262 */ { MAD_F(0x0437b42a) /* 0.263599554 */, 18 },
4558 /* 4263 */ { MAD_F(0x04380aa4) /* 0.263682023 */, 18 },
4559 /* 4264 */ { MAD_F(0x0438611f) /* 0.263764497 */, 18 },
4560 /* 4265 */ { MAD_F(0x0438b79c) /* 0.263846979 */, 18 },
4561 /* 4266 */ { MAD_F(0x04390e1a) /* 0.263929466 */, 18 },
4562 /* 4267 */ { MAD_F(0x0439649b) /* 0.264011960 */, 18 },
4563 /* 4268 */ { MAD_F(0x0439bb1d) /* 0.264094461 */, 18 },
4564 /* 4269 */ { MAD_F(0x043a11a1) /* 0.264176968 */, 18 },
4565 /* 4270 */ { MAD_F(0x043a6826) /* 0.264259481 */, 18 },
4566 /* 4271 */ { MAD_F(0x043abead) /* 0.264342001 */, 18 },
4567
4568 /* 4272 */ { MAD_F(0x043b1536) /* 0.264424527 */, 18 },
4569 /* 4273 */ { MAD_F(0x043b6bc1) /* 0.264507060 */, 18 },
4570 /* 4274 */ { MAD_F(0x043bc24d) /* 0.264589599 */, 18 },
4571 /* 4275 */ { MAD_F(0x043c18dc) /* 0.264672145 */, 18 },
4572 /* 4276 */ { MAD_F(0x043c6f6c) /* 0.264754697 */, 18 },
4573 /* 4277 */ { MAD_F(0x043cc5fd) /* 0.264837255 */, 18 },
4574 /* 4278 */ { MAD_F(0x043d1c91) /* 0.264919820 */, 18 },
4575 /* 4279 */ { MAD_F(0x043d7326) /* 0.265002392 */, 18 },
4576 /* 4280 */ { MAD_F(0x043dc9bc) /* 0.265084969 */, 18 },
4577 /* 4281 */ { MAD_F(0x043e2055) /* 0.265167554 */, 18 },
4578 /* 4282 */ { MAD_F(0x043e76ef) /* 0.265250144 */, 18 },
4579 /* 4283 */ { MAD_F(0x043ecd8b) /* 0.265332741 */, 18 },
4580 /* 4284 */ { MAD_F(0x043f2429) /* 0.265415345 */, 18 },
4581 /* 4285 */ { MAD_F(0x043f7ac8) /* 0.265497955 */, 18 },
4582 /* 4286 */ { MAD_F(0x043fd169) /* 0.265580571 */, 18 },
4583 /* 4287 */ { MAD_F(0x0440280c) /* 0.265663194 */, 18 },
4584
4585 /* 4288 */ { MAD_F(0x04407eb1) /* 0.265745823 */, 18 },
4586 /* 4289 */ { MAD_F(0x0440d557) /* 0.265828459 */, 18 },
4587 /* 4290 */ { MAD_F(0x04412bff) /* 0.265911101 */, 18 },
4588 /* 4291 */ { MAD_F(0x044182a9) /* 0.265993749 */, 18 },
4589 /* 4292 */ { MAD_F(0x0441d955) /* 0.266076404 */, 18 },
4590 /* 4293 */ { MAD_F(0x04423002) /* 0.266159065 */, 18 },
4591 /* 4294 */ { MAD_F(0x044286b1) /* 0.266241733 */, 18 },
4592 /* 4295 */ { MAD_F(0x0442dd61) /* 0.266324407 */, 18 },
4593 /* 4296 */ { MAD_F(0x04433414) /* 0.266407088 */, 18 },
4594 /* 4297 */ { MAD_F(0x04438ac8) /* 0.266489775 */, 18 },
4595 /* 4298 */ { MAD_F(0x0443e17e) /* 0.266572468 */, 18 },
4596 /* 4299 */ { MAD_F(0x04443835) /* 0.266655168 */, 18 },
4597 /* 4300 */ { MAD_F(0x04448eef) /* 0.266737874 */, 18 },
4598 /* 4301 */ { MAD_F(0x0444e5aa) /* 0.266820587 */, 18 },
4599 /* 4302 */ { MAD_F(0x04453c66) /* 0.266903306 */, 18 },
4600 /* 4303 */ { MAD_F(0x04459325) /* 0.266986031 */, 18 },
4601
4602 /* 4304 */ { MAD_F(0x0445e9e5) /* 0.267068763 */, 18 },
4603 /* 4305 */ { MAD_F(0x044640a7) /* 0.267151501 */, 18 },
4604 /* 4306 */ { MAD_F(0x0446976a) /* 0.267234246 */, 18 },
4605 /* 4307 */ { MAD_F(0x0446ee30) /* 0.267316997 */, 18 },
4606 /* 4308 */ { MAD_F(0x044744f7) /* 0.267399755 */, 18 },
4607 /* 4309 */ { MAD_F(0x04479bc0) /* 0.267482518 */, 18 },
4608 /* 4310 */ { MAD_F(0x0447f28a) /* 0.267565289 */, 18 },
4609 /* 4311 */ { MAD_F(0x04484956) /* 0.267648065 */, 18 },
4610 /* 4312 */ { MAD_F(0x0448a024) /* 0.267730848 */, 18 },
4611 /* 4313 */ { MAD_F(0x0448f6f4) /* 0.267813638 */, 18 },
4612 /* 4314 */ { MAD_F(0x04494dc5) /* 0.267896434 */, 18 },
4613 /* 4315 */ { MAD_F(0x0449a498) /* 0.267979236 */, 18 },
4614 /* 4316 */ { MAD_F(0x0449fb6d) /* 0.268062045 */, 18 },
4615 /* 4317 */ { MAD_F(0x044a5243) /* 0.268144860 */, 18 },
4616 /* 4318 */ { MAD_F(0x044aa91c) /* 0.268227681 */, 18 },
4617 /* 4319 */ { MAD_F(0x044afff6) /* 0.268310509 */, 18 },
4618
4619 /* 4320 */ { MAD_F(0x044b56d1) /* 0.268393343 */, 18 },
4620 /* 4321 */ { MAD_F(0x044badaf) /* 0.268476184 */, 18 },
4621 /* 4322 */ { MAD_F(0x044c048e) /* 0.268559031 */, 18 },
4622 /* 4323 */ { MAD_F(0x044c5b6f) /* 0.268641885 */, 18 },
4623 /* 4324 */ { MAD_F(0x044cb251) /* 0.268724744 */, 18 },
4624 /* 4325 */ { MAD_F(0x044d0935) /* 0.268807611 */, 18 },
4625 /* 4326 */ { MAD_F(0x044d601b) /* 0.268890483 */, 18 },
4626 /* 4327 */ { MAD_F(0x044db703) /* 0.268973362 */, 18 },
4627 /* 4328 */ { MAD_F(0x044e0dec) /* 0.269056248 */, 18 },
4628 /* 4329 */ { MAD_F(0x044e64d7) /* 0.269139139 */, 18 },
4629 /* 4330 */ { MAD_F(0x044ebbc4) /* 0.269222037 */, 18 },
4630 /* 4331 */ { MAD_F(0x044f12b3) /* 0.269304942 */, 18 },
4631 /* 4332 */ { MAD_F(0x044f69a3) /* 0.269387853 */, 18 },
4632 /* 4333 */ { MAD_F(0x044fc095) /* 0.269470770 */, 18 },
4633 /* 4334 */ { MAD_F(0x04501788) /* 0.269553694 */, 18 },
4634 /* 4335 */ { MAD_F(0x04506e7e) /* 0.269636624 */, 18 },
4635
4636 /* 4336 */ { MAD_F(0x0450c575) /* 0.269719560 */, 18 },
4637 /* 4337 */ { MAD_F(0x04511c6e) /* 0.269802503 */, 18 },
4638 /* 4338 */ { MAD_F(0x04517368) /* 0.269885452 */, 18 },
4639 /* 4339 */ { MAD_F(0x0451ca64) /* 0.269968408 */, 18 },
4640 /* 4340 */ { MAD_F(0x04522162) /* 0.270051370 */, 18 },
4641 /* 4341 */ { MAD_F(0x04527862) /* 0.270134338 */, 18 },
4642 /* 4342 */ { MAD_F(0x0452cf63) /* 0.270217312 */, 18 },
4643 /* 4343 */ { MAD_F(0x04532666) /* 0.270300293 */, 18 },
4644 /* 4344 */ { MAD_F(0x04537d6b) /* 0.270383281 */, 18 },
4645 /* 4345 */ { MAD_F(0x0453d472) /* 0.270466275 */, 18 },
4646 /* 4346 */ { MAD_F(0x04542b7a) /* 0.270549275 */, 18 },
4647 /* 4347 */ { MAD_F(0x04548284) /* 0.270632281 */, 18 },
4648 /* 4348 */ { MAD_F(0x0454d98f) /* 0.270715294 */, 18 },
4649 /* 4349 */ { MAD_F(0x0455309c) /* 0.270798313 */, 18 },
4650 /* 4350 */ { MAD_F(0x045587ab) /* 0.270881339 */, 18 },
4651 /* 4351 */ { MAD_F(0x0455debc) /* 0.270964371 */, 18 },
4652
4653 /* 4352 */ { MAD_F(0x045635cf) /* 0.271047409 */, 18 },
4654 /* 4353 */ { MAD_F(0x04568ce3) /* 0.271130454 */, 18 },
4655 /* 4354 */ { MAD_F(0x0456e3f9) /* 0.271213505 */, 18 },
4656 /* 4355 */ { MAD_F(0x04573b10) /* 0.271296562 */, 18 },
4657 /* 4356 */ { MAD_F(0x04579229) /* 0.271379626 */, 18 },
4658 /* 4357 */ { MAD_F(0x0457e944) /* 0.271462696 */, 18 },
4659 /* 4358 */ { MAD_F(0x04584061) /* 0.271545772 */, 18 },
4660 /* 4359 */ { MAD_F(0x0458977f) /* 0.271628855 */, 18 },
4661 /* 4360 */ { MAD_F(0x0458ee9f) /* 0.271711944 */, 18 },
4662 /* 4361 */ { MAD_F(0x045945c1) /* 0.271795040 */, 18 },
4663 /* 4362 */ { MAD_F(0x04599ce5) /* 0.271878142 */, 18 },
4664 /* 4363 */ { MAD_F(0x0459f40a) /* 0.271961250 */, 18 },
4665 /* 4364 */ { MAD_F(0x045a4b31) /* 0.272044365 */, 18 },
4666 /* 4365 */ { MAD_F(0x045aa259) /* 0.272127486 */, 18 },
4667 /* 4366 */ { MAD_F(0x045af984) /* 0.272210613 */, 18 },
4668 /* 4367 */ { MAD_F(0x045b50b0) /* 0.272293746 */, 18 },
4669
4670 /* 4368 */ { MAD_F(0x045ba7dd) /* 0.272376886 */, 18 },
4671 /* 4369 */ { MAD_F(0x045bff0d) /* 0.272460033 */, 18 },
4672 /* 4370 */ { MAD_F(0x045c563e) /* 0.272543185 */, 18 },
4673 /* 4371 */ { MAD_F(0x045cad71) /* 0.272626344 */, 18 },
4674 /* 4372 */ { MAD_F(0x045d04a5) /* 0.272709510 */, 18 },
4675 /* 4373 */ { MAD_F(0x045d5bdc) /* 0.272792681 */, 18 },
4676 /* 4374 */ { MAD_F(0x045db313) /* 0.272875859 */, 18 },
4677 /* 4375 */ { MAD_F(0x045e0a4d) /* 0.272959044 */, 18 },
4678 /* 4376 */ { MAD_F(0x045e6188) /* 0.273042234 */, 18 },
4679 /* 4377 */ { MAD_F(0x045eb8c5) /* 0.273125431 */, 18 },
4680 /* 4378 */ { MAD_F(0x045f1004) /* 0.273208635 */, 18 },
4681 /* 4379 */ { MAD_F(0x045f6745) /* 0.273291844 */, 18 },
4682 /* 4380 */ { MAD_F(0x045fbe87) /* 0.273375060 */, 18 },
4683 /* 4381 */ { MAD_F(0x046015cb) /* 0.273458283 */, 18 },
4684 /* 4382 */ { MAD_F(0x04606d10) /* 0.273541511 */, 18 },
4685 /* 4383 */ { MAD_F(0x0460c457) /* 0.273624747 */, 18 },
4686
4687 /* 4384 */ { MAD_F(0x04611ba0) /* 0.273707988 */, 18 },
4688 /* 4385 */ { MAD_F(0x046172eb) /* 0.273791236 */, 18 },
4689 /* 4386 */ { MAD_F(0x0461ca37) /* 0.273874490 */, 18 },
4690 /* 4387 */ { MAD_F(0x04622185) /* 0.273957750 */, 18 },
4691 /* 4388 */ { MAD_F(0x046278d5) /* 0.274041017 */, 18 },
4692 /* 4389 */ { MAD_F(0x0462d026) /* 0.274124290 */, 18 },
4693 /* 4390 */ { MAD_F(0x0463277a) /* 0.274207569 */, 18 },
4694 /* 4391 */ { MAD_F(0x04637ece) /* 0.274290855 */, 18 },
4695 /* 4392 */ { MAD_F(0x0463d625) /* 0.274374147 */, 18 },
4696 /* 4393 */ { MAD_F(0x04642d7d) /* 0.274457445 */, 18 },
4697 /* 4394 */ { MAD_F(0x046484d7) /* 0.274540749 */, 18 },
4698 /* 4395 */ { MAD_F(0x0464dc33) /* 0.274624060 */, 18 },
4699 /* 4396 */ { MAD_F(0x04653390) /* 0.274707378 */, 18 },
4700 /* 4397 */ { MAD_F(0x04658aef) /* 0.274790701 */, 18 },
4701 /* 4398 */ { MAD_F(0x0465e250) /* 0.274874031 */, 18 },
4702 /* 4399 */ { MAD_F(0x046639b2) /* 0.274957367 */, 18 },
4703
4704 /* 4400 */ { MAD_F(0x04669116) /* 0.275040710 */, 18 },
4705 /* 4401 */ { MAD_F(0x0466e87c) /* 0.275124059 */, 18 },
4706 /* 4402 */ { MAD_F(0x04673fe3) /* 0.275207414 */, 18 },
4707 /* 4403 */ { MAD_F(0x0467974d) /* 0.275290775 */, 18 },
4708 /* 4404 */ { MAD_F(0x0467eeb7) /* 0.275374143 */, 18 },
4709 /* 4405 */ { MAD_F(0x04684624) /* 0.275457517 */, 18 },
4710 /* 4406 */ { MAD_F(0x04689d92) /* 0.275540897 */, 18 },
4711 /* 4407 */ { MAD_F(0x0468f502) /* 0.275624284 */, 18 },
4712 /* 4408 */ { MAD_F(0x04694c74) /* 0.275707677 */, 18 },
4713 /* 4409 */ { MAD_F(0x0469a3e7) /* 0.275791076 */, 18 },
4714 /* 4410 */ { MAD_F(0x0469fb5c) /* 0.275874482 */, 18 },
4715 /* 4411 */ { MAD_F(0x046a52d3) /* 0.275957894 */, 18 },
4716 /* 4412 */ { MAD_F(0x046aaa4b) /* 0.276041312 */, 18 },
4717 /* 4413 */ { MAD_F(0x046b01c5) /* 0.276124737 */, 18 },
4718 /* 4414 */ { MAD_F(0x046b5941) /* 0.276208167 */, 18 },
4719 /* 4415 */ { MAD_F(0x046bb0bf) /* 0.276291605 */, 18 },
4720
4721 /* 4416 */ { MAD_F(0x046c083e) /* 0.276375048 */, 18 },
4722 /* 4417 */ { MAD_F(0x046c5fbf) /* 0.276458498 */, 18 },
4723 /* 4418 */ { MAD_F(0x046cb741) /* 0.276541954 */, 18 },
4724 /* 4419 */ { MAD_F(0x046d0ec5) /* 0.276625416 */, 18 },
4725 /* 4420 */ { MAD_F(0x046d664b) /* 0.276708885 */, 18 },
4726 /* 4421 */ { MAD_F(0x046dbdd3) /* 0.276792360 */, 18 },
4727 /* 4422 */ { MAD_F(0x046e155c) /* 0.276875841 */, 18 },
4728 /* 4423 */ { MAD_F(0x046e6ce7) /* 0.276959328 */, 18 },
4729 /* 4424 */ { MAD_F(0x046ec474) /* 0.277042822 */, 18 },
4730 /* 4425 */ { MAD_F(0x046f1c02) /* 0.277126322 */, 18 },
4731 /* 4426 */ { MAD_F(0x046f7392) /* 0.277209829 */, 18 },
4732 /* 4427 */ { MAD_F(0x046fcb24) /* 0.277293341 */, 18 },
4733 /* 4428 */ { MAD_F(0x047022b8) /* 0.277376860 */, 18 },
4734 /* 4429 */ { MAD_F(0x04707a4d) /* 0.277460385 */, 18 },
4735 /* 4430 */ { MAD_F(0x0470d1e4) /* 0.277543917 */, 18 },
4736 /* 4431 */ { MAD_F(0x0471297c) /* 0.277627455 */, 18 },
4737
4738 /* 4432 */ { MAD_F(0x04718116) /* 0.277710999 */, 18 },
4739 /* 4433 */ { MAD_F(0x0471d8b2) /* 0.277794549 */, 18 },
4740 /* 4434 */ { MAD_F(0x04723050) /* 0.277878106 */, 18 },
4741 /* 4435 */ { MAD_F(0x047287ef) /* 0.277961669 */, 18 },
4742 /* 4436 */ { MAD_F(0x0472df90) /* 0.278045238 */, 18 },
4743 /* 4437 */ { MAD_F(0x04733733) /* 0.278128813 */, 18 },
4744 /* 4438 */ { MAD_F(0x04738ed7) /* 0.278212395 */, 18 },
4745 /* 4439 */ { MAD_F(0x0473e67d) /* 0.278295983 */, 18 },
4746 /* 4440 */ { MAD_F(0x04743e25) /* 0.278379578 */, 18 },
4747 /* 4441 */ { MAD_F(0x047495ce) /* 0.278463178 */, 18 },
4748 /* 4442 */ { MAD_F(0x0474ed79) /* 0.278546785 */, 18 },
4749 /* 4443 */ { MAD_F(0x04754526) /* 0.278630398 */, 18 },
4750 /* 4444 */ { MAD_F(0x04759cd4) /* 0.278714018 */, 18 },
4751 /* 4445 */ { MAD_F(0x0475f484) /* 0.278797643 */, 18 },
4752 /* 4446 */ { MAD_F(0x04764c36) /* 0.278881275 */, 18 },
4753 /* 4447 */ { MAD_F(0x0476a3ea) /* 0.278964914 */, 18 },
4754
4755 /* 4448 */ { MAD_F(0x0476fb9f) /* 0.279048558 */, 18 },
4756 /* 4449 */ { MAD_F(0x04775356) /* 0.279132209 */, 18 },
4757 /* 4450 */ { MAD_F(0x0477ab0e) /* 0.279215866 */, 18 },
4758 /* 4451 */ { MAD_F(0x047802c8) /* 0.279299529 */, 18 },
4759 /* 4452 */ { MAD_F(0x04785a84) /* 0.279383199 */, 18 },
4760 /* 4453 */ { MAD_F(0x0478b242) /* 0.279466875 */, 18 },
4761 /* 4454 */ { MAD_F(0x04790a01) /* 0.279550557 */, 18 },
4762 /* 4455 */ { MAD_F(0x047961c2) /* 0.279634245 */, 18 },
4763 /* 4456 */ { MAD_F(0x0479b984) /* 0.279717940 */, 18 },
4764 /* 4457 */ { MAD_F(0x047a1149) /* 0.279801641 */, 18 },
4765 /* 4458 */ { MAD_F(0x047a690f) /* 0.279885348 */, 18 },
4766 /* 4459 */ { MAD_F(0x047ac0d6) /* 0.279969061 */, 18 },
4767 /* 4460 */ { MAD_F(0x047b18a0) /* 0.280052781 */, 18 },
4768 /* 4461 */ { MAD_F(0x047b706b) /* 0.280136507 */, 18 },
4769 /* 4462 */ { MAD_F(0x047bc837) /* 0.280220239 */, 18 },
4770 /* 4463 */ { MAD_F(0x047c2006) /* 0.280303978 */, 18 },
4771
4772 /* 4464 */ { MAD_F(0x047c77d6) /* 0.280387722 */, 18 },
4773 /* 4465 */ { MAD_F(0x047ccfa8) /* 0.280471473 */, 18 },
4774 /* 4466 */ { MAD_F(0x047d277b) /* 0.280555230 */, 18 },
4775 /* 4467 */ { MAD_F(0x047d7f50) /* 0.280638994 */, 18 },
4776 /* 4468 */ { MAD_F(0x047dd727) /* 0.280722764 */, 18 },
4777 /* 4469 */ { MAD_F(0x047e2eff) /* 0.280806540 */, 18 },
4778 /* 4470 */ { MAD_F(0x047e86d9) /* 0.280890322 */, 18 },
4779 /* 4471 */ { MAD_F(0x047edeb5) /* 0.280974110 */, 18 },
4780 /* 4472 */ { MAD_F(0x047f3693) /* 0.281057905 */, 18 },
4781 /* 4473 */ { MAD_F(0x047f8e72) /* 0.281141706 */, 18 },
4782 /* 4474 */ { MAD_F(0x047fe653) /* 0.281225513 */, 18 },
4783 /* 4475 */ { MAD_F(0x04803e35) /* 0.281309326 */, 18 },
4784 /* 4476 */ { MAD_F(0x04809619) /* 0.281393146 */, 18 },
4785 /* 4477 */ { MAD_F(0x0480edff) /* 0.281476972 */, 18 },
4786 /* 4478 */ { MAD_F(0x048145e7) /* 0.281560804 */, 18 },
4787 /* 4479 */ { MAD_F(0x04819dd0) /* 0.281644643 */, 18 },
4788
4789 /* 4480 */ { MAD_F(0x0481f5bb) /* 0.281728487 */, 18 },
4790 /* 4481 */ { MAD_F(0x04824da7) /* 0.281812338 */, 18 },
4791 /* 4482 */ { MAD_F(0x0482a595) /* 0.281896195 */, 18 },
4792 /* 4483 */ { MAD_F(0x0482fd85) /* 0.281980059 */, 18 },
4793 /* 4484 */ { MAD_F(0x04835577) /* 0.282063928 */, 18 },
4794 /* 4485 */ { MAD_F(0x0483ad6a) /* 0.282147804 */, 18 },
4795 /* 4486 */ { MAD_F(0x0484055f) /* 0.282231686 */, 18 },
4796 /* 4487 */ { MAD_F(0x04845d56) /* 0.282315574 */, 18 },
4797 /* 4488 */ { MAD_F(0x0484b54e) /* 0.282399469 */, 18 },
4798 /* 4489 */ { MAD_F(0x04850d48) /* 0.282483370 */, 18 },
4799 /* 4490 */ { MAD_F(0x04856544) /* 0.282567277 */, 18 },
4800 /* 4491 */ { MAD_F(0x0485bd41) /* 0.282651190 */, 18 },
4801 /* 4492 */ { MAD_F(0x04861540) /* 0.282735109 */, 18 },
4802 /* 4493 */ { MAD_F(0x04866d40) /* 0.282819035 */, 18 },
4803 /* 4494 */ { MAD_F(0x0486c543) /* 0.282902967 */, 18 },
4804 /* 4495 */ { MAD_F(0x04871d47) /* 0.282986905 */, 18 },
4805
4806 /* 4496 */ { MAD_F(0x0487754c) /* 0.283070849 */, 18 },
4807 /* 4497 */ { MAD_F(0x0487cd54) /* 0.283154800 */, 18 },
4808 /* 4498 */ { MAD_F(0x0488255d) /* 0.283238757 */, 18 },
4809 /* 4499 */ { MAD_F(0x04887d67) /* 0.283322720 */, 18 },
4810 /* 4500 */ { MAD_F(0x0488d574) /* 0.283406689 */, 18 },
4811 /* 4501 */ { MAD_F(0x04892d82) /* 0.283490665 */, 18 },
4812 /* 4502 */ { MAD_F(0x04898591) /* 0.283574646 */, 18 },
4813 /* 4503 */ { MAD_F(0x0489dda3) /* 0.283658634 */, 18 },
4814 /* 4504 */ { MAD_F(0x048a35b6) /* 0.283742628 */, 18 },
4815 /* 4505 */ { MAD_F(0x048a8dca) /* 0.283826629 */, 18 },
4816 /* 4506 */ { MAD_F(0x048ae5e1) /* 0.283910635 */, 18 },
4817 /* 4507 */ { MAD_F(0x048b3df9) /* 0.283994648 */, 18 },
4818 /* 4508 */ { MAD_F(0x048b9612) /* 0.284078667 */, 18 },
4819 /* 4509 */ { MAD_F(0x048bee2e) /* 0.284162692 */, 18 },
4820 /* 4510 */ { MAD_F(0x048c464b) /* 0.284246723 */, 18 },
4821 /* 4511 */ { MAD_F(0x048c9e69) /* 0.284330761 */, 18 },
4822
4823 /* 4512 */ { MAD_F(0x048cf68a) /* 0.284414805 */, 18 },
4824 /* 4513 */ { MAD_F(0x048d4eac) /* 0.284498855 */, 18 },
4825 /* 4514 */ { MAD_F(0x048da6cf) /* 0.284582911 */, 18 },
4826 /* 4515 */ { MAD_F(0x048dfef5) /* 0.284666974 */, 18 },
4827 /* 4516 */ { MAD_F(0x048e571c) /* 0.284751042 */, 18 },
4828 /* 4517 */ { MAD_F(0x048eaf44) /* 0.284835117 */, 18 },
4829 /* 4518 */ { MAD_F(0x048f076f) /* 0.284919198 */, 18 },
4830 /* 4519 */ { MAD_F(0x048f5f9b) /* 0.285003285 */, 18 },
4831 /* 4520 */ { MAD_F(0x048fb7c8) /* 0.285087379 */, 18 },
4832 /* 4521 */ { MAD_F(0x04900ff8) /* 0.285171479 */, 18 },
4833 /* 4522 */ { MAD_F(0x04906829) /* 0.285255584 */, 18 },
4834 /* 4523 */ { MAD_F(0x0490c05b) /* 0.285339697 */, 18 },
4835 /* 4524 */ { MAD_F(0x04911890) /* 0.285423815 */, 18 },
4836 /* 4525 */ { MAD_F(0x049170c6) /* 0.285507939 */, 18 },
4837 /* 4526 */ { MAD_F(0x0491c8fd) /* 0.285592070 */, 18 },
4838 /* 4527 */ { MAD_F(0x04922137) /* 0.285676207 */, 18 },
4839
4840 /* 4528 */ { MAD_F(0x04927972) /* 0.285760350 */, 18 },
4841 /* 4529 */ { MAD_F(0x0492d1ae) /* 0.285844499 */, 18 },
4842 /* 4530 */ { MAD_F(0x049329ed) /* 0.285928655 */, 18 },
4843 /* 4531 */ { MAD_F(0x0493822c) /* 0.286012816 */, 18 },
4844 /* 4532 */ { MAD_F(0x0493da6e) /* 0.286096984 */, 18 },
4845 /* 4533 */ { MAD_F(0x049432b1) /* 0.286181158 */, 18 },
4846 /* 4534 */ { MAD_F(0x04948af6) /* 0.286265338 */, 18 },
4847 /* 4535 */ { MAD_F(0x0494e33d) /* 0.286349525 */, 18 },
4848 /* 4536 */ { MAD_F(0x04953b85) /* 0.286433717 */, 18 },
4849 /* 4537 */ { MAD_F(0x049593cf) /* 0.286517916 */, 18 },
4850 /* 4538 */ { MAD_F(0x0495ec1b) /* 0.286602121 */, 18 },
4851 /* 4539 */ { MAD_F(0x04964468) /* 0.286686332 */, 18 },
4852 /* 4540 */ { MAD_F(0x04969cb7) /* 0.286770550 */, 18 },
4853 /* 4541 */ { MAD_F(0x0496f508) /* 0.286854773 */, 18 },
4854 /* 4542 */ { MAD_F(0x04974d5a) /* 0.286939003 */, 18 },
4855 /* 4543 */ { MAD_F(0x0497a5ae) /* 0.287023239 */, 18 },
4856
4857 /* 4544 */ { MAD_F(0x0497fe03) /* 0.287107481 */, 18 },
4858 /* 4545 */ { MAD_F(0x0498565a) /* 0.287191729 */, 18 },
4859 /* 4546 */ { MAD_F(0x0498aeb3) /* 0.287275983 */, 18 },
4860 /* 4547 */ { MAD_F(0x0499070e) /* 0.287360244 */, 18 },
4861 /* 4548 */ { MAD_F(0x04995f6a) /* 0.287444511 */, 18 },
4862 /* 4549 */ { MAD_F(0x0499b7c8) /* 0.287528784 */, 18 },
4863 /* 4550 */ { MAD_F(0x049a1027) /* 0.287613063 */, 18 },
4864 /* 4551 */ { MAD_F(0x049a6889) /* 0.287697348 */, 18 },
4865 /* 4552 */ { MAD_F(0x049ac0eb) /* 0.287781640 */, 18 },
4866 /* 4553 */ { MAD_F(0x049b1950) /* 0.287865937 */, 18 },
4867 /* 4554 */ { MAD_F(0x049b71b6) /* 0.287950241 */, 18 },
4868 /* 4555 */ { MAD_F(0x049bca1e) /* 0.288034551 */, 18 },
4869 /* 4556 */ { MAD_F(0x049c2287) /* 0.288118867 */, 18 },
4870 /* 4557 */ { MAD_F(0x049c7af2) /* 0.288203190 */, 18 },
4871 /* 4558 */ { MAD_F(0x049cd35f) /* 0.288287518 */, 18 },
4872 /* 4559 */ { MAD_F(0x049d2bce) /* 0.288371853 */, 18 },
4873
4874 /* 4560 */ { MAD_F(0x049d843e) /* 0.288456194 */, 18 },
4875 /* 4561 */ { MAD_F(0x049ddcaf) /* 0.288540541 */, 18 },
4876 /* 4562 */ { MAD_F(0x049e3523) /* 0.288624894 */, 18 },
4877 /* 4563 */ { MAD_F(0x049e8d98) /* 0.288709253 */, 18 },
4878 /* 4564 */ { MAD_F(0x049ee60e) /* 0.288793619 */, 18 },
4879 /* 4565 */ { MAD_F(0x049f3e87) /* 0.288877990 */, 18 },
4880 /* 4566 */ { MAD_F(0x049f9701) /* 0.288962368 */, 18 },
4881 /* 4567 */ { MAD_F(0x049fef7c) /* 0.289046752 */, 18 },
4882 /* 4568 */ { MAD_F(0x04a047fa) /* 0.289131142 */, 18 },
4883 /* 4569 */ { MAD_F(0x04a0a079) /* 0.289215538 */, 18 },
4884 /* 4570 */ { MAD_F(0x04a0f8f9) /* 0.289299941 */, 18 },
4885 /* 4571 */ { MAD_F(0x04a1517c) /* 0.289384349 */, 18 },
4886 /* 4572 */ { MAD_F(0x04a1a9ff) /* 0.289468764 */, 18 },
4887 /* 4573 */ { MAD_F(0x04a20285) /* 0.289553185 */, 18 },
4888 /* 4574 */ { MAD_F(0x04a25b0c) /* 0.289637612 */, 18 },
4889 /* 4575 */ { MAD_F(0x04a2b395) /* 0.289722045 */, 18 },
4890
4891 /* 4576 */ { MAD_F(0x04a30c20) /* 0.289806485 */, 18 },
4892 /* 4577 */ { MAD_F(0x04a364ac) /* 0.289890930 */, 18 },
4893 /* 4578 */ { MAD_F(0x04a3bd3a) /* 0.289975382 */, 18 },
4894 /* 4579 */ { MAD_F(0x04a415c9) /* 0.290059840 */, 18 },
4895 /* 4580 */ { MAD_F(0x04a46e5a) /* 0.290144304 */, 18 },
4896 /* 4581 */ { MAD_F(0x04a4c6ed) /* 0.290228774 */, 18 },
4897 /* 4582 */ { MAD_F(0x04a51f81) /* 0.290313250 */, 18 },
4898 /* 4583 */ { MAD_F(0x04a57818) /* 0.290397733 */, 18 },
4899 /* 4584 */ { MAD_F(0x04a5d0af) /* 0.290482221 */, 18 },
4900 /* 4585 */ { MAD_F(0x04a62949) /* 0.290566716 */, 18 },
4901 /* 4586 */ { MAD_F(0x04a681e4) /* 0.290651217 */, 18 },
4902 /* 4587 */ { MAD_F(0x04a6da80) /* 0.290735724 */, 18 },
4903 /* 4588 */ { MAD_F(0x04a7331f) /* 0.290820237 */, 18 },
4904 /* 4589 */ { MAD_F(0x04a78bbf) /* 0.290904756 */, 18 },
4905 /* 4590 */ { MAD_F(0x04a7e460) /* 0.290989281 */, 18 },
4906 /* 4591 */ { MAD_F(0x04a83d03) /* 0.291073813 */, 18 },
4907
4908 /* 4592 */ { MAD_F(0x04a895a8) /* 0.291158351 */, 18 },
4909 /* 4593 */ { MAD_F(0x04a8ee4f) /* 0.291242894 */, 18 },
4910 /* 4594 */ { MAD_F(0x04a946f7) /* 0.291327444 */, 18 },
4911 /* 4595 */ { MAD_F(0x04a99fa1) /* 0.291412001 */, 18 },
4912 /* 4596 */ { MAD_F(0x04a9f84c) /* 0.291496563 */, 18 },
4913 /* 4597 */ { MAD_F(0x04aa50fa) /* 0.291581131 */, 18 },
4914 /* 4598 */ { MAD_F(0x04aaa9a8) /* 0.291665706 */, 18 },
4915 /* 4599 */ { MAD_F(0x04ab0259) /* 0.291750286 */, 18 },
4916 /* 4600 */ { MAD_F(0x04ab5b0b) /* 0.291834873 */, 18 },
4917 /* 4601 */ { MAD_F(0x04abb3bf) /* 0.291919466 */, 18 },
4918 /* 4602 */ { MAD_F(0x04ac0c74) /* 0.292004065 */, 18 },
4919 /* 4603 */ { MAD_F(0x04ac652b) /* 0.292088670 */, 18 },
4920 /* 4604 */ { MAD_F(0x04acbde4) /* 0.292173281 */, 18 },
4921 /* 4605 */ { MAD_F(0x04ad169e) /* 0.292257899 */, 18 },
4922 /* 4606 */ { MAD_F(0x04ad6f5a) /* 0.292342522 */, 18 },
4923 /* 4607 */ { MAD_F(0x04adc818) /* 0.292427152 */, 18 },
4924
4925 /* 4608 */ { MAD_F(0x04ae20d7) /* 0.292511788 */, 18 },
4926 /* 4609 */ { MAD_F(0x04ae7998) /* 0.292596430 */, 18 },
4927 /* 4610 */ { MAD_F(0x04aed25a) /* 0.292681078 */, 18 },
4928 /* 4611 */ { MAD_F(0x04af2b1e) /* 0.292765732 */, 18 },
4929 /* 4612 */ { MAD_F(0x04af83e4) /* 0.292850392 */, 18 },
4930 /* 4613 */ { MAD_F(0x04afdcac) /* 0.292935058 */, 18 },
4931 /* 4614 */ { MAD_F(0x04b03575) /* 0.293019731 */, 18 },
4932 /* 4615 */ { MAD_F(0x04b08e40) /* 0.293104409 */, 18 },
4933 /* 4616 */ { MAD_F(0x04b0e70c) /* 0.293189094 */, 18 },
4934 /* 4617 */ { MAD_F(0x04b13fda) /* 0.293273785 */, 18 },
4935 /* 4618 */ { MAD_F(0x04b198aa) /* 0.293358482 */, 18 },
4936 /* 4619 */ { MAD_F(0x04b1f17b) /* 0.293443185 */, 18 },
4937 /* 4620 */ { MAD_F(0x04b24a4e) /* 0.293527894 */, 18 },
4938 /* 4621 */ { MAD_F(0x04b2a322) /* 0.293612609 */, 18 },
4939 /* 4622 */ { MAD_F(0x04b2fbf9) /* 0.293697331 */, 18 },
4940 /* 4623 */ { MAD_F(0x04b354d1) /* 0.293782058 */, 18 },
4941
4942 /* 4624 */ { MAD_F(0x04b3adaa) /* 0.293866792 */, 18 },
4943 /* 4625 */ { MAD_F(0x04b40685) /* 0.293951532 */, 18 },
4944 /* 4626 */ { MAD_F(0x04b45f62) /* 0.294036278 */, 18 },
4945 /* 4627 */ { MAD_F(0x04b4b840) /* 0.294121029 */, 18 },
4946 /* 4628 */ { MAD_F(0x04b51120) /* 0.294205788 */, 18 },
4947 /* 4629 */ { MAD_F(0x04b56a02) /* 0.294290552 */, 18 },
4948 /* 4630 */ { MAD_F(0x04b5c2e6) /* 0.294375322 */, 18 },
4949 /* 4631 */ { MAD_F(0x04b61bcb) /* 0.294460098 */, 18 },
4950 /* 4632 */ { MAD_F(0x04b674b1) /* 0.294544881 */, 18 },
4951 /* 4633 */ { MAD_F(0x04b6cd99) /* 0.294629669 */, 18 },
4952 /* 4634 */ { MAD_F(0x04b72683) /* 0.294714464 */, 18 },
4953 /* 4635 */ { MAD_F(0x04b77f6f) /* 0.294799265 */, 18 },
4954 /* 4636 */ { MAD_F(0x04b7d85c) /* 0.294884072 */, 18 },
4955 /* 4637 */ { MAD_F(0x04b8314b) /* 0.294968885 */, 18 },
4956 /* 4638 */ { MAD_F(0x04b88a3b) /* 0.295053704 */, 18 },
4957 /* 4639 */ { MAD_F(0x04b8e32d) /* 0.295138529 */, 18 },
4958
4959 /* 4640 */ { MAD_F(0x04b93c21) /* 0.295223360 */, 18 },
4960 /* 4641 */ { MAD_F(0x04b99516) /* 0.295308197 */, 18 },
4961 /* 4642 */ { MAD_F(0x04b9ee0d) /* 0.295393041 */, 18 },
4962 /* 4643 */ { MAD_F(0x04ba4706) /* 0.295477890 */, 18 },
4963 /* 4644 */ { MAD_F(0x04baa000) /* 0.295562746 */, 18 },
4964 /* 4645 */ { MAD_F(0x04baf8fc) /* 0.295647608 */, 18 },
4965 /* 4646 */ { MAD_F(0x04bb51fa) /* 0.295732476 */, 18 },
4966 /* 4647 */ { MAD_F(0x04bbaaf9) /* 0.295817349 */, 18 },
4967 /* 4648 */ { MAD_F(0x04bc03fa) /* 0.295902229 */, 18 },
4968 /* 4649 */ { MAD_F(0x04bc5cfc) /* 0.295987115 */, 18 },
4969 /* 4650 */ { MAD_F(0x04bcb600) /* 0.296072008 */, 18 },
4970 /* 4651 */ { MAD_F(0x04bd0f06) /* 0.296156906 */, 18 },
4971 /* 4652 */ { MAD_F(0x04bd680d) /* 0.296241810 */, 18 },
4972 /* 4653 */ { MAD_F(0x04bdc116) /* 0.296326721 */, 18 },
4973 /* 4654 */ { MAD_F(0x04be1a21) /* 0.296411637 */, 18 },
4974 /* 4655 */ { MAD_F(0x04be732d) /* 0.296496560 */, 18 },
4975
4976 /* 4656 */ { MAD_F(0x04becc3b) /* 0.296581488 */, 18 },
4977 /* 4657 */ { MAD_F(0x04bf254a) /* 0.296666423 */, 18 },
4978 /* 4658 */ { MAD_F(0x04bf7e5b) /* 0.296751364 */, 18 },
4979 /* 4659 */ { MAD_F(0x04bfd76e) /* 0.296836311 */, 18 },
4980 /* 4660 */ { MAD_F(0x04c03083) /* 0.296921264 */, 18 },
4981 /* 4661 */ { MAD_F(0x04c08999) /* 0.297006223 */, 18 },
4982 /* 4662 */ { MAD_F(0x04c0e2b0) /* 0.297091188 */, 18 },
4983 /* 4663 */ { MAD_F(0x04c13bca) /* 0.297176159 */, 18 },
4984 /* 4664 */ { MAD_F(0x04c194e4) /* 0.297261136 */, 18 },
4985 /* 4665 */ { MAD_F(0x04c1ee01) /* 0.297346120 */, 18 },
4986 /* 4666 */ { MAD_F(0x04c2471f) /* 0.297431109 */, 18 },
4987 /* 4667 */ { MAD_F(0x04c2a03f) /* 0.297516105 */, 18 },
4988 /* 4668 */ { MAD_F(0x04c2f960) /* 0.297601106 */, 18 },
4989 /* 4669 */ { MAD_F(0x04c35283) /* 0.297686114 */, 18 },
4990 /* 4670 */ { MAD_F(0x04c3aba8) /* 0.297771128 */, 18 },
4991 /* 4671 */ { MAD_F(0x04c404ce) /* 0.297856147 */, 18 },
4992
4993 /* 4672 */ { MAD_F(0x04c45df6) /* 0.297941173 */, 18 },
4994 /* 4673 */ { MAD_F(0x04c4b720) /* 0.298026205 */, 18 },
4995 /* 4674 */ { MAD_F(0x04c5104b) /* 0.298111243 */, 18 },
4996 /* 4675 */ { MAD_F(0x04c56978) /* 0.298196287 */, 18 },
4997 /* 4676 */ { MAD_F(0x04c5c2a7) /* 0.298281337 */, 18 },
4998 /* 4677 */ { MAD_F(0x04c61bd7) /* 0.298366393 */, 18 },
4999 /* 4678 */ { MAD_F(0x04c67508) /* 0.298451456 */, 18 },
5000 /* 4679 */ { MAD_F(0x04c6ce3c) /* 0.298536524 */, 18 },
5001 /* 4680 */ { MAD_F(0x04c72771) /* 0.298621598 */, 18 },
5002 /* 4681 */ { MAD_F(0x04c780a7) /* 0.298706679 */, 18 },
5003 /* 4682 */ { MAD_F(0x04c7d9df) /* 0.298791765 */, 18 },
5004 /* 4683 */ { MAD_F(0x04c83319) /* 0.298876858 */, 18 },
5005 /* 4684 */ { MAD_F(0x04c88c55) /* 0.298961956 */, 18 },
5006 /* 4685 */ { MAD_F(0x04c8e592) /* 0.299047061 */, 18 },
5007 /* 4686 */ { MAD_F(0x04c93ed1) /* 0.299132172 */, 18 },
5008 /* 4687 */ { MAD_F(0x04c99811) /* 0.299217288 */, 18 },
5009
5010 /* 4688 */ { MAD_F(0x04c9f153) /* 0.299302411 */, 18 },
5011 /* 4689 */ { MAD_F(0x04ca4a97) /* 0.299387540 */, 18 },
5012 /* 4690 */ { MAD_F(0x04caa3dc) /* 0.299472675 */, 18 },
5013 /* 4691 */ { MAD_F(0x04cafd23) /* 0.299557816 */, 18 },
5014 /* 4692 */ { MAD_F(0x04cb566b) /* 0.299642963 */, 18 },
5015 /* 4693 */ { MAD_F(0x04cbafb5) /* 0.299728116 */, 18 },
5016 /* 4694 */ { MAD_F(0x04cc0901) /* 0.299813275 */, 18 },
5017 /* 4695 */ { MAD_F(0x04cc624e) /* 0.299898440 */, 18 },
5018 /* 4696 */ { MAD_F(0x04ccbb9d) /* 0.299983611 */, 18 },
5019 /* 4697 */ { MAD_F(0x04cd14ee) /* 0.300068789 */, 18 },
5020 /* 4698 */ { MAD_F(0x04cd6e40) /* 0.300153972 */, 18 },
5021 /* 4699 */ { MAD_F(0x04cdc794) /* 0.300239161 */, 18 },
5022 /* 4700 */ { MAD_F(0x04ce20e9) /* 0.300324357 */, 18 },
5023 /* 4701 */ { MAD_F(0x04ce7a40) /* 0.300409558 */, 18 },
5024 /* 4702 */ { MAD_F(0x04ced399) /* 0.300494765 */, 18 },
5025 /* 4703 */ { MAD_F(0x04cf2cf3) /* 0.300579979 */, 18 },
5026
5027 /* 4704 */ { MAD_F(0x04cf864f) /* 0.300665198 */, 18 },
5028 /* 4705 */ { MAD_F(0x04cfdfad) /* 0.300750424 */, 18 },
5029 /* 4706 */ { MAD_F(0x04d0390c) /* 0.300835656 */, 18 },
5030 /* 4707 */ { MAD_F(0x04d0926d) /* 0.300920893 */, 18 },
5031 /* 4708 */ { MAD_F(0x04d0ebcf) /* 0.301006137 */, 18 },
5032 /* 4709 */ { MAD_F(0x04d14533) /* 0.301091387 */, 18 },
5033 /* 4710 */ { MAD_F(0x04d19e99) /* 0.301176643 */, 18 },
5034 /* 4711 */ { MAD_F(0x04d1f800) /* 0.301261904 */, 18 },
5035 /* 4712 */ { MAD_F(0x04d25169) /* 0.301347172 */, 18 },
5036 /* 4713 */ { MAD_F(0x04d2aad4) /* 0.301432446 */, 18 },
5037 /* 4714 */ { MAD_F(0x04d30440) /* 0.301517726 */, 18 },
5038 /* 4715 */ { MAD_F(0x04d35dae) /* 0.301603012 */, 18 },
5039 /* 4716 */ { MAD_F(0x04d3b71d) /* 0.301688304 */, 18 },
5040 /* 4717 */ { MAD_F(0x04d4108e) /* 0.301773602 */, 18 },
5041 /* 4718 */ { MAD_F(0x04d46a01) /* 0.301858906 */, 18 },
5042 /* 4719 */ { MAD_F(0x04d4c375) /* 0.301944216 */, 18 },
5043
5044 /* 4720 */ { MAD_F(0x04d51ceb) /* 0.302029532 */, 18 },
5045 /* 4721 */ { MAD_F(0x04d57662) /* 0.302114854 */, 18 },
5046 /* 4722 */ { MAD_F(0x04d5cfdb) /* 0.302200182 */, 18 },
5047 /* 4723 */ { MAD_F(0x04d62956) /* 0.302285516 */, 18 },
5048 /* 4724 */ { MAD_F(0x04d682d2) /* 0.302370856 */, 18 },
5049 /* 4725 */ { MAD_F(0x04d6dc50) /* 0.302456203 */, 18 },
5050 /* 4726 */ { MAD_F(0x04d735d0) /* 0.302541555 */, 18 },
5051 /* 4727 */ { MAD_F(0x04d78f51) /* 0.302626913 */, 18 },
5052 /* 4728 */ { MAD_F(0x04d7e8d4) /* 0.302712277 */, 18 },
5053 /* 4729 */ { MAD_F(0x04d84258) /* 0.302797648 */, 18 },
5054 /* 4730 */ { MAD_F(0x04d89bde) /* 0.302883024 */, 18 },
5055 /* 4731 */ { MAD_F(0x04d8f566) /* 0.302968406 */, 18 },
5056 /* 4732 */ { MAD_F(0x04d94eef) /* 0.303053794 */, 18 },
5057 /* 4733 */ { MAD_F(0x04d9a87a) /* 0.303139189 */, 18 },
5058 /* 4734 */ { MAD_F(0x04da0207) /* 0.303224589 */, 18 },
5059 /* 4735 */ { MAD_F(0x04da5b95) /* 0.303309995 */, 18 },
5060
5061 /* 4736 */ { MAD_F(0x04dab524) /* 0.303395408 */, 18 },
5062 /* 4737 */ { MAD_F(0x04db0eb6) /* 0.303480826 */, 18 },
5063 /* 4738 */ { MAD_F(0x04db6849) /* 0.303566251 */, 18 },
5064 /* 4739 */ { MAD_F(0x04dbc1dd) /* 0.303651681 */, 18 },
5065 /* 4740 */ { MAD_F(0x04dc1b73) /* 0.303737117 */, 18 },
5066 /* 4741 */ { MAD_F(0x04dc750b) /* 0.303822560 */, 18 },
5067 /* 4742 */ { MAD_F(0x04dccea5) /* 0.303908008 */, 18 },
5068 /* 4743 */ { MAD_F(0x04dd2840) /* 0.303993463 */, 18 },
5069 /* 4744 */ { MAD_F(0x04dd81dc) /* 0.304078923 */, 18 },
5070 /* 4745 */ { MAD_F(0x04dddb7a) /* 0.304164390 */, 18 },
5071 /* 4746 */ { MAD_F(0x04de351a) /* 0.304249862 */, 18 },
5072 /* 4747 */ { MAD_F(0x04de8ebc) /* 0.304335340 */, 18 },
5073 /* 4748 */ { MAD_F(0x04dee85f) /* 0.304420825 */, 18 },
5074 /* 4749 */ { MAD_F(0x04df4203) /* 0.304506315 */, 18 },
5075 /* 4750 */ { MAD_F(0x04df9baa) /* 0.304591812 */, 18 },
5076 /* 4751 */ { MAD_F(0x04dff552) /* 0.304677314 */, 18 },
5077
5078 /* 4752 */ { MAD_F(0x04e04efb) /* 0.304762823 */, 18 },
5079 /* 4753 */ { MAD_F(0x04e0a8a6) /* 0.304848337 */, 18 },
5080 /* 4754 */ { MAD_F(0x04e10253) /* 0.304933858 */, 18 },
5081 /* 4755 */ { MAD_F(0x04e15c01) /* 0.305019384 */, 18 },
5082 /* 4756 */ { MAD_F(0x04e1b5b1) /* 0.305104917 */, 18 },
5083 /* 4757 */ { MAD_F(0x04e20f63) /* 0.305190455 */, 18 },
5084 /* 4758 */ { MAD_F(0x04e26916) /* 0.305275999 */, 18 },
5085 /* 4759 */ { MAD_F(0x04e2c2cb) /* 0.305361550 */, 18 },
5086 /* 4760 */ { MAD_F(0x04e31c81) /* 0.305447106 */, 18 },
5087 /* 4761 */ { MAD_F(0x04e37639) /* 0.305532669 */, 18 },
5088 /* 4762 */ { MAD_F(0x04e3cff3) /* 0.305618237 */, 18 },
5089 /* 4763 */ { MAD_F(0x04e429ae) /* 0.305703811 */, 18 },
5090 /* 4764 */ { MAD_F(0x04e4836b) /* 0.305789392 */, 18 },
5091 /* 4765 */ { MAD_F(0x04e4dd29) /* 0.305874978 */, 18 },
5092 /* 4766 */ { MAD_F(0x04e536e9) /* 0.305960571 */, 18 },
5093 /* 4767 */ { MAD_F(0x04e590ab) /* 0.306046169 */, 18 },
5094
5095 /* 4768 */ { MAD_F(0x04e5ea6e) /* 0.306131773 */, 18 },
5096 /* 4769 */ { MAD_F(0x04e64433) /* 0.306217383 */, 18 },
5097 /* 4770 */ { MAD_F(0x04e69df9) /* 0.306303000 */, 18 },
5098 /* 4771 */ { MAD_F(0x04e6f7c1) /* 0.306388622 */, 18 },
5099 /* 4772 */ { MAD_F(0x04e7518b) /* 0.306474250 */, 18 },
5100 /* 4773 */ { MAD_F(0x04e7ab56) /* 0.306559885 */, 18 },
5101 /* 4774 */ { MAD_F(0x04e80523) /* 0.306645525 */, 18 },
5102 /* 4775 */ { MAD_F(0x04e85ef2) /* 0.306731171 */, 18 },
5103 /* 4776 */ { MAD_F(0x04e8b8c2) /* 0.306816823 */, 18 },
5104 /* 4777 */ { MAD_F(0x04e91293) /* 0.306902481 */, 18 },
5105 /* 4778 */ { MAD_F(0x04e96c67) /* 0.306988145 */, 18 },
5106 /* 4779 */ { MAD_F(0x04e9c63b) /* 0.307073816 */, 18 },
5107 /* 4780 */ { MAD_F(0x04ea2012) /* 0.307159492 */, 18 },
5108 /* 4781 */ { MAD_F(0x04ea79ea) /* 0.307245174 */, 18 },
5109 /* 4782 */ { MAD_F(0x04ead3c4) /* 0.307330862 */, 18 },
5110 /* 4783 */ { MAD_F(0x04eb2d9f) /* 0.307416556 */, 18 },
5111
5112 /* 4784 */ { MAD_F(0x04eb877c) /* 0.307502256 */, 18 },
5113 /* 4785 */ { MAD_F(0x04ebe15b) /* 0.307587962 */, 18 },
5114 /* 4786 */ { MAD_F(0x04ec3b3b) /* 0.307673674 */, 18 },
5115 /* 4787 */ { MAD_F(0x04ec951c) /* 0.307759392 */, 18 },
5116 /* 4788 */ { MAD_F(0x04ecef00) /* 0.307845115 */, 18 },
5117 /* 4789 */ { MAD_F(0x04ed48e5) /* 0.307930845 */, 18 },
5118 /* 4790 */ { MAD_F(0x04eda2cb) /* 0.308016581 */, 18 },
5119 /* 4791 */ { MAD_F(0x04edfcb3) /* 0.308102323 */, 18 },
5120 /* 4792 */ { MAD_F(0x04ee569d) /* 0.308188071 */, 18 },
5121 /* 4793 */ { MAD_F(0x04eeb088) /* 0.308273824 */, 18 },
5122 /* 4794 */ { MAD_F(0x04ef0a75) /* 0.308359584 */, 18 },
5123 /* 4795 */ { MAD_F(0x04ef6464) /* 0.308445350 */, 18 },
5124 /* 4796 */ { MAD_F(0x04efbe54) /* 0.308531121 */, 18 },
5125 /* 4797 */ { MAD_F(0x04f01846) /* 0.308616899 */, 18 },
5126 /* 4798 */ { MAD_F(0x04f07239) /* 0.308702682 */, 18 },
5127 /* 4799 */ { MAD_F(0x04f0cc2e) /* 0.308788472 */, 18 },
5128
5129 /* 4800 */ { MAD_F(0x04f12624) /* 0.308874267 */, 18 },
5130 /* 4801 */ { MAD_F(0x04f1801d) /* 0.308960068 */, 18 },
5131 /* 4802 */ { MAD_F(0x04f1da16) /* 0.309045876 */, 18 },
5132 /* 4803 */ { MAD_F(0x04f23412) /* 0.309131689 */, 18 },
5133 /* 4804 */ { MAD_F(0x04f28e0f) /* 0.309217508 */, 18 },
5134 /* 4805 */ { MAD_F(0x04f2e80d) /* 0.309303334 */, 18 },
5135 /* 4806 */ { MAD_F(0x04f3420d) /* 0.309389165 */, 18 },
5136 /* 4807 */ { MAD_F(0x04f39c0f) /* 0.309475002 */, 18 },
5137 /* 4808 */ { MAD_F(0x04f3f612) /* 0.309560845 */, 18 },
5138 /* 4809 */ { MAD_F(0x04f45017) /* 0.309646694 */, 18 },
5139 /* 4810 */ { MAD_F(0x04f4aa1e) /* 0.309732549 */, 18 },
5140 /* 4811 */ { MAD_F(0x04f50426) /* 0.309818410 */, 18 },
5141 /* 4812 */ { MAD_F(0x04f55e30) /* 0.309904277 */, 18 },
5142 /* 4813 */ { MAD_F(0x04f5b83b) /* 0.309990150 */, 18 },
5143 /* 4814 */ { MAD_F(0x04f61248) /* 0.310076028 */, 18 },
5144 /* 4815 */ { MAD_F(0x04f66c56) /* 0.310161913 */, 18 },
5145
5146 /* 4816 */ { MAD_F(0x04f6c666) /* 0.310247804 */, 18 },
5147 /* 4817 */ { MAD_F(0x04f72078) /* 0.310333700 */, 18 },
5148 /* 4818 */ { MAD_F(0x04f77a8b) /* 0.310419603 */, 18 },
5149 /* 4819 */ { MAD_F(0x04f7d4a0) /* 0.310505511 */, 18 },
5150 /* 4820 */ { MAD_F(0x04f82eb7) /* 0.310591426 */, 18 },
5151 /* 4821 */ { MAD_F(0x04f888cf) /* 0.310677346 */, 18 },
5152 /* 4822 */ { MAD_F(0x04f8e2e9) /* 0.310763272 */, 18 },
5153 /* 4823 */ { MAD_F(0x04f93d04) /* 0.310849205 */, 18 },
5154 /* 4824 */ { MAD_F(0x04f99721) /* 0.310935143 */, 18 },
5155 /* 4825 */ { MAD_F(0x04f9f13f) /* 0.311021087 */, 18 },
5156 /* 4826 */ { MAD_F(0x04fa4b5f) /* 0.311107037 */, 18 },
5157 /* 4827 */ { MAD_F(0x04faa581) /* 0.311192993 */, 18 },
5158 /* 4828 */ { MAD_F(0x04faffa4) /* 0.311278955 */, 18 },
5159 /* 4829 */ { MAD_F(0x04fb59c9) /* 0.311364923 */, 18 },
5160 /* 4830 */ { MAD_F(0x04fbb3ef) /* 0.311450897 */, 18 },
5161 /* 4831 */ { MAD_F(0x04fc0e17) /* 0.311536877 */, 18 },
5162
5163 /* 4832 */ { MAD_F(0x04fc6841) /* 0.311622862 */, 18 },
5164 /* 4833 */ { MAD_F(0x04fcc26c) /* 0.311708854 */, 18 },
5165 /* 4834 */ { MAD_F(0x04fd1c99) /* 0.311794851 */, 18 },
5166 /* 4835 */ { MAD_F(0x04fd76c7) /* 0.311880855 */, 18 },
5167 /* 4836 */ { MAD_F(0x04fdd0f7) /* 0.311966864 */, 18 },
5168 /* 4837 */ { MAD_F(0x04fe2b29) /* 0.312052880 */, 18 },
5169 /* 4838 */ { MAD_F(0x04fe855c) /* 0.312138901 */, 18 },
5170 /* 4839 */ { MAD_F(0x04fedf91) /* 0.312224928 */, 18 },
5171 /* 4840 */ { MAD_F(0x04ff39c7) /* 0.312310961 */, 18 },
5172 /* 4841 */ { MAD_F(0x04ff93ff) /* 0.312397000 */, 18 },
5173 /* 4842 */ { MAD_F(0x04ffee38) /* 0.312483045 */, 18 },
5174 /* 4843 */ { MAD_F(0x05004874) /* 0.312569096 */, 18 },
5175 /* 4844 */ { MAD_F(0x0500a2b0) /* 0.312655153 */, 18 },
5176 /* 4845 */ { MAD_F(0x0500fcef) /* 0.312741216 */, 18 },
5177 /* 4846 */ { MAD_F(0x0501572e) /* 0.312827284 */, 18 },
5178 /* 4847 */ { MAD_F(0x0501b170) /* 0.312913359 */, 18 },
5179
5180 /* 4848 */ { MAD_F(0x05020bb3) /* 0.312999439 */, 18 },
5181 /* 4849 */ { MAD_F(0x050265f8) /* 0.313085526 */, 18 },
5182 /* 4850 */ { MAD_F(0x0502c03e) /* 0.313171618 */, 18 },
5183 /* 4851 */ { MAD_F(0x05031a86) /* 0.313257716 */, 18 },
5184 /* 4852 */ { MAD_F(0x050374cf) /* 0.313343820 */, 18 },
5185 /* 4853 */ { MAD_F(0x0503cf1a) /* 0.313429931 */, 18 },
5186 /* 4854 */ { MAD_F(0x05042967) /* 0.313516047 */, 18 },
5187 /* 4855 */ { MAD_F(0x050483b5) /* 0.313602168 */, 18 },
5188 /* 4856 */ { MAD_F(0x0504de05) /* 0.313688296 */, 18 },
5189 /* 4857 */ { MAD_F(0x05053856) /* 0.313774430 */, 18 },
5190 /* 4858 */ { MAD_F(0x050592a9) /* 0.313860570 */, 18 },
5191 /* 4859 */ { MAD_F(0x0505ecfd) /* 0.313946715 */, 18 },
5192 /* 4860 */ { MAD_F(0x05064754) /* 0.314032867 */, 18 },
5193 /* 4861 */ { MAD_F(0x0506a1ab) /* 0.314119024 */, 18 },
5194 /* 4862 */ { MAD_F(0x0506fc04) /* 0.314205187 */, 18 },
5195 /* 4863 */ { MAD_F(0x0507565f) /* 0.314291357 */, 18 },
5196
5197 /* 4864 */ { MAD_F(0x0507b0bc) /* 0.314377532 */, 18 },
5198 /* 4865 */ { MAD_F(0x05080b1a) /* 0.314463713 */, 18 },
5199 /* 4866 */ { MAD_F(0x05086579) /* 0.314549900 */, 18 },
5200 /* 4867 */ { MAD_F(0x0508bfdb) /* 0.314636092 */, 18 },
5201 /* 4868 */ { MAD_F(0x05091a3d) /* 0.314722291 */, 18 },
5202 /* 4869 */ { MAD_F(0x050974a2) /* 0.314808496 */, 18 },
5203 /* 4870 */ { MAD_F(0x0509cf08) /* 0.314894706 */, 18 },
5204 /* 4871 */ { MAD_F(0x050a296f) /* 0.314980923 */, 18 },
5205 /* 4872 */ { MAD_F(0x050a83d8) /* 0.315067145 */, 18 },
5206 /* 4873 */ { MAD_F(0x050ade43) /* 0.315153373 */, 18 },
5207 /* 4874 */ { MAD_F(0x050b38af) /* 0.315239607 */, 18 },
5208 /* 4875 */ { MAD_F(0x050b931d) /* 0.315325847 */, 18 },
5209 /* 4876 */ { MAD_F(0x050bed8d) /* 0.315412093 */, 18 },
5210 /* 4877 */ { MAD_F(0x050c47fe) /* 0.315498345 */, 18 },
5211 /* 4878 */ { MAD_F(0x050ca271) /* 0.315584603 */, 18 },
5212 /* 4879 */ { MAD_F(0x050cfce5) /* 0.315670866 */, 18 },
5213
5214 /* 4880 */ { MAD_F(0x050d575b) /* 0.315757136 */, 18 },
5215 /* 4881 */ { MAD_F(0x050db1d2) /* 0.315843411 */, 18 },
5216 /* 4882 */ { MAD_F(0x050e0c4b) /* 0.315929693 */, 18 },
5217 /* 4883 */ { MAD_F(0x050e66c5) /* 0.316015980 */, 18 },
5218 /* 4884 */ { MAD_F(0x050ec141) /* 0.316102273 */, 18 },
5219 /* 4885 */ { MAD_F(0x050f1bbf) /* 0.316188572 */, 18 },
5220 /* 4886 */ { MAD_F(0x050f763e) /* 0.316274877 */, 18 },
5221 /* 4887 */ { MAD_F(0x050fd0bf) /* 0.316361187 */, 18 },
5222 /* 4888 */ { MAD_F(0x05102b42) /* 0.316447504 */, 18 },
5223 /* 4889 */ { MAD_F(0x051085c6) /* 0.316533826 */, 18 },
5224 /* 4890 */ { MAD_F(0x0510e04b) /* 0.316620155 */, 18 },
5225 /* 4891 */ { MAD_F(0x05113ad3) /* 0.316706489 */, 18 },
5226 /* 4892 */ { MAD_F(0x0511955b) /* 0.316792829 */, 18 },
5227 /* 4893 */ { MAD_F(0x0511efe6) /* 0.316879175 */, 18 },
5228 /* 4894 */ { MAD_F(0x05124a72) /* 0.316965527 */, 18 },
5229 /* 4895 */ { MAD_F(0x0512a4ff) /* 0.317051885 */, 18 },
5230
5231 /* 4896 */ { MAD_F(0x0512ff8e) /* 0.317138249 */, 18 },
5232 /* 4897 */ { MAD_F(0x05135a1f) /* 0.317224618 */, 18 },
5233 /* 4898 */ { MAD_F(0x0513b4b1) /* 0.317310994 */, 18 },
5234 /* 4899 */ { MAD_F(0x05140f45) /* 0.317397375 */, 18 },
5235 /* 4900 */ { MAD_F(0x051469da) /* 0.317483762 */, 18 },
5236 /* 4901 */ { MAD_F(0x0514c471) /* 0.317570155 */, 18 },
5237 /* 4902 */ { MAD_F(0x05151f0a) /* 0.317656554 */, 18 },
5238 /* 4903 */ { MAD_F(0x051579a4) /* 0.317742959 */, 18 },
5239 /* 4904 */ { MAD_F(0x0515d440) /* 0.317829370 */, 18 },
5240 /* 4905 */ { MAD_F(0x05162edd) /* 0.317915786 */, 18 },
5241 /* 4906 */ { MAD_F(0x0516897c) /* 0.318002209 */, 18 },
5242 /* 4907 */ { MAD_F(0x0516e41c) /* 0.318088637 */, 18 },
5243 /* 4908 */ { MAD_F(0x05173ebe) /* 0.318175071 */, 18 },
5244 /* 4909 */ { MAD_F(0x05179962) /* 0.318261511 */, 18 },
5245 /* 4910 */ { MAD_F(0x0517f407) /* 0.318347957 */, 18 },
5246 /* 4911 */ { MAD_F(0x05184eae) /* 0.318434409 */, 18 },
5247
5248 /* 4912 */ { MAD_F(0x0518a956) /* 0.318520867 */, 18 },
5249 /* 4913 */ { MAD_F(0x05190400) /* 0.318607330 */, 18 },
5250 /* 4914 */ { MAD_F(0x05195eab) /* 0.318693800 */, 18 },
5251 /* 4915 */ { MAD_F(0x0519b958) /* 0.318780275 */, 18 },
5252 /* 4916 */ { MAD_F(0x051a1407) /* 0.318866756 */, 18 },
5253 /* 4917 */ { MAD_F(0x051a6eb7) /* 0.318953243 */, 18 },
5254 /* 4918 */ { MAD_F(0x051ac969) /* 0.319039736 */, 18 },
5255 /* 4919 */ { MAD_F(0x051b241c) /* 0.319126235 */, 18 },
5256 /* 4920 */ { MAD_F(0x051b7ed1) /* 0.319212739 */, 18 },
5257 /* 4921 */ { MAD_F(0x051bd987) /* 0.319299250 */, 18 },
5258 /* 4922 */ { MAD_F(0x051c3440) /* 0.319385766 */, 18 },
5259 /* 4923 */ { MAD_F(0x051c8ef9) /* 0.319472288 */, 18 },
5260 /* 4924 */ { MAD_F(0x051ce9b4) /* 0.319558816 */, 18 },
5261 /* 4925 */ { MAD_F(0x051d4471) /* 0.319645350 */, 18 },
5262 /* 4926 */ { MAD_F(0x051d9f2f) /* 0.319731890 */, 18 },
5263 /* 4927 */ { MAD_F(0x051df9ef) /* 0.319818435 */, 18 },
5264
5265 /* 4928 */ { MAD_F(0x051e54b1) /* 0.319904987 */, 18 },
5266 /* 4929 */ { MAD_F(0x051eaf74) /* 0.319991544 */, 18 },
5267 /* 4930 */ { MAD_F(0x051f0a38) /* 0.320078107 */, 18 },
5268 /* 4931 */ { MAD_F(0x051f64ff) /* 0.320164676 */, 18 },
5269 /* 4932 */ { MAD_F(0x051fbfc6) /* 0.320251251 */, 18 },
5270 /* 4933 */ { MAD_F(0x05201a90) /* 0.320337832 */, 18 },
5271 /* 4934 */ { MAD_F(0x0520755b) /* 0.320424419 */, 18 },
5272 /* 4935 */ { MAD_F(0x0520d027) /* 0.320511011 */, 18 },
5273 /* 4936 */ { MAD_F(0x05212af5) /* 0.320597609 */, 18 },
5274 /* 4937 */ { MAD_F(0x052185c5) /* 0.320684213 */, 18 },
5275 /* 4938 */ { MAD_F(0x0521e096) /* 0.320770823 */, 18 },
5276 /* 4939 */ { MAD_F(0x05223b69) /* 0.320857439 */, 18 },
5277 /* 4940 */ { MAD_F(0x0522963d) /* 0.320944061 */, 18 },
5278 /* 4941 */ { MAD_F(0x0522f113) /* 0.321030688 */, 18 },
5279 /* 4942 */ { MAD_F(0x05234bea) /* 0.321117322 */, 18 },
5280 /* 4943 */ { MAD_F(0x0523a6c3) /* 0.321203961 */, 18 },
5281
5282 /* 4944 */ { MAD_F(0x0524019e) /* 0.321290606 */, 18 },
5283 /* 4945 */ { MAD_F(0x05245c7a) /* 0.321377257 */, 18 },
5284 /* 4946 */ { MAD_F(0x0524b758) /* 0.321463913 */, 18 },
5285 /* 4947 */ { MAD_F(0x05251237) /* 0.321550576 */, 18 },
5286 /* 4948 */ { MAD_F(0x05256d18) /* 0.321637244 */, 18 },
5287 /* 4949 */ { MAD_F(0x0525c7fb) /* 0.321723919 */, 18 },
5288 /* 4950 */ { MAD_F(0x052622df) /* 0.321810599 */, 18 },
5289 /* 4951 */ { MAD_F(0x05267dc4) /* 0.321897285 */, 18 },
5290 /* 4952 */ { MAD_F(0x0526d8ab) /* 0.321983976 */, 18 },
5291 /* 4953 */ { MAD_F(0x05273394) /* 0.322070674 */, 18 },
5292 /* 4954 */ { MAD_F(0x05278e7e) /* 0.322157377 */, 18 },
5293 /* 4955 */ { MAD_F(0x0527e96a) /* 0.322244087 */, 18 },
5294 /* 4956 */ { MAD_F(0x05284457) /* 0.322330802 */, 18 },
5295 /* 4957 */ { MAD_F(0x05289f46) /* 0.322417523 */, 18 },
5296 /* 4958 */ { MAD_F(0x0528fa37) /* 0.322504249 */, 18 },
5297 /* 4959 */ { MAD_F(0x05295529) /* 0.322590982 */, 18 },
5298
5299 /* 4960 */ { MAD_F(0x0529b01d) /* 0.322677720 */, 18 },
5300 /* 4961 */ { MAD_F(0x052a0b12) /* 0.322764465 */, 18 },
5301 /* 4962 */ { MAD_F(0x052a6609) /* 0.322851215 */, 18 },
5302 /* 4963 */ { MAD_F(0x052ac101) /* 0.322937971 */, 18 },
5303 /* 4964 */ { MAD_F(0x052b1bfb) /* 0.323024732 */, 18 },
5304 /* 4965 */ { MAD_F(0x052b76f7) /* 0.323111500 */, 18 },
5305 /* 4966 */ { MAD_F(0x052bd1f4) /* 0.323198273 */, 18 },
5306 /* 4967 */ { MAD_F(0x052c2cf2) /* 0.323285052 */, 18 },
5307 /* 4968 */ { MAD_F(0x052c87f2) /* 0.323371837 */, 18 },
5308 /* 4969 */ { MAD_F(0x052ce2f4) /* 0.323458628 */, 18 },
5309 /* 4970 */ { MAD_F(0x052d3df7) /* 0.323545425 */, 18 },
5310 /* 4971 */ { MAD_F(0x052d98fc) /* 0.323632227 */, 18 },
5311 /* 4972 */ { MAD_F(0x052df403) /* 0.323719036 */, 18 },
5312 /* 4973 */ { MAD_F(0x052e4f0b) /* 0.323805850 */, 18 },
5313 /* 4974 */ { MAD_F(0x052eaa14) /* 0.323892670 */, 18 },
5314 /* 4975 */ { MAD_F(0x052f051f) /* 0.323979496 */, 18 },
5315
5316 /* 4976 */ { MAD_F(0x052f602c) /* 0.324066327 */, 18 },
5317 /* 4977 */ { MAD_F(0x052fbb3a) /* 0.324153165 */, 18 },
5318 /* 4978 */ { MAD_F(0x0530164a) /* 0.324240008 */, 18 },
5319 /* 4979 */ { MAD_F(0x0530715b) /* 0.324326857 */, 18 },
5320 /* 4980 */ { MAD_F(0x0530cc6e) /* 0.324413712 */, 18 },
5321 /* 4981 */ { MAD_F(0x05312783) /* 0.324500572 */, 18 },
5322 /* 4982 */ { MAD_F(0x05318299) /* 0.324587439 */, 18 },
5323 /* 4983 */ { MAD_F(0x0531ddb0) /* 0.324674311 */, 18 },
5324 /* 4984 */ { MAD_F(0x053238ca) /* 0.324761189 */, 18 },
5325 /* 4985 */ { MAD_F(0x053293e4) /* 0.324848073 */, 18 },
5326 /* 4986 */ { MAD_F(0x0532ef01) /* 0.324934963 */, 18 },
5327 /* 4987 */ { MAD_F(0x05334a1e) /* 0.325021858 */, 18 },
5328 /* 4988 */ { MAD_F(0x0533a53e) /* 0.325108760 */, 18 },
5329 /* 4989 */ { MAD_F(0x0534005f) /* 0.325195667 */, 18 },
5330 /* 4990 */ { MAD_F(0x05345b81) /* 0.325282580 */, 18 },
5331 /* 4991 */ { MAD_F(0x0534b6a5) /* 0.325369498 */, 18 },
5332
5333 /* 4992 */ { MAD_F(0x053511cb) /* 0.325456423 */, 18 },
5334 /* 4993 */ { MAD_F(0x05356cf2) /* 0.325543353 */, 18 },
5335 /* 4994 */ { MAD_F(0x0535c81b) /* 0.325630290 */, 18 },
5336 /* 4995 */ { MAD_F(0x05362345) /* 0.325717232 */, 18 },
5337 /* 4996 */ { MAD_F(0x05367e71) /* 0.325804179 */, 18 },
5338 /* 4997 */ { MAD_F(0x0536d99f) /* 0.325891133 */, 18 },
5339 /* 4998 */ { MAD_F(0x053734ce) /* 0.325978092 */, 18 },
5340 /* 4999 */ { MAD_F(0x05378ffe) /* 0.326065057 */, 18 },
5341 /* 5000 */ { MAD_F(0x0537eb30) /* 0.326152028 */, 18 },
5342 /* 5001 */ { MAD_F(0x05384664) /* 0.326239005 */, 18 },
5343 /* 5002 */ { MAD_F(0x0538a199) /* 0.326325988 */, 18 },
5344 /* 5003 */ { MAD_F(0x0538fcd0) /* 0.326412976 */, 18 },
5345 /* 5004 */ { MAD_F(0x05395808) /* 0.326499970 */, 18 },
5346 /* 5005 */ { MAD_F(0x0539b342) /* 0.326586970 */, 18 },
5347 /* 5006 */ { MAD_F(0x053a0e7d) /* 0.326673976 */, 18 },
5348 /* 5007 */ { MAD_F(0x053a69ba) /* 0.326760988 */, 18 },
5349
5350 /* 5008 */ { MAD_F(0x053ac4f9) /* 0.326848005 */, 18 },
5351 /* 5009 */ { MAD_F(0x053b2039) /* 0.326935028 */, 18 },
5352 /* 5010 */ { MAD_F(0x053b7b7b) /* 0.327022057 */, 18 },
5353 /* 5011 */ { MAD_F(0x053bd6be) /* 0.327109092 */, 18 },
5354 /* 5012 */ { MAD_F(0x053c3203) /* 0.327196132 */, 18 },
5355 /* 5013 */ { MAD_F(0x053c8d49) /* 0.327283178 */, 18 },
5356 /* 5014 */ { MAD_F(0x053ce891) /* 0.327370231 */, 18 },
5357 /* 5015 */ { MAD_F(0x053d43da) /* 0.327457288 */, 18 },
5358 /* 5016 */ { MAD_F(0x053d9f25) /* 0.327544352 */, 18 },
5359 /* 5017 */ { MAD_F(0x053dfa72) /* 0.327631421 */, 18 },
5360 /* 5018 */ { MAD_F(0x053e55c0) /* 0.327718497 */, 18 },
5361 /* 5019 */ { MAD_F(0x053eb10f) /* 0.327805578 */, 18 },
5362 /* 5020 */ { MAD_F(0x053f0c61) /* 0.327892665 */, 18 },
5363 /* 5021 */ { MAD_F(0x053f67b3) /* 0.327979757 */, 18 },
5364 /* 5022 */ { MAD_F(0x053fc308) /* 0.328066855 */, 18 },
5365 /* 5023 */ { MAD_F(0x05401e5e) /* 0.328153960 */, 18 },
5366
5367 /* 5024 */ { MAD_F(0x054079b5) /* 0.328241070 */, 18 },
5368 /* 5025 */ { MAD_F(0x0540d50e) /* 0.328328185 */, 18 },
5369 /* 5026 */ { MAD_F(0x05413068) /* 0.328415307 */, 18 },
5370 /* 5027 */ { MAD_F(0x05418bc4) /* 0.328502434 */, 18 },
5371 /* 5028 */ { MAD_F(0x0541e722) /* 0.328589567 */, 18 },
5372 /* 5029 */ { MAD_F(0x05424281) /* 0.328676706 */, 18 },
5373 /* 5030 */ { MAD_F(0x05429de2) /* 0.328763850 */, 18 },
5374 /* 5031 */ { MAD_F(0x0542f944) /* 0.328851001 */, 18 },
5375 /* 5032 */ { MAD_F(0x054354a8) /* 0.328938157 */, 18 },
5376 /* 5033 */ { MAD_F(0x0543b00d) /* 0.329025319 */, 18 },
5377 /* 5034 */ { MAD_F(0x05440b74) /* 0.329112486 */, 18 },
5378 /* 5035 */ { MAD_F(0x054466dd) /* 0.329199660 */, 18 },
5379 /* 5036 */ { MAD_F(0x0544c247) /* 0.329286839 */, 18 },
5380 /* 5037 */ { MAD_F(0x05451db2) /* 0.329374024 */, 18 },
5381 /* 5038 */ { MAD_F(0x0545791f) /* 0.329461215 */, 18 },
5382 /* 5039 */ { MAD_F(0x0545d48e) /* 0.329548411 */, 18 },
5383
5384 /* 5040 */ { MAD_F(0x05462ffe) /* 0.329635614 */, 18 },
5385 /* 5041 */ { MAD_F(0x05468b70) /* 0.329722822 */, 18 },
5386 /* 5042 */ { MAD_F(0x0546e6e3) /* 0.329810036 */, 18 },
5387 /* 5043 */ { MAD_F(0x05474258) /* 0.329897255 */, 18 },
5388 /* 5044 */ { MAD_F(0x05479dce) /* 0.329984481 */, 18 },
5389 /* 5045 */ { MAD_F(0x0547f946) /* 0.330071712 */, 18 },
5390 /* 5046 */ { MAD_F(0x054854c0) /* 0.330158949 */, 18 },
5391 /* 5047 */ { MAD_F(0x0548b03b) /* 0.330246191 */, 18 },
5392 /* 5048 */ { MAD_F(0x05490bb7) /* 0.330333440 */, 18 },
5393 /* 5049 */ { MAD_F(0x05496735) /* 0.330420694 */, 18 },
5394 /* 5050 */ { MAD_F(0x0549c2b5) /* 0.330507954 */, 18 },
5395 /* 5051 */ { MAD_F(0x054a1e36) /* 0.330595220 */, 18 },
5396 /* 5052 */ { MAD_F(0x054a79b9) /* 0.330682491 */, 18 },
5397 /* 5053 */ { MAD_F(0x054ad53d) /* 0.330769768 */, 18 },
5398 /* 5054 */ { MAD_F(0x054b30c3) /* 0.330857051 */, 18 },
5399 /* 5055 */ { MAD_F(0x054b8c4b) /* 0.330944340 */, 18 },
5400
5401 /* 5056 */ { MAD_F(0x054be7d4) /* 0.331031635 */, 18 },
5402 /* 5057 */ { MAD_F(0x054c435e) /* 0.331118935 */, 18 },
5403 /* 5058 */ { MAD_F(0x054c9eea) /* 0.331206241 */, 18 },
5404 /* 5059 */ { MAD_F(0x054cfa78) /* 0.331293553 */, 18 },
5405 /* 5060 */ { MAD_F(0x054d5607) /* 0.331380870 */, 18 },
5406 /* 5061 */ { MAD_F(0x054db197) /* 0.331468193 */, 18 },
5407 /* 5062 */ { MAD_F(0x054e0d2a) /* 0.331555522 */, 18 },
5408 /* 5063 */ { MAD_F(0x054e68bd) /* 0.331642857 */, 18 },
5409 /* 5064 */ { MAD_F(0x054ec453) /* 0.331730198 */, 18 },
5410 /* 5065 */ { MAD_F(0x054f1fe9) /* 0.331817544 */, 18 },
5411 /* 5066 */ { MAD_F(0x054f7b82) /* 0.331904896 */, 18 },
5412 /* 5067 */ { MAD_F(0x054fd71c) /* 0.331992254 */, 18 },
5413 /* 5068 */ { MAD_F(0x055032b7) /* 0.332079617 */, 18 },
5414 /* 5069 */ { MAD_F(0x05508e54) /* 0.332166986 */, 18 },
5415 /* 5070 */ { MAD_F(0x0550e9f3) /* 0.332254361 */, 18 },
5416 /* 5071 */ { MAD_F(0x05514593) /* 0.332341742 */, 18 },
5417
5418 /* 5072 */ { MAD_F(0x0551a134) /* 0.332429129 */, 18 },
5419 /* 5073 */ { MAD_F(0x0551fcd8) /* 0.332516521 */, 18 },
5420 /* 5074 */ { MAD_F(0x0552587c) /* 0.332603919 */, 18 },
5421 /* 5075 */ { MAD_F(0x0552b423) /* 0.332691323 */, 18 },
5422 /* 5076 */ { MAD_F(0x05530fca) /* 0.332778732 */, 18 },
5423 /* 5077 */ { MAD_F(0x05536b74) /* 0.332866147 */, 18 },
5424 /* 5078 */ { MAD_F(0x0553c71f) /* 0.332953568 */, 18 },
5425 /* 5079 */ { MAD_F(0x055422cb) /* 0.333040995 */, 18 },
5426 /* 5080 */ { MAD_F(0x05547e79) /* 0.333128427 */, 18 },
5427 /* 5081 */ { MAD_F(0x0554da29) /* 0.333215865 */, 18 },
5428 /* 5082 */ { MAD_F(0x055535da) /* 0.333303309 */, 18 },
5429 /* 5083 */ { MAD_F(0x0555918c) /* 0.333390759 */, 18 },
5430 /* 5084 */ { MAD_F(0x0555ed40) /* 0.333478214 */, 18 },
5431 /* 5085 */ { MAD_F(0x055648f6) /* 0.333565675 */, 18 },
5432 /* 5086 */ { MAD_F(0x0556a4ad) /* 0.333653142 */, 18 },
5433 /* 5087 */ { MAD_F(0x05570066) /* 0.333740615 */, 18 },
5434
5435 /* 5088 */ { MAD_F(0x05575c20) /* 0.333828093 */, 18 },
5436 /* 5089 */ { MAD_F(0x0557b7dc) /* 0.333915577 */, 18 },
5437 /* 5090 */ { MAD_F(0x05581399) /* 0.334003067 */, 18 },
5438 /* 5091 */ { MAD_F(0x05586f58) /* 0.334090562 */, 18 },
5439 /* 5092 */ { MAD_F(0x0558cb19) /* 0.334178063 */, 18 },
5440 /* 5093 */ { MAD_F(0x055926db) /* 0.334265570 */, 18 },
5441 /* 5094 */ { MAD_F(0x0559829e) /* 0.334353083 */, 18 },
5442 /* 5095 */ { MAD_F(0x0559de63) /* 0.334440601 */, 18 },
5443 /* 5096 */ { MAD_F(0x055a3a2a) /* 0.334528126 */, 18 },
5444 /* 5097 */ { MAD_F(0x055a95f2) /* 0.334615655 */, 18 },
5445 /* 5098 */ { MAD_F(0x055af1bb) /* 0.334703191 */, 18 },
5446 /* 5099 */ { MAD_F(0x055b4d87) /* 0.334790732 */, 18 },
5447 /* 5100 */ { MAD_F(0x055ba953) /* 0.334878279 */, 18 },
5448 /* 5101 */ { MAD_F(0x055c0522) /* 0.334965832 */, 18 },
5449 /* 5102 */ { MAD_F(0x055c60f1) /* 0.335053391 */, 18 },
5450 /* 5103 */ { MAD_F(0x055cbcc3) /* 0.335140955 */, 18 },
5451
5452 /* 5104 */ { MAD_F(0x055d1896) /* 0.335228525 */, 18 },
5453 /* 5105 */ { MAD_F(0x055d746a) /* 0.335316100 */, 18 },
5454 /* 5106 */ { MAD_F(0x055dd040) /* 0.335403682 */, 18 },
5455 /* 5107 */ { MAD_F(0x055e2c17) /* 0.335491269 */, 18 },
5456 /* 5108 */ { MAD_F(0x055e87f0) /* 0.335578861 */, 18 },
5457 /* 5109 */ { MAD_F(0x055ee3cb) /* 0.335666460 */, 18 },
5458 /* 5110 */ { MAD_F(0x055f3fa7) /* 0.335754064 */, 18 },
5459 /* 5111 */ { MAD_F(0x055f9b85) /* 0.335841674 */, 18 },
5460 /* 5112 */ { MAD_F(0x055ff764) /* 0.335929290 */, 18 },
5461 /* 5113 */ { MAD_F(0x05605344) /* 0.336016911 */, 18 },
5462 /* 5114 */ { MAD_F(0x0560af27) /* 0.336104538 */, 18 },
5463 /* 5115 */ { MAD_F(0x05610b0a) /* 0.336192171 */, 18 },
5464 /* 5116 */ { MAD_F(0x056166f0) /* 0.336279809 */, 18 },
5465 /* 5117 */ { MAD_F(0x0561c2d7) /* 0.336367453 */, 18 },
5466 /* 5118 */ { MAD_F(0x05621ebf) /* 0.336455103 */, 18 },
5467 /* 5119 */ { MAD_F(0x05627aa9) /* 0.336542759 */, 18 },
5468
5469 /* 5120 */ { MAD_F(0x0562d694) /* 0.336630420 */, 18 },
5470 /* 5121 */ { MAD_F(0x05633281) /* 0.336718087 */, 18 },
5471 /* 5122 */ { MAD_F(0x05638e70) /* 0.336805760 */, 18 },
5472 /* 5123 */ { MAD_F(0x0563ea60) /* 0.336893439 */, 18 },
5473 /* 5124 */ { MAD_F(0x05644651) /* 0.336981123 */, 18 },
5474 /* 5125 */ { MAD_F(0x0564a244) /* 0.337068813 */, 18 },
5475 /* 5126 */ { MAD_F(0x0564fe39) /* 0.337156508 */, 18 },
5476 /* 5127 */ { MAD_F(0x05655a2f) /* 0.337244209 */, 18 },
5477 /* 5128 */ { MAD_F(0x0565b627) /* 0.337331916 */, 18 },
5478 /* 5129 */ { MAD_F(0x05661220) /* 0.337419629 */, 18 },
5479 /* 5130 */ { MAD_F(0x05666e1a) /* 0.337507347 */, 18 },
5480 /* 5131 */ { MAD_F(0x0566ca17) /* 0.337595071 */, 18 },
5481 /* 5132 */ { MAD_F(0x05672614) /* 0.337682801 */, 18 },
5482 /* 5133 */ { MAD_F(0x05678214) /* 0.337770537 */, 18 },
5483 /* 5134 */ { MAD_F(0x0567de15) /* 0.337858278 */, 18 },
5484 /* 5135 */ { MAD_F(0x05683a17) /* 0.337946025 */, 18 },
5485
5486 /* 5136 */ { MAD_F(0x0568961b) /* 0.338033777 */, 18 },
5487 /* 5137 */ { MAD_F(0x0568f220) /* 0.338121535 */, 18 },
5488 /* 5138 */ { MAD_F(0x05694e27) /* 0.338209299 */, 18 },
5489 /* 5139 */ { MAD_F(0x0569aa30) /* 0.338297069 */, 18 },
5490 /* 5140 */ { MAD_F(0x056a063a) /* 0.338384844 */, 18 },
5491 /* 5141 */ { MAD_F(0x056a6245) /* 0.338472625 */, 18 },
5492 /* 5142 */ { MAD_F(0x056abe52) /* 0.338560412 */, 18 },
5493 /* 5143 */ { MAD_F(0x056b1a61) /* 0.338648204 */, 18 },
5494 /* 5144 */ { MAD_F(0x056b7671) /* 0.338736002 */, 18 },
5495 /* 5145 */ { MAD_F(0x056bd283) /* 0.338823806 */, 18 },
5496 /* 5146 */ { MAD_F(0x056c2e96) /* 0.338911616 */, 18 },
5497 /* 5147 */ { MAD_F(0x056c8aab) /* 0.338999431 */, 18 },
5498 /* 5148 */ { MAD_F(0x056ce6c1) /* 0.339087252 */, 18 },
5499 /* 5149 */ { MAD_F(0x056d42d9) /* 0.339175078 */, 18 },
5500 /* 5150 */ { MAD_F(0x056d9ef2) /* 0.339262910 */, 18 },
5501 /* 5151 */ { MAD_F(0x056dfb0d) /* 0.339350748 */, 18 },
5502
5503 /* 5152 */ { MAD_F(0x056e5729) /* 0.339438592 */, 18 },
5504 /* 5153 */ { MAD_F(0x056eb347) /* 0.339526441 */, 18 },
5505 /* 5154 */ { MAD_F(0x056f0f66) /* 0.339614296 */, 18 },
5506 /* 5155 */ { MAD_F(0x056f6b87) /* 0.339702157 */, 18 },
5507 /* 5156 */ { MAD_F(0x056fc7aa) /* 0.339790023 */, 18 },
5508 /* 5157 */ { MAD_F(0x057023cd) /* 0.339877895 */, 18 },
5509 /* 5158 */ { MAD_F(0x05707ff3) /* 0.339965773 */, 18 },
5510 /* 5159 */ { MAD_F(0x0570dc1a) /* 0.340053656 */, 18 },
5511 /* 5160 */ { MAD_F(0x05713843) /* 0.340141545 */, 18 },
5512 /* 5161 */ { MAD_F(0x0571946d) /* 0.340229440 */, 18 },
5513 /* 5162 */ { MAD_F(0x0571f098) /* 0.340317340 */, 18 },
5514 /* 5163 */ { MAD_F(0x05724cc5) /* 0.340405246 */, 18 },
5515 /* 5164 */ { MAD_F(0x0572a8f4) /* 0.340493158 */, 18 },
5516 /* 5165 */ { MAD_F(0x05730524) /* 0.340581075 */, 18 },
5517 /* 5166 */ { MAD_F(0x05736156) /* 0.340668999 */, 18 },
5518 /* 5167 */ { MAD_F(0x0573bd89) /* 0.340756927 */, 18 },
5519
5520 /* 5168 */ { MAD_F(0x057419be) /* 0.340844862 */, 18 },
5521 /* 5169 */ { MAD_F(0x057475f4) /* 0.340932802 */, 18 },
5522 /* 5170 */ { MAD_F(0x0574d22c) /* 0.341020748 */, 18 },
5523 /* 5171 */ { MAD_F(0x05752e65) /* 0.341108699 */, 18 },
5524 /* 5172 */ { MAD_F(0x05758aa0) /* 0.341196656 */, 18 },
5525 /* 5173 */ { MAD_F(0x0575e6dc) /* 0.341284619 */, 18 },
5526 /* 5174 */ { MAD_F(0x0576431a) /* 0.341372587 */, 18 },
5527 /* 5175 */ { MAD_F(0x05769f59) /* 0.341460562 */, 18 },
5528 /* 5176 */ { MAD_F(0x0576fb9a) /* 0.341548541 */, 18 },
5529 /* 5177 */ { MAD_F(0x057757dd) /* 0.341636527 */, 18 },
5530 /* 5178 */ { MAD_F(0x0577b421) /* 0.341724518 */, 18 },
5531 /* 5179 */ { MAD_F(0x05781066) /* 0.341812515 */, 18 },
5532 /* 5180 */ { MAD_F(0x05786cad) /* 0.341900517 */, 18 },
5533 /* 5181 */ { MAD_F(0x0578c8f5) /* 0.341988525 */, 18 },
5534 /* 5182 */ { MAD_F(0x0579253f) /* 0.342076539 */, 18 },
5535 /* 5183 */ { MAD_F(0x0579818b) /* 0.342164558 */, 18 },
5536
5537 /* 5184 */ { MAD_F(0x0579ddd8) /* 0.342252584 */, 18 },
5538 /* 5185 */ { MAD_F(0x057a3a27) /* 0.342340614 */, 18 },
5539 /* 5186 */ { MAD_F(0x057a9677) /* 0.342428651 */, 18 },
5540 /* 5187 */ { MAD_F(0x057af2c8) /* 0.342516693 */, 18 },
5541 /* 5188 */ { MAD_F(0x057b4f1c) /* 0.342604741 */, 18 },
5542 /* 5189 */ { MAD_F(0x057bab70) /* 0.342692794 */, 18 },
5543 /* 5190 */ { MAD_F(0x057c07c6) /* 0.342780853 */, 18 },
5544 /* 5191 */ { MAD_F(0x057c641e) /* 0.342868918 */, 18 },
5545 /* 5192 */ { MAD_F(0x057cc077) /* 0.342956988 */, 18 },
5546 /* 5193 */ { MAD_F(0x057d1cd2) /* 0.343045064 */, 18 },
5547 /* 5194 */ { MAD_F(0x057d792e) /* 0.343133146 */, 18 },
5548 /* 5195 */ { MAD_F(0x057dd58c) /* 0.343221233 */, 18 },
5549 /* 5196 */ { MAD_F(0x057e31eb) /* 0.343309326 */, 18 },
5550 /* 5197 */ { MAD_F(0x057e8e4c) /* 0.343397425 */, 18 },
5551 /* 5198 */ { MAD_F(0x057eeaae) /* 0.343485529 */, 18 },
5552 /* 5199 */ { MAD_F(0x057f4712) /* 0.343573639 */, 18 },
5553
5554 /* 5200 */ { MAD_F(0x057fa378) /* 0.343661754 */, 18 },
5555 /* 5201 */ { MAD_F(0x057fffde) /* 0.343749876 */, 18 },
5556 /* 5202 */ { MAD_F(0x05805c47) /* 0.343838003 */, 18 },
5557 /* 5203 */ { MAD_F(0x0580b8b1) /* 0.343926135 */, 18 },
5558 /* 5204 */ { MAD_F(0x0581151c) /* 0.344014273 */, 18 },
5559 /* 5205 */ { MAD_F(0x05817189) /* 0.344102417 */, 18 },
5560 /* 5206 */ { MAD_F(0x0581cdf7) /* 0.344190566 */, 18 },
5561 /* 5207 */ { MAD_F(0x05822a67) /* 0.344278722 */, 18 },
5562 /* 5208 */ { MAD_F(0x058286d9) /* 0.344366882 */, 18 },
5563 /* 5209 */ { MAD_F(0x0582e34c) /* 0.344455049 */, 18 },
5564 /* 5210 */ { MAD_F(0x05833fc0) /* 0.344543221 */, 18 },
5565 /* 5211 */ { MAD_F(0x05839c36) /* 0.344631398 */, 18 },
5566 /* 5212 */ { MAD_F(0x0583f8ae) /* 0.344719582 */, 18 },
5567 /* 5213 */ { MAD_F(0x05845527) /* 0.344807771 */, 18 },
5568 /* 5214 */ { MAD_F(0x0584b1a1) /* 0.344895965 */, 18 },
5569 /* 5215 */ { MAD_F(0x05850e1e) /* 0.344984165 */, 18 },
5570
5571 /* 5216 */ { MAD_F(0x05856a9b) /* 0.345072371 */, 18 },
5572 /* 5217 */ { MAD_F(0x0585c71a) /* 0.345160583 */, 18 },
5573 /* 5218 */ { MAD_F(0x0586239b) /* 0.345248800 */, 18 },
5574 /* 5219 */ { MAD_F(0x0586801d) /* 0.345337023 */, 18 },
5575 /* 5220 */ { MAD_F(0x0586dca1) /* 0.345425251 */, 18 },
5576 /* 5221 */ { MAD_F(0x05873926) /* 0.345513485 */, 18 },
5577 /* 5222 */ { MAD_F(0x058795ac) /* 0.345601725 */, 18 },
5578 /* 5223 */ { MAD_F(0x0587f235) /* 0.345689970 */, 18 },
5579 /* 5224 */ { MAD_F(0x05884ebe) /* 0.345778221 */, 18 },
5580 /* 5225 */ { MAD_F(0x0588ab49) /* 0.345866478 */, 18 },
5581 /* 5226 */ { MAD_F(0x058907d6) /* 0.345954740 */, 18 },
5582 /* 5227 */ { MAD_F(0x05896464) /* 0.346043008 */, 18 },
5583 /* 5228 */ { MAD_F(0x0589c0f4) /* 0.346131281 */, 18 },
5584 /* 5229 */ { MAD_F(0x058a1d85) /* 0.346219560 */, 18 },
5585 /* 5230 */ { MAD_F(0x058a7a18) /* 0.346307845 */, 18 },
5586 /* 5231 */ { MAD_F(0x058ad6ac) /* 0.346396135 */, 18 },
5587
5588 /* 5232 */ { MAD_F(0x058b3342) /* 0.346484431 */, 18 },
5589 /* 5233 */ { MAD_F(0x058b8fd9) /* 0.346572733 */, 18 },
5590 /* 5234 */ { MAD_F(0x058bec72) /* 0.346661040 */, 18 },
5591 /* 5235 */ { MAD_F(0x058c490c) /* 0.346749353 */, 18 },
5592 /* 5236 */ { MAD_F(0x058ca5a8) /* 0.346837671 */, 18 },
5593 /* 5237 */ { MAD_F(0x058d0246) /* 0.346925996 */, 18 },
5594 /* 5238 */ { MAD_F(0x058d5ee4) /* 0.347014325 */, 18 },
5595 /* 5239 */ { MAD_F(0x058dbb85) /* 0.347102661 */, 18 },
5596 /* 5240 */ { MAD_F(0x058e1827) /* 0.347191002 */, 18 },
5597 /* 5241 */ { MAD_F(0x058e74ca) /* 0.347279348 */, 18 },
5598 /* 5242 */ { MAD_F(0x058ed16f) /* 0.347367700 */, 18 },
5599 /* 5243 */ { MAD_F(0x058f2e15) /* 0.347456058 */, 18 },
5600 /* 5244 */ { MAD_F(0x058f8abd) /* 0.347544422 */, 18 },
5601 /* 5245 */ { MAD_F(0x058fe766) /* 0.347632791 */, 18 },
5602 /* 5246 */ { MAD_F(0x05904411) /* 0.347721165 */, 18 },
5603 /* 5247 */ { MAD_F(0x0590a0be) /* 0.347809546 */, 18 },
5604
5605 /* 5248 */ { MAD_F(0x0590fd6c) /* 0.347897931 */, 18 },
5606 /* 5249 */ { MAD_F(0x05915a1b) /* 0.347986323 */, 18 },
5607 /* 5250 */ { MAD_F(0x0591b6cc) /* 0.348074720 */, 18 },
5608 /* 5251 */ { MAD_F(0x0592137e) /* 0.348163123 */, 18 },
5609 /* 5252 */ { MAD_F(0x05927032) /* 0.348251531 */, 18 },
5610 /* 5253 */ { MAD_F(0x0592cce8) /* 0.348339945 */, 18 },
5611 /* 5254 */ { MAD_F(0x0593299f) /* 0.348428365 */, 18 },
5612 /* 5255 */ { MAD_F(0x05938657) /* 0.348516790 */, 18 },
5613 /* 5256 */ { MAD_F(0x0593e311) /* 0.348605221 */, 18 },
5614 /* 5257 */ { MAD_F(0x05943fcd) /* 0.348693657 */, 18 },
5615 /* 5258 */ { MAD_F(0x05949c8a) /* 0.348782099 */, 18 },
5616 /* 5259 */ { MAD_F(0x0594f948) /* 0.348870547 */, 18 },
5617 /* 5260 */ { MAD_F(0x05955608) /* 0.348959000 */, 18 },
5618 /* 5261 */ { MAD_F(0x0595b2ca) /* 0.349047459 */, 18 },
5619 /* 5262 */ { MAD_F(0x05960f8c) /* 0.349135923 */, 18 },
5620 /* 5263 */ { MAD_F(0x05966c51) /* 0.349224393 */, 18 },
5621
5622 /* 5264 */ { MAD_F(0x0596c917) /* 0.349312869 */, 18 },
5623 /* 5265 */ { MAD_F(0x059725de) /* 0.349401350 */, 18 },
5624 /* 5266 */ { MAD_F(0x059782a7) /* 0.349489837 */, 18 },
5625 /* 5267 */ { MAD_F(0x0597df72) /* 0.349578329 */, 18 },
5626 /* 5268 */ { MAD_F(0x05983c3e) /* 0.349666827 */, 18 },
5627 /* 5269 */ { MAD_F(0x0598990c) /* 0.349755331 */, 18 },
5628 /* 5270 */ { MAD_F(0x0598f5db) /* 0.349843840 */, 18 },
5629 /* 5271 */ { MAD_F(0x059952ab) /* 0.349932355 */, 18 },
5630 /* 5272 */ { MAD_F(0x0599af7d) /* 0.350020876 */, 18 },
5631 /* 5273 */ { MAD_F(0x059a0c51) /* 0.350109402 */, 18 },
5632 /* 5274 */ { MAD_F(0x059a6926) /* 0.350197933 */, 18 },
5633 /* 5275 */ { MAD_F(0x059ac5fc) /* 0.350286470 */, 18 },
5634 /* 5276 */ { MAD_F(0x059b22d4) /* 0.350375013 */, 18 },
5635 /* 5277 */ { MAD_F(0x059b7fae) /* 0.350463562 */, 18 },
5636 /* 5278 */ { MAD_F(0x059bdc89) /* 0.350552116 */, 18 },
5637 /* 5279 */ { MAD_F(0x059c3965) /* 0.350640675 */, 18 },
5638
5639 /* 5280 */ { MAD_F(0x059c9643) /* 0.350729240 */, 18 },
5640 /* 5281 */ { MAD_F(0x059cf323) /* 0.350817811 */, 18 },
5641 /* 5282 */ { MAD_F(0x059d5004) /* 0.350906388 */, 18 },
5642 /* 5283 */ { MAD_F(0x059dace6) /* 0.350994970 */, 18 },
5643 /* 5284 */ { MAD_F(0x059e09cb) /* 0.351083557 */, 18 },
5644 /* 5285 */ { MAD_F(0x059e66b0) /* 0.351172150 */, 18 },
5645 /* 5286 */ { MAD_F(0x059ec397) /* 0.351260749 */, 18 },
5646 /* 5287 */ { MAD_F(0x059f2080) /* 0.351349353 */, 18 },
5647 /* 5288 */ { MAD_F(0x059f7d6a) /* 0.351437963 */, 18 },
5648 /* 5289 */ { MAD_F(0x059fda55) /* 0.351526579 */, 18 },
5649 /* 5290 */ { MAD_F(0x05a03742) /* 0.351615200 */, 18 },
5650 /* 5291 */ { MAD_F(0x05a09431) /* 0.351703827 */, 18 },
5651 /* 5292 */ { MAD_F(0x05a0f121) /* 0.351792459 */, 18 },
5652 /* 5293 */ { MAD_F(0x05a14e12) /* 0.351881097 */, 18 },
5653 /* 5294 */ { MAD_F(0x05a1ab05) /* 0.351969740 */, 18 },
5654 /* 5295 */ { MAD_F(0x05a207fa) /* 0.352058389 */, 18 },
5655
5656 /* 5296 */ { MAD_F(0x05a264f0) /* 0.352147044 */, 18 },
5657 /* 5297 */ { MAD_F(0x05a2c1e7) /* 0.352235704 */, 18 },
5658 /* 5298 */ { MAD_F(0x05a31ee1) /* 0.352324369 */, 18 },
5659 /* 5299 */ { MAD_F(0x05a37bdb) /* 0.352413041 */, 18 },
5660 /* 5300 */ { MAD_F(0x05a3d8d7) /* 0.352501718 */, 18 },
5661 /* 5301 */ { MAD_F(0x05a435d5) /* 0.352590400 */, 18 },
5662 /* 5302 */ { MAD_F(0x05a492d4) /* 0.352679088 */, 18 },
5663 /* 5303 */ { MAD_F(0x05a4efd4) /* 0.352767782 */, 18 },
5664 /* 5304 */ { MAD_F(0x05a54cd6) /* 0.352856481 */, 18 },
5665 /* 5305 */ { MAD_F(0x05a5a9da) /* 0.352945186 */, 18 },
5666 /* 5306 */ { MAD_F(0x05a606df) /* 0.353033896 */, 18 },
5667 /* 5307 */ { MAD_F(0x05a663e5) /* 0.353122612 */, 18 },
5668 /* 5308 */ { MAD_F(0x05a6c0ed) /* 0.353211333 */, 18 },
5669 /* 5309 */ { MAD_F(0x05a71df7) /* 0.353300061 */, 18 },
5670 /* 5310 */ { MAD_F(0x05a77b02) /* 0.353388793 */, 18 },
5671 /* 5311 */ { MAD_F(0x05a7d80e) /* 0.353477531 */, 18 },
5672
5673 /* 5312 */ { MAD_F(0x05a8351c) /* 0.353566275 */, 18 },
5674 /* 5313 */ { MAD_F(0x05a8922c) /* 0.353655024 */, 18 },
5675 /* 5314 */ { MAD_F(0x05a8ef3c) /* 0.353743779 */, 18 },
5676 /* 5315 */ { MAD_F(0x05a94c4f) /* 0.353832540 */, 18 },
5677 /* 5316 */ { MAD_F(0x05a9a963) /* 0.353921306 */, 18 },
5678 /* 5317 */ { MAD_F(0x05aa0678) /* 0.354010077 */, 18 },
5679 /* 5318 */ { MAD_F(0x05aa638f) /* 0.354098855 */, 18 },
5680 /* 5319 */ { MAD_F(0x05aac0a8) /* 0.354187637 */, 18 },
5681 /* 5320 */ { MAD_F(0x05ab1dc2) /* 0.354276426 */, 18 },
5682 /* 5321 */ { MAD_F(0x05ab7add) /* 0.354365220 */, 18 },
5683 /* 5322 */ { MAD_F(0x05abd7fa) /* 0.354454019 */, 18 },
5684 /* 5323 */ { MAD_F(0x05ac3518) /* 0.354542824 */, 18 },
5685 /* 5324 */ { MAD_F(0x05ac9238) /* 0.354631635 */, 18 },
5686 /* 5325 */ { MAD_F(0x05acef5a) /* 0.354720451 */, 18 },
5687 /* 5326 */ { MAD_F(0x05ad4c7d) /* 0.354809272 */, 18 },
5688 /* 5327 */ { MAD_F(0x05ada9a1) /* 0.354898100 */, 18 },
5689
5690 /* 5328 */ { MAD_F(0x05ae06c7) /* 0.354986932 */, 18 },
5691 /* 5329 */ { MAD_F(0x05ae63ee) /* 0.355075771 */, 18 },
5692 /* 5330 */ { MAD_F(0x05aec117) /* 0.355164615 */, 18 },
5693 /* 5331 */ { MAD_F(0x05af1e41) /* 0.355253464 */, 18 },
5694 /* 5332 */ { MAD_F(0x05af7b6d) /* 0.355342319 */, 18 },
5695 /* 5333 */ { MAD_F(0x05afd89b) /* 0.355431180 */, 18 },
5696 /* 5334 */ { MAD_F(0x05b035c9) /* 0.355520046 */, 18 },
5697 /* 5335 */ { MAD_F(0x05b092fa) /* 0.355608917 */, 18 },
5698 /* 5336 */ { MAD_F(0x05b0f02b) /* 0.355697795 */, 18 },
5699 /* 5337 */ { MAD_F(0x05b14d5f) /* 0.355786677 */, 18 },
5700 /* 5338 */ { MAD_F(0x05b1aa94) /* 0.355875566 */, 18 },
5701 /* 5339 */ { MAD_F(0x05b207ca) /* 0.355964460 */, 18 },
5702 /* 5340 */ { MAD_F(0x05b26502) /* 0.356053359 */, 18 },
5703 /* 5341 */ { MAD_F(0x05b2c23b) /* 0.356142264 */, 18 },
5704 /* 5342 */ { MAD_F(0x05b31f76) /* 0.356231175 */, 18 },
5705 /* 5343 */ { MAD_F(0x05b37cb2) /* 0.356320091 */, 18 },
5706
5707 /* 5344 */ { MAD_F(0x05b3d9f0) /* 0.356409012 */, 18 },
5708 /* 5345 */ { MAD_F(0x05b4372f) /* 0.356497940 */, 18 },
5709 /* 5346 */ { MAD_F(0x05b4946f) /* 0.356586872 */, 18 },
5710 /* 5347 */ { MAD_F(0x05b4f1b2) /* 0.356675811 */, 18 },
5711 /* 5348 */ { MAD_F(0x05b54ef5) /* 0.356764754 */, 18 },
5712 /* 5349 */ { MAD_F(0x05b5ac3a) /* 0.356853704 */, 18 },
5713 /* 5350 */ { MAD_F(0x05b60981) /* 0.356942659 */, 18 },
5714 /* 5351 */ { MAD_F(0x05b666c9) /* 0.357031619 */, 18 },
5715 /* 5352 */ { MAD_F(0x05b6c413) /* 0.357120585 */, 18 },
5716 /* 5353 */ { MAD_F(0x05b7215e) /* 0.357209557 */, 18 },
5717 /* 5354 */ { MAD_F(0x05b77eab) /* 0.357298534 */, 18 },
5718 /* 5355 */ { MAD_F(0x05b7dbf9) /* 0.357387516 */, 18 },
5719 /* 5356 */ { MAD_F(0x05b83948) /* 0.357476504 */, 18 },
5720 /* 5357 */ { MAD_F(0x05b89699) /* 0.357565498 */, 18 },
5721 /* 5358 */ { MAD_F(0x05b8f3ec) /* 0.357654497 */, 18 },
5722 /* 5359 */ { MAD_F(0x05b95140) /* 0.357743502 */, 18 },
5723
5724 /* 5360 */ { MAD_F(0x05b9ae95) /* 0.357832512 */, 18 },
5725 /* 5361 */ { MAD_F(0x05ba0bec) /* 0.357921528 */, 18 },
5726 /* 5362 */ { MAD_F(0x05ba6945) /* 0.358010550 */, 18 },
5727 /* 5363 */ { MAD_F(0x05bac69f) /* 0.358099576 */, 18 },
5728 /* 5364 */ { MAD_F(0x05bb23fa) /* 0.358188609 */, 18 },
5729 /* 5365 */ { MAD_F(0x05bb8157) /* 0.358277647 */, 18 },
5730 /* 5366 */ { MAD_F(0x05bbdeb6) /* 0.358366690 */, 18 },
5731 /* 5367 */ { MAD_F(0x05bc3c16) /* 0.358455739 */, 18 },
5732 /* 5368 */ { MAD_F(0x05bc9977) /* 0.358544794 */, 18 },
5733 /* 5369 */ { MAD_F(0x05bcf6da) /* 0.358633854 */, 18 },
5734 /* 5370 */ { MAD_F(0x05bd543e) /* 0.358722920 */, 18 },
5735 /* 5371 */ { MAD_F(0x05bdb1a4) /* 0.358811991 */, 18 },
5736 /* 5372 */ { MAD_F(0x05be0f0b) /* 0.358901067 */, 18 },
5737 /* 5373 */ { MAD_F(0x05be6c74) /* 0.358990150 */, 18 },
5738 /* 5374 */ { MAD_F(0x05bec9df) /* 0.359079237 */, 18 },
5739 /* 5375 */ { MAD_F(0x05bf274a) /* 0.359168331 */, 18 },
5740
5741 /* 5376 */ { MAD_F(0x05bf84b8) /* 0.359257429 */, 18 },
5742 /* 5377 */ { MAD_F(0x05bfe226) /* 0.359346534 */, 18 },
5743 /* 5378 */ { MAD_F(0x05c03f97) /* 0.359435644 */, 18 },
5744 /* 5379 */ { MAD_F(0x05c09d08) /* 0.359524759 */, 18 },
5745 /* 5380 */ { MAD_F(0x05c0fa7c) /* 0.359613880 */, 18 },
5746 /* 5381 */ { MAD_F(0x05c157f0) /* 0.359703006 */, 18 },
5747 /* 5382 */ { MAD_F(0x05c1b566) /* 0.359792138 */, 18 },
5748 /* 5383 */ { MAD_F(0x05c212de) /* 0.359881276 */, 18 },
5749 /* 5384 */ { MAD_F(0x05c27057) /* 0.359970419 */, 18 },
5750 /* 5385 */ { MAD_F(0x05c2cdd2) /* 0.360059567 */, 18 },
5751 /* 5386 */ { MAD_F(0x05c32b4e) /* 0.360148721 */, 18 },
5752 /* 5387 */ { MAD_F(0x05c388cb) /* 0.360237881 */, 18 },
5753 /* 5388 */ { MAD_F(0x05c3e64b) /* 0.360327046 */, 18 },
5754 /* 5389 */ { MAD_F(0x05c443cb) /* 0.360416216 */, 18 },
5755 /* 5390 */ { MAD_F(0x05c4a14d) /* 0.360505392 */, 18 },
5756 /* 5391 */ { MAD_F(0x05c4fed1) /* 0.360594574 */, 18 },
5757
5758 /* 5392 */ { MAD_F(0x05c55c56) /* 0.360683761 */, 18 },
5759 /* 5393 */ { MAD_F(0x05c5b9dc) /* 0.360772953 */, 18 },
5760 /* 5394 */ { MAD_F(0x05c61764) /* 0.360862152 */, 18 },
5761 /* 5395 */ { MAD_F(0x05c674ed) /* 0.360951355 */, 18 },
5762 /* 5396 */ { MAD_F(0x05c6d278) /* 0.361040564 */, 18 },
5763 /* 5397 */ { MAD_F(0x05c73005) /* 0.361129779 */, 18 },
5764 /* 5398 */ { MAD_F(0x05c78d93) /* 0.361218999 */, 18 },
5765 /* 5399 */ { MAD_F(0x05c7eb22) /* 0.361308225 */, 18 },
5766 /* 5400 */ { MAD_F(0x05c848b3) /* 0.361397456 */, 18 },
5767 /* 5401 */ { MAD_F(0x05c8a645) /* 0.361486693 */, 18 },
5768 /* 5402 */ { MAD_F(0x05c903d9) /* 0.361575935 */, 18 },
5769 /* 5403 */ { MAD_F(0x05c9616e) /* 0.361665183 */, 18 },
5770 /* 5404 */ { MAD_F(0x05c9bf05) /* 0.361754436 */, 18 },
5771 /* 5405 */ { MAD_F(0x05ca1c9d) /* 0.361843695 */, 18 },
5772 /* 5406 */ { MAD_F(0x05ca7a37) /* 0.361932959 */, 18 },
5773 /* 5407 */ { MAD_F(0x05cad7d2) /* 0.362022229 */, 18 },
5774
5775 /* 5408 */ { MAD_F(0x05cb356e) /* 0.362111504 */, 18 },
5776 /* 5409 */ { MAD_F(0x05cb930d) /* 0.362200785 */, 18 },
5777 /* 5410 */ { MAD_F(0x05cbf0ac) /* 0.362290071 */, 18 },
5778 /* 5411 */ { MAD_F(0x05cc4e4d) /* 0.362379362 */, 18 },
5779 /* 5412 */ { MAD_F(0x05ccabf0) /* 0.362468660 */, 18 },
5780 /* 5413 */ { MAD_F(0x05cd0994) /* 0.362557962 */, 18 },
5781 /* 5414 */ { MAD_F(0x05cd6739) /* 0.362647271 */, 18 },
5782 /* 5415 */ { MAD_F(0x05cdc4e0) /* 0.362736584 */, 18 },
5783 /* 5416 */ { MAD_F(0x05ce2289) /* 0.362825904 */, 18 },
5784 /* 5417 */ { MAD_F(0x05ce8033) /* 0.362915228 */, 18 },
5785 /* 5418 */ { MAD_F(0x05ceddde) /* 0.363004559 */, 18 },
5786 /* 5419 */ { MAD_F(0x05cf3b8b) /* 0.363093894 */, 18 },
5787 /* 5420 */ { MAD_F(0x05cf9939) /* 0.363183236 */, 18 },
5788 /* 5421 */ { MAD_F(0x05cff6e9) /* 0.363272582 */, 18 },
5789 /* 5422 */ { MAD_F(0x05d0549a) /* 0.363361935 */, 18 },
5790 /* 5423 */ { MAD_F(0x05d0b24d) /* 0.363451292 */, 18 },
5791
5792 /* 5424 */ { MAD_F(0x05d11001) /* 0.363540655 */, 18 },
5793 /* 5425 */ { MAD_F(0x05d16db7) /* 0.363630024 */, 18 },
5794 /* 5426 */ { MAD_F(0x05d1cb6e) /* 0.363719398 */, 18 },
5795 /* 5427 */ { MAD_F(0x05d22927) /* 0.363808778 */, 18 },
5796 /* 5428 */ { MAD_F(0x05d286e1) /* 0.363898163 */, 18 },
5797 /* 5429 */ { MAD_F(0x05d2e49d) /* 0.363987554 */, 18 },
5798 /* 5430 */ { MAD_F(0x05d3425a) /* 0.364076950 */, 18 },
5799 /* 5431 */ { MAD_F(0x05d3a018) /* 0.364166352 */, 18 },
5800 /* 5432 */ { MAD_F(0x05d3fdd8) /* 0.364255759 */, 18 },
5801 /* 5433 */ { MAD_F(0x05d45b9a) /* 0.364345171 */, 18 },
5802 /* 5434 */ { MAD_F(0x05d4b95d) /* 0.364434589 */, 18 },
5803 /* 5435 */ { MAD_F(0x05d51721) /* 0.364524013 */, 18 },
5804 /* 5436 */ { MAD_F(0x05d574e7) /* 0.364613442 */, 18 },
5805 /* 5437 */ { MAD_F(0x05d5d2af) /* 0.364702877 */, 18 },
5806 /* 5438 */ { MAD_F(0x05d63078) /* 0.364792317 */, 18 },
5807 /* 5439 */ { MAD_F(0x05d68e42) /* 0.364881762 */, 18 },
5808
5809 /* 5440 */ { MAD_F(0x05d6ec0e) /* 0.364971213 */, 18 },
5810 /* 5441 */ { MAD_F(0x05d749db) /* 0.365060669 */, 18 },
5811 /* 5442 */ { MAD_F(0x05d7a7aa) /* 0.365150131 */, 18 },
5812 /* 5443 */ { MAD_F(0x05d8057a) /* 0.365239599 */, 18 },
5813 /* 5444 */ { MAD_F(0x05d8634c) /* 0.365329072 */, 18 },
5814 /* 5445 */ { MAD_F(0x05d8c11f) /* 0.365418550 */, 18 },
5815 /* 5446 */ { MAD_F(0x05d91ef4) /* 0.365508034 */, 18 },
5816 /* 5447 */ { MAD_F(0x05d97cca) /* 0.365597523 */, 18 },
5817 /* 5448 */ { MAD_F(0x05d9daa1) /* 0.365687018 */, 18 },
5818 /* 5449 */ { MAD_F(0x05da387a) /* 0.365776518 */, 18 },
5819 /* 5450 */ { MAD_F(0x05da9655) /* 0.365866024 */, 18 },
5820 /* 5451 */ { MAD_F(0x05daf431) /* 0.365955536 */, 18 },
5821 /* 5452 */ { MAD_F(0x05db520e) /* 0.366045052 */, 18 },
5822 /* 5453 */ { MAD_F(0x05dbafed) /* 0.366134574 */, 18 },
5823 /* 5454 */ { MAD_F(0x05dc0dce) /* 0.366224102 */, 18 },
5824 /* 5455 */ { MAD_F(0x05dc6baf) /* 0.366313635 */, 18 },
5825
5826 /* 5456 */ { MAD_F(0x05dcc993) /* 0.366403174 */, 18 },
5827 /* 5457 */ { MAD_F(0x05dd2778) /* 0.366492718 */, 18 },
5828 /* 5458 */ { MAD_F(0x05dd855e) /* 0.366582267 */, 18 },
5829 /* 5459 */ { MAD_F(0x05dde346) /* 0.366671822 */, 18 },
5830 /* 5460 */ { MAD_F(0x05de412f) /* 0.366761383 */, 18 },
5831 /* 5461 */ { MAD_F(0x05de9f1a) /* 0.366850949 */, 18 },
5832 /* 5462 */ { MAD_F(0x05defd06) /* 0.366940520 */, 18 },
5833 /* 5463 */ { MAD_F(0x05df5af3) /* 0.367030097 */, 18 },
5834 /* 5464 */ { MAD_F(0x05dfb8e2) /* 0.367119680 */, 18 },
5835 /* 5465 */ { MAD_F(0x05e016d3) /* 0.367209267 */, 18 },
5836 /* 5466 */ { MAD_F(0x05e074c5) /* 0.367298861 */, 18 },
5837 /* 5467 */ { MAD_F(0x05e0d2b8) /* 0.367388459 */, 18 },
5838 /* 5468 */ { MAD_F(0x05e130ad) /* 0.367478064 */, 18 },
5839 /* 5469 */ { MAD_F(0x05e18ea4) /* 0.367567673 */, 18 },
5840 /* 5470 */ { MAD_F(0x05e1ec9c) /* 0.367657288 */, 18 },
5841 /* 5471 */ { MAD_F(0x05e24a95) /* 0.367746909 */, 18 },
5842
5843 /* 5472 */ { MAD_F(0x05e2a890) /* 0.367836535 */, 18 },
5844 /* 5473 */ { MAD_F(0x05e3068c) /* 0.367926167 */, 18 },
5845 /* 5474 */ { MAD_F(0x05e3648a) /* 0.368015804 */, 18 },
5846 /* 5475 */ { MAD_F(0x05e3c289) /* 0.368105446 */, 18 },
5847 /* 5476 */ { MAD_F(0x05e4208a) /* 0.368195094 */, 18 },
5848 /* 5477 */ { MAD_F(0x05e47e8c) /* 0.368284747 */, 18 },
5849 /* 5478 */ { MAD_F(0x05e4dc8f) /* 0.368374406 */, 18 },
5850 /* 5479 */ { MAD_F(0x05e53a94) /* 0.368464070 */, 18 },
5851 /* 5480 */ { MAD_F(0x05e5989b) /* 0.368553740 */, 18 },
5852 /* 5481 */ { MAD_F(0x05e5f6a3) /* 0.368643415 */, 18 },
5853 /* 5482 */ { MAD_F(0x05e654ac) /* 0.368733096 */, 18 },
5854 /* 5483 */ { MAD_F(0x05e6b2b7) /* 0.368822782 */, 18 },
5855 /* 5484 */ { MAD_F(0x05e710c4) /* 0.368912473 */, 18 },
5856 /* 5485 */ { MAD_F(0x05e76ed2) /* 0.369002170 */, 18 },
5857 /* 5486 */ { MAD_F(0x05e7cce1) /* 0.369091873 */, 18 },
5858 /* 5487 */ { MAD_F(0x05e82af2) /* 0.369181581 */, 18 },
5859
5860 /* 5488 */ { MAD_F(0x05e88904) /* 0.369271294 */, 18 },
5861 /* 5489 */ { MAD_F(0x05e8e718) /* 0.369361013 */, 18 },
5862 /* 5490 */ { MAD_F(0x05e9452d) /* 0.369450737 */, 18 },
5863 /* 5491 */ { MAD_F(0x05e9a343) /* 0.369540467 */, 18 },
5864 /* 5492 */ { MAD_F(0x05ea015c) /* 0.369630202 */, 18 },
5865 /* 5493 */ { MAD_F(0x05ea5f75) /* 0.369719942 */, 18 },
5866 /* 5494 */ { MAD_F(0x05eabd90) /* 0.369809688 */, 18 },
5867 /* 5495 */ { MAD_F(0x05eb1bad) /* 0.369899440 */, 18 },
5868 /* 5496 */ { MAD_F(0x05eb79cb) /* 0.369989197 */, 18 },
5869 /* 5497 */ { MAD_F(0x05ebd7ea) /* 0.370078959 */, 18 },
5870 /* 5498 */ { MAD_F(0x05ec360b) /* 0.370168727 */, 18 },
5871 /* 5499 */ { MAD_F(0x05ec942d) /* 0.370258500 */, 18 },
5872 /* 5500 */ { MAD_F(0x05ecf251) /* 0.370348279 */, 18 },
5873 /* 5501 */ { MAD_F(0x05ed5076) /* 0.370438063 */, 18 },
5874 /* 5502 */ { MAD_F(0x05edae9d) /* 0.370527853 */, 18 },
5875 /* 5503 */ { MAD_F(0x05ee0cc5) /* 0.370617648 */, 18 },
5876
5877 /* 5504 */ { MAD_F(0x05ee6aef) /* 0.370707448 */, 18 },
5878 /* 5505 */ { MAD_F(0x05eec91a) /* 0.370797254 */, 18 },
5879 /* 5506 */ { MAD_F(0x05ef2746) /* 0.370887065 */, 18 },
5880 /* 5507 */ { MAD_F(0x05ef8574) /* 0.370976882 */, 18 },
5881 /* 5508 */ { MAD_F(0x05efe3a4) /* 0.371066704 */, 18 },
5882 /* 5509 */ { MAD_F(0x05f041d5) /* 0.371156532 */, 18 },
5883 /* 5510 */ { MAD_F(0x05f0a007) /* 0.371246365 */, 18 },
5884 /* 5511 */ { MAD_F(0x05f0fe3b) /* 0.371336203 */, 18 },
5885 /* 5512 */ { MAD_F(0x05f15c70) /* 0.371426047 */, 18 },
5886 /* 5513 */ { MAD_F(0x05f1baa7) /* 0.371515897 */, 18 },
5887 /* 5514 */ { MAD_F(0x05f218df) /* 0.371605751 */, 18 },
5888 /* 5515 */ { MAD_F(0x05f27719) /* 0.371695612 */, 18 },
5889 /* 5516 */ { MAD_F(0x05f2d554) /* 0.371785477 */, 18 },
5890 /* 5517 */ { MAD_F(0x05f33390) /* 0.371875348 */, 18 },
5891 /* 5518 */ { MAD_F(0x05f391cf) /* 0.371965225 */, 18 },
5892 /* 5519 */ { MAD_F(0x05f3f00e) /* 0.372055107 */, 18 },
5893
5894 /* 5520 */ { MAD_F(0x05f44e4f) /* 0.372144994 */, 18 },
5895 /* 5521 */ { MAD_F(0x05f4ac91) /* 0.372234887 */, 18 },
5896 /* 5522 */ { MAD_F(0x05f50ad5) /* 0.372324785 */, 18 },
5897 /* 5523 */ { MAD_F(0x05f5691b) /* 0.372414689 */, 18 },
5898 /* 5524 */ { MAD_F(0x05f5c761) /* 0.372504598 */, 18 },
5899 /* 5525 */ { MAD_F(0x05f625aa) /* 0.372594513 */, 18 },
5900 /* 5526 */ { MAD_F(0x05f683f3) /* 0.372684433 */, 18 },
5901 /* 5527 */ { MAD_F(0x05f6e23f) /* 0.372774358 */, 18 },
5902 /* 5528 */ { MAD_F(0x05f7408b) /* 0.372864289 */, 18 },
5903 /* 5529 */ { MAD_F(0x05f79ed9) /* 0.372954225 */, 18 },
5904 /* 5530 */ { MAD_F(0x05f7fd29) /* 0.373044167 */, 18 },
5905 /* 5531 */ { MAD_F(0x05f85b7a) /* 0.373134114 */, 18 },
5906 /* 5532 */ { MAD_F(0x05f8b9cc) /* 0.373224066 */, 18 },
5907 /* 5533 */ { MAD_F(0x05f91820) /* 0.373314024 */, 18 },
5908 /* 5534 */ { MAD_F(0x05f97675) /* 0.373403987 */, 18 },
5909 /* 5535 */ { MAD_F(0x05f9d4cc) /* 0.373493956 */, 18 },
5910
5911 /* 5536 */ { MAD_F(0x05fa3324) /* 0.373583930 */, 18 },
5912 /* 5537 */ { MAD_F(0x05fa917e) /* 0.373673910 */, 18 },
5913 /* 5538 */ { MAD_F(0x05faefd9) /* 0.373763895 */, 18 },
5914 /* 5539 */ { MAD_F(0x05fb4e36) /* 0.373853885 */, 18 },
5915 /* 5540 */ { MAD_F(0x05fbac94) /* 0.373943881 */, 18 },
5916 /* 5541 */ { MAD_F(0x05fc0af3) /* 0.374033882 */, 18 },
5917 /* 5542 */ { MAD_F(0x05fc6954) /* 0.374123889 */, 18 },
5918 /* 5543 */ { MAD_F(0x05fcc7b7) /* 0.374213901 */, 18 },
5919 /* 5544 */ { MAD_F(0x05fd261b) /* 0.374303918 */, 18 },
5920 /* 5545 */ { MAD_F(0x05fd8480) /* 0.374393941 */, 18 },
5921 /* 5546 */ { MAD_F(0x05fde2e7) /* 0.374483970 */, 18 },
5922 /* 5547 */ { MAD_F(0x05fe414f) /* 0.374574003 */, 18 },
5923 /* 5548 */ { MAD_F(0x05fe9fb9) /* 0.374664042 */, 18 },
5924 /* 5549 */ { MAD_F(0x05fefe24) /* 0.374754087 */, 18 },
5925 /* 5550 */ { MAD_F(0x05ff5c91) /* 0.374844137 */, 18 },
5926 /* 5551 */ { MAD_F(0x05ffbaff) /* 0.374934192 */, 18 },
5927
5928 /* 5552 */ { MAD_F(0x0600196e) /* 0.375024253 */, 18 },
5929 /* 5553 */ { MAD_F(0x060077df) /* 0.375114319 */, 18 },
5930 /* 5554 */ { MAD_F(0x0600d651) /* 0.375204391 */, 18 },
5931 /* 5555 */ { MAD_F(0x060134c5) /* 0.375294468 */, 18 },
5932 /* 5556 */ { MAD_F(0x0601933b) /* 0.375384550 */, 18 },
5933 /* 5557 */ { MAD_F(0x0601f1b1) /* 0.375474638 */, 18 },
5934 /* 5558 */ { MAD_F(0x0602502a) /* 0.375564731 */, 18 },
5935 /* 5559 */ { MAD_F(0x0602aea3) /* 0.375654830 */, 18 },
5936 /* 5560 */ { MAD_F(0x06030d1e) /* 0.375744934 */, 18 },
5937 /* 5561 */ { MAD_F(0x06036b9b) /* 0.375835043 */, 18 },
5938 /* 5562 */ { MAD_F(0x0603ca19) /* 0.375925158 */, 18 },
5939 /* 5563 */ { MAD_F(0x06042898) /* 0.376015278 */, 18 },
5940 /* 5564 */ { MAD_F(0x06048719) /* 0.376105404 */, 18 },
5941 /* 5565 */ { MAD_F(0x0604e59c) /* 0.376195535 */, 18 },
5942 /* 5566 */ { MAD_F(0x0605441f) /* 0.376285671 */, 18 },
5943 /* 5567 */ { MAD_F(0x0605a2a5) /* 0.376375813 */, 18 },
5944
5945 /* 5568 */ { MAD_F(0x0606012b) /* 0.376465960 */, 18 },
5946 /* 5569 */ { MAD_F(0x06065fb4) /* 0.376556113 */, 18 },
5947 /* 5570 */ { MAD_F(0x0606be3d) /* 0.376646271 */, 18 },
5948 /* 5571 */ { MAD_F(0x06071cc8) /* 0.376736434 */, 18 },
5949 /* 5572 */ { MAD_F(0x06077b55) /* 0.376826603 */, 18 },
5950 /* 5573 */ { MAD_F(0x0607d9e3) /* 0.376916777 */, 18 },
5951 /* 5574 */ { MAD_F(0x06083872) /* 0.377006957 */, 18 },
5952 /* 5575 */ { MAD_F(0x06089703) /* 0.377097141 */, 18 },
5953 /* 5576 */ { MAD_F(0x0608f595) /* 0.377187332 */, 18 },
5954 /* 5577 */ { MAD_F(0x06095429) /* 0.377277528 */, 18 },
5955 /* 5578 */ { MAD_F(0x0609b2be) /* 0.377367729 */, 18 },
5956 /* 5579 */ { MAD_F(0x060a1155) /* 0.377457935 */, 18 },
5957 /* 5580 */ { MAD_F(0x060a6fed) /* 0.377548147 */, 18 },
5958 /* 5581 */ { MAD_F(0x060ace86) /* 0.377638364 */, 18 },
5959 /* 5582 */ { MAD_F(0x060b2d21) /* 0.377728587 */, 18 },
5960 /* 5583 */ { MAD_F(0x060b8bbe) /* 0.377818815 */, 18 },
5961
5962 /* 5584 */ { MAD_F(0x060bea5c) /* 0.377909049 */, 18 },
5963 /* 5585 */ { MAD_F(0x060c48fb) /* 0.377999288 */, 18 },
5964 /* 5586 */ { MAD_F(0x060ca79c) /* 0.378089532 */, 18 },
5965 /* 5587 */ { MAD_F(0x060d063e) /* 0.378179781 */, 18 },
5966 /* 5588 */ { MAD_F(0x060d64e1) /* 0.378270036 */, 18 },
5967 /* 5589 */ { MAD_F(0x060dc387) /* 0.378360297 */, 18 },
5968 /* 5590 */ { MAD_F(0x060e222d) /* 0.378450563 */, 18 },
5969 /* 5591 */ { MAD_F(0x060e80d5) /* 0.378540834 */, 18 },
5970 /* 5592 */ { MAD_F(0x060edf7f) /* 0.378631110 */, 18 },
5971 /* 5593 */ { MAD_F(0x060f3e29) /* 0.378721392 */, 18 },
5972 /* 5594 */ { MAD_F(0x060f9cd6) /* 0.378811680 */, 18 },
5973 /* 5595 */ { MAD_F(0x060ffb83) /* 0.378901972 */, 18 },
5974 /* 5596 */ { MAD_F(0x06105a33) /* 0.378992270 */, 18 },
5975 /* 5597 */ { MAD_F(0x0610b8e3) /* 0.379082574 */, 18 },
5976 /* 5598 */ { MAD_F(0x06111795) /* 0.379172883 */, 18 },
5977 /* 5599 */ { MAD_F(0x06117649) /* 0.379263197 */, 18 },
5978
5979 /* 5600 */ { MAD_F(0x0611d4fe) /* 0.379353516 */, 18 },
5980 /* 5601 */ { MAD_F(0x061233b4) /* 0.379443841 */, 18 },
5981 /* 5602 */ { MAD_F(0x0612926c) /* 0.379534172 */, 18 },
5982 /* 5603 */ { MAD_F(0x0612f125) /* 0.379624507 */, 18 },
5983 /* 5604 */ { MAD_F(0x06134fe0) /* 0.379714848 */, 18 },
5984 /* 5605 */ { MAD_F(0x0613ae9c) /* 0.379805195 */, 18 },
5985 /* 5606 */ { MAD_F(0x06140d5a) /* 0.379895547 */, 18 },
5986 /* 5607 */ { MAD_F(0x06146c19) /* 0.379985904 */, 18 },
5987 /* 5608 */ { MAD_F(0x0614cada) /* 0.380076266 */, 18 },
5988 /* 5609 */ { MAD_F(0x0615299c) /* 0.380166634 */, 18 },
5989 /* 5610 */ { MAD_F(0x0615885f) /* 0.380257008 */, 18 },
5990 /* 5611 */ { MAD_F(0x0615e724) /* 0.380347386 */, 18 },
5991 /* 5612 */ { MAD_F(0x061645ea) /* 0.380437770 */, 18 },
5992 /* 5613 */ { MAD_F(0x0616a4b2) /* 0.380528160 */, 18 },
5993 /* 5614 */ { MAD_F(0x0617037b) /* 0.380618555 */, 18 },
5994 /* 5615 */ { MAD_F(0x06176246) /* 0.380708955 */, 18 },
5995
5996 /* 5616 */ { MAD_F(0x0617c112) /* 0.380799360 */, 18 },
5997 /* 5617 */ { MAD_F(0x06181fdf) /* 0.380889771 */, 18 },
5998 /* 5618 */ { MAD_F(0x06187eae) /* 0.380980187 */, 18 },
5999 /* 5619 */ { MAD_F(0x0618dd7e) /* 0.381070609 */, 18 },
6000 /* 5620 */ { MAD_F(0x06193c50) /* 0.381161036 */, 18 },
6001 /* 5621 */ { MAD_F(0x06199b24) /* 0.381251468 */, 18 },
6002 /* 5622 */ { MAD_F(0x0619f9f8) /* 0.381341906 */, 18 },
6003 /* 5623 */ { MAD_F(0x061a58ce) /* 0.381432349 */, 18 },
6004 /* 5624 */ { MAD_F(0x061ab7a6) /* 0.381522798 */, 18 },
6005 /* 5625 */ { MAD_F(0x061b167f) /* 0.381613251 */, 18 },
6006 /* 5626 */ { MAD_F(0x061b7559) /* 0.381703711 */, 18 },
6007 /* 5627 */ { MAD_F(0x061bd435) /* 0.381794175 */, 18 },
6008 /* 5628 */ { MAD_F(0x061c3313) /* 0.381884645 */, 18 },
6009 /* 5629 */ { MAD_F(0x061c91f1) /* 0.381975120 */, 18 },
6010 /* 5630 */ { MAD_F(0x061cf0d2) /* 0.382065601 */, 18 },
6011 /* 5631 */ { MAD_F(0x061d4fb3) /* 0.382156087 */, 18 },
6012
6013 /* 5632 */ { MAD_F(0x061dae96) /* 0.382246578 */, 18 },
6014 /* 5633 */ { MAD_F(0x061e0d7b) /* 0.382337075 */, 18 },
6015 /* 5634 */ { MAD_F(0x061e6c61) /* 0.382427577 */, 18 },
6016 /* 5635 */ { MAD_F(0x061ecb48) /* 0.382518084 */, 18 },
6017 /* 5636 */ { MAD_F(0x061f2a31) /* 0.382608597 */, 18 },
6018 /* 5637 */ { MAD_F(0x061f891b) /* 0.382699115 */, 18 },
6019 /* 5638 */ { MAD_F(0x061fe807) /* 0.382789638 */, 18 },
6020 /* 5639 */ { MAD_F(0x062046f4) /* 0.382880167 */, 18 },
6021 /* 5640 */ { MAD_F(0x0620a5e3) /* 0.382970701 */, 18 },
6022 /* 5641 */ { MAD_F(0x062104d3) /* 0.383061241 */, 18 },
6023 /* 5642 */ { MAD_F(0x062163c4) /* 0.383151786 */, 18 },
6024 /* 5643 */ { MAD_F(0x0621c2b7) /* 0.383242336 */, 18 },
6025 /* 5644 */ { MAD_F(0x062221ab) /* 0.383332891 */, 18 },
6026 /* 5645 */ { MAD_F(0x062280a1) /* 0.383423452 */, 18 },
6027 /* 5646 */ { MAD_F(0x0622df98) /* 0.383514018 */, 18 },
6028 /* 5647 */ { MAD_F(0x06233e91) /* 0.383604590 */, 18 },
6029
6030 /* 5648 */ { MAD_F(0x06239d8b) /* 0.383695167 */, 18 },
6031 /* 5649 */ { MAD_F(0x0623fc86) /* 0.383785749 */, 18 },
6032 /* 5650 */ { MAD_F(0x06245b83) /* 0.383876337 */, 18 },
6033 /* 5651 */ { MAD_F(0x0624ba82) /* 0.383966930 */, 18 },
6034 /* 5652 */ { MAD_F(0x06251981) /* 0.384057528 */, 18 },
6035 /* 5653 */ { MAD_F(0x06257883) /* 0.384148132 */, 18 },
6036 /* 5654 */ { MAD_F(0x0625d785) /* 0.384238741 */, 18 },
6037 /* 5655 */ { MAD_F(0x06263689) /* 0.384329355 */, 18 },
6038 /* 5656 */ { MAD_F(0x0626958f) /* 0.384419975 */, 18 },
6039 /* 5657 */ { MAD_F(0x0626f496) /* 0.384510600 */, 18 },
6040 /* 5658 */ { MAD_F(0x0627539e) /* 0.384601230 */, 18 },
6041 /* 5659 */ { MAD_F(0x0627b2a8) /* 0.384691866 */, 18 },
6042 /* 5660 */ { MAD_F(0x062811b3) /* 0.384782507 */, 18 },
6043 /* 5661 */ { MAD_F(0x062870c0) /* 0.384873153 */, 18 },
6044 /* 5662 */ { MAD_F(0x0628cfce) /* 0.384963805 */, 18 },
6045 /* 5663 */ { MAD_F(0x06292ede) /* 0.385054462 */, 18 },
6046
6047 /* 5664 */ { MAD_F(0x06298def) /* 0.385145124 */, 18 },
6048 /* 5665 */ { MAD_F(0x0629ed01) /* 0.385235792 */, 18 },
6049 /* 5666 */ { MAD_F(0x062a4c15) /* 0.385326465 */, 18 },
6050 /* 5667 */ { MAD_F(0x062aab2a) /* 0.385417143 */, 18 },
6051 /* 5668 */ { MAD_F(0x062b0a41) /* 0.385507827 */, 18 },
6052 /* 5669 */ { MAD_F(0x062b6959) /* 0.385598516 */, 18 },
6053 /* 5670 */ { MAD_F(0x062bc873) /* 0.385689211 */, 18 },
6054 /* 5671 */ { MAD_F(0x062c278e) /* 0.385779910 */, 18 },
6055 /* 5672 */ { MAD_F(0x062c86aa) /* 0.385870615 */, 18 },
6056 /* 5673 */ { MAD_F(0x062ce5c8) /* 0.385961326 */, 18 },
6057 /* 5674 */ { MAD_F(0x062d44e8) /* 0.386052041 */, 18 },
6058 /* 5675 */ { MAD_F(0x062da408) /* 0.386142762 */, 18 },
6059 /* 5676 */ { MAD_F(0x062e032a) /* 0.386233489 */, 18 },
6060 /* 5677 */ { MAD_F(0x062e624e) /* 0.386324221 */, 18 },
6061 /* 5678 */ { MAD_F(0x062ec173) /* 0.386414958 */, 18 },
6062 /* 5679 */ { MAD_F(0x062f209a) /* 0.386505700 */, 18 },
6063
6064 /* 5680 */ { MAD_F(0x062f7fc1) /* 0.386596448 */, 18 },
6065 /* 5681 */ { MAD_F(0x062fdeeb) /* 0.386687201 */, 18 },
6066 /* 5682 */ { MAD_F(0x06303e16) /* 0.386777959 */, 18 },
6067 /* 5683 */ { MAD_F(0x06309d42) /* 0.386868723 */, 18 },
6068 /* 5684 */ { MAD_F(0x0630fc6f) /* 0.386959492 */, 18 },
6069 /* 5685 */ { MAD_F(0x06315b9e) /* 0.387050266 */, 18 },
6070 /* 5686 */ { MAD_F(0x0631bacf) /* 0.387141045 */, 18 },
6071 /* 5687 */ { MAD_F(0x06321a01) /* 0.387231830 */, 18 },
6072 /* 5688 */ { MAD_F(0x06327934) /* 0.387322621 */, 18 },
6073 /* 5689 */ { MAD_F(0x0632d869) /* 0.387413416 */, 18 },
6074 /* 5690 */ { MAD_F(0x0633379f) /* 0.387504217 */, 18 },
6075 /* 5691 */ { MAD_F(0x063396d7) /* 0.387595023 */, 18 },
6076 /* 5692 */ { MAD_F(0x0633f610) /* 0.387685835 */, 18 },
6077 /* 5693 */ { MAD_F(0x0634554a) /* 0.387776652 */, 18 },
6078 /* 5694 */ { MAD_F(0x0634b486) /* 0.387867474 */, 18 },
6079 /* 5695 */ { MAD_F(0x063513c3) /* 0.387958301 */, 18 },
6080
6081 /* 5696 */ { MAD_F(0x06357302) /* 0.388049134 */, 18 },
6082 /* 5697 */ { MAD_F(0x0635d242) /* 0.388139972 */, 18 },
6083 /* 5698 */ { MAD_F(0x06363184) /* 0.388230816 */, 18 },
6084 /* 5699 */ { MAD_F(0x063690c7) /* 0.388321665 */, 18 },
6085 /* 5700 */ { MAD_F(0x0636f00b) /* 0.388412519 */, 18 },
6086 /* 5701 */ { MAD_F(0x06374f51) /* 0.388503378 */, 18 },
6087 /* 5702 */ { MAD_F(0x0637ae99) /* 0.388594243 */, 18 },
6088 /* 5703 */ { MAD_F(0x06380de1) /* 0.388685113 */, 18 },
6089 /* 5704 */ { MAD_F(0x06386d2b) /* 0.388775988 */, 18 },
6090 /* 5705 */ { MAD_F(0x0638cc77) /* 0.388866869 */, 18 },
6091 /* 5706 */ { MAD_F(0x06392bc4) /* 0.388957755 */, 18 },
6092 /* 5707 */ { MAD_F(0x06398b12) /* 0.389048646 */, 18 },
6093 /* 5708 */ { MAD_F(0x0639ea62) /* 0.389139542 */, 18 },
6094 /* 5709 */ { MAD_F(0x063a49b4) /* 0.389230444 */, 18 },
6095 /* 5710 */ { MAD_F(0x063aa906) /* 0.389321352 */, 18 },
6096 /* 5711 */ { MAD_F(0x063b085a) /* 0.389412264 */, 18 },
6097
6098 /* 5712 */ { MAD_F(0x063b67b0) /* 0.389503182 */, 18 },
6099 /* 5713 */ { MAD_F(0x063bc707) /* 0.389594105 */, 18 },
6100 /* 5714 */ { MAD_F(0x063c265f) /* 0.389685033 */, 18 },
6101 /* 5715 */ { MAD_F(0x063c85b9) /* 0.389775967 */, 18 },
6102 /* 5716 */ { MAD_F(0x063ce514) /* 0.389866906 */, 18 },
6103 /* 5717 */ { MAD_F(0x063d4471) /* 0.389957850 */, 18 },
6104 /* 5718 */ { MAD_F(0x063da3cf) /* 0.390048800 */, 18 },
6105 /* 5719 */ { MAD_F(0x063e032f) /* 0.390139755 */, 18 },
6106 /* 5720 */ { MAD_F(0x063e6290) /* 0.390230715 */, 18 },
6107 /* 5721 */ { MAD_F(0x063ec1f2) /* 0.390321681 */, 18 },
6108 /* 5722 */ { MAD_F(0x063f2156) /* 0.390412651 */, 18 },
6109 /* 5723 */ { MAD_F(0x063f80bb) /* 0.390503628 */, 18 },
6110 /* 5724 */ { MAD_F(0x063fe022) /* 0.390594609 */, 18 },
6111 /* 5725 */ { MAD_F(0x06403f8a) /* 0.390685596 */, 18 },
6112 /* 5726 */ { MAD_F(0x06409ef3) /* 0.390776588 */, 18 },
6113 /* 5727 */ { MAD_F(0x0640fe5e) /* 0.390867585 */, 18 },
6114
6115 /* 5728 */ { MAD_F(0x06415dcb) /* 0.390958588 */, 18 },
6116 /* 5729 */ { MAD_F(0x0641bd38) /* 0.391049596 */, 18 },
6117 /* 5730 */ { MAD_F(0x06421ca7) /* 0.391140609 */, 18 },
6118 /* 5731 */ { MAD_F(0x06427c18) /* 0.391231627 */, 18 },
6119 /* 5732 */ { MAD_F(0x0642db8a) /* 0.391322651 */, 18 },
6120 /* 5733 */ { MAD_F(0x06433afd) /* 0.391413680 */, 18 },
6121 /* 5734 */ { MAD_F(0x06439a72) /* 0.391504714 */, 18 },
6122 /* 5735 */ { MAD_F(0x0643f9e9) /* 0.391595754 */, 18 },
6123 /* 5736 */ { MAD_F(0x06445960) /* 0.391686799 */, 18 },
6124 /* 5737 */ { MAD_F(0x0644b8d9) /* 0.391777849 */, 18 },
6125 /* 5738 */ { MAD_F(0x06451854) /* 0.391868905 */, 18 },
6126 /* 5739 */ { MAD_F(0x064577d0) /* 0.391959966 */, 18 },
6127 /* 5740 */ { MAD_F(0x0645d74d) /* 0.392051032 */, 18 },
6128 /* 5741 */ { MAD_F(0x064636cc) /* 0.392142103 */, 18 },
6129 /* 5742 */ { MAD_F(0x0646964c) /* 0.392233180 */, 18 },
6130 /* 5743 */ { MAD_F(0x0646f5ce) /* 0.392324262 */, 18 },
6131
6132 /* 5744 */ { MAD_F(0x06475551) /* 0.392415349 */, 18 },
6133 /* 5745 */ { MAD_F(0x0647b4d5) /* 0.392506442 */, 18 },
6134 /* 5746 */ { MAD_F(0x0648145b) /* 0.392597540 */, 18 },
6135 /* 5747 */ { MAD_F(0x064873e3) /* 0.392688643 */, 18 },
6136 /* 5748 */ { MAD_F(0x0648d36b) /* 0.392779751 */, 18 },
6137 /* 5749 */ { MAD_F(0x064932f6) /* 0.392870865 */, 18 },
6138 /* 5750 */ { MAD_F(0x06499281) /* 0.392961984 */, 18 },
6139 /* 5751 */ { MAD_F(0x0649f20e) /* 0.393053108 */, 18 },
6140 /* 5752 */ { MAD_F(0x064a519c) /* 0.393144238 */, 18 },
6141 /* 5753 */ { MAD_F(0x064ab12c) /* 0.393235372 */, 18 },
6142 /* 5754 */ { MAD_F(0x064b10be) /* 0.393326513 */, 18 },
6143 /* 5755 */ { MAD_F(0x064b7050) /* 0.393417658 */, 18 },
6144 /* 5756 */ { MAD_F(0x064bcfe4) /* 0.393508809 */, 18 },
6145 /* 5757 */ { MAD_F(0x064c2f7a) /* 0.393599965 */, 18 },
6146 /* 5758 */ { MAD_F(0x064c8f11) /* 0.393691126 */, 18 },
6147 /* 5759 */ { MAD_F(0x064ceea9) /* 0.393782292 */, 18 },
6148
6149 /* 5760 */ { MAD_F(0x064d4e43) /* 0.393873464 */, 18 },
6150 /* 5761 */ { MAD_F(0x064dadde) /* 0.393964641 */, 18 },
6151 /* 5762 */ { MAD_F(0x064e0d7a) /* 0.394055823 */, 18 },
6152 /* 5763 */ { MAD_F(0x064e6d18) /* 0.394147011 */, 18 },
6153 /* 5764 */ { MAD_F(0x064eccb8) /* 0.394238204 */, 18 },
6154 /* 5765 */ { MAD_F(0x064f2c59) /* 0.394329402 */, 18 },
6155 /* 5766 */ { MAD_F(0x064f8bfb) /* 0.394420605 */, 18 },
6156 /* 5767 */ { MAD_F(0x064feb9e) /* 0.394511814 */, 18 },
6157 /* 5768 */ { MAD_F(0x06504b44) /* 0.394603028 */, 18 },
6158 /* 5769 */ { MAD_F(0x0650aaea) /* 0.394694247 */, 18 },
6159 /* 5770 */ { MAD_F(0x06510a92) /* 0.394785472 */, 18 },
6160 /* 5771 */ { MAD_F(0x06516a3b) /* 0.394876702 */, 18 },
6161 /* 5772 */ { MAD_F(0x0651c9e6) /* 0.394967937 */, 18 },
6162 /* 5773 */ { MAD_F(0x06522992) /* 0.395059177 */, 18 },
6163 /* 5774 */ { MAD_F(0x06528940) /* 0.395150423 */, 18 },
6164 /* 5775 */ { MAD_F(0x0652e8ef) /* 0.395241673 */, 18 },
6165
6166 /* 5776 */ { MAD_F(0x0653489f) /* 0.395332930 */, 18 },
6167 /* 5777 */ { MAD_F(0x0653a851) /* 0.395424191 */, 18 },
6168 /* 5778 */ { MAD_F(0x06540804) /* 0.395515458 */, 18 },
6169 /* 5779 */ { MAD_F(0x065467b9) /* 0.395606730 */, 18 },
6170 /* 5780 */ { MAD_F(0x0654c76f) /* 0.395698007 */, 18 },
6171 /* 5781 */ { MAD_F(0x06552726) /* 0.395789289 */, 18 },
6172 /* 5782 */ { MAD_F(0x065586df) /* 0.395880577 */, 18 },
6173 /* 5783 */ { MAD_F(0x0655e699) /* 0.395971870 */, 18 },
6174 /* 5784 */ { MAD_F(0x06564655) /* 0.396063168 */, 18 },
6175 /* 5785 */ { MAD_F(0x0656a612) /* 0.396154472 */, 18 },
6176 /* 5786 */ { MAD_F(0x065705d0) /* 0.396245780 */, 18 },
6177 /* 5787 */ { MAD_F(0x06576590) /* 0.396337094 */, 18 },
6178 /* 5788 */ { MAD_F(0x0657c552) /* 0.396428414 */, 18 },
6179 /* 5789 */ { MAD_F(0x06582514) /* 0.396519738 */, 18 },
6180 /* 5790 */ { MAD_F(0x065884d9) /* 0.396611068 */, 18 },
6181 /* 5791 */ { MAD_F(0x0658e49e) /* 0.396702403 */, 18 },
6182
6183 /* 5792 */ { MAD_F(0x06594465) /* 0.396793743 */, 18 },
6184 /* 5793 */ { MAD_F(0x0659a42e) /* 0.396885089 */, 18 },
6185 /* 5794 */ { MAD_F(0x065a03f7) /* 0.396976440 */, 18 },
6186 /* 5795 */ { MAD_F(0x065a63c3) /* 0.397067796 */, 18 },
6187 /* 5796 */ { MAD_F(0x065ac38f) /* 0.397159157 */, 18 },
6188 /* 5797 */ { MAD_F(0x065b235d) /* 0.397250524 */, 18 },
6189 /* 5798 */ { MAD_F(0x065b832d) /* 0.397341896 */, 18 },
6190 /* 5799 */ { MAD_F(0x065be2fe) /* 0.397433273 */, 18 },
6191 /* 5800 */ { MAD_F(0x065c42d0) /* 0.397524655 */, 18 },
6192 /* 5801 */ { MAD_F(0x065ca2a3) /* 0.397616043 */, 18 },
6193 /* 5802 */ { MAD_F(0x065d0279) /* 0.397707436 */, 18 },
6194 /* 5803 */ { MAD_F(0x065d624f) /* 0.397798834 */, 18 },
6195 /* 5804 */ { MAD_F(0x065dc227) /* 0.397890237 */, 18 },
6196 /* 5805 */ { MAD_F(0x065e2200) /* 0.397981646 */, 18 },
6197 /* 5806 */ { MAD_F(0x065e81db) /* 0.398073059 */, 18 },
6198 /* 5807 */ { MAD_F(0x065ee1b7) /* 0.398164479 */, 18 },
6199
6200 /* 5808 */ { MAD_F(0x065f4195) /* 0.398255903 */, 18 },
6201 /* 5809 */ { MAD_F(0x065fa174) /* 0.398347333 */, 18 },
6202 /* 5810 */ { MAD_F(0x06600154) /* 0.398438767 */, 18 },
6203 /* 5811 */ { MAD_F(0x06606136) /* 0.398530207 */, 18 },
6204 /* 5812 */ { MAD_F(0x0660c119) /* 0.398621653 */, 18 },
6205 /* 5813 */ { MAD_F(0x066120fd) /* 0.398713103 */, 18 },
6206 /* 5814 */ { MAD_F(0x066180e3) /* 0.398804559 */, 18 },
6207 /* 5815 */ { MAD_F(0x0661e0cb) /* 0.398896020 */, 18 },
6208 /* 5816 */ { MAD_F(0x066240b4) /* 0.398987487 */, 18 },
6209 /* 5817 */ { MAD_F(0x0662a09e) /* 0.399078958 */, 18 },
6210 /* 5818 */ { MAD_F(0x06630089) /* 0.399170435 */, 18 },
6211 /* 5819 */ { MAD_F(0x06636077) /* 0.399261917 */, 18 },
6212 /* 5820 */ { MAD_F(0x0663c065) /* 0.399353404 */, 18 },
6213 /* 5821 */ { MAD_F(0x06642055) /* 0.399444897 */, 18 },
6214 /* 5822 */ { MAD_F(0x06648046) /* 0.399536395 */, 18 },
6215 /* 5823 */ { MAD_F(0x0664e039) /* 0.399627898 */, 18 },
6216
6217 /* 5824 */ { MAD_F(0x0665402d) /* 0.399719406 */, 18 },
6218 /* 5825 */ { MAD_F(0x0665a022) /* 0.399810919 */, 18 },
6219 /* 5826 */ { MAD_F(0x06660019) /* 0.399902438 */, 18 },
6220 /* 5827 */ { MAD_F(0x06666011) /* 0.399993962 */, 18 },
6221 /* 5828 */ { MAD_F(0x0666c00b) /* 0.400085491 */, 18 },
6222 /* 5829 */ { MAD_F(0x06672006) /* 0.400177026 */, 18 },
6223 /* 5830 */ { MAD_F(0x06678003) /* 0.400268565 */, 18 },
6224 /* 5831 */ { MAD_F(0x0667e000) /* 0.400360110 */, 18 },
6225 /* 5832 */ { MAD_F(0x06684000) /* 0.400451660 */, 18 },
6226 /* 5833 */ { MAD_F(0x0668a000) /* 0.400543216 */, 18 },
6227 /* 5834 */ { MAD_F(0x06690003) /* 0.400634776 */, 18 },
6228 /* 5835 */ { MAD_F(0x06696006) /* 0.400726342 */, 18 },
6229 /* 5836 */ { MAD_F(0x0669c00b) /* 0.400817913 */, 18 },
6230 /* 5837 */ { MAD_F(0x066a2011) /* 0.400909489 */, 18 },
6231 /* 5838 */ { MAD_F(0x066a8019) /* 0.401001071 */, 18 },
6232 /* 5839 */ { MAD_F(0x066ae022) /* 0.401092657 */, 18 },
6233
6234 /* 5840 */ { MAD_F(0x066b402d) /* 0.401184249 */, 18 },
6235 /* 5841 */ { MAD_F(0x066ba039) /* 0.401275847 */, 18 },
6236 /* 5842 */ { MAD_F(0x066c0046) /* 0.401367449 */, 18 },
6237 /* 5843 */ { MAD_F(0x066c6055) /* 0.401459057 */, 18 },
6238 /* 5844 */ { MAD_F(0x066cc065) /* 0.401550670 */, 18 },
6239 /* 5845 */ { MAD_F(0x066d2076) /* 0.401642288 */, 18 },
6240 /* 5846 */ { MAD_F(0x066d8089) /* 0.401733911 */, 18 },
6241 /* 5847 */ { MAD_F(0x066de09e) /* 0.401825540 */, 18 },
6242 /* 5848 */ { MAD_F(0x066e40b3) /* 0.401917173 */, 18 },
6243 /* 5849 */ { MAD_F(0x066ea0cb) /* 0.402008812 */, 18 },
6244 /* 5850 */ { MAD_F(0x066f00e3) /* 0.402100457 */, 18 },
6245 /* 5851 */ { MAD_F(0x066f60fd) /* 0.402192106 */, 18 },
6246 /* 5852 */ { MAD_F(0x066fc118) /* 0.402283761 */, 18 },
6247 /* 5853 */ { MAD_F(0x06702135) /* 0.402375420 */, 18 },
6248 /* 5854 */ { MAD_F(0x06708153) /* 0.402467086 */, 18 },
6249 /* 5855 */ { MAD_F(0x0670e173) /* 0.402558756 */, 18 },
6250
6251 /* 5856 */ { MAD_F(0x06714194) /* 0.402650431 */, 18 },
6252 /* 5857 */ { MAD_F(0x0671a1b6) /* 0.402742112 */, 18 },
6253 /* 5858 */ { MAD_F(0x067201da) /* 0.402833798 */, 18 },
6254 /* 5859 */ { MAD_F(0x067261ff) /* 0.402925489 */, 18 },
6255 /* 5860 */ { MAD_F(0x0672c226) /* 0.403017186 */, 18 },
6256 /* 5861 */ { MAD_F(0x0673224e) /* 0.403108887 */, 18 },
6257 /* 5862 */ { MAD_F(0x06738277) /* 0.403200594 */, 18 },
6258 /* 5863 */ { MAD_F(0x0673e2a2) /* 0.403292306 */, 18 },
6259 /* 5864 */ { MAD_F(0x067442ce) /* 0.403384024 */, 18 },
6260 /* 5865 */ { MAD_F(0x0674a2fc) /* 0.403475746 */, 18 },
6261 /* 5866 */ { MAD_F(0x0675032b) /* 0.403567474 */, 18 },
6262 /* 5867 */ { MAD_F(0x0675635b) /* 0.403659207 */, 18 },
6263 /* 5868 */ { MAD_F(0x0675c38d) /* 0.403750945 */, 18 },
6264 /* 5869 */ { MAD_F(0x067623c0) /* 0.403842688 */, 18 },
6265 /* 5870 */ { MAD_F(0x067683f4) /* 0.403934437 */, 18 },
6266 /* 5871 */ { MAD_F(0x0676e42a) /* 0.404026190 */, 18 },
6267
6268 /* 5872 */ { MAD_F(0x06774462) /* 0.404117949 */, 18 },
6269 /* 5873 */ { MAD_F(0x0677a49b) /* 0.404209714 */, 18 },
6270 /* 5874 */ { MAD_F(0x067804d5) /* 0.404301483 */, 18 },
6271 /* 5875 */ { MAD_F(0x06786510) /* 0.404393258 */, 18 },
6272 /* 5876 */ { MAD_F(0x0678c54d) /* 0.404485037 */, 18 },
6273 /* 5877 */ { MAD_F(0x0679258c) /* 0.404576822 */, 18 },
6274 /* 5878 */ { MAD_F(0x067985cb) /* 0.404668613 */, 18 },
6275 /* 5879 */ { MAD_F(0x0679e60c) /* 0.404760408 */, 18 },
6276 /* 5880 */ { MAD_F(0x067a464f) /* 0.404852209 */, 18 },
6277 /* 5881 */ { MAD_F(0x067aa693) /* 0.404944014 */, 18 },
6278 /* 5882 */ { MAD_F(0x067b06d8) /* 0.405035825 */, 18 },
6279 /* 5883 */ { MAD_F(0x067b671f) /* 0.405127642 */, 18 },
6280 /* 5884 */ { MAD_F(0x067bc767) /* 0.405219463 */, 18 },
6281 /* 5885 */ { MAD_F(0x067c27b1) /* 0.405311290 */, 18 },
6282 /* 5886 */ { MAD_F(0x067c87fc) /* 0.405403122 */, 18 },
6283 /* 5887 */ { MAD_F(0x067ce848) /* 0.405494959 */, 18 },
6284
6285 /* 5888 */ { MAD_F(0x067d4896) /* 0.405586801 */, 18 },
6286 /* 5889 */ { MAD_F(0x067da8e5) /* 0.405678648 */, 18 },
6287 /* 5890 */ { MAD_F(0x067e0935) /* 0.405770501 */, 18 },
6288 /* 5891 */ { MAD_F(0x067e6987) /* 0.405862359 */, 18 },
6289 /* 5892 */ { MAD_F(0x067ec9da) /* 0.405954222 */, 18 },
6290 /* 5893 */ { MAD_F(0x067f2a2f) /* 0.406046090 */, 18 },
6291 /* 5894 */ { MAD_F(0x067f8a85) /* 0.406137963 */, 18 },
6292 /* 5895 */ { MAD_F(0x067feadd) /* 0.406229842 */, 18 },
6293 /* 5896 */ { MAD_F(0x06804b36) /* 0.406321726 */, 18 },
6294 /* 5897 */ { MAD_F(0x0680ab90) /* 0.406413615 */, 18 },
6295 /* 5898 */ { MAD_F(0x06810beb) /* 0.406505509 */, 18 },
6296 /* 5899 */ { MAD_F(0x06816c49) /* 0.406597408 */, 18 },
6297 /* 5900 */ { MAD_F(0x0681cca7) /* 0.406689313 */, 18 },
6298 /* 5901 */ { MAD_F(0x06822d07) /* 0.406781223 */, 18 },
6299 /* 5902 */ { MAD_F(0x06828d68) /* 0.406873138 */, 18 },
6300 /* 5903 */ { MAD_F(0x0682edcb) /* 0.406965058 */, 18 },
6301
6302 /* 5904 */ { MAD_F(0x06834e2f) /* 0.407056983 */, 18 },
6303 /* 5905 */ { MAD_F(0x0683ae94) /* 0.407148914 */, 18 },
6304 /* 5906 */ { MAD_F(0x06840efb) /* 0.407240850 */, 18 },
6305 /* 5907 */ { MAD_F(0x06846f63) /* 0.407332791 */, 18 },
6306 /* 5908 */ { MAD_F(0x0684cfcd) /* 0.407424737 */, 18 },
6307 /* 5909 */ { MAD_F(0x06853038) /* 0.407516688 */, 18 },
6308 /* 5910 */ { MAD_F(0x068590a4) /* 0.407608645 */, 18 },
6309 /* 5911 */ { MAD_F(0x0685f112) /* 0.407700606 */, 18 },
6310 /* 5912 */ { MAD_F(0x06865181) /* 0.407792573 */, 18 },
6311 /* 5913 */ { MAD_F(0x0686b1f2) /* 0.407884545 */, 18 },
6312 /* 5914 */ { MAD_F(0x06871264) /* 0.407976522 */, 18 },
6313 /* 5915 */ { MAD_F(0x068772d7) /* 0.408068505 */, 18 },
6314 /* 5916 */ { MAD_F(0x0687d34c) /* 0.408160492 */, 18 },
6315 /* 5917 */ { MAD_F(0x068833c2) /* 0.408252485 */, 18 },
6316 /* 5918 */ { MAD_F(0x06889439) /* 0.408344483 */, 18 },
6317 /* 5919 */ { MAD_F(0x0688f4b2) /* 0.408436486 */, 18 },
6318
6319 /* 5920 */ { MAD_F(0x0689552c) /* 0.408528495 */, 18 },
6320 /* 5921 */ { MAD_F(0x0689b5a8) /* 0.408620508 */, 18 },
6321 /* 5922 */ { MAD_F(0x068a1625) /* 0.408712527 */, 18 },
6322 /* 5923 */ { MAD_F(0x068a76a4) /* 0.408804551 */, 18 },
6323 /* 5924 */ { MAD_F(0x068ad724) /* 0.408896580 */, 18 },
6324 /* 5925 */ { MAD_F(0x068b37a5) /* 0.408988614 */, 18 },
6325 /* 5926 */ { MAD_F(0x068b9827) /* 0.409080653 */, 18 },
6326 /* 5927 */ { MAD_F(0x068bf8ac) /* 0.409172698 */, 18 },
6327 /* 5928 */ { MAD_F(0x068c5931) /* 0.409264748 */, 18 },
6328 /* 5929 */ { MAD_F(0x068cb9b8) /* 0.409356803 */, 18 },
6329 /* 5930 */ { MAD_F(0x068d1a40) /* 0.409448863 */, 18 },
6330 /* 5931 */ { MAD_F(0x068d7aca) /* 0.409540928 */, 18 },
6331 /* 5932 */ { MAD_F(0x068ddb54) /* 0.409632999 */, 18 },
6332 /* 5933 */ { MAD_F(0x068e3be1) /* 0.409725074 */, 18 },
6333 /* 5934 */ { MAD_F(0x068e9c6f) /* 0.409817155 */, 18 },
6334 /* 5935 */ { MAD_F(0x068efcfe) /* 0.409909241 */, 18 },
6335
6336 /* 5936 */ { MAD_F(0x068f5d8e) /* 0.410001332 */, 18 },
6337 /* 5937 */ { MAD_F(0x068fbe20) /* 0.410093428 */, 18 },
6338 /* 5938 */ { MAD_F(0x06901eb4) /* 0.410185530 */, 18 },
6339 /* 5939 */ { MAD_F(0x06907f48) /* 0.410277637 */, 18 },
6340 /* 5940 */ { MAD_F(0x0690dfde) /* 0.410369748 */, 18 },
6341 /* 5941 */ { MAD_F(0x06914076) /* 0.410461865 */, 18 },
6342 /* 5942 */ { MAD_F(0x0691a10f) /* 0.410553988 */, 18 },
6343 /* 5943 */ { MAD_F(0x069201a9) /* 0.410646115 */, 18 },
6344 /* 5944 */ { MAD_F(0x06926245) /* 0.410738247 */, 18 },
6345 /* 5945 */ { MAD_F(0x0692c2e2) /* 0.410830385 */, 18 },
6346 /* 5946 */ { MAD_F(0x06932380) /* 0.410922528 */, 18 },
6347 /* 5947 */ { MAD_F(0x06938420) /* 0.411014676 */, 18 },
6348 /* 5948 */ { MAD_F(0x0693e4c1) /* 0.411106829 */, 18 },
6349 /* 5949 */ { MAD_F(0x06944563) /* 0.411198987 */, 18 },
6350 /* 5950 */ { MAD_F(0x0694a607) /* 0.411291151 */, 18 },
6351 /* 5951 */ { MAD_F(0x069506ad) /* 0.411383320 */, 18 },
6352
6353 /* 5952 */ { MAD_F(0x06956753) /* 0.411475493 */, 18 },
6354 /* 5953 */ { MAD_F(0x0695c7fc) /* 0.411567672 */, 18 },
6355 /* 5954 */ { MAD_F(0x069628a5) /* 0.411659857 */, 18 },
6356 /* 5955 */ { MAD_F(0x06968950) /* 0.411752046 */, 18 },
6357 /* 5956 */ { MAD_F(0x0696e9fc) /* 0.411844240 */, 18 },
6358 /* 5957 */ { MAD_F(0x06974aaa) /* 0.411936440 */, 18 },
6359 /* 5958 */ { MAD_F(0x0697ab59) /* 0.412028645 */, 18 },
6360 /* 5959 */ { MAD_F(0x06980c09) /* 0.412120855 */, 18 },
6361 /* 5960 */ { MAD_F(0x06986cbb) /* 0.412213070 */, 18 },
6362 /* 5961 */ { MAD_F(0x0698cd6e) /* 0.412305290 */, 18 },
6363 /* 5962 */ { MAD_F(0x06992e23) /* 0.412397516 */, 18 },
6364 /* 5963 */ { MAD_F(0x06998ed9) /* 0.412489746 */, 18 },
6365 /* 5964 */ { MAD_F(0x0699ef90) /* 0.412581982 */, 18 },
6366 /* 5965 */ { MAD_F(0x069a5049) /* 0.412674223 */, 18 },
6367 /* 5966 */ { MAD_F(0x069ab103) /* 0.412766469 */, 18 },
6368 /* 5967 */ { MAD_F(0x069b11bf) /* 0.412858720 */, 18 },
6369
6370 /* 5968 */ { MAD_F(0x069b727b) /* 0.412950976 */, 18 },
6371 /* 5969 */ { MAD_F(0x069bd33a) /* 0.413043238 */, 18 },
6372 /* 5970 */ { MAD_F(0x069c33f9) /* 0.413135505 */, 18 },
6373 /* 5971 */ { MAD_F(0x069c94ba) /* 0.413227776 */, 18 },
6374 /* 5972 */ { MAD_F(0x069cf57d) /* 0.413320053 */, 18 },
6375 /* 5973 */ { MAD_F(0x069d5641) /* 0.413412335 */, 18 },
6376 /* 5974 */ { MAD_F(0x069db706) /* 0.413504623 */, 18 },
6377 /* 5975 */ { MAD_F(0x069e17cc) /* 0.413596915 */, 18 },
6378 /* 5976 */ { MAD_F(0x069e7894) /* 0.413689213 */, 18 },
6379 /* 5977 */ { MAD_F(0x069ed95e) /* 0.413781515 */, 18 },
6380 /* 5978 */ { MAD_F(0x069f3a28) /* 0.413873823 */, 18 },
6381 /* 5979 */ { MAD_F(0x069f9af4) /* 0.413966136 */, 18 },
6382 /* 5980 */ { MAD_F(0x069ffbc2) /* 0.414058454 */, 18 },
6383 /* 5981 */ { MAD_F(0x06a05c91) /* 0.414150778 */, 18 },
6384 /* 5982 */ { MAD_F(0x06a0bd61) /* 0.414243106 */, 18 },
6385 /* 5983 */ { MAD_F(0x06a11e32) /* 0.414335440 */, 18 },
6386
6387 /* 5984 */ { MAD_F(0x06a17f05) /* 0.414427779 */, 18 },
6388 /* 5985 */ { MAD_F(0x06a1dfda) /* 0.414520122 */, 18 },
6389 /* 5986 */ { MAD_F(0x06a240b0) /* 0.414612471 */, 18 },
6390 /* 5987 */ { MAD_F(0x06a2a187) /* 0.414704826 */, 18 },
6391 /* 5988 */ { MAD_F(0x06a3025f) /* 0.414797185 */, 18 },
6392 /* 5989 */ { MAD_F(0x06a36339) /* 0.414889549 */, 18 },
6393 /* 5990 */ { MAD_F(0x06a3c414) /* 0.414981919 */, 18 },
6394 /* 5991 */ { MAD_F(0x06a424f1) /* 0.415074294 */, 18 },
6395 /* 5992 */ { MAD_F(0x06a485cf) /* 0.415166674 */, 18 },
6396 /* 5993 */ { MAD_F(0x06a4e6ae) /* 0.415259059 */, 18 },
6397 /* 5994 */ { MAD_F(0x06a5478f) /* 0.415351449 */, 18 },
6398 /* 5995 */ { MAD_F(0x06a5a871) /* 0.415443844 */, 18 },
6399 /* 5996 */ { MAD_F(0x06a60955) /* 0.415536244 */, 18 },
6400 /* 5997 */ { MAD_F(0x06a66a3a) /* 0.415628650 */, 18 },
6401 /* 5998 */ { MAD_F(0x06a6cb20) /* 0.415721061 */, 18 },
6402 /* 5999 */ { MAD_F(0x06a72c08) /* 0.415813476 */, 18 },
6403
6404 /* 6000 */ { MAD_F(0x06a78cf1) /* 0.415905897 */, 18 },
6405 /* 6001 */ { MAD_F(0x06a7eddb) /* 0.415998324 */, 18 },
6406 /* 6002 */ { MAD_F(0x06a84ec7) /* 0.416090755 */, 18 },
6407 /* 6003 */ { MAD_F(0x06a8afb4) /* 0.416183191 */, 18 },
6408 /* 6004 */ { MAD_F(0x06a910a3) /* 0.416275633 */, 18 },
6409 /* 6005 */ { MAD_F(0x06a97193) /* 0.416368079 */, 18 },
6410 /* 6006 */ { MAD_F(0x06a9d284) /* 0.416460531 */, 18 },
6411 /* 6007 */ { MAD_F(0x06aa3377) /* 0.416552988 */, 18 },
6412 /* 6008 */ { MAD_F(0x06aa946b) /* 0.416645450 */, 18 },
6413 /* 6009 */ { MAD_F(0x06aaf561) /* 0.416737917 */, 18 },
6414 /* 6010 */ { MAD_F(0x06ab5657) /* 0.416830389 */, 18 },
6415 /* 6011 */ { MAD_F(0x06abb750) /* 0.416922867 */, 18 },
6416 /* 6012 */ { MAD_F(0x06ac1849) /* 0.417015349 */, 18 },
6417 /* 6013 */ { MAD_F(0x06ac7944) /* 0.417107837 */, 18 },
6418 /* 6014 */ { MAD_F(0x06acda41) /* 0.417200330 */, 18 },
6419 /* 6015 */ { MAD_F(0x06ad3b3e) /* 0.417292828 */, 18 },
6420
6421 /* 6016 */ { MAD_F(0x06ad9c3d) /* 0.417385331 */, 18 },
6422 /* 6017 */ { MAD_F(0x06adfd3e) /* 0.417477839 */, 18 },
6423 /* 6018 */ { MAD_F(0x06ae5e40) /* 0.417570352 */, 18 },
6424 /* 6019 */ { MAD_F(0x06aebf43) /* 0.417662871 */, 18 },
6425 /* 6020 */ { MAD_F(0x06af2047) /* 0.417755394 */, 18 },
6426 /* 6021 */ { MAD_F(0x06af814d) /* 0.417847923 */, 18 },
6427 /* 6022 */ { MAD_F(0x06afe255) /* 0.417940457 */, 18 },
6428 /* 6023 */ { MAD_F(0x06b0435e) /* 0.418032996 */, 18 },
6429 /* 6024 */ { MAD_F(0x06b0a468) /* 0.418125540 */, 18 },
6430 /* 6025 */ { MAD_F(0x06b10573) /* 0.418218089 */, 18 },
6431 /* 6026 */ { MAD_F(0x06b16680) /* 0.418310643 */, 18 },
6432 /* 6027 */ { MAD_F(0x06b1c78e) /* 0.418403203 */, 18 },
6433 /* 6028 */ { MAD_F(0x06b2289e) /* 0.418495767 */, 18 },
6434 /* 6029 */ { MAD_F(0x06b289af) /* 0.418588337 */, 18 },
6435 /* 6030 */ { MAD_F(0x06b2eac1) /* 0.418680911 */, 18 },
6436 /* 6031 */ { MAD_F(0x06b34bd5) /* 0.418773491 */, 18 },
6437
6438 /* 6032 */ { MAD_F(0x06b3acea) /* 0.418866076 */, 18 },
6439 /* 6033 */ { MAD_F(0x06b40e00) /* 0.418958666 */, 18 },
6440 /* 6034 */ { MAD_F(0x06b46f18) /* 0.419051262 */, 18 },
6441 /* 6035 */ { MAD_F(0x06b4d031) /* 0.419143862 */, 18 },
6442 /* 6036 */ { MAD_F(0x06b5314c) /* 0.419236467 */, 18 },
6443 /* 6037 */ { MAD_F(0x06b59268) /* 0.419329078 */, 18 },
6444 /* 6038 */ { MAD_F(0x06b5f385) /* 0.419421694 */, 18 },
6445 /* 6039 */ { MAD_F(0x06b654a4) /* 0.419514314 */, 18 },
6446 /* 6040 */ { MAD_F(0x06b6b5c4) /* 0.419606940 */, 18 },
6447 /* 6041 */ { MAD_F(0x06b716e6) /* 0.419699571 */, 18 },
6448 /* 6042 */ { MAD_F(0x06b77808) /* 0.419792208 */, 18 },
6449 /* 6043 */ { MAD_F(0x06b7d92d) /* 0.419884849 */, 18 },
6450 /* 6044 */ { MAD_F(0x06b83a52) /* 0.419977495 */, 18 },
6451 /* 6045 */ { MAD_F(0x06b89b79) /* 0.420070147 */, 18 },
6452 /* 6046 */ { MAD_F(0x06b8fca1) /* 0.420162803 */, 18 },
6453 /* 6047 */ { MAD_F(0x06b95dcb) /* 0.420255465 */, 18 },
6454
6455 /* 6048 */ { MAD_F(0x06b9bef6) /* 0.420348132 */, 18 },
6456 /* 6049 */ { MAD_F(0x06ba2023) /* 0.420440803 */, 18 },
6457 /* 6050 */ { MAD_F(0x06ba8150) /* 0.420533481 */, 18 },
6458 /* 6051 */ { MAD_F(0x06bae280) /* 0.420626163 */, 18 },
6459 /* 6052 */ { MAD_F(0x06bb43b0) /* 0.420718850 */, 18 },
6460 /* 6053 */ { MAD_F(0x06bba4e2) /* 0.420811542 */, 18 },
6461 /* 6054 */ { MAD_F(0x06bc0615) /* 0.420904240 */, 18 },
6462 /* 6055 */ { MAD_F(0x06bc674a) /* 0.420996942 */, 18 },
6463 /* 6056 */ { MAD_F(0x06bcc880) /* 0.421089650 */, 18 },
6464 /* 6057 */ { MAD_F(0x06bd29b7) /* 0.421182362 */, 18 },
6465 /* 6058 */ { MAD_F(0x06bd8af0) /* 0.421275080 */, 18 },
6466 /* 6059 */ { MAD_F(0x06bdec2a) /* 0.421367803 */, 18 },
6467 /* 6060 */ { MAD_F(0x06be4d66) /* 0.421460531 */, 18 },
6468 /* 6061 */ { MAD_F(0x06beaea3) /* 0.421553264 */, 18 },
6469 /* 6062 */ { MAD_F(0x06bf0fe1) /* 0.421646003 */, 18 },
6470 /* 6063 */ { MAD_F(0x06bf7120) /* 0.421738746 */, 18 },
6471
6472 /* 6064 */ { MAD_F(0x06bfd261) /* 0.421831494 */, 18 },
6473 /* 6065 */ { MAD_F(0x06c033a4) /* 0.421924248 */, 18 },
6474 /* 6066 */ { MAD_F(0x06c094e7) /* 0.422017007 */, 18 },
6475 /* 6067 */ { MAD_F(0x06c0f62c) /* 0.422109770 */, 18 },
6476 /* 6068 */ { MAD_F(0x06c15773) /* 0.422202539 */, 18 },
6477 /* 6069 */ { MAD_F(0x06c1b8bb) /* 0.422295313 */, 18 },
6478 /* 6070 */ { MAD_F(0x06c21a04) /* 0.422388092 */, 18 },
6479 /* 6071 */ { MAD_F(0x06c27b4e) /* 0.422480876 */, 18 },
6480 /* 6072 */ { MAD_F(0x06c2dc9a) /* 0.422573665 */, 18 },
6481 /* 6073 */ { MAD_F(0x06c33de8) /* 0.422666460 */, 18 },
6482 /* 6074 */ { MAD_F(0x06c39f36) /* 0.422759259 */, 18 },
6483 /* 6075 */ { MAD_F(0x06c40086) /* 0.422852064 */, 18 },
6484 /* 6076 */ { MAD_F(0x06c461d8) /* 0.422944873 */, 18 },
6485 /* 6077 */ { MAD_F(0x06c4c32a) /* 0.423037688 */, 18 },
6486 /* 6078 */ { MAD_F(0x06c5247f) /* 0.423130508 */, 18 },
6487 /* 6079 */ { MAD_F(0x06c585d4) /* 0.423223333 */, 18 },
6488
6489 /* 6080 */ { MAD_F(0x06c5e72b) /* 0.423316162 */, 18 },
6490 /* 6081 */ { MAD_F(0x06c64883) /* 0.423408997 */, 18 },
6491 /* 6082 */ { MAD_F(0x06c6a9dd) /* 0.423501838 */, 18 },
6492 /* 6083 */ { MAD_F(0x06c70b38) /* 0.423594683 */, 18 },
6493 /* 6084 */ { MAD_F(0x06c76c94) /* 0.423687533 */, 18 },
6494 /* 6085 */ { MAD_F(0x06c7cdf2) /* 0.423780389 */, 18 },
6495 /* 6086 */ { MAD_F(0x06c82f51) /* 0.423873249 */, 18 },
6496 /* 6087 */ { MAD_F(0x06c890b1) /* 0.423966115 */, 18 },
6497 /* 6088 */ { MAD_F(0x06c8f213) /* 0.424058985 */, 18 },
6498 /* 6089 */ { MAD_F(0x06c95376) /* 0.424151861 */, 18 },
6499 /* 6090 */ { MAD_F(0x06c9b4da) /* 0.424244742 */, 18 },
6500 /* 6091 */ { MAD_F(0x06ca1640) /* 0.424337628 */, 18 },
6501 /* 6092 */ { MAD_F(0x06ca77a8) /* 0.424430519 */, 18 },
6502 /* 6093 */ { MAD_F(0x06cad910) /* 0.424523415 */, 18 },
6503 /* 6094 */ { MAD_F(0x06cb3a7a) /* 0.424616316 */, 18 },
6504 /* 6095 */ { MAD_F(0x06cb9be5) /* 0.424709222 */, 18 },
6505
6506 /* 6096 */ { MAD_F(0x06cbfd52) /* 0.424802133 */, 18 },
6507 /* 6097 */ { MAD_F(0x06cc5ec0) /* 0.424895050 */, 18 },
6508 /* 6098 */ { MAD_F(0x06ccc030) /* 0.424987971 */, 18 },
6509 /* 6099 */ { MAD_F(0x06cd21a0) /* 0.425080898 */, 18 },
6510 /* 6100 */ { MAD_F(0x06cd8313) /* 0.425173829 */, 18 },
6511 /* 6101 */ { MAD_F(0x06cde486) /* 0.425266766 */, 18 },
6512 /* 6102 */ { MAD_F(0x06ce45fb) /* 0.425359708 */, 18 },
6513 /* 6103 */ { MAD_F(0x06cea771) /* 0.425452655 */, 18 },
6514 /* 6104 */ { MAD_F(0x06cf08e9) /* 0.425545607 */, 18 },
6515 /* 6105 */ { MAD_F(0x06cf6a62) /* 0.425638564 */, 18 },
6516 /* 6106 */ { MAD_F(0x06cfcbdc) /* 0.425731526 */, 18 },
6517 /* 6107 */ { MAD_F(0x06d02d58) /* 0.425824493 */, 18 },
6518 /* 6108 */ { MAD_F(0x06d08ed5) /* 0.425917465 */, 18 },
6519 /* 6109 */ { MAD_F(0x06d0f053) /* 0.426010443 */, 18 },
6520 /* 6110 */ { MAD_F(0x06d151d3) /* 0.426103425 */, 18 },
6521 /* 6111 */ { MAD_F(0x06d1b354) /* 0.426196412 */, 18 },
6522
6523 /* 6112 */ { MAD_F(0x06d214d7) /* 0.426289405 */, 18 },
6524 /* 6113 */ { MAD_F(0x06d2765a) /* 0.426382403 */, 18 },
6525 /* 6114 */ { MAD_F(0x06d2d7e0) /* 0.426475405 */, 18 },
6526 /* 6115 */ { MAD_F(0x06d33966) /* 0.426568413 */, 18 },
6527 /* 6116 */ { MAD_F(0x06d39aee) /* 0.426661426 */, 18 },
6528 /* 6117 */ { MAD_F(0x06d3fc77) /* 0.426754444 */, 18 },
6529 /* 6118 */ { MAD_F(0x06d45e02) /* 0.426847467 */, 18 },
6530 /* 6119 */ { MAD_F(0x06d4bf8e) /* 0.426940495 */, 18 },
6531 /* 6120 */ { MAD_F(0x06d5211c) /* 0.427033528 */, 18 },
6532 /* 6121 */ { MAD_F(0x06d582aa) /* 0.427126566 */, 18 },
6533 /* 6122 */ { MAD_F(0x06d5e43a) /* 0.427219609 */, 18 },
6534 /* 6123 */ { MAD_F(0x06d645cc) /* 0.427312657 */, 18 },
6535 /* 6124 */ { MAD_F(0x06d6a75f) /* 0.427405711 */, 18 },
6536 /* 6125 */ { MAD_F(0x06d708f3) /* 0.427498769 */, 18 },
6537 /* 6126 */ { MAD_F(0x06d76a88) /* 0.427591833 */, 18 },
6538 /* 6127 */ { MAD_F(0x06d7cc1f) /* 0.427684901 */, 18 },
6539
6540 /* 6128 */ { MAD_F(0x06d82db8) /* 0.427777975 */, 18 },
6541 /* 6129 */ { MAD_F(0x06d88f51) /* 0.427871054 */, 18 },
6542 /* 6130 */ { MAD_F(0x06d8f0ec) /* 0.427964137 */, 18 },
6543 /* 6131 */ { MAD_F(0x06d95288) /* 0.428057226 */, 18 },
6544 /* 6132 */ { MAD_F(0x06d9b426) /* 0.428150320 */, 18 },
6545 /* 6133 */ { MAD_F(0x06da15c5) /* 0.428243419 */, 18 },
6546 /* 6134 */ { MAD_F(0x06da7766) /* 0.428336523 */, 18 },
6547 /* 6135 */ { MAD_F(0x06dad907) /* 0.428429632 */, 18 },
6548 /* 6136 */ { MAD_F(0x06db3aaa) /* 0.428522746 */, 18 },
6549 /* 6137 */ { MAD_F(0x06db9c4f) /* 0.428615865 */, 18 },
6550 /* 6138 */ { MAD_F(0x06dbfdf5) /* 0.428708989 */, 18 },
6551 /* 6139 */ { MAD_F(0x06dc5f9c) /* 0.428802119 */, 18 },
6552 /* 6140 */ { MAD_F(0x06dcc145) /* 0.428895253 */, 18 },
6553 /* 6141 */ { MAD_F(0x06dd22ee) /* 0.428988392 */, 18 },
6554 /* 6142 */ { MAD_F(0x06dd849a) /* 0.429081537 */, 18 },
6555 /* 6143 */ { MAD_F(0x06dde646) /* 0.429174686 */, 18 },
6556
6557 /* 6144 */ { MAD_F(0x06de47f4) /* 0.429267841 */, 18 },
6558 /* 6145 */ { MAD_F(0x06dea9a4) /* 0.429361001 */, 18 },
6559 /* 6146 */ { MAD_F(0x06df0b54) /* 0.429454165 */, 18 },
6560 /* 6147 */ { MAD_F(0x06df6d06) /* 0.429547335 */, 18 },
6561 /* 6148 */ { MAD_F(0x06dfceba) /* 0.429640510 */, 18 },
6562 /* 6149 */ { MAD_F(0x06e0306f) /* 0.429733690 */, 18 },
6563 /* 6150 */ { MAD_F(0x06e09225) /* 0.429826874 */, 18 },
6564 /* 6151 */ { MAD_F(0x06e0f3dc) /* 0.429920064 */, 18 },
6565 /* 6152 */ { MAD_F(0x06e15595) /* 0.430013259 */, 18 },
6566 /* 6153 */ { MAD_F(0x06e1b74f) /* 0.430106459 */, 18 },
6567 /* 6154 */ { MAD_F(0x06e2190b) /* 0.430199664 */, 18 },
6568 /* 6155 */ { MAD_F(0x06e27ac8) /* 0.430292875 */, 18 },
6569 /* 6156 */ { MAD_F(0x06e2dc86) /* 0.430386090 */, 18 },
6570 /* 6157 */ { MAD_F(0x06e33e46) /* 0.430479310 */, 18 },
6571 /* 6158 */ { MAD_F(0x06e3a007) /* 0.430572535 */, 18 },
6572 /* 6159 */ { MAD_F(0x06e401c9) /* 0.430665765 */, 18 },
6573
6574 /* 6160 */ { MAD_F(0x06e4638d) /* 0.430759001 */, 18 },
6575 /* 6161 */ { MAD_F(0x06e4c552) /* 0.430852241 */, 18 },
6576 /* 6162 */ { MAD_F(0x06e52718) /* 0.430945487 */, 18 },
6577 /* 6163 */ { MAD_F(0x06e588e0) /* 0.431038737 */, 18 },
6578 /* 6164 */ { MAD_F(0x06e5eaa9) /* 0.431131993 */, 18 },
6579 /* 6165 */ { MAD_F(0x06e64c73) /* 0.431225253 */, 18 },
6580 /* 6166 */ { MAD_F(0x06e6ae3f) /* 0.431318519 */, 18 },
6581 /* 6167 */ { MAD_F(0x06e7100c) /* 0.431411790 */, 18 },
6582 /* 6168 */ { MAD_F(0x06e771db) /* 0.431505065 */, 18 },
6583 /* 6169 */ { MAD_F(0x06e7d3ab) /* 0.431598346 */, 18 },
6584 /* 6170 */ { MAD_F(0x06e8357c) /* 0.431691632 */, 18 },
6585 /* 6171 */ { MAD_F(0x06e8974e) /* 0.431784923 */, 18 },
6586 /* 6172 */ { MAD_F(0x06e8f922) /* 0.431878218 */, 18 },
6587 /* 6173 */ { MAD_F(0x06e95af8) /* 0.431971519 */, 18 },
6588 /* 6174 */ { MAD_F(0x06e9bcce) /* 0.432064825 */, 18 },
6589 /* 6175 */ { MAD_F(0x06ea1ea6) /* 0.432158136 */, 18 },
6590
6591 /* 6176 */ { MAD_F(0x06ea807f) /* 0.432251452 */, 18 },
6592 /* 6177 */ { MAD_F(0x06eae25a) /* 0.432344773 */, 18 },
6593 /* 6178 */ { MAD_F(0x06eb4436) /* 0.432438099 */, 18 },
6594 /* 6179 */ { MAD_F(0x06eba614) /* 0.432531431 */, 18 },
6595 /* 6180 */ { MAD_F(0x06ec07f2) /* 0.432624767 */, 18 },
6596 /* 6181 */ { MAD_F(0x06ec69d2) /* 0.432718108 */, 18 },
6597 /* 6182 */ { MAD_F(0x06eccbb4) /* 0.432811454 */, 18 },
6598 /* 6183 */ { MAD_F(0x06ed2d97) /* 0.432904805 */, 18 },
6599 /* 6184 */ { MAD_F(0x06ed8f7b) /* 0.432998162 */, 18 },
6600 /* 6185 */ { MAD_F(0x06edf160) /* 0.433091523 */, 18 },
6601 /* 6186 */ { MAD_F(0x06ee5347) /* 0.433184889 */, 18 },
6602 /* 6187 */ { MAD_F(0x06eeb52f) /* 0.433278261 */, 18 },
6603 /* 6188 */ { MAD_F(0x06ef1719) /* 0.433371637 */, 18 },
6604 /* 6189 */ { MAD_F(0x06ef7904) /* 0.433465019 */, 18 },
6605 /* 6190 */ { MAD_F(0x06efdaf0) /* 0.433558405 */, 18 },
6606 /* 6191 */ { MAD_F(0x06f03cde) /* 0.433651797 */, 18 },
6607
6608 /* 6192 */ { MAD_F(0x06f09ecc) /* 0.433745193 */, 18 },
6609 /* 6193 */ { MAD_F(0x06f100bd) /* 0.433838595 */, 18 },
6610 /* 6194 */ { MAD_F(0x06f162ae) /* 0.433932001 */, 18 },
6611 /* 6195 */ { MAD_F(0x06f1c4a1) /* 0.434025413 */, 18 },
6612 /* 6196 */ { MAD_F(0x06f22696) /* 0.434118830 */, 18 },
6613 /* 6197 */ { MAD_F(0x06f2888b) /* 0.434212251 */, 18 },
6614 /* 6198 */ { MAD_F(0x06f2ea82) /* 0.434305678 */, 18 },
6615 /* 6199 */ { MAD_F(0x06f34c7b) /* 0.434399110 */, 18 },
6616 /* 6200 */ { MAD_F(0x06f3ae75) /* 0.434492546 */, 18 },
6617 /* 6201 */ { MAD_F(0x06f41070) /* 0.434585988 */, 18 },
6618 /* 6202 */ { MAD_F(0x06f4726c) /* 0.434679435 */, 18 },
6619 /* 6203 */ { MAD_F(0x06f4d46a) /* 0.434772887 */, 18 },
6620 /* 6204 */ { MAD_F(0x06f53669) /* 0.434866344 */, 18 },
6621 /* 6205 */ { MAD_F(0x06f59869) /* 0.434959806 */, 18 },
6622 /* 6206 */ { MAD_F(0x06f5fa6b) /* 0.435053272 */, 18 },
6623 /* 6207 */ { MAD_F(0x06f65c6e) /* 0.435146744 */, 18 },
6624
6625 /* 6208 */ { MAD_F(0x06f6be73) /* 0.435240221 */, 18 },
6626 /* 6209 */ { MAD_F(0x06f72079) /* 0.435333703 */, 18 },
6627 /* 6210 */ { MAD_F(0x06f78280) /* 0.435427190 */, 18 },
6628 /* 6211 */ { MAD_F(0x06f7e489) /* 0.435520682 */, 18 },
6629 /* 6212 */ { MAD_F(0x06f84693) /* 0.435614179 */, 18 },
6630 /* 6213 */ { MAD_F(0x06f8a89e) /* 0.435707681 */, 18 },
6631 /* 6214 */ { MAD_F(0x06f90aaa) /* 0.435801188 */, 18 },
6632 /* 6215 */ { MAD_F(0x06f96cb8) /* 0.435894700 */, 18 },
6633 /* 6216 */ { MAD_F(0x06f9cec8) /* 0.435988217 */, 18 },
6634 /* 6217 */ { MAD_F(0x06fa30d8) /* 0.436081739 */, 18 },
6635 /* 6218 */ { MAD_F(0x06fa92ea) /* 0.436175266 */, 18 },
6636 /* 6219 */ { MAD_F(0x06faf4fe) /* 0.436268799 */, 18 },
6637 /* 6220 */ { MAD_F(0x06fb5712) /* 0.436362336 */, 18 },
6638 /* 6221 */ { MAD_F(0x06fbb928) /* 0.436455878 */, 18 },
6639 /* 6222 */ { MAD_F(0x06fc1b40) /* 0.436549425 */, 18 },
6640 /* 6223 */ { MAD_F(0x06fc7d58) /* 0.436642977 */, 18 },
6641
6642 /* 6224 */ { MAD_F(0x06fcdf72) /* 0.436736534 */, 18 },
6643 /* 6225 */ { MAD_F(0x06fd418e) /* 0.436830096 */, 18 },
6644 /* 6226 */ { MAD_F(0x06fda3ab) /* 0.436923664 */, 18 },
6645 /* 6227 */ { MAD_F(0x06fe05c9) /* 0.437017236 */, 18 },
6646 /* 6228 */ { MAD_F(0x06fe67e8) /* 0.437110813 */, 18 },
6647 /* 6229 */ { MAD_F(0x06feca09) /* 0.437204395 */, 18 },
6648 /* 6230 */ { MAD_F(0x06ff2c2b) /* 0.437297982 */, 18 },
6649 /* 6231 */ { MAD_F(0x06ff8e4f) /* 0.437391575 */, 18 },
6650 /* 6232 */ { MAD_F(0x06fff073) /* 0.437485172 */, 18 },
6651 /* 6233 */ { MAD_F(0x0700529a) /* 0.437578774 */, 18 },
6652 /* 6234 */ { MAD_F(0x0700b4c1) /* 0.437672381 */, 18 },
6653 /* 6235 */ { MAD_F(0x070116ea) /* 0.437765994 */, 18 },
6654 /* 6236 */ { MAD_F(0x07017914) /* 0.437859611 */, 18 },
6655 /* 6237 */ { MAD_F(0x0701db40) /* 0.437953233 */, 18 },
6656 /* 6238 */ { MAD_F(0x07023d6c) /* 0.438046860 */, 18 },
6657 /* 6239 */ { MAD_F(0x07029f9b) /* 0.438140493 */, 18 },
6658
6659 /* 6240 */ { MAD_F(0x070301ca) /* 0.438234130 */, 18 },
6660 /* 6241 */ { MAD_F(0x070363fb) /* 0.438327772 */, 18 },
6661 /* 6242 */ { MAD_F(0x0703c62d) /* 0.438421419 */, 18 },
6662 /* 6243 */ { MAD_F(0x07042861) /* 0.438515072 */, 18 },
6663 /* 6244 */ { MAD_F(0x07048a96) /* 0.438608729 */, 18 },
6664 /* 6245 */ { MAD_F(0x0704eccc) /* 0.438702391 */, 18 },
6665 /* 6246 */ { MAD_F(0x07054f04) /* 0.438796059 */, 18 },
6666 /* 6247 */ { MAD_F(0x0705b13d) /* 0.438889731 */, 18 },
6667 /* 6248 */ { MAD_F(0x07061377) /* 0.438983408 */, 18 },
6668 /* 6249 */ { MAD_F(0x070675b3) /* 0.439077090 */, 18 },
6669 /* 6250 */ { MAD_F(0x0706d7f0) /* 0.439170778 */, 18 },
6670 /* 6251 */ { MAD_F(0x07073a2e) /* 0.439264470 */, 18 },
6671 /* 6252 */ { MAD_F(0x07079c6e) /* 0.439358167 */, 18 },
6672 /* 6253 */ { MAD_F(0x0707feaf) /* 0.439451869 */, 18 },
6673 /* 6254 */ { MAD_F(0x070860f1) /* 0.439545577 */, 18 },
6674 /* 6255 */ { MAD_F(0x0708c335) /* 0.439639289 */, 18 },
6675
6676 /* 6256 */ { MAD_F(0x0709257a) /* 0.439733006 */, 18 },
6677 /* 6257 */ { MAD_F(0x070987c0) /* 0.439826728 */, 18 },
6678 /* 6258 */ { MAD_F(0x0709ea08) /* 0.439920456 */, 18 },
6679 /* 6259 */ { MAD_F(0x070a4c51) /* 0.440014188 */, 18 },
6680 /* 6260 */ { MAD_F(0x070aae9b) /* 0.440107925 */, 18 },
6681 /* 6261 */ { MAD_F(0x070b10e7) /* 0.440201667 */, 18 },
6682 /* 6262 */ { MAD_F(0x070b7334) /* 0.440295414 */, 18 },
6683 /* 6263 */ { MAD_F(0x070bd583) /* 0.440389167 */, 18 },
6684 /* 6264 */ { MAD_F(0x070c37d2) /* 0.440482924 */, 18 },
6685 /* 6265 */ { MAD_F(0x070c9a23) /* 0.440576686 */, 18 },
6686 /* 6266 */ { MAD_F(0x070cfc76) /* 0.440670453 */, 18 },
6687 /* 6267 */ { MAD_F(0x070d5eca) /* 0.440764225 */, 18 },
6688 /* 6268 */ { MAD_F(0x070dc11f) /* 0.440858002 */, 18 },
6689 /* 6269 */ { MAD_F(0x070e2375) /* 0.440951784 */, 18 },
6690 /* 6270 */ { MAD_F(0x070e85cd) /* 0.441045572 */, 18 },
6691 /* 6271 */ { MAD_F(0x070ee826) /* 0.441139364 */, 18 },
6692
6693 /* 6272 */ { MAD_F(0x070f4a80) /* 0.441233161 */, 18 },
6694 /* 6273 */ { MAD_F(0x070facdc) /* 0.441326963 */, 18 },
6695 /* 6274 */ { MAD_F(0x07100f39) /* 0.441420770 */, 18 },
6696 /* 6275 */ { MAD_F(0x07107198) /* 0.441514582 */, 18 },
6697 /* 6276 */ { MAD_F(0x0710d3f8) /* 0.441608399 */, 18 },
6698 /* 6277 */ { MAD_F(0x07113659) /* 0.441702221 */, 18 },
6699 /* 6278 */ { MAD_F(0x071198bb) /* 0.441796048 */, 18 },
6700 /* 6279 */ { MAD_F(0x0711fb1f) /* 0.441889880 */, 18 },
6701 /* 6280 */ { MAD_F(0x07125d84) /* 0.441983717 */, 18 },
6702 /* 6281 */ { MAD_F(0x0712bfeb) /* 0.442077559 */, 18 },
6703 /* 6282 */ { MAD_F(0x07132253) /* 0.442171406 */, 18 },
6704 /* 6283 */ { MAD_F(0x071384bc) /* 0.442265257 */, 18 },
6705 /* 6284 */ { MAD_F(0x0713e726) /* 0.442359114 */, 18 },
6706 /* 6285 */ { MAD_F(0x07144992) /* 0.442452976 */, 18 },
6707 /* 6286 */ { MAD_F(0x0714abff) /* 0.442546843 */, 18 },
6708 /* 6287 */ { MAD_F(0x07150e6e) /* 0.442640715 */, 18 },
6709
6710 /* 6288 */ { MAD_F(0x071570de) /* 0.442734592 */, 18 },
6711 /* 6289 */ { MAD_F(0x0715d34f) /* 0.442828473 */, 18 },
6712 /* 6290 */ { MAD_F(0x071635c1) /* 0.442922360 */, 18 },
6713 /* 6291 */ { MAD_F(0x07169835) /* 0.443016252 */, 18 },
6714 /* 6292 */ { MAD_F(0x0716faaa) /* 0.443110148 */, 18 },
6715 /* 6293 */ { MAD_F(0x07175d21) /* 0.443204050 */, 18 },
6716 /* 6294 */ { MAD_F(0x0717bf99) /* 0.443297957 */, 18 },
6717 /* 6295 */ { MAD_F(0x07182212) /* 0.443391868 */, 18 },
6718 /* 6296 */ { MAD_F(0x0718848d) /* 0.443485785 */, 18 },
6719 /* 6297 */ { MAD_F(0x0718e709) /* 0.443579706 */, 18 },
6720 /* 6298 */ { MAD_F(0x07194986) /* 0.443673633 */, 18 },
6721 /* 6299 */ { MAD_F(0x0719ac04) /* 0.443767564 */, 18 },
6722 /* 6300 */ { MAD_F(0x071a0e84) /* 0.443861501 */, 18 },
6723 /* 6301 */ { MAD_F(0x071a7105) /* 0.443955442 */, 18 },
6724 /* 6302 */ { MAD_F(0x071ad388) /* 0.444049389 */, 18 },
6725 /* 6303 */ { MAD_F(0x071b360c) /* 0.444143340 */, 18 },
6726
6727 /* 6304 */ { MAD_F(0x071b9891) /* 0.444237296 */, 18 },
6728 /* 6305 */ { MAD_F(0x071bfb18) /* 0.444331258 */, 18 },
6729 /* 6306 */ { MAD_F(0x071c5d9f) /* 0.444425224 */, 18 },
6730 /* 6307 */ { MAD_F(0x071cc029) /* 0.444519195 */, 18 },
6731 /* 6308 */ { MAD_F(0x071d22b3) /* 0.444613171 */, 18 },
6732 /* 6309 */ { MAD_F(0x071d853f) /* 0.444707153 */, 18 },
6733 /* 6310 */ { MAD_F(0x071de7cc) /* 0.444801139 */, 18 },
6734 /* 6311 */ { MAD_F(0x071e4a5b) /* 0.444895130 */, 18 },
6735 /* 6312 */ { MAD_F(0x071eaceb) /* 0.444989126 */, 18 },
6736 /* 6313 */ { MAD_F(0x071f0f7c) /* 0.445083127 */, 18 },
6737 /* 6314 */ { MAD_F(0x071f720e) /* 0.445177133 */, 18 },
6738 /* 6315 */ { MAD_F(0x071fd4a2) /* 0.445271144 */, 18 },
6739 /* 6316 */ { MAD_F(0x07203737) /* 0.445365160 */, 18 },
6740 /* 6317 */ { MAD_F(0x072099ce) /* 0.445459181 */, 18 },
6741 /* 6318 */ { MAD_F(0x0720fc66) /* 0.445553206 */, 18 },
6742 /* 6319 */ { MAD_F(0x07215eff) /* 0.445647237 */, 18 },
6743
6744 /* 6320 */ { MAD_F(0x0721c19a) /* 0.445741273 */, 18 },
6745 /* 6321 */ { MAD_F(0x07222436) /* 0.445835314 */, 18 },
6746 /* 6322 */ { MAD_F(0x072286d3) /* 0.445929359 */, 18 },
6747 /* 6323 */ { MAD_F(0x0722e971) /* 0.446023410 */, 18 },
6748 /* 6324 */ { MAD_F(0x07234c11) /* 0.446117466 */, 18 },
6749 /* 6325 */ { MAD_F(0x0723aeb2) /* 0.446211526 */, 18 },
6750 /* 6326 */ { MAD_F(0x07241155) /* 0.446305592 */, 18 },
6751 /* 6327 */ { MAD_F(0x072473f9) /* 0.446399662 */, 18 },
6752 /* 6328 */ { MAD_F(0x0724d69e) /* 0.446493738 */, 18 },
6753 /* 6329 */ { MAD_F(0x07253944) /* 0.446587818 */, 18 },
6754 /* 6330 */ { MAD_F(0x07259bec) /* 0.446681903 */, 18 },
6755 /* 6331 */ { MAD_F(0x0725fe95) /* 0.446775994 */, 18 },
6756 /* 6332 */ { MAD_F(0x07266140) /* 0.446870089 */, 18 },
6757 /* 6333 */ { MAD_F(0x0726c3ec) /* 0.446964189 */, 18 },
6758 /* 6334 */ { MAD_F(0x07272699) /* 0.447058294 */, 18 },
6759 /* 6335 */ { MAD_F(0x07278947) /* 0.447152404 */, 18 },
6760
6761 /* 6336 */ { MAD_F(0x0727ebf7) /* 0.447246519 */, 18 },
6762 /* 6337 */ { MAD_F(0x07284ea8) /* 0.447340639 */, 18 },
6763 /* 6338 */ { MAD_F(0x0728b15b) /* 0.447434764 */, 18 },
6764 /* 6339 */ { MAD_F(0x0729140f) /* 0.447528894 */, 18 },
6765 /* 6340 */ { MAD_F(0x072976c4) /* 0.447623029 */, 18 },
6766 /* 6341 */ { MAD_F(0x0729d97a) /* 0.447717169 */, 18 },
6767 /* 6342 */ { MAD_F(0x072a3c32) /* 0.447811314 */, 18 },
6768 /* 6343 */ { MAD_F(0x072a9eeb) /* 0.447905463 */, 18 },
6769 /* 6344 */ { MAD_F(0x072b01a6) /* 0.447999618 */, 18 },
6770 /* 6345 */ { MAD_F(0x072b6461) /* 0.448093778 */, 18 },
6771 /* 6346 */ { MAD_F(0x072bc71e) /* 0.448187942 */, 18 },
6772 /* 6347 */ { MAD_F(0x072c29dd) /* 0.448282112 */, 18 },
6773 /* 6348 */ { MAD_F(0x072c8c9d) /* 0.448376286 */, 18 },
6774 /* 6349 */ { MAD_F(0x072cef5e) /* 0.448470466 */, 18 },
6775 /* 6350 */ { MAD_F(0x072d5220) /* 0.448564650 */, 18 },
6776 /* 6351 */ { MAD_F(0x072db4e4) /* 0.448658839 */, 18 },
6777
6778 /* 6352 */ { MAD_F(0x072e17a9) /* 0.448753033 */, 18 },
6779 /* 6353 */ { MAD_F(0x072e7a6f) /* 0.448847233 */, 18 },
6780 /* 6354 */ { MAD_F(0x072edd37) /* 0.448941437 */, 18 },
6781 /* 6355 */ { MAD_F(0x072f4000) /* 0.449035646 */, 18 },
6782 /* 6356 */ { MAD_F(0x072fa2ca) /* 0.449129860 */, 18 },
6783 /* 6357 */ { MAD_F(0x07300596) /* 0.449224079 */, 18 },
6784 /* 6358 */ { MAD_F(0x07306863) /* 0.449318303 */, 18 },
6785 /* 6359 */ { MAD_F(0x0730cb32) /* 0.449412531 */, 18 },
6786 /* 6360 */ { MAD_F(0x07312e01) /* 0.449506765 */, 18 },
6787 /* 6361 */ { MAD_F(0x073190d2) /* 0.449601004 */, 18 },
6788 /* 6362 */ { MAD_F(0x0731f3a5) /* 0.449695247 */, 18 },
6789 /* 6363 */ { MAD_F(0x07325678) /* 0.449789496 */, 18 },
6790 /* 6364 */ { MAD_F(0x0732b94d) /* 0.449883749 */, 18 },
6791 /* 6365 */ { MAD_F(0x07331c23) /* 0.449978008 */, 18 },
6792 /* 6366 */ { MAD_F(0x07337efb) /* 0.450072271 */, 18 },
6793 /* 6367 */ { MAD_F(0x0733e1d4) /* 0.450166540 */, 18 },
6794
6795 /* 6368 */ { MAD_F(0x073444ae) /* 0.450260813 */, 18 },
6796 /* 6369 */ { MAD_F(0x0734a78a) /* 0.450355091 */, 18 },
6797 /* 6370 */ { MAD_F(0x07350a67) /* 0.450449374 */, 18 },
6798 /* 6371 */ { MAD_F(0x07356d45) /* 0.450543662 */, 18 },
6799 /* 6372 */ { MAD_F(0x0735d025) /* 0.450637955 */, 18 },
6800 /* 6373 */ { MAD_F(0x07363306) /* 0.450732253 */, 18 },
6801 /* 6374 */ { MAD_F(0x073695e8) /* 0.450826556 */, 18 },
6802 /* 6375 */ { MAD_F(0x0736f8cb) /* 0.450920864 */, 18 },
6803 /* 6376 */ { MAD_F(0x07375bb0) /* 0.451015176 */, 18 },
6804 /* 6377 */ { MAD_F(0x0737be96) /* 0.451109494 */, 18 },
6805 /* 6378 */ { MAD_F(0x0738217e) /* 0.451203817 */, 18 },
6806 /* 6379 */ { MAD_F(0x07388467) /* 0.451298144 */, 18 },
6807 /* 6380 */ { MAD_F(0x0738e751) /* 0.451392477 */, 18 },
6808 /* 6381 */ { MAD_F(0x07394a3d) /* 0.451486814 */, 18 },
6809 /* 6382 */ { MAD_F(0x0739ad29) /* 0.451581156 */, 18 },
6810 /* 6383 */ { MAD_F(0x073a1017) /* 0.451675503 */, 18 },
6811
6812 /* 6384 */ { MAD_F(0x073a7307) /* 0.451769856 */, 18 },
6813 /* 6385 */ { MAD_F(0x073ad5f8) /* 0.451864213 */, 18 },
6814 /* 6386 */ { MAD_F(0x073b38ea) /* 0.451958575 */, 18 },
6815 /* 6387 */ { MAD_F(0x073b9bdd) /* 0.452052942 */, 18 },
6816 /* 6388 */ { MAD_F(0x073bfed2) /* 0.452147313 */, 18 },
6817 /* 6389 */ { MAD_F(0x073c61c8) /* 0.452241690 */, 18 },
6818 /* 6390 */ { MAD_F(0x073cc4bf) /* 0.452336072 */, 18 },
6819 /* 6391 */ { MAD_F(0x073d27b8) /* 0.452430458 */, 18 },
6820 /* 6392 */ { MAD_F(0x073d8ab2) /* 0.452524850 */, 18 },
6821 /* 6393 */ { MAD_F(0x073dedae) /* 0.452619246 */, 18 },
6822 /* 6394 */ { MAD_F(0x073e50aa) /* 0.452713648 */, 18 },
6823 /* 6395 */ { MAD_F(0x073eb3a8) /* 0.452808054 */, 18 },
6824 /* 6396 */ { MAD_F(0x073f16a8) /* 0.452902465 */, 18 },
6825 /* 6397 */ { MAD_F(0x073f79a8) /* 0.452996882 */, 18 },
6826 /* 6398 */ { MAD_F(0x073fdcaa) /* 0.453091303 */, 18 },
6827 /* 6399 */ { MAD_F(0x07403fad) /* 0.453185729 */, 18 },
6828
6829 /* 6400 */ { MAD_F(0x0740a2b2) /* 0.453280160 */, 18 },
6830 /* 6401 */ { MAD_F(0x074105b8) /* 0.453374595 */, 18 },
6831 /* 6402 */ { MAD_F(0x074168bf) /* 0.453469036 */, 18 },
6832 /* 6403 */ { MAD_F(0x0741cbc8) /* 0.453563482 */, 18 },
6833 /* 6404 */ { MAD_F(0x07422ed2) /* 0.453657932 */, 18 },
6834 /* 6405 */ { MAD_F(0x074291dd) /* 0.453752388 */, 18 },
6835 /* 6406 */ { MAD_F(0x0742f4e9) /* 0.453846848 */, 18 },
6836 /* 6407 */ { MAD_F(0x074357f7) /* 0.453941314 */, 18 },
6837 /* 6408 */ { MAD_F(0x0743bb06) /* 0.454035784 */, 18 },
6838 /* 6409 */ { MAD_F(0x07441e17) /* 0.454130259 */, 18 },
6839 /* 6410 */ { MAD_F(0x07448129) /* 0.454224739 */, 18 },
6840 /* 6411 */ { MAD_F(0x0744e43c) /* 0.454319224 */, 18 },
6841 /* 6412 */ { MAD_F(0x07454750) /* 0.454413714 */, 18 },
6842 /* 6413 */ { MAD_F(0x0745aa66) /* 0.454508209 */, 18 },
6843 /* 6414 */ { MAD_F(0x07460d7d) /* 0.454602708 */, 18 },
6844 /* 6415 */ { MAD_F(0x07467095) /* 0.454697213 */, 18 },
6845
6846 /* 6416 */ { MAD_F(0x0746d3af) /* 0.454791723 */, 18 },
6847 /* 6417 */ { MAD_F(0x074736ca) /* 0.454886237 */, 18 },
6848 /* 6418 */ { MAD_F(0x074799e7) /* 0.454980756 */, 18 },
6849 /* 6419 */ { MAD_F(0x0747fd04) /* 0.455075281 */, 18 },
6850 /* 6420 */ { MAD_F(0x07486023) /* 0.455169810 */, 18 },
6851 /* 6421 */ { MAD_F(0x0748c344) /* 0.455264344 */, 18 },
6852 /* 6422 */ { MAD_F(0x07492665) /* 0.455358883 */, 18 },
6853 /* 6423 */ { MAD_F(0x07498988) /* 0.455453427 */, 18 },
6854 /* 6424 */ { MAD_F(0x0749ecac) /* 0.455547976 */, 18 },
6855 /* 6425 */ { MAD_F(0x074a4fd2) /* 0.455642529 */, 18 },
6856 /* 6426 */ { MAD_F(0x074ab2f9) /* 0.455737088 */, 18 },
6857 /* 6427 */ { MAD_F(0x074b1621) /* 0.455831652 */, 18 },
6858 /* 6428 */ { MAD_F(0x074b794b) /* 0.455926220 */, 18 },
6859 /* 6429 */ { MAD_F(0x074bdc75) /* 0.456020793 */, 18 },
6860 /* 6430 */ { MAD_F(0x074c3fa1) /* 0.456115372 */, 18 },
6861 /* 6431 */ { MAD_F(0x074ca2cf) /* 0.456209955 */, 18 },
6862
6863 /* 6432 */ { MAD_F(0x074d05fe) /* 0.456304543 */, 18 },
6864 /* 6433 */ { MAD_F(0x074d692e) /* 0.456399136 */, 18 },
6865 /* 6434 */ { MAD_F(0x074dcc5f) /* 0.456493733 */, 18 },
6866 /* 6435 */ { MAD_F(0x074e2f92) /* 0.456588336 */, 18 },
6867 /* 6436 */ { MAD_F(0x074e92c6) /* 0.456682944 */, 18 },
6868 /* 6437 */ { MAD_F(0x074ef5fb) /* 0.456777556 */, 18 },
6869 /* 6438 */ { MAD_F(0x074f5932) /* 0.456872174 */, 18 },
6870 /* 6439 */ { MAD_F(0x074fbc6a) /* 0.456966796 */, 18 },
6871 /* 6440 */ { MAD_F(0x07501fa3) /* 0.457061423 */, 18 },
6872 /* 6441 */ { MAD_F(0x075082de) /* 0.457156056 */, 18 },
6873 /* 6442 */ { MAD_F(0x0750e61a) /* 0.457250693 */, 18 },
6874 /* 6443 */ { MAD_F(0x07514957) /* 0.457345335 */, 18 },
6875 /* 6444 */ { MAD_F(0x0751ac96) /* 0.457439981 */, 18 },
6876 /* 6445 */ { MAD_F(0x07520fd6) /* 0.457534633 */, 18 },
6877 /* 6446 */ { MAD_F(0x07527317) /* 0.457629290 */, 18 },
6878 /* 6447 */ { MAD_F(0x0752d659) /* 0.457723951 */, 18 },
6879
6880 /* 6448 */ { MAD_F(0x0753399d) /* 0.457818618 */, 18 },
6881 /* 6449 */ { MAD_F(0x07539ce2) /* 0.457913289 */, 18 },
6882 /* 6450 */ { MAD_F(0x07540029) /* 0.458007965 */, 18 },
6883 /* 6451 */ { MAD_F(0x07546371) /* 0.458102646 */, 18 },
6884 /* 6452 */ { MAD_F(0x0754c6ba) /* 0.458197332 */, 18 },
6885 /* 6453 */ { MAD_F(0x07552a04) /* 0.458292023 */, 18 },
6886 /* 6454 */ { MAD_F(0x07558d50) /* 0.458386719 */, 18 },
6887 /* 6455 */ { MAD_F(0x0755f09d) /* 0.458481420 */, 18 },
6888 /* 6456 */ { MAD_F(0x075653eb) /* 0.458576125 */, 18 },
6889 /* 6457 */ { MAD_F(0x0756b73b) /* 0.458670836 */, 18 },
6890 /* 6458 */ { MAD_F(0x07571a8c) /* 0.458765551 */, 18 },
6891 /* 6459 */ { MAD_F(0x07577dde) /* 0.458860271 */, 18 },
6892 /* 6460 */ { MAD_F(0x0757e131) /* 0.458954996 */, 18 },
6893 /* 6461 */ { MAD_F(0x07584486) /* 0.459049726 */, 18 },
6894 /* 6462 */ { MAD_F(0x0758a7dd) /* 0.459144461 */, 18 },
6895 /* 6463 */ { MAD_F(0x07590b34) /* 0.459239201 */, 18 },
6896
6897 /* 6464 */ { MAD_F(0x07596e8d) /* 0.459333946 */, 18 },
6898 /* 6465 */ { MAD_F(0x0759d1e7) /* 0.459428695 */, 18 },
6899 /* 6466 */ { MAD_F(0x075a3542) /* 0.459523450 */, 18 },
6900 /* 6467 */ { MAD_F(0x075a989f) /* 0.459618209 */, 18 },
6901 /* 6468 */ { MAD_F(0x075afbfd) /* 0.459712973 */, 18 },
6902 /* 6469 */ { MAD_F(0x075b5f5d) /* 0.459807742 */, 18 },
6903 /* 6470 */ { MAD_F(0x075bc2bd) /* 0.459902516 */, 18 },
6904 /* 6471 */ { MAD_F(0x075c261f) /* 0.459997295 */, 18 },
6905 /* 6472 */ { MAD_F(0x075c8983) /* 0.460092079 */, 18 },
6906 /* 6473 */ { MAD_F(0x075cece7) /* 0.460186867 */, 18 },
6907 /* 6474 */ { MAD_F(0x075d504d) /* 0.460281661 */, 18 },
6908 /* 6475 */ { MAD_F(0x075db3b5) /* 0.460376459 */, 18 },
6909 /* 6476 */ { MAD_F(0x075e171d) /* 0.460471262 */, 18 },
6910 /* 6477 */ { MAD_F(0x075e7a87) /* 0.460566071 */, 18 },
6911 /* 6478 */ { MAD_F(0x075eddf2) /* 0.460660884 */, 18 },
6912 /* 6479 */ { MAD_F(0x075f415f) /* 0.460755701 */, 18 },
6913
6914 /* 6480 */ { MAD_F(0x075fa4cc) /* 0.460850524 */, 18 },
6915 /* 6481 */ { MAD_F(0x0760083b) /* 0.460945352 */, 18 },
6916 /* 6482 */ { MAD_F(0x07606bac) /* 0.461040184 */, 18 },
6917 /* 6483 */ { MAD_F(0x0760cf1e) /* 0.461135022 */, 18 },
6918 /* 6484 */ { MAD_F(0x07613291) /* 0.461229864 */, 18 },
6919 /* 6485 */ { MAD_F(0x07619605) /* 0.461324711 */, 18 },
6920 /* 6486 */ { MAD_F(0x0761f97b) /* 0.461419563 */, 18 },
6921 /* 6487 */ { MAD_F(0x07625cf2) /* 0.461514420 */, 18 },
6922 /* 6488 */ { MAD_F(0x0762c06a) /* 0.461609282 */, 18 },
6923 /* 6489 */ { MAD_F(0x076323e3) /* 0.461704149 */, 18 },
6924 /* 6490 */ { MAD_F(0x0763875e) /* 0.461799020 */, 18 },
6925 /* 6491 */ { MAD_F(0x0763eadb) /* 0.461893897 */, 18 },
6926 /* 6492 */ { MAD_F(0x07644e58) /* 0.461988778 */, 18 },
6927 /* 6493 */ { MAD_F(0x0764b1d7) /* 0.462083664 */, 18 },
6928 /* 6494 */ { MAD_F(0x07651557) /* 0.462178555 */, 18 },
6929 /* 6495 */ { MAD_F(0x076578d8) /* 0.462273451 */, 18 },
6930
6931 /* 6496 */ { MAD_F(0x0765dc5b) /* 0.462368352 */, 18 },
6932 /* 6497 */ { MAD_F(0x07663fdf) /* 0.462463257 */, 18 },
6933 /* 6498 */ { MAD_F(0x0766a364) /* 0.462558168 */, 18 },
6934 /* 6499 */ { MAD_F(0x076706eb) /* 0.462653083 */, 18 },
6935 /* 6500 */ { MAD_F(0x07676a73) /* 0.462748003 */, 18 },
6936 /* 6501 */ { MAD_F(0x0767cdfc) /* 0.462842928 */, 18 },
6937 /* 6502 */ { MAD_F(0x07683187) /* 0.462937858 */, 18 },
6938 /* 6503 */ { MAD_F(0x07689513) /* 0.463032793 */, 18 },
6939 /* 6504 */ { MAD_F(0x0768f8a0) /* 0.463127733 */, 18 },
6940 /* 6505 */ { MAD_F(0x07695c2e) /* 0.463222678 */, 18 },
6941 /* 6506 */ { MAD_F(0x0769bfbe) /* 0.463317627 */, 18 },
6942 /* 6507 */ { MAD_F(0x076a234f) /* 0.463412581 */, 18 },
6943 /* 6508 */ { MAD_F(0x076a86e2) /* 0.463507540 */, 18 },
6944 /* 6509 */ { MAD_F(0x076aea75) /* 0.463602504 */, 18 },
6945 /* 6510 */ { MAD_F(0x076b4e0a) /* 0.463697473 */, 18 },
6946 /* 6511 */ { MAD_F(0x076bb1a1) /* 0.463792447 */, 18 },
6947
6948 /* 6512 */ { MAD_F(0x076c1538) /* 0.463887426 */, 18 },
6949 /* 6513 */ { MAD_F(0x076c78d1) /* 0.463982409 */, 18 },
6950 /* 6514 */ { MAD_F(0x076cdc6c) /* 0.464077398 */, 18 },
6951 /* 6515 */ { MAD_F(0x076d4007) /* 0.464172391 */, 18 },
6952 /* 6516 */ { MAD_F(0x076da3a4) /* 0.464267389 */, 18 },
6953 /* 6517 */ { MAD_F(0x076e0742) /* 0.464362392 */, 18 },
6954 /* 6518 */ { MAD_F(0x076e6ae2) /* 0.464457399 */, 18 },
6955 /* 6519 */ { MAD_F(0x076ece82) /* 0.464552412 */, 18 },
6956 /* 6520 */ { MAD_F(0x076f3224) /* 0.464647430 */, 18 },
6957 /* 6521 */ { MAD_F(0x076f95c8) /* 0.464742452 */, 18 },
6958 /* 6522 */ { MAD_F(0x076ff96c) /* 0.464837479 */, 18 },
6959 /* 6523 */ { MAD_F(0x07705d12) /* 0.464932511 */, 18 },
6960 /* 6524 */ { MAD_F(0x0770c0ba) /* 0.465027548 */, 18 },
6961 /* 6525 */ { MAD_F(0x07712462) /* 0.465122590 */, 18 },
6962 /* 6526 */ { MAD_F(0x0771880c) /* 0.465217637 */, 18 },
6963 /* 6527 */ { MAD_F(0x0771ebb7) /* 0.465312688 */, 18 },
6964
6965 /* 6528 */ { MAD_F(0x07724f64) /* 0.465407744 */, 18 },
6966 /* 6529 */ { MAD_F(0x0772b312) /* 0.465502806 */, 18 },
6967 /* 6530 */ { MAD_F(0x077316c1) /* 0.465597872 */, 18 },
6968 /* 6531 */ { MAD_F(0x07737a71) /* 0.465692943 */, 18 },
6969 /* 6532 */ { MAD_F(0x0773de23) /* 0.465788018 */, 18 },
6970 /* 6533 */ { MAD_F(0x077441d6) /* 0.465883099 */, 18 },
6971 /* 6534 */ { MAD_F(0x0774a58a) /* 0.465978184 */, 18 },
6972 /* 6535 */ { MAD_F(0x07750940) /* 0.466073275 */, 18 },
6973 /* 6536 */ { MAD_F(0x07756cf7) /* 0.466168370 */, 18 },
6974 /* 6537 */ { MAD_F(0x0775d0af) /* 0.466263470 */, 18 },
6975 /* 6538 */ { MAD_F(0x07763468) /* 0.466358575 */, 18 },
6976 /* 6539 */ { MAD_F(0x07769823) /* 0.466453684 */, 18 },
6977 /* 6540 */ { MAD_F(0x0776fbdf) /* 0.466548799 */, 18 },
6978 /* 6541 */ { MAD_F(0x07775f9d) /* 0.466643918 */, 18 },
6979 /* 6542 */ { MAD_F(0x0777c35c) /* 0.466739043 */, 18 },
6980 /* 6543 */ { MAD_F(0x0778271c) /* 0.466834172 */, 18 },
6981
6982 /* 6544 */ { MAD_F(0x07788add) /* 0.466929306 */, 18 },
6983 /* 6545 */ { MAD_F(0x0778ee9f) /* 0.467024445 */, 18 },
6984 /* 6546 */ { MAD_F(0x07795263) /* 0.467119588 */, 18 },
6985 /* 6547 */ { MAD_F(0x0779b629) /* 0.467214737 */, 18 },
6986 /* 6548 */ { MAD_F(0x077a19ef) /* 0.467309890 */, 18 },
6987 /* 6549 */ { MAD_F(0x077a7db7) /* 0.467405048 */, 18 },
6988 /* 6550 */ { MAD_F(0x077ae180) /* 0.467500211 */, 18 },
6989 /* 6551 */ { MAD_F(0x077b454b) /* 0.467595379 */, 18 },
6990 /* 6552 */ { MAD_F(0x077ba916) /* 0.467690552 */, 18 },
6991 /* 6553 */ { MAD_F(0x077c0ce3) /* 0.467785729 */, 18 },
6992 /* 6554 */ { MAD_F(0x077c70b2) /* 0.467880912 */, 18 },
6993 /* 6555 */ { MAD_F(0x077cd481) /* 0.467976099 */, 18 },
6994 /* 6556 */ { MAD_F(0x077d3852) /* 0.468071291 */, 18 },
6995 /* 6557 */ { MAD_F(0x077d9c24) /* 0.468166488 */, 18 },
6996 /* 6558 */ { MAD_F(0x077dfff8) /* 0.468261690 */, 18 },
6997 /* 6559 */ { MAD_F(0x077e63cd) /* 0.468356896 */, 18 },
6998
6999 /* 6560 */ { MAD_F(0x077ec7a3) /* 0.468452108 */, 18 },
7000 /* 6561 */ { MAD_F(0x077f2b7a) /* 0.468547324 */, 18 },
7001 /* 6562 */ { MAD_F(0x077f8f53) /* 0.468642545 */, 18 },
7002 /* 6563 */ { MAD_F(0x077ff32d) /* 0.468737771 */, 18 },
7003 /* 6564 */ { MAD_F(0x07805708) /* 0.468833002 */, 18 },
7004 /* 6565 */ { MAD_F(0x0780bae5) /* 0.468928237 */, 18 },
7005 /* 6566 */ { MAD_F(0x07811ec3) /* 0.469023478 */, 18 },
7006 /* 6567 */ { MAD_F(0x078182a2) /* 0.469118723 */, 18 },
7007 /* 6568 */ { MAD_F(0x0781e683) /* 0.469213973 */, 18 },
7008 /* 6569 */ { MAD_F(0x07824a64) /* 0.469309228 */, 18 },
7009 /* 6570 */ { MAD_F(0x0782ae47) /* 0.469404488 */, 18 },
7010 /* 6571 */ { MAD_F(0x0783122c) /* 0.469499752 */, 18 },
7011 /* 6572 */ { MAD_F(0x07837612) /* 0.469595022 */, 18 },
7012 /* 6573 */ { MAD_F(0x0783d9f9) /* 0.469690296 */, 18 },
7013 /* 6574 */ { MAD_F(0x07843de1) /* 0.469785575 */, 18 },
7014 /* 6575 */ { MAD_F(0x0784a1ca) /* 0.469880859 */, 18 },
7015
7016 /* 6576 */ { MAD_F(0x078505b5) /* 0.469976148 */, 18 },
7017 /* 6577 */ { MAD_F(0x078569a2) /* 0.470071442 */, 18 },
7018 /* 6578 */ { MAD_F(0x0785cd8f) /* 0.470166740 */, 18 },
7019 /* 6579 */ { MAD_F(0x0786317e) /* 0.470262043 */, 18 },
7020 /* 6580 */ { MAD_F(0x0786956e) /* 0.470357351 */, 18 },
7021 /* 6581 */ { MAD_F(0x0786f95f) /* 0.470452664 */, 18 },
7022 /* 6582 */ { MAD_F(0x07875d52) /* 0.470547982 */, 18 },
7023 /* 6583 */ { MAD_F(0x0787c146) /* 0.470643305 */, 18 },
7024 /* 6584 */ { MAD_F(0x0788253b) /* 0.470738632 */, 18 },
7025 /* 6585 */ { MAD_F(0x07888932) /* 0.470833964 */, 18 },
7026 /* 6586 */ { MAD_F(0x0788ed2a) /* 0.470929301 */, 18 },
7027 /* 6587 */ { MAD_F(0x07895123) /* 0.471024643 */, 18 },
7028 /* 6588 */ { MAD_F(0x0789b51d) /* 0.471119990 */, 18 },
7029 /* 6589 */ { MAD_F(0x078a1919) /* 0.471215341 */, 18 },
7030 /* 6590 */ { MAD_F(0x078a7d16) /* 0.471310698 */, 18 },
7031 /* 6591 */ { MAD_F(0x078ae114) /* 0.471406059 */, 18 },
7032
7033 /* 6592 */ { MAD_F(0x078b4514) /* 0.471501425 */, 18 },
7034 /* 6593 */ { MAD_F(0x078ba915) /* 0.471596796 */, 18 },
7035 /* 6594 */ { MAD_F(0x078c0d17) /* 0.471692171 */, 18 },
7036 /* 6595 */ { MAD_F(0x078c711a) /* 0.471787552 */, 18 },
7037 /* 6596 */ { MAD_F(0x078cd51f) /* 0.471882937 */, 18 },
7038 /* 6597 */ { MAD_F(0x078d3925) /* 0.471978327 */, 18 },
7039 /* 6598 */ { MAD_F(0x078d9d2d) /* 0.472073722 */, 18 },
7040 /* 6599 */ { MAD_F(0x078e0135) /* 0.472169122 */, 18 },
7041 /* 6600 */ { MAD_F(0x078e653f) /* 0.472264527 */, 18 },
7042 /* 6601 */ { MAD_F(0x078ec94b) /* 0.472359936 */, 18 },
7043 /* 6602 */ { MAD_F(0x078f2d57) /* 0.472455350 */, 18 },
7044 /* 6603 */ { MAD_F(0x078f9165) /* 0.472550769 */, 18 },
7045 /* 6604 */ { MAD_F(0x078ff574) /* 0.472646193 */, 18 },
7046 /* 6605 */ { MAD_F(0x07905985) /* 0.472741622 */, 18 },
7047 /* 6606 */ { MAD_F(0x0790bd96) /* 0.472837055 */, 18 },
7048 /* 6607 */ { MAD_F(0x079121a9) /* 0.472932493 */, 18 },
7049
7050 /* 6608 */ { MAD_F(0x079185be) /* 0.473027937 */, 18 },
7051 /* 6609 */ { MAD_F(0x0791e9d3) /* 0.473123384 */, 18 },
7052 /* 6610 */ { MAD_F(0x07924dea) /* 0.473218837 */, 18 },
7053 /* 6611 */ { MAD_F(0x0792b202) /* 0.473314295 */, 18 },
7054 /* 6612 */ { MAD_F(0x0793161c) /* 0.473409757 */, 18 },
7055 /* 6613 */ { MAD_F(0x07937a37) /* 0.473505224 */, 18 },
7056 /* 6614 */ { MAD_F(0x0793de53) /* 0.473600696 */, 18 },
7057 /* 6615 */ { MAD_F(0x07944270) /* 0.473696173 */, 18 },
7058 /* 6616 */ { MAD_F(0x0794a68f) /* 0.473791655 */, 18 },
7059 /* 6617 */ { MAD_F(0x07950aaf) /* 0.473887141 */, 18 },
7060 /* 6618 */ { MAD_F(0x07956ed0) /* 0.473982632 */, 18 },
7061 /* 6619 */ { MAD_F(0x0795d2f2) /* 0.474078128 */, 18 },
7062 /* 6620 */ { MAD_F(0x07963716) /* 0.474173629 */, 18 },
7063 /* 6621 */ { MAD_F(0x07969b3b) /* 0.474269135 */, 18 },
7064 /* 6622 */ { MAD_F(0x0796ff62) /* 0.474364645 */, 18 },
7065 /* 6623 */ { MAD_F(0x07976389) /* 0.474460161 */, 18 },
7066
7067 /* 6624 */ { MAD_F(0x0797c7b2) /* 0.474555681 */, 18 },
7068 /* 6625 */ { MAD_F(0x07982bdd) /* 0.474651205 */, 18 },
7069 /* 6626 */ { MAD_F(0x07989008) /* 0.474746735 */, 18 },
7070 /* 6627 */ { MAD_F(0x0798f435) /* 0.474842270 */, 18 },
7071 /* 6628 */ { MAD_F(0x07995863) /* 0.474937809 */, 18 },
7072 /* 6629 */ { MAD_F(0x0799bc92) /* 0.475033353 */, 18 },
7073 /* 6630 */ { MAD_F(0x079a20c3) /* 0.475128902 */, 18 },
7074 /* 6631 */ { MAD_F(0x079a84f5) /* 0.475224456 */, 18 },
7075 /* 6632 */ { MAD_F(0x079ae929) /* 0.475320014 */, 18 },
7076 /* 6633 */ { MAD_F(0x079b4d5d) /* 0.475415578 */, 18 },
7077 /* 6634 */ { MAD_F(0x079bb193) /* 0.475511146 */, 18 },
7078 /* 6635 */ { MAD_F(0x079c15ca) /* 0.475606719 */, 18 },
7079 /* 6636 */ { MAD_F(0x079c7a03) /* 0.475702296 */, 18 },
7080 /* 6637 */ { MAD_F(0x079cde3c) /* 0.475797879 */, 18 },
7081 /* 6638 */ { MAD_F(0x079d4277) /* 0.475893466 */, 18 },
7082 /* 6639 */ { MAD_F(0x079da6b4) /* 0.475989058 */, 18 },
7083
7084 /* 6640 */ { MAD_F(0x079e0af1) /* 0.476084655 */, 18 },
7085 /* 6641 */ { MAD_F(0x079e6f30) /* 0.476180257 */, 18 },
7086 /* 6642 */ { MAD_F(0x079ed370) /* 0.476275863 */, 18 },
7087 /* 6643 */ { MAD_F(0x079f37b2) /* 0.476371475 */, 18 },
7088 /* 6644 */ { MAD_F(0x079f9bf5) /* 0.476467091 */, 18 },
7089 /* 6645 */ { MAD_F(0x07a00039) /* 0.476562712 */, 18 },
7090 /* 6646 */ { MAD_F(0x07a0647e) /* 0.476658338 */, 18 },
7091 /* 6647 */ { MAD_F(0x07a0c8c5) /* 0.476753968 */, 18 },
7092 /* 6648 */ { MAD_F(0x07a12d0c) /* 0.476849603 */, 18 },
7093 /* 6649 */ { MAD_F(0x07a19156) /* 0.476945243 */, 18 },
7094 /* 6650 */ { MAD_F(0x07a1f5a0) /* 0.477040888 */, 18 },
7095 /* 6651 */ { MAD_F(0x07a259ec) /* 0.477136538 */, 18 },
7096 /* 6652 */ { MAD_F(0x07a2be39) /* 0.477232193 */, 18 },
7097 /* 6653 */ { MAD_F(0x07a32287) /* 0.477327852 */, 18 },
7098 /* 6654 */ { MAD_F(0x07a386d7) /* 0.477423516 */, 18 },
7099 /* 6655 */ { MAD_F(0x07a3eb28) /* 0.477519185 */, 18 },
7100
7101 /* 6656 */ { MAD_F(0x07a44f7a) /* 0.477614858 */, 18 },
7102 /* 6657 */ { MAD_F(0x07a4b3ce) /* 0.477710537 */, 18 },
7103 /* 6658 */ { MAD_F(0x07a51822) /* 0.477806220 */, 18 },
7104 /* 6659 */ { MAD_F(0x07a57c78) /* 0.477901908 */, 18 },
7105 /* 6660 */ { MAD_F(0x07a5e0d0) /* 0.477997601 */, 18 },
7106 /* 6661 */ { MAD_F(0x07a64528) /* 0.478093299 */, 18 },
7107 /* 6662 */ { MAD_F(0x07a6a982) /* 0.478189001 */, 18 },
7108 /* 6663 */ { MAD_F(0x07a70ddd) /* 0.478284708 */, 18 },
7109 /* 6664 */ { MAD_F(0x07a7723a) /* 0.478380420 */, 18 },
7110 /* 6665 */ { MAD_F(0x07a7d698) /* 0.478476137 */, 18 },
7111 /* 6666 */ { MAD_F(0x07a83af7) /* 0.478571858 */, 18 },
7112 /* 6667 */ { MAD_F(0x07a89f57) /* 0.478667585 */, 18 },
7113 /* 6668 */ { MAD_F(0x07a903b9) /* 0.478763316 */, 18 },
7114 /* 6669 */ { MAD_F(0x07a9681c) /* 0.478859052 */, 18 },
7115 /* 6670 */ { MAD_F(0x07a9cc80) /* 0.478954793 */, 18 },
7116 /* 6671 */ { MAD_F(0x07aa30e5) /* 0.479050538 */, 18 },
7117
7118 /* 6672 */ { MAD_F(0x07aa954c) /* 0.479146288 */, 18 },
7119 /* 6673 */ { MAD_F(0x07aaf9b4) /* 0.479242043 */, 18 },
7120 /* 6674 */ { MAD_F(0x07ab5e1e) /* 0.479337803 */, 18 },
7121 /* 6675 */ { MAD_F(0x07abc288) /* 0.479433568 */, 18 },
7122 /* 6676 */ { MAD_F(0x07ac26f4) /* 0.479529337 */, 18 },
7123 /* 6677 */ { MAD_F(0x07ac8b61) /* 0.479625111 */, 18 },
7124 /* 6678 */ { MAD_F(0x07acefd0) /* 0.479720890 */, 18 },
7125 /* 6679 */ { MAD_F(0x07ad543f) /* 0.479816674 */, 18 },
7126 /* 6680 */ { MAD_F(0x07adb8b0) /* 0.479912463 */, 18 },
7127 /* 6681 */ { MAD_F(0x07ae1d23) /* 0.480008256 */, 18 },
7128 /* 6682 */ { MAD_F(0x07ae8196) /* 0.480104054 */, 18 },
7129 /* 6683 */ { MAD_F(0x07aee60b) /* 0.480199857 */, 18 },
7130 /* 6684 */ { MAD_F(0x07af4a81) /* 0.480295664 */, 18 },
7131 /* 6685 */ { MAD_F(0x07afaef9) /* 0.480391477 */, 18 },
7132 /* 6686 */ { MAD_F(0x07b01372) /* 0.480487294 */, 18 },
7133 /* 6687 */ { MAD_F(0x07b077ec) /* 0.480583116 */, 18 },
7134
7135 /* 6688 */ { MAD_F(0x07b0dc67) /* 0.480678943 */, 18 },
7136 /* 6689 */ { MAD_F(0x07b140e4) /* 0.480774774 */, 18 },
7137 /* 6690 */ { MAD_F(0x07b1a561) /* 0.480870611 */, 18 },
7138 /* 6691 */ { MAD_F(0x07b209e1) /* 0.480966452 */, 18 },
7139 /* 6692 */ { MAD_F(0x07b26e61) /* 0.481062298 */, 18 },
7140 /* 6693 */ { MAD_F(0x07b2d2e3) /* 0.481158148 */, 18 },
7141 /* 6694 */ { MAD_F(0x07b33766) /* 0.481254004 */, 18 },
7142 /* 6695 */ { MAD_F(0x07b39bea) /* 0.481349864 */, 18 },
7143 /* 6696 */ { MAD_F(0x07b4006f) /* 0.481445729 */, 18 },
7144 /* 6697 */ { MAD_F(0x07b464f6) /* 0.481541598 */, 18 },
7145 /* 6698 */ { MAD_F(0x07b4c97e) /* 0.481637473 */, 18 },
7146 /* 6699 */ { MAD_F(0x07b52e08) /* 0.481733352 */, 18 },
7147 /* 6700 */ { MAD_F(0x07b59292) /* 0.481829236 */, 18 },
7148 /* 6701 */ { MAD_F(0x07b5f71e) /* 0.481925125 */, 18 },
7149 /* 6702 */ { MAD_F(0x07b65bac) /* 0.482021019 */, 18 },
7150 /* 6703 */ { MAD_F(0x07b6c03a) /* 0.482116917 */, 18 },
7151
7152 /* 6704 */ { MAD_F(0x07b724ca) /* 0.482212820 */, 18 },
7153 /* 6705 */ { MAD_F(0x07b7895b) /* 0.482308728 */, 18 },
7154 /* 6706 */ { MAD_F(0x07b7eded) /* 0.482404640 */, 18 },
7155 /* 6707 */ { MAD_F(0x07b85281) /* 0.482500558 */, 18 },
7156 /* 6708 */ { MAD_F(0x07b8b716) /* 0.482596480 */, 18 },
7157 /* 6709 */ { MAD_F(0x07b91bac) /* 0.482692407 */, 18 },
7158 /* 6710 */ { MAD_F(0x07b98044) /* 0.482788339 */, 18 },
7159 /* 6711 */ { MAD_F(0x07b9e4dc) /* 0.482884275 */, 18 },
7160 /* 6712 */ { MAD_F(0x07ba4976) /* 0.482980216 */, 18 },
7161 /* 6713 */ { MAD_F(0x07baae12) /* 0.483076162 */, 18 },
7162 /* 6714 */ { MAD_F(0x07bb12ae) /* 0.483172113 */, 18 },
7163 /* 6715 */ { MAD_F(0x07bb774c) /* 0.483268069 */, 18 },
7164 /* 6716 */ { MAD_F(0x07bbdbeb) /* 0.483364029 */, 18 },
7165 /* 6717 */ { MAD_F(0x07bc408c) /* 0.483459994 */, 18 },
7166 /* 6718 */ { MAD_F(0x07bca52d) /* 0.483555964 */, 18 },
7167 /* 6719 */ { MAD_F(0x07bd09d0) /* 0.483651939 */, 18 },
7168
7169 /* 6720 */ { MAD_F(0x07bd6e75) /* 0.483747918 */, 18 },
7170 /* 6721 */ { MAD_F(0x07bdd31a) /* 0.483843902 */, 18 },
7171 /* 6722 */ { MAD_F(0x07be37c1) /* 0.483939891 */, 18 },
7172 /* 6723 */ { MAD_F(0x07be9c69) /* 0.484035885 */, 18 },
7173 /* 6724 */ { MAD_F(0x07bf0113) /* 0.484131883 */, 18 },
7174 /* 6725 */ { MAD_F(0x07bf65bd) /* 0.484227886 */, 18 },
7175 /* 6726 */ { MAD_F(0x07bfca69) /* 0.484323894 */, 18 },
7176 /* 6727 */ { MAD_F(0x07c02f16) /* 0.484419907 */, 18 },
7177 /* 6728 */ { MAD_F(0x07c093c5) /* 0.484515924 */, 18 },
7178 /* 6729 */ { MAD_F(0x07c0f875) /* 0.484611946 */, 18 },
7179 /* 6730 */ { MAD_F(0x07c15d26) /* 0.484707973 */, 18 },
7180 /* 6731 */ { MAD_F(0x07c1c1d8) /* 0.484804005 */, 18 },
7181 /* 6732 */ { MAD_F(0x07c2268b) /* 0.484900041 */, 18 },
7182 /* 6733 */ { MAD_F(0x07c28b40) /* 0.484996083 */, 18 },
7183 /* 6734 */ { MAD_F(0x07c2eff6) /* 0.485092128 */, 18 },
7184 /* 6735 */ { MAD_F(0x07c354ae) /* 0.485188179 */, 18 },
7185
7186 /* 6736 */ { MAD_F(0x07c3b967) /* 0.485284235 */, 18 },
7187 /* 6737 */ { MAD_F(0x07c41e21) /* 0.485380295 */, 18 },
7188 /* 6738 */ { MAD_F(0x07c482dc) /* 0.485476360 */, 18 },
7189 /* 6739 */ { MAD_F(0x07c4e798) /* 0.485572430 */, 18 },
7190 /* 6740 */ { MAD_F(0x07c54c56) /* 0.485668504 */, 18 },
7191 /* 6741 */ { MAD_F(0x07c5b115) /* 0.485764583 */, 18 },
7192 /* 6742 */ { MAD_F(0x07c615d6) /* 0.485860667 */, 18 },
7193 /* 6743 */ { MAD_F(0x07c67a97) /* 0.485956756 */, 18 },
7194 /* 6744 */ { MAD_F(0x07c6df5a) /* 0.486052849 */, 18 },
7195 /* 6745 */ { MAD_F(0x07c7441e) /* 0.486148948 */, 18 },
7196 /* 6746 */ { MAD_F(0x07c7a8e4) /* 0.486245051 */, 18 },
7197 /* 6747 */ { MAD_F(0x07c80daa) /* 0.486341158 */, 18 },
7198 /* 6748 */ { MAD_F(0x07c87272) /* 0.486437271 */, 18 },
7199 /* 6749 */ { MAD_F(0x07c8d73c) /* 0.486533388 */, 18 },
7200 /* 6750 */ { MAD_F(0x07c93c06) /* 0.486629510 */, 18 },
7201 /* 6751 */ { MAD_F(0x07c9a0d2) /* 0.486725637 */, 18 },
7202
7203 /* 6752 */ { MAD_F(0x07ca059f) /* 0.486821768 */, 18 },
7204 /* 6753 */ { MAD_F(0x07ca6a6d) /* 0.486917905 */, 18 },
7205 /* 6754 */ { MAD_F(0x07cacf3d) /* 0.487014045 */, 18 },
7206 /* 6755 */ { MAD_F(0x07cb340e) /* 0.487110191 */, 18 },
7207 /* 6756 */ { MAD_F(0x07cb98e0) /* 0.487206342 */, 18 },
7208 /* 6757 */ { MAD_F(0x07cbfdb4) /* 0.487302497 */, 18 },
7209 /* 6758 */ { MAD_F(0x07cc6288) /* 0.487398657 */, 18 },
7210 /* 6759 */ { MAD_F(0x07ccc75e) /* 0.487494821 */, 18 },
7211 /* 6760 */ { MAD_F(0x07cd2c36) /* 0.487590991 */, 18 },
7212 /* 6761 */ { MAD_F(0x07cd910e) /* 0.487687165 */, 18 },
7213 /* 6762 */ { MAD_F(0x07cdf5e8) /* 0.487783344 */, 18 },
7214 /* 6763 */ { MAD_F(0x07ce5ac3) /* 0.487879528 */, 18 },
7215 /* 6764 */ { MAD_F(0x07cebfa0) /* 0.487975716 */, 18 },
7216 /* 6765 */ { MAD_F(0x07cf247d) /* 0.488071909 */, 18 },
7217 /* 6766 */ { MAD_F(0x07cf895c) /* 0.488168107 */, 18 },
7218 /* 6767 */ { MAD_F(0x07cfee3c) /* 0.488264310 */, 18 },
7219
7220 /* 6768 */ { MAD_F(0x07d0531e) /* 0.488360517 */, 18 },
7221 /* 6769 */ { MAD_F(0x07d0b801) /* 0.488456729 */, 18 },
7222 /* 6770 */ { MAD_F(0x07d11ce5) /* 0.488552946 */, 18 },
7223 /* 6771 */ { MAD_F(0x07d181ca) /* 0.488649167 */, 18 },
7224 /* 6772 */ { MAD_F(0x07d1e6b0) /* 0.488745394 */, 18 },
7225 /* 6773 */ { MAD_F(0x07d24b98) /* 0.488841625 */, 18 },
7226 /* 6774 */ { MAD_F(0x07d2b081) /* 0.488937860 */, 18 },
7227 /* 6775 */ { MAD_F(0x07d3156c) /* 0.489034101 */, 18 },
7228 /* 6776 */ { MAD_F(0x07d37a57) /* 0.489130346 */, 18 },
7229 /* 6777 */ { MAD_F(0x07d3df44) /* 0.489226596 */, 18 },
7230 /* 6778 */ { MAD_F(0x07d44432) /* 0.489322851 */, 18 },
7231 /* 6779 */ { MAD_F(0x07d4a922) /* 0.489419110 */, 18 },
7232 /* 6780 */ { MAD_F(0x07d50e13) /* 0.489515375 */, 18 },
7233 /* 6781 */ { MAD_F(0x07d57305) /* 0.489611643 */, 18 },
7234 /* 6782 */ { MAD_F(0x07d5d7f8) /* 0.489707917 */, 18 },
7235 /* 6783 */ { MAD_F(0x07d63cec) /* 0.489804195 */, 18 },
7236
7237 /* 6784 */ { MAD_F(0x07d6a1e2) /* 0.489900479 */, 18 },
7238 /* 6785 */ { MAD_F(0x07d706d9) /* 0.489996766 */, 18 },
7239 /* 6786 */ { MAD_F(0x07d76bd2) /* 0.490093059 */, 18 },
7240 /* 6787 */ { MAD_F(0x07d7d0cb) /* 0.490189356 */, 18 },
7241 /* 6788 */ { MAD_F(0x07d835c6) /* 0.490285658 */, 18 },
7242 /* 6789 */ { MAD_F(0x07d89ac2) /* 0.490381965 */, 18 },
7243 /* 6790 */ { MAD_F(0x07d8ffc0) /* 0.490478277 */, 18 },
7244 /* 6791 */ { MAD_F(0x07d964be) /* 0.490574593 */, 18 },
7245 /* 6792 */ { MAD_F(0x07d9c9be) /* 0.490670914 */, 18 },
7246 /* 6793 */ { MAD_F(0x07da2ebf) /* 0.490767239 */, 18 },
7247 /* 6794 */ { MAD_F(0x07da93c2) /* 0.490863570 */, 18 },
7248 /* 6795 */ { MAD_F(0x07daf8c6) /* 0.490959905 */, 18 },
7249 /* 6796 */ { MAD_F(0x07db5dcb) /* 0.491056245 */, 18 },
7250 /* 6797 */ { MAD_F(0x07dbc2d1) /* 0.491152589 */, 18 },
7251 /* 6798 */ { MAD_F(0x07dc27d9) /* 0.491248939 */, 18 },
7252 /* 6799 */ { MAD_F(0x07dc8ce1) /* 0.491345293 */, 18 },
7253
7254 /* 6800 */ { MAD_F(0x07dcf1ec) /* 0.491441651 */, 18 },
7255 /* 6801 */ { MAD_F(0x07dd56f7) /* 0.491538015 */, 18 },
7256 /* 6802 */ { MAD_F(0x07ddbc04) /* 0.491634383 */, 18 },
7257 /* 6803 */ { MAD_F(0x07de2111) /* 0.491730756 */, 18 },
7258 /* 6804 */ { MAD_F(0x07de8621) /* 0.491827134 */, 18 },
7259 /* 6805 */ { MAD_F(0x07deeb31) /* 0.491923516 */, 18 },
7260 /* 6806 */ { MAD_F(0x07df5043) /* 0.492019903 */, 18 },
7261 /* 6807 */ { MAD_F(0x07dfb556) /* 0.492116295 */, 18 },
7262 /* 6808 */ { MAD_F(0x07e01a6a) /* 0.492212691 */, 18 },
7263 /* 6809 */ { MAD_F(0x07e07f80) /* 0.492309093 */, 18 },
7264 /* 6810 */ { MAD_F(0x07e0e496) /* 0.492405499 */, 18 },
7265 /* 6811 */ { MAD_F(0x07e149ae) /* 0.492501909 */, 18 },
7266 /* 6812 */ { MAD_F(0x07e1aec8) /* 0.492598325 */, 18 },
7267 /* 6813 */ { MAD_F(0x07e213e2) /* 0.492694745 */, 18 },
7268 /* 6814 */ { MAD_F(0x07e278fe) /* 0.492791170 */, 18 },
7269 /* 6815 */ { MAD_F(0x07e2de1b) /* 0.492887599 */, 18 },
7270
7271 /* 6816 */ { MAD_F(0x07e3433a) /* 0.492984033 */, 18 },
7272 /* 6817 */ { MAD_F(0x07e3a859) /* 0.493080472 */, 18 },
7273 /* 6818 */ { MAD_F(0x07e40d7a) /* 0.493176916 */, 18 },
7274 /* 6819 */ { MAD_F(0x07e4729c) /* 0.493273365 */, 18 },
7275 /* 6820 */ { MAD_F(0x07e4d7c0) /* 0.493369818 */, 18 },
7276 /* 6821 */ { MAD_F(0x07e53ce4) /* 0.493466275 */, 18 },
7277 /* 6822 */ { MAD_F(0x07e5a20a) /* 0.493562738 */, 18 },
7278 /* 6823 */ { MAD_F(0x07e60732) /* 0.493659205 */, 18 },
7279 /* 6824 */ { MAD_F(0x07e66c5a) /* 0.493755677 */, 18 },
7280 /* 6825 */ { MAD_F(0x07e6d184) /* 0.493852154 */, 18 },
7281 /* 6826 */ { MAD_F(0x07e736af) /* 0.493948635 */, 18 },
7282 /* 6827 */ { MAD_F(0x07e79bdb) /* 0.494045122 */, 18 },
7283 /* 6828 */ { MAD_F(0x07e80109) /* 0.494141612 */, 18 },
7284 /* 6829 */ { MAD_F(0x07e86638) /* 0.494238108 */, 18 },
7285 /* 6830 */ { MAD_F(0x07e8cb68) /* 0.494334608 */, 18 },
7286 /* 6831 */ { MAD_F(0x07e93099) /* 0.494431113 */, 18 },
7287
7288 /* 6832 */ { MAD_F(0x07e995cc) /* 0.494527623 */, 18 },
7289 /* 6833 */ { MAD_F(0x07e9fb00) /* 0.494624137 */, 18 },
7290 /* 6834 */ { MAD_F(0x07ea6035) /* 0.494720656 */, 18 },
7291 /* 6835 */ { MAD_F(0x07eac56b) /* 0.494817180 */, 18 },
7292 /* 6836 */ { MAD_F(0x07eb2aa3) /* 0.494913709 */, 18 },
7293 /* 6837 */ { MAD_F(0x07eb8fdc) /* 0.495010242 */, 18 },
7294 /* 6838 */ { MAD_F(0x07ebf516) /* 0.495106780 */, 18 },
7295 /* 6839 */ { MAD_F(0x07ec5a51) /* 0.495203322 */, 18 },
7296 /* 6840 */ { MAD_F(0x07ecbf8e) /* 0.495299870 */, 18 },
7297 /* 6841 */ { MAD_F(0x07ed24cc) /* 0.495396422 */, 18 },
7298 /* 6842 */ { MAD_F(0x07ed8a0b) /* 0.495492978 */, 18 },
7299 /* 6843 */ { MAD_F(0x07edef4c) /* 0.495589540 */, 18 },
7300 /* 6844 */ { MAD_F(0x07ee548e) /* 0.495686106 */, 18 },
7301 /* 6845 */ { MAD_F(0x07eeb9d1) /* 0.495782677 */, 18 },
7302 /* 6846 */ { MAD_F(0x07ef1f15) /* 0.495879252 */, 18 },
7303 /* 6847 */ { MAD_F(0x07ef845b) /* 0.495975833 */, 18 },
7304
7305 /* 6848 */ { MAD_F(0x07efe9a1) /* 0.496072418 */, 18 },
7306 /* 6849 */ { MAD_F(0x07f04ee9) /* 0.496169007 */, 18 },
7307 /* 6850 */ { MAD_F(0x07f0b433) /* 0.496265602 */, 18 },
7308 /* 6851 */ { MAD_F(0x07f1197d) /* 0.496362201 */, 18 },
7309 /* 6852 */ { MAD_F(0x07f17ec9) /* 0.496458804 */, 18 },
7310 /* 6853 */ { MAD_F(0x07f1e416) /* 0.496555413 */, 18 },
7311 /* 6854 */ { MAD_F(0x07f24965) /* 0.496652026 */, 18 },
7312 /* 6855 */ { MAD_F(0x07f2aeb5) /* 0.496748644 */, 18 },
7313 /* 6856 */ { MAD_F(0x07f31405) /* 0.496845266 */, 18 },
7314 /* 6857 */ { MAD_F(0x07f37958) /* 0.496941894 */, 18 },
7315 /* 6858 */ { MAD_F(0x07f3deab) /* 0.497038526 */, 18 },
7316 /* 6859 */ { MAD_F(0x07f44400) /* 0.497135162 */, 18 },
7317 /* 6860 */ { MAD_F(0x07f4a956) /* 0.497231804 */, 18 },
7318 /* 6861 */ { MAD_F(0x07f50ead) /* 0.497328450 */, 18 },
7319 /* 6862 */ { MAD_F(0x07f57405) /* 0.497425100 */, 18 },
7320 /* 6863 */ { MAD_F(0x07f5d95f) /* 0.497521756 */, 18 },
7321
7322 /* 6864 */ { MAD_F(0x07f63eba) /* 0.497618416 */, 18 },
7323 /* 6865 */ { MAD_F(0x07f6a416) /* 0.497715081 */, 18 },
7324 /* 6866 */ { MAD_F(0x07f70974) /* 0.497811750 */, 18 },
7325 /* 6867 */ { MAD_F(0x07f76ed3) /* 0.497908425 */, 18 },
7326 /* 6868 */ { MAD_F(0x07f7d433) /* 0.498005103 */, 18 },
7327 /* 6869 */ { MAD_F(0x07f83994) /* 0.498101787 */, 18 },
7328 /* 6870 */ { MAD_F(0x07f89ef7) /* 0.498198475 */, 18 },
7329 /* 6871 */ { MAD_F(0x07f9045a) /* 0.498295168 */, 18 },
7330 /* 6872 */ { MAD_F(0x07f969c0) /* 0.498391866 */, 18 },
7331 /* 6873 */ { MAD_F(0x07f9cf26) /* 0.498488568 */, 18 },
7332 /* 6874 */ { MAD_F(0x07fa348e) /* 0.498585275 */, 18 },
7333 /* 6875 */ { MAD_F(0x07fa99f6) /* 0.498681987 */, 18 },
7334 /* 6876 */ { MAD_F(0x07faff60) /* 0.498778704 */, 18 },
7335 /* 6877 */ { MAD_F(0x07fb64cc) /* 0.498875425 */, 18 },
7336 /* 6878 */ { MAD_F(0x07fbca38) /* 0.498972150 */, 18 },
7337 /* 6879 */ { MAD_F(0x07fc2fa6) /* 0.499068881 */, 18 },
7338
7339 /* 6880 */ { MAD_F(0x07fc9516) /* 0.499165616 */, 18 },
7340 /* 6881 */ { MAD_F(0x07fcfa86) /* 0.499262356 */, 18 },
7341 /* 6882 */ { MAD_F(0x07fd5ff8) /* 0.499359101 */, 18 },
7342 /* 6883 */ { MAD_F(0x07fdc56b) /* 0.499455850 */, 18 },
7343 /* 6884 */ { MAD_F(0x07fe2adf) /* 0.499552604 */, 18 },
7344 /* 6885 */ { MAD_F(0x07fe9054) /* 0.499649362 */, 18 },
7345 /* 6886 */ { MAD_F(0x07fef5cb) /* 0.499746126 */, 18 },
7346 /* 6887 */ { MAD_F(0x07ff5b43) /* 0.499842894 */, 18 },
7347 /* 6888 */ { MAD_F(0x07ffc0bc) /* 0.499939666 */, 18 },
7348 /* 6889 */ { MAD_F(0x0400131b) /* 0.250018222 */, 19 },
7349 /* 6890 */ { MAD_F(0x040045d9) /* 0.250066613 */, 19 },
7350 /* 6891 */ { MAD_F(0x04007897) /* 0.250115006 */, 19 },
7351 /* 6892 */ { MAD_F(0x0400ab57) /* 0.250163402 */, 19 },
7352 /* 6893 */ { MAD_F(0x0400de16) /* 0.250211800 */, 19 },
7353 /* 6894 */ { MAD_F(0x040110d7) /* 0.250260200 */, 19 },
7354 /* 6895 */ { MAD_F(0x04014398) /* 0.250308603 */, 19 },
7355
7356 /* 6896 */ { MAD_F(0x04017659) /* 0.250357008 */, 19 },
7357 /* 6897 */ { MAD_F(0x0401a91c) /* 0.250405415 */, 19 },
7358 /* 6898 */ { MAD_F(0x0401dbdf) /* 0.250453825 */, 19 },
7359 /* 6899 */ { MAD_F(0x04020ea2) /* 0.250502237 */, 19 },
7360 /* 6900 */ { MAD_F(0x04024166) /* 0.250550652 */, 19 },
7361 /* 6901 */ { MAD_F(0x0402742b) /* 0.250599068 */, 19 },
7362 /* 6902 */ { MAD_F(0x0402a6f0) /* 0.250647488 */, 19 },
7363 /* 6903 */ { MAD_F(0x0402d9b6) /* 0.250695909 */, 19 },
7364 /* 6904 */ { MAD_F(0x04030c7d) /* 0.250744333 */, 19 },
7365 /* 6905 */ { MAD_F(0x04033f44) /* 0.250792759 */, 19 },
7366 /* 6906 */ { MAD_F(0x0403720c) /* 0.250841187 */, 19 },
7367 /* 6907 */ { MAD_F(0x0403a4d5) /* 0.250889618 */, 19 },
7368 /* 6908 */ { MAD_F(0x0403d79e) /* 0.250938051 */, 19 },
7369 /* 6909 */ { MAD_F(0x04040a68) /* 0.250986487 */, 19 },
7370 /* 6910 */ { MAD_F(0x04043d32) /* 0.251034924 */, 19 },
7371 /* 6911 */ { MAD_F(0x04046ffd) /* 0.251083365 */, 19 },
7372
7373 /* 6912 */ { MAD_F(0x0404a2c9) /* 0.251131807 */, 19 },
7374 /* 6913 */ { MAD_F(0x0404d595) /* 0.251180252 */, 19 },
7375 /* 6914 */ { MAD_F(0x04050862) /* 0.251228699 */, 19 },
7376 /* 6915 */ { MAD_F(0x04053b30) /* 0.251277148 */, 19 },
7377 /* 6916 */ { MAD_F(0x04056dfe) /* 0.251325600 */, 19 },
7378 /* 6917 */ { MAD_F(0x0405a0cd) /* 0.251374054 */, 19 },
7379 /* 6918 */ { MAD_F(0x0405d39c) /* 0.251422511 */, 19 },
7380 /* 6919 */ { MAD_F(0x0406066c) /* 0.251470970 */, 19 },
7381 /* 6920 */ { MAD_F(0x0406393d) /* 0.251519431 */, 19 },
7382 /* 6921 */ { MAD_F(0x04066c0e) /* 0.251567894 */, 19 },
7383 /* 6922 */ { MAD_F(0x04069ee0) /* 0.251616360 */, 19 },
7384 /* 6923 */ { MAD_F(0x0406d1b3) /* 0.251664828 */, 19 },
7385 /* 6924 */ { MAD_F(0x04070486) /* 0.251713299 */, 19 },
7386 /* 6925 */ { MAD_F(0x0407375a) /* 0.251761772 */, 19 },
7387 /* 6926 */ { MAD_F(0x04076a2e) /* 0.251810247 */, 19 },
7388 /* 6927 */ { MAD_F(0x04079d03) /* 0.251858724 */, 19 },
7389
7390 /* 6928 */ { MAD_F(0x0407cfd9) /* 0.251907204 */, 19 },
7391 /* 6929 */ { MAD_F(0x040802af) /* 0.251955686 */, 19 },
7392 /* 6930 */ { MAD_F(0x04083586) /* 0.252004171 */, 19 },
7393 /* 6931 */ { MAD_F(0x0408685e) /* 0.252052658 */, 19 },
7394 /* 6932 */ { MAD_F(0x04089b36) /* 0.252101147 */, 19 },
7395 /* 6933 */ { MAD_F(0x0408ce0f) /* 0.252149638 */, 19 },
7396 /* 6934 */ { MAD_F(0x040900e8) /* 0.252198132 */, 19 },
7397 /* 6935 */ { MAD_F(0x040933c2) /* 0.252246628 */, 19 },
7398 /* 6936 */ { MAD_F(0x0409669d) /* 0.252295127 */, 19 },
7399 /* 6937 */ { MAD_F(0x04099978) /* 0.252343627 */, 19 },
7400 /* 6938 */ { MAD_F(0x0409cc54) /* 0.252392131 */, 19 },
7401 /* 6939 */ { MAD_F(0x0409ff31) /* 0.252440636 */, 19 },
7402 /* 6940 */ { MAD_F(0x040a320e) /* 0.252489144 */, 19 },
7403 /* 6941 */ { MAD_F(0x040a64ec) /* 0.252537654 */, 19 },
7404 /* 6942 */ { MAD_F(0x040a97cb) /* 0.252586166 */, 19 },
7405 /* 6943 */ { MAD_F(0x040acaaa) /* 0.252634681 */, 19 },
7406
7407 /* 6944 */ { MAD_F(0x040afd89) /* 0.252683198 */, 19 },
7408 /* 6945 */ { MAD_F(0x040b306a) /* 0.252731718 */, 19 },
7409 /* 6946 */ { MAD_F(0x040b634b) /* 0.252780240 */, 19 },
7410 /* 6947 */ { MAD_F(0x040b962c) /* 0.252828764 */, 19 },
7411 /* 6948 */ { MAD_F(0x040bc90e) /* 0.252877290 */, 19 },
7412 /* 6949 */ { MAD_F(0x040bfbf1) /* 0.252925819 */, 19 },
7413 /* 6950 */ { MAD_F(0x040c2ed5) /* 0.252974350 */, 19 },
7414 /* 6951 */ { MAD_F(0x040c61b9) /* 0.253022883 */, 19 },
7415 /* 6952 */ { MAD_F(0x040c949e) /* 0.253071419 */, 19 },
7416 /* 6953 */ { MAD_F(0x040cc783) /* 0.253119957 */, 19 },
7417 /* 6954 */ { MAD_F(0x040cfa69) /* 0.253168498 */, 19 },
7418 /* 6955 */ { MAD_F(0x040d2d4f) /* 0.253217040 */, 19 },
7419 /* 6956 */ { MAD_F(0x040d6037) /* 0.253265585 */, 19 },
7420 /* 6957 */ { MAD_F(0x040d931e) /* 0.253314133 */, 19 },
7421 /* 6958 */ { MAD_F(0x040dc607) /* 0.253362682 */, 19 },
7422 /* 6959 */ { MAD_F(0x040df8f0) /* 0.253411234 */, 19 },
7423
7424 /* 6960 */ { MAD_F(0x040e2bda) /* 0.253459789 */, 19 },
7425 /* 6961 */ { MAD_F(0x040e5ec4) /* 0.253508345 */, 19 },
7426 /* 6962 */ { MAD_F(0x040e91af) /* 0.253556904 */, 19 },
7427 /* 6963 */ { MAD_F(0x040ec49b) /* 0.253605466 */, 19 },
7428 /* 6964 */ { MAD_F(0x040ef787) /* 0.253654029 */, 19 },
7429 /* 6965 */ { MAD_F(0x040f2a74) /* 0.253702595 */, 19 },
7430 /* 6966 */ { MAD_F(0x040f5d61) /* 0.253751164 */, 19 },
7431 /* 6967 */ { MAD_F(0x040f904f) /* 0.253799734 */, 19 },
7432 /* 6968 */ { MAD_F(0x040fc33e) /* 0.253848307 */, 19 },
7433 /* 6969 */ { MAD_F(0x040ff62d) /* 0.253896883 */, 19 },
7434 /* 6970 */ { MAD_F(0x0410291d) /* 0.253945460 */, 19 },
7435 /* 6971 */ { MAD_F(0x04105c0e) /* 0.253994040 */, 19 },
7436 /* 6972 */ { MAD_F(0x04108eff) /* 0.254042622 */, 19 },
7437 /* 6973 */ { MAD_F(0x0410c1f1) /* 0.254091207 */, 19 },
7438 /* 6974 */ { MAD_F(0x0410f4e3) /* 0.254139794 */, 19 },
7439 /* 6975 */ { MAD_F(0x041127d6) /* 0.254188383 */, 19 },
7440
7441 /* 6976 */ { MAD_F(0x04115aca) /* 0.254236974 */, 19 },
7442 /* 6977 */ { MAD_F(0x04118dbe) /* 0.254285568 */, 19 },
7443 /* 6978 */ { MAD_F(0x0411c0b3) /* 0.254334165 */, 19 },
7444 /* 6979 */ { MAD_F(0x0411f3a9) /* 0.254382763 */, 19 },
7445 /* 6980 */ { MAD_F(0x0412269f) /* 0.254431364 */, 19 },
7446 /* 6981 */ { MAD_F(0x04125996) /* 0.254479967 */, 19 },
7447 /* 6982 */ { MAD_F(0x04128c8d) /* 0.254528572 */, 19 },
7448 /* 6983 */ { MAD_F(0x0412bf85) /* 0.254577180 */, 19 },
7449 /* 6984 */ { MAD_F(0x0412f27e) /* 0.254625790 */, 19 },
7450 /* 6985 */ { MAD_F(0x04132577) /* 0.254674403 */, 19 },
7451 /* 6986 */ { MAD_F(0x04135871) /* 0.254723017 */, 19 },
7452 /* 6987 */ { MAD_F(0x04138b6c) /* 0.254771635 */, 19 },
7453 /* 6988 */ { MAD_F(0x0413be67) /* 0.254820254 */, 19 },
7454 /* 6989 */ { MAD_F(0x0413f163) /* 0.254868876 */, 19 },
7455 /* 6990 */ { MAD_F(0x0414245f) /* 0.254917500 */, 19 },
7456 /* 6991 */ { MAD_F(0x0414575c) /* 0.254966126 */, 19 },
7457
7458 /* 6992 */ { MAD_F(0x04148a5a) /* 0.255014755 */, 19 },
7459 /* 6993 */ { MAD_F(0x0414bd58) /* 0.255063386 */, 19 },
7460 /* 6994 */ { MAD_F(0x0414f057) /* 0.255112019 */, 19 },
7461 /* 6995 */ { MAD_F(0x04152356) /* 0.255160655 */, 19 },
7462 /* 6996 */ { MAD_F(0x04155657) /* 0.255209292 */, 19 },
7463 /* 6997 */ { MAD_F(0x04158957) /* 0.255257933 */, 19 },
7464 /* 6998 */ { MAD_F(0x0415bc59) /* 0.255306575 */, 19 },
7465 /* 6999 */ { MAD_F(0x0415ef5b) /* 0.255355220 */, 19 },
7466 /* 7000 */ { MAD_F(0x0416225d) /* 0.255403867 */, 19 },
7467 /* 7001 */ { MAD_F(0x04165561) /* 0.255452517 */, 19 },
7468 /* 7002 */ { MAD_F(0x04168864) /* 0.255501169 */, 19 },
7469 /* 7003 */ { MAD_F(0x0416bb69) /* 0.255549823 */, 19 },
7470 /* 7004 */ { MAD_F(0x0416ee6e) /* 0.255598479 */, 19 },
7471 /* 7005 */ { MAD_F(0x04172174) /* 0.255647138 */, 19 },
7472 /* 7006 */ { MAD_F(0x0417547a) /* 0.255695799 */, 19 },
7473 /* 7007 */ { MAD_F(0x04178781) /* 0.255744463 */, 19 },
7474
7475 /* 7008 */ { MAD_F(0x0417ba89) /* 0.255793128 */, 19 },
7476 /* 7009 */ { MAD_F(0x0417ed91) /* 0.255841796 */, 19 },
7477 /* 7010 */ { MAD_F(0x0418209a) /* 0.255890467 */, 19 },
7478 /* 7011 */ { MAD_F(0x041853a3) /* 0.255939139 */, 19 },
7479 /* 7012 */ { MAD_F(0x041886ad) /* 0.255987814 */, 19 },
7480 /* 7013 */ { MAD_F(0x0418b9b8) /* 0.256036492 */, 19 },
7481 /* 7014 */ { MAD_F(0x0418ecc3) /* 0.256085171 */, 19 },
7482 /* 7015 */ { MAD_F(0x04191fcf) /* 0.256133853 */, 19 },
7483 /* 7016 */ { MAD_F(0x041952dc) /* 0.256182537 */, 19 },
7484 /* 7017 */ { MAD_F(0x041985e9) /* 0.256231224 */, 19 },
7485 /* 7018 */ { MAD_F(0x0419b8f7) /* 0.256279913 */, 19 },
7486 /* 7019 */ { MAD_F(0x0419ec05) /* 0.256328604 */, 19 },
7487 /* 7020 */ { MAD_F(0x041a1f15) /* 0.256377297 */, 19 },
7488 /* 7021 */ { MAD_F(0x041a5224) /* 0.256425993 */, 19 },
7489 /* 7022 */ { MAD_F(0x041a8534) /* 0.256474691 */, 19 },
7490 /* 7023 */ { MAD_F(0x041ab845) /* 0.256523392 */, 19 },
7491
7492 /* 7024 */ { MAD_F(0x041aeb57) /* 0.256572095 */, 19 },
7493 /* 7025 */ { MAD_F(0x041b1e69) /* 0.256620800 */, 19 },
7494 /* 7026 */ { MAD_F(0x041b517c) /* 0.256669507 */, 19 },
7495 /* 7027 */ { MAD_F(0x041b848f) /* 0.256718217 */, 19 },
7496 /* 7028 */ { MAD_F(0x041bb7a3) /* 0.256766929 */, 19 },
7497 /* 7029 */ { MAD_F(0x041beab8) /* 0.256815643 */, 19 },
7498 /* 7030 */ { MAD_F(0x041c1dcd) /* 0.256864359 */, 19 },
7499 /* 7031 */ { MAD_F(0x041c50e3) /* 0.256913078 */, 19 },
7500 /* 7032 */ { MAD_F(0x041c83fa) /* 0.256961800 */, 19 },
7501 /* 7033 */ { MAD_F(0x041cb711) /* 0.257010523 */, 19 },
7502 /* 7034 */ { MAD_F(0x041cea28) /* 0.257059249 */, 19 },
7503 /* 7035 */ { MAD_F(0x041d1d41) /* 0.257107977 */, 19 },
7504 /* 7036 */ { MAD_F(0x041d505a) /* 0.257156708 */, 19 },
7505 /* 7037 */ { MAD_F(0x041d8373) /* 0.257205440 */, 19 },
7506 /* 7038 */ { MAD_F(0x041db68e) /* 0.257254175 */, 19 },
7507 /* 7039 */ { MAD_F(0x041de9a8) /* 0.257302913 */, 19 },
7508
7509 /* 7040 */ { MAD_F(0x041e1cc4) /* 0.257351652 */, 19 },
7510 /* 7041 */ { MAD_F(0x041e4fe0) /* 0.257400394 */, 19 },
7511 /* 7042 */ { MAD_F(0x041e82fd) /* 0.257449139 */, 19 },
7512 /* 7043 */ { MAD_F(0x041eb61a) /* 0.257497885 */, 19 },
7513 /* 7044 */ { MAD_F(0x041ee938) /* 0.257546634 */, 19 },
7514 /* 7045 */ { MAD_F(0x041f1c57) /* 0.257595386 */, 19 },
7515 /* 7046 */ { MAD_F(0x041f4f76) /* 0.257644139 */, 19 },
7516 /* 7047 */ { MAD_F(0x041f8296) /* 0.257692895 */, 19 },
7517 /* 7048 */ { MAD_F(0x041fb5b6) /* 0.257741653 */, 19 },
7518 /* 7049 */ { MAD_F(0x041fe8d7) /* 0.257790414 */, 19 },
7519 /* 7050 */ { MAD_F(0x04201bf9) /* 0.257839176 */, 19 },
7520 /* 7051 */ { MAD_F(0x04204f1b) /* 0.257887941 */, 19 },
7521 /* 7052 */ { MAD_F(0x0420823e) /* 0.257936709 */, 19 },
7522 /* 7053 */ { MAD_F(0x0420b561) /* 0.257985478 */, 19 },
7523 /* 7054 */ { MAD_F(0x0420e885) /* 0.258034250 */, 19 },
7524 /* 7055 */ { MAD_F(0x04211baa) /* 0.258083025 */, 19 },
7525
7526 /* 7056 */ { MAD_F(0x04214ed0) /* 0.258131801 */, 19 },
7527 /* 7057 */ { MAD_F(0x042181f6) /* 0.258180580 */, 19 },
7528 /* 7058 */ { MAD_F(0x0421b51c) /* 0.258229361 */, 19 },
7529 /* 7059 */ { MAD_F(0x0421e843) /* 0.258278145 */, 19 },
7530 /* 7060 */ { MAD_F(0x04221b6b) /* 0.258326931 */, 19 },
7531 /* 7061 */ { MAD_F(0x04224e94) /* 0.258375719 */, 19 },
7532 /* 7062 */ { MAD_F(0x042281bd) /* 0.258424509 */, 19 },
7533 /* 7063 */ { MAD_F(0x0422b4e6) /* 0.258473302 */, 19 },
7534 /* 7064 */ { MAD_F(0x0422e811) /* 0.258522097 */, 19 },
7535 /* 7065 */ { MAD_F(0x04231b3c) /* 0.258570894 */, 19 },
7536 /* 7066 */ { MAD_F(0x04234e67) /* 0.258619694 */, 19 },
7537 /* 7067 */ { MAD_F(0x04238193) /* 0.258668496 */, 19 },
7538 /* 7068 */ { MAD_F(0x0423b4c0) /* 0.258717300 */, 19 },
7539 /* 7069 */ { MAD_F(0x0423e7ee) /* 0.258766106 */, 19 },
7540 /* 7070 */ { MAD_F(0x04241b1c) /* 0.258814915 */, 19 },
7541 /* 7071 */ { MAD_F(0x04244e4a) /* 0.258863726 */, 19 },
7542
7543 /* 7072 */ { MAD_F(0x04248179) /* 0.258912540 */, 19 },
7544 /* 7073 */ { MAD_F(0x0424b4a9) /* 0.258961356 */, 19 },
7545 /* 7074 */ { MAD_F(0x0424e7da) /* 0.259010174 */, 19 },
7546 /* 7075 */ { MAD_F(0x04251b0b) /* 0.259058994 */, 19 },
7547 /* 7076 */ { MAD_F(0x04254e3d) /* 0.259107817 */, 19 },
7548 /* 7077 */ { MAD_F(0x0425816f) /* 0.259156642 */, 19 },
7549 /* 7078 */ { MAD_F(0x0425b4a2) /* 0.259205469 */, 19 },
7550 /* 7079 */ { MAD_F(0x0425e7d6) /* 0.259254298 */, 19 },
7551 /* 7080 */ { MAD_F(0x04261b0a) /* 0.259303130 */, 19 },
7552 /* 7081 */ { MAD_F(0x04264e3f) /* 0.259351964 */, 19 },
7553 /* 7082 */ { MAD_F(0x04268174) /* 0.259400801 */, 19 },
7554 /* 7083 */ { MAD_F(0x0426b4aa) /* 0.259449639 */, 19 },
7555 /* 7084 */ { MAD_F(0x0426e7e1) /* 0.259498480 */, 19 },
7556 /* 7085 */ { MAD_F(0x04271b18) /* 0.259547324 */, 19 },
7557 /* 7086 */ { MAD_F(0x04274e50) /* 0.259596169 */, 19 },
7558 /* 7087 */ { MAD_F(0x04278188) /* 0.259645017 */, 19 },
7559
7560 /* 7088 */ { MAD_F(0x0427b4c2) /* 0.259693868 */, 19 },
7561 /* 7089 */ { MAD_F(0x0427e7fb) /* 0.259742720 */, 19 },
7562 /* 7090 */ { MAD_F(0x04281b36) /* 0.259791575 */, 19 },
7563 /* 7091 */ { MAD_F(0x04284e71) /* 0.259840432 */, 19 },
7564 /* 7092 */ { MAD_F(0x042881ac) /* 0.259889291 */, 19 },
7565 /* 7093 */ { MAD_F(0x0428b4e8) /* 0.259938153 */, 19 },
7566 /* 7094 */ { MAD_F(0x0428e825) /* 0.259987017 */, 19 },
7567 /* 7095 */ { MAD_F(0x04291b63) /* 0.260035883 */, 19 },
7568 /* 7096 */ { MAD_F(0x04294ea1) /* 0.260084752 */, 19 },
7569 /* 7097 */ { MAD_F(0x042981df) /* 0.260133623 */, 19 },
7570 /* 7098 */ { MAD_F(0x0429b51f) /* 0.260182496 */, 19 },
7571 /* 7099 */ { MAD_F(0x0429e85f) /* 0.260231372 */, 19 },
7572 /* 7100 */ { MAD_F(0x042a1b9f) /* 0.260280249 */, 19 },
7573 /* 7101 */ { MAD_F(0x042a4ee0) /* 0.260329129 */, 19 },
7574 /* 7102 */ { MAD_F(0x042a8222) /* 0.260378012 */, 19 },
7575 /* 7103 */ { MAD_F(0x042ab564) /* 0.260426896 */, 19 },
7576
7577 /* 7104 */ { MAD_F(0x042ae8a7) /* 0.260475783 */, 19 },
7578 /* 7105 */ { MAD_F(0x042b1beb) /* 0.260524673 */, 19 },
7579 /* 7106 */ { MAD_F(0x042b4f2f) /* 0.260573564 */, 19 },
7580 /* 7107 */ { MAD_F(0x042b8274) /* 0.260622458 */, 19 },
7581 /* 7108 */ { MAD_F(0x042bb5ba) /* 0.260671354 */, 19 },
7582 /* 7109 */ { MAD_F(0x042be900) /* 0.260720252 */, 19 },
7583 /* 7110 */ { MAD_F(0x042c1c46) /* 0.260769153 */, 19 },
7584 /* 7111 */ { MAD_F(0x042c4f8e) /* 0.260818056 */, 19 },
7585 /* 7112 */ { MAD_F(0x042c82d6) /* 0.260866961 */, 19 },
7586 /* 7113 */ { MAD_F(0x042cb61e) /* 0.260915869 */, 19 },
7587 /* 7114 */ { MAD_F(0x042ce967) /* 0.260964779 */, 19 },
7588 /* 7115 */ { MAD_F(0x042d1cb1) /* 0.261013691 */, 19 },
7589 /* 7116 */ { MAD_F(0x042d4ffb) /* 0.261062606 */, 19 },
7590 /* 7117 */ { MAD_F(0x042d8346) /* 0.261111522 */, 19 },
7591 /* 7118 */ { MAD_F(0x042db692) /* 0.261160441 */, 19 },
7592 /* 7119 */ { MAD_F(0x042de9de) /* 0.261209363 */, 19 },
7593
7594 /* 7120 */ { MAD_F(0x042e1d2b) /* 0.261258286 */, 19 },
7595 /* 7121 */ { MAD_F(0x042e5078) /* 0.261307212 */, 19 },
7596 /* 7122 */ { MAD_F(0x042e83c6) /* 0.261356140 */, 19 },
7597 /* 7123 */ { MAD_F(0x042eb715) /* 0.261405071 */, 19 },
7598 /* 7124 */ { MAD_F(0x042eea64) /* 0.261454004 */, 19 },
7599 /* 7125 */ { MAD_F(0x042f1db4) /* 0.261502939 */, 19 },
7600 /* 7126 */ { MAD_F(0x042f5105) /* 0.261551876 */, 19 },
7601 /* 7127 */ { MAD_F(0x042f8456) /* 0.261600816 */, 19 },
7602 /* 7128 */ { MAD_F(0x042fb7a8) /* 0.261649758 */, 19 },
7603 /* 7129 */ { MAD_F(0x042feafa) /* 0.261698702 */, 19 },
7604 /* 7130 */ { MAD_F(0x04301e4d) /* 0.261747649 */, 19 },
7605 /* 7131 */ { MAD_F(0x043051a1) /* 0.261796597 */, 19 },
7606 /* 7132 */ { MAD_F(0x043084f5) /* 0.261845548 */, 19 },
7607 /* 7133 */ { MAD_F(0x0430b84a) /* 0.261894502 */, 19 },
7608 /* 7134 */ { MAD_F(0x0430eb9f) /* 0.261943458 */, 19 },
7609 /* 7135 */ { MAD_F(0x04311ef5) /* 0.261992416 */, 19 },
7610
7611 /* 7136 */ { MAD_F(0x0431524c) /* 0.262041376 */, 19 },
7612 /* 7137 */ { MAD_F(0x043185a3) /* 0.262090338 */, 19 },
7613 /* 7138 */ { MAD_F(0x0431b8fb) /* 0.262139303 */, 19 },
7614 /* 7139 */ { MAD_F(0x0431ec54) /* 0.262188270 */, 19 },
7615 /* 7140 */ { MAD_F(0x04321fad) /* 0.262237240 */, 19 },
7616 /* 7141 */ { MAD_F(0x04325306) /* 0.262286211 */, 19 },
7617 /* 7142 */ { MAD_F(0x04328661) /* 0.262335185 */, 19 },
7618 /* 7143 */ { MAD_F(0x0432b9bc) /* 0.262384162 */, 19 },
7619 /* 7144 */ { MAD_F(0x0432ed17) /* 0.262433140 */, 19 },
7620 /* 7145 */ { MAD_F(0x04332074) /* 0.262482121 */, 19 },
7621 /* 7146 */ { MAD_F(0x043353d0) /* 0.262531104 */, 19 },
7622 /* 7147 */ { MAD_F(0x0433872e) /* 0.262580089 */, 19 },
7623 /* 7148 */ { MAD_F(0x0433ba8c) /* 0.262629077 */, 19 },
7624 /* 7149 */ { MAD_F(0x0433edea) /* 0.262678067 */, 19 },
7625 /* 7150 */ { MAD_F(0x0434214a) /* 0.262727059 */, 19 },
7626 /* 7151 */ { MAD_F(0x043454aa) /* 0.262776054 */, 19 },
7627
7628 /* 7152 */ { MAD_F(0x0434880a) /* 0.262825051 */, 19 },
7629 /* 7153 */ { MAD_F(0x0434bb6b) /* 0.262874050 */, 19 },
7630 /* 7154 */ { MAD_F(0x0434eecd) /* 0.262923051 */, 19 },
7631 /* 7155 */ { MAD_F(0x0435222f) /* 0.262972055 */, 19 },
7632 /* 7156 */ { MAD_F(0x04355592) /* 0.263021061 */, 19 },
7633 /* 7157 */ { MAD_F(0x043588f6) /* 0.263070069 */, 19 },
7634 /* 7158 */ { MAD_F(0x0435bc5a) /* 0.263119079 */, 19 },
7635 /* 7159 */ { MAD_F(0x0435efbf) /* 0.263168092 */, 19 },
7636 /* 7160 */ { MAD_F(0x04362324) /* 0.263217107 */, 19 },
7637 /* 7161 */ { MAD_F(0x0436568a) /* 0.263266125 */, 19 },
7638 /* 7162 */ { MAD_F(0x043689f1) /* 0.263315144 */, 19 },
7639 /* 7163 */ { MAD_F(0x0436bd58) /* 0.263364166 */, 19 },
7640 /* 7164 */ { MAD_F(0x0436f0c0) /* 0.263413191 */, 19 },
7641 /* 7165 */ { MAD_F(0x04372428) /* 0.263462217 */, 19 },
7642 /* 7166 */ { MAD_F(0x04375791) /* 0.263511246 */, 19 },
7643 /* 7167 */ { MAD_F(0x04378afb) /* 0.263560277 */, 19 },
7644
7645 /* 7168 */ { MAD_F(0x0437be65) /* 0.263609310 */, 19 },
7646 /* 7169 */ { MAD_F(0x0437f1d0) /* 0.263658346 */, 19 },
7647 /* 7170 */ { MAD_F(0x0438253c) /* 0.263707384 */, 19 },
7648 /* 7171 */ { MAD_F(0x043858a8) /* 0.263756424 */, 19 },
7649 /* 7172 */ { MAD_F(0x04388c14) /* 0.263805466 */, 19 },
7650 /* 7173 */ { MAD_F(0x0438bf82) /* 0.263854511 */, 19 },
7651 /* 7174 */ { MAD_F(0x0438f2f0) /* 0.263903558 */, 19 },
7652 /* 7175 */ { MAD_F(0x0439265e) /* 0.263952607 */, 19 },
7653 /* 7176 */ { MAD_F(0x043959cd) /* 0.264001659 */, 19 },
7654 /* 7177 */ { MAD_F(0x04398d3d) /* 0.264050713 */, 19 },
7655 /* 7178 */ { MAD_F(0x0439c0ae) /* 0.264099769 */, 19 },
7656 /* 7179 */ { MAD_F(0x0439f41f) /* 0.264148827 */, 19 },
7657 /* 7180 */ { MAD_F(0x043a2790) /* 0.264197888 */, 19 },
7658 /* 7181 */ { MAD_F(0x043a5b02) /* 0.264246951 */, 19 },
7659 /* 7182 */ { MAD_F(0x043a8e75) /* 0.264296016 */, 19 },
7660 /* 7183 */ { MAD_F(0x043ac1e9) /* 0.264345084 */, 19 },
7661
7662 /* 7184 */ { MAD_F(0x043af55d) /* 0.264394153 */, 19 },
7663 /* 7185 */ { MAD_F(0x043b28d2) /* 0.264443225 */, 19 },
7664 /* 7186 */ { MAD_F(0x043b5c47) /* 0.264492300 */, 19 },
7665 /* 7187 */ { MAD_F(0x043b8fbd) /* 0.264541376 */, 19 },
7666 /* 7188 */ { MAD_F(0x043bc333) /* 0.264590455 */, 19 },
7667 /* 7189 */ { MAD_F(0x043bf6aa) /* 0.264639536 */, 19 },
7668 /* 7190 */ { MAD_F(0x043c2a22) /* 0.264688620 */, 19 },
7669 /* 7191 */ { MAD_F(0x043c5d9a) /* 0.264737706 */, 19 },
7670 /* 7192 */ { MAD_F(0x043c9113) /* 0.264786794 */, 19 },
7671 /* 7193 */ { MAD_F(0x043cc48d) /* 0.264835884 */, 19 },
7672 /* 7194 */ { MAD_F(0x043cf807) /* 0.264884976 */, 19 },
7673 /* 7195 */ { MAD_F(0x043d2b82) /* 0.264934071 */, 19 },
7674 /* 7196 */ { MAD_F(0x043d5efd) /* 0.264983168 */, 19 },
7675 /* 7197 */ { MAD_F(0x043d9279) /* 0.265032268 */, 19 },
7676 /* 7198 */ { MAD_F(0x043dc5f6) /* 0.265081369 */, 19 },
7677 /* 7199 */ { MAD_F(0x043df973) /* 0.265130473 */, 19 },
7678
7679 /* 7200 */ { MAD_F(0x043e2cf1) /* 0.265179580 */, 19 },
7680 /* 7201 */ { MAD_F(0x043e6070) /* 0.265228688 */, 19 },
7681 /* 7202 */ { MAD_F(0x043e93ef) /* 0.265277799 */, 19 },
7682 /* 7203 */ { MAD_F(0x043ec76e) /* 0.265326912 */, 19 },
7683 /* 7204 */ { MAD_F(0x043efaef) /* 0.265376027 */, 19 },
7684 /* 7205 */ { MAD_F(0x043f2e6f) /* 0.265425145 */, 19 },
7685 /* 7206 */ { MAD_F(0x043f61f1) /* 0.265474264 */, 19 },
7686 /* 7207 */ { MAD_F(0x043f9573) /* 0.265523387 */, 19 },
7687 /* 7208 */ { MAD_F(0x043fc8f6) /* 0.265572511 */, 19 },
7688 /* 7209 */ { MAD_F(0x043ffc79) /* 0.265621638 */, 19 },
7689 /* 7210 */ { MAD_F(0x04402ffd) /* 0.265670766 */, 19 },
7690 /* 7211 */ { MAD_F(0x04406382) /* 0.265719898 */, 19 },
7691 /* 7212 */ { MAD_F(0x04409707) /* 0.265769031 */, 19 },
7692 /* 7213 */ { MAD_F(0x0440ca8d) /* 0.265818167 */, 19 },
7693 /* 7214 */ { MAD_F(0x0440fe13) /* 0.265867305 */, 19 },
7694 /* 7215 */ { MAD_F(0x0441319a) /* 0.265916445 */, 19 },
7695
7696 /* 7216 */ { MAD_F(0x04416522) /* 0.265965588 */, 19 },
7697 /* 7217 */ { MAD_F(0x044198aa) /* 0.266014732 */, 19 },
7698 /* 7218 */ { MAD_F(0x0441cc33) /* 0.266063880 */, 19 },
7699 /* 7219 */ { MAD_F(0x0441ffbc) /* 0.266113029 */, 19 },
7700 /* 7220 */ { MAD_F(0x04423346) /* 0.266162181 */, 19 },
7701 /* 7221 */ { MAD_F(0x044266d1) /* 0.266211334 */, 19 },
7702 /* 7222 */ { MAD_F(0x04429a5c) /* 0.266260491 */, 19 },
7703 /* 7223 */ { MAD_F(0x0442cde8) /* 0.266309649 */, 19 },
7704 /* 7224 */ { MAD_F(0x04430174) /* 0.266358810 */, 19 },
7705 /* 7225 */ { MAD_F(0x04433501) /* 0.266407973 */, 19 },
7706 /* 7226 */ { MAD_F(0x0443688f) /* 0.266457138 */, 19 },
7707 /* 7227 */ { MAD_F(0x04439c1d) /* 0.266506305 */, 19 },
7708 /* 7228 */ { MAD_F(0x0443cfac) /* 0.266555475 */, 19 },
7709 /* 7229 */ { MAD_F(0x0444033c) /* 0.266604647 */, 19 },
7710 /* 7230 */ { MAD_F(0x044436cc) /* 0.266653822 */, 19 },
7711 /* 7231 */ { MAD_F(0x04446a5d) /* 0.266702998 */, 19 },
7712
7713 /* 7232 */ { MAD_F(0x04449dee) /* 0.266752177 */, 19 },
7714 /* 7233 */ { MAD_F(0x0444d180) /* 0.266801358 */, 19 },
7715 /* 7234 */ { MAD_F(0x04450513) /* 0.266850541 */, 19 },
7716 /* 7235 */ { MAD_F(0x044538a6) /* 0.266899727 */, 19 },
7717 /* 7236 */ { MAD_F(0x04456c39) /* 0.266948915 */, 19 },
7718 /* 7237 */ { MAD_F(0x04459fce) /* 0.266998105 */, 19 },
7719 /* 7238 */ { MAD_F(0x0445d363) /* 0.267047298 */, 19 },
7720 /* 7239 */ { MAD_F(0x044606f8) /* 0.267096492 */, 19 },
7721 /* 7240 */ { MAD_F(0x04463a8f) /* 0.267145689 */, 19 },
7722 /* 7241 */ { MAD_F(0x04466e25) /* 0.267194888 */, 19 },
7723 /* 7242 */ { MAD_F(0x0446a1bd) /* 0.267244090 */, 19 },
7724 /* 7243 */ { MAD_F(0x0446d555) /* 0.267293294 */, 19 },
7725 /* 7244 */ { MAD_F(0x044708ee) /* 0.267342500 */, 19 },
7726 /* 7245 */ { MAD_F(0x04473c87) /* 0.267391708 */, 19 },
7727 /* 7246 */ { MAD_F(0x04477021) /* 0.267440919 */, 19 },
7728 /* 7247 */ { MAD_F(0x0447a3bb) /* 0.267490131 */, 19 },
7729
7730 /* 7248 */ { MAD_F(0x0447d756) /* 0.267539347 */, 19 },
7731 /* 7249 */ { MAD_F(0x04480af2) /* 0.267588564 */, 19 },
7732 /* 7250 */ { MAD_F(0x04483e8e) /* 0.267637783 */, 19 },
7733 /* 7251 */ { MAD_F(0x0448722b) /* 0.267687005 */, 19 },
7734 /* 7252 */ { MAD_F(0x0448a5c9) /* 0.267736229 */, 19 },
7735 /* 7253 */ { MAD_F(0x0448d967) /* 0.267785456 */, 19 },
7736 /* 7254 */ { MAD_F(0x04490d05) /* 0.267834685 */, 19 },
7737 /* 7255 */ { MAD_F(0x044940a5) /* 0.267883915 */, 19 },
7738 /* 7256 */ { MAD_F(0x04497445) /* 0.267933149 */, 19 },
7739 /* 7257 */ { MAD_F(0x0449a7e5) /* 0.267982384 */, 19 },
7740 /* 7258 */ { MAD_F(0x0449db86) /* 0.268031622 */, 19 },
7741 /* 7259 */ { MAD_F(0x044a0f28) /* 0.268080862 */, 19 },
7742 /* 7260 */ { MAD_F(0x044a42ca) /* 0.268130104 */, 19 },
7743 /* 7261 */ { MAD_F(0x044a766d) /* 0.268179349 */, 19 },
7744 /* 7262 */ { MAD_F(0x044aaa11) /* 0.268228595 */, 19 },
7745 /* 7263 */ { MAD_F(0x044addb5) /* 0.268277844 */, 19 },
7746
7747 /* 7264 */ { MAD_F(0x044b115a) /* 0.268327096 */, 19 },
7748 /* 7265 */ { MAD_F(0x044b44ff) /* 0.268376349 */, 19 },
7749 /* 7266 */ { MAD_F(0x044b78a5) /* 0.268425605 */, 19 },
7750 /* 7267 */ { MAD_F(0x044bac4c) /* 0.268474863 */, 19 },
7751 /* 7268 */ { MAD_F(0x044bdff3) /* 0.268524123 */, 19 },
7752 /* 7269 */ { MAD_F(0x044c139b) /* 0.268573386 */, 19 },
7753 /* 7270 */ { MAD_F(0x044c4743) /* 0.268622651 */, 19 },
7754 /* 7271 */ { MAD_F(0x044c7aec) /* 0.268671918 */, 19 },
7755 /* 7272 */ { MAD_F(0x044cae96) /* 0.268721187 */, 19 },
7756 /* 7273 */ { MAD_F(0x044ce240) /* 0.268770459 */, 19 },
7757 /* 7274 */ { MAD_F(0x044d15eb) /* 0.268819733 */, 19 },
7758 /* 7275 */ { MAD_F(0x044d4997) /* 0.268869009 */, 19 },
7759 /* 7276 */ { MAD_F(0x044d7d43) /* 0.268918287 */, 19 },
7760 /* 7277 */ { MAD_F(0x044db0ef) /* 0.268967568 */, 19 },
7761 /* 7278 */ { MAD_F(0x044de49d) /* 0.269016851 */, 19 },
7762 /* 7279 */ { MAD_F(0x044e184b) /* 0.269066136 */, 19 },
7763
7764 /* 7280 */ { MAD_F(0x044e4bf9) /* 0.269115423 */, 19 },
7765 /* 7281 */ { MAD_F(0x044e7fa8) /* 0.269164713 */, 19 },
7766 /* 7282 */ { MAD_F(0x044eb358) /* 0.269214005 */, 19 },
7767 /* 7283 */ { MAD_F(0x044ee708) /* 0.269263299 */, 19 },
7768 /* 7284 */ { MAD_F(0x044f1ab9) /* 0.269312595 */, 19 },
7769 /* 7285 */ { MAD_F(0x044f4e6b) /* 0.269361894 */, 19 },
7770 /* 7286 */ { MAD_F(0x044f821d) /* 0.269411195 */, 19 },
7771 /* 7287 */ { MAD_F(0x044fb5cf) /* 0.269460498 */, 19 },
7772 /* 7288 */ { MAD_F(0x044fe983) /* 0.269509804 */, 19 },
7773 /* 7289 */ { MAD_F(0x04501d37) /* 0.269559111 */, 19 },
7774 /* 7290 */ { MAD_F(0x045050eb) /* 0.269608421 */, 19 },
7775 /* 7291 */ { MAD_F(0x045084a0) /* 0.269657734 */, 19 },
7776 /* 7292 */ { MAD_F(0x0450b856) /* 0.269707048 */, 19 },
7777 /* 7293 */ { MAD_F(0x0450ec0d) /* 0.269756365 */, 19 },
7778 /* 7294 */ { MAD_F(0x04511fc4) /* 0.269805684 */, 19 },
7779 /* 7295 */ { MAD_F(0x0451537b) /* 0.269855005 */, 19 },
7780
7781 /* 7296 */ { MAD_F(0x04518733) /* 0.269904329 */, 19 },
7782 /* 7297 */ { MAD_F(0x0451baec) /* 0.269953654 */, 19 },
7783 /* 7298 */ { MAD_F(0x0451eea5) /* 0.270002982 */, 19 },
7784 /* 7299 */ { MAD_F(0x0452225f) /* 0.270052313 */, 19 },
7785 /* 7300 */ { MAD_F(0x0452561a) /* 0.270101645 */, 19 },
7786 /* 7301 */ { MAD_F(0x045289d5) /* 0.270150980 */, 19 },
7787 /* 7302 */ { MAD_F(0x0452bd91) /* 0.270200317 */, 19 },
7788 /* 7303 */ { MAD_F(0x0452f14d) /* 0.270249656 */, 19 },
7789 /* 7304 */ { MAD_F(0x0453250a) /* 0.270298998 */, 19 },
7790 /* 7305 */ { MAD_F(0x045358c8) /* 0.270348341 */, 19 },
7791 /* 7306 */ { MAD_F(0x04538c86) /* 0.270397687 */, 19 },
7792 /* 7307 */ { MAD_F(0x0453c045) /* 0.270447036 */, 19 },
7793 /* 7308 */ { MAD_F(0x0453f405) /* 0.270496386 */, 19 },
7794 /* 7309 */ { MAD_F(0x045427c5) /* 0.270545739 */, 19 },
7795 /* 7310 */ { MAD_F(0x04545b85) /* 0.270595094 */, 19 },
7796 /* 7311 */ { MAD_F(0x04548f46) /* 0.270644451 */, 19 },
7797
7798 /* 7312 */ { MAD_F(0x0454c308) /* 0.270693811 */, 19 },
7799 /* 7313 */ { MAD_F(0x0454f6cb) /* 0.270743173 */, 19 },
7800 /* 7314 */ { MAD_F(0x04552a8e) /* 0.270792537 */, 19 },
7801 /* 7315 */ { MAD_F(0x04555e51) /* 0.270841903 */, 19 },
7802 /* 7316 */ { MAD_F(0x04559216) /* 0.270891271 */, 19 },
7803 /* 7317 */ { MAD_F(0x0455c5db) /* 0.270940642 */, 19 },
7804 /* 7318 */ { MAD_F(0x0455f9a0) /* 0.270990015 */, 19 },
7805 /* 7319 */ { MAD_F(0x04562d66) /* 0.271039390 */, 19 },
7806 /* 7320 */ { MAD_F(0x0456612d) /* 0.271088768 */, 19 },
7807 /* 7321 */ { MAD_F(0x045694f4) /* 0.271138148 */, 19 },
7808 /* 7322 */ { MAD_F(0x0456c8bc) /* 0.271187530 */, 19 },
7809 /* 7323 */ { MAD_F(0x0456fc84) /* 0.271236914 */, 19 },
7810 /* 7324 */ { MAD_F(0x0457304e) /* 0.271286301 */, 19 },
7811 /* 7325 */ { MAD_F(0x04576417) /* 0.271335689 */, 19 },
7812 /* 7326 */ { MAD_F(0x045797e2) /* 0.271385080 */, 19 },
7813 /* 7327 */ { MAD_F(0x0457cbac) /* 0.271434474 */, 19 },
7814
7815 /* 7328 */ { MAD_F(0x0457ff78) /* 0.271483869 */, 19 },
7816 /* 7329 */ { MAD_F(0x04583344) /* 0.271533267 */, 19 },
7817 /* 7330 */ { MAD_F(0x04586711) /* 0.271582667 */, 19 },
7818 /* 7331 */ { MAD_F(0x04589ade) /* 0.271632069 */, 19 },
7819 /* 7332 */ { MAD_F(0x0458ceac) /* 0.271681474 */, 19 },
7820 /* 7333 */ { MAD_F(0x0459027b) /* 0.271730880 */, 19 },
7821 /* 7334 */ { MAD_F(0x0459364a) /* 0.271780289 */, 19 },
7822 /* 7335 */ { MAD_F(0x04596a19) /* 0.271829701 */, 19 },
7823 /* 7336 */ { MAD_F(0x04599dea) /* 0.271879114 */, 19 },
7824 /* 7337 */ { MAD_F(0x0459d1bb) /* 0.271928530 */, 19 },
7825 /* 7338 */ { MAD_F(0x045a058c) /* 0.271977948 */, 19 },
7826 /* 7339 */ { MAD_F(0x045a395e) /* 0.272027368 */, 19 },
7827 /* 7340 */ { MAD_F(0x045a6d31) /* 0.272076790 */, 19 },
7828 /* 7341 */ { MAD_F(0x045aa104) /* 0.272126215 */, 19 },
7829 /* 7342 */ { MAD_F(0x045ad4d8) /* 0.272175642 */, 19 },
7830 /* 7343 */ { MAD_F(0x045b08ad) /* 0.272225071 */, 19 },
7831
7832 /* 7344 */ { MAD_F(0x045b3c82) /* 0.272274503 */, 19 },
7833 /* 7345 */ { MAD_F(0x045b7058) /* 0.272323936 */, 19 },
7834 /* 7346 */ { MAD_F(0x045ba42e) /* 0.272373372 */, 19 },
7835 /* 7347 */ { MAD_F(0x045bd805) /* 0.272422810 */, 19 },
7836 /* 7348 */ { MAD_F(0x045c0bdd) /* 0.272472251 */, 19 },
7837 /* 7349 */ { MAD_F(0x045c3fb5) /* 0.272521693 */, 19 },
7838 /* 7350 */ { MAD_F(0x045c738e) /* 0.272571138 */, 19 },
7839 /* 7351 */ { MAD_F(0x045ca767) /* 0.272620585 */, 19 },
7840 /* 7352 */ { MAD_F(0x045cdb41) /* 0.272670035 */, 19 },
7841 /* 7353 */ { MAD_F(0x045d0f1b) /* 0.272719486 */, 19 },
7842 /* 7354 */ { MAD_F(0x045d42f7) /* 0.272768940 */, 19 },
7843 /* 7355 */ { MAD_F(0x045d76d2) /* 0.272818396 */, 19 },
7844 /* 7356 */ { MAD_F(0x045daaaf) /* 0.272867855 */, 19 },
7845 /* 7357 */ { MAD_F(0x045dde8c) /* 0.272917315 */, 19 },
7846 /* 7358 */ { MAD_F(0x045e1269) /* 0.272966778 */, 19 },
7847 /* 7359 */ { MAD_F(0x045e4647) /* 0.273016243 */, 19 },
7848
7849 /* 7360 */ { MAD_F(0x045e7a26) /* 0.273065710 */, 19 },
7850 /* 7361 */ { MAD_F(0x045eae06) /* 0.273115180 */, 19 },
7851 /* 7362 */ { MAD_F(0x045ee1e6) /* 0.273164652 */, 19 },
7852 /* 7363 */ { MAD_F(0x045f15c6) /* 0.273214126 */, 19 },
7853 /* 7364 */ { MAD_F(0x045f49a7) /* 0.273263602 */, 19 },
7854 /* 7365 */ { MAD_F(0x045f7d89) /* 0.273313081 */, 19 },
7855 /* 7366 */ { MAD_F(0x045fb16c) /* 0.273362561 */, 19 },
7856 /* 7367 */ { MAD_F(0x045fe54f) /* 0.273412044 */, 19 },
7857 /* 7368 */ { MAD_F(0x04601932) /* 0.273461530 */, 19 },
7858 /* 7369 */ { MAD_F(0x04604d16) /* 0.273511017 */, 19 },
7859 /* 7370 */ { MAD_F(0x046080fb) /* 0.273560507 */, 19 },
7860 /* 7371 */ { MAD_F(0x0460b4e1) /* 0.273609999 */, 19 },
7861 /* 7372 */ { MAD_F(0x0460e8c7) /* 0.273659493 */, 19 },
7862 /* 7373 */ { MAD_F(0x04611cad) /* 0.273708989 */, 19 },
7863 /* 7374 */ { MAD_F(0x04615094) /* 0.273758488 */, 19 },
7864 /* 7375 */ { MAD_F(0x0461847c) /* 0.273807989 */, 19 },
7865
7866 /* 7376 */ { MAD_F(0x0461b864) /* 0.273857492 */, 19 },
7867 /* 7377 */ { MAD_F(0x0461ec4d) /* 0.273906997 */, 19 },
7868 /* 7378 */ { MAD_F(0x04622037) /* 0.273956505 */, 19 },
7869 /* 7379 */ { MAD_F(0x04625421) /* 0.274006015 */, 19 },
7870 /* 7380 */ { MAD_F(0x0462880c) /* 0.274055527 */, 19 },
7871 /* 7381 */ { MAD_F(0x0462bbf7) /* 0.274105041 */, 19 },
7872 /* 7382 */ { MAD_F(0x0462efe3) /* 0.274154558 */, 19 },
7873 /* 7383 */ { MAD_F(0x046323d0) /* 0.274204076 */, 19 },
7874 /* 7384 */ { MAD_F(0x046357bd) /* 0.274253597 */, 19 },
7875 /* 7385 */ { MAD_F(0x04638bab) /* 0.274303121 */, 19 },
7876 /* 7386 */ { MAD_F(0x0463bf99) /* 0.274352646 */, 19 },
7877 /* 7387 */ { MAD_F(0x0463f388) /* 0.274402174 */, 19 },
7878 /* 7388 */ { MAD_F(0x04642778) /* 0.274451704 */, 19 },
7879 /* 7389 */ { MAD_F(0x04645b68) /* 0.274501236 */, 19 },
7880 /* 7390 */ { MAD_F(0x04648f59) /* 0.274550771 */, 19 },
7881 /* 7391 */ { MAD_F(0x0464c34a) /* 0.274600307 */, 19 },
7882
7883 /* 7392 */ { MAD_F(0x0464f73c) /* 0.274649846 */, 19 },
7884 /* 7393 */ { MAD_F(0x04652b2f) /* 0.274699387 */, 19 },
7885 /* 7394 */ { MAD_F(0x04655f22) /* 0.274748931 */, 19 },
7886 /* 7395 */ { MAD_F(0x04659316) /* 0.274798476 */, 19 },
7887 /* 7396 */ { MAD_F(0x0465c70a) /* 0.274848024 */, 19 },
7888 /* 7397 */ { MAD_F(0x0465faff) /* 0.274897574 */, 19 },
7889 /* 7398 */ { MAD_F(0x04662ef5) /* 0.274947126 */, 19 },
7890 /* 7399 */ { MAD_F(0x046662eb) /* 0.274996681 */, 19 },
7891 /* 7400 */ { MAD_F(0x046696e2) /* 0.275046238 */, 19 },
7892 /* 7401 */ { MAD_F(0x0466cad9) /* 0.275095797 */, 19 },
7893 /* 7402 */ { MAD_F(0x0466fed1) /* 0.275145358 */, 19 },
7894 /* 7403 */ { MAD_F(0x046732ca) /* 0.275194921 */, 19 },
7895 /* 7404 */ { MAD_F(0x046766c3) /* 0.275244487 */, 19 },
7896 /* 7405 */ { MAD_F(0x04679abd) /* 0.275294055 */, 19 },
7897 /* 7406 */ { MAD_F(0x0467ceb7) /* 0.275343625 */, 19 },
7898 /* 7407 */ { MAD_F(0x046802b2) /* 0.275393198 */, 19 },
7899
7900 /* 7408 */ { MAD_F(0x046836ae) /* 0.275442772 */, 19 },
7901 /* 7409 */ { MAD_F(0x04686aaa) /* 0.275492349 */, 19 },
7902 /* 7410 */ { MAD_F(0x04689ea7) /* 0.275541928 */, 19 },
7903 /* 7411 */ { MAD_F(0x0468d2a4) /* 0.275591509 */, 19 },
7904 /* 7412 */ { MAD_F(0x046906a2) /* 0.275641093 */, 19 },
7905 /* 7413 */ { MAD_F(0x04693aa1) /* 0.275690679 */, 19 },
7906 /* 7414 */ { MAD_F(0x04696ea0) /* 0.275740267 */, 19 },
7907 /* 7415 */ { MAD_F(0x0469a2a0) /* 0.275789857 */, 19 },
7908 /* 7416 */ { MAD_F(0x0469d6a0) /* 0.275839449 */, 19 },
7909 /* 7417 */ { MAD_F(0x046a0aa1) /* 0.275889044 */, 19 },
7910 /* 7418 */ { MAD_F(0x046a3ea3) /* 0.275938641 */, 19 },
7911 /* 7419 */ { MAD_F(0x046a72a5) /* 0.275988240 */, 19 },
7912 /* 7420 */ { MAD_F(0x046aa6a8) /* 0.276037842 */, 19 },
7913 /* 7421 */ { MAD_F(0x046adaab) /* 0.276087445 */, 19 },
7914 /* 7422 */ { MAD_F(0x046b0eaf) /* 0.276137051 */, 19 },
7915 /* 7423 */ { MAD_F(0x046b42b3) /* 0.276186659 */, 19 },
7916
7917 /* 7424 */ { MAD_F(0x046b76b9) /* 0.276236269 */, 19 },
7918 /* 7425 */ { MAD_F(0x046baabe) /* 0.276285882 */, 19 },
7919 /* 7426 */ { MAD_F(0x046bdec5) /* 0.276335497 */, 19 },
7920 /* 7427 */ { MAD_F(0x046c12cc) /* 0.276385113 */, 19 },
7921 /* 7428 */ { MAD_F(0x046c46d3) /* 0.276434733 */, 19 },
7922 /* 7429 */ { MAD_F(0x046c7adb) /* 0.276484354 */, 19 },
7923 /* 7430 */ { MAD_F(0x046caee4) /* 0.276533978 */, 19 },
7924 /* 7431 */ { MAD_F(0x046ce2ee) /* 0.276583604 */, 19 },
7925 /* 7432 */ { MAD_F(0x046d16f7) /* 0.276633232 */, 19 },
7926 /* 7433 */ { MAD_F(0x046d4b02) /* 0.276682862 */, 19 },
7927 /* 7434 */ { MAD_F(0x046d7f0d) /* 0.276732495 */, 19 },
7928 /* 7435 */ { MAD_F(0x046db319) /* 0.276782129 */, 19 },
7929 /* 7436 */ { MAD_F(0x046de725) /* 0.276831766 */, 19 },
7930 /* 7437 */ { MAD_F(0x046e1b32) /* 0.276881406 */, 19 },
7931 /* 7438 */ { MAD_F(0x046e4f40) /* 0.276931047 */, 19 },
7932 /* 7439 */ { MAD_F(0x046e834e) /* 0.276980691 */, 19 },
7933
7934 /* 7440 */ { MAD_F(0x046eb75c) /* 0.277030337 */, 19 },
7935 /* 7441 */ { MAD_F(0x046eeb6c) /* 0.277079985 */, 19 },
7936 /* 7442 */ { MAD_F(0x046f1f7c) /* 0.277129635 */, 19 },
7937 /* 7443 */ { MAD_F(0x046f538c) /* 0.277179288 */, 19 },
7938 /* 7444 */ { MAD_F(0x046f879d) /* 0.277228942 */, 19 },
7939 /* 7445 */ { MAD_F(0x046fbbaf) /* 0.277278600 */, 19 },
7940 /* 7446 */ { MAD_F(0x046fefc1) /* 0.277328259 */, 19 },
7941 /* 7447 */ { MAD_F(0x047023d4) /* 0.277377920 */, 19 },
7942 /* 7448 */ { MAD_F(0x047057e8) /* 0.277427584 */, 19 },
7943 /* 7449 */ { MAD_F(0x04708bfc) /* 0.277477250 */, 19 },
7944 /* 7450 */ { MAD_F(0x0470c011) /* 0.277526918 */, 19 },
7945 /* 7451 */ { MAD_F(0x0470f426) /* 0.277576588 */, 19 },
7946 /* 7452 */ { MAD_F(0x0471283c) /* 0.277626261 */, 19 },
7947 /* 7453 */ { MAD_F(0x04715c52) /* 0.277675936 */, 19 },
7948 /* 7454 */ { MAD_F(0x04719069) /* 0.277725613 */, 19 },
7949 /* 7455 */ { MAD_F(0x0471c481) /* 0.277775292 */, 19 },
7950
7951 /* 7456 */ { MAD_F(0x0471f899) /* 0.277824973 */, 19 },
7952 /* 7457 */ { MAD_F(0x04722cb2) /* 0.277874657 */, 19 },
7953 /* 7458 */ { MAD_F(0x047260cc) /* 0.277924343 */, 19 },
7954 /* 7459 */ { MAD_F(0x047294e6) /* 0.277974031 */, 19 },
7955 /* 7460 */ { MAD_F(0x0472c900) /* 0.278023722 */, 19 },
7956 /* 7461 */ { MAD_F(0x0472fd1b) /* 0.278073414 */, 19 },
7957 /* 7462 */ { MAD_F(0x04733137) /* 0.278123109 */, 19 },
7958 /* 7463 */ { MAD_F(0x04736554) /* 0.278172806 */, 19 },
7959 /* 7464 */ { MAD_F(0x04739971) /* 0.278222505 */, 19 },
7960 /* 7465 */ { MAD_F(0x0473cd8e) /* 0.278272207 */, 19 },
7961 /* 7466 */ { MAD_F(0x047401ad) /* 0.278321910 */, 19 },
7962 /* 7467 */ { MAD_F(0x047435cb) /* 0.278371616 */, 19 },
7963 /* 7468 */ { MAD_F(0x047469eb) /* 0.278421324 */, 19 },
7964 /* 7469 */ { MAD_F(0x04749e0b) /* 0.278471035 */, 19 },
7965 /* 7470 */ { MAD_F(0x0474d22c) /* 0.278520747 */, 19 },
7966 /* 7471 */ { MAD_F(0x0475064d) /* 0.278570462 */, 19 },
7967
7968 /* 7472 */ { MAD_F(0x04753a6f) /* 0.278620179 */, 19 },
7969 /* 7473 */ { MAD_F(0x04756e91) /* 0.278669898 */, 19 },
7970 /* 7474 */ { MAD_F(0x0475a2b4) /* 0.278719619 */, 19 },
7971 /* 7475 */ { MAD_F(0x0475d6d7) /* 0.278769343 */, 19 },
7972 /* 7476 */ { MAD_F(0x04760afc) /* 0.278819069 */, 19 },
7973 /* 7477 */ { MAD_F(0x04763f20) /* 0.278868797 */, 19 },
7974 /* 7478 */ { MAD_F(0x04767346) /* 0.278918527 */, 19 },
7975 /* 7479 */ { MAD_F(0x0476a76c) /* 0.278968260 */, 19 },
7976 /* 7480 */ { MAD_F(0x0476db92) /* 0.279017995 */, 19 },
7977 /* 7481 */ { MAD_F(0x04770fba) /* 0.279067731 */, 19 },
7978 /* 7482 */ { MAD_F(0x047743e1) /* 0.279117471 */, 19 },
7979 /* 7483 */ { MAD_F(0x0477780a) /* 0.279167212 */, 19 },
7980 /* 7484 */ { MAD_F(0x0477ac33) /* 0.279216956 */, 19 },
7981 /* 7485 */ { MAD_F(0x0477e05c) /* 0.279266701 */, 19 },
7982 /* 7486 */ { MAD_F(0x04781486) /* 0.279316449 */, 19 },
7983 /* 7487 */ { MAD_F(0x047848b1) /* 0.279366200 */, 19 },
7984
7985 /* 7488 */ { MAD_F(0x04787cdc) /* 0.279415952 */, 19 },
7986 /* 7489 */ { MAD_F(0x0478b108) /* 0.279465707 */, 19 },
7987 /* 7490 */ { MAD_F(0x0478e535) /* 0.279515464 */, 19 },
7988 /* 7491 */ { MAD_F(0x04791962) /* 0.279565223 */, 19 },
7989 /* 7492 */ { MAD_F(0x04794d8f) /* 0.279614984 */, 19 },
7990 /* 7493 */ { MAD_F(0x047981be) /* 0.279664748 */, 19 },
7991 /* 7494 */ { MAD_F(0x0479b5ed) /* 0.279714513 */, 19 },
7992 /* 7495 */ { MAD_F(0x0479ea1c) /* 0.279764281 */, 19 },
7993 /* 7496 */ { MAD_F(0x047a1e4c) /* 0.279814051 */, 19 },
7994 /* 7497 */ { MAD_F(0x047a527d) /* 0.279863824 */, 19 },
7995 /* 7498 */ { MAD_F(0x047a86ae) /* 0.279913598 */, 19 },
7996 /* 7499 */ { MAD_F(0x047abae0) /* 0.279963375 */, 19 },
7997 /* 7500 */ { MAD_F(0x047aef12) /* 0.280013154 */, 19 },
7998 /* 7501 */ { MAD_F(0x047b2346) /* 0.280062935 */, 19 },
7999 /* 7502 */ { MAD_F(0x047b5779) /* 0.280112719 */, 19 },
8000 /* 7503 */ { MAD_F(0x047b8bad) /* 0.280162504 */, 19 },
8001
8002 /* 7504 */ { MAD_F(0x047bbfe2) /* 0.280212292 */, 19 },
8003 /* 7505 */ { MAD_F(0x047bf418) /* 0.280262082 */, 19 },
8004 /* 7506 */ { MAD_F(0x047c284e) /* 0.280311875 */, 19 },
8005 /* 7507 */ { MAD_F(0x047c5c84) /* 0.280361669 */, 19 },
8006 /* 7508 */ { MAD_F(0x047c90bb) /* 0.280411466 */, 19 },
8007 /* 7509 */ { MAD_F(0x047cc4f3) /* 0.280461265 */, 19 },
8008 /* 7510 */ { MAD_F(0x047cf92c) /* 0.280511066 */, 19 },
8009 /* 7511 */ { MAD_F(0x047d2d65) /* 0.280560869 */, 19 },
8010 /* 7512 */ { MAD_F(0x047d619e) /* 0.280610675 */, 19 },
8011 /* 7513 */ { MAD_F(0x047d95d8) /* 0.280660483 */, 19 },
8012 /* 7514 */ { MAD_F(0x047dca13) /* 0.280710292 */, 19 },
8013 /* 7515 */ { MAD_F(0x047dfe4e) /* 0.280760105 */, 19 },
8014 /* 7516 */ { MAD_F(0x047e328a) /* 0.280809919 */, 19 },
8015 /* 7517 */ { MAD_F(0x047e66c7) /* 0.280859736 */, 19 },
8016 /* 7518 */ { MAD_F(0x047e9b04) /* 0.280909554 */, 19 },
8017 /* 7519 */ { MAD_F(0x047ecf42) /* 0.280959375 */, 19 },
8018
8019 /* 7520 */ { MAD_F(0x047f0380) /* 0.281009199 */, 19 },
8020 /* 7521 */ { MAD_F(0x047f37bf) /* 0.281059024 */, 19 },
8021 /* 7522 */ { MAD_F(0x047f6bff) /* 0.281108852 */, 19 },
8022 /* 7523 */ { MAD_F(0x047fa03f) /* 0.281158682 */, 19 },
8023 /* 7524 */ { MAD_F(0x047fd47f) /* 0.281208514 */, 19 },
8024 /* 7525 */ { MAD_F(0x048008c1) /* 0.281258348 */, 19 },
8025 /* 7526 */ { MAD_F(0x04803d02) /* 0.281308184 */, 19 },
8026 /* 7527 */ { MAD_F(0x04807145) /* 0.281358023 */, 19 },
8027 /* 7528 */ { MAD_F(0x0480a588) /* 0.281407864 */, 19 },
8028 /* 7529 */ { MAD_F(0x0480d9cc) /* 0.281457707 */, 19 },
8029 /* 7530 */ { MAD_F(0x04810e10) /* 0.281507552 */, 19 },
8030 /* 7531 */ { MAD_F(0x04814255) /* 0.281557400 */, 19 },
8031 /* 7532 */ { MAD_F(0x0481769a) /* 0.281607250 */, 19 },
8032 /* 7533 */ { MAD_F(0x0481aae0) /* 0.281657101 */, 19 },
8033 /* 7534 */ { MAD_F(0x0481df27) /* 0.281706956 */, 19 },
8034 /* 7535 */ { MAD_F(0x0482136e) /* 0.281756812 */, 19 },
8035
8036 /* 7536 */ { MAD_F(0x048247b6) /* 0.281806670 */, 19 },
8037 /* 7537 */ { MAD_F(0x04827bfe) /* 0.281856531 */, 19 },
8038 /* 7538 */ { MAD_F(0x0482b047) /* 0.281906394 */, 19 },
8039 /* 7539 */ { MAD_F(0x0482e491) /* 0.281956259 */, 19 },
8040 /* 7540 */ { MAD_F(0x048318db) /* 0.282006127 */, 19 },
8041 /* 7541 */ { MAD_F(0x04834d26) /* 0.282055996 */, 19 },
8042 /* 7542 */ { MAD_F(0x04838171) /* 0.282105868 */, 19 },
8043 /* 7543 */ { MAD_F(0x0483b5bd) /* 0.282155742 */, 19 },
8044 /* 7544 */ { MAD_F(0x0483ea0a) /* 0.282205618 */, 19 },
8045 /* 7545 */ { MAD_F(0x04841e57) /* 0.282255496 */, 19 },
8046 /* 7546 */ { MAD_F(0x048452a4) /* 0.282305377 */, 19 },
8047 /* 7547 */ { MAD_F(0x048486f3) /* 0.282355260 */, 19 },
8048 /* 7548 */ { MAD_F(0x0484bb42) /* 0.282405145 */, 19 },
8049 /* 7549 */ { MAD_F(0x0484ef91) /* 0.282455032 */, 19 },
8050 /* 7550 */ { MAD_F(0x048523e1) /* 0.282504921 */, 19 },
8051 /* 7551 */ { MAD_F(0x04855832) /* 0.282554813 */, 19 },
8052
8053 /* 7552 */ { MAD_F(0x04858c83) /* 0.282604707 */, 19 },
8054 /* 7553 */ { MAD_F(0x0485c0d5) /* 0.282654603 */, 19 },
8055 /* 7554 */ { MAD_F(0x0485f527) /* 0.282704501 */, 19 },
8056 /* 7555 */ { MAD_F(0x0486297a) /* 0.282754401 */, 19 },
8057 /* 7556 */ { MAD_F(0x04865dce) /* 0.282804304 */, 19 },
8058 /* 7557 */ { MAD_F(0x04869222) /* 0.282854209 */, 19 },
8059 /* 7558 */ { MAD_F(0x0486c677) /* 0.282904116 */, 19 },
8060 /* 7559 */ { MAD_F(0x0486facc) /* 0.282954025 */, 19 },
8061 /* 7560 */ { MAD_F(0x04872f22) /* 0.283003936 */, 19 },
8062 /* 7561 */ { MAD_F(0x04876379) /* 0.283053850 */, 19 },
8063 /* 7562 */ { MAD_F(0x048797d0) /* 0.283103766 */, 19 },
8064 /* 7563 */ { MAD_F(0x0487cc28) /* 0.283153684 */, 19 },
8065 /* 7564 */ { MAD_F(0x04880080) /* 0.283203604 */, 19 },
8066 /* 7565 */ { MAD_F(0x048834d9) /* 0.283253527 */, 19 },
8067 /* 7566 */ { MAD_F(0x04886933) /* 0.283303451 */, 19 },
8068 /* 7567 */ { MAD_F(0x04889d8d) /* 0.283353378 */, 19 },
8069
8070 /* 7568 */ { MAD_F(0x0488d1e8) /* 0.283403307 */, 19 },
8071 /* 7569 */ { MAD_F(0x04890643) /* 0.283453238 */, 19 },
8072 /* 7570 */ { MAD_F(0x04893a9f) /* 0.283503172 */, 19 },
8073 /* 7571 */ { MAD_F(0x04896efb) /* 0.283553107 */, 19 },
8074 /* 7572 */ { MAD_F(0x0489a358) /* 0.283603045 */, 19 },
8075 /* 7573 */ { MAD_F(0x0489d7b6) /* 0.283652985 */, 19 },
8076 /* 7574 */ { MAD_F(0x048a0c14) /* 0.283702927 */, 19 },
8077 /* 7575 */ { MAD_F(0x048a4073) /* 0.283752872 */, 19 },
8078 /* 7576 */ { MAD_F(0x048a74d3) /* 0.283802818 */, 19 },
8079 /* 7577 */ { MAD_F(0x048aa933) /* 0.283852767 */, 19 },
8080 /* 7578 */ { MAD_F(0x048add93) /* 0.283902718 */, 19 },
8081 /* 7579 */ { MAD_F(0x048b11f5) /* 0.283952671 */, 19 },
8082 /* 7580 */ { MAD_F(0x048b4656) /* 0.284002627 */, 19 },
8083 /* 7581 */ { MAD_F(0x048b7ab9) /* 0.284052584 */, 19 },
8084 /* 7582 */ { MAD_F(0x048baf1c) /* 0.284102544 */, 19 },
8085 /* 7583 */ { MAD_F(0x048be37f) /* 0.284152506 */, 19 },
8086
8087 /* 7584 */ { MAD_F(0x048c17e3) /* 0.284202470 */, 19 },
8088 /* 7585 */ { MAD_F(0x048c4c48) /* 0.284252436 */, 19 },
8089 /* 7586 */ { MAD_F(0x048c80ad) /* 0.284302405 */, 19 },
8090 /* 7587 */ { MAD_F(0x048cb513) /* 0.284352376 */, 19 },
8091 /* 7588 */ { MAD_F(0x048ce97a) /* 0.284402349 */, 19 },
8092 /* 7589 */ { MAD_F(0x048d1de1) /* 0.284452324 */, 19 },
8093 /* 7590 */ { MAD_F(0x048d5249) /* 0.284502301 */, 19 },
8094 /* 7591 */ { MAD_F(0x048d86b1) /* 0.284552281 */, 19 },
8095 /* 7592 */ { MAD_F(0x048dbb1a) /* 0.284602263 */, 19 },
8096 /* 7593 */ { MAD_F(0x048def83) /* 0.284652246 */, 19 },
8097 /* 7594 */ { MAD_F(0x048e23ed) /* 0.284702233 */, 19 },
8098 /* 7595 */ { MAD_F(0x048e5858) /* 0.284752221 */, 19 },
8099 /* 7596 */ { MAD_F(0x048e8cc3) /* 0.284802211 */, 19 },
8100 /* 7597 */ { MAD_F(0x048ec12f) /* 0.284852204 */, 19 },
8101 /* 7598 */ { MAD_F(0x048ef59b) /* 0.284902199 */, 19 },
8102 /* 7599 */ { MAD_F(0x048f2a08) /* 0.284952196 */, 19 },
8103
8104 /* 7600 */ { MAD_F(0x048f5e76) /* 0.285002195 */, 19 },
8105 /* 7601 */ { MAD_F(0x048f92e4) /* 0.285052197 */, 19 },
8106 /* 7602 */ { MAD_F(0x048fc753) /* 0.285102201 */, 19 },
8107 /* 7603 */ { MAD_F(0x048ffbc2) /* 0.285152206 */, 19 },
8108 /* 7604 */ { MAD_F(0x04903032) /* 0.285202214 */, 19 },
8109 /* 7605 */ { MAD_F(0x049064a3) /* 0.285252225 */, 19 },
8110 /* 7606 */ { MAD_F(0x04909914) /* 0.285302237 */, 19 },
8111 /* 7607 */ { MAD_F(0x0490cd86) /* 0.285352252 */, 19 },
8112 /* 7608 */ { MAD_F(0x049101f8) /* 0.285402269 */, 19 },
8113 /* 7609 */ { MAD_F(0x0491366b) /* 0.285452288 */, 19 },
8114 /* 7610 */ { MAD_F(0x04916ade) /* 0.285502309 */, 19 },
8115 /* 7611 */ { MAD_F(0x04919f52) /* 0.285552332 */, 19 },
8116 /* 7612 */ { MAD_F(0x0491d3c7) /* 0.285602358 */, 19 },
8117 /* 7613 */ { MAD_F(0x0492083c) /* 0.285652386 */, 19 },
8118 /* 7614 */ { MAD_F(0x04923cb2) /* 0.285702416 */, 19 },
8119 /* 7615 */ { MAD_F(0x04927128) /* 0.285752448 */, 19 },
8120
8121 /* 7616 */ { MAD_F(0x0492a59f) /* 0.285802482 */, 19 },
8122 /* 7617 */ { MAD_F(0x0492da17) /* 0.285852519 */, 19 },
8123 /* 7618 */ { MAD_F(0x04930e8f) /* 0.285902557 */, 19 },
8124 /* 7619 */ { MAD_F(0x04934308) /* 0.285952598 */, 19 },
8125 /* 7620 */ { MAD_F(0x04937781) /* 0.286002641 */, 19 },
8126 /* 7621 */ { MAD_F(0x0493abfb) /* 0.286052687 */, 19 },
8127 /* 7622 */ { MAD_F(0x0493e076) /* 0.286102734 */, 19 },
8128 /* 7623 */ { MAD_F(0x049414f1) /* 0.286152784 */, 19 },
8129 /* 7624 */ { MAD_F(0x0494496c) /* 0.286202836 */, 19 },
8130 /* 7625 */ { MAD_F(0x04947de9) /* 0.286252890 */, 19 },
8131 /* 7626 */ { MAD_F(0x0494b266) /* 0.286302946 */, 19 },
8132 /* 7627 */ { MAD_F(0x0494e6e3) /* 0.286353005 */, 19 },
8133 /* 7628 */ { MAD_F(0x04951b61) /* 0.286403065 */, 19 },
8134 /* 7629 */ { MAD_F(0x04954fe0) /* 0.286453128 */, 19 },
8135 /* 7630 */ { MAD_F(0x0495845f) /* 0.286503193 */, 19 },
8136 /* 7631 */ { MAD_F(0x0495b8df) /* 0.286553260 */, 19 },
8137
8138 /* 7632 */ { MAD_F(0x0495ed5f) /* 0.286603329 */, 19 },
8139 /* 7633 */ { MAD_F(0x049621e0) /* 0.286653401 */, 19 },
8140 /* 7634 */ { MAD_F(0x04965662) /* 0.286703475 */, 19 },
8141 /* 7635 */ { MAD_F(0x04968ae4) /* 0.286753551 */, 19 },
8142 /* 7636 */ { MAD_F(0x0496bf67) /* 0.286803629 */, 19 },
8143 /* 7637 */ { MAD_F(0x0496f3ea) /* 0.286853709 */, 19 },
8144 /* 7638 */ { MAD_F(0x0497286e) /* 0.286903792 */, 19 },
8145 /* 7639 */ { MAD_F(0x04975cf2) /* 0.286953876 */, 19 },
8146 /* 7640 */ { MAD_F(0x04979177) /* 0.287003963 */, 19 },
8147 /* 7641 */ { MAD_F(0x0497c5fd) /* 0.287054052 */, 19 },
8148 /* 7642 */ { MAD_F(0x0497fa83) /* 0.287104143 */, 19 },
8149 /* 7643 */ { MAD_F(0x04982f0a) /* 0.287154237 */, 19 },
8150 /* 7644 */ { MAD_F(0x04986392) /* 0.287204332 */, 19 },
8151 /* 7645 */ { MAD_F(0x0498981a) /* 0.287254430 */, 19 },
8152 /* 7646 */ { MAD_F(0x0498cca2) /* 0.287304530 */, 19 },
8153 /* 7647 */ { MAD_F(0x0499012c) /* 0.287354632 */, 19 },
8154
8155 /* 7648 */ { MAD_F(0x049935b5) /* 0.287404737 */, 19 },
8156 /* 7649 */ { MAD_F(0x04996a40) /* 0.287454843 */, 19 },
8157 /* 7650 */ { MAD_F(0x04999ecb) /* 0.287504952 */, 19 },
8158 /* 7651 */ { MAD_F(0x0499d356) /* 0.287555063 */, 19 },
8159 /* 7652 */ { MAD_F(0x049a07e2) /* 0.287605176 */, 19 },
8160 /* 7653 */ { MAD_F(0x049a3c6f) /* 0.287655291 */, 19 },
8161 /* 7654 */ { MAD_F(0x049a70fc) /* 0.287705409 */, 19 },
8162 /* 7655 */ { MAD_F(0x049aa58a) /* 0.287755528 */, 19 },
8163 /* 7656 */ { MAD_F(0x049ada19) /* 0.287805650 */, 19 },
8164 /* 7657 */ { MAD_F(0x049b0ea8) /* 0.287855774 */, 19 },
8165 /* 7658 */ { MAD_F(0x049b4337) /* 0.287905900 */, 19 },
8166 /* 7659 */ { MAD_F(0x049b77c8) /* 0.287956028 */, 19 },
8167 /* 7660 */ { MAD_F(0x049bac58) /* 0.288006159 */, 19 },
8168 /* 7661 */ { MAD_F(0x049be0ea) /* 0.288056292 */, 19 },
8169 /* 7662 */ { MAD_F(0x049c157c) /* 0.288106427 */, 19 },
8170 /* 7663 */ { MAD_F(0x049c4a0e) /* 0.288156564 */, 19 },
8171
8172 /* 7664 */ { MAD_F(0x049c7ea1) /* 0.288206703 */, 19 },
8173 /* 7665 */ { MAD_F(0x049cb335) /* 0.288256844 */, 19 },
8174 /* 7666 */ { MAD_F(0x049ce7ca) /* 0.288306988 */, 19 },
8175 /* 7667 */ { MAD_F(0x049d1c5e) /* 0.288357134 */, 19 },
8176 /* 7668 */ { MAD_F(0x049d50f4) /* 0.288407282 */, 19 },
8177 /* 7669 */ { MAD_F(0x049d858a) /* 0.288457432 */, 19 },
8178 /* 7670 */ { MAD_F(0x049dba21) /* 0.288507584 */, 19 },
8179 /* 7671 */ { MAD_F(0x049deeb8) /* 0.288557739 */, 19 },
8180 /* 7672 */ { MAD_F(0x049e2350) /* 0.288607895 */, 19 },
8181 /* 7673 */ { MAD_F(0x049e57e8) /* 0.288658054 */, 19 },
8182 /* 7674 */ { MAD_F(0x049e8c81) /* 0.288708215 */, 19 },
8183 /* 7675 */ { MAD_F(0x049ec11b) /* 0.288758379 */, 19 },
8184 /* 7676 */ { MAD_F(0x049ef5b5) /* 0.288808544 */, 19 },
8185 /* 7677 */ { MAD_F(0x049f2a50) /* 0.288858712 */, 19 },
8186 /* 7678 */ { MAD_F(0x049f5eeb) /* 0.288908881 */, 19 },
8187 /* 7679 */ { MAD_F(0x049f9387) /* 0.288959053 */, 19 },
8188
8189 /* 7680 */ { MAD_F(0x049fc824) /* 0.289009227 */, 19 },
8190 /* 7681 */ { MAD_F(0x049ffcc1) /* 0.289059404 */, 19 },
8191 /* 7682 */ { MAD_F(0x04a0315e) /* 0.289109582 */, 19 },
8192 /* 7683 */ { MAD_F(0x04a065fd) /* 0.289159763 */, 19 },
8193 /* 7684 */ { MAD_F(0x04a09a9b) /* 0.289209946 */, 19 },
8194 /* 7685 */ { MAD_F(0x04a0cf3b) /* 0.289260131 */, 19 },
8195 /* 7686 */ { MAD_F(0x04a103db) /* 0.289310318 */, 19 },
8196 /* 7687 */ { MAD_F(0x04a1387b) /* 0.289360507 */, 19 },
8197 /* 7688 */ { MAD_F(0x04a16d1d) /* 0.289410699 */, 19 },
8198 /* 7689 */ { MAD_F(0x04a1a1be) /* 0.289460893 */, 19 },
8199 /* 7690 */ { MAD_F(0x04a1d661) /* 0.289511088 */, 19 },
8200 /* 7691 */ { MAD_F(0x04a20b04) /* 0.289561287 */, 19 },
8201 /* 7692 */ { MAD_F(0x04a23fa7) /* 0.289611487 */, 19 },
8202 /* 7693 */ { MAD_F(0x04a2744b) /* 0.289661689 */, 19 },
8203 /* 7694 */ { MAD_F(0x04a2a8f0) /* 0.289711894 */, 19 },
8204 /* 7695 */ { MAD_F(0x04a2dd95) /* 0.289762101 */, 19 },
8205
8206 /* 7696 */ { MAD_F(0x04a3123b) /* 0.289812309 */, 19 },
8207 /* 7697 */ { MAD_F(0x04a346e2) /* 0.289862521 */, 19 },
8208 /* 7698 */ { MAD_F(0x04a37b89) /* 0.289912734 */, 19 },
8209 /* 7699 */ { MAD_F(0x04a3b030) /* 0.289962949 */, 19 },
8210 /* 7700 */ { MAD_F(0x04a3e4d8) /* 0.290013167 */, 19 },
8211 /* 7701 */ { MAD_F(0x04a41981) /* 0.290063387 */, 19 },
8212 /* 7702 */ { MAD_F(0x04a44e2b) /* 0.290113609 */, 19 },
8213 /* 7703 */ { MAD_F(0x04a482d5) /* 0.290163833 */, 19 },
8214 /* 7704 */ { MAD_F(0x04a4b77f) /* 0.290214059 */, 19 },
8215 /* 7705 */ { MAD_F(0x04a4ec2a) /* 0.290264288 */, 19 },
8216 /* 7706 */ { MAD_F(0x04a520d6) /* 0.290314519 */, 19 },
8217 /* 7707 */ { MAD_F(0x04a55582) /* 0.290364751 */, 19 },
8218 /* 7708 */ { MAD_F(0x04a58a2f) /* 0.290414986 */, 19 },
8219 /* 7709 */ { MAD_F(0x04a5bedd) /* 0.290465224 */, 19 },
8220 /* 7710 */ { MAD_F(0x04a5f38b) /* 0.290515463 */, 19 },
8221 /* 7711 */ { MAD_F(0x04a62839) /* 0.290565705 */, 19 },
8222
8223 /* 7712 */ { MAD_F(0x04a65ce8) /* 0.290615948 */, 19 },
8224 /* 7713 */ { MAD_F(0x04a69198) /* 0.290666194 */, 19 },
8225 /* 7714 */ { MAD_F(0x04a6c648) /* 0.290716442 */, 19 },
8226 /* 7715 */ { MAD_F(0x04a6faf9) /* 0.290766692 */, 19 },
8227 /* 7716 */ { MAD_F(0x04a72fab) /* 0.290816945 */, 19 },
8228 /* 7717 */ { MAD_F(0x04a7645d) /* 0.290867199 */, 19 },
8229 /* 7718 */ { MAD_F(0x04a79910) /* 0.290917456 */, 19 },
8230 /* 7719 */ { MAD_F(0x04a7cdc3) /* 0.290967715 */, 19 },
8231 /* 7720 */ { MAD_F(0x04a80277) /* 0.291017976 */, 19 },
8232 /* 7721 */ { MAD_F(0x04a8372b) /* 0.291068239 */, 19 },
8233 /* 7722 */ { MAD_F(0x04a86be0) /* 0.291118505 */, 19 },
8234 /* 7723 */ { MAD_F(0x04a8a096) /* 0.291168772 */, 19 },
8235 /* 7724 */ { MAD_F(0x04a8d54c) /* 0.291219042 */, 19 },
8236 /* 7725 */ { MAD_F(0x04a90a03) /* 0.291269314 */, 19 },
8237 /* 7726 */ { MAD_F(0x04a93eba) /* 0.291319588 */, 19 },
8238 /* 7727 */ { MAD_F(0x04a97372) /* 0.291369865 */, 19 },
8239
8240 /* 7728 */ { MAD_F(0x04a9a82b) /* 0.291420143 */, 19 },
8241 /* 7729 */ { MAD_F(0x04a9dce4) /* 0.291470424 */, 19 },
8242 /* 7730 */ { MAD_F(0x04aa119d) /* 0.291520706 */, 19 },
8243 /* 7731 */ { MAD_F(0x04aa4658) /* 0.291570991 */, 19 },
8244 /* 7732 */ { MAD_F(0x04aa7b13) /* 0.291621278 */, 19 },
8245 /* 7733 */ { MAD_F(0x04aaafce) /* 0.291671568 */, 19 },
8246 /* 7734 */ { MAD_F(0x04aae48a) /* 0.291721859 */, 19 },
8247 /* 7735 */ { MAD_F(0x04ab1947) /* 0.291772153 */, 19 },
8248 /* 7736 */ { MAD_F(0x04ab4e04) /* 0.291822449 */, 19 },
8249 /* 7737 */ { MAD_F(0x04ab82c2) /* 0.291872747 */, 19 },
8250 /* 7738 */ { MAD_F(0x04abb780) /* 0.291923047 */, 19 },
8251 /* 7739 */ { MAD_F(0x04abec3f) /* 0.291973349 */, 19 },
8252 /* 7740 */ { MAD_F(0x04ac20fe) /* 0.292023653 */, 19 },
8253 /* 7741 */ { MAD_F(0x04ac55be) /* 0.292073960 */, 19 },
8254 /* 7742 */ { MAD_F(0x04ac8a7f) /* 0.292124269 */, 19 },
8255 /* 7743 */ { MAD_F(0x04acbf40) /* 0.292174580 */, 19 },
8256
8257 /* 7744 */ { MAD_F(0x04acf402) /* 0.292224893 */, 19 },
8258 /* 7745 */ { MAD_F(0x04ad28c5) /* 0.292275208 */, 19 },
8259 /* 7746 */ { MAD_F(0x04ad5d88) /* 0.292325526 */, 19 },
8260 /* 7747 */ { MAD_F(0x04ad924b) /* 0.292375845 */, 19 },
8261 /* 7748 */ { MAD_F(0x04adc70f) /* 0.292426167 */, 19 },
8262 /* 7749 */ { MAD_F(0x04adfbd4) /* 0.292476491 */, 19 },
8263 /* 7750 */ { MAD_F(0x04ae3099) /* 0.292526817 */, 19 },
8264 /* 7751 */ { MAD_F(0x04ae655f) /* 0.292577145 */, 19 },
8265 /* 7752 */ { MAD_F(0x04ae9a26) /* 0.292627476 */, 19 },
8266 /* 7753 */ { MAD_F(0x04aeceed) /* 0.292677808 */, 19 },
8267 /* 7754 */ { MAD_F(0x04af03b4) /* 0.292728143 */, 19 },
8268 /* 7755 */ { MAD_F(0x04af387d) /* 0.292778480 */, 19 },
8269 /* 7756 */ { MAD_F(0x04af6d45) /* 0.292828819 */, 19 },
8270 /* 7757 */ { MAD_F(0x04afa20f) /* 0.292879160 */, 19 },
8271 /* 7758 */ { MAD_F(0x04afd6d9) /* 0.292929504 */, 19 },
8272 /* 7759 */ { MAD_F(0x04b00ba3) /* 0.292979849 */, 19 },
8273
8274 /* 7760 */ { MAD_F(0x04b0406e) /* 0.293030197 */, 19 },
8275 /* 7761 */ { MAD_F(0x04b0753a) /* 0.293080547 */, 19 },
8276 /* 7762 */ { MAD_F(0x04b0aa06) /* 0.293130899 */, 19 },
8277 /* 7763 */ { MAD_F(0x04b0ded3) /* 0.293181253 */, 19 },
8278 /* 7764 */ { MAD_F(0x04b113a1) /* 0.293231610 */, 19 },
8279 /* 7765 */ { MAD_F(0x04b1486f) /* 0.293281968 */, 19 },
8280 /* 7766 */ { MAD_F(0x04b17d3d) /* 0.293332329 */, 19 },
8281 /* 7767 */ { MAD_F(0x04b1b20c) /* 0.293382692 */, 19 },
8282 /* 7768 */ { MAD_F(0x04b1e6dc) /* 0.293433057 */, 19 },
8283 /* 7769 */ { MAD_F(0x04b21bad) /* 0.293483424 */, 19 },
8284 /* 7770 */ { MAD_F(0x04b2507d) /* 0.293533794 */, 19 },
8285 /* 7771 */ { MAD_F(0x04b2854f) /* 0.293584165 */, 19 },
8286 /* 7772 */ { MAD_F(0x04b2ba21) /* 0.293634539 */, 19 },
8287 /* 7773 */ { MAD_F(0x04b2eef4) /* 0.293684915 */, 19 },
8288 /* 7774 */ { MAD_F(0x04b323c7) /* 0.293735293 */, 19 },
8289 /* 7775 */ { MAD_F(0x04b3589b) /* 0.293785673 */, 19 },
8290
8291 /* 7776 */ { MAD_F(0x04b38d6f) /* 0.293836055 */, 19 },
8292 /* 7777 */ { MAD_F(0x04b3c244) /* 0.293886440 */, 19 },
8293 /* 7778 */ { MAD_F(0x04b3f71a) /* 0.293936826 */, 19 },
8294 /* 7779 */ { MAD_F(0x04b42bf0) /* 0.293987215 */, 19 },
8295 /* 7780 */ { MAD_F(0x04b460c7) /* 0.294037606 */, 19 },
8296 /* 7781 */ { MAD_F(0x04b4959e) /* 0.294087999 */, 19 },
8297 /* 7782 */ { MAD_F(0x04b4ca76) /* 0.294138395 */, 19 },
8298 /* 7783 */ { MAD_F(0x04b4ff4e) /* 0.294188792 */, 19 },
8299 /* 7784 */ { MAD_F(0x04b53427) /* 0.294239192 */, 19 },
8300 /* 7785 */ { MAD_F(0x04b56901) /* 0.294289593 */, 19 },
8301 /* 7786 */ { MAD_F(0x04b59ddb) /* 0.294339997 */, 19 },
8302 /* 7787 */ { MAD_F(0x04b5d2b6) /* 0.294390403 */, 19 },
8303 /* 7788 */ { MAD_F(0x04b60791) /* 0.294440812 */, 19 },
8304 /* 7789 */ { MAD_F(0x04b63c6d) /* 0.294491222 */, 19 },
8305 /* 7790 */ { MAD_F(0x04b6714a) /* 0.294541635 */, 19 },
8306 /* 7791 */ { MAD_F(0x04b6a627) /* 0.294592049 */, 19 },
8307
8308 /* 7792 */ { MAD_F(0x04b6db05) /* 0.294642466 */, 19 },
8309 /* 7793 */ { MAD_F(0x04b70fe3) /* 0.294692885 */, 19 },
8310 /* 7794 */ { MAD_F(0x04b744c2) /* 0.294743306 */, 19 },
8311 /* 7795 */ { MAD_F(0x04b779a1) /* 0.294793730 */, 19 },
8312 /* 7796 */ { MAD_F(0x04b7ae81) /* 0.294844155 */, 19 },
8313 /* 7797 */ { MAD_F(0x04b7e362) /* 0.294894583 */, 19 },
8314 /* 7798 */ { MAD_F(0x04b81843) /* 0.294945013 */, 19 },
8315 /* 7799 */ { MAD_F(0x04b84d24) /* 0.294995445 */, 19 },
8316 /* 7800 */ { MAD_F(0x04b88207) /* 0.295045879 */, 19 },
8317 /* 7801 */ { MAD_F(0x04b8b6ea) /* 0.295096315 */, 19 },
8318 /* 7802 */ { MAD_F(0x04b8ebcd) /* 0.295146753 */, 19 },
8319 /* 7803 */ { MAD_F(0x04b920b1) /* 0.295197194 */, 19 },
8320 /* 7804 */ { MAD_F(0x04b95596) /* 0.295247637 */, 19 },
8321 /* 7805 */ { MAD_F(0x04b98a7b) /* 0.295298082 */, 19 },
8322 /* 7806 */ { MAD_F(0x04b9bf61) /* 0.295348529 */, 19 },
8323 /* 7807 */ { MAD_F(0x04b9f447) /* 0.295398978 */, 19 },
8324
8325 /* 7808 */ { MAD_F(0x04ba292e) /* 0.295449429 */, 19 },
8326 /* 7809 */ { MAD_F(0x04ba5e16) /* 0.295499883 */, 19 },
8327 /* 7810 */ { MAD_F(0x04ba92fe) /* 0.295550338 */, 19 },
8328 /* 7811 */ { MAD_F(0x04bac7e6) /* 0.295600796 */, 19 },
8329 /* 7812 */ { MAD_F(0x04bafcd0) /* 0.295651256 */, 19 },
8330 /* 7813 */ { MAD_F(0x04bb31b9) /* 0.295701718 */, 19 },
8331 /* 7814 */ { MAD_F(0x04bb66a4) /* 0.295752183 */, 19 },
8332 /* 7815 */ { MAD_F(0x04bb9b8f) /* 0.295802649 */, 19 },
8333 /* 7816 */ { MAD_F(0x04bbd07a) /* 0.295853118 */, 19 },
8334 /* 7817 */ { MAD_F(0x04bc0566) /* 0.295903588 */, 19 },
8335 /* 7818 */ { MAD_F(0x04bc3a53) /* 0.295954061 */, 19 },
8336 /* 7819 */ { MAD_F(0x04bc6f40) /* 0.296004536 */, 19 },
8337 /* 7820 */ { MAD_F(0x04bca42e) /* 0.296055013 */, 19 },
8338 /* 7821 */ { MAD_F(0x04bcd91d) /* 0.296105493 */, 19 },
8339 /* 7822 */ { MAD_F(0x04bd0e0c) /* 0.296155974 */, 19 },
8340 /* 7823 */ { MAD_F(0x04bd42fb) /* 0.296206458 */, 19 },
8341
8342 /* 7824 */ { MAD_F(0x04bd77ec) /* 0.296256944 */, 19 },
8343 /* 7825 */ { MAD_F(0x04bdacdc) /* 0.296307432 */, 19 },
8344 /* 7826 */ { MAD_F(0x04bde1ce) /* 0.296357922 */, 19 },
8345 /* 7827 */ { MAD_F(0x04be16c0) /* 0.296408414 */, 19 },
8346 /* 7828 */ { MAD_F(0x04be4bb2) /* 0.296458908 */, 19 },
8347 /* 7829 */ { MAD_F(0x04be80a5) /* 0.296509405 */, 19 },
8348 /* 7830 */ { MAD_F(0x04beb599) /* 0.296559904 */, 19 },
8349 /* 7831 */ { MAD_F(0x04beea8d) /* 0.296610404 */, 19 },
8350 /* 7832 */ { MAD_F(0x04bf1f82) /* 0.296660907 */, 19 },
8351 /* 7833 */ { MAD_F(0x04bf5477) /* 0.296711413 */, 19 },
8352 /* 7834 */ { MAD_F(0x04bf896d) /* 0.296761920 */, 19 },
8353 /* 7835 */ { MAD_F(0x04bfbe64) /* 0.296812429 */, 19 },
8354 /* 7836 */ { MAD_F(0x04bff35b) /* 0.296862941 */, 19 },
8355 /* 7837 */ { MAD_F(0x04c02852) /* 0.296913455 */, 19 },
8356 /* 7838 */ { MAD_F(0x04c05d4b) /* 0.296963971 */, 19 },
8357 /* 7839 */ { MAD_F(0x04c09243) /* 0.297014489 */, 19 },
8358
8359 /* 7840 */ { MAD_F(0x04c0c73d) /* 0.297065009 */, 19 },
8360 /* 7841 */ { MAD_F(0x04c0fc37) /* 0.297115531 */, 19 },
8361 /* 7842 */ { MAD_F(0x04c13131) /* 0.297166056 */, 19 },
8362 /* 7843 */ { MAD_F(0x04c1662d) /* 0.297216582 */, 19 },
8363 /* 7844 */ { MAD_F(0x04c19b28) /* 0.297267111 */, 19 },
8364 /* 7845 */ { MAD_F(0x04c1d025) /* 0.297317642 */, 19 },
8365 /* 7846 */ { MAD_F(0x04c20521) /* 0.297368175 */, 19 },
8366 /* 7847 */ { MAD_F(0x04c23a1f) /* 0.297418710 */, 19 },
8367 /* 7848 */ { MAD_F(0x04c26f1d) /* 0.297469248 */, 19 },
8368 /* 7849 */ { MAD_F(0x04c2a41b) /* 0.297519787 */, 19 },
8369 /* 7850 */ { MAD_F(0x04c2d91b) /* 0.297570329 */, 19 },
8370 /* 7851 */ { MAD_F(0x04c30e1a) /* 0.297620873 */, 19 },
8371 /* 7852 */ { MAD_F(0x04c3431b) /* 0.297671418 */, 19 },
8372 /* 7853 */ { MAD_F(0x04c3781c) /* 0.297721967 */, 19 },
8373 /* 7854 */ { MAD_F(0x04c3ad1d) /* 0.297772517 */, 19 },
8374 /* 7855 */ { MAD_F(0x04c3e21f) /* 0.297823069 */, 19 },
8375
8376 /* 7856 */ { MAD_F(0x04c41722) /* 0.297873624 */, 19 },
8377 /* 7857 */ { MAD_F(0x04c44c25) /* 0.297924180 */, 19 },
8378 /* 7858 */ { MAD_F(0x04c48129) /* 0.297974739 */, 19 },
8379 /* 7859 */ { MAD_F(0x04c4b62d) /* 0.298025300 */, 19 },
8380 /* 7860 */ { MAD_F(0x04c4eb32) /* 0.298075863 */, 19 },
8381 /* 7861 */ { MAD_F(0x04c52038) /* 0.298126429 */, 19 },
8382 /* 7862 */ { MAD_F(0x04c5553e) /* 0.298176996 */, 19 },
8383 /* 7863 */ { MAD_F(0x04c58a44) /* 0.298227565 */, 19 },
8384 /* 7864 */ { MAD_F(0x04c5bf4c) /* 0.298278137 */, 19 },
8385 /* 7865 */ { MAD_F(0x04c5f453) /* 0.298328711 */, 19 },
8386 /* 7866 */ { MAD_F(0x04c6295c) /* 0.298379287 */, 19 },
8387 /* 7867 */ { MAD_F(0x04c65e65) /* 0.298429865 */, 19 },
8388 /* 7868 */ { MAD_F(0x04c6936e) /* 0.298480445 */, 19 },
8389 /* 7869 */ { MAD_F(0x04c6c878) /* 0.298531028 */, 19 },
8390 /* 7870 */ { MAD_F(0x04c6fd83) /* 0.298581612 */, 19 },
8391 /* 7871 */ { MAD_F(0x04c7328e) /* 0.298632199 */, 19 },
8392
8393 /* 7872 */ { MAD_F(0x04c7679a) /* 0.298682788 */, 19 },
8394 /* 7873 */ { MAD_F(0x04c79ca7) /* 0.298733379 */, 19 },
8395 /* 7874 */ { MAD_F(0x04c7d1b4) /* 0.298783972 */, 19 },
8396 /* 7875 */ { MAD_F(0x04c806c1) /* 0.298834567 */, 19 },
8397 /* 7876 */ { MAD_F(0x04c83bcf) /* 0.298885165 */, 19 },
8398 /* 7877 */ { MAD_F(0x04c870de) /* 0.298935764 */, 19 },
8399 /* 7878 */ { MAD_F(0x04c8a5ed) /* 0.298986366 */, 19 },
8400 /* 7879 */ { MAD_F(0x04c8dafd) /* 0.299036970 */, 19 },
8401 /* 7880 */ { MAD_F(0x04c9100d) /* 0.299087576 */, 19 },
8402 /* 7881 */ { MAD_F(0x04c9451e) /* 0.299138184 */, 19 },
8403 /* 7882 */ { MAD_F(0x04c97a30) /* 0.299188794 */, 19 },
8404 /* 7883 */ { MAD_F(0x04c9af42) /* 0.299239406 */, 19 },
8405 /* 7884 */ { MAD_F(0x04c9e455) /* 0.299290021 */, 19 },
8406 /* 7885 */ { MAD_F(0x04ca1968) /* 0.299340638 */, 19 },
8407 /* 7886 */ { MAD_F(0x04ca4e7c) /* 0.299391256 */, 19 },
8408 /* 7887 */ { MAD_F(0x04ca8391) /* 0.299441877 */, 19 },
8409
8410 /* 7888 */ { MAD_F(0x04cab8a6) /* 0.299492500 */, 19 },
8411 /* 7889 */ { MAD_F(0x04caedbb) /* 0.299543126 */, 19 },
8412 /* 7890 */ { MAD_F(0x04cb22d1) /* 0.299593753 */, 19 },
8413 /* 7891 */ { MAD_F(0x04cb57e8) /* 0.299644382 */, 19 },
8414 /* 7892 */ { MAD_F(0x04cb8d00) /* 0.299695014 */, 19 },
8415 /* 7893 */ { MAD_F(0x04cbc217) /* 0.299745648 */, 19 },
8416 /* 7894 */ { MAD_F(0x04cbf730) /* 0.299796284 */, 19 },
8417 /* 7895 */ { MAD_F(0x04cc2c49) /* 0.299846922 */, 19 },
8418 /* 7896 */ { MAD_F(0x04cc6163) /* 0.299897562 */, 19 },
8419 /* 7897 */ { MAD_F(0x04cc967d) /* 0.299948204 */, 19 },
8420 /* 7898 */ { MAD_F(0x04cccb98) /* 0.299998849 */, 19 },
8421 /* 7899 */ { MAD_F(0x04cd00b3) /* 0.300049495 */, 19 },
8422 /* 7900 */ { MAD_F(0x04cd35cf) /* 0.300100144 */, 19 },
8423 /* 7901 */ { MAD_F(0x04cd6aeb) /* 0.300150795 */, 19 },
8424 /* 7902 */ { MAD_F(0x04cda008) /* 0.300201448 */, 19 },
8425 /* 7903 */ { MAD_F(0x04cdd526) /* 0.300252103 */, 19 },
8426
8427 /* 7904 */ { MAD_F(0x04ce0a44) /* 0.300302761 */, 19 },
8428 /* 7905 */ { MAD_F(0x04ce3f63) /* 0.300353420 */, 19 },
8429 /* 7906 */ { MAD_F(0x04ce7482) /* 0.300404082 */, 19 },
8430 /* 7907 */ { MAD_F(0x04cea9a2) /* 0.300454745 */, 19 },
8431 /* 7908 */ { MAD_F(0x04cedec3) /* 0.300505411 */, 19 },
8432 /* 7909 */ { MAD_F(0x04cf13e4) /* 0.300556079 */, 19 },
8433 /* 7910 */ { MAD_F(0x04cf4906) /* 0.300606749 */, 19 },
8434 /* 7911 */ { MAD_F(0x04cf7e28) /* 0.300657421 */, 19 },
8435 /* 7912 */ { MAD_F(0x04cfb34b) /* 0.300708096 */, 19 },
8436 /* 7913 */ { MAD_F(0x04cfe86e) /* 0.300758772 */, 19 },
8437 /* 7914 */ { MAD_F(0x04d01d92) /* 0.300809451 */, 19 },
8438 /* 7915 */ { MAD_F(0x04d052b6) /* 0.300860132 */, 19 },
8439 /* 7916 */ { MAD_F(0x04d087db) /* 0.300910815 */, 19 },
8440 /* 7917 */ { MAD_F(0x04d0bd01) /* 0.300961500 */, 19 },
8441 /* 7918 */ { MAD_F(0x04d0f227) /* 0.301012187 */, 19 },
8442 /* 7919 */ { MAD_F(0x04d1274e) /* 0.301062876 */, 19 },
8443
8444 /* 7920 */ { MAD_F(0x04d15c76) /* 0.301113568 */, 19 },
8445 /* 7921 */ { MAD_F(0x04d1919e) /* 0.301164261 */, 19 },
8446 /* 7922 */ { MAD_F(0x04d1c6c6) /* 0.301214957 */, 19 },
8447 /* 7923 */ { MAD_F(0x04d1fbef) /* 0.301265655 */, 19 },
8448 /* 7924 */ { MAD_F(0x04d23119) /* 0.301316355 */, 19 },
8449 /* 7925 */ { MAD_F(0x04d26643) /* 0.301367057 */, 19 },
8450 /* 7926 */ { MAD_F(0x04d29b6e) /* 0.301417761 */, 19 },
8451 /* 7927 */ { MAD_F(0x04d2d099) /* 0.301468468 */, 19 },
8452 /* 7928 */ { MAD_F(0x04d305c5) /* 0.301519176 */, 19 },
8453 /* 7929 */ { MAD_F(0x04d33af2) /* 0.301569887 */, 19 },
8454 /* 7930 */ { MAD_F(0x04d3701f) /* 0.301620599 */, 19 },
8455 /* 7931 */ { MAD_F(0x04d3a54d) /* 0.301671314 */, 19 },
8456 /* 7932 */ { MAD_F(0x04d3da7b) /* 0.301722031 */, 19 },
8457 /* 7933 */ { MAD_F(0x04d40faa) /* 0.301772751 */, 19 },
8458 /* 7934 */ { MAD_F(0x04d444d9) /* 0.301823472 */, 19 },
8459 /* 7935 */ { MAD_F(0x04d47a09) /* 0.301874195 */, 19 },
8460
8461 /* 7936 */ { MAD_F(0x04d4af3a) /* 0.301924921 */, 19 },
8462 /* 7937 */ { MAD_F(0x04d4e46b) /* 0.301975649 */, 19 },
8463 /* 7938 */ { MAD_F(0x04d5199c) /* 0.302026378 */, 19 },
8464 /* 7939 */ { MAD_F(0x04d54ecf) /* 0.302077110 */, 19 },
8465 /* 7940 */ { MAD_F(0x04d58401) /* 0.302127845 */, 19 },
8466 /* 7941 */ { MAD_F(0x04d5b935) /* 0.302178581 */, 19 },
8467 /* 7942 */ { MAD_F(0x04d5ee69) /* 0.302229319 */, 19 },
8468 /* 7943 */ { MAD_F(0x04d6239d) /* 0.302280060 */, 19 },
8469 /* 7944 */ { MAD_F(0x04d658d2) /* 0.302330802 */, 19 },
8470 /* 7945 */ { MAD_F(0x04d68e08) /* 0.302381547 */, 19 },
8471 /* 7946 */ { MAD_F(0x04d6c33e) /* 0.302432294 */, 19 },
8472 /* 7947 */ { MAD_F(0x04d6f875) /* 0.302483043 */, 19 },
8473 /* 7948 */ { MAD_F(0x04d72dad) /* 0.302533794 */, 19 },
8474 /* 7949 */ { MAD_F(0x04d762e5) /* 0.302584547 */, 19 },
8475 /* 7950 */ { MAD_F(0x04d7981d) /* 0.302635303 */, 19 },
8476 /* 7951 */ { MAD_F(0x04d7cd56) /* 0.302686060 */, 19 },
8477
8478 /* 7952 */ { MAD_F(0x04d80290) /* 0.302736820 */, 19 },
8479 /* 7953 */ { MAD_F(0x04d837ca) /* 0.302787581 */, 19 },
8480 /* 7954 */ { MAD_F(0x04d86d05) /* 0.302838345 */, 19 },
8481 /* 7955 */ { MAD_F(0x04d8a240) /* 0.302889111 */, 19 },
8482 /* 7956 */ { MAD_F(0x04d8d77c) /* 0.302939879 */, 19 },
8483 /* 7957 */ { MAD_F(0x04d90cb9) /* 0.302990650 */, 19 },
8484 /* 7958 */ { MAD_F(0x04d941f6) /* 0.303041422 */, 19 },
8485 /* 7959 */ { MAD_F(0x04d97734) /* 0.303092197 */, 19 },
8486 /* 7960 */ { MAD_F(0x04d9ac72) /* 0.303142973 */, 19 },
8487 /* 7961 */ { MAD_F(0x04d9e1b1) /* 0.303193752 */, 19 },
8488 /* 7962 */ { MAD_F(0x04da16f0) /* 0.303244533 */, 19 },
8489 /* 7963 */ { MAD_F(0x04da4c30) /* 0.303295316 */, 19 },
8490 /* 7964 */ { MAD_F(0x04da8171) /* 0.303346101 */, 19 },
8491 /* 7965 */ { MAD_F(0x04dab6b2) /* 0.303396889 */, 19 },
8492 /* 7966 */ { MAD_F(0x04daebf4) /* 0.303447678 */, 19 },
8493 /* 7967 */ { MAD_F(0x04db2136) /* 0.303498469 */, 19 },
8494
8495 /* 7968 */ { MAD_F(0x04db5679) /* 0.303549263 */, 19 },
8496 /* 7969 */ { MAD_F(0x04db8bbc) /* 0.303600059 */, 19 },
8497 /* 7970 */ { MAD_F(0x04dbc100) /* 0.303650857 */, 19 },
8498 /* 7971 */ { MAD_F(0x04dbf644) /* 0.303701657 */, 19 },
8499 /* 7972 */ { MAD_F(0x04dc2b8a) /* 0.303752459 */, 19 },
8500 /* 7973 */ { MAD_F(0x04dc60cf) /* 0.303803263 */, 19 },
8501 /* 7974 */ { MAD_F(0x04dc9616) /* 0.303854070 */, 19 },
8502 /* 7975 */ { MAD_F(0x04dccb5c) /* 0.303904878 */, 19 },
8503 /* 7976 */ { MAD_F(0x04dd00a4) /* 0.303955689 */, 19 },
8504 /* 7977 */ { MAD_F(0x04dd35ec) /* 0.304006502 */, 19 },
8505 /* 7978 */ { MAD_F(0x04dd6b34) /* 0.304057317 */, 19 },
8506 /* 7979 */ { MAD_F(0x04dda07d) /* 0.304108134 */, 19 },
8507 /* 7980 */ { MAD_F(0x04ddd5c7) /* 0.304158953 */, 19 },
8508 /* 7981 */ { MAD_F(0x04de0b11) /* 0.304209774 */, 19 },
8509 /* 7982 */ { MAD_F(0x04de405c) /* 0.304260597 */, 19 },
8510 /* 7983 */ { MAD_F(0x04de75a7) /* 0.304311423 */, 19 },
8511
8512 /* 7984 */ { MAD_F(0x04deaaf3) /* 0.304362251 */, 19 },
8513 /* 7985 */ { MAD_F(0x04dee040) /* 0.304413080 */, 19 },
8514 /* 7986 */ { MAD_F(0x04df158d) /* 0.304463912 */, 19 },
8515 /* 7987 */ { MAD_F(0x04df4adb) /* 0.304514746 */, 19 },
8516 /* 7988 */ { MAD_F(0x04df8029) /* 0.304565582 */, 19 },
8517 /* 7989 */ { MAD_F(0x04dfb578) /* 0.304616421 */, 19 },
8518 /* 7990 */ { MAD_F(0x04dfeac7) /* 0.304667261 */, 19 },
8519 /* 7991 */ { MAD_F(0x04e02017) /* 0.304718103 */, 19 },
8520 /* 7992 */ { MAD_F(0x04e05567) /* 0.304768948 */, 19 },
8521 /* 7993 */ { MAD_F(0x04e08ab8) /* 0.304819795 */, 19 },
8522 /* 7994 */ { MAD_F(0x04e0c00a) /* 0.304870644 */, 19 },
8523 /* 7995 */ { MAD_F(0x04e0f55c) /* 0.304921495 */, 19 },
8524 /* 7996 */ { MAD_F(0x04e12aaf) /* 0.304972348 */, 19 },
8525 /* 7997 */ { MAD_F(0x04e16002) /* 0.305023203 */, 19 },
8526 /* 7998 */ { MAD_F(0x04e19556) /* 0.305074060 */, 19 },
8527 /* 7999 */ { MAD_F(0x04e1caab) /* 0.305124920 */, 19 },
8528
8529 /* 8000 */ { MAD_F(0x04e20000) /* 0.305175781 */, 19 },
8530 /* 8001 */ { MAD_F(0x04e23555) /* 0.305226645 */, 19 },
8531 /* 8002 */ { MAD_F(0x04e26aac) /* 0.305277511 */, 19 },
8532 /* 8003 */ { MAD_F(0x04e2a002) /* 0.305328379 */, 19 },
8533 /* 8004 */ { MAD_F(0x04e2d55a) /* 0.305379249 */, 19 },
8534 /* 8005 */ { MAD_F(0x04e30ab2) /* 0.305430121 */, 19 },
8535 /* 8006 */ { MAD_F(0x04e3400a) /* 0.305480995 */, 19 },
8536 /* 8007 */ { MAD_F(0x04e37563) /* 0.305531872 */, 19 },
8537 /* 8008 */ { MAD_F(0x04e3aabd) /* 0.305582750 */, 19 },
8538 /* 8009 */ { MAD_F(0x04e3e017) /* 0.305633631 */, 19 },
8539 /* 8010 */ { MAD_F(0x04e41572) /* 0.305684513 */, 19 },
8540 /* 8011 */ { MAD_F(0x04e44acd) /* 0.305735398 */, 19 },
8541 /* 8012 */ { MAD_F(0x04e48029) /* 0.305786285 */, 19 },
8542 /* 8013 */ { MAD_F(0x04e4b585) /* 0.305837174 */, 19 },
8543 /* 8014 */ { MAD_F(0x04e4eae2) /* 0.305888066 */, 19 },
8544 /* 8015 */ { MAD_F(0x04e52040) /* 0.305938959 */, 19 },
8545
8546 /* 8016 */ { MAD_F(0x04e5559e) /* 0.305989854 */, 19 },
8547 /* 8017 */ { MAD_F(0x04e58afd) /* 0.306040752 */, 19 },
8548 /* 8018 */ { MAD_F(0x04e5c05c) /* 0.306091652 */, 19 },
8549 /* 8019 */ { MAD_F(0x04e5f5bc) /* 0.306142554 */, 19 },
8550 /* 8020 */ { MAD_F(0x04e62b1c) /* 0.306193457 */, 19 },
8551 /* 8021 */ { MAD_F(0x04e6607d) /* 0.306244364 */, 19 },
8552 /* 8022 */ { MAD_F(0x04e695df) /* 0.306295272 */, 19 },
8553 /* 8023 */ { MAD_F(0x04e6cb41) /* 0.306346182 */, 19 },
8554 /* 8024 */ { MAD_F(0x04e700a3) /* 0.306397094 */, 19 },
8555 /* 8025 */ { MAD_F(0x04e73607) /* 0.306448009 */, 19 },
8556 /* 8026 */ { MAD_F(0x04e76b6b) /* 0.306498925 */, 19 },
8557 /* 8027 */ { MAD_F(0x04e7a0cf) /* 0.306549844 */, 19 },
8558 /* 8028 */ { MAD_F(0x04e7d634) /* 0.306600765 */, 19 },
8559 /* 8029 */ { MAD_F(0x04e80b99) /* 0.306651688 */, 19 },
8560 /* 8030 */ { MAD_F(0x04e84100) /* 0.306702613 */, 19 },
8561 /* 8031 */ { MAD_F(0x04e87666) /* 0.306753540 */, 19 },
8562
8563 /* 8032 */ { MAD_F(0x04e8abcd) /* 0.306804470 */, 19 },
8564 /* 8033 */ { MAD_F(0x04e8e135) /* 0.306855401 */, 19 },
8565 /* 8034 */ { MAD_F(0x04e9169e) /* 0.306906334 */, 19 },
8566 /* 8035 */ { MAD_F(0x04e94c07) /* 0.306957270 */, 19 },
8567 /* 8036 */ { MAD_F(0x04e98170) /* 0.307008208 */, 19 },
8568 /* 8037 */ { MAD_F(0x04e9b6da) /* 0.307059148 */, 19 },
8569 /* 8038 */ { MAD_F(0x04e9ec45) /* 0.307110090 */, 19 },
8570 /* 8039 */ { MAD_F(0x04ea21b0) /* 0.307161034 */, 19 },
8571 /* 8040 */ { MAD_F(0x04ea571c) /* 0.307211980 */, 19 },
8572 /* 8041 */ { MAD_F(0x04ea8c88) /* 0.307262928 */, 19 },
8573 /* 8042 */ { MAD_F(0x04eac1f5) /* 0.307313879 */, 19 },
8574 /* 8043 */ { MAD_F(0x04eaf762) /* 0.307364831 */, 19 },
8575 /* 8044 */ { MAD_F(0x04eb2cd0) /* 0.307415786 */, 19 },
8576 /* 8045 */ { MAD_F(0x04eb623f) /* 0.307466743 */, 19 },
8577 /* 8046 */ { MAD_F(0x04eb97ae) /* 0.307517702 */, 19 },
8578 /* 8047 */ { MAD_F(0x04ebcd1e) /* 0.307568663 */, 19 },
8579
8580 /* 8048 */ { MAD_F(0x04ec028e) /* 0.307619626 */, 19 },
8581 /* 8049 */ { MAD_F(0x04ec37ff) /* 0.307670591 */, 19 },
8582 /* 8050 */ { MAD_F(0x04ec6d71) /* 0.307721558 */, 19 },
8583 /* 8051 */ { MAD_F(0x04eca2e3) /* 0.307772528 */, 19 },
8584 /* 8052 */ { MAD_F(0x04ecd855) /* 0.307823499 */, 19 },
8585 /* 8053 */ { MAD_F(0x04ed0dc8) /* 0.307874473 */, 19 },
8586 /* 8054 */ { MAD_F(0x04ed433c) /* 0.307925449 */, 19 },
8587 /* 8055 */ { MAD_F(0x04ed78b0) /* 0.307976426 */, 19 },
8588 /* 8056 */ { MAD_F(0x04edae25) /* 0.308027406 */, 19 },
8589 /* 8057 */ { MAD_F(0x04ede39a) /* 0.308078389 */, 19 },
8590 /* 8058 */ { MAD_F(0x04ee1910) /* 0.308129373 */, 19 },
8591 /* 8059 */ { MAD_F(0x04ee4e87) /* 0.308180359 */, 19 },
8592 /* 8060 */ { MAD_F(0x04ee83fe) /* 0.308231347 */, 19 },
8593 /* 8061 */ { MAD_F(0x04eeb976) /* 0.308282338 */, 19 },
8594 /* 8062 */ { MAD_F(0x04eeeeee) /* 0.308333331 */, 19 },
8595 /* 8063 */ { MAD_F(0x04ef2467) /* 0.308384325 */, 19 },
8596
8597 /* 8064 */ { MAD_F(0x04ef59e0) /* 0.308435322 */, 19 },
8598 /* 8065 */ { MAD_F(0x04ef8f5a) /* 0.308486321 */, 19 },
8599 /* 8066 */ { MAD_F(0x04efc4d5) /* 0.308537322 */, 19 },
8600 /* 8067 */ { MAD_F(0x04effa50) /* 0.308588325 */, 19 },
8601 /* 8068 */ { MAD_F(0x04f02fcb) /* 0.308639331 */, 19 },
8602 /* 8069 */ { MAD_F(0x04f06547) /* 0.308690338 */, 19 },
8603 /* 8070 */ { MAD_F(0x04f09ac4) /* 0.308741348 */, 19 },
8604 /* 8071 */ { MAD_F(0x04f0d041) /* 0.308792359 */, 19 },
8605 /* 8072 */ { MAD_F(0x04f105bf) /* 0.308843373 */, 19 },
8606 /* 8073 */ { MAD_F(0x04f13b3e) /* 0.308894389 */, 19 },
8607 /* 8074 */ { MAD_F(0x04f170bd) /* 0.308945407 */, 19 },
8608 /* 8075 */ { MAD_F(0x04f1a63c) /* 0.308996427 */, 19 },
8609 /* 8076 */ { MAD_F(0x04f1dbbd) /* 0.309047449 */, 19 },
8610 /* 8077 */ { MAD_F(0x04f2113d) /* 0.309098473 */, 19 },
8611 /* 8078 */ { MAD_F(0x04f246bf) /* 0.309149499 */, 19 },
8612 /* 8079 */ { MAD_F(0x04f27c40) /* 0.309200528 */, 19 },
8613
8614 /* 8080 */ { MAD_F(0x04f2b1c3) /* 0.309251558 */, 19 },
8615 /* 8081 */ { MAD_F(0x04f2e746) /* 0.309302591 */, 19 },
8616 /* 8082 */ { MAD_F(0x04f31cc9) /* 0.309353626 */, 19 },
8617 /* 8083 */ { MAD_F(0x04f3524d) /* 0.309404663 */, 19 },
8618 /* 8084 */ { MAD_F(0x04f387d2) /* 0.309455702 */, 19 },
8619 /* 8085 */ { MAD_F(0x04f3bd57) /* 0.309506743 */, 19 },
8620 /* 8086 */ { MAD_F(0x04f3f2dd) /* 0.309557786 */, 19 },
8621 /* 8087 */ { MAD_F(0x04f42864) /* 0.309608831 */, 19 },
8622 /* 8088 */ { MAD_F(0x04f45dea) /* 0.309659879 */, 19 },
8623 /* 8089 */ { MAD_F(0x04f49372) /* 0.309710928 */, 19 },
8624 /* 8090 */ { MAD_F(0x04f4c8fa) /* 0.309761980 */, 19 },
8625 /* 8091 */ { MAD_F(0x04f4fe83) /* 0.309813033 */, 19 },
8626 /* 8092 */ { MAD_F(0x04f5340c) /* 0.309864089 */, 19 },
8627 /* 8093 */ { MAD_F(0x04f56996) /* 0.309915147 */, 19 },
8628 /* 8094 */ { MAD_F(0x04f59f20) /* 0.309966207 */, 19 },
8629 /* 8095 */ { MAD_F(0x04f5d4ab) /* 0.310017269 */, 19 },
8630
8631 /* 8096 */ { MAD_F(0x04f60a36) /* 0.310068333 */, 19 },
8632 /* 8097 */ { MAD_F(0x04f63fc2) /* 0.310119400 */, 19 },
8633 /* 8098 */ { MAD_F(0x04f6754f) /* 0.310170468 */, 19 },
8634 /* 8099 */ { MAD_F(0x04f6aadc) /* 0.310221539 */, 19 },
8635 /* 8100 */ { MAD_F(0x04f6e06a) /* 0.310272611 */, 19 },
8636 /* 8101 */ { MAD_F(0x04f715f8) /* 0.310323686 */, 19 },
8637 /* 8102 */ { MAD_F(0x04f74b87) /* 0.310374763 */, 19 },
8638 /* 8103 */ { MAD_F(0x04f78116) /* 0.310425842 */, 19 },
8639 /* 8104 */ { MAD_F(0x04f7b6a6) /* 0.310476923 */, 19 },
8640 /* 8105 */ { MAD_F(0x04f7ec37) /* 0.310528006 */, 19 },
8641 /* 8106 */ { MAD_F(0x04f821c8) /* 0.310579091 */, 19 },
8642 /* 8107 */ { MAD_F(0x04f85759) /* 0.310630179 */, 19 },
8643 /* 8108 */ { MAD_F(0x04f88cec) /* 0.310681268 */, 19 },
8644 /* 8109 */ { MAD_F(0x04f8c27e) /* 0.310732360 */, 19 },
8645 /* 8110 */ { MAD_F(0x04f8f812) /* 0.310783453 */, 19 },
8646 /* 8111 */ { MAD_F(0x04f92da6) /* 0.310834549 */, 19 },
8647
8648 /* 8112 */ { MAD_F(0x04f9633a) /* 0.310885647 */, 19 },
8649 /* 8113 */ { MAD_F(0x04f998cf) /* 0.310936747 */, 19 },
8650 /* 8114 */ { MAD_F(0x04f9ce65) /* 0.310987849 */, 19 },
8651 /* 8115 */ { MAD_F(0x04fa03fb) /* 0.311038953 */, 19 },
8652 /* 8116 */ { MAD_F(0x04fa3992) /* 0.311090059 */, 19 },
8653 /* 8117 */ { MAD_F(0x04fa6f29) /* 0.311141168 */, 19 },
8654 /* 8118 */ { MAD_F(0x04faa4c1) /* 0.311192278 */, 19 },
8655 /* 8119 */ { MAD_F(0x04fada59) /* 0.311243390 */, 19 },
8656 /* 8120 */ { MAD_F(0x04fb0ff2) /* 0.311294505 */, 19 },
8657 /* 8121 */ { MAD_F(0x04fb458c) /* 0.311345622 */, 19 },
8658 /* 8122 */ { MAD_F(0x04fb7b26) /* 0.311396741 */, 19 },
8659 /* 8123 */ { MAD_F(0x04fbb0c1) /* 0.311447862 */, 19 },
8660 /* 8124 */ { MAD_F(0x04fbe65c) /* 0.311498985 */, 19 },
8661 /* 8125 */ { MAD_F(0x04fc1bf8) /* 0.311550110 */, 19 },
8662 /* 8126 */ { MAD_F(0x04fc5194) /* 0.311601237 */, 19 },
8663 /* 8127 */ { MAD_F(0x04fc8731) /* 0.311652366 */, 19 },
8664
8665 /* 8128 */ { MAD_F(0x04fcbcce) /* 0.311703498 */, 19 },
8666 /* 8129 */ { MAD_F(0x04fcf26c) /* 0.311754631 */, 19 },
8667 /* 8130 */ { MAD_F(0x04fd280b) /* 0.311805767 */, 19 },
8668 /* 8131 */ { MAD_F(0x04fd5daa) /* 0.311856905 */, 19 },
8669 /* 8132 */ { MAD_F(0x04fd934a) /* 0.311908044 */, 19 },
8670 /* 8133 */ { MAD_F(0x04fdc8ea) /* 0.311959186 */, 19 },
8671 /* 8134 */ { MAD_F(0x04fdfe8b) /* 0.312010330 */, 19 },
8672 /* 8135 */ { MAD_F(0x04fe342c) /* 0.312061476 */, 19 },
8673 /* 8136 */ { MAD_F(0x04fe69ce) /* 0.312112625 */, 19 },
8674 /* 8137 */ { MAD_F(0x04fe9f71) /* 0.312163775 */, 19 },
8675 /* 8138 */ { MAD_F(0x04fed514) /* 0.312214927 */, 19 },
8676 /* 8139 */ { MAD_F(0x04ff0ab8) /* 0.312266082 */, 19 },
8677 /* 8140 */ { MAD_F(0x04ff405c) /* 0.312317238 */, 19 },
8678 /* 8141 */ { MAD_F(0x04ff7601) /* 0.312368397 */, 19 },
8679 /* 8142 */ { MAD_F(0x04ffaba6) /* 0.312419558 */, 19 },
8680 /* 8143 */ { MAD_F(0x04ffe14c) /* 0.312470720 */, 19 },
8681
8682 /* 8144 */ { MAD_F(0x050016f3) /* 0.312521885 */, 19 },
8683 /* 8145 */ { MAD_F(0x05004c9a) /* 0.312573052 */, 19 },
8684 /* 8146 */ { MAD_F(0x05008241) /* 0.312624222 */, 19 },
8685 /* 8147 */ { MAD_F(0x0500b7e9) /* 0.312675393 */, 19 },
8686 /* 8148 */ { MAD_F(0x0500ed92) /* 0.312726566 */, 19 },
8687 /* 8149 */ { MAD_F(0x0501233b) /* 0.312777742 */, 19 },
8688 /* 8150 */ { MAD_F(0x050158e5) /* 0.312828919 */, 19 },
8689 /* 8151 */ { MAD_F(0x05018e90) /* 0.312880099 */, 19 },
8690 /* 8152 */ { MAD_F(0x0501c43b) /* 0.312931280 */, 19 },
8691 /* 8153 */ { MAD_F(0x0501f9e6) /* 0.312982464 */, 19 },
8692 /* 8154 */ { MAD_F(0x05022f92) /* 0.313033650 */, 19 },
8693 /* 8155 */ { MAD_F(0x0502653f) /* 0.313084838 */, 19 },
8694 /* 8156 */ { MAD_F(0x05029aec) /* 0.313136028 */, 19 },
8695 /* 8157 */ { MAD_F(0x0502d09a) /* 0.313187220 */, 19 },
8696 /* 8158 */ { MAD_F(0x05030648) /* 0.313238414 */, 19 },
8697 /* 8159 */ { MAD_F(0x05033bf7) /* 0.313289611 */, 19 },
8698
8699 /* 8160 */ { MAD_F(0x050371a7) /* 0.313340809 */, 19 },
8700 /* 8161 */ { MAD_F(0x0503a757) /* 0.313392010 */, 19 },
8701 /* 8162 */ { MAD_F(0x0503dd07) /* 0.313443212 */, 19 },
8702 /* 8163 */ { MAD_F(0x050412b9) /* 0.313494417 */, 19 },
8703 /* 8164 */ { MAD_F(0x0504486a) /* 0.313545624 */, 19 },
8704 /* 8165 */ { MAD_F(0x05047e1d) /* 0.313596833 */, 19 },
8705 /* 8166 */ { MAD_F(0x0504b3cf) /* 0.313648044 */, 19 },
8706 /* 8167 */ { MAD_F(0x0504e983) /* 0.313699257 */, 19 },
8707 /* 8168 */ { MAD_F(0x05051f37) /* 0.313750472 */, 19 },
8708 /* 8169 */ { MAD_F(0x050554eb) /* 0.313801689 */, 19 },
8709 /* 8170 */ { MAD_F(0x05058aa0) /* 0.313852909 */, 19 },
8710 /* 8171 */ { MAD_F(0x0505c056) /* 0.313904130 */, 19 },
8711 /* 8172 */ { MAD_F(0x0505f60c) /* 0.313955354 */, 19 },
8712 /* 8173 */ { MAD_F(0x05062bc3) /* 0.314006579 */, 19 },
8713 /* 8174 */ { MAD_F(0x0506617a) /* 0.314057807 */, 19 },
8714 /* 8175 */ { MAD_F(0x05069732) /* 0.314109037 */, 19 },
8715
8716 /* 8176 */ { MAD_F(0x0506cceb) /* 0.314160269 */, 19 },
8717 /* 8177 */ { MAD_F(0x050702a4) /* 0.314211502 */, 19 },
8718 /* 8178 */ { MAD_F(0x0507385d) /* 0.314262739 */, 19 },
8719 /* 8179 */ { MAD_F(0x05076e17) /* 0.314313977 */, 19 },
8720 /* 8180 */ { MAD_F(0x0507a3d2) /* 0.314365217 */, 19 },
8721 /* 8181 */ { MAD_F(0x0507d98d) /* 0.314416459 */, 19 },
8722 /* 8182 */ { MAD_F(0x05080f49) /* 0.314467704 */, 19 },
8723 /* 8183 */ { MAD_F(0x05084506) /* 0.314518950 */, 19 },
8724 /* 8184 */ { MAD_F(0x05087ac2) /* 0.314570199 */, 19 },
8725 /* 8185 */ { MAD_F(0x0508b080) /* 0.314621449 */, 19 },
8726 /* 8186 */ { MAD_F(0x0508e63e) /* 0.314672702 */, 19 },
8727 /* 8187 */ { MAD_F(0x05091bfd) /* 0.314723957 */, 19 },
8728 /* 8188 */ { MAD_F(0x050951bc) /* 0.314775214 */, 19 },
8729 /* 8189 */ { MAD_F(0x0509877c) /* 0.314826473 */, 19 },
8730 /* 8190 */ { MAD_F(0x0509bd3c) /* 0.314877734 */, 19 },
8731 /* 8191 */ { MAD_F(0x0509f2fd) /* 0.314928997 */, 19 },
8732
8733 /* 8192 */ { MAD_F(0x050a28be) /* 0.314980262 */, 19 },
8734 /* 8193 */ { MAD_F(0x050a5e80) /* 0.315031530 */, 19 },
8735 /* 8194 */ { MAD_F(0x050a9443) /* 0.315082799 */, 19 },
8736 /* 8195 */ { MAD_F(0x050aca06) /* 0.315134071 */, 19 },
8737 /* 8196 */ { MAD_F(0x050affc9) /* 0.315185344 */, 19 },
8738 /* 8197 */ { MAD_F(0x050b358e) /* 0.315236620 */, 19 },
8739 /* 8198 */ { MAD_F(0x050b6b52) /* 0.315287898 */, 19 },
8740 /* 8199 */ { MAD_F(0x050ba118) /* 0.315339178 */, 19 },
8741 /* 8200 */ { MAD_F(0x050bd6de) /* 0.315390460 */, 19 },
8742 /* 8201 */ { MAD_F(0x050c0ca4) /* 0.315441744 */, 19 },
8743 /* 8202 */ { MAD_F(0x050c426b) /* 0.315493030 */, 19 },
8744 /* 8203 */ { MAD_F(0x050c7833) /* 0.315544318 */, 19 },
8745 /* 8204 */ { MAD_F(0x050cadfb) /* 0.315595608 */, 19 },
8746 /* 8205 */ { MAD_F(0x050ce3c4) /* 0.315646901 */, 19 },
8747 /* 8206 */ { MAD_F(0x050d198d) /* 0.315698195 */, 19 }
diff --git a/core/multimedia/opieplayer/libmad/sf_table.dat b/core/multimedia/opieplayer/libmad/sf_table.dat
new file mode 100644
index 0000000..18e6202
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/sf_table.dat
@@ -0,0 +1,100 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22/*
23 * These are the scalefactor values for Layer I and Layer II.
24 * The values are from Table B.1 of ISO/IEC 11172-3.
25 *
26 * There is some error introduced by the 32-bit fixed-point representation;
27 * the amount of error is shown. For 16-bit PCM output, this shouldn't be
28 * too much of a problem.
29 */
30
31 MAD_F(0x20000000), /* 2.000000000000 => 2.000000000000, e 0.000000000000 */
32 MAD_F(0x1965fea5), /* 1.587401051968 => 1.587401051074, e 0.000000000894 */
33 MAD_F(0x1428a2fa), /* 1.259921049895 => 1.259921051562, e -0.000000001667 */
34 MAD_F(0x10000000), /* 1.000000000000 => 1.000000000000, e 0.000000000000 */
35 MAD_F(0x0cb2ff53), /* 0.793700525984 => 0.793700527400, e -0.000000001416 */
36 MAD_F(0x0a14517d), /* 0.629960524947 => 0.629960525781, e -0.000000000833 */
37 MAD_F(0x08000000), /* 0.500000000000 => 0.500000000000, e 0.000000000000 */
38 MAD_F(0x06597fa9), /* 0.396850262992 => 0.396850261837, e 0.000000001155 */
39
40 MAD_F(0x050a28be), /* 0.314980262474 => 0.314980261028, e 0.000000001446 */
41 MAD_F(0x04000000), /* 0.250000000000 => 0.250000000000, e 0.000000000000 */
42 MAD_F(0x032cbfd5), /* 0.198425131496 => 0.198425132781, e -0.000000001285 */
43 MAD_F(0x0285145f), /* 0.157490131237 => 0.157490130514, e 0.000000000723 */
44 MAD_F(0x02000000), /* 0.125000000000 => 0.125000000000, e 0.000000000000 */
45 MAD_F(0x01965fea), /* 0.099212565748 => 0.099212564528, e 0.000000001220 */
46 MAD_F(0x01428a30), /* 0.078745065618 => 0.078745067120, e -0.000000001501 */
47 MAD_F(0x01000000), /* 0.062500000000 => 0.062500000000, e 0.000000000000 */
48
49 MAD_F(0x00cb2ff5), /* 0.049606282874 => 0.049606282264, e 0.000000000610 */
50 MAD_F(0x00a14518), /* 0.039372532809 => 0.039372533560, e -0.000000000751 */
51 MAD_F(0x00800000), /* 0.031250000000 => 0.031250000000, e 0.000000000000 */
52 MAD_F(0x006597fb), /* 0.024803141437 => 0.024803142995, e -0.000000001558 */
53 MAD_F(0x0050a28c), /* 0.019686266405 => 0.019686266780, e -0.000000000375 */
54 MAD_F(0x00400000), /* 0.015625000000 => 0.015625000000, e 0.000000000000 */
55 MAD_F(0x0032cbfd), /* 0.012401570719 => 0.012401569635, e 0.000000001084 */
56 MAD_F(0x00285146), /* 0.009843133202 => 0.009843133390, e -0.000000000188 */
57
58 MAD_F(0x00200000), /* 0.007812500000 => 0.007812500000, e 0.000000000000 */
59 MAD_F(0x001965ff), /* 0.006200785359 => 0.006200786680, e -0.000000001321 */
60 MAD_F(0x001428a3), /* 0.004921566601 => 0.004921566695, e -0.000000000094 */
61 MAD_F(0x00100000), /* 0.003906250000 => 0.003906250000, e 0.000000000000 */
62 MAD_F(0x000cb2ff), /* 0.003100392680 => 0.003100391477, e 0.000000001202 */
63 MAD_F(0x000a1451), /* 0.002460783301 => 0.002460781485, e 0.000000001816 */
64 MAD_F(0x00080000), /* 0.001953125000 => 0.001953125000, e 0.000000000000 */
65 MAD_F(0x00065980), /* 0.001550196340 => 0.001550197601, e -0.000000001262 */
66
67 MAD_F(0x00050a29), /* 0.001230391650 => 0.001230392605, e -0.000000000955 */
68 MAD_F(0x00040000), /* 0.000976562500 => 0.000976562500, e 0.000000000000 */
69 MAD_F(0x00032cc0), /* 0.000775098170 => 0.000775098801, e -0.000000000631 */
70 MAD_F(0x00028514), /* 0.000615195825 => 0.000615194440, e 0.000000001385 */
71 MAD_F(0x00020000), /* 0.000488281250 => 0.000488281250, e 0.000000000000 */
72 MAD_F(0x00019660), /* 0.000387549085 => 0.000387549400, e -0.000000000315 */
73 MAD_F(0x0001428a), /* 0.000307597913 => 0.000307597220, e 0.000000000693 */
74 MAD_F(0x00010000), /* 0.000244140625 => 0.000244140625, e 0.000000000000 */
75
76 MAD_F(0x0000cb30), /* 0.000193774542 => 0.000193774700, e -0.000000000158 */
77 MAD_F(0x0000a145), /* 0.000153798956 => 0.000153798610, e 0.000000000346 */
78 MAD_F(0x00008000), /* 0.000122070313 => 0.000122070313, e 0.000000000000 */
79 MAD_F(0x00006598), /* 0.000096887271 => 0.000096887350, e -0.000000000079 */
80 MAD_F(0x000050a3), /* 0.000076899478 => 0.000076901168, e -0.000000001689 */
81 MAD_F(0x00004000), /* 0.000061035156 => 0.000061035156, e 0.000000000000 */
82 MAD_F(0x000032cc), /* 0.000048443636 => 0.000048443675, e -0.000000000039 */
83 MAD_F(0x00002851), /* 0.000038449739 => 0.000038448721, e 0.000000001018 */
84
85 MAD_F(0x00002000), /* 0.000030517578 => 0.000030517578, e 0.000000000000 */
86 MAD_F(0x00001966), /* 0.000024221818 => 0.000024221838, e -0.000000000020 */
87 MAD_F(0x00001429), /* 0.000019224870 => 0.000019226223, e -0.000000001354 */
88 MAD_F(0x00001000), /* 0.000015258789 => 0.000015258789, e -0.000000000000 */
89 MAD_F(0x00000cb3), /* 0.000012110909 => 0.000012110919, e -0.000000000010 */
90 MAD_F(0x00000a14), /* 0.000009612435 => 0.000009611249, e 0.000000001186 */
91 MAD_F(0x00000800), /* 0.000007629395 => 0.000007629395, e -0.000000000000 */
92 MAD_F(0x00000659), /* 0.000006055454 => 0.000006053597, e 0.000000001858 */
93
94 MAD_F(0x0000050a), /* 0.000004806217 => 0.000004805624, e 0.000000000593 */
95 MAD_F(0x00000400), /* 0.000003814697 => 0.000003814697, e 0.000000000000 */
96 MAD_F(0x0000032d), /* 0.000003027727 => 0.000003028661, e -0.000000000934 */
97 MAD_F(0x00000285), /* 0.000002403109 => 0.000002402812, e 0.000000000296 */
98 MAD_F(0x00000200), /* 0.000001907349 => 0.000001907349, e -0.000000000000 */
99 MAD_F(0x00000196), /* 0.000001513864 => 0.000001512468, e 0.000000001396 */
100 MAD_F(0x00000143) /* 0.000001201554 => 0.000001203269, e -0.000000001714 */
diff --git a/core/multimedia/opieplayer/libmad/stream.c b/core/multimedia/opieplayer/libmad/stream.c
new file mode 100644
index 0000000..dea7b8e
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/stream.c
@@ -0,0 +1,123 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifdef HAVE_CONFIG_H
23# include "libmad_config.h"
24# endif
25
26# include "libmad_global.h"
27
28# include <stdlib.h>
29
30# include "bit.h"
31# include "stream.h"
32
33/*
34 * NAME:stream->init()
35 * DESCRIPTION:initialize stream struct
36 */
37void mad_stream_init(struct mad_stream *stream)
38{
39 stream->buffer = 0;
40 stream->bufend = 0;
41 stream->skiplen = 0;
42
43 stream->sync = 0;
44 stream->freerate = 0;
45
46 stream->this_frame = 0;
47 stream->next_frame = 0;
48 mad_bit_init(&stream->ptr, 0);
49
50 mad_bit_init(&stream->anc_ptr, 0);
51 stream->anc_bitlen = 0;
52
53 stream->main_data = 0;
54 stream->md_len = 0;
55
56 stream->options = 0;
57 stream->error = 0;
58}
59
60/*
61 * NAME:stream->finish()
62 * DESCRIPTION:deallocate any dynamic memory associated with stream
63 */
64void mad_stream_finish(struct mad_stream *stream)
65{
66 if (stream->main_data) {
67 free(stream->main_data);
68 stream->main_data = 0;
69 }
70
71 mad_bit_finish(&stream->anc_ptr);
72 mad_bit_finish(&stream->ptr);
73}
74
75/*
76 * NAME:stream->buffer()
77 * DESCRIPTION:set stream buffer pointers
78 */
79void mad_stream_buffer(struct mad_stream *stream,
80 unsigned char const *buffer, unsigned long length)
81{
82 stream->buffer = buffer;
83 stream->bufend = buffer + length;
84
85 stream->this_frame = buffer;
86 stream->next_frame = buffer;
87
88 stream->sync = 1;
89
90 mad_bit_init(&stream->ptr, buffer);
91}
92
93/*
94 * NAME:stream->skip()
95 * DESCRIPTION:arrange to skip bytes before the next frame
96 */
97void mad_stream_skip(struct mad_stream *stream, unsigned long length)
98{
99 stream->skiplen += length;
100}
101
102/*
103 * NAME:stream->sync()
104 * DESCRIPTION:locate the next stream sync word
105 */
106int mad_stream_sync(struct mad_stream *stream)
107{
108 register unsigned char const *ptr, *end;
109
110 ptr = mad_bit_nextbyte(&stream->ptr);
111 end = stream->bufend;
112
113 while (ptr < end - 1 &&
114 !(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0))
115 ++ptr;
116
117 if (end - ptr < MAD_BUFFER_GUARD)
118 return -1;
119
120 mad_bit_init(&stream->ptr, ptr);
121
122 return 0;
123}
diff --git a/core/multimedia/opieplayer/libmad/stream.h b/core/multimedia/opieplayer/libmad/stream.h
new file mode 100644
index 0000000..cf3280e
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/stream.h
@@ -0,0 +1,102 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifndef LIBMAD_STREAM_H
23# define LIBMAD_STREAM_H
24
25# include "bit.h"
26
27 # define MAD_BUFFER_GUARD8
28 # define MAD_BUFFER_MDLEN(511 + 2048 + MAD_BUFFER_GUARD)
29
30enum mad_error {
31 MAD_ERROR_BUFLEN = 0x0001,/* input buffer too small (or EOF) */
32 MAD_ERROR_BUFPTR = 0x0002,/* invalid (null) buffer pointer */
33
34 MAD_ERROR_NOMEM = 0x0031,/* not enough memory */
35
36 MAD_ERROR_LOSTSYNC = 0x0101,/* lost synchronization */
37 MAD_ERROR_BADLAYER = 0x0102,/* reserved header layer value */
38 MAD_ERROR_BADBITRATE = 0x0103,/* forbidden bitrate value */
39 MAD_ERROR_BADSAMPLERATE = 0x0104,/* reserved sample frequency value */
40 MAD_ERROR_BADEMPHASIS = 0x0105,/* reserved emphasis value */
41
42 MAD_ERROR_BADCRC = 0x0201,/* CRC check failed */
43 MAD_ERROR_BADBITALLOC = 0x0211,/* forbidden bit allocation value */
44 MAD_ERROR_BADSCALEFACTOR = 0x0221,/* bad scalefactor index */
45 MAD_ERROR_BADFRAMELEN = 0x0231,/* bad frame length */
46 MAD_ERROR_BADBIGVALUES = 0x0232,/* bad big_values count */
47 MAD_ERROR_BADBLOCKTYPE = 0x0233,/* reserved block_type */
48 MAD_ERROR_BADSCFSI = 0x0234,/* bad scalefactor selection info */
49 MAD_ERROR_BADDATAPTR = 0x0235,/* bad main_data_begin pointer */
50 MAD_ERROR_BADPART3LEN = 0x0236,/* bad audio data length */
51 MAD_ERROR_BADHUFFTABLE = 0x0237,/* bad Huffman table select */
52 MAD_ERROR_BADHUFFDATA = 0x0238,/* Huffman data overrun */
53 MAD_ERROR_BADSTEREO = 0x0239/* incompatible block_type for JS */
54};
55
56 # define MAD_RECOVERABLE(error)((error) & 0xff00)
57
58struct mad_stream {
59 unsigned char const *buffer; /* input bitstream buffer */
60 unsigned char const *bufend; /* end of buffer */
61 unsigned long skiplen; /* bytes to skip before next frame */
62
63 int sync; /* stream sync found */
64 unsigned long freerate; /* free bitrate (fixed) */
65
66 unsigned char const *this_frame;/* start of current frame */
67 unsigned char const *next_frame;/* start of next frame */
68 struct mad_bitptr ptr; /* current processing bit pointer */
69
70 struct mad_bitptr anc_ptr; /* ancillary bits pointer */
71 unsigned int anc_bitlen; /* number of ancillary bits */
72
73 unsigned char (*main_data)[MAD_BUFFER_MDLEN];
74 /* Layer III main_data() */
75 unsigned int md_len; /* bytes in main_data */
76
77 int options; /* decoding options (see below) */
78 enum mad_error error; /* error code (see above) */
79};
80
81enum {
82 MAD_OPTION_IGNORECRC = 0x0001,/* ignore CRC errors */
83 MAD_OPTION_HALFSAMPLERATE = 0x0002,/* generate PCM at 1/2 sample rate */
84# if 0 /* not yet implemented */
85 MAD_OPTION_LEFTCHANNEL = 0x0010,/* decode left channel only */
86 MAD_OPTION_RIGHTCHANNEL = 0x0020,/* decode right channel only */
87 MAD_OPTION_SINGLECHANNEL = 0x0030,/* combine channels */
88# endif
89};
90
91void mad_stream_init(struct mad_stream *);
92void mad_stream_finish(struct mad_stream *);
93
94# define mad_stream_options(stream, opts) ((stream)->options = (opts))
95
96void mad_stream_buffer(struct mad_stream *,
97 unsigned char const *, unsigned long);
98void mad_stream_skip(struct mad_stream *, unsigned long);
99
100int mad_stream_sync(struct mad_stream *);
101
102# endif
diff --git a/core/multimedia/opieplayer/libmad/synth.c b/core/multimedia/opieplayer/libmad/synth.c
new file mode 100644
index 0000000..e1914c9
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/synth.c
@@ -0,0 +1,855 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifdef HAVE_CONFIG_H
23# include "libmad_config.h"
24# endif
25
26# include "libmad_global.h"
27
28# include "fixed.h"
29# include "frame.h"
30# include "synth.h"
31
32/*
33 * NAME:synth->init()
34 * DESCRIPTION:initialize synth struct
35 */
36void mad_synth_init(struct mad_synth *synth)
37{
38 mad_synth_mute(synth);
39
40 synth->phase = 0;
41
42 synth->pcm.samplerate = 0;
43 synth->pcm.channels = 0;
44 synth->pcm.length = 0;
45}
46
47/*
48 * NAME:synth->mute()
49 * DESCRIPTION:zero all polyphase filterbank values, resetting synthesis
50 */
51void mad_synth_mute(struct mad_synth *synth)
52{
53 unsigned int ch, s, v;
54
55 for (ch = 0; ch < 2; ++ch) {
56 for (s = 0; s < 16; ++s) {
57 for (v = 0; v < 8; ++v) {
58 synth->filter[ch][0][0][s][v] = synth->filter[ch][0][1][s][v] =
59 synth->filter[ch][1][0][s][v] = synth->filter[ch][1][1][s][v] = 0;
60 }
61 }
62 }
63}
64
65/*
66 * An optional optimization called here the Subband Synthesis Optimization
67 * (SSO) improves the performance of subband synthesis at the expense of
68 * accuracy.
69 *
70 * The idea is to simplify 32x32->64-bit multiplication to 32x32->32 such
71 * that extra scaling and rounding are not necessary. This often allows the
72 * compiler to use faster 32-bit multiply-accumulate instructions instead of
73 * explicit 64-bit multiply, shift, and add instructions.
74 *
75 * SSO works like this: a full 32x32->64-bit multiply of two mad_fixed_t
76 * values requires the result to be right-shifted 28 bits to be properly
77 * scaled to the same fixed-point format. Right shifts can be applied at any
78 * time to either operand or to the result, so the optimization involves
79 * careful placement of these shifts to minimize the loss of accuracy.
80 *
81 * First, a 14-bit shift is applied with rounding at compile-time to the D[]
82 * table of coefficients for the subband synthesis window. This only loses 2
83 * bits of accuracy because the lower 12 bits are always zero. A second
84 * 12-bit shift occurs after the DCT calculation. This loses 12 bits of
85 * accuracy. Finally, a third 2-bit shift occurs just before the sample is
86 * saved in the PCM buffer. 14 + 12 + 2 == 28 bits.
87 */
88
89/* FPM_DEFAULT without OPT_SSO will actually lose accuracy and performance */
90
91# if defined(FPM_DEFAULT) && !defined(OPT_SSO)
92# define OPT_SSO
93# endif
94
95/* second SSO shift, with rounding */
96
97# if defined(OPT_SSO)
98# define SHIFT(x) (((x) + (1L << 11)) >> 12)
99# else
100# define SHIFT(x) (x)
101# endif
102
103/* possible DCT speed optimization */
104
105# if defined(OPT_SPEED) && defined(MAD_F_MLX)
106# define OPT_DCTO
107# define MUL(x, y) \
108 ({ mad_fixed64hi_t hi; \
109 mad_fixed64lo_t lo; \
110 MAD_F_MLX(hi, lo, (x), (y)); \
111 hi << (32 - MAD_F_SCALEBITS - 3); \
112 })
113# else
114# undef OPT_DCTO
115# define MUL(x, y) mad_f_mul((x), (y))
116# endif
117
118/*
119 * NAME:dct32()
120 * DESCRIPTION:perform fast in[32]->out[32] DCT
121 */
122static
123void dct32(mad_fixed_t const in[32], unsigned int slot,
124 mad_fixed_t lo[16][8], mad_fixed_t hi[16][8])
125{
126 mad_fixed_t t0, t1, t2, t3, t4, t5, t6, t7;
127 mad_fixed_t t8, t9, t10, t11, t12, t13, t14, t15;
128 mad_fixed_t t16, t17, t18, t19, t20, t21, t22, t23;
129 mad_fixed_t t24, t25, t26, t27, t28, t29, t30, t31;
130 mad_fixed_t t32, t33, t34, t35, t36, t37, t38, t39;
131 mad_fixed_t t40, t41, t42, t43, t44, t45, t46, t47;
132 mad_fixed_t t48, t49, t50, t51, t52, t53, t54, t55;
133 mad_fixed_t t56, t57, t58, t59, t60, t61, t62, t63;
134 mad_fixed_t t64, t65, t66, t67, t68, t69, t70, t71;
135 mad_fixed_t t72, t73, t74, t75, t76, t77, t78, t79;
136 mad_fixed_t t80, t81, t82, t83, t84, t85, t86, t87;
137 mad_fixed_t t88, t89, t90, t91, t92, t93, t94, t95;
138 mad_fixed_t t96, t97, t98, t99, t100, t101, t102, t103;
139 mad_fixed_t t104, t105, t106, t107, t108, t109, t110, t111;
140 mad_fixed_t t112, t113, t114, t115, t116, t117, t118, t119;
141 mad_fixed_t t120, t121, t122, t123, t124, t125, t126, t127;
142 mad_fixed_t t128, t129, t130, t131, t132, t133, t134, t135;
143 mad_fixed_t t136, t137, t138, t139, t140, t141, t142, t143;
144 mad_fixed_t t144, t145, t146, t147, t148, t149, t150, t151;
145 mad_fixed_t t152, t153, t154, t155, t156, t157, t158, t159;
146 mad_fixed_t t160, t161, t162, t163, t164, t165, t166, t167;
147 mad_fixed_t t168, t169, t170, t171, t172, t173, t174, t175;
148 mad_fixed_t t176;
149
150 /* costab[i] = cos(PI / (2 * 32) * i) */
151
152# if defined(OPT_DCTO)
153 enum {
154 costab1 = MAD_F(0x7fd8878e),
155 costab2 = MAD_F(0x7f62368f),
156 costab3 = MAD_F(0x7e9d55fc),
157 costab4 = MAD_F(0x7d8a5f40),
158 costab5 = MAD_F(0x7c29fbee),
159 costab6 = MAD_F(0x7a7d055b),
160 costab7 = MAD_F(0x78848414),
161 costab8 = MAD_F(0x7641af3d),
162 costab9 = MAD_F(0x73b5ebd1),
163 costab10 = MAD_F(0x70e2cbc6),
164 costab11 = MAD_F(0x6dca0d14),
165 costab12 = MAD_F(0x6a6d98a4),
166 costab13 = MAD_F(0x66cf8120),
167 costab14 = MAD_F(0x62f201ac),
168 costab15 = MAD_F(0x5ed77c8a),
169 costab16 = MAD_F(0x5a82799a),
170 costab17 = MAD_F(0x55f5a4d2),
171 costab18 = MAD_F(0x5133cc94),
172 costab19 = MAD_F(0x4c3fdff4),
173 costab20 = MAD_F(0x471cece7),
174 costab21 = MAD_F(0x41ce1e65),
175 costab22 = MAD_F(0x3c56ba70),
176 costab23 = MAD_F(0x36ba2014),
177 costab24 = MAD_F(0x30fbc54d),
178 costab25 = MAD_F(0x2b1f34eb),
179 costab26 = MAD_F(0x25280c5e),
180 costab27 = MAD_F(0x1f19f97b),
181 costab28 = MAD_F(0x18f8b83c),
182 costab29 = MAD_F(0x12c8106f),
183 costab30 = MAD_F(0x0c8bd35e),
184 costab31 = MAD_F(0x0647d97c)
185 };
186# else
187 enum {
188 costab1 = MAD_F(0x0ffb10f2), /* 0.998795456 */
189 costab2 = MAD_F(0x0fec46d2), /* 0.995184727 */
190 costab3 = MAD_F(0x0fd3aac0), /* 0.989176510 */
191 costab4 = MAD_F(0x0fb14be8), /* 0.980785280 */
192 costab5 = MAD_F(0x0f853f7e), /* 0.970031253 */
193 costab6 = MAD_F(0x0f4fa0ab), /* 0.956940336 */
194 costab7 = MAD_F(0x0f109082), /* 0.941544065 */
195 costab8 = MAD_F(0x0ec835e8), /* 0.923879533 */
196 costab9 = MAD_F(0x0e76bd7a), /* 0.903989293 */
197 costab10 = MAD_F(0x0e1c5979), /* 0.881921264 */
198 costab11 = MAD_F(0x0db941a3), /* 0.857728610 */
199 costab12 = MAD_F(0x0d4db315), /* 0.831469612 */
200 costab13 = MAD_F(0x0cd9f024), /* 0.803207531 */
201 costab14 = MAD_F(0x0c5e4036), /* 0.773010453 */
202 costab15 = MAD_F(0x0bdaef91), /* 0.740951125 */
203 costab16 = MAD_F(0x0b504f33), /* 0.707106781 */
204 costab17 = MAD_F(0x0abeb49a), /* 0.671558955 */
205 costab18 = MAD_F(0x0a267993), /* 0.634393284 */
206 costab19 = MAD_F(0x0987fbfe), /* 0.595699304 */
207 costab20 = MAD_F(0x08e39d9d), /* 0.555570233 */
208 costab21 = MAD_F(0x0839c3cd), /* 0.514102744 */
209 costab22 = MAD_F(0x078ad74e), /* 0.471396737 */
210 costab23 = MAD_F(0x06d74402), /* 0.427555093 */
211 costab24 = MAD_F(0x061f78aa), /* 0.382683432 */
212 costab25 = MAD_F(0x0563e69d), /* 0.336889853 */
213 costab26 = MAD_F(0x04a5018c), /* 0.290284677 */
214 costab27 = MAD_F(0x03e33f2f), /* 0.242980180 */
215 costab28 = MAD_F(0x031f1708), /* 0.195090322 */
216 costab29 = MAD_F(0x0259020e), /* 0.146730474 */
217 costab30 = MAD_F(0x01917a6c), /* 0.098017140 */
218 costab31 = MAD_F(0x00c8fb30) /* 0.049067674 */
219 };
220# endif
221
222 t0 = in[0] + in[31]; t16 = MUL(in[0] - in[31], costab1);
223 t1 = in[15] + in[16]; t17 = MUL(in[15] - in[16], costab31);
224
225 t41 = t16 + t17;
226 t59 = MUL(t16 - t17, costab2);
227 t33 = t0 + t1;
228 t50 = MUL(t0 - t1, costab2);
229
230 t2 = in[7] + in[24]; t18 = MUL(in[7] - in[24], costab15);
231 t3 = in[8] + in[23]; t19 = MUL(in[8] - in[23], costab17);
232
233 t42 = t18 + t19;
234 t60 = MUL(t18 - t19, costab30);
235 t34 = t2 + t3;
236 t51 = MUL(t2 - t3, costab30);
237
238 t4 = in[3] + in[28]; t20 = MUL(in[3] - in[28], costab7);
239 t5 = in[12] + in[19]; t21 = MUL(in[12] - in[19], costab25);
240
241 t43 = t20 + t21;
242 t61 = MUL(t20 - t21, costab14);
243 t35 = t4 + t5;
244 t52 = MUL(t4 - t5, costab14);
245
246 t6 = in[4] + in[27]; t22 = MUL(in[4] - in[27], costab9);
247 t7 = in[11] + in[20]; t23 = MUL(in[11] - in[20], costab23);
248
249 t44 = t22 + t23;
250 t62 = MUL(t22 - t23, costab18);
251 t36 = t6 + t7;
252 t53 = MUL(t6 - t7, costab18);
253
254 t8 = in[1] + in[30]; t24 = MUL(in[1] - in[30], costab3);
255 t9 = in[14] + in[17]; t25 = MUL(in[14] - in[17], costab29);
256
257 t45 = t24 + t25;
258 t63 = MUL(t24 - t25, costab6);
259 t37 = t8 + t9;
260 t54 = MUL(t8 - t9, costab6);
261
262 t10 = in[6] + in[25]; t26 = MUL(in[6] - in[25], costab13);
263 t11 = in[9] + in[22]; t27 = MUL(in[9] - in[22], costab19);
264
265 t46 = t26 + t27;
266 t64 = MUL(t26 - t27, costab26);
267 t38 = t10 + t11;
268 t55 = MUL(t10 - t11, costab26);
269
270 t12 = in[2] + in[29]; t28 = MUL(in[2] - in[29], costab5);
271 t13 = in[13] + in[18]; t29 = MUL(in[13] - in[18], costab27);
272
273 t47 = t28 + t29;
274 t65 = MUL(t28 - t29, costab10);
275 t39 = t12 + t13;
276 t56 = MUL(t12 - t13, costab10);
277
278 t14 = in[5] + in[26]; t30 = MUL(in[5] - in[26], costab11);
279 t15 = in[10] + in[21]; t31 = MUL(in[10] - in[21], costab21);
280
281 t48 = t30 + t31;
282 t66 = MUL(t30 - t31, costab22);
283 t40 = t14 + t15;
284 t57 = MUL(t14 - t15, costab22);
285
286 t69 = t33 + t34; t89 = MUL(t33 - t34, costab4);
287 t70 = t35 + t36; t90 = MUL(t35 - t36, costab28);
288 t71 = t37 + t38; t91 = MUL(t37 - t38, costab12);
289 t72 = t39 + t40; t92 = MUL(t39 - t40, costab20);
290 t73 = t41 + t42; t94 = MUL(t41 - t42, costab4);
291 t74 = t43 + t44; t95 = MUL(t43 - t44, costab28);
292 t75 = t45 + t46; t96 = MUL(t45 - t46, costab12);
293 t76 = t47 + t48; t97 = MUL(t47 - t48, costab20);
294
295 t78 = t50 + t51; t100 = MUL(t50 - t51, costab4);
296 t79 = t52 + t53; t101 = MUL(t52 - t53, costab28);
297 t80 = t54 + t55; t102 = MUL(t54 - t55, costab12);
298 t81 = t56 + t57; t103 = MUL(t56 - t57, costab20);
299
300 t83 = t59 + t60; t106 = MUL(t59 - t60, costab4);
301 t84 = t61 + t62; t107 = MUL(t61 - t62, costab28);
302 t85 = t63 + t64; t108 = MUL(t63 - t64, costab12);
303 t86 = t65 + t66; t109 = MUL(t65 - t66, costab20);
304
305 t113 = t69 + t70;
306 t114 = t71 + t72;
307
308 /* 0 */ hi[15][slot] = SHIFT(t113 + t114);
309 /* 16 */ lo[ 0][slot] = SHIFT(MUL(t113 - t114, costab16));
310
311 t115 = t73 + t74;
312 t116 = t75 + t76;
313
314 t32 = t115 + t116;
315
316 /* 1 */ hi[14][slot] = SHIFT(t32);
317
318 t118 = t78 + t79;
319 t119 = t80 + t81;
320
321 t58 = t118 + t119;
322
323 /* 2 */ hi[13][slot] = SHIFT(t58);
324
325 t121 = t83 + t84;
326 t122 = t85 + t86;
327
328 t67 = t121 + t122;
329
330 t49 = (t67 << 1) - t32;
331
332 /* 3 */ hi[12][slot] = SHIFT(t49);
333
334 t125 = t89 + t90;
335 t126 = t91 + t92;
336
337 t93 = t125 + t126;
338
339 /* 4 */ hi[11][slot] = SHIFT(t93);
340
341 t128 = t94 + t95;
342 t129 = t96 + t97;
343
344 t98 = t128 + t129;
345
346 t68 = (t98 << 1) - t49;
347
348 /* 5 */ hi[10][slot] = SHIFT(t68);
349
350 t132 = t100 + t101;
351 t133 = t102 + t103;
352
353 t104 = t132 + t133;
354
355 t82 = (t104 << 1) - t58;
356
357 /* 6 */ hi[ 9][slot] = SHIFT(t82);
358
359 t136 = t106 + t107;
360 t137 = t108 + t109;
361
362 t110 = t136 + t137;
363
364 t87 = (t110 << 1) - t67;
365
366 t77 = (t87 << 1) - t68;
367
368 /* 7 */ hi[ 8][slot] = SHIFT(t77);
369
370 t141 = MUL(t69 - t70, costab8);
371 t142 = MUL(t71 - t72, costab24);
372 t143 = t141 + t142;
373
374 /* 8 */ hi[ 7][slot] = SHIFT(t143);
375 /* 24 */ lo[ 8][slot] =
376 SHIFT((MUL(t141 - t142, costab16) << 1) - t143);
377
378 t144 = MUL(t73 - t74, costab8);
379 t145 = MUL(t75 - t76, costab24);
380 t146 = t144 + t145;
381
382 t88 = (t146 << 1) - t77;
383
384 /* 9 */ hi[ 6][slot] = SHIFT(t88);
385
386 t148 = MUL(t78 - t79, costab8);
387 t149 = MUL(t80 - t81, costab24);
388 t150 = t148 + t149;
389
390 t105 = (t150 << 1) - t82;
391
392 /* 10 */ hi[ 5][slot] = SHIFT(t105);
393
394 t152 = MUL(t83 - t84, costab8);
395 t153 = MUL(t85 - t86, costab24);
396 t154 = t152 + t153;
397
398 t111 = (t154 << 1) - t87;
399
400 t99 = (t111 << 1) - t88;
401
402 /* 11 */ hi[ 4][slot] = SHIFT(t99);
403
404 t157 = MUL(t89 - t90, costab8);
405 t158 = MUL(t91 - t92, costab24);
406 t159 = t157 + t158;
407
408 t127 = (t159 << 1) - t93;
409
410 /* 12 */ hi[ 3][slot] = SHIFT(t127);
411
412 t160 = (MUL(t125 - t126, costab16) << 1) - t127;
413
414 /* 20 */ lo[ 4][slot] = SHIFT(t160);
415 /* 28 */ lo[12][slot] =
416 SHIFT((((MUL(t157 - t158, costab16) << 1) - t159) << 1) - t160);
417
418 t161 = MUL(t94 - t95, costab8);
419 t162 = MUL(t96 - t97, costab24);
420 t163 = t161 + t162;
421
422 t130 = (t163 << 1) - t98;
423
424 t112 = (t130 << 1) - t99;
425
426 /* 13 */ hi[ 2][slot] = SHIFT(t112);
427
428 t164 = (MUL(t128 - t129, costab16) << 1) - t130;
429
430 t166 = MUL(t100 - t101, costab8);
431 t167 = MUL(t102 - t103, costab24);
432 t168 = t166 + t167;
433
434 t134 = (t168 << 1) - t104;
435
436 t120 = (t134 << 1) - t105;
437
438 /* 14 */ hi[ 1][slot] = SHIFT(t120);
439
440 t135 = (MUL(t118 - t119, costab16) << 1) - t120;
441
442 /* 18 */ lo[ 2][slot] = SHIFT(t135);
443
444 t169 = (MUL(t132 - t133, costab16) << 1) - t134;
445
446 t151 = (t169 << 1) - t135;
447
448 /* 22 */ lo[ 6][slot] = SHIFT(t151);
449
450 t170 = (((MUL(t148 - t149, costab16) << 1) - t150) << 1) - t151;
451
452 /* 26 */ lo[10][slot] = SHIFT(t170);
453 /* 30 */ lo[14][slot] =
454 SHIFT((((((MUL(t166 - t167, costab16) << 1) -
455 t168) << 1) - t169) << 1) - t170);
456
457 t171 = MUL(t106 - t107, costab8);
458 t172 = MUL(t108 - t109, costab24);
459 t173 = t171 + t172;
460
461 t138 = (t173 << 1) - t110;
462
463 t123 = (t138 << 1) - t111;
464
465 t139 = (MUL(t121 - t122, costab16) << 1) - t123;
466
467 t117 = (t123 << 1) - t112;
468
469 /* 15 */ hi[ 0][slot] = SHIFT(t117);
470
471 t124 = (MUL(t115 - t116, costab16) << 1) - t117;
472
473 /* 17 */ lo[ 1][slot] = SHIFT(t124);
474
475 t131 = (t139 << 1) - t124;
476
477 /* 19 */ lo[ 3][slot] = SHIFT(t131);
478
479 t140 = (t164 << 1) - t131;
480
481 /* 21 */ lo[ 5][slot] = SHIFT(t140);
482
483 t174 = (MUL(t136 - t137, costab16) << 1) - t138;
484
485 t155 = (t174 << 1) - t139;
486
487 t147 = (t155 << 1) - t140;
488
489 /* 23 */ lo[ 7][slot] = SHIFT(t147);
490
491 t156 = (((MUL(t144 - t145, costab16) << 1) - t146) << 1) - t147;
492
493 /* 25 */ lo[ 9][slot] = SHIFT(t156);
494
495 t175 = (((MUL(t152 - t153, costab16) << 1) - t154) << 1) - t155;
496
497 t165 = (t175 << 1) - t156;
498
499 /* 27 */ lo[11][slot] = SHIFT(t165);
500
501 t176 = (((((MUL(t161 - t162, costab16) << 1) -
502 t163) << 1) - t164) << 1) - t165;
503
504 /* 29 */ lo[13][slot] = SHIFT(t176);
505 /* 31 */ lo[15][slot] =
506 SHIFT((((((((MUL(t171 - t172, costab16) << 1) -
507 t173) << 1) - t174) << 1) - t175) << 1) - t176);
508
509 /*
510 * Totals:
511 * 80 multiplies
512 * 80 additions
513 * 119 subtractions
514 * 49 shifts (not counting SSO)
515 */
516}
517
518# undef MUL
519# undef SHIFT
520
521/* third SSO shift and/or D[] optimization preshift */
522
523# if defined(OPT_SSO)
524# if MAD_F_FRACBITS != 28
525# error "MAD_F_FRACBITS must be 28 to use OPT_SSO"
526# endif
527 # define ML0(hi, lo, x, y)((lo) = (x) * (y))
528 # define MLA(hi, lo, x, y)((lo) += (x) * (y))
529 # define MLZ(hi, lo) ((void) (hi), (mad_fixed_t) (lo))
530 # define SHIFT(x) ((x) >> 2)
531 # define PRESHIFT(x) ((MAD_F(x) + (1L << 13)) >> 14)
532# else
533 # define ML0(hi, lo, x, y)MAD_F_ML0((hi), (lo), (x), (y))
534 # define MLA(hi, lo, x, y)MAD_F_MLA((hi), (lo), (x), (y))
535 # define MLZ(hi, lo) MAD_F_MLZ((hi), (lo))
536 # define SHIFT(x) (x)
537# if defined(MAD_F_SCALEBITS)
538# undef MAD_F_SCALEBITS
539 # define MAD_F_SCALEBITS(MAD_F_FRACBITS - 12)
540 # define PRESHIFT(x) (MAD_F(x) >> 12)
541# else
542 # define PRESHIFT(x) MAD_F(x)
543# endif
544# endif
545
546static
547mad_fixed_t const D[17][32] = {
548# include "D.dat"
549};
550
551# if defined(ASO_SYNTH)
552void synth_full(struct mad_synth *, struct mad_frame const *,
553 unsigned int, unsigned int);
554# else
555/*
556 * NAME:synth->full()
557 * DESCRIPTION:perform full frequency PCM synthesis
558 */
559static
560void synth_full(struct mad_synth *synth, struct mad_frame const *frame,
561 unsigned int nch, unsigned int ns)
562{
563 unsigned int phase, ch, s, sb, pe, po;
564 mad_fixed_t *pcm1, *pcm2, (*filter)[2][2][16][8];
565 mad_fixed_t const (*sbsample)[36][32];
566 register mad_fixed_t (*fe)[8], (*fx)[8], (*fo)[8];
567 register mad_fixed_t const (*Dptr)[32], *ptr;
568 register mad_fixed64hi_t hi;
569 register mad_fixed64lo_t lo;
570
571 for (ch = 0; ch < nch; ++ch) {
572 sbsample = &frame->sbsample[ch];
573 filter = &synth->filter[ch];
574 phase = synth->phase;
575 pcm1 = synth->pcm.samples[ch];
576
577 for (s = 0; s < ns; ++s) {
578 dct32((*sbsample)[s], phase >> 1,
579 (*filter)[0][phase & 1], (*filter)[1][phase & 1]);
580
581 pe = phase & ~1;
582 po = ((phase - 1) & 0xf) | 1;
583
584 /* calculate 32 samples */
585
586 fe = &(*filter)[0][ phase & 1][0];
587 fx = &(*filter)[0][~phase & 1][0];
588 fo = &(*filter)[1][~phase & 1][0];
589
590 Dptr = &D[0];
591
592 ptr = *Dptr + pe;
593 ML0(hi, lo, (*fe)[0], ptr[ 0]);
594 MLA(hi, lo, (*fe)[1], ptr[14]);
595 MLA(hi, lo, (*fe)[2], ptr[12]);
596 MLA(hi, lo, (*fe)[3], ptr[10]);
597 MLA(hi, lo, (*fe)[4], ptr[ 8]);
598 MLA(hi, lo, (*fe)[5], ptr[ 6]);
599 MLA(hi, lo, (*fe)[6], ptr[ 4]);
600 MLA(hi, lo, (*fe)[7], ptr[ 2]);
601
602 ptr = *Dptr + po;
603 MLA(hi, lo, (*fx)[0], -ptr[ 0]);
604 MLA(hi, lo, (*fx)[1], -ptr[14]);
605 MLA(hi, lo, (*fx)[2], -ptr[12]);
606 MLA(hi, lo, (*fx)[3], -ptr[10]);
607 MLA(hi, lo, (*fx)[4], -ptr[ 8]);
608 MLA(hi, lo, (*fx)[5], -ptr[ 6]);
609 MLA(hi, lo, (*fx)[6], -ptr[ 4]);
610 MLA(hi, lo, (*fx)[7], -ptr[ 2]);
611
612 *pcm1++ = SHIFT(MLZ(hi, lo));
613
614 pcm2 = pcm1 + 30;
615
616 for (sb = 1; sb < 16; ++sb) {
617 ++fe;
618 ++Dptr;
619
620 /* D[32 - sb][i] == -D[sb][31 - i] */
621
622 ptr = *Dptr + pe;
623 ML0(hi, lo, (*fe)[7], ptr[ 2]);
624 MLA(hi, lo, (*fe)[6], ptr[ 4]);
625 MLA(hi, lo, (*fe)[5], ptr[ 6]);
626 MLA(hi, lo, (*fe)[4], ptr[ 8]);
627 MLA(hi, lo, (*fe)[3], ptr[10]);
628 MLA(hi, lo, (*fe)[2], ptr[12]);
629 MLA(hi, lo, (*fe)[1], ptr[14]);
630 MLA(hi, lo, (*fe)[0], ptr[ 0]);
631
632 ptr = *Dptr + po;
633 MLA(hi, lo, (*fo)[0], -ptr[ 0]);
634 MLA(hi, lo, (*fo)[1], -ptr[14]);
635 MLA(hi, lo, (*fo)[2], -ptr[12]);
636 MLA(hi, lo, (*fo)[3], -ptr[10]);
637 MLA(hi, lo, (*fo)[4], -ptr[ 8]);
638 MLA(hi, lo, (*fo)[5], -ptr[ 6]);
639 MLA(hi, lo, (*fo)[6], -ptr[ 4]);
640 MLA(hi, lo, (*fo)[7], -ptr[ 2]);
641
642 *pcm1++ = SHIFT(MLZ(hi, lo));
643
644 ptr = *Dptr - po;
645 ML0(hi, lo, (*fo)[7], ptr[31 - 2]);
646 MLA(hi, lo, (*fo)[6], ptr[31 - 4]);
647 MLA(hi, lo, (*fo)[5], ptr[31 - 6]);
648 MLA(hi, lo, (*fo)[4], ptr[31 - 8]);
649 MLA(hi, lo, (*fo)[3], ptr[31 - 10]);
650 MLA(hi, lo, (*fo)[2], ptr[31 - 12]);
651 MLA(hi, lo, (*fo)[1], ptr[31 - 14]);
652 MLA(hi, lo, (*fo)[0], ptr[31 - 16]);
653
654 ptr = *Dptr - pe;
655 MLA(hi, lo, (*fe)[0], ptr[31 - 16]);
656 MLA(hi, lo, (*fe)[1], ptr[31 - 14]);
657 MLA(hi, lo, (*fe)[2], ptr[31 - 12]);
658 MLA(hi, lo, (*fe)[3], ptr[31 - 10]);
659 MLA(hi, lo, (*fe)[4], ptr[31 - 8]);
660 MLA(hi, lo, (*fe)[5], ptr[31 - 6]);
661 MLA(hi, lo, (*fe)[6], ptr[31 - 4]);
662 MLA(hi, lo, (*fe)[7], ptr[31 - 2]);
663
664 *pcm2-- = SHIFT(MLZ(hi, lo));
665
666 ++fo;
667 }
668
669 ++Dptr;
670
671 ptr = *Dptr + po;
672 ML0(hi, lo, (*fo)[0], ptr[ 0]);
673 MLA(hi, lo, (*fo)[1], ptr[14]);
674 MLA(hi, lo, (*fo)[2], ptr[12]);
675 MLA(hi, lo, (*fo)[3], ptr[10]);
676 MLA(hi, lo, (*fo)[4], ptr[ 8]);
677 MLA(hi, lo, (*fo)[5], ptr[ 6]);
678 MLA(hi, lo, (*fo)[6], ptr[ 4]);
679 MLA(hi, lo, (*fo)[7], ptr[ 2]);
680
681 *pcm1 = SHIFT(-MLZ(hi, lo));
682 pcm1 += 16;
683
684 phase = (phase + 1) % 16;
685 }
686 }
687}
688# endif
689
690/*
691 * NAME:synth->half()
692 * DESCRIPTION:perform half frequency PCM synthesis
693 */
694static
695void synth_half(struct mad_synth *synth, struct mad_frame const *frame,
696 unsigned int nch, unsigned int ns)
697{
698 unsigned int phase, ch, s, sb, pe, po;
699 mad_fixed_t *pcm1, *pcm2, (*filter)[2][2][16][8];
700 mad_fixed_t const (*sbsample)[36][32];
701 register mad_fixed_t (*fe)[8], (*fx)[8], (*fo)[8];
702 register mad_fixed_t const (*Dptr)[32], *ptr;
703 register mad_fixed64hi_t hi;
704 register mad_fixed64lo_t lo;
705
706 for (ch = 0; ch < nch; ++ch) {
707 sbsample = &frame->sbsample[ch];
708 filter = &synth->filter[ch];
709 phase = synth->phase;
710 pcm1 = synth->pcm.samples[ch];
711
712 for (s = 0; s < ns; ++s) {
713 dct32((*sbsample)[s], phase >> 1,
714 (*filter)[0][phase & 1], (*filter)[1][phase & 1]);
715
716 pe = phase & ~1;
717 po = ((phase - 1) & 0xf) | 1;
718
719 /* calculate 16 samples */
720
721 fe = &(*filter)[0][ phase & 1][0];
722 fx = &(*filter)[0][~phase & 1][0];
723 fo = &(*filter)[1][~phase & 1][0];
724
725 Dptr = &D[0];
726
727 ptr = *Dptr + pe;
728 ML0(hi, lo, (*fe)[0], ptr[ 0]);
729 MLA(hi, lo, (*fe)[1], ptr[14]);
730 MLA(hi, lo, (*fe)[2], ptr[12]);
731 MLA(hi, lo, (*fe)[3], ptr[10]);
732 MLA(hi, lo, (*fe)[4], ptr[ 8]);
733 MLA(hi, lo, (*fe)[5], ptr[ 6]);
734 MLA(hi, lo, (*fe)[6], ptr[ 4]);
735 MLA(hi, lo, (*fe)[7], ptr[ 2]);
736
737 ptr = *Dptr + po;
738 MLA(hi, lo, (*fx)[0], -ptr[ 0]);
739 MLA(hi, lo, (*fx)[1], -ptr[14]);
740 MLA(hi, lo, (*fx)[2], -ptr[12]);
741 MLA(hi, lo, (*fx)[3], -ptr[10]);
742 MLA(hi, lo, (*fx)[4], -ptr[ 8]);
743 MLA(hi, lo, (*fx)[5], -ptr[ 6]);
744 MLA(hi, lo, (*fx)[6], -ptr[ 4]);
745 MLA(hi, lo, (*fx)[7], -ptr[ 2]);
746
747 *pcm1++ = SHIFT(MLZ(hi, lo));
748
749 pcm2 = pcm1 + 14;
750
751 for (sb = 1; sb < 16; ++sb) {
752 ++fe;
753 ++Dptr;
754
755 /* D[32 - sb][i] == -D[sb][31 - i] */
756
757 if (!(sb & 1)) {
758 ptr = *Dptr + pe;
759 ML0(hi, lo, (*fe)[7], ptr[ 2]);
760 MLA(hi, lo, (*fe)[6], ptr[ 4]);
761 MLA(hi, lo, (*fe)[5], ptr[ 6]);
762 MLA(hi, lo, (*fe)[4], ptr[ 8]);
763 MLA(hi, lo, (*fe)[3], ptr[10]);
764 MLA(hi, lo, (*fe)[2], ptr[12]);
765 MLA(hi, lo, (*fe)[1], ptr[14]);
766 MLA(hi, lo, (*fe)[0], ptr[ 0]);
767
768 ptr = *Dptr + po;
769 MLA(hi, lo, (*fo)[0], -ptr[ 0]);
770 MLA(hi, lo, (*fo)[1], -ptr[14]);
771 MLA(hi, lo, (*fo)[2], -ptr[12]);
772 MLA(hi, lo, (*fo)[3], -ptr[10]);
773 MLA(hi, lo, (*fo)[4], -ptr[ 8]);
774 MLA(hi, lo, (*fo)[5], -ptr[ 6]);
775 MLA(hi, lo, (*fo)[6], -ptr[ 4]);
776 MLA(hi, lo, (*fo)[7], -ptr[ 2]);
777
778 *pcm1++ = SHIFT(MLZ(hi, lo));
779
780 ptr = *Dptr - po;
781 ML0(hi, lo, (*fo)[7], ptr[31 - 2]);
782 MLA(hi, lo, (*fo)[6], ptr[31 - 4]);
783 MLA(hi, lo, (*fo)[5], ptr[31 - 6]);
784 MLA(hi, lo, (*fo)[4], ptr[31 - 8]);
785 MLA(hi, lo, (*fo)[3], ptr[31 - 10]);
786 MLA(hi, lo, (*fo)[2], ptr[31 - 12]);
787 MLA(hi, lo, (*fo)[1], ptr[31 - 14]);
788 MLA(hi, lo, (*fo)[0], ptr[31 - 16]);
789
790 ptr = *Dptr - pe;
791 MLA(hi, lo, (*fe)[0], ptr[31 - 16]);
792 MLA(hi, lo, (*fe)[1], ptr[31 - 14]);
793 MLA(hi, lo, (*fe)[2], ptr[31 - 12]);
794 MLA(hi, lo, (*fe)[3], ptr[31 - 10]);
795 MLA(hi, lo, (*fe)[4], ptr[31 - 8]);
796 MLA(hi, lo, (*fe)[5], ptr[31 - 6]);
797 MLA(hi, lo, (*fe)[6], ptr[31 - 4]);
798 MLA(hi, lo, (*fe)[7], ptr[31 - 2]);
799
800 *pcm2-- = SHIFT(MLZ(hi, lo));
801 }
802
803 ++fo;
804 }
805
806 ++Dptr;
807
808 ptr = *Dptr + po;
809 ML0(hi, lo, (*fo)[0], ptr[ 0]);
810 MLA(hi, lo, (*fo)[1], ptr[14]);
811 MLA(hi, lo, (*fo)[2], ptr[12]);
812 MLA(hi, lo, (*fo)[3], ptr[10]);
813 MLA(hi, lo, (*fo)[4], ptr[ 8]);
814 MLA(hi, lo, (*fo)[5], ptr[ 6]);
815 MLA(hi, lo, (*fo)[6], ptr[ 4]);
816 MLA(hi, lo, (*fo)[7], ptr[ 2]);
817
818 *pcm1 = SHIFT(-MLZ(hi, lo));
819 pcm1 += 8;
820
821 phase = (phase + 1) % 16;
822 }
823 }
824}
825
826/*
827 * NAME:synth->frame()
828 * DESCRIPTION:perform PCM synthesis of frame subband samples
829 */
830void mad_synth_frame(struct mad_synth *synth, struct mad_frame const *frame)
831{
832 unsigned int nch, ns;
833 void (*synth_frame)(struct mad_synth *, struct mad_frame const *,
834 unsigned int, unsigned int);
835
836 nch = MAD_NCHANNELS(&frame->header);
837 ns = MAD_NSBSAMPLES(&frame->header);
838
839 synth->pcm.samplerate = frame->header.samplerate;
840 synth->pcm.channels = nch;
841 synth->pcm.length = 32 * ns;
842
843 synth_frame = synth_full;
844
845 if (frame->options & MAD_OPTION_HALFSAMPLERATE) {
846 synth->pcm.samplerate /= 2;
847 synth->pcm.length /= 2;
848
849 synth_frame = synth_half;
850 }
851
852 synth_frame(synth, frame, nch, ns);
853
854 synth->phase = (synth->phase + ns) % 16;
855}
diff --git a/core/multimedia/opieplayer/libmad/synth.h b/core/multimedia/opieplayer/libmad/synth.h
new file mode 100644
index 0000000..64f6a86
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/synth.h
@@ -0,0 +1,50 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifndef LIBMAD_SYNTH_H
23# define LIBMAD_SYNTH_H
24
25# include "fixed.h"
26# include "frame.h"
27
28struct mad_synth {
29 mad_fixed_t filter[2][2][2][16][8];/* polyphase filterbank outputs */
30 /* [ch][eo][peo][s][v] */
31
32 unsigned int phase; /* current processing phase */
33
34 struct mad_pcm {
35 unsigned int samplerate; /* sampling frequency (Hz) */
36 unsigned short channels; /* number of channels */
37 unsigned short length; /* number of samples per channel */
38 mad_fixed_t samples[2][1152];/* PCM output samples */
39 } pcm;
40};
41
42void mad_synth_init(struct mad_synth *);
43
44# define mad_synth_finish(synth) /* nothing */
45
46void mad_synth_mute(struct mad_synth *);
47
48void mad_synth_frame(struct mad_synth *, struct mad_frame const *);
49
50# endif
diff --git a/core/multimedia/opieplayer/libmad/timer.c b/core/multimedia/opieplayer/libmad/timer.c
new file mode 100644
index 0000000..b30680c
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/timer.c
@@ -0,0 +1,480 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifdef HAVE_CONFIG_H
23# include "libmad_config.h"
24# endif
25
26# include "libmad_global.h"
27
28# include <stdio.h>
29# include <assert.h>
30
31# include "timer.h"
32
33mad_timer_t const mad_timer_zero = { 0, 0 };
34
35/*
36 * NAME:timer->compare()
37 * DESCRIPTION:indicate relative order of two timers
38 */
39int mad_timer_compare(mad_timer_t timer1, mad_timer_t timer2)
40{
41 signed long diff;
42
43 diff = timer1.seconds - timer2.seconds;
44 if (diff < 0)
45 return -1;
46 else if (diff > 0)
47 return +1;
48
49 diff = timer1.fraction - timer2.fraction;
50 if (diff < 0)
51 return -1;
52 else if (diff > 0)
53 return +1;
54
55 return 0;
56}
57
58/*
59 * NAME:timer->negate()
60 * DESCRIPTION:invert the sign of a timer
61 */
62void mad_timer_negate(mad_timer_t *timer)
63{
64 timer->seconds = -timer->seconds;
65
66 if (timer->fraction) {
67 timer->seconds -= 1;
68 timer->fraction = MAD_TIMER_RESOLUTION - timer->fraction;
69 }
70}
71
72/*
73 * NAME:timer->abs()
74 * DESCRIPTION:return the absolute value of a timer
75 */
76mad_timer_t mad_timer_abs(mad_timer_t timer)
77{
78 if (mad_timer_sign(timer) < 0)
79 mad_timer_negate(&timer);
80
81 return timer;
82}
83
84/*
85 * NAME:reduce_timer()
86 * DESCRIPTION:carry timer fraction into seconds
87 */
88static
89void reduce_timer(mad_timer_t *timer)
90{
91 timer->seconds += timer->fraction / MAD_TIMER_RESOLUTION;
92 timer->fraction %= MAD_TIMER_RESOLUTION;
93}
94
95/*
96 * NAME:gcd()
97 * DESCRIPTION:compute greatest common denominator
98 */
99static
100unsigned long gcd(unsigned long num1, unsigned long num2)
101{
102 unsigned long tmp;
103
104 while (num2) {
105 tmp = num2;
106 num2 = num1 % num2;
107 num1 = tmp;
108 }
109
110 return num1;
111}
112
113/*
114 * NAME:reduce_rational()
115 * DESCRIPTION:convert rational expression to lowest terms
116 */
117static
118void reduce_rational(unsigned long *numer, unsigned long *denom)
119{
120 unsigned long factor;
121
122 factor = gcd(*numer, *denom);
123
124 assert(factor != 0);
125
126 *numer /= factor;
127 *denom /= factor;
128}
129
130/*
131 * NAME:scale_rational()
132 * DESCRIPTION:solve numer/denom == ?/scale avoiding overflowing
133 */
134static
135unsigned long scale_rational(unsigned long numer, unsigned long denom,
136 unsigned long scale)
137{
138 reduce_rational(&numer, &denom);
139 reduce_rational(&scale, &denom);
140
141 assert(denom != 0);
142
143 if (denom < scale)
144 return numer * (scale / denom) + numer * (scale % denom) / denom;
145 if (denom < numer)
146 return scale * (numer / denom) + scale * (numer % denom) / denom;
147
148 return numer * scale / denom;
149}
150
151/*
152 * NAME:timer->set()
153 * DESCRIPTION:set timer to specific value
154 */
155void mad_timer_set(mad_timer_t *timer, unsigned long seconds,
156 unsigned long fraction, unsigned long fracparts)
157{
158 timer->seconds = seconds;
159
160 if (fraction == 0)
161 fracparts = 0;
162 else if (fracparts == 0) {
163 fracparts = fraction;
164 fraction = 1;
165 }
166
167 switch (fracparts) {
168 case 0:
169 timer->fraction = 0;
170 break;
171
172 case MAD_TIMER_RESOLUTION:
173 timer->fraction = fraction;
174 break;
175
176 case 8000:
177 timer->fraction = fraction * (MAD_TIMER_RESOLUTION / 8000);
178 break;
179
180 case 11025:
181 timer->fraction = fraction * (MAD_TIMER_RESOLUTION / 11025);
182 break;
183
184 case 12000:
185 timer->fraction = fraction * (MAD_TIMER_RESOLUTION / 12000);
186 break;
187
188 case 16000:
189 timer->fraction = fraction * (MAD_TIMER_RESOLUTION / 16000);
190 break;
191
192 case 22050:
193 timer->fraction = fraction * (MAD_TIMER_RESOLUTION / 22050);
194 break;
195
196 case 24000:
197 timer->fraction = fraction * (MAD_TIMER_RESOLUTION / 24000);
198 break;
199
200 case 32000:
201 timer->fraction = fraction * (MAD_TIMER_RESOLUTION / 32000);
202 break;
203
204 case 44100:
205 timer->fraction = fraction * (MAD_TIMER_RESOLUTION / 44100);
206 break;
207
208 case 48000:
209 timer->fraction = fraction * (MAD_TIMER_RESOLUTION / 48000);
210 break;
211
212 default:
213 timer->fraction =
214 scale_rational(fraction, fracparts, MAD_TIMER_RESOLUTION);
215 break;
216 }
217
218 if (timer->fraction >= MAD_TIMER_RESOLUTION)
219 reduce_timer(timer);
220}
221
222/*
223 * NAME:timer->add()
224 * DESCRIPTION:add one timer to another
225 */
226void mad_timer_add(mad_timer_t *timer, mad_timer_t incr)
227{
228 timer->seconds += incr.seconds;
229 timer->fraction += incr.fraction;
230
231 if (timer->fraction >= MAD_TIMER_RESOLUTION)
232 reduce_timer(timer);
233}
234
235/*
236 * NAME:timer->multiply()
237 * DESCRIPTION:multiply a timer by a scalar value
238 */
239void mad_timer_multiply(mad_timer_t *timer, signed long scalar)
240{
241 mad_timer_t addend;
242 unsigned long factor;
243
244 factor = scalar;
245 if (scalar < 0) {
246 mad_timer_negate(timer);
247 factor = -scalar;
248 }
249
250 addend = *timer;
251 *timer = mad_timer_zero;
252
253 while (factor) {
254 if (factor & 1)
255 mad_timer_add(timer, addend);
256
257 mad_timer_add(&addend, addend);
258 factor >>= 1;
259 }
260}
261
262/*
263 * NAME:timer->count()
264 * DESCRIPTION:return timer value in selected units
265 */
266signed long mad_timer_count(mad_timer_t timer, enum mad_units units)
267{
268 switch (units) {
269 case MAD_UNITS_HOURS:
270 return timer.seconds / 60 / 60;
271
272 case MAD_UNITS_MINUTES:
273 return timer.seconds / 60;
274
275 case MAD_UNITS_SECONDS:
276 return timer.seconds;
277
278 case MAD_UNITS_DECISECONDS:
279 case MAD_UNITS_CENTISECONDS:
280 case MAD_UNITS_MILLISECONDS:
281
282 case MAD_UNITS_8000_HZ:
283 case MAD_UNITS_11025_HZ:
284 case MAD_UNITS_12000_HZ:
285 case MAD_UNITS_16000_HZ:
286 case MAD_UNITS_22050_HZ:
287 case MAD_UNITS_24000_HZ:
288 case MAD_UNITS_32000_HZ:
289 case MAD_UNITS_44100_HZ:
290 case MAD_UNITS_48000_HZ:
291
292 case MAD_UNITS_24_FPS:
293 case MAD_UNITS_25_FPS:
294 case MAD_UNITS_30_FPS:
295 case MAD_UNITS_48_FPS:
296 case MAD_UNITS_50_FPS:
297 case MAD_UNITS_60_FPS:
298 case MAD_UNITS_75_FPS:
299 return timer.seconds * (signed long) units +
300 (signed long) scale_rational(timer.fraction, MAD_TIMER_RESOLUTION,
301 units);
302
303 case MAD_UNITS_23_976_FPS:
304 case MAD_UNITS_24_975_FPS:
305 case MAD_UNITS_29_97_FPS:
306 case MAD_UNITS_47_952_FPS:
307 case MAD_UNITS_49_95_FPS:
308 case MAD_UNITS_59_94_FPS:
309 return (mad_timer_count(timer, -units) + 1) * 1000 / 1001;
310 }
311
312 /* unsupported units */
313 return 0;
314}
315
316/*
317 * NAME:timer->fraction()
318 * DESCRIPTION:return fractional part of timer in arbitrary terms
319 */
320unsigned long mad_timer_fraction(mad_timer_t timer, unsigned long fracparts)
321{
322 timer = mad_timer_abs(timer);
323
324 switch (fracparts) {
325 case 0:
326 return MAD_TIMER_RESOLUTION / timer.fraction;
327
328 case MAD_TIMER_RESOLUTION:
329 return timer.fraction;
330
331 default:
332 return scale_rational(timer.fraction, MAD_TIMER_RESOLUTION, fracparts);
333 }
334}
335
336/*
337 * NAME:timer->string()
338 * DESCRIPTION:write a string representation of a timer using a template
339 */
340void mad_timer_string(mad_timer_t timer,
341 char *dest, char const *format, enum mad_units units,
342 enum mad_units fracunits, unsigned long subparts)
343{
344 unsigned long hours, minutes, seconds, sub;
345 unsigned int frac;
346
347 timer = mad_timer_abs(timer);
348
349 seconds = timer.seconds;
350 frac = sub = 0;
351
352 switch (fracunits) {
353 case MAD_UNITS_HOURS:
354 case MAD_UNITS_MINUTES:
355 case MAD_UNITS_SECONDS:
356 break;
357
358 case MAD_UNITS_DECISECONDS:
359 case MAD_UNITS_CENTISECONDS:
360 case MAD_UNITS_MILLISECONDS:
361
362 case MAD_UNITS_8000_HZ:
363 case MAD_UNITS_11025_HZ:
364 case MAD_UNITS_12000_HZ:
365 case MAD_UNITS_16000_HZ:
366 case MAD_UNITS_22050_HZ:
367 case MAD_UNITS_24000_HZ:
368 case MAD_UNITS_32000_HZ:
369 case MAD_UNITS_44100_HZ:
370 case MAD_UNITS_48000_HZ:
371
372 case MAD_UNITS_24_FPS:
373 case MAD_UNITS_25_FPS:
374 case MAD_UNITS_30_FPS:
375 case MAD_UNITS_48_FPS:
376 case MAD_UNITS_50_FPS:
377 case MAD_UNITS_60_FPS:
378 case MAD_UNITS_75_FPS:
379 {
380 unsigned long fracparts;
381
382 fracparts = MAD_TIMER_RESOLUTION / fracunits;
383
384 frac = timer.fraction / fracparts;
385 sub = scale_rational(timer.fraction % fracparts, fracparts, subparts);
386 }
387 break;
388
389 case MAD_UNITS_23_976_FPS:
390 case MAD_UNITS_24_975_FPS:
391 case MAD_UNITS_29_97_FPS:
392 case MAD_UNITS_47_952_FPS:
393 case MAD_UNITS_49_95_FPS:
394 case MAD_UNITS_59_94_FPS:
395 /* drop-frame encoding */
396 /* N.B. this is only well-defined for MAD_UNITS_29_97_FPS */
397 {
398 unsigned long frame, cycle, d, m;
399
400 frame = mad_timer_count(timer, fracunits);
401
402 cycle = -fracunits * 60 * 10 - (10 - 1) * 2;
403
404 d = frame / cycle;
405 m = frame % cycle;
406 frame += (10 - 1) * 2 * d;
407 if (m > 2)
408 frame += 2 * ((m - 2) / (cycle / 10));
409
410 frac = frame % -fracunits;
411 seconds = frame / -fracunits;
412 }
413 break;
414 }
415
416 switch (units) {
417 case MAD_UNITS_HOURS:
418 minutes = seconds / 60;
419 hours = minutes / 60;
420
421 sprintf(dest, format,
422 hours,
423 (unsigned int) (minutes % 60),
424 (unsigned int) (seconds % 60),
425 frac, sub);
426 break;
427
428 case MAD_UNITS_MINUTES:
429 minutes = seconds / 60;
430
431 sprintf(dest, format,
432 minutes,
433 (unsigned int) (seconds % 60),
434 frac, sub);
435 break;
436
437 case MAD_UNITS_SECONDS:
438 sprintf(dest, format,
439 seconds,
440 frac, sub);
441 break;
442
443 case MAD_UNITS_23_976_FPS:
444 case MAD_UNITS_24_975_FPS:
445 case MAD_UNITS_29_97_FPS:
446 case MAD_UNITS_47_952_FPS:
447 case MAD_UNITS_49_95_FPS:
448 case MAD_UNITS_59_94_FPS:
449 if (fracunits < 0) {
450 /* not yet implemented */
451 sub = 0;
452 }
453
454 /* fall through */
455
456 case MAD_UNITS_DECISECONDS:
457 case MAD_UNITS_CENTISECONDS:
458 case MAD_UNITS_MILLISECONDS:
459
460 case MAD_UNITS_8000_HZ:
461 case MAD_UNITS_11025_HZ:
462 case MAD_UNITS_12000_HZ:
463 case MAD_UNITS_16000_HZ:
464 case MAD_UNITS_22050_HZ:
465 case MAD_UNITS_24000_HZ:
466 case MAD_UNITS_32000_HZ:
467 case MAD_UNITS_44100_HZ:
468 case MAD_UNITS_48000_HZ:
469
470 case MAD_UNITS_24_FPS:
471 case MAD_UNITS_25_FPS:
472 case MAD_UNITS_30_FPS:
473 case MAD_UNITS_48_FPS:
474 case MAD_UNITS_50_FPS:
475 case MAD_UNITS_60_FPS:
476 case MAD_UNITS_75_FPS:
477 sprintf(dest, format, mad_timer_count(timer, units), sub);
478 break;
479 }
480}
diff --git a/core/multimedia/opieplayer/libmad/timer.h b/core/multimedia/opieplayer/libmad/timer.h
new file mode 100644
index 0000000..67fe16a
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/timer.h
@@ -0,0 +1,100 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifndef LIBMAD_TIMER_H
23# define LIBMAD_TIMER_H
24
25typedef struct {
26 signed long seconds; /* whole seconds */
27 unsigned long fraction;/* 1/MAD_TIMER_RESOLUTION seconds */
28} mad_timer_t;
29
30extern mad_timer_t const mad_timer_zero;
31
32 # define MAD_TIMER_RESOLUTION352800000UL
33
34enum mad_units {
35 MAD_UNITS_HOURS = -2,
36 MAD_UNITS_MINUTES = -1,
37 MAD_UNITS_SECONDS = 0,
38
39 /* metric units */
40
41 MAD_UNITS_DECISECONDS = 10,
42 MAD_UNITS_CENTISECONDS = 100,
43 MAD_UNITS_MILLISECONDS = 1000,
44
45 /* audio sample units */
46
47 MAD_UNITS_8000_HZ = 8000,
48 MAD_UNITS_11025_HZ = 11025,
49 MAD_UNITS_12000_HZ = 12000,
50
51 MAD_UNITS_16000_HZ = 16000,
52 MAD_UNITS_22050_HZ = 22050,
53 MAD_UNITS_24000_HZ = 24000,
54
55 MAD_UNITS_32000_HZ = 32000,
56 MAD_UNITS_44100_HZ = 44100,
57 MAD_UNITS_48000_HZ = 48000,
58
59 /* video frame/field units */
60
61 MAD_UNITS_24_FPS = 24,
62 MAD_UNITS_25_FPS = 25,
63 MAD_UNITS_30_FPS = 30,
64 MAD_UNITS_48_FPS = 48,
65 MAD_UNITS_50_FPS = 50,
66 MAD_UNITS_60_FPS = 60,
67
68 /* CD audio frames */
69
70 MAD_UNITS_75_FPS = 75,
71
72 /* video drop-frame units */
73
74 MAD_UNITS_23_976_FPS = -24,
75 MAD_UNITS_24_975_FPS = -25,
76 MAD_UNITS_29_97_FPS = -30,
77 MAD_UNITS_47_952_FPS = -48,
78 MAD_UNITS_49_95_FPS = -50,
79 MAD_UNITS_59_94_FPS = -60
80};
81
82 # define mad_timer_reset(timer)(*(timer) = mad_timer_zero)
83
84int mad_timer_compare(mad_timer_t, mad_timer_t);
85
86 # define mad_timer_sign(timer)mad_timer_compare((timer), mad_timer_zero)
87
88void mad_timer_negate(mad_timer_t *);
89mad_timer_t mad_timer_abs(mad_timer_t);
90
91void mad_timer_set(mad_timer_t *, unsigned long, unsigned long, unsigned long);
92void mad_timer_add(mad_timer_t *, mad_timer_t);
93void mad_timer_multiply(mad_timer_t *, signed long);
94
95signed long mad_timer_count(mad_timer_t, enum mad_units);
96unsigned long mad_timer_fraction(mad_timer_t, unsigned long);
97void mad_timer_string(mad_timer_t, char *, char const *,
98 enum mad_units, enum mad_units, unsigned long);
99
100# endif
diff --git a/core/multimedia/opieplayer/libmad/version.c b/core/multimedia/opieplayer/libmad/version.c
new file mode 100644
index 0000000..413d54b
--- a/dev/null
+++ b/core/multimedia/opieplayer/libmad/version.c
@@ -0,0 +1,91 @@
1/*
2 * mad - MPEG audio decoder
3 * Copyright (C) 2000-2001 Robert Leslie
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 *
19 * $Id$
20 */
21
22# ifdef HAVE_CONFIG_H
23# include "libmad_config.h"
24# endif
25
26# include "libmad_global.h"
27
28# include "libmad_version.h"
29
30char const mad_version[] = "MPEG Audio Decoder version " MAD_VERSION;
31char const mad_copyright[] = "Copyright (C) " MAD_PUBLISHYEAR " " MAD_AUTHOR;
32char const mad_author[] = MAD_AUTHOR " <" MAD_EMAIL ">";
33
34char const mad_build[] =
35# if defined(FPM_64BIT)
36 "FPM_64BIT "
37# elif defined(FPM_INTEL)
38 "FPM_INTEL "
39# elif defined(FPM_ARM)
40 "FPM_ARM "
41# elif defined(FPM_MIPS)
42 "FPM_MIPS "
43# elif defined(FPM_SPARC)
44 "FPM_SPARC "
45# elif defined(FPM_PPC)
46 "FPM_PPC "
47# elif defined(FPM_DEFAULT)
48 "FPM_DEFAULT "
49# endif
50
51# if defined(ASO_IMDCT)
52 "ASO_IMDCT "
53# endif
54# if defined(ASO_INTERLEAVE1)
55 "ASO_INTERLEAVE1 "
56# endif
57# if defined(ASO_INTERLEAVE2)
58 "ASO_INTERLEAVE2 "
59# endif
60# if defined(ASO_ZEROCHECK)
61 "ASO_ZEROCHECK "
62# endif
63
64# if defined(OPT_SPEED)
65 "OPT_SPEED "
66# elif defined(OPT_ACCURACY)
67 "OPT_ACCURACY "
68# endif
69
70# if defined(OPT_SSO)
71 "OPT_SSO "
72# endif
73
74# if defined(OPT_DCTO) /* never defined here */
75 "OPT_DCTO "
76# endif
77
78# if defined(OPT_STRICT)
79 "OPT_STRICT "
80# endif
81
82# if defined(EXPERIMENTAL)
83 "EXPERIMENTAL "
84# endif
85
86# if defined(DEBUG)
87 "DEBUG "
88# elif defined(NDEBUG)
89 "NDEBUG "
90# endif
91;