@better-agent/plugins 0.1.0-canary.5 → 0.2.0-beta.1
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/index.d.mts +59 -97
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +373 -363
- package/dist/index.mjs.map +1 -1
- package/package.json +21 -5
package/dist/index.d.mts
CHANGED
|
@@ -1,60 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AuthContext, Plugin, ToolApprovalConfig } from "@better-agent/core";
|
|
2
2
|
|
|
3
|
-
//#region src/auth/types.d.ts
|
|
4
|
-
/** Configuration for `authPlugin`. */
|
|
5
|
-
type AuthPluginConfig = {
|
|
6
|
-
/** Plugin id. */id?: string; /** Header used when `getKey` is not provided. */
|
|
7
|
-
header?: string; /** Allowed API keys for the default validator. */
|
|
8
|
-
apiKeys?: readonly string[]; /** Resolves the request API key. */
|
|
9
|
-
getKey?: (ctx: {
|
|
10
|
-
/** Agent name. */agentName: string; /** Guard mode. */
|
|
11
|
-
mode: PluginGuardMode; /** Incoming request. */
|
|
12
|
-
request: Request;
|
|
13
|
-
}) => string | null | undefined | Promise<string | null | undefined>; /** Validates one API key. */
|
|
14
|
-
validate?: (ctx: {
|
|
15
|
-
/** Resolved API key. */key: string | null; /** Agent name. */
|
|
16
|
-
agentName: string; /** Guard mode. */
|
|
17
|
-
mode: PluginGuardMode; /** Incoming request. */
|
|
18
|
-
request: Request;
|
|
19
|
-
}) => boolean | Promise<boolean>; /** Overrides the unauthorized response. */
|
|
20
|
-
onUnauthorized?: (ctx: {
|
|
21
|
-
/** Resolved API key. */key: string | null; /** Agent name. */
|
|
22
|
-
agentName: string; /** Guard mode. */
|
|
23
|
-
mode: PluginGuardMode; /** Incoming request. */
|
|
24
|
-
request: Request;
|
|
25
|
-
}) => Response | Promise<Response>;
|
|
26
|
-
};
|
|
27
|
-
//#endregion
|
|
28
|
-
//#region src/auth/plugin.d.ts
|
|
29
|
-
/**
|
|
30
|
-
* Creates an API-key auth plugin.
|
|
31
|
-
*
|
|
32
|
-
* Provide either `apiKeys` or `validate`.
|
|
33
|
-
*
|
|
34
|
-
* @example
|
|
35
|
-
* ```ts
|
|
36
|
-
* const plugin = authPlugin({
|
|
37
|
-
* apiKeys: ["dev-key"],
|
|
38
|
-
* });
|
|
39
|
-
* ```
|
|
40
|
-
*/
|
|
41
|
-
declare const authPlugin: (config: AuthPluginConfig) => Plugin;
|
|
42
|
-
//#endregion
|
|
43
3
|
//#region src/ip-allowlist/types.d.ts
|
|
44
|
-
/** Configuration for `
|
|
45
|
-
type
|
|
4
|
+
/** Configuration for `ipAllowlist`. */
|
|
5
|
+
type IpAllowlistConfig = {
|
|
46
6
|
/** Plugin id. */id?: string; /** Allowed IPs or CIDR ranges. */
|
|
47
7
|
allow: readonly string[]; /** Whether to trust `x-forwarded-for`. */
|
|
48
8
|
trustProxy?: boolean; /** Resolves the request IP. */
|
|
49
9
|
getIp?: (ctx: {
|
|
50
|
-
/** Agent name. */agentName: string; /**
|
|
51
|
-
mode: PluginGuardMode; /** Incoming request. */
|
|
10
|
+
/** Agent name. */agentName: string; /** Incoming request. */
|
|
52
11
|
request: Request;
|
|
53
12
|
}) => string | null | undefined | Promise<string | null | undefined>; /** Overrides the denied response. */
|
|
54
13
|
onDenied?: (ctx: {
|
|
55
14
|
/** Resolved IP. */ip: string | null; /** Agent name. */
|
|
56
|
-
agentName: string; /**
|
|
57
|
-
mode: PluginGuardMode; /** Incoming request. */
|
|
15
|
+
agentName: string; /** Incoming request. */
|
|
58
16
|
request: Request;
|
|
59
17
|
}) => Response | Promise<Response>;
|
|
60
18
|
};
|
|
@@ -65,16 +23,16 @@ type IpAllowlistPluginConfig = {
|
|
|
65
23
|
*
|
|
66
24
|
* @example
|
|
67
25
|
* ```ts
|
|
68
|
-
* const plugin =
|
|
26
|
+
* const plugin = ipAllowlist({
|
|
69
27
|
* allow: ["127.0.0.1", "10.0.0.0/8"],
|
|
70
28
|
* });
|
|
71
29
|
* ```
|
|
72
30
|
*/
|
|
73
|
-
declare const
|
|
31
|
+
declare const ipAllowlist: (config: IpAllowlistConfig) => Plugin;
|
|
74
32
|
//#endregion
|
|
75
33
|
//#region src/logging/types.d.ts
|
|
76
|
-
/** Configuration for `
|
|
77
|
-
type
|
|
34
|
+
/** Configuration for `logging`. */
|
|
35
|
+
type LoggingConfig = {
|
|
78
36
|
/** Plugin id. */id?: string; /** Minimum log level. */
|
|
79
37
|
level?: "debug" | "info" | "warn" | "error"; /** Logger implementation. */
|
|
80
38
|
logger?: {
|
|
@@ -88,21 +46,20 @@ type LoggingPluginConfig = {
|
|
|
88
46
|
events?: boolean; /** Logs step boundaries. */
|
|
89
47
|
steps?: boolean; /** Logs model calls. */
|
|
90
48
|
modelCalls?: boolean; /** Logs tool calls. */
|
|
91
|
-
toolCalls?: boolean; /** Logs
|
|
92
|
-
saves?: boolean; /** Logs error events. */
|
|
49
|
+
toolCalls?: boolean; /** Logs error events. */
|
|
93
50
|
errors?: boolean;
|
|
94
51
|
}; /** Extra header names to redact. */
|
|
95
52
|
redactHeaders?: readonly string[]; /** Rewrites logged bodies before emission. */
|
|
96
53
|
redactBody?: (ctx: {
|
|
97
54
|
/** Raw body value. */body: unknown; /** Logging phase. */
|
|
98
|
-
phase: "request" | "response" | "tool_args" | "tool_result"
|
|
55
|
+
phase: "request" | "response" | "tool_args" | "tool_result";
|
|
99
56
|
}) => unknown; /** Formats one log entry. */
|
|
100
57
|
format?: (entry: LogEntry) => unknown;
|
|
101
58
|
};
|
|
102
|
-
/** Structured log entry emitted by `
|
|
59
|
+
/** Structured log entry emitted by `logging`. */
|
|
103
60
|
type LogEntry = {
|
|
104
61
|
/** Log level. */level: "debug" | "info" | "warn" | "error"; /** Log event name. */
|
|
105
|
-
event: "request.received" | "run.event" | "step.start" | "model.before" | "model.after" | "tool.before" | "tool.after"
|
|
62
|
+
event: "request.received" | "run.event" | "step.start" | "model.before" | "model.after" | "tool.before" | "tool.after"; /** ISO timestamp. */
|
|
106
63
|
timestamp: string; /** Agent name. */
|
|
107
64
|
agentName: string; /** Run id, when available. */
|
|
108
65
|
runId?: string; /** Conversation id, when available. */
|
|
@@ -116,13 +73,13 @@ type LogEntry = {
|
|
|
116
73
|
*
|
|
117
74
|
* @example
|
|
118
75
|
* ```ts
|
|
119
|
-
* const plugin =
|
|
76
|
+
* const plugin = logging({
|
|
120
77
|
* level: "info",
|
|
121
78
|
* include: { requests: true, toolCalls: true },
|
|
122
79
|
* });
|
|
123
80
|
* ```
|
|
124
81
|
*/
|
|
125
|
-
declare const
|
|
82
|
+
declare const logging: (config?: LoggingConfig) => Plugin;
|
|
126
83
|
//#endregion
|
|
127
84
|
//#region src/rate-limit/types.d.ts
|
|
128
85
|
/** One rate-limit window bucket. */
|
|
@@ -135,17 +92,17 @@ type RateLimitBucket = {
|
|
|
135
92
|
};
|
|
136
93
|
/** Request data passed to rate-limit callbacks. */
|
|
137
94
|
type RateLimitRequestContext = {
|
|
138
|
-
/**
|
|
139
|
-
|
|
140
|
-
|
|
95
|
+
/** Agent name. */agentName: string; /** Incoming request. */
|
|
96
|
+
request: Request; /** Resolved auth context, when app auth is configured. */
|
|
97
|
+
auth: AuthContext | null;
|
|
141
98
|
};
|
|
142
99
|
/** Stored rate-limit row. */
|
|
143
100
|
type RateLimitStorageState = {
|
|
144
101
|
count: number;
|
|
145
102
|
version: number;
|
|
146
103
|
};
|
|
147
|
-
/** Configuration for `
|
|
148
|
-
type
|
|
104
|
+
/** Configuration for `rateLimit`. */
|
|
105
|
+
type RateLimitConfig = {
|
|
149
106
|
/** Plugin id. */id?: string; /** Rate-limit window in milliseconds. */
|
|
150
107
|
windowMs: number; /** Max requests per window. */
|
|
151
108
|
max: number; /** Resolves the rate-limit key. */
|
|
@@ -178,25 +135,32 @@ type RateLimitPluginConfig = {
|
|
|
178
135
|
*
|
|
179
136
|
* @example
|
|
180
137
|
* ```ts
|
|
181
|
-
* const plugin =
|
|
138
|
+
* const plugin = rateLimit({
|
|
182
139
|
* windowMs: 60_000,
|
|
183
140
|
* max: 30,
|
|
184
141
|
* });
|
|
185
142
|
* ```
|
|
186
143
|
*/
|
|
187
|
-
declare const
|
|
144
|
+
declare const rateLimit: (config: RateLimitConfig) => Plugin;
|
|
188
145
|
//#endregion
|
|
189
146
|
//#region src/sandbox/types.d.ts
|
|
190
147
|
/** Options for creating a sandbox. */
|
|
191
148
|
interface SandboxCreateParams {
|
|
192
149
|
/** Template, snapshot, or image to create the sandbox from. */
|
|
193
150
|
template?: string;
|
|
194
|
-
/**
|
|
195
|
-
|
|
151
|
+
/** Maximum time to wait for the sandbox to become ready. */
|
|
152
|
+
startupTimeoutMs?: number;
|
|
196
153
|
/** Environment variables for the sandbox. */
|
|
197
154
|
envs?: Record<string, string>;
|
|
198
155
|
/** Metadata or labels for the sandbox. */
|
|
199
156
|
metadata?: Record<string, string>;
|
|
157
|
+
/** Shared lifecycle controls for the created sandbox. */
|
|
158
|
+
lifecycle?: {
|
|
159
|
+
/** Maximum lifetime for the sandbox. */ttlMs?: number; /** Stop the sandbox after this much inactivity. */
|
|
160
|
+
idleStopMs?: number; /** Archive the sandbox this long after it stops. */
|
|
161
|
+
archiveAfterMs?: number; /** Delete the sandbox this long after it stops. */
|
|
162
|
+
deleteAfterMs?: number;
|
|
163
|
+
};
|
|
200
164
|
}
|
|
201
165
|
/** Sandbox returned after creation. */
|
|
202
166
|
interface SandboxInstance {
|
|
@@ -373,7 +337,7 @@ interface SandboxDesktopClient {
|
|
|
373
337
|
mimeType?: string;
|
|
374
338
|
}>;
|
|
375
339
|
}
|
|
376
|
-
/** Sandbox client used by `
|
|
340
|
+
/** Sandbox client used by `sandbox`. */
|
|
377
341
|
interface SandboxClient {
|
|
378
342
|
/** Provider name. */
|
|
379
343
|
provider?: string;
|
|
@@ -423,8 +387,8 @@ interface SandboxSessionKeyContext {
|
|
|
423
387
|
runId: string;
|
|
424
388
|
/** Agent name. */
|
|
425
389
|
agentName: string;
|
|
426
|
-
/**
|
|
427
|
-
|
|
390
|
+
/** Thread id, if available. */
|
|
391
|
+
threadId?: string;
|
|
428
392
|
/** Tool name, for example `sandbox_exec`. */
|
|
429
393
|
toolName: string;
|
|
430
394
|
}
|
|
@@ -439,8 +403,8 @@ interface SandboxToolApprovals {
|
|
|
439
403
|
/** Approval policy for `*_kill`. */
|
|
440
404
|
killSandbox?: ToolApprovalConfig;
|
|
441
405
|
}
|
|
442
|
-
/** Configuration for `
|
|
443
|
-
interface
|
|
406
|
+
/** Configuration for `sandbox`. */
|
|
407
|
+
interface SandboxConfig {
|
|
444
408
|
/** Plugin id. */
|
|
445
409
|
id?: string;
|
|
446
410
|
/** Tool name prefix. Defaults to `"sandbox"`. */
|
|
@@ -452,18 +416,20 @@ interface SandboxPluginConfig {
|
|
|
452
416
|
/**
|
|
453
417
|
* Controls sandbox reuse for each tool call.
|
|
454
418
|
*
|
|
455
|
-
* When omitted, the plugin reuses one sandbox per `
|
|
419
|
+
* When omitted, the plugin reuses one sandbox per `threadId`.
|
|
456
420
|
* Return a non-empty string to reuse a sandbox under that key.
|
|
457
421
|
* Return `null` or `undefined` to disable reuse for that call.
|
|
458
422
|
*/
|
|
459
423
|
sessionKey?: (ctx: SandboxSessionKeyContext) => string | null | undefined;
|
|
460
|
-
/**
|
|
461
|
-
|
|
424
|
+
/** Authoritative sandbox creation options that model overrides cannot overwrite. */
|
|
425
|
+
createConfig?: SandboxCreateParams;
|
|
426
|
+
/** Fallback sandbox creation options used only when createConfig and model overrides omit a field. */
|
|
427
|
+
createDefaults?: SandboxCreateParams;
|
|
462
428
|
/** Approval settings for risky sandbox tools. */
|
|
463
429
|
approvals?: SandboxToolApprovals;
|
|
464
430
|
}
|
|
465
431
|
/** Configuration for the built-in E2B sandbox client. */
|
|
466
|
-
interface E2BSandboxClientConfig
|
|
432
|
+
interface E2BSandboxClientConfig {
|
|
467
433
|
/** API key used to authenticate with E2B. */
|
|
468
434
|
apiKey?: string;
|
|
469
435
|
/** Access token used instead of an API key. */
|
|
@@ -474,7 +440,7 @@ interface E2BSandboxClientConfig extends SandboxCreateParams {
|
|
|
474
440
|
requestTimeoutMs?: number;
|
|
475
441
|
}
|
|
476
442
|
/** Configuration for the Daytona sandbox client. */
|
|
477
|
-
interface DaytonaSandboxClientConfig
|
|
443
|
+
interface DaytonaSandboxClientConfig {
|
|
478
444
|
/** API key used to authenticate with Daytona. */
|
|
479
445
|
apiKey?: string;
|
|
480
446
|
/** Custom Daytona API base URL. */
|
|
@@ -483,28 +449,22 @@ interface DaytonaSandboxClientConfig extends SandboxCreateParams {
|
|
|
483
449
|
target?: string;
|
|
484
450
|
/** Default language or runtime. */
|
|
485
451
|
language?: string;
|
|
486
|
-
/** Explicit snapshot to create from. */
|
|
487
|
-
snapshot?: string;
|
|
488
|
-
/** Explicit image to create from. */
|
|
489
|
-
image?: string;
|
|
490
452
|
/** Whether previews should be public. */
|
|
491
453
|
public?: boolean;
|
|
492
|
-
/**
|
|
493
|
-
autoStopInterval?: number;
|
|
494
|
-
/** Auto-archive interval in provider-defined units. */
|
|
495
|
-
autoArchiveInterval?: number;
|
|
496
|
-
/** Auto-delete interval in provider-defined units. */
|
|
497
|
-
autoDeleteInterval?: number;
|
|
498
|
-
/** For Daytona, whether `template` should be treated as a `snapshot` or `image`. */
|
|
454
|
+
/** For Daytona, how the shared sandbox template should be mapped. */
|
|
499
455
|
templateKind?: "snapshot" | "image";
|
|
500
456
|
}
|
|
501
457
|
//#endregion
|
|
502
458
|
//#region src/sandbox/daytona.d.ts
|
|
503
|
-
/**
|
|
459
|
+
/**
|
|
460
|
+
* Creates a sandbox client backed by the Daytona SDK.
|
|
461
|
+
*/
|
|
504
462
|
declare function createDaytonaSandboxClient(config?: DaytonaSandboxClientConfig): SandboxClient;
|
|
505
463
|
//#endregion
|
|
506
464
|
//#region src/sandbox/e2b.d.ts
|
|
507
|
-
/**
|
|
465
|
+
/**
|
|
466
|
+
* Creates a sandbox client backed by the E2B SDK.
|
|
467
|
+
*/
|
|
508
468
|
declare function createE2BSandboxClient(config?: E2BSandboxClientConfig): SandboxClient;
|
|
509
469
|
//#endregion
|
|
510
470
|
//#region src/sandbox/memory-store.d.ts
|
|
@@ -515,7 +475,7 @@ declare function createMemorySandboxSessionStore(): SandboxSessionStore;
|
|
|
515
475
|
/**
|
|
516
476
|
* Adds sandbox tools.
|
|
517
477
|
*
|
|
518
|
-
* By default, the plugin reuses one sandbox per `
|
|
478
|
+
* By default, the plugin reuses one sandbox per `threadId`.
|
|
519
479
|
* Use `sessionKey` to customize reuse, or return `null`/`undefined`
|
|
520
480
|
* to disable reuse for a specific tool call.
|
|
521
481
|
*
|
|
@@ -523,20 +483,22 @@ declare function createMemorySandboxSessionStore(): SandboxSessionStore;
|
|
|
523
483
|
*
|
|
524
484
|
* @example
|
|
525
485
|
* ```ts
|
|
526
|
-
* import {
|
|
486
|
+
* import { sandbox, createE2BSandboxClient } from "@better-agent/plugins";
|
|
527
487
|
*
|
|
528
|
-
* const plugin =
|
|
488
|
+
* const plugin = sandbox({
|
|
529
489
|
* client: createE2BSandboxClient({
|
|
530
490
|
* apiKey: process.env.E2B_API_KEY,
|
|
531
491
|
* }),
|
|
532
|
-
*
|
|
492
|
+
* createConfig: {
|
|
533
493
|
* template: "base",
|
|
534
|
-
*
|
|
494
|
+
* },
|
|
495
|
+
* createDefaults: {
|
|
496
|
+
* startupTimeoutMs: 90_000,
|
|
535
497
|
* },
|
|
536
498
|
* });
|
|
537
499
|
* ```
|
|
538
500
|
*/
|
|
539
|
-
declare const
|
|
501
|
+
declare const sandbox: (pluginConfig: SandboxConfig) => Plugin;
|
|
540
502
|
//#endregion
|
|
541
|
-
export {
|
|
503
|
+
export { type DaytonaSandboxClientConfig, type E2BSandboxClientConfig, IpAllowlistConfig, LogEntry, LoggingConfig, RateLimitBucket, RateLimitConfig, RateLimitRequestContext, RateLimitStorageState, type SandboxCapabilities, type SandboxClient, type SandboxCommandParams, type SandboxCommandResult, type SandboxConfig, type SandboxCreateParams, type SandboxDesktopClient, type SandboxFileEntry, type SandboxGetHostParams, type SandboxInstance, type SandboxKillParams, type SandboxLifecycleClient, type SandboxListFilesParams, type SandboxMakeDirParams, type SandboxPTYClient, type SandboxPreviewInfo, type SandboxReadFileParams, type SandboxRemovePathParams, type SandboxSessionKeyContext, type SandboxSessionStore, type SandboxToolApprovals, type SandboxWriteFileParams, createDaytonaSandboxClient, createE2BSandboxClient, createMemorySandboxSessionStore, ipAllowlist, logging, rateLimit, sandbox };
|
|
542
504
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/ip-allowlist/types.ts","../src/ip-allowlist/plugin.ts","../src/logging/types.ts","../src/logging/plugin.ts","../src/rate-limit/types.ts","../src/rate-limit/plugin.ts","../src/sandbox/types.ts","../src/sandbox/daytona.ts","../src/sandbox/e2b.ts","../src/sandbox/memory-store.ts","../src/sandbox/plugin.ts"],"mappings":";;;;KACY,iBAAA;mBAER,EAAA,WAFyB;EAIzB,KAAA,qBAQa;EANb,UAAA,YAea;EAbb,KAAA,IAAS,GAAA;IAcgB,kBAZrB,SAAA,UAYoB;IAVpB,OAAA,EAAS,OAAA;EAAA,kCACqB,OAAA,6BATlC;EAWA,QAAA,IAAY,GAAA;IAPZ,mBASI,EAAA,iBALA;IAOA,SAAA,UAXK;IAaL,OAAA,EAAS,OAAA;EAAA,MACP,QAAA,GAAW,OAAA,CAAQ,QAAA;AAAA;;;;AAtB7B;;;;;;;;;cCoDa,WAAA,GAAW,MAAA,EAAY,iBAAA,KAAoB,MAAA;;;;KCpD5C,aAAA;mBAER,EAAA,WFFyB;EEIzB,KAAA,wCFQa;EENb,MAAA;IFea,oBEbT,KAAA,OAAY,IAAA,sBFcS;IEZrB,IAAA,OAAW,IAAA,sBFYS;IEVpB,IAAA,OAAW,IAAA,sBFVf;IEYI,KAAA,OAAY,IAAA;EAAA,GFNhB;EESA,OAAA;IFLI,8BEOA,QAAA,YFXK;IEaL,MAAA,YFNJ;IEQI,KAAA,YFJA;IEMA,UAAA,YFJS;IEMT,SAAA,YFLE;IEOF,MAAA;EAAA,GFP6B;EEUjC,aAAA;EAEA,UAAA,IAAc,GAAA;0BAEV,IAAA,WD4DP;IC1DO,KAAA;EAAA,eDc4B;ECXhC,MAAA,IAAU,KAAA,EAAO,QAAA;AAAA;;KAIT,QAAA;mBAER,KAAA;EAEA,KAAA,mHAjDqB;EA0DrB,SAAA,UAjByB;EAmBzB,SAAA,UAxDA;EA0DA,KAAA,WAtDI;EAwDJ,cAAA,WAtDI;EAwDJ,IAAA,GAAO,MAAA;AAAA;;;;AFlEX;;;;;;;;;;cGkGa,OAAA,GAAO,MAAA,GAAY,aAAA,KAAqB,MAAA;;;;KChGzC,eAAA;EJFA,wBIIR,EAAA;EAEA,GAAA,UJOkC;EILlC,WAAA,EAAa,IAAA,EJcP;EIZN,SAAA,EAAW,IAAA,EJYM;EIVjB,GAAA,EAAK,IAAA;AAAA;;KAIG,uBAAA;EJVR,kBIYA,SAAA,UJRI;EIUJ,OAAA,EAAS,OAAA,EJRI;EIUb,IAAA,EAAM,WAAA;AAAA;;KAIE,qBAAA;EAA0B,KAAA;EAAe,OAAA;AAAA;;KAGzC,eAAA;EJPS,iBISjB,EAAA,WJTiC;EIWjC,QAAA;EAEA,GAAA;EAEA,GAAA,IAAO,GAAA,EAAK,uBAAA,cAAqC,OAAA,UH2DpD;EGzDG,OAAA;IHyDH,sCGvDO,IAAA,GAAO,MAAA;MHWS,yBGTZ,MAAA,EAAQ,eAAA,EHqDnB;MGnDW,OAAA,EAAS,uBAAA;IAAA,MACP,OAAA,CAAQ,qBAAA;IAEd,KAAA,GAAQ,MAAA;MFhDJ,yBEkDA,MAAA,EAAQ,eAAA,EFTC;MEWT,OAAA,EAAS,uBAAA,EFlDjB;MEoDQ,WAAA,iBFhDR;MEkDQ,IAAA,EAAM,qBAAA;IAAA,MACJ,OAAA;EAAA,GF/CK;EEkDf,YAAA,IAAgB,MAAA;IFhDD,4BEkDX,KAAA,WFhDY;IEkDZ,MAAA,EAAQ,eAAA,EF7CR;IE+CA,OAAA,EAAS,uBAAA;EAAA,yBACY,QAAA,GAAW,OAAA,oBAA2B,QAAA,GF1C3D;EE4CJ,UAAA;AAAA;;;;AJrEJ;;;;;;;;;;;;cKuBa,SAAA,GAAS,MAAA,EAAY,eAAA,KAAkB,MAAA;;;;UCrBnC,mBAAA;ENFL;EMIR,QAAA;;EAEA,gBAAA;ENOkC;EMLlC,IAAA,GAAO,MAAA;ENcD;EMZN,QAAA,GAAW,MAAA;ENYM;EMVjB,SAAA;INUwB,wCMRpB,KAAA,WNVJ;IMYI,UAAA,WNRJ;IMUI,cAAA,WNNA;IMQA,aAAA;EAAA;AAAA;;UAKS,eAAA;ENNT;EMQJ,SAAA;AAAA;;UAIa,kBAAA;ENTI;EMWjB,GAAA;ENXiC;EMajC,KAAA;AAAA;;UAIa,mBAAA;ELaJ;EKXT,QAAA;;EAEA,UAAA;ELSgC;EKPhC,OAAA;ELOoD;EKLpD,GAAA;ELiDH;EK/CG,OAAA;;EAEA,GAAA;EJnDQ;EIqDR,GAAA;;EAEA,SAAA;EJrDA;EIuDA,OAAA;EJnDA;EIqDA,SAAA;IJnDgB,2BIqDZ,KAAA,SJnDW;IIqDX,IAAA,SJnDW;IIqDX,OAAA,SJnDY;IIqDZ,MAAA;EAAA;AAAA;;UAKS,oBAAA;EJ7CT;EI+CJ,SAAA;EJ1CA;EI4CA,GAAA;EJxCI;EI0CJ,GAAA;EJ5Cc;EI8Cd,SAAA;EJvCiB;EIyCjB,IAAA,GAAO,MAAA;AAAA;;UAIM,oBAAA;EJzCG;EI2ChB,QAAA;EJtBa;EIwBb,MAAA;EJzCA;EI2CA,MAAA;EJhCA;EIkCA,GAAA;AAAA;;UAIa,qBAAA;EJhCA;EIkCb,SAAA;;EAEA,IAAA;AAAA;AHJJ;AAAA,UGQiB,sBAAA;;EAEb,SAAA;EHV4B;EGY5B,IAAA;EHZiD;EGcjD,OAAA;AAAA;;UAIa,gBAAA;;EAEb,IAAA;EFpHuB;EEsHvB,IAAA;EFhHa;EEkHb,IAAA;AAAA;;UAIa,sBAAA;EF1Hb;EE4HA,SAAA;EFxHA;EE0HA,IAAA;AAAA;;UAIa,oBAAA;EF1HR;EE4HL,SAAA;EF5HS;EE8HT,IAAA;AAAA;;UAIa,uBAAA;EF5Hb;EE8HA,SAAA;EF5HS;EE8HT,IAAA;AAAA;;UAIa,oBAAA;EF5HL;EE8HR,SAAA;;EAEA,IAAA;AAAA;AF7HJ;AAAA,UEiIiB,iBAAA;;EAEb,SAAA;AAAA;;UAIa,sBAAA;EFtHK;EEwHlB,YAAA,EAAc,MAAA;IFpHE,4BEsHZ,SAAA,UFhHU;IEkHV,SAAA;EAAA,IACA,OAAA;EFzGS;EE2Gb,WAAA,EAAa,MAAA;IF1GkD,4BE4G3D,SAAA,UF5GuC;IE8GvC,SAAA,WFlJJ;IEoJI,KAAA;EAAA,IACA,OAAA;EF/IJ;EEiJA,cAAA,EAAgB,MAAA;IAAU,SAAA;EAAA,IAAsB,OAAA;AAAA;;UAInC,gBAAA;EF/IG;EEiJhB,aAAA,EAAe,MAAA;IF/IE,4BEiJb,SAAA,UFhJM;IEkJN,SAAA,UFhJA;IEkJA,GAAA,WFhJY;IEkJZ,IAAA,WFhJa;IEkJb,IAAA,WF9II;IEgJJ,IAAA,GAAO,MAAA,kBFxJC;IE0JR,MAAA,IAAU,IAAA,EAAM,UAAA,KAAe,OAAA;EAAA,IAC/B,OAAA;IF7IA,kBE+IA,SAAA,UF7IQ;IE+IR,QAAA,WF7IS;IE+IT,KAAA;EAAA;AAAA;;UAKS,oBAAA;EFjJH;EEmJV,YAAA,EAAc,MAAA;IAAU,SAAA;EAAA,IAAsB,OAAA;;EAE9C,WAAA,EAAa,MAAA;IAAU,SAAA;EAAA,IAAsB,OAAA;EDjHhD;ECmHG,UAAA,EAAY,MAAA;IAAU,SAAA;EAAA,IAAsB,OAAA;IDnH/C,uBCqHO,IAAA;IAEA,QAAA;EAAA;AAAA;;UAKS,aAAA;EA3NI;EA6NjB,QAAA;EAjOA;EAmOA,YAAA,GAAe,mBAAA;EAjOR;EAmOP,aAAA,CAAc,MAAA,GAAS,mBAAA,GAAsB,OAAA,CAAQ,eAAA;EAjO1C;EAmOX,UAAA,CAAW,MAAA,EAAQ,oBAAA,GAAuB,OAAA,CAAQ,oBAAA;EA/N9C;EAiOJ,QAAA,CAAS,MAAA,EAAQ,qBAAA,GAAwB,OAAA;EA7NrC;EA+NJ,SAAA,CAAU,MAAA,EAAQ,sBAAA,GAAyB,OAAA;IA7N1B,kBA+Nb,IAAA;EAAA;EA1NwB;EA6N5B,SAAA,CAAU,MAAA,EAAQ,sBAAA,GAAyB,OAAA,CAAQ,gBAAA;EA3NnD;EA6NA,OAAA,CAAQ,MAAA,EAAQ,oBAAA,GAAuB,OAAA;IAzN1B,yCA2NT,OAAA;EAAA;EAzNJ;EA4NA,UAAA,CAAW,MAAA,EAAQ,uBAAA,GAA0B,OAAA;EAtNhC;EAwNb,OAAA,CAAQ,MAAA,EAAQ,oBAAA,GAAuB,OAAA,UAAiB,kBAAA;;EAExD,WAAA,CAAY,MAAA,EAAQ,iBAAA,GAAoB,OAAA;EAxNxC;EA0NA,SAAA,GAAY,sBAAA;EAtNZ;EAwNA,GAAA,GAAM,gBAAA;EApNN;EAsNA,OAAA,GAAU,oBAAA;AAAA;;UAIG,mBAAA;EAhNb;EAkNA,GAAA,CAAI,GAAA,WAAc,OAAA;EA9Md;EAgNJ,GAAA,CAAI,GAAA,UAAa,SAAA,WAAoB,OAAA;EA5MjC;EA8MJ,MAAA,CAAO,GAAA,WAAc,OAAA;AAAA;AAzMzB;AAAA,UA6MiB,wBAAA;;EAEb,KAAA;EA7MA;EA+MA,SAAA;EA3MA;EA6MA,QAAA;EAzMA;EA2MA,QAAA;AAAA;;UAIa,oBAAA;EA3MoB;EA6MjC,IAAA,GAAO,kBAAA;EA7M0B;EA+MjC,SAAA,GAAY,kBAAA;EA3MZ;EA6MA,UAAA,GAAa,kBAAA;EAzMb;EA2MA,WAAA,GAAc,kBAAA;AAAA;AAvMlB;AAAA,UA2MiB,aAAA;;EAEb,EAAA;EAzMI;EA2MJ,MAAA;EAvMmC;EAyMnC,MAAA,EAAQ,aAAA;EAzM2B;EA2MnC,KAAA,GAAQ,mBAAA;EAvMR;;;;AAMJ;;;EAyMI,UAAA,IAAc,GAAA,EAAK,wBAAA;EAvMnB;EAyMA,YAAA,GAAe,mBAAA;EArMf;EAuMA,cAAA,GAAiB,mBAAA;EAvMb;EAyMJ,SAAA,GAAY,oBAAA;AAAA;;UAIC,sBAAA;EArMT;EAuMJ,MAAA;EAnMiC;EAqMjC,WAAA;EAnMA;EAqMA,MAAA;EA/La;EAiMb,gBAAA;AAAA;;UAIa,0BAAA;EA7LA;EA+Lb,MAAA;;EAEA,MAAA;EA7LI;EA+LJ,MAAA;EA3L8B;EA6L9B,QAAA;EA3LA;EA6LA,MAAA;EAzLa;EA2Lb,YAAA;AAAA;;;;;AN/VJ;iBOmGgB,0BAAA,CAA2B,MAAA,GAAQ,0BAAA,GAAkC,aAAA;;;;;APnGrF;iBQuEgB,sBAAA,CAAuB,MAAA,GAAQ,sBAAA,GAA8B,aAAA;;;;iBCrE7D,+BAAA,CAAA,GAAmC,mBAAA;;;;ATFnD;;;;;;;;;;;;;;;;;;;;;;;;;cUuGa,OAAA,GAAO,YAAA,EAAkB,aAAA,KAAgB,MAAA"}
|