@cogitator-ai/workflows 0.7.3 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -0
- package/dist/builder.d.ts +1 -1
- package/dist/builder.d.ts.map +1 -1
- package/dist/builder.js.map +1 -1
- package/dist/checkpoint-stores.d.ts +61 -0
- package/dist/checkpoint-stores.d.ts.map +1 -0
- package/dist/checkpoint-stores.js +111 -0
- package/dist/checkpoint-stores.js.map +1 -0
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +18 -7
- package/dist/executor.js.map +1 -1
- package/dist/human/approval-outcomes.d.ts +26 -0
- package/dist/human/approval-outcomes.d.ts.map +1 -0
- package/dist/human/approval-outcomes.js +61 -0
- package/dist/human/approval-outcomes.js.map +1 -0
- package/dist/human/approval-store.d.ts +12 -0
- package/dist/human/approval-store.d.ts.map +1 -1
- package/dist/human/approval-store.js +52 -9
- package/dist/human/approval-store.js.map +1 -1
- package/dist/human/durable-approval-stores.d.ts +118 -0
- package/dist/human/durable-approval-stores.d.ts.map +1 -0
- package/dist/human/durable-approval-stores.js +383 -0
- package/dist/human/durable-approval-stores.js.map +1 -0
- package/dist/human/human-node.d.ts +13 -7
- package/dist/human/human-node.d.ts.map +1 -1
- package/dist/human/human-node.js +9 -8
- package/dist/human/human-node.js.map +1 -1
- package/dist/human/index.d.ts +2 -1
- package/dist/human/index.d.ts.map +1 -1
- package/dist/human/index.js +1 -0
- package/dist/human/index.js.map +1 -1
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/manager/durable-run-stores.d.ts +88 -0
- package/dist/manager/durable-run-stores.d.ts.map +1 -0
- package/dist/manager/durable-run-stores.js +492 -0
- package/dist/manager/durable-run-stores.js.map +1 -0
- package/dist/manager/run-store.d.ts +1 -0
- package/dist/manager/run-store.d.ts.map +1 -1
- package/dist/manager/run-store.js +21 -10
- package/dist/manager/run-store.js.map +1 -1
- package/dist/manager/workflow-manager.d.ts +7 -1
- package/dist/manager/workflow-manager.d.ts.map +1 -1
- package/dist/manager/workflow-manager.js +42 -16
- package/dist/manager/workflow-manager.js.map +1 -1
- package/dist/observability/exporters.js +1 -1
- package/dist/observability/exporters.js.map +1 -1
- package/dist/observability/tracer.d.ts +1 -0
- package/dist/observability/tracer.d.ts.map +1 -1
- package/dist/observability/tracer.js +2 -1
- package/dist/observability/tracer.js.map +1 -1
- package/dist/postgres-schema.d.ts +18 -0
- package/dist/postgres-schema.d.ts.map +1 -0
- package/dist/postgres-schema.js +35 -0
- package/dist/postgres-schema.js.map +1 -0
- package/dist/subworkflows/parallel-subworkflows.d.ts +15 -11
- package/dist/subworkflows/parallel-subworkflows.d.ts.map +1 -1
- package/dist/subworkflows/parallel-subworkflows.js +21 -31
- package/dist/subworkflows/parallel-subworkflows.js.map +1 -1
- package/dist/timers/durable-timer-stores.d.ts +174 -0
- package/dist/timers/durable-timer-stores.d.ts.map +1 -0
- package/dist/timers/durable-timer-stores.js +501 -0
- package/dist/timers/durable-timer-stores.js.map +1 -0
- package/dist/timers/timer-manager.d.ts +28 -1
- package/dist/timers/timer-manager.d.ts.map +1 -1
- package/dist/timers/timer-manager.js +87 -3
- package/dist/timers/timer-manager.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parallel-subworkflows.d.ts","sourceRoot":"","sources":["../../src/subworkflows/parallel-subworkflows.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACnF,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC9B,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,sBAAsB,CAAC,EAAE,SAAS,aAAa,EAAE,EAAE,SAAS,aAAa;IACxF,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,iBAAiB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,0BAA0B,
|
|
1
|
+
{"version":3,"file":"parallel-subworkflows.d.ts","sourceRoot":"","sources":["../../src/subworkflows/parallel-subworkflows.ts"],"names":[],"mappings":"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"}
|
|
@@ -146,47 +146,37 @@ export function fanOutFanIn(name, config) {
|
|
|
146
146
|
outputMapper: (_result, parentState) => parentState,
|
|
147
147
|
},
|
|
148
148
|
})),
|
|
149
|
-
aggregator: (results, state) =>
|
|
150
|
-
const workflowResults = new Map();
|
|
151
|
-
for (const [id, result] of results) {
|
|
152
|
-
if (result.childResult) {
|
|
153
|
-
workflowResults.set(id, result.childResult);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
return config.aggregator(workflowResults, state);
|
|
157
|
-
},
|
|
149
|
+
aggregator: (results, state) => config.aggregator(childResults(results), state),
|
|
158
150
|
};
|
|
159
151
|
}
|
|
160
152
|
export function scatterGather(name, config) {
|
|
161
|
-
const subworkflows = []
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
id
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
},
|
|
172
|
-
});
|
|
173
|
-
}
|
|
153
|
+
const subworkflows = [...config.workflows].map(([id, workflow]) => ({
|
|
154
|
+
id,
|
|
155
|
+
config: {
|
|
156
|
+
name: `${name}:${id}`,
|
|
157
|
+
workflow,
|
|
158
|
+
inputMapper: (state) => config.inputMapper(state, id),
|
|
159
|
+
outputMapper: (_result, parentState) => parentState,
|
|
160
|
+
timeout: config.timeout,
|
|
161
|
+
},
|
|
162
|
+
}));
|
|
174
163
|
return {
|
|
175
164
|
name,
|
|
176
165
|
subworkflows,
|
|
177
166
|
concurrency: config.concurrency,
|
|
178
167
|
continueOnError: config.continueOnError ?? true,
|
|
179
|
-
aggregator: (results, state) =>
|
|
180
|
-
const workflowResults = new Map();
|
|
181
|
-
for (const [id, result] of results) {
|
|
182
|
-
if (result.childResult) {
|
|
183
|
-
workflowResults.set(id, result.childResult);
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
return config.outputMapper(workflowResults, state);
|
|
187
|
-
},
|
|
168
|
+
aggregator: (results, state) => config.outputMapper(childResults(results), state),
|
|
188
169
|
};
|
|
189
170
|
}
|
|
171
|
+
/** The child workflow results of the subworkflows that ran. */
|
|
172
|
+
function childResults(results) {
|
|
173
|
+
const children = new Map();
|
|
174
|
+
for (const [id, result] of results) {
|
|
175
|
+
if (result.childResult)
|
|
176
|
+
children.set(id, result.childResult);
|
|
177
|
+
}
|
|
178
|
+
return children;
|
|
179
|
+
}
|
|
190
180
|
export async function raceSubworkflows(parentState, subworkflows, context) {
|
|
191
181
|
const controller = new AbortController();
|
|
192
182
|
const { signal } = controller;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parallel-subworkflows.js","sourceRoot":"","sources":["../../src/subworkflows/parallel-subworkflows.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,GAKnB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"parallel-subworkflows.js","sourceRoot":"","sources":["../../src/subworkflows/parallel-subworkflows.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Durable workflow timer stores: Redis and Postgres.
|
|
3
|
+
*
|
|
4
|
+
* Several workers may run a `TimerManager` against one durable store, so
|
|
5
|
+
* `getOverdue()` claims what it returns: each overdue timer is leased to the
|
|
6
|
+
* store instance that returned it for `claimTtl` ms and skipped by every
|
|
7
|
+
* other `getOverdue()` until `markFired`/`cancel` ends the claim, the owner
|
|
8
|
+
* gives it up with `release`, or the lease runs out (a crashed worker's
|
|
9
|
+
* timers come back after that). The owner keeps a long-running timer with
|
|
10
|
+
* `renew`; a timer whose handler failed stays claimed, so it is retried once
|
|
11
|
+
* its lease expires.
|
|
12
|
+
*/
|
|
13
|
+
import type { TimerEntry, TimerStore } from '@cogitator-ai/types';
|
|
14
|
+
type FireCallback = (entry: TimerEntry) => void;
|
|
15
|
+
type NewTimer = Omit<TimerEntry, 'id' | 'cancelled' | 'fired' | 'createdAt'>;
|
|
16
|
+
/**
|
|
17
|
+
* The Redis commands the store uses; `@cogitator-ai/redis` clients and
|
|
18
|
+
* ioredis both provide them. Every command touches a single key, so it also
|
|
19
|
+
* works on Redis Cluster.
|
|
20
|
+
*/
|
|
21
|
+
export interface TimerStoreRedisClient {
|
|
22
|
+
get(key: string): Promise<string | null>;
|
|
23
|
+
set(key: string, value: string): Promise<unknown>;
|
|
24
|
+
del(...keys: string[]): Promise<number>;
|
|
25
|
+
/** Resolves to the number of members added (0 when the member existed). */
|
|
26
|
+
zadd(key: string, score: number, member: string): Promise<number>;
|
|
27
|
+
zrange(key: string, start: number, stop: number): Promise<string[]>;
|
|
28
|
+
zrangebyscore(key: string, min: number | string, max: number | string): Promise<string[]>;
|
|
29
|
+
zrem(key: string, ...members: string[]): Promise<unknown>;
|
|
30
|
+
}
|
|
31
|
+
export interface RedisTimerStoreOptions {
|
|
32
|
+
client: TimerStoreRedisClient;
|
|
33
|
+
/** Prefix of every key (default `cogitator:workflow-timers`) */
|
|
34
|
+
keyPrefix?: string;
|
|
35
|
+
/** How long a timer handed out by `getOverdue()` stays claimed, in ms (default 60 000) */
|
|
36
|
+
claimTtl?: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Timers in Redis: each as JSON under its id, indexed by sorted sets scored
|
|
40
|
+
* by `firesAt` (all timers, pending timers, per workflow, per run) and a
|
|
41
|
+
* sorted set of finished timers scored by `createdAt` for `cleanup`.
|
|
42
|
+
*
|
|
43
|
+
* A claim is a per-timer sorted set of lease generations scored by their
|
|
44
|
+
* expiry. Claiming adds the next generation; only the caller whose `ZADD`
|
|
45
|
+
* creates it owns the lease, and it backs off if another generation is still
|
|
46
|
+
* live afterwards, so concurrent workers never share one. Each store
|
|
47
|
+
* instance remembers the generations it holds, which is what `renew` and
|
|
48
|
+
* `release` act on. Leases are measured on the workers' clocks, so keep
|
|
49
|
+
* them in sync.
|
|
50
|
+
*
|
|
51
|
+
* `cancel`, `markFired` and `update` read, change and write a timer, so
|
|
52
|
+
* concurrent writes to one timer are last-writer-wins. `onFire` callbacks run
|
|
53
|
+
* in the process that calls `markFired`.
|
|
54
|
+
*/
|
|
55
|
+
export declare class RedisTimerStore implements TimerStore {
|
|
56
|
+
readonly claimTtl: number;
|
|
57
|
+
private readonly client;
|
|
58
|
+
private readonly prefix;
|
|
59
|
+
private readonly listeners;
|
|
60
|
+
private readonly held;
|
|
61
|
+
constructor(options: RedisTimerStoreOptions);
|
|
62
|
+
schedule(entry: NewTimer): Promise<string>;
|
|
63
|
+
get(id: string): Promise<TimerEntry | null>;
|
|
64
|
+
cancel(id: string): Promise<void>;
|
|
65
|
+
/** Extends this instance's live claim on a timer; `false` when it no longer holds one. */
|
|
66
|
+
renew(id: string): Promise<boolean>;
|
|
67
|
+
/** Expires this instance's claim on a timer so any worker can take it now. */
|
|
68
|
+
release(id: string): Promise<void>;
|
|
69
|
+
getByWorkflow(workflowId: string): Promise<TimerEntry[]>;
|
|
70
|
+
getByRun(runId: string): Promise<TimerEntry[]>;
|
|
71
|
+
getPending(): Promise<TimerEntry[]>;
|
|
72
|
+
/**
|
|
73
|
+
* Overdue pending timers, oldest first, each claimed for `claimTtl` ms:
|
|
74
|
+
* timers claimed by another caller are left out until their lease expires.
|
|
75
|
+
*/
|
|
76
|
+
getOverdue(): Promise<TimerEntry[]>;
|
|
77
|
+
markFired(id: string): Promise<void>;
|
|
78
|
+
cleanup(olderThan: number): Promise<number>;
|
|
79
|
+
onFire(callback: FireCallback): () => void;
|
|
80
|
+
/** Patches a timer; it keeps its id, and a patch that finishes it ends its claim. */
|
|
81
|
+
update(id: string, patch: Partial<TimerEntry>): Promise<void>;
|
|
82
|
+
list(filter?: {
|
|
83
|
+
enabled?: boolean;
|
|
84
|
+
type?: string;
|
|
85
|
+
}): Promise<TimerEntry[]>;
|
|
86
|
+
private claimIfDue;
|
|
87
|
+
/**
|
|
88
|
+
* Takes the lease on a timer unless a live one exists, returning the lease
|
|
89
|
+
* generation it now owns. Generations only grow while the claim key lives,
|
|
90
|
+
* and releasing a lease expires its generation in place, so two callers can
|
|
91
|
+
* only contend for the same generation and `ZADD` picks one of them; a
|
|
92
|
+
* winner that finds an older generation renewed meanwhile backs off.
|
|
93
|
+
*/
|
|
94
|
+
private claim;
|
|
95
|
+
private write;
|
|
96
|
+
private unindex;
|
|
97
|
+
private loadIndex;
|
|
98
|
+
private timerKey;
|
|
99
|
+
private claimKey;
|
|
100
|
+
private allKey;
|
|
101
|
+
private pendingKey;
|
|
102
|
+
private doneKey;
|
|
103
|
+
private workflowKey;
|
|
104
|
+
private runKey;
|
|
105
|
+
}
|
|
106
|
+
/** The query method of a `pg` Pool or Client. */
|
|
107
|
+
export interface TimerStorePgClient {
|
|
108
|
+
query(text: string, values?: unknown[]): Promise<{
|
|
109
|
+
rows: Array<Record<string, unknown>>;
|
|
110
|
+
}>;
|
|
111
|
+
}
|
|
112
|
+
export interface PostgresTimerStoreOptions {
|
|
113
|
+
client: TimerStorePgClient;
|
|
114
|
+
/** Table name (default `cogitator_workflow_timers`); created on first use */
|
|
115
|
+
table?: string;
|
|
116
|
+
/** How long a timer handed out by `getOverdue()` stays claimed, in ms (default 60 000) */
|
|
117
|
+
claimTtl?: number;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Timers in a Postgres table, as JSONB rows with indexed `status`,
|
|
121
|
+
* `fires_at`, `workflow_id` and `run_id` columns.
|
|
122
|
+
*
|
|
123
|
+
* `getOverdue()` claims rows with `UPDATE … SET claimed_until, claimed_by`
|
|
124
|
+
* over a `SELECT … FOR UPDATE SKIP LOCKED`, so concurrent workers split the
|
|
125
|
+
* overdue timers between them; `claimed_by` is a random id per store
|
|
126
|
+
* instance, which `renew` and `release` check. Leases are measured on the
|
|
127
|
+
* database clock. `cancel`,
|
|
128
|
+
* `markFired` and `update` are single statements, so concurrent writers never
|
|
129
|
+
* lose each other's changes and `onFire` callbacks run once, in the process
|
|
130
|
+
* whose `markFired` fired the timer.
|
|
131
|
+
*/
|
|
132
|
+
export declare class PostgresTimerStore implements TimerStore {
|
|
133
|
+
readonly claimTtl: number;
|
|
134
|
+
private readonly client;
|
|
135
|
+
private readonly table;
|
|
136
|
+
private readonly owner;
|
|
137
|
+
private readonly listeners;
|
|
138
|
+
private ready?;
|
|
139
|
+
constructor(options: PostgresTimerStoreOptions);
|
|
140
|
+
schedule(entry: NewTimer): Promise<string>;
|
|
141
|
+
get(id: string): Promise<TimerEntry | null>;
|
|
142
|
+
cancel(id: string): Promise<void>;
|
|
143
|
+
/** Extends this instance's live claim on a timer; `false` when it no longer holds one. */
|
|
144
|
+
renew(id: string): Promise<boolean>;
|
|
145
|
+
/** Clears this instance's claim on a timer so any worker can take it now. */
|
|
146
|
+
release(id: string): Promise<void>;
|
|
147
|
+
getByWorkflow(workflowId: string): Promise<TimerEntry[]>;
|
|
148
|
+
getByRun(runId: string): Promise<TimerEntry[]>;
|
|
149
|
+
getPending(): Promise<TimerEntry[]>;
|
|
150
|
+
/**
|
|
151
|
+
* Overdue pending timers, oldest first, each claimed for `claimTtl` ms:
|
|
152
|
+
* timers claimed by another caller are left out until their lease expires.
|
|
153
|
+
*/
|
|
154
|
+
getOverdue(): Promise<TimerEntry[]>;
|
|
155
|
+
markFired(id: string): Promise<void>;
|
|
156
|
+
cleanup(olderThan: number): Promise<number>;
|
|
157
|
+
onFire(callback: FireCallback): () => void;
|
|
158
|
+
/**
|
|
159
|
+
* Patches a timer in one statement (top-level keys, like `Object.assign`;
|
|
160
|
+
* `undefined` removes a key); it keeps its id, and a patch that finishes it
|
|
161
|
+
* ends its claim.
|
|
162
|
+
*/
|
|
163
|
+
update(id: string, patch: Partial<TimerEntry>): Promise<void>;
|
|
164
|
+
list(filter?: {
|
|
165
|
+
enabled?: boolean;
|
|
166
|
+
type?: string;
|
|
167
|
+
}): Promise<TimerEntry[]>;
|
|
168
|
+
private finish;
|
|
169
|
+
private select;
|
|
170
|
+
private ensureTable;
|
|
171
|
+
private createTable;
|
|
172
|
+
}
|
|
173
|
+
export {};
|
|
174
|
+
//# sourceMappingURL=durable-timer-stores.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"durable-timer-stores.d.ts","sourceRoot":"","sources":["../../src/timers/durable-timer-stores.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAIlE,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;AAChD,KAAK,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,WAAW,GAAG,OAAO,GAAG,WAAW,CAAC,CAAC;AAuD7E;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,GAAG,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,2EAA2E;IAC3E,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACpE,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1F,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3D;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,qBAAqB,CAAC;IAC9B,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,eAAgB,YAAW,UAAU;IAChD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuB;IACjD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6B;gBAEtC,OAAO,EAAE,sBAAsB;IAMrC,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAM1C,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAK3C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvC,0FAA0F;IACpF,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoBzC,8EAA8E;IACxE,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASlC,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAKxD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAK9C,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAKzC;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAOnC,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpC,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBjD,MAAM,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,IAAI;IAI1C,qFAAqF;IAC/E,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7D,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;YAKlE,UAAU;IAiBxB;;;;;;OAMG;YACW,KAAK;YAiBL,KAAK;YAsBL,OAAO;YASP,SAAS;IAQvB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,MAAM;CAGf;AAED,iDAAiD;AACjD,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;KAAE,CAAC,CAAC;CAC5F;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAOD;;;;;;;;;;;;GAYG;AACH,qBAAa,kBAAmB,YAAW,UAAU;IACnD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuB;IACjD,OAAO,CAAC,KAAK,CAAC,CAAgB;gBAElB,OAAO,EAAE,yBAAyB;IAUxC,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAkB1C,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAM3C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,0FAA0F;IACpF,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYzC,6EAA6E;IACvE,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASlC,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAIxD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAI9C,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAIzC;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAmBnC,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpC,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IASjD,MAAM,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,IAAI;IAI1C;;;;OAIG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB7D,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;YAclE,MAAM;YAaN,MAAM;IASpB,OAAO,CAAC,WAAW;YAQL,WAAW;CAiC1B"}
|