@design-intelligence/ghost 0.26.1 → 0.28.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/dist/commands/gather-command.js +5 -5
- package/dist/commands/gather-command.js.map +1 -1
- package/dist/commands/pull-command.js +5 -3
- package/dist/commands/pull-command.js.map +1 -1
- package/dist/commands/review-command.d.ts.map +1 -1
- package/dist/commands/review-command.js +0 -2
- package/dist/commands/review-command.js.map +1 -1
- package/dist/embed/gather.d.ts.map +1 -1
- package/dist/embed/gather.js +4 -2
- package/dist/embed/gather.js.map +1 -1
- package/dist/embed/inspect.d.ts.map +1 -1
- package/dist/embed/inspect.js +21 -28
- package/dist/embed/inspect.js.map +1 -1
- package/dist/embed/pull.d.ts.map +1 -1
- package/dist/embed/pull.js +32 -1
- package/dist/embed/pull.js.map +1 -1
- package/dist/embed/types.d.ts +4 -0
- package/dist/embed/types.d.ts.map +1 -1
- package/dist/ghost-core/catalog/assemble.d.ts.map +1 -1
- package/dist/ghost-core/catalog/assemble.js +5 -1
- package/dist/ghost-core/catalog/assemble.js.map +1 -1
- package/dist/ghost-core/catalog/closest.d.ts +1 -1
- package/dist/ghost-core/catalog/closest.js +1 -1
- package/dist/ghost-core/catalog/menu.d.ts +8 -6
- package/dist/ghost-core/catalog/menu.d.ts.map +1 -1
- package/dist/ghost-core/catalog/menu.js +5 -3
- package/dist/ghost-core/catalog/menu.js.map +1 -1
- package/dist/ghost-core/catalog/types.d.ts +5 -1
- package/dist/ghost-core/catalog/types.d.ts.map +1 -1
- package/dist/ghost-core/check/lint.d.ts.map +1 -1
- package/dist/ghost-core/check/lint.js +0 -10
- package/dist/ghost-core/check/lint.js.map +1 -1
- package/dist/ghost-core/check/load.d.ts.map +1 -1
- package/dist/ghost-core/check/load.js +0 -2
- package/dist/ghost-core/check/load.js.map +1 -1
- package/dist/ghost-core/check/types.d.ts +0 -2
- package/dist/ghost-core/check/types.d.ts.map +1 -1
- package/dist/ghost-core/index.d.ts +1 -2
- package/dist/ghost-core/index.d.ts.map +1 -1
- package/dist/ghost-core/index.js +1 -3
- package/dist/ghost-core/index.js.map +1 -1
- package/dist/ghost-core/material-transport.d.ts +4 -8
- package/dist/ghost-core/material-transport.d.ts.map +1 -1
- package/dist/ghost-core/material-transport.js +39 -91
- package/dist/ghost-core/material-transport.js.map +1 -1
- package/dist/ghost-core/materials.d.ts +1 -1
- package/dist/ghost-core/materials.d.ts.map +1 -1
- package/dist/ghost-core/materials.js +4 -1
- package/dist/ghost-core/materials.js.map +1 -1
- package/dist/ghost-core/node/schema.d.ts +3 -1
- package/dist/ghost-core/node/schema.d.ts.map +1 -1
- package/dist/ghost-core/node/schema.js +4 -2
- package/dist/ghost-core/node/schema.js.map +1 -1
- package/dist/ghost-core/node/serialize.d.ts +7 -5
- package/dist/ghost-core/node/serialize.d.ts.map +1 -1
- package/dist/ghost-core/node/serialize.js +18 -9
- package/dist/ghost-core/node/serialize.js.map +1 -1
- package/dist/ghost-core/node/types.d.ts +9 -6
- package/dist/ghost-core/node/types.d.ts.map +1 -1
- package/dist/init-payloads/median/cliche.median.md +1 -1
- package/dist/init-payloads/skeleton/brand.md +1 -1
- package/dist/init-payloads/skeleton/context.conversation.md +1 -1
- package/dist/init-payloads/skeleton/foundation.color.md +1 -1
- package/dist/init-payloads/skeleton/foundation.composition.md +1 -1
- package/dist/init-payloads/skeleton/foundation.controls.md +1 -1
- package/dist/init-payloads/skeleton/foundation.layout.md +1 -1
- package/dist/init-payloads/skeleton/foundation.motion.md +1 -1
- package/dist/init-payloads/skeleton/foundation.type.md +1 -1
- package/dist/init-payloads/skeleton/foundation.voice.md +1 -1
- package/dist/init-payloads/vessel-light/anti-goal.median.md +1 -1
- package/dist/init-payloads/vessel-light/anti-goal.tells.md +1 -1
- package/dist/init-payloads/vessel-light/grammar.color-roles.md +1 -3
- package/dist/init-payloads/vessel-light/grammar.conversation.md +1 -2
- package/dist/init-payloads/vessel-light/grammar.deletion.md +1 -1
- package/dist/init-payloads/vessel-light/grammar.hierarchy.md +1 -3
- package/dist/init-payloads/vessel-light/grammar.job.md +1 -1
- package/dist/init-payloads/vessel-light/grammar.motion.md +1 -3
- package/dist/init-payloads/vessel-light/grammar.rhythm.md +1 -3
- package/dist/init-payloads/vessel-light/grammar.surfaces.md +1 -3
- package/dist/init-payloads/vessel-light/index.md +1 -1
- package/dist/init-payloads/vessel-light/register.data-density.md +1 -1
- package/dist/init-payloads/vessel-light/register.editorial.md +1 -1
- package/dist/init-payloads/vessel-light/register.email.md +1 -1
- package/dist/init-payloads/vessel-light/signature.palette.md +1 -1
- package/dist/init-payloads/vessel-light/signature.shape.md +1 -1
- package/dist/init-payloads/vessel-light/signature.temperature.md +1 -1
- package/dist/init-payloads/vessel-light/signature.type.md +8 -2
- package/dist/review/baseline.d.ts +1 -1
- package/dist/review/baseline.d.ts.map +1 -1
- package/dist/review/baseline.js +2 -6
- package/dist/review/baseline.js.map +1 -1
- package/dist/review/review-packet.d.ts +2 -6
- package/dist/review/review-packet.d.ts.map +1 -1
- package/dist/review/review-packet.js +6 -20
- package/dist/review/review-packet.js.map +1 -1
- package/dist/scan/fingerprint-package-lint.d.ts.map +1 -1
- package/dist/scan/fingerprint-package-lint.js +20 -15
- package/dist/scan/fingerprint-package-lint.js.map +1 -1
- package/dist/skill-bundle/SKILL.md +10 -11
- package/dist/skill-bundle/references/adapting-a-starter.md +8 -2
- package/dist/skill-bundle/references/authoring-scenarios.md +1 -1
- package/dist/skill-bundle/references/blocks.md +10 -10
- package/dist/skill-bundle/references/brief.md +1 -1
- package/dist/skill-bundle/references/capture.md +23 -20
- package/dist/skill-bundle/references/distill.md +1 -1
- package/dist/skill-bundle/references/making.md +7 -7
- package/dist/skill-bundle/references/recall.md +1 -1
- package/dist/skill-bundle/references/schema.md +21 -20
- package/dist/skill-bundle/references/self-check.md +2 -2
- package/dist/skill-bundle/references/steering-audit.md +3 -3
- package/package.json +1 -1
- package/dist/ghost-core/glob.d.ts +0 -5
- package/dist/ghost-core/glob.d.ts.map +0 -1
- package/dist/ghost-core/glob.js +0 -68
- package/dist/ghost-core/glob.js.map +0 -1
- package/dist/review/glob.d.ts +0 -2
- package/dist/review/glob.d.ts.map +0 -1
- package/dist/review/glob.js +0 -2
- package/dist/review/glob.js.map +0 -1
- package/dist/review/probes.d.ts +0 -13
- package/dist/review/probes.d.ts.map +0 -1
- package/dist/review/probes.js +0 -45
- package/dist/review/probes.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../src/ghost-core/glob.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAG/D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD"}
|
package/dist/ghost-core/glob.js
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/** Tiny dependency-free glob matcher for repo-relative paths. */
|
|
2
|
-
export function matchesGlob(glob, path) {
|
|
3
|
-
const re = globToRegExp(glob);
|
|
4
|
-
return re.test(normalize(path));
|
|
5
|
-
}
|
|
6
|
-
export function hasGlobMagic(path) {
|
|
7
|
-
return /[*?{]/.test(path);
|
|
8
|
-
}
|
|
9
|
-
export function normalizeGlobPath(path) {
|
|
10
|
-
return normalize(path);
|
|
11
|
-
}
|
|
12
|
-
function normalize(p) {
|
|
13
|
-
return p.replace(/\\/g, "/").replace(/^\.\//, "");
|
|
14
|
-
}
|
|
15
|
-
const cache = new Map();
|
|
16
|
-
function globToRegExp(glob) {
|
|
17
|
-
const cached = cache.get(glob);
|
|
18
|
-
if (cached)
|
|
19
|
-
return cached;
|
|
20
|
-
const g = normalize(glob);
|
|
21
|
-
let re = "";
|
|
22
|
-
for (let i = 0; i < g.length; i++) {
|
|
23
|
-
const c = g[i];
|
|
24
|
-
if (c === "*") {
|
|
25
|
-
if (g[i + 1] === "*") {
|
|
26
|
-
i++;
|
|
27
|
-
if (g[i + 1] === "/") {
|
|
28
|
-
i++;
|
|
29
|
-
re += "(?:.*/)?";
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
re += ".*";
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
re += "[^/]*";
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
else if (c === "?") {
|
|
40
|
-
re += "[^/]";
|
|
41
|
-
}
|
|
42
|
-
else if (c === "{") {
|
|
43
|
-
const close = g.indexOf("}", i);
|
|
44
|
-
if (close === -1) {
|
|
45
|
-
re += "\\{";
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
const alts = g
|
|
49
|
-
.slice(i + 1, close)
|
|
50
|
-
.split(",")
|
|
51
|
-
.map(escapeLiteral)
|
|
52
|
-
.join("|");
|
|
53
|
-
re += `(?:${alts})`;
|
|
54
|
-
i = close;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
re += escapeLiteral(c);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
const compiled = new RegExp(`^${re}$`);
|
|
62
|
-
cache.set(glob, compiled);
|
|
63
|
-
return compiled;
|
|
64
|
-
}
|
|
65
|
-
function escapeLiteral(s) {
|
|
66
|
-
return s.replace(/[.+^${}()|[\]\\]/g, "\\$&");
|
|
67
|
-
}
|
|
68
|
-
//# sourceMappingURL=glob.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/ghost-core/glob.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,IAAY;IACpD,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,SAAS,CAAC,CAAS;IAC1B,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;AAExC,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACd,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACrB,CAAC,EAAE,CAAC;gBACJ,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBACrB,CAAC,EAAE,CAAC;oBACJ,EAAE,IAAI,UAAU,CAAC;gBACnB,CAAC;qBAAM,CAAC;oBACN,EAAE,IAAI,IAAI,CAAC;gBACb,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,EAAE,IAAI,OAAO,CAAC;YAChB,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACrB,EAAE,IAAI,MAAM,CAAC;QACf,CAAC;aAAM,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAChC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjB,EAAE,IAAI,KAAK,CAAC;YACd,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAG,CAAC;qBACX,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;qBACnB,KAAK,CAAC,GAAG,CAAC;qBACV,GAAG,CAAC,aAAa,CAAC;qBAClB,IAAI,CAAC,GAAG,CAAC,CAAC;gBACb,EAAE,IAAI,MAAM,IAAI,GAAG,CAAC;gBACpB,CAAC,GAAG,KAAK,CAAC;YACZ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,EAAE,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACvC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC1B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,aAAa,CAAC,CAAS;IAC9B,OAAO,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;AAChD,CAAC"}
|
package/dist/review/glob.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../src/review/glob.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/review/glob.js
DELETED
package/dist/review/glob.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/review/glob.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/review/probes.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export interface ProbeEvidence {
|
|
2
|
-
command: string;
|
|
3
|
-
timedOut: boolean;
|
|
4
|
-
exitCode: number | null;
|
|
5
|
-
stdout: string;
|
|
6
|
-
stderr: string;
|
|
7
|
-
}
|
|
8
|
-
export declare function runProbe(command: string, options: {
|
|
9
|
-
cwd: string;
|
|
10
|
-
timeoutMs?: number;
|
|
11
|
-
truncateChars?: number;
|
|
12
|
-
}): Promise<ProbeEvidence>;
|
|
13
|
-
//# sourceMappingURL=probes.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"probes.d.ts","sourceRoot":"","sources":["../../src/review/probes.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IACP,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GACA,OAAO,CAAC,aAAa,CAAC,CAiCxB"}
|
package/dist/review/probes.js
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { exec } from "node:child_process";
|
|
2
|
-
import { promisify } from "node:util";
|
|
3
|
-
const execAsync = promisify(exec);
|
|
4
|
-
const DEFAULT_PROBE_TIMEOUT_MS = 30_000;
|
|
5
|
-
const DEFAULT_PROBE_TRUNCATE_CHARS = 4_000;
|
|
6
|
-
export async function runProbe(command, options) {
|
|
7
|
-
const timeout = options.timeoutMs ?? DEFAULT_PROBE_TIMEOUT_MS;
|
|
8
|
-
const truncateChars = options.truncateChars ?? DEFAULT_PROBE_TRUNCATE_CHARS;
|
|
9
|
-
try {
|
|
10
|
-
const { stdout, stderr } = await execAsync(command, {
|
|
11
|
-
cwd: options.cwd,
|
|
12
|
-
timeout,
|
|
13
|
-
maxBuffer: 8 * 1024 * 1024,
|
|
14
|
-
});
|
|
15
|
-
return {
|
|
16
|
-
command,
|
|
17
|
-
timedOut: false,
|
|
18
|
-
exitCode: 0,
|
|
19
|
-
stdout: truncate(stdout, truncateChars),
|
|
20
|
-
stderr: truncate(stderr, truncateChars),
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
catch (err) {
|
|
24
|
-
const error = err;
|
|
25
|
-
const timedOut = error.signal === "SIGTERM" || error.killed === true;
|
|
26
|
-
return {
|
|
27
|
-
command,
|
|
28
|
-
timedOut,
|
|
29
|
-
exitCode: typeof error.code === "number" ? error.code : null,
|
|
30
|
-
stdout: truncate(streamToString(error.stdout), truncateChars),
|
|
31
|
-
stderr: truncate(streamToString(error.stderr), truncateChars),
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
function streamToString(value) {
|
|
36
|
-
if (value === undefined)
|
|
37
|
-
return "";
|
|
38
|
-
return Buffer.isBuffer(value) ? value.toString("utf8") : value;
|
|
39
|
-
}
|
|
40
|
-
function truncate(value, limit) {
|
|
41
|
-
if (value.length <= limit)
|
|
42
|
-
return value;
|
|
43
|
-
return `${value.slice(0, limit)}\n… truncated to ${limit} characters`;
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=probes.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"probes.js","sourceRoot":"","sources":["../../src/review/probes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAClC,MAAM,wBAAwB,GAAG,MAAM,CAAC;AACxC,MAAM,4BAA4B,GAAG,KAAK,CAAC;AAU3C,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,OAAe,EACf,OAIC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,IAAI,wBAAwB,CAAC;IAC9D,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,4BAA4B,CAAC;IAC5E,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE;YAClD,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,OAAO;YACP,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;SAC3B,CAAC,CAAC;QACH,OAAO;YACL,OAAO;YACP,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;YACvC,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;SACxC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,GAMb,CAAC;QACF,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC;QACrE,OAAO;YACL,OAAO;YACP,QAAQ;YACR,QAAQ,EAAE,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;YAC5D,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;YAC7D,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;SAC9D,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAkC;IACxD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACnC,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACjE,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa,EAAE,KAAa;IAC5C,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,oBAAoB,KAAK,aAAa,CAAC;AACxE,CAAC"}
|