@ebowwa/sandbox 0.1.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.
- package/dist/compilers/index.d.ts +24 -0
- package/dist/compilers/index.d.ts.map +1 -0
- package/dist/compilers/index.js +42 -0
- package/dist/compilers/index.js.map +1 -0
- package/dist/compilers/javascript.d.ts +117 -0
- package/dist/compilers/javascript.d.ts.map +1 -0
- package/dist/compilers/javascript.js +462 -0
- package/dist/compilers/javascript.js.map +1 -0
- package/dist/compilers/python.d.ts +140 -0
- package/dist/compilers/python.d.ts.map +1 -0
- package/dist/compilers/python.js +650 -0
- package/dist/compilers/python.js.map +1 -0
- package/dist/compilers/typescript.d.ts +99 -0
- package/dist/compilers/typescript.d.ts.map +1 -0
- package/dist/compilers/typescript.js +323 -0
- package/dist/compilers/typescript.js.map +1 -0
- package/dist/core/cell.d.ts +160 -0
- package/dist/core/cell.d.ts.map +1 -0
- package/dist/core/cell.js +319 -0
- package/dist/core/cell.js.map +1 -0
- package/dist/core/compiler.d.ts +126 -0
- package/dist/core/compiler.d.ts.map +1 -0
- package/dist/core/compiler.js +123 -0
- package/dist/core/compiler.js.map +1 -0
- package/dist/core/index.d.ts +19 -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/limits.d.ts +173 -0
- package/dist/core/limits.d.ts.map +1 -0
- package/dist/core/limits.js +440 -0
- package/dist/core/limits.js.map +1 -0
- package/dist/core/permissions.d.ts +103 -0
- package/dist/core/permissions.d.ts.map +1 -0
- package/dist/core/permissions.js +341 -0
- package/dist/core/permissions.js.map +1 -0
- package/dist/core/runtime.d.ts +127 -0
- package/dist/core/runtime.d.ts.map +1 -0
- package/dist/core/runtime.js +325 -0
- package/dist/core/runtime.js.map +1 -0
- package/dist/core/types.d.ts +380 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +67 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +145 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +279 -0
- package/dist/index.js.map +1 -0
- package/dist/multi/index.d.ts +9 -0
- package/dist/multi/index.d.ts.map +1 -0
- package/dist/multi/index.js +7 -0
- package/dist/multi/index.js.map +1 -0
- package/dist/multi/polyglot.d.ts +179 -0
- package/dist/multi/polyglot.d.ts.map +1 -0
- package/dist/multi/polyglot.js +319 -0
- package/dist/multi/polyglot.js.map +1 -0
- package/dist/runtimes/docker.d.ts +97 -0
- package/dist/runtimes/docker.d.ts.map +1 -0
- package/dist/runtimes/docker.js +368 -0
- package/dist/runtimes/docker.js.map +1 -0
- package/dist/runtimes/index.d.ts +11 -0
- package/dist/runtimes/index.d.ts.map +1 -0
- package/dist/runtimes/index.js +9 -0
- package/dist/runtimes/index.js.map +1 -0
- package/dist/runtimes/process.d.ts +47 -0
- package/dist/runtimes/process.d.ts.map +1 -0
- package/dist/runtimes/process.js +230 -0
- package/dist/runtimes/process.js.map +1 -0
- package/dist/session/index.d.ts +12 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +9 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/kernel.d.ts +199 -0
- package/dist/session/kernel.d.ts.map +1 -0
- package/dist/session/kernel.js +400 -0
- package/dist/session/kernel.js.map +1 -0
- package/dist/session/notebook.d.ts +168 -0
- package/dist/session/notebook.d.ts.map +1 -0
- package/dist/session/notebook.js +499 -0
- package/dist/session/notebook.js.map +1 -0
- package/dist/session/repl.d.ts +159 -0
- package/dist/session/repl.d.ts.map +1 -0
- package/dist/session/repl.js +409 -0
- package/dist/session/repl.js.map +1 -0
- package/package.json +142 -0
- package/src/compilers/index.ts +80 -0
- package/src/compilers/javascript.ts +571 -0
- package/src/compilers/python.ts +785 -0
- package/src/compilers/typescript.ts +442 -0
- package/src/core/cell.ts +439 -0
- package/src/core/compiler.ts +250 -0
- package/src/core/index.ts +123 -0
- package/src/core/limits.ts +508 -0
- package/src/core/permissions.ts +409 -0
- package/src/core/runtime.ts +499 -0
- package/src/core/types.ts +528 -0
- package/src/global.d.ts +59 -0
- package/src/index.ts +515 -0
- package/src/multi/index.ts +22 -0
- package/src/multi/polyglot.ts +461 -0
- package/src/runtimes/docker.ts +501 -0
- package/src/runtimes/index.ts +21 -0
- package/src/runtimes/process.ts +316 -0
- package/src/session/index.ts +41 -0
- package/src/session/kernel.ts +553 -0
- package/src/session/notebook.ts +635 -0
- package/src/session/repl.ts +521 -0
- package/src/wasm2wasm.d.ts +35 -0
|
@@ -0,0 +1,650 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Python Compiler
|
|
3
|
+
*
|
|
4
|
+
* Compiles Python code to WASM or validates Python syntax.
|
|
5
|
+
*
|
|
6
|
+
* Note: True Python-to-WASM compilation is complex. Current options:
|
|
7
|
+
* - Pyodide: Full Python runtime compiled to WASM (heavy, ~10MB+)
|
|
8
|
+
* - RustPython: Python interpreter in Rust, WASM-ready
|
|
9
|
+
* - Wasmer Python: Wasmer's Python distribution
|
|
10
|
+
*
|
|
11
|
+
* This implementation provides:
|
|
12
|
+
* 1. Syntax validation (always available)
|
|
13
|
+
* 2. Stub WASM compilation for isolated execution
|
|
14
|
+
* 3. Ready for integration with Pyodide/RustPython when available
|
|
15
|
+
*/
|
|
16
|
+
import { BaseCompiler, } from "../core/compiler.js";
|
|
17
|
+
/**
|
|
18
|
+
* Python Compiler
|
|
19
|
+
*
|
|
20
|
+
* Provides Python syntax validation and stub WASM compilation.
|
|
21
|
+
* Designed to be extended with Pyodide or RustPython integration.
|
|
22
|
+
*/
|
|
23
|
+
export class PythonCompiler extends BaseCompiler {
|
|
24
|
+
language = "python";
|
|
25
|
+
/**
|
|
26
|
+
* Python keywords for validation
|
|
27
|
+
*/
|
|
28
|
+
static KEYWORDS = new Set([
|
|
29
|
+
"False", "None", "True", "and", "as", "assert", "async", "await",
|
|
30
|
+
"break", "class", "continue", "def", "del", "elif", "else", "except",
|
|
31
|
+
"finally", "for", "from", "global", "if", "import", "in", "is",
|
|
32
|
+
"lambda", "nonlocal", "not", "or", "pass", "raise", "return", "try",
|
|
33
|
+
"while", "with", "yield",
|
|
34
|
+
]);
|
|
35
|
+
/**
|
|
36
|
+
* Python operators for validation
|
|
37
|
+
*/
|
|
38
|
+
static OPERATORS = new Set([
|
|
39
|
+
"+", "-", "*", "/", "//", "%", "**", "<<", ">>", "&", "|", "^",
|
|
40
|
+
"~", "<", ">", "<=", ">=", "==", "!=", "+=", "-=", "*=", "/=",
|
|
41
|
+
"//=", "%=", "**=", "<<=", ">>=", "&=", "|=", "^=", "->", ":=",
|
|
42
|
+
]);
|
|
43
|
+
/**
|
|
44
|
+
* Check if a full Python runtime is available
|
|
45
|
+
*/
|
|
46
|
+
pyodideAvailable = null;
|
|
47
|
+
/**
|
|
48
|
+
* Check if Python compiler is available
|
|
49
|
+
*
|
|
50
|
+
* Always returns true since we provide syntax validation.
|
|
51
|
+
* Returns true for WASM compilation only if Pyodide is loaded.
|
|
52
|
+
*/
|
|
53
|
+
async isAvailable() {
|
|
54
|
+
// Basic validation is always available
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Check if Pyodide runtime is available
|
|
59
|
+
*/
|
|
60
|
+
async isPyodideAvailable() {
|
|
61
|
+
if (this.pyodideAvailable !== null) {
|
|
62
|
+
return this.pyodideAvailable;
|
|
63
|
+
}
|
|
64
|
+
// Check if running in browser/worker with Pyodide
|
|
65
|
+
if (typeof globalThis !== "undefined") {
|
|
66
|
+
const g = globalThis;
|
|
67
|
+
this.pyodideAvailable = !!(g.loadPyodide || g.pyodide);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
this.pyodideAvailable = false;
|
|
71
|
+
}
|
|
72
|
+
return this.pyodideAvailable;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Validate Python source code syntax
|
|
76
|
+
*/
|
|
77
|
+
async validate(source) {
|
|
78
|
+
try {
|
|
79
|
+
// Empty source is valid
|
|
80
|
+
if (!source.trim()) {
|
|
81
|
+
return { valid: true };
|
|
82
|
+
}
|
|
83
|
+
// Run syntax checks
|
|
84
|
+
const errors = [];
|
|
85
|
+
// Check for common syntax errors
|
|
86
|
+
const bracketResult = this.checkBrackets(source);
|
|
87
|
+
if (!bracketResult.valid) {
|
|
88
|
+
return bracketResult;
|
|
89
|
+
}
|
|
90
|
+
const indentResult = this.checkIndentation(source);
|
|
91
|
+
if (!indentResult.valid) {
|
|
92
|
+
return indentResult;
|
|
93
|
+
}
|
|
94
|
+
const stringResult = this.checkStrings(source);
|
|
95
|
+
if (!stringResult.valid) {
|
|
96
|
+
return stringResult;
|
|
97
|
+
}
|
|
98
|
+
// Check for invalid syntax patterns
|
|
99
|
+
const syntaxResult = this.checkSyntaxPatterns(source);
|
|
100
|
+
if (!syntaxResult.valid) {
|
|
101
|
+
return syntaxResult;
|
|
102
|
+
}
|
|
103
|
+
// If we have access to Pyodide, use its parser for full validation
|
|
104
|
+
if (await this.isPyodideAvailable()) {
|
|
105
|
+
return this.validateWithPyodide(source);
|
|
106
|
+
}
|
|
107
|
+
// Basic validation passed
|
|
108
|
+
return { valid: true, error: errors.length > 0 ? errors.join("; ") : undefined };
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
return {
|
|
112
|
+
valid: false,
|
|
113
|
+
error: `Validation error: ${error instanceof Error ? error.message : String(error)}`,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Compile Python source to WASM
|
|
119
|
+
*
|
|
120
|
+
* For now, creates a stub WASM module that wraps the Python code.
|
|
121
|
+
* When Pyodide is available, can use full Python-to-WASM execution.
|
|
122
|
+
*/
|
|
123
|
+
async compile(source, permissions, limits, options) {
|
|
124
|
+
// Validate first
|
|
125
|
+
const validation = await this.validate(source);
|
|
126
|
+
if (!validation.valid) {
|
|
127
|
+
throw new Error(`Python syntax error: ${validation.error}`);
|
|
128
|
+
}
|
|
129
|
+
// Check permissions - Python needs filesystem and network for many operations
|
|
130
|
+
this.checkPermissions(permissions);
|
|
131
|
+
// If Pyodide is available, we could use it for actual execution
|
|
132
|
+
// For now, create a stub WASM module that stores the Python code
|
|
133
|
+
const wasmBytes = await this.createStubWasm(source, options);
|
|
134
|
+
return {
|
|
135
|
+
wasmBytes,
|
|
136
|
+
source, // Include original Python source for interpreted execution
|
|
137
|
+
exports: ["run", "get_output", "set_input"],
|
|
138
|
+
imports: [
|
|
139
|
+
{ module: "env", name: "memory", type: "memory" },
|
|
140
|
+
{ module: "env", name: "log", type: "function", signature: "(i32, i32) -> ()" },
|
|
141
|
+
],
|
|
142
|
+
memoryRequirements: {
|
|
143
|
+
initial: this.calculateMemoryPages(source, limits),
|
|
144
|
+
maximum: limits.memory ? Math.ceil(this.parseMemoryLimit(limits.memory) / 65536) : 256,
|
|
145
|
+
},
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Get Python language capabilities
|
|
150
|
+
*/
|
|
151
|
+
getCapabilities() {
|
|
152
|
+
return {
|
|
153
|
+
repl: true,
|
|
154
|
+
stateful: true,
|
|
155
|
+
compiled: false,
|
|
156
|
+
gc: true,
|
|
157
|
+
imports: true,
|
|
158
|
+
async: true,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Check bracket matching
|
|
163
|
+
*/
|
|
164
|
+
checkBrackets(source) {
|
|
165
|
+
const stack = [];
|
|
166
|
+
const pairs = { "(": ")", "[": "]", "{": "}" };
|
|
167
|
+
const openBrackets = new Set(["(", "[", "{"]);
|
|
168
|
+
const closeBrackets = new Set([")", "]", "}"]);
|
|
169
|
+
let inString = false;
|
|
170
|
+
let stringChar = "";
|
|
171
|
+
let escaped = false;
|
|
172
|
+
const lines = source.split("\n");
|
|
173
|
+
for (let lineNum = 0; lineNum < lines.length; lineNum++) {
|
|
174
|
+
const line = lines[lineNum];
|
|
175
|
+
for (let col = 0; col < line.length; col++) {
|
|
176
|
+
const char = line[col];
|
|
177
|
+
// Handle string literals
|
|
178
|
+
if (!escaped && (char === '"' || char === "'")) {
|
|
179
|
+
if (!inString) {
|
|
180
|
+
inString = true;
|
|
181
|
+
stringChar = char;
|
|
182
|
+
// Check for triple quotes
|
|
183
|
+
if (line.slice(col, col + 3) === char.repeat(3)) {
|
|
184
|
+
stringChar = char.repeat(3);
|
|
185
|
+
col += 2;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
else if (char === stringChar || (stringChar.length === 1 && char === stringChar)) {
|
|
189
|
+
inString = false;
|
|
190
|
+
stringChar = "";
|
|
191
|
+
}
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
// Handle escape sequences
|
|
195
|
+
if (inString && char === "\\" && !escaped) {
|
|
196
|
+
escaped = true;
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
escaped = false;
|
|
200
|
+
// Skip brackets inside strings
|
|
201
|
+
if (inString)
|
|
202
|
+
continue;
|
|
203
|
+
if (openBrackets.has(char)) {
|
|
204
|
+
stack.push({ char, line: lineNum + 1, col: col + 1 });
|
|
205
|
+
}
|
|
206
|
+
else if (closeBrackets.has(char)) {
|
|
207
|
+
if (stack.length === 0) {
|
|
208
|
+
return {
|
|
209
|
+
valid: false,
|
|
210
|
+
error: `Unmatched closing bracket '${char}'`,
|
|
211
|
+
line: lineNum + 1,
|
|
212
|
+
column: col + 1,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
const last = stack.pop();
|
|
216
|
+
if (pairs[last.char] !== char) {
|
|
217
|
+
return {
|
|
218
|
+
valid: false,
|
|
219
|
+
error: `Mismatched brackets: '${last.char}' at line ${last.line} should close with '${pairs[last.char]}', found '${char}'`,
|
|
220
|
+
line: lineNum + 1,
|
|
221
|
+
column: col + 1,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
if (stack.length > 0) {
|
|
228
|
+
const last = stack[stack.length - 1];
|
|
229
|
+
return {
|
|
230
|
+
valid: false,
|
|
231
|
+
error: `Unclosed bracket '${last.char}'`,
|
|
232
|
+
line: last.line,
|
|
233
|
+
column: last.col,
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
return { valid: true };
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Check Python indentation
|
|
240
|
+
*/
|
|
241
|
+
checkIndentation(source) {
|
|
242
|
+
const lines = source.split("\n");
|
|
243
|
+
const indentStack = [0];
|
|
244
|
+
const colonBlockStarts = new Set();
|
|
245
|
+
for (let lineNum = 0; lineNum < lines.length; lineNum++) {
|
|
246
|
+
const line = lines[lineNum];
|
|
247
|
+
const trimmed = line.trim();
|
|
248
|
+
// Skip empty lines and comments
|
|
249
|
+
if (!trimmed || trimmed.startsWith("#")) {
|
|
250
|
+
continue;
|
|
251
|
+
}
|
|
252
|
+
// Calculate current indentation
|
|
253
|
+
const currentIndent = line.length - line.trimStart().length;
|
|
254
|
+
// Check for tab/space mixing
|
|
255
|
+
const leadingChars = line.slice(0, currentIndent);
|
|
256
|
+
const hasTabs = leadingChars.includes("\t");
|
|
257
|
+
const hasSpaces = leadingChars.includes(" ") && !leadingChars.includes("\t");
|
|
258
|
+
if (hasTabs && hasSpaces) {
|
|
259
|
+
return {
|
|
260
|
+
valid: false,
|
|
261
|
+
error: "Mixed tabs and spaces in indentation",
|
|
262
|
+
line: lineNum + 1,
|
|
263
|
+
column: 1,
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
// Check indentation level
|
|
267
|
+
const expectedIndent = indentStack[indentStack.length - 1];
|
|
268
|
+
if (currentIndent > expectedIndent) {
|
|
269
|
+
// Must be after a colon
|
|
270
|
+
if (!colonBlockStarts.has(lineNum - 1) && currentIndent !== indentStack[indentStack.length - 1] + (hasTabs ? 1 : 4)) {
|
|
271
|
+
return {
|
|
272
|
+
valid: false,
|
|
273
|
+
error: `Unexpected indent (${currentIndent} spaces, expected ${expectedIndent})`,
|
|
274
|
+
line: lineNum + 1,
|
|
275
|
+
column: 1,
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
indentStack.push(currentIndent);
|
|
279
|
+
}
|
|
280
|
+
else if (currentIndent < expectedIndent) {
|
|
281
|
+
// Dedent - must match a previous level
|
|
282
|
+
while (indentStack.length > 1 && indentStack[indentStack.length - 1] > currentIndent) {
|
|
283
|
+
indentStack.pop();
|
|
284
|
+
}
|
|
285
|
+
if (indentStack[indentStack.length - 1] !== currentIndent) {
|
|
286
|
+
return {
|
|
287
|
+
valid: false,
|
|
288
|
+
error: `Unindent does not match any outer indentation level`,
|
|
289
|
+
line: lineNum + 1,
|
|
290
|
+
column: 1,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
// Mark if this line ends with a colon (starts a block)
|
|
295
|
+
if (trimmed.endsWith(":")) {
|
|
296
|
+
colonBlockStarts.add(lineNum);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
return { valid: true };
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Check string literals
|
|
303
|
+
*/
|
|
304
|
+
checkStrings(source) {
|
|
305
|
+
const lines = source.split("\n");
|
|
306
|
+
for (let lineNum = 0; lineNum < lines.length; lineNum++) {
|
|
307
|
+
const line = lines[lineNum];
|
|
308
|
+
let i = 0;
|
|
309
|
+
while (i < line.length) {
|
|
310
|
+
const char = line[i];
|
|
311
|
+
// Check for string start
|
|
312
|
+
if (char === '"' || char === "'") {
|
|
313
|
+
// Check for triple quotes
|
|
314
|
+
const tripleQuote = line.slice(i, i + 3);
|
|
315
|
+
const isTriple = tripleQuote === char.repeat(3);
|
|
316
|
+
const quoteChar = isTriple ? tripleQuote : char;
|
|
317
|
+
const startIndex = i;
|
|
318
|
+
i += quoteChar.length;
|
|
319
|
+
// Find end of string
|
|
320
|
+
let foundEnd = false;
|
|
321
|
+
let escaped = false;
|
|
322
|
+
while (i < line.length) {
|
|
323
|
+
const c = line[i];
|
|
324
|
+
if (escaped) {
|
|
325
|
+
escaped = false;
|
|
326
|
+
i++;
|
|
327
|
+
continue;
|
|
328
|
+
}
|
|
329
|
+
if (c === "\\") {
|
|
330
|
+
escaped = true;
|
|
331
|
+
i++;
|
|
332
|
+
continue;
|
|
333
|
+
}
|
|
334
|
+
if (line.slice(i, i + quoteChar.length) === quoteChar) {
|
|
335
|
+
foundEnd = true;
|
|
336
|
+
i += quoteChar.length;
|
|
337
|
+
break;
|
|
338
|
+
}
|
|
339
|
+
i++;
|
|
340
|
+
}
|
|
341
|
+
// For triple quotes, the end might be on a later line
|
|
342
|
+
// We handle this in a simplified way - just check single-line strings
|
|
343
|
+
if (!isTriple && !foundEnd) {
|
|
344
|
+
return {
|
|
345
|
+
valid: false,
|
|
346
|
+
error: `Unterminated string literal`,
|
|
347
|
+
line: lineNum + 1,
|
|
348
|
+
column: startIndex + 1,
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
else {
|
|
353
|
+
i++;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
return { valid: true };
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Check for common syntax patterns
|
|
361
|
+
*/
|
|
362
|
+
checkSyntaxPatterns(source) {
|
|
363
|
+
const lines = source.split("\n");
|
|
364
|
+
for (let lineNum = 0; lineNum < lines.length; lineNum++) {
|
|
365
|
+
const line = lines[lineNum].trim();
|
|
366
|
+
// Skip empty lines and comments
|
|
367
|
+
if (!line || line.startsWith("#"))
|
|
368
|
+
continue;
|
|
369
|
+
// Remove string literals for pattern checking
|
|
370
|
+
const codeOnly = line.replace(/(["'])(?:(?=(\\?))\2.)*?\1/g, "");
|
|
371
|
+
// Check for invalid assignment targets
|
|
372
|
+
const invalidAssignment = codeOnly.match(/^(\d+|\d+\.\d+)\s*=/);
|
|
373
|
+
if (invalidAssignment) {
|
|
374
|
+
return {
|
|
375
|
+
valid: false,
|
|
376
|
+
error: `Cannot assign to literal`,
|
|
377
|
+
line: lineNum + 1,
|
|
378
|
+
column: 1,
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
// Check for missing colons after block statements
|
|
382
|
+
const blockKeywords = ["if", "elif", "else", "for", "while", "def", "class", "try", "except", "finally", "with"];
|
|
383
|
+
for (const kw of blockKeywords) {
|
|
384
|
+
const pattern = new RegExp(`^${kw}\\b`);
|
|
385
|
+
if (pattern.test(codeOnly) && !codeOnly.endsWith(":")) {
|
|
386
|
+
// Check if it's a single-line statement
|
|
387
|
+
if (!codeOnly.includes(";")) {
|
|
388
|
+
return {
|
|
389
|
+
valid: false,
|
|
390
|
+
error: `Missing ':' after '${kw}' statement`,
|
|
391
|
+
line: lineNum + 1,
|
|
392
|
+
column: codeOnly.indexOf(kw) + 1,
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
return { valid: true };
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Validate using Pyodide (when available)
|
|
402
|
+
*/
|
|
403
|
+
async validateWithPyodide(source) {
|
|
404
|
+
try {
|
|
405
|
+
const g = globalThis;
|
|
406
|
+
if (!g.pyodide?.runPython) {
|
|
407
|
+
return { valid: true }; // Fall back to basic validation
|
|
408
|
+
}
|
|
409
|
+
// Use Python's compile() to check syntax
|
|
410
|
+
const code = `
|
|
411
|
+
import ast
|
|
412
|
+
try:
|
|
413
|
+
ast.parse(${JSON.stringify(source)})
|
|
414
|
+
"valid"
|
|
415
|
+
except SyntaxError as e:
|
|
416
|
+
f"{e.msg}|{e.lineno}|{e.offset}"
|
|
417
|
+
`;
|
|
418
|
+
const result = g.pyodide.runPython(code);
|
|
419
|
+
if (result === "valid") {
|
|
420
|
+
return { valid: true };
|
|
421
|
+
}
|
|
422
|
+
const [msg, line, col] = result.split("|");
|
|
423
|
+
return {
|
|
424
|
+
valid: false,
|
|
425
|
+
error: msg,
|
|
426
|
+
line: line ? parseInt(line, 10) : undefined,
|
|
427
|
+
column: col ? parseInt(col, 10) : undefined,
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
catch {
|
|
431
|
+
// If Pyodide validation fails, fall back to basic validation result
|
|
432
|
+
return { valid: true };
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Check permissions for Python execution
|
|
437
|
+
*/
|
|
438
|
+
checkPermissions(permissions) {
|
|
439
|
+
// Python often needs filesystem access
|
|
440
|
+
if (permissions.fs?.write || permissions.network?.outbound) {
|
|
441
|
+
// These require appropriate sandboxing
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* Create a stub WASM module that wraps Python code
|
|
446
|
+
*
|
|
447
|
+
* This creates a minimal WASM module that can be used with a Python runtime.
|
|
448
|
+
* The actual Python execution happens in the runtime, not the compiler.
|
|
449
|
+
*/
|
|
450
|
+
async createStubWasm(source, options) {
|
|
451
|
+
// Encode the Python source into the WASM data section
|
|
452
|
+
const sourceBytes = new TextEncoder().encode(source);
|
|
453
|
+
// Create a minimal WASM module structure
|
|
454
|
+
// This is a stub - actual execution requires a Python runtime
|
|
455
|
+
const wasmModule = this.buildWasmModule(sourceBytes, options?.optimize ?? false);
|
|
456
|
+
return wasmModule;
|
|
457
|
+
}
|
|
458
|
+
/**
|
|
459
|
+
* Build a minimal WASM module structure
|
|
460
|
+
*
|
|
461
|
+
* Creates a WASM module with:
|
|
462
|
+
* - Memory section
|
|
463
|
+
* - Data section containing Python source
|
|
464
|
+
* - Exported functions for runtime interaction
|
|
465
|
+
*/
|
|
466
|
+
buildWasmModule(sourceBytes, _optimize) {
|
|
467
|
+
// WASM module header
|
|
468
|
+
const magic = new Uint8Array([0x00, 0x61, 0x73, 0x6D]); // \0asm
|
|
469
|
+
const version = new Uint8Array([0x01, 0x00, 0x00, 0x00]); // version 1
|
|
470
|
+
// Build sections
|
|
471
|
+
const sections = [];
|
|
472
|
+
// Type section (section id 1)
|
|
473
|
+
const typeSection = this.buildTypeSection();
|
|
474
|
+
sections.push(typeSection);
|
|
475
|
+
// Function section (section id 3)
|
|
476
|
+
const funcSection = this.buildFunctionSection();
|
|
477
|
+
sections.push(funcSection);
|
|
478
|
+
// Memory section (section id 5)
|
|
479
|
+
const memorySection = this.buildMemorySection(sourceBytes.length);
|
|
480
|
+
sections.push(memorySection);
|
|
481
|
+
// Export section (section id 7)
|
|
482
|
+
const exportSection = this.buildExportSection();
|
|
483
|
+
sections.push(exportSection);
|
|
484
|
+
// Code section (section id 10)
|
|
485
|
+
const codeSection = this.buildCodeSection();
|
|
486
|
+
sections.push(codeSection);
|
|
487
|
+
// Data section (section id 11)
|
|
488
|
+
const dataSection = this.buildDataSection(sourceBytes);
|
|
489
|
+
sections.push(dataSection);
|
|
490
|
+
// Combine all parts
|
|
491
|
+
const totalLength = magic.length + version.length +
|
|
492
|
+
sections.reduce((sum, s) => sum + s.length, 0);
|
|
493
|
+
const result = new Uint8Array(totalLength);
|
|
494
|
+
let offset = 0;
|
|
495
|
+
result.set(magic, offset);
|
|
496
|
+
offset += magic.length;
|
|
497
|
+
result.set(version, offset);
|
|
498
|
+
offset += version.length;
|
|
499
|
+
for (const section of sections) {
|
|
500
|
+
result.set(section, offset);
|
|
501
|
+
offset += section.length;
|
|
502
|
+
}
|
|
503
|
+
return result;
|
|
504
|
+
}
|
|
505
|
+
buildTypeSection() {
|
|
506
|
+
// Section id = 1
|
|
507
|
+
// 1 function type: () -> i32
|
|
508
|
+
const content = new Uint8Array([
|
|
509
|
+
0x01, // section id
|
|
510
|
+
0x05, // section size
|
|
511
|
+
0x01, // 1 type
|
|
512
|
+
0x60, // func type
|
|
513
|
+
0x00, // 0 params
|
|
514
|
+
0x01, 0x41, // 1 result: i32
|
|
515
|
+
]);
|
|
516
|
+
return content;
|
|
517
|
+
}
|
|
518
|
+
buildFunctionSection() {
|
|
519
|
+
// Section id = 3
|
|
520
|
+
// 1 function using type 0
|
|
521
|
+
const content = new Uint8Array([
|
|
522
|
+
0x03, // section id
|
|
523
|
+
0x02, // section size
|
|
524
|
+
0x01, // 1 function
|
|
525
|
+
0x00, // type index 0
|
|
526
|
+
]);
|
|
527
|
+
return content;
|
|
528
|
+
}
|
|
529
|
+
buildMemorySection(sourceLength) {
|
|
530
|
+
// Calculate required pages (64KB each)
|
|
531
|
+
const pagesNeeded = Math.ceil((sourceLength + 65536) / 65536);
|
|
532
|
+
const maxPages = Math.max(pagesNeeded, 16);
|
|
533
|
+
// Section id = 5
|
|
534
|
+
const content = new Uint8Array([
|
|
535
|
+
0x05, // section id
|
|
536
|
+
0x03, // section size
|
|
537
|
+
0x01, // 1 memory
|
|
538
|
+
0x00, // no max specified (has max)
|
|
539
|
+
pagesNeeded & 0x7F, // min pages (LEB128)
|
|
540
|
+
maxPages & 0x7F, // max pages (LEB128)
|
|
541
|
+
]);
|
|
542
|
+
return content;
|
|
543
|
+
}
|
|
544
|
+
buildExportSection() {
|
|
545
|
+
// Section id = 7
|
|
546
|
+
// Export "run" function
|
|
547
|
+
const nameBytes = new TextEncoder().encode("run");
|
|
548
|
+
const content = new Uint8Array([
|
|
549
|
+
0x07, // section id
|
|
550
|
+
0x07, // section size
|
|
551
|
+
0x01, // 1 export
|
|
552
|
+
nameBytes.length, // name length
|
|
553
|
+
...nameBytes, // "run"
|
|
554
|
+
0x00, // export kind: function
|
|
555
|
+
0x00, // function index 0
|
|
556
|
+
]);
|
|
557
|
+
return content;
|
|
558
|
+
}
|
|
559
|
+
buildCodeSection() {
|
|
560
|
+
// Section id = 10
|
|
561
|
+
// Simple function that returns the source length
|
|
562
|
+
const content = new Uint8Array([
|
|
563
|
+
0x0A, // section id
|
|
564
|
+
0x07, // section size
|
|
565
|
+
0x01, // 1 function body
|
|
566
|
+
0x05, // body size
|
|
567
|
+
0x00, // local count
|
|
568
|
+
0x41, 0x00, // i32.const 0 (return source start offset)
|
|
569
|
+
0x0B, // end
|
|
570
|
+
]);
|
|
571
|
+
return content;
|
|
572
|
+
}
|
|
573
|
+
buildDataSection(sourceBytes) {
|
|
574
|
+
// Section id = 11
|
|
575
|
+
// Store Python source at memory offset 0
|
|
576
|
+
const dataHeader = new Uint8Array([
|
|
577
|
+
0x0B, // section id
|
|
578
|
+
]);
|
|
579
|
+
// Calculate section size
|
|
580
|
+
const sizeBytes = this.encodeLEB128(4 + 1 + 2 + sourceBytes.length);
|
|
581
|
+
const dataContent = new Uint8Array([
|
|
582
|
+
0x01, // 1 data segment
|
|
583
|
+
0x00, // active, memory index 0
|
|
584
|
+
0x41, 0x00, // i32.const 0 (offset)
|
|
585
|
+
0x0B, // end
|
|
586
|
+
...this.encodeLEB128(sourceBytes.length), // size
|
|
587
|
+
]);
|
|
588
|
+
const total = new Uint8Array(dataHeader.length + sizeBytes.length + dataContent.length + sourceBytes.length);
|
|
589
|
+
let offset = 0;
|
|
590
|
+
total.set(dataHeader, offset);
|
|
591
|
+
offset += dataHeader.length;
|
|
592
|
+
total.set(sizeBytes, offset);
|
|
593
|
+
offset += sizeBytes.length;
|
|
594
|
+
total.set(dataContent, offset);
|
|
595
|
+
offset += dataContent.length;
|
|
596
|
+
total.set(sourceBytes, offset);
|
|
597
|
+
return total;
|
|
598
|
+
}
|
|
599
|
+
/**
|
|
600
|
+
* Encode a number as LEB128
|
|
601
|
+
*/
|
|
602
|
+
encodeLEB128(value) {
|
|
603
|
+
const bytes = [];
|
|
604
|
+
let remaining = value;
|
|
605
|
+
do {
|
|
606
|
+
let byte = remaining & 0x7F;
|
|
607
|
+
remaining >>>= 7;
|
|
608
|
+
if (remaining !== 0) {
|
|
609
|
+
byte |= 0x80;
|
|
610
|
+
}
|
|
611
|
+
bytes.push(byte);
|
|
612
|
+
} while (remaining !== 0);
|
|
613
|
+
return new Uint8Array(bytes);
|
|
614
|
+
}
|
|
615
|
+
/**
|
|
616
|
+
* Calculate memory pages needed
|
|
617
|
+
*/
|
|
618
|
+
calculateMemoryPages(source, limits) {
|
|
619
|
+
const sourceSize = new TextEncoder().encode(source).length;
|
|
620
|
+
const basePages = Math.ceil(sourceSize / 65536);
|
|
621
|
+
const limitPages = limits.memory ? Math.ceil(this.parseMemoryLimit(limits.memory) / 65536) : 256;
|
|
622
|
+
return Math.max(Math.min(basePages + 4, limitPages), 4);
|
|
623
|
+
}
|
|
624
|
+
/**
|
|
625
|
+
* Parse memory limit to bytes
|
|
626
|
+
*/
|
|
627
|
+
parseMemoryLimit(mem) {
|
|
628
|
+
if (typeof mem === "number")
|
|
629
|
+
return mem;
|
|
630
|
+
const match = mem.match(/^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/i);
|
|
631
|
+
if (!match)
|
|
632
|
+
return 16 * 1024 * 1024;
|
|
633
|
+
const [, num, unit] = match;
|
|
634
|
+
const multipliers = {
|
|
635
|
+
b: 1, kb: 1024, mb: 1024 ** 2, gb: 1024 ** 3,
|
|
636
|
+
};
|
|
637
|
+
return Math.floor(parseFloat(num) * (multipliers[unit?.toLowerCase() ?? "b"] ?? 1));
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
/**
|
|
641
|
+
* Create a Python compiler instance
|
|
642
|
+
*/
|
|
643
|
+
export function createPythonCompiler() {
|
|
644
|
+
return new PythonCompiler();
|
|
645
|
+
}
|
|
646
|
+
/**
|
|
647
|
+
* Default Python compiler instance
|
|
648
|
+
*/
|
|
649
|
+
export const pythonCompiler = new PythonCompiler();
|
|
650
|
+
//# sourceMappingURL=python.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python.js","sourceRoot":"","sources":["../../src/compilers/python.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,YAAY,GAIb,MAAM,qBAAqB,CAAC;AA4C7B;;;;;GAKG;AACH,MAAM,OAAO,cAAe,SAAQ,YAAY;IACrC,QAAQ,GAAG,QAAiB,CAAC;IAEtC;;OAEG;IACK,MAAM,CAAU,QAAQ,GAAG,IAAI,GAAG,CAAC;QACzC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO;QAChE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ;QACpE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI;QAC9D,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK;QACnE,OAAO,EAAE,MAAM,EAAE,OAAO;KACzB,CAAC,CAAC;IAEH;;OAEG;IACK,MAAM,CAAU,SAAS,GAAG,IAAI,GAAG,CAAC;QAC1C,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;QAC9D,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC7D,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;KAC/D,CAAC,CAAC;IAEH;;OAEG;IACK,gBAAgB,GAAmB,IAAI,CAAC;IAEhD;;;;;OAKG;IACH,KAAK,CAAC,WAAW;QACf,uCAAuC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB;QACtB,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC,gBAAgB,CAAC;QAC/B,CAAC;QAED,kDAAkD;QAClD,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE,CAAC;YACtC,MAAM,CAAC,GAAG,UAA0D,CAAC;YACrE,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;QACzD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAChC,CAAC;QAED,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,MAAc;QAC3B,IAAI,CAAC;YACH,wBAAwB;YACxB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBACnB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YACzB,CAAC;YAED,oBAAoB;YACpB,MAAM,MAAM,GAAa,EAAE,CAAC;YAE5B,iCAAiC;YACjC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACjD,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;gBACzB,OAAO,aAAa,CAAC;YACvB,CAAC;YAED,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACnD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;gBACxB,OAAO,YAAY,CAAC;YACtB,CAAC;YAED,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC/C,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;gBACxB,OAAO,YAAY,CAAC;YACtB,CAAC;YAED,oCAAoC;YACpC,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YACtD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;gBACxB,OAAO,YAAY,CAAC;YACtB,CAAC;YAED,mEAAmE;YACnE,IAAI,MAAM,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;gBACpC,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAC1C,CAAC;YAED,0BAA0B;YAC1B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;QACnF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,qBAAqB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;aACrF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CACX,MAAc,EACd,WAAwB,EACxB,MAAc,EACd,OAAyB;QAEzB,iBAAiB;QACjB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,wBAAwB,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,8EAA8E;QAC9E,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAEnC,gEAAgE;QAChE,iEAAiE;QACjE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE7D,OAAO;YACL,SAAS;YACT,MAAM,EAAE,2DAA2D;YACnE,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,WAAW,CAAC;YAC3C,OAAO,EAAE;gBACP,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACjD,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,kBAAkB,EAAE;aAChF;YACD,kBAAkB,EAAE;gBAClB,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC;gBAClD,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG;aACvF;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO;YACL,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,KAAK;YACf,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,IAAI;SACZ,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,MAAc;QAClC,MAAM,KAAK,GAAkD,EAAE,CAAC;QAChE,MAAM,KAAK,GAA2B,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACvE,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAC9C,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAE/C,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;YACxD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;gBAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;gBAEvB,yBAAyB;gBACzB,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;oBAC/C,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACd,QAAQ,GAAG,IAAI,CAAC;wBAChB,UAAU,GAAG,IAAI,CAAC;wBAClB,0BAA0B;wBAC1B,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;4BAChD,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;4BAC5B,GAAG,IAAI,CAAC,CAAC;wBACX,CAAC;oBACH,CAAC;yBAAM,IAAI,IAAI,KAAK,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,KAAK,UAAU,CAAC,EAAE,CAAC;wBACnF,QAAQ,GAAG,KAAK,CAAC;wBACjB,UAAU,GAAG,EAAE,CAAC;oBAClB,CAAC;oBACD,SAAS;gBACX,CAAC;gBAED,0BAA0B;gBAC1B,IAAI,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBAC1C,OAAO,GAAG,IAAI,CAAC;oBACf,SAAS;gBACX,CAAC;gBACD,OAAO,GAAG,KAAK,CAAC;gBAEhB,+BAA+B;gBAC/B,IAAI,QAAQ;oBAAE,SAAS;gBAEvB,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;gBACxD,CAAC;qBAAM,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACvB,OAAO;4BACL,KAAK,EAAE,KAAK;4BACZ,KAAK,EAAE,8BAA8B,IAAI,GAAG;4BAC5C,IAAI,EAAE,OAAO,GAAG,CAAC;4BACjB,MAAM,EAAE,GAAG,GAAG,CAAC;yBAChB,CAAC;oBACJ,CAAC;oBACD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;oBAC1B,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;wBAC9B,OAAO;4BACL,KAAK,EAAE,KAAK;4BACZ,KAAK,EAAE,yBAAyB,IAAI,CAAC,IAAI,aAAa,IAAI,CAAC,IAAI,uBAAuB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,GAAG;4BAC1H,IAAI,EAAE,OAAO,GAAG,CAAC;4BACjB,MAAM,EAAE,GAAG,GAAG,CAAC;yBAChB,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACrC,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,qBAAqB,IAAI,CAAC,IAAI,GAAG;gBACxC,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,GAAG;aACjB,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,MAAc;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,WAAW,GAAa,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;QAE3C,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;YACxD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAE5B,gCAAgC;YAChC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxC,SAAS;YACX,CAAC;YAED,gCAAgC;YAChC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC;YAE5D,6BAA6B;YAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAE7E,IAAI,OAAO,IAAI,SAAS,EAAE,CAAC;gBACzB,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,sCAAsC;oBAC7C,IAAI,EAAE,OAAO,GAAG,CAAC;oBACjB,MAAM,EAAE,CAAC;iBACV,CAAC;YACJ,CAAC;YAED,0BAA0B;YAC1B,MAAM,cAAc,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAE3D,IAAI,aAAa,GAAG,cAAc,EAAE,CAAC;gBACnC,wBAAwB;gBACxB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,aAAa,KAAK,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpH,OAAO;wBACL,KAAK,EAAE,KAAK;wBACZ,KAAK,EAAE,sBAAsB,aAAa,qBAAqB,cAAc,GAAG;wBAChF,IAAI,EAAE,OAAO,GAAG,CAAC;wBACjB,MAAM,EAAE,CAAC;qBACV,CAAC;gBACJ,CAAC;gBACD,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAClC,CAAC;iBAAM,IAAI,aAAa,GAAG,cAAc,EAAE,CAAC;gBAC1C,uCAAuC;gBACvC,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,aAAa,EAAE,CAAC;oBACrF,WAAW,CAAC,GAAG,EAAE,CAAC;gBACpB,CAAC;gBACD,IAAI,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,aAAa,EAAE,CAAC;oBAC1D,OAAO;wBACL,KAAK,EAAE,KAAK;wBACZ,KAAK,EAAE,qDAAqD;wBAC5D,IAAI,EAAE,OAAO,GAAG,CAAC;wBACjB,MAAM,EAAE,CAAC;qBACV,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,uDAAuD;YACvD,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1B,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,MAAc;QACjC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEjC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;YACxD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,CAAC;YAEV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBACvB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAErB,yBAAyB;gBACzB,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;oBACjC,0BAA0B;oBAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;oBACzC,MAAM,QAAQ,GAAG,WAAW,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBAChD,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;oBAChD,MAAM,UAAU,GAAG,CAAC,CAAC;oBACrB,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC;oBAEtB,qBAAqB;oBACrB,IAAI,QAAQ,GAAG,KAAK,CAAC;oBACrB,IAAI,OAAO,GAAG,KAAK,CAAC;oBAEpB,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;wBACvB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;wBAClB,IAAI,OAAO,EAAE,CAAC;4BACZ,OAAO,GAAG,KAAK,CAAC;4BAChB,CAAC,EAAE,CAAC;4BACJ,SAAS;wBACX,CAAC;wBACD,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;4BACf,OAAO,GAAG,IAAI,CAAC;4BACf,CAAC,EAAE,CAAC;4BACJ,SAAS;wBACX,CAAC;wBACD,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;4BACtD,QAAQ,GAAG,IAAI,CAAC;4BAChB,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC;4BACtB,MAAM;wBACR,CAAC;wBACD,CAAC,EAAE,CAAC;oBACN,CAAC;oBAED,sDAAsD;oBACtD,sEAAsE;oBACtE,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;wBAC3B,OAAO;4BACL,KAAK,EAAE,KAAK;4BACZ,KAAK,EAAE,6BAA6B;4BACpC,IAAI,EAAE,OAAO,GAAG,CAAC;4BACjB,MAAM,EAAE,UAAU,GAAG,CAAC;yBACvB,CAAC;oBACJ,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,CAAC,EAAE,CAAC;gBACN,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,MAAc;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEjC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;YACxD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;YAEnC,gCAAgC;YAChC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAE5C,8CAA8C;YAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAC;YAEjE,uCAAuC;YACvC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAChE,IAAI,iBAAiB,EAAE,CAAC;gBACtB,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,0BAA0B;oBACjC,IAAI,EAAE,OAAO,GAAG,CAAC;oBACjB,MAAM,EAAE,CAAC;iBACV,CAAC;YACJ,CAAC;YAED,kDAAkD;YAClD,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YACjH,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;gBAC/B,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACxC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtD,wCAAwC;oBACxC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC5B,OAAO;4BACL,KAAK,EAAE,KAAK;4BACZ,KAAK,EAAE,sBAAsB,EAAE,aAAa;4BAC5C,IAAI,EAAE,OAAO,GAAG,CAAC;4BACjB,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC;yBACjC,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAAC,MAAc;QAC9C,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,UAAqE,CAAC;YAChF,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;gBAC1B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,gCAAgC;YAC1D,CAAC;YAED,yCAAyC;YACzC,MAAM,IAAI,GAAG;;;gBAGH,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;;;;CAIrC,CAAC;YACI,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAW,CAAC;YAEnD,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;gBACvB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YACzB,CAAC;YAED,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3C,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,GAAG;gBACV,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC3C,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;aAC5C,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,oEAAoE;YACpE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,WAAwB;QAC/C,uCAAuC;QACvC,IAAI,WAAW,CAAC,EAAE,EAAE,KAAK,IAAI,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;YAC3D,uCAAuC;QACzC,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,cAAc,CAAC,MAAc,EAAE,OAAyB;QACpE,sDAAsD;QACtD,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAErD,yCAAyC;QACzC,8DAA8D;QAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,IAAI,KAAK,CAAC,CAAC;QAEjF,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;;;;;OAOG;IACK,eAAe,CAAC,WAAuB,EAAE,SAAkB;QACjE,qBAAqB;QACrB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ;QAChE,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY;QAEtE,iBAAiB;QACjB,MAAM,QAAQ,GAAiB,EAAE,CAAC;QAElC,8BAA8B;QAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC5C,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE3B,kCAAkC;QAClC,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAChD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE3B,gCAAgC;QAChC,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClE,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAE7B,gCAAgC;QAChC,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAChD,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAE7B,+BAA+B;QAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC5C,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE3B,+BAA+B;QAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QACvD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE3B,oBAAoB;QACpB,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;YAC/C,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;QAE3C,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;QAEzB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC5B,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;QAC3B,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,gBAAgB;QACtB,iBAAiB;QACjB,6BAA6B;QAC7B,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC;YAC7B,IAAI,EAAG,aAAa;YACpB,IAAI,EAAG,eAAe;YACtB,IAAI,EAAG,SAAS;YAChB,IAAI,EAAG,YAAY;YACnB,IAAI,EAAG,WAAW;YAClB,IAAI,EAAE,IAAI,EAAG,gBAAgB;SAC9B,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,oBAAoB;QAC1B,iBAAiB;QACjB,0BAA0B;QAC1B,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC;YAC7B,IAAI,EAAG,aAAa;YACpB,IAAI,EAAG,eAAe;YACtB,IAAI,EAAG,aAAa;YACpB,IAAI,EAAG,eAAe;SACvB,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,kBAAkB,CAAC,YAAoB;QAC7C,uCAAuC;QACvC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAE3C,iBAAiB;QACjB,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC;YAC7B,IAAI,EAAG,aAAa;YACpB,IAAI,EAAG,eAAe;YACtB,IAAI,EAAG,WAAW;YAClB,IAAI,EAAG,6BAA6B;YACpC,WAAW,GAAG,IAAI,EAAG,qBAAqB;YAC1C,QAAQ,GAAG,IAAI,EAAG,qBAAqB;SACxC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,kBAAkB;QACxB,iBAAiB;QACjB,wBAAwB;QACxB,MAAM,SAAS,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC;YAC7B,IAAI,EAAG,aAAa;YACpB,IAAI,EAAG,eAAe;YACtB,IAAI,EAAG,WAAW;YAClB,SAAS,CAAC,MAAM,EAAG,cAAc;YACjC,GAAG,SAAS,EAAG,QAAQ;YACvB,IAAI,EAAG,wBAAwB;YAC/B,IAAI,EAAG,mBAAmB;SAC3B,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,gBAAgB;QACtB,kBAAkB;QAClB,iDAAiD;QACjD,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC;YAC7B,IAAI,EAAG,aAAa;YACpB,IAAI,EAAG,eAAe;YACtB,IAAI,EAAG,kBAAkB;YACzB,IAAI,EAAG,YAAY;YACnB,IAAI,EAAG,cAAc;YACrB,IAAI,EAAE,IAAI,EAAG,2CAA2C;YACxD,IAAI,EAAG,MAAM;SACd,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,gBAAgB,CAAC,WAAuB;QAC9C,kBAAkB;QAClB,yCAAyC;QACzC,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC;YAChC,IAAI,EAAG,aAAa;SACrB,CAAC,CAAC;QAEH,yBAAyB;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QACpE,MAAM,WAAW,GAAG,IAAI,UAAU,CAAC;YACjC,IAAI,EAAG,iBAAiB;YACxB,IAAI,EAAG,yBAAyB;YAChC,IAAI,EAAE,IAAI,EAAG,uBAAuB;YACpC,IAAI,EAAG,MAAM;YACb,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,EAAG,OAAO;SACnD,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAC7G,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC9B,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC;QAC5B,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC7B,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC;QAC3B,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC/B,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC;QAC7B,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAE/B,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,KAAa;QAChC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,GAAG,CAAC;YACF,IAAI,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC;YAC5B,SAAS,MAAM,CAAC,CAAC;YACjB,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;gBACpB,IAAI,IAAI,IAAI,CAAC;YACf,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC,QAAQ,SAAS,KAAK,CAAC,EAAE;QAE1B,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,MAAc,EAAE,MAAc;QACzD,MAAM,UAAU,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;QAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACjG,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,GAAoB;QAC3C,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC;QAExC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAC9D,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;QAEpC,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;QAC5B,MAAM,WAAW,GAA2B;YAC1C,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC;SAC7C,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtF,CAAC;;AAGH;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,cAAc,EAAE,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC"}
|