openlimiter 1.3.1 → 1.3.3

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 (52) hide show
  1. package/dist/cli.d.ts +1 -1
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +130 -78
  4. package/dist/cli.js.map +1 -1
  5. package/dist/codex-device-login.d.ts +2 -1
  6. package/dist/codex-device-login.d.ts.map +1 -1
  7. package/dist/codex-device-login.js +6 -4
  8. package/dist/codex-device-login.js.map +1 -1
  9. package/dist/config.d.ts +1 -0
  10. package/dist/config.d.ts.map +1 -1
  11. package/dist/config.js +3 -2
  12. package/dist/config.js.map +1 -1
  13. package/dist/hub-auth.d.ts +12 -14
  14. package/dist/hub-auth.d.ts.map +1 -1
  15. package/dist/hub-auth.js +232 -47
  16. package/dist/hub-auth.js.map +1 -1
  17. package/dist/hub-sync.d.ts +14 -13
  18. package/dist/hub-sync.d.ts.map +1 -1
  19. package/dist/hub-sync.js +139 -18
  20. package/dist/hub-sync.js.map +1 -1
  21. package/dist/hub.d.ts +6 -3
  22. package/dist/hub.d.ts.map +1 -1
  23. package/dist/hub.js +47 -11
  24. package/dist/hub.js.map +1 -1
  25. package/dist/ingest.d.ts.map +1 -1
  26. package/dist/ingest.js +16 -21
  27. package/dist/ingest.js.map +1 -1
  28. package/dist/session.d.ts +16 -8
  29. package/dist/session.d.ts.map +1 -1
  30. package/dist/session.js +144 -31
  31. package/dist/session.js.map +1 -1
  32. package/dist/statusline.d.ts +1 -1
  33. package/dist/statusline.d.ts.map +1 -1
  34. package/dist/statusline.js +10 -8
  35. package/dist/statusline.js.map +1 -1
  36. package/dist/terminal-backup.d.ts +5 -0
  37. package/dist/terminal-backup.d.ts.map +1 -0
  38. package/dist/terminal-backup.js +88 -0
  39. package/dist/terminal-backup.js.map +1 -0
  40. package/dist/terminal-launcher.d.ts +12 -0
  41. package/dist/terminal-launcher.d.ts.map +1 -0
  42. package/dist/terminal-launcher.js +208 -0
  43. package/dist/terminal-launcher.js.map +1 -0
  44. package/dist/terminal-toml.d.ts +38 -0
  45. package/dist/terminal-toml.d.ts.map +1 -0
  46. package/dist/terminal-toml.js +357 -0
  47. package/dist/terminal-toml.js.map +1 -0
  48. package/dist/terminal.d.ts +10 -37
  49. package/dist/terminal.d.ts.map +1 -1
  50. package/dist/terminal.js +390 -619
  51. package/dist/terminal.js.map +1 -1
  52. package/package.json +4 -4
package/dist/hub-auth.js CHANGED
@@ -10,14 +10,18 @@
10
10
  * lifetime, so a stubbed or misbehaving transport in a test cannot spin it
11
11
  * forever.
12
12
  */
13
- import { cliLoginPollRequest, cliLoginStartRequest, grantRenewRequest, hubConfigured, parseHubJson } from "./hub.js";
14
- import { sessionIsFresh } from "./session.js";
13
+ import { createHash, randomBytes } from "node:crypto";
14
+ import { cliLoginAckRequest, cliLoginPollRequest, cliLoginStartRequest, grantRenewRequest, hubConfigured, parseHubJson } from "./hub.js";
15
+ import { sessionIsFresh, StorageDiagnosticError } from "./session.js";
15
16
  /** The sentence a hub side revocation prints, word for word. */
16
17
  export const REVOKED_SENTENCE = "Signed out on the hub, run openlimiter login";
17
18
  /** The sentence a login code the hub already consumed prints, word for word. */
18
19
  export const CODE_CONSUMED_SENTENCE = "That code was already used, run openlimiter login again";
20
+ export const DELIVERY_UNCONFIRMED_SENTENCE = "The server could not confirm delivery, but the session is usable.";
19
21
  /** Extra polls past the hub's own stated lifetime, before this build gives up. */
20
22
  export const LOGIN_SAFETY_MARGIN_POLLS = 5;
23
+ export const MAX_SERVER_ERROR_RETRIES = 3;
24
+ const MAX_RETRY_INTERVAL_SECONDS = 30;
21
25
  function isFiniteInRange(value, minimum, maximum) {
22
26
  return typeof value === "number" && Number.isFinite(value) && value >= minimum && value <= maximum;
23
27
  }
@@ -27,6 +31,24 @@ function isBoundedString(value, minimum, maximum) {
27
31
  function isInstant(value) {
28
32
  return isBoundedString(value, 1, 64) && Number.isFinite(Date.parse(value));
29
33
  }
34
+ function serverMessage(body, secrets = []) {
35
+ const parsed = parseHubJson(body);
36
+ if (parsed === null)
37
+ return null;
38
+ for (const field of ["message", "error", "detail"]) {
39
+ const value = parsed[field];
40
+ if (isBoundedString(value, 1, 512) &&
41
+ secrets.every((secret) => secret.length === 0 || !value.includes(secret))) {
42
+ return value;
43
+ }
44
+ }
45
+ return null;
46
+ }
47
+ function nextBackoffInterval(intervalSeconds, retryAfterSeconds) {
48
+ return Math.min(MAX_RETRY_INTERVAL_SECONDS, Math.max(intervalSeconds * 2, typeof retryAfterSeconds === "number" && Number.isFinite(retryAfterSeconds)
49
+ ? retryAfterSeconds
50
+ : 0));
51
+ }
30
52
  /**
31
53
  * Whether Ctrl C asked this poll loop to stop.
32
54
  *
@@ -154,6 +176,95 @@ export function accountLabelFromToken(token, fallback) {
154
176
  }
155
177
  return fallback;
156
178
  }
179
+ async function acknowledgeDelivery(options, start, deviceCode, token, clientProof, initialIntervalSeconds, deadline, signal) {
180
+ let intervalSeconds = initialIntervalSeconds;
181
+ const maxAttempts = Math.ceil(start.expiresInSeconds / initialIntervalSeconds) + LOGIN_SAFETY_MARGIN_POLLS;
182
+ for (let attempt = 0; attempt < maxAttempts; attempt += 1) {
183
+ if (isAborted(signal) || Date.now() >= deadline)
184
+ return { kind: "unconfirmed" };
185
+ const request = cliLoginAckRequest(options.environment, deviceCode, token, clientProof);
186
+ if (request === null)
187
+ return { kind: "error", message: "the delivery acknowledgement could not be sent" };
188
+ let reply;
189
+ try {
190
+ reply = await awaitWithSignal(options.transport(request, signal), signal);
191
+ }
192
+ catch {
193
+ if (attempt + 1 >= maxAttempts || Date.now() >= deadline)
194
+ return { kind: "unconfirmed" };
195
+ if (!(await sleepWithSignal(options, Math.min(intervalSeconds * 1_000, Math.max(0, deadline - Date.now())), signal))) {
196
+ return { kind: "unconfirmed" };
197
+ }
198
+ intervalSeconds = Math.min(MAX_RETRY_INTERVAL_SECONDS, intervalSeconds * 2);
199
+ continue;
200
+ }
201
+ if (isAborted(signal) || Date.now() >= deadline)
202
+ return { kind: "unconfirmed" };
203
+ if (reply.status === 403 || reply.status === 404 || reply.status === 410) {
204
+ return { kind: "unconfirmed" };
205
+ }
206
+ if (reply.status >= 200 && reply.status < 300) {
207
+ const parsed = parseHubJson(reply.body);
208
+ return parsed?.["status"] === "consumed"
209
+ ? { kind: "confirmed" }
210
+ : { kind: "unconfirmed" };
211
+ }
212
+ if (reply.status === 429 || reply.status === 503 || (reply.status >= 500 && reply.status <= 599)) {
213
+ if (attempt + 1 >= maxAttempts || Date.now() >= deadline)
214
+ return { kind: "unconfirmed" };
215
+ intervalSeconds = nextBackoffInterval(intervalSeconds, reply.retryAfterSeconds);
216
+ if (!(await sleepWithSignal(options, Math.min(intervalSeconds * 1_000, Math.max(0, deadline - Date.now())), signal))) {
217
+ return { kind: "unconfirmed" };
218
+ }
219
+ continue;
220
+ }
221
+ return {
222
+ kind: "error",
223
+ message: "the hub returned status " + reply.status + " while confirming sign in"
224
+ };
225
+ }
226
+ return { kind: "unconfirmed" };
227
+ }
228
+ function awaitWithSignal(operation, signal) {
229
+ if (signal.aborted)
230
+ return Promise.reject(new Error("aborted"));
231
+ return new Promise((resolve, reject) => {
232
+ let settled = false;
233
+ const onAbort = () => {
234
+ if (settled)
235
+ return;
236
+ settled = true;
237
+ reject(new Error("aborted"));
238
+ };
239
+ signal.addEventListener("abort", onAbort, { once: true });
240
+ operation.then((value) => {
241
+ if (settled)
242
+ return;
243
+ settled = true;
244
+ signal.removeEventListener("abort", onAbort);
245
+ resolve(value);
246
+ }, (error) => {
247
+ if (settled)
248
+ return;
249
+ settled = true;
250
+ signal.removeEventListener("abort", onAbort);
251
+ reject(error);
252
+ });
253
+ });
254
+ }
255
+ async function sleepWithSignal(options, milliseconds, signal) {
256
+ if (milliseconds <= 0 || isAborted(signal))
257
+ return false;
258
+ try {
259
+ await awaitWithSignal(options.sleep(milliseconds, signal), signal);
260
+ }
261
+ catch (error) {
262
+ if (isAborted(signal))
263
+ return false;
264
+ throw error;
265
+ }
266
+ return !isAborted(signal);
267
+ }
157
268
  /**
158
269
  * Run the whole device flow: start, show the code, poll until an ending.
159
270
  *
@@ -167,74 +278,148 @@ export function accountLabelFromToken(token, fallback) {
167
278
  export async function runDeviceLogin(options) {
168
279
  if (!hubConfigured(options.environment))
169
280
  return { kind: "not_configured" };
170
- const startRequest = cliLoginStartRequest(options.environment);
281
+ const clientProof = randomBytes(32).toString("base64url");
282
+ const clientProofHash = createHash("sha256").update(clientProof, "utf8").digest("base64url");
283
+ const startRequest = cliLoginStartRequest(options.environment, clientProofHash);
171
284
  if (startRequest === null)
172
285
  return { kind: "not_configured" };
286
+ const loginController = new AbortController();
287
+ const signal = loginController.signal;
288
+ const forwardAbort = () => loginController.abort();
289
+ if (options.interruptSignal?.aborted)
290
+ loginController.abort();
291
+ else
292
+ options.interruptSignal?.addEventListener("abort", forwardAbort, { once: true });
173
293
  let startReply;
174
294
  try {
175
- startReply = await options.transport(startRequest);
295
+ startReply = await awaitWithSignal(options.transport(startRequest, signal), signal);
176
296
  }
177
297
  catch {
298
+ options.interruptSignal?.removeEventListener("abort", forwardAbort);
299
+ if (isAborted(signal))
300
+ return { kind: "cancelled" };
178
301
  return { kind: "error", message: "could not reach the hub" };
179
302
  }
180
303
  if (startReply.status < 200 || startReply.status >= 300) {
304
+ options.interruptSignal?.removeEventListener("abort", forwardAbort);
181
305
  return { kind: "error", message: "the hub refused the sign in request" };
182
306
  }
183
307
  const start = parseLoginStart(startReply.body);
184
308
  if (start === null) {
309
+ options.interruptSignal?.removeEventListener("abort", forwardAbort);
185
310
  return { kind: "error", message: "the hub answered with something this build could not read" };
186
311
  }
312
+ const deadline = Date.now() + start.expiresInSeconds * 1_000;
187
313
  options.emit("Enter this code: " + start.userCode);
188
314
  options.emit("At: " + start.verificationUrl);
189
315
  if (options.open)
190
316
  options.openBrowser?.(start.verificationUrl);
317
+ const deadlineTimer = setTimeout(() => loginController.abort(), Math.max(0, deadline - Date.now()));
191
318
  let intervalSeconds = start.intervalSeconds;
319
+ let serverErrorRetries = 0;
192
320
  const maxAttempts = Math.ceil(start.expiresInSeconds / intervalSeconds) + LOGIN_SAFETY_MARGIN_POLLS;
193
- for (let attempt = 0; attempt < maxAttempts; attempt += 1) {
194
- if (isAborted(options.interruptSignal))
195
- return { kind: "cancelled" };
196
- await options.sleep(intervalSeconds * 1_000);
197
- if (isAborted(options.interruptSignal))
198
- return { kind: "cancelled" };
199
- const pollRequest = cliLoginPollRequest(options.environment, start.deviceCode);
200
- if (pollRequest === null)
201
- return { kind: "error", message: "the device code could not be sent" };
202
- let pollReply;
203
- try {
204
- pollReply = await options.transport(pollRequest);
205
- }
206
- catch {
207
- continue;
208
- }
209
- if (pollReply.status < 200 || pollReply.status >= 300)
210
- continue;
211
- const poll = parseLoginPoll(pollReply.body);
212
- if (poll === null)
213
- continue;
214
- if (poll.status === "pending")
215
- continue;
216
- if (poll.status === "slow_down") {
217
- intervalSeconds += 5;
218
- continue;
321
+ try {
322
+ for (let attempt = 0; attempt < maxAttempts; attempt += 1) {
323
+ if (isAborted(signal))
324
+ return { kind: Date.now() >= deadline ? "expired" : "cancelled" };
325
+ const remaining = deadline - Date.now();
326
+ if (remaining <= 0)
327
+ return { kind: "expired" };
328
+ if (!(await sleepWithSignal(options, Math.min(intervalSeconds * 1_000, remaining), signal))) {
329
+ return { kind: Date.now() >= deadline ? "expired" : "cancelled" };
330
+ }
331
+ if (isAborted(signal) || Date.now() >= deadline)
332
+ return { kind: "expired" };
333
+ const pollRequest = cliLoginPollRequest(options.environment, start.deviceCode, clientProof);
334
+ if (pollRequest === null)
335
+ return { kind: "error", message: "the device code could not be sent" };
336
+ let pollReply;
337
+ try {
338
+ pollReply = await awaitWithSignal(options.transport(pollRequest, signal), signal);
339
+ }
340
+ catch {
341
+ if (isAborted(signal))
342
+ return { kind: Date.now() >= deadline ? "expired" : "cancelled" };
343
+ continue;
344
+ }
345
+ if (isAborted(signal))
346
+ return { kind: Date.now() >= deadline ? "expired" : "cancelled" };
347
+ if (pollReply.status === 403) {
348
+ const message = serverMessage(pollReply.body, [clientProof]);
349
+ return message === null ? { kind: "denied" } : { kind: "denied", message };
350
+ }
351
+ if (pollReply.status === 409)
352
+ return { kind: "expired", message: CODE_CONSUMED_SENTENCE };
353
+ if (pollReply.status === 404 || pollReply.status === 410)
354
+ return { kind: "expired" };
355
+ if (pollReply.status === 429 || pollReply.status === 503) {
356
+ const retryAfter = pollReply.retryAfterSeconds;
357
+ intervalSeconds = nextBackoffInterval(intervalSeconds, retryAfter);
358
+ continue;
359
+ }
360
+ if (pollReply.status >= 500 && pollReply.status <= 599) {
361
+ serverErrorRetries += 1;
362
+ if (serverErrorRetries > MAX_SERVER_ERROR_RETRIES) {
363
+ return {
364
+ kind: "error",
365
+ message: "the hub returned status " + pollReply.status + " while checking sign in"
366
+ };
367
+ }
368
+ intervalSeconds = Math.min(MAX_RETRY_INTERVAL_SECONDS, intervalSeconds * 2);
369
+ continue;
370
+ }
371
+ if (pollReply.status === 202)
372
+ continue;
373
+ if (pollReply.status !== 200) {
374
+ return {
375
+ kind: "error",
376
+ message: "the hub returned status " + pollReply.status + " while checking sign in"
377
+ };
378
+ }
379
+ const poll = parseLoginPoll(pollReply.body);
380
+ if (poll === null)
381
+ continue;
382
+ if (poll.status === "pending")
383
+ continue;
384
+ if (poll.status === "slow_down") {
385
+ intervalSeconds += 5;
386
+ continue;
387
+ }
388
+ if (poll.status === "denied")
389
+ return { kind: "denied" };
390
+ if (poll.status === "expired")
391
+ return { kind: "expired" };
392
+ if (poll.status === "consumed")
393
+ return { kind: "expired", message: CODE_CONSUMED_SENTENCE };
394
+ const session = {
395
+ version: 1,
396
+ token: poll.token,
397
+ expiresAt: poll.expiresAt,
398
+ refreshCredential: poll.refreshCredential,
399
+ refreshExpiresAt: poll.refreshExpiresAt,
400
+ deviceId: poll.deviceId,
401
+ accountLabel: accountLabelFromToken(poll.token, poll.deviceId)
402
+ };
403
+ try {
404
+ await options.storeSession?.(session);
405
+ }
406
+ catch (error) {
407
+ if (error instanceof StorageDiagnosticError) {
408
+ return { kind: "storage_error", message: error.message, diagnostic: error.diagnostic };
409
+ }
410
+ return { kind: "error", message: "could not save the signed in session" };
411
+ }
412
+ const acknowledgement = await acknowledgeDelivery(options, start, start.deviceCode, session.token, clientProof, intervalSeconds, deadline, signal);
413
+ if (acknowledgement.kind === "error")
414
+ return acknowledgement;
415
+ return { kind: "signed_in", session, deliveryConfirmed: acknowledgement.kind === "confirmed" };
219
416
  }
220
- if (poll.status === "denied")
221
- return { kind: "denied" };
222
- if (poll.status === "expired")
223
- return { kind: "expired" };
224
- if (poll.status === "consumed")
225
- return { kind: "expired", message: CODE_CONSUMED_SENTENCE };
226
- const session = {
227
- version: 1,
228
- token: poll.token,
229
- expiresAt: poll.expiresAt,
230
- refreshCredential: poll.refreshCredential,
231
- refreshExpiresAt: poll.refreshExpiresAt,
232
- deviceId: poll.deviceId,
233
- accountLabel: accountLabelFromToken(poll.token, poll.deviceId)
234
- };
235
- return { kind: "signed_in", session };
417
+ return { kind: "expired" };
418
+ }
419
+ finally {
420
+ clearTimeout(deadlineTimer);
421
+ options.interruptSignal?.removeEventListener("abort", forwardAbort);
236
422
  }
237
- return { kind: "expired" };
238
423
  }
239
424
  /**
240
425
  * Make sure a session is good for one more upload, renewing if it is not.
@@ -1 +1 @@
1
- {"version":3,"file":"hub-auth.js","sourceRoot":"","sources":["../src/hub-auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hub-auth.js","sourceRoot":"","sources":["../src/hub-auth.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,9 @@
1
1
  import { type Snapshot } from "@openlimiter/core";
2
2
  import { type HubTransport } from "./hub.js";
3
3
  export declare const SYNC_CURSOR_FILE_NAME = "openlimiter-sync-cursor.json";
4
+ export declare const OPENROUTER_BASELINE_FILE_NAME = "openlimiter-openrouter-baseline.json";
5
+ export declare function syncIsDue(directory: string, now: string): Promise<boolean>;
6
+ export declare function recordSyncAttempt(directory: string, now: string): Promise<void>;
4
7
  /** The contract version this build speaks, and nothing else. */
5
8
  export declare const SYNC_SCHEMA_VERSION = 2;
6
9
  /**
@@ -11,7 +14,7 @@ export declare const SYNC_SCHEMA_VERSION = 2;
11
14
  * inside a command a status line depends on. See `acquire/identity.ts` in the
12
15
  * core package for the same choice, made for the same reason.
13
16
  */
14
- export declare const SYNC_CLIENT_VERSION = "1.3.1";
17
+ export declare const SYNC_CLIENT_VERSION = "1.3.3";
15
18
  /** Most rows one envelope may carry, usage and spend counted together. */
16
19
  export declare const SYNC_MAX_ROWS = 128;
17
20
  /** How long an unresolved upload may still be retried as itself. */
@@ -83,18 +86,18 @@ export declare function usageSamplesFromSnapshots(snapshots: readonly Snapshot[]
83
86
  /**
84
87
  * Every spend row the cache has enough to build.
85
88
  *
86
- * This build tracks a point in time reading, not a month to date total with a
87
- * forecast: those live in the desktop's dedicated spend engine, which this
88
- * package does not have. So every row this function builds states its period
89
- * honestly as "the start of this month through the moment of this upload"
90
- * and never claims a forecast or a completed period it did not compute.
89
+ * Fixed windows spanning the observation's complete calendar month establish
90
+ * monthly spending directly. OpenRouter lifetime readings use a local per
91
+ * account baseline and contribute only the delta since that reading. Other
92
+ * lifetime credits and rolling windows stay local. The source period ends at
93
+ * the observation, never at the upload.
91
94
  * `usedAmount`, `limitAmount` and `currency` travel together or not at all
92
95
  * (see `Snapshot` in the core package), which is what this reads as "the
93
96
  * cache has one".
94
97
  */
95
98
  /** The providers the hub accepts an API spend sample for (mirrors API_PROVIDERS in the server contract); every other provider's spend stays local, otherwise one row would void the whole envelope. */
96
99
  export declare const SYNC_API_SPEND_PROVIDERS: ReadonlySet<string>;
97
- export declare function apiSpendSamplesFromSnapshots(snapshots: readonly Snapshot[], envelopeObservedAt: string): ApiSpendSample[];
100
+ export declare function apiSpendSamplesFromSnapshots(snapshots: readonly Snapshot[], _envelopeObservedAt: string, directory?: string): Promise<ApiSpendSample[]>;
98
101
  export interface EnvelopeIdentity {
99
102
  readonly deviceId: string;
100
103
  readonly eventId: string;
@@ -118,6 +121,8 @@ export interface RunSyncOptions {
118
121
  readonly token: string;
119
122
  readonly deviceId: string;
120
123
  readonly snapshots: readonly Snapshot[];
124
+ /** Set only when the caller already owns the session lock. */
125
+ readonly sessionLockHeld?: boolean;
121
126
  }
122
127
  export type SyncResult = {
123
128
  readonly kind: "nothing_to_sync";
@@ -129,15 +134,11 @@ export type SyncResult = {
129
134
  readonly kind: "revoked";
130
135
  } | {
131
136
  readonly kind: "rejected";
137
+ } | {
138
+ readonly kind: "sequence_mismatch";
132
139
  } | {
133
140
  readonly kind: "unavailable";
134
141
  };
135
- /**
136
- * One upload, on the version 2 contract, with the same three way ending the
137
- * hub's cursor rule requires: accepted advances the cursor, a reply that
138
- * never arrived leaves the same upload pending for the next run, and a
139
- * conflict names the hub's own sequence and is retried once.
140
- */
141
142
  export declare function runSync(options: RunSyncOptions): Promise<SyncResult>;
142
143
  /** The state directory's default, exported so a caller need not repeat it. */
143
144
  export declare function defaultSyncDirectory(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"hub-sync.d.ts","sourceRoot":"","sources":["../src/hub-sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hub-sync.d.ts","sourceRoot":"","sources":["../src/hub-sync.ts"],"names":[],"mappings":"AAuBA,OAAO,EAOL,KAAK,QAAQ,EACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAsC,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAGjF,eAAO,MAAM,qBAAqB,iCAAiC,CAAC;AACpE,eAAO,MAAM,6BAA6B,yCAAyC,CAAC;AAGpF,wBAAsB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAKhF;AAED,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAErF;AAED,gEAAgE;AAChE,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,UAAU,CAAC;AAE3C,0EAA0E;AAC1E,eAAO,MAAM,aAAa,MAAM,CAAC;AAEjC,oEAAoE;AACpE,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,cAAc,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9C,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,SAAS,WAAW,EAAE,CAAC;IAC/C,QAAQ,CAAC,iBAAiB,EAAE,SAAS,cAAc,EAAE,CAAC;CACvD;AAqBD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,SAAS,QAAQ,EAAE,EAC9B,GAAG,EAAE,MAAM,GACV,WAAW,EAAE,CAoBf;AAyED;;;;;;;;;;;GAWG;AACH,uMAAuM;AACvM,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,MAAM,CAAyD,CAAC;AAEnH,wBAAsB,4BAA4B,CAChD,SAAS,EAAE,SAAS,QAAQ,EAAE,EAC9B,mBAAmB,EAAE,MAAM,EAC3B,SAAS,SAA0B,GAClC,OAAO,CAAC,cAAc,EAAE,CAAC,CAqF3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,gBAAgB,EAC1B,YAAY,EAAE,SAAS,WAAW,EAAE,EACpC,eAAe,EAAE,SAAS,cAAc,EAAE,GACzC,YAAY,CAkBd;AAkJD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IACnE,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAC;IACxC,8DAA8D;IAC9D,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAA;CAAE,GACpC;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAClF;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAA;CAAE,GACtC;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC;AAmFrC,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAG1E;AAED,8EAA8E;AAC9E,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C"}