@songsid/agend 2.3.2-beta.10 → 2.3.2-beta.12

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 (132) hide show
  1. package/README.md +4 -0
  2. package/README.zh-TW.md +4 -0
  3. package/dist/agent-cli.js +48 -0
  4. package/dist/agent-cli.js.map +1 -1
  5. package/dist/agent-endpoint.js +6 -0
  6. package/dist/agent-endpoint.js.map +1 -1
  7. package/dist/agent-whats-new.js +3 -0
  8. package/dist/agent-whats-new.js.map +1 -1
  9. package/dist/backend/kiro-classic-archive.d.ts +52 -0
  10. package/dist/backend/kiro-classic-archive.js +444 -0
  11. package/dist/backend/kiro-classic-archive.js.map +1 -0
  12. package/dist/backend/kiro-identity.d.ts +19 -0
  13. package/dist/backend/kiro-identity.js +43 -0
  14. package/dist/backend/kiro-identity.js.map +1 -1
  15. package/dist/backend/kiro-migration-verify.d.ts +10 -0
  16. package/dist/backend/kiro-migration-verify.js +52 -0
  17. package/dist/backend/kiro-migration-verify.js.map +1 -0
  18. package/dist/backend/kiro-v2-store-worker.js +21 -1
  19. package/dist/backend/kiro-v2-store-worker.js.map +1 -1
  20. package/dist/backend/kiro-v2-store.d.ts +8 -0
  21. package/dist/backend/kiro-v2-store.js.map +1 -1
  22. package/dist/backend/kiro.d.ts +99 -1
  23. package/dist/backend/kiro.js +352 -18
  24. package/dist/backend/kiro.js.map +1 -1
  25. package/dist/backend/types.d.ts +49 -0
  26. package/dist/backend/types.js +9 -0
  27. package/dist/backend/types.js.map +1 -1
  28. package/dist/channel/ipc-timeouts.js +3 -0
  29. package/dist/channel/ipc-timeouts.js.map +1 -1
  30. package/dist/channel/mcp-tools.js +12 -0
  31. package/dist/channel/mcp-tools.js.map +1 -1
  32. package/dist/cli.js +33 -0
  33. package/dist/cli.js.map +1 -1
  34. package/dist/config-validator.js +2 -0
  35. package/dist/config-validator.js.map +1 -1
  36. package/dist/config.js +2 -0
  37. package/dist/config.js.map +1 -1
  38. package/dist/daemon.d.ts +45 -0
  39. package/dist/daemon.js +342 -19
  40. package/dist/daemon.js.map +1 -1
  41. package/dist/dashboard-permissions.d.ts +15 -4
  42. package/dist/dashboard-permissions.js +49 -23
  43. package/dist/dashboard-permissions.js.map +1 -1
  44. package/dist/fleet-control-audit.d.ts +1 -1
  45. package/dist/fleet-control-audit.js +3 -0
  46. package/dist/fleet-control-audit.js.map +1 -1
  47. package/dist/fleet-manager.d.ts +61 -2
  48. package/dist/fleet-manager.js +421 -28
  49. package/dist/fleet-manager.js.map +1 -1
  50. package/dist/general-knowledge/skills/docker-install/SKILL.md +25 -0
  51. package/dist/general-knowledge/skills/kiro-engine-migration/SKILL.md +10 -0
  52. package/dist/general-knowledge/skills/web-appearance/SKILL.canvas-worker-off.md +28 -0
  53. package/dist/general-knowledge/skills/web-appearance/SKILL.md +28 -0
  54. package/dist/general-knowledge/skills/web-dashboard/SKILL.canvas-worker-off.md +20 -2
  55. package/dist/general-knowledge/skills/web-dashboard/SKILL.md +20 -2
  56. package/dist/instance-config-impact.js +2 -2
  57. package/dist/instance-config-impact.js.map +1 -1
  58. package/dist/instance-lifecycle.d.ts +4 -0
  59. package/dist/instance-lifecycle.js +7 -0
  60. package/dist/instance-lifecycle.js.map +1 -1
  61. package/dist/kiro-migrate.d.ts +11 -0
  62. package/dist/kiro-migrate.js +86 -31
  63. package/dist/kiro-migrate.js.map +1 -1
  64. package/dist/kiro-session-proof.d.ts +41 -0
  65. package/dist/kiro-session-proof.js +89 -0
  66. package/dist/kiro-session-proof.js.map +1 -0
  67. package/dist/kiro-tui-forensic.d.ts +5 -0
  68. package/dist/kiro-tui-forensic.js +3 -3
  69. package/dist/kiro-tui-forensic.js.map +1 -1
  70. package/dist/locale.js +142 -0
  71. package/dist/locale.js.map +1 -1
  72. package/dist/log-service.js +1 -1
  73. package/dist/log-service.js.map +1 -1
  74. package/dist/needs-you.d.ts +3 -1
  75. package/dist/needs-you.js +4 -2
  76. package/dist/needs-you.js.map +1 -1
  77. package/dist/office-share.d.ts +12 -2
  78. package/dist/office-share.js +27 -2
  79. package/dist/office-share.js.map +1 -1
  80. package/dist/outbound-schemas.d.ts +39 -0
  81. package/dist/outbound-schemas.js +29 -0
  82. package/dist/outbound-schemas.js.map +1 -1
  83. package/dist/remote-card-prompt.d.ts +38 -0
  84. package/dist/remote-card-prompt.js +86 -0
  85. package/dist/remote-card-prompt.js.map +1 -0
  86. package/dist/settings-change.js +8 -5
  87. package/dist/settings-change.js.map +1 -1
  88. package/dist/settings-instance-patch.js +1 -1
  89. package/dist/settings-instance-patch.js.map +1 -1
  90. package/dist/tool-permissions.js +17 -0
  91. package/dist/tool-permissions.js.map +1 -1
  92. package/dist/transcript-sources.d.ts +1 -0
  93. package/dist/transcript-sources.js +2 -1
  94. package/dist/transcript-sources.js.map +1 -1
  95. package/dist/types.d.ts +5 -0
  96. package/dist/ui/chat-store.js +3 -2
  97. package/dist/ui/chat-strings.js +2 -2
  98. package/dist/ui/fleet-office-editor.js +54 -2
  99. package/dist/ui/fleet-office-layout.js +44 -7
  100. package/dist/ui/fleet-office-pack.d.ts +9 -3
  101. package/dist/ui/fleet-office-pack.js +117 -19
  102. package/dist/ui/fleet-office-store.js +43 -0
  103. package/dist/ui/fleet-office-zones.js +92 -17
  104. package/dist/ui/fleet-office.js +102 -16
  105. package/dist/ui/panel-chat.js +14 -2
  106. package/dist/ui/panel-log.js +2 -2
  107. package/dist/ui/panel-needs.js +1 -1
  108. package/dist/ui/panel-settings.js +5 -5
  109. package/dist/ui/settings-model.js +17 -9
  110. package/dist/ui/settings-strings.js +2 -0
  111. package/dist/ui/shared/app-i18n.js +2 -2
  112. package/dist/ui/shared/app-stream.js +1 -1
  113. package/dist/ui/shared/app.css +18 -2
  114. package/dist/web-api.d.ts +5 -1
  115. package/dist/web-api.js +91 -3
  116. package/dist/web-api.js.map +1 -1
  117. package/dist/web-office-acts.js +2 -2
  118. package/dist/web-office-acts.js.map +1 -1
  119. package/dist/web-office-pack-read.d.ts +35 -0
  120. package/dist/web-office-pack-read.js +252 -0
  121. package/dist/web-office-pack-read.js.map +1 -0
  122. package/dist/web-office-pack-tools.d.ts +232 -0
  123. package/dist/web-office-pack-tools.js +754 -0
  124. package/dist/web-office-pack-tools.js.map +1 -0
  125. package/dist/web-office-skins.d.ts +68 -4
  126. package/dist/web-office-skins.js +318 -33
  127. package/dist/web-office-skins.js.map +1 -1
  128. package/dist/web-office-store.d.ts +21 -2
  129. package/dist/web-office-store.js +78 -18
  130. package/dist/web-office-store.js.map +1 -1
  131. package/package.json +1 -1
  132. package/templates/windows-shortcuts.ps1 +16 -15
@@ -7,8 +7,16 @@
7
7
  * files: { <src>: { id, bytes, width, height } } } (0600)
8
8
  * <dataDir>/web-office-skins/<pack-id>/<id>.png each picture, metadata stripped; id = sha of the kept bytes
9
9
  *
10
+ * <dataDir>/web-office-skins/<pack-id>/pack.prev.json the version it replaced (#2692: one, for a restore), its pictures
11
+ * beside the current ones'
12
+ * <dataDir>/web-office-skins/.kept-<pack-id>/ a pack deleted keeping its previous version: pack.prev.json and its
13
+ * pictures, out of the pack's own directory (#2694 follow-up) — a
14
+ * host before #2692 skips the name (never an id) and never removes it,
15
+ * so there the id is free to upload again and nothing is left stuck
16
+ *
10
17
  * Directories 0700, files 0600. An upload is written into a hidden directory first and renamed into place whole, so a
11
- * pack is there entirely or not at all; a delete renames it away before removing it. The manifest is checked by the
18
+ * pack is there entirely or not at all; a delete renames it away before removing it. A replace (#2692) writes the new
19
+ * pictures beside the old and swaps pack.json in one rename (put). The manifest is checked by the
12
20
  * page's own module (checkSkinPack) — the page and the host agree on every rule — and then the pictures: each is a PNG
13
21
  * (its signature, IHDR first, walked to IEND), within the per-file and per-pack caps and the side and pixel caps; every
14
22
  * STRIP's picture is exactly frames·w × h; the background and the foreground are 16:9; every file the manifest names is sent and nothing
@@ -27,6 +35,17 @@ export const SKIN_LIMITS = {
27
35
  };
28
36
  /** The most an upload's body may be: every picture's base64 (4/3) plus the manifest and the envelope. */
29
37
  export const SKIN_WIRE_BYTES = Math.ceil((SKIN_LIMITS.packBytes * 4) / 3) + SKIN_LIMITS.manifestBytes + 64 * 1024;
38
+ /**
39
+ * #2692: what the packs may take on disk in all — every pack's pictures and its one kept previous version's (a picture
40
+ * both share counted once): room for 16 full packs and a full previous version of each. Previous versions do not count
41
+ * towards SKIN_LIMITS.packs.
42
+ */
43
+ export const SKIN_DISK_BYTES = 2 * SKIN_LIMITS.packs * SKIN_LIMITS.packBytes;
44
+ /** #2692: a pack's previous version, beside its pack.json (a host before #2692 reads neither the file nor a directory without pack.json). */
45
+ export const PREVIOUS_FILE = "pack.prev.json";
46
+ /** A deleted pack's kept previous version: its own directory, never the pack's (a host before #2692 would find the id taken, yet no pack to delete). */
47
+ export const keptDir = (id) => `.kept-${id}`;
48
+ const KEPT = /^\.kept-([A-Za-z0-9_-]{1,40})$/;
30
49
  const ID = /^[A-Za-z0-9_-]{1,40}$/;
31
50
  const FILE_ID = /^[0-9a-f]{32}$/;
32
51
  /** A file name in a pack: segments of letters, digits, . _ -, never starting with a dot (no "..", no hidden file), .png. */
@@ -169,12 +188,26 @@ function recordOk(raw, dirName) {
169
188
  return { record: { version: 1, id: dirName, name, sha: raw.sha, bytes: Number(raw.bytes) || 0, uploaded_at: Number(raw.uploaded_at) || 0,
170
189
  by: typeof raw.by === "string" ? raw.by : "", manifest: raw.manifest, files }, pack: checked.pack };
171
190
  }
191
+ const summaryOf = (r) => ({ id: r.id, name: r.name, sha: r.sha, bytes: r.bytes, files: Object.keys(r.files).length, uploaded_at: r.uploaded_at });
192
+ /** The pictures a record keeps, by their file id (one id may serve several names). */
193
+ const pictureIds = (r) => new Set(r ? Object.values(r.files).map(f => f.id) : []);
194
+ /** The bytes a pack's directory holds: its pictures, each once, the current and the previous version's together. */
195
+ const dirBytes = (...records) => {
196
+ const seen = new Map();
197
+ for (const r of records)
198
+ if (r)
199
+ for (const f of Object.values(r.files))
200
+ seen.set(f.id, f.bytes);
201
+ return [...seen.values()].reduce((a, b) => a + b, 0);
202
+ };
172
203
  export class OfficeSkinStore {
173
204
  now;
205
+ hooks;
174
206
  state = null;
175
207
  dir;
176
- constructor(dataDir, now = () => Date.now()) {
208
+ constructor(dataDir, now = () => Date.now(), hooks = {}) {
177
209
  this.now = now;
210
+ this.hooks = hooks;
178
211
  this.dir = join(dataDir, "web-office-skins");
179
212
  }
180
213
  load() {
@@ -185,9 +218,19 @@ export class OfficeSkinStore {
185
218
  names = readdirSync(this.dir);
186
219
  }
187
220
  catch (err) {
188
- return (this.state = err.code === "ENOENT" ? { packs: new Map() } : "unreadable");
221
+ return (this.state = err.code === "ENOENT" ? { packs: new Map(), previous: new Map(), away: new Set() } : "unreadable");
189
222
  }
190
- const packs = new Map();
223
+ const packs = new Map(), previous = new Map(), away = new Set(), kept = [], stray = [];
224
+ const read = (dir, file, id = dir) => {
225
+ try {
226
+ const text = readFileSync(join(this.dir, dir, file), "utf8");
227
+ const ok = recordOk(JSON.parse(text), id);
228
+ return ok ? { ...ok, text } : null;
229
+ }
230
+ catch {
231
+ return null;
232
+ }
233
+ };
191
234
  for (const n of names.sort()) {
192
235
  // An upload or a delete a restart cut short: never offered, removed.
193
236
  if (/^\.(?:up|rm)-[0-9a-f]{16}$/.test(n)) {
@@ -197,16 +240,59 @@ export class OfficeSkinStore {
197
240
  catch { /* next time */ }
198
241
  continue;
199
242
  }
200
- if (!ID.test(n) || packs.size >= SKIN_LIMITS.packs)
243
+ const k = KEPT.exec(n);
244
+ if (k) {
245
+ kept.push(k[1]);
246
+ continue;
247
+ }
248
+ if (!ID.test(n))
249
+ continue;
250
+ const prev = read(n, PREVIOUS_FILE);
251
+ // A deleted pack's previous left in the pack's own directory (as #2692 first kept it): moved out below.
252
+ if (prev && !existsSync(join(this.dir, n, "pack.json"))) {
253
+ stray.push(n);
254
+ continue;
255
+ }
256
+ if (prev)
257
+ previous.set(n, prev);
258
+ if (packs.size >= SKIN_LIMITS.packs)
259
+ continue;
260
+ const ok = read(n, "pack.json");
261
+ if (ok)
262
+ packs.set(n, ok);
263
+ }
264
+ for (const n of stray) {
265
+ if (kept.includes(n))
266
+ continue;
267
+ try {
268
+ renameSync(join(this.dir, n), join(this.dir, keptDir(n)));
269
+ kept.push(n);
270
+ }
271
+ catch { /* left as it is: not offered */ }
272
+ }
273
+ for (const id of kept) {
274
+ // The id uploaded again meanwhile (a host before #2692 sees it free): that pack is the one; the old previous goes.
275
+ if (packs.has(id) || existsSync(join(this.dir, id))) {
276
+ if (packs.has(id))
277
+ try {
278
+ rmSync(join(this.dir, keptDir(id)), { recursive: true, force: true });
279
+ }
280
+ catch { /* next time */ }
201
281
  continue;
282
+ }
283
+ // A pack.json there is a deleted version's that a crash left (remove's, or restore's before its rename): never
284
+ // read, and gone before anything renames the directory back as the pack's (#2696 review).
202
285
  try {
203
- const ok = recordOk(JSON.parse(readFileSync(join(this.dir, n, "pack.json"), "utf8")), n);
204
- if (ok)
205
- packs.set(n, ok);
286
+ rmSync(join(this.dir, keptDir(id), "pack.json"), { force: true });
287
+ }
288
+ catch { /* next time; put() removes it too */ }
289
+ const prev = read(keptDir(id), PREVIOUS_FILE, id);
290
+ if (prev) {
291
+ previous.set(id, prev);
292
+ away.add(id);
206
293
  }
207
- catch { /* not a pack */ }
208
294
  }
209
- return (this.state = { packs });
295
+ return (this.state = { packs, previous, away });
210
296
  }
211
297
  readable() { return this.load() !== "unreadable"; }
212
298
  /** A rev that moves with any change (the packs' ids and shas), the same after a restart. */
@@ -214,9 +300,18 @@ export class OfficeSkinStore {
214
300
  /** GET /ui/office-skins: what every viewer's style picker lists. */
215
301
  list() {
216
302
  const s = this.load();
217
- const packs = s === "unreadable" ? [] : [...s.packs.values()].map(({ record: r }) => ({ id: r.id, name: r.name, sha: r.sha, bytes: r.bytes, files: Object.keys(r.files).length, uploaded_at: r.uploaded_at }));
303
+ const packs = s === "unreadable" ? [] : [...s.packs.values()].map(({ record: r }) => summaryOf(r));
218
304
  return { rev: this.rev(), packs, readable: s !== "unreadable", limits: SKIN_LIMITS };
219
305
  }
306
+ /** #2692: each kept pack's record and its previous version's (also a deleted pack's kept previous), for the tools. */
307
+ records() {
308
+ const s = this.load();
309
+ if (s === "unreadable")
310
+ return { packs: [], previous: new Map(), readable: false, diskBytes: 0 };
311
+ const ids = new Set([...s.packs.keys(), ...s.previous.keys()]);
312
+ return { packs: [...s.packs.values()].map(p => p.record), previous: new Map([...s.previous].map(([k, v]) => [k, v.record])), readable: true,
313
+ diskBytes: [...ids].reduce((n, id) => n + dirBytes(s.packs.get(id)?.record, s.previous.get(id)?.record), 0) };
314
+ }
220
315
  /** GET /ui/office-skins/<id>: the manifest as uploaded and each file's picture id; null when there is no such pack. */
221
316
  get(id) {
222
317
  const s = this.load();
@@ -228,6 +323,8 @@ export class OfficeSkinStore {
228
323
  }
229
324
  /** The checked pack (an office's overrides are checked against it), or null. */
230
325
  pack(id) { const s = this.load(); return s === "unreadable" ? null : s.packs.get(id)?.pack ?? null; }
326
+ /** #2692: a pack's kept previous version, checked, or null. */
327
+ previousPack(id) { const s = this.load(); return s === "unreadable" ? null : s.previous.get(id)?.pack ?? null; }
231
328
  /** One picture of a pack, by its id (the sha of its bytes); null when the pack does not have it. */
232
329
  picture(id, file) {
233
330
  const s = this.load();
@@ -241,59 +338,247 @@ export class OfficeSkinStore {
241
338
  return null;
242
339
  }
243
340
  }
244
- /** Keep an upload (POST /ui/office-skins). A pack is immutable: its id taken is a 409 (delete it first). */
341
+ /** Keep an upload (POST /ui/office-skins). A pack the fleet keeps is never replaced here: its id taken is a 409 (delete it first). */
245
342
  add(body, by) {
246
- const s = this.load();
247
- if (s === "unreadable")
343
+ if (this.load() === "unreadable")
248
344
  return refuse(503, "skins_unreadable");
249
345
  const checked = checkSkinUpload(body, by, this.now());
250
346
  if (!checked.ok)
251
347
  return checked;
252
- const r = checked.record;
348
+ const r = this.put(checked, { replace: false });
349
+ return r.ok ? { ok: true, rev: r.rev, pack: r.pack } : r;
350
+ }
351
+ /**
352
+ * Keep a checked upload (#2692: office_pack_upload). `replace`: an id the fleet keeps is replaced in place, its version
353
+ * now kept as the previous one (the one before that is dropped); else that is a 409, as the web upload's. The new
354
+ * pictures go into the pack's directory beside the old (each named by the sha of its bytes), the version being
355
+ * replaced is written as pack.prev.json, and then pack.json is renamed over in one step — the swap. Until it, the old
356
+ * version is what every reader gets; when anything fails before it, the old one stays and pack.prev.json is put back.
357
+ * A new pack is written into a hidden directory and renamed into place whole, as before.
358
+ */
359
+ put(checked, opts) {
360
+ const s = this.load();
361
+ if (s === "unreadable")
362
+ return refuse(503, "skins_unreadable");
363
+ const r = checked.record, current = s.packs.get(r.id), previous = s.previous.get(r.id);
253
364
  // Case-insensitively too: on a case-insensitive disk "Cozy" and "cozy" are one directory.
254
- if ([...s.packs.keys()].some(k => k.toLowerCase() === r.id.toLowerCase()) || existsSync(join(this.dir, r.id)))
365
+ const clash = [...s.packs.keys(), ...s.previous.keys()].find(k => k.toLowerCase() === r.id.toLowerCase() && k !== r.id);
366
+ if (clash)
367
+ return refuse(409, "skin_exists", `"${clash}" is kept already (ids differ only in case)`);
368
+ if (current && !opts.replace)
255
369
  return refuse(409, "skin_exists", `"${r.id}" is kept already: delete it first`);
256
- if (s.packs.size >= SKIN_LIMITS.packs)
370
+ if (!current && s.packs.size >= SKIN_LIMITS.packs)
257
371
  return refuse(409, "skins_quota", `at most ${SKIN_LIMITS.packs} packs`);
258
- const tmp = join(this.dir, `.up-${randomBytes(8).toString("hex")}`);
372
+ const text = JSON.stringify(r, null, 1) + "\n";
373
+ const disk = this.records().diskBytes - dirBytes(current?.record, previous?.record) + dirBytes(r, current?.record ?? previous?.record);
374
+ if (disk > SKIN_DISK_BYTES)
375
+ return refuse(409, "skins_disk_budget", `at most ${SKIN_DISK_BYTES / MiB} MiB on disk, previous versions included: delete a pack (its previous version goes with it)`);
376
+ const home = join(this.dir, r.id);
377
+ if (!current && !previous) {
378
+ if (existsSync(home))
379
+ return refuse(409, "skin_exists", `"${r.id}" is kept already: delete it first`);
380
+ const tmp = join(this.dir, `.up-${randomBytes(8).toString("hex")}`);
381
+ try {
382
+ mkdirSync(this.dir, { recursive: true, mode: 0o700 });
383
+ mkdirSync(tmp, { mode: 0o700 });
384
+ for (const [id, bytes] of checked.pictures)
385
+ writeFileSync(join(tmp, `${id}.png`), bytes, { mode: 0o600, flag: "wx" });
386
+ atomicWriteFileSync(join(tmp, "pack.json"), text, { mode: 0o600 });
387
+ this.hooks.beforeSwap?.(r.id);
388
+ renameSync(tmp, home);
389
+ }
390
+ catch (err) {
391
+ try {
392
+ rmSync(tmp, { recursive: true, force: true });
393
+ }
394
+ catch { /* best effort */ }
395
+ return refuse(503, "skin_write_failed", err.message);
396
+ }
397
+ s.packs.set(r.id, { record: r, pack: checked.pack, text });
398
+ return { ok: true, rev: this.rev(), pack: summaryOf(r), replaced: null };
399
+ }
400
+ // In place: a kept pack replaced, or a deleted one whose previous version was kept (that previous stays: its
401
+ // directory comes back as the pack's first).
402
+ const keep = current ?? previous, written = [], back = !current && s.away.has(r.id);
403
+ if (back) {
404
+ if (existsSync(home))
405
+ return refuse(409, "skin_exists", `"${r.id}" is kept already: delete it first`);
406
+ try {
407
+ rmSync(join(this.dir, keptDir(r.id), "pack.json"), { force: true });
408
+ renameSync(join(this.dir, keptDir(r.id)), home);
409
+ }
410
+ catch (err) {
411
+ return refuse(503, "skin_write_failed", err.message);
412
+ }
413
+ s.away.delete(r.id);
414
+ }
259
415
  try {
260
- mkdirSync(this.dir, { recursive: true, mode: 0o700 });
261
- mkdirSync(tmp, { mode: 0o700 });
262
- for (const [id, bytes] of checked.pictures)
263
- writeFileSync(join(tmp, `${id}.png`), bytes, { mode: 0o600, flag: "wx" });
264
- atomicWriteFileSync(join(tmp, "pack.json"), JSON.stringify(r, null, 1) + "\n", { mode: 0o600 });
265
- renameSync(tmp, join(this.dir, r.id));
416
+ for (const [id, bytes] of checked.pictures) {
417
+ const at = join(home, `${id}.png`);
418
+ if (existsSync(at))
419
+ continue; // the same bytes (named by their sha)
420
+ writeFileSync(at, bytes, { mode: 0o600, flag: "wx" });
421
+ written.push(at);
422
+ }
423
+ if (current)
424
+ atomicWriteFileSync(join(home, PREVIOUS_FILE), current.text, { mode: 0o600 });
425
+ this.hooks.beforeSwap?.(r.id);
426
+ atomicWriteFileSync(join(home, "pack.json"), text, { mode: 0o600 }); // the swap
266
427
  }
267
428
  catch (err) {
268
429
  try {
269
- rmSync(tmp, { recursive: true, force: true });
430
+ if (current) {
431
+ if (previous)
432
+ atomicWriteFileSync(join(home, PREVIOUS_FILE), previous.text, { mode: 0o600 });
433
+ else
434
+ rmSync(join(home, PREVIOUS_FILE), { force: true });
435
+ }
436
+ }
437
+ catch { /* read back as it is */ }
438
+ for (const at of written) {
439
+ try {
440
+ rmSync(at, { force: true });
441
+ }
442
+ catch { /* removed with the pack */ }
443
+ }
444
+ if (back) {
445
+ try {
446
+ renameSync(home, join(this.dir, keptDir(r.id)));
447
+ s.away.add(r.id);
448
+ }
449
+ catch { /* moved out on the next load */ }
270
450
  }
271
- catch { /* best effort */ }
272
451
  return refuse(503, "skin_write_failed", err.message);
273
452
  }
274
- s.packs.set(r.id, { record: r, pack: checked.pack });
275
- return { ok: true, rev: this.rev(), pack: { id: r.id, name: r.name, sha: r.sha, bytes: r.bytes, files: Object.keys(r.files).length, uploaded_at: r.uploaded_at } };
453
+ s.packs.set(r.id, { record: r, pack: checked.pack, text });
454
+ if (current)
455
+ s.previous.set(r.id, current);
456
+ this.sweep(home, r, current ? current.record : keep.record);
457
+ return { ok: true, rev: this.rev(), pack: summaryOf(r), replaced: current ? summaryOf(current.record) : null };
458
+ }
459
+ /** Remove the pictures of a pack's directory (`dir`) that neither its current nor its previous version names. */
460
+ sweep(dir, ...keep) {
461
+ const ids = new Set(keep.flatMap(r => [...pictureIds(r)]));
462
+ let names = [];
463
+ try {
464
+ names = readdirSync(dir);
465
+ }
466
+ catch {
467
+ return;
468
+ }
469
+ for (const n of names)
470
+ if (/^[0-9a-f]{32}\.png$/.test(n) && !ids.has(n.slice(0, 32))) {
471
+ try {
472
+ rmSync(join(dir, n), { force: true });
473
+ }
474
+ catch { /* next time */ }
475
+ }
276
476
  }
277
- /** Remove a pack (DELETE /ui/office-skins/<id>). Offices naming it are drawn in a built-in style until it is back. */
278
- remove(id) {
477
+ /**
478
+ * #2692: bring back a pack's previous version. The version it replaces becomes the previous one (a restore is undone
479
+ * the same way); a deleted pack whose previous was kept comes back with none. pack.json is renamed over in one step.
480
+ */
481
+ restore(id) {
279
482
  const s = this.load();
280
483
  if (s === "unreadable")
281
484
  return refuse(503, "skins_unreadable");
282
- if (!ID.test(id) || !s.packs.has(id))
485
+ const previous = ID.test(id) ? s.previous.get(id) : undefined, current = s.packs.get(id);
486
+ if (!previous)
487
+ return refuse(404, "skin_no_previous", `"${id}" has no previous version kept`);
488
+ if (!current && s.packs.size >= SKIN_LIMITS.packs)
489
+ return refuse(409, "skins_quota", `at most ${SKIN_LIMITS.packs} packs`);
490
+ const home = join(this.dir, id);
491
+ if (!current && s.away.has(id)) {
492
+ // A deleted pack's kept previous: its pack.json written in its own directory, which then becomes the pack's in one rename.
493
+ const away = join(this.dir, keptDir(id));
494
+ if (existsSync(home))
495
+ return refuse(409, "skin_exists", `"${id}" is kept already: delete it first`);
496
+ try {
497
+ this.hooks.beforeSwap?.(id);
498
+ atomicWriteFileSync(join(away, "pack.json"), previous.text, { mode: 0o600 });
499
+ renameSync(away, home); // the swap
500
+ }
501
+ catch (err) {
502
+ try {
503
+ rmSync(join(away, "pack.json"), { force: true });
504
+ }
505
+ catch { /* not read in a kept directory */ }
506
+ return refuse(503, "skin_write_failed", err.message);
507
+ }
508
+ s.away.delete(id);
509
+ }
510
+ else {
511
+ try {
512
+ this.hooks.beforeSwap?.(id);
513
+ atomicWriteFileSync(join(home, "pack.json"), previous.text, { mode: 0o600 }); // the swap
514
+ }
515
+ catch (err) {
516
+ return refuse(503, "skin_write_failed", err.message);
517
+ }
518
+ }
519
+ try {
520
+ if (current)
521
+ atomicWriteFileSync(join(home, PREVIOUS_FILE), current.text, { mode: 0o600 });
522
+ else
523
+ rmSync(join(home, PREVIOUS_FILE), { force: true });
524
+ }
525
+ catch { /* the previous file still names the restored version: restoring again changes nothing */ }
526
+ s.packs.set(id, previous);
527
+ if (current)
528
+ s.previous.set(id, current);
529
+ else
530
+ s.previous.delete(id);
531
+ return { ok: true, rev: this.rev(), pack: summaryOf(previous.record), replaced: current ? summaryOf(current.record) : null };
532
+ }
533
+ /**
534
+ * Remove a pack (DELETE /ui/office-skins/<id>). Offices naming it are drawn in a built-in style until it is back. Its
535
+ * previous version goes with it — unless `keepPrevious` (#2692), which removes only the current one, so a restore can
536
+ * bring the previous back: the pack's directory is renamed to keptDir(id) at once (gone for every reader, an older
537
+ * host's too, the id free there), then its pack.json and the current version's own pictures are removed. A deleted
538
+ * pack's kept previous is removed by deleting it again.
539
+ */
540
+ remove(id, opts = {}) {
541
+ const s = this.load();
542
+ if (s === "unreadable")
543
+ return refuse(503, "skins_unreadable");
544
+ const current = ID.test(id) ? s.packs.get(id) : undefined, previous = ID.test(id) ? s.previous.get(id) : undefined;
545
+ if (!current && !previous)
283
546
  return refuse(404, "skin_unknown");
547
+ if (opts.keepPrevious && previous && current) {
548
+ const away = join(this.dir, keptDir(id));
549
+ try {
550
+ rmSync(away, { recursive: true, force: true });
551
+ renameSync(join(this.dir, id), away);
552
+ }
553
+ catch (err) {
554
+ return refuse(503, "skin_write_failed", err.message);
555
+ }
556
+ try {
557
+ rmSync(join(away, "pack.json"), { force: true });
558
+ }
559
+ catch { /* never read in a kept directory */ }
560
+ s.packs.delete(id);
561
+ s.away.add(id);
562
+ this.sweep(away, previous.record);
563
+ return { ok: true, rev: this.rev(), removed: summaryOf(current.record), previous_kept: true };
564
+ }
565
+ if (opts.keepPrevious && !current)
566
+ return refuse(404, "skin_unknown", `"${id}" is deleted already; its previous version is kept`);
284
567
  const gone = join(this.dir, `.rm-${randomBytes(8).toString("hex")}`);
285
568
  try {
286
- renameSync(join(this.dir, id), gone);
569
+ renameSync(join(this.dir, current ? id : keptDir(id)), gone);
287
570
  }
288
571
  catch (err) {
289
572
  return refuse(503, "skin_write_failed", err.message);
290
573
  }
291
574
  s.packs.delete(id);
575
+ s.previous.delete(id);
576
+ s.away.delete(id);
292
577
  try {
293
578
  rmSync(gone, { recursive: true, force: true });
294
579
  }
295
580
  catch { /* removed on the next load */ }
296
- return { ok: true, rev: this.rev() };
581
+ return { ok: true, rev: this.rev(), removed: current ? summaryOf(current.record) : null, previous_kept: false };
297
582
  }
298
583
  }
299
584
  //# sourceMappingURL=web-office-skins.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"web-office-skins.js","sourceRoot":"","sources":["../src/web-office-skins.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"web-office-skins.js","sourceRoot":"","sources":["../src/web-office-skins.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC9G,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAoB,MAAM,2BAA2B,CAAC;AAEzG,MAAM,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AACxB,oGAAoG;AACpG,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,GAAG,GAAG,EAAE,SAAS,EAAE,EAAE,GAAG,GAAG,EAAE,aAAa,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG;CAClI,CAAC;AACX,yGAAyG;AACzG,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC;AAClH;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAG,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC;AAC7E,6IAA6I;AAC7I,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAgB,CAAC;AAC9C,wJAAwJ;AACxJ,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC;AACrD,MAAM,IAAI,GAAG,gCAAgC,CAAC;AAE9C,MAAM,EAAE,GAAG,uBAAuB,CAAC;AACnC,MAAM,OAAO,GAAG,gBAAgB,CAAC;AACjC,4HAA4H;AAC5H,MAAM,OAAO,GAAG,gCAAgC,CAAC;AACjD,MAAM,OAAO,GAAG,uBAAuB,CAAC;AACxC,MAAM,GAAG,GAAG,wBAAwB,CAAC;AAWrC,MAAM,MAAM,GAAG,CAAC,CAAsB,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACrG,MAAM,KAAK,GAAG,CAAC,CAAU,EAAgC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC9G,MAAM,MAAM,GAAG,CAAC,MAA6B,EAAE,KAAa,EAAE,MAAe,EAAe,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAE7J,iHAAiH;AACjH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5F,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,OAAO,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;AAC3F,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,KAAiB;IAC9D,IAAI,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC,SAAS;QAAE,OAAO,MAAM,CAAC,GAAG,EAAE,qBAAqB,EAAE,GAAG,IAAI,aAAa,WAAW,CAAC,SAAS,GAAG,GAAG,MAAM,CAAC,CAAC;IAC3I,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,KAAK;QAAE,OAAO,MAAM,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,IAAI,6BAA6B,CAAC,CAAC;IAC1G,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACrC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC,GAAG,EAAE,qBAAqB,EAAE,GAAG,IAAI,WAAW,CAAC,CAAC;IAC9G,IAAI,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;QACrH,OAAO,MAAM,CAAC,GAAG,EAAE,qBAAqB,EAAE,GAAG,IAAI,aAAa,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC,CAAC;IAC3G,CAAC;IACD,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,MAAM,CAAC,GAAG,EAAE,qBAAqB,EAAE,GAAG,IAAI,iCAAiC,CAAC,CAAC;IAC/F,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AACvF,CAAC;AAED,gIAAgI;AAChI,SAAS,UAAU,CAAC,IAAiB,EAAE,KAAqD;IAC1F,KAAK,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,OAAO,MAAM,CAAC,GAAG,EAAE,uBAAuB,EAAE,GAAG,EAAE,KAAK,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,wBAAwB,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,iBAAiB,CAAC,CAAC;QACvK,CAAC;IACH,CAAC;IACD,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpE,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,eAAe,IAAI,CAAC,UAAU,OAAO,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,sBAAsB,CAAC,CAAC;IAC1K,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpE,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,eAAe,IAAI,CAAC,UAAU,OAAO,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,sBAAsB,CAAC,CAAC;IAC1K,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAa,EAAE,EAAU,EAAE,GAAW;IACpE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC,GAAG,EAAE,cAAc,EAAE,uCAAuC,CAAC,CAAC;IAC9F,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,GAAG,EAAE,cAAc,EAAE,gBAAgB,KAAK,GAAG,CAAC,CAAC;IACtF,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC;IAC3D,IAAI,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,WAAW,CAAC,aAAa;QAAE,OAAO,MAAM,CAAC,GAAG,EAAE,yBAAyB,EAAE,WAAW,WAAW,CAAC,aAAa,GAAG,IAAI,MAAM,CAAC,CAAC;IAClK,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,MAAM,CAAC,GAAG,EAAE,uBAAuB,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5E,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;IACnB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,MAAM,CAAC,GAAG,EAAE,cAAc,EAAE,WAAW,WAAW,CAAC,IAAI,aAAa,CAAC,CAAC;QAC9M,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,KAAK,MAAM,GAAG,IAAI,KAAK;QAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;YAAE,OAAO,MAAM,CAAC,GAAG,EAAE,gBAAgB,EAAE,GAAG,GAAG,sEAAsE,CAAC,CAAC;IACtK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,GAAG,EAAE,cAAc,EAAE,kCAAkC,CAAC,CAAC;IAC/F,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,KAAK;QAAE,OAAO,MAAM,CAAC,GAAG,EAAE,qBAAqB,EAAE,WAAW,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/G,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;YAAE,OAAO,MAAM,CAAC,GAAG,EAAE,gBAAgB,EAAE,GAAG,GAAG,sEAAsE,CAAC,CAAC;QAC7I,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,MAAM,CAAC,GAAG,EAAE,kBAAkB,EAAE,GAAG,GAAG,iCAAiC,CAAC,CAAC;IAC5G,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,MAAM,CAAC,GAAG,EAAE,mBAAmB,EAAE,GAAG,GAAG,mCAAmC,CAAC,CAAC;IACrI,MAAM,KAAK,GAA6B,EAAE,EAAE,QAAQ,GAAG,IAAI,GAAG,EAAkB,EAAE,KAAK,GAAG,IAAI,GAAG,EAA6C,CAAC;IAC/I,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACjC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,MAAM,CAAC,GAAG,EAAE,cAAc,EAAE,SAAS,GAAG,UAAU,CAAC,CAAC;QAClI,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;YAAE,OAAO,MAAM,CAAC,GAAG,EAAE,qBAAqB,EAAE,GAAG,GAAG,aAAa,WAAW,CAAC,SAAS,GAAG,GAAG,MAAM,CAAC,CAAC;QACjK,MAAM,GAAG,GAAG,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,GAAG,CAAC;QACxB,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QACzB,IAAI,KAAK,GAAG,WAAW,CAAC,SAAS;YAAE,OAAO,MAAM,CAAC,GAAG,EAAE,gBAAgB,EAAE,WAAW,WAAW,CAAC,SAAS,GAAG,GAAG,aAAa,CAAC,CAAC;QAC7H,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5B,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;QAClF,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3B,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACpC,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC;IACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAA4B,CAAC;IACrE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9H,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC3I,CAAC;AAED,oGAAoG;AACpG,SAAS,QAAQ,CAAC,GAAY,EAAE,OAAe;IAC7C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,OAAO,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACjI,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACjF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAiC,EAAE,KAAK,GAAG,IAAI,GAAG,EAA6C,CAAC;IAClH,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAC5D,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,GAAG,CAAW,KAAK,EAAE,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;QACzL,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;IACzH,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;YACtI,EAAE,EAAE,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAmC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;AACnI,CAAC;AAQD,MAAM,SAAS,GAAG,CAAC,CAAa,EAAe,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC3K,sFAAsF;AACtF,MAAM,UAAU,GAAG,CAAC,CAAyB,EAAe,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACvH,oHAAoH;AACpH,MAAM,QAAQ,GAAG,CAAC,GAAG,OAAsC,EAAU,EAAE;IACrE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,OAAO;QAAE,IAAI,CAAC;YAAE,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;gBAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IAChG,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACvD,CAAC,CAAC;AAIF,MAAM,OAAO,eAAe;IAGoB,GAAG;IAAoD,KAAK;IAFlG,KAAK,GAAiB,IAAI,CAAC;IAC1B,GAAG,CAAS;IACrB,YAAY,OAAe,EAAmB,GAAG,GAAiB,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAmB,KAAK,GAAmB,EAAE;mBAAjF,GAAG;qBAAoD,KAAK;QAAyB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;IAAC,CAAC;IAE1K,IAAI;QACV,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QAClC,IAAI,KAAe,CAAC;QACpB,IAAI,CAAC;YAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;QACtC,OAAO,GAAG,EAAE,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,KAAK,GAAI,GAA6B,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAAC,CAAC;QACnK,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgB,EAAE,QAAQ,GAAG,IAAI,GAAG,EAAgB,EAAE,IAAI,GAAG,IAAI,GAAG,EAAU,EAAE,IAAI,GAAa,EAAE,EAAE,KAAK,GAAa,EAAE,CAAC;QAC/I,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,IAAY,EAAE,EAAE,GAAG,GAAG,EAAe,EAAE;YAChE,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC7D,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC1C,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACrC,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO,IAAI,CAAC;YAAC,CAAC;QAC1B,CAAC,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAC7B,qEAAqE;YACrE,IAAI,4BAA4B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAC,IAAI,CAAC;oBAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YACtJ,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,EAAE,CAAC;gBAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YACtC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,SAAS;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;YACpC,wGAAwG;YACxG,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;gBAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YACrF,IAAI,IAAI;gBAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAChC,IAAI,KAAK,CAAC,IAAI,IAAI,WAAW,CAAC,KAAK;gBAAE,SAAS;YAC9C,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YAChC,IAAI,EAAE;gBAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3B,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,SAAS;YAC/B,IAAI,CAAC;gBAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,gCAAgC,CAAC,CAAC;QAC7H,CAAC;QACD,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;YACtB,mHAAmH;YACnH,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;gBAAC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;oBAAE,IAAI,CAAC;wBAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YAC9L,+GAA+G;YAC/G,0FAA0F;YAC1F,IAAI,CAAC;gBAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,qCAAqC,CAAC,CAAC;YAC1H,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;YAClD,IAAI,IAAI,EAAE,CAAC;gBAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAAC,CAAC;QACrD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,QAAQ,KAAc,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,YAAY,CAAC,CAAC,CAAC;IAC5D,4FAA4F;IAC5F,GAAG,KAAa,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3K,oEAAoE;IACpE,IAAI;QACF,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACnG,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,KAAK,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACvF,CAAC;IACD,sHAAsH;IACtH,OAAO;QACL,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,KAAK,YAAY;YAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;QACjG,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/D,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI;YACzI,SAAS,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAClH,CAAC;IACD,uHAAuH;IACvH,GAAG,CAAC,EAAU;QACZ,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACpB,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;QACnB,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACjL,CAAC;IACD,gFAAgF;IAChF,IAAI,CAAC,EAAU,IAAwB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC;IACjI,+DAA+D;IAC/D,YAAY,CAAC,EAAU,IAAwB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC;IAC5I,oGAAoG;IACpG,OAAO,CAAC,EAAU,EAAE,IAAY;QAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACtG,IAAI,CAAC;YAAC,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;IACxF,CAAC;IAED,sIAAsI;IACtI,GAAG,CAAC,IAAa,EAAE,EAAU;QAC3B,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,YAAY;YAAE,OAAO,MAAM,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;QACzE,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,OAAO,CAAC,EAAE;YAAE,OAAO,OAAO,CAAC;QAChC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED;;;;;;;OAOG;IACH,GAAG,CAAC,OAA2C,EAAE,IAA0B;QACzE,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,KAAK,YAAY;YAAE,OAAO,MAAM,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;QAC/D,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACvF,0FAA0F;QAC1F,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACxH,IAAI,KAAK;YAAE,OAAO,MAAM,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,KAAK,6CAA6C,CAAC,CAAC;QACrG,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,MAAM,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC,EAAE,oCAAoC,CAAC,CAAC;QAC9G,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,WAAW,CAAC,KAAK;YAAE,OAAO,MAAM,CAAC,GAAG,EAAE,aAAa,EAAE,WAAW,WAAW,CAAC,KAAK,QAAQ,CAAC,CAAC;QAC3H,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,CAAC,CAAC;QACvI,IAAI,IAAI,GAAG,eAAe;YAAE,OAAO,MAAM,CAAC,GAAG,EAAE,mBAAmB,EAAE,WAAW,eAAe,GAAG,GAAG,6FAA6F,CAAC,CAAC;QACnM,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1B,IAAI,UAAU,CAAC,IAAI,CAAC;gBAAE,OAAO,MAAM,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC,EAAE,oCAAoC,CAAC,CAAC;YACtG,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACpE,IAAI,CAAC;gBACH,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBACtD,SAAS,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBAChC,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ;oBAAE,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBACtH,mBAAmB,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBACnE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC9B,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACxB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC;oBAAC,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;gBAClF,OAAO,MAAM,CAAC,GAAG,EAAE,mBAAmB,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;YAClE,CAAC;YACD,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC3E,CAAC;QACD,6GAA6G;QAC7G,6CAA6C;QAC7C,MAAM,IAAI,GAAG,OAAO,IAAI,QAAS,EAAE,OAAO,GAAa,EAAE,EAAE,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/F,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,UAAU,CAAC,IAAI,CAAC;gBAAE,OAAO,MAAM,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC,EAAE,oCAAoC,CAAC,CAAC;YACtG,IAAI,CAAC;gBAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAAC,CAAC;YAC7H,OAAO,GAAG,EAAE,CAAC;gBAAC,OAAO,MAAM,CAAC,GAAG,EAAE,mBAAmB,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;YAAC,CAAC;YAChF,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACtB,CAAC;QACD,IAAI,CAAC;YACH,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAC3C,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;gBACnC,IAAI,UAAU,CAAC,EAAE,CAAC;oBAAE,SAAS,CAAiD,sCAAsC;gBACpH,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBACtD,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnB,CAAC;YACD,IAAI,OAAO;gBAAE,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC3F,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9B,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAgB,WAAW;QACjG,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC;gBAAC,IAAI,OAAO,EAAE,CAAC;oBAAC,IAAI,QAAQ;wBAAE,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;;wBAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,wBAAwB,CAAC,CAAC;YAClN,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;gBAAC,IAAI,CAAC;oBAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,2BAA2B,CAAC,CAAC;YAAC,CAAC;YACxG,IAAI,IAAI,EAAE,CAAC;gBAAC,IAAI,CAAC;oBAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,gCAAgC,CAAC,CAAC;YAAC,CAAC;YACnI,OAAO,MAAM,CAAC,GAAG,EAAE,mBAAmB,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;QAClE,CAAC;QACD,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,IAAI,OAAO;YAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5D,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACjH,CAAC;IAED,iHAAiH;IACzG,KAAK,CAAC,GAAW,EAAE,GAAG,IAAmC;QAC/D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,IAAI,KAAK,GAAa,EAAE,CAAC;QACzB,IAAI,CAAC;YAAC,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO;QAAC,CAAC;QACnD,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;gBAAC,IAAI,CAAC;oBAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;YAAC,CAAC;IACpK,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,EAAU;QAChB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,KAAK,YAAY;YAAE,OAAO,MAAM,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzF,IAAI,CAAC,QAAQ;YAAE,OAAO,MAAM,CAAC,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,gCAAgC,CAAC,CAAC;QAC9F,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,WAAW,CAAC,KAAK;YAAE,OAAO,MAAM,CAAC,GAAG,EAAE,aAAa,EAAE,WAAW,WAAW,CAAC,KAAK,QAAQ,CAAC,CAAC;QAC3H,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC/B,2HAA2H;YAC3H,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;YACzC,IAAI,UAAU,CAAC,IAAI,CAAC;gBAAE,OAAO,MAAM,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,oCAAoC,CAAC,CAAC;YACpG,IAAI,CAAC;gBACH,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC5B,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC7E,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAA6D,WAAW;YACjG,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC;oBAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,kCAAkC,CAAC,CAAC;gBACtG,OAAO,MAAM,CAAC,GAAG,EAAE,mBAAmB,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;YAClE,CAAC;YACD,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC;gBACH,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC5B,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAO,WAAW;YACjG,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBAAC,OAAO,MAAM,CAAC,GAAG,EAAE,mBAAmB,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;YAAC,CAAC;QACpF,CAAC;QACD,IAAI,CAAC;YAAC,IAAI,OAAO;gBAAE,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;;gBAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAAC,CAAC;QAC5J,MAAM,CAAC,CAAC,yFAAyF,CAAC,CAAC;QACnG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC1B,IAAI,OAAO;YAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;;YAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/H,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,EAAU,EAAE,IAAI,GAA+B,EAAE;QACtD,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,KAAK,YAAY;YAAE,OAAO,MAAM,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACnH,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;YAAE,OAAO,MAAM,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC9D,IAAI,IAAI,CAAC,YAAY,IAAI,QAAQ,IAAI,OAAO,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;YACzC,IAAI,CAAC;gBAAC,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAAC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBAAC,OAAO,MAAM,CAAC,GAAG,EAAE,mBAAmB,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;YAAC,CAAC;YAC9K,IAAI,CAAC;gBAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,oCAAoC,CAAC,CAAC;YACxG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YAClC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QAChG,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,OAAO;YAAE,OAAO,MAAM,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,oDAAoD,CAAC,CAAC;QAClI,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC;YAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAAC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YAAC,OAAO,MAAM,CAAC,GAAG,EAAE,mBAAmB,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;QAAC,CAAC;QACtJ,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC;YAAC,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,8BAA8B,CAAC,CAAC;QAChG,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;IAClH,CAAC;CACF"}
@@ -58,6 +58,21 @@ export type OfficeWrite = {
58
58
  };
59
59
  /** A whole list of offices, as a person sends it: every rule, or a refusal naming where it broke. */
60
60
  export declare function checkOffices(raw: unknown, packOf?: OverridePack): OfficeCheck;
61
+ /** The overrides parts kept beside the offices on disk, apart from the rest (#2665 night places, #2691 seat reservations). */
62
+ declare const BESIDE: readonly ["furnitureNight", "seatFor"];
63
+ type Beside = (typeof BESIDE)[number];
64
+ type OnDisk = {
65
+ offices: Office[];
66
+ overrides?: Record<string, LayoutOverrides>;
67
+ } & {
68
+ [K in Beside]?: Record<string, NonNullable<LayoutOverrides[K]>>;
69
+ };
70
+ /**
71
+ * #2665/#2706: what goes on disk — the offices without their overrides; beside them, by office id, each office's
72
+ * overrides without those parts, and each part on its own (none: no key). The maps have no prototype (#2708 review), so
73
+ * an id is always an own key; exported for tests.
74
+ */
75
+ export declare function officesOnDisk(offices: Office[]): OnDisk;
61
76
  export declare class OfficeStore {
62
77
  private readonly packOf?;
63
78
  private state;
@@ -75,9 +90,12 @@ export declare class OfficeStore {
75
90
  };
76
91
  /**
77
92
  * Replace every stored office (PUT /ui/offices). `expectedRev`: the rev the page last read — another change since is a
78
- * 409, so two editors never overwrite each other unseen. On disk first, then in memory.
93
+ * 409, so two editors never overwrite each other unseen. On disk first, then in memory. `packOf` (#2692): the packs to
94
+ * check the overrides against in place of the kept ones (a pack about to replace one; or none, to put back as it was).
79
95
  */
80
- replace(raw: unknown, expectedRev?: number): OfficeWrite;
96
+ replace(raw: unknown, expectedRev?: number, opts?: {
97
+ packOf?: OverridePack;
98
+ }): OfficeWrite;
81
99
  }
82
100
  /**
83
101
  * Office review (#2399 carry): how often one person may save the offices (PUT /ui/offices). An editor saves on an explicit
@@ -108,3 +126,4 @@ export declare class OfficeWriteLimiter {
108
126
  /** Count an accepted save. */
109
127
  record(person: string): void;
110
128
  }
129
+ export {};