Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@aws-cdk/aws-batch

Package Overview
Dependencies
Maintainers
5
Versions
288
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@aws-cdk/aws-batch - npm Package Compare versions

Comparing version 1.27.0 to 1.28.0

76

lib/compute-environment.d.ts

@@ -43,2 +43,17 @@ import * as ec2 from '@aws-cdk/aws-ec2';

/**
* Launch template property specification
*/
export interface LaunchTemplateSpecification {
/**
* The Launch template name
*/
readonly launchTemplateName: string;
/**
* The launch template version to be used (optional).
*
* @default - the default version of the launch template
*/
readonly version?: string;
}
/**
* Properties for defining the structure of the batch compute cluster.

@@ -48,8 +63,37 @@ */

/**
* The IAM role applied to EC2 resources in the compute environment.
* The allocation strategy to use for the compute resource in case not enough instances of the best
* fitting instance type can be allocated. This could be due to availability of the instance type in
* the region or Amazon EC2 service limits. If this is not specified, the default for the EC2
* ComputeResourceType is BEST_FIT, which will use only the best fitting instance type, waiting for
* additional capacity if it's not available. This allocation strategy keeps costs lower but can limit
* scaling. If you are using Spot Fleets with BEST_FIT then the Spot Fleet IAM Role must be specified.
* BEST_FIT_PROGRESSIVE will select an additional instance type that is large enough to meet the
* requirements of the jobs in the queue, with a preference for an instance type with a lower cost.
* The default value for the SPOT instance type is SPOT_CAPACITY_OPTIMIZED, which is only available for
* for this type of compute resources and will select an additional instance type that is large enough
* to meet the requirements of the jobs in the queue, with a preference for an instance type that is
* less likely to be interrupted.
*
* @default AllocationStrategy.BEST_FIT
*/
readonly allocationStrategy?: AllocationStrategy;
/**
* The Amazon ECS instance profile applied to Amazon EC2 instances in a compute environment. You can specify
* the short name or full Amazon Resource Name (ARN) of an instance profile. For example, ecsInstanceRole or
* arn:aws:iam::<aws_account_id>:instance-profile/ecsInstanceRole . For more information, see Amazon ECS
* Instance Role in the AWS Batch User Guide.
*
* @default - a new role will be created.
* @link https://docs.aws.amazon.com/batch/latest/userguide/instance_IAM_role.html
*/
readonly instanceRole?: iam.IRole;
readonly instanceRole?: string;
/**
* An optional launch template to associate with your compute resources.
* For more information, see README file.
*
* @default - no custom launch template will be used
* @link https://docs.aws.amazon.com/batch/latest/userguide/launch-templates.html
*/
readonly launchTemplate?: LaunchTemplateSpecification;
/**
* The types of EC2 instances that may be launched in the compute environment. You can specify instance

@@ -66,3 +110,3 @@ * families to launch any instance type within those families (for example, c4 or p3), or you can specify

*
* @default AWS default security group.
* @default - AWS default security group.
*/

@@ -122,3 +166,3 @@ readonly securityGroups?: ec2.ISecurityGroup[];

*
* @default - No SSH access will be possible.
* @default - no SSH access will be possible.
*/

@@ -156,17 +200,2 @@ readonly ec2KeyPair?: string;

/**
* The allocation strategy to use for the compute resource in case not enough instances ofthe best
* fitting instance type can be allocated. This could be due to availability of the instance type in
* the region or Amazon EC2 service limits. If this is not specified, the default is BEST_FIT, which
* will use only the best fitting instance type, waiting for additional capacity if it's not available.
* This allocation strategy keeps costs lower but can limit scaling. If you are using Spot Fleets with
* BEST_FIT then the Spot Fleet IAM Role must be specified. BEST_FIT_PROGRESSIVE will select an additional
* instance type that is large enough to meet the requirements of the jobs in the queue, with a preference
* for an instance type with a lower cost. SPOT_CAPACITY_OPTIMIZED is only available for Spot Instance
* compute resources and will select an additional instance type that is large enough to meet the requirements
* of the jobs in the queue, with a preference for an instance type that is less likely to be interrupted.
*
* @default AllocationStrategy.BEST_FIT
*/
readonly allocationStrategy?: AllocationStrategy;
/**
* A name for the compute environment.

@@ -176,9 +205,9 @@ *

*
* @default Cloudformation-generated name
* @default - CloudFormation-generated name
*/
readonly computeEnvironmentName?: string;
/**
* The details of the compute resources managed by this environment.
* The details of the required compute resources for the managed compute environment.
*
* If specified, and this is an managed compute environment, the property will be ignored.
* If specified, and this is an unmanaged compute environment, will throw an error.
*

@@ -188,3 +217,4 @@ * By default, AWS Batch managed compute environments use a recent, approved version of the

*
* @default - AWS-managed compute resources
* @default - CloudFormation defaults
* @link https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-computeenvironment-computeresources.html
*/

@@ -191,0 +221,0 @@ readonly computeResources?: ComputeResources;

@@ -60,6 +60,9 @@ "use strict";

let computeResources;
// Only allow compute resources to be set when using UNMANAGED type
if (props.computeResources && !this.isManaged(props)) {
// Only allow compute resources to be set when using MANAGED type
if (props.computeResources && this.isManaged(props)) {
computeResources = {
allocationStrategy: props.allocationStrategy || AllocationStrategy.BEST_FIT,
allocationStrategy: props.computeResources.allocationStrategy
|| (props.computeResources.type === ComputeResourceType.SPOT
? AllocationStrategy.SPOT_CAPACITY_OPTIMIZED
: AllocationStrategy.BEST_FIT),
bidPercentage: props.computeResources.bidPercentage,

@@ -70,7 +73,13 @@ desiredvCpus: props.computeResources.desiredvCpus,

instanceRole: props.computeResources.instanceRole
? props.computeResources.instanceRole.roleArn
: new iam.Role(this, 'Resource-Instance-Role', {
assumedBy: new iam.ServicePrincipal('batch.amazonaws.com'),
}).roleArn,
? props.computeResources.instanceRole
: new iam.CfnInstanceProfile(this, 'Instance-Profile', {
roles: [new iam.Role(this, 'Ecs-Instance-Role', {
assumedBy: new iam.ServicePrincipal('ec2.amazonaws.com'),
managedPolicies: [
iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AmazonEC2ContainerServiceforEC2Role')
]
}).roleName]
}).attrArn,
instanceTypes: this.buildInstanceTypes(props.computeResources.instanceTypes),
launchTemplate: props.computeResources.launchTemplate,
maxvCpus: props.computeResources.maxvCpus || 256,

@@ -97,3 +106,3 @@ minvCpus: props.computeResources.minvCpus || 0,

state: props.enabled === undefined ? 'ENABLED' : (props.enabled ? 'ENABLED' : 'DISABLED'),
type: this.isManaged(props) ? 'UNMANAGED' : 'MANAGED',
type: this.isManaged(props) ? 'MANAGED' : 'UNMANAGED',
});

@@ -139,7 +148,7 @@ if (props.computeResources && props.computeResources.vpc) {

}
if (this.isManaged(props) && props.computeResources !== undefined) {
throw new Error('It is not allowed to set computeResources on an AWS managed compute environment');
if (!this.isManaged(props) && props.computeResources !== undefined) {
throw new Error('It is not allowed to set computeResources on an AWS unmanaged compute environment');
}
if (!this.isManaged(props) && props.computeResources === undefined) {
throw new Error('computeResources is missing but required on an unmanaged compute environment');
if (this.isManaged(props) && props.computeResources === undefined) {
throw new Error('computeResources is missing but required on a managed compute environment');
}

@@ -156,3 +165,3 @@ // Setting a bid percentage is only allowed on SPOT resources +

// SPOT_CAPACITY_OPTIMIZED allocation is not allowed
if (props.allocationStrategy && props.allocationStrategy === AllocationStrategy.SPOT_CAPACITY_OPTIMIZED) {
if (props.computeResources.allocationStrategy && props.computeResources.allocationStrategy === AllocationStrategy.SPOT_CAPACITY_OPTIMIZED) {
throw new Error('The SPOT_CAPACITY_OPTIMIZED allocation strategy is only allowed if the environment is a SPOT type compute environment');

@@ -205,3 +214,4 @@ }

getSpotFleetRole(props) {
if (props.allocationStrategy && props.allocationStrategy !== AllocationStrategy.BEST_FIT) {
var _a;
if (((_a = props.computeResources) === null || _a === void 0 ? void 0 : _a.allocationStrategy) && props.computeResources.allocationStrategy !== AllocationStrategy.BEST_FIT) {
return undefined;

@@ -221,2 +231,2 @@ }

exports.ComputeEnvironment = ComputeEnvironment;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZS1lbnZpcm9ubWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbXB1dGUtZW52aXJvbm1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx3Q0FBd0M7QUFDeEMsd0NBQXdDO0FBQ3hDLHdDQUFnRjtBQUNoRix1REFBMEQ7QUFFMUQ7OztHQUdHO0FBQ0gsSUFBWSxtQkFVWDtBQVZELFdBQVksbUJBQW1CO0lBQzdCOztPQUVHO0lBQ0gsd0NBQWtCLENBQUE7SUFFbEI7O09BRUc7SUFDSCxvQ0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQVZXLG1CQUFtQixHQUFuQiwyQkFBbUIsS0FBbkIsMkJBQW1CLFFBVTlCO0FBRUQ7OztHQUdHO0FBQ0gsSUFBWSxrQkFxQlg7QUFyQkQsV0FBWSxrQkFBa0I7SUFDNUI7OztPQUdHO0lBQ0gsMkNBQXFCLENBQUE7SUFFckI7Ozs7T0FJRztJQUNILG1FQUE2QyxDQUFBO0lBRTdDOzs7OztPQUtHO0lBQ0gseUVBQW1ELENBQUE7QUFDckQsQ0FBQyxFQXJCVyxrQkFBa0IsR0FBbEIsMEJBQWtCLEtBQWxCLDBCQUFrQixRQXFCN0I7QUFpTkQ7Ozs7R0FJRztBQUNILE1BQWEsa0JBQW1CLFNBQVEsZUFBUTtJQWtDOUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxRQUFpQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRTtRQUN6RyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLFlBQVksRUFBRSxLQUFLLENBQUMsc0JBQXNCO1NBQzNDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFMUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25ELElBQUksZ0JBQTRFLENBQUM7UUFFakYsbUVBQW1FO1FBQ25FLElBQUksS0FBSyxDQUFDLGdCQUFnQixJ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RUQ7Ozs7O09BS0c7SUFDSyxnQkFBZ0IsQ0FBQyxLQUE4QjtRQUNyRCxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSxLQUFLLENBQUMsa0JBQWtCLEtBQUssa0JBQWtCLENBQUMsUUFBUSxFQUFFO1lBQ3hGLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO1FBRUQsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEVBQUU7WUFDMUIsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFO2dCQUN4QyxPQUFPLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUM7YUFDN0M7aUJBQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLElBQUksRUFBRTtnQkFDbkUsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUseUJBQXlCLEVBQ3pELE1BQU0sVUFBRyxDQUFDLFNBQVMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sOEVBQThFLENBQUMsQ0FBQzthQUNoSTtTQUNGO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBck1ELGdEQXFNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGVjMiBmcm9tICdAYXdzLWNkay9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdAYXdzLWNkay9hd3MtaWFtJztcbmltcG9ydCB7IEF3cywgQ29uc3RydWN0LCBJUmVzb3VyY2UsIFJlc291cmNlLCBTdGFjaywgVGFnIH0gZnJvbSAnQGF3cy1jZGsvY29yZSc7XG5pbXBvcnQgeyBDZm5Db21wdXRlRW52aXJvbm1lbnQgfSBmcm9tICcuL2JhdGNoLmdlbmVyYXRlZCc7XG5cbi8qKlxuICogUHJvcGVydHkgdG8gc3BlY2lmeSBpZiB0aGUgY29tcHV0ZSBlbnZpcm9ubWVudFxuICogdXNlcyBPbi1EZW1hbmQgb3IgU3BvdEZsZWV0IGNvbXB1dGUgcmVzb3VyY2VzLlxuICovXG5leHBvcnQgZW51bSBDb21wdXRlUmVzb3VyY2VUeXBlIHtcbiAgLyoqXG4gICAqIFJlc291cmNlcyB3aWxsIGJlIEVDMiBPbi1EZW1hbmQgcmVzb3VyY2VzLlxuICAgKi9cbiAgT05fREVNQU5EICA9ICdFQzInLFxuXG4gIC8qKlxuICAgKiBSZXNvdXJjZXMgd2lsbCBiZSBFQzIgU3BvdEZsZWV0IHJlc291cmNlcy5cbiAgICovXG4gIFNQT1QgPSAnU1BPVCcsXG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgaG93IHRvIHByZXBhcmUgY29tcHV0ZSByZXNvdXJjZXNcbiAqIHRoYXQgYXJlIHByb3Zpc2lvbmVkIGZvciBhIGNvbXB1dGUgZW52aXJvbm1lbnQuXG4gKi9cbmV4cG9ydCBlbnVtIEFsbG9jYXRpb25TdHJhdGVneSB7XG4gIC8qKlxuICAgKiBCYXRjaCB3aWxsIHVzZSB0aGUgYmVzdCBmaXR0aW5nIGluc3RhbmNlIHR5cGUgd2lsbCBiZSB1c2VkXG4gICAqIHdoZW4gYXNzaWduaW5nIGEgYmF0Y2ggam9iIGluIHRoaXMgY29tcHV0ZSBlbnZpcm9ubWVudC5cbiAgICovXG4gIEJFU1RfRklUID0gJ0JFU1RfRklUJyxcblxuICAvKipcbiAgICogQmF0Y2ggd2lsbCBzZWxlY3QgYWRkaXRpb25hbCBpbnN0YW5jZSB0eXBlcyB0aGF0IGFyZSBsYXJnZSBlbm91Z2ggdG9cbiAgICogbWVldCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZSBqb2JzIGluIHRoZSBxdWV1ZSwgd2l0aCBhIHByZWZlcmVuY2UgZm9yXG4gICAqIGluc3RhbmNlIHR5cGVzIHdpdGggYSBsb3dlciBjb3N0IHBlciB1bml0IHZDUFUuXG4gICAqL1xuICBCRVNUX0ZJVF9QUk9HUkVTU0lWRSA9ICdCRVNUX0ZJVF9QUk9HUkVTU0lWRScsXG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgb25seSBhdmFpbGFibGUgZm9yIFNwb3QgSW5zdGFuY2UgY29tcHV0ZSByZXNvdXJjZXMgYW5kIHdpbGwgc2VsZWN0XG4gICAqIGFkZGl0aW9uYWwgaW5zdGFuY2UgdHlwZXMgdGhhdCBhcmUgbGFyZ2UgZW5vdWdoIHRvIG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZlxuICAgKiB0aGUgam9icyBpbiB0aGUgcXVldWUsIHdpdGggYSBwcmVmZXJlbmNlIGZvciBpbnN0YW5jZSB0eXBlcyB0aGF0IGFyZSBsZXNzXG4gICAqIGxpa2VseSB0byBiZSBpbnRlcnJ1cHRlZC5cbiAgICovXG4gIFNQT1RfQ0FQQUNJVFlfT1BUSU1JWkVEID0gJ1NQT1RfQ0FQQUNJVFlfT1BUSU1JWkVEJyxcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBkZWZpbmluZyB0aGUgc3RydWN0dXJlIG9mIHRoZSBiYXRjaCBjb21wdXRlIGNsdXN0ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcHV0ZVJlc291cmNlcyB7XG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgYXBwbGllZCB0byBFQzIgcmVzb3VyY2VzIGluIHRoZSBjb21wdXRlIGVudmlyb25tZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgbmV3IHJvbGUgd2lsbCBiZSBjcmVhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2VSb2xlPzogaWFtLklSb2xlO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZXMgb2YgRUMyIGluc3RhbmNlcyB0aGF0IG1heSBiZSBsYXVuY2hlZCBpbiB0aGUgY29tcHV0ZSBlbnZpcm9ubWVudC4gWW91IGNhbiBzcGVjaWZ5IGluc3RhbmNlXG4gICAqIGZhbWlsaWVzIHRvIGxhdW5jaCBhbnkgaW5zdGFuY2UgdHlwZSB3aXRoaW4gdGhvc2UgZmFtaWxpZXMgKGZvciBleGFtcGxlLCBjNCBvciBwMyksIG9yIHlvdSBjYW4gc3BlY2lmeVxuICAgKiBzcGVjaWZpYyBzaXplcyB3aXRoaW4gYSBmYW1pbHkgKHN1Y2ggYXMgYzQuOHhsYXJnZSkuIFlvdSBjYW4gYWxzbyBjaG9vc2Ugb3B0aW1hbCB0byBwaWNrIGluc3RhbmNlIHR5cGVzXG4gICAqIChmcm9tIHRoZSBDLCBNLCBhbmQgUiBpbnN0YW5jZSBmYW1pbGllcykgb24gdGhlIGZseSB0aGF0IG1hdGNoIHRoZSBkZW1hbmQgb2YgeW91ciBqb2IgcXVldWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBvcHRpbWFsXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZVR5cGVzPzogZWMyLkluc3RhbmNlVHlwZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgRUMyIHNlY3VyaXR5IGdyb3VwKHMpIGFzc29jaWF0ZWQgd2l0aCBpbnN0YW5jZXMgbGF1bmNoZWQgaW4gdGhlIGNvbXB1dGUgZW52aXJvbm1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IEFXUyBkZWZhdWx0IHNlY3VyaXR5IGdyb3VwLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cHM/OiBlYzIuSVNlY3VyaXR5R3JvdXBbXTtcblxuICAvKipcbiAgICogVGhlIFZQQyBuZXR3b3JrIHRoYXQgYWxsIGNvbXB1dGUgcmVzb3VyY2VzIHdpbGwgYmUgY29ubmVjdGVkIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBlYzIuSVZwYztcblxuICAvKipcbiAgICogVGhlIFZQQyBzdWJuZXRzIGludG8gd2hpY2ggdGhlIGNvbXB1dGUgcmVzb3VyY2VzIGFyZSBsYXVuY2hlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBwcml2YXRlIHN1Ym5ldHMgb2YgdGhlIHN1cHBsaWVkIFZQQy5cbiAgICovXG4gIHJlYWRvbmx5IHZwY1N1Ym5ldHM/OiBlYzIuU3VibmV0U2VsZWN0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBjb21wdXRlIGVudmlyb25tZW50OiBPTl9ERU1BTkQgb3IgU1BPVC5cbiAgICpcbiAgICogQGRlZmF1bHQgT05fREVNQU5EXG4gICAqL1xuICByZWFkb25seSB0eXBlPzogQ29tcHV0ZVJlc291cmNlVHlwZTtcblxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSB3aWxsIGJlIGlnbm9yZWQgaWYgeW91IHNldCB0aGUgZW52aXJvbm1lbnQgdHlwZSB0byBPTl9ERU1BTkQuXG4gICAqXG4gICAqIFRoZSBtYXhpbXVtIHBlcmNlbnRhZ2UgdGhhdCBhIFNwb3QgSW5zdGFuY2UgcHJpY2UgY2FuIGJlIHdoZW4gY29tcGFyZWQgd2l0aCB0aGUgT24tRGVtYW5kIHByaWNlIGZvclxuICAgKiB0aGF0IGluc3RhbmNlIHR5cGUgYmVmb3JlIGluc3RhbmNlcyBhcmUgbGF1bmNoZWQuIEZvciBleGFtcGxlLCBpZiB5b3VyIG1heGltdW0gcGVyY2VudGFnZSBpcyAyMCUsXG4gICAqIHRoZW4gdGhlIFNwb3QgcHJpY2UgbXVzdCBiZSBiZWxvdyAyMCUgb2YgdGhlIGN1cnJlbnQgT24tRGVtYW5kIHByaWNlIGZvciB0aGF0IEVDMiBpbnN0YW5jZS4gWW91IGFsd2F5c1xuICAgKiBwYXkgdGhlIGxvd2VzdCAobWFya2V0KSBwcmljZSBhbmQgbmV2ZXIgbW9yZSB0aGFuIHlvdXIgbWF4aW11bSBwZXJjZW50YWdlLiBJZiB5b3UgbGVhdmUgdGhpcyBmaWVsZCBlbXB0eSxcbiAgICogdGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAwJSBvZiB0aGUgT24tRGVtYW5kIHByaWNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxMDBcbiAgICovXG4gIHJlYWRvbmx5IGJpZFBlcmNlbnRhZ2U/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNpcmVkIG51bWJlciBvZiBFQzIgdkNQVVMgaW4gdGhlIGNvbXB1dGUgZW52aXJvbm1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZGVzaXJlZCB2Y3B1IHZhbHVlIHdpbGwgYmUgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRlc2lyZWR2Q3B1cz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIEVDMiB2Q1BVcyB0aGF0IGFuIGVudmlyb25tZW50IGNhbiByZWFjaC4gRWFjaCB2Q1BVIGlzIGVxdWl2YWxlbnQgdG9cbiAgICogMSwwMjQgQ1BVIHNoYXJlcy4gWW91IG11c3Qgc3BlY2lmeSBhdCBsZWFzdCBvbmUgdkNQVS5cbiAgICpcbiAgICogQGRlZmF1bHQgMjU2XG4gICAqL1xuICByZWFkb25seSBtYXh2Q3B1cz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIEVDMiB2Q1BVcyB0aGF0IGFuIGVudmlyb25tZW50IHNob3VsZCBtYWludGFpbiAoZXZlbiBpZiB0aGUgY29tcHV0ZSBlbnZpcm9ubWVudCBzdGF0ZSBpcyBESVNBQkxFRCkuXG4gICAqIEVhY2ggdkNQVSBpcyBlcXVpdmFsZW50IHRvIDEsMDI0IENQVSBzaGFyZXMuIFlvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lIHZDUFUuXG4gICAqXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIHJlYWRvbmx5IG1pbnZDcHVzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgRUMyIGtleSBwYWlyIHRoYXQgaXMgdXNlZCBmb3IgaW5zdGFuY2VzIGxhdW5jaGVkIGluIHRoZSBjb21wdXRlIGVudmlyb25tZW50LlxuICAgKiBJZiBubyBrZXkgaXMgZGVmaW5lZCwgdGhlbiBTU0ggYWNjZXNzIGlzIG5vdCBhbGxvd2VkIHRvIHByb3Zpc2lvbmVkIGNvbXB1dGUgcmVzb3VyY2VzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIFNTSCBhY2Nlc3Mgd2lsbCBiZSBwb3NzaWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGVjMktleVBhaXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBbWF6b24gTWFjaGluZSBJbWFnZSAoQU1JKSBJRCB1c2VkIGZvciBpbnN0YW5jZXMgbGF1bmNoZWQgaW4gdGhlIGNvbXB1dGUgZW52aXJvbm1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gaW1hZ2Ugd2lsbCBiZSB1c2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2U/OiBlYzIuSU1hY2hpbmVJbWFnZTtcblxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSB3aWxsIGJlIGlnbm9yZWQgaWYgeW91IHNldCB0aGUgZW52aXJvbm1lbnQgdHlwZSB0byBPTl9ERU1BTkQuXG4gICAqXG4gICAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgQW1hem9uIEVDMiBTcG90IEZsZWV0IElBTSByb2xlIGFwcGxpZWQgdG8gYSBTUE9UIGNvbXB1dGUgZW52aXJvbm1lbnQuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgQW1hem9uIEVDMiBTcG90IEZsZWV0IFJvbGUgaW4gdGhlIEFXUyBCYXRjaCBVc2VyIEd1aWRlLlxuICAgKlxuICAgKiBAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L3VzZXJndWlkZS9zcG90X2ZsZWV0X0lBTV9yb2xlLmh0bWxcbiAgICogQGRlZmF1bHQgLSBubyBmbGVldCByb2xlIHdpbGwgYmUgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNwb3RGbGVldFJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgLyoqXG4gICAqIEtleS12YWx1ZSBwYWlyIHRhZ3MgdG8gYmUgYXBwbGllZCB0byByZXNvdXJjZXMgdGhhdCBhcmUgbGF1bmNoZWQgaW4gdGhlIGNvbXB1dGUgZW52aXJvbm1lbnQuXG4gICAqIEZvciBBV1MgQmF0Y2gsIHRoZXNlIHRha2UgdGhlIGZvcm0gb2YgXCJTdHJpbmcxXCI6IFwiU3RyaW5nMlwiLCB3aGVyZSBTdHJpbmcxIGlzIHRoZSB0YWcga2V5IGFuZFxuICAgKiBTdHJpbmcyIGlzIHRoZSB0YWcgdmFsdWXigJRmb3IgZXhhbXBsZSwgeyBcIk5hbWVcIjogXCJBV1MgQmF0Y2ggSW5zdGFuY2UgLSBDNE9uRGVtYW5kXCIgfS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyB0YWdzIHdpbGwgYmUgYXNzaWduZWQgb24gY29tcHV0ZSByZXNvdXJjZXMuXG4gICAqL1xuICByZWFkb25seSBjb21wdXRlUmVzb3VyY2VzVGFncz86IFRhZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhIG5ldyBDb21wdXRlIEVudmlyb25tZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcHV0ZUVudmlyb25tZW50UHJvcHMge1xuICAvKipcbiAgICogVGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgdG8gdXNlIGZvciB0aGUgY29tcHV0ZSByZXNvdXJjZSBpbiBjYXNlIG5vdCBlbm91Z2ggaW5zdGFuY2VzIG9mdGhlIGJlc3RcbiAgICogZml0dGluZyBpbnN0YW5jZSB0eXBlIGNhbiBiZSBhbGxvY2F0ZWQuIFRoaXMgY291bGQgYmUgZHVlIHRvIGF2YWlsYWJpbGl0eSBvZiB0aGUgaW5zdGFuY2UgdHlwZSBpblxuICAgKiB0aGUgcmVnaW9uIG9yIEFtYXpvbiBFQzIgc2VydmljZSBsaW1pdHMuIElmIHRoaXMgaXMgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgaXMgQkVTVF9GSVQsIHdoaWNoXG4gICAqIHdpbGwgdXNlIG9ubHkgdGhlIGJlc3QgZml0dGluZyBpbnN0YW5jZSB0eXBlLCB3YWl0aW5nIGZvciBhZGRpdGlvbmFsIGNhcGFjaXR5IGlmIGl0J3Mgbm90IGF2YWlsYWJsZS5cbiAgICogVGhpcyBhbGxvY2F0aW9uIHN0cmF0ZWd5IGtlZXBzIGNvc3RzIGxvd2VyIGJ1dCBjYW4gbGltaXQgc2NhbGluZy4gSWYgeW91IGFyZSB1c2luZyBTcG90IEZsZWV0cyB3aXRoXG4gICAqIEJFU1RfRklUIHRoZW4gdGhlIFNwb3QgRmxlZXQgSUFNIFJvbGUgbXVzdCBiZSBzcGVjaWZpZWQuIEJFU1RfRklUX1BST0dSRVNTSVZFIHdpbGwgc2VsZWN0IGFuIGFkZGl0aW9uYWxcbiAgICogaW5zdGFuY2UgdHlwZSB0aGF0IGlzIGxhcmdlIGVub3VnaCB0byBtZWV0IHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIGpvYnMgaW4gdGhlIHF1ZXVlLCB3aXRoIGEgcHJlZmVyZW5jZVxuICAgKiBmb3IgYW4gaW5zdGFuY2UgdHlwZSB3aXRoIGEgbG93ZXIgY29zdC4gU1BPVF9DQVBBQ0lUWV9PUFRJTUlaRUQgaXMgb25seSBhdmFpbGFibGUgZm9yIFNwb3QgSW5zdGFuY2VcbiAgICogY29tcHV0ZSByZXNvdXJjZXMgYW5kIHdpbGwgc2VsZWN0IGFuIGFkZGl0aW9uYWwgaW5zdGFuY2UgdHlwZSB0aGF0IGlzIGxhcmdlIGVub3VnaCB0byBtZWV0IHRoZSByZXF1aXJlbWVudHNcbiAgICogb2YgdGhlIGpvYnMgaW4gdGhlIHF1ZXVlLCB3aXRoIGEgcHJlZmVyZW5jZSBmb3IgYW4gaW5zdGFuY2UgdHlwZSB0aGF0IGlzIGxlc3MgbGlrZWx5IHRvIGJlIGludGVycnVwdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBBbGxvY2F0aW9uU3RyYXRlZ3kuQkVTVF9GSVRcbiAgICovXG4gIHJlYWRvbmx5IGFsbG9jYXRpb25TdHJhdGVneT86IEFsbG9jYXRpb25TdHJhdGVneTtcblxuICAvKipcbiAgICogQSBuYW1lIGZvciB0aGUgY29tcHV0ZSBlbnZpcm9ubWVudC5cbiAgICpcbiAgICogVXAgdG8gMTI4IGxldHRlcnMgKHVwcGVyY2FzZSBhbmQgbG93ZXJjYXNlKSwgbnVtYmVycywgaHlwaGVucywgYW5kIHVuZGVyc2NvcmVzIGFyZSBhbGxvd2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBDbG91ZGZvcm1hdGlvbi1nZW5lcmF0ZWQgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgY29tcHV0ZUVudmlyb25tZW50TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRldGFpbHMgb2YgdGhlIGNvbXB1dGUgcmVzb3VyY2VzIG1hbmFnZWQgYnkgdGhpcyBlbnZpcm9ubWVudC5cbiAgICpcbiAgICogSWYgc3BlY2lmaWVkLCBhbmQgdGhpcyBpcyBhbiBtYW5hZ2VkIGNvbXB1dGUgZW52aXJvbm1lbnQsIHRoZSBwcm9wZXJ0eSB3aWxsIGJlIGlnbm9yZWQuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIEFXUyBCYXRjaCBtYW5hZ2VkIGNvbXB1dGUgZW52aXJvbm1lbnRzIHVzZSBhIHJlY2VudCwgYXBwcm92ZWQgdmVyc2lvbiBvZiB0aGVcbiAgICogQW1hem9uIEVDUy1vcHRpbWl6ZWQgQU1JIGZvciBjb21wdXRlIHJlc291cmNlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBBV1MtbWFuYWdlZCBjb21wdXRlIHJlc291cmNlc1xuICAgKi9cbiAgcmVhZG9ubHkgY29tcHV0ZVJlc291cmNlcz86IENvbXB1dGVSZXNvdXJjZXM7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0ZSBvZiB0aGUgY29tcHV0ZSBlbnZpcm9ubWVudC4gSWYgdGhlIHN0YXRlIGlzIHNldCB0byB0cnVlLCB0aGVuIHRoZSBjb21wdXRlXG4gICAqIGVudmlyb25tZW50IGFjY2VwdHMgam9icyBmcm9tIGEgcXVldWUgYW5kIGNhbiBzY2FsZSBvdXQgYXV0b21hdGljYWxseSBiYXNlZCBvbiBxdWV1ZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgdXNlZCBieSBCYXRjaCB0byBtYWtlIGNhbGxzIHRvIG90aGVyIEFXUyBzZXJ2aWNlcyBvbiB5b3VyIGJlaGFsZiBmb3IgbWFuYWdpbmdcbiAgICogdGhlIHJlc291cmNlcyB0aGF0IHlvdSB1c2Ugd2l0aCB0aGUgc2VydmljZS4gQnkgZGVmYXVsdCwgdGhpcyByb2xlIGlzIGNyZWF0ZWQgZm9yIHlvdSB1c2luZ1xuICAgKiB0aGUgQVdTIG1hbmFnZWQgc2VydmljZSBwb2xpY3kgZm9yIEJhdGNoLlxuICAgKlxuICAgKiBAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L3VzZXJndWlkZS9zZXJ2aWNlX0lBTV9yb2xlLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgLSBSb2xlIHVzaW5nIHRoZSAnc2VydmljZS1yb2xlL0FXU0JhdGNoU2VydmljZVJvbGUnIHBvbGljeS5cbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VSb2xlPzogaWFtLklSb2xlLFxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIEFXUyBzaG91bGQgbWFuYWdlIHRoZSBhbGxvY2F0aW9uIG9mIGNvbXB1dGUgcmVzb3VyY2VzIGZvciBwcm9jZXNzaW5nIGpvYnMuXG4gICAqIElmIHNldCB0byBmYWxzZSwgdGhlbiB5b3UgYXJlIGluIGNoYXJnZSBvZiBwcm92aWRpbmcgdGhlIGNvbXB1dGUgcmVzb3VyY2UgZGV0YWlscy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbWFuYWdlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBvZiBhIGNvbXB1dGUgZW52aXJvbm1lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbXB1dGVFbnZpcm9ubWVudCBleHRlbmRzIElSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoaXMgY29tcHV0ZSBlbnZpcm9ubWVudC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29tcHV0ZUVudmlyb25tZW50QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoaXMgY29tcHV0ZSBlbnZpcm9ubWVudC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29tcHV0ZUVudmlyb25tZW50TmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEJhdGNoIENvbXB1dGUgRW52aXJvbm1lbnQuXG4gKlxuICogRGVmaW5lcyBhIGJhdGNoIGNvbXB1dGUgZW52aXJvbm1lbnQgdG8gcnVuIGJhdGNoIGpvYnMgb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wdXRlRW52aXJvbm1lbnQgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElDb21wdXRlRW52aXJvbm1lbnQge1xuICAvKipcbiAgICogRmV0Y2hlcyBhbiBleGlzdGluZyBiYXRjaCBjb21wdXRlIGVudmlyb25tZW50IGJ5IGl0cyBhbWF6b24gcmVzb3VyY2UgbmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlXG4gICAqIEBwYXJhbSBpZFxuICAgKiBAcGFyYW0gY29tcHV0ZUVudmlyb25tZW50QXJuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Db21wdXRlRW52aXJvbm1lbnRBcm4oc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgY29tcHV0ZUVudmlyb25tZW50QXJuOiBzdHJpbmcpOiBJQ29tcHV0ZUVudmlyb25tZW50IHtcbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHNjb3BlKTtcbiAgICBjb25zdCBjb21wdXRlRW52aXJvbm1lbnROYW1lID0gc3RhY2sucGFyc2VBcm4oY29tcHV0ZUVudmlyb25tZW50QXJuKS5yZXNvdXJjZU5hbWUhO1xuXG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJQ29tcHV0ZUVudmlyb25tZW50IHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjb21wdXRlRW52aXJvbm1lbnRBcm4gPSBjb21wdXRlRW52aXJvbm1lbnRBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY29tcHV0ZUVudmlyb25tZW50TmFtZSA9IGNvbXB1dGVFbnZpcm9ubWVudE5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoaXMgY29tcHV0ZSBlbnZpcm9ubWVudC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbXB1dGVFbnZpcm9ubWVudEFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGlzIGNvbXB1dGUgZW52aXJvbm1lbnQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb21wdXRlRW52aXJvbm1lbnROYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENvbXB1dGVFbnZpcm9ubWVudFByb3BzID0geyBlbmFibGVkOiB0cnVlLCBtYW5hZ2VkOiB0cnVlIH0pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMuY29tcHV0ZUVudmlyb25tZW50TmFtZSxcbiAgICB9KTtcblxuICAgIHRoaXMudmFsaWRhdGVQcm9wcyhwcm9wcyk7XG5cbiAgICBjb25zdCBzcG90RmxlZXRSb2xlID0gdGhpcy5nZXRTcG90RmxlZXRSb2xlKHByb3BzKTtcbiAgICBsZXQgY29tcHV0ZVJlc291cmNlczogQ2ZuQ29tcHV0ZUVudmlyb25tZW50LkNvbXB1dGVSZXNvdXJjZXNQcm9wZXJ0eSB8IHVuZGVmaW5lZDtcblxuICAgIC8vIE9ubHkgYWxsb3cgY29tcHV0ZSByZXNvdXJjZXMgdG8gYmUgc2V0IHdoZW4gdXNpbmcgVU5NQU5BR0VEIHR5cGVcbiAgICBpZiAocHJvcHMuY29tcHV0ZVJlc291cmNlcyAmJiAhdGhpcy5pc01hbmFnZWQocHJvcHMpKSB7XG4gICAgICBjb21wdXRlUmVzb3VyY2VzID0ge1xuICAgICAgICBhbGxvY2F0aW9uU3RyYXRlZ3k6IHByb3BzLmFsbG9jYXRpb25TdHJhdGVneSB8fCBBbGxvY2F0aW9uU3RyYXRlZ3kuQkVTVF9GSVQsXG4gICAgICAgIGJpZFBlcmNlbnRhZ2U6IHByb3BzLmNvbXB1dGVSZXNvdXJjZXMuYmlkUGVyY2VudGFnZSxcbiAgICAgICAgZGVzaXJlZHZDcHVzOiBwcm9wcy5jb21wdXRlUmVzb3VyY2VzLmRlc2lyZWR2Q3B1cyxcbiAgICAgICAgZWMyS2V5UGFpcjogcHJvcHMuY29tcHV0ZVJlc291cmNlcy5lYzJLZXlQYWlyLFxuICAgICAgICBpbWFnZUlkOiBwcm9wcy5jb21wdXRlUmVzb3VyY2VzLmltYWdlICYmIHByb3BzLmNvbXB1dGVSZXNvdXJjZXMuaW1hZ2UuZ2V0SW1hZ2UodGhpcykuaW1hZ2VJZCxcbiAgICAgICAgaW5zdGFuY2VSb2xlOiBwcm9wcy5jb21wdXRlUmVzb3VyY2VzLmluc3RhbmNlUm9sZVxuICAgICAgICAgID8gcHJvcHMuY29tcHV0ZVJlc291cmNlcy5pbnN0YW5jZVJvbGUucm9sZUFyblxuICAgICAgICAgIDogbmV3IGlhbS5Sb2xlKHRoaXMsICdSZXNvdXJjZS1JbnN0YW5jZS1Sb2xlJywge1xuICAgICAgICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2JhdGNoLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgICAgICB9KS5yb2xlQXJuLFxuICAgICAgICBpbnN0YW5jZVR5cGVzOiB0aGlzLmJ1aWxkSW5zdGFuY2VUeXBlcyhwcm9wcy5jb21wdXRlUmVzb3VyY2VzLmluc3RhbmNlVHlwZXMpLFxuICAgICAgICBtYXh2Q3B1czogcHJvcHMuY29tcHV0ZVJlc291cmNlcy5tYXh2Q3B1cyB8fCAyNTYsXG4gICAgICAgIG1pbnZDcHVzOiBwcm9wcy5jb21wdXRlUmVzb3VyY2VzLm1pbnZDcHVzIHx8IDAsXG4gICAgICAgIHNlY3VyaXR5R3JvdXBJZHM6IHRoaXMuYnVpbGRTZWN1cml0eUdyb3VwSWRzKHByb3BzLmNvbXB1dGVSZXNvdXJjZXMudnBjLCBwcm9wcy5jb21wdXRlUmVzb3VyY2VzLnNlY3VyaXR5R3JvdXBzKSxcbiAgICAgICAgc3BvdElhbUZsZWV0Um9sZTogc3BvdEZsZWV0Um9sZSA/IHNwb3RGbGVldFJvbGUucm9sZUFybiA6IHVuZGVmaW5lZCxcbiAgICAgICAgc3VibmV0czogcHJvcHMuY29tcHV0ZVJlc291cmNlcy52cGMuc2VsZWN0U3VibmV0cyhwcm9wcy5jb21wdXRlUmVzb3VyY2VzLnZwY1N1Ym5ldHMpLnN1Ym5ldElkcyxcbiAgICAgICAgdGFnczogcHJvcHMuY29tcHV0ZVJlc291cmNlcy5jb21wdXRlUmVzb3VyY2VzVGFncyxcbiAgICAgICAgdHlwZTogcHJvcHMuY29tcHV0ZVJlc291cmNlcy50eXBlIHx8IENvbXB1dGVSZXNvdXJjZVR5cGUuT05fREVNQU5ELFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wdXRlRW52aXJvbm1lbnQgPSBuZXcgQ2ZuQ29tcHV0ZUVudmlyb25tZW50KHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIGNvbXB1dGVFbnZpcm9ubWVudE5hbWU6IHRoaXMucGh5c2ljYWxOYW1lLFxuICAgICAgY29tcHV0ZVJlc291cmNlcyxcbiAgICAgIHNlcnZpY2VSb2xlOiBwcm9wcy5zZXJ2aWNlUm9sZVxuICAgICAgICA/IHByb3BzLnNlcnZpY2VSb2xlLnJvbGVBcm5cbiAgICAgICAgOiBuZXcgaWFtLlJvbGUodGhpcywgJ1Jlc291cmNlLVNlcnZpY2UtSW5zdGFuY2UtUm9sZScsIHtcbiAgICAgICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnc2VydmljZS1yb2xlL0FXU0JhdGNoU2VydmljZVJvbGUnKSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdiYXRjaC5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIH0pLnJvbGVBcm4sXG4gICAgICBzdGF0ZTogcHJvcHMuZW5hYmxlZCA9PT0gdW5kZWZpbmVkID8gJ0VOQUJMRUQnIDogKHByb3BzLmVuYWJsZWQgPyAnRU5BQkxFRCcgOiAnRElTQUJMRUQnKSxcbiAgICAgIHR5cGU6IHRoaXMuaXNNYW5hZ2VkKHByb3BzKSA/ICdVTk1BTkFHRUQnIDogJ01BTkFHRUQnLFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLmNvbXB1dGVSZXNvdXJjZXMgJiYgcHJvcHMuY29tcHV0ZVJlc291cmNlcy52cGMpIHtcbiAgICAgIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHByb3BzLmNvbXB1dGVSZXNvdXJjZXMudnBjKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbXB1dGVFbnZpcm9ubWVudEFybiA9IHRoaXMuZ2V0UmVzb3VyY2VBcm5BdHRyaWJ1dGUoY29tcHV0ZUVudmlyb25tZW50LnJlZiwge1xuICAgICAgc2VydmljZTogJ2JhdGNoJyxcbiAgICAgIHJlc291cmNlOiAnY29tcHV0ZS1lbnZpcm9ubWVudCcsXG4gICAgICByZXNvdXJjZU5hbWU6IHRoaXMucGh5c2ljYWxOYW1lLFxuICAgIH0pO1xuICAgIHRoaXMuY29tcHV0ZUVudmlyb25tZW50TmFtZSA9IHRoaXMuZ2V0UmVzb3VyY2VOYW1lQXR0cmlidXRlKGNvbXB1dGVFbnZpcm9ubWVudC5yZWYpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc01hbmFnZWQocHJvcHM6IENvbXB1dGVFbnZpcm9ubWVudFByb3BzKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHByb3BzLm1hbmFnZWQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBwcm9wcy5tYW5hZ2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgcHJvcGVydGllcyBwcm92aWRlZCBmb3IgYSBuZXcgYmF0Y2ggY29tcHV0ZSBlbnZpcm9ubWVudC5cbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVQcm9wcyhwcm9wczogQ29tcHV0ZUVudmlyb25tZW50UHJvcHMpIHtcbiAgICBpZiAocHJvcHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzTWFuYWdlZChwcm9wcykgJiYgcHJvcHMuY29tcHV0ZVJlc291cmNlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0IGlzIG5vdCBhbGxvd2VkIHRvIHNldCBjb21wdXRlUmVzb3VyY2VzIG9uIGFuIEFXUyBtYW5hZ2VkIGNvbXB1dGUgZW52aXJvbm1lbnQnKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXNNYW5hZ2VkKHByb3BzKSAmJiBwcm9wcy5jb21wdXRlUmVzb3VyY2VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY29tcHV0ZVJlc291cmNlcyBpcyBtaXNzaW5nIGJ1dCByZXF1aXJlZCBvbiBhbiB1bm1hbmFnZWQgY29tcHV0ZSBlbnZpcm9ubWVudCcpO1xuICAgIH1cblxuICAgIC8vIFNldHRpbmcgYSBiaWQgcGVyY2VudGFnZSBpcyBvbmx5IGFsbG93ZWQgb24gU1BPVCByZXNvdXJjZXMgK1xuICAgIC8vIENhbm5vdCB1c2UgU1BPVF9DQVBBQ0lUWV9PUFRJTUlaRUQgd2hlbiB1c2luZyBPTl9ERU1BTkRcbiAgICBpZiAocHJvcHMuY29tcHV0ZVJlc291cmNlcykge1xuICAgICAgaWYgKHByb3BzLmNvbXB1dGVSZXNvdXJjZXMudHlwZSA9PT0gQ29tcHV0ZVJlc291cmNlVHlwZS5PTl9ERU1BTkQpIHtcbiAgICAgICAgLy8gVkFMSURBVEUgRk9SIE9OX0RFTUFORFxuXG4gICAgICAgIC8vIEJpZCBwZXJjZW50YWdlIGlzIG5vdCBhbGxvd2VkXG4gICAgICAgIGlmIChwcm9wcy5jb21wdXRlUmVzb3VyY2VzLmJpZFBlcmNlbnRhZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2V0dGluZyB0aGUgYmlkIHBlcmNlbnRhZ2UgaXMgb25seSBhbGxvd2VkIGZvciBTUE9UIHR5cGUgcmVzb3VyY2VzIG9uIGEgYmF0Y2ggY29tcHV0ZSBlbnZpcm9ubWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU1BPVF9DQVBBQ0lUWV9PUFRJTUlaRUQgYWxsb2NhdGlvbiBpcyBub3QgYWxsb3dlZFxuICAgICAgICBpZiAocHJvcHMuYWxsb2NhdGlvblN0cmF0ZWd5ICYmIHByb3BzLmFsbG9jYXRpb25TdHJhdGVneSA9PT0gQWxsb2NhdGlvblN0cmF0ZWd5LlNQT1RfQ0FQQUNJVFlfT1BUSU1JWkVEKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgU1BPVF9DQVBBQ0lUWV9PUFRJTUlaRUQgYWxsb2NhdGlvbiBzdHJhdGVneSBpcyBvbmx5IGFsbG93ZWQgaWYgdGhlIGVudmlyb25tZW50IGlzIGEgU1BPVCB0eXBlIGNvbXB1dGUgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVkFMSURBVEUgRk9SIFNQT1RcblxuICAgICAgICAvLyBCaWQgcGVyY2VudGFnZSBtdXN0IGJlIGZyb20gMCAtIDEwMFxuICAgICAgICBpZiAocHJvcHMuY29tcHV0ZVJlc291cmNlcy5iaWRQZXJjZW50YWdlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAocHJvcHMuY29tcHV0ZVJlc291cmNlcy5iaWRQZXJjZW50YWdlIDwgMCB8fCBwcm9wcy5jb21wdXRlUmVzb3VyY2VzLmJpZFBlcmNlbnRhZ2UgPiAxMDApKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JpZCBwZXJjZW50YWdlIGNhbiBvbmx5IGJlIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxMDAnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMuY29tcHV0ZVJlc291cmNlcy5taW52Q3B1cykge1xuICAgICAgICAvLyBtaW52Q3B1cyBjYW5ub3QgYmUgbGVzcyB0aGFuIDBcbiAgICAgICAgaWYgKHByb3BzLmNvbXB1dGVSZXNvdXJjZXMubWludkNwdXMgPCAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaW5pbXVtIHZDcHVzIGZvciBhIGJhdGNoIGNvbXB1dGUgZW52aXJvbm1lbnQgY2Fubm90IGJlIGxlc3MgdGhhbiAwJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtaW52Q3B1cyBjYW5ub3QgZXhjZWVkIG1heCB2Q3B1c1xuICAgICAgICBpZiAocHJvcHMuY29tcHV0ZVJlc291cmNlcy5tYXh2Q3B1cyAmJlxuICAgICAgICAgIHByb3BzLmNvbXB1dGVSZXNvdXJjZXMubWludkNwdXMgPiBwcm9wcy5jb21wdXRlUmVzb3VyY2VzLm1heHZDcHVzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pbmltdW0gdkNwdXMgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSB2Q3B1cycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEluc3RhbmNlVHlwZXMoaW5zdGFuY2VUeXBlcz86IGVjMi5JbnN0YW5jZVR5cGVbXSk6IHN0cmluZ1tdIHtcbiAgICBpZiAoaW5zdGFuY2VUeXBlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICAnb3B0aW1hbCcsXG4gICAgICBdO1xuICAgIH1cblxuICAgIHJldHVybiBpbnN0YW5jZVR5cGVzLm1hcCgodHlwZTogZWMyLkluc3RhbmNlVHlwZSkgPT4gdHlwZS50b1N0cmluZygpKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTZWN1cml0eUdyb3VwSWRzKHZwYzogZWMyLklWcGMsIHNlY3VyaXR5R3JvdXBzPzogZWMyLklTZWN1cml0eUdyb3VwW10pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHNlY3VyaXR5R3JvdXBzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIG5ldyBlYzIuU2VjdXJpdHlHcm91cCh0aGlzLCAnUmVzb3VyY2UtU2VjdXJpdHktR3JvdXAnLCB7IHZwYyB9KS5zZWN1cml0eUdyb3VwSWQsXG4gICAgICBdO1xuICAgIH1cblxuICAgIHJldHVybiBzZWN1cml0eUdyb3Vwcy5tYXAoKGdyb3VwOiBlYzIuSVNlY3VyaXR5R3JvdXApID0+IGdyb3VwLnNlY3VyaXR5R3JvdXBJZCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGFuIEFXUyBJQU0gcm9sZSBmb3IgcHJvdmlzaW9uaW5nIHNwb3RmbGVldCByZXNvdXJjZXNcbiAgICogaWYgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgaXMgc2V0IHRvIEJFU1RfRklUIG9yIG5vdCBkZWZpbmVkLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgLSB0aGUgY29tcHV0ZSBlbnZpcm9ubWVudCBjb25zdHJ1Y3QgcHJvcGVydGllc1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRTcG90RmxlZXRSb2xlKHByb3BzOiBDb21wdXRlRW52aXJvbm1lbnRQcm9wcyk6IGlhbS5JUm9sZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHByb3BzLmFsbG9jYXRpb25TdHJhdGVneSAmJiBwcm9wcy5hbGxvY2F0aW9uU3RyYXRlZ3kgIT09IEFsbG9jYXRpb25TdHJhdGVneS5CRVNUX0ZJVCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuY29tcHV0ZVJlc291cmNlcykge1xuICAgICAgaWYgKHByb3BzLmNvbXB1dGVSZXNvdXJjZXMuc3BvdEZsZWV0Um9sZSkge1xuICAgICAgICByZXR1cm4gcHJvcHMuY29tcHV0ZVJlc291cmNlcy5zcG90RmxlZXRSb2xlO1xuICAgICAgfSBlbHNlIGlmIChwcm9wcy5jb21wdXRlUmVzb3VyY2VzLnR5cGUgPT09IENvbXB1dGVSZXNvdXJjZVR5cGUuU1BPVCkge1xuICAgICAgICByZXR1cm4gaWFtLlJvbGUuZnJvbVJvbGVBcm4odGhpcywgJ1Jlc291cmNlLVNwb3RGbGVldC1Sb2xlJyxcbiAgICAgICAgICBgYXJuJHtBd3MuUEFSVElUSU9OfWlhbTo6JHt0aGlzLnN0YWNrLmFjY291bnR9OnJvbGUvYXdzLXNlcnZpY2Utcm9sZS9zcG90ZmxlZXQuYW1hem9uYXdzLmNvbS9BV1NTZXJ2aWNlUm9sZUZvckVDMlNwb3RGbGVldGApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZS1lbnZpcm9ubWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbXB1dGUtZW52aXJvbm1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx3Q0FBd0M7QUFDeEMsd0NBQXdDO0FBQ3hDLHdDQUFnRjtBQUNoRix1REFBMEQ7QUFFMUQ7OztHQUdHO0FBQ0gsSUFBWSxtQkFVWDtBQVZELFdBQVksbUJBQW1CO0lBQzdCOztPQUVHO0lBQ0gsd0NBQWtCLENBQUE7SUFFbEI7O09BRUc7SUFDSCxvQ0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQVZXLG1CQUFtQixHQUFuQiwyQkFBbUIsS0FBbkIsMkJBQW1CLFFBVTlCO0FBRUQ7OztHQUdHO0FBQ0gsSUFBWSxrQkFxQlg7QUFyQkQsV0FBWSxrQkFBa0I7SUFDNUI7OztPQUdHO0lBQ0gsMkNBQXFCLENBQUE7SUFFckI7Ozs7T0FJRztJQUNILG1FQUE2QyxDQUFBO0lBRTdDOzs7OztPQUtHO0lBQ0gseUVBQW1ELENBQUE7QUFDckQsQ0FBQyxFQXJCVyxrQkFBa0IsR0FBbEIsMEJBQWtCLEtBQWxCLDBCQUFrQixRQXFCN0I7QUFpUEQ7Ozs7R0FJRztBQUNILE1BQWEsa0JBQW1CLFNBQVEsZUFBUTtJQWtDOUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxRQUFpQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRTtRQUN6RyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLFlBQVksRUFBRSxLQUFLLENBQUMsc0JBQXNCO1NBQzNDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFMUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25ELElBQUksZ0JBQTRFLENBQUM7UUFFakYsaUVBQWlFO1FBQ2pFLElBQUksS0FBSyxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbkQsZ0JBQWdCLEdBQUc7Z0JBQ2pCLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0I7dUJBQ3pELENBQ0MsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxJQUFJO3dCQUN4RCxDQUFDLENBQUMsa0JBQWtCLENBQUMsdUJBQXVCO3dCQUM1QyxDQUFDLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUM3QjtnQkFDTCxhQUFhLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixDQUFDLGFBQWE7Z0JBQ25ELFlBQVksRUFBRSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsWUFBWTtnQkFDakQsVUFBVSxFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVO2dCQUM3QyxPQUFPLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPO2dCQUM1RixZQUFZLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFlBQVk7b0JBQy9DLENBQUMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsWUFBWTtvQkFDckMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRTt3QkFDbkQsS0FBSyxFQUFFLENBQUUsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRTtnQ0FDL0MsU0FBUyxFQUFFLElBQUksR0FBRyxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDO2dDQUN4RCxlQUFlLEVBQUU7b0NBQ2IsR0FBRyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxrREFBa0QsQ0FBQztpQ0FDN0Y7NkJBQ04sQ0FBQyxDQUFDLFFBQVEsQ0FBQztxQkFDZixDQUFDLENBQUMsT0FBTztnQkFDWixhQUFhLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUM7Z0JBQzVFLGNBQWMsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsY0FBYztnQkFDckQsUUFBUSxFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLElBQUksR0FBRztnQkFDaEQsUUFBUSxFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLElBQUksQ0FBQztnQkFDOUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQztnQkFDL0csZ0JBQWdCLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTO2dCQUNuRSxPQUFPLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVM7Z0JBQzlGLElBQUksRUFBRSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CO2dCQUNqRCxJQUFJLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksSUFBSSxtQkFBbUIsQ0FBQyxTQUFTO2FBQ25FLENBQUM7U0FDSDtRQUVELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSx1Q0FBcUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ3JFLHNCQUFzQixFQUFFLElBQUksQ0FBQyxZQUFZO1lBQ3pDLGdCQUFnQjtZQUNoQixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7Z0JBQzVCLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU87Z0JBQzNCLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGdDQUFnQyxFQUFFO29CQUNyRCxlQUFlLEVBQUU7d0JBQ2YsR0FBRyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxrQ0FBa0MsQ0FBQztxQkFDL0U7b0JBQ0QsU0FBUyxFQUFFLElBQUksR0FBRyxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDO2lCQUMzRCxDQUFDLENBQUMsT0FBTztZQUNaLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1lBQ3pGLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVc7U0FDdEQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRTtZQUN4RCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDckQ7UUFFRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRTtZQUNoRixPQUFPLEVBQUUsT0FBTztZQUNoQixRQUFRLEVBQUUscUJBQXFCO1lBQy9CLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtTQUNoQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUF2R0Q7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLHlCQUF5QixDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLHFCQUE2QjtRQUNqRyxNQUFNLEtBQUssR0FBRyxZQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLE1BQU0sc0JBQXNCLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFlBQWEsQ0FBQztRQUVuRixNQUFNLE1BQU8sU0FBUSxlQUFRO1lBQTdCOztnQkFDa0IsMEJBQXFCLEdBQUcscUJBQXFCLENBQUM7Z0JBQzlDLDJCQUFzQixHQUFHLHNCQUFzQixDQUFDO1lBQ2xFLENBQUM7U0FBQTtRQUVELE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUF3Rk8sU0FBUyxDQUFDLEtBQThCO1FBQzlDLE9BQU8sS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUM1RCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxhQUFhLENBQUMsS0FBOEI7UUFDbEQsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3ZCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7WUFDbEUsTUFBTSxJQUFJLEtBQUssQ0FBQyxtRkFBbUYsQ0FBQyxDQUFDO1NBQ3RHO1FBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7WUFDakUsTUFBTSxJQUFJLEtBQUssQ0FBQywyRUFBMkUsQ0FBQyxDQUFDO1NBQzlGO1FBRUQsK0RBQStEO1FBQy9ELDBEQUEwRDtRQUMxRCxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTtZQUMxQixJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsU0FBUyxFQUFFO2dCQUNqRSx5QkFBeUI7Z0JBRXpCLGdDQUFnQztnQkFDaEMsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxLQUFLLFNBQVMsRUFBRTtvQkFDdEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxtR0FBbUcsQ0FBQyxDQUFDO2lCQUN0SDtnQkFFRCxvREFBb0Q7Z0JBQ3BELElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsS0FBSyxrQkFBa0IsQ0FBQyx1QkFBdUIsRUFBRTtvQkFDekksTUFBTSxJQUFJLEtBQUssQ0FBQyx1SEFBdUgsQ0FBQyxDQUFDO2lCQUMxSTthQUNGO2lCQUFNO2dCQUNMLG9CQUFvQjtnQkFFcEIsc0NBQXNDO2dCQUN0QyxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEtBQUssU0FBUztvQkFDcEQsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxFQUFFO29CQUN4RixNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7aUJBQzNFO2FBQ0Y7WUFFRCxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUU7Z0JBQ25DLGlDQUFpQztnQkFDakMsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRTtvQkFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO2lCQUN4RjtnQkFFRCxtQ0FBbUM7Z0JBQ25DLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLFFBQVE7b0JBQ2pDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRTtvQkFDakUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO2lCQUM3RTthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsYUFBa0M7UUFDM0QsSUFBSSxhQUFhLEtBQUssU0FBUyxFQUFFO1lBQy9CLE9BQU87Z0JBQ0wsU0FBUzthQUNWLENBQUM7U0FDSDtRQUVELE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQXNCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxHQUFhLEVBQUUsY0FBcUM7UUFDaEYsSUFBSSxjQUFjLEtBQUssU0FBUyxFQUFFO1lBQ2hDLE9BQU87Z0JBQ0wsSUFBSSxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSx5QkFBeUIsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsZUFBZTthQUNoRixDQUFDO1NBQ0g7UUFFRCxPQUFPLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUF5QixFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssZ0JBQWdCLENBQUMsS0FBOEI7O1FBQ3JELElBQUksT0FBQSxLQUFLLENBQUMsZ0JBQWdCLDBDQUFFLGtCQUFrQixLQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsS0FBSyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUU7WUFDM0gsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFFRCxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTtZQUMxQixJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUU7Z0JBQ3hDLE9BQU8sS0FBSyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQzthQUM3QztpQkFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsSUFBSSxFQUFFO2dCQUNuRSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSx5QkFBeUIsRUFDekQsTUFBTSxVQUFHLENBQUMsU0FBUyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyw4RUFBOEUsQ0FBQyxDQUFDO2FBQ2hJO1NBQ0Y7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0NBQ0Y7QUFoTkQsZ0RBZ05DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZWMyIGZyb20gJ0Bhd3MtY2RrL2F3cy1lYzInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ0Bhd3MtY2RrL2F3cy1pYW0nO1xuaW1wb3J0IHsgQXdzLCBDb25zdHJ1Y3QsIElSZXNvdXJjZSwgUmVzb3VyY2UsIFN0YWNrLCBUYWcgfSBmcm9tICdAYXdzLWNkay9jb3JlJztcbmltcG9ydCB7IENmbkNvbXB1dGVFbnZpcm9ubWVudCB9IGZyb20gJy4vYmF0Y2guZ2VuZXJhdGVkJztcblxuLyoqXG4gKiBQcm9wZXJ0eSB0byBzcGVjaWZ5IGlmIHRoZSBjb21wdXRlIGVudmlyb25tZW50XG4gKiB1c2VzIE9uLURlbWFuZCBvciBTcG90RmxlZXQgY29tcHV0ZSByZXNvdXJjZXMuXG4gKi9cbmV4cG9ydCBlbnVtIENvbXB1dGVSZXNvdXJjZVR5cGUge1xuICAvKipcbiAgICogUmVzb3VyY2VzIHdpbGwgYmUgRUMyIE9uLURlbWFuZCByZXNvdXJjZXMuXG4gICAqL1xuICBPTl9ERU1BTkQgID0gJ0VDMicsXG5cbiAgLyoqXG4gICAqIFJlc291cmNlcyB3aWxsIGJlIEVDMiBTcG90RmxlZXQgcmVzb3VyY2VzLlxuICAgKi9cbiAgU1BPVCA9ICdTUE9UJyxcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBob3cgdG8gcHJlcGFyZSBjb21wdXRlIHJlc291cmNlc1xuICogdGhhdCBhcmUgcHJvdmlzaW9uZWQgZm9yIGEgY29tcHV0ZSBlbnZpcm9ubWVudC5cbiAqL1xuZXhwb3J0IGVudW0gQWxsb2NhdGlvblN0cmF0ZWd5IHtcbiAgLyoqXG4gICAqIEJhdGNoIHdpbGwgdXNlIHRoZSBiZXN0IGZpdHRpbmcgaW5zdGFuY2UgdHlwZSB3aWxsIGJlIHVzZWRcbiAgICogd2hlbiBhc3NpZ25pbmcgYSBiYXRjaCBqb2IgaW4gdGhpcyBjb21wdXRlIGVudmlyb25tZW50LlxuICAgKi9cbiAgQkVTVF9GSVQgPSAnQkVTVF9GSVQnLFxuXG4gIC8qKlxuICAgKiBCYXRjaCB3aWxsIHNlbGVjdCBhZGRpdGlvbmFsIGluc3RhbmNlIHR5cGVzIHRoYXQgYXJlIGxhcmdlIGVub3VnaCB0b1xuICAgKiBtZWV0IHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIGpvYnMgaW4gdGhlIHF1ZXVlLCB3aXRoIGEgcHJlZmVyZW5jZSBmb3JcbiAgICogaW5zdGFuY2UgdHlwZXMgd2l0aCBhIGxvd2VyIGNvc3QgcGVyIHVuaXQgdkNQVS5cbiAgICovXG4gIEJFU1RfRklUX1BST0dSRVNTSVZFID0gJ0JFU1RfRklUX1BST0dSRVNTSVZFJyxcblxuICAvKipcbiAgICogVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgU3BvdCBJbnN0YW5jZSBjb21wdXRlIHJlc291cmNlcyBhbmQgd2lsbCBzZWxlY3RcbiAgICogYWRkaXRpb25hbCBpbnN0YW5jZSB0eXBlcyB0aGF0IGFyZSBsYXJnZSBlbm91Z2ggdG8gbWVldCB0aGUgcmVxdWlyZW1lbnRzIG9mXG4gICAqIHRoZSBqb2JzIGluIHRoZSBxdWV1ZSwgd2l0aCBhIHByZWZlcmVuY2UgZm9yIGluc3RhbmNlIHR5cGVzIHRoYXQgYXJlIGxlc3NcbiAgICogbGlrZWx5IHRvIGJlIGludGVycnVwdGVkLlxuICAgKi9cbiAgU1BPVF9DQVBBQ0lUWV9PUFRJTUlaRUQgPSAnU1BPVF9DQVBBQ0lUWV9PUFRJTUlaRUQnLFxufVxuXG4vKipcbiAqIExhdW5jaCB0ZW1wbGF0ZSBwcm9wZXJ0eSBzcGVjaWZpY2F0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGF1bmNoVGVtcGxhdGVTcGVjaWZpY2F0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBMYXVuY2ggdGVtcGxhdGUgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbGF1bmNoVGVtcGxhdGVOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbGF1bmNoIHRlbXBsYXRlIHZlcnNpb24gdG8gYmUgdXNlZCAob3B0aW9uYWwpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBkZWZhdWx0IHZlcnNpb24gb2YgdGhlIGxhdW5jaCB0ZW1wbGF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBkZWZpbmluZyB0aGUgc3RydWN0dXJlIG9mIHRoZSBiYXRjaCBjb21wdXRlIGNsdXN0ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcHV0ZVJlc291cmNlcyB7XG4gIC8qKlxuICAgKiBUaGUgYWxsb2NhdGlvbiBzdHJhdGVneSB0byB1c2UgZm9yIHRoZSBjb21wdXRlIHJlc291cmNlIGluIGNhc2Ugbm90IGVub3VnaCBpbnN0YW5jZXMgb2YgdGhlIGJlc3RcbiAgICogZml0dGluZyBpbnN0YW5jZSB0eXBlIGNhbiBiZSBhbGxvY2F0ZWQuIFRoaXMgY291bGQgYmUgZHVlIHRvIGF2YWlsYWJpbGl0eSBvZiB0aGUgaW5zdGFuY2UgdHlwZSBpblxuICAgKiB0aGUgcmVnaW9uIG9yIEFtYXpvbiBFQzIgc2VydmljZSBsaW1pdHMuIElmIHRoaXMgaXMgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgZm9yIHRoZSBFQzJcbiAgICogQ29tcHV0ZVJlc291cmNlVHlwZSBpcyBCRVNUX0ZJVCwgd2hpY2ggd2lsbCB1c2Ugb25seSB0aGUgYmVzdCBmaXR0aW5nIGluc3RhbmNlIHR5cGUsIHdhaXRpbmcgZm9yXG4gICAqIGFkZGl0aW9uYWwgY2FwYWNpdHkgaWYgaXQncyBub3QgYXZhaWxhYmxlLiBUaGlzIGFsbG9jYXRpb24gc3RyYXRlZ3kga2VlcHMgY29zdHMgbG93ZXIgYnV0IGNhbiBsaW1pdFxuICAgKiBzY2FsaW5nLiBJZiB5b3UgYXJlIHVzaW5nIFNwb3QgRmxlZXRzIHdpdGggQkVTVF9GSVQgdGhlbiB0aGUgU3BvdCBGbGVldCBJQU0gUm9sZSBtdXN0IGJlIHNwZWNpZmllZC5cbiAgICogQkVTVF9GSVRfUFJPR1JFU1NJVkUgd2lsbCBzZWxlY3QgYW4gYWRkaXRpb25hbCBpbnN0YW5jZSB0eXBlIHRoYXQgaXMgbGFyZ2UgZW5vdWdoIHRvIG1lZXQgdGhlXG4gICAqIHJlcXVpcmVtZW50cyBvZiB0aGUgam9icyBpbiB0aGUgcXVldWUsIHdpdGggYSBwcmVmZXJlbmNlIGZvciBhbiBpbnN0YW5jZSB0eXBlIHdpdGggYSBsb3dlciBjb3N0LlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIFNQT1QgaW5zdGFuY2UgdHlwZSBpcyBTUE9UX0NBUEFDSVRZX09QVElNSVpFRCwgd2hpY2ggaXMgb25seSBhdmFpbGFibGUgZm9yXG4gICAqIGZvciB0aGlzIHR5cGUgb2YgY29tcHV0ZSByZXNvdXJjZXMgYW5kIHdpbGwgc2VsZWN0IGFuIGFkZGl0aW9uYWwgaW5zdGFuY2UgdHlwZSB0aGF0IGlzIGxhcmdlIGVub3VnaFxuICAgKiB0byBtZWV0IHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIGpvYnMgaW4gdGhlIHF1ZXVlLCB3aXRoIGEgcHJlZmVyZW5jZSBmb3IgYW4gaW5zdGFuY2UgdHlwZSB0aGF0IGlzXG4gICAqIGxlc3MgbGlrZWx5IHRvIGJlIGludGVycnVwdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBBbGxvY2F0aW9uU3RyYXRlZ3kuQkVTVF9GSVRcbiAgICovXG4gIHJlYWRvbmx5IGFsbG9jYXRpb25TdHJhdGVneT86IEFsbG9jYXRpb25TdHJhdGVneTtcblxuICAvKipcbiAgICogVGhlIEFtYXpvbiBFQ1MgaW5zdGFuY2UgcHJvZmlsZSBhcHBsaWVkIHRvIEFtYXpvbiBFQzIgaW5zdGFuY2VzIGluIGEgY29tcHV0ZSBlbnZpcm9ubWVudC4gWW91IGNhbiBzcGVjaWZ5XG4gICAqIHRoZSBzaG9ydCBuYW1lIG9yIGZ1bGwgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgYW4gaW5zdGFuY2UgcHJvZmlsZS4gRm9yIGV4YW1wbGUsIGVjc0luc3RhbmNlUm9sZSBvclxuICAgKiBhcm46YXdzOmlhbTo6PGF3c19hY2NvdW50X2lkPjppbnN0YW5jZS1wcm9maWxlL2Vjc0luc3RhbmNlUm9sZSAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgQW1hem9uIEVDU1xuICAgKiBJbnN0YW5jZSBSb2xlIGluIHRoZSBBV1MgQmF0Y2ggVXNlciBHdWlkZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIG5ldyByb2xlIHdpbGwgYmUgY3JlYXRlZC5cbiAgICogQGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC91c2VyZ3VpZGUvaW5zdGFuY2VfSUFNX3JvbGUuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2VSb2xlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBsYXVuY2ggdGVtcGxhdGUgdG8gYXNzb2NpYXRlIHdpdGggeW91ciBjb21wdXRlIHJlc291cmNlcy5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBSRUFETUUgZmlsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBjdXN0b20gbGF1bmNoIHRlbXBsYXRlIHdpbGwgYmUgdXNlZFxuICAgKiBAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L3VzZXJndWlkZS9sYXVuY2gtdGVtcGxhdGVzLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IGxhdW5jaFRlbXBsYXRlPzogTGF1bmNoVGVtcGxhdGVTcGVjaWZpY2F0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZXMgb2YgRUMyIGluc3RhbmNlcyB0aGF0IG1heSBiZSBsYXVuY2hlZCBpbiB0aGUgY29tcHV0ZSBlbnZpcm9ubWVudC4gWW91IGNhbiBzcGVjaWZ5IGluc3RhbmNlXG4gICAqIGZhbWlsaWVzIHRvIGxhdW5jaCBhbnkgaW5zdGFuY2UgdHlwZSB3aXRoaW4gdGhvc2UgZmFtaWxpZXMgKGZvciBleGFtcGxlLCBjNCBvciBwMyksIG9yIHlvdSBjYW4gc3BlY2lmeVxuICAgKiBzcGVjaWZpYyBzaXplcyB3aXRoaW4gYSBmYW1pbHkgKHN1Y2ggYXMgYzQuOHhsYXJnZSkuIFlvdSBjYW4gYWxzbyBjaG9vc2Ugb3B0aW1hbCB0byBwaWNrIGluc3RhbmNlIHR5cGVzXG4gICAqIChmcm9tIHRoZSBDLCBNLCBhbmQgUiBpbnN0YW5jZSBmYW1pbGllcykgb24gdGhlIGZseSB0aGF0IG1hdGNoIHRoZSBkZW1hbmQgb2YgeW91ciBqb2IgcXVldWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBvcHRpbWFsXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZVR5cGVzPzogZWMyLkluc3RhbmNlVHlwZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgRUMyIHNlY3VyaXR5IGdyb3VwKHMpIGFzc29jaWF0ZWQgd2l0aCBpbnN0YW5jZXMgbGF1bmNoZWQgaW4gdGhlIGNvbXB1dGUgZW52aXJvbm1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQVdTIGRlZmF1bHQgc2VjdXJpdHkgZ3JvdXAuXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3Vwcz86IGVjMi5JU2VjdXJpdHlHcm91cFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgVlBDIG5ldHdvcmsgdGhhdCBhbGwgY29tcHV0ZSByZXNvdXJjZXMgd2lsbCBiZSBjb25uZWN0ZWQgdG8uXG4gICAqL1xuICByZWFkb25seSB2cGM6IGVjMi5JVnBjO1xuXG4gIC8qKlxuICAgKiBUaGUgVlBDIHN1Ym5ldHMgaW50byB3aGljaCB0aGUgY29tcHV0ZSByZXNvdXJjZXMgYXJlIGxhdW5jaGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHByaXZhdGUgc3VibmV0cyBvZiB0aGUgc3VwcGxpZWQgVlBDLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjU3VibmV0cz86IGVjMi5TdWJuZXRTZWxlY3Rpb247XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGNvbXB1dGUgZW52aXJvbm1lbnQ6IE9OX0RFTUFORCBvciBTUE9ULlxuICAgKlxuICAgKiBAZGVmYXVsdCBPTl9ERU1BTkRcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU/OiBDb21wdXRlUmVzb3VyY2VUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGlzIHByb3BlcnR5IHdpbGwgYmUgaWdub3JlZCBpZiB5b3Ugc2V0IHRoZSBlbnZpcm9ubWVudCB0eXBlIHRvIE9OX0RFTUFORC5cbiAgICpcbiAgICogVGhlIG1heGltdW0gcGVyY2VudGFnZSB0aGF0IGEgU3BvdCBJbnN0YW5jZSBwcmljZSBjYW4gYmUgd2hlbiBjb21wYXJlZCB3aXRoIHRoZSBPbi1EZW1hbmQgcHJpY2UgZm9yXG4gICAqIHRoYXQgaW5zdGFuY2UgdHlwZSBiZWZvcmUgaW5zdGFuY2VzIGFyZSBsYXVuY2hlZC4gRm9yIGV4YW1wbGUsIGlmIHlvdXIgbWF4aW11bSBwZXJjZW50YWdlIGlzIDIwJSxcbiAgICogdGhlbiB0aGUgU3BvdCBwcmljZSBtdXN0IGJlIGJlbG93IDIwJSBvZiB0aGUgY3VycmVudCBPbi1EZW1hbmQgcHJpY2UgZm9yIHRoYXQgRUMyIGluc3RhbmNlLiBZb3UgYWx3YXlzXG4gICAqIHBheSB0aGUgbG93ZXN0IChtYXJrZXQpIHByaWNlIGFuZCBuZXZlciBtb3JlIHRoYW4geW91ciBtYXhpbXVtIHBlcmNlbnRhZ2UuIElmIHlvdSBsZWF2ZSB0aGlzIGZpZWxkIGVtcHR5LFxuICAgKiB0aGUgZGVmYXVsdCB2YWx1ZSBpcyAxMDAlIG9mIHRoZSBPbi1EZW1hbmQgcHJpY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IDEwMFxuICAgKi9cbiAgcmVhZG9ubHkgYmlkUGVyY2VudGFnZT86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGRlc2lyZWQgbnVtYmVyIG9mIEVDMiB2Q1BVUyBpbiB0aGUgY29tcHV0ZSBlbnZpcm9ubWVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBkZXNpcmVkIHZjcHUgdmFsdWUgd2lsbCBiZSB1c2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzaXJlZHZDcHVzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgRUMyIHZDUFVzIHRoYXQgYW4gZW52aXJvbm1lbnQgY2FuIHJlYWNoLiBFYWNoIHZDUFUgaXMgZXF1aXZhbGVudCB0b1xuICAgKiAxLDAyNCBDUFUgc2hhcmVzLiBZb3UgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IG9uZSB2Q1BVLlxuICAgKlxuICAgKiBAZGVmYXVsdCAyNTZcbiAgICovXG4gIHJlYWRvbmx5IG1heHZDcHVzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSBudW1iZXIgb2YgRUMyIHZDUFVzIHRoYXQgYW4gZW52aXJvbm1lbnQgc2hvdWxkIG1haW50YWluIChldmVuIGlmIHRoZSBjb21wdXRlIGVudmlyb25tZW50IHN0YXRlIGlzIERJU0FCTEVEKS5cbiAgICogRWFjaCB2Q1BVIGlzIGVxdWl2YWxlbnQgdG8gMSwwMjQgQ1BVIHNoYXJlcy4gWW91IG11c3Qgc3BlY2lmeSBhdCBsZWFzdCBvbmUgdkNQVS5cbiAgICpcbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgcmVhZG9ubHkgbWludkNwdXM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBFQzIga2V5IHBhaXIgdGhhdCBpcyB1c2VkIGZvciBpbnN0YW5jZXMgbGF1bmNoZWQgaW4gdGhlIGNvbXB1dGUgZW52aXJvbm1lbnQuXG4gICAqIElmIG5vIGtleSBpcyBkZWZpbmVkLCB0aGVuIFNTSCBhY2Nlc3MgaXMgbm90IGFsbG93ZWQgdG8gcHJvdmlzaW9uZWQgY29tcHV0ZSByZXNvdXJjZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gU1NIIGFjY2VzcyB3aWxsIGJlIHBvc3NpYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgZWMyS2V5UGFpcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFtYXpvbiBNYWNoaW5lIEltYWdlIChBTUkpIElEIHVzZWQgZm9yIGluc3RhbmNlcyBsYXVuY2hlZCBpbiB0aGUgY29tcHV0ZSBlbnZpcm9ubWVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBpbWFnZSB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICByZWFkb25seSBpbWFnZT86IGVjMi5JTWFjaGluZUltYWdlO1xuXG4gIC8qKlxuICAgKiBUaGlzIHByb3BlcnR5IHdpbGwgYmUgaWdub3JlZCBpZiB5b3Ugc2V0IHRoZSBlbnZpcm9ubWVudCB0eXBlIHRvIE9OX0RFTUFORC5cbiAgICpcbiAgICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBBbWF6b24gRUMyIFNwb3QgRmxlZXQgSUFNIHJvbGUgYXBwbGllZCB0byBhIFNQT1QgY29tcHV0ZSBlbnZpcm9ubWVudC5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBBbWF6b24gRUMyIFNwb3QgRmxlZXQgUm9sZSBpbiB0aGUgQVdTIEJhdGNoIFVzZXIgR3VpZGUuXG4gICAqXG4gICAqIEBsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iYXRjaC9sYXRlc3QvdXNlcmd1aWRlL3Nwb3RfZmxlZXRfSUFNX3JvbGUuaHRtbFxuICAgKiBAZGVmYXVsdCAtIG5vIGZsZWV0IHJvbGUgd2lsbCBiZSB1c2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3BvdEZsZWV0Um9sZT86IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogS2V5LXZhbHVlIHBhaXIgdGFncyB0byBiZSBhcHBsaWVkIHRvIHJlc291cmNlcyB0aGF0IGFyZSBsYXVuY2hlZCBpbiB0aGUgY29tcHV0ZSBlbnZpcm9ubWVudC5cbiAgICogRm9yIEFXUyBCYXRjaCwgdGhlc2UgdGFrZSB0aGUgZm9ybSBvZiBcIlN0cmluZzFcIjogXCJTdHJpbmcyXCIsIHdoZXJlIFN0cmluZzEgaXMgdGhlIHRhZyBrZXkgYW5kXG4gICAqIFN0cmluZzIgaXMgdGhlIHRhZyB2YWx1ZeKAlGZvciBleGFtcGxlLCB7IFwiTmFtZVwiOiBcIkFXUyBCYXRjaCBJbnN0YW5jZSAtIEM0T25EZW1hbmRcIiB9LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHRhZ3Mgd2lsbCBiZSBhc3NpZ25lZCBvbiBjb21wdXRlIHJlc291cmNlcy5cbiAgICovXG4gIHJlYWRvbmx5IGNvbXB1dGVSZXNvdXJjZXNUYWdzPzogVGFnO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNyZWF0aW5nIGEgbmV3IENvbXB1dGUgRW52aXJvbm1lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wdXRlRW52aXJvbm1lbnRQcm9wcyB7XG4gIC8qKlxuICAgKiBBIG5hbWUgZm9yIHRoZSBjb21wdXRlIGVudmlyb25tZW50LlxuICAgKlxuICAgKiBVcCB0byAxMjggbGV0dGVycyAodXBwZXJjYXNlIGFuZCBsb3dlcmNhc2UpLCBudW1iZXJzLCBoeXBoZW5zLCBhbmQgdW5kZXJzY29yZXMgYXJlIGFsbG93ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQ2xvdWRGb3JtYXRpb24tZ2VuZXJhdGVkIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGNvbXB1dGVFbnZpcm9ubWVudE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXRhaWxzIG9mIHRoZSByZXF1aXJlZCBjb21wdXRlIHJlc291cmNlcyBmb3IgdGhlIG1hbmFnZWQgY29tcHV0ZSBlbnZpcm9ubWVudC5cbiAgICpcbiAgICogSWYgc3BlY2lmaWVkLCBhbmQgdGhpcyBpcyBhbiB1bm1hbmFnZWQgY29tcHV0ZSBlbnZpcm9ubWVudCwgd2lsbCB0aHJvdyBhbiBlcnJvci5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgQVdTIEJhdGNoIG1hbmFnZWQgY29tcHV0ZSBlbnZpcm9ubWVudHMgdXNlIGEgcmVjZW50LCBhcHByb3ZlZCB2ZXJzaW9uIG9mIHRoZVxuICAgKiBBbWF6b24gRUNTLW9wdGltaXplZCBBTUkgZm9yIGNvbXB1dGUgcmVzb3VyY2VzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIENsb3VkRm9ybWF0aW9uIGRlZmF1bHRzXG4gICAqIEBsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWJhdGNoLWNvbXB1dGVlbnZpcm9ubWVudC1jb21wdXRlcmVzb3VyY2VzLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IGNvbXB1dGVSZXNvdXJjZXM/OiBDb21wdXRlUmVzb3VyY2VzO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdGUgb2YgdGhlIGNvbXB1dGUgZW52aXJvbm1lbnQuIElmIHRoZSBzdGF0ZSBpcyBzZXQgdG8gdHJ1ZSwgdGhlbiB0aGUgY29tcHV0ZVxuICAgKiBlbnZpcm9ubWVudCBhY2NlcHRzIGpvYnMgZnJvbSBhIHF1ZXVlIGFuZCBjYW4gc2NhbGUgb3V0IGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gcXVldWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIElBTSByb2xlIHVzZWQgYnkgQmF0Y2ggdG8gbWFrZSBjYWxscyB0byBvdGhlciBBV1Mgc2VydmljZXMgb24geW91ciBiZWhhbGYgZm9yIG1hbmFnaW5nXG4gICAqIHRoZSByZXNvdXJjZXMgdGhhdCB5b3UgdXNlIHdpdGggdGhlIHNlcnZpY2UuIEJ5IGRlZmF1bHQsIHRoaXMgcm9sZSBpcyBjcmVhdGVkIGZvciB5b3UgdXNpbmdcbiAgICogdGhlIEFXUyBtYW5hZ2VkIHNlcnZpY2UgcG9saWN5IGZvciBCYXRjaC5cbiAgICpcbiAgICogQGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC91c2VyZ3VpZGUvc2VydmljZV9JQU1fcm9sZS5odG1sXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gUm9sZSB1c2luZyB0aGUgJ3NlcnZpY2Utcm9sZS9BV1NCYXRjaFNlcnZpY2VSb2xlJyBwb2xpY3kuXG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlUm9sZT86IGlhbS5JUm9sZSxcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBBV1Mgc2hvdWxkIG1hbmFnZSB0aGUgYWxsb2NhdGlvbiBvZiBjb21wdXRlIHJlc291cmNlcyBmb3IgcHJvY2Vzc2luZyBqb2JzLlxuICAgKiBJZiBzZXQgdG8gZmFsc2UsIHRoZW4geW91IGFyZSBpbiBjaGFyZ2Ugb2YgcHJvdmlkaW5nIHRoZSBjb21wdXRlIHJlc291cmNlIGRldGFpbHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IG1hbmFnZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgb2YgYSBjb21wdXRlIGVudmlyb25tZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDb21wdXRlRW52aXJvbm1lbnQgZXh0ZW5kcyBJUmVzb3VyY2Uge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGlzIGNvbXB1dGUgZW52aXJvbm1lbnQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNvbXB1dGVFbnZpcm9ubWVudEFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGlzIGNvbXB1dGUgZW52aXJvbm1lbnQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNvbXB1dGVFbnZpcm9ubWVudE5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBCYXRjaCBDb21wdXRlIEVudmlyb25tZW50LlxuICpcbiAqIERlZmluZXMgYSBiYXRjaCBjb21wdXRlIGVudmlyb25tZW50IHRvIHJ1biBiYXRjaCBqb2JzIG9uLlxuICovXG5leHBvcnQgY2xhc3MgQ29tcHV0ZUVudmlyb25tZW50IGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJQ29tcHV0ZUVudmlyb25tZW50IHtcbiAgLyoqXG4gICAqIEZldGNoZXMgYW4gZXhpc3RpbmcgYmF0Y2ggY29tcHV0ZSBlbnZpcm9ubWVudCBieSBpdHMgYW1hem9uIHJlc291cmNlIG5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZVxuICAgKiBAcGFyYW0gaWRcbiAgICogQHBhcmFtIGNvbXB1dGVFbnZpcm9ubWVudEFyblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ29tcHV0ZUVudmlyb25tZW50QXJuKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNvbXB1dGVFbnZpcm9ubWVudEFybjogc3RyaW5nKTogSUNvbXB1dGVFbnZpcm9ubWVudCB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgY29tcHV0ZUVudmlyb25tZW50TmFtZSA9IHN0YWNrLnBhcnNlQXJuKGNvbXB1dGVFbnZpcm9ubWVudEFybikucmVzb3VyY2VOYW1lITtcblxuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSUNvbXB1dGVFbnZpcm9ubWVudCB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY29tcHV0ZUVudmlyb25tZW50QXJuID0gY29tcHV0ZUVudmlyb25tZW50QXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNvbXB1dGVFbnZpcm9ubWVudE5hbWUgPSBjb21wdXRlRW52aXJvbm1lbnROYW1lO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGlzIGNvbXB1dGUgZW52aXJvbm1lbnQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb21wdXRlRW52aXJvbm1lbnRBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhpcyBjb21wdXRlIGVudmlyb25tZW50LlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29tcHV0ZUVudmlyb25tZW50TmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDb21wdXRlRW52aXJvbm1lbnRQcm9wcyA9IHsgZW5hYmxlZDogdHJ1ZSwgbWFuYWdlZDogdHJ1ZSB9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBwaHlzaWNhbE5hbWU6IHByb3BzLmNvbXB1dGVFbnZpcm9ubWVudE5hbWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLnZhbGlkYXRlUHJvcHMocHJvcHMpO1xuXG4gICAgY29uc3Qgc3BvdEZsZWV0Um9sZSA9IHRoaXMuZ2V0U3BvdEZsZWV0Um9sZShwcm9wcyk7XG4gICAgbGV0IGNvbXB1dGVSZXNvdXJjZXM6IENmbkNvbXB1dGVFbnZpcm9ubWVudC5Db21wdXRlUmVzb3VyY2VzUHJvcGVydHkgfCB1bmRlZmluZWQ7XG5cbiAgICAvLyBPbmx5IGFsbG93IGNvbXB1dGUgcmVzb3VyY2VzIHRvIGJlIHNldCB3aGVuIHVzaW5nIE1BTkFHRUQgdHlwZVxuICAgIGlmIChwcm9wcy5jb21wdXRlUmVzb3VyY2VzICYmIHRoaXMuaXNNYW5hZ2VkKHByb3BzKSkge1xuICAgICAgY29tcHV0ZVJlc291cmNlcyA9IHtcbiAgICAgICAgYWxsb2NhdGlvblN0cmF0ZWd5OiBwcm9wcy5jb21wdXRlUmVzb3VyY2VzLmFsbG9jYXRpb25TdHJhdGVneVxuICAgICAgICAgfHwgKFxuICAgICAgICAgICAgIHByb3BzLmNvbXB1dGVSZXNvdXJjZXMudHlwZSA9PT0gQ29tcHV0ZVJlc291cmNlVHlwZS5TUE9UXG4gICAgICAgICAgICAgPyBBbGxvY2F0aW9uU3RyYXRlZ3kuU1BPVF9DQVBBQ0lUWV9PUFRJTUlaRURcbiAgICAgICAgICAgICA6IEFsbG9jYXRpb25TdHJhdGVneS5CRVNUX0ZJVFxuICAgICAgICAgICAgKSxcbiAgICAgICAgYmlkUGVyY2VudGFnZTogcHJvcHMuY29tcHV0ZVJlc291cmNlcy5iaWRQZXJjZW50YWdlLFxuICAgICAgICBkZXNpcmVkdkNwdXM6IHByb3BzLmNvbXB1dGVSZXNvdXJjZXMuZGVzaXJlZHZDcHVzLFxuICAgICAgICBlYzJLZXlQYWlyOiBwcm9wcy5jb21wdXRlUmVzb3VyY2VzLmVjMktleVBhaXIsXG4gICAgICAgIGltYWdlSWQ6IHByb3BzLmNvbXB1dGVSZXNvdXJjZXMuaW1hZ2UgJiYgcHJvcHMuY29tcHV0ZVJlc291cmNlcy5pbWFnZS5nZXRJbWFnZSh0aGlzKS5pbWFnZUlkLFxuICAgICAgICBpbnN0YW5jZVJvbGU6IHByb3BzLmNvbXB1dGVSZXNvdXJjZXMuaW5zdGFuY2VSb2xlXG4gICAgICAgICAgPyBwcm9wcy5jb21wdXRlUmVzb3VyY2VzLmluc3RhbmNlUm9sZVxuICAgICAgICAgIDogbmV3IGlhbS5DZm5JbnN0YW5jZVByb2ZpbGUodGhpcywgJ0luc3RhbmNlLVByb2ZpbGUnLCB7XG4gICAgICAgICAgICAgIHJvbGVzOiBbIG5ldyBpYW0uUm9sZSh0aGlzLCAnRWNzLUluc3RhbmNlLVJvbGUnLCB7XG4gICAgICAgICAgICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2VjMi5hbWF6b25hd3MuY29tJyksXG4gICAgICAgICAgICAgICAgbWFuYWdlZFBvbGljaWVzOiBbXG4gICAgICAgICAgICAgICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnc2VydmljZS1yb2xlL0FtYXpvbkVDMkNvbnRhaW5lclNlcnZpY2Vmb3JFQzJSb2xlJylcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9KS5yb2xlTmFtZV1cbiAgICAgICAgICB9KS5hdHRyQXJuLFxuICAgICAgICBpbnN0YW5jZVR5cGVzOiB0aGlzLmJ1aWxkSW5zdGFuY2VUeXBlcyhwcm9wcy5jb21wdXRlUmVzb3VyY2VzLmluc3RhbmNlVHlwZXMpLFxuICAgICAgICBsYXVuY2hUZW1wbGF0ZTogcHJvcHMuY29tcHV0ZVJlc291cmNlcy5sYXVuY2hUZW1wbGF0ZSxcbiAgICAgICAgbWF4dkNwdXM6IHByb3BzLmNvbXB1dGVSZXNvdXJjZXMubWF4dkNwdXMgfHwgMjU2LFxuICAgICAgICBtaW52Q3B1czogcHJvcHMuY29tcHV0ZVJlc291cmNlcy5taW52Q3B1cyB8fCAwLFxuICAgICAgICBzZWN1cml0eUdyb3VwSWRzOiB0aGlzLmJ1aWxkU2VjdXJpdHlHcm91cElkcyhwcm9wcy5jb21wdXRlUmVzb3VyY2VzLnZwYywgcHJvcHMuY29tcHV0ZVJlc291cmNlcy5zZWN1cml0eUdyb3VwcyksXG4gICAgICAgIHNwb3RJYW1GbGVldFJvbGU6IHNwb3RGbGVldFJvbGUgPyBzcG90RmxlZXRSb2xlLnJvbGVBcm4gOiB1bmRlZmluZWQsXG4gICAgICAgIHN1Ym5ldHM6IHByb3BzLmNvbXB1dGVSZXNvdXJjZXMudnBjLnNlbGVjdFN1Ym5ldHMocHJvcHMuY29tcHV0ZVJlc291cmNlcy52cGNTdWJuZXRzKS5zdWJuZXRJZHMsXG4gICAgICAgIHRhZ3M6IHByb3BzLmNvbXB1dGVSZXNvdXJjZXMuY29tcHV0ZVJlc291cmNlc1RhZ3MsXG4gICAgICAgIHR5cGU6IHByb3BzLmNvbXB1dGVSZXNvdXJjZXMudHlwZSB8fCBDb21wdXRlUmVzb3VyY2VUeXBlLk9OX0RFTUFORCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgY29tcHV0ZUVudmlyb25tZW50ID0gbmV3IENmbkNvbXB1dGVFbnZpcm9ubWVudCh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBjb21wdXRlRW52aXJvbm1lbnROYW1lOiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICAgIGNvbXB1dGVSZXNvdXJjZXMsXG4gICAgICBzZXJ2aWNlUm9sZTogcHJvcHMuc2VydmljZVJvbGVcbiAgICAgICAgPyBwcm9wcy5zZXJ2aWNlUm9sZS5yb2xlQXJuXG4gICAgICAgIDogbmV3IGlhbS5Sb2xlKHRoaXMsICdSZXNvdXJjZS1TZXJ2aWNlLUluc3RhbmNlLVJvbGUnLCB7XG4gICAgICAgICAgbWFuYWdlZFBvbGljaWVzOiBbXG4gICAgICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ3NlcnZpY2Utcm9sZS9BV1NCYXRjaFNlcnZpY2VSb2xlJyksXG4gICAgICAgICAgXSxcbiAgICAgICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnYmF0Y2guYW1hem9uYXdzLmNvbScpLFxuICAgICAgICB9KS5yb2xlQXJuLFxuICAgICAgc3RhdGU6IHByb3BzLmVuYWJsZWQgPT09IHVuZGVmaW5lZCA/ICdFTkFCTEVEJyA6IChwcm9wcy5lbmFibGVkID8gJ0VOQUJMRUQnIDogJ0RJU0FCTEVEJyksXG4gICAgICB0eXBlOiB0aGlzLmlzTWFuYWdlZChwcm9wcykgPyAnTUFOQUdFRCcgOiAnVU5NQU5BR0VEJyxcbiAgICB9KTtcblxuICAgIGlmIChwcm9wcy5jb21wdXRlUmVzb3VyY2VzICYmIHByb3BzLmNvbXB1dGVSZXNvdXJjZXMudnBjKSB7XG4gICAgICB0aGlzLm5vZGUuYWRkRGVwZW5kZW5jeShwcm9wcy5jb21wdXRlUmVzb3VyY2VzLnZwYyk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wdXRlRW52aXJvbm1lbnRBcm4gPSB0aGlzLmdldFJlc291cmNlQXJuQXR0cmlidXRlKGNvbXB1dGVFbnZpcm9ubWVudC5yZWYsIHtcbiAgICAgIHNlcnZpY2U6ICdiYXRjaCcsXG4gICAgICByZXNvdXJjZTogJ2NvbXB1dGUtZW52aXJvbm1lbnQnLFxuICAgICAgcmVzb3VyY2VOYW1lOiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICB9KTtcbiAgICB0aGlzLmNvbXB1dGVFbnZpcm9ubWVudE5hbWUgPSB0aGlzLmdldFJlc291cmNlTmFtZUF0dHJpYnV0ZShjb21wdXRlRW52aXJvbm1lbnQucmVmKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNNYW5hZ2VkKHByb3BzOiBDb21wdXRlRW52aXJvbm1lbnRQcm9wcyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwcm9wcy5tYW5hZ2VkID09PSB1bmRlZmluZWQgPyB0cnVlIDogcHJvcHMubWFuYWdlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHByb3BlcnRpZXMgcHJvdmlkZWQgZm9yIGEgbmV3IGJhdGNoIGNvbXB1dGUgZW52aXJvbm1lbnQuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUHJvcHMocHJvcHM6IENvbXB1dGVFbnZpcm9ubWVudFByb3BzKSB7XG4gICAgaWYgKHByb3BzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXNNYW5hZ2VkKHByb3BzKSAmJiBwcm9wcy5jb21wdXRlUmVzb3VyY2VzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSXQgaXMgbm90IGFsbG93ZWQgdG8gc2V0IGNvbXB1dGVSZXNvdXJjZXMgb24gYW4gQVdTIHVubWFuYWdlZCBjb21wdXRlIGVudmlyb25tZW50Jyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNNYW5hZ2VkKHByb3BzKSAmJiBwcm9wcy5jb21wdXRlUmVzb3VyY2VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY29tcHV0ZVJlc291cmNlcyBpcyBtaXNzaW5nIGJ1dCByZXF1aXJlZCBvbiBhIG1hbmFnZWQgY29tcHV0ZSBlbnZpcm9ubWVudCcpO1xuICAgIH1cblxuICAgIC8vIFNldHRpbmcgYSBiaWQgcGVyY2VudGFnZSBpcyBvbmx5IGFsbG93ZWQgb24gU1BPVCByZXNvdXJjZXMgK1xuICAgIC8vIENhbm5vdCB1c2UgU1BPVF9DQVBBQ0lUWV9PUFRJTUlaRUQgd2hlbiB1c2luZyBPTl9ERU1BTkRcbiAgICBpZiAocHJvcHMuY29tcHV0ZVJlc291cmNlcykge1xuICAgICAgaWYgKHByb3BzLmNvbXB1dGVSZXNvdXJjZXMudHlwZSA9PT0gQ29tcHV0ZVJlc291cmNlVHlwZS5PTl9ERU1BTkQpIHtcbiAgICAgICAgLy8gVkFMSURBVEUgRk9SIE9OX0RFTUFORFxuXG4gICAgICAgIC8vIEJpZCBwZXJjZW50YWdlIGlzIG5vdCBhbGxvd2VkXG4gICAgICAgIGlmIChwcm9wcy5jb21wdXRlUmVzb3VyY2VzLmJpZFBlcmNlbnRhZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2V0dGluZyB0aGUgYmlkIHBlcmNlbnRhZ2UgaXMgb25seSBhbGxvd2VkIGZvciBTUE9UIHR5cGUgcmVzb3VyY2VzIG9uIGEgYmF0Y2ggY29tcHV0ZSBlbnZpcm9ubWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU1BPVF9DQVBBQ0lUWV9PUFRJTUlaRUQgYWxsb2NhdGlvbiBpcyBub3QgYWxsb3dlZFxuICAgICAgICBpZiAocHJvcHMuY29tcHV0ZVJlc291cmNlcy5hbGxvY2F0aW9uU3RyYXRlZ3kgJiYgcHJvcHMuY29tcHV0ZVJlc291cmNlcy5hbGxvY2F0aW9uU3RyYXRlZ3kgPT09IEFsbG9jYXRpb25TdHJhdGVneS5TUE9UX0NBUEFDSVRZX09QVElNSVpFRCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIFNQT1RfQ0FQQUNJVFlfT1BUSU1JWkVEIGFsbG9jYXRpb24gc3RyYXRlZ3kgaXMgb25seSBhbGxvd2VkIGlmIHRoZSBlbnZpcm9ubWVudCBpcyBhIFNQT1QgdHlwZSBjb21wdXRlIGVudmlyb25tZW50Jyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFZBTElEQVRFIEZPUiBTUE9UXG5cbiAgICAgICAgLy8gQmlkIHBlcmNlbnRhZ2UgbXVzdCBiZSBmcm9tIDAgLSAxMDBcbiAgICAgICAgaWYgKHByb3BzLmNvbXB1dGVSZXNvdXJjZXMuYmlkUGVyY2VudGFnZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgKHByb3BzLmNvbXB1dGVSZXNvdXJjZXMuYmlkUGVyY2VudGFnZSA8IDAgfHwgcHJvcHMuY29tcHV0ZVJlc291cmNlcy5iaWRQZXJjZW50YWdlID4gMTAwKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdCaWQgcGVyY2VudGFnZSBjYW4gb25seSBiZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMTAwJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLmNvbXB1dGVSZXNvdXJjZXMubWludkNwdXMpIHtcbiAgICAgICAgLy8gbWludkNwdXMgY2Fubm90IGJlIGxlc3MgdGhhbiAwXG4gICAgICAgIGlmIChwcm9wcy5jb21wdXRlUmVzb3VyY2VzLm1pbnZDcHVzIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWluaW11bSB2Q3B1cyBmb3IgYSBiYXRjaCBjb21wdXRlIGVudmlyb25tZW50IGNhbm5vdCBiZSBsZXNzIHRoYW4gMCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWludkNwdXMgY2Fubm90IGV4Y2VlZCBtYXggdkNwdXNcbiAgICAgICAgaWYgKHByb3BzLmNvbXB1dGVSZXNvdXJjZXMubWF4dkNwdXMgJiZcbiAgICAgICAgICBwcm9wcy5jb21wdXRlUmVzb3VyY2VzLm1pbnZDcHVzID4gcHJvcHMuY29tcHV0ZVJlc291cmNlcy5tYXh2Q3B1cykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaW5pbXVtIHZDcHVzIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gdkNwdXMnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRJbnN0YW5jZVR5cGVzKGluc3RhbmNlVHlwZXM/OiBlYzIuSW5zdGFuY2VUeXBlW10pOiBzdHJpbmdbXSB7XG4gICAgaWYgKGluc3RhbmNlVHlwZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgJ29wdGltYWwnLFxuICAgICAgXTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5zdGFuY2VUeXBlcy5tYXAoKHR5cGU6IGVjMi5JbnN0YW5jZVR5cGUpID0+IHR5cGUudG9TdHJpbmcoKSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2VjdXJpdHlHcm91cElkcyh2cGM6IGVjMi5JVnBjLCBzZWN1cml0eUdyb3Vwcz86IGVjMi5JU2VjdXJpdHlHcm91cFtdKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIGlmIChzZWN1cml0eUdyb3VwcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBuZXcgZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgJ1Jlc291cmNlLVNlY3VyaXR5LUdyb3VwJywgeyB2cGMgfSkuc2VjdXJpdHlHcm91cElkLFxuICAgICAgXTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VjdXJpdHlHcm91cHMubWFwKChncm91cDogZWMyLklTZWN1cml0eUdyb3VwKSA9PiBncm91cC5zZWN1cml0eUdyb3VwSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhbiBBV1MgSUFNIHJvbGUgZm9yIHByb3Zpc2lvbmluZyBzcG90ZmxlZXQgcmVzb3VyY2VzXG4gICAqIGlmIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGlzIHNldCB0byBCRVNUX0ZJVCBvciBub3QgZGVmaW5lZC5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIC0gdGhlIGNvbXB1dGUgZW52aXJvbm1lbnQgY29uc3RydWN0IHByb3BlcnRpZXNcbiAgICovXG4gIHByaXZhdGUgZ2V0U3BvdEZsZWV0Um9sZShwcm9wczogQ29tcHV0ZUVudmlyb25tZW50UHJvcHMpOiBpYW0uSVJvbGUgfCB1bmRlZmluZWQge1xuICAgIGlmIChwcm9wcy5jb21wdXRlUmVzb3VyY2VzPy5hbGxvY2F0aW9uU3RyYXRlZ3kgJiYgcHJvcHMuY29tcHV0ZVJlc291cmNlcy5hbGxvY2F0aW9uU3RyYXRlZ3kgIT09IEFsbG9jYXRpb25TdHJhdGVneS5CRVNUX0ZJVCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuY29tcHV0ZVJlc291cmNlcykge1xuICAgICAgaWYgKHByb3BzLmNvbXB1dGVSZXNvdXJjZXMuc3BvdEZsZWV0Um9sZSkge1xuICAgICAgICByZXR1cm4gcHJvcHMuY29tcHV0ZVJlc291cmNlcy5zcG90RmxlZXRSb2xlO1xuICAgICAgfSBlbHNlIGlmIChwcm9wcy5jb21wdXRlUmVzb3VyY2VzLnR5cGUgPT09IENvbXB1dGVSZXNvdXJjZVR5cGUuU1BPVCkge1xuICAgICAgICByZXR1cm4gaWFtLlJvbGUuZnJvbVJvbGVBcm4odGhpcywgJ1Jlc291cmNlLVNwb3RGbGVldC1Sb2xlJyxcbiAgICAgICAgICBgYXJuJHtBd3MuUEFSVElUSU9OfWlhbTo6JHt0aGlzLnN0YWNrLmFjY291bnR9OnJvbGUvYXdzLXNlcnZpY2Utcm9sZS9zcG90ZmxlZXQuYW1hem9uYXdzLmNvbS9BV1NTZXJ2aWNlUm9sZUZvckVDMlNwb3RGbGVldGApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==

@@ -25,3 +25,3 @@ import { Construct, IResource, Resource } from '@aws-cdk/core';

*
* @default Cloudformation-generated name
* @default - Cloudformation-generated name
*/

@@ -34,5 +34,4 @@ readonly jobQueueName?: string;

*
* @default Default-Compute-Environment
*/
readonly computeEnvironments?: JobQueueComputeEnvironment[];
readonly computeEnvironments: JobQueueComputeEnvironment[];
/**

@@ -89,3 +88,3 @@ * The priority of the job queue. Job queues with a higher priority (or a higher integer value for the priority parameter) are evaluated first

readonly jobQueueName: string;
constructor(scope: Construct, id: string, props?: JobQueueProps);
constructor(scope: Construct, id: string, props: JobQueueProps);
}

@@ -5,3 +5,2 @@ "use strict";

const batch_generated_1 = require("./batch.generated");
const compute_environment_1 = require("./compute-environment");
/**

@@ -14,19 +13,14 @@ * Batch Job Queue.

class JobQueue extends core_1.Resource {
constructor(scope, id, props = {}) {
constructor(scope, id, props) {
super(scope, id, {
physicalName: props.jobQueueName,
});
if (props.computeEnvironments.length === 0) {
throw new Error('computeEnvironments must be non-empty');
}
const jobQueue = new batch_generated_1.CfnJobQueue(this, 'Resource', {
computeEnvironmentOrder: props.computeEnvironments
? props.computeEnvironments.map(cp => ({
computeEnvironment: cp.computeEnvironment.computeEnvironmentArn,
order: cp.order,
}))
: [
{
// Get an AWS Managed Compute Environment
computeEnvironment: new compute_environment_1.ComputeEnvironment(this, 'Resource-Batch-Compute-Environment').computeEnvironmentArn,
order: 1,
},
],
computeEnvironmentOrder: props.computeEnvironments.map(cp => ({
computeEnvironment: cp.computeEnvironment.computeEnvironmentArn,
order: cp.order,
})),
jobQueueName: this.physicalName,

@@ -64,2 +58,2 @@ priority: props.priority || 1,

exports.JobQueue = JobQueue;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLXF1ZXVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiam9iLXF1ZXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsd0NBQXNFO0FBQ3RFLHVEQUFnRDtBQUNoRCwrREFBZ0Y7QUE2RWhGOzs7OztHQUtHO0FBQ0gsTUFBYSxRQUFTLFNBQVEsZUFBUTtJQXVCcEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxRQUF1QixFQUFFO1FBQ2pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1NBQ2pDLENBQUMsQ0FBQztRQUVILE1BQU0sUUFBUSxHQUFHLElBQUksNkJBQVcsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ2pELHVCQUF1QixFQUFFLEtBQUssQ0FBQyxtQkFBbUI7Z0JBQ2hELENBQUMsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDckMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLHFCQUFxQjtvQkFDL0QsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLO2lCQUNnQyxDQUFBLENBQUM7Z0JBQ2xELENBQUMsQ0FBQztvQkFDRTt3QkFDRSx5Q0FBeUM7d0JBQ3pDLGtCQUFrQixFQUFFLElBQUksd0NBQWtCLENBQUMsSUFBSSxFQUFFLG9DQUFvQyxDQUFDLENBQUMscUJBQXFCO3dCQUM1RyxLQUFLLEVBQUUsQ0FBQztxQkFDVDtpQkFDRjtZQUNMLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtZQUMvQixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsSUFBSSxDQUFDO1lBQzdCLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1NBQzFGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDNUQsT0FBTyxFQUFFLE9BQU87WUFDaEIsUUFBUSxFQUFFLFdBQVc7WUFDckIsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1NBQ2hDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBbkREOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxlQUFlLENBQUMsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsV0FBbUI7UUFDN0UsTUFBTSxLQUFLLEdBQUcsWUFBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFlBQWEsQ0FBQztRQUUvRCxNQUFNLE1BQU8sU0FBUSxlQUFRO1lBQTdCOztnQkFDa0IsZ0JBQVcsR0FBRyxXQUFXLENBQUM7Z0JBQzFCLGlCQUFZLEdBQUcsWUFBWSxDQUFDO1lBQzlDLENBQUM7U0FBQTtRQUVELE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQy9CLENBQUM7Q0FtQ0Y7QUFyREQsNEJBcURDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0LCBJUmVzb3VyY2UsIFJlc291cmNlLCBTdGFjayB9IGZyb20gJ0Bhd3MtY2RrL2NvcmUnO1xuaW1wb3J0IHsgQ2ZuSm9iUXVldWUgfSBmcm9tICcuL2JhdGNoLmdlbmVyYXRlZCc7XG5pbXBvcnQgeyBDb21wdXRlRW52aXJvbm1lbnQsIElDb21wdXRlRW52aXJvbm1lbnQgfSBmcm9tICcuL2NvbXB1dGUtZW52aXJvbm1lbnQnO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIG1hcHBpbmcgYSBjb21wdXRlIGVudmlyb25tZW50IHRvIGEgam9iIHF1ZXVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpvYlF1ZXVlQ29tcHV0ZUVudmlyb25tZW50IHtcbiAgLyoqXG4gICAqIFRoZSBiYXRjaCBjb21wdXRlIGVudmlyb25tZW50IHRvIHVzZSBmb3IgcHJvY2Vzc2luZyBzdWJtaXR0ZWQgam9icyB0byB0aGlzIHF1ZXVlLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tcHV0ZUVudmlyb25tZW50OiBJQ29tcHV0ZUVudmlyb25tZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgb3JkZXIgaW4gd2hpY2ggdGhpcyBjb21wdXRlIGVudmlyb25tZW50IHdpbGwgYmUgc2VsZWN0ZWQgZm9yIGR5bmFtaWMgYWxsb2NhdGlvbiBvZiByZXNvdXJjZXMgdG8gcHJvY2VzcyBzdWJtaXR0ZWQgam9icy5cbiAgICovXG4gIHJlYWRvbmx5IG9yZGVyOiBudW1iZXI7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBvZiBhIGJhdGNoIGpvYiBxdWV1ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKb2JRdWV1ZVByb3BzIHtcbiAgLyoqXG4gICAqIEEgbmFtZSBmb3IgdGhlIGpvYiBxdWV1ZS5cbiAgICpcbiAgICogVXAgdG8gMTI4IGxldHRlcnMgKHVwcGVyY2FzZSBhbmQgbG93ZXJjYXNlKSwgbnVtYmVycywgaHlwaGVucywgYW5kIHVuZGVyc2NvcmVzIGFyZSBhbGxvd2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBDbG91ZGZvcm1hdGlvbi1nZW5lcmF0ZWQgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgam9iUXVldWVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2V0IG9mIGNvbXB1dGUgZW52aXJvbm1lbnRzIG1hcHBlZCB0byBhIGpvYiBxdWV1ZSBhbmQgdGhlaXIgb3JkZXIgcmVsYXRpdmUgdG8gZWFjaCBvdGhlci4gVGhlIGpvYiBzY2hlZHVsZXIgdXNlcyB0aGlzIHBhcmFtZXRlciB0b1xuICAgKiBkZXRlcm1pbmUgd2hpY2ggY29tcHV0ZSBlbnZpcm9ubWVudCBzaG91bGQgZXhlY3V0ZSBhIGdpdmVuIGpvYi4gQ29tcHV0ZSBlbnZpcm9ubWVudHMgbXVzdCBiZSBpbiB0aGUgVkFMSUQgc3RhdGUgYmVmb3JlIHlvdSBjYW4gYXNzb2NpYXRlIHRoZW1cbiAgICogd2l0aCBhIGpvYiBxdWV1ZS4gWW91IGNhbiBhc3NvY2lhdGUgdXAgdG8gdGhyZWUgY29tcHV0ZSBlbnZpcm9ubWVudHMgd2l0aCBhIGpvYiBxdWV1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgRGVmYXVsdC1Db21wdXRlLUVudmlyb25tZW50XG4gICAqL1xuICByZWFkb25seSBjb21wdXRlRW52aXJvbm1lbnRzPzogSm9iUXVldWVDb21wdXRlRW52aXJvbm1lbnRbXTtcblxuICAvKipcbiAgICogVGhlIHByaW9yaXR5IG9mIHRoZSBqb2IgcXVldWUuIEpvYiBxdWV1ZXMgd2l0aCBhIGhpZ2hlciBwcmlvcml0eSAob3IgYSBoaWdoZXIgaW50ZWdlciB2YWx1ZSBmb3IgdGhlIHByaW9yaXR5IHBhcmFtZXRlcikgYXJlIGV2YWx1YXRlZCBmaXJzdFxuICAgKiB3aGVuIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FtZSBjb21wdXRlIGVudmlyb25tZW50LiBQcmlvcml0eSBpcyBkZXRlcm1pbmVkIGluIGRlc2NlbmRpbmcgb3JkZXIsIGZvciBleGFtcGxlLCBhIGpvYiBxdWV1ZSB3aXRoIGEgcHJpb3JpdHkgdmFsdWVcbiAgICogb2YgMTAgaXMgZ2l2ZW4gc2NoZWR1bGluZyBwcmVmZXJlbmNlIG92ZXIgYSBqb2IgcXVldWUgd2l0aCBhIHByaW9yaXR5IHZhbHVlIG9mIDEuXG4gICAqXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIHJlYWRvbmx5IHByaW9yaXR5PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdGUgb2YgdGhlIGpvYiBxdWV1ZS4gSWYgc2V0IHRvIHRydWUsIGl0IGlzIGFibGUgdG8gYWNjZXB0IGpvYnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgb2YgYSBKb2IgUXVldWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUpvYlF1ZXVlIGV4dGVuZHMgSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhpcyBiYXRjaCBqb2IgcXVldWUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGpvYlF1ZXVlQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgbmFtZSBmb3IgdGhlIGpvYiBxdWV1ZS5cbiAgICpcbiAgICogVXAgdG8gMTI4IGxldHRlcnMgKHVwcGVyY2FzZSBhbmQgbG93ZXJjYXNlKSwgbnVtYmVycywgaHlwaGVucywgYW5kIHVuZGVyc2NvcmVzIGFyZSBhbGxvd2VkLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBqb2JRdWV1ZU5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBCYXRjaCBKb2IgUXVldWUuXG4gKlxuICogRGVmaW5lcyBhIGJhdGNoIGpvYiBxdWV1ZSB0byBkZWZpbmUgaG93IHN1Ym1pdHRlZCBiYXRjaCBqb2JzXG4gKiBzaG91bGQgYmUgcmFuIGJhc2VkIG9uIHNwZWNpZmllZCBiYXRjaCBjb21wdXRlIGVudmlyb25tZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIEpvYlF1ZXVlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJSm9iUXVldWUge1xuICAvKipcbiAgICogRmV0Y2hlcyBhbiBleGlzdGluZyBiYXRjaCBqb2IgcXVldWUgYnkgaXRzIGFtYXpvbiByZXNvdXJjZSBuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGVcbiAgICogQHBhcmFtIGlkXG4gICAqIEBwYXJhbSBqb2JRdWV1ZUFyblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tSm9iUXVldWVBcm4oc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgam9iUXVldWVBcm46IHN0cmluZyk6IElKb2JRdWV1ZSB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3Qgam9iUXVldWVOYW1lID0gc3RhY2sucGFyc2VBcm4oam9iUXVldWVBcm4pLnJlc291cmNlTmFtZSE7XG5cbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElKb2JRdWV1ZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgam9iUXVldWVBcm4gPSBqb2JRdWV1ZUFybjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBqb2JRdWV1ZU5hbWUgPSBqb2JRdWV1ZU5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBqb2JRdWV1ZUFybjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgam9iUXVldWVOYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEpvYlF1ZXVlUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcy5qb2JRdWV1ZU5hbWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBqb2JRdWV1ZSA9IG5ldyBDZm5Kb2JRdWV1ZSh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBjb21wdXRlRW52aXJvbm1lbnRPcmRlcjogcHJvcHMuY29tcHV0ZUVudmlyb25tZW50c1xuICAgICAgICA/IHByb3BzLmNvbXB1dGVFbnZpcm9ubWVudHMubWFwKGNwID0+ICh7XG4gICAgICAgICAgY29tcHV0ZUVudmlyb25tZW50OiBjcC5jb21wdXRlRW52aXJvbm1lbnQuY29tcHV0ZUVudmlyb25tZW50QXJuLFxuICAgICAgICAgIG9yZGVyOiBjcC5vcmRlcixcbiAgICAgICAgfSBhcyBDZm5Kb2JRdWV1ZS5Db21wdXRlRW52aXJvbm1lbnRPcmRlclByb3BlcnR5KSlcbiAgICAgICAgOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC8vIEdldCBhbiBBV1MgTWFuYWdlZCBDb21wdXRlIEVudmlyb25tZW50XG4gICAgICAgICAgICAgIGNvbXB1dGVFbnZpcm9ubWVudDogbmV3IENvbXB1dGVFbnZpcm9ubWVudCh0aGlzLCAnUmVzb3VyY2UtQmF0Y2gtQ29tcHV0ZS1FbnZpcm9ubWVudCcpLmNvbXB1dGVFbnZpcm9ubWVudEFybixcbiAgICAgICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICBqb2JRdWV1ZU5hbWU6IHRoaXMucGh5c2ljYWxOYW1lLFxuICAgICAgcHJpb3JpdHk6IHByb3BzLnByaW9yaXR5IHx8IDEsXG4gICAgICBzdGF0ZTogcHJvcHMuZW5hYmxlZCA9PT0gdW5kZWZpbmVkID8gJ0VOQUJMRUQnIDogKHByb3BzLmVuYWJsZWQgPyAnRU5BQkxFRCcgOiAnRElTQUJMRUQnKSxcbiAgICB9KTtcblxuICAgIHRoaXMuam9iUXVldWVBcm4gPSB0aGlzLmdldFJlc291cmNlQXJuQXR0cmlidXRlKGpvYlF1ZXVlLnJlZiwge1xuICAgICAgc2VydmljZTogJ2JhdGNoJyxcbiAgICAgIHJlc291cmNlOiAnam9iLXF1ZXVlJyxcbiAgICAgIHJlc291cmNlTmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgfSk7XG4gICAgdGhpcy5qb2JRdWV1ZU5hbWUgPSB0aGlzLmdldFJlc291cmNlTmFtZUF0dHJpYnV0ZShqb2JRdWV1ZS5yZWYpO1xuICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLXF1ZXVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiam9iLXF1ZXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsd0NBQXNFO0FBQ3RFLHVEQUFnRDtBQTZFaEQ7Ozs7O0dBS0c7QUFDSCxNQUFhLFFBQVMsU0FBUSxlQUFRO0lBdUJwQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQW9CO1FBQzVELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1NBQ2pDLENBQUMsQ0FBQztRQUVILElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1NBQzFEO1FBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSw2QkFBVyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDakQsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzFELGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxxQkFBcUI7Z0JBQy9ELEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSzthQUNnQyxDQUFBLENBQUM7WUFDcEQsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQy9CLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxJQUFJLENBQUM7WUFDN0IsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7U0FDMUYsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUM1RCxPQUFPLEVBQUUsT0FBTztZQUNoQixRQUFRLEVBQUUsV0FBVztZQUNyQixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDaEMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUEvQ0Q7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLGVBQWUsQ0FBQyxLQUFnQixFQUFFLEVBQVUsRUFBRSxXQUFtQjtRQUM3RSxNQUFNLEtBQUssR0FBRyxZQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsWUFBYSxDQUFDO1FBRS9ELE1BQU0sTUFBTyxTQUFRLGVBQVE7WUFBN0I7O2dCQUNrQixnQkFBVyxHQUFHLFdBQVcsQ0FBQztnQkFDMUIsaUJBQVksR0FBRyxZQUFZLENBQUM7WUFDOUMsQ0FBQztTQUFBO1FBRUQsT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDL0IsQ0FBQztDQStCRjtBQWpERCw0QkFpREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QsIElSZXNvdXJjZSwgUmVzb3VyY2UsIFN0YWNrIH0gZnJvbSAnQGF3cy1jZGsvY29yZSc7XG5pbXBvcnQgeyBDZm5Kb2JRdWV1ZSB9IGZyb20gJy4vYmF0Y2guZ2VuZXJhdGVkJztcbmltcG9ydCB7IElDb21wdXRlRW52aXJvbm1lbnQgfSBmcm9tICcuL2NvbXB1dGUtZW52aXJvbm1lbnQnO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIG1hcHBpbmcgYSBjb21wdXRlIGVudmlyb25tZW50IHRvIGEgam9iIHF1ZXVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpvYlF1ZXVlQ29tcHV0ZUVudmlyb25tZW50IHtcbiAgLyoqXG4gICAqIFRoZSBiYXRjaCBjb21wdXRlIGVudmlyb25tZW50IHRvIHVzZSBmb3IgcHJvY2Vzc2luZyBzdWJtaXR0ZWQgam9icyB0byB0aGlzIHF1ZXVlLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tcHV0ZUVudmlyb25tZW50OiBJQ29tcHV0ZUVudmlyb25tZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgb3JkZXIgaW4gd2hpY2ggdGhpcyBjb21wdXRlIGVudmlyb25tZW50IHdpbGwgYmUgc2VsZWN0ZWQgZm9yIGR5bmFtaWMgYWxsb2NhdGlvbiBvZiByZXNvdXJjZXMgdG8gcHJvY2VzcyBzdWJtaXR0ZWQgam9icy5cbiAgICovXG4gIHJlYWRvbmx5IG9yZGVyOiBudW1iZXI7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBvZiBhIGJhdGNoIGpvYiBxdWV1ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKb2JRdWV1ZVByb3BzIHtcbiAgLyoqXG4gICAqIEEgbmFtZSBmb3IgdGhlIGpvYiBxdWV1ZS5cbiAgICpcbiAgICogVXAgdG8gMTI4IGxldHRlcnMgKHVwcGVyY2FzZSBhbmQgbG93ZXJjYXNlKSwgbnVtYmVycywgaHlwaGVucywgYW5kIHVuZGVyc2NvcmVzIGFyZSBhbGxvd2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIENsb3VkZm9ybWF0aW9uLWdlbmVyYXRlZCBuYW1lXG4gICAqL1xuICByZWFkb25seSBqb2JRdWV1ZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXQgb2YgY29tcHV0ZSBlbnZpcm9ubWVudHMgbWFwcGVkIHRvIGEgam9iIHF1ZXVlIGFuZCB0aGVpciBvcmRlciByZWxhdGl2ZSB0byBlYWNoIG90aGVyLiBUaGUgam9iIHNjaGVkdWxlciB1c2VzIHRoaXMgcGFyYW1ldGVyIHRvXG4gICAqIGRldGVybWluZSB3aGljaCBjb21wdXRlIGVudmlyb25tZW50IHNob3VsZCBleGVjdXRlIGEgZ2l2ZW4gam9iLiBDb21wdXRlIGVudmlyb25tZW50cyBtdXN0IGJlIGluIHRoZSBWQUxJRCBzdGF0ZSBiZWZvcmUgeW91IGNhbiBhc3NvY2lhdGUgdGhlbVxuICAgKiB3aXRoIGEgam9iIHF1ZXVlLiBZb3UgY2FuIGFzc29jaWF0ZSB1cCB0byB0aHJlZSBjb21wdXRlIGVudmlyb25tZW50cyB3aXRoIGEgam9iIHF1ZXVlLlxuICAgKlxuICAgKi9cbiAgcmVhZG9ubHkgY29tcHV0ZUVudmlyb25tZW50czogSm9iUXVldWVDb21wdXRlRW52aXJvbm1lbnRbXTtcblxuICAvKipcbiAgICogVGhlIHByaW9yaXR5IG9mIHRoZSBqb2IgcXVldWUuIEpvYiBxdWV1ZXMgd2l0aCBhIGhpZ2hlciBwcmlvcml0eSAob3IgYSBoaWdoZXIgaW50ZWdlciB2YWx1ZSBmb3IgdGhlIHByaW9yaXR5IHBhcmFtZXRlcikgYXJlIGV2YWx1YXRlZCBmaXJzdFxuICAgKiB3aGVuIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FtZSBjb21wdXRlIGVudmlyb25tZW50LiBQcmlvcml0eSBpcyBkZXRlcm1pbmVkIGluIGRlc2NlbmRpbmcgb3JkZXIsIGZvciBleGFtcGxlLCBhIGpvYiBxdWV1ZSB3aXRoIGEgcHJpb3JpdHkgdmFsdWVcbiAgICogb2YgMTAgaXMgZ2l2ZW4gc2NoZWR1bGluZyBwcmVmZXJlbmNlIG92ZXIgYSBqb2IgcXVldWUgd2l0aCBhIHByaW9yaXR5IHZhbHVlIG9mIDEuXG4gICAqXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIHJlYWRvbmx5IHByaW9yaXR5PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdGUgb2YgdGhlIGpvYiBxdWV1ZS4gSWYgc2V0IHRvIHRydWUsIGl0IGlzIGFibGUgdG8gYWNjZXB0IGpvYnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgb2YgYSBKb2IgUXVldWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUpvYlF1ZXVlIGV4dGVuZHMgSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhpcyBiYXRjaCBqb2IgcXVldWUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGpvYlF1ZXVlQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgbmFtZSBmb3IgdGhlIGpvYiBxdWV1ZS5cbiAgICpcbiAgICogVXAgdG8gMTI4IGxldHRlcnMgKHVwcGVyY2FzZSBhbmQgbG93ZXJjYXNlKSwgbnVtYmVycywgaHlwaGVucywgYW5kIHVuZGVyc2NvcmVzIGFyZSBhbGxvd2VkLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBqb2JRdWV1ZU5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBCYXRjaCBKb2IgUXVldWUuXG4gKlxuICogRGVmaW5lcyBhIGJhdGNoIGpvYiBxdWV1ZSB0byBkZWZpbmUgaG93IHN1Ym1pdHRlZCBiYXRjaCBqb2JzXG4gKiBzaG91bGQgYmUgcmFuIGJhc2VkIG9uIHNwZWNpZmllZCBiYXRjaCBjb21wdXRlIGVudmlyb25tZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIEpvYlF1ZXVlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJSm9iUXVldWUge1xuICAvKipcbiAgICogRmV0Y2hlcyBhbiBleGlzdGluZyBiYXRjaCBqb2IgcXVldWUgYnkgaXRzIGFtYXpvbiByZXNvdXJjZSBuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGVcbiAgICogQHBhcmFtIGlkXG4gICAqIEBwYXJhbSBqb2JRdWV1ZUFyblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tSm9iUXVldWVBcm4oc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgam9iUXVldWVBcm46IHN0cmluZyk6IElKb2JRdWV1ZSB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3Qgam9iUXVldWVOYW1lID0gc3RhY2sucGFyc2VBcm4oam9iUXVldWVBcm4pLnJlc291cmNlTmFtZSE7XG5cbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElKb2JRdWV1ZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgam9iUXVldWVBcm4gPSBqb2JRdWV1ZUFybjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBqb2JRdWV1ZU5hbWUgPSBqb2JRdWV1ZU5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBqb2JRdWV1ZUFybjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgam9iUXVldWVOYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEpvYlF1ZXVlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMuam9iUXVldWVOYW1lLFxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLmNvbXB1dGVFbnZpcm9ubWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbXB1dGVFbnZpcm9ubWVudHMgbXVzdCBiZSBub24tZW1wdHknKTtcbiAgICB9XG5cbiAgICBjb25zdCBqb2JRdWV1ZSA9IG5ldyBDZm5Kb2JRdWV1ZSh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBjb21wdXRlRW52aXJvbm1lbnRPcmRlcjogcHJvcHMuY29tcHV0ZUVudmlyb25tZW50cy5tYXAoY3AgPT4gKHtcbiAgICAgICAgICBjb21wdXRlRW52aXJvbm1lbnQ6IGNwLmNvbXB1dGVFbnZpcm9ubWVudC5jb21wdXRlRW52aXJvbm1lbnRBcm4sXG4gICAgICAgICAgb3JkZXI6IGNwLm9yZGVyLFxuICAgICAgICB9IGFzIENmbkpvYlF1ZXVlLkNvbXB1dGVFbnZpcm9ubWVudE9yZGVyUHJvcGVydHkpKSxcbiAgICAgIGpvYlF1ZXVlTmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgICBwcmlvcml0eTogcHJvcHMucHJpb3JpdHkgfHwgMSxcbiAgICAgIHN0YXRlOiBwcm9wcy5lbmFibGVkID09PSB1bmRlZmluZWQgPyAnRU5BQkxFRCcgOiAocHJvcHMuZW5hYmxlZCA/ICdFTkFCTEVEJyA6ICdESVNBQkxFRCcpLFxuICAgIH0pO1xuXG4gICAgdGhpcy5qb2JRdWV1ZUFybiA9IHRoaXMuZ2V0UmVzb3VyY2VBcm5BdHRyaWJ1dGUoam9iUXVldWUucmVmLCB7XG4gICAgICBzZXJ2aWNlOiAnYmF0Y2gnLFxuICAgICAgcmVzb3VyY2U6ICdqb2ItcXVldWUnLFxuICAgICAgcmVzb3VyY2VOYW1lOiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICB9KTtcbiAgICB0aGlzLmpvYlF1ZXVlTmFtZSA9IHRoaXMuZ2V0UmVzb3VyY2VOYW1lQXR0cmlidXRlKGpvYlF1ZXVlLnJlZik7XG4gIH1cbn1cbiJdfQ==
{
"name": "@aws-cdk/aws-batch",
"version": "1.27.0",
"version": "1.28.0",
"description": "The CDK Construct Library for AWS::Batch",

@@ -82,23 +82,23 @@ "main": "lib/index.js",

"devDependencies": {
"@aws-cdk/assert": "1.27.0",
"cdk-build-tools": "1.27.0",
"cdk-integ-tools": "1.27.0",
"cfn2ts": "1.27.0",
"@aws-cdk/assert": "1.28.0",
"cdk-build-tools": "1.28.0",
"cdk-integ-tools": "1.28.0",
"cfn2ts": "1.28.0",
"jest": "^24.9.0",
"pkglint": "1.27.0"
"pkglint": "1.28.0"
},
"dependencies": {
"@aws-cdk/core": "1.27.0",
"@aws-cdk/aws-ec2": "1.27.0",
"@aws-cdk/aws-ecr": "1.27.0",
"@aws-cdk/aws-ecs": "1.27.0",
"@aws-cdk/aws-iam": "1.27.0"
"@aws-cdk/core": "1.28.0",
"@aws-cdk/aws-ec2": "1.28.0",
"@aws-cdk/aws-ecr": "1.28.0",
"@aws-cdk/aws-ecs": "1.28.0",
"@aws-cdk/aws-iam": "1.28.0"
},
"homepage": "https://github.com/aws/aws-cdk",
"peerDependencies": {
"@aws-cdk/core": "1.27.0",
"@aws-cdk/aws-ec2": "1.27.0",
"@aws-cdk/aws-ecr": "1.27.0",
"@aws-cdk/aws-ecs": "1.27.0",
"@aws-cdk/aws-iam": "1.27.0"
"@aws-cdk/core": "1.28.0",
"@aws-cdk/aws-ec2": "1.28.0",
"@aws-cdk/aws-ecr": "1.28.0",
"@aws-cdk/aws-ecs": "1.28.0",
"@aws-cdk/aws-iam": "1.28.0"
},

@@ -105,0 +105,0 @@ "engines": {

@@ -21,1 +21,36 @@ ## AWS Batch Construct Library

This module is part of the [AWS Cloud Development Kit](https://github.com/aws/aws-cdk) project.
## Launch template support
### Usage
Simply define your Launch Template:
```typescript
const myLaunchTemplate = new ec2.CfnLaunchTemplate(this, 'LaunchTemplate', {
launchTemplateName: 'extra-storage-template',
launchTemplateData: {
blockDeviceMappings: [
{
deviceName: '/dev/xvdcz',
ebs: {
encrypted: true,
volumeSize: 100,
volumeType: 'gp2'
}
}
]
}
});
```
and use it:
```typescript
const myComputeEnv = new batch.ComputeEnvironment(this, 'ComputeEnv', {
computeResources: {
launchTemplate: {
launchTemplateName: myLaunchTemplate.launchTemplateName as string, //or simply use an existing template name
},
vpc,
},
computeEnvironmentName: 'MyStorageCapableComputeEnvironment',
});
```

@@ -34,3 +34,3 @@ "use strict";

'Fn::GetAtt': [
'testcomputeenvResourceInstanceRole7FD819B9',
'testcomputeenvInstanceProfileCBD87EAB',
'Arn'

@@ -59,3 +59,3 @@ ]

describe('when validating props', () => {
test('should deny setting compute resources when using type managed', () => {
test('should deny setting compute resources when using type unmanaged', () => {
// THEN

@@ -65,4 +65,5 @@ assert_2.throws(() => {

new batch.ComputeEnvironment(stack, 'test-compute-env', {
managed: false,
computeResources: {
vpc,
vpc
},

@@ -72,3 +73,3 @@ });

});
test('should deny if creating an unmanged environment with no provided compute resource props', () => {
test('should deny if creating a managed environment with no provided compute resource props', () => {
// THEN

@@ -78,3 +79,3 @@ assert_2.throws(() => {

new batch.ComputeEnvironment(stack, 'test-compute-env', {
managed: false,
managed: true,
});

@@ -85,9 +86,10 @@ });

describe('using spot resources', () => {
test('should provide a spotfleet role if one is not given', () => {
test('should provide a spot fleet role if one is not given and allocationStrategy is BEST_FIT', () => {
// WHEN
new batch.ComputeEnvironment(stack, 'test-compute-env', {
managed: false,
managed: true,
computeResources: {
type: batch.ComputeResourceType.SPOT,
vpc,
allocationStrategy: batch.AllocationStrategy.BEST_FIT,
vpc
},

@@ -125,3 +127,3 @@ });

new batch.ComputeEnvironment(stack, 'test-compute-env', {
managed: false,
managed: true,
computeResources: {

@@ -140,3 +142,3 @@ vpc,

new batch.ComputeEnvironment(stack, 'test-compute-env', {
managed: false,
managed: true,
computeResources: {

@@ -156,5 +158,5 @@ vpc,

const props = {
allocationStrategy: batch.AllocationStrategy.BEST_FIT,
computeEnvironmentName: 'my-test-compute-env',
computeResources: {
allocationStrategy: batch.AllocationStrategy.BEST_FIT,
vpc,

@@ -168,5 +170,10 @@ computeResourcesTags: new cdk.Tag('foo', 'bar'),

}),
instanceRole: new iam.Role(stack, 'test-compute-env-instance-role', {
assumedBy: new iam.ServicePrincipal('batch.amazonaws.com'),
}),
instanceRole: new iam.CfnInstanceProfile(stack, 'Instance-Profile', {
roles: [new iam.Role(stack, 'Ecs-Instance-Role', {
assumedBy: new iam.ServicePrincipal('ec2.amazonaws.com'),
managedPolicies: [
iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AmazonEC2ContainerServiceforEC2Role')
]
}).roleName]
}).attrArn,
instanceTypes: [

@@ -189,3 +196,3 @@ ec2.InstanceType.of(ec2.InstanceClass.T2, ec2.InstanceSize.MICRO),

enabled: false,
managed: false,
managed: true,
};

@@ -213,3 +220,3 @@ new batch.ComputeEnvironment(stack, 'test-compute-env', props);

'Fn::GetAtt': [
props.computeResources.instanceRole ? `${props.computeResources.instanceRole.node.uniqueId}F3B86D94` : '',
props.computeResources.instanceRole ? "InstanceProfile" : '',
'Arn'

@@ -253,3 +260,3 @@ ]

new batch.ComputeEnvironment(stack, 'test-compute-env', {
managed: false,
managed: true,
computeResources: {

@@ -302,3 +309,3 @@ vpc,

new batch.ComputeEnvironment(stack, 'test-compute-env', {
managed: false,
managed: true,
computeResources: {

@@ -321,3 +328,3 @@ vpc,

new batch.ComputeEnvironment(stack, 'test-compute-env', {
managed: false,
managed: true,
computeResources: {

@@ -339,3 +346,3 @@ vpc,

new batch.ComputeEnvironment(stack, 'test-compute-env', {
managed: false,
managed: true,
computeResources: {

@@ -354,3 +361,3 @@ vpc,

new batch.ComputeEnvironment(stack, 'test-compute-env', {
managed: false,
managed: true,
computeResources: {

@@ -372,3 +379,3 @@ vpc,

new batch.ComputeEnvironment(stack, 'test-compute-env', {
managed: false,
managed: true,
computeResources: {

@@ -388,2 +395,2 @@ vpc,

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZS1lbnZpcm9ubWVudC50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tcHV0ZS1lbnZpcm9ubWVudC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNENBQXVGO0FBQ3ZGLGdDQUE4QjtBQUM5Qix3Q0FBd0M7QUFDeEMsd0NBQXdDO0FBQ3hDLHdDQUF3QztBQUN4QyxxQ0FBcUM7QUFDckMsbUNBQWdDO0FBQ2hDLGdDQUFnQztBQUVoQyxRQUFRLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO0lBQ3hDLElBQUksa0NBQXVDLENBQUM7SUFDNUMsSUFBSSxrQkFBdUIsQ0FBQztJQUU1QixJQUFJLEtBQWdCLENBQUM7SUFDckIsSUFBSSxHQUFZLENBQUM7SUFFakIsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLFFBQVE7UUFDUixLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEIsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFckMsa0JBQWtCLEdBQUc7WUFDbkIsV0FBVyxFQUFFO2dCQUNYLFlBQVksRUFBRTtvQkFDWixtREFBbUQ7b0JBQ25ELEtBQUs7aUJBQ047YUFDRjtTQUNGLENBQUM7UUFFRixrQ0FBa0MsR0FBRyxDQUFDLFNBQWMsRUFBRSxFQUFFO1lBQ3RELE9BQU87Z0JBQ0wsZ0JBQWdCLEVBQUU7b0JBQ2hCLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRO29CQUNyRCxZQUFZLEVBQUU7d0JBQ1osWUFBWSxFQUFFOzRCQUNaLDRDQUE0Qzs0QkFDNUMsS0FBSzt5QkFDTjtxQkFDRjtvQkFDRCxhQUFhLEVBQUU7d0JBQ2IsU0FBUztxQkFDVjtvQkFDRCxRQUFRLEVBQUUsR0FBRztvQkFDYixRQUFRLEVBQUUsQ0FBQztvQkFDWCxPQUFPLEVBQUU7d0JBQ1A7NEJBQ0UsR0FBRyxFQUFF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Q0FBQztZQUMvQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLHdCQUF3QixFQUFFLEdBQUcsRUFBRTtZQUN0QyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxFQUFFO2dCQUNqQyxPQUFPO2dCQUNQLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxrQkFBa0IsRUFBRTtvQkFDdEQsT0FBTyxFQUFFLEtBQUs7b0JBQ2QsZ0JBQWdCLEVBQUU7d0JBQ2hCLEdBQUc7cUJBQ0o7aUJBQ0YsQ0FBQyxDQUFDO2dCQUVILE9BQU87Z0JBQ1AsZUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyx5QkFBZ0IsQ0FBQyxnQ0FBZ0MsRUFBRTtvQkFDbEUsR0FBRyxrQ0FBa0MsQ0FBQzt3QkFDcEMsSUFBSSxFQUFFLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTO3FCQUMxQyxDQUFDO2lCQUNILEVBQUUscUJBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQy9CLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhwZWN0LCBoYXZlUmVzb3VyY2UsIGhhdmVSZXNvdXJjZUxpa2UsIFJlc291cmNlUGFydCB9IGZyb20gJ0Bhd3MtY2RrL2Fzc2VydCc7XG5pbXBvcnQgJ0Bhd3MtY2RrL2Fzc2VydC9qZXN0JztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdAYXdzLWNkay9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGVjcyBmcm9tICdAYXdzLWNkay9hd3MtZWNzJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdAYXdzLWNkay9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdAYXdzLWNkay9jb3JlJztcbmltcG9ydCB7IHRocm93cyB9IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgKiBhcyBiYXRjaCBmcm9tICcuLi9saWInO1xuXG5kZXNjcmliZSgnQmF0Y2ggQ29tcHV0ZSBFdmlyb25tZW50JywgKCkgPT4ge1xuICBsZXQgZXhwZWN0ZWRNYW5hZ2VkRGVmYXVsdENvbXB1dGVQcm9wczogYW55O1xuICBsZXQgZGVmYXVsdFNlcnZpY2VSb2xlOiBhbnk7XG5cbiAgbGV0IHN0YWNrOiBjZGsuU3RhY2s7XG4gIGxldCB2cGM6IGVjMi5WcGM7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBzdGFjayA9IG5ldyBjZGsuU3RhY2soKTtcbiAgICB2cGMgPSBuZXcgZWMyLlZwYyhzdGFjaywgJ3Rlc3QtdnBjJyk7XG5cbiAgICBkZWZhdWx0U2VydmljZVJvbGUgPSB7XG4gICAgICBTZXJ2aWNlUm9sZToge1xuICAgICAgICAnRm46OkdldEF0dCc6IFtcbiAgICAgICAgICAndGVzdGNvbXB1dGVlbnZSZXNvdXJjZVNlcnZpY2VJbnN0YW5jZVJvbGUxMDUwNjlBNScsXG4gICAgICAgICAgJ0FybidcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGV4cGVjdGVkTWFuYWdlZERlZmF1bHRDb21wdXRlUHJvcHMgPSAob3ZlcnJpZGVzOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIENvbXB1dGVSZXNvdXJjZXM6IHtcbiAgICAgICAgICBBbGxvY2F0aW9uU3RyYXRlZ3k6IGJhdGNoLkFsbG9jYXRpb25TdHJhdGVneS5CRVNUX0ZJVCxcbiAgICAgICAgICBJbnN0YW5jZVJvbGU6IHtcbiAgICAgICAgICAgICdGbjo6R2V0QXR0JzogW1xuICAgICAgICAgICAgICAndGVzdGNvbXB1dGVlbnZSZXNvdXJjZUluc3RhbmNlUm9sZTdGRDgxOUI5JyxcbiAgICAgICAgICAgICAgJ0FybidcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIEluc3RhbmNlVHlwZXM6IFtcbiAgICAgICAgICAgICdvcHRpbWFsJ1xuICAgICAgICAgIF0sXG4gICAgICAgICAgTWF4dkNwdXM6IDI1NixcbiAgICAgICAgICBNaW52Q3B1czogMCxcbiAgICAgICAgICBTdWJuZXRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFJlZjogJ3Rlc3R2cGNQcml2YXRlU3VibmV0MVN1Ym5ldDg2NUZCNTBBJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgUmVmOiAndGVzdHZwY1ByaXZhdGVTdWJuZXQyU3VibmV0MjNEMzM5NkYnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBUeXBlOiBiYXRjaC5Db21wdXRlUmVzb3VyY2VUeXBlLk9OX0RFTUFORCxcbiAgICAgICAgICAuLi5vdmVycmlkZXMsXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3doZW4gdmFsaWRhdGluZyBwcm9wcycsICgpID0+IHtcbiAgICB0ZXN0KCdzaG91bGQgZGVueSBzZXR0aW5nIGNvbXB1dGUgcmVzb3VyY2VzIHdoZW4gdXNpbmcgdHlwZSBtYW5hZ2VkJywgKCkgPT4ge1xuICAgICAgLy8gVEhFTlxuICAgICAgdGhyb3dzKCgpID0+IHtcbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBuZXcgYmF0Y2guQ29tcHV0ZUVudmlyb25tZW50KHN0YWNrLCAndGVzdC1jb21wdXRlLWVudicsIHtcbiAgICAgICAgICBjb21wdXRlUmVzb3VyY2VzOiB7XG4gICAgICAgICAgICB2cGMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3Nob3VsZCBkZW55IGlmIGNyZWF0aW5nIGFuIHVubWFuZ2VkIGVudmlyb25tZW50IHdpdGggbm8gcHJvdmlkZWQgY29tcHV0ZSByZXNvdXJjZSBwcm9wcycsICgpID0+IHtcbiAgICAgIC8vIFRIRU5cbiAgICAgIHRocm93cygoKSA9PiB7XG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgbmV3IGJhdGNoLkNvbXB1dGVFbnZpcm9ubWVudChzdGFjaywgJ3Rlc3QtY29tcHV0ZS1lbnYnLCB7XG4gICAgICAgICAgbWFuYWdlZDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd1c2luZyBzcG90IHJlc291cmNlcycsICgpID0+IHtcbiAgICB0ZXN0KCdzaG91bGQgcHJvdmlkZSBhIHNwb3RmbGVldCByb2xlIGlmIG9uZSBpcyBub3QgZ2l2ZW4nLCAoKSA9PiB7XG4gICAgICAvLyBXSEVOXG4gICAgICBuZXcgYmF0Y2guQ29tcHV0ZUVudmlyb25tZW50KHN0YWNrLCAndGVzdC1jb21wdXRlLWVudicsIHtcbiAgICAgICAgbWFuYWdlZDogZmFsc2UsXG4gICAgICAgIGNvbXB1dGVSZXNvdXJjZXM6IHtcbiAgICAgICAgICB0eXBlOiBiYXRjaC5Db21wdXRlUmVzb3VyY2VUeXBlLlNQT1QsXG4gICAgICAgICAgdnBjLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdChzdGFjaykudG8oaGF2ZVJlc291cmNlTGlrZSgnQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50Jywge1xuICAgICAgICBUeXBlOiAnTUFOQUdFRCcsXG4gICAgICAgIC4uLmV4cGVjdGVkTWFuYWdlZERlZmF1bHRDb21wdXRlUHJvcHMoe1xuICAgICAgICAgIFR5cGU6IGJhdGNoLkNvbXB1dGVSZXNvdXJjZVR5cGUuU1BPVCxcbiAgICAgICAgICBTcG90SWFtRmxlZXRSb2xlOiB7XG4gICAgICAgICAgICAnRm46OkpvaW4nOiBbXG4gICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgJ2FybicsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgUmVmOiAnQVdTOjpQYXJ0aXRpb24nXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnaWFtOjonLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIFJlZjogJ0FXUzo6QWNjb3VudElkJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJzpyb2xlL2F3cy1zZXJ2aWNlLXJvbGUvc3BvdGZsZWV0LmFtYXpvbmF3cy5jb20vQVdTU2VydmljZVJvbGVGb3JFQzJTcG90RmxlZXQnLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIH0sIFJlc291cmNlUGFydC5Qcm9wZXJ0aWVzKSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2l0aCBhIGJpZCBwZXJjZW50YWdlJywgKCkgPT4ge1xuICAgICAgdGVzdCgnc2hvdWxkIGRlbnkgbXkgYmlkIGlmIHNldCBiZWxvdyAwJywgKCkgPT4ge1xuICAgICAgICAvLyBUSEVOXG4gICAgICAgIHRocm93cygoKSA9PiB7XG4gICAgICAgICAgLy8gV0hFTlxuICAgICAgICAgIG5ldyBiYXRjaC5Db21wdXRlRW52aXJvbm1lbnQoc3RhY2ssICd0ZXN0LWNvbXB1dGUtZW52Jywge1xuICAgICAgICAgICAgbWFuYWdlZDogZmFsc2UsXG4gICAgICAgICAgICBjb21wdXRlUmVzb3VyY2VzOiB7XG4gICAgICAgICAgICAgIHZwYyxcbiAgICAgICAgICAgICAgdHlwZTogYmF0Y2guQ29tcHV0ZVJlc291cmNlVHlwZS5TUE9ULFxuICAgICAgICAgICAgICBiaWRQZXJjZW50YWdlOiAtMSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHRlc3QoJ3Nob3VsZCBkZW55IG15IGJpZCBpZiBhYm92ZSAxMDAnLCAoKSA9PiB7XG4gICAgICAgIC8vIFRIRU5cbiAgICAgICAgdGhyb3dzKCgpID0+IHtcbiAgICAgICAgICAvLyBXSEVOXG4gICAgICAgICAgbmV3IGJhdGNoLkNvbXB1dGVFbnZpcm9ubWVudChzdGFjaywgJ3Rlc3QtY29tcHV0ZS1lbnYnLCB7XG4gICAgICAgICAgICBtYW5hZ2VkOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbXB1dGVSZXNvdXJjZXM6IHtcbiAgICAgICAgICAgICAgdnBjLFxuICAgICAgICAgICAgICB0eXBlOiBiYXRjaC5Db21wdXRlUmVzb3VyY2VUeXBlLlNQT1QsXG4gICAgICAgICAgICAgIGJpZFBlcmNlbnRhZ2U6IDEwMSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd3aXRoIHByb3BlcnRpZXMgc3BlY2lmaWVkJywgKCkgPT4ge1xuICAgIHRlc3QoJ3JlbmRlcnMgdGhlIGNvcnJlY3QgY2xvdWRmb3JtYXRpb24gcHJvcGVydGllcycsICgpID0+IHtcbiAgICAgIC8vIFdIRU5cbiAgICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgICBhbGxvY2F0aW9uU3RyYXRlZ3k6IGJhdGNoLkFsbG9jYXRpb25TdHJhdGVneS5CRVNUX0ZJVCxcbiAgICAgICAgY29tcHV0ZUVudmlyb25tZW50TmFtZTogJ215LXRlc3QtY29tcHV0ZS1lbnYnLFxuICAgICAgICBjb21wdXRlUmVzb3VyY2VzOiB7XG4gICAgICAgICAgdnBjLFxuICAgICAgICAgIGNvbXB1dGVSZXNvdXJjZXNUYWdzOiBuZXcgY2RrLlRhZygnZm9vJywgJ2JhcicpLFxuICAgICAgICAgIGRlc2lyZWR2Q3B1czogMSxcbiAgICAgICAgICBlYzJLZXlQYWlyOiAnbXkta2V5LXBhaXInLFxuICAgICAgICAgIGltYWdlOiBuZXcgZWNzLkVjc09wdGltaXplZEFtaSh7XG4gICAgICAgICAgICBnZW5lcmF0aW9uOiBlYzIuQW1hem9uTGludXhHZW5lcmF0aW9uLkFNQVpPTl9MSU5VWF8yLFxuICAgICAgICAgICAgaGFyZHdhcmVUeXBlOiBlY3MuQW1pSGFyZHdhcmVUeXBlLlNUQU5EQVJELFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGluc3RhbmNlUm9sZTogbmV3IGlhbS5Sb2xlKHN0YWNrLCAndGVzdC1jb21wdXRlLWVudi1pbnN0YW5jZS1yb2xlJywge1xuICAgICAgICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2JhdGNoLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBpbnN0YW5jZVR5cGVzOiBbXG4gICAgICAgICAgICBlYzIuSW5zdGFuY2VUeXBlLm9mKGVjMi5JbnN0YW5jZUNsYXNzLlQyLCBlYzIuSW5zdGFuY2VTaXplLk1JQ1JPKSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIG1heHZDcHVzOiA0LFxuICAgICAgICAgIG1pbnZDcHVzOiAxLFxuICAgICAgICAgIHNlY3VyaXR5R3JvdXBzOiBbXG4gICAgICAgICAgICBuZXcgZWMyLlNlY3VyaXR5R3JvdXAoc3RhY2ssICd0ZXN0LXNnJywge1xuICAgICAgICAgICAgICB2cGMsXG4gICAgICAgICAgICAgIGFsbG93QWxsT3V0Ym91bmQ6IHRydWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHR5cGU6IGJhdGNoLkNvbXB1dGVSZXNvdXJjZVR5cGUuT05fREVNQU5ELFxuICAgICAgICAgIHZwY1N1Ym5ldHM6IHtcbiAgICAgICAgICAgIHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBSSVZBVEUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBiYXRjaC5Db21wdXRlUmVzb3VyY2VzLFxuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgbWFuYWdlZDogZmFsc2UsXG4gICAgICB9O1xuXG4gICAgICBuZXcgYmF0Y2guQ29tcHV0ZUVudmlyb25tZW50KHN0YWNrLCAndGVzdC1jb21wdXRlLWVudicsIHByb3BzKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KHN0YWNrKS50byhoYXZlUmVzb3VyY2VMaWtlKCdBV1M6OkJhdGNoOjpDb21wdXRlRW52aXJvbm1lbnQnLCB7XG4gICAgICAgIENvbXB1dGVFbnZpcm9ubWVudE5hbWU6ICdteS10ZXN0LWNvbXB1dGUtZW52JyxcbiAgICAgICAgVHlwZTogJ01BTkFHRUQnLFxuICAgICAgICBTdGF0ZTogJ0RJU0FCTEVEJyxcbiAgICAgICAgU2VydmljZVJvbGU6IHtcbiAgICAgICAgICAnRm46OkdldEF0dCc6IFtcbiAgICAgICAgICAgICd0ZXN0Y29tcHV0ZWVudlJlc291cmNlU2VydmljZUluc3RhbmNlUm9sZTEwNTA2OUE1JyxcbiAgICAgICAgICAgICdBcm4nXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgQ29tcHV0ZVJlc291cmNlczoge1xuICAgICAgICAgIEFsbG9jYXRpb25TdHJhdGVneTogYmF0Y2guQWxsb2NhdGlvblN0cmF0ZWd5LkJFU1RfRklULFxuICAgICAgICAgIERlc2lyZWR2Q3B1czogcHJvcHMuY29tcHV0ZVJlc291cmNlcy5kZXNpcmVkdkNwdXMsXG4gICAgICAgICAgRWMyS2V5UGFpcjogcHJvcHMuY29tcHV0ZVJlc291cmNlcy5lYzJLZXlQYWlyLFxuICAgICAgICAgIEltYWdlSWQ6IHtcbiAgICAgICAgICAgIFJlZjogJ1NzbVBhcmFtZXRlclZhbHVlYXdzc2VydmljZWVjc29wdGltaXplZGFtaWFtYXpvbmxpbnV4MnJlY29tbWVuZGVkaW1hZ2VpZEM5NjU4NEI2RjAwQTQ2NEVBRDE5NTNBRkY0QjA1MTE4UGFyYW1ldGVyJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgSW5zdGFuY2VSb2xlOiB7XG4gICAgICAgICAgICAnRm46OkdldEF0dCc6IFtcbiAgICAgICAgICAgICAgcHJvcHMuY29tcHV0ZVJlc291cmNlcy5pbnN0YW5jZVJvbGUgPyBgJHtwcm9wcy5jb21wdXRlUmVzb3VyY2VzLmluc3RhbmNlUm9sZS5ub2RlLnVuaXF1ZUlkfUYzQjg2RDk0YCA6ICcnLFxuICAgICAgICAgICAgICAnQXJuJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgSW5zdGFuY2VUeXBlczogW1xuICAgICAgICAgICAgcHJvcHMuY29tcHV0ZVJlc291cmNlcy5pbnN0YW5jZVR5cGVzID8gcHJvcHMuY29tcHV0ZVJlc291cmNlcy5pbnN0YW5jZVR5cGVzWzBdLnRvU3RyaW5nKCkgOiAnJyxcbiAgICAgICAgICBdLFxuICAgICAgICAgIE1heHZDcHVzOiBwcm9wcy5jb21wdXRlUmVzb3VyY2VzLm1heHZDcHVzLFxuICAgICAgICAgIE1pbnZDcHVzOiBwcm9wcy5jb21wdXRlUmVzb3VyY2VzLm1pbnZDcHVzLFxuICAgICAgICAgIFNlY3VyaXR5R3JvdXBJZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgJ0ZuOjpHZXRBdHQnOiBbXG4gICAgICAgICAgICAgICAgJ3Rlc3RzZzg3MkVCNDhBJyxcbiAgICAgICAgICAgICAgICAnR3JvdXBJZCdcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgU3VibmV0czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBSZWY6IGAke3ZwYy5ub2RlLnVuaXF1ZUlkfVByaXZhdGVTdWJuZXQxU3VibmV0ODY1RkI1MEFgXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBSZWY6IGAke3ZwYy5ub2RlLnVuaXF1ZUlkfVByaXZhdGVTdWJuZXQyU3VibmV0MjNEMzM5NkZgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBUYWdzOiB7XG4gICAgICAgICAgICBrZXk6ICdmb28nLFxuICAgICAgICAgICAgcHJvcHM6IHt9LFxuICAgICAgICAgICAgZGVmYXVsdFByaW9yaXR5OiAxMDAsXG4gICAgICAgICAgICB2YWx1ZTogJ2JhcidcbiAgICAgICAgICB9LFxuICAgICAgICAgIFR5cGU6ICdFQzInXG4gICAgICAgIH0sXG4gICAgICB9LCBSZXNvdXJjZVBhcnQuUHJvcGVydGllcykpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3dpdGggbm8gYWxsb2NhdGlvbiBzdHJhdGVneSBzcGVjaWZpZWQnLCAoKSA9PiB7XG4gICAgICB0ZXN0KCdzaG91bGQgZGVmYXVsdCB0byBhIGJlc3RfZml0IHN0cmF0ZWd5JywgKCkgPT4ge1xuICAgICAgICAvLyBXSEVOXG4gICAgICAgIG5ldyBiYXRjaC5Db21wdXRlRW52aXJvbm1lbnQoc3RhY2ssICd0ZXN0LWNvbXB1dGUtZW52Jywge1xuICAgICAgICAgIG1hbmFnZWQ6IGZhbHNlLFxuICAgICAgICAgIGNvbXB1dGVSZXNvdXJjZXM6IHtcbiAgICAgICAgICAgIHZwYyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBUSEVOXG4gICAgICAgIGV4cGVjdChzdGFjaykudG8oaGF2ZVJlc291cmNlTGlrZSgnQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50Jywge1xuICAgICAgICAgIFR5cGU6ICdNQU5BR0VEJyxcbiAgICAgICAgICBTZXJ2aWNlUm9sZToge1xuICAgICAgICAgICAgJ0ZuOjpHZXRBdHQnOiBbXG4gICAgICAgICAgICAgICd0ZXN0Y29tcHV0ZWVudlJlc291cmNlU2VydmljZUluc3RhbmNlUm9sZTEwNTA2OUE1JyxcbiAgICAgICAgICAgICAgJ0FybidcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSwgUmVzb3VyY2VQYXJ0LlByb3BlcnRpZXMpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3dpdGggYSBtaW4gdmNwdSB2YWx1ZScsICgpID0+IHtcbiAgICAgIHRlc3QoJ3Nob3VsZCBkZW55IGxlc3MgdGhhbiAwJywgKCkgPT4ge1xuICAgICAgICAvLyBUSEVOXG4gICAgICAgIHRocm93cygoKSA9PiB7XG4gICAgICAgICAgLy8gV0hFTlxuICAgICAgICAgIG5ldyBiYXRjaC5Db21wdXRlRW52aXJvbm1lbnQoc3RhY2ssICd0ZXN0LWNvbXB1dGUtZW52Jywge1xuICAgICAgICAgICAgY29tcHV0ZVJlc291cmNlczoge1xuICAgICAgICAgICAgICB2cGMsXG4gICAgICAgICAgICAgIG1pbnZDcHVzOiAtMSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHRlc3QoJ2Nhbm5vdCBiZSBncmVhdGVyIHRoYW4gdGhlIG1heCB2Y3B1IHZhbHVlJywgKCkgPT4ge1xuICAgICAgICAvLyBUSEVOXG4gICAgICAgIHRocm93cygoKSA9PiB7XG4gICAgICAgICAgLy8gV0hFTlxuICAgICAgICAgIG5ldyBiYXRjaC5Db21wdXRlRW52aXJvbm1lbnQoc3RhY2ssICd0ZXN0LWNvbXB1dGUtZW52Jywge1xuICAgICAgICAgICAgY29tcHV0ZVJlc291cmNlczoge1xuICAgICAgICAgICAgICB2cGMsXG4gICAgICAgICAgICAgIG1pbnZDcHVzOiAyLFxuICAgICAgICAgICAgICBtYXh2Q3B1czogMSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2l0aCBubyBtaW4gdmNwdSB2YWx1ZSBwcm92aWRlZCcsICgpID0+IHtcbiAgICAgIHRlc3QoJ3Nob3VsZCBkZWZhdWx0IHRvIDAnLCAoKSA9PiB7XG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgbmV3IGJhdGNoLkNvbXB1dGVFbnZpcm9ubWVudChzdGFjaywgJ3Rlc3QtY29tcHV0ZS1lbnYnLCB7XG4gICAgICAgICAgbWFuYWdlZDogZmFsc2UsXG4gICAgICAgICAgY29tcHV0ZVJlc291cmNlczoge1xuICAgICAgICAgICAgdnBjLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFRIRU5cbiAgICAgICAgZXhwZWN0KHN0YWNrKS50byhoYXZlUmVzb3VyY2VMaWtlKCdBV1M6OkJhdGNoOjpDb21wdXRlRW52aXJvbm1lbnQnLCB7XG4gICAgICAgICAgLi4uZGVmYXVsdFNlcnZpY2VSb2xlLFxuICAgICAgICAgIC4uLmV4cGVjdGVkTWFuYWdlZERlZmF1bHRDb21wdXRlUHJvcHMoe1xuICAgICAgICAgICAgTWludkNwdXM6IDAsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sIFJlc291cmNlUGFydC5Qcm9wZXJ0aWVzKSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aXRoIG5vIG1heCB2Y3B1IHZhbHVlIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgdGVzdCgnc2hvdWxkIGRlZmF1bHQgdG8gMjU2JywgKCkgPT4ge1xuICAgICAgICAvLyBXSEVOXG4gICAgICAgIG5ldyBiYXRjaC5Db21wdXRlRW52aXJvbm1lbnQoc3RhY2ssICd0ZXN0LWNvbXB1dGUtZW52Jywge1xuICAgICAgICAgIG1hbmFnZWQ6IGZhbHNlLFxuICAgICAgICAgIGNvbXB1dGVSZXNvdXJjZXM6IHtcbiAgICAgICAgICAgIHZwYyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBUSEVOXG4gICAgICAgIGV4cGVjdChzdGFjaykudG8oaGF2ZVJlc291cmNlTGlrZSgnQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50Jywge1xuICAgICAgICAgIC4uLmV4cGVjdGVkTWFuYWdlZERlZmF1bHRDb21wdXRlUHJvcHMoe1xuICAgICAgICAgICAgTWF4dkNwdXM6IDI1NixcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSwgUmVzb3VyY2VQYXJ0LlByb3BlcnRpZXMpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3dpdGggbm8gaW5zdGFuY2Ugcm9sZSBzcGVjaWZpZWQnLCAoKSA9PiB7XG4gICAgICB0ZXN0KCdzaG91bGQgZ2VuZXJhdGUgYSByb2xlIGZvciBtZScsICgpID0+IHtcbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBuZXcgYmF0Y2guQ29tcHV0ZUVudmlyb25tZW50KHN0YWNrLCAndGVzdC1jb21wdXRlLWVudicsIHtcbiAgICAgICAgICBtYW5hZ2VkOiBmYWxzZSxcbiAgICAgICAgICBjb21wdXRlUmVzb3VyY2VzOiB7XG4gICAgICAgICAgICB2cGMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gVEhFTlxuICAgICAgICBleHBlY3Qoc3RhY2spLnRvKGhhdmVSZXNvdXJjZSgnQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50JykpO1xuICAgICAgICBleHBlY3Qoc3RhY2spLnRvKGhhdmVSZXNvdXJjZSgnQVdTOjpJQU06OlJvbGUnKSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aXRoIG5vIGluc3RhbmNlIHR5cGUgZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIHRlc3QoJ3Nob3VsZCBkZWZhdWx0IHRvIG9wdGltYWwgbWF0Y2hpbmcnLCAoKSA9PiB7XG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgbmV3IGJhdGNoLkNvbXB1dGVFbnZpcm9ubWVudChzdGFjaywgJ3Rlc3QtY29tcHV0ZS1lbnYnLCB7XG4gICAgICAgICAgbWFuYWdlZDogZmFsc2UsXG4gICAgICAgICAgY29tcHV0ZVJlc291cmNlczoge1xuICAgICAgICAgICAgdnBjLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFRIRU5cbiAgICAgICAgZXhwZWN0KHN0YWNrKS50byhoYXZlUmVzb3VyY2VMaWtlKCdBV1M6OkJhdGNoOjpDb21wdXRlRW52aXJvbm1lbnQnLCB7XG4gICAgICAgICAgLi4uZXhwZWN0ZWRNYW5hZ2VkRGVmYXVsdENvbXB1dGVQcm9wcyh7XG4gICAgICAgICAgICBJbnN0YW5jZVR5cGVzOiBbICdvcHRpbWFsJyBdLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LCBSZXNvdXJjZVBhcnQuUHJvcGVydGllcykpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2l0aCBubyB0eXBlIHNwZWNpZmllZCcsICgpID0+IHtcbiAgICAgIHRlc3QoJ3Nob3VsZCBkZWZhdWx0IHRvIEVDMicsICgpID0+IHtcbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBuZXcgYmF0Y2guQ29tcHV0ZUVudmlyb25tZW50KHN0YWNrLCAndGVzdC1jb21wdXRlLWVudicsIHtcbiAgICAgICAgICBtYW5hZ2VkOiBmYWxzZSxcbiAgICAgICAgICBjb21wdXRlUmVzb3VyY2VzOiB7XG4gICAgICAgICAgICB2cGMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gVEhFTlxuICAgICAgICBleHBlY3Qoc3RhY2spLnRvKGhhdmVSZXNvdXJjZUxpa2UoJ0FXUzo6QmF0Y2g6OkNvbXB1dGVFbnZpcm9ubWVudCcsIHtcbiAgICAgICAgICAuLi5leHBlY3RlZE1hbmFnZWREZWZhdWx0Q29tcHV0ZVByb3BzKHtcbiAgICAgICAgICAgIFR5cGU6IGJhdGNoLkNvbXB1dGVSZXNvdXJjZVR5cGUuT05fREVNQU5ELFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LCBSZXNvdXJjZVBhcnQuUHJvcGVydGllcykpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZS1lbnZpcm9ubWVudC50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tcHV0ZS1lbnZpcm9ubWVudC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNENBQXFGO0FBQ3JGLGdDQUE4QjtBQUM5Qix3Q0FBd0M7QUFDeEMsd0NBQXdDO0FBQ3hDLHdDQUF3QztBQUN4QyxxQ0FBcUM7QUFDckMsbUNBQThCO0FBQzlCLGdDQUFnQztBQUVoQyxRQUFRLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO0lBQ3hDLElBQUksa0NBQXVDLENBQUM7SUFDNUMsSUFBSSxrQkFBdUIsQ0FBQztJQUU1QixJQUFJLEtBQWdCLENBQUM7SUFDckIsSUFBSSxHQUFZLENBQUM7SUFFakIsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLFFBQVE7UUFDUixLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEIsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFckMsa0JBQWtCLEdBQUc7WUFDbkIsV0FBVyxFQUFFO2dCQUNYLFlBQVksRUFBRTtvQkFDWixtREFBbUQ7b0JBQ25ELEtBQUs7aUJBQ047YUFDRjtTQUNGLENBQUM7UUFFRixrQ0FBa0MsR0FBRyxDQUFDLFNBQWMsRUFBRSxFQUFFO1lBQ3RELE9BQU87Z0JBQ0wsZ0JBQWdCLEVBQUU7b0JBQ2hCLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRO29CQUNyRCxZQUFZLEVBQUU7d0JBQ1osWUFBWSxFQUFFOzRCQUNaLHVDQUF1Qzs0QkFDdkMsS0FBSzt5QkFDTjtxQkFDRjtvQkFDRCxhQUFhLEVBQUU7d0JBQ2IsU0FBUztxQkFDVjtvQkFDRCxRQUFRLEVBQUUsR0FBRztvQkFDYixRQUFRLEVBQUUsQ0FBQztvQkFDWCxPQUFPLEVBQUU7d0JBQ1A7NEJBQ0UsR0FBRyxFQUFF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aUJBQ0YsQ0FBQyxDQUFDO2dCQUVILE9BQU87Z0JBQ1AsZUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyx5QkFBZ0IsQ0FBQyxnQ0FBZ0MsRUFBRTtvQkFDbEUsR0FBRyxrQ0FBa0MsQ0FBQzt3QkFDcEMsYUFBYSxFQUFFLENBQUUsU0FBUyxDQUFFO3FCQUM3QixDQUFDO2lCQUNILEVBQUUscUJBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQy9CLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFO1lBQ3RDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLEVBQUU7Z0JBQ2pDLE9BQU87Z0JBQ1AsSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLGtCQUFrQixFQUFFO29CQUN0RCxPQUFPLEVBQUUsSUFBSTtvQkFDYixnQkFBZ0IsRUFBRTt3QkFDaEIsR0FBRztxQkFDSjtpQkFDRixDQUFDLENBQUM7Z0JBRUgsT0FBTztnQkFDUCxlQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLHlCQUFnQixDQUFDLGdDQUFnQyxFQUFFO29CQUNsRSxHQUFHLGtDQUFrQyxDQUFDO3dCQUNwQyxJQUFJLEVBQUUsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFNBQVM7cUJBQzFDLENBQUM7aUJBQ0gsRUFBRSxxQkFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2V4cGVjdCwgaGF2ZVJlc291cmNlLCBoYXZlUmVzb3VyY2VMaWtlLCBSZXNvdXJjZVBhcnR9IGZyb20gJ0Bhd3MtY2RrL2Fzc2VydCc7XG5pbXBvcnQgJ0Bhd3MtY2RrL2Fzc2VydC9qZXN0JztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdAYXdzLWNkay9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGVjcyBmcm9tICdAYXdzLWNkay9hd3MtZWNzJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdAYXdzLWNkay9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdAYXdzLWNkay9jb3JlJztcbmltcG9ydCB7dGhyb3dzfSBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgYmF0Y2ggZnJvbSBcIi4uL2xpYlwiO1xuXG5kZXNjcmliZSgnQmF0Y2ggQ29tcHV0ZSBFdmlyb25tZW50JywgKCkgPT4ge1xuICBsZXQgZXhwZWN0ZWRNYW5hZ2VkRGVmYXVsdENvbXB1dGVQcm9wczogYW55O1xuICBsZXQgZGVmYXVsdFNlcnZpY2VSb2xlOiBhbnk7XG5cbiAgbGV0IHN0YWNrOiBjZGsuU3RhY2s7XG4gIGxldCB2cGM6IGVjMi5WcGM7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBzdGFjayA9IG5ldyBjZGsuU3RhY2soKTtcbiAgICB2cGMgPSBuZXcgZWMyLlZwYyhzdGFjaywgJ3Rlc3QtdnBjJyk7XG5cbiAgICBkZWZhdWx0U2VydmljZVJvbGUgPSB7XG4gICAgICBTZXJ2aWNlUm9sZToge1xuICAgICAgICAnRm46OkdldEF0dCc6IFtcbiAgICAgICAgICAndGVzdGNvbXB1dGVlbnZSZXNvdXJjZVNlcnZpY2VJbnN0YW5jZVJvbGUxMDUwNjlBNScsXG4gICAgICAgICAgJ0FybidcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGV4cGVjdGVkTWFuYWdlZERlZmF1bHRDb21wdXRlUHJvcHMgPSAob3ZlcnJpZGVzOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIENvbXB1dGVSZXNvdXJjZXM6IHtcbiAgICAgICAgICBBbGxvY2F0aW9uU3RyYXRlZ3k6IGJhdGNoLkFsbG9jYXRpb25TdHJhdGVneS5CRVNUX0ZJVCxcbiAgICAgICAgICBJbnN0YW5jZVJvbGU6IHtcbiAgICAgICAgICAgICdGbjo6R2V0QXR0JzogW1xuICAgICAgICAgICAgICAndGVzdGNvbXB1dGVlbnZJbnN0YW5jZVByb2ZpbGVDQkQ4N0VBQicsXG4gICAgICAgICAgICAgICdBcm4nXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBJbnN0YW5jZVR5cGVzOiBbXG4gICAgICAgICAgICAnb3B0aW1hbCdcbiAgICAgICAgICBdLFxuICAgICAgICAgIE1heHZDcHVzOiAyNTYsXG4gICAgICAgICAgTWludkNwdXM6IDAsXG4gICAgICAgICAgU3VibmV0czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBSZWY6ICd0ZXN0dnBjUHJpdmF0ZVN1Ym5ldDFTdWJuZXQ4NjVGQjUwQSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFJlZjogJ3Rlc3R2cGNQcml2YXRlU3VibmV0MlN1Ym5ldDIzRDMzOTZGJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgVHlwZTogYmF0Y2guQ29tcHV0ZVJlc291cmNlVHlwZS5PTl9ERU1BTkQsXG4gICAgICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd3aGVuIHZhbGlkYXRpbmcgcHJvcHMnLCAoKSA9PiB7XG4gICAgdGVzdCgnc2hvdWxkIGRlbnkgc2V0dGluZyBjb21wdXRlIHJlc291cmNlcyB3aGVuIHVzaW5nIHR5cGUgdW5tYW5hZ2VkJywgKCkgPT4ge1xuICAgICAgLy8gVEhFTlxuICAgICAgdGhyb3dzKCgpID0+IHtcbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBuZXcgYmF0Y2guQ29tcHV0ZUVudmlyb25tZW50KHN0YWNrLCAndGVzdC1jb21wdXRlLWVudicsIHtcbiAgICAgICAgICBtYW5hZ2VkOiBmYWxzZSxcbiAgICAgICAgICBjb21wdXRlUmVzb3VyY2VzOiB7XG4gICAgICAgICAgICB2cGNcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnc2hvdWxkIGRlbnkgaWYgY3JlYXRpbmcgYSBtYW5hZ2VkIGVudmlyb25tZW50IHdpdGggbm8gcHJvdmlkZWQgY29tcHV0ZSByZXNvdXJjZSBwcm9wcycsICgpID0+IHtcbiAgICAgIC8vIFRIRU5cbiAgICAgIHRocm93cygoKSA9PiB7XG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgbmV3IGJhdGNoLkNvbXB1dGVFbnZpcm9ubWVudChzdGFjaywgJ3Rlc3QtY29tcHV0ZS1lbnYnLCB7XG4gICAgICAgICAgbWFuYWdlZDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3VzaW5nIHNwb3QgcmVzb3VyY2VzJywgKCkgPT4ge1xuICAgIHRlc3QoJ3Nob3VsZCBwcm92aWRlIGEgc3BvdCBmbGVldCByb2xlIGlmIG9uZSBpcyBub3QgZ2l2ZW4gYW5kIGFsbG9jYXRpb25TdHJhdGVneSBpcyBCRVNUX0ZJVCcsICgpID0+IHtcbiAgICAgIC8vIFdIRU5cbiAgICAgIG5ldyBiYXRjaC5Db21wdXRlRW52aXJvbm1lbnQoc3RhY2ssICd0ZXN0LWNvbXB1dGUtZW52Jywge1xuICAgICAgICBtYW5hZ2VkOiB0cnVlLFxuICAgICAgICBjb21wdXRlUmVzb3VyY2VzOiB7XG4gICAgICAgICAgdHlwZTogYmF0Y2guQ29tcHV0ZVJlc291cmNlVHlwZS5TUE9ULFxuICAgICAgICAgIGFsbG9jYXRpb25TdHJhdGVneTogYmF0Y2guQWxsb2NhdGlvblN0cmF0ZWd5LkJFU1RfRklULFxuICAgICAgICAgIHZwY1xuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdChzdGFjaykudG8oaGF2ZVJlc291cmNlTGlrZSgnQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50Jywge1xuICAgICAgICBUeXBlOiAnTUFOQUdFRCcsXG4gICAgICAgIC4uLmV4cGVjdGVkTWFuYWdlZERlZmF1bHRDb21wdXRlUHJvcHMoe1xuICAgICAgICAgIFR5cGU6IGJhdGNoLkNvbXB1dGVSZXNvdXJjZVR5cGUuU1BPVCxcbiAgICAgICAgICBTcG90SWFtRmxlZXRSb2xlOiB7XG4gICAgICAgICAgICAnRm46OkpvaW4nOiBbXG4gICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgJ2FybicsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgUmVmOiAnQVdTOjpQYXJ0aXRpb24nXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnaWFtOjonLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIFJlZjogJ0FXUzo6QWNjb3VudElkJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJzpyb2xlL2F3cy1zZXJ2aWNlLXJvbGUvc3BvdGZsZWV0LmFtYXpvbmF3cy5jb20vQVdTU2VydmljZVJvbGVGb3JFQzJTcG90RmxlZXQnLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIH0sIFJlc291cmNlUGFydC5Qcm9wZXJ0aWVzKSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2l0aCBhIGJpZCBwZXJjZW50YWdlJywgKCkgPT4ge1xuICAgICAgdGVzdCgnc2hvdWxkIGRlbnkgbXkgYmlkIGlmIHNldCBiZWxvdyAwJywgKCkgPT4ge1xuICAgICAgICAvLyBUSEVOXG4gICAgICAgIHRocm93cygoKSA9PiB7XG4gICAgICAgICAgLy8gV0hFTlxuICAgICAgICAgIG5ldyBiYXRjaC5Db21wdXRlRW52aXJvbm1lbnQoc3RhY2ssICd0ZXN0LWNvbXB1dGUtZW52Jywge1xuICAgICAgICAgICAgbWFuYWdlZDogdHJ1ZSxcbiAgICAgICAgICAgIGNvbXB1dGVSZXNvdXJjZXM6IHtcbiAgICAgICAgICAgICAgdnBjLFxuICAgICAgICAgICAgICB0eXBlOiBiYXRjaC5Db21wdXRlUmVzb3VyY2VUeXBlLlNQT1QsXG4gICAgICAgICAgICAgIGJpZFBlcmNlbnRhZ2U6IC0xLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgdGVzdCgnc2hvdWxkIGRlbnkgbXkgYmlkIGlmIGFib3ZlIDEwMCcsICgpID0+IHtcbiAgICAgICAgLy8gVEhFTlxuICAgICAgICB0aHJvd3MoKCkgPT4ge1xuICAgICAgICAgIC8vIFdIRU5cbiAgICAgICAgICBuZXcgYmF0Y2guQ29tcHV0ZUVudmlyb25tZW50KHN0YWNrLCAndGVzdC1jb21wdXRlLWVudicsIHtcbiAgICAgICAgICAgIG1hbmFnZWQ6IHRydWUsXG4gICAgICAgICAgICBjb21wdXRlUmVzb3VyY2VzOiB7XG4gICAgICAgICAgICAgIHZwYyxcbiAgICAgICAgICAgICAgdHlwZTogYmF0Y2guQ29tcHV0ZVJlc291cmNlVHlwZS5TUE9ULFxuICAgICAgICAgICAgICBiaWRQZXJjZW50YWdlOiAxMDEsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnd2l0aCBwcm9wZXJ0aWVzIHNwZWNpZmllZCcsICgpID0+IHtcbiAgICB0ZXN0KCdyZW5kZXJzIHRoZSBjb3JyZWN0IGNsb3VkZm9ybWF0aW9uIHByb3BlcnRpZXMnLCAoKSA9PiB7XG4gICAgICAvLyBXSEVOXG4gICAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgICAgY29tcHV0ZUVudmlyb25tZW50TmFtZTogJ215LXRlc3QtY29tcHV0ZS1lbnYnLFxuICAgICAgICBjb21wdXRlUmVzb3VyY2VzOiB7XG4gICAgICAgICAgYWxsb2NhdGlvblN0cmF0ZWd5OiBiYXRjaC5BbGxvY2F0aW9uU3RyYXRlZ3kuQkVTVF9GSVQsXG4gICAgICAgICAgdnBjLFxuICAgICAgICAgIGNvbXB1dGVSZXNvdXJjZXNUYWdzOiBuZXcgY2RrLlRhZygnZm9vJywgJ2JhcicpLFxuICAgICAgICAgIGRlc2lyZWR2Q3B1czogMSxcbiAgICAgICAgICBlYzJLZXlQYWlyOiAnbXkta2V5LXBhaXInLFxuICAgICAgICAgIGltYWdlOiBuZXcgZWNzLkVjc09wdGltaXplZEFtaSh7XG4gICAgICAgICAgICBnZW5lcmF0aW9uOiBlYzIuQW1hem9uTGludXhHZW5lcmF0aW9uLkFNQVpPTl9MSU5VWF8yLFxuICAgICAgICAgICAgaGFyZHdhcmVUeXBlOiBlY3MuQW1pSGFyZHdhcmVUeXBlLlNUQU5EQVJELFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGluc3RhbmNlUm9sZTogIG5ldyBpYW0uQ2ZuSW5zdGFuY2VQcm9maWxlKHN0YWNrLCAnSW5zdGFuY2UtUHJvZmlsZScsIHtcbiAgICAgICAgICAgIHJvbGVzOiBbIG5ldyBpYW0uUm9sZShzdGFjaywgJ0Vjcy1JbnN0YW5jZS1Sb2xlJywge1xuICAgICAgICAgICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnZWMyLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgICAgICAgICAgbWFuYWdlZFBvbGljaWVzOiBbXG4gICAgICAgICAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdzZXJ2aWNlLXJvbGUvQW1hem9uRUMyQ29udGFpbmVyU2VydmljZWZvckVDMlJvbGUnKVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KS5yb2xlTmFtZV1cbiAgICAgICAgICB9KS5hdHRyQXJuLFxuICAgICAgICAgIGluc3RhbmNlVHlwZXM6IFtcbiAgICAgICAgICAgIGVjMi5JbnN0YW5jZVR5cGUub2YoZWMyLkluc3RhbmNlQ2xhc3MuVDIsIGVjMi5JbnN0YW5jZVNpemUuTUlDUk8pLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgbWF4dkNwdXM6IDQsXG4gICAgICAgICAgbWludkNwdXM6IDEsXG4gICAgICAgICAgc2VjdXJpdHlHcm91cHM6IFtcbiAgICAgICAgICAgIG5ldyBlYzIuU2VjdXJpdHlHcm91cChzdGFjaywgJ3Rlc3Qtc2cnLCB7XG4gICAgICAgICAgICAgIHZwYyxcbiAgICAgICAgICAgICAgYWxsb3dBbGxPdXRib3VuZDogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgdHlwZTogYmF0Y2guQ29tcHV0ZVJlc291cmNlVHlwZS5PTl9ERU1BTkQsXG4gICAgICAgICAgdnBjU3VibmV0czoge1xuICAgICAgICAgICAgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFJJVkFURSxcbiAgICAgICAgICB9LFxuICAgICAgICB9IGFzIGJhdGNoLkNvbXB1dGVSZXNvdXJjZXMsXG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBtYW5hZ2VkOiB0cnVlLFxuICAgICAgfTtcblxuICAgICAgbmV3IGJhdGNoLkNvbXB1dGVFbnZpcm9ubWVudChzdGFjaywgJ3Rlc3QtY29tcHV0ZS1lbnYnLCBwcm9wcyk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdChzdGFjaykudG8oaGF2ZVJlc291cmNlTGlrZSgnQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50Jywge1xuICAgICAgICBDb21wdXRlRW52aXJvbm1lbnROYW1lOiAnbXktdGVzdC1jb21wdXRlLWVudicsXG4gICAgICAgIFR5cGU6ICdNQU5BR0VEJyxcbiAgICAgICAgU3RhdGU6ICdESVNBQkxFRCcsXG4gICAgICAgIFNlcnZpY2VSb2xlOiB7XG4gICAgICAgICAgJ0ZuOjpHZXRBdHQnOiBbXG4gICAgICAgICAgICAndGVzdGNvbXB1dGVlbnZSZXNvdXJjZVNlcnZpY2VJbnN0YW5jZVJvbGUxMDUwNjlBNScsXG4gICAgICAgICAgICAnQXJuJ1xuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIENvbXB1dGVSZXNvdXJjZXM6IHtcbiAgICAgICAgICBBbGxvY2F0aW9uU3RyYXRlZ3k6IGJhdGNoLkFsbG9jYXRpb25TdHJhdGVneS5CRVNUX0ZJVCxcbiAgICAgICAgICBEZXNpcmVkdkNwdXM6IHByb3BzLmNvbXB1dGVSZXNvdXJjZXMuZGVzaXJlZHZDcHVzLFxuICAgICAgICAgIEVjMktleVBhaXI6IHByb3BzLmNvbXB1dGVSZXNvdXJjZXMuZWMyS2V5UGFpcixcbiAgICAgICAgICBJbWFnZUlkOiB7XG4gICAgICAgICAgICBSZWY6ICdTc21QYXJhbWV0ZXJWYWx1ZWF3c3NlcnZpY2VlY3NvcHRpbWl6ZWRhbWlhbWF6b25saW51eDJyZWNvbW1lbmRlZGltYWdlaWRDOTY1ODRCNkYwMEE0NjRFQUQxOTUzQUZGNEIwNTExOFBhcmFtZXRlcidcbiAgICAgICAgICB9LFxuICAgICAgICAgIEluc3RhbmNlUm9sZToge1xuICAgICAgICAgICAgJ0ZuOjpHZXRBdHQnOiBbXG4gICAgICAgICAgICAgIHByb3BzLmNvbXB1dGVSZXNvdXJjZXMuaW5zdGFuY2VSb2xlID8gXCJJbnN0YW5jZVByb2ZpbGVcIiA6ICcnLFxuICAgICAgICAgICAgICAnQXJuJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgSW5zdGFuY2VUeXBlczogW1xuICAgICAgICAgICAgcHJvcHMuY29tcHV0ZVJlc291cmNlcy5pbnN0YW5jZVR5cGVzID8gcHJvcHMuY29tcHV0ZVJlc291cmNlcy5pbnN0YW5jZVR5cGVzWzBdLnRvU3RyaW5nKCkgOiAnJyxcbiAgICAgICAgICBdLFxuICAgICAgICAgIE1heHZDcHVzOiBwcm9wcy5jb21wdXRlUmVzb3VyY2VzLm1heHZDcHVzLFxuICAgICAgICAgIE1pbnZDcHVzOiBwcm9wcy5jb21wdXRlUmVzb3VyY2VzLm1pbnZDcHVzLFxuICAgICAgICAgIFNlY3VyaXR5R3JvdXBJZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgJ0ZuOjpHZXRBdHQnOiBbXG4gICAgICAgICAgICAgICAgJ3Rlc3RzZzg3MkVCNDhBJyxcbiAgICAgICAgICAgICAgICAnR3JvdXBJZCdcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgU3VibmV0czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBSZWY6IGAke3ZwYy5ub2RlLnVuaXF1ZUlkfVByaXZhdGVTdWJuZXQxU3VibmV0ODY1RkI1MEFgXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBSZWY6IGAke3ZwYy5ub2RlLnVuaXF1ZUlkfVByaXZhdGVTdWJuZXQyU3VibmV0MjNEMzM5NkZgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBUYWdzOiB7XG4gICAgICAgICAgICBrZXk6ICdmb28nLFxuICAgICAgICAgICAgcHJvcHM6IHt9LFxuICAgICAgICAgICAgZGVmYXVsdFByaW9yaXR5OiAxMDAsXG4gICAgICAgICAgICB2YWx1ZTogJ2JhcidcbiAgICAgICAgICB9LFxuICAgICAgICAgIFR5cGU6ICdFQzInXG4gICAgICAgIH0sXG4gICAgICB9LCBSZXNvdXJjZVBhcnQuUHJvcGVydGllcykpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3dpdGggbm8gYWxsb2NhdGlvbiBzdHJhdGVneSBzcGVjaWZpZWQnLCAoKSA9PiB7XG4gICAgICB0ZXN0KCdzaG91bGQgZGVmYXVsdCB0byBhIGJlc3RfZml0IHN0cmF0ZWd5JywgKCkgPT4ge1xuICAgICAgICAvLyBXSEVOXG4gICAgICAgIG5ldyBiYXRjaC5Db21wdXRlRW52aXJvbm1lbnQoc3RhY2ssICd0ZXN0LWNvbXB1dGUtZW52Jywge1xuICAgICAgICAgIG1hbmFnZWQ6IHRydWUsXG4gICAgICAgICAgY29tcHV0ZVJlc291cmNlczoge1xuICAgICAgICAgICAgdnBjLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFRIRU5cbiAgICAgICAgZXhwZWN0KHN0YWNrKS50byhoYXZlUmVzb3VyY2VMaWtlKCdBV1M6OkJhdGNoOjpDb21wdXRlRW52aXJvbm1lbnQnLCB7XG4gICAgICAgICAgVHlwZTogJ01BTkFHRUQnLFxuICAgICAgICAgIFNlcnZpY2VSb2xlOiB7XG4gICAgICAgICAgICAnRm46OkdldEF0dCc6IFtcbiAgICAgICAgICAgICAgJ3Rlc3Rjb21wdXRlZW52UmVzb3VyY2VTZXJ2aWNlSW5zdGFuY2VSb2xlMTA1MDY5QTUnLFxuICAgICAgICAgICAgICAnQXJuJ1xuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LCBSZXNvdXJjZVBhcnQuUHJvcGVydGllcykpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2l0aCBhIG1pbiB2Y3B1IHZhbHVlJywgKCkgPT4ge1xuICAgICAgdGVzdCgnc2hvdWxkIGRlbnkgbGVzcyB0aGFuIDAnLCAoKSA9PiB7XG4gICAgICAgIC8vIFRIRU5cbiAgICAgICAgdGhyb3dzKCgpID0+IHtcbiAgICAgICAgICAvLyBXSEVOXG4gICAgICAgICAgbmV3IGJhdGNoLkNvbXB1dGVFbnZpcm9ubWVudChzdGFjaywgJ3Rlc3QtY29tcHV0ZS1lbnYnLCB7XG4gICAgICAgICAgICBjb21wdXRlUmVzb3VyY2VzOiB7XG4gICAgICAgICAgICAgIHZwYyxcbiAgICAgICAgICAgICAgbWludkNwdXM6IC0xLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgdGVzdCgnY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiB0aGUgbWF4IHZjcHUgdmFsdWUnLCAoKSA9PiB7XG4gICAgICAgIC8vIFRIRU5cbiAgICAgICAgdGhyb3dzKCgpID0+IHtcbiAgICAgICAgICAvLyBXSEVOXG4gICAgICAgICAgbmV3IGJhdGNoLkNvbXB1dGVFbnZpcm9ubWVudChzdGFjaywgJ3Rlc3QtY29tcHV0ZS1lbnYnLCB7XG4gICAgICAgICAgICBjb21wdXRlUmVzb3VyY2VzOiB7XG4gICAgICAgICAgICAgIHZwYyxcbiAgICAgICAgICAgICAgbWludkNwdXM6IDIsXG4gICAgICAgICAgICAgIG1heHZDcHVzOiAxLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aXRoIG5vIG1pbiB2Y3B1IHZhbHVlIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgdGVzdCgnc2hvdWxkIGRlZmF1bHQgdG8gMCcsICgpID0+IHtcbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBuZXcgYmF0Y2guQ29tcHV0ZUVudmlyb25tZW50KHN0YWNrLCAndGVzdC1jb21wdXRlLWVudicsIHtcbiAgICAgICAgICBtYW5hZ2VkOiB0cnVlLFxuICAgICAgICAgIGNvbXB1dGVSZXNvdXJjZXM6IHtcbiAgICAgICAgICAgIHZwYyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBUSEVOXG4gICAgICAgIGV4cGVjdChzdGFjaykudG8oaGF2ZVJlc291cmNlTGlrZSgnQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50Jywge1xuICAgICAgICAgIC4uLmRlZmF1bHRTZXJ2aWNlUm9sZSxcbiAgICAgICAgICAuLi5leHBlY3RlZE1hbmFnZWREZWZhdWx0Q29tcHV0ZVByb3BzKHtcbiAgICAgICAgICAgIE1pbnZDcHVzOiAwLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LCBSZXNvdXJjZVBhcnQuUHJvcGVydGllcykpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2l0aCBubyBtYXggdmNwdSB2YWx1ZSBwcm92aWRlZCcsICgpID0+IHtcbiAgICAgIHRlc3QoJ3Nob3VsZCBkZWZhdWx0IHRvIDI1NicsICgpID0+IHtcbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBuZXcgYmF0Y2guQ29tcHV0ZUVudmlyb25tZW50KHN0YWNrLCAndGVzdC1jb21wdXRlLWVudicsIHtcbiAgICAgICAgICBtYW5hZ2VkOiB0cnVlLFxuICAgICAgICAgIGNvbXB1dGVSZXNvdXJjZXM6IHtcbiAgICAgICAgICAgIHZwYyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBUSEVOXG4gICAgICAgIGV4cGVjdChzdGFjaykudG8oaGF2ZVJlc291cmNlTGlrZSgnQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50Jywge1xuICAgICAgICAgIC4uLmV4cGVjdGVkTWFuYWdlZERlZmF1bHRDb21wdXRlUHJvcHMoe1xuICAgICAgICAgICAgTWF4dkNwdXM6IDI1NixcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSwgUmVzb3VyY2VQYXJ0LlByb3BlcnRpZXMpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3dpdGggbm8gaW5zdGFuY2Ugcm9sZSBzcGVjaWZpZWQnLCAoKSA9PiB7XG4gICAgICB0ZXN0KCdzaG91bGQgZ2VuZXJhdGUgYSByb2xlIGZvciBtZScsICgpID0+IHtcbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBuZXcgYmF0Y2guQ29tcHV0ZUVudmlyb25tZW50KHN0YWNrLCAndGVzdC1jb21wdXRlLWVudicsIHtcbiAgICAgICAgICBtYW5hZ2VkOiB0cnVlLFxuICAgICAgICAgIGNvbXB1dGVSZXNvdXJjZXM6IHtcbiAgICAgICAgICAgIHZwYyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBUSEVOXG4gICAgICAgIGV4cGVjdChzdGFjaykudG8oaGF2ZVJlc291cmNlKCdBV1M6OkJhdGNoOjpDb21wdXRlRW52aXJvbm1lbnQnKSk7XG4gICAgICAgIGV4cGVjdChzdGFjaykudG8oaGF2ZVJlc291cmNlKCdBV1M6OklBTTo6Um9sZScpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3dpdGggbm8gaW5zdGFuY2UgdHlwZSBkZWZpbmVkJywgKCkgPT4ge1xuICAgICAgdGVzdCgnc2hvdWxkIGRlZmF1bHQgdG8gb3B0aW1hbCBtYXRjaGluZycsICgpID0+IHtcbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBuZXcgYmF0Y2guQ29tcHV0ZUVudmlyb25tZW50KHN0YWNrLCAndGVzdC1jb21wdXRlLWVudicsIHtcbiAgICAgICAgICBtYW5hZ2VkOiB0cnVlLFxuICAgICAgICAgIGNvbXB1dGVSZXNvdXJjZXM6IHtcbiAgICAgICAgICAgIHZwYyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBUSEVOXG4gICAgICAgIGV4cGVjdChzdGFjaykudG8oaGF2ZVJlc291cmNlTGlrZSgnQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50Jywge1xuICAgICAgICAgIC4uLmV4cGVjdGVkTWFuYWdlZERlZmF1bHRDb21wdXRlUHJvcHMoe1xuICAgICAgICAgICAgSW5zdGFuY2VUeXBlczogWyAnb3B0aW1hbCcgXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSwgUmVzb3VyY2VQYXJ0LlByb3BlcnRpZXMpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3dpdGggbm8gdHlwZSBzcGVjaWZpZWQnLCAoKSA9PiB7XG4gICAgICB0ZXN0KCdzaG91bGQgZGVmYXVsdCB0byBFQzInLCAoKSA9PiB7XG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgbmV3IGJhdGNoLkNvbXB1dGVFbnZpcm9ubWVudChzdGFjaywgJ3Rlc3QtY29tcHV0ZS1lbnYnLCB7XG4gICAgICAgICAgbWFuYWdlZDogdHJ1ZSxcbiAgICAgICAgICBjb21wdXRlUmVzb3VyY2VzOiB7XG4gICAgICAgICAgICB2cGMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gVEhFTlxuICAgICAgICBleHBlY3Qoc3RhY2spLnRvKGhhdmVSZXNvdXJjZUxpa2UoJ0FXUzo6QmF0Y2g6OkNvbXB1dGVFbnZpcm9ubWVudCcsIHtcbiAgICAgICAgICAuLi5leHBlY3RlZE1hbmFnZWREZWZhdWx0Q29tcHV0ZVByb3BzKHtcbiAgICAgICAgICAgIFR5cGU6IGJhdGNoLkNvbXB1dGVSZXNvdXJjZVR5cGUuT05fREVNQU5ELFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LCBSZXNvdXJjZVBhcnQuUHJvcGVydGllcykpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=

@@ -517,3 +517,21 @@ {

},
"batchmanagedcomputeenvResourceServiceInstanceRole3A9DC7D6": {
"ec2launchtemplate": {
"Type": "AWS::EC2::LaunchTemplate",
"Properties": {
"LaunchTemplateData": {
"BlockDeviceMappings": [
{
"DeviceName": "/dev/xvdcz",
"Ebs": {
"Encrypted": true,
"VolumeSize": 100,
"VolumeType": "gp2"
}
}
]
},
"LaunchTemplateName": "EC2LaunchTemplate"
}
},
"batchunmanagedcomputeenvResourceServiceInstanceRoleCA40AF77": {
"Type": "AWS::IAM::Role",

@@ -549,3 +567,3 @@ "Properties": {

},
"batchmanagedcomputeenv1AA975A9": {
"batchunmanagedcomputeenvED550298": {
"Type": "AWS::Batch::ComputeEnvironment",

@@ -555,3 +573,3 @@ "Properties": {

"Fn::GetAtt": [
"batchmanagedcomputeenvResourceServiceInstanceRole3A9DC7D6",
"batchunmanagedcomputeenvResourceServiceInstanceRoleCA40AF77",
"Arn"

@@ -564,3 +582,3 @@ ]

},
"batchdemandcomputeenvResourceInstanceRole8989496E": {
"batchdemandcomputeenvlaunchtemplateEcsInstanceRole24D4E799": {
"Type": "AWS::IAM::Role",

@@ -574,3 +592,13 @@ "Properties": {

"Principal": {
"Service": "batch.amazonaws.com"
"Service": {
"Fn::Join": [
"",
[
"ec2.",
{
"Ref": "AWS::URLSuffix"
}
]
]
}
}

@@ -580,3 +608,17 @@ }

"Version": "2012-10-17"
}
},
"ManagedPolicyArns": [
{
"Fn::Join": [
"",
[
"arn:",
{
"Ref": "AWS::Partition"
},
":iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role"
]
]
}
]
},

@@ -619,6 +661,51 @@ "DependsOn": [

},
"batchdemandcomputeenvResourceSecurityGroup64711D4D": {
"batchdemandcomputeenvlaunchtemplateInstanceProfile2DEC3A97": {
"Type": "AWS::IAM::InstanceProfile",
"Properties": {
"Roles": [
{
"Ref": "batchdemandcomputeenvlaunchtemplateEcsInstanceRole24D4E799"
}
]
},
"DependsOn": [
"vpcIGWE57CBDCA",
"vpcPrivateSubnet1DefaultRoute1AA8E2E5",
"vpcPrivateSubnet1RouteTableB41A48CC",
"vpcPrivateSubnet1RouteTableAssociation67945127",
"vpcPrivateSubnet1Subnet934893E8",
"vpcPrivateSubnet2DefaultRouteB0E07F99",
"vpcPrivateSubnet2RouteTable7280F23E",
"vpcPrivateSubnet2RouteTableAssociation007E94D3",
"vpcPrivateSubnet2Subnet7031C2BA",
"vpcPrivateSubnet3DefaultRoute30C45F47",
"vpcPrivateSubnet3RouteTable24DA79A0",
"vpcPrivateSubnet3RouteTableAssociationC58B3C2C",
"vpcPrivateSubnet3Subnet985AC459",
"vpcPublicSubnet1DefaultRoute10708846",
"vpcPublicSubnet1EIPDA49DCBE",
"vpcPublicSubnet1NATGateway9C16659E",
"vpcPublicSubnet1RouteTable48A2DF9B",
"vpcPublicSubnet1RouteTableAssociation5D3F4579",
"vpcPublicSubnet1Subnet2E65531E",
"vpcPublicSubnet2DefaultRouteA1EC0F60",
"vpcPublicSubnet2EIP9B3743B1",
"vpcPublicSubnet2NATGateway9B8AE11A",
"vpcPublicSubnet2RouteTableEB40D4CB",
"vpcPublicSubnet2RouteTableAssociation21F81B59",
"vpcPublicSubnet2Subnet009B674F",
"vpcPublicSubnet3DefaultRoute3F356A11",
"vpcPublicSubnet3EIP2C3B9D91",
"vpcPublicSubnet3NATGateway82F6CA9E",
"vpcPublicSubnet3RouteTableA3C00665",
"vpcPublicSubnet3RouteTableAssociationD102D1C4",
"vpcPublicSubnet3Subnet11B92D7C",
"vpcA2121C38",
"vpcVPCGW7984C166"
]
},
"batchdemandcomputeenvlaunchtemplateResourceSecurityGroup23599B84": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"GroupDescription": "batch-stack/batch-demand-compute-env/Resource-Security-Group",
"GroupDescription": "batch-stack/batch-demand-compute-env-launch-template/Resource-Security-Group",
"SecurityGroupEgress": [

@@ -671,3 +758,3 @@ {

},
"batchdemandcomputeenvResourceServiceInstanceRole8DF7CB96": {
"batchdemandcomputeenvlaunchtemplateResourceServiceInstanceRole76AD99CC": {
"Type": "AWS::IAM::Role",

@@ -738,3 +825,3 @@ "Properties": {

},
"batchdemandcomputeenv6131030A": {
"batchdemandcomputeenvlaunchtemplateF8A5B233": {
"Type": "AWS::Batch::ComputeEnvironment",

@@ -744,3 +831,3 @@ "Properties": {

"Fn::GetAtt": [
"batchdemandcomputeenvResourceServiceInstanceRole8DF7CB96",
"batchdemandcomputeenvlaunchtemplateResourceServiceInstanceRole76AD99CC",
"Arn"

@@ -754,3 +841,3 @@ ]

"Fn::GetAtt": [
"batchdemandcomputeenvResourceInstanceRole8989496E",
"batchdemandcomputeenvlaunchtemplateInstanceProfile2DEC3A97",
"Arn"

@@ -762,2 +849,5 @@ ]

],
"LaunchTemplate": {
"LaunchTemplateName": "EC2LaunchTemplate"
},
"MaxvCpus": 256,

@@ -768,3 +858,3 @@ "MinvCpus": 0,

"Fn::GetAtt": [
"batchdemandcomputeenvResourceSecurityGroup64711D4D",
"batchdemandcomputeenvlaunchtemplateResourceSecurityGroup23599B84",
"GroupId"

@@ -825,3 +915,3 @@ ]

},
"batchspotcomputeenvResourceInstanceRoleF6188F15": {
"batchspotcomputeenvEcsInstanceRoleE976826B": {
"Type": "AWS::IAM::Role",

@@ -835,3 +925,13 @@ "Properties": {

"Principal": {
"Service": "batch.amazonaws.com"
"Service": {
"Fn::Join": [
"",
[
"ec2.",
{
"Ref": "AWS::URLSuffix"
}
]
]
}
}

@@ -841,3 +941,17 @@ }

"Version": "2012-10-17"
}
},
"ManagedPolicyArns": [
{
"Fn::Join": [
"",
[
"arn:",
{
"Ref": "AWS::Partition"
},
":iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role"
]
]
}
]
},

@@ -880,2 +994,47 @@ "DependsOn": [

},
"batchspotcomputeenvInstanceProfileFA613AC2": {
"Type": "AWS::IAM::InstanceProfile",
"Properties": {
"Roles": [
{
"Ref": "batchspotcomputeenvEcsInstanceRoleE976826B"
}
]
},
"DependsOn": [
"vpcIGWE57CBDCA",
"vpcPrivateSubnet1DefaultRoute1AA8E2E5",
"vpcPrivateSubnet1RouteTableB41A48CC",
"vpcPrivateSubnet1RouteTableAssociation67945127",
"vpcPrivateSubnet1Subnet934893E8",
"vpcPrivateSubnet2DefaultRouteB0E07F99",
"vpcPrivateSubnet2RouteTable7280F23E",
"vpcPrivateSubnet2RouteTableAssociation007E94D3",
"vpcPrivateSubnet2Subnet7031C2BA",
"vpcPrivateSubnet3DefaultRoute30C45F47",
"vpcPrivateSubnet3RouteTable24DA79A0",
"vpcPrivateSubnet3RouteTableAssociationC58B3C2C",
"vpcPrivateSubnet3Subnet985AC459",
"vpcPublicSubnet1DefaultRoute10708846",
"vpcPublicSubnet1EIPDA49DCBE",
"vpcPublicSubnet1NATGateway9C16659E",
"vpcPublicSubnet1RouteTable48A2DF9B",
"vpcPublicSubnet1RouteTableAssociation5D3F4579",
"vpcPublicSubnet1Subnet2E65531E",
"vpcPublicSubnet2DefaultRouteA1EC0F60",
"vpcPublicSubnet2EIP9B3743B1",
"vpcPublicSubnet2NATGateway9B8AE11A",
"vpcPublicSubnet2RouteTableEB40D4CB",
"vpcPublicSubnet2RouteTableAssociation21F81B59",
"vpcPublicSubnet2Subnet009B674F",
"vpcPublicSubnet3DefaultRoute3F356A11",
"vpcPublicSubnet3EIP2C3B9D91",
"vpcPublicSubnet3NATGateway82F6CA9E",
"vpcPublicSubnet3RouteTableA3C00665",
"vpcPublicSubnet3RouteTableAssociationD102D1C4",
"vpcPublicSubnet3Subnet11B92D7C",
"vpcA2121C38",
"vpcVPCGW7984C166"
]
},
"batchspotcomputeenvResourceSecurityGroup07B09BF9": {

@@ -1009,7 +1168,7 @@ "Type": "AWS::EC2::SecurityGroup",

"ComputeResources": {
"AllocationStrategy": "BEST_FIT",
"AllocationStrategy": "SPOT_CAPACITY_OPTIMIZED",
"BidPercentage": 80,
"InstanceRole": {
"Fn::GetAtt": [
"batchspotcomputeenvResourceInstanceRoleF6188F15",
"batchspotcomputeenvInstanceProfileFA613AC2",
"Arn"

@@ -1104,3 +1263,3 @@ ]

"ComputeEnvironment": {
"Ref": "batchmanagedcomputeenv1AA975A9"
"Ref": "batchunmanagedcomputeenvED550298"
},

@@ -1111,3 +1270,3 @@ "Order": 1

"ComputeEnvironment": {
"Ref": "batchdemandcomputeenv6131030A"
"Ref": "batchdemandcomputeenvlaunchtemplateF8A5B233"
},

@@ -1114,0 +1273,0 @@ "Order": 2

@@ -11,14 +11,34 @@ "use strict";

const vpc = new ec2.Vpc(stack, 'vpc');
const launchTemplate = new ec2.CfnLaunchTemplate(stack, 'ec2-launch-template', {
launchTemplateName: 'EC2LaunchTemplate',
launchTemplateData: {
blockDeviceMappings: [
{
deviceName: '/dev/xvdcz',
ebs: {
encrypted: true,
volumeSize: 100,
volumeType: 'gp2'
}
}
]
}
});
new batch.JobQueue(stack, 'batch-job-queue', {
computeEnvironments: [
{
computeEnvironment: new batch.ComputeEnvironment(stack, 'batch-managed-compute-env'),
computeEnvironment: new batch.ComputeEnvironment(stack, 'batch-unmanaged-compute-env', {
managed: false
}),
order: 1,
},
{
computeEnvironment: new batch.ComputeEnvironment(stack, 'batch-demand-compute-env', {
managed: false,
computeEnvironment: new batch.ComputeEnvironment(stack, 'batch-demand-compute-env-launch-template', {
managed: true,
computeResources: {
type: batch.ComputeResourceType.ON_DEMAND,
vpc,
launchTemplate: {
launchTemplateName: launchTemplate.launchTemplateName,
},
},

@@ -30,3 +50,3 @@ }),

computeEnvironment: new batch.ComputeEnvironment(stack, 'batch-spot-compute-env', {
managed: false,
managed: true,
computeResources: {

@@ -53,2 +73,2 @@ type: batch.ComputeResourceType.SPOT,

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcuYmF0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbnRlZy5iYXRjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHdDQUF3QztBQUN4Qyx3Q0FBd0M7QUFDeEMsd0NBQXdDO0FBQ3hDLHFDQUFxQztBQUNyQyxpQ0FBaUM7QUFFcEIsUUFBQSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFFakMsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUVoRCxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBRXRDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLEVBQUU7SUFDM0MsbUJBQW1CLEVBQUU7UUFDbkI7WUFDRSxrQkFBa0IsRUFBRSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsMkJBQTJCLENBQUM7WUFDcEYsS0FBSyxFQUFFLENBQUM7U0FDVDtRQUNEO1lBQ0Usa0JBQWtCLEVBQUUsSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLDBCQUEwQixFQUFFO2dCQUNsRixPQUFPLEVBQUUsS0FBSztnQkFDZCxnQkFBZ0IsRUFBRTtvQkFDaEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTO29CQUN6QyxHQUFHO2lCQUNKO2FBQ0YsQ0FBQztZQUNGLEtBQUssRUFBRSxDQUFDO1NBQ1Q7UUFDRDtZQUNFLGtCQUFrQixFQUFFLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSx3QkFBd0IsRUFBRTtnQkFDaEYsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsZ0JBQWdCLEVBQUU7b0JBQ2hCLElBQUksRUFBRSxLQUFLLENBQUMsbUJBQW1CLENBQUMsSUFBSTtvQkFDcEMsR0FBRztvQkFDSCxhQUFhLEVBQUUsRUFBRTtpQkFDbEI7YUFDRixDQUFDO1lBQ0YsS0FBSyxFQUFFLENBQUM7U0FDVDtLQUNGO0NBQ0YsQ0FBQyxDQUFDO0FBRUgsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBRXpELElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsd0JBQXdCLEVBQUU7SUFDdkQsU0FBUyxFQUFFO1FBQ1QsS0FBSyxFQUFFLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDO0tBQ3hDO0NBQ0YsQ0FBQyxDQUFDO0FBRUgsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxxQkFBcUIsRUFBRTtJQUNwRCxTQUFTLEVBQUU7UUFDVCxLQUFLLEVBQUUsR0FBRyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUM7S0FDMUQ7Q0FDRixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBlYzIgZnJvbSAnQGF3cy1jZGsvYXdzLWVjMic7XG5pbXBvcnQgKiBhcyBlY3IgZnJvbSAnQGF3cy1jZGsvYXdzLWVjcic7XG5pbXBvcnQgKiBhcyBlY3MgZnJvbSAnQGF3cy1jZGsvYXdzLWVjcyc7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnQGF3cy1jZGsvY29yZSc7XG5pbXBvcnQgKiBhcyBiYXRjaCBmcm9tICcuLi9saWIvJztcblxuZXhwb3J0IGNvbnN0IGFwcCA9IG5ldyBjZGsuQXBwKCk7XG5cbmNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjayhhcHAsICdiYXRjaC1zdGFjaycpO1xuXG5jb25zdCB2cGMgPSBuZXcgZWMyLlZwYyhzdGFjaywgJ3ZwYycpO1xuXG5uZXcgYmF0Y2guSm9iUXVldWUoc3RhY2ssICdiYXRjaC1qb2ItcXVldWUnLCB7XG4gIGNvbXB1dGVFbnZpcm9ubWVudHM6IFtcbiAgICB7XG4gICAgICBjb21wdXRlRW52aXJvbm1lbnQ6IG5ldyBiYXRjaC5Db21wdXRlRW52aXJvbm1lbnQoc3RhY2ssICdiYXRjaC1tYW5hZ2VkLWNvbXB1dGUtZW52JyksXG4gICAgICBvcmRlcjogMSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGNvbXB1dGVFbnZpcm9ubWVudDogbmV3IGJhdGNoLkNvbXB1dGVFbnZpcm9ubWVudChzdGFjaywgJ2JhdGNoLWRlbWFuZC1jb21wdXRlLWVudicsIHtcbiAgICAgICAgbWFuYWdlZDogZmFsc2UsXG4gICAgICAgIGNvbXB1dGVSZXNvdXJjZXM6IHtcbiAgICAgICAgICB0eXBlOiBiYXRjaC5Db21wdXRlUmVzb3VyY2VUeXBlLk9OX0RFTUFORCxcbiAgICAgICAgICB2cGMsXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIG9yZGVyOiAyLFxuICAgIH0sXG4gICAge1xuICAgICAgY29tcHV0ZUVudmlyb25tZW50OiBuZXcgYmF0Y2guQ29tcHV0ZUVudmlyb25tZW50KHN0YWNrLCAnYmF0Y2gtc3BvdC1jb21wdXRlLWVudicsIHtcbiAgICAgICAgbWFuYWdlZDogZmFsc2UsXG4gICAgICAgIGNvbXB1dGVSZXNvdXJjZXM6IHtcbiAgICAgICAgICB0eXBlOiBiYXRjaC5Db21wdXRlUmVzb3VyY2VUeXBlLlNQT1QsXG4gICAgICAgICAgdnBjLFxuICAgICAgICAgIGJpZFBlcmNlbnRhZ2U6IDgwLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBvcmRlcjogMyxcbiAgICB9LFxuICBdXG59KTtcblxuY29uc3QgcmVwbyA9IG5ldyBlY3IuUmVwb3NpdG9yeShzdGFjaywgJ2JhdGNoLWpvYi1yZXBvJyk7XG5cbm5ldyBiYXRjaC5Kb2JEZWZpbml0aW9uKHN0YWNrLCAnYmF0Y2gtam9iLWRlZi1mcm9tLWVjcicsIHtcbiAgY29udGFpbmVyOiB7XG4gICAgaW1hZ2U6IG5ldyBlY3MuRWNySW1hZ2UocmVwbywgJ2xhdGVzdCcpLFxuICB9LFxufSk7XG5cbm5ldyBiYXRjaC5Kb2JEZWZpbml0aW9uKHN0YWNrLCAnYmF0Y2gtam9iLWRlZi1mcm9tLScsIHtcbiAgY29udGFpbmVyOiB7XG4gICAgaW1hZ2U6IGVjcy5Db250YWluZXJJbWFnZS5mcm9tUmVnaXN0cnkoJ2RvY2tlci93aGFsZXNheScpLFxuICB9LFxufSk7XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcuYmF0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbnRlZy5iYXRjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHdDQUF3QztBQUN4Qyx3Q0FBd0M7QUFDeEMsd0NBQXdDO0FBQ3hDLHFDQUFxQztBQUNyQyxpQ0FBaUM7QUFFcEIsUUFBQSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFFakMsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUVoRCxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBRXRDLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxxQkFBcUIsRUFBRTtJQUM3RSxrQkFBa0IsRUFBRSxtQkFBbUI7SUFDdkMsa0JBQWtCLEVBQUU7UUFDbEIsbUJBQW1CLEVBQUU7WUFDbkI7Z0JBQ0UsVUFBVSxFQUFFLFlBQVk7Z0JBQ3hCLEdBQUcsRUFBRTtvQkFDSCxTQUFTLEVBQUUsSUFBSTtvQkFDZixVQUFVLEVBQUUsR0FBRztvQkFDZixVQUFVLEVBQUUsS0FBSztpQkFDbEI7YUFDRjtTQUNGO0tBQ0Y7Q0FDRixDQUFDLENBQUM7QUFFSCxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLGlCQUFpQixFQUFFO0lBQzNDLG1CQUFtQixFQUFFO1FBQ25CO1lBQ0Usa0JBQWtCLEVBQUUsSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLDZCQUE2QixFQUFFO2dCQUNyRixPQUFPLEVBQUUsS0FBSzthQUNmLENBQUM7WUFDRixLQUFLLEVBQUUsQ0FBQztTQUNUO1FBQ0Q7WUFDRSxrQkFBa0IsRUFBRSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsMENBQTBDLEVBQUU7Z0JBQ2xHLE9BQU8sRUFBRSxJQUFJO2dCQUNiLGdCQUFnQixFQUFFO29CQUNoQixJQUFJLEVBQUUsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFNBQVM7b0JBQ3pDLEdBQUc7b0JBQ0gsY0FBYyxFQUFFO3dCQUNkLGtCQUFrQixFQUFFLGNBQWMsQ0FBQyxrQkFBNEI7cUJBQ2hFO2lCQUNGO2FBQ0YsQ0FBQztZQUNGLEtBQUssRUFBRSxDQUFDO1NBQ1Q7UUFDRDtZQUNFLGtCQUFrQixFQUFFLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSx3QkFBd0IsRUFBRTtnQkFDaEYsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsZ0JBQWdCLEVBQUU7b0JBQ2hCLElBQUksRUFBRSxLQUFLLENBQUMsbUJBQW1CLENBQUMsSUFBSTtvQkFDcEMsR0FBRztvQkFDSCxhQUFhLEVBQUUsRUFBRTtpQkFDbEI7YUFDRixDQUFDO1lBQ0YsS0FBSyxFQUFFLENBQUM7U0FDVDtLQUNGO0NBQ0YsQ0FBQyxDQUFDO0FBRUgsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBRXpELElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsd0JBQXdCLEVBQUU7SUFDdkQsU0FBUyxFQUFFO1FBQ1QsS0FBSyxFQUFFLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDO0tBQ3hDO0NBQ0YsQ0FBQyxDQUFDO0FBRUgsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxxQkFBcUIsRUFBRTtJQUNwRCxTQUFTLEVBQUU7UUFDVCxLQUFLLEVBQUUsR0FBRyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUM7S0FDMUQ7Q0FDRixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBlYzIgZnJvbSAnQGF3cy1jZGsvYXdzLWVjMic7XG5pbXBvcnQgKiBhcyBlY3IgZnJvbSAnQGF3cy1jZGsvYXdzLWVjcic7XG5pbXBvcnQgKiBhcyBlY3MgZnJvbSAnQGF3cy1jZGsvYXdzLWVjcyc7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnQGF3cy1jZGsvY29yZSc7XG5pbXBvcnQgKiBhcyBiYXRjaCBmcm9tICcuLi9saWIvJztcblxuZXhwb3J0IGNvbnN0IGFwcCA9IG5ldyBjZGsuQXBwKCk7XG5cbmNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjayhhcHAsICdiYXRjaC1zdGFjaycpO1xuXG5jb25zdCB2cGMgPSBuZXcgZWMyLlZwYyhzdGFjaywgJ3ZwYycpO1xuXG5jb25zdCBsYXVuY2hUZW1wbGF0ZSA9IG5ldyBlYzIuQ2ZuTGF1bmNoVGVtcGxhdGUoc3RhY2ssICdlYzItbGF1bmNoLXRlbXBsYXRlJywge1xuICBsYXVuY2hUZW1wbGF0ZU5hbWU6ICdFQzJMYXVuY2hUZW1wbGF0ZScsXG4gIGxhdW5jaFRlbXBsYXRlRGF0YToge1xuICAgIGJsb2NrRGV2aWNlTWFwcGluZ3M6IFtcbiAgICAgIHtcbiAgICAgICAgZGV2aWNlTmFtZTogJy9kZXYveHZkY3onLFxuICAgICAgICBlYnM6IHtcbiAgICAgICAgICBlbmNyeXB0ZWQ6IHRydWUsXG4gICAgICAgICAgdm9sdW1lU2l6ZTogMTAwLFxuICAgICAgICAgIHZvbHVtZVR5cGU6ICdncDInXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdXG4gIH1cbn0pO1xuXG5uZXcgYmF0Y2guSm9iUXVldWUoc3RhY2ssICdiYXRjaC1qb2ItcXVldWUnLCB7XG4gIGNvbXB1dGVFbnZpcm9ubWVudHM6IFtcbiAgICB7XG4gICAgICBjb21wdXRlRW52aXJvbm1lbnQ6IG5ldyBiYXRjaC5Db21wdXRlRW52aXJvbm1lbnQoc3RhY2ssICdiYXRjaC11bm1hbmFnZWQtY29tcHV0ZS1lbnYnLCB7XG4gICAgICAgIG1hbmFnZWQ6IGZhbHNlXG4gICAgICB9KSxcbiAgICAgIG9yZGVyOiAxLFxuICAgIH0sXG4gICAge1xuICAgICAgY29tcHV0ZUVudmlyb25tZW50OiBuZXcgYmF0Y2guQ29tcHV0ZUVudmlyb25tZW50KHN0YWNrLCAnYmF0Y2gtZGVtYW5kLWNvbXB1dGUtZW52LWxhdW5jaC10ZW1wbGF0ZScsIHtcbiAgICAgICAgbWFuYWdlZDogdHJ1ZSxcbiAgICAgICAgY29tcHV0ZVJlc291cmNlczoge1xuICAgICAgICAgIHR5cGU6IGJhdGNoLkNvbXB1dGVSZXNvdXJjZVR5cGUuT05fREVNQU5ELFxuICAgICAgICAgIHZwYyxcbiAgICAgICAgICBsYXVuY2hUZW1wbGF0ZToge1xuICAgICAgICAgICAgbGF1bmNoVGVtcGxhdGVOYW1lOiBsYXVuY2hUZW1wbGF0ZS5sYXVuY2hUZW1wbGF0ZU5hbWUgYXMgc3RyaW5nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIG9yZGVyOiAyLFxuICAgIH0sXG4gICAge1xuICAgICAgY29tcHV0ZUVudmlyb25tZW50OiBuZXcgYmF0Y2guQ29tcHV0ZUVudmlyb25tZW50KHN0YWNrLCAnYmF0Y2gtc3BvdC1jb21wdXRlLWVudicsIHtcbiAgICAgICAgbWFuYWdlZDogdHJ1ZSxcbiAgICAgICAgY29tcHV0ZVJlc291cmNlczoge1xuICAgICAgICAgIHR5cGU6IGJhdGNoLkNvbXB1dGVSZXNvdXJjZVR5cGUuU1BPVCxcbiAgICAgICAgICB2cGMsXG4gICAgICAgICAgYmlkUGVyY2VudGFnZTogODAsXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIG9yZGVyOiAzLFxuICAgIH0sXG4gIF1cbn0pO1xuXG5jb25zdCByZXBvID0gbmV3IGVjci5SZXBvc2l0b3J5KHN0YWNrLCAnYmF0Y2gtam9iLXJlcG8nKTtcblxubmV3IGJhdGNoLkpvYkRlZmluaXRpb24oc3RhY2ssICdiYXRjaC1qb2ItZGVmLWZyb20tZWNyJywge1xuICBjb250YWluZXI6IHtcbiAgICBpbWFnZTogbmV3IGVjcy5FY3JJbWFnZShyZXBvLCAnbGF0ZXN0JyksXG4gIH0sXG59KTtcblxubmV3IGJhdGNoLkpvYkRlZmluaXRpb24oc3RhY2ssICdiYXRjaC1qb2ItZGVmLWZyb20tJywge1xuICBjb250YWluZXI6IHtcbiAgICBpbWFnZTogZWNzLkNvbnRhaW5lckltYWdlLmZyb21SZWdpc3RyeSgnZG9ja2VyL3doYWxlc2F5JyksXG4gIH0sXG59KTtcbiJdfQ==

@@ -12,3 +12,5 @@ "use strict";

stack = new cdk.Stack();
computeEnvironment = new batch.ComputeEnvironment(stack, 'test-compute-env');
computeEnvironment = new batch.ComputeEnvironment(stack, 'test-compute-env', {
managed: false
});
});

@@ -31,3 +33,3 @@ it('can be imported from an ARN', () => {

});
it('renders the correct cloudformation properties', () => {
it('renders the correct CloudFormation properties', () => {
// WHEN

@@ -78,2 +80,2 @@ const props = {

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLXF1ZXVlLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJqb2ItcXVldWUudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDRDQUErQztBQUMvQyxnQ0FBOEI7QUFDOUIscUNBQXFDO0FBQ3JDLGdDQUFnQztBQUVoQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO0lBQy9CLElBQUksS0FBZ0IsQ0FBQztJQUNyQixJQUFJLGtCQUE0QyxDQUFDO0lBRWpELFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEIsa0JBQWtCLEdBQUcsSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDL0UsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxFQUFFO1FBQ3JDLE9BQU87UUFDUCxNQUFNLFlBQVksR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFO1lBQy9ELFFBQVEsRUFBRSxDQUFDO1lBQ1gsT0FBTyxFQUFFLEtBQUs7WUFDZCxtQkFBbUIsRUFBRTtnQkFDbkI7b0JBQ0Usa0JBQWtCO29CQUNsQixLQUFLLEVBQUUsQ0FBQztpQkFDVDthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLHlCQUF5QixFQUFFLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUUvRyxPQUFPO1FBQ1AsTUFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3BFLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLCtDQUErQyxFQUFFLEdBQUcsRUFBRTtRQUN2RCxPQUFPO1FBQ1AsTUFBTSxLQUFLLEdBQXdCO1lBQ2pDLFFBQVEsRUFBRSxDQUFDO1lBQ1gsT0FBTyxFQUFFLEtBQUs7WUFDZCxtQkFBbUIsRUFBRTtnQkFDbkI7b0JBQ0Usa0JBQWtCO29CQUNsQixLQUFLLEVBQUUsQ0FBQztpQkFDVDthQUNGO1lBQ0QsWUFBWSxFQUFFLHFCQUFxQjtTQUNwQyxDQUFDO1FBQ0YsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUVuRCxPQUFPO1FBQ1AsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQixFQUFFO1lBQ3ZELFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtZQUNoQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVO1lBQzdDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4Qix1QkFBdUIsRUFBRTtnQkFDdkI7b0JBQ0Usa0JBQWtCLEVBQUU7d0JBQ2xCLEdBQUcsRUFBRSx3QkFBd0I7cUJBQzlCO29CQUNELEtBQUssRUFBRSxDQUFDO2lCQUNUO2FBQ0Y7U0FDRixFQUFFLHFCQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMkNBQTJDLEVBQUUsR0FBRyxFQUFFO1FBQ25ELE9BQU87UUFDUCxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFO1lBQzFDLE9BQU8sRUFBRSxLQUFLO1lBQ2QsbUJBQW1CLEVBQUU7Z0JBQ25CO29CQUNFLGtCQUFrQjtvQkFDbEIsS0FBSyxFQUFFLENBQUM7aUJBQ1Q7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILE9BQU87UUFDUCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCLEVBQUU7WUFDdkQsUUFBUSxFQUFFLENBQUM7U0FDWixFQUFFLHFCQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlc291cmNlUGFydCB9IGZyb20gJ0Bhd3MtY2RrL2Fzc2VydCc7XG5pbXBvcnQgJ0Bhd3MtY2RrL2Fzc2VydC9qZXN0JztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdAYXdzLWNkay9jb3JlJztcbmltcG9ydCAqIGFzIGJhdGNoIGZyb20gJy4uL2xpYic7XG5cbmRlc2NyaWJlKCdCYXRjaCBKb2IgUXVldWUnLCAoKSA9PiB7XG4gIGxldCBzdGFjazogY2RrLlN0YWNrO1xuICBsZXQgY29tcHV0ZUVudmlyb25tZW50OiBiYXRjaC5Db21wdXRlRW52aXJvbm1lbnQ7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG4gICAgY29tcHV0ZUVudmlyb25tZW50ID0gbmV3IGJhdGNoLkNvbXB1dGVFbnZpcm9ubWVudChzdGFjaywgJ3Rlc3QtY29tcHV0ZS1lbnYnKTtcbiAgfSk7XG5cbiAgaXQoJ2NhbiBiZSBpbXBvcnRlZCBmcm9tIGFuIEFSTicsICgpID0+IHtcbiAgICAvLyBXSEVOXG4gICAgY29uc3QgZXhpc3RpbmdKb2JRID0gbmV3IGJhdGNoLkpvYlF1ZXVlKHN0YWNrLCAndGVzdC1qb2ItcXVldWUnLCB7XG4gICAgICBwcmlvcml0eTogMSxcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgY29tcHV0ZUVudmlyb25tZW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgY29tcHV0ZUVudmlyb25tZW50LFxuICAgICAgICAgIG9yZGVyOiAxLFxuICAgICAgICB9XG4gICAgICBdLFxuICAgIH0pO1xuICAgIGNvbnN0IGpvYlFGcm9tQXJuID0gYmF0Y2guSm9iUXVldWUuZnJvbUpvYlF1ZXVlQXJuKHN0YWNrLCAndGVzdC1qb2ItcXVldWUtZnJvbS1hcm4nLCBleGlzdGluZ0pvYlEuam9iUXVldWVBcm4pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChqb2JRRnJvbUFybi5qb2JRdWV1ZUFybikudG9FcXVhbChleGlzdGluZ0pvYlEuam9iUXVldWVBcm4pO1xuICB9KTtcblxuICBpdCgncmVuZGVycyB0aGUgY29ycmVjdCBjbG91ZGZvcm1hdGlvbiBwcm9wZXJ0aWVzJywgKCkgPT4ge1xuICAgIC8vIFdIRU5cbiAgICBjb25zdCBwcm9wczogYmF0Y2guSm9iUXVldWVQcm9wcyA9IHtcbiAgICAgIHByaW9yaXR5OiAxLFxuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBjb21wdXRlRW52aXJvbm1lbnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjb21wdXRlRW52aXJvbm1lbnQsXG4gICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgam9iUXVldWVOYW1lOiAndGVzdC1qb2ItcXVldWUtbmFtZSdcbiAgICB9O1xuICAgIG5ldyBiYXRjaC5Kb2JRdWV1ZShzdGFjaywgJ3Rlc3Qtam9iLXF1ZXVlJywgcHJvcHMpO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChzdGFjaykudG9IYXZlUmVzb3VyY2VMaWtlKCdBV1M6OkJhdGNoOjpKb2JRdWV1ZScsIHtcbiAgICAgIEpvYlF1ZXVlTmFtZTogcHJvcHMuam9iUXVldWVOYW1lLFxuICAgICAgU3RhdGU6IHByb3BzLmVuYWJsZWQgPyAnRU5BQkxFRCcgOiAnRElTQUJMRUQnLFxuICAgICAgUHJpb3JpdHk6IHByb3BzLnByaW9yaXR5LFxuICAgICAgQ29tcHV0ZUVudmlyb25tZW50T3JkZXI6IFtcbiAgICAgICAge1xuICAgICAgICAgIENvbXB1dGVFbnZpcm9ubWVudDoge1xuICAgICAgICAgICAgUmVmOiAndGVzdGNvbXB1dGVlbnY1NDdGRkQxQSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIE9yZGVyOiAxLFxuICAgICAgICB9XG4gICAgICBdLFxuICAgIH0sIFJlc291cmNlUGFydC5Qcm9wZXJ0aWVzKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBoYXZlIGEgZGVmYXVsdCBxdWV1ZSBwcmlvcml0eSBvZiAxJywgKCkgPT4ge1xuICAgIC8vIFdIRU5cbiAgICBuZXcgYmF0Y2guSm9iUXVldWUoc3RhY2ssICd0ZXN0LWpvYi1xdWV1ZScsIHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgY29tcHV0ZUVudmlyb25tZW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgY29tcHV0ZUVudmlyb25tZW50LFxuICAgICAgICAgIG9yZGVyOiAxLFxuICAgICAgICB9XG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChzdGFjaykudG9IYXZlUmVzb3VyY2VMaWtlKCdBV1M6OkJhdGNoOjpKb2JRdWV1ZScsIHtcbiAgICAgIFByaW9yaXR5OiAxLFxuICAgIH0sIFJlc291cmNlUGFydC5Qcm9wZXJ0aWVzKTtcbiAgfSk7XG59KTtcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLXF1ZXVlLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJqb2ItcXVldWUudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDRDQUErQztBQUMvQyxnQ0FBOEI7QUFDOUIscUNBQXFDO0FBQ3JDLGdDQUFnQztBQUVoQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO0lBQy9CLElBQUksS0FBZ0IsQ0FBQztJQUNyQixJQUFJLGtCQUE0QyxDQUFDO0lBRWpELFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEIsa0JBQWtCLEdBQUcsSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLGtCQUFrQixFQUFFO1lBQzNFLE9BQU8sRUFBRSxLQUFLO1NBQ2YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxFQUFFO1FBQ3JDLE9BQU87UUFDUCxNQUFNLFlBQVksR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFO1lBQy9ELFFBQVEsRUFBRSxDQUFDO1lBQ1gsT0FBTyxFQUFFLEtBQUs7WUFDZCxtQkFBbUIsRUFBRTtnQkFDbkI7b0JBQ0Usa0JBQWtCO29CQUNsQixLQUFLLEVBQUUsQ0FBQztpQkFDVDthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLHlCQUF5QixFQUFFLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUUvRyxPQUFPO1FBQ1AsTUFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3BFLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLCtDQUErQyxFQUFFLEdBQUcsRUFBRTtRQUN2RCxPQUFPO1FBQ1AsTUFBTSxLQUFLLEdBQXdCO1lBQ2pDLFFBQVEsRUFBRSxDQUFDO1lBQ1gsT0FBTyxFQUFFLEtBQUs7WUFDZCxtQkFBbUIsRUFBRTtnQkFDbkI7b0JBQ0Usa0JBQWtCO29CQUNsQixLQUFLLEVBQUUsQ0FBQztpQkFDVDthQUNGO1lBQ0QsWUFBWSxFQUFFLHFCQUFxQjtTQUNwQyxDQUFDO1FBQ0YsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUVuRCxPQUFPO1FBQ1AsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQixFQUFFO1lBQ3ZELFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtZQUNoQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVO1lBQzdDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4Qix1QkFBdUIsRUFBRTtnQkFDdkI7b0JBQ0Usa0JBQWtCLEVBQUU7d0JBQ2xCLEdBQUcsRUFBRSx3QkFBd0I7cUJBQzlCO29CQUNELEtBQUssRUFBRSxDQUFDO2lCQUNUO2FBQ0Y7U0FDRixFQUFFLHFCQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMkNBQTJDLEVBQUUsR0FBRyxFQUFFO1FBQ25ELE9BQU87UUFDUCxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFO1lBQzFDLE9BQU8sRUFBRSxLQUFLO1lBQ2QsbUJBQW1CLEVBQUU7Z0JBQ25CO29CQUNFLGtCQUFrQjtvQkFDbEIsS0FBSyxFQUFFLENBQUM7aUJBQ1Q7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILE9BQU87UUFDUCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCLEVBQUU7WUFDdkQsUUFBUSxFQUFFLENBQUM7U0FDWixFQUFFLHFCQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlc291cmNlUGFydCB9IGZyb20gJ0Bhd3MtY2RrL2Fzc2VydCc7XG5pbXBvcnQgJ0Bhd3MtY2RrL2Fzc2VydC9qZXN0JztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdAYXdzLWNkay9jb3JlJztcbmltcG9ydCAqIGFzIGJhdGNoIGZyb20gJy4uL2xpYic7XG5cbmRlc2NyaWJlKCdCYXRjaCBKb2IgUXVldWUnLCAoKSA9PiB7XG4gIGxldCBzdGFjazogY2RrLlN0YWNrO1xuICBsZXQgY29tcHV0ZUVudmlyb25tZW50OiBiYXRjaC5Db21wdXRlRW52aXJvbm1lbnQ7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG4gICAgY29tcHV0ZUVudmlyb25tZW50ID0gbmV3IGJhdGNoLkNvbXB1dGVFbnZpcm9ubWVudChzdGFjaywgJ3Rlc3QtY29tcHV0ZS1lbnYnLCB7XG4gICAgICBtYW5hZ2VkOiBmYWxzZVxuICAgIH0pO1xuICB9KTtcblxuICBpdCgnY2FuIGJlIGltcG9ydGVkIGZyb20gYW4gQVJOJywgKCkgPT4ge1xuICAgIC8vIFdIRU5cbiAgICBjb25zdCBleGlzdGluZ0pvYlEgPSBuZXcgYmF0Y2guSm9iUXVldWUoc3RhY2ssICd0ZXN0LWpvYi1xdWV1ZScsIHtcbiAgICAgIHByaW9yaXR5OiAxLFxuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBjb21wdXRlRW52aXJvbm1lbnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjb21wdXRlRW52aXJvbm1lbnQsXG4gICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgfSk7XG4gICAgY29uc3Qgam9iUUZyb21Bcm4gPSBiYXRjaC5Kb2JRdWV1ZS5mcm9tSm9iUXVldWVBcm4oc3RhY2ssICd0ZXN0LWpvYi1xdWV1ZS1mcm9tLWFybicsIGV4aXN0aW5nSm9iUS5qb2JRdWV1ZUFybik7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGpvYlFGcm9tQXJuLmpvYlF1ZXVlQXJuKS50b0VxdWFsKGV4aXN0aW5nSm9iUS5qb2JRdWV1ZUFybik7XG4gIH0pO1xuXG4gIGl0KCdyZW5kZXJzIHRoZSBjb3JyZWN0IENsb3VkRm9ybWF0aW9uIHByb3BlcnRpZXMnLCAoKSA9PiB7XG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IHByb3BzOiBiYXRjaC5Kb2JRdWV1ZVByb3BzID0ge1xuICAgICAgcHJpb3JpdHk6IDEsXG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGNvbXB1dGVFbnZpcm9ubWVudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGNvbXB1dGVFbnZpcm9ubWVudCxcbiAgICAgICAgICBvcmRlcjogMSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBqb2JRdWV1ZU5hbWU6ICd0ZXN0LWpvYi1xdWV1ZS1uYW1lJ1xuICAgIH07XG4gICAgbmV3IGJhdGNoLkpvYlF1ZXVlKHN0YWNrLCAndGVzdC1qb2ItcXVldWUnLCBwcm9wcyk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KHN0YWNrKS50b0hhdmVSZXNvdXJjZUxpa2UoJ0FXUzo6QmF0Y2g6OkpvYlF1ZXVlJywge1xuICAgICAgSm9iUXVldWVOYW1lOiBwcm9wcy5qb2JRdWV1ZU5hbWUsXG4gICAgICBTdGF0ZTogcHJvcHMuZW5hYmxlZCA/ICdFTkFCTEVEJyA6ICdESVNBQkxFRCcsXG4gICAgICBQcmlvcml0eTogcHJvcHMucHJpb3JpdHksXG4gICAgICBDb21wdXRlRW52aXJvbm1lbnRPcmRlcjogW1xuICAgICAgICB7XG4gICAgICAgICAgQ29tcHV0ZUVudmlyb25tZW50OiB7XG4gICAgICAgICAgICBSZWY6ICd0ZXN0Y29tcHV0ZWVudjU0N0ZGRDFBJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgT3JkZXI6IDEsXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgfSwgUmVzb3VyY2VQYXJ0LlByb3BlcnRpZXMpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGhhdmUgYSBkZWZhdWx0IHF1ZXVlIHByaW9yaXR5IG9mIDEnLCAoKSA9PiB7XG4gICAgLy8gV0hFTlxuICAgIG5ldyBiYXRjaC5Kb2JRdWV1ZShzdGFjaywgJ3Rlc3Qtam9iLXF1ZXVlJywge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBjb21wdXRlRW52aXJvbm1lbnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjb21wdXRlRW52aXJvbm1lbnQsXG4gICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KHN0YWNrKS50b0hhdmVSZXNvdXJjZUxpa2UoJ0FXUzo6QmF0Y2g6OkpvYlF1ZXVlJywge1xuICAgICAgUHJpb3JpdHk6IDEsXG4gICAgfSwgUmVzb3VyY2VQYXJ0LlByb3BlcnRpZXMpO1xuICB9KTtcbn0pO1xuIl19

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc