1(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
2var AV = (window.AV);
3var tables = require('./tables');
4
5var ADTSDemuxer = AV.Demuxer.extend(function() {
6    AV.Demuxer.register(this);
7
8    this.probe = function(stream) {
9        var offset = stream.offset;
10
11        // attempt to find ADTS syncword
12        while (stream.available(2)) {
13            if ((stream.readUInt16() & 0xfff6) === 0xfff0) {
14                stream.seek(offset);
15                return true;
16            }
17        }
18
19        stream.seek(offset);
20        return false;
21    };
22
23    this.prototype.init = function() {
24        this.bitstream = new AV.Bitstream(this.stream);
25    };
26
27    // Reads an ADTS header
28    // See http://wiki.multimedia.cx/index.php?title=ADTS
29    this.readHeader = function(stream) {
30        if (stream.read(12) !== 0xfff)
31            throw new Error('Invalid ADTS header.');
32
33        var ret = {};
34        stream.advance(3); // mpeg version and layer
35        var protectionAbsent = !!stream.read(1);
36
37        ret.profile = stream.read(2) + 1;
38        ret.samplingIndex = stream.read(4);
39
40        stream.advance(1); // private
41        ret.chanConfig = stream.read(3);
42        stream.advance(4); // original/copy, home, copywrite, and copywrite start
43
44        ret.frameLength = stream.read(13);
45        stream.advance(11); // fullness
46
47        ret.numFrames = stream.read(2) + 1;
48
49        if (!protectionAbsent)
50            stream.advance(16);
51
52        return ret;
53    };
54
55    this.prototype.readChunk = function() {
56        if (!this.sentHeader) {
57            var offset = this.stream.offset;
58            var header = ADTSDemuxer.readHeader(this.bitstream);
59
60            this.emit('format', {
61                formatID: 'aac ',
62                sampleRate: tables.SAMPLE_RATES[header.samplingIndex],
63                channelsPerFrame: header.chanConfig,
64                bitsPerChannel: 16
65            });
66
67            // generate a magic cookie from the ADTS header
68            var cookie = new Uint8Array(2);
69            cookie[0] = (header.profile << 3) | ((header.samplingIndex >> 1) & 7);
70            cookie[1] = ((header.samplingIndex & 1) << 7) | (header.chanConfig << 3);
71            this.emit('cookie', new AV.Buffer(cookie));
72
73            this.stream.seek(offset);
74            this.sentHeader = true;
75        }
76
77        while (this.stream.available(1)) {
78            var buffer = this.stream.readSingleBuffer(this.stream.remainingBytes());
79            this.emit('data', buffer);
80        }
81    };
82});
83},{"./tables":11}],2:[function(require,module,exports){
84/*
85 * AAC.js - Advanced Audio Coding decoder in JavaScript
86 * Created by Devon Govett
87 * Copyright (c) 2012, Official.fm Labs
88 *
89 * AAC.js is free software; you can redistribute it and/or modify it
90 * under the terms of the GNU Lesser General Public License as
91 * published by the Free Software Foundation; either version 3 of the
92 * License, or (at your option) any later version.
93 *
94 * AAC.js is distributed in the hope that it will be useful, but WITHOUT
95 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
96 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General
97 * Public License for more details.
98 *
99 * You should have received a copy of the GNU Lesser General Public
100 * License along with this library.
101 * If not, see <http://www.gnu.org/licenses/>.
102 */
103
104var ICStream = require('./ics');
105var Huffman = require('./huffman');
106
107// Channel Coupling Element
108function CCEElement(config) {
109    this.ics = new ICStream(config);
110    this.channelPair = new Array(8);
111    this.idSelect = new Int32Array(8);
112    this.chSelect = new Int32Array(8);
113    this.gain = new Array(16);
114}
115
116CCEElement.BEFORE_TNS = 0;
117CCEElement.AFTER_TNS = 1;
118CCEElement.AFTER_IMDCT = 2;
119
120const CCE_SCALE = new Float32Array([
121    1.09050773266525765921,
122    1.18920711500272106672,
123    1.4142135623730950488016887,
124    2.0
125]);
126
127CCEElement.prototype = {
128    decode: function(stream, config) {
129        var channelPair = this.channelPair,
130            idSelect = this.idSelect,
131            chSelect = this.chSelect;
132
133        this.couplingPoint = 2 * stream.read(1);
134        this.coupledCount = stream.read(3);
135
136        var gainCount = 0;
137        for (var i = 0; i <= this.coupledCount; i++) {
138            gainCount++;
139            channelPair[i] = stream.read(1);
140            idSelect[i] = stream.read(4);
141
142            if (channelPair[i]) {
143                chSelect[i] = stream.read(2);
144                if (chSelect[i] === 3)
145                    gainCount++;
146
147            } else {
148                chSelect[i] = 2;
149            }
150        }
151
152        this.couplingPoint += stream.read(1);
153        this.couplingPoint |= (this.couplingPoint >>> 1);
154
155        var sign = stream.read(1),
156            scale = CCE_SCALE[stream.read(2)];
157
158        this.ics.decode(stream, config, false);
159
160        var groupCount = this.ics.info.groupCount,
161            maxSFB = this.ics.info.maxSFB,
162            bandTypes = this.ics.bandTypes;
163
164        for (var i = 0; i < gainCount; i++) {
165            var idx = 0,
166                cge = 1,
167                gain = 0,
168                gainCache = 1;
169
170            if (i > 0) {
171                cge = this.couplingPoint === CCEElement.AFTER_IMDCT ? 1 : stream.read(1);
172                gain = cge ? Huffman.decodeScaleFactor(stream) - 60 : 0;
173                gainCache = Math.pow(scale, -gain);
174            }
175
176            var gain_i = this.gain[i] = new Float32Array(120);
177
178            if (this.couplingPoint === CCEElement.AFTER_IMDCT) {
179                gain_i[0] = gainCache;
180            } else {
181                for (var g = 0; g < groupCount; g++) {
182                    for (var sfb = 0; sfb < maxSFB; sfb++) {
183                        if (bandTypes[idx] !== ICStream.ZERO_BT) {
184                            if (cge === 0) {
185                                var t = Huffman.decodeScaleFactor(stream) - 60;
186                                if (t !== 0) {
187                                    var s = 1;
188                                    t = gain += t;
189                                    if (sign) {
190                                        s -= 2 * (t * 0x1);
191                                        t >>>= 1;
192                                    }
193                                    gainCache = Math.pow(scale, -t) * s;
194                                }
195                            }
196                            gain_i[idx++] = gainCache;
197                        }
198                    }
199                }
200            }
201        }
202    },
203
204    applyIndependentCoupling: function(index, data) {
205        var gain = this.gain[index][0],
206            iqData = this.ics.data;
207
208        for (var i = 0; i < data.length; i++) {
209            data[i] += gain * iqData[i];
210        }
211    },
212
213    applyDependentCoupling: function(index, data) {
214        var info = this.ics.info,
215            swbOffsets = info.swbOffsets,
216            groupCount = info.groupCount,
217            maxSFB = info.maxSFB,
218            bandTypes = this.ics.bandTypes,
219            iqData = this.ics.data;
220
221        var idx = 0,
222            offset = 0,
223            gains = this.gain[index];
224
225        for (var g = 0; g < groupCount; g++) {
226            var len = info.groupLength[g];
227
228            for (var sfb = 0; sfb < maxSFB; sfb++, idx++) {
229                if (bandTypes[idx] !== ICStream.ZERO_BT) {
230                    var gain = gains[idx];
231                    for (var group = 0; group < len; group++) {
232                        for (var k = swbOffsets[sfb]; k < swbOffsets[swb + 1]; k++) {
233                            data[offset + group * 128 + k] += gain * iqData[offset + group * 128 + k];
234                        }
235                    }
236                }
237            }
238
239            offset += len * 128;
240        }
241    }
242};
243
244module.exports = CCEElement;
245
246},{"./huffman":7,"./ics":8}],3:[function(require,module,exports){
247/*
248 * AAC.js - Advanced Audio Coding decoder in JavaScript
249 * Created by Devon Govett
250 * Copyright (c) 2012, Official.fm Labs
251 *
252 * AAC.js is free software; you can redistribute it and/or modify it
253 * under the terms of the GNU Lesser General Public License as
254 * published by the Free Software Foundation; either version 3 of the
255 * License, or (at your option) any later version.
256 *
257 * AAC.js is distributed in the hope that it will be useful, but WITHOUT
258 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
259 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General
260 * Public License for more details.
261 *
262 * You should have received a copy of the GNU Lesser General Public
263 * License along with this library.
264 * If not, see <http://www.gnu.org/licenses/>.
265 */
266
267var ICStream = require('./ics');
268
269// Channel Pair Element
270function CPEElement(config) {
271    this.ms_used = [];
272    this.left = new ICStream(config);
273    this.right = new ICStream(config);
274}
275
276const MAX_MS_MASK = 128;
277
278const MASK_TYPE_ALL_0 = 0,
279      MASK_TYPE_USED = 1,
280      MASK_TYPE_ALL_1 = 2,
281      MASK_TYPE_RESERVED = 3;
282
283CPEElement.prototype.decode = function(stream, config) {
284    var left = this.left,
285        right = this.right,
286        ms_used = this.ms_used;
287
288    if (this.commonWindow = !!stream.read(1)) {
289        left.info.decode(stream, config, true);
290        right.info = left.info;
291
292        var mask = stream.read(2);
293        this.maskPresent = !!mask;
294
295        switch (mask) {
296            case MASK_TYPE_USED:
297                var len = left.info.groupCount * left.info.maxSFB;
298                for (var i = 0; i < len; i++) {
299                    ms_used[i] = !!stream.read(1);
300                }
301                break;
302
303            case MASK_TYPE_ALL_0:
304            case MASK_TYPE_ALL_1:
305                var val = !!mask;
306                for (var i = 0; i < MAX_MS_MASK; i++) {
307                    ms_used[i] = val;
308                }
309                break;
310
311            default:
312                throw new Error("Reserved ms mask type: " + mask);
313        }
314    } else {
315        for (var i = 0; i < MAX_MS_MASK; i++)
316            ms_used[i] = false;
317    }
318
319    left.decode(stream, config, this.commonWindow);
320    right.decode(stream, config, this.commonWindow);
321};
322
323module.exports = CPEElement;
324
325},{"./ics":8}],4:[function(require,module,exports){
326/*
327 * AAC.js - Advanced Audio Coding decoder in JavaScript
328 * Created by Devon Govett
329 * Copyright (c) 2012, Official.fm Labs
330 *
331 * AAC.js is free software; you can redistribute it and/or modify it
332 * under the terms of the GNU Lesser General Public License as
333 * published by the Free Software Foundation; either version 3 of the
334 * License, or (at your option) any later version.
335 *
336 * AAC.js is distributed in the hope that it will be useful, but WITHOUT
337 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
338 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General
339 * Public License for more details.
340 *
341 * You should have received a copy of the GNU Lesser General Public
342 * License along with this library.
343 * If not, see <http://www.gnu.org/licenses/>.
344 */
345
346var AV          = (window.AV);
347var ADTSDemuxer = require('./adts_demuxer');
348var ICStream    = require('./ics');
349var CPEElement  = require('./cpe');
350var CCEElement  = require('./cce');
351var FilterBank  = require('./filter_bank');
352var tables      = require('./tables');
353
354var AACDecoder = AV.Decoder.extend(function() {
355    AV.Decoder.register('mp4a', this);
356    AV.Decoder.register('aac ', this);
357
358    // AAC profiles
359    const AOT_AAC_MAIN = 1, // no
360          AOT_AAC_LC = 2,   // yes
361          AOT_AAC_LTP = 4,  // no
362          AOT_ESCAPE = 31;
363
364    // Channel configurations
365    const CHANNEL_CONFIG_NONE = 0,
366          CHANNEL_CONFIG_MONO = 1,
367          CHANNEL_CONFIG_STEREO = 2,
368          CHANNEL_CONFIG_STEREO_PLUS_CENTER = 3,
369          CHANNEL_CONFIG_STEREO_PLUS_CENTER_PLUS_REAR_MONO = 4,
370          CHANNEL_CONFIG_FIVE = 5,
371          CHANNEL_CONFIG_FIVE_PLUS_ONE = 6,
372          CHANNEL_CONFIG_SEVEN_PLUS_ONE = 8;
373
374    this.prototype.init = function() {
375      this.format.floatingPoint = true;
376    }
377
378    this.prototype.setCookie = function(buffer) {
379        var data = AV.Stream.fromBuffer(buffer),
380            stream = new AV.Bitstream(data);
381
382        this.config = {};
383
384        this.config.profile = stream.read(5);
385        if (this.config.profile === AOT_ESCAPE)
386            this.config.profile = 32 + stream.read(6);
387
388        this.config.sampleIndex = stream.read(4);
389        if (this.config.sampleIndex === 0x0f) {
390            this.config.sampleRate = stream.read(24);
391            for (var i = 0; i < tables.SAMPLE_RATES.length; i++) {
392                if (tables.SAMPLE_RATES[i] === this.config.sampleRate) {
393                    this.config.sampleIndex = i;
394                    break;
395                }
396            }
397        } else {
398            this.config.sampleRate = tables.SAMPLE_RATES[this.config.sampleIndex];
399        }
400
401        this.config.chanConfig = stream.read(4);
402        this.format.channelsPerFrame = this.config.chanConfig; // sometimes m4a files encode this wrong
403
404        switch (this.config.profile) {
405            case AOT_AAC_MAIN:
406            case AOT_AAC_LC:
407            case AOT_AAC_LTP:
408                if (stream.read(1)) // frameLengthFlag
409                    throw new Error('frameLengthFlag not supported');
410
411                this.config.frameLength = 1024;
412
413                if (stream.read(1)) // dependsOnCoreCoder
414                    stream.advance(14); // coreCoderDelay
415
416                if (stream.read(1)) { // extensionFlag
417                    if (this.config.profile > 16) { // error resiliant profile
418                        this.config.sectionDataResilience = stream.read(1);
419                        this.config.scalefactorResilience = stream.read(1);
420                        this.config.spectralDataResilience = stream.read(1);
421                    }
422
423                    stream.advance(1);
424                }
425
426                if (this.config.chanConfig === CHANNEL_CONFIG_NONE) {
427                    stream.advance(4) // element_instance_tag
428                    throw new Error('PCE unimplemented');
429                }
430
431                break;
432
433            default:
434                throw new Error('AAC profile ' + this.config.profile + ' not supported.');
435        }
436
437        this.filter_bank = new FilterBank(false, this.config.chanConfig);
438        this.ics = new ICStream(this.config);
439        this.cpe = new CPEElement(this.config);
440        this.cce = new CCEElement(this.config);
441    };
442
443    const SCE_ELEMENT = 0,
444          CPE_ELEMENT = 1,
445          CCE_ELEMENT = 2,
446          LFE_ELEMENT = 3,
447          DSE_ELEMENT = 4,
448          PCE_ELEMENT = 5,
449          FIL_ELEMENT = 6,
450          END_ELEMENT = 7;
451
452    // The main decoding function.
453    this.prototype.readChunk = function() {
454        var stream = this.bitstream;
455
456        // check if there is an ADTS header, and read it if so
457        if (stream.peek(12) === 0xfff)
458            ADTSDemuxer.readHeader(stream);
459
460        this.cces = [];
461        var elements = [],
462            config = this.config,
463            frameLength = config.frameLength,
464            elementType = null;
465
466        while ((elementType = stream.read(3)) !== END_ELEMENT) {
467            var id = stream.read(4);
468
469            switch (elementType) {
470                // single channel and low frequency elements
471                case SCE_ELEMENT:
472                case LFE_ELEMENT:
473                    var ics = this.ics;
474                    ics.id = id;
475                    elements.push(ics);
476                    ics.decode(stream, config, false);
477                    break;
478
479                // channel pair element
480                case CPE_ELEMENT:
481                    var cpe = this.cpe;
482                    cpe.id = id;
483                    elements.push(cpe);
484                    cpe.decode(stream, config);
485                    break;
486
487                // channel coupling element
488                case CCE_ELEMENT:
489                    var cce = this.cce;
490                    this.cces.push(cce);
491                    cce.decode(stream, config);
492                    break;
493
494                // data-stream element
495                case DSE_ELEMENT:
496                    var align = stream.read(1),
497                        count = stream.read(8);
498
499                    if (count === 255)
500                        count += stream.read(8);
501
502                    if (align)
503                        stream.align();
504
505                    // skip for now...
506                    stream.advance(count * 8);
507                    break;
508
509                // program configuration element
510                case PCE_ELEMENT:
511                    throw new Error("TODO: PCE_ELEMENT")
512                    break;
513
514                // filler element
515                case FIL_ELEMENT:
516                    if (id === 15)
517                        id += stream.read(8) - 1;
518
519                    // skip for now...
520                    stream.advance(id * 8);
521                    break;
522
523                default:
524                    throw new Error('Unknown element')
525            }
526        }
527
528        stream.align();
529        this.process(elements);
530
531        // Interleave channels
532        var data = this.data,
533            channels = data.length,
534            output = new Float32Array(frameLength * channels),
535            j = 0;
536
537        for (var k = 0; k < frameLength; k++) {
538            for (var i = 0; i < channels; i++) {
539                output[j++] = data[i][k] / 32768;
540            }
541        }
542
543        return output;
544    };
545
546    this.prototype.process = function(elements) {
547        var channels = this.config.chanConfig;
548
549        // if (channels === 1 &&  psPresent)
550        // TODO: sbrPresent (2)
551        var mult = 1;
552
553        var len = mult * this.config.frameLength;
554        var data = this.data = [];
555
556        // Initialize channels
557        for (var i = 0; i < channels; i++) {
558            data[i] = new Float32Array(len);
559        }
560
561        var channel = 0;
562        for (var i = 0; i < elements.length && channel < channels; i++) {
563            var e = elements[i];
564
565            if (e instanceof ICStream) { // SCE or LFE element
566                channel += this.processSingle(e, channel);
567            } else if (e instanceof CPEElement) {
568                this.processPair(e, channel);
569                channel += 2;
570            } else if (e instanceof CCEElement) {
571                channel++;
572            } else {
573                throw new Error("Unknown element found.")
574            }
575        }
576    };
577
578    this.prototype.processSingle = function(element, channel) {
579        var profile = this.config.profile,
580            info = element.info,
581            data = element.data;
582
583        if (profile === AOT_AAC_MAIN)
584            throw new Error("Main prediction unimplemented");
585
586        if (profile === AOT_AAC_LTP)
587            throw new Error("LTP prediction unimplemented");
588
589        this.applyChannelCoupling(element, CCEElement.BEFORE_TNS, data, null);
590
591        if (element.tnsPresent)
592            element.tns.process(element, data, false);
593
594        this.applyChannelCoupling(element, CCEElement.AFTER_TNS, data, null);
595
596        // filterbank
597        this.filter_bank.process(info, data, this.data[channel], channel);
598
599        if (profile === AOT_AAC_LTP)
600            throw new Error("LTP prediction unimplemented");
601
602        this.applyChannelCoupling(element, CCEElement.AFTER_IMDCT, this.data[channel], null);
603
604        if (element.gainPresent)
605            throw new Error("Gain control not implemented");
606
607        if (this.sbrPresent)
608            throw new Error("SBR not implemented");
609
610        return 1;
611    };
612
613    this.prototype.processPair = function(element, channel) {
614        var profile = this.config.profile,
615            left = element.left,
616            right = element.right,
617            l_info = left.info,
618            r_info = right.info,
619            l_data = left.data,
620            r_data = right.data;
621
622        // Mid-side stereo
623        if (element.commonWindow && element.maskPresent)
624            this.processMS(element, l_data, r_data);
625
626        if (profile === AOT_AAC_MAIN)
627            throw new Error("Main prediction unimplemented");
628
629        // Intensity stereo
630        this.processIS(element, l_data, r_data);
631
632        if (profile === AOT_AAC_LTP)
633            throw new Error("LTP prediction unimplemented");
634
635        this.applyChannelCoupling(element, CCEElement.BEFORE_TNS, l_data, r_data);
636
637        if (left.tnsPresent)
638            left.tns.process(left, l_data, false);
639
640        if (right.tnsPresent)
641            right.tns.process(right, r_data, false);
642
643        this.applyChannelCoupling(element, CCEElement.AFTER_TNS, l_data, r_data);
644
645        // filterbank
646        this.filter_bank.process(l_info, l_data, this.data[channel], channel);
647        this.filter_bank.process(r_info, r_data, this.data[channel + 1], channel + 1);
648
649        if (profile === AOT_AAC_LTP)
650            throw new Error("LTP prediction unimplemented");
651
652        this.applyChannelCoupling(element, CCEElement.AFTER_IMDCT, this.data[channel], this.data[channel + 1]);
653
654        if (left.gainPresent)
655            throw new Error("Gain control not implemented");
656
657        if (right.gainPresent)
658            throw new Error("Gain control not implemented");
659
660        if (this.sbrPresent)
661            throw new Error("SBR not implemented");
662    };
663
664    // Intensity stereo
665    this.prototype.processIS = function(element, left, right) {
666        var ics = element.right,
667            info = ics.info,
668            offsets = info.swbOffsets,
669            windowGroups = info.groupCount,
670            maxSFB = info.maxSFB,
671            bandTypes = ics.bandTypes,
672            sectEnd = ics.sectEnd,
673            scaleFactors = ics.scaleFactors;
674
675        var idx = 0, groupOff = 0;
676        for (var g = 0; g < windowGroups; g++) {
677            for (var i = 0; i < maxSFB;) {
678                var end = sectEnd[idx];
679
680                if (bandTypes[idx] === ICStream.INTENSITY_BT || bandTypes[idx] === ICStream.INTENSITY_BT2) {
681                    for (; i < end; i++, idx++) {
682                        var c = bandTypes[idx] === ICStream.INTENSITY_BT ? 1 : -1;
683                        if (element.maskPresent)
684                            c *= element.ms_used[idx] ? -1 : 1;
685
686                        var scale = c * scaleFactors[idx];
687                        for (var w = 0; w < info.groupLength[g]; w++) {
688                            var off = groupOff + w * 128 + offsets[i],
689                                len = offsets[i + 1] - offsets[i];
690
691                            for (var j = 0; j < len; j++) {
692                                right[off + j] = left[off + j] * scale;
693                            }
694                        }
695                    }
696                } else  {
697                    idx += end - i;
698                    i = end;
699                }
700            }
701
702            groupOff += info.groupLength[g] * 128;
703        }
704    };
705
706    // Mid-side stereo
707    this.prototype.processMS = function(element, left, right) {
708        var ics = element.left,
709            info = ics.info,
710            offsets = info.swbOffsets,
711            windowGroups = info.groupCount,
712            maxSFB = info.maxSFB,
713            sfbCBl = ics.bandTypes,
714            sfbCBr = element.right.bandTypes;
715
716        var groupOff = 0, idx = 0;
717        for (var g = 0; g < windowGroups; g++) {
718            for (var i = 0; i < maxSFB; i++, idx++) {
719                if (element.ms_used[idx] && sfbCBl[idx] < ICStream.NOISE_BT && sfbCBr[idx] < ICStream.NOISE_BT) {
720                    for (var w = 0; w < info.groupLength[g]; w++) {
721                        var off = groupOff + w * 128 + offsets[i];
722                        for (var j = 0; j < offsets[i + 1] - offsets[i]; j++) {
723                            var t = left[off + j] - right[off + j];
724                            left[off + j] += right[off + j];
725                            right[off + j] = t;
726                        }
727                    }
728                }
729            }
730            groupOff += info.groupLength[g] * 128;
731        }
732    };
733
734    this.prototype.applyChannelCoupling = function(element, couplingPoint, data1, data2) {
735        var cces = this.cces,
736            isChannelPair = element instanceof CPEElement,
737            applyCoupling = couplingPoint === CCEElement.AFTER_IMDCT ? 'applyIndependentCoupling' : 'applyDependentCoupling';
738
739        for (var i = 0; i < cces.length; i++) {
740            var cce = cces[i],
741                index = 0;
742
743            if (cce.couplingPoint === couplingPoint) {
744                for (var c = 0; c < cce.coupledCount; c++) {
745                    var chSelect = cce.chSelect[c];
746                    if (cce.channelPair[c] === isChannelPair && cce.idSelect[c] === element.id) {
747                        if (chSelect !== 1) {
748                            cce[applyCoupling](index, data1);
749                            if (chSelect) index++;
750                        }
751
752                        if (chSelect !== 2)
753                            cce[applyCoupling](index++, data2);
754
755                    } else {
756                        index += 1 + (chSelect === 3 ? 1 : 0);
757                    }
758                }
759            }
760        }
761    };
762
763});
764
765module.exports = AACDecoder;
766
767},{"./adts_demuxer":1,"./cce":2,"./cpe":3,"./filter_bank":6,"./ics":8,"./tables":11}],5:[function(require,module,exports){
768/*
769 * AAC.js - Advanced Audio Coding decoder in JavaScript
770 * Created by Devon Govett
771 * Copyright (c) 2012, Official.fm Labs
772 *
773 * AAC.js is free software; you can redistribute it and/or modify it
774 * under the terms of the GNU Lesser General Public License as
775 * published by the Free Software Foundation; either version 3 of the
776 * License, or (at your option) any later version.
777 *
778 * AAC.js is distributed in the hope that it will be useful, but WITHOUT
779 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
780 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General
781 * Public License for more details.
782 *
783 * You should have received a copy of the GNU Lesser General Public
784 * License along with this library.
785 * If not, see <http://www.gnu.org/licenses/>.
786 */
787
788function FFT(length) {
789    this.length = length;
790
791    switch (length) {
792        case 64:
793            this.roots = generateFFTTableShort(64);
794            break;
795
796        case 512:
797            this.roots = generateFFTTableLong(512);
798            break;
799
800        case 60:
801            this.roots = generateFFTTableShort(60);
802            break;
803
804        case 480:
805            this.roots = generateFFTTableLong(480);
806            break;
807
808        default:
809            throw new Error("unexpected FFT length: " + length);
810    }
811
812    // processing buffers
813    this.rev = new Array(length);
814    for (var i = 0; i < length; i++) {
815        this.rev[i] = new Float32Array(2);
816    }
817
818    this.a = new Float32Array(2);
819    this.b = new Float32Array(2);
820    this.c = new Float32Array(2);
821    this.d = new Float32Array(2);
822    this.e1 = new Float32Array(2);
823    this.e2 = new Float32Array(2);
824}
825
826function generateFFTTableShort(len) {
827    var t = 2 * Math.PI / len,
828        cosT = Math.cos(t),
829        sinT = Math.sin(t),
830        f = new Array(len);
831
832    for (var i = 0; i < len; i++) {
833        f[i] = new Float32Array(2);
834    }
835
836    f[0][0] = 1;
837    f[0][1] = 0;
838    var lastImag = 0;
839
840    for (var i = 1; i < len; i++) {
841        f[i][0] = f[i - 1][0] * cosT + lastImag * sinT;
842        lastImag = lastImag * cosT - f[i - 1][0] * sinT;
843        f[i][1] = -lastImag;
844    }
845
846    return f;
847}
848
849function generateFFTTableLong(len) {
850    var t = 2 * Math.PI / len,
851        cosT = Math.cos(t),
852        sinT = Math.sin(t),
853        f = new Array(len);
854
855    for (var i = 0; i < len; i++) {
856        f[i] = new Float32Array(3);
857    }
858
859    f[0][0] = 1;
860    f[0][1] = 0;
861    f[0][2] = 0;
862
863    for (var i = 1; i < len; i++) {
864        f[i][0] = f[i - 1][0] * cosT + f[i - 1][2] * sinT;
865        f[i][2] = f[i - 1][2] * cosT - f[i - 1][0] * sinT;
866        f[i][1] = -f[i][2];
867    }
868
869    return f;
870}
871
872FFT.prototype.process = function(input, forward) {
873    var length = this.length,
874        imOffset = (forward ? 2 : 1),
875        scale = (forward ? length : 1),
876        rev = this.rev,
877        roots = this.roots;
878
879    // bit-reversal
880    var ii = 0;
881    for (var i = 0; i < length; i++) {
882        rev[i][0] = input[ii][0];
883        rev[i][1] = input[ii][1];
884
885        var k = length >>> 1;
886        while (ii >= k && k > 0) {
887            ii -= k;
888            k >>= 1;
889        }
890
891        ii += k;
892    }
893
894    var a = this.a,
895        b = this.b,
896        c = this.c,
897        d = this.d,
898        e1 = this.e1,
899        e2 = this.e2;
900
901    for (var i = 0; i < length; i++) {
902        input[i][0] = rev[i][0];
903        input[i][1] = rev[i][1];
904    }
905
906    // bottom base-4 round
907    for (var i = 0; i < length; i += 4) {
908        a[0] = input[i][0] + input[i + 1][0];
909        a[1] = input[i][1] + input[i + 1][1];
910        b[0] = input[i + 2][0] + input[i + 3][0];
911        b[1] = input[i + 2][1] + input[i + 3][1];
912        c[0] = input[i][0] - input[i + 1][0];
913        c[1] = input[i][1] - input[i + 1][1];
914        d[0] = input[i + 2][0] - input[i + 3][0];
915        d[1] = input[i + 2][1] - input[i + 3][1];
916        input[i][0] = a[0] + b[0];
917        input[i][1] = a[1] + b[1];
918        input[i + 2][0] = a[0] - b[0];
919        input[i + 2][1] = a[1] - b[1];
920
921        e1[0] = c[0] - d[1];
922        e1[1] = c[1] + d[0];
923        e2[0] = c[0] + d[1];
924        e2[1] = c[1] - d[0];
925
926        if (forward) {
927            input[i + 1][0] = e2[0];
928            input[i + 1][1] = e2[1];
929            input[i + 3][0] = e1[0];
930            input[i + 3][1] = e1[1];
931        } else {
932            input[i + 1][0] = e1[0];
933            input[i + 1][1] = e1[1];
934            input[i + 3][0] = e2[0];
935            input[i + 3][1] = e2[1];
936        }
937    }
938
939    // iterations from bottom to top
940    for (var i = 4; i < length; i <<= 1) {
941        var shift = i << 1,
942            m = length / shift;
943
944        for(var j = 0; j < length; j += shift) {
945            for(var k = 0; k < i; k++) {
946                var km = k * m,
947                    rootRe = roots[km][0],
948                    rootIm = roots[km][imOffset],
949                    zRe = input[i + j + k][0] * rootRe - input[i + j + k][1] * rootIm,
950                    zIm = input[i + j + k][0] * rootIm + input[i + j + k][1] * rootRe;
951
952                input[i + j + k][0] = (input[j + k][0] - zRe) * scale;
953                input[i + j + k][1] = (input[j + k][1] - zIm) * scale;
954                input[j + k][0] = (input[j + k][0] + zRe) * scale;
955                input[j + k][1] = (input[j + k][1] + zIm) * scale;
956            }
957        }
958    }
959};
960
961module.exports = FFT;
962
963},{}],6:[function(require,module,exports){
964/*
965 * AAC.js - Advanced Audio Coding decoder in JavaScript
966 * Created by Devon Govett
967 * Copyright (c) 2012, Official.fm Labs
968 *
969 * AAC.js is free software; you can redistribute it and/or modify it
970 * under the terms of the GNU Lesser General Public License as
971 * published by the Free Software Foundation; either version 3 of the
972 * License, or (at your option) any later version.
973 *
974 * AAC.js is distributed in the hope that it will be useful, but WITHOUT
975 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
976 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General
977 * Public License for more details.
978 *
979 * You should have received a copy of the GNU Lesser General Public
980 * License along with this library.
981 * If not, see <http://www.gnu.org/licenses/>.
982 */
983
984var ICStream = require('./ics');
985var MDCT = require('./mdct');
986
987function FilterBank(smallFrames, channels) {
988    if (smallFrames) {
989        throw new Error("WHA?? No small frames allowed.");
990    }
991
992    this.length = 1024;
993    this.shortLength = 128;
994
995    this.mid = (this.length - this.shortLength) / 2;
996    this.trans = this.shortLength / 2;
997
998    this.mdctShort = new MDCT(this.shortLength * 2);
999    this.mdctLong  = new MDCT(this.length * 2);
1000
1001    this.overlaps = new Array(channels);
1002    for (var i = 0; i < channels; i++) {
1003        this.overlaps[i] = new Float32Array(this.length);
1004    }
1005
1006    this.buf = new Float32Array(2 * this.length);
1007}
1008
1009function generateSineWindow(len) {
1010    var d = new Float32Array(len);
1011    for (var i = 0; i < len; i++) {
1012        d[i] = Math.sin((i + 0.5) * (Math.PI / (2.0 * len)))
1013    }
1014    return d;
1015}
1016
1017function generateKBDWindow(alpha, len) {
1018    var PIN = Math.PI / len,
1019        out = new Float32Array(len),
1020        sum = 0,
1021        f = new Float32Array(len),
1022        alpha2 = (alpha * PIN) * (alpha * PIN);
1023
1024    for (var n = 0; n < len; n++) {
1025        var tmp = n * (len - n) * alpha2,
1026            bessel = 1;
1027
1028        for (var j = 50; j > 0; j--) {
1029            bessel = bessel * tmp / (j * j) + 1;
1030        }
1031
1032        sum += bessel;
1033        f[n] = sum;
1034    }
1035
1036    sum++;
1037    for (var n = 0; n < len; n++) {
1038        out[n] = Math.sqrt(f[n] / sum);
1039    }
1040
1041    return out;
1042}
1043
1044const SINE_1024 = generateSineWindow(1024),
1045      SINE_128  = generateSineWindow(128),
1046      KBD_1024  = generateKBDWindow(4, 1024),
1047      KBD_128   = generateKBDWindow(6, 128),
1048      LONG_WINDOWS = [SINE_1024, KBD_1024],
1049      SHORT_WINDOWS = [SINE_128, KBD_128];
1050
1051FilterBank.prototype.process = function(info, input, output, channel) {
1052    var overlap = this.overlaps[channel],
1053        windowShape = info.windowShape[1],
1054        windowShapePrev = info.windowShape[0],
1055        longWindows = LONG_WINDOWS[windowShape],
1056        shortWindows = SHORT_WINDOWS[windowShape],
1057        longWindowsPrev = LONG_WINDOWS[windowShapePrev],
1058        shortWindowsPrev = SHORT_WINDOWS[windowShapePrev],
1059        length = this.length,
1060        shortLen = this.shortLength,
1061        mid = this.mid,
1062        trans = this.trans,
1063        buf = this.buf,
1064        mdctLong = this.mdctLong,
1065        mdctShort = this.mdctShort;
1066
1067    switch (info.windowSequence) {
1068        case ICStream.ONLY_LONG_SEQUENCE:
1069            mdctLong.process(input, 0, buf, 0);
1070
1071            // add second half output of previous frame to windowed output of current frame
1072            for (var i = 0; i < length; i++) {
1073                output[i] = overlap[i] + (buf[i] * longWindowsPrev[i]);
1074            }
1075
1076            // window the second half and save as overlap for next frame
1077            for (var i = 0; i < length; i++) {
1078                overlap[i] = buf[length + i] * longWindows[length - 1 - i];
1079            }
1080
1081            break;
1082
1083        case ICStream.LONG_START_SEQUENCE:
1084            mdctLong.process(input, 0, buf, 0);
1085
1086            // add second half output of previous frame to windowed output of current frame
1087            for (var i = 0; i < length; i++) {
1088                output[i] = overlap[i] + (buf[i] * longWindowsPrev[i]);
1089            }
1090
1091            // window the second half and save as overlap for next frame
1092            for (var i = 0; i < mid; i++) {
1093                overlap[i] = buf[length + i];
1094            }
1095
1096            for (var i = 0; i < shortLen; i++) {
1097                overlap[mid + i] = buf[length + mid + i] * shortWindows[shortLen - i - 1];
1098            }
1099
1100            for (var i = 0; i < mid; i++) {
1101                overlap[mid + shortLen + i] = 0;
1102            }
1103
1104            break;
1105
1106        case ICStream.EIGHT_SHORT_SEQUENCE:
1107            for (var i = 0; i < 8; i++) {
1108                mdctShort.process(input, i * shortLen, buf, 2 * i * shortLen);
1109            }
1110
1111            // add second half output of previous frame to windowed output of current frame
1112            for (var i = 0; i < mid; i++) {
1113                output[i] = overlap[i];
1114            }
1115
1116            for (var i = 0; i < shortLen; i++) {
1117                output[mid + i] = overlap[mid + i] + buf[i] * shortWindowsPrev[i];
1118                output[mid + 1 * shortLen + i] = overlap[mid + shortLen * 1 + i] + (buf[shortLen * 1 + i] * shortWindows[shortLen - 1 - i]) + (buf[shortLen * 2 + i]  * shortWindows[i]);
1119                output[mid + 2 * shortLen + i] = overlap[mid + shortLen * 2 + i] + (buf[shortLen * 3 + i] * shortWindows[shortLen - 1 - i]) + (buf[shortLen * 4 + i] * shortWindows[i]);
1120                output[mid + 3 * shortLen + i] = overlap[mid + shortLen * 3 + i] + (buf[shortLen * 5 + i] * shortWindows[shortLen - 1 - i]) + (buf[shortLen * 6 + i] * shortWindows[i]);
1121
1122                if (i < trans)
1123                    output[mid + 4 * shortLen + i] = overlap[mid + shortLen * 4 + i] + (buf[shortLen * 7 + i] * shortWindows[shortLen - 1 - i]) + (buf[shortLen * 8 + i] * shortWindows[i]);
1124            }
1125
1126            // window the second half and save as overlap for next frame
1127            for (var i = 0; i < shortLen; i++) {
1128                if(i >= trans)
1129                    overlap[mid + 4 * shortLen + i - length] = (buf[shortLen * 7 + i] * shortWindows[shortLen - 1 - i]) + (buf[shortLen * 8 + i] * shortWindows[i]);
1130
1131                overlap[mid + 5 * shortLen + i - length] = (buf[shortLen * 9 + i] * shortWindows[shortLen - 1 - i]) + (buf[shortLen * 10 + i] * shortWindows[i]);
1132                overlap[mid + 6 * shortLen + i - length] = (buf[shortLen * 11 + i] * shortWindows[shortLen - 1 - i]) + (buf[shortLen * 12 + i]*shortWindows[i]);
1133                overlap[mid + 7 * shortLen + i - length] = (buf[shortLen * 13 + i] * shortWindows[shortLen - 1 - i]) + (buf[shortLen * 14 + i]*shortWindows[i]);
1134                overlap[mid + 8 * shortLen + i - length] = (buf[shortLen * 15 + i] * shortWindows[shortLen - 1 - i]);
1135            }
1136
1137            for (var i = 0; i < mid; i++) {
1138                overlap[mid + shortLen + i] = 0;
1139            }
1140
1141            break;
1142
1143        case ICStream.LONG_STOP_SEQUENCE:
1144            mdctLong.process(input, 0, buf, 0);
1145
1146            // add second half output of previous frame to windowed output of current frame
1147            // construct first half window using padding with 1's and 0's
1148            for (var i = 0; i < mid; i++) {
1149                output[i] = overlap[i];
1150            }
1151
1152            for (var i = 0; i < shortLen; i++) {
1153                output[mid + i] = overlap[mid + i] + (buf[mid + i] * shortWindowsPrev[i]);
1154            }
1155
1156            for (var i = 0; i < mid; i++) {
1157                output[mid + shortLen + i] = overlap[mid + shortLen + i] + buf[mid + shortLen + i];
1158            }
1159
1160            // window the second half and save as overlap for next frame
1161            for (var i = 0; i < length; i++) {
1162                overlap[i] = buf[length + i] * longWindows[length - 1 - i];
1163            }
1164
1165            break;
1166    }
1167};
1168
1169module.exports = FilterBank;
1170
1171},{"./ics":8,"./mdct":9}],7:[function(require,module,exports){
1172/*
1173 * AAC.js - Advanced Audio Coding decoder in JavaScript
1174 * Created by Devon Govett
1175 * Copyright (c) 2012, Official.fm Labs
1176 *
1177 * AAC.js is free software; you can redistribute it and/or modify it
1178 * under the terms of the GNU Lesser General Public License as
1179 * published by the Free Software Foundation; either version 3 of the
1180 * License, or (at your option) any later version.
1181 *
1182 * AAC.js is distributed in the hope that it will be useful, but WITHOUT
1183 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
1184 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General
1185 * Public License for more details.
1186 *
1187 * You should have received a copy of the GNU Lesser General Public
1188 * License along with this library.
1189 * If not, see <http://www.gnu.org/licenses/>.
1190 */
1191
1192// [bit length, codeword, values...]
1193const HCB1 = [
1194    [1, 0, 0, 0, 0, 0],
1195    [5, 16, 1, 0, 0, 0],
1196    [5, 17, -1, 0, 0, 0],
1197    [5, 18, 0, 0, 0, -1],
1198    [5, 19, 0, 1, 0, 0],
1199    [5, 20, 0, 0, 0, 1],
1200    [5, 21, 0, 0, -1, 0],
1201    [5, 22, 0, 0, 1, 0],
1202    [5, 23, 0, -1, 0, 0],
1203    [7, 96, 1, -1, 0, 0],
1204    [7, 97, -1, 1, 0, 0],
1205    [7, 98, 0, 0, -1, 1],
1206    [7, 99, 0, 1, -1, 0],
1207    [7, 100, 0, -1, 1, 0],
1208    [7, 101, 0, 0, 1, -1],
1209    [7, 102, 1, 1, 0, 0],
1210    [7, 103, 0, 0, -1, -1],
1211    [7, 104, -1, -1, 0, 0],
1212    [7, 105, 0, -1, -1, 0],
1213    [7, 106, 1, 0, -1, 0],
1214    [7, 107, 0, 1, 0, -1],
1215    [7, 108, -1, 0, 1, 0],
1216    [7, 109, 0, 0, 1, 1],
1217    [7, 110, 1, 0, 1, 0],
1218    [7, 111, 0, -1, 0, 1],
1219    [7, 112, 0, 1, 1, 0],
1220    [7, 113, 0, 1, 0, 1],
1221    [7, 114, -1, 0, -1, 0],
1222    [7, 115, 1, 0, 0, 1],
1223    [7, 116, -1, 0, 0, -1],
1224    [7, 117, 1, 0, 0, -1],
1225    [7, 118, -1, 0, 0, 1],
1226    [7, 119, 0, -1, 0, -1],
1227    [9, 480, 1, 1, -1, 0],
1228    [9, 481, -1, 1, -1, 0],
1229    [9, 482, 1, -1, 1, 0],
1230    [9, 483, 0, 1, 1, -1],
1231    [9, 484, 0, 1, -1, 1],
1232    [9, 485, 0, -1, 1, 1],
1233    [9, 486, 0, -1, 1, -1],
1234    [9, 487, 1, -1, -1, 0],
1235    [9, 488, 1, 0, -1, 1],
1236    [9, 489, 0, 1, -1, -1],
1237    [9, 490, -1, 1, 1, 0],
1238    [9, 491, -1, 0, 1, -1],
1239    [9, 492, -1, -1, 1, 0],
1240    [9, 493, 0, -1, -1, 1],
1241    [9, 494, 1, -1, 0, 1],
1242    [9, 495, 1, -1, 0, -1],
1243    [9, 496, -1, 1, 0, -1],
1244    [9, 497, -1, -1, -1, 0],
1245    [9, 498, 0, -1, -1, -1],
1246    [9, 499, 0, 1, 1, 1],
1247    [9, 500, 1, 0, 1, -1],
1248    [9, 501, 1, 1, 0, 1],
1249    [9, 502, -1, 1, 0, 1],
1250    [9, 503, 1, 1, 1, 0],
1251    [10, 1008, -1, -1, 0, 1],
1252    [10, 1009, -1, 0, -1, -1],
1253    [10, 1010, 1, 1, 0, -1],
1254    [10, 1011, 1, 0, -1, -1],
1255    [10, 1012, -1, 0, -1, 1],
1256    [10, 1013, -1, -1, 0, -1],
1257    [10, 1014, -1, 0, 1, 1],
1258    [10, 1015, 1, 0, 1, 1],
1259    [11, 2032, 1, -1, 1, -1],
1260    [11, 2033, -1, 1, -1, 1],
1261    [11, 2034, -1, 1, 1, -1],
1262    [11, 2035, 1, -1, -1, 1],
1263    [11, 2036, 1, 1, 1, 1],
1264    [11, 2037, -1, -1, 1, 1],
1265    [11, 2038, 1, 1, -1, -1],
1266    [11, 2039, -1, -1, 1, -1],
1267    [11, 2040, -1, -1, -1, -1],
1268    [11, 2041, 1, 1, -1, 1],
1269    [11, 2042, 1, -1, 1, 1],
1270    [11, 2043, -1, 1, 1, 1],
1271    [11, 2044, -1, 1, -1, -1],
1272    [11, 2045, -1, -1, -1, 1],
1273    [11, 2046, 1, -1, -1, -1],
1274    [11, 2047, 1, 1, 1, -1]
1275];
1276
1277const HCB2 = [
1278    [3, 0, 0, 0, 0, 0],
1279    [4, 2, 1, 0, 0, 0],
1280    [5, 6, -1, 0, 0, 0],
1281    [5, 7, 0, 0, 0, 1],
1282    [5, 8, 0, 0, -1, 0],
1283    [5, 9, 0, 0, 0, -1],
1284    [5, 10, 0, -1, 0, 0],
1285    [5, 11, 0, 0, 1, 0],
1286    [5, 12, 0, 1, 0, 0],
1287    [6, 26, 0, -1, 1, 0],
1288    [6, 27, -1, 1, 0, 0],
1289    [6, 28, 0, 1, -1, 0],
1290    [6, 29, 0, 0, 1, -1],
1291    [6, 30, 0, 1, 0, -1],
1292    [6, 31, 0, 0, -1, 1],
1293    [6, 32, -1, 0, 0, -1],
1294    [6, 33, 1, -1, 0, 0],
1295    [6, 34, 1, 0, -1, 0],
1296    [6, 35, -1, -1, 0, 0],
1297    [6, 36, 0, 0, -1, -1],
1298    [6, 37, 1, 0, 1, 0],
1299    [6, 38, 1, 0, 0, 1],
1300    [6, 39, 0, -1, 0, 1],
1301    [6, 40, -1, 0, 1, 0],
1302    [6, 41, 0, 1, 0, 1],
1303    [6, 42, 0, -1, -1, 0],
1304    [6, 43, -1, 0, 0, 1],
1305    [6, 44, 0, -1, 0, -1],
1306    [6, 45, -1, 0, -1, 0],
1307    [6, 46, 1, 1, 0, 0],
1308    [6, 47, 0, 1, 1, 0],
1309    [6, 48, 0, 0, 1, 1],
1310    [6, 49, 1, 0, 0, -1],
1311    [7, 100, 0, 1, -1, 1],
1312    [7, 101, 1, 0, -1, 1],
1313    [7, 102, -1, 1, -1, 0],
1314    [7, 103, 0, -1, 1, -1],
1315    [7, 104, 1, -1, 1, 0],
1316    [7, 105, 1, 1, 0, -1],
1317    [7, 106, 1, 0, 1, 1],
1318    [7, 107, -1, 1, 1, 0],
1319    [7, 108, 0, -1, -1, 1],
1320    [7, 109, 1, 1, 1, 0],
1321    [7, 110, -1, 0, 1, -1],
1322    [7, 111, -1, -1, -1, 0],
1323    [7, 112, -1, 0, -1, 1],
1324    [7, 113, 1, -1, -1, 0],
1325    [7, 114, 1, 1, -1, 0],
1326    [8, 230, 1, -1, 0, 1],
1327    [8, 231, -1, 1, 0, -1],
1328    [8, 232, -1, -1, 1, 0],
1329    [8, 233, -1, 0, 1, 1],
1330    [8, 234, -1, -1, 0, 1],
1331    [8, 235, -1, -1, 0, -1],
1332    [8, 236, 0, -1, -1, -1],
1333    [8, 237, 1, 0, 1, -1],
1334    [8, 238, 1, 0, -1, -1],
1335    [8, 239, 0, 1, -1, -1],
1336    [8, 240, 0, 1, 1, 1],
1337    [8, 241, -1, 1, 0, 1],
1338    [8, 242, -1, 0, -1, -1],
1339    [8, 243, 0, 1, 1, -1],
1340    [8, 244, 1, -1, 0, -1],
1341    [8, 245, 0, -1, 1, 1],
1342    [8, 246, 1, 1, 0, 1],
1343    [8, 247, 1, -1, 1, -1],
1344    [8, 248, -1, 1, -1, 1],
1345    [9, 498, 1, -1, -1, 1],
1346    [9, 499, -1, -1, -1, -1],
1347    [9, 500, -1, 1, 1, -1],
1348    [9, 501, -1, 1, 1, 1],
1349    [9, 502, 1, 1, 1, 1],
1350    [9, 503, -1, -1, 1, -1],
1351    [9, 504, 1, -1, 1, 1],
1352    [9, 505, -1, 1, -1, -1],
1353    [9, 506, -1, -1, 1, 1],
1354    [9, 507, 1, 1, -1, -1],
1355    [9, 508, 1, -1, -1, -1],
1356    [9, 509, -1, -1, -1, 1],
1357    [9, 510, 1, 1, -1, 1],
1358    [9, 511, 1, 1, 1, -1]
1359];
1360
1361const HCB3 = [
1362    [1, 0, 0, 0, 0, 0],
1363    [4, 8, 1, 0, 0, 0],
1364    [4, 9, 0, 0, 0, 1],
1365    [4, 10, 0, 1, 0, 0],
1366    [4, 11, 0, 0, 1, 0],
1367    [5, 24, 1, 1, 0, 0],
1368    [5, 25, 0, 0, 1, 1],
1369    [6, 52, 0, 1, 1, 0],
1370    [6, 53, 0, 1, 0, 1],
1371    [6, 54, 1, 0, 1, 0],
1372    [6, 55, 0, 1, 1, 1],
1373    [6, 56, 1, 0, 0, 1],
1374    [6, 57, 1, 1, 1, 0],
1375    [7, 116, 1, 1, 1, 1],
1376    [7, 117, 1, 0, 1, 1],
1377    [7, 118, 1, 1, 0, 1],
1378    [8, 238, 2, 0, 0, 0],
1379    [8, 239, 0, 0, 0, 2],
1380    [8, 240, 0, 0, 1, 2],
1381    [8, 241, 2, 1, 0, 0],
1382    [8, 242, 1, 2, 1, 0],
1383    [9, 486, 0, 0, 2, 1],
1384    [9, 487, 0, 1, 2, 1],
1385    [9, 488, 1, 2, 0, 0],
1386    [9, 489, 0, 1, 1, 2],
1387    [9, 490, 2, 1, 1, 0],
1388    [9, 491, 0, 0, 2, 0],
1389    [9, 492, 0, 2, 1, 0],
1390    [9, 493, 0, 1, 2, 0],
1391    [9, 494, 0, 2, 0, 0],
1392    [9, 495, 0, 1, 0, 2],
1393    [9, 496, 2, 0, 1, 0],
1394    [9, 497, 1, 2, 1, 1],
1395    [9, 498, 0, 2, 1, 1],
1396    [9, 499, 1, 1, 2, 0],
1397    [9, 500, 1, 1, 2, 1],
1398    [10, 1002, 1, 2, 0, 1],
1399    [10, 1003, 1, 0, 2, 0],
1400    [10, 1004, 1, 0, 2, 1],
1401    [10, 1005, 0, 2, 0, 1],
1402    [10, 1006, 2, 1, 1, 1],
1403    [10, 1007, 1, 1, 1, 2],
1404    [10, 1008, 2, 1, 0, 1],
1405    [10, 1009, 1, 0, 1, 2],
1406    [10, 1010, 0, 0, 2, 2],
1407    [10, 1011, 0, 1, 2, 2],
1408    [10, 1012, 2, 2, 1, 0],
1409    [10, 1013, 1, 2, 2, 0],
1410    [10, 1014, 1, 0, 0, 2],
1411    [10, 1015, 2, 0, 0, 1],
1412    [10, 1016, 0, 2, 2, 1],
1413    [11, 2034, 2, 2, 0, 0],
1414    [11, 2035, 1, 2, 2, 1],
1415    [11, 2036, 1, 1, 0, 2],
1416    [11, 2037, 2, 0, 1, 1],
1417    [11, 2038, 1, 1, 2, 2],
1418    [11, 2039, 2, 2, 1, 1],
1419    [11, 2040, 0, 2, 2, 0],
1420    [11, 2041, 0, 2, 1, 2],
1421    [12, 4084, 1, 0, 2, 2],
1422    [12, 4085, 2, 2, 0, 1],
1423    [12, 4086, 2, 1, 2, 0],
1424    [12, 4087, 2, 2, 2, 0],
1425    [12, 4088, 0, 2, 2, 2],
1426    [12, 4089, 2, 2, 2, 1],
1427    [12, 4090, 2, 1, 2, 1],
1428    [12, 4091, 1, 2, 1, 2],
1429    [12, 4092, 1, 2, 2, 2],
1430    [13, 8186, 0, 2, 0, 2],
1431    [13, 8187, 2, 0, 2, 0],
1432    [13, 8188, 1, 2, 0, 2],
1433    [14, 16378, 2, 0, 2, 1],
1434    [14, 16379, 2, 1, 1, 2],
1435    [14, 16380, 2, 1, 0, 2],
1436    [15, 32762, 2, 2, 2, 2],
1437    [15, 32763, 2, 2, 1, 2],
1438    [15, 32764, 2, 1, 2, 2],
1439    [15, 32765, 2, 0, 1, 2],
1440    [15, 32766, 2, 0, 0, 2],
1441    [16, 65534, 2, 2, 0, 2],
1442    [16, 65535, 2, 0, 2, 2]
1443];
1444
1445const HCB4 = [
1446    [4, 0, 1, 1, 1, 1],
1447    [4, 1, 0, 1, 1, 1],
1448    [4, 2, 1, 1, 0, 1],
1449    [4, 3, 1, 1, 1, 0],
1450    [4, 4, 1, 0, 1, 1],
1451    [4, 5, 1, 0, 0, 0],
1452    [4, 6, 1, 1, 0, 0],
1453    [4, 7, 0, 0, 0, 0],
1454    [4, 8, 0, 0, 1, 1],
1455    [4, 9, 1, 0, 1, 0],
1456    [5, 20, 1, 0, 0, 1],
1457    [5, 21, 0, 1, 1, 0],
1458    [5, 22, 0, 0, 0, 1],
1459    [5, 23, 0, 1, 0, 1],
1460    [5, 24, 0, 0, 1, 0],
1461    [5, 25, 0, 1, 0, 0],
1462    [7, 104, 2, 1, 1, 1],
1463    [7, 105, 1, 1, 2, 1],
1464    [7, 106, 1, 2, 1, 1],
1465    [7, 107, 1, 1, 1, 2],
1466    [7, 108, 2, 1, 1, 0],
1467    [7, 109, 2, 1, 0, 1],
1468    [7, 110, 1, 2, 1, 0],
1469    [7, 111, 2, 0, 1, 1],
1470    [7, 112, 0, 1, 2, 1],
1471    [8, 226, 0, 1, 1, 2],
1472    [8, 227, 1, 1, 2, 0],
1473    [8, 228, 0, 2, 1, 1],
1474    [8, 229, 1, 0, 1, 2],
1475    [8, 230, 1, 2, 0, 1],
1476    [8, 231, 1, 1, 0, 2],
1477    [8, 232, 1, 0, 2, 1],
1478    [8, 233, 2, 1, 0, 0],
1479    [8, 234, 2, 0, 1, 0],
1480    [8, 235, 1, 2, 0, 0],
1481    [8, 236, 2, 0, 0, 1],
1482    [8, 237, 0, 1, 0, 2],
1483    [8, 238, 0, 2, 1, 0],
1484    [8, 239, 0, 0, 1, 2],
1485    [8, 240, 0, 1, 2, 0],
1486    [8, 241, 0, 2, 0, 1],
1487    [8, 242, 1, 0, 0, 2],
1488    [8, 243, 0, 0, 2, 1],
1489    [8, 244, 1, 0, 2, 0],
1490    [8, 245, 2, 0, 0, 0],
1491    [8, 246, 0, 0, 0, 2],
1492    [9, 494, 0, 2, 0, 0],
1493    [9, 495, 0, 0, 2, 0],
1494    [9, 496, 1, 2, 2, 1],
1495    [9, 497, 2, 2, 1, 1],
1496    [9, 498, 2, 1, 2, 1],
1497    [9, 499, 1, 1, 2, 2],
1498    [9, 500, 1, 2, 1, 2],
1499    [9, 501, 2, 1, 1, 2],
1500    [10, 1004, 1, 2, 2, 0],
1501    [10, 1005, 2, 2, 1, 0],
1502    [10, 1006, 2, 1, 2, 0],
1503    [10, 1007, 0, 2, 2, 1],
1504    [10, 1008, 0, 1, 2, 2],
1505    [10, 1009, 2, 2, 0, 1],
1506    [10, 1010, 0, 2, 1, 2],
1507    [10, 1011, 2, 0, 2, 1],
1508    [10, 1012, 1, 0, 2, 2],
1509    [10, 1013, 2, 2, 2, 1],
1510    [10, 1014, 1, 2, 0, 2],
1511    [10, 1015, 2, 0, 1, 2],
1512    [10, 1016, 2, 1, 0, 2],
1513    [10, 1017, 1, 2, 2, 2],
1514    [11, 2036, 2, 1, 2, 2],
1515    [11, 2037, 2, 2, 1, 2],
1516    [11, 2038, 0, 2, 2, 0],
1517    [11, 2039, 2, 2, 0, 0],
1518    [11, 2040, 0, 0, 2, 2],
1519    [11, 2041, 2, 0, 2, 0],
1520    [11, 2042, 0, 2, 0, 2],
1521    [11, 2043, 2, 0, 0, 2],
1522    [11, 2044, 2, 2, 2, 2],
1523    [11, 2045, 0, 2, 2, 2],
1524    [11, 2046, 2, 2, 2, 0],
1525    [12, 4094, 2, 2, 0, 2],
1526    [12, 4095, 2, 0, 2, 2]
1527];
1528
1529const HCB5 = [
1530    [1, 0, 0, 0],
1531    [4, 8, -1, 0],
1532    [4, 9, 1, 0],
1533    [4, 10, 0, 1],
1534    [4, 11, 0, -1],
1535    [5, 24, 1, -1],
1536    [5, 25, -1, 1],
1537    [5, 26, -1, -1],
1538    [5, 27, 1, 1],
1539    [7, 112, -2, 0],
1540    [7, 113, 0, 2],
1541    [7, 114, 2, 0],
1542    [7, 115, 0, -2],
1543    [8, 232, -2, -1],
1544    [8, 233, 2, 1],
1545    [8, 234, -1, -2],
1546    [8, 235, 1, 2],
1547    [8, 236, -2, 1],
1548    [8, 237, 2, -1],
1549    [8, 238, -1, 2],
1550    [8, 239, 1, -2],
1551    [8, 240, -3, 0],
1552    [8, 241, 3, 0],
1553    [8, 242, 0, -3],
1554    [8, 243, 0, 3],
1555    [9, 488, -3, -1],
1556    [9, 489, 1, 3],
1557    [9, 490, 3, 1],
1558    [9, 491, -1, -3],
1559    [9, 492, -3, 1],
1560    [9, 493, 3, -1],
1561    [9, 494, 1, -3],
1562    [9, 495, -1, 3],
1563    [9, 496, -2, 2],
1564    [9, 497, 2, 2],
1565    [9, 498, -2, -2],
1566    [9, 499, 2, -2],
1567    [10, 1000, -3, -2],
1568    [10, 1001, 3, -2],
1569    [10, 1002, -2, 3],
1570    [10, 1003, 2, -3],
1571    [10, 1004, 3, 2],
1572    [10, 1005, 2, 3],
1573    [10, 1006, -3, 2],
1574    [10, 1007, -2, -3],
1575    [10, 1008, 0, -4],
1576    [10, 1009, -4, 0],
1577    [10, 1010, 4, 1],
1578    [10, 1011, 4, 0],
1579    [11, 2024, -4, -1],
1580    [11, 2025, 0, 4],
1581    [11, 2026, 4, -1],
1582    [11, 2027, -1, -4],
1583    [11, 2028, 1, 4],
1584    [11, 2029, -1, 4],
1585    [11, 2030, -4, 1],
1586    [11, 2031, 1, -4],
1587    [11, 2032, 3, -3],
1588    [11, 2033, -3, -3],
1589    [11, 2034, -3, 3],
1590    [11, 2035, -2, 4],
1591    [11, 2036, -4, -2],
1592    [11, 2037, 4, 2],
1593    [11, 2038, 2, -4],
1594    [11, 2039, 2, 4],
1595    [11, 2040, 3, 3],
1596    [11, 2041, -4, 2],
1597    [12, 4084, -2, -4],
1598    [12, 4085, 4, -2],
1599    [12, 4086, 3, -4],
1600    [12, 4087, -4, -3],
1601    [12, 4088, -4, 3],
1602    [12, 4089, 3, 4],
1603    [12, 4090, -3, 4],
1604    [12, 4091, 4, 3],
1605    [12, 4092, 4, -3],
1606    [12, 4093, -3, -4],
1607    [13, 8188, 4, -4],
1608    [13, 8189, -4, 4],
1609    [13, 8190, 4, 4],
1610    [13, 8191, -4, -4]
1611];
1612
1613const HCB6 = [
1614    [4, 0, 0, 0],
1615    [4, 1, 1, 0],
1616    [4, 2, 0, -1],
1617    [4, 3, 0, 1],
1618    [4, 4, -1, 0],
1619    [4, 5, 1, 1],
1620    [4, 6, -1, 1],
1621    [4, 7, 1, -1],
1622    [4, 8, -1, -1],
1623    [6, 36, 2, -1],
1624    [6, 37, 2, 1],
1625    [6, 38, -2, 1],
1626    [6, 39, -2, -1],
1627    [6, 40, -2, 0],
1628    [6, 41, -1, 2],
1629    [6, 42, 2, 0],
1630    [6, 43, 1, -2],
1631    [6, 44, 1, 2],
1632    [6, 45, 0, -2],
1633    [6, 46, -1, -2],
1634    [6, 47, 0, 2],
1635    [6, 48, 2, -2],
1636    [6, 49, -2, 2],
1637    [6, 50, -2, -2],
1638    [6, 51, 2, 2],
1639    [7, 104, -3, 1],
1640    [7, 105, 3, 1],
1641    [7, 106, 3, -1],
1642    [7, 107, -1, 3],
1643    [7, 108, -3, -1],
1644    [7, 109, 1, 3],
1645    [7, 110, 1, -3],
1646    [7, 111, -1, -3],
1647    [7, 112, 3, 0],
1648    [7, 113, -3, 0],
1649    [7, 114, 0, -3],
1650    [7, 115, 0, 3],
1651    [7, 116, 3, 2],
1652    [8, 234, -3, -2],
1653    [8, 235, -2, 3],
1654    [8, 236, 2, 3],
1655    [8, 237, 3, -2],
1656    [8, 238, 2, -3],
1657    [8, 239, -2, -3],
1658    [8, 240, -3, 2],
1659    [8, 241, 3, 3],
1660    [9, 484, 3, -3],
1661    [9, 485, -3, -3],
1662    [9, 486, -3, 3],
1663    [9, 487, 1, -4],
1664    [9, 488, -1, -4],
1665    [9, 489, 4, 1],
1666    [9, 490, -4, 1],
1667    [9, 491, -4, -1],
1668    [9, 492, 1, 4],
1669    [9, 493, 4, -1],
1670    [9, 494, -1, 4],
1671    [9, 495, 0, -4],
1672    [9, 496, -4, 2],
1673    [9, 497, -4, -2],
1674    [9, 498, 2, 4],
1675    [9, 499, -2, -4],
1676    [9, 500, -4, 0],
1677    [9, 501, 4, 2],
1678    [9, 502, 4, -2],
1679    [9, 503, -2, 4],
1680    [9, 504, 4, 0],
1681    [9, 505, 2, -4],
1682    [9, 506, 0, 4],
1683    [10, 1014, -3, -4],
1684    [10, 1015, -3, 4],
1685    [10, 1016, 3, -4],
1686    [10, 1017, 4, -3],
1687    [10, 1018, 3, 4],
1688    [10, 1019, 4, 3],
1689    [10, 1020, -4, 3],
1690    [10, 1021, -4, -3],
1691    [11, 2044, 4, 4],
1692    [11, 2045, -4, 4],
1693    [11, 2046, -4, -4],
1694    [11, 2047, 4, -4]
1695];
1696
1697const HCB7 = [
1698    [1, 0, 0, 0],
1699    [3, 4, 1, 0],
1700    [3, 5, 0, 1],
1701    [4, 12, 1, 1],
1702    [6, 52, 2, 1],
1703    [6, 53, 1, 2],
1704    [6, 54, 2, 0],
1705    [6, 55, 0, 2],
1706    [7, 112, 3, 1],
1707    [7, 113, 1, 3],
1708    [7, 114, 2, 2],
1709    [7, 115, 3, 0],
1710    [7, 116, 0, 3],
1711    [8, 234, 2, 3],
1712    [8, 235, 3, 2],
1713    [8, 236, 1, 4],
1714    [8, 237, 4, 1],
1715    [8, 238, 1, 5],
1716    [8, 239, 5, 1],
1717    [8, 240, 3, 3],
1718    [8, 241, 2, 4],
1719    [8, 242, 0, 4],
1720    [8, 243, 4, 0],
1721    [9, 488, 4, 2],
1722    [9, 489, 2, 5],
1723    [9, 490, 5, 2],
1724    [9, 491, 0, 5],
1725    [9, 492, 6, 1],
1726    [9, 493, 5, 0],
1727    [9, 494, 1, 6],
1728    [9, 495, 4, 3],
1729    [9, 496, 3, 5],
1730    [9, 497, 3, 4],
1731    [9, 498, 5, 3],
1732    [9, 499, 2, 6],
1733    [9, 500, 6, 2],
1734    [9, 501, 1, 7],
1735    [10, 1004, 3, 6],
1736    [10, 1005, 0, 6],
1737    [10, 1006, 6, 0],
1738    [10, 1007, 4, 4],
1739    [10, 1008, 7, 1],
1740    [10, 1009, 4, 5],
1741    [10, 1010, 7, 2],
1742    [10, 1011, 5, 4],
1743    [10, 1012, 6, 3],
1744    [10, 1013, 2, 7],
1745    [10, 1014, 7, 3],
1746    [10, 1015, 6, 4],
1747    [10, 1016, 5, 5],
1748    [10, 1017, 4, 6],
1749    [10, 1018, 3, 7],
1750    [11, 2038, 7, 0],
1751    [11, 2039, 0, 7],
1752    [11, 2040, 6, 5],
1753    [11, 2041, 5, 6],
1754    [11, 2042, 7, 4],
1755    [11, 2043, 4, 7],
1756    [11, 2044, 5, 7],
1757    [11, 2045, 7, 5],
1758    [12, 4092, 7, 6],
1759    [12, 4093, 6, 6],
1760    [12, 4094, 6, 7],
1761    [12, 4095, 7, 7]
1762];
1763
1764const HCB8 = [
1765    [3, 0, 1, 1],
1766    [4, 2, 2, 1],
1767    [4, 3, 1, 0],
1768    [4, 4, 1, 2],
1769    [4, 5, 0, 1],
1770    [4, 6, 2, 2],
1771    [5, 14, 0, 0],
1772    [5, 15, 2, 0],
1773    [5, 16, 0, 2],
1774    [5, 17, 3, 1],
1775    [5, 18, 1, 3],
1776    [5, 19, 3, 2],
1777    [5, 20, 2, 3],
1778    [6, 42, 3, 3],
1779    [6, 43, 4, 1],
1780    [6, 44, 1, 4],
1781    [6, 45, 4, 2],
1782    [6, 46, 2, 4],
1783    [6, 47, 3, 0],
1784    [6, 48, 0, 3],
1785    [6, 49, 4, 3],
1786    [6, 50, 3, 4],
1787    [6, 51, 5, 2],
1788    [7, 104, 5, 1],
1789    [7, 105, 2, 5],
1790    [7, 106, 1, 5],
1791    [7, 107, 5, 3],
1792    [7, 108, 3, 5],
1793    [7, 109, 4, 4],
1794    [7, 110, 5, 4],
1795    [7, 111, 0, 4],
1796    [7, 112, 4, 5],
1797    [7, 113, 4, 0],
1798    [7, 114, 2, 6],
1799    [7, 115, 6, 2],
1800    [7, 116, 6, 1],
1801    [7, 117, 1, 6],
1802    [8, 236, 3, 6],
1803    [8, 237, 6, 3],
1804    [8, 238, 5, 5],
1805    [8, 239, 5, 0],
1806    [8, 240, 6, 4],
1807    [8, 241, 0, 5],
1808    [8, 242, 4, 6],
1809    [8, 243, 7, 1],
1810    [8, 244, 7, 2],
1811    [8, 245, 2, 7],
1812    [8, 246, 6, 5],
1813    [8, 247, 7, 3],
1814    [8, 248, 1, 7],
1815    [8, 249, 5, 6],
1816    [8, 250, 3, 7],
1817    [9, 502, 6, 6],
1818    [9, 503, 7, 4],
1819    [9, 504, 6, 0],
1820    [9, 505, 4, 7],
1821    [9, 506, 0, 6],
1822    [9, 507, 7, 5],
1823    [9, 508, 7, 6],
1824    [9, 509, 6, 7],
1825    [10, 1020, 5, 7],
1826    [10, 1021, 7, 0],
1827    [10, 1022, 0, 7],
1828    [10, 1023, 7, 7]
1829];
1830
1831const HCB9 = [
1832    [1, 0, 0, 0],
1833    [3, 4, 1, 0],
1834    [3, 5, 0, 1],
1835    [4, 12, 1, 1],
1836    [6, 52, 2, 1],
1837    [6, 53, 1, 2],
1838    [6, 54, 2, 0],
1839    [6, 55, 0, 2],
1840    [7, 112, 3, 1],
1841    [7, 113, 2, 2],
1842    [7, 114, 1, 3],
1843    [8, 230, 3, 0],
1844    [8, 231, 0, 3],
1845    [8, 232, 2, 3],
1846    [8, 233, 3, 2],
1847    [8, 234, 1, 4],
1848    [8, 235, 4, 1],
1849    [8, 236, 2, 4],
1850    [8, 237, 1, 5],
1851    [9, 476, 4, 2],
1852    [9, 477, 3, 3],
1853    [9, 478, 0, 4],
1854    [9, 479, 4, 0],
1855    [9, 480, 5, 1],
1856    [9, 481, 2, 5],
1857    [9, 482, 1, 6],
1858    [9, 483, 3, 4],
1859    [9, 484, 5, 2],
1860    [9, 485, 6, 1],
1861    [9, 486, 4, 3],
1862    [10, 974, 0, 5],
1863    [10, 975, 2, 6],
1864    [10, 976, 5, 0],
1865    [10, 977, 1, 7],
1866    [10, 978, 3, 5],
1867    [10, 979, 1, 8],
1868    [10, 980, 8, 1],
1869    [10, 981, 4, 4],
1870    [10, 982, 5, 3],
1871    [10, 983, 6, 2],
1872    [10, 984, 7, 1],
1873    [10, 985, 0, 6],
1874    [10, 986, 8, 2],
1875    [10, 987, 2, 8],
1876    [10, 988, 3, 6],
1877    [10, 989, 2, 7],
1878    [10, 990, 4, 5],
1879    [10, 991, 9, 1],
1880    [10, 992, 1, 9],
1881    [10, 993, 7, 2],
1882    [11, 1988, 6, 0],
1883    [11, 1989, 5, 4],
1884    [11, 1990, 6, 3],
1885    [11, 1991, 8, 3],
1886    [11, 1992, 0, 7],
1887    [11, 1993, 9, 2],
1888    [11, 1994, 3, 8],
1889    [11, 1995, 4, 6],
1890    [11, 1996, 3, 7],
1891    [11, 1997, 0, 8],
1892    [11, 1998, 10, 1],
1893    [11, 1999, 6, 4],
1894    [11, 2000, 2, 9],
1895    [11, 2001, 5, 5],
1896    [11, 2002, 8, 0],
1897    [11, 2003, 7, 0],
1898    [11, 2004, 7, 3],
1899    [11, 2005, 10, 2],
1900    [11, 2006, 9, 3],
1901    [11, 2007, 8, 4],
1902    [11, 2008, 1, 10],
1903    [11, 2009, 7, 4],
1904    [11, 2010, 6, 5],
1905    [11, 2011, 5, 6],
1906    [11, 2012, 4, 8],
1907    [11, 2013, 4, 7],
1908    [11, 2014, 3, 9],
1909    [11, 2015, 11, 1],
1910    [11, 2016, 5, 8],
1911    [11, 2017, 9, 0],
1912    [11, 2018, 8, 5],
1913    [12, 4038, 10, 3],
1914    [12, 4039, 2, 10],
1915    [12, 4040, 0, 9],
1916    [12, 4041, 11, 2],
1917    [12, 4042, 9, 4],
1918    [12, 4043, 6, 6],
1919    [12, 4044, 12, 1],
1920    [12, 4045, 4, 9],
1921    [12, 4046, 8, 6],
1922    [12, 4047, 1, 11],
1923    [12, 4048, 9, 5],
1924    [12, 4049, 10, 4],
1925    [12, 4050, 5, 7],
1926    [12, 4051, 7, 5],
1927    [12, 4052, 2, 11],
1928    [12, 4053, 1, 12],
1929    [12, 4054, 12, 2],
1930    [12, 4055, 11, 3],
1931    [12, 4056, 3, 10],
1932    [12, 4057, 5, 9],
1933    [12, 4058, 6, 7],
1934    [12, 4059, 8, 7],
1935    [12, 4060, 11, 4],
1936    [12, 4061, 0, 10],
1937    [12, 4062, 7, 6],
1938    [12, 4063, 12, 3],
1939    [12, 4064, 10, 0],
1940    [12, 4065, 10, 5],
1941    [12, 4066, 4, 10],
1942    [12, 4067, 6, 8],
1943    [12, 4068, 2, 12],
1944    [12, 4069, 9, 6],
1945    [12, 4070, 9, 7],
1946    [12, 4071, 4, 11],
1947    [12, 4072, 11, 0],
1948    [12, 4073, 6, 9],
1949    [12, 4074, 3, 11],
1950    [12, 4075, 5, 10],
1951    [13, 8152, 8, 8],
1952    [13, 8153, 7, 8],
1953    [13, 8154, 12, 5],
1954    [13, 8155, 3, 12],
1955    [13, 8156, 11, 5],
1956    [13, 8157, 7, 7],
1957    [13, 8158, 12, 4],
1958    [13, 8159, 11, 6],
1959    [13, 8160, 10, 6],
1960    [13, 8161, 4, 12],
1961    [13, 8162, 7, 9],
1962    [13, 8163, 5, 11],
1963    [13, 8164, 0, 11],
1964    [13, 8165, 12, 6],
1965    [13, 8166, 6, 10],
1966    [13, 8167, 12, 0],
1967    [13, 8168, 10, 7],
1968    [13, 8169, 5, 12],
1969    [13, 8170, 7, 10],
1970    [13, 8171, 9, 8],
1971    [13, 8172, 0, 12],
1972    [13, 8173, 11, 7],
1973    [13, 8174, 8, 9],
1974    [13, 8175, 9, 9],
1975    [13, 8176, 10, 8],
1976    [13, 8177, 7, 11],
1977    [13, 8178, 12, 7],
1978    [13, 8179, 6, 11],
1979    [13, 8180, 8, 11],
1980    [13, 8181, 11, 8],
1981    [13, 8182, 7, 12],
1982    [13, 8183, 6, 12],
1983    [14, 16368, 8, 10],
1984    [14, 16369, 10, 9],
1985    [14, 16370, 8, 12],
1986    [14, 16371, 9, 10],
1987    [14, 16372, 9, 11],
1988    [14, 16373, 9, 12],
1989    [14, 16374, 10, 11],
1990    [14, 16375, 12, 9],
1991    [14, 16376, 10, 10],
1992    [14, 16377, 11, 9],
1993    [14, 16378, 12, 8],
1994    [14, 16379, 11, 10],
1995    [14, 16380, 12, 10],
1996    [14, 16381, 12, 11],
1997    [15, 32764, 10, 12],
1998    [15, 32765, 11, 11],
1999    [15, 32766, 11, 12],
2000    [15, 32767, 12, 12]
2001];
2002
2003const HCB10 = [
2004    [4, 0, 1, 1],
2005    [4, 1, 1, 2],
2006    [4, 2, 2, 1],
2007    [5, 6, 2, 2],
2008    [5, 7, 1, 0],
2009    [5, 8, 0, 1],
2010    [5, 9, 1, 3],
2011    [5, 10, 3, 2],
2012    [5, 11, 3, 1],
2013    [5, 12, 2, 3],
2014    [5, 13, 3, 3],
2015    [6, 28, 2, 0],
2016    [6, 29, 0, 2],
2017    [6, 30, 2, 4],
2018    [6, 31, 4, 2],
2019    [6, 32, 1, 4],
2020    [6, 33, 4, 1],
2021    [6, 34, 0, 0],
2022    [6, 35, 4, 3],
2023    [6, 36, 3, 4],
2024    [6, 37, 3, 0],
2025    [6, 38, 0, 3],
2026    [6, 39, 4, 4],
2027    [6, 40, 2, 5],
2028    [6, 41, 5, 2],
2029    [7, 84, 1, 5],
2030    [7, 85, 5, 1],
2031    [7, 86, 5, 3],
2032    [7, 87, 3, 5],
2033    [7, 88, 5, 4],
2034    [7, 89, 4, 5],
2035    [7, 90, 6, 2],
2036    [7, 91, 2, 6],
2037    [7, 92, 6, 3],
2038    [7, 93, 4, 0],
2039    [7, 94, 6, 1],
2040    [7, 95, 0, 4],
2041    [7, 96, 1, 6],
2042    [7, 97, 3, 6],
2043    [7, 98, 5, 5],
2044    [7, 99, 6, 4],
2045    [7, 100, 4, 6],
2046    [8, 202, 6, 5],
2047    [8, 203, 7, 2],
2048    [8, 204, 3, 7],
2049    [8, 205, 2, 7],
2050    [8, 206, 5, 6],
2051    [8, 207, 8, 2],
2052    [8, 208, 7, 3],
2053    [8, 209, 5, 0],
2054    [8, 210, 7, 1],
2055    [8, 211, 0, 5],
2056    [8, 212, 8, 1],
2057    [8, 213, 1, 7],
2058    [8, 214, 8, 3],
2059    [8, 215, 7, 4],
2060    [8, 216, 4, 7],
2061    [8, 217, 2, 8],
2062    [8, 218, 6, 6],
2063    [8, 219, 7, 5],
2064    [8, 220, 1, 8],
2065    [8, 221, 3, 8],
2066    [8, 222, 8, 4],
2067    [8, 223, 4, 8],
2068    [8, 224, 5, 7],
2069    [8, 225, 8, 5],
2070    [8, 226, 5, 8],
2071    [9, 454, 7, 6],
2072    [9, 455, 6, 7],
2073    [9, 456, 9, 2],
2074    [9, 457, 6, 0],
2075    [9, 458, 6, 8],
2076    [9, 459, 9, 3],
2077    [9, 460, 3, 9],
2078    [9, 461, 9, 1],
2079    [9, 462, 2, 9],
2080    [9, 463, 0, 6],
2081    [9, 464, 8, 6],
2082    [9, 465, 9, 4],
2083    [9, 466, 4, 9],
2084    [9, 467, 10, 2],
2085    [9, 468, 1, 9],
2086    [9, 469, 7, 7],
2087    [9, 470, 8, 7],
2088    [9, 471, 9, 5],
2089    [9, 472, 7, 8],
2090    [9, 473, 10, 3],
2091    [9, 474, 5, 9],
2092    [9, 475, 10, 4],
2093    [9, 476, 2, 10],
2094    [9, 477, 10, 1],
2095    [9, 478, 3, 10],
2096    [9, 479, 9, 6],
2097    [9, 480, 6, 9],
2098    [9, 481, 8, 0],
2099    [9, 482, 4, 10],
2100    [9, 483, 7, 0],
2101    [9, 484, 11, 2],
2102    [10, 970, 7, 9],
2103    [10, 971, 11, 3],
2104    [10, 972, 10, 6],
2105    [10, 973, 1, 10],
2106    [10, 974, 11, 1],
2107    [10, 975, 9, 7],
2108    [10, 976, 0, 7],
2109    [10, 977, 8, 8],
2110    [10, 978, 10, 5],
2111    [10, 979, 3, 11],
2112    [10, 980, 5, 10],
2113    [10, 981, 8, 9],
2114    [10, 982, 11, 5],
2115    [10, 983, 0, 8],
2116    [10, 984, 11, 4],
2117    [10, 985, 2, 11],
2118    [10, 986, 7, 10],
2119    [10, 987, 6, 10],
2120    [10, 988, 10, 7],
2121    [10, 989, 4, 11],
2122    [10, 990, 1, 11],
2123    [10, 991, 12, 2],
2124    [10, 992, 9, 8],
2125    [10, 993, 12, 3],
2126    [10, 994, 11, 6],
2127    [10, 995, 5, 11],
2128    [10, 996, 12, 4],
2129    [10, 997, 11, 7],
2130    [10, 998, 12, 5],
2131    [10, 999, 3, 12],
2132    [10, 1000, 6, 11],
2133    [10, 1001, 9, 0],
2134    [10, 1002, 10, 8],
2135    [10, 1003, 10, 0],
2136    [10, 1004, 12, 1],
2137    [10, 1005, 0, 9],
2138    [10, 1006, 4, 12],
2139    [10, 1007, 9, 9],
2140    [10, 1008, 12, 6],
2141    [10, 1009, 2, 12],
2142    [10, 1010, 8, 10],
2143    [11, 2022, 9, 10],
2144    [11, 2023, 1, 12],
2145    [11, 2024, 11, 8],
2146    [11, 2025, 12, 7],
2147    [11, 2026, 7, 11],
2148    [11, 2027, 5, 12],
2149    [11, 2028, 6, 12],
2150    [11, 2029, 10, 9],
2151    [11, 2030, 8, 11],
2152    [11, 2031, 12, 8],
2153    [11, 2032, 0, 10],
2154    [11, 2033, 7, 12],
2155    [11, 2034, 11, 0],
2156    [11, 2035, 10, 10],
2157    [11, 2036, 11, 9],
2158    [11, 2037, 11, 10],
2159    [11, 2038, 0, 11],
2160    [11, 2039, 11, 11],
2161    [11, 2040, 9, 11],
2162    [11, 2041, 10, 11],
2163    [11, 2042, 12, 0],
2164    [11, 2043, 8, 12],
2165    [12, 4088, 12, 9],
2166    [12, 4089, 10, 12],
2167    [12, 4090, 9, 12],
2168    [12, 4091, 11, 12],
2169    [12, 4092, 12, 11],
2170    [12, 4093, 0, 12],
2171    [12, 4094, 12, 10],
2172    [12, 4095, 12, 12]
2173];
2174
2175const HCB11 = [
2176    [4, 0, 0, 0],
2177    [4, 1, 1, 1],
2178    [5, 4, 16, 16],
2179    [5, 5, 1, 0],
2180    [5, 6, 0, 1],
2181    [5, 7, 2, 1],
2182    [5, 8, 1, 2],
2183    [5, 9, 2, 2],
2184    [6, 20, 1, 3],
2185    [6, 21, 3, 1],
2186    [6, 22, 3, 2],
2187    [6, 23, 2, 0],
2188    [6, 24, 2, 3],
2189    [6, 25, 0, 2],
2190    [6, 26, 3, 3],
2191    [7, 54, 4, 1],
2192    [7, 55, 1, 4],
2193    [7, 56, 4, 2],
2194    [7, 57, 2, 4],
2195    [7, 58, 4, 3],
2196    [7, 59, 3, 4],
2197    [7, 60, 3, 0],
2198    [7, 61, 0, 3],
2199    [7, 62, 5, 1],
2200    [7, 63, 5, 2],
2201    [7, 64, 2, 5],
2202    [7, 65, 4, 4],
2203    [7, 66, 1, 5],
2204    [7, 67, 5, 3],
2205    [7, 68, 3, 5],
2206    [7, 69, 5, 4],
2207    [8, 140, 4, 5],
2208    [8, 141, 6, 2],
2209    [8, 142, 2, 6],
2210    [8, 143, 6, 1],
2211    [8, 144, 6, 3],
2212    [8, 145, 3, 6],
2213    [8, 146, 1, 6],
2214    [8, 147, 4, 16],
2215    [8, 148, 3, 16],
2216    [8, 149, 16, 5],
2217    [8, 150, 16, 3],
2218    [8, 151, 16, 4],
2219    [8, 152, 6, 4],
2220    [8, 153, 16, 6],
2221    [8, 154, 4, 0],
2222    [8, 155, 4, 6],
2223    [8, 156, 0, 4],
2224    [8, 157, 2, 16],
2225    [8, 158, 5, 5],
2226    [8, 159, 5, 16],
2227    [8, 160, 16, 7],
2228    [8, 161, 16, 2],
2229    [8, 162, 16, 8],
2230    [8, 163, 2, 7],
2231    [8, 164, 7, 2],
2232    [8, 165, 3, 7],
2233    [8, 166, 6, 5],
2234    [8, 167, 5, 6],
2235    [8, 168, 6, 16],
2236    [8, 169, 16, 10],
2237    [8, 170, 7, 3],
2238    [8, 171, 7, 1],
2239    [8, 172, 16, 9],
2240    [8, 173, 7, 16],
2241    [8, 174, 1, 16],
2242    [8, 175, 1, 7],
2243    [8, 176, 4, 7],
2244    [8, 177, 16, 11],
2245    [8, 178, 7, 4],
2246    [8, 179, 16, 12],
2247    [8, 180, 8, 16],
2248    [8, 181, 16, 1],
2249    [8, 182, 6, 6],
2250    [8, 183, 9, 16],
2251    [8, 184, 2, 8],
2252    [8, 185, 5, 7],
2253    [8, 186, 10, 16],
2254    [8, 187, 16, 13],
2255    [8, 188, 8, 3],
2256    [8, 189, 8, 2],
2257    [8, 190, 3, 8],
2258    [8, 191, 5, 0],
2259    [8, 192, 16, 14],
2260    [8, 193, 11, 16],
2261    [8, 194, 7, 5],
2262    [8, 195, 4, 8],
2263    [8, 196, 6, 7],
2264    [8, 197, 7, 6],
2265    [8, 198, 0, 5],
2266    [9, 398, 8, 4],
2267    [9, 399, 16, 15],
2268    [9, 400, 12, 16],
2269    [9, 401, 1, 8],
2270    [9, 402, 8, 1],
2271    [9, 403, 14, 16],
2272    [9, 404, 5, 8],
2273    [9, 405, 13, 16],
2274    [9, 406, 3, 9],
2275    [9, 407, 8, 5],
2276    [9, 408, 7, 7],
2277    [9, 409, 2, 9],
2278    [9, 410, 8, 6],
2279    [9, 411, 9, 2],
2280    [9, 412, 9, 3],
2281    [9, 413, 15, 16],
2282    [9, 414, 4, 9],
2283    [9, 415, 6, 8],
2284    [9, 416, 6, 0],
2285    [9, 417, 9, 4],
2286    [9, 418, 5, 9],
2287    [9, 419, 8, 7],
2288    [9, 420, 7, 8],
2289    [9, 421, 1, 9],
2290    [9, 422, 10, 3],
2291    [9, 423, 0, 6],
2292    [9, 424, 10, 2],
2293    [9, 425, 9, 1],
2294    [9, 426, 9, 5],
2295    [9, 427, 4, 10],
2296    [9, 428, 2, 10],
2297    [9, 429, 9, 6],
2298    [9, 430, 3, 10],
2299    [9, 431, 6, 9],
2300    [9, 432, 10, 4],
2301    [9, 433, 8, 8],
2302    [9, 434, 10, 5],
2303    [9, 435, 9, 7],
2304    [9, 436, 11, 3],
2305    [9, 437, 1, 10],
2306    [9, 438, 7, 0],
2307    [9, 439, 10, 6],
2308    [9, 440, 7, 9],
2309    [9, 441, 3, 11],
2310    [9, 442, 5, 10],
2311    [9, 443, 10, 1],
2312    [9, 444, 4, 11],
2313    [9, 445, 11, 2],
2314    [9, 446, 13, 2],
2315    [9, 447, 6, 10],
2316    [9, 448, 13, 3],
2317    [9, 449, 2, 11],
2318    [9, 450, 16, 0],
2319    [9, 451, 5, 11],
2320    [9, 452, 11, 5],
2321    [10, 906, 11, 4],
2322    [10, 907, 9, 8],
2323    [10, 908, 7, 10],
2324    [10, 909, 8, 9],
2325    [10, 910, 0, 16],
2326    [10, 911, 4, 13],
2327    [10, 912, 0, 7],
2328    [10, 913, 3, 13],
2329    [10, 914, 11, 6],
2330    [10, 915, 13, 1],
2331    [10, 916, 13, 4],
2332    [10, 917, 12, 3],
2333    [10, 918, 2, 13],
2334    [10, 919, 13, 5],
2335    [10, 920, 8, 10],
2336    [10, 921, 6, 11],
2337    [10, 922, 10, 8],
2338    [10, 923, 10, 7],
2339    [10, 924, 14, 2],
2340    [10, 925, 12, 4],
2341    [10, 926, 1, 11],
2342    [10, 927, 4, 12],
2343    [10, 928, 11, 1],
2344    [10, 929, 3, 12],
2345    [10, 930, 1, 13],
2346    [10, 931, 12, 2],
2347    [10, 932, 7, 11],
2348    [10, 933, 3, 14],
2349    [10, 934, 5, 12],
2350    [10, 935, 5, 13],
2351    [10, 936, 14, 4],
2352    [10, 937, 4, 14],
2353    [10, 938, 11, 7],
2354    [10, 939, 14, 3],
2355    [10, 940, 12, 5],
2356    [10, 941, 13, 6],
2357    [10, 942, 12, 6],
2358    [10, 943, 8, 0],
2359    [10, 944, 11, 8],
2360    [10, 945, 2, 12],
2361    [10, 946, 9, 9],
2362    [10, 947, 14, 5],
2363    [10, 948, 6, 13],
2364    [10, 949, 10, 10],
2365    [10, 950, 15, 2],
2366    [10, 951, 8, 11],
2367    [10, 952, 9, 10],
2368    [10, 953, 14, 6],
2369    [10, 954, 10, 9],
2370    [10, 955, 5, 14],
2371    [10, 956, 11, 9],
2372    [10, 957, 14, 1],
2373    [10, 958, 2, 14],
2374    [10, 959, 6, 12],
2375    [10, 960, 1, 12],
2376    [10, 961, 13, 8],
2377    [10, 962, 0, 8],
2378    [10, 963, 13, 7],
2379    [10, 964, 7, 12],
2380    [10, 965, 12, 7],
2381    [10, 966, 7, 13],
2382    [10, 967, 15, 3],
2383    [10, 968, 12, 1],
2384    [10, 969, 6, 14],
2385    [10, 970, 2, 15],
2386    [10, 971, 15, 5],
2387    [10, 972, 15, 4],
2388    [10, 973, 1, 14],
2389    [10, 974, 9, 11],
2390    [10, 975, 4, 15],
2391    [10, 976, 14, 7],
2392    [10, 977, 8, 13],
2393    [10, 978, 13, 9],
2394    [10, 979, 8, 12],
2395    [10, 980, 5, 15],
2396    [10, 981, 3, 15],
2397    [10, 982, 10, 11],
2398    [10, 983, 11, 10],
2399    [10, 984, 12, 8],
2400    [10, 985, 15, 6],
2401    [10, 986, 15, 7],
2402    [10, 987, 8, 14],
2403    [10, 988, 15, 1],
2404    [10, 989, 7, 14],
2405    [10, 990, 9, 0],
2406    [10, 991, 0, 9],
2407    [10, 992, 9, 13],
2408    [10, 993, 9, 12],
2409    [10, 994, 12, 9],
2410    [10, 995, 14, 8],
2411    [10, 996, 10, 13],
2412    [10, 997, 14, 9],
2413    [10, 998, 12, 10],
2414    [10, 999, 6, 15],
2415    [10, 1000, 7, 15],
2416    [11, 2002, 9, 14],
2417    [11, 2003, 15, 8],
2418    [11, 2004, 11, 11],
2419    [11, 2005, 11, 14],
2420    [11, 2006, 1, 15],
2421    [11, 2007, 10, 12],
2422    [11, 2008, 10, 14],
2423    [11, 2009, 13, 11],
2424    [11, 2010, 13, 10],
2425    [11, 2011, 11, 13],
2426    [11, 2012, 11, 12],
2427    [11, 2013, 8, 15],
2428    [11, 2014, 14, 11],
2429    [11, 2015, 13, 12],
2430    [11, 2016, 12, 13],
2431    [11, 2017, 15, 9],
2432    [11, 2018, 14, 10],
2433    [11, 2019, 10, 0],
2434    [11, 2020, 12, 11],
2435    [11, 2021, 9, 15],
2436    [11, 2022, 0, 10],
2437    [11, 2023, 12, 12],
2438    [11, 2024, 11, 0],
2439    [11, 2025, 12, 14],
2440    [11, 2026, 10, 15],
2441    [11, 2027, 13, 13],
2442    [11, 2028, 0, 13],
2443    [11, 2029, 14, 12],
2444    [11, 2030, 15, 10],
2445    [11, 2031, 15, 11],
2446    [11, 2032, 11, 15],
2447    [11, 2033, 14, 13],
2448    [11, 2034, 13, 0],
2449    [11, 2035, 0, 11],
2450    [11, 2036, 13, 14],
2451    [11, 2037, 15, 12],
2452    [11, 2038, 15, 13],
2453    [11, 2039, 12, 15],
2454    [11, 2040, 14, 0],
2455    [11, 2041, 14, 14],
2456    [11, 2042, 13, 15],
2457    [11, 2043, 12, 0],
2458    [11, 2044, 14, 15],
2459    [12, 4090, 0, 14],
2460    [12, 4091, 0, 12],
2461    [12, 4092, 15, 14],
2462    [12, 4093, 15, 0],
2463    [12, 4094, 0, 15],
2464    [12, 4095, 15, 15]
2465];
2466
2467const HCB_SF = [
2468    [1, 0, 60],
2469    [3, 4, 59],
2470    [4, 10, 61],
2471    [4, 11, 58],
2472    [4, 12, 62],
2473    [5, 26, 57],
2474    [5, 27, 63],
2475    [6, 56, 56],
2476    [6, 57, 64],
2477    [6, 58, 55],
2478    [6, 59, 65],
2479    [7, 120, 66],
2480    [7, 121, 54],
2481    [7, 122, 67],
2482    [8, 246, 53],
2483    [8, 247, 68],
2484    [8, 248, 52],
2485    [8, 249, 69],
2486    [8, 250, 51],
2487    [9, 502, 70],
2488    [9, 503, 50],
2489    [9, 504, 49],
2490    [9, 505, 71],
2491    [10, 1012, 72],
2492    [10, 1013, 48],
2493    [10, 1014, 73],
2494    [10, 1015, 47],
2495    [10, 1016, 74],
2496    [10, 1017, 46],
2497    [11, 2036, 76],
2498    [11, 2037, 75],
2499    [11, 2038, 77],
2500    [11, 2039, 78],
2501    [11, 2040, 45],
2502    [11, 2041, 43],
2503    [12, 4084, 44],
2504    [12, 4085, 79],
2505    [12, 4086, 42],
2506    [12, 4087, 41],
2507    [12, 4088, 80],
2508    [12, 4089, 40],
2509    [13, 8180, 81],
2510    [13, 8181, 39],
2511    [13, 8182, 82],
2512    [13, 8183, 38],
2513    [13, 8184, 83],
2514    [14, 16370, 37],
2515    [14, 16371, 35],
2516    [14, 16372, 85],
2517    [14, 16373, 33],
2518    [14, 16374, 36],
2519    [14, 16375, 34],
2520    [14, 16376, 84],
2521    [14, 16377, 32],
2522    [15, 32756, 87],
2523    [15, 32757, 89],
2524    [15, 32758, 30],
2525    [15, 32759, 31],
2526    [16, 65520, 86],
2527    [16, 65521, 29],
2528    [16, 65522, 26],
2529    [16, 65523, 27],
2530    [16, 65524, 28],
2531    [16, 65525, 24],
2532    [16, 65526, 88],
2533    [17, 131054, 25],
2534    [17, 131055, 22],
2535    [17, 131056, 23],
2536    [18, 262114, 90],
2537    [18, 262115, 21],
2538    [18, 262116, 19],
2539    [18, 262117, 3],
2540    [18, 262118, 1],
2541    [18, 262119, 2],
2542    [18, 262120, 0],
2543    [19, 524242, 98],
2544    [19, 524243, 99],
2545    [19, 524244, 100],
2546    [19, 524245, 101],
2547    [19, 524246, 102],
2548    [19, 524247, 117],
2549    [19, 524248, 97],
2550    [19, 524249, 91],
2551    [19, 524250, 92],
2552    [19, 524251, 93],
2553    [19, 524252, 94],
2554    [19, 524253, 95],
2555    [19, 524254, 96],
2556    [19, 524255, 104],
2557    [19, 524256, 111],
2558    [19, 524257, 112],
2559    [19, 524258, 113],
2560    [19, 524259, 114],
2561    [19, 524260, 115],
2562    [19, 524261, 116],
2563    [19, 524262, 110],
2564    [19, 524263, 105],
2565    [19, 524264, 106],
2566    [19, 524265, 107],
2567    [19, 524266, 108],
2568    [19, 524267, 109],
2569    [19, 524268, 118],
2570    [19, 524269, 6],
2571    [19, 524270, 8],
2572    [19, 524271, 9],
2573    [19, 524272, 10],
2574    [19, 524273, 5],
2575    [19, 524274, 103],
2576    [19, 524275, 120],
2577    [19, 524276, 119],
2578    [19, 524277, 4],
2579    [19, 524278, 7],
2580    [19, 524279, 15],
2581    [19, 524280, 16],
2582    [19, 524281, 18],
2583    [19, 524282, 20],
2584    [19, 524283, 17],
2585    [19, 524284, 11],
2586    [19, 524285, 12],
2587    [19, 524286, 14],
2588    [19, 524287, 13]
2589];
2590
2591const CODEBOOKS = [HCB1, HCB2, HCB3, HCB4, HCB5, HCB6, HCB7, HCB8, HCB9, HCB10, HCB11];
2592const UNSIGNED = [false, false, true, true, false, false, true, true, true, true, true],
2593      QUAD_LEN = 4,
2594      PAIR_LEN = 2;
2595
2596var Huffman = {
2597    findOffset: function(stream, table) {
2598        var off = 0,
2599            len = table[off][0],
2600            cw = stream.read(len);
2601
2602        while (cw !== table[off][1]) {
2603            var j = table[++off][0] - len;
2604            len = table[off][0];
2605            cw <<= j;
2606            cw |= stream.read(j);
2607        }
2608
2609        return off;
2610    },
2611
2612    signValues: function(stream, data, off, len) {
2613        for (var i = off; i < off + len; i++) {
2614            if (data[i] && stream.read(1))
2615                data[i] = -data[i];
2616        }
2617    },
2618
2619    getEscape: function(stream, s) {
2620        var i = 4;
2621        while (stream.read(1))
2622            i++;
2623
2624        var j = stream.read(i) | (1 << i);
2625        return s < 0 ? -j : j;
2626    },
2627
2628    decodeScaleFactor: function(stream) {
2629        var offset = this.findOffset(stream, HCB_SF);
2630        return HCB_SF[offset][2];
2631    },
2632
2633    decodeSpectralData: function(stream, cb, data, off) {
2634        var HCB = CODEBOOKS[cb - 1],
2635            offset = this.findOffset(stream, HCB);
2636
2637        data[off] = HCB[offset][2];
2638        data[off + 1] = HCB[offset][3];
2639
2640        if (cb < 5) {
2641            data[off + 2] = HCB[offset][4];
2642            data[off + 3] = HCB[offset][5];
2643        }
2644
2645        // sign and escape
2646        if (cb < 11) {
2647            if (UNSIGNED[cb - 1])
2648                this.signValues(stream, data, off, cb < 5 ? QUAD_LEN : PAIR_LEN);
2649
2650        } else if (cb === 11 || cb > 15) {
2651            this.signValues(stream, data, off, cb < 5 ? QUAD_LEN : PAIR_LEN);
2652
2653            if (Math.abs(data[off]) === 16)
2654                data[off] = this.getEscape(stream, data[off]);
2655
2656            if (Math.abs(data[off + 1]) === 16)
2657                data[off + 1] = this.getEscape(stream, data[off + 1]);
2658        } else {
2659            throw new Error("Huffman: unknown spectral codebook: " + cb);
2660        }
2661    }
2662};
2663
2664module.exports = Huffman;
2665
2666},{}],8:[function(require,module,exports){
2667/*
2668 * AAC.js - Advanced Audio Coding decoder in JavaScript
2669 * Created by Devon Govett
2670 * Copyright (c) 2012, Official.fm Labs
2671 *
2672 * AAC.js is free software; you can redistribute it and/or modify it
2673 * under the terms of the GNU Lesser General Public License as
2674 * published by the Free Software Foundation; either version 3 of the
2675 * License, or (at your option) any later version.
2676 *
2677 * AAC.js is distributed in the hope that it will be useful, but WITHOUT
2678 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
2679 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General
2680 * Public License for more details.
2681 *
2682 * You should have received a copy of the GNU Lesser General Public
2683 * License along with this library.
2684 * If not, see <http://www.gnu.org/licenses/>.
2685 */
2686
2687var tables = require('./tables');
2688var Huffman = require('./huffman');
2689var TNS = require('./tns');
2690
2691// Individual Channel Stream
2692function ICStream(config) {
2693    this.info = new ICSInfo();
2694    this.bandTypes = new Int32Array(MAX_SECTIONS);
2695    this.sectEnd = new Int32Array(MAX_SECTIONS);
2696    this.data = new Float32Array(config.frameLength);
2697    this.scaleFactors = new Float32Array(MAX_SECTIONS);
2698    this.randomState = 0x1F2E3D4C;
2699    this.tns = new TNS(config);
2700    this.specBuf = new Int32Array(4);
2701}
2702
2703ICStream.ZERO_BT = 0;         // Scalefactors and spectral data are all zero.
2704ICStream.FIRST_PAIR_BT = 5;   // This and later band types encode two values (rather than four) with one code word.
2705ICStream.ESC_BT = 11;         // Spectral data are coded with an escape sequence.
2706ICStream.NOISE_BT = 13;       // Spectral data are scaled white noise not coded in the bitstream.
2707ICStream.INTENSITY_BT2 = 14;  // Scalefactor data are intensity stereo positions.
2708ICStream.INTENSITY_BT = 15;   // Scalefactor data are intensity stereo positions.
2709
2710ICStream.ONLY_LONG_SEQUENCE = 0;
2711ICStream.LONG_START_SEQUENCE = 1;
2712ICStream.EIGHT_SHORT_SEQUENCE = 2;
2713ICStream.LONG_STOP_SEQUENCE = 3;
2714
2715const MAX_SECTIONS = 120,
2716      MAX_WINDOW_GROUP_COUNT = 8;
2717
2718const SF_DELTA = 60,
2719      SF_OFFSET = 200;
2720
2721ICStream.prototype = {
2722    decode: function(stream, config, commonWindow) {
2723        this.globalGain = stream.read(8);
2724
2725        if (!commonWindow)
2726            this.info.decode(stream, config, commonWindow);
2727
2728        this.decodeBandTypes(stream, config);
2729        this.decodeScaleFactors(stream);
2730
2731        if (this.pulsePresent = stream.read(1)) {
2732            if (this.info.windowSequence === ICStream.EIGHT_SHORT_SEQUENCE)
2733                throw new Error("Pulse tool not allowed in eight short sequence.");
2734
2735            this.decodePulseData(stream);
2736        }
2737
2738        if (this.tnsPresent = stream.read(1)) {
2739            this.tns.decode(stream, this.info);
2740        }
2741
2742        if (this.gainPresent = stream.read(1)) {
2743            throw new Error("TODO: decode gain control/SSR");
2744        }
2745
2746        this.decodeSpectralData(stream);
2747    },
2748
2749    decodeBandTypes: function(stream, config) {
2750        var bits = this.info.windowSequence === ICStream.EIGHT_SHORT_SEQUENCE ? 3 : 5,
2751            groupCount = this.info.groupCount,
2752            maxSFB = this.info.maxSFB,
2753            bandTypes = this.bandTypes,
2754            sectEnd = this.sectEnd,
2755            idx = 0,
2756            escape = (1 << bits) - 1;
2757
2758        for (var g = 0; g < groupCount; g++) {
2759            var k = 0;
2760            while (k < maxSFB) {
2761                var end = k,
2762                    bandType = stream.read(4);
2763
2764                if (bandType === 12)
2765                    throw new Error("Invalid band type: 12");
2766
2767                var incr;
2768                while ((incr = stream.read(bits)) === escape)
2769                    end += incr;
2770
2771                end += incr;
2772
2773                if (end > maxSFB)
2774                    throw new Error("Too many bands (" + end + " > " + maxSFB + ")");
2775
2776                for (; k < end; k++) {
2777                    bandTypes[idx] = bandType;
2778                    sectEnd[idx++] = end;
2779                }
2780            }
2781        }
2782    },
2783
2784    decodeScaleFactors: function(stream) {
2785        var groupCount = this.info.groupCount,
2786            maxSFB = this.info.maxSFB,
2787            offset = [this.globalGain, this.globalGain - 90, 0], // spectrum, noise, intensity
2788            idx = 0,
2789            noiseFlag = true,
2790            scaleFactors = this.scaleFactors,
2791            sectEnd = this.sectEnd,
2792            bandTypes = this.bandTypes;
2793
2794        for (var g = 0; g < groupCount; g++) {
2795            for (var i = 0; i < maxSFB;) {
2796                var runEnd = sectEnd[idx];
2797
2798                switch (bandTypes[idx]) {
2799                    case ICStream.ZERO_BT:
2800                        for (; i < runEnd; i++, idx++) {
2801                            scaleFactors[idx] = 0;
2802                        }
2803                        break;
2804
2805                    case ICStream.INTENSITY_BT:
2806                    case ICStream.INTENSITY_BT2:
2807                        for(; i < runEnd; i++, idx++) {
2808                            offset[2] += Huffman.decodeScaleFactor(stream) - SF_DELTA;
2809                            var tmp = Math.min(Math.max(offset[2], -155), 100);
2810                            scaleFactors[idx] = tables.SCALEFACTOR_TABLE[-tmp + SF_OFFSET];
2811                        }
2812                        break;
2813
2814                    case ICStream.NOISE_BT:
2815                        for(; i < runEnd; i++, idx++) {
2816                            if (noiseFlag) {
2817                                offset[1] += stream.read(9) - 256;
2818                                noiseFlag = false;
2819                            } else {
2820                                offset[1] += Huffman.decodeScaleFactor(stream) - SF_DELTA;
2821                            }
2822                            var tmp = Math.min(Math.max(offset[1], -100), 155);
2823                            scaleFactors[idx] = -tables.SCALEFACTOR_TABLE[tmp + SF_OFFSET];
2824                        }
2825                        break;
2826
2827                    default:
2828                        for(; i < runEnd; i++, idx++) {
2829                            offset[0] += Huffman.decodeScaleFactor(stream) - SF_DELTA;
2830                            if(offset[0] > 255)
2831                                throw new Error("Scalefactor out of range: " + offset[0]);
2832
2833                            scaleFactors[idx] = tables.SCALEFACTOR_TABLE[offset[0] - 100 + SF_OFFSET];
2834                        }
2835                        break;
2836                }
2837            }
2838        }
2839    },
2840
2841    decodePulseData: function(stream) {
2842        var pulseCount = stream.read(2) + 1,
2843            pulseSWB = stream.read(6);
2844
2845        if (pulseSWB >= this.info.swbCount)
2846            throw new Error("Pulse SWB out of range: " + pulseSWB);
2847
2848        if (!this.pulseOffset || this.pulseOffset.length !== pulseCount) {
2849            // only reallocate if needed
2850            this.pulseOffset = new Int32Array(pulseCount);
2851            this.pulseAmp = new Int32Array(pulseCount);
2852        }
2853
2854        this.pulseOffset[0] = this.info.swbOffsets[pulseSWB] + stream.read(5);
2855        this.pulseAmp[0] = stream.read(4);
2856
2857        if (this.pulseOffset[0] > 1023)
2858            throw new Error("Pulse offset out of range: " + this.pulseOffset[0]);
2859
2860        for (var i = 1; i < pulseCount; i++) {
2861            this.pulseOffset[i] = stream.read(5) + this.pulseOffset[i - 1];
2862            if (this.pulseOffset[i] > 1023)
2863                throw new Error("Pulse offset out of range: " + this.pulseOffset[i]);
2864
2865            this.pulseAmp[i] = stream.read(4);
2866        }
2867    },
2868
2869    decodeSpectralData: function(stream) {
2870        var data = this.data,
2871            info = this.info,
2872            maxSFB = info.maxSFB,
2873            windowGroups = info.groupCount,
2874            offsets = info.swbOffsets,
2875            bandTypes = this.bandTypes,
2876            scaleFactors = this.scaleFactors,
2877            buf = this.specBuf;
2878
2879        var groupOff = 0, idx = 0;
2880        for (var g = 0; g < windowGroups; g++) {
2881            var groupLen = info.groupLength[g];
2882
2883            for (var sfb = 0; sfb < maxSFB; sfb++, idx++) {
2884                var hcb = bandTypes[idx],
2885                    off = groupOff + offsets[sfb],
2886                    width = offsets[sfb + 1] - offsets[sfb];
2887
2888                if (hcb === ICStream.ZERO_BT || hcb === ICStream.INTENSITY_BT || hcb === ICStream.INTENSITY_BT2) {
2889                    for (var group = 0; group < groupLen; group++, off += 128) {
2890                        for (var i = off; i < off + width; i++) {
2891                            data[i] = 0;
2892                        }
2893                    }
2894                } else if (hcb === ICStream.NOISE_BT) {
2895                    // fill with random values
2896                    for (var group = 0; group < groupLen; group++, off += 128) {
2897                        var energy = 0;
2898
2899                        for (var k = 0; k < width; k++) {
2900                            this.randomState *= 1664525 + 1013904223;
2901                            data[off + k] = this.randomState;
2902                            energy += data[off + k] * data[off + k];
2903                        }
2904
2905                        var scale = scaleFactors[idx] / Math.sqrt(energy);
2906                        for (var k = 0; k < width; k++) {
2907                            data[off + k] *= scale;
2908                        }
2909                    }
2910                } else {
2911                    for (var group = 0; group < groupLen; group++, off += 128) {
2912                        var num = (hcb >= ICStream.FIRST_PAIR_BT) ? 2 : 4;
2913                        for (var k = 0; k < width; k += num) {
2914                            Huffman.decodeSpectralData(stream, hcb, buf, 0);
2915
2916                            // inverse quantization & scaling
2917                            for (var j = 0; j < num; j++) {
2918                                data[off + k + j] = (buf[j] > 0) ? tables.IQ_TABLE[buf[j]] : -tables.IQ_TABLE[-buf[j]];
2919                                data[off + k + j] *= scaleFactors[idx];
2920                            }
2921                        }
2922                    }
2923                }
2924            }
2925            groupOff += groupLen << 7;
2926        }
2927
2928        // add pulse data, if present
2929        if (this.pulsePresent) {
2930            throw new Error('TODO: add pulse data');
2931        }
2932    }
2933}
2934
2935// Individual Channel Stream Info
2936function ICSInfo() {
2937    this.windowShape = new Int32Array(2);
2938    this.windowSequence = ICStream.ONLY_LONG_SEQUENCE;
2939    this.groupLength = new Int32Array(MAX_WINDOW_GROUP_COUNT);
2940    this.ltpData1Present = false;
2941    this.ltpData2Present = false;
2942}
2943
2944ICSInfo.prototype = {
2945    decode: function(stream, config, commonWindow) {
2946        stream.advance(1); // reserved
2947
2948        this.windowSequence = stream.read(2);
2949        this.windowShape[0] = this.windowShape[1];
2950        this.windowShape[1] = stream.read(1);
2951
2952        this.groupCount = 1;
2953        this.groupLength[0] = 1;
2954
2955        if (this.windowSequence === ICStream.EIGHT_SHORT_SEQUENCE) {
2956            this.maxSFB = stream.read(4);
2957            for (var i = 0; i < 7; i++) {
2958                if (stream.read(1)) {
2959                    this.groupLength[this.groupCount - 1]++;
2960                } else {
2961                    this.groupCount++;
2962                    this.groupLength[this.groupCount - 1] = 1;
2963                }
2964            }
2965
2966            this.windowCount = 8;
2967            this.swbOffsets = tables.SWB_OFFSET_128[config.sampleIndex];
2968            this.swbCount = tables.SWB_SHORT_WINDOW_COUNT[config.sampleIndex];
2969            this.predictorPresent = false;
2970        } else {
2971            this.maxSFB = stream.read(6);
2972            this.windowCount = 1;
2973            this.swbOffsets = tables.SWB_OFFSET_1024[config.sampleIndex];
2974            this.swbCount = tables.SWB_LONG_WINDOW_COUNT[config.sampleIndex];
2975            this.predictorPresent = !!stream.read(1);
2976
2977            if (this.predictorPresent)
2978                this.decodePrediction(stream, config, commonWindow);
2979        }
2980    },
2981
2982    decodePrediction: function(stream, config, commonWindow) {
2983        throw new Error('Prediction not implemented.');
2984
2985        switch (config.profile) {
2986            case AOT_AAC_MAIN:
2987                throw new Error('Prediction not implemented.');
2988                break;
2989
2990            case AOT_AAC_LTP:
2991                throw new Error('LTP prediction not implemented.');
2992                break;
2993
2994            default:
2995                throw new Error('Unsupported profile for prediction ' + config.profile);
2996        }
2997    }
2998};
2999
3000module.exports = ICStream;
3001
3002},{"./huffman":7,"./tables":11,"./tns":12}],9:[function(require,module,exports){
3003/*
3004 * AAC.js - Advanced Audio Coding decoder in JavaScript
3005 * Created by Devon Govett
3006 * Copyright (c) 2012, Official.fm Labs
3007 *
3008 * AAC.js is free software; you can redistribute it and/or modify it
3009 * under the terms of the GNU Lesser General Public License as
3010 * published by the Free Software Foundation; either version 3 of the
3011 * License, or (at your option) any later version.
3012 *
3013 * AAC.js is distributed in the hope that it will be useful, but WITHOUT
3014 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
3015 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General
3016 * Public License for more details.
3017 *
3018 * You should have received a copy of the GNU Lesser General Public
3019 * License along with this library.
3020 * If not, see <http://www.gnu.org/licenses/>.
3021 */
3022
3023var tables = require('./mdct_tables');
3024var FFT = require('./fft');
3025
3026// Modified Discrete Cosine Transform
3027function MDCT(length) {
3028    this.N = length;
3029    this.N2 = length >>> 1;
3030    this.N4 = length >>> 2;
3031    this.N8 = length >>> 3;
3032
3033    switch (length) {
3034        case 2048:
3035            this.sincos = tables.MDCT_TABLE_2048;
3036            break;
3037
3038        case 256:
3039            this.sincos = tables.MDCT_TABLE_256;
3040            break;
3041
3042        case 1920:
3043            this.sincos = tables.MDCT_TABLE_1920;
3044            break;
3045
3046        case 240:
3047            this.sincos = tables.MDCT_TABLE_240;
3048            break;
3049
3050        default:
3051            throw new Error("unsupported MDCT length: " + length);
3052    }
3053
3054    this.fft = new FFT(this.N4);
3055
3056    this.buf = new Array(this.N4);
3057    for (var i = 0; i < this.N4; i++) {
3058        this.buf[i] = new Float32Array(2);
3059    }
3060
3061    this.tmp = new Float32Array(2);
3062}
3063
3064MDCT.prototype.process = function(input, inOffset, output, outOffset) {
3065    // local access
3066    var N2 = this.N2,
3067        N4 = this.N4,
3068        N8 = this.N8,
3069        buf = this.buf,
3070        tmp = this.tmp,
3071        sincos = this.sincos,
3072        fft = this.fft;
3073
3074    // pre-IFFT complex multiplication
3075    for (var k = 0; k < N4; k++) {
3076        buf[k][1] = (input[inOffset + 2 * k] * sincos[k][0]) + (input[inOffset + N2 - 1 - 2 * k] * sincos[k][1]);
3077        buf[k][0] = (input[inOffset + N2 - 1 - 2 * k] * sincos[k][0]) - (input[inOffset + 2 * k] * sincos[k][1]);
3078    }
3079
3080    // complex IFFT, non-scaling
3081    fft.process(buf, false);
3082
3083    // post-IFFT complex multiplication
3084    for (var k = 0; k < N4; k++) {
3085        tmp[0] = buf[k][0];
3086        tmp[1] = buf[k][1];
3087        buf[k][1] = (tmp[1] * sincos[k][0]) + (tmp[0] * sincos[k][1]);
3088        buf[k][0] = (tmp[0] * sincos[k][0]) - (tmp[1] * sincos[k][1]);
3089    }
3090
3091    // reordering
3092    for (var k = 0; k < N8; k += 2) {
3093        output[outOffset + 2 * k] = buf[N8 + k][1];
3094        output[outOffset + 2 + 2 * k] = buf[N8 + 1 + k][1];
3095
3096        output[outOffset + 1 + 2 * k] = -buf[N8 - 1 - k][0];
3097        output[outOffset + 3 + 2 * k] = -buf[N8 - 2 - k][0];
3098
3099        output[outOffset + N4 + 2 * k] = buf[k][0];
3100        output[outOffset + N4 + 2 + 2 * k] = buf[1 + k][0];
3101
3102        output[outOffset + N4 + 1 + 2 * k] = -buf[N4 - 1 - k][1];
3103        output[outOffset + N4 + 3 + 2 * k] = -buf[N4 - 2 - k][1];
3104
3105        output[outOffset + N2 + 2 * k] = buf[N8 + k][0];
3106        output[outOffset + N2 + 2 + 2 * k] = buf[N8 + 1 + k][0];
3107
3108        output[outOffset + N2 + 1 + 2 * k] = -buf[N8 - 1 - k][1];
3109        output[outOffset + N2 + 3 + 2 * k] = -buf[N8 - 2 - k][1];
3110
3111        output[outOffset + N2 + N4 + 2 * k] = -buf[k][1];
3112        output[outOffset + N2 + N4 + 2 + 2 * k] = -buf[1 + k][1];
3113
3114        output[outOffset + N2 + N4 + 1 + 2 * k] = buf[N4 - 1 - k][0];
3115        output[outOffset + N2 + N4 + 3 + 2 * k] = buf[N4 - 2 - k][0];
3116    }
3117};
3118
3119module.exports = MDCT;
3120
3121},{"./fft":5,"./mdct_tables":10}],10:[function(require,module,exports){
3122/*
3123 * AAC.js - Advanced Audio Coding decoder in JavaScript
3124 * Created by Devon Govett
3125 * Copyright (c) 2012, Official.fm Labs
3126 *
3127 * AAC.js is free software; you can redistribute it and/or modify it
3128 * under the terms of the GNU Lesser General Public License as
3129 * published by the Free Software Foundation; either version 3 of the
3130 * License, or (at your option) any later version.
3131 *
3132 * AAC.js is distributed in the hope that it will be useful, but WITHOUT
3133 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
3134 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General
3135 * Public License for more details.
3136 *
3137 * You should have received a copy of the GNU Lesser General Public
3138 * License along with this library.
3139 * If not, see <http://www.gnu.org/licenses/>.
3140 */
3141
3142exports.MDCT_TABLE_2048 = [
3143    [0.031249997702054, 0.000011984224612],
3144    [0.031249813866531, 0.000107857810004],
3145    [0.031249335895858, 0.000203730380198],
3146    [0.031248563794535, 0.000299601032804],
3147    [0.031247497569829, 0.000395468865451],
3148    [0.031246137231775, 0.000491332975794],
3149    [0.031244482793177, 0.000587192461525],
3150    [0.031242534269608, 0.000683046420376],
3151    [0.031240291679407, 0.000778893950134],
3152    [0.031237755043684, 0.000874734148645],
3153    [0.031234924386313, 0.000970566113826],
3154    [0.031231799733938, 0.001066388943669],
3155    [0.031228381115970, 0.001162201736253],
3156    [0.031224668564585, 0.001258003589751],
3157    [0.031220662114728, 0.001353793602441],
3158    [0.031216361804108, 0.001449570872710],
3159    [0.031211767673203, 0.001545334499065],
3160    [0.031206879765253, 0.001641083580144],
3161    [0.031201698126266, 0.001736817214719],
3162    [0.031196222805014, 0.001832534501709],
3163    [0.031190453853031, 0.001928234540186],
3164    [0.031184391324617, 0.002023916429386],
3165    [0.031178035276836, 0.002119579268713],
3166    [0.031171385769513, 0.002215222157753],
3167    [0.031164442865236, 0.002310844196278],
3168    [0.031157206629353, 0.002406444484258],
3169    [0.031149677129975, 0.002502022121865],
3170    [0.031141854437973, 0.002597576209488],
3171    [0.031133738626977, 0.002693105847734],
3172    [0.031125329773375, 0.002788610137442],
3173    [0.031116627956316, 0.002884088179689],
3174    [0.031107633257703, 0.002979539075801],
3175    [0.031098345762200, 0.003074961927355],
3176    [0.031088765557222, 0.003170355836197],
3177    [0.031078892732942, 0.003265719904442],
3178    [0.031068727382288, 0.003361053234488],
3179    [0.031058269600939, 0.003456354929021],
3180    [0.031047519487329, 0.003551624091024],
3181    [0.031036477142640, 0.003646859823790],
3182    [0.031025142670809, 0.003742061230921],
3183    [0.031013516178519, 0.003837227416347],
3184    [0.031001597775203, 0.003932357484328],
3185    [0.030989387573042, 0.004027450539462],
3186    [0.030976885686963, 0.004122505686697],
3187    [0.030964092234638, 0.004217522031340],
3188    [0.030951007336485, 0.004312498679058],
3189    [0.030937631115663, 0.004407434735897],
3190    [0.030923963698074, 0.004502329308281],
3191    [0.030910005212362, 0.004597181503027],
3192    [0.030895755789908, 0.004691990427350],
3193    [0.030881215564835, 0.004786755188872],
3194    [0.030866384674000, 0.004881474895632],
3195    [0.030851263256996, 0.004976148656090],
3196    [0.030835851456154, 0.005070775579142],
3197    [0.030820149416533, 0.005165354774124],
3198    [0.030804157285929, 0.005259885350819],
3199    [0.030787875214864, 0.005354366419469],
3200    [0.030771303356593, 0.005448797090784],
3201    [0.030754441867095, 0.005543176475946],
3202    [0.030737290905077, 0.005637503686619],
3203    [0.030719850631972, 0.005731777834961],
3204    [0.030702121211932, 0.005825998033626],
3205    [0.030684102811835, 0.005920163395780],
3206    [0.030665795601276, 0.006014273035101],
3207    [0.030647199752570, 0.006108326065793],
3208    [0.030628315440748, 0.006202321602594],
3209    [0.030609142843557, 0.006296258760782],
3210    [0.030589682141455, 0.006390136656185],
3211    [0.030569933517616, 0.006483954405188],
3212    [0.030549897157919, 0.006577711124743],
3213    [0.030529573250956, 0.006671405932375],
3214    [0.030508961988022, 0.006765037946194],
3215    [0.030488063563118, 0.006858606284900],
3216    [0.030466878172949, 0.006952110067791],
3217    [0.030445406016919, 0.007045548414774],
3218    [0.030423647297133, 0.007138920446372],
3219    [0.030401602218392, 0.007232225283733],
3220    [0.030379270988192, 0.007325462048634],
3221    [0.030356653816724, 0.007418629863497],
3222    [0.030333750916869, 0.007511727851390],
3223    [0.030310562504198, 0.007604755136040],
3224    [0.030287088796968, 0.007697710841838],
3225    [0.030263330016124, 0.007790594093851],
3226    [0.030239286385293, 0.007883404017824],
3227    [0.030214958130781, 0.007976139740197],
3228    [0.030190345481576, 0.008068800388104],
3229    [0.030165448669342, 0.008161385089390],
3230    [0.030140267928416, 0.008253892972610],
3231    [0.030114803495809, 0.008346323167047],
3232    [0.030089055611203, 0.008438674802711],
3233    [0.030063024516947, 0.008530947010354],
3234    [0.030036710458054, 0.008623138921475],
3235    [0.030010113682202, 0.008715249668328],
3236    [0.029983234439732, 0.008807278383932],
3237    [0.029956072983640, 0.008899224202078],
3238    [0.029928629569580, 0.008991086257336],
3239    [0.029900904455860, 0.009082863685067],
3240    [0.029872897903441, 0.009174555621425],
3241    [0.029844610175929, 0.009266161203371],
3242    [0.029816041539579, 0.009357679568679],
3243    [0.029787192263292, 0.009449109855944],
3244    [0.029758062618606, 0.009540451204587],
3245    [0.029728652879702, 0.009631702754871],
3246    [0.029698963323395, 0.009722863647900],
3247    [0.029668994229134, 0.009813933025633],
3248    [0.029638745879000, 0.009904910030891],
3249    [0.029608218557702, 0.009995793807363],
3250    [0.029577412552575, 0.010086583499618],
3251    [0.029546328153577, 0.010177278253107],
3252    [0.029514965653285, 0.010267877214177],
3253    [0.029483325346896, 0.010358379530076],
3254    [0.029451407532220, 0.010448784348962],
3255    [0.029419212509679, 0.010539090819911],
3256    [0.029386740582307, 0.010629298092923],
3257    [0.029353992055740, 0.010719405318933],
3258    [0.029320967238220, 0.010809411649818],
3259    [0.029287666440590, 0.010899316238403],
3260    [0.029254089976290, 0.010989118238474],
3261    [0.029220238161353, 0.011078816804778],
3262    [0.029186111314406, 0.011168411093039],
3263    [0.029151709756664, 0.011257900259961],
3264    [0.029117033811927, 0.011347283463239],
3265    [0.029082083806579, 0.011436559861563],
3266    [0.029046860069582, 0.011525728614630],
3267    [0.029011362932476, 0.011614788883150],
3268    [0.028975592729373, 0.011703739828853],
3269    [0.028939549796957, 0.011792580614500],
3270    [0.028903234474475, 0.011881310403886],
3271    [0.028866647103744, 0.011969928361855],
3272    [0.028829788029135, 0.012058433654299],
3273    [0.028792657597583, 0.012146825448172],
3274    [0.028755256158571, 0.012235102911499],
3275    [0.028717584064137, 0.012323265213377],
3276    [0.028679641668864, 0.012411311523990],
3277    [0.028641429329882, 0.012499241014612],
3278    [0.028602947406859, 0.012587052857618],
3279    [0.028564196262001, 0.012674746226488],
3280    [0.028525176260050, 0.012762320295819],
3281    [0.028485887768276, 0.012849774241331],
3282    [0.028446331156478, 0.012937107239875],
3283    [0.028406506796976, 0.013024318469437],
3284    [0.028366415064615, 0.013111407109155],
3285    [0.028326056336751, 0.013198372339315],
3286    [0.028285430993258, 0.013285213341368],
3287    [0.028244539416515, 0.013371929297933],
3288    [0.028203381991411, 0.013458519392807],
3289    [0.028161959105334, 0.013544982810971],
3290    [0.028120271148172, 0.013631318738598],
3291    [0.028078318512309, 0.013717526363062],
3292    [0.028036101592619, 0.013803604872943],
3293    [0.027993620786463, 0.013889553458039],
3294    [0.027950876493687, 0.013975371309367],
3295    [0.027907869116616, 0.014061057619178],
3296    [0.027864599060052, 0.014146611580959],
3297    [0.027821066731270, 0.014232032389445],
3298    [0.027777272540012, 0.014317319240622],
3299    [0.027733216898487, 0.014402471331737],
3300    [0.027688900221361, 0.014487487861307],
3301    [0.027644322925762, 0.014572368029123],
3302    [0.027599485431266, 0.014657111036262],
3303    [0.027554388159903, 0.014741716085090],
3304    [0.027509031536144, 0.014826182379271],
3305    [0.027463415986904, 0.014910509123778],
3306    [0.027417541941533, 0.014994695524894],
3307    [0.027371409831816, 0.015078740790225],
3308    [0.027325020091965, 0.015162644128704],
3309    [0.027278373158618, 0.015246404750603],
3310    [0.027231469470833, 0.015330021867534],
3311    [0.027184309470088, 0.015413494692460],
3312    [0.027136893600268, 0.015496822439704],
3313    [0.027089222307671, 0.015580004324954],
3314    [0.027041296040997, 0.015663039565269],
3315    [0.026993115251345, 0.015745927379091],
3316    [0.026944680392213, 0.015828666986247],
3317    [0.026895991919487, 0.015911257607961],
3318    [0.026847050291442, 0.015993698466859],
3319    [0.026797855968734, 0.016075988786976],
3320    [0.026748409414401, 0.016158127793763],
3321    [0.026698711093851, 0.016240114714099],
3322    [0.026648761474864, 0.016321948776289],
3323    [0.026598561027585, 0.016403629210082],
3324    [0.026548110224519, 0.016485155246669],
3325    [0.026497409540530, 0.016566526118696],
3326    [0.026446459452830, 0.016647741060271],
3327    [0.026395260440982, 0.016728799306966],
3328    [0.026343812986890, 0.016809700095831],
3329    [0.026292117574797, 0.016890442665397],
3330    [0.026240174691280, 0.016971026255683],
3331    [0.026187984825246, 0.017051450108208],
3332    [0.026135548467924, 0.017131713465990],
3333    [0.026082866112867, 0.017211815573560],
3334    [0.026029938255941, 0.017291755676967],
3335    [0.025976765395322, 0.017371533023784],
3336    [0.025923348031494, 0.017451146863116],
3337    [0.025869686667242, 0.017530596445607],
3338    [0.025815781807646, 0.017609881023449],
3339    [0.025761633960080, 0.017688999850383],
3340    [0.025707243634204, 0.017767952181715],
3341    [0.025652611341960, 0.017846737274313],
3342    [0.025597737597568, 0.017925354386623],
3343    [0.025542622917522, 0.018003802778671],
3344    [0.025487267820581, 0.018082081712071],
3345    [0.025431672827768, 0.018160190450031],
3346    [0.025375838462365, 0.018238128257362],
3347    [0.025319765249906, 0.018315894400484],
3348    [0.025263453718173, 0.018393488147432],
3349    [0.025206904397193, 0.018470908767865],
3350    [0.025150117819228, 0.018548155533070],
3351    [0.025093094518776, 0.018625227715971],
3352    [0.025035835032562, 0.018702124591135],
3353    [0.024978339899534, 0.018778845434780],
3354    [0.024920609660858, 0.018855389524780],
3355    [0.024862644859912, 0.018931756140672],
3356    [0.024804446042284, 0.019007944563666],
3357    [0.024746013755764, 0.019083954076646],
3358    [0.024687348550337, 0.019159783964183],
3359    [0.024628450978184, 0.019235433512536],
3360    [0.024569321593670, 0.019310902009663],
3361    [0.024509960953345, 0.019386188745225],
3362    [0.024450369615932, 0.019461293010596],
3363    [0.024390548142329, 0.019536214098866],
3364    [0.024330497095598, 0.019610951304848],
3365    [0.024270217040961, 0.019685503925087],
3366    [0.024209708545799, 0.019759871257867],
3367    [0.024148972179639, 0.019834052603212],
3368    [0.024088008514157, 0.019908047262901],
3369    [0.024026818123164, 0.019981854540467],
3370    [0.023965401582609, 0.020055473741208],
3371    [0.023903759470567, 0.020128904172192],
3372    [0.023841892367236, 0.020202145142264],
3373    [0.023779800854935, 0.020275195962052],
3374    [0.023717485518092, 0.020348055943974],
3375    [0.023654946943242, 0.020420724402244],
3376    [0.023592185719023, 0.020493200652878],
3377    [0.023529202436167, 0.020565484013703],
3378    [0.023465997687496, 0.020637573804361],
3379    [0.023402572067918, 0.020709469346314],
3380    [0.023338926174419, 0.020781169962854],
3381    [0.023275060606058, 0.020852674979108],
3382    [0.023210975963963, 0.020923983722044],
3383    [0.023146672851322, 0.020995095520475],
3384    [0.023082151873380, 0.021066009705072],
3385    [0.023017413637435, 0.021136725608363],
3386    [0.022952458752826, 0.021207242564742],
3387    [0.022887287830934, 0.021277559910478],
3388    [0.022821901485173, 0.021347676983716],
3389    [0.022756300330983, 0.021417593124488],
3390    [0.022690484985827, 0.021487307674717],
3391    [0.022624456069185, 0.021556819978223],
3392    [0.022558214202547, 0.021626129380729],
3393    [0.022491760009405, 0.021695235229869],
3394    [0.022425094115252, 0.021764136875192],
3395    [0.022358217147572, 0.021832833668171],
3396    [0.022291129735838, 0.021901324962204],
3397    [0.022223832511501, 0.021969610112625],
3398    [0.022156326107988, 0.022037688476709],
3399    [0.022088611160696, 0.022105559413676],
3400    [0.022020688306983, 0.022173222284699],
3401    [0.021952558186166, 0.022240676452909],
3402    [0.021884221439510, 0.022307921283403],
3403    [0.021815678710228, 0.022374956143245],
3404    [0.021746930643469, 0.022441780401478],
3405    [0.021677977886316, 0.022508393429127],
3406    [0.021608821087780, 0.022574794599206],
3407    [0.021539460898790, 0.022640983286719],
3408    [0.021469897972190, 0.022706958868676],
3409    [0.021400132962735, 0.022772720724087],
3410    [0.021330166527077, 0.022838268233979],
3411    [0.021259999323769, 0.022903600781391],
3412    [0.021189632013250, 0.022968717751391],
3413    [0.021119065257845, 0.023033618531071],
3414    [0.021048299721754, 0.023098302509561],
3415    [0.020977336071050, 0.023162769078031],
3416    [0.020906174973670, 0.023227017629698],
3417    [0.020834817099409, 0.023291047559828],
3418    [0.020763263119915, 0.023354858265748],
3419    [0.020691513708680, 0.023418449146848],
3420    [0.020619569541038, 0.023481819604585],
3421    [0.020547431294155, 0.023544969042494],
3422    [0.020475099647023, 0.023607896866186],
3423    [0.020402575280455, 0.023670602483363],
3424    [0.020329858877078, 0.023733085303813],
3425    [0.020256951121327, 0.023795344739427],
3426    [0.020183852699437, 0.023857380204193],
3427    [0.020110564299439, 0.023919191114211],
3428    [0.020037086611150, 0.023980776887692],
3429    [0.019963420326171, 0.024042136944968],
3430    [0.019889566137877, 0.024103270708495],
3431    [0.019815524741412, 0.024164177602859],
3432    [0.019741296833681, 0.024224857054779],
3433    [0.019666883113346, 0.024285308493120],
3434    [0.019592284280817, 0.024345531348888],
3435    [0.019517501038246, 0.024405525055242],
3436    [0.019442534089523, 0.024465289047500],
3437    [0.019367384140264, 0.024524822763141],
3438    [0.019292051897809, 0.024584125641809],
3439    [0.019216538071215, 0.024643197125323],
3440    [0.019140843371246, 0.024702036657681],
3441    [0.019064968510369, 0.024760643685063],
3442    [0.018988914202748, 0.024819017655836],
3443    [0.018912681164234, 0.024877158020562],
3444    [0.018836270112363, 0.024935064232003],
3445    [0.018759681766343, 0.024992735745123],
3446    [0.018682916847054, 0.025050172017095],
3447    [0.018605976077037, 0.025107372507308],
3448    [0.018528860180486, 0.025164336677369],
3449    [0.018451569883247, 0.025221063991110],
3450    [0.018374105912805, 0.025277553914591],
3451    [0.018296468998280, 0.025333805916107],
3452    [0.018218659870421, 0.025389819466194],
3453    [0.018140679261596, 0.025445594037630],
3454    [0.018062527905790, 0.025501129105445],
3455    [0.017984206538592, 0.025556424146920],
3456    [0.017905715897192, 0.025611478641598],
3457    [0.017827056720375, 0.025666292071285],
3458    [0.017748229748511, 0.025720863920056],
3459    [0.017669235723550, 0.025775193674260],
3460    [0.017590075389012, 0.025829280822525],
3461    [0.017510749489986, 0.025883124855762],
3462    [0.017431258773116, 0.025936725267170],
3463    [0.017351603986600, 0.025990081552242],
3464    [0.017271785880180, 0.026043193208768],
3465    [0.017191805205132, 0.026096059736841],
3466    [0.017111662714267, 0.026148680638861],
3467    [0.017031359161915, 0.026201055419541],
3468    [0.016950895303924, 0.026253183585908],
3469    [0.016870271897651, 0.026305064647313],
3470    [0.016789489701954, 0.026356698115431],
3471    [0.016708549477186, 0.026408083504269],
3472    [0.016627451985187, 0.026459220330167],
3473    [0.016546197989277, 0.026510108111806],
3474    [0.016464788254250, 0.026560746370212],
3475    [0.016383223546365, 0.026611134628757],
3476    [0.016301504633341, 0.026661272413168],
3477    [0.016219632284346, 0.026711159251530],
3478    [0.016137607269996, 0.026760794674288],
3479    [0.016055430362340, 0.026810178214254],
3480    [0.015973102334858, 0.026859309406613],
3481    [0.015890623962454, 0.026908187788922],
3482    [0.015807996021446, 0.026956812901119],
3483    [0.015725219289558, 0.027005184285527],
3484    [0.015642294545918, 0.027053301486856],
3485    [0.015559222571044, 0.027101164052208],
3486    [0.015476004146842, 0.027148771531083],
3487    [0.015392640056594, 0.027196123475380],
3488    [0.015309131084956, 0.027243219439406],
3489    [0.015225478017946, 0.027290058979875],
3490    [0.015141681642938, 0.027336641655915],
3491    [0.015057742748656, 0.027382967029073],
3492    [0.014973662125164, 0.027429034663317],
3493    [0.014889440563862, 0.027474844125040],
3494    [0.014805078857474, 0.027520394983066],
3495    [0.014720577800046, 0.027565686808654],
3496    [0.014635938186934, 0.027610719175499],
3497    [0.014551160814797, 0.027655491659740],
3498    [0.014466246481592, 0.027700003839960],
3499    [0.014381195986567, 0.027744255297195],
3500    [0.014296010130247, 0.027788245614933],
3501    [0.014210689714436, 0.027831974379120],
3502    [0.014125235542201, 0.027875441178165],
3503    [0.014039648417870, 0.027918645602941],
3504    [0.013953929147020, 0.027961587246792],
3505    [0.013868078536476, 0.028004265705534],
3506    [0.013782097394294, 0.028046680577462],
3507    [0.013695986529763, 0.028088831463351],
3508    [0.013609746753390, 0.028130717966461],
3509    [0.013523378876898, 0.028172339692540],
3510    [0.013436883713214, 0.028213696249828],
3511    [0.013350262076462, 0.028254787249062],
3512    [0.013263514781960, 0.028295612303478],
3513    [0.013176642646205, 0.028336171028814],
3514    [0.013089646486871, 0.028376463043317],
3515    [0.013002527122799, 0.028416487967743],
3516    [0.012915285373990, 0.028456245425361],
3517    [0.012827922061597, 0.028495735041960],
3518    [0.012740438007915, 0.028534956445849],
3519    [0.012652834036379, 0.028573909267859],
3520    [0.012565110971550, 0.028612593141354],
3521    [0.012477269639111, 0.028651007702224],
3522    [0.012389310865858, 0.028689152588899],
3523    [0.012301235479693, 0.028727027442343],
3524    [0.012213044309615, 0.028764631906065],
3525    [0.012124738185712, 0.028801965626115],
3526    [0.012036317939156, 0.028839028251097],
3527    [0.011947784402191, 0.028875819432161],
3528    [0.011859138408130, 0.028912338823015],
3529    [0.011770380791341, 0.028948586079925],
3530    [0.011681512387245, 0.028984560861718],
3531    [0.011592534032306, 0.029020262829785],
3532    [0.011503446564022, 0.029055691648087],
3533    [0.011414250820918, 0.029090846983152],
3534    [0.011324947642537, 0.029125728504087],
3535    [0.011235537869437, 0.029160335882573],
3536    [0.011146022343175, 0.029194668792871],
3537    [0.011056401906305, 0.029228726911828],
3538    [0.010966677402371, 0.029262509918876],
3539    [0.010876849675891, 0.029296017496036],
3540    [0.010786919572361, 0.029329249327922],
3541    [0.010696887938235, 0.029362205101743],
3542    [0.010606755620926, 0.029394884507308],
3543    [0.010516523468793, 0.029427287237024],
3544    [0.010426192331137, 0.029459412985906],
3545    [0.010335763058187, 0.029491261451573],
3546    [0.010245236501099, 0.029522832334255],
3547    [0.010154613511943, 0.029554125336796],
3548    [0.010063894943698, 0.029585140164654],
3549    [0.009973081650240, 0.029615876525905],
3550    [0.009882174486340, 0.029646334131247],
3551    [0.009791174307650, 0.029676512694001],
3552    [0.009700081970699, 0.029706411930116],
3553    [0.009608898332881, 0.029736031558168],
3554    [0.009517624252453, 0.029765371299366],
3555    [0.009426260588521, 0.029794430877553],
3556    [0.009334808201034, 0.029823210019210],
3557    [0.009243267950778, 0.029851708453456],
3558    [0.009151640699363, 0.029879925912053],
3559    [0.009059927309220, 0.029907862129408],
3560    [0.008968128643591, 0.029935516842573],
3561    [0.008876245566520, 0.029962889791254],
3562    [0.008784278942845, 0.029989980717805],
3563    [0.008692229638191, 0.030016789367235],
3564    [0.008600098518961, 0.030043315487212],
3565    [0.008507886452329, 0.030069558828062],
3566    [0.008415594306230, 0.030095519142772],
3567    [0.008323222949351, 0.030121196186994],
3568    [0.008230773251129, 0.030146589719046],
3569    [0.008138246081733, 0.030171699499915],
3570    [0.008045642312067, 0.030196525293257],
3571    [0.007952962813750, 0.030221066865402],
3572    [0.007860208459119, 0.030245323985357],
3573    [0.007767380121212, 0.030269296424803],
3574    [0.007674478673766, 0.030292983958103],
3575    [0.007581504991203, 0.030316386362302],
3576    [0.007488459948628, 0.030339503417126],
3577    [0.007395344421816, 0.030362334904989],
3578    [0.007302159287206, 0.030384880610993],
3579    [0.007208905421891, 0.030407140322928],
3580    [0.007115583703613, 0.030429113831278],
3581    [0.007022195010752, 0.030450800929220],
3582    [0.006928740222316, 0.030472201412626],
3583    [0.006835220217939, 0.030493315080068],
3584    [0.006741635877866, 0.030514141732814],
3585    [0.006647988082948, 0.030534681174838],
3586    [0.006554277714635, 0.030554933212813],
3587    [0.006460505654964, 0.030574897656119],
3588    [0.006366672786553, 0.030594574316845],
3589    [0.006272779992593, 0.030613963009786],
3590    [0.006178828156839, 0.030633063552447],
3591    [0.006084818163601, 0.030651875765048],
3592    [0.005990750897737, 0.030670399470520],
3593    [0.005896627244644, 0.030688634494512],
3594    [0.005802448090250, 0.030706580665388],
3595    [0.005708214321004, 0.030724237814232],
3596    [0.005613926823871, 0.030741605774849],
3597    [0.005519586486321, 0.030758684383764],
3598    [0.005425194196321, 0.030775473480228],
3599    [0.005330750842327, 0.030791972906214],
3600    [0.005236257313276, 0.030808182506425],
3601    [0.005141714498576, 0.030824102128288],
3602    [0.005047123288102, 0.030839731621963],
3603    [0.004952484572181, 0.030855070840339],
3604    [0.004857799241589, 0.030870119639036],
3605    [0.004763068187541, 0.030884877876411],
3606    [0.004668292301681, 0.030899345413553],
3607    [0.004573472476075, 0.030913522114288],
3608    [0.004478609603205, 0.030927407845180],
3609    [0.004383704575956, 0.030941002475530],
3610    [0.004288758287610, 0.030954305877381],
3611    [0.004193771631837, 0.030967317925516],
3612    [0.004098745502689, 0.030980038497461],
3613    [0.004003680794587, 0.030992467473486],
3614    [0.003908578402316, 0.031004604736602],
3615    [0.003813439221017, 0.031016450172571],
3616    [0.003718264146176, 0.031028003669899],
3617    [0.003623054073616, 0.031039265119839],
3618    [0.003527809899492, 0.031050234416394],
3619    [0.003432532520278, 0.031060911456318],
3620    [0.003337222832760, 0.031071296139114],
3621    [0.003241881734029, 0.031081388367037],
3622    [0.003146510121474, 0.031091188045095],
3623    [0.003051108892766, 0.031100695081051],
3624    [0.002955678945860, 0.031109909385419],
3625    [0.002860221178978, 0.031118830871473],
3626    [0.002764736490604, 0.031127459455239],
3627    [0.002669225779478, 0.031135795055501],
3628    [0.002573689944583, 0.031143837593803],
3629    [0.002478129885137, 0.031151586994444],
3630    [0.002382546500589, 0.031159043184484],
3631    [0.002286940690606, 0.031166206093743],
3632    [0.002191313355067, 0.031173075654800],
3633    [0.002095665394051, 0.031179651802998],
3634    [0.001999997707835, 0.031185934476438],
3635    [0.001904311196878, 0.031191923615985],
3636    [0.001808606761820, 0.031197619165268],
3637    [0.001712885303465, 0.031203021070678],
3638    [0.001617147722782, 0.031208129281370],
3639    [0.001521394920889, 0.031212943749264],
3640    [0.001425627799047, 0.031217464429043],
3641    [0.001329847258653, 0.031221691278159],
3642    [0.001234054201231, 0.031225624256825],
3643    [0.001138249528420, 0.031229263328024],
3644    [0.001042434141971, 0.031232608457502],
3645    [0.000946608943736, 0.031235659613775],
3646    [0.000850774835656, 0.031238416768124],
3647    [0.000754932719759, 0.031240879894597],
3648    [0.000659083498149, 0.031243048970010],
3649    [0.000563228072993, 0.031244923973948],
3650    [0.000467367346520, 0.031246504888762],
3651    [0.000371502221008, 0.031247791699571],
3652    [0.000275633598775, 0.031248784394264],
3653    [0.000179762382174, 0.031249482963498],
3654    [0.000083889473581, 0.031249887400697]
3655];
3656
3657exports.MDCT_TABLE_256 = [
3658    [0.088387931675923, 0.000271171628935],
3659    [0.088354655998507, 0.002440238387037],
3660    [0.088268158780110, 0.004607835236780],
3661    [0.088128492123423, 0.006772656498875],
3662    [0.087935740158418, 0.008933398165942],
3663    [0.087690018991670, 0.011088758687994],
3664    [0.087391476636423, 0.013237439756448],
3665    [0.087040292923427, 0.015378147086172],
3666    [0.086636679392621, 0.017509591195118],
3667    [0.086180879165703, 0.019630488181053],
3668    [0.085673166799686, 0.021739560494940],
3669    [0.085113848121515, 0.023835537710479],
3670    [0.084503260043847, 0.025917157289369],
3671    [0.083841770362110, 0.027983165341813],
3672    [0.083129777532952, 0.030032317381813],
3673    [0.082367710434230, 0.032063379076803],
3674    [0.081556028106671, 0.034075126991164],
3675    [0.080695219477356, 0.036066349323177],
3676    [0.079785803065216, 0.038035846634965],
3677    [0.078828326668693, 0.039982432574992],
3678    [0.077823367035766, 0.041904934592675],
3679    [0.076771529516540, 0.043802194644686],
3680    [0.075673447698606, 0.045673069892513],
3681    [0.074529783025390, 0.047516433390863],
3682    [0.073341224397728, 0.049331174766491],
3683    [0.072108487758894, 0.051116200887052],
3684    [0.070832315663343, 0.052870436519557],
3685    [0.069513476829429, 0.054592824978055],
3686    [0.068152765676348, 0.056282328760143],
3687    [0.066751001845620, 0.057937930171918],
3688    [0.065309029707361, 0.059558631940996],
3689    [0.063827717851668, 0.061143457817234],
3690    [0.062307958565413, 0.062691453160784],
3691    [0.060750667294763, 0.064201685517134],
3692    [0.059156782093749, 0.065673245178784],
3693    [0.057527263059216, 0.067105245733220],
3694    [0.055863091752499, 0.068496824596852],
3695    [0.054165270608165, 0.069847143534609],
3696    [0.052434822330188, 0.071155389164853],
3697    [0.050672789275903, 0.072420773449336],
3698    [0.048880232828135, 0.073642534167879],
3699    [0.047058232755862, 0.074819935377512],
3700    [0.045207886563797, 0.075952267855771],
3701    [0.043330308831298, 0.077038849527912],
3702    [0.041426630540984, 0.078079025877766],
3703    [0.039497998397473, 0.079072170341994],
3704    [0.037545574136653, 0.080017684687506],
3705    [0.035570533825892, 0.080914999371817],
3706    [0.033574067155622, 0.081763573886112],
3707    [0.031557376722714, 0.082562897080836],
3708    [0.029521677306074, 0.083312487473584],
3709    [0.027468195134911, 0.084011893539132],
3710    [0.025398167150101, 0.084660693981419],
3711    [0.023312840259098, 0.085258497987320],
3712    [0.021213470584847, 0.085804945462053],
3713    [0.019101322709138, 0.086299707246093],
3714    [0.016977668910873, 0.086742485313442],
3715    [0.014843788399692, 0.087133012951149],
3716    [0.012700966545425, 0.087471054919968],
3717    [0.010550494103830, 0.087756407596056],
3718    [0.008393666439096, 0.087988899093631],
3719    [0.006231782743558, 0.088168389368510],
3720    [0.004066145255116, 0.088294770302461],
3721    [0.001898058472816, 0.088367965768336]
3722];
3723
3724exports.MDCT_TABLE_1920 = [
3725    [0.032274858518097, 0.000013202404176],
3726    [0.032274642494505, 0.000118821372483],
3727    [0.032274080835421, 0.000224439068308],
3728    [0.032273173546860, 0.000330054360572],
3729    [0.032271920638538, 0.000435666118218],
3730    [0.032270322123873, 0.000541273210231],
3731    [0.032268378019984, 0.000646874505642],
3732    [0.032266088347691, 0.000752468873546],
3733    [0.032263453131514, 0.000858055183114],
3734    [0.032260472399674, 0.000963632303600],
3735    [0.032257146184092, 0.001069199104358],
3736    [0.032253474520390, 0.001174754454853],
3737    [0.032249457447888, 0.001280297224671],
3738    [0.032245095009606, 0.001385826283535],
3739    [0.032240387252262, 0.001491340501313],
3740    [0.032235334226272, 0.001596838748031],
3741    [0.032229935985750, 0.001702319893890],
3742    [0.032224192588507, 0.001807782809271],
3743    [0.032218104096050, 0.001913226364749],
3744    [0.032211670573582, 0.002018649431111],
3745    [0.032204892090000, 0.002124050879359],
3746    [0.032197768717898, 0.002229429580728],
3747    [0.032190300533560, 0.002334784406698],
3748    [0.032182487616965, 0.002440114229003],
3749    [0.032174330051782, 0.002545417919644],
3750    [0.032165827925374, 0.002650694350905],
3751    [0.032156981328790, 0.002755942395358],
3752    [0.032147790356771, 0.002861160925883],
3753    [0.032138255107744, 0.002966348815672],
3754    [0.032128375683825, 0.003071504938250],
3755    [0.032118152190814, 0.003176628167476],
3756    [0.032107584738196, 0.003281717377568],
3757    [0.032096673439141, 0.003386771443102],
3758    [0.032085418410500, 0.003491789239036],
3759    [0.032073819772804, 0.003596769640711],
3760    [0.032061877650267, 0.003701711523874],
3761    [0.032049592170778, 0.003806613764680],
3762    [0.032036963465906, 0.003911475239711],
3763    [0.032023991670893, 0.004016294825985],
3764    [0.032010676924657, 0.004121071400967],
3765    [0.031997019369789, 0.004225803842586],
3766    [0.031983019152549, 0.004330491029241],
3767    [0.031968676422869, 0.004435131839816],
3768    [0.031953991334348, 0.004539725153692],
3769    [0.031938964044252, 0.004644269850758],
3770    [0.031923594713510, 0.004748764811426],
3771    [0.031907883506716, 0.004853208916638],
3772    [0.031891830592124, 0.004957601047881],
3773    [0.031875436141648, 0.005061940087200],
3774    [0.031858700330859, 0.005166224917208],
3775    [0.031841623338985, 0.005270454421097],
3776    [0.031824205348907, 0.005374627482653],
3777    [0.031806446547156, 0.005478742986267],
3778    [0.031788347123916, 0.005582799816945],
3779    [0.031769907273017, 0.005686796860323],
3780    [0.031751127191935, 0.005790733002674],
3781    [0.031732007081789, 0.005894607130928],
3782    [0.031712547147340, 0.005998418132675],
3783    [0.031692747596989, 0.006102164896182],
3784    [0.031672608642773, 0.006205846310406],
3785    [0.031652130500364, 0.006309461265002],
3786    [0.031631313389067, 0.006413008650337],
3787    [0.031610157531816, 0.006516487357501],
3788    [0.031588663155172, 0.006619896278321],
3789    [0.031566830489325, 0.006723234305370],
3790    [0.031544659768083, 0.006826500331981],
3791    [0.031522151228878, 0.006929693252258],
3792    [0.031499305112758, 0.007032811961088],
3793    [0.031476121664387, 0.007135855354151],
3794    [0.031452601132040, 0.007238822327937],
3795    [0.031428743767604, 0.007341711779751],
3796    [0.031404549826572, 0.007444522607730],
3797    [0.031380019568042, 0.007547253710853],
3798    [0.031355153254712, 0.007649903988952],
3799    [0.031329951152882, 0.007752472342725],
3800    [0.031304413532445, 0.007854957673748],
3801    [0.031278540666888, 0.007957358884484],
3802    [0.031252332833290, 0.008059674878300],
3803    [0.031225790312316, 0.008161904559473],
3804    [0.031198913388214, 0.008264046833205],
3805    [0.031171702348814, 0.008366100605636],
3806    [0.031144157485525, 0.008468064783849],
3807    [0.031116279093331, 0.008569938275893],
3808    [0.031088067470786, 0.008671719990782],
3809    [0.031059522920014, 0.008773408838517],
3810    [0.031030645746705, 0.008875003730092],
3811    [0.031001436260110, 0.008976503577507],
3812    [0.030971894773039, 0.009077907293780],
3813    [0.030942021601857, 0.009179213792959],
3814    [0.030911817066483, 0.009280421990133],
3815    [0.030881281490382, 0.009381530801444],
3816    [0.030850415200566, 0.009482539144097],
3817    [0.030819218527589, 0.009583445936373],
3818    [0.030787691805541, 0.009684250097643],
3819    [0.030755835372048, 0.009784950548375],
3820    [0.030723649568268, 0.009885546210147],
3821    [0.030691134738883, 0.009986036005661],
3822    [0.030658291232103, 0.010086418858753],
3823    [0.030625119399655, 0.010186693694402],
3824    [0.030591619596781, 0.010286859438745],
3825    [0.030557792182239, 0.010386915019088],
3826    [0.030523637518292, 0.010486859363916],
3827    [0.030489155970710, 0.010586691402906],
3828    [0.030454347908763, 0.010686410066936],
3829    [0.030419213705216, 0.010786014288099],
3830    [0.030383753736329, 0.010885502999714],
3831    [0.030347968381849, 0.010984875136338],
3832    [0.030311858025010, 0.011084129633775],
3833    [0.030275423052523, 0.011183265429088],
3834    [0.030238663854579, 0.011282281460612],
3835    [0.030201580824838, 0.011381176667967],
3836    [0.030164174360430, 0.011479949992062],
3837    [0.030126444861948, 0.011578600375117],
3838    [0.030088392733446, 0.011677126760663],
3839    [0.030050018382430, 0.011775528093563],
3840    [0.030011322219859, 0.011873803320018],
3841    [0.029972304660138, 0.011971951387578],
3842    [0.029932966121114, 0.012069971245157],
3843    [0.029893307024070, 0.012167861843041],
3844    [0.029853327793724, 0.012265622132901],
3845    [0.029813028858222, 0.012363251067801],
3846    [0.029772410649132, 0.012460747602215],
3847    [0.029731473601443, 0.012558110692033],
3848    [0.029690218153558, 0.012655339294575],
3849    [0.029648644747289, 0.012752432368600],
3850    [0.029606753827855, 0.012849388874320],
3851    [0.029564545843872, 0.012946207773407],
3852    [0.029522021247356, 0.013042888029011],
3853    [0.029479180493710, 0.013139428605762],
3854    [0.029436024041725, 0.013235828469789],
3855    [0.029392552353570, 0.013332086588727],
3856    [0.029348765894794, 0.013428201931728],
3857    [0.029304665134313, 0.013524173469475],
3858    [0.029260250544412, 0.013620000174189],
3859    [0.029215522600735, 0.013715681019643],
3860    [0.029170481782283, 0.013811214981173],
3861    [0.029125128571406, 0.013906601035686],
3862    [0.029079463453801, 0.014001838161674],
3863    [0.029033486918505, 0.014096925339225],
3864    [0.028987199457889, 0.014191861550031],
3865    [0.028940601567655, 0.014286645777401],
3866    [0.028893693746829, 0.014381277006273],
3867    [0.028846476497755, 0.014475754223221],
3868    [0.028798950326094, 0.014570076416472],
3869    [0.028751115740811, 0.014664242575910],
3870    [0.028702973254178, 0.014758251693091],
3871    [0.028654523381760, 0.014852102761253],
3872    [0.028605766642418, 0.014945794775326],
3873    [0.028556703558297, 0.015039326731945],
3874    [0.028507334654823, 0.015132697629457],
3875    [0.028457660460698, 0.015225906467935],
3876    [0.028407681507891, 0.015318952249187],
3877    [0.028357398331639, 0.015411833976768],
3878    [0.028306811470432, 0.015504550655988],
3879    [0.028255921466016, 0.015597101293927],
3880    [0.028204728863381, 0.015689484899442],
3881    [0.028153234210760, 0.015781700483179],
3882    [0.028101438059619, 0.015873747057582],
3883    [0.028049340964652, 0.015965623636907],
3884    [0.027996943483779, 0.016057329237229],
3885    [0.027944246178133, 0.016148862876456],
3886    [0.027891249612061, 0.016240223574335],
3887    [0.027837954353113, 0.016331410352467],
3888    [0.027784360972039, 0.016422422234315],
3889    [0.027730470042780, 0.016513258245214],
3890    [0.027676282142466, 0.016603917412384],
3891    [0.027621797851405, 0.016694398764938],
3892    [0.027567017753080, 0.016784701333894],
3893    [0.027511942434143, 0.016874824152183],
3894    [0.027456572484404, 0.016964766254662],
3895    [0.027400908496833, 0.017054526678124],
3896    [0.027344951067546, 0.017144104461307],
3897    [0.027288700795801, 0.017233498644904],
3898    [0.027232158283994, 0.017322708271577],
3899    [0.027175324137651, 0.017411732385960],
3900    [0.027118198965418, 0.017500570034678],
3901    [0.027060783379060, 0.017589220266351],
3902    [0.027003077993454, 0.017677682131607],
3903    [0.026945083426576, 0.017765954683088],
3904    [0.026886800299502, 0.017854036975468],
3905    [0.026828229236397, 0.017941928065456],
3906    [0.026769370864511, 0.018029627011808],
3907    [0.026710225814170, 0.018117132875340],
3908    [0.026650794718768, 0.018204444718934],
3909    [0.026591078214767, 0.018291561607551],
3910    [0.026531076941680, 0.018378482608238],
3911    [0.026470791542075, 0.018465206790142],
3912    [0.026410222661558, 0.018551733224515],
3913    [0.026349370948775, 0.018638060984730],
3914    [0.026288237055398, 0.018724189146286],
3915    [0.026226821636121, 0.018810116786819],
3916    [0.026165125348656, 0.018895842986112],
3917    [0.026103148853718, 0.018981366826109],
3918    [0.026040892815028, 0.019066687390916],
3919    [0.025978357899296, 0.019151803766819],
3920    [0.025915544776223, 0.019236715042290],
3921    [0.025852454118485, 0.019321420307998],
3922    [0.025789086601733, 0.019405918656817],
3923    [0.025725442904582, 0.019490209183837],
3924    [0.025661523708606, 0.019574290986376],
3925    [0.025597329698327, 0.019658163163984],
3926    [0.025532861561211, 0.019741824818458],
3927    [0.025468119987662, 0.019825275053848],
3928    [0.025403105671008, 0.019908512976470],
3929    [0.025337819307501, 0.019991537694913],
3930    [0.025272261596305, 0.020074348320047],
3931    [0.025206433239491, 0.020156943965039],
3932    [0.025140334942028, 0.020239323745355],
3933    [0.025073967411776, 0.020321486778774],
3934    [0.025007331359476, 0.020403432185395],
3935    [0.024940427498748, 0.020485159087650],
3936    [0.024873256546079, 0.020566666610309],
3937    [0.024805819220816, 0.020647953880491],
3938    [0.024738116245157, 0.020729020027676],
3939    [0.024670148344147, 0.020809864183709],
3940    [0.024601916245669, 0.020890485482816],
3941    [0.024533420680433, 0.020970883061607],
3942    [0.024464662381971, 0.021051056059087],
3943    [0.024395642086630, 0.021131003616670],
3944    [0.024326360533561, 0.021210724878181],
3945    [0.024256818464715, 0.021290218989868],
3946    [0.024187016624830, 0.021369485100415],
3947    [0.024116955761430, 0.021448522360944],
3948    [0.024046636624808, 0.021527329925030],
3949    [0.023976059968027, 0.021605906948708],
3950    [0.023905226546906, 0.021684252590480],
3951    [0.023834137120014, 0.021762366011328],
3952    [0.023762792448662, 0.021840246374720],
3953    [0.023691193296893, 0.021917892846620],
3954    [0.023619340431478, 0.021995304595495],
3955    [0.023547234621902, 0.022072480792330],
3956    [0.023474876640361, 0.022149420610628],
3957    [0.023402267261751, 0.022226123226426],
3958    [0.023329407263659, 0.022302587818300],
3959    [0.023256297426359, 0.022378813567377],
3960    [0.023182938532797, 0.022454799657339],
3961    [0.023109331368588, 0.022530545274437],
3962    [0.023035476722006, 0.022606049607496],
3963    [0.022961375383975, 0.022681311847926],
3964    [0.022887028148061, 0.022756331189727],
3965    [0.022812435810462, 0.022831106829504],
3966    [0.022737599170003, 0.022905637966469],
3967    [0.022662519028125, 0.022979923802453],
3968    [0.022587196188874, 0.023053963541915],
3969    [0.022511631458899, 0.023127756391950],
3970    [0.022435825647437, 0.023201301562294],
3971    [0.022359779566306, 0.023274598265338],
3972    [0.022283494029900, 0.023347645716133],
3973    [0.022206969855176, 0.023420443132400],
3974    [0.022130207861645, 0.023492989734537],
3975    [0.022053208871367, 0.023565284745628],
3976    [0.021975973708940, 0.023637327391451],
3977    [0.021898503201489, 0.023709116900488],
3978    [0.021820798178663, 0.023780652503931],
3979    [0.021742859472618, 0.023851933435691],
3980    [0.021664687918017, 0.023922958932406],
3981    [0.021586284352013, 0.023993728233451],
3982    [0.021507649614247, 0.024064240580942],
3983    [0.021428784546832, 0.024134495219750],
3984    [0.021349689994350, 0.024204491397504],
3985    [0.021270366803840, 0.024274228364600],
3986    [0.021190815824791, 0.024343705374213],
3987    [0.021111037909128, 0.024412921682298],
3988    [0.021031033911210, 0.024481876547605],
3989    [0.020950804687815, 0.024550569231683],
3990    [0.020870351098134, 0.024618998998889],
3991    [0.020789674003759, 0.024687165116394],
3992    [0.020708774268678, 0.024755066854194],
3993    [0.020627652759262, 0.024822703485116],
3994    [0.020546310344257, 0.024890074284826],
3995    [0.020464747894775, 0.024957178531837],
3996    [0.020382966284284, 0.025024015507516],
3997    [0.020300966388600, 0.025090584496093],
3998    [0.020218749085876, 0.025156884784668],
3999    [0.020136315256592, 0.025222915663218],
4000    [0.020053665783549, 0.025288676424605],
4001    [0.019970801551857, 0.025354166364584],
4002    [0.019887723448925, 0.025419384781811],
4003    [0.019804432364452, 0.025484330977848],
4004    [0.019720929190419, 0.025549004257175],
4005    [0.019637214821078, 0.025613403927192],
4006    [0.019553290152943, 0.025677529298230],
4007    [0.019469156084779, 0.025741379683559],
4008    [0.019384813517595, 0.025804954399392],
4009    [0.019300263354632, 0.025868252764895],
4010    [0.019215506501354, 0.025931274102193],
4011    [0.019130543865439, 0.025994017736379],
4012    [0.019045376356769, 0.026056482995518],
4013    [0.018960004887419, 0.026118669210657],
4014    [0.018874430371648, 0.026180575715833],
4015    [0.018788653725892, 0.026242201848076],
4016    [0.018702675868750, 0.026303546947421],
4017    [0.018616497720974, 0.026364610356909],
4018    [0.018530120205464, 0.026425391422602],
4019    [0.018443544247254, 0.026485889493583],
4020    [0.018356770773502, 0.026546103921965],
4021    [0.018269800713483, 0.026606034062902],
4022    [0.018182634998576, 0.026665679274589],
4023    [0.018095274562256, 0.026725038918274],
4024    [0.018007720340083, 0.026784112358263],
4025    [0.017919973269692, 0.026842898961926],
4026    [0.017832034290785, 0.026901398099707],
4027    [0.017743904345116, 0.026959609145127],
4028    [0.017655584376488, 0.027017531474792],
4029    [0.017567075330734, 0.027075164468401],
4030    [0.017478378155718, 0.027132507508750],
4031    [0.017389493801313, 0.027189559981742],
4032    [0.017300423219401, 0.027246321276391],
4033    [0.017211167363854, 0.027302790784828],
4034    [0.017121727190533, 0.027358967902310],
4035    [0.017032103657269, 0.027414852027226],
4036    [0.016942297723858, 0.027470442561102],
4037    [0.016852310352050, 0.027525738908608],
4038    [0.016762142505537, 0.027580740477564],
4039    [0.016671795149944, 0.027635446678948],
4040    [0.016581269252819, 0.027689856926900],
4041    [0.016490565783622, 0.027743970638730],
4042    [0.016399685713714, 0.027797787234924],
4043    [0.016308630016347, 0.027851306139149],
4044    [0.016217399666655, 0.027904526778260],
4045    [0.016125995641641, 0.027957448582309],
4046    [0.016034418920170, 0.028010070984544],
4047    [0.015942670482954, 0.028062393421421],
4048    [0.015850751312545, 0.028114415332610],
4049    [0.015758662393324, 0.028166136160998],
4050    [0.015666404711489, 0.028217555352697],
4051    [0.015573979255046, 0.028268672357047],
4052    [0.015481387013797, 0.028319486626627],
4053    [0.015388628979331, 0.028369997617257],
4054    [0.015295706145012, 0.028420204788004],
4055    [0.015202619505968, 0.028470107601191],
4056    [0.015109370059084, 0.028519705522399],
4057    [0.015015958802984, 0.028568998020472],
4058    [0.014922386738030, 0.028617984567529],
4059    [0.014828654866302, 0.028666664638963],
4060    [0.014734764191593, 0.028715037713449],
4061    [0.014640715719398, 0.028763103272951],
4062    [0.014546510456900, 0.028810860802724],
4063    [0.014452149412962, 0.028858309791325],
4064    [0.014357633598114, 0.028905449730613],
4065    [0.014262964024545, 0.028952280115756],
4066    [0.014168141706090, 0.028998800445240],
4067    [0.014073167658220, 0.029045010220868],
4068    [0.013978042898030, 0.029090908947771],
4069    [0.013882768444231, 0.029136496134411],
4070    [0.013787345317136, 0.029181771292585],
4071    [0.013691774538648, 0.029226733937433],
4072    [0.013596057132255, 0.029271383587441],
4073    [0.013500194123014, 0.029315719764447],
4074    [0.013404186537539, 0.029359741993647],
4075    [0.013308035403995, 0.029403449803598],
4076    [0.013211741752084, 0.029446842726223],
4077    [0.013115306613032, 0.029489920296820],
4078    [0.013018731019584, 0.029532682054063],
4079    [0.012922016005985, 0.029575127540008],
4080    [0.012825162607977, 0.029617256300097],
4081    [0.012728171862781, 0.029659067883165],
4082    [0.012631044809089, 0.029700561841444],
4083    [0.012533782487056, 0.029741737730567],
4084    [0.012436385938281, 0.029782595109573],
4085    [0.012338856205805, 0.029823133540913],
4086    [0.012241194334091, 0.029863352590452],
4087    [0.012143401369021, 0.029903251827477],
4088    [0.012045478357878, 0.029942830824699],
4089    [0.011947426349339, 0.029982089158259],
4090    [0.011849246393462, 0.030021026407731],
4091    [0.011750939541676, 0.030059642156129],
4092    [0.011652506846768, 0.030097935989909],
4093    [0.011553949362874, 0.030135907498976],
4094    [0.011455268145464, 0.030173556276684],
4095    [0.011356464251335, 0.030210881919845],
4096    [0.011257538738598, 0.030247884028732],
4097    [0.011158492666665, 0.030284562207083],
4098    [0.011059327096240, 0.030320916062102],
4099    [0.010960043089307, 0.030356945204470],
4100    [0.010860641709118, 0.030392649248343],
4101    [0.010761124020182, 0.030428027811361],
4102    [0.010661491088253, 0.030463080514646],
4103    [0.010561743980319, 0.030497806982812],
4104    [0.010461883764593, 0.030532206843968],
4105    [0.010361911510496, 0.030566279729717],
4106    [0.010261828288652, 0.030600025275167],
4107    [0.010161635170872, 0.030633443118931],
4108    [0.010061333230142, 0.030666532903129],
4109    [0.009960923540617, 0.030699294273397],
4110    [0.009860407177603, 0.030731726878888],
4111    [0.009759785217550, 0.030763830372273],
4112    [0.009659058738038, 0.030795604409750],
4113    [0.009558228817767, 0.030827048651045],
4114    [0.009457296536545, 0.030858162759415],
4115    [0.009356262975275, 0.030888946401653],
4116    [0.009255129215945, 0.030919399248091],
4117    [0.009153896341616, 0.030949520972603],
4118    [0.009052565436412, 0.030979311252611],
4119    [0.008951137585505, 0.031008769769084],
4120    [0.008849613875105, 0.031037896206544],
4121    [0.008747995392451, 0.031066690253072],
4122    [0.008646283225794, 0.031095151600306],
4123    [0.008544478464390, 0.031123279943448],
4124    [0.008442582198486, 0.031151074981266],
4125    [0.008340595519310, 0.031178536416098],
4126    [0.008238519519057, 0.031205663953853],
4127    [0.008136355290878, 0.031232457304017],
4128    [0.008034103928871, 0.031258916179656],
4129    [0.007931766528065, 0.031285040297416],
4130    [0.007829344184412, 0.031310829377528],
4131    [0.007726837994772, 0.031336283143813],
4132    [0.007624249056906, 0.031361401323680],
4133    [0.007521578469457, 0.031386183648135],
4134    [0.007418827331946, 0.031410629851778],
4135    [0.007315996744755, 0.031434739672811],
4136    [0.007213087809115, 0.031458512853036],
4137    [0.007110101627101, 0.031481949137863],
4138    [0.007007039301610, 0.031505048276306],
4139    [0.006903901936357, 0.031527810020993],
4140    [0.006800690635862, 0.031550234128164],
4141    [0.006697406505433, 0.031572320357675],
4142    [0.006594050651161, 0.031594068473000],
4143    [0.006490624179905, 0.031615478241233],
4144    [0.006387128199278, 0.031636549433095],
4145    [0.006283563817639, 0.031657281822929],
4146    [0.006179932144080, 0.031677675188707],
4147    [0.006076234288412, 0.031697729312034],
4148    [0.005972471361157, 0.031717443978146],
4149    [0.005868644473532, 0.031736818975914],
4150    [0.005764754737440, 0.031755854097848],
4151    [0.005660803265456, 0.031774549140098],
4152    [0.005556791170816, 0.031792903902453],
4153    [0.005452719567407, 0.031810918188350],
4154    [0.005348589569753, 0.031828591804869],
4155    [0.005244402293001, 0.031845924562742],
4156    [0.005140158852914, 0.031862916276347],
4157    [0.005035860365855, 0.031879566763717],
4158    [0.004931507948778, 0.031895875846539],
4159    [0.004827102719212, 0.031911843350155],
4160    [0.004722645795254, 0.031927469103567],
4161    [0.004618138295554, 0.031942752939435],
4162    [0.004513581339303, 0.031957694694082],
4163    [0.004408976046222, 0.031972294207493],
4164    [0.004304323536549, 0.031986551323320],
4165    [0.004199624931030, 0.032000465888879],
4166    [0.004094881350902, 0.032014037755158],
4167    [0.003990093917884, 0.032027266776813],
4168    [0.003885263754166, 0.032040152812170],
4169    [0.003780391982394, 0.032052695723232],
4170    [0.003675479725661, 0.032064895375674],
4171    [0.003570528107494, 0.032076751638847],
4172    [0.003465538251839, 0.032088264385780],
4173    [0.003360511283053, 0.032099433493181],
4174    [0.003255448325892, 0.032110258841438],
4175    [0.003150350505494, 0.032120740314619],
4176    [0.003045218947373, 0.032130877800478],
4177    [0.002940054777404, 0.032140671190449],
4178    [0.002834859121810, 0.032150120379653],
4179    [0.002729633107153, 0.032159225266897],
4180    [0.002624377860318, 0.032167985754674],
4181    [0.002519094508504, 0.032176401749168],
4182    [0.002413784179212, 0.032184473160250],
4183    [0.002308448000231, 0.032192199901481],
4184    [0.002203087099626, 0.032199581890114],
4185    [0.002097702605728, 0.032206619047093],
4186    [0.001992295647121, 0.032213311297057],
4187    [0.001886867352628, 0.032219658568338],
4188    [0.001781418851302, 0.032225660792960],
4189    [0.001675951272410, 0.032231317906644],
4190    [0.001570465745428, 0.032236629848809],
4191    [0.001464963400018, 0.032241596562566],
4192    [0.001359445366028, 0.032246217994727],
4193    [0.001253912773470, 0.032250494095799],
4194    [0.001148366752513, 0.032254424819990],
4195    [0.001042808433471, 0.032258010125204],
4196    [0.000937238946789, 0.032261249973045],
4197    [0.000831659423030, 0.032264144328817],
4198    [0.000726070992868, 0.032266693161525],
4199    [0.000620474787068, 0.032268896443871],
4200    [0.000514871936481, 0.032270754152261],
4201    [0.000409263572030, 0.032272266266801],
4202    [0.000303650824695, 0.032273432771295],
4203    [0.000198034825504, 0.032274253653254],
4204    [0.000092416705518, 0.032274728903884]
4205];
4206
4207exports.MDCT_TABLE_240 = [
4208    [0.091286604111815, 0.000298735779793],
4209    [0.091247502481454, 0.002688238127538],
4210    [0.091145864370807, 0.005075898091152],
4211    [0.090981759437558, 0.007460079287760],
4212    [0.090755300151030, 0.009839147718664],
4213    [0.090466641715108, 0.012211472889198],
4214    [0.090115981961863, 0.014575428926191],
4215    [0.089703561215976, 0.016929395692256],
4216    [0.089229662130024, 0.019271759896156],
4217    [0.088694609490769, 0.021600916198470],
4218    [0.088098769996564, 0.023915268311810],
4219    [0.087442552006035, 0.026213230094844],
4220    [0.086726405258214, 0.028493226639351],
4221    [0.085950820564309, 0.030753695349588],
4222    [0.085116329471329, 0.032993087013213],
4223    [0.084223503897785, 0.035209866863042],
4224    [0.083272955741727, 0.037402515628894],
4225    [0.082265336461381, 0.039569530578832],
4226    [0.081201336628670, 0.041709426549053],
4227    [0.080081685455930, 0.043820736961749],
4228    [0.078907150296148, 0.045902014830227],
4229    [0.077678536117054, 0.047951833750597],
4230    [0.076396684949434, 0.049968788879362],
4231    [0.075062475310050, 0.051951497896226],
4232    [0.073676821599542, 0.053898601951466],
4233    [0.072240673475749, 0.055808766597225],
4234    [0.070755015202858, 0.057680682702068],
4235    [0.069220864976840, 0.059513067348201],
4236    [0.067639274227625, 0.061304664710718],
4237    [0.066011326898512, 0.063054246918278],
4238    [0.064338138703282, 0.064760614894630],
4239    [0.062620856361546, 0.066422599180399],
4240    [0.060860656812842, 0.068039060734572],
4241    [0.059058746410016, 0.069608891715145],
4242    [0.057216360092450, 0.071131016238378],
4243    [0.055334760539699, 0.072604391116154],
4244    [0.053415237306106, 0.074028006570930],
4245    [0.051459105937014, 0.075400886927784],
4246    [0.049467707067153, 0.076722091283096],
4247    [0.047442405501835, 0.077990714149396],
4248    [0.045384589281588, 0.079205886075941],
4249    [0.043295668730857, 0.080366774244592],
4250    [0.041177075491445, 0.081472583040586],
4251    [0.039030261541332, 0.082522554597810],
4252    [0.036856698199564, 0.083515969318206],
4253    [0.034657875117883, 0.084452146364948],
4254    [0.032435299259796, 0.085330444129049],
4255    [0.030190493867775, 0.086150260669096],
4256    [0.027924997419306, 0.086911034123781],
4257    [0.025640362572491, 0.087612243096981],
4258    [0.023338155101933, 0.088253407015092],
4259    [0.021019952825636, 0.088834086456390],
4260    [0.018687344523641, 0.089353883452193],
4261    [0.016341928849164, 0.089812441759604],
4262    [0.013985313232951, 0.090209447105664],
4263    [0.011619112781631, 0.090544627402740],
4264    [0.009244949170797, 0.090817752935000],
4265    [0.006864449533597, 0.091028636515846],
4266    [0.004479245345574, 0.091177133616206],
4267    [0.002090971306534, 0.091263142463585]
4268];
4269},{}],11:[function(require,module,exports){
4270/*
4271 * AAC.js - Advanced Audio Coding decoder in JavaScript
4272 * Created by Devon Govett
4273 * Copyright (c) 2012, Official.fm Labs
4274 *
4275 * AAC.js is free software; you can redistribute it and/or modify it
4276 * under the terms of the GNU Lesser General Public License as
4277 * published by the Free Software Foundation; either version 3 of the
4278 * License, or (at your option) any later version.
4279 *
4280 * AAC.js is distributed in the hope that it will be useful, but WITHOUT
4281 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
4282 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General
4283 * Public License for more details.
4284 *
4285 * You should have received a copy of the GNU Lesser General Public
4286 * License along with this library.
4287 * If not, see <http://www.gnu.org/licenses/>.
4288 */
4289
4290/********************************************************************************
4291 * Sample offset into the window indicating the beginning of a scalefactor
4292 * window band
4293 *
4294 * scalefactor window band - term for scalefactor bands within a window,
4295 * given in Table 4.110 to Table 4.128.
4296 *
4297 * scalefactor band - a set of spectral coefficients which are scaled by one
4298 * scalefactor. In case of EIGHT_SHORT_SEQUENCE and grouping a scalefactor band
4299 * may contain several scalefactor window bands of corresponding frequency. For
4300 * all other window_sequences scalefactor bands and scalefactor window bands are
4301 * identical.
4302 *******************************************************************************/
4303const SWB_OFFSET_1024_96 = new Uint16Array([
4304      0,   4,   8,  12,  16,  20,  24,  28,
4305     32,  36,  40,  44,  48,  52,  56,  64,
4306     72,  80,  88,  96, 108, 120, 132, 144,
4307    156, 172, 188, 212, 240, 276, 320, 384,
4308    448, 512, 576, 640, 704, 768, 832, 896,
4309    960, 1024
4310]);
4311
4312const SWB_OFFSET_128_96 = new Uint16Array([
4313    0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 92, 128
4314]);
4315
4316const SWB_OFFSET_1024_64 = new Uint16Array([
4317      0,   4,   8,  12,  16,  20,  24,  28,
4318     32,  36,  40,  44,  48,  52,  56,  64,
4319     72,  80,  88, 100, 112, 124, 140, 156,
4320    172, 192, 216, 240, 268, 304, 344, 384,
4321    424, 464, 504, 544, 584, 624, 664, 704,
4322    744, 784, 824, 864, 904, 944, 984, 1024
4323]);
4324
4325const SWB_OFFSET_128_64 = new Uint16Array([
4326    0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 92, 128
4327]);
4328
4329const SWB_OFFSET_1024_48 = new Uint16Array([
4330      0,   4,   8,  12,  16,  20,  24,  28,
4331     32,  36,  40,  48,  56,  64,  72,  80,
4332     88,  96, 108, 120, 132, 144, 160, 176,
4333    196, 216, 240, 264, 292, 320, 352, 384,
4334    416, 448, 480, 512, 544, 576, 608, 640,
4335    672, 704, 736, 768, 800, 832, 864, 896,
4336    928, 1024
4337]);
4338
4339const SWB_OFFSET_128_48 = new Uint16Array([
4340     0,   4,   8,  12,  16,  20,  28,  36,
4341    44,  56,  68,  80,  96, 112, 128
4342]);
4343
4344const SWB_OFFSET_1024_32 = new Uint16Array([
4345      0,   4,   8,  12,  16,  20,  24,  28,
4346     32,  36,  40,  48,  56,  64,  72,  80,
4347     88,  96, 108, 120, 132, 144, 160, 176,
4348    196, 216, 240, 264, 292, 320, 352, 384,
4349    416, 448, 480, 512, 544, 576, 608, 640,
4350    672, 704, 736, 768, 800, 832, 864, 896,
4351    928, 960, 992, 1024
4352]);
4353
4354const SWB_OFFSET_1024_24 = new Uint16Array([
4355      0,   4,   8,  12,  16,  20,  24,  28,
4356     32,  36,  40,  44,  52,  60,  68,  76,
4357     84,  92, 100, 108, 116, 124, 136, 148,
4358    160, 172, 188, 204, 220, 240, 260, 284,
4359    308, 336, 364, 396, 432, 468, 508, 552,
4360    600, 652, 704, 768, 832, 896, 960, 1024
4361]);
4362
4363const SWB_OFFSET_128_24 = new Uint16Array([
4364     0,   4,   8,  12,  16,  20,  24,  28,
4365    36,  44,  52,  64,  76,  92, 108, 128
4366]);
4367
4368const SWB_OFFSET_1024_16 = new Uint16Array([
4369      0,   8,  16,  24,  32,  40,  48,  56,
4370     64,  72,  80,  88, 100, 112, 124, 136,
4371    148, 160, 172, 184, 196, 212, 228, 244,
4372    260, 280, 300, 320, 344, 368, 396, 424,
4373    456, 492, 532, 572, 616, 664, 716, 772,
4374    832, 896, 960, 1024
4375]);
4376
4377const SWB_OFFSET_128_16 = new Uint16Array([
4378     0,   4,   8,  12,  16,  20,  24,  28,
4379    32,  40,  48,  60,  72,  88, 108, 128
4380]);
4381
4382const SWB_OFFSET_1024_8 = new Uint16Array([
4383      0,  12,  24,  36,  48,  60,  72,  84,
4384     96, 108, 120, 132, 144, 156, 172, 188,
4385    204, 220, 236, 252, 268, 288, 308, 328,
4386    348, 372, 396, 420, 448, 476, 508, 544,
4387    580, 620, 664, 712, 764, 820, 880, 944,
4388    1024
4389]);
4390
4391const SWB_OFFSET_128_8 = new Uint16Array([
4392     0,   4,   8,  12,  16,  20,  24,  28,
4393    36,  44,  52,  60,  72,  88, 108, 128
4394]);
4395
4396exports.SWB_OFFSET_1024 = [
4397    SWB_OFFSET_1024_96,
4398    SWB_OFFSET_1024_96,
4399    SWB_OFFSET_1024_64,
4400    SWB_OFFSET_1024_48,
4401    SWB_OFFSET_1024_48,
4402    SWB_OFFSET_1024_32,
4403    SWB_OFFSET_1024_24,
4404    SWB_OFFSET_1024_24,
4405    SWB_OFFSET_1024_16,
4406    SWB_OFFSET_1024_16,
4407    SWB_OFFSET_1024_16,
4408    SWB_OFFSET_1024_8
4409];
4410
4411exports.SWB_OFFSET_128 = [
4412    SWB_OFFSET_128_96,
4413    SWB_OFFSET_128_96,
4414    SWB_OFFSET_128_64,
4415    SWB_OFFSET_128_48,
4416    SWB_OFFSET_128_48,
4417    SWB_OFFSET_128_48,
4418    SWB_OFFSET_128_24,
4419    SWB_OFFSET_128_24,
4420    SWB_OFFSET_128_16,
4421    SWB_OFFSET_128_16,
4422    SWB_OFFSET_128_16,
4423    SWB_OFFSET_128_8
4424];
4425
4426exports.SWB_SHORT_WINDOW_COUNT = new Uint8Array([
4427    12, 12, 12, 14, 14, 14, 15, 15, 15, 15, 15, 15
4428]);
4429
4430exports.SWB_LONG_WINDOW_COUNT = new Uint8Array([
4431    41, 41, 47, 49, 49, 51, 47, 47, 43, 43, 43, 40
4432]);
4433
4434/*
4435 * Scalefactor lookup table
4436 */
4437exports.SCALEFACTOR_TABLE = (function() {
4438    var table = new Float32Array(428);
4439
4440    for (var i = 0; i < 428; i++) {
4441        table[i] = Math.pow(2, (i - 200) / 4);
4442    }
4443
4444    return table;
4445})();
4446
4447
4448/**
4449 * Inverse quantization lookup table
4450 */
4451exports.IQ_TABLE = (function() {
4452    var table = new Float32Array(8191),
4453        four_thirds = 4/3;
4454
4455    for (var i = 0; i < 8191; i++) {
4456        table[i] = Math.pow(i, four_thirds);
4457    }
4458
4459    return table;
4460})();
4461
4462exports.SAMPLE_RATES = new Int32Array([
4463    96000, 88200, 64000, 48000, 44100, 32000,
4464    24000, 22050, 16000, 12000, 11025, 8000, 7350
4465]);
4466
4467},{}],12:[function(require,module,exports){
4468/*
4469 * AAC.js - Advanced Audio Coding decoder in JavaScript
4470 * Created by Devon Govett
4471 * Copyright (c) 2012, Official.fm Labs
4472 *
4473 * AAC.js is free software; you can redistribute it and/or modify it
4474 * under the terms of the GNU Lesser General Public License as
4475 * published by the Free Software Foundation; either version 3 of the
4476 * License, or (at your option) any later version.
4477 *
4478 * AAC.js is distributed in the hope that it will be useful, but WITHOUT
4479 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
4480 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General
4481 * Public License for more details.
4482 *
4483 * You should have received a copy of the GNU Lesser General Public
4484 * License along with this library.
4485 * If not, see <http://www.gnu.org/licenses/>.
4486 */
4487
4488// Temporal Noise Shaping
4489function TNS(config) {
4490    this.maxBands = TNS_MAX_BANDS_1024[config.sampleIndex]
4491    this.nFilt = new Int32Array(8);
4492    this.length = new Array(8);
4493    this.direction = new Array(8);
4494    this.order = new Array(8);
4495    this.coef = new Array(8);
4496
4497    // Probably could allocate these as needed
4498    for (var w = 0; w < 8; w++) {
4499        this.length[w] = new Int32Array(4);
4500        this.direction[w] = new Array(4);
4501        this.order[w] = new Int32Array(4);
4502        this.coef[w] = new Array(4);
4503
4504        for (var filt = 0; filt < 4; filt++) {
4505            this.coef[w][filt] = new Float32Array(TNS_MAX_ORDER);
4506        }
4507    }
4508
4509    this.lpc = new Float32Array(TNS_MAX_ORDER);
4510    this.tmp = new Float32Array(TNS_MAX_ORDER);
4511}
4512
4513const TNS_MAX_ORDER = 20,
4514      SHORT_BITS = [1, 4, 3],
4515      LONG_BITS = [2, 6, 5];
4516
4517const TNS_COEF_1_3 = [0.00000000, -0.43388373, 0.64278758, 0.34202015],
4518
4519      TNS_COEF_0_3 = [0.00000000, -0.43388373, -0.78183150, -0.97492790,
4520                      0.98480773, 0.86602539, 0.64278758, 0.34202015],
4521
4522      TNS_COEF_1_4 = [0.00000000, -0.20791170, -0.40673664, -0.58778524,
4523                      0.67369562, 0.52643216, 0.36124167, 0.18374951],
4524
4525      TNS_COEF_0_4 = [0.00000000, -0.20791170, -0.40673664, -0.58778524,
4526                      -0.74314481, -0.86602539, -0.95105654, -0.99452192,
4527                      0.99573416, 0.96182561, 0.89516330, 0.79801720,
4528                      0.67369562, 0.52643216, 0.36124167, 0.18374951],
4529
4530      TNS_TABLES = [TNS_COEF_0_3, TNS_COEF_0_4, TNS_COEF_1_3, TNS_COEF_1_4];
4531
4532const TNS_MAX_BANDS_1024 = [31, 31, 34, 40, 42, 51, 46, 46, 42, 42, 42, 39, 39],
4533      TNS_MAX_BANDS_128 = [9, 9, 10, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14];
4534
4535TNS.prototype.decode = function(stream, info) {
4536    var windowCount = info.windowCount,
4537        bits = info.windowSequence === 2 ? SHORT_BITS : LONG_BITS;
4538
4539    for (var w = 0; w < windowCount; w++) {
4540        if (this.nFilt[w] = stream.read(bits[0])) {
4541            var coefRes = stream.read(1),
4542                nFilt_w = this.nFilt[w],
4543                length_w = this.length[w],
4544                order_w = this.order[w],
4545                direction_w = this.direction[w],
4546                coef_w = this.coef[w];
4547
4548            for (var filt = 0; filt < nFilt_w; filt++) {
4549                length_w[filt] = stream.read(bits[1]);
4550
4551                if ((order_w[filt] = stream.read(bits[2])) > 20)
4552                    throw new Error("TNS filter out of range: " + order_w[filt]);
4553
4554                if (order_w[filt]) {
4555                    direction_w[filt] = !!stream.read(1);
4556                    var coefCompress = stream.read(1),
4557                        coefLen = coefRes + 3 - coefCompress,
4558                        tmp = 2 * coefCompress + coefRes,
4559                        table = TNS_TABLES[tmp],
4560                        order_w_filt = order_w[filt],
4561                        coef_w_filt = coef_w[filt];
4562
4563                    for (var i = 0; i < order_w_filt; i++)
4564                        coef_w_filt[i] = table[stream.read(coefLen)];
4565                }
4566
4567            }
4568        }
4569    }
4570};
4571
4572TNS.prototype.process = function(ics, data, decode) {
4573    var mmm = Math.min(this.maxBands, ics.maxSFB),
4574        lpc = this.lpc,
4575        tmp = this.tmp,
4576        info = ics.info,
4577        windowCount = info.windowCount;
4578
4579    for (var w = 0; w < windowCount; w++) {
4580        var bottom = info.swbCount,
4581            nFilt_w = this.nFilt[w],
4582            length_w = this.length[w],
4583            order_w = this.order[w],
4584            coef_w = this.coef[w],
4585            direction_w = this.direction[w];
4586
4587        for (var filt = 0; filt < nFilt_w; filt++) {
4588            var top = bottom,
4589                bottom = Math.max(0, tmp - length_w[filt]),
4590                order = order_w[filt];
4591
4592            if (order === 0) continue;
4593
4594            // calculate lpc coefficients
4595            var autoc = coef_w[filt];
4596            for (var i = 0; i < order; i++) {
4597                var r = -autoc[i];
4598                lpc[i] = r;
4599
4600                for (var j = 0, len = (i + 1) >> 1; j < len; j++) {
4601                    var f = lpc[j],
4602                        b = lpc[i - 1 - j];
4603
4604                    lpc[j] = f + r * b;
4605                    lpc[i - 1 - j] = b + r * f;
4606                }
4607            }
4608
4609            var start = info.swbOffsets[Math.min(bottom, mmm)],
4610                end = info.swbOffsets[Math.min(top, mmm)],
4611                size,
4612                inc = 1;
4613
4614            if ((size = end - start) <= 0) continue;
4615
4616            if (direction_w[filt]) {
4617                inc = -1;
4618                start = end - 1;
4619            }
4620
4621            start += w * 128;
4622
4623            if (decode) {
4624                // ar filter
4625                for (var m = 0; m < size; m++, start += inc) {
4626                    for (var i = 1; i <= Math.min(m, order); i++) {
4627                        data[start] -= data[start - i * inc] * lpc[i - 1];
4628                    }
4629                }
4630            } else {
4631                // ma filter
4632                for (var m = 0; m < size; m++, start += inc) {
4633                    tmp[0] = data[start];
4634
4635                    for (var i = 1; i <= Math.min(m, order); i++)
4636                        data[start] += tmp[i] * lpc[i - 1];
4637
4638                    for (var i = order; i > 0; i--)
4639                        tmp[i] = tmp[i - 1];
4640                }
4641            }
4642        }
4643    }
4644};
4645
4646module.exports = TNS;
4647
4648},{}]},{},[4])
4649
4650
4651//# sourceMappingURL=aac.js.map