@loaders.gl/compression 3.3.0-alpha.5 → 3.3.0-alpha.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/es5/brotli/decode.js +3 -423
  2. package/dist/es5/brotli/decode.js.map +1 -1
  3. package/dist/es5/bundle.js +0 -1
  4. package/dist/es5/bundle.js.map +1 -1
  5. package/dist/es5/compression-worker.js +3 -6
  6. package/dist/es5/compression-worker.js.map +1 -1
  7. package/dist/es5/index.js +16 -26
  8. package/dist/es5/index.js.map +1 -1
  9. package/dist/es5/lib/brotli-compression.js +2 -56
  10. package/dist/es5/lib/brotli-compression.js.map +1 -1
  11. package/dist/es5/lib/compression.js +15 -34
  12. package/dist/es5/lib/compression.js.map +1 -1
  13. package/dist/es5/lib/deflate-compression.js +40 -129
  14. package/dist/es5/lib/deflate-compression.js.map +1 -1
  15. package/dist/es5/lib/gzip-compression.js +4 -21
  16. package/dist/es5/lib/gzip-compression.js.map +1 -1
  17. package/dist/es5/lib/lz4-compression.js +10 -33
  18. package/dist/es5/lib/lz4-compression.js.map +1 -1
  19. package/dist/es5/lib/lzo-compression.js +0 -32
  20. package/dist/es5/lib/lzo-compression.js.map +1 -1
  21. package/dist/es5/lib/no-compression.js +4 -29
  22. package/dist/es5/lib/no-compression.js.map +1 -1
  23. package/dist/es5/lib/snappy-compression.js +0 -18
  24. package/dist/es5/lib/snappy-compression.js.map +1 -1
  25. package/dist/es5/lib/zstd-compression.js +0 -26
  26. package/dist/es5/lib/zstd-compression.js.map +1 -1
  27. package/dist/es5/types.js.map +1 -1
  28. package/dist/es5/workers/worker.js +6 -28
  29. package/dist/es5/workers/worker.js.map +1 -1
  30. package/dist/esm/brotli/decode.js +4 -422
  31. package/dist/esm/brotli/decode.js.map +1 -1
  32. package/dist/esm/bundle.js +1 -1
  33. package/dist/esm/bundle.js.map +1 -1
  34. package/dist/esm/compression-worker.js +3 -1
  35. package/dist/esm/compression-worker.js.map +1 -1
  36. package/dist/esm/index.js.map +1 -1
  37. package/dist/esm/lib/brotli-compression.js +6 -26
  38. package/dist/esm/lib/brotli-compression.js.map +1 -1
  39. package/dist/esm/lib/compression.js +1 -7
  40. package/dist/esm/lib/compression.js.map +1 -1
  41. package/dist/esm/lib/deflate-compression.js +7 -42
  42. package/dist/esm/lib/deflate-compression.js.map +1 -1
  43. package/dist/esm/lib/gzip-compression.js +5 -7
  44. package/dist/esm/lib/gzip-compression.js.map +1 -1
  45. package/dist/esm/lib/lz4-compression.js +3 -19
  46. package/dist/esm/lib/lz4-compression.js.map +1 -1
  47. package/dist/esm/lib/lzo-compression.js +5 -13
  48. package/dist/esm/lib/lzo-compression.js.map +1 -1
  49. package/dist/esm/lib/no-compression.js +2 -11
  50. package/dist/esm/lib/no-compression.js.map +1 -1
  51. package/dist/esm/lib/snappy-compression.js +2 -9
  52. package/dist/esm/lib/snappy-compression.js.map +1 -1
  53. package/dist/esm/lib/zstd-compression.js +3 -12
  54. package/dist/esm/lib/zstd-compression.js.map +1 -1
  55. package/dist/esm/types.js.map +1 -1
  56. package/dist/esm/workers/worker.js +8 -10
  57. package/dist/esm/workers/worker.js.map +1 -1
  58. package/package.json +4 -4
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.BrotliDecode = void 0;
7
+
7
8
  var Options;
8
9
 
9
10
  var makeBrotliDecode = function makeBrotliDecode() {
@@ -25,57 +26,45 @@ var makeBrotliDecode = function makeBrotliDecode() {
25
26
  {
26
27
  unpackCommandLookupTable(CMD_LOOKUP);
27
28
  }
28
-
29
29
  function log2floor(i) {
30
30
  var result = -1;
31
31
  var step = 16;
32
-
33
32
  while (step > 0) {
34
33
  if (i >>> step != 0) {
35
34
  result += step;
36
35
  i = i >>> step;
37
36
  }
38
-
39
37
  step = step >> 1;
40
38
  }
41
-
42
39
  return result + i;
43
40
  }
44
-
45
41
  function calculateDistanceAlphabetSize(npostfix, ndirect, maxndistbits) {
46
42
  return 16 + ndirect + 2 * (maxndistbits << npostfix);
47
43
  }
48
-
49
44
  function calculateDistanceAlphabetLimit(maxDistance, npostfix, ndirect) {
50
45
  if (maxDistance < ndirect + (2 << npostfix)) {
51
46
  throw 'maxDistance is too small';
52
47
  }
53
-
54
48
  var offset = (maxDistance - ndirect >> npostfix) + 4;
55
49
  var ndistbits = log2floor(offset) - 1;
56
50
  var group = ndistbits - 1 << 1 | offset >> ndistbits & 1;
57
51
  return (group - 1 << npostfix) + (1 << npostfix) + ndirect + 16;
58
52
  }
59
-
60
53
  function unpackCommandLookupTable(cmdLookup) {
61
54
  var insertLengthOffsets = new Int16Array(24);
62
55
  var copyLengthOffsets = new Int16Array(24);
63
56
  copyLengthOffsets[0] = 2;
64
-
65
57
  for (var i = 0; i < 23; ++i) {
66
58
  insertLengthOffsets[i + 1] = insertLengthOffsets[i] + (1 << INSERT_LENGTH_N_BITS[i]);
67
59
  copyLengthOffsets[i + 1] = copyLengthOffsets[i] + (1 << COPY_LENGTH_N_BITS[i]);
68
60
  }
69
-
70
61
  for (var cmdCode = 0; cmdCode < 704; ++cmdCode) {
71
62
  var rangeIdx = cmdCode >>> 6;
72
63
  var distanceContextOffset = -4;
73
-
74
64
  if (rangeIdx >= 2) {
75
65
  rangeIdx -= 2;
76
66
  distanceContextOffset = 0;
77
67
  }
78
-
79
68
  var insertCode = (0x29850 >>> rangeIdx * 2 & 0x3) << 3 | cmdCode >>> 3 & 7;
80
69
  var copyCode = (0x26244 >>> rangeIdx * 2 & 0x3) << 3 | cmdCode & 7;
81
70
  var copyLengthOffset = copyLengthOffsets[copyCode];
@@ -87,97 +76,74 @@ var makeBrotliDecode = function makeBrotliDecode() {
87
76
  cmdLookup[index + 3] = distanceContext;
88
77
  }
89
78
  }
90
-
91
79
  function decodeWindowBits(s) {
92
80
  var largeWindowEnabled = s.isLargeWindow;
93
81
  s.isLargeWindow = 0;
94
-
95
82
  if (s.bitOffset >= 16) {
96
83
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
97
84
  s.bitOffset -= 16;
98
85
  }
99
-
100
86
  if (readFewBits(s, 1) == 0) {
101
87
  return 16;
102
88
  }
103
-
104
89
  var n = readFewBits(s, 3);
105
-
106
90
  if (n != 0) {
107
91
  return 17 + n;
108
92
  }
109
-
110
93
  n = readFewBits(s, 3);
111
-
112
94
  if (n != 0) {
113
95
  if (n == 1) {
114
96
  if (largeWindowEnabled == 0) {
115
97
  return -1;
116
98
  }
117
-
118
99
  s.isLargeWindow = 1;
119
-
120
100
  if (readFewBits(s, 1) == 1) {
121
101
  return -1;
122
102
  }
123
-
124
103
  n = readFewBits(s, 6);
125
-
126
104
  if (n < 10 || n > 30) {
127
105
  return -1;
128
106
  }
129
-
130
107
  return n;
131
108
  } else {
132
109
  return 8 + n;
133
110
  }
134
111
  }
135
-
136
112
  return 17;
137
113
  }
138
-
139
114
  function enableEagerOutput(s) {
140
115
  if (s.runningState != 1) {
141
116
  throw 'State MUST be freshly initialized';
142
117
  }
143
-
144
118
  s.isEager = 1;
145
119
  }
146
-
147
120
  function enableLargeWindow(s) {
148
121
  if (s.runningState != 1) {
149
122
  throw 'State MUST be freshly initialized';
150
123
  }
151
-
152
124
  s.isLargeWindow = 1;
153
125
  }
154
-
155
126
  function attachDictionaryChunk(s, data) {
156
127
  if (s.runningState != 1) {
157
128
  throw 'State MUST be freshly initialized';
158
129
  }
159
-
160
130
  if (s.cdNumChunks == 0) {
161
131
  s.cdChunks = new Array(16);
162
132
  s.cdChunkOffsets = new Int32Array(16);
163
133
  s.cdBlockBits = -1;
164
134
  }
165
-
166
135
  if (s.cdNumChunks == 15) {
167
136
  throw 'Too many dictionary chunks';
168
137
  }
169
-
170
138
  s.cdChunks[s.cdNumChunks] = data;
171
139
  s.cdNumChunks++;
172
140
  s.cdTotalSize += data.length;
173
141
  s.cdChunkOffsets[s.cdNumChunks] = s.cdTotalSize;
174
142
  }
175
-
176
143
  function initState(s, input) {
177
144
  if (s.runningState != 0) {
178
145
  throw 'State MUST be uninitialized';
179
146
  }
180
-
181
147
  s.blockTrees = new Int32Array(3091);
182
148
  s.blockTrees[0] = 7;
183
149
  s.distRbIdx = 3;
@@ -188,85 +154,65 @@ var makeBrotliDecode = function makeBrotliDecode() {
188
154
  initBitReader(s);
189
155
  s.runningState = 1;
190
156
  }
191
-
192
157
  function close(s) {
193
158
  if (s.runningState == 0) {
194
159
  throw 'State MUST be initialized';
195
160
  }
196
-
197
161
  if (s.runningState == 11) {
198
162
  return;
199
163
  }
200
-
201
164
  s.runningState = 11;
202
-
203
165
  if (s.input != null) {
204
166
  closeInput(s.input);
205
167
  s.input = null;
206
168
  }
207
169
  }
208
-
209
170
  function decodeVarLenUnsignedByte(s) {
210
171
  if (s.bitOffset >= 16) {
211
172
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
212
173
  s.bitOffset -= 16;
213
174
  }
214
-
215
175
  if (readFewBits(s, 1) != 0) {
216
176
  var n = readFewBits(s, 3);
217
-
218
177
  if (n == 0) {
219
178
  return 1;
220
179
  } else {
221
180
  return readFewBits(s, n) + (1 << n);
222
181
  }
223
182
  }
224
-
225
183
  return 0;
226
184
  }
227
-
228
185
  function decodeMetaBlockLength(s) {
229
186
  if (s.bitOffset >= 16) {
230
187
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
231
188
  s.bitOffset -= 16;
232
189
  }
233
-
234
190
  s.inputEnd = readFewBits(s, 1);
235
191
  s.metaBlockLength = 0;
236
192
  s.isUncompressed = 0;
237
193
  s.isMetadata = 0;
238
-
239
194
  if (s.inputEnd != 0 && readFewBits(s, 1) != 0) {
240
195
  return;
241
196
  }
242
-
243
197
  var sizeNibbles = readFewBits(s, 2) + 4;
244
-
245
198
  if (sizeNibbles == 7) {
246
199
  s.isMetadata = 1;
247
-
248
200
  if (readFewBits(s, 1) != 0) {
249
201
  throw 'Corrupted reserved bit';
250
202
  }
251
-
252
203
  var sizeBytes = readFewBits(s, 2);
253
-
254
204
  if (sizeBytes == 0) {
255
205
  return;
256
206
  }
257
-
258
207
  for (var i = 0; i < sizeBytes; i++) {
259
208
  if (s.bitOffset >= 16) {
260
209
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
261
210
  s.bitOffset -= 16;
262
211
  }
263
-
264
212
  var bits = readFewBits(s, 8);
265
-
266
213
  if (bits == 0 && i + 1 == sizeBytes && sizeBytes > 1) {
267
214
  throw 'Exuberant nibble';
268
215
  }
269
-
270
216
  s.metaBlockLength |= bits << i * 8;
271
217
  }
272
218
  } else {
@@ -275,87 +221,67 @@ var makeBrotliDecode = function makeBrotliDecode() {
275
221
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
276
222
  s.bitOffset -= 16;
277
223
  }
278
-
279
224
  var _bits = readFewBits(s, 4);
280
-
281
225
  if (_bits == 0 && _i + 1 == sizeNibbles && sizeNibbles > 4) {
282
226
  throw 'Exuberant nibble';
283
227
  }
284
-
285
228
  s.metaBlockLength |= _bits << _i * 4;
286
229
  }
287
230
  }
288
-
289
231
  s.metaBlockLength++;
290
-
291
232
  if (s.inputEnd == 0) {
292
233
  s.isUncompressed = readFewBits(s, 1);
293
234
  }
294
235
  }
295
-
296
236
  function readSymbol(tableGroup, tableIdx, s) {
297
237
  var offset = tableGroup[tableIdx];
298
238
  var val = s.accumulator32 >>> s.bitOffset;
299
239
  offset += val & 0xff;
300
240
  var bits = tableGroup[offset] >> 16;
301
241
  var sym = tableGroup[offset] & 0xffff;
302
-
303
242
  if (bits <= 8) {
304
243
  s.bitOffset += bits;
305
244
  return sym;
306
245
  }
307
-
308
246
  offset += sym;
309
247
  var mask = (1 << bits) - 1;
310
248
  offset += (val & mask) >>> 8;
311
249
  s.bitOffset += (tableGroup[offset] >> 16) + 8;
312
250
  return tableGroup[offset] & 0xffff;
313
251
  }
314
-
315
252
  function readBlockLength(tableGroup, tableIdx, s) {
316
253
  if (s.bitOffset >= 16) {
317
254
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
318
255
  s.bitOffset -= 16;
319
256
  }
320
-
321
257
  var code = readSymbol(tableGroup, tableIdx, s);
322
258
  var n = BLOCK_LENGTH_N_BITS[code];
323
-
324
259
  if (s.bitOffset >= 16) {
325
260
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
326
261
  s.bitOffset -= 16;
327
262
  }
328
-
329
263
  return BLOCK_LENGTH_OFFSET[code] + (n <= 16 ? readFewBits(s, n) : readManyBits(s, n));
330
264
  }
331
-
332
265
  function moveToFront(v, index) {
333
266
  var value = v[index];
334
-
335
267
  for (; index > 0; index--) {
336
268
  v[index] = v[index - 1];
337
269
  }
338
-
339
270
  v[0] = value;
340
271
  }
341
-
342
272
  function inverseMoveToFrontTransform(v, vLen) {
343
273
  var mtf = new Int32Array(256);
344
-
345
274
  for (var i = 0; i < 256; i++) {
346
275
  mtf[i] = i;
347
276
  }
348
-
349
277
  for (var _i2 = 0; _i2 < vLen; _i2++) {
350
278
  var index = v[_i2] & 0xff;
351
279
  v[_i2] = mtf[index];
352
-
353
280
  if (index != 0) {
354
281
  moveToFront(mtf, index);
355
282
  }
356
283
  }
357
284
  }
358
-
359
285
  function readHuffmanCodeLengths(codeLengthCodeLengths, numSymbols, codeLengths, s) {
360
286
  var symbol = 0;
361
287
  var prevCodeLen = 8;
@@ -365,25 +291,20 @@ var makeBrotliDecode = function makeBrotliDecode() {
365
291
  var table = new Int32Array(32 + 1);
366
292
  var tableIdx = table.length - 1;
367
293
  buildHuffmanTable(table, tableIdx, 5, codeLengthCodeLengths, 18);
368
-
369
294
  while (symbol < numSymbols && space > 0) {
370
295
  if (s.halfOffset > 2030) {
371
296
  doReadMoreInput(s);
372
297
  }
373
-
374
298
  if (s.bitOffset >= 16) {
375
299
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
376
300
  s.bitOffset -= 16;
377
301
  }
378
-
379
302
  var p = s.accumulator32 >>> s.bitOffset & 31;
380
303
  s.bitOffset += table[p] >> 16;
381
304
  var codeLen = table[p] & 0xffff;
382
-
383
305
  if (codeLen < 16) {
384
306
  repeat = 0;
385
307
  codeLengths[symbol++] = codeLen;
386
-
387
308
  if (codeLen != 0) {
388
309
  prevCodeLen = codeLen;
389
310
  space -= 32768 >> codeLen;
@@ -391,52 +312,40 @@ var makeBrotliDecode = function makeBrotliDecode() {
391
312
  } else {
392
313
  var extraBits = codeLen - 14;
393
314
  var newLen = 0;
394
-
395
315
  if (codeLen == 16) {
396
316
  newLen = prevCodeLen;
397
317
  }
398
-
399
318
  if (repeatCodeLen != newLen) {
400
319
  repeat = 0;
401
320
  repeatCodeLen = newLen;
402
321
  }
403
-
404
322
  var oldRepeat = repeat;
405
-
406
323
  if (repeat > 0) {
407
324
  repeat -= 2;
408
325
  repeat <<= extraBits;
409
326
  }
410
-
411
327
  if (s.bitOffset >= 16) {
412
328
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
413
329
  s.bitOffset -= 16;
414
330
  }
415
-
416
331
  repeat += readFewBits(s, extraBits) + 3;
417
332
  var repeatDelta = repeat - oldRepeat;
418
-
419
333
  if (symbol + repeatDelta > numSymbols) {
420
334
  throw 'symbol + repeatDelta > numSymbols';
421
335
  }
422
-
423
336
  for (var i = 0; i < repeatDelta; i++) {
424
337
  codeLengths[symbol++] = repeatCodeLen;
425
338
  }
426
-
427
339
  if (repeatCodeLen != 0) {
428
340
  space -= repeatDelta << 15 - repeatCodeLen;
429
341
  }
430
342
  }
431
343
  }
432
-
433
344
  if (space != 0) {
434
345
  throw 'Unused space';
435
346
  }
436
-
437
347
  codeLengths.fill(0, symbol, numSymbols);
438
348
  }
439
-
440
349
  function checkDupes(symbols, length) {
441
350
  for (var i = 0; i < length - 1; ++i) {
442
351
  for (var j = i + 1; j < length; ++j) {
@@ -446,166 +355,130 @@ var makeBrotliDecode = function makeBrotliDecode() {
446
355
  }
447
356
  }
448
357
  }
449
-
450
358
  function readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) {
451
359
  var codeLengths = new Int32Array(alphabetSizeLimit);
452
360
  var symbols = new Int32Array(4);
453
361
  var maxBits = 1 + log2floor(alphabetSizeMax - 1);
454
362
  var numSymbols = readFewBits(s, 2) + 1;
455
-
456
363
  for (var i = 0; i < numSymbols; i++) {
457
364
  if (s.bitOffset >= 16) {
458
365
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
459
366
  s.bitOffset -= 16;
460
367
  }
461
-
462
368
  var symbol = readFewBits(s, maxBits);
463
-
464
369
  if (symbol >= alphabetSizeLimit) {
465
370
  throw "Can't readHuffmanCode";
466
371
  }
467
-
468
372
  symbols[i] = symbol;
469
373
  }
470
-
471
374
  checkDupes(symbols, numSymbols);
472
375
  var histogramId = numSymbols;
473
-
474
376
  if (numSymbols == 4) {
475
377
  histogramId += readFewBits(s, 1);
476
378
  }
477
-
478
379
  switch (histogramId) {
479
380
  case 1:
480
381
  codeLengths[symbols[0]] = 1;
481
382
  break;
482
-
483
383
  case 2:
484
384
  codeLengths[symbols[0]] = 1;
485
385
  codeLengths[symbols[1]] = 1;
486
386
  break;
487
-
488
387
  case 3:
489
388
  codeLengths[symbols[0]] = 1;
490
389
  codeLengths[symbols[1]] = 2;
491
390
  codeLengths[symbols[2]] = 2;
492
391
  break;
493
-
494
392
  case 4:
495
393
  codeLengths[symbols[0]] = 2;
496
394
  codeLengths[symbols[1]] = 2;
497
395
  codeLengths[symbols[2]] = 2;
498
396
  codeLengths[symbols[3]] = 2;
499
397
  break;
500
-
501
398
  case 5:
502
399
  codeLengths[symbols[0]] = 1;
503
400
  codeLengths[symbols[1]] = 2;
504
401
  codeLengths[symbols[2]] = 3;
505
402
  codeLengths[symbols[3]] = 3;
506
403
  break;
507
-
508
404
  default:
509
405
  break;
510
406
  }
511
-
512
407
  return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit);
513
408
  }
514
-
515
409
  function readComplexHuffmanCode(alphabetSizeLimit, skip, tableGroup, tableIdx, s) {
516
410
  var codeLengths = new Int32Array(alphabetSizeLimit);
517
411
  var codeLengthCodeLengths = new Int32Array(18);
518
412
  var space = 32;
519
413
  var numCodes = 0;
520
-
521
414
  for (var i = skip; i < 18 && space > 0; i++) {
522
415
  var codeLenIdx = CODE_LENGTH_CODE_ORDER[i];
523
-
524
416
  if (s.bitOffset >= 16) {
525
417
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
526
418
  s.bitOffset -= 16;
527
419
  }
528
-
529
420
  var p = s.accumulator32 >>> s.bitOffset & 15;
530
421
  s.bitOffset += FIXED_TABLE[p] >> 16;
531
422
  var v = FIXED_TABLE[p] & 0xffff;
532
423
  codeLengthCodeLengths[codeLenIdx] = v;
533
-
534
424
  if (v != 0) {
535
425
  space -= 32 >> v;
536
426
  numCodes++;
537
427
  }
538
428
  }
539
-
540
429
  if (space != 0 && numCodes != 1) {
541
430
  throw 'Corrupted Huffman code histogram';
542
431
  }
543
-
544
432
  readHuffmanCodeLengths(codeLengthCodeLengths, alphabetSizeLimit, codeLengths, s);
545
433
  return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit);
546
434
  }
547
-
548
435
  function readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) {
549
436
  if (s.halfOffset > 2030) {
550
437
  doReadMoreInput(s);
551
438
  }
552
-
553
439
  if (s.bitOffset >= 16) {
554
440
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
555
441
  s.bitOffset -= 16;
556
442
  }
557
-
558
443
  var simpleCodeOrSkip = readFewBits(s, 2);
559
-
560
444
  if (simpleCodeOrSkip == 1) {
561
445
  return readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s);
562
446
  } else {
563
447
  return readComplexHuffmanCode(alphabetSizeLimit, simpleCodeOrSkip, tableGroup, tableIdx, s);
564
448
  }
565
449
  }
566
-
567
450
  function decodeContextMap(contextMapSize, contextMap, s) {
568
451
  if (s.halfOffset > 2030) {
569
452
  doReadMoreInput(s);
570
453
  }
571
-
572
454
  var numTrees = decodeVarLenUnsignedByte(s) + 1;
573
-
574
455
  if (numTrees == 1) {
575
456
  contextMap.fill(0, 0, contextMapSize);
576
457
  return numTrees;
577
458
  }
578
-
579
459
  if (s.bitOffset >= 16) {
580
460
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
581
461
  s.bitOffset -= 16;
582
462
  }
583
-
584
463
  var useRleForZeros = readFewBits(s, 1);
585
464
  var maxRunLengthPrefix = 0;
586
-
587
465
  if (useRleForZeros != 0) {
588
466
  maxRunLengthPrefix = readFewBits(s, 4) + 1;
589
467
  }
590
-
591
468
  var alphabetSize = numTrees + maxRunLengthPrefix;
592
469
  var tableSize = MAX_HUFFMAN_TABLE_SIZE[alphabetSize + 31 >> 5];
593
470
  var table = new Int32Array(tableSize + 1);
594
471
  var tableIdx = table.length - 1;
595
472
  readHuffmanCode(alphabetSize, alphabetSize, table, tableIdx, s);
596
-
597
473
  for (var i = 0; i < contextMapSize;) {
598
474
  if (s.halfOffset > 2030) {
599
475
  doReadMoreInput(s);
600
476
  }
601
-
602
477
  if (s.bitOffset >= 16) {
603
478
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
604
479
  s.bitOffset -= 16;
605
480
  }
606
-
607
481
  var code = readSymbol(table, tableIdx, s);
608
-
609
482
  if (code == 0) {
610
483
  contextMap[i] = 0;
611
484
  i++;
@@ -614,14 +487,11 @@ var makeBrotliDecode = function makeBrotliDecode() {
614
487
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
615
488
  s.bitOffset -= 16;
616
489
  }
617
-
618
490
  var reps = (1 << code) + readFewBits(s, code);
619
-
620
491
  while (reps != 0) {
621
492
  if (i >= contextMapSize) {
622
493
  throw 'Corrupted context map';
623
494
  }
624
-
625
495
  contextMap[i] = 0;
626
496
  i++;
627
497
  reps--;
@@ -631,31 +501,24 @@ var makeBrotliDecode = function makeBrotliDecode() {
631
501
  i++;
632
502
  }
633
503
  }
634
-
635
504
  if (s.bitOffset >= 16) {
636
505
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
637
506
  s.bitOffset -= 16;
638
507
  }
639
-
640
508
  if (readFewBits(s, 1) == 1) {
641
509
  inverseMoveToFrontTransform(contextMap, contextMapSize);
642
510
  }
643
-
644
511
  return numTrees;
645
512
  }
646
-
647
513
  function decodeBlockTypeAndLength(s, treeType, numBlockTypes) {
648
514
  var ringBuffers = s.rings;
649
515
  var offset = 4 + treeType * 2;
650
-
651
516
  if (s.bitOffset >= 16) {
652
517
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
653
518
  s.bitOffset -= 16;
654
519
  }
655
-
656
520
  var blockType = readSymbol(s.blockTrees, 2 * treeType, s);
657
521
  var result = readBlockLength(s.blockTrees, 2 * treeType + 1, s);
658
-
659
522
  if (blockType == 1) {
660
523
  blockType = ringBuffers[offset + 1] + 1;
661
524
  } else if (blockType == 0) {
@@ -663,16 +526,13 @@ var makeBrotliDecode = function makeBrotliDecode() {
663
526
  } else {
664
527
  blockType -= 2;
665
528
  }
666
-
667
529
  if (blockType >= numBlockTypes) {
668
530
  blockType -= numBlockTypes;
669
531
  }
670
-
671
532
  ringBuffers[offset] = ringBuffers[offset + 1];
672
533
  ringBuffers[offset + 1] = blockType;
673
534
  return result;
674
535
  }
675
-
676
536
  function decodeLiteralBlockSwitch(s) {
677
537
  s.literalBlockLength = decodeBlockTypeAndLength(s, 0, s.numLiteralBlockTypes);
678
538
  var literalBlockType = s.rings[5];
@@ -682,99 +542,76 @@ var makeBrotliDecode = function makeBrotliDecode() {
682
542
  s.contextLookupOffset1 = contextMode << 9;
683
543
  s.contextLookupOffset2 = s.contextLookupOffset1 + 256;
684
544
  }
685
-
686
545
  function decodeCommandBlockSwitch(s) {
687
546
  s.commandBlockLength = decodeBlockTypeAndLength(s, 1, s.numCommandBlockTypes);
688
547
  s.commandTreeIdx = s.rings[7];
689
548
  }
690
-
691
549
  function decodeDistanceBlockSwitch(s) {
692
550
  s.distanceBlockLength = decodeBlockTypeAndLength(s, 2, s.numDistanceBlockTypes);
693
551
  s.distContextMapSlice = s.rings[9] << 2;
694
552
  }
695
-
696
553
  function maybeReallocateRingBuffer(s) {
697
554
  var newSize = s.maxRingBufferSize;
698
-
699
555
  if (newSize > s.expectedTotalSize) {
700
556
  var minimalNewSize = s.expectedTotalSize;
701
-
702
557
  while (newSize >> 1 > minimalNewSize) {
703
558
  newSize >>= 1;
704
559
  }
705
-
706
560
  if (s.inputEnd == 0 && newSize < 16384 && s.maxRingBufferSize >= 16384) {
707
561
  newSize = 16384;
708
562
  }
709
563
  }
710
-
711
564
  if (newSize <= s.ringBufferSize) {
712
565
  return;
713
566
  }
714
-
715
567
  var ringBufferSizeWithSlack = newSize + 37;
716
568
  var newBuffer = new Int8Array(ringBufferSizeWithSlack);
717
-
718
569
  if (s.ringBuffer.length != 0) {
719
570
  newBuffer.set(s.ringBuffer.subarray(0, 0 + s.ringBufferSize), 0);
720
571
  }
721
-
722
572
  s.ringBuffer = newBuffer;
723
573
  s.ringBufferSize = newSize;
724
574
  }
725
-
726
575
  function readNextMetablockHeader(s) {
727
576
  if (s.inputEnd != 0) {
728
577
  s.nextRunningState = 10;
729
578
  s.runningState = 12;
730
579
  return;
731
580
  }
732
-
733
581
  s.literalTreeGroup = new Int32Array(0);
734
582
  s.commandTreeGroup = new Int32Array(0);
735
583
  s.distanceTreeGroup = new Int32Array(0);
736
-
737
584
  if (s.halfOffset > 2030) {
738
585
  doReadMoreInput(s);
739
586
  }
740
-
741
587
  decodeMetaBlockLength(s);
742
-
743
588
  if (s.metaBlockLength == 0 && s.isMetadata == 0) {
744
589
  return;
745
590
  }
746
-
747
591
  if (s.isUncompressed != 0 || s.isMetadata != 0) {
748
592
  jumpToByteBoundary(s);
749
593
  s.runningState = s.isMetadata != 0 ? 5 : 6;
750
594
  } else {
751
595
  s.runningState = 3;
752
596
  }
753
-
754
597
  if (s.isMetadata != 0) {
755
598
  return;
756
599
  }
757
-
758
600
  s.expectedTotalSize += s.metaBlockLength;
759
-
760
601
  if (s.expectedTotalSize > 1 << 30) {
761
602
  s.expectedTotalSize = 1 << 30;
762
603
  }
763
-
764
604
  if (s.ringBufferSize < s.maxRingBufferSize) {
765
605
  maybeReallocateRingBuffer(s);
766
606
  }
767
607
  }
768
-
769
608
  function readMetablockPartition(s, treeType, numBlockTypes) {
770
609
  var offset = s.blockTrees[2 * treeType];
771
-
772
610
  if (numBlockTypes <= 1) {
773
611
  s.blockTrees[2 * treeType + 1] = offset;
774
612
  s.blockTrees[2 * treeType + 2] = offset;
775
613
  return 1 << 28;
776
614
  }
777
-
778
615
  var blockTypeAlphabetSize = numBlockTypes + 2;
779
616
  offset += readHuffmanCode(blockTypeAlphabetSize, blockTypeAlphabetSize, s.blockTrees, 2 * treeType, s);
780
617
  s.blockTrees[2 * treeType + 1] = offset;
@@ -783,7 +620,6 @@ var makeBrotliDecode = function makeBrotliDecode() {
783
620
  s.blockTrees[2 * treeType + 2] = offset;
784
621
  return readBlockLength(s.blockTrees, 2 * treeType + 1, s);
785
622
  }
786
-
787
623
  function calculateDistanceLut(s, alphabetSizeLimit) {
788
624
  var distExtraBits = s.distExtraBits;
789
625
  var distOffset = s.distOffset;
@@ -793,27 +629,22 @@ var makeBrotliDecode = function makeBrotliDecode() {
793
629
  var bits = 1;
794
630
  var half = 0;
795
631
  var i = 16;
796
-
797
632
  for (var j = 0; j < ndirect; ++j) {
798
633
  distExtraBits[i] = 0;
799
634
  distOffset[i] = j + 1;
800
635
  ++i;
801
636
  }
802
-
803
637
  while (i < alphabetSizeLimit) {
804
638
  var base = ndirect + ((2 + half << bits) - 4 << npostfix) + 1;
805
-
806
639
  for (var _j = 0; _j < postfix; ++_j) {
807
640
  distExtraBits[i] = bits;
808
641
  distOffset[i] = base + _j;
809
642
  ++i;
810
643
  }
811
-
812
644
  bits = bits + half;
813
645
  half = half ^ 1;
814
646
  }
815
647
  }
816
-
817
648
  function readMetablockHuffmanCodesAndContextMaps(s) {
818
649
  s.numLiteralBlockTypes = decodeVarLenUnsignedByte(s) + 1;
819
650
  s.literalBlockLength = readMetablockPartition(s, 0, s.numLiteralBlockTypes);
@@ -821,60 +652,48 @@ var makeBrotliDecode = function makeBrotliDecode() {
821
652
  s.commandBlockLength = readMetablockPartition(s, 1, s.numCommandBlockTypes);
822
653
  s.numDistanceBlockTypes = decodeVarLenUnsignedByte(s) + 1;
823
654
  s.distanceBlockLength = readMetablockPartition(s, 2, s.numDistanceBlockTypes);
824
-
825
655
  if (s.halfOffset > 2030) {
826
656
  doReadMoreInput(s);
827
657
  }
828
-
829
658
  if (s.bitOffset >= 16) {
830
659
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
831
660
  s.bitOffset -= 16;
832
661
  }
833
-
834
662
  s.distancePostfixBits = readFewBits(s, 2);
835
663
  s.numDirectDistanceCodes = readFewBits(s, 4) << s.distancePostfixBits;
836
664
  s.contextModes = new Int8Array(s.numLiteralBlockTypes);
837
-
838
665
  for (var i = 0; i < s.numLiteralBlockTypes;) {
839
666
  var limit = min(i + 96, s.numLiteralBlockTypes);
840
-
841
667
  for (; i < limit; ++i) {
842
668
  if (s.bitOffset >= 16) {
843
669
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
844
670
  s.bitOffset -= 16;
845
671
  }
846
-
847
672
  s.contextModes[i] = readFewBits(s, 2);
848
673
  }
849
-
850
674
  if (s.halfOffset > 2030) {
851
675
  doReadMoreInput(s);
852
676
  }
853
677
  }
854
-
855
678
  s.contextMap = new Int8Array(s.numLiteralBlockTypes << 6);
856
679
  var numLiteralTrees = decodeContextMap(s.numLiteralBlockTypes << 6, s.contextMap, s);
857
680
  s.trivialLiteralContext = 1;
858
-
859
681
  for (var j = 0; j < s.numLiteralBlockTypes << 6; j++) {
860
682
  if (s.contextMap[j] != j >> 6) {
861
683
  s.trivialLiteralContext = 0;
862
684
  break;
863
685
  }
864
686
  }
865
-
866
687
  s.distContextMap = new Int8Array(s.numDistanceBlockTypes << 2);
867
688
  var numDistTrees = decodeContextMap(s.numDistanceBlockTypes << 2, s.distContextMap, s);
868
689
  s.literalTreeGroup = decodeHuffmanTreeGroup(256, 256, numLiteralTrees, s);
869
690
  s.commandTreeGroup = decodeHuffmanTreeGroup(704, 704, s.numCommandBlockTypes, s);
870
691
  var distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 24);
871
692
  var distanceAlphabetSizeLimit = distanceAlphabetSizeMax;
872
-
873
693
  if (s.isLargeWindow == 1) {
874
694
  distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 62);
875
695
  distanceAlphabetSizeLimit = calculateDistanceAlphabetLimit(0x7ffffffc, s.distancePostfixBits, s.numDirectDistanceCodes);
876
696
  }
877
-
878
697
  s.distanceTreeGroup = decodeHuffmanTreeGroup(distanceAlphabetSizeMax, distanceAlphabetSizeLimit, numDistTrees, s);
879
698
  calculateDistanceLut(s, distanceAlphabetSizeLimit);
880
699
  s.contextMapSlice = 0;
@@ -890,157 +709,122 @@ var makeBrotliDecode = function makeBrotliDecode() {
890
709
  s.rings[8] = 1;
891
710
  s.rings[9] = 0;
892
711
  }
893
-
894
712
  function copyUncompressedData(s) {
895
713
  var ringBuffer = s.ringBuffer;
896
-
897
714
  if (s.metaBlockLength <= 0) {
898
715
  reload(s);
899
716
  s.runningState = 2;
900
717
  return;
901
718
  }
902
-
903
719
  var chunkLength = min(s.ringBufferSize - s.pos, s.metaBlockLength);
904
720
  copyRawBytes(s, ringBuffer, s.pos, chunkLength);
905
721
  s.metaBlockLength -= chunkLength;
906
722
  s.pos += chunkLength;
907
-
908
723
  if (s.pos == s.ringBufferSize) {
909
724
  s.nextRunningState = 6;
910
725
  s.runningState = 12;
911
726
  return;
912
727
  }
913
-
914
728
  reload(s);
915
729
  s.runningState = 2;
916
730
  }
917
-
918
731
  function writeRingBuffer(s) {
919
732
  var toWrite = min(s.outputLength - s.outputUsed, s.ringBufferBytesReady - s.ringBufferBytesWritten);
920
-
921
733
  if (toWrite != 0) {
922
734
  s.output.set(s.ringBuffer.subarray(s.ringBufferBytesWritten, s.ringBufferBytesWritten + toWrite), s.outputOffset + s.outputUsed);
923
735
  s.outputUsed += toWrite;
924
736
  s.ringBufferBytesWritten += toWrite;
925
737
  }
926
-
927
738
  if (s.outputUsed < s.outputLength) {
928
739
  return 1;
929
740
  } else {
930
741
  return 0;
931
742
  }
932
743
  }
933
-
934
744
  function decodeHuffmanTreeGroup(alphabetSizeMax, alphabetSizeLimit, n, s) {
935
745
  var maxTableSize = MAX_HUFFMAN_TABLE_SIZE[alphabetSizeLimit + 31 >> 5];
936
746
  var group = new Int32Array(n + n * maxTableSize);
937
747
  var next = n;
938
-
939
748
  for (var i = 0; i < n; ++i) {
940
749
  group[i] = next;
941
750
  next += readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, group, i, s);
942
751
  }
943
-
944
752
  return group;
945
753
  }
946
-
947
754
  function calculateFence(s) {
948
755
  var result = s.ringBufferSize;
949
-
950
756
  if (s.isEager != 0) {
951
757
  result = min(result, s.ringBufferBytesWritten + s.outputLength - s.outputUsed);
952
758
  }
953
-
954
759
  return result;
955
760
  }
956
-
957
761
  function doUseDictionary(s, fence) {
958
762
  if (s.distance > 0x7ffffffc) {
959
763
  throw 'Invalid backward reference';
960
764
  }
961
-
962
765
  var address = s.distance - s.maxDistance - 1 - s.cdTotalSize;
963
-
964
766
  if (address < 0) {
965
767
  initializeCompoundDictionaryCopy(s, -address - 1, s.copyLength);
966
768
  s.runningState = 14;
967
769
  } else {
968
770
  var dictionaryData = data;
969
771
  var wordLength = s.copyLength;
970
-
971
772
  if (wordLength > 31) {
972
773
  throw 'Invalid backward reference';
973
774
  }
974
-
975
775
  var shift = sizeBits[wordLength];
976
-
977
776
  if (shift == 0) {
978
777
  throw 'Invalid backward reference';
979
778
  }
980
-
981
779
  var offset = offsets[wordLength];
982
780
  var mask = (1 << shift) - 1;
983
781
  var wordIdx = address & mask;
984
782
  var transformIdx = address >>> shift;
985
783
  offset += wordIdx * wordLength;
986
784
  var transforms = RFC_TRANSFORMS;
987
-
988
785
  if (transformIdx >= transforms.numTransforms) {
989
786
  throw 'Invalid backward reference';
990
787
  }
991
-
992
788
  var len = transformDictionaryWord(s.ringBuffer, s.pos, dictionaryData, offset, wordLength, transforms, transformIdx);
993
789
  s.pos += len;
994
790
  s.metaBlockLength -= len;
995
-
996
791
  if (s.pos >= fence) {
997
792
  s.nextRunningState = 4;
998
793
  s.runningState = 12;
999
794
  return;
1000
795
  }
1001
-
1002
796
  s.runningState = 4;
1003
797
  }
1004
798
  }
1005
-
1006
799
  function initializeCompoundDictionary(s) {
1007
800
  s.cdBlockMap = new Int8Array(256);
1008
801
  var blockBits = 8;
1009
-
1010
802
  while (s.cdTotalSize - 1 >>> blockBits != 0) {
1011
803
  blockBits++;
1012
804
  }
1013
-
1014
805
  blockBits -= 8;
1015
806
  s.cdBlockBits = blockBits;
1016
807
  var cursor = 0;
1017
808
  var index = 0;
1018
-
1019
809
  while (cursor < s.cdTotalSize) {
1020
810
  while (s.cdChunkOffsets[index + 1] < cursor) {
1021
811
  index++;
1022
812
  }
1023
-
1024
813
  s.cdBlockMap[cursor >>> blockBits] = index;
1025
814
  cursor += 1 << blockBits;
1026
815
  }
1027
816
  }
1028
-
1029
817
  function initializeCompoundDictionaryCopy(s, address, length) {
1030
818
  if (s.cdBlockBits == -1) {
1031
819
  initializeCompoundDictionary(s);
1032
820
  }
1033
-
1034
821
  var index = s.cdBlockMap[address >>> s.cdBlockBits];
1035
-
1036
822
  while (address >= s.cdChunkOffsets[index + 1]) {
1037
823
  index++;
1038
824
  }
1039
-
1040
825
  if (s.cdTotalSize > address + length) {
1041
826
  throw 'Invalid backward reference';
1042
827
  }
1043
-
1044
828
  s.distRbIdx = s.distRbIdx + 1 & 0x3;
1045
829
  s.rings[s.distRbIdx] = s.distance;
1046
830
  s.metaBlockLength -= length;
@@ -1049,152 +833,119 @@ var makeBrotliDecode = function makeBrotliDecode() {
1049
833
  s.cdBrLength = length;
1050
834
  s.cdBrCopied = 0;
1051
835
  }
1052
-
1053
836
  function copyFromCompoundDictionary(s, fence) {
1054
837
  var pos = s.pos;
1055
838
  var origPos = pos;
1056
-
1057
839
  while (s.cdBrLength != s.cdBrCopied) {
1058
840
  var space = fence - pos;
1059
841
  var chunkLength = s.cdChunkOffsets[s.cdBrIndex + 1] - s.cdChunkOffsets[s.cdBrIndex];
1060
842
  var remChunkLength = chunkLength - s.cdBrOffset;
1061
843
  var length = s.cdBrLength - s.cdBrCopied;
1062
-
1063
844
  if (length > remChunkLength) {
1064
845
  length = remChunkLength;
1065
846
  }
1066
-
1067
847
  if (length > space) {
1068
848
  length = space;
1069
849
  }
1070
-
1071
850
  copyBytes(s.ringBuffer, pos, s.cdChunks[s.cdBrIndex], s.cdBrOffset, s.cdBrOffset + length);
1072
851
  pos += length;
1073
852
  s.cdBrOffset += length;
1074
853
  s.cdBrCopied += length;
1075
-
1076
854
  if (length == remChunkLength) {
1077
855
  s.cdBrIndex++;
1078
856
  s.cdBrOffset = 0;
1079
857
  }
1080
-
1081
858
  if (pos >= fence) {
1082
859
  break;
1083
860
  }
1084
861
  }
1085
-
1086
862
  return pos - origPos;
1087
863
  }
1088
-
1089
864
  function decompress(s) {
1090
865
  if (s.runningState == 0) {
1091
866
  throw "Can't decompress until initialized";
1092
867
  }
1093
-
1094
868
  if (s.runningState == 11) {
1095
869
  throw "Can't decompress after close";
1096
870
  }
1097
-
1098
871
  if (s.runningState == 1) {
1099
872
  var windowBits = decodeWindowBits(s);
1100
-
1101
873
  if (windowBits == -1) {
1102
874
  throw "Invalid 'windowBits' code";
1103
875
  }
1104
-
1105
876
  s.maxRingBufferSize = 1 << windowBits;
1106
877
  s.maxBackwardDistance = s.maxRingBufferSize - 16;
1107
878
  s.runningState = 2;
1108
879
  }
1109
-
1110
880
  var fence = calculateFence(s);
1111
881
  var ringBufferMask = s.ringBufferSize - 1;
1112
882
  var ringBuffer = s.ringBuffer;
1113
-
1114
883
  while (s.runningState != 10) {
1115
884
  switch (s.runningState) {
1116
885
  case 2:
1117
886
  if (s.metaBlockLength < 0) {
1118
887
  throw 'Invalid metablock length';
1119
888
  }
1120
-
1121
889
  readNextMetablockHeader(s);
1122
890
  fence = calculateFence(s);
1123
891
  ringBufferMask = s.ringBufferSize - 1;
1124
892
  ringBuffer = s.ringBuffer;
1125
893
  continue;
1126
-
1127
894
  case 3:
1128
895
  readMetablockHuffmanCodesAndContextMaps(s);
1129
896
  s.runningState = 4;
1130
-
1131
897
  case 4:
1132
898
  if (s.metaBlockLength <= 0) {
1133
899
  s.runningState = 2;
1134
900
  continue;
1135
901
  }
1136
-
1137
902
  if (s.halfOffset > 2030) {
1138
903
  doReadMoreInput(s);
1139
904
  }
1140
-
1141
905
  if (s.commandBlockLength == 0) {
1142
906
  decodeCommandBlockSwitch(s);
1143
907
  }
1144
-
1145
908
  s.commandBlockLength--;
1146
-
1147
909
  if (s.bitOffset >= 16) {
1148
910
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
1149
911
  s.bitOffset -= 16;
1150
912
  }
1151
-
1152
913
  var cmdCode = readSymbol(s.commandTreeGroup, s.commandTreeIdx, s) << 2;
1153
914
  var insertAndCopyExtraBits = CMD_LOOKUP[cmdCode];
1154
915
  var insertLengthOffset = CMD_LOOKUP[cmdCode + 1];
1155
916
  var copyLengthOffset = CMD_LOOKUP[cmdCode + 2];
1156
917
  s.distanceCode = CMD_LOOKUP[cmdCode + 3];
1157
-
1158
918
  if (s.bitOffset >= 16) {
1159
919
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
1160
920
  s.bitOffset -= 16;
1161
921
  }
1162
-
1163
922
  var insertLengthExtraBits = insertAndCopyExtraBits & 0xff;
1164
923
  s.insertLength = insertLengthOffset + (insertLengthExtraBits <= 16 ? readFewBits(s, insertLengthExtraBits) : readManyBits(s, insertLengthExtraBits));
1165
-
1166
924
  if (s.bitOffset >= 16) {
1167
925
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
1168
926
  s.bitOffset -= 16;
1169
927
  }
1170
-
1171
928
  var copyLengthExtraBits = insertAndCopyExtraBits >> 8;
1172
929
  s.copyLength = copyLengthOffset + (copyLengthExtraBits <= 16 ? readFewBits(s, copyLengthExtraBits) : readManyBits(s, copyLengthExtraBits));
1173
930
  s.j = 0;
1174
931
  s.runningState = 7;
1175
-
1176
932
  case 7:
1177
933
  if (s.trivialLiteralContext != 0) {
1178
934
  while (s.j < s.insertLength) {
1179
935
  if (s.halfOffset > 2030) {
1180
936
  doReadMoreInput(s);
1181
937
  }
1182
-
1183
938
  if (s.literalBlockLength == 0) {
1184
939
  decodeLiteralBlockSwitch(s);
1185
940
  }
1186
-
1187
941
  s.literalBlockLength--;
1188
-
1189
942
  if (s.bitOffset >= 16) {
1190
943
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
1191
944
  s.bitOffset -= 16;
1192
945
  }
1193
-
1194
946
  ringBuffer[s.pos] = readSymbol(s.literalTreeGroup, s.literalTreeIdx, s);
1195
947
  s.pos++;
1196
948
  s.j++;
1197
-
1198
949
  if (s.pos >= fence) {
1199
950
  s.nextRunningState = 7;
1200
951
  s.runningState = 12;
@@ -1204,31 +955,25 @@ var makeBrotliDecode = function makeBrotliDecode() {
1204
955
  } else {
1205
956
  var prevByte1 = ringBuffer[s.pos - 1 & ringBufferMask] & 0xff;
1206
957
  var prevByte2 = ringBuffer[s.pos - 2 & ringBufferMask] & 0xff;
1207
-
1208
958
  while (s.j < s.insertLength) {
1209
959
  if (s.halfOffset > 2030) {
1210
960
  doReadMoreInput(s);
1211
961
  }
1212
-
1213
962
  if (s.literalBlockLength == 0) {
1214
963
  decodeLiteralBlockSwitch(s);
1215
964
  }
1216
-
1217
965
  var literalContext = LOOKUP[s.contextLookupOffset1 + prevByte1] | LOOKUP[s.contextLookupOffset2 + prevByte2];
1218
966
  var literalTreeIdx = s.contextMap[s.contextMapSlice + literalContext] & 0xff;
1219
967
  s.literalBlockLength--;
1220
968
  prevByte2 = prevByte1;
1221
-
1222
969
  if (s.bitOffset >= 16) {
1223
970
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
1224
971
  s.bitOffset -= 16;
1225
972
  }
1226
-
1227
973
  prevByte1 = readSymbol(s.literalTreeGroup, literalTreeIdx, s);
1228
974
  ringBuffer[s.pos] = prevByte1;
1229
975
  s.pos++;
1230
976
  s.j++;
1231
-
1232
977
  if (s.pos >= fence) {
1233
978
  s.nextRunningState = 7;
1234
979
  s.runningState = 12;
@@ -1236,52 +981,40 @@ var makeBrotliDecode = function makeBrotliDecode() {
1236
981
  }
1237
982
  }
1238
983
  }
1239
-
1240
984
  if (s.runningState != 7) {
1241
985
  continue;
1242
986
  }
1243
-
1244
987
  s.metaBlockLength -= s.insertLength;
1245
-
1246
988
  if (s.metaBlockLength <= 0) {
1247
989
  s.runningState = 4;
1248
990
  continue;
1249
991
  }
1250
-
1251
992
  var distanceCode = s.distanceCode;
1252
-
1253
993
  if (distanceCode < 0) {
1254
994
  s.distance = s.rings[s.distRbIdx];
1255
995
  } else {
1256
996
  if (s.halfOffset > 2030) {
1257
997
  doReadMoreInput(s);
1258
998
  }
1259
-
1260
999
  if (s.distanceBlockLength == 0) {
1261
1000
  decodeDistanceBlockSwitch(s);
1262
1001
  }
1263
-
1264
1002
  s.distanceBlockLength--;
1265
-
1266
1003
  if (s.bitOffset >= 16) {
1267
1004
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
1268
1005
  s.bitOffset -= 16;
1269
1006
  }
1270
-
1271
1007
  var distTreeIdx = s.distContextMap[s.distContextMapSlice + distanceCode] & 0xff;
1272
1008
  distanceCode = readSymbol(s.distanceTreeGroup, distTreeIdx, s);
1273
-
1274
1009
  if (distanceCode < 16) {
1275
1010
  var index = s.distRbIdx + DISTANCE_SHORT_CODE_INDEX_OFFSET[distanceCode] & 0x3;
1276
1011
  s.distance = s.rings[index] + DISTANCE_SHORT_CODE_VALUE_OFFSET[distanceCode];
1277
-
1278
1012
  if (s.distance < 0) {
1279
1013
  throw 'Negative distance';
1280
1014
  }
1281
1015
  } else {
1282
1016
  var extraBits = s.distExtraBits[distanceCode];
1283
1017
  var bits = void 0;
1284
-
1285
1018
  if (s.bitOffset + extraBits <= 32) {
1286
1019
  bits = readFewBits(s, extraBits);
1287
1020
  } else {
@@ -1289,44 +1022,35 @@ var makeBrotliDecode = function makeBrotliDecode() {
1289
1022
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
1290
1023
  s.bitOffset -= 16;
1291
1024
  }
1292
-
1293
1025
  bits = extraBits <= 16 ? readFewBits(s, extraBits) : readManyBits(s, extraBits);
1294
1026
  }
1295
-
1296
1027
  s.distance = s.distOffset[distanceCode] + (bits << s.distancePostfixBits);
1297
1028
  }
1298
1029
  }
1299
-
1300
1030
  if (s.maxDistance != s.maxBackwardDistance && s.pos < s.maxBackwardDistance) {
1301
1031
  s.maxDistance = s.pos;
1302
1032
  } else {
1303
1033
  s.maxDistance = s.maxBackwardDistance;
1304
1034
  }
1305
-
1306
1035
  if (s.distance > s.maxDistance) {
1307
1036
  s.runningState = 9;
1308
1037
  continue;
1309
1038
  }
1310
-
1311
1039
  if (distanceCode > 0) {
1312
1040
  s.distRbIdx = s.distRbIdx + 1 & 0x3;
1313
1041
  s.rings[s.distRbIdx] = s.distance;
1314
1042
  }
1315
-
1316
1043
  if (s.copyLength > s.metaBlockLength) {
1317
1044
  throw 'Invalid backward reference';
1318
1045
  }
1319
-
1320
1046
  s.j = 0;
1321
1047
  s.runningState = 8;
1322
-
1323
1048
  case 8:
1324
1049
  var src = s.pos - s.distance & ringBufferMask;
1325
1050
  var dst = s.pos;
1326
1051
  var copyLength = s.copyLength - s.j;
1327
1052
  var srcEnd = src + copyLength;
1328
1053
  var dstEnd = dst + copyLength;
1329
-
1330
1054
  if (srcEnd < ringBufferMask && dstEnd < ringBufferMask) {
1331
1055
  if (copyLength < 12 || srcEnd > dst && dstEnd > src) {
1332
1056
  for (var k = 0; k < copyLength; k += 4) {
@@ -1338,7 +1062,6 @@ var makeBrotliDecode = function makeBrotliDecode() {
1338
1062
  } else {
1339
1063
  ringBuffer.copyWithin(dst, src, srcEnd);
1340
1064
  }
1341
-
1342
1065
  s.j += copyLength;
1343
1066
  s.metaBlockLength -= copyLength;
1344
1067
  s.pos += copyLength;
@@ -1348,7 +1071,6 @@ var makeBrotliDecode = function makeBrotliDecode() {
1348
1071
  s.metaBlockLength--;
1349
1072
  s.pos++;
1350
1073
  s.j++;
1351
-
1352
1074
  if (s.pos >= fence) {
1353
1075
  s.nextRunningState = 8;
1354
1076
  s.runningState = 12;
@@ -1356,86 +1078,66 @@ var makeBrotliDecode = function makeBrotliDecode() {
1356
1078
  }
1357
1079
  }
1358
1080
  }
1359
-
1360
1081
  if (s.runningState == 8) {
1361
1082
  s.runningState = 4;
1362
1083
  }
1363
-
1364
1084
  continue;
1365
-
1366
1085
  case 9:
1367
1086
  doUseDictionary(s, fence);
1368
1087
  continue;
1369
-
1370
1088
  case 14:
1371
1089
  s.pos += copyFromCompoundDictionary(s, fence);
1372
-
1373
1090
  if (s.pos >= fence) {
1374
1091
  s.nextRunningState = 14;
1375
1092
  s.runningState = 12;
1376
1093
  return;
1377
1094
  }
1378
-
1379
1095
  s.runningState = 4;
1380
1096
  continue;
1381
-
1382
1097
  case 5:
1383
1098
  while (s.metaBlockLength > 0) {
1384
1099
  if (s.halfOffset > 2030) {
1385
1100
  doReadMoreInput(s);
1386
1101
  }
1387
-
1388
1102
  if (s.bitOffset >= 16) {
1389
1103
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
1390
1104
  s.bitOffset -= 16;
1391
1105
  }
1392
-
1393
1106
  readFewBits(s, 8);
1394
1107
  s.metaBlockLength--;
1395
1108
  }
1396
-
1397
1109
  s.runningState = 2;
1398
1110
  continue;
1399
-
1400
1111
  case 6:
1401
1112
  copyUncompressedData(s);
1402
1113
  continue;
1403
-
1404
1114
  case 12:
1405
1115
  s.ringBufferBytesReady = min(s.pos, s.ringBufferSize);
1406
1116
  s.runningState = 13;
1407
-
1408
1117
  case 13:
1409
1118
  if (writeRingBuffer(s) == 0) {
1410
1119
  return;
1411
1120
  }
1412
-
1413
1121
  if (s.pos >= s.maxBackwardDistance) {
1414
1122
  s.maxDistance = s.maxBackwardDistance;
1415
1123
  }
1416
-
1417
1124
  if (s.pos >= s.ringBufferSize) {
1418
1125
  if (s.pos > s.ringBufferSize) {
1419
1126
  ringBuffer.copyWithin(0, s.ringBufferSize, s.pos);
1420
1127
  }
1421
-
1422
1128
  s.pos &= ringBufferMask;
1423
1129
  s.ringBufferBytesWritten = 0;
1424
1130
  }
1425
-
1426
1131
  s.runningState = s.nextRunningState;
1427
1132
  continue;
1428
-
1429
1133
  default:
1430
1134
  throw 'Unexpected state ' + s.runningState;
1431
1135
  }
1432
1136
  }
1433
-
1434
1137
  if (s.runningState == 10) {
1435
1138
  if (s.metaBlockLength < 0) {
1436
1139
  throw 'Invalid metablock length';
1437
1140
  }
1438
-
1439
1141
  jumpToByteBoundary(s);
1440
1142
  checkHealth(s, 1);
1441
1143
  }
@@ -1455,31 +1157,25 @@ var makeBrotliDecode = function makeBrotliDecode() {
1455
1157
  }
1456
1158
 
1457
1159
  var RFC_TRANSFORMS = new Transforms(121, 167, 50);
1458
-
1459
1160
  function unpackTransforms(prefixSuffix, prefixSuffixHeads, transforms, prefixSuffixSrc, transformsSrc) {
1460
1161
  var n = prefixSuffixSrc.length;
1461
1162
  var index = 1;
1462
1163
  var j = 0;
1463
-
1464
1164
  for (var i = 0; i < n; ++i) {
1465
1165
  var c = prefixSuffixSrc.charCodeAt(i);
1466
-
1467
1166
  if (c == 35) {
1468
1167
  prefixSuffixHeads[index++] = j;
1469
1168
  } else {
1470
1169
  prefixSuffix[j++] = c;
1471
1170
  }
1472
1171
  }
1473
-
1474
1172
  for (var _i3 = 0; _i3 < 363; ++_i3) {
1475
1173
  transforms[_i3] = transformsSrc.charCodeAt(_i3) - 32;
1476
1174
  }
1477
1175
  }
1478
-
1479
1176
  {
1480
1177
  unpackTransforms(RFC_TRANSFORMS.prefixSuffixStorage, RFC_TRANSFORMS.prefixSuffixHeads, RFC_TRANSFORMS.triplets, '# #s #, #e #.# the #.com/#\xC2\xA0# of # and # in # to #"#">#\n#]# for # a # that #. # with #\'# from # by #. The # on # as # is #ing #\n\t#:#ed #(# at #ly #="# of the #. This #,# not #er #al #=\'#ful #ive #less #est #ize #ous #', ' !! ! , *! &! " ! ) * * - ! # ! #!*! + ,$ ! - % . / # 0 1 . " 2 3!* 4% ! # / 5 6 7 8 0 1 & $ 9 + : ; < \' != > ?! 4 @ 4 2 & A *# ( B C& ) % ) !*# *-% A +! *. D! %\' & E *6 F G% ! *A *% H! D I!+! J!+ K +- *4! A L!*4 M N +6 O!*% +.! K *G P +%( ! G *D +D Q +# *K!*G!+D!+# +G +A +4!+% +K!+4!*D!+K!*K');
1481
1178
  }
1482
-
1483
1179
  function transformDictionaryWord(dst, dstOffset, src, srcOffset, len, transforms, transformIndex) {
1484
1180
  var offset = dstOffset;
1485
1181
  var triplets = transforms.triplets;
@@ -1495,48 +1191,37 @@ var makeBrotliDecode = function makeBrotliDecode() {
1495
1191
  var suffixEnd = prefixSuffixHeads[suffixIdx + 1];
1496
1192
  var omitFirst = transformType - 11;
1497
1193
  var omitLast = transformType - 0;
1498
-
1499
1194
  if (omitFirst < 1 || omitFirst > 9) {
1500
1195
  omitFirst = 0;
1501
1196
  }
1502
-
1503
1197
  if (omitLast < 1 || omitLast > 9) {
1504
1198
  omitLast = 0;
1505
1199
  }
1506
-
1507
1200
  while (prefix != prefixEnd) {
1508
1201
  dst[offset++] = prefixSuffixStorage[prefix++];
1509
1202
  }
1510
-
1511
1203
  if (omitFirst > len) {
1512
1204
  omitFirst = len;
1513
1205
  }
1514
-
1515
1206
  srcOffset += omitFirst;
1516
1207
  len -= omitFirst;
1517
1208
  len -= omitLast;
1518
1209
  var i = len;
1519
-
1520
1210
  while (i > 0) {
1521
1211
  dst[offset++] = src[srcOffset++];
1522
1212
  i--;
1523
1213
  }
1524
-
1525
1214
  if (transformType == 10 || transformType == 11) {
1526
1215
  var uppercaseOffset = offset - len;
1527
-
1528
1216
  if (transformType == 10) {
1529
1217
  len = 1;
1530
1218
  }
1531
-
1532
1219
  while (len > 0) {
1533
1220
  var c0 = dst[uppercaseOffset] & 0xff;
1534
-
1535
1221
  if (c0 < 0xc0) {
1536
1222
  if (c0 >= 97 && c0 <= 122) {
1537
1223
  dst[uppercaseOffset] ^= 32;
1538
1224
  }
1539
-
1540
1225
  uppercaseOffset += 1;
1541
1226
  len -= 1;
1542
1227
  } else if (c0 < 0xe0) {
@@ -1553,12 +1238,9 @@ var makeBrotliDecode = function makeBrotliDecode() {
1553
1238
  var shiftOffset = offset - len;
1554
1239
  var param = transforms.params[transformIndex];
1555
1240
  var scalar = (param & 0x7fff) + (0x1000000 - (param & 0x8000));
1556
-
1557
1241
  while (len > 0) {
1558
1242
  var step = 1;
1559
-
1560
1243
  var _c = dst[shiftOffset] & 0xff;
1561
-
1562
1244
  if (_c < 0x80) {
1563
1245
  scalar += _c;
1564
1246
  dst[shiftOffset] = scalar & 0x7f;
@@ -1599,57 +1281,44 @@ var makeBrotliDecode = function makeBrotliDecode() {
1599
1281
  step = len;
1600
1282
  }
1601
1283
  }
1602
-
1603
1284
  shiftOffset += step;
1604
1285
  len -= step;
1605
-
1606
1286
  if (transformType == 21) {
1607
1287
  len = 0;
1608
1288
  }
1609
1289
  }
1610
1290
  }
1611
-
1612
1291
  while (suffix != suffixEnd) {
1613
1292
  dst[offset++] = prefixSuffixStorage[suffix++];
1614
1293
  }
1615
-
1616
1294
  return offset - dstOffset;
1617
1295
  }
1618
1296
 
1619
1297
  function getNextKey(key, len) {
1620
1298
  var step = 1 << len - 1;
1621
-
1622
1299
  while ((key & step) != 0) {
1623
1300
  step >>= 1;
1624
1301
  }
1625
-
1626
1302
  return (key & step - 1) + step;
1627
1303
  }
1628
-
1629
1304
  function replicateValue(table, offset, step, end, item) {
1630
1305
  do {
1631
1306
  end -= step;
1632
1307
  table[offset + end] = item;
1633
1308
  } while (end > 0);
1634
1309
  }
1635
-
1636
1310
  function nextTableBitSize(count, len, rootBits) {
1637
1311
  var left = 1 << len - rootBits;
1638
-
1639
1312
  while (len < 15) {
1640
1313
  left -= count[len];
1641
-
1642
1314
  if (left <= 0) {
1643
1315
  break;
1644
1316
  }
1645
-
1646
1317
  len++;
1647
1318
  left <<= 1;
1648
1319
  }
1649
-
1650
1320
  return len - rootBits;
1651
1321
  }
1652
-
1653
1322
  function buildHuffmanTable(tableGroup, tableIdx, rootBits, codeLengths, codeLengthsSize) {
1654
1323
  var tableOffset = tableGroup[tableIdx];
1655
1324
  var key;
@@ -1657,49 +1326,38 @@ var makeBrotliDecode = function makeBrotliDecode() {
1657
1326
  var count = new Int32Array(16);
1658
1327
  var offset = new Int32Array(16);
1659
1328
  var symbol;
1660
-
1661
1329
  for (symbol = 0; symbol < codeLengthsSize; symbol++) {
1662
1330
  count[codeLengths[symbol]]++;
1663
1331
  }
1664
-
1665
1332
  offset[1] = 0;
1666
-
1667
1333
  for (var len = 1; len < 15; len++) {
1668
1334
  offset[len + 1] = offset[len] + count[len];
1669
1335
  }
1670
-
1671
1336
  for (symbol = 0; symbol < codeLengthsSize; symbol++) {
1672
1337
  if (codeLengths[symbol] != 0) {
1673
1338
  sorted[offset[codeLengths[symbol]]++] = symbol;
1674
1339
  }
1675
1340
  }
1676
-
1677
1341
  var tableBits = rootBits;
1678
1342
  var tableSize = 1 << tableBits;
1679
1343
  var totalSize = tableSize;
1680
-
1681
1344
  if (offset[15] == 1) {
1682
1345
  for (key = 0; key < totalSize; key++) {
1683
1346
  tableGroup[tableOffset + key] = sorted[0];
1684
1347
  }
1685
-
1686
1348
  return totalSize;
1687
1349
  }
1688
-
1689
1350
  key = 0;
1690
1351
  symbol = 0;
1691
-
1692
1352
  for (var _len = 1, step = 2; _len <= rootBits; _len++, step <<= 1) {
1693
1353
  for (; count[_len] > 0; count[_len]--) {
1694
1354
  replicateValue(tableGroup, tableOffset + key, step, tableSize, _len << 16 | sorted[symbol++]);
1695
1355
  key = getNextKey(key, _len);
1696
1356
  }
1697
1357
  }
1698
-
1699
1358
  var mask = totalSize - 1;
1700
1359
  var low = -1;
1701
1360
  var currentOffset = tableOffset;
1702
-
1703
1361
  for (var _len2 = rootBits + 1, _step = 2; _len2 <= 15; _len2++, _step <<= 1) {
1704
1362
  for (; count[_len2] > 0; count[_len2]--) {
1705
1363
  if ((key & mask) != low) {
@@ -1710,12 +1368,10 @@ var makeBrotliDecode = function makeBrotliDecode() {
1710
1368
  low = key & mask;
1711
1369
  tableGroup[tableOffset + low] = tableBits + rootBits << 16 | currentOffset - tableOffset - low;
1712
1370
  }
1713
-
1714
1371
  replicateValue(tableGroup, currentOffset + (key >> rootBits), _step, tableSize, _len2 - rootBits << 16 | sorted[symbol++]);
1715
1372
  key = getNextKey(key, _len2);
1716
1373
  }
1717
1374
  }
1718
-
1719
1375
  return totalSize;
1720
1376
  }
1721
1377
 
@@ -1724,67 +1380,53 @@ var makeBrotliDecode = function makeBrotliDecode() {
1724
1380
  if (halfAvailable(s) >= -2) {
1725
1381
  return;
1726
1382
  }
1727
-
1728
1383
  throw 'No more input';
1729
1384
  }
1730
-
1731
1385
  var readOffset = s.halfOffset << 1;
1732
1386
  var bytesInBuffer = 4096 - readOffset;
1733
1387
  s.byteBuffer.copyWithin(0, readOffset, 4096);
1734
1388
  s.halfOffset = 0;
1735
-
1736
1389
  while (bytesInBuffer < 4096) {
1737
1390
  var spaceLeft = 4096 - bytesInBuffer;
1738
1391
  var len = readInput(s.input, s.byteBuffer, bytesInBuffer, spaceLeft);
1739
-
1740
1392
  if (len <= 0) {
1741
1393
  s.endOfStreamReached = 1;
1742
1394
  s.tailBytes = bytesInBuffer;
1743
1395
  bytesInBuffer += 1;
1744
1396
  break;
1745
1397
  }
1746
-
1747
1398
  bytesInBuffer += len;
1748
1399
  }
1749
-
1750
1400
  bytesToNibbles(s, bytesInBuffer);
1751
1401
  }
1752
-
1753
1402
  function checkHealth(s, endOfStream) {
1754
1403
  if (s.endOfStreamReached == 0) {
1755
1404
  return;
1756
1405
  }
1757
-
1758
1406
  var byteOffset = (s.halfOffset << 1) + (s.bitOffset + 7 >> 3) - 4;
1759
-
1760
1407
  if (byteOffset > s.tailBytes) {
1761
1408
  throw 'Read after end';
1762
1409
  }
1763
-
1764
1410
  if (endOfStream != 0 && byteOffset != s.tailBytes) {
1765
1411
  throw 'Unused bytes after end';
1766
1412
  }
1767
1413
  }
1768
-
1769
1414
  function assertAccumulatorHealthy(s) {
1770
1415
  if (s.bitOffset > 32) {
1771
1416
  throw 'Accumulator underloaded: ' + s.bitOffset;
1772
1417
  }
1773
1418
  }
1774
-
1775
1419
  function readFewBits(s, n) {
1776
1420
  var val = s.accumulator32 >>> s.bitOffset & (1 << n) - 1;
1777
1421
  s.bitOffset += n;
1778
1422
  return val;
1779
1423
  }
1780
-
1781
1424
  function readManyBits(s, n) {
1782
1425
  var low = readFewBits(s, 16);
1783
1426
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
1784
1427
  s.bitOffset -= 16;
1785
1428
  return low | readFewBits(s, n - 16) << 16;
1786
1429
  }
1787
-
1788
1430
  function initBitReader(s) {
1789
1431
  s.byteBuffer = new Int8Array(4160);
1790
1432
  s.accumulator32 = 0;
@@ -1794,64 +1436,50 @@ var makeBrotliDecode = function makeBrotliDecode() {
1794
1436
  s.endOfStreamReached = 0;
1795
1437
  prepare(s);
1796
1438
  }
1797
-
1798
1439
  function prepare(s) {
1799
1440
  if (s.halfOffset > 2030) {
1800
1441
  doReadMoreInput(s);
1801
1442
  }
1802
-
1803
1443
  checkHealth(s, 0);
1804
1444
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
1805
1445
  s.bitOffset -= 16;
1806
1446
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
1807
1447
  s.bitOffset -= 16;
1808
1448
  }
1809
-
1810
1449
  function reload(s) {
1811
1450
  if (s.bitOffset == 32) {
1812
1451
  prepare(s);
1813
1452
  }
1814
1453
  }
1815
-
1816
1454
  function jumpToByteBoundary(s) {
1817
1455
  var padding = 32 - s.bitOffset & 7;
1818
-
1819
1456
  if (padding != 0) {
1820
1457
  var paddingBits = readFewBits(s, padding);
1821
-
1822
1458
  if (paddingBits != 0) {
1823
1459
  throw 'Corrupted padding bits';
1824
1460
  }
1825
1461
  }
1826
1462
  }
1827
-
1828
1463
  function halfAvailable(s) {
1829
1464
  var limit = 2048;
1830
-
1831
1465
  if (s.endOfStreamReached != 0) {
1832
1466
  limit = s.tailBytes + 1 >> 1;
1833
1467
  }
1834
-
1835
1468
  return limit - s.halfOffset;
1836
1469
  }
1837
-
1838
1470
  function copyRawBytes(s, data, offset, length) {
1839
1471
  if ((s.bitOffset & 7) != 0) {
1840
1472
  throw 'Unaligned copyBytes';
1841
1473
  }
1842
-
1843
1474
  while (s.bitOffset != 32 && length != 0) {
1844
1475
  data[offset++] = s.accumulator32 >>> s.bitOffset;
1845
1476
  s.bitOffset += 8;
1846
1477
  length--;
1847
1478
  }
1848
-
1849
1479
  if (length == 0) {
1850
1480
  return;
1851
1481
  }
1852
-
1853
1482
  var copyNibbles = min(halfAvailable(s), length >> 1);
1854
-
1855
1483
  if (copyNibbles > 0) {
1856
1484
  var readOffset = s.halfOffset << 1;
1857
1485
  var delta = copyNibbles << 1;
@@ -1860,91 +1488,72 @@ var makeBrotliDecode = function makeBrotliDecode() {
1860
1488
  length -= delta;
1861
1489
  s.halfOffset += copyNibbles;
1862
1490
  }
1863
-
1864
1491
  if (length == 0) {
1865
1492
  return;
1866
1493
  }
1867
-
1868
1494
  if (halfAvailable(s) > 0) {
1869
1495
  if (s.bitOffset >= 16) {
1870
1496
  s.accumulator32 = s.shortBuffer[s.halfOffset++] << 16 | s.accumulator32 >>> 16;
1871
1497
  s.bitOffset -= 16;
1872
1498
  }
1873
-
1874
1499
  while (length != 0) {
1875
1500
  data[offset++] = s.accumulator32 >>> s.bitOffset;
1876
1501
  s.bitOffset += 8;
1877
1502
  length--;
1878
1503
  }
1879
-
1880
1504
  checkHealth(s, 0);
1881
1505
  return;
1882
1506
  }
1883
-
1884
1507
  while (length > 0) {
1885
1508
  var len = readInput(s.input, data, offset, length);
1886
-
1887
1509
  if (len == -1) {
1888
1510
  throw 'Unexpected end of input';
1889
1511
  }
1890
-
1891
1512
  offset += len;
1892
1513
  length -= len;
1893
1514
  }
1894
1515
  }
1895
-
1896
1516
  function bytesToNibbles(s, byteLen) {
1897
1517
  var byteBuffer = s.byteBuffer;
1898
1518
  var halfLen = byteLen >> 1;
1899
1519
  var shortBuffer = s.shortBuffer;
1900
-
1901
1520
  for (var i = 0; i < halfLen; ++i) {
1902
1521
  shortBuffer[i] = byteBuffer[i * 2] & 0xff | (byteBuffer[i * 2 + 1] & 0xff) << 8;
1903
1522
  }
1904
1523
  }
1905
1524
 
1906
1525
  var LOOKUP = new Int32Array(2048);
1907
-
1908
1526
  function unpackLookupTable(lookup, map, rle) {
1909
1527
  for (var i = 0; i < 256; ++i) {
1910
1528
  lookup[i] = i & 0x3f;
1911
1529
  lookup[512 + i] = i >> 2;
1912
1530
  lookup[1792 + i] = 2 + (i >> 6);
1913
1531
  }
1914
-
1915
1532
  for (var _i4 = 0; _i4 < 128; ++_i4) {
1916
1533
  lookup[1024 + _i4] = 4 * (map.charCodeAt(_i4) - 32);
1917
1534
  }
1918
-
1919
1535
  for (var _i5 = 0; _i5 < 64; ++_i5) {
1920
1536
  lookup[1152 + _i5] = _i5 & 1;
1921
1537
  lookup[1216 + _i5] = 2 + (_i5 & 1);
1922
1538
  }
1923
-
1924
1539
  var offset = 1280;
1925
-
1926
1540
  for (var k = 0; k < 19; ++k) {
1927
1541
  var value = k & 3;
1928
1542
  var rep = rle.charCodeAt(k) - 32;
1929
-
1930
1543
  for (var _i6 = 0; _i6 < rep; ++_i6) {
1931
1544
  lookup[offset++] = value;
1932
1545
  }
1933
1546
  }
1934
-
1935
1547
  for (var _i7 = 0; _i7 < 16; ++_i7) {
1936
1548
  lookup[1792 + _i7] = 1;
1937
1549
  lookup[2032 + _i7] = 6;
1938
1550
  }
1939
-
1940
1551
  lookup[1792] = 0;
1941
1552
  lookup[2047] = 7;
1942
-
1943
1553
  for (var _i8 = 0; _i8 < 256; ++_i8) {
1944
1554
  lookup[1536 + _i8] = lookup[1792 + _i8] << 3;
1945
1555
  }
1946
1556
  }
1947
-
1948
1557
  {
1949
1558
  unpackLookupTable(LOOKUP, " !! ! \"#$##%#$&'##(#)#++++++++++((&*'##,---,---,-----,-----,-----&#'###.///.///./////./////./////&#'# ", "A/* ': & : $ \x81 @");
1950
1559
  }
@@ -2032,88 +1641,69 @@ var makeBrotliDecode = function makeBrotliDecode() {
2032
1641
  var data = null;
2033
1642
  var offsets = new Int32Array(32);
2034
1643
  var sizeBits = new Int32Array(32);
2035
-
2036
1644
  function setData(newData, newSizeBits) {
2037
1645
  if (isDirect(newData) == 0 || isReadOnly(newData) == 0) {
2038
1646
  throw 'newData must be a direct read-only byte buffer';
2039
1647
  }
2040
-
2041
1648
  if (newSizeBits.length > 31) {
2042
1649
  throw 'sizeBits length must be at most ' + 31;
2043
1650
  }
2044
-
2045
1651
  for (var i = 0; i < 4; ++i) {
2046
1652
  if (newSizeBits[i] != 0) {
2047
1653
  throw 'first ' + 4 + ' must be 0';
2048
1654
  }
2049
1655
  }
2050
-
2051
1656
  var dictionaryOffsets = offsets;
2052
1657
  var dictionarySizeBits = sizeBits;
2053
1658
  dictionarySizeBits.set(newSizeBits.subarray(0, 0 + newSizeBits.length), 0);
2054
1659
  var pos = 0;
2055
1660
  var limit = newData.length;
2056
-
2057
1661
  for (var _i9 = 0; _i9 < newSizeBits.length; ++_i9) {
2058
1662
  dictionaryOffsets[_i9] = pos;
2059
1663
  var bits = dictionarySizeBits[_i9];
2060
-
2061
1664
  if (bits != 0) {
2062
1665
  if (bits >= 31) {
2063
1666
  throw 'newSizeBits values must be less than 31';
2064
1667
  }
2065
-
2066
1668
  pos += _i9 << bits;
2067
-
2068
1669
  if (pos <= 0 || pos > limit) {
2069
1670
  throw 'newSizeBits is inconsistent: overflow';
2070
1671
  }
2071
1672
  }
2072
1673
  }
2073
-
2074
1674
  for (var _i10 = newSizeBits.length; _i10 < 32; ++_i10) {
2075
1675
  dictionaryOffsets[_i10] = pos;
2076
1676
  }
2077
-
2078
1677
  if (pos != limit) {
2079
1678
  throw 'newSizeBits is inconsistent: underflow';
2080
1679
  }
2081
-
2082
1680
  data = newData;
2083
1681
  }
2084
1682
 
2085
1683
  function unpackDictionaryData(dictionary, data0, data1, skipFlip, sizeBits, sizeBitsData) {
2086
1684
  var dict = toUsAsciiBytes(data0 + data1);
2087
-
2088
1685
  if (dict.length != dictionary.length) {
2089
1686
  throw 'Corrupted brotli dictionary';
2090
1687
  }
2091
-
2092
1688
  var offset = 0;
2093
1689
  var n = skipFlip.length;
2094
-
2095
1690
  for (var i = 0; i < n; i += 2) {
2096
1691
  var skip = skipFlip.charCodeAt(i) - 36;
2097
1692
  var flip = skipFlip.charCodeAt(i + 1) - 36;
2098
-
2099
1693
  for (var j = 0; j < skip; ++j) {
2100
1694
  dict[offset] ^= 3;
2101
1695
  offset++;
2102
1696
  }
2103
-
2104
1697
  for (var _j2 = 0; _j2 < flip; ++_j2) {
2105
1698
  dict[offset] ^= 236;
2106
1699
  offset++;
2107
1700
  }
2108
1701
  }
2109
-
2110
1702
  for (var _i11 = 0; _i11 < sizeBitsData.length; ++_i11) {
2111
1703
  sizeBits[_i11] = sizeBitsData.charCodeAt(_i11) - 65;
2112
1704
  }
2113
-
2114
1705
  dictionary.set(dict);
2115
1706
  }
2116
-
2117
1707
  {
2118
1708
  var dictionaryData = new Int8Array(122784);
2119
1709
  var dictionarySizeBits = new Int32Array(25);
@@ -2155,31 +1745,27 @@ var makeBrotliDecode = function makeBrotliDecode() {
2155
1745
  return 1;
2156
1746
  }
2157
1747
 
2158
- function flipBuffer(buffer) {}
1748
+ function flipBuffer(buffer) {
1749
+ }
2159
1750
 
2160
1751
  function toUsAsciiBytes(src) {
2161
1752
  var n = src.length;
2162
1753
  var result = new Int8Array(n);
2163
-
2164
1754
  for (var i = 0; i < n; ++i) {
2165
1755
  result[i] = src.charCodeAt(i);
2166
1756
  }
2167
-
2168
1757
  return result;
2169
1758
  }
2170
1759
 
2171
1760
  function decode(bytes, options) {
2172
1761
  var s = new State();
2173
1762
  initState(s, new InputStream(bytes));
2174
-
2175
1763
  if (options) {
2176
1764
  var customDictionary = options['customDictionary'];
2177
1765
  if (customDictionary) attachDictionaryChunk(s, customDictionary);
2178
1766
  }
2179
-
2180
1767
  var totalOutput = 0;
2181
1768
  var chunks = [];
2182
-
2183
1769
  while (true) {
2184
1770
  var chunk = new Int8Array(16384);
2185
1771
  chunks.push(chunk);
@@ -2191,28 +1777,22 @@ var makeBrotliDecode = function makeBrotliDecode() {
2191
1777
  totalOutput += s.outputUsed;
2192
1778
  if (s.outputUsed < 16384) break;
2193
1779
  }
2194
-
2195
1780
  close(s);
2196
1781
  var result = new Int8Array(totalOutput);
2197
1782
  var offset = 0;
2198
-
2199
1783
  for (var i = 0; i < chunks.length; ++i) {
2200
1784
  var _chunk = chunks[i];
2201
1785
  var end = min(totalOutput, offset + 16384);
2202
1786
  var len = end - offset;
2203
-
2204
1787
  if (len < 16384) {
2205
1788
  result.set(_chunk.subarray(0, len), offset);
2206
1789
  } else {
2207
1790
  result.set(_chunk, offset);
2208
1791
  }
2209
-
2210
1792
  offset += len;
2211
1793
  }
2212
-
2213
1794
  return result;
2214
1795
  }
2215
-
2216
1796
  return decode;
2217
1797
  };
2218
1798