@songsid/agend 2.2.0-alpha.3 → 2.2.0-alpha.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.
Files changed (74) hide show
  1. package/dist/auth-api.js +4 -0
  2. package/dist/auth-api.js.map +1 -1
  3. package/dist/discord-general.d.ts +15 -0
  4. package/dist/discord-general.js +24 -0
  5. package/dist/discord-general.js.map +1 -0
  6. package/dist/fleet-manager.d.ts +9 -0
  7. package/dist/fleet-manager.js +22 -15
  8. package/dist/fleet-manager.js.map +1 -1
  9. package/dist/locale.js +8 -2
  10. package/dist/locale.js.map +1 -1
  11. package/dist/public-link-progress.d.ts +3 -1
  12. package/dist/public-link-progress.js +15 -1
  13. package/dist/public-link-progress.js.map +1 -1
  14. package/dist/public-web-gateway.js +3 -0
  15. package/dist/public-web-gateway.js.map +1 -1
  16. package/dist/public-web-link.d.ts +4 -2
  17. package/dist/public-web-link.js +10 -8
  18. package/dist/public-web-link.js.map +1 -1
  19. package/dist/quickstart-api.js +4 -1
  20. package/dist/quickstart-api.js.map +1 -1
  21. package/dist/topic-commands.js +4 -2
  22. package/dist/topic-commands.js.map +1 -1
  23. package/dist/tunnel/cloudflared-install.d.ts +25 -1
  24. package/dist/tunnel/cloudflared-install.js +181 -10
  25. package/dist/tunnel/cloudflared-install.js.map +1 -1
  26. package/dist/tunnel/deb-extract.d.ts +9 -0
  27. package/dist/tunnel/deb-extract.js +94 -0
  28. package/dist/tunnel/deb-extract.js.map +1 -0
  29. package/dist/ui/app.html +3 -0
  30. package/dist/ui/chat-strings.js +50 -0
  31. package/dist/ui/chat-thread.js +16 -1
  32. package/dist/ui/icons/apple-touch-icon.png +0 -0
  33. package/dist/ui/icons/favicon.ico +0 -0
  34. package/dist/ui/icons/favicon.svg +8 -0
  35. package/dist/ui/image-lightbox.js +104 -0
  36. package/dist/ui/panel-chat.js +16 -54
  37. package/dist/ui/panel-details.js +146 -0
  38. package/dist/ui/panel-fleet.js +2 -1
  39. package/dist/ui/panel-settings.js +18 -0
  40. package/dist/ui/preview-panel.js +9 -4
  41. package/dist/ui/preview.js +36 -13
  42. package/dist/ui/settings-request.js +9 -0
  43. package/dist/ui/shared/app-i18n.js +4 -2
  44. package/dist/ui/shared/app-route.js +7 -2
  45. package/dist/ui/shared/app-shell.js +22 -8
  46. package/dist/ui/shared/app.css +43 -0
  47. package/dist/ui/shared/app.js +6 -0
  48. package/dist/ui/shared/header-tools.js +93 -0
  49. package/dist/ui/shared/instance-nav.js +7 -4
  50. package/dist/ui/shared/instance-switch.js +16 -0
  51. package/dist/ui/shared/panel-view.js +14 -153
  52. package/dist/ui/shared/read-stream.js +26 -0
  53. package/dist/ui/shared/ui-icons.js +1 -0
  54. package/dist/ui/shared/usage-dialog.js +125 -0
  55. package/dist/ui/shared/view-strings.js +2 -2
  56. package/dist/ui/signin.html +3 -0
  57. package/dist/update-install.js +3 -1
  58. package/dist/update-install.js.map +1 -1
  59. package/dist/web-api.d.ts +16 -0
  60. package/dist/web-api.js +31 -4
  61. package/dist/web-api.js.map +1 -1
  62. package/dist/web-icons.d.ts +21 -0
  63. package/dist/web-icons.js +38 -0
  64. package/dist/web-icons.js.map +1 -0
  65. package/dist/web-preview.d.ts +9 -0
  66. package/dist/web-preview.js +15 -9
  67. package/dist/web-preview.js.map +1 -1
  68. package/dist/web-shell-routes.d.ts +4 -0
  69. package/dist/web-shell-routes.js +9 -0
  70. package/dist/web-shell-routes.js.map +1 -1
  71. package/launcher/old-updater-note.cjs +48 -0
  72. package/launcher/postinstall.cjs +8 -1
  73. package/package.json +1 -1
  74. package/scripts/preinstall-guard.cjs +5 -2
@@ -15,6 +15,14 @@
15
15
  * it arrives, then the file itself is hashed again from disk: only bytes
16
16
  * that are on disk AND match the pin are made executable and renamed into
17
17
  * place (atomic). A mismatch is deleted and nothing runs;
18
+ * - source order (#1554): on Linux the pinned build comes FIRST from Cloudflare's
19
+ * apt repository (pkg.cloudflare.com `.deb`; `usr/bin/cloudflared` extracted
20
+ * in Node) and falls back to the GitHub release asset when the package is
21
+ * missing, stalls, is too slow or is not what the pin says. macOS has no
22
+ * package there and uses GitHub only. Every source is checked against the
23
+ * SAME pinned SHA256 — those packages carry exactly the bare binary's bytes;
24
+ * - a download fails when no byte arrives for 60 s, under a 30 min ceiling —
25
+ * a slow link that keeps moving is not a dead one (#1554);
18
26
  * - before every use the installed binary is checked against a stamp of the
19
27
  * pinned version and its hash; a damaged or outdated one is replaced;
20
28
  * - no lock (#1141 review): every file is written under a name of its own
@@ -38,13 +46,15 @@ import { createReadStream } from "node:fs";
38
46
  import { chmod, lstat, mkdir, open, readFile, rename, rm, stat, writeFile } from "node:fs/promises";
39
47
  import { join } from "node:path";
40
48
  import { resolveBinary } from "./cloudflared.js";
49
+ import { extractDebFile } from "./deb-extract.js";
50
+ import { performance } from "node:perf_hooks";
41
51
  export const CLOUDFLARED_PIN = {
42
52
  version: "2026.9.3",
43
53
  assets: {
44
- "linux-x64": { name: "cloudflared-linux-amd64", sha256: "77e26d8d900e0b8469f416239d14b5f296525fdf79fee6f511ef55609e3fbac2", archive: "binary" },
45
- "linux-arm64": { name: "cloudflared-linux-arm64", sha256: "aaeb2d7d0da3614634c7e03ab13487a1522c2e79165ed2929cfe23d5e95b326d", archive: "binary" },
46
- "linux-arm": { name: "cloudflared-linux-arm", sha256: "967dc371a3fedbf09e881c13ee7ba317155ebc336cbd4afb756b46fc6785e5af", archive: "binary" },
47
- "linux-ia32": { name: "cloudflared-linux-386", sha256: "d6b2f917e2e78b3e3afba760af726e51751d10c2fcad4a2fb2a69feb4bd47421", archive: "binary" },
54
+ "linux-x64": { name: "cloudflared-linux-amd64", sha256: "77e26d8d900e0b8469f416239d14b5f296525fdf79fee6f511ef55609e3fbac2", archive: "binary", deb: "amd64" },
55
+ "linux-arm64": { name: "cloudflared-linux-arm64", sha256: "aaeb2d7d0da3614634c7e03ab13487a1522c2e79165ed2929cfe23d5e95b326d", archive: "binary", deb: "arm64" },
56
+ "linux-arm": { name: "cloudflared-linux-arm", sha256: "967dc371a3fedbf09e881c13ee7ba317155ebc336cbd4afb756b46fc6785e5af", archive: "binary", deb: "arm" },
57
+ "linux-ia32": { name: "cloudflared-linux-386", sha256: "d6b2f917e2e78b3e3afba760af726e51751d10c2fcad4a2fb2a69feb4bd47421", archive: "binary", deb: "386" },
48
58
  "darwin-x64": { name: "cloudflared-darwin-amd64.tgz", sha256: "ab588b3b4db9cdb4476c30a3db2a72635b1d8327d44741fee6799a0f37b0ec07", archive: "tgz" },
49
59
  "darwin-arm64": { name: "cloudflared-darwin-arm64.tgz", sha256: "5472c1a01c84bc31b3021056a73b4e5774ddddefc572124ea8fdf6c340639f32", archive: "tgz" },
50
60
  },
@@ -64,9 +74,27 @@ export function assetFor(platform, arch) {
64
74
  export function releaseUrl(asset, version = CLOUDFLARED_PIN.version) {
65
75
  return `https://github.com/cloudflare/cloudflared/releases/download/${version}/${asset.name}`;
66
76
  }
77
+ /** #1554: the same pinned build as a package in Cloudflare's apt repository (Linux only). */
78
+ export function packageUrl(asset, version = CLOUDFLARED_PIN.version) {
79
+ return asset.deb ? `https://pkg.cloudflare.com/cloudflared/pool/main/c/cloudflared/cloudflared_${version}_${asset.deb}.deb` : null;
80
+ }
67
81
  /** No cloudflared binary is this big; a response that is has gone wrong. */
68
82
  const MAX_DOWNLOAD_BYTES = 200 * 1024 * 1024;
69
- const DOWNLOAD_TIMEOUT_MS = 5 * 60_000;
83
+ /**
84
+ * #1554: a download fails when no byte has arrived for this long — not after a fixed total. A slow link that keeps
85
+ * moving (11.5 / 38.3 MB in 5 min, reported from Taiwan) is not a dead one.
86
+ */
87
+ const STALL_TIMEOUT_MS = 60_000;
88
+ /** The overall ceiling for one attempt, however steadily it moves. */
89
+ const DOWNLOAD_CEILING_MS = 30 * 60_000;
90
+ /**
91
+ * With a second source to try (Linux), the first is given this long; if its pace then projects the whole file past
92
+ * SLOW_PROJECTION_MS (the old fixed cap), the other source is tried instead of waiting it out.
93
+ */
94
+ const SLOW_CHECK_MS = 25_000;
95
+ const SLOW_PROJECTION_MS = 5 * 60_000;
96
+ /** The failure detail of a download stopped for its pace (the one case where trying the other source is the point). */
97
+ const TOO_SLOW = "too slow to finish in reasonable time";
70
98
  function tell(opts, progress) {
71
99
  try {
72
100
  opts.onProgress?.(progress);
@@ -195,13 +223,97 @@ async function sha256File(path) {
195
223
  });
196
224
  return hash.digest("hex");
197
225
  }
226
+ /**
227
+ * Source order (#1554, user decision 2026-10-10): Cloudflare first. On Linux the pinned build comes from
228
+ * pkg.cloudflare.com (`.deb`); GitHub's release asset is the fallback when the package is missing (404), stalls, is
229
+ * too slow to finish in reasonable time, or is not a cloudflared package whose binary matches the pin. macOS has no
230
+ * package there and uses GitHub only. Every source is checked against the SAME pinned SHA256. A cancel or a local
231
+ * failure (disk, permissions) is never retried elsewhere.
232
+ */
198
233
  async function download(asset, version, dir, target, opts) {
234
+ const packaged = packageUrl(asset, version);
235
+ if (!packaged)
236
+ return downloadRelease(asset, version, dir, target, opts, false);
237
+ try {
238
+ await downloadPackage(asset, packaged, dir, target, opts, true);
239
+ }
240
+ catch (err) {
241
+ if (!(err instanceof CloudflaredInstallError) || !(err.kind === "download-failed" || err.kind === "checksum-mismatch" || err instanceof PackageFormatError))
242
+ throw err;
243
+ throwIfCancelled(opts.signal);
244
+ await downloadRelease(asset, version, dir, target, opts, false, err.message === TOO_SLOW ? "slow" : "failed");
245
+ }
246
+ }
247
+ /** The package was fetched but is not a cloudflared `.deb` we can read: a source problem, so the fallback is tried. */
248
+ class PackageFormatError extends CloudflaredInstallError {
249
+ constructor(detail) { super("install-failed", detail); }
250
+ }
251
+ /**
252
+ * The package source: the `.deb` is streamed to a temp file under the same caps, `usr/bin/cloudflared` is taken out
253
+ * of it in Node, and only bytes that match the pinned SHA256 — checked in memory and again from disk — are made
254
+ * executable and renamed into place, exactly like a GitHub download.
255
+ */
256
+ async function downloadPackage(asset, url, dir, target, opts, judgePace) {
257
+ const tag = randomBytes(6).toString("hex");
258
+ const debPart = join(dir, `.cloudflared.${tag}.deb.part`);
259
+ const part = join(dir, `.cloudflared.${tag}.part`);
260
+ try {
261
+ await fetchToFile(url, debPart, opts, judgePace, (received, total) => tell(opts, { phase: "downloading", received, total }));
262
+ tell(opts, { phase: "verifying" });
263
+ throwIfCancelled(opts.signal);
264
+ // Reading our own private file failing is a local problem (no other source would fix it); only what the package
265
+ // turns out to contain is a source problem.
266
+ const debBytes = await readFile(debPart).catch(err => {
267
+ throw new CloudflaredInstallError("install-failed", `cannot read ${debPart}: ${err.message}`);
268
+ });
269
+ let binary;
270
+ try {
271
+ binary = await extractDebFile(debBytes, "usr/bin/cloudflared", opts.maxBytes ?? MAX_DOWNLOAD_BYTES);
272
+ }
273
+ catch (err) {
274
+ throw new PackageFormatError(`${url}: ${err.message}`);
275
+ }
276
+ const sha = createHash("sha256").update(binary).digest("hex");
277
+ if (sha !== asset.sha256) {
278
+ throw new CloudflaredInstallError("checksum-mismatch", `${url}: the cloudflared inside has SHA256 ${sha}, not the pinned ${asset.sha256}`);
279
+ }
280
+ const handle = await open(part, "wx", 0o600).catch(err => {
281
+ throw new CloudflaredInstallError("install-failed", `cannot write ${part}: ${err.message}`);
282
+ });
283
+ try {
284
+ await writeAll(handle, binary, part);
285
+ }
286
+ finally {
287
+ await handle.close().catch(() => { });
288
+ }
289
+ const written = await sha256File(part);
290
+ if (written !== asset.sha256) {
291
+ throw new CloudflaredInstallError("install-failed", `${part} does not hold the binary it was given (SHA256 ${written})`);
292
+ }
293
+ throwIfCancelled(opts.signal);
294
+ await chmod(part, 0o755);
295
+ await rename(part, target);
296
+ }
297
+ catch (err) {
298
+ if (err instanceof CloudflaredInstallError)
299
+ throw err;
300
+ throw new CloudflaredInstallError("install-failed", err.message);
301
+ }
302
+ finally {
303
+ await rm(debPart, { force: true });
304
+ await rm(part, { force: true });
305
+ }
306
+ }
307
+ async function downloadRelease(asset, version, dir, target, opts, judgePace, fallbackReason) {
199
308
  const tag = randomBytes(6).toString("hex");
200
309
  const part = join(dir, `.cloudflared.${tag}.part`);
201
310
  const unpack = `${part}.d`;
202
311
  const stampTmp = `${stampPath(target)}.${tag}`;
312
+ // A fallback is downloading from the moment it starts, before GitHub answers: ② is the active step again.
313
+ if (fallbackReason)
314
+ tell(opts, { phase: "downloading", received: 0, total: null, fallback: { reason: fallbackReason } });
203
315
  try {
204
- const sha = await fetchToFile(releaseUrl(asset, version), part, opts);
316
+ const sha = await fetchToFile(releaseUrl(asset, version), part, opts, judgePace, (received, total) => tell(opts, { phase: "downloading", received, total, ...(fallbackReason ? { fallback: { reason: fallbackReason } } : {}) }));
205
317
  tell(opts, { phase: "verifying" });
206
318
  if (sha !== asset.sha256) {
207
319
  throw new CloudflaredInstallError("checksum-mismatch", `${asset.name}: SHA256 ${sha} does not match the pinned ${asset.sha256}`);
@@ -244,15 +356,46 @@ async function download(asset, version, dir, target, opts) {
244
356
  * disk error, a bad status, the size cap, a timeout, a cancel — settles the
245
357
  * promise, ends the response body and releases what this call opened.
246
358
  */
247
- async function fetchToFile(url, file, opts) {
359
+ async function fetchToFile(url, file, opts, judgePace, report) {
248
360
  const abort = new AbortController();
249
- const timer = setTimeout(() => abort.abort(), opts.timeoutMs ?? DOWNLOAD_TIMEOUT_MS);
361
+ // Why this attempt was stopped by us (a cancel is the caller's own signal): no byte for stallMs, the overall
362
+ // ceiling, or a pace that projects the file past slowProjectionMs while a second source exists.
363
+ let stopped = null;
364
+ const stop = (why) => { stopped ??= why; abort.abort(); };
365
+ const timer = setTimeout(() => stop("ceiling"), opts.timeoutMs ?? DOWNLOAD_CEILING_MS);
250
366
  timer.unref?.();
367
+ let stall;
368
+ // The timers stop a silent download; these deadlines are what admission is judged by, so a result that arrives
369
+ // after a deadline (the timer not yet run) is not accepted as if it were on time.
370
+ const attemptStart = performance.now();
371
+ let lastByteAt = attemptStart;
372
+ const admit = () => {
373
+ const now = performance.now();
374
+ if (!stopped && now - lastByteAt > (opts.stallMs ?? STALL_TIMEOUT_MS))
375
+ stopped = "stalled";
376
+ if (!stopped && now - attemptStart > (opts.timeoutMs ?? DOWNLOAD_CEILING_MS))
377
+ stopped = "ceiling";
378
+ if (stopped) {
379
+ abort.abort();
380
+ throw new Error(`stopped: ${stopped}`);
381
+ }
382
+ lastByteAt = now;
383
+ };
384
+ const moved = () => {
385
+ if (stall)
386
+ clearTimeout(stall);
387
+ stall = setTimeout(() => stop("stalled"), opts.stallMs ?? STALL_TIMEOUT_MS);
388
+ stall.unref?.();
389
+ };
390
+ moved();
391
+ let pace;
251
392
  const onCancel = () => abort.abort();
252
393
  opts.signal?.addEventListener("abort", onCancel, { once: true });
253
394
  // A listener added after the abort never fires: a cancel that already happened is honoured here.
254
395
  if (opts.signal?.aborted) {
255
396
  clearTimeout(timer);
397
+ if (stall)
398
+ clearTimeout(stall);
256
399
  opts.signal.removeEventListener("abort", onCancel);
257
400
  throw new CloudflaredInstallError("cancelled", "cancelled");
258
401
  }
@@ -262,6 +405,10 @@ async function fetchToFile(url, file, opts) {
262
405
  return err;
263
406
  if (opts.signal?.aborted)
264
407
  return new CloudflaredInstallError("cancelled", "cancelled");
408
+ if (stopped === "slow")
409
+ return new CloudflaredInstallError("download-failed", TOO_SLOW);
410
+ if (stopped === "stalled")
411
+ return new CloudflaredInstallError("download-failed", "stalled: no data for a while");
265
412
  if (abort.signal.aborted)
266
413
  return new CloudflaredInstallError("download-failed", "timed out");
267
414
  return new CloudflaredInstallError("download-failed", err.message);
@@ -270,6 +417,7 @@ async function fetchToFile(url, file, opts) {
270
417
  try {
271
418
  try {
272
419
  res = await transport.fetch(url, { signal: abort.signal, redirect: "follow" });
420
+ admit();
273
421
  }
274
422
  catch (err) {
275
423
  throw failed(err);
@@ -280,7 +428,9 @@ async function fetchToFile(url, file, opts) {
280
428
  const hash = createHash("sha256");
281
429
  const length = Number(res.headers?.get?.("content-length") ?? "");
282
430
  const total = Number.isSafeInteger(length) && length > 0 ? length : null;
283
- tell(opts, { phase: "downloading", received: 0, total });
431
+ moved();
432
+ report(0, total);
433
+ const startedAt = performance.now();
284
434
  let handle;
285
435
  try {
286
436
  handle = await open(file, "wx", 0o600);
@@ -289,6 +439,16 @@ async function fetchToFile(url, file, opts) {
289
439
  throw new CloudflaredInstallError("install-failed", `cannot write ${file}: ${err.message}`);
290
440
  }
291
441
  let bytes = 0;
442
+ if (judgePace && total) {
443
+ // One look, SLOW_CHECK_MS in: at the pace so far, would the rest arrive within slowProjectionMs?
444
+ pace = setTimeout(() => {
445
+ const elapsed = performance.now() - startedAt;
446
+ const projected = bytes > 0 ? elapsed * total / bytes : Number.POSITIVE_INFINITY;
447
+ if (projected > (opts.slowProjectionMs ?? SLOW_PROJECTION_MS))
448
+ stop("slow");
449
+ }, opts.slowCheckMs ?? SLOW_CHECK_MS);
450
+ pace.unref?.();
451
+ }
292
452
  try {
293
453
  for (;;) {
294
454
  let chunk;
@@ -298,6 +458,12 @@ async function fetchToFile(url, file, opts) {
298
458
  catch (err) {
299
459
  throw failed(err);
300
460
  }
461
+ try {
462
+ admit();
463
+ }
464
+ catch (err) {
465
+ throw failed(err);
466
+ }
301
467
  if (chunk.done)
302
468
  break;
303
469
  bytes += chunk.value.byteLength;
@@ -305,7 +471,8 @@ async function fetchToFile(url, file, opts) {
305
471
  throw new CloudflaredInstallError("download-failed", "the download is larger than any cloudflared");
306
472
  hash.update(chunk.value);
307
473
  await writeAll(handle, chunk.value, file);
308
- tell(opts, { phase: "downloading", received: bytes, total });
474
+ moved();
475
+ report(bytes, total);
309
476
  }
310
477
  }
311
478
  catch (err) {
@@ -325,6 +492,10 @@ async function fetchToFile(url, file, opts) {
325
492
  }
326
493
  finally {
327
494
  clearTimeout(timer);
495
+ if (stall)
496
+ clearTimeout(stall);
497
+ if (pace)
498
+ clearTimeout(pace);
328
499
  opts.signal?.removeEventListener("abort", onCancel);
329
500
  await transport.close().catch(() => { });
330
501
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cloudflared-install.js","sourceRoot":"","sources":["../../src/tunnel/cloudflared-install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cloudflared-install.js","sourceRoot":"","sources":["../../src/tunnel/cloudflared-install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AACrH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,OAAO,EAAE,UAAU;IACnB,MAAM,EAAE;QACN,WAAW,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,MAAM,EAAE,kEAAkE,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE;QAC7J,aAAa,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,MAAM,EAAE,kEAAkE,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE;QAC/J,WAAW,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,MAAM,EAAE,kEAAkE,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE;QACzJ,YAAY,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,MAAM,EAAE,kEAAkE,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE;QAC1J,YAAY,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,MAAM,EAAE,kEAAkE,EAAE,OAAO,EAAE,KAAK,EAAE;QAClJ,cAAc,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,MAAM,EAAE,kEAAkE,EAAE,OAAO,EAAE,KAAK,EAAE;KACrJ;CACO,CAAC;AAYX,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAC3B;IAArB,YAAqB,IAAiC,EAAE,MAAc;QACpE,KAAK,CAAC,MAAM,CAAC,CAAC;QADK,SAAI,GAAJ,IAAI,CAA6B;QAEpD,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AAED,0FAA0F;AAC1F,MAAM,UAAU,QAAQ,CAAC,QAAyB,EAAE,IAAY;IAC9D,OAAQ,eAAe,CAAC,MAA2C,CAAC,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC;AACrG,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAuB,EAAE,UAAkB,eAAe,CAAC,OAAO;IAC3F,OAAO,+DAA+D,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;AAChG,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,UAAU,CAAC,KAAuB,EAAE,UAAkB,eAAe,CAAC,OAAO;IAC3F,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,8EAA8E,OAAO,IAAI,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACrI,CAAC;AAED,4EAA4E;AAC5E,MAAM,kBAAkB,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AAC7C;;;GAGG;AACH,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAChC,sEAAsE;AACtE,MAAM,mBAAmB,GAAG,EAAE,GAAG,MAAM,CAAC;AACxC;;;GAGG;AACH,MAAM,aAAa,GAAG,MAAM,CAAC;AAC7B,MAAM,kBAAkB,GAAG,CAAC,GAAG,MAAM,CAAC;AACtC,uHAAuH;AACvH,MAAM,QAAQ,GAAG,uCAAuC,CAAC;AA2CzD,SAAS,IAAI,CAAC,IAA8B,EAAE,QAAoC;IAChF,IAAI,CAAC;QAAC,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,4CAA4C,CAAC,CAAC;AAC7F,CAAC;AAQD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA4C,CAAC;AAErE,yGAAyG;AACzG,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAA8B;IACpE,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9F,IAAI,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACpD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5B,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7E,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC1B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,MAA+B;IACvD,IAAI,MAAM,EAAE,OAAO;QAAE,MAAM,IAAI,uBAAuB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AACnF,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,IAA8B,EAAE,GAAW;IACvE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,eAAe,CAAC;IACxC,MAAM,KAAK,GAAI,GAAG,CAAC,MAA2C,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACpI,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,uBAAuB,CAAC,sBAAsB,EACtD,6BAA6B,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACnG,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IACxC,6EAA6E;IAC7E,IAAI,CAAC,MAAM,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,UAAU;QAAE,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;IAClG,IAAI,MAAM,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;QAC9D,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACxE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC3C,CAAC;IACD,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAEvE,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACxE,0FAA0F;IAC1F,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACtD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;AAChD,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,gBAAgB,CAAC,OAAe,EAAE,GAAW,EAAE,GAAuB;IACnF,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,uBAAuB,CAAC,gBAAgB,EAAE,GAAG,OAAO,iBAAiB,CAAC,CAAC;IAC5F,4GAA4G;IAC5G,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACtF,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,QAAQ,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7G,MAAM,IAAI,uBAAuB,CAAC,gBAAgB,EAAE,GAAG,OAAO,sEAAsE,CAAC,CAAC;IACxI,CAAC;IACD,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrH,EAAE,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IACD,IAAI,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;QAC7C,MAAM,IAAI,uBAAuB,CAAC,gBAAgB,EAAE,GAAG,GAAG,mEAAmE,CAAC,CAAC;IACjI,CAAC;IACD,IAAI,GAAG,KAAK,SAAS,IAAI,EAAE,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;QACxC,MAAM,IAAI,uBAAuB,CAAC,gBAAgB,EAAE,GAAG,GAAG,kEAAkE,CAAC,CAAC;IAChI,CAAC;IACD,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACxB,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,MAAc;IAC1C,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAClC,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,kFAAkF;AAClF,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,GAAuB;IAC9D,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAC/C,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AACjG,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,MAAc,IAAY,OAAO,GAAG,MAAM,SAAS,CAAC,CAAC,CAAC;AAEzE,KAAK,UAAU,kBAAkB,CAAC,MAAc,EAAE,OAAe,EAAE,KAAuB,EAAE,GAAuB;IACjH,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACpD,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QAAC,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;IAClE,sEAAsE;IACtE,IAAI,KAAK,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC;IAC/D,+EAA+E;IAC/E,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/D,IAAI,KAAa,CAAC;IAClB,IAAI,CAAC;QAAC,KAAK,GAAG,CAAC,MAAM,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;IAC3F,MAAM,CAAC,cAAc,EAAE,YAAY,EAAE,aAAa,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzE,OAAO,cAAc,KAAK,OAAO,IAAI,YAAY,KAAK,KAAK,CAAC,MAAM,IAAI,aAAa,KAAK,MAAM,CAAC;AACjG,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAY;IACpC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,gBAAgB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAChH,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,QAAQ,CAAC,KAAuB,EAAE,OAAe,EAAE,GAAW,EAAE,MAAc,EAAE,IAA8B;IAC3H,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC,QAAQ;QAAE,OAAO,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAChF,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAClE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,CAAC,GAAG,YAAY,uBAAuB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,iBAAiB,IAAI,GAAG,CAAC,IAAI,KAAK,mBAAmB,IAAI,GAAG,YAAY,kBAAkB,CAAC;YAAE,MAAM,GAAG,CAAC;QACvK,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,MAAM,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAChH,CAAC;AACH,CAAC;AAED,uHAAuH;AACvH,MAAM,kBAAmB,SAAQ,uBAAuB;IACtD,YAAY,MAAc,IAAI,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;CACjE;AAED;;;;GAIG;AACH,KAAK,UAAU,eAAe,CAAC,KAAuB,EAAE,GAAW,EAAE,GAAW,EAAE,MAAc,EAAE,IAA8B,EAC9H,SAAkB;IAClB,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,gBAAgB,GAAG,WAAW,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC7H,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACnC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,gHAAgH;QAChH,4CAA4C;QAC5C,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YACnD,MAAM,IAAI,uBAAuB,CAAC,gBAAgB,EAAE,eAAe,OAAO,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3G,CAAC,CAAC,CAAC;QACH,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,qBAAqB,EAAE,IAAI,CAAC,QAAQ,IAAI,kBAAkB,CAAC,CAAC;QACtG,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,kBAAkB,CAAC,GAAG,GAAG,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9D,IAAI,GAAG,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YACzB,MAAM,IAAI,uBAAuB,CAAC,mBAAmB,EAAE,GAAG,GAAG,uCAAuC,GAAG,oBAAoB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7I,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YACvD,MAAM,IAAI,uBAAuB,CAAC,gBAAgB,EAAE,gBAAgB,IAAI,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACzG,CAAC,CAAC,CAAC;QACH,IAAI,CAAC;YAAC,MAAM,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAAC,CAAC;gBAAS,CAAC;YAAC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAwB,CAAC,CAAC,CAAC;QAAC,CAAC;QACrH,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,OAAO,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YAC7B,MAAM,IAAI,uBAAuB,CAAC,gBAAgB,EAAE,GAAG,IAAI,kDAAkD,OAAO,GAAG,CAAC,CAAC;QAC3H,CAAC;QACD,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACzB,MAAM,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,uBAAuB;YAAE,MAAM,GAAG,CAAC;QACtD,MAAM,IAAI,uBAAuB,CAAC,gBAAgB,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;IAC9E,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,KAAuB,EAAE,OAAe,EAAE,GAAW,EAAE,MAAc,EAAE,IAA8B,EAClI,SAAkB,EAAE,cAAkC;IACtD,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC;IAC3B,MAAM,QAAQ,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;IAC/C,0GAA0G;IAC1G,IAAI,cAAc;QAAE,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC;IACzH,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAC7E,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACnJ,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACnC,IAAI,GAAG,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YACzB,MAAM,IAAI,uBAAuB,CAAC,mBAAmB,EACnD,GAAG,KAAK,CAAC,IAAI,YAAY,GAAG,8BAA8B,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,qFAAqF;QACrF,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,OAAO,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YAC7B,MAAM,IAAI,uBAAuB,CAAC,gBAAgB,EAAE,GAAG,IAAI,oDAAoD,OAAO,GAAG,CAAC,CAAC;QAC7H,CAAC;QACD,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YAC5B,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,iBAAiB,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC3D,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YACrC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAChE,MAAM,IAAI,uBAAuB,CAAC,gBAAgB,EAAE,GAAG,KAAK,CAAC,IAAI,4BAA4B,CAAC,CAAC;YACjG,CAAC;QACH,CAAC;QACD,MAAM,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC3B,MAAM,aAAa,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;QACvE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7B,MAAM,SAAS,CAAC,QAAQ,EAAE,GAAG,OAAO,IAAI,KAAK,CAAC,MAAM,IAAI,aAAa,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACxG,MAAM,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,uBAAuB;YAAE,MAAM,GAAG,CAAC;QACtD,MAAM,IAAI,uBAAuB,CAAC,gBAAgB,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;IAC9E,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAChC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,WAAW,CAAC,GAAW,EAAE,IAAY,EAAE,IAA8B,EAAE,SAAkB,EACtG,MAAwD;IACxD,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;IACpC,6GAA6G;IAC7G,gGAAgG;IAChG,IAAI,OAAO,GAA0C,IAAI,CAAC;IAC1D,MAAM,IAAI,GAAG,CAAC,GAAmC,EAAE,EAAE,GAAG,OAAO,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1F,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,IAAI,mBAAmB,CAAC,CAAC;IACvF,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IAChB,IAAI,KAAgD,CAAC;IACrD,+GAA+G;IAC/G,kFAAkF;IAClF,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IACvC,IAAI,UAAU,GAAG,YAAY,CAAC;IAC9B,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,IAAI,GAAG,GAAG,UAAU,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,gBAAgB,CAAC;YAAE,OAAO,GAAG,SAAS,CAAC;QAC3F,IAAI,CAAC,OAAO,IAAI,GAAG,GAAG,YAAY,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,mBAAmB,CAAC;YAAE,OAAO,GAAG,SAAS,CAAC;QAClG,IAAI,OAAO,EAAE,CAAC;YAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;QAAC,CAAC;QACvE,UAAU,GAAG,GAAG,CAAC;IACnB,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,IAAI,KAAK;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QAC/B,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,OAAO,IAAI,gBAAgB,CAAC,CAAC;QAC5E,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IAClB,CAAC,CAAC;IACF,KAAK,EAAE,CAAC;IACR,IAAI,IAA+C,CAAC;IACpD,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,iGAAiG;IACjG,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;QACzB,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,IAAI,KAAK;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACnD,MAAM,IAAI,uBAAuB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,gBAAgB,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IACtI,MAAM,MAAM,GAAG,CAAC,GAAY,EAA2B,EAAE;QACvD,IAAI,GAAG,YAAY,uBAAuB;YAAE,OAAO,GAAG,CAAC;QACvD,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO;YAAE,OAAO,IAAI,uBAAuB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACvF,IAAI,OAAO,KAAK,MAAM;YAAE,OAAO,IAAI,uBAAuB,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QACxF,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,IAAI,uBAAuB,CAAC,iBAAiB,EAAE,8BAA8B,CAAC,CAAC;QACjH,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,IAAI,uBAAuB,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;QAC7F,OAAO,IAAI,uBAAuB,CAAC,iBAAiB,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;IAChF,CAAC,CAAC;IACF,IAAI,GAAG,GAAoB,IAAI,CAAC;IAChC,IAAI,CAAC;QACH,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC/E,KAAK,EAAE,CAAC;QACV,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI;YAAE,MAAM,IAAI,uBAAuB,CAAC,iBAAiB,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACrG,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACzE,KAAK,EAAE,CAAC;QACR,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACjB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACpC,IAAI,MAAM,CAAC;QACX,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,uBAAuB,CAAC,gBAAgB,EAAE,gBAAgB,IAAI,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACzG,CAAC;QACD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;YACvB,iGAAiG;YACjG,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE;gBACrB,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;gBAC9C,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC;gBACjF,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,gBAAgB,IAAI,kBAAkB,CAAC;oBAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9E,CAAC,EAAE,IAAI,CAAC,WAAW,IAAI,aAAa,CAAC,CAAC;YACtC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;QACjB,CAAC;QACD,IAAI,CAAC;YACH,SAAS,CAAC;gBACR,IAAI,KAA2C,CAAC;gBAChD,IAAI,CAAC;oBAAC,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAAC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBAAC,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;gBAAC,CAAC;gBACvE,IAAI,CAAC;oBAAC,KAAK,EAAE,CAAC;gBAAC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBAAC,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;gBAAC,CAAC;gBACnD,IAAI,KAAK,CAAC,IAAI;oBAAE,MAAM;gBACtB,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;gBAChC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,kBAAkB,CAAC;oBAAE,MAAM,IAAI,uBAAuB,CAAC,iBAAiB,EAAE,6CAA6C,CAAC,CAAC;gBACvJ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACzB,MAAM,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC1C,KAAK,EAAE,CAAC;gBACR,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAsB,CAAC,CAAC,CAAC;YAC1D,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAwB,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,6FAA6F;QAC7F,MAAM,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAgC,CAAC,CAAC,CAAC;QACxE,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,IAAI,KAAK;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,IAAI;YAAE,YAAY,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACpD,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAwB,CAAC,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,QAAQ,CAAC,MAAkB,EAAE,IAAgB,EAAE,IAAY;IACxE,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,OAAO,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAChC,IAAI,YAAoB,CAAC;QACzB,IAAI,CAAC;YACH,CAAC,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC;QAClF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,uBAAuB,CAAC,gBAAgB,EAAE,gBAAgB,IAAI,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACzG,CAAC;QACD,IAAI,YAAY,IAAI,CAAC;YAAE,MAAM,IAAI,uBAAuB,CAAC,gBAAgB,EAAE,gBAAgB,IAAI,eAAe,CAAC,CAAC;QAChH,MAAM,IAAI,YAAY,CAAC;IACzB,CAAC;AACH,CAAC;AAED,yGAAyG;AACzG,KAAK,UAAU,gBAAgB,CAAC,GAAsB;IACpD,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC;IACvF,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC,EAAE,CAAC;IACvF,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,IAAI,iBAAiB,EAAE,CAAC;IACtC,OAAO;QACL,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAiC;QACtG,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE;KAC3B,CAAC;AACJ,CAAC;AAED,gGAAgG;AAChG,SAAS,iBAAiB,CAAC,OAAe,EAAE,OAAe;IACzD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACnI,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9E,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/G,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare class DebExtractError extends Error {
2
+ constructor(detail: string);
3
+ }
4
+ /** The bytes of the `ar` member named `wanted`. */
5
+ export declare function arMember(archive: Buffer, wanted: string): Buffer;
6
+ /** The bytes of the regular file `path` (with or without a leading `./`) in a tar stream. */
7
+ export declare function tarFile(tar: Buffer, path: string): Buffer;
8
+ /** `usr/bin/cloudflared` out of a cloudflared `.deb`; `maxBytes` bounds the decompressed data. */
9
+ export declare function extractDebFile(deb: Buffer, path: string, maxBytes: number): Promise<Buffer>;
@@ -0,0 +1,94 @@
1
+ /**
2
+ * #1554: one file out of a Debian package, in Node, with no new dependency — for cloudflared's pkg.cloudflare.com
3
+ * `.deb`, the first source on Linux (GitHub is the fallback). What comes out proves nothing by itself: the caller checks it
4
+ * against the pinned SHA256 like every other download.
5
+ *
6
+ * Shapes accepted, as cloudflared 2026.9.3's packages have them: an `ar` archive (`!<arch>\n`, 60-byte headers,
7
+ * decimal sizes, GNU names ending in `/`, members padded to an even offset) holding `data.tar.gz` — one gzip stream of
8
+ * a POSIX/GNU tar (512-byte blocks, octal sizes, checksummed headers). Anything else — a truncated member, a bad
9
+ * header, a link where the file should be, a compression other than gzip — is refused, never guessed at.
10
+ */
11
+ import { gunzip } from "node:zlib";
12
+ import { promisify } from "node:util";
13
+ const gunzipAsync = promisify(gunzip);
14
+ export class DebExtractError extends Error {
15
+ constructor(detail) { super(detail); this.name = "DebExtractError"; }
16
+ }
17
+ /** The bytes of the `ar` member named `wanted`. */
18
+ export function arMember(archive, wanted) {
19
+ if (archive.length < 8 || archive.toString("latin1", 0, 8) !== "!<arch>\n")
20
+ throw new DebExtractError("not an ar archive");
21
+ let offset = 8;
22
+ while (offset < archive.length) {
23
+ if (offset + 60 > archive.length)
24
+ throw new DebExtractError("truncated ar header");
25
+ const header = archive.toString("latin1", offset, offset + 60);
26
+ if (header.slice(58, 60) !== "`\n")
27
+ throw new DebExtractError("bad ar header");
28
+ const sizeField = header.slice(48, 58).trim();
29
+ if (!/^\d+$/.test(sizeField))
30
+ throw new DebExtractError("bad ar member size");
31
+ const size = Number(sizeField);
32
+ const start = offset + 60, end = start + size;
33
+ if (end > archive.length)
34
+ throw new DebExtractError("truncated ar member");
35
+ const name = header.slice(0, 16).trim().replace(/\/$/, "");
36
+ if (name === wanted)
37
+ return archive.subarray(start, end);
38
+ offset = end + (size % 2);
39
+ }
40
+ throw new DebExtractError(`no ${wanted} in the package`);
41
+ }
42
+ function octal(field) {
43
+ const text = field.toString("latin1").replace(/\0.*$/s, "").trim();
44
+ if (!/^[0-7]+$/.test(text))
45
+ throw new DebExtractError("bad tar number");
46
+ return parseInt(text, 8);
47
+ }
48
+ /** The bytes of the regular file `path` (with or without a leading `./`) in a tar stream. */
49
+ export function tarFile(tar, path) {
50
+ const want = path.replace(/^\.\//, "");
51
+ let offset = 0;
52
+ while (offset + 512 <= tar.length) {
53
+ const header = tar.subarray(offset, offset + 512);
54
+ if (header.every(byte => byte === 0))
55
+ break; // the end-of-archive blocks
56
+ let sum = 0;
57
+ for (let i = 0; i < 512; i++)
58
+ sum += i >= 148 && i < 156 ? 0x20 : header[i];
59
+ if (octal(header.subarray(148, 156)) !== sum)
60
+ throw new DebExtractError("bad tar header checksum");
61
+ if (header[124] & 0x80)
62
+ throw new DebExtractError("unsupported tar size encoding");
63
+ const size = octal(header.subarray(124, 136));
64
+ const name = header.subarray(0, 100).toString("utf8").replace(/\0.*$/s, "");
65
+ // Only POSIX ustar ("ustar\0" "00") has a name prefix at 345; old GNU tar ("ustar \0", these packages) keeps
66
+ // other fields there.
67
+ const prefix = header.toString("latin1", 257, 265) === "ustar\x0000" ? header.subarray(345, 500).toString("utf8").replace(/\0.*$/s, "") : "";
68
+ const full = (prefix ? `${prefix}/${name}` : name).replace(/^\.\//, "");
69
+ const type = String.fromCharCode(header[156]);
70
+ const start = offset + 512, end = start + size;
71
+ if (end > tar.length)
72
+ throw new DebExtractError("truncated tar entry");
73
+ if (full === want) {
74
+ if (type !== "0" && type !== "\0")
75
+ throw new DebExtractError(`${path} is not a regular file in the package`);
76
+ return tar.subarray(start, end);
77
+ }
78
+ offset = start + Math.ceil(size / 512) * 512;
79
+ }
80
+ throw new DebExtractError(`no ${path} in the package`);
81
+ }
82
+ /** `usr/bin/cloudflared` out of a cloudflared `.deb`; `maxBytes` bounds the decompressed data. */
83
+ export async function extractDebFile(deb, path, maxBytes) {
84
+ const data = arMember(deb, "data.tar.gz");
85
+ let tar;
86
+ try {
87
+ tar = await gunzipAsync(data, { maxOutputLength: maxBytes });
88
+ }
89
+ catch (err) {
90
+ throw new DebExtractError(`data.tar.gz does not decompress: ${err.message}`);
91
+ }
92
+ return tarFile(tar, path);
93
+ }
94
+ //# sourceMappingURL=deb-extract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deb-extract.js","sourceRoot":"","sources":["../../src/tunnel/deb-extract.ts"],"names":[],"mappings":"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"}
package/dist/ui/app.html CHANGED
@@ -5,6 +5,9 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover, interactive-widget=resizes-content">
6
6
  <meta name="referrer" content="no-referrer">
7
7
  <title>AgEnD</title>
8
+ <link rel="icon" href="/favicon.ico" sizes="16x16 32x32 64x64">
9
+ <link rel="icon" href="/favicon.svg" type="image/svg+xml" sizes="any">
10
+ <link rel="apple-touch-icon" href="/apple-touch-icon.png" sizes="180x180">
8
11
  <script src="/assets/theme.js"></script>
9
12
  <link rel="stylesheet" href="/assets/tokens.css">
10
13
  <link rel="stylesheet" href="/assets/app.css">
@@ -32,6 +32,26 @@ register("chat", {
32
32
  pvOpenPanel: "Open in panel", pvInPanel: "Shown in the panel.", pvPanel: "HTML preview", pvSource: "From {0}, {1} — show the message",
33
33
  pvPage: "Page", pvCode: "Code", pvReload: "Reload", pvClose: "Close the panel", pvBack: "Back to the chat", pvResize: "Resize the preview panel",
34
34
  pvNewer: "A newer version is in the reply from {0}.", pvNewerShow: "Show it", pvPanelIdle: "Click Preview to run it here.",
35
+ lbLabel: "Image: {0}", lbLabelNoName: "Image", lbClose: "Close", lbOpenOriginal: "Open original", lbPrev: "Previous image", lbNext: "Next image", lbCount: "{0} / {1}",
36
+ // #1554: preview.js's words (its English is the fallback there), and the server's reasons by code.
37
+ pvWhyOptin: "HTML previews are off on this device (this browser, at this address). Allow them from this card's ⋯ menu or the sidebar.",
38
+ pvWhyOptinPanel: "HTML previews are off on this device (this browser, at this address).",
39
+ pvWhyNever: "Previews are switched off on this device for this session.",
40
+ pvWhyOrigin: "Previews are off: this page is at {0}, but the fleet believes it is at {1} (a proxy that rewrites Host). Pass the external Host through, or set web.preview_origin.",
41
+ pvUnknownAddress: "an unknown address", pvWhyServer: "Previews are not available here.",
42
+ pvHtmlOver: "This HTML is over 1 MiB; it is not previewed.",
43
+ pvNoAnswer: "Preview unavailable: the preview did not answer within 3 s. If an earlier preview froze, it may still be running — open the dashboard in a new tab. Over SSH, forward the preview port too.",
44
+ pvStoppedAnswering: "The preview stopped answering, so it was closed.", pvSwitchedOff: "Previews were switched off on this device.",
45
+ pvAnother: "Another preview started.", pvWrongBoot: "Preview unavailable: something else answered on the preview port.",
46
+ pvBanner: "Previews run the agent's HTML in an isolated frame. It cannot use your login, but it may be able to send data out. Only preview content you trust. A preview can slow or freeze this tab.",
47
+ pvServer_fleetOff: "Previews are turned off for this fleet (web.preview: false).", pvServer_unchecked: "This address cannot be checked.",
48
+ pvServer_noPort: "Previews have no port: set web.preview_port (health_port is the highest port).",
49
+ pvServer_notListed: "Previews are not offered at {0}: list this address (with its port) in web.allowed_hosts, and set web.preview_origin.",
50
+ pvServer_needOrigin: "Previews need web.preview_origin when the dashboard is reached through a tunnel or proxy.",
51
+ pvServer_needHttps: "Previews need an https web.preview_origin when the dashboard is reached over https.",
52
+ pvServer_sameOrigin: "The preview origin cannot be the dashboard's own.",
53
+ pvServer_publicLink: "Previews are not offered over the public link. Open the dashboard on the machine running AgEnD to preview.",
54
+ pvServer_notOffered: "Previews are not available on this page.",
35
55
  previews: "Allow HTML previews on this device",
36
56
  copy: "Copy", copyMessage: "Copy this reply", copied: "Copied", copyFailed: "Copy failed", wrap: "Wrap", showAll: "Show all {0} lines", showLess: "Show less", jumpLatest: "Latest", newBelow: "{0} new",
37
57
  disconnected: "disconnected", tick_queued: "Waiting behind another message", tick_processing: "Handed to the agent", tick_delivered: "The agent has it", tick_failed: "Not delivered", tick_cancelled: "Dropped by Stop",
@@ -46,6 +66,12 @@ register("chat", {
46
66
  loadFailed: "Failed to load", tour: "Tour", tourBtnTitle: "Show the web chat tour again",
47
67
  dName: "Name", dStatus: "Status", dDisplay: "Display name", dDescription: "Description", dDirectory: "Directory", dBackend: "Backend", dModel: "Model", dEffort: "Effort",
48
68
  dCost: "Cost", dCostNote: "(session accumulated)", dContext: "Context", dRate5: "Rate 5h", dRate7: "Rate 7d", dActivity: "Recent activity", dInstance: "Instance", dRuntime: "Runtime",
69
+ // #1523 N2: Details (the Fleet side of one instance).
70
+ dConfig: "Configuration", dBinding: "Bound to", dBindingGeneral: "the General topic of {0}", dBindingTopic: "{0}, topic {1}", dBindingNoTopic: "{0}, no topic yet",
71
+ dBindingDefault: "{0} (the first connection, by default)", dBindingRoom: "ClassicBot room #{0} ({1})",
72
+ dBindingNone: "not bound (web only)", dPrimary: "the first connection", dTags: "Tags", dReadOnly: "Read only — change it in Settings.",
73
+ dEditInSettings: "Edit in Settings", dPause: "Pause", dWake: "Wake", dPaused: "{0} paused", dWoken: "{0} is waking up", dActionFailed: "That did not work — try again.",
74
+ dNoActivity: "No activity in the last hour.", dWorking: "Working…",
49
75
  configured: "(configured)", fleetDefault: "(fleet default)",
50
76
  },
51
77
  "zh-TW": {
@@ -78,6 +104,25 @@ register("chat", {
78
104
  pvOpenPanel: "在面板中開啟", pvInPanel: "已在面板中顯示。", pvPanel: "HTML 預覽", pvSource: "來自 {0},{1}——顯示該訊息",
79
105
  pvPage: "頁面", pvCode: "程式碼", pvReload: "重新載入", pvClose: "關閉面板", pvBack: "回到對話", pvResize: "調整預覽面板寬度",
80
106
  pvNewer: "{0} 的回覆裡有較新的版本。", pvNewerShow: "顯示", pvPanelIdle: "按「預覽」在這裡執行。",
107
+ lbLabel: "圖片:{0}", lbLabelNoName: "圖片", lbClose: "關閉", lbOpenOriginal: "開啟原圖", lbPrev: "上一張", lbNext: "下一張", lbCount: "{0} / {1}",
108
+ pvWhyOptin: "這台裝置(這個瀏覽器、這個網址)還沒允許 HTML 預覽。可從這張卡片的 ⋯ 選單或側欄允許。",
109
+ pvWhyOptinPanel: "這台裝置(這個瀏覽器、這個網址)還沒允許 HTML 預覽。",
110
+ pvWhyNever: "這台裝置在這個工作階段已關閉預覽。",
111
+ pvWhyOrigin: "預覽已關閉:這個頁面位於 {0},但艦隊認為它位於 {1}(有會改寫 Host 的代理)。請讓外部 Host 原樣傳入,或設定 web.preview_origin。",
112
+ pvUnknownAddress: "未知的網址", pvWhyServer: "這裡無法使用預覽。",
113
+ pvHtmlOver: "這段 HTML 超過 1 MiB,不提供預覽。",
114
+ pvNoAnswer: "無法預覽:預覽在 3 秒內沒有回應。如果先前的預覽卡住了,它可能還在執行——請在新分頁開啟儀表板。透過 SSH 使用時,也要轉送預覽的連接埠。",
115
+ pvStoppedAnswering: "預覽沒有回應,已將它關閉。", pvSwitchedOff: "這台裝置已關閉預覽。",
116
+ pvAnother: "另一個預覽已開始。", pvWrongBoot: "無法預覽:預覽連接埠上回應的不是這個艦隊。",
117
+ pvBanner: "預覽會在隔離的框架裡執行 agent 的 HTML。它無法使用你的登入,但可能把資料傳出去。只預覽你信任的內容。預覽可能讓這個分頁變慢或卡住。",
118
+ pvServer_fleetOff: "這個艦隊已關閉預覽(web.preview: false)。", pvServer_unchecked: "無法確認這個網址。",
119
+ pvServer_noPort: "預覽沒有可用的連接埠:請設定 web.preview_port(health_port 已是最大的連接埠)。",
120
+ pvServer_notListed: "{0} 不提供預覽:請把這個網址(含連接埠)加入 web.allowed_hosts,並設定 web.preview_origin。",
121
+ pvServer_needOrigin: "透過通道或代理開啟儀表板時,預覽需要設定 web.preview_origin。",
122
+ pvServer_needHttps: "以 https 開啟儀表板時,預覽需要 https 的 web.preview_origin。",
123
+ pvServer_sameOrigin: "預覽的來源不能和儀表板相同。",
124
+ pvServer_publicLink: "公開連結不提供預覽。要預覽,請在執行 AgEnD 的那台機器上開啟儀表板。",
125
+ pvServer_notOffered: "這個頁面不提供預覽。",
81
126
  previews: "允許這台裝置預覽 HTML",
82
127
  copy: "複製", copyMessage: "複製這則回覆", copied: "已複製", copyFailed: "複製失敗", wrap: "換行", showAll: "展開全部 {0} 行", showLess: "收合", jumpLatest: "最新", newBelow: "{0} 則新訊息",
83
128
  disconnected: "已斷線", tick_queued: "排在前一則訊息之後", tick_processing: "已交給 agent", tick_delivered: "agent 已收到", tick_failed: "未送達", tick_cancelled: "已被中止取消",
@@ -92,6 +137,11 @@ register("chat", {
92
137
  loadFailed: "載入失敗", tour: "導覽", tourBtnTitle: "再看一次網頁聊天導覽",
93
138
  dName: "名稱", dStatus: "狀態", dDisplay: "顯示名稱", dDescription: "說明", dDirectory: "目錄", dBackend: "Backend", dModel: "模型", dEffort: "Effort",
94
139
  dCost: "花費", dCostNote: "(本次 session 累計)", dContext: "Context", dRate5: "5 小時額度", dRate7: "7 天額度", dActivity: "最近活動", dInstance: "Instance", dRuntime: "執行環境",
140
+ dConfig: "設定", dBinding: "綁定", dBindingGeneral: "{0} 的 General topic", dBindingTopic: "{0},topic {1}", dBindingNoTopic: "{0},尚未綁定 topic",
141
+ dBindingDefault: "{0}(預設:第一個連線)", dBindingRoom: "ClassicBot 房間 #{0}({1})",
142
+ dBindingNone: "未綁定(只用網頁)", dPrimary: "第一個連線", dTags: "標籤", dReadOnly: "這裡只能檢視——請到設定修改。",
143
+ dEditInSettings: "到設定編輯", dPause: "暫停", dWake: "喚醒", dPaused: "{0} 已暫停", dWoken: "{0} 正在喚醒", dActionFailed: "沒有成功,請再試一次。",
144
+ dNoActivity: "最近一小時沒有活動。", dWorking: "處理中…",
95
145
  configured: "(設定值)", fleetDefault: "(fleet 預設)",
96
146
  },
97
147
  });
@@ -142,7 +142,7 @@ export function createThread(list, scroller, opts) {
142
142
  menu.append(sum, optB, neverB);
143
143
  head.append(label, run, stopB, ...(toPanel ? [toPanel] : []), ...(dl ? [dl] : []), menu);
144
144
  const note = el("div", "pv-note");
145
- const banner = el("div", "pv-banner", P().BANNER); banner.hidden = true;
145
+ const banner = el("div", "pv-banner", P().banner()); banner.hidden = true;
146
146
  const holder = el("div", "pv-holder");
147
147
  ph.append(head, note, banner, holder);
148
148
  let state = "idle";
@@ -274,8 +274,23 @@ export function createThread(list, scroller, opts) {
274
274
  button.textContent = ok ? tr("chat.copied") : tr("chat.copyFailed");
275
275
  setTimeout(() => { button.textContent = was; }, 1200);
276
276
  }
277
+ /**
278
+ * A chat image: a plain left click (or Enter on it) shows it in the page — this message's images, from the one
279
+ * clicked. With a modifier key the link does what the browser does (a new tab, a new window, a download); a middle
280
+ * click is not a click event at all. True when it was an image (whether or not it opened).
281
+ */
282
+ function onImageClick(e) {
283
+ const img = e.target && e.target.closest ? e.target.closest("a.att-img") : null;
284
+ if (!img || !list.contains(img)) return false;
285
+ if (opts.openImage && !e.defaultPrevented && (e.button ?? 0) === 0 && !e.ctrlKey && !e.metaKey && !e.shiftKey && !e.altKey) {
286
+ const links = [...(img.closest(".atts") || img).querySelectorAll("a.att-img")];
287
+ if (opts.openImage(links.length ? links : [img], img)) e.preventDefault();
288
+ }
289
+ return true;
290
+ }
277
291
  /** The thread's own buttons (Copy, Wrap, fold), delegated from the thread element. */
278
292
  function onClick(e) {
293
+ if (onImageClick(e)) return;
279
294
  const el = e.target && e.target.closest ? e.target.closest("[data-act]") : null;
280
295
  if (!el || !list.contains(el)) return;
281
296
  const act = el.dataset.act;
Binary file