appduct 0.10.0 → 0.11.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/README.md +122 -52
- package/dist/artifact-inspect.d.ts +0 -1
- package/dist/bin.d.ts +0 -1
- package/dist/bin.js +1250 -2
- package/dist/cli/command-options.d.ts +8 -1
- package/dist/cli/create-cli.d.ts +0 -1
- package/dist/cli/dispatch.d.ts +10 -1
- package/dist/cli/envelope.d.ts +19 -0
- package/dist/cli/global-flags.d.ts +30 -0
- package/dist/cli/open-target.d.ts +25 -8
- package/dist/cli/result-types.d.ts +31 -5
- package/dist/cli/router.d.ts +78 -0
- package/dist/cli/routes/daemon/index.d.ts +9 -0
- package/dist/cli/routes/daemon/index.js +848 -0
- package/dist/cli/routes/daemon/run.d.ts +3 -0
- package/dist/cli/routes/daemon/run.js +3246 -0
- package/dist/cli/routes/daemon/start.d.ts +3 -0
- package/dist/cli/routes/daemon/start.js +1677 -0
- package/dist/cli/routes/daemon/status.d.ts +4 -0
- package/dist/cli/routes/daemon/status.js +1685 -0
- package/dist/cli/routes/daemon/stop.d.ts +4 -0
- package/dist/cli/routes/daemon/stop.js +1655 -0
- package/dist/cli/routes/doctor.d.ts +3 -0
- package/dist/cli/routes/doctor.js +1075 -0
- package/dist/cli/routes/events.d.ts +3 -0
- package/dist/cli/routes/events.js +1915 -0
- package/dist/cli/routes/init.d.ts +3 -0
- package/dist/cli/routes/init.js +1486 -0
- package/dist/cli/routes/invoke.d.ts +3 -0
- package/dist/cli/routes/invoke.js +1893 -0
- package/dist/cli/routes/keygen.d.ts +3 -0
- package/dist/cli/routes/keygen.js +928 -0
- package/dist/cli/routes/link.d.ts +3 -0
- package/dist/cli/routes/link.js +2714 -0
- package/dist/cli/routes/ls.d.ts +3 -0
- package/dist/cli/routes/ls.js +1668 -0
- package/dist/cli/routes/mcp.d.ts +5 -0
- package/dist/cli/routes/mcp.js +3929 -0
- package/dist/cli/routes/revoke.d.ts +3 -0
- package/dist/cli/routes/revoke.js +1684 -0
- package/dist/cli/routes/tools.d.ts +3 -0
- package/dist/cli/routes/tools.js +1860 -0
- package/dist/cli/runner.d.ts +3 -11
- package/dist/cli/types.d.ts +9 -6
- package/dist/cli/version-guard.d.ts +20 -0
- package/dist/cli.d.ts +0 -1
- package/dist/client/app-client.d.ts +4 -4
- package/dist/client/bootstrap.d.ts +4 -4
- package/dist/client/connect.d.ts +0 -1
- package/dist/client/errors.d.ts +0 -1
- package/dist/client/index.d.ts +1 -2
- package/dist/client/index.js +2389 -16
- package/dist/commands/daemon/context.d.ts +14 -0
- package/dist/commands/daemon/run.d.ts +11 -0
- package/dist/commands/daemon/start.d.ts +5 -0
- package/dist/commands/daemon/status.d.ts +5 -0
- package/dist/commands/daemon/stop.d.ts +5 -0
- package/dist/commands/doctor.d.ts +0 -1
- package/dist/commands/events.d.ts +0 -1
- package/dist/commands/init.d.ts +17 -4
- package/dist/commands/invoke.d.ts +0 -1
- package/dist/commands/keygen.d.ts +0 -1
- package/dist/commands/link.d.ts +1 -2
- package/dist/commands/ls.d.ts +0 -1
- package/dist/commands/mcp.d.ts +2 -4
- package/dist/commands/revoke.d.ts +0 -1
- package/dist/commands/tools.d.ts +19 -3
- package/dist/daemon/address.d.ts +0 -1
- package/dist/daemon/audit.d.ts +6 -11
- package/dist/daemon/calls.d.ts +0 -1
- package/dist/daemon/config.d.ts +13 -16
- package/dist/daemon/daemon.d.ts +0 -1
- package/dist/daemon/event-bus.d.ts +0 -1
- package/dist/daemon/links.d.ts +0 -1
- package/dist/daemon/listener.d.ts +0 -1
- package/dist/daemon/log-rotation.d.ts +0 -1
- package/dist/daemon/pidfile.d.ts +14 -8
- package/dist/daemon/policy.d.ts +0 -1
- package/dist/daemon/registry.d.ts +0 -1
- package/dist/daemon/rpc-errors.d.ts +16 -0
- package/dist/daemon/rpc-server.d.ts +0 -11
- package/dist/daemon/sessions.d.ts +0 -1
- package/dist/daemon/socket-probe.d.ts +0 -1
- package/dist/daemon/state-dir.d.ts +0 -1
- package/dist/daemon/timers.d.ts +0 -1
- package/dist/daemon/tls.d.ts +0 -1
- package/dist/errors.d.ts +0 -1
- package/dist/host-certificate.d.ts +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +1307 -3
- package/dist/key-material.d.ts +0 -1
- package/dist/link.d.ts +8 -7
- package/dist/mcp/app-tools.d.ts +153 -0
- package/dist/mcp/connect-tool.d.ts +14 -8
- package/dist/mcp/daemon-tools.d.ts +2 -11
- package/dist/mcp/events-tool.d.ts +0 -1
- package/dist/mcp/server.d.ts +33 -14
- package/dist/native-scheme.d.ts +0 -1
- package/dist/output.d.ts +8 -11
- package/dist/package-root.d.ts +11 -0
- package/dist/package-version.d.ts +0 -1
- package/dist/qr-terminal.d.ts +0 -1
- package/dist/rpc/client.d.ts +3 -3
- package/dist/scheme.d.ts +60 -2
- package/dist/spki-pin.d.ts +0 -1
- package/package.json +6 -3
- package/dist/artifact-inspect.d.ts.map +0 -1
- package/dist/artifact-inspect.js +0 -334
- package/dist/bin.d.ts.map +0 -1
- package/dist/cli/command-options.d.ts.map +0 -1
- package/dist/cli/command-options.js +0 -95
- package/dist/cli/create-cli.d.ts.map +0 -1
- package/dist/cli/create-cli.js +0 -56
- package/dist/cli/dispatch.d.ts.map +0 -1
- package/dist/cli/dispatch.js +0 -275
- package/dist/cli/open-target.d.ts.map +0 -1
- package/dist/cli/open-target.js +0 -438
- package/dist/cli/result-types.d.ts.map +0 -1
- package/dist/cli/result-types.js +0 -6
- package/dist/cli/runner.d.ts.map +0 -1
- package/dist/cli/runner.js +0 -111
- package/dist/cli/types.d.ts.map +0 -1
- package/dist/cli/types.js +0 -10
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -2
- package/dist/client/app-client.d.ts.map +0 -1
- package/dist/client/app-client.js +0 -223
- package/dist/client/bootstrap.d.ts.map +0 -1
- package/dist/client/bootstrap.js +0 -108
- package/dist/client/connect.d.ts.map +0 -1
- package/dist/client/connect.js +0 -38
- package/dist/client/errors.d.ts.map +0 -1
- package/dist/client/errors.js +0 -40
- package/dist/client/index.d.ts.map +0 -1
- package/dist/commands/daemon.d.ts +0 -22
- package/dist/commands/daemon.d.ts.map +0 -1
- package/dist/commands/daemon.js +0 -128
- package/dist/commands/doctor.d.ts.map +0 -1
- package/dist/commands/doctor.js +0 -42
- package/dist/commands/events.d.ts.map +0 -1
- package/dist/commands/events.js +0 -76
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -231
- package/dist/commands/invoke.d.ts.map +0 -1
- package/dist/commands/invoke.js +0 -54
- package/dist/commands/keygen.d.ts.map +0 -1
- package/dist/commands/keygen.js +0 -46
- package/dist/commands/link.d.ts.map +0 -1
- package/dist/commands/link.js +0 -43
- package/dist/commands/ls.d.ts.map +0 -1
- package/dist/commands/ls.js +0 -7
- package/dist/commands/mcp.d.ts.map +0 -1
- package/dist/commands/mcp.js +0 -98
- package/dist/commands/revoke.d.ts.map +0 -1
- package/dist/commands/revoke.js +0 -7
- package/dist/commands/tools.d.ts.map +0 -1
- package/dist/commands/tools.js +0 -52
- package/dist/daemon/address.d.ts.map +0 -1
- package/dist/daemon/address.js +0 -71
- package/dist/daemon/audit.d.ts.map +0 -1
- package/dist/daemon/audit.js +0 -237
- package/dist/daemon/calls.d.ts.map +0 -1
- package/dist/daemon/calls.js +0 -158
- package/dist/daemon/config.d.ts.map +0 -1
- package/dist/daemon/config.js +0 -170
- package/dist/daemon/daemon.d.ts.map +0 -1
- package/dist/daemon/daemon.js +0 -560
- package/dist/daemon/event-bus.d.ts.map +0 -1
- package/dist/daemon/event-bus.js +0 -111
- package/dist/daemon/links.d.ts.map +0 -1
- package/dist/daemon/links.js +0 -118
- package/dist/daemon/listener.d.ts.map +0 -1
- package/dist/daemon/listener.js +0 -132
- package/dist/daemon/log-rotation.d.ts.map +0 -1
- package/dist/daemon/log-rotation.js +0 -136
- package/dist/daemon/pidfile.d.ts.map +0 -1
- package/dist/daemon/pidfile.js +0 -90
- package/dist/daemon/policy.d.ts.map +0 -1
- package/dist/daemon/policy.js +0 -24
- package/dist/daemon/registry.d.ts.map +0 -1
- package/dist/daemon/registry.js +0 -31
- package/dist/daemon/rpc-server.d.ts.map +0 -1
- package/dist/daemon/rpc-server.js +0 -203
- package/dist/daemon/sessions.d.ts.map +0 -1
- package/dist/daemon/sessions.js +0 -429
- package/dist/daemon/socket-probe.d.ts.map +0 -1
- package/dist/daemon/socket-probe.js +0 -28
- package/dist/daemon/state-dir.d.ts.map +0 -1
- package/dist/daemon/state-dir.js +0 -43
- package/dist/daemon/timers.d.ts.map +0 -1
- package/dist/daemon/timers.js +0 -12
- package/dist/daemon/tls.d.ts.map +0 -1
- package/dist/daemon/tls.js +0 -79
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -162
- package/dist/host-certificate.d.ts.map +0 -1
- package/dist/host-certificate.js +0 -111
- package/dist/index.d.ts.map +0 -1
- package/dist/key-material.d.ts.map +0 -1
- package/dist/key-material.js +0 -42
- package/dist/link.d.ts.map +0 -1
- package/dist/link.js +0 -117
- package/dist/mcp/connect-tool.d.ts.map +0 -1
- package/dist/mcp/connect-tool.js +0 -396
- package/dist/mcp/daemon-tools.d.ts.map +0 -1
- package/dist/mcp/daemon-tools.js +0 -29
- package/dist/mcp/events-tool.d.ts.map +0 -1
- package/dist/mcp/events-tool.js +0 -322
- package/dist/mcp/server.d.ts.map +0 -1
- package/dist/mcp/server.js +0 -538
- package/dist/mcp/tool-mapping.d.ts +0 -58
- package/dist/mcp/tool-mapping.d.ts.map +0 -1
- package/dist/mcp/tool-mapping.js +0 -143
- package/dist/mcp/tool-namespace.d.ts +0 -40
- package/dist/mcp/tool-namespace.d.ts.map +0 -1
- package/dist/mcp/tool-namespace.js +0 -65
- package/dist/native-scheme.d.ts.map +0 -1
- package/dist/native-scheme.js +0 -465
- package/dist/output.d.ts.map +0 -1
- package/dist/output.js +0 -342
- package/dist/package-version.d.ts.map +0 -1
- package/dist/package-version.js +0 -47
- package/dist/qr-terminal.d.ts.map +0 -1
- package/dist/qr-terminal.js +0 -45
- package/dist/rpc/client.d.ts.map +0 -1
- package/dist/rpc/client.js +0 -819
- package/dist/scheme.d.ts.map +0 -1
- package/dist/scheme.js +0 -321
- package/dist/spki-pin.d.ts.map +0 -1
- package/dist/spki-pin.js +0 -14
package/dist/daemon/config.js
DELETED
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `config.json` loading and validation (ARCHITECTURE.md §3). All fields are optional; unknown
|
|
3
|
-
* top-level keys produce a warning (not an error); invalid values throw a clear error naming the
|
|
4
|
-
* offending key.
|
|
5
|
-
*/
|
|
6
|
-
import { readFile } from "node:fs/promises";
|
|
7
|
-
const KNOWN_TOP_LEVEL_KEYS = new Set([
|
|
8
|
-
"wssPort",
|
|
9
|
-
"keyPath",
|
|
10
|
-
"graceSeconds",
|
|
11
|
-
"linkTtlSeconds",
|
|
12
|
-
"keepaliveIntervalSeconds",
|
|
13
|
-
"eventBufferSize",
|
|
14
|
-
"auditRetentionDays",
|
|
15
|
-
"daemonLogMaxBytes",
|
|
16
|
-
"policy",
|
|
17
|
-
"advertisedIp",
|
|
18
|
-
"scheme",
|
|
19
|
-
"iosBundleId",
|
|
20
|
-
"restartDaemonOnVersionMismatch",
|
|
21
|
-
]);
|
|
22
|
-
const KNOWN_POLICY_KEYS = new Set(["default", "destructive", "tools"]);
|
|
23
|
-
const POLICY_DECISIONS = new Set(["allow", "deny", "prompt"]);
|
|
24
|
-
export const DEFAULT_AUDIT_RETENTION_DAYS = 30;
|
|
25
|
-
export const DEFAULT_DAEMON_LOG_MAX_BYTES = 10 * 1024 * 1024;
|
|
26
|
-
export class AppductConfigError extends Error {
|
|
27
|
-
key;
|
|
28
|
-
constructor(key, message) {
|
|
29
|
-
super(message);
|
|
30
|
-
this.key = key;
|
|
31
|
-
this.name = "AppductConfigError";
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
const configError = (key, message) => {
|
|
35
|
-
return new AppductConfigError(key, `Invalid Appduct config value for "${key}": ${message}`);
|
|
36
|
-
};
|
|
37
|
-
const requirePositiveInteger = (value, key) => {
|
|
38
|
-
if (typeof value !== "number" || !Number.isInteger(value) || value <= 0) {
|
|
39
|
-
throw configError(key, "must be a positive integer.");
|
|
40
|
-
}
|
|
41
|
-
return value;
|
|
42
|
-
};
|
|
43
|
-
const requireNonEmptyString = (value, key) => {
|
|
44
|
-
if (typeof value !== "string" || value.length === 0) {
|
|
45
|
-
throw configError(key, "must be a non-empty string.");
|
|
46
|
-
}
|
|
47
|
-
return value;
|
|
48
|
-
};
|
|
49
|
-
const requireBoolean = (value, key) => {
|
|
50
|
-
if (typeof value !== "boolean") {
|
|
51
|
-
throw configError(key, "must be a boolean.");
|
|
52
|
-
}
|
|
53
|
-
return value;
|
|
54
|
-
};
|
|
55
|
-
const requirePolicyDecision = (value, key) => {
|
|
56
|
-
if (typeof value !== "string" || !POLICY_DECISIONS.has(value)) {
|
|
57
|
-
throw configError(key, 'must be "allow", "deny", or "prompt".');
|
|
58
|
-
}
|
|
59
|
-
return value;
|
|
60
|
-
};
|
|
61
|
-
export const defaultConfig = (paths) => {
|
|
62
|
-
return {
|
|
63
|
-
wssPort: 8443,
|
|
64
|
-
keyPath: paths.keyPath,
|
|
65
|
-
graceSeconds: 600,
|
|
66
|
-
linkTtlSeconds: 300,
|
|
67
|
-
keepaliveIntervalSeconds: 15,
|
|
68
|
-
eventBufferSize: 256,
|
|
69
|
-
auditRetentionDays: DEFAULT_AUDIT_RETENTION_DAYS,
|
|
70
|
-
daemonLogMaxBytes: DEFAULT_DAEMON_LOG_MAX_BYTES,
|
|
71
|
-
restartDaemonOnVersionMismatch: false,
|
|
72
|
-
policy: {
|
|
73
|
-
default: "allow",
|
|
74
|
-
destructive: "allow",
|
|
75
|
-
},
|
|
76
|
-
};
|
|
77
|
-
};
|
|
78
|
-
/** Loads and validates `<state-dir>/config.json`, falling back to defaults when it is missing. */
|
|
79
|
-
export const loadConfig = async (paths, options = {}) => {
|
|
80
|
-
const warn = options.warn ?? (() => { });
|
|
81
|
-
const config = defaultConfig(paths);
|
|
82
|
-
let raw;
|
|
83
|
-
try {
|
|
84
|
-
raw = JSON.parse(await readFile(paths.configPath, "utf8"));
|
|
85
|
-
}
|
|
86
|
-
catch (error) {
|
|
87
|
-
if (error.code === "ENOENT") {
|
|
88
|
-
return config;
|
|
89
|
-
}
|
|
90
|
-
throw configError("config.json", `could not be read/parsed (${error.message}).`);
|
|
91
|
-
}
|
|
92
|
-
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
|
|
93
|
-
throw configError("config.json", "must be a JSON object.");
|
|
94
|
-
}
|
|
95
|
-
const parsed = raw;
|
|
96
|
-
for (const key of Object.keys(parsed)) {
|
|
97
|
-
if (!KNOWN_TOP_LEVEL_KEYS.has(key)) {
|
|
98
|
-
warn(`Unknown Appduct config key "${key}" is ignored.`);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
if (parsed.wssPort !== undefined) {
|
|
102
|
-
config.wssPort = requirePositiveInteger(parsed.wssPort, "wssPort");
|
|
103
|
-
}
|
|
104
|
-
if (parsed.keyPath !== undefined) {
|
|
105
|
-
config.keyPath = requireNonEmptyString(parsed.keyPath, "keyPath");
|
|
106
|
-
}
|
|
107
|
-
if (parsed.advertisedIp !== undefined) {
|
|
108
|
-
config.advertisedIp = requireNonEmptyString(parsed.advertisedIp, "advertisedIp");
|
|
109
|
-
}
|
|
110
|
-
if (parsed.scheme !== undefined) {
|
|
111
|
-
config.scheme = requireNonEmptyString(parsed.scheme, "scheme");
|
|
112
|
-
}
|
|
113
|
-
// Only a non-empty string here, like `scheme` — deliberately *not* the bundle-id charset check.
|
|
114
|
-
// This loader runs on every daemon start, and a typo in a CLI-side convenience key must not stop
|
|
115
|
-
// the daemon from starting. The charset is enforced where the value is actually used (`mintLink`,
|
|
116
|
-
// `handleConnectTool`, and `deliverToOpenTarget` itself), which is where it can be reported as a
|
|
117
|
-
// usage error against the command that needed it.
|
|
118
|
-
if (parsed.iosBundleId !== undefined) {
|
|
119
|
-
config.iosBundleId = requireNonEmptyString(parsed.iosBundleId, "iosBundleId");
|
|
120
|
-
}
|
|
121
|
-
if (parsed.graceSeconds !== undefined) {
|
|
122
|
-
config.graceSeconds = requirePositiveInteger(parsed.graceSeconds, "graceSeconds");
|
|
123
|
-
}
|
|
124
|
-
if (parsed.linkTtlSeconds !== undefined) {
|
|
125
|
-
config.linkTtlSeconds = requirePositiveInteger(parsed.linkTtlSeconds, "linkTtlSeconds");
|
|
126
|
-
}
|
|
127
|
-
if (parsed.keepaliveIntervalSeconds !== undefined) {
|
|
128
|
-
config.keepaliveIntervalSeconds = requirePositiveInteger(parsed.keepaliveIntervalSeconds, "keepaliveIntervalSeconds");
|
|
129
|
-
}
|
|
130
|
-
if (parsed.eventBufferSize !== undefined) {
|
|
131
|
-
config.eventBufferSize = requirePositiveInteger(parsed.eventBufferSize, "eventBufferSize");
|
|
132
|
-
}
|
|
133
|
-
if (parsed.auditRetentionDays !== undefined) {
|
|
134
|
-
config.auditRetentionDays = requirePositiveInteger(parsed.auditRetentionDays, "auditRetentionDays");
|
|
135
|
-
}
|
|
136
|
-
if (parsed.daemonLogMaxBytes !== undefined) {
|
|
137
|
-
config.daemonLogMaxBytes = requirePositiveInteger(parsed.daemonLogMaxBytes, "daemonLogMaxBytes");
|
|
138
|
-
}
|
|
139
|
-
if (parsed.restartDaemonOnVersionMismatch !== undefined) {
|
|
140
|
-
config.restartDaemonOnVersionMismatch = requireBoolean(parsed.restartDaemonOnVersionMismatch, "restartDaemonOnVersionMismatch");
|
|
141
|
-
}
|
|
142
|
-
if (parsed.policy !== undefined) {
|
|
143
|
-
if (typeof parsed.policy !== "object" || parsed.policy === null || Array.isArray(parsed.policy)) {
|
|
144
|
-
throw configError("policy", "must be an object.");
|
|
145
|
-
}
|
|
146
|
-
const policy = parsed.policy;
|
|
147
|
-
for (const key of Object.keys(policy)) {
|
|
148
|
-
if (!KNOWN_POLICY_KEYS.has(key)) {
|
|
149
|
-
warn(`Unknown Appduct config key "policy.${key}" is ignored.`);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
if (policy.default !== undefined) {
|
|
153
|
-
config.policy.default = requirePolicyDecision(policy.default, "policy.default");
|
|
154
|
-
}
|
|
155
|
-
if (policy.destructive !== undefined) {
|
|
156
|
-
config.policy.destructive = requirePolicyDecision(policy.destructive, "policy.destructive");
|
|
157
|
-
}
|
|
158
|
-
if (policy.tools !== undefined) {
|
|
159
|
-
if (typeof policy.tools !== "object" || policy.tools === null || Array.isArray(policy.tools)) {
|
|
160
|
-
throw configError("policy.tools", "must be an object.");
|
|
161
|
-
}
|
|
162
|
-
const tools = {};
|
|
163
|
-
for (const [toolKey, toolValue] of Object.entries(policy.tools)) {
|
|
164
|
-
tools[toolKey] = requirePolicyDecision(toolValue, `policy.tools["${toolKey}"]`);
|
|
165
|
-
}
|
|
166
|
-
config.policy.tools = tools;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
return config;
|
|
170
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/daemon/daemon.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA8BH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAGvD,OAAO,EAAc,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAGnE,OAAO,EAAuC,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEtF,OAAO,EAAmD,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACrG,OAAO,EAAqC,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAmB/E,iGAAiG;AACjG,eAAO,MAAM,uBAAuB,QAAsB,CAAC;AAE3D,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB;;oFAEgF;IAChF,aAAa,CAAC,EAAE,MAAM,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;CAClE,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,IAAI,CAAC;IAChB,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,yGAAyG;IACzG,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,oCAAoC;IACpC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B,CAAC;AAkOF,eAAO,MAAM,WAAW,GAAU,SAAS,aAAa,KAAG,OAAO,CAAC,aAAa,CAkb/E,CAAC"}
|