@on-par/factory-core 0.9.28-next.2 → 0.9.28-next.21

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 (215) hide show
  1. package/dist/blockers/declared-prerequisites.d.ts +4 -1
  2. package/dist/blockers/declared-prerequisites.d.ts.map +1 -1
  3. package/dist/blockers/declared-prerequisites.js +10 -5
  4. package/dist/blockers/declared-prerequisites.js.map +1 -1
  5. package/dist/checkers/app-smoke.d.ts.map +1 -1
  6. package/dist/checkers/app-smoke.js +4 -1
  7. package/dist/checkers/app-smoke.js.map +1 -1
  8. package/dist/checkers/evidence-plan.d.ts +2 -0
  9. package/dist/checkers/evidence-plan.d.ts.map +1 -1
  10. package/dist/checkers/evidence-plan.js +13 -6
  11. package/dist/checkers/evidence-plan.js.map +1 -1
  12. package/dist/checkers/evidence-selector.d.ts +2 -0
  13. package/dist/checkers/evidence-selector.d.ts.map +1 -1
  14. package/dist/checkers/evidence-selector.js +13 -10
  15. package/dist/checkers/evidence-selector.js.map +1 -1
  16. package/dist/checkers/evidence-workspace.d.ts +21 -0
  17. package/dist/checkers/evidence-workspace.d.ts.map +1 -0
  18. package/dist/checkers/evidence-workspace.js +118 -0
  19. package/dist/checkers/evidence-workspace.js.map +1 -0
  20. package/dist/checkers/index.js +1 -1
  21. package/dist/checkers/index.js.map +1 -1
  22. package/dist/checkers/internal-exports.d.ts +1 -0
  23. package/dist/checkers/internal-exports.d.ts.map +1 -1
  24. package/dist/checkers/internal-exports.js +1 -0
  25. package/dist/checkers/internal-exports.js.map +1 -1
  26. package/dist/checkers/resolve-commands.d.ts.map +1 -1
  27. package/dist/checkers/resolve-commands.js +5 -1
  28. package/dist/checkers/resolve-commands.js.map +1 -1
  29. package/dist/config/example.d.ts.map +1 -1
  30. package/dist/config/example.js +11 -2
  31. package/dist/config/example.js.map +1 -1
  32. package/dist/config/index.d.ts +20 -32
  33. package/dist/config/index.d.ts.map +1 -1
  34. package/dist/config/index.js +11 -30
  35. package/dist/config/index.js.map +1 -1
  36. package/dist/config/merge-policy.d.ts +36 -0
  37. package/dist/config/merge-policy.d.ts.map +1 -0
  38. package/dist/config/merge-policy.js +31 -0
  39. package/dist/config/merge-policy.js.map +1 -0
  40. package/dist/config/runtime-config-keys.d.ts.map +1 -1
  41. package/dist/config/runtime-config-keys.js +1 -0
  42. package/dist/config/runtime-config-keys.js.map +1 -1
  43. package/dist/config/tracker-section.d.ts +39 -0
  44. package/dist/config/tracker-section.d.ts.map +1 -0
  45. package/dist/config/tracker-section.js +31 -0
  46. package/dist/config/tracker-section.js.map +1 -0
  47. package/dist/environment/process-groups.d.ts +5 -0
  48. package/dist/environment/process-groups.d.ts.map +1 -1
  49. package/dist/environment/process-groups.js +19 -0
  50. package/dist/environment/process-groups.js.map +1 -1
  51. package/dist/events/queue-traits.d.ts +1 -1
  52. package/dist/events/queue-traits.d.ts.map +1 -1
  53. package/dist/events/queue-traits.js +5 -1
  54. package/dist/events/queue-traits.js.map +1 -1
  55. package/dist/filing/redact.d.ts +1 -0
  56. package/dist/filing/redact.d.ts.map +1 -1
  57. package/dist/filing/redact.js +1 -1
  58. package/dist/filing/redact.js.map +1 -1
  59. package/dist/harness/opencode-version.d.ts +2 -2
  60. package/dist/harness/opencode-version.d.ts.map +1 -1
  61. package/dist/harness/opencode-version.js +3 -3
  62. package/dist/harness/opencode-version.js.map +1 -1
  63. package/dist/internal.d.ts +11 -1
  64. package/dist/internal.d.ts.map +1 -1
  65. package/dist/internal.js +11 -0
  66. package/dist/internal.js.map +1 -1
  67. package/dist/phases/check-evidence.d.ts.map +1 -1
  68. package/dist/phases/check-evidence.js +5 -1
  69. package/dist/phases/check-evidence.js.map +1 -1
  70. package/dist/phases/ship-approval.d.ts +17 -0
  71. package/dist/phases/ship-approval.d.ts.map +1 -0
  72. package/dist/phases/ship-approval.js +21 -0
  73. package/dist/phases/ship-approval.js.map +1 -0
  74. package/dist/phases/ship-branch-push.d.ts +17 -0
  75. package/dist/phases/ship-branch-push.d.ts.map +1 -0
  76. package/dist/phases/ship-branch-push.js +77 -0
  77. package/dist/phases/ship-branch-push.js.map +1 -0
  78. package/dist/phases/ship-ci-watch.d.ts +25 -0
  79. package/dist/phases/ship-ci-watch.d.ts.map +1 -0
  80. package/dist/phases/ship-ci-watch.js +53 -0
  81. package/dist/phases/ship-ci-watch.js.map +1 -0
  82. package/dist/phases/ship-evidence-comment.d.ts +12 -0
  83. package/dist/phases/ship-evidence-comment.d.ts.map +1 -0
  84. package/dist/phases/ship-evidence-comment.js +30 -0
  85. package/dist/phases/ship-evidence-comment.js.map +1 -0
  86. package/dist/phases/ship-existing-pr.d.ts +11 -0
  87. package/dist/phases/ship-existing-pr.d.ts.map +1 -0
  88. package/dist/phases/ship-existing-pr.js +36 -0
  89. package/dist/phases/ship-existing-pr.js.map +1 -0
  90. package/dist/phases/ship-finish.d.ts +15 -0
  91. package/dist/phases/ship-finish.d.ts.map +1 -0
  92. package/dist/phases/ship-finish.js +69 -0
  93. package/dist/phases/ship-finish.js.map +1 -0
  94. package/dist/phases/ship-git-detail.d.ts +31 -0
  95. package/dist/phases/ship-git-detail.d.ts.map +1 -0
  96. package/dist/phases/ship-git-detail.js +71 -0
  97. package/dist/phases/ship-git-detail.js.map +1 -0
  98. package/dist/phases/ship-git-remote.d.ts +51 -0
  99. package/dist/phases/ship-git-remote.d.ts.map +1 -0
  100. package/dist/phases/ship-git-remote.js +70 -0
  101. package/dist/phases/ship-git-remote.js.map +1 -0
  102. package/dist/phases/ship-git.d.ts +4 -79
  103. package/dist/phases/ship-git.d.ts.map +1 -1
  104. package/dist/phases/ship-git.js +2 -135
  105. package/dist/phases/ship-git.js.map +1 -1
  106. package/dist/phases/ship-open-pr.d.ts +19 -0
  107. package/dist/phases/ship-open-pr.d.ts.map +1 -0
  108. package/dist/phases/ship-open-pr.js +71 -0
  109. package/dist/phases/ship-open-pr.js.map +1 -0
  110. package/dist/phases/ship-options.d.ts +76 -0
  111. package/dist/phases/ship-options.d.ts.map +1 -0
  112. package/dist/phases/ship-options.js +4 -0
  113. package/dist/phases/ship-options.js.map +1 -0
  114. package/dist/phases/ship-pr-lookup.d.ts +8 -0
  115. package/dist/phases/ship-pr-lookup.d.ts.map +1 -0
  116. package/dist/phases/ship-pr-lookup.js +41 -0
  117. package/dist/phases/ship-pr-lookup.js.map +1 -0
  118. package/dist/phases/ship-recovery.d.ts +16 -0
  119. package/dist/phases/ship-recovery.d.ts.map +1 -0
  120. package/dist/phases/ship-recovery.js +81 -0
  121. package/dist/phases/ship-recovery.js.map +1 -0
  122. package/dist/phases/ship-reentry.d.ts +20 -0
  123. package/dist/phases/ship-reentry.d.ts.map +1 -0
  124. package/dist/phases/ship-reentry.js +47 -0
  125. package/dist/phases/ship-reentry.js.map +1 -0
  126. package/dist/phases/ship-types.d.ts +36 -0
  127. package/dist/phases/ship-types.d.ts.map +1 -0
  128. package/dist/phases/ship-types.js +2 -0
  129. package/dist/phases/ship-types.js.map +1 -0
  130. package/dist/phases/ship.d.ts +6 -113
  131. package/dist/phases/ship.d.ts.map +1 -1
  132. package/dist/phases/ship.js +55 -458
  133. package/dist/phases/ship.js.map +1 -1
  134. package/dist/queue/comment-rework-trigger.d.ts +24 -0
  135. package/dist/queue/comment-rework-trigger.d.ts.map +1 -0
  136. package/dist/queue/comment-rework-trigger.js +128 -0
  137. package/dist/queue/comment-rework-trigger.js.map +1 -0
  138. package/dist/queue/internal-exports.d.ts +2 -0
  139. package/dist/queue/internal-exports.d.ts.map +1 -1
  140. package/dist/queue/internal-exports.js +1 -0
  141. package/dist/queue/internal-exports.js.map +1 -1
  142. package/dist/queue/lane-discovery-interval.d.ts +6 -0
  143. package/dist/queue/lane-discovery-interval.d.ts.map +1 -0
  144. package/dist/queue/lane-discovery-interval.js +9 -0
  145. package/dist/queue/lane-discovery-interval.js.map +1 -0
  146. package/dist/queue/linear-queue-backend.d.ts +17 -0
  147. package/dist/queue/linear-queue-backend.d.ts.map +1 -0
  148. package/dist/queue/linear-queue-backend.js +42 -0
  149. package/dist/queue/linear-queue-backend.js.map +1 -0
  150. package/dist/queue/linear-queue-lifecycle.d.ts +62 -0
  151. package/dist/queue/linear-queue-lifecycle.d.ts.map +1 -0
  152. package/dist/queue/linear-queue-lifecycle.js +139 -0
  153. package/dist/queue/linear-queue-lifecycle.js.map +1 -0
  154. package/dist/queue/linear-queue.d.ts +51 -0
  155. package/dist/queue/linear-queue.d.ts.map +1 -0
  156. package/dist/queue/linear-queue.js +335 -0
  157. package/dist/queue/linear-queue.js.map +1 -0
  158. package/dist/queue/queue-backend.d.ts +11 -5
  159. package/dist/queue/queue-backend.d.ts.map +1 -1
  160. package/dist/queue/queue-backend.js +8 -3
  161. package/dist/queue/queue-backend.js.map +1 -1
  162. package/dist/queue/review-rework-trigger.d.ts +7 -2
  163. package/dist/queue/review-rework-trigger.d.ts.map +1 -1
  164. package/dist/queue/review-rework-trigger.js +12 -8
  165. package/dist/queue/review-rework-trigger.js.map +1 -1
  166. package/dist/reports/pr-body.d.ts.map +1 -1
  167. package/dist/reports/pr-body.js +18 -8
  168. package/dist/reports/pr-body.js.map +1 -1
  169. package/dist/run/ports.d.ts +10 -0
  170. package/dist/run/ports.d.ts.map +1 -1
  171. package/dist/run/ports.js +12 -0
  172. package/dist/run/ports.js.map +1 -1
  173. package/dist/run/pr-run-state.d.ts +99 -0
  174. package/dist/run/pr-run-state.d.ts.map +1 -0
  175. package/dist/run/pr-run-state.js +235 -0
  176. package/dist/run/pr-run-state.js.map +1 -0
  177. package/dist/run/review-rework-cap.d.ts +3 -1
  178. package/dist/run/review-rework-cap.d.ts.map +1 -1
  179. package/dist/run/review-rework-cap.js +2 -1
  180. package/dist/run/review-rework-cap.js.map +1 -1
  181. package/dist/run/review-rework.d.ts +10 -0
  182. package/dist/run/review-rework.d.ts.map +1 -1
  183. package/dist/run/review-rework.js +45 -15
  184. package/dist/run/review-rework.js.map +1 -1
  185. package/dist/run/state.d.ts +6 -4
  186. package/dist/run/state.d.ts.map +1 -1
  187. package/dist/run/state.js +8 -5
  188. package/dist/run/state.js.map +1 -1
  189. package/dist/utils/command-runner.d.ts.map +1 -1
  190. package/dist/utils/command-runner.js +4 -1
  191. package/dist/utils/command-runner.js.map +1 -1
  192. package/dist/utils/exec.d.ts.map +1 -1
  193. package/dist/utils/exec.js +4 -1
  194. package/dist/utils/exec.js.map +1 -1
  195. package/dist/utils/in-place.d.ts +24 -0
  196. package/dist/utils/in-place.d.ts.map +1 -0
  197. package/dist/utils/in-place.js +105 -0
  198. package/dist/utils/in-place.js.map +1 -0
  199. package/dist/work/index.d.ts +2 -2
  200. package/dist/work/index.d.ts.map +1 -1
  201. package/dist/work/index.js +4 -2
  202. package/dist/work/index.js.map +1 -1
  203. package/dist/work/linear-client.d.ts +21 -0
  204. package/dist/work/linear-client.d.ts.map +1 -0
  205. package/dist/work/linear-client.js +69 -0
  206. package/dist/work/linear-client.js.map +1 -0
  207. package/dist/work/linear-issue.d.ts +11 -0
  208. package/dist/work/linear-issue.d.ts.map +1 -0
  209. package/dist/work/linear-issue.js +69 -0
  210. package/dist/work/linear-issue.js.map +1 -0
  211. package/dist/work/linear-preflight.d.ts +21 -0
  212. package/dist/work/linear-preflight.d.ts.map +1 -0
  213. package/dist/work/linear-preflight.js +67 -0
  214. package/dist/work/linear-preflight.js.map +1 -0
  215. package/package.json +5 -5
@@ -1,25 +1,20 @@
1
1
  // src/phases/ship.ts — SHIP phase: create/verify PR, mark ready for review
2
- import { issueNumberOf } from '../work/work-key.js';
3
2
  import { exec as execCb } from 'node:child_process';
4
3
  import { promisify } from 'node:util';
5
4
  import { withLifecycle } from '../bus/index.js';
6
- import { gatherEvidencePack } from '../reports/evidence-pack.js';
7
- import { briefSummaryLine, renderPrBody, stripBriefIds } from '../reports/pr-body.js';
8
- import { computeDiffStat } from './ship-diff-stat.js';
9
- import { lazyWalkthrough } from './ship-walkthrough.js';
10
- import { renderStackOrderLine } from './stack-order.js';
11
- import { checkRemoteIsAncestor, describePushFailure, pushAndVerifyRemoteHead, readRemoteBranchSha, shortDetail, verifyRemoteHead, } from './ship-git.js';
12
- import { publishPreviewReceipt } from '../checkers/preview-receipt.js';
13
- import { previewFailureReason, runPreviewGate } from './ship-preview.js';
14
- import { commitLeftoverBuildOutput } from './ship-leftover.js';
15
- import { markPrReadyWithRetry } from './ship-ready.js';
16
- import { readRisk, readSpecBody } from './ship-spec.js';
17
- import { collectCiFailureEvidence } from '../utils/ci-evidence.js';
18
- import { DEFAULT_CI_DEADLINE_MS, watchChecksWithInfraRerun } from '../utils/ci-watch.js';
19
- import { shellEscape } from '../utils/index.js';
20
5
  import { GITHUB_ISSUE_SOURCE } from '../work/github-issue.js';
21
- /** Ship opens PRs against, and watches required checks of, this branch. */
22
- const SHIP_BASE_BRANCH = 'main';
6
+ import { requestShipApproval } from './ship-approval.js';
7
+ import { pushNewBranch } from './ship-branch-push.js';
8
+ import { watchShipCi } from './ship-ci-watch.js';
9
+ import { syncExistingPr } from './ship-existing-pr.js';
10
+ import { postEvidenceComment } from './ship-evidence-comment.js';
11
+ import { finishShip } from './ship-finish.js';
12
+ import { openOrFindPr } from './ship-open-pr.js';
13
+ import { SHIP_BASE_BRANCH } from './ship-options.js';
14
+ import { findMergedPR, findOpenPR } from './ship-pr-lookup.js';
15
+ import { pushReentry } from './ship-reentry.js';
16
+ import { lazyWalkthrough } from './ship-walkthrough.js';
17
+ export { findMergedPR, findOpenPR };
23
18
  const exec = promisify(execCb);
24
19
  export async function shipPhase(opts) {
25
20
  return withLifecycle({
@@ -41,19 +36,9 @@ async function shipPhaseImpl(opts) {
41
36
  const base = stack?.base ?? opts.baseBranch ?? SHIP_BASE_BRANCH;
42
37
  const walkthrough = lazyWalkthrough(run, worktree, { ...opts, base }, log);
43
38
  if (approvalGate) {
44
- // Log a 'ship'-typed event before anything else so the TUI's activePhase
45
- // advances to SHIP first — otherwise a denial reports failedPhase as
46
- // whichever phase (CHECK/BUILD) last logged, which is misleading.
47
- log('ship', `Starting ship phase for ${branch}`);
48
- const diffStat = await computeDiffStat(run, worktree, base);
49
- log('approval_requested', `awaiting approval to ship ${branch}${checkSummary ? ` (checks: ${checkSummary.passes} pass, ${checkSummary.failures} fail, ${checkSummary.skips} skip)` : ''}`);
50
- const response = await approvalGate({ issue: issueNumberOf(issue), branch, worktree, diffStat, checkSummary });
51
- if (!response.approved) {
52
- const reason = response.reason ?? 'denied';
53
- log('ship_denied', `ship denied for ${branch}: ${reason}`);
54
- return { ok: false, denied: true, deniedReason: reason };
55
- }
56
- log('approval_granted', `approval granted for ${branch}`);
39
+ const denied = await requestShipApproval({ approvalGate, issue, branch, worktree, base, run, checkSummary, log });
40
+ if (denied)
41
+ return denied;
57
42
  }
58
43
  // Check if a PR already exists (claude route may have created one)
59
44
  const openLookup = await findOpenPR(octokit, owner, repoName, branch);
@@ -67,248 +52,34 @@ async function shipPhaseImpl(opts) {
67
52
  let watchRef = branch;
68
53
  let headSha;
69
54
  if (reentry) {
70
- if (prNumber !== reentry.prNumber) {
71
- const reason = `re-entry expected open PR #${reentry.prNumber} for ${branch} but found ${prNumber === undefined ? 'none' : `#${prNumber}`}`;
72
- log('ship', reason);
73
- return { ok: false, reason };
74
- }
75
- let localSha;
76
- try {
77
- localSha = (await run('git rev-parse HEAD', { cwd: worktree })).stdout.trim();
78
- }
79
- catch (err) {
80
- const reason = `could not read local HEAD on re-entry (${shortDetail(err)})`;
81
- log('ship', reason);
82
- return { ok: false, prNumber, reason };
83
- }
84
- if (localSha && localSha === reentry.previousHeadSha) {
85
- const reason = `CI rework produced no new commit on ${branch}`;
86
- log('ship', reason);
87
- return { ok: false, prNumber, ciOutcome: 'failure', reason, headSha: localSha };
88
- }
89
- try {
90
- await run(`git push origin ${shellEscape(branch)}`, { cwd: worktree });
91
- }
92
- catch (err) {
93
- const { kind, detail } = describePushFailure(err);
94
- const reason = `re-entry push of ${branch} failed (${kind}): ${detail}`;
95
- log('ship', reason);
96
- return { ok: false, prNumber, reason };
97
- }
98
- const remoteHead = await verifyRemoteHead(run, worktree, branch);
99
- if (remoteHead.status !== 'match') {
100
- const reason = remoteHead.status === 'mismatch'
101
- ? `remote head ${remoteHead.remoteSha} does not match local HEAD ${remoteHead.localSha} for ${branch} after re-entry push`
102
- : `could not verify the remote head for ${branch} after re-entry push (${remoteHead.detail})`;
103
- log('ship', reason);
104
- return { ok: false, prNumber, reason };
105
- }
106
- watchRef = remoteHead.remoteSha;
107
- headSha = remoteHead.remoteSha;
108
- log('ship', `re-entry pushed ${branch} @ ${headSha}`);
55
+ const pushed = await pushReentry({ run, worktree, branch, prNumber, reentry, log });
56
+ if ('stop' in pushed)
57
+ return pushed.stop;
58
+ ({ watchRef, headSha } = pushed);
109
59
  }
110
60
  else if (prNumber) {
111
- // Rework commits made after BUILD's push must reach the open PR before evidence or ready (#1813).
112
- const current = await verifyRemoteHead(run, worktree, branch);
113
- if (current.status === 'match') {
114
- log('ship', `remote head ${current.remoteSha} matches local HEAD ${current.localSha} for ${branch} — already in sync, not pushing`);
115
- }
116
- else {
117
- if (current.status === 'mismatch') {
118
- const ancestry = await checkRemoteIsAncestor(run, worktree, current.remoteSha, current.localSha);
119
- if (ancestry.status !== 'ancestor') {
120
- const reason = ancestry.status === 'diverged'
121
- ? `origin/${branch} @ ${current.remoteSha} has diverged from local HEAD ${current.localSha} (remote has commits local HEAD lacks) on open PR #${prNumber} — not force-pushing`
122
- : `could not confirm origin/${branch} @ ${current.remoteSha} is an ancestor of local HEAD ${current.localSha} on open PR #${prNumber} (${ancestry.detail})`;
123
- log('ship', `${reason} — aborting before evidence`);
124
- return { ok: false, prNumber, reason };
125
- }
126
- }
127
- const pushed = await pushAndVerifyRemoteHead(run, worktree, branch, `git push -u origin ${shellEscape(branch)}`);
128
- if (pushed.status !== 'pushed') {
129
- const reason = pushed.status === 'push-failed'
130
- ? `push of ${branch} to open PR #${prNumber} failed (${pushed.kind}): ${pushed.detail}`
131
- : pushed.status === 'mismatch'
132
- ? `remote head ${pushed.remoteSha} does not match local HEAD ${pushed.localSha} for ${branch} after push to open PR #${prNumber}`
133
- : `could not verify the remote head for ${branch} after push to open PR #${prNumber} (${pushed.detail})`;
134
- log('ship', `${reason} — aborting before evidence`);
135
- return { ok: false, prNumber, reason };
136
- }
137
- log('ship', `remote head ${pushed.remoteSha} matches local HEAD ${pushed.localSha} for ${branch}`);
138
- }
61
+ const stop = await syncExistingPr({ run, worktree, branch, prNumber, log });
62
+ if (stop)
63
+ return stop;
139
64
  }
140
65
  if (!prNumber) {
141
- // Recovery decisions must compare against the *current* remote — a stale
142
- // remote-tracking ref makes already-delivered work look like recovery work (#520).
143
- try {
144
- await run('git fetch origin main', { cwd: worktree });
145
- }
146
- catch {
147
- log('ship', 'git fetch origin main failed — recovery may compare against a stale origin/main');
148
- }
149
- let recoveryState = await inspectRecoveryState(worktree, run);
150
- if (!recoveryState.clean) {
151
- const conflicts = conflictedPaths(recoveryState.statusLines);
152
- if (conflicts.length > 0) {
153
- // Committing an unmerged index would put conflict markers on the PR branch —
154
- // park with the concrete paths and leave the worktree for a human (#1172).
155
- const listed = conflicts.slice(0, 5).join(', ') + (conflicts.length > 5 ? ` (+${conflicts.length - 5} more)` : '');
156
- const reason = `worktree has merge conflicts in ${listed}`;
157
- log('ship', `not recovering ${branch}: ${reason} — worktree preserved`);
158
- return { ok: false, reason };
159
- }
160
- // CHECK verified this exact working tree, so the dirt IS the green artifact —
161
- // commit it and ship rather than parking verified work (#1164/#1172).
162
- const committed = await commitLeftoverBuildOutput({
163
- run,
164
- worktree,
165
- branch,
166
- issue: inlineWork ? undefined : issue,
167
- statusLines: recoveryState.statusLines,
168
- log,
169
- });
170
- if (!committed.ok) {
171
- log('ship', `not recovering ${branch}: ${committed.reason} — worktree preserved`);
172
- return { ok: false, reason: committed.reason };
173
- }
174
- recoveryState = await inspectRecoveryState(worktree, run);
175
- if (!recoveryState.clean) {
176
- const reason = 'worktree still dirty after committing leftover build output';
177
- log('ship', `not recovering ${branch}: ${reason} — worktree preserved`);
178
- return { ok: false, reason };
179
- }
180
- }
181
- if (recoveryState.landed || !recoveryState.ahead) {
182
- // The branch's content is already on main: identical trees (squash merge) or an
183
- // empty ahead-count (merge commit / fast-forward). That is delivery, not recovery.
184
- const mergedLookup = await findMergedPR(octokit, owner, repoName, branch);
185
- if (mergedLookup.status === 'error' && !recoveryState.landed) {
186
- const reason = `could not determine whether ${branch} was already merged (${mergedLookup.detail})`;
187
- log('ship', `not recovering ${branch}: ${reason}`);
188
- return { ok: false, reason };
189
- }
190
- const mergedPr = mergedLookup.status === 'found' ? mergedLookup.prNumber : undefined;
191
- if (mergedPr !== undefined || recoveryState.landed) {
192
- log('ship', `not recovering ${branch}: already delivered${mergedPr !== undefined ? ` by merged PR #${mergedPr}` : ' (HEAD tree matches origin/main)'}`);
193
- return { ok: true, prNumber: mergedPr, alreadyDelivered: true };
194
- }
195
- const reason = 'no commits ahead of origin/main';
196
- log('ship', `not recovering ${branch}: ${reason}`);
197
- return { ok: false, reason };
198
- }
199
- // Push branch. A rejected push means the remote head does not contain this run's
200
- // commits — opening a PR against it would advertise work that is not there, so the
201
- // ship fails closed here rather than continuing to PR creation (#734).
202
- let pushCmd = `git push -u origin ${shellEscape(branch)}`;
203
- const recorded = opts.recordedRemoteSha;
204
- let leased = false;
205
- if (recorded) {
206
- // A retry rebuilds the branch from origin/main, so an earlier run's push is stale. Replace it
207
- // only while the remote is still exactly what was recorded at worktree creation (#1869).
208
- const current = await readRemoteBranchSha(run, worktree, branch);
209
- if (current.status === 'unreadable') {
210
- const reason = `could not read origin/${branch} to check recorded SHA ${recorded} (${current.detail})`;
211
- log('ship', `${reason} — aborting before push`);
212
- return { ok: false, reason };
213
- }
214
- if (current.sha === null) {
215
- log('ship', `origin/${branch} recorded @ ${recorded} no longer exists — nothing to replace, plain push`);
216
- }
217
- else if (current.sha !== recorded) {
218
- const reason = `origin/${branch} moved since it was recorded: recorded ${recorded}, current ${current.sha}`;
219
- log('ship', `${reason} — aborting before push`);
220
- return { ok: false, reason };
221
- }
222
- else {
223
- pushCmd = `git push ${shellEscape(`--force-with-lease=${branch}:${recorded}`)} -u origin ${shellEscape(branch)}`;
224
- leased = true;
225
- log('ship', `replacing stale origin/${branch} @ ${recorded} with a leased push`);
226
- }
227
- }
228
- // A zero-exit push is not proof the remote branch actually carries this run's commits — a
229
- // concurrent push or an update that silently applied nothing leaves the remote head elsewhere,
230
- // and a PR opened against it advertises work that is not there (#735). Fail closed, like the
231
- // push-failure abort (#734).
232
- const pushed = await pushAndVerifyRemoteHead(run, worktree, branch, pushCmd);
233
- if (pushed.status === 'push-failed') {
234
- const pushReason = `git push failed (${pushed.kind}): ${pushed.detail}`;
235
- log('ship', `${pushReason} — aborting before PR creation`);
236
- if (leased) {
237
- return {
238
- ok: false,
239
- reason: `leased push of ${branch} over recorded ${recorded} was rejected (${pushed.kind})`,
240
- };
241
- }
242
- return { ok: false, reason: pushReason };
243
- }
244
- if (pushed.status === 'mismatch') {
245
- const reason = `remote head ${pushed.remoteSha} does not match local HEAD ${pushed.localSha} for ${branch}`;
246
- log('ship', `${reason} — aborting before PR creation`);
247
- return { ok: false, reason };
248
- }
249
- if (pushed.status === 'unreadable') {
250
- const reason = `could not verify the remote head for ${branch} (${pushed.detail}); local HEAD ${pushed.localSha ?? 'unknown'}`;
251
- log('ship', `${reason} — aborting before PR creation`);
252
- return { ok: false, reason };
253
- }
254
- log('ship', `remote head ${pushed.remoteSha} matches local HEAD ${pushed.localSha} for ${branch}`);
255
- // Get title from issue (skipped for a non-github work source — no such issue exists)
256
- const title = inlineWork
257
- ? inlineWork.title
258
- : (await octokit.rest.issues.get({ owner, repo: repoName, issue_number: issueNumberOf(issue) })).data.title;
259
- const slice = inlineWork ? undefined : opts.slice;
260
- const finalSlice = !slice || slice.index >= slice.count;
261
- // A brief is a local file reviewers cannot open, so the body describes it by its title and links the
262
- // open PR it builds on (a --stack or --base-branch base), never its id, digest or path.
263
- const basePr = inlineWork && base !== SHIP_BASE_BRANCH ? await findOpenPR(octokit, owner, repoName, base) : undefined;
264
- const summaryLine = inlineWork
265
- ? briefSummaryLine(title, basePr?.status === 'found' ? basePr.prNumber : undefined)
266
- : slice
267
- ? `Implements slice ${slice.index}/${slice.count} of #${issue}.`
268
- : `Implements #${issue}.`;
269
- const prTitle = inlineWork
270
- ? stripBriefIds(title)
271
- : slice
272
- ? `${title} — slice ${slice.index}/${slice.count} (#${issue})`
273
- : `${title} (#${issue})`;
274
- // Create PR
275
- try {
276
- const { data: pr } = await octokit.rest.pulls.create({
277
- owner,
278
- repo: repoName,
279
- head: branch,
280
- base,
281
- title: prTitle,
282
- draft: true,
283
- body: renderPrBody({
284
- summaryLine,
285
- footer: opts.footer,
286
- stackOrder: stack ? renderStackOrderLine(stack) : undefined,
287
- specBody: await readSpecBody(opts.specPath),
288
- checkSummary,
289
- reworkRounds: opts.reworkRounds,
290
- risk: await readRisk(opts.specPath),
291
- walkthrough: await walkthrough.walkthrough(),
292
- typescriptLines: await walkthrough.counts(),
293
- closes: inlineWork || !finalSlice ? undefined : issue,
294
- partOf: !inlineWork && !finalSlice ? issue : undefined,
295
- }),
296
- });
297
- prNumber = pr.number;
298
- log('pr_opened', `opened PR #${prNumber} for committed work on ${branch} (base ${base})`);
299
- }
300
- catch (err) {
301
- if (!isPullAlreadyExistsError(err))
302
- throw err;
303
- const existing = await findOpenPR(octokit, owner, repoName, branch);
304
- if (existing.status !== 'found') {
305
- const reason = `pulls.create reported an existing PR for ${branch} but re-querying did not find it (${existing.status === 'error' ? existing.detail : 'no open PR listed'})`;
306
- log('ship', `${reason} — aborting`);
307
- return { ok: false, reason };
308
- }
309
- prNumber = existing.prNumber;
310
- log('recovered', `PR #${prNumber} already existed for ${branch}; reusing it`);
311
- }
66
+ const stop = await pushNewBranch({
67
+ run,
68
+ worktree,
69
+ branch,
70
+ issue: inlineWork ? undefined : issue,
71
+ octokit,
72
+ owner,
73
+ repoName,
74
+ recordedRemoteSha: opts.recordedRemoteSha,
75
+ log,
76
+ });
77
+ if (stop)
78
+ return stop;
79
+ const opened = await openOrFindPr({ opts, inlineWork, stack, base, owner, repoName, walkthrough });
80
+ if ('stop' in opened)
81
+ return opened.stop;
82
+ prNumber = opened.prNumber;
312
83
  }
313
84
  if (!prNumber) {
314
85
  const reason = `Could not create or find PR for ${branch}`;
@@ -316,202 +87,28 @@ async function shipPhaseImpl(opts) {
316
87
  return { ok: false, reason };
317
88
  }
318
89
  if (!reentry && opts.evidenceComment)
319
- try {
320
- let checkedSha;
321
- try {
322
- checkedSha = (await run('git rev-parse HEAD', { cwd: worktree })).stdout.trim() || undefined;
323
- }
324
- catch { }
325
- const body = gatherEvidencePack({
326
- issue,
327
- checkSummary,
328
- reworkRounds: opts.reworkRounds,
329
- specPath: opts.specPath,
330
- eventsFile: opts.eventsFile,
331
- startedAt: opts.startedAt,
332
- logsDir: opts.logsDir,
333
- reviewRouting: opts.reviewRouting,
334
- pinNotes: opts.pinNotes,
335
- headSha: checkedSha,
336
- walkthrough: await walkthrough.walkthrough(),
337
- });
338
- await octokit.rest.issues.createComment({ owner, repo: repoName, issue_number: prNumber, body });
339
- log('evidence', `posted evidence pack to PR #${prNumber}`);
340
- }
341
- catch { }
90
+ await postEvidenceComment({ opts, run, owner, repoName, prNumber, walkthrough });
342
91
  let ciOutcome;
343
92
  let ciWatchError;
344
- const ciDeadlineMs = opts.ciDeadlineMs ?? DEFAULT_CI_DEADLINE_MS;
345
93
  if (watchCI) {
346
- log('ship', `Watching CI for PR #${prNumber}`);
347
- try {
348
- ciOutcome = await (opts.ciWatch ?? watchChecksWithInfraRerun)({
349
- octokit,
350
- owner,
351
- repo: repoName,
352
- ref: watchRef,
353
- rerun,
354
- deadlineMs: ciDeadlineMs,
355
- probeNoCi: true,
356
- requiredChecks: { branch: SHIP_BASE_BRANCH },
357
- onProgress: ({ total, completed, pending, remainingMs, waitingFor }) => log('ship', waitingFor?.length
358
- ? `CI for PR #${prNumber}: waiting for required check${waitingFor.length > 1 ? 's' : ''} ${waitingFor.map((w) => `${w.name} (${w.state})`).join(', ')}, ${Math.ceil(remainingMs / 60_000)} min left`
359
- : `CI for PR #${prNumber}: ${pending} pending, ${completed}/${total} completed, ${Math.ceil(remainingMs / 60_000)} min left before the CI timeout`),
360
- onNoChecks: ({ sha, defaultBranch }) => log('ship', `no CI configured on ${repo} (no workflow files on ${sha} and no checks or statuses on recent ${defaultBranch} commits); skipping CI wait`),
361
- onRescued: ({ headSha, runIds }) => log('ci-rescued', `CI rescued for PR #${prNumber}: reran infra-failed run(s) ${runIds.join(', ')} on ${headSha.slice(0, 12)} once and the re-watch is green`),
362
- onRescueFailed: ({ headSha, runIds, outcome }) => log('ci-rescue-failed', `CI rescue failed for PR #${prNumber}: reran infra-failed run(s) ${runIds.join(', ')} on ${headSha.slice(0, 12)} once and the re-watch ended ${outcome}`),
363
- });
364
- if (ciOutcome === 'success')
365
- log('ship', `CI green for PR #${prNumber}`);
366
- else if (ciOutcome === 'failure') {
367
- const reason = `CI failed for PR #${prNumber}`;
368
- log('ship', reason);
369
- const ciFailure = await collectCiFailureEvidence({ octokit, owner, repo: repoName, ref: watchRef, prNumber });
370
- return { ok: false, prNumber, reason, ciOutcome, ciFailure, ...(headSha ? { headSha } : {}) };
371
- }
372
- else if (ciOutcome === 'infra-failure') {
373
- const reason = `CI failed again for infrastructure reasons for PR #${prNumber} after one rerun`;
374
- log('ship', reason);
375
- return { ok: false, prNumber, reason, ciOutcome };
376
- }
377
- else if (ciOutcome === 'timeout') {
378
- // Log type must stay 'ship': 'timeout' is a terminal event kind in the CLI.
379
- log('ship', `CI pending for PR #${prNumber}: CI did not finish within ${ciDeadlineMs / 60_000} min; leaving PR as draft`);
380
- }
381
- }
382
- catch (err) {
383
- ciWatchError = shortDetail(err);
384
- log('warn', `CI watch for PR #${prNumber} failed: ${ciWatchError}; treating CI as pending`);
385
- }
386
- }
387
- const ciPending = ciOutcome === 'timeout' || ciWatchError !== undefined;
388
- let previewCheck;
389
- if (opts.previewGate) {
390
- const sha = headSha ?? (await run('git rev-parse HEAD', { cwd: worktree })).stdout.trim();
391
- const publish = (n, r) => publishPreviewReceipt(octokit, owner, repoName, n, r);
392
- const gateCtx = { log, ciPending, publish, ...(opts.logsDir ? { logsDir: opts.logsDir } : {}) };
393
- previewCheck = await runPreviewGate(opts.previewGate, { prNumber, headSha: sha }, gateCtx);
394
- if (previewCheck.status !== 'pass') {
395
- return {
396
- ok: false,
397
- prNumber,
398
- reason: previewFailureReason(prNumber, previewCheck),
399
- previewCheck,
400
- headSha: sha,
401
- ...(ciOutcome ? { ciOutcome } : {}),
402
- ...(ciPending ? { ciPending: true, draft: true } : {}),
403
- };
404
- }
405
- }
406
- if (ciWatchError !== undefined) {
407
- const reason = `CI unknown for PR #${prNumber}: the CI watch failed (${ciWatchError}); leaving PR as draft`;
408
- log('ship', reason);
409
- return { ok: false, prNumber, reason, ciPending: true, draft: true, ...(headSha ? { headSha } : {}) };
410
- }
411
- // Mark ready for review (if draft). REST pulls.update ignores `draft`;
412
- // undrafting requires the markPullRequestReadyForReview GraphQL mutation.
413
- if (opts.draft || ciPending) {
414
- try {
415
- const { data: pr } = await octokit.rest.pulls.get({ owner, repo: repoName, pull_number: prNumber });
416
- if (!pr.draft)
417
- log('ship', `PR #${prNumber} is already open and not a draft; draft mode leaves it as is`);
418
- }
419
- catch { }
420
- }
421
- else {
422
- const flip = await markPrReadyWithRetry(octokit, owner, repoName, prNumber);
423
- if (!flip.ok) {
424
- const reason = `could not mark PR #${prNumber} ready for review after one retry: ${flip.detail}`;
425
- log('warn', reason);
426
- return {
427
- ok: false,
428
- prNumber,
429
- reason,
430
- ...(ciOutcome === undefined ? {} : { ciOutcome }),
431
- ...(headSha ? { headSha } : {}),
432
- };
433
- }
434
- }
435
- const noChecks = ciOutcome === 'no-checks' ? ' (CI skipped: no checks found)' : '';
436
- const readyLabel = opts.draft || ciPending ? `left as draft${ciPending ? ' (CI pending)' : ''}` : 'ready for review';
437
- log('ready', `PR #${prNumber} ${readyLabel}${noChecks}`);
438
- return {
439
- ok: true,
440
- prNumber,
441
- ...(ciOutcome === undefined ? {} : { ciOutcome }),
442
- ...(headSha ? { headSha } : {}),
443
- ...(opts.draft || ciPending ? { draft: true } : {}),
444
- ...(ciPending ? { ciPending: true } : {}),
445
- ...(previewCheck ? { previewCheck } : {}),
446
- };
447
- }
448
- export async function findOpenPR(octokit, owner, repo, branch) {
449
- try {
450
- const { data: prs } = await octokit.rest.pulls.list({
94
+ const ci = await watchShipCi({
95
+ octokit,
451
96
  owner,
452
97
  repo,
453
- state: 'open',
454
- head: `${owner}:${branch}`,
98
+ repoName,
99
+ prNumber,
100
+ watchRef,
101
+ headSha,
102
+ rerun,
103
+ deadlineMs: opts.ciDeadlineMs,
104
+ baseBranch: SHIP_BASE_BRANCH,
105
+ ciWatch: opts.ciWatch,
106
+ log,
455
107
  });
456
- const prNumber = prs[0]?.number;
457
- return prNumber === undefined ? { status: 'absent' } : { status: 'found', prNumber };
108
+ if (ci.result)
109
+ return ci.result;
110
+ ({ ciOutcome, ciWatchError } = ci);
458
111
  }
459
- catch (err) {
460
- return { status: 'error', detail: shortDetail(err) };
461
- }
462
- }
463
- export async function findMergedPR(octokit, owner, repo, branch) {
464
- try {
465
- const { data: prs } = await octokit.rest.pulls.list({
466
- owner,
467
- repo,
468
- state: 'closed',
469
- head: `${owner}:${branch}`,
470
- });
471
- const prNumber = prs.find((pr) => pr.merged_at != null)?.number;
472
- return prNumber === undefined ? { status: 'absent' } : { status: 'found', prNumber };
473
- }
474
- catch (err) {
475
- return { status: 'error', detail: shortDetail(err) };
476
- }
477
- }
478
- /** A `pulls.create` 422 whose message says the PR already exists — recoverable by re-querying,
479
- * unlike every other 422 (e.g. "No commits between ..."), which still propagates (#641). */
480
- export function isPullAlreadyExistsError(err) {
481
- const e = err;
482
- if (e?.status !== 422)
483
- return false;
484
- const messages = [e.message ?? '', ...(e.response?.data?.errors ?? []).map((x) => x?.message ?? '')];
485
- return messages.some((m) => /already exists/i.test(m));
486
- }
487
- async function inspectRecoveryState(worktree, run) {
488
- const [{ stdout: status }, { stdout: ahead }, landed] = await Promise.all([
489
- run('git status --porcelain', { cwd: worktree }),
490
- run('git rev-list --count origin/main..HEAD', { cwd: worktree }),
491
- // A squash merge leaves origin/main..HEAD nonzero forever even though the branch's
492
- // tree is byte-identical to main — exit 0 here is the reliable "already landed" signal.
493
- run('git diff --quiet origin/main..HEAD', { cwd: worktree }).then(() => true, () => false),
494
- ]);
495
- return {
496
- clean: status.trim() === '',
497
- ahead: Number.parseInt(ahead.trim(), 10) > 0,
498
- landed,
499
- // Porcelain's first two characters are positional XY columns — trim only the right edge.
500
- statusLines: status
501
- .split('\n')
502
- .map((l) => l.trimEnd())
503
- .filter((l) => l.trim() !== ''),
504
- };
505
- }
506
- /** Paths of porcelain lines that are unmerged (conflict) entries: `U` in either XY column,
507
- * or the both-added/both-deleted codes `AA`/`DD`. Untracked (`??`) and every ordinary code
508
- * are not conflicts. */
509
- function conflictedPaths(statusLines) {
510
- return statusLines
511
- .filter((line) => {
512
- const xy = line.slice(0, 2);
513
- return xy.includes('U') || xy === 'AA' || xy === 'DD';
514
- })
515
- .map((line) => line.slice(3));
112
+ return finishShip({ opts, run, owner, repoName, prNumber, headSha, ciOutcome, ciWatchError });
516
113
  }
517
114
  //# sourceMappingURL=ship.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ship.js","sourceRoot":"","sources":["../../src/phases/ship.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAE3E,OAAO,EAAE,aAAa,EAAgB,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAKtC,OAAO,EAAqB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAA4B,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAsB,MAAM,kBAAkB,CAAC;AAE5E,OAAO,EAEL,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,WAAW,EACX,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAoB,oBAAoB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAA0B,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAG9D,2EAA2E;AAC3E,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AAuB/B,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAyC;IACvE,OAAO,aAAa,CAClB;QACE,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO,EAAE,IAAI,CAAC,KAAK;QACnB,YAAY,EAAE,IAAI,CAAC,QAAQ;QAC3B,GAAG,EAAE,IAAI,CAAC,GAAG;KACd,EACD,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EACzB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EACX,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,EAAE;QACF,CAAC,CAAC,gBAAgB,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,GAAG,EAAE;QAC1E,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAC1G,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,IAmD5B;IACC,MAAM,EACJ,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,OAAO,EACP,OAAO,GAAG,IAAI,EACd,GAAG,EACH,GAAG,GAAG,IAAI,EACV,KAAK,EACL,YAAY,EACZ,YAAY,GACb,GAAG,IAAI,CAAC;IACT,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/F,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IAClD,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,gBAAgB,CAAC;IAChE,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;IAE3E,IAAI,YAAY,EAAE,CAAC;QACjB,yEAAyE;QACzE,qEAAqE;QACrE,kEAAkE;QAClE,GAAG,CAAC,MAAM,EAAE,2BAA2B,MAAM,EAAE,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC5D,GAAG,CACD,oBAAoB,EACpB,6BAA6B,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,aAAa,YAAY,CAAC,MAAM,UAAU,YAAY,CAAC,QAAQ,UAAU,YAAY,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAChK,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;QAC/G,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC;YAC3C,GAAG,CAAC,aAAa,EAAE,mBAAmB,MAAM,KAAK,MAAM,EAAE,CAAC,CAAC;YAC3D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;QAC3D,CAAC;QACD,GAAG,CAAC,kBAAkB,EAAE,wBAAwB,MAAM,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,mEAAmE;IACnE,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACtE,IAAI,UAAU,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,qDAAqD,MAAM,KAAK,UAAU,CAAC,MAAM,GAAG,CAAC;QACpG,GAAG,CAAC,MAAM,EAAE,GAAG,MAAM,gCAAgC,CAAC,CAAC;QACvD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC/B,CAAC;IACD,IAAI,QAAQ,GAAuB,UAAU,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IACnG,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC7B,IAAI,QAAQ,GAAG,MAAM,CAAC;IACtB,IAAI,OAA2B,CAAC;IAEhC,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,QAAQ,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,8BAA8B,OAAO,CAAC,QAAQ,QAAQ,MAAM,cAAc,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,EAAE,CAAC;YAC5I,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACpB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC/B,CAAC;QACD,IAAI,QAAgB,CAAC;QACrB,IAAI,CAAC;YACH,QAAQ,GAAG,CAAC,MAAM,GAAG,CAAC,oBAAoB,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAChF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,0CAA0C,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;YAC7E,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACpB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QACzC,CAAC;QACD,IAAI,QAAQ,IAAI,QAAQ,KAAK,OAAO,CAAC,eAAe,EAAE,CAAC;YACrD,MAAM,MAAM,GAAG,uCAAuC,MAAM,EAAE,CAAC;YAC/D,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACpB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QAClF,CAAC;QACD,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,mBAAmB,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,oBAAoB,MAAM,YAAY,IAAI,MAAM,MAAM,EAAE,CAAC;YACxE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACpB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QACzC,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjE,IAAI,UAAU,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAClC,MAAM,MAAM,GACV,UAAU,CAAC,MAAM,KAAK,UAAU;gBAC9B,CAAC,CAAC,eAAe,UAAU,CAAC,SAAS,8BAA8B,UAAU,CAAC,QAAQ,QAAQ,MAAM,sBAAsB;gBAC1H,CAAC,CAAC,wCAAwC,MAAM,yBAAyB,UAAU,CAAC,MAAM,GAAG,CAAC;YAClG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACpB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QACzC,CAAC;QACD,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC;QAChC,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC;QAC/B,GAAG,CAAC,MAAM,EAAE,mBAAmB,MAAM,MAAM,OAAO,EAAE,CAAC,CAAC;IACxD,CAAC;SAAM,IAAI,QAAQ,EAAE,CAAC;QACpB,kGAAkG;QAClG,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9D,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC/B,GAAG,CACD,MAAM,EACN,eAAe,OAAO,CAAC,SAAS,uBAAuB,OAAO,CAAC,QAAQ,QAAQ,MAAM,iCAAiC,CACvH,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBAClC,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACjG,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;oBACnC,MAAM,MAAM,GACV,QAAQ,CAAC,MAAM,KAAK,UAAU;wBAC5B,CAAC,CAAC,UAAU,MAAM,MAAM,OAAO,CAAC,SAAS,iCAAiC,OAAO,CAAC,QAAQ,sDAAsD,QAAQ,sBAAsB;wBAC9K,CAAC,CAAC,4BAA4B,MAAM,MAAM,OAAO,CAAC,SAAS,iCAAiC,OAAO,CAAC,QAAQ,gBAAgB,QAAQ,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC;oBAChK,GAAG,CAAC,MAAM,EAAE,GAAG,MAAM,6BAA6B,CAAC,CAAC;oBACpD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;gBACzC,CAAC;YACH,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,sBAAsB,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACjH,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,MAAM,MAAM,GACV,MAAM,CAAC,MAAM,KAAK,aAAa;oBAC7B,CAAC,CAAC,WAAW,MAAM,gBAAgB,QAAQ,YAAY,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,MAAM,EAAE;oBACvF,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU;wBAC5B,CAAC,CAAC,eAAe,MAAM,CAAC,SAAS,8BAA8B,MAAM,CAAC,QAAQ,QAAQ,MAAM,2BAA2B,QAAQ,EAAE;wBACjI,CAAC,CAAC,wCAAwC,MAAM,2BAA2B,QAAQ,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC;gBAC/G,GAAG,CAAC,MAAM,EAAE,GAAG,MAAM,6BAA6B,CAAC,CAAC;gBACpD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;YACzC,CAAC;YACD,GAAG,CAAC,MAAM,EAAE,eAAe,MAAM,CAAC,SAAS,uBAAuB,MAAM,CAAC,QAAQ,QAAQ,MAAM,EAAE,CAAC,CAAC;QACrG,CAAC;IACH,CAAC;IAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,yEAAyE;QACzE,mFAAmF;QACnF,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,uBAAuB,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,CAAC,MAAM,EAAE,iFAAiF,CAAC,CAAC;QACjG,CAAC;QAED,IAAI,aAAa,GAAG,MAAM,oBAAoB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC9D,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,eAAe,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YAC7D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,6EAA6E;gBAC7E,2EAA2E;gBAC3E,MAAM,MAAM,GACV,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACtG,MAAM,MAAM,GAAG,mCAAmC,MAAM,EAAE,CAAC;gBAC3D,GAAG,CAAC,MAAM,EAAE,kBAAkB,MAAM,KAAK,MAAM,uBAAuB,CAAC,CAAC;gBACxE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;YAC/B,CAAC;YACD,8EAA8E;YAC9E,sEAAsE;YACtE,MAAM,SAAS,GAAG,MAAM,yBAAyB,CAAC;gBAChD,GAAG;gBACH,QAAQ;gBACR,MAAM;gBACN,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK;gBACrC,WAAW,EAAE,aAAa,CAAC,WAAW;gBACtC,GAAG;aACJ,CAAC,CAAC;YACH,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;gBAClB,GAAG,CAAC,MAAM,EAAE,kBAAkB,MAAM,KAAK,SAAS,CAAC,MAAM,uBAAuB,CAAC,CAAC;gBAClF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC;YACjD,CAAC;YACD,aAAa,GAAG,MAAM,oBAAoB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC1D,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;gBACzB,MAAM,MAAM,GAAG,6DAA6D,CAAC;gBAC7E,GAAG,CAAC,MAAM,EAAE,kBAAkB,MAAM,KAAK,MAAM,uBAAuB,CAAC,CAAC;gBACxE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,IAAI,aAAa,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YACjD,gFAAgF;YAChF,mFAAmF;YACnF,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC1E,IAAI,YAAY,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;gBAC7D,MAAM,MAAM,GAAG,+BAA+B,MAAM,wBAAwB,YAAY,CAAC,MAAM,GAAG,CAAC;gBACnG,GAAG,CAAC,MAAM,EAAE,kBAAkB,MAAM,KAAK,MAAM,EAAE,CAAC,CAAC;gBACnD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;YAC/B,CAAC;YACD,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;YACrF,IAAI,QAAQ,KAAK,SAAS,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;gBACnD,GAAG,CACD,MAAM,EACN,kBAAkB,MAAM,sBAAsB,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAkB,QAAQ,EAAE,CAAC,CAAC,CAAC,kCAAkC,EAAE,CAC3I,CAAC;gBACF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;YAClE,CAAC;YACD,MAAM,MAAM,GAAG,iCAAiC,CAAC;YACjD,GAAG,CAAC,MAAM,EAAE,kBAAkB,MAAM,KAAK,MAAM,EAAE,CAAC,CAAC;YACnD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC/B,CAAC;QAED,iFAAiF;QACjF,mFAAmF;QACnF,uEAAuE;QACvE,IAAI,OAAO,GAAG,sBAAsB,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACxC,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,QAAQ,EAAE,CAAC;YACb,8FAA8F;YAC9F,yFAAyF;YACzF,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YACjE,IAAI,OAAO,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;gBACpC,MAAM,MAAM,GAAG,yBAAyB,MAAM,0BAA0B,QAAQ,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC;gBACvG,GAAG,CAAC,MAAM,EAAE,GAAG,MAAM,yBAAyB,CAAC,CAAC;gBAChD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;YAC/B,CAAC;YACD,IAAI,OAAO,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;gBACzB,GAAG,CAAC,MAAM,EAAE,UAAU,MAAM,eAAe,QAAQ,oDAAoD,CAAC,CAAC;YAC3G,CAAC;iBAAM,IAAI,OAAO,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACpC,MAAM,MAAM,GAAG,UAAU,MAAM,0CAA0C,QAAQ,aAAa,OAAO,CAAC,GAAG,EAAE,CAAC;gBAC5G,GAAG,CAAC,MAAM,EAAE,GAAG,MAAM,yBAAyB,CAAC,CAAC;gBAChD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,YAAY,WAAW,CAAC,sBAAsB,MAAM,IAAI,QAAQ,EAAE,CAAC,cAAc,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjH,MAAM,GAAG,IAAI,CAAC;gBACd,GAAG,CAAC,MAAM,EAAE,0BAA0B,MAAM,MAAM,QAAQ,qBAAqB,CAAC,CAAC;YACnF,CAAC;QACH,CAAC;QACD,0FAA0F;QAC1F,+FAA+F;QAC/F,6FAA6F;QAC7F,6BAA6B;QAC7B,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC7E,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;YACpC,MAAM,UAAU,GAAG,oBAAoB,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;YACxE,GAAG,CAAC,MAAM,EAAE,GAAG,UAAU,gCAAgC,CAAC,CAAC;YAC3D,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,MAAM,EAAE,kBAAkB,MAAM,kBAAkB,QAAQ,kBAAkB,MAAM,CAAC,IAAI,GAAG;iBAC3F,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAC3C,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,eAAe,MAAM,CAAC,SAAS,8BAA8B,MAAM,CAAC,QAAQ,QAAQ,MAAM,EAAE,CAAC;YAC5G,GAAG,CAAC,MAAM,EAAE,GAAG,MAAM,gCAAgC,CAAC,CAAC;YACvD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC/B,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,wCAAwC,MAAM,KAAK,MAAM,CAAC,MAAM,iBAAiB,MAAM,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC/H,GAAG,CAAC,MAAM,EAAE,GAAG,MAAM,gCAAgC,CAAC,CAAC;YACvD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC/B,CAAC;QACD,GAAG,CAAC,MAAM,EAAE,eAAe,MAAM,CAAC,SAAS,uBAAuB,MAAM,CAAC,QAAQ,QAAQ,MAAM,EAAE,CAAC,CAAC;QAEnG,qFAAqF;QACrF,MAAM,KAAK,GAAG,UAAU;YACtB,CAAC,CAAC,UAAU,CAAC,KAAK;YAClB,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QAE9G,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QAClD,MAAM,UAAU,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;QACxD,qGAAqG;QACrG,wFAAwF;QACxF,MAAM,MAAM,GACV,UAAU,IAAI,IAAI,KAAK,gBAAgB,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACzG,MAAM,WAAW,GAAG,UAAU;YAC5B,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;YACnF,CAAC,CAAC,KAAK;gBACL,CAAC,CAAC,oBAAoB,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,QAAQ,KAAK,GAAG;gBAChE,CAAC,CAAC,eAAe,KAAK,GAAG,CAAC;QAC9B,MAAM,OAAO,GAAG,UAAU;YACxB,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC;YACtB,CAAC,CAAC,KAAK;gBACL,CAAC,CAAC,GAAG,KAAK,YAAY,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,MAAM,KAAK,GAAG;gBAC9D,CAAC,CAAC,GAAG,KAAK,MAAM,KAAK,GAAG,CAAC;QAE7B,YAAY;QACZ,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;gBACnD,KAAK;gBACL,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,MAAM;gBACZ,IAAI;gBACJ,KAAK,EAAE,OAAO;gBACd,KAAK,EAAE,IAAI;gBACX,IAAI,EAAE,YAAY,CAAC;oBACjB,WAAW;oBACX,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;oBAC3D,QAAQ,EAAE,MAAM,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;oBAC3C,YAAY;oBACZ,YAAY,EAAE,IAAI,CAAC,YAAY;oBAC/B,IAAI,EAAE,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;oBACnC,WAAW,EAAE,MAAM,WAAW,CAAC,WAAW,EAAE;oBAC5C,eAAe,EAAE,MAAM,WAAW,CAAC,MAAM,EAAE;oBAC3C,MAAM,EAAE,UAAU,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK;oBACrD,MAAM,EAAE,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;iBACvD,CAAC;aACH,CAAC,CAAC;YAEH,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC;YACrB,GAAG,CAAC,WAAW,EAAE,cAAc,QAAQ,0BAA0B,MAAM,UAAU,IAAI,GAAG,CAAC,CAAC;QAC5F,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC;gBAAE,MAAM,GAAG,CAAC;YAC9C,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YACpE,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;gBAChC,MAAM,MAAM,GAAG,4CAA4C,MAAM,qCAAqC,QAAQ,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,GAAG,CAAC;gBAC7K,GAAG,CAAC,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,CAAC;gBACpC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;YAC/B,CAAC;YACD,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;YAC7B,GAAG,CAAC,WAAW,EAAE,OAAO,QAAQ,wBAAwB,MAAM,cAAc,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,mCAAmC,MAAM,EAAE,CAAC;QAC3D,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACpB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,eAAe;QAClC,IAAI,CAAC;YACH,IAAI,UAA8B,CAAC;YACnC,IAAI,CAAC;gBACH,UAAU,GAAG,CAAC,MAAM,GAAG,CAAC,oBAAoB,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;YAC/F,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACV,MAAM,IAAI,GAAG,kBAAkB,CAAC;gBAC9B,KAAK;gBACL,YAAY;gBACZ,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,OAAO,EAAE,UAAU;gBACnB,WAAW,EAAE,MAAM,WAAW,CAAC,WAAW,EAAE;aAC7C,CAAC,CAAC;YACH,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACjG,GAAG,CAAC,UAAU,EAAE,+BAA+B,QAAQ,EAAE,CAAC,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IAEZ,IAAI,SAAwC,CAAC;IAC7C,IAAI,YAAgC,CAAC;IACrC,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,sBAAsB,CAAC;IAEjE,IAAI,OAAO,EAAE,CAAC;QACZ,GAAG,CAAC,MAAM,EAAE,uBAAuB,QAAQ,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC;YACH,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,yBAAyB,CAAC,CAAC;gBAC5D,OAAO;gBACP,KAAK;gBACL,IAAI,EAAE,QAAQ;gBACd,GAAG,EAAE,QAAQ;gBACb,KAAK;gBACL,UAAU,EAAE,YAAY;gBACxB,SAAS,EAAE,IAAI;gBACf,cAAc,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE;gBAC5C,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,EAAE,CACrE,GAAG,CACD,MAAM,EACN,UAAU,EAAE,MAAM;oBAChB,CAAC,CAAC,cAAc,QAAQ,+BAA+B,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW;oBACpM,CAAC,CAAC,cAAc,QAAQ,KAAK,OAAO,aAAa,SAAS,IAAI,KAAK,eAAe,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,iCAAiC,CACrJ;gBACH,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE,CACrC,GAAG,CACD,MAAM,EACN,uBAAuB,IAAI,0BAA0B,GAAG,wCAAwC,aAAa,6BAA6B,CAC3I;gBACH,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CACjC,GAAG,CACD,YAAY,EACZ,sBAAsB,QAAQ,+BAA+B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,iCAAiC,CAC3I;gBACH,cAAc,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAC/C,GAAG,CACD,kBAAkB,EAClB,4BAA4B,QAAQ,+BAA+B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,gCAAgC,OAAO,EAAE,CACzJ;aACJ,CAAC,CAAC;YACH,IAAI,SAAS,KAAK,SAAS;gBAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,QAAQ,EAAE,CAAC,CAAC;iBACpE,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBACjC,MAAM,MAAM,GAAG,qBAAqB,QAAQ,EAAE,CAAC;gBAC/C,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACpB,MAAM,SAAS,GAAG,MAAM,wBAAwB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC9G,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YAChG,CAAC;iBAAM,IAAI,SAAS,KAAK,eAAe,EAAE,CAAC;gBACzC,MAAM,MAAM,GAAG,sDAAsD,QAAQ,kBAAkB,CAAC;gBAChG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACpB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;YACpD,CAAC;iBAAM,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBACnC,4EAA4E;gBAC5E,GAAG,CACD,MAAM,EACN,sBAAsB,QAAQ,8BAA8B,YAAY,GAAG,MAAM,2BAA2B,CAC7G,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAChC,GAAG,CAAC,MAAM,EAAE,oBAAoB,QAAQ,YAAY,YAAY,0BAA0B,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,SAAS,KAAK,SAAS,IAAI,YAAY,KAAK,SAAS,CAAC;IAExE,IAAI,YAA4C,CAAC;IACjD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,oBAAoB,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC1F,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,CAAqB,EAAE,EAAE,CAAC,qBAAqB,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5G,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAChG,YAAY,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QAC3F,IAAI,YAAY,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACnC,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,QAAQ;gBACR,MAAM,EAAE,oBAAoB,CAAC,QAAQ,EAAE,YAAY,CAAC;gBACpD,YAAY;gBACZ,OAAO,EAAE,GAAG;gBACZ,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACvD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,sBAAsB,QAAQ,0BAA0B,YAAY,wBAAwB,CAAC;QAC5G,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACpB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACxG,CAAC;IAED,uEAAuE;IACvE,0EAA0E;IAC1E,IAAI,IAAI,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC;YACpG,IAAI,CAAC,EAAE,CAAC,KAAK;gBAAE,GAAG,CAAC,MAAM,EAAE,OAAO,QAAQ,8DAA8D,CAAC,CAAC;QAC5G,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC5E,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,sBAAsB,QAAQ,sCAAsC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACpB,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,QAAQ;gBACR,MAAM;gBACN,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;gBACjD,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,gBAAgB,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC;IACrH,GAAG,CAAC,OAAO,EAAE,OAAO,QAAQ,IAAI,UAAU,GAAG,QAAQ,EAAE,CAAC,CAAC;IACzD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,QAAQ;QACR,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;QACjD,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAgB,EAAE,KAAa,EAAE,IAAY,EAAE,MAAc;IAC5F,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAClD,KAAK;YACL,IAAI;YACJ,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,GAAG,KAAK,IAAI,MAAM,EAAE;SAC3B,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;QAChC,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IACvF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;IACvD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAgB,EAAE,KAAa,EAAE,IAAY,EAAE,MAAc;IAC9F,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAClD,KAAK;YACL,IAAI;YACJ,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,GAAG,KAAK,IAAI,MAAM,EAAE;SAC3B,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,IAAI,IAAI,CAAC,EAAE,MAAM,CAAC;QAChE,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IACvF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;IACvD,CAAC;AACH,CAAC;AAED;6FAC6F;AAC7F,MAAM,UAAU,wBAAwB,CAAC,GAAY;IACnD,MAAM,CAAC,GAAG,GAIF,CAAC;IACT,IAAI,CAAC,EAAE,MAAM,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;IACrG,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,QAAgB,EAChB,GAAkB;IAElB,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACxE,GAAG,CAAC,wBAAwB,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;QAChD,GAAG,CAAC,wCAAwC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;QAChE,mFAAmF;QACnF,wFAAwF;QACxF,GAAG,CAAC,oCAAoC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAC/D,GAAG,EAAE,CAAC,IAAI,EACV,GAAG,EAAE,CAAC,KAAK,CACZ;KACF,CAAC,CAAC;IACH,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE;QAC3B,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC;QAC5C,MAAM;QACN,yFAAyF;QACzF,WAAW,EAAE,MAAM;aAChB,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;aACvB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;KAClC,CAAC;AACJ,CAAC;AAED;;yBAEyB;AACzB,SAAS,eAAe,CAAC,WAAqB;IAC5C,OAAO,WAAW;SACf,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACf,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,OAAO,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,CAAC;IACxD,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"ship.js","sourceRoot":"","sources":["../../src/phases/ship.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { ParkCommentInput } from '../run/park-comment.js';
2
+ import { type CollaboratorPermissionClient } from './approval.js';
3
+ import { type QueueGitHubClient } from './github-queue.js';
4
+ import type { IterateCommandGitHub } from './iterate-command.js';
5
+ import type { ReviewReworkPollResult, ReviewReworkStore } from './review-rework-trigger.js';
6
+ /** The feedback after `/factory rework` (rest of the first non-blank line plus later lines); null when the comment is not the command. */
7
+ export declare function parseReworkCommand(body: string): string | null;
8
+ export interface PollCommentReworkOptions {
9
+ github: IterateCommandGitHub;
10
+ queue: QueueGitHubClient;
11
+ owner: string;
12
+ repo: string;
13
+ branchPrefix?: string;
14
+ trustedApprovers?: readonly string[];
15
+ permissions: CollaboratorPermissionClient;
16
+ store: ReviewReworkStore;
17
+ now?: () => Date;
18
+ /** Review-rework runs allowed per issue (#3565); defaults to the shipped default. */
19
+ maxRuns?: number;
20
+ /** Upserting park-comment publisher; without it the cap comment is a plain issue comment. */
21
+ publishParkComment?: (input: Omit<ParkCommentInput, 'parkSha' | 'order'>) => Promise<unknown>;
22
+ }
23
+ export declare function pollCommentRework(opts: PollCommentReworkOptions): Promise<ReviewReworkPollResult[]>;
24
+ //# sourceMappingURL=comment-rework-trigger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comment-rework-trigger.d.ts","sourceRoot":"","sources":["../../src/queue/comment-rework-trigger.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI/D,OAAO,EAAqB,KAAK,4BAA4B,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAsD,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE/G,OAAO,KAAK,EAAkB,oBAAoB,EAAe,MAAM,sBAAsB,CAAC;AAC9F,OAAO,KAAK,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE5F,0IAA0I;AAC1I,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ9D;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,oBAAoB,CAAC;IAC7B,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,WAAW,EAAE,4BAA4B,CAAC;IAC1C,KAAK,EAAE,iBAAiB,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,qFAAqF;IACrF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6FAA6F;IAC7F,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,GAAG,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/F;AA6GD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAczG"}