@detergent-software/conductor 3.0.0-dev.3 → 3.0.0-dev.30

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.
Files changed (171) hide show
  1. package/CHANGELOG.md +241 -0
  2. package/README.md +201 -63
  3. package/build/brief-cli.js +1 -1
  4. package/build/brief-cli.js.map +1 -1
  5. package/build/broker-cli.js +24 -25
  6. package/build/broker-cli.js.map +1 -1
  7. package/build/broker.js +66 -92
  8. package/build/broker.js.map +1 -1
  9. package/build/claude.js +50 -7
  10. package/build/claude.js.map +1 -1
  11. package/build/cli.js +143 -63
  12. package/build/cli.js.map +1 -1
  13. package/build/clones.js +92 -0
  14. package/build/clones.js.map +1 -0
  15. package/build/code-host-cli.js +116 -32
  16. package/build/code-host-cli.js.map +1 -1
  17. package/build/code-host-service.js +8 -0
  18. package/build/code-host-service.js.map +1 -1
  19. package/build/code-host.js +22 -11
  20. package/build/code-host.js.map +1 -1
  21. package/build/config.js +58 -14
  22. package/build/config.js.map +1 -1
  23. package/build/console.js +40 -24
  24. package/build/console.js.map +1 -1
  25. package/build/credentials.js +42 -29
  26. package/build/credentials.js.map +1 -1
  27. package/build/daemon.js +38 -22
  28. package/build/daemon.js.map +1 -1
  29. package/build/help.js +179 -42
  30. package/build/help.js.map +1 -1
  31. package/build/history.js +4 -2
  32. package/build/history.js.map +1 -1
  33. package/build/host/credential-manager.js +109 -0
  34. package/build/host/credential-manager.js.map +1 -0
  35. package/build/host/keychain.js +44 -0
  36. package/build/host/keychain.js.map +1 -0
  37. package/build/host/launchd.js +118 -0
  38. package/build/host/launchd.js.map +1 -0
  39. package/build/host/libsecret.js +40 -0
  40. package/build/host/libsecret.js.map +1 -0
  41. package/build/host/macos-terminal.js +63 -0
  42. package/build/host/macos-terminal.js.map +1 -0
  43. package/build/host/platform.js +4 -0
  44. package/build/host/platform.js.map +1 -0
  45. package/build/host/secrets.js +46 -0
  46. package/build/host/secrets.js.map +1 -0
  47. package/build/host/shell.js +26 -0
  48. package/build/host/shell.js.map +1 -0
  49. package/build/host/startup.js +26 -0
  50. package/build/host/startup.js.map +1 -0
  51. package/build/host/systemd.js +91 -0
  52. package/build/host/systemd.js.map +1 -0
  53. package/build/host/task-scheduler.js +78 -0
  54. package/build/host/task-scheduler.js.map +1 -0
  55. package/build/host/terminal.js +46 -0
  56. package/build/host/terminal.js.map +1 -0
  57. package/build/host/tmux.js +39 -0
  58. package/build/host/tmux.js.map +1 -0
  59. package/build/host/windows-terminal.js +46 -0
  60. package/build/host/windows-terminal.js.map +1 -0
  61. package/build/in-process.js +6 -5
  62. package/build/in-process.js.map +1 -1
  63. package/build/inbox.js +63 -17
  64. package/build/inbox.js.map +1 -1
  65. package/build/init.js +508 -0
  66. package/build/init.js.map +1 -0
  67. package/build/landing.js +86 -7
  68. package/build/landing.js.map +1 -1
  69. package/build/lib/providers/ado/code-host.js +5 -1
  70. package/build/lib/providers/ado/code-host.js.map +1 -1
  71. package/build/lib/providers/ado/pipelines.js +130 -22
  72. package/build/lib/providers/ado/pipelines.js.map +1 -1
  73. package/build/lib/providers/ado/trigger.js +5 -0
  74. package/build/lib/providers/ado/trigger.js.map +1 -1
  75. package/build/lib/providers/ado/writes.js +10 -1
  76. package/build/lib/providers/ado/writes.js.map +1 -1
  77. package/build/lib/providers/github/actions.js +90 -3
  78. package/build/lib/providers/github/actions.js.map +1 -1
  79. package/build/lib/providers/github/code-host.js +2 -0
  80. package/build/lib/providers/github/code-host.js.map +1 -1
  81. package/build/lib/providers/github/writes.js +24 -2
  82. package/build/lib/providers/github/writes.js.map +1 -1
  83. package/build/lib/providers/index.js +4 -3
  84. package/build/lib/providers/index.js.map +1 -1
  85. package/build/lib/providers/npm/stage.js +28 -5
  86. package/build/lib/providers/npm/stage.js.map +1 -1
  87. package/build/lib/providers/timing.js +10 -0
  88. package/build/lib/providers/timing.js.map +1 -0
  89. package/build/lib/providers/verdicts/pr.js +47 -6
  90. package/build/lib/providers/verdicts/pr.js.map +1 -1
  91. package/build/lib/providers/verdicts/runs.js +12 -2
  92. package/build/lib/providers/verdicts/runs.js.map +1 -1
  93. package/build/local-files.js +95 -0
  94. package/build/local-files.js.map +1 -0
  95. package/build/manager.js +171 -47
  96. package/build/manager.js.map +1 -1
  97. package/build/note.js +1 -1
  98. package/build/note.js.map +1 -1
  99. package/build/notify.js +101 -39
  100. package/build/notify.js.map +1 -1
  101. package/build/npm-reads.js +323 -0
  102. package/build/npm-reads.js.map +1 -0
  103. package/build/paths.js +44 -1
  104. package/build/paths.js.map +1 -1
  105. package/build/plugin.js +10 -0
  106. package/build/plugin.js.map +1 -1
  107. package/build/profile-fields.js +149 -0
  108. package/build/profile-fields.js.map +1 -0
  109. package/build/profile-layers.js +264 -0
  110. package/build/profile-layers.js.map +1 -0
  111. package/build/profile.js +70 -44
  112. package/build/profile.js.map +1 -1
  113. package/build/project-check-cli.js +18 -10
  114. package/build/project-check-cli.js.map +1 -1
  115. package/build/project-check.js +187 -98
  116. package/build/project-check.js.map +1 -1
  117. package/build/pushover.js +5 -5
  118. package/build/pushover.js.map +1 -1
  119. package/build/registry.js +195 -36
  120. package/build/registry.js.map +1 -1
  121. package/build/release-kinds.js +34 -0
  122. package/build/release-kinds.js.map +1 -0
  123. package/build/rule-actions.js +4 -2
  124. package/build/rule-actions.js.map +1 -1
  125. package/build/rules-service.js +101 -44
  126. package/build/rules-service.js.map +1 -1
  127. package/build/rules.js +15 -15
  128. package/build/rules.js.map +1 -1
  129. package/build/run.js +20 -7
  130. package/build/run.js.map +1 -1
  131. package/build/runs.js +200 -45
  132. package/build/runs.js.map +1 -1
  133. package/build/scheduler.js +11 -1
  134. package/build/scheduler.js.map +1 -1
  135. package/build/server.js +6 -25
  136. package/build/server.js.map +1 -1
  137. package/build/spend.js +4 -0
  138. package/build/spend.js.map +1 -1
  139. package/build/store.js +82 -25
  140. package/build/store.js.map +1 -1
  141. package/build/timeline.js +104 -0
  142. package/build/timeline.js.map +1 -0
  143. package/build/tracker-reads-cli.js +4 -5
  144. package/build/tracker-reads-cli.js.map +1 -1
  145. package/build/train-cli.js +6 -5
  146. package/build/train-cli.js.map +1 -1
  147. package/build/upgrade.js +8 -9
  148. package/build/upgrade.js.map +1 -1
  149. package/build/wait.js +6 -6
  150. package/build/wait.js.map +1 -1
  151. package/build/watchers/ado.js +11 -3
  152. package/build/watchers/ado.js.map +1 -1
  153. package/build/watchers/github.js +15 -4
  154. package/build/watchers/github.js.map +1 -1
  155. package/build/watchers/npm.js +6 -4
  156. package/build/watchers/npm.js.map +1 -1
  157. package/build/webhook.js +80 -0
  158. package/build/webhook.js.map +1 -0
  159. package/build/worktrees.js +199 -92
  160. package/build/worktrees.js.map +1 -1
  161. package/package.json +61 -61
  162. package/plugin/skills/conductor-console/SKILL.md +4 -4
  163. package/plugin/skills/work-item/SKILL.md +13 -11
  164. package/build/checkout-sync.js +0 -249
  165. package/build/checkout-sync.js.map +0 -1
  166. package/build/credential.js +0 -66
  167. package/build/credential.js.map +0 -1
  168. package/build/startup.js +0 -92
  169. package/build/startup.js.map +0 -1
  170. package/build/tab.js +0 -32
  171. package/build/tab.js.map +0 -1
package/build/init.js ADDED
@@ -0,0 +1,508 @@
1
+ import { spawnSync } from 'node:child_process';
2
+ import { existsSync, mkdirSync, readdirSync, rmSync, writeFileSync } from 'node:fs';
3
+ import { dirname, join, resolve } from 'node:path';
4
+ import { createInterface } from 'node:readline/promises';
5
+ import { trustStep } from "./claude.js";
6
+ import { ConductorError } from "./errors.js";
7
+ import { adoRepoFromRemote } from "./lib/providers/index.js";
8
+ import { PROJECT_NAME, projectPaths } from "./paths.js";
9
+ import { PLUGIN_NAME, pluginSource } from "./plugin.js";
10
+ import { FIELD_SINCE, minimumCheck } from "./profile-fields.js";
11
+ import { gitSync, layerProfile, projectProfile, rawLayer, readLayer, repoLayerAt, } from "./profile-layers.js";
12
+ import { PROFILE_FILE } from "./profile.js";
13
+ import { checkFailed, checkLines, MISSING_SKILLS } from "./project-check.js";
14
+ import { PROTOCOL } from "./protocol.js";
15
+ import { sameRemote } from "./registry.js";
16
+ export const WORK_SKILL = `${PLUGIN_NAME}:work-item`;
17
+ // Lockfile → the command that installs from it as pinned, the first that matches.
18
+ const INSTALLS = [
19
+ [['pnpm-lock.yaml'], 'pnpm install --frozen-lockfile'],
20
+ [['package-lock.json'], 'npm ci'],
21
+ [['yarn.lock', '.yarnrc.yml'], 'yarn install --immutable'],
22
+ [['yarn.lock'], 'yarn install --frozen-lockfile'],
23
+ [['bun.lock'], 'bun install --frozen-lockfile'],
24
+ [['bun.lockb'], 'bun install --frozen-lockfile'],
25
+ [['uv.lock'], 'uv sync'],
26
+ [['poetry.lock'], 'poetry install'],
27
+ [['go.sum'], 'go mod download'],
28
+ ];
29
+ // A commit key seen this often in the recent subjects is the project's, not a stray `UTF-8`.
30
+ const KEY_MIN_COMMITS = 3;
31
+ // The code host of a remote: Azure Repos (adoRepoFromRemote) or github.com over https or ssh.
32
+ // Null for any other.
33
+ export function codeHostOf(remote) {
34
+ const ado = adoRepoFromRemote(remote);
35
+ if (ado !== null)
36
+ return { kind: 'ado', organization: ado.organization, project: ado.project, repository: ado.repository };
37
+ const github = /^(?:https:\/\/(?:[^@/]+@)?github\.com\/|(?:ssh:\/\/)?git@github\.com[:/])([\w.-]+)\/([\w.-]+?)(?:\.git)?\/?$/i.exec(remote.trim());
38
+ return github?.[1] && github[2] ? { kind: 'github', owner: github[1], repo: github[2] } : null;
39
+ }
40
+ // What the checkout at `target` says about its repo. Throws when it is no checkout, or its origin
41
+ // is on a code host the conductor doesn't drive. `base`: the base to read the repo's profile at,
42
+ // over origin/HEAD's (--base). `fetch`: brings origin's refs up to date before they are read, so a
43
+ // profile merged since the last fetch counts; its error, or null.
44
+ export function detect(target, git = gitSync, options = {}) {
45
+ const top = git(['rev-parse', '--show-toplevel'], resolve(target));
46
+ if (top.code !== 0 || top.stdout.trim() === '')
47
+ throw new ConductorError(`${resolve(target)} is not a git checkout`, [
48
+ 'run conduct init in a checkout of the repo, or give its path',
49
+ ]);
50
+ const checkout = resolve(top.stdout.trim());
51
+ const origin = git(['remote', 'get-url', 'origin'], checkout);
52
+ const remote = origin.stdout.trim();
53
+ if (origin.code !== 0 || remote === '')
54
+ throw new ConductorError(`${checkout} has no origin`, [
55
+ 'the conductor clones the remote: push the repo to GitHub or Azure DevOps and set origin',
56
+ ]);
57
+ const codeHost = codeHostOf(remote);
58
+ if (codeHost === null)
59
+ throw new ConductorError(`origin is ${remote}`, ['the conductor conducts GitHub and Azure DevOps repos only']);
60
+ const fetchProblem = options.fetch?.(checkout) ?? null;
61
+ const head = git(['symbolic-ref', '--short', 'refs/remotes/origin/HEAD'], checkout);
62
+ const base = head.code === 0 ? head.stdout.trim().replace(/^origin\//, '') || null : null;
63
+ const local = readLayer(join(checkout, PROFILE_FILE))?.raw ?? null;
64
+ const localBase = typeof local?.baseBranch === 'string' ? local.baseBranch : null;
65
+ return {
66
+ base,
67
+ checkout,
68
+ ciFiles: ciFiles(checkout),
69
+ codeHost,
70
+ commitKey: commitKey(git, checkout),
71
+ fetchProblem,
72
+ localProfile: local !== null,
73
+ remote,
74
+ repoName: codeHost.kind === 'github' ? codeHost.repo : codeHost.repository,
75
+ repoProfile: originProfile(git, checkout, options.base ?? base ?? localBase),
76
+ setup: setupFrom(checkout),
77
+ verifySkills: verifySkills(checkout),
78
+ };
79
+ }
80
+ // `git fetch --quiet --prune origin` in the checkout, as the daemon fetches its clones: no prompt
81
+ // for credentials, and 2 minutes at most. Its error, or null.
82
+ export function fetchOrigin(checkout) {
83
+ const result = spawnSync('git', ['fetch', '--quiet', '--prune', 'origin'], {
84
+ cwd: checkout,
85
+ encoding: 'utf8',
86
+ env: { ...process.env, GCM_INTERACTIVE: 'never', GIT_TERMINAL_PROMPT: '0' },
87
+ timeout: 2 * 60_000,
88
+ windowsHide: true,
89
+ });
90
+ if (result.status === 0)
91
+ return null;
92
+ return (result.stderr || String(result.error ?? `git fetch exited ${result.status ?? 'on a signal'}`)).trim();
93
+ }
94
+ // `conduct init`: returns the exit code, 1 when project check failed, else 0.
95
+ export async function initProject(deps, target, options) {
96
+ const git = deps.git ?? gitSync;
97
+ const say = deps.out;
98
+ // Without --yes every detected value is one to confirm, so no terminal is a refusal, not a yes,
99
+ // and before anything is written or cloned.
100
+ if (!options.yes && deps.ask === null)
101
+ throw noTerminal();
102
+ const ask = options.yes ? null : deps.ask;
103
+ const found = detect(target, git, {
104
+ ...(options.base === undefined ? {} : { base: options.base }),
105
+ fetch: deps.fetch ?? fetchOrigin,
106
+ });
107
+ detectedLines(found).forEach((line) => say(line));
108
+ const registered = registeredName(deps.paths, found.remote, git);
109
+ // One remote, one project: a second name would clone it again and schedule its items twice.
110
+ const sameProject = (name) => {
111
+ if (registered !== null && name !== registered)
112
+ throw new ConductorError(`origin is the project ${registered}'s already`, [
113
+ `run conduct init --name ${registered}, or \`conduct project remove ${registered}\` and delete its folder first`,
114
+ ]);
115
+ };
116
+ const repoNamed = typeof found.repoProfile?.name === 'string' ? found.repoProfile.name : null;
117
+ let name;
118
+ let wrote = null;
119
+ if (found.repoProfile !== null) {
120
+ if (repoNamed === null && options.name === undefined && registered === null)
121
+ throw new ConductorError(`${PROFILE_FILE} names no project`, ['give it one: conduct init --name <name>']);
122
+ name = options.name ?? registered ?? repoNamed ?? '';
123
+ sameProject(name);
124
+ say(`kept the repo's .claude/conductor.json on origin: the profile of the project ${name}`);
125
+ }
126
+ else if (found.localProfile) {
127
+ // The conductor reads the repo's profile at origin/<base> only: one in the working tree alone is
128
+ // a --shared run's, or a change not pushed yet.
129
+ say(`next: .claude/conductor.json is in ${found.checkout} but not on origin/${options.base ?? found.base ?? '<base>'}: commit it and push it to the base branch, then run \`conduct init\` again`);
130
+ return 0;
131
+ }
132
+ else {
133
+ const missing = [];
134
+ if (options.name !== undefined)
135
+ sameProject(options.name);
136
+ name = await answer(ask, missing, {
137
+ check: (v) => (PROJECT_NAME.test(v) ? null : 'lowercase letters, digits and dashes, starting with a letter'),
138
+ fallback: registered ?? nameFrom(found.repoName),
139
+ flag: '--name <name>',
140
+ given: options.name,
141
+ question: 'project name',
142
+ });
143
+ refuseMissing(missing);
144
+ sameProject(name);
145
+ const file = options.shared ? join(found.checkout, PROFILE_FILE) : projectPaths(deps.paths, name).profile;
146
+ if (existsSync(file))
147
+ say(`kept ${file}: a profile that is there is never overwritten`);
148
+ else {
149
+ const starter = await starterProfile(found, name, options, ask, git);
150
+ const text = profileText(starter, name, options.shared);
151
+ checkStarter(text, file, name, options.shared);
152
+ mkdirSync(dirname(file), { recursive: true });
153
+ writeFileSync(file, text, { flag: 'wx' });
154
+ wrote = file;
155
+ say(`wrote ${file}`);
156
+ }
157
+ if (options.shared) {
158
+ // The repo layer is read at origin/<base> only, so it counts once it is pushed.
159
+ say('next: commit .claude/conductor.json and push it to the base branch, then run `conduct init` again');
160
+ return 0;
161
+ }
162
+ }
163
+ let added;
164
+ try {
165
+ added = await deps.add(found.checkout, name);
166
+ }
167
+ catch (error) {
168
+ // A profile this run wrote, for a project that never got its clone, would keep its answers
169
+ // beyond the next run ("never overwritten"): it goes, and the next run asks again.
170
+ if (wrote !== null) {
171
+ rmSync(wrote, { force: true });
172
+ say(`removed ${wrote}, which this run wrote: run \`conduct init\` again once the add works`);
173
+ }
174
+ throw error;
175
+ }
176
+ if (added.cloned) {
177
+ say(`next: ${trustStep(added.clone)}`);
178
+ if (ask === null) {
179
+ say('then run `conduct init` again, which checks the project');
180
+ return 0;
181
+ }
182
+ await ask('press Enter once you have', '');
183
+ }
184
+ const report = await deps.check(name);
185
+ checkLines(report).forEach((line) => say(line));
186
+ const verify = verifySkillOf(deps.paths, name, git);
187
+ if (verify !== null && verifyMissing(report, verify)) {
188
+ const here = found.verifySkills.includes(verify);
189
+ const ignored = here && git(['check-ignore', '-q', `.claude/skills/${verify}/SKILL.md`], found.checkout).code === 0;
190
+ say(ignored
191
+ ? `next: .claude/skills/${verify} is here but gitignored, so a new worktree gets it only from setup: add the command that installs it to the profile's setup (\`conduct profile ${name}\` names the file), then run \`conduct init\` again`
192
+ : here
193
+ ? `next: commit .claude/skills/${verify} and push it to the base branch, then run \`conduct init\` again`
194
+ : `next: make the verify skill with the conductor plugin's /conductor:create-verification-skill, which loads only with the plugin: run \`claude --plugin-dir "${deps.pluginDir ?? pluginSource()}"\` in ${found.checkout}, ask it for a skill named ${verify} (the profile's skills.verify), then commit it, push it to the base branch and run \`conduct init\` again`);
195
+ }
196
+ return checkFailed(report) ? 1 : 0;
197
+ }
198
+ // An item key from a repo name: its words' initials (agentic-toolkit → AT), else its first three
199
+ // letters (parcel → PAR).
200
+ export function keyFrom(repoName) {
201
+ const words = repoName
202
+ .replace(/([a-z])([A-Z])/g, '$1 $2')
203
+ .split(/[^A-Za-z]+/)
204
+ .filter((w) => w !== '');
205
+ const key = (words.length > 1 ? words.map((w) => w[0]).join('') : (words[0] ?? '').slice(0, 3)).toUpperCase();
206
+ return key.length >= 2 ? key.slice(0, 5) : null;
207
+ }
208
+ // A project name from a repo name: Emergent.AgenticToolkit → emergent-agentictoolkit. Null when
209
+ // nothing of it is left.
210
+ export function nameFrom(repoName) {
211
+ const name = repoName
212
+ .toLowerCase()
213
+ .replace(/[^a-z0-9]+/g, '-')
214
+ .replace(/^[^a-z]+/, '')
215
+ .replace(/-+$/, '');
216
+ return PROJECT_NAME.test(name) ? name : null;
217
+ }
218
+ // The starter profile as JSONC: a header that says where it came from, then the fields.
219
+ export function profileText(profile, name, shared) {
220
+ const header = shared
221
+ ? [
222
+ `// ${name}'s conductor profile, written by \`conduct init\`: the shared layer under each machine's`,
223
+ `// ~/.conductor/projects/${name}.json, read on origin/<baseBranch>. It changes by PR.`,
224
+ ]
225
+ : [
226
+ `// ${name}'s machine profile, written by \`conduct init\`: this machine's settings for the project, over`,
227
+ "// the repo's .claude/conductor.json when it has one. The daemon takes it again when it is saved.",
228
+ ];
229
+ const about = [
230
+ `// \`conduct profile ${name}\` shows each field and its source; the conductor's README (Projects)`,
231
+ '// says what each does.',
232
+ ];
233
+ return `${[...header, ...about].join('\n')}\n${JSON.stringify(profile, null, 2)}\n`;
234
+ }
235
+ // A whole profile from what was detected and answered, with the `conductor` minimum its fields need.
236
+ export async function starterProfile(found, name, options, ask, git = gitSync) {
237
+ const missing = [];
238
+ const own = found.codeHost.kind === 'github' ? 'github-issues' : 'ado-boards';
239
+ const kinds = [own, 'linear'];
240
+ const baseBranch = await answer(ask, missing, {
241
+ // A branch origin doesn't have would be written into a profile init then keeps.
242
+ check: (v) => git(['rev-parse', '--verify', '--quiet', `refs/remotes/origin/${v}`], found.checkout).code === 0
243
+ ? null
244
+ : 'a branch on origin',
245
+ fallback: found.base,
246
+ flag: '--base <branch>',
247
+ given: options.base,
248
+ question: 'base branch',
249
+ });
250
+ const kind = await answer(ask, missing, {
251
+ check: (v) => (kinds.some((k) => k === v) ? null : `one of ${kinds.join(', ')}`),
252
+ fallback: own,
253
+ flag: '--tracker <kind>',
254
+ given: options.tracker,
255
+ question: `tracker (${kinds.join(' or ')})`,
256
+ });
257
+ refuseMissing(missing);
258
+ let tracker;
259
+ if (kind === 'linear') {
260
+ const team = await answer(ask, missing, {
261
+ check: (v) => (/^[A-Z][A-Z0-9]*$/.test(v) ? null : 'the Linear team key, such as ATK'),
262
+ fallback: found.commitKey,
263
+ flag: '--team <key>',
264
+ given: options.team,
265
+ question: 'Linear team key',
266
+ upper: true,
267
+ });
268
+ tracker = { areaLabelGroup: 'Area', humanLabel: 'human', kind: 'linear', queue: 'prioritized-projects', team };
269
+ }
270
+ else {
271
+ const key = await answer(ask, missing, {
272
+ check: (v) => (/^[A-Z]+$/.test(v) ? null : 'capital letters, such as PAR'),
273
+ fallback: found.commitKey ?? keyFrom(found.repoName),
274
+ flag: '--key <KEY>',
275
+ given: options.key,
276
+ question: `item key (${kind === 'github-issues' ? 'PAR-12 is issue #12' : 'CAD-1234 is work item 1234'})`,
277
+ upper: true,
278
+ });
279
+ if (kind === 'github-issues')
280
+ tracker = { humanLabel: 'human', key, kind: 'github-issues' };
281
+ else {
282
+ const query = await answer(ask, missing, {
283
+ fallback: null,
284
+ flag: '--query <query>',
285
+ given: options.query,
286
+ question: 'the saved Boards query that is the queue, by path or id',
287
+ });
288
+ tracker = { humanLabel: 'human', key, kind: 'ado-boards', query };
289
+ }
290
+ }
291
+ const setupText = await answer(ask, missing, {
292
+ fallback: found.setup.length > 0 ? found.setup.join('; ') : '-',
293
+ question: 'setup commands for a new worktree, separated by ; (- for none)',
294
+ });
295
+ const verify = await answer(ask, missing, {
296
+ fallback: found.verifySkills[0] ?? `verify-${name}`,
297
+ question: 'verify skill',
298
+ });
299
+ refuseMissing(missing);
300
+ const profile = {
301
+ baseBranch,
302
+ ci: { kind: found.codeHost.kind === 'github' ? 'github-actions' : 'ado-pipelines' },
303
+ codeHost: found.codeHost,
304
+ conductor: FIELD_SINCE.conductor,
305
+ gates: ['plan', 'merge'],
306
+ name,
307
+ protocol: PROTOCOL,
308
+ release: {
309
+ handoff: `${baseBranch} is ready to ship: release it the project's own way. The conductor never releases.`,
310
+ },
311
+ setup: setupText === '-' ? [] : setupText.split(';').flatMap((c) => (c.trim() === '' ? [] : [c.trim()])),
312
+ skills: { verify, work: WORK_SKILL },
313
+ slots: 2,
314
+ tracker,
315
+ };
316
+ // The newest version any field it writes needs, `conductor` itself among them.
317
+ const needs = minimumCheck(JSON.stringify(profile), 'the starter profile').needs;
318
+ return needs === null ? profile : { ...profile, conductor: needs };
319
+ }
320
+ // Questions on the terminal; null when there is none to ask on.
321
+ export function terminalAsk() {
322
+ if (!process.stdin.isTTY)
323
+ return null;
324
+ return async (question, fallback) => {
325
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
326
+ try {
327
+ return await rl.question(`${question}${fallback ? ` [${fallback}]` : ''}: `);
328
+ }
329
+ finally {
330
+ rl.close();
331
+ }
332
+ };
333
+ }
334
+ // Ask until the answer passes `check`, again with what was wrong; the fallback for an empty
335
+ // answer. With nothing to ask, the flag's value or the fallback, else the flag goes on the
336
+ // `missing` list. `upper`: a key, taken in capitals however it was typed.
337
+ async function answer(ask, missing, q) {
338
+ const problem = (v) => q.check?.(v) ?? null;
339
+ const read = (v) => (q.upper ? v.trim().toUpperCase() : v.trim());
340
+ if (q.given !== undefined) {
341
+ const given = read(q.given);
342
+ if (given === '')
343
+ throw new ConductorError(`${q.flag ?? q.question}: give it a value`);
344
+ const wrong = problem(given);
345
+ if (wrong !== null)
346
+ throw new ConductorError(`${q.flag ?? q.question}: "${given}" is not ${wrong}`);
347
+ return given;
348
+ }
349
+ if (ask === null) {
350
+ if (q.fallback === null || problem(q.fallback) !== null)
351
+ missing.push(`${q.flag ?? q.question}: ${q.question}`);
352
+ return q.fallback ?? '';
353
+ }
354
+ let question = q.question;
355
+ for (;;) {
356
+ const value = read(await ask(question, q.fallback)) || q.fallback || '';
357
+ // No answer and nothing to fall back on: missing, as with --yes, rather than asking forever.
358
+ if (value === '') {
359
+ missing.push(`${q.flag ?? q.question}: ${q.question}`);
360
+ return '';
361
+ }
362
+ const wrong = problem(value);
363
+ if (wrong === null)
364
+ return value;
365
+ question = `${q.question} ("${value}" is not ${wrong})`;
366
+ }
367
+ }
368
+ // The starter must read as the conductor reads it, with no field newer than its minimum.
369
+ function checkStarter(text, file, name, shared) {
370
+ const layer = rawLayer(text, file);
371
+ layerProfile(name, shared ? { machine: null, repo: layer } : { machine: layer, repo: null });
372
+ const { problems } = minimumCheck(text, file);
373
+ if (problems.length > 0)
374
+ throw new ConductorError(`the starter profile for ${name} is wrong`, problems);
375
+ }
376
+ // The CI kinds the repo's pipeline files are for.
377
+ function ciFiles(checkout) {
378
+ const kinds = [];
379
+ if (yamlIn(join(checkout, '.github', 'workflows')))
380
+ kinds.push('github-actions');
381
+ if (['azure-pipelines.yml', 'azure-pipelines.yaml'].some((f) => existsSync(join(checkout, f))) ||
382
+ yamlIn(join(checkout, '.azure-pipelines')) ||
383
+ yamlIn(join(checkout, 'pipelines')))
384
+ kinds.push('ado-pipelines');
385
+ return kinds;
386
+ }
387
+ // The key most of the last 100 commit subjects carry, as (ATK-528) or ATK-528:, seen at least
388
+ // KEY_MIN_COMMITS times; null for none.
389
+ function commitKey(git, checkout) {
390
+ const log = git(['log', '-100', '--format=%s'], checkout);
391
+ if (log.code !== 0)
392
+ return null;
393
+ const counts = new Map();
394
+ for (const subject of log.stdout.split('\n'))
395
+ for (const key of new Set([...subject.matchAll(/\b([A-Z]{2,})-\d+\b/g)].map((m) => m[1] ?? '')))
396
+ counts.set(key, (counts.get(key) ?? 0) + 1);
397
+ const [best] = [...counts].sort((a, b) => b[1] - a[1]);
398
+ return best && best[1] >= KEY_MIN_COMMITS ? best[0] : null;
399
+ }
400
+ function detectedLines(found) {
401
+ const host = found.codeHost.kind === 'github'
402
+ ? `GitHub ${found.codeHost.owner}/${found.codeHost.repo}`
403
+ : `Azure DevOps ${found.codeHost.organization} ${found.codeHost.project}/${found.codeHost.repository}`;
404
+ const ci = found.codeHost.kind === 'github' ? 'github-actions' : 'ado-pipelines';
405
+ const lines = [
406
+ `init ${found.checkout}`,
407
+ ` code host: ${host} (origin)`,
408
+ ` ci: ${ci}, the code host's own`,
409
+ ` base: ${found.base === null ? 'none: origin/HEAD is not set' : `${found.base} (origin/HEAD)`}`,
410
+ ` setup: ${found.setup.length > 0 ? found.setup.join('; ') : 'no lockfile at the root'}`,
411
+ ` verify: ${found.verifySkills.length > 0 ? found.verifySkills.join(', ') : 'no verify-* skill in .claude/skills'}`,
412
+ ];
413
+ if (found.commitKey !== null)
414
+ lines.push(` items: the commits name ${found.commitKey}-n items`);
415
+ if (found.fetchProblem !== null)
416
+ lines.push(` hint: origin couldn't be fetched, so its branches are as last fetched: ${found.fetchProblem}`);
417
+ if (found.ciFiles.length > 0 && !found.ciFiles.includes(ci))
418
+ lines.push(` hint: the repo's pipeline files are ${found.ciFiles.join(' and ')}, but the conductor reads ${ci}, the code host's own CI`);
419
+ return lines;
420
+ }
421
+ // The refusal with no terminal: a value only detected isn't confirmed. Node sees no terminal in
422
+ // Git Bash's mintty either.
423
+ function noTerminal() {
424
+ return new ConductorError('conduct init has no terminal to ask in', [
425
+ "pass --yes to take what it detected, with a flag for each answer it can't detect",
426
+ 'or run it in Windows Terminal or a console, where it asks',
427
+ ]);
428
+ }
429
+ // The repo's .claude/conductor.json at origin/<base>, where the conductor reads it (repoLayerAt),
430
+ // and at the baseBranch it names when that is another branch; null with no base, no such branch on
431
+ // origin, or no file there.
432
+ function originProfile(git, checkout, base) {
433
+ const at = (branch) => {
434
+ try {
435
+ return repoLayerAt(git, checkout, branch)?.raw ?? null;
436
+ }
437
+ catch {
438
+ return null;
439
+ }
440
+ };
441
+ if (base === null)
442
+ return null;
443
+ const raw = at(base);
444
+ const named = typeof raw?.baseBranch === 'string' ? raw.baseBranch : null;
445
+ return named !== null && named !== base ? at(named) : raw;
446
+ }
447
+ function refuseMissing(missing) {
448
+ if (missing.length > 0)
449
+ throw new ConductorError("conduct init needs what it couldn't detect", [
450
+ ...missing,
451
+ 'give each with its flag, or run it in a terminal without --yes to be asked',
452
+ ]);
453
+ }
454
+ // The project already cloned from this remote, so a run after a first one finds the name it chose.
455
+ function registeredName(paths, remote, git) {
456
+ if (!existsSync(paths.projects))
457
+ return null;
458
+ for (const entry of readdirSync(paths.projects, { withFileTypes: true })) {
459
+ if (!entry.isDirectory() || !PROJECT_NAME.test(entry.name))
460
+ continue;
461
+ const { clone } = projectPaths(paths, entry.name);
462
+ if (!existsSync(join(clone, '.git')))
463
+ continue;
464
+ const origin = git(['remote', 'get-url', 'origin'], clone);
465
+ if (origin.code === 0 && sameRemote(origin.stdout, remote))
466
+ return entry.name;
467
+ }
468
+ return null;
469
+ }
470
+ function setupFrom(checkout) {
471
+ const match = INSTALLS.find(([files]) => files.every((f) => existsSync(join(checkout, f))));
472
+ return match ? [match[1]] : [];
473
+ }
474
+ // Whether the check's throwaway worktree lacked the verify skill after setup: its summary is
475
+ // `<MISSING_SKILLS> a, b not in …`, matched by whole names.
476
+ function verifyMissing(report, verify) {
477
+ return report.results.some((r) => {
478
+ if (r.check !== 'worktree' || r.status !== 'fail' || !r.summary.startsWith(MISSING_SKILLS))
479
+ return false;
480
+ const [names = ''] = r.summary.slice(MISSING_SKILLS.length).split(' not in ');
481
+ return names
482
+ .split(',')
483
+ .map((n) => n.trim())
484
+ .includes(verify);
485
+ });
486
+ }
487
+ // The profile's verify skill as the project resolves it now; null when it doesn't read.
488
+ function verifySkillOf(paths, name, git) {
489
+ try {
490
+ return projectProfile(paths, name, git).profile.skills.verify;
491
+ }
492
+ catch {
493
+ return null;
494
+ }
495
+ }
496
+ function verifySkills(checkout) {
497
+ const dir = join(checkout, '.claude', 'skills');
498
+ if (!existsSync(dir))
499
+ return [];
500
+ return readdirSync(dir, { withFileTypes: true })
501
+ .filter((e) => e.isDirectory() && e.name.startsWith('verify-') && existsSync(join(dir, e.name, 'SKILL.md')))
502
+ .map((e) => e.name)
503
+ .sort();
504
+ }
505
+ function yamlIn(dir) {
506
+ return existsSync(dir) && readdirSync(dir).some((f) => /\.ya?ml$/i.test(f));
507
+ }
508
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAIzD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAuB,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAEL,OAAO,EACP,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,SAAS,EACT,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAqB,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAoE3C,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,WAAW,YAAY,CAAC;AAErD,kFAAkF;AAClF,MAAM,QAAQ,GAA6C;IACzD,CAAC,CAAC,gBAAgB,CAAC,EAAE,gCAAgC,CAAC;IACtD,CAAC,CAAC,mBAAmB,CAAC,EAAE,QAAQ,CAAC;IACjC,CAAC,CAAC,WAAW,EAAE,aAAa,CAAC,EAAE,0BAA0B,CAAC;IAC1D,CAAC,CAAC,WAAW,CAAC,EAAE,gCAAgC,CAAC;IACjD,CAAC,CAAC,UAAU,CAAC,EAAE,+BAA+B,CAAC;IAC/C,CAAC,CAAC,WAAW,CAAC,EAAE,+BAA+B,CAAC;IAChD,CAAC,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IACxB,CAAC,CAAC,aAAa,CAAC,EAAE,gBAAgB,CAAC;IACnC,CAAC,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAChC,CAAC;AAEF,6FAA6F;AAC7F,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B,8FAA8F;AAC9F,sBAAsB;AACtB,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,MAAM,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,GAAG,KAAK,IAAI;QACd,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;IAC3G,MAAM,MAAM,GACV,+GAA+G,CAAC,IAAI,CAClH,MAAM,CAAC,IAAI,EAAE,CACd,CAAC;IACJ,OAAO,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACjG,CAAC;AAED,kGAAkG;AAClG,iGAAiG;AACjG,mGAAmG;AACnG,kEAAkE;AAClE,MAAM,UAAU,MAAM,CACpB,MAAc,EACd,MAAe,OAAO,EACtB,UAA0E,EAAE;IAE5E,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACnE,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE;QAC5C,MAAM,IAAI,cAAc,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,wBAAwB,EAAE;YACnE,8DAA8D;SAC/D,CAAC,CAAC;IACL,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACpC,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,MAAM,KAAK,EAAE;QACpC,MAAM,IAAI,cAAc,CAAC,GAAG,QAAQ,gBAAgB,EAAE;YACpD,yFAAyF;SAC1F,CAAC,CAAC;IACL,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,QAAQ,KAAK,IAAI;QACnB,MAAM,IAAI,cAAc,CAAC,aAAa,MAAM,EAAE,EAAE,CAAC,2DAA2D,CAAC,CAAC,CAAC;IACjH,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;IACvD,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,cAAc,EAAE,SAAS,EAAE,0BAA0B,CAAC,EAAE,QAAQ,CAAC,CAAC;IACpF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1F,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC;IACnE,MAAM,SAAS,GAAG,OAAO,KAAK,EAAE,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IAClF,OAAO;QACL,IAAI;QACJ,QAAQ;QACR,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC;QAC1B,QAAQ;QACR,SAAS,EAAE,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC;QACnC,YAAY;QACZ,YAAY,EAAE,KAAK,KAAK,IAAI;QAC5B,MAAM;QACN,QAAQ,EAAE,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU;QAC1E,WAAW,EAAE,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI,IAAI,SAAS,CAAC;QAC5E,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC;QAC1B,YAAY,EAAE,YAAY,CAAC,QAAQ,CAAC;KACrC,CAAC;AACJ,CAAC;AAED,kGAAkG;AAClG,8DAA8D;AAC9D,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE;QACzE,GAAG,EAAE,QAAQ;QACb,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,eAAe,EAAE,OAAO,EAAE,mBAAmB,EAAE,GAAG,EAAE;QAC3E,OAAO,EAAE,CAAC,GAAG,MAAM;QACnB,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,oBAAoB,MAAM,CAAC,MAAM,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAChH,CAAC;AAED,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAc,EAAE,MAAc,EAAE,OAAoB;IACpF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IACrB,gGAAgG;IAChG,4CAA4C;IAC5C,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI;QAAE,MAAM,UAAU,EAAE,CAAC;IAC1D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE;QAChC,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;QAC7D,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,WAAW;KACjC,CAAC,CAAC;IACH,aAAa,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjE,4FAA4F;IAC5F,MAAM,WAAW,GAAG,CAAC,IAAY,EAAQ,EAAE;QACzC,IAAI,UAAU,KAAK,IAAI,IAAI,IAAI,KAAK,UAAU;YAC5C,MAAM,IAAI,cAAc,CAAC,yBAAyB,UAAU,YAAY,EAAE;gBACxE,2BAA2B,UAAU,iCAAiC,UAAU,gCAAgC;aACjH,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9F,IAAI,IAAY,CAAC;IACjB,IAAI,KAAK,GAAkB,IAAI,CAAC;IAChC,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;QAC/B,IAAI,SAAS,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI;YACzE,MAAM,IAAI,cAAc,CAAC,GAAG,YAAY,mBAAmB,EAAE,CAAC,yCAAyC,CAAC,CAAC,CAAC;QAC5G,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,UAAU,IAAI,SAAS,IAAI,EAAE,CAAC;QACrD,WAAW,CAAC,IAAI,CAAC,CAAC;QAClB,GAAG,CAAC,gFAAgF,IAAI,EAAE,CAAC,CAAC;IAC9F,CAAC;SAAM,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QAC9B,iGAAiG;QACjG,gDAAgD;QAChD,GAAG,CACD,sCAAsC,KAAK,CAAC,QAAQ,sBAAsB,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,QAAQ,6EAA6E,CAC9L,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;YAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE;YAChC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,8DAA8D,CAAC;YAC5G,QAAQ,EAAE,UAAU,IAAI,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;YAChD,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,OAAO,CAAC,IAAI;YACnB,QAAQ,EAAE,cAAc;SACzB,CAAC,CAAC;QACH,aAAa,CAAC,OAAO,CAAC,CAAC;QACvB,WAAW,CAAC,IAAI,CAAC,CAAC;QAClB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC;QAC1G,IAAI,UAAU,CAAC,IAAI,CAAC;YAAE,GAAG,CAAC,QAAQ,IAAI,gDAAgD,CAAC,CAAC;aACnF,CAAC;YACJ,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACrE,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACxD,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAC/C,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9C,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1C,KAAK,GAAG,IAAI,CAAC;YACb,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QACvB,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,gFAAgF;YAChF,GAAG,CAAC,mGAAmG,CAAC,CAAC;YACzG,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED,IAAI,KAA2C,CAAC;IAChD,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,2FAA2F;QAC3F,mFAAmF;QACnF,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/B,GAAG,CAAC,WAAW,KAAK,uEAAuE,CAAC,CAAC;QAC/F,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,GAAG,CAAC,SAAS,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,GAAG,CAAC,yDAAyD,CAAC,CAAC;YAC/D,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,GAAG,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IACpD,IAAI,MAAM,KAAK,IAAI,IAAI,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,IAAI,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,IAAI,EAAE,kBAAkB,MAAM,WAAW,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;QACpH,GAAG,CACD,OAAO;YACL,CAAC,CAAC,wBAAwB,MAAM,kJAAkJ,IAAI,qDAAqD;YAC3O,CAAC,CAAC,IAAI;gBACJ,CAAC,CAAC,+BAA+B,MAAM,kEAAkE;gBACzG,CAAC,CAAC,8JAA8J,IAAI,CAAC,SAAS,IAAI,YAAY,EAAE,UAAU,KAAK,CAAC,QAAQ,8BAA8B,MAAM,2GAA2G,CAC5W,CAAC;IACJ,CAAC;IACD,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,iGAAiG;AACjG,0BAA0B;AAC1B,MAAM,UAAU,OAAO,CAAC,QAAgB;IACtC,MAAM,KAAK,GAAG,QAAQ;SACnB,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC;SACnC,KAAK,CAAC,YAAY,CAAC;SACnB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3B,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9G,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAClD,CAAC;AAED,gGAAgG;AAChG,yBAAyB;AACzB,MAAM,UAAU,QAAQ,CAAC,QAAgB;IACvC,MAAM,IAAI,GAAG,QAAQ;SAClB,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACtB,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,WAAW,CAAC,OAAqB,EAAE,IAAY,EAAE,MAAe;IAC9E,MAAM,MAAM,GAAG,MAAM;QACnB,CAAC,CAAC;YACE,MAAM,IAAI,0FAA0F;YACpG,4BAA4B,IAAI,uDAAuD;SACxF;QACH,CAAC,CAAC;YACE,MAAM,IAAI,gGAAgG;YAC1G,mGAAmG;SACpG,CAAC;IACN,MAAM,KAAK,GAAG;QACZ,wBAAwB,IAAI,uEAAuE;QACnG,yBAAyB;KAC1B,CAAC;IACF,OAAO,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AACtF,CAAC;AAED,qGAAqG;AACrG,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAe,EACf,IAAY,EACZ,OAAoB,EACpB,GAAe,EACf,MAAe,OAAO;IAEtB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAgB,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,CAAC;IAC3F,MAAM,KAAK,GAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE;QAC5C,gFAAgF;QAChF,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CACX,GAAG,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,uBAAuB,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC;YAC9F,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,oBAAoB;QAC1B,QAAQ,EAAE,KAAK,CAAC,IAAI;QACpB,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,OAAO,CAAC,IAAI;QACnB,QAAQ,EAAE,aAAa;KACxB,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE;QACtC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChF,QAAQ,EAAE,GAAG;QACb,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,OAAO,CAAC,OAAO;QACtB,QAAQ,EAAE,YAAY,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG;KAC5C,CAAC,CAAC;IACH,aAAa,CAAC,OAAO,CAAC,CAAC;IACvB,IAAI,OAAgC,CAAC;IACrC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE;YACtC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,kCAAkC,CAAC;YACtF,QAAQ,EAAE,KAAK,CAAC,SAAS;YACzB,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,OAAO,CAAC,IAAI;YACnB,QAAQ,EAAE,iBAAiB;YAC3B,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QACH,OAAO,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,sBAAsB,EAAE,IAAI,EAAE,CAAC;IACjH,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE;YACrC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,8BAA8B,CAAC;YAC1E,QAAQ,EAAE,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;YACpD,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,OAAO,CAAC,GAAG;YAClB,QAAQ,EAAE,aAAa,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,4BAA4B,GAAG;YACzG,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QACH,IAAI,IAAI,KAAK,eAAe;YAAE,OAAO,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;aACvF,CAAC;YACJ,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE;gBACvC,QAAQ,EAAE,IAAI;gBACd,IAAI,EAAE,iBAAiB;gBACvB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,QAAQ,EAAE,yDAAyD;aACpE,CAAC,CAAC;YACH,OAAO,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;QACpE,CAAC;IACH,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE;QAC3C,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG;QAC/D,QAAQ,EAAE,gEAAgE;KAC3E,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE;QACxC,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,UAAU,IAAI,EAAE;QACnD,QAAQ,EAAE,cAAc;KACzB,CAAC,CAAC;IACH,aAAa,CAAC,OAAO,CAAC,CAAC;IACvB,MAAM,OAAO,GAAiB;QAC5B,UAAU;QACV,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,eAAe,EAAE;QACnF,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,SAAS,EAAE,WAAW,CAAC,SAAS;QAChC,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;QACxB,IAAI;QACJ,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE;YACP,OAAO,EAAE,GAAG,UAAU,oFAAoF;SAC3G;QACD,KAAK,EAAE,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACxG,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE;QACpC,KAAK,EAAE,CAAC;QACR,OAAO;KACR,CAAC;IACF,+EAA+E;IAC/E,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,qBAAqB,CAAC,CAAC,KAAK,CAAC;IACjF,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACrE,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;QAClC,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7E,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/E,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,4FAA4F;AAC5F,2FAA2F;AAC3F,0EAA0E;AAC1E,KAAK,UAAU,MAAM,CACnB,GAAe,EACf,OAAiB,EACjB,CAOC;IAED,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACpD,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1E,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,KAAK,KAAK,EAAE;YAAE,MAAM,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,mBAAmB,CAAC,CAAC;QACvF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,KAAK,KAAK,IAAI;YAAE,MAAM,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,MAAM,KAAK,YAAY,KAAK,EAAE,CAAC,CAAC;QACpG,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,IAAI;YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChH,OAAO,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC;IAC1B,CAAC;IACD,IAAI,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;IAC1B,SAAS,CAAC;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC;QACxE,6FAA6F;QAC7F,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YACvD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QACjC,QAAQ,GAAG,GAAG,CAAC,CAAC,QAAQ,MAAM,KAAK,YAAY,KAAK,GAAG,CAAC;IAC1D,CAAC;AACH,CAAC;AAED,yFAAyF;AACzF,SAAS,YAAY,CAAC,IAAY,EAAE,IAAY,EAAE,IAAY,EAAE,MAAe;IAC7E,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7F,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,cAAc,CAAC,2BAA2B,IAAI,WAAW,EAAE,QAAQ,CAAC,CAAC;AAC1G,CAAC;AAED,kDAAkD;AAClD,SAAS,OAAO,CAAC,QAAgB;IAC/B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACjF,IACE,CAAC,qBAAqB,EAAE,sBAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1F,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAEnC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC9B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8FAA8F;AAC9F,wCAAwC;AACxC,SAAS,SAAS,CAAC,GAAY,EAAE,QAAgB;IAC/C,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC1D,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;QAC1C,KAAK,MAAM,GAAG,IAAI,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7F,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,OAAO,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAED,SAAS,aAAa,CAAC,KAAe;IACpC,MAAM,IAAI,GACR,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ;QAC9B,CAAC,CAAC,UAAU,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE;QACzD,CAAC,CAAC,gBAAgB,KAAK,CAAC,QAAQ,CAAC,YAAY,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IAC3G,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,eAAe,CAAC;IACjF,MAAM,KAAK,GAAG;QACZ,QAAQ,KAAK,CAAC,QAAQ,EAAE;QACxB,gBAAgB,IAAI,WAAW;QAC/B,gBAAgB,EAAE,uBAAuB;QACzC,gBAAgB,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,gBAAgB,EAAE;QACtG,gBAAgB,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,yBAAyB,EAAE;QAC7F,gBAAgB,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,qCAAqC,EAAE;KACxH,CAAC;IACF,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,iCAAiC,KAAK,CAAC,SAAS,UAAU,CAAC,CAAC;IACrG,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI;QAC7B,KAAK,CAAC,IAAI,CAAC,4EAA4E,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IAC/G,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzD,KAAK,CAAC,IAAI,CACR,yCAAyC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,6BAA6B,EAAE,0BAA0B,CAC9H,CAAC;IACJ,OAAO,KAAK,CAAC;AACf,CAAC;AAED,gGAAgG;AAChG,4BAA4B;AAC5B,SAAS,UAAU;IACjB,OAAO,IAAI,cAAc,CAAC,wCAAwC,EAAE;QAClE,kFAAkF;QAClF,2DAA2D;KAC5D,CAAC,CAAC;AACL,CAAC;AAED,kGAAkG;AAClG,mGAAmG;AACnG,4BAA4B;AAC5B,SAAS,aAAa,CAAC,GAAY,EAAE,QAAgB,EAAE,IAAmB;IACxE,MAAM,EAAE,GAAG,CAAC,MAAc,EAAkC,EAAE;QAC5D,IAAI,CAAC;YACH,OAAO,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC,CAAC;IACF,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACrB,MAAM,KAAK,GAAG,OAAO,GAAG,EAAE,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1E,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC5D,CAAC;AAED,SAAS,aAAa,CAAC,OAA0B;IAC/C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QACpB,MAAM,IAAI,cAAc,CAAC,4CAA4C,EAAE;YACrE,GAAG,OAAO;YACV,4EAA4E;SAC7E,CAAC,CAAC;AACP,CAAC;AAED,mGAAmG;AACnG,SAAS,cAAc,CAAC,KAAuC,EAAE,MAAc,EAAE,GAAY;IAC3F,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACzE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,SAAS;QACrE,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAAE,SAAS;QAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;QAC3D,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IAChF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CAAC,QAAgB;IACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5F,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACjC,CAAC;AAED,6FAA6F;AAC7F,4DAA4D;AAC5D,SAAS,aAAa,CAAC,MAAmB,EAAE,MAAc;IACxD,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;QAC/B,IAAI,CAAC,CAAC,KAAK,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;YAAE,OAAO,KAAK,CAAC;QACzG,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC9E,OAAO,KAAK;aACT,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,wFAAwF;AACxF,SAAS,aAAa,CAAC,KAAuC,EAAE,IAAY,EAAE,GAAY;IACxF,IAAI,CAAC;QACH,OAAO,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,OAAO,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SAC7C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;SAC3G,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAClB,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,MAAM,CAAC,GAAW;IACzB,OAAO,UAAU,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9E,CAAC"}