@aws-cdk/aws-imagebuilder-alpha 2.235.1-alpha.0 → 2.237.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/image.d.ts CHANGED
@@ -287,24 +287,6 @@ export declare class Image extends ImageBase {
287
287
  * Return whether the given object is an Image.
288
288
  */
289
289
  static isImage(x: any): x is Image;
290
- /**
291
- * The ARN of the image
292
- */
293
- readonly imageArn: string;
294
- /**
295
- * The name of the image
296
- */
297
- readonly imageName: string;
298
- /**
299
- * The version of the image
300
- */
301
- readonly imageVersion: string;
302
- /**
303
- * The AMI ID of the EC2 AMI, or URI for the container
304
- *
305
- * @attribute
306
- */
307
- readonly imageId: string;
308
290
  /**
309
291
  * The infrastructure configuration used for the image build
310
292
  */
@@ -314,6 +296,7 @@ export declare class Image extends ImageBase {
314
296
  */
315
297
  readonly executionRole?: iam.IRole;
316
298
  private readonly props;
299
+ private resource;
317
300
  constructor(scope: Construct, id: string, props: ImageProps);
318
301
  /**
319
302
  * Grants the default permissions for building an image to the provided execution role.
@@ -323,6 +306,15 @@ export declare class Image extends ImageBase {
323
306
  * @param grantee The execution role used for the image build.
324
307
  */
325
308
  grantDefaultExecutionRolePermissions(grantee: iam.IGrantable): iam.Grant[];
309
+ get imageName(): string;
310
+ get imageArn(): string;
311
+ get imageVersion(): string;
312
+ /**
313
+ * The AMI ID of the EC2 AMI, or URI for the container
314
+ *
315
+ * @attribute
316
+ */
317
+ get imageId(): string;
326
318
  /**
327
319
  * Creates a CfnImage resource from the recipe and props provided.
328
320
  *
package/lib/image.js CHANGED
@@ -40,6 +40,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
40
40
  const cdk = require("aws-cdk-lib");
41
41
  const iam = require("aws-cdk-lib/aws-iam");
42
42
  const aws_imagebuilder_1 = require("aws-cdk-lib/aws-imagebuilder");
43
+ const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal");
43
44
  const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
44
45
  const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable");
45
46
  const base_image_1 = require("./base-image");
@@ -148,17 +149,29 @@ let Image = (() => {
148
149
  let _classSuper = ImageBase;
149
150
  let _instanceExtraInitializers = [];
150
151
  let _grantDefaultExecutionRolePermissions_decorators;
152
+ let _get_imageName_decorators;
153
+ let _get_imageArn_decorators;
154
+ let _get_imageVersion_decorators;
155
+ let _get_imageId_decorators;
151
156
  var Image = class extends _classSuper {
152
157
  static { _classThis = this; }
153
158
  static {
154
159
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
155
160
  _grantDefaultExecutionRolePermissions_decorators = [(0, metadata_resource_1.MethodMetadata)()];
161
+ _get_imageName_decorators = [helpers_internal_1.memoizedGetter];
162
+ _get_imageArn_decorators = [helpers_internal_1.memoizedGetter];
163
+ _get_imageVersion_decorators = [helpers_internal_1.memoizedGetter];
164
+ _get_imageId_decorators = [helpers_internal_1.memoizedGetter];
156
165
  __esDecorate(this, null, _grantDefaultExecutionRolePermissions_decorators, { kind: "method", name: "grantDefaultExecutionRolePermissions", static: false, private: false, access: { has: obj => "grantDefaultExecutionRolePermissions" in obj, get: obj => obj.grantDefaultExecutionRolePermissions }, metadata: _metadata }, null, _instanceExtraInitializers);
166
+ __esDecorate(this, null, _get_imageName_decorators, { kind: "getter", name: "imageName", static: false, private: false, access: { has: obj => "imageName" in obj, get: obj => obj.imageName }, metadata: _metadata }, null, _instanceExtraInitializers);
167
+ __esDecorate(this, null, _get_imageArn_decorators, { kind: "getter", name: "imageArn", static: false, private: false, access: { has: obj => "imageArn" in obj, get: obj => obj.imageArn }, metadata: _metadata }, null, _instanceExtraInitializers);
168
+ __esDecorate(this, null, _get_imageVersion_decorators, { kind: "getter", name: "imageVersion", static: false, private: false, access: { has: obj => "imageVersion" in obj, get: obj => obj.imageVersion }, metadata: _metadata }, null, _instanceExtraInitializers);
169
+ __esDecorate(this, null, _get_imageId_decorators, { kind: "getter", name: "imageId", static: false, private: false, access: { has: obj => "imageId" in obj, get: obj => obj.imageId }, metadata: _metadata }, null, _instanceExtraInitializers);
157
170
  __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
158
171
  Image = _classThis = _classDescriptor.value;
159
172
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
160
173
  }
161
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.Image", version: "2.235.1-alpha.0" };
174
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.Image", version: "2.237.0-alpha.0" };
162
175
  /** Uniquely identifies this class. */
163
176
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-imagebuilder-alpha.Image';
164
177
  /**
@@ -219,33 +232,16 @@ let Image = (() => {
219
232
  static isImage(x) {
220
233
  return x !== null && typeof x === 'object' && IMAGE_SYMBOL in x;
221
234
  }
222
- /**
223
- * The ARN of the image
224
- */
225
- imageArn = __runInitializers(this, _instanceExtraInitializers);
226
- /**
227
- * The name of the image
228
- */
229
- imageName;
230
- /**
231
- * The version of the image
232
- */
233
- imageVersion;
234
- /**
235
- * The AMI ID of the EC2 AMI, or URI for the container
236
- *
237
- * @attribute
238
- */
239
- imageId;
240
235
  /**
241
236
  * The infrastructure configuration used for the image build
242
237
  */
243
- infrastructureConfiguration;
238
+ infrastructureConfiguration = __runInitializers(this, _instanceExtraInitializers);
244
239
  /**
245
240
  * The execution role used for the image build
246
241
  */
247
242
  executionRole;
248
243
  props;
244
+ resource;
249
245
  constructor(scope, id, props) {
250
246
  super(scope, id);
251
247
  try {
@@ -267,20 +263,8 @@ let Image = (() => {
267
263
  ...props,
268
264
  imageLogGroup: props.logGroup,
269
265
  });
270
- const [image, recipe] = this.createImageFromRecipe(props);
271
- this.imageName = this.getResourceNameAttribute(image.attrName);
272
- this.imageArn = image.attrArn;
273
- if (recipe._isImageRecipe()) {
274
- this.imageId = image.attrImageId;
275
- this.imageVersion = recipe.imageRecipeVersion;
276
- }
277
- else if (recipe._isContainerRecipe()) {
278
- this.imageId = image.attrImageUri;
279
- this.imageVersion = recipe.containerRecipeVersion;
280
- }
281
- else {
282
- throw new cdk.ValidationError('recipe must either be an image recipe or container recipe', this);
283
- }
266
+ const [image, _] = this.createImageFromRecipe(props);
267
+ this.resource = image;
284
268
  }
285
269
  /**
286
270
  * Grants the default permissions for building an image to the provided execution role.
@@ -299,6 +283,41 @@ let Image = (() => {
299
283
  scope: this,
300
284
  }));
301
285
  }
286
+ get imageName() {
287
+ return this.getResourceNameAttribute(this.resource.attrName);
288
+ }
289
+ get imageArn() {
290
+ return this.resource.attrArn;
291
+ }
292
+ get imageVersion() {
293
+ const recipe = this.props.recipe;
294
+ if (recipe._isImageRecipe()) {
295
+ return recipe.imageRecipeVersion;
296
+ }
297
+ else if (recipe._isContainerRecipe()) {
298
+ return recipe.containerRecipeVersion;
299
+ }
300
+ else {
301
+ throw new cdk.ValidationError('recipe must either be an image recipe or container recipe', this);
302
+ }
303
+ }
304
+ /**
305
+ * The AMI ID of the EC2 AMI, or URI for the container
306
+ *
307
+ * @attribute
308
+ */
309
+ get imageId() {
310
+ const recipe = this.props.recipe;
311
+ if (recipe._isImageRecipe()) {
312
+ return this.resource.attrImageId;
313
+ }
314
+ else if (recipe._isContainerRecipe()) {
315
+ return this.resource.attrImageUri;
316
+ }
317
+ else {
318
+ throw new cdk.ValidationError('recipe must either be an image recipe or container recipe', this);
319
+ }
320
+ }
302
321
  /**
303
322
  * Creates a CfnImage resource from the recipe and props provided.
304
323
  *
@@ -362,4 +381,4 @@ let Image = (() => {
362
381
  return Image = _classThis;
363
382
  })();
364
383
  exports.Image = Image;
365
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbWFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBbUM7QUFFbkMsMkNBQTJDO0FBQzNDLG1FQUF3RDtBQUV4RCw4RUFBOEY7QUFDOUYsMEVBQTBFO0FBRTFFLDZDQUE2RDtBQUU3RCxpRkFBMkc7QUFDM0csbURBQXFEO0FBQ3JELCtGQUltRDtBQUNuRCwyREFBdUY7QUFJdkYsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0FBd016RTs7R0FFRztBQUNILElBQVksaUJBVVg7QUFWRCxXQUFZLGlCQUFpQjtJQUMzQjs7T0FFRztJQUNILG9DQUFlLENBQUE7SUFFZjs7T0FFRztJQUNILHNDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFWVyxpQkFBaUIsaUNBQWpCLGlCQUFpQixRQVU1QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxTQVVYO0FBVkQsV0FBWSxTQUFTO0lBQ25COztPQUVHO0lBQ0gsd0JBQVcsQ0FBQTtJQUVYOztPQUVHO0lBQ0gsOEJBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQVZXLFNBQVMseUJBQVQsU0FBUyxRQVVwQjtBQUVEOztHQUVHO0FBQ0gsTUFBZSxTQUFVLFNBQVEsR0FBRyxDQUFDLFFBQVE7SUFnQjNDOzs7Ozs7O09BT0c7SUFDSSxLQUFLLENBQUMsT0FBdUIsRUFBRSxHQUFHLE9BQWlCO1FBQ3hELE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7WUFDOUIsT0FBTztZQUNQLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDN0IsT0FBTztTQUNSLENBQUMsQ0FBQztLQUNKO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksb0NBQW9DLENBQUMsT0FBdUI7UUFDakUsTUFBTSxRQUFRLEdBQUcsSUFBQSwwQ0FBMEIsRUFBQyxJ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TyxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3REO1FBRUQ7Ozs7V0FJRztRQUNLLHFCQUFxQixDQUFDLEtBQWlCO1lBQzdDLElBQUksS0FBSyxDQUFDLHFCQUFxQixLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM5QyxPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1lBRUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDL0Q7O1lBaE9VLHVEQUFLOzs7OztBQUFMLHNCQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGVjciBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNyJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENmbkltYWdlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWltYWdlYnVpbGRlcic7XG5pbXBvcnQgKiBhcyBsb2dzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhLCBNZXRob2RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEJhc2VDb250YWluZXJJbWFnZSwgQmFzZUltYWdlIH0gZnJvbSAnLi9iYXNlLWltYWdlJztcbmltcG9ydCB7IElEaXN0cmlidXRpb25Db25maWd1cmF0aW9uIH0gZnJvbSAnLi9kaXN0cmlidXRpb24tY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBJSW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uLCBJbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL2luZnJhc3RydWN0dXJlLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHsgTEFURVNUX1ZFUlNJT04gfSBmcm9tICcuL3ByaXZhdGUvY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIGJ1aWxkSW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb24sXG4gIGJ1aWxkSW1hZ2VUZXN0c0NvbmZpZ3VyYXRpb24sXG4gIGJ1aWxkV29ya2Zsb3dzLFxufSBmcm9tICcuL3ByaXZhdGUvaW1hZ2UtYW5kLXBpcGVsaW5lLXByb3BzLWhlbHBlcic7XG5pbXBvcnQgeyBkZWZhdWx0RXhlY3V0aW9uUm9sZVBvbGljeSwgZ2V0RXhlY3V0aW9uUm9sZSB9IGZyb20gJy4vcHJpdmF0ZS9wb2xpY3ktaGVscGVyJztcbmltcG9ydCB7IElSZWNpcGVCYXNlIH0gZnJvbSAnLi9yZWNpcGUtYmFzZSc7XG5pbXBvcnQgeyBXb3JrZmxvd0NvbmZpZ3VyYXRpb24gfSBmcm9tICcuL3dvcmtmbG93JztcblxuY29uc3QgSU1BR0VfU1lNQk9MID0gU3ltYm9sLmZvcignQGF3cy1jZGsvYXdzLWltYWdlYnVpbGRlci1hbHBoYS5JbWFnZScpO1xuXG4vKipcbiAqIEFuIEVDMiBJbWFnZSBCdWlsZGVyIEltYWdlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUltYWdlIGV4dGVuZHMgY2RrLklSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBpbWFnZVxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBpbWFnZUFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgaW1hZ2VcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBpbWFnZVxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBpbWFnZVZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogR3JhbnQgY3VzdG9tIGFjdGlvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBpbWFnZVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqIEBwYXJhbSBhY3Rpb25zIFRoZSBsaXN0IG9mIGFjdGlvbnNcbiAgICovXG4gIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogR3JhbnRzIHRoZSBkZWZhdWx0IHBlcm1pc3Npb25zIGZvciBidWlsZGluZyBhbiBpbWFnZSB0byB0aGUgcHJvdmlkZWQgZXhlY3V0aW9uIHJvbGUuXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBleGVjdXRpb24gcm9sZSB1c2VkIGZvciB0aGUgaW1hZ2UgYnVpbGQuXG4gICAqL1xuICBncmFudERlZmF1bHRFeGVjdXRpb25Sb2xlUGVybWlzc2lvbnMoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnRbXTtcblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGltYWdlXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICovXG4gIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIGltYWdlIHRvIGEgQmFzZUltYWdlLCB0byB1c2UgYXMgdGhlIHBhcmVudCBpbWFnZSBpbiBhbiBpbWFnZSByZWNpcGVcbiAgICovXG4gIHRvQmFzZUltYWdlKCk6IEJhc2VJbWFnZTtcblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIGltYWdlIHRvIGEgQ29udGFpbmVyQmFzZUltYWdlLCB0byB1c2UgYXMgdGhlIHBhcmVudCBpbWFnZSBpbiBhIGNvbnRhaW5lciByZWNpcGVcbiAgICovXG4gIHRvQ29udGFpbmVyQmFzZUltYWdlKCk6IEJhc2VDb250YWluZXJJbWFnZTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhbiBJbWFnZSByZXNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlUHJvcHMge1xuICAvKipcbiAgICogVGhlIHJlY2lwZSB0aGF0IGRlZmluZXMgdGhlIGJhc2UgaW1hZ2UsIGNvbXBvbmVudHMsIGFuZCBjdXN0b21pemF0aW9ucyB1c2VkIHRvIGJ1aWxkIHRoZSBpbWFnZS4gVGhpcyBjYW4gZWl0aGVyIGJlXG4gICAqIGFuIGltYWdlIHJlY2lwZSwgb3IgYSBjb250YWluZXIgcmVjaXBlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVjaXBlOiBJUmVjaXBlQmFzZTtcblxuICAvKipcbiAgICogVGhlIGluZnJhc3RydWN0dXJlIGNvbmZpZ3VyYXRpb24gdXNlZCBmb3IgYnVpbGRpbmcgdGhlIGltYWdlLlxuICAgKlxuICAgKiBBIGRlZmF1bHQgaW5mcmFzdHJ1Y3R1cmUgY29uZmlndXJhdGlvbiB3aWxsIGJlIHVzZWQgaWYgb25lIGlzIG5vdCBwcm92aWRlZC5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiB3aWxsIGNyZWF0ZSBhbiBpbnN0YW5jZSBwcm9maWxlIGFuZCByb2xlIHdpdGggbWluaW1hbCBwZXJtaXNzaW9ucyBuZWVkZWQgdG8gYnVpbGQgdGhlXG4gICAqIGltYWdlLCBhdHRhY2hlZCB0byB0aGUgRUMyIGluc3RhbmNlLlxuICAgKlxuICAgKiBJTURTdjIgd2lsbCBiZSByZXF1aXJlZCBieSBkZWZhdWx0IG9uIHRoZSBpbnN0YW5jZXMgdXNlZCB0byBidWlsZCBhbmQgdGVzdCB0aGUgaW1hZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYW4gaW5mcmFzdHJ1Y3R1cmUgY29uZmlndXJhdGlvbiB3aWxsIGJlIGNyZWF0ZWQgd2l0aCB0aGUgZGVmYXVsdCBzZXR0aW5nc1xuICAgKi9cbiAgcmVhZG9ubHkgaW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uPzogSUluZnJhc3RydWN0dXJlQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIHVzZWQgZm9yIGRpc3RyaWJ1dGluZyB0aGUgaW1hZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24/OiBJRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2Ygd29ya2Zsb3cgY29uZmlndXJhdGlvbnMgdXNlZCB0byBidWlsZCB0aGUgaW1hZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gSW1hZ2UgQnVpbGRlciB3aWxsIHVzZSBhIGRlZmF1bHQgc2V0IG9mIHdvcmtmbG93cyBmb3IgdGhlIGJ1aWxkIHRvIGJ1aWxkLCB0ZXN0LCBhbmQgZGlzdHJpYnV0ZSB0aGVcbiAgICogaW1hZ2VcbiAgICovXG4gIHJlYWRvbmx5IHdvcmtmbG93cz86IFdvcmtmbG93Q29uZmlndXJhdGlvbltdO1xuXG4gIC8qKlxuICAgKiBUaGUgZXhlY3V0aW9uIHJvbGUgdXNlZCB0byBwZXJmb3JtIHdvcmtmbG93IGFjdGlvbnMgdG8gYnVpbGQgdGhlIGltYWdlLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgSW1hZ2UgQnVpbGRlciBTZXJ2aWNlIExpbmtlZCBSb2xlIChTTFIpIHdpbGwgYmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGFuZCB1c2VkIGFzIHRoZSBleGVjdXRpb25cbiAgICogcm9sZS4gSG93ZXZlciwgd2hlbiBwcm92aWRpbmcgYSBjdXN0b20gc2V0IG9mIGltYWdlIHdvcmtmbG93cyBmb3IgdGhlIGltYWdlLCBhbiBleGVjdXRpb24gcm9sZSB3aWxsIGJlXG4gICAqIGdlbmVyYXRlZCB3aXRoIHRoZSBtaW5pbWFsIHBlcm1pc3Npb25zIG5lZWRlZCB0byBleGVjdXRlIHRoZSB3b3JrZmxvd3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gSW1hZ2UgQnVpbGRlciB3aWxsIHVzZSB0aGUgU0xSIGlmIHBvc3NpYmxlLiBPdGhlcndpc2UsIGFuIGV4ZWN1dGlvbiByb2xlIHdpbGwgYmUgZ2VuZXJhdGVkXG4gICAqL1xuICByZWFkb25seSBleGVjdXRpb25Sb2xlPzogaWFtLklSb2xlO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9nIGdyb3VwIHRvIHVzZSBmb3IgdGhlIGltYWdlLiBCeSBkZWZhdWx0LCBhIGxvZyBncm91cCB3aWxsIGJlIGNyZWF0ZWQgd2l0aCB0aGUgZm9ybWF0XG4gICAqIGAvYXdzL2ltYWdlYnVpbGRlci88aW1hZ2UtbmFtZT5gXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYSBsb2cgZ3JvdXAgd2lsbCBiZSBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSBsb2dHcm91cD86IGxvZ3MuSUxvZ0dyb3VwO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBJbWFnZSBCdWlsZGVyIGtlZXBzIGEgc25hcHNob3Qgb2YgdGhlIHZ1bG5lcmFiaWxpdHkgc2NhbnMgdGhhdCBBbWF6b24gSW5zcGVjdG9yIHJ1bnMgYWdhaW5zdCB0aGVcbiAgICogYnVpbGQgaW5zdGFuY2Ugd2hlbiB5b3UgY3JlYXRlIGEgbmV3IGltYWdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VTY2FubmluZ0VuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGFpbmVyIHJlcG9zaXRvcnkgdGhhdCBBbWF6b24gSW5zcGVjdG9yIHNjYW5zIHRvIGlkZW50aWZ5IGZpbmRpbmdzIGZvciB5b3VyIGNvbnRhaW5lciBpbWFnZXMuIElmIGFcbiAgICogcmVwb3NpdG9yeSBpcyBub3QgcHJvdmlkZWQsIEltYWdlIEJ1aWxkZXIgY3JlYXRlcyBhIHJlcG9zaXRvcnkgbmFtZWQgYGltYWdlLWJ1aWxkZXItaW1hZ2Utc2Nhbm5pbmctcmVwb3NpdG9yeWBcbiAgICogZm9yIHZ1bG5lcmFiaWxpdHkgc2Nhbm5pbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gaWYgc2Nhbm5pbmcgaXMgZW5hYmxlZCwgYSByZXBvc2l0b3J5IHdpbGwgYmUgY3JlYXRlZCBieSBJbWFnZSBCdWlsZGVyIGlmIG9uZSBpcyBub3QgcHJvdmlkZWRcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlU2Nhbm5pbmdFY3JSZXBvc2l0b3J5PzogZWNyLklSZXBvc2l0b3J5O1xuXG4gIC8qKlxuICAgKiBUaGUgdGFncyBmb3IgSW1hZ2UgQnVpbGRlciB0byBhcHBseSB0byB0aGUgb3V0cHV0IGNvbnRhaW5lciBpbWFnZSB0aGF0IEFtYXpvbiBJbnNwZWN0b3Igc2NhbnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlU2Nhbm5pbmdFY3JUYWdzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIElmIGVuYWJsZWQsIGNvbGxlY3RzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGltYWdlIGJlaW5nIGNyZWF0ZWQsIGluY2x1ZGluZyB0aGUgb3BlcmF0aW5nIHN5c3RlbSAoT1MpXG4gICAqIHZlcnNpb24gYW5kIHBhY2thZ2UgbGlzdCBmb3IgdGhlIEFNSS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5oYW5jZWRJbWFnZU1ldGFkYXRhRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcnVuIHRlc3RzIGFmdGVyIGJ1aWxkaW5nIGFuIGltYWdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBpbWFnZVRlc3RzRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBleGVjdXRpb24gcm9sZSB0byB1c2UgZm9yIGRlbGV0aW5nIHRoZSBpbWFnZSBhcyB3ZWxsIGFzIHRoZSB1bmRlcmx5aW5nIHJlc291cmNlcywgc3VjaCBhcyB0aGUgQU1Jcywgc25hcHNob3RzLFxuICAgKiBhbmQgY29udGFpbmVycy4gVGhpcyByb2xlIHNob3VsZCBjb250YWluIHJlc291cmNlIGxpZmVjeWNsZSBwZXJtaXNzaW9ucyByZXF1aXJlZCB0byBkZWxldGUgdGhlIHVuZGVybHlpbmdcbiAgICogQU1Jcy9jb250YWluZXJzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGV4ZWN1dGlvbiByb2xlLiBPbmx5IHRoZSBJbWFnZSBCdWlsZGVyIGltYWdlIHdpbGwgYmUgZGVsZXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRlbGV0aW9uRXhlY3V0aW9uUm9sZT86IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogVGhlIHRhZ3MgdG8gYXBwbHkgdG8gdGhlIGltYWdlXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGFuIEVDMiBJbWFnZSBCdWlsZGVyIGltYWdlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGltYWdlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVyaXZlZCBmcm9tIHRoZSBpbWFnZU5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgaW1hZ2VcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZXJpdmVkIGZyb20gdGhlIGltYWdlQXJuXG4gICAqL1xuICByZWFkb25seSBpbWFnZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBpbWFnZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgaW1hZ2UsIHgueC54XG4gICAqL1xuICByZWFkb25seSBpbWFnZVZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgaW1hZ2VcbiAqL1xuZXhwb3J0IGVudW0gSW1hZ2VBcmNoaXRlY3R1cmUge1xuICAvKipcbiAgICogNjQgYml0IGFyY2hpdGVjdHVyZSB3aXRoIHRoZSBBUk0gaW5zdHJ1Y3Rpb24gc2V0XG4gICAqL1xuICBBUk02NCA9ICdhcm02NCcsXG5cbiAgLyoqXG4gICAqIDY0IGJpdCBhcmNoaXRlY3R1cmUgd2l0aCB4ODYgaW5zdHJ1Y3Rpb24gc2V0XG4gICAqL1xuICBYODZfNjQgPSAneDg2XzY0Jyxcbn1cblxuLyoqXG4gKiBUaGUgdHlwZSBvZiB0aGUgaW1hZ2VcbiAqL1xuZXhwb3J0IGVudW0gSW1hZ2VUeXBlIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgaW1hZ2UgcHJvZHVjZWQgaXMgYW4gQU1JXG4gICAqL1xuICBBTUkgPSAnQU1JJyxcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBpbWFnZSBwcm9kdWNlZCBpcyBhIERvY2tlciBpbWFnZVxuICAgKi9cbiAgRE9DS0VSID0gJ0RPQ0tFUicsXG59XG5cbi8qKlxuICogQSBuZXcgb3IgaW1wb3J0ZWQgSW1hZ2VcbiAqL1xuYWJzdHJhY3QgY2xhc3MgSW1hZ2VCYXNlIGV4dGVuZHMgY2RrLlJlc291cmNlIGltcGxlbWVudHMgSUltYWdlIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGltYWdlXG4gICAqL1xuICBhYnN0cmFjdCByZWFkb25seSBpbWFnZUFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgaW1hZ2VcbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGltYWdlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgaW1hZ2VcbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGltYWdlVmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHcmFudCBjdXN0b20gYWN0aW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGltYWdlXG4gICAqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqIEBwYXJhbSBhY3Rpb25zIFRoZSBsaXN0IG9mIGFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZSxcbiAgICAgIHJlc291cmNlQXJuczogW3RoaXMuaW1hZ2VBcm5dLFxuICAgICAgYWN0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgdGhlIGRlZmF1bHQgcGVybWlzc2lvbnMgZm9yIGJ1aWxkaW5nIGFuIGltYWdlIHRvIHRoZSBwcm92aWRlZCBleGVjdXRpb24gcm9sZS5cbiAgICpcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBleGVjdXRpb24gcm9sZSB1c2VkIGZvciB0aGUgaW1hZ2UgYnVpbGQuXG4gICAqL1xuICBwdWJsaWMgZ3JhbnREZWZhdWx0RXhlY3V0aW9uUm9sZVBlcm1pc3Npb25zKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50W10ge1xuICAgIGNvbnN0IHBvbGljaWVzID0gZGVmYXVsdEV4ZWN1dGlvblJvbGVQb2xpY3kodGhpcyk7XG4gICAgcmV0dXJuIHBvbGljaWVzLm1hcCgocG9saWN5KSA9PlxuICAgICAgaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgICAgZ3JhbnRlZTogZ3JhbnRlZSxcbiAgICAgICAgcmVzb3VyY2VBcm5zOiBwb2xpY3kucmVzb3VyY2VzLFxuICAgICAgICBhY3Rpb25zOiBwb2xpY3kuYWN0aW9ucyxcbiAgICAgICAgY29uZGl0aW9uczogcG9saWN5LmNvbmRpdGlvbnMsXG4gICAgICAgIHNjb3BlOiB0aGlzLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCByZWFkIHBlcm1pc3Npb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIGZvciB0aGUgaW1hZ2VcbiAgICpcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICovXG4gIHB1YmxpYyBncmFudFJlYWQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdyYW50KGdyYW50ZWUsICdpbWFnZWJ1aWxkZXI6R2V0SW1hZ2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgaW1hZ2UgdG8gYSBCYXNlSW1hZ2UsIHRvIHVzZSBhcyB0aGUgcGFyZW50IGltYWdlIGluIGFuIGltYWdlIHJlY2lwZVxuICAgKi9cbiAgcHVibGljIHRvQmFzZUltYWdlKCk6IEJhc2VJbWFnZSB7XG4gICAgcmV0dXJuIEJhc2VJbWFnZS5mcm9tSW1hZ2UodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIGltYWdlIHRvIGEgQ29udGFpbmVyQmFzZUltYWdlLCB0byB1c2UgYXMgdGhlIHBhcmVudCBpbWFnZSBpbiBhIGNvbnRhaW5lciByZWNpcGVcbiAgICovXG4gIHB1YmxpYyB0b0NvbnRhaW5lckJhc2VJbWFnZSgpOiBCYXNlQ29udGFpbmVySW1hZ2Uge1xuICAgIHJldHVybiBCYXNlQ29udGFpbmVySW1hZ2UuZnJvbUltYWdlKHRoaXMpO1xuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBFQzIgSW1hZ2UgQnVpbGRlciBJbWFnZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS9jcmVhdGUtaW1hZ2VzLmh0bWxcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIEltYWdlIGV4dGVuZHMgSW1hZ2VCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtaW1hZ2VidWlsZGVyLWFscGhhLkltYWdlJztcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGltYWdlIGdpdmVuIGl0cyBBUk5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUltYWdlQXJuKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGltYWdlQXJuOiBzdHJpbmcpOiBJSW1hZ2Uge1xuICAgIHJldHVybiB0aGlzLmZyb21JbWFnZUF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7IGltYWdlQXJuIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBpbWFnZSBnaXZlbiBpdHMgbmFtZS4gVGhlIHByb3ZpZGVkIG5hbWUgbXVzdCBiZSBub3JtYWxpemVkIGJ5IGNvbnZlcnRpbmcgYWxsIGFscGhhYmV0aWNhbFxuICAgKiBjaGFyYWN0ZXJzIHRvIGxvd2VyY2FzZSwgYW5kIHJlcGxhY2luZyBhbGwgc3BhY2VzIGFuZCB1bmRlcnNjb3JlcyB3aXRoIGh5cGhlbnMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21JbWFnZU5hbWUoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgaW1hZ2VOYW1lOiBzdHJpbmcpOiBJSW1hZ2Uge1xuICAgIHJldHVybiB0aGlzLmZyb21JbWFnZUF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7IGltYWdlTmFtZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgaW1hZ2UgYnkgcHJvdmlkaW5nIGl0cyBhdHRyaWJ1dGVzLiBJZiB0aGUgaW1hZ2UgbmFtZSBpcyBwcm92aWRlZCBhcyBhbiBhdHRyaWJ1dGUsIGl0IG11c3QgYmVcbiAgICogbm9ybWFsaXplZCBieSBjb252ZXJ0aW5nIGFsbCBhbHBoYWJldGljYWwgY2hhcmFjdGVycyB0byBsb3dlcmNhc2UsIGFuZCByZXBsYWNpbmcgYWxsIHNwYWNlcyBhbmQgdW5kZXJzY29yZXMgd2l0aFxuICAgKiBoeXBoZW5zLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tSW1hZ2VBdHRyaWJ1dGVzKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGF0dHJzOiBJbWFnZUF0dHJpYnV0ZXMpOiBJSW1hZ2Uge1xuICAgIGlmICghYXR0cnMuaW1hZ2VBcm4gJiYgIWF0dHJzLmltYWdlTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoJ2VpdGhlciBpbWFnZUFybiBvciBpbWFnZU5hbWUgaXMgcmVxdWlyZWQnLCBzY29wZSk7XG4gICAgfVxuXG4gICAgY29uc3QgaW1hZ2VBcm4gPVxuICAgICAgYXR0cnMuaW1hZ2VBcm4gPz9cbiAgICAgIGNkay5TdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICAgIHJlc291cmNlOiAnaW1hZ2UnLFxuICAgICAgICByZXNvdXJjZU5hbWU6IGAke2F0dHJzLmltYWdlTmFtZX0vJHthdHRycy5pbWFnZVZlcnNpb24gPz8gTEFURVNUX1ZFUlNJT059YCxcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgW2ltYWdlTmFtZSwgaW1hZ2VWZXJzaW9uXSA9ICgoKSA9PiB7XG4gICAgICBpZiAoYXR0cnMuaW1hZ2VOYW1lKSB7XG4gICAgICAgIHJldHVybiBbYXR0cnMuaW1hZ2VOYW1lLCBhdHRycy5pbWFnZVZlcnNpb24gPz8gTEFURVNUX1ZFUlNJT05dO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbWFnZU5hbWVWZXJzaW9uID0gY2RrLlN0YWNrLm9mKHNjb3BlKS5zcGxpdEFybihpbWFnZUFybiwgY2RrLkFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FKS5yZXNvdXJjZU5hbWUhO1xuXG4gICAgICBjb25zdCBpbWFnZU5hbWVWZXJzaW9uU3BsaXQgPSBjZGsuRm4uc3BsaXQoJy8nLCBpbWFnZU5hbWVWZXJzaW9uKTtcbiAgICAgIHJldHVybiBbY2RrLkZuLnNlbGVjdCgwLCBpbWFnZU5hbWVWZXJzaW9uU3BsaXQpLCBjZGsuRm4uc2VsZWN0KDEsIGltYWdlTmFtZVZlcnNpb25TcGxpdCldO1xuICAgIH0pKCk7XG5cbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBJbWFnZUJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGltYWdlQXJuID0gaW1hZ2VBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaW1hZ2VOYW1lID0gaW1hZ2VOYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGltYWdlVmVyc2lvbiA9IGltYWdlVmVyc2lvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBvYmplY3QgaXMgYW4gSW1hZ2UuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlzSW1hZ2UoeDogYW55KTogeCBpcyBJbWFnZSB7XG4gICAgcmV0dXJuIHggIT09IG51bGwgJiYgdHlwZW9mIHggPT09ICdvYmplY3QnICYmIElNQUdFX1NZTUJPTCBpbiB4O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGltYWdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaW1hZ2VBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGltYWdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaW1hZ2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBpbWFnZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGltYWdlVmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQU1JIElEIG9mIHRoZSBFQzIgQU1JLCBvciBVUkkgZm9yIHRoZSBjb250YWluZXJcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGltYWdlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGluZnJhc3RydWN0dXJlIGNvbmZpZ3VyYXRpb24gdXNlZCBmb3IgdGhlIGltYWdlIGJ1aWxkXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uOiBJSW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgZXhlY3V0aW9uIHJvbGUgdXNlZCBmb3IgdGhlIGltYWdlIGJ1aWxkXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZXhlY3V0aW9uUm9sZT86IGlhbS5JUm9sZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBJbWFnZVByb3BzO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSW1hZ2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgSU1BR0VfU1lNQk9MLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgdGhpcy5pbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb24gPVxuICAgICAgcHJvcHMuaW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uID8/IG5ldyBJbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb24odGhpcywgJ0luZnJhc3RydWN0dXJlQ29uZmlndXJhdGlvbicpO1xuXG4gICAgdGhpcy5leGVjdXRpb25Sb2xlID0gZ2V0RXhlY3V0aW9uUm9sZShcbiAgICAgIHRoaXMsXG4gICAgICAoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpID0+IHRoaXMuZ3JhbnREZWZhdWx0RXhlY3V0aW9uUm9sZVBlcm1pc3Npb25zKGdyYW50ZWUpLFxuICAgICAge1xuICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgaW1hZ2VMb2dHcm91cDogcHJvcHMubG9nR3JvdXAsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zdCBbaW1hZ2UsIHJlY2lwZV0gPSB0aGlzLmNyZWF0ZUltYWdlRnJvbVJlY2lwZShwcm9wcyk7XG5cbiAgICB0aGlzLmltYWdlTmFtZSA9IHRoaXMuZ2V0UmVzb3VyY2VOYW1lQXR0cmlidXRlKGltYWdlLmF0dHJOYW1lKTtcbiAgICB0aGlzLmltYWdlQXJuID0gaW1hZ2UuYXR0ckFybjtcblxuICAgIGlmIChyZWNpcGUuX2lzSW1hZ2VSZWNpcGUoKSkge1xuICAgICAgdGhpcy5pbWFnZUlkID0gaW1hZ2UuYXR0ckltYWdlSWQ7XG4gICAgICB0aGlzLmltYWdlVmVyc2lvbiA9IHJlY2lwZS5pbWFnZVJlY2lwZVZlcnNpb247XG4gICAgfSBlbHNlIGlmIChyZWNpcGUuX2lzQ29udGFpbmVyUmVjaXBlKCkpIHtcbiAgICAgIHRoaXMuaW1hZ2VJZCA9IGltYWdlLmF0dHJJbWFnZVVyaTtcbiAgICAgIHRoaXMuaW1hZ2VWZXJzaW9uID0gcmVjaXBlLmNvbnRhaW5lclJlY2lwZVZlcnNpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKCdyZWNpcGUgbXVzdCBlaXRoZXIgYmUgYW4gaW1hZ2UgcmVjaXBlIG9yIGNvbnRhaW5lciByZWNpcGUnLCB0aGlzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHRoZSBkZWZhdWx0IHBlcm1pc3Npb25zIGZvciBidWlsZGluZyBhbiBpbWFnZSB0byB0aGUgcHJvdmlkZWQgZXhlY3V0aW9uIHJvbGUuXG4gICAqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgZXhlY3V0aW9uIHJvbGUgdXNlZCBmb3IgdGhlIGltYWdlIGJ1aWxkLlxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGdyYW50RGVmYXVsdEV4ZWN1dGlvblJvbGVQZXJtaXNzaW9ucyhncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudFtdIHtcbiAgICBjb25zdCBwb2xpY2llcyA9IGRlZmF1bHRFeGVjdXRpb25Sb2xlUG9saWN5KHRoaXMsIHRoaXMucHJvcHMpO1xuICAgIHJldHVybiBwb2xpY2llcy5tYXAoKHBvbGljeSkgPT5cbiAgICAgIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICAgIGdyYW50ZWU6IGdyYW50ZWUsXG4gICAgICAgIHJlc291cmNlQXJuczogcG9saWN5LnJlc291cmNlcyxcbiAgICAgICAgYWN0aW9uczogcG9saWN5LmFjdGlvbnMsXG4gICAgICAgIGNvbmRpdGlvbnM6IHBvbGljeS5jb25kaXRpb25zLFxuICAgICAgICBzY29wZTogdGhpcyxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIENmbkltYWdlIHJlc291cmNlIGZyb20gdGhlIHJlY2lwZSBhbmQgcHJvcHMgcHJvdmlkZWQuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBQcm9wcyBpbnB1dCBmb3IgdGhlIGNvbnN0cnVjdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVJbWFnZUZyb21SZWNpcGUocHJvcHM6IEltYWdlUHJvcHMpOiBbQ2ZuSW1hZ2UsIElSZWNpcGVCYXNlXSB7XG4gICAgY29uc3QgcmVjaXBlID0gcHJvcHMucmVjaXBlO1xuICAgIGlmIChJbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb24uaXNJbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb24odGhpcy5pbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb24pKSB7XG4gICAgICB0aGlzLmluZnJhc3RydWN0dXJlQ29uZmlndXJhdGlvbi5fYmluZCh7IGlzQ29udGFpbmVyQnVpbGQ6IHJlY2lwZS5faXNDb250YWluZXJSZWNpcGUoKSB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVjaXBlLl9pc0ltYWdlUmVjaXBlKCkgJiYgcmVjaXBlLl9pc0NvbnRhaW5lclJlY2lwZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcigndGhlIHJlY2lwZSBjYW5ub3QgYmUgYm90aCBhbiBJSW1hZ2VSZWNpcGUgYW5kIGFuIElDb250YWluZXJSZWNpcGUnLCB0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAoIXJlY2lwZS5faXNJbWFnZVJlY2lwZSgpICYmICFyZWNpcGUuX2lzQ29udGFpbmVyUmVjaXBlKCkpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKCd0aGUgcmVjaXBlIG11c3QgZWl0aGVyIGJlIGFuIElJbWFnZVJlY2lwZSBvciBJQ29udGFpbmVyUmVjaXBlJywgdGhpcyk7XG4gICAgfVxuXG4gICAgY29uc3QgaW1hZ2UgPSBuZXcgQ2ZuSW1hZ2UodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgLi4uKHJlY2lwZS5faXNJbWFnZVJlY2lwZSgpICYmIHsgaW1hZ2VSZWNpcGVBcm46IHJlY2lwZS5pbWFnZVJlY2lwZUFybiB9KSxcbiAgICAgIC4uLihyZWNpcGUuX2lzQ29udGFpbmVyUmVjaXBlKCkgJiYgeyBjb250YWluZXJSZWNpcGVBcm46IHJlY2lwZS5jb250YWluZXJSZWNpcGVBcm4gfSksXG4gICAgICBpbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb25Bcm46IHRoaXMuaW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uLmluZnJhc3RydWN0dXJlQ29uZmlndXJhdGlvbkFybixcbiAgICAgIGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25Bcm46IHByb3BzLmRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24/LmRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25Bcm4sXG4gICAgICBleGVjdXRpb25Sb2xlOiB0aGlzLmV4ZWN1dGlvblJvbGU/LnJvbGVBcm4sXG4gICAgICBlbmhhbmNlZEltYWdlTWV0YWRhdGFFbmFibGVkOiBwcm9wcy5lbmhhbmNlZEltYWdlTWV0YWRhdGFFbmFibGVkLFxuICAgICAgbG9nZ2luZ0NvbmZpZ3VyYXRpb246IHRoaXMuYnVpbGRMb2dnaW5nQ29uZmlndXJhdGlvbihwcm9wcyksXG4gICAgICBpbWFnZVRlc3RzQ29uZmlndXJhdGlvbjogYnVpbGRJbWFnZVRlc3RzQ29uZmlndXJhdGlvbjxJbWFnZVByb3BzLCBDZm5JbWFnZS5JbWFnZVRlc3RzQ29uZmlndXJhdGlvblByb3BlcnR5PihcbiAgICAgICAgcHJvcHMsXG4gICAgICApLFxuICAgICAgaW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb246IGJ1aWxkSW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb248XG4gICAgICAgIEltYWdlUHJvcHMsXG4gICAgICAgIENmbkltYWdlLkltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uUHJvcGVydHlcbiAgICAgID4odGhpcywgcHJvcHMpLFxuICAgICAgd29ya2Zsb3dzOiBidWlsZFdvcmtmbG93czxJbWFnZVByb3BzLCBDZm5JbWFnZS5Xb3JrZmxvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdPihwcm9wcyksXG4gICAgICBkZWxldGlvblNldHRpbmdzOiB0aGlzLmJ1aWxkRGVsZXRpb25TZXR0aW5ncyhwcm9wcyksXG4gICAgICB0YWdzOiBwcm9wcy50YWdzLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIFtpbWFnZSwgcmVjaXBlXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgdGhlIGxvZ2dpbmdDb25maWd1cmF0aW9uIHByb3BlcnR5IGludG8gdGhlIGBMb2dnaW5nQ29uZmlndXJhdGlvbmAgdHlwZSBpbiB0aGUgQ2xvdWRGb3JtYXRpb24gTDFcbiAgICogZGVmaW5pdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIFByb3BzIGlucHV0IGZvciB0aGUgY29uc3RydWN0XG4gICAqL1xuICBwcml2YXRlIGJ1aWxkTG9nZ2luZ0NvbmZpZ3VyYXRpb24ocHJvcHM6IEltYWdlUHJvcHMpOiBDZm5JbWFnZS5JbWFnZUxvZ2dpbmdDb25maWd1cmF0aW9uUHJvcGVydHkgfCB1bmRlZmluZWQge1xuICAgIGlmICghcHJvcHMubG9nR3JvdXApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgbG9nR3JvdXBOYW1lOiBwcm9wcy5sb2dHcm91cC5sb2dHcm91cE5hbWUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgdGhlIGRlbGV0aW9uU2V0dGluZ3MgcHJvcGVydHkgaW50byB0aGUgYERlbGV0aW9uU2V0dGluZ3NgIHR5cGUgaW4gdGhlIENsb3VkRm9ybWF0aW9uIEwxIGRlZmluaXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBQcm9wcyBpbnB1dCBmb3IgdGhlIGNvbnN0cnVjdFxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZERlbGV0aW9uU2V0dGluZ3MocHJvcHM6IEltYWdlUHJvcHMpOiBDZm5JbWFnZS5EZWxldGlvblNldHRpbmdzUHJvcGVydHkgfCB1bmRlZmluZWQge1xuICAgIGlmIChwcm9wcy5kZWxldGlvbkV4ZWN1dGlvblJvbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4geyBleGVjdXRpb25Sb2xlOiBwcm9wcy5kZWxldGlvbkV4ZWN1dGlvblJvbGUucm9sZUFybiB9O1xuICB9XG59XG4iXX0=
384
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbWFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBbUM7QUFFbkMsMkNBQTJDO0FBQzNDLG1FQUF3RDtBQUV4RCw0RUFBdUU7QUFDdkUsOEVBQThGO0FBQzlGLDBFQUEwRTtBQUUxRSw2Q0FBNkQ7QUFFN0QsaUZBQTJHO0FBQzNHLG1EQUFxRDtBQUNyRCwrRkFJbUQ7QUFDbkQsMkRBQXVGO0FBSXZGLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsdUNBQXVDLENBQUMsQ0FBQztBQXdNekU7O0dBRUc7QUFDSCxJQUFZLGlCQVVYO0FBVkQsV0FBWSxpQkFBaUI7SUFDM0I7O09BRUc7SUFDSCxvQ0FBZSxDQUFBO0lBRWY7O09BRUc7SUFDSCxzQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBVlcsaUJBQWlCLGlDQUFqQixpQkFBaUIsUUFVNUI7QUFFRDs7R0FFRztBQUNILElBQVksU0FVWDtBQVZELFdBQVksU0FBUztJQUNuQjs7T0FFRztJQUNILHdCQUFXLENBQUE7SUFFWDs7T0FFRztJQUNILDhCQUFpQixDQUFBO0FBQ25CLENBQUMsRUFWVyxTQUFTLHlCQUFULFNBQVMsUUFVcEI7QUFFRDs7R0FFRztBQUNILE1BQWUsU0FBVSxTQUFRLEdBQUcsQ0FBQyxRQUFRO0lBZ0IzQzs7Ozs7OztPQU9HO0lBQ0ksS0FBSyxDQUFDLE9BQXVCLEVBQUUsR0FBRyxPQUFpQjtRQUN4RCxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO1lBQzlCLE9BQU87WUFDUCxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzdCLE9BQU87U0FDUixDQUFDLENBQUM7S0FDSjtJQUVEOzs7Ozs7T0FNRztJQUNJLG9DQUFvQyxDQUFDLE9BQXVCO1FBQ2pFLE1BQU0sUUFBUSxHQUFHLElBQUEs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QUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUM7Z0JBQzNELHVCQUF1QixFQUFFLElBQUEsOERBQTRCLEVBQ25ELEtBQUssQ0FDTjtnQkFDRCwwQkFBMEIsRUFBRSxJQUFBLGlFQUErQixFQUd6RCxJQUFJLEVBQUUsS0FBSyxDQUFDO2dCQUNkLFNBQVMsRUFBRSxJQUFBLGdEQUFjLEVBQXVELEtBQUssQ0FBQztnQkFDdEYsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQztnQkFDbkQsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO2FBQ2pCLENBQUMsQ0FBQztZQUVILE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDeEI7UUFFRDs7Ozs7V0FLRztRQUNLLHlCQUF5QixDQUFDLEtBQWlCO1lBQ2pELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3BCLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFFRCxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDdEQ7UUFFRDs7OztXQUlHO1FBQ0sscUJBQXFCLENBQUMsS0FBaUI7WUFDN0MsSUFBSSxLQUFLLENBQUMscUJBQXFCLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzlDLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFFRCxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUMvRDs7WUF0T1UsdURBQUs7Ozs7O0FBQUwsc0JBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgZWNyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lY3InO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgQ2ZuSW1hZ2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaW1hZ2VidWlsZGVyJztcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHsgbWVtb2l6ZWRHZXR0ZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9oZWxwZXJzLWludGVybmFsJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhLCBNZXRob2RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEJhc2VDb250YWluZXJJbWFnZSwgQmFzZUltYWdlIH0gZnJvbSAnLi9iYXNlLWltYWdlJztcbmltcG9ydCB7IElEaXN0cmlidXRpb25Db25maWd1cmF0aW9uIH0gZnJvbSAnLi9kaXN0cmlidXRpb24tY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBJSW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uLCBJbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL2luZnJhc3RydWN0dXJlLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHsgTEFURVNUX1ZFUlNJT04gfSBmcm9tICcuL3ByaXZhdGUvY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIGJ1aWxkSW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb24sXG4gIGJ1aWxkSW1hZ2VUZXN0c0NvbmZpZ3VyYXRpb24sXG4gIGJ1aWxkV29ya2Zsb3dzLFxufSBmcm9tICcuL3ByaXZhdGUvaW1hZ2UtYW5kLXBpcGVsaW5lLXByb3BzLWhlbHBlcic7XG5pbXBvcnQgeyBkZWZhdWx0RXhlY3V0aW9uUm9sZVBvbGljeSwgZ2V0RXhlY3V0aW9uUm9sZSB9IGZyb20gJy4vcHJpdmF0ZS9wb2xpY3ktaGVscGVyJztcbmltcG9ydCB7IElSZWNpcGVCYXNlIH0gZnJvbSAnLi9yZWNpcGUtYmFzZSc7XG5pbXBvcnQgeyBXb3JrZmxvd0NvbmZpZ3VyYXRpb24gfSBmcm9tICcuL3dvcmtmbG93JztcblxuY29uc3QgSU1BR0VfU1lNQk9MID0gU3ltYm9sLmZvcignQGF3cy1jZGsvYXdzLWltYWdlYnVpbGRlci1hbHBoYS5JbWFnZScpO1xuXG4vKipcbiAqIEFuIEVDMiBJbWFnZSBCdWlsZGVyIEltYWdlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUltYWdlIGV4dGVuZHMgY2RrLklSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBpbWFnZVxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBpbWFnZUFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgaW1hZ2VcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBpbWFnZVxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBpbWFnZVZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogR3JhbnQgY3VzdG9tIGFjdGlvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBpbWFnZVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqIEBwYXJhbSBhY3Rpb25zIFRoZSBsaXN0IG9mIGFjdGlvbnNcbiAgICovXG4gIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogR3JhbnRzIHRoZSBkZWZhdWx0IHBlcm1pc3Npb25zIGZvciBidWlsZGluZyBhbiBpbWFnZSB0byB0aGUgcHJvdmlkZWQgZXhlY3V0aW9uIHJvbGUuXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBleGVjdXRpb24gcm9sZSB1c2VkIGZvciB0aGUgaW1hZ2UgYnVpbGQuXG4gICAqL1xuICBncmFudERlZmF1bHRFeGVjdXRpb25Sb2xlUGVybWlzc2lvbnMoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnRbXTtcblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGltYWdlXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICovXG4gIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIGltYWdlIHRvIGEgQmFzZUltYWdlLCB0byB1c2UgYXMgdGhlIHBhcmVudCBpbWFnZSBpbiBhbiBpbWFnZSByZWNpcGVcbiAgICovXG4gIHRvQmFzZUltYWdlKCk6IEJhc2VJbWFnZTtcblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIGltYWdlIHRvIGEgQ29udGFpbmVyQmFzZUltYWdlLCB0byB1c2UgYXMgdGhlIHBhcmVudCBpbWFnZSBpbiBhIGNvbnRhaW5lciByZWNpcGVcbiAgICovXG4gIHRvQ29udGFpbmVyQmFzZUltYWdlKCk6IEJhc2VDb250YWluZXJJbWFnZTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhbiBJbWFnZSByZXNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlUHJvcHMge1xuICAvKipcbiAgICogVGhlIHJlY2lwZSB0aGF0IGRlZmluZXMgdGhlIGJhc2UgaW1hZ2UsIGNvbXBvbmVudHMsIGFuZCBjdXN0b21pemF0aW9ucyB1c2VkIHRvIGJ1aWxkIHRoZSBpbWFnZS4gVGhpcyBjYW4gZWl0aGVyIGJlXG4gICAqIGFuIGltYWdlIHJlY2lwZSwgb3IgYSBjb250YWluZXIgcmVjaXBlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVjaXBlOiBJUmVjaXBlQmFzZTtcblxuICAvKipcbiAgICogVGhlIGluZnJhc3RydWN0dXJlIGNvbmZpZ3VyYXRpb24gdXNlZCBmb3IgYnVpbGRpbmcgdGhlIGltYWdlLlxuICAgKlxuICAgKiBBIGRlZmF1bHQgaW5mcmFzdHJ1Y3R1cmUgY29uZmlndXJhdGlvbiB3aWxsIGJlIHVzZWQgaWYgb25lIGlzIG5vdCBwcm92aWRlZC5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiB3aWxsIGNyZWF0ZSBhbiBpbnN0YW5jZSBwcm9maWxlIGFuZCByb2xlIHdpdGggbWluaW1hbCBwZXJtaXNzaW9ucyBuZWVkZWQgdG8gYnVpbGQgdGhlXG4gICAqIGltYWdlLCBhdHRhY2hlZCB0byB0aGUgRUMyIGluc3RhbmNlLlxuICAgKlxuICAgKiBJTURTdjIgd2lsbCBiZSByZXF1aXJlZCBieSBkZWZhdWx0IG9uIHRoZSBpbnN0YW5jZXMgdXNlZCB0byBidWlsZCBhbmQgdGVzdCB0aGUgaW1hZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYW4gaW5mcmFzdHJ1Y3R1cmUgY29uZmlndXJhdGlvbiB3aWxsIGJlIGNyZWF0ZWQgd2l0aCB0aGUgZGVmYXVsdCBzZXR0aW5nc1xuICAgKi9cbiAgcmVhZG9ubHkgaW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uPzogSUluZnJhc3RydWN0dXJlQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIHVzZWQgZm9yIGRpc3RyaWJ1dGluZyB0aGUgaW1hZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24/OiBJRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2Ygd29ya2Zsb3cgY29uZmlndXJhdGlvbnMgdXNlZCB0byBidWlsZCB0aGUgaW1hZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gSW1hZ2UgQnVpbGRlciB3aWxsIHVzZSBhIGRlZmF1bHQgc2V0IG9mIHdvcmtmbG93cyBmb3IgdGhlIGJ1aWxkIHRvIGJ1aWxkLCB0ZXN0LCBhbmQgZGlzdHJpYnV0ZSB0aGVcbiAgICogaW1hZ2VcbiAgICovXG4gIHJlYWRvbmx5IHdvcmtmbG93cz86IFdvcmtmbG93Q29uZmlndXJhdGlvbltdO1xuXG4gIC8qKlxuICAgKiBUaGUgZXhlY3V0aW9uIHJvbGUgdXNlZCB0byBwZXJmb3JtIHdvcmtmbG93IGFjdGlvbnMgdG8gYnVpbGQgdGhlIGltYWdlLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgSW1hZ2UgQnVpbGRlciBTZXJ2aWNlIExpbmtlZCBSb2xlIChTTFIpIHdpbGwgYmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGFuZCB1c2VkIGFzIHRoZSBleGVjdXRpb25cbiAgICogcm9sZS4gSG93ZXZlciwgd2hlbiBwcm92aWRpbmcgYSBjdXN0b20gc2V0IG9mIGltYWdlIHdvcmtmbG93cyBmb3IgdGhlIGltYWdlLCBhbiBleGVjdXRpb24gcm9sZSB3aWxsIGJlXG4gICAqIGdlbmVyYXRlZCB3aXRoIHRoZSBtaW5pbWFsIHBlcm1pc3Npb25zIG5lZWRlZCB0byBleGVjdXRlIHRoZSB3b3JrZmxvd3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gSW1hZ2UgQnVpbGRlciB3aWxsIHVzZSB0aGUgU0xSIGlmIHBvc3NpYmxlLiBPdGhlcndpc2UsIGFuIGV4ZWN1dGlvbiByb2xlIHdpbGwgYmUgZ2VuZXJhdGVkXG4gICAqL1xuICByZWFkb25seSBleGVjdXRpb25Sb2xlPzogaWFtLklSb2xlO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9nIGdyb3VwIHRvIHVzZSBmb3IgdGhlIGltYWdlLiBCeSBkZWZhdWx0LCBhIGxvZyBncm91cCB3aWxsIGJlIGNyZWF0ZWQgd2l0aCB0aGUgZm9ybWF0XG4gICAqIGAvYXdzL2ltYWdlYnVpbGRlci88aW1hZ2UtbmFtZT5gXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYSBsb2cgZ3JvdXAgd2lsbCBiZSBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSBsb2dHcm91cD86IGxvZ3MuSUxvZ0dyb3VwO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBJbWFnZSBCdWlsZGVyIGtlZXBzIGEgc25hcHNob3Qgb2YgdGhlIHZ1bG5lcmFiaWxpdHkgc2NhbnMgdGhhdCBBbWF6b24gSW5zcGVjdG9yIHJ1bnMgYWdhaW5zdCB0aGVcbiAgICogYnVpbGQgaW5zdGFuY2Ugd2hlbiB5b3UgY3JlYXRlIGEgbmV3IGltYWdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VTY2FubmluZ0VuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGFpbmVyIHJlcG9zaXRvcnkgdGhhdCBBbWF6b24gSW5zcGVjdG9yIHNjYW5zIHRvIGlkZW50aWZ5IGZpbmRpbmdzIGZvciB5b3VyIGNvbnRhaW5lciBpbWFnZXMuIElmIGFcbiAgICogcmVwb3NpdG9yeSBpcyBub3QgcHJvdmlkZWQsIEltYWdlIEJ1aWxkZXIgY3JlYXRlcyBhIHJlcG9zaXRvcnkgbmFtZWQgYGltYWdlLWJ1aWxkZXItaW1hZ2Utc2Nhbm5pbmctcmVwb3NpdG9yeWBcbiAgICogZm9yIHZ1bG5lcmFiaWxpdHkgc2Nhbm5pbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gaWYgc2Nhbm5pbmcgaXMgZW5hYmxlZCwgYSByZXBvc2l0b3J5IHdpbGwgYmUgY3JlYXRlZCBieSBJbWFnZSBCdWlsZGVyIGlmIG9uZSBpcyBub3QgcHJvdmlkZWRcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlU2Nhbm5pbmdFY3JSZXBvc2l0b3J5PzogZWNyLklSZXBvc2l0b3J5O1xuXG4gIC8qKlxuICAgKiBUaGUgdGFncyBmb3IgSW1hZ2UgQnVpbGRlciB0byBhcHBseSB0byB0aGUgb3V0cHV0IGNvbnRhaW5lciBpbWFnZSB0aGF0IEFtYXpvbiBJbnNwZWN0b3Igc2NhbnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlU2Nhbm5pbmdFY3JUYWdzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIElmIGVuYWJsZWQsIGNvbGxlY3RzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGltYWdlIGJlaW5nIGNyZWF0ZWQsIGluY2x1ZGluZyB0aGUgb3BlcmF0aW5nIHN5c3RlbSAoT1MpXG4gICAqIHZlcnNpb24gYW5kIHBhY2thZ2UgbGlzdCBmb3IgdGhlIEFNSS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5oYW5jZWRJbWFnZU1ldGFkYXRhRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcnVuIHRlc3RzIGFmdGVyIGJ1aWxkaW5nIGFuIGltYWdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBpbWFnZVRlc3RzRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBleGVjdXRpb24gcm9sZSB0byB1c2UgZm9yIGRlbGV0aW5nIHRoZSBpbWFnZSBhcyB3ZWxsIGFzIHRoZSB1bmRlcmx5aW5nIHJlc291cmNlcywgc3VjaCBhcyB0aGUgQU1Jcywgc25hcHNob3RzLFxuICAgKiBhbmQgY29udGFpbmVycy4gVGhpcyByb2xlIHNob3VsZCBjb250YWluIHJlc291cmNlIGxpZmVjeWNsZSBwZXJtaXNzaW9ucyByZXF1aXJlZCB0byBkZWxldGUgdGhlIHVuZGVybHlpbmdcbiAgICogQU1Jcy9jb250YWluZXJzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGV4ZWN1dGlvbiByb2xlLiBPbmx5IHRoZSBJbWFnZSBCdWlsZGVyIGltYWdlIHdpbGwgYmUgZGVsZXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRlbGV0aW9uRXhlY3V0aW9uUm9sZT86IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogVGhlIHRhZ3MgdG8gYXBwbHkgdG8gdGhlIGltYWdlXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGFuIEVDMiBJbWFnZSBCdWlsZGVyIGltYWdlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGltYWdlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVyaXZlZCBmcm9tIHRoZSBpbWFnZU5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgaW1hZ2VcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZXJpdmVkIGZyb20gdGhlIGltYWdlQXJuXG4gICAqL1xuICByZWFkb25seSBpbWFnZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBpbWFnZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgaW1hZ2UsIHgueC54XG4gICAqL1xuICByZWFkb25seSBpbWFnZVZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgaW1hZ2VcbiAqL1xuZXhwb3J0IGVudW0gSW1hZ2VBcmNoaXRlY3R1cmUge1xuICAvKipcbiAgICogNjQgYml0IGFyY2hpdGVjdHVyZSB3aXRoIHRoZSBBUk0gaW5zdHJ1Y3Rpb24gc2V0XG4gICAqL1xuICBBUk02NCA9ICdhcm02NCcsXG5cbiAgLyoqXG4gICAqIDY0IGJpdCBhcmNoaXRlY3R1cmUgd2l0aCB4ODYgaW5zdHJ1Y3Rpb24gc2V0XG4gICAqL1xuICBYODZfNjQgPSAneDg2XzY0Jyxcbn1cblxuLyoqXG4gKiBUaGUgdHlwZSBvZiB0aGUgaW1hZ2VcbiAqL1xuZXhwb3J0IGVudW0gSW1hZ2VUeXBlIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgaW1hZ2UgcHJvZHVjZWQgaXMgYW4gQU1JXG4gICAqL1xuICBBTUkgPSAnQU1JJyxcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBpbWFnZSBwcm9kdWNlZCBpcyBhIERvY2tlciBpbWFnZVxuICAgKi9cbiAgRE9DS0VSID0gJ0RPQ0tFUicsXG59XG5cbi8qKlxuICogQSBuZXcgb3IgaW1wb3J0ZWQgSW1hZ2VcbiAqL1xuYWJzdHJhY3QgY2xhc3MgSW1hZ2VCYXNlIGV4dGVuZHMgY2RrLlJlc291cmNlIGltcGxlbWVudHMgSUltYWdlIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGltYWdlXG4gICAqL1xuICBhYnN0cmFjdCByZWFkb25seSBpbWFnZUFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgaW1hZ2VcbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGltYWdlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgaW1hZ2VcbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGltYWdlVmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHcmFudCBjdXN0b20gYWN0aW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGltYWdlXG4gICAqXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqIEBwYXJhbSBhY3Rpb25zIFRoZSBsaXN0IG9mIGFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZSxcbiAgICAgIHJlc291cmNlQXJuczogW3RoaXMuaW1hZ2VBcm5dLFxuICAgICAgYWN0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgdGhlIGRlZmF1bHQgcGVybWlzc2lvbnMgZm9yIGJ1aWxkaW5nIGFuIGltYWdlIHRvIHRoZSBwcm92aWRlZCBleGVjdXRpb24gcm9sZS5cbiAgICpcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBleGVjdXRpb24gcm9sZSB1c2VkIGZvciB0aGUgaW1hZ2UgYnVpbGQuXG4gICAqL1xuICBwdWJsaWMgZ3JhbnREZWZhdWx0RXhlY3V0aW9uUm9sZVBlcm1pc3Npb25zKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50W10ge1xuICAgIGNvbnN0IHBvbGljaWVzID0gZGVmYXVsdEV4ZWN1dGlvblJvbGVQb2xpY3kodGhpcyk7XG4gICAgcmV0dXJuIHBvbGljaWVzLm1hcCgocG9saWN5KSA9PlxuICAgICAgaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgICAgZ3JhbnRlZTogZ3JhbnRlZSxcbiAgICAgICAgcmVzb3VyY2VBcm5zOiBwb2xpY3kucmVzb3VyY2VzLFxuICAgICAgICBhY3Rpb25zOiBwb2xpY3kuYWN0aW9ucyxcbiAgICAgICAgY29uZGl0aW9uczogcG9saWN5LmNvbmRpdGlvbnMsXG4gICAgICAgIHNjb3BlOiB0aGlzLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCByZWFkIHBlcm1pc3Npb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIGZvciB0aGUgaW1hZ2VcbiAgICpcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICovXG4gIHB1YmxpYyBncmFudFJlYWQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdyYW50KGdyYW50ZWUsICdpbWFnZWJ1aWxkZXI6R2V0SW1hZ2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgaW1hZ2UgdG8gYSBCYXNlSW1hZ2UsIHRvIHVzZSBhcyB0aGUgcGFyZW50IGltYWdlIGluIGFuIGltYWdlIHJlY2lwZVxuICAgKi9cbiAgcHVibGljIHRvQmFzZUltYWdlKCk6IEJhc2VJbWFnZSB7XG4gICAgcmV0dXJuIEJhc2VJbWFnZS5mcm9tSW1hZ2UodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIGltYWdlIHRvIGEgQ29udGFpbmVyQmFzZUltYWdlLCB0byB1c2UgYXMgdGhlIHBhcmVudCBpbWFnZSBpbiBhIGNvbnRhaW5lciByZWNpcGVcbiAgICovXG4gIHB1YmxpYyB0b0NvbnRhaW5lckJhc2VJbWFnZSgpOiBCYXNlQ29udGFpbmVySW1hZ2Uge1xuICAgIHJldHVybiBCYXNlQ29udGFpbmVySW1hZ2UuZnJvbUltYWdlKHRoaXMpO1xuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBFQzIgSW1hZ2UgQnVpbGRlciBJbWFnZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS9jcmVhdGUtaW1hZ2VzLmh0bWxcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIEltYWdlIGV4dGVuZHMgSW1hZ2VCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtaW1hZ2VidWlsZGVyLWFscGhhLkltYWdlJztcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGltYWdlIGdpdmVuIGl0cyBBUk5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUltYWdlQXJuKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGltYWdlQXJuOiBzdHJpbmcpOiBJSW1hZ2Uge1xuICAgIHJldHVybiB0aGlzLmZyb21JbWFnZUF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7IGltYWdlQXJuIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBpbWFnZSBnaXZlbiBpdHMgbmFtZS4gVGhlIHByb3ZpZGVkIG5hbWUgbXVzdCBiZSBub3JtYWxpemVkIGJ5IGNvbnZlcnRpbmcgYWxsIGFscGhhYmV0aWNhbFxuICAgKiBjaGFyYWN0ZXJzIHRvIGxvd2VyY2FzZSwgYW5kIHJlcGxhY2luZyBhbGwgc3BhY2VzIGFuZCB1bmRlcnNjb3JlcyB3aXRoIGh5cGhlbnMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21JbWFnZU5hbWUoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgaW1hZ2VOYW1lOiBzdHJpbmcpOiBJSW1hZ2Uge1xuICAgIHJldHVybiB0aGlzLmZyb21JbWFnZUF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7IGltYWdlTmFtZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgaW1hZ2UgYnkgcHJvdmlkaW5nIGl0cyBhdHRyaWJ1dGVzLiBJZiB0aGUgaW1hZ2UgbmFtZSBpcyBwcm92aWRlZCBhcyBhbiBhdHRyaWJ1dGUsIGl0IG11c3QgYmVcbiAgICogbm9ybWFsaXplZCBieSBjb252ZXJ0aW5nIGFsbCBhbHBoYWJldGljYWwgY2hhcmFjdGVycyB0byBsb3dlcmNhc2UsIGFuZCByZXBsYWNpbmcgYWxsIHNwYWNlcyBhbmQgdW5kZXJzY29yZXMgd2l0aFxuICAgKiBoeXBoZW5zLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tSW1hZ2VBdHRyaWJ1dGVzKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGF0dHJzOiBJbWFnZUF0dHJpYnV0ZXMpOiBJSW1hZ2Uge1xuICAgIGlmICghYXR0cnMuaW1hZ2VBcm4gJiYgIWF0dHJzLmltYWdlTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoJ2VpdGhlciBpbWFnZUFybiBvciBpbWFnZU5hbWUgaXMgcmVxdWlyZWQnLCBzY29wZSk7XG4gICAgfVxuXG4gICAgY29uc3QgaW1hZ2VBcm4gPVxuICAgICAgYXR0cnMuaW1hZ2VBcm4gPz9cbiAgICAgIGNkay5TdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICAgIHJlc291cmNlOiAnaW1hZ2UnLFxuICAgICAgICByZXNvdXJjZU5hbWU6IGAke2F0dHJzLmltYWdlTmFtZX0vJHthdHRycy5pbWFnZVZlcnNpb24gPz8gTEFURVNUX1ZFUlNJT059YCxcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgW2ltYWdlTmFtZSwgaW1hZ2VWZXJzaW9uXSA9ICgoKSA9PiB7XG4gICAgICBpZiAoYXR0cnMuaW1hZ2VOYW1lKSB7XG4gICAgICAgIHJldHVybiBbYXR0cnMuaW1hZ2VOYW1lLCBhdHRycy5pbWFnZVZlcnNpb24gPz8gTEFURVNUX1ZFUlNJT05dO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbWFnZU5hbWVWZXJzaW9uID0gY2RrLlN0YWNrLm9mKHNjb3BlKS5zcGxpdEFybihpbWFnZUFybiwgY2RrLkFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FKS5yZXNvdXJjZU5hbWUhO1xuXG4gICAgICBjb25zdCBpbWFnZU5hbWVWZXJzaW9uU3BsaXQgPSBjZGsuRm4uc3BsaXQoJy8nLCBpbWFnZU5hbWVWZXJzaW9uKTtcbiAgICAgIHJldHVybiBbY2RrLkZuLnNlbGVjdCgwLCBpbWFnZU5hbWVWZXJzaW9uU3BsaXQpLCBjZGsuRm4uc2VsZWN0KDEsIGltYWdlTmFtZVZlcnNpb25TcGxpdCldO1xuICAgIH0pKCk7XG5cbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBJbWFnZUJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGltYWdlQXJuID0gaW1hZ2VBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaW1hZ2VOYW1lID0gaW1hZ2VOYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGltYWdlVmVyc2lvbiA9IGltYWdlVmVyc2lvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBvYmplY3QgaXMgYW4gSW1hZ2UuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlzSW1hZ2UoeDogYW55KTogeCBpcyBJbWFnZSB7XG4gICAgcmV0dXJuIHggIT09IG51bGwgJiYgdHlwZW9mIHggPT09ICdvYmplY3QnICYmIElNQUdFX1NZTUJPTCBpbiB4O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBpbmZyYXN0cnVjdHVyZSBjb25maWd1cmF0aW9uIHVzZWQgZm9yIHRoZSBpbWFnZSBidWlsZFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGluZnJhc3RydWN0dXJlQ29uZmlndXJhdGlvbjogSUluZnJhc3RydWN0dXJlQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIGV4ZWN1dGlvbiByb2xlIHVzZWQgZm9yIHRoZSBpbWFnZSBidWlsZFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogSW1hZ2VQcm9wcztcbiAgcHJpdmF0ZSByZXNvdXJjZTogQ2ZuSW1hZ2U7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJbWFnZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBJTUFHRV9TWU1CT0wsIHsgdmFsdWU6IHRydWUgfSk7XG5cbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG5cbiAgICB0aGlzLmluZnJhc3RydWN0dXJlQ29uZmlndXJhdGlvbiA9XG4gICAgICBwcm9wcy5pbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb24gPz8gbmV3IEluZnJhc3RydWN0dXJlQ29uZmlndXJhdGlvbih0aGlzLCAnSW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uJyk7XG5cbiAgICB0aGlzLmV4ZWN1dGlvblJvbGUgPSBnZXRFeGVjdXRpb25Sb2xlKFxuICAgICAgdGhpcyxcbiAgICAgIChncmFudGVlOiBpYW0uSUdyYW50YWJsZSkgPT4gdGhpcy5ncmFudERlZmF1bHRFeGVjdXRpb25Sb2xlUGVybWlzc2lvbnMoZ3JhbnRlZSksXG4gICAgICB7XG4gICAgICAgIC4uLnByb3BzLFxuICAgICAgICBpbWFnZUxvZ0dyb3VwOiBwcm9wcy5sb2dHcm91cCxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGNvbnN0IFtpbWFnZSwgX10gPSB0aGlzLmNyZWF0ZUltYWdlRnJvbVJlY2lwZShwcm9wcyk7XG4gICAgdGhpcy5yZXNvdXJjZSA9IGltYWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyB0aGUgZGVmYXVsdCBwZXJtaXNzaW9ucyBmb3IgYnVpbGRpbmcgYW4gaW1hZ2UgdG8gdGhlIHByb3ZpZGVkIGV4ZWN1dGlvbiByb2xlLlxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIGV4ZWN1dGlvbiByb2xlIHVzZWQgZm9yIHRoZSBpbWFnZSBidWlsZC5cbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBncmFudERlZmF1bHRFeGVjdXRpb25Sb2xlUGVybWlzc2lvbnMoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnRbXSB7XG4gICAgY29uc3QgcG9saWNpZXMgPSBkZWZhdWx0RXhlY3V0aW9uUm9sZVBvbGljeSh0aGlzLCB0aGlzLnByb3BzKTtcbiAgICByZXR1cm4gcG9saWNpZXMubWFwKChwb2xpY3kpID0+XG4gICAgICBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgICBncmFudGVlOiBncmFudGVlLFxuICAgICAgICByZXNvdXJjZUFybnM6IHBvbGljeS5yZXNvdXJjZXMsXG4gICAgICAgIGFjdGlvbnM6IHBvbGljeS5hY3Rpb25zLFxuICAgICAgICBjb25kaXRpb25zOiBwb2xpY3kuY29uZGl0aW9ucyxcbiAgICAgICAgc2NvcGU6IHRoaXMsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgQG1lbW9pemVkR2V0dGVyXG4gIHB1YmxpYyBnZXQgaW1hZ2VOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VOYW1lQXR0cmlidXRlKHRoaXMucmVzb3VyY2UuYXR0ck5hbWUpO1xuICB9XG5cbiAgQG1lbW9pemVkR2V0dGVyXG4gIHB1YmxpYyBnZXQgaW1hZ2VBcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZS5hdHRyQXJuO1xuICB9XG5cbiAgQG1lbW9pemVkR2V0dGVyXG4gIHB1YmxpYyBnZXQgaW1hZ2VWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgcmVjaXBlID0gdGhpcy5wcm9wcy5yZWNpcGU7XG4gICAgaWYgKHJlY2lwZS5faXNJbWFnZVJlY2lwZSgpKSB7XG4gICAgICByZXR1cm4gcmVjaXBlLmltYWdlUmVjaXBlVmVyc2lvbjtcbiAgICB9IGVsc2UgaWYgKHJlY2lwZS5faXNDb250YWluZXJSZWNpcGUoKSkge1xuICAgICAgcmV0dXJuIHJlY2lwZS5jb250YWluZXJSZWNpcGVWZXJzaW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcigncmVjaXBlIG11c3QgZWl0aGVyIGJlIGFuIGltYWdlIHJlY2lwZSBvciBjb250YWluZXIgcmVjaXBlJywgdGhpcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBTUkgSUQgb2YgdGhlIEVDMiBBTUksIG9yIFVSSSBmb3IgdGhlIGNvbnRhaW5lclxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBAbWVtb2l6ZWRHZXR0ZXJcbiAgcHVibGljIGdldCBpbWFnZUlkKCk6IHN0cmluZyB7XG4gICAgY29uc3QgcmVjaXBlID0gdGhpcy5wcm9wcy5yZWNpcGU7XG4gICAgaWYgKHJlY2lwZS5faXNJbWFnZVJlY2lwZSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZS5hdHRySW1hZ2VJZDtcbiAgICB9IGVsc2UgaWYgKHJlY2lwZS5faXNDb250YWluZXJSZWNpcGUoKSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2UuYXR0ckltYWdlVXJpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcigncmVjaXBlIG11c3QgZWl0aGVyIGJlIGFuIGltYWdlIHJlY2lwZSBvciBjb250YWluZXIgcmVjaXBlJywgdGhpcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDZm5JbWFnZSByZXNvdXJjZSBmcm9tIHRoZSByZWNpcGUgYW5kIHByb3BzIHByb3ZpZGVkLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgUHJvcHMgaW5wdXQgZm9yIHRoZSBjb25zdHJ1Y3RcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlSW1hZ2VGcm9tUmVjaXBlKHByb3BzOiBJbWFnZVByb3BzKTogW0NmbkltYWdlLCBJUmVjaXBlQmFzZV0ge1xuICAgIGNvbnN0IHJlY2lwZSA9IHByb3BzLnJlY2lwZTtcbiAgICBpZiAoSW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uLmlzSW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uKHRoaXMuaW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uKSkge1xuICAgICAgdGhpcy5pbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb24uX2JpbmQoeyBpc0NvbnRhaW5lckJ1aWxkOiByZWNpcGUuX2lzQ29udGFpbmVyUmVjaXBlKCkgfSk7XG4gICAgfVxuXG4gICAgaWYgKHJlY2lwZS5faXNJbWFnZVJlY2lwZSgpICYmIHJlY2lwZS5faXNDb250YWluZXJSZWNpcGUoKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoJ3RoZSByZWNpcGUgY2Fubm90IGJlIGJvdGggYW4gSUltYWdlUmVjaXBlIGFuZCBhbiBJQ29udGFpbmVyUmVjaXBlJywgdGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKCFyZWNpcGUuX2lzSW1hZ2VSZWNpcGUoKSAmJiAhcmVjaXBlLl9pc0NvbnRhaW5lclJlY2lwZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcigndGhlIHJlY2lwZSBtdXN0IGVpdGhlciBiZSBhbiBJSW1hZ2VSZWNpcGUgb3IgSUNvbnRhaW5lclJlY2lwZScsIHRoaXMpO1xuICAgIH1cblxuICAgIGNvbnN0IGltYWdlID0gbmV3IENmbkltYWdlKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIC4uLihyZWNpcGUuX2lzSW1hZ2VSZWNpcGUoKSAmJiB7IGltYWdlUmVjaXBlQXJuOiByZWNpcGUuaW1hZ2VSZWNpcGVBcm4gfSksXG4gICAgICAuLi4ocmVjaXBlLl9pc0NvbnRhaW5lclJlY2lwZSgpICYmIHsgY29udGFpbmVyUmVjaXBlQXJuOiByZWNpcGUuY29udGFpbmVyUmVjaXBlQXJuIH0pLFxuICAgICAgaW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uQXJuOiB0aGlzLmluZnJhc3RydWN0dXJlQ29uZmlndXJhdGlvbi5pbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb25Bcm4sXG4gICAgICBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuOiBwcm9wcy5kaXN0cmlidXRpb25Db25maWd1cmF0aW9uPy5kaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuLFxuICAgICAgZXhlY3V0aW9uUm9sZTogdGhpcy5leGVjdXRpb25Sb2xlPy5yb2xlQXJuLFxuICAgICAgZW5oYW5jZWRJbWFnZU1ldGFkYXRhRW5hYmxlZDogcHJvcHMuZW5oYW5jZWRJbWFnZU1ldGFkYXRhRW5hYmxlZCxcbiAgICAgIGxvZ2dpbmdDb25maWd1cmF0aW9uOiB0aGlzLmJ1aWxkTG9nZ2luZ0NvbmZpZ3VyYXRpb24ocHJvcHMpLFxuICAgICAgaW1hZ2VUZXN0c0NvbmZpZ3VyYXRpb246IGJ1aWxkSW1hZ2VUZXN0c0NvbmZpZ3VyYXRpb248SW1hZ2VQcm9wcywgQ2ZuSW1hZ2UuSW1hZ2VUZXN0c0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eT4oXG4gICAgICAgIHByb3BzLFxuICAgICAgKSxcbiAgICAgIGltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uOiBidWlsZEltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uPFxuICAgICAgICBJbWFnZVByb3BzLFxuICAgICAgICBDZm5JbWFnZS5JbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvblByb3BlcnR5XG4gICAgICA+KHRoaXMsIHByb3BzKSxcbiAgICAgIHdvcmtmbG93czogYnVpbGRXb3JrZmxvd3M8SW1hZ2VQcm9wcywgQ2ZuSW1hZ2UuV29ya2Zsb3dDb25maWd1cmF0aW9uUHJvcGVydHlbXT4ocHJvcHMpLFxuICAgICAgZGVsZXRpb25TZXR0aW5nczogdGhpcy5idWlsZERlbGV0aW9uU2V0dGluZ3MocHJvcHMpLFxuICAgICAgdGFnczogcHJvcHMudGFncyxcbiAgICB9KTtcblxuICAgIHJldHVybiBbaW1hZ2UsIHJlY2lwZV07XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIHRoZSBsb2dnaW5nQ29uZmlndXJhdGlvbiBwcm9wZXJ0eSBpbnRvIHRoZSBgTG9nZ2luZ0NvbmZpZ3VyYXRpb25gIHR5cGUgaW4gdGhlIENsb3VkRm9ybWF0aW9uIEwxXG4gICAqIGRlZmluaXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBQcm9wcyBpbnB1dCBmb3IgdGhlIGNvbnN0cnVjdFxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZExvZ2dpbmdDb25maWd1cmF0aW9uKHByb3BzOiBJbWFnZVByb3BzKTogQ2ZuSW1hZ2UuSW1hZ2VMb2dnaW5nQ29uZmlndXJhdGlvblByb3BlcnR5IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXByb3BzLmxvZ0dyb3VwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB7IGxvZ0dyb3VwTmFtZTogcHJvcHMubG9nR3JvdXAubG9nR3JvdXBOYW1lIH07XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIHRoZSBkZWxldGlvblNldHRpbmdzIHByb3BlcnR5IGludG8gdGhlIGBEZWxldGlvblNldHRpbmdzYCB0eXBlIGluIHRoZSBDbG91ZEZvcm1hdGlvbiBMMSBkZWZpbml0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgUHJvcHMgaW5wdXQgZm9yIHRoZSBjb25zdHJ1Y3RcbiAgICovXG4gIHByaXZhdGUgYnVpbGREZWxldGlvblNldHRpbmdzKHByb3BzOiBJbWFnZVByb3BzKTogQ2ZuSW1hZ2UuRGVsZXRpb25TZXR0aW5nc1Byb3BlcnR5IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAocHJvcHMuZGVsZXRpb25FeGVjdXRpb25Sb2xlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZXhlY3V0aW9uUm9sZTogcHJvcHMuZGVsZXRpb25FeGVjdXRpb25Sb2xlLnJvbGVBcm4gfTtcbiAgfVxufVxuIl19
@@ -294,14 +294,6 @@ export declare class InfrastructureConfiguration extends InfrastructureConfigura
294
294
  * Return whether the given object is an InfrastructureConfiguration.
295
295
  */
296
296
  static isInfrastructureConfiguration(x: any): x is InfrastructureConfiguration;
297
- /**
298
- * The ARN of the infrastructure configuration
299
- */
300
- readonly infrastructureConfigurationArn: string;
301
- /**
302
- * The name of the infrastructure configuration
303
- */
304
- readonly infrastructureConfigurationName: string;
305
297
  /**
306
298
  * The EC2 instance profile to use for the build
307
299
  */
@@ -315,7 +307,10 @@ export declare class InfrastructureConfiguration extends InfrastructureConfigura
315
307
  */
316
308
  readonly logBucket?: s3.IBucket;
317
309
  private readonly autoGeneratedInstanceProfileRole?;
310
+ private resource;
318
311
  constructor(scope: Construct, id: string, props?: InfrastructureConfigurationProps);
312
+ get infrastructureConfigurationName(): string;
313
+ get infrastructureConfigurationArn(): string;
319
314
  private validateInfrastructureConfigurationName;
320
315
  /**
321
316
  * @internal