@thelioo/opencode-balancer 0.1.5 → 0.1.8
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/dist/server/auth-watcher.d.ts +1 -0
- package/dist/server/auth-watcher.js +1 -1
- package/dist/server/auth-watcher.js.map +1 -1
- package/dist/tui/actions.d.ts +1 -1
- package/dist/tui/actions.js +6 -2
- package/dist/tui/actions.js.map +1 -1
- package/dist/tui/actions.ts +7 -3
- package/dist/tui/components/priority-screen.d.ts +1 -1
- package/dist/tui/components/priority-screen.tsx +4 -3
- package/dist/tui/components/provider-model-dialog.d.ts +2 -1
- package/dist/tui/components/provider-model-dialog.tsx +21 -11
- package/dist/tui/connect.js +5 -3
- package/dist/tui/connect.js.map +1 -1
- package/dist/tui/connect.ts +5 -3
- package/dist/tui/selected-account-bar-sync.d.ts +10 -0
- package/dist/tui/selected-account-bar-sync.js +26 -0
- package/dist/tui/selected-account-bar-sync.js.map +1 -0
- package/dist/tui/selected-account-bar-sync.ts +32 -0
- package/dist/tui/tui.js +39 -6
- package/dist/tui/tui.js.map +1 -1
- package/dist/tui/tui.tsx +40 -8
- package/package.json +1 -1
- package/dist/balancer/accounts.d.ts +0 -9
- package/dist/balancer/accounts.js +0 -102
- package/dist/balancer/accounts.js.map +0 -1
- package/dist/balancer/auth-watcher.d.ts +0 -1
- package/dist/balancer/auth-watcher.js +0 -30
- package/dist/balancer/auth-watcher.js.map +0 -1
- package/dist/balancer/commands.d.ts +0 -1
- package/dist/balancer/commands.js +0 -94
- package/dist/balancer/commands.js.map +0 -1
- package/dist/balancer/core.d.ts +0 -6
- package/dist/balancer/core.js +0 -7
- package/dist/balancer/core.js.map +0 -1
- package/dist/balancer/fetch-patch.d.ts +0 -1
- package/dist/balancer/fetch-patch.js +0 -110
- package/dist/balancer/fetch-patch.js.map +0 -1
- package/dist/balancer/http.d.ts +0 -40
- package/dist/balancer/http.js +0 -199
- package/dist/balancer/http.js.map +0 -1
- package/dist/balancer/native.d.ts +0 -3
- package/dist/balancer/native.js +0 -16
- package/dist/balancer/native.js.map +0 -1
- package/dist/balancer/state.d.ts +0 -14
- package/dist/balancer/state.js +0 -16
- package/dist/balancer/state.js.map +0 -1
- package/dist/balancer/storage.d.ts +0 -8
- package/dist/balancer/storage.js +0 -92
- package/dist/balancer/storage.js.map +0 -1
- package/dist/balancer/types.d.ts +0 -44
- package/dist/balancer/types.js +0 -2
- package/dist/balancer/types.js.map +0 -1
- package/dist/tui/components/alias-dialog.js +0 -57
- package/dist/tui/components/alias-dialog.js.map +0 -1
- package/dist/tui/components/dashboard.js +0 -201
- package/dist/tui/components/dashboard.js.map +0 -1
- package/dist/tui/components/priority-screen.js +0 -120
- package/dist/tui/components/priority-screen.js.map +0 -1
- package/dist/tui/components/provider-model-dialog.js +0 -45
- package/dist/tui/components/provider-model-dialog.js.map +0 -1
- package/dist/tui/components/rename-dialog.js +0 -24
- package/dist/tui/components/rename-dialog.js.map +0 -1
- package/dist/tui/components/sidebar.js +0 -27
- package/dist/tui/components/sidebar.js.map +0 -1
- package/dist/tui/components/status-indicator.js +0 -59
- package/dist/tui/components/status-indicator.js.map +0 -1
- package/dist/tui/components/usage-bar.js +0 -7
- package/dist/tui/components/usage-bar.js.map +0 -1
- package/dist/tui/components/usage-display.js +0 -32
- package/dist/tui/components/usage-display.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/balancer/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import type { AuthInfo } from "./types";
|
|
2
|
-
export declare function setNativeAuth(client: any, providerID: string, auth: AuthInfo): Promise<void>;
|
|
3
|
-
export declare function showToast(client: any, message: string, variant?: "info" | "success" | "warning" | "error"): Promise<void>;
|
package/dist/balancer/native.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { now, state } from "./state";
|
|
2
|
-
export async function setNativeAuth(client, providerID, auth) {
|
|
3
|
-
state.suppressAuthCaptureUntil.set(providerID, now() + 2_000);
|
|
4
|
-
await client.auth
|
|
5
|
-
.set({
|
|
6
|
-
path: { id: providerID },
|
|
7
|
-
body: auth,
|
|
8
|
-
})
|
|
9
|
-
.catch(() => undefined);
|
|
10
|
-
}
|
|
11
|
-
export async function showToast(client, message, variant = "info") {
|
|
12
|
-
await client.tui
|
|
13
|
-
.showToast({ body: { message, variant, duration: 15_000 } })
|
|
14
|
-
.catch(() => undefined);
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=native.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/balancer/native.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGrC,MAAM,CAAC,KAAK,UAAU,aAAa,CAC/B,MAAW,EACX,UAAkB,EAClB,IAAc;IAEd,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;IAC9D,MAAM,MAAM,CAAC,IAAI;SACZ,GAAG,CAAC;QACD,IAAI,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE;QACxB,IAAI,EAAE,IAAI;KACb,CAAC;SACD,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC3B,MAAW,EACX,OAAe,EACf,UAAoD,MAAM;IAE1D,MAAM,MAAM,CAAC,GAAG;SACX,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC;SAC3D,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AAChC,CAAC"}
|
package/dist/balancer/state.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { AuthInfo, PendingRequest } from "./types";
|
|
2
|
-
export declare const INTERNAL_REQUEST_HEADER = "x-opencode-balancer-request";
|
|
3
|
-
export declare const BALANCER_ALIAS_INPUT = "__opencode_balancer_alias";
|
|
4
|
-
export declare const BALANCER_METADATA_KEY = "opencodeBalancerCommand";
|
|
5
|
-
export declare const RETRYABLE_STATUS: Set<number>;
|
|
6
|
-
export declare const state: {
|
|
7
|
-
fetchPatched: boolean;
|
|
8
|
-
pendingRequests: Map<string, PendingRequest>;
|
|
9
|
-
pendingOauthAlias: Map<string, string>;
|
|
10
|
-
suppressAuthCaptureUntil: Map<string, number>;
|
|
11
|
-
lastAuthSnapshot: Record<string, AuthInfo>;
|
|
12
|
-
watchStarted: boolean;
|
|
13
|
-
};
|
|
14
|
-
export declare function now(): number;
|
package/dist/balancer/state.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export const INTERNAL_REQUEST_HEADER = "x-opencode-balancer-request";
|
|
2
|
-
export const BALANCER_ALIAS_INPUT = "__opencode_balancer_alias";
|
|
3
|
-
export const BALANCER_METADATA_KEY = "opencodeBalancerCommand";
|
|
4
|
-
export const RETRYABLE_STATUS = new Set([429, 500, 502, 503, 504, 529]);
|
|
5
|
-
export const state = {
|
|
6
|
-
fetchPatched: false,
|
|
7
|
-
pendingRequests: new Map(),
|
|
8
|
-
pendingOauthAlias: new Map(),
|
|
9
|
-
suppressAuthCaptureUntil: new Map(),
|
|
10
|
-
lastAuthSnapshot: {},
|
|
11
|
-
watchStarted: false,
|
|
12
|
-
};
|
|
13
|
-
export function now() {
|
|
14
|
-
return Date.now();
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=state.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/balancer/state.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,uBAAuB,GAAG,6BAA6B,CAAC;AACrE,MAAM,CAAC,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;AAChE,MAAM,CAAC,MAAM,qBAAqB,GAAG,yBAAyB,CAAC;AAC/D,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAExE,MAAM,CAAC,MAAM,KAAK,GAAG;IACjB,YAAY,EAAE,KAAK;IACnB,eAAe,EAAE,IAAI,GAAG,EAA0B;IAClD,iBAAiB,EAAE,IAAI,GAAG,EAAkB;IAC5C,wBAAwB,EAAE,IAAI,GAAG,EAAkB;IACnD,gBAAgB,EAAE,EAA8B;IAChD,YAAY,EAAE,KAAK;CACtB,CAAC;AAEF,MAAM,UAAU,GAAG;IACf,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;AACtB,CAAC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { AuthInfo, Store } from "./types";
|
|
2
|
-
export declare function storePath(): string;
|
|
3
|
-
export declare function authPath(): string;
|
|
4
|
-
export declare function readStore(): Promise<Store>;
|
|
5
|
-
export declare function writeStore(store: Store): Promise<void>;
|
|
6
|
-
export declare function readNativeAuth(): Promise<Record<string, AuthInfo>>;
|
|
7
|
-
export declare function isAuthInfo(value: unknown): value is AuthInfo;
|
|
8
|
-
export declare function captureAuth(providerID: string, auth: AuthInfo, source: NonNullable<Store["lastCaptured"]>["source"]): Promise<Store>;
|
package/dist/balancer/storage.js
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { now } from "./state";
|
|
2
|
-
function joinPath(...parts) {
|
|
3
|
-
return parts
|
|
4
|
-
.filter(Boolean)
|
|
5
|
-
.join("/")
|
|
6
|
-
.replace(/\/+/g, "/");
|
|
7
|
-
}
|
|
8
|
-
function homeDir() {
|
|
9
|
-
return Bun.env.HOME || "/";
|
|
10
|
-
}
|
|
11
|
-
function xdgConfigHome() {
|
|
12
|
-
return Bun.env.XDG_CONFIG_HOME || joinPath(homeDir(), ".config");
|
|
13
|
-
}
|
|
14
|
-
function xdgDataHome() {
|
|
15
|
-
return Bun.env.XDG_DATA_HOME || joinPath(homeDir(), ".local", "share");
|
|
16
|
-
}
|
|
17
|
-
function configDir() {
|
|
18
|
-
return Bun.env.OPENCODE_CONFIG_DIR || joinPath(xdgConfigHome(), "opencode");
|
|
19
|
-
}
|
|
20
|
-
function dataDir() {
|
|
21
|
-
return joinPath(xdgDataHome(), "opencode");
|
|
22
|
-
}
|
|
23
|
-
export function storePath() {
|
|
24
|
-
return joinPath(configDir(), "balancer-accounts.json");
|
|
25
|
-
}
|
|
26
|
-
export function authPath() {
|
|
27
|
-
return joinPath(dataDir(), "auth.json");
|
|
28
|
-
}
|
|
29
|
-
function emptyStore() {
|
|
30
|
-
return { version: 1, providers: {} };
|
|
31
|
-
}
|
|
32
|
-
async function readJsonFile(path, fallback) {
|
|
33
|
-
try {
|
|
34
|
-
const file = Bun.file(path);
|
|
35
|
-
if (!(await file.exists()))
|
|
36
|
-
return fallback;
|
|
37
|
-
return JSON.parse(await file.text());
|
|
38
|
-
}
|
|
39
|
-
catch {
|
|
40
|
-
return fallback;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
async function writeJsonFile(path, value) {
|
|
44
|
-
await Bun.write(path, `${JSON.stringify(value, null, 2)}\n`, {
|
|
45
|
-
mode: 0o600,
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
export async function readStore() {
|
|
49
|
-
const parsed = await readJsonFile(storePath(), emptyStore());
|
|
50
|
-
if (parsed.version !== 1 || !parsed.providers)
|
|
51
|
-
return emptyStore();
|
|
52
|
-
return parsed;
|
|
53
|
-
}
|
|
54
|
-
export async function writeStore(store) {
|
|
55
|
-
await writeJsonFile(storePath(), store);
|
|
56
|
-
}
|
|
57
|
-
export async function readNativeAuth() {
|
|
58
|
-
if (Bun.env.OPENCODE_AUTH_CONTENT) {
|
|
59
|
-
try {
|
|
60
|
-
return JSON.parse(Bun.env.OPENCODE_AUTH_CONTENT);
|
|
61
|
-
}
|
|
62
|
-
catch {
|
|
63
|
-
return {};
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return readJsonFile(authPath(), {});
|
|
67
|
-
}
|
|
68
|
-
export function isAuthInfo(value) {
|
|
69
|
-
if (!value || typeof value !== "object")
|
|
70
|
-
return false;
|
|
71
|
-
const type = value.type;
|
|
72
|
-
if (type === "api")
|
|
73
|
-
return typeof value.key === "string";
|
|
74
|
-
if (type === "oauth") {
|
|
75
|
-
const item = value;
|
|
76
|
-
return (typeof item.refresh === "string" &&
|
|
77
|
-
typeof item.access === "string" &&
|
|
78
|
-
typeof item.expires === "number");
|
|
79
|
-
}
|
|
80
|
-
if (type === "wellknown") {
|
|
81
|
-
const item = value;
|
|
82
|
-
return typeof item.key === "string" && typeof item.token === "string";
|
|
83
|
-
}
|
|
84
|
-
return false;
|
|
85
|
-
}
|
|
86
|
-
export async function captureAuth(providerID, auth, source) {
|
|
87
|
-
const store = await readStore();
|
|
88
|
-
store.lastCaptured = { providerID, auth, capturedAt: now(), source };
|
|
89
|
-
await writeStore(store);
|
|
90
|
-
return store;
|
|
91
|
-
}
|
|
92
|
-
//# sourceMappingURL=storage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/balancer/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAG9B,SAAS,QAAQ,CAAC,GAAG,KAAe;IAChC,OAAO,KAAK;SACP,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC;SACT,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,OAAO;IACZ,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC;AAC/B,CAAC;AAED,SAAS,aAAa;IAClB,OAAO,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,WAAW;IAChB,OAAO,GAAG,CAAC,GAAG,CAAC,aAAa,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,SAAS;IACd,OAAO,GAAG,CAAC,GAAG,CAAC,mBAAmB,IAAI,QAAQ,CAAC,aAAa,EAAE,EAAE,UAAU,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,OAAO;IACZ,OAAO,QAAQ,CAAC,WAAW,EAAE,EAAE,UAAU,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,SAAS;IACrB,OAAO,QAAQ,CAAC,SAAS,EAAE,EAAE,wBAAwB,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,QAAQ;IACpB,OAAO,QAAQ,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,UAAU;IACf,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AACzC,CAAC;AAED,KAAK,UAAU,YAAY,CAAI,IAAY,EAAE,QAAW;IACpD,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YAAE,OAAO,QAAQ,CAAC;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAM,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,QAAQ,CAAC;IACpB,CAAC;AACL,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,KAAc;IACrD,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QACzD,IAAI,EAAE,KAAK;KACP,CAAC,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC3B,MAAM,MAAM,GAAG,MAAM,YAAY,CAAQ,SAAS,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IACpE,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS;QAAE,OAAO,UAAU,EAAE,CAAC;IACnE,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAY;IACzC,MAAM,aAAa,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAChC,IAAI,GAAG,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;QAChC,IAAI,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,qBAAqB,CAG9C,CAAC;QACN,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;IACD,OAAO,YAAY,CAA2B,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAc;IACrC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,IAAI,GAAI,KAA4B,CAAC,IAAI,CAAC;IAChD,IAAI,IAAI,KAAK,KAAK;QACd,OAAO,OAAQ,KAA2B,CAAC,GAAG,KAAK,QAAQ,CAAC;IAChE,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,KAIZ,CAAC;QACF,OAAO,CACH,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;YAChC,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;YAC/B,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CACnC,CAAC;IACN,CAAC;IACD,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,KAA2C,CAAC;QACzD,OAAO,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC;IAC1E,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC7B,UAAkB,EAClB,IAAc,EACd,MAAoD;IAEpD,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;IAChC,KAAK,CAAC,YAAY,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC;IACrE,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC;IACxB,OAAO,KAAK,CAAC;AACjB,CAAC"}
|
package/dist/balancer/types.d.ts
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
export type AuthInfo = {
|
|
2
|
-
type: "api";
|
|
3
|
-
key: string;
|
|
4
|
-
metadata?: Record<string, string>;
|
|
5
|
-
} | {
|
|
6
|
-
type: "oauth";
|
|
7
|
-
refresh: string;
|
|
8
|
-
access: string;
|
|
9
|
-
expires: number;
|
|
10
|
-
accountId?: string;
|
|
11
|
-
enterpriseUrl?: string;
|
|
12
|
-
} | {
|
|
13
|
-
type: "wellknown";
|
|
14
|
-
key: string;
|
|
15
|
-
token: string;
|
|
16
|
-
};
|
|
17
|
-
export type Account = {
|
|
18
|
-
alias: string;
|
|
19
|
-
providerID: string;
|
|
20
|
-
auth: AuthInfo;
|
|
21
|
-
createdAt: number;
|
|
22
|
-
updatedAt: number;
|
|
23
|
-
lastUsedAt?: number;
|
|
24
|
-
rateLimitedUntil?: number;
|
|
25
|
-
failures?: number;
|
|
26
|
-
};
|
|
27
|
-
export type ProviderState = {
|
|
28
|
-
active?: string;
|
|
29
|
-
accounts: Record<string, Account>;
|
|
30
|
-
};
|
|
31
|
-
export type Store = {
|
|
32
|
-
version: 1;
|
|
33
|
-
providers: Record<string, ProviderState>;
|
|
34
|
-
lastCaptured?: {
|
|
35
|
-
providerID: string;
|
|
36
|
-
auth: AuthInfo;
|
|
37
|
-
capturedAt: number;
|
|
38
|
-
source: "auth-file" | "http" | "oauth-callback";
|
|
39
|
-
};
|
|
40
|
-
};
|
|
41
|
-
export type PendingRequest = {
|
|
42
|
-
providerID: string;
|
|
43
|
-
account?: Account;
|
|
44
|
-
};
|
package/dist/balancer/types.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/balancer/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { jsxs as _jsxs, jsx as _jsx } from "@opentui/solid/jsx-runtime";
|
|
2
|
-
import { normalizeAlias } from "../../core/accounts";
|
|
3
|
-
import { claimPendingPrompt, pendingPromptGroupID, releasePendingPrompt } from "../../core/pending";
|
|
4
|
-
import { savePendingAlias } from "../actions";
|
|
5
|
-
function errorMessage(error) {
|
|
6
|
-
return error instanceof Error && error.message ? error.message : "Failed to save alias";
|
|
7
|
-
}
|
|
8
|
-
const openPendingDialogs = new Set();
|
|
9
|
-
export function openAliasDialog(api, state, pendingID) {
|
|
10
|
-
const dialogID = pendingPromptGroupID(state.db, pendingID) ?? pendingID;
|
|
11
|
-
if (openPendingDialogs.has(dialogID)) {
|
|
12
|
-
if ("open" in api.ui.dialog && !api.ui.dialog.open)
|
|
13
|
-
openPendingDialogs.delete(dialogID);
|
|
14
|
-
else
|
|
15
|
-
return false;
|
|
16
|
-
}
|
|
17
|
-
let claimed = claimPendingPrompt(state.db, pendingID);
|
|
18
|
-
if (!claimed) {
|
|
19
|
-
releasePendingPrompt(state.db, pendingID);
|
|
20
|
-
claimed = claimPendingPrompt(state.db, pendingID);
|
|
21
|
-
}
|
|
22
|
-
if (!claimed)
|
|
23
|
-
return false;
|
|
24
|
-
const pending = state.pending().find((item) => item.id === pendingID) ?? claimed;
|
|
25
|
-
const providerID = pending?.providerID ?? "provider";
|
|
26
|
-
openPendingDialogs.add(dialogID);
|
|
27
|
-
const close = () => {
|
|
28
|
-
openPendingDialogs.delete(dialogID);
|
|
29
|
-
api.ui.dialog.clear();
|
|
30
|
-
};
|
|
31
|
-
try {
|
|
32
|
-
api.ui.dialog.setSize("medium");
|
|
33
|
-
api.ui.dialog.replace(() => (_jsx(api.ui.DialogPrompt, { title: "Save pending connection", placeholder: "account alias", description: () => (_jsxs("text", { fg: api.theme.current.textMuted, wrapMode: "none", children: ["Choose an alias for ", providerID, "/", pending?.authType ?? "auth", "."] })), onCancel: close, onConfirm: async (value) => {
|
|
34
|
-
const alias = normalizeAlias(value);
|
|
35
|
-
if (!alias) {
|
|
36
|
-
api.ui.toast({ variant: "error", message: "Alias is required" });
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
try {
|
|
40
|
-
const account = savePendingAlias(state, pendingID, alias);
|
|
41
|
-
close();
|
|
42
|
-
api.ui.toast({ variant: "success", message: `Saved ${account.providerID}/${account.alias}` });
|
|
43
|
-
}
|
|
44
|
-
catch (error) {
|
|
45
|
-
openPendingDialogs.delete(dialogID);
|
|
46
|
-
api.ui.toast({ variant: "error", message: errorMessage(error) });
|
|
47
|
-
}
|
|
48
|
-
} })));
|
|
49
|
-
return true;
|
|
50
|
-
}
|
|
51
|
-
catch {
|
|
52
|
-
openPendingDialogs.delete(dialogID);
|
|
53
|
-
releasePendingPrompt(state.db, pendingID);
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=alias-dialog.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"alias-dialog.js","sourceRoot":"","sources":["../../../src/tui/components/alias-dialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
import { jsxs as _jsxs, jsx as _jsx } from "@opentui/solid/jsx-runtime";
|
|
2
|
-
import { createMemo, createSignal, For, onCleanup, onMount, Show } from "solid-js";
|
|
3
|
-
import { listAccounts } from "../../core/accounts";
|
|
4
|
-
import { getBalancingEnabled, setBalancingEnabled } from "../../core/priority";
|
|
5
|
-
import { getUsageSnapshot } from "../../core/usage/store";
|
|
6
|
-
import { dashboardSelectionMarker, moveDashboardFocus, reduceDashboardKey } from "../dashboard-keys";
|
|
7
|
-
import { dashboardContentHeight, dashboardLayoutMode } from "../responsive";
|
|
8
|
-
import { selectedRowColors } from "../selection-colors";
|
|
9
|
-
import { UsageSnapshotBar } from "./usage-display";
|
|
10
|
-
export function Dashboard(props) {
|
|
11
|
-
const theme = () => props.api.theme.current;
|
|
12
|
-
const selectedColors = () => selectedRowColors(theme());
|
|
13
|
-
const [confirmAccount, setConfirmAccount] = createSignal();
|
|
14
|
-
const [accounts, setAccounts] = createSignal(listAccounts(props.state.db));
|
|
15
|
-
const [balancing, setBalancing] = createSignal(getBalancingEnabled(props.state.db));
|
|
16
|
-
const [usage, setUsage] = createSignal({});
|
|
17
|
-
const [cursor, setCursor] = createSignal(0);
|
|
18
|
-
const [headerCursor, setHeaderCursor] = createSignal(0);
|
|
19
|
-
const [focusArea, setFocusArea] = createSignal("content");
|
|
20
|
-
const layoutMode = () => dashboardLayoutMode({
|
|
21
|
-
width: props.api.renderer.width,
|
|
22
|
-
height: props.api.renderer.height,
|
|
23
|
-
});
|
|
24
|
-
const compact = () => layoutMode() === "compact";
|
|
25
|
-
const contentHeight = () => dashboardContentHeight({ height: props.api.renderer.height });
|
|
26
|
-
const headerActions = [
|
|
27
|
-
{ type: "close", key: "close", label: "close" },
|
|
28
|
-
{ type: "priority", key: "priority", label: "priority" },
|
|
29
|
-
];
|
|
30
|
-
const rows = createMemo(() => [
|
|
31
|
-
{ type: "balancing", key: "balancing" },
|
|
32
|
-
{ type: "connect", key: "connect" },
|
|
33
|
-
...accounts().map((account) => ({
|
|
34
|
-
type: "account",
|
|
35
|
-
key: `account:${account.providerID}/${account.alias}`,
|
|
36
|
-
providerID: account.providerID,
|
|
37
|
-
alias: account.alias,
|
|
38
|
-
})),
|
|
39
|
-
]);
|
|
40
|
-
const clampCursor = (value) => Math.max(0, Math.min(value, Math.max(0, rows().length - 1)));
|
|
41
|
-
const clampHeaderCursor = (value) => Math.max(0, Math.min(value, headerActions.length - 1));
|
|
42
|
-
const refreshDashboard = () => {
|
|
43
|
-
const nextAccounts = listAccounts(props.state.db);
|
|
44
|
-
setAccounts(nextAccounts);
|
|
45
|
-
setBalancing(getBalancingEnabled(props.state.db));
|
|
46
|
-
setUsage(Object.fromEntries(nextAccounts.map((account) => [
|
|
47
|
-
`${account.providerID}/${account.alias}`,
|
|
48
|
-
getUsageSnapshot(props.state.db, account.providerID, account.alias),
|
|
49
|
-
])));
|
|
50
|
-
setCursor((value) => clampCursor(value));
|
|
51
|
-
};
|
|
52
|
-
refreshDashboard();
|
|
53
|
-
const timer = setInterval(refreshDashboard, 500);
|
|
54
|
-
onCleanup(() => clearInterval(timer));
|
|
55
|
-
const Button = (buttonProps) => (_jsx("box", { onMouseUp: buttonProps.onClick, paddingLeft: 0, paddingRight: 0, children: _jsxs("text", { fg: buttonProps.danger ? theme().warning : theme().accent, wrapMode: "none", truncate: true, children: ["[ ", buttonProps.label, " ]"] }) }));
|
|
56
|
-
const Chip = (chipProps) => (_jsxs("text", { fg: chipProps.danger ? theme().warning : theme().accent, wrapMode: "none", children: ["[", chipProps.keyName, "] ", _jsx("span", { style: { fg: theme().textMuted }, children: chipProps.label })] }));
|
|
57
|
-
const SectionTitle = (sectionProps) => (_jsxs("box", { flexDirection: "row", gap: 1, height: 1, flexShrink: 0, children: [_jsx("text", { fg: theme().primary, wrapMode: "none", children: sectionProps.label }), _jsx("text", { fg: theme().textMuted, wrapMode: "none", children: sectionProps.count === undefined ? "" : `${sectionProps.count}` })] }));
|
|
58
|
-
const Row = (rowProps) => (_jsx("box", { flexDirection: "row", width: "100%", minWidth: 0, height: 1, flexShrink: 0, backgroundColor: rowProps.selected ? selectedColors().bg : undefined, onMouseUp: rowProps.onMouseUp, children: rowProps.children }));
|
|
59
|
-
const selected = (key) => focusArea() === "content" && rows()[cursor()]?.key === key;
|
|
60
|
-
const headerSelected = (key) => focusArea() === "header" && headerActions[headerCursor()]?.key === key;
|
|
61
|
-
const rowMarker = (key) => dashboardSelectionMarker({
|
|
62
|
-
focusedArea: focusArea(),
|
|
63
|
-
itemArea: "content",
|
|
64
|
-
selected: rows()[cursor()]?.key === key,
|
|
65
|
-
});
|
|
66
|
-
const headerMarker = (key) => dashboardSelectionMarker({
|
|
67
|
-
focusedArea: focusArea(),
|
|
68
|
-
itemArea: "header",
|
|
69
|
-
selected: headerActions[headerCursor()]?.key === key,
|
|
70
|
-
});
|
|
71
|
-
const current = () => rows()[cursor()];
|
|
72
|
-
const currentHeader = () => headerActions[headerCursor()];
|
|
73
|
-
const selectedLabel = () => {
|
|
74
|
-
const row = current();
|
|
75
|
-
if (focusArea() === "header")
|
|
76
|
-
return currentHeader()?.type ?? "header";
|
|
77
|
-
if (!row)
|
|
78
|
-
return "none";
|
|
79
|
-
if (row.type === "balancing")
|
|
80
|
-
return "balancing";
|
|
81
|
-
if (row.type === "connect")
|
|
82
|
-
return "connect";
|
|
83
|
-
if (row.type === "account")
|
|
84
|
-
return `account/${row.providerID}/${row.alias}`;
|
|
85
|
-
return "priority";
|
|
86
|
-
};
|
|
87
|
-
const selectedAction = () => {
|
|
88
|
-
if (focusArea() === "header") {
|
|
89
|
-
const action = currentHeader();
|
|
90
|
-
return action?.type === "close" ? "Enter closes dashboard" : "Enter opens provider priority matrix";
|
|
91
|
-
}
|
|
92
|
-
const row = current();
|
|
93
|
-
if (!row)
|
|
94
|
-
return "Enter opens selected item";
|
|
95
|
-
if (row.type === "balancing")
|
|
96
|
-
return "Enter/Space toggles automatic balancing";
|
|
97
|
-
if (row.type === "connect")
|
|
98
|
-
return "Enter/C connects a new provider";
|
|
99
|
-
if (confirmAccount() === `${row.providerID}/${row.alias}`)
|
|
100
|
-
return "Y confirms removal · N cancels";
|
|
101
|
-
return "R to rename · D requests removal confirmation";
|
|
102
|
-
};
|
|
103
|
-
const accountLabel = (account) => `${account.providerID}/${account.alias} (${account.authType})`;
|
|
104
|
-
const removeCurrent = () => {
|
|
105
|
-
const row = current();
|
|
106
|
-
if (row?.type === "account")
|
|
107
|
-
setConfirmAccount(`${row.providerID}/${row.alias}`);
|
|
108
|
-
};
|
|
109
|
-
const toggleBalancing = () => {
|
|
110
|
-
setBalancingEnabled(props.state.db, !balancing());
|
|
111
|
-
refreshDashboard();
|
|
112
|
-
props.state.refresh();
|
|
113
|
-
};
|
|
114
|
-
const confirmCurrent = () => {
|
|
115
|
-
const row = current();
|
|
116
|
-
if (row?.type === "account" && confirmAccount() === `${row.providerID}/${row.alias}`) {
|
|
117
|
-
setConfirmAccount(undefined);
|
|
118
|
-
props.removeAccount(row.providerID, row.alias);
|
|
119
|
-
refreshDashboard();
|
|
120
|
-
}
|
|
121
|
-
};
|
|
122
|
-
const runPrimary = () => {
|
|
123
|
-
if (focusArea() === "header") {
|
|
124
|
-
const action = currentHeader();
|
|
125
|
-
if (action?.type === "close")
|
|
126
|
-
return props.onBack();
|
|
127
|
-
return props.openPriority();
|
|
128
|
-
}
|
|
129
|
-
const row = current();
|
|
130
|
-
if (!row)
|
|
131
|
-
return;
|
|
132
|
-
if (row.type === "balancing")
|
|
133
|
-
return toggleBalancing();
|
|
134
|
-
if (row.type === "connect")
|
|
135
|
-
return props.openConnect();
|
|
136
|
-
if (row.type === "account")
|
|
137
|
-
return setConfirmAccount(`${row.providerID}/${row.alias}`);
|
|
138
|
-
};
|
|
139
|
-
const handleKey = (event) => {
|
|
140
|
-
if (props.api.ui.dialog.open)
|
|
141
|
-
return;
|
|
142
|
-
const intent = reduceDashboardKey({ name: event.name ?? "" });
|
|
143
|
-
switch (intent.type) {
|
|
144
|
-
case "move-cursor":
|
|
145
|
-
{
|
|
146
|
-
const next = moveDashboardFocus({ area: focusArea(), cursor: cursor(), rowCount: rows().length }, intent.delta);
|
|
147
|
-
setFocusArea(next.area);
|
|
148
|
-
setCursor(clampCursor(next.cursor));
|
|
149
|
-
}
|
|
150
|
-
return;
|
|
151
|
-
case "move-header":
|
|
152
|
-
setFocusArea("header");
|
|
153
|
-
setHeaderCursor((value) => clampHeaderCursor(value + intent.delta));
|
|
154
|
-
return;
|
|
155
|
-
case "primary":
|
|
156
|
-
runPrimary();
|
|
157
|
-
return;
|
|
158
|
-
case "priority":
|
|
159
|
-
props.openPriority();
|
|
160
|
-
return;
|
|
161
|
-
case "connect":
|
|
162
|
-
props.openConnect();
|
|
163
|
-
return;
|
|
164
|
-
case "rename": {
|
|
165
|
-
const row = current();
|
|
166
|
-
if (row?.type === "account")
|
|
167
|
-
props.renameAccount(row.providerID, row.alias);
|
|
168
|
-
return;
|
|
169
|
-
}
|
|
170
|
-
case "remove":
|
|
171
|
-
removeCurrent();
|
|
172
|
-
return;
|
|
173
|
-
case "confirm":
|
|
174
|
-
confirmCurrent();
|
|
175
|
-
return;
|
|
176
|
-
case "cancel":
|
|
177
|
-
setConfirmAccount(undefined);
|
|
178
|
-
return;
|
|
179
|
-
case "back":
|
|
180
|
-
props.onBack();
|
|
181
|
-
return;
|
|
182
|
-
default:
|
|
183
|
-
return;
|
|
184
|
-
}
|
|
185
|
-
};
|
|
186
|
-
let container;
|
|
187
|
-
onMount(() => container?.focus?.());
|
|
188
|
-
return (_jsxs("box", { ref: (ref) => (container = ref), focusable: true, onKeyDown: (event) => handleKey(event), flexDirection: "column", gap: 0, padding: 1, width: "100%", height: "100%", children: [_jsxs("box", { flexDirection: "column", gap: 0, paddingBottom: 1, flexShrink: 0, children: [_jsxs("text", { fg: theme().primary, wrapMode: "none", overflow: "hidden", truncate: true, children: ["opencode-balancer", compact() ? "" : " control center"] }), _jsx(Show, { when: !compact(), children: _jsx("text", { fg: theme().textMuted, wrapMode: "none", overflow: "hidden", truncate: true, children: "Manage accounts, usage, and provider failover." }) }), _jsx("box", { flexDirection: "row", gap: 1, height: 1, flexShrink: 0, children: _jsx(For, { each: headerActions, children: (action, index) => (_jsx("box", { height: 1, flexShrink: 0, backgroundColor: headerSelected(action.key) ? selectedColors().bg : undefined, onMouseUp: () => {
|
|
189
|
-
setFocusArea("header");
|
|
190
|
-
setHeaderCursor(index());
|
|
191
|
-
if (action.type === "close")
|
|
192
|
-
props.onBack();
|
|
193
|
-
else
|
|
194
|
-
props.openPriority();
|
|
195
|
-
}, children: _jsxs("text", { fg: headerSelected(action.key) ? selectedColors().fg : theme().accent, wrapMode: "none", children: [headerMarker(action.key), " [ ", action.label, " ]"] }) })) }) })] }), _jsxs("scrollbox", { height: contentHeight(), scrollbarOptions: { visible: false }, children: [_jsxs("box", { flexDirection: "column", gap: 0, paddingBottom: 1, onMouseUp: () => setCursor(0), children: [_jsx(SectionTitle, { label: "BALANCING" }), _jsx(Row, { selected: selected("balancing"), onMouseUp: toggleBalancing, children: _jsxs("text", { fg: selected("balancing") ? selectedColors().fg : balancing() ? theme().success : theme().textMuted, wrapMode: "none", overflow: "hidden", truncate: true, children: [rowMarker("balancing"), " Automatic balancing: ", balancing() ? "ON" : "OFF"] }) }), _jsx(Show, { when: !compact(), children: _jsx("text", { fg: theme().textMuted, wrapMode: "none", overflow: "hidden", truncate: true, children: "Enter/Space toggles provider failover. Priority config is in the header." }) })] }), _jsxs("box", { flexDirection: "column", gap: 0, paddingBottom: 1, children: [_jsx(SectionTitle, { label: "ACCOUNTS", count: accounts().length }), _jsxs("box", { flexDirection: "column", gap: 0, flexShrink: 0, onMouseUp: () => setCursor(rows().findIndex((row) => row.key === "connect")), children: [_jsx(Row, { selected: selected("connect"), onMouseUp: props.openConnect, children: _jsxs("text", { fg: selected("connect") ? selectedColors().fg : theme().accent, wrapMode: "none", overflow: "hidden", truncate: true, children: [rowMarker("connect"), " New account"] }) }), _jsx(Show, { when: selected("connect") && !compact(), children: _jsx("text", { fg: theme().textMuted, wrapMode: "none", overflow: "hidden", truncate: true, children: "action: Enter/C opens opencode provider connection" }) })] }), _jsx(Show, { when: accounts().length > 0, fallback: _jsx("text", { fg: theme().textMuted, children: "none" }), children: _jsx(For, { each: accounts(), children: (account) => (_jsxs("box", { flexDirection: "column", gap: 0, flexShrink: 0, onMouseUp: () => setCursor(rows().findIndex((row) => row.key === `account:${account.providerID}/${account.alias}`)), children: [_jsx(Row, { selected: selected(`account:${account.providerID}/${account.alias}`), children: _jsxs("text", { fg: selected(`account:${account.providerID}/${account.alias}`) ? selectedColors().fg : account.disabled ? theme().textMuted : theme().text, wrapMode: "none", overflow: "hidden", truncate: true, children: [rowMarker(`account:${account.providerID}/${account.alias}`), " ", accountLabel(account)] }) }), _jsx(Show, { when: !compact(), children: _jsx(UsageSnapshotBar, { theme: theme(), snapshot: usage()[`${account.providerID}/${account.alias}`], muted: !selected(`account:${account.providerID}/${account.alias}`) }) }), _jsx(Show, { when: confirmAccount() === `${account.providerID}/${account.alias}`, fallback: _jsx(Show, { when: selected(`account:${account.providerID}/${account.alias}`), children: _jsx("text", { fg: theme().textMuted, wrapMode: "none", overflow: "hidden", truncate: true, children: "action: press D to remove this account" }) }), children: _jsxs("box", { flexDirection: "row", gap: 1, children: [_jsx("text", { fg: theme().warning, wrapMode: "none", children: "confirm removal?" }), _jsx(Button, { label: "yes", danger: true, onClick: () => {
|
|
196
|
-
setConfirmAccount(undefined);
|
|
197
|
-
props.removeAccount(account.providerID, account.alias);
|
|
198
|
-
refreshDashboard();
|
|
199
|
-
} }), _jsx(Button, { label: "no", onClick: () => setConfirmAccount(undefined) })] }) })] })) }) })] })] }), _jsxs("box", { flexDirection: "column", gap: 0, children: [_jsx(Show, { when: !compact(), fallback: _jsx("text", { fg: theme().textMuted, wrapMode: "none", truncate: true, children: "\u2191\u2193 move \u00B7 Enter open \u00B7 Space toggle \u00B7 P priority \u00B7 Esc close" }), children: _jsxs("box", { flexDirection: "row", gap: 2, children: [_jsx(Chip, { keyName: "\u2191\u2193", label: "Move" }), _jsx(Chip, { keyName: "Enter", label: "Open" }), _jsx(Chip, { keyName: "Space", label: "Toggle" }), _jsx(Chip, { keyName: "C", label: "Connect" }), _jsx(Chip, { keyName: "P", label: "Priority" }), _jsx(Chip, { keyName: "R", label: "Rename" }), _jsx(Chip, { keyName: "D", label: "Remove", danger: true }), _jsx(Chip, { keyName: "Esc", label: "Close" })] }) }), _jsxs("text", { fg: theme().textMuted, wrapMode: "none", truncate: true, children: ["selected: ", selectedLabel(), " \u00B7 ", selectedAction()] })] })] }));
|
|
200
|
-
}
|
|
201
|
-
//# sourceMappingURL=dashboard.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../src/tui/components/dashboard.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,kBAAkB,EAA2B,MAAM,mBAAmB,CAAC;AAC9H,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAWnD,MAAM,UAAU,SAAS,CAAC,KAQzB;IACG,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;IAC5C,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC;IACxD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,YAAY,EAAsB,CAAC;IAC/E,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3E,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,YAAY,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACpF,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,YAAY,CAAoD,EAAE,CAAC,CAAC;IAC9F,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,YAAY,CAAqB,SAAS,CAAC,CAAC;IAC9E,MAAM,UAAU,GAAG,GAAG,EAAE,CACpB,mBAAmB,CAAC;QAChB,KAAK,EAAG,KAAK,CAAC,GAAG,CAAC,QAA0C,CAAC,KAAK;QAClE,MAAM,EAAG,KAAK,CAAC,GAAG,CAAC,QAA2C,CAAC,MAAM;KACxE,CAAC,CAAC;IACP,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,UAAU,EAAE,KAAK,SAAS,CAAC;IACjD,MAAM,aAAa,GAAG,GAAG,EAAE,CACvB,sBAAsB,CAAC,EAAE,MAAM,EAAG,KAAK,CAAC,GAAG,CAAC,QAA2C,CAAC,MAAM,EAAE,CAAC,CAAC;IACtG,MAAM,aAAa,GAAmB;QAClC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;QAC/C,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;KAC3D,CAAC;IACF,MAAM,IAAI,GAAG,UAAU,CAAiB,GAAG,EAAE,CAAC;QAC1C,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE;QACvC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE;QACnC,GAAG,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC5B,IAAI,EAAE,SAAkB;YACxB,GAAG,EAAE,WAAW,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE;YACrD,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;SACvB,CAAC,CAAC;KACN,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpG,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACpG,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC1B,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClD,WAAW,CAAC,YAAY,CAAC,CAAC;QAC1B,YAAY,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAClD,QAAQ,CACJ,MAAM,CAAC,WAAW,CACd,YAAY,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;YAC1B,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE;YACxC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC;SACtE,CAAC,CACL,CACJ,CAAC;QACF,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC;IACF,gBAAgB,EAAE,CAAC;IACnB,MAAM,KAAK,GAAG,WAAW,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;IACjD,SAAS,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,CAAC,WAAqE,EAAE,EAAE,CAAC,CACtF,cAAK,SAAS,EAAE,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,YAChE,gBAAM,EAAE,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAC,MAAM,EAAC,QAAQ,yBAClF,WAAW,CAAC,KAAK,UACjB,GACL,CACT,CAAC;IAEF,MAAM,IAAI,GAAG,CAAC,SAA+D,EAAE,EAAE,CAAC,CAC9E,gBAAM,EAAE,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAC,MAAM,kBACxE,SAAS,CAAC,OAAO,QAAG,eAAM,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,YAAG,SAAS,CAAC,KAAK,GAAQ,IACnF,CACV,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,YAA+C,EAAE,EAAE,CAAC,CACtE,eAAK,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,aACrD,eAAM,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAC,MAAM,YACrC,YAAY,CAAC,KAAK,GAChB,EACP,eAAM,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,YACvC,YAAY,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,EAAE,GAC7D,IACL,CACT,CAAC;IAEF,MAAM,GAAG,GAAG,CAAC,QAA2E,EAAE,EAAE,CAAC,CACzF,cACI,aAAa,EAAC,KAAK,EACnB,KAAK,EAAC,MAAM,EACZ,QAAQ,EAAE,CAAC,EACX,MAAM,EAAE,CAAC,EACT,UAAU,EAAE,CAAC,EACb,eAAe,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EACpE,SAAS,EAAE,QAAQ,CAAC,SAAS,YAE5B,QAAQ,CAAC,QAAQ,GAChB,CACT,CAAC;IAEF,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,SAAS,EAAE,KAAK,SAAS,IAAI,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC;IAC7F,MAAM,cAAc,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,SAAS,EAAE,KAAK,QAAQ,IAAI,aAAa,CAAC,YAAY,EAAE,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC;IAC/G,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,EAAE,CAC9B,wBAAwB,CAAC;QACrB,WAAW,EAAE,SAAS,EAAE;QACxB,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,KAAK,GAAG;KAC1C,CAAC,CAAC;IACP,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,EAAE,CACjC,wBAAwB,CAAC;QACrB,WAAW,EAAE,SAAS,EAAE;QACxB,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,aAAa,CAAC,YAAY,EAAE,CAAC,EAAE,GAAG,KAAK,GAAG;KACvD,CAAC,CAAC;IACP,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC;IAC1D,MAAM,aAAa,GAAG,GAAG,EAAE;QACvB,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;QACtB,IAAI,SAAS,EAAE,KAAK,QAAQ;YAAE,OAAO,aAAa,EAAE,EAAE,IAAI,IAAI,QAAQ,CAAC;QACvE,IAAI,CAAC,GAAG;YAAE,OAAO,MAAM,CAAC;QACxB,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO,WAAW,CAAC;QACjD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC7C,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,WAAW,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QAC5E,OAAO,UAAU,CAAC;IACtB,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,GAAG,EAAE;QACxB,IAAI,SAAS,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;YAC/B,OAAO,MAAM,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,sCAAsC,CAAC;QACxG,CAAC;QACD,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;QACtB,IAAI,CAAC,GAAG;YAAE,OAAO,2BAA2B,CAAC;QAC7C,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO,yCAAyC,CAAC;QAC/E,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,iCAAiC,CAAC;QACrE,IAAI,cAAc,EAAE,KAAK,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,KAAK,EAAE;YAAE,OAAO,gCAAgC,CAAC;QACnG,OAAO,+CAA+C,CAAC;IAC3D,CAAC,CAAC;IACF,MAAM,YAAY,GAAG,CAAC,OAAgE,EAAE,EAAE,CACtF,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,QAAQ,GAAG,CAAC;IACnE,MAAM,aAAa,GAAG,GAAG,EAAE;QACvB,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;QACtB,IAAI,GAAG,EAAE,IAAI,KAAK,SAAS;YAAE,iBAAiB,CAAC,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;IACrF,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,GAAG,EAAE;QACzB,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;QAClD,gBAAgB,EAAE,CAAC;QACnB,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,GAAG,EAAE;QACxB,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;QACtB,IAAI,GAAG,EAAE,IAAI,KAAK,SAAS,IAAI,cAAc,EAAE,KAAK,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;YACnF,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAC7B,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YAC/C,gBAAgB,EAAE,CAAC;QACvB,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,GAAG,EAAE;QACpB,IAAI,SAAS,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;YAC/B,IAAI,MAAM,EAAE,IAAI,KAAK,OAAO;gBAAE,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;YACpD,OAAO,KAAK,CAAC,YAAY,EAAE,CAAC;QAChC,CAAC;QACD,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;QACtB,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO,eAAe,EAAE,CAAC;QACvD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;QACvD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,iBAAiB,CAAC,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3F,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,KAAc,EAAE,EAAE;QACjC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI;YAAE,OAAO;QACrC,MAAM,MAAM,GAAG,kBAAkB,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;QAC9D,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,aAAa;gBACd,CAAC;oBACG,MAAM,IAAI,GAAG,kBAAkB,CAC3B,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,EAChE,MAAM,CAAC,KAAK,CACf,CAAC;oBACF,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACxB,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBACxC,CAAC;gBACD,OAAO;YACX,KAAK,aAAa;gBACd,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACvB,eAAe,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACpE,OAAO;YACX,KAAK,SAAS;gBACV,UAAU,EAAE,CAAC;gBACb,OAAO;YACX,KAAK,UAAU;gBACX,KAAK,CAAC,YAAY,EAAE,CAAC;gBACrB,OAAO;YACX,KAAK,SAAS;gBACV,KAAK,CAAC,WAAW,EAAE,CAAC;gBACpB,OAAO;YACX,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACZ,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;gBACtB,IAAI,GAAG,EAAE,IAAI,KAAK,SAAS;oBAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC5E,OAAO;YACX,CAAC;YACD,KAAK,QAAQ;gBACT,aAAa,EAAE,CAAC;gBAChB,OAAO;YACX,KAAK,SAAS;gBACV,cAAc,EAAE,CAAC;gBACjB,OAAO;YACX,KAAK,QAAQ;gBACT,iBAAiB,CAAC,SAAS,CAAC,CAAC;gBAC7B,OAAO;YACX,KAAK,MAAM;gBACP,KAAK,CAAC,MAAM,EAAE,CAAC;gBACf,OAAO;YACX;gBACI,OAAO;QACf,CAAC;IACL,CAAC,CAAC;IAEF,IAAI,SAA6C,CAAC;IAClD,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IAEpC,OAAO,CACH,eACI,GAAG,EAAE,CAAC,GAAY,EAAE,EAAE,CAAC,CAAC,SAAS,GAAG,GAA6B,CAAC,EAClE,SAAS,QACT,SAAS,EAAE,CAAC,KAAc,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAC/C,aAAa,EAAC,QAAQ,EACtB,GAAG,EAAE,CAAC,EACN,OAAO,EAAE,CAAC,EACV,KAAK,EAAC,MAAM,EACZ,MAAM,EAAC,MAAM,aAEb,eAAK,aAAa,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,aAC/D,gBAAM,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAC,MAAM,EAAC,QAAQ,EAAC,QAAQ,EAAC,QAAQ,wCAC/C,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,IACjD,EACP,KAAC,IAAI,IAAC,IAAI,EAAE,CAAC,OAAO,EAAE,YAClB,eAAM,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,EAAC,QAAQ,EAAC,QAAQ,EAAC,QAAQ,qEAEhE,GACJ,EACP,cAAK,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,YACrD,KAAC,GAAG,IAAC,IAAI,EAAE,aAAa,YACnB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAChB,cACI,MAAM,EAAE,CAAC,EACT,UAAU,EAAE,CAAC,EACb,eAAe,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAC7E,SAAS,EAAE,GAAG,EAAE;oCACZ,YAAY,CAAC,QAAQ,CAAC,CAAC;oCACvB,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC;oCACzB,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;wCAAE,KAAK,CAAC,MAAM,EAAE,CAAC;;wCACvC,KAAK,CAAC,YAAY,EAAE,CAAC;gCAC9B,CAAC,YAED,gBAAM,EAAE,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAC,MAAM,aACvF,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,SAAK,MAAM,CAAC,KAAK,UACvC,GACL,CACT,GACC,GACJ,IACJ,EAEN,qBAAW,MAAM,EAAE,aAAa,EAAE,EAAE,gBAAgB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,aACpE,eAAK,aAAa,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,aAC/E,KAAC,YAAY,IAAC,KAAK,EAAC,WAAW,GAAG,EAClC,KAAC,GAAG,IAAC,QAAQ,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,eAAe,YAC5D,gBAAM,EAAE,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,EAAC,QAAQ,EAAC,QAAQ,EAAC,QAAQ,mBAChJ,SAAS,CAAC,WAAW,CAAC,4BAAwB,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IACtE,GACL,EACN,KAAC,IAAI,IAAC,IAAI,EAAE,CAAC,OAAO,EAAE,YAClB,eAAM,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,EAAC,QAAQ,EAAC,QAAQ,EAAC,QAAQ,+FAEhE,GACJ,IACL,EAEN,eAAK,aAAa,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,aAChD,KAAC,YAAY,IAAC,KAAK,EAAC,UAAU,EAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,MAAM,GAAI,EAC3D,eAAK,aAAa,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,aAC3H,KAAC,GAAG,IAAC,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,WAAW,YAC5D,gBAAM,EAAE,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAC,MAAM,EAAC,QAAQ,EAAC,QAAQ,EAAC,QAAQ,mBAC3G,SAAS,CAAC,SAAS,CAAC,oBAClB,GACL,EACN,KAAC,IAAI,IAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,YACzC,eAAM,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,EAAC,QAAQ,EAAC,QAAQ,EAAC,QAAQ,yEAEhE,GACJ,IACL,EACN,KAAC,IAAI,IAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,QAAQ,EAAE,eAAM,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,qBAAa,YACjF,KAAC,GAAG,IAAC,IAAI,EAAE,QAAQ,EAAE,YAChB,CAAC,OAAO,EAAE,EAAE,CAAC,CACV,eAAK,aAAa,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,WAAW,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,aAClK,KAAC,GAAG,IAAC,QAAQ,EAAE,QAAQ,CAAC,WAAW,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,YACrE,gBAAM,EAAE,EAAE,QAAQ,CAAC,WAAW,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAC,MAAM,EAAC,QAAQ,EAAC,QAAQ,EAAC,QAAQ,mBACvL,SAAS,CAAC,WAAW,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,OAAG,YAAY,CAAC,OAAO,CAAC,IACjF,GACL,EACN,KAAC,IAAI,IAAC,IAAI,EAAE,CAAC,OAAO,EAAE,YAClB,KAAC,gBAAgB,IACb,KAAK,EAAE,KAAK,EAAE,EACd,QAAQ,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,EAC3D,KAAK,EAAE,CAAC,QAAQ,CAAC,WAAW,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,GACpE,GACC,EACP,KAAC,IAAI,IACD,IAAI,EAAE,cAAc,EAAE,KAAK,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,EACnE,QAAQ,EACJ,KAAC,IAAI,IAAC,IAAI,EAAE,QAAQ,CAAC,WAAW,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,YAClE,eAAM,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,EAAC,QAAQ,EAAC,QAAQ,EAAC,QAAQ,6DAEhE,GACJ,YAGX,eAAK,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,aAC3B,eAAM,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAC,MAAM,iCAAwB,EAClE,KAAC,MAAM,IACH,KAAK,EAAC,KAAK,EACX,MAAM,QACN,OAAO,EAAE,GAAG,EAAE;gEACV,iBAAiB,CAAC,SAAS,CAAC,CAAC;gEAC7B,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;gEACvD,gBAAgB,EAAE,CAAC;4DACvB,CAAC,GACH,EACF,KAAC,MAAM,IAAC,KAAK,EAAC,IAAI,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAI,IAChE,GACH,IACL,CACT,GACC,GACH,IACL,IAEE,EAEZ,eAAK,aAAa,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,aAC9B,KAAC,IAAI,IACD,IAAI,EAAE,CAAC,OAAO,EAAE,EAChB,QAAQ,EACJ,eAAM,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,EAAC,QAAQ,iHAE9C,YAGX,eAAK,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,aAC3B,KAAC,IAAI,IAAC,OAAO,EAAC,cAAI,EAAC,KAAK,EAAC,MAAM,GAAG,EAClC,KAAC,IAAI,IAAC,OAAO,EAAC,OAAO,EAAC,KAAK,EAAC,MAAM,GAAG,EACrC,KAAC,IAAI,IAAC,OAAO,EAAC,OAAO,EAAC,KAAK,EAAC,QAAQ,GAAG,EACvC,KAAC,IAAI,IAAC,OAAO,EAAC,GAAG,EAAC,KAAK,EAAC,SAAS,GAAG,EACpC,KAAC,IAAI,IAAC,OAAO,EAAC,GAAG,EAAC,KAAK,EAAC,UAAU,GAAG,EACrC,KAAC,IAAI,IAAC,OAAO,EAAC,GAAG,EAAC,KAAK,EAAC,QAAQ,GAAG,EACnC,KAAC,IAAI,IAAC,OAAO,EAAC,GAAG,EAAC,KAAK,EAAC,QAAQ,EAAC,MAAM,SAAG,EAC1C,KAAC,IAAI,IAAC,OAAO,EAAC,KAAK,EAAC,KAAK,EAAC,OAAO,GAAG,IAClC,GACH,EACP,gBAAM,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,EAAC,QAAQ,iCACtC,aAAa,EAAE,cAAK,cAAc,EAAE,IAC5C,IACL,IACJ,CACT,CAAC;AACN,CAAC"}
|