@zip.js/zip.js 2.8.30 → 2.8.32
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.
- package/BENCHMARKS.md +82 -1
- package/deno.json +5 -4
- package/dist/zip-core.js +403 -339
- package/dist/zip-core.min.js +1 -1
- package/dist/zip-fs-core.js +116 -278
- package/dist/zip-fs-core.min.js +1 -1
- package/dist/zip-fs-native.js +440 -378
- package/dist/zip-fs-native.min.js +1 -1
- package/dist/zip-fs.js +439 -377
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-legacy.js +408 -344
- package/dist/zip-legacy.min.js +1 -1
- package/dist/zip-module.wasm +0 -0
- package/dist/zip-native.js +411 -347
- package/dist/zip-native.min.js +1 -1
- package/dist/zip-web-worker-native.js +1 -1
- package/dist/zip-web-worker.js +1 -1
- package/dist/zip.js +410 -346
- package/dist/zip.min.js +1 -1
- package/index-native.cjs +440 -378
- package/index-native.min.js +1 -1
- package/index.cjs +439 -377
- package/index.d.cts +2853 -0
- package/index.d.ts +278 -1
- package/index.min.js +1 -1
- package/lib/core/codec-worker.js +1 -11
- package/lib/core/configuration.js +21 -33
- package/lib/core/constants.js +3 -0
- package/lib/core/io.js +11 -19
- package/lib/core/streams/aes-crypto-stream.js +16 -20
- package/lib/core/streams/common-crypto.js +0 -2
- package/lib/core/streams/zip-crypto-stream.js +12 -16
- package/lib/core/streams/zip-entry-stream.js +2 -32
- package/lib/core/streams/zlib-js/zlib-streams.min.js +1 -1
- package/lib/core/streams/zlib-wasm/zlib-streams-loader.js +1 -3
- package/lib/core/streams/zlib-wasm/zlib-streams.wasm +0 -0
- package/lib/core/util/base64.js +68 -0
- package/lib/core/util/blob-temp-stream.js +124 -0
- package/lib/core/util/decode-text.js +0 -1
- package/lib/core/util/default-mime-type.js +0 -3
- package/lib/core/util/inflate.js +194 -0
- package/lib/core/util/mime-type.js +26 -22
- package/lib/core/util/opfs-temp-stream.js +1 -37
- package/lib/core/util/sync-access-handle-temp-stream.js +147 -0
- package/lib/core/web-worker-inline-native.js +1 -1
- package/lib/core/web-worker-inline-template-native.js +5 -5
- package/lib/core/web-worker-inline-wasm.js +1 -1
- package/lib/core/zip-fs.js +6 -13
- package/lib/core/zip-reader.js +48 -127
- package/lib/core/zip-writer.js +27 -45
- package/lib/core/zlib-streams-inline-template.js +3 -2
- package/lib/core/zlib-streams-inline.js +1 -1
- package/lib/zip-core-base.js +10 -2
- package/package.json +9 -6
- package/reserved-property-names.js +50 -0
- package/lib/core/util/mini-lz.js +0 -198
package/dist/zip-fs-native.js
CHANGED
|
@@ -113,6 +113,8 @@
|
|
|
113
113
|
const FUNCTION_TYPE = "function";
|
|
114
114
|
const OBJECT_TYPE = "object";
|
|
115
115
|
|
|
116
|
+
const EMPTY_UINT8_ARRAY = new Uint8Array();
|
|
117
|
+
|
|
116
118
|
/*
|
|
117
119
|
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
118
120
|
|
|
@@ -164,6 +166,22 @@
|
|
|
164
166
|
DecompressionStream: typeof DecompressionStream != UNDEFINED_TYPE && DecompressionStream
|
|
165
167
|
};
|
|
166
168
|
|
|
169
|
+
const CONFIGURABLE_PROPERTY_NAMES = [
|
|
170
|
+
"baseURI",
|
|
171
|
+
"wasmURI",
|
|
172
|
+
"workerURI",
|
|
173
|
+
"chunkSize",
|
|
174
|
+
"maxWorkers",
|
|
175
|
+
"terminateWorkerTimeout",
|
|
176
|
+
"workerStarvationTimeout",
|
|
177
|
+
"useCompressionStream",
|
|
178
|
+
"useWebWorkers",
|
|
179
|
+
"CompressionStream",
|
|
180
|
+
"DecompressionStream",
|
|
181
|
+
"CompressionStreamZlib",
|
|
182
|
+
"DecompressionStreamZlib"
|
|
183
|
+
];
|
|
184
|
+
|
|
167
185
|
const config = Object.assign({}, DEFAULT_CONFIGURATION);
|
|
168
186
|
|
|
169
187
|
function getConfiguration() {
|
|
@@ -175,43 +193,15 @@
|
|
|
175
193
|
}
|
|
176
194
|
|
|
177
195
|
function configure(configuration) {
|
|
178
|
-
const {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
CompressionStream,
|
|
187
|
-
DecompressionStream,
|
|
188
|
-
CompressionStreamZlib,
|
|
189
|
-
DecompressionStreamZlib,
|
|
190
|
-
workerURI,
|
|
191
|
-
wasmURI
|
|
192
|
-
} = configuration;
|
|
193
|
-
setIfDefined("baseURI", baseURI);
|
|
194
|
-
setIfDefined("wasmURI", wasmURI);
|
|
195
|
-
setIfDefined("workerURI", workerURI);
|
|
196
|
-
setIfDefined("chunkSize", chunkSize);
|
|
197
|
-
setIfDefined("maxWorkers", maxWorkers);
|
|
198
|
-
setIfDefined("terminateWorkerTimeout", terminateWorkerTimeout);
|
|
199
|
-
setIfDefined("workerStarvationTimeout", workerStarvationTimeout);
|
|
200
|
-
setIfDefined("useCompressionStream", useCompressionStream);
|
|
201
|
-
setIfDefined("useWebWorkers", useWebWorkers);
|
|
202
|
-
setIfDefined("CompressionStream", CompressionStream);
|
|
203
|
-
setIfDefined("DecompressionStream", DecompressionStream);
|
|
204
|
-
setIfDefined("CompressionStreamZlib", CompressionStreamZlib);
|
|
205
|
-
setIfDefined("DecompressionStreamZlib", DecompressionStreamZlib);
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
function setIfDefined(propertyName, propertyValue) {
|
|
209
|
-
if (propertyValue !== UNDEFINED_VALUE) {
|
|
210
|
-
config[propertyName] = propertyValue;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
const A="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function g$1(g){g({workerURI:g=>{const B="text/javascript",I=(g=>{g=(g=>{const B=(g=(g+"").replace(/[^A-Za-z0-9+/=]/g,"")).length,I=[];for(let E=0;B>E;E+=4){const B=A.indexOf(g[E])<<18|A.indexOf(g[E+1])<<12|(63&A.indexOf(g[E+2]))<<6|63&A.indexOf(g[E+3]);I.push(B>>16&255),"="!==g[E+2]&&I.push(B>>8&255),"="!==g[E+3]&&I.push(255&B);}return new Uint8Array(I)})(g);let B=new Uint8Array(1024),I=0;for(let A=0;A<g.length;){const C=g[A++];if(128&C){const Y=3+(127&C),Q=g[A++]<<8|g[A++],F=I-Q;E(I+Y);for(let A=0;Y>A;A++)B[I++]=B[F+A];}else {const Y=C;E(I+Y);for(let E=0;Y>E&&A<g.length;E++)B[I++]=g[A++];}}return (g=>{let B="";const I=g.length;let E=0;for(;I>E+2;E+=3){const I=g[E]<<16|g[E+1]<<8|g[E+2];B+=A[I>>18&63]+A[I>>12&63]+A[I>>6&63]+A[63&I];}const C=I-E;if(1===C){const I=g[E]<<16;B+=A[I>>18&63]+A[I>>12&63]+"==";}else if(2===C){const I=g[E]<<16|g[E+1]<<8;B+=A[I>>18&63]+A[I>>12&63]+A[I>>6&63]+"=";}return B})(new Uint8Array(B.buffer.slice(0,I)));function E(A){if(B.length<A){let g=2*B.length;for(;A>g;)g*=2;const E=new Uint8Array(g);E.set(B.subarray(0,I)),B=E;}}})("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");if(g){const A=atob(I),g=new Blob([A],{type:B});return URL.createObjectURL(g)}return "data:"+B+";base64,"+I}});}
|
|
196
|
+
for (const propertyName of CONFIGURABLE_PROPERTY_NAMES) {
|
|
197
|
+
const propertyValue = configuration[propertyName];
|
|
198
|
+
if (propertyValue !== UNDEFINED_VALUE) {
|
|
199
|
+
config[propertyName] = propertyValue;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
const t=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258],r=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],n=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],e=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],q$1=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],f=new Uint8Array(288);f.fill(8,0,144),f.fill(9,144,256),f.fill(7,256,280),f.fill(8,280,288);const l=new Uint8Array(30).fill(5);function L$1(t){const r=new Uint16Array(16);for(const n of t)r[n]++;r[0]=0;const n=new Uint16Array(17);for(let t=1;15>=t;t++)n[t+1]=n[t]+r[t];const e=new Uint16Array(t.length);for(let r=0;r<t.length;r++)t[r]&&(e[n[t[r]]++]=r);return {t:r,symbols:e}}const o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function i(i){i({workerURI:i=>{const U="text/javascript",W=(o=>{let i=0,U=0,W=0,c=new Uint8Array(1024),R=0,a=0;for(;!a;){a=h(1);const t=h(2);if(0==t)x();else if(1==t)G(L$1(f),L$1(l));else {if(2!=t)throw Error("invalid deflate block type");G(...d());}}return c.subarray(0,R);function F(){if(i>=o.length)throw Error("unexpected end of deflate data");return o[i++]}function h(t){for(;t>W;)U|=F()<<W,W+=8;const r=U&(1<<t)-1;return U>>>=t,W-=t,r}function x(){U=0,W=0;const t=F()|F()<<8;i+=2,v(R+t);for(let r=0;t>r;r++)c[R++]=F();}function G(q,f){let l=I(q);for(;256!=l;){if(256>l)v(R+1),c[R++]=l;else {const q=l-257,L=t[q]+h(r[q]),o=I(f),i=n[o]+h(e[o]);v(R+L);const U=R-i;for(let t=0;L>t;t++)c[R++]=c[U+t];}l=I(q);}}function d(){const t=h(5)+257,r=h(5)+1,n=h(4)+4,e=new Uint8Array(19);for(let t=0;n>t;t++)e[q$1[t]]=h(3);const f=L$1(e),l=new Uint8Array(t+r);let o=0;for(;o<l.length;){const t=I(f);if(16>t)l[o++]=t;else if(16==t){const t=l[o-1];let r=h(2)+3;for(;r--;)l[o++]=t;}else o+=17==t?h(3)+3:h(7)+11;}return [L$1(l.subarray(0,t)),L$1(l.subarray(t))]}function I(t){const{t:r,symbols:n}=t;let e=0,q=0,f=0;for(let t=1;15>=t;t++){e|=h(1);const l=r[t];if(l>e-q)return n[f+(e-q)];f+=l,q=q+l<<1,e<<=1;}throw Error("invalid huffman code")}function v(t){if(c.length<t){let r=2*c.length;for(;t>r;)r*=2;const n=new Uint8Array(r);n.set(c.subarray(0,R)),c=n;}}})((t=>{const r=(t=(t+"").replace(/[^A-Za-z0-9+/=]/g,"")).length,n=[];for(let e=0;r>e;e+=4){const r=o.indexOf(t[e])<<18|o.indexOf(t[e+1])<<12|(63&o.indexOf(t[e+2]))<<6|63&o.indexOf(t[e+3]);n.push(r>>16&255),"="!==t[e+2]&&n.push(r>>8&255),"="!==t[e+3]&&n.push(255&r);}return new Uint8Array(n)})("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"));if(i){const t=new Blob([W],{type:U});return URL.createObjectURL(t)}return "data:"+U+";base64,"+(t=>{let r="";const n=t.length;let e=0;for(;n>e+2;e+=3){const n=t[e]<<16|t[e+1]<<8|t[e+2];r+=o[n>>18&63]+o[n>>12&63]+o[n>>6&63]+o[63&n];}const q=n-e;if(1===q){const n=t[e]<<16;r+=o[n>>18&63]+o[n>>12&63]+"==";}else if(2===q){const n=t[e]<<16|t[e+1]<<8;r+=o[n>>18&63]+o[n>>12&63]+o[n>>6&63]+"=";}return r})(W)}});}
|
|
215
205
|
|
|
216
206
|
/*
|
|
217
207
|
Copyright (c) 2022 Gildas Lormeau. All rights reserved.
|
|
@@ -1224,8 +1214,6 @@
|
|
|
1224
1214
|
if (GET_RANDOM_VALUES_SUPPORTED) {
|
|
1225
1215
|
return crypto.getRandomValues(array);
|
|
1226
1216
|
} else {
|
|
1227
|
-
// all supported runtimes expose crypto.getRandomValues; failing hard beats
|
|
1228
|
-
// silently generating predictable encryption salts
|
|
1229
1217
|
throw new Error(ERR_UNSUPPORTED_CRYPTO_API);
|
|
1230
1218
|
}
|
|
1231
1219
|
}
|
|
@@ -1288,12 +1276,7 @@
|
|
|
1288
1276
|
constructor({ password, rawPassword, encryptionStrength, checkPasswordOnly }) {
|
|
1289
1277
|
super({
|
|
1290
1278
|
start() {
|
|
1291
|
-
|
|
1292
|
-
ready: new Promise(resolve => this.resolveReady = resolve),
|
|
1293
|
-
password: encodePassword(password, rawPassword),
|
|
1294
|
-
strength: encryptionStrength - 1,
|
|
1295
|
-
pending: new Uint8Array()
|
|
1296
|
-
});
|
|
1279
|
+
initAesCrypto(this, password, rawPassword, encryptionStrength);
|
|
1297
1280
|
},
|
|
1298
1281
|
async transform(chunk, controller) {
|
|
1299
1282
|
const aesCrypto = this;
|
|
@@ -1328,7 +1311,7 @@
|
|
|
1328
1311
|
await ready;
|
|
1329
1312
|
const chunkToDecrypt = subarray(pending, 0, pending.length - SIGNATURE_LENGTH);
|
|
1330
1313
|
const originalSignature = subarray(pending, pending.length - SIGNATURE_LENGTH);
|
|
1331
|
-
let decryptedChunkArray =
|
|
1314
|
+
let decryptedChunkArray = EMPTY_UINT8_ARRAY;
|
|
1332
1315
|
if (chunkToDecrypt.length) {
|
|
1333
1316
|
const encryptedChunk = toBits(codecBytes, chunkToDecrypt);
|
|
1334
1317
|
hmac.update(encryptedChunk);
|
|
@@ -1336,8 +1319,6 @@
|
|
|
1336
1319
|
decryptedChunkArray = fromBits(codecBytes, decryptedChunk);
|
|
1337
1320
|
}
|
|
1338
1321
|
const signature = subarray(fromBits(codecBytes, hmac.digest()), 0, SIGNATURE_LENGTH);
|
|
1339
|
-
// branch-free comparison: accumulate the differences instead of
|
|
1340
|
-
// short-circuiting on the first mismatching byte
|
|
1341
1322
|
let invalidSignature = pending.length < SIGNATURE_LENGTH ? 1 : 0;
|
|
1342
1323
|
for (let indexSignature = 0; indexSignature < SIGNATURE_LENGTH; indexSignature++) {
|
|
1343
1324
|
invalidSignature |= signature[indexSignature] ^ originalSignature[indexSignature];
|
|
@@ -1359,12 +1340,7 @@
|
|
|
1359
1340
|
let stream;
|
|
1360
1341
|
super({
|
|
1361
1342
|
start() {
|
|
1362
|
-
|
|
1363
|
-
ready: new Promise(resolve => this.resolveReady = resolve),
|
|
1364
|
-
password: encodePassword(password, rawPassword),
|
|
1365
|
-
strength: encryptionStrength - 1,
|
|
1366
|
-
pending: new Uint8Array()
|
|
1367
|
-
});
|
|
1343
|
+
initAesCrypto(this, password, rawPassword, encryptionStrength);
|
|
1368
1344
|
},
|
|
1369
1345
|
async transform(chunk, controller) {
|
|
1370
1346
|
const aesCrypto = this;
|
|
@@ -1374,7 +1350,7 @@
|
|
|
1374
1350
|
resolveReady,
|
|
1375
1351
|
ready
|
|
1376
1352
|
} = aesCrypto;
|
|
1377
|
-
let preamble =
|
|
1353
|
+
let preamble = EMPTY_UINT8_ARRAY;
|
|
1378
1354
|
if (password) {
|
|
1379
1355
|
preamble = await createEncryptionKeys(aesCrypto, strength, password);
|
|
1380
1356
|
resolveReady();
|
|
@@ -1394,7 +1370,7 @@
|
|
|
1394
1370
|
} = this;
|
|
1395
1371
|
if (hmac && ctr) {
|
|
1396
1372
|
await ready;
|
|
1397
|
-
let encryptedChunkArray =
|
|
1373
|
+
let encryptedChunkArray = EMPTY_UINT8_ARRAY;
|
|
1398
1374
|
if (pending.length) {
|
|
1399
1375
|
const encryptedChunk = ctr.update(toBits(codecBytes, pending));
|
|
1400
1376
|
hmac.update(encryptedChunk);
|
|
@@ -1409,6 +1385,15 @@
|
|
|
1409
1385
|
}
|
|
1410
1386
|
}
|
|
1411
1387
|
|
|
1388
|
+
function initAesCrypto(aesCrypto, password, rawPassword, encryptionStrength) {
|
|
1389
|
+
Object.assign(aesCrypto, {
|
|
1390
|
+
ready: new Promise(resolve => aesCrypto.resolveReady = resolve),
|
|
1391
|
+
password: encodePassword(password, rawPassword),
|
|
1392
|
+
strength: encryptionStrength - 1,
|
|
1393
|
+
pending: EMPTY_UINT8_ARRAY
|
|
1394
|
+
});
|
|
1395
|
+
}
|
|
1396
|
+
|
|
1412
1397
|
function append(aesCrypto, input, output, paddingStart, paddingEnd, verifySignature) {
|
|
1413
1398
|
const {
|
|
1414
1399
|
ctr,
|
|
@@ -1570,20 +1555,13 @@
|
|
|
1570
1555
|
constructor({ password, rawPassword, passwordVerification, checkPasswordOnly }) {
|
|
1571
1556
|
super({
|
|
1572
1557
|
start() {
|
|
1573
|
-
|
|
1574
|
-
password,
|
|
1575
|
-
rawPassword,
|
|
1576
|
-
passwordVerification
|
|
1577
|
-
});
|
|
1578
|
-
createKeys(this, password, rawPassword);
|
|
1558
|
+
initZipCrypto(this, password, rawPassword, passwordVerification);
|
|
1579
1559
|
},
|
|
1580
1560
|
transform(chunk, controller) {
|
|
1581
1561
|
const zipCrypto = this;
|
|
1582
1562
|
if (zipCrypto.password || zipCrypto.rawPassword) {
|
|
1583
1563
|
const decryptedHeader = decrypt(zipCrypto, chunk.subarray(0, HEADER_LENGTH));
|
|
1584
1564
|
zipCrypto.password = zipCrypto.rawPassword = null;
|
|
1585
|
-
// verify the password with a branch-free comparison of the verification byte, mirroring
|
|
1586
|
-
// the constant-time AES HMAC signature check
|
|
1587
1565
|
if ((decryptedHeader.at(-1) ^ zipCrypto.passwordVerification) != 0) {
|
|
1588
1566
|
throw new Error(ERR_INVALID_PASSWORD);
|
|
1589
1567
|
}
|
|
@@ -1604,12 +1582,7 @@
|
|
|
1604
1582
|
constructor({ password, rawPassword, passwordVerification }) {
|
|
1605
1583
|
super({
|
|
1606
1584
|
start() {
|
|
1607
|
-
|
|
1608
|
-
password,
|
|
1609
|
-
rawPassword,
|
|
1610
|
-
passwordVerification
|
|
1611
|
-
});
|
|
1612
|
-
createKeys(this, password, rawPassword);
|
|
1585
|
+
initZipCrypto(this, password, rawPassword, passwordVerification);
|
|
1613
1586
|
},
|
|
1614
1587
|
transform(chunk, controller) {
|
|
1615
1588
|
const zipCrypto = this;
|
|
@@ -1633,6 +1606,15 @@
|
|
|
1633
1606
|
}
|
|
1634
1607
|
}
|
|
1635
1608
|
|
|
1609
|
+
function initZipCrypto(zipCrypto, password, rawPassword, passwordVerification) {
|
|
1610
|
+
Object.assign(zipCrypto, {
|
|
1611
|
+
password,
|
|
1612
|
+
rawPassword,
|
|
1613
|
+
passwordVerification
|
|
1614
|
+
});
|
|
1615
|
+
createKeys(zipCrypto, password, rawPassword);
|
|
1616
|
+
}
|
|
1617
|
+
|
|
1636
1618
|
function decrypt(target, input) {
|
|
1637
1619
|
const output = new Uint8Array(input.length);
|
|
1638
1620
|
for (let index = 0; index < input.length; index++) {
|
|
@@ -1737,14 +1719,6 @@
|
|
|
1737
1719
|
const stream = this;
|
|
1738
1720
|
let crc32Stream, encryptionStream, gzipCrc32Stream;
|
|
1739
1721
|
let readable = super.readable;
|
|
1740
|
-
// The gzip trailer carries a CRC-32 of the uncompressed data (same polynomial as zip),
|
|
1741
|
-
// computed in native code for free during compression. On the native CompressionStream,
|
|
1742
|
-
// harvest it instead of running a separate CRC pass: compress as gzip, then strip the
|
|
1743
|
-
// fixed 10-byte header and 8-byte trailer to recover the exact raw-deflate payload
|
|
1744
|
-
// (byte-identical to a deflate-raw compression) while capturing the CRC. The CRC becomes
|
|
1745
|
-
// available at end-of-stream, exactly like Crc32Stream, so nothing downstream (data
|
|
1746
|
-
// descriptor, central directory, ZipCrypto) needs it any earlier. Not applied for the
|
|
1747
|
-
// pure-JS/WASM ports (a separate slice-by-8 CRC pass is as fast or faster there).
|
|
1748
1722
|
const useGzipCrc32 = signed && compressed && !deflate64 && (!encrypted || zipCrypto) &&
|
|
1749
1723
|
Boolean(useCompressionStream && CompressionStream);
|
|
1750
1724
|
if ((!encrypted || zipCrypto) && signed && !useGzipCrc32) {
|
|
@@ -1781,12 +1755,6 @@
|
|
|
1781
1755
|
}
|
|
1782
1756
|
}
|
|
1783
1757
|
|
|
1784
|
-
// Converts a gzip stream into its raw-deflate payload while capturing the CRC-32 from the gzip
|
|
1785
|
-
// trailer. The CompressionStream gzip header is always the fixed 10-byte form (FLG=0, no optional
|
|
1786
|
-
// fields) per the Compression Streams spec, so it is stripped by length; the trailer is the last
|
|
1787
|
-
// 8 bytes (CRC-32 LE, then ISIZE LE). Bounded memory: at most GZIP_TRAILER_LENGTH bytes are held
|
|
1788
|
-
// back across chunks. The signature is read big-endian-agnostically as a number, matching the
|
|
1789
|
-
// value Crc32Stream produces, so the writer path is unchanged.
|
|
1790
1758
|
class GzipToRawDeflateStream extends TransformStream {
|
|
1791
1759
|
|
|
1792
1760
|
constructor() {
|
|
@@ -1812,10 +1780,6 @@
|
|
|
1812
1780
|
tail = pending;
|
|
1813
1781
|
return;
|
|
1814
1782
|
}
|
|
1815
|
-
// Emit everything except the trailing GZIP_TRAILER_LENGTH bytes as a standalone,
|
|
1816
|
-
// right-sized Uint8Array. Consumers may read chunk.buffer directly (e.g. custom
|
|
1817
|
-
// writers), so an aliased subarray of a larger buffer would leak the held-back
|
|
1818
|
-
// trailer bytes. Bytes are copied exactly once, into `output` or `tail`.
|
|
1819
1783
|
const emitLength = available - GZIP_TRAILER_LENGTH;
|
|
1820
1784
|
const output = new Uint8Array(emitLength);
|
|
1821
1785
|
const fromTail = Math.min(emitLength, tail.length);
|
|
@@ -1904,11 +1868,6 @@
|
|
|
1904
1868
|
throw error;
|
|
1905
1869
|
}
|
|
1906
1870
|
}
|
|
1907
|
-
// The native CompressionStream/DecompressionStream and the pure-JS zlib port do not signal
|
|
1908
|
-
// backpressure on their writable side (their `ready` never pends), so a plain pipeThrough drains
|
|
1909
|
-
// the whole source into them and peak memory grows with the entry size. Awaiting each write()
|
|
1910
|
-
// paces the source to the codec's consumption rate, keeping streaming memory bounded. The WASM
|
|
1911
|
-
// codec already backpressures, so this is a no-op cost for it.
|
|
1912
1871
|
return pipeThroughBackpressured(readable, codecStream);
|
|
1913
1872
|
}
|
|
1914
1873
|
|
|
@@ -1916,10 +1875,6 @@
|
|
|
1916
1875
|
return readable.pipeThrough(transformStream);
|
|
1917
1876
|
}
|
|
1918
1877
|
|
|
1919
|
-
// Like readable.pipeThrough(transformStream), but drives the writable side manually and awaits each
|
|
1920
|
-
// write() so that a codec which under-reports backpressure cannot pull the whole source into memory.
|
|
1921
|
-
// Errors propagate in both directions: a source error aborts the codec; a downstream cancel/error
|
|
1922
|
-
// (surfaced through the codec's writable rejecting) cancels the source.
|
|
1923
1878
|
function pipeThroughBackpressured(readable, transformStream) {
|
|
1924
1879
|
const writer = transformStream.writable.getWriter();
|
|
1925
1880
|
const reader = readable.getReader();
|
|
@@ -1948,7 +1903,7 @@
|
|
|
1948
1903
|
try {
|
|
1949
1904
|
await writer.abort(error);
|
|
1950
1905
|
} catch {
|
|
1951
|
-
// the writable may already be errored/closed
|
|
1906
|
+
// ignored: the writable may already be errored/closed
|
|
1952
1907
|
}
|
|
1953
1908
|
}
|
|
1954
1909
|
|
|
@@ -1956,13 +1911,10 @@
|
|
|
1956
1911
|
try {
|
|
1957
1912
|
await reader.cancel(error);
|
|
1958
1913
|
} catch {
|
|
1959
|
-
// the readable may already be errored/closed
|
|
1914
|
+
// ignored: the readable may already be errored/closed
|
|
1960
1915
|
}
|
|
1961
1916
|
}
|
|
1962
1917
|
|
|
1963
|
-
// DecompressionStream implementations can fail with a message-less TypeError on malformed
|
|
1964
|
-
// input; give these errors an identifiable message (errors raised by the other stages of
|
|
1965
|
-
// the pipeline, e.g. ERR_INVALID_PASSWORD, always carry a message and pass through as-is)
|
|
1966
1918
|
function mapInflateStreamError(readable) {
|
|
1967
1919
|
const reader = readable.getReader();
|
|
1968
1920
|
return new ReadableStream({
|
|
@@ -2287,9 +2239,6 @@
|
|
|
2287
2239
|
try {
|
|
2288
2240
|
await initModule(config);
|
|
2289
2241
|
} catch {
|
|
2290
|
-
// The WASM module failed to load. Fall back to the native CompressionStream only if the
|
|
2291
|
-
// zlib codec that would otherwise run depends on that module; a self-contained codec
|
|
2292
|
-
// supplied through config (e.g. the pure-JS port) stays usable and is kept as requested.
|
|
2293
2242
|
const ZlibStream = options.codecType.startsWith(CODEC_DEFLATE) ?
|
|
2294
2243
|
config.CompressionStreamZlib :
|
|
2295
2244
|
config.DecompressionStreamZlib;
|
|
@@ -2367,7 +2316,6 @@
|
|
|
2367
2316
|
return resultValue;
|
|
2368
2317
|
} catch (error) {
|
|
2369
2318
|
await closeWritable();
|
|
2370
|
-
// unblock the pipe watcher if the worker died before closing its end of the stream
|
|
2371
2319
|
abortPipe();
|
|
2372
2320
|
try {
|
|
2373
2321
|
await closed;
|
|
@@ -2392,8 +2340,6 @@
|
|
|
2392
2340
|
const abortController = new AbortController();
|
|
2393
2341
|
const { writable, readable } = new TransformStream();
|
|
2394
2342
|
const closed = readable.pipeTo(writableSource, { preventClose: true, preventAbort: true, signal: abortController.signal });
|
|
2395
|
-
// the pipe can fail before `closed` is awaited (e.g. the destination write fails);
|
|
2396
|
-
// mark the rejection as handled so it cannot kill the process in the meantime
|
|
2397
2343
|
closed.catch(() => { });
|
|
2398
2344
|
return { writable, closed, abortPipe: () => abortController.abort() };
|
|
2399
2345
|
}
|
|
@@ -2486,8 +2432,6 @@
|
|
|
2486
2432
|
event.preventDefault();
|
|
2487
2433
|
}
|
|
2488
2434
|
const { rejectResult, writer, onTaskFinished } = workerData;
|
|
2489
|
-
// the worker is unusable (e.g. its script failed to load); terminate it and
|
|
2490
|
-
// fail the current task instead of letting it hang forever
|
|
2491
2435
|
terminateWorker$1(workerData);
|
|
2492
2436
|
if (rejectResult) {
|
|
2493
2437
|
rejectResult(event.error || new Error(event.message || ERROR_EVENT_TYPE));
|
|
@@ -2503,7 +2447,7 @@
|
|
|
2503
2447
|
const { value, readable, writable } = message;
|
|
2504
2448
|
const transferables = [];
|
|
2505
2449
|
if (value) {
|
|
2506
|
-
message.value = value;
|
|
2450
|
+
message.value = value.byteOffset || value.byteLength != value.buffer.byteLength ? new Uint8Array(value) : value;
|
|
2507
2451
|
transferables.push(message.value.buffer);
|
|
2508
2452
|
}
|
|
2509
2453
|
if (transferStreams && transferStreamsSupported) {
|
|
@@ -2539,8 +2483,6 @@
|
|
|
2539
2483
|
async function onMessage({ data }, workerData) {
|
|
2540
2484
|
const { type, value, messageId, result, error } = data;
|
|
2541
2485
|
const { reader, writer, resolveResult, rejectResult, onTaskFinished, generation } = workerData;
|
|
2542
|
-
// continuations below can settle after the worker slot has been reassigned to a new
|
|
2543
|
-
// task (e.g. a pending pull read failing late); they must not touch the new task
|
|
2544
2486
|
const stale = () => workerData.generation != generation;
|
|
2545
2487
|
try {
|
|
2546
2488
|
if (error) {
|
|
@@ -2796,26 +2738,24 @@
|
|
|
2796
2738
|
class Reader extends Stream {
|
|
2797
2739
|
|
|
2798
2740
|
get readable() {
|
|
2741
|
+
return this.createReadable();
|
|
2742
|
+
}
|
|
2743
|
+
|
|
2744
|
+
createReadable({ offset = 0, size, diskNumberStart, chunkSize = DEFAULT_CHUNK_SIZE } = {}) {
|
|
2799
2745
|
const reader = this;
|
|
2800
|
-
|
|
2801
|
-
|
|
2802
|
-
start() {
|
|
2803
|
-
this.chunkOffset = 0;
|
|
2804
|
-
},
|
|
2746
|
+
let chunkOffset = 0;
|
|
2747
|
+
return new ReadableStream({
|
|
2805
2748
|
async pull(controller) {
|
|
2806
|
-
const { offset = 0, size, diskNumberStart } = readable;
|
|
2807
|
-
const { chunkOffset } = this;
|
|
2808
2749
|
const dataSize = size === UNDEFINED_VALUE ? chunkSize : Math.min(chunkSize, size - chunkOffset);
|
|
2809
2750
|
const data = await readUint8Array(reader, offset + chunkOffset, dataSize, diskNumberStart);
|
|
2810
2751
|
controller.enqueue(data);
|
|
2811
2752
|
if ((chunkOffset + chunkSize > size) || (size === UNDEFINED_VALUE && !data.length && dataSize)) {
|
|
2812
2753
|
controller.close();
|
|
2813
2754
|
} else {
|
|
2814
|
-
|
|
2755
|
+
chunkOffset += chunkSize;
|
|
2815
2756
|
}
|
|
2816
2757
|
}
|
|
2817
2758
|
});
|
|
2818
|
-
return readable;
|
|
2819
2759
|
}
|
|
2820
2760
|
}
|
|
2821
2761
|
|
|
@@ -2954,8 +2894,6 @@
|
|
|
2954
2894
|
}
|
|
2955
2895
|
});
|
|
2956
2896
|
writer.blob = new Response(transformStream.readable, { headers }).blob();
|
|
2957
|
-
// mark early rejections (e.g. aborted pipe) as handled; awaiting getData() still
|
|
2958
|
-
// surfaces them
|
|
2959
2897
|
writer.blob.catch(() => { });
|
|
2960
2898
|
}
|
|
2961
2899
|
|
|
@@ -3117,7 +3055,7 @@
|
|
|
3117
3055
|
return eocdCache;
|
|
3118
3056
|
}
|
|
3119
3057
|
if (index >= size || length === 0) {
|
|
3120
|
-
return
|
|
3058
|
+
return EMPTY_UINT8_ARRAY;
|
|
3121
3059
|
} else {
|
|
3122
3060
|
if (index + length > size) {
|
|
3123
3061
|
length = size - index;
|
|
@@ -3174,8 +3112,6 @@
|
|
|
3174
3112
|
async function getRequestData(httpReader, sendRequest) {
|
|
3175
3113
|
const response = await sendRequest(HTTP_METHOD_GET, httpReader, getHeaders(httpReader));
|
|
3176
3114
|
httpReader.data = new Uint8Array(await response.arrayBuffer());
|
|
3177
|
-
// the downloaded content is authoritative, e.g. the Content-Length response header
|
|
3178
|
-
// of the HEAD request can be the encoded size when the content is compressed
|
|
3179
3115
|
httpReader.size = httpReader.data.length;
|
|
3180
3116
|
}
|
|
3181
3117
|
|
|
@@ -3240,7 +3176,6 @@
|
|
|
3240
3176
|
super();
|
|
3241
3177
|
Object.assign(this, {
|
|
3242
3178
|
url,
|
|
3243
|
-
// an explicit fetch implementation takes precedence over useXHR
|
|
3244
3179
|
reader: options.useXHR && !options.fetch ? new XHRReader(url, options) : new FetchReader(url, options)
|
|
3245
3180
|
});
|
|
3246
3181
|
}
|
|
@@ -3379,7 +3314,7 @@
|
|
|
3379
3314
|
}
|
|
3380
3315
|
}
|
|
3381
3316
|
} else {
|
|
3382
|
-
result =
|
|
3317
|
+
result = EMPTY_UINT8_ARRAY;
|
|
3383
3318
|
}
|
|
3384
3319
|
reader.lastDiskNumber = Math.max(currentDiskNumber, reader.lastDiskNumber);
|
|
3385
3320
|
return result;
|
|
@@ -3424,8 +3359,6 @@
|
|
|
3424
3359
|
writer.diskOffset += diskSourceWriter.size;
|
|
3425
3360
|
writer.diskNumber++;
|
|
3426
3361
|
diskWriter = null;
|
|
3427
|
-
// the next disk is not opened yet but its space is available; leaving a
|
|
3428
|
-
// stale value here would force a new disk for every subsequent write
|
|
3429
3362
|
writer.availableSize = writer.maxSize;
|
|
3430
3363
|
if (chunk.length > availableSize) {
|
|
3431
3364
|
await this.write(chunk.subarray(availableSize));
|
|
@@ -3605,7 +3538,6 @@
|
|
|
3605
3538
|
if (encoding && encoding.trim().toLowerCase() == "cp437") {
|
|
3606
3539
|
return decodeCP437(value);
|
|
3607
3540
|
} else {
|
|
3608
|
-
// ignoreBOM keeps a leading U+FEFF in filenames/comments instead of dropping it
|
|
3609
3541
|
return new TextDecoder(encoding, { ignoreBOM: true }).decode(value);
|
|
3610
3542
|
}
|
|
3611
3543
|
}
|
|
@@ -3853,8 +3785,6 @@
|
|
|
3853
3785
|
const CHARSET_UTF8 = "utf-8";
|
|
3854
3786
|
const PROPERTY_NAME_UTF8_SUFFIX = "UTF8";
|
|
3855
3787
|
const CHARSET_CP437 = "cp437";
|
|
3856
|
-
// bits of the general purpose flag that change how an entry is interpreted; the level bits (1-2) are excluded
|
|
3857
|
-
// because they are informative only
|
|
3858
3788
|
const BITFLAG_AMBIGUITY_MASK = BITFLAG_ENCRYPTED | BITFLAG_DATA_DESCRIPTOR | BITFLAG_LANG_ENCODING_FLAG;
|
|
3859
3789
|
const ZIP64_PROPERTIES = [
|
|
3860
3790
|
[PROPERTY_NAME_UNCOMPRESSED_SIZE, MAX_32_BITS],
|
|
@@ -3896,7 +3826,6 @@
|
|
|
3896
3826
|
if (reader.size < END_OF_CENTRAL_DIR_LENGTH) {
|
|
3897
3827
|
throw new Error(ERR_BAD_FORMAT);
|
|
3898
3828
|
}
|
|
3899
|
-
reader.chunkSize = getChunkSize(config);
|
|
3900
3829
|
const strictness = getStrictness(getOptionValue$1(zipReader, options, OPTION_STRICTNESS), getOptionValue$1(zipReader, options, OPTION_CHECK_AMBIGUITY));
|
|
3901
3830
|
const checkAmbiguity = strictness == STRICTNESS_STRICT;
|
|
3902
3831
|
const rejectAmbiguousEndOfDirectory = strictness != STRICTNESS_TOLERANT;
|
|
@@ -3911,8 +3840,6 @@
|
|
|
3911
3840
|
throw new Error(ERR_EOCDR_NOT_FOUND);
|
|
3912
3841
|
}
|
|
3913
3842
|
}
|
|
3914
|
-
// two or more end-anchored records that each dereference to a valid central directory cannot be told
|
|
3915
|
-
// apart (see comment_length ⟺ EOF): the archive is genuinely ambiguous, so refuse rather than guess
|
|
3916
3843
|
if (rejectAmbiguousEndOfDirectory && endOfDirectoryReachingEndCount > 1) {
|
|
3917
3844
|
throwAmbiguousArchive("multiple end of central directory records");
|
|
3918
3845
|
}
|
|
@@ -3935,7 +3862,7 @@
|
|
|
3935
3862
|
if (directoryDataOffset == MAX_32_BITS || directoryDataLength == MAX_32_BITS || filesLength == MAX_16_BITS || diskNumber == MAX_16_BITS) {
|
|
3936
3863
|
const endOfDirectoryLocatorArray = endOfDirectoryInfo.offset >= ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH ?
|
|
3937
3864
|
await readUint8Array(reader, endOfDirectoryInfo.offset - ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH, ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH) :
|
|
3938
|
-
|
|
3865
|
+
EMPTY_UINT8_ARRAY;
|
|
3939
3866
|
const endOfDirectoryLocatorView = getDataView$1(endOfDirectoryLocatorArray);
|
|
3940
3867
|
if (endOfDirectoryLocatorArray.length == ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH &&
|
|
3941
3868
|
getUint32(endOfDirectoryLocatorView, 0) == ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE) {
|
|
@@ -4002,12 +3929,6 @@
|
|
|
4002
3929
|
}
|
|
4003
3930
|
const expectedDirectoryDataOffset = centralDirectoryEndOffset - directoryDataLength - (reader.lastDiskOffset || 0);
|
|
4004
3931
|
if (directoryDataOffset != expectedDirectoryDataOffset && diskNumber == lastDiskNumber) {
|
|
4005
|
-
// the reconciled offset (the directory ends exactly where the canonical record begins) is anchored
|
|
4006
|
-
// to the unforgeable end of the archive; the stored offset is not. Prefer the reconciled offset
|
|
4007
|
-
// unless the stored one points at a directory and the reconciled one does not — that exception
|
|
4008
|
-
// keeps a corrupt declared directory length from sending the read astray, while still moving off a
|
|
4009
|
-
// stored offset that only looks valid because an append remnant left the previous (identically
|
|
4010
|
-
// laid out) directory sitting there.
|
|
4011
3932
|
const storedPointsAtDirectory = getUint32(directoryView, offset) == CENTRAL_FILE_HEADER_SIGNATURE;
|
|
4012
3933
|
let reconcile = !storedPointsAtDirectory;
|
|
4013
3934
|
if (!reconcile && expectedDirectoryDataOffset >= 0 && expectedDirectoryDataOffset + 4 <= reader.size) {
|
|
@@ -4164,11 +4085,11 @@
|
|
|
4164
4085
|
const extractPrependedData = getOptionValue$1(zipReader, options, OPTION_EXTRACT_PREPENDED_DATA);
|
|
4165
4086
|
const extractAppendedData = getOptionValue$1(zipReader, options, OPTION_EXTRACT_APPENDED_DATA);
|
|
4166
4087
|
if (extractPrependedData) {
|
|
4167
|
-
zipReader.prependedData = startOffset > 0 ? await readUint8Array(reader, 0, startOffset) :
|
|
4088
|
+
zipReader.prependedData = startOffset > 0 ? await readUint8Array(reader, 0, startOffset) : EMPTY_UINT8_ARRAY;
|
|
4168
4089
|
}
|
|
4169
|
-
zipReader.comment = commentLength ? await readUint8Array(reader, commentOffset + END_OF_CENTRAL_DIR_LENGTH, commentLength) :
|
|
4090
|
+
zipReader.comment = commentLength ? await readUint8Array(reader, commentOffset + END_OF_CENTRAL_DIR_LENGTH, commentLength) : EMPTY_UINT8_ARRAY;
|
|
4170
4091
|
if (extractAppendedData) {
|
|
4171
|
-
zipReader.appendedData = appendedDataOffset < reader.size ? await readUint8Array(reader, appendedDataOffset, reader.size - appendedDataOffset) :
|
|
4092
|
+
zipReader.appendedData = appendedDataOffset < reader.size ? await readUint8Array(reader, appendedDataOffset, reader.size - appendedDataOffset) : EMPTY_UINT8_ARRAY;
|
|
4172
4093
|
}
|
|
4173
4094
|
return true;
|
|
4174
4095
|
}
|
|
@@ -4280,7 +4201,7 @@
|
|
|
4280
4201
|
filenameLength
|
|
4281
4202
|
} = localDirectory;
|
|
4282
4203
|
const checkAmbiguity = getStrictness(getOptionValue$1(zipEntry, options, OPTION_STRICTNESS), getOptionValue$1(zipEntry, options, OPTION_CHECK_AMBIGUITY)) == STRICTNESS_STRICT;
|
|
4283
|
-
let rawLocalFilename =
|
|
4204
|
+
let rawLocalFilename = EMPTY_UINT8_ARRAY;
|
|
4284
4205
|
if (checkAmbiguity && (filenameLength || extraFieldLength)) {
|
|
4285
4206
|
const trailingDataArray = await readUint8Array(reader, offset + HEADER_SIZE, filenameLength + extraFieldLength, diskNumberStart);
|
|
4286
4207
|
rawLocalFilename = trailingDataArray.subarray(0, filenameLength);
|
|
@@ -4288,7 +4209,7 @@
|
|
|
4288
4209
|
} else {
|
|
4289
4210
|
localDirectory.rawExtraField = extraFieldLength ?
|
|
4290
4211
|
await readUint8Array(reader, offset + HEADER_SIZE + filenameLength, extraFieldLength, diskNumberStart) :
|
|
4291
|
-
|
|
4212
|
+
EMPTY_UINT8_ARRAY;
|
|
4292
4213
|
}
|
|
4293
4214
|
readCommonFooter(zipEntry, localDirectory, dataView, 4, true);
|
|
4294
4215
|
if (checkAmbiguity) {
|
|
@@ -4315,12 +4236,7 @@
|
|
|
4315
4236
|
}
|
|
4316
4237
|
const dataOffset = offset + HEADER_SIZE + filenameLength + extraFieldLength;
|
|
4317
4238
|
const size = compressedSize;
|
|
4318
|
-
const readable = reader.
|
|
4319
|
-
Object.assign(readable, {
|
|
4320
|
-
diskNumberStart,
|
|
4321
|
-
offset: dataOffset,
|
|
4322
|
-
size
|
|
4323
|
-
});
|
|
4239
|
+
const readable = reader.createReadable({ offset: dataOffset, size, diskNumberStart, chunkSize: getChunkSize(config) });
|
|
4324
4240
|
const signal = getOptionValue$1(zipEntry, options, OPTION_SIGNAL);
|
|
4325
4241
|
const checkPasswordOnly = getOptionValue$1(zipEntry, options, OPTION_CHECK_PASSWORD_ONLY);
|
|
4326
4242
|
let checkOverlappingEntry = getOptionValue$1(zipEntry, options, OPTION_CHECK_OVERLAPPING_ENTRY);
|
|
@@ -4591,7 +4507,6 @@
|
|
|
4591
4507
|
const view = getDataView$1(new Uint8Array(extraField.data));
|
|
4592
4508
|
let uid, gid;
|
|
4593
4509
|
if (isInfoZip) {
|
|
4594
|
-
// Info-ZIP New Unix "ux" field (0x7875): version + variable-length uid/gid
|
|
4595
4510
|
let offset = 0;
|
|
4596
4511
|
const version = getUint8(view, offset++);
|
|
4597
4512
|
const uidSize = getUint8(view, offset++);
|
|
@@ -4601,8 +4516,6 @@
|
|
|
4601
4516
|
gid = unpackUnixId(extraField.data.subarray(offset, offset + gidSize));
|
|
4602
4517
|
Object.assign(extraField, { version, uid, gid });
|
|
4603
4518
|
} else if (extraField.data.length >= 4) {
|
|
4604
|
-
// Info-ZIP Unix "Ux" field (0x7855): fixed 2-byte uid + gid (the file mode, if any, is
|
|
4605
|
-
// carried in the external file attributes, not here)
|
|
4606
4519
|
uid = getUint16(view, 0);
|
|
4607
4520
|
gid = getUint16(view, 2);
|
|
4608
4521
|
Object.assign(extraField, { uid, gid });
|
|
@@ -4654,7 +4567,6 @@
|
|
|
4654
4567
|
timeProperties.forEach((propertyName, indexProperty) => {
|
|
4655
4568
|
if (extraFieldExtendedTimestamp.data.length >= offset + 4) {
|
|
4656
4569
|
const time = getUint32(extraFieldView, offset);
|
|
4657
|
-
// the extended timestamp is a signed 32-bit time_t value
|
|
4658
4570
|
directory[propertyName] = extraFieldExtendedTimestamp[propertyName] = new Date((time | 0) * 1000);
|
|
4659
4571
|
const rawPropertyName = timeRawProperties[indexProperty];
|
|
4660
4572
|
extraFieldExtendedTimestamp[rawPropertyName] = time;
|
|
@@ -4731,7 +4643,6 @@
|
|
|
4731
4643
|
|
|
4732
4644
|
function getStrictness(strictness, checkAmbiguity) {
|
|
4733
4645
|
if (strictness === UNDEFINED_VALUE) {
|
|
4734
|
-
// `checkAmbiguity: true` is kept as a backward-compatible alias for the strictest mode
|
|
4735
4646
|
return checkAmbiguity ? STRICTNESS_STRICT : STRICTNESS_BALANCED;
|
|
4736
4647
|
}
|
|
4737
4648
|
return strictness;
|
|
@@ -4742,81 +4653,45 @@
|
|
|
4742
4653
|
return maxAppendedDataSize;
|
|
4743
4654
|
}
|
|
4744
4655
|
if (strictness == STRICTNESS_STRICT) {
|
|
4745
|
-
// the comment must reach the end of the file: no trailing data tolerated
|
|
4746
4656
|
return 0;
|
|
4747
4657
|
}
|
|
4748
4658
|
if (strictness == STRICTNESS_TOLERANT) {
|
|
4749
4659
|
return Infinity;
|
|
4750
4660
|
}
|
|
4751
|
-
// balanced: tolerate up to a legal comment's worth of trailing data (a 16-bit length); beyond that the
|
|
4752
|
-
// trailing bytes cannot hide inside a comment, so they are treated as a second thing bolted onto the file
|
|
4753
4661
|
return MAX_16_BITS;
|
|
4754
4662
|
}
|
|
4755
4663
|
|
|
4756
|
-
// cap on how many out-of-window central directory probes the scan below may issue. A legitimate archive needs
|
|
4757
|
-
// at most a couple (the canonical record, plus one more to detect genuine ambiguity); every other reachability
|
|
4758
|
-
// check is served from the tail window already in memory. The cap keeps an archive whose comment is stuffed
|
|
4759
|
-
// with unreachable end-anchored records from forcing an unbounded number of (potentially remote) reads.
|
|
4760
4664
|
const MAX_END_OF_CENTRAL_DIR_PROBES = 64;
|
|
4761
4665
|
|
|
4762
|
-
// reachability rankings for an end-anchored candidate record (see getCentralDirectoryReachability)
|
|
4763
4666
|
const CENTRAL_DIRECTORY_UNREACHABLE = 0;
|
|
4764
4667
|
const CENTRAL_DIRECTORY_PLAUSIBLE = 1;
|
|
4765
4668
|
const CENTRAL_DIRECTORY_REACHABLE = 2;
|
|
4766
4669
|
|
|
4767
|
-
// Locates the authoritative end of central directory record. The canonical record is the last one whose
|
|
4768
|
-
// declared comment reaches exactly the end of the file ("end-anchored") and that points to a central directory
|
|
4769
|
-
// ("reachable"); earlier signatures (stale append remnants, bytes embedded in a comment) are ignored. When two
|
|
4770
|
-
// or more end-anchored records point to a central directory the archive is ambiguous, and the count is returned
|
|
4771
|
-
// so the caller can refuse it. A record that reaches the end of the file but points to no central directory (an
|
|
4772
|
-
// empty archive) is only "plausible": it cannot be corroborated, so it never counts towards ambiguity and is
|
|
4773
|
-
// chosen only when no reachable record exists — otherwise an empty record forged in a comment could outrank the
|
|
4774
|
-
// genuine directory. When no record is end-anchored (appended data or an oversized comment), falls back to the
|
|
4775
|
-
// last record within the tolerated window that points to a directory (see seekEndOfCentralDirectory).
|
|
4776
4670
|
async function findEndOfCentralDirectory(reader, rejectAmbiguous, maxAppendedDataSize) {
|
|
4777
4671
|
const { size } = reader;
|
|
4778
|
-
// an end-anchored record can only live within the last END_OF_CENTRAL_DIR_LENGTH + MAX_16_BITS bytes,
|
|
4779
|
-
// since the comment length that ties it to the end of the file is a 16-bit field
|
|
4780
4672
|
const anchoredLength = Math.min(size, END_OF_CENTRAL_DIR_LENGTH + MAX_16_BITS);
|
|
4781
|
-
const anchoredOffset = size - anchoredLength;
|
|
4782
|
-
const anchoredArray = await readUint8Array(reader, anchoredOffset, anchoredLength);
|
|
4783
|
-
const anchoredView = getDataView$1(anchoredArray);
|
|
4784
4673
|
const remoteProbeBudget = { count: MAX_END_OF_CENTRAL_DIR_PROBES };
|
|
4785
4674
|
let endOfDirectoryInfo;
|
|
4786
4675
|
let plausibleEndOfDirectoryInfo;
|
|
4787
4676
|
let endOfDirectoryReachingEndCount = 0;
|
|
4788
|
-
for (
|
|
4789
|
-
|
|
4790
|
-
|
|
4791
|
-
const
|
|
4792
|
-
|
|
4793
|
-
|
|
4794
|
-
|
|
4795
|
-
const reachability = await getCentralDirectoryReachability(reader, anchoredView, anchoredOffset, indexByte, offset, size, remoteProbeBudget);
|
|
4796
|
-
if (reachability == CENTRAL_DIRECTORY_REACHABLE) {
|
|
4797
|
-
if (!endOfDirectoryInfo) {
|
|
4798
|
-
endOfDirectoryInfo = {
|
|
4799
|
-
offset,
|
|
4800
|
-
buffer: anchoredArray.slice(indexByte, indexByte + END_OF_CENTRAL_DIR_LENGTH).buffer
|
|
4801
|
-
};
|
|
4802
|
-
}
|
|
4803
|
-
endOfDirectoryReachingEndCount++;
|
|
4804
|
-
// the canonical record (highest offset) is found first; a second one is enough to flag ambiguity
|
|
4805
|
-
if (!rejectAmbiguous || endOfDirectoryReachingEndCount > 1) {
|
|
4806
|
-
break;
|
|
4807
|
-
}
|
|
4808
|
-
} else if (reachability == CENTRAL_DIRECTORY_PLAUSIBLE && !plausibleEndOfDirectoryInfo) {
|
|
4809
|
-
plausibleEndOfDirectoryInfo = {
|
|
4810
|
-
offset,
|
|
4811
|
-
buffer: anchoredArray.slice(indexByte, indexByte + END_OF_CENTRAL_DIR_LENGTH).buffer
|
|
4812
|
-
};
|
|
4677
|
+
for await (const [anchoredView, anchoredOffset, anchoredArray, indexByte, offset] of scanEndOfCentralDirectory(reader, anchoredLength)) {
|
|
4678
|
+
const commentLength = getUint16(anchoredView, indexByte + 20);
|
|
4679
|
+
if (offset + END_OF_CENTRAL_DIR_LENGTH + commentLength == size) {
|
|
4680
|
+
const reachability = await getCentralDirectoryReachability(reader, anchoredView, anchoredOffset, indexByte, offset, size, remoteProbeBudget);
|
|
4681
|
+
if (reachability == CENTRAL_DIRECTORY_REACHABLE) {
|
|
4682
|
+
if (!endOfDirectoryInfo) {
|
|
4683
|
+
endOfDirectoryInfo = getEndOfCentralDirectoryInfo(anchoredArray, indexByte, offset);
|
|
4813
4684
|
}
|
|
4685
|
+
endOfDirectoryReachingEndCount++;
|
|
4686
|
+
if (!rejectAmbiguous || endOfDirectoryReachingEndCount > 1) {
|
|
4687
|
+
break;
|
|
4688
|
+
}
|
|
4689
|
+
} else if (reachability == CENTRAL_DIRECTORY_PLAUSIBLE && !plausibleEndOfDirectoryInfo) {
|
|
4690
|
+
plausibleEndOfDirectoryInfo = getEndOfCentralDirectoryInfo(anchoredArray, indexByte, offset);
|
|
4814
4691
|
}
|
|
4815
4692
|
}
|
|
4816
4693
|
}
|
|
4817
4694
|
if (!endOfDirectoryInfo) {
|
|
4818
|
-
// no record points to a directory: prefer a plausible (empty) end-anchored record before scanning the
|
|
4819
|
-
// tolerated window for a bare signature
|
|
4820
4695
|
endOfDirectoryInfo = plausibleEndOfDirectoryInfo;
|
|
4821
4696
|
}
|
|
4822
4697
|
if (!endOfDirectoryInfo) {
|
|
@@ -4825,69 +4700,53 @@
|
|
|
4825
4700
|
return { endOfDirectoryInfo, endOfDirectoryReachingEndCount };
|
|
4826
4701
|
}
|
|
4827
4702
|
|
|
4828
|
-
// Fallback for findEndOfCentralDirectory when no record is end-anchored: appended data or an oversized comment
|
|
4829
|
-
// pushed the record's declared comment past the end of the file, so its position can no longer be reconciled
|
|
4830
|
-
// against the end of the file. Scans the tolerated window from the end and returns the first record that points
|
|
4831
|
-
// to a central directory, so a stray signature embedded in appended data cannot hijack discovery (which the
|
|
4832
|
-
// anchored scan already prevents for anchored records). Falls back to the first plausible (empty) record, then
|
|
4833
|
-
// to the last bare signature, so a degenerate archive still opens as before. The window ends at the file, so the
|
|
4834
|
-
// same in-window / metered reads as the anchored scan apply.
|
|
4835
4703
|
async function seekEndOfCentralDirectory(reader, maxAppendedDataSize, remoteProbeBudget) {
|
|
4836
4704
|
const { size } = reader;
|
|
4837
4705
|
const searchLength = Math.min(size, maxAppendedDataSize == Infinity ? size :
|
|
4838
4706
|
END_OF_CENTRAL_DIR_LENGTH + MAX_16_BITS + maxAppendedDataSize);
|
|
4839
|
-
const searchOffset = size - searchLength;
|
|
4840
|
-
const searchArray = await readUint8Array(reader, searchOffset, searchLength);
|
|
4841
|
-
const searchView = getDataView$1(searchArray);
|
|
4842
4707
|
let firstSignatureInfo, plausibleInfo;
|
|
4843
|
-
for (
|
|
4844
|
-
|
|
4845
|
-
|
|
4846
|
-
|
|
4847
|
-
|
|
4848
|
-
|
|
4849
|
-
|
|
4850
|
-
|
|
4851
|
-
|
|
4852
|
-
|
|
4853
|
-
|
|
4854
|
-
if (reachability == CENTRAL_DIRECTORY_PLAUSIBLE && !plausibleInfo) {
|
|
4855
|
-
plausibleInfo = record;
|
|
4856
|
-
}
|
|
4708
|
+
for await (const [searchView, searchOffset, searchArray, indexByte, offset] of scanEndOfCentralDirectory(reader, searchLength)) {
|
|
4709
|
+
const record = getEndOfCentralDirectoryInfo(searchArray, indexByte, offset);
|
|
4710
|
+
if (!firstSignatureInfo) {
|
|
4711
|
+
firstSignatureInfo = record;
|
|
4712
|
+
}
|
|
4713
|
+
const reachability = await getCentralDirectoryReachability(reader, searchView, searchOffset, indexByte, offset, size, remoteProbeBudget);
|
|
4714
|
+
if (reachability == CENTRAL_DIRECTORY_REACHABLE) {
|
|
4715
|
+
return record;
|
|
4716
|
+
}
|
|
4717
|
+
if (reachability == CENTRAL_DIRECTORY_PLAUSIBLE && !plausibleInfo) {
|
|
4718
|
+
plausibleInfo = record;
|
|
4857
4719
|
}
|
|
4858
4720
|
}
|
|
4859
4721
|
return plausibleInfo || firstSignatureInfo;
|
|
4860
4722
|
}
|
|
4861
4723
|
|
|
4862
|
-
|
|
4863
|
-
|
|
4864
|
-
|
|
4865
|
-
|
|
4866
|
-
|
|
4867
|
-
|
|
4868
|
-
|
|
4869
|
-
|
|
4870
|
-
|
|
4871
|
-
|
|
4872
|
-
|
|
4873
|
-
|
|
4874
|
-
|
|
4724
|
+
async function* scanEndOfCentralDirectory(reader, scanLength) {
|
|
4725
|
+
const scanOffset = reader.size - scanLength;
|
|
4726
|
+
const scanArray = await readUint8Array(reader, scanOffset, scanLength);
|
|
4727
|
+
const scanView = getDataView$1(scanArray);
|
|
4728
|
+
for (let indexByte = scanArray.length - END_OF_CENTRAL_DIR_LENGTH; indexByte >= 0; indexByte--) {
|
|
4729
|
+
if (getUint32(scanView, indexByte) == END_OF_CENTRAL_DIR_SIGNATURE) {
|
|
4730
|
+
yield [scanView, scanOffset, scanArray, indexByte, scanOffset + indexByte];
|
|
4731
|
+
}
|
|
4732
|
+
}
|
|
4733
|
+
}
|
|
4734
|
+
|
|
4735
|
+
function getEndOfCentralDirectoryInfo(scanArray, indexByte, offset) {
|
|
4736
|
+
return { offset, buffer: scanArray.slice(indexByte, indexByte + END_OF_CENTRAL_DIR_LENGTH).buffer };
|
|
4737
|
+
}
|
|
4738
|
+
|
|
4875
4739
|
async function getCentralDirectoryReachability(reader, view, anchoredOffset, indexByte, offset, size, remoteProbeBudget) {
|
|
4876
4740
|
const filesLength = getUint16(view, indexByte + 10);
|
|
4877
4741
|
const directoryDataLength = getUint32(view, indexByte + 12);
|
|
4878
4742
|
const directoryDataOffset = getUint32(view, indexByte + 16);
|
|
4879
4743
|
if (filesLength == MAX_16_BITS || directoryDataLength == MAX_32_BITS || directoryDataOffset == MAX_32_BITS) {
|
|
4880
|
-
// saturated fields imply a zip64 record; corroborate it with the zip64 end of central directory locator
|
|
4881
|
-
// that sits immediately before it, so saturated bytes inside a comment cannot masquerade as one
|
|
4882
4744
|
const locatorSignature = await readSignature(reader, view, anchoredOffset, offset - ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH, size, remoteProbeBudget);
|
|
4883
4745
|
return locatorSignature == ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE ? CENTRAL_DIRECTORY_REACHABLE : CENTRAL_DIRECTORY_UNREACHABLE;
|
|
4884
4746
|
}
|
|
4885
4747
|
if (!filesLength && !directoryDataLength) {
|
|
4886
|
-
// a valid empty archive has no central directory to dereference
|
|
4887
4748
|
return CENTRAL_DIRECTORY_PLAUSIBLE;
|
|
4888
4749
|
}
|
|
4889
|
-
// the central directory ends where this record starts; reconcile the stored offset against that actual
|
|
4890
|
-
// position (see stored_cd_offset ⟺ eocd_pos − cd_size) so prepended data does not hide the directory
|
|
4891
4750
|
for (const centralDirectoryOffset of [offset - directoryDataLength, directoryDataOffset]) {
|
|
4892
4751
|
if (await readSignature(reader, view, anchoredOffset, centralDirectoryOffset, size, remoteProbeBudget) == CENTRAL_FILE_HEADER_SIGNATURE) {
|
|
4893
4752
|
return CENTRAL_DIRECTORY_REACHABLE;
|
|
@@ -4896,15 +4755,11 @@
|
|
|
4896
4755
|
return CENTRAL_DIRECTORY_UNREACHABLE;
|
|
4897
4756
|
}
|
|
4898
4757
|
|
|
4899
|
-
// Reads a 4-byte little-endian signature at `signatureOffset`, served from the tail window (`view`, spanning
|
|
4900
|
-
// `[anchoredOffset, size)`) when it falls inside it and otherwise from a metered (possibly remote) read. Returns
|
|
4901
|
-
// UNDEFINED_VALUE when the position is out of range or the out-of-window read budget is exhausted.
|
|
4902
4758
|
async function readSignature(reader, view, anchoredOffset, signatureOffset, size, remoteProbeBudget) {
|
|
4903
4759
|
if (signatureOffset < 0 || signatureOffset + 4 > size) {
|
|
4904
4760
|
return UNDEFINED_VALUE;
|
|
4905
4761
|
}
|
|
4906
4762
|
if (signatureOffset >= anchoredOffset) {
|
|
4907
|
-
// the target sits inside the tail window already in memory: no extra read needed
|
|
4908
4763
|
return getUint32(view, signatureOffset - anchoredOffset);
|
|
4909
4764
|
}
|
|
4910
4765
|
if (remoteProbeBudget.count > 0) {
|
|
@@ -4912,7 +4767,6 @@
|
|
|
4912
4767
|
const signatureArray = await readUint8Array(reader, signatureOffset, 4);
|
|
4913
4768
|
return getUint32(getDataView$1(signatureArray), 0);
|
|
4914
4769
|
}
|
|
4915
|
-
// out of budget: leave this candidate unverified rather than issue another read
|
|
4916
4770
|
return UNDEFINED_VALUE;
|
|
4917
4771
|
}
|
|
4918
4772
|
|
|
@@ -4928,8 +4782,6 @@
|
|
|
4928
4782
|
if (localDirectory.compressionMethod != zipEntry.compressionMethod) {
|
|
4929
4783
|
throwAmbiguousArchive("mismatched local file header (compression method)");
|
|
4930
4784
|
}
|
|
4931
|
-
// when the data descriptor flag is set, the local signature and sizes are zeroed out; all-zero values are
|
|
4932
|
-
// also tolerated when the flag is clear because some tools produce them (streaming writers predating bit 3)
|
|
4933
4785
|
if (!localDirectory.bitFlag.dataDescriptor &&
|
|
4934
4786
|
(localDirectory.signature || localDirectory.compressedSize || localDirectory.uncompressedSize) &&
|
|
4935
4787
|
(localDirectory.signature != zipEntry.signature ||
|
|
@@ -5019,7 +4871,6 @@
|
|
|
5019
4871
|
const ERR_INVALID_ENCRYPTION_STRENGTH = "The strength must equal 1, 2, or 3";
|
|
5020
4872
|
const ERR_INVALID_EXTRAFIELD_TYPE = "Extra field type exceeds 65535";
|
|
5021
4873
|
const ERR_INVALID_EXTRAFIELD_DATA = "Extra field data exceeds 64KB";
|
|
5022
|
-
// same message as the constant exported by zip-reader.js
|
|
5023
4874
|
const ERR_UNSUPPORTED_COMPRESSION = "Compression method not supported";
|
|
5024
4875
|
const MIN_UNIX_TIME = -2147483648;
|
|
5025
4876
|
const MAX_UNIX_TIME = 2147483647;
|
|
@@ -5102,12 +4953,12 @@
|
|
|
5102
4953
|
rawExtraField,
|
|
5103
4954
|
} = entry;
|
|
5104
4955
|
const { level, languageEncodingFlag, dataDescriptor } = bitFlag;
|
|
5105
|
-
rawExtraFieldZip64 = rawExtraFieldZip64 ||
|
|
5106
|
-
rawExtraFieldAES = rawExtraFieldAES ||
|
|
5107
|
-
rawExtraFieldExtendedTimestamp = rawExtraFieldExtendedTimestamp ||
|
|
5108
|
-
rawExtraFieldNTFS = rawExtraFieldNTFS ||
|
|
5109
|
-
rawExtraFieldUnix = rawExtraFieldUnix ||
|
|
5110
|
-
rawExtraField = rawExtraField ||
|
|
4956
|
+
rawExtraFieldZip64 = rawExtraFieldZip64 || EMPTY_UINT8_ARRAY;
|
|
4957
|
+
rawExtraFieldAES = rawExtraFieldAES || EMPTY_UINT8_ARRAY;
|
|
4958
|
+
rawExtraFieldExtendedTimestamp = rawExtraFieldExtendedTimestamp || EMPTY_UINT8_ARRAY;
|
|
4959
|
+
rawExtraFieldNTFS = rawExtraFieldNTFS || EMPTY_UINT8_ARRAY;
|
|
4960
|
+
rawExtraFieldUnix = rawExtraFieldUnix || EMPTY_UINT8_ARRAY;
|
|
4961
|
+
rawExtraField = rawExtraField || EMPTY_UINT8_ARRAY;
|
|
5111
4962
|
if (entry.extraFieldAES) {
|
|
5112
4963
|
compressionMethod = COMPRESSION_METHOD_AES;
|
|
5113
4964
|
}
|
|
@@ -5213,7 +5064,7 @@
|
|
|
5213
5064
|
return false;
|
|
5214
5065
|
}
|
|
5215
5066
|
|
|
5216
|
-
async close(comment =
|
|
5067
|
+
async close(comment = EMPTY_UINT8_ARRAY, options = {}) {
|
|
5217
5068
|
const zipWriter = this;
|
|
5218
5069
|
const { pendingAddFileCalls, writer } = this;
|
|
5219
5070
|
const { writable } = writer;
|
|
@@ -5512,7 +5363,7 @@
|
|
|
5512
5363
|
if (!zipCrypto && (password !== UNDEFINED_VALUE || rawPassword !== UNDEFINED_VALUE) && !(encryptionStrength >= 1 && encryptionStrength <= 3)) {
|
|
5513
5364
|
throw new Error(ERR_INVALID_ENCRYPTION_STRENGTH);
|
|
5514
5365
|
}
|
|
5515
|
-
let rawExtraField =
|
|
5366
|
+
let rawExtraField = EMPTY_UINT8_ARRAY;
|
|
5516
5367
|
const extraField = options[PROPERTY_NAME_EXTRA_FIELD];
|
|
5517
5368
|
if (extraField) {
|
|
5518
5369
|
let extraFieldSize = 0;
|
|
@@ -5573,8 +5424,6 @@
|
|
|
5573
5424
|
let maximumCompressedSize = 0;
|
|
5574
5425
|
let uncompressedSize = 0;
|
|
5575
5426
|
if (passThrough) {
|
|
5576
|
-
// the headers of a passThrough entry describe the payload verbatim: without a
|
|
5577
|
-
// reader they would declare content that is not there
|
|
5578
5427
|
if (!reader) {
|
|
5579
5428
|
throw new Error(ERR_UNDEFINED_READER);
|
|
5580
5429
|
}
|
|
@@ -5585,8 +5434,6 @@
|
|
|
5585
5434
|
}
|
|
5586
5435
|
const zip64Enabled = zip64 === true;
|
|
5587
5436
|
const encrypted = getOptionValue(zipWriter, options, PROPERTY_NAME_ENCRYPTED);
|
|
5588
|
-
// entries without a reader have no payload: write them as empty stored files instead of
|
|
5589
|
-
// declaring a compressed or encrypted content that does not exist
|
|
5590
5437
|
const encryptedEntry = Boolean(reader) && (Boolean((password && getLength(password)) || (rawPassword && getLength(rawPassword))) || (passThrough && encrypted));
|
|
5591
5438
|
if (!reader) {
|
|
5592
5439
|
level = 0;
|
|
@@ -5724,7 +5571,6 @@
|
|
|
5724
5571
|
fileEntry.diskNumberStart = writer.diskNumber;
|
|
5725
5572
|
fileEntry.offset = getSegmentOffset(zipWriter, writer);
|
|
5726
5573
|
if (usdz) {
|
|
5727
|
-
// the padding depends on the entry offset, only known now that the writer is locked
|
|
5728
5574
|
const previousMetadataSize = entryInfo.metadataSize;
|
|
5729
5575
|
appendExtraFieldUSDZ(entryInfo, zipWriter.offset - writer.diskOffset);
|
|
5730
5576
|
fileEntry.size += entryInfo.metadataSize - previousMetadataSize;
|
|
@@ -5767,10 +5613,6 @@
|
|
|
5767
5613
|
if (releaseLockWriter) {
|
|
5768
5614
|
releaseLockWriter();
|
|
5769
5615
|
}
|
|
5770
|
-
// A buffered entry uses a temporary stream (see `createTempStream`). When that stream is
|
|
5771
|
-
// backed by a resource (a file, an OPFS handle, ...) it must be released on every exit path,
|
|
5772
|
-
// including the error path where the stream is otherwise abandoned without being closed or
|
|
5773
|
-
// cancelled. `dispose()` is optional and best-effort so it never masks the original outcome.
|
|
5774
5616
|
if (bufferedWrite && fileWriter && fileWriter.dispose) {
|
|
5775
5617
|
try {
|
|
5776
5618
|
await fileWriter.dispose();
|
|
@@ -5797,7 +5639,7 @@
|
|
|
5797
5639
|
async function skipDiskIfNeeded() {
|
|
5798
5640
|
if (getLength(headerInfo.localHeaderArray) > writer.availableSize) {
|
|
5799
5641
|
writer.availableSize = 0;
|
|
5800
|
-
await writeData(writer,
|
|
5642
|
+
await writeData(writer, EMPTY_UINT8_ARRAY);
|
|
5801
5643
|
}
|
|
5802
5644
|
}
|
|
5803
5645
|
}
|
|
@@ -5908,8 +5750,7 @@
|
|
|
5908
5750
|
}
|
|
5909
5751
|
const { writable } = writer;
|
|
5910
5752
|
if (reader) {
|
|
5911
|
-
reader.chunkSize
|
|
5912
|
-
const readable = reader.readable;
|
|
5753
|
+
const readable = reader.createReadable ? reader.createReadable({ chunkSize: getChunkSize(config) }) : reader.readable;
|
|
5913
5754
|
const size = reader.size;
|
|
5914
5755
|
const workerOptions = {
|
|
5915
5756
|
options: {
|
|
@@ -6009,13 +5850,9 @@
|
|
|
6009
5850
|
: compressionMethod !== COMPRESSION_METHOD_STORE);
|
|
6010
5851
|
let rawLocalExtraFieldZip64;
|
|
6011
5852
|
const uncompressedFile = passThrough || !compressed;
|
|
6012
|
-
// entries without a data descriptor are always buffered (cf. getFileEntry), so the
|
|
6013
|
-
// zip64 extra field values can be patched into the local header before flushing it
|
|
6014
5853
|
const zip64ExtraFieldComplete = zip64 && (options.bufferedWrite || !dataDescriptor || ((!zip64UncompressedSize && !zip64CompressedSize) || uncompressedFile));
|
|
6015
5854
|
const writeLocalExtraFieldZip64 = zip64ExtraFieldComplete || (zip64 && dataDescriptor && (zip64UncompressedSize || zip64CompressedSize));
|
|
6016
5855
|
if (zip64 && (zip64UncompressedSize || zip64CompressedSize)) {
|
|
6017
|
-
// APPNOTE 4.5.3: the zip64 extra field of a local header must include both the
|
|
6018
|
-
// uncompressed and compressed size fields
|
|
6019
5856
|
const length = 4 + 16;
|
|
6020
5857
|
const extraFieldZip64 = createRecordWriter(length);
|
|
6021
5858
|
extraFieldZip64.uint16(EXTRAFIELD_TYPE_ZIP64);
|
|
@@ -6029,7 +5866,7 @@
|
|
|
6029
5866
|
}
|
|
6030
5867
|
}
|
|
6031
5868
|
} else {
|
|
6032
|
-
rawLocalExtraFieldZip64 =
|
|
5869
|
+
rawLocalExtraFieldZip64 = EMPTY_UINT8_ARRAY;
|
|
6033
5870
|
}
|
|
6034
5871
|
let rawExtraFieldAES;
|
|
6035
5872
|
if (encrypted && !zipCrypto) {
|
|
@@ -6039,7 +5876,7 @@
|
|
|
6039
5876
|
rawExtraFieldAES = extraFieldAES.array;
|
|
6040
5877
|
rawExtraFieldAES[8] = encryptionStrength;
|
|
6041
5878
|
} else {
|
|
6042
|
-
rawExtraFieldAES =
|
|
5879
|
+
rawExtraFieldAES = EMPTY_UINT8_ARRAY;
|
|
6043
5880
|
}
|
|
6044
5881
|
let rawExtraFieldNTFS;
|
|
6045
5882
|
let rawExtraFieldExtendedTimestamp;
|
|
@@ -6062,8 +5899,7 @@
|
|
|
6062
5899
|
}
|
|
6063
5900
|
rawExtraFieldExtendedTimestamp = extraFieldTimestamp.array;
|
|
6064
5901
|
} else {
|
|
6065
|
-
|
|
6066
|
-
rawExtraFieldExtendedTimestamp = new Uint8Array();
|
|
5902
|
+
rawExtraFieldExtendedTimestamp = EMPTY_UINT8_ARRAY;
|
|
6067
5903
|
}
|
|
6068
5904
|
try {
|
|
6069
5905
|
const lastModTimeNTFS = getTimeNTFS(lastModDate);
|
|
@@ -6078,10 +5914,10 @@
|
|
|
6078
5914
|
extraFieldNTFS.uint64(getTimeNTFS(creationDate) || lastModTimeNTFS);
|
|
6079
5915
|
rawExtraFieldNTFS = extraFieldNTFS.array;
|
|
6080
5916
|
} catch {
|
|
6081
|
-
rawExtraFieldNTFS =
|
|
5917
|
+
rawExtraFieldNTFS = EMPTY_UINT8_ARRAY;
|
|
6082
5918
|
}
|
|
6083
5919
|
} else {
|
|
6084
|
-
rawExtraFieldNTFS = rawExtraFieldExtendedTimestamp =
|
|
5920
|
+
rawExtraFieldNTFS = rawExtraFieldExtendedTimestamp = EMPTY_UINT8_ARRAY;
|
|
6085
5921
|
}
|
|
6086
5922
|
let rawExtraFieldUnix;
|
|
6087
5923
|
try {
|
|
@@ -6107,10 +5943,10 @@
|
|
|
6107
5943
|
extraFieldUnix.uint16((gid === UNDEFINED_VALUE ? 0 : gid) & MAX_16_BITS);
|
|
6108
5944
|
rawExtraFieldUnix = extraFieldUnix.array;
|
|
6109
5945
|
} else {
|
|
6110
|
-
rawExtraFieldUnix =
|
|
5946
|
+
rawExtraFieldUnix = EMPTY_UINT8_ARRAY;
|
|
6111
5947
|
}
|
|
6112
5948
|
} catch {
|
|
6113
|
-
rawExtraFieldUnix =
|
|
5949
|
+
rawExtraFieldUnix = EMPTY_UINT8_ARRAY;
|
|
6114
5950
|
}
|
|
6115
5951
|
if (compressionMethod === UNDEFINED_VALUE) {
|
|
6116
5952
|
compressionMethod = compressed ? COMPRESSION_METHOD_DEFLATE : COMPRESSION_METHOD_STORE;
|
|
@@ -6177,7 +6013,7 @@
|
|
|
6177
6013
|
version,
|
|
6178
6014
|
compressionMethod,
|
|
6179
6015
|
extraFieldExtendedTimestampFlag,
|
|
6180
|
-
rawExtraFieldZip64:
|
|
6016
|
+
rawExtraFieldZip64: EMPTY_UINT8_ARRAY,
|
|
6181
6017
|
localExtraFieldZip64Length,
|
|
6182
6018
|
rawExtraFieldExtendedTimestamp,
|
|
6183
6019
|
rawExtraFieldNTFS,
|
|
@@ -6190,7 +6026,6 @@
|
|
|
6190
6026
|
function appendExtraFieldUSDZ(entryInfo, zipWriterOffset) {
|
|
6191
6027
|
const { headerInfo } = entryInfo;
|
|
6192
6028
|
let { localHeaderArray, extraFieldLength } = headerInfo;
|
|
6193
|
-
let localHeaderArrayView;
|
|
6194
6029
|
let extraBytesLength = 64 - ((zipWriterOffset + getLength(localHeaderArray)) % 64);
|
|
6195
6030
|
if (extraBytesLength < 4) {
|
|
6196
6031
|
extraBytesLength += 64;
|
|
@@ -6203,7 +6038,7 @@
|
|
|
6203
6038
|
headerInfo.localHeaderArray = localHeaderArray = new Uint8Array(getLength(previousLocalHeaderArray) + extraBytesLength);
|
|
6204
6039
|
arraySet(localHeaderArray, previousLocalHeaderArray);
|
|
6205
6040
|
arraySet(localHeaderArray, rawExtraFieldUSDZ, getLength(previousLocalHeaderArray));
|
|
6206
|
-
localHeaderArrayView = getDataView(localHeaderArray);
|
|
6041
|
+
const localHeaderArrayView = getDataView(localHeaderArray);
|
|
6207
6042
|
setUint16(localHeaderArrayView, 28, extraFieldLength + extraBytesLength);
|
|
6208
6043
|
headerInfo.localHeaderView = localHeaderArrayView;
|
|
6209
6044
|
entryInfo.metadataSize += extraBytesLength;
|
|
@@ -6211,7 +6046,7 @@
|
|
|
6211
6046
|
|
|
6212
6047
|
function packUnixId(id) {
|
|
6213
6048
|
if (id === UNDEFINED_VALUE) {
|
|
6214
|
-
return
|
|
6049
|
+
return EMPTY_UINT8_ARRAY;
|
|
6215
6050
|
} else {
|
|
6216
6051
|
const dataArray = new Uint8Array(4);
|
|
6217
6052
|
const dataView = getDataView(dataArray);
|
|
@@ -6254,7 +6089,7 @@
|
|
|
6254
6089
|
dataDescriptor,
|
|
6255
6090
|
dataDescriptorSignature
|
|
6256
6091
|
}) {
|
|
6257
|
-
let dataDescriptorArray =
|
|
6092
|
+
let dataDescriptorArray = EMPTY_UINT8_ARRAY;
|
|
6258
6093
|
let dataDescriptorView, dataDescriptorOffset = 0;
|
|
6259
6094
|
let dataDescriptorLength = zip64 ? DATA_DESCRIPTOR_RECORD_ZIP_64_LENGTH : DATA_DESCRIPTOR_RECORD_LENGTH;
|
|
6260
6095
|
if (dataDescriptorSignature) {
|
|
@@ -6338,7 +6173,6 @@
|
|
|
6338
6173
|
}
|
|
6339
6174
|
}
|
|
6340
6175
|
if (zip64 && localExtraFieldZip64Length) {
|
|
6341
|
-
// the local zip64 extra field always contains both size slots
|
|
6342
6176
|
const localHeaderOffset = HEADER_SIZE + getLength(rawFilename) + 4;
|
|
6343
6177
|
setBigUint64(localHeaderView, localHeaderOffset, BigInt(uncompressedSize));
|
|
6344
6178
|
setBigUint64(localHeaderView, localHeaderOffset + 8, BigInt(compressedSize));
|
|
@@ -6392,7 +6226,7 @@
|
|
|
6392
6226
|
}
|
|
6393
6227
|
rawExtraFieldZip64 = extraFieldZip64.array;
|
|
6394
6228
|
} else {
|
|
6395
|
-
rawExtraFieldZip64 =
|
|
6229
|
+
rawExtraFieldZip64 = EMPTY_UINT8_ARRAY;
|
|
6396
6230
|
}
|
|
6397
6231
|
fileEntry.rawExtraFieldZip64 = rawExtraFieldZip64;
|
|
6398
6232
|
fileEntry.zip64Offset = zip64Offset;
|
|
@@ -6407,7 +6241,7 @@
|
|
|
6407
6241
|
extraFieldTimestamp.uint32(lastModTimeUnix);
|
|
6408
6242
|
rawExtraFieldTimestamp = extraFieldTimestamp.array;
|
|
6409
6243
|
} else {
|
|
6410
|
-
rawExtraFieldTimestamp =
|
|
6244
|
+
rawExtraFieldTimestamp = EMPTY_UINT8_ARRAY;
|
|
6411
6245
|
}
|
|
6412
6246
|
fileEntry.rawExtraFieldExtendedTimestamp = rawExtraFieldTimestamp;
|
|
6413
6247
|
const extraFieldLength = getLength(
|
|
@@ -6463,7 +6297,7 @@
|
|
|
6463
6297
|
await writeData(writer, directoryArray.slice(directoryDiskOffset, offset));
|
|
6464
6298
|
directoryDiskOffset = offset;
|
|
6465
6299
|
writer.availableSize = 0;
|
|
6466
|
-
await writeData(writer,
|
|
6300
|
+
await writeData(writer, EMPTY_UINT8_ARRAY);
|
|
6467
6301
|
}
|
|
6468
6302
|
if (indexFileEntry == 0) {
|
|
6469
6303
|
cdStartDiskNumber = writer.diskNumber;
|
|
@@ -6536,7 +6370,7 @@
|
|
|
6536
6370
|
const endOfdirectoryRecord = createRecordWriter(zip64 ? ZIP64_END_OF_CENTRAL_DIR_TOTAL_LENGTH : END_OF_CENTRAL_DIR_LENGTH);
|
|
6537
6371
|
if (getLength(endOfdirectoryRecord.array) + commentLength > writer.availableSize) {
|
|
6538
6372
|
writer.availableSize = 0;
|
|
6539
|
-
await writeData(writer,
|
|
6373
|
+
await writeData(writer, EMPTY_UINT8_ARRAY);
|
|
6540
6374
|
}
|
|
6541
6375
|
lastDiskNumber = writer.diskNumber;
|
|
6542
6376
|
if (zip64) {
|
|
@@ -6633,7 +6467,6 @@
|
|
|
6633
6467
|
return Math.floor(date.getTime() / 1000);
|
|
6634
6468
|
}
|
|
6635
6469
|
|
|
6636
|
-
// the extended timestamp extra field stores dates as signed 32-bit time_t values
|
|
6637
6470
|
function inUnixTimeRange(timeUnix) {
|
|
6638
6471
|
return timeUnix >= MIN_UNIX_TIME && timeUnix <= MAX_UNIX_TIME;
|
|
6639
6472
|
}
|
|
@@ -6815,39 +6648,15 @@
|
|
|
6815
6648
|
*/
|
|
6816
6649
|
|
|
6817
6650
|
|
|
6818
|
-
const DEFAULT_THRESHOLD = 1024 * 1024;
|
|
6819
|
-
const DEFAULT_DIRECTORY_NAME = ".zip.js-temp";
|
|
6651
|
+
const DEFAULT_THRESHOLD$2 = 1024 * 1024;
|
|
6652
|
+
const DEFAULT_DIRECTORY_NAME$1 = ".zip.js-temp";
|
|
6820
6653
|
|
|
6821
|
-
// Builds a `createTempStream` factory (see `ZipWriter`'s option of the same name) that spills the
|
|
6822
|
-
// data of a buffered entry to the Origin Private File System (OPFS) instead of keeping it in memory.
|
|
6823
|
-
//
|
|
6824
|
-
// It is meant for the buffered-write path (keep-order concurrent `add()`, non-seekable output, ...),
|
|
6825
|
-
// where the compressed data of an entry has to be held until the writer is free. In memory that data
|
|
6826
|
-
// grows with the entry size; here it is written to an OPFS file and streamed back, so peak memory
|
|
6827
|
-
// stays bounded.
|
|
6828
|
-
//
|
|
6829
|
-
// It is hybrid on purpose: an entry stays fully in memory until it exceeds `thresholdBytes`, and only
|
|
6830
|
-
// then spills to a file. Small entries never touch the disk, so a workload made of many tiny entries
|
|
6831
|
-
// keeps the speed of the in-memory default; only genuinely large entries pay for (and benefit from)
|
|
6832
|
-
// the file round-trip.
|
|
6833
|
-
//
|
|
6834
|
-
// OPFS is a browser/worker feature; there is no fallback here. Feature-detect
|
|
6835
|
-
// `navigator.storage.getDirectory` (or inject `getDirectory`) before using it, and let the writer use
|
|
6836
|
-
// its in-memory default elsewhere.
|
|
6837
|
-
//
|
|
6838
|
-
// Options:
|
|
6839
|
-
// thresholdBytes spill to a file once a buffered entry exceeds this size (default 1 MiB).
|
|
6840
|
-
// directoryName name of the OPFS sub-directory holding the temp files (default ".zip.js-temp").
|
|
6841
|
-
// getDirectory returns (or resolves to) the root `FileSystemDirectoryHandle`. Defaults to
|
|
6842
|
-
// `navigator.storage.getDirectory()`. Inject it to run inside a worker with a
|
|
6843
|
-
// pre-obtained handle, or to test against a mock.
|
|
6844
6654
|
function createOPFSTempStream(options = {}) {
|
|
6845
6655
|
const {
|
|
6846
|
-
thresholdBytes = DEFAULT_THRESHOLD,
|
|
6847
|
-
directoryName = DEFAULT_DIRECTORY_NAME,
|
|
6656
|
+
thresholdBytes = DEFAULT_THRESHOLD$2,
|
|
6657
|
+
directoryName = DEFAULT_DIRECTORY_NAME$1,
|
|
6848
6658
|
getDirectory = () => navigator.storage.getDirectory()
|
|
6849
6659
|
} = options;
|
|
6850
|
-
// The temp directory is resolved once and shared by every entry of this factory.
|
|
6851
6660
|
let directoryHandlePromise;
|
|
6852
6661
|
function getTempDirectory() {
|
|
6853
6662
|
if (!directoryHandlePromise) {
|
|
@@ -6856,15 +6665,12 @@
|
|
|
6856
6665
|
}
|
|
6857
6666
|
return directoryHandlePromise;
|
|
6858
6667
|
}
|
|
6859
|
-
return
|
|
6668
|
+
return function () {
|
|
6860
6669
|
const memoryChunks = [];
|
|
6861
6670
|
let bufferedSize = 0;
|
|
6862
6671
|
let spilled = false;
|
|
6863
6672
|
let fileName, fileHandle, fileWriter, fileReader;
|
|
6864
6673
|
|
|
6865
|
-
// Move whatever is buffered in memory to a fresh OPFS file, then keep writing to that file.
|
|
6866
|
-
// `FileSystemWritableFileStream` is a `WritableStream`, so it is driven through the standard
|
|
6867
|
-
// writer API rather than its non-standard `write()`/`seek()` convenience methods.
|
|
6868
6674
|
async function spillToFile() {
|
|
6869
6675
|
const directoryHandle = await getTempDirectory();
|
|
6870
6676
|
fileName = crypto.randomUUID();
|
|
@@ -6874,7 +6680,6 @@
|
|
|
6874
6680
|
for (const chunk of memoryChunks) {
|
|
6875
6681
|
await fileWriter.write(chunk);
|
|
6876
6682
|
}
|
|
6877
|
-
// Release the in-memory copy; from now on data lives in the file.
|
|
6878
6683
|
memoryChunks.length = 0;
|
|
6879
6684
|
}
|
|
6880
6685
|
|
|
@@ -6898,9 +6703,6 @@
|
|
|
6898
6703
|
}
|
|
6899
6704
|
});
|
|
6900
6705
|
|
|
6901
|
-
// The writer always closes `writable` before reading `readable`, so `spilled` is final by the
|
|
6902
|
-
// time `pull` runs. It is read lazily here (not in `start`, which runs at construction time,
|
|
6903
|
-
// before anything is written and before `spilled` is known).
|
|
6904
6706
|
let memoryIndex = 0;
|
|
6905
6707
|
const readable = new ReadableStream({
|
|
6906
6708
|
async pull(controller) {
|
|
@@ -6927,11 +6729,6 @@
|
|
|
6927
6729
|
}
|
|
6928
6730
|
}
|
|
6929
6731
|
}, { highWaterMark: 0 });
|
|
6930
|
-
// highWaterMark 0: do not pull (and possibly close on an empty buffer) until the consumer
|
|
6931
|
-
// actually reads, which the writer only does once the data has been fully written.
|
|
6932
|
-
|
|
6933
|
-
// Called by the writer on every exit path (success, error, abort). Best-effort: it must never
|
|
6934
|
-
// throw. Closes any still-open file writer, then deletes the temp file.
|
|
6935
6732
|
async function dispose() {
|
|
6936
6733
|
if (fileWriter) {
|
|
6937
6734
|
try {
|
|
@@ -6986,13 +6783,276 @@
|
|
|
6986
6783
|
*/
|
|
6987
6784
|
|
|
6988
6785
|
|
|
6786
|
+
const DEFAULT_THRESHOLD$1 = 1024 * 1024;
|
|
6787
|
+
|
|
6788
|
+
function createBlobTempStream(options = {}) {
|
|
6789
|
+
const {
|
|
6790
|
+
thresholdBytes = DEFAULT_THRESHOLD$1
|
|
6791
|
+
} = options;
|
|
6792
|
+
return function () {
|
|
6793
|
+
const memoryChunks = [];
|
|
6794
|
+
let bufferedSize = 0;
|
|
6795
|
+
let spilled = false;
|
|
6796
|
+
let blobWriter, blobPromise, blobReader;
|
|
6797
|
+
|
|
6798
|
+
async function spillToBlob() {
|
|
6799
|
+
const transformStream = new TransformStream();
|
|
6800
|
+
blobPromise = new Response(transformStream.readable).blob();
|
|
6801
|
+
blobWriter = transformStream.writable.getWriter();
|
|
6802
|
+
spilled = true;
|
|
6803
|
+
for (const chunk of memoryChunks) {
|
|
6804
|
+
await blobWriter.write(chunk);
|
|
6805
|
+
}
|
|
6806
|
+
memoryChunks.length = 0;
|
|
6807
|
+
}
|
|
6808
|
+
|
|
6809
|
+
const writable = new WritableStream({
|
|
6810
|
+
async write(chunk) {
|
|
6811
|
+
if (spilled) {
|
|
6812
|
+
await blobWriter.write(chunk);
|
|
6813
|
+
} else {
|
|
6814
|
+
memoryChunks.push(chunk);
|
|
6815
|
+
bufferedSize += chunk.length;
|
|
6816
|
+
if (bufferedSize > thresholdBytes) {
|
|
6817
|
+
await spillToBlob();
|
|
6818
|
+
}
|
|
6819
|
+
}
|
|
6820
|
+
},
|
|
6821
|
+
async close() {
|
|
6822
|
+
if (blobWriter) {
|
|
6823
|
+
await blobWriter.close();
|
|
6824
|
+
blobWriter = null;
|
|
6825
|
+
}
|
|
6826
|
+
}
|
|
6827
|
+
});
|
|
6828
|
+
|
|
6829
|
+
let memoryIndex = 0;
|
|
6830
|
+
const readable = new ReadableStream({
|
|
6831
|
+
async pull(controller) {
|
|
6832
|
+
if (spilled) {
|
|
6833
|
+
if (!blobReader) {
|
|
6834
|
+
const blob = await blobPromise;
|
|
6835
|
+
blobReader = blob.stream().getReader();
|
|
6836
|
+
}
|
|
6837
|
+
const { value, done } = await blobReader.read();
|
|
6838
|
+
if (done) {
|
|
6839
|
+
controller.close();
|
|
6840
|
+
} else {
|
|
6841
|
+
controller.enqueue(value);
|
|
6842
|
+
}
|
|
6843
|
+
} else if (memoryIndex < memoryChunks.length) {
|
|
6844
|
+
controller.enqueue(memoryChunks[memoryIndex++]);
|
|
6845
|
+
} else {
|
|
6846
|
+
controller.close();
|
|
6847
|
+
}
|
|
6848
|
+
},
|
|
6849
|
+
async cancel(reason) {
|
|
6850
|
+
if (blobReader) {
|
|
6851
|
+
await blobReader.cancel(reason);
|
|
6852
|
+
}
|
|
6853
|
+
}
|
|
6854
|
+
}, { highWaterMark: 0 });
|
|
6855
|
+
async function dispose() {
|
|
6856
|
+
if (blobWriter) {
|
|
6857
|
+
try {
|
|
6858
|
+
await blobWriter.abort();
|
|
6859
|
+
} catch {
|
|
6860
|
+
// ignored
|
|
6861
|
+
}
|
|
6862
|
+
blobWriter = null;
|
|
6863
|
+
}
|
|
6864
|
+
if (blobPromise) {
|
|
6865
|
+
blobPromise.catch(() => {
|
|
6866
|
+
// ignored
|
|
6867
|
+
});
|
|
6868
|
+
blobPromise = null;
|
|
6869
|
+
}
|
|
6870
|
+
memoryChunks.length = 0;
|
|
6871
|
+
}
|
|
6872
|
+
|
|
6873
|
+
return { writable, readable, dispose };
|
|
6874
|
+
};
|
|
6875
|
+
}
|
|
6876
|
+
|
|
6877
|
+
/*
|
|
6878
|
+
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
6879
|
+
|
|
6880
|
+
Redistribution and use in source and binary forms, with or without
|
|
6881
|
+
modification, are permitted provided that the following conditions are met:
|
|
6882
|
+
|
|
6883
|
+
1. Redistributions of source code must retain the above copyright notice,
|
|
6884
|
+
this list of conditions and the following disclaimer.
|
|
6885
|
+
|
|
6886
|
+
2. Redistributions in binary form must reproduce the above copyright
|
|
6887
|
+
notice, this list of conditions and the following disclaimer in
|
|
6888
|
+
the documentation and/or other materials provided with the distribution.
|
|
6889
|
+
|
|
6890
|
+
3. The names of the authors may not be used to endorse or promote products
|
|
6891
|
+
derived from this software without specific prior written permission.
|
|
6892
|
+
|
|
6893
|
+
THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
|
|
6894
|
+
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
6895
|
+
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
|
|
6896
|
+
INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
6897
|
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
6898
|
+
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
|
6899
|
+
OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
6900
|
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
6901
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
6902
|
+
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
6903
|
+
*/
|
|
6904
|
+
|
|
6905
|
+
|
|
6906
|
+
const DEFAULT_THRESHOLD = 1024 * 1024;
|
|
6907
|
+
const DEFAULT_DIRECTORY_NAME = ".zip.js-temp";
|
|
6908
|
+
const READ_CHUNK_SIZE = 512 * 1024;
|
|
6909
|
+
const ERR_UNSUPPORTED_CONTEXT = "createSyncAccessHandle is only available in dedicated workers";
|
|
6910
|
+
|
|
6911
|
+
function createSyncAccessHandleTempStream(options = {}) {
|
|
6912
|
+
const {
|
|
6913
|
+
thresholdBytes = DEFAULT_THRESHOLD,
|
|
6914
|
+
directoryName = DEFAULT_DIRECTORY_NAME,
|
|
6915
|
+
getDirectory
|
|
6916
|
+
} = options;
|
|
6917
|
+
if (!getDirectory &&
|
|
6918
|
+
(typeof FileSystemFileHandle == "undefined" || !FileSystemFileHandle.prototype.createSyncAccessHandle)) {
|
|
6919
|
+
throw new Error(ERR_UNSUPPORTED_CONTEXT);
|
|
6920
|
+
}
|
|
6921
|
+
const getRootDirectory = getDirectory || (() => navigator.storage.getDirectory());
|
|
6922
|
+
let directoryHandlePromise;
|
|
6923
|
+
function getTempDirectory() {
|
|
6924
|
+
if (!directoryHandlePromise) {
|
|
6925
|
+
directoryHandlePromise = Promise.resolve(getRootDirectory())
|
|
6926
|
+
.then(root => root.getDirectoryHandle(directoryName, { create: true }));
|
|
6927
|
+
}
|
|
6928
|
+
return directoryHandlePromise;
|
|
6929
|
+
}
|
|
6930
|
+
return function () {
|
|
6931
|
+
const memoryChunks = [];
|
|
6932
|
+
let bufferedSize = 0;
|
|
6933
|
+
let spilled = false;
|
|
6934
|
+
let fileName, accessHandle;
|
|
6935
|
+
let writeOffset = 0;
|
|
6936
|
+
let readOffset = 0;
|
|
6937
|
+
|
|
6938
|
+
async function spillToFile() {
|
|
6939
|
+
const directoryHandle = await getTempDirectory();
|
|
6940
|
+
fileName = crypto.randomUUID();
|
|
6941
|
+
const fileHandle = await directoryHandle.getFileHandle(fileName, { create: true });
|
|
6942
|
+
accessHandle = await fileHandle.createSyncAccessHandle();
|
|
6943
|
+
spilled = true;
|
|
6944
|
+
for (const chunk of memoryChunks) {
|
|
6945
|
+
accessHandle.write(chunk, { at: writeOffset });
|
|
6946
|
+
writeOffset += chunk.length;
|
|
6947
|
+
}
|
|
6948
|
+
memoryChunks.length = 0;
|
|
6949
|
+
}
|
|
6950
|
+
|
|
6951
|
+
const writable = new WritableStream({
|
|
6952
|
+
async write(chunk) {
|
|
6953
|
+
if (spilled) {
|
|
6954
|
+
accessHandle.write(chunk, { at: writeOffset });
|
|
6955
|
+
writeOffset += chunk.length;
|
|
6956
|
+
} else {
|
|
6957
|
+
memoryChunks.push(chunk);
|
|
6958
|
+
bufferedSize += chunk.length;
|
|
6959
|
+
if (bufferedSize > thresholdBytes) {
|
|
6960
|
+
await spillToFile();
|
|
6961
|
+
}
|
|
6962
|
+
}
|
|
6963
|
+
},
|
|
6964
|
+
close() {
|
|
6965
|
+
if (accessHandle) {
|
|
6966
|
+
accessHandle.flush();
|
|
6967
|
+
}
|
|
6968
|
+
}
|
|
6969
|
+
});
|
|
6970
|
+
|
|
6971
|
+
let memoryIndex = 0;
|
|
6972
|
+
const readable = new ReadableStream({
|
|
6973
|
+
pull(controller) {
|
|
6974
|
+
if (spilled) {
|
|
6975
|
+
const remaining = writeOffset - readOffset;
|
|
6976
|
+
if (remaining <= 0) {
|
|
6977
|
+
controller.close();
|
|
6978
|
+
return;
|
|
6979
|
+
}
|
|
6980
|
+
const buffer = new Uint8Array(Math.min(READ_CHUNK_SIZE, remaining));
|
|
6981
|
+
const read = accessHandle.read(buffer, { at: readOffset });
|
|
6982
|
+
if (read) {
|
|
6983
|
+
readOffset += read;
|
|
6984
|
+
controller.enqueue(buffer.subarray(0, read));
|
|
6985
|
+
} else {
|
|
6986
|
+
controller.close();
|
|
6987
|
+
}
|
|
6988
|
+
} else if (memoryIndex < memoryChunks.length) {
|
|
6989
|
+
controller.enqueue(memoryChunks[memoryIndex++]);
|
|
6990
|
+
} else {
|
|
6991
|
+
controller.close();
|
|
6992
|
+
}
|
|
6993
|
+
}
|
|
6994
|
+
}, { highWaterMark: 0 });
|
|
6995
|
+
async function dispose() {
|
|
6996
|
+
if (accessHandle) {
|
|
6997
|
+
try {
|
|
6998
|
+
accessHandle.close();
|
|
6999
|
+
} catch {
|
|
7000
|
+
// ignored
|
|
7001
|
+
}
|
|
7002
|
+
accessHandle = null;
|
|
7003
|
+
}
|
|
7004
|
+
if (fileName) {
|
|
7005
|
+
try {
|
|
7006
|
+
const directoryHandle = await getTempDirectory();
|
|
7007
|
+
await directoryHandle.removeEntry(fileName);
|
|
7008
|
+
} catch {
|
|
7009
|
+
// ignored
|
|
7010
|
+
}
|
|
7011
|
+
fileName = null;
|
|
7012
|
+
}
|
|
7013
|
+
memoryChunks.length = 0;
|
|
7014
|
+
}
|
|
7015
|
+
|
|
7016
|
+
return { writable, readable, dispose };
|
|
7017
|
+
};
|
|
7018
|
+
}
|
|
7019
|
+
|
|
7020
|
+
/*
|
|
7021
|
+
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
7022
|
+
|
|
7023
|
+
Redistribution and use in source and binary forms, with or without
|
|
7024
|
+
modification, are permitted provided that the following conditions are met:
|
|
7025
|
+
|
|
7026
|
+
1. Redistributions of source code must retain the above copyright notice,
|
|
7027
|
+
this list of conditions and the following disclaimer.
|
|
7028
|
+
|
|
7029
|
+
2. Redistributions in binary form must reproduce the above copyright
|
|
7030
|
+
notice, this list of conditions and the following disclaimer in
|
|
7031
|
+
the documentation and/or other materials provided with the distribution.
|
|
7032
|
+
|
|
7033
|
+
3. The names of the authors may not be used to endorse or promote products
|
|
7034
|
+
derived from this software without specific prior written permission.
|
|
7035
|
+
|
|
7036
|
+
THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
|
|
7037
|
+
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
7038
|
+
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
|
|
7039
|
+
INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
7040
|
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
7041
|
+
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
|
7042
|
+
OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
7043
|
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
7044
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
7045
|
+
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
7046
|
+
*/
|
|
7047
|
+
|
|
7048
|
+
|
|
6989
7049
|
try {
|
|
6990
7050
|
configure({ baseURI: (typeof document === 'undefined' && typeof location === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : typeof document === 'undefined' ? location.href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('zip-fs-native.js', document.baseURI).href)) });
|
|
6991
7051
|
} catch {
|
|
6992
7052
|
// ignored
|
|
6993
7053
|
}
|
|
6994
7054
|
|
|
6995
|
-
var{Uint8Array:x,Uint16Array:E,Int32Array:H,TransformStream:U,Math:N,Error:z,Array:v}=globalThis,Se=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],Z=new x(0),Ve=new E(0),de=[];for(let e=0;e<6;e++)de.push(e,0==e?8:4);de.push(0,1);var Ee=[];for(let e=0;e<14;e++)Ee.push(e,0==e?4:2);var ge=new E([0,1,2,3,4,6,8,12,16,24,32,48,64,96,128,192,256,384,512,768,1024,1536,2048,3072,4096,6144,8192,12288,16384,24576]),Te=new E([0,1,2,3,4,5,6,7,8,10,12,14,16,20,24,28,32,40,48,56,64,80,96,112,128,160,192,224,0]);function M(e,t,n,r,i){if(0==i)return;let f=e instanceof x?e:new x(e.buffer,e.byteOffset,e.byteLength),_=n instanceof x?n.subarray(r,r+i):new x(n.buffer,n.byteOffset+r,i);f.set(_,t);}function je(e,t,n){0!=n&&(e instanceof x?e:new x(e.buffer,e.byteOffset,e.byteLength)).fill(0,t,t+n);}function Je(){return {next_in:Z,next_in_index:0,avail_in:0,total_in:0,next_out:Z,next_out_index:0,avail_out:0,total_out:0,msg:"",t:0,i:0,_:0,l:void 0}}function Qe(e,t){let n=1<<t;return {o:e,u:new x(n),h:n,k:t,v:0,m:0,p:0,L:0}}function te(e){let t=[];for(let n=0;n<e.length;n+=2){let r=e[n],i=e[n+1];for(let e=0;e<i;e++)t.push(r);}return new E(t)}var ne=class{constructor(e,t){this.M=e,this.Z=t,this.N=0;}},re=class{constructor(e,t,n,r,i){this.W=e,this.j=t,this.D=n,this.S=r,this.$=i;}};function T_(e){return J_[e<-6||e>2?9:2-e]||""}function Ae(e,t){try{e.msg=T_(t);}catch(n){e.msg="zlib error "+String(t)+" ("+n+")";}return t}function e_(e,t){let n=e>>>0,r=0;for(let e=0;e<t;e++)r=r<<1|1&n,n>>>=1;return r}function g(e,t){e.q[e.T++]=t;}function De(e,t){g(e,255&t),g(e,t>>>8&255);}function __(e,t,n){let r=255&n,i=65535&t,f=e.A+e.I;return e.q[f]=255&i,e.q[f+1]=i>>>8&255,e.q[f+2]=r,e.I+=3,i=i-1&65535,e.B[t_[r]+ie+1].U++,e.C[w_(i)].U++,e.I==e.X}function ye(e,t){let n=255&t,r=e.A+e.I;return e.q[r]=0,e.q[r+1]=0,e.q[r+2]=n,e.I+=3,e.B[n].U++,e.I==e.X}function ve(e){return e.h-ae}function w_(e){return e<256?g_[e]:g_[256+(e>>7)]}function A_(e){let t=He+7,n=1<<t,r=(1<<t)-1,i=N.floor((t+k-1)/k),f=1<<8+He;return {...Qe(e,15),o:e,F:42,H:0,Y:void 0,O:32767,P:t,R:n,J:r,K:i,V:new E(32768),G:new E(n),ee:f,q:new x(32768),te:0,ne:32768,T:0,re:0,ie:0,fe:0,_e:0,le:0,oe:-2,ue:0,ae:0,ce:0,se:0,de:0,he:0,we:0,ke:0,be:0,ge:0,ve:0,me:0,xe:0,ye:0,pe:new H(2*we+1),Le:new x(2*we+1),Me:new E(be+1),I:0,X:0,Ee:Z,A:0,ze:0,Ze:0,Ne:8,We:32768,je:0,Qe:0,De:0,B:new v(le).fill(0).map(()=>Q()),C:new v(2*me+1).fill(0).map(()=>Q()),Se:new v(2*oe+1).fill(0).map(()=>Q()),$e:E_(),qe:E_(),Te:E_()}}function D_(e){let t=[];for(let n=0;n<e.length;n+=2){let r=e[n],i=e[n+1],f=Q();f.Ae=r,f.Ie=i,t.push(f);}return t}function Q(){return {U:0,Ae:0,Ue:0,Ie:0}}function E_(){return new ne([],un(null,Z,0,0,0))}function un(e,t,n,r,i){return new re(e,t,n,r,i)}function Q_(){let e=new v(288).fill(0);for(let t=0;t<=143;t++)e[t]=8;for(let t=144;t<=255;t++)e[t]=9;for(let t=256;t<=279;t++)e[t]=7;for(let t=280;t<=287;t++)e[t]=8;return e}function y_(e){let{code:t,length:n}=cn(e),r=new E(2*e.length),i=0;for(let f=0;f<e.length;f++){let e=n[f]||0,_=t[f]||0;r[i++]=e?e_(_,e):0,r[i++]=e;}return new E(r)}function $_(e,t,n){let r=0;for(let n=0;n<e.length;n++){let i=t[n]?1<<t[n]:1,f=e[n]+i-1;f>r&&(r=f);}r<n&&(r=n);let i=new x(r+1);for(let n=0;n<=r;n++)for(let r=0;r<e.length;r++){let f=t[r]?1<<t[r]:1,_=e[r];if(n>=_&&n<=_+f-1){i[n]=r;break}}return i}function et(e,t){let n=0;for(let r=0;r<e.length;r++){let i=t[r]?1<<t[r]:1,f=e[r]+i-1;f>n&&(n=f);}let r=new x(n+1);for(let i=0;i<=n;i++)for(let n=0;n<e.length;n++){let f=t[n]?1<<t[n]:1,_=e[n];if(i>=_&&i<=_+f-1){r[i]=n;break}}return r}function _t(e){let t=new x(512),n=e.length-1;for(let r=0;r<256;r++)t[r]=r<=n?e[r]:e[n];for(let r=256;r<=n;r++){let n=r>>7;t[256+(n>255?255:n)]=e[r];}for(let e=257;e<512;e++)0==t[e]&&(t[e]=t[e-1]);return t}function cn(e){let t=N.max(...e),n=new v(t+1).fill(0);for(let t of e)t>0&&n[t]++;let r=new v(e.length).fill(0),i=new v(t+1).fill(0),f=0;for(let e=1;e<=t;e++)f=f+n[e-1]<<1,i[e]=f;for(let t=0;t<e.length;t++){let n=e[t];0!=n&&(r[t]=i[n]++);}return {code:r,length:e}}var He=8,k=3,_e=258,ae=_e+k+1,Ue=16,Be=_e,dn=29,ie=256,we=ie+1+dn,me=30,oe=19,le=2*we+1,be=15,tt=9,nt=255,rt=32,at=4,Ie=256,n_=16,r_=17,a_=18,it=0,v_=1,ot=2,$=-1,J_=["need dictionary","stream end","","file error","stream error","data error","insufficient memory","buffer error",""],i_=te(de),o_=te(Ee),Fe=new E(19);Fe[16]=2,Fe[17]=3,Fe[18]=7;var mn=y_(Q_()),bn=y_(new v(30).fill(5)),Ze=D_(mn),I_=D_(bn),t_=$_(Te,i_,_e),g_=_t(et(ge,o_));function Pe(e){return e%65521>>>0}function se(e,t,n){if(void 0===t||void 0===n)return 1;let r=e>>>16&65535;if(e&=65535,1==n)return (e+=t[0])>=65521&&(e-=65521),r+=e,r>=65521&&(r-=65521),(r<<16|e)>>>0;if(n<16){for(let i=0;i<n;i++)r+=e+=t[i];return e>=65521&&(e-=65521),r=Pe(r),(r<<16|e)>>>0}for(;n>=5552;){n-=5552;let i=N.floor(347);do{for(let n=0;n<16;n++)r+=e+=t[n];t=t.subarray(16);}while(--i);e=Pe(e),r=Pe(r);}if(n){for(;n>=16;){n-=16;for(let n=0;n<16;n++)r+=e+=t[n];t=t.subarray(16);}for(let i=0;i<n;i++)r+=e+=t[i];e=Pe(e),r=Pe(r);}return (r<<16|e)>>>0}var Me=[[],[],[],[],[],[],[],[]];for(let e=0;e<256;e++){let t=e;for(let e=0;e<8;e++)t=1&t?3988292384^t>>>1:t>>>1;Me[0][e]=t;}for(let e=0;e<256;e++)for(let t=1;t<8;t++){let n=Me[t-1][e];Me[t][e]=n>>>8^Me[0][255&n];}var[lt,sn,hn,xn,pn,Sn,En,gn]=Me;function W(e=0,t,n){if(!t)return 0;void 0===n&&(n=t.length);let r=0|~e,i=0;if((n=N.min(n,t.length))>=8){let e=new DataView(t.buffer,t.byteOffset,n),f=n-8;for(;i<=f;i+=8){let t=r^e.getInt32(i,true),n=e.getInt32(i+4,true);r=gn[255&t]^En[t>>>8&255]^Sn[t>>>16&255]^pn[t>>>24&255]^xn[255&n]^hn[n>>>8&255]^sn[n>>>16&255]^lt[n>>>24&255];}}for(;i<n;i++)r=r>>>8^lt[255&(r^t[i])];return (4294967295^r)>>>0}function st(e){16==e.L?(De(e,e.p),e.p=0,e.L=0):e.L>=8&&(g(e,e.p),e.p>>=8,e.L-=8);}function ht(e){e.L>8?De(e,e.p):e.L>0&&g(e,e.p),e.ze=1+(e.L-1&7),e.p=0,e.L=0;}function Tn(e,t,n){let r,i,f=[],_=0;for(r=1;r<=be;r++)_=_+n[r-1]<<1,f[r]=_;for(i=0;i<=t;i++){let t=e[i].Ie;0!=t&&(e[i].Ae=e_(f[t]++,t));}}function L(e,t,n){e.L>Ue-n?(e.p=65535&(e.p|t<<e.L),De(e,e.p),e.p=t>>Ue-e.L&65535,e.L+=n-Ue):(e.p=65535&(e.p|t<<e.L),e.L+=n);}function xt(e){for(let t=0;t<e.B.length;t++)e.B[t].U=0;for(let t=0;t<e.C.length;t++)e.C[t].U=0;for(let t=0;t<e.Se.length;t++)e.Se[t].U=0;e.B[Ie].U=1,e.ie=e.fe=0,e.I=e._e=0;}function pt(e){if(e.B&&e.B.length>=le)for(let t=0;t<le;t++)e.B[t]=Q();else {e.B=[];for(let t=0;t<le;t++)e.B.push(Q());}if(e.C&&e.C.length>=2*me+1)for(let t=0;t<2*me+1;t++)e.C[t]=Q();else {e.C=[];for(let t=0;t<2*me+1;t++)e.C.push(Q());}if(e.Se&&e.Se.length>=2*oe+1)for(let t=0;t<2*oe+1;t++)e.Se[t]=Q();else {e.Se=[];for(let t=0;t<2*oe+1;t++)e.Se.push(Q());}e.$e=new ne(e.B,new re(Ze,i_,ie+1,we,be)),e.qe=new ne(e.C,new re(I_,o_,0,me,be)),e.Te=new ne(e.Se,new re(null,Fe,0,oe,7)),e.p=0,e.L=0,e.ze=0,xt(e);}var he=1;function wn(e,t,n){return n=e.pe[he],e.pe[he]=e.pe[e.Qe--],k_(e,t,he),n}function ct(e,t,n,r){return e[t].U<e[n].U||e[t].U==e[n].U&&r[t]<=r[n]}function k_(e,t,n){let r=e.pe[n],i=n<<1;for(;i<=e.Qe&&(i<e.Qe&&ct(t,e.pe[i+1],e.pe[i],e.Le)&&i++,!ct(t,r,e.pe[i],e.Le));)e.pe[n]=e.pe[i],n=i,i<<=1;e.pe[n]=r;}function An(e,t){let n,r,i,f,_,l,o=t.M,u=t.N,a=t.Z.W,c=t.Z.j,s=t.Z.D,d=t.Z.$,h=0;for(f=0;f<=be;f++)e.Me[f]=0;for(o[e.pe[e.De]].Ie=0,n=e.De+1;n<le;n++)r=e.pe[n],f=o[o[r].Ue].Ie+1,f>d&&(f=d,h++),o[r].Ie=f,!(r>u)&&(e.Me[f]++,_=0,r>=s&&(_=c[r-s]),l=o[r].U,e.ie+=l*(f+_),a&&(e.fe+=l*(a[r].Ie+_)));if(0!=h){do{for(f=d-1;0==e.Me[f];)f--;e.Me[f]--,e.Me[f+1]+=2,e.Me[d]--,h-=2;}while(h>0);for(f=d;0!=f;f--)for(r=e.Me[f];0!=r;)i=e.pe[--n],!(i>u)&&(o[i].Ie!=f&&(e.ie+=(f-o[i].Ie)*o[i].U,o[i].Ie=f),r--);}}function N_(e,t){let n,r,i,f=t.M,_=t.Z.W,l=t.Z.S,o=-1;for(e.Qe=0,e.De=le,n=0;n<l;n++)0!=f[n].U?(e.pe[++e.Qe]=o=n,e.Le[n]=0):f[n].Ie=0;for(;e.Qe<2;)i=e.pe[++e.Qe]=o<2?++o:0,f[i].U=1,e.Le[i]=0,e.ie--,_&&(e.fe-=_[i].Ie);for(t.N=o,n=N.floor(e.Qe/2);n>=1;n--)k_(e,f,n);i=l;do{n=wn(e,f,n),r=e.pe[he],e.pe[--e.De]=n,e.pe[--e.De]=r,f[i].U=f[n].U+f[r].U,e.Le[i]=(e.Le[n]>=e.Le[r]?e.Le[n]:e.Le[r])+1,f[n].Ue=f[r].Ue=i,e.pe[he]=i++,k_(e,f,he);}while(e.Qe>=2);e.pe[--e.De]=e.pe[he],An(e,t),Tn(f,t.N,e.Me);}function dt(e,t,n){let r,i,f=-1,_=t[0].Ie,l=0,o=7,u=4;for(0==_&&(o=138,u=3),t[n+1].Ie=65535,r=0;r<=n;r++)i=_,_=t[r+1].Ie,!(++l<o&&i==_)&&(l<u?e.Se[i].U+=l:0!=i?(i!=f&&e.Se[i].U++,e.Se[n_].U++):l<=10?e.Se[r_].U++:e.Se[a_].U++,l=0,f=i,0==_?(o=138,u=3):i==_?(o=6,u=3):(o=7,u=4));}function mt(e,t,n){let r,i=-1,f=t[0].Ie,_=0,l=7,o=4;0==f&&(l=138,o=3);for(let u=0;u<=n;u++)if(r=f,f=t[u+1].Ie,!(++_<l&&r==f)){if(_<o)do{L(e,e.Se[r].Ae,e.Se[r].Ie);}while(0!=--_);else 0!=r?(r!=i&&(L(e,e.Se[r].Ae,e.Se[r].Ie),_--),L(e,e.Se[n_].Ae,e.Se[n_].Ie),L(e,_-3,2)):_<=10?(L(e,e.Se[r_].Ae,e.Se[r_].Ie),L(e,_-3,3)):(L(e,e.Se[a_].Ae,e.Se[a_].Ie),L(e,_-11,7));_=0,i=r,0==f?(l=138,o=3):r==f?(l=6,o=3):(l=7,o=4);}}function Dn(e){let t;for(dt(e,e.B,e.$e.N),dt(e,e.C,e.qe.N),N_(e,e.Te),t=oe-1;t>=3&&0==e.Se[Se[t]].Ie;t--);return e.ie+=3*(t+1)+5+5+4,t}function yn(e,t,n,r){let i;for(L(e,t-257,5),L(e,n-1,5),L(e,r-4,4),i=0;i<r;i++)L(e,e.Se[Se[i]].Ie,3);mt(e,e.B,t-1),mt(e,e.C,n-1);}function Xe(e,t,n,r,i=0){L(e,(it<<1)+r,3),ht(e),De(e,n),De(e,~n),n&&t&&M(e.q,e.T,t,i,n),e.T+=n;}function St(e){st(e);}function Et(e){L(e,v_<<1,3),L(e,Ze[Ie].Ae,Ze[Ie].Ie),st(e);}function bt(e,t,n){let r,i,f,_,l=0;if(0!=e.I)do{r=255&e.Ee[l],r+=(255&e.Ee[l+1])<<8,i=e.Ee[l+2],l+=3,0==r?L(e,t[i].Ae,t[i].Ie):(f=t_[i],L(e,t[f+ie+1].Ae,t[f+ie+1].Ie),_=i_[f],0!=_&&(i-=Te[f],L(e,i,_)),r--,f=w_(r),L(e,n[f].Ae,n[f].Ie),_=o_[f],0!=_&&(r-=ge[f],L(e,r,_)));}while(l<e.I);L(e,t[Ie].Ae,t[Ie].Ie);}function vn(e){let t,n=4093624447;for(t=0;t<=31;t++,n>>=1)if(1&n&&0!=e.B[t].U)return 0;if(0!=e.B[9].U||0!=e.B[10].U||0!=e.B[13].U)return 1;for(t=32;t<ie;t++)if(0!=e.B[t].U)return 1;return 0}function gt(e,t,n,r,i=0){let f,_,l=0;e.be>0?(2==e.o.t&&(e.o.t=vn(e)),N_(e,e.$e),N_(e,e.qe),l=Dn(e),f=e.ie+3+7>>3,_=e.fe+3+7>>3,(_<=f||4==e.ge)&&(f=_)):f=_=n+5,n+4<=f&&t?Xe(e,t,n,r,i):_==f?(L(e,(v_<<1)+r,3),bt(e,Ze,I_)):(L(e,(ot<<1)+r,3),yn(e,e.$e.N+1,e.qe.N+1,l+1),bt(e,e.B,e.C)),xt(e),r&&ht(e);}function Dt(){let e=Je();return e.l=A_(e),e}var We=[{Be:Rt,Ce:0,Xe:0,Fe:0,He:0},{Be:C_,Ce:4,Xe:4,Fe:8,He:4},{Be:C_,Ce:5,Xe:5,Fe:16,He:8},{Be:C_,Ce:6,Xe:16,Fe:32,He:32},{Be:Re,Ce:4,Xe:4,Fe:16,He:16},{Be:Re,Ce:16,Xe:8,Fe:16,He:32},{Be:Re,Ce:16,Xe:16,Fe:32,He:128},{Be:Re,Ce:32,Xe:32,Fe:128,He:256},{Be:Re,Ce:128,Xe:128,Fe:256,He:1024},{Be:Re,Ce:258,Xe:258,Fe:258,He:4096}];function Tt(e){return 2*e-(e>4?9:0)}function u_(e,t,n){return ((t<<e.K^n)&e.J)>>>0}function c_(e,t){e.ke=u_(e,e.ke,e.u[t+(k-1)]);let n=e.V[t&e.O]=e.G[e.ke];return e.G[e.ke]=t,n}function yt(e){e.G[e.R-1]=0,je(e.G,0,(e.R-1)*e.G.BYTES_PER_ELEMENT);}function Cn(e){let t,n,r=e.h;for(t=e.R;t>0;)t--,n=e.G[t],e.G[t]=n>=r?n-r:0;for(t=r;t>0;)t--,n=e.V[t],e.V[t]=n>=r?n-r:0;}function L_(e,t,n,r){let i=e.avail_in;return i>r&&(i=r),0==i?0:(e.avail_in-=i,M(t,n,e.next_in,e.next_in_index,i),1==e.l.H?e.i=se(e.i,new x(t.buffer,t.byteOffset+n,i),i):2==e.l.H&&(e.i=W(e.i,new x(t.buffer,t.byteOffset+n,i),i)),e.next_in_index+=i,e.total_in+=i,i)}function d_(e){let t,n,r=e.h;do{if(n=e.We-e.ce-e.ae,0==n&&0==e.ae&&0==e.ce?n=r:-1==n&&n--,e.ae>=r+ve(e)&&(M(e.u,0,e.u,r,r-n),e.je-=r,e.ae-=r,e.ue-=r,e.le>e.ae&&(e.le=e.ae),Cn(e),n+=r),0==e.o.avail_in)break;if(t=L_(e.o,e.u,e.ae+e.ce,n),e.ce+=t,e.ce+e.le>=k){let t=e.ae-e.le;for(e.ke=e.u[t],e.ke=u_(e,e.ke,e.u[t+1]);e.le&&(e.ke=u_(e,e.ke,e.u[t+k-1]),e.V[t&e.O]=e.G[e.ke],e.G[e.ke]=t,t++,e.le--,!(e.ce+e.le<k)););}}while(e.ce<ae&&0!=e.o.avail_in);if(e.v<e.We){let t,n=e.ae+e.ce;e.v<n?(t=e.We-n,t>Be&&(t=Be),je(e.u,n,t),e.v=n+t):e.v<n+Be&&(t=n+Be-e.v,t>e.We-e.v&&(t=e.We-e.v),je(e.u,e.v,t),e.v+=t);}}function vt(e,t,n=8,r=15,i=He,f=0){let _=1;if(!e)return -2;if(e.msg="",-1==t&&(t=6),r<0){if(_=0,r<-15)return -2;r=-r;}else r>15&&(_=2,r-=16);if(i<1||i>tt||8!=n||r<8||r>15||t<0||t>9||f<0||f>4||8==r&&1!=_)return -2;8==r&&(r=9);let l=A_(e);return l?(e.l=l,l.o=e,l.F=42,l.H=_,l.Y=void 0,l.k=r,l.h=1<<l.k,l.O=l.h-1,l.P=i+7,l.R=1<<l.P,l.J=l.R-1,l.K=(l.P+k-1)/k,l.u=new x(2*l.h),l.V=new E(l.h),l.G=new E(l.R),l.v=0,l.ee=1<<i+6,l.q=new x(l.ee*at),l.ne=4*l.ee,l.u&&l.V&&l.G&&l.q?(l.Ee=l.q.subarray(l.ee),l.A=l.te+l.ee,l.X=3*(l.ee-1),l.be=t,l.ge=f,l.Ne=n,Hn(e)):(l.F=666,e.msg=T_(-4),F_(e),-4)):-4}function B_(e){if(null==e)return true;let t=e.l;return !t||t.o!=e||42!=t.F&&57!=t.F&&69!=t.F&&73!=t.F&&91!=t.F&&103!=t.F&&113!=t.F&&666!=t.F}function Ln(e){let t;return B_(e)?-2:(e.total_in=e.total_out=0,e.msg="",e.t=2,t=e.l,t.T=0,t.re=t.te,t.H<0&&(t.H=-t.H),t.F=2==t.H?57:42,e.i=2==t.H?W(0):se(0),t.oe=-2,pt(t),0)}function On(e){e.We=2*e.h,yt(e),e.ye=We[e.be].Ce,e.ve=We[e.be].Xe,e.me=We[e.be].Fe,e.xe=We[e.be].He,e.ae=0,e.ue=0,e.ce=0,e.le=0,e.se=e.de=k-1,e.we=0,e.ke=0;}function Hn(e){let t=Ln(e);return 0==t&&On(e.l),t}function Ye(e,t){g(e,t>>8),g(e,255&t);}function q(e){let t,n=e.l;St(n),t=n.T,t>e.avail_out&&(t=e.avail_out),0!=t&&(M(e.next_out,e.next_out_index,n.q,n.re,t),e.next_out_index+=t,n.re+=t,e.total_out+=t,e.avail_out-=t,n.T-=t,0==n.T&&(n.re=n.te));}function ke(e,t){let n=e.l;n.Y&&n.Y.Ye&&(e.i=W(e.i,new x(n.q.buffer,n.te+t,n.T-t),n.T-t));}function It(e,t){let n,r=e.l;if(B_(e)||t>5||t<0)return Ae(e,-2);if(!e.next_out||0!=e.avail_in&&!e.next_in||666==r.F&&4!=t)return Ae(e,-2);if(0==e.avail_out)return Ae(e,-5);if(n=r.oe,r.oe=t,0!=r.T){if(q(e),0==e.avail_out)return r.oe=$,0}else if(0==e.avail_in&&Tt(t)<=Tt(n)&&4!=t)return Ae(e,-5);if(666==r.F&&0!=e.avail_in)return Ae(e,-5);if(42==r.F&&0==r.H&&(r.F=113),42==r.F){let t,n=8+(r.k-8<<4)<<8;if(t=r.ge>=2||r.be<2?0:r.be<6?1:6==r.be?2:3,n|=t<<6,0!=r.ae&&(n|=rt),n+=31-n%31,Ye(r,n),0!=r.ae&&(Ye(r,e.i>>16),Ye(r,65535&e.i)),e.i=1,r.F=113,q(e),0!=r.T)return r.oe=$,0}if(57==r.F)if(e.i=W(0),g(r,31),g(r,139),g(r,8),r.Y)g(r,(r.Y.Oe?1:0)+(r.Y.Ye?2:0)+(null==r.Y.Pe?0:4)+(null==r.Y.Re?0:8)+(null==r.Y.Je?0:16)),g(r,255&r.Y.Ke),g(r,r.Y.Ke>>>8&255),g(r,r.Y.Ke>>>16&255),g(r,r.Y.Ke>>>24&255),g(r,9==r.be?2:r.ge>=2||r.be<2?4:0),g(r,255&r.Y.Ve),null!=r.Y.Pe&&(g(r,255&r.Y.Ge),g(r,r.Y.Ge>>>8&255)),r.Y.Ye&&(e.i=W(e.i,r.q,r.T)),r.Ze=0,r.F=69;else if(g(r,0),g(r,0),g(r,0),g(r,0),g(r,0),g(r,9==r.be?2:r.ge>=2||r.be<2?4:0),g(r,nt),r.F=113,q(e),0!=r.T)return r.oe=$,0;if(69==r.F){if(r.Y&&null!=r.Y.Pe){let t=r.T,n=(65535&r.Y.Ge)-r.Ze;for(;r.T+n>r.ne;){let i=r.ne-r.T;if(M(r.q,r.T,r.Y.Pe,r.Ze,i),r.T=r.ne,ke(e,t),r.Ze+=i,q(e),0!=r.T)return r.oe=$,0;t=0,n-=i;}M(r.q,r.T,r.Y.Pe,r.Ze,n),r.T+=n,ke(e,t),r.Ze=0;}r.F=73;}if(73==r.F){if(r.Y&&r.Y.Re&&r.Y.Re.length){let t,n=r.T;do{if(r.T==r.ne){if(ke(e,n),q(e),0!=r.T)return r.oe=$,0;n=0;}t=r.Y.Re[r.Ze++],g(r,t);}while(0!=t);ke(e,n),r.Ze=0;}r.F=91;}if(91==r.F){if(r.Y&&r.Y.Je&&r.Y.Je.length){let t,n=r.T;do{if(r.T==r.ne){if(ke(e,n),q(e),0!=r.T)return r.oe=$,0;n=0;}t=r.Y.Je[r.Ze++],g(r,t);}while(0!=t);ke(e,n);}r.F=103;}if(103==r.F){if(r.Y&&r.Y.Ye){if(r.T+2>r.ne&&(q(e),0!=r.T))return r.oe=$,0;g(r,255&e.i),g(r,e.i>>>8&255),e.i=W(0);}if(r.F=113,q(e),0!=r.T)return r.oe=$,0}if(0!=e.avail_in||0!=r.ce||0!=t&&666!=r.F){let n=0==r.be?Rt(r,t):2==r.ge?Bn(r,t):3==r.ge?Un(r,t):We[r.be].Be(r,t);if((2==n||3==n)&&(r.F=666),0==n||2==n)return 0==e.avail_out&&(r.oe=$),0;if(1==n&&(1==t?Et(r):5!=t&&(Xe(r,null,0,0),3==t&&(yt(r),0==r.ce&&(r.ae=0,r.ue=0,r.le=0))),q(e),0==e.avail_out))return r.oe=$,0}return 4!=t?0:r.H<=0?1:(2==r.H?(g(r,255&e.i),g(r,e.i>>>8&255),g(r,e.i>>>16&255),g(r,e.i>>>24&255),g(r,255&e.total_in),g(r,e.total_in>>>8&255),g(r,e.total_in>>>16&255),g(r,e.total_in>>>24&255)):(Ye(r,e.i>>>16&65535),Ye(r,65535&e.i)),q(e),r.H>0&&(r.H=-r.H),0!=r.T?0:1)}function F_(e){if(B_(e))return -2;let t=e.l,n=t.F;return t.u=Z,t.V=Ve,t.G=Ve,t.q=Z,t.Ee=Z,t.pe=new H(0),t.Le=Z,t.Me=Ve,t.B.length=0,t.C.length=0,t.Se.length=0,t.Y=void 0,t.te=0,t.re=0,t.A=0,113==n?-3:0}function kt(e,t){let n,r,i=e.xe,f=e.ae,_=e.de,l=e.me,o=e.ae>ve(e)?e.ae-ve(e):0,u=e.V,a=e.O,c=e.u[f],s=e.u[f+1],d=e.u[f+_-1],h=e.u[f+_];e.de>=e.ve&&(i>>=2),l>e.ce&&(l=e.ce);do{if(n=t,e.u[n+_]!=h||e.u[n+_-1]!=d||e.u[n]!=c||e.u[n+1]!=s)continue;let i=N.min(_e,e.ce),o=2;for(;o<i&&e.u[f+o]==e.u[n+o];)o++;if(r=o,r>_){if(e.je=t,_=r,r>=l)break;d=e.u[f+_-1],h=e.u[f+_];}}while((t=u[t&a])>o&&0!=--i);return _<=e.ce?_:e.ce}function Nt(e,t){gt(e,e.u,e.ae-e.ue,t,e.ue),e.ue=e.ae,q(e.o);}function j(e,t){return Nt(e,t?1:0),0==e.o.avail_out?t?2:0:null}var wt=65535;function Ne(e,t){return e<t?e:t}function Rt(e,t){let n,r,i,f=Ne(e.ne-5,e.h),_=0,l=e.o.avail_in;do{if(n=wt,i=e.L+42>>3,e.o.avail_out<i||(i=e.o.avail_out-i,r=e.ae-e.ue,n>r+e.o.avail_in&&(n=r+e.o.avail_in),n>i&&(n=i),n<f&&(0==n&&4!=t||0==t||n!=r+e.o.avail_in)))break;_=4==t&&n==r+e.o.avail_in?1:0,Xe(e,null,0,_),e.q[e.T-4]=n,e.q[e.T-3]=n>>8,e.q[e.T-2]=~n,e.q[e.T-1]=~n>>8,q(e.o),r&&(r>n&&(r=n),M(e.o.next_out,e.o.next_out_index,e.u,e.ue,r),e.o.next_out_index+=r,e.o.avail_out-=r,e.o.total_out+=r,e.ue+=r,n-=r),n&&(L_(e.o,e.o.next_out,e.o.next_out_index,n),e.o.next_out_index+=n,e.o.avail_out-=n,e.o.total_out+=n);}while(0==_);if(l-=e.o.avail_in,l){if(l>=e.h){e._e=2;let t=e.o.next_in_index-e.h;M(e.u,0,e.o.next_in,t,e.h),e.ae=e.h,e.le=e.ae;}else e.We-e.ae<=l&&(e.ae-=e.h,M(e.u,0,e.u,e.h,e.ae),e._e<2&&e._e++,e.le>e.ae&&(e.le=e.ae)),M(e.u,e.ae,e.o.next_in,e.o.next_in_index-l,l),e.ae+=l,e.le+=Ne(l,e.h-e.le);e.ue=e.ae;}return e.v<e.ae&&(e.v=e.ae),_?(e.ze=8,3):0!=t&&4!=t&&0==e.o.avail_in&&e.ae==e.ue?1:(i=e.We-e.ae,e.o.avail_in>i&&e.ue>=e.h&&(e.ue-=e.h,e.ae-=e.h,M(e.u,0,e.u,e.h,e.ae),e._e<2&&e._e++,i+=e.h,e.le>e.ae&&(e.le=e.ae)),i>e.o.avail_in&&(i=e.o.avail_in),i&&(L_(e.o,e.u,e.ae,i),e.ae+=i,e.le+=Ne(i,e.h-e.le)),e.v<e.ae&&(e.v=e.ae),i=e.L+42>>3,i=Ne(e.ne-i,wt),f=Ne(i,e.h),r=e.ae-e.ue,(r>=f||(r||4==t)&&0!=t&&0==e.o.avail_in&&r<=i)&&(n=Ne(r,i),_=4==t&&0==e.o.avail_in&&n==r?1:0,Xe(e,e.u,n,_,e.ue),e.ue+=n,q(e.o)),_&&(e.ze=8),_?2:0)}function C_(e,t){let n,r=false;for(;;){if(e.ce<ae){if(d_(e),e.ce<ae&&0==t)return 0;if(0==e.ce)break}if(n=0,e.ce>=k&&(n=c_(e,e.ae)),0!=n&&e.ae-n<=ve(e)&&(e.se=kt(e,n)),e.se>=k)if(e.ae,e.je,e.se,r=__(e,e.ae-e.je,e.se-k),e.ce-=e.se,e.se<=e.ye&&e.ce>=k){e.se--;do{e.ae++,n=c_(e,e.ae);}while(0!=--e.se);e.ae++;}else e.ae+=e.se,e.se=0,e.ke=e.u[e.ae],e.ke=u_(e,e.ke,e.u[e.ae+1]);else r=ye(e,e.u[e.ae]),e.ce--,e.ae++;if(r){let t=j(e,false);if(null!=t)return t}}if(e.le=e.ae<k-1?e.ae:k-1,4==t){return j(e,true)??3}if(e.I){let t=j(e,false);if(null!=t)return t}return 1}function Re(e,t){let n,r=false;for(;;){if(e.ce<ae){if(d_(e),e.ce<ae&&0==t)return 0;if(0==e.ce)break}if(n=0,e.ce>=k&&(n=c_(e,e.ae)),e.de=e.se,e.he=e.je,e.se=k-1,0!=n&&e.de<e.ye&&e.ae-n<=ve(e)&&(e.se=kt(e,n),e.se<=5&&1==e.ge&&(e.se=k-1)),e.de>=k&&e.se<=e.de){let t=e.ae+e.ce-k;e.ae,e.he,e.de,r=__(e,e.ae-1-e.he,e.de-k),e.ce-=e.de-1,e.de-=2;do{++e.ae<=t&&(n=c_(e,e.ae));}while(0!=--e.de);if(e.we=0,e.se=k-1,e.ae++,r){let t=j(e,false);if(null!=t)return t}}else if(e.we){if(r=ye(e,e.u[e.ae-1]),r&&Nt(e,0),e.ae++,e.ce--,0==e.o.avail_out)return 0}else e.we=1,e.ae++,e.ce--;}if(e.we&&(r=ye(e,e.u[e.ae-1]),e.we=0),e.le=e.ae<k-1?e.ae:k-1,4==t){return j(e,true)??3}if(e.I){let t=j(e,false);if(null!=t)return t}return 1}function Un(e,t){let n,r,i,f;for(;;){if(e.ce<=_e){if(d_(e),e.ce<=_e&&0==t)return 0;if(0==e.ce)break}if(e.se=0,e.ce>=k&&e.ae>0&&(i=e.ae-1,r=e.u[i],r==++i&&r==++i&&r==++i)){f=e.ae+_e;do{}while(r==++i&&r==++i&&r==++i&&r==++i&&r==++i&&r==++i&&r==++i&&r==++i&&i<f);e.se=_e-(f-i),e.se>e.ce&&(e.se=e.ce);}if(e.se>=k?(e.ae,e.ae,e.se,n=__(e,1,e.se-k),e.ce-=e.se,e.ae+=e.se,e.se=0):(n=ye(e,e.u[e.ae]),e.ce--,e.ae++),n){let t=j(e,false);if(null!=t)return t}}if(e.le=0,4==t){return j(e,true)??3}if(e.I){let t=j(e,false);if(null!=t)return t}return 1}function Bn(e,t){let n=false;for(;;){if(0==e.ce&&(d_(e),0==e.ce)){if(0==t)return 0;break}if(e.se=0,n=ye(e,e.u[e.ae]),e.ce--,e.ae++,n){let t=j(e,false);if(null!=t)return t}}if(e.le=0,4==t){return j(e,true)??3}if(e.I){let t=j(e,false);if(null!=t)return t}return 1}var ue=852,m_=592,b_=594,zt=ge.map(e=>e+1),Ct=Te.subarray(0,-1).map(e=>e+3),Fn=[16,1,73,1,200,1],Zn=[144,1,72,1,78,1],Lt=Ee.map(Gt),Ot=Ee.map(Kt);Lt.push(64,2),Ot.push(142,2);var Ht=de.slice(0,-2).map(Gt),Ut=de.slice(0,-2).map(Kt);Ht.push(...Fn),Ut.push(...Zn);var Bt=new E([...Ct,258,0,0]),Ft=new E([...Ct,3,0,0]),Zt=te(Ht),Pt=te(Ut),Mt=new E([...zt,0,0]),Xt=new E([...zt,32769,49153]),Yt=te(Lt),Wt=te(Ot);function Gt(e,t){return t%2?e:e+16}function Kt(e,t){return t%2?e:e+128}function Vt(e,t){let n,r=e.l,i=e.next_in_index,f=e.next_out_index,_=e.next_in,l=e.next_out,o=r.u,u=r.p>>>0,a=r.L>>>0,c=r.et,s=r.tt,d=(1<<r.nt)-1,h=(1<<r.rt)-1,w=r.h>>>0,k=r.v>>>0,b=r.m>>>0,g=r.it,v=f-(t-e.avail_out),m=f+(e.avail_out-257),x=i+(e.avail_in-5),y=0,p=0,L=0,M=0;e:do{for(;a<15;){if(!(i<_.length))break e;u+=_[i++]<<a,a+=8;}n=c[u&d];t:for(;;){if(L=n.ft,u>>>=L,a-=L,L=n._t,0==L){l[f++]=n.lt;break}if(16&L){if(y=n.lt,L&=15,L){for(;a<L;){if(!(i<_.length)){r.ot=16200;break e}u+=_[i++]<<a,a+=8;}y+=u&(1<<L)-1,u>>>=L,a-=L;}for(;a<15;){if(!(i<_.length)){r.ot=16200;break e}u+=_[i++]<<a,a+=8;}n=s[u&h];n:for(;;){if(L=n.ft,u>>>=L,a-=L,L=n._t,16&L){if(p=n.lt,L&=15,L){for(;a<L;){if(!(i<_.length)){r.ot=16200;break e}u+=_[i++]<<a,a+=8;}p+=u&(1<<L)-1,u>>>=L,a-=L;}let t=y,c=f-v;if(p>c){let n=p-c;if(n>k&&g){e.msg="invalid distance too far back",r.ot=16209;break e}if(0==b){if(M=w-n,!(n<t)){for(let e=0;e<t;++e)l[f++]=o[M++];continue e}for(let e=0;e<n;++e)l[f++]=o[M++];t-=n,M=f-p;}else if(b<n){M=w+b-n;let e=n-b;if(!(e<t)){for(let e=0;e<t;++e)l[f++]=o[M++];continue e}for(let t=0;t<e;++t)l[f++]=o[M++];if(t-=e,M=0,b<t){for(let e=0;e<b;++e)l[f++]=o[M++];t-=b,M=f-p;}}else {if(M=b-n,!(n<t)){for(let e=0;e<t;++e)l[f++]=o[M++];continue e}for(let e=0;e<n;++e)l[f++]=o[M++];t-=n,M=f-p;}for(;t>2;)l[f++]=l[M++],l[f++]=l[M++],l[f++]=l[M++],t-=3;t&&(l[f++]=l[M++],t>1&&(l[f++]=l[M++]));}else {for(M=f-p;t>2;)l[f++]=l[M++],l[f++]=l[M++],l[f++]=l[M++],t-=3;t&&(l[f++]=l[M++],t>1&&(l[f++]=l[M++]));}break}if(64&L){e.msg="invalid distance code",r.ot=16209;break e}n=s[n.lt+(u&(1<<L)-1)];continue n}break}if(64&L){if(32&L){r.ot=16191;break e}e.msg="invalid literal/length code",r.ot=16209;break e}n=c[n.lt+(u&(1<<L)-1)];continue t}}while(i<x&&f<m);let E=a>>3;i-=E,a-=E<<3,u&=(1<<a)-1,e.next_in_index=i,e.next_out_index=f,e.avail_in=i<x?x-i+5:5-(i-x),e.avail_out=f<m?m-f+257:257-(f-m),r.p=u>>>0,r.L=a>>>0;}function Z_(e,t){let n=[],r=t?ue+b_:ue+m_;return {...Qe(e,0),o:e,ot:16180,ut:false,H:0,ct:false,st:0,dt:0,ht:0,wt:0,u:Z,kt:0,bt:0,Pe:0,et:n,tt:n,nt:0,rt:0,gt:0,vt:0,xt:0,yt:0,Lt:n,Mt:new E(320),Et:new E(288),zt:new v(r).fill(null).map(()=>pe()),Zt:0,it:true,Nt:0,Wt:0,jt:t}}function pe(e=0,t=0,n=0){return {_t:e,ft:t,lt:n}}function P_(e=1){return {_t:64,ft:e,lt:0}}function jt(e=0){return {_t:96,ft:e,lt:0}}function M_(e){return (255&e)<<24|(e>>8&255)<<16|(e>>16&255)<<8|e>>24&255}var Le=15,Mn={jt:false,Qt:Bt,Dt:Zt,St:Mt,$t:Yt,qt:20,Tt:257,At:0,It:m_,Ut:false,Bt:true},Xn={jt:true,Qt:Ft,Dt:Pt,St:Xt,$t:Wt,qt:19,Tt:256,At:-1,It:b_,Ut:true,Bt:false};function Oe(e,t,n,r,i,f,_,l){let o,u,a,c,s,d,h,w,k,b,g,v,m,x,y,p,L,M,z,Z=new E(Le+1),N=new E(Le+1),W=l?Xn:Mn;for(o=0;o<=Le;o++)Z[o]=0;for(u=0;u<n;u++)Z[t[u]]++;for(s=i.Ct,c=Le;c>=1&&0==Z[c];c--);if(s>c&&(s=c),0==c)return W.Bt?(y=P_(1),r.Ct[0]=y,r.Ct[1]=y,i.Ct=1,0):-1;for(a=1;a<c&&0==Z[a];a++);for(s<a&&(s=a),w=1,o=1;o<=Le;o++)if(w<<=1,w-=Z[o],w<0)return -1;if(w>0&&(0==e||1!=c))return -1;for(N[1]=0,o=1;o<Le;o++)N[o+1]=N[o]+Z[o];for(u=0;u<n;u++)0!=t[u]&&(f[N[t[u]]++]=u);switch(e){case 0:L=M=f,z=W.qt;break;case 1:L=W.Qt,M=W.Dt,z=W.Tt;break;default:L=W.St,M=W.$t,z=W.At;}if(b=0,u=0,o=a,p=_.Ct,d=s,h=0,m=-1,k=1<<s,x=k-1,1==e&&(W.Ut?k>=ue:k>ue)||2==e&&(W.Ut?k>=W.It:k>W.It))return 1;for(;;){y=Yn(f,u,o,h,e,L,M,z,W.jt),g=1<<o-h,v=1<<d,a=v;do{v-=g;let e=(b>>h)+v;r.Ct[p+e]={...y};}while(0!=v);for(g=1<<o-1;b&g;)g>>=1;if(0!=g?(b&=g-1,b+=g):b=0,u++,0==--Z[o]){if(o==c)break;o=t[f[u]];}if(o>s&&(b&x)!=m){for(0==h&&(h=s),p+=1<<d,d=o-h,w=1<<d;d+h<c&&(w-=Z[d+h],!(w<=0));)d++,w<<=1;if(k+=1<<d,1==e&&(W.Ut?k>=ue:k>ue)||2==e&&(W.Ut?k>=W.It:k>W.It))return 1;m=b&x,r.Ct[_.Ct+m]={_t:d,ft:s,lt:p-_.Ct};}}if(0!=b)for(y=P_(o-h);0!=b;){for(0!=h&&(b&x)!=m&&(h=0,o=s,p=_.Ct,d=s,y.ft=o),r.Ct[p+(b>>h)]={...y},g=1<<o-1;b&g;)g>>=1;0!=g?(b&=g-1,b+=g):b=0;}return _.Ct+=k,i.Ct=s,0}function Yn(e,t,n,r,i,f,_,l,o){let u;if(o?e[t]<l:e[t]+1<l)u=pe(0,n-r,e[t]);else if(o?e[t]>l:e[t]>=l)if(o&&1==i){let i=e[t]-257;u=pe(_[i],n-r,f[i]);}else {let i=o?e[t]:e[t]-l;u=pe(_[i],n-r,f[i]);}else u=jt(n-r);return u}var Vn={Xt:true,Ft:new v(544),Ht:[],Yt:[]},jn={Xt:true,Ft:new v(544),Ht:[],Yt:[]};function Jt(e){let t=Je();return t.l=Z_(t,!!e),t}function Ke(e){let t;return !(e&&(t=e.l,!(!t||t.o!=e||t.jt&&(t.ot<16191||t.ot>16209)||!t.jt&&(t.ot<16180||t.ot>16211))))}function Jn(e){let t;return Ke(e)?-2:(t=e.l,e.total_in=e.total_out=t.wt=0,e.msg="",t.H&&(e.i=1&t.H),t.ot=t.jt?16191:16180,t.ut=false,t.ct=false,t.st=-1,t.dt=t.jt?65536:32768,delete t.Y,t.p=0,t.L=0,t.et=t.zt,t.tt=t.zt,t.Lt=t.zt,t.it=true,t.Nt=-1,0)}function Qn(e){let t;return Ke(e)?-2:(t=e.l,t.h=0,t.v=0,t.m=0,Jn(e))}function $n(e,t){let n,r,i;if(Ke(e))return -2;if(r=e.l,r.jt?(t=-16,i=16):i=15,t<0){if(t<-i)return -2;n=0,t=-t;}else n=5+(t>>4),!r.jt&&t<48&&(t&=15);return t&&(t<8||t>i)?-2:(r.u.length>0&&r.k!=t&&(r.u=Z),r.H=n,r.k=t,Qn(e))}function Qt(e,t){let n,r;if(!e)return -2;e.msg="";let i=!!e.l.jt;return r=Z_(e,i),i&&(t=-16),e.l=r,r.o=e,r.ot=r.jt?16191:16180,n=$n(e,t),n}function er(e){let t=e.jt?jn:Vn,n={Ct:0};if(t.Xt){let r,i,f;for(r=0;r<144;)e.Mt[r++]=8;for(;r<256;)e.Mt[r++]=9;for(;r<280;)e.Mt[r++]=7;for(;r<288;)e.Mt[r++]=8;for(let e=0;e<544;e++)t.Ft[e]=pe();f=t.Ft,t.Ht=f,i=9;let _={Ct:f},l={Ct:i},o={Ct:0};for(Oe(1,e.Mt,288,_,l,e.Et,o,e.jt),f=_.Ct,i=l.Ct,e.Zt=o.Ct,r=0;r<32;)e.Mt[r++]=5;i=5;let u=o.Ct,a={Ct:f},c={Ct:i};n.Ct=u,Oe(2,e.Mt,32,a,c,e.Et,n,e.jt),t.Yt=f.slice(u),t.Xt=false;}e.et=t.Ht,e.nt=9,e.tt=t.Yt,e.rt=5,e.Zt=n.Ct;}function _r(e,t,n){let r=e.l;if(!(r.u&&0!=r.u.length||(r.u=new x(1<<r.k),r.u)))return 1;if(0==r.h&&(r.h=1<<r.k,r.m=0,r.v=0),n>=r.h)M(r.u,0,t,t.length-r.h,r.h),r.m=0,r.v=r.h;else {let e=r.h-r.m;e>n&&(e=n),M(r.u,r.m,t,t.length-n,e),(n-=e)?(M(r.u,0,t,t.length-n,n),r.m=n,r.v=r.h):(r.m+=e,r.m==r.h&&(r.m=0),r.v<r.h&&(r.v+=e));}return 0}var h_=class extends z{constructor(){super("Need more input");}};function $t(e,t){let n,r,i,f,_,l,o,u,a,c,s,d,h,w,k,b,g,v=new x(4);if(Ke(e)||!e.next_out||!e.next_in&&0!=e.avail_in)return -2;l=0,u=0,o=0,a=0,r=Z,i=0,f=Z,_=0,n=e.l,16191==n.ot&&(n.ot=16192),E(),c=l,s=o,g=0;try{for(;;)switch(n.ot){case 16180:if(0==n.H){n.ot=16192;break}if(Q(16),2&n.H&&35615==u){0==n.k&&(n.k=15),n.ht=W(0),n.ht=p(n.ht,u),N(),n.ot=16181;break}if(n.Y&&(n.Y.Ot=-1),!(1&n.H)||((D(8)<<8)+(u>>8))%31){e.msg="incorrect header check",n.ot=16209;break}if(8!=D(4)){e.msg="unknown compression method",n.ot=16209;break}if(S(4),b=D(4)+8,0==n.k&&(n.k=b),b>15||b>n.k){e.msg="invalid window size",n.ot=16209;break}n.dt=1<<b,n.st=0,e.i=n.ht=se(0),n.ot=512&u?16189:16191,N();break;case 16181:if(Q(16),n.st=u,8!=(255&n.st)){e.msg="unknown compression method",n.ot=16209;break}if(57344&n.st){e.msg="unknown header flags set",n.ot=16209;break}n.Y&&(n.Y.Oe=u>>8&1),512&n.st&&4&n.H&&(n.ht=p(n.ht,u)),N(),n.ot=16182;case 16182:Q(32),n.Y&&(n.Y.Ke=u),512&n.st&&4&n.H&&(n.ht=L(n.ht,u)),N(),n.ot=16183;case 16183:Q(16),n.Y&&(n.Y.Pt=255&u,n.Y.Ve=u>>8),512&n.st&&4&n.H&&(n.ht=p(n.ht,u)),N(),n.ot=16184;case 16184:1024&n.st?(Q(16),n.kt=u,n.Y&&(n.Y.Ge=u),512&n.st&&4&n.H&&(n.ht=p(n.ht,u)),N()):n.Y&&(n.Y.Pe=Z),n.ot=16185;case 16185:if(1024&n.st&&(d=n.kt,d>l&&(d=l),d&&(n.Y&&n.Y.Pe&&n.Y.Rt&&(b=n.Y.Ge-n.kt)<n.Y.Rt&&M(n.Y.Pe,b,r,i,d),512&n.st&&4&n.H&&(n.ht=W(n.ht,r.subarray(i,i+d),d)),l-=d,i+=d,n.kt-=d),n.kt))return m();n.kt=0,n.ot=16186;case 16186:if(2048&n.st){if(0==l)return m();d=0;do{b=r[i+d++],n.Y&&n.Y.Jt&&n.kt<n.Y.Jt&&(n.Y.Re[n.kt++]=b);}while(b&&d<l);if(512&n.st&&4&n.H&&(n.ht=W(n.ht,r.subarray(i,i+d),d)),l-=d,i+=d,b)return m()}else n.Y&&(n.Y.Re=Z);n.kt=0,n.ot=16187;case 16187:if(4096&n.st){if(0==l)return m();d=0;do{b=r[i+d++],n.Y&&n.Y.Kt&&n.kt<n.Y.Kt&&(n.Y.Je[n.kt++]=b);}while(b&&d<l);if(512&n.st&&4&n.H&&(n.ht=W(n.ht,r.subarray(i,i+d),d)),l-=d,i+=d,b)return m()}else n.Y&&(n.Y.Je=Z);n.ot=16188;case 16188:if(512&n.st){if(Q(16),4&n.H&&u!=(65535&n.ht)){e.msg="header crc mismatch",n.ot=16209;break}N();}n.Y&&(n.Y.Ye=n.st>>9&1,n.Y.Ot=1),e.i=n.ht=W(0),n.ot=16191;break;case 16189:Q(32),e.i=n.ht=M_(u),N(),n.ot=16190;case 16190:if(!n.ct)return z(),2;e.i=n.ht=se(0),n.ot=16191;case 16191:if(5==t||6==t)return m();case 16192:if(n.ut){$(),n.ot=16206;break}switch(Q(3),n.ut=!!D(1),S(1),D(2)){case 0:n.ot=16193;break;case 1:if(er(n),n.ot=16199,6==t)return S(2),m();break;case 2:n.ot=16196;break;case 3:e.msg="invalid block type",n.ot=16209;}S(2);break;case 16193:if($(),Q(32),(65535&u)!=(u>>>16^65535)){e.msg="invalid stored block lengths",n.ot=16209;break}if(n.kt=65535&u,N(),n.ot=16194,6==t)return m();case 16194:n.ot=16195;case 16195:if(d=n.kt,d){if(d>l&&(d=l),d>o&&(d=o),0==d)return m();M(f,_,r,i,d),l-=d,i+=d,o-=d,_+=d,n.kt-=d;break}n.ot=16191;break;case 16196:if(Q(14),n.vt=D(5)+257,S(5),n.xt=D(5)+1,S(5),n.gt=D(4)+4,S(4),n.vt>286||!n.jt&&n.xt>30){e.msg=n.jt?"too many length":"too many length or distance symbols",n.ot=16209;break}n.yt=0,n.ot=16197;case 16197:for(;n.yt<n.gt;)Q(3),n.Mt[Se[n.yt++]]=D(3),S(3);for(;n.yt<19;)n.Mt[Se[n.yt++]]=0;n.Lt=n.zt,n.et=n.tt=n.Lt,n.nt=7;let c={Ct:n.Lt},v={Ct:n.nt},x={Ct:0};if(g=Oe(0,n.Mt,19,c,v,n.Et,x,n.jt),n.Lt=c.Ct,n.nt=v.Ct,g){e.msg="invalid code lengths set",n.ot=16209;break}n.yt=0,n.ot=16198;case 16198:for(;n.yt<n.vt+n.xt;){for(;w=n.et[D(n.nt)],!(w.ft<=a);)j();if(w.lt<16)S(w.ft),n.Mt[n.yt++]=w.lt;else {if(16==w.lt){if(Q(w.ft+2),S(w.ft),0==n.yt){e.msg="invalid bit length repeat",n.ot=16209;break}b=n.Mt[n.yt-1],d=3+D(2),S(2);}else 17==w.lt?(Q(w.ft+3),S(w.ft),b=0,d=3+D(3),S(3)):(Q(w.ft+7),S(w.ft),b=0,d=11+D(7),S(7));if(n.yt+d>n.vt+n.xt){e.msg="invalid bit length repeat",n.ot=16209;break}for(;d--;)n.Mt[n.yt++]=b;}}if(16209==n.ot)break;if(0==n.Mt[256]){e.msg="invalid code -- missing end-of-block",n.ot=16209;break}n.Lt=n.zt,n.nt=9;let q={Ct:n.Lt},T={Ct:n.nt},A={Ct:0};g=Oe(1,n.Mt,n.vt,q,T,n.Et,A,n.jt),n.Lt=q.Ct,n.nt=T.Ct;let I=A.Ct;if(n.et=n.Lt.slice(0,I),g){e.msg="invalid literal/lengths set",n.ot=16209;break}n.rt=6;let U=n.Mt.subarray(n.vt,n.vt+n.xt),B={Ct:n.Lt},C={Ct:n.rt},X={Ct:I};if(g=Oe(2,U,n.xt,B,C,n.Et,X,n.jt),n.Lt=B.Ct,n.rt=C.Ct,n.tt=n.Lt.slice(I),g){e.msg="invalid distances set",n.ot=16209;break}if(n.ot=16199,6==t)return m();case 16199:n.ot=16200;case 16200:if(!n.jt&&l>=6&&o>=258){z(),Vt(e,s),E(),16191==n.ot&&(n.Nt=-1);break}for(n.Nt=0;w=n.et[D(n.nt)],!(w.ft<=a);)j();if(w._t&&!(240&w._t)){for(k=w;w=n.et[k.lt+(D(k.ft+k._t)>>k.ft)],!(k.ft+w.ft<=a);)j();S(k.ft),n.Nt+=k.ft;}if(S(w.ft),n.Nt+=w.ft,n.kt=w.lt,0==w._t){n.ot=16205;break}if(32&w._t){n.Nt=-1,n.ot=16191;break}if(64&w._t){e.msg="invalid literal/length code",n.ot=16209;break}n.Pe=w._t&(n.jt?31:15),n.ot=16201;case 16201:n.Pe&&(Q(n.Pe),n.kt+=D(n.Pe),S(n.Pe),n.Nt+=n.Pe),n.Wt=n.kt,n.ot=16202;case 16202:for(;w=n.tt[D(n.rt)],!(w.ft<=a);)j();if(!(240&w._t)){for(k=w;w=n.tt[k.lt+(D(k.ft+k._t)>>k.ft)],!(k.ft+w.ft<=a);)j();S(k.ft),n.Nt+=k.ft;}if(S(w.ft),n.Nt+=w.ft,64&w._t){e.msg="invalid distance code",n.ot=16209;break}n.bt=w.lt,n.Pe=15&w._t,n.ot=16203;case 16203:n.Pe&&(Q(n.Pe),n.bt+=D(n.Pe),S(n.Pe),n.Nt+=n.Pe),n.ot=16204;case 16204:if(0==o)return m();if(d=s-o,n.bt>d){if(d=n.bt-d,d>n.v&&n.it){e.msg="invalid distance too far back",n.ot=16209;break}d>n.m?(d-=n.m,h=n.h-d):h=n.m-d,d>n.kt&&(d=n.kt),d>o&&(d=o);for(let e=0;e<d;++e)f[_]=255&n.u[h],++_,++h;}else {h=_-n.bt,d=n.kt,d>o&&(d=o);for(let e=0;e<d;++e)f[_]=f[h],++_,++h;}d>o&&(d=o),o-=d,n.kt-=d,0==n.kt&&(n.ot=16200);break;case 16205:if(0==o)return m();f[_++]=n.kt,o--,n.ot=16200;break;case 16206:if(n.H){if(Q(32),s-=o,e.total_out+=s,n.wt+=s,4&n.H&&s){let t=f.subarray(_-s,_);e.i=n.ht=y(n.ht,t,s);}if(s=o,4&n.H&&(n.st?u:M_(u)>>>0)!=n.ht){e.msg="incorrect data check",n.ot=16209;break}N();}n.ot=16207;case 16207:if(n.H&&n.st){if(Q(32),4&n.H&&u!=(4294967295&n.wt)){e.msg="incorrect length check",n.ot=16209;break}N();}n.ot=16208;case 16208:return g=1,m();case 16209:return g=-3,m();case 16210:return -4;default:return -2}}catch(e){if(e instanceof h_)return m();throw e}function m(){if(z(),n.h||s!=e.avail_out&&n.ot<16209&&(n.jt?n.ot<16208:n.ot<16206)||4!=t){let t=s-e.avail_out;if(_r(e,e.next_out.subarray(e.next_out_index-t,e.next_out_index),t))return n.ot=16210,-4}return c-=e.avail_in,s-=e.avail_out,e.total_in+=c,e.total_out+=s,n.wt+=s,4&n.H&&s&&(e.i=n.ht=y(n.ht,e.next_out.subarray(e.next_out_index-s,e.next_out_index),s)),e.t=n.L+(n.ut?64:0)+(16191==n.ot?128:0)+(16199==n.ot||16194==n.ot?256:0),(0==c&&0==s&&0==g||4==t&&0==g)&&(g=-5),g}function y(e,t,r){return n.st?W(e,t,r):se(e,t,r)}function p(e,t){return v[0]=255&t,v[1]=t>>>8&255,W(e,v,2)>>>0}function L(e,t){return v[0]=255&t,v[1]=t>>>8&255,v[2]=t>>>16&255,v[3]=t>>>24&255,W(e,v,4)>>>0}function E(){f=e.next_out,_=e.next_out_index,o=e.avail_out,r=e.next_in,i=e.next_in_index,l=e.avail_in,u=n.p,a=n.L;}function z(){e.next_out=f,e.next_out_index=_,e.avail_out=o,e.next_in=r,e.next_in_index=i,e.avail_in=l,n.p=u,n.L=a;}function N(){u=0,a=0;}function j(){if(0==l)throw new h_;l--,u+=(255&r[i])<<a,i++,u>>>=0,a+=8;}function Q(e){for(;a<e;)j();}function D(e){return u&(1<<e)-1}function S(e){u>>>=e,a-=e;}function $(){u>>>=7&a,a-=7&a;}}function en(e){return Ke(e)?-2:0}var X_=65536,tr=32768,Y_=class{constructor(e=16,t=X_){this.Vt=[],this.Gt=e;for(let n=0;n<N.min(e,4);n++)this.Vt.push(new x(t));}acquire(e=X_){for(let t=this.Vt.length-1;t>=0;t--){let n=this.Vt[t];if(n.length>=e)return this.Vt.splice(t,1),n}return new x(e)}release(e){this.Vt.length<this.Gt&&this.Vt.push(e);}};function _n(e){let t=new Y_(32,X_),n=null;function r(e){try{t.release(e);}catch{}}return new U({start(){},transform(i,f){if(!n){let t=e.en(),r=e.tn(t);if(0!=r&&0!=r)throw new z("init failed: "+r);n={o:t};}let _=n.o,l=0;for(;l<i.length;){let n=N.min(i.length-l,tr),o=i.subarray(l,l+n);for(_.next_in=o,_.next_in_index=0,_.avail_in=o.length;_.avail_in>0;){let n=t.acquire(),i=false;try{_.next_out=n,_.next_out_index=0,_.avail_out=n.length;let r=e.nn(_,0),l=n.length-_.avail_out;if(l>0){let e=!1,r={rn:n.subarray(0,l),release:()=>{e||(e=!0,t.release(n));}};i=!0,f.enqueue(r);}if(0!=r&&1!=r)throw new z("process error: "+r)}finally{i||r(n);}}l+=n;}},flush(i){if(!n)return;let f=n.o;for(;;){let n=t.acquire(),_=false;try{f.next_out=n,f.next_out_index=0,f.avail_out=n.length;let r=e.nn(f,4),l=n.length-f.avail_out;if(l>0){let e=!1,r={rn:n.subarray(0,l),release:()=>{e||(e=!0,t.release(n));}};_=!0,i.enqueue(r);}if(1==r)break;if(0!=r)throw new z("finalization error: "+r)}finally{_||r(n);}}let _=e.fn(f);if(0!=_&&0!=_)throw new z("end failed: "+_)}})}function tn(){return new U({start(){},transform(e,t){try{t.enqueue(e.rn.slice(0));}finally{e.release();}},flush(){}})}function nr(e="deflate",t){let n="gzip"==e?31:"deflate-raw"==e?-15:15,r=t&&"number"==typeof t.level?t.level:-1;return _n({en:()=>Dt(),tn:e=>vt(e,r,8,n,8,0),nn:It,fn:F_})}function rr(e="deflate"){let t="gzip"==e?31:"deflate-raw"==e?-15:15;return _n({en:()=>Jt("deflate64-raw"==e),tn:e=>Qt(e,t),nn:$t,fn:en})}var x_=class{constructor(e="deflate",t){let n=nr(e,t);this.writable=n.writable,this.readable=n.readable.pipeThrough(tn());}},p_=class{constructor(e="deflate"){let t=rr(e);this.writable=t.writable,this.readable=t.readable.pipeThrough(tn());}};
|
|
7055
|
+
var{Uint8Array:x,Uint16Array:E,Int32Array:H,TransformStream:U,Math:N,Error:z,Array:v}=globalThis,Se=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],Z=new x(0),je=new E(0),de=[];for(let e=0;e<6;e++)de.push(e,0==e?8:4);de.push(0,1);var Ee=[];for(let e=0;e<14;e++)Ee.push(e,0==e?4:2);var ge=new E([0,1,2,3,4,6,8,12,16,24,32,48,64,96,128,192,256,384,512,768,1024,1536,2048,3072,4096,6144,8192,12288,16384,24576]),Te=new E([0,1,2,3,4,5,6,7,8,10,12,14,16,20,24,28,32,40,48,56,64,80,96,112,128,160,192,224,0]);function M(e,t,n,r,i){if(0==i)return;let f=e instanceof x?e:new x(e.buffer,e.byteOffset,e.byteLength),_=n instanceof x?n.subarray(r,r+i):new x(n.buffer,n.byteOffset+r,i);f.set(_,t);}function Ve(e,t,n){0!=n&&(e instanceof x?e:new x(e.buffer,e.byteOffset,e.byteLength)).fill(0,t,t+n);}function Je(){return {next_in:Z,next_in_index:0,avail_in:0,total_in:0,next_out:Z,next_out_index:0,avail_out:0,total_out:0,msg:"",t:0,i:0,_:0,l:void 0}}function Qe(e,t){let n=1<<t;return {o:e,u:new x(n),h:n,v:t,k:0,m:0,p:0,I:0}}function te(e){let t=[];for(let n=0;n<e.length;n+=2){let r=e[n],i=e[n+1];for(let e=0;e<i;e++)t.push(r);}return new E(t)}var ne=class{constructor(e,t){this.L=e,this.M=t,this.Z=0;}},re=class{constructor(e,t,n,r,i){this.W=e,this.N=t,this.V=n,this.S=r,this.q=i;}};function w_(e){return J_[e<-6||e>2?9:2-e]||""}function Ae(e,t){try{e.msg=w_(t);}catch(n){e.msg="zlib error "+String(t)+" ("+n+")";}return t}function e_(e,t){let n=e>>>0,r=0;for(let e=0;e<t;e++)r=r<<1|1&n,n>>>=1;return r}function g(e,t){e.A[e.$++]=t;}function De(e,t){g(e,255&t),g(e,t>>>8&255);}function __(e,t,n){let r=255&n,i=65535&t,f=e.D+e.O;return e.A[f]=255&i,e.A[f+1]=i>>>8&255,e.A[f+2]=r,e.O+=3,i=i-1&65535,e.B[t_[r]+ie+1].T++,e.R[A_(i)].T++,e.O==e.U}function ye(e,t){let n=255&t,r=e.D+e.O;return e.A[r]=0,e.A[r+1]=0,e.A[r+2]=n,e.O+=3,e.B[n].T++,e.O==e.U}function ve(e){return e.h-ae}function A_(e){return e<256?T_[e]:T_[256+(e>>7)]}function D_(e){let t=He+7,n=1<<t,r=(1<<t)-1,i=N.floor((t+I-1)/I),f=1<<8+He;return {...Qe(e,15),o:e,P:42,F:0,H:void 0,Y:32767,X:t,J:n,K:r,C:i,j:new E(32768),G:new E(n),ee:f,A:new x(32768),te:0,ne:32768,$:0,re:0,ie:0,fe:0,_e:0,le:0,oe:-2,ae:0,ue:0,ce:0,se:0,de:0,he:0,we:0,be:0,ge:0,ve:0,ke:0,me:0,xe:0,pe:0,ye:new H(2*we+1),Ie:new x(2*we+1),Le:new E(be+1),O:0,U:0,Me:Z,D:0,ze:0,Ee:0,Ze:8,We:32768,Ne:0,Ve:0,Qe:0,B:new v(le).fill(0).map(()=>Q()),R:new v(2*me+1).fill(0).map(()=>Q()),Se:new v(2*oe+1).fill(0).map(()=>Q()),qe:g_(),Ae:g_(),$e:g_()}}function y_(e){let t=[];for(let n=0;n<e.length;n+=2){let r=e[n],i=e[n+1],f=Q();f.De=r,f.Oe=i,t.push(f);}return t}function Q(){return {T:0,De:0,Te:0,Oe:0}}function g_(){return new ne([],cn(null,Z,0,0,0))}function cn(e,t,n,r,i){return new re(e,t,n,r,i)}function Q_(){let e=new v(288).fill(0);for(let t=0;t<=143;t++)e[t]=8;for(let t=144;t<=255;t++)e[t]=9;for(let t=256;t<=279;t++)e[t]=7;for(let t=280;t<=287;t++)e[t]=8;return e}function v_(e){let{code:t,length:n}=dn(e),r=new E(2*e.length),i=0;for(let f=0;f<e.length;f++){let e=n[f]||0,_=t[f]||0;r[i++]=e?e_(_,e):0,r[i++]=e;}return new E(r)}function $_(e,t,n){let r=0;for(let n=0;n<e.length;n++){let i=t[n]?1<<t[n]:1,f=e[n]+i-1;f>r&&(r=f);}r<n&&(r=n);let i=new x(r+1);for(let n=0;n<=r;n++)for(let r=0;r<e.length;r++){let f=t[r]?1<<t[r]:1,_=e[r];if(n>=_&&n<=_+f-1){i[n]=r;break}}let f=0;for(let n=0;n<e.length-1;n++){let r=t[n]?1<<t[n]:1,i=e[n]+r-1;i>f&&(f=i);}return i[f]=e.length-1,i}function et(e,t){let n=0;for(let r=0;r<e.length;r++){let i=t[r]?1<<t[r]:1,f=e[r]+i-1;f>n&&(n=f);}let r=new x(n+1);for(let i=0;i<=n;i++)for(let n=0;n<e.length;n++){let f=t[n]?1<<t[n]:1,_=e[n];if(i>=_&&i<=_+f-1){r[i]=n;break}}return r}function _t(e){let t=new x(512),n=e.length-1;for(let r=0;r<256;r++)t[r]=r<=n?e[r]:e[n];for(let r=256;r<=n;r++){let n=r>>7;t[256+(n>255?255:n)]=e[r];}for(let e=257;e<512;e++)0==t[e]&&(t[e]=t[e-1]);return t}function dn(e){let t=N.max(...e),n=new v(t+1).fill(0);for(let t of e)t>0&&n[t]++;let r=new v(e.length).fill(0),i=new v(t+1).fill(0),f=0;for(let e=1;e<=t;e++)f=f+n[e-1]<<1,i[e]=f;for(let t=0;t<e.length;t++){let n=e[t];0!=n&&(r[t]=i[n]++);}return {code:r,length:e}}var He=8,I=3,_e=258,ae=_e+I+1,tt=4096,Ue=16,Be=_e,mn=29,ie=256,we=ie+1+mn,me=30,oe=19,le=2*we+1,be=15,nt=9,rt=255,at=32,it=4,Ie=256,n_=16,r_=17,a_=18,ot=0,I_=1,lt=2,$=-1,J_=["need dictionary","stream end","","file error","stream error","data error","insufficient memory","buffer error",""],i_=te(de),o_=te(Ee),Fe=new E(19);Fe[16]=2,Fe[17]=3,Fe[18]=7;var bn=v_(Q_()),sn=v_(new v(30).fill(5)),Ze=y_(bn),k_=y_(sn),t_=$_(Te,i_,_e),T_=_t(et(ge,o_));function Pe(e){return e%65521>>>0}function se(e,t,n){if(void 0===t||void 0===n)return 1;let r=e>>>16&65535;if(e&=65535,1==n)return (e+=t[0])>=65521&&(e-=65521),r+=e,r>=65521&&(r-=65521),(r<<16|e)>>>0;if(n<16){for(let i=0;i<n;i++)r+=e+=t[i];return e>=65521&&(e-=65521),r=Pe(r),(r<<16|e)>>>0}for(;n>=5552;){n-=5552;let i=N.floor(347);do{for(let n=0;n<16;n++)r+=e+=t[n];t=t.subarray(16);}while(--i);e=Pe(e),r=Pe(r);}if(n){for(;n>=16;){n-=16;for(let n=0;n<16;n++)r+=e+=t[n];t=t.subarray(16);}for(let i=0;i<n;i++)r+=e+=t[i];e=Pe(e),r=Pe(r);}return (r<<16|e)>>>0}var Me=[[],[],[],[],[],[],[],[]];for(let e=0;e<256;e++){let t=e;for(let e=0;e<8;e++)t=1&t?3988292384^t>>>1:t>>>1;Me[0][e]=t;}for(let e=0;e<256;e++)for(let t=1;t<8;t++){let n=Me[t-1][e];Me[t][e]=n>>>8^Me[0][255&n];}var[ft,hn,xn,pn,Sn,En,gn,Tn]=Me;function W(e=0,t,n){if(!t)return 0;void 0===n&&(n=t.length);let r=0|~e,i=0;if((n=N.min(n,t.length))>=8){let e=new DataView(t.buffer,t.byteOffset,n),f=n-8;for(;i<=f;i+=8){let t=r^e.getInt32(i,true),n=e.getInt32(i+4,true);r=Tn[255&t]^gn[t>>>8&255]^En[t>>>16&255]^Sn[t>>>24&255]^pn[255&n]^xn[n>>>8&255]^hn[n>>>16&255]^ft[n>>>24&255];}}for(;i<n;i++)r=r>>>8^ft[255&(r^t[i])];return (4294967295^r)>>>0}function ht(e){16==e.I?(De(e,e.p),e.p=0,e.I=0):e.I>=8&&(g(e,e.p),e.p>>=8,e.I-=8);}function xt(e){e.I>8?De(e,e.p):e.I>0&&g(e,e.p),e.ze=1+(e.I-1&7),e.p=0,e.I=0;}function wn(e,t,n){let r,i,f=[],_=0;for(r=1;r<=be;r++)_=_+n[r-1]<<1,f[r]=_;for(i=0;i<=t;i++){let t=e[i].Oe;0!=t&&(e[i].De=e_(f[t]++,t));}}function L(e,t,n){e.I>Ue-n?(e.p=65535&(e.p|t<<e.I),De(e,e.p),e.p=t>>Ue-e.I&65535,e.I+=n-Ue):(e.p=65535&(e.p|t<<e.I),e.I+=n);}function pt(e){for(let t=0;t<e.B.length;t++)e.B[t].T=0;for(let t=0;t<e.R.length;t++)e.R[t].T=0;for(let t=0;t<e.Se.length;t++)e.Se[t].T=0;e.B[Ie].T=1,e.ie=e.fe=0,e.O=e._e=0;}function St(e){if(e.B&&e.B.length>=le)for(let t=0;t<le;t++)e.B[t]=Q();else {e.B=[];for(let t=0;t<le;t++)e.B.push(Q());}if(e.R&&e.R.length>=2*me+1)for(let t=0;t<2*me+1;t++)e.R[t]=Q();else {e.R=[];for(let t=0;t<2*me+1;t++)e.R.push(Q());}if(e.Se&&e.Se.length>=2*oe+1)for(let t=0;t<2*oe+1;t++)e.Se[t]=Q();else {e.Se=[];for(let t=0;t<2*oe+1;t++)e.Se.push(Q());}e.qe=new ne(e.B,new re(Ze,i_,ie+1,we,be)),e.Ae=new ne(e.R,new re(k_,o_,0,me,be)),e.$e=new ne(e.Se,new re(null,Fe,0,oe,7)),e.p=0,e.I=0,e.ze=0,pt(e);}var he=1;function An(e,t,n){return n=e.ye[he],e.ye[he]=e.ye[e.Ve--],N_(e,t,he),n}function dt(e,t,n,r){return e[t].T<e[n].T||e[t].T==e[n].T&&r[t]<=r[n]}function N_(e,t,n){let r=e.ye[n],i=n<<1;for(;i<=e.Ve&&(i<e.Ve&&dt(t,e.ye[i+1],e.ye[i],e.Ie)&&i++,!dt(t,r,e.ye[i],e.Ie));)e.ye[n]=e.ye[i],n=i,i<<=1;e.ye[n]=r;}function Dn(e,t){let n,r,i,f,_,l,o=t.L,a=t.Z,u=t.M.W,c=t.M.N,s=t.M.V,d=t.M.q,h=0;for(f=0;f<=be;f++)e.Le[f]=0;for(o[e.ye[e.Qe]].Oe=0,n=e.Qe+1;n<le;n++)r=e.ye[n],f=o[o[r].Te].Oe+1,f>d&&(f=d,h++),o[r].Oe=f,!(r>a)&&(e.Le[f]++,_=0,r>=s&&(_=c[r-s]),l=o[r].T,e.ie+=l*(f+_),u&&(e.fe+=l*(u[r].Oe+_)));if(0!=h){do{for(f=d-1;0==e.Le[f];)f--;e.Le[f]--,e.Le[f+1]+=2,e.Le[d]--,h-=2;}while(h>0);for(f=d;0!=f;f--)for(r=e.Le[f];0!=r;)i=e.ye[--n],!(i>a)&&(o[i].Oe!=f&&(e.ie+=(f-o[i].Oe)*o[i].T,o[i].Oe=f),r--);}}function R_(e,t){let n,r,i,f=t.L,_=t.M.W,l=t.M.S,o=-1;for(e.Ve=0,e.Qe=le,n=0;n<l;n++)0!=f[n].T?(e.ye[++e.Ve]=o=n,e.Ie[n]=0):f[n].Oe=0;for(;e.Ve<2;)i=e.ye[++e.Ve]=o<2?++o:0,f[i].T=1,e.Ie[i]=0,e.ie--,_&&(e.fe-=_[i].Oe);for(t.Z=o,n=N.floor(e.Ve/2);n>=1;n--)N_(e,f,n);i=l;do{n=An(e,f,n),r=e.ye[he],e.ye[--e.Qe]=n,e.ye[--e.Qe]=r,f[i].T=f[n].T+f[r].T,e.Ie[i]=(e.Ie[n]>=e.Ie[r]?e.Ie[n]:e.Ie[r])+1,f[n].Te=f[r].Te=i,e.ye[he]=i++,N_(e,f,he);}while(e.Ve>=2);e.ye[--e.Qe]=e.ye[he],Dn(e,t),wn(f,t.Z,e.Le);}function mt(e,t,n){let r,i,f=-1,_=t[0].Oe,l=0,o=7,a=4;for(0==_&&(o=138,a=3),t[n+1].Oe=65535,r=0;r<=n;r++)i=_,_=t[r+1].Oe,!(++l<o&&i==_)&&(l<a?e.Se[i].T+=l:0!=i?(i!=f&&e.Se[i].T++,e.Se[n_].T++):l<=10?e.Se[r_].T++:e.Se[a_].T++,l=0,f=i,0==_?(o=138,a=3):i==_?(o=6,a=3):(o=7,a=4));}function bt(e,t,n){let r,i=-1,f=t[0].Oe,_=0,l=7,o=4;0==f&&(l=138,o=3);for(let a=0;a<=n;a++)if(r=f,f=t[a+1].Oe,!(++_<l&&r==f)){if(_<o)do{L(e,e.Se[r].De,e.Se[r].Oe);}while(0!=--_);else 0!=r?(r!=i&&(L(e,e.Se[r].De,e.Se[r].Oe),_--),L(e,e.Se[n_].De,e.Se[n_].Oe),L(e,_-3,2)):_<=10?(L(e,e.Se[r_].De,e.Se[r_].Oe),L(e,_-3,3)):(L(e,e.Se[a_].De,e.Se[a_].Oe),L(e,_-11,7));_=0,i=r,0==f?(l=138,o=3):r==f?(l=6,o=3):(l=7,o=4);}}function yn(e){let t;for(mt(e,e.B,e.qe.Z),mt(e,e.R,e.Ae.Z),R_(e,e.$e),t=oe-1;t>=3&&0==e.Se[Se[t]].Oe;t--);return e.ie+=3*(t+1)+5+5+4,t}function vn(e,t,n,r){let i;for(L(e,t-257,5),L(e,n-1,5),L(e,r-4,4),i=0;i<r;i++)L(e,e.Se[Se[i]].Oe,3);bt(e,e.B,t-1),bt(e,e.R,n-1);}function Xe(e,t,n,r,i=0){L(e,(ot<<1)+r,3),xt(e),De(e,n),De(e,~n),n&&t&&M(e.A,e.$,t,i,n),e.$+=n;}function Et(e){ht(e);}function gt(e){L(e,I_<<1,3),L(e,Ze[Ie].De,Ze[Ie].Oe),ht(e);}function st(e,t,n){let r,i,f,_,l=0;if(0!=e.O)do{r=255&e.Me[l],r+=(255&e.Me[l+1])<<8,i=e.Me[l+2],l+=3,0==r?L(e,t[i].De,t[i].Oe):(f=t_[i],L(e,t[f+ie+1].De,t[f+ie+1].Oe),_=i_[f],0!=_&&(i-=Te[f],L(e,i,_)),r--,f=A_(r),L(e,n[f].De,n[f].Oe),_=o_[f],0!=_&&(r-=ge[f],L(e,r,_)));}while(l<e.O);L(e,t[Ie].De,t[Ie].Oe);}function In(e){let t,n=4093624447;for(t=0;t<=31;t++,n>>=1)if(1&n&&0!=e.B[t].T)return 0;if(0!=e.B[9].T||0!=e.B[10].T||0!=e.B[13].T)return 1;for(t=32;t<ie;t++)if(0!=e.B[t].T)return 1;return 0}function Tt(e,t,n,r,i=0){let f,_,l=0;e.ge>0?(2==e.o.t&&(e.o.t=In(e)),R_(e,e.qe),R_(e,e.Ae),l=yn(e),f=e.ie+3+7>>3,_=e.fe+3+7>>3,(_<=f||4==e.ve)&&(f=_)):f=_=n+5,n+4<=f&&t?Xe(e,t,n,r,i):_==f?(L(e,(I_<<1)+r,3),st(e,Ze,k_)):(L(e,(lt<<1)+r,3),vn(e,e.qe.Z+1,e.Ae.Z+1,l+1),st(e,e.B,e.R)),pt(e),r&&xt(e);}function yt(){let e=Je();return e.l=D_(e),e}var We=[{Be:zt,Re:0,Ue:0,Pe:0,Fe:0},{Be:L_,Re:4,Ue:4,Pe:8,Fe:4},{Be:L_,Re:4,Ue:5,Pe:16,Fe:8},{Be:L_,Re:4,Ue:6,Pe:32,Fe:32},{Be:Re,Re:4,Ue:4,Pe:16,Fe:16},{Be:Re,Re:8,Ue:16,Pe:32,Fe:32},{Be:Re,Re:8,Ue:16,Pe:128,Fe:128},{Be:Re,Re:8,Ue:32,Pe:128,Fe:256},{Be:Re,Re:32,Ue:128,Pe:258,Fe:1024},{Be:Re,Re:32,Ue:258,Pe:258,Fe:4096}];function wt(e){return 2*e-(e>4?9:0)}function u_(e,t,n){return ((t<<e.C^n)&e.K)>>>0}function c_(e,t){e.be=u_(e,e.be,e.u[t+(I-1)]);let n=e.j[t&e.Y]=e.G[e.be];return e.G[e.be]=t,n}function vt(e){e.G[e.J-1]=0,Ve(e.G,0,(e.J-1)*e.G.BYTES_PER_ELEMENT);}function On(e){let t,n,r=e.h;for(t=e.J;t>0;)t--,n=e.G[t],e.G[t]=n>=r?n-r:0;for(t=r;t>0;)t--,n=e.j[t],e.j[t]=n>=r?n-r:0;}function O_(e,t,n,r){let i=e.avail_in;return i>r&&(i=r),0==i?0:(e.avail_in-=i,M(t,n,e.next_in,e.next_in_index,i),1==e.l.F?e.i=se(e.i,new x(t.buffer,t.byteOffset+n,i),i):2==e.l.F&&(e.i=W(e.i,new x(t.buffer,t.byteOffset+n,i),i)),e.next_in_index+=i,e.total_in+=i,i)}function d_(e){let t,n,r=e.h;do{if(n=e.We-e.ce-e.ue,0==n&&0==e.ue&&0==e.ce?n=r:-1==n&&n--,e.ue>=r+ve(e)&&(M(e.u,0,e.u,r,r-n),e.Ne-=r,e.ue-=r,e.ae-=r,e.le>e.ue&&(e.le=e.ue),On(e),n+=r),0==e.o.avail_in)break;if(t=O_(e.o,e.u,e.ue+e.ce,n),e.ce+=t,e.ce+e.le>=I){let t=e.ue-e.le;for(e.be=e.u[t],e.be=u_(e,e.be,e.u[t+1]);e.le&&(e.be=u_(e,e.be,e.u[t+I-1]),e.j[t&e.Y]=e.G[e.be],e.G[e.be]=t,t++,e.le--,!(e.ce+e.le<I)););}}while(e.ce<ae&&0!=e.o.avail_in);if(e.k<e.We){let t,n=e.ue+e.ce;e.k<n?(t=e.We-n,t>Be&&(t=Be),Ve(e.u,n,t),e.k=n+t):e.k<n+Be&&(t=n+Be-e.k,t>e.We-e.k&&(t=e.We-e.k),Ve(e.u,e.k,t),e.k+=t);}}function It(e,t,n=8,r=15,i=He,f=0){let _=1;if(!e)return -2;if(e.msg="",-1==t&&(t=6),r<0){if(_=0,r<-15)return -2;r=-r;}else r>15&&(_=2,r-=16);if(i<1||i>nt||8!=n||r<8||r>15||t<0||t>9||f<0||f>4||8==r&&1!=_)return -2;8==r&&(r=9);let l=D_(e);return l?(e.l=l,l.o=e,l.P=42,l.F=_,l.H=void 0,l.v=r,l.h=1<<l.v,l.Y=l.h-1,l.X=i+7,l.J=1<<l.X,l.K=l.J-1,l.C=(l.X+I-1)/I,l.u=new x(2*l.h),l.j=new E(l.h),l.G=new E(l.J),l.k=0,l.ee=1<<i+6,l.A=new x(l.ee*it),l.ne=4*l.ee,l.u&&l.j&&l.G&&l.A?(l.Me=l.A.subarray(l.ee),l.D=l.te+l.ee,l.U=3*(l.ee-1),l.ge=t,l.ve=f,l.Ze=n,Bn(e)):(l.P=666,e.msg=w_(-4),F_(e),-4)):-4}function B_(e){if(null==e)return true;let t=e.l;return !t||t.o!=e||42!=t.P&&57!=t.P&&69!=t.P&&73!=t.P&&91!=t.P&&103!=t.P&&113!=t.P&&666!=t.P}function Hn(e){let t;return B_(e)?-2:(e.total_in=e.total_out=0,e.msg="",e.t=2,t=e.l,t.$=0,t.re=t.te,t.F<0&&(t.F=-t.F),t.P=2==t.F?57:42,e.i=2==t.F?W(0):se(0),t.oe=-2,St(t),0)}function Un(e){e.We=2*e.h,vt(e),e.pe=We[e.ge].Ue,e.ke=We[e.ge].Re,e.me=We[e.ge].Pe,e.xe=We[e.ge].Fe,e.ue=0,e.ae=0,e.ce=0,e.le=0,e.se=e.de=I-1,e.we=0,e.be=0;}function Bn(e){let t=Hn(e);return 0==t&&Un(e.l),t}function Ye(e,t){g(e,t>>8),g(e,255&t);}function q(e){let t,n=e.l;Et(n),t=n.$,t>e.avail_out&&(t=e.avail_out),0!=t&&(M(e.next_out,e.next_out_index,n.A,n.re,t),e.next_out_index+=t,n.re+=t,e.total_out+=t,e.avail_out-=t,n.$-=t,0==n.$&&(n.re=n.te));}function ke(e,t){let n=e.l;n.H&&n.H.He&&(e.i=W(e.i,new x(n.A.buffer,n.te+t,n.$-t),n.$-t));}function kt(e,t){let n,r=e.l;if(B_(e)||t>5||t<0)return Ae(e,-2);if(!e.next_out||0!=e.avail_in&&!e.next_in||666==r.P&&4!=t)return Ae(e,-2);if(0==e.avail_out)return Ae(e,-5);if(n=r.oe,r.oe=t,0!=r.$){if(q(e),0==e.avail_out)return r.oe=$,0}else if(0==e.avail_in&&wt(t)<=wt(n)&&4!=t)return Ae(e,-5);if(666==r.P&&0!=e.avail_in)return Ae(e,-5);if(42==r.P&&0==r.F&&(r.P=113),42==r.P){let t,n=8+(r.v-8<<4)<<8;if(t=r.ve>=2||r.ge<2?0:r.ge<6?1:6==r.ge?2:3,n|=t<<6,0!=r.ue&&(n|=at),n+=31-n%31,Ye(r,n),0!=r.ue&&(Ye(r,e.i>>16),Ye(r,65535&e.i)),e.i=1,r.P=113,q(e),0!=r.$)return r.oe=$,0}if(57==r.P)if(e.i=W(0),g(r,31),g(r,139),g(r,8),r.H)g(r,(r.H.Ye?1:0)+(r.H.He?2:0)+(null==r.H.Xe?0:4)+(null==r.H.Je?0:8)+(null==r.H.Ke?0:16)),g(r,255&r.H.Ce),g(r,r.H.Ce>>>8&255),g(r,r.H.Ce>>>16&255),g(r,r.H.Ce>>>24&255),g(r,9==r.ge?2:r.ve>=2||r.ge<2?4:0),g(r,255&r.H.je),null!=r.H.Xe&&(g(r,255&r.H.Ge),g(r,r.H.Ge>>>8&255)),r.H.He&&(e.i=W(e.i,r.A,r.$)),r.Ee=0,r.P=69;else if(g(r,0),g(r,0),g(r,0),g(r,0),g(r,0),g(r,9==r.ge?2:r.ve>=2||r.ge<2?4:0),g(r,rt),r.P=113,q(e),0!=r.$)return r.oe=$,0;if(69==r.P){if(r.H&&null!=r.H.Xe){let t=r.$,n=(65535&r.H.Ge)-r.Ee;for(;r.$+n>r.ne;){let i=r.ne-r.$;if(M(r.A,r.$,r.H.Xe,r.Ee,i),r.$=r.ne,ke(e,t),r.Ee+=i,q(e),0!=r.$)return r.oe=$,0;t=0,n-=i;}M(r.A,r.$,r.H.Xe,r.Ee,n),r.$+=n,ke(e,t),r.Ee=0;}r.P=73;}if(73==r.P){if(r.H&&r.H.Je&&r.H.Je.length){let t,n=r.$;do{if(r.$==r.ne){if(ke(e,n),q(e),0!=r.$)return r.oe=$,0;n=0;}t=r.H.Je[r.Ee++],g(r,t);}while(0!=t);ke(e,n),r.Ee=0;}r.P=91;}if(91==r.P){if(r.H&&r.H.Ke&&r.H.Ke.length){let t,n=r.$;do{if(r.$==r.ne){if(ke(e,n),q(e),0!=r.$)return r.oe=$,0;n=0;}t=r.H.Ke[r.Ee++],g(r,t);}while(0!=t);ke(e,n);}r.P=103;}if(103==r.P){if(r.H&&r.H.He){if(r.$+2>r.ne&&(q(e),0!=r.$))return r.oe=$,0;g(r,255&e.i),g(r,e.i>>>8&255),e.i=W(0);}if(r.P=113,q(e),0!=r.$)return r.oe=$,0}if(0!=e.avail_in||0!=r.ce||0!=t&&666!=r.P){let n=0==r.ge?zt(r,t):2==r.ve?Zn(r,t):3==r.ve?Fn(r,t):We[r.ge].Be(r,t);if((2==n||3==n)&&(r.P=666),0==n||2==n)return 0==e.avail_out&&(r.oe=$),0;if(1==n&&(1==t?gt(r):5!=t&&(Xe(r,null,0,0),3==t&&(vt(r),0==r.ce&&(r.ue=0,r.ae=0,r.le=0))),q(e),0==e.avail_out))return r.oe=$,0}return 4!=t?0:r.F<=0?1:(2==r.F?(g(r,255&e.i),g(r,e.i>>>8&255),g(r,e.i>>>16&255),g(r,e.i>>>24&255),g(r,255&e.total_in),g(r,e.total_in>>>8&255),g(r,e.total_in>>>16&255),g(r,e.total_in>>>24&255)):(Ye(r,e.i>>>16&65535),Ye(r,65535&e.i)),q(e),r.F>0&&(r.F=-r.F),0!=r.$?0:1)}function F_(e){if(B_(e))return -2;let t=e.l,n=t.P;return t.u=Z,t.j=je,t.G=je,t.A=Z,t.Me=Z,t.ye=new H(0),t.Ie=Z,t.Le=je,t.B.length=0,t.R.length=0,t.Se.length=0,t.H=void 0,t.te=0,t.re=0,t.D=0,113==n?-3:0}function Nt(e,t){let n,r,i=e.xe,f=e.ue,_=e.de,l=e.me,o=e.ue>ve(e)?e.ue-ve(e):0,a=e.j,u=e.Y,c=e.u[f],s=e.u[f+1],d=e.u[f+_-1],h=e.u[f+_];e.de>=e.ke&&(i>>=2),l>e.ce&&(l=e.ce);do{if(n=t,e.u[n+_]!=h||e.u[n+_-1]!=d||e.u[n]!=c||e.u[n+1]!=s)continue;let i=N.min(_e,e.ce),o=2;for(;o<i&&e.u[f+o]==e.u[n+o];)o++;if(r=o,r>_){if(e.Ne=t,_=r,r>=l)break;d=e.u[f+_-1],h=e.u[f+_];}}while((t=a[t&u])>o&&0!=--i);return _<=e.ce?_:e.ce}function Rt(e,t){Tt(e,e.u,e.ue-e.ae,t,e.ae),e.ae=e.ue,q(e.o);}function V(e,t){return Rt(e,t?1:0),0==e.o.avail_out?t?2:0:null}var At=65535;function Ne(e,t){return e<t?e:t}function zt(e,t){let n,r,i,f=Ne(e.ne-5,e.h),_=0,l=e.o.avail_in;do{if(n=At,i=e.I+42>>3,e.o.avail_out<i||(i=e.o.avail_out-i,r=e.ue-e.ae,n>r+e.o.avail_in&&(n=r+e.o.avail_in),n>i&&(n=i),n<f&&(0==n&&4!=t||0==t||n!=r+e.o.avail_in)))break;_=4==t&&n==r+e.o.avail_in?1:0,Xe(e,null,0,_),e.A[e.$-4]=n,e.A[e.$-3]=n>>8,e.A[e.$-2]=~n,e.A[e.$-1]=~n>>8,q(e.o),r&&(r>n&&(r=n),M(e.o.next_out,e.o.next_out_index,e.u,e.ae,r),e.o.next_out_index+=r,e.o.avail_out-=r,e.o.total_out+=r,e.ae+=r,n-=r),n&&(O_(e.o,e.o.next_out,e.o.next_out_index,n),e.o.next_out_index+=n,e.o.avail_out-=n,e.o.total_out+=n);}while(0==_);if(l-=e.o.avail_in,l){if(l>=e.h){e._e=2;let t=e.o.next_in_index-e.h;M(e.u,0,e.o.next_in,t,e.h),e.ue=e.h,e.le=e.ue;}else e.We-e.ue<=l&&(e.ue-=e.h,M(e.u,0,e.u,e.h,e.ue),e._e<2&&e._e++,e.le>e.ue&&(e.le=e.ue)),M(e.u,e.ue,e.o.next_in,e.o.next_in_index-l,l),e.ue+=l,e.le+=Ne(l,e.h-e.le);e.ae=e.ue;}return e.k<e.ue&&(e.k=e.ue),_?(e.ze=8,3):0!=t&&4!=t&&0==e.o.avail_in&&e.ue==e.ae?1:(i=e.We-e.ue,e.o.avail_in>i&&e.ae>=e.h&&(e.ae-=e.h,e.ue-=e.h,M(e.u,0,e.u,e.h,e.ue),e._e<2&&e._e++,i+=e.h,e.le>e.ue&&(e.le=e.ue)),i>e.o.avail_in&&(i=e.o.avail_in),i&&(O_(e.o,e.u,e.ue,i),e.ue+=i,e.le+=Ne(i,e.h-e.le)),e.k<e.ue&&(e.k=e.ue),i=e.I+42>>3,i=Ne(e.ne-i,At),f=Ne(i,e.h),r=e.ue-e.ae,(r>=f||(r||4==t)&&0!=t&&0==e.o.avail_in&&r<=i)&&(n=Ne(r,i),_=4==t&&0==e.o.avail_in&&n==r?1:0,Xe(e,e.u,n,_,e.ae),e.ae+=n,q(e.o)),_&&(e.ze=8),_?2:0)}function L_(e,t){let n,r=false;for(;;){if(e.ce<ae){if(d_(e),e.ce<ae&&0==t)return 0;if(0==e.ce)break}if(n=0,e.ce>=I&&(n=c_(e,e.ue)),0!=n&&e.ue-n<=ve(e)&&(e.se=Nt(e,n)),e.se>=I)if(e.ue,e.Ne,e.se,r=__(e,e.ue-e.Ne,e.se-I),e.ce-=e.se,e.se<=e.pe&&e.ce>=I){e.se--;do{e.ue++,n=c_(e,e.ue);}while(0!=--e.se);e.ue++;}else e.ue+=e.se,e.se=0,e.be=e.u[e.ue],e.be=u_(e,e.be,e.u[e.ue+1]);else r=ye(e,e.u[e.ue]),e.ce--,e.ue++;if(r){let t=V(e,false);if(null!=t)return t}}if(e.le=e.ue<I-1?e.ue:I-1,4==t){return V(e,true)??3}if(e.O){let t=V(e,false);if(null!=t)return t}return 1}function Re(e,t){let n,r=false;for(;;){if(e.ce<ae){if(d_(e),e.ce<ae&&0==t)return 0;if(0==e.ce)break}if(n=0,e.ce>=I&&(n=c_(e,e.ue)),e.de=e.se,e.he=e.Ne,e.se=I-1,0!=n&&e.de<e.pe&&e.ue-n<=ve(e)&&(e.se=Nt(e,n),e.se<=5&&(1==e.ve||e.se==I&&e.ue-e.Ne>tt)&&(e.se=I-1)),e.de>=I&&e.se<=e.de){let t=e.ue+e.ce-I;e.ue,e.he,e.de,r=__(e,e.ue-1-e.he,e.de-I),e.ce-=e.de-1,e.de-=2;do{++e.ue<=t&&(n=c_(e,e.ue));}while(0!=--e.de);if(e.we=0,e.se=I-1,e.ue++,r){let t=V(e,false);if(null!=t)return t}}else if(e.we){if(r=ye(e,e.u[e.ue-1]),r&&Rt(e,0),e.ue++,e.ce--,0==e.o.avail_out)return 0}else e.we=1,e.ue++,e.ce--;}if(e.we&&(r=ye(e,e.u[e.ue-1]),e.we=0),e.le=e.ue<I-1?e.ue:I-1,4==t){return V(e,true)??3}if(e.O){let t=V(e,false);if(null!=t)return t}return 1}function Fn(e,t){let n,r,i,f;for(;;){if(e.ce<=_e){if(d_(e),e.ce<=_e&&0==t)return 0;if(0==e.ce)break}if(e.se=0,e.ce>=I&&e.ue>0&&(i=e.ue-1,r=e.u[i],r==++i&&r==++i&&r==++i)){f=e.ue+_e;do{}while(r==++i&&r==++i&&r==++i&&r==++i&&r==++i&&r==++i&&r==++i&&r==++i&&i<f);e.se=_e-(f-i),e.se>e.ce&&(e.se=e.ce);}if(e.se>=I?(e.ue,e.ue,e.se,n=__(e,1,e.se-I),e.ce-=e.se,e.ue+=e.se,e.se=0):(n=ye(e,e.u[e.ue]),e.ce--,e.ue++),n){let t=V(e,false);if(null!=t)return t}}if(e.le=0,4==t){return V(e,true)??3}if(e.O){let t=V(e,false);if(null!=t)return t}return 1}function Zn(e,t){let n=false;for(;;){if(0==e.ce&&(d_(e),0==e.ce)){if(0==t)return 0;break}if(e.se=0,n=ye(e,e.u[e.ue]),e.ce--,e.ue++,n){let t=V(e,false);if(null!=t)return t}}if(e.le=0,4==t){return V(e,true)??3}if(e.O){let t=V(e,false);if(null!=t)return t}return 1}var ue=852,m_=592,b_=594,Ct=ge.map(e=>e+1),Lt=Te.subarray(0,-1).map(e=>e+3),Pn=[16,1,73,1,200,1],Mn=[144,1,72,1,78,1],Ot=Ee.map(Kt),Ht=Ee.map(qt);Ot.push(64,2),Ht.push(142,2);var Ut=de.slice(0,-2).map(Kt),Bt=de.slice(0,-2).map(qt);Ut.push(...Pn),Bt.push(...Mn);var Ft=new E([...Lt,258,0,0]),Zt=new E([...Lt,3,0,0]),Pt=te(Ut),Mt=te(Bt),Xt=new E([...Ct,0,0]),Yt=new E([...Ct,32769,49153]),Wt=te(Ot),Gt=te(Ht);function Kt(e,t){return t%2?e:e+16}function qt(e,t){return t%2?e:e+128}function Vt(e,t){let n,r=e.l,i=e.next_in_index,f=e.next_out_index,_=e.next_in,l=e.next_out,o=r.u,a=r.p>>>0,u=r.I>>>0,c=r.et,s=r.tt,d=(1<<r.nt)-1,h=(1<<r.rt)-1,w=r.h>>>0,b=r.k>>>0,g=r.m>>>0,v=r.it,k=f-(t-e.avail_out),m=f+(e.avail_out-257),x=i+(e.avail_in-5),p=0,y=0,I=0,L=0;e:do{for(;u<15;){if(!(i<_.length))break e;a+=_[i++]<<u,u+=8;}n=c[a&d];t:for(;;){if(I=n.ft,a>>>=I,u-=I,I=n._t,0==I){l[f++]=n.lt;break}if(16&I){if(p=n.lt,I&=15,I){for(;u<I;){if(!(i<_.length)){r.ot=16200;break e}a+=_[i++]<<u,u+=8;}p+=a&(1<<I)-1,a>>>=I,u-=I;}for(;u<15;){if(!(i<_.length)){r.ot=16200;break e}a+=_[i++]<<u,u+=8;}n=s[a&h];n:for(;;){if(I=n.ft,a>>>=I,u-=I,I=n._t,16&I){if(y=n.lt,I&=15,I){for(;u<I;){if(!(i<_.length)){r.ot=16200;break e}a+=_[i++]<<u,u+=8;}y+=a&(1<<I)-1,a>>>=I,u-=I;}let t=p,c=f-k;if(y>c){let n=y-c;if(n>b&&v){e.msg="invalid distance too far back",r.ot=16209;break e}if(0==g){if(L=w-n,!(n<t)){for(let e=0;e<t;++e)l[f++]=o[L++];continue e}for(let e=0;e<n;++e)l[f++]=o[L++];t-=n,L=f-y;}else if(g<n){L=w+g-n;let e=n-g;if(!(e<t)){for(let e=0;e<t;++e)l[f++]=o[L++];continue e}for(let t=0;t<e;++t)l[f++]=o[L++];if(t-=e,L=0,g<t){for(let e=0;e<g;++e)l[f++]=o[L++];t-=g,L=f-y;}}else {if(L=g-n,!(n<t)){for(let e=0;e<t;++e)l[f++]=o[L++];continue e}for(let e=0;e<n;++e)l[f++]=o[L++];t-=n,L=f-y;}for(;t>2;)l[f++]=l[L++],l[f++]=l[L++],l[f++]=l[L++],t-=3;t&&(l[f++]=l[L++],t>1&&(l[f++]=l[L++]));}else {for(L=f-y;t>2;)l[f++]=l[L++],l[f++]=l[L++],l[f++]=l[L++],t-=3;t&&(l[f++]=l[L++],t>1&&(l[f++]=l[L++]));}break}if(64&I){e.msg="invalid distance code",r.ot=16209;break e}n=s[n.lt+(a&(1<<I)-1)];continue n}break}if(64&I){if(32&I){r.ot=16191;break e}e.msg="invalid literal/length code",r.ot=16209;break e}n=c[n.lt+(a&(1<<I)-1)];continue t}}while(i<x&&f<m);let M=u>>3;i-=M,u-=M<<3,a&=(1<<u)-1,e.next_in_index=i,e.next_out_index=f,e.avail_in=i<x?x-i+5:5-(i-x),e.avail_out=f<m?m-f+257:257-(f-m),r.p=a>>>0,r.I=u>>>0;}function Z_(e,t){let n=[],r=t?ue+b_:ue+m_;return {...Qe(e,0),o:e,ot:16180,ut:false,F:0,ct:false,st:0,dt:0,ht:0,wt:0,u:Z,bt:0,gt:0,Xe:0,et:n,tt:n,nt:0,rt:0,vt:0,kt:0,xt:0,yt:0,It:n,Lt:new E(320),Mt:new E(288),zt:new v(r).fill(null).map(()=>pe()),Et:0,it:true,Zt:0,Wt:0,Nt:t}}function pe(e=0,t=0,n=0){return {_t:e,ft:t,lt:n}}function P_(e=1){return {_t:64,ft:e,lt:0}}function Jt(e=0){return {_t:96,ft:e,lt:0}}function M_(e){return (255&e)<<24|(e>>8&255)<<16|(e>>16&255)<<8|e>>24&255}var Le=15,Yn={Nt:false,Vt:Ft,Qt:Pt,St:Xt,qt:Wt,At:20,$t:257,Dt:0,Ot:m_,Tt:false,Bt:true},Wn={Nt:true,Vt:Zt,Qt:Mt,St:Yt,qt:Gt,At:19,$t:256,Dt:-1,Ot:b_,Tt:true,Bt:false};function Oe(e,t,n,r,i,f,_,l){let o,a,u,c,s,d,h,w,b,g,v,k,m,x,p,y,I,L,M,z=new E(Le+1),Z=new E(Le+1),W=l?Wn:Yn;for(o=0;o<=Le;o++)z[o]=0;for(a=0;a<n;a++)z[t[a]]++;for(s=i.Rt,c=Le;c>=1&&0==z[c];c--);if(s>c&&(s=c),0==c)return W.Bt?(p=P_(1),r.Rt[0]=p,r.Rt[1]=p,i.Rt=1,0):-1;for(u=1;u<c&&0==z[u];u++);for(s<u&&(s=u),w=1,o=1;o<=Le;o++)if(w<<=1,w-=z[o],w<0)return -1;if(w>0&&(0==e||1!=c))return -1;for(Z[1]=0,o=1;o<Le;o++)Z[o+1]=Z[o]+z[o];for(a=0;a<n;a++)0!=t[a]&&(f[Z[t[a]]++]=a);switch(e){case 0:I=L=f,M=W.At;break;case 1:I=W.Vt,L=W.Qt,M=W.$t;break;default:I=W.St,L=W.qt,M=W.Dt;}if(g=0,a=0,o=u,y=_.Rt,d=s,h=0,m=-1,b=1<<s,x=b-1,1==e&&(W.Tt?b>=ue:b>ue)||2==e&&(W.Tt?b>=W.Ot:b>W.Ot))return 1;for(;;){p=Gn(f,a,o,h,e,I,L,M,W.Nt),v=1<<o-h,k=1<<d,u=k;do{k-=v;let e=(g>>h)+k;r.Rt[y+e]={...p};}while(0!=k);for(v=1<<o-1;g&v;)v>>=1;if(0!=v?(g&=v-1,g+=v):g=0,a++,0==--z[o]){if(o==c)break;o=t[f[a]];}if(o>s&&(g&x)!=m){for(0==h&&(h=s),y+=1<<d,d=o-h,w=1<<d;d+h<c&&(w-=z[d+h],!(w<=0));)d++,w<<=1;if(b+=1<<d,1==e&&(W.Tt?b>=ue:b>ue)||2==e&&(W.Tt?b>=W.Ot:b>W.Ot))return 1;m=g&x,r.Rt[_.Rt+m]={_t:d,ft:s,lt:y-_.Rt};}}if(0!=g)for(p=P_(o-h);0!=g;){for(0!=h&&(g&x)!=m&&(h=0,o=s,y=_.Rt,d=s,p.ft=o),r.Rt[y+(g>>h)]={...p},v=1<<o-1;g&v;)v>>=1;0!=v?(g&=v-1,g+=v):g=0;}return _.Rt+=b,i.Rt=s,0}function Gn(e,t,n,r,i,f,_,l,o){let a;if(o?e[t]<l:e[t]+1<l)a=pe(0,n-r,e[t]);else if(o?e[t]>l:e[t]>=l)if(o&&1==i){let i=e[t]-257;a=pe(_[i],n-r,f[i]);}else {let i=o?e[t]:e[t]-l;a=pe(_[i],n-r,f[i]);}else a=Jt(n-r);return a}var Vn={Ut:true,Pt:new v(544),Ft:[],Ht:[]},Jn={Ut:true,Pt:new v(544),Ft:[],Ht:[]};function Qt(){let e=Je();return e.l=Z_(e,false),e}function Ke(e){let t;return !(e&&(t=e.l,!(!t||t.o!=e||t.Nt&&(t.ot<16191||t.ot>16209)||!t.Nt&&(t.ot<16180||t.ot>16211))))}function Qn(e){let t;return Ke(e)?-2:(t=e.l,e.total_in=e.total_out=t.wt=0,e.msg="",t.F&&(e.i=1&t.F),t.ot=t.Nt?16191:16180,t.ut=false,t.ct=false,t.st=-1,t.dt=t.Nt?65536:32768,delete t.H,t.p=0,t.I=0,t.et=t.zt,t.tt=t.zt,t.It=t.zt,t.it=true,t.Zt=-1,0)}function $n(e){let t;return Ke(e)?-2:(t=e.l,t.h=0,t.k=0,t.m=0,Qn(e))}function er(e,t){let n,r;if(Ke(e))return -2;if(r=e.l,t<0){if(t<-16)return -2;n=0,r.Nt=-16==t,t=-t;}else n=5+(t>>4),r.Nt=false,t<48&&(t&=15);let i=r.Nt?16:15;return t&&(t<8||t>i)?-2:(r.u.length>0&&r.v!=t&&(r.u=Z),r.F=n,r.v=t,$n(e))}function $t(e,t){let n,r;if(!e)return -2;e.msg="";let i=-16==t;return r=Z_(e,i),e.l=r,r.o=e,r.ot=i?16191:16180,n=er(e,t),n}function _r(e){let t=e.Nt?Jn:Vn,n={Rt:0};if(t.Ut){let r,i,f;for(r=0;r<144;)e.Lt[r++]=8;for(;r<256;)e.Lt[r++]=9;for(;r<280;)e.Lt[r++]=7;for(;r<288;)e.Lt[r++]=8;for(let e=0;e<544;e++)t.Pt[e]=pe();f=t.Pt,t.Ft=f,i=9;let _={Rt:f},l={Rt:i},o={Rt:0};for(Oe(1,e.Lt,288,_,l,e.Mt,o,e.Nt),f=_.Rt,i=l.Rt,e.Et=o.Rt,r=0;r<32;)e.Lt[r++]=5;i=5;let a=o.Rt,u={Rt:f},c={Rt:i};n.Rt=a,Oe(2,e.Lt,32,u,c,e.Mt,n,e.Nt),t.Ht=f.slice(a),t.Ut=false;}e.et=t.Ft,e.nt=9,e.tt=t.Ht,e.rt=5,e.Et=n.Rt;}function tr(e,t,n){let r=e.l;if(!(r.u&&0!=r.u.length||(r.u=new x(1<<r.v),r.u)))return 1;if(0==r.h&&(r.h=1<<r.v,r.m=0,r.k=0),n>=r.h)M(r.u,0,t,t.length-r.h,r.h),r.m=0,r.k=r.h;else {let e=r.h-r.m;e>n&&(e=n),M(r.u,r.m,t,t.length-n,e),(n-=e)?(M(r.u,0,t,t.length-n,n),r.m=n,r.k=r.h):(r.m+=e,r.m==r.h&&(r.m=0),r.k<r.h&&(r.k+=e));}return 0}var x_=class extends z{constructor(){super("Need more input");}};function en(e,t){let n,r,i,f,_,l,o,a,u,c,s,d,h,w,b,g,v,k=new x(4);if(Ke(e)||!e.next_out||!e.next_in&&0!=e.avail_in)return -2;l=0,a=0,o=0,u=0,r=Z,i=0,f=Z,_=0,n=e.l,16191==n.ot&&(n.ot=16192),L(),c=l,s=o,v=0;try{for(;;)switch(n.ot){case 16180:if(0==n.F){n.ot=16192;break}if(V(16),2&n.F&&35615==a){0==n.v&&(n.v=15),n.ht=W(0),n.ht=y(n.ht,a),E(),n.ot=16181;break}if(n.H&&(n.H.Yt=-1),!(1&n.F)||((Q(8)<<8)+(a>>8))%31){e.msg="incorrect header check",n.ot=16209;break}if(8!=Q(4)){e.msg="unknown compression method",n.ot=16209;break}if(S(4),g=Q(4)+8,0==n.v&&(n.v=g),g>15||g>n.v){e.msg="invalid window size",n.ot=16209;break}n.dt=1<<g,n.st=0,e.i=n.ht=se(0),n.ot=512&a?16189:16191,E();break;case 16181:if(V(16),n.st=a,8!=(255&n.st)){e.msg="unknown compression method",n.ot=16209;break}if(57344&n.st){e.msg="unknown header flags set",n.ot=16209;break}n.H&&(n.H.Ye=a>>8&1),512&n.st&&4&n.F&&(n.ht=y(n.ht,a)),E(),n.ot=16182;case 16182:V(32),n.H&&(n.H.Ce=a),512&n.st&&4&n.F&&(n.ht=I(n.ht,a)),E(),n.ot=16183;case 16183:V(16),n.H&&(n.H.Xt=255&a,n.H.je=a>>8),512&n.st&&4&n.F&&(n.ht=y(n.ht,a)),E(),n.ot=16184;case 16184:1024&n.st?(V(16),n.bt=a,n.H&&(n.H.Ge=a),512&n.st&&4&n.F&&(n.ht=y(n.ht,a)),E()):n.H&&(n.H.Xe=Z),n.ot=16185;case 16185:if(1024&n.st&&(d=n.bt,d>l&&(d=l),d&&(n.H&&n.H.Xe&&n.H.Jt&&(g=n.H.Ge-n.bt)<n.H.Jt&&M(n.H.Xe,g,r,i,d),512&n.st&&4&n.F&&(n.ht=W(n.ht,r.subarray(i,i+d),d)),l-=d,i+=d,n.bt-=d),n.bt))return m();n.bt=0,n.ot=16186;case 16186:if(2048&n.st){if(0==l)return m();d=0;do{g=r[i+d++],n.H&&n.H.Kt&&n.bt<n.H.Kt&&(n.H.Je[n.bt++]=g);}while(g&&d<l);if(512&n.st&&4&n.F&&(n.ht=W(n.ht,r.subarray(i,i+d),d)),l-=d,i+=d,g)return m()}else n.H&&(n.H.Je=Z);n.bt=0,n.ot=16187;case 16187:if(4096&n.st){if(0==l)return m();d=0;do{g=r[i+d++],n.H&&n.H.Ct&&n.bt<n.H.Ct&&(n.H.Ke[n.bt++]=g);}while(g&&d<l);if(512&n.st&&4&n.F&&(n.ht=W(n.ht,r.subarray(i,i+d),d)),l-=d,i+=d,g)return m()}else n.H&&(n.H.Ke=Z);n.ot=16188;case 16188:if(512&n.st){if(V(16),4&n.F&&a!=(65535&n.ht)){e.msg="header crc mismatch",n.ot=16209;break}E();}n.H&&(n.H.He=n.st>>9&1,n.H.Yt=1),e.i=n.ht=W(0),n.ot=16191;break;case 16189:V(32),e.i=n.ht=M_(a),E(),n.ot=16190;case 16190:if(!n.ct)return z(),2;e.i=n.ht=se(0),n.ot=16191;case 16191:if(5==t||6==t)return m();case 16192:if(n.ut){q(),n.ot=16206;break}switch(V(3),n.ut=!!Q(1),S(1),Q(2)){case 0:n.ot=16193;break;case 1:if(_r(n),n.ot=16199,6==t)return S(2),m();break;case 2:n.ot=16196;break;case 3:e.msg="invalid block type",n.ot=16209;}S(2);break;case 16193:if(q(),V(32),(65535&a)!=(a>>>16^65535)){e.msg="invalid stored block lengths",n.ot=16209;break}if(n.bt=65535&a,E(),n.ot=16194,6==t)return m();case 16194:n.ot=16195;case 16195:if(d=n.bt,d){if(d>l&&(d=l),d>o&&(d=o),0==d)return m();M(f,_,r,i,d),l-=d,i+=d,o-=d,_+=d,n.bt-=d;break}n.ot=16191;break;case 16196:if(V(14),n.kt=Q(5)+257,S(5),n.xt=Q(5)+1,S(5),n.vt=Q(4)+4,S(4),n.kt>286||!n.Nt&&n.xt>30){e.msg=n.Nt?"too many length":"too many length or distance symbols",n.ot=16209;break}n.yt=0,n.ot=16197;case 16197:for(;n.yt<n.vt;)V(3),n.Lt[Se[n.yt++]]=Q(3),S(3);for(;n.yt<19;)n.Lt[Se[n.yt++]]=0;n.It=n.zt,n.et=n.tt=n.It,n.nt=7;let c={Rt:n.It},k={Rt:n.nt},x={Rt:0};if(v=Oe(0,n.Lt,19,c,k,n.Mt,x,n.Nt),n.It=c.Rt,n.nt=k.Rt,v){e.msg="invalid code lengths set",n.ot=16209;break}n.yt=0,n.ot=16198;case 16198:for(;n.yt<n.kt+n.xt;){for(;w=n.et[Q(n.nt)],!(w.ft<=u);)N();if(w.lt<16)S(w.ft),n.Lt[n.yt++]=w.lt;else {if(16==w.lt){if(V(w.ft+2),S(w.ft),0==n.yt){e.msg="invalid bit length repeat",n.ot=16209;break}g=n.Lt[n.yt-1],d=3+Q(2),S(2);}else 17==w.lt?(V(w.ft+3),S(w.ft),g=0,d=3+Q(3),S(3)):(V(w.ft+7),S(w.ft),g=0,d=11+Q(7),S(7));if(n.yt+d>n.kt+n.xt){e.msg="invalid bit length repeat",n.ot=16209;break}for(;d--;)n.Lt[n.yt++]=g;}}if(16209==n.ot)break;if(0==n.Lt[256]){e.msg="invalid code -- missing end-of-block",n.ot=16209;break}n.It=n.zt,n.nt=9;let A={Rt:n.It},$={Rt:n.nt},D={Rt:0};v=Oe(1,n.Lt,n.kt,A,$,n.Mt,D,n.Nt),n.It=A.Rt,n.nt=$.Rt;let O=D.Rt;if(n.et=n.It.slice(0,O),v){e.msg="invalid literal/lengths set",n.ot=16209;break}n.rt=6;let T=n.Lt.subarray(n.kt,n.kt+n.xt),B={Rt:n.It},R={Rt:n.rt},U={Rt:O};if(v=Oe(2,T,n.xt,B,R,n.Mt,U,n.Nt),n.It=B.Rt,n.rt=R.Rt,n.tt=n.It.slice(O),v){e.msg="invalid distances set",n.ot=16209;break}if(n.ot=16199,6==t)return m();case 16199:n.ot=16200;case 16200:if(!n.Nt&&l>=6&&o>=258){z(),Vt(e,s),L(),16191==n.ot&&(n.Zt=-1);break}for(n.Zt=0;w=n.et[Q(n.nt)],!(w.ft<=u);)N();if(w._t&&!(240&w._t)){for(b=w;w=n.et[b.lt+(Q(b.ft+b._t)>>b.ft)],!(b.ft+w.ft<=u);)N();S(b.ft),n.Zt+=b.ft;}if(S(w.ft),n.Zt+=w.ft,n.bt=w.lt,0==w._t){n.ot=16205;break}if(32&w._t){n.Zt=-1,n.ot=16191;break}if(64&w._t){e.msg="invalid literal/length code",n.ot=16209;break}n.Xe=w._t&(n.Nt?31:15),n.ot=16201;case 16201:n.Xe&&(V(n.Xe),n.bt+=Q(n.Xe),S(n.Xe),n.Zt+=n.Xe),n.Wt=n.bt,n.ot=16202;case 16202:for(;w=n.tt[Q(n.rt)],!(w.ft<=u);)N();if(!(240&w._t)){for(b=w;w=n.tt[b.lt+(Q(b.ft+b._t)>>b.ft)],!(b.ft+w.ft<=u);)N();S(b.ft),n.Zt+=b.ft;}if(S(w.ft),n.Zt+=w.ft,64&w._t){e.msg="invalid distance code",n.ot=16209;break}n.gt=w.lt,n.Xe=15&w._t,n.ot=16203;case 16203:n.Xe&&(V(n.Xe),n.gt+=Q(n.Xe),S(n.Xe),n.Zt+=n.Xe),n.ot=16204;case 16204:if(0==o)return m();if(d=s-o,n.gt>d){if(d=n.gt-d,d>n.k&&n.it){e.msg="invalid distance too far back",n.ot=16209;break}d>n.m?(d-=n.m,h=n.h-d):h=n.m-d,d>n.bt&&(d=n.bt),d>o&&(d=o);for(let e=0;e<d;++e)f[_]=255&n.u[h],++_,++h;}else {h=_-n.gt,d=n.bt,d>o&&(d=o);for(let e=0;e<d;++e)f[_]=f[h],++_,++h;}d>o&&(d=o),o-=d,n.bt-=d,0==n.bt&&(n.ot=16200);break;case 16205:if(0==o)return m();f[_++]=n.bt,o--,n.ot=16200;break;case 16206:if(n.F){if(V(32),s-=o,e.total_out+=s,n.wt+=s,4&n.F&&s){let t=f.subarray(_-s,_);e.i=n.ht=p(n.ht,t,s);}if(s=o,4&n.F&&(n.st?a:M_(a)>>>0)!=n.ht){e.msg="incorrect data check",n.ot=16209;break}E();}n.ot=16207;case 16207:if(n.F&&n.st){if(V(32),4&n.F&&a!=(4294967295&n.wt)){e.msg="incorrect length check",n.ot=16209;break}E();}n.ot=16208;case 16208:return v=1,m();case 16209:return v=-3,m();case 16210:return -4;default:return -2}}catch(e){if(e instanceof x_)return m();throw e}function m(){if(z(),n.h||s!=e.avail_out&&n.ot<16209&&(n.Nt?n.ot<16208:n.ot<16206)||4!=t){let t=s-e.avail_out;if(tr(e,e.next_out.subarray(e.next_out_index-t,e.next_out_index),t))return n.ot=16210,-4}return c-=e.avail_in,s-=e.avail_out,e.total_in+=c,e.total_out+=s,n.wt+=s,4&n.F&&s&&(e.i=n.ht=p(n.ht,e.next_out.subarray(e.next_out_index-s,e.next_out_index),s)),e.t=n.I+(n.ut?64:0)+(16191==n.ot?128:0)+(16199==n.ot||16194==n.ot?256:0),(0==c&&0==s&&0==v||4==t&&0==v)&&(v=-5),v}function p(e,t,r){return n.st?W(e,t,r):se(e,t,r)}function y(e,t){return k[0]=255&t,k[1]=t>>>8&255,W(e,k,2)>>>0}function I(e,t){return k[0]=255&t,k[1]=t>>>8&255,k[2]=t>>>16&255,k[3]=t>>>24&255,W(e,k,4)>>>0}function L(){f=e.next_out,_=e.next_out_index,o=e.avail_out,r=e.next_in,i=e.next_in_index,l=e.avail_in,a=n.p,u=n.I;}function z(){e.next_out=f,e.next_out_index=_,e.avail_out=o,e.next_in=r,e.next_in_index=i,e.avail_in=l,n.p=a,n.I=u;}function E(){a=0,u=0;}function N(){if(0==l)throw new x_;l--,a+=(255&r[i])<<u,i++,a>>>=0,u+=8;}function V(e){for(;u<e;)N();}function Q(e){return a&(1<<e)-1}function S(e){a>>>=e,u-=e;}function q(){a>>>=7&u,u-=7&u;}}function _n(e){return Ke(e)?-2:0}var X_=65536,nr=32768,Y_=class{constructor(e=16,t=X_){this.jt=[],this.Gt=e;for(let n=0;n<N.min(e,4);n++)this.jt.push(new x(t));}acquire(e=X_){for(let t=this.jt.length-1;t>=0;t--){let n=this.jt[t];if(n.length>=e)return this.jt.splice(t,1),n}return new x(e)}release(e){this.jt.length<this.Gt&&this.jt.push(e);}};function tn(e){let t=new Y_(32,X_),n=null;function r(e){try{t.release(e);}catch{}}return new U({start(){},transform(i,f){if(!n){let t=e.en(),r=e.tn(t);if(0!=r&&0!=r)throw new z("init failed: "+r);n={o:t};}let _=n.o,l=0;for(;l<i.length;){let n=N.min(i.length-l,nr),o=i.subarray(l,l+n);for(_.next_in=o,_.next_in_index=0,_.avail_in=o.length;_.avail_in>0;){let n=t.acquire(),i=false;try{_.next_out=n,_.next_out_index=0,_.avail_out=n.length;let r=e.nn(_,0),l=n.length-_.avail_out;if(l>0){let e=!1,r={rn:n.subarray(0,l),release:()=>{e||(e=!0,t.release(n));}};i=!0,f.enqueue(r);}if(0!=r&&1!=r)throw new z("process error: "+r)}finally{i||r(n);}}l+=n;}},flush(i){if(!n)return;let f=n.o;for(;;){let n=t.acquire(),_=false;try{f.next_out=n,f.next_out_index=0,f.avail_out=n.length;let r=e.nn(f,4),l=n.length-f.avail_out;if(l>0){let e=!1,r={rn:n.subarray(0,l),release:()=>{e||(e=!0,t.release(n));}};_=!0,i.enqueue(r);}if(1==r)break;if(0!=r)throw new z("finalization error: "+r)}finally{_||r(n);}}let _=e.fn(f);if(0!=_&&0!=_)throw new z("end failed: "+_)}})}function nn(){return new U({start(){},transform(e,t){try{t.enqueue(e.rn.slice(0));}finally{e.release();}},flush(){}})}function rr(e="deflate",t){let n="gzip"==e?31:"deflate-raw"==e?-15:15,r=t&&"number"==typeof t.level?t.level:-1;return tn({en:()=>yt(),tn:e=>It(e,r,8,n,8,0),nn:kt,fn:F_})}function ar(e="deflate"){let t="gzip"==e?31:"deflate-raw"==e?-15:"deflate64-raw"==e?-16:15;return tn({en:()=>Qt(),tn:e=>$t(e,t),nn:en,fn:_n})}var p_=class{constructor(e="deflate",t){let n=rr(e,t);this.writable=n.writable,this.readable=n.readable.pipeThrough(nn());}},S_=class{constructor(e="deflate"){let t=ar(e);this.writable=t.writable,this.readable=t.readable.pipeThrough(nn());}};
|
|
6996
7056
|
|
|
6997
7057
|
/*
|
|
6998
7058
|
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
@@ -7026,8 +7086,8 @@
|
|
|
7026
7086
|
configure({
|
|
7027
7087
|
workerURI: "./core/web-worker-native.js",
|
|
7028
7088
|
wasmURI: null,
|
|
7029
|
-
CompressionStreamZlib:
|
|
7030
|
-
DecompressionStreamZlib:
|
|
7089
|
+
CompressionStreamZlib: p_,
|
|
7090
|
+
DecompressionStreamZlib: S_
|
|
7031
7091
|
});
|
|
7032
7092
|
|
|
7033
7093
|
/*
|
|
@@ -7083,8 +7143,6 @@
|
|
|
7083
7143
|
uncompressedSize: params.uncompressedSize || 0,
|
|
7084
7144
|
passThrough: params.passThrough
|
|
7085
7145
|
});
|
|
7086
|
-
// detached entries (e.g. clones) are not registered until they are attached,
|
|
7087
|
-
// otherwise they could never be garbage collected
|
|
7088
7146
|
if (parent || !fs.root) {
|
|
7089
7147
|
fs.entries[zipEntry.id] = zipEntry;
|
|
7090
7148
|
}
|
|
@@ -7153,7 +7211,7 @@
|
|
|
7153
7211
|
if (!writer || (writer.constructor == zipEntry.Writer && zipEntry.data)) {
|
|
7154
7212
|
return zipEntry.data;
|
|
7155
7213
|
} else {
|
|
7156
|
-
const reader = zipEntry.reader =
|
|
7214
|
+
const reader = zipEntry.reader = createReader(zipEntry.Reader, zipEntry.data, options);
|
|
7157
7215
|
const uncompressedSize = zipEntry.data ? zipEntry.data.uncompressedSize : reader.size;
|
|
7158
7216
|
await Promise.all([initStream(reader), initStream(writer, uncompressedSize)]);
|
|
7159
7217
|
const { readable } = reader;
|
|
@@ -7209,11 +7267,7 @@
|
|
|
7209
7267
|
}
|
|
7210
7268
|
|
|
7211
7269
|
async getArrayBuffer(options) {
|
|
7212
|
-
// this.data may be a string, a Uint8Array, a data URI or a Blob depending on how the entry
|
|
7213
|
-
// was created, so retrieve the bytes through getUint8Array rather than assuming a Blob; this
|
|
7214
|
-
// also applies the options (password, signal, onprogress...) like the other getData() getters
|
|
7215
7270
|
const array = await this.getUint8Array(options);
|
|
7216
|
-
// return the backing buffer directly when the array spans it, slicing the exact bytes otherwise
|
|
7217
7271
|
return array.byteOffset || array.byteLength != array.buffer.byteLength
|
|
7218
7272
|
? array.buffer.slice(array.byteOffset, array.byteOffset + array.byteLength)
|
|
7219
7273
|
: array.buffer;
|
|
@@ -7583,7 +7637,6 @@
|
|
|
7583
7637
|
node = node.getChildByName(path[index]);
|
|
7584
7638
|
}
|
|
7585
7639
|
if (!node) {
|
|
7586
|
-
// exclude detached entries, e.g. clones registered in `entries` but not attached
|
|
7587
7640
|
node = this.entries.find(entry => entry && (entry == this.root || entry.isDescendantOf(this.root)) &&
|
|
7588
7641
|
entry.getRelativeName() == fullname);
|
|
7589
7642
|
}
|
|
@@ -7755,10 +7808,13 @@
|
|
|
7755
7808
|
};
|
|
7756
7809
|
}
|
|
7757
7810
|
|
|
7811
|
+
function createReader(Reader, data, options) {
|
|
7812
|
+
return Reader.prototype ? new Reader(data, options) : Reader(data, options);
|
|
7813
|
+
}
|
|
7814
|
+
|
|
7758
7815
|
async function initReaders(entry, options) {
|
|
7759
7816
|
const fileEntries = [];
|
|
7760
7817
|
const pendingEntries = [entry];
|
|
7761
|
-
// per-export map so concurrent exports do not share (and lock) the same readers
|
|
7762
7818
|
const readers = new Map();
|
|
7763
7819
|
while (pendingEntries.length) {
|
|
7764
7820
|
const pendingEntry = pendingEntries.pop();
|
|
@@ -7771,7 +7827,7 @@
|
|
|
7771
7827
|
}
|
|
7772
7828
|
}
|
|
7773
7829
|
await Promise.all(fileEntries.map(async child => {
|
|
7774
|
-
const reader = child.reader =
|
|
7830
|
+
const reader = child.reader = createReader(child.Reader, child.data, options);
|
|
7775
7831
|
readers.set(child, reader);
|
|
7776
7832
|
try {
|
|
7777
7833
|
await initStream(reader);
|
|
@@ -7936,7 +7992,6 @@
|
|
|
7936
7992
|
return directoryHandle;
|
|
7937
7993
|
|
|
7938
7994
|
async function exportChildren(entry, parentHandle) {
|
|
7939
|
-
// Separate files have no ordering constraint, so they can be written concurrently on demand.
|
|
7940
7995
|
if (options.concurrent) {
|
|
7941
7996
|
const results = await Promise.allSettled(entry.children.map(child => exportChild(child, parentHandle)));
|
|
7942
7997
|
const failedResult = results.find(result => result.status == "rejected");
|
|
@@ -7958,8 +8013,6 @@
|
|
|
7958
8013
|
} else {
|
|
7959
8014
|
const fileHandle = await parentHandle.getFileHandle(child.name, { create: true });
|
|
7960
8015
|
const writable = await fileHandle.createWritable();
|
|
7961
|
-
// getData() streams the entry's data into `writable` and closes it (a FileSystemWritableFileStream
|
|
7962
|
-
// only commits the file on close), applying options such as password, signal and onprogress.
|
|
7963
8016
|
await child.getData({ writable }, Object.assign({}, options, {
|
|
7964
8017
|
onprogress: async progress => {
|
|
7965
8018
|
if (options.onprogress) {
|
|
@@ -8278,7 +8331,6 @@
|
|
|
8278
8331
|
"x-doom": "wad",
|
|
8279
8332
|
"x-dvi": "dvi",
|
|
8280
8333
|
"x-httpd-eruby": "rhtml",
|
|
8281
|
-
"x-font": "pcf.Z",
|
|
8282
8334
|
"x-freemind": "mm",
|
|
8283
8335
|
"x-gnumeric": "gnumeric",
|
|
8284
8336
|
"x-go-sgf": "sgf",
|
|
@@ -8965,7 +9017,7 @@
|
|
|
8965
9017
|
"x-msbinder": "obd",
|
|
8966
9018
|
"x-mscardfile": "crd",
|
|
8967
9019
|
"x-msclip": "clp",
|
|
8968
|
-
"
|
|
9020
|
+
"x-ms-installer": "msi",
|
|
8969
9021
|
"x-msmediaview": [
|
|
8970
9022
|
"mvb",
|
|
8971
9023
|
"m13",
|
|
@@ -9328,7 +9380,10 @@
|
|
|
9328
9380
|
],
|
|
9329
9381
|
"x-tga": "tga",
|
|
9330
9382
|
"cis-cod": "cod",
|
|
9331
|
-
"avif":
|
|
9383
|
+
"avif": [
|
|
9384
|
+
"avif",
|
|
9385
|
+
"avifs"
|
|
9386
|
+
],
|
|
9332
9387
|
"heic": [
|
|
9333
9388
|
"heif",
|
|
9334
9389
|
"heic"
|
|
@@ -9547,7 +9602,6 @@
|
|
|
9547
9602
|
"vnd.wap.sl": "sl"
|
|
9548
9603
|
},
|
|
9549
9604
|
"video": {
|
|
9550
|
-
"avif": "avif",
|
|
9551
9605
|
"3gpp": "3gp",
|
|
9552
9606
|
"annodex": "axv",
|
|
9553
9607
|
"dl": "dl",
|
|
@@ -9666,25 +9720,29 @@
|
|
|
9666
9720
|
}
|
|
9667
9721
|
};
|
|
9668
9722
|
|
|
9669
|
-
|
|
9670
|
-
|
|
9671
|
-
|
|
9672
|
-
|
|
9673
|
-
|
|
9674
|
-
|
|
9675
|
-
|
|
9676
|
-
|
|
9677
|
-
|
|
9678
|
-
|
|
9723
|
+
let mimeTypes;
|
|
9724
|
+
|
|
9725
|
+
function getMimeType(filename) {
|
|
9726
|
+
return filename && getMimeTypes()[filename.split(".").pop().toLowerCase()] || getMimeType$1();
|
|
9727
|
+
}
|
|
9728
|
+
|
|
9729
|
+
function getMimeTypes() {
|
|
9730
|
+
if (!mimeTypes) {
|
|
9731
|
+
mimeTypes = {};
|
|
9732
|
+
for (const type of Object.keys(table)) {
|
|
9733
|
+
for (const subtype of Object.keys(table[type])) {
|
|
9734
|
+
const value = table[type][subtype];
|
|
9735
|
+
if (typeof value == "string") {
|
|
9736
|
+
mimeTypes[value] = type + "/" + subtype;
|
|
9737
|
+
} else {
|
|
9738
|
+
for (let indexMimeType = 0; indexMimeType < value.length; indexMimeType++) {
|
|
9739
|
+
mimeTypes[value[indexMimeType]] = type + "/" + subtype;
|
|
9740
|
+
}
|
|
9679
9741
|
}
|
|
9680
9742
|
}
|
|
9681
9743
|
}
|
|
9682
9744
|
}
|
|
9683
9745
|
return mimeTypes;
|
|
9684
|
-
})();
|
|
9685
|
-
|
|
9686
|
-
function getMimeType(filename) {
|
|
9687
|
-
return filename && mimeTypes[filename.split(".").pop().toLowerCase()] || getMimeType$1();
|
|
9688
9746
|
}
|
|
9689
9747
|
|
|
9690
9748
|
/*
|
|
@@ -9716,7 +9774,7 @@
|
|
|
9716
9774
|
*/
|
|
9717
9775
|
|
|
9718
9776
|
|
|
9719
|
-
|
|
9777
|
+
i(configure);
|
|
9720
9778
|
|
|
9721
9779
|
exports.BlobReader = BlobReader;
|
|
9722
9780
|
exports.BlobWriter = BlobWriter;
|
|
@@ -9742,6 +9800,7 @@
|
|
|
9742
9800
|
exports.ERR_INVALID_SIGNATURE = ERR_INVALID_SIGNATURE;
|
|
9743
9801
|
exports.ERR_INVALID_UNCOMPRESSED_SIZE = ERR_INVALID_UNCOMPRESSED_SIZE;
|
|
9744
9802
|
exports.ERR_INVALID_VERSION = ERR_INVALID_VERSION;
|
|
9803
|
+
exports.ERR_ITERATOR_COMPLETED_TOO_SOON = ERR_ITERATOR_COMPLETED_TOO_SOON;
|
|
9745
9804
|
exports.ERR_LOCAL_FILE_HEADER_NOT_FOUND = ERR_LOCAL_FILE_HEADER_NOT_FOUND;
|
|
9746
9805
|
exports.ERR_OVERLAPPING_ENTRY = ERR_OVERLAPPING_ENTRY;
|
|
9747
9806
|
exports.ERR_SPLIT_ZIP_FILE = ERR_SPLIT_ZIP_FILE;
|
|
@@ -9750,6 +9809,7 @@
|
|
|
9750
9809
|
exports.ERR_UNSUPPORTED_COMPRESSION = ERR_UNSUPPORTED_COMPRESSION$1;
|
|
9751
9810
|
exports.ERR_UNSUPPORTED_ENCRYPTION = ERR_UNSUPPORTED_ENCRYPTION;
|
|
9752
9811
|
exports.ERR_UNSUPPORTED_FORMAT = ERR_UNSUPPORTED_FORMAT;
|
|
9812
|
+
exports.ERR_WRITER_NOT_INITIALIZED = ERR_WRITER_NOT_INITIALIZED;
|
|
9753
9813
|
exports.ERR_ZIP_NOT_EMPTY = ERR_ZIP_NOT_EMPTY;
|
|
9754
9814
|
exports.HttpRangeReader = HttpRangeReader;
|
|
9755
9815
|
exports.HttpReader = HttpReader;
|
|
@@ -9766,7 +9826,9 @@
|
|
|
9766
9826
|
exports.ZipWriter = ZipWriter;
|
|
9767
9827
|
exports.ZipWriterStream = ZipWriterStream;
|
|
9768
9828
|
exports.configure = configure;
|
|
9829
|
+
exports.createBlobTempStream = createBlobTempStream;
|
|
9769
9830
|
exports.createOPFSTempStream = createOPFSTempStream;
|
|
9831
|
+
exports.createSyncAccessHandleTempStream = createSyncAccessHandleTempStream;
|
|
9770
9832
|
exports.fs = fs;
|
|
9771
9833
|
exports.getMimeType = getMimeType;
|
|
9772
9834
|
exports.terminateWorkers = terminateWorkers;
|