@detergent-software/atk 8.2.0-dev.2 → 8.2.0-dev.3
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 +7 -0
- package/build/cli.js +2 -0
- package/build/cli.js.map +1 -1
- package/build/commands/setup.d.ts.map +1 -1
- package/build/commands/setup.js +1 -13
- package/build/commands/setup.js.map +1 -1
- package/build/lib/windows-tty-stdin.d.ts +24 -0
- package/build/lib/windows-tty-stdin.d.ts.map +1 -0
- package/build/lib/windows-tty-stdin.js +68 -0
- package/build/lib/windows-tty-stdin.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
## [8.2.0-dev.3](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/branchCompare?baseVersion=GTv8.2.0-dev.2&targetVersion=GTv8.2.0-dev.3) (2026-10-05)
|
|
2
|
+
|
|
3
|
+
### Bug Fixes
|
|
4
|
+
|
|
5
|
+
* **cli:** hold Windows TTY reads while Ink has raw mode off (ATK-166) ([eaff386](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/eaff386826681705f8e55bfc7eba43bb44ac844e))
|
|
6
|
+
* **cli:** track the TTY guard's own read state (ATK-166) ([245a2b8](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/245a2b8cf5df145ffc67a96c95f3f3520186d723))
|
|
7
|
+
|
|
1
8
|
## [8.2.0-dev.2](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/branchCompare?baseVersion=GTv8.2.0-dev.1&targetVersion=GTv8.2.0-dev.2) (2026-10-05)
|
|
2
9
|
|
|
3
10
|
### Bug Fixes
|
package/build/cli.js
CHANGED
|
@@ -7,9 +7,11 @@ import { fileURLToPath } from 'node:url';
|
|
|
7
7
|
import Pastel from 'pastel';
|
|
8
8
|
import { ASCII_ART, GRADIENT } from './components/Header.js';
|
|
9
9
|
import { noteCachedUpdate } from './lib/update-check.js';
|
|
10
|
+
import { holdCookedTtyReads } from './lib/windows-tty-stdin.js';
|
|
10
11
|
if (process.platform === 'win32') {
|
|
11
12
|
register('./windows-esm-loader.js', import.meta.url);
|
|
12
13
|
}
|
|
14
|
+
holdCookedTtyReads(process.stdin);
|
|
13
15
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
14
16
|
const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf8'));
|
|
15
17
|
function buildHelpHeader(version) {
|
package/build/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.tsx"],"names":[],"mappings":";AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.tsx"],"names":[],"mappings":";AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;IACjC,QAAQ,CAAC,yBAAyB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvD,CAAC;AAED,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAElC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAEjF,CAAC;AAEF,SAAS,eAAe,CAAC,OAAe;IACtC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7G,MAAM,OAAO,GAAG,KAAK,CAAC;IAEtB,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QACrC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,EAAE,CAAC;QAC1D,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,WAAW,EAAE,CAAC;QAC5D,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,CAAC;AAED,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC;IACrB,UAAU,EAAE,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC,IAAI;IACvB,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,GAAG,CAAC,OAAO;CACrB,CAAC,CAAC;AAEH,qFAAqF;AACrF,oFAAoF;AACpF,+DAA+D;AAC/D,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAC5D,MAAM,gBAAgB,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,WAAW,4EAAuE,CAAC;AAEhG,eAAO,MAAM,OAAO;;;;;iBAyClB,CAAC;AAEH,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,WAAW,4EAAuE,CAAC;AAEhG,eAAO,MAAM,OAAO;;;;;iBAyClB,CAAC;AAEH,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,kDA6HpG"}
|
package/build/commands/setup.js
CHANGED
|
@@ -42,7 +42,7 @@ export const options = z.object({
|
|
|
42
42
|
});
|
|
43
43
|
export default function Setup({ options: { org: orgFlag, projectRoot, tool: toolFlags, yes } }) {
|
|
44
44
|
const { exit } = useApp();
|
|
45
|
-
const { isRawModeSupported: isTTY
|
|
45
|
+
const { isRawModeSupported: isTTY } = useStdin();
|
|
46
46
|
const flags = {
|
|
47
47
|
isTTY,
|
|
48
48
|
orgFlag,
|
|
@@ -58,18 +58,6 @@ export default function Setup({ options: { org: orgFlag, projectRoot, tool: tool
|
|
|
58
58
|
dispatch({ type: 'SUBMIT_ORG' });
|
|
59
59
|
}, [dispatch]);
|
|
60
60
|
// ---------------------------------------------------------------------------
|
|
61
|
-
// Release stdin once the prompts are done
|
|
62
|
-
// ---------------------------------------------------------------------------
|
|
63
|
-
// Ink turns raw mode off when the last prompt unmounts but leaves the TTY reading. On
|
|
64
|
-
// Windows that read becomes a cooked console read that can't be cancelled, so the
|
|
65
|
-
// process wouldn't exit until the next keypress (ATK-158). Nothing in setup reads input
|
|
66
|
-
// after its prompts, so nothing may call useInput from 'creating' on.
|
|
67
|
-
useEffect(() => {
|
|
68
|
-
if (state.phase === 'creating' && isTTY) {
|
|
69
|
-
stdin.destroy();
|
|
70
|
-
}
|
|
71
|
-
}, [state.phase, isTTY, stdin]);
|
|
72
|
-
// ---------------------------------------------------------------------------
|
|
73
61
|
// Exit effect
|
|
74
62
|
// ---------------------------------------------------------------------------
|
|
75
63
|
useEffect(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAClD,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,CAAC,MAAM,WAAW,GAAG,oEAAoE,CAAC;AAEhG,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,GAAG,EAAE,CAAC;SACH,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,MAAM,CAAC;QACL,KAAK,EAAE,GAAG;QACV,WAAW,EAAE,4BAA4B;KAC1C,CAAC,CACH;IACH,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,MAAM,CAAC;QACL,KAAK,EAAE,GAAG;QACV,WAAW,EAAE,iCAAiC;KAC/C,CAAC,CACH;IACH,sFAAsF;IACtF,mFAAmF;IACnF,IAAI,EAAE,CAAC;SACJ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CACP,MAAM,CAAC;QACL,KAAK,EAAE,GAAG;QACV,WAAW,EACT,6IAA6I;QAC/I,gBAAgB,EAAE,OAAO;KAC1B,CAAC,CACH;IACH,GAAG,EAAE,CAAC;SACH,OAAO,EAAE;SACT,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CACP,MAAM,CAAC;QACL,KAAK,EAAE,GAAG;QACV,WAAW,EAAE,yCAAyC;KACvD,CAAC,CACH;CACJ,CAAC,CAAC;AAMH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,EAAS;IACnG,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** The parts of a TTY stdin (`tty.ReadStream`) the guard wraps. */
|
|
2
|
+
export interface RawModeStdin {
|
|
3
|
+
readonly isRaw?: boolean;
|
|
4
|
+
readonly isTTY?: boolean;
|
|
5
|
+
setRawMode?(mode: boolean): unknown;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Keep a Windows TTY stdin from reading while raw mode is off.
|
|
9
|
+
*
|
|
10
|
+
* Ink turns raw mode off between prompts and on exit but leaves the TTY reading, and a
|
|
11
|
+
* TTY stream restarts its read on every `stdin.read()`. On Windows that read becomes a
|
|
12
|
+
* cooked console read that libuv can't cancel under ConPTY: the process won't exit until
|
|
13
|
+
* a key is pressed, and the next prompt loses its input to the stale line read
|
|
14
|
+
* (ATK-158, ATK-166). So a read is stopped before raw mode turns off, a read started
|
|
15
|
+
* while cooked is held back, and a held read starts once raw mode is back on.
|
|
16
|
+
*
|
|
17
|
+
* Does nothing off Windows, without a TTY, or if Node's handle doesn't look as expected.
|
|
18
|
+
* Once installed, nothing on Windows can read the TTY in cooked mode (e.g. readline).
|
|
19
|
+
*
|
|
20
|
+
* @param stdin - The process's stdin.
|
|
21
|
+
* @param platform - The platform to act for (tests pass it explicitly).
|
|
22
|
+
*/
|
|
23
|
+
export declare function holdCookedTtyReads(stdin: RawModeStdin, platform?: NodeJS.Platform): void;
|
|
24
|
+
//# sourceMappingURL=windows-tty-stdin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windows-tty-stdin.d.ts","sourceRoot":"","sources":["../../src/lib/windows-tty-stdin.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;CACrC;AAQD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAAG,IAAI,CA4C1G"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keep a Windows TTY stdin from reading while raw mode is off.
|
|
3
|
+
*
|
|
4
|
+
* Ink turns raw mode off between prompts and on exit but leaves the TTY reading, and a
|
|
5
|
+
* TTY stream restarts its read on every `stdin.read()`. On Windows that read becomes a
|
|
6
|
+
* cooked console read that libuv can't cancel under ConPTY: the process won't exit until
|
|
7
|
+
* a key is pressed, and the next prompt loses its input to the stale line read
|
|
8
|
+
* (ATK-158, ATK-166). So a read is stopped before raw mode turns off, a read started
|
|
9
|
+
* while cooked is held back, and a held read starts once raw mode is back on.
|
|
10
|
+
*
|
|
11
|
+
* Does nothing off Windows, without a TTY, or if Node's handle doesn't look as expected.
|
|
12
|
+
* Once installed, nothing on Windows can read the TTY in cooked mode (e.g. readline).
|
|
13
|
+
*
|
|
14
|
+
* @param stdin - The process's stdin.
|
|
15
|
+
* @param platform - The platform to act for (tests pass it explicitly).
|
|
16
|
+
*/
|
|
17
|
+
export function holdCookedTtyReads(stdin, platform = process.platform) {
|
|
18
|
+
if (platform !== 'win32' || !stdin.isTTY || !stdin.setRawMode)
|
|
19
|
+
return;
|
|
20
|
+
const handle = Reflect.get(stdin, '_handle');
|
|
21
|
+
if (!isTtyHandle(handle))
|
|
22
|
+
return;
|
|
23
|
+
const setRawMode = stdin.setRawMode.bind(stdin);
|
|
24
|
+
const readStart = handle.readStart.bind(handle);
|
|
25
|
+
const readStop = handle.readStop.bind(handle);
|
|
26
|
+
// Whether libuv is reading, and whether Node asked for a read that is being held.
|
|
27
|
+
let reading = false;
|
|
28
|
+
let heldRead = false;
|
|
29
|
+
const startRead = () => {
|
|
30
|
+
const err = readStart();
|
|
31
|
+
reading = err === 0;
|
|
32
|
+
return err;
|
|
33
|
+
};
|
|
34
|
+
handle.readStart = () => {
|
|
35
|
+
if (stdin.isRaw)
|
|
36
|
+
return startRead();
|
|
37
|
+
heldRead = true;
|
|
38
|
+
return 0;
|
|
39
|
+
};
|
|
40
|
+
handle.readStop = () => {
|
|
41
|
+
heldRead = false;
|
|
42
|
+
reading = false;
|
|
43
|
+
return readStop();
|
|
44
|
+
};
|
|
45
|
+
stdin.setRawMode = (mode) => {
|
|
46
|
+
if (!mode && reading) {
|
|
47
|
+
readStop();
|
|
48
|
+
reading = false;
|
|
49
|
+
heldRead = true;
|
|
50
|
+
}
|
|
51
|
+
const result = setRawMode(mode);
|
|
52
|
+
// Only once the switch took, and never on a handle that destroy() has closed.
|
|
53
|
+
if (stdin.isRaw && heldRead && Reflect.get(stdin, '_handle') === handle) {
|
|
54
|
+
heldRead = false;
|
|
55
|
+
startRead();
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function isTtyHandle(value) {
|
|
61
|
+
return (typeof value === 'object' &&
|
|
62
|
+
value !== null &&
|
|
63
|
+
'readStart' in value &&
|
|
64
|
+
typeof value.readStart === 'function' &&
|
|
65
|
+
'readStop' in value &&
|
|
66
|
+
typeof value.readStop === 'function');
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=windows-tty-stdin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windows-tty-stdin.js","sourceRoot":"","sources":["../../src/lib/windows-tty-stdin.ts"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAmB,EAAE,WAA4B,OAAO,CAAC,QAAQ;IAClG,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU;QAAE,OAAO;IACtE,MAAM,MAAM,GAAY,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACtD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAAE,OAAO;IAEjC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9C,kFAAkF;IAClF,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,MAAM,SAAS,GAAG,GAAG,EAAE;QACrB,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;QACxB,OAAO,GAAG,GAAG,KAAK,CAAC,CAAC;QACpB,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEF,MAAM,CAAC,SAAS,GAAG,GAAG,EAAE;QACtB,IAAI,KAAK,CAAC,KAAK;YAAE,OAAO,SAAS,EAAE,CAAC;QACpC,QAAQ,GAAG,IAAI,CAAC;QAChB,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IAEF,MAAM,CAAC,QAAQ,GAAG,GAAG,EAAE;QACrB,QAAQ,GAAG,KAAK,CAAC;QACjB,OAAO,GAAG,KAAK,CAAC;QAChB,OAAO,QAAQ,EAAE,CAAC;IACpB,CAAC,CAAC;IAEF,KAAK,CAAC,UAAU,GAAG,CAAC,IAAa,EAAE,EAAE;QACnC,IAAI,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;YACrB,QAAQ,EAAE,CAAC;YACX,OAAO,GAAG,KAAK,CAAC;YAChB,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;QACD,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAChC,8EAA8E;QAC9E,IAAI,KAAK,CAAC,KAAK,IAAI,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,MAAM,EAAE,CAAC;YACxE,QAAQ,GAAG,KAAK,CAAC;YACjB,SAAS,EAAE,CAAC;QACd,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,WAAW,IAAI,KAAK;QACpB,OAAO,KAAK,CAAC,SAAS,KAAK,UAAU;QACrC,UAAU,IAAI,KAAK;QACnB,OAAO,KAAK,CAAC,QAAQ,KAAK,UAAU,CACrC,CAAC;AACJ,CAAC"}
|