sh-ast 0.3.1 → 0.4.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 +116 -144
- package/dist/analyze/ansi-c-escapes.d.ts +1 -1
- package/dist/analyze/ansi-c-escapes.js +1 -1
- package/dist/analyze/enumerate-commands.d.ts +11 -16
- package/dist/analyze/enumerate-commands.d.ts.map +1 -1
- package/dist/analyze/enumerate-commands.js +82 -92
- package/dist/analyze/enumerate-commands.js.map +1 -1
- package/dist/analyze/index.d.ts +3 -2
- package/dist/analyze/index.d.ts.map +1 -1
- package/dist/analyze/index.js +1 -1
- package/dist/analyze/node-helpers.d.ts +10 -21
- package/dist/analyze/node-helpers.d.ts.map +1 -1
- package/dist/analyze/node-helpers.js +16 -27
- package/dist/analyze/node-helpers.js.map +1 -1
- package/dist/analyze/resolve-argv0.d.ts +6 -6
- package/dist/analyze/resolve-argv0.js +6 -6
- package/dist/analyze/resolve-word.d.ts +7 -10
- package/dist/analyze/resolve-word.d.ts.map +1 -1
- package/dist/analyze/resolve-word.js +39 -22
- package/dist/analyze/resolve-word.js.map +1 -1
- package/dist/analyze.d.ts +3780 -397
- package/dist/errors.d.ts +6 -79
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +5 -64
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +16 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -4
- package/dist/index.js.map +1 -1
- package/dist/sh-ast.d.ts +3503 -1027
- package/dist/syntax-errors.d.ts +56 -0
- package/dist/syntax-errors.d.ts.map +1 -0
- package/dist/syntax-errors.js +80 -0
- package/dist/syntax-errors.js.map +1 -0
- package/dist/syntax-snapshot.d.ts +47 -0
- package/dist/syntax-snapshot.d.ts.map +1 -0
- package/dist/syntax-snapshot.js +121 -0
- package/dist/syntax-snapshot.js.map +1 -0
- package/dist/syntax-wire.d.ts +31 -0
- package/dist/syntax-wire.d.ts.map +1 -0
- package/dist/syntax-wire.js +202 -0
- package/dist/syntax-wire.js.map +1 -0
- package/dist/syntax.d.ts +65 -0
- package/dist/syntax.d.ts.map +1 -0
- package/dist/syntax.js +152 -0
- package/dist/syntax.js.map +1 -0
- package/dist/wasm-instance.d.ts +5 -8
- package/dist/wasm-instance.d.ts.map +1 -1
- package/dist/wasm-instance.js +44 -47
- package/dist/wasm-instance.js.map +1 -1
- package/generated/syntax-constants.d.ts +1652 -0
- package/generated/syntax-constants.js +1384 -0
- package/generated/syntax-schema.d.ts +60 -0
- package/generated/syntax-schema.js +1740 -0
- package/generated/syntax-types.d.ts +1977 -0
- package/package.json +2 -2
- package/shim/sh-ast.wasm +0 -0
- package/dist/normalize.d.ts +0 -52
- package/dist/normalize.d.ts.map +0 -1
- package/dist/normalize.js +0 -260
- package/dist/normalize.js.map +0 -1
- package/dist/parse.d.ts +0 -50
- package/dist/parse.d.ts.map +0 -1
- package/dist/parse.js +0 -125
- package/dist/parse.js.map +0 -1
- package/dist/types.d.ts +0 -74
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/visitor-keys.d.ts +0 -21
- package/dist/visitor-keys.d.ts.map +0 -1
- package/dist/visitor-keys.js +0 -23
- package/dist/visitor-keys.js.map +0 -1
- package/dist/walk.d.ts +0 -18
- package/dist/walk.d.ts.map +0 -1
- package/dist/walk.js +0 -40
- package/dist/walk.js.map +0 -1
- package/generated/child-type-schema.d.ts +0 -14
- package/generated/child-type-schema.js +0 -188
- package/generated/node-types.d.ts +0 -1002
- package/generated/position-fields.d.ts +0 -21
- package/generated/position-fields.js +0 -50
- package/generated/visitor-keys.d.ts +0 -11
- package/generated/visitor-keys.js +0 -50
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
/** Resolves faithful upstream word records without evaluating shell expansions. */
|
|
2
|
+
import type { Node } from '../../generated/syntax-types.js';
|
|
2
3
|
/**
|
|
3
4
|
* Why a {@link resolveWord} result is `static: false`: the word's exact
|
|
4
5
|
* text cannot be determined from source alone.
|
|
@@ -40,7 +41,8 @@ import type { ShNode } from '../types.js';
|
|
|
40
41
|
* `$"..."` word's *contents* would otherwise report — the `DblQuoted`
|
|
41
42
|
* node's own `dollar` flag is checked before its children are visited at
|
|
42
43
|
* all, so e.g. `$"hi $x"` reports `'locale'`, never `'expansion'`.
|
|
43
|
-
* - `'unsupported'` —
|
|
44
|
+
* - `'unsupported'` — a word contains a nil or typed nil part, a literal carries a byte-preserving `Uint8Array`
|
|
45
|
+
* rather than Unicode text, or the word contains a `$'...'` (ANSI-C quoted) `\u`/`\U`
|
|
44
46
|
* escape whose value has no corresponding Unicode character (greater than
|
|
45
47
|
* `U+10FFFF`, e.g. `$'\UFFFFFFFF'`): real bash's output for this case is
|
|
46
48
|
* an undocumented, non-UTF-8 byte sequence with no exact representation
|
|
@@ -134,18 +136,13 @@ export interface ResolveWordOptions {
|
|
|
134
136
|
* `$'\U...'` escape is `static: false` with a reason — never an error, and
|
|
135
137
|
* never a safety judgment (see {@link WordResolution}).
|
|
136
138
|
*
|
|
137
|
-
* @param word - A `Word` node, e.g. `parseSync(...).
|
|
138
|
-
* A `word` sourced from `parseSync` has already passed that function's own
|
|
139
|
-
* pathological-nesting guard (`ShParseMaxDepthError` — see
|
|
140
|
-
* `parse-depth-guard.ts`), which rejects deeply-nested input before it is
|
|
141
|
-
* ever turned into a tree at all, so `resolveWord` itself never needs (and
|
|
142
|
-
* does not implement) a depth guard of its own.
|
|
139
|
+
* @param word - A `Word` node, e.g. `parseSync(...).Stmts[0].Cmd.Args[0]`.
|
|
143
140
|
* @param options - See {@link ResolveWordOptions}.
|
|
144
|
-
* @throws TypeError if `word.
|
|
141
|
+
* @throws TypeError if `word.Type` is neither `"Word"` nor `"TypedNil"` — a programmer-error
|
|
145
142
|
* misuse of the API, not a "malformed shell source" case (well-formed
|
|
146
143
|
* shell source, however dynamic, never throws; see {@link WordResolution}).
|
|
147
144
|
*
|
|
148
145
|
* @public
|
|
149
146
|
*/
|
|
150
|
-
export declare function resolveWord(word:
|
|
147
|
+
export declare function resolveWord(word: Node, options?: ResolveWordOptions): WordResolution;
|
|
151
148
|
//# sourceMappingURL=resolve-word.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-word.d.ts","sourceRoot":"","sources":["../../src/analyze/resolve-word.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"resolve-word.d.ts","sourceRoot":"","sources":["../../src/analyze/resolve-word.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAC;AAK5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AACH,MAAM,MAAM,oBAAoB,GAC9B,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,aAAa,CAAC;AAEtE;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GACtB;IACE,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,GACD;IACE,qFAAqF;IACrF,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IACvB,mDAAmD;IACnD,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;CACvC,CAAC;AAEN;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,kBAAkB,CAAC;CAC5D;AAwKD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,cAAc,CAqCpF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { decodeAnsiCString } from './ansi-c-escapes.js';
|
|
2
2
|
import { decodeDblQuotedLit, decodeUnquotedLit } from './decode-lit.js';
|
|
3
|
-
import { nodeArray
|
|
3
|
+
import { nodeArray } from './node-helpers.js';
|
|
4
4
|
/**
|
|
5
5
|
* True iff `raw` (a `Lit` part's *undecoded* value) begins with a literal
|
|
6
6
|
* `~` character. Only meaningful when checked against a `Word`'s very
|
|
@@ -30,11 +30,13 @@ function startsWithUnescapedTilde(raw) {
|
|
|
30
30
|
function hasUnquotedColonTilde(parts) {
|
|
31
31
|
let prevWasUnescapedColon = false;
|
|
32
32
|
for (const part of parts) {
|
|
33
|
-
if (part.
|
|
33
|
+
if (part.Type !== 'Lit') {
|
|
34
34
|
prevWasUnescapedColon = false;
|
|
35
35
|
continue;
|
|
36
36
|
}
|
|
37
|
-
const raw =
|
|
37
|
+
const raw = part.Value;
|
|
38
|
+
if (typeof raw !== 'string')
|
|
39
|
+
return false;
|
|
38
40
|
let i = 0;
|
|
39
41
|
while (i < raw.length) {
|
|
40
42
|
const ch = raw[i];
|
|
@@ -73,19 +75,26 @@ function hasUnquotedColonTilde(parts) {
|
|
|
73
75
|
function hasUnquotedBracketExpression(parts) {
|
|
74
76
|
let brackets = '';
|
|
75
77
|
for (const part of parts) {
|
|
76
|
-
if (part.
|
|
78
|
+
if (part.Type !== 'Lit')
|
|
77
79
|
continue;
|
|
78
|
-
|
|
80
|
+
if (typeof part.Value !== 'string')
|
|
81
|
+
return false;
|
|
82
|
+
brackets += decodeUnquotedLit(part.Value).brackets;
|
|
79
83
|
}
|
|
80
84
|
const openIndex = brackets.indexOf('[');
|
|
81
85
|
if (openIndex === -1)
|
|
82
86
|
return false;
|
|
83
87
|
return brackets.includes(']', openIndex + 1);
|
|
84
88
|
}
|
|
89
|
+
/** Applies quoting semantics to one fragment without evaluating dynamic content. */
|
|
85
90
|
function resolvePart(part, quoting) {
|
|
86
|
-
switch (part.
|
|
91
|
+
switch (part.Type) {
|
|
92
|
+
case 'TypedNil':
|
|
93
|
+
return { ok: false, reason: 'unsupported' };
|
|
87
94
|
case 'Lit': {
|
|
88
|
-
const raw =
|
|
95
|
+
const raw = part.Value;
|
|
96
|
+
if (typeof raw !== 'string')
|
|
97
|
+
return { ok: false, reason: 'unsupported' };
|
|
89
98
|
if (quoting === 'dblquoted') {
|
|
90
99
|
return { ok: true, text: decodeDblQuotedLit(raw) };
|
|
91
100
|
}
|
|
@@ -95,11 +104,13 @@ function resolvePart(part, quoting) {
|
|
|
95
104
|
return { ok: true, text };
|
|
96
105
|
}
|
|
97
106
|
case 'SglQuoted': {
|
|
98
|
-
const raw =
|
|
107
|
+
const raw = part.Value;
|
|
108
|
+
if (typeof raw !== 'string')
|
|
109
|
+
return { ok: false, reason: 'unsupported' };
|
|
99
110
|
// ANSI-C quoting ($'...') is flagged by SglQuoted.Dollar (mvdan/sh
|
|
100
111
|
// v3.13.1's `syntax.SglQuoted.Dollar bool`); plain single-quoted
|
|
101
112
|
// text ('...') never has any escapes interpreted at all.
|
|
102
|
-
if (part.
|
|
113
|
+
if (part.Dollar) {
|
|
103
114
|
const decoded = decodeAnsiCString(raw);
|
|
104
115
|
if (!decoded.ok)
|
|
105
116
|
return { ok: false, reason: 'unsupported' };
|
|
@@ -115,11 +126,13 @@ function resolvePart(part, quoting) {
|
|
|
115
126
|
// Manual §3.1.2.5), so 'locale' deterministically takes precedence
|
|
116
127
|
// over any 'expansion' (or other reason) its contents would
|
|
117
128
|
// otherwise report — see WordResolutionReason's 'locale' doc.
|
|
118
|
-
if (part.
|
|
129
|
+
if (part.Dollar) {
|
|
119
130
|
return { ok: false, reason: 'locale' };
|
|
120
131
|
}
|
|
132
|
+
if (part.Parts?.includes(null))
|
|
133
|
+
return { ok: false, reason: 'unsupported' };
|
|
121
134
|
let text = '';
|
|
122
|
-
for (const inner of nodeArray(part.
|
|
135
|
+
for (const inner of nodeArray(part.Parts)) {
|
|
123
136
|
const result = resolvePart(inner, 'dblquoted');
|
|
124
137
|
if (!result.ok)
|
|
125
138
|
return result;
|
|
@@ -162,30 +175,34 @@ function resolvePart(part, quoting) {
|
|
|
162
175
|
* `$'\U...'` escape is `static: false` with a reason — never an error, and
|
|
163
176
|
* never a safety judgment (see {@link WordResolution}).
|
|
164
177
|
*
|
|
165
|
-
* @param word - A `Word` node, e.g. `parseSync(...).
|
|
166
|
-
* A `word` sourced from `parseSync` has already passed that function's own
|
|
167
|
-
* pathological-nesting guard (`ShParseMaxDepthError` — see
|
|
168
|
-
* `parse-depth-guard.ts`), which rejects deeply-nested input before it is
|
|
169
|
-
* ever turned into a tree at all, so `resolveWord` itself never needs (and
|
|
170
|
-
* does not implement) a depth guard of its own.
|
|
178
|
+
* @param word - A `Word` node, e.g. `parseSync(...).Stmts[0].Cmd.Args[0]`.
|
|
171
179
|
* @param options - See {@link ResolveWordOptions}.
|
|
172
|
-
* @throws TypeError if `word.
|
|
180
|
+
* @throws TypeError if `word.Type` is neither `"Word"` nor `"TypedNil"` — a programmer-error
|
|
173
181
|
* misuse of the API, not a "malformed shell source" case (well-formed
|
|
174
182
|
* shell source, however dynamic, never throws; see {@link WordResolution}).
|
|
175
183
|
*
|
|
176
184
|
* @public
|
|
177
185
|
*/
|
|
178
186
|
export function resolveWord(word, options) {
|
|
179
|
-
|
|
180
|
-
|
|
187
|
+
// A concrete nil pointer inside an interface retains its kind, but carries no text.
|
|
188
|
+
if (word.Type === 'TypedNil')
|
|
189
|
+
return { static: false, reason: 'unsupported' };
|
|
190
|
+
if (word.Type !== 'Word') {
|
|
191
|
+
throw new TypeError(`resolveWord expects a "Word" node, got "${word.Type}"`);
|
|
181
192
|
}
|
|
182
|
-
|
|
193
|
+
// A nil slice is an empty word; a nil element is a missing semantic fragment.
|
|
194
|
+
// Omitting a fragment would invent a different command name.
|
|
195
|
+
if (word.Parts?.includes(null))
|
|
196
|
+
return { static: false, reason: 'unsupported' };
|
|
197
|
+
const parts = nodeArray(word.Parts);
|
|
183
198
|
if (parts.length === 0) {
|
|
184
199
|
return { static: true, text: '' };
|
|
185
200
|
}
|
|
186
201
|
// `parts.length === 0` returned above, so `parts[0]` is a real element.
|
|
187
202
|
const first = parts[0];
|
|
188
|
-
if (first.
|
|
203
|
+
if (first.Type === 'Lit' &&
|
|
204
|
+
typeof first.Value === 'string' &&
|
|
205
|
+
startsWithUnescapedTilde(first.Value)) {
|
|
189
206
|
return { static: false, reason: 'tilde' };
|
|
190
207
|
}
|
|
191
208
|
if (options?.context !== 'command-argument' && hasUnquotedColonTilde(parts)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-word.js","sourceRoot":"","sources":["../../src/analyze/resolve-word.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolve-word.js","sourceRoot":"","sources":["../../src/analyze/resolve-word.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AA8I9C;;;;;;;;;GASG;AACH,SAAS,wBAAwB,CAAC,GAAW;IAC3C,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,qBAAqB,CAAC,KAAsB;IACnD,IAAI,qBAAqB,GAAG,KAAK,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACxB,qBAAqB,GAAG,KAAK,CAAC;YAC9B,SAAS;QACX,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;QACvB,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC1C,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;YACtB,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;gBACtC,kEAAkE;gBAClE,8DAA8D;gBAC9D,qBAAqB,GAAG,KAAK,CAAC;gBAC9B,CAAC,IAAI,CAAC,CAAC;gBACP,SAAS;YACX,CAAC;YACD,IAAI,qBAAqB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACxC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,qBAAqB,GAAG,EAAE,KAAK,GAAG,CAAC;YACnC,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,SAAS,4BAA4B,CAAC,KAAsB;IAC1D,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;YAAE,SAAS;QAClC,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACjD,QAAQ,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;IACrD,CAAC;IACD,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,SAAS,KAAK,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,OAAO,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,oFAAoF;AACpF,SAAS,WAAW,CAAC,IAAU,EAAE,OAAiC;IAChE,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,UAAU;YACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;QAC9C,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;YACvB,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;YACzE,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;gBAC5B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;YACrD,CAAC;YACD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;YACjD,IAAI,OAAO;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAClD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC5B,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;YACvB,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;YACzE,mEAAmE;YACnE,iEAAiE;YACjE,yDAAyD;YACzD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;gBACvC,IAAI,CAAC,OAAO,CAAC,EAAE;oBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;gBAC7D,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;YAC1C,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QACjC,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,6DAA6D;YAC7D,qEAAqE;YACrE,mEAAmE;YACnE,iEAAiE;YACjE,mEAAmE;YACnE,4DAA4D;YAC5D,8DAA8D;YAC9D,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;YACzC,CAAC;YACD,IAAI,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;YAC5E,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1C,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;gBAC/C,IAAI,CAAC,MAAM,CAAC,EAAE;oBAAE,OAAO,MAAM,CAAC;gBAC9B,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC;YACtB,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC5B,CAAC;QACD,KAAK,UAAU,CAAC;QAChB,KAAK,UAAU,CAAC;QAChB,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW;YACd,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAC5C,KAAK,SAAS;YACZ,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QACvC,KAAK,UAAU;YACb,+DAA+D;YAC/D,4DAA4D;YAC5D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QACxC;YACE,gEAAgE;YAChE,qEAAqE;YACrE,gEAAgE;YAChE,oEAAoE;YACpE,2BAA2B;YAC3B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAC9C,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,WAAW,CAAC,IAAU,EAAE,OAA4B;IAClE,oFAAoF;IACpF,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAC9E,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,IAAI,SAAS,CAAC,2CAA2C,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;IAC/E,CAAC;IACD,8EAA8E;IAC9E,6DAA6D;IAC7D,IAAI,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAChF,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACpC,CAAC;IACD,wEAAwE;IACxE,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,IACE,KAAK,CAAC,IAAI,KAAK,KAAK;QACpB,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAC/B,wBAAwB,CAAC,KAAK,CAAC,KAAK,CAAC,EACrC,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC5C,CAAC;IACD,IAAI,OAAO,EAAE,OAAO,KAAK,kBAAkB,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5E,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC5C,CAAC;IACD,IAAI,4BAA4B,CAAC,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC3C,CAAC;IACD,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;QAClD,CAAC;QACD,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC;IACtB,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAChC,CAAC"}
|