@lossless.org/client 1.11.0 → 1.13.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.
@@ -8,6 +8,8 @@ export declare class SmartdataOperationBudget {
8
8
  private readonly timer;
9
9
  constructor(timeoutMsArg: unknown, signalArg?: unknown);
10
10
  check(): void;
11
+ /** Whether the deadline itself has passed; a caller's signal does not count. */
12
+ expired(): boolean;
11
13
  remainingMs(): number;
12
14
  operationOptions(): {
13
15
  timeoutMS: number;
@@ -38,6 +38,12 @@ export class SmartdataOperationBudget {
38
38
  throw new SmartdataPersistenceError('unsupported_operation', 'SmartData operation was cancelled or exceeded its deadline.');
39
39
  }
40
40
  }
41
+ /** Whether the deadline itself has passed; a caller's signal does not count. */
42
+ expired() {
43
+ if (performance.now() >= this.expiresAt)
44
+ this.controller.abort();
45
+ return this.controller.signal.aborted;
46
+ }
41
47
  remainingMs() {
42
48
  this.check();
43
49
  return this.cleanupOptions().timeoutMS;
@@ -62,4 +68,4 @@ export class SmartdataOperationBudget {
62
68
  }
63
69
  close() { clearTimeout(this.timer); }
64
70
  }
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5vcGVyYXRpb25idWRnZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9ub3NxbGRiL2NsYXNzZXMub3BlcmF0aW9uYnVkZ2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JFLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBRXhDLHNGQUFzRjtBQUN0RixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUMvQixRQUFpQixFQUNqQixPQUEwQixFQUNELEVBQUU7SUFDM0IsSUFBSSxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxNQUFNLENBQUMsU0FBUztRQUMvRyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxNQUFNLEtBQUssUUFBUTtZQUNuRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN0RSxNQUFNLElBQUkseUJBQXlCLENBQUMsa0JBQWtCLEVBQUUsc0NBQXNDLENBQUMsQ0FBQztJQUNsRyxDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQTRCLENBQUM7SUFDaEUsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBYSxFQUFFLENBQUM7UUFDeEQsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyx3QkFBd0Is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
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5vcGVyYXRpb25idWRnZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9ub3NxbGRiL2NsYXNzZXMub3BlcmF0aW9uYnVkZ2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JFLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBRXhDLHNGQUFzRjtBQUN0RixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUMvQixRQUFpQixFQUNqQixPQUEwQixFQUNELEVBQUU7SUFDM0IsSUFBSSxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxNQUFNLENBQUMsU0FBUztRQUMvRyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxNQUFNLEtBQUssUUFBUTtZQUNuRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN0RSxNQUFNLElBQUkseUJBQXlCLENBQUMsa0JBQWtCLEVBQUUsc0NBQXNDLENBQUMsQ0FBQztJQUNsRyxDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQTRCLENBQUM7SUFDaEUsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBYSxFQUFFLENBQUM7UUFDeEQsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyx3QkFBd0Is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
@@ -25,6 +25,12 @@ export declare const isMongoDeadlineError: (errorArg: unknown) => boolean;
25
25
  /** Maps an expired driver deadline to `timeout`; every other error passes through unchanged. */
26
26
  export declare const normalizeDeadlineError: (errorArg: unknown) => unknown;
27
27
  export declare const isMongoTransactionRetryError: (errorArg: unknown) => boolean;
28
+ /**
29
+ * The server or the driver stated that the transaction was aborted and may be
30
+ * run again from its start, so nothing of it was committed. A timeout the
31
+ * driver raises in place of such an error copies its labels.
32
+ */
33
+ export declare const isMongoTransientTransactionError: (errorArg: unknown) => boolean;
28
34
  export declare const isMongoDuplicateKeyError: (errorArg: unknown) => errorArg is plugins.mongodb.MongoServerError;
29
35
  /**
30
36
  * MongoDB refuses an index whose key or name collides with an existing one:
@@ -34,6 +34,13 @@ export const normalizeDeadlineError = (errorArg) => isMongoDeadlineError(errorAr
34
34
  export const isMongoTransactionRetryError = (errorArg) => errorArg instanceof plugins.mongodb.MongoServerError &&
35
35
  (errorArg.hasErrorLabel('TransientTransactionError') ||
36
36
  errorArg.hasErrorLabel('UnknownTransactionCommitResult'));
37
+ /**
38
+ * The server or the driver stated that the transaction was aborted and may be
39
+ * run again from its start, so nothing of it was committed. A timeout the
40
+ * driver raises in place of such an error copies its labels.
41
+ */
42
+ export const isMongoTransientTransactionError = (errorArg) => errorArg instanceof plugins.mongodb.MongoError
43
+ && errorArg.hasErrorLabel(plugins.mongodb.MongoErrorLabel.TransientTransactionError);
37
44
  export const isMongoDuplicateKeyError = (errorArg) => {
38
45
  return (errorArg instanceof plugins.mongodb.MongoServerError &&
39
46
  (errorArg.code === 11000 || errorArg.codeName === 'DuplicateKey'));
@@ -62,4 +69,4 @@ export const normalizeOrdinaryPersistenceError = (errorArg, messageArg) => {
62
69
  }
63
70
  throw errorArg;
64
71
  };
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5wZXJzaXN0ZW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL25vc3FsZGIvY2xhc3Nlcy5wZXJzaXN0ZW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQVd4Qzs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLHlCQUEwQixTQUFRLEtBQUs7SUFDbEMsSUFBSSxDQUFpQztJQUVyRCxZQUNFLE9BQXVDLEVBQ3ZDLFVBQWtCLEVBQ2xCLFVBQXlCO1FBRXpCLEtBQUssQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLElBQUksR0FBRywyQkFBMkIsQ0FBQztRQUN4QyxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztJQUN0QixDQUFDO0NBQ0Y7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLENBQ3pDLFVBQWtCLEVBQ2xCLFFBQWtCLEVBQ1MsRUFBRSxDQUM3QixJQUFJLHlCQUF5QixDQUMzQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQ3pELENBQUM7QUFFSjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxRQUFpQixFQUFXLEVBQUUsQ0FDakUsUUFBUSxZQUFZLE9BQU8sQ0FBQyxPQUFPLENBQUMsMEJBQTBCO09BQzNELENBQ0QsUUFBUSxZQUFZLE9BQU8sQ0FBQyxPQUFPLENBQUMsbUJBQW1CO1dBQ3BELFFBQVEsQ0FBQyxhQUFhLFlBQVksT0FBTyxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsQ0FDaEYsQ0FBQztBQUVKLGdHQUFnRztBQUNoRyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLFFBQWlCLEVBQVcsRUFBRSxDQUNuRSxvQkFBb0IsQ0FBQyxRQUFRLENBQUM7SUFDNUIsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLG1EQUFtRCxFQUFFLFFBQVEsQ0FBQztJQUM1RixDQUFDLENBQUMsUUFBUSxDQUFDO0FBRWYsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxRQUFpQixFQUFXLEVBQUUsQ0FDekUsUUFBUSxZQUFZLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCO0lBQ3BELENBQ0UsUUFBUSxDQUFDLGFBQWEsQ0FBQywyQkFBMkIsQ0FBQztRQUNuRCxRQUFRLENBQUMsYUFBYSxDQUFDLGdDQUFnQyxDQUFDLENBQ3pELENBQUM7QUFFSixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUN0QyxRQUFpQixFQUM2QixFQUFFO0lBQ2hELE9BQU8sQ0FDTCxRQUFRLFlBQVksT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0I7UUFDcEQsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLEtBQUssSUFBSSxRQUFRLENBQUMsUUFBUSxLQUFLLGNBQWMsQ0FBQyxDQUNsRSxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUY7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLENBQ3ZDLFFBQWlCLEVBQzZCLEVBQUU7SUFDaEQsT0FBTyxDQUNMLFFBQVEsWUFBWSxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQjtRQUNwRCxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssRUFBRTtZQUNuQixRQUFRLENBQUMsSUFBSSxLQUFLLEVBQUU7WUFDcEIsUUFBUSxDQUFDLFFBQVEsS0FBSyxzQkFBc0I7WUFDNUMsUUFBUSxDQUFDLFFBQVEsS0FBSyx1QkFBdUIsQ0FBQyxDQUNqRCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQUcsQ0FDL0MsUUFBaUIsRUFDakIsVUFBa0IsRUFDWCxFQUFFO0lBQ1QsSUFDRSxRQUFRLFlBQVkseUJBQXlCO1FBQzdDLDRCQUE0QixDQUFDLFFBQVEsQ0FBQyxFQUN0QyxDQUFDO1FBQ0QsTUFBTSxRQUFRLENBQUM7SUFDakIsQ0FBQztJQUNELElBQUksd0JBQXdCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN2QyxNQUFNLElBQUkseUJBQXlCLENBQUMsaUJBQWlCLEVBQUUsVUFBVSxFQUFFO1lBQ2pFLEtBQUssRUFBRSxRQUFRO1NBQ2hCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxNQUFNLFFBQVEsQ0FBQztBQUNqQixDQUFDLENBQUMifQ==
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5wZXJzaXN0ZW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL25vc3FsZGIvY2xhc3Nlcy5wZXJzaXN0ZW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQVd4Qzs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLHlCQUEwQixTQUFRLEtBQUs7SUFDbEMsSUFBSSxDQUFpQztJQUVyRCxZQUNFLE9BQXVDLEVBQ3ZDLFVBQWtCLEVBQ2xCLFVBQXlCO1FBRXpCLEtBQUssQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLElBQUksR0FBRywyQkFBMkIsQ0FBQztRQUN4QyxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztJQUN0QixDQUFDO0NBQ0Y7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLENBQ3pDLFVBQWtCLEVBQ2xCLFFBQWtCLEVBQ1MsRUFBRSxDQUM3QixJQUFJLHlCQUF5QixDQUMzQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQ3pELENBQUM7QUFFSjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxRQUFpQixFQUFXLEVBQUUsQ0FDakUsUUFBUSxZQUFZLE9BQU8sQ0FBQyxPQUFPLENBQUMsMEJBQTBCO09BQzNELENBQ0QsUUFBUSxZQUFZLE9BQU8sQ0FBQyxPQUFPLENBQUMsbUJBQW1CO1dBQ3BELFFBQVEsQ0FBQyxhQUFhLFlBQVksT0FBTyxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsQ0FDaEYsQ0FBQztBQUVKLGdHQUFnRztBQUNoRyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLFFBQWlCLEVBQVcsRUFBRSxDQUNuRSxvQkFBb0IsQ0FBQyxRQUFRLENBQUM7SUFDNUIsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLG1EQUFtRCxFQUFFLFFBQVEsQ0FBQztJQUM1RixDQUFDLENBQUMsUUFBUSxDQUFDO0FBRWYsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxRQUFpQixFQUFXLEVBQUUsQ0FDekUsUUFBUSxZQUFZLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCO0lBQ3BELENBQ0UsUUFBUSxDQUFDLGFBQWEsQ0FBQywyQkFBMkIsQ0FBQztRQUNuRCxRQUFRLENBQUMsYUFBYSxDQUFDLGdDQUFnQyxDQUFDLENBQ3pELENBQUM7QUFFSjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsQ0FBQyxRQUFpQixFQUFXLEVBQUUsQ0FDN0UsUUFBUSxZQUFZLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVTtPQUMzQyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFFdkYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FDdEMsUUFBaUIsRUFDNkIsRUFBRTtJQUNoRCxPQUFPLENBQ0wsUUFBUSxZQUFZLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCO1FBQ3BELENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxLQUFLLElBQUksUUFBUSxDQUFDLFFBQVEsS0FBSyxjQUFjLENBQUMsQ0FDbEUsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUN2QyxRQUFpQixFQUM2QixFQUFFO0lBQ2hELE9BQU8sQ0FDTCxRQUFRLFlBQVksT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0I7UUFDcEQsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLEVBQUU7WUFDbkIsUUFBUSxDQUFDLElBQUksS0FBSyxFQUFFO1lBQ3BCLFFBQVEsQ0FBQyxRQUFRLEtBQUssc0JBQXNCO1lBQzVDLFFBQVEsQ0FBQyxRQUFRLEtBQUssdUJBQXVCLENBQUMsQ0FDakQsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLENBQy9DLFFBQWlCLEVBQ2pCLFVBQWtCLEVBQ1gsRUFBRTtJQUNULElBQ0UsUUFBUSxZQUFZLHlCQUF5QjtRQUM3Qyw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsRUFDdEMsQ0FBQztRQUNELE1BQU0sUUFBUSxDQUFDO0lBQ2pCLENBQUM7SUFDRCxJQUFJLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDdkMsTUFBTSxJQUFJLHlCQUF5QixDQUFDLGlCQUFpQixFQUFFLFVBQVUsRUFBRTtZQUNqRSxLQUFLLEVBQUUsUUFBUTtTQUNoQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsTUFBTSxRQUFRLENBQUM7QUFDakIsQ0FBQyxDQUFDIn0=
@@ -1,6 +1,17 @@
1
1
  import * as plugins from './plugins.js';
2
2
  import type { SmartdataDb } from './classes.db.js';
3
3
  import { SmartdataOperationDeadline } from './classes.operationdeadline.js';
4
+ /**
5
+ * Whether a transaction that `SmartdataSession.withTransaction()` rejected
6
+ * could have committed:
7
+ *
8
+ * - `not_committed`: nothing of the transaction was committed. The call failed
9
+ * before the driver sent a commit, or the database answered the commit with
10
+ * an error that states the transaction was aborted.
11
+ * - `unknown`: a commit was sent and its outcome was never confirmed; it may
12
+ * have applied.
13
+ */
14
+ export type TSmartdataTransactionCommitOutcome = 'not_committed' | 'unknown';
4
15
  interface ISmartdataSessionAcquireOptions {
5
16
  ordinaryWrite?: boolean;
6
17
  }
@@ -32,6 +43,20 @@ export interface ISmartdataTransactionOptions {
32
43
  signal?: AbortSignal;
33
44
  }
34
45
  export declare class SmartdataSession {
46
+ /**
47
+ * Whether the transaction whose `withTransaction()` call rejected with
48
+ * `errorArg` could have committed: `not_committed` when nothing of it was
49
+ * committed, `unknown` when a commit was sent and never confirmed, so it may
50
+ * have applied. Every rejection of `withTransaction()` carries one, whatever
51
+ * it is: the client's own errors, the callback's error, the abort reason or
52
+ * a driver error, which all keep their identity. A value several calls
53
+ * rejected with reads `unknown` once any of them may have committed.
54
+ *
55
+ * Returns `undefined` for any other value, and for a primitive rejection —
56
+ * a callback that throws a string, or a string abort reason — which cannot
57
+ * carry the outcome; treat `undefined` as `unknown`.
58
+ */
59
+ static getCommitOutcome(errorArg: unknown): TSmartdataTransactionCommitOutcome | undefined;
35
60
  /**
36
61
  * Runs `callbackArg` in a transaction, retrying it as the driver decides.
37
62
  *
@@ -57,6 +82,16 @@ export declare class SmartdataSession {
57
82
  * Any operation on the session that its deadline or a signal interrupts
58
83
  * fails the attempt: the call rolls it back and rejects with that
59
84
  * operation's error even when the callback caught it.
85
+ *
86
+ * When the session ends while the call runs — the database's `close()`
87
+ * ends every session — the call never reports a commit. It rejects with
88
+ * `unsupported_operation`: before the callback returned nothing was
89
+ * committed, afterwards the commit outcome is unknown. The callback's
90
+ * error, if it threw, is the `cause`.
91
+ *
92
+ * Every rejection states whether the transaction could have committed:
93
+ * `SmartdataSession.getCommitOutcome(error)` returns `not_committed` or
94
+ * `unknown` for the value the call rejected with.
60
95
  */
61
96
  withTransaction<TResult>(callbackArg: (sessionArg: SmartdataSession) => Promise<TResult>, optionsArg?: ISmartdataTransactionOptions): Promise<TResult | undefined>;
62
97
  close(): Promise<void>;
@@ -108,6 +143,10 @@ export declare const settleSmartdataOperationError: (sessionArg: TSmartdataOrdin
108
143
  * of an expired driver deadline to the `timeout` persistence error.
109
144
  */
110
145
  export declare const runWithOrdinarySmartdataSession: <TResult>(sessionArg: TSmartdataOrdinarySession | undefined, ownerArg: SmartdataDb, optionsArg: IOrdinarySessionOperationOptions, operationArg: (rawSessionArg: plugins.mongodb.ClientSession | undefined, deadlineArg: SmartdataOperationDeadline) => Promise<TResult>) => Promise<TResult>;
111
- export declare const invalidateSmartdataSessions: (ownerArg: SmartdataDb) => Promise<void>;
146
+ /**
147
+ * Ends every session of the owner. `endOptionsArg.timeoutMS` is the driver's
148
+ * deadline for aborting a transaction a session still holds.
149
+ */
150
+ export declare const invalidateSmartdataSessions: (ownerArg: SmartdataDb, endOptionsArg?: Pick<plugins.mongodb.EndSessionOptions, "timeoutMS">) => Promise<void>;
112
151
  export declare const unwrapSmartdataSessionInvalidationErrors: (errorArg: unknown) => readonly unknown[] | undefined;
113
152
  export {};
@@ -1,7 +1,31 @@
1
1
  import * as plugins from './plugins.js';
2
2
  import { SmartdataOperationDeadline, requireOperationSignal, requireOperationTimeoutMS, } from './classes.operationdeadline.js';
3
3
  import { assertDataOptions } from './classes.operationbudget.js';
4
- import { SmartdataPersistenceError, createSmartdataTimeoutError, isMongoDeadlineError, normalizeDeadlineError, normalizeOrdinaryPersistenceError, } from './classes.persistence.js';
4
+ import { SmartdataPersistenceError, createSmartdataTimeoutError, isMongoDeadlineError, isMongoTransientTransactionError, normalizeDeadlineError, normalizeOrdinaryPersistenceError, } from './classes.persistence.js';
5
+ /** The commit outcome of every value a `withTransaction()` call rejected with. */
6
+ const transactionCommitOutcomes = new WeakMap();
7
+ /**
8
+ * Records what `errorArg`, the rejection of a `withTransaction()` call, means
9
+ * for the commit, and returns it for the throw. A value several transactions
10
+ * rejected with keeps `unknown` once any of them may have committed. A
11
+ * primitive cannot be recorded.
12
+ */
13
+ const rejectTransaction = (errorArg, outcomeArg) => {
14
+ if (((typeof errorArg === 'object' && errorArg !== null) || typeof errorArg === 'function')
15
+ && transactionCommitOutcomes.get(errorArg) !== 'unknown') {
16
+ transactionCommitOutcomes.set(errorArg, outcomeArg);
17
+ }
18
+ return errorArg;
19
+ };
20
+ const commitOutcomeOfTransactionEnd = (endArg) => endArg === 'during_commit' ? 'unknown' : 'not_committed';
21
+ /**
22
+ * The session of a transaction ended while it ran, for example through the
23
+ * database's `close()`. The driver then returns the callback's result without
24
+ * committing, so the call must reject instead.
25
+ */
26
+ const createTransactionSessionEndedError = (endArg, causeArg) => new SmartdataPersistenceError('unsupported_operation', endArg === 'during_commit'
27
+ ? 'SmartData transaction session ended during commit; the commit outcome is unknown.'
28
+ : 'SmartData transaction session ended before commit; nothing was committed.', causeArg === undefined ? undefined : { cause: causeArg });
5
29
  const bindings = new WeakMap();
6
30
  const bindingsByOwner = new WeakMap();
7
31
  const smartdataSessionInvalidationAggregateBrand = Symbol('smartdataSessionInvalidationAggregate');
@@ -33,12 +57,43 @@ const normalizeTransactionOptions = (optionsArg) => {
33
57
  signal: requireOperationSignal(signal, 'SmartData transaction signal'),
34
58
  };
35
59
  };
60
+ /** Everything `withTransaction()` refuses before a transaction starts. */
61
+ const admitTransaction = (sessionArg, callbackArg, optionsArg) => {
62
+ if (typeof callbackArg !== 'function') {
63
+ throw new SmartdataPersistenceError('invalid_argument', 'SmartData transaction callback must be a function.');
64
+ }
65
+ const { timeoutMS, signal } = normalizeTransactionOptions(optionsArg);
66
+ const binding = resolveBinding(sessionArg);
67
+ if (binding.operationActive || binding.transactionActive) {
68
+ throw new SmartdataPersistenceError('unsupported_operation', 'Parallel or nested SmartData session operations are not supported.');
69
+ }
70
+ signal?.throwIfAborted();
71
+ return { binding, timeoutMS, signal };
72
+ };
36
73
  const assertTransactionSucceeded = (bindingArg) => {
37
74
  if (bindingArg.transactionFailure) {
38
75
  throw bindingArg.transactionFailure.error;
39
76
  }
40
77
  };
41
78
  export class SmartdataSession {
79
+ /**
80
+ * Whether the transaction whose `withTransaction()` call rejected with
81
+ * `errorArg` could have committed: `not_committed` when nothing of it was
82
+ * committed, `unknown` when a commit was sent and never confirmed, so it may
83
+ * have applied. Every rejection of `withTransaction()` carries one, whatever
84
+ * it is: the client's own errors, the callback's error, the abort reason or
85
+ * a driver error, which all keep their identity. A value several calls
86
+ * rejected with reads `unknown` once any of them may have committed.
87
+ *
88
+ * Returns `undefined` for any other value, and for a primitive rejection —
89
+ * a callback that throws a string, or a string abort reason — which cannot
90
+ * carry the outcome; treat `undefined` as `unknown`.
91
+ */
92
+ static getCommitOutcome(errorArg) {
93
+ return (typeof errorArg === 'object' && errorArg !== null) || typeof errorArg === 'function'
94
+ ? transactionCommitOutcomes.get(errorArg)
95
+ : undefined;
96
+ }
42
97
  /**
43
98
  * Runs `callbackArg` in a transaction, retrying it as the driver decides.
44
99
  *
@@ -64,39 +119,58 @@ export class SmartdataSession {
64
119
  * Any operation on the session that its deadline or a signal interrupts
65
120
  * fails the attempt: the call rolls it back and rejects with that
66
121
  * operation's error even when the callback caught it.
122
+ *
123
+ * When the session ends while the call runs — the database's `close()`
124
+ * ends every session — the call never reports a commit. It rejects with
125
+ * `unsupported_operation`: before the callback returned nothing was
126
+ * committed, afterwards the commit outcome is unknown. The callback's
127
+ * error, if it threw, is the `cause`.
128
+ *
129
+ * Every rejection states whether the transaction could have committed:
130
+ * `SmartdataSession.getCommitOutcome(error)` returns `not_committed` or
131
+ * `unknown` for the value the call rejected with.
67
132
  */
68
133
  async withTransaction(callbackArg, optionsArg) {
69
- if (typeof callbackArg !== 'function') {
70
- throw new SmartdataPersistenceError('invalid_argument', 'SmartData transaction callback must be a function.');
134
+ let admitted;
135
+ try {
136
+ admitted = admitTransaction(this, callbackArg, optionsArg);
71
137
  }
72
- const { timeoutMS, signal } = normalizeTransactionOptions(optionsArg);
73
- const binding = resolveBinding(this);
74
- if (binding.operationActive || binding.transactionActive) {
75
- throw new SmartdataPersistenceError('unsupported_operation', 'Parallel or nested SmartData session operations are not supported.');
138
+ catch (errorArg) {
139
+ throw rejectTransaction(errorArg, 'not_committed');
76
140
  }
77
- signal?.throwIfAborted();
141
+ const { binding, timeoutMS, signal } = admitted;
78
142
  binding.transactionActive = true;
79
143
  binding.transactionTimeoutMS = timeoutMS;
80
144
  binding.transactionSignal = signal;
145
+ binding.transactionEnded = undefined;
81
146
  let callbackError;
82
- let commitReached = false;
147
+ /** The signal or deadline interruption that failed the last attempt. */
148
+ let attemptInterruption;
149
+ /** The session-ended rejection the last attempt failed with, and how far that transaction had got. */
150
+ let sessionEnded;
83
151
  const runAttempt = async () => {
84
152
  const attempt = Symbol('smartdataTransactionAttempt');
85
153
  binding.transactionAttempt = attempt;
86
154
  binding.transactionCallbackOpen = true;
87
155
  binding.transactionUsesOrdinaryWrite = false;
88
156
  binding.transactionFailure = undefined;
157
+ binding.transactionCommitReached = false;
89
158
  callbackError = undefined;
90
- commitReached = false;
159
+ attemptInterruption = undefined;
91
160
  try {
92
161
  let result;
93
162
  let callbackReturned = false;
163
+ let callbackThrown;
94
164
  try {
95
165
  // A retry the driver starts after an abort ends before the callback.
96
166
  signal?.throwIfAborted();
97
167
  result = await transactionContext.run({ contextToken: binding.contextToken, attempt }, async () => callbackArg(this));
98
168
  callbackReturned = true;
99
169
  }
170
+ catch (errorArg) {
171
+ callbackThrown = { error: errorArg };
172
+ throw errorArg;
173
+ }
100
174
  finally {
101
175
  const activeOperation = binding.operationActive
102
176
  ? binding.operationSettled
@@ -108,41 +182,100 @@ export class SmartdataSession {
108
182
  if (activeOperation) {
109
183
  await activeOperation;
110
184
  }
185
+ attemptInterruption = binding.transactionFailure;
111
186
  assertTransactionSucceeded(binding);
187
+ if (binding.transactionEnded) {
188
+ // The driver would commit or return the result on a session that is
189
+ // being ended; the attempt fails instead, keeping the callback's error.
190
+ sessionEnded = {
191
+ error: createTransactionSessionEndedError(binding.transactionEnded, callbackThrown?.error),
192
+ end: binding.transactionEnded,
193
+ };
194
+ throw sessionEnded.error;
195
+ }
112
196
  if (callbackReturned && activeOperation) {
113
197
  throw new SmartdataPersistenceError('unsupported_operation', 'A SmartData transaction callback returned with an operation still active.');
114
198
  }
115
199
  }
116
200
  // An abort that arrived while the callback ran rolls the attempt back.
117
201
  signal?.throwIfAborted();
118
- // The driver commits next; a deadline that expires from here on
119
- // leaves the commit outcome unknown.
120
- commitReached = true;
202
+ // The driver commits next; a deadline that expires or a session that
203
+ // ends from here on leaves the commit outcome unknown.
204
+ binding.transactionCommitReached = true;
121
205
  return result;
122
206
  }
123
207
  catch (errorArg) {
124
208
  callbackError = errorArg;
209
+ if (signal?.aborted && errorArg === signal.reason) {
210
+ attemptInterruption ??= { error: errorArg };
211
+ }
125
212
  throw errorArg;
126
213
  }
127
214
  };
128
- try {
129
- return timeoutMS === undefined
130
- ? await binding.rawSession.withTransaction(runAttempt)
131
- : await binding.rawSession.withTransaction(runAttempt, { timeoutMS });
132
- }
133
- catch (errorArg) {
215
+ /**
216
+ * What the call rejects with when the driver's `withTransaction()` rejected
217
+ * with `errorArg`, and whether the transaction could have committed. Once
218
+ * the last attempt's callback returned, the driver was committing: every
219
+ * error from there on leaves the commit outcome unknown, unless it states
220
+ * that the transaction was aborted. The driver starts another attempt only
221
+ * after such an error, so an earlier attempt never committed.
222
+ */
223
+ const settleTransactionRejection = (errorArg) => {
224
+ // The driver's closing abort replaces the attempt's error when it finds
225
+ // the transaction already aborted, as a session that close() ended leaves
226
+ // it; the interruption that failed the attempt keeps its rejection.
227
+ if (attemptInterruption) {
228
+ return { error: normalizeDeadlineError(attemptInterruption.error), outcome: 'not_committed' };
229
+ }
230
+ if (sessionEnded) {
231
+ return { error: sessionEnded.error, outcome: commitOutcomeOfTransactionEnd(sessionEnded.end) };
232
+ }
233
+ if (binding.transactionEnded
234
+ && errorArg !== signal?.reason
235
+ && !isMongoDeadlineError(errorArg)
236
+ && !(errorArg instanceof SmartdataPersistenceError && errorArg.code === 'timeout')) {
237
+ return {
238
+ error: createTransactionSessionEndedError(binding.transactionEnded, errorArg),
239
+ outcome: commitOutcomeOfTransactionEnd(binding.transactionEnded),
240
+ };
241
+ }
134
242
  if (errorArg === callbackError) {
135
- throw normalizeDeadlineError(errorArg);
243
+ return { error: normalizeDeadlineError(errorArg), outcome: 'not_committed' };
136
244
  }
245
+ const outcome = binding.transactionCommitReached && !isMongoTransientTransactionError(errorArg)
246
+ ? 'unknown'
247
+ : 'not_committed';
137
248
  if (isMongoDeadlineError(errorArg)) {
138
- throw createSmartdataTimeoutError(commitReached
139
- ? 'SmartData transaction exceeded its client deadline during commit; the commit outcome is unknown.'
140
- : 'SmartData transaction exceeded its client deadline before commit; nothing was committed.', errorArg);
249
+ return {
250
+ error: createSmartdataTimeoutError(outcome === 'unknown'
251
+ ? 'SmartData transaction exceeded its client deadline during commit; the commit outcome is unknown.'
252
+ : binding.transactionCommitReached
253
+ ? 'SmartData transaction exceeded its client deadline after the database aborted its commit; nothing was committed.'
254
+ : 'SmartData transaction exceeded its client deadline before commit; nothing was committed.', errorArg),
255
+ outcome,
256
+ };
141
257
  }
142
258
  if (binding.transactionUsesOrdinaryWrite) {
143
- return normalizeOrdinaryPersistenceError(errorArg, 'SmartData transaction conflicts with a unique index.');
259
+ try {
260
+ normalizeOrdinaryPersistenceError(errorArg, 'SmartData transaction conflicts with a unique index.');
261
+ }
262
+ catch (normalizedArg) {
263
+ return { error: normalizedArg, outcome };
264
+ }
144
265
  }
145
- throw errorArg;
266
+ return { error: errorArg, outcome };
267
+ };
268
+ let result;
269
+ let transactionEnded;
270
+ try {
271
+ result = timeoutMS === undefined
272
+ ? await binding.rawSession.withTransaction(runAttempt)
273
+ : await binding.rawSession.withTransaction(runAttempt, { timeoutMS });
274
+ transactionEnded = binding.transactionEnded;
275
+ }
276
+ catch (errorArg) {
277
+ const { error, outcome } = settleTransactionRejection(errorArg);
278
+ throw rejectTransaction(error, outcome);
146
279
  }
147
280
  finally {
148
281
  binding.transactionActive = false;
@@ -150,7 +283,13 @@ export class SmartdataSession {
150
283
  binding.transactionSignal = undefined;
151
284
  binding.transactionUsesOrdinaryWrite = false;
152
285
  binding.transactionFailure = undefined;
286
+ binding.transactionCommitReached = false;
287
+ binding.transactionEnded = undefined;
288
+ }
289
+ if (transactionEnded) {
290
+ throw rejectTransaction(createTransactionSessionEndedError(transactionEnded), commitOutcomeOfTransactionEnd(transactionEnded));
153
291
  }
292
+ return result;
154
293
  }
155
294
  async close() {
156
295
  const binding = bindings.get(this);
@@ -178,6 +317,7 @@ export const createSmartdataSession = (ownerArg) => {
178
317
  transactionActive: false,
179
318
  transactionCallbackOpen: false,
180
319
  transactionUsesOrdinaryWrite: false,
320
+ transactionCommitReached: false,
181
321
  invalidated: false,
182
322
  };
183
323
  bindings.set(session, binding);
@@ -356,16 +496,20 @@ export const runWithOrdinarySmartdataSession = async (sessionArg, ownerArg, opti
356
496
  lease.release();
357
497
  }
358
498
  };
359
- export const invalidateSmartdataSessions = async (ownerArg) => {
499
+ /**
500
+ * Ends every session of the owner. `endOptionsArg.timeoutMS` is the driver's
501
+ * deadline for aborting a transaction a session still holds.
502
+ */
503
+ export const invalidateSmartdataSessions = async (ownerArg, endOptionsArg) => {
360
504
  const ownerBindings = bindingsByOwner.get(ownerArg);
361
505
  if (!ownerBindings) {
362
506
  return;
363
507
  }
364
508
  const sessions = [...ownerBindings];
365
509
  for (const bindingArg of sessions) {
366
- bindingArg.invalidated = true;
510
+ invalidateSessionBinding(bindingArg);
367
511
  }
368
- const results = await Promise.allSettled(sessions.map((bindingArg) => closeSessionBinding(bindingArg)));
512
+ const results = await Promise.allSettled(sessions.map((bindingArg) => closeSessionBinding(bindingArg, endOptionsArg)));
369
513
  const errors = results.flatMap((resultArg) => resultArg.status === 'rejected' ? [resultArg.reason] : []);
370
514
  if (errors.length === 1) {
371
515
  throw errors[0];
@@ -374,13 +518,25 @@ export const invalidateSmartdataSessions = async (ownerArg) => {
374
518
  throw new SmartdataSessionInvalidationAggregateError(errors, 'Multiple SmartData sessions failed to close.');
375
519
  }
376
520
  };
521
+ /**
522
+ * Refuses every later operation on the session. A transaction still running on
523
+ * it records how far it had got, so it rejects instead of reporting a commit.
524
+ */
525
+ const invalidateSessionBinding = (bindingArg) => {
526
+ bindingArg.invalidated = true;
527
+ if (bindingArg.transactionActive) {
528
+ bindingArg.transactionEnded ??= bindingArg.transactionCommitReached
529
+ ? 'during_commit'
530
+ : 'before_commit';
531
+ }
532
+ };
377
533
  /** Failed cleanup remains owned and invalidated until an explicit retry succeeds. */
378
- const closeSessionBinding = async (bindingArg) => {
534
+ const closeSessionBinding = async (bindingArg, endOptionsArg) => {
379
535
  if (bindingArg.closing)
380
536
  return bindingArg.closing;
381
- bindingArg.invalidated = true;
537
+ invalidateSessionBinding(bindingArg);
382
538
  const closing = Promise.resolve().then(async () => {
383
- await bindingArg.rawSession.endSession();
539
+ await bindingArg.rawSession.endSession(endOptionsArg);
384
540
  bindingsByOwner.get(bindingArg.owner)?.delete(bindingArg);
385
541
  bindings.delete(bindingArg.session);
386
542
  });
@@ -395,4 +551,4 @@ const closeSessionBinding = async (bindingArg) => {
395
551
  export const unwrapSmartdataSessionInvalidationErrors = (errorArg) => errorArg instanceof SmartdataSessionInvalidationAggregateError
396
552
  ? errorArg.errors
397
553
  : undefined;
398
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zZXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvbm9zcWxkYi9jbGFzc2VzLnNlc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFHeEMsT0FBTyxFQUNMLDBCQUEwQixFQUMxQixzQkFBc0IsRUFDdEIseUJBQXlCLEdBQzFCLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUNMLHlCQUF5QixFQUN6QiwyQkFBMkIsRUFDM0Isb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0QixpQ0FBaUMsR0FDbEMsTUFBTSwwQkFBMEIsQ0FBQztBQXdCbEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQThDLENBQUM7QUFDM0UsTUFBTSxlQUFlLEdBQUcsSUFBSSxPQUFPLEVBQThDLENBQUM7QUFDbEYsTUFBTSwwQ0FBMEMsR0FBRyxNQUFNLENBQ3ZELHVDQUF1QyxDQUN4QyxDQUFDO0FBRUYsTUFBTSwwQ0FBMkMsU0FBUSxjQUFjO0lBQ3JELENBQUMsMENBQTBDLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDckU7QUF1Q0QsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsaUJBQWlCLEVBRXBFLENBQUM7QUFFSixNQUFNLGNBQWMsR0FBRyxDQUNyQixVQUE0QixFQUM1QixRQUFzQixFQUNJLEVBQUU7SUFDNUIsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6QyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNuRSxNQUFNLElBQUkseUJBQXlCLENBQ2pDLHVCQUF1QixFQUN2Qix3REFBd0QsQ0FDekQs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
554
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zZXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvbm9zcWxkYi9jbGFzc2VzLnNlc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFHeEMsT0FBTyxFQUNMLDBCQUEwQixFQUMxQixzQkFBc0IsRUFDdEIseUJBQXlCLEdBQzFCLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUNMLHlCQUF5QixFQUN6QiwyQkFBMkIsRUFDM0Isb0JBQW9CLEVBQ3BCLGdDQUFnQyxFQUNoQyxzQkFBc0IsRUFDdEIsaUNBQWlDLEdBQ2xDLE1BQU0sMEJBQTBCLENBQUM7QUEyQ2xDLGtGQUFrRjtBQUNsRixNQUFNLHlCQUF5QixHQUFHLElBQUksT0FBTyxFQUE4QyxDQUFDO0FBRTVGOzs7OztHQUtHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBRyxDQUN4QixRQUFpQixFQUNqQixVQUE4QyxFQUNyQyxFQUFFO0lBQ1gsSUFDRSxDQUFDLENBQUMsT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLFFBQVEsS0FBSyxJQUFJLENBQUMsSUFBSSxPQUFPLFFBQVEsS0FBSyxVQUFVLENBQUM7V0FDcEYseUJBQXlCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLFNBQVMsRUFDeEQsQ0FBQztRQUNELHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMsQ0FBQztBQUVGLE1BQU0sNkJBQTZCLEdBQUcsQ0FDcEMsTUFBZ0MsRUFDSSxFQUFFLENBQ3RDLE1BQU0sS0FBSyxlQUFlLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO0FBRTNEOzs7O0dBSUc7QUFDSCxNQUFNLGtDQUFrQyxHQUFHLENBQ3pDLE1BQWdDLEVBQ2hDLFFBQWtCLEVBQ1MsRUFBRSxDQUM3QixJQUFJLHlCQUF5QixDQUMzQix1QkFBdUIsRUFDdkIsTUFBTSxLQUFLLGVBQWU7SUFDeEIsQ0FBQyxDQUFDLG1GQUFtRjtJQUNyRixDQUFDLENBQUMsMkVBQTJFLEVBQy9FLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQ3pELENBQUM7QUFFSixNQUFNLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBOEMsQ0FBQztBQUMzRSxNQUFNLGVBQWUsR0FBRyxJQUFJLE9BQU8sRUFBOEMsQ0FBQztBQUNsRixNQUFNLDBDQUEwQyxHQUFHLE1BQU0sQ0FDdkQsdUNBQXVDLENBQ3hDLENBQUM7QUFFRixNQUFNLDBDQUEyQyxTQUFRLGNBQWM7SUFDckQsQ0FBQywwQ0FBMEMsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUNyRTtBQXVDRCxNQUFNLGtCQUFrQixHQUFHLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsRUFFcEUsQ0FBQztBQUVKLE1BQU0sY0FBYyxHQUFHLENBQ3JCLFVBQTRCLEVBQzVCLFFBQXNCLEVBQ0ksRUFBRTtJQUM1QixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3pDLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ25FLE1BQU0sSUFBSSx5QkFBeUIsQ0FDakMsdUJBQXVCLEVBQ3ZCLHdEQUF3RCxDQUN6RCxDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksUUFBUSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDM0MsTUFBTSxJQUFJLHlCQUF5QixDQUNqQyxrQkFBa0IsRUFDbEIsb0RBQW9ELENBQ3JELENBQUM7SUFDSixDQUFDO0lBQ0QsSUFDRSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxXQUFXO1dBQ2pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxLQUFLLE9BQU8sQ0FBQyxNQUFNLEVBQ2pELENBQUM7UUFDRCxNQUFNLElBQUkseUJBQXlCLENBQ2pDLHVCQUF1QixFQUN2Qiw4REFBOEQsQ0FDL0QsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDLENBQUM7QUFFRixNQUFNLDJCQUEyQixHQUFHLENBQ2xDLFVBQW9ELEVBQ04sRUFBRTtJQUNoRCxJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM3QixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFDRCxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxHQUFHLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3JGLE9BQU87UUFDTCxTQUFTLEVBQUUseUJBQXlCLENBQUMsU0FBUyxFQUFFLGlDQUFpQyxDQUFDO1FBQ2xGLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsOEJBQThCLENBQUM7S0FDdkUsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLDBFQUEwRTtBQUMxRSxNQUFNLGdCQUFnQixHQUFHLENBQ3ZCLFVBQTRCLEVBQzVCLFdBQW9CLEVBQ3BCLFVBQW9ELEVBQzZCLEVBQUU7SUFDbkYsSUFBSSxPQUFPLFdBQVcsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUN0QyxNQUFNLElBQUkseUJBQXlCLENBQ2pDLGtCQUFrQixFQUNsQixvREFBb0QsQ0FDckQsQ0FBQztJQUNKLENBQUM7SUFDRCxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxHQUFHLDJCQUEyQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMzQyxJQUFJLE9BQU8sQ0FBQyxlQUFlLElBQUksT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekQsTUFBTSxJQUFJLHlCQUF5QixDQUNqQyx1QkFBdUIsRUFDdkIsb0VBQW9FLENBQ3JFLENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxFQUFFLGNBQWMsRUFBRSxDQUFDO0lBQ3pCLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ3hDLENBQUMsQ0FBQztBQUVGLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxVQUFvQyxFQUFRLEVBQUU7SUFDaEYsSUFBSSxVQUFVLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUNsQyxNQUFNLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7SUFDNUMsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0I7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0ksTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQWlCO1FBQzlDLE9BQU8sQ0FBQyxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksUUFBUSxLQUFLLElBQUksQ0FBQyxJQUFJLE9BQU8sUUFBUSxLQUFLLFVBQVU7WUFDMUYsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFDekMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BbUNHO0lBQ0ksS0FBSyxDQUFDLGVBQWUsQ0FDMUIsV0FBK0QsRUFDL0QsVUFBeUM7UUFFekMsSUFBSSxRQUE2QyxDQUFDO1FBQ2xELElBQUksQ0FBQztZQUNILFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFBQyxPQUFPLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLE1BQU0saUJBQWlCLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFDRCxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUM7UUFDaEQsT0FBTyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUNqQyxPQUFPLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUM7UUFDbkMsT0FBTyxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztRQUNyQyxJQUFJLGFBQXNCLENBQUM7UUFDM0Isd0VBQXdFO1FBQ3hFLElBQUksbUJBQW1ELENBQUM7UUFDeEQsc0dBQXNHO1FBQ3RHLElBQUksWUFBNkYsQ0FBQztRQUNsRyxNQUFNLFVBQVUsR0FBRyxLQUFLLElBQUksRUFBRTtZQUM1QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUN0RCxPQUFPLENBQUMsa0JBQWtCLEdBQUcsT0FBTyxDQUFDO1lBQ3JDLE9BQU8sQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUM7WUFDdkMsT0FBTyxDQUFDLDRCQUE0QixHQUFHLEtBQUssQ0FBQztZQUM3QyxPQUFPLENBQUMsa0JBQWtCLEdBQUcsU0FBUyxDQUFDO1lBQ3ZDLE9BQU8sQ0FBQyx3QkFBd0IsR0FBRyxLQUFLLENBQUM7WUFDekMsYUFBYSxHQUFHLFNBQVMsQ0FBQztZQUMxQixtQkFBbUIsR0FBRyxTQUFTLENBQUM7WUFDaEMsSUFBSSxDQUFDO2dCQUNILElBQUksTUFBZSxDQUFDO2dCQUNwQixJQUFJLGdCQUFnQixHQUFHLEtBQUssQ0FBQztnQkFDN0IsSUFBSSxjQUE4QyxDQUFDO2dCQUNuRCxJQUFJLENBQUM7b0JBQ0gscUVBQXFFO29CQUNyRSxNQUFNLEVBQUUsY0FBYyxFQUFFLENBQUM7b0JBQ3pCLE1BQU0sR0FBRyxNQUFNLGtCQUFrQixDQUFDLEdBQUcsQ0FDbkMsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsRUFDL0MsS0FBSyxJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQzlCLENBQUM7b0JBQ0YsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO2dCQUMxQixDQUFDO2dCQUFDLE9BQU8sUUFBUSxFQUFFLENBQUM7b0JBQ2xCLGNBQWMsR0FBRyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQztvQkFDckMsTUFBTSxRQUFRLENBQUM7Z0JBQ2pCLENBQUM7d0JBQVMsQ0FBQztvQkFDVCxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsZUFBZTt3QkFDN0MsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0I7d0JBQzFCLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQ2QsT0FBTyxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQztvQkFDeEMsSUFBSSxPQUFPLENBQUMsa0JBQWtCLEtBQUssT0FBTyxFQUFFLENBQUM7d0JBQzNDLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUM7b0JBQ3pDLENBQUM7b0JBQ0QsSUFBSSxlQUFlLEVBQUUsQ0FBQzt3QkFDcEIsTUFBTSxlQUFlLENBQUM7b0JBQ3hCLENBQUM7b0JBQ0QsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDO29CQUNqRCwwQkFBMEIsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDcEMsSUFBSSxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzt3QkFDN0Isb0VBQW9FO3dCQUNwRSx3RUFBd0U7d0JBQ3hFLFlBQVksR0FBRzs0QkFDYixLQUFLLEVBQUUsa0NBQWtDLENBQ3ZDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFDeEIsY0FBYyxFQUFFLEtBQUssQ0FDdEI7NEJBQ0QsR0FBRyxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0I7eUJBQzlCLENBQUM7d0JBQ0YsTUFBTSxZQUFZLENBQUMsS0FBSyxDQUFDO29CQUMzQixDQUFDO29CQUNELElBQUksZ0JBQWdCLElBQUksZUFBZSxFQUFFLENBQUM7d0JBQ3hDLE1BQU0sSUFBSSx5QkFBeUIsQ0FDakMsdUJBQXVCLEVBQ3ZCLDJFQUEyRSxDQUM1RSxDQUFDO29CQUNKLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCx1RUFBdUU7Z0JBQ3ZFLE1BQU0sRUFBRSxjQUFjLEVBQUUsQ0FBQztnQkFDekIscUVBQXFFO2dCQUNyRSx1REFBdUQ7Z0JBQ3ZELE9BQU8sQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUM7Z0JBQ3hDLE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUM7WUFBQyxPQUFPLFFBQVEsRUFBRSxDQUFDO2dCQUNsQixhQUFhLEdBQUcsUUFBUSxDQUFDO2dCQUN6QixJQUFJLE1BQU0sRUFBRSxPQUFPLElBQUksUUFBUSxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDbEQsbUJBQW1CLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUM7Z0JBQzlDLENBQUM7Z0JBQ0QsTUFBTSxRQUFRLENBQUM7WUFDakIsQ0FBQztRQUNILENBQUMsQ0FBQztRQUNGOzs7Ozs7O1dBT0c7UUFDSCxNQUFNLDBCQUEwQixHQUFHLENBQ2pDLFFBQWlCLEVBQ2dELEVBQUU7WUFDbkUsd0VBQXdFO1lBQ3hFLDBFQUEwRTtZQUMxRSxvRUFBb0U7WUFDcEUsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO2dCQUN4QixPQUFPLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsQ0FBQztZQUNoRyxDQUFDO1lBQ0QsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDakIsT0FBTyxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSw2QkFBNkIsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNqRyxDQUFDO1lBQ0QsSUFDRSxPQUFPLENBQUMsZ0JBQWdCO21CQUNyQixRQUFRLEtBQUssTUFBTSxFQUFFLE1BQU07bUJBQzNCLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDO21CQUMvQixDQUFDLENBQUMsUUFBUSxZQUFZLHlCQUF5QixJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLEVBQ2xGLENBQUM7Z0JBQ0QsT0FBTztvQkFDTCxLQUFLLEVBQUUsa0NBQWtDLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQztvQkFDN0UsT0FBTyxFQUFFLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztpQkFDakUsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLFFBQVEsS0FBSyxhQUFhLEVBQUUsQ0FBQztnQkFDL0IsT0FBTyxFQUFFLEtBQUssRUFBRSxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLENBQUM7WUFDL0UsQ0FBQztZQUNELE1BQU0sT0FBTyxHQUNYLE9BQU8sQ0FBQyx3QkFBd0IsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLFFBQVEsQ0FBQztnQkFDN0UsQ0FBQyxDQUFDLFNBQVM7Z0JBQ1gsQ0FBQyxDQUFDLGVBQWUsQ0FBQztZQUN0QixJQUFJLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQ25DLE9BQU87b0JBQ0wsS0FBSyxFQUFFLDJCQUEyQixDQUNoQyxPQUFPLEtBQUssU0FBUzt3QkFDbkIsQ0FBQyxDQUFDLGtHQUFrRzt3QkFDcEcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyx3QkFBd0I7NEJBQ2hDLENBQUMsQ0FBQyxrSEFBa0g7NEJBQ3BILENBQUMsQ0FBQywwRkFBMEYsRUFDaEcsUUFBUSxDQUNUO29CQUNELE9BQU87aUJBQ1IsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLE9BQU8sQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO2dCQUN6QyxJQUFJLENBQUM7b0JBQ0gsaUNBQWlDLENBQy9CLFFBQVEsRUFDUixzREFBc0QsQ0FDdkQsQ0FBQztnQkFDSixDQUFDO2dCQUFDLE9BQU8sYUFBYSxFQUFFLENBQUM7b0JBQ3ZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUMzQyxDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3RDLENBQUMsQ0FBQztRQUNGLElBQUksTUFBMkIsQ0FBQztRQUNoQyxJQUFJLGdCQUFzRCxDQUFDO1FBQzNELElBQUksQ0FBQztZQUNILE1BQU0sR0FBRyxTQUFTLEtBQUssU0FBUztnQkFDOUIsQ0FBQyxDQUFDLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDO2dCQUN0RCxDQUFDLENBQUMsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztRQUM5QyxDQUFDO1FBQUMsT0FBTyxRQUFRLEVBQUUsQ0FBQztZQUNsQixNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0saUJBQWlCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLENBQUM7Z0JBQVMsQ0FBQztZQUNULE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7WUFDbEMsT0FBTyxDQUFDLG9CQUFvQixHQUFHLFNBQVMsQ0FBQztZQUN6QyxPQUFPLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDO1lBQ3RDLE9BQU8sQ0FBQyw0QkFBNEIsR0FBRyxLQUFLLENBQUM7WUFDN0MsT0FBTyxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQztZQUN2QyxPQUFPLENBQUMsd0JBQXdCLEdBQUcsS0FBSyxDQUFDO1lBQ3pDLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7UUFDdkMsQ0FBQztRQUNELElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNyQixNQUFNLGlCQUFpQixDQUNyQixrQ0FBa0MsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUNwRCw2QkFBNkIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUNoRCxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBSztRQUNoQixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsZUFBZSxJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3pELE1BQU0sSUFBSSx5QkFBeUIsQ0FDakMsdUJBQXVCLEVBQ3ZCLGdFQUFnRSxDQUNqRSxDQUFDO1FBQ0osQ0FBQztRQUNELE1BQU0sbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckMsQ0FBQztDQUNGO0FBRUQsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxRQUFxQixFQUFvQixFQUFFO0lBQ2hGLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxXQUFXLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDL0QsTUFBTSxJQUFJLHlCQUF5QixDQUNqQyx1QkFBdUIsRUFDdkIscUVBQXFFLENBQ3RFLENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3ZDLE1BQU0sT0FBTyxHQUE2QjtRQUN4QyxPQUFPO1FBQ1AsWUFBWSxFQUFFLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQztRQUMvQyxLQUFLLEVBQUUsUUFBUTtRQUNmLE1BQU0sRUFBRSxRQUFRLENBQUMsYUFBYTtRQUM5QixVQUFVLEVBQUUsUUFBUSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUU7UUFDakQsZUFBZSxFQUFFLEtBQUs7UUFDdEIsaUJBQWlCLEVBQUUsS0FBSztRQUN4Qix1QkFBdUIsRUFBRSxLQUFLO1FBQzlCLDRCQUE0QixFQUFFLEtBQUs7UUFDbkMsd0JBQXdCLEVBQUUsS0FBSztRQUMvQixXQUFXLEVBQUUsS0FBSztLQUNuQixDQUFDO0lBQ0YsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0IsSUFBSSxhQUFhLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbkIsYUFBYSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDMUIsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUNELGFBQWEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0IsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FDckMsVUFBNEIsRUFDNUIsUUFBcUIsRUFDckIsYUFBOEMsRUFBRSxFQUloRCxFQUFFO0lBQ0YsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNyRCxJQUNFLE9BQU8sQ0FBQyxpQkFBaUI7V0FDdEIsT0FBTyxDQUFDLGlCQUFpQixFQUFFLE9BQU87V0FDbEMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLEVBQUUsWUFBWSxLQUFLLE9BQU8sQ0FBQyxZQUFZLEVBQ3ZFLENBQUM7UUFDRCwwRUFBMEU7UUFDMUUsT0FBTyxDQUFDLGtCQUFrQixLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMzRSxNQUFNLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7SUFDekMsQ0FBQztJQUNELElBQUksT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDL0IsTUFBTSxJQUFJLHlCQUF5QixDQUNqQyx1QkFBdUIsRUFDdkIscUZBQXFGLENBQ3RGLENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDckQsTUFBTSx5QkFBeUIsR0FDN0IsY0FBYyxFQUFFLFlBQVksS0FBSyxPQUFPLENBQUMsWUFBWSxDQUFDO0lBQ3hELElBQ0UsT0FBTyxDQUFDLGVBQWU7V0FDcEIsQ0FDRCxPQUFPLENBQUMsaUJBQWlCO2VBQ3RCLENBQ0QsQ0FBQyxPQUFPLENBQUMsdUJBQXVCO21CQUM3QixDQUFDLHlCQUF5QjttQkFDMUIsY0FBYyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsa0JBQWtCLENBQ3pELENBQ0Y7V0FDRSxDQUFDLENBQUMsT0FBTyxDQUFDLGlCQUFpQixJQUFJLHlCQUF5QixDQUFDLEVBQzVELENBQUM7UUFDRCxNQUFNLElBQUkseUJBQXlCLENBQ2pDLHVCQUF1QixFQUN2QiwwREFBMEQsQ0FDM0QsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLFVBQVUsQ0FBQyxhQUFhLElBQUksT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDMUQsT0FBTyxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQztJQUM5QyxDQUFDO0lBQ0QsT0FBTyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7SUFDL0IsT0FBTyxDQUFDLGdCQUFnQixHQUFHLElBQUksT0FBTyxDQUFPLENBQUMsVUFBVSxFQUFFLEVBQUU7UUFDMUQsT0FBTyxDQUFDLHVCQUF1QixHQUFHLFVBQVUsQ0FBQztJQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNILElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNyQixPQUFPO1FBQ0wsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1FBQzlCLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2QsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDaEIsT0FBTyxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQ2hDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLENBQUM7Z0JBQ3BDLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7Z0JBQ3JDLE9BQU8sQ0FBQyx1QkFBdUIsR0FBRyxTQUFTLENBQUM7WUFDOUMsQ0FBQztRQUNILENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsdUVBQXVFO0FBQ3ZFLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQ3RDLFVBQTRCLEVBQzVCLFFBQXFCLEVBQ3JCLFFBQWlCLEVBQ1YsRUFBRTtJQUNULE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckQsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDOUMsSUFDRSxDQUFDLE9BQU8sQ0FBQyxlQUFlO1dBQ3JCLENBQUMsT0FBTyxDQUFDLGlCQUFpQjtXQUMxQixPQUFPLEVBQUUsWUFBWSxLQUFLLE9BQU8sQ0FBQyxZQUFZO1dBQzlDLE9BQU8sQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLGtCQUFrQixFQUNqRCxDQUFDO1FBQ0QsTUFBTSxJQUFJLHlCQUF5QixDQUNqQyx1QkFBdUIsRUFDdkIsNEVBQTRFLENBQzdFLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxDQUFDLGtCQUFrQixLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ25ELE1BQU0sT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQztBQUN6QyxDQUFDLENBQUM7QUFNRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUNoQyxVQUFpRCxFQUNqQixFQUFFLENBQUMsVUFBVSxZQUFZLGdCQUFnQixDQUFDO0FBRTVFLE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLENBQzVDLFVBQWlELEVBQ3hDLEVBQUU7SUFDWCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsSUFBSSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ25DLE9BQU8sY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO0lBQ3RELENBQUM7SUFDRCxPQUFPLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUNwQyxDQUFDLENBQUM7QUFFRjs7Ozs7O0dBTUc7QUFDSCxNQUFNLDBCQUEwQixHQUFHLENBQ2pDLFVBQTRDLEVBQzVDLFNBQXFFLEVBQzlELEVBQUU7SUFDVCxNQUFNLElBQUkseUJBQXlCLENBQ2pDLHVCQUF1QixFQUN2QixVQUFVLENBQUMsY0FBYztRQUN2QixDQUFDLENBQUMsMEJBQTBCLFVBQVUsQ0FBQyxjQUFjLHFCQUFxQixTQUFTLEdBQUc7UUFDdEYsQ0FBQyxDQUFDLGtFQUFrRSxTQUFTLEdBQUcsQ0FDbkYsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FDM0MsVUFBaUQsRUFDakQsUUFBcUIsRUFDckIsVUFBNEMsRUFJNUMsRUFBRTtJQUNGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxJQUFJLFVBQVUsRUFBRSxhQUFhLEVBQUUsRUFBRSxDQUFDO1lBQ3hELDBCQUEwQixDQUFDLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFDRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxFQUFFLENBQUM7SUFDdkQsQ0FBQztJQUNELElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekIsMEJBQTBCLENBQUMsVUFBVSxFQUFFLGlDQUFpQyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUNELE9BQU8sdUJBQXVCLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRTtRQUNuRCxhQUFhLEVBQUUsVUFBVSxDQUFDLGFBQWE7S0FDeEMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLENBQy9DLFVBQWlELEVBQ2pELFVBQStGLEVBQ25FLEVBQUU7SUFDOUIsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN0RixNQUFNLGlCQUFpQixHQUFHLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDN0YsTUFBTSxPQUFPLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUMsTUFBTSxDQUMzRCxDQUFDLFNBQVMsRUFBNEIsRUFBRSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQ2pFLENBQUM7SUFDRixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFFLElBQUksT0FBTyxFQUFFLG9CQUFvQixLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ2hELElBQUksVUFBVSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN2QyxNQUFNLElBQUkseUJBQXlCLENBQ2pDLGtCQUFrQixFQUNsQixvR0FBb0csQ0FDckcsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLE1BQU0sS0FBSyxTQUFTO1lBQ3pCLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxTQUFTO1lBQ3RDLENBQUMsQ0FBQyxJQUFJLDBCQUEwQixDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVMsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLENBQUM7SUFDdEUsT0FBTyxTQUFTLEtBQUssU0FBUyxJQUFJLE1BQU0sS0FBSyxTQUFTO1FBQ3BELENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxTQUFTO1FBQ3RDLENBQUMsQ0FBQyxJQUFJLDBCQUEwQixDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN4RCxDQUFDLENBQUM7QUFFRjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FDM0MsVUFBaUQsRUFDakQsV0FBdUMsRUFDdkMsUUFBaUIsRUFDUixFQUFFO0lBQ1gsTUFBTSxLQUFLLEdBQUcsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0MsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN0RixNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLE9BQU8sS0FBSyxJQUFJLElBQUksUUFBUSxLQUFLLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQy9GLE1BQU0sT0FBTyxHQUFHLEtBQUssWUFBWSx5QkFBeUIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQztJQUN2RixJQUFJLE9BQU8sRUFBRSxpQkFBaUIsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3ZELE9BQU8sQ0FBQyxrQkFBa0IsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBRyxLQUFLLEVBQ2xELFVBQWlELEVBQ2pELFFBQXFCLEVBQ3JCLFVBQTRDLEVBQzVDLFlBR3FCLEVBQ0gsRUFBRTtJQUNwQixVQUFVLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxDQUFDO0lBQ3BDLE1BQU0sS0FBSyxHQUFHLDZCQUE2QixDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDOUUsSUFBSSxRQUFnRCxDQUFDO0lBQ3JELElBQUksQ0FBQztRQUNILFFBQVEsR0FBRyxpQ0FBaUMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDckUsT0FBTyxNQUFNLFlBQVksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFBQyxPQUFPLFFBQVEsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sUUFBUTtZQUNaLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQztZQUMvRCxDQUFDLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkMsQ0FBQztZQUFTLENBQUM7UUFDVCxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbEIsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLEtBQUssRUFDOUMsUUFBcUIsRUFDckIsYUFBb0UsRUFDckQsRUFBRTtJQUNqQixNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNuQixPQUFPO0lBQ1QsQ0FBQztJQUNELE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQztJQUNwQyxLQUFLLE1BQU0sVUFBVSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2xDLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQ3RDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUMxQixtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQy9DLENBQ0YsQ0FBQztJQUNGLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUMzQyxTQUFTLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDMUQsQ0FBQztJQUNGLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN4QixNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sSUFBSSwwQ0FBMEMsQ0FDbEQsTUFBTSxFQUNOLDhDQUE4QyxDQUMvQyxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxVQUFvQyxFQUFRLEVBQUU7SUFDOUUsVUFBVSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDOUIsSUFBSSxVQUFVLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNqQyxVQUFVLENBQUMsZ0JBQWdCLEtBQUssVUFBVSxDQUFDLHdCQUF3QjtZQUNqRSxDQUFDLENBQUMsZUFBZTtZQUNqQixDQUFDLENBQUMsZUFBZSxDQUFDO0lBQ3RCLENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRixxRkFBcUY7QUFDckYsTUFBTSxtQkFBbUIsR0FBRyxLQUFLLEVBQy9CLFVBQW9DLEVBQ3BDLGFBQW9FLEVBQ3JELEVBQUU7SUFDakIsSUFBSSxVQUFVLENBQUMsT0FBTztRQUFFLE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQztJQUNsRCx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNyQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ2hELE1BQU0sVUFBVSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEQsZUFBZSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFELFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBQ0gsVUFBVSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDN0IsSUFBSSxDQUFDO1FBQUMsTUFBTSxPQUFPLENBQUM7SUFBQyxDQUFDO1lBQVMsQ0FBQztRQUFDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO0lBQUMsQ0FBQztBQUNwRSxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx3Q0FBd0MsR0FBRyxDQUN0RCxRQUFpQixFQUNlLEVBQUUsQ0FDbEMsUUFBUSxZQUFZLDBDQUEwQztJQUM1RCxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU07SUFDakIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lossless.org/client",
3
- "version": "1.11.0",
3
+ "version": "1.13.0",
4
4
  "private": false,
5
5
  "description": "One typed client for NoSQLDB, MongoDB, SQLDB, MariaDB, ClickHouse and S3 object storage.",
6
6
  "exports": {
@@ -82,10 +82,10 @@
82
82
  "@aws-sdk/client-s3": "^3.1039.0",
83
83
  "@clickhouse/client": "1.23.1",
84
84
  "@git.zone/tsbuild": "5.0.0",
85
- "@git.zone/tsrun": "3.0.0",
86
- "@git.zone/tstest": "6.3.0",
85
+ "@git.zone/tsrun": "3.0.1",
86
+ "@git.zone/tstest": "6.3.1",
87
87
  "@lossless.org/nosqldb": "8.0.2",
88
- "@lossless.org/nosqldb-qualified": "npm:@lossless.org/nosqldb@10.7.0",
88
+ "@lossless.org/nosqldb-qualified": "npm:@lossless.org/nosqldb@10.7.2",
89
89
  "@lossless.org/objectstorage": "10.3.1",
90
90
  "@lossless.org/sqldb": "0.2.3",
91
91
  "@push.rocks/qenv": "^6.1.3",