@arcblock/did-connect-service 4.1.59 → 4.1.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/og/worker.js CHANGED
@@ -1,11 +1,13 @@
1
1
  import stringify from "fast-json-stable-stringify";
2
2
  import satori from "satori/standalone";
3
3
  import { consoleLogger } from "../logger.js";
4
- import { ogFontSha256, ogSubsetFontKey, ogSubsetFontSets, ogTreeCoveredBySubset, } from "./font-subset.js";
4
+ import { OG_CJK_FALLBACK_PREFERENCE, ogFallbackIgnorable, ogFontSetBytes, ogFontSetFits, planOgFontFallbacks, } from "./font-fallback.js";
5
+ import { collectOgTreeCodepoints, ogFontSha256, ogFullFontMaps, ogSubsetCovers, ogSubsetFontKey, ogSubsetFontSets, } from "./font-subset.js";
5
6
  import { initializeRendererWasm, Resvg } from "./resvg-runtime.js";
6
7
  import { prepareOgRender } from "./shared.js";
7
8
  import { getTemplate } from "./templates.js";
8
9
  import { createSerialQueue, OG_RENDER_UNAVAILABLE_CODES, OG_TREE_ERROR_CODES, OgRenderUnavailableError, OgTreeRenderError, ogImageMime, prepareOgTree, sniffOgImageKind, wantsBold, withTimeout, } from "./tree.js";
10
+ export { OG_CJK_FALLBACK_PREFERENCE, OG_FONT_RENDER_BUDGET_BYTES } from "./font-fallback.js";
9
11
  export { OG_SUBSET_FONTS, OG_SUBSET_PREFIX } from "./font-subset.js";
10
12
  export { inspectOgImage, OG_RENDER_UNAVAILABLE_CODES, OG_TREE_ERROR_CODES, OG_TREE_FONT_FAMILY, OG_TREE_LIMITS, OgRenderUnavailableError, OgTreeRenderError, sniffOgImageKind, validateOgTree, } from "./tree.js";
11
13
  /** Default deadline for one font object read from the bucket. */
@@ -34,9 +36,28 @@ export const OG_WORKER_BOLD_FONT_KEYS = {
34
36
  const TRANSPARENT_PNG_DATA_URI = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=";
35
37
  const CACHE_ORIGIN = "https://og-cache.invalid";
36
38
  let wasmInitialization;
37
- let fontSlot;
39
+ /**
40
+ * Raw font bytes kept between renders (ArcBlock/did#300, arc#8832): an LRU of
41
+ * font objects by bucket key, bounded by {@link OG_WORKER_FONT_CACHE_BYTES}.
42
+ * A render may need more than one family (its locale's primary plus
43
+ * cross-script fallbacks, `font-fallback.ts`), so the cache is keyed by object,
44
+ * not by locale. The least recently used objects are dropped once the resident
45
+ * total exceeds the budget; a different bucket clears it. Objects that are
46
+ * missing (or fail their sha256 check) are remembered as `null` for
47
+ * {@link MISSING_RECHECK_MS}, then probed again.
48
+ *
49
+ * Parsed fonts are never kept: each render hands satori fresh copies (see
50
+ * `font-subset.ts` for why a resident parse would grow without bound).
51
+ */
52
+ export const OG_WORKER_FONT_CACHE_BYTES = 20 * 1024 * 1024;
53
+ const MISSING_RECHECK_MS = 5 * 60_000;
54
+ let cacheBucket;
55
+ const fontCache = new Map();
56
+ /** Locale of the most recent render (for {@link getOgWorkerFontCacheStats}). */
57
+ let lastLocale;
38
58
  let boldMissingWarned = false;
39
59
  let subsetMissingWarned = false;
60
+ let fallbackMissingWarned = false;
40
61
  /** Every satori + resvg pass in this isolate runs through this FIFO queue. */
41
62
  const serialRender = createSerialQueue();
42
63
  export function normalizeOgLocale(locale) {
@@ -70,39 +91,67 @@ export function resetOgWorkerWasmForTesting() {
70
91
  function readFontObject(bucket, key, timeoutMs) {
71
92
  return withTimeout(bucket.get(key).then(async (object) => (object ? new Uint8Array(await object.arrayBuffer()) : null)), timeoutMs, () => new OgRenderUnavailableError(OG_RENDER_UNAVAILABLE_CODES.fontTimeout, `font read exceeded ${timeoutMs}ms`));
72
93
  }
73
- function slotFor(bucket, locale) {
74
- if (fontSlot && fontSlot.bucket === bucket && fontSlot.locale === locale)
75
- return fontSlot;
76
- fontSlot = { bucket, locale };
77
- return fontSlot;
94
+ function evictOver(keep) {
95
+ let total = 0;
96
+ for (const entry of fontCache.values())
97
+ total += entry.bytes;
98
+ for (const [key, entry] of fontCache) {
99
+ if (total <= OG_WORKER_FONT_CACHE_BYTES)
100
+ break;
101
+ if (key === keep || entry.bytes === 0)
102
+ continue;
103
+ fontCache.delete(key);
104
+ total -= entry.bytes;
105
+ }
78
106
  }
79
- /** Caches `load()` in `slot[field]`; a rejection clears it so the next render retries. */
80
- function memo(slot, field, load) {
81
- let pending = slot[field];
82
- if (!pending) {
83
- const created = load();
84
- created.catch(() => {
85
- if (slot[field] === created)
86
- slot[field] = undefined;
87
- });
88
- slot[field] = created;
89
- pending = created;
107
+ /** `load()` through the LRU; a rejection is not cached, so the next render retries. */
108
+ function cachedFont(bucket, key, load) {
109
+ if (cacheBucket !== bucket) {
110
+ fontCache.clear();
111
+ cacheBucket = bucket;
112
+ }
113
+ const hit = fontCache.get(key);
114
+ fontCache.delete(key);
115
+ if (hit && (hit.missingAt === undefined || Date.now() - hit.missingAt < MISSING_RECHECK_MS)) {
116
+ fontCache.set(key, hit); // most recently used
117
+ return hit.promise;
90
118
  }
91
- return pending;
119
+ const entry = { promise: Promise.resolve(null), bytes: 0 };
120
+ entry.promise = load().then((bytes) => {
121
+ if (fontCache.get(key) === entry) {
122
+ if (bytes) {
123
+ entry.bytes = bytes.byteLength;
124
+ evictOver(key);
125
+ }
126
+ else {
127
+ entry.missingAt = Date.now();
128
+ }
129
+ }
130
+ return bytes;
131
+ });
132
+ entry.promise.catch(() => {
133
+ if (fontCache.get(key) === entry)
134
+ fontCache.delete(key);
135
+ });
136
+ fontCache.set(key, entry);
137
+ return entry.promise;
138
+ }
139
+ /** A full font object, or `null` when it is missing from the bucket. */
140
+ function loadFullObject(bucket, key, timeoutMs) {
141
+ return cachedFont(bucket, key, () => readFontObject(bucket, key, timeoutMs));
92
142
  }
93
- /** Full Regular bytes for `locale`, from the single-locale slot. */
94
- function loadRegularFont(bucket, locale, timeoutMs) {
143
+ /** Full Regular bytes for `locale` (the primary: missing is an error). */
144
+ async function loadRegularFont(bucket, locale, timeoutMs) {
95
145
  const key = OG_WORKER_FONT_KEYS[locale];
96
- return memo(slotFor(bucket, locale), "regular", () => readFontObject(bucket, key, timeoutMs).then((bytes) => {
97
- if (!bytes)
98
- throw new Error(`OG font unavailable: ${key}`);
99
- return bytes;
100
- }));
146
+ const bytes = await loadFullObject(bucket, key, timeoutMs);
147
+ if (!bytes)
148
+ throw new Error(`OG font unavailable: ${key}`);
149
+ return bytes;
101
150
  }
102
151
  /** Full Bold bytes for `locale`, or `null` (warned once per isolate) when the object is missing. */
103
152
  async function loadBoldFont(bucket, locale, logger, timeoutMs) {
104
153
  const key = OG_WORKER_BOLD_FONT_KEYS[locale];
105
- const bytes = await memo(slotFor(bucket, locale), "bold", () => readFontObject(bucket, key, timeoutMs));
154
+ const bytes = await loadFullObject(bucket, key, timeoutMs);
106
155
  if (!bytes && !boldMissingWarned) {
107
156
  boldMissingWarned = true;
108
157
  logger.warn({
@@ -115,84 +164,177 @@ async function loadBoldFont(bucket, locale, logger, timeoutMs) {
115
164
  return bytes;
116
165
  }
117
166
  /** One subset object, or `null` when it is missing or not the build's bytes (warned once per isolate). */
118
- async function readSubsetObject(bucket, file, locale, logger, timeoutMs) {
167
+ function loadSubsetObject(bucket, file, locale, logger, timeoutMs) {
119
168
  const key = ogSubsetFontKey(file.file);
120
- const bytes = await readFontObject(bucket, key, timeoutMs);
121
- const reason = !bytes ? "missing" : (await ogFontSha256(bytes)) !== file.sha256 ? "sha256 mismatch" : undefined;
122
- if (!reason)
123
- return bytes;
124
- if (!subsetMissingWarned) {
125
- subsetMissingWarned = true;
126
- logger.warn({ message: `[og] subset font ${reason}; rendering with the full font`, mod: "og", key, locale });
127
- }
128
- return null;
169
+ return cachedFont(bucket, key, async () => {
170
+ const bytes = await readFontObject(bucket, key, timeoutMs);
171
+ const reason = !bytes ? "missing" : (await ogFontSha256(bytes)) !== file.sha256 ? "sha256 mismatch" : undefined;
172
+ if (!reason)
173
+ return bytes;
174
+ if (!subsetMissingWarned) {
175
+ subsetMissingWarned = true;
176
+ logger.warn({ message: `[og] subset font ${reason}; rendering with the full font`, mod: "og", key, locale });
177
+ }
178
+ return null;
179
+ });
129
180
  }
130
181
  /**
131
- * Subset Regular (+ Bold when `bold`) for `locale`, or `null` when this locale
132
- * has no usable subset — every requested weight must be present, else the
182
+ * Subset Regular (+ Bold when `bold`) of `locale`'s set, or `null` when there
183
+ * is no usable subset — every requested weight must be present, else the
133
184
  * render uses the full fonts. A read error / timeout rejects like a full-font
134
- * read (503), and the slot retries on the next render.
185
+ * read (503), and the next render retries.
135
186
  */
136
187
  async function loadSubsetFonts(bucket, locale, bold, logger, timeoutMs) {
137
188
  const set = ogSubsetFontSets()[locale];
138
189
  if (!set || (bold && !set.bold))
139
190
  return null;
140
- const slot = slotFor(bucket, locale);
141
- const regular = await memo(slot, "subsetRegular", () => readSubsetObject(bucket, set.regular, locale, logger, timeoutMs));
191
+ const regular = await loadSubsetObject(bucket, set.regular, locale, logger, timeoutMs);
142
192
  if (!regular)
143
193
  return null;
144
194
  if (!bold)
145
195
  return { regular, bold: null };
146
- const boldBytes = await memo(slot, "subsetBold", () => readSubsetObject(bucket, set.bold, locale, logger, timeoutMs));
196
+ const boldBytes = await loadSubsetObject(bucket, set.bold, locale, logger, timeoutMs);
147
197
  return boldBytes ? { regular, bold: boldBytes } : null;
148
198
  }
149
199
  /**
150
- * Whether `tree`'s text is covered by `locale`'s subset. A locale without a
200
+ * Whether `codepoints` are covered by `locale`'s subset. A locale without a
151
201
  * subset counts as covered, so the render reports `"absent"`, not `"miss"`.
152
202
  */
153
- function treeCoveredForLocale(locale, tree) {
203
+ function coveredForLocale(locale, codepoints) {
154
204
  const set = ogSubsetFontSets()[locale];
155
- return !set || ogTreeCoveredBySubset(set, tree);
205
+ return !set || ogSubsetCovers(set, codepoints);
206
+ }
207
+ /** The fallback families this renderer can load (every CJK family the subset table describes). */
208
+ function fallbackCandidates() {
209
+ const sets = ogSubsetFontSets();
210
+ return OG_CJK_FALLBACK_PREFERENCE.flatMap((family) => (sets[family] ? [{ family, set: sets[family] }] : []));
211
+ }
212
+ /** Loads one planned fallback: its subset when planned and usable, else its full font (if still within budget). */
213
+ async function loadFallback(bucket, choice, bold, fullAllowed, logger, timeoutMs) {
214
+ if (choice.subset) {
215
+ const subset = await loadSubsetFonts(bucket, choice.family, bold, logger, timeoutMs);
216
+ if (subset)
217
+ return { key: ogSubsetFontKey(choice.set.regular.file), ...subset };
218
+ if (!fullAllowed)
219
+ return "over-budget";
220
+ }
221
+ const key = OG_WORKER_FONT_KEYS[choice.family];
222
+ const [regular, boldBytes] = await Promise.all([
223
+ loadFullObject(bucket, key, timeoutMs),
224
+ bold ? loadFullObject(bucket, OG_WORKER_BOLD_FONT_KEYS[choice.family], timeoutMs) : Promise.resolve(null),
225
+ ]);
226
+ if (!regular) {
227
+ if (!fallbackMissingWarned) {
228
+ fallbackMissingWarned = true;
229
+ logger.warn({ message: "[og] fallback font missing; its characters render as .notdef", mod: "og", key, family: choice.family });
230
+ }
231
+ return "missing";
232
+ }
233
+ return { key, regular, bold: boldBytes };
156
234
  }
157
235
  /**
158
236
  * The fonts for one render: the locale's subset when `covered` and available,
159
- * else the full fonts (Bold only when `bold`).
237
+ * else its full fonts (Bold only when `bold`); then the cross-script fallbacks
238
+ * planned from the ACTUAL primary bytes (`font-fallback.ts`).
160
239
  */
161
- async function loadRenderFonts(bucket, locale, covered, bold, logger, timeoutMs) {
240
+ async function loadRenderFonts(bucket, locale, codepoints, covered, bold, logger, timeoutMs) {
241
+ lastLocale = locale;
242
+ let primary;
162
243
  if (covered) {
163
244
  const subset = await loadSubsetFonts(bucket, locale, bold, logger, timeoutMs);
164
245
  if (subset)
165
- return { ...subset, fontSubset: "hit" };
246
+ primary = { ...subset, fontSubset: "hit" };
166
247
  }
167
- const [regular, boldBytes] = await Promise.all([
168
- loadRegularFont(bucket, locale, timeoutMs),
169
- bold ? loadBoldFont(bucket, locale, logger, timeoutMs) : Promise.resolve(null),
170
- ]);
171
- return { regular, bold: boldBytes, fontSubset: covered ? "absent" : "miss" };
248
+ if (!primary) {
249
+ const [regular, boldBytes] = await Promise.all([
250
+ loadRegularFont(bucket, locale, timeoutMs),
251
+ bold ? loadBoldFont(bucket, locale, logger, timeoutMs) : Promise.resolve(null),
252
+ ]);
253
+ primary = { regular, bold: boldBytes, fontSubset: covered ? "absent" : "miss" };
254
+ }
255
+ const fonts = { ...primary, fallbacks: [], skipped: [], degraded: false };
256
+ const primarySet = ogSubsetFontSets()[locale];
257
+ if (!primarySet)
258
+ return fonts;
259
+ const primaryBytes = primary.regular.byteLength + (primary.bold?.byteLength ?? 0);
260
+ const planPrimary = { primaryBytes, primaryFull: primary.fontSubset !== "hit", primaryCjk: locale !== "en" };
261
+ const plan = planOgFontFallbacks({
262
+ primary: primarySet,
263
+ ...planPrimary,
264
+ codepoints,
265
+ candidates: fallbackCandidates(),
266
+ bold,
267
+ });
268
+ fonts.skipped.push(...plan.overBudget);
269
+ if (!plan.fallbacks.length)
270
+ return fonts;
271
+ // Planned subsets/fulls load in parallel; a planned subset whose object is
272
+ // unusable may then load its full font, one at a time, only while the whole
273
+ // set (with the upgrades accepted so far) still fits the budget.
274
+ const loaded = await Promise.all(plan.fallbacks.map((choice) => loadFallback(bucket, choice, bold, false, logger, timeoutMs)));
275
+ const effective = plan.fallbacks.map((c) => ({ subset: c.subset, bytes: c.bytes }));
276
+ for (const [i, choice] of plan.fallbacks.entries()) {
277
+ if (loaded[i] !== "over-budget")
278
+ continue;
279
+ fonts.degraded = true; // its subset object is missing / not the build's bytes
280
+ const asFull = effective.map((e, j) => (j === i ? { subset: false, bytes: ogFontSetBytes(choice.set, false, bold) } : e));
281
+ if (!ogFontSetFits(planPrimary, asFull))
282
+ continue;
283
+ loaded[i] = await loadFallback(bucket, { ...choice, subset: false }, bold, true, logger, timeoutMs);
284
+ if (typeof loaded[i] !== "string")
285
+ effective[i] = asFull[i];
286
+ }
287
+ plan.fallbacks.forEach((choice, i) => {
288
+ const result = loaded[i];
289
+ if (typeof result === "string") {
290
+ fonts.skipped.push(choice.family);
291
+ if (result === "missing")
292
+ fonts.degraded = true;
293
+ return;
294
+ }
295
+ // A missing fallback Bold draws 700 with its Regular: do not cache that for a year either.
296
+ if (bold && !result.bold)
297
+ fonts.degraded = true;
298
+ fonts.fallbacks.push({ family: choice.family, ...result });
299
+ });
300
+ return fonts;
172
301
  }
173
- /** Test isolation: drop the raw font slot and re-arm the Bold warning. */
302
+ /** Test isolation: drop the raw font cache and re-arm the warnings. */
174
303
  export function resetOgWorkerFontCacheForTesting() {
175
- fontSlot = undefined;
304
+ fontCache.clear();
305
+ cacheBucket = undefined;
306
+ lastLocale = undefined;
176
307
  boldMissingWarned = false;
177
308
  subsetMissingWarned = false;
309
+ fallbackMissingWarned = false;
178
310
  }
179
311
  /**
180
- * Introspection for tests/benchmarks: which locale's raw fonts are resident,
181
- * and how many bytes (`regularBytes` / `boldBytes`: full fonts; `subset*`: the
182
- * subset objects).
312
+ * Introspection for tests/benchmarks: the most recent render's locale and how
313
+ * many of its bytes are resident (`regularBytes` / `boldBytes`: its full
314
+ * fonts; `subset*`: its subset objects), plus every resident object
315
+ * (`totalBytes`, `keys`, least recently used first).
183
316
  */
184
317
  export async function getOgWorkerFontCacheStats() {
185
- const slot = fontSlot;
186
- const empty = { regularBytes: 0, boldBytes: 0, subsetRegularBytes: 0, subsetBoldBytes: 0 };
187
- if (!slot)
188
- return empty;
189
- const size = async (p) => (p ? ((await p.catch(() => null))?.byteLength ?? 0) : 0);
318
+ const size = async (key) => key && fontCache.has(key) ? ((await fontCache.get(key).promise.catch(() => null))?.byteLength ?? 0) : 0;
319
+ const keys = [];
320
+ let totalBytes = 0;
321
+ for (const [key, entry] of fontCache) {
322
+ const bytes = await entry.promise.catch(() => null);
323
+ if (!bytes)
324
+ continue;
325
+ keys.push(key);
326
+ totalBytes += bytes.byteLength;
327
+ }
328
+ const locale = lastLocale;
329
+ const set = locale ? ogSubsetFontSets()[locale] : undefined;
190
330
  return {
191
- locale: slot.locale,
192
- regularBytes: await size(slot.regular),
193
- boldBytes: await size(slot.bold),
194
- subsetRegularBytes: await size(slot.subsetRegular),
195
- subsetBoldBytes: await size(slot.subsetBold),
331
+ locale,
332
+ regularBytes: await size(locale && OG_WORKER_FONT_KEYS[locale]),
333
+ boldBytes: await size(locale && OG_WORKER_BOLD_FONT_KEYS[locale]),
334
+ subsetRegularBytes: await size(set && ogSubsetFontKey(set.regular.file)),
335
+ subsetBoldBytes: await size(set?.bold && ogSubsetFontKey(set.bold.file)),
336
+ totalBytes,
337
+ keys,
196
338
  };
197
339
  }
198
340
  async function sha256(value) {
@@ -238,21 +380,33 @@ export function resolveOgWorkerLogoDataUri(asset) {
238
380
  // WebP (RIFF….WEBP) or anything else satori/resvg cannot rasterize.
239
381
  return { skipped: "unsupported-format" };
240
382
  }
383
+ /** satori font name of a fallback family (distinct from the trees' `Noto`, so weights match per family). */
384
+ const fallbackFontName = (family) => `Noto ${family}`;
241
385
  /**
242
386
  * satori → resvg for one tree. Callers hold the {@link serialRender} queue.
243
387
  * The fonts are copied per render (`slice()`), so satori's parse of them is
244
- * garbage once this returns — only the raw bytes stay in {@link fontSlot}.
245
- * resvg gets the Regular face only (for text inside embedded SVG images; satori
246
- * already turns tree text into paths).
388
+ * garbage once this returns — only the raw bytes stay in the font cache.
389
+ * satori gets the primary (`Noto`) first, then each fallback family under its
390
+ * own name: it draws every character with the first font that maps it.
391
+ * resvg gets the primary Regular only, as before: satori already turns tree
392
+ * text into paths, and resvg-wasm draws no text inside embedded SVG images
393
+ * whatever fonts it is given (og-font-fallback.test.ts), so a fallback buffer
394
+ * there would only grow its wasm heap.
247
395
  */
248
- async function rasterizeTree(tree, width, height, regular, bold) {
249
- const fonts = [{ name: "Noto", data: regular.slice().buffer, weight: 400, style: "normal" }];
250
- if (bold)
251
- fonts.push({ name: "Noto", data: bold.slice().buffer, weight: 700, style: "normal" });
252
- const svg = await satori(tree, { width, height, fonts });
396
+ async function rasterizeTree(tree, width, height, fonts) {
397
+ const satoriFonts = [{ name: "Noto", data: fonts.regular.slice().buffer, weight: 400, style: "normal" }];
398
+ if (fonts.bold)
399
+ satoriFonts.push({ name: "Noto", data: fonts.bold.slice().buffer, weight: 700, style: "normal" });
400
+ for (const fallback of fonts.fallbacks) {
401
+ const name = fallbackFontName(fallback.family);
402
+ satoriFonts.push({ name, data: fallback.regular.slice().buffer, weight: 400, style: "normal" });
403
+ if (fallback.bold)
404
+ satoriFonts.push({ name, data: fallback.bold.slice().buffer, weight: 700, style: "normal" });
405
+ }
406
+ const svg = await satori(tree, { width, height, fonts: satoriFonts });
253
407
  const resvg = new Resvg(svg, {
254
408
  fitTo: { mode: "original" },
255
- font: { fontBuffers: [regular], loadSystemFonts: false, defaultFontFamily: "Noto" },
409
+ font: { fontBuffers: [fonts.regular], loadSystemFonts: false, defaultFontFamily: "Noto" },
256
410
  });
257
411
  try {
258
412
  const rendered = resvg.render();
@@ -267,6 +421,38 @@ async function rasterizeTree(tree, width, height, regular, bold) {
267
421
  resvg.free();
268
422
  }
269
423
  }
424
+ /** The `og-render` fields describing the fallbacks of one render. */
425
+ function fallbackEventFields(fonts) {
426
+ return {
427
+ ...(fonts.fallbacks.length ? { fontFallbacks: fonts.fallbacks.map((f) => f.key) } : {}),
428
+ ...(fonts.skipped.length ? { fontFallbacksSkipped: [...new Set(fonts.skipped)] } : {}),
429
+ };
430
+ }
431
+ /**
432
+ * True when some text of an og.png template's params is missing from the
433
+ * locale's full font but another CJK family has it — the card renders with a
434
+ * fallback, which earlier renderers did not. Such cards get a distinct cache
435
+ * key, so a card cached before arc#8832 (drawn with .notdef) is not served.
436
+ * Every other card keeps its existing key.
437
+ */
438
+ function paramsNeedFallback(locale, params) {
439
+ const primary = ogSubsetFontSets()[locale];
440
+ if (!primary)
441
+ return false;
442
+ const candidates = fallbackCandidates().filter((c) => c.set !== primary);
443
+ for (const value of Object.values(params)) {
444
+ if (typeof value !== "string" || value.startsWith("data:"))
445
+ continue;
446
+ for (const ch of value) {
447
+ const cp = ch.codePointAt(0);
448
+ if (cp < 0x80 || ogFallbackIgnorable(cp) || ogFullFontMaps(primary, cp))
449
+ continue;
450
+ if (candidates.some((c) => ogFullFontMaps(c.set, cp)))
451
+ return true;
452
+ }
453
+ }
454
+ return false;
455
+ }
270
456
  /**
271
457
  * Renders a caller-built satori tree to PNG (ArcBlock/did#300).
272
458
  *
@@ -279,6 +465,10 @@ async function rasterizeTree(tree, width, height, regular, bold) {
279
465
  * (`fonts/subset-v1/…`, ArcBlock/arc#8800) those are used instead — same
280
466
  * pixels, a fraction of the parse; otherwise, or when the subset object is
281
467
  * missing (one warning per isolate), the full fonts.
468
+ * - Characters the locale's full font does not have at all are drawn by
469
+ * cross-script fallback families added after it (arc#8832,
470
+ * `font-fallback.ts`; subset or full, within a per-render byte budget); a
471
+ * missing fallback object renders without it (one warning per isolate).
282
472
  * - Runs inside the isolate-wide serial queue, so concurrent calls never
283
473
  * parse fonts or grow the wasm heap in parallel.
284
474
  * - No cache: callers version and cache the result themselves.
@@ -290,23 +480,24 @@ export async function renderOgTree(options) {
290
480
  const logger = options.logger ?? consoleLogger;
291
481
  const fontTimeout = options.fontReadTimeoutMs ?? OG_FONT_READ_TIMEOUT_MS;
292
482
  const bold = wantsBold(options.weights);
293
- const covered = treeCoveredForLocale(locale, tree);
294
- const { body, queueMs, fontReadMs, boldBytes, fontSubset } = await serialRender(async ({ queueMs }) => {
483
+ const codepoints = collectOgTreeCodepoints(tree);
484
+ const covered = coveredForLocale(locale, codepoints);
485
+ const { body, queueMs, fontReadMs, fonts } = await serialRender(async ({ queueMs }) => {
295
486
  const fontStart = performance.now();
296
487
  const [fonts] = await Promise.all([
297
- loadRenderFonts(options.fontBucket, locale, covered, bold, logger, fontTimeout),
488
+ loadRenderFonts(options.fontBucket, locale, codepoints, covered, bold, logger, fontTimeout),
298
489
  ensureWasm(),
299
490
  ]);
300
491
  const fontReadMs = performance.now() - fontStart;
301
492
  let body;
302
493
  try {
303
- body = await rasterizeTree(tree, options.width, options.height, fonts.regular, fonts.bold);
494
+ body = await rasterizeTree(tree, options.width, options.height, fonts);
304
495
  }
305
496
  catch {
306
497
  // satori/resvg messages can quote the input; report a generic 400.
307
498
  throw new OgTreeRenderError(OG_TREE_ERROR_CODES.renderFailed, "the tree could not be rendered");
308
499
  }
309
- return { body, queueMs, fontReadMs, boldBytes: fonts.bold, fontSubset: fonts.fontSubset };
500
+ return { body, queueMs, fontReadMs, fonts };
310
501
  }, { maxWaitMs: options.queueMaxWaitMs ?? OG_QUEUE_MAX_WAIT_MS });
311
502
  options.observer?.({
312
503
  locale,
@@ -314,9 +505,10 @@ export async function renderOgTree(options) {
314
505
  durationMs: performance.now() - startedAt,
315
506
  queueMs,
316
507
  fontReadMs,
317
- fontSubset,
508
+ fontSubset: fonts.fontSubset,
509
+ ...fallbackEventFields(fonts),
318
510
  template: "tree",
319
- ...(bold && !boldBytes ? { boldFallback: true } : {}),
511
+ ...(bold && !fonts.bold ? { boldFallback: true } : {}),
320
512
  });
321
513
  return body;
322
514
  }
@@ -365,6 +557,8 @@ export function createOgWorkerRenderer(options) {
365
557
  // changes supported/unsupported format.
366
558
  logoHash,
367
559
  params,
560
+ // Only cards drawn with a cross-script fallback (arc#8832) get a new key.
561
+ ...(paramsNeedFallback(locale, params) ? { fontFallback: 1 } : {}),
368
562
  }));
369
563
  const cacheRequest = new Request(`${CACHE_ORIGIN}/${OG_WORKER_RENDERER_VERSION}/${cacheHash}`);
370
564
  const cache = options.cache ?? defaultCache();
@@ -387,23 +581,26 @@ export function createOgWorkerRenderer(options) {
387
581
  const { dataUri: logoDataUri, skipped: logoSkipped } = resolveOgWorkerLogoDataUri(logoAsset ?? undefined);
388
582
  params.logo = logoDataUri ?? TRANSPARENT_PNG_DATA_URI;
389
583
  const tree = await getTemplate(params);
390
- const covered = treeCoveredForLocale(locale, tree);
584
+ const codepoints = collectOgTreeCodepoints(tree);
585
+ const covered = coveredForLocale(locale, codepoints);
391
586
  const logger = options.logger ?? consoleLogger;
392
- const { body, queueMs, fontReadMs, fontSubset } = await serialRender(async ({ queueMs }) => {
587
+ const { body, queueMs, fontReadMs, fonts } = await serialRender(async ({ queueMs }) => {
393
588
  const fontStart = performance.now();
394
589
  const [fonts] = await Promise.all([
395
- loadRenderFonts(options.fontBucket, locale, covered, false, logger, options.fontReadTimeoutMs ?? OG_FONT_READ_TIMEOUT_MS),
590
+ loadRenderFonts(options.fontBucket, locale, codepoints, covered, false, logger, options.fontReadTimeoutMs ?? OG_FONT_READ_TIMEOUT_MS),
396
591
  ensureWasm(),
397
592
  ]);
398
593
  const fontReadMs = performance.now() - fontStart;
399
- const body = await rasterizeTree(tree, params.width, params.height, fonts.regular, null);
400
- return { body, queueMs, fontReadMs, fontSubset: fonts.fontSubset };
594
+ const body = await rasterizeTree(tree, params.width, params.height, fonts);
595
+ return { body, queueMs, fontReadMs, fonts };
401
596
  }, { maxWaitMs: options.queueMaxWaitMs ?? OG_QUEUE_MAX_WAIT_MS });
402
597
  const responseBody = body.slice().buffer;
403
598
  const response = new Response(responseBody, {
404
599
  headers: { "Content-Type": "image/png", "Cache-Control": "public, max-age=31536000, immutable" },
405
600
  });
406
- if (!prepared.nocache) {
601
+ // A card missing a fallback object would be cached for a year as drawn
602
+ // now (with .notdef): serve it, but render again until the object exists.
603
+ if (!prepared.nocache && !fonts.degraded) {
407
604
  try {
408
605
  await cache.put(cacheRequest, response.clone());
409
606
  }
@@ -418,7 +615,8 @@ export function createOgWorkerRenderer(options) {
418
615
  durationMs: performance.now() - startedAt,
419
616
  queueMs,
420
617
  fontReadMs,
421
- fontSubset,
618
+ fontSubset: fonts.fontSubset,
619
+ ...fallbackEventFields(fonts),
422
620
  template: params.template,
423
621
  ...(logoSkipped ? { logoSkipped } : {}),
424
622
  });
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/og/worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/og/worker.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,4BAA4B,CAAC;AACnD,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,aAAa,EAAe,MAAM,cAAc,CAAC;AAC1D,OAAO,EACL,0BAA0B,EAI1B,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,uBAAuB,EAGvB,YAAY,EACZ,cAAc,EACd,cAAc,EACd,eAAe,EACf,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,sBAAsB,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,2BAA2B,EAC3B,mBAAmB,EACnB,wBAAwB,EACxB,iBAAiB,EAEjB,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,WAAW,GACZ,MAAM,WAAW,CAAC;AAInB,OAAO,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAE7F,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAWrE,OAAO,EACL,cAAc,EACd,2BAA2B,EAC3B,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,wBAAwB,EACxB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,GACf,MAAM,WAAW,CAAC;AAEnB,iEAAiE;AACjE,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAC9C,gEAAgE;AAChE,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAE3C,MAAM,CAAC,MAAM,0BAA0B,GAAG,cAAc,CAAC;AACzD,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,EAAE,EAAE,4BAA4B;IAChC,OAAO,EAAE,8BAA8B;IACvC,OAAO,EAAE,8BAA8B;IACvC,EAAE,EAAE,8BAA8B;CAC1B,CAAC;AAEX;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,EAAE,EAAE,yBAAyB;IAC7B,OAAO,EAAE,2BAA2B;IACpC,OAAO,EAAE,2BAA2B;IACpC,EAAE,EAAE,2BAA2B;CACvB,CAAC;AAsHX,MAAM,wBAAwB,GAC5B,oHAAoH,CAAC;AACvH,MAAM,YAAY,GAAG,0BAA0B,CAAC;AAEhD,IAAI,kBAA6C,CAAC;AAElD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAC3D,MAAM,kBAAkB,GAAG,CAAC,GAAG,MAAM,CAAC;AAStC,IAAI,WAA2C,CAAC;AAChD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAsB,CAAC;AAChD,gFAAgF;AAChF,IAAI,UAAsC,CAAC;AAC3C,IAAI,iBAAiB,GAAG,KAAK,CAAC;AAC9B,IAAI,mBAAmB,GAAG,KAAK,CAAC;AAChC,IAAI,qBAAqB,GAAG,KAAK,CAAC;AAElC,8EAA8E;AAC9E,MAAM,YAAY,GAAG,iBAAiB,EAAE,CAAC;AAEzC,MAAM,UAAU,iBAAiB,CAAC,MAA0B;IAC1D,MAAM,UAAU,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;IACtD,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrE,IACE,UAAU,KAAK,OAAO;QACtB,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC;QAChC,UAAU,KAAK,OAAO;QACtB,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,EAC/B,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9F,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,UAAU;IACjB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,kBAAkB,GAAG,sBAAsB,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YAC5D,kBAAkB,GAAG,SAAS,CAAC;YAC/B,MAAM,KAAK,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,2BAA2B;IACzC,kBAAkB,GAAG,SAAS,CAAC;AACjC,CAAC;AAED,SAAS,cAAc,CAAC,MAA0B,EAAE,GAAW,EAAE,SAAiB;IAChF,OAAO,WAAW,CAChB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EACpG,SAAS,EACT,GAAG,EAAE,CAAC,IAAI,wBAAwB,CAAC,2BAA2B,CAAC,WAAW,EAAE,sBAAsB,SAAS,IAAI,CAAC,CACjH,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE;QAAE,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;IAC7D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;QACrC,IAAI,KAAK,IAAI,0BAA0B;YAAE,MAAM;QAC/C,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC;YAAE,SAAS;QAChD,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACtB,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;IACvB,CAAC;AACH,CAAC;AAED,uFAAuF;AACvF,SAAS,UAAU,CAAC,MAA0B,EAAE,GAAW,EAAE,IAAsC;IACjG,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;QAC3B,SAAS,CAAC,KAAK,EAAE,CAAC;QAClB,WAAW,GAAG,MAAM,CAAC;IACvB,CAAC;IACD,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,SAAS,GAAG,kBAAkB,CAAC,EAAE,CAAC;QAC5F,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,qBAAqB;QAC9C,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IACD,MAAM,KAAK,GAAe,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACvE,KAAK,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;QACpC,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC;YACjC,IAAI,KAAK,EAAE,CAAC;gBACV,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC;gBAC/B,SAAS,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE;QACvB,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK;YAAE,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IACH,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC1B,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC;AAED,wEAAwE;AACxE,SAAS,cAAc,CAAC,MAA0B,EAAE,GAAW,EAAE,SAAiB;IAChF,OAAO,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,0EAA0E;AAC1E,KAAK,UAAU,eAAe,CAAC,MAA0B,EAAE,MAAsB,EAAE,SAAiB;IAClG,MAAM,GAAG,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;IAC3D,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;IAC3D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,oGAAoG;AACpG,KAAK,UAAU,YAAY,CACzB,MAA0B,EAC1B,MAAsB,EACtB,MAAsB,EACtB,SAAiB;IAEjB,MAAM,GAAG,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;IAC3D,IAAI,CAAC,KAAK,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACjC,iBAAiB,GAAG,IAAI,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC;YACV,OAAO,EAAE,oEAAoE;YAC7E,GAAG,EAAE,IAAI;YACT,GAAG;YACH,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,0GAA0G;AAC1G,SAAS,gBAAgB,CACvB,MAA0B,EAC1B,IAAsB,EACtB,MAAsB,EACtB,MAAsB,EACtB,SAAiB;IAEjB,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC;QAChH,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC1B,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzB,mBAAmB,GAAG,IAAI,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,oBAAoB,MAAM,gCAAgC,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/G,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,eAAe,CAC5B,MAA0B,EAC1B,MAAsB,EACtB,IAAa,EACb,MAAsB,EACtB,SAAiB;IAEjB,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACvF,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,IAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACvF,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACzD,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,MAAsB,EAAE,UAA4B;IAC5E,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC,MAAM,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AACjD,CAAC;AAcD,kGAAkG;AAClG,SAAS,kBAAkB;IACzB,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;IAChC,OAAO,0BAA0B,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAChH,CAAC;AAED,mHAAmH;AACnH,KAAK,UAAU,YAAY,CACzB,MAA0B,EAC1B,MAAwB,EACxB,IAAa,EACb,WAAoB,EACpB,MAAsB,EACtB,SAAiB;IAEjB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACrF,IAAI,MAAM;YAAE,OAAO,EAAE,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;QAChF,IAAI,CAAC,WAAW;YAAE,OAAO,aAAa,CAAC;IACzC,CAAC;IACD,MAAM,GAAG,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC7C,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC;QACtC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,wBAAwB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;KAC1G,CAAC,CAAC;IACH,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC3B,qBAAqB,GAAG,IAAI,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,8DAA8D,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAClI,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC3C,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,eAAe,CAC5B,MAA0B,EAC1B,MAAsB,EACtB,UAA+B,EAC/B,OAAgB,EAChB,IAAa,EACb,MAAsB,EACtB,SAAiB;IAEjB,UAAU,GAAG,MAAM,CAAC;IACpB,IAAI,OAAqG,CAAC;IAC1G,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QAC9E,IAAI,MAAM;YAAE,OAAO,GAAG,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACzD,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC7C,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC;YAC1C,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;SAC/E,CAAC,CAAC;QACH,OAAO,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClF,CAAC;IAED,MAAM,KAAK,GAAgB,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACvF,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IAC9B,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,IAAI,CAAC,CAAC,CAAC;IAClF,MAAM,WAAW,GAAG,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,CAAC,UAAU,KAAK,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,EAAE,CAAC;IAC7G,MAAM,IAAI,GAAG,mBAAmB,CAAC;QAC/B,OAAO,EAAE,UAAU;QACnB,GAAG,WAAW;QACd,UAAU;QACV,UAAU,EAAE,kBAAkB,EAAE;QAChC,IAAI;KACL,CAAC,CAAC;IACH,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;IACvC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAEzC,2EAA2E;IAC3E,4EAA4E;IAC5E,iEAAiE;IACjE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IAC/H,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACpF,KAAK,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;QACnD,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,aAAa;YAAE,SAAS;QAC1C,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,uDAAuD;QAC9E,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1H,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC;YAAE,SAAS;QAClD,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACpG,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ;YAAE,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;IAC/D,CAAC;IACD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACnC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;QAC1B,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAClC,IAAI,MAAM,KAAK,SAAS;gBAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;YAChD,OAAO;QACT,CAAC;QACD,2FAA2F;QAC3F,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI;YAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;QAChD,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,gCAAgC;IAC9C,SAAS,CAAC,KAAK,EAAE,CAAC;IAClB,WAAW,GAAG,SAAS,CAAC;IACxB,UAAU,GAAG,SAAS,CAAC;IACvB,iBAAiB,GAAG,KAAK,CAAC;IAC1B,mBAAmB,GAAG,KAAK,CAAC;IAC5B,qBAAqB,GAAG,KAAK,CAAC;AAChC,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAS7C,MAAM,IAAI,GAAG,KAAK,EAAE,GAAuB,EAAE,EAAE,CAC7C,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3G,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC;IACjC,CAAC;IACD,MAAM,MAAM,GAAG,UAAU,CAAC;IAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5D,OAAO;QACL,MAAM;QACN,YAAY,EAAE,MAAM,IAAI,CAAC,MAAM,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC/D,SAAS,EAAE,MAAM,IAAI,CAAC,MAAM,IAAI,wBAAwB,CAAC,MAAM,CAAC,CAAC;QACjE,kBAAkB,EAAE,MAAM,IAAI,CAAC,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxE,eAAe,EAAE,MAAM,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxE,UAAU;QACV,IAAI;KACL,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,KAAa;IACjC,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAChG,CAAC;AAED,SAAS,YAAY;IACnB,MAAM,YAAY,GAAG,UAAU,CAAC,MAA0D,CAAC;IAC3F,IAAI,CAAC,YAAY,EAAE,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACrE,OAAO,YAAY,CAAC,OAAO,CAAC;AAC9B,CAAC;AAED,8EAA8E;AAC9E,uCAAuC;AACvC,8EAA8E;AAC9E,EAAE;AACF,0EAA0E;AAC1E,oEAAoE;AACpE,6EAA6E;AAC7E,0EAA0E;AAC1E,2EAA2E;AAC3E,+CAA+C;AAE/C,2EAA2E;AAC3E,SAAS,kBAAkB,CAAC,KAAiB;IAC3C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CACxC,KAA2C;IAE3C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEtD,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,IAAI;QAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,WAAW,CAAC,IAAI,CAAC,WAAW,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;IACpG,oEAAoE;IACpE,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAC3C,CAAC;AAID,4GAA4G;AAC5G,MAAM,gBAAgB,GAAG,CAAC,MAAmB,EAAE,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC;AAEnE;;;;;;;;;;GAUG;AACH,KAAK,UAAU,aAAa,CAAC,IAAa,EAAE,KAAa,EAAE,MAAc,EAAE,KAAkB;IAC3F,MAAM,WAAW,GAAiB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,MAAqB,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtI,IAAI,KAAK,CAAC,IAAI;QAAE,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAqB,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACjI,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/C,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,MAAqB,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/G,IAAI,QAAQ,CAAC,IAAI;YAAE,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAqB,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACjI,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAoC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;IACtG,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE;QAC3B,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;QAC3B,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE;KAC1F,CAAC,CAAC;IACH,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,OAAO,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC1B,CAAC;gBAAS,CAAC;YACT,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;YAAS,CAAC;QACT,KAAK,CAAC,IAAI,EAAE,CAAC;IACf,CAAC;AACH,CAAC;AAED,qEAAqE;AACrE,SAAS,mBAAmB,CAAC,KAAkB;IAC7C,OAAO;QACL,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvF,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,MAAsB,EAAE,MAA+B;IACjF,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,MAAM,UAAU,GAAG,kBAAkB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,CAAC;IACzE,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,SAAS;QACrE,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC;YAC9B,IAAI,EAAE,GAAG,IAAI,IAAI,mBAAmB,CAAC,EAAE,CAAC,IAAI,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC;gBAAE,SAAS;YAClF,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;QACrE,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAkC;IACnE,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC;IAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,IAAI,uBAAuB,CAAC;IACzE,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACrD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,MAAM,YAAY,CAC7D,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAChC,eAAe,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC;YAC3F,UAAU,EAAE;SACb,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACjD,IAAI,IAAgB,CAAC;QACrB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACzE,CAAC;QAAC,MAAM,CAAC;YACP,mEAAmE;YACnE,MAAM,IAAI,iBAAiB,CAAC,mBAAmB,CAAC,YAAY,EAAE,gCAAgC,CAAC,CAAC;QAClG,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAC9C,CAAC,EACD,EAAE,SAAS,EAAE,OAAO,CAAC,cAAc,IAAI,oBAAoB,EAAE,CAC9D,CAAC;IACF,OAAO,CAAC,QAAQ,EAAE,CAAC;QACjB,MAAM;QACN,WAAW,EAAE,QAAQ;QACrB,UAAU,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS;QACzC,OAAO;QACP,UAAU;QACV,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,GAAG,mBAAmB,CAAC,KAAK,CAAC;QAC7B,QAAQ,EAAE,MAAM;QAChB,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvD,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAsC;IAC3E,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAEvD,OAAO;QACL,KAAK,CAAC,UAAU,CAAC,WAAW;YAC1B,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC;gBAC9B,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;gBAC5C,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,GAAG,WAAW;gBACd,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,QAAQ;gBACR,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;QAC5C,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,aAAa;YACxB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,iBAAiB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACvD,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAC5C,MAAM,QAAQ,GAAG,eAAe,CAAC,EAAE,GAAG,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YACtE,MAAM,MAAM,GAAG;gBACb,GAAG,QAAQ,CAAC,MAAM;gBAClB,kEAAkE;gBAClE,mEAAmE;gBACnE,gEAAgE;gBAChE,IAAI,EAAE,wBAAwB;gBAC9B,mEAAmE;gBACnE,kEAAkE;gBAClE,wDAAwD;gBACxD,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE;gBAC5D,UAAU,EAAE,EAAE;aACf,CAAC;YACF,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YAClE,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;YACnD,MAAM,SAAS,GAAG,MAAM,MAAM,CAC5B,SAAS,CAAC;gBACR,eAAe,EAAE,0BAA0B;gBAC3C,OAAO;gBACP,MAAM;gBACN,iBAAiB;gBACjB,mEAAmE;gBACnE,0DAA0D;gBAC1D,gEAAgE;gBAChE,+DAA+D;gBAC/D,wCAAwC;gBACxC,QAAQ;gBACR,MAAM;gBACN,0EAA0E;gBAC1E,GAAG,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACnE,CAAC,CACH,CAAC;YACF,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,GAAG,YAAY,IAAI,0BAA0B,IAAI,SAAS,EAAE,CAAC,CAAC;YAC/F,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,YAAY,EAAE,CAAC;YAE9C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACtB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBAC/C,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;oBACxD,QAAQ,CAAC;wBACP,MAAM;wBACN,WAAW,EAAE,KAAK;wBAClB,UAAU,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS;wBACzC,QAAQ,EAAE,MAAM,CAAC,QAAQ;qBAC1B,CAAC,CAAC;oBACH,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,WAAW,EAAE,CAAC;gBAClF,CAAC;YACH,CAAC;YAED,sEAAsE;YACtE,0DAA0D;YAC1D,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,aAAa,EAAE,EAAE,CAAC;YACxD,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,0BAA0B,CAAC,SAAS,IAAI,SAAS,CAAC,CAAC;YAC1G,MAAM,CAAC,IAAI,GAAG,WAAW,IAAI,wBAAwB,CAAC;YAEtD,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;YACvC,MAAM,UAAU,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACrD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC;YAC/C,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,MAAM,YAAY,CAC7D,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;gBACpB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;gBACpC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBAChC,eAAe,CACb,OAAO,CAAC,UAAU,EAClB,MAAM,EACN,UAAU,EACV,OAAO,EACP,KAAK,EACL,MAAM,EACN,OAAO,CAAC,iBAAiB,IAAI,uBAAuB,CACrD;oBACD,UAAU,EAAE;iBACb,CAAC,CAAC;gBACH,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;gBACjD,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBAC3E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;YAC9C,CAAC,EACD,EAAE,SAAS,EAAE,OAAO,CAAC,cAAc,IAAI,oBAAoB,EAAE,CAC9D,CAAC;YACF,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAqB,CAAC;YACxD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,YAAY,EAAE;gBAC1C,OAAO,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,qCAAqC,EAAE;aACjG,CAAC,CAAC;YAEH,uEAAuE;YACvE,0EAA0E;YAC1E,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACzC,IAAI,CAAC;oBACH,MAAM,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;gBAClD,CAAC;gBAAC,MAAM,CAAC;oBACP,0EAA0E;gBAC5E,CAAC;YACH,CAAC;YACD,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;YACzD,QAAQ,CAAC;gBACP,MAAM;gBACN,WAAW;gBACX,UAAU,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS;gBACzC,OAAO;gBACP,UAAU;gBACV,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,GAAG,mBAAmB,CAAC,KAAK,CAAC;gBAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxC,CAAC,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;QAC5C,CAAC;KACF,CAAC;AACJ,CAAC"}