@lossless.org/objectstorage 11.1.0 → 11.2.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.
Binary file
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "format": "tsrust.build-provenance.v2",
3
- "binarySha256": "5bdde7daf49ae45adc6e78e4e9c49c7b0d58abce43ecb41ae1335015eab02aa3",
3
+ "binarySha256": "cdd1429e14a8decd0c4b9489bc354dcec74ad81bc44e6a8fcdaf2084c2c1ff94",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/objectstorage",
6
- "projectVersion": "11.1.0",
7
- "gitCommit": "f1686c690aed60f0a332d4f05931295ea6ad5cfe",
6
+ "projectVersion": "11.2.0",
7
+ "gitCommit": "ad4fe239a2844ce6bcca0ea95f51c1f4e24e83e0",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-11-05T09:12:44.695Z",
9
+ "builtAt": "2026-11-05T19:11:09.869Z",
10
10
  "tsrustVersion": "1.1.1",
11
11
  "binary": "ruststorage",
12
12
  "target": "linux_amd64"
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "format": "tsrust.build-provenance.v2",
3
- "binarySha256": "b180ff7dbfd96d75634dfba1578c5f447e16f5ce5428f67ff09e60127327eb8c",
3
+ "binarySha256": "9f16c05efd8c18dce86483c926052de0a06cea8e98e9a2982f930fc7ef306fbd",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/objectstorage",
6
- "projectVersion": "11.1.0",
7
- "gitCommit": "f1686c690aed60f0a332d4f05931295ea6ad5cfe",
6
+ "projectVersion": "11.2.0",
7
+ "gitCommit": "ad4fe239a2844ce6bcca0ea95f51c1f4e24e83e0",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-11-05T09:12:46.282Z",
9
+ "builtAt": "2026-11-05T19:11:12.031Z",
10
10
  "tsrustVersion": "1.1.1",
11
11
  "binary": "ruststorage",
12
12
  "target": "linux_amd64_musl"
Binary file
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "format": "tsrust.build-provenance.v2",
3
- "binarySha256": "51861e60dc26f518ae7c1d4921dd3987829f686ec8328bfe8357212c41e183d8",
3
+ "binarySha256": "362b51aae8eda7ada655b3ddadaf787bd89251fb8683ac14f2d237779ba311d4",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/objectstorage",
6
- "projectVersion": "11.1.0",
7
- "gitCommit": "f1686c690aed60f0a332d4f05931295ea6ad5cfe",
6
+ "projectVersion": "11.2.0",
7
+ "gitCommit": "ad4fe239a2844ce6bcca0ea95f51c1f4e24e83e0",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-11-05T09:12:45.431Z",
9
+ "builtAt": "2026-11-05T19:11:10.877Z",
10
10
  "tsrustVersion": "1.1.1",
11
11
  "binary": "ruststorage",
12
12
  "target": "linux_arm64"
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "format": "tsrust.build-provenance.v2",
3
- "binarySha256": "180a5f8aceddc9a5336b03e08ba0a5b00aa5d9eef3ba1c8a47664233c9fb85a7",
3
+ "binarySha256": "1aa892f80060b4e8e78163d55869324c69698cfa506b0e976978ce813781a5b6",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/objectstorage",
6
- "projectVersion": "11.1.0",
7
- "gitCommit": "f1686c690aed60f0a332d4f05931295ea6ad5cfe",
6
+ "projectVersion": "11.2.0",
7
+ "gitCommit": "ad4fe239a2844ce6bcca0ea95f51c1f4e24e83e0",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-11-05T09:12:46.928Z",
9
+ "builtAt": "2026-11-05T19:11:12.880Z",
10
10
  "tsrustVersion": "1.1.1",
11
11
  "binary": "ruststorage",
12
12
  "target": "linux_arm64_musl"
Binary file
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "format": "tsrust.build-provenance.v2",
3
- "binarySha256": "cd8430398abe5d81a444426313f90eb509ddca9c87f8623c47a1e692b401762c",
3
+ "binarySha256": "781d3acefeacd324d1a00a96195cad6edae331176cfdb28e55f7f2cc38b61018",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/objectstorage",
6
- "projectVersion": "11.1.0",
7
- "gitCommit": "f1686c690aed60f0a332d4f05931295ea6ad5cfe",
6
+ "projectVersion": "11.2.0",
7
+ "gitCommit": "ad4fe239a2844ce6bcca0ea95f51c1f4e24e83e0",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-11-05T09:46:41.630Z",
9
+ "builtAt": "2026-11-05T19:50:02.701Z",
10
10
  "tsrustVersion": "1.1.1",
11
11
  "binary": "ruststorage",
12
12
  "target": "macos_amd64"
Binary file
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "format": "tsrust.build-provenance.v2",
3
- "binarySha256": "e8a9326674ef2d52bc347a28bd42804a15b49a33de22a368fe2ba6bb6324ccf9",
3
+ "binarySha256": "56a95c7bea05728e1a4b1c043bf53e6d78736d682fed9f315ab06a879c2f423c",
4
4
  "buildInfo": {
5
5
  "projectName": "@lossless.org/objectstorage",
6
- "projectVersion": "11.1.0",
7
- "gitCommit": "f1686c690aed60f0a332d4f05931295ea6ad5cfe",
6
+ "projectVersion": "11.2.0",
7
+ "gitCommit": "ad4fe239a2844ce6bcca0ea95f51c1f4e24e83e0",
8
8
  "gitDirty": false,
9
- "builtAt": "2026-11-05T09:46:42.570Z",
9
+ "builtAt": "2026-11-05T19:50:10.132Z",
10
10
  "tsrustVersion": "1.1.1",
11
11
  "binary": "ruststorage",
12
12
  "target": "macos_arm64"
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@lossless.org/objectstorage',
6
- version: '11.1.0',
6
+ version: '11.2.0',
7
7
  description: 'A Node.js TypeScript package to create a local S3-compatible storage server using mapped local directories for development and testing purposes.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSw2QkFBNkI7SUFDbkMsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLGtKQUFrSjtDQUNoSyxDQUFBIn0=
@@ -211,11 +211,22 @@ export interface IObjectStorageConfig {
211
211
  * Logical bucket stats maintained by the Rust runtime.
212
212
  * Values are initialized from native storage on startup and updated on objectstorage mutations.
213
213
  */
214
+ /** A versioned bucket's S3 versioning status; a bucket that was never versioned has none. */
215
+ export type TBucketVersioningStatus = 'Enabled' | 'Suspended';
214
216
  export interface IBucketSummary {
215
217
  name: string;
218
+ /** Current objects; noncurrent versions and delete markers are counted below. */
216
219
  objectCount: number;
217
220
  totalSizeBytes: number;
218
221
  creationDate?: number;
222
+ /** Present only for a versioned bucket (standalone), and so are the counters below. */
223
+ versioning?: TBucketVersioningStatus;
224
+ /** Noncurrent data versions. */
225
+ noncurrentVersionCount?: number;
226
+ /** Payload bytes of the noncurrent data versions. */
227
+ noncurrentBytes?: number;
228
+ /** Delete markers, current and noncurrent. */
229
+ deleteMarkerCount?: number;
219
230
  }
220
231
  /**
221
232
  * Filesystem-level capacity snapshot for the storage directory or configured drive path.
@@ -313,6 +324,15 @@ export interface IStorageStats {
313
324
  buckets: IBucketSummary[];
314
325
  storageDirectory: string;
315
326
  storageLocations?: IStorageLocationSummary[];
327
+ /** Totals over the versioned buckets; absent without one. */
328
+ totalNoncurrentVersionCount?: number;
329
+ totalNoncurrentBytes?: number;
330
+ totalDeleteMarkerCount?: number;
331
+ /**
332
+ * How far version stamps run ahead of the wall clock, after the wall clock
333
+ * went backwards (or a forward jump was corrected); absent when they do not.
334
+ */
335
+ stampClockAheadOfWallMs?: number;
316
336
  }
317
337
  export interface IStorageStopResult {
318
338
  complete: true;
@@ -726,6 +746,8 @@ export interface IObjectStorageHealth {
726
746
  resourcePublicationHoldSupported: boolean;
727
747
  resourcePublicationHoldRequiresExternalDrain: false;
728
748
  resourceFencingReason?: string;
749
+ /** See `IStorageStats.stampClockAheadOfWallMs`. */
750
+ stampClockAheadOfWallMs?: number;
729
751
  }
730
752
  export declare const objectStorageResourceFenceErrorCodes: readonly ['EFENCE_REQUIRED', 'EFENCE_STALE', 'EFENCE_SCOPE_MISMATCH', 'EFENCE_UNSUPPORTED', 'EFENCE_MUTATION_MISMATCH', 'EFENCE_STATE_CORRUPT', 'EFENCE_RECEIPT_LIMIT', 'EFENCE_BUSY', 'EFENCE_OWNERSHIP_MISMATCH', 'EFENCE_PUBLICATION_HELD', 'EFENCE_PUBLICATION_MISMATCH', 'EFENCE_PUBLICATION_CAPABILITY'];
731
753
  export type TObjectStorageResourceFenceErrorCode = (typeof objectStorageResourceFenceErrorCodes)[number];
package/dist_ts/index.js CHANGED
@@ -340,6 +340,13 @@ const DEFAULT_CONFIG = {
340
340
  // A fenced import may contain 64 MiB of raw object data encoded as hexadecimal.
341
341
  // Keep this aligned with the bounded Rust management-line reader.
342
342
  const MAXIMUM_MANAGEMENT_PAYLOAD_BYTES = 144 * 1024 * 1024;
343
+ // The `start` command's timeout: the largest delay Node's setTimeout honours
344
+ // (2^31 - 1 ms, about 24.8 days; Node clamps any larger delay, so also
345
+ // Number.MAX_SAFE_INTEGER, to 1 ms). Startup recovers every version chain and
346
+ // scans every current object, so it grows with the stored data and has no
347
+ // fixed bound; an engine that dies during startup still rejects `start` at
348
+ // once, through the bridge's exit detection.
349
+ const START_COMMAND_TIMEOUT_MS = 2_147_483_647;
343
350
  function assertExactMountedDirectory(directoryArg, fieldArg) {
344
351
  if (directoryArg.length === 0 ||
345
352
  !plugins.path.isAbsolute(directoryArg) ||
@@ -571,6 +578,12 @@ export class ObjectStorage {
571
578
  console.error(`ruststorage engine exited unexpectedly (code: ${code}, signal: ${signal}).`);
572
579
  }
573
580
  });
581
+ // The engine logs (warnings, errors, startup recovery progress) to its
582
+ // stderr; forward every line verbatim to the host's stderr, as an
583
+ // inherited stderr would.
584
+ this.bridge.on('stderr', (line) => {
585
+ console.error(line);
586
+ });
574
587
  }
575
588
  start() {
576
589
  if (this.stopRequested && !this.stopCompleted) {
@@ -607,7 +620,7 @@ export class ObjectStorage {
607
620
  if (!spawned) {
608
621
  throw new Error('Failed to spawn ruststorage binary. Make sure it is compiled (pnpm build).');
609
622
  }
610
- const result = await this.bridge.sendCommand('start', { config: this.config });
623
+ const result = await this.bridge.sendCommand('start', { config: this.config }, { timeoutMs: START_COMMAND_TIMEOUT_MS });
611
624
  if (!Number.isInteger(result.port) || result.port < 1 || result.port > 65535) {
612
625
  throw new Error('Storage engine did not report a valid bound TCP port.');
613
626
  }
@@ -1044,10 +1057,14 @@ export class ObjectStorage {
1044
1057
  resourcePublicationHoldSupported: resourceFencing.publicationHoldSupported,
1045
1058
  resourcePublicationHoldRequiresExternalDrain: resourceFencing.publicationHoldRequiresExternalDrain,
1046
1059
  resourceFencingReason: resourceFencing.reason,
1060
+ ...(stats.stampClockAheadOfWallMs === undefined
1061
+ ? {}
1062
+ : { stampClockAheadOfWallMs: stats.stampClockAheadOfWallMs }),
1047
1063
  };
1048
1064
  }
1049
1065
  async getMetrics() {
1050
1066
  const health = await this.getHealth();
1067
+ const stats = health.running ? await this.getStorageStats() : undefined;
1051
1068
  const clusterEnabled = health.cluster.enabled;
1052
1069
  return {
1053
1070
  bucketCount: health.bucketCount,
@@ -1081,6 +1098,15 @@ export class ObjectStorage {
1081
1098
  '# HELP objectstorage_cluster_enabled Cluster mode enabled.',
1082
1099
  '# TYPE objectstorage_cluster_enabled gauge',
1083
1100
  `objectstorage_cluster_enabled ${clusterEnabled ? 1 : 0}`,
1101
+ '# HELP objectstorage_noncurrent_versions_total Noncurrent object versions.',
1102
+ '# TYPE objectstorage_noncurrent_versions_total gauge',
1103
+ `objectstorage_noncurrent_versions_total ${stats?.totalNoncurrentVersionCount ?? 0}`,
1104
+ '# HELP objectstorage_noncurrent_bytes_total Payload bytes of noncurrent object versions.',
1105
+ '# TYPE objectstorage_noncurrent_bytes_total gauge',
1106
+ `objectstorage_noncurrent_bytes_total ${stats?.totalNoncurrentBytes ?? 0}`,
1107
+ '# HELP objectstorage_delete_markers_total Delete markers, current and noncurrent.',
1108
+ '# TYPE objectstorage_delete_markers_total gauge',
1109
+ `objectstorage_delete_markers_total ${stats?.totalDeleteMarkerCount ?? 0}`,
1084
1110
  ].join('\n'),
1085
1111
  };
1086
1112
  }
@@ -1126,4 +1152,4 @@ export class ObjectStorage {
1126
1152
  }
1127
1153
  }
1128
1154
  }
1129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEtBQUssS0FBSyxNQUFNLFlBQVksQ0FBQztBQU9wQyxjQUFjLDJCQUEyQixDQUFDO0FBK3FCMUMsTUFBTSxxQkFBcUIsR0FBRztJQUM1QixjQUFjLEVBQUUsTUFBTTtJQUN0QixrQkFBa0IsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUk7SUFDcEMsa0JBQWtCLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJO0lBQ3BDLGVBQWUsRUFBRSxJQUFJO0lBQ3JCLHNCQUFzQixFQUFFLEVBQUU7SUFDMUIsb0JBQW9CLEVBQUUsQ0FBQyxHQUFHLElBQUk7SUFDOUIsb0JBQW9CLEVBQUUsSUFBSSxHQUFHLElBQUk7SUFDakMseUJBQXlCLEVBQUUsSUFBSSxHQUFHLElBQUk7SUFDdEMsc0JBQXNCLEVBQUUsR0FBRztDQUNuQixDQUFDO0FBRVgsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLFFBQWdCLEVBQVUsRUFBRTtJQUN6RCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDcEQsTUFBTSxJQUFJLEtBQUssQ0FBQyw4RUFBOEUsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMzQyxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDLENBQUM7QUFFRixNQUFNLG1CQUFtQixHQUFHLENBQUMsUUFBZ0IsRUFBRSxRQUFnQixFQUFVLEVBQUU7SUFDekUsSUFBSSxPQUFPLFFBQVEs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
1155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEtBQUssS0FBSyxNQUFNLFlBQVksQ0FBQztBQU9wQyxjQUFjLDJCQUEyQixDQUFDO0FBb3NCMUMsTUFBTSxxQkFBcUIsR0FBRztJQUM1QixjQUFjLEVBQUUsTUFBTTtJQUN0QixrQkFBa0IsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUk7SUFDcEMsa0JBQWtCLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJO0lBQ3BDLGVBQWUsRUFBRSxJQUFJO0lBQ3JCLHNCQUFzQixFQUFFLEVBQUU7SUFDMUIsb0JBQW9CLEVBQUUsQ0FBQyxHQUFHLElBQUk7SUFDOUIsb0JBQW9CLEVBQUUsSUFBSSxHQUFHLElBQUk7SUFDakMseUJBQXlCLEVBQUUsSUFBSSxHQUFHLElBQUk7SUFDdEMsc0JBQXNCLEVBQUUsR0FBRztDQUNuQixDQUFDO0FBRVgsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLFFBQWdCLEVBQVUsRUFBRTtJQUN6RCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDcEQsTUFBTSxJQUFJLEtBQUssQ0FBQyw4RUFBOEUsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMzQyxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDLENBQUM7QUFFRixNQUFNLG1CQUFtQixHQUFHLENBQUMsUUFBZ0IsRUFBRSxRQUFnQixFQUFVLEVBQUU7SUFDekUsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsUUFBUSxvQkFBb0IsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM5QyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLFFBQVEsNENBQTRDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUYsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLE9BQWUsRUFBRSxRQUFnQixFQUFVLEVBQUUsQ0FDL0UsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBRTlFLE1BQU0sK0JBQStCLEdBQUcsQ0FBQyxhQUFxQixFQUFRLEVBQUU7SUFDdEUsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0MsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ3ZFLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FDN0MsQ0FBQztJQUNGLElBQ0UsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDO1dBQ2YsT0FBTyxDQUFDLE1BQU0sR0FBRyxFQUFFO1dBQ25CLENBQUMsK0JBQStCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztXQUNwRCxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztXQUM1QixhQUFhLEVBQ2hCLENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sK0JBQStCLEdBQUcsQ0FBQyxRQUFnQixFQUFFLFFBQWdCLEVBQVEsRUFBRTtJQUNuRixNQUFNLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDeEQsSUFDRSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUM7V0FDakIsT0FBTyxDQUFDLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxzQkFBc0I7V0FDN0QsQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ25ELENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsUUFBUSxpQ0FBaUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRixNQUFNLGdDQUFnQyxHQUFHLENBQ3ZDLFdBQW1DLEVBQ25DLFlBQW9CLEVBQ1osRUFBRTtJQUNWLElBQUksQ0FBQyxXQUFXLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUNsRixNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsWUFBWSwrQkFBK0IsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzVDLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ2xFLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxZQUFZLGtDQUFrQyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUNELEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNuQyxNQUFNLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsV0FBVyxZQUFZLGdCQUFnQixDQUFDLENBQUM7UUFDbkYsTUFBTSxVQUFVLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFdBQVcsWUFBWSxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3pGLElBQ0UsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDO2VBQ2xCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsR0FBRztlQUNyQixVQUFVLENBQUMsTUFBTSxHQUFHLElBQUk7ZUFDeEIsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDO2VBQ3RELFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxFQUM5RSxDQUFDO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLFlBQVksd0JBQXdCLENBQUMsQ0FBQztRQUNuRSxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLDBCQUEwQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQ3pCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQ2pHLE1BQU0sQ0FDUCxDQUFDO0lBQ0YsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLHFCQUFxQixDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDaEUsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLFlBQVksb0NBQW9DLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUY7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHlEQUF5RCxHQUFHLENBQ3ZFLFVBQXlELEVBQ2pELEVBQUU7SUFDVixJQUFJLFVBQVUsQ0FBQyxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyx3RUFBd0UsQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFDRCwrQkFBK0IsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdkQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxRQUF5QixFQUFRLEVBQUU7UUFDdEQsTUFBTSxLQUFLLEdBQUcsT0FBTyxRQUFRLEtBQUssUUFBUTtZQUN4QyxDQUFDLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLDZCQUE2QixDQUFDO1lBQzlELENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDYixJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckIsQ0FBQyxDQUFDO0lBRUYsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLCtCQUErQixFQUFFLENBQUM7UUFDeEQsK0JBQStCLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN2RSxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLFdBQVcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwQyxJQUFJLFVBQVUsQ0FBQyxlQUFlLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDeEMsV0FBVyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7WUFDL0QsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLCtCQUErQixFQUFFLENBQUM7UUFDeEQsK0JBQStCLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN2RSxNQUFNLGVBQWUsR0FBRyxtQkFBbUIsQ0FDekMsVUFBVSxDQUFDLGVBQWUsRUFDMUIsaUJBQWlCLENBQ2xCLENBQUM7UUFDRixJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsbUJBQW1CLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBQ0QsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixXQUFXLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25DLFdBQVcsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN2RixXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEIsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDekIsSUFDRSxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxZQUFZO21CQUN2QyxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQzttQkFDN0QsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUM7bUJBQ3BFLFVBQVUsQ0FBQyxTQUFTLENBQUMsd0JBQXdCLElBQUksQ0FBQzttQkFDbEQsVUFBVSxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUMzRSxDQUFDO2dCQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsK0RBQStELENBQUMsQ0FBQztZQUNuRixDQUFDO1lBQ0QsV0FBVyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7WUFDaEQsV0FBVyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0MsV0FBVyxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO1FBQ3BGLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxnQ0FBZ0MsRUFBRSxDQUFDO1FBQ3pELE1BQU0sSUFBSSxLQUFLLENBQUMscUVBQXFFLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3pDLCtCQUErQixDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDakMsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLHdCQUF3QixFQUFFLENBQUM7UUFDL0MsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFDRCwrQkFBK0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdEUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcscUJBQXFCLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDbkcsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IscUJBQXFCLENBQUMsY0FBYyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQ3RDLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztJQUNuQixJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7SUFDdEIsSUFBSSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7SUFDM0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtRQUM3QyxNQUFNLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQy9ELElBQ0UsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDO2VBQ2xCLFFBQVEsQ0FBQyxNQUFNLEdBQUcscUJBQXFCLENBQUMsZUFBZSxFQUMxRCxDQUFDO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FDYixlQUFlLE1BQU0sQ0FBQyxHQUFHLGdDQUFnQyxxQkFBcUIsQ0FBQyxlQUFlLGVBQWUsQ0FDOUcsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDM0UsQ0FBQztRQUNELFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLGFBQWEsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQ2pDLElBQUksYUFBYSxHQUFHLHFCQUFxQixDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDL0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IscUJBQXFCLENBQUMsb0JBQW9CLDRCQUE0QixDQUFDLENBQUM7UUFDaEgsQ0FBQztRQUVELElBQ0UsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7ZUFDL0IsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDO2VBQ2YsTUFBTSxDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxrQkFBa0I7ZUFDdEQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDO2VBQ3pDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQ3RDLENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsTUFBTSxDQUFDLEdBQUcscUNBQXFDLENBQUMsQ0FBQztRQUM5RSxDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2hELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLE1BQU0sQ0FBQyxHQUFHLGdDQUFnQyxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLE1BQU0sQ0FBQyxHQUFHLHlCQUF5QixDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUUsSUFBSSxTQUFTLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxNQUFNLENBQUMsR0FBRywrQkFBK0IsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxnQ0FBZ0MsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvRSxrQkFBa0IsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQ3RDLElBQUksa0JBQWtCLEdBQUcscUJBQXFCLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUN6RSxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixxQkFBcUIsQ0FBQyx5QkFBeUIsaUNBQWlDLENBQUMsQ0FBQztRQUMxSCxDQUFDO1FBQ0QsVUFBVSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDMUIsSUFBSSxVQUFVLEdBQUcscUJBQXFCLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMxRCxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixxQkFBcUIsQ0FBQyxrQkFBa0IscUJBQXFCLENBQUMsQ0FBQztRQUN2RyxDQUFDO1FBQ0QsT0FBTztZQUNMLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRztZQUNmLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNqQixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUc7WUFDZixRQUFRO1lBQ1IsVUFBVSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQzNFLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUNILFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRWhGLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsV0FBVyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuQyxJQUFJLFVBQVUsQ0FBQyxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDekMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBQ0QsV0FBVyxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELEtBQUssTUFBTSxNQUFNLElBQUksUUFBUSxFQUFFLENBQUM7UUFDOUIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QixXQUFXLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDaEQsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QixXQUFXLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdCLFdBQVcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLGVBQWUsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUN4QyxXQUFXLENBQUMsaURBQWlELENBQUMsQ0FBQztRQUMvRCxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVCLENBQUMsQ0FBQztBQStKRixNQUFNLENBQUMsTUFBTSxvQ0FBb0MsR0FBRztJQUNsRCxpQkFBaUI7SUFDakIsY0FBYztJQUNkLHVCQUF1QjtJQUN2QixvQkFBb0I7SUFDcEIsMEJBQTBCO0lBQzFCLHNCQUFzQjtJQUN0QixzQkFBc0I7SUFDdEIsYUFBYTtJQUNiLDJCQUEyQjtJQUMzQix5QkFBeUI7SUFDekIsNkJBQTZCO0lBQzdCLCtCQUErQjtDQUN2QixDQUFDO0FBS1gsTUFBTSxPQUFPLCtCQUFnQyxTQUFRLEtBQUs7SUFDeEMsSUFBSSxDQUF1QztJQUUzRCxZQUNFLE9BQTZDLEVBQzdDLFVBQWtCLEVBQ2xCLFFBQWtCO1FBRWxCLEtBQUssQ0FBQyxHQUFHLE9BQU8sS0FBSyxVQUFVLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxJQUFJLEdBQUcsaUNBQWlDLENBQUM7UUFDOUMsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7SUFDdEIsQ0FBQztDQUNGO0FBRUQsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLFFBQWlCLEVBQVMsRUFBRTtJQUMvRCxNQUFNLEtBQUssR0FBRyxRQUFRLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLE1BQU0sS0FBSyxHQUFHLDRCQUE0QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0QsSUFDRSxDQUFDLEtBQUs7UUFDTixDQUFDLG9DQUFvQyxDQUFDLFFBQVEsQ0FDNUMsS0FBSyxDQUFDLENBQUMsQ0FBeUMsQ0FDakQsRUFDRCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxJQUFJLCtCQUErQixDQUN4QyxLQUFLLENBQUMsQ0FBQyxDQUF5QyxFQUNoRCxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsS0FBSyxDQUNOLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxpQ0FBaUMsR0FBRztJQUMvQywyQkFBMkI7SUFDM0IsNEJBQTRCO0lBQzVCLHlCQUF5QjtJQUN6Qiw0QkFBNEI7SUFDNUIseUJBQXlCO0lBQ3pCLDRCQUE0QjtJQUM1QixnQ0FBZ0M7SUFDaEMsc0JBQXNCO0lBQ3RCLHFCQUFxQjtJQUNyQix3QkFBd0I7SUFDeEIsbUJBQW1CO0lBQ25CLHlCQUF5QjtJQUN6QiwrQkFBK0I7Q0FDdkIsQ0FBQztBQUtYLE1BQU0sT0FBTyw0QkFBNkIsU0FBUSxLQUFLO0lBQ3JDLElBQUksQ0FBb0M7SUFFeEQsWUFDRSxPQUEwQyxFQUMxQyxVQUFrQixFQUNsQixRQUFrQjtRQUVsQixLQUFLLENBQUMsR0FBRyxPQUFPLEtBQUssVUFBVSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsSUFBSSxHQUFHLDhCQUE4QixDQUFDO1FBQzNDLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO0lBQ3RCLENBQUM7Q0FDRjtBQUVELE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxRQUFpQixFQUFTLEVBQUU7SUFDNUQsTUFBTSxLQUFLLEdBQUcsUUFBUSxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNqRixNQUFNLEtBQUssR0FBRyxpQ0FBaUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BFLElBQ0UsQ0FBQyxLQUFLO1FBQ04sQ0FBQyxpQ0FBaUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBc0MsQ0FBQyxFQUMxRixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxJQUFJLDRCQUE0QixDQUNyQyxLQUFLLENBQUMsQ0FBQyxDQUFzQyxFQUM3QyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsS0FBSyxDQUNOLENBQUM7QUFDSixDQUFDLENBQUM7QUFpS0Y7O0dBRUc7QUFDSCxNQUFNLGNBQWMsR0FBeUI7SUFDM0MsTUFBTSxFQUFFO1FBQ04sSUFBSSxFQUFFLElBQUk7UUFDVixPQUFPLEVBQUUsU0FBUztRQUNsQixNQUFNLEVBQUUsS0FBSztRQUNiLE1BQU0sRUFBRSxXQUFXO0tBQ3BCO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsU0FBUyxFQUFFLEtBQUssQ0FBQyxVQUFVO1FBQzNCLFVBQVUsRUFBRSxLQUFLO0tBQ2xCO0lBQ0QsSUFBSSxFQUFFO1FBQ0osT0FBTyxFQUFFLEtBQUs7UUFDZCxXQUFXLEVBQUU7WUFDWDtnQkFDRSxXQUFXLEVBQUUsU0FBUztnQkFDdEIsZUFBZSxFQUFFLFNBQVM7YUFDM0I7U0FDRjtLQUNGO0lBQ0QsSUFBSSxFQUFFO1FBQ0osT0FBTyxFQUFFLEtBQUs7UUFDZCxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDckIsY0FBYyxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUM7UUFDbkUsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ3JCLGNBQWMsRUFBRSxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQztRQUNoRSxNQUFNLEVBQUUsS0FBSztRQUNiLGdCQUFnQixFQUFFLEtBQUs7S0FDeEI7SUFDRCxPQUFPLEVBQUU7UUFDUCxLQUFLLEVBQUUsTUFBTTtRQUNiLE1BQU0sRUFBRSxNQUFNO1FBQ2QsT0FBTyxFQUFFLElBQUk7S0FDZDtJQUNELE1BQU0sRUFBRTtRQUNOLGFBQWEsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUUsTUFBTTtRQUM3QyxlQUFlLEVBQUUsSUFBSTtRQUNyQixjQUFjLEVBQUUsTUFBTSxFQUFFLFlBQVk7S0FDckM7SUFDRCxTQUFTLEVBQUU7UUFDVCxjQUFjLEVBQUUsQ0FBQztRQUNqQixzQkFBc0IsRUFBRSxFQUFFO1FBQzFCLHdCQUF3QixFQUFFLEdBQUc7S0FDOUI7Q0FDRixDQUFDO0FBRUYsZ0ZBQWdGO0FBQ2hGLGtFQUFrRTtBQUNsRSxNQUFNLGdDQUFnQyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBRTNELDZFQUE2RTtBQUM3RSx1RUFBdUU7QUFDdkUsOEVBQThFO0FBQzlFLDBFQUEwRTtBQUMxRSwyRUFBMkU7QUFDM0UsNkNBQTZDO0FBQzdDLE1BQU0sd0JBQXdCLEdBQUcsYUFBYSxDQUFDO0FBRS9DLFNBQVMsMkJBQTJCLENBQUMsWUFBb0IsRUFBRSxRQUFnQjtJQUN6RSxJQUNFLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUN6QixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztRQUN0QyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxZQUFZO1FBQ3JELE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLFlBQVksRUFDbkQsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQ2IsR0FBRyxRQUFRLDRIQUE0SCxDQUN4SSxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsV0FBVyxDQUFDLFVBQWdDO0lBQ25ELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO0lBQzdDLE1BQU0sZ0JBQWdCLEdBQUcsY0FBYyxDQUFDLE9BQVEsQ0FBQyxTQUFVLENBQUM7SUFDNUQsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQztJQUM5QyxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO0lBQ3hDLE1BQU0scUJBQXFCLEdBQUcsY0FBYyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDO0lBRTNFLElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQUMxQiwyQkFBMkIsQ0FDekIsY0FBYyxDQUFDLFNBQVMsRUFDeEIsd0JBQXdCLENBQ3pCLENBQUM7UUFDRixJQUFJLGVBQWUsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNsQywyQkFBMkIsQ0FBQyxlQUFlLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztZQUNsRSxJQUFJLGVBQWUsS0FBSyxjQUFjLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2pELE1BQU0sSUFBSSxLQUFLLENBQ2IscUZBQXFGLENBQ3RGLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLGtCQUFrQixHQUN0QixjQUFjLEVBQUUsU0FBUyxJQUFJLGVBQWUsSUFBSSxnQkFBZ0IsQ0FBQztJQUVuRSxJQUNFLGNBQWM7UUFDZCxDQUFDLHFCQUFxQjtRQUN0QixlQUFlO1FBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztZQUM1QyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFDdkMsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQ2IsNkVBQTZFLENBQzlFLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQXVCLGNBQWM7UUFDN0MsQ0FBQyxDQUFDO1lBQ0UsR0FBRyxjQUFjO1lBQ2pCLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztZQUNuRCxPQUFPLEVBQUUsRUFBRSxHQUFHLGNBQWMsQ0FBQyxPQUFPLEVBQUU7U0FDdkM7UUFDSCxDQUFDLENBQUM7WUFDRSxFQUFFLEVBQUUsU0FBUztZQUNiLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztZQUNuRCxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO1NBQzdCLENBQUM7SUFFTixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzVDLE1BQU0sSUFBSSxLQUFLLENBQ2Isa0hBQWtILENBQ25ILENBQUM7SUFDSixDQUFDO0lBQ0QsSUFDRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxXQUFXO1FBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQy9DLENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLHNFQUFzRSxDQUN2RSxDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoRSxNQUFNLElBQUksS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVELE9BQU87UUFDTCxNQUFNLEVBQUU7WUFDTixHQUFHLGNBQWMsQ0FBQyxNQUFPO1lBQ3pCLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztTQUM3QjtRQUNELE9BQU8sRUFBRTtZQUNQLEdBQUcsY0FBYyxDQUFDLE9BQVE7WUFDMUIsR0FBRyxXQUFXO1lBQ2QsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLElBQUk7U0FDTDtRQUNELElBQUksRUFBRTtZQUNKLEdBQUcsY0FBYyxDQUFDLElBQUs7WUFDdkIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1NBQzNCO1FBQ0QsSUFBSSxFQUFFO1lBQ0osR0FBRyxjQUFjLENBQUMsSUFBSztZQUN2QixHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7U0FDM0I7UUFDRCxPQUFPLEVBQUU7WUFDUCxHQUFHLGNBQWMsQ0FBQyxPQUFRO1lBQzFCLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztTQUM5QjtRQUNELE1BQU0sRUFBRTtZQUNOLEdBQUcsY0FBYyxDQUFDLE1BQU87WUFDekIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1NBQzdCO1FBQ0QsU0FBUyxFQUFFO1lBQ1QsR0FBRyxjQUFjLENBQUMsU0FBVTtZQUM1QixHQUFHLENBQUMsVUFBVSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7U0FDaEM7UUFDRCxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDL0IsQ0FBQztBQUNwQyxDQUFDO0FBRUQsTUFBTSx5QkFBeUIsR0FBRyxXQUFXLENBQUM7QUFDOUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUM7QUFFcEMsU0FBUyxzQkFBc0IsQ0FDN0IsWUFBdUQsRUFDdkQsU0FBaUI7SUFFakIsSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDL0IsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQUksT0FBTyxZQUFZLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzlDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sSUFBSSx5QkFBeUIsQ0FBQztJQUNsRSxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hELE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBQ0QsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLElBQUksSUFBSSxzQkFBc0IsQ0FBQztJQUN6RCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztRQUN4RCxNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUNELElBQUksWUFBWSxDQUFDLE9BQU8sSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM3RCxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixJQUFJLG9EQUFvRCxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUNELE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDMUQsQ0FBQztBQUVELFNBQVMsaUJBQWlCO0lBQ3hCLE9BQU8sS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztBQUM3RSxDQUFDO0FBRUQsU0FBUyx1QkFBdUI7SUFDOUIsT0FBTyxLQUFLLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO0FBQzdFLENBQUM7QUFFRCxTQUFTLHFCQUFxQjtJQUM1QixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRUQsU0FBUyx5QkFBeUI7SUFDaEMsTUFBTSxpQkFBaUIsR0FBMkI7UUFDaEQsV0FBVyxFQUFFLGtCQUFrQjtRQUMvQixhQUFhLEVBQUUsa0JBQWtCO1FBQ2pDLFlBQVksRUFBRSxhQUFhO1FBQzNCLGNBQWMsRUFBRSxhQUFhO0tBQzlCLENBQUM7SUFDRixNQUFNLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDaEYsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsZUFBZSxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQztTQUM1RSxNQUFNLENBQUMsQ0FBQyxhQUFhLEVBQTJCLEVBQUUsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUNoRixDQUFDO0FBNElEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFDeEIsU0FBUztJQUNGLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFNBQVMsR0FBeUIsRUFBRTtRQUNyRSxNQUFNLHFCQUFxQixHQUFHLElBQUksYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNELE1BQU0scUJBQXFCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDcEMsT0FBTyxxQkFBcUIsQ0FBQztJQUMvQixDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FDbEMsT0FBa0MsRUFDbEMsVUFBVSxHQUE2QyxFQUFFO1FBRXpELE1BQU0scUJBQXFCLEdBQUcsSUFBSSxhQUFhLENBQUM7WUFDOUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNyRixNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO1lBQ3hCLE9BQU8sRUFBRTtnQkFDUCxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7Z0JBQzVCLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixJQUFJLEVBQUUsT0FBTzthQUNkO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FDYiw0RUFBNEUsQ0FDN0UsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0scUJBQXFCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRTtnQkFDeEUsSUFBSSxFQUFFLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxPQUFPO3FCQUN2QyxJQUFpQzthQUNyQyxDQUFDLENBQUM7UUFDTCxDQUFDO2dCQUFTLENBQUM7WUFDVCxNQUFNLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqRCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUN4QyxZQUFvQixFQUNwQixVQUFVLEdBQXdFLEVBQUU7UUFFcEYsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLGFBQWEsQ0FBQztZQUM5QyxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3JGLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFDeEIsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFO1NBQ3hELENBQUMsQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLE1BQU0scUJBQXFCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzNELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE1BQU0sSUFBSSxLQUFLLENBQ2IsNEVBQTRFLENBQzdFLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsd0JBQXdCLEVBQUU7Z0JBQzlFLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7Z0JBQzdDLEdBQUcsQ0FBQyxVQUFVLENBQUMsV0FBVyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDekYsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsTUFBTSxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakQsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO0lBQ0osTUFBTSxDQUErQjtJQUNwQyxNQUFNLENBQWdFO0lBQ3RFLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDaEIsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNkLG1CQUFtQixDQUFpQztJQUNwRCxZQUFZLENBQTRCO0lBQ3hDLFdBQVcsQ0FBNEI7SUFDdkMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUNwQixhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDYixlQUFlLENBQXNEO0lBQzlFLFNBQVMsQ0FBcUM7SUFFdEQsWUFBWSxTQUFTLEdBQXlCLEVBQUU7UUFDOUMsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQztRQUN4QyxJQUNFLFVBQVUsS0FBSyxTQUFTO2VBQ3JCLENBQUMsT0FBTyxVQUFVLEtBQUssUUFBUSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQzlELENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsc0JBQXNCLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFLLENBQUMsQ0FBQztRQUM3RixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBdUI7WUFDekQsVUFBVSxFQUFFLGFBQWE7WUFDekIsR0FBRyxDQUFDLFVBQVUsS0FBSyxTQUFTO2dCQUMxQixDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUU7Z0JBQ2hCLENBQUMsQ0FBQztvQkFDRSxVQUFVLEVBQUUsMkJBQTJCO29CQUN2QyxVQUFVLEVBQUUseUJBQXlCLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUM1RCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FDaEU7aUJBQ0YsQ0FBQztZQUNOLGNBQWMsRUFBRSxLQUFLO1lBQ3JCLGdCQUFnQixFQUFFLE1BQU07WUFDeEIsY0FBYyxFQUFFLGdDQUFnQztTQUNqRCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFtQixFQUFFLE1BQXFCLEVBQUUsRUFBRTtZQUNwRSxxRUFBcUU7WUFDckUsd0VBQXdFO1lBQ3hFLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3ZDLE9BQU8sQ0FBQyxLQUFLLENBQUMsaURBQWlELElBQUksYUFBYSxNQUFNLElBQUksQ0FBQyxDQUFDO1lBQzlGLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILHVFQUF1RTtRQUN2RSxrRUFBa0U7UUFDbEUsMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQVksRUFBRSxFQUFFO1lBQ3hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sS0FBSztRQUNWLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM5QyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQyxDQUFDO1FBQ3hGLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDM0IsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNCLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsMERBQTBELENBQUMsQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztRQUM3QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDO1FBQ3JDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixNQUFNLFlBQVksR0FBRyxHQUFHLEVBQUU7WUFDeEIsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztZQUNoQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBQ0YsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDdkMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sS0FBSyxDQUFDLGFBQWE7UUFDekIsSUFBSSxDQUFDO1lBQ0gsNkVBQTZFO1lBQzdFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyw0RUFBNEUsQ0FBQyxDQUFDO1lBQ2hHLENBQUM7WUFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUMxQyxPQUFPLEVBQ1AsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUN2QixFQUFFLFNBQVMsRUFBRSx3QkFBd0IsRUFBRSxDQUN4QyxDQUFDO1lBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUM7Z0JBQzdFLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztZQUMzRSxDQUFDO1lBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQzdCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUUsQ0FBQztnQkFDbEMsa0VBQWtFO2dCQUNsRSxvQ0FBb0M7Z0JBQ3BDLE1BQU0sRUFBRSxzQkFBc0IsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7Z0JBQzFFLE1BQU0sU0FBUyxHQUFHLElBQUksc0JBQXNCLENBQUM7b0JBQzNDLE9BQU8sRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU87b0JBQ3JDLElBQUksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUk7b0JBQy9CLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7aUJBQzlDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUM7b0JBQ0gsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzFCLENBQUM7Z0JBQUMsT0FBTyxjQUFjLEVBQUUsQ0FBQztvQkFDeEIsTUFBTSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3ZCLE1BQU0sY0FBYyxDQUFDO2dCQUN2QixDQUFDO2dCQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1lBQzdCLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQztnQkFDSCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDckIsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztnQkFDM0IsQ0FBQztZQUNILENBQUM7WUFBQyxPQUFPLGdCQUFnQixFQUFFLENBQUM7Z0JBQzFCLE1BQU0sSUFBSSxjQUFjLENBQ3RCLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLEVBQ3pCLDRFQUE0RSxFQUM1RSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FDakIsQ0FBQztZQUNKLENBQUM7WUFDRCxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUVwQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDL0IsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQzNDLENBQUM7SUFDSCxDQUFDO0lBRUQsaUZBQWlGO0lBQ2pGLElBQVcsSUFBSTtRQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSyxDQUFDO0lBQ2xFLENBQUM7SUFFRCwyRUFBMkU7SUFDM0UsSUFBVyxhQUFhO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUM7SUFDOUIsQ0FBQztJQUVNLEtBQUssQ0FBQyxvQkFBb0IsQ0FDL0IsVUFBMkQ7UUFFM0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQzlDLFdBQVcsRUFBRSxTQUFTO1lBQ3RCLGVBQWUsRUFBRSxTQUFTO1NBQzNCLENBQUM7UUFFRixNQUFNLFVBQVUsR0FBMEM7WUFDeEQsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBUTtZQUM5RixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixNQUFNLEVBQUUsS0FBSztZQUNiLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVztZQUMzQixZQUFZLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDbEMsVUFBVSxFQUFFLEVBQUU7U0FDZixDQUFDO1FBRUYsT0FBTztZQUNMLEdBQUcsVUFBVTtZQUNiLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ2xDLENBQUM7SUFDSixDQUFDO0lBRU8sV0FBVztRQUNqQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBUSxDQUFDO0lBQzlGLENBQUM7SUFFTywyQkFBMkIsQ0FDakMsVUFHQyxFQUNELGFBQXFCO1FBRXJCLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLElBQUksYUFBYSxDQUFDO1FBQzFELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLFdBQVcsQ0FBQztRQUM3RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFFckIsTUFBTSxVQUFVLEdBQTRCO1lBQzFDLFFBQVE7WUFDUixJQUFJO1lBQ0osTUFBTTtZQUNOLE1BQU0sRUFBRSxVQUFVO1lBQ2xCLFVBQVU7WUFDVixXQUFXLEVBQUUsVUFBVSxDQUFDLFdBQVc7WUFDbkMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxlQUFlO1lBQzNDLFNBQVMsRUFBRSxVQUFVLENBQUMsV0FBVztZQUNqQyxZQUFZLEVBQUUsVUFBVSxDQUFDLGVBQWU7WUFDeEMsTUFBTTtZQUNOLEdBQUcsRUFBRSxNQUFNO1lBQ1gsR0FBRyxFQUFFO2dCQUNILFdBQVcsRUFBRSxRQUFRO2dCQUNyQixPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDckIsU0FBUyxFQUFFLE1BQU07Z0JBQ2pCLFNBQVMsRUFBRSxVQUFVO2dCQUNyQixnQkFBZ0IsRUFBRSxVQUFVLENBQUMsV0FBVztnQkFDeEMsb0JBQW9CLEVBQUUsVUFBVSxDQUFDLGVBQWU7Z0JBQ2hELFVBQVUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUMxQixpQkFBaUIsRUFBRSxVQUFVLENBQUMsV0FBVztnQkFDekMscUJBQXFCLEVBQUUsVUFBVSxDQUFDLGVBQWU7Z0JBQ2pELFVBQVUsRUFBRSxNQUFNO2FBQ25CO1NBQ0YsQ0FBQztRQUNGLElBQUksVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzdCLFVBQVUsQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQztRQUN0RCxDQUFDO1FBQ0QsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDekIsVUFBVSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO1FBQzlDLENBQUM7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRU8sdUJBQXVCO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7UUFDbkUsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsWUFBWSxDQUFDLGFBQXFCO1FBQzdDLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDdkUsT0FBTyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsQ0FBQztRQUNqQyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sMkJBQTJCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsa0JBQWtCLENBQzdCLFNBQTZCO1FBRTdCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQztZQUNILE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsb0JBQW9CLEVBQUU7Z0JBQ3JFLFVBQVUsRUFBRSxTQUFTLENBQUMsVUFBVTtnQkFDaEMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxXQUFXLElBQUksaUJBQWlCLEVBQUU7Z0JBQ3pELGVBQWUsRUFBRSxTQUFTLENBQUMsZUFBZSxJQUFJLHFCQUFxQixFQUFFO2dCQUNyRSxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNO2dCQUNyRCxHQUFHLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDbkUsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsMkJBQTJCLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sd0JBQXdCLENBQUMsMkJBQTJCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNyRSxDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxrQkFBa0IsQ0FDN0IsU0FBbUM7UUFFbkMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRTtnQkFDckUsR0FBRyxTQUFTO2dCQUNaLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU07YUFDdEQsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsMkJBQTJCLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sd0JBQXdCLENBQUMsMkJBQTJCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNyRSxDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxTQUFtQztRQUNqRSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLG9CQUFvQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSx3QkFBd0IsQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLDZCQUE2QixDQUN4QyxTQUE2QjtRQUU3QixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUM7WUFDSCxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLCtCQUErQixFQUFFO2dCQUNoRixVQUFVLEVBQUUsU0FBUyxDQUFDLFVBQVU7Z0JBQ2hDLFdBQVcsRUFBRSxTQUFTLENBQUMsV0FBVyxJQUFJLGlCQUFpQixFQUFFO2dCQUN6RCxlQUFlLEVBQUUsU0FBUyxDQUFDLGVBQWUsSUFBSSxxQkFBcUIsRUFBRTtnQkFDckUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTTthQUN0RCxDQUFDLENBQUM7WUFDSCxPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSx3QkFBd0IsQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLGlCQUFpQjtRQUM1QixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFTSxLQUFLLENBQUMseUJBQXlCLENBQUMsVUFFdEM7UUFDQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQixNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLDJCQUEyQixFQUFFO1lBQzVFLFVBQVUsRUFBRSxVQUFVLENBQUMsVUFBVTtTQUNsQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLEtBQUssQ0FBQyxzQkFBc0IsQ0FDakMsUUFBZ0M7UUFFaEMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUM7UUFDakQsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUM7UUFDdEQsSUFBSSxNQUFNLEtBQUssWUFBWSxFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLDRCQUE0QixDQUNwQyx5QkFBeUIsRUFDekIsc0RBQXNELENBQ3ZELENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxVQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN2RixNQUFNLElBQUksNEJBQTRCLENBQ3BDLHlCQUF5QixFQUN6QixnREFBZ0QsQ0FDakQsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDOUQsTUFBTSxJQUFJLDRCQUE0QixDQUNwQyw0QkFBNEIsRUFDNUIsaURBQWlELENBQ2xELENBQUM7UUFDSixDQUFDO1FBQ0QsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLFdBQVcsS0FBSyxTQUFTLENBQUM7UUFDMUQsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLENBQUMsZUFBZSxLQUFLLFNBQVMsQ0FBQztRQUNsRSxJQUFJLGNBQWMsS0FBSyxrQkFBa0IsRUFBRSxDQUFDO1lBQzFDLE1BQU0sSUFBSSw0QkFBNEIsQ0FDcEMseUJBQXlCLEVBQ3pCLDREQUE0RCxDQUM3RCxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksY0FBYyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEMsTUFBTSxJQUFJLDRCQUE0QixDQUNwQyx5QkFBeUIsRUFDekIsa0ZBQWtGLENBQ25GLENBQUM7UUFDSixDQUFDO1FBQ0QsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLGVBQWUsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQzVFLElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsd0JBQXdCLEVBQUU7Z0JBQ3ZFLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTtnQkFDL0IsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO2dCQUN2QixXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVcsSUFBSSx1QkFBdUIsRUFBRTtnQkFDOUQsZUFBZTtnQkFDZixNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNO2dCQUNwRCxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQzthQUN0RixDQUFDLENBQUM7WUFDSCxPQUFPLEVBQUUsR0FBRyxRQUFRLEVBQUUsZUFBZSxFQUFFLENBQUM7UUFDMUMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxVQUVuQztRQUNDLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsRUFBRTtnQkFDN0QsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO2FBQ3BDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxDQUFDO0lBQ0gsQ0FBQztJQUVELGtFQUFrRTtJQUMzRCxLQUFLLENBQUMscUJBQXFCLENBQ2hDLFVBQVUsR0FBNEIsRUFBRTtRQUV4QyxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsdUJBQXVCLEVBQUU7Z0JBQzVELEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDdEYsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLDRCQUE0QjtRQUN2QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLDhCQUE4QixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFTSxLQUFLLENBQUMseUJBQXlCLENBQUMsVUFFdEM7UUFDQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLDJCQUEyQixFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFTSxLQUFLLENBQUMsNEJBQTRCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsOEJBQThCLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVNLEtBQUssQ0FBQyxxQkFBcUIsQ0FDaEMsVUFBOEM7UUFFOUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyx1QkFBdUIsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRU0sS0FBSyxDQUFDLDBCQUEwQixDQUNyQyxVQUE4QztRQUU5QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLDRCQUE0QixFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFTSxLQUFLLENBQUMseUJBQXlCLENBQ3BDLFVBQXdEO1FBRXhELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsMkJBQTJCLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVNLEtBQUssQ0FBQyw4QkFBOEIsQ0FDekMsVUFBNkQ7UUFFN0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxnQ0FBZ0MsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRU0sS0FBSyxDQUFDLHNCQUFzQixDQUNqQyxVQUFxRDtRQUVyRCxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsd0JBQXdCLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDN0UsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLHNCQUFzQixDQUFDLFVBRW5DO1FBQ0MsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRU0sS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUE4QjtRQUN0RCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRU0sS0FBSyxDQUFDLFlBQVksQ0FDdkIsVUFBOEI7UUFFOUIsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sMkJBQTJCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsWUFBWSxDQUN2QixVQUE4QjtRQUU5QixJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSx3QkFBd0IsQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLHlCQUF5QixDQUNwQyxVQUF3RDtRQUV4RCxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsMkJBQTJCLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDaEYsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLDRCQUE0QjtRQUN2QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLDhCQUE4QixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFTSxLQUFLLENBQUMsMkJBQTJCLENBQUMsVUFFeEM7UUFDQyxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsNkJBQTZCLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDbEYsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLGVBQWU7UUFDMUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU0sS0FBSyxDQUFDLHdCQUF3QjtRQUNuQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLDBCQUEwQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFTSxLQUFLLENBQUMsbUJBQW1CO1FBQzlCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMscUJBQXFCLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVNLEtBQUssQ0FBQyxlQUFlO1FBQzFCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsV0FBaUM7UUFDL0QsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFTSxLQUFLLENBQUMsZ0JBQWdCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLEtBQUssQ0FBQyxrQkFBa0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLEtBQUssQ0FBQyxjQUFjLENBQ3pCLFVBQVUsR0FBMkIsRUFBRTtRQUV2QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUM1QixnQkFBZ0IsRUFDaEIsRUFBRSxFQUNGLFVBQVUsQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FDckYsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUztRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLE9BQU87Z0JBQ0wsRUFBRSxFQUFFLEtBQUs7Z0JBQ1QsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxVQUFVO2dCQUNuRSxnQkFBZ0IsRUFBRSxFQUFFO2dCQUNwQixJQUFJLEVBQUU7b0JBQ0osT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU87b0JBQ2pDLGVBQWUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTTtvQkFDcEQscUJBQXFCLEVBQUUsQ0FBQztvQkFDeEIscUJBQXFCLEVBQUUsQ0FBQztvQkFDeEIsOEJBQThCLEVBQUUsQ0FBQztvQkFDakMsOEJBQThCLEVBQUUsS0FBSztpQkFDdEM7Z0JBQ0QsV0FBVyxFQUFFLENBQUM7Z0JBQ2QsV0FBVyxFQUFFLENBQUM7Z0JBQ2QsVUFBVSxFQUFFLENBQUM7Z0JBQ2IsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRTtnQkFDM0Isc0JBQXNCLEVBQUUsQ0FBQztnQkFDekIsd0JBQXdCLEVBQUUsS0FBSztnQkFDL0IsNEJBQTRCLEVBQUUsSUFBSTtnQkFDbEMsOEJBQThCLEVBQUUsQ0FBQztnQkFDakMsZ0NBQWdDLEVBQUUsS0FBSztnQkFDdkMsNENBQTRDLEVBQUUsS0FBSzthQUNwRCxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsZUFBZSxDQUFDLEdBQzlFLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUNoQixJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDekUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxDQUFDO1lBQ3hELElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN2QixJQUFJLENBQUMsNEJBQTRCLEVBQUU7U0FDcEMsQ0FBQyxDQUFDO1FBQ0wsT0FBTztZQUNMLEVBQUUsRUFBRSxJQUFJO1lBQ1IsT0FBTyxFQUFFLElBQUk7WUFDYixnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO1lBQ3hDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFO1lBQzlDLElBQUksRUFBRTtnQkFDSixPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTztnQkFDakMsZUFBZSxFQUFFLFdBQVcsQ0FBQyxNQUFNO2dCQUNuQyxxQkFBcUIsRUFBRSxPQUFPLENBQUMsTUFBTTtnQkFDckMscUJBQXFCLEVBQUUsaUJBQWlCLENBQUMsZUFBZTtnQkFDeEQsOEJBQThCLEVBQUUsaUJBQWlCLENBQUMsY0FBYztnQkFDaEUsOEJBQThCLEVBQUUsaUJBQWlCLENBQUMsU0FBUzthQUM1RDtZQUNELFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixXQUFXLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtZQUNuQyxVQUFVLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtZQUNuQyxPQUFPO1lBQ1Asc0JBQXNCLEVBQUUsZUFBZSxDQUFDLE9BQU87WUFDL0Msd0JBQXdCLEVBQUUsZUFBZSxDQUFDLFNBQVM7WUFDbkQsNEJBQTRCLEVBQUUsZUFBZSxDQUFDLGFBQWE7WUFDM0QsOEJBQThCLEVBQUUsZUFBZSxDQUFDLHNCQUFzQjtZQUN0RSxnQ0FBZ0MsRUFBRSxlQUFlLENBQUMsd0JBQXdCO1lBQzFFLDRDQUE0QyxFQUMxQyxlQUFlLENBQUMsb0NBQW9DO1lBQ3RELHFCQUFxQixFQUFFLGVBQWUsQ0FBQyxNQUFNO1lBQzdDLEdBQUcsQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEtBQUssU0FBUztnQkFDN0MsQ0FBQyxDQUFDLEVBQUU7Z0JBQ0osQ0FBQyxDQUFDLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLHVCQUF1QixFQUFFLENBQUM7U0FDaEUsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLLENBQUMsVUFBVTtRQUNyQixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN0QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3hFLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQzlDLE9BQU87WUFDTCxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7WUFDL0IsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1lBQy9CLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtZQUM3QixtQkFBbUIsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWU7WUFDaEQscUJBQXFCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUI7WUFDeEQsY0FBYztZQUNkLGNBQWMsRUFBRTtnQkFDZCwwREFBMEQ7Z0JBQzFELDBDQUEwQztnQkFDMUMsK0JBQStCLE1BQU0sQ0FBQyxXQUFXLEVBQUU7Z0JBQ25ELDBEQUEwRDtnQkFDMUQsMENBQTBDO2dCQUMxQywrQkFBK0IsTUFBTSxDQUFDLFdBQVcsRUFBRTtnQkFDbkQsaUVBQWlFO2dCQUNqRSxnREFBZ0Q7Z0JBQ2hELHFDQUFxQyxNQUFNLENBQUMsVUFBVSxFQUFFO2dCQUN4RCxzRkFBc0Y7Z0JBQ3RGLHFEQUFxRDtnQkFDckQsMENBQTBDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUU7Z0JBQzdFLDZFQUE2RTtnQkFDN0UscURBQXFEO2dCQUNyRCwwQ0FBMEMsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtnQkFDN0Usa0dBQWtHO2dCQUNsRywrREFBK0Q7Z0JBQy9ELG9EQUFvRCxNQUFNLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFO2dCQUNoRywwRkFBMEY7Z0JBQzFGLDhEQUE4RDtnQkFDOUQsbURBQW1ELE1BQU0sQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN2Ryw0REFBNEQ7Z0JBQzVELDRDQUE0QztnQkFDNUMsaUNBQWlDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3pELDRFQUE0RTtnQkFDNUUsc0RBQXNEO2dCQUN0RCwyQ0FBMkMsS0FBSyxFQUFFLDJCQUEyQixJQUFJLENBQUMsRUFBRTtnQkFDcEYsMEZBQTBGO2dCQUMxRixtREFBbUQ7Z0JBQ25ELHdDQUF3QyxLQUFLLEVBQUUsb0JBQW9CLElBQUksQ0FBQyxFQUFFO2dCQUMxRSxtRkFBbUY7Z0JBQ25GLGlEQUFpRDtnQkFDakQsc0NBQXNDLEtBQUssRUFBRSxzQkFBc0IsSUFBSSxDQUFDLEVBQUU7YUFDM0UsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ2IsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksSUFBSTtRQUNULElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMxQixDQUFDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtZQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNyRCxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztZQUMvQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxLQUFLLENBQUMsWUFBWTtRQUN4QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QiwyRUFBMkU7WUFDM0UsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUM3QixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6RSxDQUFDO1lBQ0QsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsQ0FBQztZQUM1QyxNQUFNLElBQUksS0FBSyxDQUNiLDJEQUEyRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxFQUFFLENBQ3BHLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lossless.org/objectstorage",
3
- "version": "11.1.0",
3
+ "version": "11.2.0",
4
4
  "private": false,
5
5
  "description": "A Node.js TypeScript package to create a local S3-compatible storage server using mapped local directories for development and testing purposes.",
6
6
  "main": "dist_ts/index.js",
package/readme.md CHANGED
@@ -628,7 +628,8 @@ to the prefix (its folder marker) is covered.
628
628
  (see [Supported S3 Operations](#supported-s3-operations)), so a parameter
629
629
  the operation does not implement gets `NotImplemented` (501).
630
630
  - **DeleteObjects.** Every member is checked on its own: covered keys are
631
- deleted, and the others get a per-key `AccessDenied`.
631
+ deleted, and the others get a per-key `AccessDenied`, as does every member
632
+ that names a `VersionId`.
632
633
  - **Listings.** ListObjects V1, ListObjectsV2, ListObjectVersions and
633
634
  ListMultipartUploads need a `prefix` parameter that is covered. A missing or
634
635
  wider prefix is refused, never clamped.
@@ -636,7 +637,8 @@ to the prefix (its folder marker) is covered.
636
637
  - ListBuckets returns only the credential's bucket.
637
638
  - HeadBucket and `GET /{bucket}?location` work on that bucket.
638
639
  - Any other bucket-level query (`?acl`, `?versioning`, `?lifecycle`, …) is
639
- refused with `AccessDenied`, and so is any repeated query parameter.
640
+ refused with `AccessDenied`, and so is any repeated query parameter, so a
641
+ prefix credential can neither read nor change a bucket's versioning.
640
642
  - Creating or deleting buckets and bucket policy operations are refused.
641
643
  - **Policies.** The scope check runs before bucket policies, so a policy Allow
642
644
  (including `Principal: "*"`) never widens a prefix credential. A policy Deny
@@ -935,8 +937,10 @@ Absent-bucket fenced ensure removes any residual policy before creating the new
935
937
  resource; existing-bucket ensure preserves policy and object data. Once a bucket
936
938
  has durable fence history, legacy `createBucket()`, `createBucketTenant()`,
937
939
  `rotateBucketTenantCredentials()`, `deleteBucketTenant()`, and unfenced
938
- `importBucket()` mutations fail with `EFENCE_REQUIRED`. Use fenced ensure,
939
- exact import, and exact delete for its lifecycle.
940
+ `importBucket()` mutations fail with `EFENCE_REQUIRED`. S3 `CreateBucket` and
941
+ `DeleteBucket` on such a bucket get `InvalidBucketState` (`409`), whose message
942
+ is the `EFENCE_REQUIRED: …` text. Use fenced ensure, exact import, and exact
943
+ delete for its lifecycle.
940
944
 
941
945
  `replaceCredentials()` is a trusted process-local administrative override, not
942
946
  a fenced lifecycle API. If it changes exact-owned credential material, completed
@@ -952,7 +956,8 @@ const metrics = await storage.getMetrics();
952
956
 
953
957
  - `getHealth()` reports running state, storage directory and pool observation, auth enabled state, credential counts, bucket count, object count, total bytes, and cluster health.
954
958
  - `getHealth().auth` also reports `prefixCredentialCount` (live prefix credentials), `prefixCredentialTombstoneCount` (unexpired revocations) and `prefixCredentialStoreAvailable` (`false` while the prefix credential file is unreadable and every prefix credential is refused).
955
- - `getMetrics()` returns numeric counters and a Prometheus text snippet for bucket, object, byte, tenant credential, prefix credential (`objectstorage_prefix_credentials_total`, `objectstorage_prefix_credential_tombstones_total`, `objectstorage_prefix_credential_store_available`), and cluster-enabled metrics.
959
+ - `getMetrics()` returns numeric counters and a Prometheus text snippet for bucket, object, byte, tenant credential, prefix credential (`objectstorage_prefix_credentials_total`, `objectstorage_prefix_credential_tombstones_total`, `objectstorage_prefix_credential_store_available`), version (`objectstorage_noncurrent_versions_total`, `objectstorage_noncurrent_bytes_total`, `objectstorage_delete_markers_total`) and cluster-enabled metrics.
960
+ - `getHealth().stampClockAheadOfWallMs` is present while version commit times run ahead of the wall clock (a wall clock that went backwards, see [Bucket versioning](#bucket-versioning)).
956
961
  - `getHealth()` reads the prefix credential figures through the `getPrefixCredentialStatus` IPC command (no TypeScript method of its own), and `getMetrics()` derives its prefix metrics from `getHealth()`. The command takes no parameters and returns `{ available, credentialCount, tombstoneCount }`: counts and the store state only, never an access key ID, secret, bucket or prefix.
957
962
 
958
963
  ## Runtime Stats
@@ -973,6 +978,11 @@ interface IBucketSummary {
973
978
  objectCount: number;
974
979
  totalSizeBytes: number;
975
980
  creationDate?: number;
981
+ // Versioned buckets only:
982
+ versioning?: 'Enabled' | 'Suspended';
983
+ noncurrentVersionCount?: number;
984
+ noncurrentBytes?: number;
985
+ deleteMarkerCount?: number;
976
986
  }
977
987
 
978
988
  interface IStorageLocationSummary {
@@ -990,9 +1000,22 @@ interface IStorageStats {
990
1000
  buckets: IBucketSummary[];
991
1001
  storageDirectory: string;
992
1002
  storageLocations?: IStorageLocationSummary[];
1003
+ // With at least one versioned bucket:
1004
+ totalNoncurrentVersionCount?: number;
1005
+ totalNoncurrentBytes?: number;
1006
+ totalDeleteMarkerCount?: number;
1007
+ stampClockAheadOfWallMs?: number;
993
1008
  }
994
1009
  ```
995
1010
 
1011
+ - Object counts and bytes count current objects only. A versioned bucket also
1012
+ reports its noncurrent data versions and their payload bytes
1013
+ (`noncurrentVersionCount`, `noncurrentBytes`) and its delete markers, current
1014
+ and noncurrent (`deleteMarkerCount`); the stats totals add them up, and
1015
+ `getMetrics()` exports them as `objectstorage_noncurrent_versions_total`,
1016
+ `objectstorage_noncurrent_bytes_total` and `objectstorage_delete_markers_total`.
1017
+ Stored capacity is current plus noncurrent bytes.
1018
+
996
1019
  - `bucketCount`, `totalObjectCount`, `totalStorageBytes`, and per-bucket totals are logical object stats maintained by the Rust runtime. They count object payload bytes, not sidecar files or erasure-coded shard overhead.
997
1020
  - objectstorage initializes these values from native on-disk state at startup, then keeps them in memory and updates them when bucket/object mutations succeed. Stats reads do not issue S3 `ListObjects` or rescan every object.
998
1021
  - Values are exact for mutations performed through objectstorage after startup. Direct filesystem edits outside objectstorage are not watched; restart the server to resync.
@@ -1150,7 +1173,7 @@ current object, and `GET ?versioning` answered with an object listing.
1150
1173
  | ListObjectVersions | `GET /{bucket}?versions` | `prefix`, `delimiter`, `max-keys`, `key-marker`, `version-id-marker`, `encoding-type` |
1151
1174
  | ListMultipartUploads | `GET /{bucket}?uploads` | `prefix`, `encoding-type` |
1152
1175
  | GetBucketLocation | `GET /{bucket}?location` | none |
1153
- | GetBucketVersioning | `GET /{bucket}?versioning` | none |
1176
+ | GetBucketVersioning, PutBucketVersioning | `GET`, `PUT /{bucket}?versioning` | none (PUT: standalone only, `NotImplemented` in cluster mode) |
1154
1177
  | GetBucketLifecycleConfiguration | `GET /{bucket}?lifecycle` | none |
1155
1178
  | GetBucketPolicy, PutBucketPolicy, DeleteBucketPolicy | `GET`, `PUT`, `DELETE /{bucket}?policy` | none |
1156
1179
  | DeleteObjects | `POST /{bucket}?delete` | none |
@@ -1188,9 +1211,129 @@ override such as `response-content-type=text/html` would let a public object
1188
1211
  serve script from the storage origin; a presigned URL is such a request. With
1189
1212
  auth disabled the overrides apply.
1190
1213
 
1191
- Versioning is never enabled on a bucket:
1214
+ ### Bucket versioning
1215
+
1216
+ Standalone buckets support S3 versioning exactly as S3 defines it: a bucket is
1217
+ unversioned until `PutBucketVersioning` sets `Enabled` or `Suspended`, and it
1218
+ never goes back to unversioned. New buckets are unversioned. A bucket that was
1219
+ never versioned behaves exactly as before versioning existed, on disk and on
1220
+ the wire: no version ids, no `x-amz-version-id` header, `null` as its only
1221
+ version id. In cluster mode `PUT ?versioning` answers `NotImplemented` (501),
1222
+ so every cluster bucket stays unversioned for now.
1223
+
1224
+ - **Version ids.** A version written while versioning is `Enabled` gets a
1225
+ lowercase UUID as its version id. Versions written before versioning was
1226
+ enabled, and every version written while it is `Suspended`, are the key's
1227
+ `null` version; a key has at most one.
1228
+ - **Enabled.** PUT, CopyObject and CompleteMultipartUpload add a new current
1229
+ version and keep the previous one as noncurrent; the response carries
1230
+ `x-amz-version-id`. A DELETE without a version id adds a delete marker as
1231
+ the current version (also for a key with no object, as S3 does): GET and
1232
+ HEAD then answer `NoSuchKey` (404) with `x-amz-delete-marker: true` and the
1233
+ marker's `x-amz-version-id`, and ListObjects no longer lists the key. The
1234
+ DELETE response carries `x-amz-delete-marker: true` and the marker's id.
1235
+ - **Suspended.** Writes create the `null` version and replace any previous
1236
+ `null` version of the key, wherever it is in the history; versions with ids
1237
+ stay. A DELETE replaces the `null` version with a `null` delete marker.
1238
+ Responses carry `x-amz-version-id: null`.
1239
+ - **By version id.** GET, HEAD and DELETE take `?versionId=` (an id or
1240
+ `null`). Reading a delete marker by its id answers `MethodNotAllowed` (405)
1241
+ with `x-amz-delete-marker: true`, its id and its `Last-Modified`. DELETE with
1242
+ a version id removes that version for good; when it was the current one, the
1243
+ next newest version becomes current again (a delete marker, or the object it
1244
+ covered). A well-formed id that names no version of the key is
1245
+ `NoSuchVersion` (404), also on DELETE; a malformed one is `InvalidArgument`.
1246
+ DeleteObjects accepts a `VersionId` per object and reports `VersionId`,
1247
+ `DeleteMarker` and `DeleteMarkerVersionId` per deleted entry.
1248
+ - **Copies.** A copy source may name a version (`?versionId=` after the
1249
+ source); `x-amz-copy-source-if-*` apply to that version, and the response
1250
+ carries `x-amz-copy-source-version-id` (and `x-amz-version-id` for the new
1251
+ version in a versioned bucket). A delete marker as a copy source is
1252
+ `InvalidRequest` (400); a source whose current version is a delete marker is
1253
+ `NoSuchKey`. UploadPartCopy works the same way.
1254
+ - **Conditional requests.** `If-None-Match: *` on PUT and
1255
+ CompleteMultipartUpload succeeds when the key has no current version or its
1256
+ current version is a delete marker. `If-Match` on DELETE is evaluated against
1257
+ the current version, also with a version id; a current delete marker fails
1258
+ it (412).
1259
+ - **ListObjectVersions** lists every version and delete marker in key order,
1260
+ each key newest first, with `IsLatest` on the current one; versions and
1261
+ delete markers, and common prefixes, all count against `max-keys`. A
1262
+ truncated page carries `NextKeyMarker` and, after a version,
1263
+ `NextVersionIdMarker`; `key-marker` alone resumes after every version of
1264
+ that key, with `version-id-marker` after that version of it. A
1265
+ `version-id-marker` naming a version that was deleted between the pages
1266
+ resumes at that key's newest remaining version: no version of the key is
1267
+ skipped, but versions the previous page already listed are listed again.
1268
+ `Last-Modified` of a version is its commit time.
1269
+ - **Permissions.** `PutBucketVersioning` is authorized as
1270
+ `s3:PutBucketVersioning`, `GetBucketVersioning` as `s3:GetBucketVersioning`,
1271
+ ListObjectVersions as `s3:ListBucketVersions`; a `versionId` (also `null`,
1272
+ also in DeleteObjects) as `s3:GetObjectVersion` or `s3:DeleteObjectVersion`.
1273
+ Only root credentials may change a bucket's versioning: bucket tenant
1274
+ credentials get `AccessDenied` for `PutBucketVersioning` (they may read it
1275
+ with `GetBucketVersioning`, list versions, and read and delete versions in
1276
+ their bucket), because the operator's bucket flows (export, import, fenced
1277
+ replacement and deletion, migrations) do not carry version history and
1278
+ refuse versioned buckets. This lifts once a format that carries history
1279
+ exists. Prefix credentials never name a version and cannot change
1280
+ versioning; they can list versions inside their prefix, and their DELETEs
1281
+ add delete markers.
1282
+ - **Not combined with.** A bucket with engine-enforced immutable retention
1283
+ refuses versioning, and a versioned bucket refuses retention
1284
+ (`InvalidBucketState`, 409). Bucket export and import, fenced bucket
1285
+ replacement and deletion, and bucket migrations refuse versioned buckets,
1286
+ because none of them carries version history; a migration whose source
1287
+ became versioned after it was created cannot be sealed
1288
+ (`EMIGRATION_VERSIONED`, the source stays active). `MfaDelete` is not
1289
+ implemented (501). A versioned bucket is empty for DeleteBucket only once
1290
+ every version and delete marker is deleted (`BucketNotEmpty` before);
1291
+ deleting it forgets its versioning, so a new bucket of the same name starts
1292
+ unversioned. `deleteBucketTenant` deletes every version with the bucket.
1293
+ - **Requests by version wait for writes.** Every request whose answer depends
1294
+ on a bucket's versioning state reads that state, and the history, under the
1295
+ bucket's gate: DELETE and each DeleteObjects member, GET and HEAD with a
1296
+ version id (also `null` on a bucket that was never versioned), a copy or
1297
+ UploadPartCopy source with a version id, the delete-marker answer of a key
1298
+ without a current object, and ListObjectVersions. A request that arrives
1299
+ while `PutBucketVersioning` or a write to the bucket is in progress is
1300
+ therefore served by the state that change leaves. A write holds the gate
1301
+ while it receives its body, so these requests, like every listing, wait
1302
+ for uploads to the same bucket that are in progress: measured with one
1303
+ 1 GiB upload into the bucket, a GET by version id issued during it
1304
+ answered once the upload had finished, after 2.6 s at full loopback speed
1305
+ and after 20.3 s at 50 MB/s, while GETs without a version id stayed at a
1306
+ 1.6 ms median (3.5 ms p99). GET and HEAD without a version id never wait.
1307
+ - **Startup.** A standalone engine checks every version chain once when it
1308
+ starts, reading every version's record and opening its payload (and
1309
+ repairing what a crash left), and takes the bucket counters from that
1310
+ check. Startup time therefore grows with the number of stored versions.
1311
+ Measured with 1,000,000 versions (100,000 keys × 10) on 8 CPUs with a
1312
+ 12 GiB memory limit, on a KVM host whose page cache did not keep the root
1313
+ between starts: the first start after writing them took 346 s; six clean
1314
+ starts took 127 to 264 s (127, 145, 150, 193, 203 and 264 s, median about
1315
+ 170 s); three starts after a SIGKILL during writes by 32 concurrent
1316
+ writers took 215 to 256 s. A root on which no bucket was ever versioned
1317
+ pays nothing for this and starts exactly as before. `start()` waits for as
1318
+ long as startup takes; once recovery passes 10 s, the engine logs its
1319
+ progress (chains, versions, elapsed time) to the host's stderr every 10 s.
1320
+ - **Commit times.** Version commit times come from one stamp clock per
1321
+ engine: `max(wall clock, last stamp + monotonic time since)`, persisted to
1322
+ `.smartstorage/versioning/stamp-clock.json` by every `PutBucketVersioning`
1323
+ that changes a bucket's state (before the state itself, and before the
1324
+ response), every 60 seconds and on a graceful stop. Within a process, a wall clock
1325
+ that jumps back never produces a commit time earlier than true time. After
1326
+ a restart with the wall clock behind, commit times can lag true time by at
1327
+ most the downtime plus 60 seconds (a suspended host counts as downtime). A
1328
+ forward jump that is corrected later keeps commit times ahead by the jump
1329
+ for the life of the process. While commit times run ahead of the wall clock,
1330
+ `getStorageStats()` and `getHealth()` report `stampClockAheadOfWallMs`.
1331
+ Within a key, commit times never go backwards, and a version becomes
1332
+ noncurrent at its successor's commit time.
1333
+
1334
+ The reads of an unversioned bucket keep their 11.0.0 semantics:
1192
1335
  - `GET ?versioning` returns the empty `<VersioningConfiguration/>` of a bucket
1193
- that was never versioned. `PUT ?versioning` is `NotImplemented`.
1336
+ that was never versioned.
1194
1337
  - `GET ?lifecycle` returns `NoSuchLifecycleConfiguration` (404). `PUT` and
1195
1338
  `DELETE ?lifecycle` are `NotImplemented`.
1196
1339
  - `GET ?versions` lists every current object as its S3 null version
@@ -1198,11 +1341,12 @@ Versioning is never enabled on a bucket:
1198
1341
  `key-marker` and `version-id-marker`. A truncated page returns the last key
1199
1342
  or common prefix as `NextKeyMarker`, plus `NextVersionIdMarker` `null` after a
1200
1343
  key. A `version-id-marker` needs a `key-marker`.
1201
- - `versionId` on GET, HEAD and DELETE, and a `?versionId=` after the copy source
1202
- of CopyObject and UploadPartCopy: `null` is the current object. A
1203
- well-formed id (a lowercase UUID) names no version and returns
1204
- `NoSuchVersion` (404; `NoSuchBucket` when the bucket is missing). Anything
1205
- else, the empty string included, returns `InvalidArgument` (400). A `?`
1344
+ - `versionId` on GET, HEAD and DELETE, a `VersionId` of a DeleteObjects
1345
+ member, and a `?versionId=` after the copy source of CopyObject and
1346
+ UploadPartCopy: `null` is the current object. A well-formed id (a lowercase
1347
+ UUID) names no version and returns `NoSuchVersion` (404; `NoSuchBucket` when
1348
+ the bucket is missing). Anything else, the empty string included, returns
1349
+ `InvalidArgument` (400); in DeleteObjects both fail only their member. A `?`
1206
1350
  inside a copy-source key must be encoded as `%3F`.
1207
1351
  - These reads are authorized as `s3:GetBucketVersioning`,
1208
1352
  `s3:GetLifecycleConfiguration` and `s3:ListBucketVersions`. A `versionId`,
@@ -1311,6 +1455,12 @@ durable cluster metadata. Descriptor-confined standalone startup reclaims
1311
1455
  abandoned private object materializations from interrupted create-only, copy,
1312
1456
  or multipart publication without removing an already published hard link.
1313
1457
 
1458
+ `CompleteMultipartUpload` refuses, in standalone and cluster mode, a part list
1459
+ that names a part that was never uploaded or an ETag that does not match the
1460
+ uploaded part with `InvalidPart` (`400`), and a part listed twice with
1461
+ `InvalidPartOrder` (`400`). The upload stays open, so a completion with the
1462
+ correct parts still succeeds.
1463
+
1314
1464
  Standalone `DeleteObject` also honors `If-Match: *` and comma-separated strong
1315
1465
  ETags. It compares the current ETag and deletes inside the same bucket mutation
1316
1466
  gate used by PUT, COPY, and multipart completion. A mismatch returns the S3
@@ -1785,6 +1935,10 @@ Spawn the Rust binary and start the HTTP server. Concurrent starts join the same
1785
1935
  attempt; starting an already running instance succeeds without restarting it.
1786
1936
  A start is rejected while shutdown or unconfirmed startup cleanup remains
1787
1937
  pending. After completed shutdown, an explicit start begins a new lifecycle.
1938
+ A start has no time limit, because startup grows with the stored data (a
1939
+ standalone root with bucket versions checks every version chain); it still
1940
+ fails at once when the engine process exits. A long start shows its progress
1941
+ on the host's stderr, where every engine log line is forwarded.
1788
1942
 
1789
1943
  #### `stop(): Promise<void>`
1790
1944
 
@@ -2148,6 +2302,8 @@ those versions cannot read the canonical v2 objects.
2148
2302
  | AbortMultipartUpload | `DELETE /{bucket}/{key}?uploadId` | |
2149
2303
  | ListMultipartUploads | `GET /{bucket}?uploads` | Optional `prefix` |
2150
2304
  | GetBucketLocation | `GET /{bucket}?location` | Returns `server.region`; an empty constraint for `us-east-1` |
2305
+ | GetBucketVersioning, PutBucketVersioning | `GET`, `PUT /{bucket}?versioning` | Standalone; see [Bucket versioning](#bucket-versioning) |
2306
+ | ListObjectVersions | `GET /{bucket}?versions` | Every version and delete marker of a versioned bucket |
2151
2307
  | GetBucketPolicy | `GET /{bucket}?policy` | |
2152
2308
  | PutBucketPolicy | `PUT /{bucket}?policy` | |
2153
2309
  | DeleteBucketPolicy | `DELETE /{bucket}?policy` | |
@@ -2228,8 +2384,47 @@ prefix credentials must supply one inside their prefix.
2228
2384
  # key leaf appears only with the complete payload
2229
2385
  .smartstorage/credentials.json # Runtime and bucket tenant credentials (0600)
2230
2386
  .smartstorage/prefix-credentials.json # Prefix credentials and revocations (0600)
2387
+ .smartstorage/versioning/v1/{bucket}.json
2388
+ # Versioning state of a versioned bucket
2389
+ .smartstorage/versioning/stamp-clock.json
2390
+ # Persisted floor of the version stamp clock
2391
+ .smartstorage/versions/{bucket}/{whole-key-hex-frames}/
2392
+ {seq:016x}-{generation} # Record of a noncurrent version or delete marker
2393
+ {seq:016x}-{generation}.object # Payload of a noncurrent data version
2231
2394
  ```
2232
2395
 
2396
+ Bucket versioning keeps the layout above for current objects and adds a
2397
+ format that later standalone engines read unchanged:
2398
+ - `.smartstorage/versioning/v1/{bucket}.json` is
2399
+ `{"format":"smartstorage.bucket-versioning.v1","bucket":…,"status":"Enabled"|"Suspended"}`.
2400
+ A bucket without it was never versioned.
2401
+ - The current object of a key stays at its key path. A payload written while
2402
+ its bucket is versioned ends in a trailer record of schema 2 whose `version`
2403
+ holds its generation UUID, whether it is the null version, its sequence
2404
+ number and its commit time in epoch milliseconds; payloads written before
2405
+ keep schema 1 and are the key's null version with sequence 0.
2406
+ - Every other version lives in the key's chain directory below
2407
+ `.smartstorage/versions/{bucket}/`, whose frame directories are the same
2408
+ hexadecimal frames as below `.smartstorage-objects-v2`. A record
2409
+ `{seq:016x}-{generation}` (JSON, `"format":"smartstorage.object-version.v1"`,
2410
+ with the key, sequence, generation, null flag, delete marker flag, commit
2411
+ time, the time it became noncurrent, payload length, ETag and metadata)
2412
+ exists for every noncurrent version and every delete marker; a data version
2413
+ also has `{seq:016x}-{generation}.object`, the payload inode it had while it
2414
+ was current. Sequence order is chain order; the version id is the generation
2415
+ UUID, or `null`.
2416
+ - A payload is linked into the chain before its record exists and unlinked
2417
+ after its record is gone. Startup recovery brings every chain to a
2418
+ consistent state after a crash (it removes payloads without a record,
2419
+ finishes or undoes an interrupted change of the current version, clears the
2420
+ noncurrent time of a delete marker that is current again and keeps one null
2421
+ version per key) and refuses to start on a record that is corrupt or misses
2422
+ its payload, on a chain directory with a foreign entry, and on versions of a
2423
+ bucket without versioning state.
2424
+ - Engines before 11.2.0 cannot read a payload with a schema-2 trailer: a
2425
+ standalone root on which any bucket was ever versioned (`PutBucketVersioning`
2426
+ with `Enabled` or `Suspended`) cannot be rolled back.
2427
+
2233
2428
  Rolling a standalone root back from 10.7.0 or later to 8.0.3–10.6.0: a crash
2234
2429
  between staging and publication of a PUT, CopyObject or CompleteMultipartUpload
2235
2430
  can leave a staged leaf directory
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@lossless.org/objectstorage',
6
- version: '11.1.0',
6
+ version: '11.2.0',
7
7
  description: 'A Node.js TypeScript package to create a local S3-compatible storage server using mapped local directories for development and testing purposes.'
8
8
  }
package/ts/index.ts CHANGED
@@ -242,11 +242,23 @@ export interface IObjectStorageConfig {
242
242
  * Logical bucket stats maintained by the Rust runtime.
243
243
  * Values are initialized from native storage on startup and updated on objectstorage mutations.
244
244
  */
245
+ /** A versioned bucket's S3 versioning status; a bucket that was never versioned has none. */
246
+ export type TBucketVersioningStatus = 'Enabled' | 'Suspended';
247
+
245
248
  export interface IBucketSummary {
246
249
  name: string;
250
+ /** Current objects; noncurrent versions and delete markers are counted below. */
247
251
  objectCount: number;
248
252
  totalSizeBytes: number;
249
253
  creationDate?: number;
254
+ /** Present only for a versioned bucket (standalone), and so are the counters below. */
255
+ versioning?: TBucketVersioningStatus;
256
+ /** Noncurrent data versions. */
257
+ noncurrentVersionCount?: number;
258
+ /** Payload bytes of the noncurrent data versions. */
259
+ noncurrentBytes?: number;
260
+ /** Delete markers, current and noncurrent. */
261
+ deleteMarkerCount?: number;
250
262
  }
251
263
 
252
264
  /**
@@ -375,6 +387,15 @@ export interface IStorageStats {
375
387
  buckets: IBucketSummary[];
376
388
  storageDirectory: string;
377
389
  storageLocations?: IStorageLocationSummary[];
390
+ /** Totals over the versioned buckets; absent without one. */
391
+ totalNoncurrentVersionCount?: number;
392
+ totalNoncurrentBytes?: number;
393
+ totalDeleteMarkerCount?: number;
394
+ /**
395
+ * How far version stamps run ahead of the wall clock, after the wall clock
396
+ * went backwards (or a forward jump was corrected); absent when they do not.
397
+ */
398
+ stampClockAheadOfWallMs?: number;
378
399
  }
379
400
 
380
401
  export interface IStorageStopResult {
@@ -1113,6 +1134,8 @@ export interface IObjectStorageHealth {
1113
1134
  resourcePublicationHoldSupported: boolean;
1114
1135
  resourcePublicationHoldRequiresExternalDrain: false;
1115
1136
  resourceFencingReason?: string;
1137
+ /** See `IStorageStats.stampClockAheadOfWallMs`. */
1138
+ stampClockAheadOfWallMs?: number;
1116
1139
  }
1117
1140
 
1118
1141
  export const objectStorageResourceFenceErrorCodes = [
@@ -1426,6 +1449,14 @@ const DEFAULT_CONFIG: IObjectStorageConfig = {
1426
1449
  // Keep this aligned with the bounded Rust management-line reader.
1427
1450
  const MAXIMUM_MANAGEMENT_PAYLOAD_BYTES = 144 * 1024 * 1024;
1428
1451
 
1452
+ // The `start` command's timeout: the largest delay Node's setTimeout honours
1453
+ // (2^31 - 1 ms, about 24.8 days; Node clamps any larger delay, so also
1454
+ // Number.MAX_SAFE_INTEGER, to 1 ms). Startup recovers every version chain and
1455
+ // scans every current object, so it grows with the stored data and has no
1456
+ // fixed bound; an engine that dies during startup still rejects `start` at
1457
+ // once, through the bridge's exit detection.
1458
+ const START_COMMAND_TIMEOUT_MS = 2_147_483_647;
1459
+
1429
1460
  function assertExactMountedDirectory(directoryArg: string, fieldArg: string): void {
1430
1461
  if (
1431
1462
  directoryArg.length === 0 ||
@@ -1848,6 +1879,12 @@ export class ObjectStorage {
1848
1879
  console.error(`ruststorage engine exited unexpectedly (code: ${code}, signal: ${signal}).`);
1849
1880
  }
1850
1881
  });
1882
+ // The engine logs (warnings, errors, startup recovery progress) to its
1883
+ // stderr; forward every line verbatim to the host's stderr, as an
1884
+ // inherited stderr would.
1885
+ this.bridge.on('stderr', (line: string) => {
1886
+ console.error(line);
1887
+ });
1851
1888
  }
1852
1889
 
1853
1890
  public start(): Promise<void> {
@@ -1886,7 +1923,11 @@ export class ObjectStorage {
1886
1923
  if (!spawned) {
1887
1924
  throw new Error('Failed to spawn ruststorage binary. Make sure it is compiled (pnpm build).');
1888
1925
  }
1889
- const result = await this.bridge.sendCommand('start', { config: this.config });
1926
+ const result = await this.bridge.sendCommand(
1927
+ 'start',
1928
+ { config: this.config },
1929
+ { timeoutMs: START_COMMAND_TIMEOUT_MS },
1930
+ );
1890
1931
  if (!Number.isInteger(result.port) || result.port < 1 || result.port > 65535) {
1891
1932
  throw new Error('Storage engine did not report a valid bound TCP port.');
1892
1933
  }
@@ -2422,11 +2463,15 @@ export class ObjectStorage {
2422
2463
  resourcePublicationHoldRequiresExternalDrain:
2423
2464
  resourceFencing.publicationHoldRequiresExternalDrain,
2424
2465
  resourceFencingReason: resourceFencing.reason,
2466
+ ...(stats.stampClockAheadOfWallMs === undefined
2467
+ ? {}
2468
+ : { stampClockAheadOfWallMs: stats.stampClockAheadOfWallMs }),
2425
2469
  };
2426
2470
  }
2427
2471
 
2428
2472
  public async getMetrics(): Promise<IObjectStorageMetrics> {
2429
2473
  const health = await this.getHealth();
2474
+ const stats = health.running ? await this.getStorageStats() : undefined;
2430
2475
  const clusterEnabled = health.cluster.enabled;
2431
2476
  return {
2432
2477
  bucketCount: health.bucketCount,
@@ -2460,6 +2505,15 @@ export class ObjectStorage {
2460
2505
  '# HELP objectstorage_cluster_enabled Cluster mode enabled.',
2461
2506
  '# TYPE objectstorage_cluster_enabled gauge',
2462
2507
  `objectstorage_cluster_enabled ${clusterEnabled ? 1 : 0}`,
2508
+ '# HELP objectstorage_noncurrent_versions_total Noncurrent object versions.',
2509
+ '# TYPE objectstorage_noncurrent_versions_total gauge',
2510
+ `objectstorage_noncurrent_versions_total ${stats?.totalNoncurrentVersionCount ?? 0}`,
2511
+ '# HELP objectstorage_noncurrent_bytes_total Payload bytes of noncurrent object versions.',
2512
+ '# TYPE objectstorage_noncurrent_bytes_total gauge',
2513
+ `objectstorage_noncurrent_bytes_total ${stats?.totalNoncurrentBytes ?? 0}`,
2514
+ '# HELP objectstorage_delete_markers_total Delete markers, current and noncurrent.',
2515
+ '# TYPE objectstorage_delete_markers_total gauge',
2516
+ `objectstorage_delete_markers_total ${stats?.totalDeleteMarkerCount ?? 0}`,
2463
2517
  ].join('\n'),
2464
2518
  };
2465
2519
  }