@aws-cdk/aws-s3tables-alpha 2.243.0-alpha.0 → 2.245.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/table.js CHANGED
@@ -34,7 +34,7 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
34
34
  return useValue ? value : void 0;
35
35
  };
36
36
  Object.defineProperty(exports, "__esModule", { value: true });
37
- exports.Table = exports.Status = exports.OpenTableFormat = void 0;
37
+ exports.Table = exports.NullOrder = exports.SortDirection = exports.IcebergTransform = exports.Status = exports.OpenTableFormat = void 0;
38
38
  const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
39
39
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
40
40
  const os_1 = require("os");
@@ -118,6 +118,104 @@ var Status;
118
118
  */
119
119
  Status["DISABLED"] = "disabled";
120
120
  })(Status || (exports.Status = Status = {}));
121
+ /**
122
+ * Iceberg transform values for partition and sort fields.
123
+ */
124
+ class IcebergTransform {
125
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-s3tables-alpha.IcebergTransform", version: "2.245.0-alpha.0" };
126
+ /**
127
+ * Use the column value as the transform value without transformation.
128
+ */
129
+ static IDENTITY = new IcebergTransform('identity');
130
+ /**
131
+ * Transform a timestamp/date field to year.
132
+ */
133
+ static YEAR = new IcebergTransform('year');
134
+ /**
135
+ * Transform a timestamp/date field to month.
136
+ */
137
+ static MONTH = new IcebergTransform('month');
138
+ /**
139
+ * Transform a timestamp/date field to day.
140
+ */
141
+ static DAY = new IcebergTransform('day');
142
+ /**
143
+ * Transform a timestamp field to hour.
144
+ */
145
+ static HOUR = new IcebergTransform('hour');
146
+ /**
147
+ * Transform values into a fixed number of buckets.
148
+ *
149
+ * @param n The number of buckets (must be a positive integer)
150
+ */
151
+ static bucket(n) {
152
+ if (n <= 0 || !Number.isInteger(n)) {
153
+ throw new core_1.UnscopedValidationError('InvalidBucketCount', 'Bucket count must be a positive integer.');
154
+ }
155
+ return new IcebergTransform(`bucket[${n}]`);
156
+ }
157
+ /**
158
+ * Truncate values to a fixed width.
159
+ *
160
+ * @param width The truncation width (must be a positive integer)
161
+ */
162
+ static truncate(width) {
163
+ if (width <= 0 || !Number.isInteger(width)) {
164
+ throw new core_1.UnscopedValidationError('InvalidTruncateWidth', 'Truncate width must be a positive integer.');
165
+ }
166
+ return new IcebergTransform(`truncate[${width}]`);
167
+ }
168
+ /**
169
+ * Create a custom transform from a string value.
170
+ *
171
+ * @param value The transform string value
172
+ */
173
+ static of(value) {
174
+ return new IcebergTransform(value);
175
+ }
176
+ /**
177
+ * The string value of the transform.
178
+ */
179
+ value;
180
+ constructor(value) {
181
+ this.value = value;
182
+ }
183
+ /**
184
+ * Returns the string representation of the transform.
185
+ */
186
+ toString() {
187
+ return this.value;
188
+ }
189
+ }
190
+ exports.IcebergTransform = IcebergTransform;
191
+ /**
192
+ * Sort direction values for Iceberg sort fields.
193
+ */
194
+ var SortDirection;
195
+ (function (SortDirection) {
196
+ /**
197
+ * Sort values in ascending order.
198
+ */
199
+ SortDirection["ASC"] = "asc";
200
+ /**
201
+ * Sort values in descending order.
202
+ */
203
+ SortDirection["DESC"] = "desc";
204
+ })(SortDirection || (exports.SortDirection = SortDirection = {}));
205
+ /**
206
+ * Null ordering values for Iceberg sort fields.
207
+ */
208
+ var NullOrder;
209
+ (function (NullOrder) {
210
+ /**
211
+ * Place null values before non-null values.
212
+ */
213
+ NullOrder["NULLS_FIRST"] = "nulls-first";
214
+ /**
215
+ * Place null values after non-null values.
216
+ */
217
+ NullOrder["NULLS_LAST"] = "nulls-last";
218
+ })(NullOrder || (exports.NullOrder = NullOrder = {}));
121
219
  /**
122
220
  * An S3 Table with helpers.
123
221
  */
@@ -135,7 +233,7 @@ let Table = (() => {
135
233
  Table = _classThis = _classDescriptor.value;
136
234
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
137
235
  }
138
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-s3tables-alpha.Table", version: "2.243.0-alpha.0" };
236
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-s3tables-alpha.Table", version: "2.245.0-alpha.0" };
139
237
  /** Uniquely identifies this class. */
140
238
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-s3tables-alpha.Table';
141
239
  /**
@@ -205,7 +303,7 @@ let Table = (() => {
205
303
  errors.push(`Table name must end with a lowercase letter or number (offset: ${tableName.length - 1})`);
206
304
  }
207
305
  if (errors.length > 0) {
208
- throw new core_1.UnscopedValidationError(`Invalid S3 table name (value: ${tableName})${os_1.EOL}${errors.join(os_1.EOL)}`);
306
+ throw new core_1.UnscopedValidationError('InvalidTableName', `Invalid S3 table name (value: ${tableName})${os_1.EOL}${errors.join(os_1.EOL)}`);
209
307
  }
210
308
  }
211
309
  /**
@@ -217,6 +315,10 @@ let Table = (() => {
217
315
  * @internal
218
316
  */
219
317
  _resource;
318
+ /**
319
+ * The tag manager for this resource.
320
+ */
321
+ cdkTagManager;
220
322
  /**
221
323
  * The name of this table
222
324
  */
@@ -243,6 +345,9 @@ let Table = (() => {
243
345
  }
244
346
  // Enhanced CDK Analytics Telemetry
245
347
  (0, metadata_resource_1.addConstructMetadata)(this, props);
348
+ if (props.withoutMetadata && props.icebergMetadata) {
349
+ throw new core_1.UnscopedValidationError('MutuallyExclusiveProps', "TableProps: 'withoutMetadata' and 'icebergMetadata' are mutually exclusive. Specify only one.");
350
+ }
246
351
  Table.validateTableName(props.tableName);
247
352
  this._resource = new aws_s3tables_1.CfnTable(this, id, {
248
353
  tableName: props.tableName,
@@ -250,16 +355,92 @@ let Table = (() => {
250
355
  tableBucketArn: props.namespace.tableBucket.tableBucketArn,
251
356
  namespace: props.namespace.namespaceName,
252
357
  compaction: props.compaction,
253
- icebergMetadata: props.icebergMetadata,
358
+ icebergMetadata: this.buildIcebergMetadata(props.icebergMetadata),
254
359
  snapshotManagement: props.snapshotManagement,
255
360
  withoutMetadata: props.withoutMetadata ? 'Yes' : undefined,
256
361
  });
257
362
  this.namespace = props.namespace;
258
363
  this.tableName = props.tableName;
259
364
  this.tableArn = this._resource.attrTableArn;
365
+ this.cdkTagManager = this._resource.cdkTagManager;
260
366
  this._resource.applyRemovalPolicy(props.removalPolicy);
261
367
  this.node.addDependency(this.namespace);
262
368
  }
369
+ /**
370
+ * Builds the CloudFormation Iceberg metadata property from the CDK metadata model.
371
+ */
372
+ buildIcebergMetadata(metadata) {
373
+ if (!metadata) {
374
+ return undefined;
375
+ }
376
+ return {
377
+ icebergSchema: this.buildIcebergSchema(metadata.icebergSchema),
378
+ icebergPartitionSpec: metadata.icebergPartitionSpec
379
+ ? this.buildIcebergPartitionSpec(metadata.icebergPartitionSpec)
380
+ : undefined,
381
+ icebergSortOrder: metadata.icebergSortOrder
382
+ ? this.buildIcebergSortOrder(metadata.icebergSortOrder)
383
+ : undefined,
384
+ tableProperties: metadata.tableProperties
385
+ ? this.buildTableProperties(metadata.tableProperties)
386
+ : undefined,
387
+ };
388
+ }
389
+ /**
390
+ * Builds the CloudFormation Iceberg schema property.
391
+ */
392
+ buildIcebergSchema(schema) {
393
+ return {
394
+ schemaFieldList: schema.schemaFieldList.map(field => ({
395
+ name: field.name,
396
+ type: field.type,
397
+ ...(field.required !== undefined && { required: field.required }),
398
+ ...(field.id !== undefined && { id: field.id }),
399
+ })),
400
+ };
401
+ }
402
+ /**
403
+ * Builds the CloudFormation Iceberg partition specification property.
404
+ */
405
+ buildIcebergPartitionSpec(spec) {
406
+ return {
407
+ ...(spec.specId !== undefined && { specId: spec.specId }),
408
+ fields: spec.fields.map(field => ({
409
+ sourceId: field.sourceId,
410
+ transform: field.transform.value,
411
+ name: field.name,
412
+ ...(field.fieldId !== undefined && { fieldId: field.fieldId }),
413
+ })),
414
+ };
415
+ }
416
+ /**
417
+ * Builds the CloudFormation Iceberg sort order property.
418
+ */
419
+ buildIcebergSortOrder(sortOrder) {
420
+ return {
421
+ ...(sortOrder.orderId !== undefined && { orderId: sortOrder.orderId }),
422
+ fields: sortOrder.fields.map(field => ({
423
+ sourceId: field.sourceId,
424
+ transform: field.transform.value,
425
+ direction: field.direction,
426
+ nullOrder: field.nullOrder,
427
+ })),
428
+ };
429
+ }
430
+ /**
431
+ * Builds the CloudFormation table properties map from key-value entries.
432
+ */
433
+ buildTableProperties(tableProperties) {
434
+ const keys = tableProperties.map(entry => entry.key);
435
+ const duplicateKeys = keys.filter((key, index) => keys.indexOf(key) !== index);
436
+ if (duplicateKeys.length > 0) {
437
+ throw new core_1.UnscopedValidationError('DuplicateTablePropertyKey', `Duplicate table property keys are not allowed: ${[...new Set(duplicateKeys)].join(', ')}`);
438
+ }
439
+ return tableProperties.reduce((acc, entry) => ({
440
+ ...acc,
441
+ [entry.key]: entry.value,
442
+ }), {});
443
+ }
263
444
  static {
264
445
  __runInitializers(_classThis, _classExtraInitializers);
265
446
  }
@@ -267,4 +448,4 @@ let Table = (() => {
267
448
  return Table = _classThis;
268
449
  })();
269
450
  exports.Table = Table;
270
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQkFBeUI7QUFDekIsMkNBQTJDO0FBQzNDLDJEQUFvRTtBQUtwRSwyQ0FJMEI7QUFDMUIsOEVBQThFO0FBQzlFLDBFQUEwRTtBQUcxRSx1Q0FBdUM7QUFtRnZDOztHQUVHO0FBQ0gsTUFBZSxTQUFVLFNBQVEsZUFBUTtJQWtCaEMsbUJBQW1CLENBQ3hCLFNBQThCO1FBRTlCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQy9DLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSw2QkFBYyxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUU7Z0JBQzNELFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsY0FBYyxFQUFFLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7YUFDM0MsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdEUsQ0FBQztRQUVELE9BQU8sRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLENBQUM7S0FDbEM7SUFFRDs7T0FFRztJQUNJLFNBQVMsQ0FBQyxRQUF3QjtRQUN2QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQ2YsUUFBUSxFQUNSLEtBQUssQ0FBQyxpQkFBaUIsRUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FDZCxDQUFDO0tBQ0g7SUFFRDs7T0FFRztJQUNJLFVBQVUsQ0FBQyxR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QUM7U0FDekM7O1lBaEpVLHVEQUFLOzs7OztBQUFMLHNCQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRU9MIH0gZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgQ2ZuVGFibGUsIENmblRhYmxlUG9saWN5IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzdGFibGVzJztcbmltcG9ydCB0eXBlIHtcbiAgSVJlc291cmNlLFxuICBSZW1vdmFsUG9saWN5LFxufSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7XG4gIFJlc291cmNlLFxuICBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcixcbiAgVG9rZW4sXG59IGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgSU5hbWVzcGFjZSB9IGZyb20gJy4vbmFtZXNwYWNlJztcbmltcG9ydCAqIGFzIHBlcm1zIGZyb20gJy4vcGVybWlzc2lvbnMnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gUzMgVGFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlIGV4dGVuZHMgSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhpcyB0YWJsZS5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFibGVBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhpcyB0YWJsZS5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFibGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhY2NvdW50SWQgY29udGFpbmluZyB0aGlzIHRhYmxlLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBhY2NvdW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVnaW9uIGNvbnRhaW5pbmcgdGhpcyB0YWJsZS5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgc3RhdGVtZW50IHRvIHRoZSByZXNvdXJjZSBwb2xpY3kgZm9yIGEgcHJpbmNpcGFsIChpLmUuXG4gICAqIGFjY291bnQvcm9sZS9zZXJ2aWNlKSB0byBwZXJmb3JtIGFjdGlvbnMgb24gdGhpcyB0YWJsZS5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRoZSBwb2xpY3kgc3RhdGVtZW50IG1heSBvciBtYXkgbm90IGJlIGFkZGVkIHRvIHRoZSBwb2xpY3kuXG4gICAqIEZvciBleGFtcGxlLCB3aGVuIGFuIGBJVGFibGVgIGlzIGNyZWF0ZWQgZnJvbSBhbiBleGlzdGluZyB0YWJsZSxcbiAgICogaXQncyBub3QgcG9zc2libGUgdG8gdGVsbCB3aGV0aGVyIHRoZSB0YWJsZSBhbHJlYWR5IGhhcyBhIHBvbGljeVxuICAgKiBhdHRhY2hlZCwgbGV0IGFsb25lIHRvIHJlLXVzZSB0aGF0IHBvbGljeSB0byBhZGQgbW9yZSBzdGF0ZW1lbnRzIHRvIGl0LlxuICAgKiBTbyBpdCdzIHNhZmVzdCB0byBkbyBub3RoaW5nIGluIHRoZXNlIGNhc2VzLlxuICAgKlxuICAgKiBAcGFyYW0gc3RhdGVtZW50IHRoZSBwb2xpY3kgc3RhdGVtZW50IHRvIGJlIGFkZGVkIHRvIHRoZSB0YWJsZSdzXG4gICAqIHBvbGljeS5cbiAgICogQHJldHVybnMgbWV0YWRhdGEgYWJvdXQgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIG1ldGhvZC4gSWYgdGhlIHBvbGljeVxuICAgKiB3YXMgbm90IGFkZGVkLCB0aGUgdmFsdWUgb2YgYHN0YXRlbWVudEFkZGVkYCB3aWxsIGJlIGBmYWxzZWAuIFlvdVxuICAgKiBzaG91bGQgYWx3YXlzIGNoZWNrIHRoaXMgdmFsdWUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG9wZXJhdGlvbiB3YXNcbiAgICogYWN0dWFsbHkgY2FycmllZCBvdXQuIE90aGVyd2lzZSwgc3ludGhlc2lzIGFuZCBkZXBsb3kgd2lsbCB0ZXJtaW5hdGVcbiAgICogc2lsZW50bHksIHdoaWNoIG1heSBiZSBjb25mdXNpbmcuXG4gICAqL1xuICBhZGRUb1Jlc291cmNlUG9saWN5KHN0YXRlbWVudDogaWFtLlBvbGljeVN0YXRlbWVudCk6IGlhbS5BZGRUb1Jlc291cmNlUG9saWN5UmVzdWx0O1xuXG4gIC8qKlxuICAgKiBHcmFudCByZWFkIHBlcm1pc3Npb25zIGZvciB0aGlzIHRhYmxlIHRvIGFuIElBTSBwcmluY2lwYWwgKFJvbGUvR3JvdXAvVXNlcikuXG4gICAqXG4gICAqIElmIHRoZSBwYXJlbnQgVGFibGVCdWNrZXQgb2YgdGhpcyB0YWJsZSBoYXMgZW5jcnlwdGlvbixcbiAgICogeW91IHNob3VsZCBncmFudCBrbXM6RGVjcnlwdCBwZXJtaXNzaW9uIHRvIHVzZSB0aGlzIGtleSB0byB0aGUgc2FtZSBwcmluY2lwYWwuXG4gICAqXG4gICAqIEBwYXJhbSBpZGVudGl0eSBUaGUgcHJpbmNpcGFsIHRvIGFsbG93IHJlYWQgcGVybWlzc2lvbnMgdG9cbiAgICovXG4gIGdyYW50UmVhZChpZGVudGl0eTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG5cbiAgLyoqXG4gICAqIEdyYW50IHdyaXRlIHBlcm1pc3Npb25zIGZvciB0aGlzIHRhYmxlIHRvIGFuIElBTSBwcmluY2lwYWwgKFJvbGUvR3JvdXAvVXNlcikuXG4gICAqXG4gICAqIElmIHRoZSBwYXJlbnQgVGFibGVCdWNrZXQgb2YgdGhpcyB0YWJsZSBoYXMgZW5jcnlwdGlvbixcbiAgICogeW91IHNob3VsZCBncmFudCBrbXM6R2VuZXJhdGVEYXRhS2V5IGFuZCBrbXM6RGVjcnlwdCBwZXJtaXNzaW9uXG4gICAqIHRvIHVzZSB0aGlzIGtleSB0byB0aGUgc2FtZSBwcmluY2lwYWwuXG4gICAqXG4gICAqIEBwYXJhbSBpZGVudGl0eSBUaGUgcHJpbmNpcGFsIHRvIGFsbG93IHdyaXRlIHBlcm1pc3Npb25zIHRvXG4gICAqL1xuICBncmFudFdyaXRlKGlkZW50aXR5OiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMgZm9yIHRoaXMgdGFibGUgdG8gYW4gSUFNIHByaW5jaXBhbCAoUm9sZS9Hcm91cC9Vc2VyKS5cbiAgICpcbiAgICogSWYgdGhlIHBhcmVudCBUYWJsZUJ1Y2tldCBvZiB0aGlzIHRhYmxlIGhhcyBlbmNyeXB0aW9uLFxuICAgKiB5b3Ugc2hvdWxkIGdyYW50IGttczpHZW5lcmF0ZURhdGFLZXkgYW5kIGttczpEZWNyeXB0IHBlcm1pc3Npb25cbiAgICogdG8gdXNlIHRoaXMga2V5IHRvIHRoZSBzYW1lIHByaW5jaXBhbC5cbiAgICpcbiAgICogQHBhcmFtIGlkZW50aXR5IFRoZSBwcmluY2lwYWwgdG8gYWxsb3cgcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMgdG9cbiAgICovXG4gIGdyYW50UmVhZFdyaXRlKGlkZW50aXR5OiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBUYWJsZSBpbXBsZW1lbnRhdGlvbnMuXG4gKi9cbmFic3RyYWN0IGNsYXNzIFRhYmxlQmFzZSBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVRhYmxlIHtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHRhYmxlTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdGFibGVBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlc291cmNlIHBvbGljeSBhc3NvY2lhdGVkIHdpdGggdGhpcyB0YWJsZS5cbiAgICpcbiAgICogSWYgYGF1dG9DcmVhdGVQb2xpY3lgIGlzIHRydWUsIGEgYFRhYmxlUG9saWN5YCB3aWxsIGJlIGNyZWF0ZWQgdXBvbiB0aGVcbiAgICogZmlyc3QgY2FsbCB0byBhZGRUb1Jlc291cmNlUG9saWN5KHMpLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHRhYmxlUG9saWN5PzogQ2ZuVGFibGVQb2xpY3k7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiBhIHRhYmxlIHJlc291cmNlIHBvbGljeSBzaG91bGQgYXV0b21hdGljYWxseSBjcmVhdGVkIHVwb25cbiAgICogdGhlIGZpcnN0IGNhbGwgdG8gYGFkZFRvUmVzb3VyY2VQb2xpY3lgLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGF1dG9DcmVhdGVQb2xpY3k6IGJvb2xlYW47XG5cbiAgcHVibGljIGFkZFRvUmVzb3VyY2VQb2xpY3koXG4gICAgc3RhdGVtZW50OiBpYW0uUG9saWN5U3RhdGVtZW50LFxuICApOiBpYW0uQWRkVG9SZXNvdXJjZVBvbGljeVJlc3VsdCB7XG4gICAgaWYgKCF0aGlzLnRhYmxlUG9saWN5ICYmIHRoaXMuYXV0b0NyZWF0ZVBvbGljeSkge1xuICAgICAgdGhpcy50YWJsZVBvbGljeSA9IG5ldyBDZm5UYWJsZVBvbGljeSh0aGlzLCAnRGVmYXVsdFBvbGljeScsIHtcbiAgICAgICAgdGFibGVBcm46IHRoaXMudGFibGVBcm4sXG4gICAgICAgIHJlc291cmNlUG9saWN5OiBuZXcgaWFtLlBvbGljeURvY3VtZW50KHt9KSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRhYmxlUG9saWN5KSB7XG4gICAgICB0aGlzLnRhYmxlUG9saWN5LnJlc291cmNlUG9saWN5LmFkZFN0YXRlbWVudHMoc3RhdGVtZW50KTtcbiAgICAgIHJldHVybiB7IHN0YXRlbWVudEFkZGVkOiB0cnVlLCBwb2xpY3lEZXBlbmRhYmxlOiB0aGlzLnRhYmxlUG9saWN5IH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3RhdGVtZW50QWRkZWQ6IGZhbHNlIH07XG4gIH1cblxuICAvKipcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRSZWFkKGlkZW50aXR5OiBpYW0uSUdyYW50YWJsZSkge1xuICAgIHJldHVybiB0aGlzLmdyYW50KFxuICAgICAgaWRlbnRpdHksXG4gICAgICBwZXJtcy5UQUJMRV9SRUFEX0FDQ0VTUyxcbiAgICAgIHRoaXMudGFibGVBcm4sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICovXG4gIHB1YmxpYyBncmFudFdyaXRlKGlkZW50aXR5OiBpYW0uSUdyYW50YWJsZSkge1xuICAgIHJldHVybiB0aGlzLmdyYW50KFxuICAgICAgaWRlbnRpdHksXG4gICAgICBwZXJtcy5UQUJMRV9XUklURV9BQ0NFU1MsXG4gICAgICB0aGlzLnRhYmxlQXJuLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRSZWFkV3JpdGUoaWRlbnRpdHk6IGlhbS5JR3JhbnRhYmxlKSB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoXG4gICAgICBpZGVudGl0eSxcbiAgICAgIHBlcm1zLlRBQkxFX1JFQURfV1JJVEVfQUNDRVNTLFxuICAgICAgdGhpcy50YWJsZUFybixcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyB0aGUgZ2l2ZW4gczN0YWJsZXMgcGVybWlzc2lvbnMgdG8gdGhlIHByb3ZpZGVkIHByaW5jaXBhbFxuICAgKiBAcmV0dXJucyBHcmFudCBvYmplY3RcbiAgICovXG4gIHByaXZhdGUgZ3JhbnQoXG4gICAgZ3JhbnRlZTogaWFtLklHcmFudGFibGUsXG4gICAgdGFibGVBY3Rpb25zOiBzdHJpbmdbXSxcbiAgICByZXNvdXJjZUFybjogc3RyaW5nLFxuICAgIC4uLm90aGVyUmVzb3VyY2VBcm5zOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdKSB7XG4gICAgY29uc3QgcmVzb3VyY2VzID0gW3Jlc291cmNlQXJuLCAuLi5vdGhlclJlc291cmNlQXJuc10uZmlsdGVyKGFybiA9PiBhcm4gIT0gdW5kZWZpbmVkKTtcblxuICAgIGNvbnN0IGdyYW50ID0gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsT3JSZXNvdXJjZSh7XG4gICAgICBncmFudGVlLFxuICAgICAgYWN0aW9uczogdGFibGVBY3Rpb25zLFxuICAgICAgcmVzb3VyY2VBcm5zOiByZXNvdXJjZXMsXG4gICAgICByZXNvdXJjZTogdGhpcyxcbiAgICB9KTtcblxuICAgIHJldHVybiBncmFudDtcbiAgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNyZWF0aW5nIGEgbmV3IFMzIFRhYmxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlUHJvcHMge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGlzIHRhYmxlLCB1bmlxdWUgd2l0aGluIHRoZSBuYW1lc3BhY2VcbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWVzcGFjZSB1bmRlciB3aGljaCB0aGlzIHRhYmxlIGlzIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IG5hbWVzcGFjZTogSU5hbWVzcGFjZTtcbiAgLyoqXG4gICAqIEZvcm1hdCBvZiB0aGlzIHRhYmxlLiBDdXJyZW50bHksIHRoZSBvbmx5IHN1cHBvcnRlZCB2YWx1ZSBpcyBPcGVuVGFibGVGb3JtYXQuSUNFQkVSRy5cbiAgICovXG4gIHJlYWRvbmx5IG9wZW5UYWJsZUZvcm1hdDogT3BlblRhYmxlRm9ybWF0O1xuICAvKipcbiAgICogU2V0dGluZ3MgZ292ZXJuaW5nIHRoZSBDb21wYWN0aW9uIG1haW50ZW5hbmNlIGFjdGlvbi5cbiAgICogQGRlZmF1bHQgQW1hem9uIFMzIHNlbGVjdHMgdGhlIGJlc3QgY29tcGFjdGlvbiBzdHJhdGVneSBiYXNlZCBvbiB5b3VyIHRhYmxlIHNvcnQgb3JkZXIuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvczMtdGFibGVzLW1haW50ZW5hbmNlLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBhY3Rpb24/OiBDb21wYWN0aW9uUHJvcGVydHk7XG4gIC8qKlxuICAgKiBDb250YWlucyBkZXRhaWxzIGFib3V0IHRoZSBtZXRhZGF0YSBmb3IgYW4gSWNlYmVyZyB0YWJsZS5cbiAgICogQGRlZmF1bHQgdGFibGUgaXMgY3JlYXRlZCB3aXRob3V0IGFueSBtZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgaWNlYmVyZ01ldGFkYXRhPzogSWNlYmVyZ01ldGFkYXRhUHJvcGVydHk7XG4gIC8qKlxuICAgKiBDb250YWlucyBkZXRhaWxzIGFib3V0IHRoZSBzbmFwc2hvdCBtYW5hZ2VtZW50IHNldHRpbmdzIGZvciBhbiBJY2ViZXJnIHRhYmxlLlxuICAgKiBAZGVmYXVsdCBlbmFibGVkOiBNaW5pbXVtU25hcHNob3RzIGlzIDEgYnkgZGVmYXVsdCBhbmQgTWF4aW11bVNuYXBzaG90QWdlIGlzIDEyMCBob3VycyBieSBkZWZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgc25hcHNob3RNYW5hZ2VtZW50PzogU25hcHNob3RNYW5hZ2VtZW50UHJvcGVydHk7XG4gIC8qKlxuICAgKiBDb250cm9scyB3aGF0IGhhcHBlbnMgdG8gdGhpcyB0YWJsZSBpdCBpdCBzdG9wZWQgYmVpbmcgbWFuYWdlZCBieSBjbG91ZGZvcm1hdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgUkVUQUlOXG4gICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogUmVtb3ZhbFBvbGljeTtcbiAgLyoqXG4gICAqIElmIHRydWUsIGluZGljYXRlcyB0aGF0IHlvdSBkb24ndCB3YW50IHRvIHNwZWNpZnkgYSBzY2hlbWEgZm9yIHRoZSB0YWJsZS5cbiAgICpcbiAgICogVGhpcyBwcm9wZXJ0eSBpcyBtdXR1YWxseSBleGNsdXNpdmUgdG8gJ0ljZWJlcmdNZXRhZGF0YScuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB3aXRob3V0TWV0YWRhdGE/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFN1cHBvcnRlZCBvcGVuIHRhYmxlIGZvcm1hdHMuXG4gKi9cbmV4cG9ydCBlbnVtIE9wZW5UYWJsZUZvcm1hdCB7XG4gIC8qKlxuICAgKiBBcGFjaGUgSWNlYmVyZyB0YWJsZSBmb3JtYXQuXG4gICAqL1xuICBJQ0VCRVJHID0gJ0lDRUJFUkcnLFxufVxuXG4vKipcbiAqIFNldHRpbmdzIGdvdmVybmluZyB0aGUgQ29tcGFjdGlvbiBtYWludGVuYW5jZSBhY3Rpb24uXG4gKlxuICogQGRlZmF1bHQgLSBObyBjb21wYWN0aW9uIHNldHRpbmdzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGFjdGlvblByb3BlcnR5IHtcbiAgLyoqXG4gICAqIFN0YXR1cyBvZiB0aGUgY29tcGFjdGlvbiBtYWludGVuYW5jZSBhY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM6IFN0YXR1cztcbiAgLyoqXG4gICAqIFRhcmdldCBmaWxlIHNpemUgaW4gbWVnYWJ5dGVzIGZvciBjb21wYWN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0RmlsZVNpemVNYjogbnVtYmVyO1xufVxuXG4vKipcbiAqIFN0YXR1cyB2YWx1ZXMgZm9yIG1haW50ZW5hbmNlIGFjdGlvbnMuXG4gKi9cbmV4cG9ydCBlbnVtIFN0YXR1cyB7XG4gIC8qKlxuICAgKiBFbmFibGUgdGhlIG1haW50ZW5hbmNlIGFjdGlvbi5cbiAgICovXG4gIEVOQUJMRUQgPSAnZW5hYmxlZCcsXG4gIC8qKlxuICAgKiBEaXNhYmxlIHRoZSBtYWludGVuYW5jZSBhY3Rpb24uXG4gICAqL1xuICBESVNBQkxFRCA9ICdkaXNhYmxlZCcsXG59XG5cbi8qKlxuICogQ29udGFpbnMgZGV0YWlscyBhYm91dCB0aGUgbWV0YWRhdGEgZm9yIGFuIEljZWJlcmcgdGFibGUuXG4gKiBAc2VlIGh0dHA6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtczN0YWJsZXMtdGFibGUtaWNlYmVyZ21ldGFkYXRhLmh0bWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJY2ViZXJnTWV0YWRhdGFQcm9wZXJ0eSB7XG4gIC8qKlxuICAgKiBDb250YWlucyBkZXRhaWxzIGFib3V0IHRoZSBzY2hlbWEgZm9yIGFuIEljZWJlcmcgdGFibGUuXG4gICAqXG4gICAqIEBzZWUgaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1zM3RhYmxlcy10YWJsZS1pY2ViZXJnbWV0YWRhdGEuaHRtbCNjZm4tczN0YWJsZXMtdGFibGUtaWNlYmVyZ21ldGFkYXRhLWljZWJlcmdzY2hlbWFcbiAgICovXG4gIHJlYWRvbmx5IGljZWJlcmdTY2hlbWE6IEljZWJlcmdTY2hlbWFQcm9wZXJ0eTtcbn1cblxuLyoqXG4gKiBDb250YWlucyBkZXRhaWxzIGFib3V0IHRoZSBzY2hlbWEgZm9yIGFuIEljZWJlcmcgdGFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWNlYmVyZ1NjaGVtYVByb3BlcnR5IHtcbiAgLyoqXG4gICAqIENvbnRhaW5zIGRldGFpbHMgYWJvdXQgdGhlIHNjaGVtYSBmb3IgYW4gSWNlYmVyZyB0YWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IHNjaGVtYUZpZWxkTGlzdDogU2NoZW1hRmllbGRQcm9wZXJ0eVtdO1xufVxuXG4vKipcbiAqIENvbnRhaW5zIGRldGFpbHMgYWJvdXQgYSBzY2hlbWEgZmllbGQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hRmllbGRQcm9wZXJ0eSB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZmllbGQuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgQm9vbGVhbiB2YWx1ZSB0aGF0IHNwZWNpZmllcyB3aGV0aGVyIHZhbHVlcyBhcmUgcmVxdWlyZWQgZm9yIGVhY2ggcm93IGluIHRoaXMgZmllbGQuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHRoaXMgaXMgYGZhbHNlYCBhbmQgbnVsbCB2YWx1ZXMgYXJlIGFsbG93ZWQgaW4gdGhlIGZpZWxkLiBJZiB0aGlzIGlzIGB0cnVlYCwgdGhlIGZpZWxkIGRvZXMgbm90IGFsbG93IG51bGwgdmFsdWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZmllbGQgdHlwZS5cbiAgICpcbiAgICogUzMgVGFibGVzIHN1cHBvcnRzIGFsbCBBcGFjaGUgSWNlYmVyZyBwcmltaXRpdmUgdHlwZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIFtBcGFjaGUgSWNlYmVyZyBkb2N1bWVudGF0aW9uXShodHRwczovL2ljZWJlcmcuYXBhY2hlLm9yZy9zcGVjLyNwcmltaXRpdmUtdHlwZXMpLlxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnRhaW5zIGRldGFpbHMgYWJvdXQgdGhlIHNuYXBzaG90IG1hbmFnZW1lbnQgc2V0dGluZ3MgZm9yIGFuIEljZWJlcmcgdGFibGUuXG4gKlxuICogQSBzbmFwc2hvdCBpcyBleHBpcmVkIHdoZW4gaXQgZXhjZWVkcyBNaW5TbmFwc2hvdHNUb0tlZXAgYW5kIE1heFNuYXBzaG90QWdlSG91cnMuXG4gKlxuICogQGRlZmF1bHQgLSBObyBzbmFwc2hvdCBtYW5hZ2VtZW50IHNldHRpbmdzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU25hcHNob3RNYW5hZ2VtZW50UHJvcGVydHkge1xuICAvKipcbiAgICogVGhlIG1heGltdW0gYWdlIG9mIGEgc25hcHNob3QgYmVmb3JlIGl0IGNhbiBiZSBleHBpcmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIG1heGltdW0gYWdlXG4gICAqL1xuICByZWFkb25seSBtYXhTbmFwc2hvdEFnZUhvdXJzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSBudW1iZXIgb2Ygc25hcHNob3RzIHRvIGtlZXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gbWluaW11bSBudW1iZXJcbiAgICovXG4gIHJlYWRvbmx5IG1pblNuYXBzaG90c1RvS2VlcD86IG51bWJlcjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIFNuYXBzaG90TWFuYWdlbWVudCBtYWludGVuYW5jZSBhY3Rpb24gaXMgZW5hYmxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb3Qgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM/OiBTdGF0dXM7XG59XG5cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gYSB0YWJsZSBvdXRzaWRlIHRoaXMgc3RhY2tcbiAqXG4gKiBUaGUgdGFibGVOYW1lLCByZWdpb24sIGFuZCBhY2NvdW50IGNhbiBiZSBwcm92aWRlZCBleHBsaWNpdGx5XG4gKiBvciB3aWxsIGJlIGluZmVycmVkIGZyb20gdGhlIHRhYmxlQXJuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhpcyB0YWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFibGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0YWJsZSdzIEFSTi5cbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlQXJuOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQW4gUzMgVGFibGUgd2l0aCBoZWxwZXJzLlxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgVGFibGUgZXh0ZW5kcyBUYWJsZUJhc2Uge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1zM3RhYmxlcy1hbHBoYS5UYWJsZSc7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBUYWJsZSBjb25zdHJ1Y3QgdGhhdCByZXByZXNlbnRzIGFuIGV4dGVybmFsIHRhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHBhcmVudCBjcmVhdGluZyBjb25zdHJ1Y3QgKHVzdWFsbHkgYHRoaXNgKS5cbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QncyBuYW1lLlxuICAgKiBAcGFyYW0gYXR0cnMgQSBgVGFibGVBdHRyaWJ1dGVzYCBvYmplY3QgY29udGFpbmluZyB0aGUgdGFibGUgbmFtZSBhbmQgQVJOLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tVGFibGVBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogVGFibGVBdHRyaWJ1dGVzLFxuICApOiBJVGFibGUge1xuICAgIGNvbnN0IHRhYmxlQXJuID0gYXR0cnMudGFibGVBcm47XG4gICAgVGFibGUudmFsaWRhdGVUYWJsZU5hbWUoYXR0cnMudGFibGVOYW1lKTtcblxuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFRhYmxlQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdGFibGVOYW1lID0gYXR0cnMudGFibGVOYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHRhYmxlQXJuID0gdGFibGVBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdGFibGVQb2xpY3k/OiBDZm5UYWJsZVBvbGljeTtcbiAgICAgIHByb3RlY3RlZCBhdXRvQ3JlYXRlUG9saWN5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAgIC8qKlxuICAgICAgICogRXhwb3J0cyB0aGlzICBmcm9tIHRoZSBzdGFjay5cbiAgICAgICAqL1xuICAgICAgcHVibGljIGV4cG9ydCgpIHtcbiAgICAgICAgcmV0dXJuIGF0dHJzO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCwge1xuICAgICAgZW52aXJvbm1lbnRGcm9tQXJuOiB0YWJsZUFybixcbiAgICAgIHBoeXNpY2FsTmFtZTogdGFibGVBcm4sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL3MzLXRhYmxlcy1idWNrZXRzLW5hbWluZy5odG1sXG4gICAqIEBwYXJhbSB0YWJsZU5hbWUgTmFtZSBvZiB0aGUgdGFibGVcbiAgICogQHRocm93cyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvciBpZiBhbnkgbmFtaW5nIGVycm9ycyBhcmUgZGV0ZWN0ZWRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdmFsaWRhdGVUYWJsZU5hbWUodGFibGVOYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodGFibGVOYW1lID09IHVuZGVmaW5lZCB8fCBUb2tlbi5pc1VucmVzb2x2ZWQodGFibGVOYW1lKSkge1xuICAgICAgLy8gdGhlIG5hbWUgaXMgYSBsYXRlLWJvdW5kIHZhbHVlLCBub3QgYSBkZWZpbmVkIHN0cmluZywgc28gc2tpcCB2YWxpZGF0aW9uXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gTGVuZ3RoIHZhbGlkYXRpb25cbiAgICBpZiAodGFibGVOYW1lLmxlbmd0aCA8IDEgfHwgdGFibGVOYW1lLmxlbmd0aCA+IDI1NSkge1xuICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICdUYWJsZSBuYW1lIG11c3QgYmUgYXQgbGVhc3QgMSBhbmQgbm8gbW9yZSB0aGFuIDI1NSBjaGFyYWN0ZXJzJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQ2hhcmFjdGVyIHNldCB2YWxpZGF0aW9uXG4gICAgY29uc3QgaWxsZWdhbENoYXJzZXRSZWdFeCA9IC9bXmEtejAtOV9dLztcbiAgICBjb25zdCBhbGxvd2VkRWRnZUNoYXJzZXRSZWdFeCA9IC9bYS16MC05XS87XG5cbiAgICBjb25zdCBpbGxlZ2FsQ2hhck1hdGNoID0gdGFibGVOYW1lLm1hdGNoKGlsbGVnYWxDaGFyc2V0UmVnRXgpO1xuICAgIGlmIChpbGxlZ2FsQ2hhck1hdGNoKSB7XG4gICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgJ1RhYmxlIG5hbWUgbXVzdCBvbmx5IGNvbnRhaW4gbG93ZXJjYXNlIGNoYXJhY3RlcnMsIG51bWJlcnMsIGFuZCB1bmRlcnNjb3JlcyAoXyknICtcbiAgICAgICAgICBgIChvZmZzZXQ6ICR7aWxsZWdhbENoYXJNYXRjaC5pbmRleH0pYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRWRnZSBjaGFyYWN0ZXIgdmFsaWRhdGlvblxuICAgIGlmICghYWxsb3dlZEVkZ2VDaGFyc2V0UmVnRXgudGVzdCh0YWJsZU5hbWUuY2hhckF0KDApKSkge1xuICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICdUYWJsZSBuYW1lIG11c3Qgc3RhcnQgd2l0aCBhIGxvd2VyY2FzZSBsZXR0ZXIgb3IgbnVtYmVyIChvZmZzZXQ6IDApJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghYWxsb3dlZEVkZ2VDaGFyc2V0UmVnRXgudGVzdCh0YWJsZU5hbWUuY2hhckF0KHRhYmxlTmFtZS5sZW5ndGggLSAxKSkpIHtcbiAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICBgVGFibGUgbmFtZSBtdXN0IGVuZCB3aXRoIGEgbG93ZXJjYXNlIGxldHRlciBvciBudW1iZXIgKG9mZnNldDogJHtcbiAgICAgICAgICB0YWJsZU5hbWUubGVuZ3RoIC0gMVxuICAgICAgICB9KWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBgSW52YWxpZCBTMyB0YWJsZSBuYW1lICh2YWx1ZTogJHt0YWJsZU5hbWV9KSR7RU9MfSR7ZXJyb3JzLmpvaW4oRU9MKX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoYXJuKSBvZiB0aGlzIHRhYmxlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGFibGVBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHVuZGVybHlpbmcgQ2ZuVGFibGUgTDEgcmVzb3VyY2VcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZXNvdXJjZTogQ2ZuVGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoaXMgdGFibGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YWJsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWVzcGFjZSBjb250YWluaW5nIHRoaXMgdGFibGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lc3BhY2U6IElOYW1lc3BhY2U7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBwb2xpY3kgZm9yIHRoaXMgdGFibGUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGFibGVQb2xpY3k/OiBDZm5UYWJsZVBvbGljeTtcblxuICBwcm90ZWN0ZWQgYXV0b0NyZWF0ZVBvbGljeTogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFRhYmxlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHt9KTtcblxuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgVGFibGUudmFsaWRhdGVUYWJsZU5hbWUocHJvcHMudGFibGVOYW1lKTtcblxuICAgIHRoaXMuX3Jlc291cmNlID0gbmV3IENmblRhYmxlKHRoaXMsIGlkLCB7XG4gICAgICB0YWJsZU5hbWU6IHByb3BzLnRhYmxlTmFtZSxcbiAgICAgIG9wZW5UYWJsZUZvcm1hdDogcHJvcHMub3BlblRhYmxlRm9ybWF0LFxuICAgICAgdGFibGVCdWNrZXRBcm46IHByb3BzLm5hbWVzcGFjZS50YWJsZUJ1Y2tldC50YWJsZUJ1Y2tldEFybixcbiAgICAgIG5hbWVzcGFjZTogcHJvcHMubmFtZXNwYWNlLm5hbWVzcGFjZU5hbWUsXG4gICAgICBjb21wYWN0aW9uOiBwcm9wcy5jb21wYWN0aW9uLFxuICAgICAgaWNlYmVyZ01ldGFkYXRhOiBwcm9wcy5pY2ViZXJnTWV0YWRhdGEsXG4gICAgICBzbmFwc2hvdE1hbmFnZW1lbnQ6IHByb3BzLnNuYXBzaG90TWFuYWdlbWVudCxcbiAgICAgIHdpdGhvdXRNZXRhZGF0YTogcHJvcHMud2l0aG91dE1ldGFkYXRhID8gJ1llcycgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICB0aGlzLm5hbWVzcGFjZSA9IHByb3BzLm5hbWVzcGFjZTtcbiAgICB0aGlzLnRhYmxlTmFtZSA9IHByb3BzLnRhYmxlTmFtZTtcbiAgICB0aGlzLnRhYmxlQXJuID0gdGhpcy5fcmVzb3VyY2UuYXR0clRhYmxlQXJuO1xuICAgIHRoaXMuX3Jlc291cmNlLmFwcGx5UmVtb3ZhbFBvbGljeShwcm9wcy5yZW1vdmFsUG9saWN5KTtcbiAgICB0aGlzLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLm5hbWVzcGFjZSk7XG4gIH1cbn1cbiJdfQ==
451
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQkFBeUI7QUFDekIsMkNBQTJDO0FBQzNDLDJEQUFvRTtBQU9wRSwyQ0FJMEI7QUFDMUIsOEVBQThFO0FBQzlFLDBFQUEwRTtBQUcxRSx1Q0FBdUM7QUFtRnZDOztHQUVHO0FBQ0gsTUFBZSxTQUFVLFNBQVEsZUFBUTtJQWtCaEMsbUJBQW1CLENBQ3hCLFNBQThCO1FBRTlCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQy9DLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSw2QkFBYyxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUU7Z0JBQzNELFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsY0FBYyxFQUFFLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7YUFDM0MsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdEUsQ0FBQztRQUVELE9BQU8sRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLENBQUM7S0FDbEM7SUFFRDs7T0FFRztJQUNJLFNBQVMsQ0FBQyxRQUF3QjtRQUN2QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQ2YsUUFBUSxFQUNSLEtBQUssQ0FBQyxpQkFBaUIsRUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FDZCxDQUFDO0tBQ0g7SUFFRDs7T0FFRztJQUNJLFVBQVUsQ0FBQyxRQUF3QjtRQUN4QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQ2YsUUFBUSxFQUNSLEtBQUssQ0FBQyxrQkFBa0IsRUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FDZCxDQUFDO0tBQ0g7SUFFRDs7T0FFRztJQUNJLGNBQWMsQ0FBQyxRQUF3QjtRQUM1QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQ2YsUUFBUSxFQUNSLEtBQUssQ0FBQyx1QkFBdUIsRUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FDZCxDQUFDO0tBQ0g7SUFFRDs7O09BR0c7SUFDSyxLQUFLLENBQ1gsT0FBdUIsRUFDdkIsWUFBc0IsRUFDdEIsV0FBbUIsRUFDbkIsR0FBRyxpQkFBeUM7UUFDNUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxXQUFXLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxTQUFTLENBQUMsQ0FBQztRQUV0RixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDO1lBQy9DLE9BQU87WUFDUCxPQUFPLEVBQUUsWUFBWTtZQUNyQixZQUFZLEVBQUUsU0FBUztZQUN2QixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUMsQ0FBQztRQUVILE9BQU8sS0FBSyxDQUFDO0tBQ2Q7Q0FDRjtBQWtERDs7R0FFRztBQUNILElBQVksZUFLWDtBQUxELFdBQVksZUFBZTtJQUN6Qjs7T0FFRztJQUNILHNDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFMVyxlQUFlLCtCQUFmLGVBQWUsUUFLMUI7QUFrQkQ7O0dBRUc7QUFDSCxJQUFZLE1BU1g7QUFURCxXQUFZLE1BQU07SUFDaEI7O09BRUc7SUFDSCw2QkFBbUIsQ0FBQTtJQUNuQjs7T0FFRztJQUNILCtCQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFUVyxNQUFNLHNCQUFOLE1BQU0sUUFTakI7QUFFRDs7R0FFRztBQUNILE1BQWEsZ0JBQWdCOztJQUMzQjs7T0FFRztJQUNJLE1BQU0sQ0FBVSxRQUFRLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVuRTs7T0FFRztJQUNJLE1BQU0sQ0FBVSxJQUFJLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUUzRDs7T0FFRztJQUNJLE1BQU0sQ0FBVSxLQUFLLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUU3RDs7T0FFRztJQUNJLE1BQU0sQ0FBVSxHQUFHLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV6RDs7T0FFRztJQUNJLE1BQU0sQ0FBVSxJQUFJLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUUzRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFTO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxNQUFNLElBQUksOEJBQXVCLENBQy9CLG9CQUFvQixFQUNwQiwwQ0FBMEMsQ0FDM0MsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLElBQUksZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQzdDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBYTtRQUNsQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDM0MsTUFBTSxJQUFJLDhCQUF1QixDQUMvQixzQkFBc0IsRUFDdEIsNENBQTRDLENBQzdDLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxJQUFJLGdCQUFnQixDQUFDLFlBQVksS0FBSyxHQUFHLENBQUMsQ0FBQztLQUNuRDtJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQWE7UUFDNUIsT0FBTyxJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3BDO0lBRUQ7O09BRUc7SUFDYSxLQUFLLENBQVM7SUFFOUIsWUFBb0IsS0FBYTtRQUMvQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztLQUNwQjtJQUVEOztPQUVHO0lBQ0ksUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztLQUNuQjs7QUEvRUgsNENBZ0ZDO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGFBU1g7QUFURCxXQUFZLGFBQWE7SUFDdkI7O09BRUc7SUFDSCw0QkFBVyxDQUFBO0lBQ1g7O09BRUc7SUFDSCw4QkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQVRXLGFBQWEsNkJBQWIsYUFBYSxRQVN4QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxTQVNYO0FBVEQsV0FBWSxTQUFTO0lBQ25COztPQUVHO0lBQ0gsd0NBQTJCLENBQUE7SUFDM0I7O09BRUc7SUFDSCxzQ0FBeUIsQ0FBQTtBQUMzQixDQUFDLEVBVFcsU0FBUyx5QkFBVCxTQUFTLFFBU3BCO0FBZ1BEOztHQUVHO0lBRVUsS0FBSzs0QkFEakIsb0NBQWtCOzs7O3NCQUNRLFNBQVM7cUJBQWpCLFNBQVEsV0FBUzs7OztZQUFwQyw2S0F1UEM7Ozs7O1FBdFBDLHNDQUFzQztRQUMvQixNQUFNLENBQVUscUJBQXFCLEdBQVcsbUNBQW1DLENBQUM7UUFFM0Y7Ozs7OztXQU1HO1FBQ0ksTUFBTSxDQUFDLG1CQUFtQixDQUMvQixLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBc0I7Ozs7Ozs7Ozs7WUFFdEIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUNoQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRXpDLE1BQU0sTUFBTyxTQUFRLFNBQVM7Z0JBQ1osU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7Z0JBQzVCLFFBQVEsR0FBRyxRQUFRLENBQUM7Z0JBQ3BCLFdBQVcsQ0FBa0I7Z0JBQ25DLGdCQUFnQixHQUFZLEtBQUssQ0FBQztnQkFFNUM7O21CQUVHO2dCQUNJLE1BQU07b0JBQ1gsT0FBTyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQzthQUNGO1lBRUQsT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUMzQixrQkFBa0IsRUFBRSxRQUFRO2dCQUM1QixZQUFZLEVBQUUsUUFBUTthQUN2QixDQUFDLENBQUM7U0FDSjtRQUVEOzs7O1dBSUc7UUFDSSxNQUFNLENBQUMsaUJBQWlCLENBQUMsU0FBaUI7WUFDL0MsSUFBSSxTQUFTLElBQUksU0FBUyxJQUFJLFlBQUssQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDNUQsMkVBQTJFO2dCQUMzRSxPQUFPO1lBQ1QsQ0FBQztZQUVELE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztZQUU1QixvQkFBb0I7WUFDcEIsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNuRCxNQUFNLENBQUMsSUFBSSxDQUNULCtEQUErRCxDQUNoRSxDQUFDO1lBQ0osQ0FBQztZQUVELDJCQUEyQjtZQUMzQixNQUFNLG1CQUFtQixHQUFHLFlBQVksQ0FBQztZQUN6QyxNQUFNLHVCQUF1QixHQUFHLFVBQVUsQ0FBQztZQUUzQyxNQUFNLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUM5RCxJQUFJLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQ1QsaUZBQWlGO29CQUMvRSxhQUFhLGdCQUFnQixDQUFDLEtBQUssR0FBRyxDQUN6QyxDQUFDO1lBQ0osQ0FBQztZQUVELDRCQUE0QjtZQUM1QixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN2RCxNQUFNLENBQUMsSUFBSSxDQUNULHFFQUFxRSxDQUN0RSxDQUFDO1lBQ0osQ0FBQztZQUNELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDMUUsTUFBTSxDQUFDLElBQUksQ0FDVCxrRUFDRSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQ3JCLEdBQUcsQ0FDSixDQUFDO1lBQ0osQ0FBQztZQUVELElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxJQUFJLDhCQUF1QixDQUMvQixrQkFBa0IsRUFDbEIsaUNBQWlDLFNBQVMsSUFBSSxRQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFHLENBQUMsRUFBRSxDQUN2RSxDQUFDO1lBQ0osQ0FBQztTQUNGO1FBRUQ7O1dBRUc7UUFDYSxRQUFRLENBQVM7UUFFakM7OztXQUdHO1FBQ2MsU0FBUyxDQUFXO1FBRXJDOztXQUVHO1FBQ2EsYUFBYSxDQUFhO1FBRTFDOztXQUVHO1FBQ2EsU0FBUyxDQUFTO1FBRWxDOztXQUVHO1FBQ2EsU0FBUyxDQUFhO1FBRXRDOztXQUVHO1FBQ2EsV0FBVyxDQUFrQjtRQUVuQyxnQkFBZ0IsR0FBWSxJQUFJLENBQUM7UUFFM0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFpQjtZQUN6RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQzs7Ozs7O21EQS9IWixLQUFLOzs7O1lBaUlkLG1DQUFtQztZQUNuQyxJQUFBLHdDQUFvQixFQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUVsQyxJQUFJLEtBQUssQ0FBQyxlQUFlLElBQUksS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUNuRCxNQUFNLElBQUksOEJBQXVCLENBQy9CLHdCQUF3QixFQUN4QiwrRkFBK0YsQ0FDaEcsQ0FBQztZQUNKLENBQUM7WUFFRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRXpDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSx1QkFBUSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUU7Z0JBQ3RDLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztnQkFDMUIsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlO2dCQUN0QyxjQUFjLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsY0FBYztnQkFDMUQsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsYUFBYTtnQkFDeEMsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO2dCQUM1QixlQUFlLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUM7Z0JBQ2pFLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxrQkFBa0I7Z0JBQzVDLGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVM7YUFDM0QsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztZQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO1lBQzVDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUM7WUFDbEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3pDO1FBRUQ7O1dBRUc7UUFDSyxvQkFBb0IsQ0FBQyxRQUFrQztZQUM3RCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2QsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQztZQUVELE9BQU87Z0JBQ0wsYUFBYSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO2dCQUM5RCxvQkFBb0IsRUFBRSxRQUFRLENBQUMsb0JBQW9CO29CQUNqRCxDQUFDLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQztvQkFDL0QsQ0FBQyxDQUFDLFNBQVM7Z0JBQ2IsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLGdCQUFnQjtvQkFDekMsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7b0JBQ3ZELENBQUMsQ0FBQyxTQUFTO2dCQUNiLGVBQWUsRUFBRSxRQUFRLENBQUMsZUFBZTtvQkFDdkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDO29CQUNyRCxDQUFDLENBQUMsU0FBUzthQUNkLENBQUM7U0FDSDtRQUVEOztXQUVHO1FBQ0ssa0JBQWtCLENBQUMsTUFBNkI7WUFDdEQsT0FBTztnQkFDTCxlQUFlLEVBQUUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNwRCxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7b0JBQ2hCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtvQkFDaEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssU0FBUyxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDakUsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssU0FBUyxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQztpQkFDaEQsQ0FBQyxDQUFDO2FBQ0osQ0FBQztTQUNIO1FBRUQ7O1dBRUc7UUFDSyx5QkFBeUIsQ0FBQyxJQUEwQjtZQUMxRCxPQUFPO2dCQUNMLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3pELE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2hDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtvQkFDeEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSztvQkFDaEMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO29CQUNoQixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUMvRCxDQUFDLENBQUM7YUFDSixDQUFDO1NBQ0g7UUFFRDs7V0FFRztRQUNLLHFCQUFxQixDQUFDLFNBQTJCO1lBQ3ZELE9BQU87Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEtBQUssU0FBUyxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDdEUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDckMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO29CQUN4QixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLO29CQUNoQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7b0JBQzFCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztpQkFDM0IsQ0FBQyxDQUFDO2FBQ0osQ0FBQztTQUNIO1FBRUQ7O1dBRUc7UUFDSyxvQkFBb0IsQ0FBQyxlQUFxQztZQUNoRSxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO1lBQy9FLElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxJQUFJLDhCQUF1QixDQUMvQiwyQkFBMkIsRUFDM0Isa0RBQWtELENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUMzRixDQUFDO1lBQ0osQ0FBQztZQUVELE9BQU8sZUFBZSxDQUFDLE1BQU0sQ0FDM0IsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNmLEdBQUcsR0FBRztnQkFDTixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSzthQUN6QixDQUFDLEVBQ0YsRUFBNEIsQ0FDN0IsQ0FBQztTQUNIOztZQXRQVSx1REFBSzs7Ozs7QUFBTCxzQkFBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVPTCB9IGZyb20gJ29zJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENmblRhYmxlLCBDZm5UYWJsZVBvbGljeSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zM3RhYmxlcyc7XG5pbXBvcnQgdHlwZSB7XG4gIElSZXNvdXJjZSxcbiAgSVRhZ2dhYmxlVjIsXG4gIFJlbW92YWxQb2xpY3ksXG4gIFRhZ01hbmFnZXIsXG59IGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHtcbiAgUmVzb3VyY2UsXG4gIFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yLFxuICBUb2tlbixcbn0gZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHR5cGUgeyBJTmFtZXNwYWNlIH0gZnJvbSAnLi9uYW1lc3BhY2UnO1xuaW1wb3J0ICogYXMgcGVybXMgZnJvbSAnLi9wZXJtaXNzaW9ucyc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBTMyBUYWJsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJVGFibGUgZXh0ZW5kcyBJUmVzb3VyY2Uge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGlzIHRhYmxlLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSB0YWJsZUFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGlzIHRhYmxlLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSB0YWJsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFjY291bnRJZCBjb250YWluaW5nIHRoaXMgdGFibGUuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZWdpb24gY29udGFpbmluZyB0aGlzIHRhYmxlLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSByZWdpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBzdGF0ZW1lbnQgdG8gdGhlIHJlc291cmNlIHBvbGljeSBmb3IgYSBwcmluY2lwYWwgKGkuZS5cbiAgICogYWNjb3VudC9yb2xlL3NlcnZpY2UpIHRvIHBlcmZvcm0gYWN0aW9ucyBvbiB0aGlzIHRhYmxlLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhlIHBvbGljeSBzdGF0ZW1lbnQgbWF5IG9yIG1heSBub3QgYmUgYWRkZWQgdG8gdGhlIHBvbGljeS5cbiAgICogRm9yIGV4YW1wbGUsIHdoZW4gYW4gYElUYWJsZWAgaXMgY3JlYXRlZCBmcm9tIGFuIGV4aXN0aW5nIHRhYmxlLFxuICAgKiBpdCdzIG5vdCBwb3NzaWJsZSB0byB0ZWxsIHdoZXRoZXIgdGhlIHRhYmxlIGFscmVhZHkgaGFzIGEgcG9saWN5XG4gICAqIGF0dGFjaGVkLCBsZXQgYWxvbmUgdG8gcmUtdXNlIHRoYXQgcG9saWN5IHRvIGFkZCBtb3JlIHN0YXRlbWVudHMgdG8gaXQuXG4gICAqIFNvIGl0J3Mgc2FmZXN0IHRvIGRvIG5vdGhpbmcgaW4gdGhlc2UgY2FzZXMuXG4gICAqXG4gICAqIEBwYXJhbSBzdGF0ZW1lbnQgdGhlIHBvbGljeSBzdGF0ZW1lbnQgdG8gYmUgYWRkZWQgdG8gdGhlIHRhYmxlJ3NcbiAgICogcG9saWN5LlxuICAgKiBAcmV0dXJucyBtZXRhZGF0YSBhYm91dCB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgbWV0aG9kLiBJZiB0aGUgcG9saWN5XG4gICAqIHdhcyBub3QgYWRkZWQsIHRoZSB2YWx1ZSBvZiBgc3RhdGVtZW50QWRkZWRgIHdpbGwgYmUgYGZhbHNlYC4gWW91XG4gICAqIHNob3VsZCBhbHdheXMgY2hlY2sgdGhpcyB2YWx1ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgb3BlcmF0aW9uIHdhc1xuICAgKiBhY3R1YWxseSBjYXJyaWVkIG91dC4gT3RoZXJ3aXNlLCBzeW50aGVzaXMgYW5kIGRlcGxveSB3aWxsIHRlcm1pbmF0ZVxuICAgKiBzaWxlbnRseSwgd2hpY2ggbWF5IGJlIGNvbmZ1c2luZy5cbiAgICovXG4gIGFkZFRvUmVzb3VyY2VQb2xpY3koc3RhdGVtZW50OiBpYW0uUG9saWN5U3RhdGVtZW50KTogaWFtLkFkZFRvUmVzb3VyY2VQb2xpY3lSZXN1bHQ7XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgcGVybWlzc2lvbnMgZm9yIHRoaXMgdGFibGUgdG8gYW4gSUFNIHByaW5jaXBhbCAoUm9sZS9Hcm91cC9Vc2VyKS5cbiAgICpcbiAgICogSWYgdGhlIHBhcmVudCBUYWJsZUJ1Y2tldCBvZiB0aGlzIHRhYmxlIGhhcyBlbmNyeXB0aW9uLFxuICAgKiB5b3Ugc2hvdWxkIGdyYW50IGttczpEZWNyeXB0IHBlcm1pc3Npb24gdG8gdXNlIHRoaXMga2V5IHRvIHRoZSBzYW1lIHByaW5jaXBhbC5cbiAgICpcbiAgICogQHBhcmFtIGlkZW50aXR5IFRoZSBwcmluY2lwYWwgdG8gYWxsb3cgcmVhZCBwZXJtaXNzaW9ucyB0b1xuICAgKi9cbiAgZ3JhbnRSZWFkKGlkZW50aXR5OiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogR3JhbnQgd3JpdGUgcGVybWlzc2lvbnMgZm9yIHRoaXMgdGFibGUgdG8gYW4gSUFNIHByaW5jaXBhbCAoUm9sZS9Hcm91cC9Vc2VyKS5cbiAgICpcbiAgICogSWYgdGhlIHBhcmVudCBUYWJsZUJ1Y2tldCBvZiB0aGlzIHRhYmxlIGhhcyBlbmNyeXB0aW9uLFxuICAgKiB5b3Ugc2hvdWxkIGdyYW50IGttczpHZW5lcmF0ZURhdGFLZXkgYW5kIGttczpEZWNyeXB0IHBlcm1pc3Npb25cbiAgICogdG8gdXNlIHRoaXMga2V5IHRvIHRoZSBzYW1lIHByaW5jaXBhbC5cbiAgICpcbiAgICogQHBhcmFtIGlkZW50aXR5IFRoZSBwcmluY2lwYWwgdG8gYWxsb3cgd3JpdGUgcGVybWlzc2lvbnMgdG9cbiAgICovXG4gIGdyYW50V3JpdGUoaWRlbnRpdHk6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBHcmFudCByZWFkIGFuZCB3cml0ZSBwZXJtaXNzaW9ucyBmb3IgdGhpcyB0YWJsZSB0byBhbiBJQU0gcHJpbmNpcGFsIChSb2xlL0dyb3VwL1VzZXIpLlxuICAgKlxuICAgKiBJZiB0aGUgcGFyZW50IFRhYmxlQnVja2V0IG9mIHRoaXMgdGFibGUgaGFzIGVuY3J5cHRpb24sXG4gICAqIHlvdSBzaG91bGQgZ3JhbnQga21zOkdlbmVyYXRlRGF0YUtleSBhbmQga21zOkRlY3J5cHQgcGVybWlzc2lvblxuICAgKiB0byB1c2UgdGhpcyBrZXkgdG8gdGhlIHNhbWUgcHJpbmNpcGFsLlxuICAgKlxuICAgKiBAcGFyYW0gaWRlbnRpdHkgVGhlIHByaW5jaXBhbCB0byBhbGxvdyByZWFkIGFuZCB3cml0ZSBwZXJtaXNzaW9ucyB0b1xuICAgKi9cbiAgZ3JhbnRSZWFkV3JpdGUoaWRlbnRpdHk6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIFRhYmxlIGltcGxlbWVudGF0aW9ucy5cbiAqL1xuYWJzdHJhY3QgY2xhc3MgVGFibGVCYXNlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJVGFibGUge1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdGFibGVOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB0YWJsZUFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgcG9saWN5IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRhYmxlLlxuICAgKlxuICAgKiBJZiBgYXV0b0NyZWF0ZVBvbGljeWAgaXMgdHJ1ZSwgYSBgVGFibGVQb2xpY3lgIHdpbGwgYmUgY3JlYXRlZCB1cG9uIHRoZVxuICAgKiBmaXJzdCBjYWxsIHRvIGFkZFRvUmVzb3VyY2VQb2xpY3kocykuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgdGFibGVQb2xpY3k/OiBDZm5UYWJsZVBvbGljeTtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIGEgdGFibGUgcmVzb3VyY2UgcG9saWN5IHNob3VsZCBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgdXBvblxuICAgKiB0aGUgZmlyc3QgY2FsbCB0byBgYWRkVG9SZXNvdXJjZVBvbGljeWAuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgYXV0b0NyZWF0ZVBvbGljeTogYm9vbGVhbjtcblxuICBwdWJsaWMgYWRkVG9SZXNvdXJjZVBvbGljeShcbiAgICBzdGF0ZW1lbnQ6IGlhbS5Qb2xpY3lTdGF0ZW1lbnQsXG4gICk6IGlhbS5BZGRUb1Jlc291cmNlUG9saWN5UmVzdWx0IHtcbiAgICBpZiAoIXRoaXMudGFibGVQb2xpY3kgJiYgdGhpcy5hdXRvQ3JlYXRlUG9saWN5KSB7XG4gICAgICB0aGlzLnRhYmxlUG9saWN5ID0gbmV3IENmblRhYmxlUG9saWN5KHRoaXMsICdEZWZhdWx0UG9saWN5Jywge1xuICAgICAgICB0YWJsZUFybjogdGhpcy50YWJsZUFybixcbiAgICAgICAgcmVzb3VyY2VQb2xpY3k6IG5ldyBpYW0uUG9saWN5RG9jdW1lbnQoe30pLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGFibGVQb2xpY3kpIHtcbiAgICAgIHRoaXMudGFibGVQb2xpY3kucmVzb3VyY2VQb2xpY3kuYWRkU3RhdGVtZW50cyhzdGF0ZW1lbnQpO1xuICAgICAgcmV0dXJuIHsgc3RhdGVtZW50QWRkZWQ6IHRydWUsIHBvbGljeURlcGVuZGFibGU6IHRoaXMudGFibGVQb2xpY3kgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBzdGF0ZW1lbnRBZGRlZDogZmFsc2UgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICovXG4gIHB1YmxpYyBncmFudFJlYWQoaWRlbnRpdHk6IGlhbS5JR3JhbnRhYmxlKSB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoXG4gICAgICBpZGVudGl0eSxcbiAgICAgIHBlcm1zLlRBQkxFX1JFQURfQUNDRVNTLFxuICAgICAgdGhpcy50YWJsZUFybixcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKi9cbiAgcHVibGljIGdyYW50V3JpdGUoaWRlbnRpdHk6IGlhbS5JR3JhbnRhYmxlKSB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoXG4gICAgICBpZGVudGl0eSxcbiAgICAgIHBlcm1zLlRBQkxFX1dSSVRFX0FDQ0VTUyxcbiAgICAgIHRoaXMudGFibGVBcm4sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICovXG4gIHB1YmxpYyBncmFudFJlYWRXcml0ZShpZGVudGl0eTogaWFtLklHcmFudGFibGUpIHtcbiAgICByZXR1cm4gdGhpcy5ncmFudChcbiAgICAgIGlkZW50aXR5LFxuICAgICAgcGVybXMuVEFCTEVfUkVBRF9XUklURV9BQ0NFU1MsXG4gICAgICB0aGlzLnRhYmxlQXJuLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHRoZSBnaXZlbiBzM3RhYmxlcyBwZXJtaXNzaW9ucyB0byB0aGUgcHJvdmlkZWQgcHJpbmNpcGFsXG4gICAqIEByZXR1cm5zIEdyYW50IG9iamVjdFxuICAgKi9cbiAgcHJpdmF0ZSBncmFudChcbiAgICBncmFudGVlOiBpYW0uSUdyYW50YWJsZSxcbiAgICB0YWJsZUFjdGlvbnM6IHN0cmluZ1tdLFxuICAgIHJlc291cmNlQXJuOiBzdHJpbmcsXG4gICAgLi4ub3RoZXJSZXNvdXJjZUFybnM6IChzdHJpbmcgfCB1bmRlZmluZWQpW10pIHtcbiAgICBjb25zdCByZXNvdXJjZXMgPSBbcmVzb3VyY2VBcm4sIC4uLm90aGVyUmVzb3VyY2VBcm5zXS5maWx0ZXIoYXJuID0+IGFybiAhPSB1bmRlZmluZWQpO1xuXG4gICAgY29uc3QgZ3JhbnQgPSBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWxPclJlc291cmNlKHtcbiAgICAgIGdyYW50ZWUsXG4gICAgICBhY3Rpb25zOiB0YWJsZUFjdGlvbnMsXG4gICAgICByZXNvdXJjZUFybnM6IHJlc291cmNlcyxcbiAgICAgIHJlc291cmNlOiB0aGlzLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdyYW50O1xuICB9XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYSBuZXcgUzMgVGFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVQcm9wcyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoaXMgdGFibGUsIHVuaXF1ZSB3aXRoaW4gdGhlIG5hbWVzcGFjZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFibGVOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbmFtZXNwYWNlIHVuZGVyIHdoaWNoIHRoaXMgdGFibGUgaXMgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlOiBJTmFtZXNwYWNlO1xuICAvKipcbiAgICogRm9ybWF0IG9mIHRoaXMgdGFibGUuIEN1cnJlbnRseSwgdGhlIG9ubHkgc3VwcG9ydGVkIHZhbHVlIGlzIE9wZW5UYWJsZUZvcm1hdC5JQ0VCRVJHLlxuICAgKi9cbiAgcmVhZG9ubHkgb3BlblRhYmxlRm9ybWF0OiBPcGVuVGFibGVGb3JtYXQ7XG4gIC8qKlxuICAgKiBTZXR0aW5ncyBnb3Zlcm5pbmcgdGhlIENvbXBhY3Rpb24gbWFpbnRlbmFuY2UgYWN0aW9uLlxuICAgKiBAZGVmYXVsdCBBbWF6b24gUzMgc2VsZWN0cyB0aGUgYmVzdCBjb21wYWN0aW9uIHN0cmF0ZWd5IGJhc2VkIG9uIHlvdXIgdGFibGUgc29ydCBvcmRlci5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9zMy10YWJsZXMtbWFpbnRlbmFuY2UuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgY29tcGFjdGlvbj86IENvbXBhY3Rpb25Qcm9wZXJ0eTtcbiAgLyoqXG4gICAqIENvbnRhaW5zIGRldGFpbHMgYWJvdXQgdGhlIG1ldGFkYXRhIGZvciBhbiBJY2ViZXJnIHRhYmxlLlxuICAgKiBAZGVmYXVsdCB0YWJsZSBpcyBjcmVhdGVkIHdpdGhvdXQgYW55IG1ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBpY2ViZXJnTWV0YWRhdGE/OiBJY2ViZXJnTWV0YWRhdGFQcm9wZXJ0eTtcbiAgLyoqXG4gICAqIENvbnRhaW5zIGRldGFpbHMgYWJvdXQgdGhlIHNuYXBzaG90IG1hbmFnZW1lbnQgc2V0dGluZ3MgZm9yIGFuIEljZWJlcmcgdGFibGUuXG4gICAqIEBkZWZhdWx0IGVuYWJsZWQ6IE1pbmltdW1TbmFwc2hvdHMgaXMgMSBieSBkZWZhdWx0IGFuZCBNYXhpbXVtU25hcHNob3RBZ2UgaXMgMTIwIGhvdXJzIGJ5IGRlZmF1bHQuXG4gICAqL1xuICByZWFkb25seSBzbmFwc2hvdE1hbmFnZW1lbnQ/OiBTbmFwc2hvdE1hbmFnZW1lbnRQcm9wZXJ0eTtcbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoYXQgaGFwcGVucyB0byB0aGlzIHRhYmxlIGl0IGl0IHN0b3BlZCBiZWluZyBtYW5hZ2VkIGJ5IGNsb3VkZm9ybWF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBSRVRBSU5cbiAgICovXG4gIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k/OiBSZW1vdmFsUG9saWN5O1xuICAvKipcbiAgICogSWYgdHJ1ZSwgaW5kaWNhdGVzIHRoYXQgeW91IGRvbid0IHdhbnQgdG8gc3BlY2lmeSBhIHNjaGVtYSBmb3IgdGhlIHRhYmxlLlxuICAgKlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSB0byAnSWNlYmVyZ01ldGFkYXRhJy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHdpdGhvdXRNZXRhZGF0YT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogU3VwcG9ydGVkIG9wZW4gdGFibGUgZm9ybWF0cy5cbiAqL1xuZXhwb3J0IGVudW0gT3BlblRhYmxlRm9ybWF0IHtcbiAgLyoqXG4gICAqIEFwYWNoZSBJY2ViZXJnIHRhYmxlIGZvcm1hdC5cbiAgICovXG4gIElDRUJFUkcgPSAnSUNFQkVSRycsXG59XG5cbi8qKlxuICogU2V0dGluZ3MgZ292ZXJuaW5nIHRoZSBDb21wYWN0aW9uIG1haW50ZW5hbmNlIGFjdGlvbi5cbiAqXG4gKiBAZGVmYXVsdCAtIE5vIGNvbXBhY3Rpb24gc2V0dGluZ3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wYWN0aW9uUHJvcGVydHkge1xuICAvKipcbiAgICogU3RhdHVzIG9mIHRoZSBjb21wYWN0aW9uIG1haW50ZW5hbmNlIGFjdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1czogU3RhdHVzO1xuICAvKipcbiAgICogVGFyZ2V0IGZpbGUgc2l6ZSBpbiBtZWdhYnl0ZXMgZm9yIGNvbXBhY3Rpb24uXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRGaWxlU2l6ZU1iOiBudW1iZXI7XG59XG5cbi8qKlxuICogU3RhdHVzIHZhbHVlcyBmb3IgbWFpbnRlbmFuY2UgYWN0aW9ucy5cbiAqL1xuZXhwb3J0IGVudW0gU3RhdHVzIHtcbiAgLyoqXG4gICAqIEVuYWJsZSB0aGUgbWFpbnRlbmFuY2UgYWN0aW9uLlxuICAgKi9cbiAgRU5BQkxFRCA9ICdlbmFibGVkJyxcbiAgLyoqXG4gICAqIERpc2FibGUgdGhlIG1haW50ZW5hbmNlIGFjdGlvbi5cbiAgICovXG4gIERJU0FCTEVEID0gJ2Rpc2FibGVkJyxcbn1cblxuLyoqXG4gKiBJY2ViZXJnIHRyYW5zZm9ybSB2YWx1ZXMgZm9yIHBhcnRpdGlvbiBhbmQgc29ydCBmaWVsZHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBJY2ViZXJnVHJhbnNmb3JtIHtcbiAgLyoqXG4gICAqIFVzZSB0aGUgY29sdW1uIHZhbHVlIGFzIHRoZSB0cmFuc2Zvcm0gdmFsdWUgd2l0aG91dCB0cmFuc2Zvcm1hdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSURFTlRJVFkgPSBuZXcgSWNlYmVyZ1RyYW5zZm9ybSgnaWRlbnRpdHknKTtcblxuICAvKipcbiAgICogVHJhbnNmb3JtIGEgdGltZXN0YW1wL2RhdGUgZmllbGQgdG8geWVhci5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgWUVBUiA9IG5ldyBJY2ViZXJnVHJhbnNmb3JtKCd5ZWFyJyk7XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSBhIHRpbWVzdGFtcC9kYXRlIGZpZWxkIHRvIG1vbnRoLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNT05USCA9IG5ldyBJY2ViZXJnVHJhbnNmb3JtKCdtb250aCcpO1xuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm0gYSB0aW1lc3RhbXAvZGF0ZSBmaWVsZCB0byBkYXkuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERBWSA9IG5ldyBJY2ViZXJnVHJhbnNmb3JtKCdkYXknKTtcblxuICAvKipcbiAgICogVHJhbnNmb3JtIGEgdGltZXN0YW1wIGZpZWxkIHRvIGhvdXIuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEhPVVIgPSBuZXcgSWNlYmVyZ1RyYW5zZm9ybSgnaG91cicpO1xuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm0gdmFsdWVzIGludG8gYSBmaXhlZCBudW1iZXIgb2YgYnVja2V0cy5cbiAgICpcbiAgICogQHBhcmFtIG4gVGhlIG51bWJlciBvZiBidWNrZXRzIChtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcilcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYnVja2V0KG46IG51bWJlcik6IEljZWJlcmdUcmFuc2Zvcm0ge1xuICAgIGlmIChuIDw9IDAgfHwgIU51bWJlci5pc0ludGVnZXIobikpIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgJ0ludmFsaWRCdWNrZXRDb3VudCcsXG4gICAgICAgICdCdWNrZXQgY291bnQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIuJyxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgSWNlYmVyZ1RyYW5zZm9ybShgYnVja2V0WyR7bn1dYCk7XG4gIH1cblxuICAvKipcbiAgICogVHJ1bmNhdGUgdmFsdWVzIHRvIGEgZml4ZWQgd2lkdGguXG4gICAqXG4gICAqIEBwYXJhbSB3aWR0aCBUaGUgdHJ1bmNhdGlvbiB3aWR0aCAobXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHRydW5jYXRlKHdpZHRoOiBudW1iZXIpOiBJY2ViZXJnVHJhbnNmb3JtIHtcbiAgICBpZiAod2lkdGggPD0gMCB8fCAhTnVtYmVyLmlzSW50ZWdlcih3aWR0aCkpIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgJ0ludmFsaWRUcnVuY2F0ZVdpZHRoJyxcbiAgICAgICAgJ1RydW5jYXRlIHdpZHRoIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLicsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEljZWJlcmdUcmFuc2Zvcm0oYHRydW5jYXRlWyR7d2lkdGh9XWApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGN1c3RvbSB0cmFuc2Zvcm0gZnJvbSBhIHN0cmluZyB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB0cmFuc2Zvcm0gc3RyaW5nIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBJY2ViZXJnVHJhbnNmb3JtIHtcbiAgICByZXR1cm4gbmV3IEljZWJlcmdUcmFuc2Zvcm0odmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlIHRyYW5zZm9ybS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRyYW5zZm9ybS5cbiAgICovXG4gIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogU29ydCBkaXJlY3Rpb24gdmFsdWVzIGZvciBJY2ViZXJnIHNvcnQgZmllbGRzLlxuICovXG5leHBvcnQgZW51bSBTb3J0RGlyZWN0aW9uIHtcbiAgLyoqXG4gICAqIFNvcnQgdmFsdWVzIGluIGFzY2VuZGluZyBvcmRlci5cbiAgICovXG4gIEFTQyA9ICdhc2MnLFxuICAvKipcbiAgICogU29ydCB2YWx1ZXMgaW4gZGVzY2VuZGluZyBvcmRlci5cbiAgICovXG4gIERFU0MgPSAnZGVzYycsXG59XG5cbi8qKlxuICogTnVsbCBvcmRlcmluZyB2YWx1ZXMgZm9yIEljZWJlcmcgc29ydCBmaWVsZHMuXG4gKi9cbmV4cG9ydCBlbnVtIE51bGxPcmRlciB7XG4gIC8qKlxuICAgKiBQbGFjZSBudWxsIHZhbHVlcyBiZWZvcmUgbm9uLW51bGwgdmFsdWVzLlxuICAgKi9cbiAgTlVMTFNfRklSU1QgPSAnbnVsbHMtZmlyc3QnLFxuICAvKipcbiAgICogUGxhY2UgbnVsbCB2YWx1ZXMgYWZ0ZXIgbm9uLW51bGwgdmFsdWVzLlxuICAgKi9cbiAgTlVMTFNfTEFTVCA9ICdudWxscy1sYXN0Jyxcbn1cblxuLyoqXG4gKiBQYXJ0aXRpb24gZmllbGQgZGVmaW5pdGlvbiBmb3IgSWNlYmVyZyB0YWJsZS5cbiAqXG4gKiBEZWZpbmVzIGEgc2luZ2xlIHBhcnRpdGlvbiBjb2x1bW4uIE11bHRpcGxlIHBhcnRpdGlvbiBmaWVsZHMgY2FuIGJlIGNvbWJpbmVkXG4gKiBpbiBhbiBJY2ViZXJnUGFydGl0aW9uU3BlYyB0byBjcmVhdGUgbXVsdGktbGV2ZWwgcGFydGl0aW9uaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEljZWJlcmdQYXJ0aXRpb25GaWVsZCB7XG4gIC8qKlxuICAgKiBUaGUgc291cmNlIGZpZWxkIElEIGZyb20gdGhlIHNjaGVtYS5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZUlkOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJ0aXRpb24gdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBVc2UgYEljZWJlcmdUcmFuc2Zvcm1gIHN0YXRpYyBwcm9wZXJ0aWVzIGZvciBjb21tb24gdHJhbnNmb3JtcyAoZS5nLiwgYEljZWJlcmdUcmFuc2Zvcm0uSURFTlRJVFlgKVxuICAgKiBvciBtZXRob2RzIGZvciBwYXJhbWV0ZXJpemVkIHRyYW5zZm9ybXMgKGUuZy4sIGBJY2ViZXJnVHJhbnNmb3JtLmJ1Y2tldCgxNilgKS5cbiAgICovXG4gIHJlYWRvbmx5IHRyYW5zZm9ybTogSWNlYmVyZ1RyYW5zZm9ybTtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBwYXJ0aXRpb24gZmllbGQuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHBhcnRpdGlvbiBmaWVsZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBBdXRvLWFzc2lnbmVkIHN0YXJ0aW5nIGZyb20gMTAwMFxuICAgKi9cbiAgcmVhZG9ubHkgZmllbGRJZD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQYXJ0aXRpb24gc3BlY2lmaWNhdGlvbiBmb3IgSWNlYmVyZyB0YWJsZS5cbiAqXG4gKiBDb250YWlucyB0aGUgY29tcGxldGUgcGFydGl0aW9uaW5nIGNvbmZpZ3VyYXRpb24gZm9yIGEgdGFibGUsIGluY2x1ZGluZyBhbGwgcGFydGl0aW9uIGZpZWxkcy5cbiAqIFVzZSB0aGlzIHRvIGRlZmluZSBtdWx0aS1sZXZlbCBwYXJ0aXRpb25pbmcgKGUuZy4sIHBhcnRpdGlvbiBieSBkYXRlLCB0aGVuIGJ5IHJlZ2lvbikuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWNlYmVyZ1BhcnRpdGlvblNwZWMge1xuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgcGFydGl0aW9uIGZpZWxkcy5cbiAgICovXG4gIHJlYWRvbmx5IGZpZWxkczogSWNlYmVyZ1BhcnRpdGlvbkZpZWxkW107XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHBhcnRpdGlvbiBzcGVjaWZpY2F0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICByZWFkb25seSBzcGVjSWQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogU29ydCBmaWVsZCBkZWZpbml0aW9uIGZvciBJY2ViZXJnIHRhYmxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEljZWJlcmdTb3J0RmllbGQge1xuICAvKipcbiAgICogVGhlIHNvdXJjZSBmaWVsZCBJRCBmcm9tIHRoZSBzY2hlbWEuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VJZDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc29ydCB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gICAqXG4gICAqIFVzZSBgSWNlYmVyZ1RyYW5zZm9ybWAgc3RhdGljIHByb3BlcnRpZXMgZm9yIGNvbW1vbiB0cmFuc2Zvcm1zIChlLmcuLCBgSWNlYmVyZ1RyYW5zZm9ybS5JREVOVElUWWApXG4gICAqIG9yIG1ldGhvZHMgZm9yIHBhcmFtZXRlcml6ZWQgdHJhbnNmb3JtcyAoZS5nLiwgYEljZWJlcmdUcmFuc2Zvcm0uYnVja2V0KDE2KWApLlxuICAgKi9cbiAgcmVhZG9ubHkgdHJhbnNmb3JtOiBJY2ViZXJnVHJhbnNmb3JtO1xuXG4gIC8qKlxuICAgKiBUaGUgc29ydCBkaXJlY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBkaXJlY3Rpb246IFNvcnREaXJlY3Rpb247XG5cbiAgLyoqXG4gICAqIFRoZSBudWxsIG9yZGVyaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgbnVsbE9yZGVyOiBOdWxsT3JkZXI7XG59XG5cbi8qKlxuICogU29ydCBvcmRlciBzcGVjaWZpY2F0aW9uIGZvciBJY2ViZXJnIHRhYmxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEljZWJlcmdTb3J0T3JkZXIge1xuICAvKipcbiAgICogVGhlIGxpc3Qgb2Ygc29ydCBmaWVsZHMuXG4gICAqL1xuICByZWFkb25seSBmaWVsZHM6IEljZWJlcmdTb3J0RmllbGRbXTtcblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgc29ydCBvcmRlci5cbiAgICpcbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgcmVhZG9ubHkgb3JkZXJJZD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBIHNpbmdsZSB0YWJsZSBwcm9wZXJ0eSBrZXktdmFsdWUgcGFpciBmb3IgSWNlYmVyZyB0YWJsZSBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlUHJvcGVydHlFbnRyeSB7XG4gIC8qKlxuICAgKiBUaGUgcHJvcGVydHkga2V5LlxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udGFpbnMgZGV0YWlscyBhYm91dCB0aGUgbWV0YWRhdGEgZm9yIGFuIEljZWJlcmcgdGFibGUuXG4gKiBAc2VlIGh0dHA6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtczN0YWJsZXMtdGFibGUtaWNlYmVyZ21ldGFkYXRhLmh0bWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJY2ViZXJnTWV0YWRhdGFQcm9wZXJ0eSB7XG4gIC8qKlxuICAgKiBDb250YWlucyBkZXRhaWxzIGFib3V0IHRoZSBzY2hlbWEgZm9yIGFuIEljZWJlcmcgdGFibGUuXG4gICAqXG4gICAqIEBzZWUgaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1zM3RhYmxlcy10YWJsZS1pY2ViZXJnbWV0YWRhdGEuaHRtbCNjZm4tczN0YWJsZXMtdGFibGUtaWNlYmVyZ21ldGFkYXRhLWljZWJlcmdzY2hlbWFcbiAgICovXG4gIHJlYWRvbmx5IGljZWJlcmdTY2hlbWE6IEljZWJlcmdTY2hlbWFQcm9wZXJ0eTtcblxuICAvKipcbiAgICogVGhlIHBhcnRpdGlvbiBzcGVjaWZpY2F0aW9uIGZvciB0aGUgSWNlYmVyZyB0YWJsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBwYXJ0aXRpb24gc3BlY2lmaWNhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgaWNlYmVyZ1BhcnRpdGlvblNwZWM/OiBJY2ViZXJnUGFydGl0aW9uU3BlYztcblxuICAvKipcbiAgICogVGhlIHNvcnQgb3JkZXIgZm9yIHRoZSBJY2ViZXJnIHRhYmxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHNvcnQgb3JkZXJcbiAgICovXG4gIHJlYWRvbmx5IGljZWJlcmdTb3J0T3JkZXI/OiBJY2ViZXJnU29ydE9yZGVyO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gcHJvcGVydGllcyBmb3IgdGhlIEljZWJlcmcgdGFibGUuXG4gICAqIEVhY2ggZW50cnkgcmVwcmVzZW50cyBhIGtleS12YWx1ZSBwYWlyIGZvciBJY2ViZXJnIHRhYmxlIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gY3VzdG9tIHByb3BlcnRpZXNcbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlUHJvcGVydGllcz86IFRhYmxlUHJvcGVydHlFbnRyeVtdO1xufVxuXG4vKipcbiAqIENvbnRhaW5zIGRldGFpbHMgYWJvdXQgdGhlIHNjaGVtYSBmb3IgYW4gSWNlYmVyZyB0YWJsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJY2ViZXJnU2NoZW1hUHJvcGVydHkge1xuICAvKipcbiAgICogQ29udGFpbnMgZGV0YWlscyBhYm91dCB0aGUgc2NoZW1hIGZvciBhbiBJY2ViZXJnIHRhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2NoZW1hRmllbGRMaXN0OiBTY2hlbWFGaWVsZFByb3BlcnR5W107XG59XG5cbi8qKlxuICogQ29udGFpbnMgZGV0YWlscyBhYm91dCBhIHNjaGVtYSBmaWVsZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY2hlbWFGaWVsZFByb3BlcnR5IHtcbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGZpZWxkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEF1dG8tYXNzaWduZWQgYnkgUzMgVGFibGVzXG4gICAqL1xuICByZWFkb25seSBpZD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGZpZWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIEJvb2xlYW4gdmFsdWUgdGhhdCBzcGVjaWZpZXMgd2hldGhlciB2YWx1ZXMgYXJlIHJlcXVpcmVkIGZvciBlYWNoIHJvdyBpbiB0aGlzIGZpZWxkLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGlzIGlzIGBmYWxzZWAgYW5kIG51bGwgdmFsdWVzIGFyZSBhbGxvd2VkIGluIHRoZSBmaWVsZC4gSWYgdGhpcyBpcyBgdHJ1ZWAsIHRoZSBmaWVsZCBkb2VzIG5vdCBhbGxvdyBudWxsIHZhbHVlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGZpZWxkIHR5cGUuXG4gICAqXG4gICAqIFMzIFRhYmxlcyBzdXBwb3J0cyBhbGwgQXBhY2hlIEljZWJlcmcgcHJpbWl0aXZlIHR5cGVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBbQXBhY2hlIEljZWJlcmcgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9pY2ViZXJnLmFwYWNoZS5vcmcvc3BlYy8jcHJpbWl0aXZlLXR5cGVzKS5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb250YWlucyBkZXRhaWxzIGFib3V0IHRoZSBzbmFwc2hvdCBtYW5hZ2VtZW50IHNldHRpbmdzIGZvciBhbiBJY2ViZXJnIHRhYmxlLlxuICpcbiAqIEEgc25hcHNob3QgaXMgZXhwaXJlZCB3aGVuIGl0IGV4Y2VlZHMgTWluU25hcHNob3RzVG9LZWVwIGFuZCBNYXhTbmFwc2hvdEFnZUhvdXJzLlxuICpcbiAqIEBkZWZhdWx0IC0gTm8gc25hcHNob3QgbWFuYWdlbWVudCBzZXR0aW5nc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNuYXBzaG90TWFuYWdlbWVudFByb3BlcnR5IHtcbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIGFnZSBvZiBhIHNuYXBzaG90IGJlZm9yZSBpdCBjYW4gYmUgZXhwaXJlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBtYXhpbXVtIGFnZVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4U25hcHNob3RBZ2VIb3Vycz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIHNuYXBzaG90cyB0byBrZWVwLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIG1pbmltdW0gbnVtYmVyXG4gICAqL1xuICByZWFkb25seSBtaW5TbmFwc2hvdHNUb0tlZXA/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBTbmFwc2hvdE1hbmFnZW1lbnQgbWFpbnRlbmFuY2UgYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm90IHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzPzogU3RhdHVzO1xufVxuXG4vKipcbiAqIEEgcmVmZXJlbmNlIHRvIGEgdGFibGUgb3V0c2lkZSB0aGlzIHN0YWNrXG4gKlxuICogVGhlIHRhYmxlTmFtZSwgcmVnaW9uLCBhbmQgYWNjb3VudCBjYW4gYmUgcHJvdmlkZWQgZXhwbGljaXRseVxuICogb3Igd2lsbCBiZSBpbmZlcnJlZCBmcm9tIHRoZSB0YWJsZUFyblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoaXMgdGFibGVcbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGFibGUncyBBUk4uXG4gICAqL1xuICByZWFkb25seSB0YWJsZUFybjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIFMzIFRhYmxlIHdpdGggaGVscGVycy5cbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIFRhYmxlIGV4dGVuZHMgVGFibGVCYXNlIGltcGxlbWVudHMgSVRhZ2dhYmxlVjIge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1zM3RhYmxlcy1hbHBoYS5UYWJsZSc7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBUYWJsZSBjb25zdHJ1Y3QgdGhhdCByZXByZXNlbnRzIGFuIGV4dGVybmFsIHRhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHBhcmVudCBjcmVhdGluZyBjb25zdHJ1Y3QgKHVzdWFsbHkgYHRoaXNgKS5cbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QncyBuYW1lLlxuICAgKiBAcGFyYW0gYXR0cnMgQSBgVGFibGVBdHRyaWJ1dGVzYCBvYmplY3QgY29udGFpbmluZyB0aGUgdGFibGUgbmFtZSBhbmQgQVJOLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tVGFibGVBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogVGFibGVBdHRyaWJ1dGVzLFxuICApOiBJVGFibGUge1xuICAgIGNvbnN0IHRhYmxlQXJuID0gYXR0cnMudGFibGVBcm47XG4gICAgVGFibGUudmFsaWRhdGVUYWJsZU5hbWUoYXR0cnMudGFibGVOYW1lKTtcblxuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFRhYmxlQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdGFibGVOYW1lID0gYXR0cnMudGFibGVOYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHRhYmxlQXJuID0gdGFibGVBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdGFibGVQb2xpY3k/OiBDZm5UYWJsZVBvbGljeTtcbiAgICAgIHByb3RlY3RlZCBhdXRvQ3JlYXRlUG9saWN5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAgIC8qKlxuICAgICAgICogRXhwb3J0cyB0aGlzICBmcm9tIHRoZSBzdGFjay5cbiAgICAgICAqL1xuICAgICAgcHVibGljIGV4cG9ydCgpIHtcbiAgICAgICAgcmV0dXJuIGF0dHJzO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCwge1xuICAgICAgZW52aXJvbm1lbnRGcm9tQXJuOiB0YWJsZUFybixcbiAgICAgIHBoeXNpY2FsTmFtZTogdGFibGVBcm4sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL3MzLXRhYmxlcy1idWNrZXRzLW5hbWluZy5odG1sXG4gICAqIEBwYXJhbSB0YWJsZU5hbWUgTmFtZSBvZiB0aGUgdGFibGVcbiAgICogQHRocm93cyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvciBpZiBhbnkgbmFtaW5nIGVycm9ycyBhcmUgZGV0ZWN0ZWRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdmFsaWRhdGVUYWJsZU5hbWUodGFibGVOYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodGFibGVOYW1lID09IHVuZGVmaW5lZCB8fCBUb2tlbi5pc1VucmVzb2x2ZWQodGFibGVOYW1lKSkge1xuICAgICAgLy8gdGhlIG5hbWUgaXMgYSBsYXRlLWJvdW5kIHZhbHVlLCBub3QgYSBkZWZpbmVkIHN0cmluZywgc28gc2tpcCB2YWxpZGF0aW9uXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gTGVuZ3RoIHZhbGlkYXRpb25cbiAgICBpZiAodGFibGVOYW1lLmxlbmd0aCA8IDEgfHwgdGFibGVOYW1lLmxlbmd0aCA+IDI1NSkge1xuICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICdUYWJsZSBuYW1lIG11c3QgYmUgYXQgbGVhc3QgMSBhbmQgbm8gbW9yZSB0aGFuIDI1NSBjaGFyYWN0ZXJzJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQ2hhcmFjdGVyIHNldCB2YWxpZGF0aW9uXG4gICAgY29uc3QgaWxsZWdhbENoYXJzZXRSZWdFeCA9IC9bXmEtejAtOV9dLztcbiAgICBjb25zdCBhbGxvd2VkRWRnZUNoYXJzZXRSZWdFeCA9IC9bYS16MC05XS87XG5cbiAgICBjb25zdCBpbGxlZ2FsQ2hhck1hdGNoID0gdGFibGVOYW1lLm1hdGNoKGlsbGVnYWxDaGFyc2V0UmVnRXgpO1xuICAgIGlmIChpbGxlZ2FsQ2hhck1hdGNoKSB7XG4gICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgJ1RhYmxlIG5hbWUgbXVzdCBvbmx5IGNvbnRhaW4gbG93ZXJjYXNlIGNoYXJhY3RlcnMsIG51bWJlcnMsIGFuZCB1bmRlcnNjb3JlcyAoXyknICtcbiAgICAgICAgICBgIChvZmZzZXQ6ICR7aWxsZWdhbENoYXJNYXRjaC5pbmRleH0pYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRWRnZSBjaGFyYWN0ZXIgdmFsaWRhdGlvblxuICAgIGlmICghYWxsb3dlZEVkZ2VDaGFyc2V0UmVnRXgudGVzdCh0YWJsZU5hbWUuY2hhckF0KDApKSkge1xuICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICdUYWJsZSBuYW1lIG11c3Qgc3RhcnQgd2l0aCBhIGxvd2VyY2FzZSBsZXR0ZXIgb3IgbnVtYmVyIChvZmZzZXQ6IDApJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghYWxsb3dlZEVkZ2VDaGFyc2V0UmVnRXgudGVzdCh0YWJsZU5hbWUuY2hhckF0KHRhYmxlTmFtZS5sZW5ndGggLSAxKSkpIHtcbiAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICBgVGFibGUgbmFtZSBtdXN0IGVuZCB3aXRoIGEgbG93ZXJjYXNlIGxldHRlciBvciBudW1iZXIgKG9mZnNldDogJHtcbiAgICAgICAgICB0YWJsZU5hbWUubGVuZ3RoIC0gMVxuICAgICAgICB9KWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAnSW52YWxpZFRhYmxlTmFtZScsXG4gICAgICAgIGBJbnZhbGlkIFMzIHRhYmxlIG5hbWUgKHZhbHVlOiAke3RhYmxlTmFtZX0pJHtFT0x9JHtlcnJvcnMuam9pbihFT0wpfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChhcm4pIG9mIHRoaXMgdGFibGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YWJsZUFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5kZXJseWluZyBDZm5UYWJsZSBMMSByZXNvdXJjZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jlc291cmNlOiBDZm5UYWJsZTtcblxuICAvKipcbiAgICogVGhlIHRhZyBtYW5hZ2VyIGZvciB0aGlzIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNka1RhZ01hbmFnZXI6IFRhZ01hbmFnZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoaXMgdGFibGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YWJsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWVzcGFjZSBjb250YWluaW5nIHRoaXMgdGFibGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lc3BhY2U6IElOYW1lc3BhY2U7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBwb2xpY3kgZm9yIHRoaXMgdGFibGUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGFibGVQb2xpY3k/OiBDZm5UYWJsZVBvbGljeTtcblxuICBwcm90ZWN0ZWQgYXV0b0NyZWF0ZVBvbGljeTogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFRhYmxlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHt9KTtcblxuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgaWYgKHByb3BzLndpdGhvdXRNZXRhZGF0YSAmJiBwcm9wcy5pY2ViZXJnTWV0YWRhdGEpIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgJ011dHVhbGx5RXhjbHVzaXZlUHJvcHMnLFxuICAgICAgICBcIlRhYmxlUHJvcHM6ICd3aXRob3V0TWV0YWRhdGEnIGFuZCAnaWNlYmVyZ01ldGFkYXRhJyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiBTcGVjaWZ5IG9ubHkgb25lLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBUYWJsZS52YWxpZGF0ZVRhYmxlTmFtZShwcm9wcy50YWJsZU5hbWUpO1xuXG4gICAgdGhpcy5fcmVzb3VyY2UgPSBuZXcgQ2ZuVGFibGUodGhpcywgaWQsIHtcbiAgICAgIHRhYmxlTmFtZTogcHJvcHMudGFibGVOYW1lLFxuICAgICAgb3BlblRhYmxlRm9ybWF0OiBwcm9wcy5vcGVuVGFibGVGb3JtYXQsXG4gICAgICB0YWJsZUJ1Y2tldEFybjogcHJvcHMubmFtZXNwYWNlLnRhYmxlQnVja2V0LnRhYmxlQnVja2V0QXJuLFxuICAgICAgbmFtZXNwYWNlOiBwcm9wcy5uYW1lc3BhY2UubmFtZXNwYWNlTmFtZSxcbiAgICAgIGNvbXBhY3Rpb246IHByb3BzLmNvbXBhY3Rpb24sXG4gICAgICBpY2ViZXJnTWV0YWRhdGE6IHRoaXMuYnVpbGRJY2ViZXJnTWV0YWRhdGEocHJvcHMuaWNlYmVyZ01ldGFkYXRhKSxcbiAgICAgIHNuYXBzaG90TWFuYWdlbWVudDogcHJvcHMuc25hcHNob3RNYW5hZ2VtZW50LFxuICAgICAgd2l0aG91dE1ldGFkYXRhOiBwcm9wcy53aXRob3V0TWV0YWRhdGEgPyAnWWVzJyA6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIHRoaXMubmFtZXNwYWNlID0gcHJvcHMubmFtZXNwYWNlO1xuICAgIHRoaXMudGFibGVOYW1lID0gcHJvcHMudGFibGVOYW1lO1xuICAgIHRoaXMudGFibGVBcm4gPSB0aGlzLl9yZXNvdXJjZS5hdHRyVGFibGVBcm47XG4gICAgdGhpcy5jZGtUYWdNYW5hZ2VyID0gdGhpcy5fcmVzb3VyY2UuY2RrVGFnTWFuYWdlcjtcbiAgICB0aGlzLl9yZXNvdXJjZS5hcHBseVJlbW92YWxQb2xpY3kocHJvcHMucmVtb3ZhbFBvbGljeSk7XG4gICAgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5uYW1lc3BhY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgQ2xvdWRGb3JtYXRpb24gSWNlYmVyZyBtZXRhZGF0YSBwcm9wZXJ0eSBmcm9tIHRoZSBDREsgbWV0YWRhdGEgbW9kZWwuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkSWNlYmVyZ01ldGFkYXRhKG1ldGFkYXRhPzogSWNlYmVyZ01ldGFkYXRhUHJvcGVydHkpOiBDZm5UYWJsZS5JY2ViZXJnTWV0YWRhdGFQcm9wZXJ0eSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFtZXRhZGF0YSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWNlYmVyZ1NjaGVtYTogdGhpcy5idWlsZEljZWJlcmdTY2hlbWEobWV0YWRhdGEuaWNlYmVyZ1NjaGVtYSksXG4gICAgICBpY2ViZXJnUGFydGl0aW9uU3BlYzogbWV0YWRhdGEuaWNlYmVyZ1BhcnRpdGlvblNwZWNcbiAgICAgICAgPyB0aGlzLmJ1aWxkSWNlYmVyZ1BhcnRpdGlvblNwZWMobWV0YWRhdGEuaWNlYmVyZ1BhcnRpdGlvblNwZWMpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgaWNlYmVyZ1NvcnRPcmRlcjogbWV0YWRhdGEuaWNlYmVyZ1NvcnRPcmRlclxuICAgICAgICA/IHRoaXMuYnVpbGRJY2ViZXJnU29ydE9yZGVyKG1ldGFkYXRhLmljZWJlcmdTb3J0T3JkZXIpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgdGFibGVQcm9wZXJ0aWVzOiBtZXRhZGF0YS50YWJsZVByb3BlcnRpZXNcbiAgICAgICAgPyB0aGlzLmJ1aWxkVGFibGVQcm9wZXJ0aWVzKG1ldGFkYXRhLnRhYmxlUHJvcGVydGllcylcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIENsb3VkRm9ybWF0aW9uIEljZWJlcmcgc2NoZW1hIHByb3BlcnR5LlxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZEljZWJlcmdTY2hlbWEoc2NoZW1hOiBJY2ViZXJnU2NoZW1hUHJvcGVydHkpOiBDZm5UYWJsZS5JY2ViZXJnU2NoZW1hUHJvcGVydHkge1xuICAgIHJldHVybiB7XG4gICAgICBzY2hlbWFGaWVsZExpc3Q6IHNjaGVtYS5zY2hlbWFGaWVsZExpc3QubWFwKGZpZWxkID0+ICh7XG4gICAgICAgIG5hbWU6IGZpZWxkLm5hbWUsXG4gICAgICAgIHR5cGU6IGZpZWxkLnR5cGUsXG4gICAgICAgIC4uLihmaWVsZC5yZXF1aXJlZCAhPT0gdW5kZWZpbmVkICYmIHsgcmVxdWlyZWQ6IGZpZWxkLnJlcXVpcmVkIH0pLFxuICAgICAgICAuLi4oZmllbGQuaWQgIT09IHVuZGVmaW5lZCAmJiB7IGlkOiBmaWVsZC5pZCB9KSxcbiAgICAgIH0pKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgQ2xvdWRGb3JtYXRpb24gSWNlYmVyZyBwYXJ0aXRpb24gc3BlY2lmaWNhdGlvbiBwcm9wZXJ0eS5cbiAgICovXG4gIHByaXZhdGUgYnVpbGRJY2ViZXJnUGFydGl0aW9uU3BlYyhzcGVjOiBJY2ViZXJnUGFydGl0aW9uU3BlYyk6IENmblRhYmxlLkljZWJlcmdQYXJ0aXRpb25TcGVjUHJvcGVydHkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi4oc3BlYy5zcGVjSWQgIT09IHVuZGVmaW5lZCAmJiB7IHNwZWNJZDogc3BlYy5zcGVjSWQgfSksXG4gICAgICBmaWVsZHM6IHNwZWMuZmllbGRzLm1hcChmaWVsZCA9PiAoe1xuICAgICAgICBzb3VyY2VJZDogZmllbGQuc291cmNlSWQsXG4gICAgICAgIHRyYW5zZm9ybTogZmllbGQudHJhbnNmb3JtLnZhbHVlLFxuICAgICAgICBuYW1lOiBmaWVsZC5uYW1lLFxuICAgICAgICAuLi4oZmllbGQuZmllbGRJZCAhPT0gdW5kZWZpbmVkICYmIHsgZmllbGRJZDogZmllbGQuZmllbGRJZCB9KSxcbiAgICAgIH0pKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgQ2xvdWRGb3JtYXRpb24gSWNlYmVyZyBzb3J0IG9yZGVyIHByb3BlcnR5LlxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZEljZWJlcmdTb3J0T3JkZXIoc29ydE9yZGVyOiBJY2ViZXJnU29ydE9yZGVyKTogQ2ZuVGFibGUuSWNlYmVyZ1NvcnRPcmRlclByb3BlcnR5IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uKHNvcnRPcmRlci5vcmRlcklkICE9PSB1bmRlZmluZWQgJiYgeyBvcmRlcklkOiBzb3J0T3JkZXIub3JkZXJJZCB9KSxcbiAgICAgIGZpZWxkczogc29ydE9yZGVyLmZpZWxkcy5tYXAoZmllbGQgPT4gKHtcbiAgICAgICAgc291cmNlSWQ6IGZpZWxkLnNvdXJjZUlkLFxuICAgICAgICB0cmFuc2Zvcm06IGZpZWxkLnRyYW5zZm9ybS52YWx1ZSxcbiAgICAgICAgZGlyZWN0aW9uOiBmaWVsZC5kaXJlY3Rpb24sXG4gICAgICAgIG51bGxPcmRlcjogZmllbGQubnVsbE9yZGVyLFxuICAgICAgfSkpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIHRoZSBDbG91ZEZvcm1hdGlvbiB0YWJsZSBwcm9wZXJ0aWVzIG1hcCBmcm9tIGtleS12YWx1ZSBlbnRyaWVzLlxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZFRhYmxlUHJvcGVydGllcyh0YWJsZVByb3BlcnRpZXM6IFRhYmxlUHJvcGVydHlFbnRyeVtdKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3Qga2V5cyA9IHRhYmxlUHJvcGVydGllcy5tYXAoZW50cnkgPT4gZW50cnkua2V5KTtcbiAgICBjb25zdCBkdXBsaWNhdGVLZXlzID0ga2V5cy5maWx0ZXIoKGtleSwgaW5kZXgpID0+IGtleXMuaW5kZXhPZihrZXkpICE9PSBpbmRleCk7XG4gICAgaWYgKGR1cGxpY2F0ZUtleXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAnRHVwbGljYXRlVGFibGVQcm9wZXJ0eUtleScsXG4gICAgICAgIGBEdXBsaWNhdGUgdGFibGUgcHJvcGVydHkga2V5cyBhcmUgbm90IGFsbG93ZWQ6ICR7Wy4uLm5ldyBTZXQoZHVwbGljYXRlS2V5cyldLmpvaW4oJywgJyl9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhYmxlUHJvcGVydGllcy5yZWR1Y2UoXG4gICAgICAoYWNjLCBlbnRyeSkgPT4gKHtcbiAgICAgICAgLi4uYWNjLFxuICAgICAgICBbZW50cnkua2V5XTogZW50cnkudmFsdWUsXG4gICAgICB9KSxcbiAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgKTtcbiAgfVxufVxuIl19
package/lib/util.js CHANGED
@@ -23,7 +23,7 @@ function parseTableBucketArn(construct, props) {
23
23
  arnFormat: cdk.ArnFormat.SLASH_RESOURCE_NAME,
24
24
  });
25
25
  }
26
- throw new cdk.ValidationError('Cannot determine bucket ARN. At least `tableBucketArn` is needed', construct);
26
+ throw new cdk.ValidationError('CannotDetermineBucketArn', 'Cannot determine bucket ARN. At least `tableBucketArn` is needed', construct);
27
27
  }
28
28
  function parseTableBucketName(construct, props) {
29
29
  // if we have an explicit bucket name, use it.
@@ -37,7 +37,7 @@ function parseTableBucketName(construct, props) {
37
37
  return bucketNameFromArn;
38
38
  }
39
39
  }
40
- throw new cdk.ValidationError('tableBucketName is required and could not be inferred from context', construct);
40
+ throw new cdk.ValidationError('TableBucketNameRequired', 'tableBucketName is required and could not be inferred from context', construct);
41
41
  }
42
42
  function parseTableBucketRegion(construct, props) {
43
43
  // if we have an explicit bucket region, use it.
@@ -81,4 +81,4 @@ function validateTableBucketAttributes(construct, props) {
81
81
  tableBucketArn: parseTableBucketArn(construct, props),
82
82
  };
83
83
  }
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBTUEsa0RBa0JDO0FBRUQsb0RBZUM7QUFFRCx3REFnQkM7QUFFRCwwREFnQkM7QUFNRCxzRUFPQztBQTFGRCx3Q0FBd0M7QUFJM0IsUUFBQSxpQkFBaUIsR0FBRyxVQUFVLENBQUM7QUFFNUMsU0FBZ0IsbUJBQW1CLENBQUMsU0FBcUIsRUFBRSxLQUE0QjtJQUNyRixtREFBbUQ7SUFDbkQsSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDekIsT0FBTyxLQUFLLENBQUMsY0FBYyxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMxQixPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUN2QyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLE9BQU8sRUFBRSx5QkFBaUI7WUFDMUIsUUFBUSxFQUFFLFFBQVE7WUFDbEIsWUFBWSxFQUFFLEtBQUssQ0FBQyxlQUFlO1lBQ25DLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLG1CQUFtQjtTQUM3QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUMsa0VBQWtFLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDL0csQ0FBQztBQUVELFNBQWdCLG9CQUFvQixDQUFDLFNBQXFCLEVBQUUsS0FBNEI7SUFDdEYsOENBQThDO0lBQzlDLElBQUksS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFCLE9BQU8sS0FBSyxDQUFDLGVBQWUsQ0FBQztJQUMvQixDQUFDO0lBRUQsNENBQTRDO0lBQzVDLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pCLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUNqSSxJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDdEIsT0FBTyxpQkFBaUIsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLG9FQUFvRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2pILENBQUM7QUFFRCxTQUFnQixzQkFBc0IsQ0FBQyxTQUFxQixFQUFFLEtBQTRCO0lBQ3hGLGdEQUFnRDtJQUNoRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNqQixPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDdEIsQ0FBQztJQUVELDhDQUE4QztJQUM5QyxJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN6QixNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3ZILElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsT0FBTyxhQUFhLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFFRCw0Q0FBNEM7SUFDNUMsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELFNBQWdCLHVCQUF1QixDQUFDLFNBQXFCLEVBQUUsS0FBNEI7SUFDekYsaURBQWlEO0lBQ2pELElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUN2QixDQUFDO0lBRUQsK0NBQStDO0lBQy9DLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDekgsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixPQUFPLGNBQWMsQ0FBQztRQUN4QixDQUFDO0lBQ0gsQ0FBQztJQUVELDZDQUE2QztJQUM3QyxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsNkJBQTZCLENBQUMsU0FBcUIsRUFBRSxLQUE0QjtJQUMvRixPQUFPO1FBQ0wsZUFBZSxFQUFFLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUM7UUFDdkQsT0FBTyxFQUFFLHVCQUF1QixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUM7UUFDbEQsTUFBTSxFQUFFLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUM7UUFDaEQsY0FBYyxFQUFFLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUM7S0FDdEQsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgVGFibGVCdWNrZXRBdHRyaWJ1dGVzIH0gZnJvbSAnLi90YWJsZS1idWNrZXQnO1xuXG5leHBvcnQgY29uc3QgUzNfVEFCTEVTX1NFUlZJQ0UgPSAnczN0YWJsZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VUYWJsZUJ1Y2tldEFybihjb25zdHJ1Y3Q6IElDb25zdHJ1Y3QsIHByb3BzOiBUYWJsZUJ1Y2tldEF0dHJpYnV0ZXMpOiBzdHJpbmcge1xuICAvLyBpZiB3ZSBoYXZlIGFuIGV4cGxpY2l0IHRhYmxlIGJ1Y2tldCBBUk4sIHVzZSBpdC5cbiAgaWYgKHByb3BzLnRhYmxlQnVja2V0QXJuKSB7XG4gICAgcmV0dXJuIHByb3BzLnRhYmxlQnVja2V0QXJuO1xuICB9XG5cbiAgaWYgKHByb3BzLnRhYmxlQnVja2V0TmFtZSkge1xuICAgIHJldHVybiBjZGsuU3RhY2sub2YoY29uc3RydWN0KS5mb3JtYXRBcm4oe1xuICAgICAgcmVnaW9uOiBwcm9wcy5yZWdpb24sXG4gICAgICBhY2NvdW50OiBwcm9wcy5hY2NvdW50LFxuICAgICAgc2VydmljZTogUzNfVEFCTEVTX1NFUlZJQ0UsXG4gICAgICByZXNvdXJjZTogJ2J1Y2tldCcsXG4gICAgICByZXNvdXJjZU5hbWU6IHByb3BzLnRhYmxlQnVja2V0TmFtZSxcbiAgICAgIGFybkZvcm1hdDogY2RrLkFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FLFxuICAgIH0pO1xuICB9XG5cbiAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoJ0Nhbm5vdCBkZXRlcm1pbmUgYnVja2V0IEFSTi4gQXQgbGVhc3QgYHRhYmxlQnVja2V0QXJuYCBpcyBuZWVkZWQnLCBjb25zdHJ1Y3QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VUYWJsZUJ1Y2tldE5hbWUoY29uc3RydWN0OiBJQ29uc3RydWN0LCBwcm9wczogVGFibGVCdWNrZXRBdHRyaWJ1dGVzKTogc3RyaW5nIHtcbiAgLy8gaWYgd2UgaGF2ZSBhbiBleHBsaWNpdCBidWNrZXQgbmFtZSwgdXNlIGl0LlxuICBpZiAocHJvcHMudGFibGVCdWNrZXROYW1lKSB7XG4gICAgcmV0dXJuIHByb3BzLnRhYmxlQnVja2V0TmFtZTtcbiAgfVxuXG4gIC8vIGV4dHJhY3QgdGFibGUgYnVja2V0IG5hbWUgZnJvbSBidWNrZXQgYXJuXG4gIGlmIChwcm9wcy50YWJsZUJ1Y2tldEFybikge1xuICAgIGNvbnN0IGJ1Y2tldE5hbWVGcm9tQXJuID0gY2RrLlN0YWNrLm9mKGNvbnN0cnVjdCkuc3BsaXRBcm4ocHJvcHMudGFibGVCdWNrZXRBcm4sIGNkay5Bcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSkucmVzb3VyY2VOYW1lO1xuICAgIGlmIChidWNrZXROYW1lRnJvbUFybikge1xuICAgICAgcmV0dXJuIGJ1Y2tldE5hbWVGcm9tQXJuO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKCd0YWJsZUJ1Y2tldE5hbWUgaXMgcmVxdWlyZWQgYW5kIGNvdWxkIG5vdCBiZSBpbmZlcnJlZCBmcm9tIGNvbnRleHQnLCBjb25zdHJ1Y3QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VUYWJsZUJ1Y2tldFJlZ2lvbihjb25zdHJ1Y3Q6IElDb25zdHJ1Y3QsIHByb3BzOiBUYWJsZUJ1Y2tldEF0dHJpYnV0ZXMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAvLyBpZiB3ZSBoYXZlIGFuIGV4cGxpY2l0IGJ1Y2tldCByZWdpb24sIHVzZSBpdC5cbiAgaWYgKHByb3BzLnJlZ2lvbikge1xuICAgIHJldHVybiBwcm9wcy5yZWdpb247XG4gIH1cblxuICAvLyBleHRyYWN0IHRhYmxlIGJ1Y2tldCByZWdpb24gZnJvbSBidWNrZXQgYXJuXG4gIGlmIChwcm9wcy50YWJsZUJ1Y2tldEFybikge1xuICAgIGNvbnN0IHJlZ2lvbkZyb21Bcm4gPSBjZGsuU3RhY2sub2YoY29uc3RydWN0KS5zcGxpdEFybihwcm9wcy50YWJsZUJ1Y2tldEFybiwgY2RrLkFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FKS5yZWdpb247XG4gICAgaWYgKHJlZ2lvbkZyb21Bcm4pIHtcbiAgICAgIHJldHVybiByZWdpb25Gcm9tQXJuO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlZ2lvbiBpcyBvcHRpb25hbCwgY2FuIGJlIGluZmVycmVkIGxhdGVyXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRhYmxlQnVja2V0QWNjb3VudChjb25zdHJ1Y3Q6IElDb25zdHJ1Y3QsIHByb3BzOiBUYWJsZUJ1Y2tldEF0dHJpYnV0ZXMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAvLyBpZiB3ZSBoYXZlIGFuIGV4cGxpY2l0IGJ1Y2tldCBhY2NvdW50LCB1c2UgaXQuXG4gIGlmIChwcm9wcy5hY2NvdW50KSB7XG4gICAgcmV0dXJuIHByb3BzLmFjY291bnQ7XG4gIH1cblxuICAvLyBleHRyYWN0IHRhYmxlIGJ1Y2tldCBhY2NvdW50IGZyb20gYnVja2V0IGFyblxuICBpZiAocHJvcHMudGFibGVCdWNrZXRBcm4pIHtcbiAgICBjb25zdCBhY2NvdW50RnJvbUFybiA9IGNkay5TdGFjay5vZihjb25zdHJ1Y3QpLnNwbGl0QXJuKHByb3BzLnRhYmxlQnVja2V0QXJuLCBjZGsuQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUpLmFjY291bnQ7XG4gICAgaWYgKGFjY291bnRGcm9tQXJuKSB7XG4gICAgICByZXR1cm4gYWNjb3VudEZyb21Bcm47XG4gICAgfVxuICB9XG5cbiAgLy8gQWNjb3VudCBpcyBvcHRpb25hbCwgY2FuIGJlIGluZmVycmVkIGxhdGVyXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQHJldHVybnMgcG9wdWxhdGVkIGF0dHJpYnV0ZXMgZnJvbSBnaXZlbiBzY29wZSBhbmQgYXR0cmlidXRlc1xuICogQHRocm93cyBWYWxpZGF0aW9uRXJyb3IgaWYgYW55IG9mIHRoZSByZXF1aXJlZCBhdHRyaWJ1cmVzIGFyZSBtaXNzaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVRhYmxlQnVja2V0QXR0cmlidXRlcyhjb25zdHJ1Y3Q6IElDb25zdHJ1Y3QsIHByb3BzOiBUYWJsZUJ1Y2tldEF0dHJpYnV0ZXMpIHtcbiAgcmV0dXJuIHtcbiAgICB0YWJsZUJ1Y2tldE5hbWU6IHBhcnNlVGFibGVCdWNrZXROYW1lKGNvbnN0cnVjdCwgcHJvcHMpLFxuICAgIGFjY291bnQ6IHBhcnNlVGFibGVCdWNrZXRBY2NvdW50KGNvbnN0cnVjdCwgcHJvcHMpLFxuICAgIHJlZ2lvbjogcGFyc2VUYWJsZUJ1Y2tldFJlZ2lvbihjb25zdHJ1Y3QsIHByb3BzKSxcbiAgICB0YWJsZUJ1Y2tldEFybjogcGFyc2VUYWJsZUJ1Y2tldEFybihjb25zdHJ1Y3QsIHByb3BzKSxcbiAgfTtcbn1cbiJdfQ==
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBTUEsa0RBa0JDO0FBRUQsb0RBZUM7QUFFRCx3REFnQkM7QUFFRCwwREFnQkM7QUFNRCxzRUFPQztBQTFGRCx3Q0FBd0M7QUFJM0IsUUFBQSxpQkFBaUIsR0FBRyxVQUFVLENBQUM7QUFFNUMsU0FBZ0IsbUJBQW1CLENBQUMsU0FBcUIsRUFBRSxLQUE0QjtJQUNyRixtREFBbUQ7SUFDbkQsSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDekIsT0FBTyxLQUFLLENBQUMsY0FBYyxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMxQixPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUN2QyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLE9BQU8sRUFBRSx5QkFBaUI7WUFDMUIsUUFBUSxFQUFFLFFBQVE7WUFDbEIsWUFBWSxFQUFFLEtBQUssQ0FBQyxlQUFlO1lBQ25DLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLG1CQUFtQjtTQUM3QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUMsMEJBQTBCLEVBQUUsa0VBQWtFLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDM0ksQ0FBQztBQUVELFNBQWdCLG9CQUFvQixDQUFDLFNBQXFCLEVBQUUsS0FBNEI7SUFDdEYsOENBQThDO0lBQzlDLElBQUksS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFCLE9BQU8sS0FBSyxDQUFDLGVBQWUsQ0FBQztJQUMvQixDQUFDO0lBRUQsNENBQTRDO0lBQzVDLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pCLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUNqSSxJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDdEIsT0FBTyxpQkFBaUIsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLHlCQUF5QixFQUFFLG9FQUFvRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzVJLENBQUM7QUFFRCxTQUFnQixzQkFBc0IsQ0FBQyxTQUFxQixFQUFFLEtBQTRCO0lBQ3hGLGdEQUFnRDtJQUNoRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNqQixPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDdEIsQ0FBQztJQUVELDhDQUE4QztJQUM5QyxJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN6QixNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3ZILElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsT0FBTyxhQUFhLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFFRCw0Q0FBNEM7SUFDNUMsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELFNBQWdCLHVCQUF1QixDQUFDLFNBQXFCLEVBQUUsS0FBNEI7SUFDekYsaURBQWlEO0lBQ2pELElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUN2QixDQUFDO0lBRUQsK0NBQStDO0lBQy9DLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDekgsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixPQUFPLGNBQWMsQ0FBQztRQUN4QixDQUFDO0lBQ0gsQ0FBQztJQUVELDZDQUE2QztJQUM3QyxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsNkJBQTZCLENBQUMsU0FBcUIsRUFBRSxLQUE0QjtJQUMvRixPQUFPO1FBQ0wsZUFBZSxFQUFFLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUM7UUFDdkQsT0FBTyxFQUFFLHVCQUF1QixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUM7UUFDbEQsTUFBTSxFQUFFLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUM7UUFDaEQsY0FBYyxFQUFFLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUM7S0FDdEQsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgVGFibGVCdWNrZXRBdHRyaWJ1dGVzIH0gZnJvbSAnLi90YWJsZS1idWNrZXQnO1xuXG5leHBvcnQgY29uc3QgUzNfVEFCTEVTX1NFUlZJQ0UgPSAnczN0YWJsZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VUYWJsZUJ1Y2tldEFybihjb25zdHJ1Y3Q6IElDb25zdHJ1Y3QsIHByb3BzOiBUYWJsZUJ1Y2tldEF0dHJpYnV0ZXMpOiBzdHJpbmcge1xuICAvLyBpZiB3ZSBoYXZlIGFuIGV4cGxpY2l0IHRhYmxlIGJ1Y2tldCBBUk4sIHVzZSBpdC5cbiAgaWYgKHByb3BzLnRhYmxlQnVja2V0QXJuKSB7XG4gICAgcmV0dXJuIHByb3BzLnRhYmxlQnVja2V0QXJuO1xuICB9XG5cbiAgaWYgKHByb3BzLnRhYmxlQnVja2V0TmFtZSkge1xuICAgIHJldHVybiBjZGsuU3RhY2sub2YoY29uc3RydWN0KS5mb3JtYXRBcm4oe1xuICAgICAgcmVnaW9uOiBwcm9wcy5yZWdpb24sXG4gICAgICBhY2NvdW50OiBwcm9wcy5hY2NvdW50LFxuICAgICAgc2VydmljZTogUzNfVEFCTEVTX1NFUlZJQ0UsXG4gICAgICByZXNvdXJjZTogJ2J1Y2tldCcsXG4gICAgICByZXNvdXJjZU5hbWU6IHByb3BzLnRhYmxlQnVja2V0TmFtZSxcbiAgICAgIGFybkZvcm1hdDogY2RrLkFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FLFxuICAgIH0pO1xuICB9XG5cbiAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoJ0Nhbm5vdERldGVybWluZUJ1Y2tldEFybicsICdDYW5ub3QgZGV0ZXJtaW5lIGJ1Y2tldCBBUk4uIEF0IGxlYXN0IGB0YWJsZUJ1Y2tldEFybmAgaXMgbmVlZGVkJywgY29uc3RydWN0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVGFibGVCdWNrZXROYW1lKGNvbnN0cnVjdDogSUNvbnN0cnVjdCwgcHJvcHM6IFRhYmxlQnVja2V0QXR0cmlidXRlcyk6IHN0cmluZyB7XG4gIC8vIGlmIHdlIGhhdmUgYW4gZXhwbGljaXQgYnVja2V0IG5hbWUsIHVzZSBpdC5cbiAgaWYgKHByb3BzLnRhYmxlQnVja2V0TmFtZSkge1xuICAgIHJldHVybiBwcm9wcy50YWJsZUJ1Y2tldE5hbWU7XG4gIH1cblxuICAvLyBleHRyYWN0IHRhYmxlIGJ1Y2tldCBuYW1lIGZyb20gYnVja2V0IGFyblxuICBpZiAocHJvcHMudGFibGVCdWNrZXRBcm4pIHtcbiAgICBjb25zdCBidWNrZXROYW1lRnJvbUFybiA9IGNkay5TdGFjay5vZihjb25zdHJ1Y3QpLnNwbGl0QXJuKHByb3BzLnRhYmxlQnVja2V0QXJuLCBjZGsuQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUpLnJlc291cmNlTmFtZTtcbiAgICBpZiAoYnVja2V0TmFtZUZyb21Bcm4pIHtcbiAgICAgIHJldHVybiBidWNrZXROYW1lRnJvbUFybjtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcignVGFibGVCdWNrZXROYW1lUmVxdWlyZWQnLCAndGFibGVCdWNrZXROYW1lIGlzIHJlcXVpcmVkIGFuZCBjb3VsZCBub3QgYmUgaW5mZXJyZWQgZnJvbSBjb250ZXh0JywgY29uc3RydWN0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVGFibGVCdWNrZXRSZWdpb24oY29uc3RydWN0OiBJQ29uc3RydWN0LCBwcm9wczogVGFibGVCdWNrZXRBdHRyaWJ1dGVzKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgLy8gaWYgd2UgaGF2ZSBhbiBleHBsaWNpdCBidWNrZXQgcmVnaW9uLCB1c2UgaXQuXG4gIGlmIChwcm9wcy5yZWdpb24pIHtcbiAgICByZXR1cm4gcHJvcHMucmVnaW9uO1xuICB9XG5cbiAgLy8gZXh0cmFjdCB0YWJsZSBidWNrZXQgcmVnaW9uIGZyb20gYnVja2V0IGFyblxuICBpZiAocHJvcHMudGFibGVCdWNrZXRBcm4pIHtcbiAgICBjb25zdCByZWdpb25Gcm9tQXJuID0gY2RrLlN0YWNrLm9mKGNvbnN0cnVjdCkuc3BsaXRBcm4ocHJvcHMudGFibGVCdWNrZXRBcm4sIGNkay5Bcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSkucmVnaW9uO1xuICAgIGlmIChyZWdpb25Gcm9tQXJuKSB7XG4gICAgICByZXR1cm4gcmVnaW9uRnJvbUFybjtcbiAgICB9XG4gIH1cblxuICAvLyBSZWdpb24gaXMgb3B0aW9uYWwsIGNhbiBiZSBpbmZlcnJlZCBsYXRlclxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VUYWJsZUJ1Y2tldEFjY291bnQoY29uc3RydWN0OiBJQ29uc3RydWN0LCBwcm9wczogVGFibGVCdWNrZXRBdHRyaWJ1dGVzKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgLy8gaWYgd2UgaGF2ZSBhbiBleHBsaWNpdCBidWNrZXQgYWNjb3VudCwgdXNlIGl0LlxuICBpZiAocHJvcHMuYWNjb3VudCkge1xuICAgIHJldHVybiBwcm9wcy5hY2NvdW50O1xuICB9XG5cbiAgLy8gZXh0cmFjdCB0YWJsZSBidWNrZXQgYWNjb3VudCBmcm9tIGJ1Y2tldCBhcm5cbiAgaWYgKHByb3BzLnRhYmxlQnVja2V0QXJuKSB7XG4gICAgY29uc3QgYWNjb3VudEZyb21Bcm4gPSBjZGsuU3RhY2sub2YoY29uc3RydWN0KS5zcGxpdEFybihwcm9wcy50YWJsZUJ1Y2tldEFybiwgY2RrLkFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FKS5hY2NvdW50O1xuICAgIGlmIChhY2NvdW50RnJvbUFybikge1xuICAgICAgcmV0dXJuIGFjY291bnRGcm9tQXJuO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFjY291bnQgaXMgb3B0aW9uYWwsIGNhbiBiZSBpbmZlcnJlZCBsYXRlclxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHBvcHVsYXRlZCBhdHRyaWJ1dGVzIGZyb20gZ2l2ZW4gc2NvcGUgYW5kIGF0dHJpYnV0ZXNcbiAqIEB0aHJvd3MgVmFsaWRhdGlvbkVycm9yIGlmIGFueSBvZiB0aGUgcmVxdWlyZWQgYXR0cmlidXJlcyBhcmUgbWlzc2luZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVUYWJsZUJ1Y2tldEF0dHJpYnV0ZXMoY29uc3RydWN0OiBJQ29uc3RydWN0LCBwcm9wczogVGFibGVCdWNrZXRBdHRyaWJ1dGVzKSB7XG4gIHJldHVybiB7XG4gICAgdGFibGVCdWNrZXROYW1lOiBwYXJzZVRhYmxlQnVja2V0TmFtZShjb25zdHJ1Y3QsIHByb3BzKSxcbiAgICBhY2NvdW50OiBwYXJzZVRhYmxlQnVja2V0QWNjb3VudChjb25zdHJ1Y3QsIHByb3BzKSxcbiAgICByZWdpb246IHBhcnNlVGFibGVCdWNrZXRSZWdpb24oY29uc3RydWN0LCBwcm9wcyksXG4gICAgdGFibGVCdWNrZXRBcm46IHBhcnNlVGFibGVCdWNrZXRBcm4oY29uc3RydWN0LCBwcm9wcyksXG4gIH07XG59XG4iXX0=
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@aws-cdk/aws-s3tables-alpha",
3
3
  "private": false,
4
- "version": "2.243.0-alpha.0",
4
+ "version": "2.245.0-alpha.0",
5
5
  "description": "CDK Constructs for S3 Tables",
6
6
  "main": "lib/index.js",
7
7
  "types": "lib/index.d.ts",
@@ -77,17 +77,17 @@
77
77
  },
78
78
  "license": "Apache-2.0",
79
79
  "devDependencies": {
80
- "aws-cdk-lib": "2.243.0",
81
- "@aws-cdk/cdk-build-tools": "2.243.0-alpha.0",
82
- "@aws-cdk/pkglint": "2.243.0-alpha.0",
80
+ "aws-cdk-lib": "2.245.0",
81
+ "@aws-cdk/cdk-build-tools": "2.245.0-alpha.0",
82
+ "@aws-cdk/pkglint": "2.245.0-alpha.0",
83
83
  "@types/jest": "^29.5.14",
84
84
  "constructs": "^10.5.0",
85
85
  "jest": "^29.7.0",
86
- "@aws-cdk/integ-tests-alpha": "2.243.0-alpha.0"
86
+ "@aws-cdk/integ-tests-alpha": "2.245.0-alpha.0"
87
87
  },
88
88
  "homepage": "https://github.com/aws/aws-cdk",
89
89
  "peerDependencies": {
90
- "aws-cdk-lib": "^2.243.0",
90
+ "aws-cdk-lib": "^2.245.0",
91
91
  "constructs": "^10.5.0"
92
92
  },
93
93
  "separate-module": false,
@@ -1,6 +1,6 @@
1
1
  import { Construct } from 'constructs';
2
- import { Stack } from 'aws-cdk-lib';
3
- import { TableBucket, UnreferencedFileRemovalStatus, TableBucketEncryption, Namespace, Table, Status, OpenTableFormat } from '@aws-cdk/aws-s3tables-alpha';
2
+ import { Stack, Tags } from 'aws-cdk-lib';
3
+ import { TableBucket, UnreferencedFileRemovalStatus, TableBucketEncryption, RequestMetricsStatus, Namespace, Table, Status, OpenTableFormat, IcebergTransform, SortDirection, NullOrder } from '@aws-cdk/aws-s3tables-alpha';
4
4
  import * as iam from 'aws-cdk-lib/aws-iam';
5
5
  import * as kms from 'aws-cdk-lib/aws-kms';
6
6