numtypes 0.0.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/CHANGELOG.md +6 -0
- package/LICENSE +12 -0
- package/LICENSE-APACHE +201 -0
- package/LICENSE-MIT +21 -0
- package/README.md +652 -0
- package/dist/lib/index.d.ts +22 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +2 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/transformer/analyze/analyze-source-file.d.ts +15 -0
- package/dist/transformer/analyze/analyze-source-file.d.ts.map +1 -0
- package/dist/transformer/analyze/analyze-source-file.js +605 -0
- package/dist/transformer/analyze/analyze-source-file.js.map +1 -0
- package/dist/transformer/analyze/get-contextual-domain.d.ts +19 -0
- package/dist/transformer/analyze/get-contextual-domain.d.ts.map +1 -0
- package/dist/transformer/analyze/get-contextual-domain.js +197 -0
- package/dist/transformer/analyze/get-contextual-domain.js.map +1 -0
- package/dist/transformer/analyze/get-expression-domain.d.ts +26 -0
- package/dist/transformer/analyze/get-expression-domain.d.ts.map +1 -0
- package/dist/transformer/analyze/get-expression-domain.js +804 -0
- package/dist/transformer/analyze/get-expression-domain.js.map +1 -0
- package/dist/transformer/analyze/type-domain.d.ts +41 -0
- package/dist/transformer/analyze/type-domain.d.ts.map +1 -0
- package/dist/transformer/analyze/type-domain.js +260 -0
- package/dist/transformer/analyze/type-domain.js.map +1 -0
- package/dist/transformer/ast.d.ts +10 -0
- package/dist/transformer/ast.d.ts.map +1 -0
- package/dist/transformer/ast.js +115 -0
- package/dist/transformer/ast.js.map +1 -0
- package/dist/transformer/diagnostics.d.ts +17 -0
- package/dist/transformer/diagnostics.d.ts.map +1 -0
- package/dist/transformer/diagnostics.js +30 -0
- package/dist/transformer/diagnostics.js.map +1 -0
- package/dist/transformer/domains.d.ts +11 -0
- package/dist/transformer/domains.d.ts.map +1 -0
- package/dist/transformer/domains.js +32 -0
- package/dist/transformer/domains.js.map +1 -0
- package/dist/transformer/index.d.ts +10 -0
- package/dist/transformer/index.d.ts.map +1 -0
- package/dist/transformer/index.js +60 -0
- package/dist/transformer/index.js.map +1 -0
- package/dist/transformer/operators.d.ts +16 -0
- package/dist/transformer/operators.d.ts.map +1 -0
- package/dist/transformer/operators.js +44 -0
- package/dist/transformer/operators.js.map +1 -0
- package/dist/transformer/options.d.ts +19 -0
- package/dist/transformer/options.d.ts.map +1 -0
- package/dist/transformer/options.js +17 -0
- package/dist/transformer/options.js.map +1 -0
- package/dist/transformer/symbols.d.ts +56 -0
- package/dist/transformer/symbols.d.ts.map +1 -0
- package/dist/transformer/symbols.js +270 -0
- package/dist/transformer/symbols.js.map +1 -0
- package/dist/transformer/transform/erase-imports.d.ts +14 -0
- package/dist/transformer/transform/erase-imports.d.ts.map +1 -0
- package/dist/transformer/transform/erase-imports.js +174 -0
- package/dist/transformer/transform/erase-imports.js.map +1 -0
- package/dist/transformer/transform/generated-coercions.d.ts +9 -0
- package/dist/transformer/transform/generated-coercions.d.ts.map +1 -0
- package/dist/transformer/transform/generated-coercions.js +22 -0
- package/dist/transformer/transform/generated-coercions.js.map +1 -0
- package/dist/transformer/transform/optimize-coercions.d.ts +11 -0
- package/dist/transformer/transform/optimize-coercions.d.ts.map +1 -0
- package/dist/transformer/transform/optimize-coercions.js +1702 -0
- package/dist/transformer/transform/optimize-coercions.js.map +1 -0
- package/dist/transformer/transform/transform-declaration-file.d.ts +9 -0
- package/dist/transformer/transform/transform-declaration-file.d.ts.map +1 -0
- package/dist/transformer/transform/transform-declaration-file.js +376 -0
- package/dist/transformer/transform/transform-declaration-file.js.map +1 -0
- package/dist/transformer/transform/transform-expression.d.ts +24 -0
- package/dist/transformer/transform/transform-expression.d.ts.map +1 -0
- package/dist/transformer/transform/transform-expression.js +545 -0
- package/dist/transformer/transform/transform-expression.js.map +1 -0
- package/dist/transformer/transform/transform-source-file.d.ts +10 -0
- package/dist/transformer/transform/transform-source-file.d.ts.map +1 -0
- package/dist/transformer/transform/transform-source-file.js +52 -0
- package/dist/transformer/transform/transform-source-file.js.map +1 -0
- package/dist/transformer/ts-compat.d.ts +4 -0
- package/dist/transformer/ts-compat.d.ts.map +1 -0
- package/dist/transformer/ts-compat.js +24 -0
- package/dist/transformer/ts-compat.js.map +1 -0
- package/docs/implementation-plan.md +335 -0
- package/docs/lib-implementation.md +77 -0
- package/docs/lowering-optimization-spec.md +1020 -0
- package/docs/project-structure.md +52 -0
- package/docs/transform-spec.md +2114 -0
- package/package.json +83 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as ts from "typescript";
|
|
2
|
+
import type { NumericDomain } from "../domains.js";
|
|
3
|
+
import type { TransformerDiagnostic } from "../diagnostics.js";
|
|
4
|
+
import type { NumtypeSymbolTable } from "../symbols.js";
|
|
5
|
+
export type ContextualDomainReason = "assignment-target" | "array-element" | "conditional-branch" | "declaration" | "object-property" | "return-type" | "unknown";
|
|
6
|
+
export interface ContextualDomainInput {
|
|
7
|
+
readonly checker: ts.TypeChecker;
|
|
8
|
+
readonly node: ts.Node;
|
|
9
|
+
readonly symbols: NumtypeSymbolTable;
|
|
10
|
+
}
|
|
11
|
+
export interface ContextualDomainResult {
|
|
12
|
+
readonly diagnostics: readonly TransformerDiagnostic[];
|
|
13
|
+
readonly domain: NumericDomain | undefined;
|
|
14
|
+
readonly hasNonNumericUnionMembers?: boolean | undefined;
|
|
15
|
+
readonly reason: ContextualDomainReason;
|
|
16
|
+
readonly unionDomains?: readonly NumericDomain[] | undefined;
|
|
17
|
+
}
|
|
18
|
+
export declare function getContextualDomain(input: ContextualDomainInput): ContextualDomainResult;
|
|
19
|
+
//# sourceMappingURL=get-contextual-domain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-contextual-domain.d.ts","sourceRoot":"","sources":["../../../src/transformer/analyze/get-contextual-domain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAQjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGxD,MAAM,MAAM,sBAAsB,GAC9B,mBAAmB,GACnB,eAAe,GACf,oBAAoB,GACpB,aAAa,GACb,iBAAiB,GACjB,aAAa,GACb,SAAS,CAAC;AAEd,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;CACtC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,WAAW,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACvD,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,yBAAyB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACzD,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,aAAa,EAAE,GAAG,SAAS,CAAC;CAC9D;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,qBAAqB,GAC3B,sBAAsB,CASxB"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import * as ts from "typescript";
|
|
2
|
+
import { getDeclarationDomain, getFunctionReturnDomain, getTypeDomain, isNumericTypeDomain } from "./type-domain.js";
|
|
3
|
+
import { isRuntimeExpression } from "../ast.js";
|
|
4
|
+
export function getContextualDomain(input) {
|
|
5
|
+
if (!isRuntimeExpression(input.node)) {
|
|
6
|
+
return createContextualDomainResult({
|
|
7
|
+
diagnostics: [],
|
|
8
|
+
reason: "unknown"
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
return getExpressionContextualDomain(input, input.node);
|
|
12
|
+
}
|
|
13
|
+
function getExpressionContextualDomain(input, expression) {
|
|
14
|
+
const parent = expression.parent;
|
|
15
|
+
if (ts.isParenthesizedExpression(parent)) {
|
|
16
|
+
return getExpressionContextualDomain(input, parent);
|
|
17
|
+
}
|
|
18
|
+
if (ts.isVariableDeclaration(parent) && parent.initializer === expression) {
|
|
19
|
+
return getVariableDeclarationContext(input, parent);
|
|
20
|
+
}
|
|
21
|
+
if (ts.isBinaryExpression(parent) && parent.right === expression) {
|
|
22
|
+
return getAssignmentContext(input, parent);
|
|
23
|
+
}
|
|
24
|
+
if (ts.isReturnStatement(parent) && parent.expression === expression) {
|
|
25
|
+
return getReturnContext(input, parent);
|
|
26
|
+
}
|
|
27
|
+
if (ts.isArrowFunction(parent) && parent.body === expression) {
|
|
28
|
+
return getSignatureReturnContext(input, parent);
|
|
29
|
+
}
|
|
30
|
+
if (ts.isCallExpression(parent)) {
|
|
31
|
+
return createContextualDomainResult({
|
|
32
|
+
diagnostics: [],
|
|
33
|
+
reason: "unknown"
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
if (ts.isConditionalExpression(parent)) {
|
|
37
|
+
return getConditionalBranchContext(input, parent, expression);
|
|
38
|
+
}
|
|
39
|
+
if (ts.isPropertyAssignment(parent) && parent.initializer === expression) {
|
|
40
|
+
return getContextualTypeContext(input, expression, "object-property");
|
|
41
|
+
}
|
|
42
|
+
if (ts.isArrayLiteralExpression(parent) &&
|
|
43
|
+
parent.elements.some((element) => element === expression)) {
|
|
44
|
+
return getContextualTypeContext(input, expression, "array-element");
|
|
45
|
+
}
|
|
46
|
+
return createContextualDomainResult({
|
|
47
|
+
diagnostics: [],
|
|
48
|
+
reason: "unknown"
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
function getVariableDeclarationContext(input, declaration) {
|
|
52
|
+
const typeResult = getDeclarationDomain({
|
|
53
|
+
checker: input.checker,
|
|
54
|
+
declaration,
|
|
55
|
+
symbols: input.symbols
|
|
56
|
+
});
|
|
57
|
+
return resultFromTypeDomain(typeResult, "declaration");
|
|
58
|
+
}
|
|
59
|
+
function getAssignmentContext(input, expression) {
|
|
60
|
+
if (!isAssignmentOperator(expression.operatorToken.kind)) {
|
|
61
|
+
return createContextualDomainResult({
|
|
62
|
+
diagnostics: [],
|
|
63
|
+
reason: "unknown"
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
const targetResult = getTypeDomain({
|
|
67
|
+
checker: input.checker,
|
|
68
|
+
node: expression.left,
|
|
69
|
+
symbols: input.symbols,
|
|
70
|
+
type: input.checker.getTypeAtLocation(expression.left)
|
|
71
|
+
});
|
|
72
|
+
return resultFromTypeDomain(targetResult, "assignment-target");
|
|
73
|
+
}
|
|
74
|
+
function getReturnContext(input, returnStatement) {
|
|
75
|
+
const functionLike = findContainingSignatureDeclaration(returnStatement);
|
|
76
|
+
if (functionLike === undefined) {
|
|
77
|
+
return createContextualDomainResult({
|
|
78
|
+
diagnostics: [],
|
|
79
|
+
reason: "unknown"
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
return getSignatureReturnContext(input, functionLike);
|
|
83
|
+
}
|
|
84
|
+
function getSignatureReturnContext(input, signatureDeclaration) {
|
|
85
|
+
const returnTypeResult = getFunctionReturnDomain({
|
|
86
|
+
checker: input.checker,
|
|
87
|
+
declaration: signatureDeclaration,
|
|
88
|
+
symbols: input.symbols
|
|
89
|
+
});
|
|
90
|
+
return resultFromTypeDomain(returnTypeResult, "return-type");
|
|
91
|
+
}
|
|
92
|
+
function getConditionalBranchContext(input, conditionalExpression, branchExpression) {
|
|
93
|
+
if (conditionalExpression.whenTrue !== branchExpression &&
|
|
94
|
+
conditionalExpression.whenFalse !== branchExpression) {
|
|
95
|
+
return createContextualDomainResult({
|
|
96
|
+
diagnostics: [],
|
|
97
|
+
reason: "unknown"
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
const parentContext = getExpressionContextualDomain(input, conditionalExpression);
|
|
101
|
+
if (parentContext.domain === undefined) {
|
|
102
|
+
return parentContext;
|
|
103
|
+
}
|
|
104
|
+
return createContextualDomainResult({
|
|
105
|
+
diagnostics: parentContext.diagnostics,
|
|
106
|
+
domain: parentContext.domain,
|
|
107
|
+
reason: "conditional-branch"
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
function getContextualTypeContext(input, expression, reason) {
|
|
111
|
+
const contextualType = input.checker.getContextualType(expression);
|
|
112
|
+
if (contextualType === undefined) {
|
|
113
|
+
return createContextualDomainResult({
|
|
114
|
+
diagnostics: [],
|
|
115
|
+
reason: "unknown"
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
const typeResult = getTypeDomain({
|
|
119
|
+
checker: input.checker,
|
|
120
|
+
node: expression,
|
|
121
|
+
symbols: input.symbols,
|
|
122
|
+
type: contextualType
|
|
123
|
+
});
|
|
124
|
+
return resultFromTypeDomain(typeResult, reason);
|
|
125
|
+
}
|
|
126
|
+
function resultFromTypeDomain(typeResult, reason) {
|
|
127
|
+
if (typeResult.unionDomains !== undefined &&
|
|
128
|
+
typeResult.unionDomains.length > 0) {
|
|
129
|
+
return createContextualDomainResult({
|
|
130
|
+
diagnostics: typeResult.diagnostics,
|
|
131
|
+
hasNonNumericUnionMembers: typeResult.hasNonNumericUnionMembers,
|
|
132
|
+
reason,
|
|
133
|
+
unionDomains: typeResult.unionDomains
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
if (!isNumericTypeDomain(typeResult.domain)) {
|
|
137
|
+
return createContextualDomainResult({
|
|
138
|
+
diagnostics: typeResult.diagnostics,
|
|
139
|
+
reason: "unknown"
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
return createContextualDomainResult({
|
|
143
|
+
diagnostics: typeResult.diagnostics,
|
|
144
|
+
domain: typeResult.domain,
|
|
145
|
+
reason
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
function createContextualDomainResult(input) {
|
|
149
|
+
const result = {
|
|
150
|
+
diagnostics: input.diagnostics,
|
|
151
|
+
domain: input.domain,
|
|
152
|
+
reason: input.reason
|
|
153
|
+
};
|
|
154
|
+
if (input.unionDomains === undefined || input.unionDomains.length === 0) {
|
|
155
|
+
return result;
|
|
156
|
+
}
|
|
157
|
+
return {
|
|
158
|
+
...result,
|
|
159
|
+
hasNonNumericUnionMembers: input.hasNonNumericUnionMembers === true,
|
|
160
|
+
unionDomains: input.unionDomains
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
function isAssignmentOperator(operator) {
|
|
164
|
+
return (operator === ts.SyntaxKind.EqualsToken ||
|
|
165
|
+
operator === ts.SyntaxKind.PlusEqualsToken ||
|
|
166
|
+
operator === ts.SyntaxKind.MinusEqualsToken ||
|
|
167
|
+
operator === ts.SyntaxKind.AsteriskEqualsToken ||
|
|
168
|
+
operator === ts.SyntaxKind.AsteriskAsteriskEqualsToken ||
|
|
169
|
+
operator === ts.SyntaxKind.SlashEqualsToken ||
|
|
170
|
+
operator === ts.SyntaxKind.PercentEqualsToken ||
|
|
171
|
+
operator === ts.SyntaxKind.LessThanLessThanEqualsToken ||
|
|
172
|
+
operator === ts.SyntaxKind.GreaterThanGreaterThanEqualsToken ||
|
|
173
|
+
operator === ts.SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken ||
|
|
174
|
+
operator === ts.SyntaxKind.AmpersandEqualsToken ||
|
|
175
|
+
operator === ts.SyntaxKind.BarEqualsToken ||
|
|
176
|
+
operator === ts.SyntaxKind.CaretEqualsToken);
|
|
177
|
+
}
|
|
178
|
+
function findContainingSignatureDeclaration(node) {
|
|
179
|
+
let current = node.parent;
|
|
180
|
+
while (!ts.isSourceFile(current)) {
|
|
181
|
+
if (isSignatureDeclarationWithBody(current)) {
|
|
182
|
+
return current;
|
|
183
|
+
}
|
|
184
|
+
current = current.parent;
|
|
185
|
+
}
|
|
186
|
+
return undefined;
|
|
187
|
+
}
|
|
188
|
+
function isSignatureDeclarationWithBody(node) {
|
|
189
|
+
return (ts.isFunctionDeclaration(node) ||
|
|
190
|
+
ts.isFunctionExpression(node) ||
|
|
191
|
+
ts.isArrowFunction(node) ||
|
|
192
|
+
ts.isMethodDeclaration(node) ||
|
|
193
|
+
ts.isGetAccessorDeclaration(node) ||
|
|
194
|
+
ts.isSetAccessorDeclaration(node) ||
|
|
195
|
+
ts.isConstructorDeclaration(node));
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=get-contextual-domain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-contextual-domain.js","sourceRoot":"","sources":["../../../src/transformer/analyze/get-contextual-domain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as ts from "typescript";
|
|
2
|
+
import type { NumericDomain } from "../domains.js";
|
|
3
|
+
import type { TransformerDiagnostic } from "../diagnostics.js";
|
|
4
|
+
import type { NumtypeSymbolTable } from "../symbols.js";
|
|
5
|
+
import type { TypeDomain } from "./type-domain.js";
|
|
6
|
+
export type ExpressionDomainReason = "cast-call" | "contextual-literal" | "literal" | "operator" | "type" | "unknown";
|
|
7
|
+
export interface ExpressionDomainInput {
|
|
8
|
+
readonly cache?: ExpressionDomainCache | undefined;
|
|
9
|
+
readonly checker: ts.TypeChecker;
|
|
10
|
+
readonly contextualDomain?: NumericDomain | undefined;
|
|
11
|
+
readonly expression: ts.Expression;
|
|
12
|
+
readonly symbols: NumtypeSymbolTable;
|
|
13
|
+
}
|
|
14
|
+
export interface ExpressionDomainResult {
|
|
15
|
+
readonly diagnostics: readonly TransformerDiagnostic[];
|
|
16
|
+
readonly domain: TypeDomain;
|
|
17
|
+
readonly hasNonNumericUnionMembers?: boolean | undefined;
|
|
18
|
+
readonly isDomainBound: boolean;
|
|
19
|
+
readonly reason: ExpressionDomainReason;
|
|
20
|
+
readonly requiresClosure: boolean;
|
|
21
|
+
readonly unionDomains?: readonly NumericDomain[] | undefined;
|
|
22
|
+
}
|
|
23
|
+
export type ExpressionDomainCache = WeakMap<ts.Expression, Map<string, ExpressionDomainResult>>;
|
|
24
|
+
export declare function createExpressionDomainCache(): ExpressionDomainCache;
|
|
25
|
+
export declare function getExpressionDomain(input: ExpressionDomainInput): ExpressionDomainResult;
|
|
26
|
+
//# sourceMappingURL=get-expression-domain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-expression-domain.d.ts","sourceRoot":"","sources":["../../../src/transformer/analyze/get-expression-domain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAWjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAwB,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AA2DnD,MAAM,MAAM,sBAAsB,GAC9B,WAAW,GACX,oBAAoB,GACpB,SAAS,GACT,UAAU,GACV,MAAM,GACN,SAAS,CAAC;AAEd,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC;IACjC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IACtD,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;CACtC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,WAAW,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACvD,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,yBAAyB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACzD,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;IACxC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,aAAa,EAAE,GAAG,SAAS,CAAC;CAC9D;AAED,MAAM,MAAM,qBAAqB,GAAG,OAAO,CACzC,EAAE,CAAC,UAAU,EACb,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CACpC,CAAC;AAyBF,wBAAgB,2BAA2B,IAAI,qBAAqB,CAEnE;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,qBAAqB,GAC3B,sBAAsB,CAKxB"}
|