tasmota-webserial-esptool 7.2.4 → 7.2.5

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/README.md CHANGED
@@ -1,21 +1,40 @@
1
- # WebSerial ESPTool
2
1
 
3
- JavaScript package to install and make backups of firmwares on ESP devices via the browser using WebSerial.
2
+ # 🚀 WebSerial ESPTool Flash. Backup. Enjoy.
4
3
 
5
- WebSerial ESPTool is **not** based on esptool.js
4
+ **The next-generation solution for ESP firmware – right in your browser!**
6
5
 
6
+ WebSerial ESPTool brings you hassle-free firmware flashing and backup for your ESP devices, directly from your browser. No drivers, no command line, no headaches. Just plug in your ESP, open your browser, and experience seamless, lightning-fast firmware management.
7
7
 
8
- ## Local development
8
+ ---
9
9
 
10
- - Clone this repository.
11
- - Install dependencies with `npm install`
12
- - Run `script/develop`
13
- - Open http://localhost:5004/
10
+ **Why choose WebSerial ESPTool?**
14
11
 
15
- ## Origin
12
+ - **Plug & Play:** Install and back up firmware straight from your browser – no software installation required!
13
+ - **Cutting-Edge Compatibility:** Supports the latest ESP MCUs and chip variants (including P4 revisions).
14
+ - **Blazing Fast & Reliable:** Optimized flashing and reading for maximum performance.
15
+ - **Truly Independent:** Not a clone of esptool.js – 100% original, innovative codebase!
16
16
 
17
- This project was originally written by [Melissa LeBlanc-Williams](https://github.com/makermelissa). [Nabu Casa](https://www.nabucasa.com) ported the code over to TypeScript and in March 2022 took over maintenance from Adafruit. In July 2022, the Nabucasa stopped maintaining the project in favor of an official, but very early release of Espressif's [esptool-js](https://github.com/espressif/esptool-js/). Due to the instability of the tool, Adafruit updated their fork with Nabucasa's changes in November 2022 and took over maintenance once again. In December 2024, the tool was once again updated to use Espressif's esptool-js as the backend.
18
- Since Adafruit is slow in adding new MCUs (support for C2, C6 and H2 is from this fork) and uses now esptool.js which is still buggy, i decided to maintain my own version and do not provide PRs upstream anymore.
19
- In 12/2025 support for new MCUs and chip variant support for the different P4 revisions and flash read was added.
17
+ > **Did you know?**
18
+ > - The [ESP32 Swiss Army Knife](https://github.com/Jason2866/esp32tool) is based on this project and available [online](https://jason2866.github.io/esp32tool/).
19
+ > - [ESPConnect](https://github.com/thelastoutpostworkshop/ESPConnect) also uses WebSerial ESPTool under the hood.
20
20
 
21
- Copyright: Adafruit, Nabu Casa and Johann Obermeier
21
+ ---
22
+
23
+ ## 🛠️ Quick Start for Developers
24
+
25
+ 1. Clone this repository
26
+ 2. Install dependencies: `npm install`
27
+ 3. Start the dev environment: `script/develop`
28
+ 4. Open [http://localhost:5004/](http://localhost:5004/) in your browser
29
+
30
+ ---
31
+
32
+ ## 🏆 The Story
33
+
34
+ Originally created by [Melissa LeBlanc-Williams](https://github.com/makermelissa), further developed by [Nabu Casa](https://www.nabucasa.com) and Adafruit, and now with new features.
35
+
36
+ **Latest update:** December 2025 – now with support for new MCUs, chip variants (P4), and ultra-fast flash reading!
37
+
38
+ ---
39
+
40
+ © Adafruit, Nabu Casa & Johann Obermeier
package/css/style.css CHANGED
@@ -275,7 +275,7 @@ div.clear {
275
275
  .onoffswitch {
276
276
  display: inline-block;
277
277
  position: relative;
278
- width: 50px;
278
+ width: 70px;
279
279
  margin-right: 5px;
280
280
  -webkit-user-select: none;
281
281
  -moz-user-select: none;
@@ -189,13 +189,13 @@ export declare class ESPLoader extends EventTarget {
189
189
  *
190
190
  * @param bufferingTime - Time in milliseconds to wait for the buffer to fill
191
191
  */
192
- private drainInputBuffer;
192
+ drainInputBuffer(bufferingTime?: number): Promise<void>;
193
193
  /**
194
194
  * @name flushSerialBuffers
195
195
  * Flush any pending data in the TX and RX serial port buffers
196
196
  * This clears both the application RX buffer and waits for hardware buffers to drain
197
197
  */
198
- private flushSerialBuffers;
198
+ flushSerialBuffers(): Promise<void>;
199
199
  /**
200
200
  * @name readFlash
201
201
  * Read flash memory from the chip (only works with stub loader)
@@ -107,6 +107,9 @@ export class ESPLoader extends EventTarget {
107
107
  // Don't await this promise so it doesn't block rest of method.
108
108
  this.readLoop();
109
109
  }
110
+ // Drain input buffer first for CP210x compatibility on Windows
111
+ // This helps clear any stale data before sync
112
+ await this.drainInputBuffer(200);
110
113
  // Clear buffer again after starting read loop
111
114
  await this.flushSerialBuffers();
112
115
  await this.sync();
@@ -156,6 +159,9 @@ export class ESPLoader extends EventTarget {
156
159
  catch (error) {
157
160
  // GET_SECURITY_INFO not supported, fall back to magic value detection
158
161
  this.logger.debug(`GET_SECURITY_INFO failed, using magic value detection: ${error}`);
162
+ // Drain input buffer for CP210x compatibility on Windows
163
+ // This ensures all error responses are cleared before continuing
164
+ await this.drainInputBuffer(200);
159
165
  // Clear input buffer and re-sync to recover from failed command
160
166
  this._inputBuffer.length = 0;
161
167
  await sleep(SYNC_TIMEOUT);
@@ -1328,9 +1334,10 @@ export class ESPLoader extends EventTarget {
1328
1334
  const chunkSize = Math.min(CHUNK_SIZE, remainingSize);
1329
1335
  let chunkSuccess = false;
1330
1336
  let retryCount = 0;
1331
- const MAX_RETRIES = 3;
1337
+ const MAX_RETRIES = 5;
1332
1338
  // Retry loop for this chunk
1333
1339
  while (!chunkSuccess && retryCount <= MAX_RETRIES) {
1340
+ let resp = new Uint8Array(0);
1334
1341
  try {
1335
1342
  this.logger.debug(`Reading chunk at 0x${currentAddr.toString(16)}, size: 0x${chunkSize.toString(16)}`);
1336
1343
  // Send read flash command for this chunk
@@ -1339,7 +1346,6 @@ export class ESPLoader extends EventTarget {
1339
1346
  if (res != 0) {
1340
1347
  throw new Error("Failed to read memory: " + res);
1341
1348
  }
1342
- let resp = new Uint8Array(0);
1343
1349
  while (resp.length < chunkSize) {
1344
1350
  // Read a SLIP packet
1345
1351
  let packet;
@@ -1349,6 +1355,20 @@ export class ESPLoader extends EventTarget {
1349
1355
  catch (err) {
1350
1356
  if (err instanceof SlipReadError) {
1351
1357
  this.logger.debug(`SLIP read error at ${resp.length} bytes: ${err.message}`);
1358
+ // Send final ACK for any data we did receive before the error
1359
+ if (resp.length > 0) {
1360
+ try {
1361
+ const ackData = pack("<I", resp.length);
1362
+ const slipEncodedAck = slipEncode(ackData);
1363
+ await this.writeToStream(slipEncodedAck);
1364
+ }
1365
+ catch (ackErr) {
1366
+ this.logger.debug(`ACK send error: ${ackErr}`);
1367
+ }
1368
+ }
1369
+ // Drain input buffer for CP210x compatibility on Windows
1370
+ // This clears any stale data that may be causing the error
1371
+ await this.drainInputBuffer(300);
1352
1372
  // If we've read all the data we need, break
1353
1373
  if (resp.length >= chunkSize) {
1354
1374
  break;
@@ -1378,17 +1398,20 @@ export class ESPLoader extends EventTarget {
1378
1398
  }
1379
1399
  catch (err) {
1380
1400
  retryCount++;
1381
- // Check if it's a timeout error
1382
- if (err instanceof SlipReadError &&
1383
- err.message.includes("Timed out")) {
1401
+ // Check if it's a timeout error or SLIP error
1402
+ if (err instanceof SlipReadError) {
1384
1403
  if (retryCount <= MAX_RETRIES) {
1385
- this.logger.log(`⚠️ Timeout error at 0x${currentAddr.toString(16)}. Reconnecting and retrying (attempt ${retryCount}/${MAX_RETRIES})...`);
1404
+ this.logger.log(`⚠️ ${err.message} at 0x${currentAddr.toString(16)}. Draining buffer and retrying (attempt ${retryCount}/${MAX_RETRIES})...`);
1386
1405
  try {
1387
- await this.reconnect();
1388
- // Continue to retry the same chunk
1406
+ await this.drainInputBuffer(300);
1407
+ // Clear application buffer
1408
+ await this.flushSerialBuffers();
1409
+ // Wait before retry to let hardware settle
1410
+ await sleep(SYNC_TIMEOUT);
1411
+ // Continue to retry the same chunk (will send new read command)
1389
1412
  }
1390
- catch (reconnectErr) {
1391
- throw new Error(`Reconnect failed: ${reconnectErr}`);
1413
+ catch (drainErr) {
1414
+ this.logger.debug(`Buffer drain error: ${drainErr}`);
1392
1415
  }
1393
1416
  }
1394
1417
  else {
@@ -1396,7 +1419,7 @@ export class ESPLoader extends EventTarget {
1396
1419
  }
1397
1420
  }
1398
1421
  else {
1399
- // Non-timeout error, don't retry
1422
+ // Non-SLIP error, don't retry
1400
1423
  throw err;
1401
1424
  }
1402
1425
  }
package/dist/web/index.js CHANGED
@@ -1 +1 @@
1
- const t=t=>{let e=[192];for(const a of t)219==a?e=e.concat([219,221]):192==a?e=e.concat([219,220]):e.push(a);return e.push(192),e},e=t=>{const e=[];for(let a=0;a<t.length;a++){const s=t.charCodeAt(a);s<=255&&e.push(s)}return e},a=t=>"["+t.map(t=>s(t)).join(", ")+"]",s=(t,e=2)=>{const a=t.toString(16).toUpperCase();return a.startsWith("-")?"-0x"+a.substring(1).padStart(e,"0"):"0x"+a.padStart(e,"0")},i=t=>new Promise(e=>setTimeout(e,t)),r={18:"256KB",19:"512KB",20:"1MB",21:"2MB",22:"4MB",23:"8MB",24:"16MB",25:"32MB",26:"64MB",27:"128MB",28:"256MB",32:"64MB",33:"128MB",34:"256MB",50:"256KB",51:"512KB",52:"1MB",53:"2MB",54:"4MB",55:"8MB",56:"16MB",57:"32MB",58:"64MB"},n=115200,h=1343410176,o=e(" UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"),l=33382,d=50,u=12882,f=12883,c=12994,_=12995,g=12997,p=12998,m=207969,w=12914,y=12916,b=12917,v=12928,S=12849,B={5:{name:"ESP32-C3",family:_},9:{name:"ESP32-S3",family:f},12:{name:"ESP32-C2",family:c},13:{name:"ESP32-C6",family:p},16:{name:"ESP32-H2",family:w},18:{name:"ESP32-P4",family:v},20:{name:"ESP32-C61",family:m},23:{name:"ESP32-C5",family:g},25:{name:"ESP32-H21",family:b},28:{name:"ESP32-H4",family:y},32:{name:"ESP32-S31",family:S}},R={4293968129:{name:"ESP8266",family:l},15736195:{name:"ESP32",family:d},1990:{name:"ESP32-S2",family:u}},k=3e3,x=15e4,z=100,F=(t,e)=>{const a=Math.floor(t*(e/486));return a<k?k:a},U=t=>{switch(t){case d:return{regBase:1072963584,baseFuse:1073061888,macFuse:1073061888,usrOffs:28,usr1Offs:32,usr2Offs:36,mosiDlenOffs:40,misoDlenOffs:44,w0Offs:128,uartDateReg:1610612856,flashOffs:4096};case u:return{regBase:1061167104,baseFuse:1061265408,macFuse:1061265476,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612856,flashOffs:4096};case f:return{regBase:1610620928,usrOffs:24,baseFuse:1610641408,macFuse:1610641476,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612864,flashOffs:0};case l:return{regBase:1610613248,usrOffs:28,baseFuse:1072693328,macFuse:1072693328,usr1Offs:32,usr2Offs:36,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:64,uartDateReg:1610612856,flashOffs:0};case c:case _:return{regBase:1610620928,baseFuse:1610647552,macFuse:1610647620,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case g:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:8192};case p:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case m:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case w:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case y:return{regBase:1611239424,baseFuse:1611339776,macFuse:1611339844,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610686588,flashOffs:8192};case b:return{regBase:1610625024,baseFuse:1611350016,macFuse:1611350084,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case v:return{regBase:1342754816,baseFuse:h,macFuse:1343410244,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1343004812,flashOffs:8192};case S:return{regBase:542113792,baseFuse:544296960,macFuse:544297028,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:540582028,flashOffs:8192};default:return{regBase:-1,baseFuse:-1,macFuse:-1,usrOffs:-1,usr1Offs:-1,usr2Offs:-1,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:-1,uartDateReg:-1,flashOffs:-1}}};class I extends Error{constructor(t){super(t),this.name="SlipReadError"}}const O=async(t,a)=>{let s;return t==y||t==b||t==S?null:(t==d?s=await import("./esp32-CijhsJH1.js"):t==u?s=await import("./esp32s2-IiDBtXxo.js"):t==f?s=await import("./esp32s3-6yv5yxum.js"):t==l?s=await import("./esp8266-CUwxJpGa.js"):t==c?s=await import("./esp32c2-C17SM4gO.js"):t==_?s=await import("./esp32c3-DxRGijbg.js"):t==g?s=await import("./esp32c5-3mDOIGa4.js"):t==p?s=await import("./esp32c6-h6U0SQTm.js"):t==m?s=await import("./esp32c61-BKtexhPZ.js"):t==w?s=await import("./esp32h2-RtuWSEmP.js"):t==v&&(s=null!=a&&a>=300?await import("./esp32p4r3-CpHBYEwI.js"):await import("./esp32p4-5nkIjxqJ.js")),{...s,text:e(atob(s.text)),data:e(atob(s.data))})};function D(t){let e=t.length;for(;--e>=0;)t[e]=0}const E=256,A=286,T=30,C=15,$=new Uint8Array([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]),P=new Uint8Array([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]),L=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),N=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),M=new Array(576);D(M);const Z=new Array(60);D(Z);const H=new Array(512);D(H);const V=new Array(256);D(V);const j=new Array(29);D(j);const W=new Array(T);function K(t,e,a,s,i){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=s,this.max_length=i,this.has_stree=t&&t.length}let Y,G,q;function X(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}D(W);const J=t=>t<256?H[t]:H[256+(t>>>7)],Q=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},tt=(t,e,a)=>{t.bi_valid>16-a?(t.bi_buf|=e<<t.bi_valid&65535,Q(t,t.bi_buf),t.bi_buf=e>>16-t.bi_valid,t.bi_valid+=a-16):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=a)},et=(t,e,a)=>{tt(t,a[2*e],a[2*e+1])},at=(t,e)=>{let a=0;do{a|=1&t,t>>>=1,a<<=1}while(--e>0);return a>>>1},st=(t,e,a)=>{const s=new Array(16);let i,r,n=0;for(i=1;i<=C;i++)n=n+a[i-1]<<1,s[i]=n;for(r=0;r<=e;r++){let e=t[2*r+1];0!==e&&(t[2*r]=at(s[e]++,e))}},it=t=>{let e;for(e=0;e<A;e++)t.dyn_ltree[2*e]=0;for(e=0;e<T;e++)t.dyn_dtree[2*e]=0;for(e=0;e<19;e++)t.bl_tree[2*e]=0;t.dyn_ltree[512]=1,t.opt_len=t.static_len=0,t.sym_next=t.matches=0},rt=t=>{t.bi_valid>8?Q(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},nt=(t,e,a,s)=>{const i=2*e,r=2*a;return t[i]<t[r]||t[i]===t[r]&&s[e]<=s[a]},ht=(t,e,a)=>{const s=t.heap[a];let i=a<<1;for(;i<=t.heap_len&&(i<t.heap_len&&nt(e,t.heap[i+1],t.heap[i],t.depth)&&i++,!nt(e,s,t.heap[i],t.depth));)t.heap[a]=t.heap[i],a=i,i<<=1;t.heap[a]=s},ot=(t,e,a)=>{let s,i,r,n,h=0;if(0!==t.sym_next)do{s=255&t.pending_buf[t.sym_buf+h++],s+=(255&t.pending_buf[t.sym_buf+h++])<<8,i=t.pending_buf[t.sym_buf+h++],0===s?et(t,i,e):(r=V[i],et(t,r+E+1,e),n=$[r],0!==n&&(i-=j[r],tt(t,i,n)),s--,r=J(s),et(t,r,a),n=P[r],0!==n&&(s-=W[r],tt(t,s,n)))}while(h<t.sym_next);et(t,256,e)},lt=(t,e)=>{const a=e.dyn_tree,s=e.stat_desc.static_tree,i=e.stat_desc.has_stree,r=e.stat_desc.elems;let n,h,o,l=-1;for(t.heap_len=0,t.heap_max=573,n=0;n<r;n++)0!==a[2*n]?(t.heap[++t.heap_len]=l=n,t.depth[n]=0):a[2*n+1]=0;for(;t.heap_len<2;)o=t.heap[++t.heap_len]=l<2?++l:0,a[2*o]=1,t.depth[o]=0,t.opt_len--,i&&(t.static_len-=s[2*o+1]);for(e.max_code=l,n=t.heap_len>>1;n>=1;n--)ht(t,a,n);o=r;do{n=t.heap[1],t.heap[1]=t.heap[t.heap_len--],ht(t,a,1),h=t.heap[1],t.heap[--t.heap_max]=n,t.heap[--t.heap_max]=h,a[2*o]=a[2*n]+a[2*h],t.depth[o]=(t.depth[n]>=t.depth[h]?t.depth[n]:t.depth[h])+1,a[2*n+1]=a[2*h+1]=o,t.heap[1]=o++,ht(t,a,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const a=e.dyn_tree,s=e.max_code,i=e.stat_desc.static_tree,r=e.stat_desc.has_stree,n=e.stat_desc.extra_bits,h=e.stat_desc.extra_base,o=e.stat_desc.max_length;let l,d,u,f,c,_,g=0;for(f=0;f<=C;f++)t.bl_count[f]=0;for(a[2*t.heap[t.heap_max]+1]=0,l=t.heap_max+1;l<573;l++)d=t.heap[l],f=a[2*a[2*d+1]+1]+1,f>o&&(f=o,g++),a[2*d+1]=f,d>s||(t.bl_count[f]++,c=0,d>=h&&(c=n[d-h]),_=a[2*d],t.opt_len+=_*(f+c),r&&(t.static_len+=_*(i[2*d+1]+c)));if(0!==g){do{for(f=o-1;0===t.bl_count[f];)f--;t.bl_count[f]--,t.bl_count[f+1]+=2,t.bl_count[o]--,g-=2}while(g>0);for(f=o;0!==f;f--)for(d=t.bl_count[f];0!==d;)u=t.heap[--l],u>s||(a[2*u+1]!==f&&(t.opt_len+=(f-a[2*u+1])*a[2*u],a[2*u+1]=f),d--)}})(t,e),st(a,l,t.bl_count)},dt=(t,e,a)=>{let s,i,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),e[2*(a+1)+1]=65535,s=0;s<=a;s++)i=n,n=e[2*(s+1)+1],++h<o&&i===n||(h<l?t.bl_tree[2*i]+=h:0!==i?(i!==r&&t.bl_tree[2*i]++,t.bl_tree[32]++):h<=10?t.bl_tree[34]++:t.bl_tree[36]++,h=0,r=i,0===n?(o=138,l=3):i===n?(o=6,l=3):(o=7,l=4))},ut=(t,e,a)=>{let s,i,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),s=0;s<=a;s++)if(i=n,n=e[2*(s+1)+1],!(++h<o&&i===n)){if(h<l)do{et(t,i,t.bl_tree)}while(0!==--h);else 0!==i?(i!==r&&(et(t,i,t.bl_tree),h--),et(t,16,t.bl_tree),tt(t,h-3,2)):h<=10?(et(t,17,t.bl_tree),tt(t,h-3,3)):(et(t,18,t.bl_tree),tt(t,h-11,7));h=0,r=i,0===n?(o=138,l=3):i===n?(o=6,l=3):(o=7,l=4)}};let ft=!1;const ct=(t,e,a,s)=>{tt(t,0+(s?1:0),3),rt(t),Q(t,a),Q(t,~a),a&&t.pending_buf.set(t.window.subarray(e,e+a),t.pending),t.pending+=a};var _t=(t,e,a,s)=>{let i,r,n=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,a=4093624447;for(e=0;e<=31;e++,a>>>=1)if(1&a&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e<E;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0})(t)),lt(t,t.l_desc),lt(t,t.d_desc),n=(t=>{let e;for(dt(t,t.dyn_ltree,t.l_desc.max_code),dt(t,t.dyn_dtree,t.d_desc.max_code),lt(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*N[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),i=t.opt_len+3+7>>>3,r=t.static_len+3+7>>>3,r<=i&&(i=r)):i=r=a+5,a+4<=i&&-1!==e?ct(t,e,a,s):4===t.strategy||r===i?(tt(t,2+(s?1:0),3),ot(t,M,Z)):(tt(t,4+(s?1:0),3),((t,e,a,s)=>{let i;for(tt(t,e-257,5),tt(t,a-1,5),tt(t,s-4,4),i=0;i<s;i++)tt(t,t.bl_tree[2*N[i]+1],3);ut(t,t.dyn_ltree,e-1),ut(t,t.dyn_dtree,a-1)})(t,t.l_desc.max_code+1,t.d_desc.max_code+1,n+1),ot(t,t.dyn_ltree,t.dyn_dtree)),it(t),s&&rt(t)},gt={_tr_init:t=>{ft||((()=>{let t,e,a,s,i;const r=new Array(16);for(a=0,s=0;s<28;s++)for(j[s]=a,t=0;t<1<<$[s];t++)V[a++]=s;for(V[a-1]=s,i=0,s=0;s<16;s++)for(W[s]=i,t=0;t<1<<P[s];t++)H[i++]=s;for(i>>=7;s<T;s++)for(W[s]=i<<7,t=0;t<1<<P[s]-7;t++)H[256+i++]=s;for(e=0;e<=C;e++)r[e]=0;for(t=0;t<=143;)M[2*t+1]=8,t++,r[8]++;for(;t<=255;)M[2*t+1]=9,t++,r[9]++;for(;t<=279;)M[2*t+1]=7,t++,r[7]++;for(;t<=287;)M[2*t+1]=8,t++,r[8]++;for(st(M,287,r),t=0;t<T;t++)Z[2*t+1]=5,Z[2*t]=at(t,5);Y=new K(M,$,257,A,C),G=new K(Z,P,0,T,C),q=new K(new Array(0),L,0,19,7)})(),ft=!0),t.l_desc=new X(t.dyn_ltree,Y),t.d_desc=new X(t.dyn_dtree,G),t.bl_desc=new X(t.bl_tree,q),t.bi_buf=0,t.bi_valid=0,it(t)},_tr_stored_block:ct,_tr_flush_block:_t,_tr_tally:(t,e,a)=>(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=a,0===e?t.dyn_ltree[2*a]++:(t.matches++,e--,t.dyn_ltree[2*(V[a]+E+1)]++,t.dyn_dtree[2*J(e)]++),t.sym_next===t.sym_end),_tr_align:t=>{tt(t,2,3),et(t,256,M),(t=>{16===t.bi_valid?(Q(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)})(t)}};var pt=(t,e,a,s)=>{let i=65535&t,r=t>>>16&65535,n=0;for(;0!==a;){n=a>2e3?2e3:a,a-=n;do{i=i+e[s++]|0,r=r+i|0}while(--n);i%=65521,r%=65521}return i|r<<16};const mt=new Uint32Array((()=>{let t,e=[];for(var a=0;a<256;a++){t=a;for(var s=0;s<8;s++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e})());var wt=(t,e,a,s)=>{const i=mt,r=s+a;t^=-1;for(let a=s;a<r;a++)t=t>>>8^i[255&(t^e[a])];return-1^t},yt={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},bt={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:vt,_tr_stored_block:St,_tr_flush_block:Bt,_tr_tally:Rt,_tr_align:kt}=gt,{Z_NO_FLUSH:xt,Z_PARTIAL_FLUSH:zt,Z_FULL_FLUSH:Ft,Z_FINISH:Ut,Z_BLOCK:It,Z_OK:Ot,Z_STREAM_END:Dt,Z_STREAM_ERROR:Et,Z_DATA_ERROR:At,Z_BUF_ERROR:Tt,Z_DEFAULT_COMPRESSION:Ct,Z_FILTERED:$t,Z_HUFFMAN_ONLY:Pt,Z_RLE:Lt,Z_FIXED:Nt,Z_DEFAULT_STRATEGY:Mt,Z_UNKNOWN:Zt,Z_DEFLATED:Ht}=bt,Vt=258,jt=262,Wt=42,Kt=113,Yt=666,Gt=(t,e)=>(t.msg=yt[e],e),qt=t=>2*t-(t>4?9:0),Xt=t=>{let e=t.length;for(;--e>=0;)t[e]=0},Jt=t=>{let e,a,s,i=t.w_size;e=t.hash_size,s=e;do{a=t.head[--s],t.head[s]=a>=i?a-i:0}while(--e);e=i,s=e;do{a=t.prev[--s],t.prev[s]=a>=i?a-i:0}while(--e)};let Qt=(t,e,a)=>(e<<t.hash_shift^a)&t.hash_mask;const te=t=>{const e=t.state;let a=e.pending;a>t.avail_out&&(a=t.avail_out),0!==a&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+a),t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))},ee=(t,e)=>{Bt(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,te(t.strm)},ae=(t,e)=>{t.pending_buf[t.pending++]=e},se=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},ie=(t,e,a,s)=>{let i=t.avail_in;return i>s&&(i=s),0===i?0:(t.avail_in-=i,e.set(t.input.subarray(t.next_in,t.next_in+i),a),1===t.state.wrap?t.adler=pt(t.adler,e,i,a):2===t.state.wrap&&(t.adler=wt(t.adler,e,i,a)),t.next_in+=i,t.total_in+=i,i)},re=(t,e)=>{let a,s,i=t.max_chain_length,r=t.strstart,n=t.prev_length,h=t.nice_match;const o=t.strstart>t.w_size-jt?t.strstart-(t.w_size-jt):0,l=t.window,d=t.w_mask,u=t.prev,f=t.strstart+Vt;let c=l[r+n-1],_=l[r+n];t.prev_length>=t.good_match&&(i>>=2),h>t.lookahead&&(h=t.lookahead);do{if(a=e,l[a+n]===_&&l[a+n-1]===c&&l[a]===l[r]&&l[++a]===l[r+1]){r+=2,a++;do{}while(l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&r<f);if(s=Vt-(f-r),r=f-Vt,s>n){if(t.match_start=e,n=s,s>=h)break;c=l[r+n-1],_=l[r+n]}}}while((e=u[e&d])>o&&0!==--i);return n<=t.lookahead?n:t.lookahead},ne=t=>{const e=t.w_size;let a,s,i;do{if(s=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-jt)&&(t.window.set(t.window.subarray(e,e+e-s),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),Jt(t),s+=e),0===t.strm.avail_in)break;if(a=ie(t.strm,t.window,t.strstart+t.lookahead,s),t.lookahead+=a,t.lookahead+t.insert>=3)for(i=t.strstart-t.insert,t.ins_h=t.window[i],t.ins_h=Qt(t,t.ins_h,t.window[i+1]);t.insert&&(t.ins_h=Qt(t,t.ins_h,t.window[i+3-1]),t.prev[i&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=i,i++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<jt&&0!==t.strm.avail_in)},he=(t,e)=>{let a,s,i,r=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,n=0,h=t.strm.avail_in;do{if(a=65535,i=t.bi_valid+42>>3,t.strm.avail_out<i)break;if(i=t.strm.avail_out-i,s=t.strstart-t.block_start,a>s+t.strm.avail_in&&(a=s+t.strm.avail_in),a>i&&(a=i),a<r&&(0===a&&e!==Ut||e===xt||a!==s+t.strm.avail_in))break;n=e===Ut&&a===s+t.strm.avail_in?1:0,St(t,0,0,n),t.pending_buf[t.pending-4]=a,t.pending_buf[t.pending-3]=a>>8,t.pending_buf[t.pending-2]=~a,t.pending_buf[t.pending-1]=~a>>8,te(t.strm),s&&(s>a&&(s=a),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+s),t.strm.next_out),t.strm.next_out+=s,t.strm.avail_out-=s,t.strm.total_out+=s,t.block_start+=s,a-=s),a&&(ie(t.strm,t.strm.output,t.strm.next_out,a),t.strm.next_out+=a,t.strm.avail_out-=a,t.strm.total_out+=a)}while(0===n);return h-=t.strm.avail_in,h&&(h>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=h&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-h,t.strm.next_in),t.strstart),t.strstart+=h,t.insert+=h>t.w_size-t.insert?t.w_size-t.insert:h),t.block_start=t.strstart),t.high_water<t.strstart&&(t.high_water=t.strstart),n?4:e!==xt&&e!==Ut&&0===t.strm.avail_in&&t.strstart===t.block_start?2:(i=t.window_size-t.strstart,t.strm.avail_in>i&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,i+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),i>t.strm.avail_in&&(i=t.strm.avail_in),i&&(ie(t.strm,t.window,t.strstart,i),t.strstart+=i,t.insert+=i>t.w_size-t.insert?t.w_size-t.insert:i),t.high_water<t.strstart&&(t.high_water=t.strstart),i=t.bi_valid+42>>3,i=t.pending_buf_size-i>65535?65535:t.pending_buf_size-i,r=i>t.w_size?t.w_size:i,s=t.strstart-t.block_start,(s>=r||(s||e===Ut)&&e!==xt&&0===t.strm.avail_in&&s<=i)&&(a=s>i?i:s,n=e===Ut&&0===t.strm.avail_in&&a===s?1:0,St(t,t.block_start,a,n),t.block_start+=a,te(t.strm)),n?3:1)},oe=(t,e)=>{let a,s;for(;;){if(t.lookahead<jt){if(ne(t),t.lookahead<jt&&e===xt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==a&&t.strstart-a<=t.w_size-jt&&(t.match_length=re(t,a)),t.match_length>=3)if(s=Rt(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do{t.strstart++,t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!==--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+1]);else s=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(s&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===Ut?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2},le=(t,e)=>{let a,s,i;for(;;){if(t.lookahead<jt){if(ne(t),t.lookahead<jt&&e===xt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==a&&t.prev_length<t.max_lazy_match&&t.strstart-a<=t.w_size-jt&&(t.match_length=re(t,a),t.match_length<=5&&(t.strategy===$t||3===t.match_length&&t.strstart-t.match_start>4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){i=t.strstart+t.lookahead-3,s=Rt(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=i&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!==--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,s&&(ee(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(s=Rt(t,0,t.window[t.strstart-1]),s&&ee(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(s=Rt(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===Ut?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2};function de(t,e,a,s,i){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=s,this.func=i}const ue=[new de(0,0,0,0,he),new de(4,4,8,4,oe),new de(4,5,16,8,oe),new de(4,6,32,32,oe),new de(4,4,16,16,le),new de(8,16,32,32,le),new de(8,16,128,128,le),new de(8,32,128,256,le),new de(32,128,258,1024,le),new de(32,258,258,4096,le)];function fe(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Ht,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),Xt(this.dyn_ltree),Xt(this.dyn_dtree),Xt(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),Xt(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),Xt(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const ce=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.status!==Wt&&57!==e.status&&69!==e.status&&73!==e.status&&91!==e.status&&103!==e.status&&e.status!==Kt&&e.status!==Yt?1:0},_e=t=>{if(ce(t))return Gt(t,Et);t.total_in=t.total_out=0,t.data_type=Zt;const e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=2===e.wrap?57:e.wrap?Wt:Kt,t.adler=2===e.wrap?0:1,e.last_flush=-2,vt(e),Ot},ge=t=>{const e=_e(t);var a;return e===Ot&&((a=t.state).window_size=2*a.w_size,Xt(a.head),a.max_lazy_match=ue[a.level].max_lazy,a.good_match=ue[a.level].good_length,a.nice_match=ue[a.level].nice_length,a.max_chain_length=ue[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=2,a.match_available=0,a.ins_h=0),e},pe=(t,e,a,s,i,r)=>{if(!t)return Et;let n=1;if(e===Ct&&(e=6),s<0?(n=0,s=-s):s>15&&(n=2,s-=16),i<1||i>9||a!==Ht||s<8||s>15||e<0||e>9||r<0||r>Nt||8===s&&1!==n)return Gt(t,Et);8===s&&(s=9);const h=new fe;return t.state=h,h.strm=t,h.status=Wt,h.wrap=n,h.gzhead=null,h.w_bits=s,h.w_size=1<<h.w_bits,h.w_mask=h.w_size-1,h.hash_bits=i+7,h.hash_size=1<<h.hash_bits,h.hash_mask=h.hash_size-1,h.hash_shift=~~((h.hash_bits+3-1)/3),h.window=new Uint8Array(2*h.w_size),h.head=new Uint16Array(h.hash_size),h.prev=new Uint16Array(h.w_size),h.lit_bufsize=1<<i+6,h.pending_buf_size=4*h.lit_bufsize,h.pending_buf=new Uint8Array(h.pending_buf_size),h.sym_buf=h.lit_bufsize,h.sym_end=3*(h.lit_bufsize-1),h.level=e,h.strategy=r,h.method=a,ge(t)};var me={deflateInit:(t,e)=>pe(t,e,Ht,15,8,Mt),deflateInit2:pe,deflateReset:ge,deflateResetKeep:_e,deflateSetHeader:(t,e)=>ce(t)||2!==t.state.wrap?Et:(t.state.gzhead=e,Ot),deflate:(t,e)=>{if(ce(t)||e>It||e<0)return t?Gt(t,Et):Et;const a=t.state;if(!t.output||0!==t.avail_in&&!t.input||a.status===Yt&&e!==Ut)return Gt(t,0===t.avail_out?Tt:Et);const s=a.last_flush;if(a.last_flush=e,0!==a.pending){if(te(t),0===t.avail_out)return a.last_flush=-1,Ot}else if(0===t.avail_in&&qt(e)<=qt(s)&&e!==Ut)return Gt(t,Tt);if(a.status===Yt&&0!==t.avail_in)return Gt(t,Tt);if(a.status===Wt&&0===a.wrap&&(a.status=Kt),a.status===Wt){let e=Ht+(a.w_bits-8<<4)<<8,s=-1;if(s=a.strategy>=Pt||a.level<2?0:a.level<6?1:6===a.level?2:3,e|=s<<6,0!==a.strstart&&(e|=32),e+=31-e%31,se(a,e),0!==a.strstart&&(se(a,t.adler>>>16),se(a,65535&t.adler)),t.adler=1,a.status=Kt,te(t),0!==a.pending)return a.last_flush=-1,Ot}if(57===a.status)if(t.adler=0,ae(a,31),ae(a,139),ae(a,8),a.gzhead)ae(a,(a.gzhead.text?1:0)+(a.gzhead.hcrc?2:0)+(a.gzhead.extra?4:0)+(a.gzhead.name?8:0)+(a.gzhead.comment?16:0)),ae(a,255&a.gzhead.time),ae(a,a.gzhead.time>>8&255),ae(a,a.gzhead.time>>16&255),ae(a,a.gzhead.time>>24&255),ae(a,9===a.level?2:a.strategy>=Pt||a.level<2?4:0),ae(a,255&a.gzhead.os),a.gzhead.extra&&a.gzhead.extra.length&&(ae(a,255&a.gzhead.extra.length),ae(a,a.gzhead.extra.length>>8&255)),a.gzhead.hcrc&&(t.adler=wt(t.adler,a.pending_buf,a.pending,0)),a.gzindex=0,a.status=69;else if(ae(a,0),ae(a,0),ae(a,0),ae(a,0),ae(a,0),ae(a,9===a.level?2:a.strategy>=Pt||a.level<2?4:0),ae(a,3),a.status=Kt,te(t),0!==a.pending)return a.last_flush=-1,Ot;if(69===a.status){if(a.gzhead.extra){let e=a.pending,s=(65535&a.gzhead.extra.length)-a.gzindex;for(;a.pending+s>a.pending_buf_size;){let i=a.pending_buf_size-a.pending;if(a.pending_buf.set(a.gzhead.extra.subarray(a.gzindex,a.gzindex+i),a.pending),a.pending=a.pending_buf_size,a.gzhead.hcrc&&a.pending>e&&(t.adler=wt(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex+=i,te(t),0!==a.pending)return a.last_flush=-1,Ot;e=0,s-=i}let i=new Uint8Array(a.gzhead.extra);a.pending_buf.set(i.subarray(a.gzindex,a.gzindex+s),a.pending),a.pending+=s,a.gzhead.hcrc&&a.pending>e&&(t.adler=wt(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex=0}a.status=73}if(73===a.status){if(a.gzhead.name){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),te(t),0!==a.pending)return a.last_flush=-1,Ot;s=0}e=a.gzindex<a.gzhead.name.length?255&a.gzhead.name.charCodeAt(a.gzindex++):0,ae(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),a.gzindex=0}a.status=91}if(91===a.status){if(a.gzhead.comment){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),te(t),0!==a.pending)return a.last_flush=-1,Ot;s=0}e=a.gzindex<a.gzhead.comment.length?255&a.gzhead.comment.charCodeAt(a.gzindex++):0,ae(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s))}a.status=103}if(103===a.status){if(a.gzhead.hcrc){if(a.pending+2>a.pending_buf_size&&(te(t),0!==a.pending))return a.last_flush=-1,Ot;ae(a,255&t.adler),ae(a,t.adler>>8&255),t.adler=0}if(a.status=Kt,te(t),0!==a.pending)return a.last_flush=-1,Ot}if(0!==t.avail_in||0!==a.lookahead||e!==xt&&a.status!==Yt){let s=0===a.level?he(a,e):a.strategy===Pt?((t,e)=>{let a;for(;;){if(0===t.lookahead&&(ne(t),0===t.lookahead)){if(e===xt)return 1;break}if(t.match_length=0,a=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===Ut?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2})(a,e):a.strategy===Lt?((t,e)=>{let a,s,i,r;const n=t.window;for(;;){if(t.lookahead<=Vt){if(ne(t),t.lookahead<=Vt&&e===xt)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(i=t.strstart-1,s=n[i],s===n[++i]&&s===n[++i]&&s===n[++i])){r=t.strstart+Vt;do{}while(s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&i<r);t.match_length=Vt-(r-i),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(a=Rt(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===Ut?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2})(a,e):ue[a.level].func(a,e);if(3!==s&&4!==s||(a.status=Yt),1===s||3===s)return 0===t.avail_out&&(a.last_flush=-1),Ot;if(2===s&&(e===zt?kt(a):e!==It&&(St(a,0,0,!1),e===Ft&&(Xt(a.head),0===a.lookahead&&(a.strstart=0,a.block_start=0,a.insert=0))),te(t),0===t.avail_out))return a.last_flush=-1,Ot}return e!==Ut?Ot:a.wrap<=0?Dt:(2===a.wrap?(ae(a,255&t.adler),ae(a,t.adler>>8&255),ae(a,t.adler>>16&255),ae(a,t.adler>>24&255),ae(a,255&t.total_in),ae(a,t.total_in>>8&255),ae(a,t.total_in>>16&255),ae(a,t.total_in>>24&255)):(se(a,t.adler>>>16),se(a,65535&t.adler)),te(t),a.wrap>0&&(a.wrap=-a.wrap),0!==a.pending?Ot:Dt)},deflateEnd:t=>{if(ce(t))return Et;const e=t.state.status;return t.state=null,e===Kt?Gt(t,At):Ot},deflateSetDictionary:(t,e)=>{let a=e.length;if(ce(t))return Et;const s=t.state,i=s.wrap;if(2===i||1===i&&s.status!==Wt||s.lookahead)return Et;if(1===i&&(t.adler=pt(t.adler,e,a,0)),s.wrap=0,a>=s.w_size){0===i&&(Xt(s.head),s.strstart=0,s.block_start=0,s.insert=0);let t=new Uint8Array(s.w_size);t.set(e.subarray(a-s.w_size,a),0),e=t,a=s.w_size}const r=t.avail_in,n=t.next_in,h=t.input;for(t.avail_in=a,t.next_in=0,t.input=e,ne(s);s.lookahead>=3;){let t=s.strstart,e=s.lookahead-2;do{s.ins_h=Qt(s,s.ins_h,s.window[t+3-1]),s.prev[t&s.w_mask]=s.head[s.ins_h],s.head[s.ins_h]=t,t++}while(--e);s.strstart=t,s.lookahead=2,ne(s)}return s.strstart+=s.lookahead,s.block_start=s.strstart,s.insert=s.lookahead,s.lookahead=0,s.match_length=s.prev_length=2,s.match_available=0,t.next_in=n,t.input=h,t.avail_in=r,s.wrap=i,Ot},deflateInfo:"pako deflate (from Nodeca project)"};const we=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var ye=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const a=e.shift();if(a){if("object"!=typeof a)throw new TypeError(a+"must be non-object");for(const e in a)we(a,e)&&(t[e]=a[e])}}return t},be=t=>{let e=0;for(let a=0,s=t.length;a<s;a++)e+=t[a].length;const a=new Uint8Array(e);for(let e=0,s=0,i=t.length;e<i;e++){let i=t[e];a.set(i,s),s+=i.length}return a};let ve=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){ve=!1}const Se=new Uint8Array(256);for(let t=0;t<256;t++)Se[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;Se[254]=Se[254]=1;var Be=t=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);let e,a,s,i,r,n=t.length,h=0;for(i=0;i<n;i++)a=t.charCodeAt(i),55296==(64512&a)&&i+1<n&&(s=t.charCodeAt(i+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),i++)),h+=a<128?1:a<2048?2:a<65536?3:4;for(e=new Uint8Array(h),r=0,i=0;r<h;i++)a=t.charCodeAt(i),55296==(64512&a)&&i+1<n&&(s=t.charCodeAt(i+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),i++)),a<128?e[r++]=a:a<2048?(e[r++]=192|a>>>6,e[r++]=128|63&a):a<65536?(e[r++]=224|a>>>12,e[r++]=128|a>>>6&63,e[r++]=128|63&a):(e[r++]=240|a>>>18,e[r++]=128|a>>>12&63,e[r++]=128|a>>>6&63,e[r++]=128|63&a);return e};var Re=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const ke=Object.prototype.toString,{Z_NO_FLUSH:xe,Z_SYNC_FLUSH:ze,Z_FULL_FLUSH:Fe,Z_FINISH:Ue,Z_OK:Ie,Z_STREAM_END:Oe,Z_DEFAULT_COMPRESSION:De,Z_DEFAULT_STRATEGY:Ee,Z_DEFLATED:Ae}=bt;function Te(t){this.options=ye({level:De,method:Ae,chunkSize:16384,windowBits:15,memLevel:8,strategy:Ee},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Re,this.strm.avail_out=0;let a=me.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(a!==Ie)throw new Error(yt[a]);if(e.header&&me.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t="string"==typeof e.dictionary?Be(e.dictionary):"[object ArrayBuffer]"===ke.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,a=me.deflateSetDictionary(this.strm,t),a!==Ie)throw new Error(yt[a]);this._dict_set=!0}}Te.prototype.push=function(t,e){const a=this.strm,s=this.options.chunkSize;let i,r;if(this.ended)return!1;for(r=e===~~e?e:!0===e?Ue:xe,"string"==typeof t?a.input=Be(t):"[object ArrayBuffer]"===ke.call(t)?a.input=new Uint8Array(t):a.input=t,a.next_in=0,a.avail_in=a.input.length;;)if(0===a.avail_out&&(a.output=new Uint8Array(s),a.next_out=0,a.avail_out=s),(r===ze||r===Fe)&&a.avail_out<=6)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else{if(i=me.deflate(a,r),i===Oe)return a.next_out>0&&this.onData(a.output.subarray(0,a.next_out)),i=me.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===Ie;if(0!==a.avail_out){if(r>0&&a.next_out>0)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else if(0===a.avail_in)break}else this.onData(a.output)}return!0},Te.prototype.onData=function(t){this.chunks.push(t)},Te.prototype.onEnd=function(t){t===Ie&&(this.result=be(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var Ce={deflate:function(t,e){const a=new Te(e);if(a.push(t,!0),a.err)throw a.msg||yt[a.err];return a.result}};const{deflate:$e}=Ce;var Pe=$e;const Le={b:{u:DataView.prototype.getInt8,p:DataView.prototype.setInt8,bytes:1},B:{u:DataView.prototype.getUint8,p:DataView.prototype.setUint8,bytes:1},h:{u:DataView.prototype.getInt16,p:DataView.prototype.setInt16,bytes:2},H:{u:DataView.prototype.getUint16,p:DataView.prototype.setUint16,bytes:2},i:{u:DataView.prototype.getInt32,p:DataView.prototype.setInt32,bytes:4},I:{u:DataView.prototype.getUint32,p:DataView.prototype.setUint32,bytes:4}},Ne=(t,...e)=>{let a=0;if(t.replace(/[<>]/,"").length!=e.length)throw"Pack format to Argument count mismatch";const s=[];let i=!0;for(let s=0;s<t.length;s++)"<"==t[s]?i=!0:">"==t[s]?i=!1:(r(t[s],e[a]),a++);function r(t,e){if(!(t in Le))throw"Unhandled character '"+t+"' in pack format";const a=Le[t].bytes,r=new DataView(new ArrayBuffer(a));Le[t].p.bind(r)(0,e,i);for(let t=0;t<a;t++)s.push(r.getUint8(t))}return s},Me=(t,e)=>{let a=0;const s=[];let i=!0;for(const e of t)"<"==e?i=!0:">"==e?i=!1:r(e);function r(t){if(!(t in Le))throw"Unhandled character '"+t+"' in unpack format";const r=Le[t].bytes,n=new DataView(new ArrayBuffer(r));for(let t=0;t<r;t++)n.setUint8(t,255&e[a+t]);const h=Le[t].u.bind(n);s.push(h(0,i)),a+=r}return s};class Ze extends EventTarget{constructor(t,e,a){super(),this.port=t,this.logger=e,this._parent=a,this.chipName=null,this.chipRevision=null,this.chipVariant=null,this._efuses=new Array(4).fill(0),this._flashsize=4194304,this.debug=!1,this.IS_STUB=!1,this.connected=!0,this.flashSize=null,this._currentBaudRate=n,this._isESP32S2NativeUSB=!1,this._initializationSucceeded=!1,this.state_DTR=!1}get _inputBuffer(){return this._parent?this._parent._inputBuffer:this.__inputBuffer}get _totalBytesRead(){return this._parent?this._parent._totalBytesRead:this.__totalBytesRead||0}set _totalBytesRead(t){this._parent?this._parent._totalBytesRead=t:this.__totalBytesRead=t}detectUSBSerialChip(t,e){const a={6790:{29986:{name:"CH340",maxBaudrate:460800},29987:{name:"CH340",maxBaudrate:460800},30084:{name:"CH340",maxBaudrate:460800},21795:{name:"CH341",maxBaudrate:2e6},21971:{name:"CH343",maxBaudrate:6e6},21972:{name:"CH9102",maxBaudrate:6e6},21976:{name:"CH9101",maxBaudrate:3e6}},4292:{6e4:{name:"CP2102(n)",maxBaudrate:3e6},60016:{name:"CP2105",maxBaudrate:2e6},60017:{name:"CP2108",maxBaudrate:2e6}},1027:{24577:{name:"FT232R",maxBaudrate:3e6},24592:{name:"FT2232",maxBaudrate:3e6},24593:{name:"FT4232",maxBaudrate:3e6},24596:{name:"FT232H",maxBaudrate:12e6},24597:{name:"FT230X",maxBaudrate:3e6}},12346:{2:{name:"ESP32-S2 Native USB",maxBaudrate:2e6},4097:{name:"ESP32 Native USB",maxBaudrate:2e6},4098:{name:"ESP32 Native USB",maxBaudrate:2e6},16386:{name:"ESP32 Native USB",maxBaudrate:2e6},4096:{name:"ESP32 Native USB",maxBaudrate:2e6}}}[t];return a&&a[e]?a[e]:{name:`Unknown (VID: 0x${t.toString(16)}, PID: 0x${e.toString(16)})`}}async initialize(){if(await this.hardReset(!0),!this._parent){this.__inputBuffer=[],this.__totalBytesRead=0;const t=this.port.getInfo();if(t.usbVendorId&&t.usbProductId){const e=this.detectUSBSerialChip(t.usbVendorId,t.usbProductId);this.logger.log(`USB-Serial: ${e.name} (VID: 0x${t.usbVendorId.toString(16)}, PID: 0x${t.usbProductId.toString(16)})`),e.maxBaudrate&&(this._maxUSBSerialBaudrate=e.maxBaudrate,this.logger.log(`Max baudrate: ${e.maxBaudrate}`)),12346===t.usbVendorId&&2===t.usbProductId&&(this._isESP32S2NativeUSB=!0)}this.readLoop()}await this.flushSerialBuffers(),await this.sync(),await this.detectChip();const t=U(this.getChipFamily()),e=t.macFuse;for(let t=0;t<4;t++)this._efuses[t]=await this.readRegister(e+4*t);this.logger.log(`Chip type ${this.chipName}`),this.logger.debug(`Bootloader flash offset: 0x${t.flashOffs.toString(16)}`),this._initializationSucceeded=!0}async detectChip(){try{const t=(await this.getSecurityInfo()).chipId,e=B[t];if(e)return this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===v&&(this.chipRevision=await this.getChipRevision(),this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`),this.chipRevision>=300?this.chipVariant="rev300":this.chipVariant="rev0",this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`)),void this.logger.debug(`Detected chip via IMAGE_CHIP_ID: ${t} (${this.chipName})`);this.logger.debug(`Unknown IMAGE_CHIP_ID: ${t}, falling back to magic value detection`)}catch(t){this.logger.debug(`GET_SECURITY_INFO failed, using magic value detection: ${t}`),this._inputBuffer.length=0,await i(z);try{await this.sync()}catch(t){this.logger.debug(`Re-sync after GET_SECURITY_INFO failure: ${t}`)}}const t=await this.readRegister(1073745920),e=R[t>>>0];if(void 0===e)throw new Error(`Unknown Chip: Hex: ${s(t>>>0,8).toLowerCase()} Number: ${t}`);this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===v&&(this.chipRevision=await this.getChipRevision(),this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`),this.chipRevision>=300?this.chipVariant="rev300":this.chipVariant="rev0",this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`)),this.logger.debug(`Detected chip via magic value: ${s(t>>>0,8)} (${this.chipName})`)}async getChipRevision(){if(this.chipFamily!==v)return 0;const t=await this.readRegister(1343410252);return 100*((t>>23&1)<<2|t>>4&3)+(15&t)}async getSecurityInfo(){const[,t]=await this.checkCommand(20,[],0);if(0===t.length)throw new Error("GET_SECURITY_INFO not supported or returned empty response");if(t.length<12)throw new Error(`Invalid security info response length: ${t.length} (expected at least 12 bytes)`);return{flags:Me("<I",t.slice(0,4))[0],flashCryptCnt:t[4],keyPurposes:Array.from(t.slice(5,12)),chipId:t.length>=16?Me("<I",t.slice(12,16))[0]:0,apiVersion:t.length>=20?Me("<I",t.slice(16,20))[0]:0}}async readLoop(){this.debug&&this.logger.debug("Starting read loop"),this._reader=this.port.readable.getReader();try{let t=!0;for(;t;){const{value:e,done:a}=await this._reader.read();if(a){this._reader.releaseLock(),t=!1;break}if(!e||0===e.length)continue;const s=Array.from(e);Array.prototype.push.apply(this._inputBuffer,s),this._totalBytesRead+=e.length}}catch{this.logger.error("Read loop got disconnected")}this.connected=!1,this._isESP32S2NativeUSB&&!this._initializationSucceeded&&(this.logger.log("ESP32-S2 Native USB detected - requesting port reselection"),this.dispatchEvent(new CustomEvent("esp32s2-usb-reconnect",{detail:{message:"ESP32-S2 Native USB requires port reselection"}}))),this.dispatchEvent(new Event("disconnect")),this.logger.debug("Finished read loop")}sleep(t=100){return new Promise(e=>setTimeout(e,t))}async setRTS(t){await this.port.setSignals({requestToSend:t}),await this.setDTR(this.state_DTR)}async setDTR(t){this.state_DTR=t,await this.port.setSignals({dataTerminalReady:t})}async hardReset(t=!1){t?4097===this.port.getInfo().usbProductId?(await this.setDTR(!1),await this.setRTS(!1),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(100),await this.setRTS(!0),await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!1),await this.setRTS(!1),this.logger.log("USB MCU reset.")):(await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(50),await this.setDTR(!1),this.logger.log("DTR/RTS USB serial chip reset.")):(await this.setRTS(!0),await this.sleep(100),await this.setRTS(!1),this.logger.log("Hard reset.")),await new Promise(t=>setTimeout(t,1e3))}macAddr(){const t=new Array(6).fill(0),e=this._efuses[0],a=this._efuses[1],s=this._efuses[2],i=this._efuses[3];let r;if(this.chipFamily==l){if(0!=i)r=[i>>16&255,i>>8&255,255&i];else if(a>>16&255){if(1!=(a>>16&255))throw new Error("Couldnt determine OUI");r=[172,208,116]}else r=[24,254,52];t[0]=r[0],t[1]=r[1],t[2]=r[2],t[3]=a>>8&255,t[4]=255&a,t[5]=e>>24&255}else if(this.chipFamily==d)t[0]=s>>8&255,t[1]=255&s,t[2]=a>>24&255,t[3]=a>>16&255,t[4]=a>>8&255,t[5]=255&a;else{if(this.chipFamily!=u&&this.chipFamily!=f&&this.chipFamily!=c&&this.chipFamily!=_&&this.chipFamily!=g&&this.chipFamily!=p&&this.chipFamily!=m&&this.chipFamily!=w&&this.chipFamily!=y&&this.chipFamily!=b&&this.chipFamily!=v&&this.chipFamily!=S)throw new Error("Unknown chip family");t[0]=a>>8&255,t[1]=255&a,t[2]=e>>24&255,t[3]=e>>16&255,t[4]=e>>8&255,t[5]=255&e}return t}async readRegister(t){this.debug&&this.logger.debug("Reading from Register "+s(t,8));const e=Ne("<I",t);await this.sendCommand(10,e);const[a]=await this.getResponse(10);return a}async checkCommand(t,e,a=0,i=3e3){i=Math.min(i,3e5),await this.sendCommand(t,e,a);const[r,n]=await this.getResponse(t,i);if(null===n)throw new Error("Didn't get enough status bytes");let h=n,o=0;if(this.IS_STUB||this.chipFamily==l?o=2:[d,u,f,c,_,g,p,m,w,y,b,v,S].includes(this.chipFamily)||20===t?o=4:[2,4].includes(h.length)&&(o=h.length),h.length<o)throw new Error("Didn't get enough status bytes");const B=h.slice(-o,h.length);if(h=h.slice(0,-o),this.debug&&(this.logger.debug("status",B),this.logger.debug("value",r),this.logger.debug("data",h)),1==B[0])throw 5==B[1]?(await this.drainInputBuffer(200),new Error("Invalid (unsupported) command "+s(t))):new Error("Command failure error code "+s(B[1]));return[r,h]}async sendCommand(e,a,s=0){const i=t([...Ne("<BBHI",0,e,a.length,s),...a]);this.debug&&this.logger.debug(`Writing ${i.length} byte${1==i.length?"":"s"}:`,i),await this.writeToStream(i)}async readPacket(t){let e=null,r=!1,n=[];for(;;){const h=Date.now();for(n=[];Date.now()-h<t;){if(this._inputBuffer.length>0){n.push(this._inputBuffer.shift());break}await i(1)}if(0==n.length){throw new I("Timed out waiting for packet "+(null===e?"header":"content"))}this.debug&&this.logger.debug("Read "+n.length+" bytes: "+a(n));for(const t of n)if(null===e){if(192!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(n)),this.logger.debug("Remaining data in serial buffer: "+a(this._inputBuffer))),new I("Invalid head of packet ("+s(t)+")");e=[]}else if(r)if(r=!1,220==t)e.push(192);else{if(221!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(n)),this.logger.debug("Remaining data in serial buffer: "+a(this._inputBuffer))),new I("Invalid SLIP escape (0xdb, "+s(t)+")");e.push(219)}else if(219==t)r=!0;else{if(192==t)return this.debug&&this.logger.debug("Received full packet: "+a(e)),e;e.push(t)}}throw new I("Invalid state")}async getResponse(t,e=3e3){for(let a=0;a<100;a++){const a=await this.readPacket(e);if(a.length<8)continue;const[i,r,,n]=Me("<BBHI",a.slice(0,8));if(1!=i)continue;const h=a.slice(8);if(null==t||r==t)return[n,h];if(0!=h[0]&&5==h[1])throw await this.drainInputBuffer(200),new Error(`Invalid (unsupported) command ${s(t)}`)}throw"Response doesn't match request"}checksum(t,e=239){for(const a of t)e^=a;return e}async setBaudrate(t){if(this.chipFamily==l)throw new Error("Changing baud rate is not supported on the ESP8266");try{const e=Ne("<II",t,this.IS_STUB?n:0);await this.checkCommand(15,e)}catch(e){throw this.logger.error(`Baudrate change error: ${e}`),new Error(`Unable to change the baud rate to ${t}: No response from set baud rate command.`)}this._parent?await this._parent.reconfigurePort(t):await this.reconfigurePort(t),await i(z),this._parent?this._parent._currentBaudRate=t:this._currentBaudRate=t;const e=this._parent?this._parent._maxUSBSerialBaudrate:this._maxUSBSerialBaudrate;e&&t>e&&(this.logger.log(`⚠️ WARNING: Baudrate ${t} exceeds USB-Serial chip limit (${e})!`),this.logger.log("⚠️ This may cause data corruption or connection failures!")),this.logger.log(`Changed baud rate to ${t}`)}async reconfigurePort(t){var e;try{await(null===(e=this._reader)||void 0===e?void 0:e.cancel()),await this.port.close(),await this.port.open({baudRate:t}),await this.flushSerialBuffers(),this.readLoop()}catch(e){throw this.logger.error(`Reconfigure port error: ${e}`),new Error(`Unable to change the baud rate to ${t}: ${e}`)}}async sync(){for(let t=0;t<5;t++){this._inputBuffer.length=0;if(await this._sync())return await i(z),!0;await i(z)}throw new Error("Couldn't sync to ESP. Try resetting.")}async _sync(){await this.sendCommand(8,o);for(let t=0;t<8;t++)try{const[,t]=await this.getResponse(8,z);if(t.length>1&&0==t[0]&&0==t[1])return!0}catch{}return!1}getFlashWriteSize(){return this.IS_STUB?16384:1024}async flashData(t,e,a=0,i=!1){if(t.byteLength>=8){const e=Array.from(new Uint8Array(t,0,4)),a=e[0],i=e[2],r=e[3];this.logger.log(`Image header, Magic=${s(a)}, FlashMode=${s(i)}, FlashSizeFreq=${s(r)}`)}const r=t.byteLength;let n,h=0,o=k;i?(n=Pe(new Uint8Array(t),{level:9}).buffer,h=n.byteLength,this.logger.log(`Writing data with filesize: ${r}. Compressed Size: ${h}`),o=await this.flashDeflBegin(r,h,a)):(this.logger.log(`Writing data with filesize: ${r}`),n=t,await this.flashBegin(r,a));let l=[],d=0,u=0,f=0;const c=Date.now(),_=this.getFlashWriteSize(),g=i?h:r;for(;g-f>0;)this.debug&&this.logger.log(`Writing at ${s(a+d*_,8)} `),g-f>=_?l=Array.from(new Uint8Array(n,f,_)):(l=Array.from(new Uint8Array(n,f,g-f)),i||(l=l.concat(new Array(_-l.length).fill(255)))),i?await this.flashDeflBlock(l,d,o):await this.flashBlock(l,d),d+=1,u+=i?Math.round(l.length*r/h):l.length,f+=_,e(Math.min(u,r),r);this.logger.log("Took "+(Date.now()-c)+"ms to write "+g+" bytes"),this.IS_STUB&&(await this.flashBegin(0,0),i?await this.flashDeflFinish():await this.flashFinish())}async flashBlock(t,e,a=3e3){await this.checkCommand(3,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t),a)}async flashDeflBlock(t,e,a=3e3){await this.checkCommand(17,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t),a)}async flashBegin(t=0,e=0,a=!1){let i;await this.flushSerialBuffers();const r=this.getFlashWriteSize();!this.IS_STUB&&[d,u,f,c,_,g,p,m,w,y,b,v,S].includes(this.chipFamily)&&await this.checkCommand(13,new Array(8).fill(0));const n=Math.floor((t+r-1)/r);i=this.chipFamily==l?this.getEraseSize(e,t):t;const h=this.IS_STUB?k:F(3e4,t),o=Date.now();let B=Ne("<IIII",i,n,r,e);return this.chipFamily!=d&&this.chipFamily!=u&&this.chipFamily!=f&&this.chipFamily!=c&&this.chipFamily!=_&&this.chipFamily!=g&&this.chipFamily!=p&&this.chipFamily!=m&&this.chipFamily!=w&&this.chipFamily!=y&&this.chipFamily!=b&&this.chipFamily!=v&&this.chipFamily!=S||(B=B.concat(Ne("<I",a?1:0))),this.logger.log("Erase size "+i+", blocks "+n+", block size "+s(r,4)+", offset "+s(e,4)+", encrypted "+(a?"yes":"no")),await this.checkCommand(2,B,0,h),0==t||this.IS_STUB||this.logger.log("Took "+(Date.now()-o)+"ms to erase "+n+" bytes"),n}async flashDeflBegin(t=0,e=0,a=0){const s=this.getFlashWriteSize(),i=Math.floor((e+s-1)/s),r=Math.floor((t+s-1)/s);let n=0,h=0;this.IS_STUB?(n=t,h=F(3e4,n)):(n=r*s,h=k);const o=Ne("<IIII",n,i,s,a);return await this.checkCommand(16,o,0,h),h}async flashFinish(){const t=Ne("<I",1);await this.checkCommand(4,t)}async flashDeflFinish(){const t=Ne("<I",1);await this.checkCommand(18,t)}getBootloaderOffset(){return U(this.getChipFamily()).flashOffs}async flashId(){return await this.runSpiFlashCommand(159,[],24)}getChipFamily(){return this._parent?this._parent.chipFamily:this.chipFamily}async writeRegister(t,e,a=4294967295,s=0,i=0){let r=Ne("<IIII",t,e,a,s);i>0&&(r=r.concat(Ne("<IIII",U(this.getChipFamily()).uartDateReg,0,0,i))),await this.checkCommand(9,r)}async setDataLengths(t,e,a){if(-1!=t.mosiDlenOffs){const s=t.regBase+t.mosiDlenOffs,i=t.regBase+t.misoDlenOffs;e>0&&await this.writeRegister(s,e-1),a>0&&await this.writeRegister(i,a-1)}else{const s=t.regBase+t.usr1Offs,i=(0==a?0:a-1)<<8|(0==e?0:e-1)<<17;await this.writeRegister(s,i)}}async waitDone(t,e){for(let a=0;a<10;a++){if(0==(await this.readRegister(t)&e))return}throw Error("SPI command did not complete in time")}async runSpiFlashCommand(t,e,a=0){const i=U(this.getChipFamily()),r=i.regBase,n=r,h=r+i.usrOffs,o=r+i.usr2Offs,l=r+i.w0Offs,d=1<<18;if(a>32)throw new Error("Reading more than 32 bits back from a SPI flash operation is unsupported");if(e.length>64)throw new Error("Writing more than 64 bytes of data with one SPI command is unsupported");const u=8*e.length,f=await this.readRegister(h),c=await this.readRegister(o);let _=1<<31;if(a>0&&(_|=268435456),u>0&&(_|=134217728),await this.setDataLengths(i,u,a),await this.writeRegister(h,_),await this.writeRegister(o,7<<28|t),0==u)await this.writeRegister(l,0);else{const t=(4-e.length%4)%4;e=e.concat(new Array(t).fill(0));const a=Me("I".repeat(Math.floor(e.length/4)),e);let i=l;this.logger.debug(`Words Length: ${a.length}`);for(const t of a)this.logger.debug(`Writing word ${s(t)} to register offset ${s(i)}`),await this.writeRegister(i,t),i+=4}await this.writeRegister(n,d),await this.waitDone(n,d);const g=await this.readRegister(l);return await this.writeRegister(h,f),await this.writeRegister(o,c),g}async detectFlashSize(){this.logger.log("Detecting Flash Size");const t=await this.flashId(),e=255&t,a=t>>16&255;this.logger.log(`FlashId: ${s(t)}`),this.logger.log(`Flash Manufacturer: ${e.toString(16)}`),this.logger.log(`Flash Device: ${(t>>8&255).toString(16)}${a.toString(16)}`),this.flashSize=r[a],this.logger.log(`Auto-detected Flash size: ${this.flashSize}`)}getEraseSize(t,e){const a=4096,s=Math.floor((e+a-1)/a);let i=16-Math.floor(t/a)%16;return s<i&&(i=s),s<2*i?Math.floor((s+1)/2*a):(s-i)*a}async memBegin(t,e,a,s){return await this.checkCommand(5,Ne("<IIII",t,e,a,s))}async memBlock(t,e){return await this.checkCommand(7,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t))}async memFinish(t=0){const e=this.IS_STUB?k:500,a=Ne("<II",0==t?1:0,t);return await this.checkCommand(6,a,0,e)}async runStub(t=!1){const e=await O(this.chipFamily,this.chipRevision);if(null===e)return this.logger.log(`Stub flasher is not yet supported on ${this.chipName}, using ROM loader`),this;const a=2048;this.logger.log("Uploading stub...");for(const t of["text","data"]){const s=e[t],i=e[`${t}_start`],r=s.length,n=Math.floor((r+a-1)/a);await this.memBegin(r,n,a,i);for(const t of Array(n).keys()){const e=t*a;let i=e+a;i>r&&(i=r),await this.memBlock(s.slice(e,i),t)}}await this.memFinish(e.entry);const s=await this.readPacket(500),i=String.fromCharCode(...s);if("OHAI"!=i)throw new Error("Failed to start stub. Unexpected response: "+i);this.logger.log("Stub is now running...");const r=new He(this.port,this.logger,this);return t||await r.detectFlashSize(),r}async writeToStream(t){if(!this.port.writable)return void this.logger.debug("Port writable stream not available, skipping write");const e=this.port.writable.getWriter();await e.write(new Uint8Array(t));try{e.releaseLock()}catch(t){this.logger.error(`Ignoring release lock error: ${t}`)}}async disconnect(){this._parent?await this._parent.disconnect():this.port.writable?(await this.port.writable.getWriter().close(),await new Promise(t=>{this._reader||t(void 0),this.addEventListener("disconnect",t,{once:!0}),this._reader.cancel()}),this.connected=!1):this.logger.debug("Port already closed, skipping disconnect")}async reconnect(){if(this._parent)return void await this._parent.reconnect();if(this.logger.log("Reconnecting serial port..."),this.connected=!1,this.__inputBuffer=[],this._reader){try{await this._reader.cancel()}catch(t){this.logger.debug(`Reader cancel error: ${t}`)}this._reader=void 0}try{await this.port.close(),this.logger.log("Port closed")}catch(t){this.logger.debug(`Port close error: ${t}`)}this.logger.debug("Opening port...");try{await this.port.open({baudRate:n}),this.connected=!0}catch(t){throw new Error(`Failed to open port: ${t}`)}if(!this.port.readable||!this.port.writable)throw new Error(`Port streams not available after open (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);const t=this.chipFamily,e=this.chipName,a=this.chipRevision,s=this.chipVariant,i=this.flashSize;if(await this.hardReset(!0),this._parent||(this.__inputBuffer=[],this.__totalBytesRead=0,this.readLoop()),await this.flushSerialBuffers(),await this.sync(),this.chipFamily=t,this.chipName=e,this.chipRevision=a,this.chipVariant=s,this.flashSize=i,this.logger.debug(`Reconnect complete (chip: ${this.chipName})`),!this.port.writable||!this.port.readable)throw new Error("Port not ready after reconnect");const r=await this.runStub(!0);if(this.logger.debug("Stub loaded"),this._currentBaudRate!==n&&(await r.setBaudrate(this._currentBaudRate),!this.port.writable||!this.port.readable))throw new Error(`Port not ready after baudrate change (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);this.IS_STUB&&Object.assign(this,r),this.logger.debug("Reconnection successful")}async drainInputBuffer(t=200){await i(t);let e=0;const a=Date.now();for(;e<112&&Date.now()-a<100;)if(this._inputBuffer.length>0){void 0!==this._inputBuffer.shift()&&e++}else await i(1);e>0&&this.logger.debug(`Drained ${e} bytes from input buffer`),this._parent||(this.__inputBuffer=[])}async flushSerialBuffers(){this._parent||(this.__inputBuffer=[]),await i(z),this._parent||(this.__inputBuffer=[]),this.logger.debug("Serial buffers flushed")}async readFlash(e,a,s){if(!this.IS_STUB)throw new Error("Reading flash is only supported in stub mode. Please run runStub() first.");await this.flushSerialBuffers(),this.logger.log(`Reading ${a} bytes from flash at address 0x${e.toString(16)}...`);let i=new Uint8Array(0),r=e,n=a;for(;n>0;){const e=Math.min(65536,n);let h=!1,o=0;const l=3;for(;!h&&o<=l;)try{this.logger.debug(`Reading chunk at 0x${r.toString(16)}, size: 0x${e.toString(16)}`);const a=Ne("<IIII",r,e,4096,1024),[s]=await this.checkCommand(210,a);if(0!=s)throw new Error("Failed to read memory: "+s);let n=new Uint8Array(0);for(;n.length<e;){let a;try{a=await this.readPacket(100)}catch(t){if(t instanceof I&&(this.logger.debug(`SLIP read error at ${n.length} bytes: ${t.message}`),n.length>=e))break;throw t}if(a&&a.length>0){const e=new Uint8Array(a),s=new Uint8Array(n.length+e.length);s.set(n),s.set(e,n.length),n=s;const i=Ne("<I",n.length),r=t(i);await this.writeToStream(r)}}const o=new Uint8Array(i.length+n.length);o.set(i),o.set(n,i.length),i=o,h=!0}catch(t){if(o++,!(t instanceof I&&t.message.includes("Timed out")))throw t;if(!(o<=l))throw new Error(`Failed to read chunk at 0x${r.toString(16)} after ${l} retries: ${t}`);this.logger.log(`⚠️ Timeout error at 0x${r.toString(16)}. Reconnecting and retrying (attempt ${o}/${l})...`);try{await this.reconnect()}catch(t){throw new Error(`Reconnect failed: ${t}`)}}s&&s(new Uint8Array(e),i.length,a),r+=e,n-=e,this.logger.debug(`Total progress: 0x${i.length.toString(16)} from 0x${a.toString(16)} bytes`)}return this.logger.debug(`Successfully read ${i.length} bytes from flash`),i}}class He extends Ze{constructor(){super(...arguments),this.IS_STUB=!0}async memBegin(t,e,a,i){const r=await O(this.chipFamily,this.chipRevision);if(null===r)return[0,[]];const n=i,h=i+t;this.logger.debug(`Load range: ${s(n,8)}-${s(h,8)}`),this.logger.debug(`Stub data: ${s(r.data_start,8)}, len: ${r.data.length}, text: ${s(r.text_start,8)}, len: ${r.text.length}`);for(const[t,e]of[[r.data_start,r.data_start+r.data.length],[r.text_start,r.text_start+r.text.length]])if(n<e&&h>t)throw new Error("Software loader is resident at "+s(t,8)+"-"+s(e,8)+". Can't load binary at overlapping address range "+s(n,8)+"-"+s(h,8)+". Try changing the binary loading address.");return[0,[]]}async eraseFlash(){await this.checkCommand(208,[],0,x)}}const Ve=async t=>{const e=await navigator.serial.requestPort();return await e.open({baudRate:n}),t.log("Connected successfully."),new Ze(e,t)};export{d as CHIP_FAMILY_ESP32,c as CHIP_FAMILY_ESP32C2,_ as CHIP_FAMILY_ESP32C3,g as CHIP_FAMILY_ESP32C5,p as CHIP_FAMILY_ESP32C6,m as CHIP_FAMILY_ESP32C61,w as CHIP_FAMILY_ESP32H2,b as CHIP_FAMILY_ESP32H21,y as CHIP_FAMILY_ESP32H4,v as CHIP_FAMILY_ESP32P4,u as CHIP_FAMILY_ESP32S2,f as CHIP_FAMILY_ESP32S3,S as CHIP_FAMILY_ESP32S31,l as CHIP_FAMILY_ESP8266,Ze as ESPLoader,Ve as connect};
1
+ const t=t=>{let e=[192];for(const a of t)219==a?e=e.concat([219,221]):192==a?e=e.concat([219,220]):e.push(a);return e.push(192),e},e=t=>{const e=[];for(let a=0;a<t.length;a++){const s=t.charCodeAt(a);s<=255&&e.push(s)}return e},a=t=>"["+t.map(t=>s(t)).join(", ")+"]",s=(t,e=2)=>{const a=t.toString(16).toUpperCase();return a.startsWith("-")?"-0x"+a.substring(1).padStart(e,"0"):"0x"+a.padStart(e,"0")},i=t=>new Promise(e=>setTimeout(e,t)),r={18:"256KB",19:"512KB",20:"1MB",21:"2MB",22:"4MB",23:"8MB",24:"16MB",25:"32MB",26:"64MB",27:"128MB",28:"256MB",32:"64MB",33:"128MB",34:"256MB",50:"256KB",51:"512KB",52:"1MB",53:"2MB",54:"4MB",55:"8MB",56:"16MB",57:"32MB",58:"64MB"},n=115200,h=1343410176,o=e(" UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"),l=33382,d=50,f=12882,u=12883,c=12994,_=12995,g=12997,p=12998,m=207969,w=12914,y=12916,b=12917,S=12928,v=12849,B={5:{name:"ESP32-C3",family:_},9:{name:"ESP32-S3",family:u},12:{name:"ESP32-C2",family:c},13:{name:"ESP32-C6",family:p},16:{name:"ESP32-H2",family:w},18:{name:"ESP32-P4",family:S},20:{name:"ESP32-C61",family:m},23:{name:"ESP32-C5",family:g},25:{name:"ESP32-H21",family:b},28:{name:"ESP32-H4",family:y},32:{name:"ESP32-S31",family:v}},R={4293968129:{name:"ESP8266",family:l},15736195:{name:"ESP32",family:d},1990:{name:"ESP32-S2",family:f}},k=3e3,x=15e4,z=100,F=(t,e)=>{const a=Math.floor(t*(e/486));return a<k?k:a},I=t=>{switch(t){case d:return{regBase:1072963584,baseFuse:1073061888,macFuse:1073061888,usrOffs:28,usr1Offs:32,usr2Offs:36,mosiDlenOffs:40,misoDlenOffs:44,w0Offs:128,uartDateReg:1610612856,flashOffs:4096};case f:return{regBase:1061167104,baseFuse:1061265408,macFuse:1061265476,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612856,flashOffs:4096};case u:return{regBase:1610620928,usrOffs:24,baseFuse:1610641408,macFuse:1610641476,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612864,flashOffs:0};case l:return{regBase:1610613248,usrOffs:28,baseFuse:1072693328,macFuse:1072693328,usr1Offs:32,usr2Offs:36,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:64,uartDateReg:1610612856,flashOffs:0};case c:case _:return{regBase:1610620928,baseFuse:1610647552,macFuse:1610647620,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case g:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:8192};case p:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case m:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case w:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case y:return{regBase:1611239424,baseFuse:1611339776,macFuse:1611339844,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610686588,flashOffs:8192};case b:return{regBase:1610625024,baseFuse:1611350016,macFuse:1611350084,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case S:return{regBase:1342754816,baseFuse:h,macFuse:1343410244,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1343004812,flashOffs:8192};case v:return{regBase:542113792,baseFuse:544296960,macFuse:544297028,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:540582028,flashOffs:8192};default:return{regBase:-1,baseFuse:-1,macFuse:-1,usrOffs:-1,usr1Offs:-1,usr2Offs:-1,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:-1,uartDateReg:-1,flashOffs:-1}}};class U extends Error{constructor(t){super(t),this.name="SlipReadError"}}const O=async(t,a)=>{let s;return t==y||t==b||t==v?null:(t==d?s=await import("./esp32-CijhsJH1.js"):t==f?s=await import("./esp32s2-IiDBtXxo.js"):t==u?s=await import("./esp32s3-6yv5yxum.js"):t==l?s=await import("./esp8266-CUwxJpGa.js"):t==c?s=await import("./esp32c2-C17SM4gO.js"):t==_?s=await import("./esp32c3-DxRGijbg.js"):t==g?s=await import("./esp32c5-3mDOIGa4.js"):t==p?s=await import("./esp32c6-h6U0SQTm.js"):t==m?s=await import("./esp32c61-BKtexhPZ.js"):t==w?s=await import("./esp32h2-RtuWSEmP.js"):t==S&&(s=null!=a&&a>=300?await import("./esp32p4r3-CpHBYEwI.js"):await import("./esp32p4-5nkIjxqJ.js")),{...s,text:e(atob(s.text)),data:e(atob(s.data))})};function D(t){let e=t.length;for(;--e>=0;)t[e]=0}const E=256,A=286,T=30,C=15,$=new Uint8Array([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]),P=new Uint8Array([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]),L=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),N=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),M=new Array(576);D(M);const Z=new Array(60);D(Z);const H=new Array(512);D(H);const V=new Array(256);D(V);const j=new Array(29);D(j);const W=new Array(T);function K(t,e,a,s,i){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=s,this.max_length=i,this.has_stree=t&&t.length}let Y,G,q;function X(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}D(W);const J=t=>t<256?H[t]:H[256+(t>>>7)],Q=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},tt=(t,e,a)=>{t.bi_valid>16-a?(t.bi_buf|=e<<t.bi_valid&65535,Q(t,t.bi_buf),t.bi_buf=e>>16-t.bi_valid,t.bi_valid+=a-16):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=a)},et=(t,e,a)=>{tt(t,a[2*e],a[2*e+1])},at=(t,e)=>{let a=0;do{a|=1&t,t>>>=1,a<<=1}while(--e>0);return a>>>1},st=(t,e,a)=>{const s=new Array(16);let i,r,n=0;for(i=1;i<=C;i++)n=n+a[i-1]<<1,s[i]=n;for(r=0;r<=e;r++){let e=t[2*r+1];0!==e&&(t[2*r]=at(s[e]++,e))}},it=t=>{let e;for(e=0;e<A;e++)t.dyn_ltree[2*e]=0;for(e=0;e<T;e++)t.dyn_dtree[2*e]=0;for(e=0;e<19;e++)t.bl_tree[2*e]=0;t.dyn_ltree[512]=1,t.opt_len=t.static_len=0,t.sym_next=t.matches=0},rt=t=>{t.bi_valid>8?Q(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},nt=(t,e,a,s)=>{const i=2*e,r=2*a;return t[i]<t[r]||t[i]===t[r]&&s[e]<=s[a]},ht=(t,e,a)=>{const s=t.heap[a];let i=a<<1;for(;i<=t.heap_len&&(i<t.heap_len&&nt(e,t.heap[i+1],t.heap[i],t.depth)&&i++,!nt(e,s,t.heap[i],t.depth));)t.heap[a]=t.heap[i],a=i,i<<=1;t.heap[a]=s},ot=(t,e,a)=>{let s,i,r,n,h=0;if(0!==t.sym_next)do{s=255&t.pending_buf[t.sym_buf+h++],s+=(255&t.pending_buf[t.sym_buf+h++])<<8,i=t.pending_buf[t.sym_buf+h++],0===s?et(t,i,e):(r=V[i],et(t,r+E+1,e),n=$[r],0!==n&&(i-=j[r],tt(t,i,n)),s--,r=J(s),et(t,r,a),n=P[r],0!==n&&(s-=W[r],tt(t,s,n)))}while(h<t.sym_next);et(t,256,e)},lt=(t,e)=>{const a=e.dyn_tree,s=e.stat_desc.static_tree,i=e.stat_desc.has_stree,r=e.stat_desc.elems;let n,h,o,l=-1;for(t.heap_len=0,t.heap_max=573,n=0;n<r;n++)0!==a[2*n]?(t.heap[++t.heap_len]=l=n,t.depth[n]=0):a[2*n+1]=0;for(;t.heap_len<2;)o=t.heap[++t.heap_len]=l<2?++l:0,a[2*o]=1,t.depth[o]=0,t.opt_len--,i&&(t.static_len-=s[2*o+1]);for(e.max_code=l,n=t.heap_len>>1;n>=1;n--)ht(t,a,n);o=r;do{n=t.heap[1],t.heap[1]=t.heap[t.heap_len--],ht(t,a,1),h=t.heap[1],t.heap[--t.heap_max]=n,t.heap[--t.heap_max]=h,a[2*o]=a[2*n]+a[2*h],t.depth[o]=(t.depth[n]>=t.depth[h]?t.depth[n]:t.depth[h])+1,a[2*n+1]=a[2*h+1]=o,t.heap[1]=o++,ht(t,a,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const a=e.dyn_tree,s=e.max_code,i=e.stat_desc.static_tree,r=e.stat_desc.has_stree,n=e.stat_desc.extra_bits,h=e.stat_desc.extra_base,o=e.stat_desc.max_length;let l,d,f,u,c,_,g=0;for(u=0;u<=C;u++)t.bl_count[u]=0;for(a[2*t.heap[t.heap_max]+1]=0,l=t.heap_max+1;l<573;l++)d=t.heap[l],u=a[2*a[2*d+1]+1]+1,u>o&&(u=o,g++),a[2*d+1]=u,d>s||(t.bl_count[u]++,c=0,d>=h&&(c=n[d-h]),_=a[2*d],t.opt_len+=_*(u+c),r&&(t.static_len+=_*(i[2*d+1]+c)));if(0!==g){do{for(u=o-1;0===t.bl_count[u];)u--;t.bl_count[u]--,t.bl_count[u+1]+=2,t.bl_count[o]--,g-=2}while(g>0);for(u=o;0!==u;u--)for(d=t.bl_count[u];0!==d;)f=t.heap[--l],f>s||(a[2*f+1]!==u&&(t.opt_len+=(u-a[2*f+1])*a[2*f],a[2*f+1]=u),d--)}})(t,e),st(a,l,t.bl_count)},dt=(t,e,a)=>{let s,i,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),e[2*(a+1)+1]=65535,s=0;s<=a;s++)i=n,n=e[2*(s+1)+1],++h<o&&i===n||(h<l?t.bl_tree[2*i]+=h:0!==i?(i!==r&&t.bl_tree[2*i]++,t.bl_tree[32]++):h<=10?t.bl_tree[34]++:t.bl_tree[36]++,h=0,r=i,0===n?(o=138,l=3):i===n?(o=6,l=3):(o=7,l=4))},ft=(t,e,a)=>{let s,i,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),s=0;s<=a;s++)if(i=n,n=e[2*(s+1)+1],!(++h<o&&i===n)){if(h<l)do{et(t,i,t.bl_tree)}while(0!==--h);else 0!==i?(i!==r&&(et(t,i,t.bl_tree),h--),et(t,16,t.bl_tree),tt(t,h-3,2)):h<=10?(et(t,17,t.bl_tree),tt(t,h-3,3)):(et(t,18,t.bl_tree),tt(t,h-11,7));h=0,r=i,0===n?(o=138,l=3):i===n?(o=6,l=3):(o=7,l=4)}};let ut=!1;const ct=(t,e,a,s)=>{tt(t,0+(s?1:0),3),rt(t),Q(t,a),Q(t,~a),a&&t.pending_buf.set(t.window.subarray(e,e+a),t.pending),t.pending+=a};var _t=(t,e,a,s)=>{let i,r,n=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,a=4093624447;for(e=0;e<=31;e++,a>>>=1)if(1&a&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e<E;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0})(t)),lt(t,t.l_desc),lt(t,t.d_desc),n=(t=>{let e;for(dt(t,t.dyn_ltree,t.l_desc.max_code),dt(t,t.dyn_dtree,t.d_desc.max_code),lt(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*N[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),i=t.opt_len+3+7>>>3,r=t.static_len+3+7>>>3,r<=i&&(i=r)):i=r=a+5,a+4<=i&&-1!==e?ct(t,e,a,s):4===t.strategy||r===i?(tt(t,2+(s?1:0),3),ot(t,M,Z)):(tt(t,4+(s?1:0),3),((t,e,a,s)=>{let i;for(tt(t,e-257,5),tt(t,a-1,5),tt(t,s-4,4),i=0;i<s;i++)tt(t,t.bl_tree[2*N[i]+1],3);ft(t,t.dyn_ltree,e-1),ft(t,t.dyn_dtree,a-1)})(t,t.l_desc.max_code+1,t.d_desc.max_code+1,n+1),ot(t,t.dyn_ltree,t.dyn_dtree)),it(t),s&&rt(t)},gt={_tr_init:t=>{ut||((()=>{let t,e,a,s,i;const r=new Array(16);for(a=0,s=0;s<28;s++)for(j[s]=a,t=0;t<1<<$[s];t++)V[a++]=s;for(V[a-1]=s,i=0,s=0;s<16;s++)for(W[s]=i,t=0;t<1<<P[s];t++)H[i++]=s;for(i>>=7;s<T;s++)for(W[s]=i<<7,t=0;t<1<<P[s]-7;t++)H[256+i++]=s;for(e=0;e<=C;e++)r[e]=0;for(t=0;t<=143;)M[2*t+1]=8,t++,r[8]++;for(;t<=255;)M[2*t+1]=9,t++,r[9]++;for(;t<=279;)M[2*t+1]=7,t++,r[7]++;for(;t<=287;)M[2*t+1]=8,t++,r[8]++;for(st(M,287,r),t=0;t<T;t++)Z[2*t+1]=5,Z[2*t]=at(t,5);Y=new K(M,$,257,A,C),G=new K(Z,P,0,T,C),q=new K(new Array(0),L,0,19,7)})(),ut=!0),t.l_desc=new X(t.dyn_ltree,Y),t.d_desc=new X(t.dyn_dtree,G),t.bl_desc=new X(t.bl_tree,q),t.bi_buf=0,t.bi_valid=0,it(t)},_tr_stored_block:ct,_tr_flush_block:_t,_tr_tally:(t,e,a)=>(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=a,0===e?t.dyn_ltree[2*a]++:(t.matches++,e--,t.dyn_ltree[2*(V[a]+E+1)]++,t.dyn_dtree[2*J(e)]++),t.sym_next===t.sym_end),_tr_align:t=>{tt(t,2,3),et(t,256,M),(t=>{16===t.bi_valid?(Q(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)})(t)}};var pt=(t,e,a,s)=>{let i=65535&t,r=t>>>16&65535,n=0;for(;0!==a;){n=a>2e3?2e3:a,a-=n;do{i=i+e[s++]|0,r=r+i|0}while(--n);i%=65521,r%=65521}return i|r<<16};const mt=new Uint32Array((()=>{let t,e=[];for(var a=0;a<256;a++){t=a;for(var s=0;s<8;s++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e})());var wt=(t,e,a,s)=>{const i=mt,r=s+a;t^=-1;for(let a=s;a<r;a++)t=t>>>8^i[255&(t^e[a])];return-1^t},yt={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},bt={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:St,_tr_stored_block:vt,_tr_flush_block:Bt,_tr_tally:Rt,_tr_align:kt}=gt,{Z_NO_FLUSH:xt,Z_PARTIAL_FLUSH:zt,Z_FULL_FLUSH:Ft,Z_FINISH:It,Z_BLOCK:Ut,Z_OK:Ot,Z_STREAM_END:Dt,Z_STREAM_ERROR:Et,Z_DATA_ERROR:At,Z_BUF_ERROR:Tt,Z_DEFAULT_COMPRESSION:Ct,Z_FILTERED:$t,Z_HUFFMAN_ONLY:Pt,Z_RLE:Lt,Z_FIXED:Nt,Z_DEFAULT_STRATEGY:Mt,Z_UNKNOWN:Zt,Z_DEFLATED:Ht}=bt,Vt=258,jt=262,Wt=42,Kt=113,Yt=666,Gt=(t,e)=>(t.msg=yt[e],e),qt=t=>2*t-(t>4?9:0),Xt=t=>{let e=t.length;for(;--e>=0;)t[e]=0},Jt=t=>{let e,a,s,i=t.w_size;e=t.hash_size,s=e;do{a=t.head[--s],t.head[s]=a>=i?a-i:0}while(--e);e=i,s=e;do{a=t.prev[--s],t.prev[s]=a>=i?a-i:0}while(--e)};let Qt=(t,e,a)=>(e<<t.hash_shift^a)&t.hash_mask;const te=t=>{const e=t.state;let a=e.pending;a>t.avail_out&&(a=t.avail_out),0!==a&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+a),t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))},ee=(t,e)=>{Bt(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,te(t.strm)},ae=(t,e)=>{t.pending_buf[t.pending++]=e},se=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},ie=(t,e,a,s)=>{let i=t.avail_in;return i>s&&(i=s),0===i?0:(t.avail_in-=i,e.set(t.input.subarray(t.next_in,t.next_in+i),a),1===t.state.wrap?t.adler=pt(t.adler,e,i,a):2===t.state.wrap&&(t.adler=wt(t.adler,e,i,a)),t.next_in+=i,t.total_in+=i,i)},re=(t,e)=>{let a,s,i=t.max_chain_length,r=t.strstart,n=t.prev_length,h=t.nice_match;const o=t.strstart>t.w_size-jt?t.strstart-(t.w_size-jt):0,l=t.window,d=t.w_mask,f=t.prev,u=t.strstart+Vt;let c=l[r+n-1],_=l[r+n];t.prev_length>=t.good_match&&(i>>=2),h>t.lookahead&&(h=t.lookahead);do{if(a=e,l[a+n]===_&&l[a+n-1]===c&&l[a]===l[r]&&l[++a]===l[r+1]){r+=2,a++;do{}while(l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&r<u);if(s=Vt-(u-r),r=u-Vt,s>n){if(t.match_start=e,n=s,s>=h)break;c=l[r+n-1],_=l[r+n]}}}while((e=f[e&d])>o&&0!==--i);return n<=t.lookahead?n:t.lookahead},ne=t=>{const e=t.w_size;let a,s,i;do{if(s=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-jt)&&(t.window.set(t.window.subarray(e,e+e-s),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),Jt(t),s+=e),0===t.strm.avail_in)break;if(a=ie(t.strm,t.window,t.strstart+t.lookahead,s),t.lookahead+=a,t.lookahead+t.insert>=3)for(i=t.strstart-t.insert,t.ins_h=t.window[i],t.ins_h=Qt(t,t.ins_h,t.window[i+1]);t.insert&&(t.ins_h=Qt(t,t.ins_h,t.window[i+3-1]),t.prev[i&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=i,i++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<jt&&0!==t.strm.avail_in)},he=(t,e)=>{let a,s,i,r=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,n=0,h=t.strm.avail_in;do{if(a=65535,i=t.bi_valid+42>>3,t.strm.avail_out<i)break;if(i=t.strm.avail_out-i,s=t.strstart-t.block_start,a>s+t.strm.avail_in&&(a=s+t.strm.avail_in),a>i&&(a=i),a<r&&(0===a&&e!==It||e===xt||a!==s+t.strm.avail_in))break;n=e===It&&a===s+t.strm.avail_in?1:0,vt(t,0,0,n),t.pending_buf[t.pending-4]=a,t.pending_buf[t.pending-3]=a>>8,t.pending_buf[t.pending-2]=~a,t.pending_buf[t.pending-1]=~a>>8,te(t.strm),s&&(s>a&&(s=a),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+s),t.strm.next_out),t.strm.next_out+=s,t.strm.avail_out-=s,t.strm.total_out+=s,t.block_start+=s,a-=s),a&&(ie(t.strm,t.strm.output,t.strm.next_out,a),t.strm.next_out+=a,t.strm.avail_out-=a,t.strm.total_out+=a)}while(0===n);return h-=t.strm.avail_in,h&&(h>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=h&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-h,t.strm.next_in),t.strstart),t.strstart+=h,t.insert+=h>t.w_size-t.insert?t.w_size-t.insert:h),t.block_start=t.strstart),t.high_water<t.strstart&&(t.high_water=t.strstart),n?4:e!==xt&&e!==It&&0===t.strm.avail_in&&t.strstart===t.block_start?2:(i=t.window_size-t.strstart,t.strm.avail_in>i&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,i+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),i>t.strm.avail_in&&(i=t.strm.avail_in),i&&(ie(t.strm,t.window,t.strstart,i),t.strstart+=i,t.insert+=i>t.w_size-t.insert?t.w_size-t.insert:i),t.high_water<t.strstart&&(t.high_water=t.strstart),i=t.bi_valid+42>>3,i=t.pending_buf_size-i>65535?65535:t.pending_buf_size-i,r=i>t.w_size?t.w_size:i,s=t.strstart-t.block_start,(s>=r||(s||e===It)&&e!==xt&&0===t.strm.avail_in&&s<=i)&&(a=s>i?i:s,n=e===It&&0===t.strm.avail_in&&a===s?1:0,vt(t,t.block_start,a,n),t.block_start+=a,te(t.strm)),n?3:1)},oe=(t,e)=>{let a,s;for(;;){if(t.lookahead<jt){if(ne(t),t.lookahead<jt&&e===xt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==a&&t.strstart-a<=t.w_size-jt&&(t.match_length=re(t,a)),t.match_length>=3)if(s=Rt(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do{t.strstart++,t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!==--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+1]);else s=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(s&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===It?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2},le=(t,e)=>{let a,s,i;for(;;){if(t.lookahead<jt){if(ne(t),t.lookahead<jt&&e===xt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==a&&t.prev_length<t.max_lazy_match&&t.strstart-a<=t.w_size-jt&&(t.match_length=re(t,a),t.match_length<=5&&(t.strategy===$t||3===t.match_length&&t.strstart-t.match_start>4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){i=t.strstart+t.lookahead-3,s=Rt(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=i&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!==--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,s&&(ee(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(s=Rt(t,0,t.window[t.strstart-1]),s&&ee(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(s=Rt(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===It?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2};function de(t,e,a,s,i){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=s,this.func=i}const fe=[new de(0,0,0,0,he),new de(4,4,8,4,oe),new de(4,5,16,8,oe),new de(4,6,32,32,oe),new de(4,4,16,16,le),new de(8,16,32,32,le),new de(8,16,128,128,le),new de(8,32,128,256,le),new de(32,128,258,1024,le),new de(32,258,258,4096,le)];function ue(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Ht,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),Xt(this.dyn_ltree),Xt(this.dyn_dtree),Xt(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),Xt(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),Xt(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const ce=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.status!==Wt&&57!==e.status&&69!==e.status&&73!==e.status&&91!==e.status&&103!==e.status&&e.status!==Kt&&e.status!==Yt?1:0},_e=t=>{if(ce(t))return Gt(t,Et);t.total_in=t.total_out=0,t.data_type=Zt;const e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=2===e.wrap?57:e.wrap?Wt:Kt,t.adler=2===e.wrap?0:1,e.last_flush=-2,St(e),Ot},ge=t=>{const e=_e(t);var a;return e===Ot&&((a=t.state).window_size=2*a.w_size,Xt(a.head),a.max_lazy_match=fe[a.level].max_lazy,a.good_match=fe[a.level].good_length,a.nice_match=fe[a.level].nice_length,a.max_chain_length=fe[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=2,a.match_available=0,a.ins_h=0),e},pe=(t,e,a,s,i,r)=>{if(!t)return Et;let n=1;if(e===Ct&&(e=6),s<0?(n=0,s=-s):s>15&&(n=2,s-=16),i<1||i>9||a!==Ht||s<8||s>15||e<0||e>9||r<0||r>Nt||8===s&&1!==n)return Gt(t,Et);8===s&&(s=9);const h=new ue;return t.state=h,h.strm=t,h.status=Wt,h.wrap=n,h.gzhead=null,h.w_bits=s,h.w_size=1<<h.w_bits,h.w_mask=h.w_size-1,h.hash_bits=i+7,h.hash_size=1<<h.hash_bits,h.hash_mask=h.hash_size-1,h.hash_shift=~~((h.hash_bits+3-1)/3),h.window=new Uint8Array(2*h.w_size),h.head=new Uint16Array(h.hash_size),h.prev=new Uint16Array(h.w_size),h.lit_bufsize=1<<i+6,h.pending_buf_size=4*h.lit_bufsize,h.pending_buf=new Uint8Array(h.pending_buf_size),h.sym_buf=h.lit_bufsize,h.sym_end=3*(h.lit_bufsize-1),h.level=e,h.strategy=r,h.method=a,ge(t)};var me={deflateInit:(t,e)=>pe(t,e,Ht,15,8,Mt),deflateInit2:pe,deflateReset:ge,deflateResetKeep:_e,deflateSetHeader:(t,e)=>ce(t)||2!==t.state.wrap?Et:(t.state.gzhead=e,Ot),deflate:(t,e)=>{if(ce(t)||e>Ut||e<0)return t?Gt(t,Et):Et;const a=t.state;if(!t.output||0!==t.avail_in&&!t.input||a.status===Yt&&e!==It)return Gt(t,0===t.avail_out?Tt:Et);const s=a.last_flush;if(a.last_flush=e,0!==a.pending){if(te(t),0===t.avail_out)return a.last_flush=-1,Ot}else if(0===t.avail_in&&qt(e)<=qt(s)&&e!==It)return Gt(t,Tt);if(a.status===Yt&&0!==t.avail_in)return Gt(t,Tt);if(a.status===Wt&&0===a.wrap&&(a.status=Kt),a.status===Wt){let e=Ht+(a.w_bits-8<<4)<<8,s=-1;if(s=a.strategy>=Pt||a.level<2?0:a.level<6?1:6===a.level?2:3,e|=s<<6,0!==a.strstart&&(e|=32),e+=31-e%31,se(a,e),0!==a.strstart&&(se(a,t.adler>>>16),se(a,65535&t.adler)),t.adler=1,a.status=Kt,te(t),0!==a.pending)return a.last_flush=-1,Ot}if(57===a.status)if(t.adler=0,ae(a,31),ae(a,139),ae(a,8),a.gzhead)ae(a,(a.gzhead.text?1:0)+(a.gzhead.hcrc?2:0)+(a.gzhead.extra?4:0)+(a.gzhead.name?8:0)+(a.gzhead.comment?16:0)),ae(a,255&a.gzhead.time),ae(a,a.gzhead.time>>8&255),ae(a,a.gzhead.time>>16&255),ae(a,a.gzhead.time>>24&255),ae(a,9===a.level?2:a.strategy>=Pt||a.level<2?4:0),ae(a,255&a.gzhead.os),a.gzhead.extra&&a.gzhead.extra.length&&(ae(a,255&a.gzhead.extra.length),ae(a,a.gzhead.extra.length>>8&255)),a.gzhead.hcrc&&(t.adler=wt(t.adler,a.pending_buf,a.pending,0)),a.gzindex=0,a.status=69;else if(ae(a,0),ae(a,0),ae(a,0),ae(a,0),ae(a,0),ae(a,9===a.level?2:a.strategy>=Pt||a.level<2?4:0),ae(a,3),a.status=Kt,te(t),0!==a.pending)return a.last_flush=-1,Ot;if(69===a.status){if(a.gzhead.extra){let e=a.pending,s=(65535&a.gzhead.extra.length)-a.gzindex;for(;a.pending+s>a.pending_buf_size;){let i=a.pending_buf_size-a.pending;if(a.pending_buf.set(a.gzhead.extra.subarray(a.gzindex,a.gzindex+i),a.pending),a.pending=a.pending_buf_size,a.gzhead.hcrc&&a.pending>e&&(t.adler=wt(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex+=i,te(t),0!==a.pending)return a.last_flush=-1,Ot;e=0,s-=i}let i=new Uint8Array(a.gzhead.extra);a.pending_buf.set(i.subarray(a.gzindex,a.gzindex+s),a.pending),a.pending+=s,a.gzhead.hcrc&&a.pending>e&&(t.adler=wt(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex=0}a.status=73}if(73===a.status){if(a.gzhead.name){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),te(t),0!==a.pending)return a.last_flush=-1,Ot;s=0}e=a.gzindex<a.gzhead.name.length?255&a.gzhead.name.charCodeAt(a.gzindex++):0,ae(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),a.gzindex=0}a.status=91}if(91===a.status){if(a.gzhead.comment){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),te(t),0!==a.pending)return a.last_flush=-1,Ot;s=0}e=a.gzindex<a.gzhead.comment.length?255&a.gzhead.comment.charCodeAt(a.gzindex++):0,ae(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s))}a.status=103}if(103===a.status){if(a.gzhead.hcrc){if(a.pending+2>a.pending_buf_size&&(te(t),0!==a.pending))return a.last_flush=-1,Ot;ae(a,255&t.adler),ae(a,t.adler>>8&255),t.adler=0}if(a.status=Kt,te(t),0!==a.pending)return a.last_flush=-1,Ot}if(0!==t.avail_in||0!==a.lookahead||e!==xt&&a.status!==Yt){let s=0===a.level?he(a,e):a.strategy===Pt?((t,e)=>{let a;for(;;){if(0===t.lookahead&&(ne(t),0===t.lookahead)){if(e===xt)return 1;break}if(t.match_length=0,a=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===It?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2})(a,e):a.strategy===Lt?((t,e)=>{let a,s,i,r;const n=t.window;for(;;){if(t.lookahead<=Vt){if(ne(t),t.lookahead<=Vt&&e===xt)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(i=t.strstart-1,s=n[i],s===n[++i]&&s===n[++i]&&s===n[++i])){r=t.strstart+Vt;do{}while(s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&i<r);t.match_length=Vt-(r-i),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(a=Rt(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===It?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2})(a,e):fe[a.level].func(a,e);if(3!==s&&4!==s||(a.status=Yt),1===s||3===s)return 0===t.avail_out&&(a.last_flush=-1),Ot;if(2===s&&(e===zt?kt(a):e!==Ut&&(vt(a,0,0,!1),e===Ft&&(Xt(a.head),0===a.lookahead&&(a.strstart=0,a.block_start=0,a.insert=0))),te(t),0===t.avail_out))return a.last_flush=-1,Ot}return e!==It?Ot:a.wrap<=0?Dt:(2===a.wrap?(ae(a,255&t.adler),ae(a,t.adler>>8&255),ae(a,t.adler>>16&255),ae(a,t.adler>>24&255),ae(a,255&t.total_in),ae(a,t.total_in>>8&255),ae(a,t.total_in>>16&255),ae(a,t.total_in>>24&255)):(se(a,t.adler>>>16),se(a,65535&t.adler)),te(t),a.wrap>0&&(a.wrap=-a.wrap),0!==a.pending?Ot:Dt)},deflateEnd:t=>{if(ce(t))return Et;const e=t.state.status;return t.state=null,e===Kt?Gt(t,At):Ot},deflateSetDictionary:(t,e)=>{let a=e.length;if(ce(t))return Et;const s=t.state,i=s.wrap;if(2===i||1===i&&s.status!==Wt||s.lookahead)return Et;if(1===i&&(t.adler=pt(t.adler,e,a,0)),s.wrap=0,a>=s.w_size){0===i&&(Xt(s.head),s.strstart=0,s.block_start=0,s.insert=0);let t=new Uint8Array(s.w_size);t.set(e.subarray(a-s.w_size,a),0),e=t,a=s.w_size}const r=t.avail_in,n=t.next_in,h=t.input;for(t.avail_in=a,t.next_in=0,t.input=e,ne(s);s.lookahead>=3;){let t=s.strstart,e=s.lookahead-2;do{s.ins_h=Qt(s,s.ins_h,s.window[t+3-1]),s.prev[t&s.w_mask]=s.head[s.ins_h],s.head[s.ins_h]=t,t++}while(--e);s.strstart=t,s.lookahead=2,ne(s)}return s.strstart+=s.lookahead,s.block_start=s.strstart,s.insert=s.lookahead,s.lookahead=0,s.match_length=s.prev_length=2,s.match_available=0,t.next_in=n,t.input=h,t.avail_in=r,s.wrap=i,Ot},deflateInfo:"pako deflate (from Nodeca project)"};const we=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var ye=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const a=e.shift();if(a){if("object"!=typeof a)throw new TypeError(a+"must be non-object");for(const e in a)we(a,e)&&(t[e]=a[e])}}return t},be=t=>{let e=0;for(let a=0,s=t.length;a<s;a++)e+=t[a].length;const a=new Uint8Array(e);for(let e=0,s=0,i=t.length;e<i;e++){let i=t[e];a.set(i,s),s+=i.length}return a};let Se=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){Se=!1}const ve=new Uint8Array(256);for(let t=0;t<256;t++)ve[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;ve[254]=ve[254]=1;var Be=t=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);let e,a,s,i,r,n=t.length,h=0;for(i=0;i<n;i++)a=t.charCodeAt(i),55296==(64512&a)&&i+1<n&&(s=t.charCodeAt(i+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),i++)),h+=a<128?1:a<2048?2:a<65536?3:4;for(e=new Uint8Array(h),r=0,i=0;r<h;i++)a=t.charCodeAt(i),55296==(64512&a)&&i+1<n&&(s=t.charCodeAt(i+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),i++)),a<128?e[r++]=a:a<2048?(e[r++]=192|a>>>6,e[r++]=128|63&a):a<65536?(e[r++]=224|a>>>12,e[r++]=128|a>>>6&63,e[r++]=128|63&a):(e[r++]=240|a>>>18,e[r++]=128|a>>>12&63,e[r++]=128|a>>>6&63,e[r++]=128|63&a);return e};var Re=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const ke=Object.prototype.toString,{Z_NO_FLUSH:xe,Z_SYNC_FLUSH:ze,Z_FULL_FLUSH:Fe,Z_FINISH:Ie,Z_OK:Ue,Z_STREAM_END:Oe,Z_DEFAULT_COMPRESSION:De,Z_DEFAULT_STRATEGY:Ee,Z_DEFLATED:Ae}=bt;function Te(t){this.options=ye({level:De,method:Ae,chunkSize:16384,windowBits:15,memLevel:8,strategy:Ee},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Re,this.strm.avail_out=0;let a=me.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(a!==Ue)throw new Error(yt[a]);if(e.header&&me.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t="string"==typeof e.dictionary?Be(e.dictionary):"[object ArrayBuffer]"===ke.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,a=me.deflateSetDictionary(this.strm,t),a!==Ue)throw new Error(yt[a]);this._dict_set=!0}}Te.prototype.push=function(t,e){const a=this.strm,s=this.options.chunkSize;let i,r;if(this.ended)return!1;for(r=e===~~e?e:!0===e?Ie:xe,"string"==typeof t?a.input=Be(t):"[object ArrayBuffer]"===ke.call(t)?a.input=new Uint8Array(t):a.input=t,a.next_in=0,a.avail_in=a.input.length;;)if(0===a.avail_out&&(a.output=new Uint8Array(s),a.next_out=0,a.avail_out=s),(r===ze||r===Fe)&&a.avail_out<=6)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else{if(i=me.deflate(a,r),i===Oe)return a.next_out>0&&this.onData(a.output.subarray(0,a.next_out)),i=me.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===Ue;if(0!==a.avail_out){if(r>0&&a.next_out>0)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else if(0===a.avail_in)break}else this.onData(a.output)}return!0},Te.prototype.onData=function(t){this.chunks.push(t)},Te.prototype.onEnd=function(t){t===Ue&&(this.result=be(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var Ce={deflate:function(t,e){const a=new Te(e);if(a.push(t,!0),a.err)throw a.msg||yt[a.err];return a.result}};const{deflate:$e}=Ce;var Pe=$e;const Le={b:{u:DataView.prototype.getInt8,p:DataView.prototype.setInt8,bytes:1},B:{u:DataView.prototype.getUint8,p:DataView.prototype.setUint8,bytes:1},h:{u:DataView.prototype.getInt16,p:DataView.prototype.setInt16,bytes:2},H:{u:DataView.prototype.getUint16,p:DataView.prototype.setUint16,bytes:2},i:{u:DataView.prototype.getInt32,p:DataView.prototype.setInt32,bytes:4},I:{u:DataView.prototype.getUint32,p:DataView.prototype.setUint32,bytes:4}},Ne=(t,...e)=>{let a=0;if(t.replace(/[<>]/,"").length!=e.length)throw"Pack format to Argument count mismatch";const s=[];let i=!0;for(let s=0;s<t.length;s++)"<"==t[s]?i=!0:">"==t[s]?i=!1:(r(t[s],e[a]),a++);function r(t,e){if(!(t in Le))throw"Unhandled character '"+t+"' in pack format";const a=Le[t].bytes,r=new DataView(new ArrayBuffer(a));Le[t].p.bind(r)(0,e,i);for(let t=0;t<a;t++)s.push(r.getUint8(t))}return s},Me=(t,e)=>{let a=0;const s=[];let i=!0;for(const e of t)"<"==e?i=!0:">"==e?i=!1:r(e);function r(t){if(!(t in Le))throw"Unhandled character '"+t+"' in unpack format";const r=Le[t].bytes,n=new DataView(new ArrayBuffer(r));for(let t=0;t<r;t++)n.setUint8(t,255&e[a+t]);const h=Le[t].u.bind(n);s.push(h(0,i)),a+=r}return s};class Ze extends EventTarget{constructor(t,e,a){super(),this.port=t,this.logger=e,this._parent=a,this.chipName=null,this.chipRevision=null,this.chipVariant=null,this._efuses=new Array(4).fill(0),this._flashsize=4194304,this.debug=!1,this.IS_STUB=!1,this.connected=!0,this.flashSize=null,this._currentBaudRate=n,this._isESP32S2NativeUSB=!1,this._initializationSucceeded=!1,this.state_DTR=!1}get _inputBuffer(){return this._parent?this._parent._inputBuffer:this.__inputBuffer}get _totalBytesRead(){return this._parent?this._parent._totalBytesRead:this.__totalBytesRead||0}set _totalBytesRead(t){this._parent?this._parent._totalBytesRead=t:this.__totalBytesRead=t}detectUSBSerialChip(t,e){const a={6790:{29986:{name:"CH340",maxBaudrate:460800},29987:{name:"CH340",maxBaudrate:460800},30084:{name:"CH340",maxBaudrate:460800},21795:{name:"CH341",maxBaudrate:2e6},21971:{name:"CH343",maxBaudrate:6e6},21972:{name:"CH9102",maxBaudrate:6e6},21976:{name:"CH9101",maxBaudrate:3e6}},4292:{6e4:{name:"CP2102(n)",maxBaudrate:3e6},60016:{name:"CP2105",maxBaudrate:2e6},60017:{name:"CP2108",maxBaudrate:2e6}},1027:{24577:{name:"FT232R",maxBaudrate:3e6},24592:{name:"FT2232",maxBaudrate:3e6},24593:{name:"FT4232",maxBaudrate:3e6},24596:{name:"FT232H",maxBaudrate:12e6},24597:{name:"FT230X",maxBaudrate:3e6}},12346:{2:{name:"ESP32-S2 Native USB",maxBaudrate:2e6},4097:{name:"ESP32 Native USB",maxBaudrate:2e6},4098:{name:"ESP32 Native USB",maxBaudrate:2e6},16386:{name:"ESP32 Native USB",maxBaudrate:2e6},4096:{name:"ESP32 Native USB",maxBaudrate:2e6}}}[t];return a&&a[e]?a[e]:{name:`Unknown (VID: 0x${t.toString(16)}, PID: 0x${e.toString(16)})`}}async initialize(){if(await this.hardReset(!0),!this._parent){this.__inputBuffer=[],this.__totalBytesRead=0;const t=this.port.getInfo();if(t.usbVendorId&&t.usbProductId){const e=this.detectUSBSerialChip(t.usbVendorId,t.usbProductId);this.logger.log(`USB-Serial: ${e.name} (VID: 0x${t.usbVendorId.toString(16)}, PID: 0x${t.usbProductId.toString(16)})`),e.maxBaudrate&&(this._maxUSBSerialBaudrate=e.maxBaudrate,this.logger.log(`Max baudrate: ${e.maxBaudrate}`)),12346===t.usbVendorId&&2===t.usbProductId&&(this._isESP32S2NativeUSB=!0)}this.readLoop()}await this.drainInputBuffer(200),await this.flushSerialBuffers(),await this.sync(),await this.detectChip();const t=I(this.getChipFamily()),e=t.macFuse;for(let t=0;t<4;t++)this._efuses[t]=await this.readRegister(e+4*t);this.logger.log(`Chip type ${this.chipName}`),this.logger.debug(`Bootloader flash offset: 0x${t.flashOffs.toString(16)}`),this._initializationSucceeded=!0}async detectChip(){try{const t=(await this.getSecurityInfo()).chipId,e=B[t];if(e)return this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===S&&(this.chipRevision=await this.getChipRevision(),this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`),this.chipRevision>=300?this.chipVariant="rev300":this.chipVariant="rev0",this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`)),void this.logger.debug(`Detected chip via IMAGE_CHIP_ID: ${t} (${this.chipName})`);this.logger.debug(`Unknown IMAGE_CHIP_ID: ${t}, falling back to magic value detection`)}catch(t){this.logger.debug(`GET_SECURITY_INFO failed, using magic value detection: ${t}`),await this.drainInputBuffer(200),this._inputBuffer.length=0,await i(z);try{await this.sync()}catch(t){this.logger.debug(`Re-sync after GET_SECURITY_INFO failure: ${t}`)}}const t=await this.readRegister(1073745920),e=R[t>>>0];if(void 0===e)throw new Error(`Unknown Chip: Hex: ${s(t>>>0,8).toLowerCase()} Number: ${t}`);this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===S&&(this.chipRevision=await this.getChipRevision(),this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`),this.chipRevision>=300?this.chipVariant="rev300":this.chipVariant="rev0",this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`)),this.logger.debug(`Detected chip via magic value: ${s(t>>>0,8)} (${this.chipName})`)}async getChipRevision(){if(this.chipFamily!==S)return 0;const t=await this.readRegister(1343410252);return 100*((t>>23&1)<<2|t>>4&3)+(15&t)}async getSecurityInfo(){const[,t]=await this.checkCommand(20,[],0);if(0===t.length)throw new Error("GET_SECURITY_INFO not supported or returned empty response");if(t.length<12)throw new Error(`Invalid security info response length: ${t.length} (expected at least 12 bytes)`);return{flags:Me("<I",t.slice(0,4))[0],flashCryptCnt:t[4],keyPurposes:Array.from(t.slice(5,12)),chipId:t.length>=16?Me("<I",t.slice(12,16))[0]:0,apiVersion:t.length>=20?Me("<I",t.slice(16,20))[0]:0}}async readLoop(){this.debug&&this.logger.debug("Starting read loop"),this._reader=this.port.readable.getReader();try{let t=!0;for(;t;){const{value:e,done:a}=await this._reader.read();if(a){this._reader.releaseLock(),t=!1;break}if(!e||0===e.length)continue;const s=Array.from(e);Array.prototype.push.apply(this._inputBuffer,s),this._totalBytesRead+=e.length}}catch{this.logger.error("Read loop got disconnected")}this.connected=!1,this._isESP32S2NativeUSB&&!this._initializationSucceeded&&(this.logger.log("ESP32-S2 Native USB detected - requesting port reselection"),this.dispatchEvent(new CustomEvent("esp32s2-usb-reconnect",{detail:{message:"ESP32-S2 Native USB requires port reselection"}}))),this.dispatchEvent(new Event("disconnect")),this.logger.debug("Finished read loop")}sleep(t=100){return new Promise(e=>setTimeout(e,t))}async setRTS(t){await this.port.setSignals({requestToSend:t}),await this.setDTR(this.state_DTR)}async setDTR(t){this.state_DTR=t,await this.port.setSignals({dataTerminalReady:t})}async hardReset(t=!1){t?4097===this.port.getInfo().usbProductId?(await this.setDTR(!1),await this.setRTS(!1),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(100),await this.setRTS(!0),await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!1),await this.setRTS(!1),this.logger.log("USB MCU reset.")):(await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(50),await this.setDTR(!1),this.logger.log("DTR/RTS USB serial chip reset.")):(await this.setRTS(!0),await this.sleep(100),await this.setRTS(!1),this.logger.log("Hard reset.")),await new Promise(t=>setTimeout(t,1e3))}macAddr(){const t=new Array(6).fill(0),e=this._efuses[0],a=this._efuses[1],s=this._efuses[2],i=this._efuses[3];let r;if(this.chipFamily==l){if(0!=i)r=[i>>16&255,i>>8&255,255&i];else if(a>>16&255){if(1!=(a>>16&255))throw new Error("Couldnt determine OUI");r=[172,208,116]}else r=[24,254,52];t[0]=r[0],t[1]=r[1],t[2]=r[2],t[3]=a>>8&255,t[4]=255&a,t[5]=e>>24&255}else if(this.chipFamily==d)t[0]=s>>8&255,t[1]=255&s,t[2]=a>>24&255,t[3]=a>>16&255,t[4]=a>>8&255,t[5]=255&a;else{if(this.chipFamily!=f&&this.chipFamily!=u&&this.chipFamily!=c&&this.chipFamily!=_&&this.chipFamily!=g&&this.chipFamily!=p&&this.chipFamily!=m&&this.chipFamily!=w&&this.chipFamily!=y&&this.chipFamily!=b&&this.chipFamily!=S&&this.chipFamily!=v)throw new Error("Unknown chip family");t[0]=a>>8&255,t[1]=255&a,t[2]=e>>24&255,t[3]=e>>16&255,t[4]=e>>8&255,t[5]=255&e}return t}async readRegister(t){this.debug&&this.logger.debug("Reading from Register "+s(t,8));const e=Ne("<I",t);await this.sendCommand(10,e);const[a]=await this.getResponse(10);return a}async checkCommand(t,e,a=0,i=3e3){i=Math.min(i,3e5),await this.sendCommand(t,e,a);const[r,n]=await this.getResponse(t,i);if(null===n)throw new Error("Didn't get enough status bytes");let h=n,o=0;if(this.IS_STUB||this.chipFamily==l?o=2:[d,f,u,c,_,g,p,m,w,y,b,S,v].includes(this.chipFamily)||20===t?o=4:[2,4].includes(h.length)&&(o=h.length),h.length<o)throw new Error("Didn't get enough status bytes");const B=h.slice(-o,h.length);if(h=h.slice(0,-o),this.debug&&(this.logger.debug("status",B),this.logger.debug("value",r),this.logger.debug("data",h)),1==B[0])throw 5==B[1]?(await this.drainInputBuffer(200),new Error("Invalid (unsupported) command "+s(t))):new Error("Command failure error code "+s(B[1]));return[r,h]}async sendCommand(e,a,s=0){const i=t([...Ne("<BBHI",0,e,a.length,s),...a]);this.debug&&this.logger.debug(`Writing ${i.length} byte${1==i.length?"":"s"}:`,i),await this.writeToStream(i)}async readPacket(t){let e=null,r=!1,n=[];for(;;){const h=Date.now();for(n=[];Date.now()-h<t;){if(this._inputBuffer.length>0){n.push(this._inputBuffer.shift());break}await i(1)}if(0==n.length){throw new U("Timed out waiting for packet "+(null===e?"header":"content"))}this.debug&&this.logger.debug("Read "+n.length+" bytes: "+a(n));for(const t of n)if(null===e){if(192!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(n)),this.logger.debug("Remaining data in serial buffer: "+a(this._inputBuffer))),new U("Invalid head of packet ("+s(t)+")");e=[]}else if(r)if(r=!1,220==t)e.push(192);else{if(221!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(n)),this.logger.debug("Remaining data in serial buffer: "+a(this._inputBuffer))),new U("Invalid SLIP escape (0xdb, "+s(t)+")");e.push(219)}else if(219==t)r=!0;else{if(192==t)return this.debug&&this.logger.debug("Received full packet: "+a(e)),e;e.push(t)}}throw new U("Invalid state")}async getResponse(t,e=3e3){for(let a=0;a<100;a++){const a=await this.readPacket(e);if(a.length<8)continue;const[i,r,,n]=Me("<BBHI",a.slice(0,8));if(1!=i)continue;const h=a.slice(8);if(null==t||r==t)return[n,h];if(0!=h[0]&&5==h[1])throw await this.drainInputBuffer(200),new Error(`Invalid (unsupported) command ${s(t)}`)}throw"Response doesn't match request"}checksum(t,e=239){for(const a of t)e^=a;return e}async setBaudrate(t){if(this.chipFamily==l)throw new Error("Changing baud rate is not supported on the ESP8266");try{const e=Ne("<II",t,this.IS_STUB?n:0);await this.checkCommand(15,e)}catch(e){throw this.logger.error(`Baudrate change error: ${e}`),new Error(`Unable to change the baud rate to ${t}: No response from set baud rate command.`)}this._parent?await this._parent.reconfigurePort(t):await this.reconfigurePort(t),await i(z),this._parent?this._parent._currentBaudRate=t:this._currentBaudRate=t;const e=this._parent?this._parent._maxUSBSerialBaudrate:this._maxUSBSerialBaudrate;e&&t>e&&(this.logger.log(`⚠️ WARNING: Baudrate ${t} exceeds USB-Serial chip limit (${e})!`),this.logger.log("⚠️ This may cause data corruption or connection failures!")),this.logger.log(`Changed baud rate to ${t}`)}async reconfigurePort(t){var e;try{await(null===(e=this._reader)||void 0===e?void 0:e.cancel()),await this.port.close(),await this.port.open({baudRate:t}),await this.flushSerialBuffers(),this.readLoop()}catch(e){throw this.logger.error(`Reconfigure port error: ${e}`),new Error(`Unable to change the baud rate to ${t}: ${e}`)}}async sync(){for(let t=0;t<5;t++){this._inputBuffer.length=0;if(await this._sync())return await i(z),!0;await i(z)}throw new Error("Couldn't sync to ESP. Try resetting.")}async _sync(){await this.sendCommand(8,o);for(let t=0;t<8;t++)try{const[,t]=await this.getResponse(8,z);if(t.length>1&&0==t[0]&&0==t[1])return!0}catch{}return!1}getFlashWriteSize(){return this.IS_STUB?16384:1024}async flashData(t,e,a=0,i=!1){if(t.byteLength>=8){const e=Array.from(new Uint8Array(t,0,4)),a=e[0],i=e[2],r=e[3];this.logger.log(`Image header, Magic=${s(a)}, FlashMode=${s(i)}, FlashSizeFreq=${s(r)}`)}const r=t.byteLength;let n,h=0,o=k;i?(n=Pe(new Uint8Array(t),{level:9}).buffer,h=n.byteLength,this.logger.log(`Writing data with filesize: ${r}. Compressed Size: ${h}`),o=await this.flashDeflBegin(r,h,a)):(this.logger.log(`Writing data with filesize: ${r}`),n=t,await this.flashBegin(r,a));let l=[],d=0,f=0,u=0;const c=Date.now(),_=this.getFlashWriteSize(),g=i?h:r;for(;g-u>0;)this.debug&&this.logger.log(`Writing at ${s(a+d*_,8)} `),g-u>=_?l=Array.from(new Uint8Array(n,u,_)):(l=Array.from(new Uint8Array(n,u,g-u)),i||(l=l.concat(new Array(_-l.length).fill(255)))),i?await this.flashDeflBlock(l,d,o):await this.flashBlock(l,d),d+=1,f+=i?Math.round(l.length*r/h):l.length,u+=_,e(Math.min(f,r),r);this.logger.log("Took "+(Date.now()-c)+"ms to write "+g+" bytes"),this.IS_STUB&&(await this.flashBegin(0,0),i?await this.flashDeflFinish():await this.flashFinish())}async flashBlock(t,e,a=3e3){await this.checkCommand(3,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t),a)}async flashDeflBlock(t,e,a=3e3){await this.checkCommand(17,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t),a)}async flashBegin(t=0,e=0,a=!1){let i;await this.flushSerialBuffers();const r=this.getFlashWriteSize();!this.IS_STUB&&[d,f,u,c,_,g,p,m,w,y,b,S,v].includes(this.chipFamily)&&await this.checkCommand(13,new Array(8).fill(0));const n=Math.floor((t+r-1)/r);i=this.chipFamily==l?this.getEraseSize(e,t):t;const h=this.IS_STUB?k:F(3e4,t),o=Date.now();let B=Ne("<IIII",i,n,r,e);return this.chipFamily!=d&&this.chipFamily!=f&&this.chipFamily!=u&&this.chipFamily!=c&&this.chipFamily!=_&&this.chipFamily!=g&&this.chipFamily!=p&&this.chipFamily!=m&&this.chipFamily!=w&&this.chipFamily!=y&&this.chipFamily!=b&&this.chipFamily!=S&&this.chipFamily!=v||(B=B.concat(Ne("<I",a?1:0))),this.logger.log("Erase size "+i+", blocks "+n+", block size "+s(r,4)+", offset "+s(e,4)+", encrypted "+(a?"yes":"no")),await this.checkCommand(2,B,0,h),0==t||this.IS_STUB||this.logger.log("Took "+(Date.now()-o)+"ms to erase "+n+" bytes"),n}async flashDeflBegin(t=0,e=0,a=0){const s=this.getFlashWriteSize(),i=Math.floor((e+s-1)/s),r=Math.floor((t+s-1)/s);let n=0,h=0;this.IS_STUB?(n=t,h=F(3e4,n)):(n=r*s,h=k);const o=Ne("<IIII",n,i,s,a);return await this.checkCommand(16,o,0,h),h}async flashFinish(){const t=Ne("<I",1);await this.checkCommand(4,t)}async flashDeflFinish(){const t=Ne("<I",1);await this.checkCommand(18,t)}getBootloaderOffset(){return I(this.getChipFamily()).flashOffs}async flashId(){return await this.runSpiFlashCommand(159,[],24)}getChipFamily(){return this._parent?this._parent.chipFamily:this.chipFamily}async writeRegister(t,e,a=4294967295,s=0,i=0){let r=Ne("<IIII",t,e,a,s);i>0&&(r=r.concat(Ne("<IIII",I(this.getChipFamily()).uartDateReg,0,0,i))),await this.checkCommand(9,r)}async setDataLengths(t,e,a){if(-1!=t.mosiDlenOffs){const s=t.regBase+t.mosiDlenOffs,i=t.regBase+t.misoDlenOffs;e>0&&await this.writeRegister(s,e-1),a>0&&await this.writeRegister(i,a-1)}else{const s=t.regBase+t.usr1Offs,i=(0==a?0:a-1)<<8|(0==e?0:e-1)<<17;await this.writeRegister(s,i)}}async waitDone(t,e){for(let a=0;a<10;a++){if(0==(await this.readRegister(t)&e))return}throw Error("SPI command did not complete in time")}async runSpiFlashCommand(t,e,a=0){const i=I(this.getChipFamily()),r=i.regBase,n=r,h=r+i.usrOffs,o=r+i.usr2Offs,l=r+i.w0Offs,d=1<<18;if(a>32)throw new Error("Reading more than 32 bits back from a SPI flash operation is unsupported");if(e.length>64)throw new Error("Writing more than 64 bytes of data with one SPI command is unsupported");const f=8*e.length,u=await this.readRegister(h),c=await this.readRegister(o);let _=1<<31;if(a>0&&(_|=268435456),f>0&&(_|=134217728),await this.setDataLengths(i,f,a),await this.writeRegister(h,_),await this.writeRegister(o,7<<28|t),0==f)await this.writeRegister(l,0);else{const t=(4-e.length%4)%4;e=e.concat(new Array(t).fill(0));const a=Me("I".repeat(Math.floor(e.length/4)),e);let i=l;this.logger.debug(`Words Length: ${a.length}`);for(const t of a)this.logger.debug(`Writing word ${s(t)} to register offset ${s(i)}`),await this.writeRegister(i,t),i+=4}await this.writeRegister(n,d),await this.waitDone(n,d);const g=await this.readRegister(l);return await this.writeRegister(h,u),await this.writeRegister(o,c),g}async detectFlashSize(){this.logger.log("Detecting Flash Size");const t=await this.flashId(),e=255&t,a=t>>16&255;this.logger.log(`FlashId: ${s(t)}`),this.logger.log(`Flash Manufacturer: ${e.toString(16)}`),this.logger.log(`Flash Device: ${(t>>8&255).toString(16)}${a.toString(16)}`),this.flashSize=r[a],this.logger.log(`Auto-detected Flash size: ${this.flashSize}`)}getEraseSize(t,e){const a=4096,s=Math.floor((e+a-1)/a);let i=16-Math.floor(t/a)%16;return s<i&&(i=s),s<2*i?Math.floor((s+1)/2*a):(s-i)*a}async memBegin(t,e,a,s){return await this.checkCommand(5,Ne("<IIII",t,e,a,s))}async memBlock(t,e){return await this.checkCommand(7,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t))}async memFinish(t=0){const e=this.IS_STUB?k:500,a=Ne("<II",0==t?1:0,t);return await this.checkCommand(6,a,0,e)}async runStub(t=!1){const e=await O(this.chipFamily,this.chipRevision);if(null===e)return this.logger.log(`Stub flasher is not yet supported on ${this.chipName}, using ROM loader`),this;const a=2048;this.logger.log("Uploading stub...");for(const t of["text","data"]){const s=e[t],i=e[`${t}_start`],r=s.length,n=Math.floor((r+a-1)/a);await this.memBegin(r,n,a,i);for(const t of Array(n).keys()){const e=t*a;let i=e+a;i>r&&(i=r),await this.memBlock(s.slice(e,i),t)}}await this.memFinish(e.entry);const s=await this.readPacket(500),i=String.fromCharCode(...s);if("OHAI"!=i)throw new Error("Failed to start stub. Unexpected response: "+i);this.logger.log("Stub is now running...");const r=new He(this.port,this.logger,this);return t||await r.detectFlashSize(),r}async writeToStream(t){if(!this.port.writable)return void this.logger.debug("Port writable stream not available, skipping write");const e=this.port.writable.getWriter();await e.write(new Uint8Array(t));try{e.releaseLock()}catch(t){this.logger.error(`Ignoring release lock error: ${t}`)}}async disconnect(){this._parent?await this._parent.disconnect():this.port.writable?(await this.port.writable.getWriter().close(),await new Promise(t=>{this._reader||t(void 0),this.addEventListener("disconnect",t,{once:!0}),this._reader.cancel()}),this.connected=!1):this.logger.debug("Port already closed, skipping disconnect")}async reconnect(){if(this._parent)return void await this._parent.reconnect();if(this.logger.log("Reconnecting serial port..."),this.connected=!1,this.__inputBuffer=[],this._reader){try{await this._reader.cancel()}catch(t){this.logger.debug(`Reader cancel error: ${t}`)}this._reader=void 0}try{await this.port.close(),this.logger.log("Port closed")}catch(t){this.logger.debug(`Port close error: ${t}`)}this.logger.debug("Opening port...");try{await this.port.open({baudRate:n}),this.connected=!0}catch(t){throw new Error(`Failed to open port: ${t}`)}if(!this.port.readable||!this.port.writable)throw new Error(`Port streams not available after open (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);const t=this.chipFamily,e=this.chipName,a=this.chipRevision,s=this.chipVariant,i=this.flashSize;if(await this.hardReset(!0),this._parent||(this.__inputBuffer=[],this.__totalBytesRead=0,this.readLoop()),await this.flushSerialBuffers(),await this.sync(),this.chipFamily=t,this.chipName=e,this.chipRevision=a,this.chipVariant=s,this.flashSize=i,this.logger.debug(`Reconnect complete (chip: ${this.chipName})`),!this.port.writable||!this.port.readable)throw new Error("Port not ready after reconnect");const r=await this.runStub(!0);if(this.logger.debug("Stub loaded"),this._currentBaudRate!==n&&(await r.setBaudrate(this._currentBaudRate),!this.port.writable||!this.port.readable))throw new Error(`Port not ready after baudrate change (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);this.IS_STUB&&Object.assign(this,r),this.logger.debug("Reconnection successful")}async drainInputBuffer(t=200){await i(t);let e=0;const a=Date.now();for(;e<112&&Date.now()-a<100;)if(this._inputBuffer.length>0){void 0!==this._inputBuffer.shift()&&e++}else await i(1);e>0&&this.logger.debug(`Drained ${e} bytes from input buffer`),this._parent||(this.__inputBuffer=[])}async flushSerialBuffers(){this._parent||(this.__inputBuffer=[]),await i(z),this._parent||(this.__inputBuffer=[]),this.logger.debug("Serial buffers flushed")}async readFlash(e,a,s){if(!this.IS_STUB)throw new Error("Reading flash is only supported in stub mode. Please run runStub() first.");await this.flushSerialBuffers(),this.logger.log(`Reading ${a} bytes from flash at address 0x${e.toString(16)}...`);let r=new Uint8Array(0),n=e,h=a;for(;h>0;){const e=Math.min(65536,h);let o=!1,l=0;const d=5;for(;!o&&l<=d;){let a=new Uint8Array(0);try{this.logger.debug(`Reading chunk at 0x${n.toString(16)}, size: 0x${e.toString(16)}`);const s=Ne("<IIII",n,e,4096,1024),[i]=await this.checkCommand(210,s);if(0!=i)throw new Error("Failed to read memory: "+i);for(;a.length<e;){let s;try{s=await this.readPacket(100)}catch(s){if(s instanceof U){if(this.logger.debug(`SLIP read error at ${a.length} bytes: ${s.message}`),a.length>0)try{const e=Ne("<I",a.length),s=t(e);await this.writeToStream(s)}catch(t){this.logger.debug(`ACK send error: ${t}`)}if(await this.drainInputBuffer(300),a.length>=e)break}throw s}if(s&&s.length>0){const e=new Uint8Array(s),i=new Uint8Array(a.length+e.length);i.set(a),i.set(e,a.length),a=i;const r=Ne("<I",a.length),n=t(r);await this.writeToStream(n)}}const h=new Uint8Array(r.length+a.length);h.set(r),h.set(a,r.length),r=h,o=!0}catch(t){if(l++,!(t instanceof U))throw t;if(!(l<=d))throw new Error(`Failed to read chunk at 0x${n.toString(16)} after ${d} retries: ${t}`);this.logger.log(`⚠️ ${t.message} at 0x${n.toString(16)}. Draining buffer and retrying (attempt ${l}/${d})...`);try{await this.drainInputBuffer(300),await this.flushSerialBuffers(),await i(z)}catch(t){this.logger.debug(`Buffer drain error: ${t}`)}}}s&&s(new Uint8Array(e),r.length,a),n+=e,h-=e,this.logger.debug(`Total progress: 0x${r.length.toString(16)} from 0x${a.toString(16)} bytes`)}return this.logger.debug(`Successfully read ${r.length} bytes from flash`),r}}class He extends Ze{constructor(){super(...arguments),this.IS_STUB=!0}async memBegin(t,e,a,i){const r=await O(this.chipFamily,this.chipRevision);if(null===r)return[0,[]];const n=i,h=i+t;this.logger.debug(`Load range: ${s(n,8)}-${s(h,8)}`),this.logger.debug(`Stub data: ${s(r.data_start,8)}, len: ${r.data.length}, text: ${s(r.text_start,8)}, len: ${r.text.length}`);for(const[t,e]of[[r.data_start,r.data_start+r.data.length],[r.text_start,r.text_start+r.text.length]])if(n<e&&h>t)throw new Error("Software loader is resident at "+s(t,8)+"-"+s(e,8)+". Can't load binary at overlapping address range "+s(n,8)+"-"+s(h,8)+". Try changing the binary loading address.");return[0,[]]}async eraseFlash(){await this.checkCommand(208,[],0,x)}}const Ve=async t=>{const e=await navigator.serial.requestPort();return await e.open({baudRate:n}),t.log("Connected successfully."),new Ze(e,t)};export{d as CHIP_FAMILY_ESP32,c as CHIP_FAMILY_ESP32C2,_ as CHIP_FAMILY_ESP32C3,g as CHIP_FAMILY_ESP32C5,p as CHIP_FAMILY_ESP32C6,m as CHIP_FAMILY_ESP32C61,w as CHIP_FAMILY_ESP32H2,b as CHIP_FAMILY_ESP32H21,y as CHIP_FAMILY_ESP32H4,S as CHIP_FAMILY_ESP32P4,f as CHIP_FAMILY_ESP32S2,u as CHIP_FAMILY_ESP32S3,v as CHIP_FAMILY_ESP32S31,l as CHIP_FAMILY_ESP8266,Ze as ESPLoader,Ve as connect};
@@ -1 +1 @@
1
- const t=t=>{let e=[192];for(const a of t)219==a?e=e.concat([219,221]):192==a?e=e.concat([219,220]):e.push(a);return e.push(192),e},e=t=>{const e=[];for(let a=0;a<t.length;a++){const s=t.charCodeAt(a);s<=255&&e.push(s)}return e},a=t=>"["+t.map(t=>s(t)).join(", ")+"]",s=(t,e=2)=>{const a=t.toString(16).toUpperCase();return a.startsWith("-")?"-0x"+a.substring(1).padStart(e,"0"):"0x"+a.padStart(e,"0")},i=t=>new Promise(e=>setTimeout(e,t)),r={18:"256KB",19:"512KB",20:"1MB",21:"2MB",22:"4MB",23:"8MB",24:"16MB",25:"32MB",26:"64MB",27:"128MB",28:"256MB",32:"64MB",33:"128MB",34:"256MB",50:"256KB",51:"512KB",52:"1MB",53:"2MB",54:"4MB",55:"8MB",56:"16MB",57:"32MB",58:"64MB"},n=115200,h=1343410176,o=e(" UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"),l=33382,d=50,u=12882,f=12883,c=12994,_=12995,g=12997,p=12998,m=207969,w=12914,y=12916,b=12917,v=12928,S=12849,B={5:{name:"ESP32-C3",family:_},9:{name:"ESP32-S3",family:f},12:{name:"ESP32-C2",family:c},13:{name:"ESP32-C6",family:p},16:{name:"ESP32-H2",family:w},18:{name:"ESP32-P4",family:v},20:{name:"ESP32-C61",family:m},23:{name:"ESP32-C5",family:g},25:{name:"ESP32-H21",family:b},28:{name:"ESP32-H4",family:y},32:{name:"ESP32-S31",family:S}},R={4293968129:{name:"ESP8266",family:l},15736195:{name:"ESP32",family:d},1990:{name:"ESP32-S2",family:u}},k=3e3,x=15e4,z=100,F=(t,e)=>{const a=Math.floor(t*(e/486));return a<k?k:a},U=t=>{switch(t){case d:return{regBase:1072963584,baseFuse:1073061888,macFuse:1073061888,usrOffs:28,usr1Offs:32,usr2Offs:36,mosiDlenOffs:40,misoDlenOffs:44,w0Offs:128,uartDateReg:1610612856,flashOffs:4096};case u:return{regBase:1061167104,baseFuse:1061265408,macFuse:1061265476,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612856,flashOffs:4096};case f:return{regBase:1610620928,usrOffs:24,baseFuse:1610641408,macFuse:1610641476,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612864,flashOffs:0};case l:return{regBase:1610613248,usrOffs:28,baseFuse:1072693328,macFuse:1072693328,usr1Offs:32,usr2Offs:36,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:64,uartDateReg:1610612856,flashOffs:0};case c:case _:return{regBase:1610620928,baseFuse:1610647552,macFuse:1610647620,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case g:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:8192};case p:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case m:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case w:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case y:return{regBase:1611239424,baseFuse:1611339776,macFuse:1611339844,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610686588,flashOffs:8192};case b:return{regBase:1610625024,baseFuse:1611350016,macFuse:1611350084,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case v:return{regBase:1342754816,baseFuse:h,macFuse:1343410244,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1343004812,flashOffs:8192};case S:return{regBase:542113792,baseFuse:544296960,macFuse:544297028,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:540582028,flashOffs:8192};default:return{regBase:-1,baseFuse:-1,macFuse:-1,usrOffs:-1,usr1Offs:-1,usr2Offs:-1,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:-1,uartDateReg:-1,flashOffs:-1}}};class I extends Error{constructor(t){super(t),this.name="SlipReadError"}}const O=async(t,a)=>{let s;return t==y||t==b||t==S?null:(t==d?s=await import("./esp32-CijhsJH1.js"):t==u?s=await import("./esp32s2-IiDBtXxo.js"):t==f?s=await import("./esp32s3-6yv5yxum.js"):t==l?s=await import("./esp8266-CUwxJpGa.js"):t==c?s=await import("./esp32c2-C17SM4gO.js"):t==_?s=await import("./esp32c3-DxRGijbg.js"):t==g?s=await import("./esp32c5-3mDOIGa4.js"):t==p?s=await import("./esp32c6-h6U0SQTm.js"):t==m?s=await import("./esp32c61-BKtexhPZ.js"):t==w?s=await import("./esp32h2-RtuWSEmP.js"):t==v&&(s=null!=a&&a>=300?await import("./esp32p4r3-CpHBYEwI.js"):await import("./esp32p4-5nkIjxqJ.js")),{...s,text:e(atob(s.text)),data:e(atob(s.data))})};function D(t){let e=t.length;for(;--e>=0;)t[e]=0}const E=256,A=286,T=30,C=15,$=new Uint8Array([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]),P=new Uint8Array([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]),L=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),N=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),M=new Array(576);D(M);const Z=new Array(60);D(Z);const H=new Array(512);D(H);const V=new Array(256);D(V);const j=new Array(29);D(j);const W=new Array(T);function K(t,e,a,s,i){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=s,this.max_length=i,this.has_stree=t&&t.length}let Y,G,q;function X(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}D(W);const J=t=>t<256?H[t]:H[256+(t>>>7)],Q=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},tt=(t,e,a)=>{t.bi_valid>16-a?(t.bi_buf|=e<<t.bi_valid&65535,Q(t,t.bi_buf),t.bi_buf=e>>16-t.bi_valid,t.bi_valid+=a-16):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=a)},et=(t,e,a)=>{tt(t,a[2*e],a[2*e+1])},at=(t,e)=>{let a=0;do{a|=1&t,t>>>=1,a<<=1}while(--e>0);return a>>>1},st=(t,e,a)=>{const s=new Array(16);let i,r,n=0;for(i=1;i<=C;i++)n=n+a[i-1]<<1,s[i]=n;for(r=0;r<=e;r++){let e=t[2*r+1];0!==e&&(t[2*r]=at(s[e]++,e))}},it=t=>{let e;for(e=0;e<A;e++)t.dyn_ltree[2*e]=0;for(e=0;e<T;e++)t.dyn_dtree[2*e]=0;for(e=0;e<19;e++)t.bl_tree[2*e]=0;t.dyn_ltree[512]=1,t.opt_len=t.static_len=0,t.sym_next=t.matches=0},rt=t=>{t.bi_valid>8?Q(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},nt=(t,e,a,s)=>{const i=2*e,r=2*a;return t[i]<t[r]||t[i]===t[r]&&s[e]<=s[a]},ht=(t,e,a)=>{const s=t.heap[a];let i=a<<1;for(;i<=t.heap_len&&(i<t.heap_len&&nt(e,t.heap[i+1],t.heap[i],t.depth)&&i++,!nt(e,s,t.heap[i],t.depth));)t.heap[a]=t.heap[i],a=i,i<<=1;t.heap[a]=s},ot=(t,e,a)=>{let s,i,r,n,h=0;if(0!==t.sym_next)do{s=255&t.pending_buf[t.sym_buf+h++],s+=(255&t.pending_buf[t.sym_buf+h++])<<8,i=t.pending_buf[t.sym_buf+h++],0===s?et(t,i,e):(r=V[i],et(t,r+E+1,e),n=$[r],0!==n&&(i-=j[r],tt(t,i,n)),s--,r=J(s),et(t,r,a),n=P[r],0!==n&&(s-=W[r],tt(t,s,n)))}while(h<t.sym_next);et(t,256,e)},lt=(t,e)=>{const a=e.dyn_tree,s=e.stat_desc.static_tree,i=e.stat_desc.has_stree,r=e.stat_desc.elems;let n,h,o,l=-1;for(t.heap_len=0,t.heap_max=573,n=0;n<r;n++)0!==a[2*n]?(t.heap[++t.heap_len]=l=n,t.depth[n]=0):a[2*n+1]=0;for(;t.heap_len<2;)o=t.heap[++t.heap_len]=l<2?++l:0,a[2*o]=1,t.depth[o]=0,t.opt_len--,i&&(t.static_len-=s[2*o+1]);for(e.max_code=l,n=t.heap_len>>1;n>=1;n--)ht(t,a,n);o=r;do{n=t.heap[1],t.heap[1]=t.heap[t.heap_len--],ht(t,a,1),h=t.heap[1],t.heap[--t.heap_max]=n,t.heap[--t.heap_max]=h,a[2*o]=a[2*n]+a[2*h],t.depth[o]=(t.depth[n]>=t.depth[h]?t.depth[n]:t.depth[h])+1,a[2*n+1]=a[2*h+1]=o,t.heap[1]=o++,ht(t,a,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const a=e.dyn_tree,s=e.max_code,i=e.stat_desc.static_tree,r=e.stat_desc.has_stree,n=e.stat_desc.extra_bits,h=e.stat_desc.extra_base,o=e.stat_desc.max_length;let l,d,u,f,c,_,g=0;for(f=0;f<=C;f++)t.bl_count[f]=0;for(a[2*t.heap[t.heap_max]+1]=0,l=t.heap_max+1;l<573;l++)d=t.heap[l],f=a[2*a[2*d+1]+1]+1,f>o&&(f=o,g++),a[2*d+1]=f,d>s||(t.bl_count[f]++,c=0,d>=h&&(c=n[d-h]),_=a[2*d],t.opt_len+=_*(f+c),r&&(t.static_len+=_*(i[2*d+1]+c)));if(0!==g){do{for(f=o-1;0===t.bl_count[f];)f--;t.bl_count[f]--,t.bl_count[f+1]+=2,t.bl_count[o]--,g-=2}while(g>0);for(f=o;0!==f;f--)for(d=t.bl_count[f];0!==d;)u=t.heap[--l],u>s||(a[2*u+1]!==f&&(t.opt_len+=(f-a[2*u+1])*a[2*u],a[2*u+1]=f),d--)}})(t,e),st(a,l,t.bl_count)},dt=(t,e,a)=>{let s,i,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),e[2*(a+1)+1]=65535,s=0;s<=a;s++)i=n,n=e[2*(s+1)+1],++h<o&&i===n||(h<l?t.bl_tree[2*i]+=h:0!==i?(i!==r&&t.bl_tree[2*i]++,t.bl_tree[32]++):h<=10?t.bl_tree[34]++:t.bl_tree[36]++,h=0,r=i,0===n?(o=138,l=3):i===n?(o=6,l=3):(o=7,l=4))},ut=(t,e,a)=>{let s,i,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),s=0;s<=a;s++)if(i=n,n=e[2*(s+1)+1],!(++h<o&&i===n)){if(h<l)do{et(t,i,t.bl_tree)}while(0!==--h);else 0!==i?(i!==r&&(et(t,i,t.bl_tree),h--),et(t,16,t.bl_tree),tt(t,h-3,2)):h<=10?(et(t,17,t.bl_tree),tt(t,h-3,3)):(et(t,18,t.bl_tree),tt(t,h-11,7));h=0,r=i,0===n?(o=138,l=3):i===n?(o=6,l=3):(o=7,l=4)}};let ft=!1;const ct=(t,e,a,s)=>{tt(t,0+(s?1:0),3),rt(t),Q(t,a),Q(t,~a),a&&t.pending_buf.set(t.window.subarray(e,e+a),t.pending),t.pending+=a};var _t=(t,e,a,s)=>{let i,r,n=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,a=4093624447;for(e=0;e<=31;e++,a>>>=1)if(1&a&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e<E;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0})(t)),lt(t,t.l_desc),lt(t,t.d_desc),n=(t=>{let e;for(dt(t,t.dyn_ltree,t.l_desc.max_code),dt(t,t.dyn_dtree,t.d_desc.max_code),lt(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*N[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),i=t.opt_len+3+7>>>3,r=t.static_len+3+7>>>3,r<=i&&(i=r)):i=r=a+5,a+4<=i&&-1!==e?ct(t,e,a,s):4===t.strategy||r===i?(tt(t,2+(s?1:0),3),ot(t,M,Z)):(tt(t,4+(s?1:0),3),((t,e,a,s)=>{let i;for(tt(t,e-257,5),tt(t,a-1,5),tt(t,s-4,4),i=0;i<s;i++)tt(t,t.bl_tree[2*N[i]+1],3);ut(t,t.dyn_ltree,e-1),ut(t,t.dyn_dtree,a-1)})(t,t.l_desc.max_code+1,t.d_desc.max_code+1,n+1),ot(t,t.dyn_ltree,t.dyn_dtree)),it(t),s&&rt(t)},gt={_tr_init:t=>{ft||((()=>{let t,e,a,s,i;const r=new Array(16);for(a=0,s=0;s<28;s++)for(j[s]=a,t=0;t<1<<$[s];t++)V[a++]=s;for(V[a-1]=s,i=0,s=0;s<16;s++)for(W[s]=i,t=0;t<1<<P[s];t++)H[i++]=s;for(i>>=7;s<T;s++)for(W[s]=i<<7,t=0;t<1<<P[s]-7;t++)H[256+i++]=s;for(e=0;e<=C;e++)r[e]=0;for(t=0;t<=143;)M[2*t+1]=8,t++,r[8]++;for(;t<=255;)M[2*t+1]=9,t++,r[9]++;for(;t<=279;)M[2*t+1]=7,t++,r[7]++;for(;t<=287;)M[2*t+1]=8,t++,r[8]++;for(st(M,287,r),t=0;t<T;t++)Z[2*t+1]=5,Z[2*t]=at(t,5);Y=new K(M,$,257,A,C),G=new K(Z,P,0,T,C),q=new K(new Array(0),L,0,19,7)})(),ft=!0),t.l_desc=new X(t.dyn_ltree,Y),t.d_desc=new X(t.dyn_dtree,G),t.bl_desc=new X(t.bl_tree,q),t.bi_buf=0,t.bi_valid=0,it(t)},_tr_stored_block:ct,_tr_flush_block:_t,_tr_tally:(t,e,a)=>(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=a,0===e?t.dyn_ltree[2*a]++:(t.matches++,e--,t.dyn_ltree[2*(V[a]+E+1)]++,t.dyn_dtree[2*J(e)]++),t.sym_next===t.sym_end),_tr_align:t=>{tt(t,2,3),et(t,256,M),(t=>{16===t.bi_valid?(Q(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)})(t)}};var pt=(t,e,a,s)=>{let i=65535&t,r=t>>>16&65535,n=0;for(;0!==a;){n=a>2e3?2e3:a,a-=n;do{i=i+e[s++]|0,r=r+i|0}while(--n);i%=65521,r%=65521}return i|r<<16};const mt=new Uint32Array((()=>{let t,e=[];for(var a=0;a<256;a++){t=a;for(var s=0;s<8;s++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e})());var wt=(t,e,a,s)=>{const i=mt,r=s+a;t^=-1;for(let a=s;a<r;a++)t=t>>>8^i[255&(t^e[a])];return-1^t},yt={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},bt={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:vt,_tr_stored_block:St,_tr_flush_block:Bt,_tr_tally:Rt,_tr_align:kt}=gt,{Z_NO_FLUSH:xt,Z_PARTIAL_FLUSH:zt,Z_FULL_FLUSH:Ft,Z_FINISH:Ut,Z_BLOCK:It,Z_OK:Ot,Z_STREAM_END:Dt,Z_STREAM_ERROR:Et,Z_DATA_ERROR:At,Z_BUF_ERROR:Tt,Z_DEFAULT_COMPRESSION:Ct,Z_FILTERED:$t,Z_HUFFMAN_ONLY:Pt,Z_RLE:Lt,Z_FIXED:Nt,Z_DEFAULT_STRATEGY:Mt,Z_UNKNOWN:Zt,Z_DEFLATED:Ht}=bt,Vt=258,jt=262,Wt=42,Kt=113,Yt=666,Gt=(t,e)=>(t.msg=yt[e],e),qt=t=>2*t-(t>4?9:0),Xt=t=>{let e=t.length;for(;--e>=0;)t[e]=0},Jt=t=>{let e,a,s,i=t.w_size;e=t.hash_size,s=e;do{a=t.head[--s],t.head[s]=a>=i?a-i:0}while(--e);e=i,s=e;do{a=t.prev[--s],t.prev[s]=a>=i?a-i:0}while(--e)};let Qt=(t,e,a)=>(e<<t.hash_shift^a)&t.hash_mask;const te=t=>{const e=t.state;let a=e.pending;a>t.avail_out&&(a=t.avail_out),0!==a&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+a),t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))},ee=(t,e)=>{Bt(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,te(t.strm)},ae=(t,e)=>{t.pending_buf[t.pending++]=e},se=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},ie=(t,e,a,s)=>{let i=t.avail_in;return i>s&&(i=s),0===i?0:(t.avail_in-=i,e.set(t.input.subarray(t.next_in,t.next_in+i),a),1===t.state.wrap?t.adler=pt(t.adler,e,i,a):2===t.state.wrap&&(t.adler=wt(t.adler,e,i,a)),t.next_in+=i,t.total_in+=i,i)},re=(t,e)=>{let a,s,i=t.max_chain_length,r=t.strstart,n=t.prev_length,h=t.nice_match;const o=t.strstart>t.w_size-jt?t.strstart-(t.w_size-jt):0,l=t.window,d=t.w_mask,u=t.prev,f=t.strstart+Vt;let c=l[r+n-1],_=l[r+n];t.prev_length>=t.good_match&&(i>>=2),h>t.lookahead&&(h=t.lookahead);do{if(a=e,l[a+n]===_&&l[a+n-1]===c&&l[a]===l[r]&&l[++a]===l[r+1]){r+=2,a++;do{}while(l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&r<f);if(s=Vt-(f-r),r=f-Vt,s>n){if(t.match_start=e,n=s,s>=h)break;c=l[r+n-1],_=l[r+n]}}}while((e=u[e&d])>o&&0!==--i);return n<=t.lookahead?n:t.lookahead},ne=t=>{const e=t.w_size;let a,s,i;do{if(s=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-jt)&&(t.window.set(t.window.subarray(e,e+e-s),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),Jt(t),s+=e),0===t.strm.avail_in)break;if(a=ie(t.strm,t.window,t.strstart+t.lookahead,s),t.lookahead+=a,t.lookahead+t.insert>=3)for(i=t.strstart-t.insert,t.ins_h=t.window[i],t.ins_h=Qt(t,t.ins_h,t.window[i+1]);t.insert&&(t.ins_h=Qt(t,t.ins_h,t.window[i+3-1]),t.prev[i&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=i,i++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<jt&&0!==t.strm.avail_in)},he=(t,e)=>{let a,s,i,r=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,n=0,h=t.strm.avail_in;do{if(a=65535,i=t.bi_valid+42>>3,t.strm.avail_out<i)break;if(i=t.strm.avail_out-i,s=t.strstart-t.block_start,a>s+t.strm.avail_in&&(a=s+t.strm.avail_in),a>i&&(a=i),a<r&&(0===a&&e!==Ut||e===xt||a!==s+t.strm.avail_in))break;n=e===Ut&&a===s+t.strm.avail_in?1:0,St(t,0,0,n),t.pending_buf[t.pending-4]=a,t.pending_buf[t.pending-3]=a>>8,t.pending_buf[t.pending-2]=~a,t.pending_buf[t.pending-1]=~a>>8,te(t.strm),s&&(s>a&&(s=a),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+s),t.strm.next_out),t.strm.next_out+=s,t.strm.avail_out-=s,t.strm.total_out+=s,t.block_start+=s,a-=s),a&&(ie(t.strm,t.strm.output,t.strm.next_out,a),t.strm.next_out+=a,t.strm.avail_out-=a,t.strm.total_out+=a)}while(0===n);return h-=t.strm.avail_in,h&&(h>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=h&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-h,t.strm.next_in),t.strstart),t.strstart+=h,t.insert+=h>t.w_size-t.insert?t.w_size-t.insert:h),t.block_start=t.strstart),t.high_water<t.strstart&&(t.high_water=t.strstart),n?4:e!==xt&&e!==Ut&&0===t.strm.avail_in&&t.strstart===t.block_start?2:(i=t.window_size-t.strstart,t.strm.avail_in>i&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,i+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),i>t.strm.avail_in&&(i=t.strm.avail_in),i&&(ie(t.strm,t.window,t.strstart,i),t.strstart+=i,t.insert+=i>t.w_size-t.insert?t.w_size-t.insert:i),t.high_water<t.strstart&&(t.high_water=t.strstart),i=t.bi_valid+42>>3,i=t.pending_buf_size-i>65535?65535:t.pending_buf_size-i,r=i>t.w_size?t.w_size:i,s=t.strstart-t.block_start,(s>=r||(s||e===Ut)&&e!==xt&&0===t.strm.avail_in&&s<=i)&&(a=s>i?i:s,n=e===Ut&&0===t.strm.avail_in&&a===s?1:0,St(t,t.block_start,a,n),t.block_start+=a,te(t.strm)),n?3:1)},oe=(t,e)=>{let a,s;for(;;){if(t.lookahead<jt){if(ne(t),t.lookahead<jt&&e===xt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==a&&t.strstart-a<=t.w_size-jt&&(t.match_length=re(t,a)),t.match_length>=3)if(s=Rt(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do{t.strstart++,t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!==--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+1]);else s=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(s&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===Ut?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2},le=(t,e)=>{let a,s,i;for(;;){if(t.lookahead<jt){if(ne(t),t.lookahead<jt&&e===xt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==a&&t.prev_length<t.max_lazy_match&&t.strstart-a<=t.w_size-jt&&(t.match_length=re(t,a),t.match_length<=5&&(t.strategy===$t||3===t.match_length&&t.strstart-t.match_start>4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){i=t.strstart+t.lookahead-3,s=Rt(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=i&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!==--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,s&&(ee(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(s=Rt(t,0,t.window[t.strstart-1]),s&&ee(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(s=Rt(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===Ut?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2};function de(t,e,a,s,i){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=s,this.func=i}const ue=[new de(0,0,0,0,he),new de(4,4,8,4,oe),new de(4,5,16,8,oe),new de(4,6,32,32,oe),new de(4,4,16,16,le),new de(8,16,32,32,le),new de(8,16,128,128,le),new de(8,32,128,256,le),new de(32,128,258,1024,le),new de(32,258,258,4096,le)];function fe(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Ht,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),Xt(this.dyn_ltree),Xt(this.dyn_dtree),Xt(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),Xt(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),Xt(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const ce=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.status!==Wt&&57!==e.status&&69!==e.status&&73!==e.status&&91!==e.status&&103!==e.status&&e.status!==Kt&&e.status!==Yt?1:0},_e=t=>{if(ce(t))return Gt(t,Et);t.total_in=t.total_out=0,t.data_type=Zt;const e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=2===e.wrap?57:e.wrap?Wt:Kt,t.adler=2===e.wrap?0:1,e.last_flush=-2,vt(e),Ot},ge=t=>{const e=_e(t);var a;return e===Ot&&((a=t.state).window_size=2*a.w_size,Xt(a.head),a.max_lazy_match=ue[a.level].max_lazy,a.good_match=ue[a.level].good_length,a.nice_match=ue[a.level].nice_length,a.max_chain_length=ue[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=2,a.match_available=0,a.ins_h=0),e},pe=(t,e,a,s,i,r)=>{if(!t)return Et;let n=1;if(e===Ct&&(e=6),s<0?(n=0,s=-s):s>15&&(n=2,s-=16),i<1||i>9||a!==Ht||s<8||s>15||e<0||e>9||r<0||r>Nt||8===s&&1!==n)return Gt(t,Et);8===s&&(s=9);const h=new fe;return t.state=h,h.strm=t,h.status=Wt,h.wrap=n,h.gzhead=null,h.w_bits=s,h.w_size=1<<h.w_bits,h.w_mask=h.w_size-1,h.hash_bits=i+7,h.hash_size=1<<h.hash_bits,h.hash_mask=h.hash_size-1,h.hash_shift=~~((h.hash_bits+3-1)/3),h.window=new Uint8Array(2*h.w_size),h.head=new Uint16Array(h.hash_size),h.prev=new Uint16Array(h.w_size),h.lit_bufsize=1<<i+6,h.pending_buf_size=4*h.lit_bufsize,h.pending_buf=new Uint8Array(h.pending_buf_size),h.sym_buf=h.lit_bufsize,h.sym_end=3*(h.lit_bufsize-1),h.level=e,h.strategy=r,h.method=a,ge(t)};var me={deflateInit:(t,e)=>pe(t,e,Ht,15,8,Mt),deflateInit2:pe,deflateReset:ge,deflateResetKeep:_e,deflateSetHeader:(t,e)=>ce(t)||2!==t.state.wrap?Et:(t.state.gzhead=e,Ot),deflate:(t,e)=>{if(ce(t)||e>It||e<0)return t?Gt(t,Et):Et;const a=t.state;if(!t.output||0!==t.avail_in&&!t.input||a.status===Yt&&e!==Ut)return Gt(t,0===t.avail_out?Tt:Et);const s=a.last_flush;if(a.last_flush=e,0!==a.pending){if(te(t),0===t.avail_out)return a.last_flush=-1,Ot}else if(0===t.avail_in&&qt(e)<=qt(s)&&e!==Ut)return Gt(t,Tt);if(a.status===Yt&&0!==t.avail_in)return Gt(t,Tt);if(a.status===Wt&&0===a.wrap&&(a.status=Kt),a.status===Wt){let e=Ht+(a.w_bits-8<<4)<<8,s=-1;if(s=a.strategy>=Pt||a.level<2?0:a.level<6?1:6===a.level?2:3,e|=s<<6,0!==a.strstart&&(e|=32),e+=31-e%31,se(a,e),0!==a.strstart&&(se(a,t.adler>>>16),se(a,65535&t.adler)),t.adler=1,a.status=Kt,te(t),0!==a.pending)return a.last_flush=-1,Ot}if(57===a.status)if(t.adler=0,ae(a,31),ae(a,139),ae(a,8),a.gzhead)ae(a,(a.gzhead.text?1:0)+(a.gzhead.hcrc?2:0)+(a.gzhead.extra?4:0)+(a.gzhead.name?8:0)+(a.gzhead.comment?16:0)),ae(a,255&a.gzhead.time),ae(a,a.gzhead.time>>8&255),ae(a,a.gzhead.time>>16&255),ae(a,a.gzhead.time>>24&255),ae(a,9===a.level?2:a.strategy>=Pt||a.level<2?4:0),ae(a,255&a.gzhead.os),a.gzhead.extra&&a.gzhead.extra.length&&(ae(a,255&a.gzhead.extra.length),ae(a,a.gzhead.extra.length>>8&255)),a.gzhead.hcrc&&(t.adler=wt(t.adler,a.pending_buf,a.pending,0)),a.gzindex=0,a.status=69;else if(ae(a,0),ae(a,0),ae(a,0),ae(a,0),ae(a,0),ae(a,9===a.level?2:a.strategy>=Pt||a.level<2?4:0),ae(a,3),a.status=Kt,te(t),0!==a.pending)return a.last_flush=-1,Ot;if(69===a.status){if(a.gzhead.extra){let e=a.pending,s=(65535&a.gzhead.extra.length)-a.gzindex;for(;a.pending+s>a.pending_buf_size;){let i=a.pending_buf_size-a.pending;if(a.pending_buf.set(a.gzhead.extra.subarray(a.gzindex,a.gzindex+i),a.pending),a.pending=a.pending_buf_size,a.gzhead.hcrc&&a.pending>e&&(t.adler=wt(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex+=i,te(t),0!==a.pending)return a.last_flush=-1,Ot;e=0,s-=i}let i=new Uint8Array(a.gzhead.extra);a.pending_buf.set(i.subarray(a.gzindex,a.gzindex+s),a.pending),a.pending+=s,a.gzhead.hcrc&&a.pending>e&&(t.adler=wt(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex=0}a.status=73}if(73===a.status){if(a.gzhead.name){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),te(t),0!==a.pending)return a.last_flush=-1,Ot;s=0}e=a.gzindex<a.gzhead.name.length?255&a.gzhead.name.charCodeAt(a.gzindex++):0,ae(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),a.gzindex=0}a.status=91}if(91===a.status){if(a.gzhead.comment){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),te(t),0!==a.pending)return a.last_flush=-1,Ot;s=0}e=a.gzindex<a.gzhead.comment.length?255&a.gzhead.comment.charCodeAt(a.gzindex++):0,ae(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s))}a.status=103}if(103===a.status){if(a.gzhead.hcrc){if(a.pending+2>a.pending_buf_size&&(te(t),0!==a.pending))return a.last_flush=-1,Ot;ae(a,255&t.adler),ae(a,t.adler>>8&255),t.adler=0}if(a.status=Kt,te(t),0!==a.pending)return a.last_flush=-1,Ot}if(0!==t.avail_in||0!==a.lookahead||e!==xt&&a.status!==Yt){let s=0===a.level?he(a,e):a.strategy===Pt?((t,e)=>{let a;for(;;){if(0===t.lookahead&&(ne(t),0===t.lookahead)){if(e===xt)return 1;break}if(t.match_length=0,a=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===Ut?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2})(a,e):a.strategy===Lt?((t,e)=>{let a,s,i,r;const n=t.window;for(;;){if(t.lookahead<=Vt){if(ne(t),t.lookahead<=Vt&&e===xt)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(i=t.strstart-1,s=n[i],s===n[++i]&&s===n[++i]&&s===n[++i])){r=t.strstart+Vt;do{}while(s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&i<r);t.match_length=Vt-(r-i),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(a=Rt(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===Ut?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2})(a,e):ue[a.level].func(a,e);if(3!==s&&4!==s||(a.status=Yt),1===s||3===s)return 0===t.avail_out&&(a.last_flush=-1),Ot;if(2===s&&(e===zt?kt(a):e!==It&&(St(a,0,0,!1),e===Ft&&(Xt(a.head),0===a.lookahead&&(a.strstart=0,a.block_start=0,a.insert=0))),te(t),0===t.avail_out))return a.last_flush=-1,Ot}return e!==Ut?Ot:a.wrap<=0?Dt:(2===a.wrap?(ae(a,255&t.adler),ae(a,t.adler>>8&255),ae(a,t.adler>>16&255),ae(a,t.adler>>24&255),ae(a,255&t.total_in),ae(a,t.total_in>>8&255),ae(a,t.total_in>>16&255),ae(a,t.total_in>>24&255)):(se(a,t.adler>>>16),se(a,65535&t.adler)),te(t),a.wrap>0&&(a.wrap=-a.wrap),0!==a.pending?Ot:Dt)},deflateEnd:t=>{if(ce(t))return Et;const e=t.state.status;return t.state=null,e===Kt?Gt(t,At):Ot},deflateSetDictionary:(t,e)=>{let a=e.length;if(ce(t))return Et;const s=t.state,i=s.wrap;if(2===i||1===i&&s.status!==Wt||s.lookahead)return Et;if(1===i&&(t.adler=pt(t.adler,e,a,0)),s.wrap=0,a>=s.w_size){0===i&&(Xt(s.head),s.strstart=0,s.block_start=0,s.insert=0);let t=new Uint8Array(s.w_size);t.set(e.subarray(a-s.w_size,a),0),e=t,a=s.w_size}const r=t.avail_in,n=t.next_in,h=t.input;for(t.avail_in=a,t.next_in=0,t.input=e,ne(s);s.lookahead>=3;){let t=s.strstart,e=s.lookahead-2;do{s.ins_h=Qt(s,s.ins_h,s.window[t+3-1]),s.prev[t&s.w_mask]=s.head[s.ins_h],s.head[s.ins_h]=t,t++}while(--e);s.strstart=t,s.lookahead=2,ne(s)}return s.strstart+=s.lookahead,s.block_start=s.strstart,s.insert=s.lookahead,s.lookahead=0,s.match_length=s.prev_length=2,s.match_available=0,t.next_in=n,t.input=h,t.avail_in=r,s.wrap=i,Ot},deflateInfo:"pako deflate (from Nodeca project)"};const we=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var ye=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const a=e.shift();if(a){if("object"!=typeof a)throw new TypeError(a+"must be non-object");for(const e in a)we(a,e)&&(t[e]=a[e])}}return t},be=t=>{let e=0;for(let a=0,s=t.length;a<s;a++)e+=t[a].length;const a=new Uint8Array(e);for(let e=0,s=0,i=t.length;e<i;e++){let i=t[e];a.set(i,s),s+=i.length}return a};let ve=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){ve=!1}const Se=new Uint8Array(256);for(let t=0;t<256;t++)Se[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;Se[254]=Se[254]=1;var Be=t=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);let e,a,s,i,r,n=t.length,h=0;for(i=0;i<n;i++)a=t.charCodeAt(i),55296==(64512&a)&&i+1<n&&(s=t.charCodeAt(i+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),i++)),h+=a<128?1:a<2048?2:a<65536?3:4;for(e=new Uint8Array(h),r=0,i=0;r<h;i++)a=t.charCodeAt(i),55296==(64512&a)&&i+1<n&&(s=t.charCodeAt(i+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),i++)),a<128?e[r++]=a:a<2048?(e[r++]=192|a>>>6,e[r++]=128|63&a):a<65536?(e[r++]=224|a>>>12,e[r++]=128|a>>>6&63,e[r++]=128|63&a):(e[r++]=240|a>>>18,e[r++]=128|a>>>12&63,e[r++]=128|a>>>6&63,e[r++]=128|63&a);return e};var Re=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const ke=Object.prototype.toString,{Z_NO_FLUSH:xe,Z_SYNC_FLUSH:ze,Z_FULL_FLUSH:Fe,Z_FINISH:Ue,Z_OK:Ie,Z_STREAM_END:Oe,Z_DEFAULT_COMPRESSION:De,Z_DEFAULT_STRATEGY:Ee,Z_DEFLATED:Ae}=bt;function Te(t){this.options=ye({level:De,method:Ae,chunkSize:16384,windowBits:15,memLevel:8,strategy:Ee},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Re,this.strm.avail_out=0;let a=me.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(a!==Ie)throw new Error(yt[a]);if(e.header&&me.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t="string"==typeof e.dictionary?Be(e.dictionary):"[object ArrayBuffer]"===ke.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,a=me.deflateSetDictionary(this.strm,t),a!==Ie)throw new Error(yt[a]);this._dict_set=!0}}Te.prototype.push=function(t,e){const a=this.strm,s=this.options.chunkSize;let i,r;if(this.ended)return!1;for(r=e===~~e?e:!0===e?Ue:xe,"string"==typeof t?a.input=Be(t):"[object ArrayBuffer]"===ke.call(t)?a.input=new Uint8Array(t):a.input=t,a.next_in=0,a.avail_in=a.input.length;;)if(0===a.avail_out&&(a.output=new Uint8Array(s),a.next_out=0,a.avail_out=s),(r===ze||r===Fe)&&a.avail_out<=6)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else{if(i=me.deflate(a,r),i===Oe)return a.next_out>0&&this.onData(a.output.subarray(0,a.next_out)),i=me.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===Ie;if(0!==a.avail_out){if(r>0&&a.next_out>0)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else if(0===a.avail_in)break}else this.onData(a.output)}return!0},Te.prototype.onData=function(t){this.chunks.push(t)},Te.prototype.onEnd=function(t){t===Ie&&(this.result=be(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var Ce={deflate:function(t,e){const a=new Te(e);if(a.push(t,!0),a.err)throw a.msg||yt[a.err];return a.result}};const{deflate:$e}=Ce;var Pe=$e;const Le={b:{u:DataView.prototype.getInt8,p:DataView.prototype.setInt8,bytes:1},B:{u:DataView.prototype.getUint8,p:DataView.prototype.setUint8,bytes:1},h:{u:DataView.prototype.getInt16,p:DataView.prototype.setInt16,bytes:2},H:{u:DataView.prototype.getUint16,p:DataView.prototype.setUint16,bytes:2},i:{u:DataView.prototype.getInt32,p:DataView.prototype.setInt32,bytes:4},I:{u:DataView.prototype.getUint32,p:DataView.prototype.setUint32,bytes:4}},Ne=(t,...e)=>{let a=0;if(t.replace(/[<>]/,"").length!=e.length)throw"Pack format to Argument count mismatch";const s=[];let i=!0;for(let s=0;s<t.length;s++)"<"==t[s]?i=!0:">"==t[s]?i=!1:(r(t[s],e[a]),a++);function r(t,e){if(!(t in Le))throw"Unhandled character '"+t+"' in pack format";const a=Le[t].bytes,r=new DataView(new ArrayBuffer(a));Le[t].p.bind(r)(0,e,i);for(let t=0;t<a;t++)s.push(r.getUint8(t))}return s},Me=(t,e)=>{let a=0;const s=[];let i=!0;for(const e of t)"<"==e?i=!0:">"==e?i=!1:r(e);function r(t){if(!(t in Le))throw"Unhandled character '"+t+"' in unpack format";const r=Le[t].bytes,n=new DataView(new ArrayBuffer(r));for(let t=0;t<r;t++)n.setUint8(t,255&e[a+t]);const h=Le[t].u.bind(n);s.push(h(0,i)),a+=r}return s};class Ze extends EventTarget{constructor(t,e,a){super(),this.port=t,this.logger=e,this._parent=a,this.chipName=null,this.chipRevision=null,this.chipVariant=null,this._efuses=new Array(4).fill(0),this._flashsize=4194304,this.debug=!1,this.IS_STUB=!1,this.connected=!0,this.flashSize=null,this._currentBaudRate=n,this._isESP32S2NativeUSB=!1,this._initializationSucceeded=!1,this.state_DTR=!1}get _inputBuffer(){return this._parent?this._parent._inputBuffer:this.__inputBuffer}get _totalBytesRead(){return this._parent?this._parent._totalBytesRead:this.__totalBytesRead||0}set _totalBytesRead(t){this._parent?this._parent._totalBytesRead=t:this.__totalBytesRead=t}detectUSBSerialChip(t,e){const a={6790:{29986:{name:"CH340",maxBaudrate:460800},29987:{name:"CH340",maxBaudrate:460800},30084:{name:"CH340",maxBaudrate:460800},21795:{name:"CH341",maxBaudrate:2e6},21971:{name:"CH343",maxBaudrate:6e6},21972:{name:"CH9102",maxBaudrate:6e6},21976:{name:"CH9101",maxBaudrate:3e6}},4292:{6e4:{name:"CP2102(n)",maxBaudrate:3e6},60016:{name:"CP2105",maxBaudrate:2e6},60017:{name:"CP2108",maxBaudrate:2e6}},1027:{24577:{name:"FT232R",maxBaudrate:3e6},24592:{name:"FT2232",maxBaudrate:3e6},24593:{name:"FT4232",maxBaudrate:3e6},24596:{name:"FT232H",maxBaudrate:12e6},24597:{name:"FT230X",maxBaudrate:3e6}},12346:{2:{name:"ESP32-S2 Native USB",maxBaudrate:2e6},4097:{name:"ESP32 Native USB",maxBaudrate:2e6},4098:{name:"ESP32 Native USB",maxBaudrate:2e6},16386:{name:"ESP32 Native USB",maxBaudrate:2e6},4096:{name:"ESP32 Native USB",maxBaudrate:2e6}}}[t];return a&&a[e]?a[e]:{name:`Unknown (VID: 0x${t.toString(16)}, PID: 0x${e.toString(16)})`}}async initialize(){if(await this.hardReset(!0),!this._parent){this.__inputBuffer=[],this.__totalBytesRead=0;const t=this.port.getInfo();if(t.usbVendorId&&t.usbProductId){const e=this.detectUSBSerialChip(t.usbVendorId,t.usbProductId);this.logger.log(`USB-Serial: ${e.name} (VID: 0x${t.usbVendorId.toString(16)}, PID: 0x${t.usbProductId.toString(16)})`),e.maxBaudrate&&(this._maxUSBSerialBaudrate=e.maxBaudrate,this.logger.log(`Max baudrate: ${e.maxBaudrate}`)),12346===t.usbVendorId&&2===t.usbProductId&&(this._isESP32S2NativeUSB=!0)}this.readLoop()}await this.flushSerialBuffers(),await this.sync(),await this.detectChip();const t=U(this.getChipFamily()),e=t.macFuse;for(let t=0;t<4;t++)this._efuses[t]=await this.readRegister(e+4*t);this.logger.log(`Chip type ${this.chipName}`),this.logger.debug(`Bootloader flash offset: 0x${t.flashOffs.toString(16)}`),this._initializationSucceeded=!0}async detectChip(){try{const t=(await this.getSecurityInfo()).chipId,e=B[t];if(e)return this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===v&&(this.chipRevision=await this.getChipRevision(),this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`),this.chipRevision>=300?this.chipVariant="rev300":this.chipVariant="rev0",this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`)),void this.logger.debug(`Detected chip via IMAGE_CHIP_ID: ${t} (${this.chipName})`);this.logger.debug(`Unknown IMAGE_CHIP_ID: ${t}, falling back to magic value detection`)}catch(t){this.logger.debug(`GET_SECURITY_INFO failed, using magic value detection: ${t}`),this._inputBuffer.length=0,await i(z);try{await this.sync()}catch(t){this.logger.debug(`Re-sync after GET_SECURITY_INFO failure: ${t}`)}}const t=await this.readRegister(1073745920),e=R[t>>>0];if(void 0===e)throw new Error(`Unknown Chip: Hex: ${s(t>>>0,8).toLowerCase()} Number: ${t}`);this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===v&&(this.chipRevision=await this.getChipRevision(),this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`),this.chipRevision>=300?this.chipVariant="rev300":this.chipVariant="rev0",this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`)),this.logger.debug(`Detected chip via magic value: ${s(t>>>0,8)} (${this.chipName})`)}async getChipRevision(){if(this.chipFamily!==v)return 0;const t=await this.readRegister(1343410252);return 100*((t>>23&1)<<2|t>>4&3)+(15&t)}async getSecurityInfo(){const[,t]=await this.checkCommand(20,[],0);if(0===t.length)throw new Error("GET_SECURITY_INFO not supported or returned empty response");if(t.length<12)throw new Error(`Invalid security info response length: ${t.length} (expected at least 12 bytes)`);return{flags:Me("<I",t.slice(0,4))[0],flashCryptCnt:t[4],keyPurposes:Array.from(t.slice(5,12)),chipId:t.length>=16?Me("<I",t.slice(12,16))[0]:0,apiVersion:t.length>=20?Me("<I",t.slice(16,20))[0]:0}}async readLoop(){this.debug&&this.logger.debug("Starting read loop"),this._reader=this.port.readable.getReader();try{let t=!0;for(;t;){const{value:e,done:a}=await this._reader.read();if(a){this._reader.releaseLock(),t=!1;break}if(!e||0===e.length)continue;const s=Array.from(e);Array.prototype.push.apply(this._inputBuffer,s),this._totalBytesRead+=e.length}}catch{this.logger.error("Read loop got disconnected")}this.connected=!1,this._isESP32S2NativeUSB&&!this._initializationSucceeded&&(this.logger.log("ESP32-S2 Native USB detected - requesting port reselection"),this.dispatchEvent(new CustomEvent("esp32s2-usb-reconnect",{detail:{message:"ESP32-S2 Native USB requires port reselection"}}))),this.dispatchEvent(new Event("disconnect")),this.logger.debug("Finished read loop")}sleep(t=100){return new Promise(e=>setTimeout(e,t))}async setRTS(t){await this.port.setSignals({requestToSend:t}),await this.setDTR(this.state_DTR)}async setDTR(t){this.state_DTR=t,await this.port.setSignals({dataTerminalReady:t})}async hardReset(t=!1){t?4097===this.port.getInfo().usbProductId?(await this.setDTR(!1),await this.setRTS(!1),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(100),await this.setRTS(!0),await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!1),await this.setRTS(!1),this.logger.log("USB MCU reset.")):(await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(50),await this.setDTR(!1),this.logger.log("DTR/RTS USB serial chip reset.")):(await this.setRTS(!0),await this.sleep(100),await this.setRTS(!1),this.logger.log("Hard reset.")),await new Promise(t=>setTimeout(t,1e3))}macAddr(){const t=new Array(6).fill(0),e=this._efuses[0],a=this._efuses[1],s=this._efuses[2],i=this._efuses[3];let r;if(this.chipFamily==l){if(0!=i)r=[i>>16&255,i>>8&255,255&i];else if(a>>16&255){if(1!=(a>>16&255))throw new Error("Couldnt determine OUI");r=[172,208,116]}else r=[24,254,52];t[0]=r[0],t[1]=r[1],t[2]=r[2],t[3]=a>>8&255,t[4]=255&a,t[5]=e>>24&255}else if(this.chipFamily==d)t[0]=s>>8&255,t[1]=255&s,t[2]=a>>24&255,t[3]=a>>16&255,t[4]=a>>8&255,t[5]=255&a;else{if(this.chipFamily!=u&&this.chipFamily!=f&&this.chipFamily!=c&&this.chipFamily!=_&&this.chipFamily!=g&&this.chipFamily!=p&&this.chipFamily!=m&&this.chipFamily!=w&&this.chipFamily!=y&&this.chipFamily!=b&&this.chipFamily!=v&&this.chipFamily!=S)throw new Error("Unknown chip family");t[0]=a>>8&255,t[1]=255&a,t[2]=e>>24&255,t[3]=e>>16&255,t[4]=e>>8&255,t[5]=255&e}return t}async readRegister(t){this.debug&&this.logger.debug("Reading from Register "+s(t,8));const e=Ne("<I",t);await this.sendCommand(10,e);const[a]=await this.getResponse(10);return a}async checkCommand(t,e,a=0,i=3e3){i=Math.min(i,3e5),await this.sendCommand(t,e,a);const[r,n]=await this.getResponse(t,i);if(null===n)throw new Error("Didn't get enough status bytes");let h=n,o=0;if(this.IS_STUB||this.chipFamily==l?o=2:[d,u,f,c,_,g,p,m,w,y,b,v,S].includes(this.chipFamily)||20===t?o=4:[2,4].includes(h.length)&&(o=h.length),h.length<o)throw new Error("Didn't get enough status bytes");const B=h.slice(-o,h.length);if(h=h.slice(0,-o),this.debug&&(this.logger.debug("status",B),this.logger.debug("value",r),this.logger.debug("data",h)),1==B[0])throw 5==B[1]?(await this.drainInputBuffer(200),new Error("Invalid (unsupported) command "+s(t))):new Error("Command failure error code "+s(B[1]));return[r,h]}async sendCommand(e,a,s=0){const i=t([...Ne("<BBHI",0,e,a.length,s),...a]);this.debug&&this.logger.debug(`Writing ${i.length} byte${1==i.length?"":"s"}:`,i),await this.writeToStream(i)}async readPacket(t){let e=null,r=!1,n=[];for(;;){const h=Date.now();for(n=[];Date.now()-h<t;){if(this._inputBuffer.length>0){n.push(this._inputBuffer.shift());break}await i(1)}if(0==n.length){throw new I("Timed out waiting for packet "+(null===e?"header":"content"))}this.debug&&this.logger.debug("Read "+n.length+" bytes: "+a(n));for(const t of n)if(null===e){if(192!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(n)),this.logger.debug("Remaining data in serial buffer: "+a(this._inputBuffer))),new I("Invalid head of packet ("+s(t)+")");e=[]}else if(r)if(r=!1,220==t)e.push(192);else{if(221!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(n)),this.logger.debug("Remaining data in serial buffer: "+a(this._inputBuffer))),new I("Invalid SLIP escape (0xdb, "+s(t)+")");e.push(219)}else if(219==t)r=!0;else{if(192==t)return this.debug&&this.logger.debug("Received full packet: "+a(e)),e;e.push(t)}}throw new I("Invalid state")}async getResponse(t,e=3e3){for(let a=0;a<100;a++){const a=await this.readPacket(e);if(a.length<8)continue;const[i,r,,n]=Me("<BBHI",a.slice(0,8));if(1!=i)continue;const h=a.slice(8);if(null==t||r==t)return[n,h];if(0!=h[0]&&5==h[1])throw await this.drainInputBuffer(200),new Error(`Invalid (unsupported) command ${s(t)}`)}throw"Response doesn't match request"}checksum(t,e=239){for(const a of t)e^=a;return e}async setBaudrate(t){if(this.chipFamily==l)throw new Error("Changing baud rate is not supported on the ESP8266");try{const e=Ne("<II",t,this.IS_STUB?n:0);await this.checkCommand(15,e)}catch(e){throw this.logger.error(`Baudrate change error: ${e}`),new Error(`Unable to change the baud rate to ${t}: No response from set baud rate command.`)}this._parent?await this._parent.reconfigurePort(t):await this.reconfigurePort(t),await i(z),this._parent?this._parent._currentBaudRate=t:this._currentBaudRate=t;const e=this._parent?this._parent._maxUSBSerialBaudrate:this._maxUSBSerialBaudrate;e&&t>e&&(this.logger.log(`⚠️ WARNING: Baudrate ${t} exceeds USB-Serial chip limit (${e})!`),this.logger.log("⚠️ This may cause data corruption or connection failures!")),this.logger.log(`Changed baud rate to ${t}`)}async reconfigurePort(t){var e;try{await(null===(e=this._reader)||void 0===e?void 0:e.cancel()),await this.port.close(),await this.port.open({baudRate:t}),await this.flushSerialBuffers(),this.readLoop()}catch(e){throw this.logger.error(`Reconfigure port error: ${e}`),new Error(`Unable to change the baud rate to ${t}: ${e}`)}}async sync(){for(let t=0;t<5;t++){this._inputBuffer.length=0;if(await this._sync())return await i(z),!0;await i(z)}throw new Error("Couldn't sync to ESP. Try resetting.")}async _sync(){await this.sendCommand(8,o);for(let t=0;t<8;t++)try{const[,t]=await this.getResponse(8,z);if(t.length>1&&0==t[0]&&0==t[1])return!0}catch{}return!1}getFlashWriteSize(){return this.IS_STUB?16384:1024}async flashData(t,e,a=0,i=!1){if(t.byteLength>=8){const e=Array.from(new Uint8Array(t,0,4)),a=e[0],i=e[2],r=e[3];this.logger.log(`Image header, Magic=${s(a)}, FlashMode=${s(i)}, FlashSizeFreq=${s(r)}`)}const r=t.byteLength;let n,h=0,o=k;i?(n=Pe(new Uint8Array(t),{level:9}).buffer,h=n.byteLength,this.logger.log(`Writing data with filesize: ${r}. Compressed Size: ${h}`),o=await this.flashDeflBegin(r,h,a)):(this.logger.log(`Writing data with filesize: ${r}`),n=t,await this.flashBegin(r,a));let l=[],d=0,u=0,f=0;const c=Date.now(),_=this.getFlashWriteSize(),g=i?h:r;for(;g-f>0;)this.debug&&this.logger.log(`Writing at ${s(a+d*_,8)} `),g-f>=_?l=Array.from(new Uint8Array(n,f,_)):(l=Array.from(new Uint8Array(n,f,g-f)),i||(l=l.concat(new Array(_-l.length).fill(255)))),i?await this.flashDeflBlock(l,d,o):await this.flashBlock(l,d),d+=1,u+=i?Math.round(l.length*r/h):l.length,f+=_,e(Math.min(u,r),r);this.logger.log("Took "+(Date.now()-c)+"ms to write "+g+" bytes"),this.IS_STUB&&(await this.flashBegin(0,0),i?await this.flashDeflFinish():await this.flashFinish())}async flashBlock(t,e,a=3e3){await this.checkCommand(3,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t),a)}async flashDeflBlock(t,e,a=3e3){await this.checkCommand(17,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t),a)}async flashBegin(t=0,e=0,a=!1){let i;await this.flushSerialBuffers();const r=this.getFlashWriteSize();!this.IS_STUB&&[d,u,f,c,_,g,p,m,w,y,b,v,S].includes(this.chipFamily)&&await this.checkCommand(13,new Array(8).fill(0));const n=Math.floor((t+r-1)/r);i=this.chipFamily==l?this.getEraseSize(e,t):t;const h=this.IS_STUB?k:F(3e4,t),o=Date.now();let B=Ne("<IIII",i,n,r,e);return this.chipFamily!=d&&this.chipFamily!=u&&this.chipFamily!=f&&this.chipFamily!=c&&this.chipFamily!=_&&this.chipFamily!=g&&this.chipFamily!=p&&this.chipFamily!=m&&this.chipFamily!=w&&this.chipFamily!=y&&this.chipFamily!=b&&this.chipFamily!=v&&this.chipFamily!=S||(B=B.concat(Ne("<I",a?1:0))),this.logger.log("Erase size "+i+", blocks "+n+", block size "+s(r,4)+", offset "+s(e,4)+", encrypted "+(a?"yes":"no")),await this.checkCommand(2,B,0,h),0==t||this.IS_STUB||this.logger.log("Took "+(Date.now()-o)+"ms to erase "+n+" bytes"),n}async flashDeflBegin(t=0,e=0,a=0){const s=this.getFlashWriteSize(),i=Math.floor((e+s-1)/s),r=Math.floor((t+s-1)/s);let n=0,h=0;this.IS_STUB?(n=t,h=F(3e4,n)):(n=r*s,h=k);const o=Ne("<IIII",n,i,s,a);return await this.checkCommand(16,o,0,h),h}async flashFinish(){const t=Ne("<I",1);await this.checkCommand(4,t)}async flashDeflFinish(){const t=Ne("<I",1);await this.checkCommand(18,t)}getBootloaderOffset(){return U(this.getChipFamily()).flashOffs}async flashId(){return await this.runSpiFlashCommand(159,[],24)}getChipFamily(){return this._parent?this._parent.chipFamily:this.chipFamily}async writeRegister(t,e,a=4294967295,s=0,i=0){let r=Ne("<IIII",t,e,a,s);i>0&&(r=r.concat(Ne("<IIII",U(this.getChipFamily()).uartDateReg,0,0,i))),await this.checkCommand(9,r)}async setDataLengths(t,e,a){if(-1!=t.mosiDlenOffs){const s=t.regBase+t.mosiDlenOffs,i=t.regBase+t.misoDlenOffs;e>0&&await this.writeRegister(s,e-1),a>0&&await this.writeRegister(i,a-1)}else{const s=t.regBase+t.usr1Offs,i=(0==a?0:a-1)<<8|(0==e?0:e-1)<<17;await this.writeRegister(s,i)}}async waitDone(t,e){for(let a=0;a<10;a++){if(0==(await this.readRegister(t)&e))return}throw Error("SPI command did not complete in time")}async runSpiFlashCommand(t,e,a=0){const i=U(this.getChipFamily()),r=i.regBase,n=r,h=r+i.usrOffs,o=r+i.usr2Offs,l=r+i.w0Offs,d=1<<18;if(a>32)throw new Error("Reading more than 32 bits back from a SPI flash operation is unsupported");if(e.length>64)throw new Error("Writing more than 64 bytes of data with one SPI command is unsupported");const u=8*e.length,f=await this.readRegister(h),c=await this.readRegister(o);let _=1<<31;if(a>0&&(_|=268435456),u>0&&(_|=134217728),await this.setDataLengths(i,u,a),await this.writeRegister(h,_),await this.writeRegister(o,7<<28|t),0==u)await this.writeRegister(l,0);else{const t=(4-e.length%4)%4;e=e.concat(new Array(t).fill(0));const a=Me("I".repeat(Math.floor(e.length/4)),e);let i=l;this.logger.debug(`Words Length: ${a.length}`);for(const t of a)this.logger.debug(`Writing word ${s(t)} to register offset ${s(i)}`),await this.writeRegister(i,t),i+=4}await this.writeRegister(n,d),await this.waitDone(n,d);const g=await this.readRegister(l);return await this.writeRegister(h,f),await this.writeRegister(o,c),g}async detectFlashSize(){this.logger.log("Detecting Flash Size");const t=await this.flashId(),e=255&t,a=t>>16&255;this.logger.log(`FlashId: ${s(t)}`),this.logger.log(`Flash Manufacturer: ${e.toString(16)}`),this.logger.log(`Flash Device: ${(t>>8&255).toString(16)}${a.toString(16)}`),this.flashSize=r[a],this.logger.log(`Auto-detected Flash size: ${this.flashSize}`)}getEraseSize(t,e){const a=4096,s=Math.floor((e+a-1)/a);let i=16-Math.floor(t/a)%16;return s<i&&(i=s),s<2*i?Math.floor((s+1)/2*a):(s-i)*a}async memBegin(t,e,a,s){return await this.checkCommand(5,Ne("<IIII",t,e,a,s))}async memBlock(t,e){return await this.checkCommand(7,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t))}async memFinish(t=0){const e=this.IS_STUB?k:500,a=Ne("<II",0==t?1:0,t);return await this.checkCommand(6,a,0,e)}async runStub(t=!1){const e=await O(this.chipFamily,this.chipRevision);if(null===e)return this.logger.log(`Stub flasher is not yet supported on ${this.chipName}, using ROM loader`),this;const a=2048;this.logger.log("Uploading stub...");for(const t of["text","data"]){const s=e[t],i=e[`${t}_start`],r=s.length,n=Math.floor((r+a-1)/a);await this.memBegin(r,n,a,i);for(const t of Array(n).keys()){const e=t*a;let i=e+a;i>r&&(i=r),await this.memBlock(s.slice(e,i),t)}}await this.memFinish(e.entry);const s=await this.readPacket(500),i=String.fromCharCode(...s);if("OHAI"!=i)throw new Error("Failed to start stub. Unexpected response: "+i);this.logger.log("Stub is now running...");const r=new He(this.port,this.logger,this);return t||await r.detectFlashSize(),r}async writeToStream(t){if(!this.port.writable)return void this.logger.debug("Port writable stream not available, skipping write");const e=this.port.writable.getWriter();await e.write(new Uint8Array(t));try{e.releaseLock()}catch(t){this.logger.error(`Ignoring release lock error: ${t}`)}}async disconnect(){this._parent?await this._parent.disconnect():this.port.writable?(await this.port.writable.getWriter().close(),await new Promise(t=>{this._reader||t(void 0),this.addEventListener("disconnect",t,{once:!0}),this._reader.cancel()}),this.connected=!1):this.logger.debug("Port already closed, skipping disconnect")}async reconnect(){if(this._parent)return void await this._parent.reconnect();if(this.logger.log("Reconnecting serial port..."),this.connected=!1,this.__inputBuffer=[],this._reader){try{await this._reader.cancel()}catch(t){this.logger.debug(`Reader cancel error: ${t}`)}this._reader=void 0}try{await this.port.close(),this.logger.log("Port closed")}catch(t){this.logger.debug(`Port close error: ${t}`)}this.logger.debug("Opening port...");try{await this.port.open({baudRate:n}),this.connected=!0}catch(t){throw new Error(`Failed to open port: ${t}`)}if(!this.port.readable||!this.port.writable)throw new Error(`Port streams not available after open (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);const t=this.chipFamily,e=this.chipName,a=this.chipRevision,s=this.chipVariant,i=this.flashSize;if(await this.hardReset(!0),this._parent||(this.__inputBuffer=[],this.__totalBytesRead=0,this.readLoop()),await this.flushSerialBuffers(),await this.sync(),this.chipFamily=t,this.chipName=e,this.chipRevision=a,this.chipVariant=s,this.flashSize=i,this.logger.debug(`Reconnect complete (chip: ${this.chipName})`),!this.port.writable||!this.port.readable)throw new Error("Port not ready after reconnect");const r=await this.runStub(!0);if(this.logger.debug("Stub loaded"),this._currentBaudRate!==n&&(await r.setBaudrate(this._currentBaudRate),!this.port.writable||!this.port.readable))throw new Error(`Port not ready after baudrate change (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);this.IS_STUB&&Object.assign(this,r),this.logger.debug("Reconnection successful")}async drainInputBuffer(t=200){await i(t);let e=0;const a=Date.now();for(;e<112&&Date.now()-a<100;)if(this._inputBuffer.length>0){void 0!==this._inputBuffer.shift()&&e++}else await i(1);e>0&&this.logger.debug(`Drained ${e} bytes from input buffer`),this._parent||(this.__inputBuffer=[])}async flushSerialBuffers(){this._parent||(this.__inputBuffer=[]),await i(z),this._parent||(this.__inputBuffer=[]),this.logger.debug("Serial buffers flushed")}async readFlash(e,a,s){if(!this.IS_STUB)throw new Error("Reading flash is only supported in stub mode. Please run runStub() first.");await this.flushSerialBuffers(),this.logger.log(`Reading ${a} bytes from flash at address 0x${e.toString(16)}...`);let i=new Uint8Array(0),r=e,n=a;for(;n>0;){const e=Math.min(65536,n);let h=!1,o=0;const l=3;for(;!h&&o<=l;)try{this.logger.debug(`Reading chunk at 0x${r.toString(16)}, size: 0x${e.toString(16)}`);const a=Ne("<IIII",r,e,4096,1024),[s]=await this.checkCommand(210,a);if(0!=s)throw new Error("Failed to read memory: "+s);let n=new Uint8Array(0);for(;n.length<e;){let a;try{a=await this.readPacket(100)}catch(t){if(t instanceof I&&(this.logger.debug(`SLIP read error at ${n.length} bytes: ${t.message}`),n.length>=e))break;throw t}if(a&&a.length>0){const e=new Uint8Array(a),s=new Uint8Array(n.length+e.length);s.set(n),s.set(e,n.length),n=s;const i=Ne("<I",n.length),r=t(i);await this.writeToStream(r)}}const o=new Uint8Array(i.length+n.length);o.set(i),o.set(n,i.length),i=o,h=!0}catch(t){if(o++,!(t instanceof I&&t.message.includes("Timed out")))throw t;if(!(o<=l))throw new Error(`Failed to read chunk at 0x${r.toString(16)} after ${l} retries: ${t}`);this.logger.log(`⚠️ Timeout error at 0x${r.toString(16)}. Reconnecting and retrying (attempt ${o}/${l})...`);try{await this.reconnect()}catch(t){throw new Error(`Reconnect failed: ${t}`)}}s&&s(new Uint8Array(e),i.length,a),r+=e,n-=e,this.logger.debug(`Total progress: 0x${i.length.toString(16)} from 0x${a.toString(16)} bytes`)}return this.logger.debug(`Successfully read ${i.length} bytes from flash`),i}}class He extends Ze{constructor(){super(...arguments),this.IS_STUB=!0}async memBegin(t,e,a,i){const r=await O(this.chipFamily,this.chipRevision);if(null===r)return[0,[]];const n=i,h=i+t;this.logger.debug(`Load range: ${s(n,8)}-${s(h,8)}`),this.logger.debug(`Stub data: ${s(r.data_start,8)}, len: ${r.data.length}, text: ${s(r.text_start,8)}, len: ${r.text.length}`);for(const[t,e]of[[r.data_start,r.data_start+r.data.length],[r.text_start,r.text_start+r.text.length]])if(n<e&&h>t)throw new Error("Software loader is resident at "+s(t,8)+"-"+s(e,8)+". Can't load binary at overlapping address range "+s(n,8)+"-"+s(h,8)+". Try changing the binary loading address.");return[0,[]]}async eraseFlash(){await this.checkCommand(208,[],0,x)}}const Ve=async t=>{const e=await navigator.serial.requestPort();return await e.open({baudRate:n}),t.log("Connected successfully."),new Ze(e,t)};export{d as CHIP_FAMILY_ESP32,c as CHIP_FAMILY_ESP32C2,_ as CHIP_FAMILY_ESP32C3,g as CHIP_FAMILY_ESP32C5,p as CHIP_FAMILY_ESP32C6,m as CHIP_FAMILY_ESP32C61,w as CHIP_FAMILY_ESP32H2,b as CHIP_FAMILY_ESP32H21,y as CHIP_FAMILY_ESP32H4,v as CHIP_FAMILY_ESP32P4,u as CHIP_FAMILY_ESP32S2,f as CHIP_FAMILY_ESP32S3,S as CHIP_FAMILY_ESP32S31,l as CHIP_FAMILY_ESP8266,Ze as ESPLoader,Ve as connect};
1
+ const t=t=>{let e=[192];for(const a of t)219==a?e=e.concat([219,221]):192==a?e=e.concat([219,220]):e.push(a);return e.push(192),e},e=t=>{const e=[];for(let a=0;a<t.length;a++){const s=t.charCodeAt(a);s<=255&&e.push(s)}return e},a=t=>"["+t.map(t=>s(t)).join(", ")+"]",s=(t,e=2)=>{const a=t.toString(16).toUpperCase();return a.startsWith("-")?"-0x"+a.substring(1).padStart(e,"0"):"0x"+a.padStart(e,"0")},i=t=>new Promise(e=>setTimeout(e,t)),r={18:"256KB",19:"512KB",20:"1MB",21:"2MB",22:"4MB",23:"8MB",24:"16MB",25:"32MB",26:"64MB",27:"128MB",28:"256MB",32:"64MB",33:"128MB",34:"256MB",50:"256KB",51:"512KB",52:"1MB",53:"2MB",54:"4MB",55:"8MB",56:"16MB",57:"32MB",58:"64MB"},n=115200,h=1343410176,o=e(" UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"),l=33382,d=50,f=12882,u=12883,c=12994,_=12995,g=12997,p=12998,m=207969,w=12914,y=12916,b=12917,S=12928,v=12849,B={5:{name:"ESP32-C3",family:_},9:{name:"ESP32-S3",family:u},12:{name:"ESP32-C2",family:c},13:{name:"ESP32-C6",family:p},16:{name:"ESP32-H2",family:w},18:{name:"ESP32-P4",family:S},20:{name:"ESP32-C61",family:m},23:{name:"ESP32-C5",family:g},25:{name:"ESP32-H21",family:b},28:{name:"ESP32-H4",family:y},32:{name:"ESP32-S31",family:v}},R={4293968129:{name:"ESP8266",family:l},15736195:{name:"ESP32",family:d},1990:{name:"ESP32-S2",family:f}},k=3e3,x=15e4,z=100,F=(t,e)=>{const a=Math.floor(t*(e/486));return a<k?k:a},I=t=>{switch(t){case d:return{regBase:1072963584,baseFuse:1073061888,macFuse:1073061888,usrOffs:28,usr1Offs:32,usr2Offs:36,mosiDlenOffs:40,misoDlenOffs:44,w0Offs:128,uartDateReg:1610612856,flashOffs:4096};case f:return{regBase:1061167104,baseFuse:1061265408,macFuse:1061265476,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612856,flashOffs:4096};case u:return{regBase:1610620928,usrOffs:24,baseFuse:1610641408,macFuse:1610641476,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612864,flashOffs:0};case l:return{regBase:1610613248,usrOffs:28,baseFuse:1072693328,macFuse:1072693328,usr1Offs:32,usr2Offs:36,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:64,uartDateReg:1610612856,flashOffs:0};case c:case _:return{regBase:1610620928,baseFuse:1610647552,macFuse:1610647620,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case g:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:8192};case p:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case m:return{regBase:1610625024,baseFuse:1611352064,macFuse:1611352132,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case w:return{regBase:1610625024,baseFuse:1611335680,macFuse:1611335748,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case y:return{regBase:1611239424,baseFuse:1611339776,macFuse:1611339844,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610686588,flashOffs:8192};case b:return{regBase:1610625024,baseFuse:1611350016,macFuse:1611350084,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1610612860,flashOffs:0};case S:return{regBase:1342754816,baseFuse:h,macFuse:1343410244,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:1343004812,flashOffs:8192};case v:return{regBase:542113792,baseFuse:544296960,macFuse:544297028,usrOffs:24,usr1Offs:28,usr2Offs:32,mosiDlenOffs:36,misoDlenOffs:40,w0Offs:88,uartDateReg:540582028,flashOffs:8192};default:return{regBase:-1,baseFuse:-1,macFuse:-1,usrOffs:-1,usr1Offs:-1,usr2Offs:-1,mosiDlenOffs:-1,misoDlenOffs:-1,w0Offs:-1,uartDateReg:-1,flashOffs:-1}}};class U extends Error{constructor(t){super(t),this.name="SlipReadError"}}const O=async(t,a)=>{let s;return t==y||t==b||t==v?null:(t==d?s=await import("./esp32-CijhsJH1.js"):t==f?s=await import("./esp32s2-IiDBtXxo.js"):t==u?s=await import("./esp32s3-6yv5yxum.js"):t==l?s=await import("./esp8266-CUwxJpGa.js"):t==c?s=await import("./esp32c2-C17SM4gO.js"):t==_?s=await import("./esp32c3-DxRGijbg.js"):t==g?s=await import("./esp32c5-3mDOIGa4.js"):t==p?s=await import("./esp32c6-h6U0SQTm.js"):t==m?s=await import("./esp32c61-BKtexhPZ.js"):t==w?s=await import("./esp32h2-RtuWSEmP.js"):t==S&&(s=null!=a&&a>=300?await import("./esp32p4r3-CpHBYEwI.js"):await import("./esp32p4-5nkIjxqJ.js")),{...s,text:e(atob(s.text)),data:e(atob(s.data))})};function D(t){let e=t.length;for(;--e>=0;)t[e]=0}const E=256,A=286,T=30,C=15,$=new Uint8Array([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]),P=new Uint8Array([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]),L=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),N=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),M=new Array(576);D(M);const Z=new Array(60);D(Z);const H=new Array(512);D(H);const V=new Array(256);D(V);const j=new Array(29);D(j);const W=new Array(T);function K(t,e,a,s,i){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=s,this.max_length=i,this.has_stree=t&&t.length}let Y,G,q;function X(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}D(W);const J=t=>t<256?H[t]:H[256+(t>>>7)],Q=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},tt=(t,e,a)=>{t.bi_valid>16-a?(t.bi_buf|=e<<t.bi_valid&65535,Q(t,t.bi_buf),t.bi_buf=e>>16-t.bi_valid,t.bi_valid+=a-16):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=a)},et=(t,e,a)=>{tt(t,a[2*e],a[2*e+1])},at=(t,e)=>{let a=0;do{a|=1&t,t>>>=1,a<<=1}while(--e>0);return a>>>1},st=(t,e,a)=>{const s=new Array(16);let i,r,n=0;for(i=1;i<=C;i++)n=n+a[i-1]<<1,s[i]=n;for(r=0;r<=e;r++){let e=t[2*r+1];0!==e&&(t[2*r]=at(s[e]++,e))}},it=t=>{let e;for(e=0;e<A;e++)t.dyn_ltree[2*e]=0;for(e=0;e<T;e++)t.dyn_dtree[2*e]=0;for(e=0;e<19;e++)t.bl_tree[2*e]=0;t.dyn_ltree[512]=1,t.opt_len=t.static_len=0,t.sym_next=t.matches=0},rt=t=>{t.bi_valid>8?Q(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},nt=(t,e,a,s)=>{const i=2*e,r=2*a;return t[i]<t[r]||t[i]===t[r]&&s[e]<=s[a]},ht=(t,e,a)=>{const s=t.heap[a];let i=a<<1;for(;i<=t.heap_len&&(i<t.heap_len&&nt(e,t.heap[i+1],t.heap[i],t.depth)&&i++,!nt(e,s,t.heap[i],t.depth));)t.heap[a]=t.heap[i],a=i,i<<=1;t.heap[a]=s},ot=(t,e,a)=>{let s,i,r,n,h=0;if(0!==t.sym_next)do{s=255&t.pending_buf[t.sym_buf+h++],s+=(255&t.pending_buf[t.sym_buf+h++])<<8,i=t.pending_buf[t.sym_buf+h++],0===s?et(t,i,e):(r=V[i],et(t,r+E+1,e),n=$[r],0!==n&&(i-=j[r],tt(t,i,n)),s--,r=J(s),et(t,r,a),n=P[r],0!==n&&(s-=W[r],tt(t,s,n)))}while(h<t.sym_next);et(t,256,e)},lt=(t,e)=>{const a=e.dyn_tree,s=e.stat_desc.static_tree,i=e.stat_desc.has_stree,r=e.stat_desc.elems;let n,h,o,l=-1;for(t.heap_len=0,t.heap_max=573,n=0;n<r;n++)0!==a[2*n]?(t.heap[++t.heap_len]=l=n,t.depth[n]=0):a[2*n+1]=0;for(;t.heap_len<2;)o=t.heap[++t.heap_len]=l<2?++l:0,a[2*o]=1,t.depth[o]=0,t.opt_len--,i&&(t.static_len-=s[2*o+1]);for(e.max_code=l,n=t.heap_len>>1;n>=1;n--)ht(t,a,n);o=r;do{n=t.heap[1],t.heap[1]=t.heap[t.heap_len--],ht(t,a,1),h=t.heap[1],t.heap[--t.heap_max]=n,t.heap[--t.heap_max]=h,a[2*o]=a[2*n]+a[2*h],t.depth[o]=(t.depth[n]>=t.depth[h]?t.depth[n]:t.depth[h])+1,a[2*n+1]=a[2*h+1]=o,t.heap[1]=o++,ht(t,a,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const a=e.dyn_tree,s=e.max_code,i=e.stat_desc.static_tree,r=e.stat_desc.has_stree,n=e.stat_desc.extra_bits,h=e.stat_desc.extra_base,o=e.stat_desc.max_length;let l,d,f,u,c,_,g=0;for(u=0;u<=C;u++)t.bl_count[u]=0;for(a[2*t.heap[t.heap_max]+1]=0,l=t.heap_max+1;l<573;l++)d=t.heap[l],u=a[2*a[2*d+1]+1]+1,u>o&&(u=o,g++),a[2*d+1]=u,d>s||(t.bl_count[u]++,c=0,d>=h&&(c=n[d-h]),_=a[2*d],t.opt_len+=_*(u+c),r&&(t.static_len+=_*(i[2*d+1]+c)));if(0!==g){do{for(u=o-1;0===t.bl_count[u];)u--;t.bl_count[u]--,t.bl_count[u+1]+=2,t.bl_count[o]--,g-=2}while(g>0);for(u=o;0!==u;u--)for(d=t.bl_count[u];0!==d;)f=t.heap[--l],f>s||(a[2*f+1]!==u&&(t.opt_len+=(u-a[2*f+1])*a[2*f],a[2*f+1]=u),d--)}})(t,e),st(a,l,t.bl_count)},dt=(t,e,a)=>{let s,i,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),e[2*(a+1)+1]=65535,s=0;s<=a;s++)i=n,n=e[2*(s+1)+1],++h<o&&i===n||(h<l?t.bl_tree[2*i]+=h:0!==i?(i!==r&&t.bl_tree[2*i]++,t.bl_tree[32]++):h<=10?t.bl_tree[34]++:t.bl_tree[36]++,h=0,r=i,0===n?(o=138,l=3):i===n?(o=6,l=3):(o=7,l=4))},ft=(t,e,a)=>{let s,i,r=-1,n=e[1],h=0,o=7,l=4;for(0===n&&(o=138,l=3),s=0;s<=a;s++)if(i=n,n=e[2*(s+1)+1],!(++h<o&&i===n)){if(h<l)do{et(t,i,t.bl_tree)}while(0!==--h);else 0!==i?(i!==r&&(et(t,i,t.bl_tree),h--),et(t,16,t.bl_tree),tt(t,h-3,2)):h<=10?(et(t,17,t.bl_tree),tt(t,h-3,3)):(et(t,18,t.bl_tree),tt(t,h-11,7));h=0,r=i,0===n?(o=138,l=3):i===n?(o=6,l=3):(o=7,l=4)}};let ut=!1;const ct=(t,e,a,s)=>{tt(t,0+(s?1:0),3),rt(t),Q(t,a),Q(t,~a),a&&t.pending_buf.set(t.window.subarray(e,e+a),t.pending),t.pending+=a};var _t=(t,e,a,s)=>{let i,r,n=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,a=4093624447;for(e=0;e<=31;e++,a>>>=1)if(1&a&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e<E;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0})(t)),lt(t,t.l_desc),lt(t,t.d_desc),n=(t=>{let e;for(dt(t,t.dyn_ltree,t.l_desc.max_code),dt(t,t.dyn_dtree,t.d_desc.max_code),lt(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*N[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),i=t.opt_len+3+7>>>3,r=t.static_len+3+7>>>3,r<=i&&(i=r)):i=r=a+5,a+4<=i&&-1!==e?ct(t,e,a,s):4===t.strategy||r===i?(tt(t,2+(s?1:0),3),ot(t,M,Z)):(tt(t,4+(s?1:0),3),((t,e,a,s)=>{let i;for(tt(t,e-257,5),tt(t,a-1,5),tt(t,s-4,4),i=0;i<s;i++)tt(t,t.bl_tree[2*N[i]+1],3);ft(t,t.dyn_ltree,e-1),ft(t,t.dyn_dtree,a-1)})(t,t.l_desc.max_code+1,t.d_desc.max_code+1,n+1),ot(t,t.dyn_ltree,t.dyn_dtree)),it(t),s&&rt(t)},gt={_tr_init:t=>{ut||((()=>{let t,e,a,s,i;const r=new Array(16);for(a=0,s=0;s<28;s++)for(j[s]=a,t=0;t<1<<$[s];t++)V[a++]=s;for(V[a-1]=s,i=0,s=0;s<16;s++)for(W[s]=i,t=0;t<1<<P[s];t++)H[i++]=s;for(i>>=7;s<T;s++)for(W[s]=i<<7,t=0;t<1<<P[s]-7;t++)H[256+i++]=s;for(e=0;e<=C;e++)r[e]=0;for(t=0;t<=143;)M[2*t+1]=8,t++,r[8]++;for(;t<=255;)M[2*t+1]=9,t++,r[9]++;for(;t<=279;)M[2*t+1]=7,t++,r[7]++;for(;t<=287;)M[2*t+1]=8,t++,r[8]++;for(st(M,287,r),t=0;t<T;t++)Z[2*t+1]=5,Z[2*t]=at(t,5);Y=new K(M,$,257,A,C),G=new K(Z,P,0,T,C),q=new K(new Array(0),L,0,19,7)})(),ut=!0),t.l_desc=new X(t.dyn_ltree,Y),t.d_desc=new X(t.dyn_dtree,G),t.bl_desc=new X(t.bl_tree,q),t.bi_buf=0,t.bi_valid=0,it(t)},_tr_stored_block:ct,_tr_flush_block:_t,_tr_tally:(t,e,a)=>(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=a,0===e?t.dyn_ltree[2*a]++:(t.matches++,e--,t.dyn_ltree[2*(V[a]+E+1)]++,t.dyn_dtree[2*J(e)]++),t.sym_next===t.sym_end),_tr_align:t=>{tt(t,2,3),et(t,256,M),(t=>{16===t.bi_valid?(Q(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)})(t)}};var pt=(t,e,a,s)=>{let i=65535&t,r=t>>>16&65535,n=0;for(;0!==a;){n=a>2e3?2e3:a,a-=n;do{i=i+e[s++]|0,r=r+i|0}while(--n);i%=65521,r%=65521}return i|r<<16};const mt=new Uint32Array((()=>{let t,e=[];for(var a=0;a<256;a++){t=a;for(var s=0;s<8;s++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e})());var wt=(t,e,a,s)=>{const i=mt,r=s+a;t^=-1;for(let a=s;a<r;a++)t=t>>>8^i[255&(t^e[a])];return-1^t},yt={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},bt={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:St,_tr_stored_block:vt,_tr_flush_block:Bt,_tr_tally:Rt,_tr_align:kt}=gt,{Z_NO_FLUSH:xt,Z_PARTIAL_FLUSH:zt,Z_FULL_FLUSH:Ft,Z_FINISH:It,Z_BLOCK:Ut,Z_OK:Ot,Z_STREAM_END:Dt,Z_STREAM_ERROR:Et,Z_DATA_ERROR:At,Z_BUF_ERROR:Tt,Z_DEFAULT_COMPRESSION:Ct,Z_FILTERED:$t,Z_HUFFMAN_ONLY:Pt,Z_RLE:Lt,Z_FIXED:Nt,Z_DEFAULT_STRATEGY:Mt,Z_UNKNOWN:Zt,Z_DEFLATED:Ht}=bt,Vt=258,jt=262,Wt=42,Kt=113,Yt=666,Gt=(t,e)=>(t.msg=yt[e],e),qt=t=>2*t-(t>4?9:0),Xt=t=>{let e=t.length;for(;--e>=0;)t[e]=0},Jt=t=>{let e,a,s,i=t.w_size;e=t.hash_size,s=e;do{a=t.head[--s],t.head[s]=a>=i?a-i:0}while(--e);e=i,s=e;do{a=t.prev[--s],t.prev[s]=a>=i?a-i:0}while(--e)};let Qt=(t,e,a)=>(e<<t.hash_shift^a)&t.hash_mask;const te=t=>{const e=t.state;let a=e.pending;a>t.avail_out&&(a=t.avail_out),0!==a&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+a),t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))},ee=(t,e)=>{Bt(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,te(t.strm)},ae=(t,e)=>{t.pending_buf[t.pending++]=e},se=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},ie=(t,e,a,s)=>{let i=t.avail_in;return i>s&&(i=s),0===i?0:(t.avail_in-=i,e.set(t.input.subarray(t.next_in,t.next_in+i),a),1===t.state.wrap?t.adler=pt(t.adler,e,i,a):2===t.state.wrap&&(t.adler=wt(t.adler,e,i,a)),t.next_in+=i,t.total_in+=i,i)},re=(t,e)=>{let a,s,i=t.max_chain_length,r=t.strstart,n=t.prev_length,h=t.nice_match;const o=t.strstart>t.w_size-jt?t.strstart-(t.w_size-jt):0,l=t.window,d=t.w_mask,f=t.prev,u=t.strstart+Vt;let c=l[r+n-1],_=l[r+n];t.prev_length>=t.good_match&&(i>>=2),h>t.lookahead&&(h=t.lookahead);do{if(a=e,l[a+n]===_&&l[a+n-1]===c&&l[a]===l[r]&&l[++a]===l[r+1]){r+=2,a++;do{}while(l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&l[++r]===l[++a]&&r<u);if(s=Vt-(u-r),r=u-Vt,s>n){if(t.match_start=e,n=s,s>=h)break;c=l[r+n-1],_=l[r+n]}}}while((e=f[e&d])>o&&0!==--i);return n<=t.lookahead?n:t.lookahead},ne=t=>{const e=t.w_size;let a,s,i;do{if(s=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-jt)&&(t.window.set(t.window.subarray(e,e+e-s),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),Jt(t),s+=e),0===t.strm.avail_in)break;if(a=ie(t.strm,t.window,t.strstart+t.lookahead,s),t.lookahead+=a,t.lookahead+t.insert>=3)for(i=t.strstart-t.insert,t.ins_h=t.window[i],t.ins_h=Qt(t,t.ins_h,t.window[i+1]);t.insert&&(t.ins_h=Qt(t,t.ins_h,t.window[i+3-1]),t.prev[i&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=i,i++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<jt&&0!==t.strm.avail_in)},he=(t,e)=>{let a,s,i,r=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,n=0,h=t.strm.avail_in;do{if(a=65535,i=t.bi_valid+42>>3,t.strm.avail_out<i)break;if(i=t.strm.avail_out-i,s=t.strstart-t.block_start,a>s+t.strm.avail_in&&(a=s+t.strm.avail_in),a>i&&(a=i),a<r&&(0===a&&e!==It||e===xt||a!==s+t.strm.avail_in))break;n=e===It&&a===s+t.strm.avail_in?1:0,vt(t,0,0,n),t.pending_buf[t.pending-4]=a,t.pending_buf[t.pending-3]=a>>8,t.pending_buf[t.pending-2]=~a,t.pending_buf[t.pending-1]=~a>>8,te(t.strm),s&&(s>a&&(s=a),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+s),t.strm.next_out),t.strm.next_out+=s,t.strm.avail_out-=s,t.strm.total_out+=s,t.block_start+=s,a-=s),a&&(ie(t.strm,t.strm.output,t.strm.next_out,a),t.strm.next_out+=a,t.strm.avail_out-=a,t.strm.total_out+=a)}while(0===n);return h-=t.strm.avail_in,h&&(h>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=h&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-h,t.strm.next_in),t.strstart),t.strstart+=h,t.insert+=h>t.w_size-t.insert?t.w_size-t.insert:h),t.block_start=t.strstart),t.high_water<t.strstart&&(t.high_water=t.strstart),n?4:e!==xt&&e!==It&&0===t.strm.avail_in&&t.strstart===t.block_start?2:(i=t.window_size-t.strstart,t.strm.avail_in>i&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,i+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),i>t.strm.avail_in&&(i=t.strm.avail_in),i&&(ie(t.strm,t.window,t.strstart,i),t.strstart+=i,t.insert+=i>t.w_size-t.insert?t.w_size-t.insert:i),t.high_water<t.strstart&&(t.high_water=t.strstart),i=t.bi_valid+42>>3,i=t.pending_buf_size-i>65535?65535:t.pending_buf_size-i,r=i>t.w_size?t.w_size:i,s=t.strstart-t.block_start,(s>=r||(s||e===It)&&e!==xt&&0===t.strm.avail_in&&s<=i)&&(a=s>i?i:s,n=e===It&&0===t.strm.avail_in&&a===s?1:0,vt(t,t.block_start,a,n),t.block_start+=a,te(t.strm)),n?3:1)},oe=(t,e)=>{let a,s;for(;;){if(t.lookahead<jt){if(ne(t),t.lookahead<jt&&e===xt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==a&&t.strstart-a<=t.w_size-jt&&(t.match_length=re(t,a)),t.match_length>=3)if(s=Rt(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do{t.strstart++,t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!==--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+1]);else s=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(s&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===It?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2},le=(t,e)=>{let a,s,i;for(;;){if(t.lookahead<jt){if(ne(t),t.lookahead<jt&&e===xt)return 1;if(0===t.lookahead)break}if(a=0,t.lookahead>=3&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==a&&t.prev_length<t.max_lazy_match&&t.strstart-a<=t.w_size-jt&&(t.match_length=re(t,a),t.match_length<=5&&(t.strategy===$t||3===t.match_length&&t.strstart-t.match_start>4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){i=t.strstart+t.lookahead-3,s=Rt(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=i&&(t.ins_h=Qt(t,t.ins_h,t.window[t.strstart+3-1]),a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!==--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,s&&(ee(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(s=Rt(t,0,t.window[t.strstart-1]),s&&ee(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(s=Rt(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===It?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2};function de(t,e,a,s,i){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=s,this.func=i}const fe=[new de(0,0,0,0,he),new de(4,4,8,4,oe),new de(4,5,16,8,oe),new de(4,6,32,32,oe),new de(4,4,16,16,le),new de(8,16,32,32,le),new de(8,16,128,128,le),new de(8,32,128,256,le),new de(32,128,258,1024,le),new de(32,258,258,4096,le)];function ue(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Ht,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),Xt(this.dyn_ltree),Xt(this.dyn_dtree),Xt(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),Xt(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),Xt(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const ce=t=>{if(!t)return 1;const e=t.state;return!e||e.strm!==t||e.status!==Wt&&57!==e.status&&69!==e.status&&73!==e.status&&91!==e.status&&103!==e.status&&e.status!==Kt&&e.status!==Yt?1:0},_e=t=>{if(ce(t))return Gt(t,Et);t.total_in=t.total_out=0,t.data_type=Zt;const e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=2===e.wrap?57:e.wrap?Wt:Kt,t.adler=2===e.wrap?0:1,e.last_flush=-2,St(e),Ot},ge=t=>{const e=_e(t);var a;return e===Ot&&((a=t.state).window_size=2*a.w_size,Xt(a.head),a.max_lazy_match=fe[a.level].max_lazy,a.good_match=fe[a.level].good_length,a.nice_match=fe[a.level].nice_length,a.max_chain_length=fe[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=2,a.match_available=0,a.ins_h=0),e},pe=(t,e,a,s,i,r)=>{if(!t)return Et;let n=1;if(e===Ct&&(e=6),s<0?(n=0,s=-s):s>15&&(n=2,s-=16),i<1||i>9||a!==Ht||s<8||s>15||e<0||e>9||r<0||r>Nt||8===s&&1!==n)return Gt(t,Et);8===s&&(s=9);const h=new ue;return t.state=h,h.strm=t,h.status=Wt,h.wrap=n,h.gzhead=null,h.w_bits=s,h.w_size=1<<h.w_bits,h.w_mask=h.w_size-1,h.hash_bits=i+7,h.hash_size=1<<h.hash_bits,h.hash_mask=h.hash_size-1,h.hash_shift=~~((h.hash_bits+3-1)/3),h.window=new Uint8Array(2*h.w_size),h.head=new Uint16Array(h.hash_size),h.prev=new Uint16Array(h.w_size),h.lit_bufsize=1<<i+6,h.pending_buf_size=4*h.lit_bufsize,h.pending_buf=new Uint8Array(h.pending_buf_size),h.sym_buf=h.lit_bufsize,h.sym_end=3*(h.lit_bufsize-1),h.level=e,h.strategy=r,h.method=a,ge(t)};var me={deflateInit:(t,e)=>pe(t,e,Ht,15,8,Mt),deflateInit2:pe,deflateReset:ge,deflateResetKeep:_e,deflateSetHeader:(t,e)=>ce(t)||2!==t.state.wrap?Et:(t.state.gzhead=e,Ot),deflate:(t,e)=>{if(ce(t)||e>Ut||e<0)return t?Gt(t,Et):Et;const a=t.state;if(!t.output||0!==t.avail_in&&!t.input||a.status===Yt&&e!==It)return Gt(t,0===t.avail_out?Tt:Et);const s=a.last_flush;if(a.last_flush=e,0!==a.pending){if(te(t),0===t.avail_out)return a.last_flush=-1,Ot}else if(0===t.avail_in&&qt(e)<=qt(s)&&e!==It)return Gt(t,Tt);if(a.status===Yt&&0!==t.avail_in)return Gt(t,Tt);if(a.status===Wt&&0===a.wrap&&(a.status=Kt),a.status===Wt){let e=Ht+(a.w_bits-8<<4)<<8,s=-1;if(s=a.strategy>=Pt||a.level<2?0:a.level<6?1:6===a.level?2:3,e|=s<<6,0!==a.strstart&&(e|=32),e+=31-e%31,se(a,e),0!==a.strstart&&(se(a,t.adler>>>16),se(a,65535&t.adler)),t.adler=1,a.status=Kt,te(t),0!==a.pending)return a.last_flush=-1,Ot}if(57===a.status)if(t.adler=0,ae(a,31),ae(a,139),ae(a,8),a.gzhead)ae(a,(a.gzhead.text?1:0)+(a.gzhead.hcrc?2:0)+(a.gzhead.extra?4:0)+(a.gzhead.name?8:0)+(a.gzhead.comment?16:0)),ae(a,255&a.gzhead.time),ae(a,a.gzhead.time>>8&255),ae(a,a.gzhead.time>>16&255),ae(a,a.gzhead.time>>24&255),ae(a,9===a.level?2:a.strategy>=Pt||a.level<2?4:0),ae(a,255&a.gzhead.os),a.gzhead.extra&&a.gzhead.extra.length&&(ae(a,255&a.gzhead.extra.length),ae(a,a.gzhead.extra.length>>8&255)),a.gzhead.hcrc&&(t.adler=wt(t.adler,a.pending_buf,a.pending,0)),a.gzindex=0,a.status=69;else if(ae(a,0),ae(a,0),ae(a,0),ae(a,0),ae(a,0),ae(a,9===a.level?2:a.strategy>=Pt||a.level<2?4:0),ae(a,3),a.status=Kt,te(t),0!==a.pending)return a.last_flush=-1,Ot;if(69===a.status){if(a.gzhead.extra){let e=a.pending,s=(65535&a.gzhead.extra.length)-a.gzindex;for(;a.pending+s>a.pending_buf_size;){let i=a.pending_buf_size-a.pending;if(a.pending_buf.set(a.gzhead.extra.subarray(a.gzindex,a.gzindex+i),a.pending),a.pending=a.pending_buf_size,a.gzhead.hcrc&&a.pending>e&&(t.adler=wt(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex+=i,te(t),0!==a.pending)return a.last_flush=-1,Ot;e=0,s-=i}let i=new Uint8Array(a.gzhead.extra);a.pending_buf.set(i.subarray(a.gzindex,a.gzindex+s),a.pending),a.pending+=s,a.gzhead.hcrc&&a.pending>e&&(t.adler=wt(t.adler,a.pending_buf,a.pending-e,e)),a.gzindex=0}a.status=73}if(73===a.status){if(a.gzhead.name){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),te(t),0!==a.pending)return a.last_flush=-1,Ot;s=0}e=a.gzindex<a.gzhead.name.length?255&a.gzhead.name.charCodeAt(a.gzindex++):0,ae(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),a.gzindex=0}a.status=91}if(91===a.status){if(a.gzhead.comment){let e,s=a.pending;do{if(a.pending===a.pending_buf_size){if(a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s)),te(t),0!==a.pending)return a.last_flush=-1,Ot;s=0}e=a.gzindex<a.gzhead.comment.length?255&a.gzhead.comment.charCodeAt(a.gzindex++):0,ae(a,e)}while(0!==e);a.gzhead.hcrc&&a.pending>s&&(t.adler=wt(t.adler,a.pending_buf,a.pending-s,s))}a.status=103}if(103===a.status){if(a.gzhead.hcrc){if(a.pending+2>a.pending_buf_size&&(te(t),0!==a.pending))return a.last_flush=-1,Ot;ae(a,255&t.adler),ae(a,t.adler>>8&255),t.adler=0}if(a.status=Kt,te(t),0!==a.pending)return a.last_flush=-1,Ot}if(0!==t.avail_in||0!==a.lookahead||e!==xt&&a.status!==Yt){let s=0===a.level?he(a,e):a.strategy===Pt?((t,e)=>{let a;for(;;){if(0===t.lookahead&&(ne(t),0===t.lookahead)){if(e===xt)return 1;break}if(t.match_length=0,a=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===It?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2})(a,e):a.strategy===Lt?((t,e)=>{let a,s,i,r;const n=t.window;for(;;){if(t.lookahead<=Vt){if(ne(t),t.lookahead<=Vt&&e===xt)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(i=t.strstart-1,s=n[i],s===n[++i]&&s===n[++i]&&s===n[++i])){r=t.strstart+Vt;do{}while(s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&s===n[++i]&&i<r);t.match_length=Vt-(r-i),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(a=Rt(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=Rt(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(ee(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===It?(ee(t,!0),0===t.strm.avail_out?3:4):t.sym_next&&(ee(t,!1),0===t.strm.avail_out)?1:2})(a,e):fe[a.level].func(a,e);if(3!==s&&4!==s||(a.status=Yt),1===s||3===s)return 0===t.avail_out&&(a.last_flush=-1),Ot;if(2===s&&(e===zt?kt(a):e!==Ut&&(vt(a,0,0,!1),e===Ft&&(Xt(a.head),0===a.lookahead&&(a.strstart=0,a.block_start=0,a.insert=0))),te(t),0===t.avail_out))return a.last_flush=-1,Ot}return e!==It?Ot:a.wrap<=0?Dt:(2===a.wrap?(ae(a,255&t.adler),ae(a,t.adler>>8&255),ae(a,t.adler>>16&255),ae(a,t.adler>>24&255),ae(a,255&t.total_in),ae(a,t.total_in>>8&255),ae(a,t.total_in>>16&255),ae(a,t.total_in>>24&255)):(se(a,t.adler>>>16),se(a,65535&t.adler)),te(t),a.wrap>0&&(a.wrap=-a.wrap),0!==a.pending?Ot:Dt)},deflateEnd:t=>{if(ce(t))return Et;const e=t.state.status;return t.state=null,e===Kt?Gt(t,At):Ot},deflateSetDictionary:(t,e)=>{let a=e.length;if(ce(t))return Et;const s=t.state,i=s.wrap;if(2===i||1===i&&s.status!==Wt||s.lookahead)return Et;if(1===i&&(t.adler=pt(t.adler,e,a,0)),s.wrap=0,a>=s.w_size){0===i&&(Xt(s.head),s.strstart=0,s.block_start=0,s.insert=0);let t=new Uint8Array(s.w_size);t.set(e.subarray(a-s.w_size,a),0),e=t,a=s.w_size}const r=t.avail_in,n=t.next_in,h=t.input;for(t.avail_in=a,t.next_in=0,t.input=e,ne(s);s.lookahead>=3;){let t=s.strstart,e=s.lookahead-2;do{s.ins_h=Qt(s,s.ins_h,s.window[t+3-1]),s.prev[t&s.w_mask]=s.head[s.ins_h],s.head[s.ins_h]=t,t++}while(--e);s.strstart=t,s.lookahead=2,ne(s)}return s.strstart+=s.lookahead,s.block_start=s.strstart,s.insert=s.lookahead,s.lookahead=0,s.match_length=s.prev_length=2,s.match_available=0,t.next_in=n,t.input=h,t.avail_in=r,s.wrap=i,Ot},deflateInfo:"pako deflate (from Nodeca project)"};const we=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var ye=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const a=e.shift();if(a){if("object"!=typeof a)throw new TypeError(a+"must be non-object");for(const e in a)we(a,e)&&(t[e]=a[e])}}return t},be=t=>{let e=0;for(let a=0,s=t.length;a<s;a++)e+=t[a].length;const a=new Uint8Array(e);for(let e=0,s=0,i=t.length;e<i;e++){let i=t[e];a.set(i,s),s+=i.length}return a};let Se=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){Se=!1}const ve=new Uint8Array(256);for(let t=0;t<256;t++)ve[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;ve[254]=ve[254]=1;var Be=t=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);let e,a,s,i,r,n=t.length,h=0;for(i=0;i<n;i++)a=t.charCodeAt(i),55296==(64512&a)&&i+1<n&&(s=t.charCodeAt(i+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),i++)),h+=a<128?1:a<2048?2:a<65536?3:4;for(e=new Uint8Array(h),r=0,i=0;r<h;i++)a=t.charCodeAt(i),55296==(64512&a)&&i+1<n&&(s=t.charCodeAt(i+1),56320==(64512&s)&&(a=65536+(a-55296<<10)+(s-56320),i++)),a<128?e[r++]=a:a<2048?(e[r++]=192|a>>>6,e[r++]=128|63&a):a<65536?(e[r++]=224|a>>>12,e[r++]=128|a>>>6&63,e[r++]=128|63&a):(e[r++]=240|a>>>18,e[r++]=128|a>>>12&63,e[r++]=128|a>>>6&63,e[r++]=128|63&a);return e};var Re=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const ke=Object.prototype.toString,{Z_NO_FLUSH:xe,Z_SYNC_FLUSH:ze,Z_FULL_FLUSH:Fe,Z_FINISH:Ie,Z_OK:Ue,Z_STREAM_END:Oe,Z_DEFAULT_COMPRESSION:De,Z_DEFAULT_STRATEGY:Ee,Z_DEFLATED:Ae}=bt;function Te(t){this.options=ye({level:De,method:Ae,chunkSize:16384,windowBits:15,memLevel:8,strategy:Ee},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Re,this.strm.avail_out=0;let a=me.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(a!==Ue)throw new Error(yt[a]);if(e.header&&me.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t="string"==typeof e.dictionary?Be(e.dictionary):"[object ArrayBuffer]"===ke.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,a=me.deflateSetDictionary(this.strm,t),a!==Ue)throw new Error(yt[a]);this._dict_set=!0}}Te.prototype.push=function(t,e){const a=this.strm,s=this.options.chunkSize;let i,r;if(this.ended)return!1;for(r=e===~~e?e:!0===e?Ie:xe,"string"==typeof t?a.input=Be(t):"[object ArrayBuffer]"===ke.call(t)?a.input=new Uint8Array(t):a.input=t,a.next_in=0,a.avail_in=a.input.length;;)if(0===a.avail_out&&(a.output=new Uint8Array(s),a.next_out=0,a.avail_out=s),(r===ze||r===Fe)&&a.avail_out<=6)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else{if(i=me.deflate(a,r),i===Oe)return a.next_out>0&&this.onData(a.output.subarray(0,a.next_out)),i=me.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===Ue;if(0!==a.avail_out){if(r>0&&a.next_out>0)this.onData(a.output.subarray(0,a.next_out)),a.avail_out=0;else if(0===a.avail_in)break}else this.onData(a.output)}return!0},Te.prototype.onData=function(t){this.chunks.push(t)},Te.prototype.onEnd=function(t){t===Ue&&(this.result=be(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var Ce={deflate:function(t,e){const a=new Te(e);if(a.push(t,!0),a.err)throw a.msg||yt[a.err];return a.result}};const{deflate:$e}=Ce;var Pe=$e;const Le={b:{u:DataView.prototype.getInt8,p:DataView.prototype.setInt8,bytes:1},B:{u:DataView.prototype.getUint8,p:DataView.prototype.setUint8,bytes:1},h:{u:DataView.prototype.getInt16,p:DataView.prototype.setInt16,bytes:2},H:{u:DataView.prototype.getUint16,p:DataView.prototype.setUint16,bytes:2},i:{u:DataView.prototype.getInt32,p:DataView.prototype.setInt32,bytes:4},I:{u:DataView.prototype.getUint32,p:DataView.prototype.setUint32,bytes:4}},Ne=(t,...e)=>{let a=0;if(t.replace(/[<>]/,"").length!=e.length)throw"Pack format to Argument count mismatch";const s=[];let i=!0;for(let s=0;s<t.length;s++)"<"==t[s]?i=!0:">"==t[s]?i=!1:(r(t[s],e[a]),a++);function r(t,e){if(!(t in Le))throw"Unhandled character '"+t+"' in pack format";const a=Le[t].bytes,r=new DataView(new ArrayBuffer(a));Le[t].p.bind(r)(0,e,i);for(let t=0;t<a;t++)s.push(r.getUint8(t))}return s},Me=(t,e)=>{let a=0;const s=[];let i=!0;for(const e of t)"<"==e?i=!0:">"==e?i=!1:r(e);function r(t){if(!(t in Le))throw"Unhandled character '"+t+"' in unpack format";const r=Le[t].bytes,n=new DataView(new ArrayBuffer(r));for(let t=0;t<r;t++)n.setUint8(t,255&e[a+t]);const h=Le[t].u.bind(n);s.push(h(0,i)),a+=r}return s};class Ze extends EventTarget{constructor(t,e,a){super(),this.port=t,this.logger=e,this._parent=a,this.chipName=null,this.chipRevision=null,this.chipVariant=null,this._efuses=new Array(4).fill(0),this._flashsize=4194304,this.debug=!1,this.IS_STUB=!1,this.connected=!0,this.flashSize=null,this._currentBaudRate=n,this._isESP32S2NativeUSB=!1,this._initializationSucceeded=!1,this.state_DTR=!1}get _inputBuffer(){return this._parent?this._parent._inputBuffer:this.__inputBuffer}get _totalBytesRead(){return this._parent?this._parent._totalBytesRead:this.__totalBytesRead||0}set _totalBytesRead(t){this._parent?this._parent._totalBytesRead=t:this.__totalBytesRead=t}detectUSBSerialChip(t,e){const a={6790:{29986:{name:"CH340",maxBaudrate:460800},29987:{name:"CH340",maxBaudrate:460800},30084:{name:"CH340",maxBaudrate:460800},21795:{name:"CH341",maxBaudrate:2e6},21971:{name:"CH343",maxBaudrate:6e6},21972:{name:"CH9102",maxBaudrate:6e6},21976:{name:"CH9101",maxBaudrate:3e6}},4292:{6e4:{name:"CP2102(n)",maxBaudrate:3e6},60016:{name:"CP2105",maxBaudrate:2e6},60017:{name:"CP2108",maxBaudrate:2e6}},1027:{24577:{name:"FT232R",maxBaudrate:3e6},24592:{name:"FT2232",maxBaudrate:3e6},24593:{name:"FT4232",maxBaudrate:3e6},24596:{name:"FT232H",maxBaudrate:12e6},24597:{name:"FT230X",maxBaudrate:3e6}},12346:{2:{name:"ESP32-S2 Native USB",maxBaudrate:2e6},4097:{name:"ESP32 Native USB",maxBaudrate:2e6},4098:{name:"ESP32 Native USB",maxBaudrate:2e6},16386:{name:"ESP32 Native USB",maxBaudrate:2e6},4096:{name:"ESP32 Native USB",maxBaudrate:2e6}}}[t];return a&&a[e]?a[e]:{name:`Unknown (VID: 0x${t.toString(16)}, PID: 0x${e.toString(16)})`}}async initialize(){if(await this.hardReset(!0),!this._parent){this.__inputBuffer=[],this.__totalBytesRead=0;const t=this.port.getInfo();if(t.usbVendorId&&t.usbProductId){const e=this.detectUSBSerialChip(t.usbVendorId,t.usbProductId);this.logger.log(`USB-Serial: ${e.name} (VID: 0x${t.usbVendorId.toString(16)}, PID: 0x${t.usbProductId.toString(16)})`),e.maxBaudrate&&(this._maxUSBSerialBaudrate=e.maxBaudrate,this.logger.log(`Max baudrate: ${e.maxBaudrate}`)),12346===t.usbVendorId&&2===t.usbProductId&&(this._isESP32S2NativeUSB=!0)}this.readLoop()}await this.drainInputBuffer(200),await this.flushSerialBuffers(),await this.sync(),await this.detectChip();const t=I(this.getChipFamily()),e=t.macFuse;for(let t=0;t<4;t++)this._efuses[t]=await this.readRegister(e+4*t);this.logger.log(`Chip type ${this.chipName}`),this.logger.debug(`Bootloader flash offset: 0x${t.flashOffs.toString(16)}`),this._initializationSucceeded=!0}async detectChip(){try{const t=(await this.getSecurityInfo()).chipId,e=B[t];if(e)return this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===S&&(this.chipRevision=await this.getChipRevision(),this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`),this.chipRevision>=300?this.chipVariant="rev300":this.chipVariant="rev0",this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`)),void this.logger.debug(`Detected chip via IMAGE_CHIP_ID: ${t} (${this.chipName})`);this.logger.debug(`Unknown IMAGE_CHIP_ID: ${t}, falling back to magic value detection`)}catch(t){this.logger.debug(`GET_SECURITY_INFO failed, using magic value detection: ${t}`),await this.drainInputBuffer(200),this._inputBuffer.length=0,await i(z);try{await this.sync()}catch(t){this.logger.debug(`Re-sync after GET_SECURITY_INFO failure: ${t}`)}}const t=await this.readRegister(1073745920),e=R[t>>>0];if(void 0===e)throw new Error(`Unknown Chip: Hex: ${s(t>>>0,8).toLowerCase()} Number: ${t}`);this.chipName=e.name,this.chipFamily=e.family,this.chipFamily===S&&(this.chipRevision=await this.getChipRevision(),this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`),this.chipRevision>=300?this.chipVariant="rev300":this.chipVariant="rev0",this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`)),this.logger.debug(`Detected chip via magic value: ${s(t>>>0,8)} (${this.chipName})`)}async getChipRevision(){if(this.chipFamily!==S)return 0;const t=await this.readRegister(1343410252);return 100*((t>>23&1)<<2|t>>4&3)+(15&t)}async getSecurityInfo(){const[,t]=await this.checkCommand(20,[],0);if(0===t.length)throw new Error("GET_SECURITY_INFO not supported or returned empty response");if(t.length<12)throw new Error(`Invalid security info response length: ${t.length} (expected at least 12 bytes)`);return{flags:Me("<I",t.slice(0,4))[0],flashCryptCnt:t[4],keyPurposes:Array.from(t.slice(5,12)),chipId:t.length>=16?Me("<I",t.slice(12,16))[0]:0,apiVersion:t.length>=20?Me("<I",t.slice(16,20))[0]:0}}async readLoop(){this.debug&&this.logger.debug("Starting read loop"),this._reader=this.port.readable.getReader();try{let t=!0;for(;t;){const{value:e,done:a}=await this._reader.read();if(a){this._reader.releaseLock(),t=!1;break}if(!e||0===e.length)continue;const s=Array.from(e);Array.prototype.push.apply(this._inputBuffer,s),this._totalBytesRead+=e.length}}catch{this.logger.error("Read loop got disconnected")}this.connected=!1,this._isESP32S2NativeUSB&&!this._initializationSucceeded&&(this.logger.log("ESP32-S2 Native USB detected - requesting port reselection"),this.dispatchEvent(new CustomEvent("esp32s2-usb-reconnect",{detail:{message:"ESP32-S2 Native USB requires port reselection"}}))),this.dispatchEvent(new Event("disconnect")),this.logger.debug("Finished read loop")}sleep(t=100){return new Promise(e=>setTimeout(e,t))}async setRTS(t){await this.port.setSignals({requestToSend:t}),await this.setDTR(this.state_DTR)}async setDTR(t){this.state_DTR=t,await this.port.setSignals({dataTerminalReady:t})}async hardReset(t=!1){t?4097===this.port.getInfo().usbProductId?(await this.setDTR(!1),await this.setRTS(!1),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(100),await this.setRTS(!0),await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!1),await this.setRTS(!1),this.logger.log("USB MCU reset.")):(await this.setDTR(!1),await this.setRTS(!0),await this.sleep(100),await this.setDTR(!0),await this.setRTS(!1),await this.sleep(50),await this.setDTR(!1),this.logger.log("DTR/RTS USB serial chip reset.")):(await this.setRTS(!0),await this.sleep(100),await this.setRTS(!1),this.logger.log("Hard reset.")),await new Promise(t=>setTimeout(t,1e3))}macAddr(){const t=new Array(6).fill(0),e=this._efuses[0],a=this._efuses[1],s=this._efuses[2],i=this._efuses[3];let r;if(this.chipFamily==l){if(0!=i)r=[i>>16&255,i>>8&255,255&i];else if(a>>16&255){if(1!=(a>>16&255))throw new Error("Couldnt determine OUI");r=[172,208,116]}else r=[24,254,52];t[0]=r[0],t[1]=r[1],t[2]=r[2],t[3]=a>>8&255,t[4]=255&a,t[5]=e>>24&255}else if(this.chipFamily==d)t[0]=s>>8&255,t[1]=255&s,t[2]=a>>24&255,t[3]=a>>16&255,t[4]=a>>8&255,t[5]=255&a;else{if(this.chipFamily!=f&&this.chipFamily!=u&&this.chipFamily!=c&&this.chipFamily!=_&&this.chipFamily!=g&&this.chipFamily!=p&&this.chipFamily!=m&&this.chipFamily!=w&&this.chipFamily!=y&&this.chipFamily!=b&&this.chipFamily!=S&&this.chipFamily!=v)throw new Error("Unknown chip family");t[0]=a>>8&255,t[1]=255&a,t[2]=e>>24&255,t[3]=e>>16&255,t[4]=e>>8&255,t[5]=255&e}return t}async readRegister(t){this.debug&&this.logger.debug("Reading from Register "+s(t,8));const e=Ne("<I",t);await this.sendCommand(10,e);const[a]=await this.getResponse(10);return a}async checkCommand(t,e,a=0,i=3e3){i=Math.min(i,3e5),await this.sendCommand(t,e,a);const[r,n]=await this.getResponse(t,i);if(null===n)throw new Error("Didn't get enough status bytes");let h=n,o=0;if(this.IS_STUB||this.chipFamily==l?o=2:[d,f,u,c,_,g,p,m,w,y,b,S,v].includes(this.chipFamily)||20===t?o=4:[2,4].includes(h.length)&&(o=h.length),h.length<o)throw new Error("Didn't get enough status bytes");const B=h.slice(-o,h.length);if(h=h.slice(0,-o),this.debug&&(this.logger.debug("status",B),this.logger.debug("value",r),this.logger.debug("data",h)),1==B[0])throw 5==B[1]?(await this.drainInputBuffer(200),new Error("Invalid (unsupported) command "+s(t))):new Error("Command failure error code "+s(B[1]));return[r,h]}async sendCommand(e,a,s=0){const i=t([...Ne("<BBHI",0,e,a.length,s),...a]);this.debug&&this.logger.debug(`Writing ${i.length} byte${1==i.length?"":"s"}:`,i),await this.writeToStream(i)}async readPacket(t){let e=null,r=!1,n=[];for(;;){const h=Date.now();for(n=[];Date.now()-h<t;){if(this._inputBuffer.length>0){n.push(this._inputBuffer.shift());break}await i(1)}if(0==n.length){throw new U("Timed out waiting for packet "+(null===e?"header":"content"))}this.debug&&this.logger.debug("Read "+n.length+" bytes: "+a(n));for(const t of n)if(null===e){if(192!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(n)),this.logger.debug("Remaining data in serial buffer: "+a(this._inputBuffer))),new U("Invalid head of packet ("+s(t)+")");e=[]}else if(r)if(r=!1,220==t)e.push(192);else{if(221!=t)throw this.debug&&(this.logger.debug("Read invalid data: "+a(n)),this.logger.debug("Remaining data in serial buffer: "+a(this._inputBuffer))),new U("Invalid SLIP escape (0xdb, "+s(t)+")");e.push(219)}else if(219==t)r=!0;else{if(192==t)return this.debug&&this.logger.debug("Received full packet: "+a(e)),e;e.push(t)}}throw new U("Invalid state")}async getResponse(t,e=3e3){for(let a=0;a<100;a++){const a=await this.readPacket(e);if(a.length<8)continue;const[i,r,,n]=Me("<BBHI",a.slice(0,8));if(1!=i)continue;const h=a.slice(8);if(null==t||r==t)return[n,h];if(0!=h[0]&&5==h[1])throw await this.drainInputBuffer(200),new Error(`Invalid (unsupported) command ${s(t)}`)}throw"Response doesn't match request"}checksum(t,e=239){for(const a of t)e^=a;return e}async setBaudrate(t){if(this.chipFamily==l)throw new Error("Changing baud rate is not supported on the ESP8266");try{const e=Ne("<II",t,this.IS_STUB?n:0);await this.checkCommand(15,e)}catch(e){throw this.logger.error(`Baudrate change error: ${e}`),new Error(`Unable to change the baud rate to ${t}: No response from set baud rate command.`)}this._parent?await this._parent.reconfigurePort(t):await this.reconfigurePort(t),await i(z),this._parent?this._parent._currentBaudRate=t:this._currentBaudRate=t;const e=this._parent?this._parent._maxUSBSerialBaudrate:this._maxUSBSerialBaudrate;e&&t>e&&(this.logger.log(`⚠️ WARNING: Baudrate ${t} exceeds USB-Serial chip limit (${e})!`),this.logger.log("⚠️ This may cause data corruption or connection failures!")),this.logger.log(`Changed baud rate to ${t}`)}async reconfigurePort(t){var e;try{await(null===(e=this._reader)||void 0===e?void 0:e.cancel()),await this.port.close(),await this.port.open({baudRate:t}),await this.flushSerialBuffers(),this.readLoop()}catch(e){throw this.logger.error(`Reconfigure port error: ${e}`),new Error(`Unable to change the baud rate to ${t}: ${e}`)}}async sync(){for(let t=0;t<5;t++){this._inputBuffer.length=0;if(await this._sync())return await i(z),!0;await i(z)}throw new Error("Couldn't sync to ESP. Try resetting.")}async _sync(){await this.sendCommand(8,o);for(let t=0;t<8;t++)try{const[,t]=await this.getResponse(8,z);if(t.length>1&&0==t[0]&&0==t[1])return!0}catch{}return!1}getFlashWriteSize(){return this.IS_STUB?16384:1024}async flashData(t,e,a=0,i=!1){if(t.byteLength>=8){const e=Array.from(new Uint8Array(t,0,4)),a=e[0],i=e[2],r=e[3];this.logger.log(`Image header, Magic=${s(a)}, FlashMode=${s(i)}, FlashSizeFreq=${s(r)}`)}const r=t.byteLength;let n,h=0,o=k;i?(n=Pe(new Uint8Array(t),{level:9}).buffer,h=n.byteLength,this.logger.log(`Writing data with filesize: ${r}. Compressed Size: ${h}`),o=await this.flashDeflBegin(r,h,a)):(this.logger.log(`Writing data with filesize: ${r}`),n=t,await this.flashBegin(r,a));let l=[],d=0,f=0,u=0;const c=Date.now(),_=this.getFlashWriteSize(),g=i?h:r;for(;g-u>0;)this.debug&&this.logger.log(`Writing at ${s(a+d*_,8)} `),g-u>=_?l=Array.from(new Uint8Array(n,u,_)):(l=Array.from(new Uint8Array(n,u,g-u)),i||(l=l.concat(new Array(_-l.length).fill(255)))),i?await this.flashDeflBlock(l,d,o):await this.flashBlock(l,d),d+=1,f+=i?Math.round(l.length*r/h):l.length,u+=_,e(Math.min(f,r),r);this.logger.log("Took "+(Date.now()-c)+"ms to write "+g+" bytes"),this.IS_STUB&&(await this.flashBegin(0,0),i?await this.flashDeflFinish():await this.flashFinish())}async flashBlock(t,e,a=3e3){await this.checkCommand(3,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t),a)}async flashDeflBlock(t,e,a=3e3){await this.checkCommand(17,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t),a)}async flashBegin(t=0,e=0,a=!1){let i;await this.flushSerialBuffers();const r=this.getFlashWriteSize();!this.IS_STUB&&[d,f,u,c,_,g,p,m,w,y,b,S,v].includes(this.chipFamily)&&await this.checkCommand(13,new Array(8).fill(0));const n=Math.floor((t+r-1)/r);i=this.chipFamily==l?this.getEraseSize(e,t):t;const h=this.IS_STUB?k:F(3e4,t),o=Date.now();let B=Ne("<IIII",i,n,r,e);return this.chipFamily!=d&&this.chipFamily!=f&&this.chipFamily!=u&&this.chipFamily!=c&&this.chipFamily!=_&&this.chipFamily!=g&&this.chipFamily!=p&&this.chipFamily!=m&&this.chipFamily!=w&&this.chipFamily!=y&&this.chipFamily!=b&&this.chipFamily!=S&&this.chipFamily!=v||(B=B.concat(Ne("<I",a?1:0))),this.logger.log("Erase size "+i+", blocks "+n+", block size "+s(r,4)+", offset "+s(e,4)+", encrypted "+(a?"yes":"no")),await this.checkCommand(2,B,0,h),0==t||this.IS_STUB||this.logger.log("Took "+(Date.now()-o)+"ms to erase "+n+" bytes"),n}async flashDeflBegin(t=0,e=0,a=0){const s=this.getFlashWriteSize(),i=Math.floor((e+s-1)/s),r=Math.floor((t+s-1)/s);let n=0,h=0;this.IS_STUB?(n=t,h=F(3e4,n)):(n=r*s,h=k);const o=Ne("<IIII",n,i,s,a);return await this.checkCommand(16,o,0,h),h}async flashFinish(){const t=Ne("<I",1);await this.checkCommand(4,t)}async flashDeflFinish(){const t=Ne("<I",1);await this.checkCommand(18,t)}getBootloaderOffset(){return I(this.getChipFamily()).flashOffs}async flashId(){return await this.runSpiFlashCommand(159,[],24)}getChipFamily(){return this._parent?this._parent.chipFamily:this.chipFamily}async writeRegister(t,e,a=4294967295,s=0,i=0){let r=Ne("<IIII",t,e,a,s);i>0&&(r=r.concat(Ne("<IIII",I(this.getChipFamily()).uartDateReg,0,0,i))),await this.checkCommand(9,r)}async setDataLengths(t,e,a){if(-1!=t.mosiDlenOffs){const s=t.regBase+t.mosiDlenOffs,i=t.regBase+t.misoDlenOffs;e>0&&await this.writeRegister(s,e-1),a>0&&await this.writeRegister(i,a-1)}else{const s=t.regBase+t.usr1Offs,i=(0==a?0:a-1)<<8|(0==e?0:e-1)<<17;await this.writeRegister(s,i)}}async waitDone(t,e){for(let a=0;a<10;a++){if(0==(await this.readRegister(t)&e))return}throw Error("SPI command did not complete in time")}async runSpiFlashCommand(t,e,a=0){const i=I(this.getChipFamily()),r=i.regBase,n=r,h=r+i.usrOffs,o=r+i.usr2Offs,l=r+i.w0Offs,d=1<<18;if(a>32)throw new Error("Reading more than 32 bits back from a SPI flash operation is unsupported");if(e.length>64)throw new Error("Writing more than 64 bytes of data with one SPI command is unsupported");const f=8*e.length,u=await this.readRegister(h),c=await this.readRegister(o);let _=1<<31;if(a>0&&(_|=268435456),f>0&&(_|=134217728),await this.setDataLengths(i,f,a),await this.writeRegister(h,_),await this.writeRegister(o,7<<28|t),0==f)await this.writeRegister(l,0);else{const t=(4-e.length%4)%4;e=e.concat(new Array(t).fill(0));const a=Me("I".repeat(Math.floor(e.length/4)),e);let i=l;this.logger.debug(`Words Length: ${a.length}`);for(const t of a)this.logger.debug(`Writing word ${s(t)} to register offset ${s(i)}`),await this.writeRegister(i,t),i+=4}await this.writeRegister(n,d),await this.waitDone(n,d);const g=await this.readRegister(l);return await this.writeRegister(h,u),await this.writeRegister(o,c),g}async detectFlashSize(){this.logger.log("Detecting Flash Size");const t=await this.flashId(),e=255&t,a=t>>16&255;this.logger.log(`FlashId: ${s(t)}`),this.logger.log(`Flash Manufacturer: ${e.toString(16)}`),this.logger.log(`Flash Device: ${(t>>8&255).toString(16)}${a.toString(16)}`),this.flashSize=r[a],this.logger.log(`Auto-detected Flash size: ${this.flashSize}`)}getEraseSize(t,e){const a=4096,s=Math.floor((e+a-1)/a);let i=16-Math.floor(t/a)%16;return s<i&&(i=s),s<2*i?Math.floor((s+1)/2*a):(s-i)*a}async memBegin(t,e,a,s){return await this.checkCommand(5,Ne("<IIII",t,e,a,s))}async memBlock(t,e){return await this.checkCommand(7,Ne("<IIII",t.length,e,0,0).concat(t),this.checksum(t))}async memFinish(t=0){const e=this.IS_STUB?k:500,a=Ne("<II",0==t?1:0,t);return await this.checkCommand(6,a,0,e)}async runStub(t=!1){const e=await O(this.chipFamily,this.chipRevision);if(null===e)return this.logger.log(`Stub flasher is not yet supported on ${this.chipName}, using ROM loader`),this;const a=2048;this.logger.log("Uploading stub...");for(const t of["text","data"]){const s=e[t],i=e[`${t}_start`],r=s.length,n=Math.floor((r+a-1)/a);await this.memBegin(r,n,a,i);for(const t of Array(n).keys()){const e=t*a;let i=e+a;i>r&&(i=r),await this.memBlock(s.slice(e,i),t)}}await this.memFinish(e.entry);const s=await this.readPacket(500),i=String.fromCharCode(...s);if("OHAI"!=i)throw new Error("Failed to start stub. Unexpected response: "+i);this.logger.log("Stub is now running...");const r=new He(this.port,this.logger,this);return t||await r.detectFlashSize(),r}async writeToStream(t){if(!this.port.writable)return void this.logger.debug("Port writable stream not available, skipping write");const e=this.port.writable.getWriter();await e.write(new Uint8Array(t));try{e.releaseLock()}catch(t){this.logger.error(`Ignoring release lock error: ${t}`)}}async disconnect(){this._parent?await this._parent.disconnect():this.port.writable?(await this.port.writable.getWriter().close(),await new Promise(t=>{this._reader||t(void 0),this.addEventListener("disconnect",t,{once:!0}),this._reader.cancel()}),this.connected=!1):this.logger.debug("Port already closed, skipping disconnect")}async reconnect(){if(this._parent)return void await this._parent.reconnect();if(this.logger.log("Reconnecting serial port..."),this.connected=!1,this.__inputBuffer=[],this._reader){try{await this._reader.cancel()}catch(t){this.logger.debug(`Reader cancel error: ${t}`)}this._reader=void 0}try{await this.port.close(),this.logger.log("Port closed")}catch(t){this.logger.debug(`Port close error: ${t}`)}this.logger.debug("Opening port...");try{await this.port.open({baudRate:n}),this.connected=!0}catch(t){throw new Error(`Failed to open port: ${t}`)}if(!this.port.readable||!this.port.writable)throw new Error(`Port streams not available after open (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);const t=this.chipFamily,e=this.chipName,a=this.chipRevision,s=this.chipVariant,i=this.flashSize;if(await this.hardReset(!0),this._parent||(this.__inputBuffer=[],this.__totalBytesRead=0,this.readLoop()),await this.flushSerialBuffers(),await this.sync(),this.chipFamily=t,this.chipName=e,this.chipRevision=a,this.chipVariant=s,this.flashSize=i,this.logger.debug(`Reconnect complete (chip: ${this.chipName})`),!this.port.writable||!this.port.readable)throw new Error("Port not ready after reconnect");const r=await this.runStub(!0);if(this.logger.debug("Stub loaded"),this._currentBaudRate!==n&&(await r.setBaudrate(this._currentBaudRate),!this.port.writable||!this.port.readable))throw new Error(`Port not ready after baudrate change (readable: ${!!this.port.readable}, writable: ${!!this.port.writable})`);this.IS_STUB&&Object.assign(this,r),this.logger.debug("Reconnection successful")}async drainInputBuffer(t=200){await i(t);let e=0;const a=Date.now();for(;e<112&&Date.now()-a<100;)if(this._inputBuffer.length>0){void 0!==this._inputBuffer.shift()&&e++}else await i(1);e>0&&this.logger.debug(`Drained ${e} bytes from input buffer`),this._parent||(this.__inputBuffer=[])}async flushSerialBuffers(){this._parent||(this.__inputBuffer=[]),await i(z),this._parent||(this.__inputBuffer=[]),this.logger.debug("Serial buffers flushed")}async readFlash(e,a,s){if(!this.IS_STUB)throw new Error("Reading flash is only supported in stub mode. Please run runStub() first.");await this.flushSerialBuffers(),this.logger.log(`Reading ${a} bytes from flash at address 0x${e.toString(16)}...`);let r=new Uint8Array(0),n=e,h=a;for(;h>0;){const e=Math.min(65536,h);let o=!1,l=0;const d=5;for(;!o&&l<=d;){let a=new Uint8Array(0);try{this.logger.debug(`Reading chunk at 0x${n.toString(16)}, size: 0x${e.toString(16)}`);const s=Ne("<IIII",n,e,4096,1024),[i]=await this.checkCommand(210,s);if(0!=i)throw new Error("Failed to read memory: "+i);for(;a.length<e;){let s;try{s=await this.readPacket(100)}catch(s){if(s instanceof U){if(this.logger.debug(`SLIP read error at ${a.length} bytes: ${s.message}`),a.length>0)try{const e=Ne("<I",a.length),s=t(e);await this.writeToStream(s)}catch(t){this.logger.debug(`ACK send error: ${t}`)}if(await this.drainInputBuffer(300),a.length>=e)break}throw s}if(s&&s.length>0){const e=new Uint8Array(s),i=new Uint8Array(a.length+e.length);i.set(a),i.set(e,a.length),a=i;const r=Ne("<I",a.length),n=t(r);await this.writeToStream(n)}}const h=new Uint8Array(r.length+a.length);h.set(r),h.set(a,r.length),r=h,o=!0}catch(t){if(l++,!(t instanceof U))throw t;if(!(l<=d))throw new Error(`Failed to read chunk at 0x${n.toString(16)} after ${d} retries: ${t}`);this.logger.log(`⚠️ ${t.message} at 0x${n.toString(16)}. Draining buffer and retrying (attempt ${l}/${d})...`);try{await this.drainInputBuffer(300),await this.flushSerialBuffers(),await i(z)}catch(t){this.logger.debug(`Buffer drain error: ${t}`)}}}s&&s(new Uint8Array(e),r.length,a),n+=e,h-=e,this.logger.debug(`Total progress: 0x${r.length.toString(16)} from 0x${a.toString(16)} bytes`)}return this.logger.debug(`Successfully read ${r.length} bytes from flash`),r}}class He extends Ze{constructor(){super(...arguments),this.IS_STUB=!0}async memBegin(t,e,a,i){const r=await O(this.chipFamily,this.chipRevision);if(null===r)return[0,[]];const n=i,h=i+t;this.logger.debug(`Load range: ${s(n,8)}-${s(h,8)}`),this.logger.debug(`Stub data: ${s(r.data_start,8)}, len: ${r.data.length}, text: ${s(r.text_start,8)}, len: ${r.text.length}`);for(const[t,e]of[[r.data_start,r.data_start+r.data.length],[r.text_start,r.text_start+r.text.length]])if(n<e&&h>t)throw new Error("Software loader is resident at "+s(t,8)+"-"+s(e,8)+". Can't load binary at overlapping address range "+s(n,8)+"-"+s(h,8)+". Try changing the binary loading address.");return[0,[]]}async eraseFlash(){await this.checkCommand(208,[],0,x)}}const Ve=async t=>{const e=await navigator.serial.requestPort();return await e.open({baudRate:n}),t.log("Connected successfully."),new Ze(e,t)};export{d as CHIP_FAMILY_ESP32,c as CHIP_FAMILY_ESP32C2,_ as CHIP_FAMILY_ESP32C3,g as CHIP_FAMILY_ESP32C5,p as CHIP_FAMILY_ESP32C6,m as CHIP_FAMILY_ESP32C61,w as CHIP_FAMILY_ESP32H2,b as CHIP_FAMILY_ESP32H21,y as CHIP_FAMILY_ESP32H4,S as CHIP_FAMILY_ESP32P4,f as CHIP_FAMILY_ESP32S2,u as CHIP_FAMILY_ESP32S3,v as CHIP_FAMILY_ESP32S31,l as CHIP_FAMILY_ESP8266,Ze as ESPLoader,Ve as connect};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tasmota-webserial-esptool",
3
- "version": "7.2.4",
3
+ "version": "7.2.5",
4
4
  "description": "Flash & Read ESP devices using WebSerial",
5
5
  "main": "dist/index.js",
6
6
  "repository": {
@@ -14,7 +14,7 @@
14
14
  "license": "MIT",
15
15
  "type": "module",
16
16
  "scripts": {
17
- "prepublishOnly": "script/build",
17
+ "build": "script/build",
18
18
  "format": "npm exec -- prettier --write src",
19
19
  "develop": "script/develop",
20
20
  "lint": "eslint src/",
package/src/esp_loader.ts CHANGED
@@ -196,6 +196,10 @@ export class ESPLoader extends EventTarget {
196
196
  this.readLoop();
197
197
  }
198
198
 
199
+ // Drain input buffer first for CP210x compatibility on Windows
200
+ // This helps clear any stale data before sync
201
+ await this.drainInputBuffer(200);
202
+
199
203
  // Clear buffer again after starting read loop
200
204
  await this.flushSerialBuffers();
201
205
  await this.sync();
@@ -261,6 +265,10 @@ export class ESPLoader extends EventTarget {
261
265
  `GET_SECURITY_INFO failed, using magic value detection: ${error}`,
262
266
  );
263
267
 
268
+ // Drain input buffer for CP210x compatibility on Windows
269
+ // This ensures all error responses are cleared before continuing
270
+ await this.drainInputBuffer(200);
271
+
264
272
  // Clear input buffer and re-sync to recover from failed command
265
273
  this._inputBuffer.length = 0;
266
274
  await sleep(SYNC_TIMEOUT);
@@ -1634,7 +1642,7 @@ export class ESPLoader extends EventTarget {
1634
1642
  *
1635
1643
  * @param bufferingTime - Time in milliseconds to wait for the buffer to fill
1636
1644
  */
1637
- private async drainInputBuffer(bufferingTime = 200): Promise<void> {
1645
+ async drainInputBuffer(bufferingTime = 200): Promise<void> {
1638
1646
  // Wait for the buffer to fill
1639
1647
  await sleep(bufferingTime);
1640
1648
 
@@ -1676,7 +1684,7 @@ export class ESPLoader extends EventTarget {
1676
1684
  * Flush any pending data in the TX and RX serial port buffers
1677
1685
  * This clears both the application RX buffer and waits for hardware buffers to drain
1678
1686
  */
1679
- private async flushSerialBuffers(): Promise<void> {
1687
+ async flushSerialBuffers(): Promise<void> {
1680
1688
  // Clear application buffer
1681
1689
  if (!this._parent) {
1682
1690
  this.__inputBuffer = [];
@@ -1733,10 +1741,12 @@ export class ESPLoader extends EventTarget {
1733
1741
  const chunkSize = Math.min(CHUNK_SIZE, remainingSize);
1734
1742
  let chunkSuccess = false;
1735
1743
  let retryCount = 0;
1736
- const MAX_RETRIES = 3;
1744
+ const MAX_RETRIES = 5;
1737
1745
 
1738
1746
  // Retry loop for this chunk
1739
1747
  while (!chunkSuccess && retryCount <= MAX_RETRIES) {
1748
+ let resp = new Uint8Array(0);
1749
+
1740
1750
  try {
1741
1751
  this.logger.debug(
1742
1752
  `Reading chunk at 0x${currentAddr.toString(16)}, size: 0x${chunkSize.toString(16)}`,
@@ -1750,8 +1760,6 @@ export class ESPLoader extends EventTarget {
1750
1760
  throw new Error("Failed to read memory: " + res);
1751
1761
  }
1752
1762
 
1753
- let resp = new Uint8Array(0);
1754
-
1755
1763
  while (resp.length < chunkSize) {
1756
1764
  // Read a SLIP packet
1757
1765
  let packet: number[];
@@ -1762,6 +1770,22 @@ export class ESPLoader extends EventTarget {
1762
1770
  this.logger.debug(
1763
1771
  `SLIP read error at ${resp.length} bytes: ${err.message}`,
1764
1772
  );
1773
+
1774
+ // Send final ACK for any data we did receive before the error
1775
+ if (resp.length > 0) {
1776
+ try {
1777
+ const ackData = pack("<I", resp.length);
1778
+ const slipEncodedAck = slipEncode(ackData);
1779
+ await this.writeToStream(slipEncodedAck);
1780
+ } catch (ackErr) {
1781
+ this.logger.debug(`ACK send error: ${ackErr}`);
1782
+ }
1783
+ }
1784
+
1785
+ // Drain input buffer for CP210x compatibility on Windows
1786
+ // This clears any stale data that may be causing the error
1787
+ await this.drainInputBuffer(300);
1788
+
1765
1789
  // If we've read all the data we need, break
1766
1790
  if (resp.length >= chunkSize) {
1767
1791
  break;
@@ -1796,21 +1820,25 @@ export class ESPLoader extends EventTarget {
1796
1820
  } catch (err) {
1797
1821
  retryCount++;
1798
1822
 
1799
- // Check if it's a timeout error
1800
- if (
1801
- err instanceof SlipReadError &&
1802
- err.message.includes("Timed out")
1803
- ) {
1823
+ // Check if it's a timeout error or SLIP error
1824
+ if (err instanceof SlipReadError) {
1804
1825
  if (retryCount <= MAX_RETRIES) {
1805
1826
  this.logger.log(
1806
- `⚠️ Timeout error at 0x${currentAddr.toString(16)}. Reconnecting and retrying (attempt ${retryCount}/${MAX_RETRIES})...`,
1827
+ `⚠️ ${err.message} at 0x${currentAddr.toString(16)}. Draining buffer and retrying (attempt ${retryCount}/${MAX_RETRIES})...`,
1807
1828
  );
1808
1829
 
1809
1830
  try {
1810
- await this.reconnect();
1811
- // Continue to retry the same chunk
1812
- } catch (reconnectErr) {
1813
- throw new Error(`Reconnect failed: ${reconnectErr}`);
1831
+ await this.drainInputBuffer(300);
1832
+
1833
+ // Clear application buffer
1834
+ await this.flushSerialBuffers();
1835
+
1836
+ // Wait before retry to let hardware settle
1837
+ await sleep(SYNC_TIMEOUT);
1838
+
1839
+ // Continue to retry the same chunk (will send new read command)
1840
+ } catch (drainErr) {
1841
+ this.logger.debug(`Buffer drain error: ${drainErr}`);
1814
1842
  }
1815
1843
  } else {
1816
1844
  throw new Error(
@@ -1818,7 +1846,7 @@ export class ESPLoader extends EventTarget {
1818
1846
  );
1819
1847
  }
1820
1848
  } else {
1821
- // Non-timeout error, don't retry
1849
+ // Non-SLIP error, don't retry
1822
1850
  throw err;
1823
1851
  }
1824
1852
  }
package/index.html DELETED
@@ -1,344 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <title>WebSerial ESPTool</title>
5
- <meta charset="utf-8" />
6
- <meta http-equiv="X-UA-Compatible" content="IE=edge" />
7
- <meta name="viewport" content="width=device-width, initial-scale=1" />
8
- <script>
9
- // Redirect to HTTPS if HTTP is requested.
10
- if (
11
- window.location.hostname !== "localhost" &&
12
- window.location.protocol === "http:"
13
- ) {
14
- window.location.href = "https:" + window.location.href.substring(5);
15
- }
16
- </script>
17
-
18
- <!-- import the web page's stylesheets along with the themes -->
19
- <link rel="stylesheet" href="css/style.css" />
20
- <link
21
- rel="stylesheet"
22
- href="css/light.css"
23
- id="light"
24
- class="alternate"
25
- disabled
26
- />
27
- <link
28
- rel="stylesheet"
29
- href="css/dark.css"
30
- id="dark"
31
- class="alternate"
32
- disabled
33
- />
34
-
35
- <!-- import the webpage's javascript file -->
36
- <script module>
37
- window.esptoolPackage = import(
38
- // In development we import locally.
39
- window.location.hostname === "localhost"
40
- ? "./js/modules/esptool.js"
41
- : "./js/modules/esptool.js"
42
- );
43
- </script>
44
- <script src="js/script.js" module defer></script>
45
- </head>
46
- <body>
47
- <header class="header">
48
- <div class="left">
49
- <div class="title">WebSerial ESPTool</div>
50
- </div>
51
- <div class="right">
52
- <div class="controls-row">
53
- <label for="showlog">Show Log</label>
54
- <div class="onoffswitch">
55
- <input
56
- type="checkbox"
57
- name="showlog"
58
- class="onoffswitch-checkbox"
59
- id="showlog"
60
- />
61
- <label class="onoffswitch-label" for="showlog">
62
- <span class="onoffswitch-inner"></span>
63
- <span class="onoffswitch-switch"></span>
64
- </label>
65
- </div>
66
-
67
- <span class="log-controls">
68
- <label for="autoscroll">Autoscroll</label>
69
- <div class="onoffswitch">
70
- <input
71
- type="checkbox"
72
- name="autoscroll"
73
- class="onoffswitch-checkbox"
74
- id="autoscroll"
75
- />
76
- <label class="onoffswitch-label" for="autoscroll">
77
- <span class="onoffswitch-inner"></span>
78
- <span class="onoffswitch-switch"></span>
79
- </label>
80
- </div>
81
- <button id="butClear" type="button" class="small-btn">
82
- Clear
83
- </button>
84
- </span>
85
-
86
- <label for="debugmode">Debug</label>
87
- <div class="onoffswitch">
88
- <input
89
- type="checkbox"
90
- name="debugmode"
91
- class="onoffswitch-checkbox"
92
- id="debugmode"
93
- />
94
- <label class="onoffswitch-label" for="debugmode">
95
- <span class="onoffswitch-inner"></span>
96
- <span class="onoffswitch-switch"></span>
97
- </label>
98
- </div>
99
-
100
- <label for="darkmode">Dark</label>
101
- <div class="onoffswitch">
102
- <input
103
- type="checkbox"
104
- name="darkmode"
105
- class="onoffswitch-checkbox"
106
- id="darkmode"
107
- />
108
- <label class="onoffswitch-label" for="darkmode">
109
- <span class="onoffswitch-inner"></span>
110
- <span class="onoffswitch-switch"></span>
111
- </label>
112
- </div>
113
- </div>
114
- <select id="baudRate"></select>
115
- <button id="butConnect" type="button">Connect</button>
116
- </div>
117
- </header>
118
- <main class="main">
119
- <div id="notSupported" class="notSupported">
120
- Sorry, <b>Web Serial</b> is not supported on this device, make sure
121
- you're running Chrome 89 or later.
122
- </div>
123
- <div id="app">
124
- <div id="commands">
125
- <div class="upload">
126
- <label
127
- >Offset: 0x
128
- <input class="offset" type="text" value="0" />
129
- </label>
130
- <label class="firmware">
131
- <input type="file" accept=".bin" />
132
- <svg
133
- xmlns="http://www.w3.org/2000/svg"
134
- width="20"
135
- height="17"
136
- viewbox="0 0 20 17"
137
- >
138
- <path
139
- d="M10 0l-5.2 4.9h3.3v5.1h3.8v-5.1h3.3l-5.2-4.9zm9.3 11.5l-3.2-2.1h-2l3.4 2.6h-3.5c-.1 0-.2.1-.2.1l-.8 2.3h-6l-.8-2.2c-.1-.1-.1-.2-.2-.2h-3.6l3.4-2.6h-2l-3.2 2.1c-.4.3-.7 1-.6 1.5l.6 3.1c.1.5.7.9 1.2.9h16.3c.6 0 1.1-.4 1.3-.9l.6-3.1c.1-.5-.2-1.2-.7-1.5z"
140
- />
141
- </svg>
142
- <span>Choose a file&hellip;</span>
143
- </label>
144
- <div class="progress-bar hidden"><div></div></div>
145
- </div>
146
- <div class="upload">
147
- <label
148
- >Offset: 0x
149
- <input class="offset" type="text" value="0" />
150
- </label>
151
- <label class="firmware">
152
- <input type="file" accept=".bin" />
153
- <svg
154
- xmlns="http://www.w3.org/2000/svg"
155
- width="20"
156
- height="17"
157
- viewbox="0 0 20 17"
158
- >
159
- <path
160
- d="M10 0l-5.2 4.9h3.3v5.1h3.8v-5.1h3.3l-5.2-4.9zm9.3 11.5l-3.2-2.1h-2l3.4 2.6h-3.5c-.1 0-.2.1-.2.1l-.8 2.3h-6l-.8-2.2c-.1-.1-.1-.2-.2-.2h-3.6l3.4-2.6h-2l-3.2 2.1c-.4.3-.7 1-.6 1.5l.6 3.1c.1.5.7.9 1.2.9h16.3c.6 0 1.1-.4 1.3-.9l.6-3.1c.1-.5-.2-1.2-.7-1.5z"
161
- />
162
- </svg>
163
- <span>Choose a file&hellip;</span>
164
- </label>
165
- <div class="progress-bar hidden"><div></div></div>
166
- </div>
167
- <div class="upload">
168
- <label
169
- >Offset: 0x
170
- <input class="offset" type="text" value="0" />
171
- </label>
172
- <label class="firmware">
173
- <input type="file" accept=".bin" />
174
- <svg
175
- xmlns="http://www.w3.org/2000/svg"
176
- width="20"
177
- height="17"
178
- viewbox="0 0 20 17"
179
- >
180
- <path
181
- d="M10 0l-5.2 4.9h3.3v5.1h3.8v-5.1h3.3l-5.2-4.9zm9.3 11.5l-3.2-2.1h-2l3.4 2.6h-3.5c-.1 0-.2.1-.2.1l-.8 2.3h-6l-.8-2.2c-.1-.1-.1-.2-.2-.2h-3.6l3.4-2.6h-2l-3.2 2.1c-.4.3-.7 1-.6 1.5l.6 3.1c.1.5.7.9 1.2.9h16.3c.6 0 1.1-.4 1.3-.9l.6-3.1c.1-.5-.2-1.2-.7-1.5z"
182
- />
183
- </svg>
184
- <span>Choose a file&hellip;</span>
185
- </label>
186
- <div class="progress-bar hidden"><div></div></div>
187
- </div>
188
- <div class="upload">
189
- <label
190
- >Offset: 0x
191
- <input class="offset" type="text" value="0" />
192
- </label>
193
- <label class="firmware">
194
- <input type="file" accept=".bin" />
195
- <svg
196
- xmlns="http://www.w3.org/2000/svg"
197
- width="20"
198
- height="17"
199
- viewbox="0 0 20 17"
200
- >
201
- <path
202
- d="M10 0l-5.2 4.9h3.3v5.1h3.8v-5.1h3.3l-5.2-4.9zm9.3 11.5l-3.2-2.1h-2l3.4 2.6h-3.5c-.1 0-.2.1-.2.1l-.8 2.3h-6l-.8-2.2c-.1-.1-.1-.2-.2-.2h-3.6l3.4-2.6h-2l-3.2 2.1c-.4.3-.7 1-.6 1.5l.6 3.1c.1.5.7.9 1.2.9h16.3c.6 0 1.1-.4 1.3-.9l.6-3.1c.1-.5-.2-1.2-.7-1.5z"
203
- />
204
- </svg>
205
- <span>Choose a file&hellip;</span>
206
- </label>
207
- <div class="progress-bar hidden"><div></div></div>
208
- </div>
209
- <div class="upload">
210
- <label
211
- >Offset: 0x
212
- <input class="offset" type="text" value="0" />
213
- </label>
214
- <label class="firmware">
215
- <input type="file" accept=".bin" />
216
- <svg
217
- xmlns="http://www.w3.org/2000/svg"
218
- width="20"
219
- height="17"
220
- viewbox="0 0 20 17"
221
- >
222
- <path
223
- d="M10 0l-5.2 4.9h3.3v5.1h3.8v-5.1h3.3l-5.2-4.9zm9.3 11.5l-3.2-2.1h-2l3.4 2.6h-3.5c-.1 0-.2.1-.2.1l-.8 2.3h-6l-.8-2.2c-.1-.1-.1-.2-.2-.2h-3.6l3.4-2.6h-2l-3.2 2.1c-.4.3-.7 1-.6 1.5l.6 3.1c.1.5.7.9 1.2.9h16.3c.6 0 1.1-.4 1.3-.9l.6-3.1c.1-.5-.2-1.2-.7-1.5z"
224
- />
225
- </svg>
226
- <span>Choose a file&hellip;</span>
227
- </label>
228
- <div class="progress-bar hidden"><div></div></div>
229
- </div>
230
- <div class="upload">
231
- <label
232
- >Offset: 0x
233
- <input class="offset" type="text" value="0" />
234
- </label>
235
- <label class="firmware">
236
- <input type="file" accept=".bin" />
237
- <svg
238
- xmlns="http://www.w3.org/2000/svg"
239
- width="20"
240
- height="17"
241
- viewbox="0 0 20 17"
242
- >
243
- <path
244
- d="M10 0l-5.2 4.9h3.3v5.1h3.8v-5.1h3.3l-5.2-4.9zm9.3 11.5l-3.2-2.1h-2l3.4 2.6h-3.5c-.1 0-.2.1-.2.1l-.8 2.3h-6l-.8-2.2c-.1-.1-.1-.2-.2-.2h-3.6l3.4-2.6h-2l-3.2 2.1c-.4.3-.7 1-.6 1.5l.6 3.1c.1.5.7.9 1.2.9h16.3c.6 0 1.1-.4 1.3-.9l.6-3.1c.1-.5-.2-1.2-.7-1.5z"
245
- />
246
- </svg>
247
- <span>Choose a file&hellip;</span>
248
- </label>
249
- <div class="progress-bar hidden"><div></div></div>
250
- </div>
251
- <div class="upload">
252
- <label
253
- >Offset: 0x
254
- <input class="offset" type="text" value="0" />
255
- </label>
256
- <label class="firmware">
257
- <input type="file" accept=".bin" />
258
- <svg
259
- xmlns="http://www.w3.org/2000/svg"
260
- width="20"
261
- height="17"
262
- viewbox="0 0 20 17"
263
- >
264
- <path
265
- d="M10 0l-5.2 4.9h3.3v5.1h3.8v-5.1h3.3l-5.2-4.9zm9.3 11.5l-3.2-2.1h-2l3.4 2.6h-3.5c-.1 0-.2.1-.2.1l-.8 2.3h-6l-.8-2.2c-.1-.1-.1-.2-.2-.2h-3.6l3.4-2.6h-2l-3.2 2.1c-.4.3-.7 1-.6 1.5l.6 3.1c.1.5.7.9 1.2.9h16.3c.6 0 1.1-.4 1.3-.9l.6-3.1c.1-.5-.2-1.2-.7-1.5z"
266
- />
267
- </svg>
268
- <span>Choose a file&hellip;</span>
269
- </label>
270
- <div class="progress-bar hidden"><div></div></div>
271
- </div>
272
- <div class="upload">
273
- <label
274
- >Offset: 0x
275
- <input class="offset" type="text" value="0" />
276
- </label>
277
- <label class="firmware">
278
- <input type="file" accept=".bin" />
279
- <svg
280
- xmlns="http://www.w3.org/2000/svg"
281
- width="20"
282
- height="17"
283
- viewbox="0 0 20 17"
284
- >
285
- <path
286
- d="M10 0l-5.2 4.9h3.3v5.1h3.8v-5.1h3.3l-5.2-4.9zm9.3 11.5l-3.2-2.1h-2l3.4 2.6h-3.5c-.1 0-.2.1-.2.1l-.8 2.3h-6l-.8-2.2c-.1-.1-.1-.2-.2-.2h-3.6l3.4-2.6h-2l-3.2 2.1c-.4.3-.7 1-.6 1.5l.6 3.1c.1.5.7.9 1.2.9h16.3c.6 0 1.1-.4 1.3-.9l.6-3.1c.1-.5-.2-1.2-.7-1.5z"
287
- />
288
- </svg>
289
- <span>Choose a file&hellip;</span>
290
- </label>
291
- <div class="progress-bar hidden"><div></div></div>
292
- </div>
293
- <div class="buttons">
294
- <button id="butErase" type="button" disabled="disabled">
295
- Erase
296
- </button>
297
- <button id="butProgram" type="button" disabled="disabled">
298
- Program
299
- </button>
300
- </div>
301
- <div class="partition-table">
302
- <button id="butReadPartitions" type="button" disabled="disabled">
303
- Read Partition Table
304
- </button>
305
- <div class="progress-bar hidden" id="partitionProgress">
306
- <div></div>
307
- </div>
308
- <div id="partitionList" class="hidden"></div>
309
- </div>
310
- <div class="read-flash">
311
- <div class="progress-bar hidden" id="readProgress"><div></div></div>
312
- <div class="read-flash-inputs">
313
- <label>
314
- Address: 0x
315
- <input id="readOffset" type="text" value="0" />
316
- </label>
317
- <label>
318
- Size: 0x
319
- <input id="readSize" type="text" value="1000" />
320
- </label>
321
- <button id="butReadFlash" type="button" disabled="disabled">
322
- Read Flash
323
- </button>
324
- </div>
325
- </div>
326
- </div>
327
- <div id="log"></div>
328
- </div>
329
- </main>
330
-
331
- <!-- ESP32-S2 Reconnect Modal -->
332
- <div id="esp32s2Modal" class="modal hidden">
333
- <div class="modal-content">
334
- <h2>ESP32-S2 has switched to USB CDC mode</h2>
335
- <p>Please click the button below to select the new serial port.</p>
336
- <button id="butReconnectS2" type="button" class="modal-button">
337
- Select New Port
338
- </button>
339
- </div>
340
- </div>
341
-
342
- <footer class="footer"></footer>
343
- </body>
344
- </html>