@fideus-labs/ngff-zarr 0.7.5 → 0.9.0

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 (36) hide show
  1. package/esm/browser-mod.d.ts +2 -2
  2. package/esm/browser-mod.d.ts.map +1 -1
  3. package/esm/browser-mod.js +2 -2
  4. package/esm/browser-mod.js.map +1 -1
  5. package/esm/io/itk_image_to_ngff_image.d.ts.map +1 -1
  6. package/esm/io/itk_image_to_ngff_image.js +15 -7
  7. package/esm/io/itk_image_to_ngff_image.js.map +1 -1
  8. package/esm/mod.d.ts +1 -1
  9. package/esm/mod.d.ts.map +1 -1
  10. package/esm/mod.js +1 -1
  11. package/esm/mod.js.map +1 -1
  12. package/esm/utils/compute_omero-shared.d.ts +12 -5
  13. package/esm/utils/compute_omero-shared.d.ts.map +1 -1
  14. package/esm/utils/compute_omero-shared.js +28 -0
  15. package/esm/utils/compute_omero-shared.js.map +1 -1
  16. package/esm/utils/compute_omero.d.ts +12 -40
  17. package/esm/utils/compute_omero.d.ts.map +1 -1
  18. package/esm/utils/compute_omero.js +336 -86
  19. package/esm/utils/compute_omero.js.map +1 -1
  20. package/esm/utils/omero_worker_rpc.d.ts +37 -0
  21. package/esm/utils/omero_worker_rpc.d.ts.map +1 -0
  22. package/esm/utils/omero_worker_rpc.js +156 -0
  23. package/esm/utils/omero_worker_rpc.js.map +1 -0
  24. package/esm/workers/omero_codec_worker.d.ts +2 -0
  25. package/esm/workers/omero_codec_worker.d.ts.map +1 -0
  26. package/esm/workers/omero_codec_worker.js +215 -0
  27. package/esm/workers/omero_codec_worker.js.map +1 -0
  28. package/package.json +2 -3
  29. package/esm/utils/compute_omero-browser.d.ts +0 -45
  30. package/esm/utils/compute_omero-browser.d.ts.map +0 -1
  31. package/esm/utils/compute_omero-browser.js +0 -253
  32. package/esm/utils/compute_omero-browser.js.map +0 -1
  33. package/esm/workers/compute_omero_worker.d.ts +0 -47
  34. package/esm/workers/compute_omero_worker.d.ts.map +0 -1
  35. package/esm/workers/compute_omero_worker.js +0 -113
  36. package/esm/workers/compute_omero_worker.js.map +0 -1
@@ -0,0 +1,156 @@
1
+ // SPDX-FileCopyrightText: Copyright (c) Fideus Labs LLC
2
+ // SPDX-License-Identifier: MIT
3
+ // Local typed array constructor lookup (avoids depending on fizarrita internals
4
+ // from the main thread — the worker uses fizarrita's version)
5
+ function get_ctr(data_type) {
6
+ const ctr = {
7
+ int8: Int8Array,
8
+ int16: Int16Array,
9
+ int32: Int32Array,
10
+ int64: globalThis.BigInt64Array,
11
+ uint8: Uint8Array,
12
+ uint16: Uint16Array,
13
+ uint32: Uint32Array,
14
+ uint64: globalThis.BigUint64Array,
15
+ float32: Float32Array,
16
+ float64: Float64Array,
17
+ }[data_type];
18
+ if (!ctr) {
19
+ throw new Error(`Unsupported data_type for worker codec: ${data_type}`);
20
+ }
21
+ return ctr;
22
+ }
23
+ class WorkerDispatcher {
24
+ worker;
25
+ pending = new Map();
26
+ /** Tracks which metaIds have been sent to this worker. */
27
+ sentMetas = new Set();
28
+ constructor(worker) {
29
+ this.worker = worker;
30
+ worker.addEventListener("message", this.onMessage);
31
+ worker.addEventListener("error", this.onError);
32
+ }
33
+ onMessage = (event) => {
34
+ const { id } = event.data;
35
+ const req = this.pending.get(id);
36
+ if (!req)
37
+ return;
38
+ this.pending.delete(id);
39
+ if (event.data.error) {
40
+ req.reject(new Error(event.data.error));
41
+ }
42
+ else {
43
+ req.resolve(event.data);
44
+ }
45
+ };
46
+ onError = (err) => {
47
+ const error = new Error(err.message ?? "Worker error");
48
+ for (const req of this.pending.values()) {
49
+ req.reject(error);
50
+ }
51
+ this.pending.clear();
52
+ };
53
+ send(id, message, transfer) {
54
+ return new Promise((resolve, reject) => {
55
+ this.pending.set(id, { resolve, reject });
56
+ this.worker.postMessage(message, transfer);
57
+ });
58
+ }
59
+ hasMeta(metaId) {
60
+ return this.sentMetas.has(metaId);
61
+ }
62
+ markMeta(metaId) {
63
+ this.sentMetas.add(metaId);
64
+ }
65
+ }
66
+ /** Map from Worker to its dispatcher. WeakMap so dispatchers are GC'd with workers. */
67
+ const dispatchers = new WeakMap();
68
+ function getDispatcher(worker) {
69
+ let d = dispatchers.get(worker);
70
+ if (!d) {
71
+ d = new WorkerDispatcher(worker);
72
+ dispatchers.set(worker, d);
73
+ }
74
+ return d;
75
+ }
76
+ // ---------------------------------------------------------------------------
77
+ // Meta ID registry — assigns stable IDs to unique codec metadata
78
+ // ---------------------------------------------------------------------------
79
+ let nextMetaId = 0;
80
+ const metaKeyToId = new Map();
81
+ const metaIdToMeta = new Map();
82
+ /**
83
+ * Get or create a stable metaId for the given codec metadata.
84
+ * Uses JSON.stringify as the dedup key — called once per unique array config.
85
+ */
86
+ export function getMetaId(meta) {
87
+ const key = JSON.stringify(meta);
88
+ let id = metaKeyToId.get(key);
89
+ if (id === undefined) {
90
+ id = nextMetaId++;
91
+ metaKeyToId.set(key, id);
92
+ metaIdToMeta.set(id, meta);
93
+ }
94
+ return id;
95
+ }
96
+ // ---------------------------------------------------------------------------
97
+ // Request ID
98
+ // ---------------------------------------------------------------------------
99
+ let nextRequestId = 0;
100
+ // ---------------------------------------------------------------------------
101
+ // Buffer transfer helpers
102
+ // ---------------------------------------------------------------------------
103
+ function prepareTransferBuffer(buffer, byteOffset, byteLength) {
104
+ // Always copy: store-fetched bytes may be cached/shared
105
+ return buffer.slice(byteOffset, byteOffset + byteLength);
106
+ }
107
+ // ---------------------------------------------------------------------------
108
+ // Ensure meta is initialized on the worker
109
+ // ---------------------------------------------------------------------------
110
+ async function ensureMeta(dispatcher, metaId) {
111
+ if (dispatcher.hasMeta(metaId))
112
+ return;
113
+ const meta = metaIdToMeta.get(metaId);
114
+ const id = nextRequestId++;
115
+ await dispatcher.send(id, { type: "init", id, metaId, meta }, []);
116
+ dispatcher.markMeta(metaId);
117
+ }
118
+ /**
119
+ * Send raw bytes to the omero codec worker for decoding AND per-channel
120
+ * statistics computation. Returns both the decoded chunk (for caching)
121
+ * and partial accumulators (for merging).
122
+ *
123
+ * @param worker - The Web Worker to send the message to
124
+ * @param bytes - Raw encoded chunk bytes from the store
125
+ * @param metaId - Stable ID for the codec metadata
126
+ * @param meta - Codec metadata for this array
127
+ * @param nChannels - Number of channels in the image
128
+ * @param cIndex - Index of the channel dimension (-1 if no channel dim)
129
+ * @param actualChunkShape - Edge chunk shape correction (optional)
130
+ * @returns The decoded chunk and per-channel accumulators
131
+ */
132
+ export async function workerDecodeAndStats(worker, bytes, metaId, meta, nChannels, cIndex, actualChunkShape) {
133
+ const dispatcher = getDispatcher(worker);
134
+ await ensureMeta(dispatcher, metaId);
135
+ const id = nextRequestId++;
136
+ const transferBuffer = prepareTransferBuffer(bytes.buffer, bytes.byteOffset, bytes.byteLength);
137
+ const response = (await dispatcher.send(id, {
138
+ type: "decode_and_stats",
139
+ id,
140
+ bytes: transferBuffer,
141
+ metaId,
142
+ actualChunkShape,
143
+ nChannels,
144
+ cIndex,
145
+ }, [transferBuffer]));
146
+ // Reconstruct the TypedArray from the transferred buffer
147
+ const Ctr = get_ctr(meta.data_type);
148
+ const data = new Ctr(response.data, 0, response.data.byteLength / Ctr.BYTES_PER_ELEMENT);
149
+ const chunk = {
150
+ data,
151
+ shape: response.shape,
152
+ stride: response.stride,
153
+ };
154
+ return { chunk, accumulators: response.accumulators };
155
+ }
156
+ //# sourceMappingURL=omero_worker_rpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omero_worker_rpc.js","sourceRoot":"","sources":["../../src/utils/omero_worker_rpc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=omero_codec_worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omero_codec_worker.d.ts","sourceRoot":"","sources":["../../src/workers/omero_codec_worker.ts"],"names":[],"mappings":""}
@@ -0,0 +1,215 @@
1
+ // SPDX-FileCopyrightText: Copyright (c) Fideus Labs LLC
2
+ // SPDX-License-Identifier: MIT
3
+ /**
4
+ * Custom Web Worker that extends fizarrita's codec worker with OMERO
5
+ * statistics computation.
6
+ *
7
+ * Handles all standard fizarrita codec messages (init, decode, decode_into,
8
+ * encode) PLUS a new `decode_and_stats` message that decodes a chunk AND
9
+ * computes per-channel statistics in a single round-trip.
10
+ *
11
+ * Message protocol (superset of fizarrita's codec-worker):
12
+ * init: → init_ok (register codec pipeline metadata)
13
+ * decode: → decoded (decode raw bytes, return chunk)
14
+ * decode_into: → decode_into_ok (decode into SharedArrayBuffer)
15
+ * encode: → encoded (encode chunk data)
16
+ * decode_and_stats: → decoded_and_stats (decode + compute channel stats)
17
+ */
18
+ // fizarrita internals for codec pipeline
19
+ import { create_codec_pipeline } from "@fideus-labs/fizarrita/internals/codec-pipeline";
20
+ import { compat_chunk, set_from_chunk_binary, } from "@fideus-labs/fizarrita/internals/setter";
21
+ import { get_ctr, get_strides } from "@fideus-labs/fizarrita/internals/util";
22
+ // ngff-zarr stats functions
23
+ import { createAccumulator, extractChannel, updateAccumulator, } from "../utils/compute_omero-shared.js";
24
+ // Use typeof self for cross-environment compatibility (Deno, Node.js, Browser workers)
25
+ // deno-lint-ignore no-explicit-any
26
+ const ctx = self;
27
+ // ---------------------------------------------------------------------------
28
+ // Edge chunk shape correction (same as fizarrita's codec-worker)
29
+ // ---------------------------------------------------------------------------
30
+ function fixEdgeChunkShapeStride(chunk, actualChunkShape) {
31
+ if (actualChunkShape) {
32
+ const expectedElements = actualChunkShape.reduce((a, b) => a * b, 1);
33
+ const actualElements = chunk.data.length;
34
+ if (actualElements === expectedElements) {
35
+ return {
36
+ data: chunk.data,
37
+ shape: actualChunkShape,
38
+ stride: get_strides(actualChunkShape, "C"),
39
+ };
40
+ }
41
+ }
42
+ return chunk;
43
+ }
44
+ // ---------------------------------------------------------------------------
45
+ // Codec pipeline cache — keyed by metaId
46
+ // ---------------------------------------------------------------------------
47
+ const pipelineByMetaId = new Map();
48
+ const metaByMetaId = new Map();
49
+ const pipelineByKey = new Map();
50
+ function getPipeline(metaId) {
51
+ const pipeline = pipelineByMetaId.get(metaId);
52
+ if (!pipeline) {
53
+ throw new Error(`No pipeline for metaId ${metaId}. Send an 'init' message first.`);
54
+ }
55
+ return pipeline;
56
+ }
57
+ function getOrCreatePipelineLegacy(meta) {
58
+ const key = JSON.stringify(meta);
59
+ let pipeline = pipelineByKey.get(key);
60
+ if (!pipeline) {
61
+ pipeline = create_codec_pipeline({
62
+ data_type: meta.data_type,
63
+ shape: meta.chunk_shape,
64
+ codecs: meta.codecs,
65
+ });
66
+ pipelineByKey.set(key, pipeline);
67
+ }
68
+ return pipeline;
69
+ }
70
+ ctx.addEventListener("message", async (event) => {
71
+ const msg = event.data;
72
+ try {
73
+ if (msg.type === "init") {
74
+ metaByMetaId.set(msg.metaId, msg.meta);
75
+ const pipeline = create_codec_pipeline({
76
+ data_type: msg.meta.data_type,
77
+ shape: msg.meta.chunk_shape,
78
+ codecs: msg.meta.codecs,
79
+ });
80
+ pipelineByMetaId.set(msg.metaId, pipeline);
81
+ ctx.postMessage({ type: "init_ok", id: msg.id });
82
+ return;
83
+ }
84
+ if (msg.type === "decode") {
85
+ const pipeline = msg.metaId !== undefined && pipelineByMetaId.has(msg.metaId)
86
+ ? getPipeline(msg.metaId)
87
+ : getOrCreatePipelineLegacy(msg.meta);
88
+ const bytes = new Uint8Array(msg.bytes);
89
+ let chunk = (await pipeline.decode(bytes));
90
+ chunk = fixEdgeChunkShapeStride(chunk, msg.actualChunkShape);
91
+ const dataView = chunk.data;
92
+ const buffer = dataView.buffer;
93
+ const byteOffset = dataView.byteOffset;
94
+ const byteLength = dataView.byteLength;
95
+ let transferBuffer;
96
+ if (byteOffset === 0 && byteLength === buffer.byteLength) {
97
+ transferBuffer = buffer;
98
+ }
99
+ else {
100
+ transferBuffer = buffer.slice(byteOffset, byteOffset + byteLength);
101
+ }
102
+ ctx.postMessage({
103
+ type: "decoded",
104
+ id: msg.id,
105
+ data: transferBuffer,
106
+ shape: chunk.shape,
107
+ stride: chunk.stride,
108
+ }, [transferBuffer]);
109
+ }
110
+ else if (msg.type === "decode_into") {
111
+ const pipeline = getPipeline(msg.metaId);
112
+ const bytes = new Uint8Array(msg.bytes);
113
+ let chunk = (await pipeline.decode(bytes));
114
+ chunk = fixEdgeChunkShapeStride(chunk, msg.actualChunkShape);
115
+ const destView = new Uint8Array(msg.output, 0, msg.outputByteLength);
116
+ // deno-lint-ignore no-explicit-any
117
+ const src = compat_chunk(chunk);
118
+ set_from_chunk_binary({ data: destView, stride: msg.outputStride }, src, msg.bytesPerElement, msg.projections);
119
+ ctx.postMessage({ type: "decode_into_ok", id: msg.id });
120
+ }
121
+ else if (msg.type === "encode") {
122
+ let pipeline;
123
+ let meta;
124
+ if (msg.metaId !== undefined && pipelineByMetaId.has(msg.metaId)) {
125
+ pipeline = getPipeline(msg.metaId);
126
+ meta = metaByMetaId.get(msg.metaId);
127
+ }
128
+ else {
129
+ meta = msg.meta;
130
+ pipeline = getOrCreatePipelineLegacy(meta);
131
+ }
132
+ const Ctr = get_ctr(meta.data_type);
133
+ const data = new Ctr(msg.data, 0, msg.data.byteLength / Ctr.BYTES_PER_ELEMENT);
134
+ const shape = meta.chunk_shape;
135
+ const stride = get_strides(shape, "C");
136
+ const chunk = { data, shape, stride };
137
+ // deno-lint-ignore no-explicit-any
138
+ const encoded = await pipeline.encode(chunk);
139
+ const transferBuffer = encoded.byteOffset === 0 &&
140
+ encoded.byteLength === encoded.buffer.byteLength
141
+ ? encoded.buffer
142
+ : encoded.buffer.slice(encoded.byteOffset, encoded.byteOffset + encoded.byteLength);
143
+ ctx.postMessage({
144
+ type: "encoded",
145
+ id: msg.id,
146
+ bytes: transferBuffer,
147
+ }, [transferBuffer]);
148
+ }
149
+ else if (msg.type === "decode_and_stats") {
150
+ // NEW: Decode chunk AND compute per-channel statistics in one pass
151
+ const pipeline = getPipeline(msg.metaId);
152
+ const bytes = new Uint8Array(msg.bytes);
153
+ let chunk = (await pipeline.decode(bytes));
154
+ chunk = fixEdgeChunkShapeStride(chunk, msg.actualChunkShape);
155
+ const chunkData = chunk.data;
156
+ const chunkShape = chunk.shape;
157
+ const { nChannels, cIndex } = msg;
158
+ // Compute per-channel statistics
159
+ const accumulators = [];
160
+ if (cIndex >= 0) {
161
+ // Multi-channel: extract each channel and compute stats
162
+ for (let ch = 0; ch < nChannels; ch++) {
163
+ const channelData = extractChannel(chunkData, chunkShape, ch, cIndex);
164
+ const acc = createAccumulator();
165
+ updateAccumulator(acc, channelData);
166
+ accumulators.push(acc);
167
+ }
168
+ }
169
+ else {
170
+ // Single channel: compute stats on full chunk data
171
+ const acc = createAccumulator();
172
+ updateAccumulator(acc, chunkData);
173
+ accumulators.push(acc);
174
+ }
175
+ // Transfer the decoded data buffer back for caching
176
+ const dataView = chunk.data;
177
+ const buffer = dataView.buffer;
178
+ const byteOffset = dataView.byteOffset;
179
+ const byteLength = dataView.byteLength;
180
+ let transferBuffer;
181
+ if (byteOffset === 0 && byteLength === buffer.byteLength) {
182
+ transferBuffer = buffer;
183
+ }
184
+ else {
185
+ transferBuffer = buffer.slice(byteOffset, byteOffset + byteLength);
186
+ }
187
+ ctx.postMessage({
188
+ type: "decoded_and_stats",
189
+ id: msg.id,
190
+ data: transferBuffer,
191
+ shape: chunk.shape,
192
+ stride: chunk.stride,
193
+ accumulators,
194
+ }, [transferBuffer]);
195
+ }
196
+ }
197
+ catch (error) {
198
+ // Send error back to main thread
199
+ const errorType = msg.type === "decode"
200
+ ? "decoded"
201
+ : msg.type === "encode"
202
+ ? "encoded"
203
+ : msg.type === "decode_into"
204
+ ? "decode_into_ok"
205
+ : msg.type === "decode_and_stats"
206
+ ? "decoded_and_stats"
207
+ : "init_ok";
208
+ ctx.postMessage({
209
+ type: errorType,
210
+ id: msg.id,
211
+ error: error instanceof Error ? error.message : String(error),
212
+ });
213
+ }
214
+ });
215
+ //# sourceMappingURL=omero_codec_worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omero_codec_worker.js","sourceRoot":"","sources":["../../src/workers/omero_codec_worker.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fideus-labs/ngff-zarr",
3
- "version": "0.7.5",
3
+ "version": "0.9.0",
4
4
  "description": "TypeScript implementation of ngff-zarr for reading and writing OME-Zarr files",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -69,10 +69,9 @@
69
69
  "LICENSE.txt"
70
70
  ],
71
71
  "dependencies": {
72
- "@fideus-labs/fizarrita": "^1.2.0",
72
+ "@fideus-labs/fizarrita": "^1.3.0",
73
73
  "@fideus-labs/worker-pool": "^1.0.0",
74
74
  "@itk-wasm/downsample": "^1.8.1",
75
- "comlink": "^4.4.2",
76
75
  "itk-wasm": "^1.0.0-b.196",
77
76
  "@zarrita/storage": "^0.1.4",
78
77
  "zod": "^4.0.2",
@@ -1,45 +0,0 @@
1
- import type { NgffImage } from "../types/ngff_image.js";
2
- import type { Multiscales } from "../types/multiscales.js";
3
- import type { Omero } from "../types/zarr_metadata.js";
4
- import { type ComputeOmeroFromMultiscalesOptions, type ComputeOmeroOptions } from "./compute_omero-shared.js";
5
- export { type ComputeOmeroFromMultiscalesOptions, type ComputeOmeroOptions, getDefaultColors, GLASBEY_COLORS, } from "./compute_omero-shared.js";
6
- /**
7
- * Compute OMERO metadata from an NgffImage using WebWorker.
8
- *
9
- * This function computes visualization parameters (OMERO metadata) from image data:
10
- * - min/max: The actual data range
11
- * - start/end: Display window based on quantiles (default 2% and 98%)
12
- *
13
- * For multi-channel images (with 'c' dimension), statistics are computed
14
- * separately for each channel, resulting in per-channel OMERO windows.
15
- *
16
- * The computation is performed in a WebWorker to avoid blocking the main thread.
17
- * If WebWorkers are not available, falls back to main thread computation.
18
- *
19
- * @param image - The NgffImage to compute metadata for
20
- * @param options - Optional configuration for quantiles, colors, and labels
21
- * @returns Promise resolving to Omero metadata with computed window parameters
22
- */
23
- export declare function computeOmeroFromNgffImage(image: NgffImage, options?: ComputeOmeroOptions): Promise<Omero>;
24
- /**
25
- * Compute OMERO metadata from a Multiscales object using WebWorker.
26
- *
27
- * This is a convenience function that computes OMERO metadata from the
28
- * highest or lowest resolution image in a multiscales pyramid.
29
- *
30
- * @param multiscales - The Multiscales object to compute metadata for
31
- * @param options - Optional configuration for quantiles, colors, labels, and resolution
32
- * @returns Promise resolving to Omero metadata with computed window parameters
33
- */
34
- export declare function computeOmeroFromMultiscales(multiscales: Multiscales, options?: ComputeOmeroFromMultiscalesOptions): Promise<Omero>;
35
- /**
36
- * Terminate the OMERO computation worker and release resources.
37
- * Call this when you're done with OMERO computations to free memory.
38
- */
39
- export declare function terminateOmeroWorker(): void;
40
- /**
41
- * Check if the OMERO computation will use a WebWorker.
42
- * Useful for testing or conditional logic.
43
- */
44
- export declare function isUsingWorker(): boolean;
45
- //# sourceMappingURL=compute_omero-browser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compute_omero-browser.d.ts","sourceRoot":"","sources":["../../src/utils/compute_omero-browser.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAEvD,OAAO,EAEL,KAAK,kCAAkC,EACvC,KAAK,mBAAmB,EAKzB,MAAM,2BAA2B,CAAC;AAInC,OAAO,EACL,KAAK,kCAAkC,EACvC,KAAK,mBAAmB,EACxB,gBAAgB,EAChB,cAAc,GACf,MAAM,2BAA2B,CAAC;AAsHnC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,SAAS,EAChB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,KAAK,CAAC,CA0FhB;AAED;;;;;;;;;GASG;AACH,wBAAsB,2BAA2B,CAC/C,WAAW,EAAE,WAAW,EACxB,OAAO,GAAE,kCAAuC,GAC/C,OAAO,CAAC,KAAK,CAAC,CAwBhB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAa3C;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC"}