pg-boss 12.5.4 → 12.6.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.
@@ -23,9 +23,13 @@ function migrate(schema, version, migrations) {
23
23
  const result = migrations
24
24
  .filter(i => i.previous >= version)
25
25
  .sort((a, b) => a.version - b.version)
26
- .reduce((acc, i) => {
27
- acc.install = acc.install.concat(i.install);
28
- acc.version = i.version;
26
+ .reduce((acc, migration) => {
27
+ acc.install = acc.install.concat(migration.install);
28
+ if (migration.async) {
29
+ const bamCommands = migration.async.map(cmd => cmd.replace(/\$VERSION\$/g, String(migration.version)));
30
+ acc.install = acc.install.concat(bamCommands);
31
+ }
32
+ acc.version = migration.version;
29
33
  return acc;
30
34
  }, { install: [], version });
31
35
  assert(result.install.length > 0, `Version ${version} not found.`);
@@ -121,6 +125,301 @@ function getAll(schema) {
121
125
  `DROP INDEX ${schema}.job_i6`
122
126
  ]
123
127
  },
128
+ {
129
+ release: '12.6.0',
130
+ version: 27,
131
+ previous: 26,
132
+ install: [
133
+ `ALTER TABLE ${schema}.version ADD COLUMN IF NOT EXISTS bam_on timestamp with time zone`,
134
+ `
135
+ CREATE TABLE IF NOT EXISTS ${schema}.bam (
136
+ id uuid PRIMARY KEY default gen_random_uuid(),
137
+ name text NOT NULL,
138
+ version int NOT NULL,
139
+ status text NOT NULL DEFAULT 'pending',
140
+ queue text,
141
+ table_name text NOT NULL,
142
+ command text NOT NULL,
143
+ error text,
144
+ created_on timestamp with time zone NOT NULL DEFAULT now(),
145
+ started_on timestamp with time zone,
146
+ completed_on timestamp with time zone
147
+ )
148
+ `,
149
+ `CREATE FUNCTION ${schema}.job_table_format(command text, table_name text)
150
+ RETURNS text AS
151
+ $$
152
+ SELECT format(
153
+ replace(
154
+ replace(command, '.job', '.%1$I'),
155
+ 'job_i', '%1$s_i'
156
+ ),
157
+ table_name
158
+ );
159
+ $$
160
+ LANGUAGE sql IMMUTABLE;
161
+ `,
162
+ `
163
+ CREATE OR REPLACE FUNCTION ${schema}.job_table_run_async(command_name text, version int, command text, tbl_name text DEFAULT NULL, queue_name text DEFAULT NULL)
164
+ RETURNS VOID AS
165
+ $$
166
+ BEGIN
167
+ IF queue_name IS NOT NULL THEN
168
+ SELECT table_name INTO tbl_name FROM ${schema}.queue WHERE name = queue_name;
169
+ END IF;
170
+
171
+ IF tbl_name IS NOT NULL THEN
172
+ INSERT INTO ${schema}.bam (name, version, status, queue, table_name, command)
173
+ VALUES (
174
+ command_name,
175
+ version,
176
+ 'pending',
177
+ queue_name,
178
+ tbl_name,
179
+ ${schema}.job_table_format(command, tbl_name)
180
+ );
181
+ RETURN;
182
+ END IF;
183
+
184
+ INSERT INTO ${schema}.bam (name, version, status, queue, table_name, command)
185
+ SELECT
186
+ command_name,
187
+ version,
188
+ 'pending',
189
+ NULL,
190
+ 'job_common',
191
+ ${schema}.job_table_format(command, 'job_common')
192
+ UNION ALL
193
+ SELECT
194
+ command_name,
195
+ version,
196
+ 'pending',
197
+ queue.name,
198
+ queue.table_name,
199
+ ${schema}.job_table_format(command, queue.table_name)
200
+ FROM ${schema}.queue
201
+ WHERE partition = true;
202
+ END;
203
+ $$
204
+ LANGUAGE plpgsql;
205
+ `,
206
+ `
207
+ CREATE OR REPLACE FUNCTION ${schema}.job_table_run(command text, tbl_name text DEFAULT NULL, queue_name text DEFAULT NULL)
208
+ RETURNS VOID AS
209
+ $$
210
+ DECLARE
211
+ tbl RECORD;
212
+ BEGIN
213
+ IF queue_name IS NOT NULL THEN
214
+ SELECT table_name INTO tbl_name FROM ${schema}.queue WHERE name = queue_name;
215
+ END IF;
216
+
217
+ IF tbl_name IS NOT NULL THEN
218
+ EXECUTE ${schema}.job_table_format(command, tbl_name);
219
+ RETURN;
220
+ END IF;
221
+
222
+ EXECUTE ${schema}.job_table_format(command, 'job_common');
223
+
224
+ FOR tbl IN SELECT table_name FROM ${schema}.queue WHERE partition = true
225
+ LOOP
226
+ EXECUTE ${schema}.job_table_format(command, tbl.table_name);
227
+ END LOOP;
228
+ END;
229
+ $$
230
+ LANGUAGE plpgsql;
231
+ `,
232
+ `ALTER TABLE ${schema}.job ADD COLUMN IF NOT EXISTS group_id text`,
233
+ `ALTER TABLE ${schema}.job ADD COLUMN IF NOT EXISTS group_tier text`,
234
+ `
235
+ CREATE OR REPLACE FUNCTION ${schema}.create_queue(queue_name text, options jsonb)
236
+ RETURNS VOID AS
237
+ $$
238
+ DECLARE
239
+ tablename varchar := CASE WHEN options->>'partition' = 'true'
240
+ THEN 'j' || encode(sha224(queue_name::bytea), 'hex')
241
+ ELSE 'job_common'
242
+ END;
243
+ queue_created_on timestamptz;
244
+ BEGIN
245
+
246
+ WITH q as (
247
+ INSERT INTO ${schema}.queue (
248
+ name,
249
+ policy,
250
+ retry_limit,
251
+ retry_delay,
252
+ retry_backoff,
253
+ retry_delay_max,
254
+ expire_seconds,
255
+ retention_seconds,
256
+ deletion_seconds,
257
+ warning_queued,
258
+ dead_letter,
259
+ partition,
260
+ table_name
261
+ )
262
+ VALUES (
263
+ queue_name,
264
+ options->>'policy',
265
+ COALESCE((options->>'retryLimit')::int, 2),
266
+ COALESCE((options->>'retryDelay')::int, 0),
267
+ COALESCE((options->>'retryBackoff')::bool, false),
268
+ (options->>'retryDelayMax')::int,
269
+ COALESCE((options->>'expireInSeconds')::int, 900),
270
+ COALESCE((options->>'retentionSeconds')::int, 1209600),
271
+ COALESCE((options->>'deleteAfterSeconds')::int, 604800),
272
+ COALESCE((options->>'warningQueueSize')::int, 0),
273
+ options->>'deadLetter',
274
+ COALESCE((options->>'partition')::bool, false),
275
+ tablename
276
+ )
277
+ ON CONFLICT DO NOTHING
278
+ RETURNING created_on
279
+ )
280
+ SELECT created_on into queue_created_on from q;
281
+
282
+ IF queue_created_on IS NULL OR options->>'partition' IS DISTINCT FROM 'true' THEN
283
+ RETURN;
284
+ END IF;
285
+
286
+ EXECUTE format('CREATE TABLE ${schema}.%I (LIKE ${schema}.job INCLUDING DEFAULTS)', tablename);
287
+
288
+ EXECUTE ${schema}.job_table_format($cmd$ALTER TABLE ${schema}.job ADD PRIMARY KEY (name, id)$cmd$, tablename);
289
+ EXECUTE ${schema}.job_table_format($cmd$ALTER TABLE ${schema}.job ADD CONSTRAINT q_fkey FOREIGN KEY (name) REFERENCES ${schema}.queue (name) ON DELETE RESTRICT DEFERRABLE INITIALLY DEFERRED$cmd$, tablename);
290
+ EXECUTE ${schema}.job_table_format($cmd$ALTER TABLE ${schema}.job ADD CONSTRAINT dlq_fkey FOREIGN KEY (dead_letter) REFERENCES ${schema}.queue (name) ON DELETE RESTRICT DEFERRABLE INITIALLY DEFERRED$cmd$, tablename);
291
+
292
+ EXECUTE ${schema}.job_table_format($cmd$CREATE INDEX job_i5 ON ${schema}.job (name, start_after) INCLUDE (priority, created_on, id) WHERE state < 'active'$cmd$, tablename);
293
+ EXECUTE ${schema}.job_table_format($cmd$CREATE UNIQUE INDEX job_i4 ON ${schema}.job (name, singleton_on, COALESCE(singleton_key, '')) WHERE state <> 'cancelled' AND singleton_on IS NOT NULL$cmd$, tablename);
294
+ EXECUTE ${schema}.job_table_format($cmd$CREATE INDEX job_i7 ON ${schema}.job (name, group_id) WHERE state = 'active' AND group_id IS NOT NULL$cmd$, tablename);
295
+
296
+ IF options->>'policy' = 'short' THEN
297
+ EXECUTE ${schema}.job_table_format($cmd$CREATE UNIQUE INDEX job_i1 ON ${schema}.job (name, COALESCE(singleton_key, '')) WHERE state = 'created' AND policy = 'short'$cmd$, tablename);
298
+ ELSIF options->>'policy' = 'singleton' THEN
299
+ EXECUTE ${schema}.job_table_format($cmd$CREATE UNIQUE INDEX job_i2 ON ${schema}.job (name, COALESCE(singleton_key, '')) WHERE state = 'active' AND policy = 'singleton'$cmd$, tablename);
300
+ ELSIF options->>'policy' = 'stately' THEN
301
+ EXECUTE ${schema}.job_table_format($cmd$CREATE UNIQUE INDEX job_i3 ON ${schema}.job (name, state, COALESCE(singleton_key, '')) WHERE state <= 'active' AND policy = 'stately'$cmd$, tablename);
302
+ ELSIF options->>'policy' = 'exclusive' THEN
303
+ EXECUTE ${schema}.job_table_format($cmd$CREATE UNIQUE INDEX job_i6 ON ${schema}.job (name, COALESCE(singleton_key, '')) WHERE state <= 'active' AND policy = 'exclusive'$cmd$, tablename);
304
+ END IF;
305
+
306
+ EXECUTE format('ALTER TABLE ${schema}.%I ADD CONSTRAINT cjc CHECK (name=%L)', tablename, queue_name);
307
+ EXECUTE format('ALTER TABLE ${schema}.job ATTACH PARTITION ${schema}.%I FOR VALUES IN (%L)', tablename, queue_name);
308
+ END;
309
+ $$
310
+ LANGUAGE plpgsql;
311
+ `,
312
+ `ALTER INDEX IF EXISTS ${schema}.job_i1 RENAME TO job_common_i1`,
313
+ `ALTER INDEX IF EXISTS ${schema}.job_i2 RENAME TO job_common_i2`,
314
+ `ALTER INDEX IF EXISTS ${schema}.job_i3 RENAME TO job_common_i3`,
315
+ `ALTER INDEX IF EXISTS ${schema}.job_i4 RENAME TO job_common_i4`,
316
+ `ALTER INDEX IF EXISTS ${schema}.job_i5 RENAME TO job_common_i5`,
317
+ `ALTER INDEX IF EXISTS ${schema}.job_i6 RENAME TO job_common_i6`,
318
+ `ALTER INDEX IF EXISTS ${schema}.job_i7 RENAME TO job_common_i7`
319
+ ],
320
+ async: [
321
+ `SELECT ${schema}.job_table_run_async(
322
+ 'group_concurency_index',
323
+ $VERSION$,
324
+ $$
325
+ CREATE INDEX CONCURRENTLY job_i7 ON ${schema}.job (name, group_id) WHERE state = 'active' AND group_id IS NOT NULL
326
+ $$
327
+ )`
328
+ ],
329
+ uninstall: [
330
+ `ALTER INDEX ${schema}.job_common_i6 RENAME TO job_i6`,
331
+ `ALTER INDEX ${schema}.job_common_i5 RENAME TO job_i5`,
332
+ `ALTER INDEX ${schema}.job_common_i4 RENAME TO job_i4`,
333
+ `ALTER INDEX ${schema}.job_common_i3 RENAME TO job_i3`,
334
+ `ALTER INDEX ${schema}.job_common_i2 RENAME TO job_i2`,
335
+ `ALTER INDEX ${schema}.job_common_i1 RENAME TO job_i1`,
336
+ `SELECT ${schema}.job_table_run('DROP INDEX ${schema}.job_i7')`,
337
+ `
338
+ CREATE OR REPLACE FUNCTION ${schema}.create_queue(queue_name text, options jsonb)
339
+ RETURNS VOID AS
340
+ $$
341
+ DECLARE
342
+ tablename varchar := CASE WHEN options->>'partition' = 'true'
343
+ THEN 'j' || encode(sha224(queue_name::bytea), 'hex')
344
+ ELSE 'job_common'
345
+ END;
346
+ queue_created_on timestamptz;
347
+ BEGIN
348
+
349
+ WITH q as (
350
+ INSERT INTO ${schema}.queue (
351
+ name,
352
+ policy,
353
+ retry_limit,
354
+ retry_delay,
355
+ retry_backoff,
356
+ retry_delay_max,
357
+ expire_seconds,
358
+ retention_seconds,
359
+ deletion_seconds,
360
+ warning_queued,
361
+ dead_letter,
362
+ partition,
363
+ table_name
364
+ )
365
+ VALUES (
366
+ queue_name,
367
+ options->>'policy',
368
+ COALESCE((options->>'retryLimit')::int, 2),
369
+ COALESCE((options->>'retryDelay')::int, 0),
370
+ COALESCE((options->>'retryBackoff')::bool, false),
371
+ (options->>'retryDelayMax')::int,
372
+ COALESCE((options->>'expireInSeconds')::int, 900),
373
+ COALESCE((options->>'retentionSeconds')::int, 1209600),
374
+ COALESCE((options->>'deleteAfterSeconds')::int, 604800),
375
+ COALESCE((options->>'warningQueueSize')::int, 0),
376
+ options->>'deadLetter',
377
+ COALESCE((options->>'partition')::bool, false),
378
+ tablename
379
+ )
380
+ ON CONFLICT DO NOTHING
381
+ RETURNING created_on
382
+ )
383
+ SELECT created_on into queue_created_on from q;
384
+
385
+ IF queue_created_on IS NULL OR options->>'partition' IS DISTINCT FROM 'true' THEN
386
+ RETURN;
387
+ END IF;
388
+
389
+ EXECUTE format('CREATE TABLE ${schema}.%I (LIKE ${schema}.job INCLUDING DEFAULTS)', tablename);
390
+
391
+ EXECUTE format('ALTER TABLE ${schema}.%1$I ADD PRIMARY KEY (name, id)', tablename);
392
+ EXECUTE format('ALTER TABLE ${schema}.%1$I ADD CONSTRAINT q_fkey FOREIGN KEY (name) REFERENCES ${schema}.queue (name) ON DELETE RESTRICT DEFERRABLE INITIALLY DEFERRED', tablename);
393
+ EXECUTE format('ALTER TABLE ${schema}.%1$I ADD CONSTRAINT dlq_fkey FOREIGN KEY (dead_letter) REFERENCES ${schema}.queue (name) ON DELETE RESTRICT DEFERRABLE INITIALLY DEFERRED', tablename);
394
+
395
+ EXECUTE format('CREATE INDEX %1$s_i5 ON ${schema}.%1$I (name, start_after) INCLUDE (priority, created_on, id) WHERE state < ''active''', tablename);
396
+ EXECUTE format('CREATE UNIQUE INDEX %1$s_i4 ON ${schema}.%1$I (name, singleton_on, COALESCE(singleton_key, '''')) WHERE state <> ''cancelled'' AND singleton_on IS NOT NULL', tablename);
397
+
398
+ IF options->>'policy' = 'short' THEN
399
+ EXECUTE format('CREATE UNIQUE INDEX %1$s_i1 ON ${schema}.%1$I (name, COALESCE(singleton_key, '''')) WHERE state = ''created'' AND policy = ''short''', tablename);
400
+ ELSIF options->>'policy' = 'singleton' THEN
401
+ EXECUTE format('CREATE UNIQUE INDEX %1$s_i2 ON ${schema}.%1$I (name, COALESCE(singleton_key, '''')) WHERE state = ''active'' AND policy = ''singleton''', tablename);
402
+ ELSIF options->>'policy' = 'stately' THEN
403
+ EXECUTE format('CREATE UNIQUE INDEX %1$s_i3 ON ${schema}.%1$I (name, state, COALESCE(singleton_key, '''')) WHERE state <= ''active'' AND policy = ''stately''', tablename);
404
+ ELSIF options->>'policy' = 'exclusive' THEN
405
+ EXECUTE format('CREATE UNIQUE INDEX %1$s_i6 ON ${schema}.%1$I (name, COALESCE(singleton_key, '''')) WHERE state <= ''active'' AND policy = ''exclusive''', tablename);
406
+ END IF;
407
+
408
+ EXECUTE format('ALTER TABLE ${schema}.%I ADD CONSTRAINT cjc CHECK (name=%L)', tablename, queue_name);
409
+ EXECUTE format('ALTER TABLE ${schema}.job ATTACH PARTITION ${schema}.%I FOR VALUES IN (%L)', tablename, queue_name);
410
+ END;
411
+ $$
412
+ LANGUAGE plpgsql;
413
+ `,
414
+ `DROP FUNCTION ${schema}.job_table_run(text, text, text)`,
415
+ `DROP FUNCTION ${schema}.job_table_run_async(text, int, text, text, text)`,
416
+ `DROP FUNCTION ${schema}.job_table_format(text, text)`,
417
+ `DROP TABLE ${schema}.bam`,
418
+ `ALTER TABLE ${schema}.version DROP COLUMN bam_on`,
419
+ `ALTER TABLE ${schema}.job DROP COLUMN group_tier`,
420
+ `ALTER TABLE ${schema}.job DROP COLUMN group_id`
421
+ ]
422
+ }
124
423
  ];
125
424
  }
126
425
  export { rollback, next, migrate, getAll, };
package/dist/plans.d.ts CHANGED
@@ -29,6 +29,7 @@ declare function deleteQueue(schema: string, name: string): string;
29
29
  declare function trySetQueueMonitorTime(schema: string, queues: string[], seconds: number): SqlQuery;
30
30
  declare function trySetQueueDeletionTime(schema: string, queues: string[], seconds: number): SqlQuery;
31
31
  declare function trySetCronTime(schema: string, seconds: number): string;
32
+ declare function trySetBamTime(schema: string, seconds: number): string;
32
33
  declare function updateQueue(schema: string, { deadLetter }?: UpdateQueueOptions): string;
33
34
  declare function getQueues(schema: string, names?: string[]): SqlQuery;
34
35
  declare function deleteJobsById(schema: string, table: string): string;
@@ -48,6 +49,10 @@ declare function getVersion(schema: string): string;
48
49
  declare function setVersion(schema: string, version: number): string;
49
50
  declare function versionTableExists(schema: string): string;
50
51
  declare function insertVersion(schema: string, version: number): string;
52
+ interface GroupConcurrencyConfig {
53
+ default: number;
54
+ tiers?: Record<string, number>;
55
+ }
51
56
  interface FetchJobOptions {
52
57
  schema: string;
53
58
  table: string;
@@ -58,11 +63,14 @@ interface FetchJobOptions {
58
63
  priority?: boolean;
59
64
  ignoreStartAfter?: boolean;
60
65
  ignoreSingletons: string[] | null;
66
+ ignoreGroups?: string[] | null;
67
+ groupConcurrency?: number | GroupConcurrencyConfig;
61
68
  }
62
- declare function fetchNextJob({ schema, table, name, policy, limit, includeMetadata, priority, ignoreStartAfter, ignoreSingletons }: FetchJobOptions): SqlQuery;
69
+ declare function fetchNextJob(options: FetchJobOptions): SqlQuery;
63
70
  declare function completeJobs(schema: string, table: string): string;
64
71
  declare function cancelJobs(schema: string, table: string): string;
65
72
  declare function resumeJobs(schema: string, table: string): string;
73
+ declare function restoreJobs(schema: string, table: string): string;
66
74
  interface InsertJobsOptions {
67
75
  table: string;
68
76
  name: string;
@@ -77,6 +85,17 @@ declare function getQueueStats(schema: string, table: string, queues: string[]):
77
85
  declare function cacheQueueStats(schema: string, table: string, queues: string[]): string;
78
86
  declare function locked(schema: string, query: string | string[], key?: string): string;
79
87
  declare function assertMigration(schema: string, version: number): string;
88
+ declare function findJobs(schema: string, table: string, options: {
89
+ queued: boolean;
90
+ byKey: boolean;
91
+ byData: boolean;
92
+ byId: boolean;
93
+ }): string;
80
94
  declare function getJobById(schema: string, table: string): string;
81
- export { create, insertVersion, getVersion, setVersion, versionTableExists, fetchNextJob, completeJobs, cancelJobs, resumeJobs, retryJobs, deleteJobsById, deleteAllJobs, deleteQueuedJobs, deleteStoredJobs, truncateTable, failJobsById, failJobsByTimeout, insertJobs, getTime, getSchedules, getSchedulesByQueue, schedule, unschedule, subscribe, unsubscribe, getQueuesForEvent, deletion, cacheQueueStats, updateQueue, createQueue, deleteQueue, getQueues, getQueueStats, trySetQueueMonitorTime, trySetQueueDeletionTime, trySetCronTime, locked, assertMigration, getJobById, QUEUE_POLICIES, JOB_STATES, MIGRATE_RACE_MESSAGE, CREATE_RACE_MESSAGE, DEFAULT_SCHEMA, };
95
+ declare function getNextBamCommand(schema: string): string;
96
+ declare function setBamCompleted(schema: string, id: string): string;
97
+ declare function setBamFailed(schema: string, id: string, error: string): string;
98
+ declare function getBamStatus(schema: string): string;
99
+ declare function getBamEntries(schema: string): string;
100
+ export { create, insertVersion, getVersion, setVersion, versionTableExists, fetchNextJob, completeJobs, cancelJobs, resumeJobs, restoreJobs, retryJobs, findJobs, deleteJobsById, deleteAllJobs, deleteQueuedJobs, deleteStoredJobs, truncateTable, failJobsById, failJobsByTimeout, insertJobs, getTime, getSchedules, getSchedulesByQueue, schedule, unschedule, subscribe, unsubscribe, getQueuesForEvent, deletion, cacheQueueStats, updateQueue, createQueue, deleteQueue, getQueues, getQueueStats, trySetQueueMonitorTime, trySetQueueDeletionTime, trySetCronTime, trySetBamTime, locked, assertMigration, getJobById, getNextBamCommand, setBamCompleted, setBamFailed, getBamStatus, getBamEntries, QUEUE_POLICIES, JOB_STATES, MIGRATE_RACE_MESSAGE, CREATE_RACE_MESSAGE, DEFAULT_SCHEMA, };
82
101
  //# sourceMappingURL=plans.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plans.d.ts","sourceRoot":"","sources":["../src/plans.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plans.d.ts","sourceRoot":"","sources":["../src/plans.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAEpD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,OAAO,EAAE,CAAA;CAClB;AAED,QAAA,MAAM,cAAc,WAAW,CAAA;AAC/B,QAAA,MAAM,oBAAoB,qBAAqB,CAAA;AAC/C,QAAA,MAAM,mBAAmB,mBAAmB,CAAA;AAM5C,QAAA,MAAM,UAAU;;;;;;;EAOd,CAAA;AAEF,QAAA,MAAM,cAAc;;;;;;EAMlB,CAAA;AAeF,iBAAS,MAAM,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,UA2BrF;AA4XD,iBAAS,WAAW,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,UAGnE;AAED,iBAAS,WAAW,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAGjD;AA0CD,iBAAS,sBAAsB,CAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAE5F;AAED,iBAAS,uBAAuB,CAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAE7F;AAED,iBAAS,cAAc,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,UAEvD;AAED,iBAAS,aAAa,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,UAEtD;AAwBD,iBAAS,WAAW,CAAE,MAAM,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,GAAE,kBAAuB,UAuB5E;AAED,iBAAS,SAAS,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,QAAQ,CA8B9D;AAED,iBAAS,cAAc,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAUrD;AAED,iBAAS,gBAAgB,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAEvD;AAED,iBAAS,gBAAgB,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAEvD;AAED,iBAAS,aAAa,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAEpD;AAED,iBAAS,aAAa,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAEpD;AAED,iBAAS,YAAY,CAAE,MAAM,EAAE,MAAM,UAEpC;AAED,iBAAS,mBAAmB,CAAE,MAAM,EAAE,MAAM,UAE3C;AAED,iBAAS,QAAQ,CAAE,MAAM,EAAE,MAAM,UAWhC;AAED,iBAAS,UAAU,CAAE,MAAM,EAAE,MAAM,UAMlC;AAED,iBAAS,SAAS,CAAE,MAAM,EAAE,MAAM,UASjC;AAED,iBAAS,WAAW,CAAE,MAAM,EAAE,MAAM,UAKnC;AAED,iBAAS,iBAAiB,CAAE,MAAM,EAAE,MAAM,UAKzC;AAED,iBAAS,OAAO,WAEf;AAED,iBAAS,UAAU,CAAE,MAAM,EAAE,MAAM,UAElC;AAED,iBAAS,UAAU,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,UAEnD;AAED,iBAAS,kBAAkB,CAAE,MAAM,EAAE,MAAM,UAE1C;AAED,iBAAS,aAAa,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,UAEtD;AAED,UAAU,sBAAsB;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B;AAED,UAAU,eAAe;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,gBAAgB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IACjC,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IAC9B,gBAAgB,CAAC,EAAE,MAAM,GAAG,sBAAsB,CAAA;CACnD;AAsDD,iBAAS,YAAY,CAAE,OAAO,EAAE,eAAe,GAAG,QAAQ,CAqGzD;AAED,iBAAS,YAAY,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAcnD;AAED,iBAAS,UAAU,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAajD;AAED,iBAAS,UAAU,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAajD;AAED,iBAAS,WAAW,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAOlD;AAED,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,iBAAS,UAAU,CAAE,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAe,EAAE,EAAE,iBAAiB,UA2EvF;AAED,iBAAS,YAAY,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAKnD;AAED,iBAAS,iBAAiB,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAQnF;AA6JD,iBAAS,QAAQ,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAa1E;AAED,iBAAS,SAAS,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAahD;AAED,iBAAS,aAAa,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAgBjF;AAED,iBAAS,eAAe,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CA0BjF;AAQD,iBAAS,MAAM,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAW/E;AAQD,iBAAS,eAAe,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,UAGxD;AAED,iBAAS,QAAQ,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,UA+B7H;AAED,iBAAS,UAAU,CAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAOjD;AAED,iBAAS,iBAAiB,CAAE,MAAM,EAAE,MAAM,UAczC;AAED,iBAAS,eAAe,CAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,UAMnD;AAED,iBAAS,YAAY,CAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAO/D;AAED,iBAAS,YAAY,CAAE,MAAM,EAAE,MAAM,UAMpC;AAED,iBAAS,aAAa,CAAE,MAAM,EAAE,MAAM,UAOrC;AAED,OAAO,EACL,MAAM,EACN,aAAa,EACb,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,UAAU,EACV,WAAW,EACX,SAAS,EACT,QAAQ,EACR,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,OAAO,EACP,YAAY,EACZ,mBAAmB,EACnB,QAAQ,EACR,UAAU,EACV,SAAS,EACT,WAAW,EACX,iBAAiB,EACjB,QAAQ,EACR,eAAe,EACf,WAAW,EACX,WAAW,EACX,WAAW,EACX,SAAS,EACT,aAAa,EACb,sBAAsB,EACtB,uBAAuB,EACvB,cAAc,EACd,aAAa,EACb,MAAM,EACN,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,GACf,CAAA"}