@aws-cdk/aws-bedrock-agentcore-alpha 2.250.0-alpha.0 → 2.252.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 +11883 -7285
- package/.jsii.tabl.json.gz +0 -0
- package/.warnings.jsii.js +4 -0
- package/README.md +405 -0
- package/lib/gateway/gateway-base.js +1 -1
- package/lib/gateway/gateway.d.ts +58 -0
- package/lib/gateway/gateway.js +46 -3
- package/lib/gateway/inbound-auth/authorizer.d.ts +27 -1
- package/lib/gateway/inbound-auth/authorizer.js +37 -5
- package/lib/gateway/inbound-auth/custom-claim.js +1 -1
- package/lib/gateway/interceptor.js +1 -1
- package/lib/gateway/outbound-auth/api-key.js +1 -1
- package/lib/gateway/outbound-auth/credential-provider.js +1 -1
- package/lib/gateway/protocol.js +2 -2
- package/lib/gateway/targets/schema/api-schema.js +4 -4
- package/lib/gateway/targets/schema/tool-schema.js +4 -4
- package/lib/gateway/targets/target-base.js +1 -1
- package/lib/gateway/targets/target-configuration.js +6 -6
- package/lib/gateway/targets/target.js +1 -1
- package/lib/index.d.ts +8 -0
- package/lib/index.js +13 -1
- package/lib/memory/memory-strategy.js +1 -1
- package/lib/memory/memory.js +2 -2
- package/lib/memory/strategies/managed-strategy.js +1 -1
- package/lib/memory/strategies/self-managed-strategy.js +1 -1
- package/lib/network/network-configuration.js +4 -4
- package/lib/policy/perms.d.ts +50 -0
- package/lib/policy/perms.js +62 -0
- package/lib/policy/policy-base.d.ts +194 -0
- package/lib/policy/policy-base.js +120 -0
- package/lib/policy/policy-engine-base.d.ts +260 -0
- package/lib/policy/policy-engine-base.js +193 -0
- package/lib/policy/policy-engine.d.ts +150 -0
- package/lib/policy/policy-engine.js +290 -0
- package/lib/policy/policy-statement.d.ts +518 -0
- package/lib/policy/policy-statement.js +927 -0
- package/lib/policy/policy-types.d.ts +66 -0
- package/lib/policy/policy-types.js +30 -0
- package/lib/policy/policy.d.ts +127 -0
- package/lib/policy/policy.js +225 -0
- package/lib/policy/validation-helpers.d.ts +139 -0
- package/lib/policy/validation-helpers.js +276 -0
- package/lib/runtime/inbound-auth/custom-claim.js +1 -1
- package/lib/runtime/inbound-auth/runtime-authorizer-configuration.js +1 -1
- package/lib/runtime/observability.d.ts +105 -0
- package/lib/runtime/observability.js +317 -0
- package/lib/runtime/runtime-artifact.js +1 -1
- package/lib/runtime/runtime-base.js +1 -1
- package/lib/runtime/runtime-endpoint-base.js +1 -1
- package/lib/runtime/runtime-endpoint.js +1 -1
- package/lib/runtime/runtime.d.ts +17 -0
- package/lib/runtime/runtime.js +10 -2
- package/lib/tools/browser.js +2 -2
- package/lib/tools/code-interpreter.js +2 -2
- package/package.json +9 -9
- package/rosetta/default.ts-fixture +2 -0
package/lib/runtime/runtime.js
CHANGED
|
@@ -45,6 +45,7 @@ const errors_1 = require("aws-cdk-lib/core/lib/errors");
|
|
|
45
45
|
const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal");
|
|
46
46
|
const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
|
|
47
47
|
const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable");
|
|
48
|
+
const observability_1 = require("./observability");
|
|
48
49
|
const perms_1 = require("./perms");
|
|
49
50
|
const runtime_base_1 = require("./runtime-base");
|
|
50
51
|
const runtime_endpoint_1 = require("./runtime-endpoint");
|
|
@@ -93,7 +94,7 @@ let Runtime = (() => {
|
|
|
93
94
|
Runtime = _classThis = _classDescriptor.value;
|
|
94
95
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
95
96
|
}
|
|
96
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.Runtime", version: "2.
|
|
97
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.Runtime", version: "2.252.0-alpha.0" };
|
|
97
98
|
/** Uniquely identifies this class. */
|
|
98
99
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.Runtime';
|
|
99
100
|
/**
|
|
@@ -300,6 +301,13 @@ let Runtime = (() => {
|
|
|
300
301
|
this.agentRuntimeVersion = this.runtimeResource.attrAgentRuntimeVersion;
|
|
301
302
|
this.createdAt = this.runtimeResource.attrCreatedAt;
|
|
302
303
|
this.lastUpdatedAt = this.runtimeResource.attrLastUpdatedAt;
|
|
304
|
+
// Configure observability (tracing and logging)
|
|
305
|
+
if (props.tracingEnabled) {
|
|
306
|
+
(0, observability_1.configureTracingDelivery)(this, this.agentRuntimeArn);
|
|
307
|
+
}
|
|
308
|
+
if (props.loggingConfigs && props.loggingConfigs.length > 0) {
|
|
309
|
+
(0, observability_1.configureLoggingDelivery)(this, this.agentRuntimeArn, props.loggingConfigs);
|
|
310
|
+
}
|
|
303
311
|
}
|
|
304
312
|
/**
|
|
305
313
|
* Renders the environment variables for CloudFormation
|
|
@@ -702,4 +710,4 @@ let Runtime = (() => {
|
|
|
702
710
|
return Runtime = _classThis;
|
|
703
711
|
})();
|
|
704
712
|
exports.Runtime = Runtime;
|
|
705
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsNkNBQStGO0FBQy9GLHFFQUFxRTtBQUNyRSwyQ0FBMkM7QUFDM0MsMkNBQTJDO0FBQzNDLHdEQUE4RDtBQUM5RCw0RUFBNEQ7QUFDNUQsOEVBQThGO0FBQzlGLDBFQUEwRTtBQUcxRSxtQ0FRaUI7QUFJakIsaURBQTZDO0FBQzdDLHlEQUFxRDtBQUVyRCxtQ0FBdUM7QUFDdkMsNkRBQWlGO0FBQ2pGLDRFQUErRTtBQUUvRTs7K0VBRStFO0FBQy9FOzs7R0FHRztBQUNILE1BQU0scUJBQXFCLEdBQUcsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7QUFFbkQ7OztHQUdHO0FBQ0gsTUFBTSxzQkFBc0IsR0FBRyxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQXVHdkQ7OytFQUUrRTtBQUUvRTs7Ozs7OztHQU9HO0lBRVUsT0FBTzs0QkFEbkIsb0NBQWtCOzs7O3NCQUNVLDBCQUFXOzs7dUJBQW5CLFNBQVEsV0FBVzs7Ozt1Q0F5cUJyQyxJQUFBLGtDQUFjLEdBQUU7WUFDakIsb0xBQU8sV0FBVyw2REFnQmpCO1lBMXJCSCw2S0EyckJDOzs7OztRQTFyQkMsc0NBQXNDO1FBQy9CLE1BQU0sQ0FBVSxxQkFBcUIsR0FBVyw4Q0FBOEMsQ0FBQztRQUV0Rzs7Ozs7Ozs7V0FRRztRQUNJLE1BQU0sQ0FBQywwQkFBMEIsQ0FDdEMsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLEtBQTZCOzs7Ozs7Ozs7O1lBRTdCLE1BQU0sMkJBQTRCLFNBQVEsMEJBQVc7Z0JBQ25DLGVBQWUsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDO2dCQUN4QyxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQztnQkFDdEMsZ0JBQWdCLEdBQUcsS0FBSyxD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c0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBEdXJhdGlvbiwgU3RhY2ssIEFubm90YXRpb25zLCBUb2tlbiwgQXJuLCBBcm5Gb3JtYXQsIExhenksIE5hbWVzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgYmVkcm9ja2FnZW50Y29yZSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZSc7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9lcnJvcnMnO1xuaW1wb3J0IHsgbGl0IH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvaGVscGVycy1pbnRlcm5hbCc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSwgTWV0aG9kTWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgUnVudGltZUF1dGhvcml6ZXJDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9pbmJvdW5kLWF1dGgvcnVudGltZS1hdXRob3JpemVyLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtcbiAgUlVOVElNRV9MT0dTX0dST1VQX0FDVElPTlMsXG4gIFJVTlRJTUVfTE9HU19ERVNDUklCRV9BQ1RJT05TLFxuICBSVU5USU1FX0xPR1NfU1RSRUFNX0FDVElPTlMsXG4gIFJVTlRJTUVfWFJBWV9BQ1RJT05TLFxuICBSVU5USU1FX0NMT1VEV0FUQ0hfTUVUUklDU19BQ1RJT05TLFxuICBSVU5USU1FX0NMT1VEV0FUQ0hfTkFNRVNQQUNFLFxuICBSVU5USU1FX1dPUktMT0FEX0lERU5USVRZX0FDVElPTlMsXG59IGZyb20gJy4vcGVybXMnO1xuaW1wb3J0IHR5cGUgeyBBZ2VudFJ1bnRpbWVBcnRpZmFjdCB9IGZyb20gJy4vcnVudGltZS1hcnRpZmFjdCc7XG5cbmltcG9ydCB0eXBlIHsgSUJlZHJvY2tBZ2VudFJ1bnRpbWUsIEFnZW50UnVudGltZUF0dHJpYnV0ZXMgfSBmcm9tICcuL3J1bnRpbWUtYmFzZSc7XG5pbXBvcnQgeyBSdW50aW1lQmFzZSB9IGZyb20gJy4vcnVudGltZS1iYXNlJztcbmltcG9ydCB7IFJ1bnRpbWVFbmRwb2ludCB9IGZyb20gJy4vcnVudGltZS1lbmRwb2ludCc7XG5pbXBvcnQgdHlwZSB7IExpZmVjeWNsZUNvbmZpZ3VyYXRpb24sIFJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBQcm90b2NvbFR5cGUgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nRmllbGQsIHZhbGlkYXRlRmllbGRQYXR0ZXJuIH0gZnJvbSAnLi92YWxpZGF0aW9uLWhlbHBlcnMnO1xuaW1wb3J0IHsgUnVudGltZU5ldHdvcmtDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vbmV0d29yay9uZXR3b3JrLWNvbmZpZ3VyYXRpb24nO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRzXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIE1pbmltdW0gdGltZW91dCBmb3IgaWRsZSBydW50aW1lIHNlc3Npb25zXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgTElGRUNZQ0xFX01JTl9USU1FT1VUID0gRHVyYXRpb24uc2Vjb25kcyg2MCk7XG5cbi8qKlxuICogTWF4aW11bSBsaWZldGltZSBmb3IgdGhlIGluc3RhbmNlXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgTElGRUNZQ0xFX01BWF9MSUZFVElNRSA9IER1cmF0aW9uLnNlY29uZHMoMjg4MDApO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvcHNcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhIEJlZHJvY2sgQWdlbnQgQ29yZSBSdW50aW1lIHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVudGltZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIFZhbGlkIGNoYXJhY3RlcnMgYXJlIGEteiwgQS1aLCAwLTksIF8gKHVuZGVyc2NvcmUpXG4gICAqIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY2FuIGJlIHVwIHRvIDQ4IGNoYXJhY3RlcnMgbG9uZ1xuICAgKiBQYXR0ZXJuOiBeW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kXG4gICAqIEBkZWZhdWx0IC0gYXV0byBnZW5lcmF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcnVudGltZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhcnRpZmFjdCBjb25maWd1cmF0aW9uIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBDb250YWlucyB0aGUgY29udGFpbmVyIGNvbmZpZ3VyYXRpb24gd2l0aCBFQ1IgVVJJXG4gICAqL1xuICByZWFkb25seSBhZ2VudFJ1bnRpbWVBcnRpZmFjdDogQWdlbnRSdW50aW1lQXJ0aWZhY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSB0aGF0IHByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBJZiBub3QgcHJvdmlkZWQsIGEgcm9sZSB3aWxsIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseVxuICAgKiBAZGVmYXVsdCAtIEEgbmV3IHJvbGUgd2lsbCBiZSBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSBleGVjdXRpb25Sb2xlPzogaWFtLklSb2xlO1xuXG4gIC8qKlxuICAgKiBOZXR3b3JrIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEBkZWZhdWx0IC0gUnVudGltZU5ldHdvcmtDb25maWd1cmF0aW9uLnVzaW5nUHVibGljTmV0d29yaygpXG4gICAqL1xuICByZWFkb25seSBuZXR3b3JrQ29uZmlndXJhdGlvbj86IFJ1bnRpbWVOZXR3b3JrQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogT3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEBkZWZhdWx0IC0gTm8gZGVzY3JpcHRpb25cbiAgICogTGVuZ3RoIE1pbmltdW06IDEgLCBNYXhpbXVtOiAxMjAwXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogUHJvdG9jb2wgY29uZmlndXJhdGlvbiBmb3IgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogQGRlZmF1bHQgLSBQcm90b2NvbFR5cGUuSFRUUFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdG9jb2xDb25maWd1cmF0aW9uPzogUHJvdG9jb2xUeXBlO1xuXG4gIC8qKlxuICAgKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIC0gTWF4aW11bSA1MCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICogLSBLZXk6IE11c3QgYmUgMS0xMDAgY2hhcmFjdGVycywgc3RhcnQgd2l0aCBsZXR0ZXIgb3IgdW5kZXJzY29yZSwgY29udGFpbiBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGFuZCB1bmRlcnNjb3Jlc1xuICAgKiAtIFZhbHVlOiBNdXN0IGJlIDAtMjA0OCBjaGFyYWN0ZXJzIChwZXIgQ2xvdWRGb3JtYXRpb24gc3BlY2lmaWNhdGlvbilcbiAgICogQGRlZmF1bHQgLSBObyBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50VmFyaWFibGVzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogQXV0aG9yaXplciBjb25maWd1cmF0aW9uIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBVc2UgUnVudGltZUF1dGhvcml6ZXJDb25maWd1cmF0aW9uIHN0YXRpYyBtZXRob2RzIHRvIGNyZWF0ZSB0aGUgY29uZmlndXJhdGlvblxuICAgKiBAZGVmYXVsdCAtIFJ1bnRpbWVBdXRob3JpemVyQ29uZmlndXJhdGlvbi5pYW0oKSAoSUFNIGF1dGhlbnRpY2F0aW9uKVxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yaXplckNvbmZpZ3VyYXRpb24/OiBSdW50aW1lQXV0aG9yaXplckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRhZ3MgZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEEgbGlzdCBvZiBrZXk6dmFsdWUgcGFpcnMgb2YgdGFncyB0byBhcHBseSB0byB0aGlzIFJ1bnRpbWUgcmVzb3VyY2VcbiAgICogQGRlZmF1bHQge30gLSBubyB0YWdzXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgSFRUUCByZXF1ZXN0IGhlYWRlcnMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBydW50aW1lLlxuICAgKiBAZGVmYXVsdCAtIE5vIHJlcXVlc3QgaGVhZGVycyBjb25maWd1cmVkXG4gICAqL1xuICByZWFkb25seSByZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbj86IFJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlmZSBjeWNsZSBjb25maWd1cmF0aW9uIGZvciB0aGUgQWdlbnRDb3JlIFJ1bnRpbWUuXG4gICAqIEBkZWZhdWx0IC0gTm8gbGlmZWN5Y2xlIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGxpZmVjeWNsZUNvbmZpZ3VyYXRpb24/OiBMaWZlY3ljbGVDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGFkZGluZyBhbiBlbmRwb2ludCB0byB0aGUgcnVudGltZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZEVuZHBvaW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBEZXNjcmlwdGlvbiBmb3IgdGhlIGVuZHBvaW50LCBNdXN0IGJlIGJldHdlZW4gMSBhbmQgMTIwMCBjaGFyYWN0ZXJzXG4gICAqIEBkZWZhdWx0IC0gTm8gZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIHJ1bnRpbWUgdmVyc2lvbiBmb3IgdGhpcyBlbmRwb2ludFxuICAgKiBAZGVmYXVsdCAgMVxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogQmVkcm9jayBBZ2VudCBDb3JlIFJ1bnRpbWVcbiAqIEVuYWJsZXMgcnVubmluZyBjb250YWluZXJpemVkIGFnZW50cyB3aXRoIHNwZWNpZmljIG5ldHdvcmsgY29uZmlndXJhdGlvbnMsXG4gKiBzZWN1cml0eSBzZXR0aW5ncywgYW5kIHJ1bnRpbWUgYXJ0aWZhY3RzLlxuICpcbiAqIEByZXNvdXJjZSBBV1M6OkJlZHJvY2tBZ2VudENvcmU6OlJ1bnRpbWVcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9ydW50aW1lLmh0bWxcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIFJ1bnRpbWUgZXh0ZW5kcyBSdW50aW1lQmFzZSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWJlZHJvY2stYWdlbnRjb3JlLWFscGhhLlJ1bnRpbWUnO1xuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgQWdlbnQgUnVudGltZSB1c2luZyBhdHRyaWJ1dGVzXG4gICAqIFRoaXMgYWxsb3dzIHlvdSB0byByZWZlcmVuY2UgYW4gQWdlbnQgUnVudGltZSB0aGF0IHdhcyBjcmVhdGVkIG91dHNpZGUgb2YgQ0RLXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0IGlkXG4gICAqIEBwYXJhbSBhdHRycyBUaGUgYXR0cmlidXRlcyBvZiB0aGUgZXhpc3RpbmcgQWdlbnQgUnVudGltZVxuICAgKiBAcmV0dXJucyBBbiBJQmVkcm9ja0FnZW50UnVudGltZSBpbnN0YW5jZSByZXByZXNlbnRpbmcgdGhlIGltcG9ydGVkIHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUFnZW50UnVudGltZUF0dHJpYnV0ZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGF0dHJzOiBBZ2VudFJ1bnRpbWVBdHRyaWJ1dGVzLFxuICApOiBJQmVkcm9ja0FnZW50UnVudGltZSB7XG4gICAgY2xhc3MgSW1wb3J0ZWRCZWRyb2NrQWdlbnRSdW50aW1lIGV4dGVuZHMgUnVudGltZUJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZUFybiA9IGF0dHJzLmFnZW50UnVudGltZUFybjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVJZCA9IGF0dHJzLmFnZW50UnVudGltZUlkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZU5hbWUgPSBhdHRycy5hZ2VudFJ1bnRpbWVOYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZVZlcnNpb24gPSBhdHRycy5hZ2VudFJ1bnRpbWVWZXJzaW9uO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGFnZW50U3RhdHVzID0gYXR0cnMuYWdlbnRTdGF0dXM7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpcHRpb24gPSBhdHRycy5kZXNjcmlwdGlvbjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQgPSBhdHRycy5jcmVhdGVkQXQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgbGFzdFVwZGF0ZWRBdCA9IGF0dHJzLmxhc3RVcGRhdGVkQXQ7XG5cbiAgICAgIHB1YmxpYyByZWFkb25seSByb2xlOiBpYW0uSVJvbGU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZ3JhbnRQcmluY2lwYWw6IGlhbS5JUHJpbmNpcGFsO1xuXG4gICAgICBjb25zdHJ1Y3RvcihzOiBDb25zdHJ1Y3QsIGk6IHN0cmluZykge1xuICAgICAgICBzdXBlcihzLCBpKTtcbiAgICAgICAgdGhpcy5yb2xlID0gaWFtLlJvbGUuZnJvbVJvbGVBcm4odGhpcywgJ1JvbGUnLCBhdHRycy5yb2xlQXJuKTtcbiAgICAgICAgdGhpcy5ncmFudFByaW5jaXBhbCA9IHRoaXMucm9sZTtcbiAgICAgICAgaWYgKGF0dHJzLnNlY3VyaXR5R3JvdXBzKSB7XG4gICAgICAgICAgdGhpcy5fY29ubmVjdGlvbnMgPSBuZXcgZWMyLkNvbm5lY3Rpb25zKHtcbiAgICAgICAgICAgIHNlY3VyaXR5R3JvdXBzOiBhdHRycy5zZWN1cml0eUdyb3VwcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0ZWRCZWRyb2NrQWdlbnRSdW50aW1lKHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBAYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBBUk4gb2YgdGhpcyBhZ2VudCBydW50aW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRSdW50aW1lQXJuOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgSUQgb2YgdGhpcyBhZ2VudCBydW50aW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRSdW50aW1lSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEBhdHRyaWJ1dGVcbiAgICogQHJldHVybnMgYSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhpcyBhZ2VudCBydW50aW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRSdW50aW1lTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcm9sZTogaWFtLklSb2xlO1xuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgdmVyc2lvbiBvZiB0aGlzIGFnZW50IHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVWZXJzaW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHN0YXR1cyBvZiB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBAYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBzdGF0dXMgb2YgdGhpcyBhZ2VudCBydW50aW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRTdGF0dXM/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBkZXNjcmlwdGlvbiBmb3IgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgYWdlbnQgcnVudGltZSB3YXMgY3JlYXRlZFxuICAgKiBAYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiB0aW1lc3RhbXAgb2YgdGhpcyBhZ2VudCBydW50aW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSBhZ2VudCBydW50aW1lIHdhcyBsYXN0IHVwZGF0ZWRcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgbGFzdCB1cGRhdGUgdGltZXN0YW1wIG9mIHRoaXMgYWdlbnQgcnVudGltZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGxhc3RVcGRhdGVkQXQ/OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG4gIHByaXZhdGUgcmVhZG9ubHkgcnVudGltZVJlc291cmNlOiBiZWRyb2NrYWdlbnRjb3JlLkNmblJ1bnRpbWU7XG4gIC8qKlxuICAgKiBUaGUgYXJ0aWZhY3QgY29uZmlndXJhdGlvbiBmb3IgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVBcnRpZmFjdDogQWdlbnRSdW50aW1lQXJ0aWZhY3Q7XG4gIHByaXZhdGUgcmVhZG9ubHkgbmV0d29ya0NvbmZpZ3VyYXRpb246IFJ1bnRpbWVOZXR3b3JrQ29uZmlndXJhdGlvbiA7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvdG9jb2xDb25maWd1cmF0aW9uOiBQcm90b2NvbFR5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0aG9yaXplckNvbmZpZ3VyYXRpb24/OiBSdW50aW1lQXV0aG9yaXplckNvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgbGlmZWN5Y2xlQ29uZmlndXJhdGlvbj86IExpZmVjeWNsZUNvbmZpZ3VyYXRpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJ1bnRpbWVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLy8gTWF4aW11bSBuYW1lIGxlbmd0aCBvZiA0OCBjaGFyYWN0ZXJzXG4gICAgICAvLyBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWJlZHJvY2thZ2VudGNvcmUtcnVudGltZS5odG1sI2Nmbi1iZWRyb2NrYWdlbnRjb3JlLXJ1bnRpbWUtYWdlbnRydW50aW1lbmFtZVxuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcy5ydW50aW1lTmFtZSA/P1xuICAgICAgICBMYXp5LnN0cmluZyh7XG4gICAgICAgICAgcHJvZHVjZTogKCkgPT4gTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHsgbWF4TGVuZ3RoOiA0OCB9KSxcbiAgICAgICAgfSksXG4gICAgfSk7XG5cbiAgICAvLyBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIHRoaXMuYWdlbnRSdW50aW1lTmFtZSA9IHRoaXMucGh5c2ljYWxOYW1lO1xuICAgIHRoaXMudmFsaWRhdGVSdW50aW1lTmFtZSgpO1xuXG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IHByb3BzLmRlc2NyaXB0aW9uO1xuICAgIGlmICh0aGlzLmRlc2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlRGVzY3JpcHRpb24oKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZW52aXJvbm1lbnRWYXJpYWJsZXMpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVFbnZpcm9ubWVudFZhcmlhYmxlcyhwcm9wcy5lbnZpcm9ubWVudFZhcmlhYmxlcyk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnRhZ3MpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVUYWdzKHByb3BzLnRhZ3MpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5yZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbikge1xuICAgICAgdGhpcy52YWxpZGF0ZVJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKHByb3BzLnJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLmxpZmVjeWNsZUNvbmZpZ3VyYXRpb24gPSBwcm9wcy5saWZlY3ljbGVDb25maWd1cmF0aW9uID8ge1xuICAgICAgaWRsZVJ1bnRpbWVTZXNzaW9uVGltZW91dDogcHJvcHMubGlmZWN5Y2xlQ29uZmlndXJhdGlvbj8uaWRsZVJ1bnRpbWVTZXNzaW9uVGltZW91dCxcbiAgICAgIG1heExpZmV0aW1lOiBwcm9wcy5saWZlY3ljbGVDb25maWd1cmF0aW9uPy5tYXhMaWZldGltZSxcbiAgICB9IDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRoaXMubGlmZWN5Y2xlQ29uZmlndXJhdGlvbikge1xuICAgICAgdGhpcy52YWxpZGF0ZUxpZmVjeWNsZUNvbmZpZ3VyYXRpb24odGhpcy5saWZlY3ljbGVDb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZXhlY3V0aW9uUm9sZSkge1xuICAgICAgdGhpcy5yb2xlID0gcHJvcHMuZXhlY3V0aW9uUm9sZTtcbiAgICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLmV4ZWN1dGlvblJvbGUucm9sZUFybikpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZVJvbGVBcm4ocHJvcHMuZXhlY3V0aW9uUm9sZS5yb2xlQXJuKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsICdFeGVjdXRpb25Sb2xlJywge1xuICAgICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnYmVkcm9jay1hZ2VudGNvcmUuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0V4ZWN1dGlvbiByb2xlIGZvciBCZWRyb2NrIEFnZW50IENvcmUgUnVudGltZScsXG4gICAgICAgIG1heFNlc3Npb25EdXJhdGlvbjogRHVyYXRpb24uaG91cnMoOCksXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5hZGRFeGVjdXRpb25Sb2xlUGVybWlzc2lvbnMoKTtcblxuICAgIHRoaXMuZ3JhbnRQcmluY2lwYWwgPSB0aGlzLnJvbGU7XG4gICAgdGhpcy5hZ2VudFJ1bnRpbWVBcnRpZmFjdCA9IHByb3BzLmFnZW50UnVudGltZUFydGlmYWN0O1xuICAgIC8vIFNldCB1cCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gd2l0aCBWUEMgc3VwcG9ydFxuICAgIHRoaXMubmV0d29ya0NvbmZpZ3VyYXRpb24gPSBwcm9wcy5uZXR3b3JrQ29uZmlndXJhdGlvbiA/PyBSdW50aW1lTmV0d29ya0NvbmZpZ3VyYXRpb24udXNpbmdQdWJsaWNOZXR3b3JrKCk7XG4gICAgLy8gU2V0IGNvbm5lY3Rpb25zIC0gY3JlYXRlIGEgc2hhcmVkIGNvbm5lY3Rpb25zIG9iamVjdFxuICAgIGlmICh0aGlzLm5ldHdvcmtDb25maWd1cmF0aW9uLmNvbm5lY3Rpb25zKSB7XG4gICAgICAvLyBVc2UgdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbidzIGNvbm5lY3Rpb25zIGFzIHRoZSBzaGFyZWQgb2JqZWN0XG4gICAgICB0aGlzLl9jb25uZWN0aW9ucyA9IHRoaXMubmV0d29ya0NvbmZpZ3VyYXRpb24uY29ubmVjdGlvbnM7XG4gICAgfVxuICAgIHRoaXMucHJvdG9jb2xDb25maWd1cmF0aW9uID0gcHJvcHMucHJvdG9jb2xDb25maWd1cmF0aW9uID8/IFByb3RvY29sVHlwZS5IVFRQO1xuICAgIHRoaXMuYXV0aG9yaXplckNvbmZpZ3VyYXRpb24gPSBwcm9wcy5hdXRob3JpemVyQ29uZmlndXJhdGlvbjtcblxuICAgIGNvbnN0IGNmblByb3BzOiBhbnkgPSB7XG4gICAgICBhZ2VudFJ1bnRpbWVOYW1lOiB0aGlzLmFnZW50UnVudGltZU5hbWUsXG4gICAgICByb2xlQXJuOiB0aGlzLnJvbGUucm9sZUFybixcbiAgICAgIGFnZW50UnVudGltZUFydGlmYWN0OiBMYXp5LmFueSh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+IHRoaXMucmVuZGVyQWdlbnRSdW50aW1lQXJ0aWZhY3QoKSxcbiAgICAgIH0pLFxuICAgICAgbmV0d29ya0NvbmZpZ3VyYXRpb246IExhenkuYW55KHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5uZXR3b3JrQ29uZmlndXJhdGlvbi5fcmVuZGVyKHRoaXMuX2Nvbm5lY3Rpb25zKSxcbiAgICAgIH0pLFxuICAgICAgcHJvdG9jb2xDb25maWd1cmF0aW9uOiBMYXp5LnN0cmluZyh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+IHRoaXMucHJvdG9jb2xDb25maWd1cmF0aW9uLFxuICAgICAgfSksXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBlbnZpcm9ubWVudFZhcmlhYmxlczogTGF6eS5hbnkoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PiB0aGlzLnJlbmRlckVudmlyb25tZW50VmFyaWFibGVzKHByb3BzLmVudmlyb25tZW50VmFyaWFibGVzKSxcbiAgICAgIH0pLFxuICAgICAgdGFnczogcHJvcHMudGFncyA/PyB7fSxcbiAgICAgIGxpZmVjeWNsZUNvbmZpZ3VyYXRpb246IHRoaXMucmVuZGVyTGlmZWN5Y2xlQ29uZmlndXJhdGlvbigpLFxuICAgIH07XG4gICAgaWYgKHByb3BzLnJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKSB7XG4gICAgICBjZm5Qcm9wcy5yZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbiA9IHRoaXMucmVuZGVyUmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24ocHJvcHMucmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24pO1xuICAgIH1cbiAgICBpZiAocHJvcHMuYXV0aG9yaXplckNvbmZpZ3VyYXRpb24pIHtcbiAgICAgIGNmblByb3BzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uID0gTGF6eS5hbnkoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PiB0aGlzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uIS5fcmVuZGVyKCksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnJ1bnRpbWVSZXNvdXJjZSA9IG5ldyBiZWRyb2NrYWdlbnRjb3JlLkNmblJ1bnRpbWUodGhpcywgJ1Jlc291cmNlJywgY2ZuUHJvcHMgYXMgYmVkcm9ja2FnZW50Y29yZS5DZm5SdW50aW1lUHJvcHMpO1xuXG4gICAgLy8gQWRkIGRlcGVuZGVuY3kgb24gdGhlIHJvbGUgKGZvciBib3RoIGN1c3RvbSBhbmQgYXV0by1jcmVhdGVkIHJvbGVzKVxuICAgIC8vIFRoaXMgZW5zdXJlcyB0aGUgUnVudGltZSB3YWl0cyBmb3IgdGhlIHJvbGUgYW5kIGFsbCBpdHMgcG9saWNpZXMgKGluY2x1ZGluZyBFQ1IgcGVybWlzc2lvbnMpIHRvIGJlIGNyZWF0ZWRcbiAgICB0aGlzLnJ1bnRpbWVSZXNvdXJjZS5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5yb2xlKTtcblxuICAgIHRoaXMuYWdlbnRSdW50aW1lSWQgPSB0aGlzLnJ1bnRpbWVSZXNvdXJjZS5hdHRyQWdlbnRSdW50aW1lSWQ7XG4gICAgdGhpcy5hZ2VudFJ1bnRpbWVBcm4gPSB0aGlzLnJ1bnRpbWVSZXNvdXJjZS5hdHRyQWdlbnRSdW50aW1lQXJuO1xuICAgIHRoaXMuYWdlbnRTdGF0dXMgPSB0aGlzLnJ1bnRpbWVSZXNvdXJjZS5hdHRyU3RhdHVzO1xuICAgIHRoaXMuYWdlbnRSdW50aW1lVmVyc2lvbiA9IHRoaXMucnVudGltZVJlc291cmNlLmF0dHJBZ2VudFJ1bnRpbWVWZXJzaW9uO1xuICAgIHRoaXMuY3JlYXRlZEF0ID0gdGhpcy5ydW50aW1lUmVzb3VyY2UuYXR0ckNyZWF0ZWRBdDtcbiAgICB0aGlzLmxhc3RVcGRhdGVkQXQgPSB0aGlzLnJ1bnRpbWVSZXNvdXJjZS5hdHRyTGFzdFVwZGF0ZWRBdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIENsb3VkRm9ybWF0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJFbnZpcm9ubWVudFZhcmlhYmxlcyhlbnZWYXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IGFueSB7XG4gICAgaWYgKCFlbnZWYXJzIHx8IE9iamVjdC5rZXlzKGVudlZhcnMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGVudlZhcnM7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBwcm9wZXIgcGVybWlzc2lvbnMgdG8gdGhlIGV4ZWN1dGlvbiByb2xlIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBCYXNlZCBvbjogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9ydW50aW1lLXBlcm1pc3Npb25zLmh0bWxcbiAgICovXG4gIHByaXZhdGUgYWRkRXhlY3V0aW9uUm9sZVBlcm1pc3Npb25zKCkge1xuICAgIGNvbnN0IHJlZ2lvbiA9IFN0YWNrLm9mKHRoaXMpLnJlZ2lvbjtcbiAgICBjb25zdCBhY2NvdW50ID0gU3RhY2sub2YodGhpcykuYWNjb3VudDtcblxuICAgIC8vIENsb3VkV2F0Y2ggTG9ncyAtIExvZyBHcm91cCBvcGVyYXRpb25zXG4gICAgdGhpcy5yb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogJ0xvZ0dyb3VwQWNjZXNzJyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFJVTlRJTUVfTE9HU19HUk9VUF9BQ1RJT05TLFxuICAgICAgcmVzb3VyY2VzOiBbYGFybjoke1N0YWNrLm9mKHRoaXMpLnBhcnRpdGlvbn06bG9nczoke3JlZ2lvbn06JHthY2NvdW50fTpsb2ctZ3JvdXA6L2F3cy9iZWRyb2NrLWFnZW50Y29yZS9ydW50aW1lcy8qYF0sXG4gICAgfSkpO1xuXG4gICAgLy8gQ2xvdWRXYXRjaCBMb2dzIC0gRGVzY3JpYmUgYWxsIGxvZyBncm91cHNcbiAgICB0aGlzLnJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiAnRGVzY3JpYmVMb2dHcm91cHMnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogUlVOVElNRV9MT0dTX0RFU0NSSUJFX0FDVElPTlMsXG4gICAgICByZXNvdXJjZXM6IFtgYXJuOiR7U3RhY2sub2YodGhpcykucGFydGl0aW9ufTpsb2dzOiR7cmVnaW9ufToke2FjY291bnR9OmxvZy1ncm91cDoqYF0sXG4gICAgfSkpO1xuXG4gICAgLy8gQ2xvdWRXYXRjaCBMb2dzIC0gTG9nIFN0cmVhbSBvcGVyYXRpb25zXG4gICAgdGhpcy5yb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogJ0xvZ1N0cmVhbUFjY2VzcycsXG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBSVU5USU1FX0xPR1NfU1RSRUFNX0FDVElPTlMsXG4gICAgICByZXNvdXJjZXM6IFtgYXJuOiR7U3RhY2sub2YodGhpcykucGFydGl0aW9ufTpsb2dzOiR7cmVnaW9ufToke2FjY291bnR9OmxvZy1ncm91cDovYXdzL2JlZHJvY2stYWdlbnRjb3JlL3J1bnRpbWVzLyo6bG9nLXN0cmVhbToqYF0sXG4gICAgfSkpO1xuXG4gICAgLy8gWC1SYXkgVHJhY2luZyAtIG11c3QgYmUgKiBmb3IgdHJhY2luZ1xuICAgIHRoaXMucm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdYUmF5QWNjZXNzJyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFJVTlRJTUVfWFJBWV9BQ1RJT05TLFxuICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICB9KSk7XG5cbiAgICAvLyBDbG91ZFdhdGNoIE1ldHJpY3MgLSBzY29wZWQgdG8gYmVkcm9jay1hZ2VudGNvcmUgbmFtZXNwYWNlXG4gICAgdGhpcy5yb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogJ0Nsb3VkV2F0Y2hNZXRyaWNzJyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFJVTlRJTUVfQ0xPVURXQVRDSF9NRVRSSUNTX0FDVElPTlMsXG4gICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAnY2xvdWR3YXRjaDpuYW1lc3BhY2UnOiBSVU5USU1FX0NMT1VEV0FUQ0hfTkFNRVNQQUNFLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KSk7XG5cbiAgICAvLyBCZWRyb2NrIEFnZW50Q29yZSBXb3JrbG9hZCBJZGVudGl0eSBBY2Nlc3NcbiAgICAvLyBOb3RlOiBUaGUgYWdlbnQgbmFtZSB3aWxsIGJlIGRldGVybWluZWQgYXQgcnVudGltZSwgc28gd2UgdXNlIGEgd2lsZGNhcmQgcGF0dGVyblxuICAgIHRoaXMucm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdHZXRBZ2VudEFjY2Vzc1Rva2VuJyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFJVTlRJTUVfV09SS0xPQURfSURFTlRJVFlfQUNUSU9OUyxcbiAgICAgIHJlc291cmNlczogW1xuICAgICAgICBgYXJuOiR7U3RhY2sub2YodGhpcykucGFydGl0aW9ufTpiZWRyb2NrLWFnZW50Y29yZToke3JlZ2lvbn06JHthY2NvdW50fTp3b3JrbG9hZC1pZGVudGl0eS1kaXJlY3RvcnkvZGVmYXVsdGAsXG4gICAgICAgIGBhcm46JHtTdGFjay5vZih0aGlzKS5wYXJ0aXRpb259OmJlZHJvY2stYWdlbnRjb3JlOiR7cmVnaW9ufToke2FjY291bnR9Ondvcmtsb2FkLWlkZW50aXR5LWRpcmVjdG9yeS9kZWZhdWx0L3dvcmtsb2FkLWlkZW50aXR5LypgLFxuICAgICAgXSxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgYXJ0aWZhY3QgY29uZmlndXJhdGlvbiBmb3IgQ2xvdWRGb3JtYXRpb25cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHJlbmRlckFnZW50UnVudGltZUFydGlmYWN0KCk6IGFueSB7XG4gICAgLy8gc2V0IHBlcm1pc3Npb24gd2l0aCBiaW5kXG4gICAgdGhpcy5hZ2VudFJ1bnRpbWVBcnRpZmFjdC5iaW5kKHRoaXMsIHRoaXMpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuYWdlbnRSdW50aW1lQXJ0aWZhY3QuX3JlbmRlcigpO1xuICAgIGlmICgoY29uZmlnIGFzIGFueSkuY29kZSkgeyAvLyBTM0ltYWdlXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2RlQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgIGNvZGU6IChjb25maWcgYXMgYW55KS5jb2RlLFxuICAgICAgICAgIHJ1bnRpbWU6IChjb25maWcgYXMgYW55KS5ydW50aW1lLFxuICAgICAgICAgIGVudHJ5UG9pbnQ6IChjb25maWcgYXMgYW55KS5lbnRyeVBvaW50LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRWNySW1hZ2Ugb3IgQXNzZXRJbWFnZVxuICAgICAgY29uc3QgY29udGFpbmVyVXJpID0gKGNvbmZpZyBhcyBhbnkpLmNvbnRhaW5lclVyaTtcbiAgICAgIGlmIChjb250YWluZXJVcmkpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUNvbnRhaW5lclVyaShjb250YWluZXJVcmkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGFpbmVyQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgIGNvbnRhaW5lclVyaTogY29udGFpbmVyVXJpLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgcmVxdWVzdCBoZWFkZXIgY29uZmlndXJhdGlvbiBmb3IgQ2xvdWRGb3JtYXRpb25cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHJlbmRlclJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uPzogUmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24pOiBhbnkge1xuICAgIGlmICghcmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24/LmFsbG93bGlzdGVkSGVhZGVycykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJBbGxvd2xpc3Q6IHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uLmFsbG93bGlzdGVkSGVhZGVycyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGxpZmVjeWNsZSBjb25maWd1cmF0aW9uIGZvciBDbG91ZEZvcm1hdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgcmVuZGVyTGlmZWN5Y2xlQ29uZmlndXJhdGlvbigpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBpZGxlUnVudGltZVNlc3Npb25UaW1lb3V0OiB0aGlzLmxpZmVjeWNsZUNvbmZpZ3VyYXRpb24/LmlkbGVSdW50aW1lU2Vzc2lvblRpbWVvdXQ/LnRvU2Vjb25kcygpLFxuICAgICAgbWF4TGlmZXRpbWU6IHRoaXMubGlmZWN5Y2xlQ29uZmlndXJhdGlvbj8ubWF4TGlmZXRpbWU/LnRvU2Vjb25kcygpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSByZXF1ZXN0IGhlYWRlciBjb25maWd1cmF0aW9uXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uOiBSZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGFsbEVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAocmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24uYWxsb3dsaXN0ZWRIZWFkZXJzKSB7XG4gICAgICBpZiAocmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24uYWxsb3dsaXN0ZWRIZWFkZXJzLmxlbmd0aCA8IDEgfHwgcmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24uYWxsb3dsaXN0ZWRIZWFkZXJzLmxlbmd0aCA+IDIwKSB7XG4gICAgICAgIGFsbEVycm9ycy5wdXNoKCdSZXF1ZXN0IGhlYWRlciBhbGxvdyBsaXN0IGNvbnRhaW4gYmV0d2VlbiAxIGFuZCAyMCBoZWFkZXJzJyk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgaGVhZGVyIG9mIHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uLmFsbG93bGlzdGVkSGVhZGVycykge1xuICAgICAgICAvLyBWYWxpZGF0ZSBsZW5ndGhcbiAgICAgICAgY29uc3QgbGVuZ3RoRXJyb3JzID0gdmFsaWRhdGVTdHJpbmdGaWVsZCh7XG4gICAgICAgICAgdmFsdWU6IGhlYWRlcixcbiAgICAgICAgICBmaWVsZE5hbWU6ICdSZXF1ZXN0IGhlYWRlcicsXG4gICAgICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgICAgIG1heExlbmd0aDogMjU2LFxuICAgICAgICB9KTtcbiAgICAgICAgYWxsRXJyb3JzLnB1c2goLi4ubGVuZ3RoRXJyb3JzKTtcblxuICAgICAgICBjb25zdCBwYXR0ZXJuRXJyb3JzID0gdmFsaWRhdGVGaWVsZFBhdHRlcm4oXG4gICAgICAgICAgaGVhZGVyLFxuICAgICAgICAgICdSZXF1ZXN0IGhlYWRlcicsXG4gICAgICAgICAgLyhBdXRob3JpemF0aW9ufFgtQW16bi1CZWRyb2NrLUFnZW50Q29yZS1SdW50aW1lLUN1c3RvbS1bYS16QS1aMC05LV0rKS8sXG4gICAgICAgICAgJ1JlcXVlc3QgaGVhZGVyIG11c3QgY29udGFpbiBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGFuZCBoeXBoZW5zJyxcbiAgICAgICAgKTtcbiAgICAgICAgYWxsRXJyb3JzLnB1c2goLi4ucGF0dGVybkVycm9ycyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhbGxFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgSW52YWxpZFJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uYCwgYWxsRXJyb3JzLmpvaW4oJ1xcbicpLCB0aGlzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBsaWZlY3ljbGUgY29uZmlndXJhdGlvblxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVMaWZlY3ljbGVDb25maWd1cmF0aW9uKGxpZmVjeWNsZUNvbmZpZ3VyYXRpb246IExpZmVjeWNsZUNvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICBpZiAobGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5pZGxlUnVudGltZVNlc3Npb25UaW1lb3V0ICYmICFsaWZlY3ljbGVDb25maWd1cmF0aW9uLmlkbGVSdW50aW1lU2Vzc2lvblRpbWVvdXQuaXNVbnJlc29sdmVkKCkpIHtcbiAgICAgIGlmIChsaWZlY3ljbGVDb25maWd1cmF0aW9uLmlkbGVSdW50aW1lU2Vzc2lvblRpbWVvdXQudG9TZWNvbmRzKCkgPCBMSUZFQ1lDTEVfTUlOX1RJTUVPVVQudG9TZWNvbmRzKClcbiAgICAgICAgfHwgbGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5pZGxlUnVudGltZVNlc3Npb25UaW1lb3V0LnRvU2Vjb25kcygpID4gTElGRUNZQ0xFX01BWF9MSUZFVElNRS50b1NlY29uZHMoKSkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBJbnZhbGlkSWRsZVJ1bnRpbWVTZXNzaW9uVGltZW91dGAsIGBJZGxlIHJ1bnRpbWUgc2Vzc2lvbiB0aW1lb3V0IG11c3QgYmUgYmV0d2VlbiAke0xJRkVDWUNMRV9NSU5fVElNRU9VVC50b1NlY29uZHMoKX0gc2Vjb25kcyBhbmQgJHtMSUZFQ1lDTEVfTUFYX0xJRkVUSU1FLnRvU2Vjb25kcygpfSBzZWNvbmRzYCwgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChsaWZlY3ljbGVDb25maWd1cmF0aW9uLm1heExpZmV0aW1lICYmICFsaWZlY3ljbGVDb25maWd1cmF0aW9uLm1heExpZmV0aW1lLmlzVW5yZXNvbHZlZCgpKSB7XG4gICAgICBpZiAobGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5tYXhMaWZldGltZS50b1NlY29uZHMoKSA8IExJRkVDWUNMRV9NSU5fVElNRU9VVC50b1NlY29uZHMoKVxuICAgICAgICB8fCBsaWZlY3ljbGVDb25maWd1cmF0aW9uLm1heExpZmV0aW1lLnRvU2Vjb25kcygpID4gTElGRUNZQ0xFX01BWF9MSUZFVElNRS50b1NlY29uZHMoKSkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBJbnZhbGlkTWF4TGlmZXRpbWVgLCBgTWF4aW11bSBsaWZldGltZSBtdXN0IGJlIGJldHdlZW4gJHtMSUZFQ1lDTEVfTUlOX1RJTUVPVVQudG9TZWNvbmRzKCl9IHNlY29uZHMgYW5kICR7TElGRUNZQ0xFX01BWF9MSUZFVElNRS50b1NlY29uZHMoKX0gc2Vjb25kc2AsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHJ1bnRpbWUgbmFtZSBmb3JtYXRcbiAgICogUGF0dGVybjogXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9JFxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVSdW50aW1lTmFtZSgpOiB2b2lkIHtcbiAgICAvLyBTa2lwIHZhbGlkYXRpb24gaWYgdGhlIG5hbWUgY29udGFpbnMgQ0RLIHRva2VucyAodW5yZXNvbHZlZCB2YWx1ZXMpXG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZCh0aGlzLmFnZW50UnVudGltZU5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbGVuZ3RoXG4gICAgY29uc3QgbGVuZ3RoRXJyb3JzID0gdmFsaWRhdGVTdHJpbmdGaWVsZCh7XG4gICAgICB2YWx1ZTogdGhpcy5hZ2VudFJ1bnRpbWVOYW1lLFxuICAgICAgZmllbGROYW1lOiAnUnVudGltZSBuYW1lJyxcbiAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgIG1heExlbmd0aDogNDgsXG4gICAgfSk7XG5cbiAgICAvLyBWYWxpZGF0ZSBwYXR0ZXJuXG4gICAgY29uc3QgcGF0dGVybkVycm9ycyA9IHZhbGlkYXRlRmllbGRQYXR0ZXJuKFxuICAgICAgdGhpcy5hZ2VudFJ1bnRpbWVOYW1lLFxuICAgICAgJ1J1bnRpbWUgbmFtZScsXG4gICAgICAvXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9JC8sXG4gICAgICAnUnVudGltZSBuYW1lIG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY29udGFpbiBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGFuZCB1bmRlcnNjb3JlcycsXG4gICAgKTtcblxuICAgIC8vIENvbWJpbmUgYW5kIHRocm93IGlmIGFueSBlcnJvcnNcbiAgICBjb25zdCBhbGxFcnJvcnMgPSBbLi4ubGVuZ3RoRXJyb3JzLCAuLi5wYXR0ZXJuRXJyb3JzXTtcbiAgICBpZiAoYWxsRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YEludmFsaWRSdW50aW1lTmFtZWAsIGFsbEVycm9ycy5qb2luKCdcXG4nKSwgdGhpcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgZGVzY3JpcHRpb24gZm9ybWF0XG4gICAqIE11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMjAwIGNoYXJhY3RlcnMgKHBlciBDbG91ZEZvcm1hdGlvbiBzcGVjaWZpY2F0aW9uKVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVEZXNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICAvLyBTa2lwIHZhbGlkYXRpb24gaWYgdGhlIGRlc2NyaXB0aW9uIGNvbnRhaW5zIENESyB0b2tlbnMgKHVucmVzb2x2ZWQgdmFsdWVzKVxuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQodGhpcy5kZXNjcmlwdGlvbikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGVTdHJpbmdGaWVsZCh7XG4gICAgICAgIHZhbHVlOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgICBmaWVsZE5hbWU6ICdEZXNjcmlwdGlvbicsXG4gICAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgICAgbWF4TGVuZ3RoOiAxMjAwLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBJbnZhbGlkRGVzY3JpcHRpb25gLCBlcnJvcnMuam9pbignXFxuJyksIHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAqIC0gTWF4aW11bSA1MCBlbnRyaWVzXG4gICAqIC0gS2V5OiAxLTEwMCBjaGFyYWN0ZXJzXG4gICAqIC0gVmFsdWU6IDAtMjA0OCBjaGFyYWN0ZXJzIChwZXIgQ2xvdWRGb3JtYXRpb24gc3BlY2lmaWNhdGlvbilcbiAgICogQHRocm93cyBFcnJvciBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlRW52aXJvbm1lbnRWYXJpYWJsZXMoZW52VmFyczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhlbnZWYXJzKTtcblxuICAgIC8vIFZhbGlkYXRlIG51bWJlciBvZiBlbnRyaWVzICgwLTUwKVxuICAgIGlmIChlbnRyaWVzLmxlbmd0aCA+IDUwKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBsaXRgVG9vTWFueUVudmlyb25tZW50VmFyaWFibGVzYCxcbiAgICAgICAgYFRvbyBtYW55IGVudmlyb25tZW50IHZhcmlhYmxlczogJHtlbnRyaWVzLmxlbmd0aH0uIE1heGltdW0gYWxsb3dlZCBpcyA1MGAsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGVudHJpZXMpIHtcbiAgICAgIC8vIFNraXAgdmFsaWRhdGlvbiBpZiBrZXkgb3IgdmFsdWUgY29udGFpbnMgQ0RLIHRva2Vuc1xuICAgICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChrZXkpIHx8IFRva2VuLmlzVW5yZXNvbHZlZCh2YWx1ZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIGtleSBsZW5ndGhcbiAgICAgIGNvbnN0IGxlbmd0aEVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgICB2YWx1ZToga2V5LFxuICAgICAgICBmaWVsZE5hbWU6IGBFbnZpcm9ubWVudCB2YXJpYWJsZSBrZXkgJyR7a2V5fSdgLFxuICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICAgIG1heExlbmd0aDogMTAwLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIGtleSBwYXR0ZXJuXG4gICAgICBjb25zdCBwYXR0ZXJuRXJyb3JzID0gdmFsaWRhdGVGaWVsZFBhdHRlcm4oXG4gICAgICAgIGtleSxcbiAgICAgICAgYEVudmlyb25tZW50IHZhcmlhYmxlIGtleSAnJHtrZXl9J2AsXG4gICAgICAgIC9eW2EtekEtWl9dW2EtekEtWjAtOV9dKiQvLFxuICAgICAgICBgRW52aXJvbm1lbnQgdmFyaWFibGUga2V5ICcke2tleX0nIG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBvciB1bmRlcnNjb3JlIGFuZCBjb250YWluIG9ubHkgbGV0dGVycywgbnVtYmVycywgYW5kIHVuZGVyc2NvcmVzYCxcbiAgICAgICk7XG5cbiAgICAgIC8vIENvbWJpbmUgYW5kIHRocm93IGlmIGFueSBlcnJvcnNcbiAgICAgIGNvbnN0IGFsbEVycm9ycyA9IFsuLi5sZW5ndGhFcnJvcnMsIC4uLnBhdHRlcm5FcnJvcnNdO1xuICAgICAgaWYgKGFsbEVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YEludmFsaWRFbnZpcm9ubWVudFZhcmlhYmxlS2V5YCwgYWxsRXJyb3JzLmpvaW4oJ1xcbicpLCB0aGlzKTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgdmFsdWUgbGVuZ3RoICgwLTIwNDggY2hhcmFjdGVycyBwZXIgQ2xvdWRGb3JtYXRpb24pXG4gICAgICBpZiAodmFsdWUubGVuZ3RoID4gMjA0OCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGxpdGBJbnZhbGlkRW52aXJvbm1lbnRWYXJpYWJsZVZhbHVlYCxcbiAgICAgICAgICBgSW52YWxpZCBlbnZpcm9ubWVudCB2YXJpYWJsZSB2YWx1ZSBsZW5ndGggZm9yIGtleSAnJHtrZXl9JzogJHt2YWx1ZS5sZW5ndGh9IGNoYXJhY3RlcnMuIGAgK1xuICAgICAgICAgICdWYWx1ZXMgbXVzdCBub3QgZXhjZWVkIDIwNDggY2hhcmFjdGVycycsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSB0YWdzIGZvcm1hdFxuICAgKiBAcGFyYW0gdGFncyBUaGUgdGFncyBvYmplY3QgdG8gdmFsaWRhdGVcbiAgICogQHRocm93cyBFcnJvciBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlVGFncyh0YWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KTogdm9pZCB7XG4gICAgLy8gVmFsaWRhdGUgZWFjaCB0YWcga2V5IGFuZCB2YWx1ZVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRhZ3MpKSB7XG4gICAgICAvLyBTa2lwIHZhbGlkYXRpb24gaWYga2V5IG9yIHZhbHVlIGNvbnRhaW5zIENESyB0b2tlbnNcbiAgICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoa2V5KSB8fCBUb2tlbi5pc1VucmVzb2x2ZWQodmFsdWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSB0YWcga2V5IGxlbmd0aFxuICAgICAgY29uc3Qga2V5TGVuZ3RoRXJyb3JzID0gdmFsaWRhdGVTdHJpbmdGaWVsZCh7XG4gICAgICAgIHZhbHVlOiBrZXksXG4gICAgICAgIGZpZWxkTmFtZTogYFRhZyBrZXkgXCIke2tleX1cImAsXG4gICAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgICAgbWF4TGVuZ3RoOiAyNTYsXG4gICAgICB9KTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGFnIGtleSBwYXR0ZXJuXG4gICAgICBjb25zdCBrZXlQYXR0ZXJuRXJyb3JzID0gdmFsaWRhdGVGaWVsZFBhdHRlcm4oXG4gICAgICAgIGtleSxcbiAgICAgICAgYFRhZyBrZXkgXCIke2tleX1cImAsXG4gICAgICAgIC9eW2EtekEtWjAtOVxccy5fOi89K0AtXSokLyxcbiAgICAgICAgYFRhZyBrZXkgXCIke2tleX1cIiBjYW4gb25seSBjb250YWluIGxldHRlcnMgKGEteiwgQS1aKSwgbnVtYmVycyAoMC05KSwgc3BhY2VzLCBhbmQgc3BlY2lhbCBjaGFyYWN0ZXJzICguXzovPStALSlgLFxuICAgICAgKTtcblxuICAgICAgLy8gQ29tYmluZSBrZXkgZXJyb3JzIGFuZCB0aHJvdyBpZiBhbnlcbiAgICAgIGNvbnN0IGtleUVycm9ycyA9IFsuLi5rZXlMZW5ndGhFcnJvcnMsIC4uLmtleVBhdHRlcm5FcnJvcnNdO1xuICAgICAgaWYgKGtleUVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YEludmFsaWRUYWdLZXlgLCBrZXlFcnJvcnMuam9pbignXFxuJyksIHRoaXMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBOdWxsVGFnVmFsdWVgLCBgVGFnIHZhbHVlIGZvciBrZXkgXCIke2tleX1cIiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWRgLCB0aGlzKTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgdGFnIHZhbHVlIGxlbmd0aFxuICAgICAgY29uc3QgdmFsdWVMZW5ndGhFcnJvcnMgPSB2YWxpZGF0ZVN0cmluZ0ZpZWxkKHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBmaWVsZE5hbWU6IGBUYWcgdmFsdWUgZm9yIGtleSBcIiR7a2V5fVwiYCxcbiAgICAgICAgbWluTGVuZ3RoOiAwLFxuICAgICAgICBtYXhMZW5ndGg6IDI1NixcbiAgICAgIH0pO1xuXG4gICAgICAvLyBWYWxpZGF0ZSB0YWcgdmFsdWUgcGF0dGVyblxuICAgICAgY29uc3QgdmFsdWVQYXR0ZXJuRXJyb3JzID0gdmFsaWRhdGVGaWVsZFBhdHRlcm4oXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBgVGFnIHZhbHVlIGZvciBrZXkgXCIke2tleX1cImAsXG4gICAgICAgIC9eW2EtekEtWjAtOVxccy5fOi89K0AtXSokLyxcbiAgICAgICAgYFRhZyB2YWx1ZSBmb3Iga2V5IFwiJHtrZXl9XCIgY2FuIG9ubHkgY29udGFpbiBsZXR0ZXJzIChhLXosIEEtWiksIG51bWJlcnMgKDAtOSksIHNwYWNlcywgYW5kIHNwZWNpYWwgY2hhcmFjdGVycyAoLl86Lz0rQC0pYCxcbiAgICAgICk7XG5cbiAgICAgIC8vIENvbWJpbmUgdmFsdWUgZXJyb3JzIGFuZCB0aHJvdyBpZiBhbnlcbiAgICAgIGNvbnN0IHZhbHVlRXJyb3JzID0gWy4uLnZhbHVlTGVuZ3RoRXJyb3JzLCAuLi52YWx1ZVBhdHRlcm5FcnJvcnNdO1xuICAgICAgaWYgKHZhbHVlRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgSW52YWxpZFRhZ1ZhbHVlYCwgdmFsdWVFcnJvcnMuam9pbignXFxuJyksIHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGNvbnRhaW5lciBVUkkgZm9ybWF0XG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlQ29udGFpbmVyVXJpKHVyaTogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gU2tpcCB2YWxpZGF0aW9uIGlmIHRoZSBVUkkgY29udGFpbnMgQ0RLIHRva2VucyAodW5yZXNvbHZlZCB2YWx1ZXMpXG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZCh1cmkpKSB7XG4gICAgICAvLyBBZGQgYSB3YXJuaW5nIHRoYXQgdmFsaWRhdGlvbiB3aWxsIGJlIHNraXBwZWQgZm9yIHRva2VuLWJhc2VkIFVSSXNcbiAgICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZEluZm8oXG4gICAgICAgICdDb250YWluZXIgVVJJIHZhbGlkYXRpb24gc2tpcHBlZCBhcyBpdCBjb250YWlucyB1bnJlc29sdmVkIENESyB0b2tlbnMuICcgK1xuICAgICAgICAnVGhlIFVSSSB3aWxsIGJlIHZhbGlkYXRlZCBhdCBkZXBsb3ltZW50IHRpbWUuJyxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gT25seSB2YWxpZGF0ZSBpZiB0aGUgVVJJIGlzIGEgY29uY3JldGUgc3RyaW5nIChub3QgYSB0b2tlbilcbiAgICBjb25zdCBwYXR0ZXJuID0gL15cXGR7MTJ9XFwuZGtyXFwuZWNyXFwuKFthLXowLTktXSspXFwuYW1hem9uYXdzXFwuY29tXFwvKCg/OlthLXowLTldKyg/OlsuXy1dW2EtejAtOV0rKSpcXC8pKlthLXowLTldKyg/OlsuXy1dW2EtejAtOV0rKSopKFs6QF1cXFMrKSQvO1xuICAgIGlmICghcGF0dGVybi50ZXN0KHVyaSkpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGxpdGBJbnZhbGlkQ29udGFpbmVyVXJpYCxcbiAgICAgICAgYEludmFsaWQgY29udGFpbmVyIFVSSSBmb3JtYXQ6ICR7dXJpfS4gTXVzdCBiZSBhIHZhbGlkIEVDUiBVUkkgKGUuZy4sIDEyMzQ1Njc4OTAxMi5ka3IuZWNyLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tL215LWFnZW50OmxhdGVzdClgLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBJQU0gcm9sZSBBUk4gZm9ybWF0IGFuZCBzdHJ1Y3R1cmVcbiAgICogQHRocm93cyBFcnJvciBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUm9sZUFybihyb2xlQXJuOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBWYWxpZGF0ZSBiYXNpYyBBUk4gZm9ybWF0IGZvciBJQU0gcm9sZXNcbiAgICBjb25zdCBhcm5QYXR0ZXJuID0gL15hcm46W2EtelxcLV0rOmlhbTo6XFxkezEyfTpyb2xlXFwvW2EtekEtWjAtOSs9LC5AXFwtX1xcL10rJC87XG4gICAgaWYgKCFhcm5QYXR0ZXJuLnRlc3Qocm9sZUFybikpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGxpdGBJbnZhbGlkUm9sZUFybkZvcm1hdGAsXG4gICAgICAgIGBJbnZhbGlkIElBTSByb2xlIEFSTiBmb3JtYXQ6ICR7cm9sZUFybn0uIGAgK1xuICAgICAgICAnRXhwZWN0ZWQgZm9ybWF0OiBhcm46PHBhcnRpdGlvbj46aWFtOjo8YWNjb3VudC1pZD46cm9sZS88cm9sZS1uYW1lPiBvciBhcm46PHBhcnRpdGlvbj46aWFtOjo8YWNjb3VudC1pZD46cm9sZS88cGF0aD4vPHJvbGUtbmFtZT4nLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBQYXJzZSB0aGUgQVJOIGNvbXBvbmVudHMgdXNpbmcgQ0RLJ3MgQXJuLnNwbGl0KClcbiAgICAvLyBVc2UgU0xBU0hfUkVTT1VSQ0VfTkFNRSBmb3JtYXQgZm9yIElBTSByb2xlcyAod2hpY2ggdXNlIGZvcm1hdDogcm9sZS9yb2xlLW5hbWUgb3Igcm9sZS9wYXRoL3RvL3JvbGUtbmFtZSlcbiAgICBjb25zdCBhcm5Db21wb25lbnRzID0gQXJuLnNwbGl0KHJvbGVBcm4sIEFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FKTtcblxuICAgIGlmIChhcm5Db21wb25lbnRzLnNlcnZpY2UgIT09ICdpYW0nKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBJbnZhbGlkUm9sZUFyblNlcnZpY2VgLCBgSW52YWxpZCBzZXJ2aWNlIGluIEFSTjogJHthcm5Db21wb25lbnRzLnNlcnZpY2V9LiBFeHBlY3RlZCAnaWFtJyBmb3IgSUFNIHJvbGUgQVJOLmAsIHRoaXMpO1xuICAgIH1cblxuICAgIGNvbnN0IGFjY291bnRJZCA9IGFybkNvbXBvbmVudHMuYWNjb3VudDtcbiAgICBpZiAoIWFjY291bnRJZCB8fCAhL15cXGR7MTJ9JC8udGVzdChhY2NvdW50SWQpKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBJbnZhbGlkUm9sZUFybkFjY291bnRJZGAsIGBJbnZhbGlkIEFXUyBhY2NvdW50IElEIGluIHJvbGUgQVJOOiAke2FjY291bnRJZH0uIE11c3QgYmUgYSAxMi1kaWdpdCBudW1iZXIuYCwgdGhpcyk7XG4gICAgfVxuXG4gICAgLy8gRXh0cmFjdCByb2xlIG5hbWUgZnJvbSByZXNvdXJjZVxuICAgIC8vIEZvciBJQU0gcm9sZXMsIHJlc291cmNlIHdpbGwgYmUgXCJyb2xlXCIgYW5kIHJlc291cmNlTmFtZSB3aWxsIGJlIHRoZSByb2xlIG5hbWUgKHdpdGggb3B0aW9uYWwgcGF0aClcbiAgICBjb25zdCByZXNvdXJjZSA9IGFybkNvbXBvbmVudHMucmVzb3VyY2U7XG4gICAgY29uc3QgcmVzb3VyY2VOYW1lID0gYXJuQ29tcG9uZW50cy5yZXNvdXJjZU5hbWU7XG5cbiAgICBpZiAocmVzb3VyY2UgIT09ICdyb2xlJykge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgSW52YWxpZFJvbGVBcm5SZXNvdXJjZVR5cGVgLCBgSW52YWxpZCByZXNvdXJjZSB0eXBlIGluIEFSTjogJHtyZXNvdXJjZX0uIEV4cGVjdGVkICdyb2xlJyBmb3IgSUFNIHJvbGUgQVJOLmAsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICghcmVzb3VyY2VOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBNaXNzaW5nUm9sZU5hbWVgLCAnUm9sZSBuYW1lIGlzIG1pc3NpbmcgaW4gdGhlIEFSTicsIHRoaXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByb2xlUGF0aFBhcnRzID0gcmVzb3VyY2VOYW1lLnNwbGl0KCcvJyk7XG4gICAgICBjb25zdCByb2xlTmFtZSA9IHJvbGVQYXRoUGFydHNbcm9sZVBhdGhQYXJ0cy5sZW5ndGggLSAxXTtcblxuICAgICAgaWYgKHJvbGVOYW1lLmxlbmd0aCA+IDY0KSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YFJvbGVOYW1lVG9vTG9uZ2AsIGBSb2xlIG5hbWUgZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCBvZiA2NCBjaGFyYWN0ZXJzOiAke3JvbGVOYW1lfWAsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHN0YWNrQWNjb3VudCA9IFN0YWNrLm9mKHRoaXMpLmFjY291bnQ7XG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQoc3RhY2tBY2NvdW50KSAmJiBhY2NvdW50SWQgIT09IHN0YWNrQWNjb3VudCkge1xuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZyhcbiAgICAgICAgYElBTSByb2xlIGlzIGZyb20gYSBkaWZmZXJlbnQgYWNjb3VudCAoJHthY2NvdW50SWR9KSB0aGFuIHRoZSBzdGFjayBhY2NvdW50ICgke3N0YWNrQWNjb3VudH0pLiBgICtcbiAgICAgICAgJ0Vuc3VyZSBjcm9zcy1hY2NvdW50IHBlcm1pc3Npb25zIGFyZSBwcm9wZXJseSBjb25maWd1cmVkLicsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHRoZSByZWdpb24gKElBTSBpcyBnbG9iYWwsIHNvIHJlZ2lvbiBzaG91bGQgYmUgZW1wdHkpXG4gICAgY29uc3QgcmVnaW9uID0gYXJuQ29tcG9uZW50cy5yZWdpb247XG4gICAgY29uc3Qgc3RhY2tSZWdpb24gPSBTdGFjay5vZih0aGlzKS5yZWdpb247XG4gICAgaWYgKHJlZ2lvbiAmJiByZWdpb24gIT09ICcnICYmIHJlZ2lvbiAhPT0gc3RhY2tSZWdpb24gJiYgIVRva2VuLmlzVW5yZXNvbHZlZChzdGFja1JlZ2lvbikpIHtcbiAgICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZFdhcm5pbmcoXG4gICAgICAgIGBJQU0gcm9sZSBBUk4gY29udGFpbnMgYSByZWdpb24gKCR7cmVnaW9ufSkgdGhhdCBkb2Vzbid0IG1hdGNoIHRoZSBzdGFjayByZWdpb24gKCR7c3RhY2tSZWdpb259KS4gYCArXG4gICAgICAgICdJQU0gaXMgYSBnbG9iYWwgc2VydmljZSwgc28gdGhpcyBtaWdodCBiZSBpbnRlbnRpb25hbC4nLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGVuZHBvaW50IHRvIHRoaXMgcnVudGltZVxuICAgKiBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRoYXQgY3JlYXRlcyBhIFJ1bnRpbWVFbmRwb2ludCBhc3NvY2lhdGVkIHdpdGggdGhpcyBydW50aW1lXG4gICAqXG4gICAqIEBwYXJhbSBlbmRwb2ludE5hbWUgVGhlIG5hbWUgb2YgdGhlIGVuZHBvaW50XG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBlbmRwb2ludFxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBSdW50aW1lRW5kcG9pbnRcbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBhZGRFbmRwb2ludChcbiAgICBlbmRwb2ludE5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogQWRkRW5kcG9pbnRPcHRpb25zLFxuICApOiBSdW50aW1lRW5kcG9pbnQge1xuICAgIC8vIENyZWF0ZSB0aGUgZW5kcG9pbnQgKHNlY3VyaXR5IGNvbmZpZ3VyYXRpb24gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZClcbiAgICBjb25zdCBlbmRwb2ludCA9IG5ldyBSdW50aW1lRW5kcG9pbnQodGhpcywgYEVuZHBvaW50JHtlbmRwb2ludE5hbWV9YCwge1xuICAgICAgZW5kcG9pbnROYW1lOiBlbmRwb2ludE5hbWUsXG4gICAgICBhZ2VudFJ1bnRpbWVJZDogdGhpcy5hZ2VudFJ1bnRpbWVJZCxcbiAgICAgIGFnZW50UnVudGltZVZlcnNpb246IG9wdGlvbnM/LnZlcnNpb24gPz8gdGhpcy5hZ2VudFJ1bnRpbWVWZXJzaW9uID8/ICcxJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zPy5kZXNjcmlwdGlvbixcbiAgICB9KTtcblxuICAgIC8vIEFkZCBkZXBlbmRlbmN5OiBlbmRwb2ludCBtdXN0IHdhaXQgZm9yIHJ1bnRpbWUgdG8gYmUgY3JlYXRlZFxuICAgIGVuZHBvaW50Lm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLnJ1bnRpbWVSZXNvdXJjZSk7XG5cbiAgICByZXR1cm4gZW5kcG9pbnQ7XG4gIH1cbn1cbiJdfQ==
|
|
713
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsNkNBQStGO0FBQy9GLHFFQUFxRTtBQUNyRSwyQ0FBMkM7QUFDM0MsMkNBQTJDO0FBQzNDLHdEQUE4RDtBQUM5RCw0RUFBNEQ7QUFDNUQsOEVBQThGO0FBQzlGLDBFQUEwRTtBQUkxRSxtREFBcUY7QUFDckYsbUNBUWlCO0FBSWpCLGlEQUE2QztBQUM3Qyx5REFBcUQ7QUFFckQsbUNBQXVDO0FBQ3ZDLDZEQUFpRjtBQUNqRiw0RUFBK0U7QUFFL0U7OytFQUUrRTtBQUMvRTs7O0dBR0c7QUFDSCxNQUFNLHFCQUFxQixHQUFHLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRW5EOzs7R0FHRztBQUNILE1BQU0sc0JBQXNCLEdBQUcsc0JBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUF5SHZEOzsrRUFFK0U7QUFFL0U7Ozs7Ozs7R0FPRztJQUVVLE9BQU87NEJBRG5CLG9DQUFrQjs7OztzQkFDVSwwQkFBVzs7O3VCQUFuQixTQUFRLFdBQVc7Ozs7dUNBa3JCckMsSUFBQSxrQ0FBYyxHQUFFO1lBQ2pCLG9MQUFPLFdBQVcsNkRBZ0JqQjtZQW5zQkgsNktBb3NCQzs7Ozs7UUFuc0JDLHNDQUFzQztRQUMvQixNQUFNLENBQVUscUJBQXFCLEdBQVcsOENBQThDLENBQUM7UUFFdEc7Ozs7Ozs7O1dBUUc7UUFDSSxNQUFNLENBQUMsMEJBQTBCLENBQ3RDLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUE2Qjs7Ozs7Ozs7OztZQUU3QixNQUFNLDJCQUE0QixTQUFRLDBCQUFXO2dCQUNuQyxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztnQkFDeEMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7Z0JBQ3RDLGdCQUFn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QVksRUFBRSxZQUFZO2dCQUMxQixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7Z0JBQ25DLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLEdBQUc7Z0JBQ3hFLFdBQVcsRUFBRSxPQUFPLEVBQUUsV0FBVzthQUNsQyxDQUFDLENBQUM7WUFFSCwrREFBK0Q7WUFDL0QsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBRWxELE9BQU8sUUFBUSxDQUFDO1NBQ2pCOztZQW5zQlUsdURBQU87Ozs7O0FBQVAsMEJBQU8iLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IER1cmF0aW9uLCBTdGFjaywgQW5ub3RhdGlvbnMsIFRva2VuLCBBcm4sIEFybkZvcm1hdCwgTGF6eSwgTmFtZXMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBiZWRyb2NrYWdlbnRjb3JlIGZyb20gJ2F3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2Vycm9ycyc7XG5pbXBvcnQgeyBsaXQgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9oZWxwZXJzLWludGVybmFsJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhLCBNZXRob2RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHR5cGUgeyBSdW50aW1lQXV0aG9yaXplckNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL2luYm91bmQtYXV0aC9ydW50aW1lLWF1dGhvcml6ZXItY29uZmlndXJhdGlvbic7XG5pbXBvcnQgdHlwZSB7IExvZ2dpbmdDb25maWcgfSBmcm9tICcuL29ic2VydmFiaWxpdHknO1xuaW1wb3J0IHsgY29uZmlndXJlVHJhY2luZ0RlbGl2ZXJ5LCBjb25maWd1cmVMb2dnaW5nRGVsaXZlcnkgfSBmcm9tICcuL29ic2VydmFiaWxpdHknO1xuaW1wb3J0IHtcbiAgUlVOVElNRV9MT0dTX0dST1VQX0FDVElPTlMsXG4gIFJVTlRJTUVfTE9HU19ERVNDUklCRV9BQ1RJT05TLFxuICBSVU5USU1FX0xPR1NfU1RSRUFNX0FDVElPTlMsXG4gIFJVTlRJTUVfWFJBWV9BQ1RJT05TLFxuICBSVU5USU1FX0NMT1VEV0FUQ0hfTUVUUklDU19BQ1RJT05TLFxuICBSVU5USU1FX0NMT1VEV0FUQ0hfTkFNRVNQQUNFLFxuICBSVU5USU1FX1dPUktMT0FEX0lERU5USVRZX0FDVElPTlMsXG59IGZyb20gJy4vcGVybXMnO1xuaW1wb3J0IHR5cGUgeyBBZ2VudFJ1bnRpbWVBcnRpZmFjdCB9IGZyb20gJy4vcnVudGltZS1hcnRpZmFjdCc7XG5cbmltcG9ydCB0eXBlIHsgSUJlZHJvY2tBZ2VudFJ1bnRpbWUsIEFnZW50UnVudGltZUF0dHJpYnV0ZXMgfSBmcm9tICcuL3J1bnRpbWUtYmFzZSc7XG5pbXBvcnQgeyBSdW50aW1lQmFzZSB9IGZyb20gJy4vcnVudGltZS1iYXNlJztcbmltcG9ydCB7IFJ1bnRpbWVFbmRwb2ludCB9IGZyb20gJy4vcnVudGltZS1lbmRwb2ludCc7XG5pbXBvcnQgdHlwZSB7IExpZmVjeWNsZUNvbmZpZ3VyYXRpb24sIFJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBQcm90b2NvbFR5cGUgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nRmllbGQsIHZhbGlkYXRlRmllbGRQYXR0ZXJuIH0gZnJvbSAnLi92YWxpZGF0aW9uLWhlbHBlcnMnO1xuaW1wb3J0IHsgUnVudGltZU5ldHdvcmtDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vbmV0d29yay9uZXR3b3JrLWNvbmZpZ3VyYXRpb24nO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRzXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIE1pbmltdW0gdGltZW91dCBmb3IgaWRsZSBydW50aW1lIHNlc3Npb25zXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgTElGRUNZQ0xFX01JTl9USU1FT1VUID0gRHVyYXRpb24uc2Vjb25kcyg2MCk7XG5cbi8qKlxuICogTWF4aW11bSBsaWZldGltZSBmb3IgdGhlIGluc3RhbmNlXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgTElGRUNZQ0xFX01BWF9MSUZFVElNRSA9IER1cmF0aW9uLnNlY29uZHMoMjg4MDApO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvcHNcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhIEJlZHJvY2sgQWdlbnQgQ29yZSBSdW50aW1lIHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVudGltZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIFZhbGlkIGNoYXJhY3RlcnMgYXJlIGEteiwgQS1aLCAwLTksIF8gKHVuZGVyc2NvcmUpXG4gICAqIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY2FuIGJlIHVwIHRvIDQ4IGNoYXJhY3RlcnMgbG9uZ1xuICAgKiBQYXR0ZXJuOiBeW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kXG4gICAqIEBkZWZhdWx0IC0gYXV0byBnZW5lcmF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcnVudGltZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhcnRpZmFjdCBjb25maWd1cmF0aW9uIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBDb250YWlucyB0aGUgY29udGFpbmVyIGNvbmZpZ3VyYXRpb24gd2l0aCBFQ1IgVVJJXG4gICAqL1xuICByZWFkb25seSBhZ2VudFJ1bnRpbWVBcnRpZmFjdDogQWdlbnRSdW50aW1lQXJ0aWZhY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSB0aGF0IHByb3ZpZGVzIHBlcm1pc3Npb25zIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBJZiBub3QgcHJvdmlkZWQsIGEgcm9sZSB3aWxsIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseVxuICAgKiBAZGVmYXVsdCAtIEEgbmV3IHJvbGUgd2lsbCBiZSBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSBleGVjdXRpb25Sb2xlPzogaWFtLklSb2xlO1xuXG4gIC8qKlxuICAgKiBOZXR3b3JrIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEBkZWZhdWx0IC0gUnVudGltZU5ldHdvcmtDb25maWd1cmF0aW9uLnVzaW5nUHVibGljTmV0d29yaygpXG4gICAqL1xuICByZWFkb25seSBuZXR3b3JrQ29uZmlndXJhdGlvbj86IFJ1bnRpbWVOZXR3b3JrQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogT3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEBkZWZhdWx0IC0gTm8gZGVzY3JpcHRpb25cbiAgICogTGVuZ3RoIE1pbmltdW06IDEgLCBNYXhpbXVtOiAxMjAwXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogUHJvdG9jb2wgY29uZmlndXJhdGlvbiBmb3IgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogQGRlZmF1bHQgLSBQcm90b2NvbFR5cGUuSFRUUFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdG9jb2xDb25maWd1cmF0aW9uPzogUHJvdG9jb2xUeXBlO1xuXG4gIC8qKlxuICAgKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIC0gTWF4aW11bSA1MCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICogLSBLZXk6IE11c3QgYmUgMS0xMDAgY2hhcmFjdGVycywgc3RhcnQgd2l0aCBsZXR0ZXIgb3IgdW5kZXJzY29yZSwgY29udGFpbiBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGFuZCB1bmRlcnNjb3Jlc1xuICAgKiAtIFZhbHVlOiBNdXN0IGJlIDAtMjA0OCBjaGFyYWN0ZXJzIChwZXIgQ2xvdWRGb3JtYXRpb24gc3BlY2lmaWNhdGlvbilcbiAgICogQGRlZmF1bHQgLSBObyBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50VmFyaWFibGVzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogQXV0aG9yaXplciBjb25maWd1cmF0aW9uIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBVc2UgUnVudGltZUF1dGhvcml6ZXJDb25maWd1cmF0aW9uIHN0YXRpYyBtZXRob2RzIHRvIGNyZWF0ZSB0aGUgY29uZmlndXJhdGlvblxuICAgKiBAZGVmYXVsdCAtIFJ1bnRpbWVBdXRob3JpemVyQ29uZmlndXJhdGlvbi5pYW0oKSAoSUFNIGF1dGhlbnRpY2F0aW9uKVxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yaXplckNvbmZpZ3VyYXRpb24/OiBSdW50aW1lQXV0aG9yaXplckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRhZ3MgZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEEgbGlzdCBvZiBrZXk6dmFsdWUgcGFpcnMgb2YgdGFncyB0byBhcHBseSB0byB0aGlzIFJ1bnRpbWUgcmVzb3VyY2VcbiAgICogQGRlZmF1bHQge30gLSBubyB0YWdzXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgSFRUUCByZXF1ZXN0IGhlYWRlcnMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBydW50aW1lLlxuICAgKiBAZGVmYXVsdCAtIE5vIHJlcXVlc3QgaGVhZGVycyBjb25maWd1cmVkXG4gICAqL1xuICByZWFkb25seSByZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbj86IFJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlmZSBjeWNsZSBjb25maWd1cmF0aW9uIGZvciB0aGUgQWdlbnRDb3JlIFJ1bnRpbWUuXG4gICAqIEBkZWZhdWx0IC0gTm8gbGlmZWN5Y2xlIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGxpZmVjeWNsZUNvbmZpZ3VyYXRpb24/OiBMaWZlY3ljbGVDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGVuYWJsZSBYLVJheSB0cmFjaW5nIGZvciB0aGlzIHJ1bnRpbWUuXG4gICAqIFdoZW4gZW5hYmxlZCwgdHJhY2VzIHdpbGwgYmUgZGVsaXZlcmVkIHRvIEFXUyBYLVJheS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL29ic2VydmFiaWxpdHkuaHRtbFxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgdHJhY2luZ0VuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb2dnaW5nIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBydW50aW1lLlxuICAgKiBBbGxvd3Mgc2VuZGluZyBBUFBMSUNBVElPTl9MT0dTIGFuZCBVU0FHRV9MT0dTIHRvIENsb3VkV2F0Y2ggTG9ncywgUzMsIG9yIEtpbmVzaXMgRGF0YSBGaXJlaG9zZS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL29ic2VydmFiaWxpdHkuaHRtbFxuICAgKiBAZGVmYXVsdCAtIE5vIGxvZ2dpbmcgY29uZmlndXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgbG9nZ2luZ0NvbmZpZ3M/OiBMb2dnaW5nQ29uZmlnW107XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYWRkaW5nIGFuIGVuZHBvaW50IHRvIHRoZSBydW50aW1lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRkRW5kcG9pbnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIERlc2NyaXB0aW9uIGZvciB0aGUgZW5kcG9pbnQsIE11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMjAwIGNoYXJhY3RlcnNcbiAgICogQGRlZmF1bHQgLSBObyBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgcnVudGltZSB2ZXJzaW9uIGZvciB0aGlzIGVuZHBvaW50XG4gICAqIEBkZWZhdWx0ICAxXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gKiBCZWRyb2NrIEFnZW50IENvcmUgUnVudGltZVxuICogRW5hYmxlcyBydW5uaW5nIGNvbnRhaW5lcml6ZWQgYWdlbnRzIHdpdGggc3BlY2lmaWMgbmV0d29yayBjb25maWd1cmF0aW9ucyxcbiAqIHNlY3VyaXR5IHNldHRpbmdzLCBhbmQgcnVudGltZSBhcnRpZmFjdHMuXG4gKlxuICogQHJlc291cmNlIEFXUzo6QmVkcm9ja0FnZW50Q29yZTo6UnVudGltZVxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL3J1bnRpbWUuaHRtbFxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgUnVudGltZSBleHRlbmRzIFJ1bnRpbWVCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtYmVkcm9jay1hZ2VudGNvcmUtYWxwaGEuUnVudGltZSc7XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBBZ2VudCBSdW50aW1lIHVzaW5nIGF0dHJpYnV0ZXNcbiAgICogVGhpcyBhbGxvd3MgeW91IHRvIHJlZmVyZW5jZSBhbiBBZ2VudCBSdW50aW1lIHRoYXQgd2FzIGNyZWF0ZWQgb3V0c2lkZSBvZiBDREtcbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QgaWRcbiAgICogQHBhcmFtIGF0dHJzIFRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBleGlzdGluZyBBZ2VudCBSdW50aW1lXG4gICAqIEByZXR1cm5zIEFuIElCZWRyb2NrQWdlbnRSdW50aW1lIGluc3RhbmNlIHJlcHJlc2VudGluZyB0aGUgaW1wb3J0ZWQgcnVudGltZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQWdlbnRSdW50aW1lQXR0cmlidXRlcyhcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgYXR0cnM6IEFnZW50UnVudGltZUF0dHJpYnV0ZXMsXG4gICk6IElCZWRyb2NrQWdlbnRSdW50aW1lIHtcbiAgICBjbGFzcyBJbXBvcnRlZEJlZHJvY2tBZ2VudFJ1bnRpbWUgZXh0ZW5kcyBSdW50aW1lQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRSdW50aW1lQXJuID0gYXR0cnMuYWdlbnRSdW50aW1lQXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZUlkID0gYXR0cnMuYWdlbnRSdW50aW1lSWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRSdW50aW1lTmFtZSA9IGF0dHJzLmFnZW50UnVudGltZU5hbWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRSdW50aW1lVmVyc2lvbiA9IGF0dHJzLmFnZW50UnVudGltZVZlcnNpb247XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRTdGF0dXMgPSBhdHRycy5hZ2VudFN0YXR1cztcbiAgICAgIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbiA9IGF0dHJzLmRlc2NyaXB0aW9uO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdCA9IGF0dHJzLmNyZWF0ZWRBdDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBsYXN0VXBkYXRlZEF0ID0gYXR0cnMubGFzdFVwZGF0ZWRBdDtcblxuICAgICAgcHVibGljIHJlYWRvbmx5IHJvbGU6IGlhbS5JUm9sZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG5cbiAgICAgIGNvbnN0cnVjdG9yKHM6IENvbnN0cnVjdCwgaTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHMsIGkpO1xuICAgICAgICB0aGlzLnJvbGUgPSBpYW0uUm9sZS5mcm9tUm9sZUFybih0aGlzLCAnUm9sZScsIGF0dHJzLnJvbGVBcm4pO1xuICAgICAgICB0aGlzLmdyYW50UHJpbmNpcGFsID0gdGhpcy5yb2xlO1xuICAgICAgICBpZiAoYXR0cnMuc2VjdXJpdHlHcm91cHMpIHtcbiAgICAgICAgICB0aGlzLl9jb25uZWN0aW9ucyA9IG5ldyBlYzIuQ29ubmVjdGlvbnMoe1xuICAgICAgICAgICAgc2VjdXJpdHlHcm91cHM6IGF0dHJzLnNlY3VyaXR5R3JvdXBzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnRlZEJlZHJvY2tBZ2VudFJ1bnRpbWUoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEBhdHRyaWJ1dGVcbiAgICogQHJldHVybnMgYSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIEFSTiBvZiB0aGlzIGFnZW50IHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVBcm46IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBAYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBJRCBvZiB0aGlzIGFnZW50IHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVJZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGlzIGFnZW50IHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSByb2xlOiBpYW0uSVJvbGU7XG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBAYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSB2ZXJzaW9uIG9mIHRoaXMgYWdlbnQgcnVudGltZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZVZlcnNpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEBhdHRyaWJ1dGVcbiAgICogQHJldHVybnMgYSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIHN0YXR1cyBvZiB0aGlzIGFnZW50IHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhZ2VudFN0YXR1cz86IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRlc2NyaXB0aW9uIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSBhZ2VudCBydW50aW1lIHdhcyBjcmVhdGVkXG4gICAqIEBhdHRyaWJ1dGVcbiAgICogQHJldHVybnMgYSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIHRpbWVzdGFtcCBvZiB0aGlzIGFnZW50IHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIGFnZW50IHJ1bnRpbWUgd2FzIGxhc3QgdXBkYXRlZFxuICAgKiBAYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBsYXN0IHVwZGF0ZSB0aW1lc3RhbXAgb2YgdGhpcyBhZ2VudCBydW50aW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbGFzdFVwZGF0ZWRBdD86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsOiBpYW0uSVByaW5jaXBhbDtcbiAgcHJpdmF0ZSByZWFkb25seSBydW50aW1lUmVzb3VyY2U6IGJlZHJvY2thZ2VudGNvcmUuQ2ZuUnVudGltZTtcbiAgLyoqXG4gICAqIFRoZSBhcnRpZmFjdCBjb25maWd1cmF0aW9uIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZUFydGlmYWN0OiBBZ2VudFJ1bnRpbWVBcnRpZmFjdDtcbiAgcHJpdmF0ZSByZWFkb25seSBuZXR3b3JrQ29uZmlndXJhdGlvbjogUnVudGltZU5ldHdvcmtDb25maWd1cmF0aW9uIDtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm90b2NvbENvbmZpZ3VyYXRpb246IFByb3RvY29sVHlwZTtcbiAgcHJpdmF0ZSByZWFkb25seSBhdXRob3JpemVyQ29uZmlndXJhdGlvbj86IFJ1bnRpbWVBdXRob3JpemVyQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBsaWZlY3ljbGVDb25maWd1cmF0aW9uPzogTGlmZWN5Y2xlQ29uZmlndXJhdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUnVudGltZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAvLyBNYXhpbXVtIG5hbWUgbGVuZ3RoIG9mIDQ4IGNoYXJhY3RlcnNcbiAgICAgIC8vIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYmVkcm9ja2FnZW50Y29yZS1ydW50aW1lLmh0bWwjY2ZuLWJlZHJvY2thZ2VudGNvcmUtcnVudGltZS1hZ2VudHJ1bnRpbWVuYW1lXG4gICAgICBwaHlzaWNhbE5hbWU6IHByb3BzLnJ1bnRpbWVOYW1lID8/XG4gICAgICAgIExhenkuc3RyaW5nKHtcbiAgICAgICAgICBwcm9kdWNlOiAoKSA9PiBOYW1lcy51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywgeyBtYXhMZW5ndGg6IDQ4IH0pLFxuICAgICAgICB9KSxcbiAgICB9KTtcblxuICAgIC8vIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgdGhpcy5hZ2VudFJ1bnRpbWVOYW1lID0gdGhpcy5waHlzaWNhbE5hbWU7XG4gICAgdGhpcy52YWxpZGF0ZVJ1bnRpbWVOYW1lKCk7XG5cbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gcHJvcHMuZGVzY3JpcHRpb247XG4gICAgaWYgKHRoaXMuZGVzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMudmFsaWRhdGVEZXNjcmlwdGlvbigpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5lbnZpcm9ubWVudFZhcmlhYmxlcykge1xuICAgICAgdGhpcy52YWxpZGF0ZUVudmlyb25tZW50VmFyaWFibGVzKHByb3BzLmVudmlyb25tZW50VmFyaWFibGVzKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMudGFncykge1xuICAgICAgdGhpcy52YWxpZGF0ZVRhZ3MocHJvcHMudGFncyk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlUmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24ocHJvcHMucmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIHRoaXMubGlmZWN5Y2xlQ29uZmlndXJhdGlvbiA9IHByb3BzLmxpZmVjeWNsZUNvbmZpZ3VyYXRpb24gPyB7XG4gICAgICBpZGxlUnVudGltZVNlc3Npb25UaW1lb3V0OiBwcm9wcy5saWZlY3ljbGVDb25maWd1cmF0aW9uPy5pZGxlUnVudGltZVNlc3Npb25UaW1lb3V0LFxuICAgICAgbWF4TGlmZXRpbWU6IHByb3BzLmxpZmVjeWNsZUNvbmZpZ3VyYXRpb24/Lm1heExpZmV0aW1lLFxuICAgIH0gOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGhpcy5saWZlY3ljbGVDb25maWd1cmF0aW9uKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlTGlmZWN5Y2xlQ29uZmlndXJhdGlvbih0aGlzLmxpZmVjeWNsZUNvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5leGVjdXRpb25Sb2xlKSB7XG4gICAgICB0aGlzLnJvbGUgPSBwcm9wcy5leGVjdXRpb25Sb2xlO1xuICAgICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMuZXhlY3V0aW9uUm9sZS5yb2xlQXJuKSkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlUm9sZUFybihwcm9wcy5leGVjdXRpb25Sb2xlLnJvbGVBcm4pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgJ0V4ZWN1dGlvblJvbGUnLCB7XG4gICAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdiZWRyb2NrLWFnZW50Y29yZS5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnRXhlY3V0aW9uIHJvbGUgZm9yIEJlZHJvY2sgQWdlbnQgQ29yZSBSdW50aW1lJyxcbiAgICAgICAgbWF4U2Vzc2lvbkR1cmF0aW9uOiBEdXJhdGlvbi5ob3Vycyg4KSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmFkZEV4ZWN1dGlvblJvbGVQZXJtaXNzaW9ucygpO1xuXG4gICAgdGhpcy5ncmFudFByaW5jaXBhbCA9IHRoaXMucm9sZTtcbiAgICB0aGlzLmFnZW50UnVudGltZUFydGlmYWN0ID0gcHJvcHMuYWdlbnRSdW50aW1lQXJ0aWZhY3Q7XG4gICAgLy8gU2V0IHVwIG5ldHdvcmsgY29uZmlndXJhdGlvbiB3aXRoIFZQQyBzdXBwb3J0XG4gICAgdGhpcy5uZXR3b3JrQ29uZmlndXJhdGlvbiA9IHByb3BzLm5ldHdvcmtDb25maWd1cmF0aW9uID8/IFJ1bnRpbWVOZXR3b3JrQ29uZmlndXJhdGlvbi51c2luZ1B1YmxpY05ldHdvcmsoKTtcbiAgICAvLyBTZXQgY29ubmVjdGlvbnMgLSBjcmVhdGUgYSBzaGFyZWQgY29ubmVjdGlvbnMgb2JqZWN0XG4gICAgaWYgKHRoaXMubmV0d29ya0NvbmZpZ3VyYXRpb24uY29ubmVjdGlvbnMpIHtcbiAgICAgIC8vIFVzZSB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uJ3MgY29ubmVjdGlvbnMgYXMgdGhlIHNoYXJlZCBvYmplY3RcbiAgICAgIHRoaXMuX2Nvbm5lY3Rpb25zID0gdGhpcy5uZXR3b3JrQ29uZmlndXJhdGlvbi5jb25uZWN0aW9ucztcbiAgICB9XG4gICAgdGhpcy5wcm90b2NvbENvbmZpZ3VyYXRpb24gPSBwcm9wcy5wcm90b2NvbENvbmZpZ3VyYXRpb24gPz8gUHJvdG9jb2xUeXBlLkhUVFA7XG4gICAgdGhpcy5hdXRob3JpemVyQ29uZmlndXJhdGlvbiA9IHByb3BzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uO1xuXG4gICAgY29uc3QgY2ZuUHJvcHM6IGFueSA9IHtcbiAgICAgIGFnZW50UnVudGltZU5hbWU6IHRoaXMuYWdlbnRSdW50aW1lTmFtZSxcbiAgICAgIHJvbGVBcm46IHRoaXMucm9sZS5yb2xlQXJuLFxuICAgICAgYWdlbnRSdW50aW1lQXJ0aWZhY3Q6IExhenkuYW55KHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5yZW5kZXJBZ2VudFJ1bnRpbWVBcnRpZmFjdCgpLFxuICAgICAgfSksXG4gICAgICBuZXR3b3JrQ29uZmlndXJhdGlvbjogTGF6eS5hbnkoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PiB0aGlzLm5ldHdvcmtDb25maWd1cmF0aW9uLl9yZW5kZXIodGhpcy5fY29ubmVjdGlvbnMpLFxuICAgICAgfSksXG4gICAgICBwcm90b2NvbENvbmZpZ3VyYXRpb246IExhenkuc3RyaW5nKHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5wcm90b2NvbENvbmZpZ3VyYXRpb24sXG4gICAgICB9KSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIGVudmlyb25tZW50VmFyaWFibGVzOiBMYXp5LmFueSh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+IHRoaXMucmVuZGVyRW52aXJvbm1lbnRWYXJpYWJsZXMocHJvcHMuZW52aXJvbm1lbnRWYXJpYWJsZXMpLFxuICAgICAgfSksXG4gICAgICB0YWdzOiBwcm9wcy50YWdzID8/IHt9LFxuICAgICAgbGlmZWN5Y2xlQ29uZmlndXJhdGlvbjogdGhpcy5yZW5kZXJMaWZlY3ljbGVDb25maWd1cmF0aW9uKCksXG4gICAgfTtcbiAgICBpZiAocHJvcHMucmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24pIHtcbiAgICAgIGNmblByb3BzLnJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uID0gdGhpcy5yZW5kZXJSZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbihwcm9wcy5yZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbik7XG4gICAgfVxuICAgIGlmIChwcm9wcy5hdXRob3JpemVyQ29uZmlndXJhdGlvbikge1xuICAgICAgY2ZuUHJvcHMuYXV0aG9yaXplckNvbmZpZ3VyYXRpb24gPSBMYXp5LmFueSh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+IHRoaXMuYXV0aG9yaXplckNvbmZpZ3VyYXRpb24hLl9yZW5kZXIoKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMucnVudGltZVJlc291cmNlID0gbmV3IGJlZHJvY2thZ2VudGNvcmUuQ2ZuUnVudGltZSh0aGlzLCAnUmVzb3VyY2UnLCBjZm5Qcm9wcyBhcyBiZWRyb2NrYWdlbnRjb3JlLkNmblJ1bnRpbWVQcm9wcyk7XG5cbiAgICAvLyBBZGQgZGVwZW5kZW5jeSBvbiB0aGUgcm9sZSAoZm9yIGJvdGggY3VzdG9tIGFuZCBhdXRvLWNyZWF0ZWQgcm9sZXMpXG4gICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBSdW50aW1lIHdhaXRzIGZvciB0aGUgcm9sZSBhbmQgYWxsIGl0cyBwb2xpY2llcyAoaW5jbHVkaW5nIEVDUiBwZXJtaXNzaW9ucykgdG8gYmUgY3JlYXRlZFxuICAgIHRoaXMucnVudGltZVJlc291cmNlLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLnJvbGUpO1xuXG4gICAgdGhpcy5hZ2VudFJ1bnRpbWVJZCA9IHRoaXMucnVudGltZVJlc291cmNlLmF0dHJBZ2VudFJ1bnRpbWVJZDtcbiAgICB0aGlzLmFnZW50UnVudGltZUFybiA9IHRoaXMucnVudGltZVJlc291cmNlLmF0dHJBZ2VudFJ1bnRpbWVBcm47XG4gICAgdGhpcy5hZ2VudFN0YXR1cyA9IHRoaXMucnVudGltZVJlc291cmNlLmF0dHJTdGF0dXM7XG4gICAgdGhpcy5hZ2VudFJ1bnRpbWVWZXJzaW9uID0gdGhpcy5ydW50aW1lUmVzb3VyY2UuYXR0ckFnZW50UnVudGltZVZlcnNpb247XG4gICAgdGhpcy5jcmVhdGVkQXQgPSB0aGlzLnJ1bnRpbWVSZXNvdXJjZS5hdHRyQ3JlYXRlZEF0O1xuICAgIHRoaXMubGFzdFVwZGF0ZWRBdCA9IHRoaXMucnVudGltZVJlc291cmNlLmF0dHJMYXN0VXBkYXRlZEF0O1xuXG4gICAgLy8gQ29uZmlndXJlIG9ic2VydmFiaWxpdHkgKHRyYWNpbmcgYW5kIGxvZ2dpbmcpXG4gICAgaWYgKHByb3BzLnRyYWNpbmdFbmFibGVkKSB7XG4gICAgICBjb25maWd1cmVUcmFjaW5nRGVsaXZlcnkodGhpcywgdGhpcy5hZ2VudFJ1bnRpbWVBcm4pO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5sb2dnaW5nQ29uZmlncyAmJiBwcm9wcy5sb2dnaW5nQ29uZmlncy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25maWd1cmVMb2dnaW5nRGVsaXZlcnkodGhpcywgdGhpcy5hZ2VudFJ1bnRpbWVBcm4sIHByb3BzLmxvZ2dpbmdDb25maWdzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBDbG91ZEZvcm1hdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgcmVuZGVyRW52aXJvbm1lbnRWYXJpYWJsZXMoZW52VmFycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pOiBhbnkge1xuICAgIGlmICghZW52VmFycyB8fCBPYmplY3Qua2V5cyhlbnZWYXJzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBlbnZWYXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgcHJvcGVyIHBlcm1pc3Npb25zIHRvIHRoZSBleGVjdXRpb24gcm9sZSBmb3IgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogQmFzZWQgb246IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvcnVudGltZS1wZXJtaXNzaW9ucy5odG1sXG4gICAqL1xuICBwcml2YXRlIGFkZEV4ZWN1dGlvblJvbGVQZXJtaXNzaW9ucygpIHtcbiAgICBjb25zdCByZWdpb24gPSBTdGFjay5vZih0aGlzKS5yZWdpb247XG4gICAgY29uc3QgYWNjb3VudCA9IFN0YWNrLm9mKHRoaXMpLmFjY291bnQ7XG5cbiAgICAvLyBDbG91ZFdhdGNoIExvZ3MgLSBMb2cgR3JvdXAgb3BlcmF0aW9uc1xuICAgIHRoaXMucm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdMb2dHcm91cEFjY2VzcycsXG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBSVU5USU1FX0xPR1NfR1JPVVBfQUNUSU9OUyxcbiAgICAgIHJlc291cmNlczogW2Bhcm46JHtTdGFjay5vZih0aGlzKS5wYXJ0aXRpb259OmxvZ3M6JHtyZWdpb259OiR7YWNjb3VudH06bG9nLWdyb3VwOi9hd3MvYmVkcm9jay1hZ2VudGNvcmUvcnVudGltZXMvKmBdLFxuICAgIH0pKTtcblxuICAgIC8vIENsb3VkV2F0Y2ggTG9ncyAtIERlc2NyaWJlIGFsbCBsb2cgZ3JvdXBzXG4gICAgdGhpcy5yb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogJ0Rlc2NyaWJlTG9nR3JvdXBzJyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFJVTlRJTUVfTE9HU19ERVNDUklCRV9BQ1RJT05TLFxuICAgICAgcmVzb3VyY2VzOiBbYGFybjoke1N0YWNrLm9mKHRoaXMpLnBhcnRpdGlvbn06bG9nczoke3JlZ2lvbn06JHthY2NvdW50fTpsb2ctZ3JvdXA6KmBdLFxuICAgIH0pKTtcblxuICAgIC8vIENsb3VkV2F0Y2ggTG9ncyAtIExvZyBTdHJlYW0gb3BlcmF0aW9uc1xuICAgIHRoaXMucm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdMb2dTdHJlYW1BY2Nlc3MnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogUlVOVElNRV9MT0dTX1NUUkVBTV9BQ1RJT05TLFxuICAgICAgcmVzb3VyY2VzOiBbYGFybjoke1N0YWNrLm9mKHRoaXMpLnBhcnRpdGlvbn06bG9nczoke3JlZ2lvbn06JHthY2NvdW50fTpsb2ctZ3JvdXA6L2F3cy9iZWRyb2NrLWFnZW50Y29yZS9ydW50aW1lcy8qOmxvZy1zdHJlYW06KmBdLFxuICAgIH0pKTtcblxuICAgIC8vIFgtUmF5IFRyYWNpbmcgLSBtdXN0IGJlICogZm9yIHRyYWNpbmdcbiAgICB0aGlzLnJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiAnWFJheUFjY2VzcycsXG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBSVU5USU1FX1hSQVlfQUNUSU9OUyxcbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgfSkpO1xuXG4gICAgLy8gQ2xvdWRXYXRjaCBNZXRyaWNzIC0gc2NvcGVkIHRvIGJlZHJvY2stYWdlbnRjb3JlIG5hbWVzcGFjZVxuICAgIHRoaXMucm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdDbG91ZFdhdGNoTWV0cmljcycsXG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBSVU5USU1FX0NMT1VEV0FUQ0hfTUVUUklDU19BQ1RJT05TLFxuICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgJ2Nsb3Vkd2F0Y2g6bmFtZXNwYWNlJzogUlVOVElNRV9DTE9VRFdBVENIX05BTUVTUEFDRSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSkpO1xuXG4gICAgLy8gQmVkcm9jayBBZ2VudENvcmUgV29ya2xvYWQgSWRlbnRpdHkgQWNjZXNzXG4gICAgLy8gTm90ZTogVGhlIGFnZW50IG5hbWUgd2lsbCBiZSBkZXRlcm1pbmVkIGF0IHJ1bnRpbWUsIHNvIHdlIHVzZSBhIHdpbGRjYXJkIHBhdHRlcm5cbiAgICB0aGlzLnJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiAnR2V0QWdlbnRBY2Nlc3NUb2tlbicsXG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBSVU5USU1FX1dPUktMT0FEX0lERU5USVRZX0FDVElPTlMsXG4gICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgYGFybjoke1N0YWNrLm9mKHRoaXMpLnBhcnRpdGlvbn06YmVkcm9jay1hZ2VudGNvcmU6JHtyZWdpb259OiR7YWNjb3VudH06d29ya2xvYWQtaWRlbnRpdHktZGlyZWN0b3J5L2RlZmF1bHRgLFxuICAgICAgICBgYXJuOiR7U3RhY2sub2YodGhpcykucGFydGl0aW9ufTpiZWRyb2NrLWFnZW50Y29yZToke3JlZ2lvbn06JHthY2NvdW50fTp3b3JrbG9hZC1pZGVudGl0eS1kaXJlY3RvcnkvZGVmYXVsdC93b3JrbG9hZC1pZGVudGl0eS8qYCxcbiAgICAgIF0sXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGFydGlmYWN0IGNvbmZpZ3VyYXRpb24gZm9yIENsb3VkRm9ybWF0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJBZ2VudFJ1bnRpbWVBcnRpZmFjdCgpOiBhbnkge1xuICAgIC8vIHNldCBwZXJtaXNzaW9uIHdpdGggYmluZFxuICAgIHRoaXMuYWdlbnRSdW50aW1lQXJ0aWZhY3QuYmluZCh0aGlzLCB0aGlzKTtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmFnZW50UnVudGltZUFydGlmYWN0Ll9yZW5kZXIoKTtcbiAgICBpZiAoKGNvbmZpZyBhcyBhbnkpLmNvZGUpIHsgLy8gUzNJbWFnZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29kZUNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBjb2RlOiAoY29uZmlnIGFzIGFueSkuY29kZSxcbiAgICAgICAgICBydW50aW1lOiAoY29uZmlnIGFzIGFueSkucnVudGltZSxcbiAgICAgICAgICBlbnRyeVBvaW50OiAoY29uZmlnIGFzIGFueSkuZW50cnlQb2ludCxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVjckltYWdlIG9yIEFzc2V0SW1hZ2VcbiAgICAgIGNvbnN0IGNvbnRhaW5lclVyaSA9IChjb25maWcgYXMgYW55KS5jb250YWluZXJVcmk7XG4gICAgICBpZiAoY29udGFpbmVyVXJpKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVDb250YWluZXJVcmkoY29udGFpbmVyVXJpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRhaW5lckNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBjb250YWluZXJVcmk6IGNvbnRhaW5lclVyaSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIHJlcXVlc3QgaGVhZGVyIGNvbmZpZ3VyYXRpb24gZm9yIENsb3VkRm9ybWF0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJSZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbihyZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbj86IFJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKTogYW55IHtcbiAgICBpZiAoIXJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uPy5hbGxvd2xpc3RlZEhlYWRlcnMpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICByZXF1ZXN0SGVhZGVyQWxsb3dsaXN0OiByZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbi5hbGxvd2xpc3RlZEhlYWRlcnMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBsaWZlY3ljbGUgY29uZmlndXJhdGlvbiBmb3IgQ2xvdWRGb3JtYXRpb25cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHJlbmRlckxpZmVjeWNsZUNvbmZpZ3VyYXRpb24oKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgaWRsZVJ1bnRpbWVTZXNzaW9uVGltZW91dDogdGhpcy5saWZlY3ljbGVDb25maWd1cmF0aW9uPy5pZGxlUnVudGltZVNlc3Npb25UaW1lb3V0Py50b1NlY29uZHMoKSxcbiAgICAgIG1heExpZmV0aW1lOiB0aGlzLmxpZmVjeWNsZUNvbmZpZ3VyYXRpb24/Lm1heExpZmV0aW1lPy50b1NlY29uZHMoKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgcmVxdWVzdCBoZWFkZXIgY29uZmlndXJhdGlvblxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVSZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbihyZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbjogUmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBhbGxFcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uLmFsbG93bGlzdGVkSGVhZGVycykge1xuICAgICAgaWYgKHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uLmFsbG93bGlzdGVkSGVhZGVycy5sZW5ndGggPCAxIHx8IHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uLmFsbG93bGlzdGVkSGVhZGVycy5sZW5ndGggPiAyMCkge1xuICAgICAgICBhbGxFcnJvcnMucHVzaCgnUmVxdWVzdCBoZWFkZXIgYWxsb3cgbGlzdCBjb250YWluIGJldHdlZW4gMSBhbmQgMjAgaGVhZGVycycpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGhlYWRlciBvZiByZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbi5hbGxvd2xpc3RlZEhlYWRlcnMpIHtcbiAgICAgICAgLy8gVmFsaWRhdGUgbGVuZ3RoXG4gICAgICAgIGNvbnN0IGxlbmd0aEVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgICAgIHZhbHVlOiBoZWFkZXIsXG4gICAgICAgICAgZmllbGROYW1lOiAnUmVxdWVzdCBoZWFkZXInLFxuICAgICAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgICAgICBtYXhMZW5ndGg6IDI1NixcbiAgICAgICAgfSk7XG4gICAgICAgIGFsbEVycm9ycy5wdXNoKC4uLmxlbmd0aEVycm9ycyk7XG5cbiAgICAgICAgY29uc3QgcGF0dGVybkVycm9ycyA9IHZhbGlkYXRlRmllbGRQYXR0ZXJuKFxuICAgICAgICAgIGhlYWRlcixcbiAgICAgICAgICAnUmVxdWVzdCBoZWFkZXInLFxuICAgICAgICAgIC8oQXV0aG9yaXphdGlvbnxYLUFtem4tQmVkcm9jay1BZ2VudENvcmUtUnVudGltZS1DdXN0b20tW2EtekEtWjAtOS1dKykvLFxuICAgICAgICAgICdSZXF1ZXN0IGhlYWRlciBtdXN0IGNvbnRhaW4gb25seSBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgaHlwaGVucycsXG4gICAgICAgICk7XG4gICAgICAgIGFsbEVycm9ycy5wdXNoKC4uLnBhdHRlcm5FcnJvcnMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWxsRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YEludmFsaWRSZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbmAsIGFsbEVycm9ycy5qb2luKCdcXG4nKSwgdGhpcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgbGlmZWN5Y2xlIGNvbmZpZ3VyYXRpb25cbiAgICogQHRocm93cyBFcnJvciBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlTGlmZWN5Y2xlQ29uZmlndXJhdGlvbihsaWZlY3ljbGVDb25maWd1cmF0aW9uOiBMaWZlY3ljbGVDb25maWd1cmF0aW9uKTogdm9pZCB7XG4gICAgaWYgKGxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uaWRsZVJ1bnRpbWVTZXNzaW9uVGltZW91dCAmJiAhbGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5pZGxlUnVudGltZVNlc3Npb25UaW1lb3V0LmlzVW5yZXNvbHZlZCgpKSB7XG4gICAgICBpZiAobGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5pZGxlUnVudGltZVNlc3Npb25UaW1lb3V0LnRvU2Vjb25kcygpIDwgTElGRUNZQ0xFX01JTl9USU1FT1VULnRvU2Vjb25kcygpXG4gICAgICAgIHx8IGxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uaWRsZVJ1bnRpbWVTZXNzaW9uVGltZW91dC50b1NlY29uZHMoKSA+IExJRkVDWUNMRV9NQVhfTElGRVRJTUUudG9TZWNvbmRzKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgSW52YWxpZElkbGVSdW50aW1lU2Vzc2lvblRpbWVvdXRgLCBgSWRsZSBydW50aW1lIHNlc3Npb24gdGltZW91dCBtdXN0IGJlIGJldHdlZW4gJHtMSUZFQ1lDTEVfTUlOX1RJTUVPVVQudG9TZWNvbmRzKCl9IHNlY29uZHMgYW5kICR7TElGRUNZQ0xFX01BWF9MSUZFVElNRS50b1NlY29uZHMoKX0gc2Vjb25kc2AsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5tYXhMaWZldGltZSAmJiAhbGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5tYXhMaWZldGltZS5pc1VucmVzb2x2ZWQoKSkge1xuICAgICAgaWYgKGxpZmVjeWNsZUNvbmZpZ3VyYXRpb24ubWF4TGlmZXRpbWUudG9TZWNvbmRzKCkgPCBMSUZFQ1lDTEVfTUlOX1RJTUVPVVQudG9TZWNvbmRzKClcbiAgICAgICAgfHwgbGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5tYXhMaWZldGltZS50b1NlY29uZHMoKSA+IExJRkVDWUNMRV9NQVhfTElGRVRJTUUudG9TZWNvbmRzKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgSW52YWxpZE1heExpZmV0aW1lYCwgYE1heGltdW0gbGlmZXRpbWUgbXVzdCBiZSBiZXR3ZWVuICR7TElGRUNZQ0xFX01JTl9USU1FT1VULnRvU2Vjb25kcygpfSBzZWNvbmRzIGFuZCAke0xJRkVDWUNMRV9NQVhfTElGRVRJTUUudG9TZWNvbmRzKCl9IHNlY29uZHNgLCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBydW50aW1lIG5hbWUgZm9ybWF0XG4gICAqIFBhdHRlcm46IF5bYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSRcbiAgICogQHRocm93cyBFcnJvciBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUnVudGltZU5hbWUoKTogdm9pZCB7XG4gICAgLy8gU2tpcCB2YWxpZGF0aW9uIGlmIHRoZSBuYW1lIGNvbnRhaW5zIENESyB0b2tlbnMgKHVucmVzb2x2ZWQgdmFsdWVzKVxuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQodGhpcy5hZ2VudFJ1bnRpbWVOYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGxlbmd0aFxuICAgIGNvbnN0IGxlbmd0aEVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgdmFsdWU6IHRoaXMuYWdlbnRSdW50aW1lTmFtZSxcbiAgICAgIGZpZWxkTmFtZTogJ1J1bnRpbWUgbmFtZScsXG4gICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICBtYXhMZW5ndGg6IDQ4LFxuICAgIH0pO1xuXG4gICAgLy8gVmFsaWRhdGUgcGF0dGVyblxuICAgIGNvbnN0IHBhdHRlcm5FcnJvcnMgPSB2YWxpZGF0ZUZpZWxkUGF0dGVybihcbiAgICAgIHRoaXMuYWdlbnRSdW50aW1lTmFtZSxcbiAgICAgICdSdW50aW1lIG5hbWUnLFxuICAgICAgL15bYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSQvLFxuICAgICAgJ1J1bnRpbWUgbmFtZSBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgYW5kIGNvbnRhaW4gb25seSBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgdW5kZXJzY29yZXMnLFxuICAgICk7XG5cbiAgICAvLyBDb21iaW5lIGFuZCB0aHJvdyBpZiBhbnkgZXJyb3JzXG4gICAgY29uc3QgYWxsRXJyb3JzID0gWy4uLmxlbmd0aEVycm9ycywgLi4ucGF0dGVybkVycm9yc107XG4gICAgaWYgKGFsbEVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBJbnZhbGlkUnVudGltZU5hbWVgLCBhbGxFcnJvcnMuam9pbignXFxuJyksIHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGRlc2NyaXB0aW9uIGZvcm1hdFxuICAgKiBNdXN0IGJlIGJldHdlZW4gMSBhbmQgMTIwMCBjaGFyYWN0ZXJzIChwZXIgQ2xvdWRGb3JtYXRpb24gc3BlY2lmaWNhdGlvbilcbiAgICogQHRocm93cyBFcnJvciBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlRGVzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgLy8gU2tpcCB2YWxpZGF0aW9uIGlmIHRoZSBkZXNjcmlwdGlvbiBjb250YWlucyBDREsgdG9rZW5zICh1bnJlc29sdmVkIHZhbHVlcylcbiAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHRoaXMuZGVzY3JpcHRpb24pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgICB2YWx1ZTogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgICAgZmllbGROYW1lOiAnRGVzY3JpcHRpb24nLFxuICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICAgIG1heExlbmd0aDogMTIwMCxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgSW52YWxpZERlc2NyaXB0aW9uYCwgZXJyb3JzLmpvaW4oJ1xcbicpLCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgKiAtIE1heGltdW0gNTAgZW50cmllc1xuICAgKiAtIEtleTogMS0xMDAgY2hhcmFjdGVyc1xuICAgKiAtIFZhbHVlOiAwLTIwNDggY2hhcmFjdGVycyAocGVyIENsb3VkRm9ybWF0aW9uIHNwZWNpZmljYXRpb24pXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUVudmlyb25tZW50VmFyaWFibGVzKGVudlZhcnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoZW52VmFycyk7XG5cbiAgICAvLyBWYWxpZGF0ZSBudW1iZXIgb2YgZW50cmllcyAoMC01MClcbiAgICBpZiAoZW50cmllcy5sZW5ndGggPiA1MCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgbGl0YFRvb01hbnlFbnZpcm9ubWVudFZhcmlhYmxlc2AsXG4gICAgICAgIGBUb28gbWFueSBlbnZpcm9ubWVudCB2YXJpYWJsZXM6ICR7ZW50cmllcy5sZW5ndGh9LiBNYXhpbXVtIGFsbG93ZWQgaXMgNTBgLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBlbnRyaWVzKSB7XG4gICAgICAvLyBTa2lwIHZhbGlkYXRpb24gaWYga2V5IG9yIHZhbHVlIGNvbnRhaW5zIENESyB0b2tlbnNcbiAgICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoa2V5KSB8fCBUb2tlbi5pc1VucmVzb2x2ZWQodmFsdWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBrZXkgbGVuZ3RoXG4gICAgICBjb25zdCBsZW5ndGhFcnJvcnMgPSB2YWxpZGF0ZVN0cmluZ0ZpZWxkKHtcbiAgICAgICAgdmFsdWU6IGtleSxcbiAgICAgICAgZmllbGROYW1lOiBgRW52aXJvbm1lbnQgdmFyaWFibGUga2V5ICcke2tleX0nYCxcbiAgICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgICBtYXhMZW5ndGg6IDEwMCxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBWYWxpZGF0ZSBrZXkgcGF0dGVyblxuICAgICAgY29uc3QgcGF0dGVybkVycm9ycyA9IHZhbGlkYXRlRmllbGRQYXR0ZXJuKFxuICAgICAgICBrZXksXG4gICAgICAgIGBFbnZpcm9ubWVudCB2YXJpYWJsZSBrZXkgJyR7a2V5fSdgLFxuICAgICAgICAvXlthLXpBLVpfXVthLXpBLVowLTlfXSokLyxcbiAgICAgICAgYEVudmlyb25tZW50IHZhcmlhYmxlIGtleSAnJHtrZXl9JyBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgb3IgdW5kZXJzY29yZSBhbmQgY29udGFpbiBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGFuZCB1bmRlcnNjb3Jlc2AsXG4gICAgICApO1xuXG4gICAgICAvLyBDb21iaW5lIGFuZCB0aHJvdyBpZiBhbnkgZXJyb3JzXG4gICAgICBjb25zdCBhbGxFcnJvcnMgPSBbLi4ubGVuZ3RoRXJyb3JzLCAuLi5wYXR0ZXJuRXJyb3JzXTtcbiAgICAgIGlmIChhbGxFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBJbnZhbGlkRW52aXJvbm1lbnRWYXJpYWJsZUtleWAsIGFsbEVycm9ycy5qb2luKCdcXG4nKSwgdGhpcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIHZhbHVlIGxlbmd0aCAoMC0yMDQ4IGNoYXJhY3RlcnMgcGVyIENsb3VkRm9ybWF0aW9uKVxuICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDIwNDgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBsaXRgSW52YWxpZEVudmlyb25tZW50VmFyaWFibGVWYWx1ZWAsXG4gICAgICAgICAgYEludmFsaWQgZW52aXJvbm1lbnQgdmFyaWFibGUgdmFsdWUgbGVuZ3RoIGZvciBrZXkgJyR7a2V5fSc6ICR7dmFsdWUubGVuZ3RofSBjaGFyYWN0ZXJzLiBgICtcbiAgICAgICAgICAnVmFsdWVzIG11c3Qgbm90IGV4Y2VlZCAyMDQ4IGNoYXJhY3RlcnMnLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgdGFncyBmb3JtYXRcbiAgICogQHBhcmFtIHRhZ3MgVGhlIHRhZ3Mgb2JqZWN0IHRvIHZhbGlkYXRlXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVRhZ3ModGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIC8vIFZhbGlkYXRlIGVhY2ggdGFnIGtleSBhbmQgdmFsdWVcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0YWdzKSkge1xuICAgICAgLy8gU2tpcCB2YWxpZGF0aW9uIGlmIGtleSBvciB2YWx1ZSBjb250YWlucyBDREsgdG9rZW5zXG4gICAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKGtleSkgfHwgVG9rZW4uaXNVbnJlc29sdmVkKHZhbHVlKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUgdGFnIGtleSBsZW5ndGhcbiAgICAgIGNvbnN0IGtleUxlbmd0aEVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgICB2YWx1ZToga2V5LFxuICAgICAgICBmaWVsZE5hbWU6IGBUYWcga2V5IFwiJHtrZXl9XCJgLFxuICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICAgIG1heExlbmd0aDogMjU2LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRhZyBrZXkgcGF0dGVyblxuICAgICAgY29uc3Qga2V5UGF0dGVybkVycm9ycyA9IHZhbGlkYXRlRmllbGRQYXR0ZXJuKFxuICAgICAgICBrZXksXG4gICAgICAgIGBUYWcga2V5IFwiJHtrZXl9XCJgLFxuICAgICAgICAvXlthLXpBLVowLTlcXHMuXzovPStALV0qJC8sXG4gICAgICAgIGBUYWcga2V5IFwiJHtrZXl9XCIgY2FuIG9ubHkgY29udGFpbiBsZXR0ZXJzIChhLXosIEEtWiksIG51bWJlcnMgKDAtOSksIHNwYWNlcywgYW5kIHNwZWNpYWwgY2hhcmFjdGVycyAoLl86Lz0rQC0pYCxcbiAgICAgICk7XG5cbiAgICAgIC8vIENvbWJpbmUga2V5IGVycm9ycyBhbmQgdGhyb3cgaWYgYW55XG4gICAgICBjb25zdCBrZXlFcnJvcnMgPSBbLi4ua2V5TGVuZ3RoRXJyb3JzLCAuLi5rZXlQYXR0ZXJuRXJyb3JzXTtcbiAgICAgIGlmIChrZXlFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBJbnZhbGlkVGFnS2V5YCwga2V5RXJyb3JzLmpvaW4oJ1xcbicpLCB0aGlzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgTnVsbFRhZ1ZhbHVlYCwgYFRhZyB2YWx1ZSBmb3Iga2V5IFwiJHtrZXl9XCIgY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkYCwgdGhpcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRhZyB2YWx1ZSBsZW5ndGhcbiAgICAgIGNvbnN0IHZhbHVlTGVuZ3RoRXJyb3JzID0gdmFsaWRhdGVTdHJpbmdGaWVsZCh7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgZmllbGROYW1lOiBgVGFnIHZhbHVlIGZvciBrZXkgXCIke2tleX1cImAsXG4gICAgICAgIG1pbkxlbmd0aDogMCxcbiAgICAgICAgbWF4TGVuZ3RoOiAyNTYsXG4gICAgICB9KTtcblxuICAgICAgLy8gVmFsaWRhdGUgdGFnIHZhbHVlIHBhdHRlcm5cbiAgICAgIGNvbnN0IHZhbHVlUGF0dGVybkVycm9ycyA9IHZhbGlkYXRlRmllbGRQYXR0ZXJuKFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgYFRhZyB2YWx1ZSBmb3Iga2V5IFwiJHtrZXl9XCJgLFxuICAgICAgICAvXlthLXpBLVowLTlcXHMuXzovPStALV0qJC8sXG4gICAgICAgIGBUYWcgdmFsdWUgZm9yIGtleSBcIiR7a2V5fVwiIGNhbiBvbmx5IGNvbnRhaW4gbGV0dGVycyAoYS16LCBBLVopLCBudW1iZXJzICgwLTkpLCBzcGFjZXMsIGFuZCBzcGVjaWFsIGNoYXJhY3RlcnMgKC5fOi89K0AtKWAsXG4gICAgICApO1xuXG4gICAgICAvLyBDb21iaW5lIHZhbHVlIGVycm9ycyBhbmQgdGhyb3cgaWYgYW55XG4gICAgICBjb25zdCB2YWx1ZUVycm9ycyA9IFsuLi52YWx1ZUxlbmd0aEVycm9ycywgLi4udmFsdWVQYXR0ZXJuRXJyb3JzXTtcbiAgICAgIGlmICh2YWx1ZUVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YEludmFsaWRUYWdWYWx1ZWAsIHZhbHVlRXJyb3JzLmpvaW4oJ1xcbicpLCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBjb250YWluZXIgVVJJIGZvcm1hdFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUNvbnRhaW5lclVyaSh1cmk6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIFNraXAgdmFsaWRhdGlvbiBpZiB0aGUgVVJJIGNvbnRhaW5zIENESyB0b2tlbnMgKHVucmVzb2x2ZWQgdmFsdWVzKVxuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQodXJpKSkge1xuICAgICAgLy8gQWRkIGEgd2FybmluZyB0aGF0IHZhbGlkYXRpb24gd2lsbCBiZSBza2lwcGVkIGZvciB0b2tlbi1iYXNlZCBVUklzXG4gICAgICBBbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRJbmZvKFxuICAgICAgICAnQ29udGFpbmVyIFVSSSB2YWxpZGF0aW9uIHNraXBwZWQgYXMgaXQgY29udGFpbnMgdW5yZXNvbHZlZCBDREsgdG9rZW5zLiAnICtcbiAgICAgICAgJ1RoZSBVUkkgd2lsbCBiZSB2YWxpZGF0ZWQgYXQgZGVwbG95bWVudCB0aW1lLicsXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIE9ubHkgdmFsaWRhdGUgaWYgdGhlIFVSSSBpcyBhIGNvbmNyZXRlIHN0cmluZyAobm90IGEgdG9rZW4pXG4gICAgY29uc3QgcGF0dGVybiA9IC9eXFxkezEyfVxcLmRrclxcLmVjclxcLihbYS16MC05LV0rKVxcLmFtYXpvbmF3c1xcLmNvbVxcLygoPzpbYS16MC05XSsoPzpbLl8tXVthLXowLTldKykqXFwvKSpbYS16MC05XSsoPzpbLl8tXVthLXowLTldKykqKShbOkBdXFxTKykkLztcbiAgICBpZiAoIXBhdHRlcm4udGVzdCh1cmkpKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBsaXRgSW52YWxpZENvbnRhaW5lclVyaWAsXG4gICAgICAgIGBJbnZhbGlkIGNvbnRhaW5lciBVUkkgZm9ybWF0OiAke3VyaX0uIE11c3QgYmUgYSB2YWxpZCBFQ1IgVVJJIChlLmcuLCAxMjM0NTY3ODkwMTIuZGtyLmVjci51cy13ZXN0LTIuYW1hem9uYXdzLmNvbS9teS1hZ2VudDpsYXRlc3QpYCxcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgSUFNIHJvbGUgQVJOIGZvcm1hdCBhbmQgc3RydWN0dXJlXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVJvbGVBcm4ocm9sZUFybjogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gVmFsaWRhdGUgYmFzaWMgQVJOIGZvcm1hdCBmb3IgSUFNIHJvbGVzXG4gICAgY29uc3QgYXJuUGF0dGVybiA9IC9eYXJuOlthLXpcXC1dKzppYW06OlxcZHsxMn06cm9sZVxcL1thLXpBLVowLTkrPSwuQFxcLV9cXC9dKyQvO1xuICAgIGlmICghYXJuUGF0dGVybi50ZXN0KHJvbGVBcm4pKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBsaXRgSW52YWxpZFJvbGVBcm5Gb3JtYXRgLFxuICAgICAgICBgSW52YWxpZCBJQU0gcm9sZSBBUk4gZm9ybWF0OiAke3JvbGVBcm59LiBgICtcbiAgICAgICAgJ0V4cGVjdGVkIGZvcm1hdDogYXJuOjxwYXJ0aXRpb24+OmlhbTo6PGFjY291bnQtaWQ+OnJvbGUvPHJvbGUtbmFtZT4gb3IgYXJuOjxwYXJ0aXRpb24+OmlhbTo6PGFjY291bnQtaWQ+OnJvbGUvPHBhdGg+Lzxyb2xlLW5hbWU+JyxcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgdGhlIEFSTiBjb21wb25lbnRzIHVzaW5nIENESydzIEFybi5zcGxpdCgpXG4gICAgLy8gVXNlIFNMQVNIX1JFU09VUkNFX05BTUUgZm9ybWF0IGZvciBJQU0gcm9sZXMgKHdoaWNoIHVzZSBmb3JtYXQ6IHJvbGUvcm9sZS1uYW1lIG9yIHJvbGUvcGF0aC90by9yb2xlLW5hbWUpXG4gICAgY29uc3QgYXJuQ29tcG9uZW50cyA9IEFybi5zcGxpdChyb2xlQXJuLCBBcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSk7XG5cbiAgICBpZiAoYXJuQ29tcG9uZW50cy5zZXJ2aWNlICE9PSAnaWFtJykge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgSW52YWxpZFJvbGVBcm5TZXJ2aWNlYCwgYEludmFsaWQgc2VydmljZSBpbiBBUk46ICR7YXJuQ29tcG9uZW50cy5zZXJ2aWNlfS4gRXhwZWN0ZWQgJ2lhbScgZm9yIElBTSByb2xlIEFSTi5gLCB0aGlzKTtcbiAgICB9XG5cbiAgICBjb25zdCBhY2NvdW50SWQgPSBhcm5Db21wb25lbnRzLmFjY291bnQ7XG4gICAgaWYgKCFhY2NvdW50SWQgfHwgIS9eXFxkezEyfSQvLnRlc3QoYWNjb3VudElkKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgSW52YWxpZFJvbGVBcm5BY2NvdW50SWRgLCBgSW52YWxpZCBBV1MgYWNjb3VudCBJRCBpbiByb2xlIEFSTjogJHthY2NvdW50SWR9LiBNdXN0IGJlIGEgMTItZGlnaXQgbnVtYmVyLmAsIHRoaXMpO1xuICAgIH1cblxuICAgIC8vIEV4dHJhY3Qgcm9sZSBuYW1lIGZyb20gcmVzb3VyY2VcbiAgICAvLyBGb3IgSUFNIHJvbGVzLCByZXNvdXJjZSB3aWxsIGJlIFwicm9sZVwiIGFuZCByZXNvdXJjZU5hbWUgd2lsbCBiZSB0aGUgcm9sZSBuYW1lICh3aXRoIG9wdGlvbmFsIHBhdGgpXG4gICAgY29uc3QgcmVzb3VyY2UgPSBhcm5Db21wb25lbnRzLnJlc291cmNlO1xuICAgIGNvbnN0IHJlc291cmNlTmFtZSA9IGFybkNvbXBvbmVudHMucmVzb3VyY2VOYW1lO1xuXG4gICAgaWYgKHJlc291cmNlICE9PSAncm9sZScpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YEludmFsaWRSb2xlQXJuUmVzb3VyY2VUeXBlYCwgYEludmFsaWQgcmVzb3VyY2UgdHlwZSBpbiBBUk46ICR7cmVzb3VyY2V9LiBFeHBlY3RlZCAncm9sZScgZm9yIElBTSByb2xlIEFSTi5gLCB0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAoIXJlc291cmNlTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgTWlzc2luZ1JvbGVOYW1lYCwgJ1JvbGUgbmFtZSBpcyBtaXNzaW5nIGluIHRoZSBBUk4nLCB0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgcm9sZVBhdGhQYXJ0cyA9IHJlc291cmNlTmFtZS5zcGxpdCgnLycpO1xuICAgICAgY29uc3Qgcm9sZU5hbWUgPSByb2xlUGF0aFBhcnRzW3JvbGVQYXRoUGFydHMubGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmIChyb2xlTmFtZS5sZW5ndGggPiA2NCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBSb2xlTmFtZVRvb0xvbmdgLCBgUm9sZSBuYW1lIGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgNjQgY2hhcmFjdGVyczogJHtyb2xlTmFtZX1gLCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzdGFja0FjY291bnQgPSBTdGFjay5vZih0aGlzKS5hY2NvdW50O1xuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHN0YWNrQWNjb3VudCkgJiYgYWNjb3VudElkICE9PSBzdGFja0FjY291bnQpIHtcbiAgICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZFdhcm5pbmcoXG4gICAgICAgIGBJQU0gcm9sZSBpcyBmcm9tIGEgZGlmZmVyZW50IGFjY291bnQgKCR7YWNjb3VudElkfSkgdGhhbiB0aGUgc3RhY2sgYWNjb3VudCAoJHtzdGFja0FjY291bnR9KS4gYCArXG4gICAgICAgICdFbnN1cmUgY3Jvc3MtYWNjb3VudCBwZXJtaXNzaW9ucyBhcmUgcHJvcGVybHkgY29uZmlndXJlZC4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGUgcmVnaW9uIChJQU0gaXMgZ2xvYmFsLCBzbyByZWdpb24gc2hvdWxkIGJlIGVtcHR5KVxuICAgIGNvbnN0IHJlZ2lvbiA9IGFybkNvbXBvbmVudHMucmVnaW9uO1xuICAgIGNvbnN0IHN0YWNrUmVnaW9uID0gU3RhY2sub2YodGhpcykucmVnaW9uO1xuICAgIGlmIChyZWdpb24gJiYgcmVnaW9uICE9PSAnJyAmJiByZWdpb24gIT09IHN0YWNrUmVnaW9uICYmICFUb2tlbi5pc1VucmVzb2x2ZWQoc3RhY2tSZWdpb24pKSB7XG4gICAgICBBbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRXYXJuaW5nKFxuICAgICAgICBgSUFNIHJvbGUgQVJOIGNvbnRhaW5zIGEgcmVnaW9uICgke3JlZ2lvbn0pIHRoYXQgZG9lc24ndCBtYXRjaCB0aGUgc3RhY2sgcmVnaW9uICgke3N0YWNrUmVnaW9ufSkuIGAgK1xuICAgICAgICAnSUFNIGlzIGEgZ2xvYmFsIHNlcnZpY2UsIHNvIHRoaXMgbWlnaHQgYmUgaW50ZW50aW9uYWwuJyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBlbmRwb2ludCB0byB0aGlzIHJ1bnRpbWVcbiAgICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0aGF0IGNyZWF0ZXMgYSBSdW50aW1lRW5kcG9pbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcnVudGltZVxuICAgKlxuICAgKiBAcGFyYW0gZW5kcG9pbnROYW1lIFRoZSBuYW1lIG9mIHRoZSBlbmRwb2ludFxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgZW5kcG9pbnRcbiAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgUnVudGltZUVuZHBvaW50XG4gICAqL1xuICBATWV0aG9kTWV0YWRhdGEoKVxuICBwdWJsaWMgYWRkRW5kcG9pbnQoXG4gICAgZW5kcG9pbnROYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IEFkZEVuZHBvaW50T3B0aW9ucyxcbiAgKTogUnVudGltZUVuZHBvaW50IHtcbiAgICAvLyBDcmVhdGUgdGhlIGVuZHBvaW50IChzZWN1cml0eSBjb25maWd1cmF0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQpXG4gICAgY29uc3QgZW5kcG9pbnQgPSBuZXcgUnVudGltZUVuZHBvaW50KHRoaXMsIGBFbmRwb2ludCR7ZW5kcG9pbnROYW1lfWAsIHtcbiAgICAgIGVuZHBvaW50TmFtZTogZW5kcG9pbnROYW1lLFxuICAgICAgYWdlbnRSdW50aW1lSWQ6IHRoaXMuYWdlbnRSdW50aW1lSWQsXG4gICAgICBhZ2VudFJ1bnRpbWVWZXJzaW9uOiBvcHRpb25zPy52ZXJzaW9uID8/IHRoaXMuYWdlbnRSdW50aW1lVmVyc2lvbiA/PyAnMScsXG4gICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucz8uZGVzY3JpcHRpb24sXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgZGVwZW5kZW5jeTogZW5kcG9pbnQgbXVzdCB3YWl0IGZvciBydW50aW1lIHRvIGJlIGNyZWF0ZWRcbiAgICBlbmRwb2ludC5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5ydW50aW1lUmVzb3VyY2UpO1xuXG4gICAgcmV0dXJuIGVuZHBvaW50O1xuICB9XG59XG4iXX0=
|
package/lib/tools/browser.js
CHANGED
|
@@ -100,7 +100,7 @@ var BrowserSigning;
|
|
|
100
100
|
* Contains methods and attributes valid for Browsers either created with CDK or imported.
|
|
101
101
|
*/
|
|
102
102
|
class BrowserCustomBase extends aws_cdk_lib_1.Resource {
|
|
103
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.BrowserCustomBase", version: "2.
|
|
103
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.BrowserCustomBase", version: "2.252.0-alpha.0" };
|
|
104
104
|
/**
|
|
105
105
|
* A reference to a BrowserCustom resource.
|
|
106
106
|
*/
|
|
@@ -374,7 +374,7 @@ let BrowserCustom = (() => {
|
|
|
374
374
|
BrowserCustom = _classThis = _classDescriptor.value;
|
|
375
375
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
376
376
|
}
|
|
377
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.BrowserCustom", version: "2.
|
|
377
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.BrowserCustom", version: "2.252.0-alpha.0" };
|
|
378
378
|
/** Uniquely identifies this class. */
|
|
379
379
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.BrowserCustom';
|
|
380
380
|
/**
|
|
@@ -80,7 +80,7 @@ const CODE_INTERPRETER_TAG_MAX_LENGTH = 256;
|
|
|
80
80
|
* Contains methods and attributes valid for Code Interpreters either created with CDK or imported.
|
|
81
81
|
*/
|
|
82
82
|
class CodeInterpreterCustomBase extends aws_cdk_lib_1.Resource {
|
|
83
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustomBase", version: "2.
|
|
83
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustomBase", version: "2.252.0-alpha.0" };
|
|
84
84
|
/**
|
|
85
85
|
* A reference to a CodeInterpreterCustom resource.
|
|
86
86
|
*/
|
|
@@ -332,7 +332,7 @@ let CodeInterpreterCustom = (() => {
|
|
|
332
332
|
CodeInterpreterCustom = _classThis = _classDescriptor.value;
|
|
333
333
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
334
334
|
}
|
|
335
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustom", version: "2.
|
|
335
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustom", version: "2.252.0-alpha.0" };
|
|
336
336
|
/** Uniquely identifies this class. */
|
|
337
337
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.CodeInterpreterCustom';
|
|
338
338
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aws-cdk/aws-bedrock-agentcore-alpha",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.252.0-alpha.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "The CDK Construct Library for Amazon Bedrock",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -78,21 +78,21 @@
|
|
|
78
78
|
},
|
|
79
79
|
"license": "Apache-2.0",
|
|
80
80
|
"devDependencies": {
|
|
81
|
-
"aws-cdk-lib": "2.
|
|
82
|
-
"@aws-cdk/aws-bedrock-alpha": "2.
|
|
83
|
-
"@aws-cdk/cdk-build-tools": "2.
|
|
81
|
+
"aws-cdk-lib": "2.252.0",
|
|
82
|
+
"@aws-cdk/aws-bedrock-alpha": "2.252.0-alpha.0",
|
|
83
|
+
"@aws-cdk/cdk-build-tools": "2.252.0-alpha.0",
|
|
84
84
|
"@aws-cdk/integ-runner": "^2.197.1",
|
|
85
|
-
"@aws-cdk/pkglint": "2.
|
|
86
|
-
"@aws-cdk/integ-tests-alpha": "2.
|
|
85
|
+
"@aws-cdk/pkglint": "2.252.0-alpha.0",
|
|
86
|
+
"@aws-cdk/integ-tests-alpha": "2.252.0-alpha.0",
|
|
87
87
|
"@types/jest": "^29.5.14",
|
|
88
88
|
"constructs": "^10.5.0",
|
|
89
89
|
"jest": "^29.7.0"
|
|
90
90
|
},
|
|
91
91
|
"homepage": "https://github.com/aws/aws-cdk",
|
|
92
92
|
"peerDependencies": {
|
|
93
|
-
"aws-cdk-lib": "^2.
|
|
93
|
+
"aws-cdk-lib": "^2.252.0",
|
|
94
94
|
"constructs": "^10.5.0",
|
|
95
|
-
"@aws-cdk/aws-bedrock-alpha": "2.
|
|
95
|
+
"@aws-cdk/aws-bedrock-alpha": "2.252.0-alpha.0"
|
|
96
96
|
},
|
|
97
97
|
"engines": {
|
|
98
98
|
"node": ">= 20.0.0"
|
|
@@ -162,7 +162,7 @@
|
|
|
162
162
|
},
|
|
163
163
|
"jsiiRosetta": {
|
|
164
164
|
"exampleDependencies": {
|
|
165
|
-
"@aws-cdk/aws-bedrock-alpha": "^2.
|
|
165
|
+
"@aws-cdk/aws-bedrock-alpha": "^2.252.0-alpha.0"
|
|
166
166
|
}
|
|
167
167
|
}
|
|
168
168
|
}
|
|
@@ -7,6 +7,8 @@ import * as cognito from 'aws-cdk-lib/aws-cognito';
|
|
|
7
7
|
import * as iam from 'aws-cdk-lib/aws-iam';
|
|
8
8
|
import * as s3 from 'aws-cdk-lib/aws-s3';
|
|
9
9
|
import * as sns from 'aws-cdk-lib/aws-sns';
|
|
10
|
+
import * as logs from 'aws-cdk-lib/aws-logs';
|
|
11
|
+
import * as firehose from 'aws-cdk-lib/aws-kinesisfirehose';
|
|
10
12
|
import * as kms from 'aws-cdk-lib/aws-kms';
|
|
11
13
|
import * as ecr from 'aws-cdk-lib/aws-ecr';
|
|
12
14
|
import * as ec2 from 'aws-cdk-lib/aws-ec2';
|