@aigne/ash 0.0.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/DESIGN.md +41 -0
- package/dist/ai-dev-loop/ash-run-result.cjs +12 -0
- package/dist/ai-dev-loop/ash-run-result.d.cts +28 -0
- package/dist/ai-dev-loop/ash-run-result.d.cts.map +1 -0
- package/dist/ai-dev-loop/ash-run-result.d.mts +28 -0
- package/dist/ai-dev-loop/ash-run-result.d.mts.map +1 -0
- package/dist/ai-dev-loop/ash-run-result.mjs +11 -0
- package/dist/ai-dev-loop/ash-run-result.mjs.map +1 -0
- package/dist/ai-dev-loop/ash-typed-error.cjs +51 -0
- package/dist/ai-dev-loop/ash-typed-error.d.cts +54 -0
- package/dist/ai-dev-loop/ash-typed-error.d.cts.map +1 -0
- package/dist/ai-dev-loop/ash-typed-error.d.mts +54 -0
- package/dist/ai-dev-loop/ash-typed-error.d.mts.map +1 -0
- package/dist/ai-dev-loop/ash-typed-error.mjs +50 -0
- package/dist/ai-dev-loop/ash-typed-error.mjs.map +1 -0
- package/dist/ai-dev-loop/ash-validate.cjs +27 -0
- package/dist/ai-dev-loop/ash-validate.d.cts +7 -0
- package/dist/ai-dev-loop/ash-validate.d.cts.map +1 -0
- package/dist/ai-dev-loop/ash-validate.d.mts +7 -0
- package/dist/ai-dev-loop/ash-validate.d.mts.map +1 -0
- package/dist/ai-dev-loop/ash-validate.mjs +28 -0
- package/dist/ai-dev-loop/ash-validate.mjs.map +1 -0
- package/dist/ai-dev-loop/dev-loop.cjs +134 -0
- package/dist/ai-dev-loop/dev-loop.d.cts +28 -0
- package/dist/ai-dev-loop/dev-loop.d.cts.map +1 -0
- package/dist/ai-dev-loop/dev-loop.d.mts +28 -0
- package/dist/ai-dev-loop/dev-loop.d.mts.map +1 -0
- package/dist/ai-dev-loop/dev-loop.mjs +135 -0
- package/dist/ai-dev-loop/dev-loop.mjs.map +1 -0
- package/dist/ai-dev-loop/index.cjs +24 -0
- package/dist/ai-dev-loop/index.d.cts +9 -0
- package/dist/ai-dev-loop/index.d.mts +9 -0
- package/dist/ai-dev-loop/index.mjs +10 -0
- package/dist/ai-dev-loop/live-mode.cjs +17 -0
- package/dist/ai-dev-loop/live-mode.d.cts +24 -0
- package/dist/ai-dev-loop/live-mode.d.cts.map +1 -0
- package/dist/ai-dev-loop/live-mode.d.mts +24 -0
- package/dist/ai-dev-loop/live-mode.d.mts.map +1 -0
- package/dist/ai-dev-loop/live-mode.mjs +17 -0
- package/dist/ai-dev-loop/live-mode.mjs.map +1 -0
- package/dist/ai-dev-loop/meta-tools.cjs +123 -0
- package/dist/ai-dev-loop/meta-tools.d.cts +24 -0
- package/dist/ai-dev-loop/meta-tools.d.cts.map +1 -0
- package/dist/ai-dev-loop/meta-tools.d.mts +24 -0
- package/dist/ai-dev-loop/meta-tools.d.mts.map +1 -0
- package/dist/ai-dev-loop/meta-tools.mjs +120 -0
- package/dist/ai-dev-loop/meta-tools.mjs.map +1 -0
- package/dist/ai-dev-loop/structured-runner.cjs +154 -0
- package/dist/ai-dev-loop/structured-runner.d.cts +12 -0
- package/dist/ai-dev-loop/structured-runner.d.cts.map +1 -0
- package/dist/ai-dev-loop/structured-runner.d.mts +12 -0
- package/dist/ai-dev-loop/structured-runner.d.mts.map +1 -0
- package/dist/ai-dev-loop/structured-runner.mjs +155 -0
- package/dist/ai-dev-loop/structured-runner.mjs.map +1 -0
- package/dist/ai-dev-loop/system-prompt.cjs +55 -0
- package/dist/ai-dev-loop/system-prompt.d.cts +20 -0
- package/dist/ai-dev-loop/system-prompt.d.cts.map +1 -0
- package/dist/ai-dev-loop/system-prompt.d.mts +20 -0
- package/dist/ai-dev-loop/system-prompt.d.mts.map +1 -0
- package/dist/ai-dev-loop/system-prompt.mjs +54 -0
- package/dist/ai-dev-loop/system-prompt.mjs.map +1 -0
- package/dist/ast.d.cts +140 -0
- package/dist/ast.d.cts.map +1 -0
- package/dist/ast.d.mts +140 -0
- package/dist/ast.d.mts.map +1 -0
- package/dist/compiler.cjs +802 -0
- package/dist/compiler.d.cts +103 -0
- package/dist/compiler.d.cts.map +1 -0
- package/dist/compiler.d.mts +103 -0
- package/dist/compiler.d.mts.map +1 -0
- package/dist/compiler.mjs +802 -0
- package/dist/compiler.mjs.map +1 -0
- package/dist/index.cjs +14 -0
- package/dist/index.d.cts +7 -0
- package/dist/index.d.mts +7 -0
- package/dist/index.mjs +7 -0
- package/dist/lexer.cjs +451 -0
- package/dist/lexer.d.cts +14 -0
- package/dist/lexer.d.cts.map +1 -0
- package/dist/lexer.d.mts +14 -0
- package/dist/lexer.d.mts.map +1 -0
- package/dist/lexer.mjs +451 -0
- package/dist/lexer.mjs.map +1 -0
- package/dist/parser.cjs +734 -0
- package/dist/parser.d.cts +40 -0
- package/dist/parser.d.cts.map +1 -0
- package/dist/parser.d.mts +40 -0
- package/dist/parser.d.mts.map +1 -0
- package/dist/parser.mjs +734 -0
- package/dist/parser.mjs.map +1 -0
- package/dist/reference.cjs +130 -0
- package/dist/reference.d.cts +11 -0
- package/dist/reference.d.cts.map +1 -0
- package/dist/reference.d.mts +11 -0
- package/dist/reference.d.mts.map +1 -0
- package/dist/reference.mjs +130 -0
- package/dist/reference.mjs.map +1 -0
- package/dist/template.cjs +85 -0
- package/dist/template.mjs +84 -0
- package/dist/template.mjs.map +1 -0
- package/dist/type-checker.cjs +582 -0
- package/dist/type-checker.d.cts +31 -0
- package/dist/type-checker.d.cts.map +1 -0
- package/dist/type-checker.d.mts +31 -0
- package/dist/type-checker.d.mts.map +1 -0
- package/dist/type-checker.mjs +573 -0
- package/dist/type-checker.mjs.map +1 -0
- package/package.json +29 -0
- package/src/ai-dev-loop/ash-run-result.test.ts +113 -0
- package/src/ai-dev-loop/ash-run-result.ts +46 -0
- package/src/ai-dev-loop/ash-typed-error.test.ts +136 -0
- package/src/ai-dev-loop/ash-typed-error.ts +50 -0
- package/src/ai-dev-loop/ash-validate.test.ts +54 -0
- package/src/ai-dev-loop/ash-validate.ts +34 -0
- package/src/ai-dev-loop/dev-loop.test.ts +364 -0
- package/src/ai-dev-loop/dev-loop.ts +156 -0
- package/src/ai-dev-loop/dry-run.test.ts +107 -0
- package/src/ai-dev-loop/e2e-multi-fix.test.ts +473 -0
- package/src/ai-dev-loop/e2e.test.ts +324 -0
- package/src/ai-dev-loop/index.ts +15 -0
- package/src/ai-dev-loop/invariants.test.ts +253 -0
- package/src/ai-dev-loop/live-mode.test.ts +63 -0
- package/src/ai-dev-loop/live-mode.ts +33 -0
- package/src/ai-dev-loop/meta-tools.test.ts +120 -0
- package/src/ai-dev-loop/meta-tools.ts +142 -0
- package/src/ai-dev-loop/structured-runner.test.ts +159 -0
- package/src/ai-dev-loop/structured-runner.ts +209 -0
- package/src/ai-dev-loop/system-prompt.test.ts +102 -0
- package/src/ai-dev-loop/system-prompt.ts +81 -0
- package/src/ast.ts +186 -0
- package/src/compiler.test.ts +2933 -0
- package/src/compiler.ts +1103 -0
- package/src/e2e.test.ts +552 -0
- package/src/index.ts +16 -0
- package/src/lexer.test.ts +538 -0
- package/src/lexer.ts +222 -0
- package/src/parser.test.ts +1024 -0
- package/src/parser.ts +835 -0
- package/src/reference.test.ts +166 -0
- package/src/reference.ts +125 -0
- package/src/template.test.ts +210 -0
- package/src/template.ts +139 -0
- package/src/type-checker.test.ts +1494 -0
- package/src/type-checker.ts +785 -0
- package/tsconfig.json +9 -0
- package/tsdown.config.ts +12 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast.d.cts","names":[],"sources":["../src/ast.ts"],"mappings":";UAAiB,UAAA;EACf,IAAA;EACA,IAAA;EACA,IAAA;EACA,MAAA;AAAA;AAAA,UAGe,cAAA;EACf,KAAA;EACA,EAAA;EACA,KAAA;AAAA;AAAA,UAGe,cAAA;EACf,IAAA;EACA,IAAA;EACA,KAAA,GAAQ,cAAA;AAAA;AAAA,UAGO,WAAA;EACf,IAAA;EACA,IAAA;EACA,EAAA;EACA,KAAA;AAAA;AAAA,UAKe,gBAAA;EACf,IAAA;EACA,EAAA;EACA,IAAA,EAAM,UAAA;EACN,KAAA,EAAO,UAAA;AAAA;AAAA,UAGQ,qBAAA;EACf,IAAA;EACA,IAAA;AAAA;AAAA,UAGe,iBAAA;EACf,IAAA;EACA,KAAA;AAAA;AAAA,UAGe,gBAAA;EACf,IAAA;EACA,IAAA;AAAA;AAAA,KAGU,UAAA,GACR,gBAAA,GACA,qBAAA,GACA,iBAAA,GACA,gBAAA;AAAA,UAEa,aAAA;EACf,IAAA;EACA,KAAA;EACA,QAAA,GAAW,MAAA;EACX,UAAA,GAAa,UAAA;EACb,YAAA,GAAe,MAAA,SAAe,UAAA;AAAA;AAAA,UAGf,cAAA;EACf,IAAA;EACA,IAAA;AAAA;AAAA,UAGe,iBAAA;EACf,IAAA;EACA,IAAA;AAAA;AAAA,UAGe,aAAA;EACf,IAAA;EACA,IAAA;AAAA;AAAA,UAGe,gBAAA;EACf,IAAA;EACA,QAAA,EAAU,aAAA;AAAA;AAAA,UAGK,gBAAA;EACf,IAAA;EACA,OAAA;EACA,UAAA,GAAa,UAAA;AAAA;AAAA,UAGE,eAAA;EACf,IAAA;EACA,MAAA;AAAA;AAAA,UAGe,eAAA;EACf,IAAA;AAAA;AAAA,UAGe,iBAAA;EACf,IAAA;EACA,KAAA;AAAA;AAAA,UAGe,gBAAA;EACf,IAAA;EACA,IAAA;EACA,QAAA;EACA,MAAA,GAAS,MAAA;AAAA;AAAA,UAGM,WAAA;EACf,KAAA;EACA,SAAA;AAAA;AAAA,UAGe,eAAA;EACf,IAAA;EACA,KAAA;EACA,QAAA,EAAU,WAAA;EACV,QAAA;AAAA;AAAA,UAGe,gBAAA;EACf,IAAA;EACA,IAAA;EACA,OAAA;AAAA;AAAA,KAGU,aAAA,GACR,cAAA,GACA,WAAA,GACA,aAAA,GACA,cAAA,GACA,iBAAA,GACA,aAAA,GACA,gBAAA,GACA,gBAAA,GACA,eAAA,GACA,eAAA,GACA,iBAAA,GACA,gBAAA,GACA,eAAA,GACA,gBAAA;AAAA,UAEa,YAAA;EACf,IAAA;EACA,IAAA;EACA,KAAA;AAAA;AAAA,UAGe,WAAA;EACf,IAAA;EACA,UAAA;AAAA;AAAA,KAGU,kBAAA,GAAqB,YAAA,GAAe,WAAA;AAAA,UAE/B,cAAA;EACf,IAAA;EACA,IAAA;EACA,WAAA,EAAa,UAAA;EACb,QAAA,EAAU,aAAA;EACV,OAAA,GAAU,kBAAA;AAAA;AAAA,UAGK,YAAA;EACf,IAAA;EACA,IAAA;EACA,KAAA;EACA,QAAA,GAAW,aAAA;AAAA;AAAA,UAGI,gBAAA;EACf,IAAA;EACA,IAAA;EACA,YAAA;AAAA;AAAA,KAGU,iBAAA,GAAoB,cAAA,GAAiB,gBAAA,GAAmB,YAAA,GAAe,gBAAA;AAAA,UAElE,OAAA;EACf,UAAA,EAAY,iBAAA;EA/FC;EAiGb,IAAA,EAAM,cAAA;AAAA"}
|
package/dist/ast.d.mts
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
//#region src/ast.d.ts
|
|
2
|
+
interface Annotation {
|
|
3
|
+
name: string;
|
|
4
|
+
args: string[];
|
|
5
|
+
line: number;
|
|
6
|
+
column: number;
|
|
7
|
+
}
|
|
8
|
+
interface QueryCondition {
|
|
9
|
+
field: string;
|
|
10
|
+
op: "==" | "!=" | ">" | "<" | ">=" | "<=";
|
|
11
|
+
value: string | number;
|
|
12
|
+
}
|
|
13
|
+
interface FindExpression {
|
|
14
|
+
kind: "find";
|
|
15
|
+
path: string;
|
|
16
|
+
query?: QueryCondition;
|
|
17
|
+
}
|
|
18
|
+
interface WhereClause {
|
|
19
|
+
kind: "where";
|
|
20
|
+
left: string;
|
|
21
|
+
op: "==" | "!=" | ">" | "<" | ">=" | "<=";
|
|
22
|
+
right: string | number;
|
|
23
|
+
}
|
|
24
|
+
interface BinaryExpression {
|
|
25
|
+
kind: "binary";
|
|
26
|
+
op: "+" | "-" | "*" | "/";
|
|
27
|
+
left: Expression;
|
|
28
|
+
right: Expression;
|
|
29
|
+
}
|
|
30
|
+
interface FieldAccessExpression {
|
|
31
|
+
kind: "field_access";
|
|
32
|
+
path: string;
|
|
33
|
+
}
|
|
34
|
+
interface LiteralExpression {
|
|
35
|
+
kind: "literal";
|
|
36
|
+
value: string | number;
|
|
37
|
+
}
|
|
38
|
+
interface VarRefExpression {
|
|
39
|
+
kind: "var_ref";
|
|
40
|
+
name: string;
|
|
41
|
+
}
|
|
42
|
+
type Expression = BinaryExpression | FieldAccessExpression | LiteralExpression | VarRefExpression;
|
|
43
|
+
interface MapExpression {
|
|
44
|
+
kind: "map";
|
|
45
|
+
field: string;
|
|
46
|
+
mappings?: Record<string, string>;
|
|
47
|
+
expression?: Expression;
|
|
48
|
+
exprMappings?: Record<string, Expression>;
|
|
49
|
+
}
|
|
50
|
+
interface SaveExpression {
|
|
51
|
+
kind: "save";
|
|
52
|
+
path: string;
|
|
53
|
+
}
|
|
54
|
+
interface PublishExpression {
|
|
55
|
+
kind: "publish";
|
|
56
|
+
path: string;
|
|
57
|
+
}
|
|
58
|
+
interface TeeExpression {
|
|
59
|
+
kind: "tee";
|
|
60
|
+
path: string;
|
|
61
|
+
}
|
|
62
|
+
interface FanoutExpression {
|
|
63
|
+
kind: "fanout";
|
|
64
|
+
branches: PipelineStage[][];
|
|
65
|
+
}
|
|
66
|
+
interface OutputExpression {
|
|
67
|
+
kind: "output";
|
|
68
|
+
message: string;
|
|
69
|
+
expression?: Expression;
|
|
70
|
+
}
|
|
71
|
+
interface InputExpression {
|
|
72
|
+
kind: "input";
|
|
73
|
+
prompt: string;
|
|
74
|
+
}
|
|
75
|
+
interface CountExpression {
|
|
76
|
+
kind: "count";
|
|
77
|
+
}
|
|
78
|
+
interface GroupByExpression {
|
|
79
|
+
kind: "group-by";
|
|
80
|
+
field: string;
|
|
81
|
+
}
|
|
82
|
+
interface ActionExpression {
|
|
83
|
+
kind: "action";
|
|
84
|
+
path: string;
|
|
85
|
+
relative?: boolean;
|
|
86
|
+
params?: Record<string, unknown>;
|
|
87
|
+
}
|
|
88
|
+
interface RouteBranch {
|
|
89
|
+
value: string;
|
|
90
|
+
targetJob: string;
|
|
91
|
+
}
|
|
92
|
+
interface RouteExpression {
|
|
93
|
+
kind: "route";
|
|
94
|
+
field: string;
|
|
95
|
+
branches: RouteBranch[];
|
|
96
|
+
fallback?: string;
|
|
97
|
+
}
|
|
98
|
+
interface LookupExpression {
|
|
99
|
+
kind: "lookup";
|
|
100
|
+
path: string;
|
|
101
|
+
joinKey: string;
|
|
102
|
+
}
|
|
103
|
+
type PipelineStage = FindExpression | WhereClause | MapExpression | SaveExpression | PublishExpression | TeeExpression | FanoutExpression | OutputExpression | InputExpression | CountExpression | GroupByExpression | ActionExpression | RouteExpression | LookupExpression;
|
|
104
|
+
interface EventTrigger {
|
|
105
|
+
kind: "event";
|
|
106
|
+
path: string;
|
|
107
|
+
event: string;
|
|
108
|
+
}
|
|
109
|
+
interface CronTrigger {
|
|
110
|
+
kind: "cron";
|
|
111
|
+
expression: string;
|
|
112
|
+
}
|
|
113
|
+
type TriggerDeclaration = EventTrigger | CronTrigger;
|
|
114
|
+
interface JobDeclaration {
|
|
115
|
+
kind: "job";
|
|
116
|
+
name: string;
|
|
117
|
+
annotations: Annotation[];
|
|
118
|
+
pipeline: PipelineStage[];
|
|
119
|
+
trigger?: TriggerDeclaration;
|
|
120
|
+
}
|
|
121
|
+
interface LetStatement {
|
|
122
|
+
kind: "let";
|
|
123
|
+
name: string;
|
|
124
|
+
value: string | number;
|
|
125
|
+
pipeline?: PipelineStage[];
|
|
126
|
+
}
|
|
127
|
+
interface ParamDeclaration {
|
|
128
|
+
kind: "param";
|
|
129
|
+
name: string;
|
|
130
|
+
defaultValue: string | number;
|
|
131
|
+
}
|
|
132
|
+
type TopLevelStatement = JobDeclaration | OutputExpression | LetStatement | ParamDeclaration;
|
|
133
|
+
interface Program {
|
|
134
|
+
statements: TopLevelStatement[];
|
|
135
|
+
/** Backward-compatible accessor: returns only job declarations */
|
|
136
|
+
jobs: JobDeclaration[];
|
|
137
|
+
}
|
|
138
|
+
//#endregion
|
|
139
|
+
export { ActionExpression, BinaryExpression, CountExpression, CronTrigger, EventTrigger, Expression, FieldAccessExpression, FindExpression, GroupByExpression, InputExpression, JobDeclaration, LetStatement, LiteralExpression, LookupExpression, MapExpression, ParamDeclaration, PipelineStage, Program, QueryCondition, RouteBranch, RouteExpression, TopLevelStatement, TriggerDeclaration, VarRefExpression };
|
|
140
|
+
//# sourceMappingURL=ast.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast.d.mts","names":[],"sources":["../src/ast.ts"],"mappings":";UAAiB,UAAA;EACf,IAAA;EACA,IAAA;EACA,IAAA;EACA,MAAA;AAAA;AAAA,UAGe,cAAA;EACf,KAAA;EACA,EAAA;EACA,KAAA;AAAA;AAAA,UAGe,cAAA;EACf,IAAA;EACA,IAAA;EACA,KAAA,GAAQ,cAAA;AAAA;AAAA,UAGO,WAAA;EACf,IAAA;EACA,IAAA;EACA,EAAA;EACA,KAAA;AAAA;AAAA,UAKe,gBAAA;EACf,IAAA;EACA,EAAA;EACA,IAAA,EAAM,UAAA;EACN,KAAA,EAAO,UAAA;AAAA;AAAA,UAGQ,qBAAA;EACf,IAAA;EACA,IAAA;AAAA;AAAA,UAGe,iBAAA;EACf,IAAA;EACA,KAAA;AAAA;AAAA,UAGe,gBAAA;EACf,IAAA;EACA,IAAA;AAAA;AAAA,KAGU,UAAA,GACR,gBAAA,GACA,qBAAA,GACA,iBAAA,GACA,gBAAA;AAAA,UAEa,aAAA;EACf,IAAA;EACA,KAAA;EACA,QAAA,GAAW,MAAA;EACX,UAAA,GAAa,UAAA;EACb,YAAA,GAAe,MAAA,SAAe,UAAA;AAAA;AAAA,UAGf,cAAA;EACf,IAAA;EACA,IAAA;AAAA;AAAA,UAGe,iBAAA;EACf,IAAA;EACA,IAAA;AAAA;AAAA,UAGe,aAAA;EACf,IAAA;EACA,IAAA;AAAA;AAAA,UAGe,gBAAA;EACf,IAAA;EACA,QAAA,EAAU,aAAA;AAAA;AAAA,UAGK,gBAAA;EACf,IAAA;EACA,OAAA;EACA,UAAA,GAAa,UAAA;AAAA;AAAA,UAGE,eAAA;EACf,IAAA;EACA,MAAA;AAAA;AAAA,UAGe,eAAA;EACf,IAAA;AAAA;AAAA,UAGe,iBAAA;EACf,IAAA;EACA,KAAA;AAAA;AAAA,UAGe,gBAAA;EACf,IAAA;EACA,IAAA;EACA,QAAA;EACA,MAAA,GAAS,MAAA;AAAA;AAAA,UAGM,WAAA;EACf,KAAA;EACA,SAAA;AAAA;AAAA,UAGe,eAAA;EACf,IAAA;EACA,KAAA;EACA,QAAA,EAAU,WAAA;EACV,QAAA;AAAA;AAAA,UAGe,gBAAA;EACf,IAAA;EACA,IAAA;EACA,OAAA;AAAA;AAAA,KAGU,aAAA,GACR,cAAA,GACA,WAAA,GACA,aAAA,GACA,cAAA,GACA,iBAAA,GACA,aAAA,GACA,gBAAA,GACA,gBAAA,GACA,eAAA,GACA,eAAA,GACA,iBAAA,GACA,gBAAA,GACA,eAAA,GACA,gBAAA;AAAA,UAEa,YAAA;EACf,IAAA;EACA,IAAA;EACA,KAAA;AAAA;AAAA,UAGe,WAAA;EACf,IAAA;EACA,UAAA;AAAA;AAAA,KAGU,kBAAA,GAAqB,YAAA,GAAe,WAAA;AAAA,UAE/B,cAAA;EACf,IAAA;EACA,IAAA;EACA,WAAA,EAAa,UAAA;EACb,QAAA,EAAU,aAAA;EACV,OAAA,GAAU,kBAAA;AAAA;AAAA,UAGK,YAAA;EACf,IAAA;EACA,IAAA;EACA,KAAA;EACA,QAAA,GAAW,aAAA;AAAA;AAAA,UAGI,gBAAA;EACf,IAAA;EACA,IAAA;EACA,YAAA;AAAA;AAAA,KAGU,iBAAA,GAAoB,cAAA,GAAiB,gBAAA,GAAmB,YAAA,GAAe,gBAAA;AAAA,UAElE,OAAA;EACf,UAAA,EAAY,iBAAA;EA/FC;EAiGb,IAAA,EAAM,cAAA;AAAA"}
|