hyperbook 0.72.2 → 0.73.0

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.
@@ -0,0 +1,1538 @@
1
+ var UZIP = {};
2
+
3
+ (function () {
4
+ var B = {
5
+ readUshort: function (buff, p) {
6
+ return buff[p] | (buff[p + 1] << 8);
7
+ },
8
+ writeUshort: function (buff, p, n) {
9
+ buff[p] = n & 255;
10
+ buff[p + 1] = (n >> 8) & 255;
11
+ },
12
+ readUint: function (buff, p) {
13
+ return (
14
+ buff[p + 3] * (256 * 256 * 256) +
15
+ ((buff[p + 2] << 16) | (buff[p + 1] << 8) | buff[p])
16
+ );
17
+ },
18
+ writeUint: function (buff, p, n) {
19
+ buff[p] = n & 255;
20
+ buff[p + 1] = (n >> 8) & 255;
21
+ buff[p + 2] = (n >> 16) & 255;
22
+ buff[p + 3] = (n >> 24) & 255;
23
+ },
24
+ readASCII: function (buff, p, l) {
25
+ var s = "";
26
+ for (var i = 0; i < l; i++) s += String.fromCharCode(buff[p + i]);
27
+ return s;
28
+ },
29
+ writeASCII: function (data, p, s) {
30
+ for (var i = 0; i < s.length; i++) data[p + i] = s.charCodeAt(i);
31
+ },
32
+ pad: function (n) {
33
+ return n.length < 2 ? "0" + n : n;
34
+ },
35
+ readIBM: function (buff, p, l) {
36
+ var codes = [
37
+ 0xc7, 0xfc, 0xe9, 0xe2, 0xe4, 0xe0, 0xe5, 0xe7, 0xea, 0xeb, 0xe8, 0xef,
38
+ 0xee, 0xec, 0xc4, 0xc5, 0xc9, 0xe6, 0xc6, 0xf4, 0xf6, 0xf2, 0xfb, 0xf9,
39
+ 0xff, 0xd6, 0xdc, 0xa2, 0xa3, 0xa5, 0xa7, 0x192, 0xe1, 0xed, 0xf3, 0xfa,
40
+ 0xf1, 0xd1, 0xaa, 0xba, 0xbf, 0x2310, 0xac, 0xbd, 0xbc, 0xa1, 0xab,
41
+ 0xbb,
42
+ ];
43
+ var out = "";
44
+ for (var i = 0; i < l; i++) {
45
+ var cc = buff[p + i];
46
+ if (cc < 0x80) cc = cc;
47
+ else if (cc < 0xb0) cc = codes[cc - 0x80];
48
+ else return null;
49
+ out += String.fromCharCode(cc);
50
+ }
51
+ return out;
52
+ },
53
+ readUTF8: function (buff, p, l) {
54
+ var s = "",
55
+ ns;
56
+ for (var i = 0; i < l; i++) s += "%" + B.pad(buff[p + i].toString(16));
57
+ try {
58
+ ns = decodeURIComponent(s);
59
+ } catch (e) {
60
+ return B.readASCII(buff, p, l);
61
+ }
62
+ return ns;
63
+ },
64
+ writeUTF8: function (buff, p, str) {
65
+ var strl = str.length,
66
+ i = 0;
67
+ for (var ci = 0; ci < strl; ci++) {
68
+ var code = str.charCodeAt(ci);
69
+ if ((code & (0xffffffff - (1 << 7) + 1)) == 0) {
70
+ buff[p + i] = code;
71
+ i++;
72
+ } else if ((code & (0xffffffff - (1 << 11) + 1)) == 0) {
73
+ buff[p + i] = 192 | (code >> 6);
74
+ buff[p + i + 1] = 128 | ((code >> 0) & 63);
75
+ i += 2;
76
+ } else if ((code & (0xffffffff - (1 << 16) + 1)) == 0) {
77
+ buff[p + i] = 224 | (code >> 12);
78
+ buff[p + i + 1] = 128 | ((code >> 6) & 63);
79
+ buff[p + i + 2] = 128 | ((code >> 0) & 63);
80
+ i += 3;
81
+ } else if ((code & (0xffffffff - (1 << 21) + 1)) == 0) {
82
+ buff[p + i] = 240 | (code >> 18);
83
+ buff[p + i + 1] = 128 | ((code >> 12) & 63);
84
+ buff[p + i + 2] = 128 | ((code >> 6) & 63);
85
+ buff[p + i + 3] = 128 | ((code >> 0) & 63);
86
+ i += 4;
87
+ } else throw "e";
88
+ }
89
+ return i;
90
+ },
91
+ sizeUTF8: function (str) {
92
+ var strl = str.length,
93
+ i = 0;
94
+ for (var ci = 0; ci < strl; ci++) {
95
+ var code = str.charCodeAt(ci);
96
+ if ((code & (0xffffffff - (1 << 7) + 1)) == 0) {
97
+ i++;
98
+ } else if ((code & (0xffffffff - (1 << 11) + 1)) == 0) {
99
+ i += 2;
100
+ } else if ((code & (0xffffffff - (1 << 16) + 1)) == 0) {
101
+ i += 3;
102
+ } else if ((code & (0xffffffff - (1 << 21) + 1)) == 0) {
103
+ i += 4;
104
+ } else throw "e";
105
+ }
106
+ return i;
107
+ },
108
+ };
109
+
110
+ var crc = {
111
+ table: (function () {
112
+ var tab = new Uint32Array(256);
113
+ for (var n = 0; n < 256; n++) {
114
+ var c = n;
115
+ for (var k = 0; k < 8; k++) {
116
+ if (c & 1) c = 0xedb88320 ^ (c >>> 1);
117
+ else c = c >>> 1;
118
+ }
119
+ tab[n] = c;
120
+ }
121
+ return tab;
122
+ })(),
123
+ update: function (c, buf, off, len) {
124
+ for (var i = 0; i < len; i++)
125
+ c = crc.table[(c ^ buf[off + i]) & 0xff] ^ (c >>> 8);
126
+ return c;
127
+ },
128
+ crc: function (b, o, l) {
129
+ return crc.update(0xffffffff, b, o, l) ^ 0xffffffff;
130
+ },
131
+ };
132
+
133
+ function adler(data, o, len) {
134
+ var a = 1,
135
+ b = 0;
136
+ var off = o,
137
+ end = o + len;
138
+ while (off < end) {
139
+ var eend = Math.min(off + 5552, end);
140
+ while (off < eend) {
141
+ a += data[off++];
142
+ b += a;
143
+ }
144
+ a = a % 65521;
145
+ b = b % 65521;
146
+ }
147
+ return (b << 16) | a;
148
+ }
149
+
150
+ function parseTar(data) {
151
+ var off = 0,
152
+ out = {};
153
+ while (off + 1024 < data.length) {
154
+ var no = off;
155
+ while (data[no] != 0) no++;
156
+ var nam = B.readASCII(data, off, no - off);
157
+ off += 100;
158
+ off += 24;
159
+ var sz = parseInt(B.readASCII(data, off, 12), 8);
160
+ off += 12;
161
+ var tm = parseInt(B.readASCII(data, off, 12), 8);
162
+ off += 12;
163
+ // console.log(nam, sz, tm);
164
+ off += 8 + 1 + 100;
165
+ off += 6 + 2 + 32 + 32 + 8 + 8 + 155 + 12;
166
+
167
+ out[nam] = data.slice(off, off + sz);
168
+ off += sz;
169
+
170
+ var ex = off & 0x1ff;
171
+ if (ex != 0) off += 512 - ex;
172
+ }
173
+ return out;
174
+ }
175
+ /*
176
+ var parse7z = function() {
177
+ var rUs = B.readUshort, rUi = B.readUint;
178
+ var data, off;
179
+
180
+ function NUMBER() {
181
+ var v = data[off++];
182
+ if ((v&128)==0) return v;
183
+ else if((v& 64)==0) return ((((((v&63)<<8)+data[off++]) ) ) );
184
+ else if((v& 32)==0) return ((((((v&31)<<8)+data[off++])<<8)+data[off++]) );
185
+ else if((v& 16)==0) return ((((((v&31)<<8)+data[off++])<<8)+data[off++])<<8)+data[off++];
186
+ else throw v.toString(2);
187
+ }
188
+
189
+ function readProp() {
190
+ var ID = data[off++]; console.log(ID.toString(16));
191
+
192
+ if (ID==0x17) readProp(off); // EncodedHeader
193
+ else if(ID==0x06) { // PackInfo
194
+ var pos = NUMBER();
195
+ var cnt = NUMBER(); if(cnt!=1) throw "e";
196
+
197
+ console.log(pos, cnt);
198
+
199
+ console.log(data.slice(off));
200
+
201
+ var siz = readProp(); console.log(siz);
202
+
203
+ console.log(data.slice(off));
204
+
205
+ var crc = readProp(); console.log(crc);
206
+
207
+
208
+ console.log(data.slice(off));
209
+ }
210
+ else if(ID==0x09) { // Size
211
+ return NUMBER();
212
+ }
213
+ else throw ID;
214
+
215
+ }
216
+
217
+ function pars(_d) {
218
+ data = _d; off=8;
219
+
220
+ var sign = [55, 122, 188, 175, 39, 28, 0, 4];
221
+ for(var i=0; i<8; i++) if(data[i]!=sign[i]) throw "e";
222
+
223
+ var crc = rUi(data,off); off+=4;
224
+
225
+ var nho = rUi(data,off); off+=8;
226
+ var nhs = rUi(data,off); off+=8;
227
+ var nhc = rUi(data,off); off+=4;
228
+ console.log(nho,nhs,nhc);
229
+
230
+ //var hdr=data[off++];
231
+
232
+ //console.log(hdr);
233
+
234
+ off = 32+nho;
235
+ readProp();
236
+
237
+
238
+
239
+
240
+
241
+ console.log(data.slice(off)); throw "e";
242
+ }
243
+
244
+ return pars;
245
+ }();
246
+ */
247
+
248
+ function parse(buf, onlyNames) {
249
+ // ArrayBuffer
250
+ var rUs = B.readUshort,
251
+ rUi = B.readUint,
252
+ o = 0,
253
+ out = {};
254
+ var data = new Uint8Array(buf);
255
+ if (data.length > 257 + 6 && B.readASCII(data, 257, 6) == "ustar ")
256
+ return parseTar(data);
257
+ //if(B.readASCII(data,0,2)=="7z") return parse7z(data);
258
+
259
+ var eocd = data.length - 4;
260
+
261
+ while (rUi(data, eocd) != 0x06054b50) eocd--;
262
+
263
+ var o = eocd;
264
+ o += 4; // sign = 0x06054b50
265
+ o += 4; // disks = 0;
266
+ var cnu = rUs(data, o);
267
+ o += 2;
268
+ var cnt = rUs(data, o);
269
+ o += 2;
270
+
271
+ var csize = rUi(data, o);
272
+ o += 4;
273
+ var coffs = rUi(data, o);
274
+ o += 4;
275
+
276
+ o = coffs;
277
+ for (var i = 0; i < cnu; i++) {
278
+ var sign = rUi(data, o);
279
+ o += 4;
280
+ o += 4; // versions;
281
+ o += 4; // flag + compr
282
+ var time = _readTime(data, o);
283
+ o += 4; // time
284
+
285
+ var crc32 = rUi(data, o);
286
+ o += 4;
287
+ var csize = rUi(data, o);
288
+ o += 4;
289
+ var usize = rUi(data, o);
290
+ o += 4;
291
+
292
+ var nl = rUs(data, o),
293
+ el = rUs(data, o + 2),
294
+ cl = rUs(data, o + 4);
295
+ o += 6; // name, extra, comment
296
+ o += 8; // disk, attribs
297
+ var roff = rUi(data, o);
298
+ o += 4;
299
+
300
+ o += nl;
301
+
302
+ var lo = 0;
303
+ while (lo < el) {
304
+ var id = rUs(data, o + lo);
305
+ lo += 2;
306
+ var sz = rUs(data, o + lo);
307
+ lo += 2;
308
+ if (id == 1) {
309
+ // Zip64
310
+ if (usize == 0xffffffff) {
311
+ usize = rUi(data, o + lo);
312
+ lo += 8;
313
+ }
314
+ if (csize == 0xffffffff) {
315
+ csize = rUi(data, o + lo);
316
+ lo += 8;
317
+ }
318
+ if (roff == 0xffffffff) {
319
+ roff = rUi(data, o + lo);
320
+ lo += 8;
321
+ }
322
+ } else lo += sz;
323
+ }
324
+
325
+ o += el + cl;
326
+
327
+ _readLocal(data, roff, out, csize, usize, onlyNames);
328
+ }
329
+ //console.log(out);
330
+ return out;
331
+ }
332
+
333
+ function _readTime(data, o) {
334
+ var time = B.readUshort(data, o),
335
+ date = B.readUshort(data, o + 2);
336
+ var year = 1980 + (date >>> 9);
337
+ var mont = (date >>> 5) & 15;
338
+ var day = date & 31;
339
+ //console.log(year,mont,day);
340
+
341
+ var hour = time >>> 11;
342
+ var minu = (time >>> 5) & 63;
343
+ var seco = 2 * (time & 31);
344
+
345
+ var stamp = new Date(year, mont, day, hour, minu, seco).getTime();
346
+
347
+ //console.log(date,time);
348
+ return stamp;
349
+ }
350
+ function _writeTime(data, o, stamp) {
351
+ var dt = new Date(stamp);
352
+ var date =
353
+ ((dt.getFullYear() - 1980) << 9) |
354
+ ((dt.getMonth() + 1) << 5) |
355
+ dt.getDate();
356
+ var time =
357
+ (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >>> 1);
358
+ B.writeUshort(data, o, time);
359
+ B.writeUshort(data, o + 2, date);
360
+ }
361
+
362
+ function _readLocal(data, o, out, csize, usize, onlyNames) {
363
+ var rUs = B.readUshort,
364
+ rUi = B.readUint;
365
+ var sign = rUi(data, o);
366
+ o += 4;
367
+ var ver = rUs(data, o);
368
+ o += 2;
369
+ var gpflg = rUs(data, o);
370
+ o += 2;
371
+ //if((gpflg&8)!=0) throw "unknown sizes";
372
+ var cmpr = rUs(data, o);
373
+ o += 2;
374
+
375
+ var time = _readTime(data, o);
376
+ o += 4;
377
+
378
+ var crc32 = rUi(data, o);
379
+ o += 4;
380
+ //var csize = rUi(data, o); o+=4;
381
+ //var usize = rUi(data, o); o+=4;
382
+ o += 8;
383
+
384
+ var nlen = rUs(data, o);
385
+ o += 2;
386
+ var elen = rUs(data, o);
387
+ o += 2;
388
+
389
+ var name =
390
+ (gpflg & 2048) == 0
391
+ ? B.readIBM(data, o, nlen)
392
+ : B.readUTF8(data, o, nlen);
393
+ if (name == null) name = B.readUTF8(data, o, nlen);
394
+ o += nlen; //console.log(name);
395
+ o += elen;
396
+
397
+ //console.log(sign.toString(16), ver, gpflg, cmpr, crc32.toString(16), "csize, usize", csize, usize, nlen, elen, name, o);
398
+ if (onlyNames) {
399
+ out[name] = { size: usize, csize: csize };
400
+ return;
401
+ }
402
+ var file = new Uint8Array(data.buffer, o);
403
+ if (gpflg & 1) {
404
+ out[name] = new Uint8Array(0);
405
+ alert("ZIPs with a password are not supported.", 3000);
406
+ } else if (cmpr == 0)
407
+ out[name] = new Uint8Array(file.buffer.slice(o, o + csize));
408
+ else if (cmpr == 8) {
409
+ var buf = new Uint8Array(usize);
410
+ inflateRaw(file, buf);
411
+ /*var nbuf = pako["inflateRaw"](file);
412
+ if(usize>8514000) {
413
+ //console.log(PUtils.readASCII(buf , 8514500, 500));
414
+ //console.log(PUtils.readASCII(nbuf, 8514500, 500));
415
+ }
416
+ for(var i=0; i<buf.length; i++) if(buf[i]!=nbuf[i]) { console.log(buf.length, nbuf.length, usize, i); throw "e"; }
417
+ */
418
+ out[name] = buf;
419
+ } else if (cmpr == 14 && window["LZMA"]) {
420
+ var vsn = rUs(file, 0);
421
+ var siz = rUs(file, 2);
422
+ if (siz != 5) throw "unknown LZMA header";
423
+
424
+ var prp = file[4];
425
+ var dictSize = rUi(file, 5);
426
+ var lc = prp % 9;
427
+ prp = ~~(prp / 9);
428
+ var lp = prp % 5;
429
+ var pb = ~~(prp / 5);
430
+ //console.log(vsn,siz,dictSize,lc,lp,pb);
431
+
432
+ //console.log(file);
433
+ var time = Date.now();
434
+ var buf = (out[name] = new Uint8Array(usize));
435
+
436
+ var dec = new window["LZMA"]["Decoder"]();
437
+ dec["setProperties"]({ dsz: dictSize, lc: lc, lp: lp, pb: pb });
438
+ dec["decodeBody"](new Uint8Array(data.buffer, o + 9), buf, usize);
439
+
440
+ //console.log(Date.now()-time);
441
+ } else throw "unknown compression method: " + cmpr;
442
+ }
443
+
444
+ function UStream(buf) {
445
+ this.buf = buf;
446
+ this.off = 0;
447
+ }
448
+ UStream.prototype["readByte"] = function () {
449
+ return this.buf[this.off++];
450
+ };
451
+ UStream.prototype["writeByte"] = function (b) {
452
+ this.buf[this.off++] = b;
453
+ };
454
+ UStream.prototype["writeBytes"] = function (a, s) {
455
+ a = new Uint8Array(
456
+ a.buffer,
457
+ a.byteOffset,
458
+ Math.min(a.length, this.buf.length - this.off),
459
+ );
460
+ this.buf.set(a, this.off);
461
+ this.off += a.length;
462
+ };
463
+
464
+ function inflateRaw(file, buf) {
465
+ return UZIP["F"]["inflate"](file, buf);
466
+ }
467
+ function inflate(file, buf) {
468
+ var CMF = file[0],
469
+ FLG = file[1];
470
+ if (CMF == 31 && FLG == 139) {
471
+ // GZIP
472
+ var CM = file[2],
473
+ FLG = file[3];
474
+ if (CM != 8) throw CM; /* 8 is DEFLATE */
475
+ var off = 4;
476
+ off += 4; // MTIME
477
+ off += 2; // XFL, OS
478
+ if ((FLG & 4) != 0) throw "e"; // FEXTRA
479
+ if ((FLG & 8) != 0) {
480
+ // FNAME
481
+ while (file[off] != 0) off++;
482
+ off++;
483
+ }
484
+ if ((FLG & 16) != 0) throw "e"; // FCOMMENT
485
+ if ((FLG & 2) != 0) throw "e"; // FHCR
486
+ return inflateRaw(
487
+ new Uint8Array(
488
+ file.buffer,
489
+ file.byteOffset + off,
490
+ file.length - off - 8,
491
+ ),
492
+ buf,
493
+ );
494
+ }
495
+ var CM = CMF & 15,
496
+ CINFO = CMF >>> 4;
497
+ //console.log(CM, CINFO,CMF,FLG);
498
+ return inflateRaw(
499
+ new Uint8Array(file.buffer, file.byteOffset + 2, file.length - 6),
500
+ buf,
501
+ );
502
+ }
503
+ function deflate(data, opts /*, buf, off*/) {
504
+ if (opts == null) opts = { level: 6 };
505
+ var off = 0,
506
+ buf = new Uint8Array(50 + Math.floor(data.length * 1.1));
507
+ buf[off] = 120;
508
+ buf[off + 1] = 156;
509
+ off += 2;
510
+ off = UZIP["F"]["deflateRaw"](data, buf, off, opts["level"]);
511
+ var crc = adler(data, 0, data.length);
512
+ buf[off + 0] = (crc >>> 24) & 255;
513
+ buf[off + 1] = (crc >>> 16) & 255;
514
+ buf[off + 2] = (crc >>> 8) & 255;
515
+ buf[off + 3] = (crc >>> 0) & 255;
516
+ return new Uint8Array(buf.buffer, 0, off + 4);
517
+ }
518
+ function deflateRaw(data, opts) {
519
+ if (opts == null) opts = { level: 6 };
520
+ var buf = new Uint8Array(50 + Math.floor(data.length * 1.1));
521
+ var off = UZIP["F"]["deflateRaw"](data, buf, off, opts["level"]);
522
+ return new Uint8Array(buf.buffer, 0, off);
523
+ }
524
+
525
+ function encode(obj, noCmpr) {
526
+ if (noCmpr == null) noCmpr = false;
527
+ var tot = 0,
528
+ wUi = B.writeUint,
529
+ wUs = B.writeUshort;
530
+ var zpd = {};
531
+ for (var p in obj) {
532
+ var cpr = !_noNeed(p) && !noCmpr,
533
+ buf = obj[p],
534
+ cr = crc.crc(buf, 0, buf.length);
535
+ zpd[p] = {
536
+ cpr: cpr,
537
+ usize: buf.length,
538
+ crc: cr,
539
+ file: cpr ? deflateRaw(buf) : buf,
540
+ };
541
+ }
542
+
543
+ for (var p in zpd) tot += zpd[p].file.length + 30 + 46 + 2 * B.sizeUTF8(p);
544
+ tot += 22;
545
+
546
+ var data = new Uint8Array(tot),
547
+ o = 0;
548
+ var fof = [];
549
+
550
+ for (var p in zpd) {
551
+ var file = zpd[p];
552
+ fof.push(o);
553
+ o = _writeHeader(data, o, p, file, 0);
554
+ }
555
+ var i = 0,
556
+ ioff = o;
557
+ for (var p in zpd) {
558
+ var file = zpd[p];
559
+ fof.push(o);
560
+ o = _writeHeader(data, o, p, file, 1, fof[i++]);
561
+ }
562
+ var csize = o - ioff;
563
+
564
+ wUi(data, o, 0x06054b50);
565
+ o += 4;
566
+ o += 4; // disks
567
+ wUs(data, o, i);
568
+ o += 2;
569
+ wUs(data, o, i);
570
+ o += 2; // number of c d records
571
+ wUi(data, o, csize);
572
+ o += 4;
573
+ wUi(data, o, ioff);
574
+ o += 4;
575
+ o += 2;
576
+ return data.buffer;
577
+ }
578
+ // no need to compress .PNG, .ZIP, .JPEG ....
579
+ function _noNeed(fn) {
580
+ var ext = fn.split(".").pop().toLowerCase();
581
+ return "png,jpg,jpeg,zip".indexOf(ext) != -1;
582
+ }
583
+
584
+ function _writeHeader(data, o, p, obj, t, roff) {
585
+ // it is a task of a user to provide valid file names
586
+ //var bad = "#%&{}\<>*?$'\":@+`|=";
587
+ //for(var i=0; i<p.length; i++) if(bad.indexOf(p[i])!=-1) p = p.slice(0,i)+"_"+p.slice(i+1);
588
+
589
+ var wUi = B.writeUint,
590
+ wUs = B.writeUshort;
591
+ var file = obj.file;
592
+
593
+ wUi(data, o, t == 0 ? 0x04034b50 : 0x02014b50);
594
+ o += 4; // sign
595
+ if (t == 1) o += 2; // ver made by
596
+ wUs(data, o, 20);
597
+ o += 2; // ver
598
+ wUs(data, o, 2048);
599
+ o += 2; // gflip
600
+ wUs(data, o, obj.cpr ? 8 : 0);
601
+ o += 2; // cmpr
602
+
603
+ _writeTime(data, o, Date.now());
604
+ o += 4; //wUi(data, o, 0); o+=4; // time
605
+ wUi(data, o, obj.crc);
606
+ o += 4; // crc32
607
+ wUi(data, o, file.length);
608
+ o += 4; // csize
609
+ wUi(data, o, obj.usize);
610
+ o += 4; // usize
611
+
612
+ wUs(data, o, B.sizeUTF8(p));
613
+ o += 2; // nlen
614
+ wUs(data, o, 0);
615
+ o += 2; // elen
616
+
617
+ if (t == 1) {
618
+ o += 2; // comment length
619
+ o += 2; // disk number
620
+ o += 6; // attributes
621
+ wUi(data, o, roff);
622
+ o += 4; // usize
623
+ }
624
+ var nlen = B.writeUTF8(data, o, p);
625
+ o += nlen;
626
+ if (t == 0) {
627
+ data.set(file, o);
628
+ o += file.length;
629
+ }
630
+ return o;
631
+ }
632
+
633
+ UZIP["crc"] = crc;
634
+ UZIP["adler"] = adler;
635
+
636
+ UZIP["inflate"] = inflate;
637
+ UZIP["inflateRaw"] = inflateRaw;
638
+ UZIP["deflate"] = deflate;
639
+ UZIP["deflateRaw"] = deflateRaw;
640
+ UZIP["parse"] = parse;
641
+ UZIP["encode"] = encode;
642
+ })();
643
+
644
+ (function () {
645
+ var U = (function () {
646
+ var u16 = Uint16Array,
647
+ u32 = Uint32Array;
648
+ return {
649
+ next_code: new u16(16),
650
+ bl_count: new u16(16),
651
+ ordr: [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15],
652
+ of0: [
653
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59,
654
+ 67, 83, 99, 115, 131, 163, 195, 227, 258, 999, 999, 999,
655
+ ],
656
+ exb: [
657
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4,
658
+ 5, 5, 5, 5, 0, 0, 0, 0,
659
+ ],
660
+ ldef: new u16(32),
661
+ df0: [
662
+ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385,
663
+ 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577,
664
+ 65535, 65535,
665
+ ],
666
+ dxb: [
667
+ 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10,
668
+ 10, 11, 11, 12, 12, 13, 13, 0, 0,
669
+ ],
670
+ ddef: new u32(32),
671
+ flmap: new u16(512),
672
+ fltree: [],
673
+ fdmap: new u16(32),
674
+ fdtree: [],
675
+ lmap: new u16(32768),
676
+ ltree: [],
677
+ ttree: [],
678
+ dmap: new u16(32768),
679
+ dtree: [],
680
+ imap: new u16(512),
681
+ itree: [],
682
+ //rev9 : new u16( 512)
683
+ rev15: new u16(1 << 15),
684
+ lhst: new u32(286),
685
+ dhst: new u32(30),
686
+ ihst: new u32(19),
687
+ lits: new u32(15000),
688
+ strt: new u16(1 << 16),
689
+ prev: new u16(1 << 15),
690
+ };
691
+ })();
692
+
693
+ function makeCodes(tree, MAX_BITS) {
694
+ // code, length
695
+ var max_code = tree.length;
696
+ var code, bits, n, i, len;
697
+
698
+ var bl_count = U.bl_count;
699
+ for (var i = 0; i <= MAX_BITS; i++) bl_count[i] = 0;
700
+ for (i = 1; i < max_code; i += 2) bl_count[tree[i]]++;
701
+
702
+ var next_code = U.next_code; // smallest code for each length
703
+
704
+ code = 0;
705
+ bl_count[0] = 0;
706
+ for (bits = 1; bits <= MAX_BITS; bits++) {
707
+ code = (code + bl_count[bits - 1]) << 1;
708
+ next_code[bits] = code;
709
+ }
710
+
711
+ for (n = 0; n < max_code; n += 2) {
712
+ len = tree[n + 1];
713
+ if (len != 0) {
714
+ tree[n] = next_code[len];
715
+ next_code[len]++;
716
+ }
717
+ }
718
+ }
719
+ function codes2map(tree, MAX_BITS, map) {
720
+ var max_code = tree.length;
721
+ var r15 = U.rev15;
722
+ for (var i = 0; i < max_code; i += 2)
723
+ if (tree[i + 1] != 0) {
724
+ var lit = i >> 1;
725
+ var cl = tree[i + 1],
726
+ val = (lit << 4) | cl; // : (0x8000 | (U.of0[lit-257]<<7) | (U.exb[lit-257]<<4) | cl);
727
+ var rest = MAX_BITS - cl,
728
+ i0 = tree[i] << rest,
729
+ i1 = i0 + (1 << rest);
730
+ //tree[i]=r15[i0]>>>(15-MAX_BITS);
731
+ while (i0 != i1) {
732
+ var p0 = r15[i0] >>> (15 - MAX_BITS);
733
+ map[p0] = val;
734
+ i0++;
735
+ }
736
+ }
737
+ }
738
+ function revCodes(tree, MAX_BITS) {
739
+ var r15 = U.rev15,
740
+ imb = 15 - MAX_BITS;
741
+ for (var i = 0; i < tree.length; i += 2) {
742
+ var i0 = tree[i] << (MAX_BITS - tree[i + 1]);
743
+ tree[i] = r15[i0] >>> imb;
744
+ }
745
+ }
746
+
747
+ // used only in deflate
748
+ function _putsE(dt, pos, val) {
749
+ val = val << (pos & 7);
750
+ var o = pos >>> 3;
751
+ dt[o] |= val;
752
+ dt[o + 1] |= val >>> 8;
753
+ }
754
+ function _putsF(dt, pos, val) {
755
+ val = val << (pos & 7);
756
+ var o = pos >>> 3;
757
+ dt[o] |= val;
758
+ dt[o + 1] |= val >>> 8;
759
+ dt[o + 2] |= val >>> 16;
760
+ }
761
+
762
+ function _bitsE(dt, pos, length) {
763
+ return (
764
+ ((dt[pos >>> 3] | (dt[(pos >>> 3) + 1] << 8)) >>> (pos & 7)) &
765
+ ((1 << length) - 1)
766
+ );
767
+ }
768
+ function _bitsF(dt, pos, length) {
769
+ return (
770
+ ((dt[pos >>> 3] |
771
+ (dt[(pos >>> 3) + 1] << 8) |
772
+ (dt[(pos >>> 3) + 2] << 16)) >>>
773
+ (pos & 7)) &
774
+ ((1 << length) - 1)
775
+ );
776
+ }
777
+
778
+ function _get17(dt, pos) {
779
+ // return at least 17 meaningful bytes
780
+ return (
781
+ (dt[pos >>> 3] |
782
+ (dt[(pos >>> 3) + 1] << 8) |
783
+ (dt[(pos >>> 3) + 2] << 16)) >>>
784
+ (pos & 7)
785
+ );
786
+ }
787
+ function _get25(dt, pos) {
788
+ // return at least 17 meaningful bytes
789
+ return (
790
+ (dt[pos >>> 3] |
791
+ (dt[(pos >>> 3) + 1] << 8) |
792
+ (dt[(pos >>> 3) + 2] << 16) |
793
+ (dt[(pos >>> 3) + 3] << 24)) >>>
794
+ (pos & 7)
795
+ );
796
+ }
797
+
798
+ (function () {
799
+ var len = 1 << 15;
800
+ for (var i = 0; i < len; i++) {
801
+ var x = i;
802
+ x = ((x & 0xaaaaaaaa) >>> 1) | ((x & 0x55555555) << 1);
803
+ x = ((x & 0xcccccccc) >>> 2) | ((x & 0x33333333) << 2);
804
+ x = ((x & 0xf0f0f0f0) >>> 4) | ((x & 0x0f0f0f0f) << 4);
805
+ x = ((x & 0xff00ff00) >>> 8) | ((x & 0x00ff00ff) << 8);
806
+ U.rev15[i] = ((x >>> 16) | (x << 16)) >>> 17;
807
+ }
808
+
809
+ function pushV(tgt, n, sv) {
810
+ while (n-- != 0) tgt.push(0, sv);
811
+ }
812
+
813
+ for (var i = 0; i < 32; i++) {
814
+ U.ldef[i] = (U.of0[i] << 3) | U.exb[i];
815
+ U.ddef[i] = (U.df0[i] << 4) | U.dxb[i];
816
+ }
817
+
818
+ pushV(U.fltree, 144, 8);
819
+ pushV(U.fltree, 255 - 143, 9);
820
+ pushV(U.fltree, 279 - 255, 7);
821
+ pushV(U.fltree, 287 - 279, 8);
822
+ /*
823
+ var i = 0;
824
+ for(; i<=143; i++) U.fltree.push(0,8);
825
+ for(; i<=255; i++) U.fltree.push(0,9);
826
+ for(; i<=279; i++) U.fltree.push(0,7);
827
+ for(; i<=287; i++) U.fltree.push(0,8);
828
+ */
829
+ makeCodes(U.fltree, 9);
830
+ codes2map(U.fltree, 9, U.flmap);
831
+ revCodes(U.fltree, 9);
832
+
833
+ pushV(U.fdtree, 32, 5);
834
+ //for(i=0;i<32; i++) U.fdtree.push(0,5);
835
+ makeCodes(U.fdtree, 5);
836
+ codes2map(U.fdtree, 5, U.fdmap);
837
+ revCodes(U.fdtree, 5);
838
+
839
+ pushV(U.itree, 19, 0);
840
+ pushV(U.ltree, 286, 0);
841
+ pushV(U.dtree, 30, 0);
842
+ pushV(U.ttree, 320, 0);
843
+ /*
844
+ for(var i=0; i< 19; i++) U.itree.push(0,0);
845
+ for(var i=0; i<286; i++) U.ltree.push(0,0);
846
+ for(var i=0; i< 30; i++) U.dtree.push(0,0);
847
+ for(var i=0; i<320; i++) U.ttree.push(0,0);
848
+ */
849
+ })();
850
+
851
+ function deflateRaw(data, out, opos, lvl) {
852
+ var opts = [
853
+ /*
854
+ ush good_length; /* reduce lazy search above this match length
855
+ ush max_lazy; /* do not perform lazy search above this match length
856
+ ush nice_length; /* quit search above this match length
857
+ */
858
+ /* good lazy nice chain */
859
+ /* 0 */ [0, 0, 0, 0, 0] /* store only */,
860
+ /* 1 */ [4, 4, 8, 4, 0] /* max speed, no lazy matches */,
861
+ /* 2 */ [4, 5, 16, 8, 0],
862
+ /* 3 */ [4, 6, 16, 16, 0],
863
+
864
+ /* 4 */ [4, 10, 16, 32, 0] /* lazy matches */,
865
+ /* 5 */ [8, 16, 32, 32, 0],
866
+ /* 6 */ [8, 16, 128, 128, 0],
867
+ /* 7 */ [8, 32, 128, 256, 0],
868
+ /* 8 */ [32, 128, 258, 1024, 1],
869
+ /* 9 */ [32, 258, 258, 4096, 1],
870
+ ]; /* max compression */
871
+
872
+ var opt = opts[lvl];
873
+
874
+ //var U = UZIP.F.U, goodIndex = UZIP.F._goodIndex, hash = UZIP.F._hash, putsE = UZIP.F._putsE;
875
+ var i = 0,
876
+ pos = opos << 3,
877
+ cvrd = 0,
878
+ dlen = data.length;
879
+
880
+ if (lvl == 0) {
881
+ while (i < dlen) {
882
+ var len = Math.min(0xffff, dlen - i);
883
+ _putsE(out, pos, i + len == dlen ? 1 : 0);
884
+ pos = _copyExact(data, i, len, out, pos + 8);
885
+ i += len;
886
+ }
887
+ return pos >>> 3;
888
+ }
889
+
890
+ var lits = U.lits,
891
+ strt = U.strt,
892
+ prev = U.prev,
893
+ li = 0,
894
+ lc = 0,
895
+ bs = 0,
896
+ ebits = 0,
897
+ c = 0,
898
+ nc = 0; // last_item, literal_count, block_start
899
+ if (dlen > 2) {
900
+ nc = _hash(data, 0);
901
+ strt[nc] = 0;
902
+ }
903
+ var nmch = 0,
904
+ nmci = 0;
905
+
906
+ for (i = 0; i < dlen; i++) {
907
+ c = nc;
908
+ //*
909
+ if (i + 1 < dlen - 2) {
910
+ nc = _hash(data, i + 1);
911
+ var ii = (i + 1) & 0x7fff;
912
+ prev[ii] = strt[nc];
913
+ strt[nc] = ii;
914
+ } //*/
915
+ if (cvrd <= i) {
916
+ if ((li > 14000 || lc > 26697) && dlen - i > 100) {
917
+ if (cvrd < i) {
918
+ lits[li] = i - cvrd;
919
+ li += 2;
920
+ cvrd = i;
921
+ }
922
+ pos = _writeBlock(
923
+ i == dlen - 1 || cvrd == dlen ? 1 : 0,
924
+ lits,
925
+ li,
926
+ ebits,
927
+ data,
928
+ bs,
929
+ i - bs,
930
+ out,
931
+ pos,
932
+ );
933
+ li = lc = ebits = 0;
934
+ bs = i;
935
+ }
936
+
937
+ var mch = 0;
938
+ //if(nmci==i) mch= nmch; else
939
+ if (i < dlen - 2)
940
+ mch = _bestMatch(
941
+ data,
942
+ i,
943
+ prev,
944
+ c,
945
+ Math.min(opt[2], dlen - i),
946
+ opt[3],
947
+ );
948
+ /*
949
+ if(mch!=0 && opt[4]==1 && (mch>>>16)<opt[1] && i+1<dlen-2) {
950
+ nmch = UZIP.F._bestMatch(data, i+1, prev, nc, opt[2], opt[3]); nmci=i+1;
951
+ //var mch2 = UZIP.F._bestMatch(data, i+2, prev, nnc); //nmci=i+1;
952
+ if((nmch>>>16)>(mch>>>16)) mch=0;
953
+ }//*/
954
+ var len = mch >>> 16,
955
+ dst = mch & 0xffff; //if(i-dst<0) throw "e";
956
+ if (mch != 0) {
957
+ var len = mch >>> 16,
958
+ dst = mch & 0xffff; //if(i-dst<0) throw "e";
959
+ var lgi = _goodIndex(len, U.of0);
960
+ U.lhst[257 + lgi]++;
961
+ var dgi = _goodIndex(dst, U.df0);
962
+ U.dhst[dgi]++;
963
+ ebits += U.exb[lgi] + U.dxb[dgi];
964
+ lits[li] = (len << 23) | (i - cvrd);
965
+ lits[li + 1] = (dst << 16) | (lgi << 8) | dgi;
966
+ li += 2;
967
+ cvrd = i + len;
968
+ } else {
969
+ U.lhst[data[i]]++;
970
+ }
971
+ lc++;
972
+ }
973
+ }
974
+ if (bs != i || data.length == 0) {
975
+ if (cvrd < i) {
976
+ lits[li] = i - cvrd;
977
+ li += 2;
978
+ cvrd = i;
979
+ }
980
+ pos = _writeBlock(1, lits, li, ebits, data, bs, i - bs, out, pos);
981
+ li = 0;
982
+ lc = 0;
983
+ li = lc = ebits = 0;
984
+ bs = i;
985
+ }
986
+ while ((pos & 7) != 0) pos++;
987
+ return pos >>> 3;
988
+ }
989
+ function _bestMatch(data, i, prev, c, nice, chain) {
990
+ var ci = i & 0x7fff,
991
+ pi = prev[ci];
992
+ //console.log("----", i);
993
+ var dif = (ci - pi + (1 << 15)) & 0x7fff;
994
+ if (pi == ci || c != _hash(data, i - dif)) return 0;
995
+ var tl = 0,
996
+ td = 0; // top length, top distance
997
+ var dlim = Math.min(0x7fff, i);
998
+ while (
999
+ dif <= dlim &&
1000
+ --chain != 0 &&
1001
+ pi != ci /*&& c==UZIP.F._hash(data,i-dif)*/
1002
+ ) {
1003
+ if (tl == 0 || data[i + tl] == data[i + tl - dif]) {
1004
+ var cl = _howLong(data, i, dif);
1005
+ if (cl > tl) {
1006
+ tl = cl;
1007
+ td = dif;
1008
+ if (tl >= nice) break; //*
1009
+ if (dif + 2 < cl) cl = dif + 2;
1010
+ var maxd = 0; // pi does not point to the start of the word
1011
+ for (var j = 0; j < cl - 2; j++) {
1012
+ var ei = (i - dif + j + (1 << 15)) & 0x7fff;
1013
+ var li = prev[ei];
1014
+ var curd = (ei - li + (1 << 15)) & 0x7fff;
1015
+ if (curd > maxd) {
1016
+ maxd = curd;
1017
+ pi = ei;
1018
+ }
1019
+ } //*/
1020
+ }
1021
+ }
1022
+
1023
+ ci = pi;
1024
+ pi = prev[ci];
1025
+ dif += (ci - pi + (1 << 15)) & 0x7fff;
1026
+ }
1027
+ return (tl << 16) | td;
1028
+ }
1029
+ function _howLong(data, i, dif) {
1030
+ if (
1031
+ data[i] != data[i - dif] ||
1032
+ data[i + 1] != data[i + 1 - dif] ||
1033
+ data[i + 2] != data[i + 2 - dif]
1034
+ )
1035
+ return 0;
1036
+ var oi = i,
1037
+ l = Math.min(data.length, i + 258);
1038
+ i += 3;
1039
+ //while(i+4<l && data[i]==data[i-dif] && data[i+1]==data[i+1-dif] && data[i+2]==data[i+2-dif] && data[i+3]==data[i+3-dif]) i+=4;
1040
+ while (i < l && data[i] == data[i - dif]) i++;
1041
+ return i - oi;
1042
+ }
1043
+ function _hash(data, i) {
1044
+ return (((data[i] << 8) | data[i + 1]) + (data[i + 2] << 4)) & 0xffff;
1045
+ //var hash_shift = 0, hash_mask = 255;
1046
+ //var h = data[i+1] % 251;
1047
+ //h = (((h << 8) + data[i+2]) % 251);
1048
+ //h = (((h << 8) + data[i+2]) % 251);
1049
+ //h = ((h<<hash_shift) ^ (c) ) & hash_mask;
1050
+ //return h | (data[i]<<8);
1051
+ //return (data[i] | (data[i+1]<<8));
1052
+ }
1053
+ //UZIP.___toth = 0;
1054
+ //UZIP.saved = 0;
1055
+ function _writeBlock(BFINAL, lits, li, ebits, data, o0, l0, out, pos) {
1056
+ //var U = UZIP.F.U, putsF = UZIP.F._putsF, putsE = UZIP.F._putsE;
1057
+
1058
+ //*
1059
+ var T, ML, MD, MH, numl, numd, numh, lset, dset;
1060
+ U.lhst[256]++;
1061
+ T = getTrees();
1062
+ ML = T[0];
1063
+ MD = T[1];
1064
+ MH = T[2];
1065
+ numl = T[3];
1066
+ numd = T[4];
1067
+ numh = T[5];
1068
+ lset = T[6];
1069
+ dset = T[7];
1070
+
1071
+ var cstSize =
1072
+ (((pos + 3) & 7) == 0 ? 0 : 8 - ((pos + 3) & 7)) + 32 + (l0 << 3);
1073
+ var fxdSize =
1074
+ ebits + contSize(U.fltree, U.lhst) + contSize(U.fdtree, U.dhst);
1075
+ var dynSize = ebits + contSize(U.ltree, U.lhst) + contSize(U.dtree, U.dhst);
1076
+ dynSize +=
1077
+ 14 +
1078
+ 3 * numh +
1079
+ contSize(U.itree, U.ihst) +
1080
+ (U.ihst[16] * 2 + U.ihst[17] * 3 + U.ihst[18] * 7);
1081
+
1082
+ for (var j = 0; j < 286; j++) U.lhst[j] = 0;
1083
+ for (var j = 0; j < 30; j++) U.dhst[j] = 0;
1084
+ for (var j = 0; j < 19; j++) U.ihst[j] = 0;
1085
+ //*/
1086
+ var BTYPE =
1087
+ cstSize < fxdSize && cstSize < dynSize ? 0 : fxdSize < dynSize ? 1 : 2;
1088
+ _putsF(out, pos, BFINAL);
1089
+ _putsF(out, pos + 1, BTYPE);
1090
+ pos += 3;
1091
+
1092
+ var opos = pos;
1093
+ if (BTYPE == 0) {
1094
+ while ((pos & 7) != 0) pos++;
1095
+ pos = _copyExact(data, o0, l0, out, pos);
1096
+ } else {
1097
+ var ltree, dtree;
1098
+ if (BTYPE == 1) {
1099
+ ltree = U.fltree;
1100
+ dtree = U.fdtree;
1101
+ }
1102
+ if (BTYPE == 2) {
1103
+ makeCodes(U.ltree, ML);
1104
+ revCodes(U.ltree, ML);
1105
+ makeCodes(U.dtree, MD);
1106
+ revCodes(U.dtree, MD);
1107
+ makeCodes(U.itree, MH);
1108
+ revCodes(U.itree, MH);
1109
+
1110
+ ltree = U.ltree;
1111
+ dtree = U.dtree;
1112
+
1113
+ _putsE(out, pos, numl - 257);
1114
+ pos += 5; // 286
1115
+ _putsE(out, pos, numd - 1);
1116
+ pos += 5; // 30
1117
+ _putsE(out, pos, numh - 4);
1118
+ pos += 4; // 19
1119
+
1120
+ for (var i = 0; i < numh; i++)
1121
+ _putsE(out, pos + i * 3, U.itree[(U.ordr[i] << 1) + 1]);
1122
+ pos += 3 * numh;
1123
+ pos = _codeTiny(lset, U.itree, out, pos);
1124
+ pos = _codeTiny(dset, U.itree, out, pos);
1125
+ }
1126
+
1127
+ var off = o0;
1128
+ for (var si = 0; si < li; si += 2) {
1129
+ var qb = lits[si],
1130
+ len = qb >>> 23,
1131
+ end = off + (qb & ((1 << 23) - 1));
1132
+ while (off < end) pos = _writeLit(data[off++], ltree, out, pos);
1133
+
1134
+ if (len != 0) {
1135
+ var qc = lits[si + 1],
1136
+ dst = qc >> 16,
1137
+ lgi = (qc >> 8) & 255,
1138
+ dgi = qc & 255;
1139
+ pos = _writeLit(257 + lgi, ltree, out, pos);
1140
+ _putsE(out, pos, len - U.of0[lgi]);
1141
+ pos += U.exb[lgi];
1142
+
1143
+ pos = _writeLit(dgi, dtree, out, pos);
1144
+ _putsF(out, pos, dst - U.df0[dgi]);
1145
+ pos += U.dxb[dgi];
1146
+ off += len;
1147
+ }
1148
+ }
1149
+ pos = _writeLit(256, ltree, out, pos);
1150
+ }
1151
+ //console.log(pos-opos, fxdSize, dynSize, cstSize);
1152
+ return pos;
1153
+ }
1154
+ function _copyExact(data, off, len, out, pos) {
1155
+ var p8 = pos >>> 3;
1156
+ out[p8] = len;
1157
+ out[p8 + 1] = len >>> 8;
1158
+ out[p8 + 2] = 255 - out[p8];
1159
+ out[p8 + 3] = 255 - out[p8 + 1];
1160
+ p8 += 4;
1161
+ out.set(new Uint8Array(data.buffer, off, len), p8);
1162
+ //for(var i=0; i<len; i++) out[p8+i]=data[off+i];
1163
+ return pos + ((len + 4) << 3);
1164
+ }
1165
+ /*
1166
+ Interesting facts:
1167
+ - decompressed block can have bytes, which do not occur in a Huffman tree (copied from the previous block by reference)
1168
+ */
1169
+
1170
+ function getTrees() {
1171
+ var ML = _hufTree(U.lhst, U.ltree, 15);
1172
+ var MD = _hufTree(U.dhst, U.dtree, 15);
1173
+ var lset = [],
1174
+ numl = _lenCodes(U.ltree, lset);
1175
+ var dset = [],
1176
+ numd = _lenCodes(U.dtree, dset);
1177
+ for (var i = 0; i < lset.length; i += 2) U.ihst[lset[i]]++;
1178
+ for (var i = 0; i < dset.length; i += 2) U.ihst[dset[i]]++;
1179
+ var MH = _hufTree(U.ihst, U.itree, 7);
1180
+ var numh = 19;
1181
+ while (numh > 4 && U.itree[(U.ordr[numh - 1] << 1) + 1] == 0) numh--;
1182
+ return [ML, MD, MH, numl, numd, numh, lset, dset];
1183
+ }
1184
+ function getSecond(a) {
1185
+ var b = [];
1186
+ for (var i = 0; i < a.length; i += 2) b.push(a[i + 1]);
1187
+ return b;
1188
+ }
1189
+ function nonZero(a) {
1190
+ var b = "";
1191
+ for (var i = 0; i < a.length; i += 2)
1192
+ if (a[i + 1] != 0) b += (i >> 1) + ",";
1193
+ return b;
1194
+ }
1195
+ function contSize(tree, hst) {
1196
+ var s = 0;
1197
+ for (var i = 0; i < hst.length; i++) s += hst[i] * tree[(i << 1) + 1];
1198
+ return s;
1199
+ }
1200
+ function _codeTiny(set, tree, out, pos) {
1201
+ for (var i = 0; i < set.length; i += 2) {
1202
+ var l = set[i],
1203
+ rst = set[i + 1]; //console.log(l, pos, tree[(l<<1)+1]);
1204
+ pos = _writeLit(l, tree, out, pos);
1205
+ var rsl = l == 16 ? 2 : l == 17 ? 3 : 7;
1206
+ if (l > 15) {
1207
+ _putsE(out, pos, rst, rsl);
1208
+ pos += rsl;
1209
+ }
1210
+ }
1211
+ return pos;
1212
+ }
1213
+ function _lenCodes(tree, set) {
1214
+ var len = tree.length;
1215
+ while (len != 2 && tree[len - 1] == 0) len -= 2; // when no distances, keep one code with length 0
1216
+ for (var i = 0; i < len; i += 2) {
1217
+ var l = tree[i + 1],
1218
+ nxt = i + 3 < len ? tree[i + 3] : -1,
1219
+ nnxt = i + 5 < len ? tree[i + 5] : -1,
1220
+ prv = i == 0 ? -1 : tree[i - 1];
1221
+ if (l == 0 && nxt == l && nnxt == l) {
1222
+ var lz = i + 5;
1223
+ while (lz + 2 < len && tree[lz + 2] == l) lz += 2;
1224
+ var zc = Math.min((lz + 1 - i) >>> 1, 138);
1225
+ if (zc < 11) set.push(17, zc - 3);
1226
+ else set.push(18, zc - 11);
1227
+ i += zc * 2 - 2;
1228
+ } else if (l == prv && nxt == l && nnxt == l) {
1229
+ var lz = i + 5;
1230
+ while (lz + 2 < len && tree[lz + 2] == l) lz += 2;
1231
+ var zc = Math.min((lz + 1 - i) >>> 1, 6);
1232
+ set.push(16, zc - 3);
1233
+ i += zc * 2 - 2;
1234
+ } else set.push(l, 0);
1235
+ }
1236
+ return len >>> 1;
1237
+ }
1238
+ function _hufTree(hst, tree, MAXL) {
1239
+ var list = [],
1240
+ hl = hst.length,
1241
+ tl = tree.length,
1242
+ i = 0;
1243
+ for (i = 0; i < tl; i += 2) {
1244
+ tree[i] = 0;
1245
+ tree[i + 1] = 0;
1246
+ }
1247
+ for (i = 0; i < hl; i++) if (hst[i] != 0) list.push({ lit: i, f: hst[i] });
1248
+ var end = list.length,
1249
+ l2 = list.slice(0);
1250
+ if (end == 0) return 0; // empty histogram (usually for dist)
1251
+ if (end == 1) {
1252
+ var lit = list[0].lit,
1253
+ l2 = lit == 0 ? 1 : 0;
1254
+ tree[(lit << 1) + 1] = 1;
1255
+ tree[(l2 << 1) + 1] = 1;
1256
+ return 1;
1257
+ }
1258
+ list.sort(function (a, b) {
1259
+ return a.f - b.f;
1260
+ });
1261
+ var a = list[0],
1262
+ b = list[1],
1263
+ i0 = 0,
1264
+ i1 = 1,
1265
+ i2 = 2;
1266
+ list[0] = { lit: -1, f: a.f + b.f, l: a, r: b, d: 0 };
1267
+ while (i1 != end - 1) {
1268
+ if (i0 != i1 && (i2 == end || list[i0].f < list[i2].f)) {
1269
+ a = list[i0++];
1270
+ } else {
1271
+ a = list[i2++];
1272
+ }
1273
+ if (i0 != i1 && (i2 == end || list[i0].f < list[i2].f)) {
1274
+ b = list[i0++];
1275
+ } else {
1276
+ b = list[i2++];
1277
+ }
1278
+ list[i1++] = { lit: -1, f: a.f + b.f, l: a, r: b };
1279
+ }
1280
+ var maxl = setDepth(list[i1 - 1], 0);
1281
+ if (maxl > MAXL) {
1282
+ restrictDepth(l2, MAXL, maxl);
1283
+ maxl = MAXL;
1284
+ }
1285
+ for (i = 0; i < end; i++) tree[(l2[i].lit << 1) + 1] = l2[i].d;
1286
+ return maxl;
1287
+ }
1288
+
1289
+ function setDepth(t, d) {
1290
+ if (t.lit != -1) {
1291
+ t.d = d;
1292
+ return d;
1293
+ }
1294
+ return Math.max(setDepth(t.l, d + 1), setDepth(t.r, d + 1));
1295
+ }
1296
+
1297
+ function restrictDepth(dps, MD, maxl) {
1298
+ var i = 0,
1299
+ bCost = 1 << (maxl - MD),
1300
+ dbt = 0;
1301
+ dps.sort(function (a, b) {
1302
+ return b.d == a.d ? a.f - b.f : b.d - a.d;
1303
+ });
1304
+
1305
+ for (i = 0; i < dps.length; i++)
1306
+ if (dps[i].d > MD) {
1307
+ var od = dps[i].d;
1308
+ dps[i].d = MD;
1309
+ dbt += bCost - (1 << (maxl - od));
1310
+ } else break;
1311
+ dbt = dbt >>> (maxl - MD);
1312
+ while (dbt > 0) {
1313
+ var od = dps[i].d;
1314
+ if (od < MD) {
1315
+ dps[i].d++;
1316
+ dbt -= 1 << (MD - od - 1);
1317
+ } else i++;
1318
+ }
1319
+ for (; i >= 0; i--)
1320
+ if (dps[i].d == MD && dbt < 0) {
1321
+ dps[i].d--;
1322
+ dbt++;
1323
+ }
1324
+ if (dbt != 0) console.log("debt left");
1325
+ }
1326
+
1327
+ function _goodIndex(v, arr) {
1328
+ var i = 0;
1329
+ if (arr[i | 16] <= v) i |= 16;
1330
+ if (arr[i | 8] <= v) i |= 8;
1331
+ if (arr[i | 4] <= v) i |= 4;
1332
+ if (arr[i | 2] <= v) i |= 2;
1333
+ if (arr[i | 1] <= v) i |= 1;
1334
+ return i;
1335
+ }
1336
+ function _writeLit(ch, ltree, out, pos) {
1337
+ _putsF(out, pos, ltree[ch << 1]);
1338
+ return pos + ltree[(ch << 1) + 1];
1339
+ }
1340
+
1341
+ function inflate(data, buf) {
1342
+ var u8 = Uint8Array;
1343
+ if (data[0] == 3 && data[1] == 0) return buf ? buf : new u8(0);
1344
+ //var F=UZIP.F, bitsF = F._bitsF, bitsE = F._bitsE, decodeTiny = F._decodeTiny, makeCodes = F.makeCodes, codes2map=F.codes2map, get17 = F._get17;
1345
+
1346
+ var noBuf = buf == null;
1347
+ if (noBuf) buf = new u8((data.length >>> 2) << 3);
1348
+
1349
+ var BFINAL = 0,
1350
+ BTYPE = 0,
1351
+ HLIT = 0,
1352
+ HDIST = 0,
1353
+ HCLEN = 0,
1354
+ ML = 0,
1355
+ MD = 0;
1356
+ var off = 0,
1357
+ pos = 0;
1358
+ var lmap, dmap;
1359
+
1360
+ while (BFINAL == 0) {
1361
+ BFINAL = _bitsF(data, pos, 1);
1362
+ BTYPE = _bitsF(data, pos + 1, 2);
1363
+ pos += 3;
1364
+ //console.log(BFINAL, BTYPE);
1365
+
1366
+ if (BTYPE == 0) {
1367
+ if ((pos & 7) != 0) pos += 8 - (pos & 7);
1368
+ var p8 = (pos >>> 3) + 4,
1369
+ len = data[p8 - 4] | (data[p8 - 3] << 8); //console.log(len);//bitsF(data, pos, 16),
1370
+ if (noBuf) buf = _check(buf, off + len);
1371
+ buf.set(new u8(data.buffer, data.byteOffset + p8, len), off);
1372
+ //for(var i=0; i<len; i++) buf[off+i] = data[p8+i];
1373
+ //for(var i=0; i<len; i++) if(buf[off+i] != data[p8+i]) throw "e";
1374
+ pos = (p8 + len) << 3;
1375
+ off += len;
1376
+ continue;
1377
+ }
1378
+ if (noBuf) buf = _check(buf, off + (1 << 17)); // really not enough in many cases (but PNG and ZIP provide buffer in advance)
1379
+ if (BTYPE == 1) {
1380
+ lmap = U.flmap;
1381
+ dmap = U.fdmap;
1382
+ ML = (1 << 9) - 1;
1383
+ MD = (1 << 5) - 1;
1384
+ }
1385
+ if (BTYPE == 2) {
1386
+ HLIT = _bitsE(data, pos, 5) + 257;
1387
+ HDIST = _bitsE(data, pos + 5, 5) + 1;
1388
+ HCLEN = _bitsE(data, pos + 10, 4) + 4;
1389
+ pos += 14;
1390
+
1391
+ var ppos = pos;
1392
+ for (var i = 0; i < 38; i += 2) {
1393
+ U.itree[i] = 0;
1394
+ U.itree[i + 1] = 0;
1395
+ }
1396
+ var tl = 1;
1397
+ for (var i = 0; i < HCLEN; i++) {
1398
+ var l = _bitsE(data, pos + i * 3, 3);
1399
+ U.itree[(U.ordr[i] << 1) + 1] = l;
1400
+ if (l > tl) tl = l;
1401
+ }
1402
+ pos += 3 * HCLEN; //console.log(itree);
1403
+ makeCodes(U.itree, tl);
1404
+ codes2map(U.itree, tl, U.imap);
1405
+
1406
+ lmap = U.lmap;
1407
+ dmap = U.dmap;
1408
+
1409
+ pos = _decodeTiny(
1410
+ U.imap,
1411
+ (1 << tl) - 1,
1412
+ HLIT + HDIST,
1413
+ data,
1414
+ pos,
1415
+ U.ttree,
1416
+ );
1417
+ var mx0 = _copyOut(U.ttree, 0, HLIT, U.ltree);
1418
+ ML = (1 << mx0) - 1;
1419
+ var mx1 = _copyOut(U.ttree, HLIT, HDIST, U.dtree);
1420
+ MD = (1 << mx1) - 1;
1421
+
1422
+ //var ml = _decodeTiny(U.imap, (1<<tl)-1, HLIT , data, pos, U.ltree); ML = (1<<(ml>>>24))-1; pos+=(ml&0xffffff);
1423
+ makeCodes(U.ltree, mx0);
1424
+ codes2map(U.ltree, mx0, lmap);
1425
+
1426
+ //var md = _decodeTiny(U.imap, (1<<tl)-1, HDIST, data, pos, U.dtree); MD = (1<<(md>>>24))-1; pos+=(md&0xffffff);
1427
+ makeCodes(U.dtree, mx1);
1428
+ codes2map(U.dtree, mx1, dmap);
1429
+ }
1430
+ //var ooff=off, opos=pos;
1431
+ while (true) {
1432
+ var code = lmap[_get17(data, pos) & ML];
1433
+ pos += code & 15;
1434
+ var lit = code >>> 4; //U.lhst[lit]++;
1435
+ if (lit >>> 8 == 0) {
1436
+ buf[off++] = lit;
1437
+ } else if (lit == 256) {
1438
+ break;
1439
+ } else {
1440
+ var end = off + lit - 254;
1441
+ if (lit > 264) {
1442
+ var ebs = U.ldef[lit - 257];
1443
+ end = off + (ebs >>> 3) + _bitsE(data, pos, ebs & 7);
1444
+ pos += ebs & 7;
1445
+ }
1446
+ //UZIP.F.dst[end-off]++;
1447
+
1448
+ var dcode = dmap[_get17(data, pos) & MD];
1449
+ pos += dcode & 15;
1450
+ var dlit = dcode >>> 4;
1451
+ var dbs = U.ddef[dlit],
1452
+ dst = (dbs >>> 4) + _bitsF(data, pos, dbs & 15);
1453
+ pos += dbs & 15;
1454
+
1455
+ //var o0 = off-dst, stp = Math.min(end-off, dst);
1456
+ //if(stp>20) while(off<end) { buf.copyWithin(off, o0, o0+stp); off+=stp; } else
1457
+ //if(end-dst<=off) buf.copyWithin(off, off-dst, end-dst); else
1458
+ //if(dst==1) buf.fill(buf[off-1], off, end); else
1459
+ if (noBuf) buf = _check(buf, off + (1 << 17));
1460
+ while (off < end) {
1461
+ buf[off] = buf[off++ - dst];
1462
+ buf[off] = buf[off++ - dst];
1463
+ buf[off] = buf[off++ - dst];
1464
+ buf[off] = buf[off++ - dst];
1465
+ }
1466
+ off = end;
1467
+ //while(off!=end) { buf[off]=buf[off++-dst]; }
1468
+ }
1469
+ }
1470
+ //console.log(off-ooff, (pos-opos)>>>3);
1471
+ }
1472
+ //console.log(UZIP.F.dst);
1473
+ //console.log(tlen, dlen, off-tlen+tcnt);
1474
+ return buf.length == off ? buf : buf.slice(0, off);
1475
+ }
1476
+ function _check(buf, len) {
1477
+ var bl = buf.length;
1478
+ if (len <= bl) return buf;
1479
+ var nbuf = new Uint8Array(Math.max(bl << 1, len));
1480
+ nbuf.set(buf, 0);
1481
+ //for(var i=0; i<bl; i+=4) { nbuf[i]=buf[i]; nbuf[i+1]=buf[i+1]; nbuf[i+2]=buf[i+2]; nbuf[i+3]=buf[i+3]; }
1482
+ return nbuf;
1483
+ }
1484
+
1485
+ function _decodeTiny(lmap, LL, len, data, pos, tree) {
1486
+ //var bitsE = UZIP.F._bitsE, get17 = UZIP.F._get17;
1487
+ var i = 0;
1488
+ while (i < len) {
1489
+ var code = lmap[_get17(data, pos) & LL];
1490
+ pos += code & 15;
1491
+ var lit = code >>> 4;
1492
+ if (lit <= 15) {
1493
+ tree[i] = lit;
1494
+ i++;
1495
+ } else {
1496
+ var ll = 0,
1497
+ n = 0;
1498
+ if (lit == 16) {
1499
+ n = 3 + _bitsE(data, pos, 2);
1500
+ pos += 2;
1501
+ ll = tree[i - 1];
1502
+ } else if (lit == 17) {
1503
+ n = 3 + _bitsE(data, pos, 3);
1504
+ pos += 3;
1505
+ } else if (lit == 18) {
1506
+ n = 11 + _bitsE(data, pos, 7);
1507
+ pos += 7;
1508
+ }
1509
+ var ni = i + n;
1510
+ while (i < ni) {
1511
+ tree[i] = ll;
1512
+ i++;
1513
+ }
1514
+ }
1515
+ }
1516
+ return pos;
1517
+ }
1518
+ function _copyOut(src, off, len, tree) {
1519
+ var mx = 0,
1520
+ i = 0,
1521
+ tl = tree.length >>> 1;
1522
+ while (i < len) {
1523
+ var v = src[i + off];
1524
+ tree[i << 1] = 0;
1525
+ tree[(i << 1) + 1] = v;
1526
+ if (v > mx) mx = v;
1527
+ i++;
1528
+ }
1529
+ while (i < tl) {
1530
+ tree[i << 1] = 0;
1531
+ tree[(i << 1) + 1] = 0;
1532
+ i++;
1533
+ }
1534
+ return mx;
1535
+ }
1536
+
1537
+ UZIP["F"] = { inflate: inflate, deflateRaw: deflateRaw };
1538
+ })();