edgeflowjs 0.1.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.
- package/README.md +473 -0
- package/dist/backends/index.d.ts +13 -0
- package/dist/backends/index.d.ts.map +1 -0
- package/dist/backends/index.js +32 -0
- package/dist/backends/index.js.map +1 -0
- package/dist/backends/onnx.d.ts +46 -0
- package/dist/backends/onnx.d.ts.map +1 -0
- package/dist/backends/onnx.js +249 -0
- package/dist/backends/onnx.js.map +1 -0
- package/dist/backends/wasm.d.ts +78 -0
- package/dist/backends/wasm.d.ts.map +1 -0
- package/dist/backends/wasm.js +358 -0
- package/dist/backends/wasm.js.map +1 -0
- package/dist/backends/webgpu.d.ts +143 -0
- package/dist/backends/webgpu.d.ts.map +1 -0
- package/dist/backends/webgpu.js +326 -0
- package/dist/backends/webgpu.js.map +1 -0
- package/dist/backends/webnn.d.ts +115 -0
- package/dist/backends/webnn.d.ts.map +1 -0
- package/dist/backends/webnn.js +202 -0
- package/dist/backends/webnn.js.map +1 -0
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +14 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/memory.d.ts +234 -0
- package/dist/core/memory.d.ts.map +1 -0
- package/dist/core/memory.js +554 -0
- package/dist/core/memory.js.map +1 -0
- package/dist/core/runtime.d.ts +129 -0
- package/dist/core/runtime.d.ts.map +1 -0
- package/dist/core/runtime.js +352 -0
- package/dist/core/runtime.js.map +1 -0
- package/dist/core/scheduler.d.ts +118 -0
- package/dist/core/scheduler.d.ts.map +1 -0
- package/dist/core/scheduler.js +600 -0
- package/dist/core/scheduler.js.map +1 -0
- package/dist/core/tensor.d.ts +149 -0
- package/dist/core/tensor.d.ts.map +1 -0
- package/dist/core/tensor.js +719 -0
- package/dist/core/tensor.js.map +1 -0
- package/dist/core/types.d.ts +367 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +54 -0
- package/dist/core/types.js.map +1 -0
- package/dist/edgeflow.browser.js +5601 -0
- package/dist/edgeflow.browser.js.map +7 -0
- package/dist/edgeflow.browser.min.js +19 -0
- package/dist/edgeflow.browser.min.js.map +7 -0
- package/dist/index.d.ts +71 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +158 -0
- package/dist/index.js.map +1 -0
- package/dist/pipelines/base.d.ts +122 -0
- package/dist/pipelines/base.d.ts.map +1 -0
- package/dist/pipelines/base.js +155 -0
- package/dist/pipelines/base.js.map +1 -0
- package/dist/pipelines/feature-extraction.d.ts +68 -0
- package/dist/pipelines/feature-extraction.d.ts.map +1 -0
- package/dist/pipelines/feature-extraction.js +197 -0
- package/dist/pipelines/feature-extraction.js.map +1 -0
- package/dist/pipelines/image-classification.d.ts +61 -0
- package/dist/pipelines/image-classification.d.ts.map +1 -0
- package/dist/pipelines/image-classification.js +140 -0
- package/dist/pipelines/image-classification.js.map +1 -0
- package/dist/pipelines/index.d.ts +58 -0
- package/dist/pipelines/index.d.ts.map +1 -0
- package/dist/pipelines/index.js +72 -0
- package/dist/pipelines/index.js.map +1 -0
- package/dist/pipelines/text-classification.d.ts +71 -0
- package/dist/pipelines/text-classification.d.ts.map +1 -0
- package/dist/pipelines/text-classification.js +175 -0
- package/dist/pipelines/text-classification.js.map +1 -0
- package/dist/tools/index.d.ts +143 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +294 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/utils/cache.d.ts +162 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +443 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +12 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/model-loader.d.ts +107 -0
- package/dist/utils/model-loader.d.ts.map +1 -0
- package/dist/utils/model-loader.js +694 -0
- package/dist/utils/model-loader.js.map +1 -0
- package/dist/utils/preprocessor.d.ts +147 -0
- package/dist/utils/preprocessor.d.ts.map +1 -0
- package/dist/utils/preprocessor.js +423 -0
- package/dist/utils/preprocessor.js.map +1 -0
- package/dist/utils/tokenizer.d.ts +140 -0
- package/dist/utils/tokenizer.d.ts.map +1 -0
- package/dist/utils/tokenizer.js +397 -0
- package/dist/utils/tokenizer.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* edgeFlow.js - ONNX Runtime Backend
|
|
3
|
+
*
|
|
4
|
+
* Uses onnxruntime-web for real ONNX model inference.
|
|
5
|
+
* Automatically loads ONNX Runtime from CDN when needed.
|
|
6
|
+
*/
|
|
7
|
+
import { EdgeFlowError, ErrorCodes, } from '../core/types.js';
|
|
8
|
+
import { LoadedModelImpl } from '../core/runtime.js';
|
|
9
|
+
import { EdgeFlowTensor } from '../core/tensor.js';
|
|
10
|
+
import { getMemoryManager } from '../core/memory.js';
|
|
11
|
+
// ONNX Runtime CDN configuration
|
|
12
|
+
const ONNX_VERSION = '1.17.0';
|
|
13
|
+
const ONNX_CDN_BASE = `https://cdn.jsdelivr.net/npm/onnxruntime-web@${ONNX_VERSION}/dist/`;
|
|
14
|
+
const ONNX_SCRIPT_URL = `${ONNX_CDN_BASE}ort.min.js`;
|
|
15
|
+
// Global ONNX Runtime reference (loaded dynamically)
|
|
16
|
+
let ort = null;
|
|
17
|
+
let ortLoadPromise = null;
|
|
18
|
+
/**
|
|
19
|
+
* Dynamically load ONNX Runtime from CDN
|
|
20
|
+
*/
|
|
21
|
+
async function loadONNXRuntime() {
|
|
22
|
+
// Return cached instance
|
|
23
|
+
if (ort)
|
|
24
|
+
return ort;
|
|
25
|
+
// Return existing load promise to avoid duplicate loading
|
|
26
|
+
if (ortLoadPromise)
|
|
27
|
+
return ortLoadPromise;
|
|
28
|
+
ortLoadPromise = new Promise((resolve, reject) => {
|
|
29
|
+
// Check if already loaded globally (e.g., via script tag)
|
|
30
|
+
if (typeof window !== 'undefined' && window.ort) {
|
|
31
|
+
ort = window.ort;
|
|
32
|
+
// Configure WASM paths
|
|
33
|
+
ort.env.wasm.wasmPaths = ONNX_CDN_BASE;
|
|
34
|
+
resolve(ort);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
// Dynamically load the script
|
|
38
|
+
const script = document.createElement('script');
|
|
39
|
+
script.src = ONNX_SCRIPT_URL;
|
|
40
|
+
script.async = true;
|
|
41
|
+
script.onload = () => {
|
|
42
|
+
if (window.ort) {
|
|
43
|
+
ort = window.ort;
|
|
44
|
+
// Configure WASM paths
|
|
45
|
+
ort.env.wasm.wasmPaths = ONNX_CDN_BASE;
|
|
46
|
+
console.log(`✓ ONNX Runtime v${ONNX_VERSION} loaded from CDN`);
|
|
47
|
+
resolve(ort);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
reject(new Error('ONNX Runtime loaded but ort global not found'));
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
script.onerror = () => {
|
|
54
|
+
reject(new Error(`Failed to load ONNX Runtime from ${ONNX_SCRIPT_URL}`));
|
|
55
|
+
};
|
|
56
|
+
document.head.appendChild(script);
|
|
57
|
+
});
|
|
58
|
+
return ortLoadPromise;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get ONNX Runtime instance (loads if needed)
|
|
62
|
+
*/
|
|
63
|
+
async function getOrt() {
|
|
64
|
+
if (!ort) {
|
|
65
|
+
ort = await loadONNXRuntime();
|
|
66
|
+
}
|
|
67
|
+
return ort;
|
|
68
|
+
}
|
|
69
|
+
const sessionStore = new Map();
|
|
70
|
+
// ============================================================================
|
|
71
|
+
// ONNX Runtime Implementation
|
|
72
|
+
// ============================================================================
|
|
73
|
+
/**
|
|
74
|
+
* ONNXRuntime - Real ONNX model inference using onnxruntime-web
|
|
75
|
+
* Automatically loads ONNX Runtime from CDN when first used.
|
|
76
|
+
*/
|
|
77
|
+
export class ONNXRuntime {
|
|
78
|
+
name = 'wasm'; // Register as wasm since it's the fallback
|
|
79
|
+
initialized = false;
|
|
80
|
+
executionProvider = 'wasm';
|
|
81
|
+
get capabilities() {
|
|
82
|
+
return {
|
|
83
|
+
concurrency: true,
|
|
84
|
+
quantization: true,
|
|
85
|
+
float16: this.executionProvider === 'webgpu',
|
|
86
|
+
dynamicShapes: true,
|
|
87
|
+
maxBatchSize: 32,
|
|
88
|
+
availableMemory: 512 * 1024 * 1024, // 512MB
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Check if ONNX Runtime is available (always true - will be loaded from CDN)
|
|
93
|
+
*/
|
|
94
|
+
async isAvailable() {
|
|
95
|
+
// Always return true - we'll load ONNX Runtime from CDN when needed
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Initialize the ONNX runtime (loads from CDN if needed)
|
|
100
|
+
*/
|
|
101
|
+
async initialize() {
|
|
102
|
+
if (this.initialized)
|
|
103
|
+
return;
|
|
104
|
+
// Load ONNX Runtime from CDN
|
|
105
|
+
const ortInstance = await getOrt();
|
|
106
|
+
// Configure WASM paths
|
|
107
|
+
ortInstance.env.wasm.wasmPaths = ONNX_CDN_BASE;
|
|
108
|
+
// Use WASM execution provider (most compatible)
|
|
109
|
+
this.executionProvider = 'wasm';
|
|
110
|
+
this.initialized = true;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Load a model from ArrayBuffer
|
|
114
|
+
*/
|
|
115
|
+
async loadModel(modelData, options = {}) {
|
|
116
|
+
if (!this.initialized) {
|
|
117
|
+
await this.initialize();
|
|
118
|
+
}
|
|
119
|
+
const ortInstance = await getOrt();
|
|
120
|
+
try {
|
|
121
|
+
// Create session options
|
|
122
|
+
const sessionOptions = {
|
|
123
|
+
executionProviders: [this.executionProvider],
|
|
124
|
+
graphOptimizationLevel: 'all',
|
|
125
|
+
};
|
|
126
|
+
// Create inference session (convert ArrayBuffer to Uint8Array)
|
|
127
|
+
const modelBytes = new Uint8Array(modelData);
|
|
128
|
+
const session = await ortInstance.InferenceSession.create(modelBytes, sessionOptions);
|
|
129
|
+
// Get input/output names
|
|
130
|
+
const inputNames = session.inputNames;
|
|
131
|
+
const outputNames = session.outputNames;
|
|
132
|
+
// Generate model ID
|
|
133
|
+
const modelId = `onnx_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;
|
|
134
|
+
// Store session
|
|
135
|
+
sessionStore.set(modelId, {
|
|
136
|
+
session,
|
|
137
|
+
inputNames: [...inputNames],
|
|
138
|
+
outputNames: [...outputNames],
|
|
139
|
+
});
|
|
140
|
+
// Create metadata
|
|
141
|
+
const metadata = {
|
|
142
|
+
name: options.metadata?.name ?? 'onnx-model',
|
|
143
|
+
version: '1.0.0',
|
|
144
|
+
inputs: inputNames.map(name => ({
|
|
145
|
+
name,
|
|
146
|
+
dtype: 'float32',
|
|
147
|
+
shape: [-1], // Dynamic shape
|
|
148
|
+
})),
|
|
149
|
+
outputs: outputNames.map(name => ({
|
|
150
|
+
name,
|
|
151
|
+
dtype: 'float32',
|
|
152
|
+
shape: [-1],
|
|
153
|
+
})),
|
|
154
|
+
sizeBytes: modelData.byteLength,
|
|
155
|
+
quantization: options.quantization ?? 'float32',
|
|
156
|
+
format: 'onnx',
|
|
157
|
+
};
|
|
158
|
+
// Create model instance
|
|
159
|
+
const model = new LoadedModelImpl(metadata, 'wasm', () => this.unloadModel(modelId));
|
|
160
|
+
// Override the ID to match our stored session
|
|
161
|
+
Object.defineProperty(model, 'id', { value: modelId, writable: false });
|
|
162
|
+
// Track in memory manager
|
|
163
|
+
getMemoryManager().trackModel(model, () => model.dispose());
|
|
164
|
+
return model;
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
throw new EdgeFlowError(`Failed to load ONNX model: ${error instanceof Error ? error.message : String(error)}`, ErrorCodes.MODEL_LOAD_FAILED, { error });
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Run inference
|
|
172
|
+
*/
|
|
173
|
+
async run(model, inputs) {
|
|
174
|
+
const sessionData = sessionStore.get(model.id);
|
|
175
|
+
if (!sessionData) {
|
|
176
|
+
throw new EdgeFlowError(`ONNX session not found for model ${model.id}`, ErrorCodes.MODEL_NOT_LOADED, { modelId: model.id });
|
|
177
|
+
}
|
|
178
|
+
const ortInstance = await getOrt();
|
|
179
|
+
const { session, inputNames, outputNames } = sessionData;
|
|
180
|
+
try {
|
|
181
|
+
// Prepare input feeds
|
|
182
|
+
const feeds = {};
|
|
183
|
+
for (let i = 0; i < Math.min(inputs.length, inputNames.length); i++) {
|
|
184
|
+
const inputName = inputNames[i];
|
|
185
|
+
const inputTensor = inputs[i];
|
|
186
|
+
if (inputName && inputTensor) {
|
|
187
|
+
// Convert to ONNX tensor with correct dtype
|
|
188
|
+
const dtype = inputTensor.dtype;
|
|
189
|
+
let ortTensor;
|
|
190
|
+
if (dtype === 'int64') {
|
|
191
|
+
// Get raw BigInt64Array data directly
|
|
192
|
+
const data = inputTensor.data;
|
|
193
|
+
ortTensor = new ortInstance.Tensor('int64', data, inputTensor.shape);
|
|
194
|
+
}
|
|
195
|
+
else if (dtype === 'int32') {
|
|
196
|
+
const data = inputTensor.data;
|
|
197
|
+
ortTensor = new ortInstance.Tensor('int32', data, inputTensor.shape);
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
const data = inputTensor.toFloat32Array();
|
|
201
|
+
ortTensor = new ortInstance.Tensor('float32', data, inputTensor.shape);
|
|
202
|
+
}
|
|
203
|
+
feeds[inputName] = ortTensor;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// Run inference
|
|
207
|
+
const results = await session.run(feeds);
|
|
208
|
+
// Convert outputs to EdgeFlowTensor
|
|
209
|
+
const outputs = [];
|
|
210
|
+
for (const outputName of outputNames) {
|
|
211
|
+
const ortTensor = results[outputName];
|
|
212
|
+
if (ortTensor) {
|
|
213
|
+
const data = ortTensor.data;
|
|
214
|
+
const shape = Array.from(ortTensor.dims).map(d => Number(d));
|
|
215
|
+
outputs.push(new EdgeFlowTensor(new Float32Array(data), shape, 'float32'));
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return outputs;
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
throw new EdgeFlowError(`ONNX inference failed: ${error instanceof Error ? error.message : String(error)}`, ErrorCodes.INFERENCE_FAILED, { modelId: model.id, error });
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Unload a model
|
|
226
|
+
*/
|
|
227
|
+
async unloadModel(modelId) {
|
|
228
|
+
const sessionData = sessionStore.get(modelId);
|
|
229
|
+
if (sessionData) {
|
|
230
|
+
// Release session will be handled by GC
|
|
231
|
+
sessionStore.delete(modelId);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Dispose the runtime
|
|
236
|
+
*/
|
|
237
|
+
dispose() {
|
|
238
|
+
// Clear all sessions
|
|
239
|
+
sessionStore.clear();
|
|
240
|
+
this.initialized = false;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Create ONNX runtime factory
|
|
245
|
+
*/
|
|
246
|
+
export function createONNXRuntime() {
|
|
247
|
+
return new ONNXRuntime();
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=onnx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onnx.js","sourceRoot":"","sources":["../../src/backends/onnx.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* edgeFlow.js - WebAssembly Backend
|
|
3
|
+
*
|
|
4
|
+
* Pure WASM runtime for universal browser support.
|
|
5
|
+
* Features:
|
|
6
|
+
* - Universal compatibility
|
|
7
|
+
* - SIMD acceleration when available
|
|
8
|
+
* - Memory-efficient execution
|
|
9
|
+
*/
|
|
10
|
+
import { Runtime, RuntimeType, RuntimeCapabilities, LoadedModel, ModelLoadOptions, Tensor } from '../core/types.js';
|
|
11
|
+
/**
|
|
12
|
+
* WASMRuntime - Pure WebAssembly inference runtime
|
|
13
|
+
*/
|
|
14
|
+
export declare class WASMRuntime implements Runtime {
|
|
15
|
+
readonly name: RuntimeType;
|
|
16
|
+
private module;
|
|
17
|
+
private simdSupported;
|
|
18
|
+
private models;
|
|
19
|
+
private initialized;
|
|
20
|
+
get capabilities(): RuntimeCapabilities;
|
|
21
|
+
/**
|
|
22
|
+
* Check if WASM is available
|
|
23
|
+
*/
|
|
24
|
+
isAvailable(): Promise<boolean>;
|
|
25
|
+
/**
|
|
26
|
+
* Initialize the WASM runtime
|
|
27
|
+
*/
|
|
28
|
+
initialize(): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Check SIMD support
|
|
31
|
+
*/
|
|
32
|
+
private checkSIMDSupport;
|
|
33
|
+
/**
|
|
34
|
+
* Create JavaScript fallback for WASM operations
|
|
35
|
+
*/
|
|
36
|
+
private createJSFallback;
|
|
37
|
+
/**
|
|
38
|
+
* Load a model
|
|
39
|
+
*/
|
|
40
|
+
loadModel(modelData: ArrayBuffer, options?: ModelLoadOptions): Promise<LoadedModel>;
|
|
41
|
+
/**
|
|
42
|
+
* Run inference
|
|
43
|
+
*/
|
|
44
|
+
run(model: LoadedModel, inputs: Tensor[]): Promise<Tensor[]>;
|
|
45
|
+
/**
|
|
46
|
+
* Execute model
|
|
47
|
+
*/
|
|
48
|
+
private executeModel;
|
|
49
|
+
/**
|
|
50
|
+
* Parse model configuration
|
|
51
|
+
*/
|
|
52
|
+
private parseModelConfig;
|
|
53
|
+
/**
|
|
54
|
+
* Load weights into WASM memory
|
|
55
|
+
*/
|
|
56
|
+
private loadWeights;
|
|
57
|
+
/**
|
|
58
|
+
* Unload a model
|
|
59
|
+
*/
|
|
60
|
+
private unloadModel;
|
|
61
|
+
/**
|
|
62
|
+
* Ensure runtime is initialized
|
|
63
|
+
*/
|
|
64
|
+
private ensureInitialized;
|
|
65
|
+
/**
|
|
66
|
+
* Check if SIMD is supported
|
|
67
|
+
*/
|
|
68
|
+
hasSIMDSupport(): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Dispose the runtime
|
|
71
|
+
*/
|
|
72
|
+
dispose(): void;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Create WASM runtime factory
|
|
76
|
+
*/
|
|
77
|
+
export declare function createWASMRuntime(): Runtime;
|
|
78
|
+
//# sourceMappingURL=wasm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm.d.ts","sourceRoot":"","sources":["../../src/backends/wasm.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,OAAO,EACP,WAAW,EACX,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAEhB,MAAM,EAGP,MAAM,kBAAkB,CAAC;AAqF1B;;GAEG;AACH,qBAAa,WAAY,YAAW,OAAO;IACzC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAU;IAEpC,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,MAAM,CAAyC;IACvD,OAAO,CAAC,WAAW,CAAS;IAE5B,IAAI,YAAY,IAAI,mBAAmB,CAStC;IAED;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAgBrC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBjC;;OAEG;YACW,gBAAgB;IAgB9B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAyGxB;;OAEG;IACG,SAAS,CACb,SAAS,EAAE,WAAW,EACtB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,WAAW,CAAC;IAmDvB;;OAEG;IACG,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAOlE;;OAEG;YACW,YAAY;IAwC1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgCxB;;OAEG;YACW,WAAW;IAQzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IASzB;;OAEG;IACH,cAAc,IAAI,OAAO;IAIzB;;OAEG;IACH,OAAO,IAAI,IAAI;CAShB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C"}
|