akarisub 0.2.2 → 1.0.1

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 (78) hide show
  1. package/README.md +198 -167
  2. package/THIRD_PARTY_NOTICES.md +55 -163
  3. package/dist/COPYRIGHT +56 -164
  4. package/dist/index.d.ts +26 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +24 -147
  7. package/dist/index.js.map +1 -0
  8. package/dist/ts/akarisub.d.ts +323 -0
  9. package/dist/ts/akarisub.d.ts.map +1 -0
  10. package/dist/ts/akarisub.js +2235 -0
  11. package/dist/ts/akarisub.js.map +1 -0
  12. package/dist/ts/timing.d.ts +63 -0
  13. package/dist/ts/timing.d.ts.map +1 -0
  14. package/dist/ts/timing.js +219 -0
  15. package/dist/ts/timing.js.map +1 -0
  16. package/dist/ts/{ts/types.d.ts → types.d.ts} +176 -78
  17. package/dist/ts/types.d.ts.map +1 -0
  18. package/dist/ts/types.js +2 -0
  19. package/dist/ts/{ts/types.js.map → types.js.map} +1 -1
  20. package/dist/ts/{ts/utils.d.ts → utils.d.ts} +24 -37
  21. package/dist/ts/utils.d.ts.map +1 -0
  22. package/dist/ts/{ts/utils.js → utils.js} +12 -56
  23. package/dist/ts/utils.js.map +1 -0
  24. package/dist/ts/wasm.d.ts +12 -0
  25. package/dist/ts/wasm.d.ts.map +1 -0
  26. package/dist/ts/wasm.js +46 -0
  27. package/dist/ts/wasm.js.map +1 -0
  28. package/dist/ts/{ts/webgl2-renderer.d.ts → webgl2-renderer.d.ts} +17 -12
  29. package/dist/ts/webgl2-renderer.d.ts.map +1 -0
  30. package/dist/ts/{ts/webgl2-renderer.js → webgl2-renderer.js} +17 -27
  31. package/dist/ts/webgl2-renderer.js.map +1 -0
  32. package/dist/ts/webgpu-renderer.d.ts +88 -0
  33. package/dist/ts/webgpu-renderer.d.ts.map +1 -0
  34. package/dist/ts/{ts/webgpu-renderer.js → webgpu-renderer.js} +173 -71
  35. package/dist/ts/webgpu-renderer.js.map +1 -0
  36. package/dist/ts/worker.d.ts +2 -0
  37. package/dist/ts/{ts/worker.d.ts.map → worker.d.ts.map} +1 -1
  38. package/dist/ts/{ts/worker.js → worker.js} +1064 -264
  39. package/dist/ts/worker.js.map +1 -0
  40. package/dist/wrapper.d.ts +8 -0
  41. package/dist/wrapper.d.ts.map +1 -0
  42. package/dist/{ts/index.js → wrapper.js} +4 -14
  43. package/dist/wrapper.js.map +1 -0
  44. package/package.json +24 -22
  45. package/pkg/akarisub.js +53 -0
  46. package/{dist/akarisub-worker.wasm → pkg/akarisub.wasm} +0 -0
  47. package/src/wrapper.ts +46 -0
  48. package/dist/akarisub-worker.js +0 -39
  49. package/dist/akarisub.umd.js +0 -159
  50. package/dist/ts/index.d.ts +0 -14
  51. package/dist/ts/index.d.ts.map +0 -1
  52. package/dist/ts/index.js.map +0 -1
  53. package/dist/ts/ts/akarisub.d.ts +0 -225
  54. package/dist/ts/ts/akarisub.d.ts.map +0 -1
  55. package/dist/ts/ts/akarisub.js +0 -1073
  56. package/dist/ts/ts/akarisub.js.map +0 -1
  57. package/dist/ts/ts/types.d.ts.map +0 -1
  58. package/dist/ts/ts/types.js +0 -5
  59. package/dist/ts/ts/utils.d.ts.map +0 -1
  60. package/dist/ts/ts/utils.js.map +0 -1
  61. package/dist/ts/ts/webgl2-renderer.d.ts.map +0 -1
  62. package/dist/ts/ts/webgl2-renderer.js.map +0 -1
  63. package/dist/ts/ts/webgpu-renderer.d.ts +0 -62
  64. package/dist/ts/ts/webgpu-renderer.d.ts.map +0 -1
  65. package/dist/ts/ts/webgpu-renderer.js.map +0 -1
  66. package/dist/ts/ts/worker.d.ts +0 -6
  67. package/dist/ts/ts/worker.js.map +0 -1
  68. package/dist/ts/wrapper.d.ts +0 -8
  69. package/dist/ts/wrapper.d.ts.map +0 -1
  70. package/dist/ts/wrapper.js +0 -9
  71. package/dist/ts/wrapper.js.map +0 -1
  72. package/src/ts/akarisub.ts +0 -1272
  73. package/src/ts/types.ts +0 -397
  74. package/src/ts/utils.ts +0 -512
  75. package/src/ts/webgl2-renderer.ts +0 -426
  76. package/src/ts/webgpu-renderer.ts +0 -691
  77. package/src/ts/worker.ts +0 -2052
  78. /package/{dist → assets}/default.woff2 +0 -0
@@ -0,0 +1,88 @@
1
+ import type { RenderImage } from './types';
2
+ /** True when `navigator.gpu` is present. */
3
+ export declare function isWebGPUSupported(): boolean;
4
+ /** Premultiplied-alpha WebGPU compositor for subtitle bitmaps. */
5
+ export declare class WebGPURenderer {
6
+ private device;
7
+ private context;
8
+ private stageContexts;
9
+ private pipeline;
10
+ private bindGroupLayout;
11
+ private uniformBuffer;
12
+ private imageDataBuffer;
13
+ private textureArray;
14
+ private textureArrayView;
15
+ private textureArraySize;
16
+ private textureArrayWidth;
17
+ private textureArrayHeight;
18
+ private pendingDestroyTextures;
19
+ private externalUploadCanvas;
20
+ private externalUploadContext;
21
+ private warnedExternalUploadFallback;
22
+ private readonly imageDataArray;
23
+ private readonly resolutionArray;
24
+ private bindGroup;
25
+ private bindGroupDirty;
26
+ private lastCanvasWidth;
27
+ private lastCanvasHeight;
28
+ /** Swap-chain texture format used when configuring the canvas. */
29
+ format: GPUTextureFormat;
30
+ private _canvas;
31
+ private _initPromise;
32
+ private _initialized;
33
+ /** Allocate GPU upload buffers. Call {@linkcode init} before rendering. */
34
+ constructor();
35
+ /** Acquire a GPU device and compile the subtitle shaders. */
36
+ init(): Promise<void>;
37
+ /** @internal */
38
+ private _initDevice;
39
+ /** @internal */
40
+ private roundDim;
41
+ /** @internal */
42
+ private roundLayers;
43
+ /** @internal */
44
+ private createTextureArray;
45
+ /** @internal */
46
+ private ensureTextureArray;
47
+ /** @internal */
48
+ private updateBindGroup;
49
+ /** Bind `canvas` as the primary output and size the swap chain. */
50
+ setCanvas(canvas: HTMLCanvasElement, width: number, height: number): Promise<void>;
51
+ /**
52
+ * Render a prepared full-frame subtitle snapshot into its own WebGPU canvas.
53
+ * Keeping prepared frames on the selected backend avoids switching to a 2D
54
+ * compositor during playback (and lets Chromium keep one GPU overlay stack).
55
+ */
56
+ renderBitmapToCanvas(canvas: HTMLCanvasElement, bitmap: ImageBitmap, width: number, height: number): boolean;
57
+ /** Drop a staging canvas previously used with {@linkcode renderBitmapToCanvas}. */
58
+ releaseCanvas(canvas: HTMLCanvasElement): void;
59
+ /** Resize the primary canvas and uniform resolution. */
60
+ updateSize(width: number, height: number): void;
61
+ /** Composite `images` onto the primary canvas. Returns `false` if the context is missing. */
62
+ renderBitmaps(images: {
63
+ image: ImageBitmap;
64
+ x: number;
65
+ y: number;
66
+ }[], canvasWidth: number, canvasHeight: number): boolean;
67
+ /** Wait until submitted GPU work has finished. */
68
+ submittedWorkDone(): Promise<void>;
69
+ /** @internal */
70
+ private renderBitmapsToContext;
71
+ /** Composite {@linkcode RenderImage} planes onto the primary canvas. */
72
+ render(images: RenderImage[], _canvasWidth: number, _canvasHeight: number): boolean;
73
+ /** @internal */
74
+ private uploadImageBitmap;
75
+ /** @internal */
76
+ private uploadTextureData;
77
+ /** @internal */
78
+ private cleanupPendingTextures;
79
+ /** Clear the primary canvas to transparent black. */
80
+ clear(): boolean;
81
+ /** @internal */
82
+ private clearContext;
83
+ /** True after {@linkcode init} has completed successfully. */
84
+ get initialized(): boolean;
85
+ /** Release GPU resources and unconfigure all canvases. */
86
+ destroy(): void;
87
+ }
88
+ //# sourceMappingURL=webgpu-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webgpu-renderer.d.ts","sourceRoot":"","sources":["../../src/ts/webgpu-renderer.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,6 @@
1
1
  /// <reference types="@webgpu/types" />
2
- // Maximum images per batch
3
2
  const MAX_IMAGES_PER_BATCH = 256;
4
- // WebGPU max texture array layers
5
3
  const MAX_TEXTURE_ARRAY_LAYERS = 256;
6
- // WGSL Vertex Shader
7
4
  const VERTEX_SHADER = /* wgsl */ `
8
5
  struct VertexOutput {
9
6
  @builtin(position) position: vec4f,
@@ -24,7 +21,6 @@ struct ImageData {
24
21
  @group(0) @binding(0) var<uniform> uniforms: Uniforms;
25
22
  @group(0) @binding(1) var<storage, read> imageData: array<ImageData>;
26
23
 
27
- // Quad vertices (two triangles)
28
24
  const QUAD_POSITIONS = array<vec2f, 6>(
29
25
  vec2f(0.0, 0.0),
30
26
  vec2f(1.0, 0.0),
@@ -45,10 +41,8 @@ fn vertexMain(
45
41
  let quadPos = QUAD_POSITIONS[vertexIndex];
46
42
  let wh = data.destRect.zw;
47
43
 
48
- // Calculate pixel position
49
44
  let pixelPos = data.destRect.xy + quadPos * wh;
50
45
 
51
- // Convert to clip space (-1 to 1)
52
46
  var clipPos = (pixelPos / uniforms.resolution) * 2.0 - 1.0;
53
47
  clipPos.y = -clipPos.y;
54
48
 
@@ -60,7 +54,6 @@ fn vertexMain(
60
54
  return output;
61
55
  }
62
56
  `;
63
- // WGSL Fragment Shader
64
57
  const FRAGMENT_SHADER = /* wgsl */ `
65
58
  @group(0) @binding(2) var texArray: texture_2d_array<f32>;
66
59
 
@@ -83,26 +76,20 @@ fn fragmentMain(input: FragmentInput) -> @location(0) vec4f {
83
76
  let data = imageData[input.instanceIndex];
84
77
  let texIndex = u32(data.texInfo.z);
85
78
 
86
- // Calculate texel coordinates
87
79
  let texCoordF = floor(input.fragCoord.xy - input.destXY);
88
80
  let texCoord = vec2i(texCoordF);
89
81
 
90
- // Bounds check
91
82
  let texSizeI = vec2i(input.texSize);
92
83
  if (texCoord.x < 0 || texCoord.y < 0 || texCoord.x >= texSizeI.x || texCoord.y >= texSizeI.y) {
93
84
  discard;
94
85
  }
95
86
 
96
- // Load from texture array
97
87
  let color = textureLoad(texArray, texCoord, texIndex, 0);
98
88
 
99
- // Premultiplied alpha output
100
89
  return vec4f(color.rgb * color.a, color.a);
101
90
  }
102
91
  `;
103
- /**
104
- * Check if WebGPU is supported in the current browser.
105
- */
92
+ /** True when `navigator.gpu` is present. */
106
93
  export function isWebGPUSupported() {
107
94
  return typeof navigator !== 'undefined' && 'gpu' in navigator;
108
95
  }
@@ -112,46 +99,47 @@ function toUint8View(data) {
112
99
  }
113
100
  return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
114
101
  }
115
- /**
116
- * High-performance WebGPU subtitle renderer for AkariSub.
117
- */
102
+ /** Premultiplied-alpha WebGPU compositor for subtitle bitmaps. */
118
103
  export class WebGPURenderer {
119
104
  device = null;
120
105
  context = null;
106
+ stageContexts = new Map();
121
107
  pipeline = null;
122
108
  bindGroupLayout = null;
123
109
  uniformBuffer = null;
124
110
  imageDataBuffer = null;
125
- // Texture array for batched rendering
126
111
  textureArray = null;
127
112
  textureArrayView = null;
128
113
  textureArraySize = 0;
129
114
  textureArrayWidth = 0;
130
115
  textureArrayHeight = 0;
131
116
  pendingDestroyTextures = [];
132
- // Pre-allocated typed arrays (reused every frame - ZERO allocations in hot path)
117
+ externalUploadCanvas = null;
118
+ externalUploadContext = null;
119
+ warnedExternalUploadFallback = false;
133
120
  imageDataArray;
134
121
  resolutionArray = new Float32Array(2);
135
- // Bind group (recreated only when texture array changes)
136
122
  bindGroup = null;
137
123
  bindGroupDirty = true;
138
- // Track canvas size to avoid redundant updates
139
124
  lastCanvasWidth = 0;
140
125
  lastCanvasHeight = 0;
126
+ /** Swap-chain texture format used when configuring the canvas. */
141
127
  format = 'bgra8unorm';
142
128
  _canvas = null;
143
129
  _initPromise = null;
144
130
  _initialized = false;
131
+ /** Allocate GPU upload buffers. Call {@linkcode init} before rendering. */
145
132
  constructor() {
146
- // Pre-allocate buffer for max images (8 floats per image: destRect + texInfo)
147
133
  this.imageDataArray = new Float32Array(MAX_IMAGES_PER_BATCH * 8);
148
134
  }
135
+ /** Acquire a GPU device and compile the subtitle shaders. */
149
136
  async init() {
150
137
  if (this._initPromise)
151
138
  return this._initPromise;
152
139
  this._initPromise = this._initDevice();
153
140
  return this._initPromise;
154
141
  }
142
+ /** @internal */
155
143
  async _initDevice() {
156
144
  if (!navigator.gpu) {
157
145
  throw new Error('WebGPU not supported');
@@ -170,12 +158,10 @@ export class WebGPURenderer {
170
158
  size: 16,
171
159
  usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
172
160
  });
173
- // Large storage buffer for all image data
174
161
  this.imageDataBuffer = this.device.createBuffer({
175
162
  size: MAX_IMAGES_PER_BATCH * 8 * 4,
176
163
  usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST
177
164
  });
178
- // Create initial texture array with reasonable defaults
179
165
  this.createTextureArray(256, 256, 32);
180
166
  this.bindGroupLayout = this.device.createBindGroupLayout({
181
167
  entries: [
@@ -218,13 +204,15 @@ export class WebGPURenderer {
218
204
  // Round up to a multiple of 64: gives headroom against size jitter without
219
205
  // power-of-2 over-allocation (a 1920x1080 blend region would otherwise
220
206
  // round to 2048x2048 and waste ~2x memory).
207
+ /** @internal */
221
208
  roundDim(n) {
222
209
  return (Math.max(n, 64) + 63) & ~63;
223
210
  }
224
- // Round layers up to a multiple of 8, clamped to the WebGPU max
211
+ /** @internal */
225
212
  roundLayers(n) {
226
213
  return Math.min((Math.max(n, 8) + 7) & ~7, MAX_TEXTURE_ARRAY_LAYERS);
227
214
  }
215
+ /** @internal */
228
216
  createTextureArray(width, height, layers) {
229
217
  if (this.textureArray) {
230
218
  this.pendingDestroyTextures.push(this.textureArray);
@@ -242,7 +230,6 @@ export class WebGPURenderer {
242
230
  this.textureArrayHeight = h;
243
231
  this.textureArraySize = l;
244
232
  this.bindGroupDirty = true;
245
- // Clear all texture layers to transparent to prevent garbage border artifacts
246
233
  const commandEncoder = this.device.createCommandEncoder();
247
234
  for (let layer = 0; layer < l; layer++) {
248
235
  const layerView = this.textureArray.createView({
@@ -264,8 +251,8 @@ export class WebGPURenderer {
264
251
  }
265
252
  this.device.queue.submit([commandEncoder.finish()]);
266
253
  }
254
+ /** @internal */
267
255
  ensureTextureArray(maxWidth, maxHeight, count) {
268
- // Clamp count to max layers
269
256
  const clampedCount = Math.min(count, MAX_TEXTURE_ARRAY_LAYERS);
270
257
  if (maxWidth <= this.textureArrayWidth &&
271
258
  maxHeight <= this.textureArrayHeight &&
@@ -278,6 +265,7 @@ export class WebGPURenderer {
278
265
  this.createTextureArray(newWidth, newHeight, newLayers);
279
266
  return true;
280
267
  }
268
+ /** @internal */
281
269
  updateBindGroup() {
282
270
  if (!this.bindGroupDirty || !this.device || !this.bindGroupLayout)
283
271
  return;
@@ -291,6 +279,7 @@ export class WebGPURenderer {
291
279
  });
292
280
  this.bindGroupDirty = false;
293
281
  }
282
+ /** Bind `canvas` as the primary output and size the swap chain. */
294
283
  async setCanvas(canvas, width, height) {
295
284
  await this.init();
296
285
  if (!this.device)
@@ -316,6 +305,44 @@ export class WebGPURenderer {
316
305
  this.lastCanvasWidth = width;
317
306
  this.lastCanvasHeight = height;
318
307
  }
308
+ /**
309
+ * Render a prepared full-frame subtitle snapshot into its own WebGPU canvas.
310
+ * Keeping prepared frames on the selected backend avoids switching to a 2D
311
+ * compositor during playback (and lets Chromium keep one GPU overlay stack).
312
+ */
313
+ renderBitmapToCanvas(canvas, bitmap, width, height) {
314
+ if (!this.device || !this.pipeline || width <= 0 || height <= 0)
315
+ return false;
316
+ canvas.width = width;
317
+ canvas.height = height;
318
+ let context = this.stageContexts.get(canvas);
319
+ if (!context) {
320
+ context = canvas.getContext('webgpu');
321
+ if (!context)
322
+ return false;
323
+ context.configure({
324
+ device: this.device,
325
+ format: this.format,
326
+ alphaMode: 'premultiplied'
327
+ });
328
+ this.stageContexts.set(canvas, context);
329
+ }
330
+ return this.renderBitmapsToContext([{ image: bitmap, x: 0, y: 0 }], context, width, height);
331
+ }
332
+ /** Drop a staging canvas previously used with {@linkcode renderBitmapToCanvas}. */
333
+ releaseCanvas(canvas) {
334
+ const context = this.stageContexts.get(canvas);
335
+ if (!context)
336
+ return;
337
+ try {
338
+ context.unconfigure();
339
+ }
340
+ catch {
341
+ // Device loss can invalidate a context before DOM-stage cleanup.
342
+ }
343
+ this.stageContexts.delete(canvas);
344
+ }
345
+ /** Resize the primary canvas and uniform resolution. */
319
346
  updateSize(width, height) {
320
347
  if (!this.device || !this._canvas || width <= 0 || height <= 0)
321
348
  return;
@@ -329,22 +356,30 @@ export class WebGPURenderer {
329
356
  this.lastCanvasWidth = width;
330
357
  this.lastCanvasHeight = height;
331
358
  }
332
- /**
333
- * Render ImageBitmaps (async render mode)
334
- * Handles batching when image count exceeds MAX_TEXTURE_ARRAY_LAYERS
335
- */
336
- renderBitmaps(images, _canvasWidth, _canvasHeight) {
337
- if (!this.device || !this.context || !this.pipeline)
338
- return;
359
+ /** Composite `images` onto the primary canvas. Returns `false` if the context is missing. */
360
+ renderBitmaps(images, canvasWidth, canvasHeight) {
361
+ if (!this.context)
362
+ return false;
363
+ return this.renderBitmapsToContext(images, this.context, canvasWidth, canvasHeight);
364
+ }
365
+ /** Wait until submitted GPU work has finished. */
366
+ submittedWorkDone() {
367
+ return this.device?.queue.onSubmittedWorkDone() ?? Promise.resolve();
368
+ }
369
+ /** @internal */
370
+ renderBitmapsToContext(images, context, canvasWidth, canvasHeight) {
371
+ if (!this.device || !this.pipeline || canvasWidth <= 0 || canvasHeight <= 0)
372
+ return false;
373
+ this.resolutionArray[0] = canvasWidth;
374
+ this.resolutionArray[1] = canvasHeight;
375
+ this.device.queue.writeBuffer(this.uniformBuffer, 0, this.resolutionArray);
339
376
  const len = images.length;
340
377
  if (len === 0) {
341
- this.clear();
342
- return;
378
+ return this.clearContext(context);
343
379
  }
344
- const currentTexture = this.context.getCurrentTexture();
380
+ const currentTexture = context.getCurrentTexture();
345
381
  if (currentTexture.width === 0 || currentTexture.height === 0)
346
- return;
347
- // Single pass: find max dimensions and count valid images
382
+ return false;
348
383
  let maxW = 0, maxH = 0, validCount = 0;
349
384
  for (let i = 0; i < len; i++) {
350
385
  const { image } = images[i];
@@ -358,10 +393,8 @@ export class WebGPURenderer {
358
393
  }
359
394
  }
360
395
  if (validCount === 0) {
361
- this.clear();
362
- return;
396
+ return this.clearContext(context);
363
397
  }
364
- // Ensure texture array is large enough (capped at MAX_TEXTURE_ARRAY_LAYERS)
365
398
  const batchSize = Math.min(validCount, MAX_TEXTURE_ARRAY_LAYERS);
366
399
  this.ensureTextureArray(maxW, maxH, batchSize);
367
400
  this.updateBindGroup();
@@ -370,21 +403,19 @@ export class WebGPURenderer {
370
403
  const textureArray = this.textureArray;
371
404
  const imageDataArray = this.imageDataArray;
372
405
  const textureView = currentTexture.createView();
373
- // Process images in batches if needed
374
406
  let imageIndex = 0;
375
407
  let isFirstBatch = true;
408
+ let renderedAnyBatch = false;
376
409
  while (imageIndex < len) {
377
410
  let texIndex = 0;
378
- // Upload batch of textures
379
411
  while (imageIndex < len && texIndex < MAX_TEXTURE_ARRAY_LAYERS) {
380
412
  const img = images[imageIndex++];
381
413
  const bitmap = img.image;
382
414
  const w = bitmap.width, h = bitmap.height;
383
415
  if (w <= 0 || h <= 0)
384
416
  continue;
385
- // Copy to texture array layer
386
- queue.copyExternalImageToTexture({ source: bitmap, flipY: false }, { texture: textureArray, origin: [0, 0, texIndex], premultipliedAlpha: false }, { width: w, height: h });
387
- // Fill pre-allocated array
417
+ if (!this.uploadImageBitmap(texIndex, bitmap, w, h))
418
+ continue;
388
419
  const offset = texIndex << 3;
389
420
  imageDataArray[offset] = img.x;
390
421
  imageDataArray[offset + 1] = img.y;
@@ -398,7 +429,6 @@ export class WebGPURenderer {
398
429
  }
399
430
  if (texIndex === 0)
400
431
  continue;
401
- // Upload buffer and draw batch
402
432
  queue.writeBuffer(this.imageDataBuffer, 0, imageDataArray.buffer, 0, texIndex << 5);
403
433
  const commandEncoder = device.createCommandEncoder();
404
434
  const renderPass = commandEncoder.beginRenderPass({
@@ -417,25 +447,27 @@ export class WebGPURenderer {
417
447
  renderPass.end();
418
448
  queue.submit([commandEncoder.finish()]);
419
449
  isFirstBatch = false;
450
+ renderedAnyBatch = true;
420
451
  }
452
+ if (!renderedAnyBatch)
453
+ this.clearContext(context);
421
454
  this.cleanupPendingTextures();
455
+ return renderedAnyBatch;
422
456
  }
423
- /**
424
- * Render from raw ArrayBuffer data (non-async render mode)
425
- * Handles batching when image count exceeds MAX_TEXTURE_ARRAY_LAYERS
426
- */
457
+ /** Composite {@linkcode RenderImage} planes onto the primary canvas. */
427
458
  render(images, _canvasWidth, _canvasHeight) {
428
459
  if (!this.device || !this.context || !this.pipeline)
429
- return;
460
+ return false;
461
+ this.resolutionArray[0] = _canvasWidth;
462
+ this.resolutionArray[1] = _canvasHeight;
463
+ this.device.queue.writeBuffer(this.uniformBuffer, 0, this.resolutionArray);
430
464
  const len = images.length;
431
465
  if (len === 0) {
432
- this.clear();
433
- return;
466
+ return this.clear();
434
467
  }
435
468
  const currentTexture = this.context.getCurrentTexture();
436
469
  if (currentTexture.width === 0 || currentTexture.height === 0)
437
- return;
438
- // Single pass: find max dimensions and count valid images
470
+ return false;
439
471
  let maxW = 0, maxH = 0, validCount = 0;
440
472
  for (let i = 0; i < len; i++) {
441
473
  const { w, h } = images[i];
@@ -448,10 +480,8 @@ export class WebGPURenderer {
448
480
  }
449
481
  }
450
482
  if (validCount === 0) {
451
- this.clear();
452
- return;
483
+ return this.clear();
453
484
  }
454
- // Ensure texture array is large enough (capped at MAX_TEXTURE_ARRAY_LAYERS)
455
485
  const batchSize = Math.min(validCount, MAX_TEXTURE_ARRAY_LAYERS);
456
486
  this.ensureTextureArray(maxW, maxH, batchSize);
457
487
  this.updateBindGroup();
@@ -460,26 +490,29 @@ export class WebGPURenderer {
460
490
  const textureArray = this.textureArray;
461
491
  const imageDataArray = this.imageDataArray;
462
492
  const textureView = currentTexture.createView();
463
- // Process images in batches if needed
464
493
  let imageIndex = 0;
465
494
  let isFirstBatch = true;
495
+ let renderedAnyBatch = false;
466
496
  while (imageIndex < len) {
467
497
  let texIndex = 0;
468
- // Upload batch of textures
469
498
  while (imageIndex < len && texIndex < MAX_TEXTURE_ARRAY_LAYERS) {
470
499
  const img = images[imageIndex++];
471
500
  const w = img.w, h = img.h;
472
501
  if (w <= 0 || h <= 0)
473
502
  continue;
474
- // Upload texture data
475
503
  const imgData = img.image;
476
504
  if (imgData instanceof ImageBitmap) {
477
- queue.copyExternalImageToTexture({ source: imgData, flipY: false }, { texture: textureArray, origin: [0, 0, texIndex], premultipliedAlpha: false }, { width: w, height: h });
505
+ if (!this.uploadImageBitmap(texIndex, imgData, w, h))
506
+ continue;
478
507
  }
479
- else if (imgData instanceof ArrayBuffer || imgData instanceof Uint8Array || imgData instanceof Uint8ClampedArray) {
508
+ else if (imgData instanceof ArrayBuffer ||
509
+ imgData instanceof Uint8Array ||
510
+ imgData instanceof Uint8ClampedArray) {
480
511
  this.uploadTextureData(texIndex, imgData, w, h);
481
512
  }
482
- // Fill pre-allocated array
513
+ else {
514
+ continue;
515
+ }
483
516
  const offset = texIndex << 3;
484
517
  imageDataArray[offset] = img.x;
485
518
  imageDataArray[offset + 1] = img.y;
@@ -493,7 +526,6 @@ export class WebGPURenderer {
493
526
  }
494
527
  if (texIndex === 0)
495
528
  continue;
496
- // Upload buffer and draw batch
497
529
  queue.writeBuffer(this.imageDataBuffer, 0, imageDataArray.buffer, 0, texIndex << 5);
498
530
  const commandEncoder = device.createCommandEncoder();
499
531
  const renderPass = commandEncoder.beginRenderPass({
@@ -512,12 +544,60 @@ export class WebGPURenderer {
512
544
  renderPass.end();
513
545
  queue.submit([commandEncoder.finish()]);
514
546
  isFirstBatch = false;
547
+ renderedAnyBatch = true;
515
548
  }
549
+ if (!renderedAnyBatch)
550
+ this.clear();
516
551
  this.cleanupPendingTextures();
552
+ return renderedAnyBatch;
517
553
  }
554
+ /** @internal */
555
+ uploadImageBitmap(layerIndex, bitmap, width, height) {
556
+ try {
557
+ this.device.queue.copyExternalImageToTexture({ source: bitmap, flipY: false }, { texture: this.textureArray, origin: [0, 0, layerIndex], premultipliedAlpha: false }, { width, height });
558
+ return true;
559
+ }
560
+ catch (externalUploadError) {
561
+ try {
562
+ let canvas = this.externalUploadCanvas;
563
+ if (!canvas) {
564
+ canvas =
565
+ typeof OffscreenCanvas !== 'undefined'
566
+ ? new OffscreenCanvas(width, height)
567
+ : document.createElement('canvas');
568
+ this.externalUploadCanvas = canvas;
569
+ }
570
+ if (canvas.width !== width)
571
+ canvas.width = width;
572
+ if (canvas.height !== height)
573
+ canvas.height = height;
574
+ let context = this.externalUploadContext;
575
+ if (!context) {
576
+ context = canvas.getContext('2d', { alpha: true, willReadFrequently: true });
577
+ this.externalUploadContext = context;
578
+ }
579
+ if (!context)
580
+ return false;
581
+ context.clearRect(0, 0, width, height);
582
+ context.drawImage(bitmap, 0, 0);
583
+ this.uploadTextureData(layerIndex, context.getImageData(0, 0, width, height).data, width, height);
584
+ if (!this.warnedExternalUploadFallback) {
585
+ this.warnedExternalUploadFallback = true;
586
+ console.warn('[AkariSub] WebGPU external-image upload failed; using RGBA fallback.', externalUploadError);
587
+ }
588
+ return true;
589
+ }
590
+ catch (fallbackError) {
591
+ console.warn('[AkariSub] Failed to upload subtitle bitmap to WebGPU.', fallbackError);
592
+ return false;
593
+ }
594
+ }
595
+ }
596
+ /** @internal */
518
597
  uploadTextureData(layerIndex, rgbaBuffer, width, height) {
519
598
  this.device.queue.writeTexture({ texture: this.textureArray, origin: [0, 0, layerIndex] }, toUint8View(rgbaBuffer), { bytesPerRow: width * 4 }, { width, height });
520
599
  }
600
+ /** @internal */
521
601
  cleanupPendingTextures() {
522
602
  const pending = this.pendingDestroyTextures;
523
603
  const len = pending.length;
@@ -528,13 +608,20 @@ export class WebGPURenderer {
528
608
  }
529
609
  pending.length = 0;
530
610
  }
611
+ /** Clear the primary canvas to transparent black. */
531
612
  clear() {
532
613
  if (!this.device || !this.context)
533
- return;
614
+ return false;
615
+ return this.clearContext(this.context);
616
+ }
617
+ /** @internal */
618
+ clearContext(context) {
619
+ if (!this.device)
620
+ return false;
534
621
  try {
535
- const currentTexture = this.context.getCurrentTexture();
622
+ const currentTexture = context.getCurrentTexture();
536
623
  if (currentTexture.width === 0 || currentTexture.height === 0)
537
- return;
624
+ return false;
538
625
  const commandEncoder = this.device.createCommandEncoder();
539
626
  const renderPass = commandEncoder.beginRenderPass({
540
627
  colorAttachments: [
@@ -548,16 +635,28 @@ export class WebGPURenderer {
548
635
  });
549
636
  renderPass.end();
550
637
  this.device.queue.submit([commandEncoder.finish()]);
638
+ return true;
551
639
  }
552
640
  catch {
553
- // Ignore errors
641
+ return false;
554
642
  }
555
643
  }
644
+ /** True after {@linkcode init} has completed successfully. */
556
645
  get initialized() {
557
646
  return this._initialized;
558
647
  }
648
+ /** Release GPU resources and unconfigure all canvases. */
559
649
  destroy() {
560
650
  this.cleanupPendingTextures();
651
+ for (const context of this.stageContexts.values()) {
652
+ try {
653
+ context.unconfigure();
654
+ }
655
+ catch {
656
+ // Context can already be invalid after device loss.
657
+ }
658
+ }
659
+ this.stageContexts.clear();
561
660
  this.textureArray?.destroy();
562
661
  this.textureArray = null;
563
662
  this.textureArrayView = null;
@@ -570,6 +669,9 @@ export class WebGPURenderer {
570
669
  this.device = null;
571
670
  this.context = null;
572
671
  this._canvas = null;
672
+ this.externalUploadCanvas = null;
673
+ this.externalUploadContext = null;
674
+ this.warnedExternalUploadFallback = false;
573
675
  this._initialized = false;
574
676
  this._initPromise = null;
575
677
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webgpu-renderer.js","sourceRoot":"","sources":["../../src/ts/webgpu-renderer.ts"],"names":[],"mappings":"AAAA,uCAAuC;AAIvC,MAAM,oBAAoB,GAAG,GAAG,CAAA;AAEhC,MAAM,wBAAwB,GAAG,GAAG,CAAA;AAEpC,MAAM,aAAa,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoDhC,CAAA;AAED,MAAM,eAAe,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkClC,CAAA;AAED,4CAA4C;AAC5C,MAAM,UAAU,iBAAiB;IAC/B,OAAO,OAAO,SAAS,KAAK,WAAW,IAAI,KAAK,IAAI,SAAS,CAAA;AAC/D,CAAC;AAED,SAAS,WAAW,CAAC,IAAkD;IACrE,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;QAChC,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC;IAED,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;AACtE,CAAC;AAED,kEAAkE;AAClE,MAAM,OAAO,cAAc;IACjB,MAAM,GAAqB,IAAI,CAAA;IAC/B,OAAO,GAA4B,IAAI,CAAA;IACvC,aAAa,GAAG,IAAI,GAAG,EAAuC,CAAA;IAC9D,QAAQ,GAA6B,IAAI,CAAA;IACzC,eAAe,GAA8B,IAAI,CAAA;IAEjD,aAAa,GAAqB,IAAI,CAAA;IACtC,eAAe,GAAqB,IAAI,CAAA;IAExC,YAAY,GAAsB,IAAI,CAAA;IACtC,gBAAgB,GAA0B,IAAI,CAAA;IAC9C,gBAAgB,GAAG,CAAC,CAAA;IACpB,iBAAiB,GAAG,CAAC,CAAA;IACrB,kBAAkB,GAAG,CAAC,CAAA;IAEtB,sBAAsB,GAAiB,EAAE,CAAA;IACzC,oBAAoB,GAA+C,IAAI,CAAA;IACvE,qBAAqB,GAAwE,IAAI,CAAA;IACjG,4BAA4B,GAAG,KAAK,CAAA;IAE3B,cAAc,CAAc;IAC5B,eAAe,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAA;IAE9C,SAAS,GAAwB,IAAI,CAAA;IACrC,cAAc,GAAG,IAAI,CAAA;IAErB,eAAe,GAAG,CAAC,CAAA;IACnB,gBAAgB,GAAG,CAAC,CAAA;IAE5B,kEAAkE;IAClE,MAAM,GAAqB,YAAY,CAAA;IAE/B,OAAO,GAA6B,IAAI,CAAA;IACxC,YAAY,GAAyB,IAAI,CAAA;IACzC,YAAY,GAAG,KAAK,CAAA;IAE5B,2EAA2E;IAC3E;QACE,IAAI,CAAC,cAAc,GAAG,IAAI,YAAY,CAAC,oBAAoB,GAAG,CAAC,CAAC,CAAA;IAClE,CAAC;IAED,6DAA6D;IAC7D,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC,YAAY,CAAA;QAC/C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;QACtC,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;IAED,gBAAgB;IACR,KAAK,CAAC,WAAW;QACvB,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;QACzC,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC;YACjD,eAAe,EAAE,kBAAkB;SACpC,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;QAC5C,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,CAAA;QAC3C,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAA;QAEtD,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAA;QAC5E,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAA;QAEhF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;YAC5C,IAAI,EAAE,EAAE;YACR,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ;SACxD,CAAC,CAAA;QAEF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;YAC9C,IAAI,EAAE,oBAAoB,GAAG,CAAC,GAAG,CAAC;YAClC,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ;SACxD,CAAC,CAAA;QAEF,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAA;QAErC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC;YACvD,OAAO,EAAE;gBACP,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;gBAC9E;oBACE,OAAO,EAAE,CAAC;oBACV,UAAU,EAAE,cAAc,CAAC,MAAM,GAAG,cAAc,CAAC,QAAQ;oBAC3D,MAAM,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE;iBACtC;gBACD;oBACE,OAAO,EAAE,CAAC;oBACV,UAAU,EAAE,cAAc,CAAC,QAAQ;oBACnC,OAAO,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAAE,aAAa,EAAE,UAAU,EAAE;iBACzE;aACF;SACF,CAAC,CAAA;QAEF,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC;YACtD,gBAAgB,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC;SACzC,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC;YAC/C,MAAM,EAAE,cAAc;YACtB,MAAM,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE;YAC1D,QAAQ,EAAE;gBACR,MAAM,EAAE,cAAc;gBACtB,UAAU,EAAE,cAAc;gBAC1B,OAAO,EAAE;oBACP;wBACE,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,KAAK,EAAE;4BACL,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,qBAAqB,EAAE,SAAS,EAAE,KAAK,EAAE;4BAC/E,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,qBAAqB,EAAE,SAAS,EAAE,KAAK,EAAE;yBAChF;qBACF;iBACF;aACF;YACD,SAAS,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE;SACzC,CAAC,CAAA;QAEF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;IAC1B,CAAC;IAED,2EAA2E;IAC3E,uEAAuE;IACvE,4CAA4C;IAC5C,gBAAgB;IACR,QAAQ,CAAC,CAAS;QACxB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAA;IACrC,CAAC;IAED,gBAAgB;IACR,WAAW,CAAC,CAAS;QAC3B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAA;IACtE,CAAC;IAED,gBAAgB;IACR,kBAAkB,CAAC,KAAa,EAAE,MAAc,EAAE,MAAc;QACtE,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACrD,CAAC;QAED,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;QAElC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAO,CAAC,aAAa,CAAC;YAC7C,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,EAAE,YAAY;YACpB,KAAK,EAAE,eAAe,CAAC,eAAe,GAAG,eAAe,CAAC,QAAQ,GAAG,eAAe,CAAC,iBAAiB;SACtG,CAAC,CAAA;QACF,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAA;QAC/E,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAA;QAC1B,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAA;QAC3B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAA;QACzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;QAE1B,MAAM,cAAc,GAAG,IAAI,CAAC,MAAO,CAAC,oBAAoB,EAAE,CAAA;QAC1D,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YACvC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;gBAC7C,SAAS,EAAE,IAAI;gBACf,cAAc,EAAE,KAAK;gBACrB,eAAe,EAAE,CAAC;aACnB,CAAC,CAAA;YACF,MAAM,UAAU,GAAG,cAAc,CAAC,eAAe,CAAC;gBAChD,gBAAgB,EAAE;oBAChB;wBACE,IAAI,EAAE,SAAS;wBACf,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;wBACtC,MAAM,EAAE,OAAO;wBACf,OAAO,EAAE,OAAO;qBACjB;iBACF;aACF,CAAC,CAAA;YACF,UAAU,CAAC,GAAG,EAAE,CAAA;QAClB,CAAC;QACD,IAAI,CAAC,MAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtD,CAAC;IAED,gBAAgB;IACR,kBAAkB,CAAC,QAAgB,EAAE,SAAiB,EAAE,KAAa;QAC3E,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAA;QAE9D,IACE,QAAQ,IAAI,IAAI,CAAC,iBAAiB;YAClC,SAAS,IAAI,IAAI,CAAC,kBAAkB;YACpC,YAAY,IAAI,IAAI,CAAC,gBAAgB,EACrC,CAAC;YACD,OAAO,KAAK,CAAA;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAA;QAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAA;QAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAA;QAE7E,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;QACvD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,gBAAgB;IACR,eAAe;QACrB,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAM;QAEzE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;YAC3C,MAAM,EAAE,IAAI,CAAC,eAAe;YAC5B,OAAO,EAAE;gBACP,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,aAAc,EAAE,EAAE;gBACzD,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,eAAgB,EAAE,EAAE;gBAC3D,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,gBAAiB,EAAE;aACjD;SACF,CAAC,CAAA;QACF,IAAI,CAAC,cAAc,GAAG,KAAK,CAAA;IAC7B,CAAC;IAED,mEAAmE;IACnE,KAAK,CAAC,SAAS,CAAC,MAAyB,EAAE,KAAa,EAAE,MAAc;QACtE,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QAEjB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;QAClE,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC;YAAE,OAAM;QAErC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAA;QACpB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;QAEtB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;YAC1C,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;YAElE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;gBACrB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,SAAS,EAAE,eAAe;aAC3B,CAAC,CAAA;QACJ,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,KAAK,CAAA;QAC/B,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,MAAM,CAAA;QAChC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,aAAc,EAAE,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAA;QAE3E,IAAI,CAAC,eAAe,GAAG,KAAK,CAAA;QAC5B,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAA;IAChC,CAAC;IAED;;;;OAIG;IACH,oBAAoB,CAAC,MAAyB,EAAE,MAAmB,EAAE,KAAa,EAAE,MAAc;QAChG,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC;YAAE,OAAO,KAAK,CAAA;QAE7E,MAAM,CAAC,KAAK,GAAG,KAAK,CAAA;QACpB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;QACtB,IAAI,OAAO,GAAwC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACjF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;YACrC,IAAI,CAAC,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC1B,OAAO,CAAC,SAAS,CAAC;gBAChB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,SAAS,EAAE,eAAe;aAC3B,CAAC,CAAA;YACF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACzC,CAAC;QAED,OAAO,IAAI,CAAC,sBAAsB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;IAC7F,CAAC;IAED,mFAAmF;IACnF,aAAa,CAAC,MAAyB;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAC9C,IAAI,CAAC,OAAO;YAAE,OAAM;QACpB,IAAI,CAAC;YACH,OAAO,CAAC,WAAW,EAAE,CAAA;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,iEAAiE;QACnE,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACnC,CAAC;IAED,wDAAwD;IACxD,UAAU,CAAC,KAAa,EAAE,MAAc;QACtC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC;YAAE,OAAM;QACtE,IAAI,KAAK,KAAK,IAAI,CAAC,eAAe,IAAI,MAAM,KAAK,IAAI,CAAC,gBAAgB;YAAE,OAAM;QAE9E,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAA;QAC1B,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAA;QAC5B,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,KAAK,CAAA;QAC/B,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,MAAM,CAAA;QAChC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,aAAc,EAAE,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAA;QAE3E,IAAI,CAAC,eAAe,GAAG,KAAK,CAAA;QAC5B,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAA;IAChC,CAAC;IAED,6FAA6F;IAC7F,aAAa,CACX,MAAsD,EACtD,WAAmB,EACnB,YAAoB;QAEpB,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAA;QAC/B,OAAO,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,CAAA;IACrF,CAAC;IAED,kDAAkD;IAClD,iBAAiB;QACf,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,mBAAmB,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAA;IACtE,CAAC;IAED,gBAAgB;IACR,sBAAsB,CAC5B,MAAsD,EACtD,OAAyB,EACzB,WAAmB,EACnB,YAAoB;QAEpB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,WAAW,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC;YAAE,OAAO,KAAK,CAAA;QAEzF,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,WAAW,CAAA;QACrC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,YAAY,CAAA;QACtC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,aAAc,EAAE,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAA;QAE3E,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAA;QACzB,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;YACd,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;QACnC,CAAC;QAED,MAAM,cAAc,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAA;QAClD,IAAI,cAAc,CAAC,KAAK,KAAK,CAAC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAA;QAE3E,IAAI,IAAI,GAAG,CAAC,EACV,IAAI,GAAG,CAAC,EACR,UAAU,GAAG,CAAC,CAAA;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YAC3B,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,EACnB,CAAC,GAAG,KAAK,CAAC,MAAM,CAAA;YAClB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,IAAI;oBAAE,IAAI,GAAG,CAAC,CAAA;gBACtB,IAAI,CAAC,GAAG,IAAI;oBAAE,IAAI,GAAG,CAAC,CAAA;gBACtB,UAAU,EAAE,CAAA;YACd,CAAC;QACH,CAAC;QAED,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;QACnC,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,wBAAwB,CAAC,CAAA;QAChE,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAA;QAC9C,IAAI,CAAC,eAAe,EAAE,CAAA;QAEtB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;QAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,YAAa,CAAA;QACvC,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAA;QAC1C,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,EAAE,CAAA;QAE/C,IAAI,UAAU,GAAG,CAAC,CAAA;QAClB,IAAI,YAAY,GAAG,IAAI,CAAA;QACvB,IAAI,gBAAgB,GAAG,KAAK,CAAA;QAE5B,OAAO,UAAU,GAAG,GAAG,EAAE,CAAC;YACxB,IAAI,QAAQ,GAAG,CAAC,CAAA;YAEhB,OAAO,UAAU,GAAG,GAAG,IAAI,QAAQ,GAAG,wBAAwB,EAAE,CAAC;gBAC/D,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,CAAA;gBAChC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAA;gBACxB,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,EACpB,CAAC,GAAG,MAAM,CAAC,MAAM,CAAA;gBACnB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,SAAQ;gBAE9B,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;oBAAE,SAAQ;gBAE7D,MAAM,MAAM,GAAG,QAAQ,IAAI,CAAC,CAAA;gBAC5B,cAAc,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;gBAC9B,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;gBAClC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;gBAC9B,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;gBAC9B,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;gBAC9B,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;gBAC9B,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAA;gBACrC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;gBAE9B,QAAQ,EAAE,CAAA;YACZ,CAAC;YAED,IAAI,QAAQ,KAAK,CAAC;gBAAE,SAAQ;YAE5B,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,eAAgB,EAAE,CAAC,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAA;YAEpF,MAAM,cAAc,GAAG,MAAM,CAAC,oBAAoB,EAAE,CAAA;YACpD,MAAM,UAAU,GAAG,cAAc,CAAC,eAAe,CAAC;gBAChD,gBAAgB,EAAE;oBAChB;wBACE,IAAI,EAAE,WAAW;wBACjB,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;wBACtC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;wBACvC,OAAO,EAAE,OAAO;qBACjB;iBACF;aACF,CAAC,CAAA;YAEF,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACrC,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,SAAU,CAAC,CAAA;YAC3C,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;YAC5B,UAAU,CAAC,GAAG,EAAE,CAAA;YAEhB,KAAK,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACvC,YAAY,GAAG,KAAK,CAAA;YACpB,gBAAgB,GAAG,IAAI,CAAA;QACzB,CAAC;QAED,IAAI,CAAC,gBAAgB;YAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;QACjD,IAAI,CAAC,sBAAsB,EAAE,CAAA;QAC7B,OAAO,gBAAgB,CAAA;IACzB,CAAC;IAED,wEAAwE;IACxE,MAAM,CAAC,MAAqB,EAAE,YAAoB,EAAE,aAAqB;QACvE,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAA;QAEjE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,YAAY,CAAA;QACtC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,aAAa,CAAA;QACvC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,aAAc,EAAE,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAA;QAE3E,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAA;QACzB,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;YACd,OAAO,IAAI,CAAC,KAAK,EAAE,CAAA;QACrB,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAA;QACvD,IAAI,cAAc,CAAC,KAAK,KAAK,CAAC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAA;QAE3E,IAAI,IAAI,GAAG,CAAC,EACV,IAAI,GAAG,CAAC,EACR,UAAU,GAAG,CAAC,CAAA;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YAC1B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,IAAI;oBAAE,IAAI,GAAG,CAAC,CAAA;gBACtB,IAAI,CAAC,GAAG,IAAI;oBAAE,IAAI,GAAG,CAAC,CAAA;gBACtB,UAAU,EAAE,CAAA;YACd,CAAC;QACH,CAAC;QAED,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,KAAK,EAAE,CAAA;QACrB,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,wBAAwB,CAAC,CAAA;QAChE,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAA;QAC9C,IAAI,CAAC,eAAe,EAAE,CAAA;QAEtB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;QAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,YAAa,CAAA;QACvC,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAA;QAC1C,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,EAAE,CAAA;QAE/C,IAAI,UAAU,GAAG,CAAC,CAAA;QAClB,IAAI,YAAY,GAAG,IAAI,CAAA;QACvB,IAAI,gBAAgB,GAAG,KAAK,CAAA;QAE5B,OAAO,UAAU,GAAG,GAAG,EAAE,CAAC;YACxB,IAAI,QAAQ,GAAG,CAAC,CAAA;YAEhB,OAAO,UAAU,GAAG,GAAG,IAAI,QAAQ,GAAG,wBAAwB,EAAE,CAAC;gBAC/D,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,CAAA;gBAChC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,EACb,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;gBACX,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,SAAQ;gBAE9B,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAA;gBACzB,IAAI,OAAO,YAAY,WAAW,EAAE,CAAC;oBACnC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;wBAAE,SAAQ;gBAChE,CAAC;qBAAM,IACL,OAAO,YAAY,WAAW;oBAC9B,OAAO,YAAY,UAAU;oBAC7B,OAAO,YAAY,iBAAiB,EACpC,CAAC;oBACD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;gBACjD,CAAC;qBAAM,CAAC;oBACN,SAAQ;gBACV,CAAC;gBAED,MAAM,MAAM,GAAG,QAAQ,IAAI,CAAC,CAAA;gBAC5B,cAAc,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;gBAC9B,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;gBAClC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;gBAC9B,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;gBAC9B,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;gBAC9B,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;gBAC9B,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAA;gBACrC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;gBAE9B,QAAQ,EAAE,CAAA;YACZ,CAAC;YAED,IAAI,QAAQ,KAAK,CAAC;gBAAE,SAAQ;YAE5B,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,eAAgB,EAAE,CAAC,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAA;YAEpF,MAAM,cAAc,GAAG,MAAM,CAAC,oBAAoB,EAAE,CAAA;YACpD,MAAM,UAAU,GAAG,cAAc,CAAC,eAAe,CAAC;gBAChD,gBAAgB,EAAE;oBAChB;wBACE,IAAI,EAAE,WAAW;wBACjB,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;wBACtC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;wBACvC,OAAO,EAAE,OAAO;qBACjB;iBACF;aACF,CAAC,CAAA;YAEF,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACrC,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,SAAU,CAAC,CAAA;YAC3C,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;YAC5B,UAAU,CAAC,GAAG,EAAE,CAAA;YAEhB,KAAK,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACvC,YAAY,GAAG,KAAK,CAAA;YACpB,gBAAgB,GAAG,IAAI,CAAA;QACzB,CAAC;QAED,IAAI,CAAC,gBAAgB;YAAE,IAAI,CAAC,KAAK,EAAE,CAAA;QACnC,IAAI,CAAC,sBAAsB,EAAE,CAAA;QAC7B,OAAO,gBAAgB,CAAA;IACzB,CAAC;IAED,gBAAgB;IACR,iBAAiB,CAAC,UAAkB,EAAE,MAAmB,EAAE,KAAa,EAAE,MAAc;QAC9F,IAAI,CAAC;YACH,IAAI,CAAC,MAAO,CAAC,KAAK,CAAC,0BAA0B,CAC3C,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAChC,EAAE,OAAO,EAAE,IAAI,CAAC,YAAa,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,kBAAkB,EAAE,KAAK,EAAE,EACtF,EAAE,KAAK,EAAE,MAAM,EAAE,CAClB,CAAA;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,OAAO,mBAAmB,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,IAAI,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAA;gBACtC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM;wBACJ,OAAO,eAAe,KAAK,WAAW;4BACpC,CAAC,CAAC,IAAI,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC;4BACpC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;oBACtC,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAA;gBACpC,CAAC;gBACD,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK;oBAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAA;gBAChD,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM;oBAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;gBAEpD,IAAI,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAA;gBACxC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAGnE,CAAA;oBACR,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAA;gBACtC,CAAC;gBACD,IAAI,CAAC,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAE1B,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;gBACtC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;gBAC/B,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;gBAEjG,IAAI,CAAC,IAAI,CAAC,4BAA4B,EAAE,CAAC;oBACvC,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAA;oBACxC,OAAO,CAAC,IAAI,CAAC,sEAAsE,EAAE,mBAAmB,CAAC,CAAA;gBAC3G,CAAC;gBACD,OAAO,IAAI,CAAA;YACb,CAAC;YAAC,OAAO,aAAa,EAAE,CAAC;gBACvB,OAAO,CAAC,IAAI,CAAC,wDAAwD,EAAE,aAAa,CAAC,CAAA;gBACrF,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,gBAAgB;IACR,iBAAiB,CACvB,UAAkB,EAClB,UAAwD,EACxD,KAAa,EACb,MAAc;QAEd,IAAI,CAAC,MAAO,CAAC,KAAK,CAAC,YAAY,CAC7B,EAAE,OAAO,EAAE,IAAI,CAAC,YAAa,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,EAC3D,WAAW,CAAC,UAAU,CAAC,EACvB,EAAE,WAAW,EAAE,KAAK,GAAG,CAAC,EAAE,EAC1B,EAAE,KAAK,EAAE,MAAM,EAAE,CAClB,CAAA;IACH,CAAC;IAED,gBAAgB;IACR,sBAAsB;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAA;QAC3C,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAA;QAC1B,IAAI,GAAG,KAAK,CAAC;YAAE,OAAM;QAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;QACtB,CAAC;QACD,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA;IACpB,CAAC;IAED,qDAAqD;IACrD,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAA;QAE/C,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACxC,CAAC;IAED,gBAAgB;IACR,YAAY,CAAC,OAAyB;QAC5C,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAA;QAE9B,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAA;YAClD,IAAI,cAAc,CAAC,KAAK,KAAK,CAAC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAA;YAE3E,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAA;YACzD,MAAM,UAAU,GAAG,cAAc,CAAC,eAAe,CAAC;gBAChD,gBAAgB,EAAE;oBAChB;wBACE,IAAI,EAAE,cAAc,CAAC,UAAU,EAAE;wBACjC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;wBACtC,MAAM,EAAE,OAAO;wBACf,OAAO,EAAE,OAAO;qBACjB;iBACF;aACF,CAAC,CAAA;YACF,UAAU,CAAC,GAAG,EAAE,CAAA;YAChB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACnD,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,8DAA8D;IAC9D,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;IAED,0DAA0D;IAC1D,OAAO;QACL,IAAI,CAAC,sBAAsB,EAAE,CAAA;QAE7B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC;YAClD,IAAI,CAAC;gBACH,OAAO,CAAC,WAAW,EAAE,CAAA;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,oDAAoD;YACtD,CAAC;QACH,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAA;QAE1B,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,CAAA;QAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;QACxB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAA;QAE5B,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,CAAA;QAC7B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;QACzB,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,CAAA;QAC/B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;QAE3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QAErB,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAA;QACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QAClB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACnB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACnB,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAA;QAChC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAA;QACjC,IAAI,CAAC,4BAA4B,GAAG,KAAK,CAAA;QACzC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;QACzB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;IAC1B,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=worker.d.ts.map