@vibe-commit/capture 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +114 -7
- package/dist/account_not_here.d.ts +15 -0
- package/dist/account_not_here.js +25 -0
- package/dist/account_not_here.js.map +1 -0
- package/dist/commands/auth.d.ts +7 -0
- package/dist/commands/auth.js +21 -0
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/browser_credential.d.ts +4 -2
- package/dist/commands/browser_credential.js +5 -2
- package/dist/commands/browser_credential.js.map +1 -1
- package/dist/commands/connect.d.ts +9 -0
- package/dist/commands/connect.js +13 -8
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/connect_account.d.ts +135 -0
- package/dist/commands/connect_account.js +321 -0
- package/dist/commands/connect_account.js.map +1 -0
- package/dist/commands/connect_picker.js +160 -26
- package/dist/commands/connect_picker.js.map +1 -1
- package/dist/commands/device_credential.d.ts +3 -1
- package/dist/commands/device_credential.js +1 -0
- package/dist/commands/device_credential.js.map +1 -1
- package/dist/commands/finish_mint.d.ts +28 -0
- package/dist/commands/finish_mint.js +16 -4
- package/dist/commands/finish_mint.js.map +1 -1
- package/dist/commands/status.d.ts +19 -1
- package/dist/commands/status.js +123 -14
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/status_machine.d.ts +12 -3
- package/dist/commands/status_machine.js +64 -3
- package/dist/commands/status_machine.js.map +1 -1
- package/dist/commands/sync_reason.d.ts +17 -0
- package/dist/commands/sync_reason.js +25 -0
- package/dist/commands/sync_reason.js.map +1 -0
- package/dist/consent.d.ts +109 -3
- package/dist/consent.js +210 -13
- package/dist/consent.js.map +1 -1
- package/dist/copy/strings.d.ts +122 -3
- package/dist/copy/strings.js +142 -3
- package/dist/copy/strings.js.map +1 -1
- package/dist/grants_sync.d.ts +165 -0
- package/dist/grants_sync.js +289 -0
- package/dist/grants_sync.js.map +1 -0
- package/dist/grants_verb.d.ts +70 -0
- package/dist/grants_verb.js +121 -0
- package/dist/grants_verb.js.map +1 -0
- package/dist/hooks/entry.js +8 -2
- package/dist/hooks/entry.js.map +1 -1
- package/dist/hooks/session_grants.d.ts +59 -0
- package/dist/hooks/session_grants.js +91 -0
- package/dist/hooks/session_grants.js.map +1 -0
- package/dist/hooks/session_start.d.ts +28 -7
- package/dist/hooks/session_start.js +55 -11
- package/dist/hooks/session_start.js.map +1 -1
- package/dist/index.js +22 -5
- package/dist/index.js.map +1 -1
- package/dist/oauth/retire.d.ts +10 -0
- package/dist/oauth/retire.js +13 -0
- package/dist/oauth/retire.js.map +1 -1
- package/dist/paths.d.ts +20 -0
- package/dist/paths.js +26 -0
- package/dist/paths.js.map +1 -1
- package/dist/pending_revoke.d.ts +117 -0
- package/dist/pending_revoke.js +233 -0
- package/dist/pending_revoke.js.map +1 -0
- package/dist/pending_revoke_file.d.ts +55 -0
- package/dist/pending_revoke_file.js +74 -0
- package/dist/pending_revoke_file.js.map +1 -0
- package/dist/picker.d.ts +30 -2
- package/dist/picker.js +55 -6
- package/dist/picker.js.map +1 -1
- package/dist/picker_checklist.d.ts +19 -3
- package/dist/picker_checklist.js +40 -4
- package/dist/picker_checklist.js.map +1 -1
- package/dist/policy.d.ts +16 -1
- package/dist/policy.js +21 -2
- package/dist/policy.js.map +1 -1
- package/dist/post.d.ts +41 -2
- package/dist/post.js +40 -12
- package/dist/post.js.map +1 -1
- package/dist/system_message.d.ts +25 -2
- package/dist/system_message.js +29 -5
- package/dist/system_message.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Why a stopped sync stopped, as muted lines (capture 0.8.0, "truth fixes" R2-1). `connect` says it under "Capture is on" and `off`
|
|
3
|
+
* says it after "Stopped here …"; both call this, so the words and the layout are one thing.
|
|
4
|
+
*
|
|
5
|
+
* - a 400 (our own bug; the queue is kept and will be refused again): the status row's wording, "didn't accept · report this";
|
|
6
|
+
* - a 401 (the credential is no longer accepted): `ERRORS.authFatal` and the channel's `auth` command.
|
|
7
|
+
*
|
|
8
|
+
* ⛔ **HOOK-SAFE ON PURPOSE.** `status.ts` is on the hook's static import graph (status → grants_verb), so `off` — which lives there —
|
|
9
|
+
* cannot import `connect_account.ts` (which holds `pending_revoke`). This module imports only copy, terminal and install-channel
|
|
10
|
+
* helpers; `connect_account.ts` imports it too.
|
|
11
|
+
*/
|
|
12
|
+
import { ERRORS, STATUS } from "../copy/index.js";
|
|
13
|
+
import { authCommandFor } from "../install.js";
|
|
14
|
+
import { paint, wrap } from "../term.js";
|
|
15
|
+
/** The reason lines for a sync answer that STOPPED the write, or `null` when the kind has no reason line of its own. */
|
|
16
|
+
export function stoppedSyncReason(ctx, result) {
|
|
17
|
+
if (result.kind === "rejected") {
|
|
18
|
+
return wrap(STATUS.pendingRejectedValue(Math.max(1, result.pendingRejected ?? 0)), 2).map((line) => paint(ctx.colour, "muted", line));
|
|
19
|
+
}
|
|
20
|
+
if (result.kind === "unauthorized") {
|
|
21
|
+
return [paint(ctx.colour, "muted", ` ${ERRORS.authFatal}`), ` ${paint(ctx.colour, "accent", authCommandFor(ctx.env, ctx.selfPath))}`];
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=sync_reason.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync_reason.js","sourceRoot":"","sources":["../../src/commands/sync_reason.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGzC,wHAAwH;AACxH,MAAM,UAAU,iBAAiB,CAC/B,GAAmB,EACnB,MAAoE;IAEpE,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACxI,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QACnC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5I,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/consent.d.ts
CHANGED
|
@@ -70,7 +70,14 @@ export declare function revokeProject(home: string, consentKey: string): boolean
|
|
|
70
70
|
* slug minus its last segment: `alexvibecommit`, or `gitlab.example.com/team`.
|
|
71
71
|
* - `repos` — single repos granted one by one.
|
|
72
72
|
* - `excluded` — `vibecommit off`. **Wins over every other basis**, a surviving common-dir entry included.
|
|
73
|
-
* - `refused` —
|
|
73
|
+
* - `refused` — 0.7.0's field for server refusals, kept so a 0.7.0 client can still read a 0.8.0 file. ⛔ Nothing writes it:
|
|
74
|
+
* slice 2's refusals are written by hooks, and hooks never write this file (see `grants-account.json` below).
|
|
75
|
+
* It is still honoured as a denial if something is in it.
|
|
76
|
+
* - `pending` — slice 2: grant writes this machine has not yet delivered to the account `{ op, kind, value, at }`. The next
|
|
77
|
+
* CLI verb that syncs sends and clears them (`grants_sync.ts`). Absent in a 0.7.0 file, which reads as none.
|
|
78
|
+
*
|
|
79
|
+
* ⛔ **THIS FILE IS CLI-ONLY.** `updateGrants` is an unlocked read-modify-write, so a hook that wrote here could race
|
|
80
|
+
* `vibecommit off` and restore the repo `off` had just turned off. What a hook has to remember lives in `grants-account.json`.
|
|
74
81
|
*
|
|
75
82
|
* `disclosed_at` is when the D65 disclosure was last answered yes for a grant; `null` until then.
|
|
76
83
|
*/
|
|
@@ -80,6 +87,23 @@ export interface Grants {
|
|
|
80
87
|
readonly repos: readonly string[];
|
|
81
88
|
readonly excluded: readonly string[];
|
|
82
89
|
readonly refused: readonly string[];
|
|
90
|
+
readonly pending: readonly PendingOp[];
|
|
91
|
+
/**
|
|
92
|
+
* ISO 8601, set ONCE, when this machine's first sync got a 200; `null` before. ⛔ **This is what makes a sync a "first sync"** (it
|
|
93
|
+
* uploads everything this machine already named), and it lives here and not in `grants-account.json` on purpose: that file is
|
|
94
|
+
* ignored when unreadable, and a deleted one must not make the next sync re-grant what was revoked elsewhere. CLI-only.
|
|
95
|
+
* Absent in a 0.7.0 file, which reads as `null`.
|
|
96
|
+
*/
|
|
97
|
+
readonly synced_at: string | null;
|
|
98
|
+
}
|
|
99
|
+
/** One queued write to the account's grants — the shape the server's sync endpoint takes, plus when it was queued. */
|
|
100
|
+
export interface PendingOp {
|
|
101
|
+
readonly op: "grant" | "revoke" | "exclude" | "include";
|
|
102
|
+
/** `exclude` and `include` are repo-only. The kind cannot be read off the value (`acme/api` and `gitlab.example.com/team` are both one slash). */
|
|
103
|
+
readonly kind: "owner" | "repo";
|
|
104
|
+
readonly value: string;
|
|
105
|
+
/** ISO 8601, when it was queued. */
|
|
106
|
+
readonly at: string;
|
|
83
107
|
}
|
|
84
108
|
export declare const EMPTY_GRANTS: Grants;
|
|
85
109
|
/**
|
|
@@ -116,8 +140,74 @@ export type GrantsRead = {
|
|
|
116
140
|
export declare function readGrants(home: string): GrantsRead;
|
|
117
141
|
/** True when a `grants.json` is present and unusable — the state `status` reports and a SessionStart notice names. */
|
|
118
142
|
export declare function grantsUnreadable(home: string): boolean;
|
|
143
|
+
/**
|
|
144
|
+
* The account's grants as the last sync or GET returned them. ⛔ **It never admits anything** (R3-22): a repo the account
|
|
145
|
+
* grants is captured on this machine only once THIS machine names it, in `grants.json`. `excluded` here does DENY — a repo
|
|
146
|
+
* turned off from another machine or the dashboard stops here too.
|
|
147
|
+
*/
|
|
148
|
+
export interface AccountGrants {
|
|
149
|
+
readonly owners: readonly string[];
|
|
150
|
+
readonly repos: readonly string[];
|
|
151
|
+
readonly excluded: readonly string[];
|
|
152
|
+
/** The server's `epoch` for the user's grants when this was read. */
|
|
153
|
+
readonly epoch: number;
|
|
154
|
+
/** ISO 8601, when this machine got it. */
|
|
155
|
+
readonly synced_at: string;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* `grants-account.json`.
|
|
159
|
+
*
|
|
160
|
+
* - `account` — the last synced account state, or `null` before the first sync.
|
|
161
|
+
* - `refused` — slugs the server refused with `repository_excluded` since the last sync. Denied here; a sync clears it.
|
|
162
|
+
* - `stale` — an `X-Grant-Epoch` differed from `account.epoch` (`noteGrantEpoch`); SessionStart's one GET reads it and clears it.
|
|
163
|
+
* - `last_get_at` — when SessionStart last did that GET, for its hourly limit.
|
|
164
|
+
*
|
|
165
|
+
* ⛔ **HOOKS WRITE THIS FILE AND NEVER `grants.json`.** It is written WHOLE and atomically (temp file + rename, 0600) and never
|
|
166
|
+
* through `updateGrants`. Two writers can still lose each other's update (the same unlocked read-modify-write), and that is
|
|
167
|
+
* safe by design: a lost `refused` slug means the server refuses it once more, and a lost `account` is read back by the next
|
|
168
|
+
* sync. Nothing in here can admit a repo, so nothing a race loses can capture one.
|
|
169
|
+
*
|
|
170
|
+
* ⛔ **An unreadable or corrupt file is IGNORED — it reads as empty, never as deny-all.** The opposite of `grants.json`, for the
|
|
171
|
+
* opposite reason: `grants.json` holds the user's own exclusions, which a deny-all protects; this file holds a cache and a
|
|
172
|
+
* server's refusals, and a machine that can't read it just asks the server again.
|
|
173
|
+
*/
|
|
174
|
+
export interface AccountState {
|
|
175
|
+
readonly account: AccountGrants | null;
|
|
176
|
+
readonly refused: readonly string[];
|
|
177
|
+
readonly stale: boolean;
|
|
178
|
+
readonly last_get_at: string | null;
|
|
179
|
+
}
|
|
180
|
+
export declare const EMPTY_ACCOUNT_STATE: AccountState;
|
|
181
|
+
/** Read it. **NEVER THROWS, and any failure — missing, unreadable, not JSON, any field off-shape — is the empty state.** */
|
|
182
|
+
export declare function readAccountState(home: string): AccountState;
|
|
183
|
+
/** Write it whole: normalized, atomic, 0600. Throws on an I/O failure (the destination is then untouched). */
|
|
184
|
+
export declare function writeAccountState(home: string, state: AccountState): void;
|
|
185
|
+
/**
|
|
186
|
+
* A hook saw `repository_excluded` for this slug: remember it, so this machine stops reading that repo's transcripts until
|
|
187
|
+
* the next sync says otherwise. **NEVER THROWS** — it runs on the hook's path, where a failed write only means the server
|
|
188
|
+
* refuses the next upload too. `local:` slugs are never recorded (there is no repo identity to refuse).
|
|
189
|
+
*/
|
|
190
|
+
export declare function recordRefused(home: string, slug: string): void;
|
|
191
|
+
/**
|
|
192
|
+
* A hook saw `X-Grant-Epoch` on a server answer (an ingest 2xx, or a grants refusal): if it is not the epoch this machine last
|
|
193
|
+
* recorded, mark the account state `stale`, which is what SessionStart's one bounded `GET` looks for (`session_grants.ts`).
|
|
194
|
+
* A machine with no recorded account state counts as epoch 0, as the server does when a user has no grants row.
|
|
195
|
+
*
|
|
196
|
+
* Writes `grants-account.json` and never `grants.json` (see `AccountState`), only when something changed — so a Stop hook that sees
|
|
197
|
+
* the same epoch every turn does no file write at all — and only ever sets `stale`; the GET (or a sync) clears it. **NEVER THROWS**:
|
|
198
|
+
* it runs on the hook's path, and a lost mark only means the next answer marks it again.
|
|
199
|
+
*/
|
|
200
|
+
export declare function noteGrantEpoch(home: string, epoch: number | null | undefined): void;
|
|
119
201
|
/** A slug now, or a way to get it. The thunk is for the hooks: see `isCaptureAllowed`. */
|
|
120
202
|
export type SlugSource = string | (() => string);
|
|
203
|
+
/**
|
|
204
|
+
* Does the hold of `isCaptureAllowed` (step 3) apply to ANYTHING on this machine right now? True when the machine has synced
|
|
205
|
+
* (`synced_at` is set) and a queued `grant` op names an owner or a repo the last synced account state does not already grant
|
|
206
|
+
* (the same two conditions the per-slug hold uses: a synced machine, and the account not already admitting it). "0.8.0 truth
|
|
207
|
+
* fixes" R2-2: `connect`'s untold line says sessions wait only when something actually waits. Reads `grants.json` and
|
|
208
|
+
* `grants-account.json`; an unreadable `grants.json` holds nothing here (the gate denies for its own reason).
|
|
209
|
+
*/
|
|
210
|
+
export declare function holdsAny(home: string): boolean;
|
|
121
211
|
/**
|
|
122
212
|
* ⛔ **THE ONE ADMISSION DECISION.** Every gate calls this; `entry.ts`, `post_commit.ts`, `post_rewrite.ts` (twice),
|
|
123
213
|
* `finalize.ts`, `status.ts` and `connect.ts` are the seven call sites. Absence is a NO and every error path denies.
|
|
@@ -125,12 +215,28 @@ export type SlugSource = string | (() => string);
|
|
|
125
215
|
* Precedence:
|
|
126
216
|
* 1. A MISSING `grants.json` is empty (0.6.x machines keep capturing on their common-dir consent). A PRESENT file
|
|
127
217
|
* that cannot be read denies every clone that has a slug, whatever `projects.json` says.
|
|
128
|
-
* 2.
|
|
129
|
-
*
|
|
218
|
+
* 2. A denied slug is denied, whatever the basis: `grants.json`'s `excluded` (and its legacy `refused`), the account file's
|
|
219
|
+
* `refused`, or the account's own `excluded`.
|
|
220
|
+
* 3. On a machine that HAS SYNCED (`grants.synced_at` is set), a slug with a `grant` still PENDING (queued, not yet delivered to
|
|
221
|
+
* the account) is held back when that grant is the slug's ONLY local basis, i.e. the clone has no common-dir consent: its
|
|
222
|
+
* spans stay unsent with their offset unchanged, and go once a sync delivers the grant. It is not held either when the last
|
|
223
|
+
* synced account state already grants the repo or its owner (the server admits it, so a queued grant that was refused must
|
|
224
|
+
* not hold it for ever).
|
|
225
|
+
* ⭐ **A MACHINE THAT HAS NEVER SYNCED HOLDS NOTHING** (VQ, "0.8.0 truth fixes" F1): the server refuses only a credential that
|
|
226
|
+
* has synced (`grants_synced_at`), so before the first sync the hold protects nothing and would only defer uploads, for ever
|
|
227
|
+
* against a server without the routes. Such a machine decides capture by its own choices, as under 0.7.0.
|
|
228
|
+
* ⭐ **WHY A COMMON-DIR CONSENT LIFTS THE HOLD** (VQ's ruling): a remote repo gets a common-dir consent only from pre-0.8.0
|
|
229
|
+
* flows (0.8.0's in-repo `connect` pre-ticks the picker, which writes GRANTS). The first sync uploads those consented slugs, so
|
|
230
|
+
* either this credential has not synced, and the server never refuses anything for it, or the first sync already granted the
|
|
231
|
+
* slug, and holding it would only delay bytes the server accepts.
|
|
232
|
+
* 4. Otherwise: admitted on the common-dir consent, or on a slug matched by `owners` or `repos`. ⛔ The account's own
|
|
233
|
+
* `owners`/`repos` are NOT consulted — a repo only the account grants is not captured on this machine (per-machine naming).
|
|
130
234
|
*
|
|
131
235
|
* `local:` slugs never match a grant and keep common-dir consent alone. They are also not subject to
|
|
132
236
|
* exclusion or to an unreadable file: there is no repo identity to exclude.
|
|
133
237
|
*
|
|
238
|
+
* `grants-account.json` is read on every call and an unreadable one is the empty state, never a denial (`AccountState`).
|
|
239
|
+
*
|
|
134
240
|
* ⚠ **`slug` MAY BE A THUNK, and the hooks pass one.** Computing a slug can spawn `git remote get-url` and `ssh -G`,
|
|
135
241
|
* which is real time on a hook's budget; a machine with no `grants.json` (every 0.6.x machine) needs none of it, and
|
|
136
242
|
* neither does a clone with no consent and no grants to match. The slug is asked for only when the answer depends on it.
|
package/dist/consent.js
CHANGED
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
import { chmodSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
48
48
|
import { dirname } from "node:path";
|
|
49
49
|
import { writeFileAtomic } from "./atomic_write.js";
|
|
50
|
-
import { grantsPath, projectsPath, rootDir } from "./paths.js";
|
|
50
|
+
import { grantsAccountPath, grantsPath, projectsPath, rootDir } from "./paths.js";
|
|
51
51
|
/**
|
|
52
52
|
* Read the allow list. **Every failure returns an empty list**, which means "no
|
|
53
53
|
* project is consented" — a corrupt or unreadable file must not be able to grant
|
|
@@ -116,6 +116,8 @@ export const EMPTY_GRANTS = {
|
|
|
116
116
|
repos: [],
|
|
117
117
|
excluded: [],
|
|
118
118
|
refused: [],
|
|
119
|
+
pending: [],
|
|
120
|
+
synced_at: null,
|
|
119
121
|
};
|
|
120
122
|
/**
|
|
121
123
|
* ⛔ **THE ONE NORMALIZATION.** The whole host-qualified slug, lowercased, for every host — the identity the
|
|
@@ -152,8 +154,41 @@ function stringList(value, normalize) {
|
|
|
152
154
|
}
|
|
153
155
|
return out;
|
|
154
156
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
+
const PENDING_OPS = new Set(["grant", "revoke", "exclude", "include"]);
|
|
158
|
+
/**
|
|
159
|
+
* `pending`: ABSENT is none (every 0.7.0 file), but a field that is there and malformed is `null` — the caller reads the
|
|
160
|
+
* whole file as unreadable, the same rule as the other lists, since a queue we cannot read may hold a grant we are holding.
|
|
161
|
+
*/
|
|
162
|
+
function parsePending(value) {
|
|
163
|
+
if (value === undefined)
|
|
164
|
+
return [];
|
|
165
|
+
if (!Array.isArray(value))
|
|
166
|
+
return null;
|
|
167
|
+
const out = [];
|
|
168
|
+
for (const item of value) {
|
|
169
|
+
if (item === null || typeof item !== "object" || Array.isArray(item))
|
|
170
|
+
return null;
|
|
171
|
+
const { op, kind, value: v, at } = item;
|
|
172
|
+
if (typeof op !== "string" || !PENDING_OPS.has(op))
|
|
173
|
+
return null;
|
|
174
|
+
if (kind !== "owner" && kind !== "repo")
|
|
175
|
+
return null;
|
|
176
|
+
if (typeof v !== "string" || typeof at !== "string")
|
|
177
|
+
return null;
|
|
178
|
+
if ((op === "exclude" || op === "include") && kind !== "repo")
|
|
179
|
+
return null;
|
|
180
|
+
const clean = kind === "owner" ? normalizeOwner(v) : normalizeSlug(v);
|
|
181
|
+
if (clean === "")
|
|
182
|
+
return null;
|
|
183
|
+
out.push({ op: op, kind, value: clean, at });
|
|
184
|
+
}
|
|
185
|
+
return out;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* The seven fields this version knows and REBUILDS on every write (`pending` and `synced_at` are slice 2's); every other top-level key
|
|
189
|
+
* of `grants.json` is carried through untouched.
|
|
190
|
+
*/
|
|
191
|
+
const KNOWN_GRANTS_KEYS = new Set(["disclosed_at", "owners", "repos", "excluded", "refused", "pending", "synced_at"]);
|
|
157
192
|
/**
|
|
158
193
|
* `readGrants` plus the top-level keys it does not know, in file order. One read and one parse, so `updateGrants`
|
|
159
194
|
* rewrites exactly the file it read. `extras` is empty unless `read` is `ok`.
|
|
@@ -178,13 +213,18 @@ function readGrantsWithExtras(home) {
|
|
|
178
213
|
const repos = stringList(o.repos, normalizeSlug);
|
|
179
214
|
const excluded = stringList(o.excluded, normalizeSlug);
|
|
180
215
|
const refused = stringList(o.refused, normalizeSlug);
|
|
216
|
+
const pending = parsePending(o.pending);
|
|
217
|
+
const syncedAt = o.synced_at === undefined ? null : o.synced_at;
|
|
181
218
|
const at = o.disclosed_at;
|
|
182
|
-
if (owners === null || repos === null || excluded === null || refused === null)
|
|
219
|
+
if (owners === null || repos === null || excluded === null || refused === null || pending === null) {
|
|
183
220
|
return { read: { kind: "unreadable" }, extras: none };
|
|
221
|
+
}
|
|
184
222
|
if (at !== null && typeof at !== "string")
|
|
185
223
|
return { read: { kind: "unreadable" }, extras: none };
|
|
224
|
+
if (syncedAt !== null && typeof syncedAt !== "string")
|
|
225
|
+
return { read: { kind: "unreadable" }, extras: none };
|
|
186
226
|
return {
|
|
187
|
-
read: { kind: "ok", grants: { disclosed_at: at, owners, repos, excluded, refused } },
|
|
227
|
+
read: { kind: "ok", grants: { disclosed_at: at, owners, repos, excluded, refused, pending, synced_at: syncedAt } },
|
|
188
228
|
extras: Object.entries(o).filter(([key]) => !KNOWN_GRANTS_KEYS.has(key)),
|
|
189
229
|
};
|
|
190
230
|
}
|
|
@@ -199,6 +239,138 @@ export function readGrants(home) {
|
|
|
199
239
|
export function grantsUnreadable(home) {
|
|
200
240
|
return readGrants(home).kind === "unreadable";
|
|
201
241
|
}
|
|
242
|
+
export const EMPTY_ACCOUNT_STATE = { account: null, refused: [], stale: false, last_get_at: null };
|
|
243
|
+
function parseAccountGrants(value) {
|
|
244
|
+
if (value === null)
|
|
245
|
+
return null;
|
|
246
|
+
if (typeof value !== "object" || Array.isArray(value))
|
|
247
|
+
return undefined;
|
|
248
|
+
const o = value;
|
|
249
|
+
const owners = stringList(o.owners, normalizeOwner);
|
|
250
|
+
const repos = stringList(o.repos, normalizeSlug);
|
|
251
|
+
const excluded = stringList(o.excluded, normalizeSlug);
|
|
252
|
+
if (owners === null || repos === null || excluded === null)
|
|
253
|
+
return undefined;
|
|
254
|
+
if (typeof o.epoch !== "number" || !Number.isSafeInteger(o.epoch) || o.epoch < 0)
|
|
255
|
+
return undefined;
|
|
256
|
+
if (typeof o.synced_at !== "string")
|
|
257
|
+
return undefined;
|
|
258
|
+
return { owners, repos, excluded, epoch: o.epoch, synced_at: o.synced_at };
|
|
259
|
+
}
|
|
260
|
+
/** Read it. **NEVER THROWS, and any failure — missing, unreadable, not JSON, any field off-shape — is the empty state.** */
|
|
261
|
+
export function readAccountState(home) {
|
|
262
|
+
try {
|
|
263
|
+
const parsed = JSON.parse(readFileSync(grantsAccountPath(home), "utf8"));
|
|
264
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed))
|
|
265
|
+
return EMPTY_ACCOUNT_STATE;
|
|
266
|
+
const o = parsed;
|
|
267
|
+
const account = o.account === undefined ? null : parseAccountGrants(o.account);
|
|
268
|
+
const refused = o.refused === undefined ? [] : stringList(o.refused, normalizeSlug);
|
|
269
|
+
const last = o.last_get_at === undefined ? null : o.last_get_at;
|
|
270
|
+
if (account === undefined || refused === null)
|
|
271
|
+
return EMPTY_ACCOUNT_STATE;
|
|
272
|
+
if (o.stale !== undefined && typeof o.stale !== "boolean")
|
|
273
|
+
return EMPTY_ACCOUNT_STATE;
|
|
274
|
+
if (last !== null && typeof last !== "string")
|
|
275
|
+
return EMPTY_ACCOUNT_STATE;
|
|
276
|
+
return { account, refused, stale: o.stale === true, last_get_at: last };
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
return EMPTY_ACCOUNT_STATE;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
/** Write it whole: normalized, atomic, 0600. Throws on an I/O failure (the destination is then untouched). */
|
|
283
|
+
export function writeAccountState(home, state) {
|
|
284
|
+
const clean = {
|
|
285
|
+
account: state.account === null
|
|
286
|
+
? null
|
|
287
|
+
: {
|
|
288
|
+
owners: [...new Set(state.account.owners.map(normalizeOwner).filter((o) => o !== ""))],
|
|
289
|
+
repos: [...new Set(state.account.repos.map(normalizeSlug).filter((r) => r !== ""))],
|
|
290
|
+
excluded: [...new Set(state.account.excluded.map(normalizeSlug).filter((x) => x !== ""))],
|
|
291
|
+
epoch: state.account.epoch,
|
|
292
|
+
synced_at: state.account.synced_at,
|
|
293
|
+
},
|
|
294
|
+
refused: [...new Set(state.refused.map(normalizeSlug).filter((x) => x !== "" && !isLocalSlug(x)))],
|
|
295
|
+
stale: state.stale,
|
|
296
|
+
last_get_at: state.last_get_at,
|
|
297
|
+
};
|
|
298
|
+
const path = grantsAccountPath(home);
|
|
299
|
+
mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
|
|
300
|
+
writeFileAtomic(path, `${JSON.stringify(clean, null, 2)}\n`, 0o600);
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* A hook saw `repository_excluded` for this slug: remember it, so this machine stops reading that repo's transcripts until
|
|
304
|
+
* the next sync says otherwise. **NEVER THROWS** — it runs on the hook's path, where a failed write only means the server
|
|
305
|
+
* refuses the next upload too. `local:` slugs are never recorded (there is no repo identity to refuse).
|
|
306
|
+
*/
|
|
307
|
+
export function recordRefused(home, slug) {
|
|
308
|
+
const name = normalizeSlug(slug);
|
|
309
|
+
if (name === "" || isLocalSlug(name))
|
|
310
|
+
return;
|
|
311
|
+
try {
|
|
312
|
+
const current = readAccountState(home);
|
|
313
|
+
if (current.refused.includes(name))
|
|
314
|
+
return;
|
|
315
|
+
writeAccountState(home, { ...current, refused: [...current.refused, name] });
|
|
316
|
+
}
|
|
317
|
+
catch {
|
|
318
|
+
// The hook goes on: nothing was written, and the next refusal tries again.
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* A hook saw `X-Grant-Epoch` on a server answer (an ingest 2xx, or a grants refusal): if it is not the epoch this machine last
|
|
323
|
+
* recorded, mark the account state `stale`, which is what SessionStart's one bounded `GET` looks for (`session_grants.ts`).
|
|
324
|
+
* A machine with no recorded account state counts as epoch 0, as the server does when a user has no grants row.
|
|
325
|
+
*
|
|
326
|
+
* Writes `grants-account.json` and never `grants.json` (see `AccountState`), only when something changed — so a Stop hook that sees
|
|
327
|
+
* the same epoch every turn does no file write at all — and only ever sets `stale`; the GET (or a sync) clears it. **NEVER THROWS**:
|
|
328
|
+
* it runs on the hook's path, and a lost mark only means the next answer marks it again.
|
|
329
|
+
*/
|
|
330
|
+
export function noteGrantEpoch(home, epoch) {
|
|
331
|
+
if (epoch === null || epoch === undefined || !Number.isSafeInteger(epoch) || epoch < 0)
|
|
332
|
+
return;
|
|
333
|
+
try {
|
|
334
|
+
const current = readAccountState(home);
|
|
335
|
+
if (current.stale)
|
|
336
|
+
return;
|
|
337
|
+
if (epoch === (current.account?.epoch ?? 0))
|
|
338
|
+
return;
|
|
339
|
+
writeAccountState(home, { ...current, stale: true });
|
|
340
|
+
}
|
|
341
|
+
catch {
|
|
342
|
+
// The hook goes on: nothing was written, and the next answer marks it again.
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* True when the last synced account state (the last 200) already grants this repo, or its owner. ⚠ Read only to avoid a NEEDLESS
|
|
347
|
+
* hold — say an owner grant was queued and refused with a 400 while the server already admits this repo — and never to admit: the
|
|
348
|
+
* account's grants do not admit anything on this machine.
|
|
349
|
+
*/
|
|
350
|
+
function accountGrants(state, name) {
|
|
351
|
+
const a = state.account;
|
|
352
|
+
return a !== null && (a.repos.includes(name) || a.owners.includes(ownerOfSlug(name)));
|
|
353
|
+
}
|
|
354
|
+
/** True when a queued `grant` op names this slug, or its owner. */
|
|
355
|
+
function grantPendingFor(pending, name) {
|
|
356
|
+
const owner = ownerOfSlug(name);
|
|
357
|
+
return pending.some((p) => p.op === "grant" && (p.kind === "repo" ? p.value === name : p.value === owner));
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Does the hold of `isCaptureAllowed` (step 3) apply to ANYTHING on this machine right now? True when the machine has synced
|
|
361
|
+
* (`synced_at` is set) and a queued `grant` op names an owner or a repo the last synced account state does not already grant
|
|
362
|
+
* (the same two conditions the per-slug hold uses: a synced machine, and the account not already admitting it). "0.8.0 truth
|
|
363
|
+
* fixes" R2-2: `connect`'s untold line says sessions wait only when something actually waits. Reads `grants.json` and
|
|
364
|
+
* `grants-account.json`; an unreadable `grants.json` holds nothing here (the gate denies for its own reason).
|
|
365
|
+
*/
|
|
366
|
+
export function holdsAny(home) {
|
|
367
|
+
const read = readGrants(home);
|
|
368
|
+
if (read.kind !== "ok" || read.grants.synced_at === null)
|
|
369
|
+
return false;
|
|
370
|
+
const state = readAccountState(home);
|
|
371
|
+
// `accountGrants` is the gate's own predicate: an owner op is asked as `owner/` (its owner is `owner`, and no account repo is spelled that way).
|
|
372
|
+
return read.grants.pending.some((p) => p.op === "grant" && !accountGrants(state, p.kind === "repo" ? p.value : `${p.value}/`));
|
|
373
|
+
}
|
|
202
374
|
/**
|
|
203
375
|
* ⛔ **THE ONE ADMISSION DECISION.** Every gate calls this; `entry.ts`, `post_commit.ts`, `post_rewrite.ts` (twice),
|
|
204
376
|
* `finalize.ts`, `status.ts` and `connect.ts` are the seven call sites. Absence is a NO and every error path denies.
|
|
@@ -206,12 +378,28 @@ export function grantsUnreadable(home) {
|
|
|
206
378
|
* Precedence:
|
|
207
379
|
* 1. A MISSING `grants.json` is empty (0.6.x machines keep capturing on their common-dir consent). A PRESENT file
|
|
208
380
|
* that cannot be read denies every clone that has a slug, whatever `projects.json` says.
|
|
209
|
-
* 2.
|
|
210
|
-
*
|
|
381
|
+
* 2. A denied slug is denied, whatever the basis: `grants.json`'s `excluded` (and its legacy `refused`), the account file's
|
|
382
|
+
* `refused`, or the account's own `excluded`.
|
|
383
|
+
* 3. On a machine that HAS SYNCED (`grants.synced_at` is set), a slug with a `grant` still PENDING (queued, not yet delivered to
|
|
384
|
+
* the account) is held back when that grant is the slug's ONLY local basis, i.e. the clone has no common-dir consent: its
|
|
385
|
+
* spans stay unsent with their offset unchanged, and go once a sync delivers the grant. It is not held either when the last
|
|
386
|
+
* synced account state already grants the repo or its owner (the server admits it, so a queued grant that was refused must
|
|
387
|
+
* not hold it for ever).
|
|
388
|
+
* ⭐ **A MACHINE THAT HAS NEVER SYNCED HOLDS NOTHING** (VQ, "0.8.0 truth fixes" F1): the server refuses only a credential that
|
|
389
|
+
* has synced (`grants_synced_at`), so before the first sync the hold protects nothing and would only defer uploads, for ever
|
|
390
|
+
* against a server without the routes. Such a machine decides capture by its own choices, as under 0.7.0.
|
|
391
|
+
* ⭐ **WHY A COMMON-DIR CONSENT LIFTS THE HOLD** (VQ's ruling): a remote repo gets a common-dir consent only from pre-0.8.0
|
|
392
|
+
* flows (0.8.0's in-repo `connect` pre-ticks the picker, which writes GRANTS). The first sync uploads those consented slugs, so
|
|
393
|
+
* either this credential has not synced, and the server never refuses anything for it, or the first sync already granted the
|
|
394
|
+
* slug, and holding it would only delay bytes the server accepts.
|
|
395
|
+
* 4. Otherwise: admitted on the common-dir consent, or on a slug matched by `owners` or `repos`. ⛔ The account's own
|
|
396
|
+
* `owners`/`repos` are NOT consulted — a repo only the account grants is not captured on this machine (per-machine naming).
|
|
211
397
|
*
|
|
212
398
|
* `local:` slugs never match a grant and keep common-dir consent alone. They are also not subject to
|
|
213
399
|
* exclusion or to an unreadable file: there is no repo identity to exclude.
|
|
214
400
|
*
|
|
401
|
+
* `grants-account.json` is read on every call and an unreadable one is the empty state, never a denial (`AccountState`).
|
|
402
|
+
*
|
|
215
403
|
* ⚠ **`slug` MAY BE A THUNK, and the hooks pass one.** Computing a slug can spawn `git remote get-url` and `ssh -G`,
|
|
216
404
|
* which is real time on a hook's budget; a machine with no `grants.json` (every 0.6.x machine) needs none of it, and
|
|
217
405
|
* neither does a clone with no consent and no grants to match. The slug is asked for only when the answer depends on it.
|
|
@@ -225,20 +413,24 @@ export function isCaptureAllowed(home, keys, slug) {
|
|
|
225
413
|
return false;
|
|
226
414
|
const byClone = isProjectAllowed(home, keys.consent);
|
|
227
415
|
const read = readGrants(home);
|
|
228
|
-
if (read.kind === "missing")
|
|
229
|
-
return byClone;
|
|
230
416
|
const resolve = () => normalizeSlug(typeof slug === "function" ? slug() : slug);
|
|
231
417
|
if (read.kind === "unreadable")
|
|
232
418
|
return isLocalSlug(resolve()) ? byClone : false;
|
|
233
|
-
const
|
|
234
|
-
|
|
419
|
+
const grants = read.kind === "ok" ? read.grants : EMPTY_GRANTS;
|
|
420
|
+
const account = readAccountState(home);
|
|
421
|
+
const denyLists = [grants.excluded, grants.refused, account.refused, account.account?.excluded ?? []];
|
|
422
|
+
const mayDeny = denyLists.some((list) => list.length > 0);
|
|
423
|
+
const mayHold = !byClone && grants.synced_at !== null && grants.pending.some((p) => p.op === "grant");
|
|
424
|
+
if (!mayDeny && !mayHold && (byClone || (grants.owners.length === 0 && grants.repos.length === 0)))
|
|
235
425
|
return byClone;
|
|
236
426
|
const name = resolve();
|
|
237
427
|
if (isLocalSlug(name))
|
|
238
428
|
return byClone;
|
|
239
|
-
if (
|
|
429
|
+
if (denyLists.some((list) => list.includes(name)))
|
|
430
|
+
return false;
|
|
431
|
+
if (!byClone && grants.synced_at !== null && grantPendingFor(grants.pending, name) && !accountGrants(account, name))
|
|
240
432
|
return false;
|
|
241
|
-
return byClone || repos.includes(name) || owners.includes(ownerOfSlug(name));
|
|
433
|
+
return byClone || grants.repos.includes(name) || grants.owners.includes(ownerOfSlug(name));
|
|
242
434
|
}
|
|
243
435
|
/** `updateGrants` refuses to rewrite a file it cannot read: overwriting would silently drop exclusions it never saw. */
|
|
244
436
|
export class GrantsUnreadableError extends Error {
|
|
@@ -269,6 +461,11 @@ export function updateGrants(home, change) {
|
|
|
269
461
|
repos: [...new Set(next.repos.map(normalizeSlug).filter((r) => r !== ""))],
|
|
270
462
|
excluded: [...new Set(next.excluded.map(normalizeSlug).filter((x) => x !== ""))],
|
|
271
463
|
refused: [...new Set(next.refused.map(normalizeSlug).filter((x) => x !== ""))],
|
|
464
|
+
pending: next.pending.flatMap((p) => {
|
|
465
|
+
const value = p.kind === "owner" ? normalizeOwner(p.value) : normalizeSlug(p.value);
|
|
466
|
+
return value === "" ? [] : [{ ...p, value }];
|
|
467
|
+
}),
|
|
468
|
+
synced_at: next.synced_at,
|
|
272
469
|
};
|
|
273
470
|
const path = grantsPath(home);
|
|
274
471
|
mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
|
package/dist/consent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consent.js","sourceRoot":"","sources":["../src/consent.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"consent.js","sourceRoot":"","sources":["../src/consent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAEH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAUlF;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,CAAC;QACtF,MAAM,GAAG,GAAiC,EAAE,CAAC;QAC7C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAiC,CAAC,EAAE,CAAC;YAC7E,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzE,MAAM,EAAE,GAAI,KAA0B,CAAC,EAAE,CAAC;gBAC1C,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACtD,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,UAAyB;IACtE,IAAI,UAAU,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACtC,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;AAC/E,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,UAAkB,EAAE,GAAS;IACtE,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAChC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IAChC,MAAM,IAAI,GAAiC;QACzC,GAAG,aAAa,CAAC,IAAI,CAAC;QACtB,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE;KACxC,CAAC;IACF,aAAa,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3E,kEAAkE;IAClE,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,UAAkB;IAC5D,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7E,MAAM,IAAI,GAAiC,EAAE,GAAG,OAAO,EAAE,CAAC;IAC1D,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC;IACxB,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAChC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,aAAa,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3E,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvB,OAAO,IAAI,CAAC;AACd,CAAC;AAmDD,MAAM,CAAC,MAAM,YAAY,GAAW;IAClC,YAAY,EAAE,IAAI;IAClB,MAAM,EAAE,EAAE;IACV,KAAK,EAAE,EAAE;IACT,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,EAAE;IACX,SAAS,EAAE,IAAI;CAChB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACnC,CAAC;AAED,4GAA4G;AAC5G,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,yGAAyG;AACzG,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC5C,CAAC;AAiBD,SAAS,UAAU,CAAC,KAAc,EAAE,SAAgC;IAClE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC1C,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,WAAW,GAAwB,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAE5F;;;GAGG;AACH,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,GAAG,GAAgB,EAAE,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAClF,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,IAA+B,CAAC;QACnE,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC;QAChE,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QACrD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,EAAE,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACjE,IAAI,CAAC,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS,CAAC,IAAI,IAAI,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QAC3E,MAAM,KAAK,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACtE,IAAI,KAAK,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC;QAC9B,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAqB,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,iBAAiB,GAAwB,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;AAE3I;;;GAGG;AACH,SAAS,oBAAoB,CAAC,IAAY;IACxC,MAAM,IAAI,GAA4C,EAAE,CAAC;IACzD,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,IAAI,EAAG,KAA+B,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACnI,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAClI,MAAM,CAAC,GAAG,MAAiC,CAAC;QAC5C,kGAAkG;QAClG,4DAA4D;QAC5D,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAChE,MAAM,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC;QAC1B,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACnG,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACxD,CAAC;QACD,IAAI,EAAE,KAAK,IAAI,IAAI,OAAO,EAAE,KAAK,QAAQ;YAAE,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACjG,IAAI,QAAQ,KAAK,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ;YAAE,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAC7G,OAAO;YACL,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;YAClH,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACzE,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACxD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;AACzC,CAAC;AAED,sHAAsH;AACtH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC;AAChD,CAAC;AA6CD,MAAM,CAAC,MAAM,mBAAmB,GAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAEjH,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACxE,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACvD,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC7E,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IACnG,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACtD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;AAC7E,CAAC;AAED,4HAA4H;AAC5H,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAClF,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,mBAAmB,CAAC;QACvG,MAAM,CAAC,GAAG,MAAiC,CAAC;QAC5C,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC/E,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACpF,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QAChE,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO,mBAAmB,CAAC;QAC1E,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO,mBAAmB,CAAC;QACtF,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,mBAAmB,CAAC;QAC1E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,KAAK,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,mBAAmB,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,8GAA8G;AAC9G,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,KAAmB;IACjE,MAAM,KAAK,GAAiB;QAC1B,OAAO,EACL,KAAK,CAAC,OAAO,KAAK,IAAI;YACpB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC;gBACE,MAAM,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBACtF,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBACnF,QAAQ,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBACzF,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;gBAC1B,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS;aACnC;QACP,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClG,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,WAAW,EAAE,KAAK,CAAC,WAAW;KAC/B,CAAC;IACF,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACrC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,eAAe,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACtE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,IAAY;IACtD,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,IAAI,KAAK,EAAE,IAAI,WAAW,CAAC,IAAI,CAAC;QAAE,OAAO;IAC7C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO;QAC3C,iBAAiB,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC;IAAC,MAAM,CAAC;QACP,2EAA2E;IAC7E,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,KAAgC;IAC3E,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO;IAC/F,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,OAAO,CAAC,KAAK;YAAE,OAAO;QAC1B,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC;YAAE,OAAO;QACpD,iBAAiB,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,6EAA6E;IAC/E,CAAC;AACH,CAAC;AAKD;;;;GAIG;AACH,SAAS,aAAa,CAAC,KAAmB,EAAE,IAAY;IACtD,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;IACxB,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,mEAAmE;AACnE,SAAS,eAAe,CAAC,OAA6B,EAAE,IAAY;IAClE,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC;AAC7G,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACvE,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACrC,iJAAiJ;IACjJ,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AACjI,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,IAAwB,EAAE,IAAgB;IACvF,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAChC,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,GAAW,EAAE,CAAC,aAAa,CAAC,OAAO,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACxF,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAChF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC;IAC/D,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC;IACtG,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;IACtG,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC;IACnH,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,IAAI,WAAW,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IACtC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAChE,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAClI,OAAO,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7F,CAAC;AAED,wHAAwH;AACxH,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C;QACE,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,MAAmC;IAC5E,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY;QAAE,MAAM,IAAI,qBAAqB,EAAE,CAAC;IAClE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IACrE,MAAM,KAAK,GAAW;QACpB,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,MAAM,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC7E,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC1E,QAAQ,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAChF,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC9E,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAClC,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACpF,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/C,CAAC,CAAC;QACF,SAAS,EAAE,IAAI,CAAC,SAAS;KAC1B,CAAC;IACF,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9B,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IAChC,wGAAwG;IACxG,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;IACtE,eAAe,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAClE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,IAAY;IACpD,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE;QACvB,OAAO,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrC,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,IAAY;IACvD,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,YAAY,CAAC;IACpD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IACnF,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACtF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACtC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,CAAC;AAClC,CAAC"}
|