@kraki/tentacle 0.11.18 → 0.11.19
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/daemon-worker.js +3 -1
- package/dist/daemon-worker.js.map +1 -1
- package/dist/daemon.d.ts +4 -4
- package/dist/daemon.js +117 -30
- package/dist/daemon.js.map +1 -1
- package/package.json +1 -1
package/dist/daemon-worker.js
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* KeyManager handles E2E encryption keys.
|
|
11
11
|
*/
|
|
12
12
|
import { execSync } from 'node:child_process';
|
|
13
|
-
import { loadConfig, loadChannelKey, getOrCreateDeviceId, getConfigPath, getChannelKeyPath, getVersion } from './config.js';
|
|
13
|
+
import { loadConfig, loadChannelKey, getOrCreateDeviceId, getConfigPath, getChannelKeyPath, getVersion, saveDaemonPid } from './config.js';
|
|
14
14
|
import { CopilotAdapter } from './adapters/copilot.js';
|
|
15
15
|
// On macOS the daemon is NOT detached (no setsid) to preserve the
|
|
16
16
|
// Gatekeeper session for code signing. Ignore SIGHUP so we survive
|
|
@@ -34,6 +34,8 @@ process.on('uncaughtException', (err) => {
|
|
|
34
34
|
process.exit(1);
|
|
35
35
|
});
|
|
36
36
|
export async function startWorker() {
|
|
37
|
+
// Write PID immediately so the launcher (launchctl or CLI) can find us
|
|
38
|
+
saveDaemonPid(process.pid);
|
|
37
39
|
logger.info('Daemon starting…');
|
|
38
40
|
const configPath = getConfigPath();
|
|
39
41
|
const channelKeyPath = getChannelKeyPath();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-worker.js","sourceRoot":"","sources":["../src/daemon-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,mBAAmB,EAAE,aAAa,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"daemon-worker.js","sourceRoot":"","sources":["../src/daemon-worker.ts"],"names":[],"mappings":"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"}
|
package/dist/daemon.d.ts
CHANGED
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
*
|
|
7
7
|
* On macOS, downloaded SEA binaries carry com.apple.provenance which
|
|
8
8
|
* cannot be removed. macOS 26+ CSM 2 blocks direct fork()+execve() of
|
|
9
|
-
* such binaries
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
9
|
+
* such binaries from child processes. To bypass this, macOS SEA builds
|
|
10
|
+
* use launchctl to have launchd spawn the daemon in a completely
|
|
11
|
+
* independent context. If launchctl also fails, the caller falls back
|
|
12
|
+
* to running the daemon worker in the current process.
|
|
13
13
|
*/
|
|
14
14
|
import { type KrakiConfig } from './config.js';
|
|
15
15
|
export declare const INTERNAL_DAEMON_WORKER_COMMAND = "__daemon-worker";
|
package/dist/daemon.js
CHANGED
|
@@ -6,17 +6,34 @@
|
|
|
6
6
|
*
|
|
7
7
|
* On macOS, downloaded SEA binaries carry com.apple.provenance which
|
|
8
8
|
* cannot be removed. macOS 26+ CSM 2 blocks direct fork()+execve() of
|
|
9
|
-
* such binaries
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
9
|
+
* such binaries from child processes. To bypass this, macOS SEA builds
|
|
10
|
+
* use launchctl to have launchd spawn the daemon in a completely
|
|
11
|
+
* independent context. If launchctl also fails, the caller falls back
|
|
12
|
+
* to running the daemon worker in the current process.
|
|
13
13
|
*/
|
|
14
|
-
import { spawn } from 'node:child_process';
|
|
15
|
-
import { closeSync, mkdirSync, openSync } from 'node:fs';
|
|
14
|
+
import { spawn, execSync } from 'node:child_process';
|
|
15
|
+
import { closeSync, mkdirSync, openSync, writeFileSync, existsSync, unlinkSync } from 'node:fs';
|
|
16
16
|
import { delimiter, join, dirname, resolve } from 'node:path';
|
|
17
|
+
import { homedir } from 'node:os';
|
|
17
18
|
import { isSea } from 'node:sea';
|
|
18
19
|
import { getLogsDir, getLogVerbosity, saveDaemonPid, loadDaemonPid, clearDaemonPid, } from './config.js';
|
|
19
20
|
const STARTUP_GRACE_MS = 1500;
|
|
21
|
+
const LAUNCHD_LABEL = 'cloud.corelli.kraki';
|
|
22
|
+
function getLaunchdPlistPath() {
|
|
23
|
+
return join(homedir(), 'Library', 'LaunchAgents', `${LAUNCHD_LABEL}.plist`);
|
|
24
|
+
}
|
|
25
|
+
function unloadLaunchdAgent() {
|
|
26
|
+
try {
|
|
27
|
+
execSync(`launchctl unload "${getLaunchdPlistPath()}" 2>/dev/null`, { stdio: 'ignore' });
|
|
28
|
+
}
|
|
29
|
+
catch { /* not loaded */ }
|
|
30
|
+
}
|
|
31
|
+
function cleanupLaunchdPlist() {
|
|
32
|
+
unloadLaunchdAgent();
|
|
33
|
+
const p = getLaunchdPlistPath();
|
|
34
|
+
if (existsSync(p))
|
|
35
|
+
unlinkSync(p);
|
|
36
|
+
}
|
|
20
37
|
export const INTERNAL_DAEMON_WORKER_COMMAND = '__daemon-worker';
|
|
21
38
|
export function getDaemonBootstrapLogPath() {
|
|
22
39
|
return join(getLogsDir(), 'daemon-bootstrap.log');
|
|
@@ -117,29 +134,104 @@ export class MacOSCodeSignatureError extends Error {
|
|
|
117
134
|
}
|
|
118
135
|
}
|
|
119
136
|
// ── Start / Stop ────────────────────────────────────────
|
|
137
|
+
/**
|
|
138
|
+
* Start the daemon via launchctl on macOS SEA.
|
|
139
|
+
* launchd spawns the process in a clean context, bypassing CSM restrictions.
|
|
140
|
+
* The daemon-worker saves its own PID; we poll for it here.
|
|
141
|
+
*/
|
|
142
|
+
async function startDaemonLaunchctl(config) {
|
|
143
|
+
const logLevel = getLogVerbosity(config) === 'verbose' ? 'debug' : 'info';
|
|
144
|
+
const bootstrapLogPath = getDaemonBootstrapLogPath();
|
|
145
|
+
mkdirSync(dirname(bootstrapLogPath), { recursive: true });
|
|
146
|
+
const plistDir = join(homedir(), 'Library', 'LaunchAgents');
|
|
147
|
+
mkdirSync(plistDir, { recursive: true });
|
|
148
|
+
// Build PATH that includes locations for `gh` and other tools
|
|
149
|
+
const pathParts = new Set((process.env.PATH ?? '').split(':'));
|
|
150
|
+
for (const p of ['/usr/local/bin', '/opt/homebrew/bin', '/usr/bin', '/bin'])
|
|
151
|
+
pathParts.add(p);
|
|
152
|
+
const envEntries = [
|
|
153
|
+
['NODE_ENV', 'production'],
|
|
154
|
+
['LOG_LEVEL', logLevel],
|
|
155
|
+
['PATH', [...pathParts].filter(Boolean).join(':')],
|
|
156
|
+
['HOME', homedir()],
|
|
157
|
+
];
|
|
158
|
+
if (process.env.KRAKI_RELAY_URL)
|
|
159
|
+
envEntries.push(['KRAKI_RELAY_URL', process.env.KRAKI_RELAY_URL]);
|
|
160
|
+
const envXml = envEntries
|
|
161
|
+
.map(([k, v]) => ` <key>${k}</key>\n <string>${escapeXml(v)}</string>`)
|
|
162
|
+
.join('\n');
|
|
163
|
+
const plist = `<?xml version="1.0" encoding="UTF-8"?>
|
|
164
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
165
|
+
<plist version="1.0">
|
|
166
|
+
<dict>
|
|
167
|
+
<key>Label</key>
|
|
168
|
+
<string>${LAUNCHD_LABEL}</string>
|
|
169
|
+
<key>ProgramArguments</key>
|
|
170
|
+
<array>
|
|
171
|
+
<string>${escapeXml(process.execPath)}</string>
|
|
172
|
+
<string>${INTERNAL_DAEMON_WORKER_COMMAND}</string>
|
|
173
|
+
</array>
|
|
174
|
+
<key>RunAtLoad</key>
|
|
175
|
+
<true/>
|
|
176
|
+
<key>KeepAlive</key>
|
|
177
|
+
<false/>
|
|
178
|
+
<key>EnvironmentVariables</key>
|
|
179
|
+
<dict>
|
|
180
|
+
${envXml}
|
|
181
|
+
</dict>
|
|
182
|
+
<key>StandardOutPath</key>
|
|
183
|
+
<string>${escapeXml(bootstrapLogPath)}</string>
|
|
184
|
+
<key>StandardErrorPath</key>
|
|
185
|
+
<string>${escapeXml(bootstrapLogPath)}</string>
|
|
186
|
+
<key>WorkingDirectory</key>
|
|
187
|
+
<string>${escapeXml(homedir())}</string>
|
|
188
|
+
</dict>
|
|
189
|
+
</plist>`;
|
|
190
|
+
const plistPath = getLaunchdPlistPath();
|
|
191
|
+
writeFileSync(plistPath, plist);
|
|
192
|
+
unloadLaunchdAgent();
|
|
193
|
+
execSync(`launchctl load "${plistPath}"`, { stdio: 'ignore' });
|
|
194
|
+
// The daemon-worker writes its own PID on startup. Poll for it.
|
|
195
|
+
const deadline = Date.now() + STARTUP_GRACE_MS;
|
|
196
|
+
while (Date.now() < deadline) {
|
|
197
|
+
await new Promise(r => setTimeout(r, 200));
|
|
198
|
+
const pid = loadDaemonPid();
|
|
199
|
+
if (pid !== null) {
|
|
200
|
+
try {
|
|
201
|
+
process.kill(pid, 0);
|
|
202
|
+
return pid;
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
// PID saved but process already dead → CSM or crash
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
// Daemon didn't start or died immediately
|
|
211
|
+
cleanupLaunchdPlist();
|
|
212
|
+
throw new MacOSCodeSignatureError(bootstrapLogPath);
|
|
213
|
+
}
|
|
214
|
+
function escapeXml(s) {
|
|
215
|
+
return s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
216
|
+
}
|
|
120
217
|
export async function startDaemon(config, cliEntryPath) {
|
|
121
|
-
// Kill any existing daemon(s) before starting a new one
|
|
122
218
|
stopDaemon();
|
|
219
|
+
// On macOS SEA, use launchctl so launchd spawns the daemon in a clean
|
|
220
|
+
// context that isn't blocked by CSM provenance tracking.
|
|
221
|
+
if (process.platform === 'darwin' && isSea()) {
|
|
222
|
+
return startDaemonLaunchctl(config);
|
|
223
|
+
}
|
|
123
224
|
const launch = resolveDaemonLaunch(cliEntryPath);
|
|
124
225
|
launch.env.LOG_LEVEL = getLogVerbosity(config) === 'verbose' ? 'debug' : 'info';
|
|
125
226
|
const bootstrapLogPath = getDaemonBootstrapLogPath();
|
|
126
227
|
mkdirSync(dirname(bootstrapLogPath), { recursive: true });
|
|
127
228
|
const bootstrapFd = openSync(bootstrapLogPath, 'w');
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
const useMacOSShellSpawn = process.platform === 'darwin' && isSea();
|
|
135
|
-
const child = useMacOSShellSpawn
|
|
136
|
-
? spawn('/bin/sh', ['-c', `exec "${launch.runtime}" ${launch.args.map(a => `"${a}"`).join(' ')}`], { detached: true, stdio: ['ignore', bootstrapFd, bootstrapFd], cwd: launch.cwd, env: launch.env })
|
|
137
|
-
: spawn(launch.runtime, launch.args, {
|
|
138
|
-
detached: true,
|
|
139
|
-
stdio: ['ignore', bootstrapFd, bootstrapFd],
|
|
140
|
-
cwd: launch.cwd,
|
|
141
|
-
env: launch.env,
|
|
142
|
-
});
|
|
229
|
+
const child = spawn(launch.runtime, launch.args, {
|
|
230
|
+
detached: true,
|
|
231
|
+
stdio: ['ignore', bootstrapFd, bootstrapFd],
|
|
232
|
+
cwd: launch.cwd,
|
|
233
|
+
env: launch.env,
|
|
234
|
+
});
|
|
143
235
|
closeSync(bootstrapFd);
|
|
144
236
|
if (!child.pid) {
|
|
145
237
|
throw new Error(`Kraki failed to start: no daemon PID returned. Check ${bootstrapLogPath}`);
|
|
@@ -154,14 +246,6 @@ export async function startDaemon(config, cliEntryPath) {
|
|
|
154
246
|
catch {
|
|
155
247
|
// Child may already be gone
|
|
156
248
|
}
|
|
157
|
-
// On macOS, downloaded SEA binaries get SIGKILL'd by CSM 2 when
|
|
158
|
-
// fork()+execve()'d due to com.apple.provenance. Signal the caller
|
|
159
|
-
// to fall back to in-process daemon.
|
|
160
|
-
if (process.platform === 'darwin' &&
|
|
161
|
-
err instanceof Error &&
|
|
162
|
-
err.message.includes('SIGKILL')) {
|
|
163
|
-
throw new MacOSCodeSignatureError(bootstrapLogPath);
|
|
164
|
-
}
|
|
165
249
|
throw err;
|
|
166
250
|
}
|
|
167
251
|
child.unref();
|
|
@@ -179,6 +263,9 @@ export function stopDaemon() {
|
|
|
179
263
|
}
|
|
180
264
|
clearDaemonPid();
|
|
181
265
|
}
|
|
266
|
+
// On macOS, also clean up launchd agent
|
|
267
|
+
if (process.platform === 'darwin')
|
|
268
|
+
cleanupLaunchdPlist();
|
|
182
269
|
return pid !== null;
|
|
183
270
|
}
|
|
184
271
|
//# sourceMappingURL=daemon.js.map
|
package/dist/daemon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAqB,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAChG,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,OAAO,EACL,UAAU,EACV,eAAe,EAEf,aAAa,EACb,aAAa,EACb,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC9B,MAAM,aAAa,GAAG,qBAAqB,CAAC;AAE5C,SAAS,mBAAmB;IAC1B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,aAAa,QAAQ,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,kBAAkB;IACzB,IAAI,CAAC;QACH,QAAQ,CAAC,qBAAqB,mBAAmB,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3F,CAAC;IAAC,MAAM,CAAC,CAAC,gBAAgB,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,mBAAmB;IAC1B,kBAAkB,EAAE,CAAC;IACrB,MAAM,CAAC,GAAG,mBAAmB,EAAE,CAAC;IAChC,IAAI,UAAU,CAAC,CAAC,CAAC;QAAE,UAAU,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC;AACD,MAAM,CAAC,MAAM,8BAA8B,GAAG,iBAAiB,CAAC;AAUhE,MAAM,UAAU,yBAAyB;IACvC,OAAO,IAAI,CAAC,UAAU,EAAE,EAAE,sBAAsB,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,eAAmC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAClD,OAAO,GAAG,KAAK,EAAE;IAEjB,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,QAAQ;YACzB,IAAI,EAAE,CAAC,8BAA8B,CAAC;YACtC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAClB,GAAG,EAAE;gBACH,GAAG,OAAO,CAAC,GAAG;gBACd,QAAQ,EAAE,YAAY;aACvB;YACD,UAAU,EAAE,OAAO,CAAC,QAAQ;SAC7B,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC7C,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAEvD,MAAM,QAAQ,GAAG,UAAU;QACzB,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;QAC1F,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;IAEhD,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,QAAQ;QACzB,IAAI,EAAE,UAAU;YACd,CAAC,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,8BAA8B,CAAC;YAChE,CAAC,CAAC,CAAC,SAAS,EAAE,8BAA8B,CAAC;QAC/C,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW;QAC7C,GAAG,EAAE;YACH,GAAG,OAAO,CAAC,GAAG;YACd,QAAQ,EAAE,YAAY;YACtB,IAAI,EAAE,CAAC,GAAG,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;SAC5E;QACD,UAAU,EAAE,SAAS;KACtB,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,KAAmB,EACnB,gBAAwB,EACxB,SAAS,GAAG,gBAAgB;IAE5B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC5B,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,CAAC,GAAU,EAAE,EAAE;YAC7B,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,GAAG,CAAC,OAAO,WAAW,gBAAgB,EAAE,CAAC,CAAC,CAAC;QACxF,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,CAAC,IAAmB,EAAE,MAA6B,EAAE,EAAE;YACpE,OAAO,EAAE,CAAC;YACV,MAAM,CACJ,IAAI,KAAK,CACP,qCAAqC,IAAI,IAAI,MAAM,YAAY,MAAM,IAAI,MAAM,YAAY,gBAAgB,EAAE,CAC9G,CACF,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;QACZ,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC;AASD,MAAM,UAAU,eAAe;IAC7B,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAC5B,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC/B,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,yCAAyC;QACzC,cAAc,EAAE,CAAC;QACjB,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAC5B,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IAEvD,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,cAAc,EAAE,CAAC;QACjB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACvC,CAAC;AACH,CAAC;AAED,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChD,YAAY,gBAAwB;QAClC,KAAK,CACH,gEAAgE;YAChE,4CAA4C,gBAAgB,EAAE,CAC/D,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AAED,2DAA2D;AAE3D;;;;GAIG;AACH,KAAK,UAAU,oBAAoB,CAAC,MAAmB;IACrD,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAC1E,MAAM,gBAAgB,GAAG,yBAAyB,EAAE,CAAC;IACrD,SAAS,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;IAC5D,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzC,8DAA8D;IAC9D,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,KAAK,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,CAAC;QAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAE9F,MAAM,UAAU,GAAuB;QACrC,CAAC,UAAU,EAAE,YAAY,CAAC;QAC1B,CAAC,WAAW,EAAE,QAAQ,CAAC;QACvB,CAAC,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;KACpB,CAAC;IACF,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe;QAAE,UAAU,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;IAEnG,MAAM,MAAM,GAAG,UAAU;SACtB,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,2BAA2B,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;SACpF,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,KAAK,GAAG;;;;;cAKF,aAAa;;;kBAGT,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;kBAC3B,8BAA8B;;;;;;;;EAQ9C,MAAM;;;cAGM,SAAS,CAAC,gBAAgB,CAAC;;cAE3B,SAAS,CAAC,gBAAgB,CAAC;;cAE3B,SAAS,CAAC,OAAO,EAAE,CAAC;;SAEzB,CAAC;IAER,MAAM,SAAS,GAAG,mBAAmB,EAAE,CAAC;IACxC,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAChC,kBAAkB,EAAE,CAAC;IACrB,QAAQ,CAAC,mBAAmB,SAAS,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE/D,gEAAgE;IAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC;IAC/C,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;QAC5B,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACrB,OAAO,GAAG,CAAC;YACb,CAAC;YAAC,MAAM,CAAC;gBACP,oDAAoD;gBACpD,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,mBAAmB,EAAE,CAAC;IACtB,MAAM,IAAI,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,SAAS,CAAC,CAAS;IAC1B,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAmB,EAAE,YAAqB;IAC1E,UAAU,EAAE,CAAC;IAEb,sEAAsE;IACtE,yDAAyD;IACzD,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,EAAE,EAAE,CAAC;QAC7C,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,MAAM,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;IACjD,MAAM,CAAC,GAAG,CAAC,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAChF,MAAM,gBAAgB,GAAG,yBAAyB,EAAE,CAAC;IACrD,SAAS,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,QAAQ,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;IAEpD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE;QAC/C,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC;QAC3C,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,GAAG,EAAE,MAAM,CAAC,GAAG;KAChB,CAAC,CAAC;IAEH,SAAS,CAAC,WAAW,CAAC,CAAC;IAEvB,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,wDAAwD,gBAAgB,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,IAAI,CAAC;QACH,MAAM,sBAAsB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,4BAA4B;QAC9B,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,KAAK,EAAE,CAAC;IACd,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,OAAO,KAAK,CAAC,GAAG,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAC5B,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;QACD,cAAc,EAAE,CAAC;IACnB,CAAC;IAED,wCAAwC;IACxC,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAAE,mBAAmB,EAAE,CAAC;IAEzD,OAAO,GAAG,KAAK,IAAI,CAAC;AACtB,CAAC"}
|