@jmfederico/pi-web 1.202610.0 → 1.202610.2
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 +23 -134
- package/dist/cli.js +23 -4
- package/dist/cli.js.map +1 -1
- package/dist/client/assets/index-DUsqiytv.js +4408 -0
- package/dist/client/assets/vendor-editor-core-C2PJX3uW.js +10 -0
- package/dist/client/assets/{vendor-editor-languages-DOCw3vc9.js → vendor-editor-languages-CS6n1J8n.js} +1 -1
- package/dist/client/index.html +4 -48
- package/dist/config.js +8 -0
- package/dist/config.js.map +1 -1
- package/dist/pi-packages/captains-log/dist/browser/index.js +34 -34
- package/dist/pi-packages/captains-log/package.json +5 -5
- package/dist/pi-packages/relays/extensions/index.js +60 -0
- package/dist/pi-packages/relays/package.json +10 -1
- package/dist/pi-packages/relays/pi-web-plugin.js +31 -1
- package/dist/pi-packages/relays/prompts/relay-worktree.md +6 -16
- package/dist/pi-packages/relays/prompts/relay.md +6 -33
- package/dist/pi-packages/relays/relayDispatch.js +67 -0
- package/dist/pi-packages/relays/relayIdentity.js +37 -0
- package/dist/pi-packages/relays/relaysPanelElement.js +37 -12
- package/dist/pi-packages/relays/skills/relay/SKILL.md +24 -68
- package/dist/pi-packages/relays/skills/relay-runner/SKILL.md +40 -219
- package/dist/pi-packages/workflows/browser/pi-web-plugin.js +33 -0
- package/dist/pi-packages/workflows/package.json +22 -0
- package/dist/pi-packages/workflows/prompts/worktree.md +12 -0
- package/dist/pi-web-plugins/files/browser/pi-web-plugin.js +53 -53
- package/dist/pi-web-plugins/git/browser/git-panel.js +0 -1
- package/dist/pi-web-plugins/git/server-plugin.js +11 -0
- package/dist/pi-web-plugins/git/workspace-discovery-notify.cjs +14 -0
- package/dist/pi-web-plugins/git/workspaceDiscoveryHooks.js +180 -0
- package/dist/pi-web-plugins/info/infoInternals.js +3 -3
- package/dist/pi-web-plugins/info/pi-web-plugin.js +1 -1
- package/dist/pi-web-plugins/mermaid/browser/mermaid-engine.js +1077 -414
- package/dist/pi-web-plugins/terminal/browser/pi-web-plugin.js +30 -30
- package/dist/pi-web-plugins/updates/pi-web-plugin.js +2 -2
- package/dist/pi-web-plugins/updates/updatesLogic.js +6 -5
- package/dist/piWebUpdate.js +405 -0
- package/dist/piWebUpdate.js.map +1 -0
- package/dist/piWebVersionReport.js +43 -1
- package/dist/piWebVersionReport.js.map +1 -1
- package/dist/plugin-api.d.ts +229 -8
- package/dist/server/activity/workspaceActivityService.js +4 -1
- package/dist/server/activity/workspaceActivityService.js.map +1 -1
- package/dist/server/app.js +5 -0
- package/dist/server/app.js.map +1 -1
- package/dist/server/configRoutes.js +6 -0
- package/dist/server/configRoutes.js.map +1 -1
- package/dist/server/knownAutoInstallPiPackages.js +6 -0
- package/dist/server/knownAutoInstallPiPackages.js.map +1 -1
- package/dist/server/navigationPreferenceRoutes.js +39 -0
- package/dist/server/navigationPreferenceRoutes.js.map +1 -0
- package/dist/server/piWebStatus.js +19 -25
- package/dist/server/piWebStatus.js.map +1 -1
- package/dist/server/plugins/projectPluginSettings.js +95 -0
- package/dist/server/plugins/projectPluginSettings.js.map +1 -0
- package/dist/server/plugins/serverPluginRuntime.js +26 -3
- package/dist/server/plugins/serverPluginRuntime.js.map +1 -1
- package/dist/server/sessiond/autoInstallPiPackages.js +3 -3
- package/dist/server/sessiond/workspaceCatalogRoutes.js +3 -1
- package/dist/server/sessiond/workspaceCatalogRoutes.js.map +1 -1
- package/dist/server/sessiond/workspaceNotificationRoutes.js +41 -0
- package/dist/server/sessiond/workspaceNotificationRoutes.js.map +1 -0
- package/dist/server/sessiond.js +40 -7
- package/dist/server/sessiond.js.map +1 -1
- package/dist/server/sessions/askUserDomain.js +232 -0
- package/dist/server/sessions/askUserDomain.js.map +1 -0
- package/dist/server/sessions/askUserTool.js +17 -17
- package/dist/server/sessions/askUserTool.js.map +1 -1
- package/dist/server/sessions/builtinExtensionFactories.js +13 -0
- package/dist/server/sessions/builtinExtensionFactories.js.map +1 -0
- package/dist/server/sessions/dockerEnvironmentFacts.js +8 -0
- package/dist/server/sessions/dockerEnvironmentFacts.js.map +1 -1
- package/dist/server/sessions/extensionSessionDispatch.js +76 -0
- package/dist/server/sessions/extensionSessionDispatch.js.map +1 -0
- package/dist/server/sessions/globalProviderPolicy.js +94 -18
- package/dist/server/sessions/globalProviderPolicy.js.map +1 -1
- package/dist/server/sessions/messageHistoryTarget.js +61 -0
- package/dist/server/sessions/messageHistoryTarget.js.map +1 -0
- package/dist/server/sessions/piSessionManagerGateway.js +23 -24
- package/dist/server/sessions/piSessionManagerGateway.js.map +1 -1
- package/dist/server/sessions/piSessionService.js +604 -266
- package/dist/server/sessions/piSessionService.js.map +1 -1
- package/dist/server/sessions/sessionArchiveStore.js +5 -1
- package/dist/server/sessions/sessionArchiveStore.js.map +1 -1
- package/dist/server/sessions/sessionArchiveTree.js +2 -2
- package/dist/server/sessions/sessionArchiveTree.js.map +1 -1
- package/dist/server/sessions/sessionCommandService.js +9 -3
- package/dist/server/sessions/sessionCommandService.js.map +1 -1
- package/dist/server/sessions/sessionImageDimensions.js +31 -0
- package/dist/server/sessions/sessionImageDimensions.js.map +1 -0
- package/dist/server/sessions/sessionMediaIndex.js +7 -1
- package/dist/server/sessions/sessionMediaIndex.js.map +1 -1
- package/dist/server/sessions/sessionMetadata.js +51 -0
- package/dist/server/sessions/sessionMetadata.js.map +1 -0
- package/dist/server/sessions/sessionNameGenerator.js +8 -28
- package/dist/server/sessions/sessionNameGenerator.js.map +1 -1
- package/dist/server/sessions/sessionRoutes.js +10 -2
- package/dist/server/sessions/sessionRoutes.js.map +1 -1
- package/dist/server/sessions/sessionSummaryScanner.js +62 -5
- package/dist/server/sessions/sessionSummaryScanner.js.map +1 -1
- package/dist/server/sessions/spawnSessionTool.js +3 -1
- package/dist/server/sessions/spawnSessionTool.js.map +1 -1
- package/dist/server/sessions/spawnSubsessionTool.js +27 -17
- package/dist/server/sessions/spawnSubsessionTool.js.map +1 -1
- package/dist/server/sessions/subsessionCompletionDelivery.js +15 -0
- package/dist/server/sessions/subsessionCompletionDelivery.js.map +1 -0
- package/dist/server/sessions/subsessionCompletionInbox.js +134 -0
- package/dist/server/sessions/subsessionCompletionInbox.js.map +1 -0
- package/dist/server/sessions/subsessionProvenance.js +27 -0
- package/dist/server/sessions/subsessionProvenance.js.map +1 -0
- package/dist/server/sessions/transcriptMarkdown.js +48 -0
- package/dist/server/sessions/transcriptMarkdown.js.map +1 -0
- package/dist/server/sessions/transcriptMessages.js +3 -0
- package/dist/server/sessions/transcriptMessages.js.map +1 -1
- package/dist/server/status/machineStatusService.js +17 -5
- package/dist/server/status/machineStatusService.js.map +1 -1
- package/dist/server/storage/navigationPreferenceStore.js +137 -0
- package/dist/server/storage/navigationPreferenceStore.js.map +1 -0
- package/dist/server/workspaces/projectPiWebConfig.js +88 -6
- package/dist/server/workspaces/projectPiWebConfig.js.map +1 -1
- package/dist/server/workspaces/workspaceChangeNotifier.js +12 -0
- package/dist/server/workspaces/workspaceChangeNotifier.js.map +1 -0
- package/dist/server/workspaces/workspaceNotificationCommand.js +64 -0
- package/dist/server/workspaces/workspaceNotificationCommand.js.map +1 -0
- package/dist/server/workspaces/workspaceProviderRegistry.js +55 -0
- package/dist/server/workspaces/workspaceProviderRegistry.js.map +1 -1
- package/dist/server-plugin-api.d.ts +18 -0
- package/dist/server-plugin-api.js.map +1 -1
- package/dist/sessiond/sessionDaemonClient.js +3 -3
- package/dist/sessiond/sessionDaemonClient.js.map +1 -1
- package/dist/shared/apiTypes.js +2 -2
- package/dist/shared/apiTypes.js.map +1 -1
- package/dist/shared/federatedRoutes.js +5 -0
- package/dist/shared/federatedRoutes.js.map +1 -1
- package/dist/shared/machineStatus.js +11 -2
- package/dist/shared/machineStatus.js.map +1 -1
- package/dist/shared/navigationPreferences.js +6 -0
- package/dist/shared/navigationPreferences.js.map +1 -0
- package/dist/shared/pluginApiTypes.d.ts +2 -0
- package/dist/shared/sessionMedia.js +6 -0
- package/dist/shared/sessionMedia.js.map +1 -1
- package/dist/shared/streamingBehavior.js +7 -0
- package/dist/shared/streamingBehavior.js.map +1 -0
- package/dist/shared/themePreference.js +23 -0
- package/dist/shared/themePreference.js.map +1 -0
- package/dist/workspaceNotificationCli.js +95 -0
- package/dist/workspaceNotificationCli.js.map +1 -0
- package/docs/config.md +100 -85
- package/docs/plugins.md +109 -30
- package/examples/session-bridge-plugin/README.md +1 -1
- package/examples/session-bridge-plugin/package.json +3 -3
- package/examples/workspace-provider-plugin/package.json +1 -1
- package/package.json +36 -36
- package/dist/client/assets/index-_1GwJfSs.js +0 -4176
- package/dist/client/assets/vendor-editor-core-YWog6mAR.js +0 -10
- package/dist/server/sessions/pendingAskStore.js +0 -275
- package/dist/server/sessions/pendingAskStore.js.map +0 -1
|
@@ -76,7 +76,7 @@ function renderRecommended(html, terminal, recommended, messages) {
|
|
|
76
76
|
<section class="updates-recommended">
|
|
77
77
|
<strong>Recommended</strong>
|
|
78
78
|
${messages.length === 0
|
|
79
|
-
? html `<p class="muted">Run
|
|
79
|
+
? html `<p class="muted">Run the recommended command. Updates require confirmation in the terminal and may interrupt active sessions; the CLI will provide instructions if this terminal cannot safely run the update.</p>`
|
|
80
80
|
: messages.map((message) => renderNotice(html, message))}
|
|
81
81
|
${renderCommand(html, terminal, recommended.label, recommended.command)}
|
|
82
82
|
</section>
|
|
@@ -168,7 +168,7 @@ const plugin = {
|
|
|
168
168
|
run: (context) => context.checkForPiWebUpdates?.(),
|
|
169
169
|
},
|
|
170
170
|
],
|
|
171
|
-
|
|
171
|
+
applicationPanels: [
|
|
172
172
|
{
|
|
173
173
|
id: "workspace.updates",
|
|
174
174
|
title: "Updates",
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
// Generated from pi-web-plugins/updates/updatesLogic.ts. Do not edit directly.
|
|
2
|
-
// The
|
|
3
|
-
//
|
|
4
|
-
// restart; otherwise, when anything is stale, a full restart is enough.
|
|
2
|
+
// The shared update CLI owns installation-specific planning, confirmation, and
|
|
3
|
+
// safe execution. Stale components without an available update need a restart.
|
|
5
4
|
export function recommendedCommand(status) {
|
|
6
5
|
const { commands, release, components } = status;
|
|
7
6
|
if (release.updateAvailable && typeof commands.update === "string" && commands.update !== "") {
|
|
8
|
-
return { label: "Update
|
|
7
|
+
return { label: "Update PI WEB", command: commands.update };
|
|
9
8
|
}
|
|
10
9
|
const restartNeeded = components.web.stale || components.sessiond.stale || !components.sessiond.available;
|
|
11
10
|
if (restartNeeded && typeof commands.restart === "string" && commands.restart !== "") {
|
|
@@ -62,7 +61,9 @@ export function fallbackDockerStatus(hint, generatedAt = "federated status unava
|
|
|
62
61
|
},
|
|
63
62
|
release: { packageName: "@jmfederico/pi-web", updateAvailable: false, skipped: true },
|
|
64
63
|
commands: {
|
|
65
|
-
|
|
64
|
+
// The development image mounts its built checkout at /workspace and does
|
|
65
|
+
// not install a global pi-web executable. Both invoke the same CLI.
|
|
66
|
+
update: hint.dockerMode === "dev" ? "node /workspace/dist/cli.js update" : "pi-web update",
|
|
66
67
|
restart: `${commandPrefix} restart`,
|
|
67
68
|
restartWeb: `${commandPrefix} restart-web`,
|
|
68
69
|
restartSessiond: `${commandPrefix} restart-sessiond`,
|
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
import { execFile, spawn } from "node:child_process";
|
|
2
|
+
import { mkdir, realpath, rm, writeFile } from "node:fs/promises";
|
|
3
|
+
import { existsSync } from "node:fs";
|
|
4
|
+
import { randomUUID } from "node:crypto";
|
|
5
|
+
import { homedir, userInfo } from "node:os";
|
|
6
|
+
import { basename, dirname, isAbsolute, join, resolve } from "node:path";
|
|
7
|
+
import { createInterface } from "node:readline/promises";
|
|
8
|
+
import { isatty } from "node:tty";
|
|
9
|
+
import { fileURLToPath } from "node:url";
|
|
10
|
+
import { promisify } from "node:util";
|
|
11
|
+
import { effectivePiWebConfig, isHostAbsoluteAgentDir, PI_CODING_AGENT_DIR_ENV } from "./config.js";
|
|
12
|
+
import { detectPiWebInstallation } from "./server/piWebStatus.js";
|
|
13
|
+
import { SessionDaemonClient } from "./sessiond/sessionDaemonClient.js";
|
|
14
|
+
import { nativeServiceManagerRefs } from "./nativeServices/servicePlan.js";
|
|
15
|
+
const PACKAGE_NAME = "@jmfederico/pi-web";
|
|
16
|
+
const UPDATE_HANDOFF_LABEL_PREFIX = "com.pi-web.update";
|
|
17
|
+
const WARNING = "Updating PI WEB will restart services and interrupt active sessions and terminals, including this terminal.";
|
|
18
|
+
const HELP = "Usage: pi-web update [--yes]\nWithout --yes, an interactive confirmation is required. Nested Linux updates use a detached systemd user service. Nested macOS updates use a detached launchd user agent.";
|
|
19
|
+
function defaultDependencies() {
|
|
20
|
+
return {
|
|
21
|
+
env: { ...process.env },
|
|
22
|
+
nodeExecutable: process.execPath,
|
|
23
|
+
platform: process.platform,
|
|
24
|
+
home: homedir(),
|
|
25
|
+
userId: userInfo().uid,
|
|
26
|
+
cwd: process.cwd(),
|
|
27
|
+
uniqueId: randomUUID,
|
|
28
|
+
exists: existsSync,
|
|
29
|
+
mkdir: (path) => mkdir(path, { recursive: true }).then(() => undefined),
|
|
30
|
+
writeFile: (path, contents) => writeFile(path, contents, { encoding: "utf8", mode: 0o600 }),
|
|
31
|
+
removeFile: (path) => rm(path, { force: true }),
|
|
32
|
+
// Use this installation's Pi, not an unrelated (or older) `pi` on PATH.
|
|
33
|
+
piCliPath: fileURLToPath(new URL("./cli.js", import.meta.resolve("@earendil-works/pi-coding-agent"))),
|
|
34
|
+
interactive: isatty(0) && isatty(1),
|
|
35
|
+
async agentDir() {
|
|
36
|
+
const active = await new SessionDaemonClient().getActiveAgentProfile();
|
|
37
|
+
if (active.status === "available")
|
|
38
|
+
return active.profile.dir;
|
|
39
|
+
if (active.status === "invalid")
|
|
40
|
+
throw new Error(`Cannot safely resolve the active Pi profile: ${active.error}`);
|
|
41
|
+
return effectivePiWebConfig().config.agent.dir;
|
|
42
|
+
},
|
|
43
|
+
detectInstallation: detectPiWebInstallation,
|
|
44
|
+
realpath,
|
|
45
|
+
async capture(command) {
|
|
46
|
+
const result = await promisify(execFile)(command.executable, command.args, { env: command.env, encoding: "utf8" });
|
|
47
|
+
return result.stdout.trim();
|
|
48
|
+
},
|
|
49
|
+
run(command) {
|
|
50
|
+
return new Promise((resolveRun, reject) => {
|
|
51
|
+
const child = spawn(command.executable, command.args, { env: command.env, stdio: "inherit" });
|
|
52
|
+
child.once("error", reject);
|
|
53
|
+
child.once("exit", (code, signal) => {
|
|
54
|
+
if (code === 0)
|
|
55
|
+
resolveRun();
|
|
56
|
+
else
|
|
57
|
+
reject(new Error(`${command.executable} failed (${signal ?? `exit ${String(code)}`}); no further update/restart steps were run.`));
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
},
|
|
61
|
+
async confirm(message) {
|
|
62
|
+
const input = createInterface({ input: process.stdin, output: process.stdout });
|
|
63
|
+
try {
|
|
64
|
+
return /^(y|yes)$/i.test((await input.question(`${message} [y/N] `)).trim());
|
|
65
|
+
}
|
|
66
|
+
finally {
|
|
67
|
+
input.close();
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
log: console.log,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/** CLI arguments exclude `update`. Throws on invalid/unsafe requests and failed commands. */
|
|
74
|
+
export async function runPiWebUpdate(args, injected) {
|
|
75
|
+
const valid = args.length === 0 || (args.length === 1 && ["--yes", "--help", "-h"].includes(args[0] ?? ""));
|
|
76
|
+
if (!valid)
|
|
77
|
+
throw new Error(`Invalid update arguments. ${HELP}`);
|
|
78
|
+
const deps = injected ?? defaultDependencies();
|
|
79
|
+
if (args[0] === "--help" || args[0] === "-h") {
|
|
80
|
+
deps.log(HELP);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const agentDir = await deps.agentDir();
|
|
84
|
+
if (!isHostAbsoluteAgentDir(agentDir))
|
|
85
|
+
throw new Error("Cannot safely resolve the Pi profile: expected a host-absolute directory.");
|
|
86
|
+
const installation = await deps.detectInstallation(agentDir);
|
|
87
|
+
const nested = truthy(deps.env["PI_WEB_SESSION"]);
|
|
88
|
+
if (installation.kind === "unknown") {
|
|
89
|
+
deps.log("No automatic update for an unknown installation. Update using the installation's original tooling, then run pi-web restart from a host terminal. Nothing changed.");
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
if (installation.kind !== "docker" && nested && deps.platform !== "linux" && deps.platform !== "darwin") {
|
|
93
|
+
throw new Error("Native update refused inside a PI WEB session: restarting its daemon could kill the updater. Open a host terminal outside PI WEB and run pi-web update there. --yes does not bypass this safety check.");
|
|
94
|
+
}
|
|
95
|
+
const command = (executable, commandArgs, env = deps.env) => ({ executable, args: commandArgs, env: { ...env } });
|
|
96
|
+
let update;
|
|
97
|
+
let updateAfterPull = [];
|
|
98
|
+
let localCheckoutPull;
|
|
99
|
+
let restart;
|
|
100
|
+
if (installation.kind === "docker") {
|
|
101
|
+
if (installation.dockerMode !== "runtime" && installation.dockerMode !== "dev") {
|
|
102
|
+
throw new Error("Docker installation mode is unknown. Use the original pi-web-docker host installation to update; nothing changed.");
|
|
103
|
+
}
|
|
104
|
+
update = command("pi-web-docker", [...(installation.dockerMode === "dev" ? ["--dev"] : []), "update"]);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
if (installation.path === undefined || !isAbsolute(installation.path))
|
|
108
|
+
throw new Error("Cannot safely locate this PI WEB installation; nothing changed.");
|
|
109
|
+
restart = command(deps.nodeExecutable, [join(installation.path, "dist", "cli.js"), "restart"]);
|
|
110
|
+
if (installation.kind === "local") {
|
|
111
|
+
const localPlan = await planLocalCheckoutUpdate(deps, installation.path);
|
|
112
|
+
localCheckoutPull = localPlan.pull;
|
|
113
|
+
update = localPlan.pull;
|
|
114
|
+
updateAfterPull = [localPlan.install, localPlan.build];
|
|
115
|
+
}
|
|
116
|
+
else if (installation.kind === "npm-global") {
|
|
117
|
+
const root = installation.npmRoot;
|
|
118
|
+
if (root === undefined || !isAbsolute(root))
|
|
119
|
+
throw new Error("Cannot safely locate this global npm installation; nothing changed.");
|
|
120
|
+
// Unix npm prefixes use lib/node_modules; Windows prefixes use node_modules.
|
|
121
|
+
const prefix = basename(dirname(root)) === "lib" ? dirname(dirname(root)) : dirname(root);
|
|
122
|
+
const actualRoot = await deps.capture(command("npm", ["root", "--global", "--prefix", prefix]));
|
|
123
|
+
if (await deps.realpath(actualRoot) !== await deps.realpath(root)
|
|
124
|
+
|| await deps.realpath(join(root, PACKAGE_NAME)) !== await deps.realpath(installation.path)) {
|
|
125
|
+
throw new Error("Global npm target does not match this installation; nothing changed.");
|
|
126
|
+
}
|
|
127
|
+
update = command("npm", ["install", "--global", "--prefix", resolve(prefix), `${PACKAGE_NAME}@latest`, "--allow-scripts=node-pty"]);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
if (installation.scope !== "user" || installation.source === undefined || installation.source === "" || !/^(npm:|git:|https?:\/\/|ssh:\/\/)/.test(installation.source)) {
|
|
131
|
+
throw new Error("Only user-scope remote Pi packages can be updated automatically. Update this package with its original tooling; nothing changed.");
|
|
132
|
+
}
|
|
133
|
+
// --no-approve excludes project settings even in previously trusted projects.
|
|
134
|
+
// An explicit extension target cannot invoke Pi's universal/self updater.
|
|
135
|
+
update = command(deps.nodeExecutable, [deps.piCliPath, "update", "--no-approve", "--extension", installation.source], {
|
|
136
|
+
...deps.env, [PI_CODING_AGENT_DIR_ENV]: agentDir,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
let restartUnit;
|
|
141
|
+
let launchdHandoff;
|
|
142
|
+
if (restart !== undefined) {
|
|
143
|
+
await preflightNativeServices(deps);
|
|
144
|
+
if (nested && deps.platform === "linux") {
|
|
145
|
+
restartUnit = `pi-web-update-restart-${deps.uniqueId()}`;
|
|
146
|
+
const dispatchArgs = systemdDispatchArgs(deps);
|
|
147
|
+
// Exercise the same external owner and environment without touching services.
|
|
148
|
+
// --wait is only for this harmless probe, never for the actual restart.
|
|
149
|
+
try {
|
|
150
|
+
await deps.capture(command("systemd-run", [
|
|
151
|
+
...dispatchArgs, `--unit=${restartUnit}-preflight`, "--wait", "--",
|
|
152
|
+
deps.nodeExecutable, "--eval", "process.exit(0)",
|
|
153
|
+
]));
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
throw new Error("Cannot safely dispatch a detached systemd restart. Use a host terminal outside PI WEB; nothing changed.", { cause: error });
|
|
157
|
+
}
|
|
158
|
+
restart = command("systemd-run", [...dispatchArgs, `--unit=${restartUnit}`, "--", restart.executable, ...restart.args]);
|
|
159
|
+
}
|
|
160
|
+
else if (nested && deps.platform === "darwin") {
|
|
161
|
+
launchdHandoff = createLaunchdUpdateHandoff(deps, installation);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
deps.log(`Update target: ${installation.kind}${installation.path === undefined ? "" : ` at ${JSON.stringify(installation.path)}`}`);
|
|
165
|
+
deps.log(`Install: ${[update, ...updateAfterPull].map((step) => [step.executable, ...step.args].map((value) => JSON.stringify(value)).join(" ")).join(" && ")}`);
|
|
166
|
+
if (restart !== undefined) {
|
|
167
|
+
const handoffDescription = restartUnit === undefined
|
|
168
|
+
? launchdHandoff === undefined ? "" : ` via detached launchd user agent ${launchdHandoff.target}`
|
|
169
|
+
: ` via detached systemd user unit ${restartUnit}`;
|
|
170
|
+
deps.log(`After install succeeds: ${JSON.stringify(deps.nodeExecutable)} ${JSON.stringify(join(installation.path ?? "", "dist", "cli.js"))} restart${handoffDescription}.`);
|
|
171
|
+
if (launchdHandoff !== undefined)
|
|
172
|
+
deps.log(`Detached update output: ${launchdHandoff.logPath}`);
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
deps.log("The Docker installer owns the update and service restart.");
|
|
176
|
+
}
|
|
177
|
+
deps.log(WARNING);
|
|
178
|
+
if (args[0] !== "--yes") {
|
|
179
|
+
if (!deps.interactive)
|
|
180
|
+
throw new Error("Noninteractive update requires explicit --yes consent. Nothing changed.");
|
|
181
|
+
if (!await deps.confirm("Proceed with the update and restart?")) {
|
|
182
|
+
deps.log("Update cancelled. Nothing changed.");
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
if (launchdHandoff !== undefined) {
|
|
187
|
+
await dispatchLaunchdUpdate(deps, launchdHandoff);
|
|
188
|
+
deps.log(`Update handed off to launchd user agent ${launchdHandoff.target}; completion is not verified. Inspect ${launchdHandoff.logPath}.`);
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
if (localCheckoutPull !== undefined) {
|
|
192
|
+
try {
|
|
193
|
+
await deps.run(localCheckoutPull);
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
throw new Error("Could not fast-forward the local checkout. Ensure it is clean, has a reachable upstream, and can be pulled without a merge; no install or restart was run.", { cause: error });
|
|
197
|
+
}
|
|
198
|
+
for (const step of updateAfterPull)
|
|
199
|
+
await deps.run(step);
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
await deps.run(update);
|
|
203
|
+
}
|
|
204
|
+
if (restart !== undefined) {
|
|
205
|
+
await deps.run(restart);
|
|
206
|
+
if (restartUnit !== undefined)
|
|
207
|
+
deps.log(`Restart dispatched, not verified complete. Inspect journalctl --user -u ${restartUnit}.`);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
async function planLocalCheckoutUpdate(deps, path) {
|
|
211
|
+
const gitEnvironment = { ...deps.env, GIT_TERMINAL_PROMPT: "0" };
|
|
212
|
+
const git = (args) => ({ executable: "git", args: ["-C", path, ...args], env: { ...gitEnvironment } });
|
|
213
|
+
const captureGit = async (args, failure) => {
|
|
214
|
+
try {
|
|
215
|
+
return (await deps.capture(git(args))).trim();
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
throw new Error(`${failure} Nothing changed.`, { cause: error });
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
const gitRoot = await captureGit(["rev-parse", "--show-toplevel"], "Cannot safely update the local installation: it is not a Git checkout or its root could not be inspected.");
|
|
222
|
+
if (gitRoot === "" || await deps.realpath(gitRoot) !== await deps.realpath(path)) {
|
|
223
|
+
throw new Error("Cannot safely update the local installation: the package root is not the Git checkout root. Nothing changed.");
|
|
224
|
+
}
|
|
225
|
+
const status = await captureGit(["status", "--porcelain=v1", "--untracked-files=all"], "Cannot inspect the local checkout status.");
|
|
226
|
+
if (status !== "") {
|
|
227
|
+
throw new Error("The local checkout has uncommitted or untracked changes. Commit, stash, or remove them before updating; nothing changed.");
|
|
228
|
+
}
|
|
229
|
+
const branch = await captureGit(["symbolic-ref", "--quiet", "--short", "HEAD"], "The local checkout is detached or its current branch could not be determined.");
|
|
230
|
+
if (branch === "")
|
|
231
|
+
throw new Error("The local checkout is detached; check out a branch with an upstream before updating. Nothing changed.");
|
|
232
|
+
const upstream = await captureGit(["rev-parse", "--abbrev-ref", "--symbolic-full-name", "@{upstream}"], `The local checkout branch ${JSON.stringify(branch)} has no upstream branch configured.`);
|
|
233
|
+
if (upstream === "")
|
|
234
|
+
throw new Error(`The local checkout branch ${JSON.stringify(branch)} has no upstream branch configured. Nothing changed.`);
|
|
235
|
+
return {
|
|
236
|
+
pull: git(["pull", "--ff-only"]),
|
|
237
|
+
install: { executable: "npm", args: ["--prefix", path, "install"], env: { ...deps.env } },
|
|
238
|
+
build: { executable: "npm", args: ["--prefix", path, "run", "build"], env: { ...deps.env } },
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
function createLaunchdUpdateHandoff(deps, installation) {
|
|
242
|
+
if (installation.path === undefined || !isAbsolute(installation.path)) {
|
|
243
|
+
throw new Error("Cannot safely locate this PI WEB installation for a launchd handoff; nothing changed.");
|
|
244
|
+
}
|
|
245
|
+
if (!isAbsolute(deps.home) || !isAbsolute(deps.cwd) || !isAbsolute(deps.nodeExecutable)) {
|
|
246
|
+
throw new Error("Cannot safely create a launchd handoff from a relative path; nothing changed.");
|
|
247
|
+
}
|
|
248
|
+
if (!Number.isInteger(deps.userId) || deps.userId < 0) {
|
|
249
|
+
throw new Error("Cannot safely resolve the macOS user domain for a launchd handoff; nothing changed.");
|
|
250
|
+
}
|
|
251
|
+
const id = deps.uniqueId();
|
|
252
|
+
if (!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(id)) {
|
|
253
|
+
throw new Error("Cannot safely create a launchd handoff with an invalid identifier; nothing changed.");
|
|
254
|
+
}
|
|
255
|
+
const label = `${UPDATE_HANDOFF_LABEL_PREFIX}-${id}`;
|
|
256
|
+
const domain = `gui/${String(deps.userId)}`;
|
|
257
|
+
const environment = launchdHandoffEnvironment(deps.env);
|
|
258
|
+
const plistPath = join(deps.home, ".pi-web", "update-handoffs", `${label}.plist`);
|
|
259
|
+
const logPath = join(deps.home, ".pi-web", "logs", `${label}.log`);
|
|
260
|
+
return {
|
|
261
|
+
domain,
|
|
262
|
+
label,
|
|
263
|
+
target: `${domain}/${label}`,
|
|
264
|
+
plistPath,
|
|
265
|
+
logPath,
|
|
266
|
+
environment,
|
|
267
|
+
plist: renderLaunchdUpdatePlist({
|
|
268
|
+
label,
|
|
269
|
+
nodeExecutable: deps.nodeExecutable,
|
|
270
|
+
cliPath: join(installation.path, "dist", "cli.js"),
|
|
271
|
+
workingDirectory: deps.cwd,
|
|
272
|
+
environment,
|
|
273
|
+
logPath,
|
|
274
|
+
}),
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
async function dispatchLaunchdUpdate(deps, handoff) {
|
|
278
|
+
let wrotePlist = false;
|
|
279
|
+
try {
|
|
280
|
+
await deps.mkdir(dirname(handoff.plistPath));
|
|
281
|
+
await deps.mkdir(dirname(handoff.logPath));
|
|
282
|
+
// Treat a failed write as potentially leaving a partial file behind.
|
|
283
|
+
wrotePlist = true;
|
|
284
|
+
await deps.writeFile(handoff.plistPath, handoff.plist);
|
|
285
|
+
// bootstrap loads the one-shot plist into the user's GUI launchd domain.
|
|
286
|
+
// RunAtLoad starts it under launchd, outside the sessiond process group that
|
|
287
|
+
// is about to be restarted. KeepAlive is explicitly false so an update
|
|
288
|
+
// failure cannot turn into an automatic retry loop.
|
|
289
|
+
await deps.run({
|
|
290
|
+
executable: "launchctl",
|
|
291
|
+
args: ["bootstrap", handoff.domain, handoff.plistPath],
|
|
292
|
+
env: handoff.environment,
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
catch (error) {
|
|
296
|
+
if (wrotePlist)
|
|
297
|
+
await removeHandoffPlist(deps, handoff.plistPath);
|
|
298
|
+
throw new Error("Cannot safely dispatch a detached launchd update. Use a host terminal outside PI WEB; nothing changed.", { cause: error });
|
|
299
|
+
}
|
|
300
|
+
// The plist is deliberately outside ~/Library/LaunchAgents, so it is not
|
|
301
|
+
// loaded again at the next login. launchd has already parsed it after a
|
|
302
|
+
// successful bootstrap; retaining only the log keeps the handoff ephemeral.
|
|
303
|
+
await removeHandoffPlist(deps, handoff.plistPath);
|
|
304
|
+
}
|
|
305
|
+
async function removeHandoffPlist(deps, path) {
|
|
306
|
+
try {
|
|
307
|
+
await deps.removeFile(path);
|
|
308
|
+
}
|
|
309
|
+
catch (error) {
|
|
310
|
+
deps.log(`Warning: could not remove temporary launchd handoff ${JSON.stringify(path)}: ${error instanceof Error ? error.message : String(error)}`);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
function launchdHandoffEnvironment(source) {
|
|
314
|
+
const environment = {};
|
|
315
|
+
const portableKeys = new Set([
|
|
316
|
+
"HOME",
|
|
317
|
+
"PATH",
|
|
318
|
+
"XDG_CONFIG_HOME",
|
|
319
|
+
"XDG_DATA_HOME",
|
|
320
|
+
"XDG_RUNTIME_DIR",
|
|
321
|
+
"DBUS_SESSION_BUS_ADDRESS",
|
|
322
|
+
"NODE_EXTRA_CA_CERTS",
|
|
323
|
+
]);
|
|
324
|
+
for (const key of Object.keys(source).sort()) {
|
|
325
|
+
if (key === "PI_WEB_SESSION" || (!key.startsWith("PI_WEB_") && !key.startsWith("PI_CODING_AGENT_") && !portableKeys.has(key)))
|
|
326
|
+
continue;
|
|
327
|
+
const value = source[key];
|
|
328
|
+
if (value !== undefined)
|
|
329
|
+
environment[key] = value;
|
|
330
|
+
}
|
|
331
|
+
return environment;
|
|
332
|
+
}
|
|
333
|
+
function renderLaunchdUpdatePlist(input) {
|
|
334
|
+
const programArguments = [input.nodeExecutable, input.cliPath, "update", "--yes"];
|
|
335
|
+
const environmentEntries = Object.keys(input.environment)
|
|
336
|
+
.sort()
|
|
337
|
+
.map((key) => ` <key>${xmlEscape(key)}</key>\n <string>${xmlEscape(input.environment[key] ?? "")}</string>\n`)
|
|
338
|
+
.join("");
|
|
339
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
340
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
341
|
+
<plist version="1.0">
|
|
342
|
+
<dict>
|
|
343
|
+
<key>Label</key>
|
|
344
|
+
<string>${xmlEscape(input.label)}</string>
|
|
345
|
+
<key>ProgramArguments</key>
|
|
346
|
+
<array>
|
|
347
|
+
${programArguments.map((argument) => ` <string>${xmlEscape(argument)}</string>`).join("\n")}
|
|
348
|
+
</array>
|
|
349
|
+
<key>WorkingDirectory</key>
|
|
350
|
+
<string>${xmlEscape(input.workingDirectory)}</string>
|
|
351
|
+
<key>EnvironmentVariables</key>
|
|
352
|
+
<dict>
|
|
353
|
+
${environmentEntries} </dict>
|
|
354
|
+
<key>RunAtLoad</key>
|
|
355
|
+
<true/>
|
|
356
|
+
<key>KeepAlive</key>
|
|
357
|
+
<false/>
|
|
358
|
+
<key>ProcessType</key>
|
|
359
|
+
<string>Background</string>
|
|
360
|
+
<key>StandardOutPath</key>
|
|
361
|
+
<string>${xmlEscape(input.logPath)}</string>
|
|
362
|
+
<key>StandardErrorPath</key>
|
|
363
|
+
<string>${xmlEscape(input.logPath)}</string>
|
|
364
|
+
</dict>
|
|
365
|
+
</plist>
|
|
366
|
+
`;
|
|
367
|
+
}
|
|
368
|
+
function xmlEscape(value) {
|
|
369
|
+
return value
|
|
370
|
+
.replaceAll("&", "&")
|
|
371
|
+
.replaceAll("<", "<")
|
|
372
|
+
.replaceAll(">", ">")
|
|
373
|
+
.replaceAll('"', """)
|
|
374
|
+
.replaceAll("'", "'");
|
|
375
|
+
}
|
|
376
|
+
async function preflightNativeServices(deps) {
|
|
377
|
+
if (deps.platform !== "linux" && deps.platform !== "darwin")
|
|
378
|
+
throw new Error("Automatic native update requires Linux or macOS services; nothing changed.");
|
|
379
|
+
const installed = Object.entries(nativeServiceManagerRefs).filter(([, ref]) => deps.exists(deps.platform === "linux"
|
|
380
|
+
? join(deps.home, ".config", "systemd", "user", ref.systemdName)
|
|
381
|
+
: join(deps.home, "Library", "LaunchAgents", ref.launchdPlistName)));
|
|
382
|
+
if (!installed.some(([id]) => id === "sessiond") || !installed.some(([id]) => id === "web" || id === "uiDev")) {
|
|
383
|
+
throw new Error("Native services are missing or incomplete. Run pi-web install from a host terminal, or update manually with the original tooling; nothing changed.");
|
|
384
|
+
}
|
|
385
|
+
if (deps.platform === "linux") {
|
|
386
|
+
for (const [, ref] of installed) {
|
|
387
|
+
const state = await deps.capture({ executable: "systemctl", args: ["--user", "show", ref.systemdName, "--property=LoadState", "--value"], env: { ...deps.env } });
|
|
388
|
+
if (state.trim() !== "loaded")
|
|
389
|
+
throw new Error(`Native service ${ref.systemdName} is not loaded. Repair services before updating; nothing changed.`);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
function systemdDispatchArgs(deps) {
|
|
394
|
+
// User-manager services do not inherit the caller's environment. Propagate
|
|
395
|
+
// configuration/runtime selection deliberately, not terminal/session secrets.
|
|
396
|
+
// Preserve cwd too: config and data overrides may be relative paths.
|
|
397
|
+
const keys = Object.keys(deps.env).filter((key) => /^(PI_WEB_|PI_CODING_AGENT_)/.test(key)
|
|
398
|
+
|| ["HOME", "PATH", "XDG_CONFIG_HOME", "XDG_DATA_HOME", "XDG_RUNTIME_DIR", "DBUS_SESSION_BUS_ADDRESS", "NODE_EXTRA_CA_CERTS"].includes(key));
|
|
399
|
+
return ["--user", "--collect", "--expand-environment=no", `--working-directory=${deps.cwd}`,
|
|
400
|
+
...keys.filter((key) => deps.env[key] !== undefined).map((key) => `--setenv=${key}`)];
|
|
401
|
+
}
|
|
402
|
+
function truthy(value) {
|
|
403
|
+
return value !== undefined && value !== "" && value !== "0" && value.toLowerCase() !== "false";
|
|
404
|
+
}
|
|
405
|
+
//# sourceMappingURL=piWebUpdate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"piWebUpdate.js","sourceRoot":"","sources":["../src/piWebUpdate.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ import { SessionDaemonClient } from "./sessiond/sessionDaemonClient.js";
|
|
|
6
6
|
import { parsePiWebComponentStatus, parsePiWebVersionResponse } from "./shared/piWebStatusParsing.js";
|
|
7
7
|
const PI_WEB_PACKAGE_NAME = "@jmfederico/pi-web";
|
|
8
8
|
const PI_WEB_VERSION_TIMEOUT_MS = 2000;
|
|
9
|
+
const NPM_RELEASE_TIMEOUT_MS = 5000;
|
|
9
10
|
const PI_WEB_VERSION_ENDPOINT_PATH = "/api/pi-web/version";
|
|
10
11
|
const PI_WEB_STATUS_ENDPOINT_PATH = "/api/pi-web/status";
|
|
11
12
|
const DEFAULT_PACKAGE_VERSION = "0.0.0-dev";
|
|
@@ -71,7 +72,48 @@ export async function printPiWebVersionReport(options = {}) {
|
|
|
71
72
|
printInstalledPackageVersions();
|
|
72
73
|
const runningInfo = await collectRunningVersionInfo(options);
|
|
73
74
|
printRunningVersionInfo(runningInfo);
|
|
74
|
-
|
|
75
|
+
if (options.check !== true)
|
|
76
|
+
return runningInfo;
|
|
77
|
+
const release = await checkLatestNpmRelease(options);
|
|
78
|
+
console.log("Latest npm release:");
|
|
79
|
+
if (release.status === "available")
|
|
80
|
+
console.log(`✓ ${PI_WEB_PACKAGE_NAME}: ${release.latestVersion}`);
|
|
81
|
+
else if (release.status === "skipped")
|
|
82
|
+
console.log(`? skipped: ${release.reason}`);
|
|
83
|
+
else
|
|
84
|
+
console.log(`! npm release check failed: ${release.error}`);
|
|
85
|
+
return { ...runningInfo, release };
|
|
86
|
+
}
|
|
87
|
+
async function checkLatestNpmRelease(options) {
|
|
88
|
+
const env = options.env ?? process.env;
|
|
89
|
+
const disabledBy = ["PI_WEB_SKIP_VERSION_CHECK", "PI_WEB_OFFLINE", "PI_SKIP_VERSION_CHECK", "PI_OFFLINE"]
|
|
90
|
+
.filter((key) => env[key] !== undefined && env[key] !== "");
|
|
91
|
+
if (disabledBy.length > 0)
|
|
92
|
+
return { status: "skipped", reason: `remote version checks disabled by ${disabledBy.join(", ")}` };
|
|
93
|
+
const controller = new AbortController();
|
|
94
|
+
try {
|
|
95
|
+
const latestVersion = await withTimeout((async () => {
|
|
96
|
+
const response = await (options.fetch ?? globalThis.fetch)(`https://registry.npmjs.org/${encodeURIComponent(PI_WEB_PACKAGE_NAME)}/latest`, {
|
|
97
|
+
headers: { accept: "application/json", "user-agent": `${PI_WEB_PACKAGE_NAME}/${packageVersion()}` },
|
|
98
|
+
signal: controller.signal,
|
|
99
|
+
});
|
|
100
|
+
if (!response.ok)
|
|
101
|
+
throw new Error(`npm registry returned HTTP ${String(response.status)}`);
|
|
102
|
+
const data = await response.json();
|
|
103
|
+
const version = isRecord(data) ? data["version"] : undefined;
|
|
104
|
+
if (typeof version !== "string" || version.trim() === "")
|
|
105
|
+
throw new Error("npm registry response did not include a version");
|
|
106
|
+
return version.trim();
|
|
107
|
+
})(), NPM_RELEASE_TIMEOUT_MS, "npm registry check timed out after 5000 ms");
|
|
108
|
+
return { status: "available", latestVersion };
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
return { status: "error", error: errorMessage(error) };
|
|
112
|
+
}
|
|
113
|
+
finally {
|
|
114
|
+
// Cancel transport/body work on timeout as well as clearing the deadline timer.
|
|
115
|
+
controller.abort();
|
|
116
|
+
}
|
|
75
117
|
}
|
|
76
118
|
function packageRootPath() {
|
|
77
119
|
return dirname(dirname(fileURLToPath(import.meta.url)));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"piWebVersionReport.js","sourceRoot":"","sources":["../src/piWebVersionReport.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"piWebVersionReport.js","sourceRoot":"","sources":["../src/piWebVersionReport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAEtG,MAAM,mBAAmB,GAAG,oBAAoB,CAAC;AACjD,MAAM,yBAAyB,GAAG,IAAI,CAAC;AACvC,MAAM,sBAAsB,GAAG,IAAI,CAAC;AACpC,MAAM,4BAA4B,GAAG,qBAAqB,CAAC;AAC3D,MAAM,2BAA2B,GAAG,oBAAoB,CAAC;AACzD,MAAM,uBAAuB,GAAG,WAAW,CAAC;AAyC5C;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAwB,EAAE,QAAuC;IACtG,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,SAA6B,EAC7B,UAAkE,EAAE;IAEpE,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,0BAA0B,EAAE,CAAC;QACpD,OAAO,QAAQ,CAAC,SAAS,KAAK,SAAS,CAAC;IAC1C,CAAC;IACD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACvD,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAClD,MAAM,mBAAmB,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;IAC9D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE;YACtF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,yBAAyB,CAAC;SACvD,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,OAAO,KAAK,CAAC;YAC/B,MAAM,MAAM,GAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC9C,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC;QAC/F,CAAC;QACD,MAAM,yBAAyB,CAAC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,cAAc,GAAG,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC5D,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,cAAc,KAAK,QAAQ,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QACjF,IAAI,CAAC;YACH,MAAM,yBAAyB,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;YACrE,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,eAAe,EAAE,EAAE,OAAO,IAAI,uBAAuB,CAAC;AAC/D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,UAAqC,EAAE;IACnF,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC9B,6BAA6B,EAAE,CAAC;IAChC,MAAM,WAAW,GAAG,MAAM,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAC7D,uBAAuB,CAAC,WAAW,CAAC,CAAC;IACrC,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI;QAAE,OAAO,WAAW,CAAC;IAC/C,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW;QAAE,OAAO,CAAC,GAAG,CAAC,KAAK,mBAAmB,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;SACjG,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;;QAC9E,OAAO,CAAC,GAAG,CAAC,+BAA+B,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACjE,OAAO,EAAE,GAAG,WAAW,EAAE,OAAO,EAAE,CAAC;AACrC,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,OAAkC;IACrE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,UAAU,GAAG,CAAC,2BAA2B,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,YAAY,CAAC;SACtG,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9D,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,qCAAqC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IAE9H,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,WAAW,CAAC,CAAC,KAAK,IAAI,EAAE;YAClD,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,8BAA8B,kBAAkB,CAAC,mBAAmB,CAAC,SAAS,EAAE;gBACzI,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,YAAY,EAAE,GAAG,mBAAmB,IAAI,cAAc,EAAE,EAAE,EAAE;gBACnG,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3F,MAAM,IAAI,GAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC7D,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;YAC7H,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;QACxB,CAAC,CAAC,EAAE,EAAE,sBAAsB,EAAE,4CAA4C,CAAC,CAAC;QAC5E,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;IACzD,CAAC;YAAS,CAAC;QACT,gFAAgF;QAChF,UAAU,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,IAAI,CAAC,eAAe,EAAE,EAAE,cAAc,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,eAAe;IACtB,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,IAAI,CAAC;QACH,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc,EAAE,IAAY;IACpD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACvC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;IACjC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,EAAE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IAC/G,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAwC;IAClE,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,oBAAoB,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3F,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC;QACjC,OAAO,EAAE,QAAQ,EAAE,UAAU,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,4BAA4B,EAAE,EAAE,CAAC;IAChG,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,KAAK,EAAE,iCAAiC,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,cAAkC;IACxD,MAAM,IAAI,GAAG,cAAc,KAAK,SAAS,IAAI,cAAc,KAAK,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC;IAClG,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,WAAW,CAAC;IAC/E,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,OAAO,CAAC,IAAY;IAC3B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7D,OAAO,IAAI,IAAI,GAAG,CAAC;AACrB,CAAC;AAED,SAAS,iBAAiB,CAAC,eAAuB;IAChD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QAAE,OAAO,eAAe,CAAC;IACpF,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,4BAA4B,CAAC,MAAM,CAAC,GAAG,2BAA2B,EAAE,CAAC;AAC3G,CAAC;AAED,KAAK,UAAU,yBAAyB,CACtC,QAAgB,EAChB,mBAA4C;IAE5C,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,QAAQ,EAAE;QACnD,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;QACvC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,yBAAyB,CAAC;KACvD,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACrE,MAAM,MAAM,GAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC9C,MAAM,MAAM,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,MAAM,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACjG,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,yBAAyB,CAAC,OAAkC;IACzE,MAAM,QAAQ,GAAG,OAAO,CAAC,gBAAgB,KAAK,SAAS;QACrD,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC;QACvC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC;IACxC,MAAM,mBAAmB,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;IAC9D,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;YACvF,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QAC/G,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,QAAQ,GAAG,GAAG,QAAQ,CAAC,QAAQ,KAAK,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9D,MAAM,cAAc,GAAG,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC5D,IAAI,cAAc,KAAK,QAAQ,CAAC,QAAQ,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClE,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;oBACpF,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;gBAC/G,CAAC;gBAAC,OAAO,WAAW,EAAE,CAAC;oBACrB,QAAQ,GAAG,GAAG,QAAQ,KAAK,cAAc,KAAK,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC5E,CAAC;YACH,CAAC;YACD,OAAO,sCAAsC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,OAAO,sCAAsC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,IAAI,qCAAqC,EAAE,CAAC,CAAC;AACvH,CAAC;AAED,KAAK,UAAU,sCAAsC,CAAC,IAA0B;IAC9E,MAAM,QAAQ,GAAG,MAAM,0BAA0B,EAAE,CAAC;IACpD,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,GAAG,CAAC,QAAQ,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC7E,GAAG,CAAC,QAAQ,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;KAC3E,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,0BAA0B;IACvC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,WAAW,CAChC,IAAI,mBAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,EACnD,yBAAyB,EACzB,uCAAuC,CACxC,CAAC;QACF,IAAI,QAAQ,CAAC,UAAU,GAAG,GAAG,IAAI,QAAQ,CAAC,UAAU,IAAI,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACpH,MAAM,MAAM,GAAY,QAAQ,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrF,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACjE,MAAM,SAAS,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,SAAS,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACpG,OAAO,EAAE,SAAS,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;IACxC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CAAI,OAAmB,EAAE,SAAiB,EAAE,cAAsB;IAC1F,IAAI,OAAkD,CAAC;IACvD,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC;YACxB,OAAO;YACP,IAAI,OAAO,CAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gBAC3B,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;oBACxB,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;gBACpC,CAAC,EAAE,SAAS,CAAC,CAAC;YAChB,CAAC,CAAC;SACH,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,IAAI,OAAO,KAAK,SAAS;YAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,UAAU,CAAC;AAChE,CAAC;AAED,SAAS,6BAA6B;IACpC,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,mBAAmB,WAAW,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,+BAA+B,eAAe,EAAE,EAAE,CAAC,CAAC;QAChE,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAwB;IACvD,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACjC,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;QAAE,yBAAyB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;;QAC1E,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;QAAE,yBAAyB,CAAC,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;;QAC5F,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;QAAE,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,qBAAqB,CAAC,SAA+B;IAC5D,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACrE,MAAM,MAAM,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;IACrG,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,SAAS,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC,CAAC;IACrD,IAAI,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,cAAc,KAAK,SAAS,IAAI,SAAS,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QAC9G,OAAO,CAAC,GAAG,CAAC,cAAc,aAAa,CAAC,SAAS,CAAC,cAAc,CAAC,gBAAgB,aAAa,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAChI,CAAC;IACD,IAAI,SAAS,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,CAAC,GAAG,CAAC,SAAS,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;IACnF,MAAM,YAAY,GAAG,iBAAiB,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAC/D,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,YAAY,EAAE,CAAC,CAAC;IAC/E,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAa,EAAE,KAAyB;IACzE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,eAAe,CAAC,CAAC;IACvC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,iBAAiB,CAAC,YAA+C;IACxE,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACjD,IAAI,YAAY,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC;QACnD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;QACjF,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QAC9E,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,EAAE,CAAC;IACpC,CAAC;IACD,IAAI,YAAY,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC;QACvF,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QAC9E,OAAO,qBAAqB,OAAO,GAAG,IAAI,EAAE,CAAC;IAC/C,CAAC;IACD,IAAI,YAAY,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,YAAY,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,oBAAoB,YAAY,CAAC,IAAI,EAAE,CAAC;IACvI,IAAI,YAAY,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,gBAAgB,CAAC;QACjG,OAAO,YAAY,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;IACnF,CAAC;IACD,OAAO,YAAY,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,0BAA0B,YAAY,CAAC,IAAI,EAAE,CAAC;AAClH,CAAC;AAED,SAAS,aAAa,CAAC,OAA2B;IAChD,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;AACvE,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
|