@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.
- package/.jsii +33 -4
- package/.jsii.tabl.json.gz +0 -0
- package/lib/amazon-managed-component.js +36 -3
- package/lib/amazon-managed-image.js +36 -3
- package/lib/amazon-managed-workflow.js +36 -3
- package/lib/base-image.js +3 -3
- package/lib/component.js +45 -12
- package/lib/container-recipe.js +41 -8
- package/lib/distribution-configuration.js +38 -5
- package/lib/image-pipeline.js +38 -5
- package/lib/image-recipe.js +37 -4
- package/lib/image.js +37 -4
- package/lib/infrastructure-configuration.js +37 -4
- package/lib/lifecycle-policy.js +37 -4
- package/lib/os-version.js +1 -1
- package/lib/private/image-and-pipeline-props-helper.js +35 -2
- package/lib/private/policy-helper.js +36 -3
- package/lib/recipe-base.js +1 -1
- package/lib/workflow.js +42 -9
- package/package.json +8 -8
package/lib/component.js
CHANGED
|
@@ -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,25 +49,42 @@ 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.Component = exports.AwsMarketplaceComponent = exports.S3ComponentData = exports.ComponentData = exports.ComponentStepIfCondition = exports.ComponentStepInputs = exports.ComponentSchemaVersion = exports.ComponentPhaseName = exports.ComponentParameterType = exports.ComponentOnFailure = exports.ComponentAction = exports.ComponentConstantValue = 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
|
-
const s3assets = require("aws-cdk-lib/aws-s3-assets");
|
|
76
|
+
const s3assets = __importStar(require("aws-cdk-lib/aws-s3-assets"));
|
|
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");
|
|
46
79
|
const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable");
|
|
47
|
-
const yaml = require("yaml");
|
|
80
|
+
const yaml = __importStar(require("yaml"));
|
|
48
81
|
const COMPONENT_SYMBOL = Symbol.for('@aws-cdk/aws-imagebuilder-alpha.Component');
|
|
49
82
|
const LATEST_VERSION = 'x.x.x';
|
|
50
83
|
/**
|
|
51
84
|
* The value of a constant in a component document
|
|
52
85
|
*/
|
|
53
86
|
class ComponentConstantValue {
|
|
54
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentConstantValue", version: "2.
|
|
87
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentConstantValue", version: "2.258.0-alpha.0" };
|
|
55
88
|
/**
|
|
56
89
|
* Creates a string type constant in a component document
|
|
57
90
|
*
|
|
@@ -268,7 +301,7 @@ var ComponentSchemaVersion;
|
|
|
268
301
|
* Represents the inputs for a step in the component document
|
|
269
302
|
*/
|
|
270
303
|
class ComponentStepInputs {
|
|
271
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentStepInputs", version: "2.
|
|
304
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentStepInputs", version: "2.258.0-alpha.0" };
|
|
272
305
|
/**
|
|
273
306
|
* Creates the input value from an object, for the component step
|
|
274
307
|
*
|
|
@@ -298,7 +331,7 @@ exports.ComponentStepInputs = ComponentStepInputs;
|
|
|
298
331
|
* Represents an `if` condition in the component document
|
|
299
332
|
*/
|
|
300
333
|
class ComponentStepIfCondition {
|
|
301
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentStepIfCondition", version: "2.
|
|
334
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentStepIfCondition", version: "2.258.0-alpha.0" };
|
|
302
335
|
/**
|
|
303
336
|
* Creates the `if` value from an object, for the component step
|
|
304
337
|
*
|
|
@@ -320,7 +353,7 @@ exports.ComponentStepIfCondition = ComponentStepIfCondition;
|
|
|
320
353
|
* Helper class for referencing and uploading component data
|
|
321
354
|
*/
|
|
322
355
|
class ComponentData {
|
|
323
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentData", version: "2.
|
|
356
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentData", version: "2.258.0-alpha.0" };
|
|
324
357
|
/**
|
|
325
358
|
* Uploads component data from a local file to S3 to use as the component data
|
|
326
359
|
*
|
|
@@ -407,7 +440,7 @@ exports.ComponentData = ComponentData;
|
|
|
407
440
|
* Helper class for S3-based component data references, containing additional permission grant methods on the S3 object
|
|
408
441
|
*/
|
|
409
442
|
class S3ComponentData extends ComponentData {
|
|
410
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.S3ComponentData", version: "2.
|
|
443
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.S3ComponentData", version: "2.258.0-alpha.0" };
|
|
411
444
|
bucket;
|
|
412
445
|
key;
|
|
413
446
|
constructor(bucket, key) {
|
|
@@ -468,7 +501,7 @@ class S3ComponentDataFromAsset extends S3ComponentData {
|
|
|
468
501
|
* Helper class for working with AWS Marketplace components
|
|
469
502
|
*/
|
|
470
503
|
class AwsMarketplaceComponent {
|
|
471
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.AwsMarketplaceComponent", version: "2.
|
|
504
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.AwsMarketplaceComponent", version: "2.258.0-alpha.0" };
|
|
472
505
|
/**
|
|
473
506
|
* Imports an AWS Marketplace component from its attributes
|
|
474
507
|
*
|
|
@@ -554,7 +587,7 @@ let Component = (() => {
|
|
|
554
587
|
Component = _classThis = _classDescriptor.value;
|
|
555
588
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
556
589
|
}
|
|
557
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.Component", version: "2.
|
|
590
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.Component", version: "2.258.0-alpha.0" };
|
|
558
591
|
/** Uniquely identifies this class. */
|
|
559
592
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-imagebuilder-alpha.Component';
|
|
560
593
|
/**
|
|
@@ -718,4 +751,4 @@ let Component = (() => {
|
|
|
718
751
|
return Component = _classThis;
|
|
719
752
|
})();
|
|
720
753
|
exports.Component = Component;
|
|
721
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUFtQztBQUNuQywyQ0FBMkM7QUFDM0MsbUVBQTREO0FBRzVELHNEQUFzRDtBQUN0RCw0RUFBNEU7QUFDNUUsOEVBQThFO0FBQzlFLDBFQUEwRTtBQUUxRSw2QkFBNkI7QUFHN0IsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7QUFFakYsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDO0FBK1QvQjs7R0FFRztBQUNILE1BQWEsc0JBQXNCOztJQUNqQzs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFhO1FBQ3BDLE9BQU8sSUFBSSxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDcEQ7SUFFRDs7T0FFRztJQUNhLElBQUksQ0FBUztJQUU3Qjs7T0FFRztJQUNhLEtBQUssQ0FBTTtJQUUzQixZQUFzQixJQUFZLEVBQUUsS0FBVTtRQUM1QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztLQUNwQjs7QUF2Qkgsd0RBd0JDO0FBMEJEOztHQUVHO0FBQ0gsSUFBWSxlQXdKWDtBQXhKRCxXQUFZLGVBQWU7SUFDekI7O09BRUc7SUFDSCw2Q0FBMEIsQ0FBQTtJQUUxQjs7O09BR0c7SUFDSCxvQ0FBaUIsQ0FBQTtJQUVqQjs7T0FFRztJQUNILHlDQUFzQixDQUFBO0lBRXRCOztPQUVHO0lBQ0gsNkNBQTBCLENBQUE7SUFFMUI7O09BRUc7SUFDSCw2Q0FBMEIsQ0FBQTtJQUUxQjs7T0FFRztJQUNILGlEQUE4QixDQUFBO0lBRTlCOztPQUVHO0lBQ0gsbURBQWdDLENBQUE7SUFFaEM7O09BRUc7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O0FBQVQsOEJBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgQ2ZuQ29tcG9uZW50IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWltYWdlYnVpbGRlcic7XG5pbXBvcnQgdHlwZSAqIGFzIGttcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB0eXBlICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCAqIGFzIHMzYXNzZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1hc3NldHMnO1xuaW1wb3J0IHsgbWVtb2l6ZWRHZXR0ZXIsIGxpdCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSAneWFtbCc7XG5pbXBvcnQgdHlwZSB7IE9TVmVyc2lvbiwgUGxhdGZvcm0gfSBmcm9tICcuL29zLXZlcnNpb24nO1xuXG5jb25zdCBDT01QT05FTlRfU1lNQk9MID0gU3ltYm9sLmZvcignQGF3cy1jZGsvYXdzLWltYWdlYnVpbGRlci1hbHBoYS5Db21wb25lbnQnKTtcblxuY29uc3QgTEFURVNUX1ZFUlNJT04gPSAneC54LngnO1xuXG4vKipcbiAqIEFuIEVDMiBJbWFnZSBCdWlsZGVyIENvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ29tcG9uZW50IGV4dGVuZHMgY2RrLklSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudFZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogR3JhbnQgY3VzdG9tIGFjdGlvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgbGlzdCBvZiBhY3Rpb25zXG4gICAqL1xuICBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQ7XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKi9cbiAgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNyZWF0aW5nIGEgQ29tcG9uZW50IHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50UHJvcHMge1xuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCBkb2N1bWVudCBjb250ZW50IHRoYXQgZGVmaW5lcyB0aGUgYnVpbGQsIHZhbGlkYXRpb24sIG9yIHRlc3Qgc3RlcHMgdG8gYmUgZXhlY3V0ZWQgZHVyaW5nIHRoZSBpbWFnZVxuICAgKiBidWlsZGluZyBwcm9jZXNzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YTogQ29tcG9uZW50RGF0YTtcblxuICAvKipcbiAgICogVGhlIG9wZXJhdGluZyBzeXN0ZW0gcGxhdGZvcm0gb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtOiBQbGF0Zm9ybTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIG5hbWUgaXMgZ2VuZXJhdGVkXG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAxLjAuMFxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY2hhbmdlIGRlc2NyaXB0aW9uIG9mIHRoZSBjb21wb25lbnQuIERlc2NyaWJlcyB3aGF0IGNoYW5nZSBoYXMgYmVlbiBtYWRlIGluIHRoaXMgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50LCBvclxuICAgKiB3aGF0IG1ha2VzIHRoaXMgdmVyc2lvbiBkaWZmZXJlbnQgZnJvbSBvdGhlciB2ZXJzaW9ucy5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbmdlRGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBLTVMga2V5IHVzZWQgdG8gZW5jcnlwdCB0aGlzIGNvbXBvbmVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhbiBJbWFnZSBCdWlsZGVyIG93bmVkIGtleSB3aWxsIGJlIHVzZWQgdG8gZW5jcnlwdCB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgcmVhZG9ubHkga21zS2V5Pzoga21zLklLZXk7XG5cbiAgLyoqXG4gICAqIFRoZSBvcGVyYXRpbmcgc3lzdGVtIHZlcnNpb25zIHN1cHBvcnRlZCBieSB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBzdXBwb3J0ZWRPc1ZlcnNpb25zPzogT1NWZXJzaW9uW107XG5cbiAgLyoqXG4gICAqIFRoZSB0YWdzIHRvIGFwcGx5IHRvIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYW4gRUMyIEltYWdlIEJ1aWxkZXIgY29tcG9uZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50QXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgQVJOIGlzIGF1dG9tYXRpY2FsbHkgY29uc3RydWN0ZWQgaWYgYSBjb21wb25lbnROYW1lIGlzIHByb3ZpZGVkLCBvdGhlcndpc2UgYSBjb21wb25lbnRBcm4gaXNcbiAgICogICAgICAgICAgICByZXF1aXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50QXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIG5hbWUgaXMgYXV0b21hdGljYWxseSBjb25zdHJ1Y3RlZCBpZiBhIGNvbXBvbmVudEFybiBpcyBwcm92aWRlZCwgb3RoZXJ3aXNlIGEgY29tcG9uZW50TmFtZSBpc1xuICAgKiAgICAgICAgICAgIHJlcXVpcmVkXG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBjb21wb25lbnQsIHgueC54XG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnRWZXJzaW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGFuIEVDMiBJbWFnZSBCdWlsZGVyIEFXUyBNYXJrZXRwbGFjZSBjb21wb25lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBd3NNYXJrZXRwbGFjZUNvbXBvbmVudEF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIEFXUyBNYXJrZXRwbGFjZSBjb21wb25lbnQuIFRoaXMgbmFtZSBzaG91bGQgZXhjbHVkZSB0aGUgbWFya2V0cGxhY2UgcHJvZHVjdCBJRCBmcm9tIGl0XG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXJrZXRwbGFjZSBwcm9kdWN0IElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29tcG9uZW50XG4gICAqL1xuICByZWFkb25seSBtYXJrZXRwbGFjZVByb2R1Y3RJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgQVdTIE1hcmtldHBsYWNlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50LCB4LngueFxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIG9mIGFuIEVDMiBJbWFnZSBCdWlsZGVyIENvbXBvbmVudCBEb2N1bWVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERvY3VtZW50IHtcbiAgLyoqXG4gICAqIFRoZSBzY2hlbWEgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50XG4gICAqL1xuICByZWFkb25seSBzY2hlbWFWZXJzaW9uOiBDb21wb25lbnRTY2hlbWFWZXJzaW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgcGhhc2VzIHdoaWNoIGRlZmluZSB0aGUgZ3JvdXBpbmcgb2Ygc3RlcHMgdG8gcnVuIGluIHRoZSBidWlsZCBhbmQgdGVzdCB3b3JrZmxvd3Mgb2YgdGhlIGltYWdlIGJ1aWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGhhc2VzOiBDb21wb25lbnREb2N1bWVudFBoYXNlW107XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBkb2N1bWVudFxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGRvY3VtZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uc3RhbnRzIHRvIGRlZmluZSBpbiB0aGUgZG9jdW1lbnRcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgY29uc3RhbnRzPzogeyBbY29uc3RhbnROYW1lOiBzdHJpbmddOiBDb21wb25lbnRDb25zdGFudFZhbHVlIH07XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXJzIHRvIGRlZmluZSBpbiB0aGUgZG9jdW1lbnRcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgcGFyYW1ldGVycz86IHsgW3BhcmFtZXRlck5hbWU6IHN0cmluZ106IENvbXBvbmVudERvY3VtZW50UGFyYW1ldGVyRGVmaW5pdGlvbiB9O1xufVxuXG4vKipcbiAqIFRoZSBwaGFzZSB0byBydW4gaW4gYSBzcGVjaWZpYyB3b3JrZmxvdyBpbiBhbiBpbWFnZSBidWlsZCwgd2hpY2ggZGVmaW5lIHRoZSBzdGVwcyB0byBleGVjdXRlIHRvIGN1c3RvbWl6ZSBvciB0ZXN0XG4gKiB0aGUgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RG9jdW1lbnRQaGFzZSB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcGhhc2VcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IENvbXBvbmVudFBoYXNlTmFtZTtcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2Ygc3RlcHMgdG8gZXhlY3V0ZSB0byBtb2RpZnkgb3IgdGVzdCB0aGUgYnVpbGQvdGVzdCBpbnN0YW5jZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RlcHM6IENvbXBvbmVudERvY3VtZW50U3RlcFtdO1xufVxuXG4vKipcbiAqIFRoZSBzdGVwIHRvIHJ1biBpbiBhIHNwZWNpZmljIHBoYXNlIG9mIHRoZSBpbWFnZSBidWlsZCwgd2hpY2ggZGVmaW5lcyB0aGUgc3RlcCB0byBleGVjdXRlIHRvIGN1c3RvbWl6ZSBvciB0ZXN0IHRoZVxuICogaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RG9jdW1lbnRTdGVwIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzdGVwXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhY3Rpb24gdG8gcGVyZm9ybSBpbiB0aGUgc3RlcFxuICAgKi9cbiAgcmVhZG9ubHkgYWN0aW9uOiBDb21wb25lbnRBY3Rpb247XG5cbiAgLyoqXG4gICAqIENvbnRhaW5zIHBhcmFtZXRlcnMgcmVxdWlyZWQgYnkgdGhlIGFjdGlvbiB0byBydW4gdGhlIHN0ZXBcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvdG9lLWFjdGlvbi1tb2R1bGVzLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IGlucHV0czogQ29tcG9uZW50U3RlcElucHV0cztcblxuICAvKipcbiAgICogVGhlIGNvbmRpdGlvbiB0byBhcHBseSB0byB0aGUgc3RlcC4gSWYgdGhlIGNvbmRpdGlvbiBpcyBmYWxzZSwgdGhlbiB0aGUgc3RlcCBpcyBza2lwcGVkXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY29uZGl0aW9uIGlzIGFwcGxpZWQgdG8gdGhlIHN0ZXAgYW5kIGl0IGdldHMgZXhlY3V0ZWRcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvdG9lLWNvbmRpdGlvbmFsLWNvbnN0cnVjdHMuaHRtbFxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS90b2UtY29tcGFyaXNvbi1vcGVyYXRvcnMuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgaWY/OiBDb21wb25lbnRTdGVwSWZDb25kaXRpb247XG5cbiAgLyoqXG4gICAqIEEgbG9vcGluZyBjb25zdHJ1Y3QgZGVmaW5pbmcgYSByZXBlYXRlZCBzZXF1ZW5jZSBvZiBpbnN0cnVjdGlvbnNcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9vcD86IENvbXBvbmVudERvY3VtZW50TG9vcDtcblxuICAvKipcbiAgICogVGhlIHRpbWVvdXQgb2YgdGhlIHN0ZXBcbiAgICpcbiAgICogQGRlZmF1bHQgLSAxMjAgbWludXRlc1xuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IGNkay5EdXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoYXQgdGhlIHN0ZXAgc2hvdWxkIGRvIGluIGNhc2Ugb2YgZmFpbHVyZVxuICAgKlxuICAgKiBAZGVmYXVsdCBDb21wb25lbnRPbkZhaWx1cmUuQUJPUlRcbiAgICovXG4gIHJlYWRvbmx5IG9uRmFpbHVyZT86IENvbXBvbmVudE9uRmFpbHVyZTtcbn1cblxuLyoqXG4gKiBUaGUgbG9vcGluZyBjb25zdHJ1Y3Qgb2YgYSBjb21wb25lbnQgZGVmaW5lcyBhIHJlcGVhdGVkIHNlcXVlbmNlIG9mIGluc3RydWN0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERvY3VtZW50TG9vcCB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgbG9vcCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcmVmZXJlbmNlXG4gICAqXG4gICAqIEBkZWZhdWx0IGxvb3BcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmb3IgbG9vcCBpdGVyYXRlcyBvbiBhIHJhbmdlIG9mIGludGVnZXJzIHNwZWNpZmllZCB3aXRoaW4gYSBib3VuZGFyeSBvdXRsaW5lZCBieSB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGVcbiAgICogdmFyaWFibGVzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9uZSBpZiBgZm9yRWFjaGAgaXMgcHJvdmlkZWQuIG90aGVyd2lzZSwgYGZvcmAgaXMgcmVxdWlyZWQuXG4gICAqL1xuICByZWFkb25seSBmb3I/OiBDb21wb25lbnREb2N1bWVudEZvckxvb3A7XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JFYWNoIGxvb3AgaXRlcmF0ZXMgb24gYW4gZXhwbGljaXQgbGlzdCBvZiB2YWx1ZXMsIHdoaWNoIGNhbiBiZSBzdHJpbmdzIGFuZCBjaGFpbmVkIGV4cHJlc3Npb25zXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9uZSBpZiBgZm9yYCBpcyBwcm92aWRlZC4gb3RoZXJ3aXNlLCBgZm9yRWFjaGAgaXMgcmVxdWlyZWQuXG4gICAqL1xuICByZWFkb25seSBmb3JFYWNoPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIGZvciBsb29wIGl0ZXJhdGVzIG9uIGEgcmFuZ2Ugb2YgaW50ZWdlcnMgc3BlY2lmaWVkIHdpdGhpbiBhIGJvdW5kYXJ5IG91dGxpbmVkIGJ5IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZVxuICogdmFyaWFibGVzLiBUaGUgaXRlcmF0aW5nIHZhbHVlcyBhcmUgaW4gdGhlIHNldCBbc3RhcnQsIGVuZF0gYW5kIGluY2x1ZGVzIGJvdW5kYXJ5IHZhbHVlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnREb2N1bWVudEZvckxvb3Age1xuICAvKipcbiAgICogU3RhcnRpbmcgdmFsdWUgb2YgaXRlcmF0aW9uLiBEb2VzIG5vdCBhY2NlcHQgY2hhaW5pbmcgZXhwcmVzc2lvbnMuXG4gICAqL1xuICByZWFkb25seSBzdGFydDogbnVtYmVyO1xuICAvKipcbiAgICogRW5kaW5nIHZhbHVlIG9mIGl0ZXJhdGlvbi4gRG9lcyBub3QgYWNjZXB0IGNoYWluaW5nIGV4cHJlc3Npb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5kOiBudW1iZXI7XG4gIC8qKlxuICAgKiBEaWZmZXJlbmNlIGJ5IHdoaWNoIGFuIGl0ZXJhdGluZyB2YWx1ZSBpcyB1cGRhdGVkIHRocm91Z2ggYWRkaXRpb24uIEl0IG11c3QgYmUgYSBuZWdhdGl2ZSBvciBwb3NpdGl2ZSBub24temVyb1xuICAgKiB2YWx1ZS4gRG9lcyBub3QgYWNjZXB0IGNoYWluaW5nIGV4cHJlc3Npb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgdXBkYXRlQnk6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgdmFsdWUgb2YgYSBjb25zdGFudCBpbiBhIGNvbXBvbmVudCBkb2N1bWVudFxuICovXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50Q29uc3RhbnRWYWx1ZSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgc3RyaW5nIHR5cGUgY29uc3RhbnQgaW4gYSBjb21wb25lbnQgZG9jdW1lbnRcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgY29uc3RhbnRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVN0cmluZyh2YWx1ZTogc3RyaW5nKTogQ29tcG9uZW50Q29uc3RhbnRWYWx1ZSB7XG4gICAgcmV0dXJuIG5ldyBDb21wb25lbnRDb25zdGFudFZhbHVlKCdzdHJpbmcnLCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGRhdGEgdHlwZSBvZiB0aGUgY29uc3RhbnRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0eXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgY29uc3RhbnRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogYW55O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcih0eXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBwYXJhbWV0ZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnREb2N1bWVudFBhcmFtZXRlckRlZmluaXRpb24ge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIHBhcmFtZXRlclxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogQ29tcG9uZW50UGFyYW1ldGVyVHlwZTtcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHBhcmFtZXRlclxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmUsIGluZGljYXRpbmcgdGhlIHBhcmFtZXRlciBpcyByZXF1aXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdD86IGFueTtcblxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXJhbWV0ZXJcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGFjdGlvbiBmb3IgYSBzdGVwIHdpdGhpbiB0aGUgY29tcG9uZW50IGRvY3VtZW50XG4gKi9cbmV4cG9ydCBlbnVtIENvbXBvbmVudEFjdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgQXBwZW5kRmlsZSBhY3Rpb24gYWRkcyB0aGUgcHJvdmlkZWQgY29udGVudCB0byB0aGUgcHJlLWV4aXN0aW5nIGNvbnRlbnQgb2YgYSBmaWxlXG4gICAqL1xuICBBUFBFTkRfRklMRSA9ICdBcHBlbmRGaWxlJyxcblxuICAvKipcbiAgICogVGhlIEFzc2VydCBhY3Rpb24gcGVyZm9ybXMgdmFsdWUgd2l0aCBjb21wYXJpc29uL2xvZ2ljIG9wZXJhdG9ycywgYW5kIHN1Y2NlZWRzL2ZhaWxzIHRoZSBzdGVwIGJhc2VkIG9uIHRoZSBvdXRjb21lXG4gICAqIG9mIHRoZSBhc3NlcnRpb25cbiAgICovXG4gIEFTU0VSVCA9ICdBc3NlcnQnLFxuXG4gIC8qKlxuICAgKiBUaGUgQ29weUZpbGUgYWN0aW9uIGNvcGllcyBmaWxlcyBmcm9tIGEgc291cmNlIGZpbGUgdG8gYSBkZXN0aW5hdGlvblxuICAgKi9cbiAgQ09QWV9GSUxFID0gJ0NvcHlGaWxlJyxcblxuICAvKipcbiAgICogVGhlIENvcHlGb2xkZXIgYWN0aW9uIGNvcGllcyBmb2xkZXJzIGZyb20gYSBzb3VyY2UgdG8gYSBkZXN0aW5hdGlvblxuICAgKi9cbiAgQ09QWV9GT0xERVIgPSAnQ29weUZvbGRlcicsXG5cbiAgLyoqXG4gICAqIFRoZSBDcmVhdGVGaWxlIGFjdGlvbiBjcmVhdGVzIGEgZmlsZSBpbiB0aGUgcHJvdmlkZWQgbG9jYXRpb25cbiAgICovXG4gIENSRUFURV9GSUxFID0gJ0NyZWF0ZUZpbGUnLFxuXG4gIC8qKlxuICAgKiBUaGUgQ3JlYXRlRm9sZGVyIGFjdGlvbiBjcmVhdGVzIGEgZm9sZGVyIGluIHRoZSBwcm92aWRlZCBsb2NhdGlvblxuICAgKi9cbiAgQ1JFQVRFX0ZPTERFUiA9ICdDcmVhdGVGb2xkZXInLFxuXG4gIC8qKlxuICAgKiBUaGUgQ3JlYXRlU3ltbGluayBhY3Rpb24gY3JlYXRlcyBzeW1ib2xpYyBsaW5rcyBmcm9tIGEgZ2l2ZW4gcGF0aCB0byBhIHRhcmdldFxuICAgKi9cbiAgQ1JFQVRFX1NZTUxJTksgPSAnQ3JlYXRlU3ltbGluaycsXG5cbiAgLyoqXG4gICAqIFRoZSBEZWxldGVGaWxlIGFjdGlvbiBkZWxldGVzIGZpbGUocykgaW4gdGhlIHByb3ZpZGVkIGxvY2F0aW9uXG4gICAqL1xuICBERUxFVEVfRklMRSA9ICdEZWxldGVGaWxlJyxcblxuICAvKipcbiAgICogVGhlIERlbGV0ZUZvbGRlciBhY3Rpb24gZGVsZXRlcyBmb2xkZXJzIGluIHRoZSBwcm92aWRlZCBsb2NhdGlvblxuICAgKi9cbiAgREVMRVRFX0ZPTERFUiA9ICdEZWxldGVGb2xkZXInLFxuXG4gIC8qKlxuICAgKiBUaGUgRXhlY3V0ZUJhc2ggYWN0aW9uIHJ1bnMgYmFzaCBzY3JpcHRzIHdpdGggaW5saW5lIGJhc2ggY29tbWFuZHNcbiAgICovXG4gIEVYRUNVVEVfQkFTSCA9ICdFeGVjdXRlQmFzaCcsXG5cbiAgLyoqXG4gICAqIFRoZSBFeGVjdXRlQmluYXJ5IGFjdGlvbiBydW5zIGEgcHJvdmlkZWQgYmluYXJ5IGV4ZWN1dGFibGVcbiAgICovXG4gIEVYRUNVVEVfQklOQVJZID0gJ0V4ZWN1dGVCaW5hcnknLFxuXG4gIC8qKlxuICAgKiBUaGUgRXhlY3V0ZURvY3VtZW50IGFjdGlvbiBhbGxvd3MgcnVubmluZyBvdGhlciBjb21wb25lbnQgZG9jdW1lbnRzIGZyb20gd2l0aGluIGEgZ2l2ZW4gY29tcG9uZW50XG4gICAqL1xuICBFWEVDVVRFX0RPQ1VNRU5UID0gJ0V4ZWN1dGVEb2N1bWVudCcsXG5cbiAgLyoqXG4gICAqIFRoZSBFeGVjdXRlUG93ZXJzaGVsbCBhY3Rpb24gcnVucyBQb3dlclNoZWxsIHNjcmlwdHMgd2l0aCBpbmxpbmUgUG93ZXJTaGVsbCBjb21tYW5kc1xuICAgKi9cbiAgRVhFQ1VURV9QT1dFUlNIRUxMID0gJ0V4ZWN1dGVQb3dlclNoZWxsJyxcblxuICAvKipcbiAgICogVGhlIEluc3RhbGxNU0kgYWN0aW9uIHJ1bnMgYSBXaW5kb3dzIGFwcGxpY2F0aW9uIHdpdGggdGhlIHByb3ZpZGVkIE1TSSBmaWxlXG4gICAqL1xuICBJTlNUQUxMX01TSSA9ICdJbnN0YWxsTVNJJyxcblxuICAvKipcbiAgICogVGhlIExpc3RGaWxlcyBhY3Rpb24gbGlzdHMgZmlsZXMgaW4gdGhlIHByb3ZpZGVkIGZvbGRlclxuICAgKi9cbiAgTElTVF9GSUxFUyA9ICdMaXN0RmlsZXMnLFxuXG4gIC8qKlxuICAgKiBUaGUgTW92ZUZpbGUgYWN0aW9uIG1vdmVzIGZpbGVzIGZyb20gYSBzb3VyY2UgdG8gYSBkZXN0aW5hdGlvblxuICAgKi9cbiAgTU9WRV9GSUxFID0gJ01vdmVGaWxlJyxcblxuICAvKipcbiAgICogVGhlIE1vdmVGb2xkZXIgYWN0aW9uIG1vdmVzIGZvbGRlcnMgZnJvbSBhIHNvdXJjZSB0byBhIGRlc3RpbmF0aW9uXG4gICAqL1xuICBNT1ZFX0ZPTERFUiA9ICdNb3ZlRm9sZGVyJyxcblxuICAvKipcbiAgICogVGhlIFJlYWRGaWxlIGFjdGlvbiByZWFkcyB0aGUgY29udGVudCBvZiBhIHRleHQgZmlsZVxuICAgKi9cbiAgUkVBRF9GSUxFID0gJ1JlYWRGaWxlJyxcblxuICAvKipcbiAgICogVGhlIFJlYm9vdCBhY3Rpb24gcmVib290cyB0aGUgaW5zdGFuY2VcbiAgICovXG4gIFJFQk9PVCA9ICdSZWJvb3QnLFxuXG4gIC8qKlxuICAgKiBUaGUgU2V0RmlsZUVuY29kaW5nIGFjdGlvbiBtb2RpZmllcyB0aGUgZW5jb2RpbmcgcHJvcGVydHkgb2YgYW4gZXhpc3RpbmcgZmlsZVxuICAgKi9cbiAgU0VUX0ZJTEVfRU5DT0RJTkcgPSAnU2V0RmlsZUVuY29kaW5nJyxcblxuICAvKipcbiAgICogVGhlIFNldEZpbGVPd25lciBhY3Rpb24gbW9kaWZpZXMgdGhlIG93bmVyIGFuZCBncm91cCBvd25lcnNoaXAgcHJvcGVydGllcyBvZiBhbiBleGlzdGluZyBmaWxlXG4gICAqL1xuICBTRVRfRklMRV9PV05FUiA9ICdTZXRGaWxlT3duZXInLFxuXG4gIC8qKlxuICAgKiBUaGUgU2V0Rm9sZGVyT3duZXIgYWN0aW9uIHJlY3Vyc2l2ZWx5IG1vZGlmaWVzIHRoZSBvd25lciBhbmQgZ3JvdXAgb3duZXJzaGlwIHByb3BlcnRpZXMgb2YgYW4gZXhpc3RpbmcgZm9sZGVyXG4gICAqL1xuICBTRVRfRk9MREVSX09XTkVSID0gJ1NldEZvbGRlck93bmVyJyxcblxuICAvKipcbiAgICogVGhlIFNldEZpbGVQZXJtaXNzaW9ucyBhY3Rpb24gbW9kaWZpZXMgdGhlIHBlcm1pc3Npb24gb2YgYW4gZXhpc3RpbmcgZmlsZVxuICAgKi9cbiAgU0VUX0ZJTEVfUEVSTUlTU0lPTlMgPSAnU2V0RmlsZVBlcm1pc3Npb25zJyxcblxuICAvKipcbiAgICogVGhlIFNldEZvbGRlclBlcm1pc3Npb25zIGFjdGlvbiByZWN1cnNpdmVseSBtb2RpZmllcyB0aGUgcGVybWlzc2lvbnMgb2YgYW4gZXhpc3RpbmcgZm9sZGVyIGFuZCBhbGwgb2YgaXRzIHN1YmZpbGVzXG4gICAqIGFuZCBzdWJmb2xkZXJzXG4gICAqL1xuICBTRVRfRk9MREVSX1BFUk1JU1NJT05TID0gJ1NldEZvbGRlclBlcm1pc3Npb25zJyxcblxuICAvKipcbiAgICogVGhlIFNldFJlZ2lzdHJ5IGFjdGlvbiBzZXRzIHRoZSB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBXaW5kb3dzIHJlZ2lzdHJ5IGtleVxuICAgKi9cbiAgU0VUX1JFR0lTVFJZID0gJ1NldFJlZ2lzdHJ5JyxcblxuICAvKipcbiAgICogVGhlIFMzRG93bmxvYWQgYWN0aW9uIGRvd25sb2FkcyBhbiBBbWF6b24gUzMgb2JqZWN0L2ZvbGRlciB0byBhIGxvY2FsIGRlc3RpbmF0aW9uXG4gICAqL1xuICBTM19ET1dOTE9BRCA9ICdTM0Rvd25sb2FkJyxcblxuICAvKipcbiAgICogVGhlIFMzVXBsb2FkIGFjdGlvbiB1cGxvYWRzIGEgZmlsZSBvciBmb2xkZXIgdG8gYW4gQW1hem9uIFMzIGxvY2F0aW9uXG4gICAqL1xuICBTM19VUExPQUQgPSAnUzNVcGxvYWQnLFxuXG4gIC8qKlxuICAgKiBUaGUgVW5pbnN0YWxsTVNJIGFjdGlvbiByZW1vdmVzIGEgV2luZG93cyBhcHBsaWNhdGlvbiB1c2luZyBhbiBNU0kgZmlsZVxuICAgKi9cbiAgVU5JTlNUQUxMX01TSSA9ICdVbmluc3RhbGxNU0knLFxuXG4gIC8qKlxuICAgKiBUaGUgVXBkYXRlT1MgYWN0aW9uIGluc3RhbGxzIE9TIHVwZGF0ZXNcbiAgICovXG4gIFVQREFURV9PUyA9ICdVcGRhdGVPUycsXG5cbiAgLyoqXG4gICAqIFRoZSBXZWJEb3dubG9hZCBhY3Rpb24gZG93bmxvYWRzIGZpbGVzIGZyb20gYSBVUkwgdG8gYSBsb2NhbCBkZXN0aW5hdGlvblxuICAgKi9cbiAgV0VCX0RPV05MT0FEID0gJ1dlYkRvd25sb2FkJyxcbn1cblxuLyoqXG4gKiBTcGVjaWZpZXMgd2hhdCB0aGUgc3RlcCBzaG91bGQgZG8gaW4gY2FzZSBvZiBmYWlsdXJlXG4gKi9cbmV4cG9ydCBlbnVtIENvbXBvbmVudE9uRmFpbHVyZSB7XG4gIC8qKlxuICAgKiBGYWlscyB0aGUgc3RlcCBhbmQgZG9jdW1lbnQgZXhlY3V0aW9uXG4gICAqL1xuICBBQk9SVCA9ICdBYm9ydCcsXG5cbiAgLyoqXG4gICAqIEZhaWxzIHRoZSBzdGVwIGFuZCBwcm9jZWVkcyB0byBleGVjdXRlIHRoZSBuZXh0IHN0ZXAgaW4gdGhlIGRvY3VtZW50XG4gICAqL1xuICBDT05USU5VRSA9ICdDb250aW51ZScsXG5cbiAgLyoqXG4gICAqIElnbm9yZXMgdGhlIHN0ZXAgYW5kIHByb2NlZWRzIHRvIGV4ZWN1dGUgdGhlIG5leHQgc3RlcCBpbiB0aGUgZG9jdW1lbnRcbiAgICovXG4gIElHTk9SRSA9ICdJZ25vcmUnLFxufVxuXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXIgdHlwZSBpbiBhIGNvbXBvbmVudCBkb2N1bWVudFxuICovXG5leHBvcnQgZW51bSBDb21wb25lbnRQYXJhbWV0ZXJUeXBlIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgcGFyYW1ldGVyIHZhbHVlIGlzIGEgc3RyaW5nXG4gICAqL1xuICBTVFJJTkcgPSAnc3RyaW5nJyxcbn1cblxuLyoqXG4gKiBUaGUgcGhhc2VzIG9mIGEgY29tcG9uZW50IGRvY3VtZW50XG4gKi9cbmV4cG9ydCBlbnVtIENvbXBvbmVudFBoYXNlTmFtZSB7XG4gIC8qKlxuICAgKiBCdWlsZCBwaGFzZSBvZiB0aGUgY29tcG9uZW50LiBUaGlzIHBoYXNlIGlzIHJ1biBkdXJpbmcgdGhlIEJVSUxESU5HIHBoYXNlIG9mIHRoZSBpbWFnZSBidWlsZC5cbiAgICovXG4gIEJVSUxEID0gJ2J1aWxkJyxcblxuICAvKipcbiAgICogVGVzdCBwaGFzZSBvZiB0aGUgY29tcG9uZW50LCBleGVjdXRlZCBkaXJlY3RseSBvbiB0aGUgaW5zdGFuY2Ugd2hpY2ggaXMgdXNlZCB0byBidWlsZCB0aGUgY29udGFpbmVyIGltYWdlLiBUaGlzXG4gICAqIHBoYXNlIGlzIHJ1biBkdXJpbmcgdGhlIFRFU1RJTkcgcGhhc2Ugb2YgdGhlIGltYWdlIGJ1aWxkLlxuICAgKi9cbiAgQ09OVEFJTkVSX0hPU1RfVEVTVCA9ICdjb250YWluZXItaG9zdC10ZXN0JyxcblxuICAvKipcbiAgICogVGVzdCBwaGFzZSBvZiB0aGUgY29tcG9uZW50LiBUaGlzIHBoYXNlIGlzIHJ1biBkdXJpbmcgdGhlIFRFU1RJTkcgcGhhc2Ugb2YgdGhlIGltYWdlIGJ1aWxkLlxuICAgKi9cbiAgVEVTVCA9ICd0ZXN0JyxcblxuICAvKipcbiAgICogVmFsaWRhdGUgcGhhc2Ugb2YgdGhlIGNvbXBvbmVudC4gVGhpcyBwaGFzZSBpcyBydW4gZHVyaW5nIHRoZSBCVUlMRElORyBwaGFzZSBvZiB0aGUgaW1hZ2UgYnVpbGQsIGFmdGVyIHRoZSBidWlsZFxuICAgKiBzdGVwIG9mIHRoZSBjb21wb25lbnQgaXMgZXhlY3V0ZWQuXG4gICAqL1xuICBWQUxJREFURSA9ICd2YWxpZGF0ZScsXG59XG5cbi8qKlxuICogVGhlIHNjaGVtYSB2ZXJzaW9uIG9mIHRoZSBjb21wb25lbnRcbiAqL1xuZXhwb3J0IGVudW0gQ29tcG9uZW50U2NoZW1hVmVyc2lvbiB7XG4gIC8qKlxuICAgKiBTY2hlbWEgdmVyc2lvbiAxLjAgZm9yIHRoZSBjb21wb25lbnQgZG9jdW1lbnRcbiAgICovXG4gIFYxXzAgPSAnMS4wJyxcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBpbnB1dHMgZm9yIGEgc3RlcCBpbiB0aGUgY29tcG9uZW50IGRvY3VtZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wb25lbnRTdGVwSW5wdXRzIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIGlucHV0IHZhbHVlIGZyb20gYW4gb2JqZWN0LCBmb3IgdGhlIGNvbXBvbmVudCBzdGVwXG4gICAqXG4gICAqIEBwYXJhbSBpbnB1dHNPYmplY3QgVGhlIG9iamVjdCBjb250YWluaW5nIHRoZSBpbnB1dCB2YWx1ZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbU9iamVjdChpbnB1dHNPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiBDb21wb25lbnRTdGVwSW5wdXRzIHtcbiAgICByZXR1cm4gbmV3IENvbXBvbmVudFN0ZXBJbnB1dHMoaW5wdXRzT2JqZWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBpbnB1dCB2YWx1ZSBmcm9tIGEgbGlzdCBvZiBpbnB1dCBvYmplY3RzLCBmb3IgdGhlIGNvbXBvbmVudCBzdGVwXG4gICAqXG4gICAqIEBwYXJhbSBpbnB1dHNPYmplY3RMaXN0IFRoZSBsaXN0IG9mIG9iamVjdHMgY29udGFpbmluZyB0aGUgaW5wdXQgdmFsdWVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21MaXN0KGlucHV0c09iamVjdExpc3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH1bXSk6IENvbXBvbmVudFN0ZXBJbnB1dHMge1xuICAgIHJldHVybiBuZXcgQ29tcG9uZW50U3RlcElucHV0cyhpbnB1dHNPYmplY3RMaXN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVuZGVyZWQgaW5wdXQgdmFsdWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpbnB1dHM6IGFueTtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoaW5wdXQ6IGFueSkge1xuICAgIHRoaXMuaW5wdXRzID0gaW5wdXQ7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIGBpZmAgY29uZGl0aW9uIGluIHRoZSBjb21wb25lbnQgZG9jdW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIENvbXBvbmVudFN0ZXBJZkNvbmRpdGlvbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBgaWZgIHZhbHVlIGZyb20gYW4gb2JqZWN0LCBmb3IgdGhlIGNvbXBvbmVudCBzdGVwXG4gICAqXG4gICAqIEBwYXJhbSBpZk9iamVjdCBUaGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGBpZmAgY29uZGl0aW9uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21PYmplY3QoaWZPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiBDb21wb25lbnRTdGVwSWZDb25kaXRpb24ge1xuICAgIHJldHVybiBuZXcgQ29tcG9uZW50U3RlcElmQ29uZGl0aW9uKGlmT2JqZWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVuZGVyZWQgaW5wdXQgdmFsdWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpZkNvbmRpdGlvbjogYW55O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihpZkNvbmRpdGlvbjogYW55KSB7XG4gICAgdGhpcy5pZkNvbmRpdGlvbiA9IGlmQ29uZGl0aW9uO1xuICB9XG59XG5cbi8qKlxuICogVGhlIHJlbmRlcmVkIGNvbXBvbmVudCBkYXRhIHZhbHVlLCBmb3IgdXNlIGluIENsb3VkRm9ybWF0aW9uLlxuICogLSBGb3IgaW5saW5lIGNvbXBvbmVudHMsIGRhdGEgaXMgdGhlIGNvbXBvbmVudCB0ZXh0XG4gKiAtIEZvciBTMy1iYWNrZWQgY29tcG9uZW50cywgdXJpIGlzIHRoZSBTMyBVUkxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnREYXRhQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCBjb21wb25lbnQgZGF0YSwgZm9yIHVzZSBpbiBDbG91ZEZvcm1hdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmUgaWYgdXJpIGlzIHNldFxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlbmRlcmVkIGNvbXBvbmVudCBkYXRhIFVSSSwgZm9yIHVzZSBpbiBDbG91ZEZvcm1hdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmUgaWYgZGF0YSBpcyBzZXRcbiAgICovXG4gIHJlYWRvbmx5IHVyaT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIHJlZmVyZW5jaW5nIGFuZCB1cGxvYWRpbmcgY29tcG9uZW50IGRhdGFcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbXBvbmVudERhdGEge1xuICAvKipcbiAgICogVXBsb2FkcyBjb21wb25lbnQgZGF0YSBmcm9tIGEgbG9jYWwgZmlsZSB0byBTMyB0byB1c2UgYXMgdGhlIGNvbXBvbmVudCBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCBJZGVudGlmaWVyIG9mIHRoZSBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIHBhdGggVGhlIGxvY2FsIHBhdGggdG8gdGhlIGNvbXBvbmVudCBkYXRhIGZpbGVcbiAgICogQHBhcmFtIG9wdGlvbnMgUzMgYXNzZXQgdXBsb2FkIG9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUFzc2V0KFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgb3B0aW9uczogczNhc3NldHMuQXNzZXRPcHRpb25zID0ge30sXG4gICk6IFMzQ29tcG9uZW50RGF0YSB7XG4gICAgY29uc3QgYXNzZXQgPSBuZXcgczNhc3NldHMuQXNzZXQoc2NvcGUsIGlkLCB7IC4uLm9wdGlvbnMsIHBhdGggfSk7XG4gICAgcmV0dXJuIG5ldyBTM0NvbXBvbmVudERhdGFGcm9tQXNzZXQoYXNzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZXMgY29tcG9uZW50IGRhdGEgZnJvbSBhIHByZS1leGlzdGluZyBTMyBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIGJ1Y2tldCBUaGUgUzMgYnVja2V0IHdoZXJlIHRoZSBjb21wb25lbnQgZGF0YSBpcyBzdG9yZWRcbiAgICogQHBhcmFtIGtleSBUaGUgUzMga2V5IG9mIHRoZSBjb21wb25lbnQgZGF0YSBmaWxlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21TMyhidWNrZXQ6IHMzLklCdWNrZXQsIGtleTogc3RyaW5nKTogUzNDb21wb25lbnREYXRhIHtcbiAgICByZXR1cm4gbmV3IFMzQ29tcG9uZW50RGF0YUZyb21CdWNrZXRLZXkoYnVja2V0LCBrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZXMgYW4gaW5saW5lIEpTT04gb2JqZWN0IGFzIHRoZSBjb21wb25lbnQgZGF0YVxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBBbiBpbmxpbmUgSlNPTiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjb21wb25lbnQgZGF0YVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tSnNvbk9iamVjdChkYXRhOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogQ29tcG9uZW50RGF0YSB7XG4gICAgY29uc3QgaW5saW5lRGF0YSA9IHlhbWwuc3RyaW5naWZ5KGRhdGEsIHsgaW5kZW50OiAyIH0pO1xuICAgIHJldHVybiBuZXcgSW5saW5lQ29tcG9uZW50RGF0YShpbmxpbmVEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VzIGFuIGlubGluZSBKU09OIG9iamVjdCBhcyB0aGUgY29tcG9uZW50IGRhdGEsIHVzaW5nIHRoZSBDb21wb25lbnREb2N1bWVudCBpbnRlcmZhY2VcbiAgICpcbiAgICogQHBhcmFtIGRhdGEgQW4gaW5saW5lIEpTT04gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY29tcG9uZW50IGRhdGFcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNvbXBvbmVudERvY3VtZW50SnNvbk9iamVjdChkYXRhOiBDb21wb25lbnREb2N1bWVudCk6IENvbXBvbmVudERhdGEge1xuICAgIGNvbnN0IHsgbmFtZSwgZGVzY3JpcHRpb24sIHNjaGVtYVZlcnNpb24sIGNvbnN0YW50cywgcGFyYW1ldGVycywgcGhhc2VzIH0gPSBkYXRhO1xuICAgIHJldHVybiB0aGlzLmZyb21Kc29uT2JqZWN0KHtcbiAgICAgIC4uLihuYW1lICE9PSB1bmRlZmluZWQgJiYgeyBuYW1lIH0pLFxuICAgICAgLi4uKGRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgIHNjaGVtYVZlcnNpb246IHNjaGVtYVZlcnNpb24sXG4gICAgICAuLi4oY29uc3RhbnRzICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICBjb25zdGFudHM6IE9iamVjdC5lbnRyaWVzKGNvbnN0YW50cykubWFwKChbY29uc3RhbnROYW1lLCB2YWx1ZV0pID0+ICh7XG4gICAgICAgICAgW2NvbnN0YW50TmFtZV06IHsgdHlwZTogdmFsdWUudHlwZSwgdmFsdWU6IHZhbHVlLnZhbHVlIH0sXG4gICAgICAgIH0pKSxcbiAgICAgIH0pLFxuICAgICAgLi4uKHBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgIHBhcmFtZXRlcnM6IE9iamVjdC5lbnRyaWVzKHBhcmFtZXRlcnMpLm1hcCgoW3BhcmFtZXRlck5hbWUsIHZhbHVlXSkgPT4gKHsgW3BhcmFtZXRlck5hbWVdOiB2YWx1ZSB9KSksXG4gICAgICB9KSxcbiAgICAgIHBoYXNlczogcGhhc2VzLm1hcCgocGhhc2UpID0+ICh7XG4gICAgICAgIG5hbWU6IHBoYXNlLm5hbWUsXG4gICAgICAgIHN0ZXBzOiBwaGFzZS5zdGVwcy5tYXAoKHN0ZXApID0+ICh7XG4gICAgICAgICAgbmFtZTogc3RlcC5uYW1lLFxuICAgICAgICAgIGFjdGlvbjogc3RlcC5hY3Rpb24sXG4gICAgICAgICAgLi4uKHN0ZXAub25GYWlsdXJlICE9PSB1bmRlZmluZWQgJiYgeyBvbkZhaWx1cmU6IHN0ZXAub25GYWlsdXJlIH0pLFxuICAgICAgICAgIC4uLihzdGVwLnRpbWVvdXQgIT09IHVuZGVmaW5lZCAmJiB7IHRpbWVvdXRTZWNvbmRzOiBzdGVwLnRpbWVvdXQudG9TZWNvbmRzKCkgfSksXG4gICAgICAgICAgLi4uKHN0ZXAuaWYgIT09IHVuZGVmaW5lZCAmJiB7IGlmOiBzdGVwLmlmLmlmQ29uZGl0aW9uIH0pLFxuICAgICAgICAgIC4uLihzdGVwLmxvb3AgIT09IHVuZGVmaW5lZCAmJiB7IGxvb3A6IHN0ZXAubG9vcCB9KSxcbiAgICAgICAgICBpbnB1dHM6IHN0ZXAuaW5wdXRzLmlucHV0cyxcbiAgICAgICAgfSkpLFxuICAgICAgfSkpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZXMgYW4gaW5saW5lIEpTT04vWUFNTCBzdHJpbmcgYXMgdGhlIGNvbXBvbmVudCBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIEFuIGlubGluZSBKU09OL1lBTUwgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY29tcG9uZW50IGRhdGFcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUlubGluZShkYXRhOiBzdHJpbmcpOiBDb21wb25lbnREYXRhIHtcbiAgICByZXR1cm4gbmV3IElubGluZUNvbXBvbmVudERhdGEoZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlbmRlcmVkIGNvbXBvbmVudCBkYXRhIHZhbHVlLCBmb3IgdXNlIGluIENsb3VkRm9ybWF0aW9uLlxuICAgKiAtIEZvciBpbmxpbmUgY29tcG9uZW50cywgZGF0YSBpcyB0aGUgY29tcG9uZW50IHRleHRcbiAgICogLSBGb3IgUzMtYmFja2VkIGNvbXBvbmVudHMsIHVyaSBpcyB0aGUgUzMgVVJMXG4gICAqL1xuICBhYnN0cmFjdCByZW5kZXIoKTogQ29tcG9uZW50RGF0YUNvbmZpZztcbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIFMzLWJhc2VkIGNvbXBvbmVudCBkYXRhIHJlZmVyZW5jZXMsIGNvbnRhaW5pbmcgYWRkaXRpb25hbCBwZXJtaXNzaW9uIGdyYW50IG1ldGhvZHMgb24gdGhlIFMzIG9iamVjdFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUzNDb21wb25lbnREYXRhIGV4dGVuZHMgQ29tcG9uZW50RGF0YSB7XG4gIHByb3RlY3RlZCByZWFkb25seSBidWNrZXQ6IHMzLklCdWNrZXQ7XG4gIHByb3RlY3RlZCByZWFkb25seSBrZXk6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoYnVja2V0OiBzMy5JQnVja2V0LCBrZXk6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmJ1Y2tldCA9IGJ1Y2tldDtcbiAgICB0aGlzLmtleSA9IGtleTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVuZGVyZWQgY29tcG9uZW50IGRhdGEgdGV4dCwgZm9yIHVzZSBpbiBDbG91ZEZvcm1hdGlvblxuICAgKi9cbiAgcHVibGljIHJlbmRlcigpOiBDb21wb25lbnREYXRhQ29uZmlnIHtcbiAgICByZXR1cm4geyB1cmk6IHRoaXMuYnVja2V0LnMzVXJsRm9yT2JqZWN0KHRoaXMua2V5KSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHB1dCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGNvbXBvbmVudCBkYXRhIGluIFMzXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRQdXQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldC5ncmFudFB1dChncmFudGVlLCB0aGlzLmtleSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGNvbXBvbmVudCBkYXRhIGluIFMzXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQuZ3JhbnRSZWFkKGdyYW50ZWUsIHRoaXMua2V5KTtcbiAgfVxufVxuXG5jbGFzcyBJbmxpbmVDb21wb25lbnREYXRhIGV4dGVuZHMgQ29tcG9uZW50RGF0YSB7XG4gIHByb3RlY3RlZCByZWFkb25seSBkYXRhOiBzdHJpbmc7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGRhdGE6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCBjb21wb25lbnQgZGF0YSB0ZXh0LCBmb3IgdXNlIGluIENsb3VkRm9ybWF0aW9uXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyKCk6IENvbXBvbmVudERhdGFDb25maWcge1xuICAgIHJldHVybiB7IGRhdGE6IHRoaXMuZGF0YSB9O1xuICB9XG59XG5cbmNsYXNzIFMzQ29tcG9uZW50RGF0YUZyb21CdWNrZXRLZXkgZXh0ZW5kcyBTM0NvbXBvbmVudERhdGEge1xuICBwdWJsaWMgY29uc3RydWN0b3IoYnVja2V0OiBzMy5JQnVja2V0LCBrZXk6IHN0cmluZykge1xuICAgIHN1cGVyKGJ1Y2tldCwga2V5KTtcbiAgfVxufVxuXG5jbGFzcyBTM0NvbXBvbmVudERhdGFGcm9tQXNzZXQgZXh0ZW5kcyBTM0NvbXBvbmVudERhdGEge1xuICBwdWJsaWMgY29uc3RydWN0b3IoYXNzZXQ6IHMzYXNzZXRzLkFzc2V0KSB7XG4gICAgc3VwZXIoYXNzZXQuYnVja2V0LCBhc3NldC5zM09iamVjdEtleSk7XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIHdvcmtpbmcgd2l0aCBBV1MgTWFya2V0cGxhY2UgY29tcG9uZW50c1xuICovXG5leHBvcnQgY2xhc3MgQXdzTWFya2V0cGxhY2VDb21wb25lbnQge1xuICAvKipcbiAgICogSW1wb3J0cyBhbiBBV1MgTWFya2V0cGxhY2UgY29tcG9uZW50IGZyb20gaXRzIGF0dHJpYnV0ZXNcbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIElkZW50aWZpZXIgb2YgdGhlIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gYXR0cnMgVGhlIEFXUy1tYW5hZ2VkIGNvbXBvbmVudCBhdHRyaWJ1dGVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Bd3NNYXJrZXRwbGFjZUNvbXBvbmVudEF0dHJpYnV0ZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGF0dHJzOiBBd3NNYXJrZXRwbGFjZUNvbXBvbmVudEF0dHJpYnV0ZXMsXG4gICk6IElDb21wb25lbnQge1xuICAgIHJldHVybiBDb21wb25lbnQuZnJvbUNvbXBvbmVudEFybihcbiAgICAgIHNjb3BlLFxuICAgICAgaWQsXG4gICAgICBjZGsuU3RhY2sub2Yoc2NvcGUpLmZvcm1hdEFybih7XG4gICAgICAgIHNlcnZpY2U6ICdpbWFnZWJ1aWxkZXInLFxuICAgICAgICBhY2NvdW50OiAnYXdzLW1hcmtldHBsYWNlJyxcbiAgICAgICAgcmVzb3VyY2U6ICdjb21wb25lbnQnLFxuICAgICAgICByZXNvdXJjZU5hbWU6IGAke2F0dHJzLmNvbXBvbmVudE5hbWV9LSR7YXR0cnMubWFya2V0cGxhY2VQcm9kdWN0SWR9LyR7YXR0cnMuY29tcG9uZW50VmVyc2lvbiA/PyBMQVRFU1RfVkVSU0lPTn1gLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgbmV3IG9yIGltcG9ydGVkIENvbXBvbmVudFxuICovXG5hYnN0cmFjdCBjbGFzcyBDb21wb25lbnRCYXNlIGV4dGVuZHMgY2RrLlJlc291cmNlIGltcGxlbWVudHMgSUNvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb21wb25lbnRcbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGNvbXBvbmVudEFybjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgY29tcG9uZW50TmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHcmFudCBjdXN0b20gYWN0aW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGNvbXBvbmVudFxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgbGlzdCBvZiBhY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgZ3JhbnQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWUsXG4gICAgICBhY3Rpb25zLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbdGhpcy5jb21wb25lbnRBcm5dLFxuICAgICAgc2NvcGU6IHRoaXMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKi9cbiAgcHVibGljIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoZ3JhbnRlZSwgJ2ltYWdlYnVpbGRlcjpHZXRDb21wb25lbnQnKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gRUMyIEltYWdlIEJ1aWxkZXIgQ29tcG9uZW50LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL21hbmFnZS1jb21wb25lbnRzLmh0bWxcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2Uge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1pbWFnZWJ1aWxkZXItYWxwaGEuQ29tcG9uZW50JztcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGNvbXBvbmVudCBnaXZlbiBpdHMgQVJOLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ29tcG9uZW50QXJuKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNvbXBvbmVudEFybjogc3RyaW5nKTogSUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUNvbXBvbmVudEF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7IGNvbXBvbmVudEFybiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgY29tcG9uZW50IGdpdmVuIGl0cyBuYW1lLiBUaGUgcHJvdmlkZWQgbmFtZSBtdXN0IGJlIG5vcm1hbGl6ZWQgYnkgY29udmVydGluZyBhbGwgYWxwaGFiZXRpY2FsXG4gICAqIGNoYXJhY3RlcnMgdG8gbG93ZXJjYXNlLCBhbmQgcmVwbGFjaW5nIGFsbCBzcGFjZXMgYW5kIHVuZGVyc2NvcmVzIHdpdGggaHlwaGVucy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNvbXBvbmVudE5hbWUoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgY29tcG9uZW50TmFtZTogc3RyaW5nKTogSUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUNvbXBvbmVudEF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7IGNvbXBvbmVudE5hbWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGNvbXBvbmVudCBieSBwcm92aWRpbmcgaXRzIGF0dHJpYnV0ZXMuIElmIHRoZSBjb21wb25lbnQgbmFtZSBpcyBwcm92aWRlZCBhcyBhbiBhdHRyaWJ1dGUsIGl0XG4gICAqIG11c3QgYmUgbm9ybWFsaXplZCBieSBjb252ZXJ0aW5nIGFsbCBhbHBoYWJldGljYWwgY2hhcmFjdGVycyB0byBsb3dlcmNhc2UsIGFuZCByZXBsYWNpbmcgYWxsIHNwYWNlcyBhbmQgdW5kZXJzY29yZXNcbiAgICogd2l0aCBoeXBoZW5zLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ29tcG9uZW50QXR0cmlidXRlcyhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhdHRyczogQ29tcG9uZW50QXR0cmlidXRlcyk6IElDb21wb25lbnQge1xuICAgIGlmIChhdHRycy5jb21wb25lbnRBcm4gJiYgKGF0dHJzLmNvbXBvbmVudE5hbWUgfHwgYXR0cnMuY29tcG9uZW50VmVyc2lvbikpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBsaXRgQ29uZmxpY3RpbmdDb21wb25lbnRBdHRyaWJ1dGVzYCxcbiAgICAgICAgJ2EgY29tcG9uZW50TmFtZSBvciBjb21wb25lbnRWZXJzaW9uIGNhbm5vdCBiZSBwcm92aWRlZCB3aGVuIGEgY29tcG9uZW50QXJuIGlzIHByb3ZpZGVkJyxcbiAgICAgICAgc2NvcGUsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghYXR0cnMuY29tcG9uZW50QXJuICYmICFhdHRycy5jb21wb25lbnROYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihsaXRgTWlzc2luZ0NvbXBvbmVudElkZW50aWZpZXJgLCAnZWl0aGVyIGNvbXBvbmVudEFybiBvciBjb21wb25lbnROYW1lIGlzIHJlcXVpcmVkJywgc2NvcGUpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBvbmVudEFybiA9XG4gICAgICBhdHRycy5jb21wb25lbnRBcm4gPz9cbiAgICAgIGNkay5TdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICAgIHJlc291cmNlOiAnY29tcG9uZW50JyxcbiAgICAgICAgcmVzb3VyY2VOYW1lOiBgJHthdHRycy5jb21wb25lbnROYW1lfS8ke2F0dHJzLmNvbXBvbmVudFZlcnNpb24gPz8gTEFURVNUX1ZFUlNJT059YCxcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgW2NvbXBvbmVudE5hbWUsIGNvbXBvbmVudFZlcnNpb25dID0gKCgpID0+IHtcbiAgICAgIGlmIChhdHRycy5jb21wb25lbnROYW1lKSB7XG4gICAgICAgIHJldHVybiBbYXR0cnMuY29tcG9uZW50TmFtZSwgYXR0cnMuY29tcG9uZW50VmVyc2lvbiA/PyBMQVRFU1RfVkVSU0lPTl07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWVWZXJzaW9uID0gY2RrLlN0YWNrLm9mKHNjb3BlKS5zcGxpdEFybihcbiAgICAgICAgY29tcG9uZW50QXJuLFxuICAgICAgICBjZGsuQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUsXG4gICAgICApLnJlc291cmNlTmFtZSE7XG5cbiAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWVWZXJzaW9uU3BsaXQgPSBjZGsuRm4uc3BsaXQoJy8nLCBjb21wb25lbnROYW1lVmVyc2lvbik7XG4gICAgICByZXR1cm4gW2Nkay5Gbi5zZWxlY3QoMCwgY29tcG9uZW50TmFtZVZlcnNpb25TcGxpdCksIGNkay5Gbi5zZWxlY3QoMSwgY29tcG9uZW50TmFtZVZlcnNpb25TcGxpdCldO1xuICAgIH0pKCk7XG5cbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjb21wb25lbnRBcm4gPSBjb21wb25lbnRBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbiA9IGNvbXBvbmVudFZlcnNpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGEgQ29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpc0NvbXBvbmVudCh4OiBhbnkpOiB4IGlzIENvbXBvbmVudCB7XG4gICAgcmV0dXJuIHggIT09IG51bGwgJiYgdHlwZW9mIHggPT09ICdvYmplY3QnICYmIENPTVBPTkVOVF9TWU1CT0wgaW4geDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjb21wb25lbnQgaXMgZW5jcnlwdGVkXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZW5jcnlwdGVkOiBib29sZWFuO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcbiAgcHJpdmF0ZSByZXNvdXJjZTogQ2ZuQ29tcG9uZW50O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTpcbiAgICAgICAgcHJvcHMuY29tcG9uZW50TmFtZSA/P1xuICAgICAgICBjZGsuTGF6eS5zdHJpbmcoe1xuICAgICAgICAgIHByb2R1Y2U6ICgpID0+XG4gICAgICAgICAgICBjZGsuTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHtcbiAgICAgICAgICAgICAgbWF4TGVuZ3RoOiAxMjgsXG4gICAgICAgICAgICAgIHNlcGFyYXRvcjogJy0nLFxuICAgICAgICAgICAgICBhbGxvd2VkU3BlY2lhbENoYXJhY3RlcnM6ICctJyxcbiAgICAgICAgICAgIH0pLnRvTG93ZXJDYXNlKCksIC8vIEVuZm9yY2UgbG93ZXJjYXNlIGZvciB0aGUgYXV0by1nZW5lcmF0ZWQgZmFsbGJhY2tcbiAgICAgICAgfSksXG4gICAgfSk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgQ09NUE9ORU5UX1NZTUJPTCwgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMudmFsaWRhdGVDb21wb25lbnROYW1lKCk7XG5cbiAgICBwcm9wcy5zdXBwb3J0ZWRPc1ZlcnNpb25zPy5mb3JFYWNoKChvc1ZlcnNpb24pID0+IHtcbiAgICAgIGlmIChvc1ZlcnNpb24ucGxhdGZvcm0gIT09IHByb3BzLnBsYXRmb3JtKSB7XG4gICAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGxpdGBJbmNvbXBhdGlibGVPc1ZlcnNpb25gLFxuICAgICAgICAgIGBvcyB2ZXJzaW9uICR7b3NWZXJzaW9uLm9zVmVyc2lvbn0gaXMgbm90IGNvbXBhdGlibGUgd2l0aCBwbGF0Zm9ybSAke3Byb3BzLnBsYXRmb3JtfWAsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbXBvbmVudFZlcnNpb24gPSBwcm9wcy5jb21wb25lbnRWZXJzaW9uID8/ICcxLjAuMCc7XG4gICAgY29uc3Qgc3VwcG9ydGVkT3NWZXJzaW9ucyA9IHByb3BzLnN1cHBvcnRlZE9zVmVyc2lvbnM/LmZpbHRlcigob3NWZXJzaW9uKSA9PiBvc1ZlcnNpb24ub3NWZXJzaW9uICE9PSB1bmRlZmluZWQpO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBDZm5Db21wb25lbnQodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgICB2ZXJzaW9uOiBjb21wb25lbnRWZXJzaW9uLFxuICAgICAgY2hhbmdlRGVzY3JpcHRpb246IHByb3BzLmNoYW5nZURlc2NyaXB0aW9uLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgcGxhdGZvcm06IHByb3BzLnBsYXRmb3JtLFxuICAgICAga21zS2V5SWQ6IHByb3BzLmttc0tleT8ua2V5QXJuLFxuICAgICAgdGFnczogcHJvcHMudGFncyxcbiAgICAgIC4uLihzdXBwb3J0ZWRPc1ZlcnNpb25zPy5sZW5ndGggJiYge1xuICAgICAgICBzdXBwb3J0ZWRPc1ZlcnNpb25zOiBzdXBwb3J0ZWRPc1ZlcnNpb25zLm1hcCgob3NWZXJzaW9uKSA9PiBvc1ZlcnNpb24ub3NWZXJzaW9uISksXG4gICAgICB9KSxcbiAgICAgIC4uLnByb3BzLmRhdGEucmVuZGVyKCksXG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbXBvbmVudFZlcnNpb24gPSBjb21wb25lbnRWZXJzaW9uO1xuICAgIHRoaXMuZW5jcnlwdGVkID0gdHJ1ZTsgLy8gQ29tcG9uZW50cyBhcmUgYWx3YXlzIGVuY3J5cHRlZFxuICAgIHRoaXMua21zS2V5ID0gcHJvcHMua21zS2V5O1xuICB9XG5cbiAgQG1lbW9pemVkR2V0dGVyXG4gIHB1YmxpYyBnZXQgY29tcG9uZW50TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlTmFtZUF0dHJpYnV0ZSh0aGlzLnJlc291cmNlLmF0dHJOYW1lKTtcbiAgfVxuXG4gIEBtZW1vaXplZEdldHRlclxuICBwdWJsaWMgZ2V0IGNvbXBvbmVudEFybigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlQXJuQXR0cmlidXRlKHRoaXMucmVzb3VyY2UuYXR0ckFybiwge1xuICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICByZXNvdXJjZTogJ2NvbXBvbmVudCcsXG4gICAgICByZXNvdXJjZU5hbWU6IGAke3RoaXMucGh5c2ljYWxOYW1lfS8ke3RoaXMuY29tcG9uZW50VmVyc2lvbn1gLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgQG1lbW9pemVkR2V0dGVyXG4gIHB1YmxpYyBnZXQgY29tcG9uZW50VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlLmF0dHJUeXBlO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUNvbXBvbmVudE5hbWUoKSB7XG4gICAgaWYgKGNkay5Ub2tlbi5pc1VucmVzb2x2ZWQodGhpcy5waHlzaWNhbE5hbWUpKSB7XG4gICAgICByZXR1cm47IC8vIENhbm5vdCB2YWxpZGF0ZSB1bnJlc29sdmVkIHRva2VucywgZ2l2ZW4gdGhlaXIgYWN0dWFsIHZhbHVlIGlzIHJlbmRlcmVkIGF0IGRlcGxveW1lbnQgdGltZVxuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZS5sZW5ndGggPiAxMjgpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBsaXRgQ29tcG9uZW50TmFtZVRvb0xvbmdgLFxuICAgICAgICBgdGhlIGNvbXBvbmVudE5hbWUgY2Fubm90IGJlIGxvbmdlciB0aGFuIDEyOCBjaGFyYWN0ZXJzLCBnb3Q6ICcke3RoaXMucGh5c2ljYWxOYW1lfSdgLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNhbE5hbWUuaW5jbHVkZXMoJyAnKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IobGl0YENvbXBvbmVudE5hbWVDb250YWluc1NwYWNlc2AsIGB0aGUgY29tcG9uZW50TmFtZSBjYW5ub3QgY29udGFpbiBzcGFjZXMsIGdvdDogJyR7dGhpcy5waHlzaWNhbE5hbWV9J2AsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZS5pbmNsdWRlcygnXycpKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihsaXRgQ29tcG9uZW50TmFtZUNvbnRhaW5zVW5kZXJzY29yZXNgLCBgdGhlIGNvbXBvbmVudE5hbWUgY2Fubm90IGNvbnRhaW4gdW5kZXJzY29yZXMsIGdvdDogJyR7dGhpcy5waHlzaWNhbE5hbWV9J2AsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZSAhPT0gdGhpcy5waHlzaWNhbE5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IobGl0YENvbXBvbmVudE5hbWVOb3RMb3dlcmNhc2VgLCBgdGhlIGNvbXBvbmVudE5hbWUgbXVzdCBiZSBsb3dlcmNhc2UsIGdvdDogJyR7dGhpcy5waHlzaWNhbE5hbWV9J2AsIHRoaXMpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
754
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUFtQztBQUNuQyx5REFBMkM7QUFDM0MsbUVBQTREO0FBRzVELG9FQUFzRDtBQUN0RCw0RUFBNEU7QUFDNUUsOEVBQThFO0FBQzlFLDBFQUEwRTtBQUUxRSwyQ0FBNkI7QUFHN0IsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7QUFFakYsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDO0FBK1QvQjs7R0FFRztBQUNILE1BQWEsc0JBQXNCOztJQUNqQzs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFhO1FBQ3BDLE9BQU8sSUFBSSxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDcEQ7SUFFRDs7T0FFRztJQUNhLElBQUksQ0FBUztJQUU3Qjs7T0FFRztJQUNhLEtBQUssQ0FBTTtJQUUzQixZQUFzQixJQUFZLEVBQUUsS0FBVTtRQUM1QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztLQUNwQjs7QUF2Qkgsd0RBd0JDO0FBMEJEOztHQUVHO0FBQ0gsSUFBWSxlQXdKWDtBQXhKRCxXQUFZLGVBQWU7SUFDekI7O09BRUc7SUFDSCw2Q0FBMEIsQ0FBQTtJQUUxQjs7O09BR0c7SUFDSCxvQ0FBaUIsQ0FBQTtJQUVqQjs7T0FFRztJQUNILHlDQUFzQixDQUFBO0lBRXRCOztPQUVHO0lBQ0gsNkNBQTBCLENBQUE7SUFFMUI7O09BRUc7SUFDSCw2Q0FBMEIsQ0FBQTtJQUUxQjs7T0FFRztJQUNILGlEQUE4QixDQUFBO0lBRTlCOztP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O1lBQzFJLENBQUM7U0FDRjs7WUE1TFUsdURBQVM7Ozs7O0FBQVQsOEJBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgQ2ZuQ29tcG9uZW50IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWltYWdlYnVpbGRlcic7XG5pbXBvcnQgdHlwZSAqIGFzIGttcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB0eXBlICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCAqIGFzIHMzYXNzZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1hc3NldHMnO1xuaW1wb3J0IHsgbWVtb2l6ZWRHZXR0ZXIsIGxpdCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSAneWFtbCc7XG5pbXBvcnQgdHlwZSB7IE9TVmVyc2lvbiwgUGxhdGZvcm0gfSBmcm9tICcuL29zLXZlcnNpb24nO1xuXG5jb25zdCBDT01QT05FTlRfU1lNQk9MID0gU3ltYm9sLmZvcignQGF3cy1jZGsvYXdzLWltYWdlYnVpbGRlci1hbHBoYS5Db21wb25lbnQnKTtcblxuY29uc3QgTEFURVNUX1ZFUlNJT04gPSAneC54LngnO1xuXG4vKipcbiAqIEFuIEVDMiBJbWFnZSBCdWlsZGVyIENvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ29tcG9uZW50IGV4dGVuZHMgY2RrLklSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudFZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogR3JhbnQgY3VzdG9tIGFjdGlvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgbGlzdCBvZiBhY3Rpb25zXG4gICAqL1xuICBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQ7XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKi9cbiAgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNyZWF0aW5nIGEgQ29tcG9uZW50IHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50UHJvcHMge1xuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCBkb2N1bWVudCBjb250ZW50IHRoYXQgZGVmaW5lcyB0aGUgYnVpbGQsIHZhbGlkYXRpb24sIG9yIHRlc3Qgc3RlcHMgdG8gYmUgZXhlY3V0ZWQgZHVyaW5nIHRoZSBpbWFnZVxuICAgKiBidWlsZGluZyBwcm9jZXNzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YTogQ29tcG9uZW50RGF0YTtcblxuICAvKipcbiAgICogVGhlIG9wZXJhdGluZyBzeXN0ZW0gcGxhdGZvcm0gb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtOiBQbGF0Zm9ybTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIG5hbWUgaXMgZ2VuZXJhdGVkXG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAxLjAuMFxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY2hhbmdlIGRlc2NyaXB0aW9uIG9mIHRoZSBjb21wb25lbnQuIERlc2NyaWJlcyB3aGF0IGNoYW5nZSBoYXMgYmVlbiBtYWRlIGluIHRoaXMgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50LCBvclxuICAgKiB3aGF0IG1ha2VzIHRoaXMgdmVyc2lvbiBkaWZmZXJlbnQgZnJvbSBvdGhlciB2ZXJzaW9ucy5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbmdlRGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBLTVMga2V5IHVzZWQgdG8gZW5jcnlwdCB0aGlzIGNvbXBvbmVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhbiBJbWFnZSBCdWlsZGVyIG93bmVkIGtleSB3aWxsIGJlIHVzZWQgdG8gZW5jcnlwdCB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgcmVhZG9ubHkga21zS2V5Pzoga21zLklLZXk7XG5cbiAgLyoqXG4gICAqIFRoZSBvcGVyYXRpbmcgc3lzdGVtIHZlcnNpb25zIHN1cHBvcnRlZCBieSB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBzdXBwb3J0ZWRPc1ZlcnNpb25zPzogT1NWZXJzaW9uW107XG5cbiAgLyoqXG4gICAqIFRoZSB0YWdzIHRvIGFwcGx5IHRvIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYW4gRUMyIEltYWdlIEJ1aWxkZXIgY29tcG9uZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50QXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgQVJOIGlzIGF1dG9tYXRpY2FsbHkgY29uc3RydWN0ZWQgaWYgYSBjb21wb25lbnROYW1lIGlzIHByb3ZpZGVkLCBvdGhlcndpc2UgYSBjb21wb25lbnRBcm4gaXNcbiAgICogICAgICAgICAgICByZXF1aXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50QXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIG5hbWUgaXMgYXV0b21hdGljYWxseSBjb25zdHJ1Y3RlZCBpZiBhIGNvbXBvbmVudEFybiBpcyBwcm92aWRlZCwgb3RoZXJ3aXNlIGEgY29tcG9uZW50TmFtZSBpc1xuICAgKiAgICAgICAgICAgIHJlcXVpcmVkXG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBjb21wb25lbnQsIHgueC54XG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnRWZXJzaW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGFuIEVDMiBJbWFnZSBCdWlsZGVyIEFXUyBNYXJrZXRwbGFjZSBjb21wb25lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBd3NNYXJrZXRwbGFjZUNvbXBvbmVudEF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIEFXUyBNYXJrZXRwbGFjZSBjb21wb25lbnQuIFRoaXMgbmFtZSBzaG91bGQgZXhjbHVkZSB0aGUgbWFya2V0cGxhY2UgcHJvZHVjdCBJRCBmcm9tIGl0XG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXJrZXRwbGFjZSBwcm9kdWN0IElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29tcG9uZW50XG4gICAqL1xuICByZWFkb25seSBtYXJrZXRwbGFjZVByb2R1Y3RJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgQVdTIE1hcmtldHBsYWNlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50LCB4LngueFxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIG9mIGFuIEVDMiBJbWFnZSBCdWlsZGVyIENvbXBvbmVudCBEb2N1bWVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERvY3VtZW50IHtcbiAgLyoqXG4gICAqIFRoZSBzY2hlbWEgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50XG4gICAqL1xuICByZWFkb25seSBzY2hlbWFWZXJzaW9uOiBDb21wb25lbnRTY2hlbWFWZXJzaW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgcGhhc2VzIHdoaWNoIGRlZmluZSB0aGUgZ3JvdXBpbmcgb2Ygc3RlcHMgdG8gcnVuIGluIHRoZSBidWlsZCBhbmQgdGVzdCB3b3JrZmxvd3Mgb2YgdGhlIGltYWdlIGJ1aWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGhhc2VzOiBDb21wb25lbnREb2N1bWVudFBoYXNlW107XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBkb2N1bWVudFxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGRvY3VtZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uc3RhbnRzIHRvIGRlZmluZSBpbiB0aGUgZG9jdW1lbnRcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgY29uc3RhbnRzPzogeyBbY29uc3RhbnROYW1lOiBzdHJpbmddOiBDb21wb25lbnRDb25zdGFudFZhbHVlIH07XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXJzIHRvIGRlZmluZSBpbiB0aGUgZG9jdW1lbnRcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgcGFyYW1ldGVycz86IHsgW3BhcmFtZXRlck5hbWU6IHN0cmluZ106IENvbXBvbmVudERvY3VtZW50UGFyYW1ldGVyRGVmaW5pdGlvbiB9O1xufVxuXG4vKipcbiAqIFRoZSBwaGFzZSB0byBydW4gaW4gYSBzcGVjaWZpYyB3b3JrZmxvdyBpbiBhbiBpbWFnZSBidWlsZCwgd2hpY2ggZGVmaW5lIHRoZSBzdGVwcyB0byBleGVjdXRlIHRvIGN1c3RvbWl6ZSBvciB0ZXN0XG4gKiB0aGUgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RG9jdW1lbnRQaGFzZSB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcGhhc2VcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IENvbXBvbmVudFBoYXNlTmFtZTtcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2Ygc3RlcHMgdG8gZXhlY3V0ZSB0byBtb2RpZnkgb3IgdGVzdCB0aGUgYnVpbGQvdGVzdCBpbnN0YW5jZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RlcHM6IENvbXBvbmVudERvY3VtZW50U3RlcFtdO1xufVxuXG4vKipcbiAqIFRoZSBzdGVwIHRvIHJ1biBpbiBhIHNwZWNpZmljIHBoYXNlIG9mIHRoZSBpbWFnZSBidWlsZCwgd2hpY2ggZGVmaW5lcyB0aGUgc3RlcCB0byBleGVjdXRlIHRvIGN1c3RvbWl6ZSBvciB0ZXN0IHRoZVxuICogaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RG9jdW1lbnRTdGVwIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzdGVwXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhY3Rpb24gdG8gcGVyZm9ybSBpbiB0aGUgc3RlcFxuICAgKi9cbiAgcmVhZG9ubHkgYWN0aW9uOiBDb21wb25lbnRBY3Rpb247XG5cbiAgLyoqXG4gICAqIENvbnRhaW5zIHBhcmFtZXRlcnMgcmVxdWlyZWQgYnkgdGhlIGFjdGlvbiB0byBydW4gdGhlIHN0ZXBcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvdG9lLWFjdGlvbi1tb2R1bGVzLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IGlucHV0czogQ29tcG9uZW50U3RlcElucHV0cztcblxuICAvKipcbiAgICogVGhlIGNvbmRpdGlvbiB0byBhcHBseSB0byB0aGUgc3RlcC4gSWYgdGhlIGNvbmRpdGlvbiBpcyBmYWxzZSwgdGhlbiB0aGUgc3RlcCBpcyBza2lwcGVkXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY29uZGl0aW9uIGlzIGFwcGxpZWQgdG8gdGhlIHN0ZXAgYW5kIGl0IGdldHMgZXhlY3V0ZWRcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvdG9lLWNvbmRpdGlvbmFsLWNvbnN0cnVjdHMuaHRtbFxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS90b2UtY29tcGFyaXNvbi1vcGVyYXRvcnMuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgaWY/OiBDb21wb25lbnRTdGVwSWZDb25kaXRpb247XG5cbiAgLyoqXG4gICAqIEEgbG9vcGluZyBjb25zdHJ1Y3QgZGVmaW5pbmcgYSByZXBlYXRlZCBzZXF1ZW5jZSBvZiBpbnN0cnVjdGlvbnNcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9vcD86IENvbXBvbmVudERvY3VtZW50TG9vcDtcblxuICAvKipcbiAgICogVGhlIHRpbWVvdXQgb2YgdGhlIHN0ZXBcbiAgICpcbiAgICogQGRlZmF1bHQgLSAxMjAgbWludXRlc1xuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IGNkay5EdXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoYXQgdGhlIHN0ZXAgc2hvdWxkIGRvIGluIGNhc2Ugb2YgZmFpbHVyZVxuICAgKlxuICAgKiBAZGVmYXVsdCBDb21wb25lbnRPbkZhaWx1cmUuQUJPUlRcbiAgICovXG4gIHJlYWRvbmx5IG9uRmFpbHVyZT86IENvbXBvbmVudE9uRmFpbHVyZTtcbn1cblxuLyoqXG4gKiBUaGUgbG9vcGluZyBjb25zdHJ1Y3Qgb2YgYSBjb21wb25lbnQgZGVmaW5lcyBhIHJlcGVhdGVkIHNlcXVlbmNlIG9mIGluc3RydWN0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERvY3VtZW50TG9vcCB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgbG9vcCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcmVmZXJlbmNlXG4gICAqXG4gICAqIEBkZWZhdWx0IGxvb3BcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmb3IgbG9vcCBpdGVyYXRlcyBvbiBhIHJhbmdlIG9mIGludGVnZXJzIHNwZWNpZmllZCB3aXRoaW4gYSBib3VuZGFyeSBvdXRsaW5lZCBieSB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGVcbiAgICogdmFyaWFibGVzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9uZSBpZiBgZm9yRWFjaGAgaXMgcHJvdmlkZWQuIG90aGVyd2lzZSwgYGZvcmAgaXMgcmVxdWlyZWQuXG4gICAqL1xuICByZWFkb25seSBmb3I/OiBDb21wb25lbnREb2N1bWVudEZvckxvb3A7XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JFYWNoIGxvb3AgaXRlcmF0ZXMgb24gYW4gZXhwbGljaXQgbGlzdCBvZiB2YWx1ZXMsIHdoaWNoIGNhbiBiZSBzdHJpbmdzIGFuZCBjaGFpbmVkIGV4cHJlc3Npb25zXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9uZSBpZiBgZm9yYCBpcyBwcm92aWRlZC4gb3RoZXJ3aXNlLCBgZm9yRWFjaGAgaXMgcmVxdWlyZWQuXG4gICAqL1xuICByZWFkb25seSBmb3JFYWNoPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIGZvciBsb29wIGl0ZXJhdGVzIG9uIGEgcmFuZ2Ugb2YgaW50ZWdlcnMgc3BlY2lmaWVkIHdpdGhpbiBhIGJvdW5kYXJ5IG91dGxpbmVkIGJ5IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZVxuICogdmFyaWFibGVzLiBUaGUgaXRlcmF0aW5nIHZhbHVlcyBhcmUgaW4gdGhlIHNldCBbc3RhcnQsIGVuZF0gYW5kIGluY2x1ZGVzIGJvdW5kYXJ5IHZhbHVlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnREb2N1bWVudEZvckxvb3Age1xuICAvKipcbiAgICogU3RhcnRpbmcgdmFsdWUgb2YgaXRlcmF0aW9uLiBEb2VzIG5vdCBhY2NlcHQgY2hhaW5pbmcgZXhwcmVzc2lvbnMuXG4gICAqL1xuICByZWFkb25seSBzdGFydDogbnVtYmVyO1xuICAvKipcbiAgICogRW5kaW5nIHZhbHVlIG9mIGl0ZXJhdGlvbi4gRG9lcyBub3QgYWNjZXB0IGNoYWluaW5nIGV4cHJlc3Npb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5kOiBudW1iZXI7XG4gIC8qKlxuICAgKiBEaWZmZXJlbmNlIGJ5IHdoaWNoIGFuIGl0ZXJhdGluZyB2YWx1ZSBpcyB1cGRhdGVkIHRocm91Z2ggYWRkaXRpb24uIEl0IG11c3QgYmUgYSBuZWdhdGl2ZSBvciBwb3NpdGl2ZSBub24temVyb1xuICAgKiB2YWx1ZS4gRG9lcyBub3QgYWNjZXB0IGNoYWluaW5nIGV4cHJlc3Npb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgdXBkYXRlQnk6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgdmFsdWUgb2YgYSBjb25zdGFudCBpbiBhIGNvbXBvbmVudCBkb2N1bWVudFxuICovXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50Q29uc3RhbnRWYWx1ZSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgc3RyaW5nIHR5cGUgY29uc3RhbnQgaW4gYSBjb21wb25lbnQgZG9jdW1lbnRcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgY29uc3RhbnRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVN0cmluZyh2YWx1ZTogc3RyaW5nKTogQ29tcG9uZW50Q29uc3RhbnRWYWx1ZSB7XG4gICAgcmV0dXJuIG5ldyBDb21wb25lbnRDb25zdGFudFZhbHVlKCdzdHJpbmcnLCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGRhdGEgdHlwZSBvZiB0aGUgY29uc3RhbnRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0eXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgY29uc3RhbnRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogYW55O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcih0eXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBwYXJhbWV0ZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnREb2N1bWVudFBhcmFtZXRlckRlZmluaXRpb24ge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIHBhcmFtZXRlclxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogQ29tcG9uZW50UGFyYW1ldGVyVHlwZTtcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHBhcmFtZXRlclxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmUsIGluZGljYXRpbmcgdGhlIHBhcmFtZXRlciBpcyByZXF1aXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdD86IGFueTtcblxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXJhbWV0ZXJcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGFjdGlvbiBmb3IgYSBzdGVwIHdpdGhpbiB0aGUgY29tcG9uZW50IGRvY3VtZW50XG4gKi9cbmV4cG9ydCBlbnVtIENvbXBvbmVudEFjdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgQXBwZW5kRmlsZSBhY3Rpb24gYWRkcyB0aGUgcHJvdmlkZWQgY29udGVudCB0byB0aGUgcHJlLWV4aXN0aW5nIGNvbnRlbnQgb2YgYSBmaWxlXG4gICAqL1xuICBBUFBFTkRfRklMRSA9ICdBcHBlbmRGaWxlJyxcblxuICAvKipcbiAgICogVGhlIEFzc2VydCBhY3Rpb24gcGVyZm9ybXMgdmFsdWUgd2l0aCBjb21wYXJpc29uL2xvZ2ljIG9wZXJhdG9ycywgYW5kIHN1Y2NlZWRzL2ZhaWxzIHRoZSBzdGVwIGJhc2VkIG9uIHRoZSBvdXRjb21lXG4gICAqIG9mIHRoZSBhc3NlcnRpb25cbiAgICovXG4gIEFTU0VSVCA9ICdBc3NlcnQnLFxuXG4gIC8qKlxuICAgKiBUaGUgQ29weUZpbGUgYWN0aW9uIGNvcGllcyBmaWxlcyBmcm9tIGEgc291cmNlIGZpbGUgdG8gYSBkZXN0aW5hdGlvblxuICAgKi9cbiAgQ09QWV9GSUxFID0gJ0NvcHlGaWxlJyxcblxuICAvKipcbiAgICogVGhlIENvcHlGb2xkZXIgYWN0aW9uIGNvcGllcyBmb2xkZXJzIGZyb20gYSBzb3VyY2UgdG8gYSBkZXN0aW5hdGlvblxuICAgKi9cbiAgQ09QWV9GT0xERVIgPSAnQ29weUZvbGRlcicsXG5cbiAgLyoqXG4gICAqIFRoZSBDcmVhdGVGaWxlIGFjdGlvbiBjcmVhdGVzIGEgZmlsZSBpbiB0aGUgcHJvdmlkZWQgbG9jYXRpb25cbiAgICovXG4gIENSRUFURV9GSUxFID0gJ0NyZWF0ZUZpbGUnLFxuXG4gIC8qKlxuICAgKiBUaGUgQ3JlYXRlRm9sZGVyIGFjdGlvbiBjcmVhdGVzIGEgZm9sZGVyIGluIHRoZSBwcm92aWRlZCBsb2NhdGlvblxuICAgKi9cbiAgQ1JFQVRFX0ZPTERFUiA9ICdDcmVhdGVGb2xkZXInLFxuXG4gIC8qKlxuICAgKiBUaGUgQ3JlYXRlU3ltbGluayBhY3Rpb24gY3JlYXRlcyBzeW1ib2xpYyBsaW5rcyBmcm9tIGEgZ2l2ZW4gcGF0aCB0byBhIHRhcmdldFxuICAgKi9cbiAgQ1JFQVRFX1NZTUxJTksgPSAnQ3JlYXRlU3ltbGluaycsXG5cbiAgLyoqXG4gICAqIFRoZSBEZWxldGVGaWxlIGFjdGlvbiBkZWxldGVzIGZpbGUocykgaW4gdGhlIHByb3ZpZGVkIGxvY2F0aW9uXG4gICAqL1xuICBERUxFVEVfRklMRSA9ICdEZWxldGVGaWxlJyxcblxuICAvKipcbiAgICogVGhlIERlbGV0ZUZvbGRlciBhY3Rpb24gZGVsZXRlcyBmb2xkZXJzIGluIHRoZSBwcm92aWRlZCBsb2NhdGlvblxuICAgKi9cbiAgREVMRVRFX0ZPTERFUiA9ICdEZWxldGVGb2xkZXInLFxuXG4gIC8qKlxuICAgKiBUaGUgRXhlY3V0ZUJhc2ggYWN0aW9uIHJ1bnMgYmFzaCBzY3JpcHRzIHdpdGggaW5saW5lIGJhc2ggY29tbWFuZHNcbiAgICovXG4gIEVYRUNVVEVfQkFTSCA9ICdFeGVjdXRlQmFzaCcsXG5cbiAgLyoqXG4gICAqIFRoZSBFeGVjdXRlQmluYXJ5IGFjdGlvbiBydW5zIGEgcHJvdmlkZWQgYmluYXJ5IGV4ZWN1dGFibGVcbiAgICovXG4gIEVYRUNVVEVfQklOQVJZID0gJ0V4ZWN1dGVCaW5hcnknLFxuXG4gIC8qKlxuICAgKiBUaGUgRXhlY3V0ZURvY3VtZW50IGFjdGlvbiBhbGxvd3MgcnVubmluZyBvdGhlciBjb21wb25lbnQgZG9jdW1lbnRzIGZyb20gd2l0aGluIGEgZ2l2ZW4gY29tcG9uZW50XG4gICAqL1xuICBFWEVDVVRFX0RPQ1VNRU5UID0gJ0V4ZWN1dGVEb2N1bWVudCcsXG5cbiAgLyoqXG4gICAqIFRoZSBFeGVjdXRlUG93ZXJzaGVsbCBhY3Rpb24gcnVucyBQb3dlclNoZWxsIHNjcmlwdHMgd2l0aCBpbmxpbmUgUG93ZXJTaGVsbCBjb21tYW5kc1xuICAgKi9cbiAgRVhFQ1VURV9QT1dFUlNIRUxMID0gJ0V4ZWN1dGVQb3dlclNoZWxsJyxcblxuICAvKipcbiAgICogVGhlIEluc3RhbGxNU0kgYWN0aW9uIHJ1bnMgYSBXaW5kb3dzIGFwcGxpY2F0aW9uIHdpdGggdGhlIHByb3ZpZGVkIE1TSSBmaWxlXG4gICAqL1xuICBJTlNUQUxMX01TSSA9ICdJbnN0YWxsTVNJJyxcblxuICAvKipcbiAgICogVGhlIExpc3RGaWxlcyBhY3Rpb24gbGlzdHMgZmlsZXMgaW4gdGhlIHByb3ZpZGVkIGZvbGRlclxuICAgKi9cbiAgTElTVF9GSUxFUyA9ICdMaXN0RmlsZXMnLFxuXG4gIC8qKlxuICAgKiBUaGUgTW92ZUZpbGUgYWN0aW9uIG1vdmVzIGZpbGVzIGZyb20gYSBzb3VyY2UgdG8gYSBkZXN0aW5hdGlvblxuICAgKi9cbiAgTU9WRV9GSUxFID0gJ01vdmVGaWxlJyxcblxuICAvKipcbiAgICogVGhlIE1vdmVGb2xkZXIgYWN0aW9uIG1vdmVzIGZvbGRlcnMgZnJvbSBhIHNvdXJjZSB0byBhIGRlc3RpbmF0aW9uXG4gICAqL1xuICBNT1ZFX0ZPTERFUiA9ICdNb3ZlRm9sZGVyJyxcblxuICAvKipcbiAgICogVGhlIFJlYWRGaWxlIGFjdGlvbiByZWFkcyB0aGUgY29udGVudCBvZiBhIHRleHQgZmlsZVxuICAgKi9cbiAgUkVBRF9GSUxFID0gJ1JlYWRGaWxlJyxcblxuICAvKipcbiAgICogVGhlIFJlYm9vdCBhY3Rpb24gcmVib290cyB0aGUgaW5zdGFuY2VcbiAgICovXG4gIFJFQk9PVCA9ICdSZWJvb3QnLFxuXG4gIC8qKlxuICAgKiBUaGUgU2V0RmlsZUVuY29kaW5nIGFjdGlvbiBtb2RpZmllcyB0aGUgZW5jb2RpbmcgcHJvcGVydHkgb2YgYW4gZXhpc3RpbmcgZmlsZVxuICAgKi9cbiAgU0VUX0ZJTEVfRU5DT0RJTkcgPSAnU2V0RmlsZUVuY29kaW5nJyxcblxuICAvKipcbiAgICogVGhlIFNldEZpbGVPd25lciBhY3Rpb24gbW9kaWZpZXMgdGhlIG93bmVyIGFuZCBncm91cCBvd25lcnNoaXAgcHJvcGVydGllcyBvZiBhbiBleGlzdGluZyBmaWxlXG4gICAqL1xuICBTRVRfRklMRV9PV05FUiA9ICdTZXRGaWxlT3duZXInLFxuXG4gIC8qKlxuICAgKiBUaGUgU2V0Rm9sZGVyT3duZXIgYWN0aW9uIHJlY3Vyc2l2ZWx5IG1vZGlmaWVzIHRoZSBvd25lciBhbmQgZ3JvdXAgb3duZXJzaGlwIHByb3BlcnRpZXMgb2YgYW4gZXhpc3RpbmcgZm9sZGVyXG4gICAqL1xuICBTRVRfRk9MREVSX09XTkVSID0gJ1NldEZvbGRlck93bmVyJyxcblxuICAvKipcbiAgICogVGhlIFNldEZpbGVQZXJtaXNzaW9ucyBhY3Rpb24gbW9kaWZpZXMgdGhlIHBlcm1pc3Npb24gb2YgYW4gZXhpc3RpbmcgZmlsZVxuICAgKi9cbiAgU0VUX0ZJTEVfUEVSTUlTU0lPTlMgPSAnU2V0RmlsZVBlcm1pc3Npb25zJyxcblxuICAvKipcbiAgICogVGhlIFNldEZvbGRlclBlcm1pc3Npb25zIGFjdGlvbiByZWN1cnNpdmVseSBtb2RpZmllcyB0aGUgcGVybWlzc2lvbnMgb2YgYW4gZXhpc3RpbmcgZm9sZGVyIGFuZCBhbGwgb2YgaXRzIHN1YmZpbGVzXG4gICAqIGFuZCBzdWJmb2xkZXJzXG4gICAqL1xuICBTRVRfRk9MREVSX1BFUk1JU1NJT05TID0gJ1NldEZvbGRlclBlcm1pc3Npb25zJyxcblxuICAvKipcbiAgICogVGhlIFNldFJlZ2lzdHJ5IGFjdGlvbiBzZXRzIHRoZSB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBXaW5kb3dzIHJlZ2lzdHJ5IGtleVxuICAgKi9cbiAgU0VUX1JFR0lTVFJZID0gJ1NldFJlZ2lzdHJ5JyxcblxuICAvKipcbiAgICogVGhlIFMzRG93bmxvYWQgYWN0aW9uIGRvd25sb2FkcyBhbiBBbWF6b24gUzMgb2JqZWN0L2ZvbGRlciB0byBhIGxvY2FsIGRlc3RpbmF0aW9uXG4gICAqL1xuICBTM19ET1dOTE9BRCA9ICdTM0Rvd25sb2FkJyxcblxuICAvKipcbiAgICogVGhlIFMzVXBsb2FkIGFjdGlvbiB1cGxvYWRzIGEgZmlsZSBvciBmb2xkZXIgdG8gYW4gQW1hem9uIFMzIGxvY2F0aW9uXG4gICAqL1xuICBTM19VUExPQUQgPSAnUzNVcGxvYWQnLFxuXG4gIC8qKlxuICAgKiBUaGUgVW5pbnN0YWxsTVNJIGFjdGlvbiByZW1vdmVzIGEgV2luZG93cyBhcHBsaWNhdGlvbiB1c2luZyBhbiBNU0kgZmlsZVxuICAgKi9cbiAgVU5JTlNUQUxMX01TSSA9ICdVbmluc3RhbGxNU0knLFxuXG4gIC8qKlxuICAgKiBUaGUgVXBkYXRlT1MgYWN0aW9uIGluc3RhbGxzIE9TIHVwZGF0ZXNcbiAgICovXG4gIFVQREFURV9PUyA9ICdVcGRhdGVPUycsXG5cbiAgLyoqXG4gICAqIFRoZSBXZWJEb3dubG9hZCBhY3Rpb24gZG93bmxvYWRzIGZpbGVzIGZyb20gYSBVUkwgdG8gYSBsb2NhbCBkZXN0aW5hdGlvblxuICAgKi9cbiAgV0VCX0RPV05MT0FEID0gJ1dlYkRvd25sb2FkJyxcbn1cblxuLyoqXG4gKiBTcGVjaWZpZXMgd2hhdCB0aGUgc3RlcCBzaG91bGQgZG8gaW4gY2FzZSBvZiBmYWlsdXJlXG4gKi9cbmV4cG9ydCBlbnVtIENvbXBvbmVudE9uRmFpbHVyZSB7XG4gIC8qKlxuICAgKiBGYWlscyB0aGUgc3RlcCBhbmQgZG9jdW1lbnQgZXhlY3V0aW9uXG4gICAqL1xuICBBQk9SVCA9ICdBYm9ydCcsXG5cbiAgLyoqXG4gICAqIEZhaWxzIHRoZSBzdGVwIGFuZCBwcm9jZWVkcyB0byBleGVjdXRlIHRoZSBuZXh0IHN0ZXAgaW4gdGhlIGRvY3VtZW50XG4gICAqL1xuICBDT05USU5VRSA9ICdDb250aW51ZScsXG5cbiAgLyoqXG4gICAqIElnbm9yZXMgdGhlIHN0ZXAgYW5kIHByb2NlZWRzIHRvIGV4ZWN1dGUgdGhlIG5leHQgc3RlcCBpbiB0aGUgZG9jdW1lbnRcbiAgICovXG4gIElHTk9SRSA9ICdJZ25vcmUnLFxufVxuXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXIgdHlwZSBpbiBhIGNvbXBvbmVudCBkb2N1bWVudFxuICovXG5leHBvcnQgZW51bSBDb21wb25lbnRQYXJhbWV0ZXJUeXBlIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgcGFyYW1ldGVyIHZhbHVlIGlzIGEgc3RyaW5nXG4gICAqL1xuICBTVFJJTkcgPSAnc3RyaW5nJyxcbn1cblxuLyoqXG4gKiBUaGUgcGhhc2VzIG9mIGEgY29tcG9uZW50IGRvY3VtZW50XG4gKi9cbmV4cG9ydCBlbnVtIENvbXBvbmVudFBoYXNlTmFtZSB7XG4gIC8qKlxuICAgKiBCdWlsZCBwaGFzZSBvZiB0aGUgY29tcG9uZW50LiBUaGlzIHBoYXNlIGlzIHJ1biBkdXJpbmcgdGhlIEJVSUxESU5HIHBoYXNlIG9mIHRoZSBpbWFnZSBidWlsZC5cbiAgICovXG4gIEJVSUxEID0gJ2J1aWxkJyxcblxuICAvKipcbiAgICogVGVzdCBwaGFzZSBvZiB0aGUgY29tcG9uZW50LCBleGVjdXRlZCBkaXJlY3RseSBvbiB0aGUgaW5zdGFuY2Ugd2hpY2ggaXMgdXNlZCB0byBidWlsZCB0aGUgY29udGFpbmVyIGltYWdlLiBUaGlzXG4gICAqIHBoYXNlIGlzIHJ1biBkdXJpbmcgdGhlIFRFU1RJTkcgcGhhc2Ugb2YgdGhlIGltYWdlIGJ1aWxkLlxuICAgKi9cbiAgQ09OVEFJTkVSX0hPU1RfVEVTVCA9ICdjb250YWluZXItaG9zdC10ZXN0JyxcblxuICAvKipcbiAgICogVGVzdCBwaGFzZSBvZiB0aGUgY29tcG9uZW50LiBUaGlzIHBoYXNlIGlzIHJ1biBkdXJpbmcgdGhlIFRFU1RJTkcgcGhhc2Ugb2YgdGhlIGltYWdlIGJ1aWxkLlxuICAgKi9cbiAgVEVTVCA9ICd0ZXN0JyxcblxuICAvKipcbiAgICogVmFsaWRhdGUgcGhhc2Ugb2YgdGhlIGNvbXBvbmVudC4gVGhpcyBwaGFzZSBpcyBydW4gZHVyaW5nIHRoZSBCVUlMRElORyBwaGFzZSBvZiB0aGUgaW1hZ2UgYnVpbGQsIGFmdGVyIHRoZSBidWlsZFxuICAgKiBzdGVwIG9mIHRoZSBjb21wb25lbnQgaXMgZXhlY3V0ZWQuXG4gICAqL1xuICBWQUxJREFURSA9ICd2YWxpZGF0ZScsXG59XG5cbi8qKlxuICogVGhlIHNjaGVtYSB2ZXJzaW9uIG9mIHRoZSBjb21wb25lbnRcbiAqL1xuZXhwb3J0IGVudW0gQ29tcG9uZW50U2NoZW1hVmVyc2lvbiB7XG4gIC8qKlxuICAgKiBTY2hlbWEgdmVyc2lvbiAxLjAgZm9yIHRoZSBjb21wb25lbnQgZG9jdW1lbnRcbiAgICovXG4gIFYxXzAgPSAnMS4wJyxcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBpbnB1dHMgZm9yIGEgc3RlcCBpbiB0aGUgY29tcG9uZW50IGRvY3VtZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wb25lbnRTdGVwSW5wdXRzIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIGlucHV0IHZhbHVlIGZyb20gYW4gb2JqZWN0LCBmb3IgdGhlIGNvbXBvbmVudCBzdGVwXG4gICAqXG4gICAqIEBwYXJhbSBpbnB1dHNPYmplY3QgVGhlIG9iamVjdCBjb250YWluaW5nIHRoZSBpbnB1dCB2YWx1ZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbU9iamVjdChpbnB1dHNPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiBDb21wb25lbnRTdGVwSW5wdXRzIHtcbiAgICByZXR1cm4gbmV3IENvbXBvbmVudFN0ZXBJbnB1dHMoaW5wdXRzT2JqZWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBpbnB1dCB2YWx1ZSBmcm9tIGEgbGlzdCBvZiBpbnB1dCBvYmplY3RzLCBmb3IgdGhlIGNvbXBvbmVudCBzdGVwXG4gICAqXG4gICAqIEBwYXJhbSBpbnB1dHNPYmplY3RMaXN0IFRoZSBsaXN0IG9mIG9iamVjdHMgY29udGFpbmluZyB0aGUgaW5wdXQgdmFsdWVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21MaXN0KGlucHV0c09iamVjdExpc3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH1bXSk6IENvbXBvbmVudFN0ZXBJbnB1dHMge1xuICAgIHJldHVybiBuZXcgQ29tcG9uZW50U3RlcElucHV0cyhpbnB1dHNPYmplY3RMaXN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVuZGVyZWQgaW5wdXQgdmFsdWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpbnB1dHM6IGFueTtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoaW5wdXQ6IGFueSkge1xuICAgIHRoaXMuaW5wdXRzID0gaW5wdXQ7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIGBpZmAgY29uZGl0aW9uIGluIHRoZSBjb21wb25lbnQgZG9jdW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIENvbXBvbmVudFN0ZXBJZkNvbmRpdGlvbiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBgaWZgIHZhbHVlIGZyb20gYW4gb2JqZWN0LCBmb3IgdGhlIGNvbXBvbmVudCBzdGVwXG4gICAqXG4gICAqIEBwYXJhbSBpZk9iamVjdCBUaGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGBpZmAgY29uZGl0aW9uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21PYmplY3QoaWZPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiBDb21wb25lbnRTdGVwSWZDb25kaXRpb24ge1xuICAgIHJldHVybiBuZXcgQ29tcG9uZW50U3RlcElmQ29uZGl0aW9uKGlmT2JqZWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVuZGVyZWQgaW5wdXQgdmFsdWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpZkNvbmRpdGlvbjogYW55O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihpZkNvbmRpdGlvbjogYW55KSB7XG4gICAgdGhpcy5pZkNvbmRpdGlvbiA9IGlmQ29uZGl0aW9uO1xuICB9XG59XG5cbi8qKlxuICogVGhlIHJlbmRlcmVkIGNvbXBvbmVudCBkYXRhIHZhbHVlLCBmb3IgdXNlIGluIENsb3VkRm9ybWF0aW9uLlxuICogLSBGb3IgaW5saW5lIGNvbXBvbmVudHMsIGRhdGEgaXMgdGhlIGNvbXBvbmVudCB0ZXh0XG4gKiAtIEZvciBTMy1iYWNrZWQgY29tcG9uZW50cywgdXJpIGlzIHRoZSBTMyBVUkxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnREYXRhQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCBjb21wb25lbnQgZGF0YSwgZm9yIHVzZSBpbiBDbG91ZEZvcm1hdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmUgaWYgdXJpIGlzIHNldFxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlbmRlcmVkIGNvbXBvbmVudCBkYXRhIFVSSSwgZm9yIHVzZSBpbiBDbG91ZEZvcm1hdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmUgaWYgZGF0YSBpcyBzZXRcbiAgICovXG4gIHJlYWRvbmx5IHVyaT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIHJlZmVyZW5jaW5nIGFuZCB1cGxvYWRpbmcgY29tcG9uZW50IGRhdGFcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbXBvbmVudERhdGEge1xuICAvKipcbiAgICogVXBsb2FkcyBjb21wb25lbnQgZGF0YSBmcm9tIGEgbG9jYWwgZmlsZSB0byBTMyB0byB1c2UgYXMgdGhlIGNvbXBvbmVudCBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCBJZGVudGlmaWVyIG9mIHRoZSBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIHBhdGggVGhlIGxvY2FsIHBhdGggdG8gdGhlIGNvbXBvbmVudCBkYXRhIGZpbGVcbiAgICogQHBhcmFtIG9wdGlvbnMgUzMgYXNzZXQgdXBsb2FkIG9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUFzc2V0KFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgb3B0aW9uczogczNhc3NldHMuQXNzZXRPcHRpb25zID0ge30sXG4gICk6IFMzQ29tcG9uZW50RGF0YSB7XG4gICAgY29uc3QgYXNzZXQgPSBuZXcgczNhc3NldHMuQXNzZXQoc2NvcGUsIGlkLCB7IC4uLm9wdGlvbnMsIHBhdGggfSk7XG4gICAgcmV0dXJuIG5ldyBTM0NvbXBvbmVudERhdGFGcm9tQXNzZXQoYXNzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZXMgY29tcG9uZW50IGRhdGEgZnJvbSBhIHByZS1leGlzdGluZyBTMyBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIGJ1Y2tldCBUaGUgUzMgYnVja2V0IHdoZXJlIHRoZSBjb21wb25lbnQgZGF0YSBpcyBzdG9yZWRcbiAgICogQHBhcmFtIGtleSBUaGUgUzMga2V5IG9mIHRoZSBjb21wb25lbnQgZGF0YSBmaWxlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21TMyhidWNrZXQ6IHMzLklCdWNrZXQsIGtleTogc3RyaW5nKTogUzNDb21wb25lbnREYXRhIHtcbiAgICByZXR1cm4gbmV3IFMzQ29tcG9uZW50RGF0YUZyb21CdWNrZXRLZXkoYnVja2V0LCBrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZXMgYW4gaW5saW5lIEpTT04gb2JqZWN0IGFzIHRoZSBjb21wb25lbnQgZGF0YVxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBBbiBpbmxpbmUgSlNPTiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjb21wb25lbnQgZGF0YVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tSnNvbk9iamVjdChkYXRhOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogQ29tcG9uZW50RGF0YSB7XG4gICAgY29uc3QgaW5saW5lRGF0YSA9IHlhbWwuc3RyaW5naWZ5KGRhdGEsIHsgaW5kZW50OiAyIH0pO1xuICAgIHJldHVybiBuZXcgSW5saW5lQ29tcG9uZW50RGF0YShpbmxpbmVEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VzIGFuIGlubGluZSBKU09OIG9iamVjdCBhcyB0aGUgY29tcG9uZW50IGRhdGEsIHVzaW5nIHRoZSBDb21wb25lbnREb2N1bWVudCBpbnRlcmZhY2VcbiAgICpcbiAgICogQHBhcmFtIGRhdGEgQW4gaW5saW5lIEpTT04gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY29tcG9uZW50IGRhdGFcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNvbXBvbmVudERvY3VtZW50SnNvbk9iamVjdChkYXRhOiBDb21wb25lbnREb2N1bWVudCk6IENvbXBvbmVudERhdGEge1xuICAgIGNvbnN0IHsgbmFtZSwgZGVzY3JpcHRpb24sIHNjaGVtYVZlcnNpb24sIGNvbnN0YW50cywgcGFyYW1ldGVycywgcGhhc2VzIH0gPSBkYXRhO1xuICAgIHJldHVybiB0aGlzLmZyb21Kc29uT2JqZWN0KHtcbiAgICAgIC4uLihuYW1lICE9PSB1bmRlZmluZWQgJiYgeyBuYW1lIH0pLFxuICAgICAgLi4uKGRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgIHNjaGVtYVZlcnNpb246IHNjaGVtYVZlcnNpb24sXG4gICAgICAuLi4oY29uc3RhbnRzICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICBjb25zdGFudHM6IE9iamVjdC5lbnRyaWVzKGNvbnN0YW50cykubWFwKChbY29uc3RhbnROYW1lLCB2YWx1ZV0pID0+ICh7XG4gICAgICAgICAgW2NvbnN0YW50TmFtZV06IHsgdHlwZTogdmFsdWUudHlwZSwgdmFsdWU6IHZhbHVlLnZhbHVlIH0sXG4gICAgICAgIH0pKSxcbiAgICAgIH0pLFxuICAgICAgLi4uKHBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgIHBhcmFtZXRlcnM6IE9iamVjdC5lbnRyaWVzKHBhcmFtZXRlcnMpLm1hcCgoW3BhcmFtZXRlck5hbWUsIHZhbHVlXSkgPT4gKHsgW3BhcmFtZXRlck5hbWVdOiB2YWx1ZSB9KSksXG4gICAgICB9KSxcbiAgICAgIHBoYXNlczogcGhhc2VzLm1hcCgocGhhc2UpID0+ICh7XG4gICAgICAgIG5hbWU6IHBoYXNlLm5hbWUsXG4gICAgICAgIHN0ZXBzOiBwaGFzZS5zdGVwcy5tYXAoKHN0ZXApID0+ICh7XG4gICAgICAgICAgbmFtZTogc3RlcC5uYW1lLFxuICAgICAgICAgIGFjdGlvbjogc3RlcC5hY3Rpb24sXG4gICAgICAgICAgLi4uKHN0ZXAub25GYWlsdXJlICE9PSB1bmRlZmluZWQgJiYgeyBvbkZhaWx1cmU6IHN0ZXAub25GYWlsdXJlIH0pLFxuICAgICAgICAgIC4uLihzdGVwLnRpbWVvdXQgIT09IHVuZGVmaW5lZCAmJiB7IHRpbWVvdXRTZWNvbmRzOiBzdGVwLnRpbWVvdXQudG9TZWNvbmRzKCkgfSksXG4gICAgICAgICAgLi4uKHN0ZXAuaWYgIT09IHVuZGVmaW5lZCAmJiB7IGlmOiBzdGVwLmlmLmlmQ29uZGl0aW9uIH0pLFxuICAgICAgICAgIC4uLihzdGVwLmxvb3AgIT09IHVuZGVmaW5lZCAmJiB7IGxvb3A6IHN0ZXAubG9vcCB9KSxcbiAgICAgICAgICBpbnB1dHM6IHN0ZXAuaW5wdXRzLmlucHV0cyxcbiAgICAgICAgfSkpLFxuICAgICAgfSkpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZXMgYW4gaW5saW5lIEpTT04vWUFNTCBzdHJpbmcgYXMgdGhlIGNvbXBvbmVudCBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIEFuIGlubGluZSBKU09OL1lBTUwgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY29tcG9uZW50IGRhdGFcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUlubGluZShkYXRhOiBzdHJpbmcpOiBDb21wb25lbnREYXRhIHtcbiAgICByZXR1cm4gbmV3IElubGluZUNvbXBvbmVudERhdGEoZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlbmRlcmVkIGNvbXBvbmVudCBkYXRhIHZhbHVlLCBmb3IgdXNlIGluIENsb3VkRm9ybWF0aW9uLlxuICAgKiAtIEZvciBpbmxpbmUgY29tcG9uZW50cywgZGF0YSBpcyB0aGUgY29tcG9uZW50IHRleHRcbiAgICogLSBGb3IgUzMtYmFja2VkIGNvbXBvbmVudHMsIHVyaSBpcyB0aGUgUzMgVVJMXG4gICAqL1xuICBhYnN0cmFjdCByZW5kZXIoKTogQ29tcG9uZW50RGF0YUNvbmZpZztcbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIFMzLWJhc2VkIGNvbXBvbmVudCBkYXRhIHJlZmVyZW5jZXMsIGNvbnRhaW5pbmcgYWRkaXRpb25hbCBwZXJtaXNzaW9uIGdyYW50IG1ldGhvZHMgb24gdGhlIFMzIG9iamVjdFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUzNDb21wb25lbnREYXRhIGV4dGVuZHMgQ29tcG9uZW50RGF0YSB7XG4gIHByb3RlY3RlZCByZWFkb25seSBidWNrZXQ6IHMzLklCdWNrZXQ7XG4gIHByb3RlY3RlZCByZWFkb25seSBrZXk6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoYnVja2V0OiBzMy5JQnVja2V0LCBrZXk6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmJ1Y2tldCA9IGJ1Y2tldDtcbiAgICB0aGlzLmtleSA9IGtleTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVuZGVyZWQgY29tcG9uZW50IGRhdGEgdGV4dCwgZm9yIHVzZSBpbiBDbG91ZEZvcm1hdGlvblxuICAgKi9cbiAgcHVibGljIHJlbmRlcigpOiBDb21wb25lbnREYXRhQ29uZmlnIHtcbiAgICByZXR1cm4geyB1cmk6IHRoaXMuYnVja2V0LnMzVXJsRm9yT2JqZWN0KHRoaXMua2V5KSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHB1dCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGNvbXBvbmVudCBkYXRhIGluIFMzXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRQdXQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldC5ncmFudFB1dChncmFudGVlLCB0aGlzLmtleSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGNvbXBvbmVudCBkYXRhIGluIFMzXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQuZ3JhbnRSZWFkKGdyYW50ZWUsIHRoaXMua2V5KTtcbiAgfVxufVxuXG5jbGFzcyBJbmxpbmVDb21wb25lbnREYXRhIGV4dGVuZHMgQ29tcG9uZW50RGF0YSB7XG4gIHByb3RlY3RlZCByZWFkb25seSBkYXRhOiBzdHJpbmc7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGRhdGE6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCBjb21wb25lbnQgZGF0YSB0ZXh0LCBmb3IgdXNlIGluIENsb3VkRm9ybWF0aW9uXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyKCk6IENvbXBvbmVudERhdGFDb25maWcge1xuICAgIHJldHVybiB7IGRhdGE6IHRoaXMuZGF0YSB9O1xuICB9XG59XG5cbmNsYXNzIFMzQ29tcG9uZW50RGF0YUZyb21CdWNrZXRLZXkgZXh0ZW5kcyBTM0NvbXBvbmVudERhdGEge1xuICBwdWJsaWMgY29uc3RydWN0b3IoYnVja2V0OiBzMy5JQnVja2V0LCBrZXk6IHN0cmluZykge1xuICAgIHN1cGVyKGJ1Y2tldCwga2V5KTtcbiAgfVxufVxuXG5jbGFzcyBTM0NvbXBvbmVudERhdGFGcm9tQXNzZXQgZXh0ZW5kcyBTM0NvbXBvbmVudERhdGEge1xuICBwdWJsaWMgY29uc3RydWN0b3IoYXNzZXQ6IHMzYXNzZXRzLkFzc2V0KSB7XG4gICAgc3VwZXIoYXNzZXQuYnVja2V0LCBhc3NldC5zM09iamVjdEtleSk7XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIHdvcmtpbmcgd2l0aCBBV1MgTWFya2V0cGxhY2UgY29tcG9uZW50c1xuICovXG5leHBvcnQgY2xhc3MgQXdzTWFya2V0cGxhY2VDb21wb25lbnQge1xuICAvKipcbiAgICogSW1wb3J0cyBhbiBBV1MgTWFya2V0cGxhY2UgY29tcG9uZW50IGZyb20gaXRzIGF0dHJpYnV0ZXNcbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIElkZW50aWZpZXIgb2YgdGhlIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gYXR0cnMgVGhlIEFXUy1tYW5hZ2VkIGNvbXBvbmVudCBhdHRyaWJ1dGVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Bd3NNYXJrZXRwbGFjZUNvbXBvbmVudEF0dHJpYnV0ZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGF0dHJzOiBBd3NNYXJrZXRwbGFjZUNvbXBvbmVudEF0dHJpYnV0ZXMsXG4gICk6IElDb21wb25lbnQge1xuICAgIHJldHVybiBDb21wb25lbnQuZnJvbUNvbXBvbmVudEFybihcbiAgICAgIHNjb3BlLFxuICAgICAgaWQsXG4gICAgICBjZGsuU3RhY2sub2Yoc2NvcGUpLmZvcm1hdEFybih7XG4gICAgICAgIHNlcnZpY2U6ICdpbWFnZWJ1aWxkZXInLFxuICAgICAgICBhY2NvdW50OiAnYXdzLW1hcmtldHBsYWNlJyxcbiAgICAgICAgcmVzb3VyY2U6ICdjb21wb25lbnQnLFxuICAgICAgICByZXNvdXJjZU5hbWU6IGAke2F0dHJzLmNvbXBvbmVudE5hbWV9LSR7YXR0cnMubWFya2V0cGxhY2VQcm9kdWN0SWR9LyR7YXR0cnMuY29tcG9uZW50VmVyc2lvbiA/PyBMQVRFU1RfVkVSU0lPTn1gLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgbmV3IG9yIGltcG9ydGVkIENvbXBvbmVudFxuICovXG5hYnN0cmFjdCBjbGFzcyBDb21wb25lbnRCYXNlIGV4dGVuZHMgY2RrLlJlc291cmNlIGltcGxlbWVudHMgSUNvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb21wb25lbnRcbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGNvbXBvbmVudEFybjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgY29tcG9uZW50TmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHcmFudCBjdXN0b20gYWN0aW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGNvbXBvbmVudFxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgbGlzdCBvZiBhY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgZ3JhbnQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWUsXG4gICAgICBhY3Rpb25zLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbdGhpcy5jb21wb25lbnRBcm5dLFxuICAgICAgc2NvcGU6IHRoaXMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKi9cbiAgcHVibGljIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoZ3JhbnRlZSwgJ2ltYWdlYnVpbGRlcjpHZXRDb21wb25lbnQnKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gRUMyIEltYWdlIEJ1aWxkZXIgQ29tcG9uZW50LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL21hbmFnZS1jb21wb25lbnRzLmh0bWxcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2Uge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1pbWFnZWJ1aWxkZXItYWxwaGEuQ29tcG9uZW50JztcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGNvbXBvbmVudCBnaXZlbiBpdHMgQVJOLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ29tcG9uZW50QXJuKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNvbXBvbmVudEFybjogc3RyaW5nKTogSUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUNvbXBvbmVudEF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7IGNvbXBvbmVudEFybiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgY29tcG9uZW50IGdpdmVuIGl0cyBuYW1lLiBUaGUgcHJvdmlkZWQgbmFtZSBtdXN0IGJlIG5vcm1hbGl6ZWQgYnkgY29udmVydGluZyBhbGwgYWxwaGFiZXRpY2FsXG4gICAqIGNoYXJhY3RlcnMgdG8gbG93ZXJjYXNlLCBhbmQgcmVwbGFjaW5nIGFsbCBzcGFjZXMgYW5kIHVuZGVyc2NvcmVzIHdpdGggaHlwaGVucy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNvbXBvbmVudE5hbWUoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgY29tcG9uZW50TmFtZTogc3RyaW5nKTogSUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUNvbXBvbmVudEF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7IGNvbXBvbmVudE5hbWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGNvbXBvbmVudCBieSBwcm92aWRpbmcgaXRzIGF0dHJpYnV0ZXMuIElmIHRoZSBjb21wb25lbnQgbmFtZSBpcyBwcm92aWRlZCBhcyBhbiBhdHRyaWJ1dGUsIGl0XG4gICAqIG11c3QgYmUgbm9ybWFsaXplZCBieSBjb252ZXJ0aW5nIGFsbCBhbHBoYWJldGljYWwgY2hhcmFjdGVycyB0byBsb3dlcmNhc2UsIGFuZCByZXBsYWNpbmcgYWxsIHNwYWNlcyBhbmQgdW5kZXJzY29yZXNcbiAgICogd2l0aCBoeXBoZW5zLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ29tcG9uZW50QXR0cmlidXRlcyhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhdHRyczogQ29tcG9uZW50QXR0cmlidXRlcyk6IElDb21wb25lbnQge1xuICAgIGlmIChhdHRycy5jb21wb25lbnRBcm4gJiYgKGF0dHJzLmNvbXBvbmVudE5hbWUgfHwgYXR0cnMuY29tcG9uZW50VmVyc2lvbikpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBsaXRgQ29uZmxpY3RpbmdDb21wb25lbnRBdHRyaWJ1dGVzYCxcbiAgICAgICAgJ2EgY29tcG9uZW50TmFtZSBvciBjb21wb25lbnRWZXJzaW9uIGNhbm5vdCBiZSBwcm92aWRlZCB3aGVuIGEgY29tcG9uZW50QXJuIGlzIHByb3ZpZGVkJyxcbiAgICAgICAgc2NvcGUsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghYXR0cnMuY29tcG9uZW50QXJuICYmICFhdHRycy5jb21wb25lbnROYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihsaXRgTWlzc2luZ0NvbXBvbmVudElkZW50aWZpZXJgLCAnZWl0aGVyIGNvbXBvbmVudEFybiBvciBjb21wb25lbnROYW1lIGlzIHJlcXVpcmVkJywgc2NvcGUpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBvbmVudEFybiA9XG4gICAgICBhdHRycy5jb21wb25lbnRBcm4gPz9cbiAgICAgIGNkay5TdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICAgIHJlc291cmNlOiAnY29tcG9uZW50JyxcbiAgICAgICAgcmVzb3VyY2VOYW1lOiBgJHthdHRycy5jb21wb25lbnROYW1lfS8ke2F0dHJzLmNvbXBvbmVudFZlcnNpb24gPz8gTEFURVNUX1ZFUlNJT059YCxcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgW2NvbXBvbmVudE5hbWUsIGNvbXBvbmVudFZlcnNpb25dID0gKCgpID0+IHtcbiAgICAgIGlmIChhdHRycy5jb21wb25lbnROYW1lKSB7XG4gICAgICAgIHJldHVybiBbYXR0cnMuY29tcG9uZW50TmFtZSwgYXR0cnMuY29tcG9uZW50VmVyc2lvbiA/PyBMQVRFU1RfVkVSU0lPTl07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWVWZXJzaW9uID0gY2RrLlN0YWNrLm9mKHNjb3BlKS5zcGxpdEFybihcbiAgICAgICAgY29tcG9uZW50QXJuLFxuICAgICAgICBjZGsuQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUsXG4gICAgICApLnJlc291cmNlTmFtZSE7XG5cbiAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWVWZXJzaW9uU3BsaXQgPSBjZGsuRm4uc3BsaXQoJy8nLCBjb21wb25lbnROYW1lVmVyc2lvbik7XG4gICAgICByZXR1cm4gW2Nkay5Gbi5zZWxlY3QoMCwgY29tcG9uZW50TmFtZVZlcnNpb25TcGxpdCksIGNkay5Gbi5zZWxlY3QoMSwgY29tcG9uZW50TmFtZVZlcnNpb25TcGxpdCldO1xuICAgIH0pKCk7XG5cbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjb21wb25lbnRBcm4gPSBjb21wb25lbnRBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbiA9IGNvbXBvbmVudFZlcnNpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGEgQ29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpc0NvbXBvbmVudCh4OiBhbnkpOiB4IGlzIENvbXBvbmVudCB7XG4gICAgcmV0dXJuIHggIT09IG51bGwgJiYgdHlwZW9mIHggPT09ICdvYmplY3QnICYmIENPTVBPTkVOVF9TWU1CT0wgaW4geDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjb21wb25lbnQgaXMgZW5jcnlwdGVkXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZW5jcnlwdGVkOiBib29sZWFuO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcbiAgcHJpdmF0ZSByZXNvdXJjZTogQ2ZuQ29tcG9uZW50O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ29tcG9uZW50UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTpcbiAgICAgICAgcHJvcHMuY29tcG9uZW50TmFtZSA/P1xuICAgICAgICBjZGsuTGF6eS5zdHJpbmcoe1xuICAgICAgICAgIHByb2R1Y2U6ICgpID0+XG4gICAgICAgICAgICBjZGsuTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHtcbiAgICAgICAgICAgICAgbWF4TGVuZ3RoOiAxMjgsXG4gICAgICAgICAgICAgIHNlcGFyYXRvcjogJy0nLFxuICAgICAgICAgICAgICBhbGxvd2VkU3BlY2lhbENoYXJhY3RlcnM6ICctJyxcbiAgICAgICAgICAgIH0pLnRvTG93ZXJDYXNlKCksIC8vIEVuZm9yY2UgbG93ZXJjYXNlIGZvciB0aGUgYXV0by1nZW5lcmF0ZWQgZmFsbGJhY2tcbiAgICAgICAgfSksXG4gICAgfSk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgQ09NUE9ORU5UX1NZTUJPTCwgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMudmFsaWRhdGVDb21wb25lbnROYW1lKCk7XG5cbiAgICBwcm9wcy5zdXBwb3J0ZWRPc1ZlcnNpb25zPy5mb3JFYWNoKChvc1ZlcnNpb24pID0+IHtcbiAgICAgIGlmIChvc1ZlcnNpb24ucGxhdGZvcm0gIT09IHByb3BzLnBsYXRmb3JtKSB7XG4gICAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGxpdGBJbmNvbXBhdGlibGVPc1ZlcnNpb25gLFxuICAgICAgICAgIGBvcyB2ZXJzaW9uICR7b3NWZXJzaW9uLm9zVmVyc2lvbn0gaXMgbm90IGNvbXBhdGlibGUgd2l0aCBwbGF0Zm9ybSAke3Byb3BzLnBsYXRmb3JtfWAsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbXBvbmVudFZlcnNpb24gPSBwcm9wcy5jb21wb25lbnRWZXJzaW9uID8/ICcxLjAuMCc7XG4gICAgY29uc3Qgc3VwcG9ydGVkT3NWZXJzaW9ucyA9IHByb3BzLnN1cHBvcnRlZE9zVmVyc2lvbnM/LmZpbHRlcigob3NWZXJzaW9uKSA9PiBvc1ZlcnNpb24ub3NWZXJzaW9uICE9PSB1bmRlZmluZWQpO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBDZm5Db21wb25lbnQodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgICB2ZXJzaW9uOiBjb21wb25lbnRWZXJzaW9uLFxuICAgICAgY2hhbmdlRGVzY3JpcHRpb246IHByb3BzLmNoYW5nZURlc2NyaXB0aW9uLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgcGxhdGZvcm06IHByb3BzLnBsYXRmb3JtLFxuICAgICAga21zS2V5SWQ6IHByb3BzLmttc0tleT8ua2V5QXJuLFxuICAgICAgdGFnczogcHJvcHMudGFncyxcbiAgICAgIC4uLihzdXBwb3J0ZWRPc1ZlcnNpb25zPy5sZW5ndGggJiYge1xuICAgICAgICBzdXBwb3J0ZWRPc1ZlcnNpb25zOiBzdXBwb3J0ZWRPc1ZlcnNpb25zLm1hcCgob3NWZXJzaW9uKSA9PiBvc1ZlcnNpb24ub3NWZXJzaW9uISksXG4gICAgICB9KSxcbiAgICAgIC4uLnByb3BzLmRhdGEucmVuZGVyKCksXG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbXBvbmVudFZlcnNpb24gPSBjb21wb25lbnRWZXJzaW9uO1xuICAgIHRoaXMuZW5jcnlwdGVkID0gdHJ1ZTsgLy8gQ29tcG9uZW50cyBhcmUgYWx3YXlzIGVuY3J5cHRlZFxuICAgIHRoaXMua21zS2V5ID0gcHJvcHMua21zS2V5O1xuICB9XG5cbiAgQG1lbW9pemVkR2V0dGVyXG4gIHB1YmxpYyBnZXQgY29tcG9uZW50TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlTmFtZUF0dHJpYnV0ZSh0aGlzLnJlc291cmNlLmF0dHJOYW1lKTtcbiAgfVxuXG4gIEBtZW1vaXplZEdldHRlclxuICBwdWJsaWMgZ2V0IGNvbXBvbmVudEFybigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlQXJuQXR0cmlidXRlKHRoaXMucmVzb3VyY2UuYXR0ckFybiwge1xuICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICByZXNvdXJjZTogJ2NvbXBvbmVudCcsXG4gICAgICByZXNvdXJjZU5hbWU6IGAke3RoaXMucGh5c2ljYWxOYW1lfS8ke3RoaXMuY29tcG9uZW50VmVyc2lvbn1gLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgQG1lbW9pemVkR2V0dGVyXG4gIHB1YmxpYyBnZXQgY29tcG9uZW50VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlLmF0dHJUeXBlO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUNvbXBvbmVudE5hbWUoKSB7XG4gICAgaWYgKGNkay5Ub2tlbi5pc1VucmVzb2x2ZWQodGhpcy5waHlzaWNhbE5hbWUpKSB7XG4gICAgICByZXR1cm47IC8vIENhbm5vdCB2YWxpZGF0ZSB1bnJlc29sdmVkIHRva2VucywgZ2l2ZW4gdGhlaXIgYWN0dWFsIHZhbHVlIGlzIHJlbmRlcmVkIGF0IGRlcGxveW1lbnQgdGltZVxuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZS5sZW5ndGggPiAxMjgpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBsaXRgQ29tcG9uZW50TmFtZVRvb0xvbmdgLFxuICAgICAgICBgdGhlIGNvbXBvbmVudE5hbWUgY2Fubm90IGJlIGxvbmdlciB0aGFuIDEyOCBjaGFyYWN0ZXJzLCBnb3Q6ICcke3RoaXMucGh5c2ljYWxOYW1lfSdgLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNhbE5hbWUuaW5jbHVkZXMoJyAnKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IobGl0YENvbXBvbmVudE5hbWVDb250YWluc1NwYWNlc2AsIGB0aGUgY29tcG9uZW50TmFtZSBjYW5ub3QgY29udGFpbiBzcGFjZXMsIGdvdDogJyR7dGhpcy5waHlzaWNhbE5hbWV9J2AsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZS5pbmNsdWRlcygnXycpKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihsaXRgQ29tcG9uZW50TmFtZUNvbnRhaW5zVW5kZXJzY29yZXNgLCBgdGhlIGNvbXBvbmVudE5hbWUgY2Fubm90IGNvbnRhaW4gdW5kZXJzY29yZXMsIGdvdDogJyR7dGhpcy5waHlzaWNhbE5hbWV9J2AsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZSAhPT0gdGhpcy5waHlzaWNhbE5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IobGl0YENvbXBvbmVudE5hbWVOb3RMb3dlcmNhc2VgLCBgdGhlIGNvbXBvbmVudE5hbWUgbXVzdCBiZSBsb3dlcmNhc2UsIGdvdDogJyR7dGhpcy5waHlzaWNhbE5hbWV9J2AsIHRoaXMpO1xuICAgIH1cbiAgfVxufVxuIl19
|