@aws-cdk/aws-imagebuilder-alpha 2.256.1-alpha.0 → 2.258.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.
@@ -1,4 +1,20 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
2
18
  var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
3
19
  var useValue = arguments.length > 2;
4
20
  for (var i = 0; i < initializers.length; i++) {
@@ -33,13 +49,30 @@ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn,
33
49
  if (target) Object.defineProperty(target, contextIn.name, descriptor);
34
50
  done = true;
35
51
  };
52
+ var __importStar = (this && this.__importStar) || (function () {
53
+ var ownKeys = function(o) {
54
+ ownKeys = Object.getOwnPropertyNames || function (o) {
55
+ var ar = [];
56
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
57
+ return ar;
58
+ };
59
+ return ownKeys(o);
60
+ };
61
+ return function (mod) {
62
+ if (mod && mod.__esModule) return mod;
63
+ var result = {};
64
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
65
+ __setModuleDefault(result, mod);
66
+ return result;
67
+ };
68
+ })();
36
69
  Object.defineProperty(exports, "__esModule", { value: true });
37
70
  exports.ImagePipeline = exports.ImagePipelineStatus = exports.ScheduleStartCondition = void 0;
38
71
  const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
39
72
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
40
- const cdk = require("aws-cdk-lib");
41
- const events = require("aws-cdk-lib/aws-events");
42
- const iam = require("aws-cdk-lib/aws-iam");
73
+ const cdk = __importStar(require("aws-cdk-lib"));
74
+ const events = __importStar(require("aws-cdk-lib/aws-events"));
75
+ const iam = __importStar(require("aws-cdk-lib/aws-iam"));
43
76
  const aws_imagebuilder_1 = require("aws-cdk-lib/aws-imagebuilder");
44
77
  const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal");
45
78
  const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
@@ -293,7 +326,7 @@ let ImagePipeline = (() => {
293
326
  ImagePipeline = _classThis = _classDescriptor.value;
294
327
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
295
328
  }
296
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ImagePipeline", version: "2.256.1-alpha.0" };
329
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ImagePipeline", version: "2.258.0-alpha.0" };
297
330
  /** Uniquely identifies this class. */
298
331
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-imagebuilder-alpha.ImagePipeline';
299
332
  /**
@@ -476,4 +509,4 @@ let ImagePipeline = (() => {
476
509
  return ImagePipeline = _classThis;
477
510
  })();
478
511
  exports.ImagePipeline = ImagePipeline;
479
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtcGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbWFnZS1waXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBbUM7QUFFbkMsaURBQWlEO0FBQ2pELDJDQUEyQztBQUMzQyxtRUFBZ0U7QUFFaEUsNEVBQTRFO0FBQzVFLDhFQUE4RjtBQUM5RiwwRUFBMEU7QUFJMUUsaUZBQTZFO0FBQzdFLCtGQUltRDtBQUNuRCwyREFBdUY7QUFJdkYsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLCtDQUErQyxDQUFDLENBQUM7QUF1UzFGOztHQUVHO0FBQ0gsSUFBWSxzQkFXWDtBQVhELFdBQVksc0JBQXNCO0lBQ2hDOztPQUVHO0lBQ0gseUVBQStDLENBQUE7SUFFL0M7OztPQUdHO0lBQ0gsaUlBQXVHLENBQUE7QUFDekcsQ0FBQyxFQVhXLHNCQUFzQixzQ0FBdEIsc0JBQXNCLFFBV2pDO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLG1CQVVYO0FBVkQsV0FBWSxtQkFBbUI7SUFDN0I7O09BRUc7SUFDSCwwQ0FBbUIsQ0FBQTtJQUVuQjs7T0FFRztJQUNILDRDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFWVyxtQkFBbUIsbUNBQW5CLG1CQUFtQixRQVU5QjtBQUVEOztHQUVHO0FBQ0gsTUFBZSxpQkFBa0IsU0FBUSxHQUFHLENBQUMsUUFBUTtJQVduRDs7Ozs7O09BTUc7SUFDSSxLQUFLLENBQUMsT0FBdUIsRUFBRSxHQUFHLE9BQWlCO1FBQ3hELE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7WUFDOUIsT0FBTyxFQUFFLE9BQU87WUFDaEIsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBQ3JDLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQyxDQUFDO0tBQ0o7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LE1BQU0sSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUEsc0JBQUcsRUFBQSxtQ0FBbUMsRUFBRSxzREFBc0QsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDdEksQ0FBQztZQUNILENBQUM7WUFFRCxPQUFPO2dCQUNMLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCO2dCQUN4RCxHQUFHLENBQUMsUUFBUSxDQUFDLHVCQUF1QixLQUFLLFNBQVMsSUFBSTtvQkFDcEQsaUJBQWlCLEVBQUU7d0JBQ2pCLFlBQVksRUFBRSxRQUFRLENBQUMsdUJBQXVCO3FCQUMvQztpQkFDRixDQUFDO2dCQUNGLEdBQUcsQ0FBQyxRQUFRLENBQUMsY0FBYyxLQUFLLFNBQVMsSUFBSTtvQkFDM0MsK0JBQStCLEVBQUUsUUFBUSxDQUFDLGNBQWM7aUJBQ3pELENBQUM7YUFDSCxDQUFDO1NBQ0g7UUFFRDs7Ozs7V0FLRztRQUNLLHlCQUF5QixHQUFHLENBQ2xDLEtBQXlCLEVBQzBDLEVBQUU7WUFDckUsTUFBTSxvQkFBb0IsR0FBRztnQkFDM0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxhQUFhLElBQUksRUFBRSxpQkFBaUIsRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNuRixHQUFHLENBQUMsS0FBSyxDQUFDLHFCQUFxQixJQUFJLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3ZHLENBQUM7WUFFRixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDckYsQ0FBQyxDQUFDOztZQS9OUyx1REFBYTs7Ozs7QUFBYixzQ0FBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgdHlwZSAqIGFzIGVjciBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNyJztcbmltcG9ydCAqIGFzIGV2ZW50cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENmbkltYWdlUGlwZWxpbmUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaW1hZ2VidWlsZGVyJztcbmltcG9ydCB0eXBlICogYXMgbG9ncyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgeyBtZW1vaXplZEdldHRlciwgbGl0IH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvaGVscGVycy1pbnRlcm5hbCc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSwgTWV0aG9kTWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgSURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL2Rpc3RyaWJ1dGlvbi1jb25maWd1cmF0aW9uJztcbmltcG9ydCB0eXBlIHsgSUluZnJhc3RydWN0dXJlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vaW5mcmFzdHJ1Y3R1cmUtY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBJbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL2luZnJhc3RydWN0dXJlLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtcbiAgYnVpbGRJbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbixcbiAgYnVpbGRJbWFnZVRlc3RzQ29uZmlndXJhdGlvbixcbiAgYnVpbGRXb3JrZmxvd3MsXG59IGZyb20gJy4vcHJpdmF0ZS9pbWFnZS1hbmQtcGlwZWxpbmUtcHJvcHMtaGVscGVyJztcbmltcG9ydCB7IGRlZmF1bHRFeGVjdXRpb25Sb2xlUG9saWN5LCBnZXRFeGVjdXRpb25Sb2xlIH0gZnJvbSAnLi9wcml2YXRlL3BvbGljeS1oZWxwZXInO1xuaW1wb3J0IHR5cGUgeyBJUmVjaXBlQmFzZSB9IGZyb20gJy4vcmVjaXBlLWJhc2UnO1xuaW1wb3J0IHR5cGUgeyBXb3JrZmxvd0NvbmZpZ3VyYXRpb24gfSBmcm9tICcuL3dvcmtmbG93JztcblxuY29uc3QgSU1BR0VfUElQRUxJTkVfU1lNQk9MID0gU3ltYm9sLmZvcignQGF3cy1jZGsvYXdzLWltYWdlYnVpbGRlci1hbHBoYS5JbWFnZVBpcGVsaW5lJyk7XG5cbi8qKlxuICogQW4gRUMyIEltYWdlIEJ1aWxkZXIgSW1hZ2UgUGlwZWxpbmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUltYWdlUGlwZWxpbmUgZXh0ZW5kcyBjZGsuSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGltYWdlIHBpcGVsaW5lXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlUGlwZWxpbmVBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGltYWdlIHBpcGVsaW5lXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlUGlwZWxpbmVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdyYW50IGN1c3RvbSBhY3Rpb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIGZvciB0aGUgaW1hZ2UgcGlwZWxpbmVcbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgbGlzdCBvZiBhY3Rpb25zXG4gICAqL1xuICBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQ7XG5cbiAgLyoqXG4gICAqIEdyYW50cyB0aGUgZGVmYXVsdCBwZXJtaXNzaW9ucyBmb3IgYnVpbGRpbmcgYW4gaW1hZ2UgdG8gdGhlIHByb3ZpZGVkIGV4ZWN1dGlvbiByb2xlLlxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgZXhlY3V0aW9uIHJvbGUgdXNlZCBmb3IgdGhlIGltYWdlIGJ1aWxkLlxuICAgKi9cbiAgZ3JhbnREZWZhdWx0RXhlY3V0aW9uUm9sZVBlcm1pc3Npb25zKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50W107XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBpbWFnZSBwaXBlbGluZVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqL1xuICBncmFudFJlYWQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG5cbiAgLyoqXG4gICAqIEdyYW50IHBlcm1pc3Npb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIHRvIHN0YXJ0IGFuIGV4ZWN1dGlvbiBvZiB0aGUgaW1hZ2UgcGlwZWxpbmVcbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKi9cbiAgZ3JhbnRTdGFydEV4ZWN1dGlvbihncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBFdmVudEJyaWRnZSBydWxlIGZvciBJbWFnZSBCdWlsZGVyIGV2ZW50cy5cbiAgICpcbiAgICogQHBhcmFtIGlkIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcnVsZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBldmVudCBydWxlXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL2ludGVnLWV2ZW50YnJpZGdlLmh0bWxcbiAgICovXG4gIG9uRXZlbnQoaWQ6IHN0cmluZywgb3B0aW9ucz86IGV2ZW50cy5PbkV2ZW50T3B0aW9ucyk6IGV2ZW50cy5SdWxlO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIEV2ZW50QnJpZGdlIHJ1bGUgZm9yIEltYWdlIEJ1aWxkZXIgQ1ZFIGRldGVjdGVkIGV2ZW50cy5cbiAgICpcbiAgICogQHBhcmFtIGlkIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcnVsZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBldmVudCBydWxlXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL2ludGVnLWV2ZW50YnJpZGdlLmh0bWxcbiAgICovXG4gIG9uQ1ZFRGV0ZWN0ZWQoaWQ6IHN0cmluZywgb3B0aW9ucz86IGV2ZW50cy5PbkV2ZW50T3B0aW9ucyk6IGV2ZW50cy5SdWxlO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIEV2ZW50QnJpZGdlIHJ1bGUgZm9yIEltYWdlIEJ1aWxkZXIgaW1hZ2Ugc3RhdGUgY2hhbmdlIGV2ZW50cy5cbiAgICpcbiAgICogQHBhcmFtIGlkIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcnVsZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBldmVudCBydWxlXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL2ludGVnLWV2ZW50YnJpZGdlLmh0bWxcbiAgICovXG4gIG9uSW1hZ2VCdWlsZFN0YXRlQ2hhbmdlKGlkOiBzdHJpbmcsIG9wdGlvbnM/OiBldmVudHMuT25FdmVudE9wdGlvbnMpOiBldmVudHMuUnVsZTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBFdmVudEJyaWRnZSBydWxlIGZvciBJbWFnZSBCdWlsZGVyIGltYWdlIGJ1aWxkIGNvbXBsZXRpb24gZXZlbnRzLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBydWxlXG4gICAqIEBwYXJhbSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGV2ZW50IHJ1bGVcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvaW50ZWctZXZlbnRicmlkZ2UuaHRtbFxuICAgKi9cbiAgb25JbWFnZUJ1aWxkQ29tcGxldGVkKGlkOiBzdHJpbmcsIG9wdGlvbnM/OiBldmVudHMuT25FdmVudE9wdGlvbnMpOiBldmVudHMuUnVsZTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBFdmVudEJyaWRnZSBydWxlIGZvciBJbWFnZSBCdWlsZGVyIGltYWdlIGJ1aWxkIGZhaWx1cmUgZXZlbnRzLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBydWxlXG4gICAqIEBwYXJhbSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGV2ZW50IHJ1bGVcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvaW50ZWctZXZlbnRicmlkZ2UuaHRtbFxuICAgKi9cbiAgb25JbWFnZUJ1aWxkRmFpbGVkKGlkOiBzdHJpbmcsIG9wdGlvbnM/OiBldmVudHMuT25FdmVudE9wdGlvbnMpOiBldmVudHMuUnVsZTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBFdmVudEJyaWRnZSBydWxlIGZvciBJbWFnZSBCdWlsZGVyIGltYWdlIHN1Y2Nlc3MgZXZlbnRzLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBydWxlXG4gICAqIEBwYXJhbSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGV2ZW50IHJ1bGVcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvaW50ZWctZXZlbnRicmlkZ2UuaHRtbFxuICAgKi9cbiAgb25JbWFnZUJ1aWxkU3VjY2VlZGVkKGlkOiBzdHJpbmcsIG9wdGlvbnM/OiBldmVudHMuT25FdmVudE9wdGlvbnMpOiBldmVudHMuUnVsZTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBFdmVudEJyaWRnZSBydWxlIGZvciBJbWFnZSBCdWlsZGVyIGltYWdlIHBpcGVsaW5lIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgZXZlbnRzLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBydWxlXG4gICAqIEBwYXJhbSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGV2ZW50IHJ1bGVcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvaW50ZWctZXZlbnRicmlkZ2UuaHRtbFxuICAgKi9cbiAgb25JbWFnZVBpcGVsaW5lQXV0b0Rpc2FibGVkKGlkOiBzdHJpbmcsIG9wdGlvbnM/OiBldmVudHMuT25FdmVudE9wdGlvbnMpOiBldmVudHMuUnVsZTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBFdmVudEJyaWRnZSBydWxlIGZvciBJbWFnZSBCdWlsZGVyIHdhaXQgZm9yIGFjdGlvbiBldmVudHNcbiAgICpcbiAgICogQHBhcmFtIGlkIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcnVsZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBldmVudCBydWxlXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL2ludGVnLWV2ZW50YnJpZGdlLmh0bWxcbiAgICovXG4gIG9uV2FpdEZvckFjdGlvbihpZDogc3RyaW5nLCBvcHRpb25zPzogZXZlbnRzLk9uRXZlbnRPcHRpb25zKTogZXZlbnRzLlJ1bGU7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYW4gSW1hZ2UgUGlwZWxpbmUgcmVzb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbWFnZVBpcGVsaW5lUHJvcHMge1xuICAvKipcbiAgICogVGhlIHJlY2lwZSB0aGF0IGRlZmluZXMgdGhlIGJhc2UgaW1hZ2UsIGNvbXBvbmVudHMsIGFuZCBjdXN0b21pemF0aW9ucyB1c2VkIHRvIGJ1aWxkIHRoZSBpbWFnZS4gVGhpcyBjYW4gZWl0aGVyIGJlXG4gICAqIGFuIGltYWdlIHJlY2lwZSwgb3IgYSBjb250YWluZXIgcmVjaXBlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVjaXBlOiBJUmVjaXBlQmFzZTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGltYWdlIHBpcGVsaW5lLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgbmFtZSBpcyBnZW5lcmF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlUGlwZWxpbmVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGltYWdlIHBpcGVsaW5lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNjaGVkdWxlIG9mIHRoZSBpbWFnZSBwaXBlbGluZS4gVGhpcyBjb25maWd1cmVzIGhvdyBvZnRlbiBhbmQgd2hlbiBhIHBpcGVsaW5lIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBhIG5ld1xuICAgKiBpbWFnZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBub25lLCBhIG1hbnVhbCBpbWFnZSBwaXBlbGluZSB3aWxsIGJlIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHNjaGVkdWxlPzogSW1hZ2VQaXBlbGluZVNjaGVkdWxlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcGlwZWxpbmUgaXMgZW5hYmxlZCB0byBiZSB0cmlnZ2VyZWQgYnkgdGhlIHByb3ZpZGVkIHNjaGVkdWxlXG4gICAqXG4gICAqIEBkZWZhdWx0IEltYWdlUGlwZWxpbmVTdGF0dXMuRU5BQkxFRFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzPzogSW1hZ2VQaXBlbGluZVN0YXR1cztcblxuICAvKipcbiAgICogVGhlIGluZnJhc3RydWN0dXJlIGNvbmZpZ3VyYXRpb24gdXNlZCBmb3IgYnVpbGRpbmcgdGhlIGltYWdlLlxuICAgKlxuICAgKiBBIGRlZmF1bHQgaW5mcmFzdHJ1Y3R1cmUgY29uZmlndXJhdGlvbiB3aWxsIGJlIHVzZWQgaWYgb25lIGlzIG5vdCBwcm92aWRlZC5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiB3aWxsIGNyZWF0ZSBhbiBpbnN0YW5jZSBwcm9maWxlIGFuZCByb2xlIHdpdGggbWluaW1hbCBwZXJtaXNzaW9ucyBuZWVkZWQgdG8gYnVpbGQgdGhlXG4gICAqIGltYWdlLCBhdHRhY2hlZCB0byB0aGUgRUMyIGluc3RhbmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGFuIGluZnJhc3RydWN0dXJlIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBjcmVhdGVkIHdpdGggdGhlIGRlZmF1bHQgc2V0dGluZ3NcbiAgICovXG4gIHJlYWRvbmx5IGluZnJhc3RydWN0dXJlQ29uZmlndXJhdGlvbj86IElJbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiB1c2VkIGZvciBkaXN0cmlidXRpbmcgdGhlIGltYWdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uPzogSURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHdvcmtmbG93IGNvbmZpZ3VyYXRpb25zIHVzZWQgdG8gYnVpbGQgdGhlIGltYWdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEltYWdlIEJ1aWxkZXIgd2lsbCB1c2UgYSBkZWZhdWx0IHNldCBvZiB3b3JrZmxvd3MgZm9yIHRoZSBidWlsZCB0byBidWlsZCwgdGVzdCwgYW5kIGRpc3RyaWJ1dGUgdGhlIGltYWdlXG4gICAqL1xuICByZWFkb25seSB3b3JrZmxvd3M/OiBXb3JrZmxvd0NvbmZpZ3VyYXRpb25bXTtcblxuICAvKipcbiAgICogVGhlIGV4ZWN1dGlvbiByb2xlIHVzZWQgdG8gcGVyZm9ybSB3b3JrZmxvdyBhY3Rpb25zIHRvIGJ1aWxkIHRoaXMgaW1hZ2UuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBJbWFnZSBCdWlsZGVyIFNlcnZpY2UgTGlua2VkIFJvbGUgKFNMUikgd2lsbCBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYW5kIHVzZWQgYXMgdGhlIGV4ZWN1dGlvblxuICAgKiByb2xlLiBIb3dldmVyLCB3aGVuIHByb3ZpZGluZyBhIGN1c3RvbSBzZXQgb2YgaW1hZ2Ugd29ya2Zsb3dzIGZvciB0aGUgcGlwZWxpbmUsIGFuIGV4ZWN1dGlvbiByb2xlIHdpbGwgYmVcbiAgICogZ2VuZXJhdGVkIHdpdGggdGhlIG1pbmltYWwgcGVybWlzc2lvbnMgbmVlZGVkIHRvIGV4ZWN1dGUgdGhlIHdvcmtmbG93cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBJbWFnZSBCdWlsZGVyIHdpbGwgdXNlIHRoZSBTTFIgaWYgcG9zc2libGUuIE90aGVyd2lzZSwgYW4gZXhlY3V0aW9uIHJvbGUgd2lsbCBiZSBnZW5lcmF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2cgZ3JvdXAgdG8gdXNlIGZvciB0aGUgaW1hZ2UgcGlwZWxpbmUuIEJ5IGRlZmF1bHQsIGEgbG9nIGdyb3VwIHdpbGwgYmUgY3JlYXRlZCB3aXRoIHRoZSBmb3JtYXRcbiAgICogYC9hd3MvaW1hZ2VidWlsZGVyL3BpcGVsaW5lLzxwaXBlbGluZS1uYW1lPmBcbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIGxvZyBncm91cCB3aWxsIGJlIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlUGlwZWxpbmVMb2dHcm91cD86IGxvZ3MuSUxvZ0dyb3VwO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9nIGdyb3VwIHRvIHVzZSBmb3IgaW1hZ2VzIGNyZWF0ZWQgZnJvbSB0aGUgaW1hZ2UgcGlwZWxpbmUuIEJ5IGRlZmF1bHQsIGEgbG9nIGdyb3VwIHdpbGwgYmUgY3JlYXRlZCB3aXRoIHRoZVxuICAgKiBmb3JtYXQgYC9hd3MvaW1hZ2VidWlsZGVyLzxpbWFnZS1uYW1lPmAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYSBsb2cgZ3JvdXAgd2lsbCBiZSBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSBpbWFnZUxvZ0dyb3VwPzogbG9ncy5JTG9nR3JvdXA7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIEltYWdlIEJ1aWxkZXIga2VlcHMgYSBzbmFwc2hvdCBvZiB0aGUgdnVsbmVyYWJpbGl0eSBzY2FucyB0aGF0IEFtYXpvbiBJbnNwZWN0b3IgcnVucyBhZ2FpbnN0IHRoZVxuICAgKiBidWlsZCBpbnN0YW5jZSB3aGVuIHlvdSBjcmVhdGUgYSBuZXcgaW1hZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBpbWFnZVNjYW5uaW5nRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBjb250YWluZXIgcmVwb3NpdG9yeSB0aGF0IEFtYXpvbiBJbnNwZWN0b3Igc2NhbnMgdG8gaWRlbnRpZnkgZmluZGluZ3MgZm9yIHlvdXIgY29udGFpbmVyIGltYWdlcy4gSWYgYVxuICAgKiByZXBvc2l0b3J5IGlzIG5vdCBwcm92aWRlZCwgSW1hZ2UgQnVpbGRlciBjcmVhdGVzIGEgcmVwb3NpdG9yeSBuYW1lZCBgaW1hZ2UtYnVpbGRlci1pbWFnZS1zY2FubmluZy1yZXBvc2l0b3J5YFxuICAgKiBmb3IgdnVsbmVyYWJpbGl0eSBzY2FubmluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBpZiBzY2FubmluZyBpcyBlbmFibGVkLCBhIHJlcG9zaXRvcnkgd2lsbCBiZSBjcmVhdGVkIGJ5IEltYWdlIEJ1aWxkZXIgaWYgb25lIGlzIG5vdCBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VTY2FubmluZ0VjclJlcG9zaXRvcnk/OiBlY3IuSVJlcG9zaXRvcnk7XG5cbiAgLyoqXG4gICAqIFRoZSB0YWdzIGZvciBJbWFnZSBCdWlsZGVyIHRvIGFwcGx5IHRvIHRoZSBvdXRwdXQgY29udGFpbmVyIGltYWdlIHRoYXQgQW1hem9uIEluc3BlY3RvciBzY2Fucy5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VTY2FubmluZ0VjclRhZ3M/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogSWYgZW5hYmxlZCwgY29sbGVjdHMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW1hZ2UgYmVpbmcgY3JlYXRlZCwgaW5jbHVkaW5nIHRoZSBvcGVyYXRpbmcgc3lzdGVtIChPUylcbiAgICogdmVyc2lvbiBhbmQgcGFja2FnZSBsaXN0IGZvciB0aGUgQU1JLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBlbmhhbmNlZEltYWdlTWV0YWRhdGFFbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBydW4gdGVzdHMgYWZ0ZXIgYnVpbGRpbmcgYW4gaW1hZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlVGVzdHNFbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHRhZ3MgdG8gYXBwbHkgdG8gdGhlIGltYWdlIHBpcGVsaW5lXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIFRoZSBzY2hlZHVsZSBzZXR0aW5ncyBmb3IgdGhlIGltYWdlIHBpcGVsaW5lLCB3aGljaCBkZWZpbmVzIHdoZW4gYSBwaXBlbGluZSBzaG91bGQgYmUgdHJpZ2dlcmVkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VQaXBlbGluZVNjaGVkdWxlIHtcbiAgLyoqXG4gICAqIFRoZSBzY2hlZHVsZSBleHByZXNzaW9uIHRvIHVzZS4gVGhpcyBjYW4gZWl0aGVyIGJlIGEgY3JvbiBleHByZXNzaW9uIG9yIGEgcmF0ZSBleHByZXNzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZXhwcmVzc2lvbjogZXZlbnRzLlNjaGVkdWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGZhaWx1cmVzIGFsbG93ZWQgYmVmb3JlIHRoZSBwaXBlbGluZSBpcyBhdXRvbWF0aWNhbGx5IGRpc2FibGVkLiBUaGlzIHZhbHVlIG11c3QgYmVcbiAgICogYmV0d2VlbiAxIGFuZCAxMC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBhdXRvLWRpc2FibGUgcG9saWN5IGlzIGNvbmZpZ3VyZWQgYW5kIHRoZSBwaXBlbGluZSBpcyBub3QgYXV0b21hdGljYWxseSBkaXNhYmxlZCBvbiBjb25zZWN1dGl2ZVxuICAgKiBmYWlsdXJlc1xuICAgKi9cbiAgcmVhZG9ubHkgYXV0b0Rpc2FibGVGYWlsdXJlQ291bnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFydCBjb25kaXRpb24gZm9yIHRoZSBwaXBlbGluZSwgaW5kaWNhdGluZyB0aGUgY29uZGl0aW9uIHVuZGVyIHdoaWNoIGEgcGlwZWxpbmUgc2hvdWxkIGJlIHRyaWdnZXJlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgU2NoZWR1bGVTdGFydENvbmRpdGlvbi5FWFBSRVNTSU9OX01BVENIX0FORF9ERVBFTkRFTkNZX1VQREFURVNfQVZBSUxBQkxFXG4gICAqL1xuICByZWFkb25seSBzdGFydENvbmRpdGlvbj86IFNjaGVkdWxlU3RhcnRDb25kaXRpb247XG59XG5cbi8qKlxuICogVGhlIHN0YXJ0IGNvbmRpdGlvbiBmb3IgdGhlIHBpcGVsaW5lLCBpbmRpY2F0aW5nIHRoZSBjb25kaXRpb24gdW5kZXIgd2hpY2ggYSBwaXBlbGluZSBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuICovXG5leHBvcnQgZW51bSBTY2hlZHVsZVN0YXJ0Q29uZGl0aW9uIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0byB0cmlnZ2VyIGEgcGlwZWxpbmUgd2hlbmV2ZXIgaXRzIHNjaGVkdWxlIGlzIG1ldFxuICAgKi9cbiAgRVhQUkVTU0lPTl9NQVRDSF9PTkxZID0gJ0VYUFJFU1NJT05fTUFUQ0hfT05MWScsXG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0byB0cmlnZ2VyIGEgcGlwZWxpbmUgd2hlbmV2ZXIgaXRzIHNjaGVkdWxlIGlzIG1ldCwgYW5kIHRoZXJlIGFyZSBtYXRjaGluZyBkZXBlbmRlbmN5IHVwZGF0ZXMgYXZhaWxhYmxlLFxuICAgKiBzdWNoIGFzIG5ldyB2ZXJzaW9ucyBvZiBjb21wb25lbnRzIG9yIGltYWdlcyB0byB1c2UgaW4gdGhlIHBpcGVsaW5lIGJ1aWxkLlxuICAgKi9cbiAgRVhQUkVTU0lPTl9NQVRDSF9BTkRfREVQRU5ERU5DWV9VUERBVEVTX0FWQUlMQUJMRSA9ICdFWFBSRVNTSU9OX01BVENIX0FORF9ERVBFTkRFTkNZX1VQREFURVNfQVZBSUxBQkxFJyxcbn1cblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcGlwZWxpbmUgaXMgZW5hYmxlZCB0byBiZSB0cmlnZ2VyZWQgYnkgdGhlIHByb3ZpZGVkIHNjaGVkdWxlXG4gKi9cbmV4cG9ydCBlbnVtIEltYWdlUGlwZWxpbmVTdGF0dXMge1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHBpcGVsaW5lIGlzIGVuYWJsZWQgZm9yIHNjaGVkdWxpbmdcbiAgICovXG4gIEVOQUJMRUQgPSAnRU5BQkxFRCcsXG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSBwaXBlbGluZSBpcyBkaXNhYmxlZCBhbmQgd2lsbCBub3QgYmUgdHJpZ2dlcmVkIG9uIHRoZSBzY2hlZHVsZVxuICAgKi9cbiAgRElTQUJMRUQgPSAnRElTQUJMRUQnLFxufVxuXG4vKipcbiAqIEEgbmV3IG9yIGltcG9ydGVkIEltYWdlIFBpcGVsaW5lXG4gKi9cbmFic3RyYWN0IGNsYXNzIEltYWdlUGlwZWxpbmVCYXNlIGV4dGVuZHMgY2RrLlJlc291cmNlIGltcGxlbWVudHMgSUltYWdlUGlwZWxpbmUge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgaW1hZ2UgcGlwZWxpbmVcbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGltYWdlUGlwZWxpbmVBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGltYWdlIHBpcGVsaW5lXG4gICAqL1xuICBhYnN0cmFjdCByZWFkb25seSBpbWFnZVBpcGVsaW5lTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHcmFudCBjdXN0b20gYWN0aW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGltYWdlIHBpcGVsaW5lXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqIEBwYXJhbSBhY3Rpb25zIFRoZSBsaXN0IG9mIGFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZTogZ3JhbnRlZSxcbiAgICAgIHJlc291cmNlQXJuczogW3RoaXMuaW1hZ2VQaXBlbGluZUFybl0sXG4gICAgICBhY3Rpb25zOiBhY3Rpb25zLFxuICAgICAgc2NvcGU6IHRoaXMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHRoZSBkZWZhdWx0IHBlcm1pc3Npb25zIGZvciBidWlsZGluZyBhbiBpbWFnZSB0byB0aGUgcHJvdmlkZWQgZXhlY3V0aW9uIHJvbGUuXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgZXhlY3V0aW9uIHJvbGUgdXNlZCBmb3IgdGhlIGltYWdlIGJ1aWxkLlxuICAgKi9cbiAgcHVibGljIGdyYW50RGVmYXVsdEV4ZWN1dGlvblJvbGVQZXJtaXNzaW9ucyhncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudFtdIHtcbiAgICBjb25zdCBwb2xpY2llcyA9IGRlZmF1bHRFeGVjdXRpb25Sb2xlUG9saWN5KHRoaXMpO1xuICAgIHJldHVybiBwb2xpY2llcy5tYXAoKHBvbGljeSkgPT5cbiAgICAgIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICAgIGdyYW50ZWU6IGdyYW50ZWUsXG4gICAgICAgIHJlc291cmNlQXJuczogcG9saWN5LnJlc291cmNlcyxcbiAgICAgICAgYWN0aW9uczogcG9saWN5LmFjdGlvbnMsXG4gICAgICAgIGNvbmRpdGlvbnM6IHBvbGljeS5jb25kaXRpb25zLFxuICAgICAgICBzY29wZTogdGhpcyxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGltYWdlIHBpcGVsaW5lXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5ncmFudChncmFudGVlLCAnaW1hZ2VidWlsZGVyOkdldEltYWdlUGlwZWxpbmUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSB0byBzdGFydCBhbiBleGVjdXRpb24gb2YgdGhlIGltYWdlIHBpcGVsaW5lXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRTdGFydEV4ZWN1dGlvbihncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoZ3JhbnRlZSwgJ2ltYWdlYnVpbGRlcjpTdGFydEltYWdlUGlwZWxpbmVFeGVjdXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIEV2ZW50QnJpZGdlIHJ1bGUgZm9yIEltYWdlIEJ1aWxkZXIgZXZlbnRzLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBydWxlXG4gICAqIEBwYXJhbSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGV2ZW50IHJ1bGVcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvaW50ZWctZXZlbnRicmlkZ2UuaHRtbFxuICAgKi9cbiAgcHVibGljIG9uRXZlbnQoaWQ6IHN0cmluZywgb3B0aW9uczogZXZlbnRzLk9uRXZlbnRPcHRpb25zID0ge30pOiBldmVudHMuUnVsZSB7XG4gICAgY29uc3QgcnVsZSA9IG5ldyBldmVudHMuUnVsZSh0aGlzLCBpZCwgb3B0aW9ucyk7XG4gICAgcnVsZS5hZGRUYXJnZXQob3B0aW9ucy50YXJnZXQpO1xuICAgIHJ1bGUuYWRkRXZlbnRQYXR0ZXJuKHtcbiAgICAgIHNvdXJjZTogWydhd3MuaW1hZ2VidWlsZGVyJ10sXG4gICAgICAuLi4ob3B0aW9ucy5ldmVudFBhdHRlcm4/LnJlc291cmNlcz8ubGVuZ3RoICYmIHsgcmVzb3VyY2VzOiBvcHRpb25zLmV2ZW50UGF0dGVybi5yZXNvdXJjZXMgfSksXG4gICAgICAuLi4ob3B0aW9ucy5ldmVudFBhdHRlcm4/LmRldGFpbFR5cGU/Lmxlbmd0aCAmJiB7IGRldGFpbFR5cGU6IG9wdGlvbnMuZXZlbnRQYXR0ZXJuLmRldGFpbFR5cGUgfSksXG4gICAgICAuLi4ob3B0aW9ucy5ldmVudFBhdHRlcm4/LmRldGFpbCAhPT0gdW5kZWZpbmVkICYmIHsgZGV0YWlsOiBvcHRpb25zLmV2ZW50UGF0dGVybi5kZXRhaWwgfSksXG4gICAgfSk7XG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBFdmVudEJyaWRnZSBydWxlIGZvciBJbWFnZSBCdWlsZGVyIENWRSBkZXRlY3RlZCBldmVudHMuXG4gICAqXG4gICAqIEBwYXJhbSBpZCBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHJ1bGVcbiAgICogQHBhcmFtIG9wdGlvbnMgQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgZXZlbnQgcnVsZVxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS9pbnRlZy1ldmVudGJyaWRnZS5odG1sXG4gICAqL1xuICBwdWJsaWMgb25DVkVEZXRlY3RlZChpZDogc3RyaW5nLCBvcHRpb25zOiBldmVudHMuT25FdmVudE9wdGlvbnMgPSB7fSk6IGV2ZW50cy5SdWxlIHtcbiAgICByZXR1cm4gdGhpcy5vbkV2ZW50KGlkLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgZXZlbnRQYXR0ZXJuOiB7XG4gICAgICAgIC4uLm9wdGlvbnMuZXZlbnRQYXR0ZXJuLFxuICAgICAgICBkZXRhaWxUeXBlOiBbJ0VDMiBJbWFnZSBCdWlsZGVyIENWRSBEZXRlY3RlZCddLFxuICAgICAgICByZXNvdXJjZXM6IFt0aGlzLmltYWdlUGlwZWxpbmVBcm5dLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIEV2ZW50QnJpZGdlIHJ1bGUgZm9yIEltYWdlIEJ1aWxkZXIgaW1hZ2Ugc3RhdGUgY2hhbmdlIGV2ZW50cy5cbiAgICpcbiAgICogQHBhcmFtIGlkIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcnVsZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBldmVudCBydWxlXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL2ludGVnLWV2ZW50YnJpZGdlLmh0bWxcbiAgICovXG4gIHB1YmxpYyBvbkltYWdlQnVpbGRTdGF0ZUNoYW5nZShpZDogc3RyaW5nLCBvcHRpb25zOiBldmVudHMuT25FdmVudE9wdGlvbnMgPSB7fSk6IGV2ZW50cy5SdWxlIHtcbiAgICByZXR1cm4gdGhpcy5vbkV2ZW50KGlkLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgZXZlbnRQYXR0ZXJuOiB7IC4uLm9wdGlvbnMuZXZlbnRQYXR0ZXJuLCBkZXRhaWxUeXBlOiBbJ0VDMiBJbWFnZSBCdWlsZGVyIEltYWdlIFN0YXRlIENoYW5nZSddIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBFdmVudEJyaWRnZSBydWxlIGZvciBJbWFnZSBCdWlsZGVyIGltYWdlIGJ1aWxkIGNvbXBsZXRpb24gZXZlbnRzLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBydWxlXG4gICAqIEBwYXJhbSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGV2ZW50IHJ1bGVcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvaW50ZWctZXZlbnRicmlkZ2UuaHRtbFxuICAgKi9cbiAgcHVibGljIG9uSW1hZ2VCdWlsZENvbXBsZXRlZChpZDogc3RyaW5nLCBvcHRpb25zOiBldmVudHMuT25FdmVudE9wdGlvbnMgPSB7fSk6IGV2ZW50cy5SdWxlIHtcbiAgICByZXR1cm4gdGhpcy5vbkltYWdlQnVpbGRTdGF0ZUNoYW5nZShpZCwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGV2ZW50UGF0dGVybjoge1xuICAgICAgICAuLi5vcHRpb25zLmV2ZW50UGF0dGVybixcbiAgICAgICAgZGV0YWlsOiB7IC4uLm9wdGlvbnMuZXZlbnRQYXR0ZXJuPy5kZXRhaWwsIHN0YXRlOiB7IHN0YXR1czogWydBVkFJTEFCTEUnLCAnQ0FOQ0VMTEVEJywgJ0ZBSUxFRCddIH0gfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBFdmVudEJyaWRnZSBydWxlIGZvciBJbWFnZSBCdWlsZGVyIGltYWdlIGJ1aWxkIGZhaWx1cmUgZXZlbnRzLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBydWxlXG4gICAqIEBwYXJhbSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGV2ZW50IHJ1bGVcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvaW50ZWctZXZlbnRicmlkZ2UuaHRtbFxuICAgKi9cbiAgcHVibGljIG9uSW1hZ2VCdWlsZEZhaWxlZChpZDogc3RyaW5nLCBvcHRpb25zOiBldmVudHMuT25FdmVudE9wdGlvbnMgPSB7fSk6IGV2ZW50cy5SdWxlIHtcbiAgICByZXR1cm4gdGhpcy5vbkltYWdlQnVpbGRTdGF0ZUNoYW5nZShpZCwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGV2ZW50UGF0dGVybjoge1xuICAgICAgICAuLi5vcHRpb25zLmV2ZW50UGF0dGVybixcbiAgICAgICAgZGV0YWlsOiB7IC4uLm9wdGlvbnMuZXZlbnRQYXR0ZXJuPy5kZXRhaWwsIHN0YXRlOiB7IHN0YXR1czogWydGQUlMRUQnXSB9IH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gRXZlbnRCcmlkZ2UgcnVsZSBmb3IgSW1hZ2UgQnVpbGRlciBpbWFnZSBzdWNjZXNzIGV2ZW50cy5cbiAgICpcbiAgICogQHBhcmFtIGlkIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcnVsZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBldmVudCBydWxlXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL2ludGVnLWV2ZW50YnJpZGdlLmh0bWxcbiAgICovXG4gIHB1YmxpYyBvbkltYWdlQnVpbGRTdWNjZWVkZWQoaWQ6IHN0cmluZywgb3B0aW9uczogZXZlbnRzLk9uRXZlbnRPcHRpb25zID0ge30pOiBldmVudHMuUnVsZSB7XG4gICAgcmV0dXJuIHRoaXMub25JbWFnZUJ1aWxkU3RhdGVDaGFuZ2UoaWQsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBldmVudFBhdHRlcm46IHtcbiAgICAgICAgLi4ub3B0aW9ucy5ldmVudFBhdHRlcm4sXG4gICAgICAgIGRldGFpbDogeyAuLi5vcHRpb25zLmV2ZW50UGF0dGVybj8uZGV0YWlsLCBzdGF0ZTogeyBzdGF0dXM6IFsnQVZBSUxBQkxFJ10gfSB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIEV2ZW50QnJpZGdlIHJ1bGUgZm9yIEltYWdlIEJ1aWxkZXIgaW1hZ2UgcGlwZWxpbmUgYXV0b21hdGljYWxseSBkaXNhYmxlZCBldmVudHMuXG4gICAqXG4gICAqIEBwYXJhbSBpZCBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHJ1bGVcbiAgICogQHBhcmFtIG9wdGlvbnMgQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgZXZlbnQgcnVsZVxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS9pbnRlZy1ldmVudGJyaWRnZS5odG1sXG4gICAqL1xuICBwdWJsaWMgb25JbWFnZVBpcGVsaW5lQXV0b0Rpc2FibGVkKGlkOiBzdHJpbmcsIG9wdGlvbnM6IGV2ZW50cy5PbkV2ZW50T3B0aW9ucyA9IHt9KTogZXZlbnRzLlJ1bGUge1xuICAgIHJldHVybiB0aGlzLm9uRXZlbnQoaWQsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBldmVudFBhdHRlcm46IHtcbiAgICAgICAgZGV0YWlsVHlwZTogWydFQzIgSW1hZ2UgQnVpbGRlciBJbWFnZSBQaXBlbGluZSBBdXRvbWF0aWNhbGx5IERpc2FibGVkJ10sXG4gICAgICAgIHJlc291cmNlczogW3RoaXMuaW1hZ2VQaXBlbGluZUFybl0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gRXZlbnRCcmlkZ2UgcnVsZSBmb3IgSW1hZ2UgQnVpbGRlciB3YWl0IGZvciBhY3Rpb24gZXZlbnRzXG4gICAqXG4gICAqIEBwYXJhbSBpZCBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHJ1bGVcbiAgICogQHBhcmFtIG9wdGlvbnMgQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgZXZlbnQgcnVsZVxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS9pbnRlZy1ldmVudGJyaWRnZS5odG1sXG4gICAqL1xuICBwdWJsaWMgb25XYWl0Rm9yQWN0aW9uKGlkOiBzdHJpbmcsIG9wdGlvbnM6IGV2ZW50cy5PbkV2ZW50T3B0aW9ucyA9IHt9KTogZXZlbnRzLlJ1bGUge1xuICAgIHJldHVybiB0aGlzLm9uRXZlbnQoaWQsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBldmVudFBhdHRlcm46IHsgLi4ub3B0aW9ucy5ldmVudFBhdHRlcm4sIGRldGFpbFR5cGU6IFsnRUMyIEltYWdlIEJ1aWxkZXIgV29ya2Zsb3cgU3RlcCBXYWl0aW5nJ10gfSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gRUMyIEltYWdlIEJ1aWxkZXIgSW1hZ2UgUGlwZWxpbmUuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvbWFuYWdlLXBpcGVsaW5lcy5odG1sXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBJbWFnZVBpcGVsaW5lIGV4dGVuZHMgSW1hZ2VQaXBlbGluZUJhc2Uge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1pbWFnZWJ1aWxkZXItYWxwaGEuSW1hZ2VQaXBlbGluZSc7XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBpbWFnZSBwaXBlbGluZSBnaXZlbiBpdHMgQVJOLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tSW1hZ2VQaXBlbGluZUFybihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBpbWFnZVBpcGVsaW5lQXJuOiBzdHJpbmcpOiBJSW1hZ2VQaXBlbGluZSB7XG4gICAgY29uc3QgaW1hZ2VQaXBlbGluZU5hbWUgPSBjZGsuU3RhY2sub2Yoc2NvcGUpLnNwbGl0QXJuKFxuICAgICAgaW1hZ2VQaXBlbGluZUFybixcbiAgICAgIGNkay5Bcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSxcbiAgICApLnJlc291cmNlTmFtZSE7XG5cbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBJbWFnZVBpcGVsaW5lQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaW1hZ2VQaXBlbGluZUFybiA9IGltYWdlUGlwZWxpbmVBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaW1hZ2VQaXBlbGluZU5hbWUgPSBpbWFnZVBpcGVsaW5lTmFtZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBpbWFnZSBwaXBlbGluZSBnaXZlbiBpdHMgbmFtZS4gVGhlIHByb3ZpZGVkIG5hbWUgbXVzdCBiZSBub3JtYWxpemVkIGJ5IGNvbnZlcnRpbmcgYWxsXG4gICAqIGFscGhhYmV0aWNhbCBjaGFyYWN0ZXJzIHRvIGxvd2VyY2FzZSwgYW5kIHJlcGxhY2luZyBhbGwgc3BhY2VzIGFuZCB1bmRlcnNjb3JlcyB3aXRoIGh5cGhlbnMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21JbWFnZVBpcGVsaW5lTmFtZShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBpbWFnZVBpcGVsaW5lTmFtZTogc3RyaW5nKTogSUltYWdlUGlwZWxpbmUge1xuICAgIHJldHVybiB0aGlzLmZyb21JbWFnZVBpcGVsaW5lQXJuKFxuICAgICAgc2NvcGUsXG4gICAgICBpZCxcbiAgICAgIGNkay5TdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICAgIHJlc291cmNlOiAnaW1hZ2UtcGlwZWxpbmUnLFxuICAgICAgICByZXNvdXJjZU5hbWU6IGltYWdlUGlwZWxpbmVOYW1lLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGFuIEltYWdlUGlwZWxpbmUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlzSW1hZ2VQaXBlbGluZSh4OiBhbnkpOiB4IGlzIEltYWdlUGlwZWxpbmUge1xuICAgIHJldHVybiB4ICE9PSBudWxsICYmIHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiBJTUFHRV9QSVBFTElORV9TWU1CT0wgaW4geDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgaW5mcmFzdHJ1Y3R1cmUgY29uZmlndXJhdGlvbiB1c2VkIGZvciB0aGUgaW1hZ2UgYnVpbGRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb246IElJbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBleGVjdXRpb24gcm9sZSB1c2VkIGZvciB0aGUgaW1hZ2UgYnVpbGQuIElmIHRoZXJlIGlzIG5vIGV4ZWN1dGlvbiByb2xlLCB0aGVuIHRoZSBidWlsZCB3aWxsIGJlIGV4ZWN1dGVkIHdpdGhcbiAgICogdGhlIEFXU1NlcnZpY2VSb2xlRm9ySW1hZ2VCdWlsZGVyIHNlcnZpY2UtbGlua2VkIHJvbGUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZXhlY3V0aW9uUm9sZT86IGlhbS5JUm9sZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBJbWFnZVBpcGVsaW5lUHJvcHM7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2U6IENmbkltYWdlUGlwZWxpbmU7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJbWFnZVBpcGVsaW5lUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTpcbiAgICAgICAgcHJvcHMuaW1hZ2VQaXBlbGluZU5hbWUgPz9cbiAgICAgICAgY2RrLkxhenkuc3RyaW5nKHtcbiAgICAgICAgICBwcm9kdWNlOiAoKSA9PlxuICAgICAgICAgICAgY2RrLk5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7XG4gICAgICAgICAgICAgIG1heExlbmd0aDogMTI4LFxuICAgICAgICAgICAgICBzZXBhcmF0b3I6ICctJyxcbiAgICAgICAgICAgICAgYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzOiAnLScsXG4gICAgICAgICAgICB9KS50b0xvd2VyQ2FzZSgpLCAvLyBFbmZvcmNlIGxvd2VyY2FzZSBmb3IgdGhlIGF1dG8tZ2VuZXJhdGVkIGZhbGxiYWNrXG4gICAgICAgIH0pLFxuICAgIH0pO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIElNQUdFX1BJUEVMSU5FX1NZTUJPTCwgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMudmFsaWRhdGVJbWFnZVBpcGVsaW5lTmFtZSgpO1xuXG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgdGhpcy5pbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb24gPVxuICAgICAgcHJvcHMuaW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uID8/IG5ldyBJbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb24odGhpcywgJ0luZnJhc3RydWN0dXJlQ29uZmlndXJhdGlvbicpO1xuICAgIHRoaXMuZXhlY3V0aW9uUm9sZSA9IGdldEV4ZWN1dGlvblJvbGUoXG4gICAgICB0aGlzLFxuICAgICAgKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKSA9PiB0aGlzLmdyYW50RGVmYXVsdEV4ZWN1dGlvblJvbGVQZXJtaXNzaW9ucyhncmFudGVlKSxcbiAgICAgIHByb3BzLFxuICAgICk7XG5cbiAgICBpZiAoSW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uLmlzSW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uKHRoaXMuaW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uKSkge1xuICAgICAgdGhpcy5pbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb24uX2JpbmQoeyBpc0NvbnRhaW5lckJ1aWxkOiBwcm9wcy5yZWNpcGUuX2lzQ29udGFpbmVyUmVjaXBlKCkgfSk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnJlY2lwZS5faXNJbWFnZVJlY2lwZSgpICYmIHByb3BzLnJlY2lwZS5faXNDb250YWluZXJSZWNpcGUoKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IobGl0YFJlY2lwZUNhbm5vdEJlQm90aGAsICd0aGUgcmVjaXBlIGNhbm5vdCBiZSBib3RoIGFuIElJbWFnZVJlY2lwZSBhbmQgYW4gSUNvbnRhaW5lclJlY2lwZScsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICghcHJvcHMucmVjaXBlLl9pc0ltYWdlUmVjaXBlKCkgJiYgIXByb3BzLnJlY2lwZS5faXNDb250YWluZXJSZWNpcGUoKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IobGl0YFJlY2lwZVJlcXVpcmVkYCwgJ3RoZSByZWNpcGUgbXVzdCBlaXRoZXIgYmUgYW4gSUltYWdlUmVjaXBlIG9yIElDb250YWluZXJSZWNpcGUnLCB0aGlzKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbWFnZVBpcGVsaW5lID0gbmV3IENmbkltYWdlUGlwZWxpbmUodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICAuLi4ocHJvcHMucmVjaXBlLl9pc0ltYWdlUmVjaXBlKCkgJiYgeyBpbWFnZVJlY2lwZUFybjogcHJvcHMucmVjaXBlLmltYWdlUmVjaXBlQXJuIH0pLFxuICAgICAgLi4uKHByb3BzLnJlY2lwZS5faXNDb250YWluZXJSZWNpcGUoKSAmJiB7IGNvbnRhaW5lclJlY2lwZUFybjogcHJvcHMucmVjaXBlLmNvbnRhaW5lclJlY2lwZUFybiB9KSxcbiAgICAgIC4uLihwcm9wcy5zdGF0dXMgIT09IHVuZGVmaW5lZCAmJiB7IHN0YXR1czogcHJvcHMuc3RhdHVzIH0pLFxuICAgICAgaW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uQXJuOiB0aGlzLmluZnJhc3RydWN0dXJlQ29uZmlndXJhdGlvbi5pbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb25Bcm4sXG4gICAgICBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuOiBwcm9wcy5kaXN0cmlidXRpb25Db25maWd1cmF0aW9uPy5kaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuLFxuICAgICAgZW5oYW5jZWRJbWFnZU1ldGFkYXRhRW5hYmxlZDogcHJvcHMuZW5oYW5jZWRJbWFnZU1ldGFkYXRhRW5hYmxlZCxcbiAgICAgIGV4ZWN1dGlvblJvbGU6IHRoaXMuZXhlY3V0aW9uUm9sZT8ucm9sZUFybixcbiAgICAgIHNjaGVkdWxlOiB0aGlzLmJ1aWxkU2NoZWR1bGUocHJvcHMpLFxuICAgICAgbG9nZ2luZ0NvbmZpZ3VyYXRpb246IHRoaXMuYnVpbGRMb2dnaW5nQ29uZmlndXJhdGlvbihwcm9wcyksXG4gICAgICBpbWFnZVRlc3RzQ29uZmlndXJhdGlvbjogYnVpbGRJbWFnZVRlc3RzQ29uZmlndXJhdGlvbjxcbiAgICAgICAgSW1hZ2VQaXBlbGluZVByb3BzLFxuICAgICAgICBDZm5JbWFnZVBpcGVsaW5lLkltYWdlVGVzdHNDb25maWd1cmF0aW9uUHJvcGVydHlcbiAgICAgID4ocHJvcHMpLFxuICAgICAgaW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb246IGJ1aWxkSW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb248XG4gICAgICAgIEltYWdlUGlwZWxpbmVQcm9wcyxcbiAgICAgICAgQ2ZuSW1hZ2VQaXBlbGluZS5JbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvblByb3BlcnR5XG4gICAgICA+KHRoaXMsIHByb3BzKSxcbiAgICAgIHdvcmtmbG93czogYnVpbGRXb3JrZmxvd3M8SW1hZ2VQaXBlbGluZVByb3BzLCBDZm5JbWFnZVBpcGVsaW5lLldvcmtmbG93Q29uZmlndXJhdGlvblByb3BlcnR5W10+KHByb3BzKSxcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gaW1hZ2VQaXBlbGluZTtcbiAgfVxuXG4gIEBtZW1vaXplZEdldHRlclxuICBwdWJsaWMgZ2V0IGltYWdlUGlwZWxpbmVOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VOYW1lQXR0cmlidXRlKHRoaXMucmVzb3VyY2UuYXR0ck5hbWUpO1xuICB9XG5cbiAgQG1lbW9pemVkR2V0dGVyXG4gIHB1YmxpYyBnZXQgaW1hZ2VQaXBlbGluZUFybigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlQXJuQXR0cmlidXRlKHRoaXMucmVzb3VyY2UuYXR0ckFybiwge1xuICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICByZXNvdXJjZTogJ2ltYWdlLXBpcGVsaW5lJyxcbiAgICAgIHJlc291cmNlTmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHRoZSBkZWZhdWx0IHBlcm1pc3Npb25zIGZvciBidWlsZGluZyBhbiBpbWFnZSB0byB0aGUgcHJvdmlkZWQgZXhlY3V0aW9uIHJvbGUuXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgZXhlY3V0aW9uIHJvbGUgdXNlZCBmb3IgdGhlIGltYWdlIGJ1aWxkLlxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGdyYW50RGVmYXVsdEV4ZWN1dGlvblJvbGVQZXJtaXNzaW9ucyhncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudFtdIHtcbiAgICBjb25zdCBwb2xpY2llcyA9IGRlZmF1bHRFeGVjdXRpb25Sb2xlUG9saWN5KHRoaXMsIHRoaXMucHJvcHMpO1xuICAgIHJldHVybiBwb2xpY2llcy5tYXAoKHBvbGljeSkgPT5cbiAgICAgIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICAgIGdyYW50ZWU6IGdyYW50ZWUsXG4gICAgICAgIHJlc291cmNlQXJuczogcG9saWN5LnJlc291cmNlcyxcbiAgICAgICAgYWN0aW9uczogcG9saWN5LmFjdGlvbnMsXG4gICAgICAgIGNvbmRpdGlvbnM6IHBvbGljeS5jb25kaXRpb25zLFxuICAgICAgICBzY29wZTogdGhpcyxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlSW1hZ2VQaXBlbGluZU5hbWUoKSB7XG4gICAgaWYgKGNkay5Ub2tlbi5pc1VucmVzb2x2ZWQodGhpcy5waHlzaWNhbE5hbWUpKSB7XG4gICAgICByZXR1cm47IC8vIENhbm5vdCB2YWxpZGF0ZSB1bnJlc29sdmVkIHRva2VucywgZ2l2ZW4gdGhlaXIgYWN0dWFsIHZhbHVlIGlzIHJlbmRlcmVkIGF0IGRlcGxveW1lbnQgdGltZVxuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZS5sZW5ndGggPiAxMjgpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKGxpdGBJbWFnZVBpcGVsaW5lTmFtZVRvb0xvbmdgLCAnVGhlIGltYWdlUGlwZWxpbmVOYW1lIGNhbm5vdCBiZSBsb25nZXIgdGhhbiAxMjggY2hhcmFjdGVycycsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZS5pbmNsdWRlcygnICcpKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihsaXRgSW1hZ2VQaXBlbGluZU5hbWVOb1NwYWNlc2AsICdUaGUgaW1hZ2VQaXBlbGluZU5hbWUgY2Fubm90IGNvbnRhaW4gc3BhY2VzJywgdGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGh5c2ljYWxOYW1lLmluY2x1ZGVzKCdfJykpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKGxpdGBJbWFnZVBpcGVsaW5lTmFtZU5vVW5kZXJzY29yZXNgLCAnVGhlIGltYWdlUGlwZWxpbmVOYW1lIGNhbm5vdCBjb250YWluIHVuZGVyc2NvcmVzJywgdGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGh5c2ljYWxOYW1lICE9PSB0aGlzLnBoeXNpY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihsaXRgSW1hZ2VQaXBlbGluZU5hbWVNdXN0QmVMb3dlcmNhc2VgLCAnVGhlIGltYWdlUGlwZWxpbmVOYW1lIG11c3QgYmUgbG93ZXJjYXNlJywgdGhpcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFNjaGVkdWxlKHByb3BzOiBJbWFnZVBpcGVsaW5lUHJvcHMpOiBDZm5JbWFnZVBpcGVsaW5lLlNjaGVkdWxlUHJvcGVydHkgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNjaGVkdWxlID0gcHJvcHMuc2NoZWR1bGU7XG4gICAgaWYgKCFzY2hlZHVsZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoc2NoZWR1bGUuYXV0b0Rpc2FibGVGYWlsdXJlQ291bnQgIT09IHVuZGVmaW5lZCAmJiAhY2RrLlRva2VuLmlzVW5yZXNvbHZlZChzY2hlZHVsZS5hdXRvRGlzYWJsZUZhaWx1cmVDb3VudCkpIHtcbiAgICAgIGlmIChzY2hlZHVsZS5hdXRvRGlzYWJsZUZhaWx1cmVDb3VudCA8IDEgfHwgc2NoZWR1bGUuYXV0b0Rpc2FibGVGYWlsdXJlQ291bnQgPiAxMCkge1xuICAgICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihsaXRgQXV0b0Rpc2FibGVGYWlsdXJlQ291bnRPdXRPZlJhbmdlYCwgJ3RoZSBhdXRvRGlzYWJsZUZhaWx1cmVDb3VudCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMTAnLCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2NoZWR1bGVFeHByZXNzaW9uOiBzY2hlZHVsZS5leHByZXNzaW9uLmV4cHJlc3Npb25TdHJpbmcsXG4gICAgICAuLi4oc2NoZWR1bGUuYXV0b0Rpc2FibGVGYWlsdXJlQ291bnQgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgIGF1dG9EaXNhYmxlUG9saWN5OiB7XG4gICAgICAgICAgZmFpbHVyZUNvdW50OiBzY2hlZHVsZS5hdXRvRGlzYWJsZUZhaWx1cmVDb3VudCxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgLi4uKHNjaGVkdWxlLnN0YXJ0Q29uZGl0aW9uICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICBwaXBlbGluZUV4ZWN1dGlvblN0YXJ0Q29uZGl0aW9uOiBzY2hlZHVsZS5zdGFydENvbmRpdGlvbixcbiAgICAgIH0pLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIHRoZSBsb2dnaW5nQ29uZmlndXJhdGlvbiBwcm9wZXJ0eSBpbnRvIHRoZSBgTG9nZ2luZ0NvbmZpZ3VyYXRpb25gIHR5cGUgaW4gdGhlIENsb3VkRm9ybWF0aW9uIEwxXG4gICAqIGRlZmluaXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBQcm9wcyBpbnB1dCBmb3IgdGhlIGNvbnN0cnVjdFxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZExvZ2dpbmdDb25maWd1cmF0aW9uID0gKFxuICAgIHByb3BzOiBJbWFnZVBpcGVsaW5lUHJvcHMsXG4gICk6IENmbkltYWdlUGlwZWxpbmUuUGlwZWxpbmVMb2dnaW5nQ29uZmlndXJhdGlvblByb3BlcnR5IHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBsb2dnaW5nQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIC4uLihwcm9wcy5pbWFnZUxvZ0dyb3VwICYmIHsgaW1hZ2VMb2dHcm91cE5hbWU6IHByb3BzLmltYWdlTG9nR3JvdXAubG9nR3JvdXBOYW1lIH0pLFxuICAgICAgLi4uKHByb3BzLmltYWdlUGlwZWxpbmVMb2dHcm91cCAmJiB7IHBpcGVsaW5lTG9nR3JvdXBOYW1lOiBwcm9wcy5pbWFnZVBpcGVsaW5lTG9nR3JvdXAubG9nR3JvdXBOYW1lIH0pLFxuICAgIH07XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMobG9nZ2luZ0NvbmZpZ3VyYXRpb24pLmxlbmd0aCA/IGxvZ2dpbmdDb25maWd1cmF0aW9uIDogdW5kZWZpbmVkO1xuICB9O1xufVxuIl19
512
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtcGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbWFnZS1waXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBbUM7QUFFbkMsK0RBQWlEO0FBQ2pELHlEQUEyQztBQUMzQyxtRUFBZ0U7QUFFaEUsNEVBQTRFO0FBQzVFLDhFQUE4RjtBQUM5RiwwRUFBMEU7QUFJMUUsaUZBQTZFO0FBQzdFLCtGQUltRDtBQUNuRCwyREFBdUY7QUFJdkYsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLCtDQUErQyxDQUFDLENBQUM7QUF1UzFGOztHQUVHO0FBQ0gsSUFBWSxzQkFXWDtBQVhELFdBQVksc0JBQXNCO0lBQ2hDOztPQUVHO0lBQ0gseUVBQStDLENBQUE7SUFFL0M7OztPQUdHO0lBQ0gsaUlBQXVHLENBQUE7QUFDekcsQ0FBQyxFQVhXLHNCQUFzQixzQ0FBdEIsc0JBQXNCLFFBV2pDO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLG1CQVVYO0FBVkQsV0FBWSxtQkFBbUI7SUFDN0I7O09BRUc7SUFDSCwwQ0FBbUIsQ0FBQTtJQUVuQjs7T0FFRztJQUNILDRDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFWVyxtQkFBbUIsbUNBQW5CLG1CQUFtQixRQVU5QjtBQUVEOztHQUVHO0FBQ0gsTUFBZSxpQkFBa0IsU0FBUSxHQUFHLENBQUMsUUFBUTtJQVduRDs7Ozs7O09BTUc7SUFDSSxLQUFLLENBQUMsT0FBdUIsRUFBRSxHQUFHLE9BQWlCO1FBQ3hELE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7WUFDOUIsT0FBTyxFQUFFLE9BQU87WUFDaEIsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBQ3JDLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLEtB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dHlwZSAqIGFzIGVjciBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNyJztcbmltcG9ydCAqIGFzIGV2ZW50cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENmbkltYWdlUGlwZWxpbmUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaW1hZ2VidWlsZGVyJztcbmltcG9ydCB0eXBlICogYXMgbG9ncyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgeyBtZW1vaXplZEdldHRlciwgbGl0IH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvaGVscGVycy1pbnRlcm5hbCc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSwgTWV0aG9kTWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgSURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL2Rpc3RyaWJ1dGlvbi1jb25maWd1cmF0aW9uJztcbmltcG9ydCB0eXBlIHsgSUluZnJhc3RydWN0dXJlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vaW5mcmFzdHJ1Y3R1cmUtY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBJbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL2luZnJhc3RydWN0dXJlLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtcbiAgYnVpbGRJbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbixcbiAgYnVpbGRJbWFnZVRlc3RzQ29uZmlndXJhdGlvbixcbiAgYnVpbGRXb3JrZmxvd3MsXG59IGZyb20gJy4vcHJpdmF0ZS9pbWFnZS1hbmQtcGlwZWxpbmUtcHJvcHMtaGVscGVyJztcbmltcG9ydCB7IGRlZmF1bHRFeGVjdXRpb25Sb2xlUG9saWN5LCBnZXRFeGVjdXRpb25Sb2xlIH0gZnJvbSAnLi9wcml2YXRlL3BvbGljeS1oZWxwZXInO1xuaW1wb3J0IHR5cGUgeyBJUmVjaXBlQmFzZSB9IGZyb20gJy4vcmVjaXBlLWJhc2UnO1xuaW1wb3J0IHR5cGUgeyBXb3JrZmxvd0NvbmZpZ3VyYXRpb24gfSBmcm9tICcuL3dvcmtmbG93JztcblxuY29uc3QgSU1BR0VfUElQRUxJTkVfU1lNQk9MID0gU3ltYm9sLmZvcignQGF3cy1jZGsvYXdzLWltYWdlYnVpbGRlci1hbHBoYS5JbWFnZVBpcGVsaW5lJyk7XG5cbi8qKlxuICogQW4gRUMyIEltYWdlIEJ1aWxkZXIgSW1hZ2UgUGlwZWxpbmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUltYWdlUGlwZWxpbmUgZXh0ZW5kcyBjZGsuSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGltYWdlIHBpcGVsaW5lXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlUGlwZWxpbmVBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGltYWdlIHBpcGVsaW5lXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlUGlwZWxpbmVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdyYW50IGN1c3RvbSBhY3Rpb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIGZvciB0aGUgaW1hZ2UgcGlwZWxpbmVcbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgbGlzdCBvZiBhY3Rpb25zXG4gICAqL1xuICBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQ7XG5cbiAgLyoqXG4gICAqIEdyYW50cyB0aGUgZGVmYXVsdCBwZXJtaXNzaW9ucyBmb3IgYnVpbGRpbmcgYW4gaW1hZ2UgdG8gdGhlIHByb3ZpZGVkIGV4ZWN1dGlvbiByb2xlLlxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgZXhlY3V0aW9uIHJvbGUgdXNlZCBmb3IgdGhlIGltYWdlIGJ1aWxkLlxuICAgKi9cbiAgZ3JhbnREZWZhdWx0RXhlY3V0aW9uUm9sZVBlcm1pc3Npb25zKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50W107XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBpbWFnZSBwaXBlbGluZVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqL1xuICBncmFudFJlYWQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG5cbiAgLyoqXG4gICAqIEdyYW50IHBlcm1pc3Npb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIHRvIHN0YXJ0IGFuIGV4ZWN1dGlvbiBvZiB0aGUgaW1hZ2UgcGlwZWxpbmVcbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKi9cbiAgZ3JhbnRTdGFydEV4ZWN1dGlvbihncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBFdmVudEJyaWRnZSBydWxlIGZvciBJbWFnZSBCdWlsZGVyIGV2ZW50cy5cbiAgICpcbiAgICogQHBhcmFtIGlkIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcnVsZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBldmVudCBydWxlXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL2ludGVnLWV2ZW50YnJpZGdlLmh0bWxcbiAgICovXG4gIG9uRXZlbnQoaWQ6IHN0cmluZywgb3B0aW9ucz86IGV2ZW50cy5PbkV2ZW50T3B0aW9ucyk6IGV2ZW50cy5SdWxlO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIEV2ZW50QnJpZGdlIHJ1bGUgZm9yIEltYWdlIEJ1aWxkZXIgQ1ZFIGRldGVjdGVkIGV2ZW50cy5cbiAgICpcbiAgICogQHBhcmFtIGlkIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcnVsZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBldmVudCBydWxlXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL2ludGVnLWV2ZW50YnJpZGdlLmh0bWxcbiAgICovXG4gIG9uQ1ZFRGV0ZWN0ZWQoaWQ6IHN0cmluZywgb3B0aW9ucz86IGV2ZW50cy5PbkV2ZW50T3B0aW9ucyk6IGV2ZW50cy5SdWxlO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIEV2ZW50QnJpZGdlIHJ1bGUgZm9yIEltYWdlIEJ1aWxkZXIgaW1hZ2Ugc3RhdGUgY2hhbmdlIGV2ZW50cy5cbiAgICpcbiAgICogQHBhcmFtIGlkIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcnVsZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBldmVudCBydWxlXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL2ludGVnLWV2ZW50YnJpZGdlLmh0bWxcbiAgICovXG4gIG9uSW1hZ2VCdWlsZFN0YXRlQ2hhbmdlKGlkOiBzdHJpbmcsIG9wdGlvbnM/OiBldmVudHMuT25FdmVudE9wdGlvbnMpOiBldmVudHMuUnVsZTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBFdmVudEJyaWRnZSBydWxlIGZvciBJbWFnZSBCdWlsZGVyIGltYWdlIGJ1aWxkIGNvbXBsZXRpb24gZXZlbnRzLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBydWxlXG4gICAqIEBwYXJhbSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGV2ZW50IHJ1bGVcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvaW50ZWctZXZlbnRicmlkZ2UuaHRtbFxuICAgKi9cbiAgb25JbWFnZUJ1aWxkQ29tcGxldGVkKGlkOiBzdHJpbmcsIG9wdGlvbnM/OiBldmVudHMuT25FdmVudE9wdGlvbnMpOiBldmVudHMuUnVsZTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBFdmVudEJyaWRnZSBydWxlIGZvciBJbWFnZSBCdWlsZGVyIGltYWdlIGJ1aWxkIGZhaWx1cmUgZXZlbnRzLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBydWxlXG4gICAqIEBwYXJhbSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGV2ZW50IHJ1bGVcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvaW50ZWctZXZlbnRicmlkZ2UuaHRtbFxuICAgKi9cbiAgb25JbWFnZUJ1aWxkRmFpbGVkKGlkOiBzdHJpbmcsIG9wdGlvbnM/OiBldmVudHMuT25FdmVudE9wdGlvbnMpOiBldmVudHMuUnVsZTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBFdmVudEJyaWRnZSBydWxlIGZvciBJbWFnZSBCdWlsZGVyIGltYWdlIHN1Y2Nlc3MgZXZlbnRzLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBydWxlXG4gICAqIEBwYXJhbSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGV2ZW50IHJ1bGVcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvaW50ZWctZXZlbnRicmlkZ2UuaHRtbFxuICAgKi9cbiAgb25JbWFnZUJ1aWxkU3VjY2VlZGVkKGlkOiBzdHJpbmcsIG9wdGlvbnM/OiBldmVudHMuT25FdmVudE9wdGlvbnMpOiBldmVudHMuUnVsZTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBFdmVudEJyaWRnZSBydWxlIGZvciBJbWFnZSBCdWlsZGVyIGltYWdlIHBpcGVsaW5lIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgZXZlbnRzLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBydWxlXG4gICAqIEBwYXJhbSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGV2ZW50IHJ1bGVcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvaW50ZWctZXZlbnRicmlkZ2UuaHRtbFxuICAgKi9cbiAgb25JbWFnZVBpcGVsaW5lQXV0b0Rpc2FibGVkKGlkOiBzdHJpbmcsIG9wdGlvbnM/OiBldmVudHMuT25FdmVudE9wdGlvbnMpOiBldmVudHMuUnVsZTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBFdmVudEJyaWRnZSBydWxlIGZvciBJbWFnZSBCdWlsZGVyIHdhaXQgZm9yIGFjdGlvbiBldmVudHNcbiAgICpcbiAgICogQHBhcmFtIGlkIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcnVsZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBldmVudCBydWxlXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL2ludGVnLWV2ZW50YnJpZGdlLmh0bWxcbiAgICovXG4gIG9uV2FpdEZvckFjdGlvbihpZDogc3RyaW5nLCBvcHRpb25zPzogZXZlbnRzLk9uRXZlbnRPcHRpb25zKTogZXZlbnRzLlJ1bGU7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYW4gSW1hZ2UgUGlwZWxpbmUgcmVzb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbWFnZVBpcGVsaW5lUHJvcHMge1xuICAvKipcbiAgICogVGhlIHJlY2lwZSB0aGF0IGRlZmluZXMgdGhlIGJhc2UgaW1hZ2UsIGNvbXBvbmVudHMsIGFuZCBjdXN0b21pemF0aW9ucyB1c2VkIHRvIGJ1aWxkIHRoZSBpbWFnZS4gVGhpcyBjYW4gZWl0aGVyIGJlXG4gICAqIGFuIGltYWdlIHJlY2lwZSwgb3IgYSBjb250YWluZXIgcmVjaXBlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVjaXBlOiBJUmVjaXBlQmFzZTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGltYWdlIHBpcGVsaW5lLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgbmFtZSBpcyBnZW5lcmF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlUGlwZWxpbmVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGltYWdlIHBpcGVsaW5lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNjaGVkdWxlIG9mIHRoZSBpbWFnZSBwaXBlbGluZS4gVGhpcyBjb25maWd1cmVzIGhvdyBvZnRlbiBhbmQgd2hlbiBhIHBpcGVsaW5lIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBhIG5ld1xuICAgKiBpbWFnZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBub25lLCBhIG1hbnVhbCBpbWFnZSBwaXBlbGluZSB3aWxsIGJlIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHNjaGVkdWxlPzogSW1hZ2VQaXBlbGluZVNjaGVkdWxlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcGlwZWxpbmUgaXMgZW5hYmxlZCB0byBiZSB0cmlnZ2VyZWQgYnkgdGhlIHByb3ZpZGVkIHNjaGVkdWxlXG4gICAqXG4gICAqIEBkZWZhdWx0IEltYWdlUGlwZWxpbmVTdGF0dXMuRU5BQkxFRFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzPzogSW1hZ2VQaXBlbGluZVN0YXR1cztcblxuICAvKipcbiAgICogVGhlIGluZnJhc3RydWN0dXJlIGNvbmZpZ3VyYXRpb24gdXNlZCBmb3IgYnVpbGRpbmcgdGhlIGltYWdlLlxuICAgKlxuICAgKiBBIGRlZmF1bHQgaW5mcmFzdHJ1Y3R1cmUgY29uZmlndXJhdGlvbiB3aWxsIGJlIHVzZWQgaWYgb25lIGlzIG5vdCBwcm92aWRlZC5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiB3aWxsIGNyZWF0ZSBhbiBpbnN0YW5jZSBwcm9maWxlIGFuZCByb2xlIHdpdGggbWluaW1hbCBwZXJtaXNzaW9ucyBuZWVkZWQgdG8gYnVpbGQgdGhlXG4gICAqIGltYWdlLCBhdHRhY2hlZCB0byB0aGUgRUMyIGluc3RhbmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGFuIGluZnJhc3RydWN0dXJlIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBjcmVhdGVkIHdpdGggdGhlIGRlZmF1bHQgc2V0dGluZ3NcbiAgICovXG4gIHJlYWRvbmx5IGluZnJhc3RydWN0dXJlQ29uZmlndXJhdGlvbj86IElJbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiB1c2VkIGZvciBkaXN0cmlidXRpbmcgdGhlIGltYWdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uPzogSURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHdvcmtmbG93IGNvbmZpZ3VyYXRpb25zIHVzZWQgdG8gYnVpbGQgdGhlIGltYWdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEltYWdlIEJ1aWxkZXIgd2lsbCB1c2UgYSBkZWZhdWx0IHNldCBvZiB3b3JrZmxvd3MgZm9yIHRoZSBidWlsZCB0byBidWlsZCwgdGVzdCwgYW5kIGRpc3RyaWJ1dGUgdGhlIGltYWdlXG4gICAqL1xuICByZWFkb25seSB3b3JrZmxvd3M/OiBXb3JrZmxvd0NvbmZpZ3VyYXRpb25bXTtcblxuICAvKipcbiAgICogVGhlIGV4ZWN1dGlvbiByb2xlIHVzZWQgdG8gcGVyZm9ybSB3b3JrZmxvdyBhY3Rpb25zIHRvIGJ1aWxkIHRoaXMgaW1hZ2UuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBJbWFnZSBCdWlsZGVyIFNlcnZpY2UgTGlua2VkIFJvbGUgKFNMUikgd2lsbCBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYW5kIHVzZWQgYXMgdGhlIGV4ZWN1dGlvblxuICAgKiByb2xlLiBIb3dldmVyLCB3aGVuIHByb3ZpZGluZyBhIGN1c3RvbSBzZXQgb2YgaW1hZ2Ugd29ya2Zsb3dzIGZvciB0aGUgcGlwZWxpbmUsIGFuIGV4ZWN1dGlvbiByb2xlIHdpbGwgYmVcbiAgICogZ2VuZXJhdGVkIHdpdGggdGhlIG1pbmltYWwgcGVybWlzc2lvbnMgbmVlZGVkIHRvIGV4ZWN1dGUgdGhlIHdvcmtmbG93cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBJbWFnZSBCdWlsZGVyIHdpbGwgdXNlIHRoZSBTTFIgaWYgcG9zc2libGUuIE90aGVyd2lzZSwgYW4gZXhlY3V0aW9uIHJvbGUgd2lsbCBiZSBnZW5lcmF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2cgZ3JvdXAgdG8gdXNlIGZvciB0aGUgaW1hZ2UgcGlwZWxpbmUuIEJ5IGRlZmF1bHQsIGEgbG9nIGdyb3VwIHdpbGwgYmUgY3JlYXRlZCB3aXRoIHRoZSBmb3JtYXRcbiAgICogYC9hd3MvaW1hZ2VidWlsZGVyL3BpcGVsaW5lLzxwaXBlbGluZS1uYW1lPmBcbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIGxvZyBncm91cCB3aWxsIGJlIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlUGlwZWxpbmVMb2dHcm91cD86IGxvZ3MuSUxvZ0dyb3VwO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9nIGdyb3VwIHRvIHVzZSBmb3IgaW1hZ2VzIGNyZWF0ZWQgZnJvbSB0aGUgaW1hZ2UgcGlwZWxpbmUuIEJ5IGRlZmF1bHQsIGEgbG9nIGdyb3VwIHdpbGwgYmUgY3JlYXRlZCB3aXRoIHRoZVxuICAgKiBmb3JtYXQgYC9hd3MvaW1hZ2VidWlsZGVyLzxpbWFnZS1uYW1lPmAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYSBsb2cgZ3JvdXAgd2lsbCBiZSBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSBpbWFnZUxvZ0dyb3VwPzogbG9ncy5JTG9nR3JvdXA7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIEltYWdlIEJ1aWxkZXIga2VlcHMgYSBzbmFwc2hvdCBvZiB0aGUgdnVsbmVyYWJpbGl0eSBzY2FucyB0aGF0IEFtYXpvbiBJbnNwZWN0b3IgcnVucyBhZ2FpbnN0IHRoZVxuICAgKiBidWlsZCBpbnN0YW5jZSB3aGVuIHlvdSBjcmVhdGUgYSBuZXcgaW1hZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBpbWFnZVNjYW5uaW5nRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBjb250YWluZXIgcmVwb3NpdG9yeSB0aGF0IEFtYXpvbiBJbnNwZWN0b3Igc2NhbnMgdG8gaWRlbnRpZnkgZmluZGluZ3MgZm9yIHlvdXIgY29udGFpbmVyIGltYWdlcy4gSWYgYVxuICAgKiByZXBvc2l0b3J5IGlzIG5vdCBwcm92aWRlZCwgSW1hZ2UgQnVpbGRlciBjcmVhdGVzIGEgcmVwb3NpdG9yeSBuYW1lZCBgaW1hZ2UtYnVpbGRlci1pbWFnZS1zY2FubmluZy1yZXBvc2l0b3J5YFxuICAgKiBmb3IgdnVsbmVyYWJpbGl0eSBzY2FubmluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBpZiBzY2FubmluZyBpcyBlbmFibGVkLCBhIHJlcG9zaXRvcnkgd2lsbCBiZSBjcmVhdGVkIGJ5IEltYWdlIEJ1aWxkZXIgaWYgb25lIGlzIG5vdCBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VTY2FubmluZ0VjclJlcG9zaXRvcnk/OiBlY3IuSVJlcG9zaXRvcnk7XG5cbiAgLyoqXG4gICAqIFRoZSB0YWdzIGZvciBJbWFnZSBCdWlsZGVyIHRvIGFwcGx5IHRvIHRoZSBvdXRwdXQgY29udGFpbmVyIGltYWdlIHRoYXQgQW1hem9uIEluc3BlY3RvciBzY2Fucy5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VTY2FubmluZ0VjclRhZ3M/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogSWYgZW5hYmxlZCwgY29sbGVjdHMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW1hZ2UgYmVpbmcgY3JlYXRlZCwgaW5jbHVkaW5nIHRoZSBvcGVyYXRpbmcgc3lzdGVtIChPUylcbiAgICogdmVyc2lvbiBhbmQgcGFja2FnZSBsaXN0IGZvciB0aGUgQU1JLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBlbmhhbmNlZEltYWdlTWV0YWRhdGFFbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBydW4gdGVzdHMgYWZ0ZXIgYnVpbGRpbmcgYW4gaW1hZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlVGVzdHNFbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHRhZ3MgdG8gYXBwbHkgdG8gdGhlIGltYWdlIHBpcGVsaW5lXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIFRoZSBzY2hlZHVsZSBzZXR0aW5ncyBmb3IgdGhlIGltYWdlIHBpcGVsaW5lLCB3aGljaCBkZWZpbmVzIHdoZW4gYSBwaXBlbGluZSBzaG91bGQgYmUgdHJpZ2dlcmVkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VQaXBlbGluZVNjaGVkdWxlIHtcbiAgLyoqXG4gICAqIFRoZSBzY2hlZHVsZSBleHByZXNzaW9uIHRvIHVzZS4gVGhpcyBjYW4gZWl0aGVyIGJlIGEgY3JvbiBleHByZXNzaW9uIG9yIGEgcmF0ZSBleHByZXNzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZXhwcmVzc2lvbjogZXZlbnRzLlNjaGVkdWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGZhaWx1cmVzIGFsbG93ZWQgYmVmb3JlIHRoZSBwaXBlbGluZSBpcyBhdXRvbWF0aWNhbGx5IGRpc2FibGVkLiBUaGlzIHZhbHVlIG11c3QgYmVcbiAgICogYmV0d2VlbiAxIGFuZCAxMC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBhdXRvLWRpc2FibGUgcG9saWN5IGlzIGNvbmZpZ3VyZWQgYW5kIHRoZSBwaXBlbGluZSBpcyBub3QgYXV0b21hdGljYWxseSBkaXNhYmxlZCBvbiBjb25zZWN1dGl2ZVxuICAgKiBmYWlsdXJlc1xuICAgKi9cbiAgcmVhZG9ubHkgYXV0b0Rpc2FibGVGYWlsdXJlQ291bnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFydCBjb25kaXRpb24gZm9yIHRoZSBwaXBlbGluZSwgaW5kaWNhdGluZyB0aGUgY29uZGl0aW9uIHVuZGVyIHdoaWNoIGEgcGlwZWxpbmUgc2hvdWxkIGJlIHRyaWdnZXJlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgU2NoZWR1bGVTdGFydENvbmRpdGlvbi5FWFBSRVNTSU9OX01BVENIX0FORF9ERVBFTkRFTkNZX1VQREFURVNfQVZBSUxBQkxFXG4gICAqL1xuICByZWFkb25seSBzdGFydENvbmRpdGlvbj86IFNjaGVkdWxlU3RhcnRDb25kaXRpb247XG59XG5cbi8qKlxuICogVGhlIHN0YXJ0IGNvbmRpdGlvbiBmb3IgdGhlIHBpcGVsaW5lLCBpbmRpY2F0aW5nIHRoZSBjb25kaXRpb24gdW5kZXIgd2hpY2ggYSBwaXBlbGluZSBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuICovXG5leHBvcnQgZW51bSBTY2hlZHVsZVN0YXJ0Q29uZGl0aW9uIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0byB0cmlnZ2VyIGEgcGlwZWxpbmUgd2hlbmV2ZXIgaXRzIHNjaGVkdWxlIGlzIG1ldFxuICAgKi9cbiAgRVhQUkVTU0lPTl9NQVRDSF9PTkxZID0gJ0VYUFJFU1NJT05fTUFUQ0hfT05MWScsXG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0byB0cmlnZ2VyIGEgcGlwZWxpbmUgd2hlbmV2ZXIgaXRzIHNjaGVkdWxlIGlzIG1ldCwgYW5kIHRoZXJlIGFyZSBtYXRjaGluZyBkZXBlbmRlbmN5IHVwZGF0ZXMgYXZhaWxhYmxlLFxuICAgKiBzdWNoIGFzIG5ldyB2ZXJzaW9ucyBvZiBjb21wb25lbnRzIG9yIGltYWdlcyB0byB1c2UgaW4gdGhlIHBpcGVsaW5lIGJ1aWxkLlxuICAgKi9cbiAgRVhQUkVTU0lPTl9NQVRDSF9BTkRfREVQRU5ERU5DWV9VUERBVEVTX0FWQUlMQUJMRSA9ICdFWFBSRVNTSU9OX01BVENIX0FORF9ERVBFTkRFTkNZX1VQREFURVNfQVZBSUxBQkxFJyxcbn1cblxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcGlwZWxpbmUgaXMgZW5hYmxlZCB0byBiZSB0cmlnZ2VyZWQgYnkgdGhlIHByb3ZpZGVkIHNjaGVkdWxlXG4gKi9cbmV4cG9ydCBlbnVtIEltYWdlUGlwZWxpbmVTdGF0dXMge1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHBpcGVsaW5lIGlzIGVuYWJsZWQgZm9yIHNjaGVkdWxpbmdcbiAgICovXG4gIEVOQUJMRUQgPSAnRU5BQkxFRCcsXG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSBwaXBlbGluZSBpcyBkaXNhYmxlZCBhbmQgd2lsbCBub3QgYmUgdHJpZ2dlcmVkIG9uIHRoZSBzY2hlZHVsZVxuICAgKi9cbiAgRElTQUJMRUQgPSAnRElTQUJMRUQnLFxufVxuXG4vKipcbiAqIEEgbmV3IG9yIGltcG9ydGVkIEltYWdlIFBpcGVsaW5lXG4gKi9cbmFic3RyYWN0IGNsYXNzIEltYWdlUGlwZWxpbmVCYXNlIGV4dGVuZHMgY2RrLlJlc291cmNlIGltcGxlbWVudHMgSUltYWdlUGlwZWxpbmUge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgaW1hZ2UgcGlwZWxpbmVcbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGltYWdlUGlwZWxpbmVBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGltYWdlIHBpcGVsaW5lXG4gICAqL1xuICBhYnN0cmFjdCByZWFkb25seSBpbWFnZVBpcGVsaW5lTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHcmFudCBjdXN0b20gYWN0aW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGltYWdlIHBpcGVsaW5lXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqIEBwYXJhbSBhY3Rpb25zIFRoZSBsaXN0IG9mIGFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZTogZ3JhbnRlZSxcbiAgICAgIHJlc291cmNlQXJuczogW3RoaXMuaW1hZ2VQaXBlbGluZUFybl0sXG4gICAgICBhY3Rpb25zOiBhY3Rpb25zLFxuICAgICAgc2NvcGU6IHRoaXMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHRoZSBkZWZhdWx0IHBlcm1pc3Npb25zIGZvciBidWlsZGluZyBhbiBpbWFnZSB0byB0aGUgcHJvdmlkZWQgZXhlY3V0aW9uIHJvbGUuXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgZXhlY3V0aW9uIHJvbGUgdXNlZCBmb3IgdGhlIGltYWdlIGJ1aWxkLlxuICAgKi9cbiAgcHVibGljIGdyYW50RGVmYXVsdEV4ZWN1dGlvblJvbGVQZXJtaXNzaW9ucyhncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudFtdIHtcbiAgICBjb25zdCBwb2xpY2llcyA9IGRlZmF1bHRFeGVjdXRpb25Sb2xlUG9saWN5KHRoaXMpO1xuICAgIHJldHVybiBwb2xpY2llcy5tYXAoKHBvbGljeSkgPT5cbiAgICAgIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICAgIGdyYW50ZWU6IGdyYW50ZWUsXG4gICAgICAgIHJlc291cmNlQXJuczogcG9saWN5LnJlc291cmNlcyxcbiAgICAgICAgYWN0aW9uczogcG9saWN5LmFjdGlvbnMsXG4gICAgICAgIGNvbmRpdGlvbnM6IHBvbGljeS5jb25kaXRpb25zLFxuICAgICAgICBzY29wZTogdGhpcyxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGltYWdlIHBpcGVsaW5lXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5ncmFudChncmFudGVlLCAnaW1hZ2VidWlsZGVyOkdldEltYWdlUGlwZWxpbmUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSB0byBzdGFydCBhbiBleGVjdXRpb24gb2YgdGhlIGltYWdlIHBpcGVsaW5lXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRTdGFydEV4ZWN1dGlvbihncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoZ3JhbnRlZSwgJ2ltYWdlYnVpbGRlcjpTdGFydEltYWdlUGlwZWxpbmVFeGVjdXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIEV2ZW50QnJpZGdlIHJ1bGUgZm9yIEltYWdlIEJ1aWxkZXIgZXZlbnRzLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBydWxlXG4gICAqIEBwYXJhbSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGV2ZW50IHJ1bGVcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvaW50ZWctZXZlbnRicmlkZ2UuaHRtbFxuICAgKi9cbiAgcHVibGljIG9uRXZlbnQoaWQ6IHN0cmluZywgb3B0aW9uczogZXZlbnRzLk9uRXZlbnRPcHRpb25zID0ge30pOiBldmVudHMuUnVsZSB7XG4gICAgY29uc3QgcnVsZSA9IG5ldyBldmVudHMuUnVsZSh0aGlzLCBpZCwgb3B0aW9ucyk7XG4gICAgcnVsZS5hZGRUYXJnZXQob3B0aW9ucy50YXJnZXQpO1xuICAgIHJ1bGUuYWRkRXZlbnRQYXR0ZXJuKHtcbiAgICAgIHNvdXJjZTogWydhd3MuaW1hZ2VidWlsZGVyJ10sXG4gICAgICAuLi4ob3B0aW9ucy5ldmVudFBhdHRlcm4/LnJlc291cmNlcz8ubGVuZ3RoICYmIHsgcmVzb3VyY2VzOiBvcHRpb25zLmV2ZW50UGF0dGVybi5yZXNvdXJjZXMgfSksXG4gICAgICAuLi4ob3B0aW9ucy5ldmVudFBhdHRlcm4/LmRldGFpbFR5cGU/Lmxlbmd0aCAmJiB7IGRldGFpbFR5cGU6IG9wdGlvbnMuZXZlbnRQYXR0ZXJuLmRldGFpbFR5cGUgfSksXG4gICAgICAuLi4ob3B0aW9ucy5ldmVudFBhdHRlcm4/LmRldGFpbCAhPT0gdW5kZWZpbmVkICYmIHsgZGV0YWlsOiBvcHRpb25zLmV2ZW50UGF0dGVybi5kZXRhaWwgfSksXG4gICAgfSk7XG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBFdmVudEJyaWRnZSBydWxlIGZvciBJbWFnZSBCdWlsZGVyIENWRSBkZXRlY3RlZCBldmVudHMuXG4gICAqXG4gICAqIEBwYXJhbSBpZCBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHJ1bGVcbiAgICogQHBhcmFtIG9wdGlvbnMgQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgZXZlbnQgcnVsZVxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS9pbnRlZy1ldmVudGJyaWRnZS5odG1sXG4gICAqL1xuICBwdWJsaWMgb25DVkVEZXRlY3RlZChpZDogc3RyaW5nLCBvcHRpb25zOiBldmVudHMuT25FdmVudE9wdGlvbnMgPSB7fSk6IGV2ZW50cy5SdWxlIHtcbiAgICByZXR1cm4gdGhpcy5vbkV2ZW50KGlkLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgZXZlbnRQYXR0ZXJuOiB7XG4gICAgICAgIC4uLm9wdGlvbnMuZXZlbnRQYXR0ZXJuLFxuICAgICAgICBkZXRhaWxUeXBlOiBbJ0VDMiBJbWFnZSBCdWlsZGVyIENWRSBEZXRlY3RlZCddLFxuICAgICAgICByZXNvdXJjZXM6IFt0aGlzLmltYWdlUGlwZWxpbmVBcm5dLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIEV2ZW50QnJpZGdlIHJ1bGUgZm9yIEltYWdlIEJ1aWxkZXIgaW1hZ2Ugc3RhdGUgY2hhbmdlIGV2ZW50cy5cbiAgICpcbiAgICogQHBhcmFtIGlkIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcnVsZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBldmVudCBydWxlXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL2ludGVnLWV2ZW50YnJpZGdlLmh0bWxcbiAgICovXG4gIHB1YmxpYyBvbkltYWdlQnVpbGRTdGF0ZUNoYW5nZShpZDogc3RyaW5nLCBvcHRpb25zOiBldmVudHMuT25FdmVudE9wdGlvbnMgPSB7fSk6IGV2ZW50cy5SdWxlIHtcbiAgICByZXR1cm4gdGhpcy5vbkV2ZW50KGlkLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgZXZlbnRQYXR0ZXJuOiB7IC4uLm9wdGlvbnMuZXZlbnRQYXR0ZXJuLCBkZXRhaWxUeXBlOiBbJ0VDMiBJbWFnZSBCdWlsZGVyIEltYWdlIFN0YXRlIENoYW5nZSddIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBFdmVudEJyaWRnZSBydWxlIGZvciBJbWFnZSBCdWlsZGVyIGltYWdlIGJ1aWxkIGNvbXBsZXRpb24gZXZlbnRzLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBydWxlXG4gICAqIEBwYXJhbSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGV2ZW50IHJ1bGVcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvaW50ZWctZXZlbnRicmlkZ2UuaHRtbFxuICAgKi9cbiAgcHVibGljIG9uSW1hZ2VCdWlsZENvbXBsZXRlZChpZDogc3RyaW5nLCBvcHRpb25zOiBldmVudHMuT25FdmVudE9wdGlvbnMgPSB7fSk6IGV2ZW50cy5SdWxlIHtcbiAgICByZXR1cm4gdGhpcy5vbkltYWdlQnVpbGRTdGF0ZUNoYW5nZShpZCwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGV2ZW50UGF0dGVybjoge1xuICAgICAgICAuLi5vcHRpb25zLmV2ZW50UGF0dGVybixcbiAgICAgICAgZGV0YWlsOiB7IC4uLm9wdGlvbnMuZXZlbnRQYXR0ZXJuPy5kZXRhaWwsIHN0YXRlOiB7IHN0YXR1czogWydBVkFJTEFCTEUnLCAnQ0FOQ0VMTEVEJywgJ0ZBSUxFRCddIH0gfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBFdmVudEJyaWRnZSBydWxlIGZvciBJbWFnZSBCdWlsZGVyIGltYWdlIGJ1aWxkIGZhaWx1cmUgZXZlbnRzLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBydWxlXG4gICAqIEBwYXJhbSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGV2ZW50IHJ1bGVcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvaW50ZWctZXZlbnRicmlkZ2UuaHRtbFxuICAgKi9cbiAgcHVibGljIG9uSW1hZ2VCdWlsZEZhaWxlZChpZDogc3RyaW5nLCBvcHRpb25zOiBldmVudHMuT25FdmVudE9wdGlvbnMgPSB7fSk6IGV2ZW50cy5SdWxlIHtcbiAgICByZXR1cm4gdGhpcy5vbkltYWdlQnVpbGRTdGF0ZUNoYW5nZShpZCwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGV2ZW50UGF0dGVybjoge1xuICAgICAgICAuLi5vcHRpb25zLmV2ZW50UGF0dGVybixcbiAgICAgICAgZGV0YWlsOiB7IC4uLm9wdGlvbnMuZXZlbnRQYXR0ZXJuPy5kZXRhaWwsIHN0YXRlOiB7IHN0YXR1czogWydGQUlMRUQnXSB9IH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gRXZlbnRCcmlkZ2UgcnVsZSBmb3IgSW1hZ2UgQnVpbGRlciBpbWFnZSBzdWNjZXNzIGV2ZW50cy5cbiAgICpcbiAgICogQHBhcmFtIGlkIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgcnVsZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBldmVudCBydWxlXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL2ludGVnLWV2ZW50YnJpZGdlLmh0bWxcbiAgICovXG4gIHB1YmxpYyBvbkltYWdlQnVpbGRTdWNjZWVkZWQoaWQ6IHN0cmluZywgb3B0aW9uczogZXZlbnRzLk9uRXZlbnRPcHRpb25zID0ge30pOiBldmVudHMuUnVsZSB7XG4gICAgcmV0dXJuIHRoaXMub25JbWFnZUJ1aWxkU3RhdGVDaGFuZ2UoaWQsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBldmVudFBhdHRlcm46IHtcbiAgICAgICAgLi4ub3B0aW9ucy5ldmVudFBhdHRlcm4sXG4gICAgICAgIGRldGFpbDogeyAuLi5vcHRpb25zLmV2ZW50UGF0dGVybj8uZGV0YWlsLCBzdGF0ZTogeyBzdGF0dXM6IFsnQVZBSUxBQkxFJ10gfSB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIEV2ZW50QnJpZGdlIHJ1bGUgZm9yIEltYWdlIEJ1aWxkZXIgaW1hZ2UgcGlwZWxpbmUgYXV0b21hdGljYWxseSBkaXNhYmxlZCBldmVudHMuXG4gICAqXG4gICAqIEBwYXJhbSBpZCBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHJ1bGVcbiAgICogQHBhcmFtIG9wdGlvbnMgQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgZXZlbnQgcnVsZVxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS9pbnRlZy1ldmVudGJyaWRnZS5odG1sXG4gICAqL1xuICBwdWJsaWMgb25JbWFnZVBpcGVsaW5lQXV0b0Rpc2FibGVkKGlkOiBzdHJpbmcsIG9wdGlvbnM6IGV2ZW50cy5PbkV2ZW50T3B0aW9ucyA9IHt9KTogZXZlbnRzLlJ1bGUge1xuICAgIHJldHVybiB0aGlzLm9uRXZlbnQoaWQsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBldmVudFBhdHRlcm46IHtcbiAgICAgICAgZGV0YWlsVHlwZTogWydFQzIgSW1hZ2UgQnVpbGRlciBJbWFnZSBQaXBlbGluZSBBdXRvbWF0aWNhbGx5IERpc2FibGVkJ10sXG4gICAgICAgIHJlc291cmNlczogW3RoaXMuaW1hZ2VQaXBlbGluZUFybl0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gRXZlbnRCcmlkZ2UgcnVsZSBmb3IgSW1hZ2UgQnVpbGRlciB3YWl0IGZvciBhY3Rpb24gZXZlbnRzXG4gICAqXG4gICAqIEBwYXJhbSBpZCBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHJ1bGVcbiAgICogQHBhcmFtIG9wdGlvbnMgQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgZXZlbnQgcnVsZVxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS9pbnRlZy1ldmVudGJyaWRnZS5odG1sXG4gICAqL1xuICBwdWJsaWMgb25XYWl0Rm9yQWN0aW9uKGlkOiBzdHJpbmcsIG9wdGlvbnM6IGV2ZW50cy5PbkV2ZW50T3B0aW9ucyA9IHt9KTogZXZlbnRzLlJ1bGUge1xuICAgIHJldHVybiB0aGlzLm9uRXZlbnQoaWQsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBldmVudFBhdHRlcm46IHsgLi4ub3B0aW9ucy5ldmVudFBhdHRlcm4sIGRldGFpbFR5cGU6IFsnRUMyIEltYWdlIEJ1aWxkZXIgV29ya2Zsb3cgU3RlcCBXYWl0aW5nJ10gfSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gRUMyIEltYWdlIEJ1aWxkZXIgSW1hZ2UgUGlwZWxpbmUuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvbWFuYWdlLXBpcGVsaW5lcy5odG1sXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBJbWFnZVBpcGVsaW5lIGV4dGVuZHMgSW1hZ2VQaXBlbGluZUJhc2Uge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1pbWFnZWJ1aWxkZXItYWxwaGEuSW1hZ2VQaXBlbGluZSc7XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBpbWFnZSBwaXBlbGluZSBnaXZlbiBpdHMgQVJOLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tSW1hZ2VQaXBlbGluZUFybihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBpbWFnZVBpcGVsaW5lQXJuOiBzdHJpbmcpOiBJSW1hZ2VQaXBlbGluZSB7XG4gICAgY29uc3QgaW1hZ2VQaXBlbGluZU5hbWUgPSBjZGsuU3RhY2sub2Yoc2NvcGUpLnNwbGl0QXJuKFxuICAgICAgaW1hZ2VQaXBlbGluZUFybixcbiAgICAgIGNkay5Bcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSxcbiAgICApLnJlc291cmNlTmFtZSE7XG5cbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBJbWFnZVBpcGVsaW5lQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaW1hZ2VQaXBlbGluZUFybiA9IGltYWdlUGlwZWxpbmVBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaW1hZ2VQaXBlbGluZU5hbWUgPSBpbWFnZVBpcGVsaW5lTmFtZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBpbWFnZSBwaXBlbGluZSBnaXZlbiBpdHMgbmFtZS4gVGhlIHByb3ZpZGVkIG5hbWUgbXVzdCBiZSBub3JtYWxpemVkIGJ5IGNvbnZlcnRpbmcgYWxsXG4gICAqIGFscGhhYmV0aWNhbCBjaGFyYWN0ZXJzIHRvIGxvd2VyY2FzZSwgYW5kIHJlcGxhY2luZyBhbGwgc3BhY2VzIGFuZCB1bmRlcnNjb3JlcyB3aXRoIGh5cGhlbnMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21JbWFnZVBpcGVsaW5lTmFtZShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBpbWFnZVBpcGVsaW5lTmFtZTogc3RyaW5nKTogSUltYWdlUGlwZWxpbmUge1xuICAgIHJldHVybiB0aGlzLmZyb21JbWFnZVBpcGVsaW5lQXJuKFxuICAgICAgc2NvcGUsXG4gICAgICBpZCxcbiAgICAgIGNkay5TdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICAgIHJlc291cmNlOiAnaW1hZ2UtcGlwZWxpbmUnLFxuICAgICAgICByZXNvdXJjZU5hbWU6IGltYWdlUGlwZWxpbmVOYW1lLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGFuIEltYWdlUGlwZWxpbmUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlzSW1hZ2VQaXBlbGluZSh4OiBhbnkpOiB4IGlzIEltYWdlUGlwZWxpbmUge1xuICAgIHJldHVybiB4ICE9PSBudWxsICYmIHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiBJTUFHRV9QSVBFTElORV9TWU1CT0wgaW4geDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgaW5mcmFzdHJ1Y3R1cmUgY29uZmlndXJhdGlvbiB1c2VkIGZvciB0aGUgaW1hZ2UgYnVpbGRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb246IElJbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBleGVjdXRpb24gcm9sZSB1c2VkIGZvciB0aGUgaW1hZ2UgYnVpbGQuIElmIHRoZXJlIGlzIG5vIGV4ZWN1dGlvbiByb2xlLCB0aGVuIHRoZSBidWlsZCB3aWxsIGJlIGV4ZWN1dGVkIHdpdGhcbiAgICogdGhlIEFXU1NlcnZpY2VSb2xlRm9ySW1hZ2VCdWlsZGVyIHNlcnZpY2UtbGlua2VkIHJvbGUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZXhlY3V0aW9uUm9sZT86IGlhbS5JUm9sZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBJbWFnZVBpcGVsaW5lUHJvcHM7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2U6IENmbkltYWdlUGlwZWxpbmU7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJbWFnZVBpcGVsaW5lUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTpcbiAgICAgICAgcHJvcHMuaW1hZ2VQaXBlbGluZU5hbWUgPz9cbiAgICAgICAgY2RrLkxhenkuc3RyaW5nKHtcbiAgICAgICAgICBwcm9kdWNlOiAoKSA9PlxuICAgICAgICAgICAgY2RrLk5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7XG4gICAgICAgICAgICAgIG1heExlbmd0aDogMTI4LFxuICAgICAgICAgICAgICBzZXBhcmF0b3I6ICctJyxcbiAgICAgICAgICAgICAgYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzOiAnLScsXG4gICAgICAgICAgICB9KS50b0xvd2VyQ2FzZSgpLCAvLyBFbmZvcmNlIGxvd2VyY2FzZSBmb3IgdGhlIGF1dG8tZ2VuZXJhdGVkIGZhbGxiYWNrXG4gICAgICAgIH0pLFxuICAgIH0pO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIElNQUdFX1BJUEVMSU5FX1NZTUJPTCwgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMudmFsaWRhdGVJbWFnZVBpcGVsaW5lTmFtZSgpO1xuXG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgdGhpcy5pbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb24gPVxuICAgICAgcHJvcHMuaW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uID8/IG5ldyBJbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb24odGhpcywgJ0luZnJhc3RydWN0dXJlQ29uZmlndXJhdGlvbicpO1xuICAgIHRoaXMuZXhlY3V0aW9uUm9sZSA9IGdldEV4ZWN1dGlvblJvbGUoXG4gICAgICB0aGlzLFxuICAgICAgKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKSA9PiB0aGlzLmdyYW50RGVmYXVsdEV4ZWN1dGlvblJvbGVQZXJtaXNzaW9ucyhncmFudGVlKSxcbiAgICAgIHByb3BzLFxuICAgICk7XG5cbiAgICBpZiAoSW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uLmlzSW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uKHRoaXMuaW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uKSkge1xuICAgICAgdGhpcy5pbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb24uX2JpbmQoeyBpc0NvbnRhaW5lckJ1aWxkOiBwcm9wcy5yZWNpcGUuX2lzQ29udGFpbmVyUmVjaXBlKCkgfSk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnJlY2lwZS5faXNJbWFnZVJlY2lwZSgpICYmIHByb3BzLnJlY2lwZS5faXNDb250YWluZXJSZWNpcGUoKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IobGl0YFJlY2lwZUNhbm5vdEJlQm90aGAsICd0aGUgcmVjaXBlIGNhbm5vdCBiZSBib3RoIGFuIElJbWFnZVJlY2lwZSBhbmQgYW4gSUNvbnRhaW5lclJlY2lwZScsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICghcHJvcHMucmVjaXBlLl9pc0ltYWdlUmVjaXBlKCkgJiYgIXByb3BzLnJlY2lwZS5faXNDb250YWluZXJSZWNpcGUoKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IobGl0YFJlY2lwZVJlcXVpcmVkYCwgJ3RoZSByZWNpcGUgbXVzdCBlaXRoZXIgYmUgYW4gSUltYWdlUmVjaXBlIG9yIElDb250YWluZXJSZWNpcGUnLCB0aGlzKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbWFnZVBpcGVsaW5lID0gbmV3IENmbkltYWdlUGlwZWxpbmUodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICAuLi4ocHJvcHMucmVjaXBlLl9pc0ltYWdlUmVjaXBlKCkgJiYgeyBpbWFnZVJlY2lwZUFybjogcHJvcHMucmVjaXBlLmltYWdlUmVjaXBlQXJuIH0pLFxuICAgICAgLi4uKHByb3BzLnJlY2lwZS5faXNDb250YWluZXJSZWNpcGUoKSAmJiB7IGNvbnRhaW5lclJlY2lwZUFybjogcHJvcHMucmVjaXBlLmNvbnRhaW5lclJlY2lwZUFybiB9KSxcbiAgICAgIC4uLihwcm9wcy5zdGF0dXMgIT09IHVuZGVmaW5lZCAmJiB7IHN0YXR1czogcHJvcHMuc3RhdHVzIH0pLFxuICAgICAgaW5mcmFzdHJ1Y3R1cmVDb25maWd1cmF0aW9uQXJuOiB0aGlzLmluZnJhc3RydWN0dXJlQ29uZmlndXJhdGlvbi5pbmZyYXN0cnVjdHVyZUNvbmZpZ3VyYXRpb25Bcm4sXG4gICAgICBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuOiBwcm9wcy5kaXN0cmlidXRpb25Db25maWd1cmF0aW9uPy5kaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuLFxuICAgICAgZW5oYW5jZWRJbWFnZU1ldGFkYXRhRW5hYmxlZDogcHJvcHMuZW5oYW5jZWRJbWFnZU1ldGFkYXRhRW5hYmxlZCxcbiAgICAgIGV4ZWN1dGlvblJvbGU6IHRoaXMuZXhlY3V0aW9uUm9sZT8ucm9sZUFybixcbiAgICAgIHNjaGVkdWxlOiB0aGlzLmJ1aWxkU2NoZWR1bGUocHJvcHMpLFxuICAgICAgbG9nZ2luZ0NvbmZpZ3VyYXRpb246IHRoaXMuYnVpbGRMb2dnaW5nQ29uZmlndXJhdGlvbihwcm9wcyksXG4gICAgICBpbWFnZVRlc3RzQ29uZmlndXJhdGlvbjogYnVpbGRJbWFnZVRlc3RzQ29uZmlndXJhdGlvbjxcbiAgICAgICAgSW1hZ2VQaXBlbGluZVByb3BzLFxuICAgICAgICBDZm5JbWFnZVBpcGVsaW5lLkltYWdlVGVzdHNDb25maWd1cmF0aW9uUHJvcGVydHlcbiAgICAgID4ocHJvcHMpLFxuICAgICAgaW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb246IGJ1aWxkSW1hZ2VTY2FubmluZ0NvbmZpZ3VyYXRpb248XG4gICAgICAgIEltYWdlUGlwZWxpbmVQcm9wcyxcbiAgICAgICAgQ2ZuSW1hZ2VQaXBlbGluZS5JbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvblByb3BlcnR5XG4gICAgICA+KHRoaXMsIHByb3BzKSxcbiAgICAgIHdvcmtmbG93czogYnVpbGRXb3JrZmxvd3M8SW1hZ2VQaXBlbGluZVByb3BzLCBDZm5JbWFnZVBpcGVsaW5lLldvcmtmbG93Q29uZmlndXJhdGlvblByb3BlcnR5W10+KHByb3BzKSxcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gaW1hZ2VQaXBlbGluZTtcbiAgfVxuXG4gIEBtZW1vaXplZEdldHRlclxuICBwdWJsaWMgZ2V0IGltYWdlUGlwZWxpbmVOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VOYW1lQXR0cmlidXRlKHRoaXMucmVzb3VyY2UuYXR0ck5hbWUpO1xuICB9XG5cbiAgQG1lbW9pemVkR2V0dGVyXG4gIHB1YmxpYyBnZXQgaW1hZ2VQaXBlbGluZUFybigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlQXJuQXR0cmlidXRlKHRoaXMucmVzb3VyY2UuYXR0ckFybiwge1xuICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICByZXNvdXJjZTogJ2ltYWdlLXBpcGVsaW5lJyxcbiAgICAgIHJlc291cmNlTmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHRoZSBkZWZhdWx0IHBlcm1pc3Npb25zIGZvciBidWlsZGluZyBhbiBpbWFnZSB0byB0aGUgcHJvdmlkZWQgZXhlY3V0aW9uIHJvbGUuXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgZXhlY3V0aW9uIHJvbGUgdXNlZCBmb3IgdGhlIGltYWdlIGJ1aWxkLlxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGdyYW50RGVmYXVsdEV4ZWN1dGlvblJvbGVQZXJtaXNzaW9ucyhncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudFtdIHtcbiAgICBjb25zdCBwb2xpY2llcyA9IGRlZmF1bHRFeGVjdXRpb25Sb2xlUG9saWN5KHRoaXMsIHRoaXMucHJvcHMpO1xuICAgIHJldHVybiBwb2xpY2llcy5tYXAoKHBvbGljeSkgPT5cbiAgICAgIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICAgIGdyYW50ZWU6IGdyYW50ZWUsXG4gICAgICAgIHJlc291cmNlQXJuczogcG9saWN5LnJlc291cmNlcyxcbiAgICAgICAgYWN0aW9uczogcG9saWN5LmFjdGlvbnMsXG4gICAgICAgIGNvbmRpdGlvbnM6IHBvbGljeS5jb25kaXRpb25zLFxuICAgICAgICBzY29wZTogdGhpcyxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlSW1hZ2VQaXBlbGluZU5hbWUoKSB7XG4gICAgaWYgKGNkay5Ub2tlbi5pc1VucmVzb2x2ZWQodGhpcy5waHlzaWNhbE5hbWUpKSB7XG4gICAgICByZXR1cm47IC8vIENhbm5vdCB2YWxpZGF0ZSB1bnJlc29sdmVkIHRva2VucywgZ2l2ZW4gdGhlaXIgYWN0dWFsIHZhbHVlIGlzIHJlbmRlcmVkIGF0IGRlcGxveW1lbnQgdGltZVxuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZS5sZW5ndGggPiAxMjgpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKGxpdGBJbWFnZVBpcGVsaW5lTmFtZVRvb0xvbmdgLCAnVGhlIGltYWdlUGlwZWxpbmVOYW1lIGNhbm5vdCBiZSBsb25nZXIgdGhhbiAxMjggY2hhcmFjdGVycycsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZS5pbmNsdWRlcygnICcpKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihsaXRgSW1hZ2VQaXBlbGluZU5hbWVOb1NwYWNlc2AsICdUaGUgaW1hZ2VQaXBlbGluZU5hbWUgY2Fubm90IGNvbnRhaW4gc3BhY2VzJywgdGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGh5c2ljYWxOYW1lLmluY2x1ZGVzKCdfJykpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKGxpdGBJbWFnZVBpcGVsaW5lTmFtZU5vVW5kZXJzY29yZXNgLCAnVGhlIGltYWdlUGlwZWxpbmVOYW1lIGNhbm5vdCBjb250YWluIHVuZGVyc2NvcmVzJywgdGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGh5c2ljYWxOYW1lICE9PSB0aGlzLnBoeXNpY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihsaXRgSW1hZ2VQaXBlbGluZU5hbWVNdXN0QmVMb3dlcmNhc2VgLCAnVGhlIGltYWdlUGlwZWxpbmVOYW1lIG11c3QgYmUgbG93ZXJjYXNlJywgdGhpcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFNjaGVkdWxlKHByb3BzOiBJbWFnZVBpcGVsaW5lUHJvcHMpOiBDZm5JbWFnZVBpcGVsaW5lLlNjaGVkdWxlUHJvcGVydHkgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNjaGVkdWxlID0gcHJvcHMuc2NoZWR1bGU7XG4gICAgaWYgKCFzY2hlZHVsZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoc2NoZWR1bGUuYXV0b0Rpc2FibGVGYWlsdXJlQ291bnQgIT09IHVuZGVmaW5lZCAmJiAhY2RrLlRva2VuLmlzVW5yZXNvbHZlZChzY2hlZHVsZS5hdXRvRGlzYWJsZUZhaWx1cmVDb3VudCkpIHtcbiAgICAgIGlmIChzY2hlZHVsZS5hdXRvRGlzYWJsZUZhaWx1cmVDb3VudCA8IDEgfHwgc2NoZWR1bGUuYXV0b0Rpc2FibGVGYWlsdXJlQ291bnQgPiAxMCkge1xuICAgICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihsaXRgQXV0b0Rpc2FibGVGYWlsdXJlQ291bnRPdXRPZlJhbmdlYCwgJ3RoZSBhdXRvRGlzYWJsZUZhaWx1cmVDb3VudCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMTAnLCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2NoZWR1bGVFeHByZXNzaW9uOiBzY2hlZHVsZS5leHByZXNzaW9uLmV4cHJlc3Npb25TdHJpbmcsXG4gICAgICAuLi4oc2NoZWR1bGUuYXV0b0Rpc2FibGVGYWlsdXJlQ291bnQgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgIGF1dG9EaXNhYmxlUG9saWN5OiB7XG4gICAgICAgICAgZmFpbHVyZUNvdW50OiBzY2hlZHVsZS5hdXRvRGlzYWJsZUZhaWx1cmVDb3VudCxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgLi4uKHNjaGVkdWxlLnN0YXJ0Q29uZGl0aW9uICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICBwaXBlbGluZUV4ZWN1dGlvblN0YXJ0Q29uZGl0aW9uOiBzY2hlZHVsZS5zdGFydENvbmRpdGlvbixcbiAgICAgIH0pLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIHRoZSBsb2dnaW5nQ29uZmlndXJhdGlvbiBwcm9wZXJ0eSBpbnRvIHRoZSBgTG9nZ2luZ0NvbmZpZ3VyYXRpb25gIHR5cGUgaW4gdGhlIENsb3VkRm9ybWF0aW9uIEwxXG4gICAqIGRlZmluaXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBQcm9wcyBpbnB1dCBmb3IgdGhlIGNvbnN0cnVjdFxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZExvZ2dpbmdDb25maWd1cmF0aW9uID0gKFxuICAgIHByb3BzOiBJbWFnZVBpcGVsaW5lUHJvcHMsXG4gICk6IENmbkltYWdlUGlwZWxpbmUuUGlwZWxpbmVMb2dnaW5nQ29uZmlndXJhdGlvblByb3BlcnR5IHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBsb2dnaW5nQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIC4uLihwcm9wcy5pbWFnZUxvZ0dyb3VwICYmIHsgaW1hZ2VMb2dHcm91cE5hbWU6IHByb3BzLmltYWdlTG9nR3JvdXAubG9nR3JvdXBOYW1lIH0pLFxuICAgICAgLi4uKHByb3BzLmltYWdlUGlwZWxpbmVMb2dHcm91cCAmJiB7IHBpcGVsaW5lTG9nR3JvdXBOYW1lOiBwcm9wcy5pbWFnZVBpcGVsaW5lTG9nR3JvdXAubG9nR3JvdXBOYW1lIH0pLFxuICAgIH07XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMobG9nZ2luZ0NvbmZpZ3VyYXRpb24pLmxlbmd0aCA/IGxvZ2dpbmdDb25maWd1cmF0aW9uIDogdW5kZWZpbmVkO1xuICB9O1xufVxuIl19
@@ -1,4 +1,20 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
2
18
  var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
3
19
  var useValue = arguments.length > 2;
4
20
  for (var i = 0; i < initializers.length; i++) {
@@ -33,12 +49,29 @@ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn,
33
49
  if (target) Object.defineProperty(target, contextIn.name, descriptor);
34
50
  done = true;
35
51
  };
52
+ var __importStar = (this && this.__importStar) || (function () {
53
+ var ownKeys = function(o) {
54
+ ownKeys = Object.getOwnPropertyNames || function (o) {
55
+ var ar = [];
56
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
57
+ return ar;
58
+ };
59
+ return ownKeys(o);
60
+ };
61
+ return function (mod) {
62
+ if (mod && mod.__esModule) return mod;
63
+ var result = {};
64
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
65
+ __setModuleDefault(result, mod);
66
+ return result;
67
+ };
68
+ })();
36
69
  Object.defineProperty(exports, "__esModule", { value: true });
37
70
  exports.ImageRecipe = void 0;
38
71
  const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
39
72
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
40
- const cdk = require("aws-cdk-lib");
41
- const iam = require("aws-cdk-lib/aws-iam");
73
+ const cdk = __importStar(require("aws-cdk-lib"));
74
+ const iam = __importStar(require("aws-cdk-lib/aws-iam"));
42
75
  const aws_imagebuilder_1 = require("aws-cdk-lib/aws-imagebuilder");
43
76
  const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal");
44
77
  const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
@@ -135,7 +168,7 @@ let ImageRecipe = (() => {
135
168
  ImageRecipe = _classThis = _classDescriptor.value;
136
169
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
137
170
  }
138
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ImageRecipe", version: "2.256.1-alpha.0" };
171
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ImageRecipe", version: "2.258.0-alpha.0" };
139
172
  /** Uniquely identifies this class. */
140
173
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-imagebuilder-alpha.ImageRecipe';
141
174
  /**
@@ -339,4 +372,4 @@ let ImageRecipe = (() => {
339
372
  return ImageRecipe = _classThis;
340
373
  })();
341
374
  exports.ImageRecipe = ImageRecipe;
342
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtcmVjaXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW1hZ2UtcmVjaXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUFtQztBQUVuQywyQ0FBMkM7QUFDM0MsbUVBQThEO0FBQzlELDRFQUE0RTtBQUM1RSw4RUFBOEY7QUFDOUYsMEVBQTBFO0FBTTFFLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO0FBRXRGOzs7OztHQUtHO0FBQ0gsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDO0FBRS9COzs7OztHQUtHO0FBQ0gsTUFBTSxzQkFBc0IsR0FBRyxPQUFPLENBQUM7QUEwSXZDOztHQUVHO0FBQ0gsTUFBZSxlQUFnQixTQUFRLEdBQUcsQ0FBQyxRQUFRO0lBZ0JqRDs7Ozs7O09BTUc7SUFDSSxLQUFLLENBQUMsT0FBdUIsRUFBRSxHQUFHLE9BQWlCO1FBQ3hELE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7WUFDOUIsT0FBTztZQUNQLE9BQU87WUFDUCxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQ25DLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQyxDQUFDO0tBQ0o7SUFFRDs7Ozs7T0FLRztJQUNJLFNBQVMsQ0FBQyxPQUF1QjtRQUN0QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLDZCQUE2QixDQUFDLENBQUM7S0FDM0Q7SUFFRDs7OztPQUlHO0lBQ0ksa0JBQWtCO1FBQ3ZCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRDs7OztPQUlHO0lBQ0ksY0FBYztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNiO0NBQ0Y7QUFFRDs7OztHQUlHO0lBRVUsV0FBVzs0QkFEdkIsb0NBQWtCOzs7O3NCQUNjLGVBQWU7Ozs7OzsyQkFBdkIsU0FBUSxXQUFlOzs7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Q0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQzNCLElBQUEsc0JBQUcsRUFBQSw4QkFBOEIsRUFDakMseURBQXlELElBQUksQ0FBQyxZQUFZLEdBQUcsRUFDN0UsSUFBSSxDQUNMLENBQUM7WUFDSixDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztnQkFDMUQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBQSxzQkFBRyxFQUFBLGdDQUFnQyxFQUFFLGdEQUFnRCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDakosQ0FBQztTQUNGOztZQTlPVSx1REFBVzs7Ozs7QUFBWCxrQ0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgdHlwZSAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENmbkltYWdlUmVjaXBlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWltYWdlYnVpbGRlcic7XG5pbXBvcnQgeyBtZW1vaXplZEdldHRlciwgbGl0IH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvaGVscGVycy1pbnRlcm5hbCc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSwgTWV0aG9kTWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgQmFzZUltYWdlIH0gZnJvbSAnLi9iYXNlLWltYWdlJztcbmltcG9ydCB0eXBlIHsgSUNvbnRhaW5lclJlY2lwZSB9IGZyb20gJy4vY29udGFpbmVyLXJlY2lwZSc7XG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENvbmZpZ3VyYXRpb24sIElSZWNpcGVCYXNlIH0gZnJvbSAnLi9yZWNpcGUtYmFzZSc7XG5cbmNvbnN0IElNQUdFX1JFQ0lQRV9TWU1CT0wgPSBTeW1ib2wuZm9yKCdAYXdzLWNkay9hd3MtaW1hZ2VidWlsZGVyLWFscGhhLkltYWdlUmVjaXBlJyk7XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgYW4gaW1hZ2UgcmVjaXBlLiBXaGVuIHVzaW5nIHRoZSByZWNpcGUgaW4gYSBwaXBlbGluZSwgdGhlIHBpcGVsaW5lIHdpbGwgdXNlIHRoZVxuICogbGF0ZXN0IHJlY2lwZSBhdCB0aGUgdGltZSBvZiBleGVjdXRpb24uXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvaWJob3ctc2VtYW50aWMtdmVyc2lvbmluZy5odG1sXG4gKi9cbmNvbnN0IExBVEVTVF9WRVJTSU9OID0gJ3gueC54JztcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCB2ZXJzaW9uIHRvIHVzZSBpbiB0aGUgaW1hZ2UgcmVjaXBlLiBXaGVuIHRoZSByZWNpcGUgaXMgdXBkYXRlZCwgdGhlIGB4YCB3aWxsIGJlIGluY3JlbWVudGVkIG9mZiBmcm9tXG4gKiB0aGUgbGF0ZXN0IHJlY2lwZSB2ZXJzaW9uIHRoYXQgZXhpc3RzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL2NyZWF0ZS1pbWFnZS1yZWNpcGVzLmh0bWxcbiAqL1xuY29uc3QgREVGQVVMVF9SRUNJUEVfVkVSU0lPTiA9ICcxLjAueCc7XG5cbi8qKlxuICogQW4gRUMyIEltYWdlIEJ1aWxkZXIgSW1hZ2UgUmVjaXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElJbWFnZVJlY2lwZSBleHRlbmRzIElSZWNpcGVCYXNlIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGltYWdlIHJlY2lwZVxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBpbWFnZVJlY2lwZUFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgaW1hZ2UgcmVjaXBlXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlUmVjaXBlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgaW1hZ2UgcmVjaXBlXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlUmVjaXBlVmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNyZWF0aW5nIGFuIEltYWdlIFJlY2lwZSByZXNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlUmVjaXBlUHJvcHMge1xuICAvKipcbiAgICogVGhlIGJhc2UgaW1hZ2UgZm9yIGN1c3RvbWl6YXRpb25zIHNwZWNpZmllZCBpbiB0aGUgaW1hZ2UgcmVjaXBlLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZUltYWdlOiBCYXNlSW1hZ2U7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBpbWFnZSByZWNpcGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYSBuYW1lIGlzIGdlbmVyYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VSZWNpcGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgaW1hZ2UgcmVjaXBlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxLjAueFxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VSZWNpcGVWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGltYWdlIHJlY2lwZS5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGNvbXBvbmVudCBjb25maWd1cmF0aW9ucyB0byBhcHBseSBpbiB0aGUgaW1hZ2UgYnVpbGQuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudHM/OiBDb21wb25lbnRDb25maWd1cmF0aW9uW107XG5cbiAgLyoqXG4gICAqIFRoZSBhZGRpdGlvbmFsIHRhZ3MgdG8gYXNzaWduIHRvIHRoZSBvdXRwdXQgQU1JIGdlbmVyYXRlZCBieSB0aGUgYnVpbGQuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFtaVRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBUaGUgYmxvY2sgZGV2aWNlcyB0byBhdHRhY2ggdG8gdGhlIGluc3RhbmNlIHVzZWQgZm9yIGJ1aWxkaW5nIHRoZSBpbWFnZS5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYmxvY2tEZXZpY2VzPzogZWMyLkJsb2NrRGV2aWNlW107XG5cbiAgLyoqXG4gICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBmb3IgdXNlIGR1cmluZyBidWlsZCBhbmQgdGVzdCB3b3JrZmxvd3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIEltYWdlIEJ1aWxkZXIgZGVmYXVsdCB3b3JraW5nIGRpcmVjdG9yeSBpcyB1c2VkLiBGb3IgTGludXggYW5kIG1hY09TIGJ1aWxkcywgdGhpcyB3b3VsZCBiZSAvdG1wLiBGb3JcbiAgICogV2luZG93cyBidWlsZHMsIHRoaXMgd291bGQgYmUgQzovXG4gICAqL1xuICByZWFkb25seSB3b3JraW5nRGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHVuaW5zdGFsbCB0aGUgU3lzdGVtcyBNYW5hZ2VyIGFnZW50IGZyb20geW91ciBmaW5hbCBidWlsZCBpbWFnZSwgcHJpb3IgdG8gY3JlYXRpbmcgdGhlIG5ldyBBTUkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhpcyBpcyBmYWxzZSBpZiB0aGUgU3lzdGVtcyBNYW5hZ2VyIGFnZW50IGlzIHByZS1pbnN0YWxsZWQgb24gdGhlIGJhc2UgaW1hZ2UuIE90aGVyd2lzZSwgdGhpcyBpcyB0cnVlLlxuICAgKi9cbiAgcmVhZG9ubHkgdW5pbnN0YWxsU3NtQWdlbnRBZnRlckJ1aWxkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHVzZXIgZGF0YSBjb21tYW5kcyB0byBwYXNzIHRvIEltYWdlIEJ1aWxkZXIgYnVpbGQgYW5kIHRlc3QgRUMyIGluc3RhbmNlcy4gRm9yIExpbnV4IGFuZCBtYWNPUywgSW1hZ2UgQnVpbGRlclxuICAgKiB1c2VzIGEgZGVmYXVsdCB1c2VyIGRhdGEgc2NyaXB0IHRvIGluc3RhbGwgdGhlIFN5c3RlbXMgTWFuYWdlciBhZ2VudC4gSWYgeW91IG92ZXJyaWRlIHRoZSB1c2VyIGRhdGEsIHlvdSBtdXN0XG4gICAqIGVuc3VyZSB0byBhZGQgY29tbWFuZHMgdG8gaW5zdGFsbCBTeXN0ZW1zIE1hbmFnZXIgYWdlbnQsIGlmIGl0IGlzIG5vdCBwcmUtaW5zdGFsbGVkIG9uIHlvdXIgYmFzZSBpbWFnZS5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgdXNlckRhdGFPdmVycmlkZT86IGVjMi5Vc2VyRGF0YTtcblxuICAvKipcbiAgICogVGhlIHRhZ3MgdG8gYXBwbHkgdG8gdGhlIGltYWdlIHJlY2lwZVxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhbiBFQzIgSW1hZ2UgQnVpbGRlciBpbWFnZSByZWNpcGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbWFnZVJlY2lwZUF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgaW1hZ2UgcmVjaXBlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVyaXZlZCBmcm9tIHRoZSBpbWFnZVJlY2lwZU5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlUmVjaXBlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgaW1hZ2UgcmVjaXBlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVyaXZlZCBmcm9tIHRoZSBpbWFnZVJlY2lwZUFyblxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VSZWNpcGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgaW1hZ2UgcmVjaXBlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVyaXZlZCBmcm9tIGltYWdlUmVjaXBlQXJuLiBpZiBhIGltYWdlUmVjaXBlTmFtZSBpcyBwcm92aWRlZCwgdGhlIGxhdGVzdCB2ZXJzaW9uLCB4LngueCwgd2lsbFxuICAgKiBiZSB1c2VkXG4gICAqL1xuICByZWFkb25seSBpbWFnZVJlY2lwZVZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBuZXcgb3IgaW1wb3J0ZWQgSW1hZ2UgUmVjaXBlXG4gKi9cbmFic3RyYWN0IGNsYXNzIEltYWdlUmVjaXBlQmFzZSBleHRlbmRzIGNkay5SZXNvdXJjZSBpbXBsZW1lbnRzIElJbWFnZVJlY2lwZSB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBpbWFnZSByZWNpcGVcbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGltYWdlUmVjaXBlQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBpbWFnZSByZWNpcGVcbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGltYWdlUmVjaXBlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgaW1hZ2UgcmVjaXBlXG4gICAqL1xuICBhYnN0cmFjdCByZWFkb25seSBpbWFnZVJlY2lwZVZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogR3JhbnQgY3VzdG9tIGFjdGlvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBpbWFnZSByZWNpcGVcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICogQHBhcmFtIGFjdGlvbnMgVGhlIGxpc3Qgb2YgYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlLFxuICAgICAgYWN0aW9ucyxcbiAgICAgIHJlc291cmNlQXJuczogW3RoaXMuaW1hZ2VSZWNpcGVBcm5dLFxuICAgICAgc2NvcGU6IHRoaXMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGltYWdlIHJlY2lwZVxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKi9cbiAgcHVibGljIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoZ3JhbnRlZSwgJ2ltYWdlYnVpbGRlcjpHZXRJbWFnZVJlY2lwZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSByZWNpcGUgaXMgYSBDb250YWluZXIgUmVjaXBlXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF9pc0NvbnRhaW5lclJlY2lwZSgpOiB0aGlzIGlzIElDb250YWluZXJSZWNpcGUge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVjaXBlIGlzIGFuIEltYWdlIFJlY2lwZVxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfaXNJbWFnZVJlY2lwZSgpOiB0aGlzIGlzIElJbWFnZVJlY2lwZSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIEVDMiBJbWFnZSBCdWlsZGVyIEltYWdlIFJlY2lwZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS9tYW5hZ2UtcmVjaXBlcy5odG1sXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBJbWFnZVJlY2lwZSBleHRlbmRzIEltYWdlUmVjaXBlQmFzZSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWltYWdlYnVpbGRlci1hbHBoYS5JbWFnZVJlY2lwZSc7XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBpbWFnZSByZWNpcGUgZ2l2ZW4gaXRzIEFSTi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUltYWdlUmVjaXBlQXJuKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGltYWdlUmVjaXBlQXJuOiBzdHJpbmcpOiBJSW1hZ2VSZWNpcGUge1xuICAgIHJldHVybiB0aGlzLmZyb21JbWFnZVJlY2lwZUF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7IGltYWdlUmVjaXBlQXJuIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgYW4gZXhpc3RpbmcgaW1hZ2UgcmVjaXBlIGdpdmVuIGl0cyBuYW1lLiBUaGUgcHJvdmlkZWQgbmFtZSBtdXN0IGJlIG5vcm1hbGl6ZWQgYnlcbiAgICogY29udmVydGluZyBhbGwgYWxwaGFiZXRpY2FsIGNoYXJhY3RlcnMgdG8gbG93ZXJjYXNlLCBhbmQgcmVwbGFjaW5nIGFsbCBzcGFjZXMgYW5kIHVuZGVyc2NvcmVzIHdpdGggaHlwaGVucy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUltYWdlUmVjaXBlTmFtZShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBpbWFnZVJlY2lwZU5hbWU6IHN0cmluZyk6IElJbWFnZVJlY2lwZSB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUltYWdlUmVjaXBlQXR0cmlidXRlcyhzY29wZSwgaWQsIHsgaW1hZ2VSZWNpcGVOYW1lIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBpbWFnZSByZWNpcGUgYnkgcHJvdmlkaW5nIGl0cyBhdHRyaWJ1dGVzLiBJZiB0aGUgaW1hZ2UgcmVjaXBlIG5hbWUgaXMgcHJvdmlkZWQgYXMgYW4gYXR0cmlidXRlLFxuICAgKiBpdCBtdXN0IGJlIG5vcm1hbGl6ZWQgYnkgY29udmVydGluZyBhbGwgYWxwaGFiZXRpY2FsIGNoYXJhY3RlcnMgdG8gbG93ZXJjYXNlLCBhbmQgcmVwbGFjaW5nIGFsbCBzcGFjZXMgYW5kXG4gICAqIHVuZGVyc2NvcmVzIHdpdGggaHlwaGVucy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUltYWdlUmVjaXBlQXR0cmlidXRlcyhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhdHRyczogSW1hZ2VSZWNpcGVBdHRyaWJ1dGVzKTogSUltYWdlUmVjaXBlIHtcbiAgICBpZiAoIWF0dHJzLmltYWdlUmVjaXBlQXJuICYmICFhdHRycy5pbWFnZVJlY2lwZU5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBsaXRgSW1hZ2VSZWNpcGVBdHRyaWJ1dGVzUmVxdWlyZWRgLFxuICAgICAgICAnZWl0aGVyIGltYWdlUmVjaXBlQXJuIG9yIGltYWdlUmVjaXBlTmFtZSBtdXN0IGJlIHByb3ZpZGVkIHRvIGltcG9ydCBhbiBpbWFnZSByZWNpcGUnLFxuICAgICAgICBzY29wZSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaW1hZ2VSZWNpcGVBcm4gPVxuICAgICAgYXR0cnMuaW1hZ2VSZWNpcGVBcm4gPz9cbiAgICAgIGNkay5TdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICAgIHJlc291cmNlOiAnaW1hZ2UtcmVjaXBlJyxcbiAgICAgICAgcmVzb3VyY2VOYW1lOiBgJHthdHRycy5pbWFnZVJlY2lwZU5hbWV9LyR7YXR0cnMuaW1hZ2VSZWNpcGVWZXJzaW9uID8/IExBVEVTVF9WRVJTSU9OfWAsXG4gICAgICB9KTtcblxuICAgIGNvbnN0IFtpbWFnZVJlY2lwZU5hbWUsIGltYWdlUmVjaXBlVmVyc2lvbl0gPSAoKCkgPT4ge1xuICAgICAgaWYgKGF0dHJzLmltYWdlUmVjaXBlTmFtZSkge1xuICAgICAgICByZXR1cm4gW2F0dHJzLmltYWdlUmVjaXBlTmFtZSwgYXR0cnMuaW1hZ2VSZWNpcGVWZXJzaW9uID8/IExBVEVTVF9WRVJTSU9OXTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaW1hZ2VSZWNpcGVOYW1lVmVyc2lvbiA9IGNkay5TdGFjay5vZihzY29wZSkuc3BsaXRBcm4oXG4gICAgICAgIGltYWdlUmVjaXBlQXJuLFxuICAgICAgICBjZGsuQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUsXG4gICAgICApLnJlc291cmNlTmFtZSE7XG5cbiAgICAgIGNvbnN0IGltYWdlUmVjaXBlTmFtZVZlcnNpb25TcGxpdCA9IGNkay5Gbi5zcGxpdCgnLycsIGltYWdlUmVjaXBlTmFtZVZlcnNpb24pO1xuICAgICAgcmV0dXJuIFtjZGsuRm4uc2VsZWN0KDAsIGltYWdlUmVjaXBlTmFtZVZlcnNpb25TcGxpdCksIGNkay5Gbi5zZWxlY3QoMSwgaW1hZ2VSZWNpcGVOYW1lVmVyc2lvblNwbGl0KV07XG4gICAgfSkoKTtcblxuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIEltYWdlUmVjaXBlQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaW1hZ2VSZWNpcGVBcm4gPSBpbWFnZVJlY2lwZUFybjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBpbWFnZVJlY2lwZU5hbWUgPSBpbWFnZVJlY2lwZU5hbWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaW1hZ2VSZWNpcGVWZXJzaW9uID0gaW1hZ2VSZWNpcGVWZXJzaW9uO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIG9iamVjdCBpcyBhbiBJbWFnZVJlY2lwZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXNJbWFnZVJlY2lwZSh4OiBhbnkpOiB4IGlzIEltYWdlUmVjaXBlIHtcbiAgICByZXR1cm4geCAhPT0gbnVsbCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgSU1BR0VfUkVDSVBFX1NZTUJPTCBpbiB4O1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBibG9ja0RldmljZXM6IGVjMi5CbG9ja0RldmljZVtdID0gW107XG4gIHByaXZhdGUgcmVzb3VyY2U6IENmbkltYWdlUmVjaXBlO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSW1hZ2VSZWNpcGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGh5c2ljYWxOYW1lOlxuICAgICAgICBwcm9wcy5pbWFnZVJlY2lwZU5hbWUgPz9cbiAgICAgICAgY2RrLkxhenkuc3RyaW5nKHtcbiAgICAgICAgICBwcm9kdWNlOiAoKSA9PlxuICAgICAgICAgICAgY2RrLk5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7XG4gICAgICAgICAgICAgIG1heExlbmd0aDogMTI4LFxuICAgICAgICAgICAgICBzZXBhcmF0b3I6ICctJyxcbiAgICAgICAgICAgICAgYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzOiAnLScsXG4gICAgICAgICAgICB9KS50b0xvd2VyQ2FzZSgpLCAvLyBFbmZvcmNlIGxvd2VyY2FzZSBmb3IgdGhlIGF1dG8tZ2VuZXJhdGVkIGZhbGxiYWNrXG4gICAgICAgIH0pLFxuICAgIH0pO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIElNQUdFX1JFQ0lQRV9TWU1CT0wsIHsgdmFsdWU6IHRydWUgfSk7XG5cbiAgICB0aGlzLnZhbGlkYXRlSW1hZ2VSZWNpcGVOYW1lKCk7XG5cbiAgICB0aGlzLmFkZEJsb2NrRGV2aWNlKC4uLihwcm9wcy5ibG9ja0RldmljZXMgPz8gW10pKTtcblxuICAgIGNvbnN0IGNvbXBvbmVudHM6IENmbkltYWdlUmVjaXBlLkNvbXBvbmVudENvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdIHwgdW5kZWZpbmVkID0gcHJvcHMuY29tcG9uZW50cz8ubWFwKFxuICAgICAgKGNvbXBvbmVudCkgPT4gKHtcbiAgICAgICAgY29tcG9uZW50QXJuOiBjb21wb25lbnQuY29tcG9uZW50LmNvbXBvbmVudEFybixcbiAgICAgICAgLi4uKGNvbXBvbmVudC5wYXJhbWV0ZXJzICYmIHtcbiAgICAgICAgICBwYXJhbWV0ZXJzOiBPYmplY3QuZW50cmllcyhjb21wb25lbnQucGFyYW1ldGVycykubWFwKFxuICAgICAgICAgICAgKFtuYW1lLCBwYXJhbV0pOiBDZm5JbWFnZVJlY2lwZS5Db21wb25lbnRQYXJhbWV0ZXJQcm9wZXJ0eSA9PiAoe1xuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICB2YWx1ZTogcGFyYW0udmFsdWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApLFxuICAgICAgICB9KSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBjb25zdCBpbWFnZVJlY2lwZVZlcnNpb24gPSBwcm9wcy5pbWFnZVJlY2lwZVZlcnNpb24gPz8gREVGQVVMVF9SRUNJUEVfVkVSU0lPTjtcbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmbkltYWdlUmVjaXBlKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIG5hbWU6IHRoaXMucGh5c2ljYWxOYW1lLFxuICAgICAgdmVyc2lvbjogaW1hZ2VSZWNpcGVWZXJzaW9uLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgcGFyZW50SW1hZ2U6IHByb3BzLmJhc2VJbWFnZS5pbWFnZSxcbiAgICAgIGJsb2NrRGV2aWNlTWFwcGluZ3M6IGNkay5MYXp5LmFueSh7IHByb2R1Y2U6ICgpID0+IHRoaXMucmVuZGVyQmxvY2tEZXZpY2VzKCkgfSksXG4gICAgICB3b3JraW5nRGlyZWN0b3J5OiBwcm9wcy53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgYWRkaXRpb25hbEluc3RhbmNlQ29uZmlndXJhdGlvbjogdGhpcy5idWlsZEFkZGl0aW9uYWxJbnN0YW5jZUNvbmZpZ3VyYXRpb24ocHJvcHMpLFxuICAgICAgYW1pVGFnczogcHJvcHMuYW1pVGFncyxcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MsXG4gICAgICAuLi4oY29tcG9uZW50cz8ubGVuZ3RoICYmIHsgY29tcG9uZW50cyB9KSxcbiAgICB9KTtcbiAgfVxuXG4gIEBtZW1vaXplZEdldHRlclxuICBwdWJsaWMgZ2V0IGltYWdlUmVjaXBlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlTmFtZUF0dHJpYnV0ZSh0aGlzLnJlc291cmNlLmF0dHJOYW1lKTtcbiAgfVxuXG4gIEBtZW1vaXplZEdldHRlclxuICBwdWJsaWMgZ2V0IGltYWdlUmVjaXBlQXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VBcm5BdHRyaWJ1dGUodGhpcy5yZXNvdXJjZS5hdHRyQXJuLCB7XG4gICAgICBzZXJ2aWNlOiAnaW1hZ2VidWlsZGVyJyxcbiAgICAgIHJlc291cmNlOiAnaW1hZ2UtcmVjaXBlJyxcbiAgICAgIHJlc291cmNlTmFtZTogYCR7dGhpcy5waHlzaWNhbE5hbWV9LyR7dGhpcy5yZXNvdXJjZS52ZXJzaW9ufWAsXG4gICAgfSk7XG4gIH1cblxuICBAbWVtb2l6ZWRHZXR0ZXJcbiAgcHVibGljIGdldCBpbWFnZVJlY2lwZVZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZS5nZXRBdHQoJ1ZlcnNpb24nKS50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYmxvY2sgZGV2aWNlcyB0byBhdHRhY2ggdG8gdGhlIGluc3RhbmNlIHVzZWQgZm9yIGJ1aWxkaW5nIHRoZSBpbWFnZS5cbiAgICpcbiAgICogQHBhcmFtIGJsb2NrRGV2aWNlcyBUaGUgbGlzdCBvZiBibG9jayBkZXZpY2VzIHRvIGF0dGFjaFxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGFkZEJsb2NrRGV2aWNlKC4uLmJsb2NrRGV2aWNlczogZWMyLkJsb2NrRGV2aWNlW10pOiB2b2lkIHtcbiAgICB0aGlzLmJsb2NrRGV2aWNlcy5wdXNoKC4uLmJsb2NrRGV2aWNlcyk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgaW5wdXQgYmxvY2sgZGV2aWNlcywgaW50byB0aGUgYEJsb2NrRGV2aWNlTWFwcGluZ1tdYCBzdHJ1Y3R1cmUgdGhhdCBDZm5JbWFnZVJlY2lwZSBleHBlY3RzIHRvIHJlY2VpdmUuXG4gICAqIFRoaXMgaXMgcmVuZGVyZWQgYXQgc3ludGhlc2lzIHRpbWUsIGFzIHVzZXJzIGNhbiBhZGQgYWRkaXRpb25hbCBibG9jayBkZXZpY2VzIHdpdGggYGFkZEJsb2NrRGV2aWNlYCwgYWZ0ZXIgdGhlXG4gICAqIGNvbnN0cnVjdCBoYXMgYmVlbiBpbnN0YW50aWF0ZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHJlbmRlckJsb2NrRGV2aWNlcygpOiBDZm5JbWFnZVJlY2lwZS5JbnN0YW5jZUJsb2NrRGV2aWNlTWFwcGluZ1Byb3BlcnR5W10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGJsb2NrRGV2aWNlcyA9IHRoaXMuYmxvY2tEZXZpY2VzLm1hcCgoYmxvY2tEZXZpY2UpOiBDZm5JbWFnZVJlY2lwZS5JbnN0YW5jZUJsb2NrRGV2aWNlTWFwcGluZ1Byb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IGVic0RldmljZSA9IGJsb2NrRGV2aWNlLnZvbHVtZS5lYnNEZXZpY2U7XG4gICAgICBjb25zdCBlYnM6IENmbkltYWdlUmVjaXBlLkVic0luc3RhbmNlQmxvY2tEZXZpY2VTcGVjaWZpY2F0aW9uUHJvcGVydHkgPSB7XG4gICAgICAgIC4uLihlYnNEZXZpY2U/LmRlbGV0ZU9uVGVybWluYXRpb24gIT09IHVuZGVmaW5lZCAmJiB7IGRlbGV0ZU9uVGVybWluYXRpb246IGVic0RldmljZS5kZWxldGVPblRlcm1pbmF0aW9uIH0pLFxuICAgICAgICAuLi4oZWJzRGV2aWNlPy5lbmNyeXB0ZWQgIT09IHVuZGVmaW5lZCAmJiB7IGVuY3J5cHRlZDogZWJzRGV2aWNlLmVuY3J5cHRlZCB9KSxcbiAgICAgICAgLi4uKGVic0RldmljZT8uaW9wcyAhPT0gdW5kZWZpbmVkICYmIHsgaW9wczogZWJzRGV2aWNlLmlvcHMgfSksXG4gICAgICAgIC4uLihlYnNEZXZpY2U/Lmttc0tleSAhPT0gdW5kZWZpbmVkICYmIHsga21zS2V5SWQ6IGVic0RldmljZS5rbXNLZXkua2V5QXJuIH0pLFxuICAgICAgICAuLi4oZWJzRGV2aWNlPy5zbmFwc2hvdElkICE9PSB1bmRlZmluZWQgJiYgeyBzbmFwc2hvdElkOiBlYnNEZXZpY2Uuc25hcHNob3RJZCB9KSxcbiAgICAgICAgLi4uKGVic0RldmljZT8udGhyb3VnaHB1dCAhPT0gdW5kZWZpbmVkICYmIHsgdGhyb3VnaHB1dDogZWJzRGV2aWNlLnRocm91Z2hwdXQgfSksXG4gICAgICAgIC4uLihlYnNEZXZpY2U/LnZvbHVtZVNpemUgIT09IHVuZGVmaW5lZCAmJiB7IHZvbHVtZVNpemU6IGVic0RldmljZS52b2x1bWVTaXplIH0pLFxuICAgICAgICAuLi4oZWJzRGV2aWNlPy52b2x1bWVUeXBlICE9PSB1bmRlZmluZWQgJiYgeyB2b2x1bWVUeXBlOiBlYnNEZXZpY2Uudm9sdW1lVHlwZSB9KSxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRldmljZU5hbWU6IGJsb2NrRGV2aWNlLmRldmljZU5hbWUsXG4gICAgICAgIHZpcnR1YWxOYW1lOiBibG9ja0RldmljZS52b2x1bWUudmlydHVhbE5hbWUsXG4gICAgICAgIC4uLihibG9ja0RldmljZS5tYXBwaW5nRW5hYmxlZCA9PT0gZmFsc2UgJiYgeyBub0RldmljZTogJycgfSksXG4gICAgICAgIC4uLihPYmplY3Qua2V5cyhlYnMpLmxlbmd0aCAmJiB7IGVicyB9KSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYmxvY2tEZXZpY2VzLmxlbmd0aCA/IGJsb2NrRGV2aWNlcyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgdGhlIGFkZGl0aW9uYWwgaW5zdGFuY2UgY29uZmlndXJhdGlvbiBwcm9wZXJ0eSBpbnRvIHRoZSBgQWRkaXRpb25hbEluc3RhbmNlQ29uZmlndXJhdGlvbmAgdHlwZSBpbiB0aGVcbiAgICogQ2xvdWRGb3JtYXRpb24gTDEgZGVmaW5pdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIFRoZSBwcm9wcyBwYXNzZWQgYXMgaW5wdXQgdG8gdGhlIGNvbnN0cnVjdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZEFkZGl0aW9uYWxJbnN0YW5jZUNvbmZpZ3VyYXRpb24oXG4gICAgcHJvcHM6IEltYWdlUmVjaXBlUHJvcHMsXG4gICk6IENmbkltYWdlUmVjaXBlLkFkZGl0aW9uYWxJbnN0YW5jZUNvbmZpZ3VyYXRpb25Qcm9wZXJ0eSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc3lzdGVtc01hbmFnZXJBZ2VudDogQ2ZuSW1hZ2VSZWNpcGUuU3lzdGVtc01hbmFnZXJBZ2VudFByb3BlcnR5ID0ge1xuICAgICAgLi4uKHByb3BzLnVuaW5zdGFsbFNzbUFnZW50QWZ0ZXJCdWlsZCAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgdW5pbnN0YWxsQWZ0ZXJCdWlsZDogcHJvcHMudW5pbnN0YWxsU3NtQWdlbnRBZnRlckJ1aWxkLFxuICAgICAgfSksXG4gICAgfTtcblxuICAgIGNvbnN0IGFkZGl0aW9uYWxJbnN0YW5jZUNvbmZpZ3VyYXRpb246IENmbkltYWdlUmVjaXBlLkFkZGl0aW9uYWxJbnN0YW5jZUNvbmZpZ3VyYXRpb25Qcm9wZXJ0eSA9IHtcbiAgICAgIC4uLihPYmplY3Qua2V5cyhzeXN0ZW1zTWFuYWdlckFnZW50KS5sZW5ndGggJiYgeyBzeXN0ZW1zTWFuYWdlckFnZW50IH0pLFxuICAgICAgLi4uKHByb3BzLnVzZXJEYXRhT3ZlcnJpZGUgIT09IHVuZGVmaW5lZCAmJiB7IHVzZXJEYXRhT3ZlcnJpZGU6IGNkay5Gbi5iYXNlNjQocHJvcHMudXNlckRhdGFPdmVycmlkZS5yZW5kZXIoKSkgfSksXG4gICAgfTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhhZGRpdGlvbmFsSW5zdGFuY2VDb25maWd1cmF0aW9uKS5sZW5ndGggPyBhZGRpdGlvbmFsSW5zdGFuY2VDb25maWd1cmF0aW9uIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUltYWdlUmVjaXBlTmFtZSgpIHtcbiAgICBpZiAoY2RrLlRva2VuLmlzVW5yZXNvbHZlZCh0aGlzLnBoeXNpY2FsTmFtZSkpIHtcbiAgICAgIHJldHVybjsgLy8gQ2Fubm90IHZhbGlkYXRlIHVucmVzb2x2ZWQgdG9rZW5zLCBnaXZlbiB0aGVpciBhY3R1YWwgdmFsdWUgaXMgcmVuZGVyZWQgYXQgZGVwbG95bWVudCB0aW1lXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGh5c2ljYWxOYW1lLmxlbmd0aCA+IDEyOCkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGxpdGBJbWFnZVJlY2lwZU5hbWVUb29Mb25nYCxcbiAgICAgICAgYHRoZSBpbWFnZVJlY2lwZU5hbWUgY2Fubm90IGJlIGxvbmdlciB0aGFuIDEyOCBjaGFyYWN0ZXJzLCBnb3Q6ICcke3RoaXMucGh5c2ljYWxOYW1lfSdgLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNhbE5hbWUuaW5jbHVkZXMoJyAnKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IobGl0YEltYWdlUmVjaXBlTmFtZU5vU3BhY2VzYCwgYHRoZSBpbWFnZVJlY2lwZU5hbWUgY2Fubm90IGNvbnRhaW4gc3BhY2VzLCBnb3Q6ICcke3RoaXMucGh5c2ljYWxOYW1lfSdgLCB0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNhbE5hbWUuaW5jbHVkZXMoJ18nKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGxpdGBJbWFnZVJlY2lwZU5hbWVOb1VuZGVyc2NvcmVzYCxcbiAgICAgICAgYHRoZSBpbWFnZVJlY2lwZU5hbWUgY2Fubm90IGNvbnRhaW4gdW5kZXJzY29yZXMsIGdvdDogJyR7dGhpcy5waHlzaWNhbE5hbWV9J2AsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZSAhPT0gdGhpcy5waHlzaWNhbE5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IobGl0YEltYWdlUmVjaXBlTmFtZU11c3RCZUxvd2VyY2FzZWAsIGB0aGUgaW1hZ2VSZWNpcGVOYW1lIG11c3QgYmUgbG93ZXJjYXNlLCBnb3Q6ICcke3RoaXMucGh5c2ljYWxOYW1lfSdgLCB0aGlzKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
375
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtcmVjaXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW1hZ2UtcmVjaXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUFtQztBQUVuQyx5REFBMkM7QUFDM0MsbUVBQThEO0FBQzlELDRFQUE0RTtBQUM1RSw4RUFBOEY7QUFDOUYsMEVBQTBFO0FBTTFFLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO0FBRXRGOzs7OztHQUtHO0FBQ0gsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDO0FBRS9COzs7OztHQUtHO0FBQ0gsTUFBTSxzQkFBc0IsR0FBRyxPQUFPLENBQUM7QUEwSXZDOztHQUVHO0FBQ0gsTUFBZSxlQUFnQixTQUFRLEdBQUcsQ0FBQyxRQUFRO0lBZ0JqRDs7Ozs7O09BTUc7SUFDSSxLQUFLLENBQUMsT0FBdUIsRUFBRSxHQUFHLE9BQWlCO1FBQ3hELE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7WUFDOUIsT0FBTztZQUNQLE9BQU87WUFDUCxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQ25DLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQyxDQUFDO0tBQ0o7SUFFRDs7Ozs7T0FLRztJQUNJLFNBQVMsQ0FBQyxPQUF1QjtRQUN0QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLDZCQUE2QixDQUFDLENBQUM7S0FDM0Q7SUFFRDs7OztPQUlHO0lBQ0ksa0JBQWtCO1FBQ3ZCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRDs7OztPQUlHO0lBQ0ksY0FBYztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNiO0NBQ0Y7QUFFRDs7OztHQUlHO0lBRVUsV0FBVzs0QkFEdkIsb0NBQWtCOzs7O3NC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OUksQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQzNCLElBQUEsc0JBQUcsRUFBQSw4QkFBOEIsRUFDakMseURBQXlELElBQUksQ0FBQyxZQUFZLEdBQUcsRUFDN0UsSUFBSSxDQUNMLENBQUM7WUFDSixDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztnQkFDMUQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBQSxzQkFBRyxFQUFBLGdDQUFnQyxFQUFFLGdEQUFnRCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDakosQ0FBQztTQUNGOztZQTlPVSx1REFBVzs7Ozs7QUFBWCxrQ0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgdHlwZSAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENmbkltYWdlUmVjaXBlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWltYWdlYnVpbGRlcic7XG5pbXBvcnQgeyBtZW1vaXplZEdldHRlciwgbGl0IH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvaGVscGVycy1pbnRlcm5hbCc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSwgTWV0aG9kTWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgQmFzZUltYWdlIH0gZnJvbSAnLi9iYXNlLWltYWdlJztcbmltcG9ydCB0eXBlIHsgSUNvbnRhaW5lclJlY2lwZSB9IGZyb20gJy4vY29udGFpbmVyLXJlY2lwZSc7XG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENvbmZpZ3VyYXRpb24sIElSZWNpcGVCYXNlIH0gZnJvbSAnLi9yZWNpcGUtYmFzZSc7XG5cbmNvbnN0IElNQUdFX1JFQ0lQRV9TWU1CT0wgPSBTeW1ib2wuZm9yKCdAYXdzLWNkay9hd3MtaW1hZ2VidWlsZGVyLWFscGhhLkltYWdlUmVjaXBlJyk7XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgYW4gaW1hZ2UgcmVjaXBlLiBXaGVuIHVzaW5nIHRoZSByZWNpcGUgaW4gYSBwaXBlbGluZSwgdGhlIHBpcGVsaW5lIHdpbGwgdXNlIHRoZVxuICogbGF0ZXN0IHJlY2lwZSBhdCB0aGUgdGltZSBvZiBleGVjdXRpb24uXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvaWJob3ctc2VtYW50aWMtdmVyc2lvbmluZy5odG1sXG4gKi9cbmNvbnN0IExBVEVTVF9WRVJTSU9OID0gJ3gueC54JztcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCB2ZXJzaW9uIHRvIHVzZSBpbiB0aGUgaW1hZ2UgcmVjaXBlLiBXaGVuIHRoZSByZWNpcGUgaXMgdXBkYXRlZCwgdGhlIGB4YCB3aWxsIGJlIGluY3JlbWVudGVkIG9mZiBmcm9tXG4gKiB0aGUgbGF0ZXN0IHJlY2lwZSB2ZXJzaW9uIHRoYXQgZXhpc3RzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL2NyZWF0ZS1pbWFnZS1yZWNpcGVzLmh0bWxcbiAqL1xuY29uc3QgREVGQVVMVF9SRUNJUEVfVkVSU0lPTiA9ICcxLjAueCc7XG5cbi8qKlxuICogQW4gRUMyIEltYWdlIEJ1aWxkZXIgSW1hZ2UgUmVjaXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElJbWFnZVJlY2lwZSBleHRlbmRzIElSZWNpcGVCYXNlIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGltYWdlIHJlY2lwZVxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBpbWFnZVJlY2lwZUFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgaW1hZ2UgcmVjaXBlXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlUmVjaXBlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgaW1hZ2UgcmVjaXBlXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlUmVjaXBlVmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNyZWF0aW5nIGFuIEltYWdlIFJlY2lwZSByZXNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlUmVjaXBlUHJvcHMge1xuICAvKipcbiAgICogVGhlIGJhc2UgaW1hZ2UgZm9yIGN1c3RvbWl6YXRpb25zIHNwZWNpZmllZCBpbiB0aGUgaW1hZ2UgcmVjaXBlLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZUltYWdlOiBCYXNlSW1hZ2U7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBpbWFnZSByZWNpcGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYSBuYW1lIGlzIGdlbmVyYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VSZWNpcGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgaW1hZ2UgcmVjaXBlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxLjAueFxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VSZWNpcGVWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGltYWdlIHJlY2lwZS5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGNvbXBvbmVudCBjb25maWd1cmF0aW9ucyB0byBhcHBseSBpbiB0aGUgaW1hZ2UgYnVpbGQuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudHM/OiBDb21wb25lbnRDb25maWd1cmF0aW9uW107XG5cbiAgLyoqXG4gICAqIFRoZSBhZGRpdGlvbmFsIHRhZ3MgdG8gYXNzaWduIHRvIHRoZSBvdXRwdXQgQU1JIGdlbmVyYXRlZCBieSB0aGUgYnVpbGQuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFtaVRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBUaGUgYmxvY2sgZGV2aWNlcyB0byBhdHRhY2ggdG8gdGhlIGluc3RhbmNlIHVzZWQgZm9yIGJ1aWxkaW5nIHRoZSBpbWFnZS5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYmxvY2tEZXZpY2VzPzogZWMyLkJsb2NrRGV2aWNlW107XG5cbiAgLyoqXG4gICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBmb3IgdXNlIGR1cmluZyBidWlsZCBhbmQgdGVzdCB3b3JrZmxvd3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIEltYWdlIEJ1aWxkZXIgZGVmYXVsdCB3b3JraW5nIGRpcmVjdG9yeSBpcyB1c2VkLiBGb3IgTGludXggYW5kIG1hY09TIGJ1aWxkcywgdGhpcyB3b3VsZCBiZSAvdG1wLiBGb3JcbiAgICogV2luZG93cyBidWlsZHMsIHRoaXMgd291bGQgYmUgQzovXG4gICAqL1xuICByZWFkb25seSB3b3JraW5nRGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHVuaW5zdGFsbCB0aGUgU3lzdGVtcyBNYW5hZ2VyIGFnZW50IGZyb20geW91ciBmaW5hbCBidWlsZCBpbWFnZSwgcHJpb3IgdG8gY3JlYXRpbmcgdGhlIG5ldyBBTUkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhpcyBpcyBmYWxzZSBpZiB0aGUgU3lzdGVtcyBNYW5hZ2VyIGFnZW50IGlzIHByZS1pbnN0YWxsZWQgb24gdGhlIGJhc2UgaW1hZ2UuIE90aGVyd2lzZSwgdGhpcyBpcyB0cnVlLlxuICAgKi9cbiAgcmVhZG9ubHkgdW5pbnN0YWxsU3NtQWdlbnRBZnRlckJ1aWxkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHVzZXIgZGF0YSBjb21tYW5kcyB0byBwYXNzIHRvIEltYWdlIEJ1aWxkZXIgYnVpbGQgYW5kIHRlc3QgRUMyIGluc3RhbmNlcy4gRm9yIExpbnV4IGFuZCBtYWNPUywgSW1hZ2UgQnVpbGRlclxuICAgKiB1c2VzIGEgZGVmYXVsdCB1c2VyIGRhdGEgc2NyaXB0IHRvIGluc3RhbGwgdGhlIFN5c3RlbXMgTWFuYWdlciBhZ2VudC4gSWYgeW91IG92ZXJyaWRlIHRoZSB1c2VyIGRhdGEsIHlvdSBtdXN0XG4gICAqIGVuc3VyZSB0byBhZGQgY29tbWFuZHMgdG8gaW5zdGFsbCBTeXN0ZW1zIE1hbmFnZXIgYWdlbnQsIGlmIGl0IGlzIG5vdCBwcmUtaW5zdGFsbGVkIG9uIHlvdXIgYmFzZSBpbWFnZS5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgdXNlckRhdGFPdmVycmlkZT86IGVjMi5Vc2VyRGF0YTtcblxuICAvKipcbiAgICogVGhlIHRhZ3MgdG8gYXBwbHkgdG8gdGhlIGltYWdlIHJlY2lwZVxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhbiBFQzIgSW1hZ2UgQnVpbGRlciBpbWFnZSByZWNpcGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbWFnZVJlY2lwZUF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgaW1hZ2UgcmVjaXBlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVyaXZlZCBmcm9tIHRoZSBpbWFnZVJlY2lwZU5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlUmVjaXBlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgaW1hZ2UgcmVjaXBlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVyaXZlZCBmcm9tIHRoZSBpbWFnZVJlY2lwZUFyblxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VSZWNpcGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgaW1hZ2UgcmVjaXBlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVyaXZlZCBmcm9tIGltYWdlUmVjaXBlQXJuLiBpZiBhIGltYWdlUmVjaXBlTmFtZSBpcyBwcm92aWRlZCwgdGhlIGxhdGVzdCB2ZXJzaW9uLCB4LngueCwgd2lsbFxuICAgKiBiZSB1c2VkXG4gICAqL1xuICByZWFkb25seSBpbWFnZVJlY2lwZVZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBuZXcgb3IgaW1wb3J0ZWQgSW1hZ2UgUmVjaXBlXG4gKi9cbmFic3RyYWN0IGNsYXNzIEltYWdlUmVjaXBlQmFzZSBleHRlbmRzIGNkay5SZXNvdXJjZSBpbXBsZW1lbnRzIElJbWFnZVJlY2lwZSB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBpbWFnZSByZWNpcGVcbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGltYWdlUmVjaXBlQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBpbWFnZSByZWNpcGVcbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGltYWdlUmVjaXBlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgaW1hZ2UgcmVjaXBlXG4gICAqL1xuICBhYnN0cmFjdCByZWFkb25seSBpbWFnZVJlY2lwZVZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogR3JhbnQgY3VzdG9tIGFjdGlvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBpbWFnZSByZWNpcGVcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICogQHBhcmFtIGFjdGlvbnMgVGhlIGxpc3Qgb2YgYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlLFxuICAgICAgYWN0aW9ucyxcbiAgICAgIHJlc291cmNlQXJuczogW3RoaXMuaW1hZ2VSZWNpcGVBcm5dLFxuICAgICAgc2NvcGU6IHRoaXMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGltYWdlIHJlY2lwZVxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKi9cbiAgcHVibGljIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoZ3JhbnRlZSwgJ2ltYWdlYnVpbGRlcjpHZXRJbWFnZVJlY2lwZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSByZWNpcGUgaXMgYSBDb250YWluZXIgUmVjaXBlXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF9pc0NvbnRhaW5lclJlY2lwZSgpOiB0aGlzIGlzIElDb250YWluZXJSZWNpcGUge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVjaXBlIGlzIGFuIEltYWdlIFJlY2lwZVxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfaXNJbWFnZVJlY2lwZSgpOiB0aGlzIGlzIElJbWFnZVJlY2lwZSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIEVDMiBJbWFnZSBCdWlsZGVyIEltYWdlIFJlY2lwZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS9tYW5hZ2UtcmVjaXBlcy5odG1sXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBJbWFnZVJlY2lwZSBleHRlbmRzIEltYWdlUmVjaXBlQmFzZSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWltYWdlYnVpbGRlci1hbHBoYS5JbWFnZVJlY2lwZSc7XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBpbWFnZSByZWNpcGUgZ2l2ZW4gaXRzIEFSTi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUltYWdlUmVjaXBlQXJuKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGltYWdlUmVjaXBlQXJuOiBzdHJpbmcpOiBJSW1hZ2VSZWNpcGUge1xuICAgIHJldHVybiB0aGlzLmZyb21JbWFnZVJlY2lwZUF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7IGltYWdlUmVjaXBlQXJuIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgYW4gZXhpc3RpbmcgaW1hZ2UgcmVjaXBlIGdpdmVuIGl0cyBuYW1lLiBUaGUgcHJvdmlkZWQgbmFtZSBtdXN0IGJlIG5vcm1hbGl6ZWQgYnlcbiAgICogY29udmVydGluZyBhbGwgYWxwaGFiZXRpY2FsIGNoYXJhY3RlcnMgdG8gbG93ZXJjYXNlLCBhbmQgcmVwbGFjaW5nIGFsbCBzcGFjZXMgYW5kIHVuZGVyc2NvcmVzIHdpdGggaHlwaGVucy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUltYWdlUmVjaXBlTmFtZShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBpbWFnZVJlY2lwZU5hbWU6IHN0cmluZyk6IElJbWFnZVJlY2lwZSB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUltYWdlUmVjaXBlQXR0cmlidXRlcyhzY29wZSwgaWQsIHsgaW1hZ2VSZWNpcGVOYW1lIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBpbWFnZSByZWNpcGUgYnkgcHJvdmlkaW5nIGl0cyBhdHRyaWJ1dGVzLiBJZiB0aGUgaW1hZ2UgcmVjaXBlIG5hbWUgaXMgcHJvdmlkZWQgYXMgYW4gYXR0cmlidXRlLFxuICAgKiBpdCBtdXN0IGJlIG5vcm1hbGl6ZWQgYnkgY29udmVydGluZyBhbGwgYWxwaGFiZXRpY2FsIGNoYXJhY3RlcnMgdG8gbG93ZXJjYXNlLCBhbmQgcmVwbGFjaW5nIGFsbCBzcGFjZXMgYW5kXG4gICAqIHVuZGVyc2NvcmVzIHdpdGggaHlwaGVucy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUltYWdlUmVjaXBlQXR0cmlidXRlcyhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhdHRyczogSW1hZ2VSZWNpcGVBdHRyaWJ1dGVzKTogSUltYWdlUmVjaXBlIHtcbiAgICBpZiAoIWF0dHJzLmltYWdlUmVjaXBlQXJuICYmICFhdHRycy5pbWFnZVJlY2lwZU5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBsaXRgSW1hZ2VSZWNpcGVBdHRyaWJ1dGVzUmVxdWlyZWRgLFxuICAgICAgICAnZWl0aGVyIGltYWdlUmVjaXBlQXJuIG9yIGltYWdlUmVjaXBlTmFtZSBtdXN0IGJlIHByb3ZpZGVkIHRvIGltcG9ydCBhbiBpbWFnZSByZWNpcGUnLFxuICAgICAgICBzY29wZSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaW1hZ2VSZWNpcGVBcm4gPVxuICAgICAgYXR0cnMuaW1hZ2VSZWNpcGVBcm4gPz9cbiAgICAgIGNkay5TdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICAgIHJlc291cmNlOiAnaW1hZ2UtcmVjaXBlJyxcbiAgICAgICAgcmVzb3VyY2VOYW1lOiBgJHthdHRycy5pbWFnZVJlY2lwZU5hbWV9LyR7YXR0cnMuaW1hZ2VSZWNpcGVWZXJzaW9uID8/IExBVEVTVF9WRVJTSU9OfWAsXG4gICAgICB9KTtcblxuICAgIGNvbnN0IFtpbWFnZVJlY2lwZU5hbWUsIGltYWdlUmVjaXBlVmVyc2lvbl0gPSAoKCkgPT4ge1xuICAgICAgaWYgKGF0dHJzLmltYWdlUmVjaXBlTmFtZSkge1xuICAgICAgICByZXR1cm4gW2F0dHJzLmltYWdlUmVjaXBlTmFtZSwgYXR0cnMuaW1hZ2VSZWNpcGVWZXJzaW9uID8/IExBVEVTVF9WRVJTSU9OXTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaW1hZ2VSZWNpcGVOYW1lVmVyc2lvbiA9IGNkay5TdGFjay5vZihzY29wZSkuc3BsaXRBcm4oXG4gICAgICAgIGltYWdlUmVjaXBlQXJuLFxuICAgICAgICBjZGsuQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUsXG4gICAgICApLnJlc291cmNlTmFtZSE7XG5cbiAgICAgIGNvbnN0IGltYWdlUmVjaXBlTmFtZVZlcnNpb25TcGxpdCA9IGNkay5Gbi5zcGxpdCgnLycsIGltYWdlUmVjaXBlTmFtZVZlcnNpb24pO1xuICAgICAgcmV0dXJuIFtjZGsuRm4uc2VsZWN0KDAsIGltYWdlUmVjaXBlTmFtZVZlcnNpb25TcGxpdCksIGNkay5Gbi5zZWxlY3QoMSwgaW1hZ2VSZWNpcGVOYW1lVmVyc2lvblNwbGl0KV07XG4gICAgfSkoKTtcblxuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIEltYWdlUmVjaXBlQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaW1hZ2VSZWNpcGVBcm4gPSBpbWFnZVJlY2lwZUFybjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBpbWFnZVJlY2lwZU5hbWUgPSBpbWFnZVJlY2lwZU5hbWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaW1hZ2VSZWNpcGVWZXJzaW9uID0gaW1hZ2VSZWNpcGVWZXJzaW9uO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIG9iamVjdCBpcyBhbiBJbWFnZVJlY2lwZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXNJbWFnZVJlY2lwZSh4OiBhbnkpOiB4IGlzIEltYWdlUmVjaXBlIHtcbiAgICByZXR1cm4geCAhPT0gbnVsbCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgSU1BR0VfUkVDSVBFX1NZTUJPTCBpbiB4O1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBibG9ja0RldmljZXM6IGVjMi5CbG9ja0RldmljZVtdID0gW107XG4gIHByaXZhdGUgcmVzb3VyY2U6IENmbkltYWdlUmVjaXBlO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSW1hZ2VSZWNpcGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGh5c2ljYWxOYW1lOlxuICAgICAgICBwcm9wcy5pbWFnZVJlY2lwZU5hbWUgPz9cbiAgICAgICAgY2RrLkxhenkuc3RyaW5nKHtcbiAgICAgICAgICBwcm9kdWNlOiAoKSA9PlxuICAgICAgICAgICAgY2RrLk5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7XG4gICAgICAgICAgICAgIG1heExlbmd0aDogMTI4LFxuICAgICAgICAgICAgICBzZXBhcmF0b3I6ICctJyxcbiAgICAgICAgICAgICAgYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzOiAnLScsXG4gICAgICAgICAgICB9KS50b0xvd2VyQ2FzZSgpLCAvLyBFbmZvcmNlIGxvd2VyY2FzZSBmb3IgdGhlIGF1dG8tZ2VuZXJhdGVkIGZhbGxiYWNrXG4gICAgICAgIH0pLFxuICAgIH0pO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIElNQUdFX1JFQ0lQRV9TWU1CT0wsIHsgdmFsdWU6IHRydWUgfSk7XG5cbiAgICB0aGlzLnZhbGlkYXRlSW1hZ2VSZWNpcGVOYW1lKCk7XG5cbiAgICB0aGlzLmFkZEJsb2NrRGV2aWNlKC4uLihwcm9wcy5ibG9ja0RldmljZXMgPz8gW10pKTtcblxuICAgIGNvbnN0IGNvbXBvbmVudHM6IENmbkltYWdlUmVjaXBlLkNvbXBvbmVudENvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdIHwgdW5kZWZpbmVkID0gcHJvcHMuY29tcG9uZW50cz8ubWFwKFxuICAgICAgKGNvbXBvbmVudCkgPT4gKHtcbiAgICAgICAgY29tcG9uZW50QXJuOiBjb21wb25lbnQuY29tcG9uZW50LmNvbXBvbmVudEFybixcbiAgICAgICAgLi4uKGNvbXBvbmVudC5wYXJhbWV0ZXJzICYmIHtcbiAgICAgICAgICBwYXJhbWV0ZXJzOiBPYmplY3QuZW50cmllcyhjb21wb25lbnQucGFyYW1ldGVycykubWFwKFxuICAgICAgICAgICAgKFtuYW1lLCBwYXJhbV0pOiBDZm5JbWFnZVJlY2lwZS5Db21wb25lbnRQYXJhbWV0ZXJQcm9wZXJ0eSA9PiAoe1xuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICB2YWx1ZTogcGFyYW0udmFsdWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApLFxuICAgICAgICB9KSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBjb25zdCBpbWFnZVJlY2lwZVZlcnNpb24gPSBwcm9wcy5pbWFnZVJlY2lwZVZlcnNpb24gPz8gREVGQVVMVF9SRUNJUEVfVkVSU0lPTjtcbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmbkltYWdlUmVjaXBlKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIG5hbWU6IHRoaXMucGh5c2ljYWxOYW1lLFxuICAgICAgdmVyc2lvbjogaW1hZ2VSZWNpcGVWZXJzaW9uLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgcGFyZW50SW1hZ2U6IHByb3BzLmJhc2VJbWFnZS5pbWFnZSxcbiAgICAgIGJsb2NrRGV2aWNlTWFwcGluZ3M6IGNkay5MYXp5LmFueSh7IHByb2R1Y2U6ICgpID0+IHRoaXMucmVuZGVyQmxvY2tEZXZpY2VzKCkgfSksXG4gICAgICB3b3JraW5nRGlyZWN0b3J5OiBwcm9wcy53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgYWRkaXRpb25hbEluc3RhbmNlQ29uZmlndXJhdGlvbjogdGhpcy5idWlsZEFkZGl0aW9uYWxJbnN0YW5jZUNvbmZpZ3VyYXRpb24ocHJvcHMpLFxuICAgICAgYW1pVGFnczogcHJvcHMuYW1pVGFncyxcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MsXG4gICAgICAuLi4oY29tcG9uZW50cz8ubGVuZ3RoICYmIHsgY29tcG9uZW50cyB9KSxcbiAgICB9KTtcbiAgfVxuXG4gIEBtZW1vaXplZEdldHRlclxuICBwdWJsaWMgZ2V0IGltYWdlUmVjaXBlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlTmFtZUF0dHJpYnV0ZSh0aGlzLnJlc291cmNlLmF0dHJOYW1lKTtcbiAgfVxuXG4gIEBtZW1vaXplZEdldHRlclxuICBwdWJsaWMgZ2V0IGltYWdlUmVjaXBlQXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VBcm5BdHRyaWJ1dGUodGhpcy5yZXNvdXJjZS5hdHRyQXJuLCB7XG4gICAgICBzZXJ2aWNlOiAnaW1hZ2VidWlsZGVyJyxcbiAgICAgIHJlc291cmNlOiAnaW1hZ2UtcmVjaXBlJyxcbiAgICAgIHJlc291cmNlTmFtZTogYCR7dGhpcy5waHlzaWNhbE5hbWV9LyR7dGhpcy5yZXNvdXJjZS52ZXJzaW9ufWAsXG4gICAgfSk7XG4gIH1cblxuICBAbWVtb2l6ZWRHZXR0ZXJcbiAgcHVibGljIGdldCBpbWFnZVJlY2lwZVZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZS5nZXRBdHQoJ1ZlcnNpb24nKS50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYmxvY2sgZGV2aWNlcyB0byBhdHRhY2ggdG8gdGhlIGluc3RhbmNlIHVzZWQgZm9yIGJ1aWxkaW5nIHRoZSBpbWFnZS5cbiAgICpcbiAgICogQHBhcmFtIGJsb2NrRGV2aWNlcyBUaGUgbGlzdCBvZiBibG9jayBkZXZpY2VzIHRvIGF0dGFjaFxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGFkZEJsb2NrRGV2aWNlKC4uLmJsb2NrRGV2aWNlczogZWMyLkJsb2NrRGV2aWNlW10pOiB2b2lkIHtcbiAgICB0aGlzLmJsb2NrRGV2aWNlcy5wdXNoKC4uLmJsb2NrRGV2aWNlcyk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgaW5wdXQgYmxvY2sgZGV2aWNlcywgaW50byB0aGUgYEJsb2NrRGV2aWNlTWFwcGluZ1tdYCBzdHJ1Y3R1cmUgdGhhdCBDZm5JbWFnZVJlY2lwZSBleHBlY3RzIHRvIHJlY2VpdmUuXG4gICAqIFRoaXMgaXMgcmVuZGVyZWQgYXQgc3ludGhlc2lzIHRpbWUsIGFzIHVzZXJzIGNhbiBhZGQgYWRkaXRpb25hbCBibG9jayBkZXZpY2VzIHdpdGggYGFkZEJsb2NrRGV2aWNlYCwgYWZ0ZXIgdGhlXG4gICAqIGNvbnN0cnVjdCBoYXMgYmVlbiBpbnN0YW50aWF0ZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHJlbmRlckJsb2NrRGV2aWNlcygpOiBDZm5JbWFnZVJlY2lwZS5JbnN0YW5jZUJsb2NrRGV2aWNlTWFwcGluZ1Byb3BlcnR5W10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGJsb2NrRGV2aWNlcyA9IHRoaXMuYmxvY2tEZXZpY2VzLm1hcCgoYmxvY2tEZXZpY2UpOiBDZm5JbWFnZVJlY2lwZS5JbnN0YW5jZUJsb2NrRGV2aWNlTWFwcGluZ1Byb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IGVic0RldmljZSA9IGJsb2NrRGV2aWNlLnZvbHVtZS5lYnNEZXZpY2U7XG4gICAgICBjb25zdCBlYnM6IENmbkltYWdlUmVjaXBlLkVic0luc3RhbmNlQmxvY2tEZXZpY2VTcGVjaWZpY2F0aW9uUHJvcGVydHkgPSB7XG4gICAgICAgIC4uLihlYnNEZXZpY2U/LmRlbGV0ZU9uVGVybWluYXRpb24gIT09IHVuZGVmaW5lZCAmJiB7IGRlbGV0ZU9uVGVybWluYXRpb246IGVic0RldmljZS5kZWxldGVPblRlcm1pbmF0aW9uIH0pLFxuICAgICAgICAuLi4oZWJzRGV2aWNlPy5lbmNyeXB0ZWQgIT09IHVuZGVmaW5lZCAmJiB7IGVuY3J5cHRlZDogZWJzRGV2aWNlLmVuY3J5cHRlZCB9KSxcbiAgICAgICAgLi4uKGVic0RldmljZT8uaW9wcyAhPT0gdW5kZWZpbmVkICYmIHsgaW9wczogZWJzRGV2aWNlLmlvcHMgfSksXG4gICAgICAgIC4uLihlYnNEZXZpY2U/Lmttc0tleSAhPT0gdW5kZWZpbmVkICYmIHsga21zS2V5SWQ6IGVic0RldmljZS5rbXNLZXkua2V5QXJuIH0pLFxuICAgICAgICAuLi4oZWJzRGV2aWNlPy5zbmFwc2hvdElkICE9PSB1bmRlZmluZWQgJiYgeyBzbmFwc2hvdElkOiBlYnNEZXZpY2Uuc25hcHNob3RJZCB9KSxcbiAgICAgICAgLi4uKGVic0RldmljZT8udGhyb3VnaHB1dCAhPT0gdW5kZWZpbmVkICYmIHsgdGhyb3VnaHB1dDogZWJzRGV2aWNlLnRocm91Z2hwdXQgfSksXG4gICAgICAgIC4uLihlYnNEZXZpY2U/LnZvbHVtZVNpemUgIT09IHVuZGVmaW5lZCAmJiB7IHZvbHVtZVNpemU6IGVic0RldmljZS52b2x1bWVTaXplIH0pLFxuICAgICAgICAuLi4oZWJzRGV2aWNlPy52b2x1bWVUeXBlICE9PSB1bmRlZmluZWQgJiYgeyB2b2x1bWVUeXBlOiBlYnNEZXZpY2Uudm9sdW1lVHlwZSB9KSxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRldmljZU5hbWU6IGJsb2NrRGV2aWNlLmRldmljZU5hbWUsXG4gICAgICAgIHZpcnR1YWxOYW1lOiBibG9ja0RldmljZS52b2x1bWUudmlydHVhbE5hbWUsXG4gICAgICAgIC4uLihibG9ja0RldmljZS5tYXBwaW5nRW5hYmxlZCA9PT0gZmFsc2UgJiYgeyBub0RldmljZTogJycgfSksXG4gICAgICAgIC4uLihPYmplY3Qua2V5cyhlYnMpLmxlbmd0aCAmJiB7IGVicyB9KSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYmxvY2tEZXZpY2VzLmxlbmd0aCA/IGJsb2NrRGV2aWNlcyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgdGhlIGFkZGl0aW9uYWwgaW5zdGFuY2UgY29uZmlndXJhdGlvbiBwcm9wZXJ0eSBpbnRvIHRoZSBgQWRkaXRpb25hbEluc3RhbmNlQ29uZmlndXJhdGlvbmAgdHlwZSBpbiB0aGVcbiAgICogQ2xvdWRGb3JtYXRpb24gTDEgZGVmaW5pdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIFRoZSBwcm9wcyBwYXNzZWQgYXMgaW5wdXQgdG8gdGhlIGNvbnN0cnVjdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZEFkZGl0aW9uYWxJbnN0YW5jZUNvbmZpZ3VyYXRpb24oXG4gICAgcHJvcHM6IEltYWdlUmVjaXBlUHJvcHMsXG4gICk6IENmbkltYWdlUmVjaXBlLkFkZGl0aW9uYWxJbnN0YW5jZUNvbmZpZ3VyYXRpb25Qcm9wZXJ0eSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc3lzdGVtc01hbmFnZXJBZ2VudDogQ2ZuSW1hZ2VSZWNpcGUuU3lzdGVtc01hbmFnZXJBZ2VudFByb3BlcnR5ID0ge1xuICAgICAgLi4uKHByb3BzLnVuaW5zdGFsbFNzbUFnZW50QWZ0ZXJCdWlsZCAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgdW5pbnN0YWxsQWZ0ZXJCdWlsZDogcHJvcHMudW5pbnN0YWxsU3NtQWdlbnRBZnRlckJ1aWxkLFxuICAgICAgfSksXG4gICAgfTtcblxuICAgIGNvbnN0IGFkZGl0aW9uYWxJbnN0YW5jZUNvbmZpZ3VyYXRpb246IENmbkltYWdlUmVjaXBlLkFkZGl0aW9uYWxJbnN0YW5jZUNvbmZpZ3VyYXRpb25Qcm9wZXJ0eSA9IHtcbiAgICAgIC4uLihPYmplY3Qua2V5cyhzeXN0ZW1zTWFuYWdlckFnZW50KS5sZW5ndGggJiYgeyBzeXN0ZW1zTWFuYWdlckFnZW50IH0pLFxuICAgICAgLi4uKHByb3BzLnVzZXJEYXRhT3ZlcnJpZGUgIT09IHVuZGVmaW5lZCAmJiB7IHVzZXJEYXRhT3ZlcnJpZGU6IGNkay5Gbi5iYXNlNjQocHJvcHMudXNlckRhdGFPdmVycmlkZS5yZW5kZXIoKSkgfSksXG4gICAgfTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhhZGRpdGlvbmFsSW5zdGFuY2VDb25maWd1cmF0aW9uKS5sZW5ndGggPyBhZGRpdGlvbmFsSW5zdGFuY2VDb25maWd1cmF0aW9uIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUltYWdlUmVjaXBlTmFtZSgpIHtcbiAgICBpZiAoY2RrLlRva2VuLmlzVW5yZXNvbHZlZCh0aGlzLnBoeXNpY2FsTmFtZSkpIHtcbiAgICAgIHJldHVybjsgLy8gQ2Fubm90IHZhbGlkYXRlIHVucmVzb2x2ZWQgdG9rZW5zLCBnaXZlbiB0aGVpciBhY3R1YWwgdmFsdWUgaXMgcmVuZGVyZWQgYXQgZGVwbG95bWVudCB0aW1lXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGh5c2ljYWxOYW1lLmxlbmd0aCA+IDEyOCkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGxpdGBJbWFnZVJlY2lwZU5hbWVUb29Mb25nYCxcbiAgICAgICAgYHRoZSBpbWFnZVJlY2lwZU5hbWUgY2Fubm90IGJlIGxvbmdlciB0aGFuIDEyOCBjaGFyYWN0ZXJzLCBnb3Q6ICcke3RoaXMucGh5c2ljYWxOYW1lfSdgLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNhbE5hbWUuaW5jbHVkZXMoJyAnKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IobGl0YEltYWdlUmVjaXBlTmFtZU5vU3BhY2VzYCwgYHRoZSBpbWFnZVJlY2lwZU5hbWUgY2Fubm90IGNvbnRhaW4gc3BhY2VzLCBnb3Q6ICcke3RoaXMucGh5c2ljYWxOYW1lfSdgLCB0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNhbE5hbWUuaW5jbHVkZXMoJ18nKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGxpdGBJbWFnZVJlY2lwZU5hbWVOb1VuZGVyc2NvcmVzYCxcbiAgICAgICAgYHRoZSBpbWFnZVJlY2lwZU5hbWUgY2Fubm90IGNvbnRhaW4gdW5kZXJzY29yZXMsIGdvdDogJyR7dGhpcy5waHlzaWNhbE5hbWV9J2AsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZSAhPT0gdGhpcy5waHlzaWNhbE5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IobGl0YEltYWdlUmVjaXBlTmFtZU11c3RCZUxvd2VyY2FzZWAsIGB0aGUgaW1hZ2VSZWNpcGVOYW1lIG11c3QgYmUgbG93ZXJjYXNlLCBnb3Q6ICcke3RoaXMucGh5c2ljYWxOYW1lfSdgLCB0aGlzKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==